Teruskan Judul Asli: Penjelasan Hardfork Prague/Electra (Pectra)
Dalam artikel sebelumnya, kami secara menyeluruh meninjau siklus hidup validator Ethereum, membahas beberapa aspek terkait hardfork Electra yang akan datang. Sekarang, saatnya untuk fokus pada perubahan yang akan datang dalam upgrade Electra dan Prague serta menjelaskannya secara detail.
Sejarah Ethereum 2.0 'proof-of-stake' hardforks sangat kompleks. Dimulai dengan penambahan lapisan beacon ke lapisan eksekusi yang ada, meluncurkan konsensus proof-of-stake pada lapisan beacon sambil tetap mempertahankan proof-of-work pada lapisan eksekusi (hardfork Phase0 dan Altair). PoS kemudian sepenuhnya diaktifkan pada hardfork Bellatrix (meskipun penarikan tidak diaktifkan). Selanjutnya, hardfork Capella memungkinkan penarikan, menyelesaikan siklus validator. Hardfork terbaru, Deneb (bagian dari peningkatan Dencun (Deneb/Cancun)), membawa revisi minor pada parameter rantai beacon, seperti jendela waktu untuk menyertakan pernyataan, penanganan keluar sukarela, dan batas perputaran validator. Perubahan utama dalam Dencun berada pada lapisan eksekusi, memperkenalkan inovasi seperti transaksi blob, blob gas, komitmen KZG untuk blob, dan menghapus operasi SELFDESTRUCT.
Sekarang, hardfork Prague/Electra memperkenalkan peningkatan signifikan pada kedua lapisan eksekusi dan konsensus. Sebagai pemeriksa untuk proyek Lido, fokus kami sebagian besar pada perubahan konsensus dan staking dalam hardfork ini. Namun, kami tidak dapat mengabaikan perubahan lapisan eksekusi di Prague, karena mereka mencakup fitur-fitur kritis yang mempengaruhi jaringan Ethereum dan validator. Mari kita telusuri detail perubahan ini.
Electra memperkenalkan banyak fitur untuk lapisan beacon. Pembaruan utama meliputi:
Sementara itu, Praha memperkenalkan perubahan pada lapisan eksekusi, seperti:
Mari kita merujuk pada Proposal Peningkatan Ethereum (EIP) yang relevan untuk memfasilitasi diskusi lebih lanjut:
Beberapa EIP ini terutama menangani lapisan konsensus (beacon), sementara yang lain berhubungan dengan lapisan eksekusi. Beberapa mencakup kedua lapisan, karena operasi tertentu seperti deposit dan penarikan memerlukan perubahan yang disinkronkan di seluruh lapisan konsensus dan eksekusi. Karena ketergantungan ini, memisahkan Electra dan Prague tidak praktis, jadi kita akan meninjau setiap EIP secara berurutan dan menentukan komponen Ethereum yang terpengaruh dalam setiap kasus.
Referensi: EIP-7251
Sejak hardfork Phase0 pertama, diimplementasikan untuk mempersiapkan Ethereum untuk Proof-of-Stake, dan hingga Electra, saldo efektif maksimum validator ditetapkan pada 32 ETH. Mengaktifkan validator memerlukan setidaknya spec.min_activation_balance (32 ETH). Setelah aktivasi, validator memulai dengan saldo efektif maksimum ini tetapi dapat mengurangi saldo efektifnya ke spec.ejection_balance (16 ETH) dan dikeluarkan setelah mencapai ambang batas tersebut. Logika "minimum" ini tetap tidak berubah di Electra, tetapi sekarang spec.max_effective_balance telah meningkat menjadi 2048 ETH. Akibatnya, validator dapat menyetor antara 32 dan 2048 ETH untuk aktivasi, dengan semua jumlah dalam kisaran ini berkontribusi pada saldo efektif mereka. Pergeseran ini menandai perpindahan dari "proof-of-32ETH-stake" ke "proof-of-stake" :)
Saldo efektif variabel ini akan digunakan sekarang:
Dua kegiatan pertama adalah tindakan paling bermanfaat bagi validator. Oleh karena itu, setelah Electra, validator dengan taruhan yang lebih besar akan lebih sering berpartisipasi dalam proposisi blok dan komite sinkronisasi, sebanding dengan saldo efektif mereka.
Efek lain terkait dengan pengurangan. Semua hukuman pengurangan proporsional terhadap saldo efektif validator:
Electra juga mengusulkan perubahan dalam kuotasi pemangkasan, mendefinisikan sebagian dari saldo validator yang dipangkas dan diterima oleh pengadu.
Efek ketidakaktifan berikutnya. Ketika seorang validator offline saat aktif (memberikan atau mengajukan), sebuah skor ketidakaktifan terakumulasi, menyebabkan denda ketidakaktifan yang diterapkan setiap epoch. Denda-denda ini juga berbanding lurus dengan saldo efektif validator.
“Batasan churn” validator juga mengalami perubahan karena peningkatan saldo efektif. Di Ethereum “pra-Electra,” validator umumnya memiliki saldo efektif yang sama, dan batas keluar churn didefinisikan sebagai “tidak lebih dari 1/65536 (spec.churn_limit_quotient) dari total taruhan dapat keluar dalam satu epoch.” Hal ini menciptakan jumlah keluar validator “tetap” dengan taruhan yang sama. Namun, di “pasca-Electra,” kemungkinan terjadi skenario di mana hanya sedikit “paus” yang keluar, karena mereka mewakili sebagian besar total taruhan.
Pertimbangan lain adalah rotasi kunci validator yang banyak pada satu instansi validator. Validator besar saat ini terpaksa menjalankan ribuan kunci validator pada satu instansi untuk menampung taruhan besar, membaginya menjadi bagian 32 ETH. Dengan Electra, perilaku ini tidak lagi wajib. Secara finansial, perubahan ini tidak banyak berbeda karena imbalan dan probabilitas berkembang secara linear dengan jumlah yang dipertaruhkan. Dengan demikian, 100 validator dengan masing-masing 32 ETH setara dengan satu validator dengan 3200 ETH. Selain itu, beberapa kunci validator aktif dapat memiliki kredensial penarikan Eth1 yang sama, memungkinkan semua imbalan ditarik ke satu alamat ETH dan menghindari biaya gas yang terkait dengan konsolidasi imbalan. Namun, mengelola sejumlah besar kunci akan menimbulkan biaya administrasi tambahan.
Kemampuan untuk mengonsolidasikan saldo validator menambahkan jenis permintaan lapisan eksekusi lainnya. Sebelumnya, kami memiliki deposit dan penarikan. Sekarang, akan ada jenis lain: permintaan konsolidasi. Ini akan menggabungkan dua validator menjadi satu. Permintaan operasi ini akan mencakup pubkey validator sumber dan pubkey target, dan akan diproses dengan cara yang sama dengan deposit dan penarikan. Konsolidasi juga akan memiliki permintaan tertunda dan batas pergantian saldo, sama seperti deposit dan penarikan.
Untuk merangkum:
Salah satu topik penting lainnya adalah data historis dan estimasi keuntungan untuk validator, yang sangat relevan bagi peserta baru yang mencoba mengevaluasi risiko dan hasil. Batas 32 ETH (baik minimum maupun maksimum, dalam praktek) sebelum Electra (pada saat penulisan artikel ini) menciptakan keseragaman dalam data historis. Semua validator memiliki saldo efektif, imbalan, hukuman pemotongan individu, frekuensi proposal blok, dan metrik lain yang sama. Keseragaman ini memungkinkan Ethereum untuk menguji mekanisme konsensusnya dengan sejumlah besar validator tanpa adanya nilai ekstrem statistik, mengumpulkan data perilaku jaringan yang berharga.
Setelah Electra, distribusi saham akan berubah secara signifikan. Validator besar akan lebih sering berpartisipasi dalam proposal blok dan komite sinkronisasi, menerima hukuman yang lebih besar dalam acara pemotongan, dan memiliki pengaruh yang lebih besar pada pemotongan yang ditangguhkan, antrean aktivasi, dan antrean keluar. Meskipun ini dapat menciptakan tantangan dalam agregasi data, konsensus Ethereum memastikan bahwa perhitungan non-linear minimal. Satu-satunya komponen non-linear menggunakan sqrt(total_effective_balance) untuk menghitung reward dasar, yang berlaku seragam untuk semua validator. Ini berarti hadiah dan pemotongan validator masih dapat diperkirakan berdasarkan "per 1 ETH" (atau, lebih tepatnya, per spec.effective_balance_increment, yang berpotensi berubah di masa depan).
Untuk informasi lebih lanjut, lihat artikel sebelumnya tentang perilaku validator kami.
Referensi: EIP-7002
Setiap validator di Ethereum memiliki dua pasangan kunci: kunci aktif dan kunci penarikan. Kunci publik BLS aktif berfungsi sebagai identitas utama validator dalam rantai beacon, dan pasangan kunci ini digunakan untuk menandatangani blok, asertasi, pemotongan, agregat komite sinkronisasi, dan (sebelum EIP ini) keluar sukarela (untuk memulai keluar validator dari konsensus setelah penundaan). Pasangan kunci kedua ("kredensial penarikan") dapat berupa pasangan kunci BLS lain atau akun Eth1 reguler (kunci privat dan alamat). Sekarang, menarik ke alamat ETH memerlukan pesan penarikan yang ditandatangani oleh kunci privat BLS aktif. EIP ini mengubah hal tersebut.
Dalam praktiknya, pemilik dari dua pasang kunci ini (aktif dan penarikan) bisa berbeda. Kunci aktif validator bertanggung jawab atas tugas validasi: menjalankan server, menjaga agar tetap beroperasi, dll., sementara kredensial penarikan biasanya dikendalikan oleh pemilik staking, yang menerima imbalan dan bertanggung jawab atas dana tersebut. Saat ini, seorang pemilik staking yang hanya mengendalikan kredensial penarikan tidak bisa memulai keluar validator dan hanya bisa menarik imbalan. Situasi ini memungkinkan pemilik kunci aktif validator untuk secara efektif memegang saldo validator sebagai “sandera.” Validator dapat “mempresign” pesan keluar dan memberikannya kepada pemilik staking, namun solusi ini tidak ideal. Selain itu, baik penarikan maupun keluar saat ini memerlukan interaksi dengan validator lapisan beacon menggunakan API khusus.
Solusi optimal adalah memungkinkan pemilik staking untuk melakukan kedua operasi exit dan penarikan menggunakan panggilan kontrak pintar reguler. Ini melibatkan pemeriksaan tanda tangan Eth1 standar, sangat menyederhanakan operasi.
EIP ini memungkinkan pemilik staking untuk memicu penarikan dan keluar melalui transaksi standar dari alamat ETH mereka ke kontrak pintar yang didedikasikan (mirip dengan proses deposit yang ada yang menggunakan kontrak “Deposit”). Proses penarikan (atau keluar jika cukup staked dihapus) berfungsi sebagai berikut:
Sementara deposito adalah operasi yang dipicu di blok Eth1 dan kemudian "dipindahkan" ke lapisan Beacon menggunakan antrian deposito "pending", penarikan mengikuti skema yang berbeda. Mereka dipicu di lapisan Beacon (melalui CLI) dan kemudian "dipindahkan" ke blok Eth1. Sekarang, kedua skema tersebut akan beroperasi menggunakan kerangka kerja generik yang sama (sebagai berikut): pembuatan permintaan di lapisan Eth1, pemrosesan antrian deposito/penarikan/konsolidasi "pending", dan pemrosesan di lapisan Beacon. Untuk operasi "output" seperti penarikan, antrian output juga diproses, dan hasilnya "diselesaikan" di blok Eth1.
Dengan EIP ini, pemilik staking dapat menarik dan keluar dari validator mereka menggunakan transaksi ETH reguler tanpa perlu berinteraksi langsung dengan validator CLI atau mengakses infrastruktur validator. Hal ini sangat menyederhanakan operasi staking, terutama untuk penyedia staking besar. Infrastruktur validator sekarang hampir sepenuhnya terisolasi, karena hanya kunci validator aktif yang perlu dipelihara, sementara semua operasi staking dapat ditangani di tempat lain. Ini menghilangkan kebutuhan bagi solo staker untuk menunggu tindakan validator aktif dan secara signifikan menyederhanakan bagian luar dari layanan seperti Modul Staking Komunitas dari Lido.
Akibatnya, EIP ini "menyelesaikan" operasi staking dengan memigrasikannya sepenuhnya ke lapisan Eth1, secara signifikan mengurangi risiko keamanan infrastruktur, dan meningkatkan desentralisasi inisiatif staking salone.
Referensi: EIP-6110
Saat ini, deposit diimplementasikan melalui acara dalam kontrak sistem “Deposit” (seperti yang dibahas secara detail dalam artikel sebelumnya). Kontrak ini menerima ETH dan kredensial validator, mengeluarkan acara “Deposit()”, dan acara-acara ini kemudian dianalisis dan diubah menjadi permintaan deposit di lapisan beacon. Sistem ini memiliki banyak kekurangan: membutuhkan voting untuk eth1data pada lapisan chain beacon, yang menambahkan penundaan yang signifikan. Selain itu, lapisan beacon perlu mengambil data dari lapisan eksekusi, yang memperkenalkan kompleksitas lebih lanjut. Masalah-masalah ini dibahas secara detail dalam EIP. Metode yang lebih sederhana, yang menghilangkan banyak masalah ini, melibatkan langsung menyertakan permintaan deposit dalam blok Eth1 di lokasi yang ditentukan. Mekanisme ini mencerminkan proses penanganan penarikan yang dijelaskan dalam EIP sebelumnya.
Perubahan yang diusulkan dalam EIP ini menjanjikan. Pemrosesan eth1data sekarang dapat sepenuhnya dihapus, menghilangkan kebutuhan untuk pemungutan suara atau penundaan lama antara peristiwa di sisi Eth1 dan inklusi deposit pada lapisan beacon (saat ini sekitar 12 jam). Ini juga menghapus logika untuk snapshot kontrak deposit. EIP ini menyederhanakan pemrosesan deposit dan menyelarasinya dengan skema pemrosesan penarikan yang dijelaskan di atas.
Baik pemilik staking maupun validator, perubahan ini secara signifikan mengurangi keterlambatan antara deposit dan aktivasi validator. Top-up, yang diperlukan ketika validator diserang, juga akan lebih cepat.
Tidak banyak yang bisa dikatakan tentang EIP ini selain bahwa itu menghapus logika usang, menyederhanakan proses, dan menciptakan hasil yang lebih baik untuk semua pihak yang terlibat.
Referensi: EIP-7685
EIP ini seharusnya argumen telah disajikan sebelum tiga EIP terdahulu terkait deposit/penarikan/konsolidasi, karena ini meletakkan dasar bagi mereka. Namun, diperkenalkan di sini untuk menekankan kebutuhan yang semakin meningkat untuk mekanisme generik untuk secara konsisten memindahkan data khusus antara blok rantai Eth1 (eksekusi) dan Beacon (konsensus) (lapisan). EIP ini memengaruhi kedua lapisan, membuat pemrosesan permintaan yang dipicu oleh transaksi ETH reguler lebih efisien. Saat ini, kami mengamati:
Tiga operasi ini menunjukkan kebutuhan penanganan yang konsisten untuk berbagai jenis permintaan saat mereka berpindah antara lapisan eksekusi dan beacon. Selain itu, kami membutuhkan kemampuan untuk memicu operasi-operasi ini hanya menggunakan lapisan Eth1, karena ini akan memungkinkan kami mengisolasi infrastruktur validator dari infrastruktur pengelolaan staking, meningkatkan keamanan. Oleh karena itu, solusi generik untuk mengelola permintaan-permintaan seperti ini adalah praktis dan penting.
EIP ini menetapkan kerangka kerja untuk setidaknya tiga kasus utama: deposit, penarikan, dan konsolidasi. Inilah mengapa EIP sebelumnya memperkenalkan bidang seperti WITHDRAWAL_REQUEST_TYPE dan DEPOSIT_REQUEST_TYPE, dan sekarang konsolidasi akan menambahkan yang lain, CONSOLIDATION_REQUEST_TYPE. Selain itu, EIP ini kemungkinan akan mencakup mekanisme umum untuk menangani batasan untuk permintaan-permintaan tersebut (konstan referensi: PENDING_DEPOSITS_LIMIT, PENDING_PARTIAL_WITHDRAWALS_LIMIT, PENDING_CONSOLIDATIONS_LIMIT).
Meskipun detail implementasi khusus untuk kerangka kerja ini belum tersedia, namun pasti akan mencakup jenis permintaan kunci, mekanisme integritas (misalnya, hashing dan Merkle-izing permintaan), serta pemrosesan antrian tertunda dengan pembatasan kecepatan.
EIP ini memiliki signifikansi arsitektural, memungkinkan Eth1 untuk memicu tindakan kritis di lapisan Beacon melalui kerangka kerja yang terpadu. Bagi pengguna dan proyek, ini berarti semua permintaan yang dipicu di lapisan Eth1 akan disampaikan dan diproses di lapisan Beacon dengan lebih efisien.
Referensi: EIP-2537
Jika Anda tidak ingin terlalu mendalam, Anda dapat mempertimbangkan prekomputasi BLS12-381 sebagai operasi kriptografi kompleks yang sekarang dapat digunakan dalam kontrak cerdas. Bagi yang tertarik, mari kita jelajahi ini lebih lanjut.
Operasi matematika pada kurva eliptik seperti BLS12-381 (dan pasangannya: BN-254) saat ini digunakan untuk dua tujuan utama:
Jika Anda ingin memverifikasi tanda tangan BLS atau bukti zkSNARK dalam kontrak pintar, Anda harus menghitung "pasangan" ini yang mahal secara komputasi. Ethereum sudah memiliki kontrak yang telah dikompilasi sebelumnya untuk operasi kurva BN254 (EIP-196 dan EIP-197). Namun, kurva BLS12-381 (yang sekarang diakui lebih aman dan jauh lebih banyak digunakan saat ini) belum diimplementasikan sebagai prakompilasi. Tanpa prakompilasi seperti itu, menerapkan pasangan dan operasi kurva lainnya dalam kontrak pintar memerlukan perhitungan berat, seperti yang ditunjukkan di sini, dan mengkonsumsi gas dalam jumlah besar (~ 10 ^ 5 hingga 10 ^ 6 gas).
EIP ini membuka pintu bagi banyak aplikasi potensial, terutama dalam memungkinkan verifikasi tanda tangan BLS yang murah berdasarkan kurva BLS12-381. Ini memungkinkan untuk menerapkan skema ambang batas untuk berbagai tujuan. Seperti disebutkan sebelumnya, validator Ethereum sudah menggunakan tanda tangan berbasis BLS12-381. Dengan EIP ini, kontrak pintar standar sekarang dapat melakukan verifikasi yang efisien terhadap tanda tangan validator agregat. Ini dapat menyederhanakan bukti konsensus dan menjembatani aset antar jaringan, karena tanda tangan BLS banyak digunakan di seluruh blockchain. Tanda tangan BLS ambang batas sendiri memungkinkan pembangunan banyak skema ambang batas yang efisien untuk pemungutan suara, pembuatan nomor acak terdesentralisasi, multisig, dll.
Verifikasi bukti zkSNARK yang lebih murah akan, pada gilirannya, membuka banyak aplikasi. Banyak solusi berbasis zkSNARK saat ini terhambat oleh biaya tinggi verifikasi bukti, membuat beberapa proyek hampir tidak praktis. EIP ini memiliki potensi untuk mengubah hal tersebut.
Referensi: EIP-2935
EIP ini mengusulkan untuk menyimpan 8192 (~ 27,3 jam) hash blok historis dalam keadaan blockchain, memberikan riwayat panjang untuk klien stateless (seperti rollup) dan kontrak pintar. Ini menyarankan mempertahankan perilaku opcode BLOCKHASH saat ini, mempertahankan pembatasan hingga 256 blok, sambil memperkenalkan kontrak sistem baru yang dirancang khusus untuk menyimpan dan mengambil hash historis. Kontrak ini melakukan operasi set() ketika lapisan eksekusi memproses blok. Metode get()-nya, dapat diakses oleh siapa saja, mengambil hash blok yang diperlukan dari buffer ring.
Saat ini, memang memungkinkan untuk merujuk pada hash blok historis dalam EVM, tetapi akses terbatas pada 256 blok terbaru (~50 menit). Namun, ada kasus di mana akses ke data blok yang lebih lama sangat penting, seperti untuk aplikasi lintas-rantai (yang memerlukan bukti data dari blok sebelumnya) dan klien tanpa status, yang sesekali memerlukan akses ke hash blok sebelumnya.
EIP ini memperluas horizon waktu yang tersedia untuk rollups dan aplikasi lintas-rantai, memungkinkan mereka mengakses data historis secara langsung di EVM tanpa perlu mengumpulkannya secara eksternal. Akibatnya, solusi-solusi ini menjadi lebih kokoh dan berkelanjutan.
Referensi: EIP-7623
Biaya calldata mengatur ukuran yang tersedia dari muatan transaksi, yang dalam beberapa kasus bisa cukup besar (misalnya, saat melewati array besar atau buffer biner sebagai parameter). Penggunaan calldata yang signifikan terutama disebabkan oleh rollups, yang mengirimkan muatan melalui calldata yang berisi status rollup saat ini.
Kemampuan untuk memperkenalkan data biner yang besar dan dapat dibuktikan ke dalam blockchain sangat penting untuk rollup. Peningkatan Dencun (Deneb-Cancun) memperkenalkan inovasi besar untuk kasus penggunaan tersebut — transaksi blob (EIP-4844). Transaksi blob memiliki biaya gas "blob" khusus mereka sendiri, dan sementara tubuh mereka disimpan sementara, bukti kriptografi mereka (komitmen KZG), bersama dengan hash mereka, diintegrasikan ke dalam lapisan konsensus. Dengan demikian, blob memberikan solusi superior untuk rollup dibandingkan dengan menggunakan calldata untuk penyimpanan data.
Mendorong rollup untuk mentransisikan data mereka ke gumpalan dapat dicapai dengan menggunakan pendekatan "wortel dan tongkat". Mengurangi biaya gas blob berfungsi sebagai "wortel," sementara EIP ini berfungsi sebagai "tongkat" dengan meningkatkan biaya calldata, sehingga mengecilkan penyimpanan data yang berlebihan dalam transaksi. EIP ini melengkapi EIP-7691 berikutnya (peningkatan throughput Blob), yang meningkatkan jumlah maksimum blob yang diizinkan per blok.
Referensi: EIP-7691
Blob diperkenalkan di hard fork Dencun sebelumnya, dan nilai awal untuk jumlah maksimum dan target blob "per-blok" adalah perkiraan konservatif. Hal ini disebabkan oleh kompleksitas memprediksi bagaimana jaringan p2p akan menangani propagasi objek biner besar antara node validator. Konfigurasi awal telah terbukti bekerja dengan baik, menjadikannya waktu yang tepat untuk menguji nilai baru. Sebelumnya, jumlah target/maksimum blob per blok ditetapkan pada 3/6. Batas ini sekarang dinaikkan menjadi 6/9, masing-masing.
Ketika digabungkan dengan EIP-7623 sebelumnya (Meningkatkan biaya calldata), penyesuaian ini lebih memotivasi rollups untuk beralih data mereka dari calldata ke blobs. Pencarian parameter blob optimal terus berlanjut.
Referensi: EIP-7840
EIP ini mengusulkan menambahkan target dan jumlah maksimum blob 'per-block' (yang telah dibahas sebelumnya) dan nilai baseFeeUpdateFraction ke dalam file konfigurasi Ethereum Execution Layer (EL). Ini juga memungkinkan klien untuk mengambil nilai-nilai ini melalui API node. Fitur ini sangat berguna untuk tugas-tugas seperti memperkirakan biaya gas blob.
Referensi: EIP-7702
Ini adalah EIP yang sangat penting yang akan membawa perubahan besar bagi pengguna Ethereum. Seperti yang kita ketahui, sebuah EOA (Eksternal Owned Account) tidak dapat memiliki kode tetapi dapat memberikan tanda tangan transaksi (tx.origin). Sebaliknya, sebuah kontrak pintar memiliki bytecode tetapi tidak dapat menyampaikan tanda tangan langsung "nya". Setiap interaksi dari pengguna yang memerlukan logika tambahan, otomatis, dan dapat diverifikasi saat ini hanya dapat dicapai dengan memanggil kontrak eksternal untuk melakukan tindakan yang diperlukan. Namun, dalam kasus tersebut, kontrak eksternal menjadi msg.sender untuk kontrak berikutnya, menjadikan panggilan "sebuah panggilan dari kontrak, bukan pengguna."
EIP ini memperkenalkan tipe transaksi SET_CODE_TX_TYPE=0x04 yang baru (sebelumnya kita memiliki transaksi lama 0x1, transaksi baru 0x02 dari upgrade Berlin dan EIP-1559, dan transaksi blob 0x03 yang diperkenalkan di Dencun). Tipe transaksi baru ini memungkinkan pengaturan kode untuk akun EOA. Pada dasarnya, ini memungkinkan EOA untuk menjalankan kode eksternal “dalam konteks akun EOA-nya sendiri”. Dari perspektif eksternal, terlihat seperti, selama transaksi, EOA “meminjam” kode dari kontrak eksternal dan menjalankannya. Secara teknis, ini dimungkinkan dengan menambahkan tuple data otorisasi khusus ke penyimpanan “kode” dari alamat EOA (sebelum EIP ini, penyimpanan “kode” ini selalu kosong untuk EOAs).
Saat ini, EIP ini mengusulkan bahwa jenis transaksi baru 0x04 mencakup array:
authorization_list = [[chain_id, alamat, nonce, y_parity, r, s], ...]
di mana setiap elemen memungkinkan akun untuk menggunakan kode dari alamat yang ditentukan (dari item otorisasi valid terakhir). Memproses transaksi semacam itu menetapkan kode EOA yang diberikan ke 0xef0100 khusus || nilai alamat (23 byte), di mana alamat menunjuk ke kontrak dengan kode yang diinginkan untuk dieksekusi, || menunjukkan penggabungan, dan 0xef0100 mewakili nilai ajaib khusus yang tidak dapat ditampung oleh kontrak pintar biasa (sesuai EIP-3541). Nilai ajaib ini memastikan bahwa EOA ini tidak dapat diperlakukan sebagai kontrak biasa atau memiliki panggilan yang dibuat untuk itu seperti itu.
Ketika EOA ini memulai transaksi, alamat yang ditentukan akan digunakan untuk memanggil kode yang sesuai dalam konteks EOA tersebut. Meskipun detail implementasi lengkap dari EIP ini belum diketahui, sudah pasti akan membawa perubahan signifikan.
Salah satu dampak utama adalah memungkinkan kemampuan untuk melakukan multicalls langsung dari EOA. Multicalls adalah tren yang sedang berlangsung di DeFi, dengan banyak protokol menawarkan fitur ini sebagai alat yang kuat (contohnya Uniswap V4, Balancer V3, atau Euler V2). Dengan EIP ini, multicalls sekarang dapat dilakukan langsung dari EOAs.
Sebagai contoh, fitur baru ini menyelesaikan masalah umum dalam DeFi: ketidakefisienan approve() + anything() yang memerlukan dua transaksi terpisah. EIP ini memungkinkan adanya logika "pra-persetujuan" generik, memungkinkan tindakan seperti approve(X) + deposit(X) untuk diselesaikan dalam satu transaksi.
Keuntungan lain yang diperkenalkan oleh kemampuan untuk mendelegasikan eksekusi transaksi "atas nama" EOA adalah konsep sponsorship. Sponsor sering dibahas dan fitur yang sangat diinginkan untuk orientasi pengguna baru ke Ethereum.
Logika yang dapat diprogram yang terkait dengan EOA membuka berbagai kemungkinan, seperti mengimplementasikan pembatasan keamanan, menetapkan batas pengeluaran, menegakkan persyaratan KYC, dan banyak lagi.
Secara alami, pergeseran ini juga menimbulkan banyak pertanyaan desain. Salah satu masalah adalah penggunaan chain_id, yang menentukan apakah tanda tangan yang sama dapat atau tidak dapat valid di beberapa jaringan berdasarkan penyertaan atau pengecualiannya dalam tanda tangan. Masalah kompleks lainnya adalah apakah akan menggunakan alamat kode target versus menyematkan bytecode yang sebenarnya. Kedua pendekatan memiliki fitur dan keterbatasan yang unik. Selain itu, penggunaan nonce memainkan peran kunci dalam menentukan apakah izin "multiguna" atau "sekali pakai." Elemen-elemen ini memengaruhi fitur dan masalah keamanan, termasuk aspek-aspek seperti pembatalan tanda tangan secara massal dan kemudahan penggunaan. Vitalik telah mengajukan pertanyaan-pertanyaan ini dalam sebuah diskusi (di sini), yang perlu ditelusuri lebih lanjut.
Sangat penting untuk dicatat bahwa perubahan ini akan berdampak pada salah satu mekanisme keamanan Ethereum, tx.origin. Rincian lebih lanjut tentang implementasi EIP ini diperlukan, tetapi sepertinya perilaku require(tx.origin == msg.sender) akan berubah. Pemeriksaan ini telah menjadi cara yang paling dapat diandalkan untuk memastikan bahwa msg.sender adalah EOA dan BUKAN kontrak. Metode lain, seperti memeriksa EXTCODESIZE (untuk memeriksa apakah itu kontrak), sering gagal dan dapat dilewati (misalnya, dengan memanggil dari konstruktor atau dengan menyebarkan kode di alamat yang telah ditentukan setelah transaksi). Pemeriksaan ini telah digunakan untuk mencegah serangan reentrancy dan flashloan tetapi jauh dari ideal karena mereka juga menghambat integrasi dengan protokol eksternal. Setelah EIP ini, bahkan pemeriksaan require(tx.origin == msg.sender) yang andal tampaknya menjadi usang. Protokol harus beradaptasi dengan menghapus pemeriksaan tersebut, karena perbedaan antara "EOA" dan "kontrak" tidak akan berlaku lagi - sekarang setiap alamat berpotensi memiliki kode terkait.
Pemisahan EOA tradisional dan kontrak pintar terus memudar. EIP ini mendekatkan Ethereum pada desain seperti TON, di mana setiap akun pada dasarnya adalah kode yang dapat dieksekusi. Evolusi ini adalah hal yang wajar karena interaksi dengan protokol semakin kompleks, sehingga diperlukan logika yang dapat diprogram untuk meningkatkan UX bagi pengguna akhir.
Upgrade Prague/Electra (Pectra) dijadwalkan dilakukan pada Maret 2025. Perubahan yang paling signifikan yang direncanakan termasuk:
Seperti yang bisa Anda lihat, Pectra akan berdampak signifikan pada lapisan staking dan konsensus, serta pengalaman pengguna di lapisan eksekusi. Meskipun kita tidak dapat menganalisis semua perubahan ini secara detail melalui kode pada tahap ini, karena pengembangan sedang berlangsung, kita akan mencakup pembaruan ini dalam artikel-artikel mendatang.
แชร์
เนื้อหา
Teruskan Judul Asli: Penjelasan Hardfork Prague/Electra (Pectra)
Dalam artikel sebelumnya, kami secara menyeluruh meninjau siklus hidup validator Ethereum, membahas beberapa aspek terkait hardfork Electra yang akan datang. Sekarang, saatnya untuk fokus pada perubahan yang akan datang dalam upgrade Electra dan Prague serta menjelaskannya secara detail.
Sejarah Ethereum 2.0 'proof-of-stake' hardforks sangat kompleks. Dimulai dengan penambahan lapisan beacon ke lapisan eksekusi yang ada, meluncurkan konsensus proof-of-stake pada lapisan beacon sambil tetap mempertahankan proof-of-work pada lapisan eksekusi (hardfork Phase0 dan Altair). PoS kemudian sepenuhnya diaktifkan pada hardfork Bellatrix (meskipun penarikan tidak diaktifkan). Selanjutnya, hardfork Capella memungkinkan penarikan, menyelesaikan siklus validator. Hardfork terbaru, Deneb (bagian dari peningkatan Dencun (Deneb/Cancun)), membawa revisi minor pada parameter rantai beacon, seperti jendela waktu untuk menyertakan pernyataan, penanganan keluar sukarela, dan batas perputaran validator. Perubahan utama dalam Dencun berada pada lapisan eksekusi, memperkenalkan inovasi seperti transaksi blob, blob gas, komitmen KZG untuk blob, dan menghapus operasi SELFDESTRUCT.
Sekarang, hardfork Prague/Electra memperkenalkan peningkatan signifikan pada kedua lapisan eksekusi dan konsensus. Sebagai pemeriksa untuk proyek Lido, fokus kami sebagian besar pada perubahan konsensus dan staking dalam hardfork ini. Namun, kami tidak dapat mengabaikan perubahan lapisan eksekusi di Prague, karena mereka mencakup fitur-fitur kritis yang mempengaruhi jaringan Ethereum dan validator. Mari kita telusuri detail perubahan ini.
Electra memperkenalkan banyak fitur untuk lapisan beacon. Pembaruan utama meliputi:
Sementara itu, Praha memperkenalkan perubahan pada lapisan eksekusi, seperti:
Mari kita merujuk pada Proposal Peningkatan Ethereum (EIP) yang relevan untuk memfasilitasi diskusi lebih lanjut:
Beberapa EIP ini terutama menangani lapisan konsensus (beacon), sementara yang lain berhubungan dengan lapisan eksekusi. Beberapa mencakup kedua lapisan, karena operasi tertentu seperti deposit dan penarikan memerlukan perubahan yang disinkronkan di seluruh lapisan konsensus dan eksekusi. Karena ketergantungan ini, memisahkan Electra dan Prague tidak praktis, jadi kita akan meninjau setiap EIP secara berurutan dan menentukan komponen Ethereum yang terpengaruh dalam setiap kasus.
Referensi: EIP-7251
Sejak hardfork Phase0 pertama, diimplementasikan untuk mempersiapkan Ethereum untuk Proof-of-Stake, dan hingga Electra, saldo efektif maksimum validator ditetapkan pada 32 ETH. Mengaktifkan validator memerlukan setidaknya spec.min_activation_balance (32 ETH). Setelah aktivasi, validator memulai dengan saldo efektif maksimum ini tetapi dapat mengurangi saldo efektifnya ke spec.ejection_balance (16 ETH) dan dikeluarkan setelah mencapai ambang batas tersebut. Logika "minimum" ini tetap tidak berubah di Electra, tetapi sekarang spec.max_effective_balance telah meningkat menjadi 2048 ETH. Akibatnya, validator dapat menyetor antara 32 dan 2048 ETH untuk aktivasi, dengan semua jumlah dalam kisaran ini berkontribusi pada saldo efektif mereka. Pergeseran ini menandai perpindahan dari "proof-of-32ETH-stake" ke "proof-of-stake" :)
Saldo efektif variabel ini akan digunakan sekarang:
Dua kegiatan pertama adalah tindakan paling bermanfaat bagi validator. Oleh karena itu, setelah Electra, validator dengan taruhan yang lebih besar akan lebih sering berpartisipasi dalam proposisi blok dan komite sinkronisasi, sebanding dengan saldo efektif mereka.
Efek lain terkait dengan pengurangan. Semua hukuman pengurangan proporsional terhadap saldo efektif validator:
Electra juga mengusulkan perubahan dalam kuotasi pemangkasan, mendefinisikan sebagian dari saldo validator yang dipangkas dan diterima oleh pengadu.
Efek ketidakaktifan berikutnya. Ketika seorang validator offline saat aktif (memberikan atau mengajukan), sebuah skor ketidakaktifan terakumulasi, menyebabkan denda ketidakaktifan yang diterapkan setiap epoch. Denda-denda ini juga berbanding lurus dengan saldo efektif validator.
“Batasan churn” validator juga mengalami perubahan karena peningkatan saldo efektif. Di Ethereum “pra-Electra,” validator umumnya memiliki saldo efektif yang sama, dan batas keluar churn didefinisikan sebagai “tidak lebih dari 1/65536 (spec.churn_limit_quotient) dari total taruhan dapat keluar dalam satu epoch.” Hal ini menciptakan jumlah keluar validator “tetap” dengan taruhan yang sama. Namun, di “pasca-Electra,” kemungkinan terjadi skenario di mana hanya sedikit “paus” yang keluar, karena mereka mewakili sebagian besar total taruhan.
Pertimbangan lain adalah rotasi kunci validator yang banyak pada satu instansi validator. Validator besar saat ini terpaksa menjalankan ribuan kunci validator pada satu instansi untuk menampung taruhan besar, membaginya menjadi bagian 32 ETH. Dengan Electra, perilaku ini tidak lagi wajib. Secara finansial, perubahan ini tidak banyak berbeda karena imbalan dan probabilitas berkembang secara linear dengan jumlah yang dipertaruhkan. Dengan demikian, 100 validator dengan masing-masing 32 ETH setara dengan satu validator dengan 3200 ETH. Selain itu, beberapa kunci validator aktif dapat memiliki kredensial penarikan Eth1 yang sama, memungkinkan semua imbalan ditarik ke satu alamat ETH dan menghindari biaya gas yang terkait dengan konsolidasi imbalan. Namun, mengelola sejumlah besar kunci akan menimbulkan biaya administrasi tambahan.
Kemampuan untuk mengonsolidasikan saldo validator menambahkan jenis permintaan lapisan eksekusi lainnya. Sebelumnya, kami memiliki deposit dan penarikan. Sekarang, akan ada jenis lain: permintaan konsolidasi. Ini akan menggabungkan dua validator menjadi satu. Permintaan operasi ini akan mencakup pubkey validator sumber dan pubkey target, dan akan diproses dengan cara yang sama dengan deposit dan penarikan. Konsolidasi juga akan memiliki permintaan tertunda dan batas pergantian saldo, sama seperti deposit dan penarikan.
Untuk merangkum:
Salah satu topik penting lainnya adalah data historis dan estimasi keuntungan untuk validator, yang sangat relevan bagi peserta baru yang mencoba mengevaluasi risiko dan hasil. Batas 32 ETH (baik minimum maupun maksimum, dalam praktek) sebelum Electra (pada saat penulisan artikel ini) menciptakan keseragaman dalam data historis. Semua validator memiliki saldo efektif, imbalan, hukuman pemotongan individu, frekuensi proposal blok, dan metrik lain yang sama. Keseragaman ini memungkinkan Ethereum untuk menguji mekanisme konsensusnya dengan sejumlah besar validator tanpa adanya nilai ekstrem statistik, mengumpulkan data perilaku jaringan yang berharga.
Setelah Electra, distribusi saham akan berubah secara signifikan. Validator besar akan lebih sering berpartisipasi dalam proposal blok dan komite sinkronisasi, menerima hukuman yang lebih besar dalam acara pemotongan, dan memiliki pengaruh yang lebih besar pada pemotongan yang ditangguhkan, antrean aktivasi, dan antrean keluar. Meskipun ini dapat menciptakan tantangan dalam agregasi data, konsensus Ethereum memastikan bahwa perhitungan non-linear minimal. Satu-satunya komponen non-linear menggunakan sqrt(total_effective_balance) untuk menghitung reward dasar, yang berlaku seragam untuk semua validator. Ini berarti hadiah dan pemotongan validator masih dapat diperkirakan berdasarkan "per 1 ETH" (atau, lebih tepatnya, per spec.effective_balance_increment, yang berpotensi berubah di masa depan).
Untuk informasi lebih lanjut, lihat artikel sebelumnya tentang perilaku validator kami.
Referensi: EIP-7002
Setiap validator di Ethereum memiliki dua pasangan kunci: kunci aktif dan kunci penarikan. Kunci publik BLS aktif berfungsi sebagai identitas utama validator dalam rantai beacon, dan pasangan kunci ini digunakan untuk menandatangani blok, asertasi, pemotongan, agregat komite sinkronisasi, dan (sebelum EIP ini) keluar sukarela (untuk memulai keluar validator dari konsensus setelah penundaan). Pasangan kunci kedua ("kredensial penarikan") dapat berupa pasangan kunci BLS lain atau akun Eth1 reguler (kunci privat dan alamat). Sekarang, menarik ke alamat ETH memerlukan pesan penarikan yang ditandatangani oleh kunci privat BLS aktif. EIP ini mengubah hal tersebut.
Dalam praktiknya, pemilik dari dua pasang kunci ini (aktif dan penarikan) bisa berbeda. Kunci aktif validator bertanggung jawab atas tugas validasi: menjalankan server, menjaga agar tetap beroperasi, dll., sementara kredensial penarikan biasanya dikendalikan oleh pemilik staking, yang menerima imbalan dan bertanggung jawab atas dana tersebut. Saat ini, seorang pemilik staking yang hanya mengendalikan kredensial penarikan tidak bisa memulai keluar validator dan hanya bisa menarik imbalan. Situasi ini memungkinkan pemilik kunci aktif validator untuk secara efektif memegang saldo validator sebagai “sandera.” Validator dapat “mempresign” pesan keluar dan memberikannya kepada pemilik staking, namun solusi ini tidak ideal. Selain itu, baik penarikan maupun keluar saat ini memerlukan interaksi dengan validator lapisan beacon menggunakan API khusus.
Solusi optimal adalah memungkinkan pemilik staking untuk melakukan kedua operasi exit dan penarikan menggunakan panggilan kontrak pintar reguler. Ini melibatkan pemeriksaan tanda tangan Eth1 standar, sangat menyederhanakan operasi.
EIP ini memungkinkan pemilik staking untuk memicu penarikan dan keluar melalui transaksi standar dari alamat ETH mereka ke kontrak pintar yang didedikasikan (mirip dengan proses deposit yang ada yang menggunakan kontrak “Deposit”). Proses penarikan (atau keluar jika cukup staked dihapus) berfungsi sebagai berikut:
Sementara deposito adalah operasi yang dipicu di blok Eth1 dan kemudian "dipindahkan" ke lapisan Beacon menggunakan antrian deposito "pending", penarikan mengikuti skema yang berbeda. Mereka dipicu di lapisan Beacon (melalui CLI) dan kemudian "dipindahkan" ke blok Eth1. Sekarang, kedua skema tersebut akan beroperasi menggunakan kerangka kerja generik yang sama (sebagai berikut): pembuatan permintaan di lapisan Eth1, pemrosesan antrian deposito/penarikan/konsolidasi "pending", dan pemrosesan di lapisan Beacon. Untuk operasi "output" seperti penarikan, antrian output juga diproses, dan hasilnya "diselesaikan" di blok Eth1.
Dengan EIP ini, pemilik staking dapat menarik dan keluar dari validator mereka menggunakan transaksi ETH reguler tanpa perlu berinteraksi langsung dengan validator CLI atau mengakses infrastruktur validator. Hal ini sangat menyederhanakan operasi staking, terutama untuk penyedia staking besar. Infrastruktur validator sekarang hampir sepenuhnya terisolasi, karena hanya kunci validator aktif yang perlu dipelihara, sementara semua operasi staking dapat ditangani di tempat lain. Ini menghilangkan kebutuhan bagi solo staker untuk menunggu tindakan validator aktif dan secara signifikan menyederhanakan bagian luar dari layanan seperti Modul Staking Komunitas dari Lido.
Akibatnya, EIP ini "menyelesaikan" operasi staking dengan memigrasikannya sepenuhnya ke lapisan Eth1, secara signifikan mengurangi risiko keamanan infrastruktur, dan meningkatkan desentralisasi inisiatif staking salone.
Referensi: EIP-6110
Saat ini, deposit diimplementasikan melalui acara dalam kontrak sistem “Deposit” (seperti yang dibahas secara detail dalam artikel sebelumnya). Kontrak ini menerima ETH dan kredensial validator, mengeluarkan acara “Deposit()”, dan acara-acara ini kemudian dianalisis dan diubah menjadi permintaan deposit di lapisan beacon. Sistem ini memiliki banyak kekurangan: membutuhkan voting untuk eth1data pada lapisan chain beacon, yang menambahkan penundaan yang signifikan. Selain itu, lapisan beacon perlu mengambil data dari lapisan eksekusi, yang memperkenalkan kompleksitas lebih lanjut. Masalah-masalah ini dibahas secara detail dalam EIP. Metode yang lebih sederhana, yang menghilangkan banyak masalah ini, melibatkan langsung menyertakan permintaan deposit dalam blok Eth1 di lokasi yang ditentukan. Mekanisme ini mencerminkan proses penanganan penarikan yang dijelaskan dalam EIP sebelumnya.
Perubahan yang diusulkan dalam EIP ini menjanjikan. Pemrosesan eth1data sekarang dapat sepenuhnya dihapus, menghilangkan kebutuhan untuk pemungutan suara atau penundaan lama antara peristiwa di sisi Eth1 dan inklusi deposit pada lapisan beacon (saat ini sekitar 12 jam). Ini juga menghapus logika untuk snapshot kontrak deposit. EIP ini menyederhanakan pemrosesan deposit dan menyelarasinya dengan skema pemrosesan penarikan yang dijelaskan di atas.
Baik pemilik staking maupun validator, perubahan ini secara signifikan mengurangi keterlambatan antara deposit dan aktivasi validator. Top-up, yang diperlukan ketika validator diserang, juga akan lebih cepat.
Tidak banyak yang bisa dikatakan tentang EIP ini selain bahwa itu menghapus logika usang, menyederhanakan proses, dan menciptakan hasil yang lebih baik untuk semua pihak yang terlibat.
Referensi: EIP-7685
EIP ini seharusnya argumen telah disajikan sebelum tiga EIP terdahulu terkait deposit/penarikan/konsolidasi, karena ini meletakkan dasar bagi mereka. Namun, diperkenalkan di sini untuk menekankan kebutuhan yang semakin meningkat untuk mekanisme generik untuk secara konsisten memindahkan data khusus antara blok rantai Eth1 (eksekusi) dan Beacon (konsensus) (lapisan). EIP ini memengaruhi kedua lapisan, membuat pemrosesan permintaan yang dipicu oleh transaksi ETH reguler lebih efisien. Saat ini, kami mengamati:
Tiga operasi ini menunjukkan kebutuhan penanganan yang konsisten untuk berbagai jenis permintaan saat mereka berpindah antara lapisan eksekusi dan beacon. Selain itu, kami membutuhkan kemampuan untuk memicu operasi-operasi ini hanya menggunakan lapisan Eth1, karena ini akan memungkinkan kami mengisolasi infrastruktur validator dari infrastruktur pengelolaan staking, meningkatkan keamanan. Oleh karena itu, solusi generik untuk mengelola permintaan-permintaan seperti ini adalah praktis dan penting.
EIP ini menetapkan kerangka kerja untuk setidaknya tiga kasus utama: deposit, penarikan, dan konsolidasi. Inilah mengapa EIP sebelumnya memperkenalkan bidang seperti WITHDRAWAL_REQUEST_TYPE dan DEPOSIT_REQUEST_TYPE, dan sekarang konsolidasi akan menambahkan yang lain, CONSOLIDATION_REQUEST_TYPE. Selain itu, EIP ini kemungkinan akan mencakup mekanisme umum untuk menangani batasan untuk permintaan-permintaan tersebut (konstan referensi: PENDING_DEPOSITS_LIMIT, PENDING_PARTIAL_WITHDRAWALS_LIMIT, PENDING_CONSOLIDATIONS_LIMIT).
Meskipun detail implementasi khusus untuk kerangka kerja ini belum tersedia, namun pasti akan mencakup jenis permintaan kunci, mekanisme integritas (misalnya, hashing dan Merkle-izing permintaan), serta pemrosesan antrian tertunda dengan pembatasan kecepatan.
EIP ini memiliki signifikansi arsitektural, memungkinkan Eth1 untuk memicu tindakan kritis di lapisan Beacon melalui kerangka kerja yang terpadu. Bagi pengguna dan proyek, ini berarti semua permintaan yang dipicu di lapisan Eth1 akan disampaikan dan diproses di lapisan Beacon dengan lebih efisien.
Referensi: EIP-2537
Jika Anda tidak ingin terlalu mendalam, Anda dapat mempertimbangkan prekomputasi BLS12-381 sebagai operasi kriptografi kompleks yang sekarang dapat digunakan dalam kontrak cerdas. Bagi yang tertarik, mari kita jelajahi ini lebih lanjut.
Operasi matematika pada kurva eliptik seperti BLS12-381 (dan pasangannya: BN-254) saat ini digunakan untuk dua tujuan utama:
Jika Anda ingin memverifikasi tanda tangan BLS atau bukti zkSNARK dalam kontrak pintar, Anda harus menghitung "pasangan" ini yang mahal secara komputasi. Ethereum sudah memiliki kontrak yang telah dikompilasi sebelumnya untuk operasi kurva BN254 (EIP-196 dan EIP-197). Namun, kurva BLS12-381 (yang sekarang diakui lebih aman dan jauh lebih banyak digunakan saat ini) belum diimplementasikan sebagai prakompilasi. Tanpa prakompilasi seperti itu, menerapkan pasangan dan operasi kurva lainnya dalam kontrak pintar memerlukan perhitungan berat, seperti yang ditunjukkan di sini, dan mengkonsumsi gas dalam jumlah besar (~ 10 ^ 5 hingga 10 ^ 6 gas).
EIP ini membuka pintu bagi banyak aplikasi potensial, terutama dalam memungkinkan verifikasi tanda tangan BLS yang murah berdasarkan kurva BLS12-381. Ini memungkinkan untuk menerapkan skema ambang batas untuk berbagai tujuan. Seperti disebutkan sebelumnya, validator Ethereum sudah menggunakan tanda tangan berbasis BLS12-381. Dengan EIP ini, kontrak pintar standar sekarang dapat melakukan verifikasi yang efisien terhadap tanda tangan validator agregat. Ini dapat menyederhanakan bukti konsensus dan menjembatani aset antar jaringan, karena tanda tangan BLS banyak digunakan di seluruh blockchain. Tanda tangan BLS ambang batas sendiri memungkinkan pembangunan banyak skema ambang batas yang efisien untuk pemungutan suara, pembuatan nomor acak terdesentralisasi, multisig, dll.
Verifikasi bukti zkSNARK yang lebih murah akan, pada gilirannya, membuka banyak aplikasi. Banyak solusi berbasis zkSNARK saat ini terhambat oleh biaya tinggi verifikasi bukti, membuat beberapa proyek hampir tidak praktis. EIP ini memiliki potensi untuk mengubah hal tersebut.
Referensi: EIP-2935
EIP ini mengusulkan untuk menyimpan 8192 (~ 27,3 jam) hash blok historis dalam keadaan blockchain, memberikan riwayat panjang untuk klien stateless (seperti rollup) dan kontrak pintar. Ini menyarankan mempertahankan perilaku opcode BLOCKHASH saat ini, mempertahankan pembatasan hingga 256 blok, sambil memperkenalkan kontrak sistem baru yang dirancang khusus untuk menyimpan dan mengambil hash historis. Kontrak ini melakukan operasi set() ketika lapisan eksekusi memproses blok. Metode get()-nya, dapat diakses oleh siapa saja, mengambil hash blok yang diperlukan dari buffer ring.
Saat ini, memang memungkinkan untuk merujuk pada hash blok historis dalam EVM, tetapi akses terbatas pada 256 blok terbaru (~50 menit). Namun, ada kasus di mana akses ke data blok yang lebih lama sangat penting, seperti untuk aplikasi lintas-rantai (yang memerlukan bukti data dari blok sebelumnya) dan klien tanpa status, yang sesekali memerlukan akses ke hash blok sebelumnya.
EIP ini memperluas horizon waktu yang tersedia untuk rollups dan aplikasi lintas-rantai, memungkinkan mereka mengakses data historis secara langsung di EVM tanpa perlu mengumpulkannya secara eksternal. Akibatnya, solusi-solusi ini menjadi lebih kokoh dan berkelanjutan.
Referensi: EIP-7623
Biaya calldata mengatur ukuran yang tersedia dari muatan transaksi, yang dalam beberapa kasus bisa cukup besar (misalnya, saat melewati array besar atau buffer biner sebagai parameter). Penggunaan calldata yang signifikan terutama disebabkan oleh rollups, yang mengirimkan muatan melalui calldata yang berisi status rollup saat ini.
Kemampuan untuk memperkenalkan data biner yang besar dan dapat dibuktikan ke dalam blockchain sangat penting untuk rollup. Peningkatan Dencun (Deneb-Cancun) memperkenalkan inovasi besar untuk kasus penggunaan tersebut — transaksi blob (EIP-4844). Transaksi blob memiliki biaya gas "blob" khusus mereka sendiri, dan sementara tubuh mereka disimpan sementara, bukti kriptografi mereka (komitmen KZG), bersama dengan hash mereka, diintegrasikan ke dalam lapisan konsensus. Dengan demikian, blob memberikan solusi superior untuk rollup dibandingkan dengan menggunakan calldata untuk penyimpanan data.
Mendorong rollup untuk mentransisikan data mereka ke gumpalan dapat dicapai dengan menggunakan pendekatan "wortel dan tongkat". Mengurangi biaya gas blob berfungsi sebagai "wortel," sementara EIP ini berfungsi sebagai "tongkat" dengan meningkatkan biaya calldata, sehingga mengecilkan penyimpanan data yang berlebihan dalam transaksi. EIP ini melengkapi EIP-7691 berikutnya (peningkatan throughput Blob), yang meningkatkan jumlah maksimum blob yang diizinkan per blok.
Referensi: EIP-7691
Blob diperkenalkan di hard fork Dencun sebelumnya, dan nilai awal untuk jumlah maksimum dan target blob "per-blok" adalah perkiraan konservatif. Hal ini disebabkan oleh kompleksitas memprediksi bagaimana jaringan p2p akan menangani propagasi objek biner besar antara node validator. Konfigurasi awal telah terbukti bekerja dengan baik, menjadikannya waktu yang tepat untuk menguji nilai baru. Sebelumnya, jumlah target/maksimum blob per blok ditetapkan pada 3/6. Batas ini sekarang dinaikkan menjadi 6/9, masing-masing.
Ketika digabungkan dengan EIP-7623 sebelumnya (Meningkatkan biaya calldata), penyesuaian ini lebih memotivasi rollups untuk beralih data mereka dari calldata ke blobs. Pencarian parameter blob optimal terus berlanjut.
Referensi: EIP-7840
EIP ini mengusulkan menambahkan target dan jumlah maksimum blob 'per-block' (yang telah dibahas sebelumnya) dan nilai baseFeeUpdateFraction ke dalam file konfigurasi Ethereum Execution Layer (EL). Ini juga memungkinkan klien untuk mengambil nilai-nilai ini melalui API node. Fitur ini sangat berguna untuk tugas-tugas seperti memperkirakan biaya gas blob.
Referensi: EIP-7702
Ini adalah EIP yang sangat penting yang akan membawa perubahan besar bagi pengguna Ethereum. Seperti yang kita ketahui, sebuah EOA (Eksternal Owned Account) tidak dapat memiliki kode tetapi dapat memberikan tanda tangan transaksi (tx.origin). Sebaliknya, sebuah kontrak pintar memiliki bytecode tetapi tidak dapat menyampaikan tanda tangan langsung "nya". Setiap interaksi dari pengguna yang memerlukan logika tambahan, otomatis, dan dapat diverifikasi saat ini hanya dapat dicapai dengan memanggil kontrak eksternal untuk melakukan tindakan yang diperlukan. Namun, dalam kasus tersebut, kontrak eksternal menjadi msg.sender untuk kontrak berikutnya, menjadikan panggilan "sebuah panggilan dari kontrak, bukan pengguna."
EIP ini memperkenalkan tipe transaksi SET_CODE_TX_TYPE=0x04 yang baru (sebelumnya kita memiliki transaksi lama 0x1, transaksi baru 0x02 dari upgrade Berlin dan EIP-1559, dan transaksi blob 0x03 yang diperkenalkan di Dencun). Tipe transaksi baru ini memungkinkan pengaturan kode untuk akun EOA. Pada dasarnya, ini memungkinkan EOA untuk menjalankan kode eksternal “dalam konteks akun EOA-nya sendiri”. Dari perspektif eksternal, terlihat seperti, selama transaksi, EOA “meminjam” kode dari kontrak eksternal dan menjalankannya. Secara teknis, ini dimungkinkan dengan menambahkan tuple data otorisasi khusus ke penyimpanan “kode” dari alamat EOA (sebelum EIP ini, penyimpanan “kode” ini selalu kosong untuk EOAs).
Saat ini, EIP ini mengusulkan bahwa jenis transaksi baru 0x04 mencakup array:
authorization_list = [[chain_id, alamat, nonce, y_parity, r, s], ...]
di mana setiap elemen memungkinkan akun untuk menggunakan kode dari alamat yang ditentukan (dari item otorisasi valid terakhir). Memproses transaksi semacam itu menetapkan kode EOA yang diberikan ke 0xef0100 khusus || nilai alamat (23 byte), di mana alamat menunjuk ke kontrak dengan kode yang diinginkan untuk dieksekusi, || menunjukkan penggabungan, dan 0xef0100 mewakili nilai ajaib khusus yang tidak dapat ditampung oleh kontrak pintar biasa (sesuai EIP-3541). Nilai ajaib ini memastikan bahwa EOA ini tidak dapat diperlakukan sebagai kontrak biasa atau memiliki panggilan yang dibuat untuk itu seperti itu.
Ketika EOA ini memulai transaksi, alamat yang ditentukan akan digunakan untuk memanggil kode yang sesuai dalam konteks EOA tersebut. Meskipun detail implementasi lengkap dari EIP ini belum diketahui, sudah pasti akan membawa perubahan signifikan.
Salah satu dampak utama adalah memungkinkan kemampuan untuk melakukan multicalls langsung dari EOA. Multicalls adalah tren yang sedang berlangsung di DeFi, dengan banyak protokol menawarkan fitur ini sebagai alat yang kuat (contohnya Uniswap V4, Balancer V3, atau Euler V2). Dengan EIP ini, multicalls sekarang dapat dilakukan langsung dari EOAs.
Sebagai contoh, fitur baru ini menyelesaikan masalah umum dalam DeFi: ketidakefisienan approve() + anything() yang memerlukan dua transaksi terpisah. EIP ini memungkinkan adanya logika "pra-persetujuan" generik, memungkinkan tindakan seperti approve(X) + deposit(X) untuk diselesaikan dalam satu transaksi.
Keuntungan lain yang diperkenalkan oleh kemampuan untuk mendelegasikan eksekusi transaksi "atas nama" EOA adalah konsep sponsorship. Sponsor sering dibahas dan fitur yang sangat diinginkan untuk orientasi pengguna baru ke Ethereum.
Logika yang dapat diprogram yang terkait dengan EOA membuka berbagai kemungkinan, seperti mengimplementasikan pembatasan keamanan, menetapkan batas pengeluaran, menegakkan persyaratan KYC, dan banyak lagi.
Secara alami, pergeseran ini juga menimbulkan banyak pertanyaan desain. Salah satu masalah adalah penggunaan chain_id, yang menentukan apakah tanda tangan yang sama dapat atau tidak dapat valid di beberapa jaringan berdasarkan penyertaan atau pengecualiannya dalam tanda tangan. Masalah kompleks lainnya adalah apakah akan menggunakan alamat kode target versus menyematkan bytecode yang sebenarnya. Kedua pendekatan memiliki fitur dan keterbatasan yang unik. Selain itu, penggunaan nonce memainkan peran kunci dalam menentukan apakah izin "multiguna" atau "sekali pakai." Elemen-elemen ini memengaruhi fitur dan masalah keamanan, termasuk aspek-aspek seperti pembatalan tanda tangan secara massal dan kemudahan penggunaan. Vitalik telah mengajukan pertanyaan-pertanyaan ini dalam sebuah diskusi (di sini), yang perlu ditelusuri lebih lanjut.
Sangat penting untuk dicatat bahwa perubahan ini akan berdampak pada salah satu mekanisme keamanan Ethereum, tx.origin. Rincian lebih lanjut tentang implementasi EIP ini diperlukan, tetapi sepertinya perilaku require(tx.origin == msg.sender) akan berubah. Pemeriksaan ini telah menjadi cara yang paling dapat diandalkan untuk memastikan bahwa msg.sender adalah EOA dan BUKAN kontrak. Metode lain, seperti memeriksa EXTCODESIZE (untuk memeriksa apakah itu kontrak), sering gagal dan dapat dilewati (misalnya, dengan memanggil dari konstruktor atau dengan menyebarkan kode di alamat yang telah ditentukan setelah transaksi). Pemeriksaan ini telah digunakan untuk mencegah serangan reentrancy dan flashloan tetapi jauh dari ideal karena mereka juga menghambat integrasi dengan protokol eksternal. Setelah EIP ini, bahkan pemeriksaan require(tx.origin == msg.sender) yang andal tampaknya menjadi usang. Protokol harus beradaptasi dengan menghapus pemeriksaan tersebut, karena perbedaan antara "EOA" dan "kontrak" tidak akan berlaku lagi - sekarang setiap alamat berpotensi memiliki kode terkait.
Pemisahan EOA tradisional dan kontrak pintar terus memudar. EIP ini mendekatkan Ethereum pada desain seperti TON, di mana setiap akun pada dasarnya adalah kode yang dapat dieksekusi. Evolusi ini adalah hal yang wajar karena interaksi dengan protokol semakin kompleks, sehingga diperlukan logika yang dapat diprogram untuk meningkatkan UX bagi pengguna akhir.
Upgrade Prague/Electra (Pectra) dijadwalkan dilakukan pada Maret 2025. Perubahan yang paling signifikan yang direncanakan termasuk:
Seperti yang bisa Anda lihat, Pectra akan berdampak signifikan pada lapisan staking dan konsensus, serta pengalaman pengguna di lapisan eksekusi. Meskipun kita tidak dapat menganalisis semua perubahan ini secara detail melalui kode pada tahap ini, karena pengembangan sedang berlangsung, kita akan mencakup pembaruan ini dalam artikel-artikel mendatang.