Bagaimana kami di @Alchemy mengembangkan dan meluncurkan akun pintar paling hemat gas dalam sejarah akun pintar. 🕶️ Semua dari ide berusia ~3 tahun. Sedikit yang saya tahu saat itu, bahwa ini akan menghemat banyak uang kepada pengguna.
Pada Mei 2023, ada kegemaran di twitter tentang proxy (misalnya ERC1967, klon, dll.) Orang memiliki variabel yang tidak dapat diubah, tetapi mereka menginginkan proxy. Ini tidak mungkin dilakukan – tetapi beberapa dari kami mengambil tantangan itu. Masalahnya bukanlah EVM. Begitulah cara kami memikirkan proxy.
Jadi kami membangunnya-- beberapa versi muncul. Milik saya dan @wighawag keduanya mengikuti konsep yang sama - kita bisa menambahkan yang tidak dapat diubah dengan menyalin irisan memori yang ditentukan ke akhir bytecode yang dikembalikan pada konstruksi. Kode sebenarnya cukup singkat & manis.
(Anda dapat melihat impl lama saya yang saya bangun untuk bersenang-senang 3 tahun yang lalu di sini lmao: )
Ada juga dua cara untuk mengakses argumen yang tidak dapat diubah saat runtime. Yang pertama - cara saya, hanya membaca bytecode proxy mulai dari offset konstan. Sederhana! Cukup muat yang tidak dapat diubah ke dalam memori dan dekode sesuai dengan skema apa pun yang Anda atur.
Yang kedua jauh lebih kompleks, tetapi sedikit lebih hemat gas, dan sangat menarik. Idenya adalah bahwa Anda akan menambahkan yang tidak dapat diubah ke setiap panggilan yang didelegasikan oleh proxy. Mengarah pada akses tidak berubah yang lebih murah dengan mengorbankan kerumitan, dan biaya gas dasar yang lebih tinggi.
Menariknya, Solady (perpustakaan yang sekarang kami gunakan, jangan gunakan demo kecil saya di prod heh), awalnya memilih pendekatan kedua! Tapi sekarang, kita semua telah menyatu pada kesederhanaan, saya tidak tahu ada calldata-appending yang tidak dapat diubah di prod, dan Solady memilih pendekatan yang sama yang saya gunakan.
Jadi bagaimana ini terkait dengan akun? Kasus penggunaan akun pintar yang paling mendasar dan umum melibatkan akun pintar yang "dimiliki" oleh penanda tangan lain. Biasanya, Anda akan melakukan ini dengan menginisialisasi akun pintar dengan alamat pemilik. Tapi saudaraku onchain, ada cara yang lebih baik.
Anda mungkin sudah mengetahuinya -- kami hanya menambahkan alamat penanda tangan ke bytecode proxy. Sederhana. Kemudian, kami benar-benar melewatkan inisialisasi. Mudah. Dan impl tahu persis di mana pemilik itu berada di bytecode (lebih baik lagi, Solady mengurusnya untuk kami).
Dan voila, akun pintar paling kuat yang pernah dibuat sekarang, juga, lebih murah daripada pertukaran Uniswap. Jadi apa yang bisa kita pelajari dari ini?
1. Selalu kejar rasa ingin tahu Anda Mungkin tidak pernah ada akun pintar yang menggunakan teknologi ini jika kami tidak mengejar ide klon dengan argumen yang tidak dapat diubah ini bertahun-tahun yang lalu - hanya karena kami menganggapnya menarik.
2. Hampir selalu ada solusi sederhana Jika Anda tidak dapat menghindari kerumitan, potong kompleksitas menjadi bagian yang lebih kecil dan lebih sederhana. Anda harus dapat menjelaskan semua kode Anda kepada seseorang yang baru mengenal basis kode. Jika Anda tidak bisa, solusi Anda hampir pasti terlalu rumit.
3. Sebenarnya tidak ada yang menghentikan Anda. Jika Anda memiliki ide tentang cara membuat sesuatu yang lebih baik, lakukanlah. Tidak ada yang menghentikan Anda. Saya pikir ini bisa berhasil, mencobanya, dan itu berhasil. Anda mampu melakukan hal-hal luar biasa jika Anda hanya berhenti menahan diri, anon.
Apakah tumpukan Anda sudah terlalu dalam? Semoga utas ini agak menarik. Jika Anda merasa rapi, jadilah teman dan pukul anak laki-laki Anda dengan suka sehingga saya dapat menjangkau lebih dari 5 orang dengan posting saya di sini. Juga, tolok ukur 😸 Kami tidak hanya murah dalam penyebaran.
5,44K