私たち@Alchemy、スマートアカウントの歴史の中で最もガス効率の高いスマートアカウントを開発し、立ち上げた方法。🕶️ すべて~3年前のアイデアから生まれました。 当時は、これがユーザーに莫大な金額を節約できるとは思ってもみませんでした。
2023年5月、Twitterでプロキシ(ERC1967、クローンなど)についてこのようなブームが巻き起こりました 人々は不変の変数を持っていましたが、プロキシが欲しかったのです。これは不可能でしたが、私たちの何人かは挑戦しました。問題はEVMではありませんでした。 それがプロキシの考え方でした。
そこで私たちはそれを構築し、複数のバージョンが出現しました。 Mineと@wighawagはどちらも同じ概念に従いました--指定されたメモリスライスを構築時に返されたバイトコードの末尾にコピーすることで、不変を追加することができます。 実際のコードはかなり短くて甘かったです。
(あなたはここで私の古いimplを見ることができます 私が楽しみのために作った3年前 lmao: )
実行時に不変引数にアクセスする方法も 2 つありました。 最初の方法は、私のやり方で、プロキシのバイトコードを定数オフセットから読み取るだけでした。簡単! 不変テーブルをメモリにロードし、設定したスキーマに従ってデコードするだけです。
2つ目ははるかに複雑でしたが、わずかにガス効率が高く、非常に興味深いものでした。 その考え方は、プロキシが委任したすべての呼び出しに不変を追加するというものでした。複雑さを犠牲にして、より安価な不変アクセスを実現し、ベースガスコストを高くします。
興味深いことに、Solady(私たちが現在使用しているライブラリ、私の小さなデモを製品では使用しないでください)は、もともと2番目のアプローチを選択しました。 しかし、今では、私たちは皆、シンプルさに収束しており、prodにcalldataを追加する不変のものは知りません。Soladyは私が使用したのと同じアプローチを選択します。
では、これはどのようにアカウントと結びついているのでしょうか? スマートアカウントの最も基本的で一般的な使用例は、別の署名者によって「所有」されることです。 通常、これを行うには、所有者アドレスでスマートアカウントを初期化します。 しかし、私の兄弟のオンチェーン、もっと良い方法があります。
あなたはおそらくすでにそれを理解しているでしょう-プロキシのバイトコードに署名者アドレスを追加するだけです。 簡単。 次に、初期化を完全にスキップします。易しい。 そして、implは、その所有者がバイトコード内のどこにあるかを正確に知っています(さらに良いことに、Soladyがこれを処理します)。
そして、ほら、これまでに構築された中で最も強力なスマートアカウントは、Uniswapスワップよりも安価になりました。 では、このことから何を学ぶことができるのでしょうか。
1. 常に好奇心を追求する 何年も前にこの不変引数を持つクローンのアイデアを追求していなかったら、この技術を使用するスマートアカウントは決して存在しなかったかもしれません--ただ、それが面白いと思ったからです。
2.ほとんどの場合、簡単な解決策があります 複雑さを避けられない場合は、複雑さをより小さく、より単純な部分に切り分けます。コードベースに不慣れな人にすべてのコードを説明できる必要があります。 それができない場合は、ほぼ間違いなくソリューションが複雑すぎます。
3.実はあなたを止めるものは何もありません。 何かをより良くする方法についてのアイデアがあるなら、それをやってください。あなたを止めるものは何もありません。私はこれがうまくいくと思い、試してみました、そしてそれはうまくいきました。 あなたは自分自身を抑えるのをやめるだけで、信じられないほどのことをすることができます、アノン。
スタックはもう深すぎますか? このスレッドが多少面白かったことを願っています。 それがきちんと思ったら、友達になって、あなたの息子に「いいね!」を付けて、ここに投稿して 5 人以上にリーチできるようにしてください。 また、ベンチマーク 😸 私たちは単に展開が安いだけではありません。
5.44K