Truffle entwickeln neue Vertragsinstanz von Vertragsadresse abrufen

Gibt es eine Möglichkeit, die Vertragsinstanz von einer truffle developKonsole aus der Vertragsadresse abzurufen?

Ich habe ein Remote-EC2 mit installiertem Truffle/Geth und laufender Truffle-Entwicklungsinstanz. Von einer lokalen truffle developKonsole aus habe ich meine Verträge in diesem Remote-Netzwerk bereitgestellt (mithilfe von truffle migrate --compile-all --reset --network remote_network_name). Die Verträge wurden erfolgreich bereitgestellt, und ich habe eine Adresse, an der der Vertrag gespeichert ist.

In einer truffle developKonsole auf dem Remote-Server habe ich versucht Contract_Name.deployed().then(function(instance) {app = instance; }), die Instanz abzurufen, erhalte jedoch eine Contract_Name is undefinedFehlermeldung.

Gibt es eine Möglichkeit, die Vertragsinstanz von einer truffle developKonsole auf dem Remoteserver aus der Vertragsadresse abzurufen?

Vielleicht sowas wie MyContract = new Contract.at("ContractAddress")?

Verfügt die Remote-Instanz über den Quellcode Ihrer Verträge? Wenn der Quellcode verfügbar ist, können Sie versuchen, das build/Verzeichnis mit den Bereitstellungsartefakten auf den Remoteserver zu kopieren.
Danke Ismael. Die Remote-Instanzen haben nicht den Quellcode meiner Verträge, und ich möchte vermeiden, meinen Build-Ordner auf den Server zu kopieren. Wenn ich diese Verträge beispielsweise in einem Testnetzwerk bereitgestellt habe und auf diesem Server keinen Datei-Upload-Zugriff habe, gibt es dann eine Möglichkeit, die Vertragsinstanz von der Vertragsadresse abzurufen? Ist dies möglich, ohne den Build-Ordner zu kopieren? Oder benötigt Truffle den Build-Ordner, um auf die Vertrags-ABIs zu verweisen?
Im Verzeichnis build/ befindet sich für jeden Vertrag eine .json-Datei, in dieser Datei befinden sich die ABI des Vertrags und die Bereitstellungsadresse. Das sollte ausreichen, um die bereitgestellte Instanz zu erhalten. Vielleicht können Sie etwas wie github.com/trufflesuite/truffle-artifactor verwenden , um das Artefakt in eine Javascript-Klasse zu packen, die verwendet werden kann, ohne das gesamte Verzeichnis zu kopieren.

Antworten (3)

Es gibt einen viel einfacheren Weg, wenn man Trüffel verwendet.

Schließen Sie zuerst das Vertragsartefakt ein, genau wie beim Erstellen eines neuen Vertrags in Truffle.

let MeinVertrag = artifacts.require(./MeinVertrag.sol");

dann im Skript:

let myContract = await MyContract.at('meine Vertragsadresse');

Auf diese Weise muss die ABI nicht aus einer anderen Datei usw. entnommen werden.

Daniels Antwort ist der Standardweg, aber dieser Weg wird benötigt, wenn der gewünschte Vertrag von einem anderen Vertrag hervorgebracht wird. Danke.

Persönlich ziehe ich es in Truffle vor, die Adresse meines bereitgestellten Vertrags nicht zu kennen oder zu benötigen, um seine Instanz zu erhalten. Es ist möglich, dass Sie sich nicht an die Adresse Ihres Vertrags erinnern oder die Adresse tief im Terminal vergraben wurde, da neue Inhalte alte Inhalte weiter nach oben schieben.
Der Weg, um eine bereitgestellte Vertragsinstanz zu erhalten, ohne die Adresse des Vertrags zu kennen, besteht darin, die deployed()Methode des Vertrags wie folgt zu verwenden:

const deployedContractInstance = await MyContract.deployed()

Und das ist es!

Sie haben jetzt Zugriff auf alle Attribute und Methoden, die Ihr Vertrag offenlegt. Beispielsweise können Sie die Adresse abrufen, indem Sie einfach Folgendes tun deployedContractInstance.address.

Wirklich tolle Antwort! Sie erklären nicht nur den Grund für die Bevorzugung dieses Ansatzes, sondern mit dem entsprechenden Code und Beispiel in einer sehr prägnanten Antwort.

Gelöst! Sie benötigen zwei Dinge, um die Instanz eines Vertrags in einem Remote-Netzwerk abzurufen:

  1. Die ABI Ihres Vertrags – nach der Bereitstellung Ihres Vertrags im Remote-Netzwerk durch Ausführung truffle migrate --compile-all --reset --network remote_network_namein Ihrer lokalen Truffle-Entwicklungskonsole erstellt Truffle eine JSON-Objektdarstellung Ihres Vertrags in Ihrem lokalen build/Verzeichnis. Innerhalb dieses JSON-Objekts finden Sie das ABI-Array Ihres Vertrags.
  2. Die Adresse Ihres Vertrags – nach der Bereitstellung für Ihren Vertrag im Remote-Netzwerk wird die Adresse Ihres Vertrags in Ihrer lokalen Truffle-Entwicklungskonsole wie folgt angezeigt:

Screenshot der Truffle Develop Console


Mit diesen beiden Informationen können Sie Ihre Truffle-Entwicklungskonsole auf dem Remote-Server aufrufen und über diese Befehle eine Instanz Ihres Vertrags abrufen:

  1. var MyContract = new web3.eth.Contract(abiArray);
  2. var contractInstance = await MyContract.at(contractAddress);

HINWEIS: Dies setzt voraus, dass Sie web3.js Version 0.2xx verwenden. Wenn Sie web3.js 1.0 verwenden, lesen Sie diese Dokumentation .