Ban*_*ake 5 npm ethereum solidity smartcontracts
我想编译我的以太坊 HelloWorld.sol 智能合约。在所有教程中,你都是这样做的:
var solc = require('solc');
var compiledContract = solc.compile(fs.readFileSync('HelloWorld.sol').toString();
Run Code Online (Sandbox Code Playgroud)
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;
}
}
Run Code Online (Sandbox Code Playgroud)
换句话说,我将我的原始 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"}]}'
Run Code Online (Sandbox Code Playgroud)
我一直在寻找解决方案,但我发现的唯一一件事是
“高级 API 由单个方法 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)
}
Run Code Online (Sandbox Code Playgroud)
你好世界
contract HelloWorld {
bytes32 message;
constructor(bytes32 myMessage) public {
message = myMessage;
}
function getMessage() public view returns(bytes32){
return message;
}
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
3588 次 |
| 最近记录: |