Wie kompiliere ich voneinander abhängige Verträge separat in Mist?

Ich arbeite mit diesem Solidity-Beispiel und verwende die Geth-Konsole und/oder den Compiler von Mist:

contract InfoFeed {
    function info() payable returns (uint ret) { return 42; }
}

contract Consumer {
  InfoFeed feed;
  function setFeed(address addr) { feed = InfoFeed(addr); }
  function callFeed() { attribut = feed.info.value(10).gas(800); }  
}

Wenn ich im Mist-Compiler nur Folgendes einfüge:

contract Consumer {
  InfoFeed feed;
  function setFeed(address addr) { feed = InfoFeed(addr); }
  function callFeed() { attribut = feed.info.value(10).gas(800); }  
}

was sinnvoll wäre, wenn ich mich z. B. darauf verlassen würde, dass jemand anderes den Code für InfoFeed bereitstellt (hat) , erhalte ich die folgende Kompilierungsfehlermeldung:

 Identifier not found or not unique.
  InfoFeed feed;
  ^------^

Wie kann man Consumer bitte isoliert kompilieren ? Die Tutorials, die ich mir angesehen habe, enthalten Code-Bits von voneinander abhängigen Verträgen, sagen mir aber nicht, wie ich sie kompilieren soll.

Antworten (1)

Einige Tools sind geschickt darin, Verträge zu verknüpfen, die in verschiedenen Dateien gespeichert sind, aber alles, was Sie brauchen, um Ihren Vertrag zu kompilieren, wenn er den Vertrag einer anderen Person aufruft, ist die Funktionsdefinition (Funktionsname, Parameter, Rückgabewerte) für die Verträge, die Sie aufrufen möchten. Sie müssen diese Informationen bereits kennen, sonst wüssten Sie nicht, wie Sie den Code schreiben müssen, um sie aufzurufen. Am einfachsten ist es, das einfach an den Anfang der Datei zu kleben, wo Sie den Anrufvertrag definieren.

Hier hätte man also machen können:

contract InfoFeed {
    function info() payable returns (uint ret) { }
}

contract Consumer {
  InfoFeed feed;
  function setFeed(address addr) { feed = InfoFeed(addr); }
  function callFeed() { attribut = feed.info.value(10).gas(800)(); }  
}

Beachten Sie, dass ich das return 42;aus der info()Funktion herausgenommen habe. Der Compiler benötigt diese Informationen nicht zum Kompilieren von Consumer. Es benötigt auch keine Definitionen für Funktionen, die Sie nicht aufrufen werden.

Der Name des Vertrags, den Sie anrufen, spielt ebenfalls keine Rolle; Einige Leute benennen diese Stub-Verträge gerne um, so wie InfoFeedAPI, aber Sie könnten es Bobso nennen, wie es der Compiler interessiert.