
本文旨在解决hardhat项目中常见的`typeerror: cannot read properties of undefined (reading 'parseunits')`错误。该问题通常源于`ethers.js`库在v5和v6版本之间对工具函数api的重大变更。我们将详细解释这一变化,提供正确的`ethers v6`语法,并指导开发者如何检查和适配`ethers.js`版本,确保智能合约测试和交互的顺畅进行。
在Hardhat开发中,我们经常需要将人类可读的以太币数量(如"1 ether")转换为EVM所需的最小单位(wei)。ethers.js库提供了parseUnits和parseEther等实用函数来完成这项任务。然而,当开发者在测试或脚本中尝试使用如下代码时,可能会遇到TypeError: Cannot read properties of undefined (reading 'parseUnits')的错误:
const { deployments, ethers, getNamedAccounts } = require("hardhat");
const { assert, expect } = require("chai");
describe("FundMe", async function () {
let fundMe;
let deployer;
// 错误示例:在ethers v6环境中尝试使用v5语法
const sendValue = ethers.utils.parseUnits("1", "ether");
// 或者
// const sendValue = ethers.utils.parseEther("1");
});这个错误明确指出ethers.utils对象上没有parseUnits属性,这通常不是因为拼写错误,而是因为ethers.js库的版本发生了变化。
ethers.js是一个核心的以太坊J*aScript库,广泛用于Hardhat项目。在ethers.js的v5版本中,许多实用工具函数,如parseUnits、formatUnits、keccak256等,都被封装在ethers.utils命名空间下。因此,使用ethers.utils.parseUnits()是正确的。
然而,从ethers.js的v6版本开始,为了简化API和提高模块化程度,许多常用的工具函数被提升到了ethers对象的顶层。这意味着ethers.utils命名空间下的许多函数,包括parseUnits和parseEther,都直接成为了ethers对象的属性。
因此,当你的Hardhat项目依赖于ethers.js v6版本,但你的代码仍然沿用ethers v5的ethers.utils.parseUnits语法时,就会出现上述的TypeError。
解决这个问题的关键
是更新你的代码以匹配ethers v6的API。只需将对ethers.utils.parseUnits或ethers.utils.parseEther的调用更改为直接调用ethers.parseUnits或ethers.parseEther即可。
标贝悦读AI配音
在线文字转语音软件-专业的配音网站
78
查看详情
以下是修正后的代码示例:
const { deployments, ethers, getNamedAccounts } = require("hardhat");
const { assert, expect } = require("chai");
describe("FundMe", async function () {
let fundMe;
let deployer;
// 正确的ethers v6语法
const sendValue = ethers.parseUnits("1", "ether");
// 或者,对于以太币单位,更简洁的写法
// const sendValue = ethers.parseEther("1");
});为了避免此类版本兼容性问题,了解你的项目当前使用的ethers.js版本至关重要。你可以通过以下方式进行检查:
package.json文件: 在你的项目根目录下的package.json文件中,查找dependencies或devDependencies部分,通常会看到ethers的依赖项及其版本号:
{
"name": "your-hardhat-project",
"version": "1.0.0",
"devDependencies": {
"hardhat": "^2.x.x",
"@nomicfoundation/hardhat-ethers": "^3.x.x", // 这个包通常会拉取ethers v6
"ethers": "^6.x.x" // 直接声明的ethers版本
}
}请注意,Hardhat本身或其插件(如@nomicfoundation/hardhat-ethers)可能会隐式地依赖特定版本的ethers.js。@nomicfoundation/hardhat-ethers v3及以上版本通常会引入ethers v6。
npm list ethers或yarn why ethers: 在项目终端中运行以下命令,可以查看ethers库的实际安装版本:
npm list ethers # 或者 yarn why ethers
这将显示项目中所有ethers依赖的树状结构和版本信息。
TypeError: Cannot read properties of undefined (reading 'parseUnits')错误是ethers.js从v5到v6版本API变更的一个典型表现。通过将ethers.utils.parseUnits或ethers.utils.parseEther更新为ethers.parseUnits或ethers.parseEther,并确保你的代码与项目实际使用的ethers.js版本保持一致,可以轻松解决这一问题。在日常开发中,养成检查依赖版本和查阅对应版本文档的习惯,将大大提高开发效率并减少不必要的调试时间。
以上就是Hardhat开发中ethers.parseUnits的正确使用姿势及版本迁移的详细内容,更多请关注其它相关文章!
# java
# javascript
# 以太
# 币
# 以太币
# 以太坊
# ai
# 工具
# npm
# json
# js
# 网站推广排名怎样收费高
# 行唐商城网站推广费用
# 中山定制型网站推广公司
# 洛阳网站建设文案
# 网站优化排名一年多少钱
# 阿图什网络营销推广
# 武汉关键词排名靠谱乐云seo
# 果汁营销推广
# 闵行营销推广加盟店电话
# 沈阳专业的seo优化
# 就会
# 加载
# 有何不同
# 是一个
# 键值
# 如何使用
# 通常会
# 这一
# 文档
相关文章:
c++20的std::jthread是什么_c++可中断线程与RAII式管理
cad怎么合并重叠的线段_cad清理重复重叠线条的操作方法
如何仅使用CSS更改登录界面背景图像图标的颜色
如何更改在 Excel 中打开超链接时的默认浏览器
steam官方入口大全 steam账号注册及操作指南
一加手机拍照效果不好怎么办 一加哈苏影像调校与专业模式使用教程【高手篇】
C++如何连接MySQL数据库_C++使用Connector/C++操作MySQL数据库教程
Golang如何实现微服务鉴权与权限控制_Golang微服务鉴权与权限管理实践
抓大鹅无需下载版 抓大鹅秒玩版入口
怎样更改Windows系统的默认安装路径_避免C盘爆满的终极设置【技巧】
KFC游戏互动怎么赢取优惠券_KFC线上游戏活动参与与优惠代码赢取教程
LINUX的perf命令入门_LINUX官方性能分析工具的使用与解读
C++如何打印当前代码行号与文件名_C++预定义宏FILE与LINE的使用
使用CSS更改登录屏幕输入框中PNG图标颜色的策略与局限性
J*a实现学校排课程序_面向对象结构化项目示例
一加 14R 快充无反应_一加 14R 充电优化
必由学网页版入口 必由学官方平台直接访问
c++中的std::launder有什么实际用途_c++对象生命周期与指针优化
天眼查企业查询官网入口 天眼查官方网页版查询
微信商城在哪里打开【步骤】
XML中包含HTML标签导致解析错误? 正确嵌入非XML数据的两种方法
PHP教程:将数据库查询结果动态展示到HTML Textarea的最佳实践
PDF文件体积过大处理_PDF压缩技巧详解
J*aScript数据结构转换:将对象数组按类别分组
win11专注助手在哪 Win11免打扰模式设置与自动化规则【指南】
理解Python模块与全局变量的作用域管理
我的世界mc.js免费游戏直接能玩 我的世界mc.js小游戏免费秒玩入口
新手怎么开始学化妆 零基础化妆入门教程
Angular响应式表单:实现提交后表单及按钮的禁用与只读化
百度网盘网页版入口 百度网盘网页版官方登录网址
Lar*el开发:如何在编辑界面正确预选数据库中的多选标签
漫蛙官网正版漫画入口 漫蛙2官方网页登录地址
如何使用J*aScript精确选择并批量修改特定父元素下子链接的样式
Django表单提交验证失败后保持字段值不刷新
漫蛙2漫画入口 漫蛙正版网页漫画直达网址
C++如何实现单例模式_C++设计模式之线程安全的单例写法
抖音极速版最新版本 抖音极速版官方下载地址
在J*a中如何使用Exception包装底层异常_异常包装与信息传递方法说明
Safari浏览器输入栏卡顿如何解决 Safari搜索建议与缓存清理
Python中高效访问嵌套字典与列表中的键值对
J*a TimerTask中HashMap意外清空的深层原因与解决方案
c++如何使用折叠表达式(Fold Expressions)_c++17可变参数模板新技巧
j*a toString()的覆盖
React Router 嵌套组件中 URL 重定向问题的解决方案
冬*霸灯泡不亮怎么办_浴霸取暖灯一盏不亮的灯座清洁修复法
浏览器打开即用 美图秀秀网页版入口
《噬血代码2》新预告片发布 展示游戏剧情
html怎么在cmd下运行php文件_cmd运行html中php文件方法【教程】
如何设置Windows Defender的定时扫描_计划任务实现自动杀毒【安全】
解决Tabulator日期时间排序问题的专业指南
*请认真填写需求信息,我们会在24小时内与您取得联系。