在BSC主网使用Web3发送BNB报错及相关问题咨询
问题解答
操作思路问题
你的操作思路有误。BSC主网的BNB是原生代币,和以太坊上的ETH地位完全一致,不需要通过ERC20/BEP20合约来实现转账、查询小数位等操作。你当前用合约实例去调用decimals()的方式是错误的,这也是触发报错的核心原因——你要么用了错误的合约地址(比如以太坊链上的地址),要么用了不匹配的ABI,而本质上原生BNB根本不需要通过合约来操作。
能否在BSC主网发送BNB
完全可以,BNB是BSC主网的原生资产,既是网络交易的Gas燃料,也可以直接作为转账资产。
BNB代币地址相关
- 如果你操作的是BSC原生BNB:不存在合约地址,直接通过
web3.eth.sendTransaction方法转账即可,小数位固定为18。 - 你在Etherscan.io找到的
0xB8c77482e45F1F44dE1745F52C74426C631bDD52是以太坊链上的ERC20格式BNB地址,并非BSC主网的地址,所以在BSC节点上调用这个地址的合约会报错(因为该地址在BSC链上对应的合约和你用的ABI不匹配,甚至可能不是合约)。 - 如果你需要操作BSC主网的BEP20格式Wrapped BNB(WBNB),它的合约地址是
0xbb4CdB9CBd36B01bD1cBaEBF2De08d9173bc095c,但这是BNB的封装代币,和原生BNB是1:1映射的,普通转账不需要用到它。
ABI的使用
如果是操作原生BNB,不需要任何ABI;如果是操作BSC上的WBNB,需要用BSC链上该合约的ABI(去BSC区块浏览器查询,而非Etherscan)。你之前用Etherscan上的ABI是错误的,因为那对应以太坊链上的合约,和BSC链上的合约不兼容。
正确的BSC原生BNB转账示例
// 初始化Web3连接 const web3 = new Web3('https://bsc-dataseed1.binance.org:443'); // 转账参数(注意金额要转成wei,BNB小数位是18) const transferParams = { from: '你的钱包地址', to: '接收地址', value: web3.utils.toWei('0.1', 'ether') // 转0.1 BNB }; // 发送交易(需要钱包签名,这里假设你已经解锁了钱包或有私钥) web3.eth.sendTransaction(transferParams) .on('transactionHash', (hash) => { console.log('交易哈希:', hash); }) .on('receipt', (receipt) => { console.log('交易完成:', receipt); }) .catch((error) => { console.error('交易失败:', error); });
内容的提问来源于stack exchange,提问作者blue water
相关产品推荐
相关产品推荐

