Compare byte32 Keccak256 con el mismo Keccak256 almacenado en una matriz byte32

Quiero que mi función pueda aceptar una matriz de secretos Hashed como parámetro y, dado que la solidez no permite cadenas, tuve que usar un byte32 [].

El parámetro de cadena es una entrada para el secreto del usuario que estoy codificando con Keccak256, que debería convertirlo en un valor de byte32.

Dado que (o eso creo) la cadena de secreto hash es un byte32 y también lo es el secreto hash almacenado en el primer elemento de la matriz byte32, la afirmación debe evaluarse como verdadera al compararlos.

Prueba:

it("Checking secrets", function() {
    return myContract.deployed().then(function(instance){
      contract = instance;
      return contract.test.call("hello", ["1c8aff950685c2ed4bc3174f3472287b56d9517b9c948127319a09a7a36deac8"])
      .then(function(testVals){
        assert.equal(testVals[0].valueOf(), testVals[1][0].valueOf())
      })
  });
});

Función:

function test(string val1, bytes32[] val2) public returns(bytes32, bytes32[]){
        return(keccak256(val1), val2);
    }

Resultado:

AssertionError: expected '0x1c8aff950685c2ed4bc3174f3472287b56d9517b9c948127319a09a7a36deac8' to equal '0x3163386166663935303638356332656434626333313734663334373232383762'
Pruebe un líder 0x, es decir0x1c8aff95...
Vaya, qué error tan tonto, jajaja... muchas gracias por volver a consultarme desde la mañana.

Respuestas (1)

@smarx estaba en lo correcto. Tuve que agregar un "0x" inicial a los valores hash que estaba pasando a la matriz byte32:

it("Checking secrets", function() {
    return myContract.deployed().then(function(instance){
      contract = instance;
      return contract.test.call("hello", ["0x1c8aff950685c2ed4bc3174f3472287b56d9517b9c948127319a09a7a36deac8"])
      .then(function(testVals){
        assert.equal(testVals[0].valueOf(), testVals[1][0].valueOf())
      })
  });
});