Ethereum新手寻求Chainlink Outbound Oracle的Solidity示例代码指导
Chainlink Outbound Oracle Solidity 示例代码
Outbound Oracle 指的是由智能合约主动发起请求,触发 Chainlink 节点执行链下任务(如调用外部 API、完成特定计算)并将结果返回链上的模式,和被动接收数据的 Inbound(如价格喂价)形成区别。
以下是一个简单的示例,实现合约发起请求获取外部API返回的指定数据:
// SPDX-License-Identifier: MIT pragma solidity ^0.8.7; // 导入Chainlink核心合约 import "@chainlink/contracts/src/v0.8/ChainlinkClient.sol"; contract OutboundOracleExample is ChainlinkClient { // 存储链下任务返回的结果 uint256 public apiResult; // Chainlink节点地址(需替换为实际可用节点) address private immutable oracle; // Job ID(需匹配节点上的对应任务) bytes32 private immutable jobId; // 单次请求支付的LINK数量 uint256 private immutable fee; constructor() { // 设置LINK代币地址(以Sepolia测试网为例) setChainlinkToken(0x779877A7B0D9E8603169DdbD7836e478b4624789); oracle = 0xYourChainlinkNodeAddress; // 替换为实际节点地址 jobId = "0xYourJobId"; // 替换为对应任务的Job ID fee = 0.1 * 10 ** 18; // 0.1 LINK } // 发起Chainlink链下任务请求 function requestExternalData() public { // 构建请求,指定回调地址和回调函数 Chainlink.Request memory req = buildChainlinkRequest(jobId, address(this), this.fulfill.selector); // 向请求中添加API参数(示例为调用返回数字的公开API) req.add("get", "https://api.example.com/data/value"); req.add("path", "data.value"); // 指定API返回JSON中的数据路径 // 发送请求并支付LINK费用 sendChainlinkRequestTo(oracle, req, fee); } // 回调函数,接收Chainlink节点返回的结果 function fulfill(bytes32 _requestId, uint256 _result) public recordChainlinkFulfillment(_requestId) { apiResult = _result; } // 提取合约中剩余的LINK(仅合约调用者可执行,可选) function withdrawLink() public { LinkTokenInterface linkToken = LinkTokenInterface(chainlinkTokenAddress()); require(linkToken.transfer(msg.sender, linkToken.balanceOf(address(this))), "Transfer failed"); } }
核心逻辑说明
- ChainlinkClient:封装了发起请求、验证回调的基础逻辑,简化开发流程。
- buildChainlinkRequest:组装请求参数,绑定任务ID、回调地址与回调函数。
- sendChainlinkRequestTo:将请求发送至指定Chainlink节点,并完成LINK费用转账。
- recordChainlinkFulfillment:修饰回调函数,确保仅发起请求的Chainlink节点能调用,防止恶意篡改结果。
实操注意事项
- 合约需提前存入足够的LINK代币,用于支付链下任务的请求费用。
- 需替换代码中的
oracle地址和jobId为实际可用的Chainlink节点信息,节点的Job需支持你要执行的链下操作(如API调用)。 - 测试阶段建议使用Sepolia等测试网,避免主网资金损失。
内容的提问来源于stack exchange,提问作者learner
相关产品推荐
相关产品推荐

