
16 stycznia 2025 r. SSP Wallet v1.9.0 kończy kilkutygodniowy przegląd bezpieczeństwa razem z Halborn dotyczący kontraktów Solidity z obszaru Account Abstraction SSP — Factory i Account Implementation stojących za każdym adresem Ethereum i Sepolia. Audyt wypadł czysto w kwestiach kluczowych: zaledwie trzy znaleziska Informacyjne i dwa o Niskim priorytecie, wszystkie w nieużywanym lub martwym kodzie. Mimo to postanowiliśmy zaadresować każde z nich, ponownie wdrożyć kontrakty i wysłać czystsze wersje w v1.9.0. To ponowne wdrożenie jest przełomową zmianą dla użytkowników Ethereum i Sepolia: wasz deterministyczny adres na tych dwóch łańcuchach zmieni się po aktualizacji.
TL;DR
- Halborn zaudytował część Solidity Account Abstraction SSP: kontrakty Factory i Account Implementation.
- Znaleziska: 3 Informacyjne, 2 Niskie, 0 Średnich, 0 Wysokich. Wszystkie w nieużywanych lub martwych ścieżkach kodu. Wcześniej wdrożone kontrakty były i pozostają bezpieczne.
- Mimo to wdrożyliśmy ponownie, by utrzymać bazę kodu całkowicie czystą — nowe kontrakty Factory i Account Implementation trafiają do v1.9.0.
- Przełomowa zmiana: adresy Ethereum i Sepolia zmieniają się po aktualizacji. Przenieś środki przed aktualizacją lub skontaktuj się ze wsparciem SSP po przewodnik migracji.
- Łańcuchy UTXO — Bitcoin, Zcash, Bitcoin Cash, Flux — nie są objęte zmianą.
Co Halborn zaudytował
Zakresem była strona Solidity kontraktów ERC-4337 z multisig Schnorra, które wysłaliśmy w v1.6.0 i od tego czasu rozwijaliśmy. Konkretnie: repozytorium @runonflux/account-abstraction — kontrakt Factory, który deterministycznie wdraża konto, gdy użytkownik dokonuje pierwszej transakcji, oraz kontrakt Account Implementation, który definiuje, jak to konto waliduje UserOperations, sprawdza podpisy Schnorra i podąża za przepływem bundlera i EntryPointa z ERC-4337.
Zespół techniczny Halborn przepuścił repozytorium przez pełen zestaw testów, jaki rezerwuje dla produkcyjnych inteligentnych kontraktów. Repozytorium, ich słowami, jest mocne, respektuje rekomendacje ERC-4337 i implementuje Schnorra czysto. Ta konkluzja ma znaczenie, bo implementacja Schnorra jest tą częścią projektu, dla której istnieje najmniej wcześniejszych prac — każdy inny element stosu AA był wielokrotnie audytowany w branży, ale agregowane podpisy Schnorra wewnątrz walidatora ERC-4337 to coś, co zbudowaliśmy sami.
Co znaleźli
Raport zawiera 3 znaleziska Informacyjne i 2 o Niskim priorytecie — żadnych Średnich, żadnych Wysokich, żadnych Krytycznych. Pełny raport jest dostępny pod adresem halborn.com/audits/influx-technologies/account-abstraction-schnorr-multisig.
Każde znalezisko siedzi w kodzie, który był albo nieużywany w żywych kontraktach, albo na ścieżce, która nie wykonywała się przeciwko realnym środkom użytkowników — defensywne rusztowanie, pozostałości gałęzi z wcześniejszej iteracji, tego typu rzeczy. Żadne nie opisuje sposobu, w jaki atakujący mógłby zabrać środki, podrobić podpis lub złamać konto. Wdrożone na Ethereum mainnet kontrakty pozostawały w pełni bezpieczne przez całe okno audytu i później.
Dlaczego mimo wszystko wdrożyliśmy ponownie
Dwa powody. Po pierwsze, czysta baza kodu sama w sobie jest formą bezpieczeństwa. Martwy kod, który kompiluje się do wdrożonego kontraktu, to martwy kod, nad którym przyszli audytorzy, integratorzy i kontrybutorzy muszą się zastanawiać. Wycięcie go zmniejsza powierzchnię, na którą każdy przyszły przegląd będzie musiał spojrzeć — mniej gałęzi, mniej założeń, mniej sposobów na błędne odczytanie kontraktu.
Po drugie, gdy masz szansę wysłać wersję adresującą każde znalezisko zamiast wersji, która je odracza, korzystasz z tej szansy. Tak też zrobiliśmy. v1.9.0 jest wydawany przeciwko świeżo wdrożonym kontraktom Factory i Account Implementation, które uwzględniają każdą rekomendację Halborn. Stabilna gałąź repozytorium @runonflux/account-abstraction to teraz main (npm ^1.1.0); gałąź master i npm ~1.0.0 pozostają dostępne dla tych, którzy chcą pozostać na starszych wdrożonych kontraktach.
PRZEŁOMOWA ZMIANA dla użytkowników Ethereum i Sepolia
Ponieważ Factory jest tym, co deterministycznie wyprowadza adres twojego konta z twoich kluczy publicznych, ponowne wdrożenie Factory oznacza, że te same klucze wyprowadzają inny adres. Dla użytkowników ze środkami na Ethereum mainnet lub Sepolii to jest praktyczny skutek v1.9.0: po aktualizacji adres, który SSP pokazuje dla Ethereum lub Sepolii, jest nowy. Jakiekolwiek ETH lub ERC-20 leżące na starym adresie nie ruszą się same.
Są dwa bezpieczne sposoby, by sobie z tym poradzić. Prosta ścieżka to przeniesienie środków ze starego adresu przed aktualizacją — wyślij je do innego portfela albo giełdy, zaktualizuj, a potem wyślij na nowy adres. Druga ścieżka, dla użytkowników, którzy już zaktualizowali, albo mają większe lub bardziej złożone pozycje, to skontaktowanie się ze wsparciem SSP po przewodnik migracji, dzięki czemu pomożemy odzyskać stare środki przy użyciu starych kontraktów.
Łańcuchy UTXO nie są objęte zmianą. Adresy Bitcoin, Zcash, Bitcoin Cash i Flux są wyprowadzane z twoich kluczy bez udziału kontraktu EVM, więc v1.9.0 nie zmienia tych adresów. W grę wchodzą tylko Ethereum i Sepolia.
Więcej w drodze
Ten artykuł obejmuje konkretnie audyt kontraktów AA, w dniu jego wydania. Większa historia — pełen zestaw przeglądów Halborn na portfelu SSP, kontraktach i SDK — została opisana w Wewnątrz audytów Halborn SSP w 2025, gdzie ten audyt został osadzony w kontekście pozostałych dwóch.
Źródło: Notatki wydania SSP Wallet v1.9.0.