LOADING...
LOADING...
LOADING...
当前位置: 玩币族首页 > 区块链资讯 > 使用Chainlink预言机,十分钟开发一个DeFi项目(二)

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

2020-07-02 Chainlink 来源:区块链网络

part1:https://bihu.com/article/1049891692

价格参考数据 Reference Data

下面我们就来讲一下Chainlink 价格参考数据合约应该怎么来使用。

使用价格参考数据合约和上面的直接从链下获取的方式是有很打不同的,我们先来了解一下 Chainlink 的价格参考数据合约。

Chainlink 的价格参考数据是专门为 DeFi 项目设计的预言机,网址是 feeds.chain.link。Chainlink 的价格参考数据预言机网络极大提升了以太坊上 Dapp 数据的安全性和可靠性,而且大大加速了新 DeFi 产品成功上线的速度。Chainlink 在去中心化的预言机网络中提供价格参考数据,这是一个共享资源社区,并受到用户支持。用户使用这些预言机网络的成本要低于自己传输数据的成本,而且由于预言机网络是去中心化的,安全水平也会大幅提升。更多的信息可以参考这篇博文。

简单来说,Chainlink 价格参考数据提供的价格是在链上可以直接访问的,不需要通过我们指定 API 来手动获取。

1 新建项目

我们新建一个目录就叫RefereceData,然后用上面的的方式建立一个 truffle 项目:

mkdir RefereceData

cd RefereceData

truffle init

npm install @chainlink/contracts --save

2 新建用户合约文件

在constracts目录下新建一个ReferenceConsumer.sol文件,文件中需要引入聚合接口合约 AggregatorInterface:

import"@chainlink/contracts/src/v0.4/interfaces/AggregatorInterface.sol";

3 找到我们需要的参考数据合约地址

Chainlink 文档中给我们提供了非常多交易对的参考合约地址,不仅有主网的地址,还有 Ropsten、Rinkeby、Kovan 测试网的合约地址。

我们就选择 Ropsten 网络下的BTC/USD交易对的合约,地址为0x882906a758207FeA9F21e0bb7d2f24E561bd0981

4 配置参考合约地址

在合约中通过构造函数或者编写 setter 方法,配置好我们想要的参考合约的地址

构造函数方式:

AggregatorInterface internal ref;

constructor(address _aggregator) public {

ref = AggregatorInterface(_aggregator);

}

setter 方式:

AggregatorInterface internal ref;

function setReferenceContract(address _aggregator)

public

onlyOwner()

{

ref = AggregatorInterface(_aggregator);

}

5 使用参考合约获取价格数据

AggregatorInterface 接口给我们提供了 5 个方法供我们使用分别是:

latestAnswer()最新的聚合结果

latestTimestamp()最新一次聚合的时间戳

latestRound()最新一次聚合的轮次号

getAnswer(uint256 roundId)通过轮次号获取历史结果

getTimestamp(uint256 roundId)通过轮次号获取历史时间戳

返回的价格结果中,所有 USD 参考数据合约的结果值会乘以100000000,所有 ETH 参考数据合约的结果值会乘以1000000000000000000。

6 完整示例

我们分别就对这个几个方法做个包装就可以然后就可以获取到 BTC/USD 的价格啦。下面的一段完整的代码,大家可以在这个基础上,加入一些其他的业务逻辑,就可以创建一个 DeFi 项目啦。

pragma solidity ^0.4.24;

import "@chainlink/contracts/src/v0.4/interfaces/AggregatorInterface.sol";

contract ReferenceConsumer {

AggregatorInterface internal ref;

constructor(address _aggregator) public {

ref = AggregatorInterface(_aggregator);

}

function getLatestAnswer() public view returns (int256) {

return ref.latestAnswer();

}

function getLatestTimestamp() public view returns (uint256) {

return ref.latestTimestamp();

}

function getLatestRound() public view returns (uint256) {

return ref.getLatestRound();

}

function getPreviousAnswer(uint256 _back) public view returns (int256) {

uint256 latest = ref.latestRound();

require(_back <= latest, "Not enough history");

return ref.getAnswer(latest - _back);

}

function getPreviousTimestamp(uint256 _back) public view returns (uint256) {

uint256 latest = ref.latestRound();

require(_back <= latest, "Not enough history");

return ref.getTimestamp(latest - _back);

}

}

7 编写测试脚本调用合约

在 Migrations 目录下新建一个文件2_referenceconsumer_migration.js,将我们上面查到的 BTC/USD 的参考合约地址在部署时传入构造函数中:

const ReferenceConsumer = artifacts.require("ReferenceConsumer");

module.exports = function(deployer) {

deployer.deploy(ReferenceConsumer, "0x882906a758207FeA9F21e0bb7d2f24E561bd0981");

};

然后部署到 Ropsten 网络上。

在 scripts 目录下新建一个测试文件,比如叫getdata.js

const ReferenceConsumer = artifacts.require('ReferenceConsumer')

module.exports = async callback => {

const rc = await ReferenceConsumer.deployed()

const data = await rc.getLatestAnswer()

callback(console.log(parseInt(data)))

}

通过以下命令执行该测试脚本:

npx truffle exec scripts/getdata.js --network ropsten

一切顺利的话就会在控制台得到920089000000的结果,这就是当前 BTC 的价格,即9200.89。

有了 Chainlink 的价格参考数据合约,DeFi 的开发变得非常简单了,开发者只需要关注自己的金融方面的业务逻辑即可。https://feeds.chain.link网站上列出了非常多的使用 Chainlink 价格参考数据的 DeFi 项目,他们都是开源的,我们也可以去他们的 GitHub 页面,去学习如何用 Chainlink 来设计一个 DeFi 项目。

Chainlink官方渠道

QQ群: 6135525

微博:https://weibo.com/chainlinkofficial

币乎:https://bihu.com/people/1869894547

合作联系:[email protected]

GitHub:https://github.com/smartcontractkit/chainlink

Discord: https://discord.gg/aSK4zew

Twitter:https://twitter.com/chainlinkofficial

Telegram:https://t.me/chainlinkofficial

—-

编译者/作者:Chainlink

玩币族申明:玩币族作为开放的资讯翻译/分享平台,所提供的所有资讯仅代表作者个人观点,与玩币族平台立场无关,且不构成任何投资理财建议。文章版权归原作者所有。

LOADING...
LOADING...