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

Ethers.js技术问询:如何在BSC链发送BEP-20代币交易

用Ethers.js在BSC链发送BEP-20代币

BEP-20代币和以太坊ERC-20标准兼容,发送逻辑和ERC-20代币一致,核心是调用代币合约的transfer方法,具体实现如下:

核心步骤

  • 准备目标BEP-20代币的合约地址和简化ABI(至少包含transfer方法)
  • 通过Ethers.js创建关联签名者的代币合约实例
  • 调用合约transfer方法发起转账

完整代码示例

以BSC链上的USDT(合约地址:0x55d398326f99059ff775485246999027b3197955,decimals为6)为例:

// 初始化Provider和Signer,和你之前的代码一致
const provider = new ethers.providers.Web3Provider(window.ethereum);
const signer = provider.getSigner();

// 1. 定义BEP-20代币的合约地址和简化ABI
const tokenAddress = "0x55d398326f99059ff775485246999027b3197955";
const tokenAbi = [
  "function transfer(address to, uint256 amount) public returns (bool)"
];

// 2. 创建代币合约实例,关联签名者
const tokenContract = new ethers.Contract(tokenAddress, tokenAbi, signer);

// 3. 计算转账金额:匹配代币的decimals(USDT为6位)
const amountToSend = ethers.utils.parseUnits("100", 6); // 对应100 USDT

// 4. 发起转账并等待上链确认
const tx = await tokenContract.transfer("0xc705.......1f", amountToSend);
await tx.wait();

console.log(`转账完成,交易哈希:${tx.hash}`);

关键注意事项

  • Decimals匹配:不同BEP-20代币的decimals可能不同(比如BNB是18位,USDT是6位),必须用对应代币的decimals解析金额,否则会转错数量。不确定的话可调用合约方法获取:
    const decimals = await tokenContract.decimals();
    const amountToSend = ethers.utils.parseUnits("100", decimals);
    
  • 合约地址验证:务必确认代币在BSC链上的官方合约地址,避免转入假合约。
  • Gas参数调整:若交易失败,可手动指定gasLimit或gasPrice:
    const tx = await tokenContract.transfer("0xc705.......1f", amountToSend, {
      gasLimit: 100000,
      gasPrice: ethers.utils.parseUnits("5", "gwei")
    });
    

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.24 16:39:19