# 预言机:连接区块链与现实世界的桥梁在区块链技术中,预言机扮演着至关重要的基础设施角色。它是一种能够为链上智能合约提供外部信息的系统,充当了区块链与外部世界之间的中间件。预言机的主要功能是为区块链上的智能合约提供所需的外部数据。举个例子,假设我们在以太坊网络上创建了一个需要获取某天原油交易量数据的智能合约。由于智能合约本身无法直接获取这种链下的现实世界数据,因此需要通过预言机来实现。在这种情况下,智能合约会将所需的原油交易量数据写入事件日志。随后,链下会启动一个进程来监控并订阅这个事件日志。当检测到交易中的请求时,该进程会通过提交链上交易,调用合约的相关方法,将指定日期的原油交易量信息上传到智能合约中。## Chainlink:区块链预言机的领军者在预言机领域,Chainlink无疑是市场占有率最大的项目。作为一个去中心化的预言机解决方案,Chainlink的目标是以最安全的方式向区块链提供现实世界中产生的数据。在基本预言机原理的基础上,Chainlink围绕LINK代币建立了一个通过经济激励形成良性循环的生态系统。Chainlink预言机的触发需要通过LINK代币的转账来实现。LINK是基于以太坊网络的ERC677合约代币。基于LINK ERC677代币完成的预言机功能属于请求/响应模式。### ERC677代币中的transferAndCallERC677标准是Chainlink为适应预言机服务场景而提出的。它在标准ERC20的基础上增加了transferAndCall方法,将支付和服务请求合二为一,满足了预言机业务场景的需求。当用户使用transferAndCall进行转账时,除了常规的ERC20转账外,还会判断接收地址是否为合约地址。如果是,则调用该地址的onTokenTransfer方法。需要注意的是,在请求预言机服务之前,用户应当先确认该预言机的可信度,因为预言机服务需要预先付款。### 链上oracle请求流程当预言机消费者使用transferAndCall方法支付费用并请求服务时,预言机合约中的onTokenTransfer方法会首先进行一系列安全检查。这包括验证转账是否为LINK代币、检查数据长度是否超过限制、验证数据是否包含正确的功能选择器等。通过安全检查后,合约会生成一个唯一的requestId,并设置请求的过期时间。最后,合约会发出一个OracleRequest事件,该事件包含了请求的详细数据。### 链下节点响应机制链下节点在接收到OracleRequest事件后,会解析出请求的具体信息,通过网络API调用获取所需数据。随后,节点会调用fulfillOracleRequest方法,将数据提交到链上。这个方法会进行一系列验证,包括检查调用者是否授权、验证请求的有效性等。验证通过后,合约会记录可提取的代币数额,并从commitments映射中删除该requestId。最后,合约会调用请求者合约的回调函数,将数据返回给消费者。### 价格预言机的实际应用对于开发者来说,如果只需要使用已有的币对价格数据,可以直接使用Chainlink提供的Price Feed接口。每个交易对都有一个单独的Price Feed(也称为Aggregator),实际上是一个AggregatorProxy合约。这些接口通常提供以下几个查询方法:- decimals():返回价格数据的精度位数- description():返回交易对名称- version():标识Proxy指向的Aggregator类型- getRoundData(_roundId):获取特定轮次的价格数据- latestRoundData():获取最新的价格数据在大多数应用场景中,合约可能只需要读取最新价格,即调用latestRoundData()方法。返回的answer参数即为最新价格。值得注意的是,大部分应用读取的token价格都是以USD为计价单位的。在这种情况下,精度通常统一为8位,这简化了不同token间的精度处理问题。
预言机如何成为区块链与现实世界的数据桥梁
预言机:连接区块链与现实世界的桥梁
在区块链技术中,预言机扮演着至关重要的基础设施角色。它是一种能够为链上智能合约提供外部信息的系统,充当了区块链与外部世界之间的中间件。预言机的主要功能是为区块链上的智能合约提供所需的外部数据。
举个例子,假设我们在以太坊网络上创建了一个需要获取某天原油交易量数据的智能合约。由于智能合约本身无法直接获取这种链下的现实世界数据,因此需要通过预言机来实现。在这种情况下,智能合约会将所需的原油交易量数据写入事件日志。随后,链下会启动一个进程来监控并订阅这个事件日志。当检测到交易中的请求时,该进程会通过提交链上交易,调用合约的相关方法,将指定日期的原油交易量信息上传到智能合约中。
Chainlink:区块链预言机的领军者
在预言机领域,Chainlink无疑是市场占有率最大的项目。作为一个去中心化的预言机解决方案,Chainlink的目标是以最安全的方式向区块链提供现实世界中产生的数据。在基本预言机原理的基础上,Chainlink围绕LINK代币建立了一个通过经济激励形成良性循环的生态系统。
Chainlink预言机的触发需要通过LINK代币的转账来实现。LINK是基于以太坊网络的ERC677合约代币。基于LINK ERC677代币完成的预言机功能属于请求/响应模式。
ERC677代币中的transferAndCall
ERC677标准是Chainlink为适应预言机服务场景而提出的。它在标准ERC20的基础上增加了transferAndCall方法,将支付和服务请求合二为一,满足了预言机业务场景的需求。
当用户使用transferAndCall进行转账时,除了常规的ERC20转账外,还会判断接收地址是否为合约地址。如果是,则调用该地址的onTokenTransfer方法。需要注意的是,在请求预言机服务之前,用户应当先确认该预言机的可信度,因为预言机服务需要预先付款。
链上oracle请求流程
当预言机消费者使用transferAndCall方法支付费用并请求服务时,预言机合约中的onTokenTransfer方法会首先进行一系列安全检查。这包括验证转账是否为LINK代币、检查数据长度是否超过限制、验证数据是否包含正确的功能选择器等。
通过安全检查后,合约会生成一个唯一的requestId,并设置请求的过期时间。最后,合约会发出一个OracleRequest事件,该事件包含了请求的详细数据。
链下节点响应机制
链下节点在接收到OracleRequest事件后,会解析出请求的具体信息,通过网络API调用获取所需数据。随后,节点会调用fulfillOracleRequest方法,将数据提交到链上。
这个方法会进行一系列验证,包括检查调用者是否授权、验证请求的有效性等。验证通过后,合约会记录可提取的代币数额,并从commitments映射中删除该requestId。最后,合约会调用请求者合约的回调函数,将数据返回给消费者。
价格预言机的实际应用
对于开发者来说,如果只需要使用已有的币对价格数据,可以直接使用Chainlink提供的Price Feed接口。每个交易对都有一个单独的Price Feed(也称为Aggregator),实际上是一个AggregatorProxy合约。
这些接口通常提供以下几个查询方法:
在大多数应用场景中,合约可能只需要读取最新价格,即调用latestRoundData()方法。返回的answer参数即为最新价格。
值得注意的是,大部分应用读取的token价格都是以USD为计价单位的。在这种情况下,精度通常统一为8位,这简化了不同token间的精度处理问题。