Memahami Protokol Konsensus Stellar

Memahami Protokol Konsensus Stellar

Protokol konsensus Stellar pertama kali dijelaskan pada artikel ilmiah David Mazier pada tahun 2015. Ini adalah “sistem perjanjian Bizantium federal” yang memungkinkan jaringan komputasi terdesentralisasi dan tanpa pemimpin mencapai konsensus dalam suatu keputusan secara efisien. Jaringan pembayaran Stellar menggunakan Stellar Consensus Protocol (SCP) untuk menjaga riwayat transaksi yang konsisten dan dapat dilihat oleh semua peserta.

Protokol konsensus dianggap sulit untuk dipahami. SCP lebih sederhana daripada kebanyakan dari mereka, tetapi masih memiliki reputasi yang sama - sebagian karena gagasan yang salah bahwa "pemungutan suara gabungan", yang menjadi subjek paruh pertama artikel ilmiah, adalah SCP. Tapi itu tidak benar! Ini hanyalah sebuah blok bangunan penting yang digunakan pada paruh kedua artikel ini untuk membuatnya sebenarnya Protokol konsensus yang luar biasa.

Pada artikel ini kami akan menjelaskan secara singkat apa itu “sistem perjanjian”, apa yang menjadikannya “Bizantium” dan mengapa menjadikan sistem Bizantium “federal”. Kami kemudian akan menjelaskan prosedur pemungutan suara gabungan yang dijelaskan dalam artikel SCP, dan terakhir kami akan menjelaskan protokol SCP itu sendiri.

Sistem perjanjian

Sistem kesepakatan memungkinkan sekelompok peserta mencapai konsensus mengenai suatu topik, seperti apa yang harus dipesan untuk makan siang.

Di Interstellar, kami telah menerapkan sistem perjanjian makan kami sendiri: kami memesan apa yang dikatakan manajer operasi kami, John. Ini adalah sistem perjanjian yang sederhana dan efektif. Kita semua mempercayai John dan yakin bahwa dia akan menemukan sesuatu yang menarik dan bergizi setiap hari.

Namun bagaimana jika John menyalahgunakan kepercayaan kita? Dia dapat memutuskan sendiri bahwa kita semua harus menjadi vegan. Dalam satu atau dua minggu, kita mungkin akan menggulingkannya dan menyerahkan kekuasaan kepada Elizabeth. Tapi tiba-tiba dia menyukai alpukat dengan ikan teri dan berpikir semua orang harus seperti itu. Kekuasaan korup. Jadi lebih baik mencari metode yang lebih demokratis: cara untuk memastikan bahwa preferensi yang berbeda diperhitungkan, sekaligus memastikan hasil yang tepat waktu dan tidak ambigu, sehingga tidak ada yang memesan makan siang, atau lima orang memesan pesanan berbeda, atau berdiskusi. berlarut-larut hingga malam hari.

Tampaknya solusinya sederhana: lakukan pemungutan suara! Namun ini adalah kesan yang menyesatkan. Siapa yang akan mengumpulkan surat suara dan melaporkan hasilnya? Dan mengapa orang lain harus mempercayai apa yang dia katakan? Mungkin kita bisa pada awalnya pilihlah pemimpin yang kita percayai untuk memimpin pemungutan suara – namun yang akan memimpinnya yang pertama dengan memilih? Bagaimana jika kita tidak bisa menyepakati seorang pemimpin? Atau bagaimana jika kita mencapai kesepakatan, namun pemimpin ini terjebak dalam rapat atau cuti sakit?

Masalah serupa terjadi pada jaringan komputer terdistribusi. Semua peserta atau node harus menyetujui beberapa keputusan, seperti giliran siapa yang memperbarui file bersama atau menghapus tugas dari antrian pemrosesan. Dalam jaringan mata uang kripto, node berulang kali harus memilih seperti apa cerita lengkapnya dari beberapa kemungkinan versi, yang terkadang bertentangan. Perjanjian jaringan ini memberikan jaminan kepada penerima bahwa koin tersebut (a) sah (tidak palsu) dan (b) belum dibelanjakan di tempat lain. Hal ini juga memastikan bahwa dia akan dapat membelanjakan koin tersebut di masa depan karena penerima baru akan mendapatkan jaminan yang sama untuk alasan yang sama.

Sistem konsensus apa pun dalam jaringan komputasi terdistribusi harus toleran terhadap kesalahan: sistem tersebut harus memberikan hasil yang konsisten meskipun terdapat kesalahan seperti tautan lambat, node tidak responsif, dan urutan pesan yang salah. Bizantium Sistem perjanjian juga tahan terhadap kesalahan "Bizantium": node yang memberikan informasi palsu, baik karena kesalahan atau upaya yang disengaja untuk melemahkan sistem atau mendapatkan keuntungan. Toleransi kesalahan "Bizantium" - kemampuan untuk mempercayai keputusan kelompok bahkan ketika beberapa anggota kelompok mungkin berbohong atau tidak mengikuti aturan pengambilan keputusan - disebut perumpamaan tentang para jenderal Kekaisaran Bizantiumyang mencoba mengoordinasikan serangan itu. Deskripsi yang bagus di Anthony Stevens.

Pertimbangkan pemilik koin kripto Alice, yang harus memilih antara membeli es krim lezat dari Bob atau melunasi hutang Carol. Mungkin Alice ingin membayar keduanya sekaligus dengan menggunakan koin yang sama secara curang. Untuk melakukan ini, dia harus meyakinkan komputer Bob bahwa koin tersebut tidak pernah dibayarkan kepada Carol, dan meyakinkan komputer Carol bahwa koin tersebut tidak pernah dibayarkan kepada Bob. Sistem perjanjian Bizantium membuat hal ini hampir tidak mungkin dilakukan, dengan menggunakan bentuk pemerintahan mayoritas yang disebut jumlah anggota minimum. Sebuah node dalam jaringan tersebut menolak untuk berpindah ke versi sejarah tertentu sampai ia melihat bahwa jumlah rekan yang mencukupi - kuorum - menyetujui transisi tersebut. Setelah ini terjadi, mereka akan membentuk blok pemungutan suara yang cukup besar untuk memaksa node jaringan yang tersisa menyetujui keputusan mereka. Alice dapat memaksa beberapa node untuk berbohong atas namanya, tetapi jika jaringannya cukup besar, usahanya akan dikalahkan oleh suara dari node yang jujur.

Berapa banyak node yang diperlukan untuk kuorum? Minimal, mayoritas, atau lebih tepatnya, mayoritas yang memenuhi syarat untuk memerangi kesalahan dan penipuan. Namun untuk menghitung mayoritas, Anda perlu mengetahui jumlah total peserta. Di kantor Antarbintang atau di pemilu distrik, angka-angka ini mudah diketahui. Tetapi jika grup Anda adalah jaringan yang didefinisikan secara longgar di mana node dapat masuk dan keluar sesuka hati tanpa persetujuan dari pusat, maka Anda perlu federal sebuah sistem perjanjian Bizantium yang mampu menentukan kuorum bukan dari daftar titik-titik yang telah ditentukan sebelumnya, namun secara dinamis, dari gambaran titik-titik yang selalu berubah dan pasti tidak lengkap pada suatu titik waktu tertentu.

Tampaknya mustahil untuk menciptakan kuorum dari perspektif satu node dalam jaringan yang luas, namun hal ini mungkin dilakukan. Kuorum seperti itu bahkan dapat menjamin hasil pemungutan suara yang terdesentralisasi. Buku putih SCP menunjukkan bagaimana melakukan hal ini menggunakan prosedur yang disebut melalui pemungutan suara federal.

Karena tidak sabaran

Artikel selanjutnya menjelaskan pemungutan suara gabungan dan protokol konsensus Stellar secara lebih rinci. Jika Anda tidak tertarik dengan detailnya, berikut gambaran umum prosesnya.

  1. Node-node tersebut melakukan putaran pemungutan suara federal untuk menentukan “calon.” Putaran pemungutan suara federal berarti:
    • Node memberikan suara untuk beberapa pernyataan, misalnya, “Saya mengusulkan nilai V”;
    • Node mendengarkan suara rekan-rekannya sampai menemukan suara yang dapat "menerima";
    • Node mencari "kuorum" untuk pernyataan ini. Kuorum “mengkonfirmasi” calon tersebut.
  2. Setelah sebuah node dapat mengkonfirmasi satu atau lebih calon, node tersebut akan mencoba untuk "mempersiapkan" "surat suara" melalui beberapa putaran pemungutan suara gabungan.
  3. Setelah sebuah node dapat memverifikasi bahwa surat suara telah siap, node tersebut akan mencoba untuk melakukan hal tersebut melalui lebih banyak putaran pemungutan suara gabungan.
  4. Setelah sebuah node dapat mengonfirmasi penerapan surat suara, node tersebut dapat "mengeksternalisasi" nilai surat suara tersebut dengan menggunakannya sebagai hasil konsensus.

Langkah-langkah ini melibatkan beberapa putaran pemungutan suara gabungan, yang secara kolektif membentuk satu putaran SCP. Mari kita lihat lebih dekat apa yang terjadi di setiap langkah.

Pemungutan suara gabungan

Pemungutan suara gabungan adalah prosedur untuk menentukan apakah jaringan dapat menyetujui suatu proposal. Dalam babak pemungutan suara, setiap node harus memilih salah satu dari banyak kemungkinan nilai yang mungkin. Ia tidak dapat melakukan hal ini kecuali ia yakin bahwa node lain dalam jaringan tidak akan memilih hasil yang berbeda. Untuk memastikan hal ini, node bertukar rentetan pesan bolak-balik ke semua orang dikonfirmasiBahwa jumlah anggota minimum knot menerima sama keputusan. Sisa bagian ini menjelaskan istilah-istilah dalam kalimat ini dan bagaimana keseluruhan prosedur terjadi.

Kuorum dan irisan kuorum

Mari kita mulai dengan menentukan kuorum. Seperti yang telah kita bahas di atas, dalam jaringan terdesentralisasi dengan keanggotaan dinamis, tidak mungkin mengetahui sebelumnya jumlah node dan berapa banyak yang dibutuhkan untuk mayoritas. Pemungutan suara gabungan memecahkan masalah ini dengan memperkenalkan ide baru pemotongan kuorum (kuorum irisan): Sekumpulan kecil rekan yang dipercaya oleh sebuah node untuk mengkomunikasikan informasi status pemungutan suara ke seluruh jaringan. Setiap node menentukan kuorumnya sendiri (yang mana ia menjadi anggota de facto).

Pembentukan kuorum dimulai dengan pemotongan kuorum. Untuk setiap node, node yang dipotongnya ditambahkan. Kemudian istilah irisan ditambahkan node ini dan seterusnya. Saat Anda melanjutkan, ada semakin banyak node yang tidak dapat Anda tambahkan karena node tersebut sudah termasuk dalam irisan. Ketika tidak ada lagi node baru untuk ditambahkan, proses berhenti: kita telah membentuk kuorum dengan “penutupan transitif” dari potongan kuorum dari node awal.

Memahami Protokol Konsensus Stellar
Untuk menemukan kuorum dari node tertentu...

Memahami Protokol Konsensus Stellar
... tambahkan anggota irisannya...

Memahami Protokol Konsensus Stellar
...lalu kita menambahkan anggota irisan dari node ini.

Memahami Protokol Konsensus Stellar
Kami melanjutkan sampai tidak ada lagi node yang perlu ditambahkan.

Memahami Protokol Konsensus Stellar

Memahami Protokol Konsensus Stellar
Tidak ada lagi node yang perlu ditambahkan. Ini adalah kuorum.

Faktanya, setiap node bisa muncul di lebih dari satu irisan. Untuk membentuk kuorum, pilih hanya satu bagian dan tambahkan anggota; lalu pilih bagian mana pun untuk setiap anggota dan tambahkan anggota ini memotong dan sebagainya. Artinya, setiap node merupakan anggota dari banyak kuorum yang mungkin ada.

Memahami Protokol Konsensus Stellar
Pilih hanya satu bagian kuorum pada setiap langkah.

Memahami Protokol Konsensus Stellar

Memahami Protokol Konsensus Stellar

Memahami Protokol Konsensus Stellar
Satu kemungkinan kuorum. Atau alternatif...

Memahami Protokol Konsensus Stellar
...pilih irisan lainnya...

Memahami Protokol Konsensus Stellar

Memahami Protokol Konsensus Stellar
…(bila memungkinkan)…

Memahami Protokol Konsensus Stellar
... menciptakan kuorum lain.

Bagaimana sebuah node mengetahui di irisan mana node lain berada? Dengan cara yang sama seperti informasi lain tentang node lain: dari transmisi yang disiarkan setiap node ke jaringan ketika status pemungutan suara berubah. Setiap siaran menyertakan informasi tentang irisan node pengirim. Buku putih SCP tidak menentukan mekanisme komunikasi. Implementasi biasanya menggunakan protokol gosip untuk jaminan penyiaran pesan ke seluruh jaringan.

Ingatlah bahwa dalam sistem perjanjian Bizantium non-federal, kuorum didefinisikan sebagai mayoritas dari semua simpul. Sistem perjanjian Bizantium dirancang dari sudut pandang pertanyaan: berapa banyak simpul yang tidak jujur ​​yang dapat ditoleransi oleh sistem? Dalam sistem yang terdiri dari N node yang dirancang untuk bertahan dari f kegagalan, sebuah node harus dapat membuat kemajuan dengan menerima umpan balik dari N−f rekannya karena f di antaranya mungkin sedang down. Namun setelah menerima tanggapan dari rekan-rekan N−f, kita dapat berasumsi bahwa semua rekan-rekan f (yang nodenya tidak menerima tanggapan) sebenarnya jujur. Jadi, f dari N−f rekan (dari mana respon diterima) adalah berbahaya. Agar node mencapai konsensus yang sama, mayoritas node yang tersisa harus jujur, yaitu kita memerlukan N−f lebih besar dari 2f atau N > 3f. Jadi biasanya sistem yang dirancang untuk bertahan dari kegagalan f akan memiliki total N=3f+1 node dan ukuran kuorum 2f+1. Ketika sebuah proposal melewati ambang batas kuorum, seluruh jaringan yakin bahwa proposal yang bersaing akan gagal. Ini adalah bagaimana jaringan menyatu dengan hasilnya.

Namun dalam sistem perjanjian federal Bizantium, tidak hanya tidak ada mayoritas (karena tidak ada yang mengetahui ukuran total jaringan), tetapi konsep mayoritas sama sekali tidak berguna! Jika keanggotaan dalam sistem terbuka, maka seseorang dapat memperoleh mayoritas hanya dengan melakukan apa yang disebut serangan Sybil: berulang kali bergabung dengan jaringan di beberapa node. Jadi mengapa penutupan irisan transitif disebut? jumlah anggota minimum, dan bagaimana mereka mampu menekan usulan-usulan yang bersaing?

Secara teknis, tidak mungkin! Bayangkan sebuah jaringan yang terdiri dari enam node, di mana dua kembar tiga diisolasi di irisan kuorum masing-masing. Subkelompok pertama mungkin membuat keputusan yang tidak akan pernah didengar oleh subkelompok kedua, dan sebaliknya. Tidak ada cara bagi jaringan ini untuk mencapai konsensus (kecuali secara kebetulan).

Oleh karena itu, SCP mensyaratkan bahwa untuk pemungutan suara gabungan (dan agar teorema penting dari makalah ini dapat diterapkan), jaringan harus memiliki properti yang disebut persimpangan kuorum. Dalam jaringan dengan properti ini, dua kuorum yang dapat dibangun selalu tumpang tindih dalam setidaknya satu node. Untuk menentukan sentimen yang ada dalam jaringan, hal ini sama saja dengan mendapatkan mayoritas. Secara intuitif, ini berarti bahwa jika ada kuorum yang menyetujui pernyataan X, maka tidak ada kuorum lain yang dapat menyetujui pernyataan lainnya, karena kuorum tersebut pasti mencakup beberapa simpul dari kuorum pertama yang telah memilih X.

Memahami Protokol Konsensus Stellar
Jika ada perpotongan kuorum dalam jaringan...

Memahami Protokol Konsensus Stellar
...lalu dua kuorum mana pun yang dapat Anda bangun...

Memahami Protokol Konsensus Stellar
...akan selalu berpotongan.

Memahami Protokol Konsensus Stellar

Memahami Protokol Konsensus Stellar

(Tentu saja, node yang tumpang tindih bisa berubah menjadi sebuah kebohongan Bizantium atau sebaliknya buruk. Dalam kasus ini, persimpangan kuorum tidak membantu jaringan untuk menyetujuinya sama sekali. Karena alasan ini, banyak hasil dalam buku putih SCP didasarkan pada asumsi eksplisit, seperti apa yang tersisa dalam kuorum jaringan bahkan setelah menghapus node yang buruk. Untuk mempermudah, mari kita tinggalkan asumsi ini implisit di sisa artikel).

Tampaknya tidak masuk akal untuk mengharapkan bahwa persilangan kuorum yang dapat diandalkan dimungkinkan dalam jaringan node independen. Namun ada dua alasan mengapa hal ini terjadi.

Alasan pertama adalah keberadaan Internet itu sendiri. Internet adalah contoh sempurna dari jaringan node independen dengan kuorum yang berpotongan. Sebagian besar node di Internet hanya terhubung ke beberapa node lokal lainnya, namun kumpulan kecil ini cukup tumpang tindih sehingga setiap node dapat dijangkau dari setiap node lainnya di sepanjang rute tertentu.

Alasan kedua khusus untuk jaringan pembayaran Stellar (penggunaan SCP yang paling umum). Setiap aset di jaringan Stellar memiliki penerbit, dan pedoman Stellar mengharuskan setiap penerbit menunjuk satu atau lebih node di jaringan untuk memproses permintaan penukaran. Adalah kepentingan terbaik Anda untuk secara langsung atau tidak langsung memasukkan simpul-simpul ini ke dalam potongan kuorum untuk setiap aset yang Anda minati. Kuorum untuk semua node yang tertarik pada aset tertentu akan tumpang tindih setidaknya pada node penukaran tersebut. Node yang tertarik pada beberapa aset akan menyertakan semua node penebusan dari masing-masing penerbit dalam kuorumnya, dan mereka akan berupaya untuk menggabungkan semua aset bersama-sama. Selain itu, aset apa pun yang tidak ditautkan dengan cara ini ke aset lain di jaringan, dan tidak boleh dihubungkan - ini dirancang agar tidak ada kuorum yang tumpang tindih untuk jaringan ini (misalnya, bank dari zona dolar terkadang ingin berdagang dengan bank dari zona euro dan bank dari zona peso, sehingga mereka berada di jaringan yang sama, tetapi tidak ada dari mereka peduli dengan jaringan terpisah anak-anak yang menjual kartu bisbol).

Tentu saja, menunggu melintasi kuorum tidak menjamin. Kompleksitas sistem perjanjian Bizantium lainnya disebabkan oleh jaminan kuorum. Inovasi penting dari SCP adalah menghilangkan tanggung jawab untuk menciptakan kuorum dari algoritma konsensus itu sendiri dan membawanya ke tingkat aplikasi. Jadi, meskipun pemungutan suara gabungan cukup umum untuk memberikan suara pada isu apa pun, keandalannya sebenarnya sangat bergantung pada makna yang lebih luas dari makna-makna tersebut. Beberapa penggunaan hipotetis mungkin tidak kondusif untuk menciptakan jaringan yang terhubung dengan baik seperti penggunaan lainnya.

Pemungutan suara, penerimaan dan konfirmasi

Dalam putaran pemungutan suara gabungan, sebuah node secara opsional mulai memberikan suara untuk beberapa nilai V. Ini berarti menyiarkan pesan ke jaringan: “Saya adalah node N, kuorum saya adalah Q, dan saya memilih V.” Ketika sebuah node memberikan suara dengan cara ini, ia menjanjikan bahwa ia tidak pernah memberikan suara menentang V dan tidak akan pernah.

Dalam siaran peer-to-peer, setiap node melihat bagaimana node lainnya memberikan suara. Setelah sebuah node mengumpulkan cukup banyak pesan-pesan ini, node tersebut dapat melacak bagian kuorum dan mencoba menemukan kuorum. Jika dia melihat kuorum rekan-rekannya juga memilih V, dia dapat melanjutkan adopsi V dan siarkan pesan baru ini ke jaringan: “Saya node N, kuorum saya adalah Q, dan saya menerima V.” Penerimaan memberikan jaminan yang lebih kuat dibandingkan pemungutan suara sederhana. Ketika sebuah node memilih V, ia tidak akan pernah bisa memilih opsi lain. Namun jika sebuah node menerima V, tidak ada node di Jaringan yang akan menerima opsi lainnya (Teorema 8 dalam whitepaper SCP membuktikan hal ini).

Tentu saja, ada kemungkinan besar bahwa tidak akan ada kuorum node yang setuju dengan V. Node lain mungkin memilih nilai lain. Namun ada cara lain bagi sebuah node untuk berpindah dari pemungutan suara sederhana ke penerimaan. N dapat menerima nilai W yang berbeda, meskipun dia tidak memilihnya, dan meskipun dia tidak melihat kuorum untuk itu. Untuk memutuskan mengubah suara Anda, lihat saja set pemblokiran node yang telah menerima W. Satu set pemblokiran adalah satu node dari masing-masing irisan kuorum N. Seperti namanya, ia dapat memblokir arti lainnya. Jika semua node dalam himpunan tersebut menerima W, maka (menurut Teorema 8) tidak akan mungkin terbentuk kuorum yang mengambil nilai berbeda, dan oleh karena itu aman juga bagi N untuk menerima W.

Memahami Protokol Konsensus Stellar
Node N dengan tiga irisan kuorum.

Memahami Protokol Konsensus Stellar
BDF adalah set pemblokiran untuk N: ia mencakup satu node dari masing-masing irisan N.

Memahami Protokol Konsensus Stellar
BE juga merupakan himpunan pemblokiran untuk N karena E muncul dalam dua irisan N.

Namun set pemblokiran tidak mencapai kuorum. Akan terlalu mudah untuk mengelabui node N agar menerima nilai yang diinginkan jika cukup dengan meretas satu node saja di setiap irisan N. Oleh karena itu, menerima nilai bukanlah akhir dari pemungutan suara. Sebaliknya, N harus mengkonfirmasi nilainya, yaitu melihat kuorum node yang menerimanya. Jika sampai sejauh itu, maka, seperti yang dibuktikan oleh whitepaper SCP (dalam Teorema 11), seluruh jaringan pada akhirnya juga akan mengkonfirmasi nilai yang sama, sehingga N akan mengakhiri pemungutan suara gabungan dengan nilai tertentu sebagai hasilnya.

Memahami Protokol Konsensus Stellar
Pemungutan suara gabungan.

Proses pemungutan suara, penerimaan, dan konfirmasi merupakan satu putaran penuh pemungutan suara gabungan. Protokol konsensus Stellar menggabungkan banyak putaran ini untuk menciptakan sistem konsensus yang lengkap.

Protokol Konsensus Stellar

Dua sifat terpenting dari sistem konsensus adalah - Keamanan и kemampuan bertahan hidup. Algoritme konsensus dikatakan "aman" jika tidak pernah memberikan hasil yang berbeda kepada partisipan yang berbeda (salinan sejarah Bob tidak akan pernah bertentangan dengan Carol). “Livability” artinya algoritma akan selalu membuahkan hasil, yaitu tidak akan stuck.

Menjelaskan prosedur pemungutan suara federal aman dalam artian jika sebuah node mengkonfirmasi nilai V, tidak ada node lain yang akan mengkonfirmasi nilai lainnya. Namun “tidak akan mengkonfirmasi arti lain” tidak berarti bahwa ia akan serta merta mengkonfirmasi sesuatu. Peserta dapat memberikan suara pada begitu banyak nilai berbeda sehingga tidak ada yang mencapai ambang batas penerimaan. Artinya dalam pemungutan suara federal tidak ada kemampuan bertahan hidup.

Protokol konsensus Stellar menggunakan pemungutan suara gabungan dengan cara yang menjamin keamanan dan kelangsungan hidup. (Jaminan keamanan dan kemampuan bertahan hidup SCP memiliki batasan teoretis. Desainnya memilih jaminan keamanan yang sangat kuat, dengan mengorbankan sedikit mitigasi kemampuan bertahan hidup, namun dengan waktu yang cukup, konsensus kemungkinan besar akan tercapai.) Singkatnya, idenya adalah untuk memiliki banyak suara gabungan pada berbagai nilai sampai salah satu dari mereka berhasil melewati semua fase pemungutan suara SCP yang dijelaskan di bawah ini.

Nilai-nilai yang menjadi dasar konsensus SCP dapat berupa riwayat transaksi atau pesanan makan siang atau yang lainnya, namun penting untuk dicatat bahwa ini bukanlah nilai-nilai yang diterima atau dikonfirmasi. Sebaliknya, pemungutan suara federal dilakukan menurut pernyataan tentang nilai-nilai ini.

Putaran pertama pemungutan suara federal berlangsung pada tahap nominasi (fase pencalonan), pada serangkaian pernyataan seperti “Saya mencalonkan V”, mungkin untuk banyak nilai V yang berbeda. Tujuan pencalonan adalah untuk menemukan satu atau lebih pernyataan yang melalui penerimaan dan konfirmasi.

Setelah menemukan kandidat yang dapat diverifikasi, SCP melanjutkan ke fase pemungutan suara, yang tujuannya adalah menemukan kandidat tertentu buletin (yaitu wadah untuk nilai yang diusulkan) dan kuorum yang dapat menyatakan melakukan untuk itu (berkomitmen). Jika kuorum melakukan pemungutan suara, nilainya diterima sebagai konsensus. Namun sebelum sebuah node dapat melakukan pemungutan suara pada pemungutan suara, node tersebut harus melakukan konfirmasi terlebih dahulu pembatalan semua surat suara dengan nilai counter lebih rendah. Langkah-langkah ini—membatalkan surat suara untuk menemukan surat suara yang dapat dilakukan—melibatkan beberapa putaran pemungutan suara gabungan untuk beberapa klaim surat suara.

Bagian berikut menjelaskan nominasi dan pemungutan suara secara lebih rinci.

Pencalonan

Pada awal fase nominasi, setiap node dapat secara spontan memilih nilai V dan memilih pernyataan “Saya mencalonkan V.” Tujuan pada tahap ini adalah untuk mengkonfirmasi pencalonan beberapa nilai melalui pemungutan suara gabungan.

Mungkin cukup banyak node yang memberikan suara pada proposisi yang cukup berbeda sehingga tidak ada nominasi yang dapat mencapai ambang batas penerimaan. Oleh karena itu, selain menyiarkan suara nominasi mereka sendiri, node “mencerminkan” nominasi rekan-rekan mereka. Gema artinya jika sebuah node memilih nominasi V, namun melihat pesan dari tetangganya yang memilih nominasi W, maka node tersebut akan memilih V dan W. (Tidak semua suara rekan digaungkan selama nominasi karena hal ini dapat menyebabkan ledakan nominasi yang berbeda. SCP menyertakan mekanisme untuk mengatur pemungutan suara ini. Singkatnya, ada formula untuk menentukan "prioritas" rekan dari sudut pandang sebuah node, dan hanya suara dari node dengan prioritas tinggi yang akan tercermin. yang dibutuhkan, semakin rendah ambang batasnya, maka node akan memperluas kumpulan rekan yang suaranya akan dicerminkan. Rumus prioritas menyertakan nomor slot sebagai salah satu masukannya, sehingga rekan dengan prioritas tinggi untuk satu slot mungkin merupakan rekan dengan prioritas rendah untuk yang lain, dan sebaliknya).

Secara konseptual, pencalonannya bersifat paralel, baik V maupun W merupakan suara federal yang terpisah, masing-masing mampu mencapai penerimaan atau konfirmasi. Dalam praktiknya, pesan protokol SCP mengemas suara individu ini menjadi satu.

Meskipun memilih nominasi V adalah janji untuk tidak pernah memberikan suara menentang nominasi V, namun pada tingkat penerapan - dalam hal ini SCP - ditentukan apa yang dimaksud dengan "menentang". SCP tidak melihat pernyataan yang bertentangan dengan suara "Saya mencalonkan X", yaitu, tidak ada pesan "Saya menentang pencalonan X", sehingga node dapat memilih untuk mencalonkan nilai apa pun. Banyak dari nominasi ini tidak akan menghasilkan apa-apa, namun pada akhirnya node akan dapat menerima atau mengonfirmasi satu atau lebih nilai. Setelah seorang calon dikonfirmasi, dia menjadi calon.

Memahami Protokol Konsensus Stellar
Nominasi SCP menggunakan pemungutan suara gabungan. Ada banyak nilai “B” yang dikemukakan oleh rekan-rekan dan “dicerminkan” oleh node.

Nominasi dapat menghasilkan beberapa kandidat yang dikonfirmasi. Oleh karena itu, SCP memerlukan lapisan aplikasi untuk menyediakan beberapa metode untuk menggabungkan kandidat menjadi satu gabungan (gabungan). Cara bergabungnya bisa apa saja. Hal utama adalah jika metode ini deterministik, maka setiap node akan menggabungkan kandidat yang sama. Dalam sistem pemungutan suara makan siang, “penyatuan” bisa berarti menolak salah satu dari dua kandidat. (Tetapi secara deterministik: setiap node harus memilih nilai yang sama untuk direset. Misalnya, pemilihan sebelumnya dalam urutan abjad). Dalam jaringan pembayaran Stellar, di mana riwayat transaksi dipilih, menggabungkan dua nominasi yang diajukan berarti menggabungkan transaksi yang ada di dalamnya dan stempel waktu terbaru dari dua nominasi tersebut.

Whitepaper SCP membuktikan (Teorema 12) bahwa pada akhir fase perluasan, jaringan pada akhirnya menyatu menjadi satu komposit. Tapi ada masalah: pemungutan suara gabungan adalah protokol asinkron (seperti SCP). Dengan kata lain, node tidak dikoordinasikan berdasarkan waktu, namun hanya berdasarkan pesan yang dikirimkannya. Dari sudut pandang node, tidak jelas kapan hal itu akan terjadi berakhir fase ekstensi. Dan meskipun semua node pada akhirnya akan sampai pada komposit yang sama, node-node tersebut mungkin mengambil rute yang berbeda-beda, menciptakan kandidat komposit yang berbeda-beda, dan tidak pernah dapat membedakan mana yang merupakan kandidat final.

Tapi itu normal. Nominasi hanyalah persiapan. Yang utama adalah membatasi jumlah calon untuk mencapai mufakat yang terjadi dalam prosesnya pemungutan suara (pemungutan suara).

Berlari

Buletin adalah pasangan , dimana counter adalah bilangan bulat yang dimulai dari 1 dan nilai adalah kandidat dari tahap nominasi. Ini bisa berupa kandidat dari node itu sendiri atau kandidat dari node tetangga yang diterima oleh node tersebut. Secara kasar, pemungutan suara melibatkan upaya berulang-ulang untuk memaksa jaringan tersebut mencapai konsensus mengenai beberapa kandidat dalam beberapa surat suara dengan kemungkinan mengadakan banyak suara gabungan pada pernyataan surat suara. Penghitung pada surat suara mencatat upaya yang dilakukan, dan surat suara dengan jumlah penghitungan lebih tinggi akan didahulukan dibandingkan surat suara dengan jumlah penghitungan lebih sedikit. Jika buletin macet, pemungutan suara baru dimulai, sekarang pemungutan suara .

Penting untuk dibedakan nilai-nilai (misalnya, pesanan makan siangnya harus seperti apa: pizza atau salad), buletin (pasangan nilai tandingan) dan pernyataan tentang surat suara. Putaran SCP mencakup beberapa putaran pemungutan suara federal, khususnya pada pernyataan berikut:

  • "Saya siap melakukan pemungutan suara B" dan
  • "Saya mengumumkan pelaksanaan pemungutan suara B"

Dari sudut pandang simpul tertentu, konsensus dicapai ketika simpul tersebut menemukan surat suara B yang dapat dikonfirmasikan (yaitu, kuorumnya menerima) pernyataan "Saya memberikan suara B." Mulai saat ini, aman untuk bertindak berdasarkan nilai yang ditentukan di B - misalnya, memesan makan siang ini. Itu disebut eksternalisasi makna. Setelah penerimaan surat suara dikonfirmasi, sebuah node dapat yakin bahwa node lain telah mengeksternalisasikan nilai yang sama atau akan melakukan hal yang sama di masa depan.

Meskipun banyak pemungutan suara gabungan secara konseptual dilakukan berdasarkan klaim atas banyak surat suara yang berbeda, pesan-pesan tersebut tidak bertukar pesan sebanyak itu karena setiap pesan merangkum sejumlah surat suara. Salah satu pesannya mempromosikan status banyak suara gabungan sekaligus, misalnya: “Saya menerima pemungutan suara mulai dari sebelum "

Apa arti istilah “siap” dan “berkomitmen”?

Sebuah node memberikan suara untuk melakukan pemungutan suara ketika ia yakin bahwa node lain tidak akan melakukan pemungutan suara dengan nilai yang berbeda. Meyakinkan inilah tujuan mempersiapkan aplikasi. Pemungutan suara yang berbunyi “Saya siap untuk melakukan pemungutan suara B” merupakan janji untuk tidak pernah melakukan pemungutan suara yang lebih kecil dari B, yaitu dengan hitungan yang lebih kecil (SCP mensyaratkan nilai dalam surat suara berada pada urutan tertentu. Oleh karena itu, buletin lebih sedikit , jika N1

Mengapa “Saya siap memberikan suara B” berarti “Saya berjanji tidak akan pernah memberikan suara yang lebih kecil dari B”? Karena SCP mendefinisikan batalkan sebagai kebalikan dari komit. Pemungutan suara untuk mempersiapkan surat suara juga melibatkan pemungutan suara untuk mendiskualifikasi beberapa surat suara lainnya, dan, seperti yang telah kita diskusikan sebelumnya, memberikan suara untuk satu hal adalah sebuah janji untuk tidak memberikan suara yang menentangnya.

Sebelum menyiarkan komit, sebuah node harus terlebih dahulu menemukan buletin yang dapat dikonfirmasikan sebagaimana telah disiapkan. Dengan kata lain, mereka melakukan pemungutan suara gabungan pada topik “Saya siap untuk memberikan suara B,” mungkin pada banyak surat suara yang berbeda, sampai mereka menemukan satu surat suara yang memenuhi kuorum.

Dari mana asal surat suara untuk mempersiapkan pemungutan suara? Pertama, node menyiarkan persiapan pemungutan suara <1,C>, dimana C adalah calon gabungan yang dihasilkan pada tahap nominasi. Namun, bahkan setelah persiapan pemungutan suara dimulai, pencalonan dapat mengakibatkan munculnya kandidat tambahan yang akan menjadi surat suara baru. Sementara itu, rekan-rekan dapat memiliki kandidat yang berbeda, dan mereka dapat membentuk set pemblokiran yang menerima "Saya siap untuk melakukan pemungutan suara B2," yang akan meyakinkan node untuk menerimanya juga. Yang terakhir, terdapat mekanisme timeout yang menghasilkan putaran baru pemungutan suara gabungan pada surat suara baru dengan jumlah penghitungan yang lebih tinggi jika surat suara yang ada saat ini terhenti.

Segera setelah node menemukan surat suara B yang dapat dikonfirmasi telah disiapkan, node tersebut menyiarkan pesan baru “Komit surat suara B.” Pemungutan suara ini memberi tahu rekan-rekannya bahwa node tidak akan pernah menyerah pada B. Faktanya, jika B adalah pemungutan suara , lalu “Melakukan pemungutan suara berarti persetujuan tanpa syarat untuk memilih kesiapan setiap surat suara ke <∞, s>. Nilai ekstra ini membantu rekan-rekan lain mengejar rekan penerapan jika mereka masih dalam tahap awal protokol.

Pada tahap ini, perlu ditekankan sekali lagi bahwa ini adalah protokol asynchronous. Hanya karena satu node mengirimkan suara positif untuk sebuah komit, bukan berarti node lain juga melakukan hal yang sama. Beberapa dari mereka mungkin masih memberikan suara pada pernyataan-pernyataan dalam persiapan pemungutan suara, yang lain mungkin sudah memahami maknanya. SCP menjelaskan bagaimana sebuah node harus memproses setiap jenis pesan rekan tanpa memandang fasenya.

Jika pesan "Saya telah mengumumkan komitmen » tidak dapat diterima atau dikonfirmasi, yaitu kemungkinan pesan diterima atau dikonfirmasi atau - atau, dalam hal apa pun, surat suara apa pun dengan nilai C, dan bukan yang lain, karena node telah berjanji untuk tidak pernah membatalkan . Pada saat sebuah node menyiarkan suara untuk sebuah komitmen, hasilnya akan menjadi C atau tidak sama sekali, bergantung pada sejauh mana konsensus berjalan. Namun, hal ini belum cukup bagi node untuk melakukan eksternalisasi C. Beberapa rekan Bizantium (yang jumlahnya kurang dari kuorum, berdasarkan asumsi keamanan kami) mungkin berbohong kepada node tersebut. Menerima dan kemudian mengonfirmasi beberapa surat suara (atau rentang surat suara) inilah yang memberikan kepercayaan diri pada node untuk akhirnya mengeksternalisasikan C.

Memahami Protokol Konsensus Stellar
Pemungutan suara SCP melalui pemungutan suara gabungan. Tidak ditampilkan: Pengatur waktu dapat berbunyi kapan saja, sehingga menambah jumlah penghitungan suara (dan mungkin menghasilkan gabungan kandidat tambahan yang dicalonkan).

Dan itu saja! Setelah jaringan mencapai konsensus, jaringan siap melakukannya lagi dan lagi. Di jaringan pembayaran Stellar, hal ini terjadi kira-kira setiap 5 detik sekali: suatu prestasi yang memerlukan keamanan dan kemampuan bertahan yang dijamin oleh SCP.

SCP dapat mencapai hal ini dengan mengandalkan beberapa putaran pemungutan suara gabungan. Pemungutan suara gabungan dimungkinkan oleh konsep irisan kuorum: sekumpulan rekan yang telah diputuskan untuk dipercaya oleh setiap node sebagai bagian dari kuorum (subyektif). Konfigurasi ini berarti bahwa konsensus dapat dicapai bahkan dalam jaringan dengan keanggotaan terbuka dan penipuan Bizantium.

Bacaan lebih lanjut

  • Kertas putih SCP asli dapat ditemukan di siniDan di sini rancangan spesifikasi pelaksanaannya.
  • Penulis asli protokol SCP, David Mazier, menjelaskannya dengan cara yang disederhanakan (namun tetap teknis). di sini.
  • Anda mungkin terkejut karena tidak menemukan istilah “penambangan” atau “bukti kerja” dalam artikel ini. SCP tidak menggunakan metode ini, tetapi beberapa algoritma konsensus lainnya menggunakan metode ini. Zane Witherspoon menulis dengan mudah ikhtisar algoritma konsensus.
  • Deskripsi langkah demi langkah jaringan sederhana yang mencapai konsensus dalam satu putaran penuh SCP.
  • Untuk pembaca yang tertarik dengan implementasi SCP: lihat kode C++, digunakan oleh jaringan pembayaran Stellar, atau Pergi kode, yang saya tulis untuk pemahaman yang lebih baik tentang SCP.

Sumber: www.habr.com

Tambah komentar