npm solc:AssertionError [ERR_ASSERTION]:指定的回调无效
Posted
技术标签:
【中文标题】npm solc:AssertionError [ERR_ASSERTION]:指定的回调无效【英文标题】:npm solc: AssertionError [ERR_ASSERTION]: Invalid callback specified 【发布时间】:2019-04-20 13:06:00 【问题描述】:我正在尝试使用 npm solc 编译solidity 智能合约。我试图遵循不同的例子。 示例链接:https://medium.com/coinmonks/how-to-compile-a-solidity-smart-contract-using-node-js-51ea7c6bf440
我的代码如下:
const path = require('path');
const fs = require('fs');
const solc = require('solc');
const helloPath = path.resolve(__dirname, 'contracts', 'hello.sol');
console.log("First" + helloPath);
const source = fs.readFileSync(helloPath, 'UTF-8');
console.log("Second" + source);
console.log(solc.compile(source, 1));
运行上述代码时出现以下错误。
AssertionError [ERR_ASSERTION]: Invalid callback specified.
at wrapCallback (C:\Users\mouazzamj058\solc_example\node_modules\solc\wrapper.js:16:5)
at runWithReadCallback (C:\Users\mouazzamj058\solc_example\node_modules\solc\wrapper.js:37:42)
at compileStandard (C:\Users\mouazzamj058\solc_example\node_modules\solc\wrapper.js:78:14)
at Object.compileStandardWrapper (C:\Users\mouazzamj058\solc_example\node_modules\solc\wrapper.js:85:14)
at Object.<anonymous> (C:\Users\mouazzamj058\solc_example\example.js:4:19)
at Module._compile (module.js:652:30)
at Object.Module._extensions..js (module.js:663:10)
at Module.load (module.js:565:32)
at tryModuleLoad (module.js:505:12)
at Function.Module._load (module.js:497:3)
请帮忙。
【问题讨论】:
你确定这个错误来自solc
。你能调试一下,看看你到底是从哪里得到错误的吗?
我猜有一个错误。安装 solc@0.4.25 成功。
【参考方案1】:
你使用的 Solidity 版本和你使用的 Solidity 编译器(solc)应该是一样的。
如果 pragma solidity^0.4.17 那么 solc-->version = 0.4.17
【讨论】:
【参考方案2】:基本上,这是一个版本问题。某些代码语法会在每次更新时发生变化。您不需要“文件系统”和“路径”库。 要解决此问题,请尝试以下代码:
const solc = require('solc');
var input =
language: 'Solidity',
sources:
'hello.sol':
content: 'contract hello function f() public '
,
settings:
outputSelection:
'*':
'*': ['*']
;
var output = JSON.parse(solc.compile(JSON.stringify(input)));
console.log(output);
从中,您将获得字节码。
【讨论】:
【参考方案3】:记得检查solidity版本和solc版本。他们应该是平等的。
【讨论】:
【参考方案4】:solc
0.7.1
:
function compileContract()
let voterSOl = fs.readFileSync('./contracts/voter.sol' , 'utf8')
let complierInput =
language: 'Solidity',
sources:
'voter.sol':
content: voterSOl
,
settings:
optimizer:
enabled: true
,
outputSelection:
'*':
'*':['*']
;
console.log('compiling contract');
let compiledContract = JSON.parse(solc.compile(JSON.stringify(complierInput)));
console.log('Contract Compiled');
for (let contractName in compiledContract.contracts['voter.sol'])
console.log(contractName , compiledContract.contracts['voter.sol'][contractName].abi);
let abi = compiledContract.contracts['voter.sol'][contractName].abi;
fs.writeFileSync(`./contracts/bin/$contractName_abi.json` , JSON.stringify(abi));
return compiledContract.contracts['voter.sol'][contractName];
【讨论】:
【参考方案5】:我通过在 cmd 中添加“npm install --save solc@0.4.25”修复了该错误。错误是solidity版本。你需要安装旧版本的solidity来执行编译脚本
【讨论】:
【参考方案6】:卸载solidity编译器
使用 - npm uninstall solc
然后安装所需版本的solidity编译器
使用 - npm install solc@0.4.17
【讨论】:
【参考方案7】:如果您看到这样的错误。您必须执行以下两个步骤。
卸载 solc:
npm 卸载 solc
重新安装两个版本之一:
课程中使用的版本:
npm install --save solc@0.4.17
或
不会破解的最新版本:
npm install --save solc@0.4.25
来源 - Udemy - 以太坊和 Solidity 完整的开发者指南
【讨论】:
但继续前进【参考方案8】:如果您使用的是最新版本,即。 0.5.9 编译代码的方式发生了变化。
const path = require('path');
const fs = require('fs');
const solc = require('solc');
const helloPath = path.resolve(__dirname, 'contracts', 'hello.sol');
const source = fs.readFileSync(helloPath, 'UTF-8');
var input =
language: 'Solidity',
sources:
'hello.sol' :
content: source
,
settings:
outputSelection:
'*':
'*': [ '*' ]
;
console.log(JSON.parse(solc.compile(JSON.stringify(input))));
【讨论】:
【参考方案9】:这通常是您安装的solidity 编译器与您在solidity 合约文件中使用的solidity 编译器版本之间的断言错误。 如果你正在使用
npm install --save solc@0.4.25
要在你的 mac 中安装 solc,请在你的 solidity 文件中使用相同版本的 pragma,如下所示
pragma solidity^0.4.25
【讨论】:
【参考方案10】:这是因为 Solidity 编译器的版本不匹配。请注意或验证您要使用的solidity 编译器版本。例如:如果你在
pragma solidity ^0.4.17
那么你必须像这样安装 0.4.17 solidity 编译器版本:
npm install solc@0.4.17
在命令提示符或终端中。
【讨论】:
【参考方案11】:首先检查你在 Remix 中的代码,然后检查编译器版本
【讨论】:
【参考方案12】:这是因为安装solc包时安装的solidity编译器和solidity文件中提到的编译器版本不匹配,尝试解决这个问题
安装:
npm install solc@0.4.25
在solidity文件中使用:
pragma solidity^0.4.25;
【讨论】:
【参考方案13】:您使用的是哪个版本的 solc?
前几天Solc发布了一个破解版本,这个错误与此有关。
npm uninstall solc
npm install solc@0.4.25
【讨论】:
以上是关于npm solc:AssertionError [ERR_ASSERTION]:指定的回调无效的主要内容,如果未能解决你的问题,请参考以下文章
(2022年最新版本)Linux下基于ganache(v6.12.2)的简单投票DAPP(web3@1.7.1)(Node.js: v16.14.0.)(solc:‘0.8.12+commit)