Como nós da @Alchemy desenvolvemos e lançamos a conta inteligente mais eficiente em termos de gás da história das contas inteligentes. 🕶️ Tudo a partir de uma ideia de ~ 3 anos. Mal sabia eu naquela época, que isso acabaria economizando enormes somas de dinheiro para os usuários.
Em maio de 2023, havia essa mania no twitter sobre proxies (por exemplo, ERC1967, clones, etc.) As pessoas tinham variáveis imutáveis, mas queriam proxies. Isso era impossível de fazer - mas alguns de nós aceitaram o desafio. O problema não era o EVM. Era assim que pensávamos em proxies.
Então nós o construímos - várias versões surgiram. O meu e o @wighawag seguiram o mesmo conceito - poderíamos simplesmente anexar os imutáveis copiando a fatia de memória designada no final do bytecode retornado na construção. O código real era bem curto e doce.
(Você pode ver meu antigo impl que construí para me divertir há 3 anos aqui lmao:)
Havia também duas maneiras de acessar os argumentos imutáveis em tempo de execução. O primeiro - meu caminho, era apenas ler o bytecode do proxy a partir de um deslocamento constante. Simples! Basta carregar os imutáveis na memória e decodificá-los de acordo com qualquer esquema que você configurar.
O segundo era muito mais complexo, mas um pouco mais eficiente em termos de gás e muito interessante. A ideia era que você anexasse os imutáveis a cada chamada que o proxy delegasse. Levando a um acesso imutável mais barato ao custo da complexidade e a um custo de gás de base mais alto.
Curiosamente, Solady (a biblioteca que usamos agora, não use minha pequena demonstração em prod heh), originalmente optou pela segunda abordagem! Mas agora, todos nós convergimos para a simplicidade, não conheço nenhum imutável de anexação de dados de chamada em prod, e Solady opta pela mesma abordagem que usei.
Então, como isso se relaciona com as contas? O caso de uso mais básico e comum de contas inteligentes envolve que elas sejam "de propriedade" de outro signatário. Normalmente, você faria isso inicializando a Smart Account com o endereço do proprietário. Mas meu irmão onchain, há uma maneira melhor.
Você provavelmente já descobriu - apenas anexamos o endereço do signatário ao bytecode do proxy. Simples. Em seguida, ignoramos completamente a inicialização. Fácil. E o impl sabe exatamente onde esse proprietário está localizado no bytecode (melhor ainda, Solady cuida disso para nós).
E pronto, a conta inteligente mais poderosa já construída agora também é mais barata do que uma troca Uniswap. Então, o que podemos aprender com isso?
1. Sempre persiga sua curiosidade Talvez nunca tivesse havido uma conta inteligente que usasse essa tecnologia se não tivéssemos perseguido essa ideia de clones com argumentos imutáveis anos atrás - só porque achamos interessante.
2. Quase sempre há uma solução simples Quando você não puder evitar a complexidade, corte a complexidade em partes menores e mais simples. Você deve ser capaz de explicar todo o seu código para alguém novo na base de código. Se você não puder, sua solução é quase certamente muito complexa.
3. Na verdade, não há nada que o impeça. Se você tem uma ideia de como fazer algo melhor, faça-o. Não há nada que o impeça. Eu pensei que isso poderia funcionar, tentei e funcionou. Você é capaz de coisas incríveis se parar de se conter, anon.
Seu stack já está muito profundo? Espero que este tópico tenha sido um pouco interessante. Se você achou legal, seja um amigo e dê um like no seu garoto para que eu possa alcançar mais de 5 pessoas com minhas postagens aqui. Além disso, os benchmarks 😸 Não somos apenas baratos em implantação..
5,46K