From 0687ae072f8600e438718514ea533bf09ae28b75 Mon Sep 17 00:00:00 2001 From: poka Date: Wed, 17 Aug 2022 17:50:05 +0200 Subject: [PATCH] get onchain consts; fix batch validate membership --- lib/providers/generate_wallets.dart | 4 +- lib/providers/substrate_sdk.dart | 70 ++++++++++++++++++----------- lib/screens/home.dart | 1 + 3 files changed, 47 insertions(+), 28 deletions(-) diff --git a/lib/providers/generate_wallets.dart b/lib/providers/generate_wallets.dart index a1292ba..caeb235 100644 --- a/lib/providers/generate_wallets.dart +++ b/lib/providers/generate_wallets.dart @@ -390,7 +390,7 @@ class GenerateWalletsProvider with ChangeNotifier { for (var derivationNbr in [for (var i = 0; i < numberScan; i += 1) i]) { final addressData = await sub.sdk.api.keyring.addressFromMnemonic( - sub.ss58, + sub.currencyParameters['ss58']!, cryptoType: CryptoType.sr25519, mnemonic: generatedMnemonic!, derivePath: '//$derivationNbr'); @@ -435,7 +435,7 @@ class GenerateWalletsProvider with ChangeNotifier { } Future scanRootBalance(SubstrateSdk sub, int currentChestNumber) async { - final addressData = await sub.sdk.api.keyring.addressFromMnemonic(sub.ss58, + final addressData = await sub.sdk.api.keyring.addressFromMnemonic(sub.currencyParameters['ss58']!, cryptoType: CryptoType.sr25519, mnemonic: generatedMnemonic!); final balance = await sub.getBalance(addressData.address!).timeout( diff --git a/lib/providers/substrate_sdk.dart b/lib/providers/substrate_sdk.dart index 05338e2..8e5589d 100644 --- a/lib/providers/substrate_sdk.dart +++ b/lib/providers/substrate_sdk.dart @@ -29,7 +29,8 @@ class SubstrateSdk with ChangeNotifier { bool isLoadingEndpoint = false; String debugConnection = ''; String transactionStatus = ''; - int ss58 = 42; + final int initSs58 = 42; + Map currencyParameters = {}; ///////////////////////////////////// ////////// 1: API METHODS /////////// @@ -66,6 +67,11 @@ class SubstrateSdk with ChangeNotifier { return await sdk.webView!.evalJavascript('api.query.$call'); } + Future getStorageConst(String call) async { + return (await sdk.webView! + .evalJavascript('api.consts.$call', wrapPromise: false))[0]; + } + TxSenderData _setSender() { return TxSenderData( keyring.current.address, @@ -108,12 +114,6 @@ class SubstrateSdk with ChangeNotifier { return 0; } - Future> getParameters() async { - final currencyParameters = - await getStorage('parameters.parametersStorage()') ?? {}; - return currencyParameters; - } - Future hasAccountConsumers(String address) async { final accountInfo = await getStorage('system.account("$address")'); final consumers = accountInfo['consumers']; @@ -136,6 +136,8 @@ class SubstrateSdk with ChangeNotifier { // } Future> getBalance(String address) async { + // log.d('currencyParameters: $currencyParameters'); + if (!nodeConnected) { return { 'transferableBalance': 0, @@ -202,17 +204,6 @@ class SubstrateSdk with ChangeNotifier { return totalAmount; } - Future getSs58Prefix() async { - final List res = await sdk.webView!.evalJavascript( - 'api.consts.system.ss58Prefix.words', - wrapPromise: false) ?? - [42]; - - ss58 = res[0]; - log.d(ss58); - return ss58; - } - Future isMemberGet(String address) async { return await idtyStatus(address) == 'Validated'; } @@ -268,7 +259,32 @@ class SubstrateSdk with ChangeNotifier { } } - Future getCurencyName() async {} + // Future addressToPubkey(String address) async { + // await sdk.api.account.decodeAddress([address]); + // } + + // Future pubkeyToAddress(String pubkey) async { + // await sdk.api.account.encodeAddress([pubkey]); + // } + + Future initCurrencyParameters() async { + currencyParameters['ss58'] = + await getStorageConst('system.ss58Prefix.words'); + currencyParameters['minCertForMembership'] = + await getStorageConst('wot.minCertForMembership.words'); + currencyParameters['newAccountPrice'] = + await getStorageConst('account.newAccountPrice.words'); + currencyParameters['existentialDeposit'] = + await getStorageConst('balances.existentialDeposit.words'); + currencyParameters['certPeriod'] = + await getStorageConst('cert.certPeriod.words'); + currencyParameters['certMaxByIssuer'] = + await getStorageConst('cert.maxByIssuer.words'); + currencyParameters['certValidityPeriod'] = + await getStorageConst('cert.validityPeriod.words'); + + log.i('currencyParameters: $currencyParameters'); + } ///////////////////////////////////// ////// 3: SUBSTRATE CONNECTION ////// @@ -276,8 +292,8 @@ class SubstrateSdk with ChangeNotifier { Future initApi() async { sdkLoading = true; - await keyring.init([ss58]); - keyring.setSS58(ss58); + await keyring.init([initSs58]); + keyring.setSS58(initSs58); await sdk.init(keyring); sdkReady = true; @@ -356,7 +372,7 @@ class SubstrateSdk with ChangeNotifier { final n = NetworkParams(); n.name = currencyName; n.endpoint = endpoint; - n.ss58 = ss58; + n.ss58 = currencyParameters['ss58'] ?? initSs58; node.add(n); } return node; @@ -366,7 +382,7 @@ class SubstrateSdk with ChangeNotifier { final nodeParams = NetworkParams(); nodeParams.name = currencyName; nodeParams.endpoint = configBox.get('customEndpoint'); - nodeParams.ss58 = ss58; + nodeParams.ss58 = currencyParameters['ss58'] ?? initSs58; return nodeParams; } @@ -476,7 +492,8 @@ class SubstrateSdk with ChangeNotifier { } Future generateMnemonic({String lang = appLang}) async { - final gen = await sdk.api.keyring.generateMnemonic(ss58); + final gen = await sdk.api.keyring + .generateMnemonic(currencyParameters['ss58'] ?? initSs58); generatedMnemonic = gen.mnemonic!; return gen.mnemonic!; @@ -654,7 +671,8 @@ class SubstrateSdk with ChangeNotifier { String? rawParams; final toCerts = await getCerts(toAddress); - final currencyParameters = await getParameters(); + + // log.d('debug: ${currencyParameters['minCertForMembership']}'); if (toIdtyStatus == 'noid') { txInfo = TxInfoData( @@ -665,7 +683,7 @@ class SubstrateSdk with ChangeNotifier { txOptions = [toAddress]; } else if (toIdtyStatus == 'Validated' || toIdtyStatus == 'ConfirmedByOwner') { - if (toCerts[0] >= currencyParameters['wotMinCertForMembership'] && + if (toCerts[0] >= currencyParameters['minCertForMembership']! - 1 && toIdtyStatus != 'Validated') { log.i('Batch cert and membership validation'); txInfo = TxInfoData( diff --git a/lib/screens/home.dart b/lib/screens/home.dart index 297121b..464504a 100644 --- a/lib/screens/home.dart +++ b/lib/screens/home.dart @@ -167,6 +167,7 @@ class HomeScreen extends StatelessWidget { sub.reload(); } else { await sub.connectNode(ctx); + await sub.initCurrencyParameters(); } }); }