Kann ich Konstruktorargumente aus dem Trüffelartefakt finden?

Ich verifiziere gerade meinen Vertrag auf Etherscan. Etherscan fragt während des Überprüfungsprozesses nach ABI-codierten Konstruktorargumenten, obwohl ich ein bisschen dumm war und nicht genau weiß, was sie sind.

Dies ist ein vereinfachter Grund, warum:deployer.deploy(Contract, Date.now()/1000|0 + 36000)

Ich habe das Konstruktor-Argument so eingestellt, dass es eine Funktion der aktuellen Zeit ist, obwohl ich nicht ganz sicher bin, wann die genaue Zeit in Sekunden war. Im Moment habe ich das Trüffel-generierte Artefakt bei mir.

Wie erhalte ich Zugriff auf den Konstruktor, wenn der Vertrag bereitgestellt wurde? Gibt es etwas in der Trüffelartefaktdatei, das helfen könnte? Da ich die ungefähre Zeit kenne, zu der ich das Programm gestartet habe, könnte ich möglicherweise Brute-Force-Verträge erzwingen, um denselben Bytecode zu finden?

Jede Hilfe wäre sehr willkommen.

Antworten (1)

Die Artefakte einer einfachen Inspektions-Trüffel enthalten nicht die Konstruktorparameter. Aber es enthält den Bytecode des Vertrags.

Wenn Sie die Transaktion untersuchen, die den Vertrag erstellt hat, werden Sie sehen, dass der Bytecode als Teil der Transaktionsdaten mit einigen zusätzlichen Bytes am Ende enthalten ist, diese zusätzlichen Bytes sind die mit Ethereum abi codierten Konstruktionsparameter.

Zum Beispiel der AugurToken-Vertrag https://etherscan.io/address/0xe94327d07fc17907b4db788e5adf2ed424addff6#code im „Contract Creation Code“, wenn Sie bis zum Ende scrollen, sehen Sie den gleichen Inhalt wie in „Constructor Arguments“.

00000000000000000000000048c80f1f4d53d5951e5d5438b54cba84f29f32a5
0000000000000000000000000000000000000000000000000de0b6b3a7640000
000000000000000000000000e1e212c353f7a682693c198ba5ff85849f8300cc

Zum Beispiel wurde der Vertrag https://etherscan.io/address/0x50ce4b73320ee36e307c1551207fd8008f4f38eb#codeum erstellt https://etherscan.io/tx/0xd7a4f8958704be82903ce9bd44a3770e110776bd20ddea672d43bc92d17b4977.

Wenn Sie sowohl den Bytecode im Codeabschnitt als auch die Daten in der Transaktion vergleichen, sind die zusätzlichen Bytes die Parameter, die an den Konstruktor gesendet werden

000000000000000000000000000000000000000000000000000000005a72cfef
000000000000000000000000000000000000000000000000000000005ac09180
0000000000000000000000000000000000000000000000000000000000000258
00000000000000000000000000000000000000000000000d8d726b7177a80000
000000000000000000000000000000000000000000001a784379d99db4200000
00000000000000000000000021c6dadc34965da5fd102f68f3f83aea7f7b249f
Wenn ich mich nicht irre, denke ich, dass die abi-codierten Konstruktorargumente erst im Bytecode von Etherscan auftauchen, sobald jemand sie verifiziert hat.
Zum Beispiel ist dies mein Vertrag und ich kann keines meiner Konstruktorargumente darin finden (auch nicht hex-codiert). etherscan.io/adresse/…
@NagaganeshJaladanki Sie haben Recht, der Bytecode + Parameter ist in der Transaktion vorhanden, die den Vertrag erstellt hat. Überprüfen Sie die Eingabedaten in etherscan.io/tx/… .