Flutter Polkadot交互插件polkadart的使用

发布于 1周前 作者 yuanlaile 来自 Flutter

Flutter Polkadot交互插件polkadart的使用

Polkadart 提供了一个干净的包装,涵盖了由 Polkadot/Substrate 网络客户端暴露的所有方法,并定义了节点暴露的所有类型。

运行示例

获取依赖项:

dart pub get
# 运行示例
dart run multisig_example.dart

使用方法

以下是一个简单的示例,展示如何使用 ProviderStateApi 来获取运行时版本信息:

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

1 回复

更多关于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),
      ),
    );
  }
}

代码说明

  1. 添加依赖:在pubspec.yaml中添加polkadart依赖。

  2. 创建Flutter应用:在main.dart中创建基本的Flutter应用结构。

  3. 连接到Polkadot节点:使用ApiPromise.create方法连接到Polkadot节点。你需要替换wss://your-polkadot-node-url为你的Polkadot节点WebSocket URL。

  4. 获取链信息:通过api.rpc.system.chain(), api.rpc.system.name(), 和 api.rpc.system.version() 获取链的ID、名称和版本信息。

  5. 更新UI:使用setState方法更新UI以显示链信息。

  6. 关闭连接:在完成操作后,使用api.disconnect()方法关闭与节点的连接。

注意事项

  • 确保你的Polkadot节点正在运行,并且WebSocket接口是开放的。
  • polkadart库可能需要根据Polkadot网络的更新进行更新,所以请检查库的最新版本和文档。
  • 在生产环境中,你可能需要处理更多的错误和异常,以及优化性能。

这个示例代码应该能帮助你开始使用polkadart库在Flutter应用中与Polkadot进行交互。

回到顶部