我希望编译我的以太坊 HelloWorld.sol 智能合约。在所有的教程中,它是这样做的:
var solc = require('solc');
var compiledContract = solc.compile(fs.readFileSync('HelloWorld.sol').toString();
其中 HelloWorld.sol 是:
pragma solidity ^0.5.1;
contract HelloWorld {
bytes32 message;
constructor(bytes32 myMessage) public {
message = myMessage;
}
function getMessage() public view returns(bytes32){
return message;
}
}
在这种情况下,我将未经处理的Solidity合约代码放入solc.compile()方法中。但是这个过程在compiledContract中给了我这个错误。'{"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"}]}'
我寻找解决方案已经很长一段时间了,但我发现的唯一一件事是
"高级API由一个方法compile组成,需要编译器标准输入和输出JSON。"
(链接) 标准输入JSON看起来像是JSON和这个solidity代码的组合。所以我的问题是 -
如何将Solidity合同代码转换为编译器标准输入JSON?
难道这是编译合同的唯一方法吗?
const appPath = path.resolve(__dirname, 'contracts', 'inbox.sol');
const source = fs.readFileSync(appPath, 'utf8').toString();
以非常相似的方式获取文件,但出现了“指定的输入源无效”的错误。 - user1935987const appPath = path.resolve(__dirname, './contracts/inbox.sol');
,并且可能需要在fs.readFileSync()
中删除''utf8''
。我没有修改content
。 - Yegor Zaremba[CONTRACT_FILE]: { content: content }
。 - user1935987