Soy nuevo en Ethereum. Estoy tratando de implementar mi primer contrato inteligente en mi cadena de bloques privada, pero mi función siempre devuelve 0. Escribí el contrato inteligente simple:
pragma solidity^0.5.0;
contract helloNumber {
int256 internal thisNumber;
constructor() public {
thisNumber = 4;
}
function showNumber() external pure returns (int256) {
return 4;
}
}
Generé Abi y BIN con solc
solcjs --bin helloNumber.sol
solcjs --bin helloNumber.sol
bandeja de resultados
60806040523480156100115760006000fd5b505b600460006000508190909055505b610026565b6090806100346000396000f3fe608060405234801560105760006000fd5b5060043610602c5760003560e01c806376dad22314603257602c565b60006000fd5b6038604e565b6040518082815260200191505060405180910390f35b6000600490506058565b9056fea265627a7a7231582090f812ea4d2db2a047f1e42576b9cd85f3c0bef7e9392797864143a00ce269c664736f6c634300050b0032
resultado IAB:
[{"constante":verdadero,"entradas":[],"nombre":"showNumber","salidas":[{"internalType":"int256","nombre":"","tipo":"int256 "}],"pagadero":falso,"estadoMutabilidad":"puro","tipo":"función"},{"entradas":[],"pagadero":falso,"estadoMutabilidad":"no pagadero"," tipo":"constructor"}]
en mi caparazón conectado a mi cadena de bloques privada:
var contract = eth.contract(ABI)
var bytecode = '0xBIN'
var deploy = {from:eth.coinbase, data:bytecode, gas: 2000000}
var object= contract .new(deploy)
object.address //returns the hashcode of smart contract on private blockchain.
object.showNumber() **//returns always 0.**
Muchas gracias de antemano por su ayuda y disculpe si es una pregunta tonta, pero soy nuevo en Ethereum. ¿Qué estoy haciendo mal?
Su código Javascript debe ser asíncrono (ya sea con async
/ await
o usando Promise
objetos), porque ambos contract.new
y object.showNumber
devuelven un archivo Promise
.
Por ejemplo:
async function run() {
var contract = eth.contract(ABI);
var bytecode = '0xBIN';
var deploy = {from: eth.coinbase, data: bytecode, gas: 2000000};
var object = await contract.new(deploy);
var n = await object.showNumber();
console.log(n);
}
Luego, puede llamar run()
al final de su script o llamar await run()
desde alguna otra async
función.