diff --git a/lib/providers/substrate_sdk.dart b/lib/providers/substrate_sdk.dart index 8856ce0..c2b89f3 100644 --- a/lib/providers/substrate_sdk.dart +++ b/lib/providers/substrate_sdk.dart @@ -213,7 +213,7 @@ class SubstrateSdk with ChangeNotifier { Future> getCerts(String address) async { final idtyIndex = await sdk.webView! .evalJavascript('api.query.identity.identityIndexOf("$address")'); - log.d(idtyIndex); + log.d('u32: ' + idtyIndex.toString()); final _certsReceiver = await sdk.webView! .evalJavascript('api.query.cert.storageIdtyCertMeta($idtyIndex)') ?? @@ -222,6 +222,23 @@ class SubstrateSdk with ChangeNotifier { return [_certsReceiver['receivedCount'], _certsReceiver['issuedCount']]; } + Future getCertData(String from, String to) async { + final idtyIndexFrom = await sdk.webView! + .evalJavascript('api.query.identity.identityIndexOf("$from")'); + + final idtyIndexTo = await sdk.webView! + .evalJavascript('api.query.identity.identityIndexOf("$to")'); + + final _certData = await sdk.webView!.evalJavascript( + 'api.query.cert.storageCertsByIssuer($idtyIndexFrom, $idtyIndexTo)') ?? + ''; + + log.d(_certData); + if (_certData == '') return {}; + + return _certData; + } + // Future isAccountExit(String address) async { // final _accountInfo = await sdk.webView! // .evalJavascript('api.query.system.account("$address")'); @@ -527,6 +544,34 @@ class SubstrateSdk with ChangeNotifier { return await idtyStatus(address) == 'Validated'; } + Future canCertify(String from, String to) async { + bool _result = false; + if (from != to && await isMember(from)) { + final _certData = await getCertData(from, to); + final _certMeta = await getCertMeta(from); + final int _removableOn = _certData['removableOn'] ?? 0; + final int _nextIssuableOn = _certMeta['nextIssuableOn'] ?? 0; + log.d(_removableOn); + if (_removableOn == 0 && _nextIssuableOn == 0) { + _result = true; + } + } + return _result; + } + + Future getCertMeta(String address) async { + var idtyIndex = await sdk.webView! + .evalJavascript('api.query.identity.identityIndexOf("$address")'); + + final _certMeta = await sdk.webView! + .evalJavascript('api.query.cert.storageIdtyCertMeta($idtyIndex)') ?? + ''; + // if (_certMeta['nextIssuableOn'] != 0) return {}; + + log.d(_certMeta); + return _certMeta; + } + Future derive( BuildContext context, String address, int number, String password) async { final keypair = getKeypair(address); diff --git a/lib/screens/myWallets/wallet_options.dart b/lib/screens/myWallets/wallet_options.dart index 2578e6a..04d4ba8 100644 --- a/lib/screens/myWallets/wallet_options.dart +++ b/lib/screens/myWallets/wallet_options.dart @@ -169,8 +169,8 @@ class WalletOptions extends StatelessWidget { width: 110, ) : Container( - width: 120, - height: 120, + width: 180, + height: 180, decoration: BoxDecoration( shape: BoxShape.circle, color: Colors.transparent, diff --git a/lib/screens/transaction_in_progress.dart b/lib/screens/transaction_in_progress.dart index 63bfb45..8a5e54f 100644 --- a/lib/screens/transaction_in_progress.dart +++ b/lib/screens/transaction_in_progress.dart @@ -76,7 +76,28 @@ class TransactionInProgress extends StatelessWidget { if (_result.contains('blockHash: ')) { _resultText = '$_actionName validé !'; } else { - _resultText = "Une erreur s'est produite:\n\n$_result"; + _resultText = "Une erreur s'est produite:\n"; + final String _exception = _result.split('Exception: ')[1]; + switch (_exception) { + case 'cert.NotRespectCertPeriod': + case 'identity.CreatorNotAllowedToCreateIdty': + { + _resultText += + "Vous devez attendre 24h entre chaque certification"; + } + break; + case 'cert.CannotCertifySelf': + { + _resultText += + "Vous ne pouvez pas vous certifier\nvous même ..."; + } + break; + default: + { + _resultText += "\n$_exception"; + } + break; + } } } } diff --git a/lib/screens/wallet_view.dart b/lib/screens/wallet_view.dart index 92b6455..18d1438 100644 --- a/lib/screens/wallet_view.dart +++ b/lib/screens/wallet_view.dart @@ -9,6 +9,7 @@ import 'package:gecko/providers/my_wallets.dart'; import 'package:gecko/models/wallet_data.dart'; import 'package:gecko/providers/wallets_profiles.dart'; import 'package:gecko/screens/avatar_fullscreen.dart'; +import 'package:gecko/screens/common_elements.dart'; import 'package:gecko/screens/myWallets/choose_wallet.dart'; import 'package:gecko/screens/myWallets/unlocking_wallet.dart'; import 'package:gecko/screens/transaction_in_progress.dart'; @@ -108,7 +109,7 @@ class WalletViewScreen extends StatelessWidget { WalletData? _defaultWallet = _myWalletProvider.getDefaultWallet(); return FutureBuilder( - future: _sub.isMember(_defaultWallet.address!), + future: _sub.canCertify(_defaultWallet.address!, pubkey!), builder: (context, AsyncSnapshot snapshot) { return Visibility( visible: (snapshot.data ?? false), @@ -128,38 +129,44 @@ class WalletViewScreen extends StatelessWidget { 'assets/gecko_certify.png')), ), onTap: () async { - String? _pin; - if (_myWalletProvider.pinCode == '') { - _pin = await Navigator.push( + final bool? _result = await confirmPopup( context, - MaterialPageRoute( - builder: (homeContext) { - return UnlockingWallet( - wallet: defaultWallet); - }, - ), - ); - } - if (_pin != null || - _myWalletProvider.pinCode != '') { - WalletsProfilesProvider - _walletViewProvider = - Provider.of( - context, - listen: false); - final acc = _sub.getCurrentWallet(); - _sub.certify( - acc.address!, - _pin ?? _myWalletProvider.pinCode, - _walletViewProvider.address!); + "Êtes-vous certain de vouloir certifier l'adresse:\n\n${getShortPubkey(pubkey!)}"); - Navigator.push( - context, - MaterialPageRoute(builder: (context) { - return const TransactionInProgress( - transType: 'cert'); - }), - ); + if (_result ?? false) { + String? _pin; + if (_myWalletProvider.pinCode == '') { + _pin = await Navigator.push( + context, + MaterialPageRoute( + builder: (homeContext) { + return UnlockingWallet( + wallet: defaultWallet); + }, + ), + ); + } + if (_pin != null || + _myWalletProvider.pinCode != '') { + WalletsProfilesProvider + _walletViewProvider = Provider.of< + WalletsProfilesProvider>( + context, + listen: false); + final acc = _sub.getCurrentWallet(); + _sub.certify( + acc.address!, + _pin ?? _myWalletProvider.pinCode, + _walletViewProvider.address!); + + Navigator.push( + context, + MaterialPageRoute(builder: (context) { + return const TransactionInProgress( + transType: 'cert'); + }), + ); + } } }), ),