Abstrakcja kont na Ethereum opiera się na dwóch kanonicznych adresach, które warto zapamiętać. EntryPoint v0.6 znajduje się pod adresem 0x5FF137D4b0FDCD49DcA30c7CF57E578a026d2789. EntryPoint v0.7, wdrożony na początku 2024 roku, znajduje się pod adresem 0x0000000071727De22E5E9d8BAf0edAc6f37da032. Każda transakcja ERC-4337 w sieci głównej, Arbitrum, Optimism, Base, Polygon i większości pozostałych łańcuchów EVM przechodzi przez jeden z tych dwóch singletonów. Jeśli rozumiesz, co robią te kontrakty i jakie role pełni pięć pozostałych elementów systemu, rozumiesz ERC-4337.
To druga część naszego cyklu o smart kontach. W części pierwszej wyjaśniliśmy, dlaczego EOA nie są dobrym ustawieniem domyślnym. Tutaj zaglądamy pod maskę: poznasz sześć ról, strukturę UserOperation, dowiesz się, co dzieje się podczas wymiany tokena ze smart konta, jakie zmiany wprowadzono między v0.6 a v0.7, jak działają paymastery i publiczne alternatywne pule pamięci transakcji w porównaniu z prywatnymi bundlerami oraz jakich dodatkowych kosztów możesz się spodziewać.
Sześć ról na jednym diagramie
ERC-4337 rozkłada działania, które EOA wykonuje w jednym kroku, na sześciu współpracujących ze sobą aktorów. Żaden z nich nie wymagał hard forka Ethereum — cały system składa się z kontraktów i infrastruktury poza łańcuchem.
- Nadawca (smart konto): portfel kontraktowy, który przechowuje Twoje aktywa i implementuje
validateUserOp. Z perspektywy każdej aplikacji DApp, z którą wchodzi w interakcję, jestmsg.sender. Przykłady: Safe, Kernel, Biconomy Nexus, Coinbase Smart Wallet, Light Account od Alchemy. - UserOperation: struktura przypominająca transakcję (nie jest prawdziwą transakcją Ethereum), opisująca działanie, które chce wykonać nadawca. Użytkownicy podpisują UserOp, a nie transakcje.
- Bundler: węzeł działający poza łańcuchem, który zbiera UserOp z puli pamięci transakcji, symuluje ich wykonanie, łączy je w jedno wywołanie
handleOpsi opłaca gaz L1. Bundlery zarabiają na różnicy między kwotą zwracaną przez nadawcę (lub paymastera) a kwotą płaconą walidatorowi. - EntryPoint: zaufany kontrakt singleton, który iteruje po pakiecie, wywołuje
validateUserOpkażdego nadawcy, wykonuje dane wywołania oraz obsługuje zwroty i wycofania. Na każdym łańcuchu istnieje dokładnie jeden EntryPoint dla każdej wersji. - Paymaster (opcjonalny): kontrakt, który zgadza się opłacać gaz za nadawcę — w ramach sponsoringu (użytkownik nie płaci) albo w zamian za token ERC-20, taki jak USDC.
- Aggregator (opcjonalny): kontrakt, który weryfikuje wiele UserOp za pomocą jednego sprawdzenia podpisu — przydatny w przypadku schematów BLS lub dowodów zk. Obecnie rzadko wdrażany w środowisku produkcyjnym.
Zapamiętaj te role. Reszta artykułu opisuje po prostu ich wzajemną komunikację.
Struktura UserOperation
UserOperation to zestaw pól przyjazny dla JSON-RPC, który po podpisaniu wyraża intencję, ale jeszcze nie zatwierdza jej w L1. Układ v0.7 obejmuje 11 logicznych pól:
sender— adres smart konta.nonce— wartość 256-bitowa, w której górne 192 bity stanowią klucz (równoległy kanał nonce), a dolne 64 bity — licznik. Dzięki temu ERC-4337 obsługuje równoległe wartości nonce, podczas gdy EOA szeregują wszystkie operacje.factoryifactoryData— służą do pierwszego wdrożenia za pomocą CREATE2; po wdrożeniu mają wartość null.callData— wywołanie, które smart konto ma wykonać po walidacji.callGasLimit,verificationGasLimit,preVerificationGas— trzy oddzielne limity gazu.maxFeePerGas,maxPriorityFeePerGas— działają zgodnie z tymi samymi zasadami EIP-1559 co zwykła transakcja.paymasterAndData(v0.6) podzielone napaymaster,paymasterVerificationGasLimit,paymasterPostOpGasLimit,paymasterData(v0.7).signature— nieprzezroczyste bajty, które smart konto interpretuje zgodnie z własnymvalidateUserOp.
Wybór schematu podpisu należy do portfela. Powszechnie stosuje się ECDSA na krzywej secp256k1, ale za tym samym interfejsem mogą działać weryfikacja P-256/passkey, multisig, progi odzyskiwania społecznościowego i podpisy z użyciem kluczy sesyjnych. Cały sens tego rozwiązania polega na tej elastyczności.
Od początku do końca: co dzieje się, gdy smart konto wymienia USDC na ETH
Prześledźmy prawdziwą wymianę i zobaczmy, jak kolejno działają poszczególne role.
- Użytkownik klika „Swap” w interfejsie portfela. Portfel tworzy UserOperation:
sender = 0xUserSafe,callData = swapUSDCforETH(amount)kierowane do Uniswap. - Szacowanie gazu. Portfel wywołuje
eth_estimateUserOperationGasprzez RPC bundlera. Bundler symuluje operację względem EntryPoint i zwraca trzy limity gazu. - Użytkownik składa podpis. Portfel haszuje UserOp z użyciem adresu EntryPoint i identyfikatora łańcucha, prosi użytkownika o autoryzację (passkey, klucz sprzętowy lub inną metodę) i dołącza podpis.
- Wysłanie. Podpisana UserOp jest przesyłana przez
eth_sendUserOperationdo jednego lub kilku bundlerów. Trafia do alternatywnej puli pamięci transakcji — odrębnej sieci P2P, niezależnej od standardowej puli transakcji Ethereum. - Symulacja przez bundlera. Bundler ponownie symuluje operację za pomocą
eth_callwzględemsimulateValidation. Sprawdza reguły dostępu do pamięci masowej ERC-7562: podczas walidacji UserOp może uzyskać dostęp tylko do własnej pamięci masowej, w przeciwnym razie bundler naraża się na atak. - Łączenie w pakiet. Bundler łączy tę UserOp z maksymalnie około 10 innymi w jedno wywołanie
handleOps([...userOps], beneficiary)do EntryPoint. - Wykonanie w łańcuchu. EntryPoint iteruje po operacjach: dla każdej wywołuje
validateUserOpnadawcy, pobiera przedpłatę, a następnie wykonujecallData. Wymiana w Uniswap jest inicjowana przez smart konto. - Zwrot. EntryPoint zwraca nadawcy (lub paymasterowi) niewykorzystany gaz i wypłaca środki na adres beneficjenta bundlera.
Jeśli krok 5 się nie powiedzie, bundler odrzuca operację, a użytkownik widzi kod błędu AAxx. Najczęstsze kody to AA21 (nie opłacono przedpłaty), AA23 (błąd podpisu), AA25 (nieprawidłowy nonce), AA33 (paymaster wycofał wykonanie) i AA40 (przekroczono limit gazu weryfikacji). Zapamiętaj tę listę — te błędy będą się pojawiać.
EntryPoint v0.6 a v0.7
Wersja v0.6 została udostępniona w marcu 2023 roku pod adresem 0x5FF1…2789. Działała, ale miała trzy uporczywe problemy: pojedyncze pole paymasterAndData łączyło trzy wymiary gazu, pakowanie initCode było nieporęczne, a rozliczanie gazu zawyżało opłaty dla nadawców. Wersja v0.7 rozwiązała wszystkie trzy problemy.
Najważniejsze zmiany w v0.7:
- Adres:
0x0000000071727De22E5E9d8BAf0edAc6f37da032(zwróć uwagę na początkowe zera — adres wybrano metodą vanity mining, aby obniżyć koszt gazu danych wywołania; każdy bajt o wartości zero kosztuje 4 jednostki gazu, a bajt niezerowy — 16). - Rozdzielenie pól paymastera:
paymaster,paymasterVerificationGasLimit,paymasterPostOpGasLimitipaymasterDatasą teraz oddzielnymi polami. Ułatwia to szacowanie i zmniejsza ryzyko pominięcia któregoś limitu. - Rozdzielenie fabryki: podobnie
factoryifactoryDatasą oddzielnymi polami zamiast spakowanegoinitCode. - Kara za niewykorzystany gaz: nadawcy płacą 10% niewykorzystanego
callGasLimit/paymasterPostOpGasLimit, co zniechęca do znacznego zawyżania szacunków dla operacji. - Obsługa zgodności z EIP-7702: v0.7 dodała mechanizmy umożliwiające zwykłemu EOA tymczasowe delegowanie do implementacji smart konta. Stały się one podstawą ścieżki aktualizacji EIP-7702 wdrożonej w ramach Pectra.
v0.6 nadal działa i jest używana — wiele portfeli wdrożyło moduł zgodny z v0.7 dopiero w drugiej połowie 2024 roku. Większość łańcuchów przez lata obsługuje równolegle oba EntryPointy.
Paymastery: kto opłaca gaz
Paymaster to kontrakt, który przechowuje stake w ETH w EntryPoint i zgadza się pokrywać gaz za UserOp spełniające jego warunki. Dominują trzy rodzaje:
- Weryfikujący paymaster (sponsorowany). Backend podpisuje zgodę poza łańcuchem; paymaster weryfikuje podpis w łańcuchu i opłaca gaz. Korzystają z niego aplikacje, które chcą umożliwić rozpoczęcie korzystania z usługi bez opłat za gaz — Coinbase Smart Wallet, Farcaster Frames i większość mintów NFT.
- Paymaster ERC-20. Użytkownik płaci w USDC, USDT lub DAI; paymaster wymienia tokeny na ETH po stronie zaplecza (lub korzysta z zapasów ETH). Pimlico, Biconomy i Stackup prowadzą publiczne paymastery tego typu.
- Paymaster tokenowy z permit. Wykorzystuje permit EIP-2612, dzięki czemu użytkownik jednym podpisem podpisuje UserOp i zgodę na wykorzystanie tokenów.
Funkcja validatePaymasterUserOp paymastera działa podczas fazy walidacji EntryPoint. Jeśli jej wykonanie zostanie wycofane, pojawia się błąd AA33. Jeśli zabraknie mu stake, EntryPoint go obciąża, a bundler ponosi stratę — dlatego bundlery prowadzą listy reputacji paymasterów. ERC-7562 określa te zasady reputacji, aby pula pamięci transakcji bundlera była odporna na spam. Te same podstawowe mechanizmy wyjaśniają, dlaczego zasady zatwierdzania DeFi i higieny multisig można bez trudu przenieść do świata 4337: zagrożenia są te same, zmienia się tylko otoczka.
Publiczny alt-mempool a prywatny bundler
Są dwa sposoby, by umieścić UserOp w łańcuchu.
Publiczny alt-mempool: bundlery zgodne z ERC-7562 rozgłaszają UserOp przez sieć libp2p. Każdy, kto uruchamia węzeł Pimlico, Stackup, Alchemy, Etherspot lub Voltaire, może pobrać Twoją operację. To rozwiązanie niewymagające zezwoleń i odporne na cenzurę, ale naraża Cię na te same zagrożenia związane z MEV co zwykłe transakcje Ethereum — searcherzy mogą zobaczyć Twoją operację przed jej włączeniem do bloku.
Prywatny bundler: wysyłasz eth_sendUserOperation bezpośrednio do RPC jednego dostawcy. Dostawca symuluje operację, tworzy pakiet i przesyła go prywatnie, często przez Flashbots. To szybsze rozwiązanie chroniące przed MEV, ale musisz ufać, że bundler nie będzie cenzurować ani wyprzedzać Twojej transakcji. W 2026 roku większość portfeli konsumenckich domyślnie korzysta z prywatnych bundlerów.
Ten kompromis przypomina wybór między publicznym mempoolem a Flashbots Protect w przypadku zwykłych transakcji. Jeśli od czasów L1 nie było Cię przy cyklu życia transakcji, ten wstęp wyjaśnia, co się zmienia, gdy do działania wkracza bundler.
Agregatory, adopcja i koszty
Agregatory to kontrakty, które weryfikują całe pakiety za pomocą jednego sprawdzenia podpisu. Typowym zastosowaniem są podpisy BLS: zbierasz 50 UserOp podpisanych za pomocą BLS, łączysz podpisy w jedno sprawdzenie parowania i oszczędzasz około 95% gazu na podpisach. Adopcja przebiega powoli, ponieważ tworzenie portfeli podpisujących za pomocą BLS jest trudne, a oszczędności na gazie opłacają się dopiero przy dużym wolumenie. W połowie 2026 roku agregatory obsługują mniej niż 1% UserOp w sieci głównej.
Dane o adopcji (I kw. 2026, bundlebear.com): łącznie około 380 milionów UserOp we wszystkich łańcuchach, przy czym większość przypada na Base, Polygon i Arbitrum. Udział sieci głównej wynosi około 6–8% — jest najmniejszy pod względem wolumenu, ale największy pod względem wartości transferów. Coinbase Smart Wallet, Farcaster i Argent dominują wśród aplikacji konsumenckich.
Dodatkowy koszt: UserOp w wersji v0.7 kosztuje około 30 000–40 000 jednostek gazu więcej niż odpowiadająca mu transakcja EOA — to koszt pętli EntryPoint, walidacji i obsługi pakietu. Przy cenie 20 gwei w sieci głównej oznacza to ułamek dolara za operację. Pierwsze wdrożenie konta za pomocą factoryData kosztuje dodatkowo około 250 000 jednostek gazu. W L2, gdzie główny koszt stanowią dane wywołania, narzut procentowy jest jednocyfrowy. W przypadku sponsorowanych UserOp koszt ten ponosi dApp, dlatego w aplikacjach konsumenckich widzisz darmowe transakcje, a w poważnych aplikacjach DeFi — nie. Szerszy wstęp do opłat transakcyjnych wyjaśnia, jak ten narzut przekłada się na różne rynki opłat.
W skrócie: ERC-4337 to sześć ról (nadawca, UserOp, bundler, EntryPoint, paymaster i agregator), jedna struktura, dwa adresy EntryPoint, które warto zapamiętać, oraz narzut około 30–40 tys. jednostek gazu w zamian za dowolne schematy podpisów, sponsorowanie gazu, łączenie operacji w pakiety i równoległe nonce. Trzecia część tej serii dotyczy EIP-7702 — równoległego rozwiązania w Pectra, dzięki któremu istniejące EOA może korzystać z tej samej infrastruktury bez zmiany adresu.



