Stealth-Adressen auf Ergo

Jan 17 2023
In diesem Artikel werden wir Stealth-Adressen auf der Ergo-Blockchain besprechen, warum man sie verwendet, was sie sind und wie sie möglicherweise implementiert werden. Diskussionen über Discord und den EIP-41-Pull-Request auf GitHub sind noch im Gange, daher ist es möglich, dass die hier erläuterte Implementierung veraltet ist, aber aus heutiger Sicht scheinen wir kurz vor einer Volkszählung zu stehen.

In diesem Artikel werden wir Stealth-Adressen auf der Ergo-Blockchain besprechen , warum man sie verwendet, was sie sind und wie sie möglicherweise implementiert werden. Diskussionen über Discord und den EIP-41-Pull-Request auf GitHub sind noch im Gange , daher ist es möglich, dass die hier erläuterte Implementierung veraltet ist, aber aus heutiger Sicht scheinen wir kurz vor einer Volkszählung zu stehen.

Die Implementierung von Stealth-Adressen auf Ergo entstand aus einer Diskussion zwischen kushtiund scalahubin den Foren, sehen Sie sich das hier an .

Was ist eine Stealth-Adresse?

Stealth-Adressen ermöglichen Transaktionen unter Wahrung der Privatsphäre. Standardmäßig sind alle auf Ergo (und den meisten anderen Blockchains wie Bitcoin) getätigten Zahlungen für jeden sichtbar, der das Hauptbuch betrachtet. Wenn also jemand Ihre öffentliche Adresse kennt, kann er alle Zahlungen verfolgen, die Sie erhalten. Es gibt Blockchains wie Monero, bei denen alle Transaktionen so durchgeführt werden, dass die Privatsphäre standardmäßig gewahrt bleibt und es keine Möglichkeit gibt, sich abzumelden. Ergos Ethos besteht darin, die Wahl in die Hände der Benutzer des Netzwerks zu legen.

Ergo-Manifest :

Privatsphäre ist die Fähigkeit, Barrieren zu schaffen und Grenzen zu errichten, um einen Raum für den Einzelnen zu schaffen. Es liegt an jedem, welche Grenzen und Abgrenzungen er setzt.

Welche möglichen Anwendungsfälle gibt es für Stealth-Adressen auf Ergo?

Mit EIP-41-Stealth-Adressen können Benutzer Zahlungen privat empfangen, ohne dass Personen, die das Hauptbuch überwachen, Zahlungen mit der öffentlichen Adresse eines Benutzers verknüpfen können. Aufgrund ihres nicht interaktiven Charakters können Benutzer ihre Stealth-Adressen frei teilen und Zahlungen erhalten, ohne dass weitere Maßnahmen erforderlich sind.

Um dies anhand eines Beispiels zu demonstrieren:

  1. Bob veröffentlicht seine Stealth-Adresse in seiner Twitter-Biografie
  2. Alice möchte an Bob spenden, also sendet sie ERG unter Verwendung der von Bob öffentlich veröffentlichten Stealth-Adresse
  3. Niemand kann eine Zahlung mit Bob verknüpfen

Wie unterscheiden sich Stealth-Adressen von bestehenden Lösungen wie ErgoMixer?

Da die erwähnten Stealth-Adressen dazu dienen sollen, den Eingang einer Zahlung zu verbergen, unterscheidet sich dies von gemischten Diensten, die Zahlungen verschleiern .

Nehmen Sie unser Beispiel aus dem vorherigen Abschnitt: Bei Verwendung eines Mixers könnte jeder immer noch sehen, dass Bob eine Zahlung erhalten hat, aber er wäre nicht in der Lage, den Ursprung der Zahlung zu ermitteln.

Beide Datenschutzoptionen haben ihre eigenen, einzigartigen Anwendungsfälle!

Wie arbeiten Sie?

Die Lösung basiert auf dem nicht interaktiven Diffie Hellman-Schlüsselaustausch und sieht folgendermaßen aus:

  1. Bob generiert eine öffentliche Adresse zum Teilen, hier gibt es nichts Besonderes, es handelt sich um eine normale Adresse (wir sind derzeit in Gesprächen darüber, einen neuen P2PA-Pay-to-public-App-Adresstyp als Teil des EIP hinzuzufügen, damit Stealth-Adressen verarbeitet werden können nahtlos in Geldbörsen).
  2. Alice verwendet die öffentlich geteilte Adresse, um zufällige Werte zu erstellen, die im Smart Contract verwendet werden, um die Gelder für Bob zu schützen.

const g = this.ec.g;
const u = bobsPublicAddress;
const r = new BN(rand(32));
const y = new BN(rand(32));
const r4 = g.mul(r);
const r5 = g.mul(y);
const r6 = u.mul(r);
const r7 = u.mul(y);

{
    // ===== Contract Information ===== //
    // Name: EIP-0041 Stealth address contract
    // Version: 1.0.0
    val gr = SELF.R4[GroupElement].get
    val gy = SELF.R5[GroupElement].get
    val ur = SELF.R6[GroupElement].get
    val uy = SELF.R7[GroupElement].get

    proveDHTuple(gr,gy,ur,uy)
}

const gr = BOX.r4
const gy = BOX.r5
const ur = BOX.r6
const uy = BOX.r7
const bobsSecret = publicAddress.secretKey

const boxIsSpendable = ur.eq(gr.mul(bobsSecret)) && uy.eq(gy.mul(bobsSecret))

Vollständiges Codebeispiel

Ich habe hier auch ein vollständiges Codebeispiel , das reale Szenarien entweder aus der Perspektive des Senders oder des Empfängers durchführt, wenn Sie mit etwas Code experimentieren möchten.

Danke fürs Lesen.