Privacy

如何查看儲存在私有變數中的字元串的值?

  • April 5, 2018

我讀過很多次敏感數據永遠不應該儲存在事務中,但是,具體來說,如果標記狀態變數的值將如何讀取private

對於您提供的範例合約,在插槽 1 中似乎有一個bytes32狀態變數,其值為“A very strong secret password :)”。

我只打電話getStorageAt幾次就發現了這一點:

> web3.eth.getStorageAt('0x6260319bcbcbf33f84397ae0000e49b0f50ee075', 0, (e, v) => console.log(v))
0x0000000000000000000000000000000000000000000000000000000000000001
> web3.eth.getStorageAt('0x6260319bcbcbf33f84397ae0000e49b0f50ee075', 1, (e, v) => console.log(v))
0x412076657279207374726f6e67207365637265742070617373776f7264203a29
> web3.eth.getStorageAt('0x6260319bcbcbf33f84397ae0000e49b0f50ee075', 1, (e, v) => console.log(web3.toAscii(v)));
A very strong secret password :)

如果我們有合約的原始碼,這會容易得多。如果契約被混淆了,這會有點困難。

但底線是區塊鏈上的所有內容(包括私有狀態變數)都是公開的。

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