In Node.js verbunden mit Geth : solc.compile wird ein zusätzliches ':' vor ContractName vorangestellt

Ich versuche das folgende Skript auf Node.js, während ich einen mit Rinkeby Testnet verbundenen Knoten ausführe (von 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));

Dieser Code funktioniert jedoch nicht auf meinem Computer: Wenn ich mich anmelde, compiledContractkann ich sehen, dass der Schlüssel in der Zuordnung ist :nameContractund nicht nameContract.

Wenn ich im Code nameContractdurch ersetze :nameContract, funktioniert es. Ich habe meine Solidity-Datei überprüft und es gibt keine Tippfehler darin.

Hast du eine Idee, warum das passiert? Ich verwende Git BASH unter Windows10.

Antworten (1)

Ich weiß, das kommt ein bisschen spät, aber es ist kein Fehler, es ist ein Feature, siehe Vertragsname beginnt mit Doppelpunkt in kompilierter Ausgabe :

  • Bericht:

solc.compile(exampleContract)gibt folgendes zurück. Es wäre gut, den Doppelpunkt vor dem Vertragsnamen zu entfernen.

{
  "contracts": {
     ":NameOfContract": {...}
  }
}
  • Auflösung:

Um Vertragsreferenzen in der Ausgabe eindeutig zu machen, stellen neuere Compiler-Versionen jedem Vertrag ein : voran. Dies wird in der nächsten Version weiter ausgebaut, wo ein richtiges JSON-Objekt zurückgegeben wird, also bleiben Sie bitte dran für einen "Fix".

  • Notiz:

Ich schließe dies, da es sich nicht um einen "Fehler" handelt, sondern nur darum, wie der Compiler funktioniert.