Me gustaría devolver una matriz 2D del código de solidez y mirarla con web3.js
esta es la función de solidez:
uint8 [10][10][100][100] public blocks;
function getBlock(uint x, uint y) returns (uint8[10][10]) {
if (x < blockStoreSide && y < blockStoreSide) {
return blocks[x][y];
}
}
pero lo que obtengo getBlock
en web3.js es este número:
0xf5027db1aeac4c95acf2c3c32651cfd3f5561906399e19bd14818a6c7cc2d9cb
¿Mi suposición es que esta es una dirección?
Intenté web3.eth.getStorageAt
esa dirección, pero solo obtengo ceros, no el valor que realmente establecí.
el ABI me parece bien:
{ constant: false,
inputs:
[ { name: 'x', type: 'uint256' },
{ name: 'y', type: 'uint256' } ],
name: 'getBlock',
outputs: [ { name: '', type: 'uint8[10][10]' } ],
type: 'function' }
Entonces, ¿cómo leo realmente el almacenamiento? Pregunta más general, ¿cómo puedo leer de manera eficiente grandes cantidades de almacenamiento?
El número hexadecimal que obtuvo fue un hash de transacción. Si desea leer desde el almacenamiento, debe agregar la constant
palabra clave a su función:
uint8 [10][10][100][100] public blocks;
function getBlock(uint x, uint y) constant returns (uint8[10][10]) {
if (x < blockStoreSide && y < blockStoreSide) {
return blocks[x][y];
}
}
Alternativamente, puede utilizar el call
método.
myContract.getBlock.call(3,4)
pablo s
pablo s
pablo s