智能合约本身没有访问区块链外部数据的能力。而外部的数据对于大多数智能合约应用场景来说都是至关重要的,所以这一功能的缺失限制了智能合约的更进一步的发展。比如涉及金融,供应链,保险,安全等诸多领域的智能合约都依赖于外部事件。智能合约无法获取关键的链下事件信息,比如价格变动,物流日期,以及支付能力。没有这些外部的信息,大多数智能合约的应用都是没有实际应用价值的。
为什么智能合约无法自主获取外部数据?
因为区块链网络是确定性的。智能合约在区块链这种去中心化的,自我调节的基础设施上运行,其中的任何信息都是确定的,可验证的。区块链可以正常运行,必须在各个参与方之间达成共识。为了实现这个目标,人们设计了*共识机制*,比如工作量证明,权益证明,行动证明。这些共识机制使得区块链这一分布式的系统形成一个统一的状态。有了这些共识机制,就可以验证网络上的交易,确定统一公开账本的状态。这种设计允许区块链以公平和安全的方式运行,而无需使用集中式身份验证。因此,区块链整体上是*确定性状态机*。但是区块链外部的数据是非确定性的,因为从某种意义上说,它是通过区块链的历史无法验证的值。外部数据会受各种因素的影响动态变化。价格的频繁变化,公司实时更新物流信息,物流变化的更新,等等。因为这些信息是不确定的,智能合约没有一种方式可以验证这些数据进而达成共识。因此,无法确认为真实的数据对区块链没有任何意义。
如何把外部数据提供给智能合约?
通过区块链中间件,特别是安全可靠的预言机可以实现。预言机扮演者数据代理人的角色,连接外部数据与智能合约。它充当区块链数据API之间的中间层,将数据转换为区块链可以读取的格式。此外,预言机还负责验证外部数据的正确性,因此可信赖的来源至关重要。
但是,在中心化的预言机服务中,预言机会有被攻击的可能性,这导致智能合约丢失了确定性和可靠性这一最关键的特性,从而使大多数基于现实场景的智能合约用例的不可用。如何解决这一问题呢,答案是去中心化的预言机网络。或者说是Chainlink。Chainlink通过提供与智能合约开发者的安全性和可靠性相匹配的去中心化的预言机网络来解决联通性问题。通过外部适配器,区块链可以安全地与chainlinkedAPI连接。开发人员可以方便地将他们自己的智能合约与预先编写的ChainlinkAPI套件连进行连接,从而建立一个链下的预言机连接。