我正在尝试使用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)
请帮助。
答案 0 :(得分:13)
您正在使用哪个版本的solc?
Solc前几天发布了一个破坏版本,与此错误有关。
npm uninstall solc
npm install solc@0.4.25
答案 1 :(得分:2)
这是由于在solc软件包安装期间安装的solidity编译器版本与solidity文件中提到的编译器版本不匹配。要解决此问题,请尝试
安装:
在solidity文件中使用:
答案 2 :(得分:2)
如果您使用的是最新版本。 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))));
答案 3 :(得分:1)
这是因为Solidity编译器的版本不匹配。请注意或验证您要使用的Solidity编译器版本。例如:如果您在
中进行工作pragma solidity ^0.4.17
然后,您必须安装0.4.17稳定性编译器版本,如下所示:
npm install solc@0.4.17
在命令提示符或终端上。
答案 4 :(得分:0)
首先在Remix中检查代码,然后检查编译器版本
答案 5 :(得分:0)
这通常是已安装的Solidity编译器与Solidity合同文件中使用的Solidity编译器版本之间的断言错误。 如果您使用
npm install --save solc@0.4.25
然后在您的Mac中安装solc,请在您的Solidity文件中使用相同版本的编译指示,如下所示:
pragma solidity ^ 0.4.25
答案 6 :(得分:0)
如果您看到这样的错误。您必须执行以下两个步骤。
卸载solc:
npm卸载软件
重新安装以下两个版本之一:
课程中使用的版本:
!is.logical(...)
或
不会中断的最新版本:
npm install --save solc@0.4.17
源-Udemy-以太坊和团结完整的开发人员指南
答案 7 :(得分:0)
强大的编译器
使用- npm卸载软件
然后安装所需版本的Solidity编译器
使用- npm install solc@0.4.17
答案 8 :(得分:0)
我通过在cmd中添加“ npm install --save solc@0.4.25”解决了该错误。错误是实体版本。您需要安装旧版本的solidity才能执行编译脚本
答案 9 :(得分:0)
与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];
}
}