我试着遵循这个repo:
但我在编译代码时遇到了以下错误:-
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"}]}'
发布于 2018-12-02 13:26:55
我找到了答案,是因为npm版本冲突。确保您有正确版本的solc.Refer this repo
发布于 2019-02-24 05:41:52
我发现如果你把你的输入信息转换成JSON格式,不管编译器是什么,你都是很好的。在编译"stringify“文件(JSON.stringify)之前。编译完文件后,对象将是字符串形式的,因此您可能需要解析它(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);
发布于 2019-09-01 13:28:57
solc的版本应与您的合同相同。
例如,如果您的合同使用pragma solidity ^0.4.18;
,那么您应该使用npm install solc@0.4.18
安装相同版本的solc。
https://stackoverflow.com/questions/53408632
复制相似问题