访问私有变量的Solidity

时间:2018-05-23 16:23:51

标签: storage ethereum solidity smartcontracts web3js

目前,我实践稳固。但是,我对在合同中访问私有变量感到有些困惑。

例如这里;

address private a;
address private b;
mapping (bytes32 => uint) public people;
mapping (bytes32 => mapping(address => uint)) public listOfEmp;
bytes32[] public list;
bytes32 private z;

我可以访问' a'与

web3.eth.getStorageAt("0x501...", 0)

我如何访问' z'这里?来自不同的合同。

谢谢

3 个答案:

答案 0 :(得分:0)

即使您的合同是私人的,您也可以访问它。

尝试一下:

web3.eth.getStorageAt("0x501...", 5)

如果要访问映射或数组,请检查此文档以获取状态变量的布局:https://solidity.readthedocs.io/en/v0.4.24/miscellaneous.html

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

答案 1 :(得分:0)

将以太坊视为在计算机上或远程运行的进程。使用web3.eth.getStorageAt从过程存储器中读取数据。您可以用相同的方式读取计算机上每个程序的数据。

另一方面,诸如Java,C ++或Solidity之类的高级编程语言经常定义对变量和函数(私有,受保护等)的访问规则。但是这些规则仅在程序执行的上下文中成立。对于Solidity,上下文是事务的执行。

这意味着专用字段仅对尝试读取该字段的其他合同专用。但是可以通过外部{和[{1}}}这样的API读取。

答案 2 :(得分:-3)

我不相信你可以。私有变量仅用于定义它的合同中。 见这里:http://solidity.readthedocs.io/en/v0.4.21/contracts.html