copiando bytes32 valores del mapa a la matriz

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"]
  1. ¿Qué estoy haciendo mal? ¿Los valores ni siquiera están almacenados permanentemente en la attributes()función?

  2. ¿Hay una mejor manera de hacer esto que almacenar en un mapa y copiarlo en una matriz?

Respuestas (1)

  1. ¿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]=0x0en lugar de attr[0]="0x0"(omitir las comillas). Eso es todo.

  1. ¿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.