Pada tahun Ethereum, sumber daya terbatas sampai saat ini dan diberi harga melalui satu sumber daya yang disebut “Gas.” Gas adalah unit pengukuran yang mengukur “upaya komputasi” yang diperlukan untuk memproses transaksi atau blok tertentu. Gas menyatukan jenis “perhitungan” terpanjang, yang paling penting meliputi:
Perhitungan mentah (misalnya, ADD, MULTIPLY);
Baca, tulis, dan tulis ke penyimpanan Ethereum (seperti SSTORE, SLOAD, ETH transfer);
Bandwidth data;
Biaya menghasilkan bukti ZK-SNARK untuk blok.
Misalnya, transaksi yang saya kirim ini menghabiskan total 47.085 Gas. Ini termasuk: (i) biaya dasar sebesar 21.000 Gas, (ii) 1.556 Gas untuk byte calldata yang disertakan sebagai bagian dari transaksi, (iii) 16.500 Gas untuk penyimpanan baca dan tulis, (iv) 2.149 Gas untuk menghasilkan log, dan sisanya untuk eksekusi EVM. Pencucian Uang yang harus dibayar pengguna sebanding dengan gas yang dikonsumsi oleh transaksi. Sebuah Blok dapat berisi hingga 30 juta gas long, dan harga gas terus disesuaikan melalui mekanisme penargetan EIP-1559 untuk memastikan bahwa setiap Blok mengandung rata-rata 15 juta gas.
Pendekatan ini memiliki satu keuntungan utama: karena semuanya digabungkan menjadi satu sumber daya virtual, desain pasar sangat sederhana. Sangat mudah untuk mengoptimalkan transaksi untuk meminimalkan biaya, relatif mudah untuk mengoptimalkan blok untuk membebankan biaya setinggi mungkin (tidak termasuk MEV), dan tidak ada insentif aneh untuk mendorong beberapa transaksi untuk digabungkan dengan transaksi lain untuk menghemat biaya.
Namun, ada inefisiensi dengan pendekatan ini: ia memperlakukan sumber daya yang berbeda seolah-olah mereka dapat dikonversi satu sama lain, ketika kendala mendasar yang sebenarnya tidak sama. Untuk memahami hal ini, Anda dapat melihat grafik berikut terlebih dahulu:
gas limit memberlakukan batasan:
Kendala keamanan mendasar yang sebenarnya seringkali lebih dekat dengan:
Perbedaan ini menyebabkan batasan gas untuk secara tidak adil mengecualikan blok yang benar-benar aman, menerima blok yang sebenarnya tidak aman, atau keduanya.
Jika ada n sumber daya dengan batas keamanan yang berbeda, maka gas satu dimensi dapat membuat throughput hingga long Drop n kali. Akibatnya, long ada minat pada konsep gas kerinduan, dan dengan EIP-4844, kami sekarang benar-benar menerapkan gas kerinduan pada Ethereum. Artikel ini membahas keuntungan dari pendekatan ini, serta prospek untuk peningkatan lebih lanjut.
Blob: gas terpanjang di Dencun
Pada awal tahun ini, ukuran blok rata-rata adalah 150 kB. Sebagian besar dari ini adalah data rollup: Layer 2 protokol menyimpan data on-chain. Data ini sangat mahal: meskipun Biaya Transaksi pada Rollup hanya 5-10 kali lipat dari transaksi yang sesuai pada Ethereum L1, bahkan biaya seperti itu terlalu tinggi untuk kasus penggunaan long.
Jadi mengapa tidak Drop biaya gas untuk calldata (saat ini 16 gas untuk byte bukan nol dan 4 gas untuk byte nol) untuk membuat rollups lebih murah? Kami telah melakukan ini sebelumnya, dan kami dapat melakukannya lagi sekarang. Tetapi jawabannya di sini adalah bahwa ukuran maksimum blok adalah 30.000.000 / 16 = 1.875.000 byte bukan nol, dan jaringan hampir tidak dapat atau hampir tidak dapat menangani blok sebesar ini. Menurunkan biaya sebesar 4x lagi meningkatkan maksimum menjadi 7,5 MB, yang menimbulkan risiko signifikan terhadap keamanan.
Masalah ini akhirnya diselesaikan dengan memperkenalkan data terpisah yang ramah rollup yang lebih pendek (disebut blob) di setiap blok.
Ada harga dan batasan yang berbeda untuk kedua sumber daya ini: setelah Hard Fork Dencun, long maksimum Ethereum Blok dapat berisi (i) 30 juta gas dan (ii) 6 blob, yang masing-masing dapat berisi sekitar 125 kB calldata. Kedua sumber daya memiliki harga terpisah dan disesuaikan melalui mekanisme penetapan harga terpisah yang serupa dengan EIP-1559, dengan tujuan menggunakan rata-rata 15 juta gas dan 3 blob per blok.
Akibatnya, biaya Rollup turun dengan faktor 100, volume pada Rollup meningkat lebih dari 3 kali, dan ukuran Blok maksimum teoritis hanya meningkat sedikit: dari sekitar 1, 9 MB menjadi sekitar 2, 6 MB.
Catatan: Rollup Pencucian Uang, disediakan oleh Growthepie.xyz. Dencun fork terjadi pada 13 Maret 2024, memperkenalkan gumpalan harga terpanjang.
Klien gas dan stateless terpanjang
Dalam waktu dekat, masalah serupa akan muncul dengan bukti tersimpan untuk klien tanpa kewarganegaraan. Klien stateless adalah jenis klien baru yang akan dapat memvalidasi rantai tanpa harus menyimpan sejumlah besar atau data apa pun secara lokal. Klien stateless melakukan ini dengan menerima bukti bagian tertentu dari keadaan Ethereum bahwa transaksi di blok itu perlu diakses.
Diagram di atas menunjukkan klien stateless yang menerima Blok dan bukti nilai saat ini dari bagian tertentu dari state (misalnya, saldo akun, kode, penyimpanan) yang disentuh oleh eksekusi Blok tersebut, yang memungkinkan Node memvalidasi Blok tanpa penyimpanan apa pun.
Biaya baca penyimpanan 2100-2600 gas, tergantung pada jenis baca, dan penulisan penyimpanan lebih mahal. Rata-rata, satu blok melakukan sekitar 1.000 pembacaan dan penulisan penyimpanan (termasuk pemeriksaan saldo ETH, panggilan SSTORE dan SLOAD, pembacaan kode kontrak, dan operasi lainnya). Namun, maksimum teoritis adalah 30.000.000 / 2.100 = 14.285 dibaca. Beban bandwidth klien stateless sebanding dengan angka itu.
Rencana saat ini adalah untuk dukungan klien tanpa kewarganegaraan dengan mengubah desain pohon Negara Bagian Ethereum dari pohon Merkle Patricia menjadi pohon Verkle. Namun, pohon Verkle tidak tahan kuantum dan tidak optimal untuk sistem bukti STARK yang lebih baru. Akibatnya, orang terlama tertarik untuk mendukung klien tanpa kewarganegaraan dengan pohon Merkle biner dan STARK, baik melewatkan Verkle sama sekali atau meningkatkan beberapa tahun setelah transisi Verkle setelah STARK menjadi lebih matang.
Bukti STARK berdasarkan cabang pohon hash biner memiliki long banyak keuntungan, tetapi kelemahan utamanya adalah long waktu yang diperlukan untuk menghasilkan bukti: Pohon verkle dapat membuktikan lebih dari 100.000 nilai per detik, sementara STARK berbasis hash biasanya hanya membuktikan beberapa k hash per detik, dan setiap nilai harus mengandung “cabang” long hash.
Mempertimbangkan angka-angka yang diprediksi hari ini dari sistem bukti yang sangat dioptimalkan seperti Binius dan Plonky3, serta hash eksklusif seperti Vision-Mark-32, sepertinya kita akan berada dalam kisaran praktis untuk beberapa waktu di mana membuktikan 1000 nilai per detik layak, tetapi membuktikan 14.285 nilai tidak. Blok rata-rata akan baik-baik saja, tetapi Blok yang berpotensi terburuk (diterbitkan oleh penyerang) akan mengganggu jaringan.
Pendekatan default kami untuk menangani kasus tersebut adalah dengan mengubah harga: meningkatkan biaya penyimpanan bacaan untuk mengurangi maksimum per blok ke tingkat yang lebih aman. Namun, kami telah melakukan ini long kali, dan jika kami melakukannya lagi, itu akan membuat aplikasi terlalu long terlalu mahal. Pendekatan yang lebih baik adalah gas: batasi dan isi akses penyimpanan secara terpisah, menjaga penggunaan rata-rata pada 1.000 kunjungan penyimpanan per blok, tetapi menetapkan batas atas per blok, seperti 2000.
Di mana-mana gas terpanjang
Sumber daya lain yang patut dipertimbangkan adalah peningkatan ukuran status: operasi yang meningkatkan ukuran status Ethereum, yang kemudian perlu disimpan oleh simpul penuh. Ukuran negara meningkat adalah unik karena alasan untuk membatasinya semata-mata berasal dari penggunaan berkelanjutan jangka long, bukan puncak.
Oleh karena itu, mungkin berharga untuk menambahkan dimensi gas terpisah untuk operasi yang meningkatkan ukuran negara (misalnya, SSTORE nol-ke-nol, pembuatan kontrak), tetapi tujuannya berbeda: kita dapat menetapkan harga mengambang untuk long wick candle pada penggunaan rata-rata tertentu, tetapi tidak menetapkan batas per Blok sama sekali.
Ini menunjukkan properti yang kuat dari gas long dimensi: memungkinkan kita untuk long wick candle setiap sumber daya secara terpisah dan bertanya (i) berapa penggunaan rata-rata ideal long kurang? (ii) Berapa maksimum penggunaan aman per Blok long kecil? Alih-alih mengatur harga gas berdasarkan nilai maksimum setiap blok dan membiarkan penggunaan rata-rata mengikuti, kami memiliki 2n derajat kebebasan untuk mengatur parameter 2n, menyesuaikan setiap parameter sesuai dengan pertimbangan keamanan jaringan.
Kasus yang lebih kompleks, seperti ketika pertimbangan keamanan dari dua sumber daya dijumlahkan sebagian, dapat ditangani dengan membuat Kode Operasi atau sumber daya mengkonsumsi sejumlah jenis gas long tertentu (misalnya, SSTORE nol-ke-bukan nol mungkin mengkonsumsi 5.000 attestation gas klien stateless dan 20.000 gas ekspansi penyimpanan).
Maks per transaksi (transaksi yang menghabiskan lebih banyak data atau perhitungan)
Biarkan x1 menjadi biaya gas data dan x2 menjadi biaya gas yang dihitung, sehingga dalam sistem gas satu dimensi kita dapat menulis biaya gas transaksi:
Dalam skenario ini, kami mendefinisikan biaya gas transaksi sebagai:
Artinya, transaksi tidak dibebankan berdasarkan data ditambah perhitungan, tetapi pada sumber daya mana dari dua sumber daya yang dikonsumsi paling lama. Ini dapat dengan mudah diperluas untuk mencakup dimensi yang lebih long (e.g. max (…, x3 ∗ penyimpanan \ _access)).
Seharusnya mudah untuk melihat bagaimana ini dapat meningkatkan throughput sambil menjaga keamanan. Secara teoritis, jumlah maksimum data dalam satu blok masih GasLIMIT/x1, yang persis sama dengan skema gas satu dimensi. Demikian pula, jumlah maksimum teoritis perhitungan adalah GasLIMIT / x2, yang persis sama seperti dalam skema gas satu dimensi. Namun, biaya gas dari setiap transaksi yang mengkonsumsi data dan perhitungan turun.
Ini mungkin skema yang diadopsi dalam EIP-7623 yang diusulkan untuk mengurangi ukuran blok maksimum sambil terus meningkatkan jumlah gumpalan. Mekanisme yang tepat dalam EIP-7623 sedikit lebih rumit: ia menjaga harga calldata saat ini pada 16 gas per byte, tetapi menambahkan harga dasar 48 gas per byte; Semakin besar pembayaran transaksi (16 * byte + ution \ _Gas) dan (48 * byte). Akibatnya, EIP-7623 mengurangi data panggilan transaksi maksimum teoritis dalam satu blok dari sekitar 1,9 MB menjadi sekitar 0,6 MB, sambil menjaga biaya tidak berubah untuk aplikasi terpanjang. Manfaat dari pendekatan ini adalah perubahannya sangat sedikit dibandingkan dengan skema gas satu dimensi saat ini, sehingga sangat mudah diterapkan.
Namun, ada dua kelemahan dari pendekatan ini:
Bahkan jika semua transaksi lain di blok hanya menggunakan sejumlah kecil sumber daya itu, transaksi yang menempati sejumlah besar satu sumber daya masih akan membebankan biaya besar yang tidak perlu;
Ini memberi insentif pada transaksi intensif data dan intensif komputasi untuk digabungkan menjadi satu bundel untuk menghemat biaya.
Menurut pendapat saya, aturan seperti EIP-7623, baik untuk perdagangan calldata atau sumber daya lainnya, dapat menjadi manfaat yang cukup besar sehingga bahkan dengan kekurangan ini, itu sangat berharga.
Namun, jika kita bersedia untuk dimasukkan ke dalam upaya pembangunan (secara signifikan lebih tinggi), pendekatan yang lebih diinginkan akan muncul.
EIP-1559 Terpanjang: Strategi yang lebih sulit tetapi diinginkan
Mari kita mulai dengan meninjau cara kerja EIP-1559 biasa. Kami akan fokus pada versi yang diperkenalkan oleh gumpalan long wick candle di EIP-4844 karena secara matematis lebih elegan.
Kami melacak satu parameter, kelebihan_blobs. Selama setiap blok, kami menetapkan:
dimana TARGET = 3. Artinya, jika jumlah blob dalam Blok long dari target, kelebihan_blobs meningkat, dan jika jumlah blob dalam Blok kurang dari target, kelebihan_blobs berkurang. Kemudian kita menetapkan blob_basefee = exp(excess_blobs / 25.47), di mana exp adalah perkiraan dari fungsi eksponensial exp(x)=2.71828^x.
Artinya, setiap kali kelebihan_blobs meningkat sekitar 25, muatan dasar blob meningkat sekitar 2,7x. Jika blob menjadi terlalu mahal, penggunaan rata-rata turun dan kelebihan_blobs mulai berkurang, secara otomatis Drop harganya lagi. Harga gumpalan terus disesuaikan untuk memastikan bahwa, rata-rata, Blok setengah penuh, yaitu, setiap Blok berisi rata-rata 3 gumpalan.
Jika ada lonjakan penggunaan jangka short, ada batasnya: setiap Blok hanya dapat berisi 6 blob pada long maksimum, dalam hal ini transaksi dapat bersaing satu sama lain dengan meningkatkan biaya prioritas. Namun, dalam keadaan normal, setiap blob hanya membayar blob_basefee ditambah sedikit biaya prioritas tambahan sebagai insentif untuk dimasukkan.
Harga gas ini telah ada di Ethereum paling lama: pada tahun 2020, EIP-1559 memperkenalkan mekanisme yang sangat mirip. Dengan EIP-4844, kami menetapkan dua harga mengambang terpisah untuk Gas dan Blob.
Catatan: Biaya dasar gas selama satu jam pada tanggal 8 Mei 2024, dalam gwei. Sumber: ultrasound.money
Pada prinsipnya, kami dapat menambahkan lebih banyak long biaya mengambang independen untuk pembacaan penyimpanan dan jenis operasi lainnya, tetapi saya akan menguraikan satu masalah di bagian selanjutnya.
Bagi pengguna, pengalamannya sangat mirip dengan hari ini: alih-alih membayar satu biaya dasar, Anda membayar dua biaya dasar, tetapi dompet Anda dapat mengabstraksikannya dari tangan Anda, hanya menunjukkan kepada Anda biaya yang diharapkan dan maksimum yang dapat Anda harapkan untuk dibayar.
Blok pembangun, terlama waktu, strategi terbaik adalah sama seperti sekarang ini: sertakan apa pun yang berhasil. Blok terpanjang tidak penuh - gas atau gumpalan. Situasi yang menantang adalah ketika ada cukup gas atau cukup gumpalan untuk melebihi batas blok, pembangun perlu berpotensi memecahkan masalah ransel terpanjang untuk memaksimalkan keuntungan mereka. Namun, bahkan jika ada perkiraan yang cukup baik Algoritme, dalam hal ini, keuntungan dari mengoptimalkan keuntungan dengan merumuskan Algoritme kepemilikan long lebih kecil daripada keuntungan dari melakukan hal yang sama dengan MEV.
Tantangan utama bagi pengembang adalah kebutuhan untuk mendesain ulang fungsionalitas EVM dan infrastruktur terkait, yang saat ini dirancang berdasarkan harga tunggal dan batas tunggal, dan sekarang perlu dipasang untuk mengakomodasi harga terpanjang dan batasan terpanjang.
Satu masalah yang dihadapi pengembang aplikasi adalah pengoptimalan menjadi sedikit lebih sulit: dalam beberapa kasus, Anda tidak dapat lebih lama secara eksplisit mengatakan bahwa A lebih efisien daripada B, karena jika A menggunakan calldata yang lebih long dan B menggunakan eksekusi yang lebih long, maka ketika calldata lebih murah, itu lebih mahal ketika calldata mahal.
Satu masalah yang dihadapi pengembang aplikasi adalah pengoptimalan menjadi sedikit lebih sulit: dalam beberapa kasus, Anda tidak dapat secara definitif mengatakan bahwa A lebih efisien daripada B, karena jika A menggunakan calldata yang lebih long dan B menggunakan eksekusi yang lebih long, maka A mungkin lebih murah ketika calldata murah, dan A mungkin lebih mahal ketika calldata mahal.
Namun, pengembang masih bisa mendapatkan hasil yang cukup bagus dengan mengoptimalkan berdasarkan harga rata-rata historis jangka long.
Harga, EVM, dan sub-panggilan terpanjang
Ada masalah yang tidak muncul dalam gumpalan, juga tidak muncul di EIP-7623 atau bahkan implementasi harga terpanjang penuh dari long sumbu lilin untuk calldata, tetapi jika kita mencoba untuk menentukan harga akses status atau sumber daya lainnya secara terpisah, maka masalah ini muncul: gas limit dalam sub-panggilan.
Batas gas di EVM ada di dua tempat. Pertama, setiap transaksi menetapkan gas limit, yang membatasi jumlah total gas yang dapat digunakan dalam transaksi itu. Kedua, ketika satu kontrak memanggil yang lain, panggilan itu dapat mengatur gas limit sendiri. Hal ini memungkinkan kontrak untuk memanggil kontrak lain yang tidak mereka percayai, dan masih menjamin bahwa mereka masih memiliki sisa gas untuk melakukan perhitungan lain setelah panggilan.
Catatan: Jejak transaksi account abstraction di mana satu akun memanggil akun lain dan hanya sejumlah gas terbatas yang diberikan kepada pemanggil untuk memastikan bahwa panggilan eksternal terus berjalan meskipun penerima panggilan menggunakan semua gas yang dialokasikan untuk itu.
Tantangannya adalah bahwa mendapatkan gas terpanjang antara berbagai jenis eksekusi tampaknya memerlukan subcall untuk memberikan batas terpanjang untuk setiap jenis gas, yang akan membutuhkan perubahan yang sangat mendalam pada EVM dan tidak akan kompatibel dengan aplikasi yang ada.
Ini adalah salah satu alasan mengapa proposal gas terpanjang biasanya tetap dalam dua dimensi: data dan eksekusi. Data, baik calldata transaksional atau blob, hanya didistribusikan di luar EVM, jadi tidak ada yang perlu diubah di dalam EVM agar calldata atau blob diberi harga secara terpisah.
Kita dapat menemukan “solusi gaya EIP-7623” untuk menyelesaikan masalah ini. Ini adalah implementasi sederhana: selama eksekusi, operasi penyimpanan dibebankan 4 kali lipat biaya; Untuk menyederhanakan analisis, mari kita asumsikan 10.000 gas per operasi penyimpanan. Di akhir transaksi, min(7500 * storage_operations, ution_Gas) dikembalikan. Akibatnya, setelah dikurangi pengembalian dana, pengguna diharuskan membayar biaya berikut:
Ini mencerminkan struktur EIP-7623. Pendekatan lain adalah melacak penyimpanan \ _operations dan ution \ _Gas secara real time dan mengisi daya 2500 atau 10000 lebih sedikit tergantung pada maks (ution \ _Gas + 2500 * penyimpanan \ _operations, 10000 * penyimpanan \ _operations) pada pump long waktu. Yang Kode Operasi disebut. Ini menghindari kebutuhan transaksi untuk mengalokasikan gas secara berlebihan, yang sebagian besar diperoleh kembali melalui pengembalian uang.
Kami tidak memiliki lisensi terperinci untuk subpanggilan: subpanggilan dapat menghabiskan semua tunjangan transaksi untuk operasi penyimpanan murah.
Tetapi kami mendapatkan sesuatu yang cukup baik sehingga kontrak yang membuat sub-panggilan dapat menetapkan batas dan memastikan bahwa setelah sub-panggilan dijalankan, panggilan utama masih memiliki cukup gas untuk pasca-pemrosesan yang diperlukan.
“Solusi penetapan harga terpanjang lengkap” paling sederhana yang dapat saya pikirkan adalah ini: kami memperlakukan gas limit sub-panggilan sebagai proporsional. Artinya, misalkan ada k jenis eksekusi yang berbeda, dan setiap transaksi ditetapkan dengan batas terpanjang L1 … Lukas. Misalkan pada titik eksekusi saat ini, gas yang tersisa adalah g1 … Gk. Misalkan Anda memanggil CALL Kode Operasi dan menggunakan Gas sub-call untuk membatasi S. Biarkan s1=S, lalu s2=s1/g1∗g2, s3=s1/g1∗g3, dan seterusnya.
Artinya, kami memperlakukan jenis gas pertama (yang sebenarnya VM eksekusi) sebagai “unit akun” khusus dan kemudian mengalokasikan jenis gas lain sehingga subcall mendapatkan persentase yang sama dari gas yang tersedia di setiap jenis gas. Pendekatan ini agak jelek dan memaksimalkan backward compatibility.
Jika kita ingin membuat skema lebih “netral” antara berbagai jenis gas tanpa mengorbankan backward compatibility, kita dapat dengan mudah mewakili parameter gas limit dari panggilan anak sebagai bagian dari gas yang tersisa dalam konteks saat ini (misalnya, [1…63]/64).
Namun, dalam kedua kasus tersebut, perlu ditekankan bahwa begitu Anda mulai memperkenalkan gas eksekusi terpanjang, kompleksitas yang melekat (keburukan) meningkat, yang tampaknya sulit dihindari.
Jadi tugas kita adalah membuat trade-off yang kompleks: apakah kita menerima beberapa tingkat peningkatan keburukan pada tingkat EVM untuk membuka kunci keuntungan skalabilitas L1 yang signifikan dengan aman, dan jika demikian, proposal spesifik mana yang paling efektif untuk pengembang ekonomi dan aplikasi protokol? Kemungkinannya adalah, tidak satu pun dari dua opsi yang saya sebutkan di atas adalah yang terbaik, tetapi masih ada celana pendek untuk menghasilkan solusi yang lebih elegan dan lebih baik.
Terima kasih khusus kepada Ansgar Dietrichs, Barnabe Monnot, dan Davide Crapis atas umpan balik dan ulasan mereka.
Lihat Asli
Halaman ini mungkin berisi konten pihak ketiga, yang disediakan untuk tujuan informasi saja (bukan pernyataan/jaminan) dan tidak boleh dianggap sebagai dukungan terhadap pandangannya oleh Gate, atau sebagai nasihat keuangan atau profesional. Lihat Penafian untuk detailnya.
Vitalik Judul Baru: Berapa Harga Gas Terpanjang?
Penulis: Vitalik Buterin
Kompiler: Karen, Foreisght News
Pada tahun Ethereum, sumber daya terbatas sampai saat ini dan diberi harga melalui satu sumber daya yang disebut “Gas.” Gas adalah unit pengukuran yang mengukur “upaya komputasi” yang diperlukan untuk memproses transaksi atau blok tertentu. Gas menyatukan jenis “perhitungan” terpanjang, yang paling penting meliputi:
Perhitungan mentah (misalnya, ADD, MULTIPLY);
Baca, tulis, dan tulis ke penyimpanan Ethereum (seperti SSTORE, SLOAD, ETH transfer);
Bandwidth data;
Biaya menghasilkan bukti ZK-SNARK untuk blok.
Misalnya, transaksi yang saya kirim ini menghabiskan total 47.085 Gas. Ini termasuk: (i) biaya dasar sebesar 21.000 Gas, (ii) 1.556 Gas untuk byte calldata yang disertakan sebagai bagian dari transaksi, (iii) 16.500 Gas untuk penyimpanan baca dan tulis, (iv) 2.149 Gas untuk menghasilkan log, dan sisanya untuk eksekusi EVM. Pencucian Uang yang harus dibayar pengguna sebanding dengan gas yang dikonsumsi oleh transaksi. Sebuah Blok dapat berisi hingga 30 juta gas long, dan harga gas terus disesuaikan melalui mekanisme penargetan EIP-1559 untuk memastikan bahwa setiap Blok mengandung rata-rata 15 juta gas.
Pendekatan ini memiliki satu keuntungan utama: karena semuanya digabungkan menjadi satu sumber daya virtual, desain pasar sangat sederhana. Sangat mudah untuk mengoptimalkan transaksi untuk meminimalkan biaya, relatif mudah untuk mengoptimalkan blok untuk membebankan biaya setinggi mungkin (tidak termasuk MEV), dan tidak ada insentif aneh untuk mendorong beberapa transaksi untuk digabungkan dengan transaksi lain untuk menghemat biaya.
Namun, ada inefisiensi dengan pendekatan ini: ia memperlakukan sumber daya yang berbeda seolah-olah mereka dapat dikonversi satu sama lain, ketika kendala mendasar yang sebenarnya tidak sama. Untuk memahami hal ini, Anda dapat melihat grafik berikut terlebih dahulu:
gas limit memberlakukan batasan:
Kendala keamanan mendasar yang sebenarnya seringkali lebih dekat dengan:
Perbedaan ini menyebabkan batasan gas untuk secara tidak adil mengecualikan blok yang benar-benar aman, menerima blok yang sebenarnya tidak aman, atau keduanya.
Jika ada n sumber daya dengan batas keamanan yang berbeda, maka gas satu dimensi dapat membuat throughput hingga long Drop n kali. Akibatnya, long ada minat pada konsep gas kerinduan, dan dengan EIP-4844, kami sekarang benar-benar menerapkan gas kerinduan pada Ethereum. Artikel ini membahas keuntungan dari pendekatan ini, serta prospek untuk peningkatan lebih lanjut.
Blob: gas terpanjang di Dencun
Pada awal tahun ini, ukuran blok rata-rata adalah 150 kB. Sebagian besar dari ini adalah data rollup: Layer 2 protokol menyimpan data on-chain. Data ini sangat mahal: meskipun Biaya Transaksi pada Rollup hanya 5-10 kali lipat dari transaksi yang sesuai pada Ethereum L1, bahkan biaya seperti itu terlalu tinggi untuk kasus penggunaan long.
Jadi mengapa tidak Drop biaya gas untuk calldata (saat ini 16 gas untuk byte bukan nol dan 4 gas untuk byte nol) untuk membuat rollups lebih murah? Kami telah melakukan ini sebelumnya, dan kami dapat melakukannya lagi sekarang. Tetapi jawabannya di sini adalah bahwa ukuran maksimum blok adalah 30.000.000 / 16 = 1.875.000 byte bukan nol, dan jaringan hampir tidak dapat atau hampir tidak dapat menangani blok sebesar ini. Menurunkan biaya sebesar 4x lagi meningkatkan maksimum menjadi 7,5 MB, yang menimbulkan risiko signifikan terhadap keamanan.
Masalah ini akhirnya diselesaikan dengan memperkenalkan data terpisah yang ramah rollup yang lebih pendek (disebut blob) di setiap blok.
Ada harga dan batasan yang berbeda untuk kedua sumber daya ini: setelah Hard Fork Dencun, long maksimum Ethereum Blok dapat berisi (i) 30 juta gas dan (ii) 6 blob, yang masing-masing dapat berisi sekitar 125 kB calldata. Kedua sumber daya memiliki harga terpisah dan disesuaikan melalui mekanisme penetapan harga terpisah yang serupa dengan EIP-1559, dengan tujuan menggunakan rata-rata 15 juta gas dan 3 blob per blok.
Akibatnya, biaya Rollup turun dengan faktor 100, volume pada Rollup meningkat lebih dari 3 kali, dan ukuran Blok maksimum teoritis hanya meningkat sedikit: dari sekitar 1, 9 MB menjadi sekitar 2, 6 MB.
Catatan: Rollup Pencucian Uang, disediakan oleh Growthepie.xyz. Dencun fork terjadi pada 13 Maret 2024, memperkenalkan gumpalan harga terpanjang.
Klien gas dan stateless terpanjang
Dalam waktu dekat, masalah serupa akan muncul dengan bukti tersimpan untuk klien tanpa kewarganegaraan. Klien stateless adalah jenis klien baru yang akan dapat memvalidasi rantai tanpa harus menyimpan sejumlah besar atau data apa pun secara lokal. Klien stateless melakukan ini dengan menerima bukti bagian tertentu dari keadaan Ethereum bahwa transaksi di blok itu perlu diakses.
Diagram di atas menunjukkan klien stateless yang menerima Blok dan bukti nilai saat ini dari bagian tertentu dari state (misalnya, saldo akun, kode, penyimpanan) yang disentuh oleh eksekusi Blok tersebut, yang memungkinkan Node memvalidasi Blok tanpa penyimpanan apa pun.
Biaya baca penyimpanan 2100-2600 gas, tergantung pada jenis baca, dan penulisan penyimpanan lebih mahal. Rata-rata, satu blok melakukan sekitar 1.000 pembacaan dan penulisan penyimpanan (termasuk pemeriksaan saldo ETH, panggilan SSTORE dan SLOAD, pembacaan kode kontrak, dan operasi lainnya). Namun, maksimum teoritis adalah 30.000.000 / 2.100 = 14.285 dibaca. Beban bandwidth klien stateless sebanding dengan angka itu.
Rencana saat ini adalah untuk dukungan klien tanpa kewarganegaraan dengan mengubah desain pohon Negara Bagian Ethereum dari pohon Merkle Patricia menjadi pohon Verkle. Namun, pohon Verkle tidak tahan kuantum dan tidak optimal untuk sistem bukti STARK yang lebih baru. Akibatnya, orang terlama tertarik untuk mendukung klien tanpa kewarganegaraan dengan pohon Merkle biner dan STARK, baik melewatkan Verkle sama sekali atau meningkatkan beberapa tahun setelah transisi Verkle setelah STARK menjadi lebih matang.
Bukti STARK berdasarkan cabang pohon hash biner memiliki long banyak keuntungan, tetapi kelemahan utamanya adalah long waktu yang diperlukan untuk menghasilkan bukti: Pohon verkle dapat membuktikan lebih dari 100.000 nilai per detik, sementara STARK berbasis hash biasanya hanya membuktikan beberapa k hash per detik, dan setiap nilai harus mengandung “cabang” long hash.
Mempertimbangkan angka-angka yang diprediksi hari ini dari sistem bukti yang sangat dioptimalkan seperti Binius dan Plonky3, serta hash eksklusif seperti Vision-Mark-32, sepertinya kita akan berada dalam kisaran praktis untuk beberapa waktu di mana membuktikan 1000 nilai per detik layak, tetapi membuktikan 14.285 nilai tidak. Blok rata-rata akan baik-baik saja, tetapi Blok yang berpotensi terburuk (diterbitkan oleh penyerang) akan mengganggu jaringan.
Pendekatan default kami untuk menangani kasus tersebut adalah dengan mengubah harga: meningkatkan biaya penyimpanan bacaan untuk mengurangi maksimum per blok ke tingkat yang lebih aman. Namun, kami telah melakukan ini long kali, dan jika kami melakukannya lagi, itu akan membuat aplikasi terlalu long terlalu mahal. Pendekatan yang lebih baik adalah gas: batasi dan isi akses penyimpanan secara terpisah, menjaga penggunaan rata-rata pada 1.000 kunjungan penyimpanan per blok, tetapi menetapkan batas atas per blok, seperti 2000.
Di mana-mana gas terpanjang
Sumber daya lain yang patut dipertimbangkan adalah peningkatan ukuran status: operasi yang meningkatkan ukuran status Ethereum, yang kemudian perlu disimpan oleh simpul penuh. Ukuran negara meningkat adalah unik karena alasan untuk membatasinya semata-mata berasal dari penggunaan berkelanjutan jangka long, bukan puncak.
Oleh karena itu, mungkin berharga untuk menambahkan dimensi gas terpisah untuk operasi yang meningkatkan ukuran negara (misalnya, SSTORE nol-ke-nol, pembuatan kontrak), tetapi tujuannya berbeda: kita dapat menetapkan harga mengambang untuk long wick candle pada penggunaan rata-rata tertentu, tetapi tidak menetapkan batas per Blok sama sekali.
Ini menunjukkan properti yang kuat dari gas long dimensi: memungkinkan kita untuk long wick candle setiap sumber daya secara terpisah dan bertanya (i) berapa penggunaan rata-rata ideal long kurang? (ii) Berapa maksimum penggunaan aman per Blok long kecil? Alih-alih mengatur harga gas berdasarkan nilai maksimum setiap blok dan membiarkan penggunaan rata-rata mengikuti, kami memiliki 2n derajat kebebasan untuk mengatur parameter 2n, menyesuaikan setiap parameter sesuai dengan pertimbangan keamanan jaringan.
Kasus yang lebih kompleks, seperti ketika pertimbangan keamanan dari dua sumber daya dijumlahkan sebagian, dapat ditangani dengan membuat Kode Operasi atau sumber daya mengkonsumsi sejumlah jenis gas long tertentu (misalnya, SSTORE nol-ke-bukan nol mungkin mengkonsumsi 5.000 attestation gas klien stateless dan 20.000 gas ekspansi penyimpanan).
Maks per transaksi (transaksi yang menghabiskan lebih banyak data atau perhitungan)
Biarkan x1 menjadi biaya gas data dan x2 menjadi biaya gas yang dihitung, sehingga dalam sistem gas satu dimensi kita dapat menulis biaya gas transaksi:
Dalam skenario ini, kami mendefinisikan biaya gas transaksi sebagai:
Artinya, transaksi tidak dibebankan berdasarkan data ditambah perhitungan, tetapi pada sumber daya mana dari dua sumber daya yang dikonsumsi paling lama. Ini dapat dengan mudah diperluas untuk mencakup dimensi yang lebih long (e.g. max (…, x3 ∗ penyimpanan \ _access)).
Seharusnya mudah untuk melihat bagaimana ini dapat meningkatkan throughput sambil menjaga keamanan. Secara teoritis, jumlah maksimum data dalam satu blok masih GasLIMIT/x1, yang persis sama dengan skema gas satu dimensi. Demikian pula, jumlah maksimum teoritis perhitungan adalah GasLIMIT / x2, yang persis sama seperti dalam skema gas satu dimensi. Namun, biaya gas dari setiap transaksi yang mengkonsumsi data dan perhitungan turun.
Ini mungkin skema yang diadopsi dalam EIP-7623 yang diusulkan untuk mengurangi ukuran blok maksimum sambil terus meningkatkan jumlah gumpalan. Mekanisme yang tepat dalam EIP-7623 sedikit lebih rumit: ia menjaga harga calldata saat ini pada 16 gas per byte, tetapi menambahkan harga dasar 48 gas per byte; Semakin besar pembayaran transaksi (16 * byte + ution \ _Gas) dan (48 * byte). Akibatnya, EIP-7623 mengurangi data panggilan transaksi maksimum teoritis dalam satu blok dari sekitar 1,9 MB menjadi sekitar 0,6 MB, sambil menjaga biaya tidak berubah untuk aplikasi terpanjang. Manfaat dari pendekatan ini adalah perubahannya sangat sedikit dibandingkan dengan skema gas satu dimensi saat ini, sehingga sangat mudah diterapkan.
Namun, ada dua kelemahan dari pendekatan ini:
Bahkan jika semua transaksi lain di blok hanya menggunakan sejumlah kecil sumber daya itu, transaksi yang menempati sejumlah besar satu sumber daya masih akan membebankan biaya besar yang tidak perlu;
Ini memberi insentif pada transaksi intensif data dan intensif komputasi untuk digabungkan menjadi satu bundel untuk menghemat biaya.
Menurut pendapat saya, aturan seperti EIP-7623, baik untuk perdagangan calldata atau sumber daya lainnya, dapat menjadi manfaat yang cukup besar sehingga bahkan dengan kekurangan ini, itu sangat berharga.
Namun, jika kita bersedia untuk dimasukkan ke dalam upaya pembangunan (secara signifikan lebih tinggi), pendekatan yang lebih diinginkan akan muncul.
EIP-1559 Terpanjang: Strategi yang lebih sulit tetapi diinginkan
Mari kita mulai dengan meninjau cara kerja EIP-1559 biasa. Kami akan fokus pada versi yang diperkenalkan oleh gumpalan long wick candle di EIP-4844 karena secara matematis lebih elegan.
Kami melacak satu parameter, kelebihan_blobs. Selama setiap blok, kami menetapkan:
kelebihan_blobs <-- maks(kelebihan_blobs + len(block.blobs) - TARGET, 0)
dimana TARGET = 3. Artinya, jika jumlah blob dalam Blok long dari target, kelebihan_blobs meningkat, dan jika jumlah blob dalam Blok kurang dari target, kelebihan_blobs berkurang. Kemudian kita menetapkan blob_basefee = exp(excess_blobs / 25.47), di mana exp adalah perkiraan dari fungsi eksponensial exp(x)=2.71828^x.
Artinya, setiap kali kelebihan_blobs meningkat sekitar 25, muatan dasar blob meningkat sekitar 2,7x. Jika blob menjadi terlalu mahal, penggunaan rata-rata turun dan kelebihan_blobs mulai berkurang, secara otomatis Drop harganya lagi. Harga gumpalan terus disesuaikan untuk memastikan bahwa, rata-rata, Blok setengah penuh, yaitu, setiap Blok berisi rata-rata 3 gumpalan.
Jika ada lonjakan penggunaan jangka short, ada batasnya: setiap Blok hanya dapat berisi 6 blob pada long maksimum, dalam hal ini transaksi dapat bersaing satu sama lain dengan meningkatkan biaya prioritas. Namun, dalam keadaan normal, setiap blob hanya membayar blob_basefee ditambah sedikit biaya prioritas tambahan sebagai insentif untuk dimasukkan.
Harga gas ini telah ada di Ethereum paling lama: pada tahun 2020, EIP-1559 memperkenalkan mekanisme yang sangat mirip. Dengan EIP-4844, kami menetapkan dua harga mengambang terpisah untuk Gas dan Blob.
Catatan: Biaya dasar gas selama satu jam pada tanggal 8 Mei 2024, dalam gwei. Sumber: ultrasound.money
Pada prinsipnya, kami dapat menambahkan lebih banyak long biaya mengambang independen untuk pembacaan penyimpanan dan jenis operasi lainnya, tetapi saya akan menguraikan satu masalah di bagian selanjutnya.
Bagi pengguna, pengalamannya sangat mirip dengan hari ini: alih-alih membayar satu biaya dasar, Anda membayar dua biaya dasar, tetapi dompet Anda dapat mengabstraksikannya dari tangan Anda, hanya menunjukkan kepada Anda biaya yang diharapkan dan maksimum yang dapat Anda harapkan untuk dibayar.
Blok pembangun, terlama waktu, strategi terbaik adalah sama seperti sekarang ini: sertakan apa pun yang berhasil. Blok terpanjang tidak penuh - gas atau gumpalan. Situasi yang menantang adalah ketika ada cukup gas atau cukup gumpalan untuk melebihi batas blok, pembangun perlu berpotensi memecahkan masalah ransel terpanjang untuk memaksimalkan keuntungan mereka. Namun, bahkan jika ada perkiraan yang cukup baik Algoritme, dalam hal ini, keuntungan dari mengoptimalkan keuntungan dengan merumuskan Algoritme kepemilikan long lebih kecil daripada keuntungan dari melakukan hal yang sama dengan MEV.
Tantangan utama bagi pengembang adalah kebutuhan untuk mendesain ulang fungsionalitas EVM dan infrastruktur terkait, yang saat ini dirancang berdasarkan harga tunggal dan batas tunggal, dan sekarang perlu dipasang untuk mengakomodasi harga terpanjang dan batasan terpanjang.
Satu masalah yang dihadapi pengembang aplikasi adalah pengoptimalan menjadi sedikit lebih sulit: dalam beberapa kasus, Anda tidak dapat lebih lama secara eksplisit mengatakan bahwa A lebih efisien daripada B, karena jika A menggunakan calldata yang lebih long dan B menggunakan eksekusi yang lebih long, maka ketika calldata lebih murah, itu lebih mahal ketika calldata mahal.
Satu masalah yang dihadapi pengembang aplikasi adalah pengoptimalan menjadi sedikit lebih sulit: dalam beberapa kasus, Anda tidak dapat secara definitif mengatakan bahwa A lebih efisien daripada B, karena jika A menggunakan calldata yang lebih long dan B menggunakan eksekusi yang lebih long, maka A mungkin lebih murah ketika calldata murah, dan A mungkin lebih mahal ketika calldata mahal.
Namun, pengembang masih bisa mendapatkan hasil yang cukup bagus dengan mengoptimalkan berdasarkan harga rata-rata historis jangka long.
Harga, EVM, dan sub-panggilan terpanjang
Ada masalah yang tidak muncul dalam gumpalan, juga tidak muncul di EIP-7623 atau bahkan implementasi harga terpanjang penuh dari long sumbu lilin untuk calldata, tetapi jika kita mencoba untuk menentukan harga akses status atau sumber daya lainnya secara terpisah, maka masalah ini muncul: gas limit dalam sub-panggilan.
Batas gas di EVM ada di dua tempat. Pertama, setiap transaksi menetapkan gas limit, yang membatasi jumlah total gas yang dapat digunakan dalam transaksi itu. Kedua, ketika satu kontrak memanggil yang lain, panggilan itu dapat mengatur gas limit sendiri. Hal ini memungkinkan kontrak untuk memanggil kontrak lain yang tidak mereka percayai, dan masih menjamin bahwa mereka masih memiliki sisa gas untuk melakukan perhitungan lain setelah panggilan.
Catatan: Jejak transaksi account abstraction di mana satu akun memanggil akun lain dan hanya sejumlah gas terbatas yang diberikan kepada pemanggil untuk memastikan bahwa panggilan eksternal terus berjalan meskipun penerima panggilan menggunakan semua gas yang dialokasikan untuk itu.
Tantangannya adalah bahwa mendapatkan gas terpanjang antara berbagai jenis eksekusi tampaknya memerlukan subcall untuk memberikan batas terpanjang untuk setiap jenis gas, yang akan membutuhkan perubahan yang sangat mendalam pada EVM dan tidak akan kompatibel dengan aplikasi yang ada.
Ini adalah salah satu alasan mengapa proposal gas terpanjang biasanya tetap dalam dua dimensi: data dan eksekusi. Data, baik calldata transaksional atau blob, hanya didistribusikan di luar EVM, jadi tidak ada yang perlu diubah di dalam EVM agar calldata atau blob diberi harga secara terpisah.
Kita dapat menemukan “solusi gaya EIP-7623” untuk menyelesaikan masalah ini. Ini adalah implementasi sederhana: selama eksekusi, operasi penyimpanan dibebankan 4 kali lipat biaya; Untuk menyederhanakan analisis, mari kita asumsikan 10.000 gas per operasi penyimpanan. Di akhir transaksi, min(7500 * storage_operations, ution_Gas) dikembalikan. Akibatnya, setelah dikurangi pengembalian dana, pengguna diharuskan membayar biaya berikut:
ution_Gas + 10000 * penyimpanan_operations - min(7500 * penyimpanan_operations, ution_Gas)
Ini sama dengan:
maks(ution_Gas + 2500 * penyimpanan_operations, 10000 * penyimpanan_operations)
Ini mencerminkan struktur EIP-7623. Pendekatan lain adalah melacak penyimpanan \ _operations dan ution \ _Gas secara real time dan mengisi daya 2500 atau 10000 lebih sedikit tergantung pada maks (ution \ _Gas + 2500 * penyimpanan \ _operations, 10000 * penyimpanan \ _operations) pada pump long waktu. Yang Kode Operasi disebut. Ini menghindari kebutuhan transaksi untuk mengalokasikan gas secara berlebihan, yang sebagian besar diperoleh kembali melalui pengembalian uang.
Kami tidak memiliki lisensi terperinci untuk subpanggilan: subpanggilan dapat menghabiskan semua tunjangan transaksi untuk operasi penyimpanan murah.
Tetapi kami mendapatkan sesuatu yang cukup baik sehingga kontrak yang membuat sub-panggilan dapat menetapkan batas dan memastikan bahwa setelah sub-panggilan dijalankan, panggilan utama masih memiliki cukup gas untuk pasca-pemrosesan yang diperlukan.
“Solusi penetapan harga terpanjang lengkap” paling sederhana yang dapat saya pikirkan adalah ini: kami memperlakukan gas limit sub-panggilan sebagai proporsional. Artinya, misalkan ada k jenis eksekusi yang berbeda, dan setiap transaksi ditetapkan dengan batas terpanjang L1 … Lukas. Misalkan pada titik eksekusi saat ini, gas yang tersisa adalah g1 … Gk. Misalkan Anda memanggil CALL Kode Operasi dan menggunakan Gas sub-call untuk membatasi S. Biarkan s1=S, lalu s2=s1/g1∗g2, s3=s1/g1∗g3, dan seterusnya.
Artinya, kami memperlakukan jenis gas pertama (yang sebenarnya VM eksekusi) sebagai “unit akun” khusus dan kemudian mengalokasikan jenis gas lain sehingga subcall mendapatkan persentase yang sama dari gas yang tersedia di setiap jenis gas. Pendekatan ini agak jelek dan memaksimalkan backward compatibility.
Jika kita ingin membuat skema lebih “netral” antara berbagai jenis gas tanpa mengorbankan backward compatibility, kita dapat dengan mudah mewakili parameter gas limit dari panggilan anak sebagai bagian dari gas yang tersisa dalam konteks saat ini (misalnya, [1…63]/64).
Namun, dalam kedua kasus tersebut, perlu ditekankan bahwa begitu Anda mulai memperkenalkan gas eksekusi terpanjang, kompleksitas yang melekat (keburukan) meningkat, yang tampaknya sulit dihindari.
Jadi tugas kita adalah membuat trade-off yang kompleks: apakah kita menerima beberapa tingkat peningkatan keburukan pada tingkat EVM untuk membuka kunci keuntungan skalabilitas L1 yang signifikan dengan aman, dan jika demikian, proposal spesifik mana yang paling efektif untuk pengembang ekonomi dan aplikasi protokol? Kemungkinannya adalah, tidak satu pun dari dua opsi yang saya sebutkan di atas adalah yang terbaik, tetapi masih ada celana pendek untuk menghasilkan solusi yang lebih elegan dan lebih baik.
Terima kasih khusus kepada Ansgar Dietrichs, Barnabe Monnot, dan Davide Crapis atas umpan balik dan ulasan mereka.