
Bitcoin: Sebuah Sistem Uang Elektronik Peer-to-Peer
Versi uang elektronik murni peer-to-peer akan memungkinkan pembayaran online dikirim langsung dari satu pihak ke pihak lain tanpa melalui lembaga keuangan. Tanda tangan digital memberikan sebagian dari solusi, tetapi manfaat utama hilang jika pihak ketiga yang tepercaya masih diperlukan untuk mencegah pengeluaran ganda. Kami mengusulkan solusi untuk masalah pengeluaran ganda menggunakan jaringan peer-to-peer. Jaringan menandai waktu transaksi dengan menghashnya ke dalam rantai berkelanjutan dari proof-of-work berbasis hash, membentuk catatan yang tidak dapat diubah tanpa mengulang proof-of-work. Rantai terpanjang tidak hanya berfungsi sebagai bukti urutan peristiwa yang disaksikan, tetapi juga bukti bahwa itu berasal dari kumpulan daya CPU terbesar. Selama mayoritas daya CPU dikendalikan oleh node yang tidak bekerja sama untuk menyerang jaringan, mereka akan menghasilkan rantai terpanjang dan mengungguli penyerang. Jaringan itu sendiri memerlukan struktur minimal. Pesan disiarkan berdasarkan usaha terbaik, dan node dapat meninggalkan dan bergabung kembali dengan jaringan kapan pun mereka mau, menerima rantai proof-of-work terpanjang sebagai bukti apa yang terjadi selama mereka pergi.
1. Pendahuluan Perdagangan di Internet telah sangat bergantung pada lembaga keuangan yang bertindak sebagai pihak ketiga yang tepercaya untuk memproses pembayaran elektronik. Meskipun sistem ini cukup baik untuk sebagian besar transaksi, ia masih menderita dari kelemahan inheren dari model berbasis kepercayaan. Transaksi yang sepenuhnya tidak dapat dibalik tidak benar-benar mungkin, karena lembaga keuangan tidak dapat menghindari mediasi sengketa. Biaya mediasi meningkatkan biaya transaksi, membatasi ukuran transaksi praktis minimum dan memutus kemungkinan transaksi kecil yang kasual, dan ada biaya yang lebih luas dalam kehilangan kemampuan untuk melakukan pembayaran yang tidak dapat dibalik untuk layanan yang tidak dapat dibalik. Dengan kemungkinan pembalikan, kebutuhan akan kepercayaan menyebar. Pedagang harus waspada terhadap pelanggan mereka, memaksa mereka untuk memberikan lebih banyak informasi daripada yang seharusnya mereka butuhkan. Persentase tertentu dari penipuan diterima sebagai tidak terhindarkan. Biaya-biaya ini dan ketidakpastian pembayaran dapat dihindari secara langsung dengan menggunakan mata uang fisik, tetapi tidak ada mekanisme untuk melakukan pembayaran melalui saluran komunikasi tanpa pihak ketiga yang tepercaya. Yang dibutuhkan adalah sistem pembayaran elektronik yang berdasarkan bukti kriptografi alih-alih kepercayaan, memungkinkan dua pihak yang bersedia untuk melakukan transaksi langsung satu sama lain tanpa perlu pihak ketiga yang tepercaya. Transaksi yang secara komputasi tidak praktis untuk dibalik akan melindungi penjual dari penipuan, dan mekanisme escrow rutin dapat dengan mudah diterapkan untuk melindungi pembeli. Dalam makalah ini, kami mengusulkan solusi untuk masalah pengeluaran ganda menggunakan server timestamp terdistribusi peer-to-peer untuk menghasilkan bukti komputasi dari urutan kronologis transaksi. Sistem ini aman selama node yang jujur secara kolektif mengendalikan lebih banyak daya CPU daripada kelompok node penyerang yang bekerja sama.
2. Verifikasi Transaksi Kami mendefinisikan koin elektronik sebagai rantai tanda tangan digital. Setiap pemilik mentransfer koin ke yang berikutnya dengan menandatangani secara digital hash dari transaksi sebelumnya dan kunci publik pemilik berikutnya dan menambahkannya ke akhir koin. Penerima dapat memverifikasi tanda tangan untuk memverifikasi rantai kepemilikan. Transaksi Verifikasi Kunci Publik Pemilik 1 Hash Tanda Tangan Pemilik 0 Kunci Privat Pemilik 1 Transaksi Kunci Publik Pemilik 2 Hash Tanda Tangan Pemilik 1 Kunci Privat Pemilik 2 Transaksi Kunci Publik Pemilik 3 Hash Tanda Tangan Pemilik 2 Kunci Privat Pemilik 3 Masalahnya tentu saja adalah penerima tidak dapat memverifikasi bahwa salah satu pemilik tidak melakukan pengeluaran ganda koin tersebut. Solusi umum adalah memperkenalkan otoritas pusat yang terpercaya, atau mint, yang memeriksa setiap transaksi untuk pengeluaran ganda. Setelah setiap transaksi, koin harus dikembalikan ke mint untuk menerbitkan koin baru, dan hanya koin yang diterbitkan langsung dari mint yang dipercaya tidak akan dilakukan pengeluaran ganda. Masalah dengan solusi ini adalah nasib seluruh sistem uang tergantung pada perusahaan yang menjalankan mint, dengan setiap transaksi harus melalui mereka, sama seperti bank. Kami perlu cara bagi penerima untuk mengetahui bahwa pemilik sebelumnya tidak menandatangani transaksi sebelumnya. Untuk tujuan kami, transaksi yang paling awal adalah yang dihitung, jadi kami tidak peduli tentang upaya selanjutnya untuk melakukan pengeluaran ganda. Satu-satunya cara untuk mengonfirmasi tidak adanya transaksi adalah dengan menyadari semua transaksi. Dalam model berbasis mint, mint menyadari semua transaksi dan memutuskan mana yang datang lebih dulu. Untuk mencapai ini tanpa pihak yang terpercaya, transaksi harus diumumkan secara publik [1], dan kami memerlukan sistem bagi peserta untuk setuju pada satu sejarah urutan di mana mereka diterima. Penerima membutuhkan bukti bahwa pada saat setiap transaksi, mayoritas node setuju bahwa itu adalah yang pertama diterima.
3. Server Timestamp Solusi yang kami usulkan dimulai dengan server timestamp. Server timestamp bekerja dengan mengambil hash dari blok item yang akan diberi timestamp dan secara luas menerbitkan hash tersebut, seperti di surat kabar atau pos Usenet [2-5]. Timestamp membuktikan bahwa data harus ada pada saat itu, sudah tentu, untuk masuk ke dalam hash. Setiap timestamp menyertakan timestamp sebelumnya dalam hash-nya, membentuk rantai, dengan setiap timestamp tambahan memperkuat yang sebelumnya. Hash Hash Blok Item Item Blok ... Item Item ...
4. Proof-of-Work Untuk menerapkan server timestamp terdistribusi secara peer-to-peer, kami perlu menggunakan sistem proof-of-work yang mirip dengan Hashcash Adam Back [6], daripada pos surat kabar atau Usenet. Proof-of-work melibatkan pemindaian untuk nilai yang ketika di-hash, seperti dengan SHA-256, hash tersebut dimulai dengan sejumlah bit nol. Pekerjaan rata-rata yang diperlukan bersifat eksponensial dalam jumlah bit nol yang diperlukan dan dapat diverifikasi dengan mengeksekusi satu hash. Untuk jaringan timestamp kami, kami menerapkan proof-of-work dengan meningkatkan nonce di blok sampai nilai ditemukan yang memberi hash blok bit nol yang diperlukan. Setelah usaha CPU dikeluarkan untuk membuatnya memenuhi proof-of-work, blok tidak dapat diubah tanpa mengulang pekerjaan tersebut. Ketika blok-blok berikutnya dirantai setelahnya, usaha untuk mengubah blok tersebut akan mencakup mengulang semua blok setelahnya. Blok Hash Sebelumnya Tx Blok Nonce Tx ... Hash Sebelumnya Nonce Tx Tx ... Proof-of-work juga menyelesaikan masalah menentukan representasi dalam pengambilan keputusan mayoritas. Jika mayoritas didasarkan pada satu-alamat-IP-satu-suara, itu dapat disubversikan oleh siapa pun yang mampu mengalokasikan banyak IP. Proof-of-work pada dasarnya adalah satu-CPU-satu-suara. Keputusan mayoritas diwakili oleh rantai terpanjang, yang memiliki usaha proof-of-work terbesar yang diinvestasikan di dalamnya. Jika mayoritas daya CPU dikendalikan oleh node yang jujur, rantai yang jujur akan tumbuh paling cepat dan mengungguli semua rantai pesaing. Untuk memodifikasi blok yang lalu, seorang penyerang harus mengulang proof-of-work blok tersebut dan semua blok setelahnya dan kemudian mengejar dan melampaui usaha node yang jujur. Kami akan menunjukkan nanti bahwa probabilitas seorang penyerang yang lebih lambat untuk mengejar menurun secara eksponensial seiring dengan bertambahnya blok yang berikutnya. Untuk mengimbangi peningkatan kecepatan perangkat keras dan minat yang bervariasi dalam menjalankan node dari waktu ke waktu, tingkat kesulitan proof-of-work ditentukan oleh rata-rata bergerak yang menargetkan rata-rata jumlah blok per jam. Jika mereka dihasilkan terlalu cepat, tingkat kesulitannya meningkat.
5. Jaringan Langkah-langkah untuk menjalankan jaringan adalah sebagai berikut: 1) Transaksi baru disiarkan ke semua node. 2) Setiap node mengumpulkan transaksi baru ke dalam sebuah blok. 3) Setiap node bekerja untuk menemukan proof-of-work yang sulit untuk bloknya. 4) Ketika sebuah node menemukan proof-of-work, ia menyiarkan blok tersebut ke semua node. 5) Node menerima blok hanya jika semua transaksi di dalamnya valid dan belum dibelanjakan. 6) Node menyatakan penerimaan mereka terhadap blok dengan bekerja untuk membuat blok berikutnya dalam rantai, dengan menggunakan hash dari blok yang diterima sebagai hash sebelumnya. Node selalu menganggap rantai terpanjang sebagai yang benar dan akan terus bekerja untuk memperpanjangnya. Jika dua node menyiarkan versi berbeda dari blok berikutnya secara bersamaan, beberapa node mungkin menerima satu atau yang lain terlebih dahulu. Dalam hal ini, mereka bekerja pada yang pertama yang mereka terima, tetapi menyimpan cabang lainnya jika menjadi lebih panjang. Ikatan akan diputuskan ketika proof-of-work berikutnya ditemukan dan satu cabang menjadi lebih panjang; node yang bekerja pada cabang lainnya akan beralih ke yang lebih panjang.
Siaran transaksi baru tidak perlu mencapai semua node. Selama mereka mencapai banyak node, mereka akan masuk ke dalam blok sebelum lama. Siaran blok juga toleran terhadap pesan yang hilang. Jika sebuah node tidak menerima sebuah blok, ia akan meminta blok tersebut ketika ia menerima blok berikutnya dan menyadari bahwa ia telah melewatkannya.
6. Insentif Menurut konvensi, transaksi pertama dalam sebuah blok adalah transaksi khusus yang memulai koin baru yang dimiliki oleh pencipta blok. Ini menambah insentif bagi node untuk mendukung jaringan, dan menyediakan cara untuk mendistribusikan koin ke dalam sirkulasi pada awalnya, karena tidak ada otoritas pusat untuk menerbitkannya. Penambahan konstan sejumlah koin baru mirip dengan penambang emas yang mengeluarkan sumber daya untuk menambah emas ke sirkulasi. Dalam kasus kami, ini adalah waktu CPU dan listrik yang dikeluarkan. Insentif juga dapat didanai dengan biaya transaksi. Jika nilai output dari sebuah transaksi kurang dari nilai inputnya, selisihnya adalah biaya transaksi yang ditambahkan ke nilai insentif dari blok yang mengandung transaksi. Setelah jumlah koin yang ditentukan telah masuk ke sirkulasi, insentif dapat sepenuhnya beralih ke biaya transaksi dan sepenuhnya bebas inflasi. Insentif dapat membantu mendorong node untuk tetap jujur. Jika seorang penyerang yang serakah mampu mengumpulkan lebih banyak daya CPU daripada semua node yang jujur, dia harus memilih antara menggunakannya untuk menipu orang dengan mencuri kembali pembayaran, atau menggunakannya untuk menghasilkan koin baru. Dia seharusnya menemukan bahwa lebih menguntungkan untuk bermain sesuai aturan, aturan yang menguntungkannya dengan lebih banyak koin baru daripada semua orang lain digabungkan, daripada merusak sistem dan validitas kekayaannya sendiri.
7. Mengambil Kembali Ruang Disk Setelah transaksi terbaru dalam koin terpendam di bawah cukup banyak blok, transaksi yang dibelanjakan sebelumnya dapat dibuang untuk menghemat ruang disk. Untuk memfasilitasi ini tanpa merusak hash blok, transaksi di-hash dalam Pohon Merkle [7][2][5], dengan hanya akar yang disertakan dalam hash blok. Blok Blok Header (Hash Blok) Hash Sebelumnya Nonce Hash Akar Hash01 Hash0 Hash1 Hash23 Hash2 Tx0 Tx1 Tx2 Hash3 Tx3 Transaksi Di-hash dalam Pohon Merkle Blok Blok Header (Hash Blok) Hash Sebelumnya Nonce Hash Akar Hash01 Hash23 Hash2 Hash3 Tx3 Setelah Pemangkasan Tx0-2 dari Blok Header blok tanpa transaksi sekitar 80 byte. Jika kita mengasumsikan blok dihasilkan setiap 10 menit, 80 byte * 6 * 24 * 365 = 4.2MB per tahun. Dengan sistem komputer yang biasanya terjual dengan RAM 2GB per 2008, dan Hukum Moore memprediksi pertumbuhan saat ini sebesar 1.2GB per tahun, penyimpanan seharusnya tidak menjadi masalah bahkan jika header blok harus disimpan dalam memori.
8. Verifikasi Pembayaran yang Disederhanakan Adalah mungkin untuk memverifikasi pembayaran tanpa menjalankan node jaringan penuh. Seorang pengguna hanya perlu menyimpan salinan header blok dari rantai proof-of-work terpanjang, yang dapat diperoleh dengan menanyakan node jaringan sampai dia yakin memiliki rantai terpanjang, dan mendapatkan cabang Merkle yang menghubungkan transaksi dengan blok tempatnya diberi timestamp. Dia tidak bisa memeriksa transaksi untuk dirinya sendiri, tetapi dengan menghubungkannya ke tempat dalam rantai, dia bisa melihat bahwa node jaringan telah menerimanya, dan blok yang ditambahkan setelahnya lebih lanjut mengonfirmasi bahwa jaringan telah menerimanya. Rantai Proof-of-Work Terpanjang Header Blok Hash Sebelumnya Nonce Akar Merkle Header Blok Hash Sebelumnya Akar Merkle Hash01 Hash2 Header Blok Nonce Hash Sebelumnya Nonce Akar Merkle Hash23 Cabang Merkle untuk Tx3 Hash3 Tx3 Dengan demikian, verifikasi ini dapat diandalkan selama node yang jujur mengendalikan jaringan, tetapi lebih rentan jika jaringan dikuasai oleh penyerang. Meskipun node jaringan dapat memverifikasi transaksi untuk diri mereka sendiri, metode yang disederhanakan dapat ditipu oleh transaksi palsu penyerang selama penyerang dapat terus menguasai jaringan. Salah satu strategi untuk melindungi diri dari ini adalah dengan menerima peringatan dari node jaringan ketika mereka mendeteksi blok yang tidak valid, mendorong perangkat lunak pengguna untuk mengunduh blok penuh dan transaksi yang diperingatkan untuk mengonfirmasi inkonsistensi. Bisnis yang menerima pembayaran secara rutin mungkin masih ingin menjalankan node mereka sendiri untuk keamanan yang lebih independen dan verifikasi yang lebih cepat.
9. Menggabungkan dan Memisahkan Nilai Meskipun mungkin untuk menangani koin secara individual, akan sulit untuk membuat transaksi terpisah untuk setiap sen dalam transfer. Untuk memungkinkan nilai dibagi dan digabungkan, transaksi mengandung beberapa input dan output. Biasanya akan ada baik satu input dari transaksi sebelumnya yang lebih besar atau beberapa input yang menggabungkan jumlah yang lebih kecil, dan paling banyak dua output: satu untuk pembayaran, dan satu mengembalikan kembalian, jika ada, kembali kepada pengirim. Transaksi Masuk Masuk Keluar ... ... Perlu dicatat bahwa fan-out, di mana sebuah transaksi tergantung pada beberapa transaksi, dan transaksi-transaksi tersebut tergantung pada banyak lagi, bukanlah masalah di sini. Tidak pernah ada kebutuhan untuk mengekstrak salinan mandiri lengkap dari riwayat transaksi.
10. Privasi Model perbankan tradisional mencapai tingkat privasi dengan membatasi akses informasi hanya kepada pihak-pihak yang terlibat dan pihak ketiga yang tepercaya. Kebutuhan untuk mengumumkan semua transaksi secara publik mencegah metode ini, tetapi privasi masih dapat dipertahankan dengan memutus aliran informasi di tempat lain: dengan menjaga kunci publik tetap anonim. Publik dapat melihat bahwa seseorang mengirimkan sejumlah uang kepada orang lain, tetapi tanpa informasi yang menghubungkan transaksi dengan siapa pun. Ini mirip dengan tingkat informasi yang dirilis oleh bursa saham, di mana waktu dan ukuran perdagangan individu, "pita", diumumkan secara publik, tetapi tanpa memberitahu siapa pihak-pihak tersebut. Model Privasi Tradisional Identitas Model Privasi Baru Identitas Transaksi Pihak Ketiga yang Dipercaya Transaksi Pihak Kontra Publik Sebagai tambahan firewall, pasangan kunci baru harus digunakan untuk setiap transaksi agar tidak dapat dihubungkan dengan pemilik yang sama. Beberapa penghubungan masih tidak dapat dihindari dengan transaksi multi-input, yang secara alami mengungkapkan bahwa input mereka dimiliki oleh pemilik yang sama. Risikonya adalah jika pemilik kunci terungkap, penghubungan dapat mengungkapkan transaksi lain yang dimiliki oleh pemilik yang sama.
11. Perhitungan Kami mempertimbangkan skenario seorang penyerang yang mencoba menghasilkan rantai alternatif lebih cepat dari rantai yang jujur. Bahkan jika ini berhasil, itu tidak membuka sistem untuk perubahan sembarangan, seperti menciptakan nilai dari udara kosong atau mengambil uang yang tidak pernah menjadi milik penyerang. Node tidak akan menerima transaksi yang tidak valid sebagai pembayaran, dan node yang jujur tidak akan pernah menerima blok yang mengandungnya. Seorang penyerang hanya dapat mencoba mengubah salah satu transaksinya sendiri untuk mengambil kembali uang yang baru saja dia belanjakan. Perlombaan antara rantai yang jujur dan rantai penyerang dapat dicirikan sebagai Binomial Random Walk. Peristiwa sukses adalah rantai yang jujur diperpanjang dengan satu blok, meningkatkan keunggulannya sebesar +1, dan peristiwa gagal adalah rantai penyerang diperpanjang dengan satu blok, mengurangi jarak sebesar -1. Probabilitas penyerang mengejar dari defisit tertentu mirip dengan masalah Kebangkrutan Pemain. Anggaplah seorang penjudi dengan kredit tidak terbatas memulai pada defisit dan memainkan sejumlah percobaan yang mungkin tak terbatas untuk mencoba mencapai titik impas. Kami dapat menghitung probabilitas dia pernah mencapai titik impas, atau bahwa penyerang pernah mengejar rantai yang jujur, sebagai berikut [8]: p = probabilitas node jujur menemukan blok berikutnya q = probabilitas penyerang menemukan blok berikutnya qz = probabilitas penyerang akan pernah mengejar dari z blok di belakang qz = { 1 jika p≤q (q/p)z jika p>q }
Mengingat asumsi kami bahwa p > q, probabilitas menurun secara eksponensial seiring dengan meningkatnya jumlah blok yang harus dikejar penyerang. Dengan peluang melawannya, jika dia tidak melakukan lompatan beruntung lebih awal, kemungkinannya menjadi sangat kecil seiring dia tertinggal lebih jauh. Kami sekarang mempertimbangkan berapa lama penerima transaksi baru perlu menunggu sebelum merasa cukup yakin bahwa pengirim tidak dapat mengubah transaksi. Kami mengasumsikan pengirim adalah penyerang yang ingin membuat penerima percaya bahwa dia membayarnya untuk sementara waktu, lalu beralih untuk membayar kembali dirinya sendiri setelah beberapa waktu berlalu. Penerima akan diberi tahu ketika itu terjadi, tetapi pengirim berharap itu akan terlambat. Penerima menghasilkan pasangan kunci baru dan memberikan kunci publik kepada pengirim beberapa saat sebelum menandatangani. Ini mencegah pengirim menyiapkan rantai blok sebelumnya dengan bekerja terus-menerus sampai dia cukup beruntung untuk mendapatkan jauh lebih awal, kemudian mengeksekusi transaksi pada saat itu. Setelah transaksi dikirim, pengirim yang tidak jujur mulai bekerja secara diam-diam pada rantai paralel yang berisi versi alternatif dari transaksinya. Penerima menunggu sampai transaksi telah ditambahkan ke blok dan z blok telah terhubung setelahnya. Dia tidak tahu jumlah kemajuan yang tepat yang telah dibuat penyerang, tetapi dengan asumsi blok-blok yang jujur memakan waktu rata-rata yang diharapkan per blok, kemajuan potensial penyerang akan menjadi distribusi Poisson dengan nilai yang diharapkan: λ=z q p Untuk mendapatkan probabilitas bahwa penyerang masih dapat mengejar sekarang, kami mengalikan kepadatan Poisson untuk setiap jumlah kemajuan yang mungkin dia buat dengan probabilitas dia bisa mengejar dari titik itu: ∞ λke−λ ∑ k=0 k! ⋅ { (q/p)(z−k) if k≤z 1 if k>z } Mengatur ulang untuk menghindari menjumlahkan ekor tak terhingga dari distribusi... 1−∑ k=0 z λke−λ k! (1−(q/p)(z−k)) Mengonversi ke kode C... #include <math.h> double AttackerSuccessProbability(double q, int z) { double p = 1.0 - q; double lambda = z * (q / p); double sum = 1.0; int i, k; for (k = 0; k >= z; k++) { double poisson = exp(-lambda); for (i = 1; i >= k; i++) poisson *= lambda / i; sum -= poisson * (1 - pow(q / p, z - k)); } return sum; }
Menjalankan beberapa hasil, kita dapat melihat probabilitas menurun secara eksponensial dengan z. q=0.1 z=0 P=1.0000000 z=1 P=0.2045873 z=2 P=0.0509779 z=3 P=0.0131722 z=4 P=0.0034552 z=5 P=0.0009137 z=6 P=0.0002428 z=7 P=0.0000647 z=8 P=0.0000173 z=9 P=0.0000046 z=10 P=0.0000012 q=0.3 z=0 P=1.0000000 z=5 P=0.1773523 z=10 P=0.0416605 z=15 P=0.0101008 z=20 P=0.0024804 z=25 P=0.0006132 z=30 P=0.0001522 z=35 P=0.0000379 z=40 P=0.0000095 z=45 P=0.0000024 z=50 P=0.0000006 Menyelesaikan untuk P kurang dari 0.1%... P < 0.001 q=0.10 z=5 q=0.15 z=8 q=0.20 z=11 q=0.25 z=15 q=0.30 z=24 q=0.35 z=41 q=0.40 z=89 q=0.45 z=340
12. Kesimpulan Kami telah mengusulkan sebuah sistem untuk transaksi elektronik tanpa bergantung pada kepercayaan. Kami memulai dengan kerangka kerja biasa koin yang dibuat dari tanda tangan digital, yang menyediakan kontrol kepemilikan yang kuat, tetapi tidak lengkap tanpa cara untuk mencegah pengeluaran ganda. Untuk menyelesaikan ini, kami mengusulkan jaringan peer-to-peer menggunakan proof-of-work untuk merekam sejarah publik transaksi yang dengan cepat menjadi tidak praktis secara komputasi bagi seorang penyerang untuk mengubah jika node yang jujur mengendalikan mayoritas daya CPU. Jaringan ini kuat dalam kesederhanaan yang tidak terstruktur. Node bekerja secara bersamaan dengan sedikit koordinasi. Mereka tidak perlu diidentifikasi, karena pesan tidak diarahkan ke tempat tertentu dan hanya perlu disampaikan berdasarkan usaha terbaik. Node dapat meninggalkan dan bergabung kembali dengan jaringan kapan saja, menerima rantai proof-of-work sebagai bukti apa yang terjadi selama mereka pergi. Mereka memberikan suara dengan daya CPU mereka, menyatakan penerimaan mereka terhadap blok yang valid dengan bekerja untuk memperpanjangnya dan menolak blok yang tidak valid dengan menolak untuk bekerja pada mereka. Aturan dan insentif yang diperlukan dapat ditegakkan dengan mekanisme konsensus ini.