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 {
|
Future<List<int>> getCerts(String address) async {
|
||||||
final idtyIndex = await sdk.webView!
|
final idtyIndex = await sdk.webView!
|
||||||
.evalJavascript('api.query.identity.identityIndexOf("$address")');
|
.evalJavascript('api.query.identity.identityIndexOf("$address")');
|
||||||
log.d(idtyIndex);
|
log.d('u32: ' + idtyIndex.toString());
|
||||||
|
|
||||||
final _certsReceiver = await sdk.webView!
|
final _certsReceiver = await sdk.webView!
|
||||||
.evalJavascript('api.query.cert.storageIdtyCertMeta($idtyIndex)') ??
|
.evalJavascript('api.query.cert.storageIdtyCertMeta($idtyIndex)') ??
|
||||||
|
@ -222,6 +222,23 @@ class SubstrateSdk with ChangeNotifier {
|
||||||
return [_certsReceiver['receivedCount'], _certsReceiver['issuedCount']];
|
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 {
|
// Future<bool> isAccountExit(String address) async {
|
||||||
// final _accountInfo = await sdk.webView!
|
// final _accountInfo = await sdk.webView!
|
||||||
// .evalJavascript('api.query.system.account("$address")');
|
// .evalJavascript('api.query.system.account("$address")');
|
||||||
|
@ -527,6 +544,34 @@ class SubstrateSdk with ChangeNotifier {
|
||||||
return await idtyStatus(address) == 'Validated';
|
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(
|
Future<String> derive(
|
||||||
BuildContext context, String address, int number, String password) async {
|
BuildContext context, String address, int number, String password) async {
|
||||||
final keypair = getKeypair(address);
|
final keypair = getKeypair(address);
|
||||||
|
|
|
@ -169,8 +169,8 @@ class WalletOptions extends StatelessWidget {
|
||||||
width: 110,
|
width: 110,
|
||||||
)
|
)
|
||||||
: Container(
|
: Container(
|
||||||
width: 120,
|
width: 180,
|
||||||
height: 120,
|
height: 180,
|
||||||
decoration: BoxDecoration(
|
decoration: BoxDecoration(
|
||||||
shape: BoxShape.circle,
|
shape: BoxShape.circle,
|
||||||
color: Colors.transparent,
|
color: Colors.transparent,
|
||||||
|
|
|
@ -76,7 +76,28 @@ class TransactionInProgress extends StatelessWidget {
|
||||||
if (_result.contains('blockHash: ')) {
|
if (_result.contains('blockHash: ')) {
|
||||||
_resultText = '$_actionName validé !';
|
_resultText = '$_actionName validé !';
|
||||||
} else {
|
} 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/models/wallet_data.dart';
|
||||||
import 'package:gecko/providers/wallets_profiles.dart';
|
import 'package:gecko/providers/wallets_profiles.dart';
|
||||||
import 'package:gecko/screens/avatar_fullscreen.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/choose_wallet.dart';
|
||||||
import 'package:gecko/screens/myWallets/unlocking_wallet.dart';
|
import 'package:gecko/screens/myWallets/unlocking_wallet.dart';
|
||||||
import 'package:gecko/screens/transaction_in_progress.dart';
|
import 'package:gecko/screens/transaction_in_progress.dart';
|
||||||
|
@ -108,7 +109,7 @@ class WalletViewScreen extends StatelessWidget {
|
||||||
WalletData? _defaultWallet =
|
WalletData? _defaultWallet =
|
||||||
_myWalletProvider.getDefaultWallet();
|
_myWalletProvider.getDefaultWallet();
|
||||||
return FutureBuilder(
|
return FutureBuilder(
|
||||||
future: _sub.isMember(_defaultWallet.address!),
|
future: _sub.canCertify(_defaultWallet.address!, pubkey!),
|
||||||
builder: (context, AsyncSnapshot<bool?> snapshot) {
|
builder: (context, AsyncSnapshot<bool?> snapshot) {
|
||||||
return Visibility(
|
return Visibility(
|
||||||
visible: (snapshot.data ?? false),
|
visible: (snapshot.data ?? false),
|
||||||
|
@ -128,38 +129,44 @@ class WalletViewScreen extends StatelessWidget {
|
||||||
'assets/gecko_certify.png')),
|
'assets/gecko_certify.png')),
|
||||||
),
|
),
|
||||||
onTap: () async {
|
onTap: () async {
|
||||||
String? _pin;
|
final bool? _result = await confirmPopup(
|
||||||
if (_myWalletProvider.pinCode == '') {
|
|
||||||
_pin = await Navigator.push(
|
|
||||||
context,
|
context,
|
||||||
MaterialPageRoute(
|
"Êtes-vous certain de vouloir certifier l'adresse:\n\n${getShortPubkey(pubkey!)}");
|
||||||
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(
|
if (_result ?? false) {
|
||||||
context,
|
String? _pin;
|
||||||
MaterialPageRoute(builder: (context) {
|
if (_myWalletProvider.pinCode == '') {
|
||||||
return const TransactionInProgress(
|
_pin = await Navigator.push(
|
||||||
transType: 'cert');
|
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');
|
||||||
|
}),
|
||||||
|
);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}),
|
}),
|
||||||
),
|
),
|
||||||
|
|
Loading…
Reference in New Issue