Solidity
SOLIDITY 中的 keccak3 和 WEB3 中地址類型欄位的不同雜湊值
如何從 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 函式,然後將結果傳遞到事務中。當然,如果你讓使用者在他們的瀏覽器中這樣做,這對於生產來說是不安全的。