在Solidity智能合约中获取外汇汇率数据

  • Chainlink
  • 更新于 2021-03-02 13:38
  • 阅读 1086

原文链接:https://docs.google.com/document/d/1lsUjd1Ps55MMrbHm_Mb5RyWQl787wk59Iw80380ILCA/mobilebasic 原文标题:Fetch Foreign Exchange Rates in Solidity Smart Contracts 原文作者:Chainlink

image.png

价格数据是各种金融工具的核心,对去中心化金融(DeFi)应用来说尤其如此。外汇(FX)汇率数据在DeFi世界里对于创建期权、期货和其他复杂的衍生品特别重要。除了能够获取[安全的加密货币价格数据](),Chainlink喂价还可用于在智能合约中获取高质量的外汇价格数据。

在本技术教程中,我们将详细介绍如何在Solidity智能合约中使用Chainlink FX喂价。首先,我们快速浏览一下什么是外汇喂价,以及使用它们可以创建哪些类型的衍生品。

什么是外汇喂价?

外汇市场是全球货币交易市场,日交易量接近7万亿美元。这个市场决定着每一种货币的汇率,包括以当前或确定的价格买卖和交换货币的各个方面的内容。由于这个市场的容量大和受欢迎程度高,许多DeFi应用会使用Chainlink外汇喂价,来确保外汇数据能以安全和去中心化的方式交付到其衍生品合约中,而不会出现任何单点故障。

Synthetix交易所是一家DeFi衍生品交易所,它使用Chainlink预言机提供的多个外汇喂价,以确保即使在高波动时期,也能根据其标的资产的真实市场价格进行防篡改的、准确的估值。

image.png

<Synthetix Exchange如何使用Chainlink预言机获取各种外汇货币的实时市场数据。>

<ALT:Synthetix Exchange synths由Chainlink网络驱动。> _

如何使用Chainlink外汇喂价?

Chainlink Price Feeds使用数百个高质量数据源,并通过Chainlink预言机的去中心化网络将其聚合,其中Chainlink预言机会将价格数据输入到参考合约,在参考合约中,结果会在Aggregator合约中再次聚合并作为最新的、可信的答案。通过使用由去中心化节点网络聚合的大量数据源,Chainlink预言机确保价格数据具有最高质量,并且不易受到漏洞利用或价格预言机攻击

创建智能合约

为了在智能合约中使用Chainlink外汇喂价,首先需要获取测试网ETH代币在智能合约中用作gas。一旦你有了一些ETH代币后,最简单的开始建立一个使用Chainlink外汇喂价的智能合约的方法是部署价格消费者合约。这是一个基本合约,用于启动对Chainlink喂价的请求。首先,我们需要导入AggregatorV3Interface合约接口,它允许我们的智能合约引用Kovan测试网的链上喂价。

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

然后在局部变量中创建它的实例。

AggregatorV3Interface internal priceFeed;

喂价引用合约构造函数中,我们可以初始化我们需要用到的喂价合约的地址。通过浏览文档中的以太坊喂价信息页面,我们可以找到Chainlink当前提供的所有喂价合约地址。导航到页面上的Kovan测试网部分并选择一个外汇喂价。在本例中,我们将选择地址为0x28b0061f44E6A9780224AA61BEc8C3Fcb0d37de9GBP/USD喂价合约。

priceFeed = AggregatorV3Interface(0x28b0061f44E6A9780224AA61BEc8C3Fcb0d37de9);

合约中已经定义了一个名为getLatestPrice的函数,用于从上述构造函数中实例化的喂价聚合器合约获取最新价格。为此,定义了一个新函数,从聚合器合约中调用latestRoundData函数。这个函数返回聚合器合约的当前状态,在本例中,我们取当前价格并在我们的消费函数中返回它的值。

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”函数。结果应该是函数从GBP/USD聚合器合约返回最新价格,然后可以在我们的智能合约中链上使用。请注意,我们不需要为请求发送任何LINK代币,而且我们甚至也没有使用任何ETH代币,因为该交易是对链上GBP-USD聚合器合约中数据的纯读取操作。

image.png

<GBP/USD喂价结果> <ALT:GBP/USD喂价结果>

总结

Chainlink喂价提供了一种将高质量外汇价格数据提供给Solidity智能合约的可靠方法。此外,Chainlink的预言机框架还提供了快速方便地获取股票、加密货币、商品和许多其他资产类型的数据的灵活性。

如果你是一名开发者,并且希望快速将你的应用连接到Chainlink喂价,请访问开发者文档并加入Discord中的技术讨论。

关于本主题的更多内容

Website | Twitter | Discord | Reddit | YouTube | Telegram | Events | GitHub | Price Feeds | DeFi

点赞 0
收藏 0
分享
本文参与登链社区写作激励计划 ,好文好收益,欢迎正在阅读的你也加入。

0 条评论

请先 登录 后评论
Chainlink
Chainlink
顶尖的智能合约去中心化预言机网络解决方案 https://chain.link/