Flutter区块链交互插件symbol_sdk的使用
Flutter区块链交互插件symbol_sdk的使用
Symbol SDK 是一个可以同时用于 Symbol 和 NEM 的开发工具包。以下是一个简单的示例,展示了如何使用 symbol_sdk
插件在 Flutter 中发送转账交易。
示例代码
import 'package:symbol_sdk/index.dart';
import 'package:symbol_sdk/CryptoTypes.dart' as ct;
import 'package:symbol_sdk/symbol/index.dart';
import 'package:http/http.dart' as http;
void main() async {
// 创建一个 Symbol 网络实例(测试网)
var facade = SymbolFacade(Network.TESTNET);
// 生成一个密钥对
var keyPair = KeyPair(ct.PrivateKey('PRIVATE_KEY'));
// 创建一笔转账交易
var tx = TransferTransactionV1(
network: NetworkType.TESTNET,
deadline: Timestamp(facade.network.fromDatetime(DateTime.now().toUtc()).add(Duration(hours: 2)).millisecondsSinceEpoch),
signerPublicKey: PublicKey(keyPair.publicKey.bytes),
recipientAddress: UnresolvedAddress('TA5LGYEWS6L2WYBQ75J2DGK7IOZHYVWFWRLOFWI'),
message: MessageEncoder.toPlainMessage('Hello, Symbol!!')
);
// 设置交易费用
tx.fee = Amount(tx.size * 100);
// 使用密钥对对交易进行签名
var signature = facade.signTransaction(keyPair, tx);
// 将签名附加到交易中
var payload = facade.attachSignature(tx, signature);
// 计算交易哈希
var hash = facade.hashTransaction(tx);
print('交易哈希: $hash');
// 发送交易到节点
await http.put(
Uri.parse('http://sym-test-01.opening-line.jp:3000/transactions'),
headers: {'Content-Type': 'application/json'},
body: payload
).then((response) {
print('响应结果: ${response.body}');
}).catchError((error) {
print('错误信息: $error');
});
}
代码解释
-
导入必要的库
import 'package:symbol_sdk/index.dart'; import 'package:symbol_sdk/CryptoTypes.dart' as ct; import 'package:symbol_sdk/symbol/index.dart'; import 'package:http/http.dart' as http;
-
创建一个 Symbol 网络实例
var facade = SymbolFacade(Network.TESTNET);
-
生成一个密钥对
var keyPair = KeyPair(ct.PrivateKey('PRIVATE_KEY'));
-
创建一笔转账交易
var tx = TransferTransactionV1( network: NetworkType.TESTNET, deadline: Timestamp(facade.network.fromDatetime(DateTime.now().toUtc()).add(Duration(hours: 2)).millisecondsSinceEpoch), signerPublicKey: PublicKey(keyPair.publicKey.bytes), recipientAddress: UnresolvedAddress('TA5LGYEWS6L2WYBQ75J2DGK7IOZHYVWFWRLOFWI'), message: MessageEncoder.toPlainMessage('Hello, Symbol!!') );
-
设置交易费用
tx.fee = Amount(tx.size * 100);
-
使用密钥对对交易进行签名
var signature = facade.signTransaction(keyPair, tx);
-
将签名附加到交易中
var payload = facade.attachSignature(tx, signature);
-
计算交易哈希
var hash = facade.hashTransaction(tx); print('交易哈希: $hash');
-
发送交易到节点
await http.put( Uri.parse('http://sym-test-01.opening-line.jp:3000/transactions'), headers: {'Content-Type': 'application/json'}, body: payload ).then((response) { print('响应结果: ${response.body}'); }).catchError((error) { print('错误信息: $error'); });
更多关于Flutter区块链交互插件symbol_sdk的使用的实战教程也可以访问 https://www.itying.com/category-92-b0.html
更多关于Flutter区块链交互插件symbol_sdk的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html
symbol_sdk
是一个用于与 Symbol 区块链进行交互的 Dart/Flutter 插件。Symbol 是由 NEM 团队开发的下一代区块链平台,专注于企业级应用和资产数字化。symbol_sdk
提供了与 Symbol 区块链进行交互的核心功能,包括创建账户、发送交易、查询区块链数据等。
以下是如何在 Flutter 中使用 symbol_sdk
插件的基本步骤:
1. 添加依赖
首先,你需要在 pubspec.yaml
文件中添加 symbol_sdk
依赖:
dependencies:
flutter:
sdk: flutter
symbol_sdk: ^1.0.0 # 请检查最新版本
然后运行 flutter pub get
来安装依赖。
2. 导入库
在需要使用 Symbol SDK 的 Dart 文件中,导入 symbol_sdk
库:
import 'package:symbol_sdk/symbol_sdk.dart';
3. 配置网络
首先,你需要配置要连接的 Symbol 网络(如主网、测试网等):
var networkType = NetworkType.TEST_NET; // 选择网络类型
var nodeUrl = 'https://sym-test.opening-line.jp:3001'; // Symbol 节点 URL
4. 创建账户
你可以使用 Account
类来创建一个新的账户:
var account = Account.generateNewAccount(networkType);
print('Private Key: ${account.privateKey}');
print('Public Key: ${account.publicKey}');
print('Address: ${account.address}');
5. 发送交易
使用 TransactionService
来创建和发送交易。例如,发送 XYM(Symbol 的原生代币)到另一个地址:
var recipientAddress = Address.fromRawAddress('TALICELCD3XPH4FFI5STGGNSNSWPOTG5E4DS2TOS');
var amount = 1000000; // 1 XYM (以最小单位表示,1 XYM = 1000000 units)
var transaction = TransferTransaction(
recipientAddress: recipientAddress,
mosaics: [Mosaic(MosaicId(CurrencyMosaic), amount)],
networkType: networkType,
);
var signedTransaction = account.sign(transaction);
var transactionHttp = TransactionHttp(nodeUrl);
transactionHttp.announce(signedTransaction).then((response) {
print('Transaction announced: ${response.hash}');
}).catchError((error) {
print('Error announcing transaction: $error');
});
6. 查询区块链数据
你可以使用 BlockchainHttp
来查询区块链数据,例如获取账户信息:
var accountHttp = AccountHttp(nodeUrl);
accountHttp.getAccountInfo(account.address).then((accountInfo) {
print('Account Info: $accountInfo');
}).catchError((error) {
print('Error fetching account info: $error');
});
7. 监听事件
你可以使用 Listener
来监听区块链上的事件,例如新块生成:
var listener = Listener(nodeUrl);
listener.open().then((_) {
listener.newBlock().listen((blockInfo) {
print('New block: ${blockInfo.height}');
});
}).catchError((error) {
print('Error opening listener: $error');
});
8. 处理 Mosaic
Symbol 区块链支持自定义 Mosaic(资产)。你可以创建、查询和转移 Mosaic:
var mosaicHttp = MosaicHttp(nodeUrl);
mosaicHttp.getMosaicInfo(MosaicId(CurrencyMosaic)).then((mosaicInfo) {
print('Mosaic Info: $mosaicInfo');
}).catchError((error) {
print('Error fetching mosaic info: $error');
});
9. 处理命名空间
Symbol 区块链支持命名空间,可以用于创建唯一的标识符(如域名):
var namespaceHttp = NamespaceHttp(nodeUrl);
namespaceHttp.getNamespaceInfo(NamespaceId('my.namespace')).then((namespaceInfo) {
print('Namespace Info: $namespaceInfo');
}).catchError((error) {
print('Error fetching namespace info: $error');
});
10. 错误处理
在进行区块链操作时,务必处理可能出现的错误,例如网络连接失败、交易签名错误等。
try {
var accountInfo = await accountHttp.getAccountInfo(account.address);
print('Account Info: $accountInfo');
} catch (e) {
print('Error: $e');
}