Lesson7执行yarn hardhat deploy --tags mocks报构造函数参数错误
问题根因
执行yarn hardhat deploy --tags mocks抛出Error: expected 0 constructor arguments, got 2,本质是部署逻辑给目标Mock合约的构造函数传入了2个参数,但当前项目引用的Mock合约构造函数没有定义任何入参,参数数量不匹配。
绝大多数该场景下的触发原因是**@chainlink/contracts依赖版本与课程使用版本不一致**:
- 课程演示时使用的是v0.2.2版本的@chainlink/contracts,该版本下
MockV3Aggregator构造函数明确要求传入2个参数:喂价小数位数、初始价格值,和课程编写的部署传参逻辑匹配。 - 安装依赖时如果不指定版本,yarn会默认拉取最新版依赖,新版依赖中Mock合约的路径、构造函数定义都做了调整,部分路径下的测试Mock合约不需要传入构造参数,就会触发该报错。
少数情况是合约导入路径错误,误引入了接口类文件或其他无构造参数的同名合约。
解决步骤
- 卸载当前不匹配的chainlink依赖
yarn remove @chainlink/contracts
- 安装与课程完全对齐的指定版本依赖
yarn add --dev @chainlink/contracts@0.2.2
- 核对部署脚本中Mock合约的导入路径,确保为该版本下的正确测试合约路径,不要导入接口文件:
import "@chainlink/contracts/src/v0.6/tests/MockV3Aggregator.sol";
- 重新执行部署命令即可正常部署
yarn hardhat deploy --tags mocks
如果不想降级依赖版本,可以直接打开本地
node_modules/@chainlink/contracts目录下对应的Mock合约文件,查看其构造函数的实际参数定义,调整部署脚本的传参数量和内容即可,但该方法后续可能遇到其他和课程代码不兼容的问题,优先推荐锁版本对齐课程环境。
内容的提问来源于stack exchange,提问作者DorianDaSilva
相关产品推荐
相关产品推荐

