Analisis teknis dan mendalam tentang pertukaran yang dibuat oleh mekanisme konsensus Ethereum dalam peralihannya ke proof-of-stake dan bagaimana perbedaan antara proof-of-work.
Biasanya Bitcoiners tidak terlalu peduli dengan apa yang terjadi di Shitcoin-land, tapi sekarang Ethereum telah bergabung dengan proof-of-stake (PoS), ada cukup banyak buzz di Twitter Bitcoin. Tentu saja, jaringan Bitcoin itu sendiri tidak akan terpengaruh, tetapi saya pikir “peningkatan” ini masih layak untuk diperhatikan. Sekarang Ethereum telah membersihkan dirinya dari eksternalitas “kotor” dan “boros” yang terkait dengan proof-of-work (PoW), kita dapat mengharapkan sarung tangan terlepas dalam perang naratif, dan saya pikir Bitcoiner harus siap untuk menyerang balik.
Mempelajari cara kerja PoS adalah cara yang sangat baik untuk menginternalisasi perbedaan dan pertukaran antara PoW dan PoS. Meskipun saya telah melihat semua argumen tingkat tinggi yang menentang PoS sebelumnya — bahwa PoS lebih diizinkan, terpusat, dan oligarkis — saya akui bahwa tanpa melihat detailnya, semuanya terasa agak bergelombang. Dengan benar-benar menyelami algoritma PoS, kita dapat mulai melihat bagaimana semua properti ini muncul secara alami dari prinsip pertama. Jadi, jika Anda ingin tahu tentang cara kerja algoritma PoS, dan mengapa itu mengarah ke properti semacam ini, baca terus!
Memecahkan Masalah Pengeluaran Ganda
Mari kita mulai dengan rekap cepat dari masalah yang sedang kita coba pecahkan. Misalkan kita memiliki sekelompok besar peserta dalam jaringan cryptocurrency yang mencoba mempertahankan buku besar yang terdesentralisasi. Inilah masalahnya: Bagaimana transaksi baru dapat ditambahkan ke buku besar semua orang, sehingga semua orang setuju transaksi baru mana yang "benar"? PoW memecahkan masalah ini dengan cukup elegan: Transaksi dikelompokkan bersama dalam blok, di mana setiap blok membutuhkan sejumlah besar pekerjaan komputasi untuk menghasilkan. Jumlah pekerjaan yang diperlukan dapat naik atau turun untuk memastikan blok diproduksi rata-rata setiap sepuluh menit, memberi setiap blok baru banyak waktu untuk menyebar ke seluruh jaringan sebelum blok berikutnya dibuat. Setiap ambiguitas diselesaikan dengan memilih rantai dengan pekerjaan paling banyak.
Tapi misalkan sekarang kita ingin membuang wawasan utama Satoshi Nakamoto yang membuat semua ini menjadi mungkin sejak awal. Lagi pula, ASIC sial itu keras dan menjengkelkan, dan mereka mengonsumsi lebih banyak energi daripada gabungan semua jet pribadi George Soros, Bill Gates, dan Hillary Clinton. Apakah ada cara agar kita dapat dengan jelas menyepakati transaksi mana yang benar hanya dengan membicarakannya?
Bukti kepemilikan Ethereum mengusulkan untuk memecahkan masalah ini menggunakan dua bahan utama. Yang pertama adalah membuat "blok pos pemeriksaan" khusus sesekali, yang tujuannya adalah untuk memberikan jaminan kepada semua orang di jaringan tentang "kebenaran" sistem di berbagai titik waktu. Membuat pos pemeriksaan membutuhkan dua pertiga suara mayoritas berdasarkan pasak, jadi ada jaminan bahwa mayoritas validator menyetujui apa yang sebenarnya terjadi pada saat itu. Bahan kedua adalah untuk menghukum pengguna karena menambahkan ambiguitas ke jaringan, sebuah proses yang dikenal sebagai "slashing." Misalnya, jika validator membuat fork, atau memilih sidechain yang lebih lama (mirip dengan serangan 51%), maka taruhannya akan dipotong. Validator juga dapat dipotong karena tidak aktif, tetapi tidak sebanyak itu.
Ini membawa kita ke prinsip pertama di balik PoS, yaitu bahwa PoS didasarkan pada sistem insentif negatif (berbasis penalti).
Ini sangat kontras dengan Bitcoin dan proof-of-work, yang merupakan sistem insentif positif (berbasis penghargaan). Di Bitcoin, penambang dapat mencoba untuk melanggar aturan — blok yang diformat dengan buruk, transaksi yang tidak valid, dan sebagainya — tetapi blok ini hanya akan diabaikan oleh node penuh. Skenario terburuk adalah sedikit energi yang terbuang. Penambang juga bebas untuk membangun di blok yang lebih tua, tetapi tanpa 51% dari hashpower, rantai ini tidak akan pernah mengejar, sekali lagi hanya membuang-buang energi. Setiap penambang yang berpartisipasi dalam tindakan ini, baik sengaja atau tidak, tidak perlu khawatir kehilangan akumulasi bitcoin atau mesin penambangan mereka, tetapi mereka tidak akan mendapatkan hadiah baru. Alih-alih hidup dalam ketakutan, penambang bitcoin dapat melakukan kesalahan dalam mengambil tindakan dan risiko.
Dunia adalah tempat yang sangat berbeda bagi validator yang tinggal di tanah Ethereum. Alih-alih bekerja keras dan dihargai karena menambahkan keamanan ke jaringan, validator tidak melakukan pekerjaan yang sebenarnya, tetapi harus berhati-hati agar node mereka tidak pernah melakukan kesalahan, jangan sampai mereka melihat tabungan mereka terbakar habis. Jika ada perubahan yang diusulkan dilakukan pada jaringan, insting pertama validator adalah mematuhi apa pun yang dilakukan orang lain, atau berisiko dipotong. Menjadi validator seperti berjalan di atas kulit telur setiap hari.
Omong-omong, hidup di bawah sistem insentif negatif adalah salah satu, ahem, "manfaat" dari bukti kepemilikan, menurut salah satu pendiri jaringan Ethereum, Vitalik Buterin's:
Jadi bagaimana pemotongan benar-benar bekerja pada tingkat teknis? Bukankah kita harus terlebih dahulu membuat daftar semua validator, untuk memiliki sesuatu yang akan dipotong? Jawabannya iya. Untuk menjadi validator di Ethereum, seseorang harus terlebih dahulu memindahkan ETH ke alamat “staking” khusus. Daftar ini tidak hanya diperlukan untuk pemotongan, tetapi juga untuk pemungutan suara karena suara mayoritas dua pertiga diperlukan untuk blok pos pemeriksaan.
Ada beberapa implikasi menarik untuk mempertahankan daftar semua validator setiap saat. Seberapa sulit untuk bergabung? Seberapa sulit untuk pergi? Apakah validator dapat memilih status validator lainnya?
Ini membawa kita ke prinsip kedua di balik PoS, yaitu bahwa PoS adalah sistem yang diizinkan.
Langkah pertama untuk menjadi validator adalah menyetorkan beberapa ETH ke alamat staking khusus. Berapa ETHnya? Minimum yang dibutuhkan adalah 32 ETH, atau sekitar $50.000 pada saat penulisan ini. Untuk konteksnya, rig penambangan bitcoin yang layak biasanya berjalan dalam ribuan dolar satu digit, dan penambang rumahan dapat memulai dengan satu S9 untuk beberapa ratus dolar. Agar adil, biaya masuk ETH yang tinggi memiliki alasan teknis , karena taruhan yang lebih tinggi berarti lebih sedikit validator, yang menurunkan bandwidth.
Jadi biaya depositnya tinggi, tapi setidaknya siapa pun yang memiliki 32 ETH bebas untuk bergabung atau keluar kapan saja, bukan? Tidak terlalu. Ada risiko keamanan jika koalisi besar validator semuanya masuk atau keluar pada saat yang bersamaan. Misalnya, jika sebagian besar jaringan pergi sekaligus, maka mereka dapat menghabiskan dua kali lipat blok yang telah diselesaikan dengan memutar ulang garpu yang tidak pernah mereka tinggalkan, tanpa dipotong pada kedua rantai. Untuk mengurangi risiko ini, on-dan off-ramp memiliki batas throughput bawaan. Saat ini batas ini disetel ke validator maks(4,|V|/65536) per epoch (setiap 6,4 menit), dan sama untuk masuk dan keluar. Ini diterjemahkan secara kasar menjadi satu set validator penuh setiap sepuluh bulan.
Omong-omong, meskipun validator saat ini memungkinkan untuk mempublikasikan transaksi "keluar" dan berhenti memvalidasi, kode untuk benar-benar menarik dana bahkan belum ditulis. Kedengarannya agak seperti "Hotel California".
Ada satu poin terakhir tentang insentif di balik persetujuan validator baru. Misalkan Anda adalah pemegang saham di sebuah perusahaan besar dan stabil yang membayar dividen secara teratur setiap kuartal. Apakah masuk akal untuk memberikan saham baru secara gratis? Tentu saja tidak, karena hal itu akan mencairkan dividen dari semua pemegang saham yang ada. Struktur insentif serupa ada di PoS, karena setiap validator baru mengurangi pendapatan semua validator yang ada.
Secara teori, validator dapat dengan mudah menyensor setiap transaksi yang menambahkan validator baru; namun, dalam praktiknya, saya pikir pendekatan yang blak-blakan seperti itu tidak mungkin terjadi. Ini akan sangat terlihat dan akan menghancurkan citra Ethereum tentang “desentralisasi” dalam semalam, berpotensi menurunkan harga. Saya pikir pendekatan yang lebih halus akan digunakan sebagai gantinya. Misalnya, aturan bisa perlahan berubah seiring waktu sehingga semakin sulit untuk menjadi validator, dengan alasan yang ditawarkan seperti "keamanan" atau "efisiensi." Kebijakan apa pun yang memperkaya validator yang ada dengan mengorbankan validator baru akan memiliki hambatan finansial, baik diucapkan dengan lantang atau tidak. Kita bisa mulai melihat mengapa PoS cenderung ke oligarki.
Ikhtisar Algoritma Casper
Sekarang setelah kita mengetahui strategi tingkat tinggi di balik PoS, bagaimana sebenarnya algoritme itu bekerja? Gagasan utama di balik pos pemeriksaan dan tebasan diajukan dalam algoritme yang disebut Casper , jadi kita akan mulai dari sana. Casper sendiri sebenarnya tidak merinci apa pun tentang cara memproduksi blok, melainkan menyediakan kerangka kerja tentang cara menempatkan strategi pos pemeriksaan/tebasan di atas beberapa pohon blockchain yang sudah ada.
Pertama, beberapa konstanta arbitrer (C) dipilih sebagai nomor “spasi pos pemeriksaan”, yang menentukan berapa banyak blok yang terjadi di antara pos pemeriksaan; misalnya, jika C=100 maka pos pemeriksaan akan terjadi di blok 0, 100, 200, dan seterusnya. Kemudian semua node memilih blok pos pemeriksaan mana yang harus menjadi pos pemeriksaan "dibenarkan" berikutnya. Alih-alih memberikan suara pada blok tunggal secara terpisah, validator sebenarnya memilih pasangan pos pemeriksaan (s,t), yang menghubungkan beberapa sumber pos pemeriksaan “s” yang sebelumnya dibenarkan ke beberapa pos pemeriksaan target baru “t.” Setelah tautan pos pemeriksaan (s,t) mendapat dua pertiga suara mayoritas berdasarkan taruhan, maka "t" menjadi pos pemeriksaan baru yang dibenarkan. Diagram di bawah ini menunjukkan contoh pohon pos pemeriksaan:
Dalam diagram ini, fungsi h(b) mengacu pada “ketinggian pos pemeriksaan”, misalnya kelipatan blok dari 100. Anda mungkin telah memperhatikan bahwa tidak setiap blok keseratus perlu dibenarkan, yang dapat terjadi jika pemungutan suara gagal pada titik tertentu. tinggi. Misalnya, pada ketinggian 200 dua pos pemeriksaan terpisah masing-masing menerima 50% suara. Karena pemungutan suara dua kali adalah pelanggaran yang dapat ditebas, sistem akan "terjebak" kecuali beberapa validator dengan sukarela memangkas saham mereka sendiri untuk mencapai dua pertiga suara. Solusinya adalah setiap orang “melewati” pos pemeriksaan 200 dan “mencoba lagi” di blok 300.
Hanya karena sebuah pos pemeriksaan dibenarkan, tidak berarti itu sudah selesai. Agar sebuah pos pemeriksaan dihitung sebagai selesai, itu harus segera diikuti oleh pos pemeriksaan lain yang dibenarkan pada ketinggian berikutnya yang memungkinkan. Misalnya, jika pos pemeriksaan 0, 200, 400, 500 dan 700 semuanya dibenarkan dan dihubungkan bersama, hanya pos pemeriksaan 400 yang akan dihitung sebagai "selesai," karena itu adalah satu-satunya yang segera diikuti oleh pos pemeriksaan lain yang dibenarkan.
Karena terminologinya sangat tepat, mari kita rekap tiga kategori kita. Sebuah “checkpoint” adalah setiap blok yang muncul pada ketinggian C*n, jadi jika C=100, setiap blok dengan ketinggian 0, 100, 200, 300, dan seterusnya semuanya akan menjadi checkpoint. Bahkan jika beberapa blok dibuat pada ketinggian 200, keduanya akan menjadi "pos pemeriksaan." Sebuah pos pemeriksaan kemudian "dibenarkan" jika itu adalah blok akar pada ketinggian 0, atau jika dua pertiga validator memilih untuk membuat hubungan antara beberapa pos pemeriksaan yang dibenarkan sebelumnya dan pos pemeriksaan saat ini. Sebuah pos pemeriksaan yang dibenarkan kemudian "diselesaikan" jika kemudian terhubung ke pos pemeriksaan lain yang dibenarkan pada ketinggian berikutnya yang memungkinkan. Tidak setiap pos pemeriksaan harus dibenarkan dan tidak setiap pos pemeriksaan yang dibenarkan harus diselesaikan, bahkan di rantai terakhir.
Aturan Pemotongan Casper
Aturan tebasan di Casper dirancang sedemikian rupa sehingga tidak mungkin dua pos pemeriksaan akhir ada di dua garpu terpisah, kecuali setidaknya sepertiga validator melanggar aturan tebasan.
Dengan kata lain, hanya pos pemeriksaan akhir yang harus dihitung sebagai blok "kebenaran" yang tidak ambigu. Bahkan mungkin dua pos pemeriksaan yang dibenarkan terjadi di kedua sisi garpu, hanya saja bukan dua pos pemeriksaan yang diselesaikan. Juga tidak ada jaminan tentang kapan atau di mana pos pemeriksaan akhir berikutnya akan terjadi, hanya saja jika terjadi perpecahan rantai, maka Anda harus duduk dan menunggu sampai blok yang diselesaikan muncul di suatu tempat, dan setelah itu terjadi maka Anda tahu bahwa " rantai yang benar”.
Ada dua aturan pemotongan di Casper yang menerapkan properti ini:
Aturan pertama melarang siapa pun untuk memilih dua kali di pos pemeriksaan dengan ketinggian target yang sama, jadi jika validator memilih dua blok pos pemeriksaan yang berbeda dengan tinggi target 200, itu akan menjadi pelanggaran yang bisa ditebas. Tujuan dari aturan ini adalah untuk mencegah rantai terpecah menjadi dua pos pemeriksaan yang dibenarkan berbeda dengan ketinggian yang sama, karena ini akan membutuhkan 2/3 + 2/3 = 4/3 dari total suara validator, yang menyiratkan bahwa setidaknya sepertiga validator melanggar aturan pemotongan. Namun, seperti yang kita lihat sebelumnya, mungkin saja pos pemeriksaan yang dibenarkan untuk "melewati" ketinggian blok tertentu. Apa yang mencegah rantai membelah menjadi ketinggian target yang berbeda? Misalnya, tidak bisakah pos pemeriksaan 200 bercabang menjadi pos pemeriksaan yang dibenarkan pada 300 dan 400 tanpa ada yang ditebas?
Di situlah aturan kedua masuk, yang pada dasarnya mencegah validator dari "menjepit" suara di dalam suara lain. Misalnya, jika validator memilih 300→500 dan 200→700, itu akan menjadi pelanggaran yang bisa ditebas. Dalam kasus pemutusan rantai, setelah satu cabang melihat pos pemeriksaan yang telah diselesaikan, menjadi tidak mungkin bagi cabang lain untuk melihat pos pemeriksaan yang dibenarkan setelahnya kecuali setidaknya sepertiga dari validator melanggar aturan #2.
Untuk mengetahui alasannya, misalkan blockchain bercabang menjadi pos pemeriksaan yang dibenarkan 500→800 dan 500→900, maka di beberapa titik rantai pertama melihat pos pemeriksaan akhir dengan tautan 1700→1800. Karena 1700 dan 1800 hanya dapat dibenarkan pada fork #1 (dengan asumsi tidak ada yang melanggar aturan tebasan pertama), satu-satunya cara fork #2 dapat melihat pos pemeriksaan yang dibenarkan setelah 1800 adalah jika ada beberapa link yang dipilih di antara ketinggian H<1700 dan H> 1800. Tetapi karena pemungutan suara ini akan “menjepit” tautan 1700→1800 dan membutuhkan dua pertiga suara, dan 1700→1800 telah disahkan dengan dua pertiga suara, maka setidaknya sepertiga dari validator harus melanggar aturan # 2. Kertas Casper memiliki diagram bagus yang menunjukkan properti ini:
Dan hanya itu, cukup ikuti aturan Casper dan Anda baik-baik saja!
Tampaknya cukup sederhana, bukan? Saya yakin PoS hanya akan menggunakan tebasan sebagai upaya terakhir mutlak untuk mempertahankan konsensus, dan bukan sebagai mekanisme pemerasan untuk menekan validator agar berperilaku dengan cara tertentu … benar?
Ini membawa kita ke prinsip ketiga di balik PoS: Tidak ada aturan. "Aturan" adalah apa pun yang dikatakan orang lain.
Suatu hari simpul Anda dapat secara teknis mengikuti setiap perintah Casper ke surat itu, dan hari berikutnya tabungan Anda dapat dipotong karena Anda melakukan sesuatu yang tidak disukai orang lain. Menyetujui transaksi "tim merah" itu satu kali? Besok mayoritas "tim biru" mungkin akan memangkas Anda. Atau mungkin Anda melakukan sebaliknya dan menghilangkan terlalu banyak transaksi “team red”? Besok mayoritas "tim merah" mungkin akan memotong Anda karena penyensoran. Kemampuan untuk menebas jauh melampaui cakupan sensor OFAC (Office of Foreign Assets Control) yang terbatas. PoS seperti kebuntuan Meksiko tanpa henti, di mana ancaman implisit dari pemotongan selalu ada setiap saat.
Saya tidak akan terkejut jika dalam hard fork yang kontroversial, kedua belah pihak mengkodekan aturan validasi dari fork lainnya, untuk berjaga-jaga jika mereka ingin menghukum siapa pun yang bergabung dengan pihak yang "salah". Tentu saja, ini akan menjadi opsi nuklir, dan seperti nuklir, masing-masing pihak mungkin hanya memilih untuk menyerang sebagai pembalasan. Saya kira sebagian besar validator individu netral karena mereka akan memprioritaskan pertahanan diri finansial daripada pengorbanan diri politik, tetapi mungkin secara lahiriah memihak jika mereka merasa itu adalah langkah yang benar untuk menghindari pemotongan.
Berapa Jam?
Sekarang setelah kita mengetahui dasar-dasar pos pemeriksaan dan tebasan, kita dapat beralih ke algoritma aktual yang digunakan di Ethereum, yang disebut Gasper. Ini adalah portmanteau dari Casper, yang telah kita bahas, dan GHOST, sebuah strategi untuk memilih rantai blok "terbaik" di antara pos pemeriksaan.
Hal pertama yang harus dipahami tentang Gasper adalah waktu itu sendiri adalah variabel independen utama. Waktu dunia nyata dibagi menjadi unit dua belas detik yang disebut "slot", di mana setiap slot berisi paling banyak satu blok. Slot ini kemudian membentuk kelompok yang lebih besar yang disebut "zaman", di mana setiap zaman mengacu pada satu pos pemeriksaan. Setiap zaman berisi 32 slot, membuatnya berdurasi 6,4 menit.
Perlu dicatat bahwa paradigma ini membalik hubungan kausal antara waktu dan produksi blok jika dibandingkan dengan PoW. Di PoW, blok diproduksi karena hash yang valid ditemukan, bukan karena cukup waktu telah berlalu. Tapi di Gasper, blok diproduksi karena cukup banyak waktu dunia nyata telah berlalu untuk sampai ke slot berikutnya. Saya hanya bisa membayangkan bug pengaturan waktu yang rumit yang mungkin dihadapi sistem seperti itu, terutama ketika itu bukan hanya satu program yang berjalan di satu komputer, tetapi puluhan ribu komputer mencoba untuk berjalan secara sinkron di seluruh dunia. Mudah-mudahan, para pengembang Ethereum terbiasa dengan kebohongan yang diyakini oleh para pemrogram tentang waktu.