В Node.js, подключенном к Geth: solc.compile добавляет префикс «:» перед ContractName

Я пробую следующий скрипт на Node.js при запуске узла, подключенного к Rinkeby Testnet (из https://github.com/ethereum/wiki/wiki/JavaScript-API#web3ethcontract ):

const fs = require("fs");
const solc = require('solc')

let source = fs.readFileSync('nameContract.sol', 'utf8');
let compiledContract = solc.compile(source, 1);
let abi = compiledContract.contracts['nameContract'].interface;
let bytecode = compiledContract.contracts['nameContract'].bytecode;
let gasEstimate = web3.eth.estimateGas({data: bytecode});
let MyContract = web3.eth.contract(JSON.parse(abi));

Однако этот код не работает на моем компьютере: когда я регистрируюсь, compiledContractя вижу, что ключ в сопоставлении есть, :nameContractа не nameContract.

Когда я заменяю в коде nameContractна :nameContract, он работает. Я проверил свой файл Solidity, и в нем нет опечаток.

У вас есть идея, почему это происходит? Я использую Git BASH в Windows10.

Ответы (1)

Я знаю, что это происходит немного поздно, но это не ошибка, это функция, см. Имя контракта начинается с двоеточия в скомпилированном выводе :

  • Отчет:

solc.compile(exampleContract)возвращает следующее. Было бы хорошо убрать двоеточие перед именем контракта.

{
  "contracts": {
     ":NameOfContract": {...}
  }
}
  • Разрешение:

Чтобы сделать ссылки на контракты однозначными в выходных данных, новые версии компилятора добавляют к каждому контракту префикс :. Это будет дополнительно расширено в следующей версии, где будет возвращен правильный объект json, поэтому, пожалуйста, следите за обновлениями для «исправления».

  • Примечание:

Я закрываю это, поскольку это не «ошибка», а работа компилятора.