Gibt es eine Möglichkeit, die Vertragsinstanz von einer truffle develop
Konsole aus der Vertragsadresse abzurufen?
Ich habe ein Remote-EC2 mit installiertem Truffle/Geth und laufender Truffle-Entwicklungsinstanz. Von einer lokalen truffle develop
Konsole 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 develop
Konsole auf dem Remote-Server habe ich versucht Contract_Name.deployed().then(function(instance) {app = instance; })
, die Instanz abzurufen, erhalte jedoch eine Contract_Name is undefined
Fehlermeldung.
Gibt es eine Möglichkeit, die Vertragsinstanz von einer truffle develop
Konsole auf dem Remoteserver aus der Vertragsadresse abzurufen?
Vielleicht sowas wie MyContract = new Contract.at("ContractAddress")
?
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.
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
.
Gelöst! Sie benötigen zwei Dinge, um die Instanz eines Vertrags in einem Remote-Netzwerk abzurufen:
truffle migrate --compile-all --reset --network remote_network_name
in 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.Mit diesen beiden Informationen können Sie Ihre Truffle-Entwicklungskonsole auf dem Remote-Server aufrufen und über diese Befehle eine Instanz Ihres Vertrags abrufen:
var MyContract = new web3.eth.Contract(abiArray);
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 .
Ismael
build/
Verzeichnis mit den Bereitstellungsartefakten auf den Remoteserver zu kopieren.BreakingBadCode
Ismael