Cómo en @Alchemy desarrollamos y lanzamos la cuenta inteligente más eficiente en la historia de las cuentas inteligentes. 🕶️ Todo a partir de una idea de ~3 años. Poco sabía en ese entonces que esto terminaría ahorrando a los usuarios grandes sumas de dinero.
En mayo de 2023, hubo una locura en Twitter sobre los proxies (por ejemplo, ERC1967, clones, etc.) Las personas tenían variables inmutables, pero querían representantes. Esto era imposible de hacer, pero algunos de nosotros aceptamos el desafío. Sin embargo, el problema no fue la EVM. Así era como pensábamos en los proxies.
Así que lo construimos, surgieron múltiples versiones. El mío y el @wighawag siguieron el mismo concepto: podríamos simplemente agregar los inmutables copiando la porción de memoria designada al final del código de bytes devuelto en la construcción. El código real era bastante corto y dulce.
(Puedes ver mi viejo impl que construí para divertirme hace 3 años aquí lmao:)
También había dos formas de acceder a los argumentos inmutables en tiempo de ejecución. La primera, a mi manera, fue simplemente leer el código de bytes del proxy a partir de un desplazamiento constante. ¡Sencillo! Simplemente cargue los inmutables en la memoria y decodifique de acuerdo con el esquema que configure.
El segundo era mucho más complejo, pero un poco más eficiente en cuanto a gas, y muy interesante. La idea era que anexaría los inmutables a cada llamada que delegara el proxy. Lo que lleva a un acceso inmutable más barato a costa de la complejidad y un mayor costo del gas base.
Curiosamente, Solady (la biblioteca que usamos ahora, no uses mi pequeña demostración en prod jeh), originalmente optó por el segundo enfoque. Pero ahora, todos hemos convergido en la simplicidad, no conozco ningún inmutable que agregue datos de llamadas en prod, y Solady opta por el mismo enfoque que usé.
Entonces, ¿cómo se relaciona esto con las cuentas? El caso de uso más básico y común de las cuentas inteligentes implica que sean "propiedad" de otro firmante. Normalmente, lo harías inicializando la cuenta inteligente con la dirección del propietario. Pero mi hermano en la cadena, hay una mejor manera.
Probablemente ya lo hayas descubierto: simplemente agregamos la dirección del firmante al código de bytes del proxy. Sencillo. A continuación, omitimos por completo la inicialización. Fácil. Y el impl sabe exactamente dónde se encuentra ese propietario en el código de bytes (aún mejor, Solady se encarga de esto por nosotros).
Y listo, la cuenta inteligente más poderosa jamás construida es ahora, también, más barata que un intercambio de Uniswap. Entonces, ¿qué podemos aprender de esto?
1. Persigue siempre tu curiosidad Es posible que nunca hubiera habido una cuenta inteligente que usara esta tecnología si no hubiéramos perseguido esta idea de clones con argumentos inmutables hace años, solo porque la encontramos interesante.
2. Casi siempre hay una solución sencilla Cuando no puedas evitar la complejidad, córtala en partes más pequeñas y sencillas. Deberías ser capaz de explicar todo tu código a alguien nuevo en la base de código. Si no puedes, es casi seguro que tu solución es demasiado compleja.
3. En realidad, no hay nada que te detenga. Si tienes una idea sobre cómo hacer algo mejor, hazlo. No hay nada que te detenga. Pensé que esto podría funcionar, lo intenté y lo hizo. Eres capaz de cosas increíbles si tan solo dejas de contenerte.
¿Tu pila ya es demasiado profunda? Espero que este hilo haya sido algo interesante. Si lo encontraste genial, sé un amigo y golpea a tu chico con un me gusta para que pueda llegar a más de 5 personas con mis publicaciones aquí. Además, los puntos de 😸 referencia No solo somos baratos en el despliegue...
5.45K