Flutter未知功能插件ton_dart的潜在使用

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

Flutter未知功能插件ton_dart的潜在使用

TON Dart

TON Dart 是一个多功能包,旨在与 TonApi 和 TonCenter RPC API 进行无缝集成。它使开发者能够轻松创建、签名和发送交易,并提供强大的 Boc 序列化支持。

TON Dart 专为简化与 Ton 钱包(如 Basic 钱包 1 到 4、Highload 钱包 V3 和 Jetton 钱包)的交互而设计,确保在 Ton 网络中的平滑通信和交易管理。

使用 TON Dart,您可以利用先进的加密功能进行安全的交易签名和验证,增强操作的完整性。无论是执行运行时调用还是查询账户,TON Dart 都提供了一个全面的工具包来有效处理各种数据格式和加密操作。

为了充分利用 TON Dart 的功能,建议熟悉 TonApi 和 TonCenter RPC API。TON Dart 简化了复杂任务,使其成为导航 Ton 生态系统的不可或缺的工具。

功能

交易管理

  • 创建、签名和验证使用 ED25519 的交易。

JSON-RPC

  • 与 TonApi 和 TonCenter 进行通信。

BOC 序列化

  • TON BOC 序列化是一种将数据结构编码和解码为二进制格式的方法,适用于 Telegram 开放网络。

合约

  • 支持 Basic 钱包 1 至 5。
  • 支持部署代币和转移 Jettons(使用 Minter 和 Jetton 钱包)。
  • Highload 钱包 v3。
  • 支持多所有者合约(MultiOwner, Order)。
  • 支持 NFT 合约(NFTCollection, EditableCollection, NFTItem)。

示例

转账示例

import 'package:ton/ton.dart';

void main() async {
  // TestWallet 是一个用于快速生成和测试指定版本的钱包合约的实用工具。
  final TestWallet<WalletV5R1> wallet = TestWallet(version: WalletVersion.v5R1);

  final destination = TestWallet(version: WalletVersion.v1R1);
  final destination2 = TestWallet(version: WalletVersion.v1R2);
  final destination3 = TestWallet(version: WalletVersion.v1R3);
  final destination4 = TestWallet(version: WalletVersion.v2R1);
  final destination5 = TestWallet(version: WalletVersion.v2R2);
  final destination6 = TestWallet(version: WalletVersion.v3R1);
  final destination7 = TestWallet(version: WalletVersion.v3R2);
  final destination8 = TestWallet(version: WalletVersion.v4);
  final destination9 = TestWallet(version: WalletVersion.v5R1, index: 1);

  await wallet.wallet.sendTransfer(
      params: VersionedV5TransferParams.external(signer: wallet.signer, messages: [
        OutActionSendMsg(outMessage: TonHelper.internal(destination: destination.address, amount: TonHelper.toNano("0.01"))),
        OutActionSendMsg(outMessage: TonHelper.internal(destination: destination2.address, amount: TonHelper.toNano("0.01"))),
        OutActionSendMsg(outMessage: TonHelper.internal(destination: destination3.address, amount: TonHelper.toNano("0.01"))),
        OutActionSendMsg(outMessage: TonHelper.internal(destination: destination4.address, amount: TonHelper.toNano("0.01"))),
        OutActionSendMsg(outMessage: TonHelper.internal(destination: destination5.address, amount: TonHelper.toNano("0.01"))),
        OutActionSendMsg(outMessage: TonHelper.internal(destination: destination6.address, amount: TonHelper.toNano("0.01"))),
        OutActionSendMsg(outMessage: TonHelper.internal(destination: destination7.address, amount: TonHelper.toNano("0.01"))),
        OutActionSendMsg(outMessage: TonHelper.internal(destination: destination8.address, amount: TonHelper.toNano("0.01"))),
        OutActionSendMsg(outMessage: TonHelper.internal(destination: destination9.address, amount: TonHelper.toNano("0.01"))),
      ]),
      rpc: wallet.rpc);
}

部署 Jetton Minter 并铸造代币

import 'package:ton/ton.dart';

void main() async {
  final wallet = TestWallet<WalletV5R1>(version: WalletVersion.v5R1, index: 96);

  final metadata = JettonOnChainMetadata.snakeFormat(
      name: "MRT NETWORK",
      image: "https://avatars.githubusercontent.com/u/56779182?s=96&v=4",
      symbol: "MRT",
      decimals: 9,
      description: "https://github.com/mrtnetwork/ton_dart");

  final jetton = JettonMinter.create(
      owner: wallet.wallet,
      state: MinterWalletState(
        owner: wallet.address,
        chain: TonChain.testnet,
        metadata: metadata,
      ));

  await jetton.sendOperation(
      signerParams: VersionedV5TransferParams.external(signer: wallet.signer),
      rpc: wallet.rpc,
      amount: TonHelper.toNano("0.9"),
      operation: JettonMinterMint(
          totalTonAmount: TonHelper.toNano("0.5"),
          to: wallet.address,
          transfer: JettonMinterInternalTransfer(
              jettonAmount: TonHelper.toNano("100000"),
              forwardTonAmount: TonHelper.toNano("0.01")),
          jettonAmount: TonHelper.toNano("100000")));
}

JSON-RPC 示例

import 'package:ton/ton.dart';
import 'package:http/http.dart' as http;

class HTTPProvider implements TonServiceProvider {
  HTTPProvider({
    required this.tonApiUrl,
    required this.tonCenterUrl,
    http.Client? client,
    this.defaultRequestTimeout = const Duration(seconds: 30),
  }) : client = client ?? http.Client();

  final String? tonApiUrl;
  final String? tonCenterUrl;
  final http.Client client;
  final Duration defaultRequestTimeout;

  @override
  Future<dynamic> get(TonRequestDetails params, [Duration? timeout]) async {
    // 实现 GET 请求
  }

  @override
  Future<dynamic> post(TonRequestDetails params, [Duration? timeout]) async {
    // 实现 POST 请求
  }
}

void main() async {
  // 初始化 TonProvider 使用 HTTPProvider 连接 Testnet
  final rpc = TonProvider(HTTPProvider(
    tonApiUrl: "https://testnet.tonapi.io",
    tonCenterUrl: "https://testnet.toncenter.com/api/v2/jsonRPC",
  ));

  // 定义 TonAddress
  final address = TonAddress("Ef_GHcGwnw-bASoxTGQRMNwMQ6w9iCQnTqrv1REDfJ5fCYD2");

  // 获取地址余额
  final balance = await rpc.request(TonCenterGetAddressBalance(address.toString()));

  // 获取账户详情
  final account = await rpc.request(TonApiGetAccount(address.toString()));

  // 获取与地址相关的交易
  final transactions = await rpc.request(TonCenterGetTransactions(address: address.toString()));
}

地址和密钥管理

import 'package:ton/ton.dart';

void main() {
  // 定义生成助记词的密码
  const String password = "MRTNETWORK";

  // 生成指定数量的助记词和密码
  final mnemonic = TonMnemonicGenerator().fromWordsNumber(24, password: password);

  // 从助记词生成种子
  final seed = TonSeedGenerator(mnemonic).generate(password: password, validateTonMnemonic: true);

  // 从种子派生私钥
  final privateKey = TonPrivateKey.fromBytes(seed);

  // 从私钥派生公钥
  final publicKey = privateKey.toPublicKey();

  // 创建 WalletV4 实例并使用派生的公钥
  final wallet = WalletV4(chain: TonChain.testnet, publicKey: publicKey.toBytes());

  // 获取钱包地址
  final address = wallet.address;

  // 签名交易
  final signature = privateKey.sign(digest);
}

资源

  • 全面测试:所有功能都经过了彻底测试,确保可靠性和准确性。

贡献

欢迎贡献!请遵循以下指南:

  • 叉仓库并创建新分支。
  • 做出更改并确保测试通过。
  • 提交包含详细更改描述的拉取请求。

功能请求和 Bug

请在问题跟踪器中提交功能请求和 Bug。


更多关于Flutter未知功能插件ton_dart的潜在使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html

1 回复

更多关于Flutter未知功能插件ton_dart的潜在使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html


针对帖子中提到的“Flutter未知功能插件ton_dart”的潜在使用,由于“ton_dart”并非一个广为人知的Flutter插件(至少在我最后的知识更新日期之前),我将基于假设它可能是一个与TON区块链(The Open Network)相关的Flutter插件来提供一个代码案例框架。请注意,实际使用时需要查阅该插件的官方文档以确保准确性和最新性。

假设ton_dart插件提供了与TON区块链交互的功能,以下是一个简单的代码框架,展示了如何使用该插件(假设其API设计类似于其他区块链交互库)来创建一个TON钱包地址并发送交易。

import 'package:flutter/material.dart';
import 'package:ton_dart/ton_dart.dart'; // 假设这是插件的导入路径

void main() {
  runApp(MyApp());
}

class MyApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      home: Scaffold(
        appBar: AppBar(
          title: Text('TON Dart Plugin Demo'),
        ),
        body: Center(
          child: Column(
            mainAxisAlignment: MainAxisAlignment.center,
            children: <Widget>[
              ElevatedButton(
                onPressed: () async {
                  // 创建TON钱包地址
                  String walletAddress = await createTonWallet();
                  print('Created TON Wallet Address: $walletAddress');
                },
                child: Text('Create TON Wallet'),
              ),
              SizedBox(height: 20),
              ElevatedButton(
                onPressed: () async {
                  // 发送交易(假设有接收地址、金额等信息)
                  String receiverAddress = 'YOUR_RECEIVER_ADDRESS';
                  int amount = 1000000; // 假设这是TON的某种单位,如nanoTON
                  String message = 'Hello, TON!';
                  
                  bool success = await sendTransaction(
                    fromAddress: 'YOUR_WALLET_ADDRESS', // 上一步创建的钱包地址
                    toAddress: receiverAddress,
                    amount: amount,
                    message: message,
                  );
                  
                  if (success) {
                    print('Transaction sent successfully!');
                  } else {
                    print('Failed to send transaction.');
                  }
                },
                child: Text('Send Transaction'),
              ),
            ],
          ),
        ),
      ),
    );
  }

  // 假设这是创建TON钱包地址的函数(需要根据ton_dart插件的实际API实现)
  Future<String> createTonWallet() async {
    // 初始化TON客户端或其他必要步骤
    // TonClient client = TonClient(...);
    
    // 创建钱包逻辑(这里仅为示例)
    // String address = await client.createWallet();
    
    // 返回钱包地址(这里用占位符)
    return 'YOUR_NEWLY_CREATED_TON_WALLET_ADDRESS';
  }

  // 假设这是发送交易的函数(需要根据ton_dart插件的实际API实现)
  Future<bool> sendTransaction({
    required String fromAddress,
    required String toAddress,
    required int amount,
    required String message,
  }) async {
    // 初始化TON客户端或其他必要步骤(如果尚未初始化)
    // 确保使用正确的私钥或签名逻辑
    
    // 发送交易逻辑(这里仅为示例)
    // bool success = await client.sendTransaction(
    //   from: fromAddress,
    //   to: toAddress,
    //   amount: amount,
    //   message: message,
    // );
    
    // 返回交易是否成功的布尔值(这里用占位符)
    return true; // 或 false,根据实际交易结果返回
  }
}

重要提示

  1. 插件文档:在实际开发中,务必查阅ton_dart插件的官方文档,了解如何正确初始化TON客户端、创建钱包、发送交易等。
  2. 私钥管理:处理区块链交易时,私钥的管理至关重要。确保私钥的安全存储和使用。
  3. 错误处理:添加适当的错误处理逻辑,以处理网络错误、交易失败等情况。
  4. 测试网络:在将应用部署到生产环境之前,先在测试网络上进行测试。

由于ton_dart的具体实现细节未知,上述代码仅为一个基于假设的框架,实际使用时需要根据插件的API进行调整。

回到顶部