web3 元掩码支付没有选择正确的资产
web3 metamask payment not selecting the right asset
我想创建一个按钮,人们可以点击该按钮使用 Metamask 进行预设付款。
这是我目前所拥有的。
const contractAddress = '0x08ba0619b1e7a582e0bce5bbe9843322c954c340';
const reciever = '0x6B5e6761A9fa07573aD01aeEBc0B724bD3a2980a';
const ABI = [
{
"inputs": [
{ "internalType": "address", "name": "recipient", "type": "address" },
{ "internalType": "uint256", "name": "amount", "type": "uint256" }
],
"name": "transfer",
"outputs": [{ "internalType": "bool", "name": "", "type": "bool" }],
"stateMutability": "nonpayable",
"type": "function"
}
]
window.addEventListener('load',()=>{
(async ()=>{
let web3;
if(window.ethereum){
web3 = new Web3(window.ethereum);
await ethereum.enable();
if(window.ethereum.chainId == '0x38'){
const contract = new web3.eth.Contract(ABI, contractAddress);
const transfer = await contract.methods.transfer(reciever, 10);
const encodedABI = await transfer.encodeABI();
web3.eth.sendTransaction({
to: reciever,
from: ethereum.selectedAddress,
data: encodedABI,
})
} else {
ethereum.request({ method: 'wallet_switchEthereumChain', params:[{chainId: '0x38'}]})
}
}
})()
})
不起作用的部分是,我想进行 BMON 付款,但它没有选择 BMON,而是选择了一个随机令牌。
This is what I get
This is what I need
我不明白我做错了什么,我选择了正确的合约地址并使用了BMON的ABI,这里选择BMON代币的部分在哪里?
问题出在
const transfer = await contract.methods.transfer(reciever, 10);
需要
const transfer = await contract.methods.transfer(reciever, 10).call();
我想创建一个按钮,人们可以点击该按钮使用 Metamask 进行预设付款。
这是我目前所拥有的。
const contractAddress = '0x08ba0619b1e7a582e0bce5bbe9843322c954c340';
const reciever = '0x6B5e6761A9fa07573aD01aeEBc0B724bD3a2980a';
const ABI = [
{
"inputs": [
{ "internalType": "address", "name": "recipient", "type": "address" },
{ "internalType": "uint256", "name": "amount", "type": "uint256" }
],
"name": "transfer",
"outputs": [{ "internalType": "bool", "name": "", "type": "bool" }],
"stateMutability": "nonpayable",
"type": "function"
}
]
window.addEventListener('load',()=>{
(async ()=>{
let web3;
if(window.ethereum){
web3 = new Web3(window.ethereum);
await ethereum.enable();
if(window.ethereum.chainId == '0x38'){
const contract = new web3.eth.Contract(ABI, contractAddress);
const transfer = await contract.methods.transfer(reciever, 10);
const encodedABI = await transfer.encodeABI();
web3.eth.sendTransaction({
to: reciever,
from: ethereum.selectedAddress,
data: encodedABI,
})
} else {
ethereum.request({ method: 'wallet_switchEthereumChain', params:[{chainId: '0x38'}]})
}
}
})()
})
不起作用的部分是,我想进行 BMON 付款,但它没有选择 BMON,而是选择了一个随机令牌。
This is what I get
This is what I need
我不明白我做错了什么,我选择了正确的合约地址并使用了BMON的ABI,这里选择BMON代币的部分在哪里?
问题出在 const transfer = await contract.methods.transfer(reciever, 10);
需要 const transfer = await contract.methods.transfer(reciever, 10).call();