来自以太坊中不同控制台的变量的可见性



我是以太坊的新手。 我正在尝试使用 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 文档中的示例)以更新存储在合约中的数据。

最新更新