解密Chainlink: 预言机技术如何连接区块链与现实世界

robot
摘要生成中

预言机技术解析:以 Chainlink 为例

预言机是区块链领域中的关键基础设施,它能为智能合约提供区块链外部的数据信息。作为连接智能合约和外部世界的中间件,预言机的主要功能是为区块链上的智能合约提供所需的外部数据。

预言机详解系列之 Chainlink(上)

举个例子,假设我们在以太坊网络上创建了一个需要某天原油交易量数据的智能合约。由于智能合约本身无法直接获取这种链下的真实世界数据,此时就需要通过预言机来实现。具体流程是:智能合约先将所需日期的原油交易量写入事件日志,然后链下会启动一个进程监控并订阅这个事件日志。当监听到交易中的请求时,该进程会通过提交链上交易,调用合约的相关方法,将指定日期的原油交易量信息上传到智能合约中。

预言机详解系列之 Chainlink(上)

在众多预言机项目中,Chainlink 以其最大的市场占有率脱颖而出。Chainlink 是一个去中心化的预言机项目,旨在以最安全的方式向区块链提供现实世界中产生的数据。它在基本预言机原理的基础上,围绕 LINK token 构建了一个通过经济激励形成良性循环的生态系统。Chainlink 预言机需要通过 LINK token 的转账来触发,而 LINK 是以太坊网络上的 ERC677 合约。基于 LINK ERC677 token 完成的预言机功能,属于请求/响应模式。

预言机详解系列之 Chainlink(上)

ERC677 标准在 ERC20 的基础上增加了 transferAndCall 方法,将支付和服务请求合二为一,更好地满足了预言机业务场景的需求。当用户进行 transferAndCall 转账时,除了 ERC20 的转账外,还会判断接收地址是否为合约地址,如果是则调用该地址的 onTokenTransfer 方法。

预言机详解系列之 Chainlink(上)

在请求预言机服务之前,用户需要先确定该预言机是否可信,因为预言机为消费者提供服务前需要先付款。预言机的可信度可以根据多个因素进行划分,如数据源可靠性、节点信誉等。

预言机详解系列之 Chainlink(上)

当预言机消费者使用 transferAndCall 方法支付费用并请求服务时,预言机合约的 onTokenTransfer 方法会进行一系列安全检查。检查通过后,会通过 delegatecall 调用当前 oracle 合约的 oracleRequest 方法。该方法会生成唯一的 requestId,设置过期时间,并发出包含请求数据的 OracleRequest 事件。

预言机详解系列之 Chainlink(上)

链下节点会监听这些事件,解析出请求的具体信息,通过网络 API 调用获取所需数据。然后通过提交交易的方式,调用 Oracle 合约的 fulfillOracleRequest 方法,将数据提交到链上。该方法在进行一系列验证后,会将结果通过之前记录的回调地址和函数返回给消费者合约。

预言机详解系列之 Chainlink(上)

对于开发者来说,如果只想使用已有的币对价格,而不需要自己指定 API URL,Chainlink 也提供了更简便的方式。每个交易对都有一个单独的 Price Feed(Aggregator),实际上是一个 AggregatorProxy。开发者可以直接调用这些 Proxy 合约的方法获取价格数据,无需自行处理 API 请求和响应过程。

预言机详解系列之 Chainlink(上)

总的来说,Chainlink 通过巧妙的设计,为区块链世界提供了一个安全可靠的数据桥梁,极大地扩展了智能合约的应用场景。随着区块链技术的不断发展,预言机技术也将继续演进,为更多创新应用提供有力支持。

预言机详解系列之 Chainlink(上)

此页面可能包含第三方内容,仅供参考(非陈述/保证),不应被视为 Gate 认可其观点表述,也不得被视为财务或专业建议。详见声明
  • 赞赏
  • 5
  • 分享
评论
0/400
合约自动投降vip
· 07-10 14:06
预言机老早就买了亏麻了
回复0
BlockImpostervip
· 07-10 01:31
link yyds要起飞了
回复0
链上吃瓜群众vip
· 07-08 09:56
link上新高了吗老铁们
回复0
GateUser-44a00d6cvip
· 07-08 09:55
主动应答数据永远靠谱
回复0
心若草莓冰vip
· 07-08 09:32
预言就是钱途无量
回复0
交易,随时随地
qrCode
扫码下载 Gate APP
社群列表
简体中文
  • 简体中文
  • English
  • Tiếng Việt
  • 繁體中文
  • Español
  • Русский
  • Français (Afrique)
  • Português (Portugal)
  • Bahasa Indonesia
  • 日本語
  • بالعربية
  • Українська
  • Português (Brasil)