這個合約的開發者非常小心的保護了 storage 敏感資料的區域.
把這個合約解鎖就可以通關喔
Storage 在 Level 8 - Vault 就有提到,合約中的 state variable 皆會儲存於此
Parameter parsing 是指變數在被呼叫時的過程,會有兩種不同的稱呼:
parameter parsing 的說明也可以參考以下兩篇,有範例程式碼幫助了解:
casting 是指當不同型態的變數要一起運算時,「若型態轉換不會影響原數值的話,就會自動改變型態並運算」,舉裡來說:
詳細可以參考 Learn Solidity lesson 22. Type casting.
這題解鎖的方法要呼叫 16 行的 unlock(bytes16 _key)
,它會檢查你輸入的 _key
是否等於 bytes16(data[2])
所以我們要讀取 data[2]
的數值,雖然是 private
屬性,但我們還是可以在 storage slot 中找到,只要透過變數的長度去推算即可,這題宣告的變數有:
將變數逐個填入 stroage slot(1 個 slot 可以存放 32 bytes):
slot idx | (type) Variable |
---|---|
0 | (bool) locked |
1 | (uint256) ID |
2 | (uint8) flattening, (uint8) denomination, (uint16) awkwardness |
3 | (bytes32) data[0] |
4 | (bytes32) data[1] |
5 | (bytes32) data[2] |
所以 _key
在 slot 5 可以找到,還要記得把它轉換成 bytes16
,實作如下: