Ładny wykres też jest projekcją
Surowy chain nie jest szczególnie uprzejmy dla człowieka.
Ma bloki.
Transakcje.
Hash-e.
Stany.
Zdarzenia.
Klucze.
Relacje.
I bardzo dużo rzeczy, które maszyna potrafi czytać szybciej niż człowiek.
Naturalny odruch brzmi więc:
zróbmy wizualizację.
Dobry odruch.
Ale Quax od razu dodaje jedno zdanie:
ładny wykres też jest projekcją.
Wizualizacja nie jest drugim chainem
Warstwa wizualna ma być read-only indexerem / obserwatorem.
Czyta:
- bloki;
- transakcje;
- eventy;
- aktualny stan;
- relacje między obiektami.
Potem tworzy własną reprezentację.
Można to zapisać:
π_V(Chain) = R_V
R_V może być bardzo użyteczne.
Może być nawet znacznie bardziej zrozumiałe dla człowieka niż surowe dane.
Nie staje się jednak przez to nowym truth-groundem.
czytelność ≠ prawdziwość ontologiczna
Interfejs może się mylić.
Indexer może mieć bug.
Graf może coś pominąć.
Kolor może zasugerować relację, której dane faktycznie nie ustanawiają.
Dlatego wizualizacja powinna być traktowana jako reprezentacja chaina, nie jego zastępstwo.
Pipeline
Najprostszy model wygląda tak:
Quax Node
↓ RPC / gRPC / events
Read-only Indexer
↓
Visualization DB / graph
↓
Quax Visualization
Ważna zasada architektoniczna:
nie wiążemy UI na sztywno z wewnętrznym formatem bazy noda.
Node może zmienić storage.
Indexer może przeliczyć reprezentację.
UI może dostać nowy model widoku.
Jeżeli wszystko jest sklejone z jedną tabelą w jednej bazie, wizualizacja przestaje być warstwą projekcji i zaczyna być przypadkowym przedłużeniem implementacji.
Widok materialny
Pierwsza skala może być prawie brutalnie konkretna.
Co faktycznie istnieje na nodzie?
Możemy pokazywać:
genesis.json;- konfigurację;
- bazy danych;
- snapshoty;
- klucze publiczne;
- rozmiary danych;
- aktualny block height.
To jest widok materialny.
Nie mit.
Nie „duch chaina”.
Pliki, dane i maszyna.
Jest przydatny właśnie dlatego, że przypomina:
Protocol ma fizyczną implementację.
Widok kręgosłupa
Najbardziej klasyczny obraz chaina:
B₀ → B₁ → B₂ → …
Każdy blok może pokazywać:
- timestamp;
- proposera;
- podpisy validatorów;
- transakcje;
- root hashes;
- szczególne akty.
To pozwala zobaczyć rytm Protocolu.
Blok po bloku.
Nie trzeba przy tym udawać, że liniowa oś czasu rozwiązuje wszystkie problemy A-002.
Ten widok pokazuje aktualnie rekonstruowaną strukturę chaina.
Nie daje automatycznie cross-history truth.
Widok stanu / inwentarza
Chain to nie tylko kolejka bloków.
Możemy również pokazywać stan jako graf zależności.
Na przykład:
- wallety;
- quaxy;
- Faces;
- Installations;
- domeny;
- Authority;
- TruthClaims;
- relacje parent / child;
- ownership;
- provenance.
W takim widoku ważniejsze od pytania:
„co było w bloku 241?”
może być:
„jak ten obiekt jest obecnie powiązany z innymi?”
To inny rodzaj projekcji tych samych danych.
Widok kosmogoniczny
Tu robi się bardziej ryzykownie i ciekawie.
Interfejs może próbować pokazywać pojęcia takie jak:
- Dimension Overflow;
- alternatywne trajektorie;
- application branches;
- Canon Merge;
- akty Root;
- Emission.
Ale trzeba uważać na Type Discipline.
Dimension Overflow nie jest automatycznie zwykłym forkiem w bazie danych.
A-002 branch nie jest tym samym co application branch.
Canon Merge nie musi być Git merge.
Wizualizacja może używać podobnej geometrii.
Nie może przez to zlewać mechanizmów.
podobny rysunek ≠ ten sam typ zdarzenia
Widok konstytucyjny
Jednym z najbardziej quaxowych widoków może być warstwa pokazująca nie tylko dane, ale reguły tożsamości i transformacji.
Można wizualizować:
Kᶜ;ST;DO;CT;IB;MDO;- wersje Protocolu;
- momenty zachowania identity;
- momenty jawnego zakończenia identity.
To może być bardzo ważne, bo użytkownik widziałby nie tylko:
„co się zmieniło?”
ale również:
„jak system klasyfikuje tę zmianę względem identity?”
Jedna topologia, wiele skal
Interfejs nie musi być jednym ekranem.
Może pozwalać przechodzić przez skale:
plik → rekord → transakcja → blok → gałąź → epoka → topologia → konstytucja
Każda skala odpowiada na inne pytania.
Na poziomie pliku interesuje nas konkretna implementacja.
Na poziomie transakcji — działanie.
Na poziomie bloku — konsensus i finalizacja.
Na poziomie gałęzi — relacje rozwoju.
Na poziomie konstytucji — reguły, które określają dopuszczalność i identity.
Nie ma jednego widoku, który pokazuje wszystko bez straty.
I to jest bardzo zgodne z całym modelem projekcji Quaxa.
UI może mieć własne błędy projekcji
Wizualizacja jest szczególnie niebezpieczna wtedy, kiedy wygląda profesjonalnie.
Człowiek ma naturalną skłonność ufać temu, co jest:
- równo wyrównane;
- animowane;
- podpisane;
- pokolorowane;
- połączone eleganckimi liniami.
Dlatego warstwa wizualna powinna umożliwiać przejście od reprezentacji do Evidence.
Na przykład kliknięcie relacji może prowadzić do:
- transaction ID;
- block ID;
- podpisów;
- source event;
- TruthClaim;
- relewantnych reguł.
Nie po to, żeby każdy użytkownik ręcznie audytował kryptografię.
Po to, żeby obraz nie zamykał drogi do danych, które reprezentuje.
Wizualizacja nie kanonizuje
Jeżeli graf pokazuje obiekt jako „kanoniczny”, musi to wynikać z Protocolu.
Jeżeli UI narysuje zieloną koronę nad jakimś rekordem, sama korona niczego nie kanonizuje.
Podobnie:
- animacja Authority nie daje Authority;
- ikonka Truth nie tworzy Truth;
- gruba linia nie jest Evidence;
- etykieta
Rootnie ustanawia RootHoldera.
UI może pokazywać status.
Nie może go samodzielnie produkować.
A-002 nie znika za interfejsem
Jeżeli przyjmujemy A-002 wewnątrz Quaxa, wizualizator także znajduje się w świecie historycznym.
Indexer ma bazę.
Baza ma stan.
Kod ma wersję.
Cache ma zawartość.
Nie ma powodów, żeby traktować tę warstwę jak magicznego obserwatora stojącego poza historią.
Dlatego:
VisualizationFinality też nie jest CrossHistoryTruth.
To nie jest osobny formalny termin Protocolu.
To po prostu konsekwencja tej samej dyscypliny: reprezentacja nie dostaje wyjątkowego statusu dlatego, że jest wygodna.
Po co więc to wszystko wizualizować?
Bo człowiek potrzebuje reprezentacji.
Quax nie jest projektem przeciwko mapom.
Jest projektem przeciwko myleniu mapy z tym, co mapuje.
Dobra wizualizacja może pokazać strukturę, której nie da się sensownie czytać jako surowego JSON-a.
Może odsłonić lineage.
Pokazać Authority.
Uwidocznić moment CT albo IB.
Pozwolić zobaczyć chain jako proces, stan, inwentarz albo konstytucję.
I jednocześnie cały czas przypominać:
to, co widzisz, jest
R_V. Chain jest tym, co ta reprezentacja próbuje ci pokazać.