Tahapan Sistematis Pada Algoritma Konsensus
Sebelum saya jelaskan mengenai tahapan sistematis yang ada didalam algoritma konsensus, akan saya jelaskan terlebih dahulu mengenai detail dari sebuah transaksi. Dimana transaksi sendiri ialah object yang ada didalam Mekanisme Konsensus.
Sebuah transaksi yang masuk didalam jaringan (node) berisikan input dan output beserta hash dan script didalamnya. Input Transaksi meliputi : hash transaksi dari Output (UTXO) sebelumnya, index dari ouput yg digunakan sebagai referensi dan ScriptSig. Sedangkan pada Output, meliputi : nilai dari amount (jumlah yang akan dikirim) dan ScriptPubKey.
Pada ScriptSig ada 2 komponen utama, yakni public key dan signature. Public key harus sesuai dengan hash yang ada pada script output, dan public key juga digunakan untuk memverifikasi signature. Saat signature dikombinasikan dengan Public key (ScriptSig), hal ini untuk menyatakan bahwa orang tersebut mempunyai kontrol terhadap public key hash yang ada pada script output sebelumnya (menyatakan owner dari UTXO).
ScriptPubKey adalah script yang berisikan instruksi siapa saja yang bisa membuktikan / mempunyai kontrol private/public key yang terkait dengan hash public key yang ada didalam transaksi tersebut. Maka orang tersebut bisa menggunakan amount yang ada didalam output tersebut.
Jadi korelasinya ialah, untuk bisa menggunakan amount/nominal UTXO maka ScriptSig pada Input harus sesuai dengan hash dari ScriptPubKey yang ada pada Output (UTXO).
Contoh :
Si A akan mengirimkan 1 BTC kepada si B. Maka sebelum si A melakukan sebuah transaksi, si A harus mengetahui address (public key hash) dari si B. Pada saat si A sudah mengetahui Public key hash dari si B, maka si A akan membuat sebuah transaksi dengan struktur sebagai berikut :
- Input transaksi dari referensi output (UTXO).
- Output transaksi dengan nominal BTC beserta ScriptPubKey.
Maka saat si A mem-broadcast transaksi ini, jaringan blockchain akan mengkategorikan transaksi ini sebagai UTXO (Unspent Transaction Output) dan pada wallet si B akan ditunjukkan nominal saldo yang bisa digunakan sebagai referensi untuk Input selanjutnya. Dan saat si B akan mengirimkan BTC kepada orang lain, maka Input dari transaksi ini berupa referensi Output (UTXO) tadi.
Tahapan sistematis Proof of WorkSaat sebuah (hash) transaksi yang ada didalam jaringan dikenali oleh node-node miner. Maka Node miner akan menggunakan mekanisme hash function untuk bisa membuat sebuah block baru yang valid. Hash transaksi ini akan diinput kedalam sebuah block baru beserta dengan hash dari transaksi-transaksi lainnya. Akan tetapi untuk membuat sebuah block baru yang valid prosesnya tidak gampang, karena dibutuhkan adanya proses matematika yang rumit (hash function) supaya block ini bisa diverifikasi dan ditambahkan kedalam jaringan blockchain.
Didalam sebuah Block ada 2 elemen utama yang disebut dengan, Block header dan list transaksi. Pada block header ada 6 komponen : hash dari Block header sebelumnya, hash dari semua transaksi yang ada diblock sekarang, versi block, tingkat difficulty Block dan Nonce.
Untuk membuat sebuah block baru, miner harus mengumpulkan beberapa transaksi baru dan memasukkan hash dari block sebelumnya, lalu melakukan hash function pada block baru tersebut supaya didapatkan sebuah hash pada block baru tersebut. Untuk mendapatkan hash (block baru) yang sesuai, miner menggunakan banyak nonce (sesuai dengan algoritma yang berlaku) sebagai variabel yang digunakan pada hash function. Pada saat nonce yang digunakan berhasil untuk memecahkan permasalahan matematika rumit ini, maka hash yang muncul akan digunakan sebagai hash dari block baru tersebut.
Selanjutnya miner (pembuat hash block baru) akan membroadcast block baru ini pada jaringan. Node-node (miner) lainnya yang mengetahui block baru ini akan melakukan proses validasi. Proses validasi tidak membutuhkan waktu yang lama, karena proses validasi tidak serumit proses pemecahan persoalan matematika yang rumit pada hash function. Pada saat block baru mendapatkan validasi maka block baru ini akan didistribusikan kedalam blockchain sebagai block baru yang valid. Dan semua node yang ada didalam jaringan akan menyalin ulang jaringan blockchain dengan block baru tadi didalamnya. Sebagai hasil kerja dari Proof of work tadi, node (miner) yang membuat block baru tersebut akan menerima reward sesuai dengan ketentuan yang ada.
Semua transaksi yang ada didalam block baru tersebut akan mendapatkan konfirmasi (jumlah Block deep) sebesar 1, dan konfirmasi ini akan bertambah manakala block-block baru lainnya ditambahkan ke dalam blockchain. Jadi mengenai kapan masuknya sebuah transaksi pengiriman coin ke dalam wallet (UTXO) tergantung dengan ketentuan konfirmasi yang dibutuhkan pada blockchain yang bersangkutan.
Contoh (pelengkap) :
Si A mengirimkan 2 BTC kepada Si B, Si C melakukan pemindahan BTC dari exchanger ke wallet pribadinya, Si D mengirimkan beberapa BTC kepada 3 orang dan beribu-ribu transaksi lainnya akan terhubung didalam jaringan P2P dengan status belum dikonfirmasi. Miner X yang terhubung dalam jaringan, akan memproses/membuat sebuah block yang berisikan banyak (unconfirmed) transaksi didalamnya. Pada waktu bersamaan, miner-miner lainnya juga akan melakukan hal yang sama seperti yang X lakukan.
Miner X akan mulai mengumpulkan beberapa data (string) yang dibutuhkan dalam memproses sebuah block baru. Pada saat si X mengumpulkan semua string dan memproses sebuah hash merkle root, maka si X akan mulai membuat sebuah Block header dengan melakukan proses hash function. Disisi lain saat ada transaksi-transaksi baru yang masuk pada node, maka transaksi ini akan tersimpan pada sebuah memory pool (transactions Pool). Memory Pool ibaratnya seperti tempat pemberhentian transaksi dimana menunggu proses untuk dimasukkan ke dalam sebuah Block.
Pada proses Hash function setiap nonce berbeda digunakan sebagai variabel masukkan, maka akan menghasilkan nilai hash yang berbeda pula. Proses ini akan dilakukan berulang-ulang sampai ketemu sebuah nonce yang dapat menghasilkan hash yang sesuai dengan Block Target (256-Bit). Setelah itu Miner X akan mem-broadcast block baru ini kedalam jaringan P2P dengan komposisi block sebagai berikut :
- Magic No (0xD9B4BEF9)
- Ukuran Block
- Jumlah transaksi (contoh : 2000 transaksi)
- List dari transaksi (berdasarkan nilai fee transaksi dengan coinbase transaction diurutan pertama)
- Block Header
- Versi Block
- Hash Block sebelumnya
- Hash Merkle root (Hash dari semua (hash) transaksi)
- Timestamp (waktu block masuk ke dalam jaringan blockchain)
- Bits (block target berdasarkan difficulty)
- Nonce (angka/nilai yang digunakan pada hash Block)
Node-node (miner) lainnya akan melakukan validasi terhadap block yang diselesaikan oleh Miner X ini. Pada proses validasi ini hasilnya simpel, yakni accept atau reject (berdasarkan
Protocol Rules). Saat Block baru ini mendapatkan persetujuan validasi, maka block ini akan didistribusikan ke dalam jaringan blockchain dan dinyatakan sebagai block baru yang valid. Dan untuk block-block lain dari miner yang tidak mendapatkan validasi, maka akan menjadi orphaned block (tidak terhubung dengan jaringan utama blockchain) atau menjadi block disamping rantai blockchain (terhubung dengan genesis block).
Miner X akan menerima reward dari proses pembuatan block ini. Dan saat block baru ini ditambahkan ke jaringan utama Blockchain, transaksi yang ada didalamnya akan mendapatkan status konfirmasi 1 Block.
Note :
-
Hash Function adalah Pemetaan sistem matematis dalam mengolah suatu string (tipe data) dengan ukuran tidak tentu, sehingga bisa dihasilkan sebuah string dengan ukuran tetap sebagai nilai hash.
-
Hash adalah Tipe data (string) dengan ukuran tetap yang mewakili bentuk String aslinya/asalnya.
-
Nonce adalah angka/nilai random yang digunakan sebagai variabel didalam hash function.
-
Node adalah perangkat/peranti yang terhubung didalam sebuah jaringan.
-
Node miner adalah perangkat/peranti mining yang terhubung didalam sebuah jaringan.
Tahapan sistematis Proof of StakeSeperti proses pada konsensus PoW, pada saat ribuan transaksi baru masuk ke dalam jaringan memory/transaction pool. Node-node aktif akan berlomba-lomba untuk bisa menjadi sebuah node yang mampu untuk memproses sebuah block yang valid. Masing-masing node akan membuat sebuah coinstake transaction (seperti coinbase transaction didalam PoW), dan membuat sebuah kernel yang disebut dengan coinstake kernel. Untuk dapat memproses block yang valid hash dari coinstake kernel harus sama atau kurang dari hash target.
Penentuan hash target tergantung dari protokol yang Berlaku. Misal pada NXT, Target ditentukan dari T = Tb * S * Be
T = Target Value
Tb = Base target value
S = Time since the last block
Be = Effective balance (jumlah coin staking)
Semakin banyak jumlah coin yang distaking maka nilai dari target juga akan semakin besar, maka peluang untuk membuat sebuah hash kernel yang valid juga semakin tinggi.
Sedangkan pada 42 Coin. Target ditentukan dari nBlocktarget = CoinDayWeight * nNetworkTarget
Karena basic dari CoinDayWeigth sama dengan coin age dimana semakin lama umur staking coin dan semakin besar kuantitas coin/token yang distaking maka nilai dari coin age / CoinDayWeight akan semakin besar. Sehingga peluang untuk mendapatkan hash yang valid juga semakin besar.
Pada saat seorang forger terpilih, maka block yang dia minting akan didistribusikan kedalam jaringan Blockchain. Dan dia akan mendapatkan reward dari proses minting tersebut. Dan setelah itu balance staking coinnya akan masuk ke fase stasioner lagi dimana untuk ketentuan hal ini tergantung dari protokol yang berlaku dari masing-masing konsensus PoS (N Block atau N Day).
Contoh (Pelengkap) :
Saat beragam transaksi baru masuk kedalam jaringan P2P, transaksi ini akan berstatuskan sebagai unconfirmed transaction dan dibutuhkan sebuah block valid agar supaya transaksi yang ada didalamnya bisa menjadi sebuah transaksi yang valid juga. Karena didalam block sebelumnya ada hash yg berhubungan dengan signatures dari node-node aktif yang berpartisipasi dalam proses minting, maka node aktif (staking) yang memenuhi kriteria sebagai kandidat validator akan memulai proses pembuatan sebuah block.
Seperti pada proses PoW, node-node (minting) aktif akan mulai menyusun sebuah list transaksi didalam transaction (memory) pool dan akan memproses sebuah staking transaction (dari UTXO) dan sebuah hash kernel (struktur virtual yang tersimpan pada database dan memory masing-masing node) dengan komposisi sebagai berikut :
- StakeModifier (Hash dari prevout dan StakeModifier dari block sebelumnya sehingga dihasilkan sebuah nilai acak untuk digunakan pada block selanjutnya)
- TxPrevTime (Timestamp dari UTXO digunakan sebagai input pada staking transaction)
- TimeBlockFrom (Timestamp dari Block UTXO)
- TimeTx (Timestamp hash kernel)
- PrevoutNum (UTXO yg direferensikan pada input staking transaction)
- TxPrevOffset (Hash dari offset UTXO)
Secara garis besar pada saat Staking transaction dan hash kernel selesai diproses, jika hash kernel tersebut valid dan sesuai dengan hash target. Maka sebuah node (minting) akan memulai proses penyusunan sebuah block dan memasukkan beberapa transaksi yang diambil dari memory pool ke dalam block tersebut. Akan tetapi jika hash kernel tidak valid dan tidak sesuai dengan ketentuan hash target, maka proses pembuatan staking transaction dan hash kernel akan diulang dari awal.
Pada saat block selesai diproses dan diberi signature oleh node (forger), selanjutnya block tersebut akan dibroadcast pada jaringan P2P. Node-node lainnya akan melakukan validasi, dan jika ditemukan block lain yang serupa maka diantara block tersebut akan dipilih mana yang mempunyai nilai cumulative difficulty paling tinggi (tergantung protokol), dan untuk block yang diterima akan masuk ke dalam rantai blockchain. Dan untuk forger yang membuat block tersebut akan menerima reward sesuai dengan ketentuan yang berlaku dari masing-masing Protokol.
Tahapan sistematis Delegated Proof of StakeSeperti konsensus PoW dan PoS, jaringan yang digunakan pada DPoS adalah jaringan peer to peer (P2P) dengan beberapa elemen penting seperti : block, transaksi, sistem propagasi, dan node. Semua transaksi yang belum mendapatkan validasi (unconfirmed transaksi) akan masuk kedalam jaringan transaction/memory pool, dimana yang nantinya akan dimasukan dalam sebuah block oleh node delegate sebanyak "N" transaksi (sesuai ketentuan protocol). Sedangkan untuk node-node yang ada didalam jaringan P2P terbagi dari node umum (wallet), node aktif (stake holder), node aktif (witness) dan node aktif (delegate) yang terpilih sebagai pembuat sekaligus validator block.
Untuk menjadi node witness, sebuah node harus memenuhi ketentuan dari protocol yg berlaku dan melakukan registrasi ke jaringan terlebih dahulu. Selanjutnya node-node witness ini nantinya akan mendapatkan voting dari berbagai node stakeholder (wallet aktif yang mempunyai balance didalamnya), dimana masing-masing vote mempunyai nilai berdasarkan dengan jumlah balance yang dimiliki oleh masing-masing node stakeholder. Dalam melakukan voting, node stakeholder dapat memberikan vote kepada berbagai node witness dengan ketentuan 1 vote = 1 witness. Untuk "N" witness tertinggi akan terpilih menjadi node delegate, yang masing-masing node mempunyai hak untuk membuat sebuah blok dengan urutan sesuai peringkat (vote) yang dimiliki dalam 1 periode pemrosesan "N" blocks.
Setelah block selesai diproduksi, maka block dapat didistribusikan ke jaringan blockchain dengan syarat node delegate selaku pembuat block tersebut, mempunyai broadhash yang sama dengan broadhash yang dimiliki oleh "N" node yg dipilih secara random. Broadhash sendiri adalah hash dari gabungan "N" block terakhir (sesuai dengan ketentuan protokol).
Contoh (pelengkap) :
Si A mempunyai balance (Utxo) sebesar 200 coin yg didapatkan dari si C. Lalu si A mengirimkan 100 coin ke si B menggunakan UTXO tersebut. Pada saat si A menekan tombol send maka transaksi ini akan masuk ke jaringan propagasi, dan setelah semua node mengenali transaksi dari si A ini, selanjutnya transaksi tersebut akan masuk ke jaringan transaction/memory pool beserta dengan transaksi-transaksi baru lainnya dengan status Unconfirmed transaction.
Pada saat yang sama, node-node aktif (stakeholder) akan melakukan vote untuk menentukan "N" witness teratas sebagai Node (delegate) terpilih yang akan bertugas untuk memproduksi sebuah block berdasarkan peringkat yang didapat dari vote. Diketahui Node X adalah node delegate dengan urutan paling atas, maka si X akan memulai memproses sebuah block header dengan komponen-komponen sebagai berikut : Version, timestamp, jumlah transaksi yang diambil dari memory pool, previous block id / block hash, payload hash, payload size, amount, delegate pub key (masing-masing altcoin mempunyai protocol yang belum tentu sama).
Setelah elemen yang dibutuhkan pada block header terkumpul, maka si X akan melakukan hashing pada block header tersebut sehingga didapatkan sebuah hash yang akan digunakan sebagai signature. Selanjutnya signature ini akan digabungkan dengan block header kembali dan akan dilakukan hashing untuk didapatkan sebuah block hash (32 bytes) atau sebuah block ID (8 bytes reversed). Pada saat block tersebut selesai dibuat, maka block tersebut akan didistribusikan ke jaringan blockchain dan node X akan menerima reward dari hasil kerjanya. Setelah itu node delegate peringkat ke-2 akan memproses block selanjutnya, sebagaimana yang telah dilakukan oleh node X sebelumnya. Proses pembuatan block-block ini akan terus berjalan sampai "N" witness terpilih (node delegate) selesai memproses keseluruhan block didalam 1 periode.
Sebenarnya sebelum node X memproses sebuah block, ada satu konsensus lagi yang harus dicapai supaya si X dapat melaksanakan tugasnya. Konsensus ini dikenal dengan sebutan Broadhash Consensus.
Broadhash adalah hash dari gabungan 5 block terakhir yg ada didalam jaringan blockchain. Dengan asumsi node-node yang mempunyai record block height sama pada jaringan P2P tersebut, maka bisa dipastikan node-node tersebut juga mempunyai broadhash yang sama. Pada broadhash consensus akan dipilih secara acak sebanyak "N" node sebagai syarat broadhash consensus dijalankan dan pada saat 51% dari node terpilih ini mempunyai broadhash yg sama dengan milik si node X berarti broadhash consensus sudah tercapai. Selanjutnya Node X akan memulai untuk memproses sebuah block seperti yg telah dijelaskan diatas.
Ref : https://lisk.io/documentation
Note : Tahapan sistematis DPoS ini sebagian besar mengacu pada data-data yang didapatkan dari referensi https://lisk.io/documentation. Untuk cryptocurrencies (DPoS) lainnya belum tentu mempunyai protocol dan sistem kerja yang sama. Secara umum, tahapan sistematis diatas bisa dijadikan gambaran kasar bagaimana sistem DPoS itu berjalan.
references :
https://en.bitcoin.it/wiki/Transaction ;
https://en.bitcoin.it/wiki/Confirmationhttps://en.bitcoin.it/wiki/Block_hashing_algorithm ;
https://en.bitcoin.it/wiki/Mininghttps://en.wikipedia.org/wiki/Hash_function ;
https://en.bitcoin.it/wiki/Blockhttps://en.bitcoin.it/wiki/Protocol_rules ;
https://en.bitcoinwiki.org/wiki/42-coinhttps://github.com/theochan62/Blockchain/blob/master/NxtWhitepaper_v122_rev4.pdf