gpt4 book ai didi

javascript - 为什么当我从一个新的代币账户发送 ERC20 代币时,我会收到发件人账户不存在的提示?

转载 作者:行者123 更新时间:2023-12-05 03:18:21 25 4
gpt4 key购买 nike

我这样创建我的钱包

const wallet = ethers.Wallet.createRandom()

我使用元掩码将 RIF 代币发送到公共(public)地址。我确认账户的新余额是准确的,ERC20 交易有效。

当我尝试从该钱包发送一些 RIF 代币时,如下所示:

const connectedWallet = await wallet.connect(provider)
const contract = new ethers.Contract(
process.env.CONTRACT_ADDRESS,
rifContractAbi,
onlineWallet,
)

await contract.transfer(to, tokens)

我收到以下错误:

error: Error: processing response error (body="{\"jsonrpc\":\"2.0\",\"id\":246,\"error\":{\"code\":-32010,\"message\":\"the sender account doesn't exist\"}}\n", error={"code":-32010}, requestBody="{\"method\":\"eth_sendRawTransaction\",\"params\":[\"0xf8a8808403e252e08290999419f64674d8a5b4e652319f5e239efd3bc969a1fe80b844a9059cbb00000000000000000000000010d158b42bfbf39641896ad8b8fd9cf7078d2f4e0000000000000000000000000000000000000000000000000de0b483f7abe82062a0175a2b6e35c1ff301ff45341bf5a63a3895a63404c78b6644cd2f8dee5b9a030a010fbbd608476a555bccd9f3ccf67ceac46183f1be4a82b14a46bbb78ba312fc9\"],\"id\":246,\"jsonrpc\":\"2.0\"}", requestMethod="POST", url="https://public-node.testnet.rsk.co", code=SERVER_ERROR, version=web/5.7.0) 

只要我向那个账户发送了一些 RBTC,交易就开始了。

最佳答案

说明

为了成功转移ERC20代币,执行交易的 EOA 需要满足 3 个条件:

  1. 足够的代币余额 --> 这就是你要转移的东西
  2. 足够的 RBTC 余额 --> 支付燃料费
  3. 提交有效交易 --> 转账仅在被添加到一个区 block 并且该区 block 被添加到共识链中时生效

重现问题

// assuming that values for `CONTRACT_ADDRESS` and `CONTRACT_ABI` are set

const wallet = ethers.Wallet.createRandom();
const fungibleToken = new ethers.Contract(
CONTRACT_ADDRESS,
CONTRACT_ABI,
wallet,
);

如果您执行上述操作,然后立即执行以下操作:

// assuming that values for `toAddress` and `transferAmount` are set

await fungibleToken.transfer(toAddress, transferAmount);

...您尚未满足上述条件(1)和(2)。因此(3)也会因此被拒绝。


解决方案

检查您是否满足条件 (1):

const tokenCount = await fungibleToken.balanceOf(wallet.getAddress());
console.log('sufficient token balance:', tokenCount > transferAmount);

如果此值不足,并且您在 RSK 测试网上,可以访问faucet.rifos.org获得一些 tRIF 代币。

检查您是否满足条件 (2):

// assuming value of `ERC20_TRANSFER_GAS_ESTIMATE` is set

const rbtcBalance = await wallet.getBalance();
console.log('sufficient cryptocurrency balance:', rbtcBalance > ERC20_TRANSFER_GAS_ESTIMATE);

通过以下方式设置 ERC20_TRANSFER_GAS_ESTIMATE 的值使用气体估计方法,甚至将其值硬编码为安全高估(例如 1e6)

如果此值不足,并且您在 RSK 测试网上,可以访问faucet.rsk.co获得一些 tRBTC 加密货币。

满足以上条件后,您随后再次执行以下操作:

// assuming that values for `toAddress` and `transferAmount` are set

await fungibleToken.transfer(toAddress, transferAmount);

...传输应该会成功。

关于javascript - 为什么当我从一个新的代币账户发送 ERC20 代币时,我会收到发件人账户不存在的提示?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/73738825/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com