Ausführungsunterschied des Methodenaufrufs in MainNet vs. TestNet

Ich habe mir die Liste der neuen Smart Contracts auf Etherscan angesehen, um den Nachmittag zu verbringen, und bin auf diese hier gestoßen:

https://etherscan.io/address/0x70bf9df6967dc96156e76cc43b928a7ef02e159a

Der Vertrag scheint ein einfaches Frage-und-Antwort-Spiel zu sein, aber mir ist aufgefallen, dass die ursprüngliche Antwort hier deutlich zu sehen ist:

https://etherscan.io/tx/0xb479a806fd83e528e635c285b7302a28f0119c4be90ed37232c385bb855f8584

Die Antwort lautet "Ein Telefon", und ich dachte, es würde schnell gestohlen werden, da ich nicht der einzige sein kann, der dies tut. Ich beschloss, es zu nehmen, den Besitzer zu kontaktieren und es in Sicherheit zu bringen. Ich habe einige Tests im TestNet durchgeführt, um zu sehen, ob alles funktioniert (Sie müssen 1 ETH senden, um eine Nachricht zu senden), und es lief gut. Dies ist die Adresse des Testvertrags. Sie können die Transaktionen überprüfen, um den Prozess zu sehen, dem ich folgen wollte:

https://ropsten.etherscan.io/address/0x69e0d22469f654467bcf5c021f3e2162df96e099

Wie Sie sehen können, lief alles gut, also entschied ich mich, es auf dem MainNet zu tun. Obwohl die Nachrichten und alle korrekt sind, hat es meine ETH gefressen und nichts ist passiert. Ich habe den Verlust des Ethers akzeptiert, aber ich frage mich, warum sollte es nicht funktionieren, obwohl es im TestNet funktioniert hat?

Antworten (2)

Ich habe einen Blogbeitrag geschrieben , um Ihr Missgeschick ausführlicher zu beschreiben. Folgendes ist passiert:

  • Unter Verwendung ihres ersten Kontos stellten sie mit dieser Transaktion einen HiddenQuestionSenderVertrag bereit, der Befehle weiterleitet .
  • 12 Tage später setzen sie mit ihrem zweiten Konto ihren X_GAMEVertrag mit dieser Transaktion um .
  • Gleich danach sagen sie mit ihrem ersten Konto, dass sie HiddenQuestionSenderdie Frage mit 0 Ether einrichten StartGameund den Hash NewQuestionmit dieser Transaktion ändern sollen . In den Anrufdaten sehen Sie die Frage, aber nicht die Antwort; aber am Ende ist es egal. Sie können auch den neuen gefälschten Hash finden: 0xaee11ed86334ac3afdac440921f36b90a937dfbc02f43b02a81b763b769fca4a.
  • Gleich danach callen sie wieder mit ihrem zweiten Konto StartGamemit 1,03 Ether bei dieser Transaktion . Beachten Sie die TxReceipt Status: Success.
  • Später haben Sie Ihr Glück mit dieser Transaktion und 1,01 Ether versucht. Sie haben es durch den Vertrag verloren.
  • Irgendwann haben sie ihre Belohnungen mit dieser Transaktion gesammelt , die auch in den internen Transaktionen vonX_GAME aufgeführt ist . Es ist das einzige dort und es ist zu spät, um Sie zu warnen.

Für andere, die dies lesen, wäre es möglich gewesen, etwas Fischiges früher mit web3.eth.getStorageAt(X_GAME.address, slotIndex)und zu erkennen:

  • Finden Sie bei Slot 1heraus, dass questionSenderdies nicht ihre Adresse ist, sondern seltsamerweise die eines Smart Contracts:HiddenQuestionSender
  • Finden Sie bei Slot 2heraus, dass responseHashdies nicht übereinstimmtweb3.sha3(“A phonE”)

Sie hätten Ganache auch verwenden können, um --forkvom Hauptnetz aus das Ergebnis Ihres eigenen Angriffs sicher zu testen .

Segne dich, mein Mann. Dies sollte öffentlich bekannt gemacht werden.

Tut mir leid, dass du darauf hereingefallen bist!

NewQuestionwurde gerufen, bevor Sie versuchten, den Äther zu nehmen.

Ich glaube, das ist die Transaktion, die es getan hat: https://www.etherchain.org/tx/f1df0e4113cdd8e864235ff2bbd472c98703794ae10e923cd51c8aea260f102a/parityTrace . Suchen Sie nach 0x3e3ee859, dem Funktionsselektor für NewQuestion(string,bytes32).

Ah, Danke. Ich werde diesen Teil aus der Antwort entfernen.
Ist das bei Etherscan vorhanden? Wenn nicht, ist das ein Fehler, der behoben werden müsste
Der Honeypot nutzt die Tatsache aus, dass Etherscan nicht alle übergebenen Nachrichten in „internen Transaktionen“ auflistet. Ich denke, die spezifische Einschränkung hier ist, dass Nachrichten mit 0 angehängtem Ether nicht aufgelistet werden.
Oh Mann, das wusste ich nicht. Ich nahm an, dass der Smart Contract, der meine ETH erhielt, etwas zu tun hatte. Sollte das nicht auf der Seite von Etherscan behoben werden?
Ich kenne Etherscans Begründung für das, was sie tun, nicht. Vielleicht möchten Sie sie kontaktieren und fragen.
Ich werde sie auf jeden Fall kontaktieren. Dies ist für den am weitesten verbreiteten Kettenexplorer von Ethereum nicht akzeptabel, es sei denn, es gibt einen wichtigen Grund dafür.