美文网首页有意思的文章我爱编程
智能合约与外部世界交互

智能合约与外部世界交互

作者: 1b718bb39826 | 来源:发表于2018-04-04 21:04 被阅读30次

    用以太坊为例子,以太坊智能合约目前只能存取访问链上的信息,它们自身无法取得外部信息和数据,而Oraclize作为一个数据传送者,可以在以太坊的DApps与Web APIs之间提供可靠连接,让基于智能合约的Dapp应用无需信任地取得外部信息和数据。在以太坊公链上使用Oraclize服务很简单,只需要在你的智能合约代码引用usingOraclize的合约,然后根据API文档进行相关方法调用就可以了。如果是私链则会麻烦一些,需要自己另外部署Oraclize服务。

    这里主要存在两个问题,一是共识问题,二是受信任方问题。

    一、共识问题

    解决的方法其实很简单,不通过智能合约发出外部数据获取指令,而是由第三方发送一笔区块链交易,在交易中附加需要的数据,交易会将数据嵌入区块,并同步到每个节点,从而保证数据的完全一致,因此可以用于智能合约的计算中。总结就是由第三方将数据推送进区块链,而不是由智能合约将数据拉取进去。

    二、受信任方问题

    第三方如何信任?第三方如果在数据传输过程中私自篡改数据怎么办?如何审计第三方是否从正确的地址获取的数据?为解决可信问题,就需要引入Oracle预言机。预言机具有不可篡改、服务稳定、可审计等特点,并具有经济激励机制以保证运行的动力。目前来说,预言机有两种模型,一个是单一模型,另一个是多重模型,有时候多重模型又称为Oracle网络。

    单一模型只包含一个预言机,目前一个单一模型的实例是Oraclize。

    多重模型包含多个预言机,甚至是预言机网络。在这一模型中,代码的执行分布在若干独立的预言机中,例如10个,用户使用7/10模型,只有当等于大于7个智能预言机一致时,合同才能够执行。

    三、单一模型预言机Oraclize

    其目的是在区块链和互联网之间建立一道可信的数据网关。目前采用Solidity的智能合约只能存取访问链内的信息,而Oraclize作为一个数据传送者,可以在以太坊的DApps与Web APIs之间提供可靠连接。Oraclize在以太坊上部署了一个名为usingOraclize的智能合约,如果需要其数据访问服务,只需要在自己的智能合约中引用该智能合约,然后根据API文档中描述的方法进行相关的调用即可。

    Oraclize提供了多种数据源服务器,包括Url访问、数据搜索引擎、区块链内容数据、IPFS文件访问等等,其中Url访问和区块链内容数据提供了基于TLSNotary的可信证明技术,也是常见的数据访问需求。

    四、TLS证明技术(TLSnotary)原理

    TLS包含三个基本阶段:1.对等协商支援的密钥算法,2.基于私钥加密交换公钥、基于PKI证书的身份认证,3.基于公钥加密的保密数据传输。

    在整个传输中,TLS的master key可以分成三个部分:服务器方、受审核方和审核方。在整个流程中,互联网数据源作为服务器方,Oraclize作为受审核方,一个专门设计的,部署在亚马逊云上的开源实例作为审核方,每个人都可以通过这个审计方服务对Oraclize过去提供的数据进行审查和检验,以保证数据的完整性和安全性。

    五、多重模型预言机运作方式

    当数据输入时,网络需要保证参与者节点无法知晓其他参与者的数据,然后各个节点将数据输入智能合约,智能合约对于价格等连续数据将选择最接近中位数的数据,如果是二元数据则统计得票最多的结果,最后对提供正确数据的节点进行奖励。与单一模型不同,多重模型需要面对女巫攻击(Sybil attack)和共谋攻击(collusion attack)。

    这两个攻击本质上都是通过控制多个节点来伪造数据干扰最终结果,主要防范的方法,一是鼓励尽量多的节点参加数据反馈;二是让每个节点的权重尽量平均,防止某些节点权重过高,易于控制结果,三是提高节点的接入成本,比如需要一定的押金;四是需要有一定的激励和惩罚措施,以促使节点考虑自身利益不会撒谎。

    参考文章一个区块链上不错的公用库(用来和互联网进行交互)

    相关文章

      网友评论

        本文标题:智能合约与外部世界交互

        本文链接:https://www.haomeiwen.com/subject/gollhftx.html