devolver una matriz 2D de tamaño fijo a web3.js

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 getBlocken web3.js es este número:

0xf5027db1aeac4c95acf2c3c32651cfd3f5561906399e19bd14818a6c7cc2d9cb

¿Mi suposición es que esta es una dirección?

Intenté web3.eth.getStorageAtesa 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?

Respuestas (1)

El número hexadecimal que obtuvo fue un hash de transacción. Si desea leer desde el almacenamiento, debe agregar la constantpalabra 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 callmétodo.

myContract.getBlock.call(3,4)
que embarazoso. Gracias. No estoy seguro de cómo me perdí eso.
era una pregunta de 2 partes: si quiero leer una matriz grande, parece más eficiente leer getStorageAt, pero ¿cómo encuentro la dirección de la matriz 4d?
si devuelvo la matriz 4d, me quedo sin combustible (es decir, nada programáticamente, solo algo en el archivo de registro del minero)