'Error: la tarifa base excede el límite de gas' al crear una nueva instancia de contrato (usando Truffle, Web3Js y testrpc)

Tengo el siguiente código en app.jsel archivo de mi proyecto de trufas.

importar {predeterminado como Web3} desde 'web3';
importar {predeterminado como contrato} de 'trufa-contrato'
importar conferrence_artifacts desde '../../build/contracts/Conferrence.json'

var web3 = new Web3(new Web3.providers.HttpProvider("http://localhost:8545"));

// La conferencia es nuestra abstracción utilizable, que usaremos a través del código a continuación.
var Conferencia = contrato(conferencia_artefactos);
Conferencia.setProvider(web3.currentProvider);

var cuentas = web3.eth.cuentas;
var cuenta = cuentas[0];
Conferrence.new({de: cuenta}).then(función(instancia){
   consola.log(instancia);
});

Como se indica en la documentación Truffle agregar nuevo contrato

Nota: En la llamada a Conferrence.new({from: account})... {from: account} se usó porque recibí un 'error de dirección no válida'

Registro de errores de la consola

Error: Error: la tarifa base supera el límite de gasolina
    en runCall (C:\Users\Devendra\AppData\Roaming\npm\node_modules\ethereumjs-testrpc\node_modules\ethereumjs-vm\lib\runTx.js:111:17)
    en C:\Users\Devendra\AppData\Roaming\npm\node_modules\ethereumjs-testrpc\node_modules\ethereumjs-vm\node_modules\async\dist\async.js:3686:9
    al reponer (C:\Users\Devendra\AppData\Roaming\npm\node_modules\ethereumjs-testrpc\node_modules\ethereumjs-vm\node_modules\async\dist\async.js:881:17)
    en iterateeCallback (C:\Users\Devendra\AppData\Roaming\npm\node_modules\ethereumjs-testrpc\node_modules\ethereumjs-vm\node_modules\async\dist\async.js:866:17)
    en C:\Users\Devendra\AppData\Roaming\npm\node_modules\ethereumjs-testrpc\node_modules\ethereumjs-vm\node_modules\async\dist\async.js:843:16
    en C:\Users\Devendra\AppData\Roaming\npm\node_modules\ethereumjs-testrpc\node_modules\ethereumjs-vm\node_modules\async\dist\async.js:3691:13
    en aplicar (C:\Users\Devendra\AppData\Roaming\npm\node_modules\ethereumjs-testrpc\node_modules\ethereumjs-vm\node_modules\async\dist\async.js:21:25)
    en C:\Users\Devendra\AppData\Roaming\npm\node_modules\ethereumjs-testrpc\node_modules\ethereumjs-vm\node_modules\async\dist\async.js:56:12
    en Object.async.eachSeries (C:\Users\Devendra\AppData\Roaming\npm\node_modules\ethereumjs-testrpc\node_modules\async-eventemitter\node_modules\async\lib\async.js:130:20)
    en VM.AsyncEventEmitter.emit (C:\Users\Devendra\AppData\Roaming\npm\node_modules\ethereumjs-testrpc\node_modules\async-eventemitter\lib\AsyncEventEmitter.js:42:9)
    en runCall (C:\Users\Devendra\AppData\Roaming\npm\node_modules\ethereumjs-testrpc\node_modules\ethereumjs-vm\lib\runTx.js:111:17)
    en C:\Users\Devendra\AppData\Roaming\npm\node_modules\ethereumjs-testrpc\node_modules\ethereumjs-vm\node_modules\async\dist\async.js:3686:9
    al reponer (C:\Users\Devendra\AppData\Roaming\npm\node_modules\ethereumjs-testrpc\node_modules\ethereumjs-vm\node_modules\async\dist\async.js:881:17)
    en iterateeCallback (C:\Users\Devendra\AppData\Roaming\npm\node_modules\ethereumjs-testrpc\node_modules\ethereumjs-vm\node_modules\async\dist\async.js:866:17)
    en C:\Users\Devendra\AppData\Roaming\npm\node_modules\ethereumjs-testrpc\node_modules\ethereumjs-vm\node_modules\async\dist\async.js:843:16
    en C:\Users\Devendra\AppData\Roaming\npm\node_modules\ethereumjs-testrpc\node_modules\ethereumjs-vm\node_modules\async\dist\async.js:3691:13
    en aplicar (C:\Users\Devendra\AppData\Roaming\npm\node_modules\ethereumjs-testrpc\node_modules\ethereumjs-vm\node_modules\async\dist\async.js:21:25)
    en C:\Users\Devendra\AppData\Roaming\npm\node_modules\ethereumjs-testrpc\node_modules\ethereumjs-vm\node_modules\async\dist\async.js:56:12
    en Object.async.eachSeries (C:\Users\Devendra\AppData\Roaming\npm\node_modules\ethereumjs-testrpc\node_modules\async-eventemitter\node_modules\async\lib\async.js:130:20)
    en VM.AsyncEventEmitter.emit (C:\Users\Devendra\AppData\Roaming\npm\node_modules\ethereumjs-testrpc\node_modules\async-eventemitter\lib\AsyncEventEmitter.js:42:9)
    en Object.InvalidResponse (http://localhost:8080/app.js:8374:16)
    en http://localhost:8080/app.js:32995:36
    en XMLHttpRequest.request.onreadystatechange (http://localhost:8080/app.js:35321:13)

Pero esto funciona absolutamente bien cuando se ejecuta en la consola de trufas:

truffle(desarrollo)> Conferrence.new().then(function(ins){console.log(ins.address)})
0x7e796caed4202ae58bb58afc214f281969f995b2

NVM sobre el error tipográfico de 'Conferencia': p

La trufa apesta. Lo resolví y ahora puedo hacer pruebas de ganache de moca sin trufa. ethereum.stackexchange.com/questions/46957/…

Respuestas (5)

Dado que su código de ejemplo usa truffle-contrat , puede especificar los valores predeterminados para sus transacciones e implementaciones de contratos como este ( Conferrence es el nombre de su contrato. Usé los valores predeterminados de truffle):

Conferrence.defaults({
  from: account,
  gas: 4712388,
  gasPrice: 100000000000
})

Tuve el mismo problema ( base fee exceeds gas limit) y la solidez del navegador me dio una Gas requirement of function xyz.sol:Xyz.doSomething(address) unknown or not constant.Especificación de valores predeterminados que finalmente me ayudó.

Al ejecutar su código en la consola de Truffle, se asegurará de que se hayan establecido ciertos valores predeterminados:

Para cada red, si no se especifica, las opciones de transacción tendrán los siguientes valores predeterminados:

  • gas: Límite de gas utilizado para despliegues. El valor predeterminado es 4712388.
  • gasPrice: Precio del gas utilizado para los despliegues. El valor predeterminado es 100000000000 (100 Shannon).
  • from: Desde la dirección utilizada durante las migraciones. El valor predeterminado es la primera cuenta disponible proporcionada por su cliente Ethereum.

(de http://truffleframework.com/docs/advanced/configuration#networks )

Pero cuando se ejecuta en un entorno diferente, como en un navegador, esos valores predeterminados no estarán disponibles y deberá especificarlos para cada transacción. En su caso, eso significa no solo proporcionar fromsino también gas.

Debe aumentar la cantidad de gasolina que está dispuesto a pagar por la creación del contrato. Por ejemplo:

Conferrence.new({from: account, gas: SOME AMOUNT HERE});

Básicamente, el costo anticipado de la transacción es mayor que la cantidad que proporciona por defecto. Por lo tanto, debe aumentar el nivel de su llamada a new.

Tengo el mismo problema y creo que la gente se está confundiendo acerca de lo que realmente significa el parámetro de gas en el archivo truffle.js.

Respondí mi propia pregunta aquí. Espero eso ayude.

El despliegue del contrato de trufas supera el límite de gas del bloque o se queda sin gas

Tal vez no esté relacionado exactamente con esta pregunta, pero me encontré con el mismo error al ejecutar truffle testun contrato de solidez y el error de gas dado fue engañoso. Podría traducirlo como 'Error desconocido en la implementación'. En mi caso, podría obtener el error real ejecutando truffle deploy --reset.