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

Visibility of variables from different consoles in Ethereum

我是以太坊新手。 我正在尝试使用 Azure 的集群开发合同(我有试用帐户)。 我使用 geth 从 Azure 中的机器连接到我的网络:

gethadmin@XXXXXX-tx0:~$ geth attach http://ether2ore.eastus.cloudapp.azure.com:8545

然后我初始化变量

>var test_var = 555
undefined
>test_var
555

没问题。

但是当我尝试从笔记本电脑连接到同一点时:

C:\Users\boris>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

eth.accounts ["0xab14c61930343149c2f54044054cd46b90c0dee6", "0x7cc276b28bfdbb57151ed3b5552aafb2f2592964", "0xc9b8b9d57219b2c0935d8c28d4d2247fe70232f3", "0x2aed463fd54aa41fed898a9629bee6f0935b74fb"]

Command admin.peers 在两个控制台上给我相同的结果 所以,这是相同的网络。

也许我不明白它应该如何工作,但我怀疑,如果我在同一个网络中定义变量,它必须在所有控制台上都可见。是不是? 与合同相同的情况。我在第一个控制台编译了合约并可以使用它运行,但它无法从另一个控制台访问。

拜托,你能解释一下为什么会发生这种情况,或者给我正确的链接以获得这个问题的答案。 非常感谢

您实例化的变量是控制台内的局部变量。 每次连接时,都会在本地创建一个新的 JavaScript Console 和公开的 web3 API 并包装以太坊函数调用,以便您可以在 JS 中使用它们,而不必编写原始调用。

要在网络上保存数据,您需要使用 storage. You could then fetch the data from the contract storage without executing a transaction using a getStorageAt or call 和 public 变量的签名来部署合约。但是,您将需要执行调用合约函数的交易(类似于上面 solidity 文档中的示例),以便更新存储在合约中的数据。