[英]web3 JS payment button for Metamask BSC bep20 token
我想接受訪客的捐贈,我只想要一個具有預設金額的特定代幣,並且只想要擁有 metamask 的人。
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) 中。 我使用合同 ABI 對要發送到 Metamask 的交易進行編碼。 一切正常,只有在 Metamask 中沒有選擇我想要付款的令牌(應該是 BMON 但顯示 TKN)。 有人請幫助我一點。
- - 更新 - -
所以,我發現在 bscscan.com 上 BMON 的合約選項卡上,我可以連接 web3 轉到“寫合約”按鈕,然后在“轉移”功能中輸入我的詳細信息並寫入。 效果很好,然后我檢查了 Metamask 數據。 即使我復制粘貼該數據,它仍然無法正常工作。
- - 更新 - -
這就是我用我的代碼得到的它沒有選擇 BMON
這就是我想要的這里確實選擇了 BMON,在 bscscan.com 上完成
第一張圖就是我得到的,這就是問題所在,我的代碼沒有選擇BMON,這就是我不明白的地方。 我正在使用 abi 解碼數據,即使我使用來自正確事務的數據,它仍然無法正常工作
歡迎使用 Stackoverflow。 請清楚地解釋問題,如果您有任何交易哈希來顯示結果,這將對診斷問題有很大幫助。
到目前為止,您的代碼在我看來還不錯,屏幕截圖顯示 BMON,但 gas 似乎有點高。
完成此操作后,我將使用解決方案編輯此答案。
我發現了問題。 而不是請求交易,我可以在 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'}]})
}
})()
除了 HTML 之外,您有功能代碼嗎?
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.