undefinierte Verträge.Vertragsname nach dem Kompilieren mit solc

Nach dem Erstellen eines Smart Contracts mit solc. Ich stoße auf einige Probleme und würde einige Hinweise zum Debuggen/Fehlerbeheben lieben.

Beschreibung

    $ 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)
  • Verträge prüfen

    > comp.contracts.yoThere  
    undefined
    

Wenn ich comp.contractses jedoch versuche, wird der gesamte Vertrag zurückgegeben. Was ich gerne machen würde ist comp.contracts.yoThere.bytecodezB.

Ich weiß nicht, ob der Doppelpunkt vor dem Namen :yoThereein Hinweis darauf ist, dass ich etwas falsch gemacht habe:

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

Jede Hilfe oder Hinweise in die richtige Richtung würden sehr geschätzt werden.

comp.contracts[":yoThere"].bytecodeliefert, was ich suche. Ich bin mir nicht sicher, warum :bei der Kompilierung vor dem Vertragsnamen hinzugefügt wird.

Antworten (1)

Laut github issue 83 für solc-js: „Wenn Sie aus etwas kompilieren, das keine Datei ist, verwendet der Compiler den leeren Dateinamen und fügt ein hinzu, um den :Dateinamen und den Vertragsnamen zu trennen.“

Dies scheint ab Solc 0.4.9 eingeführt worden zu sein.

Da der Doppelpunkt hinzugefügt wird (wie im Kommentar zur ursprünglichen Frage angegeben), comp.contracts[":yoThere"].bytecodewird die gewünschte Ausgabe bereitgestellt. Wenn das Hinzufügen des Doppelpunkts nicht erwünscht ist, kompilieren Sie aus einer Datei.