Flutter密钥管理插件polkadart_keyring的使用
Flutter密钥管理插件polkadart_keyring的使用
简介
Polkadart Keyring
是一个用于管理基于 sr25519 的密钥对的工具。它提供了一个方便的接口来管理 sr25519 密钥对,允许你从 BIP39 助记词创建密钥对、将它们添加到密钥环中、通过地址或公钥检索密钥对,并执行各种操作。
安装
要在你的 Dart 项目中使用 Polkadart Keyring
,请在 pubspec.yaml
文件中添加以下依赖:
dependencies:
polkadart_keyring: ^0.3.2
使用示例
1. 从助记词创建密钥对
你可以从 BIP39 助记词创建一个新的 KeyPair
并将其添加到密钥环中。以下是一个示例:
import 'package:polkadart_keyring/polkadart_keyring.dart';
void main() async {
final keyring = Keyring();
final mnemonic = 'moral movie very draw assault whisper awful rebuild speed purity repeat card';
// 从助记词创建密钥对
final keyPair = await keyring.fromMnemonic(mnemonic);
print('Address: ${keyPair.address}');
}
2. 添加和检索密钥对
你可以通过种子(seed)创建密钥对并将其添加到密钥环中,然后通过地址或公钥检索这些密钥对。以下是一个示例:
import 'package:polkadart_keyring/polkadart_keyring.dart';
import 'dart:typed_data';
import 'package:convert/convert.dart';
void main() {
final keyring = Keyring();
// 创建两个密钥对
final keyPair1 = KeyPair.sr25519.fromSeed(
Uint8List.fromList('12345678901234567890123456789012'.codeUnits));
final keyPair2 = KeyPair.sr25519.fromSeed(
Uint8List.fromList(hex.decode('9d61b19deffd5a60ba844af492ec2cc44449c5697b326919703bac031cae7f60')));
// 将密钥对添加到密钥环
keyring.add(keyPair1);
keyring.add(keyPair2);
// 获取所有地址
final addresses = keyring.addresses;
print('Addresses: $addresses');
}
3. 通过公钥检索密钥对
你可以通过公钥检索密钥对。以下是一个示例:
import 'package:polkadart_keyring/polkadart_keyring.dart';
import 'dart:typed_data';
void main() {
final keyring = Keyring();
// 创建一个密钥对
final keyPair1 = KeyPair.sr25519.fromSeed(
Uint8List.fromList('12345678901234567890123456789012'.codeUnits));
// 获取公钥
final publicKey1 = keyPair1.publicKey.bytes;
// 将密钥对添加到密钥环
keyring.add(keyPair1);
// 通过公钥检索密钥对
final retrievedKeyPair = keyring.getByPublicKey(publicKey1);
if (retrievedKeyPair != null) {
print('Retrieved KeyPair Address: ${retrievedKeyPair.address}');
} else {
print('KeyPair not found');
}
// 尝试检索不存在的密钥对
final nonExistentKeyPair = keyring.getByPublicKey([1, 2, 3]);
if (nonExistentKeyPair == null) {
print('Non-existent KeyPair not found');
}
}
4. 删除密钥对
你可以从密钥环中删除密钥对。以下是一个示例:
import 'package:polkadart_keyring/polkadart_keyring.dart';
import 'dart:typed_data';
void main() {
final keyring = Keyring();
// 创建两个密钥对
final keyPair1 = KeyPair.sr25519.fromSeed(
Uint8List.fromList('12345678901234567890123456789012'.codeUnits));
final keyPair2 = KeyPair.sr25519.fromSeed(
Uint8List.fromList(hex.decode('9d61b19deffd5a60ba844af492ec2cc44449c5697b326919703bac031cae7f60')));
// 将密钥对添加到密钥环
keyring.add(keyPair1);
keyring.add(keyPair2);
// 删除一个密钥对
keyring.remove(keyPair1.address);
// 尝试检索已删除的密钥对
final nonExistentKeyPair = keyring.getByAddress(keyPair1.address);
if (nonExistentKeyPair == null) {
print('KeyPair removed successfully');
}
}
5. 编码和解码地址
你可以编码和解码地址。以下是一个示例:
import 'package:polkadart_keyring/polkadart_keyring.dart';
import 'dart:typed_data';
void main() {
final keyring = Keyring();
// 创建一个密钥对
final keyPair1 = KeyPair.sr25519.fromSeed(
Uint8List.fromList('12345678901234567890123456789012'.codeUnits));
// 获取地址和公钥
final address = keyPair1.address;
final publicKey = keyPair1.publicKey.bytes;
// 编码公钥为地址
final encodedAddress = keyring.encodeAddress(publicKey);
print('Encoded Address: $encodedAddress');
// 解码地址为公钥
final decodedPublicKey = keyring.decodeAddress(address);
print('Decoded Public Key: $decodedPublicKey');
// 验证编码和解码是否正确
final isAddressCorrect = encodedAddress == address;
final isPublicKeyCorrect = decodedPublicKey == publicKey;
print('Is Address Correct: $isAddressCorrect');
print('Is Public Key Correct: $isPublicKeyCorrect');
}
6. 设置和获取 SS58 地址格式
你可以设置和获取密钥环使用的 SS58 地址格式。以下是一个示例:
import 'package:polkadart_keyring/polkadart_keyring.dart';
void main() {
final keyring = Keyring();
// 设置 SS58 地址格式
keyring.ss58Format = 42;
// 获取 SS58 地址格式
print('SS58 Format: ${keyring.ss58Format}');
}
7. 获取所有公钥
你可以获取密钥环中的所有公钥。以下是一个示例:
import 'package:polkadart_keyring/polkadart_keyring.dart';
import 'dart:typed_data';
import 'package:convert/convert.dart';
void main() {
final keyring = Keyring();
// 创建两个密钥对
final keyPair1 = KeyPair.sr25519.fromSeed(
Uint8List.fromList('12345678901234567890123456789012'.codeUnits));
final keyPair2 = KeyPair.sr25519.fromSeed(
Uint8List.fromList(hex.decode('9d61b19deffd5a60ba844af492ec2cc44449c5697b326919703bac031cae7f60')));
// 将密钥对添加到密钥环
keyring.add(keyPair1);
keyring.add(keyPair2);
// 获取所有公钥
final publicKeys = keyring.publicKeys;
print('Public Keys: $publicKeys');
}
8. 获取所有地址
你可以获取密钥环中的所有地址。以下是一个示例:
import 'package:polkadart_keyring/polkadart_keyring.dart';
import 'dart:typed_data';
import 'package:convert/convert.dart';
void main() {
final keyring = Keyring();
// 创建两个密钥对
final keyPair1 = KeyPair.sr25519.fromSeed(
Uint8List.fromList('12345678901234567890123456789012'.codeUnits));
final keyPair2 = KeyPair.sr25519.fromSeed(
Uint8List.fromList(hex.decode('9d61b19deffd5a60ba844af492ec2cc44449c5697b326919703bac031cae7f60')));
// 将密钥对添加到密钥环
keyring.add(keyPair1);
keyring.add(keyPair2);
// 获取所有地址
final addresses = keyring.addresses;
print('Addresses: $addresses');
}
9. 获取所有密钥对
你可以获取密钥环中的所有密钥对。以下是一个示例:
import 'package:polkadart_keyring/polkadart_keyring.dart';
import 'dart:typed_data';
import 'package:convert/convert.dart';
void main() {
final keyring = Keyring();
// 创建两个密钥对
final keyPair1 = KeyPair.sr25519.fromSeed(
Uint8List.fromList('12345678901234567890123456789012'.codeUnits));
final keyPair2 = KeyPair.sr25519.fromSeed(
Uint8List.fromList(hex.decode('9d61b19deffd5a60ba844af492ec2cc44449c5697b326919703bac031cae7f60')));
// 将密钥对添加到密钥环
keyring.add(keyPair1);
keyring.add(keyPair2);
// 获取所有密钥对
final allKeyPairs = keyring.all;
for (final kp in allKeyPairs) {
print('Address: ${kp.address}');
}
}
10. 删除所有密钥对
你可以删除密钥环中的所有密钥对。以下是一个示例:
import 'package:polkadart_keyring/polkadart_keyring.dart';
import 'dart:typed_data';
import 'package:convert/convert.dart';
void main() {
final keyring = Keyring();
// 创建两个密钥对
final keyPair1 = KeyPair.sr25519.fromSeed(
Uint8List.fromList('12345678901234567890123456789012'.codeUnits));
final keyPair2 = KeyPair.sr25519.fromSeed(
Uint8List.fromList(hex.decode('9d61b19deffd5a60ba844af492ec2cc44449c5697b326919703bac031cae7f60')));
// 将密钥对添加到密钥环
keyring.add(keyPair1);
keyring.add(keyPair2);
// 删除所有密钥对
keyring.clear();
// 检查密钥环是否为空
final isKeyringEmpty = keyring.all.isEmpty;
print('Is Keyring Empty: $isKeyringEmpty');
}
11. 签名和验证
你可以签名和验证消息。以下是一个示例:
import 'package:polkadart_keyring/polkadart_keyring.dart';
import 'dart:typed_data';
import 'package:convert/convert.dart';
void main() {
final keyring = Keyring();
// 创建一个密钥对
final keyPair2 = KeyPair.sr25519.fromSeed(
Uint8List.fromList(hex.decode('9d61b19deffd5a60ba844af492ec2cc44449c5697b326919703bac031cae7f60')));
// 将密钥对添加到密钥环
keyring.add(keyPair2);
// 通过公钥检索密钥对
final kp = keyring.getByPublicKey(keyPair2.publicKey.bytes);
// 签名消息
final message = 'Hello, Polkadart!';
final signature = kp.sign(message.codeUnits);
// 验证签名
final isVerified = kp.verify(message.codeUnits, signature);
print('Is Verified: $isVerified');
}
更多关于Flutter密钥管理插件polkadart_keyring的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html
更多关于Flutter密钥管理插件polkadart_keyring的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html
当然,下面是一个关于如何在Flutter项目中使用polkadart_keyring
插件进行密钥管理的示例代码。这个插件主要用于与Polkadot及其相关链进行交互,管理密钥对。
首先,确保你已经在pubspec.yaml
文件中添加了polkadart_keyring
依赖:
dependencies:
flutter:
sdk: flutter
polkadart_keyring: ^最新版本号 # 请替换为实际的最新版本号
然后运行flutter pub get
来获取依赖。
接下来,你可以在你的Flutter项目中导入并使用polkadart_keyring
。以下是一个简单的示例,展示如何生成一个密钥对并获取其公钥:
import 'package:flutter/material.dart';
import 'package:polkadart_keyring/keyring.dart';
import 'package:polkadart_keyring/utils/ss58.dart';
void main() => runApp(MyApp());
class MyApp extends StatelessWidget {
@override
Widget build(BuildContext context) {
return MaterialApp(
home: Scaffold(
appBar: AppBar(
title: Text('Polkadart Keyring Example'),
),
body: Center(
child: KeyringExample(),
),
),
);
}
}
class KeyringExample extends StatefulWidget {
@override
_KeyringExampleState createState() => _KeyringExampleState();
}
class _KeyringExampleState extends State<KeyringExample> {
String publicKey = '';
@override
void initState() {
super.initState();
_generateKeyPair();
}
Future<void> _generateKeyPair() async {
// 创建一个Keyring实例,这里我们使用“ed25519”作为签名算法
final keyring = Keyring.instance;
final pair = keyring.pairFromUri('myAccount', sr25519: Sr25519());
// 获取公钥并转换为SS58格式
final ss58Address = ss58AddressFromPublicKey(pair.publicKey, networkType: NetworkType.polkadot);
// 更新UI
setState(() {
publicKey = ss58Address;
});
}
@override
Widget build(BuildContext context) {
return Column(
mainAxisAlignment: MainAxisAlignment.center,
children: <Widget>[
Text('Generated Public Key (SS58):'),
Text(publicKey),
],
);
}
}
在这个示例中,我们做了以下几件事:
- 创建一个Flutter应用。
- 在
KeyringExample
组件的initState
方法中调用_generateKeyPair
方法来生成密钥对。 - 使用
polkadart_keyring
的Keyring.instance.pairFromUri
方法生成一个密钥对。注意这里我们指定了使用Sr25519
作为签名算法。 - 使用
ss58AddressFromPublicKey
方法将公钥转换为SS58格式,这里指定了Polkadot网络类型。 - 更新UI以显示生成的公钥。
请注意,pairFromUri
方法通常用于从URI生成密钥对,这里的URI ('myAccount'
) 只是一个标识符,实际使用中你可能会有不同的方式来生成或管理密钥对。
此外,这个示例代码没有处理错误或异常情况,在实际应用中,你应该添加适当的错误处理来确保应用的健壮性。
希望这个示例能帮助你理解如何在Flutter项目中使用polkadart_keyring
进行密钥管理。如果你有任何其他问题,欢迎继续提问!