Cum am dezvoltat și lansat la @Alchemy cel mai eficient cont inteligent din istoria conturilor inteligente. 🕶️ Totul dintr-o idee veche de ~3 ani. Nu știam atunci că acest lucru va economisi utilizatorilor sume uriașe de bani.
În mai 2023, a existat această nebunie pe Twitter despre proxy (de exemplu, ERC1967, clone etc.) Oamenii aveau variabile imuabile, dar voiau proxy. Acest lucru a fost imposibil de făcut, dar unii dintre noi au acceptat provocarea. Problema nu a fost EVM. Așa ne-am gândit la proxy.
Așa că l-am construit - au apărut mai multe versiuni. Al meu și al meu @wighawag au urmat același concept - am putea doar să adăugăm imuabilele copiind felia de memorie desemnată la sfârșitul codului de octeți returnat la construcție. Codul real a fost destul de scurt și dulce.
(Puteți vedea vechiul meu impl pe care l-am construit pentru distracție acum 3 ani aici lmao:)
Existau și două moduri de a accesa argumentele imuabile în timpul rulării. Primul - modul meu, a fost doar să citesc bytecode-ul proxy-ului pornind de la un offset constant. Simplu! Doar încărcați imuabilele în memorie și decodați-le în funcție de orice schemă pe care o configurați.
Al doilea a fost mult mai complex, dar puțin mai eficient din punct de vedere al gazului și al naibii de interesant. Ideea era să adaugi imuabilele la fiecare apel pe care îl delega proxy-ul. Ceea ce duce la un acces imuabil mai ieftin cu prețul complexității și la un cost mai mare al gazului de bază.
Interesant este că Solady (biblioteca pe care o folosim acum, nu folosiți micul meu demo în prod heh), a optat inițial pentru a doua abordare! Dar acum, cu toții am convergit spre simplitate, nu știu niciun element imuabil care să adauge date de apel în prod, iar Solady optează pentru aceeași abordare pe care am folosit-o eu.
Deci, cum se leagă acest lucru de conturi? Cel mai de bază și comun caz de utilizare a conturilor inteligente implică faptul că acestea sunt "deținute" de un alt semnatar. De obicei, ați face acest lucru inițializând contul inteligent cu adresa proprietarului. Dar fratele meu onchain, există o cale mai bună.
Probabil că v-ați dat seama deja - doar adăugăm adresa semnatarului la bytecode-ul proxy-ului. Simplu. Apoi, sărim complet peste inițializare. Ușor. Și impl știe exact unde se află acel proprietar în bytecode (și mai bine, Solady se ocupă de asta pentru noi).
Și voila, cel mai puternic cont inteligent construit vreodată este acum, de asemenea, mai ieftin decât un swap Uniswap. Deci, ce putem învăța din asta?
1. Urmăriți-vă întotdeauna curiozitatea Poate că nu ar fi existat niciodată un cont inteligent care să folosească această tehnologie dacă nu am fi urmărit această idee de clone cu argumente imuabile cu ani în urmă - doar pentru că am găsit-o interesantă.
2. Există aproape întotdeauna o soluție simplă Când nu puteți evita complexitatea, tăiați complexitatea în părți mai mici și mai simple. Ar trebui să puteți explica tot codul cuiva nou în baza de cod. Dacă nu poți, soluția ta este aproape sigur prea complexă.
3. De fapt, nimic nu te oprește. Dacă aveți o idee despre cum să faceți ceva mai bun, faceți-o. Nimic nu te oprește. M-am gândit că ar putea funcționa, am încercat și a funcționat. Ești capabil de lucruri incredibile dacă ai înceta să te mai reții, anon.
Stiva ta este încă prea adâncă? Sper că acest subiect a fost oarecum interesant. Dacă ți s-a părut frumos, fii prieten și lovește-ți băiatul cu un like, astfel încât să pot ajunge la mai mult de 5 persoane cu postările mele aici. De asemenea, reperele 😸 Nu suntem doar ieftini în ceea ce privește desfășurarea.
5,47K