Gibt es geschriebenen Code für die Zuordnung der öffentlichen Adresse zu einem Benutzer?

Ich habe über 2 theoretische Möglichkeiten gelesen, wie wir es tun können

1) Wenn eine einzelne Transaktion mehrere Eingabeadressen hat, können wir davon ausgehen, dass diese Adressen zur selben Brieftasche gehören, also zum selben Benutzer. Wir sollten bedenken, dass Benutzer private Schlüssel nicht teilen. Tatsächlich können viele Benutzer Web-Wallets mit Pools verwenden, sodass diese Dienste als ein einzelner Benutzer behandelt werden.

2) Zweitens können Sie den Änderungsmechanismus in Transaktionen ausnutzen. Der gesamte Wert der nicht verbrauchten Ausgabe sollte als Wechselgeld an den Benutzer zurückgesendet werden. Um die Anonymität zu verbessern, erstellt Bitcoin eine Schattenadresse, die die Änderung zurückerhält, die sich aus jeder Transaktion ergibt. Wenn also eine einzelne Transaktion 2 Ausgaben hat, müssen Sie vorhersagen, welche der Ausgabeadressen tatsächlich demselben Benutzer gehört, der die Transaktion initiiert hat. Wenn einer dieser beiden Ausgänge noch nie zuvor in der Blockchain aufgetaucht ist, während der andere dies getan hat, können wir davon ausgehen, dass derjenige, der noch nie zuvor aufgetaucht ist, die Schattenadresse ist.

Aber gibt es einen öffentlichen Code, der dies in einem optimalen und optimierten Algorithmus erreichen kann? Ich habe einen Algorithmus geschrieben, aber es ist O (n ^ 2), und der Datensatz ist derzeit einfach zu groß, als dass ein solcher Algorithmus funktionieren könnte.

Antworten (1)

Sie können diese beiden Abfragen so schreiben, dass sie nahezu linear Zeit und Platz beanspruchen.

  1. Erstellen Sie eine Hash-Tabelle, die Adressen "Nachbaradressen" zuordnet. Eine Nachbaradresse ist eine Adresse, die neben einer anderen Adresse als Eingabe verwendet wurde. Um die Adressen eines Benutzers zu finden, fragen Sie die Hash-Tabelle nach der Adresse ab. Fügen Sie alle Adressen hinzu, die Nachbarn dieser Adresse sind. Rekurs für alle Nachbarn.

    Dies kann in O(n*k) Zeit und Raum erstellt werden. (n = Anzahl der Transaktionen, k = durchschnittliche Anzahl der Eingaben von unterschiedlichen Adressen pro Transaktion)

  2. Erstellen Sie eine Hash-Tabelle, die Adressen dem Block zuordnet, in dem sie zuerst gesehen wurden. Für jede Adresse jeder Transaktion überprüfen Sie die Hash-Tabelle, um zu sehen, ob sie schon gesehen wurde. Wenn nicht, erstellen Sie einen Eintrag dafür, der auf den aktuellen Block und die aktuelle Transaktion zeigt. Dann können Sie bei der Abfrage schnell feststellen, ob eine Transaktion Adressen enthält, die zum ersten Mal gesehen wurden.

    Dies kann in O(n) Zeit und Raum erstellt werden. (n = Anzahl Eingänge)

(Es muss nicht speziell eine Hash-Tabelle sein. Andere Ansätze würden auch funktionieren.)