本關看一下合約代碼就很好理解,就是要取得合約的password的值。雖然password是一個private,不能直接呼叫合約取值,但以太坊本質是一個公開的區塊鏈,這樣把密碼明文上鏈幾乎相當於直接公開密碼…
最無奈的是我還真見過有人這樣做…
當年區塊鏈剛剛興起,大量山寨鏈送幣發展自家社群,有些鏈只要開發出一個能用的Dapp官方就送幣給開發者,導致大量對區塊鏈認識不足的開發者開發出一堆令人哭笑不得的產品。其中有一個就是把密碼全部明文上鏈的密碼管理器。開發者只知道在區塊鏈中存密碼不會掉,卻不知道也等於是跟全世界一起分享密碼…
使用Web3的getStorageAt函數可以取得指定地址特定位置的storage。打開Console (F12),輸入
> web3.eth.getStorageAt(instance, 1).then(web3.utils.toAscii).then(console.log);
< A very strong secret password :)
可以看到密碼就是”A very strong secret password :)”。
然後把密碼放進unlock函數。
> contract.unlock(web3.utils.fromAscii("A very strong secret password :)"));
最後按提交,本關完成。