Wie generiert man mehrere eth-Adressen aus einem privaten Schlüssel? [Duplikat]

Ist es möglich, verschiedene mehrere eth-Adressen aus einem privaten Schlüssel zu generieren?

Das Ziel ist die Implementierung eines JavaScript-Dienstes, der es einem Benutzer ermöglicht, ein Abonnement mit Kryptowährung zu kaufen.

Aus Benutzersicht sollte Folgendes erscheinen:

  • per Knopfdruck erhält er eine Eth-Einzahlungsadresse;
  • durch nochmaliges Drücken sollte dem Benutzer eine neue eth-Adresse angezeigt werden.

Als Option erwäge ich die Generierung eines neuen Kontos mit einem öffentlichen/privaten Schlüsselpaar für jedes Mal, wenn ein Benutzer auf die Schaltfläche drückt, und das Speichern des gehashten privaten Schlüssels in der Datenbank. Außerdem bräuchte ich einen Arbeiter, der das Netzwerk abhört und Blöcke für die Transaktion auf das generierte Konto überprüft. Aber ich mag es nicht wirklich, den privaten Schlüssel zu speichern und ein neues Schlüsselpaar zu generieren ...

Ich frage mich also, ob es eine andere Möglichkeit gibt, diese Funktion zu implementieren, ohne den privaten Schlüssel in der Datenbank zu speichern und ohne Dienste von Drittanbietern zu verwenden.

@Meshugah Danke für den Link. Aber es gibt nur eine allgemeine Erklärung, wie die Adressen generiert werden, und nichts über mehrere eth-Adressen aus einem privaten Schlüssel, sowie nichts über die Verwendung von JavaScript zur Lösung meines Problems.
Wenn Sie den Beitrag lesen, werden Sie feststellen, dass ein privater Schlüssel nur zu einem öffentlichen Schlüssel führt.

Antworten (3)

Theoretisch kann eine Adresse mehrere private Schlüssel haben ( Wird jede Ethereum-Adresse von (theoretisch) 2 ** 96 privaten Schlüsseln geteilt? ), aber in der Praxis ist dies nicht der Fall - in der Praxis entspricht ein privater Schlüssel einer Adresse (öffentlicher Schlüssel) und und umgekehrt.

Ich habe nicht ganz verstanden, wie Sie in Ihrem Szenario von mehreren Adressen mit demselben privaten Schlüssel profitieren würden.

Wenn Sie nicht mehrere private Schlüssel speichern möchten, besteht eine Möglichkeit darin, einen privaten „Master“-Schlüssel zu speichern und dann einfach zufällige Zeichenfolgen daran anzuhängen („Salt“ in kryptografischer Hinsicht), um verschiedene Adressen zu generieren und nur die Salt-Werte zu speichern.

Danke für den Hinweis. Das ist eine sehr interessante Idee, ein Salz an den privaten Schlüssel des Masters anzuhängen, um eine Eth-Adresse zu generieren. Dies könnte es mir ermöglichen, auf die Verwendung von Diensten oder Bibliotheken von Drittanbietern zu verzichten.
@Lauri, Bitcoin lässt auch nicht zu, dass mehrere Adressen demselben privaten Schlüssel zugeordnet werden. Dies ist für eine solche Zuordnung erforderlich, da pro Transaktion eine neue Adresse verwendet wird. Das Vorhandensein mehrerer UTXOs erfordert die Verwendung mehrerer Adressen und nicht umgekehrt. Bitte bearbeiten Sie Ihre Antwort, um dasselbe widerzuspiegeln.
Danke für den Kommentar @Meshugah . Ich habe jetzt den Bitcoin-Teil entfernt, da er wirklich nicht meine Stärke ist :) Hinzugefügt auch theoretische Informationen über mehrere private Schlüssel.

Eine Möglichkeit besteht darin, eine deterministische hierarchische Brieftasche (ursprünglich von Bitcoin BIP-32 ) zu verwenden, z. B. die Light Wallet, siehe eine verwandte Frage hier . Auf diese Weise wird der private Schlüssel zum privaten „Master“-Schlüssel, der verschiedene untergeordnete Schlüssel ableiten kann. Auf diese Weise muss nur der Ableitungspfad in DB gespeichert werden, nicht jedoch die eigentlichen untergeordneten Schlüssel.

Für die Überwachung von Transaktionen müssen keine privaten Schlüssel gespeichert werden. Der Monitor muss nur die Adresse des Kontos kennen, die aus dem öffentlichen Schlüssel berechnet wird.

Danke. Ich werde diesen Ansatz ausprobieren. Hoffe, es wird für mich funktionieren.

Erweitern Sie Lauris Antwort :

Da beide Ableitungen (privater Schlüssel > öffentlicher Schlüssel > Adresse) deterministisch sind, können Sie nicht mehr als eine Adresse von einem privaten Schlüssel haben.*

Eine Alternative besteht darin, zusätzliche private Schlüssel von einem privaten Hauptschlüssel mit einer gegebenen Ableitungsregel abzuleiten . Diese zusätzlichen privaten Schlüssel entsprechen offensichtlich neuen Adressen. Diese Art der Adressverwaltung wird hierarchisches deterministisches Wallet/HD-Wallet genannt .

Sie richten effektiv Folgendes ein: privater Hauptschlüssel > private Schlüssel (Sie können mehrere davon generieren lassen > öffentlicher Schlüssel > Adresse

eine idee wie man das umsetzt?
Stimmen Sie bitte der Antwort zu. Hier ist die Implementierung: github.com/Meshugah/ERC20-CommonGasWallet
diese Lösung hat sehr wenig Dokumentation. es ist überhaupt nicht klar, was genau es tut
Sicher, aber unter einer Bedingung. Es ist schlecht, es in den Kommentaren zu Stack zu erklären, aber lassen Sie uns einige Regeln brechen, um der Community zu helfen.
Ich werde hier eine Erklärung einfügen, versprechen Sie einfach, eine PR mit diesen Informationen an das Repo zu schieben oder so zu modulieren, wie Sie es für richtig halten.
Linmaos Antwort ist falsch. Dazu bräuchten Sie noch die Bestimmungen des UTXO-Modells (Wallet-Struktur von Bitcoin).
Was ich getan habe, ist eigentlich ziemlich einfach, es gibt so etwas wie ein Fabrikdesignmuster. Für die Architektur führe ich also nur einen Smart Contract aus, der Smart Contracts dynamisch zur Laufzeit erstellen kann. Dies gibt Ihnen effektiv eine Brieftasche (privaten Schlüssel), die Gas enthält, und diese untergeordneten Brieftaschenadressen, die dasselbe Gas verwenden können.
Ich würde mir vorstellen, dass Sie versuchen, dies zu lösen, oder nicht jede Benutzer-Brieftasche zu sehen, und das funktioniert dort. Die Bereitstellung jeder Adresse/Wallet/Vertrag als Funktionsausführung zur Laufzeit ist mit Kosten verbunden. Wenn Sie diese Kosten herausfinden können, lassen Sie es mich bitte wissen, damit wir sie dokumentieren können.
Hoffe, das war nützlich. Lass es mich wissen, wenn du es tust, markiere mich einfach hier, damit ich bitte eine E-Mail-Benachrichtigung erhalte.