Skip to content
Snippets Groups Projects
Commit 900c4d24 authored by poka's avatar poka
Browse files

Begin to manage keystores

parent 1f1f7a3e
No related branches found
No related tags found
No related merge requests found
Pipeline #14993 failed
......@@ -2,7 +2,6 @@ import 'dart:io';
import 'package:flutter/material.dart';
import 'package:gecko/models/chest_data.dart';
import 'package:gecko/models/g1_wallets_list.dart';
import 'package:gecko/models/keystore_data.dart';
import 'package:gecko/models/wallet_data.dart';
import 'package:hive/hive.dart';
import 'package:logger/logger.dart';
......@@ -21,7 +20,7 @@ late Box<WalletData> walletBox;
late Box<ChestData> chestBox;
late Box configBox;
late Box<G1WalletsList> g1WalletsBox;
late Box<KeyStoreData> keystoreBox;
late Box keystoreBox;
String cesiumPod = "https://g1.data.le-sou.org";
// String cesiumPod = "https://g1.data.e-is.pro";
......
......@@ -19,7 +19,6 @@ import 'dart:async';
import 'dart:io';
import 'package:flutter/services.dart';
import 'package:gecko/globals.dart';
import 'package:gecko/models/keystore_data.dart';
import 'package:gecko/providers/cesium_plus.dart';
import 'package:gecko/providers/change_pin.dart';
import 'package:gecko/models/chest_data.dart';
......@@ -40,7 +39,6 @@ import 'package:gecko/screens/search.dart';
import 'package:gecko/screens/search_result.dart';
import 'package:graphql_flutter/graphql_flutter.dart';
import 'package:hive_flutter/hive_flutter.dart';
import 'package:polkawallet_sdk/storage/types/keyPairData.dart';
import 'package:provider/provider.dart';
import 'package:flutter/foundation.dart';
import 'package:responsive_framework/responsive_framework.dart';
......@@ -68,13 +66,13 @@ Future<void> main() async {
Hive.registerAdapter(ChestDataAdapter());
Hive.registerAdapter(G1WalletsListAdapter());
Hive.registerAdapter(IdAdapter());
Hive.registerAdapter(KeyStoreDataAdapter());
Hive.registerAdapter(KeyPairData());
// Hive.registerAdapter(KeyStoreDataAdapter());
walletBox = await Hive.openBox<WalletData>("walletBox");
chestBox = await Hive.openBox<ChestData>("chestBox");
configBox = await Hive.openBox("configBox");
g1WalletsBox = await Hive.openBox<G1WalletsList>("g1WalletsBox");
keystoreBox = await Hive.openBox<KeyStoreData>("keystoreBox");
keystoreBox = await Hive.openBox("keystoreBox");
g1WalletsBox.clear();
......@@ -185,7 +183,7 @@ class Gecko extends StatelessWidget {
),
primaryColor: const Color(0xffFFD58D),
textTheme: const TextTheme(
bodyText1: TextStyle(fontSize: 20),
bodyText1: TextStyle(fontSize: 16),
bodyText2: TextStyle(fontSize: 18),
).apply(
bodyColor: const Color(0xFF000000),
......
import 'dart:convert';
import 'dart:math';
import 'package:flutter/material.dart';
import 'package:flutter/services.dart';
import 'package:gecko/globals.dart';
import 'package:gecko/models/keystore_data.dart';
import 'package:polkawallet_sdk/api/apiKeyring.dart';
import 'package:polkawallet_sdk/api/types/networkParams.dart';
import 'package:polkawallet_sdk/polkawallet_sdk.dart';
......@@ -13,6 +15,7 @@ class SubstrateSdk with ChangeNotifier {
final WalletSDK sdk = WalletSDK();
final Keyring keyring = Keyring();
bool sdkReady = false;
bool sdkLoading = false;
bool nodeConnected = false;
int blocNumber = 0;
......@@ -20,10 +23,12 @@ class SubstrateSdk with ChangeNotifier {
TextEditingController keystorePassword = TextEditingController();
Future<void> initApi() async {
sdkLoading = true;
await keyring.init([0, 2]);
await sdk.init(keyring);
sdkReady = true;
sdkLoading = false;
notifyListeners();
}
......@@ -39,6 +44,7 @@ class SubstrateSdk with ChangeNotifier {
);
if (res != null) {
nodeConnected = true;
print("Connecté au noeud ${sdk.api.connectedNode!.name}");
notifyListeners();
}
......@@ -53,7 +59,7 @@ class SubstrateSdk with ChangeNotifier {
final json = await sdk.api.keyring.importAccount(
keyring,
keyType: KeyType.keystore,
key: jsonKeystore.text,
key: jsonKeystore.text.replaceAll("'", "\\'"),
name: 'testKey',
password: keystorePassword.text,
);
......@@ -64,12 +70,29 @@ class SubstrateSdk with ChangeNotifier {
password: keystorePassword.text,
);
KeyStoreData _keystore = KeyStoreData(keystore: acc);
await keystoreBox.add(_keystore);
// await keystoreBox.clear();
await keystoreBox.add(acc.toJson());
Clipboard.setData(ClipboardData(text: jsonEncode(acc.toJson())));
notifyListeners();
}
void reload() {
notifyListeners();
}
List getKeyStoreAddress() {
List result = [];
for (var element in keystoreBox.values) {
// Clipboard.setData(ClipboardData(text: jsonEncode(element)));
result.add(element['address']);
}
return result;
}
Future<String> generateMnemonic() async {
final gen = await sdk.api.keyring.generateMnemonic(42);
return gen.mnemonic!;
}
}
......@@ -2,6 +2,7 @@ import 'package:bubble/bubble.dart';
import 'package:gecko/globals.dart';
import 'package:gecko/models/stateful_wrapper.dart';
import 'package:gecko/providers/chest_provider.dart';
import 'package:gecko/providers/substrate_sdk.dart';
import 'package:gecko/providers/wallets_profiles.dart';
import 'package:flutter/material.dart';
import 'package:gecko/providers/home.dart';
......@@ -27,6 +28,7 @@ class HomeScreen extends StatelessWidget {
Provider.of<MyWalletsProvider>(context);
Provider.of<ChestProvider>(context);
HomeProvider homeClass = HomeProvider();
SubstrateSdk _sub = Provider.of<SubstrateSdk>(context, listen: false);
final bool isWalletsExists = _myWalletProvider.checkIfWalletExist();
......@@ -84,7 +86,9 @@ class HomeScreen extends StatelessWidget {
body: Builder(
builder: (ctx) => StatefulWrapper(
onInit: () {
WidgetsBinding.instance!.addPostFrameCallback((_) {
WidgetsBinding.instance!.addPostFrameCallback((_) async {
if (!_sub.sdkReady && !_sub.sdkLoading) await _sub.initApi();
if (_sub.sdkReady && !_sub.nodeConnected) await _sub.connectNode();
if (isWalletsExists) homeClass.snackNode(ctx);
});
},
......@@ -533,7 +537,6 @@ Widget welcomeHome(context) {
);
}
Widget bubbleSpeak(String text, {double? long, Key? textKey}) {
return Bubble(
padding: long == null
......
......@@ -9,12 +9,12 @@ class SubstrateSandBox extends StatelessWidget {
@override
Widget build(BuildContext context) {
SubstrateSdk _sub = Provider.of<SubstrateSdk>(context, listen: false);
// SubstrateSdk _sub = Provider.of<SubstrateSdk>(context, listen: false);
return StatefulWrapper(
onInit: () async {
await _sub.initApi();
await _sub.connectNode();
// if (!_sub.sdkReady && !_sub.sdkLoading) await _sub.initApi();
// if (_sub.sdkReady && !_sub.nodeConnected) await _sub.connectNode();
},
child: Scaffold(
appBar: AppBar(
......@@ -26,20 +26,28 @@ class SubstrateSandBox extends StatelessWidget {
),
body: SafeArea(
child: Consumer<SubstrateSdk>(builder: (context, _sub, _) {
return Column(
return SingleChildScrollView(
child: Column(
crossAxisAlignment: CrossAxisAlignment.start,
children: <Widget>[
Text('js-api chargé ?: ${_sub.sdkReady}'),
Text(
'Noeud connecté ?: ${_sub.nodeConnected} (${_sub.subNode})'),
InkWell(
onTap: !_sub.nodeConnected
? () async {
await _sub.connectNode();
}
: null,
child: Text(
'Noeud connecté ?: ${_sub.nodeConnected} (${_sub.subNode})')),
if (_sub.nodeConnected)
Text('Numéro de bloc: ${_sub.blocNumber}'),
Text(
'Noeud "${_sub.sdk.api.connectedNode!.name}", bloc N°${_sub.blocNumber}'),
const SizedBox(height: 20),
const Text('List des trousseaux:'),
const Text('Liste des trousseaux:'),
Text(keystoreBox.isEmpty
? '-'
: keystoreBox.toMap().entries.toString()),
const SizedBox(height: 20),
: _sub.getKeyStoreAddress().toString()),
const SizedBox(height: 40),
const Text('Trousseau:'),
TextField(
controller: _sub.jsonKeystore,
......@@ -51,6 +59,8 @@ class SubstrateSandBox extends StatelessWidget {
const Text('Mot de passe:'),
TextField(
controller: _sub.keystorePassword,
obscureText: true,
obscuringCharacter: '•',
onChanged: (_) => _sub.reload(),
),
const SizedBox(height: 20),
......@@ -69,8 +79,22 @@ class SubstrateSandBox extends StatelessWidget {
style: TextStyle(fontSize: 20),
),
),
const SizedBox(height: 40),
ElevatedButton(
style: ElevatedButton.styleFrom(
primary: yellowC, // background
onPrimary: Colors.black, // foreground
),
onPressed: () async =>
print(await _sub.generateMnemonic()),
child: const Text(
'Générer un mnemonic',
style: TextStyle(fontSize: 20),
),
),
]),
]);
]),
);
}),
),
),
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment