来自以太坊不同控制台的变量的可见性
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 文档中的示例),以便更新存储在合约中的数据。
我是以太坊新手。 我正在尝试使用 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 文档中的示例),以便更新存储在合约中的数据。