npm solc:AssertionError [ERR_ASSERTION]:指定的回调无效
npm solc: AssertionError [ERR_ASSERTION]: Invalid callback specified
我正在尝试使用 npm solc 编译 solidity 智能合约。我试图遵循不同的例子。
Link 例如: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发布了一个破解版,这个错误与那个有关。
npm uninstall solc
npm install solc@0.4.25
这是因为solc包安装时安装的solidity编译器和solidity中提到的编译器版本不匹配file.To解决这个问题试试
安装:
npm 安装 solc@0.4.25
在 solidity 文件中使用:
pragma solidity^0.4.25;
首先检查 Remix 中的代码,然后检查编译器版本
这是因为Solidity编译器的版本不匹配。请注意或验证您要在其中工作的 solidity 编译器版本。例如:如果您在
工作
pragma solidity ^0.4.17
然后你必须像这样安装 0.4.17 solidity 编译器版本:
npm install solc@0.4.17
在命令提示符或终端中。
这一般是您安装的solidity编译器与您在solidity合约文件中使用的solidity编译器版本之间的断言错误。
如果您使用
npm install --save solc@0.4.25
要在您的 mac 中安装 solc,然后请在您的 solidity 文件中使用相同版本的 pragma,如下所示
pragma solidity^0.4.25
如果您使用的是最新版本,即。 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))));
如果您看到类似 this.You 的错误,必须执行以下两个步骤。
卸载 solc:
npm 卸载 solc
重新安装两个版本之一:
课程中使用的版本:
npm install --save solc@0.4.17
或
不会破解的最新版本:
npm install --save solc@0.4.25
来源 - Udemy - 以太坊和 Solidity 完整开发者指南
unistall solidity 编译器
使用 - npm uninstall solc
然后安装所需版本的solidity编译器
使用-npm install solc@0.4.17
我通过在 cmd 中添加 "npm install --save solc@0.4.25" 修复了错误。错误是solidity版本。你需要安装旧版本的solidity才能执行编译脚本
与 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];
}
}
记得检查solidity版本和solc版本。它们应该相等。
基本上是版本问题。一些代码语法会在每次更新时发生变化。您不需要 'filesystem' 和 'path' 库。
要解决此问题,请尝试以下代码:
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);
由此,您将获得字节码。
您使用的 Solidity 版本和您使用的 solidity 编译器 (solc) 应该相同。
If pragma solidity^0.4.17 then solc-->version = 0.4.17
我正在尝试使用 npm solc 编译 solidity 智能合约。我试图遵循不同的例子。 Link 例如: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发布了一个破解版,这个错误与那个有关。
npm uninstall solc
npm install solc@0.4.25
这是因为solc包安装时安装的solidity编译器和solidity中提到的编译器版本不匹配file.To解决这个问题试试
安装:
npm 安装 solc@0.4.25
在 solidity 文件中使用:
pragma solidity^0.4.25;
首先检查 Remix 中的代码,然后检查编译器版本
这是因为Solidity编译器的版本不匹配。请注意或验证您要在其中工作的 solidity 编译器版本。例如:如果您在
工作pragma solidity ^0.4.17
然后你必须像这样安装 0.4.17 solidity 编译器版本:
npm install solc@0.4.17
在命令提示符或终端中。
这一般是您安装的solidity编译器与您在solidity合约文件中使用的solidity编译器版本之间的断言错误。 如果您使用
npm install --save solc@0.4.25
要在您的 mac 中安装 solc,然后请在您的 solidity 文件中使用相同版本的 pragma,如下所示
pragma solidity^0.4.25
如果您使用的是最新版本,即。 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))));
如果您看到类似 this.You 的错误,必须执行以下两个步骤。
卸载 solc:
npm 卸载 solc
重新安装两个版本之一:
课程中使用的版本:
npm install --save solc@0.4.17
或
不会破解的最新版本:
npm install --save solc@0.4.25
来源 - Udemy - 以太坊和 Solidity 完整开发者指南
unistall solidity 编译器
使用 - npm uninstall solc
然后安装所需版本的solidity编译器
使用-npm install solc@0.4.17
我通过在 cmd 中添加 "npm install --save solc@0.4.25" 修复了错误。错误是solidity版本。你需要安装旧版本的solidity才能执行编译脚本
与 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];
}
}
记得检查solidity版本和solc版本。它们应该相等。
基本上是版本问题。一些代码语法会在每次更新时发生变化。您不需要 'filesystem' 和 'path' 库。 要解决此问题,请尝试以下代码:
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);
由此,您将获得字节码。
您使用的 Solidity 版本和您使用的 solidity 编译器 (solc) 应该相同。
If pragma solidity^0.4.17 then solc-->version = 0.4.17