He usado geth para configurar una cadena de bloques privada local. Pude configurar dos cuentas y enviar ether de una a otra y extraer las transacciones. Ahora estoy tratando de implementar un contrato inteligente. Seguí estos pasos:
Usé solcjs para generar los archivos .abi y .bin
Iniciar el minero
Desbloqueó la cuenta utilizada para implementar el contrato.
Guardado en la consola geth bin y abi con:
var contract = web3.eth.contract(<CONTENTS_OF_ABI_FILE>)
var bytecode = '0x<CONTENTS_OF_BIN_FILE>'
Implemente el contrato inteligente con:
var deploy = {from:eth.accounts[0], data:bytecode, gas: 2000000}
var instance = contract.new(param1,param2,param3, deploy)
Entonces geth devuelve indefinido y si ejecuto `instance.address' todavía obtengo indefinido.
¿Por qué no se extrae mi contrato?
new
no devolverá la dirección inmediatamente. Lo que tendrás inmediatamente es hash de transacción. A partir de ahí, tendrás que esperar a que se extraiga la transacción.
De https://github.com/ethereum/wiki/wiki/JavaScript-API :
// Deploy contract syncronous: The address will be added as soon as the contract is mined.
// Additionally you can watch the transaction by using the "transactionHash" property
var myContractInstance = MyContract.new(param1, param2, {data: myContractCode, gas: 300000, from: mySenderAddress});
myContractInstance.transactionHash // The hash of the transaction, which created the contract
myContractInstance.address // undefined at start, but will be auto-filled later
Sugeriría usar un marco como trufa. En trufa, una transacción será una promesa y puede await
completarla.
ismael