Business
Jobs
  • About Us
  • Solutions
    • Job Postings
      Post your job and receive qualified candidates in 48h.
    • Candidate Assessments
      500+ technical and psychological tests, plus anti-fraud.
    • Headhunting
      Tailor-made executive search from start to finish.
    • Payroll + EOR
      Payroll dispersal and EOR across 15+ LATAM countries.
  • Pricing
  • Jobs

0

851
Views
Uso de Metamask pero error: error devuelto: el método eth_sendTransaction no existe/no está disponible

Quiero llamar a una función de pago en un contrato inteligente que implementé, pero no funciona. Este es el error que estoy recibiendo:

 Error: Returned error: The method eth_sendTransaction does not exist/is not available

La respuesta que pude encontrar es simplemente usar una clave privada, porque infura no ofrece este método, sin embargo, quiero que el usuario firme la transacción del contrato inteligente con MetaMask.

Este es mi código:

 export async function helloworld() { const rpcURL = "https://ropsten.infura.io/v3/KEY"; const web3 = new Web3(rpcURL); let provider = window.ethereum; if (typeof provider !== "undefined") { provider .request({ method: "eth_requestAccounts" }) .then((accounts) => { selectedAccount = accounts[0]; console.log(`Selected account is ${selectedAccount}`); }) .catch((err) => { console.log(err); return; }); window.ethereum.on("accountsChanged", function (accounts) { selectedAccount = accounts[0]; console.log(`Selected account changed to ${selectedAccount}`); }); } const networkId = await web3.eth.net.getId(); const thecontract = new web3.eth.Contract( simpleContractAbi, "0x50A404efF9A057900f87ad0E0dEfA0D485931464" ); isInitialized = true; investit(thecontract, selectedAccount); }

y este es el código que realmente arroja el error:

 export const investit = async (thecontract, selectedAccount) => { if (!isInitialized) { await helloworld(); } thecontract.methods .invest() .send({ from: selectedAccount, value: 10000 }) .catch(function (err) { console.log(err); }); };

Estoy completamente perdido, ya que si uso el window.ethereum.request normal ( https://docs.metamask.io/guide/sending-transactions.html#example ) para enviar una transacción, se abre metamask y puedo firmarlo . Con la llamada de contrato simplemente no funciona.

¿Sabe usted la razón? ¿Cómo puedo arreglar esto?

¡Salud!

about 4 years ago · Juan Pablo Isaza
1 answers
Answer question

0

Este debe ser el problema. solo estás pasando una url:

 const rpcURL ="https://ropsten.infura.io/v3/KEY";

en cambio:

 const web3 = new Web3(new Web3.providers.HttpProvider("https://ropsten.infura.io/v3/KEY"))

eth_sendTransaction requiere que tenga la clave privada para firmar la transacción antes de transmitirla a la red. Infura no mantiene ninguna clave privada. Para enviar una transacción, debe firmar la transacción por su parte con su clave privada.

La forma de comprobar los proveedores no es correcta. window.ethereum también es un proveedor proporcionado por metamask. El provider en sí no tiene sentido, debe inyectarse en el new Web3() .

about 4 years ago · Juan Pablo Isaza Report
Answer question
Find remote jobs

Discover the new way to find a job!

Top jobs
Top job categories
Business
Post vacancy Pricing Sales
Legal
Terms and conditions Privacy policy
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Show me some job opportunities
There's an error!