feat: detect if a wallet can cert an address; improve errors view;
This commit is contained in:
parent
6280517f8d
commit
9eacbef2a8
|
@ -213,7 +213,7 @@ class SubstrateSdk with ChangeNotifier {
|
|||
Future<List<int>> 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<Map> 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<bool> 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<bool> 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<Map> 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<String> derive(
|
||||
BuildContext context, String address, int number, String password) async {
|
||||
final keypair = getKeypair(address);
|
||||
|
|
|
@ -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,
|
||||
|
|
|
@ -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;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -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<bool?> snapshot) {
|
||||
return Visibility(
|
||||
visible: (snapshot.data ?? false),
|
||||
|
@ -128,6 +129,11 @@ class WalletViewScreen extends StatelessWidget {
|
|||
'assets/gecko_certify.png')),
|
||||
),
|
||||
onTap: () async {
|
||||
final bool? _result = await confirmPopup(
|
||||
context,
|
||||
"Êtes-vous certain de vouloir certifier l'adresse:\n\n${getShortPubkey(pubkey!)}");
|
||||
|
||||
if (_result ?? false) {
|
||||
String? _pin;
|
||||
if (_myWalletProvider.pinCode == '') {
|
||||
_pin = await Navigator.push(
|
||||
|
@ -143,8 +149,8 @@ class WalletViewScreen extends StatelessWidget {
|
|||
if (_pin != null ||
|
||||
_myWalletProvider.pinCode != '') {
|
||||
WalletsProfilesProvider
|
||||
_walletViewProvider =
|
||||
Provider.of<WalletsProfilesProvider>(
|
||||
_walletViewProvider = Provider.of<
|
||||
WalletsProfilesProvider>(
|
||||
context,
|
||||
listen: false);
|
||||
final acc = _sub.getCurrentWallet();
|
||||
|
@ -161,6 +167,7 @@ class WalletViewScreen extends StatelessWidget {
|
|||
}),
|
||||
);
|
||||
}
|
||||
}
|
||||
}),
|
||||
),
|
||||
),
|
||||
|
|
Loading…
Reference in New Issue