Estoy tratando de copiar valores almacenados de un mapa a una matriz. Tengo el siguiente código:
pragma solidity ^0.4.21;
contract test {
event LogTest(
bytes32[5] a
);
bytes32[5] arr;
mapping (uint=>bytes32) attr;
//function that stores values and copies them to array which is returned
function attributes() internal returns(bytes32[5]){
bytes32[5] x;
attr[0] = "0x0"; attr[1] = "0x1"; attr[2] = "0x2"; attr[3] = "0x3"; attr[4] = "0x4";
for(uint i=0;i<5;i++){
x[i] = attr[i];
}
return(x);
}
//function that retrieves stored values and prints them in log
function copy() public {
arr = attributes();
LogTest(arr);
}
}
Por alguna razón, no estoy copiando los valores correctos. Estoy obteniendo algo que se parece a esto:
"event": "LogTest",
"args": {
"0": [
"0x3078300000000000000000000000000000000000000000000000000000000000",
"0x3078310000000000000000000000000000000000000000000000000000000000",
"0x3078320000000000000000000000000000000000000000000000000000000000",
"0x3078330000000000000000000000000000000000000000000000000000000000",
"0x3078340000000000000000000000000000000000000000000000000000000000"]
¿Qué estoy haciendo mal? ¿Los valores ni siquiera están almacenados permanentemente en la attributes()
función?
¿Hay una mejor manera de hacer esto que almacenar en un mapa y copiarlo en una matriz?
- ¿Qué estoy haciendo mal? ¿Los valores ni siquiera están almacenados permanentemente en la función de atributos ()?
Está guardando la representación de bytes de la palabra 0x0, 0x1, etc. do: attr[0]=0x0
en lugar de attr[0]="0x0"
(omitir las comillas). Eso es todo.
- ¿Hay una mejor manera de hacer esto que almacenar en un mapa y copiarlo en una matriz?
Esto depende de lo que estés haciendo. Puede guardar directamente en la matriz.
Espero que esto ayude.