gecko/lib/api.dart

303 lines
8.1 KiB
Dart

import 'dart:math';
import "package:dio/dio.dart" as dio;
import 'package:gql/language.dart' as gqlLang;
import 'package:gql_dio_link/gql_dio_link.dart';
import 'package:gql_exec/gql_exec.dart';
import "package:gql_link/gql_link.dart";
import 'package:intl/intl.dart';
// Configure node
const graphqlEndpoint = "https://g1.librelois.fr/gva";
// // Check node connection
// Future getHttp() async {
// try {
// final client = await dio.Dio().get(graphqlEndpoint);
// print(client);
// return 0;
// } catch (e) {
// print(e);
// return e;
// }
// }
// Build queries
Future buildQ(query) async {
var client;
try {
client = dio.Dio();
print(client);
} catch (e) {
print(e);
}
// final client = dio.Dio();
Link link;
link = DioLink(
graphqlEndpoint,
client: client,
);
try {
final res = await link
.request(Request(
operation: Operation(document: gqlLang.parseString(query)),
))
.first;
return res;
} catch (e) {
print("Erreur: Noeud injoingnable.");
return 2;
}
}
/* Requests functions */
// Get current UD
Future getUD() async {
const query = """{
currentUd {
amount
base
}
}""";
final result = await buildQ(query);
return result.data["currentUd"]["amount"];
}
// Get balance
Future getBalance(String pubkey) async {
var query = """{
balance(script: "$pubkey") {
amount
base
}
}""";
final result = await buildQ(query);
return result.data["balance"]["amount"] / 100;
}
// // Get history
// Future getHistory(String pubkey) async {
// print(pubkey);
// var number = 20;
// var query = """{
// txsHistoryBc(
// pubkeyOrScript: "$pubkey"
// pagination: { pageSize: $number, ord: DESC }
// ) {
// both {
// pageInfo {
// hasPreviousPage
// hasNextPage
// startCursor
// endCursor
// }
// edges {
// direction
// node {
// currency
// issuers
// outputs
// comment
// writtenTime
// }
// }
// }
// }
// txsHistoryMp(pubkey: "$pubkey") {
// receiving {
// currency
// issuers
// comment
// outputs
// writtenTime
// }
// sending {
// currency
// issuers
// comment
// outputs
// writtenTime
// }
// }
// currentUd {
// amount
// base
// }
// }""";
// final res = await buildQ(query);
// // Parse history
// var resBC, resMP;
// print(res.toString());
// try {
// resBC = res.data["txsHistoryBc"]['both']['edges'];
// resMP = res.data["txsHistoryMp"];
// } catch (e) {
// return false;
// }
// var i = 0;
// // String outPubkey;
// var transBC = [];
// final currentBase = res.data['currentUd']['base'];
// final currentUD = res.data['currentUd']['amount'] / 100;
// // Get tx blockchain
// for (final trans in resBC) {
// var direction = trans['direction'];
// print(trans);
// final transaction = trans['node'];
// var output = transaction['outputs'][0];
// print("DEBUG1 " + transaction['writtenTime'].toString());
// transBC.add(i);
// transBC[i] = [];
// transBC[i].add(transaction['writtenTime']);
// var amountBrut = int.parse(output.split(':')[0]);
// final base = int.parse(output.split(':')[1]);
// final applyBase = base - currentBase;
// final amount = amountBrut * pow(10, applyBase) / 100;
// var amountUD = amount / currentUD;
// if (direction == "RECEIVED") {
// transBC[i].add(transaction['issuers'][0]);
// transBC[i].add(amount);
// transBC[i].add(amountUD.toStringAsFixed(2));
// } else if (direction == "SENT") {
// final outPubkey = output.split("SIG(")[1].replaceAll(')', '');
// transBC[i].add(outPubkey);
// transBC[i].add(-amount);
// transBC[i].add(amountUD.toStringAsFixed(2));
// }
// transBC[i].add(transaction['comment']);
// transBC[i].add(base);
// i++;
// }
// // Get tx mempool
// var transMP = [];
// i = 0;
// for (var transaction in resMP['receiving']) {
// if (transMP == null) {
// break;
// }
// var output = transaction['outputs'][0];
// var outPubkey = output.split("SIG(")[1].replaceAll(')', '');
// transMP.add(i);
// transMP[i] = [];
// transMP[i].add(transaction['writtenTime']);
// transMP[i].add(transaction['issuers'][0]);
// var amountBrut = int.parse(output.split(':')[0]);
// final base = int.parse(output.split(':')[1]);
// final applyBase = base - currentBase;
// final amount = amountBrut * pow(10, applyBase) / 100;
// transMP[i].add(amount);
// final amountUD = amount / currentUD;
// transMP[i].add(amountUD.toStringAsFixed(2));
// transMP[i].add(transaction['comment']);
// transMP[i].add(base);
// transMP[i].add(outPubkey);
// i++;
// }
// transMP = [];
// i = 0;
// for (var transaction in resMP['sending']) {
// if (transMP == null) {
// break;
// }
// var output = transaction['outputs'][0];
// var outPubkey = output.split("SIG(")[1].replaceAll(')', '');
// transMP.add(i);
// transMP[i] = [];
// transMP[i].add(transaction['writtenTime']);
// transMP[i].add(transaction['issuers'][0]);
// var amountBrut = int.parse(output.split(':')[0]);
// final base = int.parse(output.split(':')[1]);
// final applyBase = base - currentBase;
// final amount = amountBrut * pow(10, applyBase) / 100;
// transMP[i].add(-amount);
// final amountUD = amount / currentUD;
// transMP[i].add(amountUD.toStringAsFixed(2));
// transMP[i].add(transaction['comment']);
// transMP[i].add(base);
// transMP[i].add(outPubkey);
// i++;
// }
// // Order transactions by date
// transBC.sort((b, a) => Comparable.compare(a[0], b[0]));
// transMP.sort((b, a) => Comparable.compare(a[0], b[0]));
// // // Keep only base if there is base change
// // var lastBase = 0;
// // for (i in trans) {
// // if (i[5] == lastBase){
// // i[6] = null;
// // }
// // else {
// // lastBase = i[6];
// // }
// // print(trans);
// return [transBC, transMP];
// }
// NEW WAY //
List parseHistory(txs) {
// print(blockchainTX[0]['node']['comment']);
var transBC = [];
int i = 0;
final currentBase = 0;
double currentUD = 10.54;
for (final trans in txs) {
var direction = trans['direction'];
// print(trans);
final transaction = trans['node'];
var output = transaction['outputs'][0];
print("DEBUG comment: " + transaction['comment'].toString());
transBC.add(i);
transBC[i] = [];
final dateBrut =
DateTime.fromMillisecondsSinceEpoch(transaction['writtenTime'] * 1000);
final DateFormat formatter = DateFormat('dd-MM-yy - H:M');
final date = formatter.format(dateBrut);
transBC[i].add(transaction['writtenTime']);
transBC[i].add(date);
var amountBrut = int.parse(output.split(':')[0]);
final base = int.parse(output.split(':')[1]);
final applyBase = base - currentBase;
final amount = amountBrut * pow(10, applyBase) / 100;
var amountUD = amount / currentUD;
if (direction == "RECEIVED") {
transBC[i].add(transaction['issuers'][0]);
transBC[i].add(amount);
transBC[i].add(amountUD.toStringAsFixed(2));
} else if (direction == "SENT") {
final outPubkey = output.split("SIG(")[1].replaceAll(')', '');
transBC[i].add(outPubkey);
transBC[i].add(-amount);
transBC[i].add(amountUD.toStringAsFixed(2));
}
transBC[i].add(transaction['comment']);
i++;
}
// transBC.sort((b, a) => Comparable.compare(a[0], b[0]));
return transBC;
}