Я пробую следующий скрипт на 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.
Я знаю, что это происходит немного поздно, но это не ошибка, это функция, см. Имя контракта начинается с двоеточия в скомпилированном выводе :
solc.compile(exampleContract)
возвращает следующее. Было бы хорошо убрать двоеточие перед именем контракта.
{ "contracts": { ":NameOfContract": {...} } }
Чтобы сделать ссылки на контракты однозначными в выходных данных, новые версии компилятора добавляют к каждому контракту префикс :. Это будет дополнительно расширено в следующей версии, где будет возвращен правильный объект json, поэтому, пожалуйста, следите за обновлениями для «исправления».
Я закрываю это, поскольку это не «ошибка», а работа компилятора.