So senden Sie Ether an 11.440 Personen

Wenn Sie die Aktualisierungen in DAO-Edge-Fällen verfolgt haben, haben Sie gehört, dass Ether aus dem extraBalance-Konto an die Benutzer gesendet wird, denen es gehört, und zwar nicht über einen Widerrufsvertrag, sondern direkt an sie. Sie müssen keine Maßnahmen ergreifen, um dies geltend zu machen.

Da es sich bei der Treuhandbrieftasche um ein Multisig handelt, fragen Sie sich möglicherweise, wie dies erreicht werden kann. Werden sie eine Woche damit verbringen, 11.440 einzelne Transaktionen sorgfältig zu unterzeichnen? Werden sie den gesamten Betrag auf ein Konto senden, das von einer einzelnen Person kontrolliert wird, damit sie die Zahlungen ausführen können? Übrigens auch nicht: Dank eines brillanten Vorschlags von Vitalik ist es möglich, alle Übertragungen vertrauenslos durchzuführen, so dass nur eine einzige Übertragung durch die Treuhänder erforderlich ist. Lesen Sie weiter, um herauszufinden, wie.

Transaktionssignierung in Ethereum

Jeder weiß, dass Sie zum Erstellen einer gültigen Ethereum-Transaktion diese zuerst mit Ihrem privaten Schlüssel signieren müssen und dass nur signierte Transaktionen gültig sind. Das ist wahr, aber es ist nicht ganz die ganze Wahrheit.

Der Prozess, mit dem Signaturen in Ethereum validiert werden, wird als “ecrecover” bezeichnet. Dies ist eine Funktion, die eine Nachricht und ihre Signatur aufnimmt und den öffentlichen Schlüssel (und damit die Adresse) zurückgibt, der sie signiert hat. In Ethereum ist die Absenderadresse einer Transaktion nicht explizit in einer Transaktion enthalten. Stattdessen wird ecrecover aufgerufen, und die zurückgegebene Adresse ist die Absenderadresse der Transaktion. Da nur der Eigentümer des privaten Schlüssels dieser Adresse Signaturen generieren kann, die diese Adresse zurückgeben, können nur sie das Netzwerk autorisieren, Geld von ihrem Konto auszugeben.

Was wäre, wenn wir den üblichen Signaturprozess ignorieren und einfach alles ausfüllen würden, was uns für die Transaktionssignatur gefällt? Es stellt sich heraus, dass die Hälfte aller Signaturen in dem Sinne gültig ist, dass ecrecover einen öffentlichen Schlüssel (und damit eine Adresse) zurückgibt. Da wir keine Kontrolle darüber haben, um welche Adresse es sich handelt, haben wir gerade eine Transaktion erstellt, mit der Geld von einer scheinbar zufälligen Adresse ausgegeben werden kann. Wenn wir eine solche Transaktion erstellen und dann die generierte Adresse mit etwas Ether finanzieren, kann die Transaktion genau wie eine normale ausgeführt werden. Wir haben effektiv eine “Single Use Address” erstellt, bei der Geld nur für eine Transaktion ausgegeben werden kann. Wenn wir die Transaktion veröffentlichen und auf vorhersehbare Weise Werte für das Signaturfeld auswählen, können wir jedem beweisen, dass an diese Adresse gesendete Gelder nur von dieser Transaktion verwendet werden können und sonst nichts.

Multisends mit einmaligen Adressen

Das extraBalance-Multisend wird genau so gehandhabt. Zunächst generieren wir eine Reihe von Transaktionen, die Ether an mehrere Adressen senden – 110 davon pro Transaktion – und generieren Adressen für diese mithilfe des oben beschriebenen Prozesses. Für die Signaturfelder geben wir “0xDA0DA0DA0 …” ein – einen vorhersehbaren Wert, damit Sie sicher sein können, dass jemand keinen privaten Schlüssel für die generierte Adresse hat.

Dies führt zu einer Reihe von Transaktionen mit einmaligen Adressen, mit denen diese finanziert werden können. 104 Transaktionen sind immer noch ein paar zu viele, als dass die Treuhänder sie einfach unterschreiben könnten. Daher wiederholen wir den Vorgang noch einmal und erstellen eine weitere Transaktion, die Ether an die 104 Transaktionen sendet, die wir im ersten Schritt generiert haben, und eine einzelne Transaktion mit einer eigenen eindeutigen Adresse erstellt .

Jetzt kann jeder die Transaktionen überprüfen, um sich davon zu überzeugen, dass er die richtige Menge Äther an die richtige Adressliste sendet. Sobald er zufrieden ist, können die Treuhänder eine Zahlung an die Adresse der Stammtransaktion autorisieren. Danach kann jeder die Transaktionen an das Netzwerk senden und den gesamten Prozess starten, der dazu führt, dass Äther an alle auf der Liste gesendet wird – alles mit nur einer einzigen Signatur und ohne dass eine Person das Geld anvertrauen muss.