Contract-Development
有人可以讀取這個私有變數嗎?
我的目的是在創建智能合約時生成一個隨機密鑰,並將該密鑰保存在一個私有變數中。我也不知道它的價值。
我們以下面的程式碼為例:
pragma solidity >=0.4.22 <0.7.0; /** * @title Storage * @dev Store value in a variable */ contract Storage { uint256 private number; constructor () public { number = uint(keccak256(abi.encodePacked(now, msg.sender))) % 100; } }
有人可以知道
number
是什麼嗎?一些礦工可以重複計算並得到相同的數字嗎?我在rinkeby上部署了這個智能合約,我沒有看到任何獲取器來讀取
number
.
在 Solidity 智能合約的背景下,私有並不意味著價值是秘密。這只是意味著變數被封裝,另一個合約將無法直接引用它。然而,當自省塊或分析設置值的事務時,值本身總是可見的。
避免在鏈上保存任何私人資訊(PII、秘密等)也是一種最佳安全實踐。
https://solidity.readthedocs.io/en/v0.5.3/contracts.html#visibility-and-getters