原文链接:https://cryptozombies.io/en/lesson/19/chapter/1
现在,让我们假设您正在构建一个DeFi dapp,并希望让您的用户能够提取价值一定美元的ETH。为了满足这一要求,您的智能合约(为了简单起见,从现在起我们将其称为“呼叫方合约/caller contract”)必须知道一个以太币的价值。
事情是这样的:JavaScript应用程序可以很容易地获取此类信息,向Binance公共API(或任何其他公开提供价格提要的服务)发出请求。但是,智能合约不能直接访问来自外部世界的数据。
因此,我们想做的是从去中心化的oracle网络(DON)和去中心化数据源中获取数据。
Chainlink是一个去中心化预言机网络(DON)的框架,是一种跨多个预言机从多个来源获取数据的方法。这个DON以去中心化的方式聚合数据,并将其放在区块链上的智能合约(通常被称为“价格参考源”或“数据源”)中供我们阅读。因此,我们所要做的就是从Chainlink网络不断为我们更新的合同中阅读!
使用Chainlink数据源是一种在这种去中心化的环境下从现实世界中廉价、更准确、更安全地收集数据的方法。由于数据来自多个来源,多个人可以参与生态系统,这甚至比运行一个集中的预言机更便宜。Chainlink网络使用一个名为“链下报告”的系统,就链下数据达成共识,并将加密验证的单个交易中的数据报告回链上,供用户消化。
然后,您可以用它制作Synthetix、Aave和Compound等协议!

Chainlink去中心化Oracle网络
你可以在这里看到一些DONs的可视化。
我们将在后面的课程中详细介绍这些网络是如何运作的。
所以,让我们学习如何从这些数据源中读取数据!
我们想做的第一件事是启动我们的合同并导入Chainlink代码。
进行测试/Putting it to the Test
其中一些你应该很熟悉,唯一真正不同的部分是含义!(单押)
1. 在右侧(见下方代码)的框中,将文件顶部的 pragma版本声明为^0.6.7。
2.现在,您需要声明一个名为PriceConsumer的新合同。Chainlink聚合器接口的当前版本是v3。然而,随着Chainlink为界面添加了更多功能,这个版本会随着时间的推移而变化。当您命名合同时,让我们将此版本附加到名称本身,以供以后参考。声明一个名为PriceConsumerV3的新合约,并暂时将合约正文留空。
pragma solidity ^0.6.7;
contract PriceConsumerV3 {
}