Solidity
將 byte32 Keccak256 與儲存在 byte32 數組中的相同 Keccak256 進行比較
我希望我的函式能夠接受散列秘密數組作為參數,並且由於solidity不允許字元串,我不得不使用 byte32
$$ $$. 字元串參數是使用者秘密的入口,我使用 Keccak256 對其進行雜湊處理,應該將其轉換為 byte32 值。
由於(或者我認為)散列秘密字元串是一個 byte32 並且儲存在 byte32 數組的第一個元素中的散列秘密也是如此,因此在比較它們時斷言應該評估為真
測試:
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()) }) }); });
功能:
function test(string val1, bytes32[] val2) public returns(bytes32, bytes32[]){ return(keccak256(val1), val2); }
結果:
AssertionError: expected '0x1c8aff950685c2ed4bc3174f3472287b56d9517b9c948127319a09a7a36deac8' to equal '0x3163386166663935303638356332656434626333313734663334373232383762'
@smarx 是正確的。我必須在傳遞給 byte32 數組的雜湊中添加一個前導“0x”:
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()) }) }); });