undefined Contracts.contractName после компиляции с solc

После составления смарт-контракта с помощью solc. Я сталкиваюсь с некоторыми проблемами и хотел бы получить некоторые указатели для отладки/устранения неполадок.

Описание

    $ node
    > var solc = require("solc")  
    > var src = `contract yoThere {
        string public msg;
        function yoThere() {
          msg = "Hey lol";
        }

        function greet() constant returns(string) {
          return msg;
        }
     }
     `

     > var comp = solc.compile(src)
  • Проверить контракты

    > comp.contracts.yoThere  
    undefined
    

Хотя, если я попытаюсь, comp.contractsон вернет весь контракт. Что я хотел бы сделать, comp.contracts.yoThere.bytecodeнапример.

Я не знаю, является ли двоеточие перед именем :yoThereуказанием на то, что я сделал что-то не так:

    > comp.contracts
    { ':yoThere': 
      { assembly: { '.code': [Array], '.data': [Object] },
      // ...

Будем очень признательны за любую помощь или указатели в правильном направлении.

comp.contracts[":yoThere"].bytecodeвозвращает то, что я ищу. Я не уверен, почему :добавляется перед именем контракта при компиляции.

Ответы (1)

Согласно выпуску 83 github для solc-js: «Если вы компилируете из чего-то, что не является файлом, компилятор использует пустое имя файла и добавляет раздельное имя :файла и имя контракта».

Похоже, это было введено из solc 0.4.9.

Поскольку добавляется двоеточие (как указано в комментарии к исходному вопросу), comp.contracts[":yoThere"].bytecodeон обеспечивает желаемый результат. Если добавление двоеточия нежелательно , скомпилируйте из файла.