Tengo mi red Ethereum privada.
Dentro del navegador Solidity:
create
botón y desplegué con éxito mi contrato.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.
Dentro de Geth:
Obtenga la dirección y el abi (ubicados dentro del cuadro de la interfaz) del Navegador de Solidity que señalará el contrato implementado.
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(), ... }
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.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.
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.