+-
在Solidity智能合约中获取外汇汇率数据
首页 专栏 智能合约 文章详情
0

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

Chainlink 发布于 3 月 2 日

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

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

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

什么是外汇喂价?

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

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

<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测试网部分并选择一个外汇喂价。在本例中,我们将选择地址为0x28b0061f44E6A9780224AA61BEc8C3Fcb0d37de9的GBP/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聚合器合约中数据的纯读取操作。

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

总结

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

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

关于本主题的更多内容

How to Fetch the Current Price of Ethereum, Bitcoin, and Other Cryptocurrencies in Solidity The Top Ways for Smart Contract Developers to Use Chainlink Testing Chainlink Smart Contracts 如何在Solidity中获取以太坊、比特币和其他加密货币的当前价格 智能合约开发者使用Chainlink的主要方法总结 测试Chainlink智能合约

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

智能合约 Chainlink 预言机-Oracle
阅读 24 发布于 3 月 2 日
收藏
分享
本作品系原创, 采用《署名-非商业性使用-禁止演绎 4.0 国际》许可协议
avatar
Chainlink

全球领先的去中心化预言机网络

13 声望
2 粉丝
关注作者
0 条评论
得票 时间
提交评论
avatar
Chainlink

全球领先的去中心化预言机网络

13 声望
2 粉丝
关注作者
宣传栏
目录

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

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

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

什么是外汇喂价?

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

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

<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测试网部分并选择一个外汇喂价。在本例中,我们将选择地址为0x28b0061f44E6A9780224AA61BEc8C3Fcb0d37de9的GBP/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聚合器合约中数据的纯读取操作。

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

总结

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

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

关于本主题的更多内容

How to Fetch the Current Price of Ethereum, Bitcoin, and Other Cryptocurrencies in Solidity The Top Ways for Smart Contract Developers to Use Chainlink Testing Chainlink Smart Contracts 如何在Solidity中获取以太坊、比特币和其他加密货币的当前价格 智能合约开发者使用Chainlink的主要方法总结 测试Chainlink智能合约

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