Flutter Polkadot交互插件polkadart的使用
Flutter Polkadot交互插件polkadart的使用
Polkadart 提供了一个干净的包装,涵盖了由 Polkadot/Substrate 网络客户端暴露的所有方法,并定义了节点暴露的所有类型。
运行示例
获取依赖项:
dart pub get
# 运行示例
dart run multisig_example.dart
使用方法
以下是一个简单的示例,展示如何使用 Provider
和 StateApi
来获取运行时版本信息:
import 'package:polkadart/polkadart.dart' show Provider, StateApi;
void main() async {
// 创建一个连接到 Polkadot RPC 的提供者
final polkadot = Provider(Uri.parse('wss://rpc.polkadot.io'));
// 创建一个 StateApi 实例
final api = StateApi(polkadot);
// 获取并打印运行时版本
final runtimeVersion = await api.getRuntimeVersion();
print(runtimeVersion.toJson());
// 断开与 RPC 的连接
await polkadot.disconnect();
}
多签操作
初始化多签(创建和资助)
以下是如何创建和资助一个多签账户的示例:
final provider = Provider.fromUri(Uri.parse('wss://westend-rpc.polkadot.io'));
// 第一签名人
final keypairS1 = await keyring.KeyPair.sr25519.fromUri('//keypairS1');
// 第二签名人地址
final signatory2Address = '5Cp4.......';
// 第三签名人地址
final signatory3Address = '5Dt2.......';
// 接收方地址
final recipientAddress = '5Fq3.......';
///
/// 创建并资助多签账户
final multiSigResponse = await Multisig.createAndFundMultisig(
depositorKeyPair: keypairS1,
otherSignatoriesAddressList: [signatory2Address, signatory3Address],
threshold: 2, // 需要2个签名
recipientAddress: recipientAddress,
amount: BigInt.parse('7000000000000'), // 7 WND ~ (tokenDecimals: 12)
provider: provider,
);
// 将 JSON 响应转发给其他签名人
final json = multiSigResponse.toJson();
ApproveAsMulti
用于批准多签调用,并等待其他签名人批准:
// 第二签名人
final keypairS2 = await keyring.KeyPair.sr25519.fromUri('//keypairS2');
// 将 JSON 转发给其他签名人
final json = multiSigResponse.toJson();
// 假设 keypairS2 是第一个批准的人
final localResponse = MultisigResponse.fromJson(json);
// 等待大约15秒以便交易被包含在区块中
await Future.delayed(Duration(seconds: 15));
// 使用 keypairS2 批准此调用并等待进一步批准
await localResponse.approveAsMulti(provider, keypairS2);
AsMulti
用于完成多签调用的最终批准并在达到阈值时执行交易:
// 第三签名人
final keypairS3 = await keyring.KeyPair.sr25519.fromUri('//keypairS3');
// 将 JSON 转发给其他签名人
final json = multiSigResponse.toJson();
final localResponse = MultisigResponse.fromJson(json);
// 等待大约15秒以便交易被包含在区块中
await Future.delayed(Duration(seconds: 15));
// 使用 keypairS3 批准此调用并在达到阈值时执行交易
await localResponse.asMulti(provider, keypairS3);
cancelAsMulti
用于取消多签调用:
// 第一签名人
final keypairS1 = await keyring.KeyPair.sr25519.fromUri('//keypairS1');
// 将 JSON 转发给其他签名人
final json = multiSigResponse.toJson();
final localResponse = MultisigResponse.fromJson(json);
// 等待大约15秒以便交易被包含在区块中
await Future.delayed(Duration(seconds: 15));
// 使用 keypairS1 取消此调用
await localResponse.cancelAsMulti(provider, keypairS1);
教程
寻找入门教程?可以查看 example 中的指南,了解如何使用 API 进行查询和提交交易。
以下是另一个示例代码,展示了如何使用 AuthorApi
提交和监视外在事务:
import 'dart:typed_data';
import 'package:convert/convert.dart';
import 'package:polkadart/apis/apis.dart';
import 'package:polkadart/polkadart.dart' show Provider, StateApi;
void main() async {
// 创建一个连接到指定 RPC 的提供者
final polkadart = Provider.fromUri(Uri.parse('wss://rpc.matrix.canary.enjin.io'));
// 创建一个 StateApi 实例
final state = StateApi(polkadart);
// 获取并打印运行时版本
final runtimeVersion = await state.getRuntimeVersion();
print(runtimeVersion.toJson());
// 创建 AuthorApi 实例
final author = AuthorApi(polkadart);
// 解码外在事务
final extrinsic = hex.decode(
'350284004ea987928399dfe5b94bf7d37995850a21067bfa4549fa83b40250ee635fc06400036990f9642741b00d3484d2e5bd7cba6fa2eea682f6b6c612e47c204f09b0838c171ba42feae5bea1c48a48213cba42a5d590e1c07d1213d263a258f23f5102001c000a07004ea987928399dfe5b94bf7d37995850a21067bfa4549fa83b40250ee635fc064025a6202');
// 提交并监视外在事务
final submit = await author.submitAndWatchExtrinsic(extrinsic as Uint8List,
(data) => print('From here: ${data.type} - ${data.value}'));
// 打印提交结果
print(submit);
}
更多关于Flutter Polkadot交互插件polkadart的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html
更多关于Flutter Polkadot交互插件polkadart的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html
当然,下面是一个关于如何在Flutter项目中使用polkadart
插件与Polkadot进行交互的代码示例。polkadart
是一个用于与Polkadot区块链进行交互的Dart库,虽然它并不是官方直接支持的Flutter插件,但可以通过在Flutter项目中添加Dart依赖来使用它。
首先,你需要在你的pubspec.yaml
文件中添加polkadart
依赖:
dependencies:
flutter:
sdk: flutter
polkadart: ^x.y.z # 请替换为最新版本号
然后运行flutter pub get
来获取依赖。
接下来是一个简单的示例代码,展示如何使用polkadart
库连接到Polkadot节点并查询一些基本信息。
import 'package:flutter/material.dart';
import 'package:polkadart/polkadart.dart';
void main() {
runApp(MyApp());
}
class MyApp extends StatelessWidget {
@override
Widget build(BuildContext context) {
return MaterialApp(
title: 'Flutter Polkadot Interaction',
theme: ThemeData(
primarySwatch: Colors.blue,
),
home: PolkadotScreen(),
);
}
}
class PolkadotScreen extends StatefulWidget {
@override
_PolkadotScreenState createState() => _PolkadotScreenState();
}
class _PolkadotScreenState extends State<PolkadotScreen> {
String chainInfo = "";
@override
void initState() {
super.initState();
_fetchChainInfo();
}
Future<void> _fetchChainInfo() async {
try {
// 配置Polkadot节点URL
final nodeUrl = "wss://your-polkadot-node-url";
final api = await ApiPromise.create({ provider: nodeUrl });
// 获取链信息
final chain = await api.rpc.system.chain();
final name = await api.rpc.system.name();
final version = await api.rpc.system.version();
setState(() {
chainInfo = "Chain: $chain, Name: $name, Version: $version";
});
// 关闭连接
await api.disconnect();
} catch (e) {
setState(() {
chainInfo = "Error: ${e.message}";
});
}
}
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
title: Text('Flutter Polkadot Interaction'),
),
body: Center(
child: Text(chainInfo),
),
);
}
}
代码说明
-
添加依赖:在
pubspec.yaml
中添加polkadart
依赖。 -
创建Flutter应用:在
main.dart
中创建基本的Flutter应用结构。 -
连接到Polkadot节点:使用
ApiPromise.create
方法连接到Polkadot节点。你需要替换wss://your-polkadot-node-url
为你的Polkadot节点WebSocket URL。 -
获取链信息:通过
api.rpc.system.chain()
,api.rpc.system.name()
, 和api.rpc.system.version()
获取链的ID、名称和版本信息。 -
更新UI:使用
setState
方法更新UI以显示链信息。 -
关闭连接:在完成操作后,使用
api.disconnect()
方法关闭与节点的连接。
注意事项
- 确保你的Polkadot节点正在运行,并且WebSocket接口是开放的。
polkadart
库可能需要根据Polkadot网络的更新进行更新,所以请检查库的最新版本和文档。- 在生产环境中,你可能需要处理更多的错误和异常,以及优化性能。
这个示例代码应该能帮助你开始使用polkadart
库在Flutter应用中与Polkadot进行交互。