运行Solidity项目deploy.js时触发assert.js断言报错的解决方法
报错根因
当前项目安装的solc为0.5.0及以上版本,compile.js中使用的是0.4.x版本已废弃的编译调用语法,入参格式不匹配新版solc的接口要求,直接触发内部断言校验,抛出Invalid callback object specified错误。
异常触发位置为
compile.js第8行的solc编译调用,与deploy.js的部署逻辑无直接关联:deploy.js在引入compile模块的编译产物时,会先执行compile.js中的编译逻辑,因参数格式不合规直接抛出异常。
修复方案
- 方案1:适配新版solc接口修改compile.js,无需降级依赖
替换原有compile.js的编译逻辑为新版兼容写法,完整代码如下:const path = require('path'); const fs = require('fs'); const solc = require('solc'); const inboxPath = path.resolve(__dirname, 'contracts', 'Inbox.sol'); const source = fs.readFileSync(inboxPath, 'utf8'); const compileInput = { language: 'Solidity', sources: { 'Inbox.sol': { content: source } }, settings: { outputSelection: { '*': { '*': ['abi', 'evm.bytecode.object'] } } } }; const compileResult = JSON.parse(solc.compile(JSON.stringify(compileInput))); const targetContract = compileResult.contracts['Inbox.sol']['Inbox']; module.exports = { interface: targetContract.abi, bytecode: targetContract.evm.bytecode.object }; - 方案2:降级solc版本匹配原有旧代码
合约声明的Solidity版本为^0.4.17,可安装完全兼容旧编译语法的对应solc版本,执行命令:npm install solc@0.4.26
安装完成后无需修改原有compile.js逻辑,即可正常运行。 - 修复完成后运行
node deploy.js,确认编译流程无报错后即可进入部署步骤。
内容的提问来源于stack exchange,提问作者SOHAM
相关产品推荐
相关产品推荐

