Solidity

SOLIDITY 中的 keccak3 和 WEB3 中地址類型欄位的不同雜湊值

  • March 14, 2020

如何從 Keccak-256 () insolidity 和 web3.sha3() 在 web3 中獲得相同的結果雜湊?

使用 keccak256( address ) 和使用 web3.sha3 ( address ) 在solidity 中給出不同的結果。

在 web3 中,地址欄位是一個字元串,而在solidity 中它是一個地址。

如何將 web3 字元串轉換為地址類型欄位?

我嘗試將地址類型欄位轉換為可靠的字元串,但我仍然收到不同的雜湊結果。

為了解決我使用的堅固性刺痛

function toString(address x) returns (string) {
   bytes memory b = new bytes(20);
   for (uint i = 0; i < 20; i++)
       b[i] = byte(uint8(uint(x) / (2**(8*(19 - i)))));
   return string(b);
}

web3.sha3()接受一個編碼參數來指定您正在傳遞一個十六進制地址:

address_string = '0x5b2063246f2191f18f2675cedb8b28102e957458';
web3.sha3(address_string, {encoding: 'hex'});

作為一般的旁注:您必須支付 gas 費用才能在 Solidity 中進行任何自定義工作,因此,如果可能,您最好在 javascript 方面工作。

此外,您可以keccak256( address )constant本地執行solidity 函式,然後將結果傳遞到事務中。當然,如果你讓使用者在他們的瀏覽器中這樣做,這對於生產來說是不安全的。

引用自:https://ethereum.stackexchange.com/questions/24093