contrato de trufa: no se puede probar el método antes del método de consumo real de éter

Estoy usando un contrato de trufa para conectarme entre la interfaz y el contrato inteligente. Actualmente, puedo llamar al método en un contrato inteligente y puedo consumir ether con éxito.

const result = await instance.adoptCreeptomas(
aquaQuantity,
firaQuantity,
aetherQuantity,
gaiaQuantity,
referrer,
{ from: accountAddress, value: ether(sendingEther) }

);

Pero antes de eso, primero quiero probar el método. Así que me muevo a este método:

 const data = await instance.adoptCreeptomas.call(
    aquaQuantity,
    firaQuantity,
    aetherQuantity,
    gaiaQuantity,
    referrer,
    { from: accountAddress, value: ether(sendingEther) }
  );

Pero al llamar a esto, encuentro la siguiente excepción:

errores.js:38 No detectado (en promesa) Error: respuesta JSON RPC no válida: {"id":6,"jsonrpc":"2.0","error":{"code":-32603}}

Estoy usando ganache para blockchain local y metamask para proveedor. Por favor, ayúdame a averiguar por qué.

Gracias

Respuestas (1)

Por favor, mira la diferencia entre transactiony call.

La sintaxis .call()en truffle-contract es explícitamente para realizar una llamada , mientras que la sintaxis de la llamada directa con el nombre del método :

Llamamos directamente a la función sendCoin de la abstracción. Esto dará como resultado una transacción por defecto (es decir, escribir datos) en lugar de una llamada.

Puedo decir por la firma de su método que adoptCreeptomaspersiste algún cambio en la red. Así que deshazte de él .cally mira qué pasa.

Sí. adoptCreeptomaspersiste algunos datos en la cadena de bloques (y también consume éter). Por eso creo que primero deberíamos "probar" el método. Me basé en esto: ethereum.stackexchange.com/questions/765/… (Recomendación de llamar primero, luego enviar transacción)
Entonces, ¿eso significa que el contrato de trufa no es compatible de esta manera?
@hqt Bien, creo que no entendí bien tu pregunta. Realmente no entendí lo que querías decir con "método de prueba primero" la primera vez.
Si está trabajando con front-end, no estoy seguro de que realmente necesite probar tales cosas, porque en un proveedor habitual como metamask lo manejará. De todos modos, estoy investigando el código de contrato de trufa y parece que será compatible si web3.eth.contractes compatible.
Gracias. He probado. Estoy usando web3 incrustado por MetaMask. Como probé, web3.eth.contractexiste. Pero no sé cómo usar este método. gracias.
¿Tenemos alguna referencia que diga que metamask hará esto para el desarrollador? (prueba antes de enviar la transacción). gracias.
Hmm... Me gustaría revocar ese comentario sobre metamask, sin embargo, estima el gas. Creo que tal vez el error tiene que ver con ganache. ¿Puedes probar esto con testrpc?