Set first gdev endpoint in bootstrap list; fix: default wallet on stratup
This commit is contained in:
parent
6cbe5b2fd6
commit
1227e15fa2
|
@ -0,0 +1,3 @@
|
|||
[
|
||||
"wss://gdev.librelois.fr/ws"
|
||||
]
|
|
@ -1,3 +0,0 @@
|
|||
[
|
||||
"https://g1.librelois.fr/gva"
|
||||
]
|
|
@ -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);
|
||||
|
|
|
@ -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) {
|
||||
|
|
|
@ -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');
|
||||
|
|
|
@ -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),
|
||||
|
|
|
@ -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();
|
||||
|
|
|
@ -198,7 +198,6 @@ class UnlockingWallet extends StatelessWidget {
|
|||
)
|
||||
],
|
||||
onCompleted: (_pin) async {
|
||||
log.d("Completed");
|
||||
_myWalletProvider.pinCode = _pin.toUpperCase();
|
||||
|
||||
final isValid = await _sub.checkPassword(
|
||||
|
|
|
@ -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();
|
||||
}
|
||||
|
|
|
@ -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);
|
||||
});
|
||||
}),
|
||||
|
|
|
@ -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:
|
||||
|
|
|
@ -107,7 +107,7 @@ flutter:
|
|||
|
||||
assets:
|
||||
- images/
|
||||
- config/gva_endpoints.json
|
||||
- config/gdev_endpoints.json
|
||||
- assets/
|
||||
- assets/home/
|
||||
- assets/avatars/
|
||||
|
|
Loading…
Reference in New Issue