本文旨在解决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是一个核心的以太坊JavaScript库,广泛用于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即可。
以下是修正后的代码示例:
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版本
}
}请注意,Hard
hat本身或其插件(如@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版本保持一致,可以轻松解决这一问题。在日常开发中,养成检查依赖版本和查阅对应版本文档的习惯,将大大提高开发效率并减少不必要的调试时间。
# javascript
# java
# js
# json
# npm
# 工具
# ai
# 以太坊
# 以太币
# 币
相关栏目:
【
Google疑问12 】
【
Facebook疑问10 】
【
网络优化76771 】
【
技术知识130152 】
【
IDC云计算60162 】
【
营销推广131313 】
【
AI优化88182 】
【
百度推广37138 】
【
网站推荐60173 】
【
精选阅读31334 】
相关推荐:
Win11怎么设置默认邮件应用_Windows11应用关联Mail设置
Windows如何设置登录时的欢迎屏幕背景?(锁屏界面)
Windows10怎么备份注册表_Windows10注册表备份步骤【教程】
Windows 11如何查看系统激活密钥_Windows 11使用CMD或PowerShell命令找回Product Key
Win11怎么设置单手模式_Win11触控键盘布局调整教程【技巧】
使用类变量定义字符串常量时的类型安全最佳实践
c++怎么使用std::unique实现去重_c++ 容器元素排序与连续重复删除【教程】
Windows10怎么查看系统激活状态_Windows10激活状态查看方法【教程】
PHP 中如何在函数内持久化修改引用变量的指向
Win10如何更改开机密码_Windows10登录选项更改密码
Windows10如何更改桌面图标间距_Win10注册表WindowMetrics修改
Windows10如何更改日期格式_Win10区域设置短日期修改
如何减少Golang内存碎片化_Golang内存分配与回收优化方法
Win11怎么关闭小组件_Win11禁用任务栏天气与小组件方法【设置】
c++如何用AFL++进行模糊测试 c++ Fuzzing入门【安全】
Win10如何关闭安全中心所有通知 Win10禁用Windows Defender提醒【设置】
Python高性能计算项目教程_NumPyCythonGPU并行加速
phpstudy本地环境mysql忘记密码_重置mysqlroot密码操作流程【解答】
Win10电脑C盘红了怎么清理_Windows10系统盘深度瘦身指南
Python解释执行模型_字节码流程说明【指导】
c++ reinterpret_cast怎么用 c++最危险的类型转换【详解】
如何用::实现单例模式_php静态方法与作用域操作符应用【技巧】
Mac电脑如何恢复出厂设置_Mac抹掉数据并重装系统【安全指南】
Win11怎么更改输入法顺序_Win11调整语言首选位置【设置】
Win11怎么用设置清理回收站_Win11设置清理回收站技巧【步骤】
php订单日志怎么记录评价_php记录订单评价日志方法【方法】
Win11怎样激活系统密钥_Win11系统密钥激活步骤【攻略】
Mac如何修复应用程序权限问题_Mac磁盘工具修复权限【教程】
php控制舵机角度怎么调_php发送pwm信号控制舵机转动【解答】
Python面向对象实战讲解_类与设计模式深入理解
Win11怎么设置任务栏对齐方式_Windows11个性化任务栏行为
Python大型项目拆分策略_模块化解析【教程】
为什么本地php环境运行php脚本卡顿_php执行效率优化方法与设置【说明】
如何在 PHP 中按相同键合并两个关联数组为二维数组
php高频调试功能有哪些_php常用调试函数与工具汇总【解答】
Win11键盘快捷键大全_Windows 11常用高效快捷键汇总【技巧】
php修改数据怎么批量改状态_批量更新status字段值技巧【操作】
php删除数据怎么清空表_truncate与delete区别及用法【汇总】
全球各国上班时间表外贸邮件时间
Python装饰器复用技巧_通用能力解析【教程】
Windows蓝屏BAD_POOL_HEADER故障详解_蓝屏池损坏错误修复指南
Mac的访达(Finder)怎么用_Mac文件管理入门教程【详解】
Win10怎样设置闹钟贪睡时间 Win10闹钟贪睡时长设置【步骤】
Win11怎么关闭应用权限_Windows11相机麦克风隐私管理
Win11怎么退出微软账户_切换Win11为本地账户登录方法【详解】
短链接怎么用php递归还原_多层加密链接的处理法【详解】
Win10路由器怎么隐藏ssid Win10隐藏wifi名称设置【指南】
Win11关机快捷键是什么_Win11快速关机方法【大全】
php中作用域操作符能访问私有静态属性吗_访问权限限制【指南】
如何在Golang中实现服务熔断与限流_Golang微服务容错与流控方法
2025-12-08
致胜网络推广营销网专注海外推广十年,是谷歌推广.Facebook广告全球合作伙伴,我们精英化的技术团队为企业提供谷歌海外推广+外贸网站建设+网站维护运营+Google SEO优化+社交营销为您提供一站式海外营销服务。