El siguiente fragmento de código no funciona.
pragma solidity ^0.4.11;
contract Test1 {
uint[] public a;
uint[] public b;
function putX(uint x) public {
a.push(x);
b.push(block.number);
}
function getA() public view returns (uint[]) {
return a;
}
function getB() public view returns (uint[]) {
return b;
}
}
Producción:
> test1.putX.sendTransaction(11, {from: eth.accounts[0]})
> test1.getA()
[]
> test1.getB()
[]
El siguiente fragmento de código, por el contrario, funciona.
pragma solidity ^0.4.11;
contract Test2 {
uint[2][] public a;
function putX(uint x) public {
a.push([x, block.number]);
}
function getA() public view returns (uint[2][]) {
return a;
}
}
Producción:
> test2.putX.sendTransaction(12, {from: eth.accounts[0]})
> test2.getA()
[[12, 1151]]
Me pregunto por qué... estoy usando el último geth estable (1.7)
También traté de usar una matriz de tamaño dinámico + una asignación, y tampoco funciona.
Incluso dudo que el código del documento oficial pueda funcionar, ya que utiliza múltiples variables de tamaño dinámico:
https://solidity.readthedocs.io/en/develop/solidity-by-example.html
¿Alguien sabe por que pasó esto?
Probé su código con ambos remix, geth v1.7.2 y v1.7.3 y ambos funcionan como se esperaba.
Tal vez su problema es que está haciendo la consulta antes de que se extraiga la transacción. Eso hará que el contrato vuelva al estado anterior.
debug.traceTransaction(txhash)
, de byzantinum eth.getTransactionReceipt(hash)
tiene un campo de 'estado' que indica que la transacción se ejecutó correctamente o se revirtió.
ismael
putX
transacción fue minada antes de llamargetA
? ¿Está utilizando web3 v1.0 o v0.20, o truffle? Algunos de ellos devuelven una promesa y tienes que esperar a que se formen antes de llamar al captador.hebothu