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");
|
configBox = await Hive.openBox("configBox");
|
||||||
await Hive.deleteBoxFromDisk('g1WalletsBox');
|
await Hive.deleteBoxFromDisk('g1WalletsBox');
|
||||||
g1WalletsBox = await Hive.openBox<G1WalletsList>("g1WalletsBox");
|
g1WalletsBox = await Hive.openBox<G1WalletsList>("g1WalletsBox");
|
||||||
|
|
||||||
// keystoreBox = await Hive.openBox("keystoreBox");
|
// keystoreBox = await Hive.openBox("keystoreBox");
|
||||||
|
|
||||||
// g1WalletsBox.clear();
|
// g1WalletsBox.clear();
|
||||||
|
@ -82,7 +83,7 @@ Future<void> main() async {
|
||||||
// Get a valid GVA endpoint
|
// Get a valid GVA endpoint
|
||||||
endPointGVA = 'https://g1.librelois.fr/gva';
|
endPointGVA = 'https://g1.librelois.fr/gva';
|
||||||
// endPointGVA = 'https://duniter-g1.p2p.legal/gva';
|
// endPointGVA = 'https://duniter-g1.p2p.legal/gva';
|
||||||
// await _homeProvider.getValidEndpoint();
|
await _homeProvider.getValidEndpoints();
|
||||||
|
|
||||||
// if (endPointGVA == 'HS') {
|
// if (endPointGVA == 'HS') {
|
||||||
// _homeProvider.playSound('faché', 0.8);
|
// _homeProvider.playSound('faché', 0.8);
|
||||||
|
|
|
@ -57,56 +57,62 @@ class HomeProvider with ChangeNotifier {
|
||||||
return version + '+' + buildNumber;
|
return version + '+' + buildNumber;
|
||||||
}
|
}
|
||||||
|
|
||||||
Future<String?> getValidEndpoint() async {
|
Future<List?> getValidEndpoints() async {
|
||||||
List _listEndpoints = await rootBundle
|
configBox.delete('endpoint');
|
||||||
.loadString('config/gva_endpoints.json')
|
|
||||||
.then((jsonStr) => jsonDecode(jsonStr));
|
|
||||||
_listEndpoints.shuffle();
|
|
||||||
|
|
||||||
int i = 0;
|
List _listEndpoints = [];
|
||||||
String? _endpoint;
|
if (!configBox.containsKey('endpoint') || configBox.get('endpoint') == []) {
|
||||||
int _statusCode = 0;
|
_listEndpoints = await rootBundle
|
||||||
|
.loadString('config/gdev_endpoints.json')
|
||||||
|
.then((jsonStr) => jsonDecode(jsonStr));
|
||||||
|
_listEndpoints.shuffle();
|
||||||
|
configBox.put('endpoint', _listEndpoints);
|
||||||
|
}
|
||||||
|
|
||||||
final _client = HttpClient();
|
// int i = 0;
|
||||||
_client.connectionTimeout = const Duration(milliseconds: 1000);
|
// String? _endpoint;
|
||||||
|
// int _statusCode = 0;
|
||||||
|
|
||||||
do {
|
// final _client = HttpClient();
|
||||||
i++;
|
// _client.connectionTimeout = const Duration(milliseconds: 1000);
|
||||||
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));
|
|
||||||
}
|
|
||||||
|
|
||||||
try {
|
// do {
|
||||||
final request = await _client.postUrl(Uri.parse(_listEndpoints[i]));
|
// i++;
|
||||||
final response = await request.close();
|
// 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];
|
// try {
|
||||||
_statusCode = response.statusCode;
|
// final request = await _client.postUrl(Uri.parse(_listEndpoints[i]));
|
||||||
} on TimeoutException catch (_) {
|
// final response = await request.close();
|
||||||
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: ' + _endpoint!);
|
// _endpoint = _listEndpoints[i];
|
||||||
return _endpoint;
|
// _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) {
|
T getRandomElement<T>(List<T> list) {
|
||||||
|
|
|
@ -22,11 +22,10 @@ class MyWalletsProvider with ChangeNotifier {
|
||||||
|
|
||||||
bool checkIfWalletExist() {
|
bool checkIfWalletExist() {
|
||||||
// configBox.delete('endpoint');
|
// configBox.delete('endpoint');
|
||||||
if (!configBox.containsKey('endpoint') || configBox.get('endpoint') == '') {
|
// if (!configBox.containsKey('endpoint') || configBox.get('endpoint') == []) {
|
||||||
log.d('No endpoint, configure...');
|
// log.d('No endpoint, configure...');
|
||||||
// configBox.put('endpoint', 'wss://gdev.librelois.fr/ws');
|
// configBox.put('endpoint', 'wss://gdev.librelois.fr/ws');
|
||||||
configBox.put('endpoint', 'ws://127.0.0.1:9944');
|
// }
|
||||||
}
|
|
||||||
|
|
||||||
if (chestBox.isEmpty) {
|
if (chestBox.isEmpty) {
|
||||||
log.i('No wallets detected');
|
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/polkawallet_sdk.dart';
|
||||||
import 'package:polkawallet_sdk/storage/keyring.dart';
|
import 'package:polkawallet_sdk/storage/keyring.dart';
|
||||||
import 'package:polkawallet_sdk/storage/types/keyPairData.dart';
|
import 'package:polkawallet_sdk/storage/types/keyPairData.dart';
|
||||||
|
import 'package:provider/provider.dart';
|
||||||
import 'package:truncate/truncate.dart';
|
import 'package:truncate/truncate.dart';
|
||||||
// import 'package:web_socket_channel/io.dart';
|
// import 'package:web_socket_channel/io.dart';
|
||||||
|
|
||||||
|
@ -45,11 +46,15 @@ class SubstrateSdk with ChangeNotifier {
|
||||||
|
|
||||||
Future<void> connectNode(BuildContext ctx) async {
|
Future<void> connectNode(BuildContext ctx) async {
|
||||||
List<NetworkParams> node = [];
|
List<NetworkParams> node = [];
|
||||||
final n = NetworkParams();
|
|
||||||
n.name = currencyName;
|
for (String _endpoint in configBox.get('endpoint')) {
|
||||||
n.endpoint = configBox.get('endpoint');
|
final n = NetworkParams();
|
||||||
n.ss58 = ss58;
|
n.name = currencyName;
|
||||||
node.add(n);
|
n.endpoint = _endpoint;
|
||||||
|
n.ss58 = ss58;
|
||||||
|
node.add(n);
|
||||||
|
}
|
||||||
|
|
||||||
int timeout = 10000;
|
int timeout = 10000;
|
||||||
|
|
||||||
// if (n.endpoint!.startsWith('ws://')) {
|
// if (n.endpoint!.startsWith('ws://')) {
|
||||||
|
@ -428,6 +433,10 @@ class SubstrateSdk with ChangeNotifier {
|
||||||
|
|
||||||
return await sdk.api.keyring.checkMnemonicValid(mnemonic);
|
return await sdk.api.keyring.checkMnemonicValid(mnemonic);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
String? getConnectedEndpoint() {
|
||||||
|
return sdk.api.connectedNode?.endpoint;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void snack(BuildContext context, String message, {int duration = 2}) {
|
void snack(BuildContext context, String message, {int duration = 2}) {
|
||||||
|
@ -449,8 +458,10 @@ void snackNode(BuildContext context, bool isConnected) {
|
||||||
_message =
|
_message =
|
||||||
"Aucun noeud Duniter disponible, veuillez réessayer ultérieurement";
|
"Aucun noeud Duniter disponible, veuillez réessayer ultérieurement";
|
||||||
} else {
|
} else {
|
||||||
|
SubstrateSdk _sub = Provider.of<SubstrateSdk>(context, listen: false);
|
||||||
|
|
||||||
_message =
|
_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(
|
final snackBar = SnackBar(
|
||||||
padding: const EdgeInsets.all(20),
|
padding: const EdgeInsets.all(20),
|
||||||
|
|
|
@ -1,6 +1,7 @@
|
||||||
import 'package:flutter/services.dart';
|
import 'package:flutter/services.dart';
|
||||||
import 'package:gecko/globals.dart';
|
import 'package:gecko/globals.dart';
|
||||||
import 'package:flutter/material.dart';
|
import 'package:flutter/material.dart';
|
||||||
|
import 'package:gecko/models/chest_data.dart';
|
||||||
import 'package:gecko/models/wallet_data.dart';
|
import 'package:gecko/models/wallet_data.dart';
|
||||||
import 'package:gecko/providers/my_wallets.dart';
|
import 'package:gecko/providers/my_wallets.dart';
|
||||||
import 'package:gecko/providers/substrate_sdk.dart';
|
import 'package:gecko/providers/substrate_sdk.dart';
|
||||||
|
@ -74,8 +75,7 @@ class ChooseWalletScreen extends StatelessWidget {
|
||||||
WalletsProfilesProvider _walletViewProvider =
|
WalletsProfilesProvider _walletViewProvider =
|
||||||
Provider.of<WalletsProfilesProvider>(context, listen: false);
|
Provider.of<WalletsProfilesProvider>(context, listen: false);
|
||||||
|
|
||||||
WalletData? defaultWallet =
|
WalletData? defaultWallet = _myWalletProvider.getDefaultWallet();
|
||||||
_myWalletProvider.getDefaultWallet();
|
|
||||||
|
|
||||||
_selectedId ??= defaultWallet!.id();
|
_selectedId ??= defaultWallet!.id();
|
||||||
_derivation ??= defaultWallet!.derivation!;
|
_derivation ??= defaultWallet!.derivation!;
|
||||||
|
@ -190,11 +190,14 @@ class ChooseWalletScreen extends StatelessWidget {
|
||||||
),
|
),
|
||||||
),
|
),
|
||||||
),
|
),
|
||||||
onTap: () {
|
onTap: () async {
|
||||||
_derivation = _repository.derivation!;
|
_derivation = _repository.derivation!;
|
||||||
_selectedId = _repository.id();
|
_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!);
|
_sub.setCurrentWallet(_repository.address!);
|
||||||
_myWalletProvider.rebuildWidget();
|
_myWalletProvider.rebuildWidget();
|
||||||
|
|
|
@ -198,7 +198,6 @@ class UnlockingWallet extends StatelessWidget {
|
||||||
)
|
)
|
||||||
],
|
],
|
||||||
onCompleted: (_pin) async {
|
onCompleted: (_pin) async {
|
||||||
log.d("Completed");
|
|
||||||
_myWalletProvider.pinCode = _pin.toUpperCase();
|
_myWalletProvider.pinCode = _pin.toUpperCase();
|
||||||
|
|
||||||
final isValid = await _sub.checkPassword(
|
final isValid = await _sub.checkPassword(
|
||||||
|
|
|
@ -1,6 +1,7 @@
|
||||||
import 'dart:async';
|
import 'dart:async';
|
||||||
import 'package:flutter/material.dart';
|
import 'package:flutter/material.dart';
|
||||||
import 'package:gecko/globals.dart';
|
import 'package:gecko/globals.dart';
|
||||||
|
import 'package:gecko/models/chest_data.dart';
|
||||||
import 'package:gecko/providers/my_wallets.dart';
|
import 'package:gecko/providers/my_wallets.dart';
|
||||||
import 'package:gecko/models/wallet_data.dart';
|
import 'package:gecko/models/wallet_data.dart';
|
||||||
import 'package:gecko/providers/wallet_options.dart';
|
import 'package:gecko/providers/wallet_options.dart';
|
||||||
|
@ -335,17 +336,18 @@ class WalletOptions extends StatelessWidget {
|
||||||
MyWalletsProvider _myWalletProvider,
|
MyWalletsProvider _myWalletProvider,
|
||||||
WalletOptionsProvider _walletOptions,
|
WalletOptionsProvider _walletOptions,
|
||||||
int _currentChest) {
|
int _currentChest) {
|
||||||
WalletData defaultWallet =
|
WalletData defaultWallet = _myWalletProvider.getDefaultWallet()!;
|
||||||
_myWalletProvider.getDefaultWallet()!;
|
|
||||||
|
|
||||||
_walletOptions.isDefaultWallet = (defaultWallet.number == wallet.id()[1]);
|
_walletOptions.isDefaultWallet = (defaultWallet.number == wallet.id()[1]);
|
||||||
|
|
||||||
return InkWell(
|
return InkWell(
|
||||||
key: const Key('setDefaultWallet'),
|
key: const Key('setDefaultWallet'),
|
||||||
onTap: !walletProvider.isDefaultWallet
|
onTap: !walletProvider.isDefaultWallet
|
||||||
? () {
|
? () async {
|
||||||
defaultWallet = wallet;
|
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.readAllWallets(_currentChest);
|
||||||
_myWalletProvider.rebuildWidget();
|
_myWalletProvider.rebuildWidget();
|
||||||
}
|
}
|
||||||
|
|
|
@ -30,12 +30,13 @@ class SettingsScreen extends StatelessWidget {
|
||||||
@override
|
@override
|
||||||
Widget build(BuildContext context) {
|
Widget build(BuildContext context) {
|
||||||
SystemChrome.setPreferredOrientations([DeviceOrientation.portraitUp]);
|
SystemChrome.setPreferredOrientations([DeviceOrientation.portraitUp]);
|
||||||
|
SubstrateSdk _sub = Provider.of<SubstrateSdk>(context, listen: false);
|
||||||
|
|
||||||
const double buttonHigh = 50;
|
const double buttonHigh = 50;
|
||||||
const double buttonWidth = 240;
|
const double buttonWidth = 240;
|
||||||
const double fontSize = 16;
|
const double fontSize = 16;
|
||||||
TextEditingController _endpointController =
|
TextEditingController _endpointController =
|
||||||
TextEditingController(text: configBox.get('endpoint'));
|
TextEditingController(text: _sub.getConnectedEndpoint());
|
||||||
|
|
||||||
// getAppDirectory();
|
// getAppDirectory();
|
||||||
return Scaffold(
|
return Scaffold(
|
||||||
|
@ -71,7 +72,7 @@ class SettingsScreen extends StatelessWidget {
|
||||||
size: 40,
|
size: 40,
|
||||||
),
|
),
|
||||||
onPressed: () async {
|
onPressed: () async {
|
||||||
configBox.put('endpoint', _endpointController.text);
|
configBox.put('endpoint', [_endpointController.text]);
|
||||||
await _sub.connectNode(context);
|
await _sub.connectNode(context);
|
||||||
});
|
});
|
||||||
}),
|
}),
|
||||||
|
|
|
@ -193,6 +193,7 @@ class WalletViewScreen extends StatelessWidget {
|
||||||
|
|
||||||
const double shapeSize = 20;
|
const double shapeSize = 20;
|
||||||
WalletData? defaultWallet = _myWalletProvider.getDefaultWallet();
|
WalletData? defaultWallet = _myWalletProvider.getDefaultWallet();
|
||||||
|
log.d(defaultWallet!.address);
|
||||||
|
|
||||||
bool canValidate = false;
|
bool canValidate = false;
|
||||||
|
|
||||||
|
@ -213,7 +214,7 @@ class WalletViewScreen extends StatelessWidget {
|
||||||
if (_walletViewProvider.payAmount.text != '' &&
|
if (_walletViewProvider.payAmount.text != '' &&
|
||||||
double.parse(_walletViewProvider.payAmount.text) <=
|
double.parse(_walletViewProvider.payAmount.text) <=
|
||||||
double.parse(
|
double.parse(
|
||||||
balanceCache[defaultWallet!.address]!.split(' ')[0]) &&
|
balanceCache[defaultWallet.address]!.split(' ')[0]) &&
|
||||||
_walletViewProvider.pubkey != defaultWallet.address) {
|
_walletViewProvider.pubkey != defaultWallet.address) {
|
||||||
canValidate = true;
|
canValidate = true;
|
||||||
} else {
|
} else {
|
||||||
|
@ -286,7 +287,7 @@ class WalletViewScreen extends StatelessWidget {
|
||||||
padding: const EdgeInsets.all(10),
|
padding: const EdgeInsets.all(10),
|
||||||
|
|
||||||
child: Row(children: [
|
child: Row(children: [
|
||||||
Text(defaultWallet!.name!),
|
Text(defaultWallet.name!),
|
||||||
const Spacer(),
|
const Spacer(),
|
||||||
FutureBuilder(
|
FutureBuilder(
|
||||||
future:
|
future:
|
||||||
|
|
|
@ -107,7 +107,7 @@ flutter:
|
||||||
|
|
||||||
assets:
|
assets:
|
||||||
- images/
|
- images/
|
||||||
- config/gva_endpoints.json
|
- config/gdev_endpoints.json
|
||||||
- assets/
|
- assets/
|
||||||
- assets/home/
|
- assets/home/
|
||||||
- assets/avatars/
|
- assets/avatars/
|
||||||
|
|
Loading…
Reference in New Issue