0

我是以太坊的新手。我正在尝试使用 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"]

两个控制台上的命令admin.peers给了我相同的结果所以,它是相同的网络。

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

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

4

1 回答 1

0

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

要在网络上持久保存数据,您需要部署一个带有storage的合约。然后,您可以从合约存储中获取数据,而无需使用getStorageAt调用以及您的公共变量的签名执行交易。但是,您需要执行调用合约函数的事务(类似于上面的solidity 文档中的示例)以更新存储在合约中的数据。

于 2017-06-22T15:44:58.763 回答