From 2ec8949ddeafbe92842496b6ece51f93965f1140 Mon Sep 17 00:00:00 2001 From: poka Date: Fri, 12 Feb 2021 01:58:02 +0100 Subject: [PATCH 1/3] Generate HD wallets; Try to get 3 firsts BIP32 pubkeys of dewif --- lib/models/generateWallets.dart | 3 ++- lib/models/walletOptions.dart | 4 ++++ 2 files changed, 6 insertions(+), 1 deletion(-) diff --git a/lib/models/generateWallets.dart b/lib/models/generateWallets.dart index 36ed99f..da33f96 100644 --- a/lib/models/generateWallets.dart +++ b/lib/models/generateWallets.dart @@ -160,7 +160,8 @@ class GenerateWalletsProvider with ChangeNotifier { this.actualWallet = await DubpRust.genWalletFromMnemonic( language: Language.french, mnemonic: generatedMnemonic, - secretCodeType: SecretCodeType.letters); + secretCodeType: SecretCodeType.letters, + walletType: WalletType.bip32Ed25519); } catch (e, stack) { print(e); if (kReleaseMode) { diff --git a/lib/models/walletOptions.dart b/lib/models/walletOptions.dart index afe716e..9711b9e 100644 --- a/lib/models/walletOptions.dart +++ b/lib/models/walletOptions.dart @@ -63,6 +63,10 @@ class WalletOptionsProvider with ChangeNotifier { this.pubkey.text = _localPubkey; isWalletUnlock = true; notifyListeners(); + print('GET BIP32 accounts publickeys from this dewif'); + String _hdWallets = await DubpRust.getBip32DewifAccountsPublicKeys( + dewif: _localDewif, secretCode: _pin, accountsIndex: [0, 1, 2]); + print(_hdWallets); return _localDewif; } else { From 0aa5d8a5afd12f09d5a2fe36e54e3ae08a5ac20a Mon Sep 17 00:00:00 2001 From: poka Date: Fri, 12 Feb 2021 18:44:17 +0100 Subject: [PATCH 2/3] Change String type to list for BIP32 pubkeys reading --- lib/models/walletOptions.dart | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib/models/walletOptions.dart b/lib/models/walletOptions.dart index 9711b9e..58abd11 100644 --- a/lib/models/walletOptions.dart +++ b/lib/models/walletOptions.dart @@ -64,7 +64,7 @@ class WalletOptionsProvider with ChangeNotifier { isWalletUnlock = true; notifyListeners(); print('GET BIP32 accounts publickeys from this dewif'); - String _hdWallets = await DubpRust.getBip32DewifAccountsPublicKeys( + List _hdWallets = await DubpRust.getBip32DewifAccountsPublicKeys( dewif: _localDewif, secretCode: _pin, accountsIndex: [0, 1, 2]); print(_hdWallets); From 27ae053af05d00f8cbe9988c41dac8278c091bba Mon Sep 17 00:00:00 2001 From: poka Date: Fri, 12 Feb 2021 21:31:42 +0100 Subject: [PATCH 3/3] Big improve on selection of GVA endpoint at startup --- config/gva_endpoints.json | 5 ++-- lib/main.dart | 22 +++----------- lib/models/home.dart | 62 ++++++++++++++++++++++++++------------- pubspec.yaml | 2 +- 4 files changed, 50 insertions(+), 41 deletions(-) diff --git a/config/gva_endpoints.json b/config/gva_endpoints.json index 64ac739..541e9fb 100644 --- a/config/gva_endpoints.json +++ b/config/gva_endpoints.json @@ -1,4 +1,5 @@ [ - "https://g1.librelois.fr/gva", - "http://localhost:30901/gva" + "https://g1.librelois.fr/gva", + "https://duniter-gva.axiom-team.fr/gva", + "https://duniter-g1.p2p.legal/gva" ] diff --git a/lib/main.dart b/lib/main.dart index 3565a3f..700fe12 100644 --- a/lib/main.dart +++ b/lib/main.dart @@ -32,22 +32,8 @@ Future main() async { final HiveStore _store = await HiveStore.open(path: '${appPath.path}/gqlCache'); - String _randomEndpoint; - int i = 0; - do { - if (i >= 5) { - print('NO VALID ENDPOINT FOUND !'); - break; - } - if (i != 0) { - print(i.toString() + ' ème essai de recherche de endpoint GVA.'); - await Future.delayed(Duration(milliseconds: 300)); - } - _randomEndpoint = await _homeProvider.getRandomEndpoint(); - i++; - } while (_randomEndpoint == 'HS'); - - endPointGVA = _randomEndpoint; + // Get a valid GVA endpoint + endPointGVA = await _homeProvider.getValidEndpoint(); if (kReleaseMode && enableSentry) { await SentryFlutter.init( @@ -55,12 +41,12 @@ Future main() async { options.dsn = 'https://c09587b46eaa42e8b9fda28d838ed180@o496840.ingest.sentry.io/5572110'; }, - appRunner: () => runApp(Gecko(_randomEndpoint, _store)), + appRunner: () => runApp(Gecko(endPointGVA, _store)), ); } else { print('Debug mode enabled: No sentry alerte'); - runApp(Gecko(_randomEndpoint, _store)); + runApp(Gecko(endPointGVA, _store)); } } diff --git a/lib/models/home.dart b/lib/models/home.dart index 2e55558..5609935 100644 --- a/lib/models/home.dart +++ b/lib/models/home.dart @@ -1,3 +1,4 @@ +import 'dart:convert'; import 'dart:io'; import 'dart:math'; import 'package:flutter/foundation.dart'; @@ -28,28 +29,49 @@ class HomeProvider with ChangeNotifier { return version + '+' + buildNumber; } - Future getRandomEndpoint() async { - // TODO: Improve implemention of getRandomEndpoint() - // final _json = json.decode(await getJsonEndpoints()); - // print('JSON !! :'); - // print(_json); - // final _list = _json[]; + Future getValidEndpoint() async { + List _listEndpoints = await rootBundle + .loadString('config/gva_endpoints.json') + .then((jsonStr) => jsonDecode(jsonStr)); + + int i = 0; + http.Response response; + _listEndpoints.shuffle(); + String _endpoint; + int statusCode = 0; + + final client = new HttpClient(); + client.connectionTimeout = const Duration(seconds: 1); + + do { + i++; + print(i.toString() + ' ème essai de recherche de endpoint GVA.'); + try { + if (i > 5) { + break; + } + if (i != 0) { + await Future.delayed(Duration(milliseconds: 300)); + } + response = await http + .post(_listEndpoints[i]) + .timeout(const Duration(seconds: 1)); + } on TimeoutException catch (_) { + print(_listEndpoints[i] + ' is timeout, next'); + statusCode = 50; + + continue; + } on SocketException catch (_) { + print(_listEndpoints[i] + ' is a bad endpoint, next'); + statusCode = 70; + continue; + } + _endpoint = _listEndpoints[i]; + statusCode = response.statusCode; + print('Endpoint statutcode: ' + statusCode.toString()); + } while (statusCode != 400); - final _listEndpoints = [ - 'https://g1.librelois.fr/gva', - 'https://duniter-gva.axiom-team.fr/gva', - 'https://duniter-g1.p2p.legal/gva' - ]; - final _endpoint = getRandomElement(_listEndpoints); print('ENDPOINT: ' + _endpoint); - - // http.post(_endpoint); - final response = await http.post(_endpoint); - if (response.statusCode != 400) { - print('Endpoint statutcode: ' + response.statusCode.toString()); - return 'HS'; - } - return _endpoint; } diff --git a/pubspec.yaml b/pubspec.yaml index 8f94cee..bbc052c 100644 --- a/pubspec.yaml +++ b/pubspec.yaml @@ -50,7 +50,7 @@ flutter: assets: - images/ - - config/ + - config/gva_endpoints.json - assets/icon/gecko_final.png - assets/ - assets/OpenSans-Regular.ttf