
本文旨在解决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的正确使用姿势及版本迁移的详细内容,更多请关注其它相关文章!
相关文章:
没有大陆身份证/银行卡如何实名微信? 亲测有效的几种方法分享
Golang如何使用net/url解析URL_Golang URL解析与处理方法
使用PHP DOM解析器高效提取HTML中特定标题及其紧邻段落
Golang如何使用bytes.Split分割字节切片_Golang bytes切片分割方法
BetterDiscord插件中安全更新用户简介的实践指南
在J*a中如何使用Stream.map转换元素_Stream映射操作解析
sublime如何配置Go语言开发环境_sublime搭建Golang编译运行系统
《北京人工智能产业白皮书(2025)》发布:全年核心产值预计突破 4500 亿元
千牛数据看板网页版_千牛数据看板网页版访问方法
html网页设计源代码怎么运行_运行html网页设计源代码步骤【指南】
PHP文件上传至S3:策略、考量与避免本地存储的挑战
MongoDB Aggregation:在嵌套对象数组中精确匹配ObjectId
漫蛙漫画登录站点 漫蛙2正版漫画快速访问
Composer的 archive 命令怎么用_快速打包你的PHP项目及其Composer依赖
TikTok国际版官网直达_TikTok国际版官网直达进入在线观看
在Pyomo中实现基于变量的条件约束:Big-M方法详解
树莓派传感器触发:通过Twilio API发送WhatsApp消息教程
ACG动漫手机版官网入口 手机ACG动漫APP在线观看正版
正确连接J*aScript到HTML实现可点击图片与自定义事件处理
黑鲨3Pro怎样在相册开漫画风滤镜_iPhone黑鲨3Pro相册开漫画风滤镜【趣味滤镜】
VS Code远程开发时如何处理文件权限问题
在J*a中如何使用BigDecimal进行高精度计算_BigDecimal类应用指南
Win11怎么设置开机NumLock亮 Win11修改注册表InitialKeyboardIndicators值
Golang如何实现简单的Web表单_Golang表单提交与验证处理方法
怎样使用“本地安全策略”提升Windows安全性_Secpol.msc配置指南【高手】
EMS快递官网app_中国邮政速递物流手机客户端
基于多条件高效更新SQL表:利用CASE表达式优化业务逻辑
Android Studio计算器C键逻辑错误排查与修复:条件判断优化指南
如何在 Windows 11 中启动游戏手柄设置
qq游戏免费畅玩入口_qq游戏电脑版快速启动
C#如何安全地从用户上传的XML文件中读取数据? 验证与清理策略
C++的std::forward_list怎么用_C++ STL中单向链表容器的特点与应用
优化 Jest 模拟:强制未实现函数抛出错误以提升测试效率
腾讯QQ邮箱官方网站_QQ邮箱网页版在线登录
Python异步编程实践:使用Binance API构建实时交易数据流
2026春节假期时间安排 2026春节假日查询
Shopware订单对象中获取产品自定义字段的正确方法
京东京造J1和网易云音乐氧气真无线有什么不同_国产电商蓝牙耳机音质对比
C++如何比较两个字符串_C++ string compare函数与操作符对比
Angular中单选按钮的正确使用与常见陷阱解析
React Router v6 教程:构建认证保护的私有路由与重定向策略
如何使用Node.js csv 包按条件移除含空字段的CSV记录
手机屏幕碎了但能正常使用怎么办 手机外屏碎裂的修复建议
谷歌google账号注册详细步骤 谷歌账号注册官方教程
Node.js 中使用 node-cron 实现定时 API 数据抓取与处理
MAC如何将整个网页截长图_MAC使用Safari的导出为PDF或第三方工具
Pygame教程:解决用户输入与游戏状态更新不同步问题
J*aScript设计模式实践_j*ascript代码优化
Yandex搜索引擎一键访问入口_俄罗斯Yandex官网免登录
深入理解J*aScript Promise异步执行与微任务队列