Ich möchte, dass meine Funktion ein Array von Hash-Geheimnissen als Parameter akzeptieren kann, und da die Solidität keine Zeichenfolgen zulässt, musste ich ein byte32 [] verwenden.
Der String-Parameter ist eine Aufnahme für das Geheimnis des Benutzers, das ich mit Keccak256 hash, das es in einen Byte32-Wert konvertieren sollte.
Da (oder so denke ich) die gehashte geheime Zeichenfolge ein byte32 ist und das gehashte Geheimnis auch im ersten Element des byte32-Arrays gespeichert ist, sollte die Assertion beim Vergleich als wahr ausgewertet werden
Prüfen:
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())
})
});
});
Funktion:
function test(string val1, bytes32[] val2) public returns(bytes32, bytes32[]){
return(keccak256(val1), val2);
}
Ergebnis:
AssertionError: expected '0x1c8aff950685c2ed4bc3174f3472287b56d9517b9c948127319a09a7a36deac8' to equal '0x3163386166663935303638356332656434626333313734663334373232383762'
@smart war richtig. Ich musste den Hashes, die ich an das byte32-Array übergab, ein führendes "0x" hinzufügen:
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())
})
});
});
Benutzer19510
0x
, dh0x1c8aff95...
Jonathan Scialpi