我是以太坊的新手。 我正在尝试使用 Azure 的集群开发合同(我有试用帐户)。 我使用 geth 从 Azure 中的计算机连接到我的网络:
gethadmin@XXXXXX-tx0:~$ geth attach http://ether2ore.eastus.cloudapp.azure.com:8545
然后我初始化变量
>var test_var = 555
undefined
>test_var
555
这是 - 好的。
但是当我尝试从笔记本电脑连接到同一点时:
C:Usersboris>geth attach http://ether2ore.eastus.cloudapp.azure.com:8545
我试图检查这个变量:
> test_var
ReferenceError: 'test_var' is not defined
at <anonymous>:1:1
我看到它没有定义。
在两个控制台上,我看到相同的帐户:
来自 - C:\Users\boris>
eth.accounts ["0xab14c61930343149c2f54044054cd46b90c0dee6", "0x7cc276b28bfdbb57151ed3b5552aafb2f2592964", ">0xc9b8b9d57219b2c0935d8c28d4d2247fe70232f3", "0x2aed463fd54aa41fed898a9629bee6f0935b74fb"]
从 - gethadmin@XXXXXX-tx0
以太账户 ["0xab14c61930343149c2f54044054cd46b90c0dee6"、"0x7cc276b28bfdbb57151ed3b5552aafb2f2592964"、"0xc9b8b9d57219b2c0935d8c28d4d2247fe70232f3"、"0x2aed463fd54aa41fed898a9629bee6f0935b74fb"]
两个控制台上的命令管理员对等节点给了我相同的结果 所以,这是相同的网络。
也许我不明白它应该如何工作,但我怀疑,如果我在同一网络中定义变量,它必须在所有控制台上可见。不是吗? 合同的情况相同。我在第一个控制台中编译了合约并可以使用它进行操作,但无法从另一个控制台访问它。
请您解释为什么会出现这种情况,或者给我适当的链接来获得有关此问题的答案。 非常感谢
您正在实例化的变量是控制台中的局部变量。 每次连接时,都会在本地创建一个公开 web3 API 的新 JavaScript 控制台,并包装以太坊函数调用,以便您可以在 JS 中使用它们,而不必编写原始调用。
若要在网络上持久保存数据,需要部署具有存储的协定。然后,您可以从合约存储中获取数据,而无需使用 getStorageAt 或调用以及公共变量的签名执行事务。但是,您需要执行调用合约函数的交易(类似于上面 solidity 文档中的示例)以更新存储在合约中的数据。