我刚开始研究智能合同,据我所知,智能合同只处理区块链上的数据。在处理私有区块链时,我想知道区块链中的智能契约是否可以访问外部数据并对其进行更改。在外部,我指的是块链网络中节点上的数据,而不是来自internet的数据。所以没有先知。由于智能契约是确定性的,并在每个节点上执行,所以假设我在网络上每个节点的"datadir“中都有相同的文件。我是否可以从智能契约访问此文件,并在必要时对其进行更改?
发布于 2016-06-10 02:34:23
你是正确的。从盒子里出来,以太是完全孤立的。
https://solidity.readthedocs.io/en/latest/introduction-to-smart-contracts.html#index-6
概述或EVM是EVM中智能契约的运行时环境。它不仅是沙箱的,而且实际上是完全隔离的,这意味着在EVM中运行的代码无法访问网络、文件系统或其他进程。Smart合同甚至对其他smart合同的使用也很有限。
另一种选择可能是让外部机器侦听区块链中的events。它可以根据这些来决定该做什么。
发布于 2016-06-11 06:32:55
理论上,如果您正在运行一个私有链,您的验证器控制验证软件,因此您可以编写它来执行您想做的任何事情。然而,由于它是为一个公共链设计的,它期望验证是确定性的,并且是独立的,所以最初发布的Ethereum软件本身并不能给您提供这样的方法。
您可能希望看到的一件事是Hydrachain中的本地契约,在其中,IIUC您可以编写任意的python代码,并让您的验证程序运行它,并在契约中使用结果。
另一种方法看起来有点像神谕,但它并没有像先知通常那样改变您的信任模型:让您的每个验证器运行一个并行系统,监视公共区块链并发布签名数据(或者发送签名的事务,也就是相同的事情),以证明他们看到了什么。然后,在您的合同中,检查每一件您想要验证的东西是否已经由51%的验证器签署。如果51%的验证者合谋在公共区块链上看到他们所看到的,你可能会被搞砸,但是你的私人区块链在这些条件下还是被打破了。
https://ethereum.stackexchange.com/questions/5851
复制相似问题