2020-12-13 18:31:17 +01:00
|
|
|
import 'dart:math';
|
2020-12-13 05:43:52 +01:00
|
|
|
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";
|
|
|
|
|
2020-12-13 15:37:39 +01:00
|
|
|
// Configure node
|
2020-12-13 05:43:52 +01:00
|
|
|
const graphqlEndpoint = "https://g1.librelois.fr/gva";
|
|
|
|
|
2020-12-14 20:18:07 +01:00
|
|
|
// // Check node connection
|
|
|
|
// Future getHttp() async {
|
|
|
|
// try {
|
|
|
|
// final client = await dio.Dio().get(graphqlEndpoint);
|
|
|
|
// print(client);
|
|
|
|
// return 0;
|
|
|
|
// } catch (e) {
|
|
|
|
// print(e);
|
|
|
|
// return e;
|
|
|
|
// }
|
|
|
|
// }
|
|
|
|
|
2020-12-13 18:31:17 +01:00
|
|
|
// Build queries
|
2020-12-13 15:37:39 +01:00
|
|
|
Future buildQ(query) async {
|
2020-12-14 20:18:07 +01:00
|
|
|
var client;
|
|
|
|
try {
|
|
|
|
client = dio.Dio();
|
|
|
|
print(client);
|
|
|
|
} catch (e) {
|
|
|
|
print(e);
|
|
|
|
}
|
|
|
|
// final client = dio.Dio();
|
|
|
|
Link link;
|
|
|
|
link = DioLink(
|
2020-12-13 05:43:52 +01:00
|
|
|
graphqlEndpoint,
|
|
|
|
client: client,
|
|
|
|
);
|
|
|
|
|
2020-12-14 20:18:07 +01:00
|
|
|
try {
|
|
|
|
final res = await link
|
|
|
|
.request(Request(
|
|
|
|
operation: Operation(document: gqlLang.parseString(query)),
|
|
|
|
))
|
|
|
|
.first;
|
|
|
|
return res;
|
|
|
|
} catch (e) {
|
|
|
|
print("Erreur: Noeud injoingnable.");
|
|
|
|
return 2;
|
|
|
|
}
|
2020-12-13 15:37:39 +01:00
|
|
|
}
|
|
|
|
|
|
|
|
/* 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;
|
2020-12-13 05:43:52 +01:00
|
|
|
}
|
|
|
|
|
2020-12-13 15:37:39 +01:00
|
|
|
// Get history
|
2020-12-13 05:43:52 +01:00
|
|
|
Future getHistory(String pubkey) async {
|
|
|
|
print(pubkey);
|
2020-12-16 01:36:20 +01:00
|
|
|
var number = 3;
|
2020-12-13 15:37:39 +01:00
|
|
|
var query = """{
|
2020-12-16 01:36:20 +01:00
|
|
|
txsHistoryBc(
|
|
|
|
pubkeyOrScript: "$pubkey"
|
|
|
|
pagination: { pageSize: $number, ord: DESC }
|
|
|
|
) {
|
|
|
|
both {
|
|
|
|
pageInfo {
|
|
|
|
hasPreviousPage
|
|
|
|
hasNextPage
|
|
|
|
}
|
|
|
|
edges {
|
|
|
|
direction
|
|
|
|
node {
|
|
|
|
currency
|
|
|
|
issuers
|
|
|
|
outputs
|
|
|
|
comment
|
|
|
|
writtenTime
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
2020-12-14 20:18:07 +01:00
|
|
|
}
|
|
|
|
txsHistoryMp(pubkey: "$pubkey") {
|
2020-12-16 01:36:20 +01:00
|
|
|
receiving {
|
|
|
|
currency
|
|
|
|
issuers
|
|
|
|
comment
|
|
|
|
outputs
|
|
|
|
writtenTime
|
|
|
|
}
|
2020-12-16 02:41:11 +01:00
|
|
|
sending {
|
2020-12-16 01:36:20 +01:00
|
|
|
currency
|
|
|
|
issuers
|
|
|
|
comment
|
|
|
|
outputs
|
|
|
|
writtenTime
|
|
|
|
}
|
2020-12-13 05:43:52 +01:00
|
|
|
}
|
2020-12-13 18:31:17 +01:00
|
|
|
currentUd {
|
|
|
|
amount
|
|
|
|
base
|
|
|
|
}
|
2020-12-13 05:43:52 +01:00
|
|
|
}""";
|
|
|
|
|
2020-12-13 15:37:39 +01:00
|
|
|
final res = await buildQ(query);
|
2020-12-13 05:43:52 +01:00
|
|
|
|
2020-12-13 15:37:39 +01:00
|
|
|
// Parse history
|
2020-12-14 20:18:07 +01:00
|
|
|
var resBC, resMP;
|
2020-12-16 01:36:20 +01:00
|
|
|
print(res.toString());
|
2020-12-14 11:04:13 +01:00
|
|
|
try {
|
2020-12-16 01:36:20 +01:00
|
|
|
resBC = res.data["txsHistoryBc"]['both']['edges'];
|
|
|
|
resMP = res.data["txsHistoryMp"];
|
2020-12-14 11:04:13 +01:00
|
|
|
} catch (e) {
|
|
|
|
return false;
|
|
|
|
}
|
2020-12-13 18:31:17 +01:00
|
|
|
var i = 0;
|
|
|
|
// String outPubkey;
|
2020-12-14 20:18:07 +01:00
|
|
|
var transBC = [];
|
2020-12-13 18:31:17 +01:00
|
|
|
final currentBase = res.data['currentUd']['base'];
|
|
|
|
final currentUD = res.data['currentUd']['amount'] / 100;
|
|
|
|
|
2020-12-16 02:41:11 +01:00
|
|
|
// Get tx blockchain
|
2020-12-16 01:36:20 +01:00
|
|
|
for (final trans in resBC) {
|
2020-12-16 02:41:11 +01:00
|
|
|
var direction = trans['direction'];
|
|
|
|
|
2020-12-16 01:36:20 +01:00
|
|
|
print(trans);
|
|
|
|
final transaction = trans['node'];
|
|
|
|
var output = transaction['outputs'][0];
|
2020-12-16 02:41:11 +01:00
|
|
|
|
2020-12-16 01:36:20 +01:00
|
|
|
print("DEBUG1 " + transaction['writtenTime'].toString());
|
2020-12-14 20:18:07 +01:00
|
|
|
transBC.add(i);
|
|
|
|
transBC[i] = [];
|
2020-12-16 01:36:20 +01:00
|
|
|
transBC[i].add(transaction['writtenTime']);
|
2020-12-14 20:18:07 +01:00
|
|
|
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;
|
2020-12-16 02:41:11 +01:00
|
|
|
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));
|
|
|
|
}
|
2020-12-16 01:36:20 +01:00
|
|
|
transBC[i].add(transaction['comment']);
|
2020-12-14 20:18:07 +01:00
|
|
|
transBC[i].add(base);
|
|
|
|
|
|
|
|
i++;
|
|
|
|
}
|
|
|
|
|
2020-12-16 02:41:11 +01:00
|
|
|
// Get tx mempool
|
2020-12-14 20:18:07 +01:00
|
|
|
var transMP = [];
|
|
|
|
i = 0;
|
2020-12-16 01:36:20 +01:00
|
|
|
for (var transaction in resMP['receiving']) {
|
2020-12-14 20:18:07 +01:00
|
|
|
if (transMP == null) {
|
|
|
|
break;
|
|
|
|
}
|
2020-12-16 01:36:20 +01:00
|
|
|
var output = transaction['outputs'][0];
|
2020-12-14 20:18:07 +01:00
|
|
|
var outPubkey = output.split("SIG(")[1].replaceAll(')', '');
|
|
|
|
transMP.add(i);
|
|
|
|
transMP[i] = [];
|
2020-12-16 01:36:20 +01:00
|
|
|
transMP[i].add(transaction['writtenTime']);
|
|
|
|
transMP[i].add(transaction['issuers'][0]);
|
2020-12-13 18:31:17 +01:00
|
|
|
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;
|
2020-12-14 20:18:07 +01:00
|
|
|
transMP[i].add(amount);
|
2020-12-13 18:31:17 +01:00
|
|
|
final amountUD = amount / currentUD;
|
2020-12-14 20:18:07 +01:00
|
|
|
transMP[i].add(amountUD.toStringAsFixed(2));
|
2020-12-16 01:36:20 +01:00
|
|
|
transMP[i].add(transaction['comment']);
|
2020-12-14 20:18:07 +01:00
|
|
|
transMP[i].add(base);
|
|
|
|
transMP[i].add(outPubkey);
|
2020-12-13 18:31:17 +01:00
|
|
|
|
|
|
|
i++;
|
2020-12-13 05:43:52 +01:00
|
|
|
}
|
|
|
|
|
2020-12-16 02:41:11 +01:00
|
|
|
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++;
|
|
|
|
}
|
|
|
|
|
2020-12-13 18:31:17 +01:00
|
|
|
// Order transactions by date
|
2020-12-14 20:18:07 +01:00
|
|
|
transBC.sort((b, a) => Comparable.compare(a[0], b[0]));
|
|
|
|
transMP.sort((b, a) => Comparable.compare(a[0], b[0]));
|
2020-12-13 18:31:17 +01:00
|
|
|
|
|
|
|
// // 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);
|
2020-12-14 20:18:07 +01:00
|
|
|
return [transBC, transMP];
|
2020-12-13 05:43:52 +01:00
|
|
|
}
|