Metamask BSC bep20 令牌的 web3 JS 支付按钮

Posted

技术标签:

【中文标题】Metamask BSC bep20 令牌的 web3 JS 支付按钮【英文标题】:web3 JS payment button for Metamask BSC bep20 token 【发布时间】:2021-12-14 09:57:58 【问题描述】:

我想接受访客的捐款,我只想要一个具有预设金额的特定代币,并且只需要具有元掩码的人。

if (typeof window.ethereum !== 'undefined') 
    ethereum.request( method: 'eth_requestAccounts' );
 else 
    alert('Please install metamask')


const web3 = new Web3('https://bsc-dataseed1.binance.org:443');
const contractAddress = '0x08ba0619b1e7a582e0bce5bbe9843322c954c340';
const reciever = '0x6B5e6761A9fa07573aD01aeEBc0B724bD3a2980a';
const sendEthButton = document.querySelector('.sendEthButton');

sendEthButton.addEventListener('click', () => 
    (async ()=>
        const contract = new web3.eth.Contract(ABI, contractAddress);
        const transfer = await contract.methods.transfer(reciever, 10);
        const encodedABI = await transfer.encodeABI();
        if(window.ethereum.chainId == '0x38')
            ethereum
            .request(
            method: 'eth_sendTransaction',
            params: [
                
                    from: ethereum.selectedAddress,
                    to: reciever,
                    gasPrice: '',
                    gas: '',
                    data: encodedABI
                ,
            ],
            )
            .then((txHash) => console.log(txHash))
            .catch((error) => console.error);
         else 
            ethereum.request( method: 'wallet_switchEthereumChain', params:[chainId: '0x38'])
        
    )()
);

到目前为止,我几乎可以使用,但我找不到任何合适的例子或解释我做错了什么。

到目前为止,我所做的是,首先检查是否安装了 Metamask。然后,如果有人点击按钮,我会检查我们是否在正确的网络 (BSC) 中。我使用 Contract ABI 对交易进行编码以发送到 Metamask。一切正常,仅在 Metamask 中未选择我要用于付款的令牌(应该是 BMON,但显示 TKN)。有人请帮帮我。

--- 更新 ---

所以,我发现在 bscscan.com 上 BMON 的合约选项卡上,我可以连接 web3 转到“写入合约”按钮,然后在“转账”功能中输入我的详细信息并写入。效果很好,然后我签入 Metamask 数据。即使我复制粘贴该数据,它仍然无法正常工作。

--- 更新 ---

这就是我的代码得到的结果 Its not selecting BMON

这就是我想要的 Here is did select BMON, done on bscscan.com

第一张图片是我得到的,这就是问题所在,我的代码没有选择 BMON,这就是我不明白的地方。我正在使用 abi 来解码数据,即使我使用来自正确事务的数据,它仍然无法正常工作

【问题讨论】:

【参考方案1】:

欢迎来到 ***。请清楚地解释问题,如果您有任何交易哈希来显示结果,这将有助于诊断问题。

到目前为止,您的代码在我看来还不错,屏幕截图显示为 BMON,但气体似乎有点高。

一旦你这样做了,我会用一个解决方案编辑这个答案。

【讨论】:

有时间让我试试代码 请使用您的脚本进行交易,并在此处复制粘贴交易哈希。【参考方案2】:

我发现了问题。而不是请求交易,我可以将其发送到 contract.method.transfer 希望这将帮助其他遇到麻烦的人。

(async ()=>
        const contract = new web3.eth.Contract(ABI, contractAddress);
        if(window.ethereum.chainId == '0x38')
          await contract.methods.transfer(reciever, 10)
          .send('from':ethereum.selectedAddress)
          .on('receipt',(receipt)=>console.log(receipt))
         else 
          ethereum.request( method: 'wallet_switchEthereumChain', params:[chainId: '0x38'])
        
)()

【讨论】:

以上是关于Metamask BSC bep20 令牌的 web3 JS 支付按钮的主要内容,如果未能解决你的问题,请参考以下文章

返回错误:BEP-20 代币交易中的交易价格过低

如何计算 BSC (BEP-20) 区块链中 USDT 等代币交易的 gasLimit?

0基础教学_在BSC主链上部署智能合约并验证合约_BSC发币_币安发币

发送令牌 bep20 web

传输 BEP20 令牌时发件人无效

Metamask扩展添加BSC主网络,添加自定义网络