我尝试遵循此repo:-
但是在使用:-
编译代码时出现以下错误import traceback
def func():
try:
-- do something --
except:
traceback.print_exc()
它抛出此错误:-
code = fs.readFileSync('Voting.sol').toString()
solc = require('solc')
compiledCode = solc.compile(code)
答案 0 :(得分:0)
您必须指定用于实体文件的编码类型。
code = fs.readFileSync('Voting.sol', 'utf8');
,您必须指定要编制的合同数量。
compiledCode = solc.compile(code, 1);
答案 1 :(得分:0)
我发现答案是因为npm版本冲突。确保您具有正确的solc版本。请参阅此repo
答案 2 :(得分:0)
我找到了另一个解决方案。在我的案例中,问题是File.sol
是原始固体智能合约,但是您需要将Compiler Standard Input JSON
放入solc.compile()
中。这适用于Solidity 0.5.1。在this thread中,我是逐步完成交易发送之前的整个过程。
答案 3 :(得分:0)
我发现,如果您根据Solidity文档将输入信息放入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);
答案 4 :(得分:0)
solc的版本和您的合同应该相同。
例如,如果您的合同使用pragma solidity ^0.4.18;
,则应该使用npm install solc@0.4.18
安装相同版本的solc。
答案 5 :(得分:0)
我也面临着同样的问题。下载并检查是否安装了solc版本的正确版本,否则会出现错误。我未指定要下载的版本,而是下载了默认版本。
npm install --save solc@0.4.17 (指定版本)
“'{” errors“:[{” component“:” general“,” formattedMessage“:” *第1行,第1列\ n语法错误:期望值,对象或数组。\ n *第1行,第Column 2 \ n JSON值后有额外的非空格。\ n“,” message“:” *第1行,第1列\ n语法错误:值,对象或数组是预期的。\ n *第1行,第2列\ n额外非-JSON值后的空白。\ n“,”严重性“:”错误“,”类型“:” JSONError“}]}'”