Web3js

使用 web3.js 從智能合約中檢索所有儲存

  • August 23, 2022

我嘗試對乙太坊上的智能合約進行逆向工程。現在我想通過 web3 從合約中檢索所有使用/更改的儲存。這可能嗎?我知道,我無法獲取例如映射的鍵,因為它們僅以散列形式使用(如函式名稱),但我認為應該可以獲得自合約存在以來更改的所有儲存。但是怎麼做?

如果您可以訪問原始碼,則可以查看儲存佈局並找出合約變數的所有儲存位置。您可以使用 web3.js 或 ethers.js getStorageAt 檢索這些位置的值。

這裡有一些連結顯示使用 web3/ethers https://www.youtube.com/watch?v=C9C4zgskHwg https://www.youtube.com/watch?v=Gg6nt3YW74o https://solidity-by訪問合約儲存-example.org/hacks/accessing-private-data/

否則,您可以檢查與契約相關的所有交易,並找出已進行了哪些更改。

您可以通過 etherscan.io 看到儲存槽中的一些數據以及這些數據的交易變化

這是完全隨機的例子

$$ https://etherscan.io/tx/0x98c6b4488501e6b932de4dccbf399736976810e4608baf79dbe5df68629a5832#statechange $$$$ 1 $$ 展開狀態更改區域,您可以看到事務如何更改儲存槽 0 和 10 以及其他兩個用 32 字節雜湊指定的儲存地址的值。您可以找到合約的部署事務以查看部署時的更改。在狀態更改區域中,您可以將 bytes32 數據的視圖從十六進制更改為數字/文本/地址,以快速查看它作為另一種數據類型是否有意義

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