Sekarang kita akan melangkah lebih jauh tentang teknis distribusi konsensus. Apa yang dimaksud dengan konsensus? Konsensus secara umum berarti sebuah pengambilan keputusan orang banyak. Bisa juga tentang kesepakatan banyak orang yang berbeda tentang benar ataupun salah dalam sebuah hal.
Distribusi konsensus (Distributed consensus) disini adalah istilah dalam dunia komputer yang sering kita lihat berelasi dengan cryptocurrency. Banyak orang mengartikannya sebagai sebuah pemecahan masalah atas cara kerja Bitcoin dan juga inovasi-inovasinya.
Secara umum, beberapa grup yang terdiri dari perangkat komputer atau perangkat elektronik lain harus berada dalam sebuah kesepakatan atas sesuatu hal. Untuk bisa berjalan, akan ada sebuah unit kontrol yang berfungsi untuk menerima isi dari kesepakatan tersebut, dan kemudian mempublisnya kepada seluruh jaringan.
Distribusi konsensus berarti kesepakatan yang telah dicapai dari berbagai perangkat yang terhubung dalam jaringan (node). Atau bisa juga dikatakan sebagai kesepakatan yang telah dicapai dari sekelompok orang. Dimana masing-masing orang mempunyai perspektif sendiri dan berbeda dengan orang lain. Sedangkan dalam sebuah kelompook secara keseluruhan menghasilkan sebuah kesepakatan bersama.
Bagaimana cara untuk mendistribusikan konsensus pada banyak node dalam sebuah jaringan menjadi persoalan penting dalam dunia komputer. Karena dalam prakteknya akan selalu ada seseorang yang berusaha memanipulasi orang lainnya dalam jaringan tersebut. Distribusi konsensus telah memiliki banyak aplikasi. Dan telah dipelajari selama beberapa dekade dalam dunia komputer.
Coba kita bayangkan pada jejaring sosial seperti Facebook. Paling tidak facebook harus memililki cukup banyak server yang secara bersama-sama mendistribusikan database hasil perekaman aktifitas banyak pengguna dalam sistemnya. Setiap bagian informasi pengguna itu harus dicatat, kemudian node tersebut harus bisa disinkronkan dengan keadaan sistem secara keseluruhan.
Jika mempunyai protokol distribusi konsensus, akan menjadi pencapaian yang lebih jauh dari aplikasi tradisional sebelum-sebelumnya. Protokol distribusi konsensus tersebut bisa digunakan dalam membangun, mendistribusikan penyimpanan key bernilai besar. Kemudian memetakan key yang tidak valid atau hasil tindakan seorang perusak dalam sistem.
Sebagai contoh, misalkan kita ingin membangun sebuah sistem distribusi nama domain. Berupa pemetaan nama domain ke alamat IP. Selanjutnya, kita bisa membangun direktori public key untuk memetakan alamat email atau form identitas lain kedalam public key. Itulah mengapa diperlukan distribusi konsensus. Cukup membantu memberikan definisi secara teknis dalam menentukan apakah sebuah protokol tersebut memenuhi persyaratan atau tidak.
Protokol Distribusi Konsensus
Ada sejumlah n node yang masing-masingnya memiliki nilai input. Beberapa dari itu bisa berupa malicious node (node perusak). Oleh karena itu, protokol distribusi konsensus harus memiliki dua sifat berikut:
- Bisa mengeliminasi malicious node berdasarkan nilai kesepakatan dari node yang baik/jujur.
- Nilai kesepakatan tersebut merupakan hasil generate dari node yang jujur.
Pada konteks Bitcoin, perlu diingat bahwa Bitcoin menggunakan sistem jaringan peer-to-peer. Ketika Nita hendak membayar transaksi kepada Rudi, maka yang dilakukan Nita adalah dengan mempublis transaksinya tersebut kepada seluruh node dalam jaringan Bitcoin.
Sementara Rudi, tidak memerlukan menjalankan node saat Rudi menerima pembayaran Nita. Namun Rudi juga bisa menjalankan node jika Rudi menginginkannya untuk bisa mendapatkan notifikasi bahwa transaksi tersebut sudah dilakukan dan Rudi sudah menerima pembayaran tersebut. Selanjutnya, Bitcoin yang berasal dari pembayaran Nita itu akan menjadi miliknya, meskipun Rudi menjalankan node atau tidak dalam jaringan Bitcoin.
Konsensus seperti apa yang ingin dicapai oleh nodes dalam jaringan Bitcoin? Karena akan ada berbagai macam publis dari berbagai transaksi yang terjadi. Sementara, nodes tersebut harus bisa menyepakati pada setiap publis hasil transaksi yang terjadi berdasarkan urutan dan dimana transaksi itu terjadi. Pada Bitcoin, konsensus ini didasarkan pada blok per blok.
Sehingga, semua node dalam jaringan peer-to-peer memiliki ledger (buku besar) yang terdiri dari urutan blok. Masing-masing blok tersebut berisi daftar dari beberapa transaksi yang sudah dilakukan. Dan semua node tersebut juga telah menyepakati blok per blok tersebut.
Di lain sisi, setiap node juga mempunyai pool transaksi yang belum diselesaikan. Meskipun transaksi ini sudah didengar node lain, namun belum dimasukkan kedalam block chain. Dan untuk transaksi ini, masih belum ada konsensus. Hal ini terjadi karena jaringan peer-to-peer tidaklah sempurna. Beberapa node mungkin sudah mendengar transaksi, sebagian lagi mungkin masih belum mendengar publis transaksinya.
Lantas, bagaimana caranya nodes tersebut bisa mencapai konsensus pada sebuah blok? Untuk bisa melakukannya, katakanlah pada setiap skala waktu 10 menit, setiap node dalam sistem bisa menemukan transaksi yang belum terselesaikan ini untuk bisa dijadikan sebagai blok berikutnya. Selanjutnya, node tersebut menjalankan protokol konsensus. Dan input dari setiap node ini adalah blok yang diusulkan dan ditemukan sendiri.
Bagaimana jika beberapa node ternyata adalah malicious dan memasukkan transaksi yang tidak valid kedalam rancangan blok tersebut? Maka kita juga bisa mengasumsikan bahwa akan ada nodes lain yang jujur. Sehingga jika protokol konsensus berhasil dilakukan, maka blok yang valid akan menjadi outputnya. Meskipun blok itu direncanakan atau ditemukan hanya oleh seorang node saja. Selama blok tersebut adalah blok yang valid, maka akan menjadi output yang valid juga.
Pertanyaan lainnya, bagaimana jika ada transaksi yang belum terselesaikan dan belum dimasukkan dalam blockchain, namun tidak menjadi persoalan dalam jaringan? Hal itu bisa terjadi, dan meskipun belum dimasukkan dalam blok tertentu, maka bisa ditunggu untuk bisa dimasukkan dalam blok berikutnya. Tentunya, asalkan rancangan tersebut adalah blok yang valid.
Ada sejumlah masalah teknis yang mungkin akan terjadi. Pada dasarnya konsensus secara umum ini memang rumit. Misalnya jika ternyata terjadi crash atau kesengajaan karena ulah node perusak. Masalah teknis lain dalam konteks Bitcoin yang tidaklah sempurnya, masalah bisa terjadi karena adanya gangguan koneksi. Gangguan itu bisa menjadi kesalahan dalam jaringan saat menjalankan protokol konsensus. Sehingga tidak semua node bisa berpartisipasi dalam menjalankan protokol konsensus itu. Akhirnya, masalah-masalah tersebut bisa mengakibatkan adanya kondisi-kondisi yang mengendap, sedangkan konsensus harus didistribusikan seluruhnya ke internet.
Protokol Bitcoin harus bisa mencapai konsensus dan tahan atas dua jenis hambatan dalam jaringan. Ketidaksempurnaan dalam jaringan seperti kondisi mengendap itu dan crash node. Serta gangguan yang disengaja oleh node tertentu untuk menghambat proses. Satu konsekuensi yang timbul karena kondisi ini adalah karena tidak adanya penunjuk waktu secara global. Maksudnya, tidak semua node bisa menyepakati sebuah peristiwa tertentu berdasarkan cap waktunya. Sehingga protokol konsensus tidak bisa berisikan form instruksinya.
Impossibility results
Kekurangan cap waktu global ini membatasi set algoritma dalam protokol konsensus. Karena keterbatasan tersebut, banyak literatur yang membahas distribusi konsensus dengan sedikit pesimis, dan juga banyak membuahkan hasil kemustahilan (impossibility results). Salah satu contoh tentang hasil kemustahilan ini seperti pada Byzantine Generals Problem.
Byzantine yang mengacu pada Byzantine General Problem ini adalah sebuah permasalahan konsensus. Digambarkan dengan menggunakan kata Byzantine, yang seolah-olah tentara Byzantine hendak menyerang seluruh kota. Sementara Jenderal tentara Byzantine membuat sebuah formula rancangan serangan tersebut. Sedangkan, secara sederhana formula rencana itu harus memutuskan untuk menyerang, atau menyerah. Sementara Jenderal lain mungkin akan lebih memilih menyerang, dan yang lainnya lagi memilih untuk menyerah.
Harapan dari permasalahan Byzantine ini adalah agar Jenderal bisa menjalankan keputusan tanpa membuat Jenderal lainnya mengikuti rencana untuk menyerah. Dan ini menjadi mustahil bisa dilakukan jika satu atau dua Jenderal itu adalah seorang pengkhianat. Selanjutnya, ada sebuah protokol yang lebih baik, bernama Paxos. Protokol Paxos ini membuat beberapa kompromi. Dilain sisi, tidak pernah bisa mencapai hasil yang tidak konsisten. Sementara pada lain hal lagi, protokolnya menjadi terhambat dan gagal untuk membuat kemajuan.
Hal yang menggembirakan adalah, karena dalam kenyataannya, konsensus Bitcoin bisa berjalan melebihi teori konsensus yang ada. Konsensus Bitcoin memecahkan kebuntuan atas banyaknya asumsi tradisional sebelumnya. Konsensus Bitcoin bisa bekerja lebih baik, daripada secara teoritis saja. Dengan mengembangkan secara penuh sebuah teori dan kemudian menjabarkan mengapa bisa berjalan dengan baik. Pengembangan toritis itu menjadi penting untuk membantu dalam memprediksi adanya masalah tak terduga yang mungkin terjadi.
Bitcoin memiliki mekanisme alami untuk bisa mendorong penggunanya bertindak secara jujur. Jadi Bitcoin tidak hanya menyelesaikan masalah pendistribusian konsensus secara umum saja, tapi juga memecahkan masalah dalam konteks tertentu, yakni dalam sistem mata uang digital. Bitcoin juga mempunyai gagasan tentang keacakan. Algoritma konsensus Bitcoin cukup bergantung pada metode pengacakan. Selain itu ada starting point dan ending point dalam konsensus. Jika konsensus terjadi dalam waktu yang lama, katakanlah berjalan sekitar satu jam, di penghujung waktu itu nodes tetap tidak bisa memastikan bahwa blok tertentu akan bisa masuk kedalam ledger. Sehingga seiring berjalannya waktu, pandangan akan konsensus meningkat, sementara probabilitas pandangan akan menyimpang akan turun. Itulah mengapa Bitcoin bisa mendapat pemecahan hasil kemustahilan dalam protokol distribusi konsensusnya.