Solidity 访问私有变量

yuz*_*zır 5 storage ethereum solidity smartcontracts web3js

目前,我正在练习 Solidity。但是,我对访问合同中的私有变量有点困惑。

例如这里;

address private a;
address private b;
mapping (bytes32 => uint) public people;
mapping (bytes32 => mapping(address => uint)) public listOfEmp;
bytes32[] public list;
bytes32 private z;
Run Code Online (Sandbox Code Playgroud)

我可以访问“a”

web3.eth.getStorageAt("0x501...", 0)
Run Code Online (Sandbox Code Playgroud)

我如何在此处访问“z”?来自不同的合同。

谢谢

小智 7

即使合约的存储是私有的,您也可以访问它。

尝试这个:

web3.eth.getStorageAt("0x501...", 5)
Run Code Online (Sandbox Code Playgroud)

如果您想访问地图或数组,请检查此文档以了解状态变量的布局:https ://solidity.readthedocs.io/en/v0.4.24/miscellaneous.html

顺便说一句,您应该始终使用 getProof 来验证该值。


小智 -6

我不相信你可以。私有变量只能在定义它的合约中使用。请参阅此处:http ://solidity.readthedocs.io/en/v0.4.21/contracts.html