
Portfel multisig Solana, w którym adres jest zbiorem członków
Portfel multisig potrzebuje dwóch lub więcej kluczy, by zatwierdzić jakikolwiek wydatek. W Bitcoinie adres portfela to po prostu skrót jego własnych reguł: listy kluczy publicznych i liczby „ile podpisów jest wymaganych". Możesz wyliczyć ten adres na kartce, rozdać go i otrzymywać środki na długo przed tym, zanim ktokolwiek dotknie blockchaina.
Solana tradycyjnie tego nie potrafi. Jak wyjaśnia pierwszy artykuł tej serii, dominujące multisigi Solany każą ci wykonać transakcję tworzenia z losowością wybraną przez twórcę, zanim adres portfela w ogóle zaistnieje. Własny program multisig Solany od SSP przyjmuje natomiast podejście Bitcoina. Jest samoinicjujący się: adres portfela jest zbiorem członków.
Jedna uwaga na wstępie: program multisig Solany od SSP ma otwarty kod (RunOnFlux/Solana-Multisig) i obecnie działa wyłącznie na devnecie — sieci testowej Solany. Wdrożenie na mainnecie zależy od zewnętrznego audytu bezpieczeństwa.
Dwa adresy: multisig i vault
Projekt SSP używa dwóch oddzielnych adresów dla każdego portfela multisig.
Adres multisig przechowuje reguły — posortowaną listę kluczy członków, próg (M w „M-z-N") oraz licznik zaproponowanych transakcji. Należy do programu SSP.
Adres vaulta przechowuje pieniądze — SOL i tokeny SPL. Należy do wbudowanego System Program Solany i nie przechowuje własnych danych. Vault to adres depozytowy: ten, który dajesz każdemu, kto chce ci zapłacić.
Oba są Program Derived Address, czyli PDA — adresem bez klucza prywatnego, celowo umieszczonym poza krzywą kryptograficzną, tak by żaden klucz nigdy nie mógł go kontrolować. Tylko program, który go wyprowadził, może autoryzować ruchy z niego. Ten szczegół ma znaczenie na końcu.
Jak adres jest obliczany z członków
To właśnie ta część czyni portfel samoinicjującym się. Aby wyprowadzić adres multisig, prostym językiem: weź dosłowną etykietę multisig, skrót SHA-256 posortowanej listy członków oraz próg; następnie podaj to, wraz z identyfikatorem programu SSP, do funkcji wyprowadzania adresów Solany. Trzy szczegóły zasługują na uwagę.
Członkowie są najpierw sortowani i odfiltrowywani z duplikatów. Portfel 2-z-3 z członkami A, B, C daje dokładnie ten sam adres, niezależnie od tego, czy wypiszesz ich jako C, A, B, czy B, C, A. Kolejność nie ma znaczenia; liczy się tylko zbiór.
Używany jest pełny 32-bajtowy skrót — nigdy wersja skrócona. Obcięcie skrótu otworzyłoby realny atak: napastnik mógłby szukać innego zbioru członków, który haszuje się do tej samej skróconej wartości, a następnie zarejestrować własnych członków pod twoim adresem i wyprowadzić wszelkie środki, które wcześniej wpłaciłeś. Pełny 32-bajtowy skrót czyni to wyszukiwanie astronomicznie kosztownym, więc nigdy się nie zdarza.
Próg jest częścią adresu. Portfel 2-z-3 i portfel 3-z-3 z dokładnie tymi samymi członkami to różne portfele pod różnymi adresami. Reguły są wypalone w tożsamości.
Adres vaulta jest następnie wyprowadzany z adresu multisig plus mały numer indeksu (SSP zawsze używa indeksu 0), więc także vault jest w pełni określony przez zbiór członków i próg.
Praktyczny rezultat: każdy może obliczyć oba adresy offline, zanim wyśle choćby jedną transakcję. Możesz rozdać adres vaulta i otrzymywać środki do portfela, który w łańcuchu jeszcze nie istnieje — właściwość Bitcoina, przeniesiona na Solanę.
Rejestracja bez pozwolenia: każdy może go włączyć
Adres portfela istnieje w chwili, gdy znasz członków. Ale aby z niego wydawać, reguły muszą w końcu zostać zapisane w łańcuchu — program nazywa ten krok initialize.
W większości multisigów Solany odpowiednik tego kroku może wykonać tylko uprzywilejowany twórca. W programie SSP inicjalizacja jest bez pozwolenia: może ją wykonać ktokolwiek. Brak konta twórcy, brak podpisu członka, brak specjalnego pozwolenia. Zwykle usługa relay SSP płaci niewielką opłatę za czynsz i włącza portfel, ale naprawdę nie ma znaczenia, kto to robi.
Brzmi to alarmująco, dopóki nie zobaczysz kontroli bezpieczeństwa. Gdy ktoś inicjalizuje portfel, program ponownie oblicza skrót SHA-256 dostarczonej listy członków i odrzuca transakcję, chyba że ten skrót pasuje do tego wypalonego w adresie. Framework kont Solany niezależnie wiąże adres z tym samym skrótem. Razem te dwie kontrole oznaczają, że kanoniczny adres może przechowywać tylko kanoniczny zbiór członków. Nikt nie może zarejestrować twojego adresu z wybraną przez siebie listą członków — skrót by nie pasował, a transakcja kończy się niepowodzeniem.
Dlaczego nieznajomy inicjalizujący twój portfel nie może ci zaszkodzić
Prześledźmy, co napastnik mógłby faktycznie spróbować.
Inicjalizuje innym zbiorem członków. Inny zbiór haszuje się do innej wartości, która wyprowadza inny adres. Napastnik po prostu stworzył swój własny, niepowiązany portfel gdzie indziej na Solanie — bez połączenia z twoim vaultem, bez roszczeń do twoich środków.
Inicjalizuje twoim zbiorem członków. Skrót pasuje, więc transakcja się udaje — ale wszystko, co zrobił, to zapłacił za ciebie opłatę za czynsz. Portfel jest teraz zarejestrowany dokładnie z regułami, których oczekiwałeś, a napastnik nie jest członkiem, więc nie może niczego zaproponować, zatwierdzić ani wykonać. Pieniądze nigdy nie leżą pod samym adresem multisig — leżą w vaulcie, który należy do systemu i nie może zostać przejęty. Ktokolwiek inicjalizuje portfel i kiedykolwiek to robi, wynik jest ten sam: kanoniczny portfel z poprawnymi regułami.
Próg sprawdzany jest przy wydawaniu, nie przy rejestracji
To ten sam model, którego używa multisig P2WSH Bitcoina, i warto powiedzieć to wprost: próg M-z-N jest egzekwowany tylko wtedy, gdy środki się przemieszczają — nigdy przy rejestracji.
Rejestracja jedynie zapisuje „oto członkowie, oto próg". Nie żąda podpisów, ponieważ nie może wyrządzić żadnej szkody. Prawdziwą bramą jest przepływ wydatku, gdzie program liczy zatwierdzenia i odmawia działania, dopóki wystarczająca liczba członków nie wyrazi zgody. Adres jest skrótem reguł; każdy może go zasilić; tylko prawidłowe podpisy mogą wydawać. Aby przypomnieć sobie, co oznacza „M-z-N", zobacz 2-z-2 vs 2-z-3 vs M-z-N multisig.
Pełny cykl życia, od początku do końca
Składając elementy w całość, oto życie portfela multisig Solany od SSP:
- Wyprowadzenie. Każdy oblicza adresy multisig i vaulta offline na podstawie członków i progu. Bez blockchaina, bez kosztów.
- Wcześniejsze zasilenie. Każdy wysyła SOL lub tokeny na adres vaulta — działa to nawet zanim portfel zostanie zarejestrowany.
- Inicjalizacja. Każdy, zwykle relay SSP, składa transakcję rejestracji bez pozwolenia. Program weryfikuje skrót członków i zapisuje kanoniczne reguły w łańcuchu.
- Propozycja. Członek tworzy propozycję transakcji, przechowywaną zwięźle na dedykowanym koncie propozycji.
- Zatwierdzenie. Każdy członek zatwierdza propozycję, po jednym razie. Zatwierdzenia kumulują się w łańcuchu.
- Wykonanie. Gdy zatwierdzenia osiągną próg, każdy może uruchomić wykonanie. Program najpierw oznacza propozycję jako wykonaną — celowe zabezpieczenie, by nigdy nie uruchomiła się dwukrotnie — a następnie realizuje każdą instrukcję, przy czym sam vault działa jako sygnatariusz.
Ten ostatni krok to miejsce, w którym pozbawiony klucza adres vaulta się opłaca. Ponieważ vault jest PDA bez klucza prywatnego, żaden człowiek ani program nie może przenieść jego środków, podpisując w zwykły sposób. Jedynym wyjściem jest to, że program SSP wykonuje zatwierdzoną propozycję, która osiągnęła próg — „podpisuje" za vault, przedstawiając przepis wyprowadzenia vaulta środowisku uruchomieniowemu Solany, a uprawnienie to otrzymuje wyłącznie dlatego, że jest właścicielem adresu.
Bez twórcy, bez admina, bez rotacji kluczy na miejscu
Dwie ostatnie właściwości spajają projekt.
Zbiór członków i próg są niezmienne. Gdy portfel zostanie zainicjalizowany, żadna instrukcja programu nie może zmienić jego członków ani progu — nie istnieje dla tego ścieżka w kodzie. Aby zmienić, kto kontroluje portfel — co inne systemy luźno nazywają „rotacją kluczy" — tworzysz nowy multisig z nowym zbiorem członków i przenosisz do niego środki. Stary adres zachowuje swoje stare reguły na zawsze.
Nigdy nie ma roli twórcy ani klucza admina. Wiele projektów multisig utrzymuje uprzywilejowane konto, które może nadpisać członków lub zmienić konfigurację. Program SSP nie ma żadnego — nic do skompromitowania, żadnego klucza admina do wyłudzenia, żadnego twórcy do przymuszenia. Członkowie i próg to cała historia.
Ten minimalizm to celowy kompromis: SSP zbudowało mały, deterministyczny prymityw zamiast bogatej w funkcje platformy zarządzania. Następny artykuł, Multisig Solany od SSP a Squads, uczciwie porównuje ten projekt ze Squads V4 — dojrzałym, zaudytowanym, dominującym multisigiem Solany. Dla kontekstu produktu ogłoszenie premiery wsparcia dla Solany opisuje, co pojawiło się w SSP Wallet v1.39.0.
Główna idea jest na tyle mała, by zmieścić się w głowie: w multisigu Solany od SSP adres portfela to odcisk palca jego własnych reguł. Poznaj członków i próg, a poznasz adres. Nic więcej nie jest potrzebne i niczemu innemu się nie ufa.


