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');
  });
}

代码解释

  1. 导入必要的库

    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;
    
  2. 创建一个 Symbol 网络实例

    var facade = SymbolFacade(Network.TESTNET);
    
  3. 生成一个密钥对

    var keyPair = KeyPair(ct.PrivateKey('PRIVATE_KEY'));
    
  4. 创建一笔转账交易

    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!!')
    );
    
  5. 设置交易费用

    tx.fee = Amount(tx.size * 100);
    
  6. 使用密钥对对交易进行签名

    var signature = facade.signTransaction(keyPair, tx);
    
  7. 将签名附加到交易中

    var payload = facade.attachSignature(tx, signature);
    
  8. 计算交易哈希

    var hash = facade.hashTransaction(tx);
    print('交易哈希: $hash');
    
  9. 发送交易到节点

    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

1 回复

更多关于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');
}
回到顶部