Solidity合约编写(三)

news/2025/1/10 15:55:15/

解决问题:

在 Solidity 合约中使用 Chainlink 获取 ETH/USD 的价格(汇率),需要使用 Chainlink 的 AggregatorV3Interface 接口。以下是一个样板代码,展示了如何在测试链(如 Goerli 或 Sepolia)上获取 ETH/USD 的价格。

// SPDX-License-Identifier: MIT
pragma solidity ^0.8.0;// 导入 Chainlink 的 AggregatorV3Interface 接口
import "@chainlink/contracts/src/v0.8/interfaces/AggregatorV3Interface.sol";contract EthPriceFeed {// Chainlink 价格喂价合约地址(ETH/USD)AggregatorV3Interface internal priceFeed;// 构造函数:初始化价格喂价合约地址constructor(address _priceFeedAddress) {priceFeed = AggregatorV3Interface(_priceFeedAddress);}// 获取最新的 ETH/USD 价格function getLatestPrice() public view returns (int256) {(uint80 roundID, int256 price, uint256 startedAt, uint256 updatedAt, uint80 answeredInRound) = priceFeed.latestRoundData();// 返回 ETH/USD 价格return price;}// 获取价格的小数位数function getDecimals() public view returns (uint8) {return priceFeed.decimals();}// 获取价格描述function getDescription() public view returns (string memory) {return priceFeed.description();}
}

代码说明:

  1. AggregatorV3Interface: Chainlink 提供的接口,用于与价格喂价合约交互。它包含 latestRoundData 函数,可以获取最新的价格数据。

  2. priceFeed:这是一个 AggregatorV3Interface 类型的变量,用于存储价格喂价合约的地址。

  3. 构造函数:在部署合约时,需要传入 Chainlink 价格喂价合约的地址(_priceFeedAddress)。不同网络的 Chainlink 价格喂价合约地址不同。

  4. getLatestPrice 函数:调用 latestRoundData 获取最新的价格数据。返回 int256 类型的 ETH/USD 价格。

  5. getDecimals 函数:返回价格的小数位数(通常是 8)。

  6. getDescription 函数:返回价格描述(例如 "ETH / USD")。


Chainlink 价格喂价合约地址

以下是一些测试网络的 Chainlink ETH/USD 价格喂价合约地址:

  • Goerli 测试网

    • ETH/USD: 0xD4a33860578De61DBAbDc8BFdb98FD742fA7028e

  • Sepolia 测试网

    • ETH/USD: 0x694AA1769357215DE4FAC081bf1f309aDC325306

  • Mainnet 主网

    • ETH/USD: 0x5f4eC3Df9cbd43714FE2740f5E3616155c5b8419

价格格式化为更易读的形式,可以添加以下函数:

// 将价格格式化为带小数位的数值
function getFormattedPrice() public view returns (uint256) {int256 price = getLatestPrice();uint8 decimals = getDecimals();return uint256(price) / (10 ** uint256(decimals));
}


http://www.ppmy.cn/news/1562012.html

相关文章

相机镜头竞品选型的主要参考参数和选型方法

目录 一、镜头主要参数: 1. 焦距(Focal Length) 2.光圈(Iris) 3.对应最大CCD尺寸(Sensor Size) 4.接口(Mount) 5.景深(Depth of Field, DOF&#xff09…

VUE3组合式——响应式数据ref、reactive

VUE3 组合式 —— 响应式数据 ref、reactive 学习笔记 一、引言 在 Vue3 中,响应式数据是构建动态交互应用的关键部分。其中,ref 和 reactive 是处理响应式数据的重要函数,深入理解它们对于高效开发 Vue3 应用至关重要。 二、ref 函数 基…

代码实战:基于InvSR对视频进行超分辨率重建

Diffusion Models专栏文章汇总:入门与实战 前言:上一篇博客《使用Diffusion Models进行图像超分辩重建》中讲解了InvSR的原理,博主实测的效果是非常不错的,和PASD基本持平。这篇博客就讲解如何利用InvSR对视频进行超分辨率重建。 目录 环境准备 代码讲解 环境准备

在Spring Boot项目中使用Zookeeper和Curator实现高效、可靠的分布式锁

要在 Spring Boot 项目中使用 Zookeeper 和 Curator 实现高效、可靠的分布式锁&#xff0c;可以参考以下步骤和优化建议&#xff1a; 1. 引入依赖 在 pom.xml 中添加 Curator 和 Zookeeper 相关依赖&#xff1a; <dependencies><dependency><groupId>org.…

开关不一定是开关灯用 - 命令模式(Command Pattern)

命令模式&#xff08;Command Pattern&#xff09; 命令模式&#xff08;Command Pattern&#xff09;命令设计模式命令设计模式结构图命令设计模式涉及的角色 talk is cheap&#xff0c; show you my code总结 命令模式&#xff08;Command Pattern&#xff09; 命令模式&…

maven下载依赖报错:on-resolvable parent POM xxx

maven 构建项目时报错 Non-resolvable parent POM for com.itheima:integation-mybatis:0.0.1-SNAPSHOT: org.springframework.boot:spring-boot-starter-parent:pom:2.5.3 failed to transfer from http://maven.aliyun.com/nexus/content/groups/public/ during a previous a…

[备忘.OFD]OFD是什么、OFD与PDF格式文件的互转换

‌OFD&#xff08;Open Fixed-layout Document&#xff09;是一种由工业和信息化部软件司牵头中国电子技术标准化研究院制定的版式文档国家标准&#xff0c;属于中国的一种自主格式‌‌。OFD旨在打破政府部门和党委机关电子公文格式不统一的问题&#xff0c;以方便电子文档的存…

AIDD-人工智能药物设计-通过组合生物合成产生新的类似物的抗真菌费尔南型三萜多聚类素的生物合成表征

Org. Biomol. Chem.|通过组合生物合成产生新的类似物的抗真菌费尔南型三萜多聚类素的生物合成表征 今天为大家介绍的是来自Xin-Yu Li、Jian-Ming Lv和Zhi-Qin Cao团队的一篇论文。费尔南型三萜是植物和真菌中的一类具有广泛生物活性的天然产物&#xff0c;其中真菌来源的Polyt…