我试着遵循这个回购:-
但是我在编译代码时遇到了以下错误:-
code = fs.readFileSync('Voting.sol').toString()
solc = require('solc')
compiledCode = solc.compile(code)
它抛出了这个错误:-
'{"errors":[{"component":"general","formattedMessage":"* Line 1, Column 1\n Syntax error: value, object or array expected.\n* Line 1, Column 2\n Extra non-whitespace after JSON value.\n","message":"* Line 1, Column 1\n Syntax error: value, object or array expected.\n* Line 1, Column 2\n Extra non-whitespace after JSON value.\n","severity":"error","type":"JSONError"}]}'
我发现,如果您根据solidity文档将输入信息放入JSON格式,那么无论编译器如何,您都是好的。在编译"stringify"之前,文件(JSON.stringfy(。编译文件后,对象将以字符串形式存在,因此您可能需要解析它(JSON.parse(以从那里使用它。这里有一个代码示例,带有JSON形式的console.log((,这样您就可以看到正在使用的内容。
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');
var solcInput = {
language: "Solidity",
sources: {
contract: {
content: source
}
},
settings: {
optimizer: {
enabled: true
},
evmVersion: "byzantium",
outputSelection: {
"*": {
"": [
"legacyAST",
"ast"
],
"*": [
"abi",
"evm.bytecode.object",
"evm.bytecode.sourceMap",
"evm.deployedBytecode.object",
"evm.deployedBytecode.sourceMap",
"evm.gasEstimates"
]
},
}
}
};
solcInput = JSON.stringify(solcInput);
var contractObject = solc.compile(solcInput);
contractObject = JSON.parse(contractObject);
console.log(contractObject);
solc的版本和您的合约应该是相同的。
例如,如果您的合同使用pragma solidity ^0.4.18;
,那么您应该使用npm install solc@0.4.18
安装相同版本的solc。
我也面临同样的问题。下载并检查是否安装了solc版本的正确版本,否则会出现错误。我没有指定要下载的版本,它下载了默认版本。
npm安装-保存solc@0.4.17(指定版本(
"'{"errors":[{"component":"general","formattedMessage":"*第1行,第1列\n语法错误:需要值、对象或数组。\n*第1列,第2列\n JSON值后有多余的非空白。\n","message":"*Line 1,Column 1\n语法错误:应该值、对象和数组
您必须指定solidity文件使用的编码类型。
code = fs.readFileSync('Voting.sol', 'utf8');
并且您必须指定要编译的合同数量。
compiledCode = solc.compile(code, 1);
我发现答案是因为npm版本冲突。确保您拥有正确版本的solc。参考本回购
我找到了另一个解决方案。在我的案例中,问题是File.sol
是原始的solidity智能合约,但您需要将Compiler Standard Input JSON
放入solc.compile()
中。这适用于Solidity 0.5.1。在这个线程中是我一步一步直到事务发送的整个过程。