Hvordan vi i @Alchemy utviklet og lansert den absolutt mest gasseffektive smartkontoen i historien til smarte kontoer. 🕶️ Alt fra en ~3 år gammel idé. Lite visste jeg den gangen at dette ville ende opp med å spare brukerne for enorme summer.
I mai 2023 var det denne mani på twitter om proxyer (f.eks. ERC1967, kloner, etc.) Folk hadde uforanderlige variabler, men de ville ha proxyer. Dette var umulig å gjøre – men noen av oss tok utfordringen. Problemet var ikke EVM tho. Det var slik vi tenkte på stedfortredere.
Så vi bygde det – flere versjoner dukket opp. Min og @wighawag fulgte begge det samme konseptet - vi kunne bare legge til de uforanderlige ved å kopiere den angitte delen av minnet til slutten av den returnerte bytekoden ved konstruksjon. Selve koden var ganske kort og søt.
(Du kan se min gamle impl jeg bygde for moro skyld for 3 år siden her lmao:)
Det var også to måter å få tilgang til de uforanderlige argumentene på kjøretid. Den første - min måte, var bare å lese proxyens bytekode fra en konstant forskyvning. Enkel! Bare last de uforanderlige filene inn i minnet og dekode dem i henhold til hvilket skjema du setter opp.
Den andre var mye mer kompleks, men litt mer gasseffektiv, og jævlig interessant. Tanken var at du skulle legge til de uforanderlige i hvert kall som proxyen delegerte. Fører til billigere uforanderlig tilgang på bekostning av kompleksitet og høyere basegasskostnader.
Interessant nok valgte Solady (biblioteket vi nå bruker, ikke bruk min lille demo i prod heh), opprinnelig den andre tilnærmingen! Men nå har vi alle konvergert mot enkelhet, jeg vet ikke om noen calldata-tilføyende immutables i prod, og Solady velger den samme tilnærmingen jeg brukte.
Så hvordan henger dette sammen med kontoer? Det mest grunnleggende, vanlige brukstilfellet for smartkontoer innebærer at de er "eid" av en annen underskriver. Vanligvis vil du gjøre dette ved å initialisere smartkontoen med eieradressen. Men broren min på kjeden, det finnes en bedre måte.
Du har sannsynligvis allerede funnet ut av det - vi legger bare til underskriveradressen til proxyens bytekode. Enkel. Deretter hopper vi helt over initialisering. Lett. Og implen vet nøyaktig hvor den eieren befinner seg i bytecode (enda bedre, Solady tar seg av dette for oss).
Og voila, den kraftigste smartkontoen som noen gang er bygget er nå også billigere enn en Uniswap-swap. Så hva kan vi lære av dette?
1. Forfølg alltid nysgjerrigheten din Det hadde kanskje aldri vært en smart konto som bruker denne teknologien hvis vi ikke hadde forfulgt denne kloner-med-uforanderlige-args-ideen for mange år siden - bare fordi vi syntes det var interessant.
2. Det er nesten alltid en enkel løsning Når du ikke kan unngå kompleksitet, kutt kompleksiteten i mindre, enklere deler. Du skal kunne forklare all koden din til noen som er nye i kodebasen. Hvis du ikke kan, er løsningen din nesten helt sikkert for kompleks.
3. Det er faktisk ingenting som stopper deg. Hvis du har en idé om hvordan du kan gjøre noe bedre, gjør det. Det er ingenting som stopper deg. Jeg trodde dette kunne fungere, prøvde det, og det gjorde det. Du er i stand til utrolige ting hvis du bare ville slutte å holde deg tilbake, anon.
Er stabelen din for dyp ennå? Håper denne tråden var litt interessant. Hvis du syntes det var pent, vær en venn og slå gutten din opp med en like slik at jeg kan nå mer enn 5 personer med innleggene mine her. Også referansene 😸 Vi er ikke bare billige på utplassering..
5,43K