Ethereum依赖于Oracles来提供SmartContracts使用的外部世界的信息。此外,当节点同步(在慢速模式下)时,它必须遍历所有事务(包括SmartContract事务)来验证整个事务历史记录。那么,如果到了新节点同步的时候,oracle就不再可用了呢?
发布于 2020-02-04 04:20:10
我认为,重要的是要理解的是,合同不能咨询先知的确切原因,OP在问题中所描述的。Oracles用合同的输入来签署事务,所以不管Oracle将来的可用性和一致性如何,输入都是链的一部分。
类似回调的模式可以使合同看起来像调用Oracle。
大致如下:
步骤1:客户端(合同)向Oracle合同发送请求。
步骤2: Oracle的离链组件观察请求,例如监视事件。
步骤3: Oracle的离链组件将事务签名到客户端的回调。
步骤4:客户端(合同)有Oracle的输入,可以继续其下一个步骤。
在这样的序列中,启动步骤1的发送方事务和Oracle的响应步骤4都是不可变的事务,其他节点将使用它们来计算客户端契约的状态。Oracle仍然可用并不重要。它所说的,曾经被记录下来,这就是客户所做的。
希望能帮上忙。
发布于 2020-02-04 04:07:23
块链与任何外部交互都是隔离的,并且您有在任何时候验证块和事务所需的所有数据。
有些事务可能包含来自oracle的语句,但它们处于较高的抽象级别,因此常规网络客户端无法验证它们。
oracle协议必须提供验证此类语句的方法。一个典型的解决办法是,如果获得多数票,则提供投票时间,声明得到确认。所有选票都记录在区块链中,您可以验证它们。
https://ethereum.stackexchange.com/questions/79585
复制相似问题