【问题标题】:Create USDT Wallet on ERC20 Dart在 ERC20 Dart 上创建 USDT 钱包
【发布时间】:2022-07-06 19:21:13
【问题描述】:

我想自己了解如何用飞镖语言生成 USDT ERC20 钱包。我找到了web3dart 库。但是,使用bip39 库提供的 12 词短语生成 koschel 需要什么?而且我不明白,有必要写智能合约吗?我想看一个如何生成钱包的小代码示例。非常感谢。

更新:

我似乎设法生成了一个钱包。但是如何在 ERC20 上准确地制作 USDT?

var random = Random.secure();
var mnemonic = 'obvious width mechanic wheat cargo toe bike seek spirit jungle enlist thumb';
String mnemonicToSeedHex = bip39.mnemonicToSeedHex(mnemonic);
EthPrivateKey credentials = EthPrivateKey.fromHex(mnemonicToSeedHex);
Wallet wallet = Wallet.createNew(credentials, mnemonic, random);
var address = await credentials.extractAddress();
dev.log(address.hex);

【问题讨论】:

    标签: flutter dart web3


    【解决方案1】:

    由于USDT是erc-20代币,您可以使用erc-20 abi进行合约交互。

    final _erc20ContractAbi = web3.ContractAbi.fromJson(
            '[{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"}]',
            'Erc20');
    

    现在编写一个类来与 abi 中的每个函数进行交互。您需要传递合约地址、web3client(infura 或任何其他)和 chainID(以太坊主网为 1)

    class ERC20 extends web3.GeneratedContract {
      ERC20({
        required web3.EthereumAddress address,
        required web3.Web3Client client,
        int? chainId,
      }) : super(web3.DeployedContract(_erc20ContractAbi, address), client,
                chainId);
    

    现在你可以像这样在类中编写 balanceOf 方法来获取你的 USDT 余额,

    Future<BigInt> balanceOf(
        web3.EthereumAddress account, {
        web3.BlockNum? atBlock,
      }) async {
        final function = self.abi.functions[2];
        assert(checkSignature(function, '70a08231'));
        final params = [account];
        final response = await read(function, params, atBlock);
        return (response[0] as BigInt);
      }
    

    转入USDT代币的功能,

    Future<String> transfer(
        web3.EthereumAddress recipient,
        BigInt amount, {
        required web3.Credentials credentials,
        web3.Transaction? transaction,
      }) async {
        final function = self.abi.functions[7];
        assert(checkSignature(function, 'a9059cbb'));
        final params = [recipient, amount];
        return write(credentials, transaction, function, params);
      }
    

    查看我在 Medium 上的文章 Crypto-wallet app using flutter,了解如何构建自己的 erc-20 代币并使用 Flutter 移动应用构建可以转移代币的钱包。

    【讨论】:

      猜你喜欢
      • 2020-10-16
      • 2022-06-26
      • 1970-01-01
      • 2021-08-07
      • 1970-01-01
      • 1970-01-01
      • 2017-05-18
      • 2020-10-15
      • 1970-01-01
      相关资源
      最近更新 更多