You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

关于sendTransaction与writeContract(transfer函数)发送代币的疑问

原生代币与ERC20代币转账实现的正确性确认

你的实现方式完全正确,没有把问题复杂化,这两种代币的转账逻辑本身就存在差异:

原生代币(以AVAX为例)的转账逻辑

原生代币是区块链网络的基础资产,转账本质就是发起一笔普通链上交易,直接调用sendTransaction即可——只需要指定接收地址to和转账金额value,不需要和任何合约交互,因为链会直接更新双方账户的原生代币余额。
你写的代码是标准的原生代币转账写法:

await sendTransaction({
    to,
    value: parseEther(value),
})

ERC20代币(以USDT为例)的转账逻辑

ERC20代币是基于智能合约发行的资产,所有的余额记录、转账操作都由对应的ERC20合约负责管理,所以必须通过调用合约的transfer方法来完成转账。
你用writeContractAsync调用ERC20合约的transfer方法是完全标准的正确做法,需要的参数也都没少:

  • ERC20合约的ABI:用来让钱包解析合约的方法结构
  • 代币合约地址:指定要操作的是哪一个ERC20合约
  • 方法名transfer:ERC20标准定义的转账方法
  • 参数:接收地址和解析后的转账金额(注意要匹配代币的小数位数,比如USDT是6位小数,parsed要确保是正确的数值)

你的代码示例完全符合规范:

await writeContractAsync({
    abi: erc20Abi,
    address: txDetails.tokenAddress,
    functionName: 'transfer',
    args: [txDetails.to, parsed],
});

内容的提问来源于stack exchange,提问作者samplecode3300

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.20 11:53:13