Metamask BSC bep20 令牌的 web3 JS 支付按钮
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) 中。我使用 Contract ABI 对要发送到 Metamask 的交易进行编码。一切正常,只有在 Metamask 中,我想用来付款的令牌没有 selected(应该是 BMON,但显示 TKN)。有人请帮帮我。
---更新---
所以,我发现在 BMON 的合同选项卡上 bscscan.com,我可以连接 web3 转到“写入合同”按钮,然后在“传输”功能中输入我的详细信息并写入。效果很好,然后我检查 Metamask 中的数据。即使我复制粘贴该数据,它仍然无法正常工作。
---更新---
这是我用我的代码得到的
Its not selecting BMON
这就是我想要的
Here is did select BMON, done on bscscan.com
第一张图片是我得到的,这就是问题所在,我的代码没有select BMON,这就是我不明白的地方。我正在使用 abi 来解码数据,即使我使用了来自正确交易的数据,它仍然无法正常工作
欢迎使用 Whosebug。请把问题解释清楚,如果你有任何交易哈希来显示结果,这将有助于诊断问题。
到目前为止你的代码在我看来还不错,屏幕截图显示 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'}]})
}
})()
我愿意接受访客的捐赠,我只想要一个具有预设数量的特定代币,并且只需要有 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) 中。我使用 Contract ABI 对要发送到 Metamask 的交易进行编码。一切正常,只有在 Metamask 中,我想用来付款的令牌没有 selected(应该是 BMON,但显示 TKN)。有人请帮帮我。
---更新---
所以,我发现在 BMON 的合同选项卡上 bscscan.com,我可以连接 web3 转到“写入合同”按钮,然后在“传输”功能中输入我的详细信息并写入。效果很好,然后我检查 Metamask 中的数据。即使我复制粘贴该数据,它仍然无法正常工作。
---更新---
这是我用我的代码得到的 Its not selecting BMON
这就是我想要的 Here is did select BMON, done on bscscan.com
第一张图片是我得到的,这就是问题所在,我的代码没有select BMON,这就是我不明白的地方。我正在使用 abi 来解码数据,即使我使用了来自正确交易的数据,它仍然无法正常工作
欢迎使用 Whosebug。请把问题解释清楚,如果你有任何交易哈希来显示结果,这将有助于诊断问题。
到目前为止你的代码在我看来还不错,屏幕截图显示 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'}]})
}
})()