Set first gdev endpoint in bootstrap list; fix: default wallet on stratup

This commit is contained in:
poka 2022-05-27 06:11:09 +02:00
parent 6cbe5b2fd6
commit 1227e15fa2
12 changed files with 97 additions and 74 deletions

View File

@ -0,0 +1,3 @@
[
"wss://gdev.librelois.fr/ws"
]

View File

@ -1,3 +0,0 @@
[
"https://g1.librelois.fr/gva"
]

View File

@ -72,6 +72,7 @@ Future<void> main() async {
configBox = await Hive.openBox("configBox");
await Hive.deleteBoxFromDisk('g1WalletsBox');
g1WalletsBox = await Hive.openBox<G1WalletsList>("g1WalletsBox");
// keystoreBox = await Hive.openBox("keystoreBox");
// g1WalletsBox.clear();
@ -82,7 +83,7 @@ Future<void> main() async {
// Get a valid GVA endpoint
endPointGVA = 'https://g1.librelois.fr/gva';
// endPointGVA = 'https://duniter-g1.p2p.legal/gva';
// await _homeProvider.getValidEndpoint();
await _homeProvider.getValidEndpoints();
// if (endPointGVA == 'HS') {
// _homeProvider.playSound('faché', 0.8);

View File

@ -57,56 +57,62 @@ class HomeProvider with ChangeNotifier {
return version + '+' + buildNumber;
}
Future<String?> getValidEndpoint() async {
List _listEndpoints = await rootBundle
.loadString('config/gva_endpoints.json')
.then((jsonStr) => jsonDecode(jsonStr));
_listEndpoints.shuffle();
Future<List?> getValidEndpoints() async {
configBox.delete('endpoint');
int i = 0;
String? _endpoint;
int _statusCode = 0;
List _listEndpoints = [];
if (!configBox.containsKey('endpoint') || configBox.get('endpoint') == []) {
_listEndpoints = await rootBundle
.loadString('config/gdev_endpoints.json')
.then((jsonStr) => jsonDecode(jsonStr));
_listEndpoints.shuffle();
configBox.put('endpoint', _listEndpoints);
}
final _client = HttpClient();
_client.connectionTimeout = const Duration(milliseconds: 1000);
// int i = 0;
// String? _endpoint;
// int _statusCode = 0;
do {
i++;
log.d(i.toString() + ' ème essai de recherche de endpoint GVA.');
log.d('Try GVA endpoint: ${_listEndpoints[i - 1]}');
int listLenght = _listEndpoints.length - 1;
if (i > listLenght) {
log.e('NO VALID GVA ENDPOINT FOUND');
_endpoint = 'HS';
break;
}
if (i != 0) {
await Future.delayed(const Duration(milliseconds: 300));
}
// final _client = HttpClient();
// _client.connectionTimeout = const Duration(milliseconds: 1000);
try {
final request = await _client.postUrl(Uri.parse(_listEndpoints[i]));
final response = await request.close();
// do {
// i++;
// log.d(i.toString() + ' ème essai de recherche de endpoint GVA.');
// log.d('Try GVA endpoint: ${_listEndpoints[i - 1]}');
// int listLenght = _listEndpoints.length - 1;
// if (i > listLenght) {
// log.e('NO VALID GVA ENDPOINT FOUND');
// _endpoint = 'HS';
// break;
// }
// if (i != 0) {
// await Future.delayed(const Duration(milliseconds: 300));
// }
_endpoint = _listEndpoints[i];
_statusCode = response.statusCode;
} on TimeoutException catch (_) {
log.e('This endpoint is timeout, next');
_statusCode = 50;
continue;
} on SocketException catch (_) {
log.e('This endpoint is a bad endpoint, next');
_statusCode = 70;
continue;
} on Exception {
log.e('Unknown error');
_statusCode = 60;
continue;
}
} while (_statusCode != 400);
// try {
// final request = await _client.postUrl(Uri.parse(_listEndpoints[i]));
// final response = await request.close();
log.i('ENDPOINT: ' + _endpoint!);
return _endpoint;
// _endpoint = _listEndpoints[i];
// _statusCode = response.statusCode;
// } on TimeoutException catch (_) {
// log.e('This endpoint is timeout, next');
// _statusCode = 50;
// continue;
// } on SocketException catch (_) {
// log.e('This endpoint is a bad endpoint, next');
// _statusCode = 70;
// continue;
// } on Exception {
// log.e('Unknown error');
// _statusCode = 60;
// continue;
// }
// } while (_statusCode != 400);
log.i('ENDPOINT: ' + _listEndpoints.toString());
return _listEndpoints;
}
T getRandomElement<T>(List<T> list) {

View File

@ -22,11 +22,10 @@ class MyWalletsProvider with ChangeNotifier {
bool checkIfWalletExist() {
// configBox.delete('endpoint');
if (!configBox.containsKey('endpoint') || configBox.get('endpoint') == '') {
log.d('No endpoint, configure...');
// configBox.put('endpoint', 'wss://gdev.librelois.fr/ws');
configBox.put('endpoint', 'ws://127.0.0.1:9944');
}
// if (!configBox.containsKey('endpoint') || configBox.get('endpoint') == []) {
// log.d('No endpoint, configure...');
// configBox.put('endpoint', 'wss://gdev.librelois.fr/ws');
// }
if (chestBox.isEmpty) {
log.i('No wallets detected');

View File

@ -11,6 +11,7 @@ import 'package:polkawallet_sdk/api/types/txInfoData.dart';
import 'package:polkawallet_sdk/polkawallet_sdk.dart';
import 'package:polkawallet_sdk/storage/keyring.dart';
import 'package:polkawallet_sdk/storage/types/keyPairData.dart';
import 'package:provider/provider.dart';
import 'package:truncate/truncate.dart';
// import 'package:web_socket_channel/io.dart';
@ -45,11 +46,15 @@ class SubstrateSdk with ChangeNotifier {
Future<void> connectNode(BuildContext ctx) async {
List<NetworkParams> node = [];
final n = NetworkParams();
n.name = currencyName;
n.endpoint = configBox.get('endpoint');
n.ss58 = ss58;
node.add(n);
for (String _endpoint in configBox.get('endpoint')) {
final n = NetworkParams();
n.name = currencyName;
n.endpoint = _endpoint;
n.ss58 = ss58;
node.add(n);
}
int timeout = 10000;
// if (n.endpoint!.startsWith('ws://')) {
@ -428,6 +433,10 @@ class SubstrateSdk with ChangeNotifier {
return await sdk.api.keyring.checkMnemonicValid(mnemonic);
}
String? getConnectedEndpoint() {
return sdk.api.connectedNode?.endpoint;
}
}
void snack(BuildContext context, String message, {int duration = 2}) {
@ -449,8 +458,10 @@ void snackNode(BuildContext context, bool isConnected) {
_message =
"Aucun noeud Duniter disponible, veuillez réessayer ultérieurement";
} else {
SubstrateSdk _sub = Provider.of<SubstrateSdk>(context, listen: false);
_message =
"Vous êtes connecté au noeud\n${configBox.get('endpoint').split('//')[1]}";
"Vous êtes connecté au noeud\n${_sub.getConnectedEndpoint()!.split('//')[1]}";
}
final snackBar = SnackBar(
padding: const EdgeInsets.all(20),

View File

@ -1,6 +1,7 @@
import 'package:flutter/services.dart';
import 'package:gecko/globals.dart';
import 'package:flutter/material.dart';
import 'package:gecko/models/chest_data.dart';
import 'package:gecko/models/wallet_data.dart';
import 'package:gecko/providers/my_wallets.dart';
import 'package:gecko/providers/substrate_sdk.dart';
@ -74,8 +75,7 @@ class ChooseWalletScreen extends StatelessWidget {
WalletsProfilesProvider _walletViewProvider =
Provider.of<WalletsProfilesProvider>(context, listen: false);
WalletData? defaultWallet =
_myWalletProvider.getDefaultWallet();
WalletData? defaultWallet = _myWalletProvider.getDefaultWallet();
_selectedId ??= defaultWallet!.id();
_derivation ??= defaultWallet!.derivation!;
@ -190,11 +190,14 @@ class ChooseWalletScreen extends StatelessWidget {
),
),
),
onTap: () {
onTap: () async {
_derivation = _repository.derivation!;
_selectedId = _repository.id();
chestBox.get(currentChest)!.defaultWallet =
_repository.number;
ChestData _newChestData =
chestBox.get(currentChest)!;
_newChestData.defaultWallet = _repository.number;
await chestBox.put(currentChest, _newChestData);
_sub.setCurrentWallet(_repository.address!);
_myWalletProvider.rebuildWidget();

View File

@ -198,7 +198,6 @@ class UnlockingWallet extends StatelessWidget {
)
],
onCompleted: (_pin) async {
log.d("Completed");
_myWalletProvider.pinCode = _pin.toUpperCase();
final isValid = await _sub.checkPassword(

View File

@ -1,6 +1,7 @@
import 'dart:async';
import 'package:flutter/material.dart';
import 'package:gecko/globals.dart';
import 'package:gecko/models/chest_data.dart';
import 'package:gecko/providers/my_wallets.dart';
import 'package:gecko/models/wallet_data.dart';
import 'package:gecko/providers/wallet_options.dart';
@ -335,17 +336,18 @@ class WalletOptions extends StatelessWidget {
MyWalletsProvider _myWalletProvider,
WalletOptionsProvider _walletOptions,
int _currentChest) {
WalletData defaultWallet =
_myWalletProvider.getDefaultWallet()!;
WalletData defaultWallet = _myWalletProvider.getDefaultWallet()!;
_walletOptions.isDefaultWallet = (defaultWallet.number == wallet.id()[1]);
return InkWell(
key: const Key('setDefaultWallet'),
onTap: !walletProvider.isDefaultWallet
? () {
? () async {
defaultWallet = wallet;
chestBox.get(_currentChest)!.defaultWallet = wallet.number;
ChestData _newChestData = chestBox.get(_currentChest)!;
_newChestData.defaultWallet = wallet.number;
await chestBox.put(_currentChest, _newChestData);
_myWalletProvider.readAllWallets(_currentChest);
_myWalletProvider.rebuildWidget();
}

View File

@ -30,12 +30,13 @@ class SettingsScreen extends StatelessWidget {
@override
Widget build(BuildContext context) {
SystemChrome.setPreferredOrientations([DeviceOrientation.portraitUp]);
SubstrateSdk _sub = Provider.of<SubstrateSdk>(context, listen: false);
const double buttonHigh = 50;
const double buttonWidth = 240;
const double fontSize = 16;
TextEditingController _endpointController =
TextEditingController(text: configBox.get('endpoint'));
TextEditingController(text: _sub.getConnectedEndpoint());
// getAppDirectory();
return Scaffold(
@ -71,7 +72,7 @@ class SettingsScreen extends StatelessWidget {
size: 40,
),
onPressed: () async {
configBox.put('endpoint', _endpointController.text);
configBox.put('endpoint', [_endpointController.text]);
await _sub.connectNode(context);
});
}),

View File

@ -193,6 +193,7 @@ class WalletViewScreen extends StatelessWidget {
const double shapeSize = 20;
WalletData? defaultWallet = _myWalletProvider.getDefaultWallet();
log.d(defaultWallet!.address);
bool canValidate = false;
@ -213,7 +214,7 @@ class WalletViewScreen extends StatelessWidget {
if (_walletViewProvider.payAmount.text != '' &&
double.parse(_walletViewProvider.payAmount.text) <=
double.parse(
balanceCache[defaultWallet!.address]!.split(' ')[0]) &&
balanceCache[defaultWallet.address]!.split(' ')[0]) &&
_walletViewProvider.pubkey != defaultWallet.address) {
canValidate = true;
} else {
@ -286,7 +287,7 @@ class WalletViewScreen extends StatelessWidget {
padding: const EdgeInsets.all(10),
child: Row(children: [
Text(defaultWallet!.name!),
Text(defaultWallet.name!),
const Spacer(),
FutureBuilder(
future:

View File

@ -107,7 +107,7 @@ flutter:
assets:
- images/
- config/gva_endpoints.json
- config/gdev_endpoints.json
- assets/
- assets/home/
- assets/avatars/