Solidity
web3.utils.toHex() 和 web3.utils.keccak256() 有什麼區別?
我一直在練習 Ethernaut CTF,但我陷入了委派問題。
首先,我試圖在控制台中解決這個問題。但我無法獲得所有權。
var pwn = web3.utils.toHex("pwn()") await contract.sendTransaction({data: pwn})
其次,我嘗試了不同的方法。最後,我得到了所有權。
var pwn_function = web3.utils.keccak256("pwn()") await contract.sendTransaction({data: pwn_function})
順便問一下,第一種方法和第二種方法有什麼區別?我可以
web3.utils.toHex
在 web3.js 文件中找到但找不到web3.utils.keccak256
. 我錯過了什麼?
功能
toHex
和keccak256
是非常不同的東西。第一個簡單地將某些東西(通常是數字)轉換為十六進制格式。所以它基本上對數據進行了不同的編碼,但數據仍然完全相同——如果你願意,你可以將其轉換回來。
第二個是計算給定數據的雜湊值。您無法反轉該操作:您無法從輸出中獲取輸入。
我不知道為什麼
keccak256
無法通過在 web3js 文件中搜尋找到該函式(https://web3js.readthedocs.io/en/v1.8.0/search.html?q=keccak256&check_keywords=yes&area=default)。