如何向指定地址发送BSC代币?现有BNB转账代码需如何调整参数?
BSC BEP20代币转账参数修改方案
你当前的代码是BNB(BSC原生币)的转账逻辑,要支持指定BEP20代币转账,需要做以下调整:
1. 扩展转账状态字段
首先在原有状态中新增2个必填参数:代币合约地址、代币小数位,修改后的状态示例如下:
const [transferInfo, setTransferInfo] = React.useState({ to: '0x987ffbf3f7cdabb38782b9886d257ce74f338da5', // 收款地址不变 amount: '0.01', // 转账代币数量(人眼可读的正常单位) txHash: '', tokenContract: '0x55d398326f99059fF775485246999027B3197955', // 示例:BSC主网USDT合约地址 decimals: 18 // 对应代币的小数位,USDT在BSC上是18位,部分稳定币为6位 })
2. 调整转账逻辑
BEP20代币是合约资产,不能直接向地址转账,需要调用对应代币合约的transfer方法,核心逻辑如下:
- 先引入极简BEP20 ABI(仅包含转账所需的方法定义):
const BEP20_ABI = [ "function transfer(address to, uint256 amount) external returns (bool)" ]
- 转换转账金额为链上最小单位,避免精度损失(以ethers.js为例):
import { ethers } from 'ethers' // 计算链上实际转账的最小单位金额 const amountOnChain = ethers.utils.parseUnits(transferInfo.amount, transferInfo.decimals)
- 实例化代币合约发起转账:
// provider和signer为你项目中已初始化的钱包连接实例 const tokenContract = new ethers.Contract(transferInfo.tokenContract, BEP20_ABI, signer) const tx = await tokenContract.transfer(transferInfo.to, amountOnChain) await tx.wait() // 交易确认后保存txHash setTransferInfo(prev => ({...prev, txHash: tx.hash}))
3. 注意事项
- 转账前需要确保钱包已切换到BSC对应网络(主网/测试网)
- 钱包地址需要持有足够的BNB作为转账手续费
- 代币小数位必须和对应合约的配置一致,否则会出现转账金额错误
内容的提问来源于stack exchange,提问作者Meera
相关产品推荐
相关产品推荐

