计算 oracles

到目前为止,我们只是在请求和提供数据的背景下讨论了oracles。然而,oracles也可用于执行任意计算,这一功能在以太坊固有的区块gas限制和相对昂贵的计算成本的情况下特别有用; Vitalik本人指出,与现有的集中服务相比,以太坊的计算成本效率低了一百万倍[7]。计算oracles可以用于对一组输入执行相关计算,而不是仅仅中继查询结果,并返回计算结果,这可能是在链上计算不可行的。例如,可以使用计算oracle执行计算密集型回归计算,以估计债券合约的收益率。

Oraclize提供的服务允许去中心化应用请求输出在沙盒AWS虚拟机中执行的计算。AWS实例从包含在上传到IPFS的存档中的用户配置的Dockerfile创建可执行容器。根据请求,Oraclize使用其哈希检索此存档,然后在AWS上初始化并执行Docker容器,将作为环境变量提供给应用程序的任何参数传递。容器化应用程序根据时间限制执行计算,并且必须将结果写入标准输出,Oraclize可以将其返回到去中心化应用。Oraclize目前在可审核的t2.micro AWS实例上提供此服务。

作为可验证的oracle真理的标准,“cryptlet”的概念已被正式化为Microsoft更广泛的ESC框架[8]的一部分。Cryptlet在加密的封装内执行,该封装抽象出基础设施,例如I/O,并附加了CryptoDelegate,以便自动对传入和传出的消息进行签名,验证和验证。Cryptlet支持分布式事务,因此合约逻辑可以以ACID方式处理复杂的多步骤,多区块链和外部系统事务。这允许开发人员创建便携,隔离和私有的真相解决方案,以便在智能合约中使用。Cryptlet遵循以下格式:

  1. public class SampleContractCryptlet : Cryptlet
  2. {
  3. public SampleContractCryptlet(Guid id, Guid bindingId, string name, string address, IContainerServices hostContainer, bool contract)
  4. : base(id, bindingId, name, address, hostContainer, contract)
  5. {
  6. MessageApi =
  7. new CryptletMessageApi(GetType().FullName, new SampleContractConstructor())

TrueBit [9]是可扩展和可验证的离线计算的解决方案。它引入了一个求解器和验证器系统,分别执行计算和验证。如果解决方案受到挑战,则在链上执行对计算子集的迭代验证过程 - 一种“验证游戏”。游戏通过一系列循环进行,每个循环递归地检查计算的越来越小的子集。游戏最终进入最后一轮,挑战是微不足道的,以至于评委 - 以太坊矿工 - 可以对挑战是否合理,在链上进行最终裁决。实际上,TrueBit是一个计算市场的实现,允许去中心化应用支付可在网络外执行的可验证计算,但依靠以太坊来强制执行验证游戏的规则。理论上,这使无信任的智能合约能够安全地执行任何计算任务。

TrueBit等系统有广泛的应用,从机器学习到任何工作量证明的验证。后者的一个例子是Doge-Ethereum桥,它利用TrueBit来验证Dogecoin的工作量证明,Scrypt,一种难以在以太坊块gas限制内计算的内存密集和计算密集型函数。通过在TrueBit上执行此验证,可以在以太坊的Rinkeby测试网络上的智能合约中安全地验证Dogecoin交易。