Flutter区块链交互插件xpx_chain_sdk的使用
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
更多关于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和私钥是安全的,并且处理所有可能的异常和错误情况。