Jak jsme ve společnosti @Alchemy vyvinuli a spustili absolutně plynově nejúspornější chytrý účet v historii chytrých účtů. 🕶️ To vše z ~3 roky starého nápadu. Tehdy jsem netušil, že to uživatelům nakonec ušetří obrovské sumy peněz.
V květnu 2023 se na twitteru objevilo šílenství ohledně proxy serverů (např. ERC1967, klonů atd.) Lidé měli neměnné proměnné, ale chtěli proxy. Bylo to nemožné – ale někteří z nás tuto výzvu přijali. Problém nebyl v EVM. Takto jsme uvažovali o zástupných orgánech.
Tak jsme to vytvořili - objevilo se několik verzí. Můj i @wighawag se řídily stejným konceptem -- mohli jsme prostě připojit neměnné zkopírováním určeného úseku paměti na konec vráceného bajtkódu při konstrukci. Skutečný kód byl docela krátký a sladký.
(Můžete vidět můj starý impl, který jsem postavil pro zábavu před 3 lety zde lmao: )
Existovaly také dva způsoby přístupu k neměnným argumentům za běhu. První, můj způsob, bylo prostě číst bytecode proxy počínaje konstantním offsetem. Jednoduchý! Stačí nahrát neměnné soubory do paměti a dekódovat je podle libovolného schématu, které nastavíte.
Druhý byl mnohem složitější, ale o něco úspornější a zatraceně zajímavý. Myšlenka byla taková, že byste připojili neměnné ke každému volání, které by proxy delegoval. To vede k levnějšímu neměnnému přístupu za cenu složitosti a vyšších základních nákladů na plyn.
Zajímavé je, že Solady (knihovnu, kterou nyní používáme, nepoužívejte mé malé demo v prod heh), se původně rozhodla pro druhý přístup! Ale teď jsme se všichni shodli na jednoduchosti, nevím o žádných neměnných datech volání s připojením v prod a Solady volí stejný přístup, jaký jsem použil já.
Jak to tedy souvisí s účty? Nejzákladnějším a nejběžnějším případem použití chytrých účtů je, že jsou "vlastněny" jiným podepisujícím. Obvykle se to provádí inicializací chytrého účtu s adresou vlastníka. Ale můj bratře na řetězu, existuje lepší způsob.
Pravděpodobně jste na to již přišli – pouze připojíme adresu podepisujícího k bytekódu proxy. Jednoduchý. Poté inicializaci zcela přeskočíme. Snadný. A impl přesně ví, kde se tento vlastník v bytecode nachází (ještě lépe, Solady se o to postará za nás).
A voilá, nejvýkonnější chytrý účet, jaký byl kdy vytvořen, je nyní také levnější než swap Uniswap. Co se z toho tedy můžeme naučit?
1. Vždy sledujte svou zvědavost Možná by nikdy neexistoval chytrý účet, který by používal tuto technologii, kdybychom se před lety nepustili do této myšlenky klonů s neměnnými argy - jen proto, že nám to připadalo zajímavé.
2. Téměř vždy existuje jednoduché řešení Pokud se nemůžete vyhnout složitosti, rozřežte složitost na menší a jednodušší části. Měli byste být schopni vysvětlit veškerý svůj kód někomu, kdo je v základu kódu nový. Pokud to nedokážete, vaše řešení je téměř jistě příliš složité.
3. Ve skutečnosti vás nic nezastaví. Pokud máte nápad, jak něco vylepšit, udělejte to. Nic vás nezastaví. Myslel jsem si, že by to mohlo fungovat, zkusil jsem to a stalo se. Jste schopni neuvěřitelných věcí, kdybyste se jen přestali držet zpátky.
Je váš stack ještě příliš hluboký? Doufám, že toto vlákno bylo poněkud zajímavé. Pokud vám to přišlo fajn, buďte kamarád a dejte svému chlapci lajk, abych mohl svými příspěvky zde oslovit více než 5 lidí. Také benchmarky 😸 Nejsme jen levní na nasazení..
5,44K