Solidity

web3.utils.toHex() 和 web3.utils.keccak256() 有什麼區別?

  • October 3, 2022

我一直在練習 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. 我錯過了什麼?

功能toHexkeccak256是非常不同的東西。

第一個簡單地將某些東西(通常是數字)轉換為十六進制格式。所以它基本上對數據進行了不同的編碼,但數據仍然完全相同——如果你願意,你可以將其轉換回來。

第二個是計算給定數據的雜湊值。您無法反轉該操作:您無法從輸出中獲取輸入。

我不知道為什麼keccak256無法通過在 web3js 文件中搜尋找到該函式(https://web3js.readthedocs.io/en/v1.8.0/search.html?q=keccak256&check_keywords=yes&area=default)。

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