Analytische Berichte · Lektion 3 von 6
Geldflüsse und Graphen visualisieren
8 Min. Lesezeit
Die meisten Leser eines On-Chain-Berichts sehen sich zuerst die Abbildungen und danach den Text an, und manche lesen den Text überhaupt nicht. Ein gutes Flussdiagramm ermöglicht es einem Staatsanwalt, einem Compliance-Beauftragten oder einem Redakteur, innerhalb von zehn Sekunden zu erfassen, wohin das Geld geflossen ist; ein schlechtes legt eine Schlussfolgerung nahe, die von den Belegen nicht gestützt wird. Diese Lektion behandelt die vier Visualisierungen, die Analysten am häufigsten verwenden, wie man sie aus Abfrageergebnissen erstellt und wie man sie korrekt und für alle lesbar hält.
Die Visualisierung nach der Fragestellung auswählen
Beginnen Sie mit der Frage, die der Leser beantwortet haben möchte, nicht mit dem Werkzeug, das gerade geöffnet ist.
| Frage des Lesers | Beste Visualisierung | Was sie ausblendet |
|---|---|---|
| Wie viel ging wohin? | Sankey-Diagramm | Zeitliche Abfolge, einzelne Transaktionen |
| Wie sind diese Adressen miteinander verbunden und über welchen Pfad? | Flussgraph | Beträge, sofern sie nicht beschriftet sind |
| Wann geschah etwas und in welcher Reihenfolge? | Zeitachse | Netzwerkstruktur |
| Welche Adressen gehören zu welcher Entität? | Clusterkarte | Flussrichtung und Zeitablauf |
| Wie hat sich ein Kontostand oder Volumen im Zeitverlauf verändert? | Linien- oder Balkendiagramm | Gegenparteien |
Jede Visualisierung vereinfacht etwas und blendet etwas aus. Ein Bericht, der Betrag, Pfad und Zeit zeigen muss, braucht in der Regel zwei oder drei Abbildungen, die jeweils eine Aufgabe erfüllen, statt einer Abbildung, die alles zugleich darstellen soll.
Sankey-Diagramme
Ein Sankey-Diagramm stellt Geldflüsse als Bänder dar, deren Breite proportional zum übertragenen Wert ist. Es ist nach Matthew Sankey benannt, der es 1898 verwendete, um die Energieeffizienz einer Dampfmaschine darzustellen. Es ist die klarste Art, zu zeigen, wie eine Summe aufgeteilt wurde.
Durchgearbeitetes Beispiel. Eine Angreifer-Adresse hält nach dem Tausch ihrer Beute 941,2 ETH. Ein Sankey-Diagramm zeigt drei von ihr ausgehende Bänder: 600 ETH an einen Cross-Chain-Tauschdienst, 300 ETH an eine Bridge und 41,2 ETH, die unverändert dort blieben. Die Bandbreiten stehen im Verhältnis 600 : 300 : 41,2, sodass der Leser auf einen Blick sieht, dass fast zwei Drittel in eine Richtung flossen.
Regeln für ein korrektes Sankey-Diagramm:
- Werte erhalten. Was in einen Knoten hineinfließt, muss dem entsprechen, was ihn verlässt, zuzüglich dessen, was dort verbleibt. Gebühren, nicht ausgegebene Guthaben und nicht nachverfolgte Beträge müssen als eigene Bänder dargestellt werden („Gebühren 0,002 BTC“, „unbewegt 41,2 ETH“, „nicht nachverfolgt“); sie dürfen niemals stillschweigend verschwinden.
- Eine Einheit pro Diagramm. Mischen Sie keine ETH- und BTC-Bänder. Erstellen Sie entweder ein Sankey-Diagramm pro Vermögenswert oder rechnen Sie jeden Transfer zum jeweiligen Zeitpunkt in eine einzige Währung um und geben Sie die Preisquelle an.
- Ordnen Sie die Spalten nach Hop oder nach Zeit von links nach rechts und geben Sie an, welche Reihenfolge verwendet wird.
- Vermeiden Sie Zyklen. Sankey-Layouts setzen einen Fluss in eine Richtung voraus. Hin- und Rücktransaktionen (siehe Graphmetriken und Muster) gehören in einen Flussgraphen.
Die Daten hinter einem Sankey-Diagramm sind eine Kantenliste: Quelle, Ziel, Wert. Eine Abfrage einer Tabelle mit nachverfolgten Transfers liefert sie direkt:
-- Kantenliste für ein Sankey-Diagramm: übertragener Wert zwischen beschrifteten Entitäten
SELECT
COALESCE(ls.entity, t.from_address) AS source,
COALESCE(lt.entity, t.to_address) AS target,
SUM(t.amount_wei) / 1e18 AS eth_moved, -- Genauigkeit: siehe Hinweis
COUNT(*) AS transfers
FROM traced_transfers t
LEFT JOIN labels ls ON ls.address = t.from_address
LEFT JOIN labels lt ON lt.address = t.to_address
GROUP BY 1, 2
ORDER BY eth_moved DESC;
Die beiden Left Joins ersetzen Adressen durch Entitätsnamen, sofern eine Bezeichnung vorhanden ist, und behalten andernfalls die rohe Adresse bei. Auf die Adresse statt auf einen einzigen Sammelknoten „Unbeschriftet“ zurückzugreifen, ist wichtig: Ein solcher „Unbeschriftet“-Knoten würde nicht zusammengehörige Adressen zusammenführen und Flüsse zwischen ihnen darstellen, die nie stattgefunden haben. Die Joins setzen eine Bezeichnung pro Adresse voraus. Wenn die Bezeichnungstabelle mehrere enthalten kann, behalten Sie zunächst eine einzige bei, wie in der Lektion Joins, Window-Funktionen und CTEs für Flüsse gezeigt; andernfalls vervielfachen sich die Summen. Zwei Hinweise zur Portierbarkeit: Die Positionsangabe GROUP BY 1, 2 funktioniert in den meisten, aber nicht allen Engines, und die Division durch 1e18 erzeugt in vielen Engines eine Gleitkommazahl. Für exakte Werte wandeln Sie den Wert daher zunächst in einen Dezimaltyp mit hoher Genauigkeit um (siehe SQL-Grundlagen für Blockchain-Tabellen).
Flussgraphen
Ein Flussgraph stellt Adressen oder Entitäten als Kästen und Transfers als Pfeile dar. Er ist die naheliegende Visualisierung für Nachverfolgungsarbeit (siehe Transaktionsgraphen: Knoten, Kanten und Richtung).
- Verwenden Sie für Nachverfolgungen ein geschichtetes Layout von links nach rechts, wobei jede Spalte einem Hop oder einem Zeitschritt entspricht. So können Leser dem Geldfluss wie einem Text folgen.
- Verwenden Sie kraftgerichtete Layouts nur zur Untersuchung. In diesen Layouts ist die Position ein Artefakt des Algorithmus: Zwei nahe beieinander gezeichnete Knoten wirken zusammengehörig, auch wenn sie es nicht sind. Nehmen Sie ein solches Layout niemals ohne Erklärung in einen Bericht auf.
- Beschriften Sie Kanten mit Betrag, Datum und einer kurzen Transaktionsreferenz und führen Sie den vollständigen Hash im Anhang auf.
- Unterscheiden Sie Beobachtetes von Abgeleitetem. Zeichnen Sie Transfers, die Tatsachen sind, mit durchgezogenen Pfeilen und Verbindungen, die Schlussfolgerungen sind (ein Abgleich über Betrag und Zeitpunkt, ein Wechselgeld-Output), mit gestrichelten Pfeilen. Setzen Sie den Wahrscheinlichkeitsbegriff daneben. So wird die Unterscheidung zwischen Tatsache und Schlussfolgerung aus der Lektion Vertrauen, Unsicherheit und Sprache in die Abbildung übertragen.
- Zeigen Sie, wo die Nachverfolgung endete. Ein kurzer, mit „nicht weiter nachverfolgt“ oder „Verwahrdienst“ beschrifteter Fortsatz macht deutlich, dass die Grenze eine bewusste Entscheidung ist und nicht das Ende des Geldflusses.
- Halten Sie die Darstellung klein. Ab etwa 30 bis 50 Knoten ist ein Graph nicht mehr lesbar. Fassen Sie Peel-Chains in einem Kasten zusammen („Peel-Chain, 9 Hops“), ebenso Cluster in einem Knoten, und führen Sie die Details im Anhang auf.
Gängige Optionen sind offene Werkzeuge wie Graphviz (geschichtete Layouts), Gephi und Cytoscape (Netzwerkerkundung) sowie Diagrammbibliotheken wie d3. Was auch immer Sie verwenden: Exportieren Sie zusammen mit der Abbildung die zugrunde liegende Kantenliste, damit sie überprüft werden kann.
Zeitachsen
Eine Zeitachse beantwortet die Fragen „wann“ und „in welcher Reihenfolge“. Für juristische und operative Leser ist das oft wichtiger als der Pfad selbst: Wie schnell erreichten die Gelder eine Börse, und blieb Zeit, sie einzufrieren?
- Verwenden Sie durchgehend UTC und geben Sie neben den Zeitangaben die Blockhöhen an.
- Verwenden Sie bei Cross-Chain-Fällen eine Schwimmbahn pro Chain, sodass eine Bridge-Einzahlung auf einer Bahn und deren Freigabe auf einer anderen nebeneinanderliegen.
- Lücken haben eine Bedeutung: Eine Ruhephase von mehreren Wochen wird als leerer Raum sichtbar. Wenn Sie die Achse zur Platzersparnis stauchen, kennzeichnen Sie den Bruch deutlich.
Clusterkarten
Eine Clusterkarte zeigt die Entitätsauflösung: welche Adressen gruppiert wurden und warum. Zeichnen Sie jedes Cluster als einen Rahmen und die Adressen (oder die Anzahl der Adressen) darin. Stellen Sie den Grund jeder Verbindung, etwa gemeinsame Inputs oder eine gemeinsame Einzahlungsadresse, mit einem eigenen Linienstil dar. Wenn die Clustergröße durch die Fläche einer Blase dargestellt wird, geben Sie an, ob sie die Anzahl der Adressen oder den Kontostand codiert. Warnen Sie Leser, wenn ein Cluster verdächtig groß ist, denn Supercluster sind ein bekanntes Fehlermuster (siehe Clusterqualität bewerten).
Irreführende Layouts vermeiden
Visualisierungen führen häufiger durch Layoutentscheidungen als durch falsche Daten in die Irre. Prüfen Sie jede Abbildung anhand dieser Liste:
- Abgeschnittene oder uneinheitliche Achsen: Ein Balkendiagramm, dessen Achse bei 900 ETH beginnt, lässt 950 wie das Doppelte von 925 aussehen. Verwenden Sie dieselbe Skalierung für Diagramme, die miteinander verglichen werden sollen.
- Fläche versus Länge: Wenn der Blasenradius den Wert codiert, vervierfacht eine Verdopplung des Radius die Fläche und übertreibt den Unterschied. Skalieren Sie die Fläche, nicht den Radius.
- Nicht gekennzeichnete logarithmische Skalen: nützlich bei großen Wertebereichen, aber irreführend, wenn der Leser eine lineare Skala annimmt.
- Suggestive Farben: Rot für eine Entität, bei der lediglich ein Verdacht besteht, wirkt wie ein Urteil. Verwenden Sie neutrale Farben und reservieren Sie Warnfarben für feststehende Tatsachen, etwa einen bestätigten Exploit-Contract.
- Selektives Weglassen: Nur die Pfade zu zeigen, die den Verdächtigen erreichen, und gleichzeitig die größeren Flüsse wegzulassen, die woandershin gingen.
- Scheingenauigkeit: „1.912.400,000000 USDC“ in einer Abbildung suggeriert eine Sicherheit bei der Zuordnung, die der Betrag nicht hergibt. Runden Sie Werte in Abbildungen und führen Sie exakte Werte im Anhang auf.
Barrierefreiheit
Berichte werden auf Smartphones gelesen, in Graustufen ausgedruckt und von Menschen mit Farbsehschwäche gelesen. Davon sind etwa 1 von 12 Männern und 1 von 200 Frauen betroffen. Die Richtlinien für barrierefreie Webinhalte (WCAG 2.1 und 2.2) liefern nützliche Zielwerte, auch für Dokumente, die keine Webseiten sind:
- Textkontrast von mindestens 4,5:1 zum Hintergrund (3:1 bei großer Schrift).
- Kontrast von mindestens 3:1 bei bedeutungstragenden grafischen Elementen wie Linien und Bändern.
- Verlassen Sie sich niemals allein auf Farbe, um Bedeutung zu vermitteln: Kombinieren Sie sie mit Beschriftungen, Mustern oder Linienstilen (durchgezogen für Beobachtetes, gestrichelt für Abgeleitetes funktioniert auch in Graustufen).
Geben Sie jeder Abbildung einen Alternativtext oder eine Bildunterschrift, die die Kernaussage nennt („zwei Drittel der Gelder flossen an den Cross-Chain-Tauschdienst“) und nicht nur die Abbildung beschreibt („ein Sankey-Diagramm“). Nehmen Sie außerdem die zugrunde liegende Tabelle in den Anhang auf, damit Leser mit Screenreadern und Prüfer dieselben Informationen erhalten.
Prüfungsschwerpunkt: die Visualisierung auf die Frage des Lesers abstimmen (Sankey-Diagramm für Beträge, Flussgraph für Pfade, Zeitachse für die Reihenfolge, Clusterkarte für die Entitätsauflösung); Regeln für Sankey-Diagramme (Werterhaltung, explizite Gebühren und nicht nachverfolgte Beträge, eine Einheit pro Diagramm, keine Zyklen); eine Kantenliste in SQL erstellen, ohne unbeschriftete Adressen zusammenzuführen; geschichtete gegenüber kraftgerichteten Layouts; durchgezogene Pfeile für Tatsachen und gestrichelte Pfeile für Schlussfolgerungen; zeigen, wo die Nachverfolgung endete; häufige irreführende Entscheidungen (abgeschnittene Achsen, Fläche versus Radius, suggestive Farben, Weglassen); WCAG-Kontrastwerte von 4,5:1 für Text und 3:1 für Grafiken sowie niemals allein auf Farbe vertrauen.
Übungsfragen
Prüfen Sie Ihr Verständnis. Diese Fragen zählen nicht für die Prüfung.
Melden Sie sich an, um Ihren Fortschritt zu speichern und später weiterzumachen. Kostenlos. Anmelden