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

本文介绍如何在Solidity智能合约中使用Chainlink预言机获取外汇汇率数据。Chainlink预言机通过去中心化网络聚合高质量数据源,确保价格数据的安全性和准确性。文章详细解释了外汇喂价的概念及其在DeFi应用中的重要性,并提供了创建和测试智能合约的具体步骤。

[Pending-Audit] 在Solidity智能合约中获取外汇汇率数据

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

在这里插入图片描述

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

总结

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

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

关于本主题的更多内容

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

根据区块链网络中心化程度的不同,分化出3种不同应用场景下的区块链:(1)全网公开,无用户授权机制的区块链,称为公有链;(2)允许授权的节点加入网络,可根据权限查看信息,往往被用于机构间的区块链,称为联盟链或行业链;(3)所有网络中的节点都掌握在一家机构手中,称为私有链。联盟链和私有链也统称为许可链,公有链称为非许可链。  公有区块链系统 公有链中,任何节点无须任何许可便可随时加入或脱离网络。从最早的比特币系统人手介绍公有链系统的发展现状。 点对点电子现金系统:比特币与传统分布式系统的C/S , B/S或三层架构不同,比特币系统基于P2P网络,所有节点对等,且都运行同样的节点程序。节点程序总体上分为两部分:一部分是前台程序,包括钱包或图形化界面;另一部分是后台程序,包括挖矿、区块链管理、脚本引擎及网络管理等。区块链管理:涉及初始区块链下载、连接区块、断开区块、校验区块和保存区块,以及发现最长链条的顶区块。内存池管理:即交易池管理。节点将通过验证的交易放在一个交易池中,并准备好将其放入下一步挖到的区块中。邻接点管理:当一个新比特币节点初始启动时,它需要发现网络中的其他节点,并与至少一个节点连接。共识管理:比特币中的共识管理包括挖矿、区块验证和交易验证规则。比特币采用PoW共识机制,依赖机器进行哈希运算来获取记账权,同时每次达成共识需要全网共同参与运算,允许全网50%节点出错。密码模块:比特币采用RIMEMD和SHA-256算法及Base-58编码生成比特币地址。签名模块:比特币采用椭圆曲线secp256k1及数字签名算法ECDSA来实现数字签名并生成公钥。脚本引擎:比特币的脚本语言是一种基于堆栈的编程脚本,共有256个指令,是非图灵完备的运算平台,没有能力计算任意带复杂功能的任务。本课程从零到一带领你实践一个小型公链。 智能合约,Smart Contract,是一种旨在以信息化方式传播、验证或执行合同的计算机协议。 区块链领域的智能合约有以下特点:规则公开透明,合约内的规则以及数据对外部可见;所有交易公开可见,不会存在任何虚假或者隐藏的交易。 所以我们常说区块链技术具有“公开透明”“不可篡改”的特点,这些其实都是智能合约赋予区块链的。 程序员的世界里一致有个认知:相较于程序和机器,人更加不可控。人会作恶,但是代码并不会主观主动作恶。 而传统的契约行为,都是由人来制定规则,由人去执行。当然,遇到边界问题或者异常,也是由人去做界定。 但有了智能合约之后,这些就变得不一样了。 开发者通过智能合约去制定一套规则,然后发布到线上,人与智能合约进行交互,由机器去完成业务的部分,这样就规避了由人来做执行时可能造成的作弊行为。 静态类型的编程语言——Solidity,是以太坊的智能合约实现的编程语言,运行在以太坊的虚拟机 Ethereum Virtual Machine(EVM)上。 借由 Solidity,开发人员能够编写出可自我执行的应用程序,该程式可被视为一份具权威性且永不可悔改的交易合约,对已具备程式编辑能力的人而言,编写 Solidity 的难易度就如同编写一般的编程语言。 关于智能合约的应用,大名鼎鼎的 ICO 就是其中之一。除了 ICO 之外,与物联网结合赋能智能家居、投票等等,都是智能合约的应用场景。换言之,能够用机器去实现既定的规则、提高效率,且能够规避人类的作弊行为的场景,基本都是智能合约的应用场景。
评论 2
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值