Flutter区块链交互插件xpx_chain_sdk的使用

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

Flutter区块链交互插件xpx_chain_sdk的使用

简介

<xpx_chain_sdk> 是一个轻量级的Dart库,用于与Sirius区块链进行交互。它提供了完整的库集覆盖,并支持同步和异步请求。

依赖安装

首先,在项目的pubspec.yaml文件中添加以下依赖:

dependencies:
  xpx_chain_sdk: 0.0.11

然后运行以下命令以安装该包:

使用pub安装

$ pub get

使用Flutter安装

$ flutter packages get

你也可以通过编辑器的工具(如pub get或flutter packages get)来安装。

导入库

在你的Dart代码中导入该库:

import 'package:xpx_chain_sdk/xpx_sdk.dart';

示例代码

以下是使用xpx_chain_sdk的完整示例代码。此示例展示了如何创建账户、从公钥生成账户、从原始地址字符串生成地址等操作。

import 'package:xpx_chain_sdk/xpx_sdk.dart';

void main() async {
  // 定义私钥
  const privateKey =
      'B3543906F375F9259FC4687EAE644FF71982ED1AEA97E9AAF6D031B200DE849C';

  // 从给定的私钥创建账户
  final accountOne = await Account.fromPrivateKey(privateKey, NetworkType.PUBLIC_TEST);
  print(accountOne);

  // 从给定的网络类型随机生成账户
  final accountTwo = await Account.random(NetworkType.PUBLIC_TEST);
  print(accountTwo);

  // 定义公钥
  const publicKey =
      '9a6a4e41d2b69dfe899c0c34d56261059986340cf83fc597d4b6715ab9e77ac8';

  // 从给定的公钥生成公共账户
  final publicAccount = PublicAccount.fromPublicKey(publicKey, NetworkType.PUBLIC_TEST);
  print(publicAccount);

  // 定义原始地址字符串
  const rawAddress = 'VAQXZH7TDE6EMG7KIGJ5KPCHHAEDYK4VIMLZD7VK';

  // 从给定的原始地址字符串生成地址
  final addressOne = Address.fromRawAddress(rawAddress);
  print(addressOne);

  // 从给定的公钥生成地址
  final addressTwo = Address.fromPublicKey(publicKey, NetworkType.PUBLIC_TEST);
  print(addressTwo);

  // 定义十六进制编码的地址
  const encodedAddress = 'A83850DF3301785F586F156D71879E870626093580406EBC5A';

  // 从给定的十六进制编码地址生成地址
  final addressThree = Address.fromEncoded(encodedAddress);
  print(addressThree);
}

更多关于Flutter区块链交互插件xpx_chain_sdk的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html

1 回复

更多关于Flutter区块链交互插件xpx_chain_sdk的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html


当然,以下是如何在Flutter应用中集成并使用xpx_chain_sdk插件与区块链进行交互的代码示例。xpx_chain_sdk是一个用于与NEM区块链(特别是Symbol或XEM区块链)交互的Flutter插件。

1. 添加依赖

首先,你需要在pubspec.yaml文件中添加xpx_chain_sdk依赖:

dependencies:
  flutter:
    sdk: flutter
  xpx_chain_sdk: ^最新版本号  # 请替换为实际的最新版本号

然后运行flutter pub get来安装依赖。

2. 导入插件

在你的Dart文件中导入插件:

import 'package:xpx_chain_sdk/xpx_chain_sdk.dart';

3. 配置节点URL

在使用SDK之前,你需要配置一个NEM区块链节点的URL。例如:

final networkType = NetworkType.MAIN_NET; // 或者 TEST_NET
final nodeUrl = 'http://your-node-url:3000'; // 替换为你的节点URL

final sdk = NEM(networkType, nodeUrl);

4. 创建账户

你可以使用SDK生成一个新的账户:

Future<void> generateAccount() async {
  final account = await sdk.account.generateAccount();
  print('Private Key: ${account.privateKey}');
  print('Public Key: ${account.publicKey}');
  print('Address: ${account.address}');
}

5. 查询账户信息

你可以查询某个账户的余额和其他信息:

Future<void> getAccountInfo(String address) async {
  final accountInfo = await sdk.account.getAccountInfo(Address.fromRawAddress(address));
  print('Account Info: $accountInfo');
}

6. 发送交易

发送交易涉及多个步骤,包括构建交易、签名交易和广播交易。以下是一个简单的示例,展示如何发送Mosaic(代币):

Future<void> sendMosaic(String senderPrivateKey, String recipientAddress, int mosaicId, int quantity) async {
  final senderAccount = Account.fromPrivateKey(senderPrivateKey);
  final mosaic = Mosaic.fromId(MosaicId.fromHex(mosaicId.toRadixString(16)), quantity);
  final transferTransaction = TransferTransaction.create(
    Deadline.create(),
    Address.fromRawAddress(recipientAddress),
    [mosaic],
    PlainMessage.create('Transfer Test'),
    NetworkType.MAIN_NET,
  );

  final signedTransaction = await sdk.transaction.sign(senderAccount, transferTransaction);
  final announceResponse = await sdk.transaction.announce(signedTransaction);

  print('Announce Response: $announceResponse');
}

完整示例

以下是一个完整的示例,展示了如何生成账户、查询账户信息和发送Mosaic:

import 'package:flutter/material.dart';
import 'package:xpx_chain_sdk/xpx_chain_sdk.dart';

void main() => runApp(MyApp());

class MyApp extends StatefulWidget {
  @override
  _MyAppState createState() => _MyAppState();
}

class _MyAppState extends State<MyApp> {
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      home: Scaffold(
        appBar: AppBar(
          title: Text('Flutter Blockchain Interaction'),
        ),
        body: Center(
          child: Column(
            mainAxisAlignment: MainAxisAlignment.center,
            children: <Widget>[
              ElevatedButton(
                onPressed: () async {
                  final networkType = NetworkType.TEST_NET;
                  final nodeUrl = 'http://bob.nem.ninja:3000'; // 使用一个公共测试节点
                  final sdk = NEM(networkType, nodeUrl);
                  
                  final account = await sdk.account.generateAccount();
                  print('Generated Account:');
                  print('Private Key: ${account.privateKey}');
                  print('Public Key: ${account.publicKey}');
                  print('Address: ${account.address}');

                  // 查询账户信息
                  final accountInfo = await sdk.account.getAccountInfo(account.address);
                  print('Account Info: $accountInfo');

                  // 发送Mosaic(这里使用测试网的XEM mosaicId: 57F7DA20692768ED)
                  await sendMosaic(
                    account.privateKey, 
                    'TB7QLV-F5C5XW-5JQO7-CQ3VA-QO6LW-E4V4B-G7ZYQ-5G7OQ-F263Q', // 替换为接收者地址
                    '57F7DA20692768ED', // XEM mosaicId
                    1000000, // 数量(微XEM)
                  );
                },
                child: Text('Generate Account & Send Mosaic'),
              ),
            ],
          ),
        ),
      ),
    );
  }

  Future<void> sendMosaic(String senderPrivateKey, String recipientAddress, int mosaicId, int quantity) async {
    final senderAccount = Account.fromPrivateKey(senderPrivateKey);
    final mosaic = Mosaic.fromId(MosaicId.fromHex(mosaicId.toRadixString(16)), quantity);
    final transferTransaction = TransferTransaction.create(
      Deadline.create(),
      Address.fromRawAddress(recipientAddress),
      [mosaic],
      PlainMessage.create('Transfer Test'),
      NetworkType.TEST_NET,
    );

    final NetworkRepository networkRepository = NetworkRepository();
    final nodeHttp = await networkRepository.getNodeHttp(senderAccount.networkType, 'http://bob.nem.ninja:3000');
    final signedTransaction = await nodeHttp.account.signTransaction(senderAccount, transferTransaction);
    final announceResponse = await nodeHttp.transaction.announce(signedTransaction);

    print('Announce Response: $announceResponse');
  }
}

请注意,上述代码示例假设你使用的是测试网络,并且已经有一个公共测试节点可用。在实际应用中,你需要确保你的节点URL和私钥是安全的,并且处理所有可能的异常和错误情况。

回到顶部