Estoy probando un contrato muy simple en la red de prueba de Rinkeby. Bastante tan simple como se pone:
pragma solidity ^0.4.17;
contract Root {
string rootHash;
function set(string x) public {
rootHash = x;
}
function get() public constant returns (string x) {
return rootHash;
}
}
Almacena un multihash ipfs y permite recuperarlo.
La parte de escritura parece funcionar, usando este código: https://gist.github.com/pwrstudio/6c95043ae3bb6a9aef9734a3fc8469e7
Puedo ver que el multihash se envía al contrato, codificado como hexadecimal: https://rinkeby.etherscan.io/tx/0x4d7b98cf577d580168d24b1f61bcbc60f3f919c751624793e83dd10191ebba98
Pero al llamar a la get
función me sale este error:
ERROR: The returned value is not a convertible string
Código js relevante:
return new Promise((resolve, reject) => {
const rootContract = new web3.eth.Contract(abi, CONTRACT_ADDRESS)
rootContract.methods
.get()
.call()
.then(res => console.log(res))
.catch(e => console.log(e))
})
¡Cualquier sugerencia sobre lo que estoy haciendo mal es muy apreciada!
Hay un pequeño error tipográfico en la definición de función get
. Debe definir solo el tipo de valor devuelto string
en la definición de la función, pero no el nombre de la variable ( x
). Esto debería hacer que funcione:
function get() public constant returns (string) {
return rootHash;
}
Malone
pabloruiz55