Contract-Development

有人可以讀取這個私有變數嗎?

  • December 18, 2021

我的目的是在創建智能合約時生成一個隨機密鑰,並將該密鑰保存在一個私有變數中。我也不知道它的價值。

我們以下面的程式碼為例:

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

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