嗨,我是新来的聪明的合同。我试图用etherjs和nextjs编写一个简单的传输代码。基本上下面是我的代码
import {ethers} from 'ethers';
const ContractAddr = '0xB8c77482e45F1F44dE1745F52C74426C631bDD52'; /* BNB Contract address */
const ContractABI =[{"constant":false,"inputs":[{"name":"_to","type":"address"},{"name":"_value","type":"uint256"}],"name":"transfer","outputs":[],"payable":false,"type":"function"}]
const provider = new ethers.providers.Web3Provider(window.ethereum);
const signer = provider.getSigner();
let numberOfTokens = ethers.utils.parseUnits('0.2', 18)
const Contract = new ethers.Contract(ContractAddr,ContractABI,signer)
const receiver = '0x8CA65A3Ce90d31a88FAa747c695183C2aefe537f';
Contract.transfer(receiver, numberOfTokens).then((transferResult) => {
console.log(transferResult)
alert("sent token")
}).catch((error) => {
console.error('error',error);
});在我的元问题上,它会按我的意愿弹出,如下所示:

但是,当我在BSCscan测试网上检查事务详细信息时,它显示0值--接收方是契约地址而不是接收方。
https://testnet.bscscan.com/tx/0x3278d9668391eee98aadf83e8ae58a0b999f2e9c3e5f47a21f504e1c04b24814
帮助。被困了一个星期,在Stackoverflow寻找类似的问题:(
发布于 2021-12-23 08:51:35
BNB令牌契约仅存在于Ethereum:https://etherscan.io/address/0xb8c77482e45f1f44de1745f52c74426c631bdd52上。在另一个网络上,这只是一个没有任何契约的地址。
在BSC和BSC测试网上,BNB是本机令牌(类似于Ethereum上的ETH )。因此,如果你想转移BNB在平衡计分卡,你将执行一个本地硬币转移。
您必须区分本地硬币的传输和ERC20令牌的传输。
当您转移本地硬币时(例如,BNB在BSC上),您将发送一个事务,其中to是硬币的接收方,而value是应该发送的金额。在本例中将不存在data。
当您发送一个ERC20令牌时,您将与令牌契约进行交互。通过这种交互,您可以告诉令牌要执行什么操作。因此,事务的目标将是令牌契约,并且值将为0(因为您不是在转移本地硬币)。要执行的操作在data字段中编码。
https://ethereum.stackexchange.com/questions/117135
复制相似问题