原文题目:《Using Chainlink Oracles on Matic Network》
原文地址:https://blog.chain.link/matic-defi-price-feeds/
原文作者:Harry Papacharissiou

自从今年初Matic网络上线后,得力于它的平安和可扩大的基础设施以及即时交易个性,它疾速成为以太坊开发者中受欢迎的Layer 2解决方案。Matic的高性能,低手续费的基础设施为DeFi应用程序促成大规模利用提供了一个可行的平台。与此类似,在区块链预言机畛域,Chainlink曾经成为DeFi协定优先选择的预言机解决方案,Chainlink的喂价(Price Feeds)当初正在守护着价值数亿美元的价值资产。在本篇技术文章中,咱们将向你展现如何在Matic的DeFi利用中应用Chainlink的预言机,以及如何应用Chainlink的喂价来给予利用拜访高质量的、防篡改的数据,这些数据不易蒙受诸如预言机破绽和闪电攻打等危险。

对可扩大和平安DeFi协定的需要

本年度曾经见证了DeFi协定的大暴发,DeFi的总价值锁定(TVL)从一月份的6.8亿美元快速增长到当初的超过140亿美元。随着TVL的增长,链上交易数量也达到了新的程度,但同时也引起了一些不必要的关注,作恶者们为了本身的利益开始利用这些协定破绽。

因为DeFi的增长带来的链上交易数量程度的晋升使得以太坊的性能变得拥挤,这也归因于以太坊区块链本身的可扩展性的限度和吞吐量低的问题。这引起了一系列困扰用户应用DeFi协定体验和简短交易工夫的关联反馈。(P.S. 拥挤会导致昂扬的gas费,否则矿工不会打包;同时交易确认工夫缩短,除非给更高的gas费)

交易速度迟缓以及交易费用昂扬是妨碍DeFi跨入支流的最重要的两个限度因素。诸如Matic这种Layer 2网络可能解锁下一阶段的DeFi的增长,这得益于它的加强的可扩展性,高吞吐量以及低成本的交易等性质。Matic侧链也是可组合的,并且齐全与EVM兼容。DeFi的一大外围价值在于它的无需许可的可组合性,Matic为这些寻求构建各种有价值的DeFi利用的开发者们提供了一个极具吸引力的抉择,这些DeFi利用可扩大,能提供低成本交易,能确保无需许可的组合性,并提供无缝的用户体验。

然而,这些DeFi利用依然须要拜访高质量的可信的内部数据。正如咱们在本年度屡次看到的那样,DeFi协定可能会蒙受多种形式的攻打,如价格预言机攻打等,作恶者联合闪电贷和低质量的预言机来操纵市场来达到对他们无利的场面,侵害的是其余用户的利益。

Chainlink的喂价机制升高了DeFi利用容易蒙受这些攻打的危险,采纳的形式是提供多种高质量的数据提供方的汇总数据,这些数据由Chainlink网络上的去中心化的预言机来公布上链。Chainlink的去中心化架构以及宽泛的高质量数据源确保了最终价格反映的是宽泛的市场的覆盖范围,这事实上意味着此价格是聚合了整个市场上一系列不同的价格后确定的,而不只是其中的一个小小的子集。

当初咱们了解了在Matic网络上构建DeFi协定的劣势,以及Chainlink预言机和喂价机制在其中表演的重要角色,咱们将展现在Matic网络上构建DeFi利用时应用Chainlink喂价的案例。

在Matic网络上应用Chainlink喂价机制

Chainlink的喂价机制应用多种高质量的数据输出,并将它们与Chainlink预言机网络相结合,该预言机会将价格数据喂到参考合约(reference contracts),在此合约中数据后果将会聚合。DeFi协定非常重视数据品质和完整性,这一点尤为重要。Chainlink喂价机制为这些想要爱护本身免受各种因为数据品质问题或者传输问题导致的攻打的协定提供了最佳的、通过严格考验的生产环境解决方案。

上面的两个教程内容也能够通过Remix中的这个残缺的智能合约来查看。

在Matic网络上应用Chainlink喂价机制的和预言机的第一步是设置你的MetaMask钱包,应用它来连贯Matic的Mumbai测试网络,而后你就能够获取肯定的Mumbai测试网上的MATIC代币,并在DeFi智能合约中应用。


在MetaMask中设置Matic Mumbai测试网
**

获取测试网 Matic代币

MATIC是Matic网络上的本地代币,能够类比于以太坊上的ETH代币。为了和Matic网络交互,MATIC代币会用来领取gas费用。为了获取Mumbai测试网的MATIC代币,返回MATIC水龙头,抉择MATIC代币和Mumbai测试网络,输出MetaMask钱包地址,并点击提交。


Obtaining testnet MATIC 获取测试网MATIC代币

留神:提交后还须要确认,并可返回浏览器查看此交易:https://explorer-mumbai.maticvigil.com/tx/0x742aa8e4c1fb12105b424840e435193b1b24324e2d77d926d4903fcc54142772/internal-transactions
查看钱包能够发现获取了测试代币(获取两次,每次0.1 MATIC):

创立智能合约

在Matic网络上应用Chainlink喂价机制开始构建智能合约最容易的形式是应用规范的价格消费者(Price Consumer)合约。这是根本的规范合约,可能向Chainlink的喂价机制发动申请。咱们将在Remix编辑器中关上合约,并且批改它以满足咱们本人的需要。本文的演示会采纳ETH/USD价格获取。第一步是构造函数中初始化Matic的喂价参考合约,其中,在Mumbai测试网上部署的ETH/USD喂价参考合约地址是:_0x0715A7794a1dc8e42615F059dD6e406A6594651A。`

priceFeed = AggregatorV3Interface(0x0715A7794a1dc8e42615F059dD6e406A6594651A);

接下来,咱们须要一个函数来从价格获取聚合合约(Price Feed Aggregator contract)中获取最新价格,该聚合合约在下面的结构器中实例化。为了实现这个指标,咱们在聚合合约中曾经有了一个函数叫作latestRoundData,这是一个会返回以后聚合合约状态的函数,并且在本案例中,咱们将取出以后的价格并且返回。

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

部署和测试智能合约

当初咱们能够部署并测试咱们的智能合约。在Remix中编译智能合约,而后在部署的页面,将环境改为“Injected Web3”,并确保钱包地址是含有MATIC代币的地址,点击部署(deploy)按钮,并追随操作后续步骤。最终后果就是胜利部署智能合约到Matic Mumbai测试网。
部署实现后,咱们只须要简略的执行"getLatestPrice"函数。后果将为ETH/USD聚合合约中的函数返回的最新的价格数据,这能够用在Matic网络上的DeFi利用中。


ETH/USD喂价后果

在Matic网络上应用Chainlink预言机

在Matic上可能有一些场景中智能合约须要链下数据,而这些数据是Chainlink的喂价没有提供的。这也是咱们须要应用Chainlink预言机的中央。咱们当初批改咱们的智能合约来获取应用Chainlink的喂价器不能提供的市场价格,在这个案例中,咱们应用ETH/EUR价格。

获取测试网的LINK代币

你须要获取一些测试网的LINK代币来发送申请给Chainlink的预言机。为了获取Mumbai测试网的LINK代币,须要退出Matic的Discord社群,并贴上你的MetaMask钱包地址,申请Matic团队成员发送一些Mumbai测试网的LINK代币。一旦你获取了一些MATIC和LINK到钱包中,就能够进入到智能合约的步骤了。

创立智能合约

在Matic中应用Chainlink预言机建设智能合约的最简略办法是应用规范的Chainlink APIConsumer合约。这是根底的规范合约,用于通过Chainlink预言机发动申请获取内部数据。咱们在Remix中批改此合约以满足本人的需要。

首先咱们须要重命名“volume”参数为“ethPrice”,而后“requestVolumeData”函数名批改为“requestEthereumPrice”。实现后,咱们须要批改构造函数为:

  • Mumbai测试网上LINK代币地址为_0x70d1F773A9f81C852087B77F6Ae6d3032B02D2AB,咱们将其传到“setChainlinkToken”函数中_
  • 正如在Matic文档中表明的,有一个在Mumbai测试网上运行的预言机合约,地址在_0x1cf7D49BE7e0c6AC30dEd720623490B64F572E1,咱们设置预言机变量为这个值_
  • 咱们将应用的API将通过HTTP GET申请,返回的值是一个无符号整数。运行在Mumbai测试网上的预言机有很多不同的作业标准(job specifications)能够应用。依据Matic文档中列出的作业,满足咱们需要的是这个:_d8fcf41ee8984d3b8b0eae7b74eca7dd,_因为咱们想要执行HTTP GET申请,并且返回数据是无符号整数,所以咱们设置“jobId”变量为这个值
  • 批改“fee”变量为1LINK,移除“0.1”前缀即可。这是随着内部数据申请一块发送到预言机的领取数据(为此申请领取LINK代币)。
constructor() public {  setChainlinkToken(0x70d1F773A9f81C852087B77F6Ae6d3032B02D2AB); oracle = 0x1cf7D49BE7e0c6AC30dEd720623490B64F572E17; jobId = "d8fcf41ee8984d3b8b0eae7b74eca7dd"; fee = 10 ** 18; // 1 LINK }

当初咱们实现了构造函数,咱们能够移步到“requestEthereumPrice”函数和“fulfill”函数。

Chainlink预言机满足申请的工作原理是采纳Chainlink的申请和响应设计模式,其中链上函数会创立并发送申请,预言机检测到申请,而后响应会发送到雷同合约的另一个函数。在咱们的例子中,“requestEthereumPrice”函数会创立和发送申请,“fulfill”函数会解决响应,响应标准定义在this.fulfill.selector中。

咱们将要生产的ETH/EUR价格数据API是来自crypto.com的公开API。浏览器中点开此链接,你能够看到返回数据的JSON格局。
在咱们的“requestEthereumPrice”函数中,咱们将其批改如下:

  • 设置URL为ETH/EUR接口端点
  • 设置申请中“path”变量为“EUR”,该门路是咱们想要发现并返回的JSON响应的门路,该端点输入后果中蕴含当初的ETH价格
  • 将后果乘以100,因为Solidity不会解决含有小数点的数据
  • 将申请发送到Chainlink预言机
function requestEthereumPrice() public returns (bytes32 requestId)  { Chainlink.Request memory request = buildChainlinkRequest(jobId, address(this), this.fulfill.selector);  // Set the URL to perform the GET request on request.add("get", "https://min-api.cryptocompare.com/data/price?fsym=ETH&tsyms=EUR");  // Set the path to find the desired data in the API response, where the response format is: // {"USD":243.33} request.add("path", "EUR");  // Multiply the result by 100 to remove decimals request.addInt("times", 100);  // Sends the request return sendChainlinkRequestTo(oracle, request, fee); }

在“fulfill”函数中,咱们能够看到预言机发回一个响应到_price参数中,而后该参数值在合约中保留到了ethereumPrice变量。

function fulfill(bytes32 _requestId, uint256 _price) public recordChainlinkFulfillment(_requestId)  { ethereumPrice = _price; }

当初咱们的合约筹备好了,能够编译并部署到Matic Mumbai测试网。

部署并测试合约

在Remix中编译合约,而后部署合约到Mumbai测试网,这几个步骤咱们在后面喂价合约中曾经做过一遍。

下一步是为合约中增加肯定的LINK代币,所以它能发送申请到Chainlink预言机。为了实现这个步骤,拿到部署的合约的地址,而后通过MetaMask钱包发送1LINK代币到此地址中。


给合约充LINK代币

一旦合约部署实现并且充值完LINK,咱们能够点击“requestEthereumPrice”按钮调用函数,发送申请到Chainlink预言机来获取以后的以太坊价格。咱们也将发送LINK作为领取到Chainlink的预言机来实现此申请。


测试部署的合约

申请实现后,Chainlink预言机会实现它,而后合约中的“fulfill”函数会被Chainlink结点预言机合约调用。这会破费几秒钟的工夫来实现 ,而后咱们能够通过执行“ethereumPrice”的getter函数来查看API申请后果。这个后果应该是以后的以EUR计价的ETH价格,当初就保留到了合约,期待运行在Matic网络上的DeFi利用来生产这个数据。


查看返回后果

总结

Matic网络自身具备疾速、便宜且牢靠的交易个性,为构建DeFi协定提供了切实可行的Layer 2解决方案。而Chainlink预言机和Chainlink的喂价器进一步加强了在Matic上构建DeFi协定的价值主张,Chainlink预言机和Chainlink的喂价器使得这些协定能够拜访内部数据和事件,包含能够用在各种各样的有价值的DeFi利用中的高质量的聚合价格数据,如去中心化交易所(DEX),流动性池,借贷协定,去中心化保险以及自动化做市商(AMMs)等等。

如果你是开发者,想要疾速为你的利用连贯到Chainlink的价格参考数据,拜访开发者文档,并接入Discord技术探讨。如果你想要安顿一个电话来更深刻探讨Matic/Chainlink的集成,请在此处分割。

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

END.