济南建设银行网站,wordpress首页错位,苏州外贸网站建设公司排名,h5网站建设看过以太坊白皮书的都知道#xff0c;以太坊比较比特币而言所提升的地方中#xff0c;我认为最重要的一点就是能够访问外部的数据#xff0c;这一点在赌博、金融领域应用会很广泛#xff0c;但是区块链是一个确定的系统#xff0c;包括里面的所有数值包括交易ID等都是确定… 看过以太坊白皮书的都知道以太坊比较比特币而言所提升的地方中我认为最重要的一点就是能够访问外部的数据这一点在赌博、金融领域应用会很广泛但是区块链是一个确定的系统包括里面的所有数值包括交易ID等都是确定的你让区块自己产生一个随机的值或者跳出区块链去访问外部一个数据通常来说都做不到但是我们有相应的Oracle机制可以解决这个问题。 什么是Oracle
在以太坊和其他区块链系统中Oracles预言机是连接区块链与外部世界数据的桥梁。它们提供了一种方式使智能合约能够访问区块链外部的实时数据如温度、价格、交易结果等。这些数据对于执行依赖于外部事件的智能合约至关重要。
Chainlink
Chainlink就是这样一个去中心化的Oracle网络旨在连接智能合约与现实世界数据和外部API。通过Chainlink我们可以获取到金融市场结果、赛事比分和结果、天气信息、物联网数据、身份验证信息、货币兑换率等等信息。
Chainlink Feeds
Chainlink的Feeds中文名称叫做饲料常被称为数据Feeds或价格Feeds是指Chainlink网络提供的一系列去中心化的数据源。你可以把它们看作是向区块链提供关于现实世界问题的答案的一系列专门的节点。这些Feeds为智能合约提供了可靠、实时和验证过的外部数据最常见的是关于加密货币、股票、商品等的市场价格数据。以下是其大致的工作原理
多个数据提供者Chainlink通过多个独立的节点从不同的数据源获取相同的数据如某种资产的当前市场价格。这些节点可能从不同的交易所或市场信息提供者获取数据。数据聚合收集到的数据在链下off-chain被聚合以形成一个综合的、去中心化的数据点。这个过程减少了单一数据源可能带来的风险和偏差。数据上链聚合后的数据被传输到区块链上并可供智能合约使用。这些数据通常以Feeds的形式提供智能合约可以根据需要读取这些Feeds。
实际演示
今天我们用Remix写一个获得以太坊美元价格的solidity代码作为以太坊区块链它本身是无法访问外部信息去得悉自己究竟值多少美金的我们就需要使用Oracle机制的代表chainlink。
1.获得接口
Github chainlink网站 我们想要调用的接口程序地址如下 chainlink/contracts/src/v0.8/shared/interfaces/AggregatorV3Interface.sol
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.0;interface AggregatorV3Interface {function decimals() external view returns (uint8); //返回价格Feed使用的小数位数。function description() external view returns (string memory); //提供此价格Feed的描述性信息。function version() external view returns (uint256); //返回Aggregator接口的版本号。function getRoundData( //提供指定轮次round的价格数据。uint80 _roundId) external view returns (uint80 roundId, int256 answer, uint256 startedAt, uint256 updatedAt, uint80 answeredInRound);function latestRoundData() //获取最新轮次的价格数据。externalviewreturns (uint80 roundId, int256 answer, uint256 startedAt, uint256 updatedAt, uint80 answeredInRound);
}2.找到Feed
这个需要去 chainlink price-feeds 找价格Feed我们这次要调用的 latestRoundData() 函数就是通过这个Feed获得到的以太坊美金价格而且记住我们穷没有money所以用的是Goerli测试网络关于如何获得Goerli ETH请看我上一篇博客 以太坊交易手续费计算。
ETH/USD Feed: 0xD4a33860578De61DBAbDc8BFdb98FD742fA7028e
3.代码
Remix上的运行代码如下你要是不import的话把第2步接口里面的所有代码粘贴到里面也可以 注意:在代码中import的时候注意一下和上面第2步的文件夹地址不太一样这是有点坑的地方
// SPDX-License-Identifier: MIT
pragma solidity 0.8.2 0.9.0;import chainlink/contracts/src/v0.8/interfaces/AggregatorV3Interface.sol;contract getPrice {AggregatorV3Interface priceFeed AggregatorV3Interface(0xD4a33860578De61DBAbDc8BFdb98FD742fA7028e);function showPrice() public view returns (int256, uint8) {// 获取最新的价格数据(, int256 price, , , ) priceFeed.latestRoundData(); // 不需要的信息直接空格跳过// 获取小数位数uint8 decimals priceFeed.decimals();// 显示出来return (price, decimals);}
}
4.运行程序
因为需要有Chainlink访问权限运行的时候需要选择自己的账户Injected Provider 另外还有一点比较坑的是solidity没有浮点型我是让价格和小数位两个都显示出来两者一结合就大概是2421.32美元