Ende März 2018 erhielten einige aktive Mitglieder der Ethereum-Community mysteriöse PGP-verschlüsselte E-Mails mit Einladungen zu einem „dezentralisierten Verein auf der Ethereum-Blockchain“. Der Absender gibt der Community ein Rätsel auf, mit deren Lösung sie Zugang zu der Gemeinschaft bekommen sollen. Im ersten Artikel haben wir das Ethereum-Rätsel theCyber ​​vorgestellt. In diesem Beitrag wird der technische Zugang zu dem theCyberGatekeeper Smart Contract beschrieben.

Finde die Tür zu theCyber

Bevor die Arbeit, welche wir uns zuvor mit unseren wohlüberlegten Ethereum-Transaktionen erarbeitet haben, Früchte tragen können, müssen wir wissen, wo sich der Eingang zu theCyber befindet.

Dazu haben wir noch keine Lösung besprochen und ich habe auch diesmal nicht vor, eine Lösung zu verraten. Das bedeutet aber nicht, dass ich hier nicht hilfreiche Hinweise geben werden.

Wo ist die Tür von theCyber?

Wie wir in der theCyber-Einladung erfahren haben, wird der Zugang zu der Gemeinschaft ​​durch den theCyberGatekeeper Smart Contract geschützt und wir können dort bereits ein wenig Aktivität sehen:

theCyberGatekeeper smart contract 2

Um dem Block # 5330846 können wir sehen, dass drei Abenteurer erfolglos an die theCyber-Tür geklopft haben. Aber ist das wirklich DIE theCyber-Tür?

Schauen wir uns den Code näher an: theCyberGatekeeper enthält die folgenden Zeilen:

theCyberGatekeeper smart contract 3

Wir kennen diesen Teil bereits, im vorherigen Artikel haben wir gesehen, dass 10/250 Spots beansprucht wurden.

thecyber Smart Contract etherscan

Ein paar Tage später sind wir schon bei 47/250. Warten wir also lieber nicht zu lange.

thecyber Smart Contract etherscan

Etherscan.io leistet kein wirkliches Hexenwerk, der Code-Ausschnitt, den wir oben gesehen haben, liefert die Werte. Dies lässt jedoch einen interessanten Schluss zu:

Die Anzahl der tx stimmt nicht mit der Anzahl der Teilnehmer überein … Es muss also einen anderen Weg geben…

Schauen wir uns den nächsten Code-Ausschnitt an:

theCyberGatekeeper smart contract 6

Natürlich könnten wir versuchen, einfach eine Transaktion zu senden und zu schauen was passiert. Das wäre dann aber genauso wenig erfolgreich, wie der Versuch von der Person zuvor.

Wir können sofort aufhören: Wie wir oben lesen können, benötigt die Funktion assignAll() 250 Plätze, die vergeben sind. Da bisher nur 10 beansprucht wurden, wird diese Funktion zurückgesetzt und passieren wird nichts. Wir werden also nicht weit kommen.

Es ist interessant zu sehen, dass 0age die Funktion assignAll() ungeschützt ließ: Jeder kann sie aufrufen, aber nur dann, wenn die Warteschlange der Teilnehmer voll ist. Das macht Sinn, da Smart Contracts das Verhalten durchsetzen werden, unabhängig davon, wer ihn aufruft.

Die Funktion enter() des theCyberGatekeeper Smart Contract

Gehen wir auf die essenzielle Funktion ein: enter().

theCyberGatekeeper smart contract 7

DAS IST ES! Wir haben es gefunden. Sende einfach eine Transaktion an die Funktion enter (), und Du bist drin.

Sesam öffne Dich!

Oder doch nicht … Was ist passiert? Wie im vorherigen Artikel beschrieben, reicht ein Passwort nicht aus. Warum ist das so? Weil etwas die Tür blockiert

Lasst uns einen zweiten Blick auf die enter-Funktion werfen:

theCyberGatekeeper smart contract 8

Die Modifikatoren sind alle in einer einzigen Zeile im verifizierten Vertrag verpackt:

gateOne
gateTwo
gateThree
checkOne
checkTwo
checkThree
checkFour

Wenn du mehr zu Modifikatoren wissen möchtest, findest du hier die offizielle Dokumentation.

Sehen wir uns einen dieser Modifikatoren an:

theCyberGatekeeper smart contract 9

Der Modifikator checkOne() stellt sicher, dass nur eine begrenzte Anzahl von Konten beitreten kann.
Wir können den Modifikator checkOne() in dieser abgespeckten Version nur mit der Funktion enter() verwenden:

heCyberGatekeeper smart contract 10

Kurz gesagt, die Funktion enter() wird nur ausgeführt, wenn die  _; Anweisung des Modifikators erfüllt ist. Mit anderen Worten: die Bedingung entrants_.length <= MAXENTRANTS_ muss als true interpretiert werden, was bedeutet, dass entrants_.length kleiner oder gleich 250 sein muss.

Es scheint, dass diese Modifikatoren noch bearbeitet werden müssen und wir noch etwas Lock-Picking betreiben müssen, um rein zu kommen.

Die Checks

Was bedeuten die Prüfmodifikatoren des Smart Contracts?

  • checkOne() stellt sicher, dass die Anzahl der eingereichten Beiträge das Maximum nicht überschreiten.
  • checkTwo() soll sicherstellen, dass die Interaktion jedes Teilnehmers mit dem Gatekeeper einzigartig ist.
  • checkThree() enthält viele Informationen. Er stellt sicher, dass der bereitgestellte Passcode mit einem der initialisierten Hashes übereinstimmt.
  • checkFour() stellt sicher, dass der angegebene Passcode nur einmal verwendet wird.

Die Gates

Jetzt haben wir geklärt, was die Prüfmodifikatoren bedeuten und nun müssen wir uns einem anderen Satz von Modifikatoren widmen: den Gates.

GateOne

theCyberGatekeeper contract 11

Dieser Modifikator legt Bedingungen fest, von wem eine gültige Transaktion kommen kann. (msg.sender)

GateTwo

theCyberGatekeeper smart contract 12

Dieser Modifikator legt eindeutige Bedingungen für die bereitgestellte Gasmenge fest.

GateThree

theCyberGatekeeper smart contract

Das letzte Gate gibt viele Fragen auf. Es legt drei Bedingungen fest, die sich auf ein Argument mit dem Namen gateKey beziehen.

Was haben wir gelernt?

Wir wissen, dass die Tür, der theCyberGatekeeper Smart Contract, vielleicht nicht dort ist, wo sie zuerst zu sein schien. Wir haben gelernt, dass wir eine Passphrase brauchen, die korrekt ist und vorher nie benutzt wurde, um hineinzukommen. Wir haben auch einige Bedingungen bezüglich der Anzahl der Teilnehmer, einige Anforderungen an die Menge an Gas, die bereitgestellt wird, sowie komplexe Anforderungen bezüglich eines mysteriösen gateKey sehen können.

Fortsetzung folgt

PGP Fingerprint des Redakteurs Wilfried Kopp:
15AF C574 D3F9 F1C3 CCDD E31E 2DCE C4DC 506E 6475

[Bild: FreshPaint/Shutterstock]
Autor
Will hat einen Ingenieurabschluss in Bild- und Signalverarbeitung. Er arbeitete über zwölf Jahre in der industriellen Bildverarbeitung und im Dokumentenmanagement, bevor er sich auf Geschäftsprozessmanagement und Finanzdienstleistungen konzentrierte. Seit 2012 arbeitet er an Blockchain-Projekten, hat die Projekte Ethereum und NXT unterstützt und liebt es Blockchain und dezentralen Technologien zu erklären.

HINTERLASSEN SIE EINE ANTWORT

Please enter your comment!
Please enter your name here