abh*_*yak 6 node.js blockchain solidity web3js
我尝试遵循此repo :-
但是我在编译代码时遇到以下错误:-
code = fs.readFileSync('Voting.sol').toString()
solc = require('solc')
compiledCode = solc.compile(code)
Run Code Online (Sandbox Code Playgroud)
它抛出了这个错误:-
'{"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"}]}'
Run Code Online (Sandbox Code Playgroud)
小智 7
我发现,如果您按照 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);
Run Code Online (Sandbox Code Playgroud)
小智 6
solc 的版本和你的合约应该是一样的。
例如,如果您的合同使用,pragma solidity ^0.4.18;
那么您应该安装相同版本的 solc Using npm install solc@0.4.18
。
归档时间: |
|
查看次数: |
2165 次 |
最近记录: |