Po raz pierwszy zauważyłem podział w systemie sieci Midnight, gdy nie był to demonstracja ani czytanie dokumentacji. To było podczas ponownej próby transakcji, która wyglądała na udaną, ale nie zachowywała się jak jedna. Interfejs mówił, że została zrealizowana. Hash istniał. Ale dane, których się spodziewałem, aby pojawiły się po stronie publicznej, nigdy nie pokazały się tam, gdzie obserwowało moje pozostałe narzędzia.
To był moment, w którym sieć Midnight stała się dla mnie rzeczywistością. Nie twierdzenia o prywatności. Nie dyskusja na temat zerowej wiedzy. Sama architektura.
Sieć działa na modelu podwójnego stanu. Jeden stan obsługuje prywatne wykonanie. Drugi rejestruje weryfikowalne publiczne wyniki. Na papierze brzmi to czysto. W praktyce oznacza to, że szybko uczysz się, że potwierdzenie w jednym stanie nie przekłada się automatycznie na potwierdzenie w drugim.
A ta luka to miejsce, gdzie znajduje się większość interesującego tarcia.
Ostatecznie dodałem drabinę ponownych prób do workflow, który pierwotnie zakładał, że pojedyncze przejście będzie wystarczające. Prywatne obliczenia uruchamiały się, generowały dowód, a następnie zakotwiczały swój wynik w przezroczystej warstwie rejestru. Teoretycznie ten łańcuch zdarzeń jest liniowy.
W rzeczywistości zachowuje się bardziej jak przekaźnik.
Czasami dowód przybywa przed stabilizacją publicznego zakotwiczenia. Czasami zakotwiczenie jest publikowane, ale indeksator obserwujący stronę przezroczystą jeszcze nie nadążył. Kilka wczesnych prób nie powiodło się cicho, ponieważ mój system ufał pierwszemu sygnałowi sukcesu, który otrzymał.
To zaufanie musiało zniknąć.
Dodałem opóźnienie ochronne po zakończeniu prywatnego wykonania. Na początku tylko 800 milisekund. To nie jest naukowa liczba. Po prostu coś, co powstrzymało mojego klienta przed natychmiastowym traktowaniem zdarzenia jako ostatecznego. To opóźnienie zmniejszyło liczbę fałszywych potwierdzeń o ponad połowę.
Co brzmi trywialnie, aż zdasz sobie sprawę, co to oznacza operacyjnie.
Architektura podwójnego stanu wprowadza dwie różne definicje ostateczności.
Ostateczność prywatnego stanu oznacza, że obliczenie się zakończyło i istnieje ważny dowód. Ostateczność stanu przezroczystego oznacza, że dowód został zaakceptowany do publicznego rejestru w sposób, który inne systemy mogą zweryfikować.
To nie są te same momenty.
Projekt Midnight celowo je oddziela, ponieważ systemy prywatności mają tendencję do załamywania się, jeśli weryfikacja i wykonanie są zmuszone do tego samego obszaru widoczności. Strona prywatna potrzebuje miejsca do uruchomienia wrażliwej logiki bez ujawniania szczegółów. Strona publiczna musi weryfikować wyniki bez rekonstruowania ukrytych wejść.
Dowód staje się mostem.
Teoretycznie ten most jest deterministyczny. W praktyce zachowuje się bardziej jak system punktów kontrolnych. Dowód przechodzi z prywatnego kontekstu do publicznej weryfikacji, a każdy krok wprowadza małe okno czasowe, w którym rzeczy mogą wyglądać na zakończone, mimo że tak naprawdę nie są.
To okno to miejsce, w którym deweloperzy popełniają błędy.
Pewnej nocy przeprowadziłem prosty test, który ujawnił to wyraźnie. Uruchomiłem tę samą prywatną operację dziesięć razy z rzędu. Prywatny stan potwierdził wszystkie dziesięć natychmiast. Ale przezroczysty rejestr pokazał, że dotarły one w dwóch grupach oddzielonych od siebie o około trzy sekundy.
Nic się nie zepsuło. Dowody były ważne. Ale jeśli twoje workflow oczekiwało synchronicznej widoczności, zinterpretowałbyś połowę tych operacji jako utracone.
Nie zostały zgubione. Po prostu poruszały się przez granicę stanu.
Sieć działa na modelu podwójnego stanu. Jeden stan obsługuje prywatne wykonanie. Drugi rejestruje weryfikowalne publiczne wyniki. Na papierze brzmi to czysto. W praktyce oznacza to, że szybko uczysz się, że potwierdzenie w jednym stanie nie przekłada się automatycznie na potwierdzenie w drugim.
A ta latencja kształtuje wszystko.
Jedną rzeczą, którą cicho zmusza cię do przemyślenia, jest to, jak bardzo polegasz na natychmiastowej przezroczystości.
Większość publicznych łańcuchów traktuje widoczność jako zastępstwo prawdy. Jeśli transakcja pojawia się na łańcuchu, to się wydarzyła. Struktura Midnight komplikuje to założenie. Obliczenie może istnieć prywatnie, zanim sieć potwierdzi je publicznie.
To brzmi jak różnica filozoficzna, aż spróbujesz zbudować coś, co reaguje na obie warstwy.
Moja pierwsza wersja traktowała publiczny stan jako źródło prawdy. Prywatny stan był tylko krokiem pośrednim. Takie podejście powodowało niepotrzebne ponowne próby, ponieważ system zakładał, że brak przezroczystości oznaczał porażkę.
Ostatecznie odwróciłem tę logikę.
Prywatne potwierdzenie stało się sygnałem do czekania, a nie do ponownego uruchamiania.
Próba ponownego uruchomienia przedwcześnie stworzyła podwójne dowody, co z kolei stworzyło niepotrzebne obciążenie weryfikacyjne na przezroczystej warstwie. Gdy przestałem to robić, system ustabilizował się.
Mała lekcja. Ale ujawnia coś głębszego w projekcie Midnight.
Architektura przenosi koszt pewności.
Tradycyjne łańcuchy przenoszą koszt weryfikacji do samego obliczenia. Midnight przenosi część tego kosztu na granicę między prywatnością a przezroczystością. Dowód musi podróżować. Publiczny rejestr musi go zaakceptować. Obserwatorzy muszą go zobaczyć.
Każdy krok dodaje tarcie.
Jest tutaj kompromis, który nie jest często bezpośrednio podawany. Prywatność poprawia się, ponieważ szczegóły wykonania pozostają ukryte. Ale prostota operacyjna maleje, ponieważ sieć teraz działa w dwóch równoległych rzeczywistościach.
Jeden ukryty. Jeden obserwowalny.
Czasami dryfują lekko poza synchronizację.
Wciąż nie jestem całkowicie pewien, jak dużo ten dryf ma znaczenie w dłuższej perspektywie. Może aplikacje nauczą się traktować granicę jako normalną. Może narzędzia to wygładzą.
Ale w tej chwili model podwójnego stanu sprawia, że niezawodność wydaje się mniej binarna, a bardziej proceduralna.
Czekasz. Sprawdzasz. Potwierdzasz ponownie.
Kolejny mały test ujawnił coś innego, czego się nie spodziewałem. Jeśli szybko wprowadzisz wiele prywatnych operacji, przezroczysta warstwa ma tendencję do grupowania ich dowodów przed ich zarejestrowaniem. To grupowanie poprawia wydajność, ale oznacza również, że publiczny rejestr czasami ujawnia wzorce aktywności, nie ujawniając podstawowych danych.
Prywatność zachowana. Czas ujawniony.
Nie jestem jeszcze pewien, czy to stanie się przewagą analityczną, czy po prostu kolejnym dziwactwem, do którego dostosują się deweloperzy.
W pewnym momencie, podczas debugowania tych zachowań, mechanika tokenów w końcu zaczęła mieć sens. Sieć Midnight w końcu opiera się na tokenizowanych zachętach do wspierania weryfikacji dowodów i uczestnictwa w infrastrukturze.
Możesz poczuć, dlaczego ta warstwa staje się konieczna.
Przenoszenie dowodów między stanami to praca. Publiczna weryfikacja to praca. Ktoś musi prowadzić infrastrukturę, która utrzymuje most w uczciwości. Bez zachęt strona przezroczysta stałaby się najsłabszym punktem w architekturze.
To nie jest spekulacyjna warstwa. To bardziej jak paliwo, które utrzymuje dwa stany zsynchronizowane.
Nawet wtedy wciąż mam umiarkowane uprzedzenia dotyczące systemu. Lubię konceptualne oddzielenie prywatności i przezroczystości. Rozwiązuje to problemy, które tradycyjne łańcuchy wciąż próbują rozwiązać za pomocą coraz bardziej skomplikowanej kryptografii nałożonej na jeden stan.
Ale strona operacyjna wciąż wydaje się młoda.
Są momenty, kiedy zastanawiam się, czy deweloperzy zaakceptują ten rytm podwójnego potwierdzenia, czy spróbują ukryć to za pomocą middleware, aż nikt już nie zauważy granicy.
Wczoraj przeprowadziłem kolejny mały eksperyment. Zamiast czekać na publiczne potwierdzenie, uruchomiłem logikę downstream, gdy tylko istniał prywatny dowód, a dopiero później dokonałem uzgodnienia z przezroczystym rejestrem.
Działało. Głównie.
Co rodzi ciche pytanie.
Może model podwójnego stanu Midnight nie tylko oddziela prywatność od przezroczystości.
Może oddziela wykonanie od obserwacji.@MidnightNetwork $NIGHT #night