Me gustaría aceptar donaciones de visitantes, solo quiero un token específico con una cantidad preestablecida y solo personas con 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'}]}) } })() });lo que tengo hasta ahora casi funciona, pero no puedo encontrar ningún ejemplo adecuado ni explicación de lo que estoy haciendo mal.
Lo que estoy haciendo hasta ahora es verificar primero si Metamask está instalado. Luego, si alguien hace clic en el botón, compruebo si estamos en la red correcta (BSC). Uso el Contrato ABI para codificar una transacción para enviar a Metamask. todo funciona bien, solo en Metamask el token con el que quiero hacer el pago no está seleccionado (debe ser BMON pero muestra TKN). Alguien por favor ayúdeme un poco.
--- ACTUALIZAR ---
Entonces, descubrí que en bscscan.com en la pestaña de contrato de BMON, puedo conectarme a web3, ir al botón "Escribir contrato" y luego en la función "transferir" ingresar mis datos y Escribir. eso funciona bien, luego verifico en Metamask los datos. incluso si copio y pego esos datos, todavía no funcionan.
--- ACTUALIZAR ---
Esto es lo que obtengo con mi código No está seleccionando BMON
Esto es lo que quiero Aquí seleccionó BMON, hecho en bscscan.com
La primera imagen es lo que obtengo, ese es el problema, mi código no selecciona BMON, y eso es lo que no entiendo. Estoy usando abi para decodificar los datos, incluso si uso los datos de la transacción correcta, todavía no funciona
Bienvenido a Stackoverflow. Explique el problema claramente, y si tiene algún hash de transacción para mostrar los resultados, sería de gran ayuda para diagnosticar el problema.
Hasta ahora, su código me parece bien y la captura de pantalla dice BMON, pero el combustible parece un poco alto.
Una vez que haga eso, editaré esta respuesta con una solución.
Encontré el problema. en lugar de solicitar la transacción, puedo enviarla en contract.method.transfer, espero que esto ayude a cualquier otra persona que tenga problemas.
(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'}]}) } })()