¿Por qué la función de contrato que se implementa dentro del navegador Solidity no se implementa dentro de geth?

Tengo mi red Ethereum privada.

Dentro del navegador Solidity:

  1. Desde Web3 Provider me he conectado a mi nodo ethereum local.
  2. Presioné el createbotón y desplegué con éxito mi contrato.
  3. Ahora podía llamar a cualquier función dentro de mi contrato y todo desplegado sin tener ningún problema.

ingrese la descripción de la imagen aquí

Como ejemplo: he implementado una insertfront(string val)transacción dentro de Solidity Browser (para minar toma alrededor de un minuto). El costo del gas es 203893.

ingrese la descripción de la imagen aquí

Dentro de Geth:

  1. Conéctese a la red ethereum privada.
  2. Obtenga la dirección y el abi (ubicados dentro del cuadro de la interfaz) del Navegador de Solidity que señalará el contrato implementado.

    ingrese la descripción de la imagen aquí

  3. var mycontract = eth.contract(abi).at(address)

mycontract { ... insertfront: function(), allEvents: function(), construct: function(), delete_: function(), delete_items: function(), deleteback: function(), deletefront: function(), get: function(), get_: function(), get_map: function(), ... }

  1. mycontract.deletefront( {from: eth.accounts[0]} )//Esto funciona dentro de geth y la función hace lo que tiene que hacer. Minas de transacción e implementaciones. El uso de gas de la función deletefront() es 41920.
  2. Pero cuando llamo a insertfront(string val)la función dentro de geth (por favor, tenga en cuenta que la transacción ha costado 203893 de gas dentro del navegador Solidity), nunca se despliega o extrae en mi cadena de bloques (he esperado horas pero no hay ayuda).

    > mycontract.insertfront("some_string", {from: eth.accounts[0]} ) "0x7048278dcdb02c02894082af541c73ad6a8e0e37cf1ab90ac914c58cc2d2f983"

//Pero no tiene efecto y no hizo la función que tiene que hacer.

[P] ¿Por qué la función que se implementa dentro del navegador Solidity no se implementa dentro de geth? ¿Podría deberse al uso de una gran cantidad de gas para una función?

Gracias por su valioso tiempo y ayuda.

Respuestas (1)

No lo sabría de inmediato, pero sospecho que de hecho es un problema de gas. geth, por defecto, proporciona solo 90k de gasolina, lo que no sería suficiente. Puede configurar el gas dentro de la transacción de esta manera: {from: eth.accounts[0], gas: 300000}. Tenga en cuenta que querrá establecer el gas, no el gasPrice . No te preocupes por acertar, ya que se reembolsa el gas no utilizado.

Aquí hay un consejo adicional para ayudar a depurar: use web3.getTransaction()y web3.getTransactionReceipt(). La cadena hexadecimal que geth le proporciona después de una transacción (es decir, "0x7048278dcdb02c02894082af541c73ad6a8e0e37cf1ab90ac914c58cc2d2f983") es el hash de esa transacción. Al usar getTransactionReceipt(hash), verá lo que sucedió. Si getTransactionReceipt()dice que la transacción usó tanto gas como getTransaction()dijo que tenía en primer lugar, lo más probable es que la transacción se quedó sin gas.