Neutrino to lekki klient Bitcoina od Lightning Labs, napisany w Go i przeznaczony także dla mobilnych aplikacji z Lightning Network. Korzysta z BIP 157 i BIP 158 do obsługi kompaktowych filtrów bloków. To konkretna biblioteka, a nie ogólna nazwa lekkich portfeli ani zamiennik Full Node, który sam sprawdza wszystkie reguły.
Anna otwiera portfel i oczekuje, że zobaczy otrzymaną płatność. Aby pokazać właściwy stan, aplikacja musi pobrać i przetworzyć dane z sieci Bitcoin. Neutrino może odpowiadać za tę część bez trwałego zapisywania całego łańcucha bloków w telefonie. Blok to grupa transakcji zapisana we wspólnej historii sieci Bitcoin. W programie usługa nazywa się ChainService: zarządza połączeniami, lokalną bazą i synchronizacją nagłówków. Nagłówek to krótkie zestawienie podstawowych danych bloku. Klucz prywatny to tajna liczba służąca do tworzenia podpisu cyfrowego, który zezwala na wydanie środków. Samo użycie Neutrino nie mówi jednak, kto posiada klucze prywatne Anny ani kto zatwierdza wysyłanie. Zarządzanie kluczami, interfejs i kopie zapasowe pozostają zadaniem portfela korzystającego z biblioteki. [1]
Kompaktowy filtr przypomina niewielki indeks wyszukiwania dla jednego bloku. Portfel pobiera go i na własnym urządzeniu sprawdza, czy pasuje do tego, czego szuka. W praktyce porównuje skrypty, czyli warunki wydania konkretnych wyjść bitcoinowych. Wyjście to część transakcji określająca kwotę i warunki jej późniejszego wydania. Portfel nie musi wysyłać drugiej stronie całej listy swoich adresów. Po dopasowaniu pobiera blok i szuka rzeczywistej transakcji. Prawidłowo zbudowany filtr też może dać fałszywie dodatni wynik: blok zostanie pobrany niepotrzebnie, bo szukanego elementu w nim nie ma. Samo dopasowanie nie potwierdza więc otrzymania pieniędzy, kwoty ani możliwości ich wydania. [1] [2] [3]
Anna zmienia telefon i odtwarza portfel. Szukanie tylko od dzisiejszych bloków nie wystarczy, jeśli wcześniej przyjmowała płatności. Aplikacja musi przekazać właściwe obserwowane skrypty i odpowiednio wczesny początek wyszukiwania. Według dokumentacji Rescan bez wskazanego bloku początkowego zaczyna od ostatniego znanego bloku, nie automatycznie od początku całej historii. Działający filtr nie znajdzie adresu, którego portfel nie szuka, ani dawnych płatności w pominiętym zakresie. Trzeba odróżnić zakończone odzyskiwanie od trwającego skanowania. Pusta lista w trakcie tej pracy sama nie dowodzi utraty środków. [1]
Neutrino synchronizuje nagłówki bloków i filtrów. Nagłówki bloków pozwalają sprawdzić powiązania i Proof of Work, czyli dowód wykonanej pracy obliczeniowej, oraz śledzić łańcuch o największej łącznej pracy. To znacznie więcej niż bezkrytyczne przyjęcie salda z serwera, ale mniej niż samodzielne sprawdzenie wszystkich transakcji i reguł przez Full Node. Są to także dwa różne łańcuchy nagłówków. Nagłówki bloków Bitcoina nie zawierają bezpośredniego kryptograficznego zobowiązania do poprawności tych filtrów. Samo sprawdzenie hashy, kryptograficznych odcisków danych, nie wyklucza więc fałszywego, lecz wewnętrznie spójnego zestawu filtrów. Oszczędność pracy ma konkretną granicę zaufania. [2] [4]
Peer to inny komputer w sieci, od którego klient pobiera dane. BIP 157 opiera się na porównywaniu odpowiedzi i obecności przynajmniej jednego uczciwego peera, dzięki któremu można wykryć błędne filtry. Gdy wszystkie połączenia kontroluje ten sam napastnik, sama liczba komputerów nie pomaga. Mogą zgodnie podać fałszywą odpowiedź albo ukryć nowszy stan. Takie odcięcie od uczciwych źródeł wiąże się z Eclipse Attack. Portfel potrzebuje dostępnych i dostatecznie niezależnych źródeł, a nie tylko połączeń. Zielona ikona nie dowodzi, że ma już aktualny i kompletny obraz płatności. [2]
Jan właśnie wysłał Annie pieniądze. Transakcja może najpierw czekać w Mempool, lokalnym zbiorze niepotwierdzonych transakcji węzła, aż górnik włączy ją do bloku. Udokumentowane powiadomienia recvtx i redeemingtx w Neutrino przychodzą przy potwierdzeniu w bloku, a nie już po wejściu do Mempool. Aplikacja pokazująca przychodzące niepotwierdzone płatności potrzebuje dodatkowego mechanizmu. Filtr bloku nie może dostarczyć tej informacji, zanim blok powstanie. Wysłanie, przyjęcie przez peera i potwierdzenie to osobne zdarzenia; brak powiadomienia jeszcze nie oznacza, że Jan niczego nie wysłał. [1]
Dopasowanie filtru jest przydatne tylko wtedy, gdy klient otrzyma również potrzebny blok. Jeśli sieć go teraz nie dostarcza, właściwy wniosek brzmi „jeszcze brakuje danych”, nie „saldo wynosi zero”. Stan może zmienić się także podczas reorganizacji: sieć przyjmuje inną gałąź z większą łączną pracą i odłącza wcześniej dołączone bloki. Rescan zgłasza dołączanie i odłączanie, aby aplikacja mogła przeliczyć zapisy. Prywatność też nie jest absolutna: peer nie dostaje listy szukanych adresów, ale widzi żądania konkretnych bloków i informacje sieciowe o połączeniu. Sposób pozyskiwania danych nadal ma znaczenie. [1] [2]
Lightning Network to sieć płatnicza oparta na Bitcoinie. W kanale płatniczym dwóch uczestników aktualizuje podział wspólnych środków, zamiast zapisywać każdą płatność w bloku Bitcoina. Neutrino dostarcza dane łańcucha; samo nie przechowuje za użytkownika danych potrzebnych do odtworzenia aktualnego stanu kanałów. Odtwarzanie historii portfela i kanałów to zatem różne zadania. README opisuje zapisywanie pobranych filtrów i pobieranie bloków bez ich trwałego przechowywania; rzeczywiste wymagania zależą od wersji i konfiguracji aplikacji. Przed poleganiem na takim portfelu trzeba poznać jego zasady tworzenia kopii, odzyskiwania i działania przy awarii źródeł danych. Mniejsza baza w telefonie nie znosi tych obowiązków. [1] [4]
Pełniejszy obraz uzyskasz, czytając to hasło razem z Compact Block Filters, Compact Block Filters, Full Node, Lightning Network, Eclipse Attack, Bitcoin. Do tego hasła prowadzą również odsyłacze z Compact Block Filters, Compact Block Filters.