Salah satu tantangan Ethereum adalah bahwa secara default, pembengkakan dan kompleksitas protokol blockchain apa pun bertambah seiring waktu. Ini terjadi di dua tempat:
Untuk Ethereum bertahan dalam jangka panjang, kita memerlukan tekanan lawan yang kuat terhadap kedua tren ini, mengurangi kompleksitas dan pembengkakan dari waktu ke waktu. Tetapi pada saat yang sama, kita perlu mempertahankan salah satu properti kunci yang membuat blockchain hebat: keabadian mereka. Anda dapat menempatkan NFT, catatan cinta dalam calldata transaksi, atau kontrak pintar yang berisi sejuta dolar onchain, pergi ke dalam gua selama sepuluh tahun, keluar dan menemukannya masih ada menunggu Anda untuk membaca dan berinteraksi dengannya. Agar dapps merasa nyaman untuk sepenuhnya terdesentralisasi dan menghapus kunci upgrade mereka, mereka perlu yakin bahwa dependensi mereka tidak akan melakukan upgrade dengan cara yang merusak mereka - terutama L1 itu sendiri.
Pembersihan Besar-besaran, peta jalan 2023.
Menyeimbangkan antara dua kebutuhan ini, dan meminimalkan atau membalik bengkak, kompleksitas, dan kerusakan sambil mempertahankan kontinuitas, adalah hal yang sangat mungkin jika kita memusatkan pikiran kita padanya. Organisme hidup bisa melakukannya: sementara sebagian besar menua seiring waktu,beberapa orang beruntung tidak. Bahkan sistem sosial pun dapat memiliki umur panjang yang luar biasaPada beberapa kesempatan, Ethereum telah menunjukkan kesuksesan: bukti kerja sudah hilang, opcode SELFDESTRUCT sebagian besar sudah hilang, dan node rantai pelita sudah menyimpan data lama hanya sampai enam bulan. Menemukan jalur ini untuk Ethereum dengan cara yang lebih umum, dan bergerak menuju hasil akhir yang stabil untuk jangka panjang, adalah tantangan utama keberlanjutan teknis, skalabilitas jangka panjang, dan bahkan keamanan Ethereum.
Pada saat penulisan ini, sebuah node Ethereum yang telah disinkronisasi penuh membutuhkan sekitar 1,1 terabyteof ruang disk untuk klien eksekusi, ditambah beberapa ratus gigabyte lagi untuk klien konsensus. Sebagian besar dari ini adalah sejarah: data tentang blok historis, transaksi, dan tanda terima, yang sebagian besar di antaranya sudah berusia bertahun-tahun. Ini berarti ukuran sebuah node terus bertambah ratusan gigabyte setiap tahun, bahkan jika batas gas tidak bertambah sama sekali.
Fitur kunci yang menyederhanakan masalah penyimpanan sejarah adalah bahwa setiap blok menunjuk ke blok sebelumnya melalui tautan hash (dan lainnya struktur), memiliki konsensus tentang masa kini sudah cukup untuk memiliki konsensus tentang sejarah. Selama jaringan memiliki konsensus tentang blok terbaru, setiap blok historis atau transaksi atau status (saldo akun, nonce, kode, penyimpanan) dapat disediakan oleh aktor tunggal mana pun bersama dengan bukti Merkle, dan bukti tersebut memungkinkan orang lain untuk memverifikasi kebenarannya. Sementara konsensus adalah model kepercayaan N / 2-of-N, sejarah adalah model kepercayaan 1-dari-N.
Ini membuka banyak pilihan untuk bagaimana kita dapat menyimpan sejarah. Salah satu opsi alami adalah jaringan di mana setiap node hanya menyimpan persentase kecil dari data. Inilah bagaimana jaringan torrent telah bekerja selama puluhan tahun: sementara jaringan secara keseluruhan menyimpan dan mendistribusikan jutaan file, setiap peserta hanya menyimpan dan mendistribusikan beberapa di antaranya. Mungkin secara kontra-intuitif, pendekatan ini bahkan tidak selalu mengurangi kekokohan data. Jika, dengan membuat node yang lebih terjangkau, kita dapat mencapai jaringan dengan 100.000 node, di mana setiap node menyimpan 10% sejarah secara acak, maka setiap data akan direplikasi 10.000 kali - persis sama dengan faktor replikasi 10.000-node network di mana setiap node menyimpan semuanya.
Hari ini, Ethereum sudah mulai menjauh dari model semua node menyimpan semua riwayat selamanya. Blok konsensus (yaitu bagian yang terkait dengan konsensus bukti kepemilikan) hanya disimpan selama ~6 bulan. Blobs hanya disimpan selama ~18 hari.EIP-4444bertujuan untuk memperkenalkan periode penyimpanan satu tahun untuk blok historis dan tanda terima. Tujuan jangka panjang adalah memiliki periode yang diselaraskan (yang bisa ~18 hari) di mana setiap node bertanggung jawab untuk menyimpan segalanya, dan kemudian memiliki jaringan peer-to-peer yang terdiri dari node Ethereum yang menyimpan data lama secara terdistribusi.
Kode erasure dapat digunakan untuk meningkatkan ketahanan sambil menjaga faktor replikasi tetap sama. Faktanya, blob sudah datang dalam bentuk kode erasure untuk mendukung pengambilan sampel ketersediaan data. Solusi paling sederhana mungkin adalah untuk menggunakan ulang kode erasure ini, dan memasukkan data blok eksekusi dan konsensus ke dalam blob juga.
Pekerjaan utama yang tersisa melibatkan membangun dan mengintegrasikan solusi terdistribusi konkret untuk menyimpan sejarah - setidaknya sejarah pelaksanaan, tetapi pada akhirnya juga konsensus dan blob. Solusi yang paling mudah untuk ini adalah (i) dengan hanya memperkenalkan perpustakaan torrent yang ada, dan (ii) solusi Ethereum-native yang disebut protokol gate.jaringan Portal. Setelah salah satunya diperkenalkan, kita dapat mengaktifkan EIP-4444. EIP-4444 sendiri tidak memerlukan hard fork, meskipun membutuhkan versi protokol jaringan baru. Karena alasan ini, ada nilai dalam mengaktifkannya untuk semua klien pada saat yang sama, karena jika tidak ada risiko klien tidak berfungsi dengan baik saat terhubung ke node lain yang mengharapkan untuk mengunduh riwayat lengkap tetapi sebenarnya tidak mendapatkannya.
Kompromi utama melibatkan seberapa keras kita mencoba untuk membuat data sejarah 'kuno' tersedia. Solusi paling mudah adalah dengan berhenti menyimpan sejarah kuno besok, dan mengandalkan simpul arsip yang ada dan berbagai penyedia terpusat untuk replikasi. Ini mudah, tetapi melemahkan posisi Ethereum sebagai tempat untuk membuat catatan permanen. Jalur yang lebih sulit, tetapi lebih aman, adalah dengan membangun dan mengintegrasikan jaringan torrent untuk menyimpan sejarah secara terdistribusi. Di sini, ada dua dimensi 'seberapa keras kita mencoba':
Sebuah pendekatan yang sangat paranoid untuk (1) akan melibatkanbukti penyimpanan: sebenarnya memerlukan setiap validator proof of stake untuk menyimpan sebagian persentase sejarah, dan secara teratur memeriksa secara kriptografis bahwa mereka melakukannya. Pendekatan yang lebih moderat adalah menetapkan standar sukarela untuk persentase sejarah yang disimpan setiap klien.
Untuk (2), implementasi dasar melibatkan hanya mengambil pekerjaan yang sudah dilakukan saat ini: Portal sudah menyimpan file ERA yang berisi sejarah Ethereum seluruhnya. Implementasi yang lebih menyeluruh akan melibatkan menghubungkan ini ke proses sinkronisasi, sehingga jika seseorang ingin melakukan sinkronisasi node penyimpanan sejarah lengkap atau node arsip, mereka dapat melakukannya bahkan jika tidak ada node arsip lain yang ada online, dengan melakukan sinkronisasi langsung dari jaringan Portal.
Mengurangi persyaratan penyimpanan riwayat mungkin lebih penting daripada keadaan tanpa keadaan jika kita ingin membuatnya sangat mudah untuk menjalankan atau menjalankan node: dari 1,1 TB yang diperlukan oleh node, ~300 GB adalah keadaan, dan sisanya ~800 GB adalah sejarah. Visi dari node Ethereum yang berjalan di smart watch dan hanya memerlukan beberapa menit untuk diatur hanya dapat dicapai jika keduanya keadaan tanpa keadaan dan EIP-4444 diimplementasikan.
Membatasi penyimpanan riwayat juga membuatnya lebih layak bagi implementasi simpul Ethereum yang lebih baru untuk hanya mendukung versi terbaru dari protokol, yang memungkinkan mereka menjadi jauh lebih sederhana. Sebagai contoh, banyak baris kode dapat dengan aman dihapus sekarang bahwa slot penyimpanan kosong yang dibuat selama serangan DoS 2016 telah semua dihapus.dihapus. Sekarang bahwa peralihan ke bukti kepemilikan sudah menjadi sejarah kuno, klien dapat dengan aman menghapus semua kode terkait bukti kerja.
Meskipun kita menghilangkan kebutuhan bagi klien untuk menyimpan riwayat, kebutuhan penyimpanan klien akan terus bertambah sekitar 50 GB per tahun, karena pertumbuhan yang terus berlanjut ke dalam keadaan: saldo akun dan nonces, kode kontrak dan penyimpanan kontrak. Pengguna dapat membayar biaya satu kali untuk memberikan beban pada klien Ethereum saat ini dan masa depan selamanya.
Negara jauh lebih sulit untuk 'kedaluwarsa' daripada sejarah, karena EVM pada dasarnya dirancang dengan asumsi bahwa begitu objek negara dibuat, itu akan selalu ada dan dapat dibaca oleh transaksi apa pun kapan pun. Jika kita memperkenalkan tanpa negara, ada argumen bahwa mungkin masalah ini tidak terlalu buruk: hanya kelas khusus pembangun blok yang perlu benar-benar menyimpan negara, dan semua node lain (bahkan daftar inklusi(produksi!) dapat berjalan tanpa keadaan. Namun, ada argumen bahwa kita tidak ingin terlalu bergantung pada keadaan tanpa keadaan, dan pada akhirnya kita mungkin ingin menghapus keadaan untuk menjaga Ethereum terdesentralisasi.
Hari ini, ketika Anda membuat objek state baru (yang dapat terjadi dalam satu dari tiga cara: (i) mengirim ETH ke akun baru, (ii) membuat akun baru dengan kode, (iii) mengatur slot penyimpanan yang sebelumnya belum disentuh), objek state tersebut akan berada dalam keadaan selamanya. Yang kita inginkan sebaliknya, adalah agar objek-objek tersebut secara otomatis kedaluwarsa seiring waktu. Tantangan utamanya adalah melakukan ini dengan cara yang mencapai tiga tujuan:
Sangat mudah untuk memecahkan masalah tanpa memenuhi tujuan-tujuan ini. Misalnya, Anda dapat meminta setiap objek status juga menyimpan penghitung untuk tanggal kedaluwarsanya (yang dapat diperpanjang dengan membakar ETH, yang dapat terjadi secara otomatis kapan saja dibaca atau ditulis), dan memiliki proses yang berulang melalui status untuk menghapus objek status kedaluwarsa. Namun, ini memperkenalkan perhitungan tambahan (dan bahkan persyaratan penyimpanan), dan jelas tidak memenuhi persyaratan keramahan pengguna. Pengembang juga akan kesulitan bernalar tentang kasus tepi yang melibatkan nilai penyimpanan yang terkadang disetel ulang ke nol. Jika Anda membuat kontrak penghitung waktu kedaluwarsa, ini membuat hidup secara teknis lebih mudah bagi pengembang, tetapi itu membuat ekonomi lebih sulit: pengembang harus memikirkan cara "melewati" biaya penyimpanan yang sedang berlangsung kepada pengguna mereka.
Ini adalah masalah-masalah yang dihadapi komunitas pengembangan inti Ethereum selama bertahun-tahun, termasuk proposal seperti “sewa blockchaindanregenesis“. Akhirnya, kami menggabungkan bagian terbaik dari proposal dan berkumpul pada dua kategori "solusi yang paling tidak buruk":
Proposal penghapusan status parsial semuanya bekerja dengan prinsip yang sama. Kami membagi status menjadi bagian-bagian. Setiap orang menyimpan secara permanen "peta tingkat atas" tentang bagian mana yang kosong atau tidak kosong. Data dalam setiap bagian hanya disimpan jika data tersebut baru-baru ini diakses. Ada mekanisme "kebangkitan" di mana jika sebuah bagian tidak lagi disimpan, siapa pun dapat mengembalikan data tersebut dengan memberikan bukti tentang apa data tersebut.
Perbedaan utama antara proposal-proposal ini adalah: (i) bagaimana kita mendefinisikan "baru-baru ini", dan (ii) bagaimana kita mendefinisikan "chunk"? Salah satu proposal konkret adalah EIP-7736, yang dibangun berdasarkan desain “stem-and-leaf”diperkenalkan untuk pohon Verkle(meskipun kompatibel dengan bentuk ketiadaan negara apa pun, misalnya pohon biner). Dalam desain ini, header, kode, dan slot penyimpanan yang berdekatan disimpan di bawah 'batang' yang sama. Data yang disimpan di bawah 'batang' maksimal 256 * 31 = 7.936 byte. Dalam banyak kasus, seluruh header dan kode, dan banyak slot penyimpanan kunci, dari sebuah akun akan disimpan di bawah 'batang' yang sama. Jika data di bawah 'batang' tertentu tidak dibaca atau ditulis selama 6 bulan, data tersebut tidak lagi disimpan, dan hanya komitmen 32 byte ('tunggulah') ke data yang disimpan. Transaksi masa depan yang mengakses data tersebut perlu 'menghidupkan kembali' data, dengan bukti yang akan diperiksa terhadap 'tunggulah'.
Ada cara lain untuk menerapkan ide serupa. Misalnya, jika granularitas tingkat akun tidak mencukupi, kita dapat membuat skema di mana setiap 1/232 bagian dari pohon diperintah oleh mekanisme batang-dan-daun yang serupa.
Ini lebih rumit karena insentif: penyerang dapat memaksa klien untuk secara permanen menyimpan sejumlah besar status dengan memasukkan sejumlah besar data ke dalam satu subpohon dan mengirim satu transaksi setiap tahun untuk "memperbarui pohon". Jika Anda membuat biaya perpanjangan proporsional (atau durasi perpanjangan berbanding terbalik) dengan ukuran pohon, maka seseorang dapat membuat pengguna lain sedih dengan memasukkan sejumlah besar data ke dalam subpohon yang sama dengan mereka. Seseorang dapat mencoba membatasi kedua masalah dengan membuat granularitas dinamis berdasarkan ukuran subtree: misalnya, setiap objek keadaan 216 = 65536 berturut-turut dapat diperlakukan sebagai "grup". Namun, ide-ide ini lebih kompleks; Pendekatan berbasis STEM sederhana, dan menyelaraskan insentif, karena biasanya semua data di bawah STEM terkait dengan aplikasi atau pengguna yang sama.
Bagaimana jika kita ingin menghindari pertumbuhan status permanen sama sekali, bahkan 32-byte stub? Ini adalah masalah yang sulit karena dari @vbuterin/state_size_management#Resurrection-conflicts">konflik kebangkitan: bagaimana jika objek negara dihapus, kemudian eksekusi EVM menempatkan objek negara lain di posisi yang sama persis, tetapi setelah itu seseorang yang peduli dengan objek negara asli kembali dan mencoba memulihkannya? Dengan kadaluwarsa negara parsial, "stub" mencegah data baru dibuat. Dengan kadaluwarsa negara penuh, kita tidak mampu menyimpan bahkan stub.
Desain berbasis periode alamat adalah ide terbaik yang dikenal untuk mengatasi hal ini. Alih-alih memiliki satu pohon status yang menyimpan seluruh status, kami memiliki daftar pohon status yang terus berkembang, dan setiap status yang dibaca atau ditulis disimpan dalam pohon status yang paling baru. Pohon status kosong baru ditambahkan satu kali per periode (bayangkan: 1 tahun). Pohon status yang lebih lama membeku. Node penuh hanya diharapkan menyimpan dua pohon terbaru. Jika objek status tidak disentuh selama dua periode dan dengan demikian jatuh ke dalam pohon kedaluwarsa, masih bisa dibaca atau ditulis, tetapi transaksi perlu membuktikan bukti Merkle untuknya - dan begitu dilakukan, salinan akan disimpan kembali di pohon terbaru.
Sebuah gagasan utama untuk membuat semua ini ramah pengguna dan pengembang adalah konsep periode alamat. Sebuah periode alamat adalah nomor yang merupakan bagian dari alamat. Aturan utama adalah bahwa alamat dengan periode alamat N hanya dapat dibaca atau ditulis selama atau setelah periode N (yaitu ketika daftar pohon keadaan mencapai panjang N). Jika Anda menyimpan objek keadaan baru (misalnya kontrak baru, atau saldo ERC20 baru), jika Anda memastikan untuk menempatkan objek keadaan ke dalam kontrak yang periode alamatnya adalah baik N atau N-1, maka Anda dapat menyimpannya secara langsung, tanpa perlu memberikan bukti bahwa tidak ada yang ada sebelumnya. Namun, setiap penambahan atau pengeditan keadaan dalam periode alamat yang lebih tua memerlukan bukti.
Desain ini mempertahankan sebagian besar properti Ethereum saat ini, sangat ringan dalam komputasi tambahan, memungkinkan aplikasi ditulis hampir seperti saat ini (ERC20 perlu menulis ulang, untuk memastikan saldo alamat dengan periode alamat N disimpan dalam kontrak anak yang memiliki periode alamat N itu sendiri), dan memecahkan masalah 'pengguna masuk ke dalam gua selama lima tahun'. Namun, ada satu masalah besar: alamat perlu diperluas lebih dari 20 byte untuk memuat periode alamat.
Salah satu usulan adalah memperkenalkan format alamat baru berukuran 32 byte, yang mencakup nomor versi, nomor periode alamat, dan hash yang diperluas.
0x01000000000157aE408398dF7E5f4552091A69125d5dFcb7B8C2659029395bdF
Merah adalah nomor versi. Keempat nol berwarna oranye di sini dimaksudkan sebagai ruang kosong, yang dapat menampung nomor shard di masa depan. Hijau adalah nomor periode alamat. Biru adalah hash 26 byte.
Tantangan utama di sini adalah kompatibilitas mundur. Kontrak yang ada dirancang berdasarkan alamat 20 byte, dan sering menggunakan teknik byte-packing yang ketat yang secara eksplisit mengasumsikan alamat memiliki panjang tepat 20 byte.@ipsilon/address-space-extension-exploration">Salah satu ide untuk memecahkan masalah ini melibatkan peta terjemahan, di mana kontrak gaya lama yang berinteraksi dengan alamat gaya baru akan melihat hash 20 byte dari alamat gaya baru. Namun, ada kompleksitas signifikan yang terlibat dalam membuat ini aman.
Pendekatan lain melibatkan arah yang berlawanan: kita segera melarang sebagian sub-range alamat berukuran 2128 tertentu (misalnya semua alamat yang dimulai dengan 0xffffffff), dan kemudian menggunakan rentang tersebut untuk memperkenalkan alamat dengan periode alamat dan hash 14 byte.
0xfffffff000169125d5dFcb7B8C2659029395bdF
Korban kunci yang dibuat oleh pendekatan ini, adalah bahwa itu memperkenalkan risiko keamanan untuk alamat kontrafaktual: alamat yang menyimpan aset atau izin, tetapi kodenya belum dipublikasikan ke Chain. Risiko melibatkan seseorang yang membuat alamat yang mengklaim memiliki satu bagian kode (belum dipublikasikan), tetapi juga memiliki potongan kode lain yang valid yang hash ke alamat yang sama. Menghitung tabrakan seperti itu membutuhkan 280hashes hari ini; kontraksi ruang alamat akan mengurangi angka ini menjadi 2 yang sangat mudah diakses56hashes.
Area risiko kunci, alamat kontrafaktual yang bukan dompet yang dimiliki oleh satu pemilik, merupakan kasus yang relatif jarang terjadi saat ini, tetapi kemungkinan akan menjadi lebih umum saat kita memasuki dunia multi-L2. Satu-satunya solusi hanyalah menerima risiko ini, tetapi mengidentifikasi semua kasus penggunaan umum di mana ini mungkin menjadi masalah, dan mencari solusi alternatif yang efektif.
Saya melihat empat jalur yang layak untuk masa depan:
Satu poin penting adalah bahwa masalah-masalah sulit seputar perluasan dan penyusutan ruang alamat pada akhirnya harus diatasi terlepas dari apakah skema kadaluwarsa status yang bergantung pada perubahan format alamat pernah diterapkan. Saat ini, membutuhkan sekitar 280 hash untuk menghasilkan tabrakan alamat, beban komputasi yang sudah layak untuk aktor dengan sumber daya yang sangat baik: GPU dapat melakukan sekitar 227hash, jadi jika dijalankan selama satu tahun, ia dapat menghitung 252, jadi semua ~2^30 GPU di duniadapat menghitung tabrakan dalam waktu sekitar 1/4 tahun, dan FPGAs dan ASICs dapat mempercepat ini lebih lanjut. Di masa depan, serangan seperti ini akan terbuka bagi lebih banyak orang. Oleh karena itu, biaya aktual dari menerapkan kadaluwarsa status penuh mungkin tidak sebesar yang terlihat, karena kita harus menyelesaikan masalah alamat yang sangat menantang ini bagaimanapun juga.
Melakukan kadaluarsa status secara potensial membuat transisi dari satu format pohon status ke format lain menjadi lebih mudah, karena tidak akan ada kebutuhan untuk prosedur transisi: Anda bisa mulai membuat pohon baru menggunakan format baru, dan kemudian melakukan hard fork untuk mengonversi pohon-pohon lama. Oleh karena itu, meskipun kadaluwarsa status itu kompleks, ia memiliki manfaat dalam menyederhanakan aspek lain dari peta jalan.
Salah satu prasyarat kunci dari keamanan, aksesibilitas dan netralitas yang kredibel adalah kesederhanaan. Jika sebuah protokol indah dan sederhana, itu mengurangi kemungkinan akan ada bug. Ini meningkatkan kemungkinan bahwa pengembang baru akan dapat masuk dan bekerja dengan bagian mana pun darinya. Ini lebih cenderung adil dan lebih mudah untuk membela terhadap kepentingan khusus. Sayangnya, protokol, seperti sistem sosial lainnya, secara default menjadi lebih kompleks dari waktu ke waktu. Jika kita tidak ingin Ethereum masuk ke lubang hitam dengan kompleksitas yang terus meningkat, kita perlu melakukan salah satu dari dua hal: (i) berhenti membuat perubahan dan mengeraskan protokol, (ii) dapat benar-benar menghapus fitur dan mengurangi kompleksitas. Rute perantara, membuat lebih sedikit perubahan pada protokol, dan juga menghapus setidaknya sedikit kerumitan dari waktu ke waktu, juga dimungkinkan. Bagian ini akan berbicara bagaimana kita dapat mengurangi atau menghilangkan kompleksitas.
Tidak ada perbaikan tunggal besar yang dapat mengurangi kompleksitas protokol; sifat inheren dari masalah ini adalah ada banyak perbaikan kecil.
Salah satu contoh yang sebagian besar sudah selesai, dan dapat berfungsi sebagai cetak biru untuk bagaimana menangani yang lain, adalah @vbuterin/selfdestruct">penghapusan opcode SELFDESTRUCT. Opcode SELFDESTRUCT adalah satu-satunya opcode yang dapat mengubah jumlah slot penyimpanan yang tidak terbatas dalam satu blok, memerlukan klien untuk menerapkan kompleksitas yang jauh lebih besar untuk menghindari serangan DoS. Tujuan asli dari opcode ini adalah untuk memungkinkan penghapusan status sukarela, memungkinkan ukuran status untuk berkurang dari waktu ke waktu. Dalam praktiknya, sangat sedikit yang akhirnya menggunakannya. opcode telah dibuat lebih lemahhanya memungkinkan akun yang hancur sendiri dibuat dalam transaksi yang sama dalam hardfork Dencun. Ini memecahkan masalah DoS dan memungkinkan penyederhanaan yang signifikan dalam kode klien. Di masa depan, mungkin masuk akal untuk akhirnya menghapus opcode sepenuhnya.
Beberapa contoh kunci peluang penyederhanaan protokol yang telah diidentifikasi sejauh ini mencakup hal-hal berikut. Pertama, beberapa contoh di luar EVM; ini relatif tidak berbahaya, dan dengan demikian lebih mudah untuk mencapai konsensus dan melaksanakannya dalam jangka waktu yang lebih singkat.
Sekarang, beberapa contoh yang ada di dalam EVM:
Kompromi utama dalam melakukan penyederhanaan fitur semacam ini adalah (i) seberapa banyak kita menyederhanakan dan seberapa cepat vs (ii) kompatibilitas mundur. Nilai Ethereum sebagai rantai berasal dari menjadi platform di mana Anda dapat mendeploy aplikasi dan yakin bahwa itu masih akan berfungsi bertahun-tahun ke depan. Pada saat yang sama, mungkin terlalu berlebihan untuk mengambil ideal itu terlalu jauh, dan,untuk menguraikan William Jennings Bryan, 'menghukum Ethereum pada salib kompatibilitas mundur'. Jika hanya ada dua aplikasi di seluruh Ethereum yang menggunakan fitur tertentu, dan satu telah tidak memiliki pengguna selama bertahun-tahun dan yang lainnya hampir tidak digunakan sama sekali dan mengamankan total nilai $57, maka kita harus menghapus fitur tersebut, dan jika perlu membayar korban $57 dari saku sendiri.
Masalah sosial yang lebih luas terletak pada menciptakan pipa standar untuk membuat perubahan yang melanggar kompatibilitas mundur non-darurat. Salah satu cara untuk mendekati ini adalah dengan memeriksa dan memperpanjang preseden yang ada, seperti proses SELFDESTRUCT. Pipa terlihat seperti berikut:
Seharusnya ada pipa selama bertahun-tahun antara langkah 1 dan langkah 4, dengan informasi yang jelas tentang barang-barang apa yang berada di langkah mana. Pada saat itu, ada tradeoff antara seberapa giat dan cepat pipa penghilangan fitur ini, dibandingkan dengan lebih konservatif dan mengalokasikan lebih banyak sumber daya ke area pengembangan protokol lainnya, tetapi kita masih jauh dari garis Pareto.
Seperangkat perubahan besar yang telah diajukan untuk EVM adalah Format Objek EVM (EOF). EOF memperkenalkan sejumlah perubahan, seperti melarang observabilitas gas, observabilitas kode (yaitu tidak ada CODECOPY), memungkinkan hanya lompatan statis. Tujuannya adalah untuk memungkinkan EVM ditingkatkan lebih banyak, dengan cara yang memiliki properti yang lebih kuat, sambil mempertahankan kompatibilitas mundur (karena EVM sebelum EOF masih akan ada).
Ini memiliki keuntungan bahwa itu menciptakan jalur alami untuk menambahkan fitur EVM baru dan mendorong migrasi ke EVM yang lebih restriktif dengan jaminan yang lebih kuat. Ini memiliki kelemahan bahwa itu secara signifikan meningkatkan kompleksitas protokol, kecuali jika kita dapat menemukan cara untuk akhirnya menonaktifkan dan menghapus EVM lama. Pertanyaan utama adalah: peran apa yang dimainkan EOF dalam proposal penyederhanaan EVM, terutama jika tujuannya adalah untuk mengurangi kompleksitas EVM secara keseluruhan?
Banyak dari proposal “perbaikan” dalam sisa peta jalan juga merupakan kesempatan untuk melakukan penyederhanaan fitur-fitur lama. Untuk mengulangi beberapa contoh dari atas:
Strategi penyederhanaan Ethereum yang lebih radikal adalah tetap menjaga protokol yang ada, tetapi memindahkan sebagian besar fitur protokol menjadi kode kontrak.
Versi paling ekstrim dari ini akan membuat Ethereum L1 "secara teknis" hanya menjadi rantai beacon, dan memperkenalkan VM minimal (misalnya. RISC-V, Kairo, atau sesuatu yang lebih minimal khusus untuk membuktikan sistem) yang memungkinkan siapa pun untuk membuat rollup mereka sendiri. EVM kemudian akan berubah menjadi yang pertama dari rollup-rollup ini. Ironisnya, ini sama persis dengan hasil yang sama seperti sebelumnya.usulan lingkungan pelaksanaan dari 2019-20, meskipun SNARK membuatnya jauh lebih layak untuk benar-benar diimplementasikan.
Pendekatan yang lebih moderat adalah menjaga hubungan antara rantai beacon dan lingkungan eksekusi Ethereum saat ini seperti adanya, tetapi melakukan penggantian EVM di tempat. Kita bisa memilih RISC-V, Cairo, atau VM lainnya untuk menjadi "VM Ethereum resmi" baru, dan kemudian memaksa mengonversi semua kontrak EVM menjadi kode new-VM yang menafsirkan logika kode asli (dengan mengompilasi atau menafsirkannya). Secara teori, bahkan ini dapat dilakukan dengan "VM target" menjadi versi EOF.
Salah satu tantangan Ethereum adalah bahwa secara default, pembengkakan dan kompleksitas protokol blockchain apa pun bertambah seiring waktu. Ini terjadi di dua tempat:
Untuk Ethereum bertahan dalam jangka panjang, kita memerlukan tekanan lawan yang kuat terhadap kedua tren ini, mengurangi kompleksitas dan pembengkakan dari waktu ke waktu. Tetapi pada saat yang sama, kita perlu mempertahankan salah satu properti kunci yang membuat blockchain hebat: keabadian mereka. Anda dapat menempatkan NFT, catatan cinta dalam calldata transaksi, atau kontrak pintar yang berisi sejuta dolar onchain, pergi ke dalam gua selama sepuluh tahun, keluar dan menemukannya masih ada menunggu Anda untuk membaca dan berinteraksi dengannya. Agar dapps merasa nyaman untuk sepenuhnya terdesentralisasi dan menghapus kunci upgrade mereka, mereka perlu yakin bahwa dependensi mereka tidak akan melakukan upgrade dengan cara yang merusak mereka - terutama L1 itu sendiri.
Pembersihan Besar-besaran, peta jalan 2023.
Menyeimbangkan antara dua kebutuhan ini, dan meminimalkan atau membalik bengkak, kompleksitas, dan kerusakan sambil mempertahankan kontinuitas, adalah hal yang sangat mungkin jika kita memusatkan pikiran kita padanya. Organisme hidup bisa melakukannya: sementara sebagian besar menua seiring waktu,beberapa orang beruntung tidak. Bahkan sistem sosial pun dapat memiliki umur panjang yang luar biasaPada beberapa kesempatan, Ethereum telah menunjukkan kesuksesan: bukti kerja sudah hilang, opcode SELFDESTRUCT sebagian besar sudah hilang, dan node rantai pelita sudah menyimpan data lama hanya sampai enam bulan. Menemukan jalur ini untuk Ethereum dengan cara yang lebih umum, dan bergerak menuju hasil akhir yang stabil untuk jangka panjang, adalah tantangan utama keberlanjutan teknis, skalabilitas jangka panjang, dan bahkan keamanan Ethereum.
Pada saat penulisan ini, sebuah node Ethereum yang telah disinkronisasi penuh membutuhkan sekitar 1,1 terabyteof ruang disk untuk klien eksekusi, ditambah beberapa ratus gigabyte lagi untuk klien konsensus. Sebagian besar dari ini adalah sejarah: data tentang blok historis, transaksi, dan tanda terima, yang sebagian besar di antaranya sudah berusia bertahun-tahun. Ini berarti ukuran sebuah node terus bertambah ratusan gigabyte setiap tahun, bahkan jika batas gas tidak bertambah sama sekali.
Fitur kunci yang menyederhanakan masalah penyimpanan sejarah adalah bahwa setiap blok menunjuk ke blok sebelumnya melalui tautan hash (dan lainnya struktur), memiliki konsensus tentang masa kini sudah cukup untuk memiliki konsensus tentang sejarah. Selama jaringan memiliki konsensus tentang blok terbaru, setiap blok historis atau transaksi atau status (saldo akun, nonce, kode, penyimpanan) dapat disediakan oleh aktor tunggal mana pun bersama dengan bukti Merkle, dan bukti tersebut memungkinkan orang lain untuk memverifikasi kebenarannya. Sementara konsensus adalah model kepercayaan N / 2-of-N, sejarah adalah model kepercayaan 1-dari-N.
Ini membuka banyak pilihan untuk bagaimana kita dapat menyimpan sejarah. Salah satu opsi alami adalah jaringan di mana setiap node hanya menyimpan persentase kecil dari data. Inilah bagaimana jaringan torrent telah bekerja selama puluhan tahun: sementara jaringan secara keseluruhan menyimpan dan mendistribusikan jutaan file, setiap peserta hanya menyimpan dan mendistribusikan beberapa di antaranya. Mungkin secara kontra-intuitif, pendekatan ini bahkan tidak selalu mengurangi kekokohan data. Jika, dengan membuat node yang lebih terjangkau, kita dapat mencapai jaringan dengan 100.000 node, di mana setiap node menyimpan 10% sejarah secara acak, maka setiap data akan direplikasi 10.000 kali - persis sama dengan faktor replikasi 10.000-node network di mana setiap node menyimpan semuanya.
Hari ini, Ethereum sudah mulai menjauh dari model semua node menyimpan semua riwayat selamanya. Blok konsensus (yaitu bagian yang terkait dengan konsensus bukti kepemilikan) hanya disimpan selama ~6 bulan. Blobs hanya disimpan selama ~18 hari.EIP-4444bertujuan untuk memperkenalkan periode penyimpanan satu tahun untuk blok historis dan tanda terima. Tujuan jangka panjang adalah memiliki periode yang diselaraskan (yang bisa ~18 hari) di mana setiap node bertanggung jawab untuk menyimpan segalanya, dan kemudian memiliki jaringan peer-to-peer yang terdiri dari node Ethereum yang menyimpan data lama secara terdistribusi.
Kode erasure dapat digunakan untuk meningkatkan ketahanan sambil menjaga faktor replikasi tetap sama. Faktanya, blob sudah datang dalam bentuk kode erasure untuk mendukung pengambilan sampel ketersediaan data. Solusi paling sederhana mungkin adalah untuk menggunakan ulang kode erasure ini, dan memasukkan data blok eksekusi dan konsensus ke dalam blob juga.
Pekerjaan utama yang tersisa melibatkan membangun dan mengintegrasikan solusi terdistribusi konkret untuk menyimpan sejarah - setidaknya sejarah pelaksanaan, tetapi pada akhirnya juga konsensus dan blob. Solusi yang paling mudah untuk ini adalah (i) dengan hanya memperkenalkan perpustakaan torrent yang ada, dan (ii) solusi Ethereum-native yang disebut protokol gate.jaringan Portal. Setelah salah satunya diperkenalkan, kita dapat mengaktifkan EIP-4444. EIP-4444 sendiri tidak memerlukan hard fork, meskipun membutuhkan versi protokol jaringan baru. Karena alasan ini, ada nilai dalam mengaktifkannya untuk semua klien pada saat yang sama, karena jika tidak ada risiko klien tidak berfungsi dengan baik saat terhubung ke node lain yang mengharapkan untuk mengunduh riwayat lengkap tetapi sebenarnya tidak mendapatkannya.
Kompromi utama melibatkan seberapa keras kita mencoba untuk membuat data sejarah 'kuno' tersedia. Solusi paling mudah adalah dengan berhenti menyimpan sejarah kuno besok, dan mengandalkan simpul arsip yang ada dan berbagai penyedia terpusat untuk replikasi. Ini mudah, tetapi melemahkan posisi Ethereum sebagai tempat untuk membuat catatan permanen. Jalur yang lebih sulit, tetapi lebih aman, adalah dengan membangun dan mengintegrasikan jaringan torrent untuk menyimpan sejarah secara terdistribusi. Di sini, ada dua dimensi 'seberapa keras kita mencoba':
Sebuah pendekatan yang sangat paranoid untuk (1) akan melibatkanbukti penyimpanan: sebenarnya memerlukan setiap validator proof of stake untuk menyimpan sebagian persentase sejarah, dan secara teratur memeriksa secara kriptografis bahwa mereka melakukannya. Pendekatan yang lebih moderat adalah menetapkan standar sukarela untuk persentase sejarah yang disimpan setiap klien.
Untuk (2), implementasi dasar melibatkan hanya mengambil pekerjaan yang sudah dilakukan saat ini: Portal sudah menyimpan file ERA yang berisi sejarah Ethereum seluruhnya. Implementasi yang lebih menyeluruh akan melibatkan menghubungkan ini ke proses sinkronisasi, sehingga jika seseorang ingin melakukan sinkronisasi node penyimpanan sejarah lengkap atau node arsip, mereka dapat melakukannya bahkan jika tidak ada node arsip lain yang ada online, dengan melakukan sinkronisasi langsung dari jaringan Portal.
Mengurangi persyaratan penyimpanan riwayat mungkin lebih penting daripada keadaan tanpa keadaan jika kita ingin membuatnya sangat mudah untuk menjalankan atau menjalankan node: dari 1,1 TB yang diperlukan oleh node, ~300 GB adalah keadaan, dan sisanya ~800 GB adalah sejarah. Visi dari node Ethereum yang berjalan di smart watch dan hanya memerlukan beberapa menit untuk diatur hanya dapat dicapai jika keduanya keadaan tanpa keadaan dan EIP-4444 diimplementasikan.
Membatasi penyimpanan riwayat juga membuatnya lebih layak bagi implementasi simpul Ethereum yang lebih baru untuk hanya mendukung versi terbaru dari protokol, yang memungkinkan mereka menjadi jauh lebih sederhana. Sebagai contoh, banyak baris kode dapat dengan aman dihapus sekarang bahwa slot penyimpanan kosong yang dibuat selama serangan DoS 2016 telah semua dihapus.dihapus. Sekarang bahwa peralihan ke bukti kepemilikan sudah menjadi sejarah kuno, klien dapat dengan aman menghapus semua kode terkait bukti kerja.
Meskipun kita menghilangkan kebutuhan bagi klien untuk menyimpan riwayat, kebutuhan penyimpanan klien akan terus bertambah sekitar 50 GB per tahun, karena pertumbuhan yang terus berlanjut ke dalam keadaan: saldo akun dan nonces, kode kontrak dan penyimpanan kontrak. Pengguna dapat membayar biaya satu kali untuk memberikan beban pada klien Ethereum saat ini dan masa depan selamanya.
Negara jauh lebih sulit untuk 'kedaluwarsa' daripada sejarah, karena EVM pada dasarnya dirancang dengan asumsi bahwa begitu objek negara dibuat, itu akan selalu ada dan dapat dibaca oleh transaksi apa pun kapan pun. Jika kita memperkenalkan tanpa negara, ada argumen bahwa mungkin masalah ini tidak terlalu buruk: hanya kelas khusus pembangun blok yang perlu benar-benar menyimpan negara, dan semua node lain (bahkan daftar inklusi(produksi!) dapat berjalan tanpa keadaan. Namun, ada argumen bahwa kita tidak ingin terlalu bergantung pada keadaan tanpa keadaan, dan pada akhirnya kita mungkin ingin menghapus keadaan untuk menjaga Ethereum terdesentralisasi.
Hari ini, ketika Anda membuat objek state baru (yang dapat terjadi dalam satu dari tiga cara: (i) mengirim ETH ke akun baru, (ii) membuat akun baru dengan kode, (iii) mengatur slot penyimpanan yang sebelumnya belum disentuh), objek state tersebut akan berada dalam keadaan selamanya. Yang kita inginkan sebaliknya, adalah agar objek-objek tersebut secara otomatis kedaluwarsa seiring waktu. Tantangan utamanya adalah melakukan ini dengan cara yang mencapai tiga tujuan:
Sangat mudah untuk memecahkan masalah tanpa memenuhi tujuan-tujuan ini. Misalnya, Anda dapat meminta setiap objek status juga menyimpan penghitung untuk tanggal kedaluwarsanya (yang dapat diperpanjang dengan membakar ETH, yang dapat terjadi secara otomatis kapan saja dibaca atau ditulis), dan memiliki proses yang berulang melalui status untuk menghapus objek status kedaluwarsa. Namun, ini memperkenalkan perhitungan tambahan (dan bahkan persyaratan penyimpanan), dan jelas tidak memenuhi persyaratan keramahan pengguna. Pengembang juga akan kesulitan bernalar tentang kasus tepi yang melibatkan nilai penyimpanan yang terkadang disetel ulang ke nol. Jika Anda membuat kontrak penghitung waktu kedaluwarsa, ini membuat hidup secara teknis lebih mudah bagi pengembang, tetapi itu membuat ekonomi lebih sulit: pengembang harus memikirkan cara "melewati" biaya penyimpanan yang sedang berlangsung kepada pengguna mereka.
Ini adalah masalah-masalah yang dihadapi komunitas pengembangan inti Ethereum selama bertahun-tahun, termasuk proposal seperti “sewa blockchaindanregenesis“. Akhirnya, kami menggabungkan bagian terbaik dari proposal dan berkumpul pada dua kategori "solusi yang paling tidak buruk":
Proposal penghapusan status parsial semuanya bekerja dengan prinsip yang sama. Kami membagi status menjadi bagian-bagian. Setiap orang menyimpan secara permanen "peta tingkat atas" tentang bagian mana yang kosong atau tidak kosong. Data dalam setiap bagian hanya disimpan jika data tersebut baru-baru ini diakses. Ada mekanisme "kebangkitan" di mana jika sebuah bagian tidak lagi disimpan, siapa pun dapat mengembalikan data tersebut dengan memberikan bukti tentang apa data tersebut.
Perbedaan utama antara proposal-proposal ini adalah: (i) bagaimana kita mendefinisikan "baru-baru ini", dan (ii) bagaimana kita mendefinisikan "chunk"? Salah satu proposal konkret adalah EIP-7736, yang dibangun berdasarkan desain “stem-and-leaf”diperkenalkan untuk pohon Verkle(meskipun kompatibel dengan bentuk ketiadaan negara apa pun, misalnya pohon biner). Dalam desain ini, header, kode, dan slot penyimpanan yang berdekatan disimpan di bawah 'batang' yang sama. Data yang disimpan di bawah 'batang' maksimal 256 * 31 = 7.936 byte. Dalam banyak kasus, seluruh header dan kode, dan banyak slot penyimpanan kunci, dari sebuah akun akan disimpan di bawah 'batang' yang sama. Jika data di bawah 'batang' tertentu tidak dibaca atau ditulis selama 6 bulan, data tersebut tidak lagi disimpan, dan hanya komitmen 32 byte ('tunggulah') ke data yang disimpan. Transaksi masa depan yang mengakses data tersebut perlu 'menghidupkan kembali' data, dengan bukti yang akan diperiksa terhadap 'tunggulah'.
Ada cara lain untuk menerapkan ide serupa. Misalnya, jika granularitas tingkat akun tidak mencukupi, kita dapat membuat skema di mana setiap 1/232 bagian dari pohon diperintah oleh mekanisme batang-dan-daun yang serupa.
Ini lebih rumit karena insentif: penyerang dapat memaksa klien untuk secara permanen menyimpan sejumlah besar status dengan memasukkan sejumlah besar data ke dalam satu subpohon dan mengirim satu transaksi setiap tahun untuk "memperbarui pohon". Jika Anda membuat biaya perpanjangan proporsional (atau durasi perpanjangan berbanding terbalik) dengan ukuran pohon, maka seseorang dapat membuat pengguna lain sedih dengan memasukkan sejumlah besar data ke dalam subpohon yang sama dengan mereka. Seseorang dapat mencoba membatasi kedua masalah dengan membuat granularitas dinamis berdasarkan ukuran subtree: misalnya, setiap objek keadaan 216 = 65536 berturut-turut dapat diperlakukan sebagai "grup". Namun, ide-ide ini lebih kompleks; Pendekatan berbasis STEM sederhana, dan menyelaraskan insentif, karena biasanya semua data di bawah STEM terkait dengan aplikasi atau pengguna yang sama.
Bagaimana jika kita ingin menghindari pertumbuhan status permanen sama sekali, bahkan 32-byte stub? Ini adalah masalah yang sulit karena dari @vbuterin/state_size_management#Resurrection-conflicts">konflik kebangkitan: bagaimana jika objek negara dihapus, kemudian eksekusi EVM menempatkan objek negara lain di posisi yang sama persis, tetapi setelah itu seseorang yang peduli dengan objek negara asli kembali dan mencoba memulihkannya? Dengan kadaluwarsa negara parsial, "stub" mencegah data baru dibuat. Dengan kadaluwarsa negara penuh, kita tidak mampu menyimpan bahkan stub.
Desain berbasis periode alamat adalah ide terbaik yang dikenal untuk mengatasi hal ini. Alih-alih memiliki satu pohon status yang menyimpan seluruh status, kami memiliki daftar pohon status yang terus berkembang, dan setiap status yang dibaca atau ditulis disimpan dalam pohon status yang paling baru. Pohon status kosong baru ditambahkan satu kali per periode (bayangkan: 1 tahun). Pohon status yang lebih lama membeku. Node penuh hanya diharapkan menyimpan dua pohon terbaru. Jika objek status tidak disentuh selama dua periode dan dengan demikian jatuh ke dalam pohon kedaluwarsa, masih bisa dibaca atau ditulis, tetapi transaksi perlu membuktikan bukti Merkle untuknya - dan begitu dilakukan, salinan akan disimpan kembali di pohon terbaru.
Sebuah gagasan utama untuk membuat semua ini ramah pengguna dan pengembang adalah konsep periode alamat. Sebuah periode alamat adalah nomor yang merupakan bagian dari alamat. Aturan utama adalah bahwa alamat dengan periode alamat N hanya dapat dibaca atau ditulis selama atau setelah periode N (yaitu ketika daftar pohon keadaan mencapai panjang N). Jika Anda menyimpan objek keadaan baru (misalnya kontrak baru, atau saldo ERC20 baru), jika Anda memastikan untuk menempatkan objek keadaan ke dalam kontrak yang periode alamatnya adalah baik N atau N-1, maka Anda dapat menyimpannya secara langsung, tanpa perlu memberikan bukti bahwa tidak ada yang ada sebelumnya. Namun, setiap penambahan atau pengeditan keadaan dalam periode alamat yang lebih tua memerlukan bukti.
Desain ini mempertahankan sebagian besar properti Ethereum saat ini, sangat ringan dalam komputasi tambahan, memungkinkan aplikasi ditulis hampir seperti saat ini (ERC20 perlu menulis ulang, untuk memastikan saldo alamat dengan periode alamat N disimpan dalam kontrak anak yang memiliki periode alamat N itu sendiri), dan memecahkan masalah 'pengguna masuk ke dalam gua selama lima tahun'. Namun, ada satu masalah besar: alamat perlu diperluas lebih dari 20 byte untuk memuat periode alamat.
Salah satu usulan adalah memperkenalkan format alamat baru berukuran 32 byte, yang mencakup nomor versi, nomor periode alamat, dan hash yang diperluas.
0x01000000000157aE408398dF7E5f4552091A69125d5dFcb7B8C2659029395bdF
Merah adalah nomor versi. Keempat nol berwarna oranye di sini dimaksudkan sebagai ruang kosong, yang dapat menampung nomor shard di masa depan. Hijau adalah nomor periode alamat. Biru adalah hash 26 byte.
Tantangan utama di sini adalah kompatibilitas mundur. Kontrak yang ada dirancang berdasarkan alamat 20 byte, dan sering menggunakan teknik byte-packing yang ketat yang secara eksplisit mengasumsikan alamat memiliki panjang tepat 20 byte.@ipsilon/address-space-extension-exploration">Salah satu ide untuk memecahkan masalah ini melibatkan peta terjemahan, di mana kontrak gaya lama yang berinteraksi dengan alamat gaya baru akan melihat hash 20 byte dari alamat gaya baru. Namun, ada kompleksitas signifikan yang terlibat dalam membuat ini aman.
Pendekatan lain melibatkan arah yang berlawanan: kita segera melarang sebagian sub-range alamat berukuran 2128 tertentu (misalnya semua alamat yang dimulai dengan 0xffffffff), dan kemudian menggunakan rentang tersebut untuk memperkenalkan alamat dengan periode alamat dan hash 14 byte.
0xfffffff000169125d5dFcb7B8C2659029395bdF
Korban kunci yang dibuat oleh pendekatan ini, adalah bahwa itu memperkenalkan risiko keamanan untuk alamat kontrafaktual: alamat yang menyimpan aset atau izin, tetapi kodenya belum dipublikasikan ke Chain. Risiko melibatkan seseorang yang membuat alamat yang mengklaim memiliki satu bagian kode (belum dipublikasikan), tetapi juga memiliki potongan kode lain yang valid yang hash ke alamat yang sama. Menghitung tabrakan seperti itu membutuhkan 280hashes hari ini; kontraksi ruang alamat akan mengurangi angka ini menjadi 2 yang sangat mudah diakses56hashes.
Area risiko kunci, alamat kontrafaktual yang bukan dompet yang dimiliki oleh satu pemilik, merupakan kasus yang relatif jarang terjadi saat ini, tetapi kemungkinan akan menjadi lebih umum saat kita memasuki dunia multi-L2. Satu-satunya solusi hanyalah menerima risiko ini, tetapi mengidentifikasi semua kasus penggunaan umum di mana ini mungkin menjadi masalah, dan mencari solusi alternatif yang efektif.
Saya melihat empat jalur yang layak untuk masa depan:
Satu poin penting adalah bahwa masalah-masalah sulit seputar perluasan dan penyusutan ruang alamat pada akhirnya harus diatasi terlepas dari apakah skema kadaluwarsa status yang bergantung pada perubahan format alamat pernah diterapkan. Saat ini, membutuhkan sekitar 280 hash untuk menghasilkan tabrakan alamat, beban komputasi yang sudah layak untuk aktor dengan sumber daya yang sangat baik: GPU dapat melakukan sekitar 227hash, jadi jika dijalankan selama satu tahun, ia dapat menghitung 252, jadi semua ~2^30 GPU di duniadapat menghitung tabrakan dalam waktu sekitar 1/4 tahun, dan FPGAs dan ASICs dapat mempercepat ini lebih lanjut. Di masa depan, serangan seperti ini akan terbuka bagi lebih banyak orang. Oleh karena itu, biaya aktual dari menerapkan kadaluwarsa status penuh mungkin tidak sebesar yang terlihat, karena kita harus menyelesaikan masalah alamat yang sangat menantang ini bagaimanapun juga.
Melakukan kadaluarsa status secara potensial membuat transisi dari satu format pohon status ke format lain menjadi lebih mudah, karena tidak akan ada kebutuhan untuk prosedur transisi: Anda bisa mulai membuat pohon baru menggunakan format baru, dan kemudian melakukan hard fork untuk mengonversi pohon-pohon lama. Oleh karena itu, meskipun kadaluwarsa status itu kompleks, ia memiliki manfaat dalam menyederhanakan aspek lain dari peta jalan.
Salah satu prasyarat kunci dari keamanan, aksesibilitas dan netralitas yang kredibel adalah kesederhanaan. Jika sebuah protokol indah dan sederhana, itu mengurangi kemungkinan akan ada bug. Ini meningkatkan kemungkinan bahwa pengembang baru akan dapat masuk dan bekerja dengan bagian mana pun darinya. Ini lebih cenderung adil dan lebih mudah untuk membela terhadap kepentingan khusus. Sayangnya, protokol, seperti sistem sosial lainnya, secara default menjadi lebih kompleks dari waktu ke waktu. Jika kita tidak ingin Ethereum masuk ke lubang hitam dengan kompleksitas yang terus meningkat, kita perlu melakukan salah satu dari dua hal: (i) berhenti membuat perubahan dan mengeraskan protokol, (ii) dapat benar-benar menghapus fitur dan mengurangi kompleksitas. Rute perantara, membuat lebih sedikit perubahan pada protokol, dan juga menghapus setidaknya sedikit kerumitan dari waktu ke waktu, juga dimungkinkan. Bagian ini akan berbicara bagaimana kita dapat mengurangi atau menghilangkan kompleksitas.
Tidak ada perbaikan tunggal besar yang dapat mengurangi kompleksitas protokol; sifat inheren dari masalah ini adalah ada banyak perbaikan kecil.
Salah satu contoh yang sebagian besar sudah selesai, dan dapat berfungsi sebagai cetak biru untuk bagaimana menangani yang lain, adalah @vbuterin/selfdestruct">penghapusan opcode SELFDESTRUCT. Opcode SELFDESTRUCT adalah satu-satunya opcode yang dapat mengubah jumlah slot penyimpanan yang tidak terbatas dalam satu blok, memerlukan klien untuk menerapkan kompleksitas yang jauh lebih besar untuk menghindari serangan DoS. Tujuan asli dari opcode ini adalah untuk memungkinkan penghapusan status sukarela, memungkinkan ukuran status untuk berkurang dari waktu ke waktu. Dalam praktiknya, sangat sedikit yang akhirnya menggunakannya. opcode telah dibuat lebih lemahhanya memungkinkan akun yang hancur sendiri dibuat dalam transaksi yang sama dalam hardfork Dencun. Ini memecahkan masalah DoS dan memungkinkan penyederhanaan yang signifikan dalam kode klien. Di masa depan, mungkin masuk akal untuk akhirnya menghapus opcode sepenuhnya.
Beberapa contoh kunci peluang penyederhanaan protokol yang telah diidentifikasi sejauh ini mencakup hal-hal berikut. Pertama, beberapa contoh di luar EVM; ini relatif tidak berbahaya, dan dengan demikian lebih mudah untuk mencapai konsensus dan melaksanakannya dalam jangka waktu yang lebih singkat.
Sekarang, beberapa contoh yang ada di dalam EVM:
Kompromi utama dalam melakukan penyederhanaan fitur semacam ini adalah (i) seberapa banyak kita menyederhanakan dan seberapa cepat vs (ii) kompatibilitas mundur. Nilai Ethereum sebagai rantai berasal dari menjadi platform di mana Anda dapat mendeploy aplikasi dan yakin bahwa itu masih akan berfungsi bertahun-tahun ke depan. Pada saat yang sama, mungkin terlalu berlebihan untuk mengambil ideal itu terlalu jauh, dan,untuk menguraikan William Jennings Bryan, 'menghukum Ethereum pada salib kompatibilitas mundur'. Jika hanya ada dua aplikasi di seluruh Ethereum yang menggunakan fitur tertentu, dan satu telah tidak memiliki pengguna selama bertahun-tahun dan yang lainnya hampir tidak digunakan sama sekali dan mengamankan total nilai $57, maka kita harus menghapus fitur tersebut, dan jika perlu membayar korban $57 dari saku sendiri.
Masalah sosial yang lebih luas terletak pada menciptakan pipa standar untuk membuat perubahan yang melanggar kompatibilitas mundur non-darurat. Salah satu cara untuk mendekati ini adalah dengan memeriksa dan memperpanjang preseden yang ada, seperti proses SELFDESTRUCT. Pipa terlihat seperti berikut:
Seharusnya ada pipa selama bertahun-tahun antara langkah 1 dan langkah 4, dengan informasi yang jelas tentang barang-barang apa yang berada di langkah mana. Pada saat itu, ada tradeoff antara seberapa giat dan cepat pipa penghilangan fitur ini, dibandingkan dengan lebih konservatif dan mengalokasikan lebih banyak sumber daya ke area pengembangan protokol lainnya, tetapi kita masih jauh dari garis Pareto.
Seperangkat perubahan besar yang telah diajukan untuk EVM adalah Format Objek EVM (EOF). EOF memperkenalkan sejumlah perubahan, seperti melarang observabilitas gas, observabilitas kode (yaitu tidak ada CODECOPY), memungkinkan hanya lompatan statis. Tujuannya adalah untuk memungkinkan EVM ditingkatkan lebih banyak, dengan cara yang memiliki properti yang lebih kuat, sambil mempertahankan kompatibilitas mundur (karena EVM sebelum EOF masih akan ada).
Ini memiliki keuntungan bahwa itu menciptakan jalur alami untuk menambahkan fitur EVM baru dan mendorong migrasi ke EVM yang lebih restriktif dengan jaminan yang lebih kuat. Ini memiliki kelemahan bahwa itu secara signifikan meningkatkan kompleksitas protokol, kecuali jika kita dapat menemukan cara untuk akhirnya menonaktifkan dan menghapus EVM lama. Pertanyaan utama adalah: peran apa yang dimainkan EOF dalam proposal penyederhanaan EVM, terutama jika tujuannya adalah untuk mengurangi kompleksitas EVM secara keseluruhan?
Banyak dari proposal “perbaikan” dalam sisa peta jalan juga merupakan kesempatan untuk melakukan penyederhanaan fitur-fitur lama. Untuk mengulangi beberapa contoh dari atas:
Strategi penyederhanaan Ethereum yang lebih radikal adalah tetap menjaga protokol yang ada, tetapi memindahkan sebagian besar fitur protokol menjadi kode kontrak.
Versi paling ekstrim dari ini akan membuat Ethereum L1 "secara teknis" hanya menjadi rantai beacon, dan memperkenalkan VM minimal (misalnya. RISC-V, Kairo, atau sesuatu yang lebih minimal khusus untuk membuktikan sistem) yang memungkinkan siapa pun untuk membuat rollup mereka sendiri. EVM kemudian akan berubah menjadi yang pertama dari rollup-rollup ini. Ironisnya, ini sama persis dengan hasil yang sama seperti sebelumnya.usulan lingkungan pelaksanaan dari 2019-20, meskipun SNARK membuatnya jauh lebih layak untuk benar-benar diimplementasikan.
Pendekatan yang lebih moderat adalah menjaga hubungan antara rantai beacon dan lingkungan eksekusi Ethereum saat ini seperti adanya, tetapi melakukan penggantian EVM di tempat. Kita bisa memilih RISC-V, Cairo, atau VM lainnya untuk menjadi "VM Ethereum resmi" baru, dan kemudian memaksa mengonversi semua kontrak EVM menjadi kode new-VM yang menafsirkan logika kode asli (dengan mengompilasi atau menafsirkannya). Secara teori, bahkan ini dapat dilakukan dengan "VM target" menjadi versi EOF.