Солидность - Код солидности для ввода JSON Описание - PullRequest
0 голосов
/ 15 декабря 2018

Я хочу скомпилировать свой умный контракт ehtereum 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 стандартного компилятора. "

( link ).Стандартный ввод JSON выглядит как некоторая комбинация JSON и этого кода солидности.Итак, мой вопрос - Как перенести код контракта солидности в стандартный ввод JSON компилятора?Я правильно понял, что это единственный способ составить договор?Спасибо.

Ответы [ 2 ]

0 голосов
/ 16 декабря 2018

Кроме того, вы можете запустить solc (инструмент командной строки) с помощью приведенной ниже команды и с входными данными

solc --standard-json   -o outputDirectory --bin --ast --asm HelloWorld.sol

Где в приведенной выше команде, когда --standard-json ожидает входной файл json, который выможет дать.

Вы можете найти пример того, как входной файл должен быть в ссылке ниже.

Источник: https://solidity.readthedocs.io/en/v0.4.24/using-the-compiler.html

0 голосов
/ 16 декабря 2018

Этот код работает для меня, 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;
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...