Npm Solidity-输入JSON描述的Solidity代码
我想编译我的以太坊HelloWorld.sol智能合约。在所有教程中,您都是这样做的:Npm Solidity-输入JSON描述的Solidity代码,npm,ethereum,solidity,smartcontracts,Npm,Ethereum,Solidity,Smartcontracts,我想编译我的以太坊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; cons
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组成,compile
需要编译器标准输入和输出JSON。”
()。标准输入JSON看起来像是JSON和这个稳定代码的某种组合。所以我的问题是-如何将solidity契约代码转换为编译器标准输入JSON?
这是编译合同的唯一方法,对吗?这段代码适合我,index.js
const solc = require('solc')
const fs = require('fs')
const CONTRACT_FILE = 'HelloWorld.sol'
const content = fs.readFileSync(CONTRACT_FILE).toString()
const input = {
language: 'Solidity',
sources: {
[CONTRACT_FILE]: {
content: content
}
},
settings: {
outputSelection: {
'*': {
'*': ['*']
}
}
}
}
const output = JSON.parse(solc.compile(JSON.stringify(input)))
for (const contractName in output.contracts[CONTRACT_FILE]) {
console.log(output.contracts[CONTRACT_FILE][contractName].evm.bytecode.object)
}
HelloWorld.sol
contract HelloWorld {
bytes32 message;
constructor(bytes32 myMessage) public {
message = myMessage;
}
function getMessage() public view returns(bytes32){
return message;
}
}
或者,您可以使用下面的命令和输入数据运行solc(命令行工具)
solc --standard-json -o outputDirectory --bin --ast --asm HelloWorld.sol
在上面的命令when--standard json中,Where需要一个您可以提供的输入json文件
您可以在下面的链接中找到输入文件的示例
来源:谢谢。这基本上就是我想要做的,但是有没有办法,如何自动创建输入的内容?类似于solc.CreateJSON(合同文件)的东西?嘿,也许你可以建议
const-appPath=path.resolve(_-dirname,'contracts','inbox.sol')
const source=fs.readFileSync(appPath,'utf8').toString()
以非常相似的方式获取文件,但指定了无效的输入源
错误在将内容文件传递到此处之前,您是否修改了内容文件?请尝试const appPath=path.resolve(uu dirname,'./contracts/inbox.sol')
并可能删除fs.readFileSync()
中的“utf8”
。我没有修改内容
好的,我知道了,你忘了在你的答案中包含json键内容
,我在文档中忽略了它。它必须是:[合同文件]:{content:content}