forked from axiom-team/gecko
304 lines
8.1 KiB
Dart
304 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";
|
|
const graphqlEndpoint = 'http://127.0.0.1:10060/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;
|
|
}
|