You need to enable JavaScript to run this app. 运行Solidity项目deploy.js时触发assert.js断言报错的解决方法
优惠活动
大模型
产品
解决方案
定价
更多

运行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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.25 16:54:01