关于区块链:如何在Solidity中获取ETHBTC和其他加密货币的当前价格

3次阅读

共计 3064 个字符,预计需要花费 8 分钟才能阅读完成。

原文链接:https://blog.chain.link/fetch-current-crypto-price-data-solidity/
原文题目:_How to Fetch the Current Price of Ethereum, Bitcoin, and Other Cryptocurrencies in Solidity_
原文作者:Harry Papacharissiou

在 Solidity 智能合约中获取价格数据是 DeFi 利用的常见需要。在 Solidity 中为了获取 ETH,BTC 或者其余加密货币的价格,你能够通过上面两种形式之一实现:

  • 应用 Chainlink 的喂价获取价格数据
  • 通过 Chainlink 预言机应用内部 API 获取价格数据

在本技术教程中,咱们将具体解说这两种办法,并分享代码案例帮忙你构建、部署并测试智能合约。首先,咱们疾速理解一下为智能合约提供内部数据时,数据品质和端到端去中心化的重要性。

智能合约对精确、牢靠的价格数据的需要

往年 DeFi 协定呈爆发式增长,DeFi 的总锁定价值从一月份 6.8 亿美金激增到当初的 140 亿美金。这些 DeFi 协定依赖内部价格数据作为数据源,因为区块链不能在本地间接拜访内部数据。此外这些利用须要提供数据保障来爱护利用免遭破绽利用,如价格预言机攻打等攻打。

Chainlink 喂价可能升高这些攻打的危险,实现办法是提供聚合自多种高质量数据提供商的数据,并通过 Chainlink 网络上的去中心化预言机将数据输出到链上。Chainlink 的去中心化预言机机制能确保最终的价格数据反映宽泛的市场信息笼罩,这意味着最终的价格数据是在汇总整个市场上各种不同的价格数据之后确定的,而不只是一小部分信息,同时也会思考到其余因素,如成交量和流动性等。

当初咱们了解了 Solidity 智能合约对精确、牢靠的价格数据的需要以及 Chainlink 喂价预言机所表演的重要角色,上面咱们将具体解读应用 Chainlink 喂价获取最新的以太坊价格数据的案例。上面的步骤也能利用到比特币以及其余加密货币。

在以太坊上应用 Chainlink 喂价

Chainlink 喂价应用多种高质量的数据输出,并通过 Chainlink 预言机的去中心化网络聚合这些数据,将价格数据输出到参考合约中,这些数据后果会在聚合器(Aggregator)智能合约中聚合成为最新的价格数据作为可信答案。应用多种节点聚合的多种数据源,咱们可能确保咱们的价格数据达到最高品质,并且不会蒙受破绽利用或者价格预言机攻打。

创立智能合约

第一步是获取测试网的 ETH 作为智能合约的 gas 费。在取得一些 ETH 后,构建一个用上 Chainlink 喂价的智能合约的最简略的形式是从规范的价格消费者合约开始。这是用于启动对 Chainlink 喂价申请的根本合约。这部分基于演示目标,咱们将应用曾经定义在规范的价格消费者合约中的 ETH/USD 喂价,然而咱们将具体解释这部分的代码,便于你理解它的工作原理。

首先,咱们能够看到 AggregatorV3Interface 合约接口被导入。这样咱们的智能合约就能够援用部署在 Kovan 测试网络的喂价合约。接着,咱们创立一个合约实例并保留到本地变量中。

import "https://github.com/smartcontractkit/chainlink/blob/master/evm-contracts/src/v0.6/interfaces/AggregatorV3Interface.sol";
AggregatorV3Interface internal priceFeed;

接下来,咱们能够看到喂价参考合约在构造函数中被初始化。Kovan 测试网上的 ETH/USD 喂价参考合约部署在地址为_0x9326BFA02ADD2366b30bacB125260Af641031331_上。

priceFeed = AggregatorV3Interface(0x9326BFA02ADD2366b30bacB125260Af641031331);

而后咱们看到一个曾经定义好的函数用于从喂价聚合合约中获取最新的价格数据,该合约在下面提到的构造函数中实例化。为了获取价格,咱们定义一个新的函数从聚合器(Aggregator)合约中调用 latestRoundData 函数。这是返回聚合器(Aggregator)合约以后状态的函数,在本例中,咱们取出以后价格并将其返回到生产函数中。

function getLatestPrice() public view returns (int) {
        (
            uint80 roundID, 
            int price,
            uint startedAt,
            uint timeStamp,
            uint80 answeredInRound
        ) = priceFeed.latestRoundData();
        return price;
    }

部署和测试智能合约

当初咱们筹备部署和测试咱们的合约。在 Remix 中编译合约,而后在“部署”选项上,将环境更改为“Injected Web3”,并确保上面的钱包地址是你的 MetaMask 钱包中蕴含后面取得 ETH 的钱包地址,点击部署按钮,而后依照步骤操作即可。最终后果是你将智能合约部署到了 Kovan 测试网。须要记录一下通过 Remix 控制台中的事务输入记录的已部署的合约地址。

部署后,咱们只须要执行“getLatestPrice”函数。后果应该是该函数从 ETH/USD 聚合器(Aggregator)合约返回的最新价格,而后能够在咱们的智能合约中链上调用这个数据。留神咱们不须要为申请发送任何 LINK 代币,也不应用任何 ETH,该交易纯正是读取链上 ETH-USD 聚合器(Aggregator)合约中的数据。


ETH/USD 喂价后果

在 Solidity 中获取其余价格数据

Chainlink 喂价提供了大量的位于头部的 DeFi 价格对的价格数据。如果你须要在你的智能合约中获取的资产价格数据没有被现有的喂价合约笼罩到,比方特定的股票的价格,你能够自定义 Chainlink 预言机以调用任何的内部 API。应用 Chainlink 预言机获取内部价格数据的最简略办法是从规范 Chainlink 的 APIConsumer 合约开始。这是通过 Chainlink 预言机来启动对外部数据申请的标准化合约。

实现创立 APIConsumer 合约后,就能够去找到想要从中获取价格数据的 API。如,你能够应用 Alpha Vantage API 查找 IBM 股票的以后价格。

有了 API 端点后,你只须要在合约中设置正确的参数并将申请发送给 Chainlink 预言机。能够在 Chainlink 文档中找到无关此内容以及如何应用规范 APIConsumer 合约的更多信息。

请记住在生产环境中,你将会心愿把这种应用办法去中心化,或者从喂价合约自身获取此特定数据。

总结

Chainlink 喂价提供了一种牢靠的办法来获取高质量的比特币、以太坊以及其余加密货币价格数据到 Solidity 智能合约中。此外,Chainlink 的预言机框架还提供了能够疾速、轻松地获取其余价格数据的灵活性,如股票、商品和其余资产的价格数据。

如果你是开发者,想要疾速为你的利用连贯到 Chainlink 的价格参考数据,拜访开发者文档,并接入 Discord 技术探讨。
English channels
Website | Twitter | Reddit | YouTube | Telegram | Events | GitHub | Price Feeds | DeFi
中文渠道
中武官网 | 知乎 | SegmentFault | CSDN |

正文完
 0