Wie verifizieren Sie einen Vertrag auf Etherscan, der von einem anderen Vertrag bereitgestellt wird?

Wie verifizieren Sie einen Vertrag auf Etherscan, der von einem anderen Kontakt bereitgestellt wird?

Ich habe einen Vertrag bereitgestellt, der andere Verträge auf der Blockchain bereitstellt.

Der ursprüngliche Vertrag wird verifiziert, aber wenn dieser Vertrag den Vertrag auf der Blockchain bereitstellt, kann ich den Vertrag nicht verifizieren.

Kann jemand dabei helfen?

Antworten (5)

Dies ist seit dem 24. März 2018 nicht möglich. Etherscan kann den Vertragscode an der Adresse des Untervertrags nicht finden.

Hier ist die Transaktion, die zwei Verträge bereitstellt. Aber für den zweiten Vertrag kann Etherscan keinen Vertragscode finden.

Der zweite Vertrag existiert und dies wurde durch die Verwendung der „at address“-Funktion von Remix verifiziert. Bis es einige Updates für Etherscan gibt, ist es nicht möglich, den Vertrag zu überprüfen, der durch einen anderen Vertrag erstellt wurde.

Februar 2019, immer noch nicht möglich.
Rinkeby 4. März 2019. Immer noch nicht möglich
Möglich bis 1. Oktober 2020. Jeder, der vor demselben Problem steht, überprüft bitte meine Antwort unten.

Ich habe einen Vertrag aus einem anderen Vertrag bereitgestellt: https://etherscan.io/tx/0x8fd885ce7ad7b6a591d9614d41cbb1d97aa7d2e290f6aa52531ce3d4c799a5ff

welche bereitgestellt wurden: https://etherscan.io/address/0xb1400278014f34c8243b15613a4b463b51fb6f2a#code

und ich konnte den Vertrag mit derselben Compiler-Version und Optimierung verifizieren. Sie müssen jedoch alle Konstruktorargumente selbst codieren, indem Sie web3.eth.abi.encodeParameters verwenden

So konnte ich es auf Etherscan verifizieren.

Es scheint, dass Sie mit Etherscan Verträge überprüfen können, die von Verträgen bereitgestellt werden, solange Konstruktorparameter keine dynamische Länge ( string, bytes, uint[]) haben.
Basierend auf der am meisten positiv bewerteten Antwort könnte es mehr Bedingungen geben, unter denen Etherscan fehlschlägt.
Können Sie zeigen, wie Sie das umsetzen würden, und nach 4 Jahren gibt es einen neuen Weg?

Wenn Sie ein Hardhat-Benutzer sind, können Sie das Hardhat-Etherscan- Plugin verwenden:

$ yarn hardhat --network NETWORK_NAME verify CONTRACT_ADDRESS --param1 --param2

Es funktioniert sogar mit Verträgen, die von anderen Verträgen bereitgestellt werden, da es das standardmäßige json-Eingabeformat verwendet. Sie können mehr darüber lesen, wie diese Funktion des Solidity-Compilers in der Dokumentation .

Ich habe noch nie einen sekundären Vertrag bereitgestellt, aber ich könnte mir vorstellen, dass Sie den Quellcode Ihres "anderen" Vertrags in Solidity eingeben könnten, um den ABIfür Etherscan benötigten abzurufen.

Von der Registerkarte Kompilieren:

  1. KlickenDetails
  2. Scrollen Sie nach unten zuInterface (ABI)
  3. Klicken Sie auf das SymbolCopy value to clipboard

Sie haben angegeben, dass Sie den "ursprünglichen" Vertrag bereits überprüft haben, also gehe ich davon aus, dass Sie mit den restlichen Schritten auf Etherscan einverstanden sind.

Ich bin mir nicht sicher, wo ich das ABI unter etherscan.io/verifyContract einstecken würde. Das ABI, nach dem es fragt, ist gemäß den Dokumenten im Bytecode-Format, das ABI, das der Solidity-Browser angibt, ist nicht im Bytecode, sondern etwas, das wie JSON aussieht. Dies ist der eigentliche Vertrag, den ich zu überprüfen versuche

Dies ist bis zum 01. Oktober 2020 möglich. Sie müssen nur die richtige Compiler-Version angeben. Wenn Sie Ihren Vertrag mit Truffle bereitgestellt haben, ist Ihre Compiler-Version standardmäßig die Version des „solc“-Pakets, das zum Kompilieren Ihres Vertragscodes verwendet wird.

Standardmäßig hat das Paket „solc“ die „Optimierungen“ auf „Ja“ gesetzt.

Wenn Sie also Ihren Vertrag überprüfen, sollte "Optimierung" als "Ja" ausgewählt werden.

Hier ist der im Kovan-Netzwerk verifizierte Mustervertrag und Untervertragscode.

Hoffe das hilft.