使用Chainlink预言机,十分钟开发一个DeFi项目

本文介绍了如何使用Chainlink预言机在十分钟内开发一个DeFi项目,涵盖了从创建Truffle项目、安装Chainlink库、部署合约到Ropsten测试网络,以及通过API或价格参考数据合约获取价格信息的全过程。Chainlink提供可靠的价格数据,简化了DeFi项目的开发,使得开发者能够专注于核心业务逻辑。

Chainlink 价格参考数据合约是可以在智能合约网络中值得依赖的真实价格数据的链上参考点。这些合约由多个 Chainlink 节点定时更新,提供高精度,高频率,可定制化的 DeFi 价格参考数据,可以方便的为 DeFi 项目的开发提供开箱即用的稳定基础设施。本文我们会教你如何使用这些合约。除此之外,Chainlink 还提供了通过获取链下数据的方式,从用户指定的 API 获取价格数据。我们下面就介绍一下这两种方式。

直接从 API 获取价格

首先我们先简单回顾一下,一般情况下我们如何使用 Chainlink 来获取真实世界中的价格数据。我们知道,价格是通过交易来产生的,所以最直接的方式是通过交易所提供的接口来获取某个交易所的某个加密货币的价格。但是这只是来自于一个交易所的数据,可能会有个体性的误差。有一些加密货币行情网站,他们会汇总多个交易所的数据,或者根据自己的指标来计算数据,得到一个偏离度比较小也就是更真实的数据。所以我们就采用从行情网站的接口获得数据,然后通过提交交易,将价格数据送到智能合约中。

我们选择的行情网站的 cryptocompare,它提供了一些非常好用的 API 来提供各类交易市场上的信息。我们就以它文档上给出的一个 API 来作为例子:
https://minapi.cryptocompare.com/data/pricefsym=BTC&tsyms=USD,JPY,EUR

访问这个接口,会返回一个 JSON 对象,提供当前时间,BTC 分别相对于美元、日元、欧元的价格。

{
   
   
	"USD": 9460.99,
	"JPY": 1018295.17,
	"EUR": 8640.8
}

1 创建 truffle 项目

mkdir MyChainlinkedContract
cd MyChainlinkedContract
truffle init 

如果您还没有安装 truffle suite, 可以通过 npm install truffle -g 来安装。

2 安装 Chainlink 开发库

npm install @chainlink/contracts --save

3 创建用户合约

您可以用您喜欢的编辑器工具,比如 VS Code, 打开项目目录。目录结构如下:

.
├── contracts
│   └── Migrations.sol
├── migrations
│   └── 1_initial_migration.js
├── test
└── truffle-config.js

我们在 contracts 目录中新建一个合约文件 MyContract.sol,在文件中新建一个合约,继承自 ChainlinkClient 合约,并设置构造函数,参数分别是:

1 _link 所使用网络环境下的 LINK token 地址
2 _oracle 所使用的 Oracle 合约地址。如果您不知道选择什么哪个 Oracle,可以前往 Chainlink 市场 market.link 上选择。
3 _specId 即 jobId,用于完成规范命令序列的任务 ID,同样可在 Chainlink 市场 market.link 上对应的 Oracle 下选择。

pragma solidity ^0.6.0;

import "@chainlink/contracts/src/v0.6/ChainlinkClient.sol";

// MyContract 通过继承 Chainlinked 合约获得了创建Chainlink请求的功能
contract MyContract is ChainlinkClient {
   
   
  constructor(address _link, address _oracle, bytes32 _specId) public {
   
   
    setChainlinkToken(_link);
    setChainlinkOracle(_oracle);
    specId = _specId;
  }
  
	bytes32 internal specId;
}

接下来我们就可以编写创建 Chainlink 请求的代码

  function requestEthereumPrice(string memory _currency, uint256 _payment) public {
   
   
    requestEthereumPriceByCallback(_currency, _payment, address(this));
  }

  function requestEthereumPriceByCallback(string memory _currency, uint256 _payment, address _callback) public {
   
   
    Chainlink.Request memory req = buildChainlinkRequest(specId, _callback, this.fulfill.selector);
    req.add("get", "https://min-api.cryptocompare.com/data/price?fsym=BTC&tsyms=USD,EUR,JPY");
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值