Wie finde ich die Vertragsadresse?

Ich habe erfolgreich eine private Blockchain eingerichtet und den „Hello World“-Vertrag gemäß dem Tutorial von der Etherium-Website erstellt. Eine Sache, die ich nicht herausfinden kann, ist, wie ich den Vertrag später finden kann. Ich dachte, sobald der Vertrag abgebaut ist, wird er für immer Teil der Blockchain. Die Dokumentation scheint Dauerhaftigkeit zu implizieren, weil sie betont, wie es eine gute Etikette ist, ungenutzte Verträge zu bereinigen, indem man sie umbringt. Deshalb dachte ich, nachdem ich diese Nachricht erhalten habe, dass der Vertrag dauerhaft Teil der Blockchain ist:

    Contract mined! address: ........

Aber nachdem ich Geth verlassen habe und wieder eingestiegen bin, kann ich den Vertrag nirgendwo finden (ich habe seine Adresse verloren). Es schien nur während der einzigen Instanz zu dauern, in der Geth lief. Was fehlt mir hier? Muss ich den Vertrag registrieren, damit er unbefristet wird? Würde ich die gleiche Technik auf der echten Blockchain anwenden, um meinen Code hier aufzulisten?:

https://www.etherchain.org/contracts

Antworten (6)

Ihnen fehlt die Vertragsadresse.

Wenn Sie zum ersten Mal einen Vertrag senden, wird die Adresse als Javascript-Rückruf an Sie zurückgegeben, die Sie gesagt haben: " Vertrag abgebaut! Adresse: ........ "

Aber das ist Javascript. Es verschwindet, wenn Sie den Browser schließen, also müssen Sie die Adresse vorher speichern und sie dann nach Belieben mit abrufen:

var MyContract = web3.eth.contract(MyContract.abi);
var Instance = MyContract.at("address");

Und Sie können das verwendenInstance.thefunctionyouwant

Möglicherweise können Sie die Adresse finden, indem Sie die letzten paar Transaktionen von Ihrer eigenen Adresse aus überprüfen, da sie, wie Sie sagten, für immer gespeichert werden, aber Sie wissen einfach nicht, wo sie sich befindet. Da es sich jedoch um ein Testnetzwerk handelt, würde ich Ihnen vorschlagen, den Vertrag neu zu erstellen, die Adresse zu speichern und wie erwähnt fortzufahren.

Du meinst also so etwas wie contract.at(eth.address[of_account]). Ich dachte zuerst, "address"es sollte wörtlich in dem Anruf verwendet werden.

Sie können einen Filter verwenden, um alle Transaktionen von einer bestimmten Adresse aufzulisten.

var filter = eth.filter({fromBlock:0, toBlock:'latest', address: "0x.."});
filter.get(function (err, transactions) {
  transactions.forEach(function (tx) {
    var txInfo = eth.getTransactionReceipt(tx.transactionHash);
    /* Here you have
    txInfo.contractAddress;
    txInfo.from;
    txInfo.input;
    */
  });
});

Sie können einen Ethereum-Explorer wie ( https://github.com/etherparty/explorer ) in Ihrem privaten Testnetz verwenden, um sich die abgebauten Blöcke anzusehen. Dieser spezielle Explorer zeigt nur Blockinformationen und Transaktionsinformationen an. Es verwendet eckig und kann leicht modifiziert werden. Aber derzeit ist es irgendwie "begrenzt".

Wie jayD bereits gesagt hat, können Sie eine Rückruffunktion einstellen, um benachrichtigt zu werden, wenn ein Vertrag korrekt erstellt wurde.

Wenn Sie den Moment verloren haben, können Sie die Vertragsadresse trotzdem später abrufen . Tatsächlich wird die Vertragsadresse deterministisch aus der Adresse ihres Erstellers und der Anzahl der Transaktionen, die der Ersteller gesendet hat, berechnet.

Siehe Wie wird die Adresse eines Ethereum-Vertrags berechnet? für mehr Details.

Sie können "web3.eth.getTransactionReceipt('{txn_id}')" verwenden . Sie erhalten die Vertragsadresse sowie weitere Informationen wie Blocknummer usw.

Ich habe einige Tage damit gekämpft, und ich bekomme immer null für die transactionReceipt. Wenn es keinen Trick gibt, scheint es nie verfügbar zu sein.

Für diejenigen von Ihnen, die den Trace_transaction-Aufruf von Parity verwenden, wird die neu erstellte Vertragsadresse im trace.result.addressFeld angezeigt. (Und als Randbemerkung, alle selbstzerstörten Adressen erscheinen in, trace.action.addresswährend die Adresse, die den Erlös der Selbstzerstörung erhält, unter erscheint trace.action.refundAddress.)

Wenn Sie sich auf MetaMask befinden (dies ist eine Chrome-Erweiterung), können Sie die Option „Auf Etherscan anzeigen“ auswählen. Hier sehen Sie alle Ethereum-Transaktionen.

In der To-Adresse sehen Sie: [Contract 0x........ Created]