Bitcoin whitepaper: sebuah sistem kas peer-to-peer

PANews Catatan Editor: Pada tanggal 31 Oktober 2008, Satoshi Nakamoto merilis “Whitepaper Bitcoin”, dan hari ini adalah peringatan 17 tahun. Berikut adalah terjemahan whitepaper oleh Li Xiaolai, untuk mengenang karya klasik ini.

Ringkasan: Sebuah sistem uang elektronik versi peer-to-peer murni memungkinkan pembayaran online langsung dari satu pihak ke pihak lain tanpa melalui lembaga keuangan. Tanda tangan digital memang memberikan sebagian solusi, namun jika masih diperlukan pihak ketiga yang dipercaya untuk mencegah pengeluaran ganda, maka keunggulan utama pembayaran elektronik menjadi hilang. Kami mengusulkan sebuah solusi menggunakan jaringan peer-to-peer untuk mengatasi masalah pengeluaran ganda. Jaringan peer-to-peer akan memberi stempel waktu pada setiap transaksi dengan cara: mencatat data hash transaksi ke dalam rantai bukti kerja berbasis hash yang terus berkembang, membentuk catatan yang tidak mungkin diubah kecuali dengan mengulang seluruh proses. Rantai terpanjang digunakan untuk membuktikan kejadian dan urutannya, sekaligus membuktikan bahwa rantai tersebut berasal dari kumpulan kekuatan CPU terbesar. Selama mayoritas kekuatan CPU dikendalikan oleh node yang baik—yaitu, mereka tidak bekerja sama dengan node yang mencoba menyerang jaringan—maka node yang baik akan menghasilkan rantai terpanjang dan melampaui penyerang dalam kecepatan. Jaringan ini sendiri membutuhkan struktur minimal. Informasi akan disebarkan dengan upaya maksimal, node bebas keluar masuk; namun, saat bergabung, node harus menerima rantai bukti kerja terpanjang sebagai bukti dari semua yang terjadi selama mereka tidak berpartisipasi.

1. Pendahuluan (Introduction)

Bisnis di internet hampir sepenuhnya bergantung pada lembaga keuangan sebagai pihak ketiga yang dipercaya untuk memproses pembayaran elektronik. Meskipun sistem ini cukup baik untuk sebagian besar transaksi, ia tetap dibebani oleh kelemahan model berbasis kepercayaan. Transaksi yang benar-benar tidak dapat dibatalkan sebenarnya tidak mungkin, karena lembaga keuangan tidak dapat menghindari arbitrase sengketa. Biaya arbitrase meningkatkan biaya transaksi, membatasi ukuran transaksi minimum, dan bahkan mencegah banyak transaksi pembayaran kecil. Selain itu, ada biaya yang lebih besar: sistem tidak dapat menyediakan pembayaran yang tidak dapat dibatalkan untuk layanan yang tidak dapat dibatalkan. Kemungkinan pembalikan menyebabkan kebutuhan akan kepercayaan di mana-mana. Pedagang harus waspada terhadap pelanggan mereka, merepotkan pelanggan untuk memberikan lebih banyak informasi yang seharusnya tidak diperlukan jika ada kepercayaan. Tingkat penipuan tertentu dianggap tak terhindarkan. Biaya dan ketidakpastian pembayaran ini dapat dihindari saat orang membayar langsung menggunakan uang fisik; namun tidak ada mekanisme yang memungkinkan pembayaran melalui saluran komunikasi jika salah satu pihak tidak dipercaya.

Yang benar-benar kita butuhkan adalah sistem pembayaran elektronik berbasis bukti kriptografi, bukan berbasis kepercayaan, yang memungkinkan dua pihak melakukan transaksi langsung tanpa perlu pihak ketiga yang dipercaya. Transaksi yang tidak dapat dibatalkan karena dijamin oleh kekuatan komputasi dapat melindungi penjual dari penipuan, sementara perlindungan bagi pembeli juga mudah diterapkan. Dalam makalah ini, kami mengusulkan solusi untuk masalah pengeluaran ganda, menggunakan server stempel waktu terdistribusi peer-to-peer untuk menghasilkan bukti berbasis kekuatan komputasi, mencatat setiap transaksi secara berurutan. Sistem ini aman selama node jujur secara keseluruhan menguasai lebih banyak kekuatan CPU dibandingkan penyerang yang bekerja sama.

2. Transaksi (Transactions)

Kami mendefinisikan sebuah koin elektronik sebagai rantai tanda tangan digital. Seorang pemilik mentransfer koin ke orang lain dengan menambahkan tanda tangan digital di akhir rantai: hash transaksi sebelumnya dan kunci publik pemilik baru. Penerima dapat memverifikasi kepemilikan rantai tanda tangan digital dengan memeriksa tanda tangan.

Masalah dari jalur ini adalah penerima tidak dapat memverifikasi bahwa tidak ada pemilik sebelumnya yang melakukan pengeluaran ganda. Solusi umum adalah memperkenalkan otoritas terpusat yang dipercaya, atau disebut “mint”, untuk memeriksa setiap transaksi apakah ada pengeluaran ganda. Setiap kali terjadi transaksi, koin harus dikembalikan ke mint, dan mint menerbitkan koin baru. Dengan demikian, hanya koin yang diterbitkan langsung oleh mint yang dianggap sah dan belum digunakan ganda. Masalah dari solusi ini adalah nasib seluruh sistem uang bergantung pada perusahaan yang mengoperasikan mint (seperti bank), dan setiap transaksi harus melalui mint.

Kita membutuhkan cara agar penerima dapat memastikan bahwa pemilik sebelumnya tidak menandatangani transaksi lain sebelumnya. Untuk tujuan kita, hanya transaksi pertama yang dianggap sah, jadi kita tidak peduli dengan upaya pengeluaran ganda setelahnya. Satu-satunya cara untuk memastikan tidak ada transaksi adalah mengetahui semua transaksi. Dalam model mint, mint sudah mengetahui semua transaksi dan dapat memastikan urutannya. Agar tugas ini dapat dilakukan tanpa pihak yang dipercaya, catatan transaksi harus diumumkan secara publik, sehingga kita membutuhkan sistem yang memungkinkan peserta menyetujui satu riwayat transaksi yang unik. Penerima perlu membuktikan bahwa pada saat transaksi terjadi, mayoritas node menyetujui bahwa itu adalah transaksi pertama yang diterima.

3. Server Stempel Waktu (Timestamp Server)

Solusi ini dimulai dengan server stempel waktu. Server stempel waktu bekerja dengan memberi stempel waktu pada hash dari sekelompok (block) catatan, lalu menyiarkan hash tersebut, seperti yang dilakukan surat kabar, atau seperti posting di newsgroup (Usenet)[2-5]. Jelas, stempel waktu membuktikan bahwa data sudah ada sebelum waktu tersebut, jika tidak, hash tidak dapat dihasilkan. Setiap stempel waktu mencakup hash dari stempel waktu sebelumnya, sehingga membentuk rantai; setiap stempel waktu baru ditambahkan setelah stempel waktu sebelumnya.

4. Bukti Kerja (Proof-of-Work)

Untuk mewujudkan server stempel waktu terdistribusi berbasis peer-to-peer, kita perlu menggunakan sistem bukti kerja seperti Hashcash milik Adam Back, bukan surat kabar atau posting newsgroup. Bukti kerja berarti mencari sebuah nilai; nilai ini harus memenuhi syarat: setelah di-hash—misalnya menggunakan SHA-256—hasil hash harus diawali dengan sejumlah 0. Setiap penambahan jumlah 0 yang disyaratkan akan meningkatkan beban kerja secara eksponensial, namun verifikasi beban kerja hanya memerlukan satu kali perhitungan hash.

Dalam jaringan stempel waktu kita, bukti kerja dilakukan dengan terus menambah angka acak (Nonce) ke dalam blok hingga ditemukan nilai yang memenuhi syarat: hash blok diawali dengan jumlah 0 yang ditentukan. Setelah hasil dari kekuatan CPU memenuhi bukti kerja, blok tersebut tidak dapat diubah kecuali mengulang seluruh beban kerja sebelumnya. Seiring blok baru ditambahkan, mengubah blok saat ini berarti harus mengulang semua beban kerja blok-blok setelahnya.

Bukti kerja juga menyelesaikan masalah bagaimana menentukan siapa yang berhak membuat keputusan mayoritas. Jika “mayoritas” ditentukan berdasarkan “satu alamat IP satu suara”, maka siapa pun yang bisa mendapatkan banyak alamat IP akan dianggap mayoritas. Bukti kerja pada dasarnya adalah “satu CPU satu suara”. Keputusan mayoritas diwakili oleh rantai terpanjang, karena rantai tersebut adalah hasil dari kerja terbanyak. Jika mayoritas kekuatan CPU dikendalikan oleh node jujur, maka rantai jujur akan tumbuh paling cepat, jauh melampaui rantai pesaing lainnya. Untuk mengubah blok yang sudah dihasilkan, penyerang harus mengulang bukti kerja untuk blok tersebut dan semua blok setelahnya, lalu mengejar dan melampaui kerja node jujur. Bagian selanjutnya menunjukkan mengapa kemungkinan penyerang yang tertinggal bisa mengejar akan menurun secara eksponensial seiring bertambahnya blok.

Untuk mengatasi peningkatan kekuatan perangkat keras dan perubahan jumlah node seiring waktu, tingkat kesulitan bukti kerja ditentukan berdasarkan rata-rata jumlah blok yang dihasilkan per jam. Jika blok dihasilkan terlalu cepat, tingkat kesulitan akan meningkat.

5. Jaringan (Network)

Langkah-langkah menjalankan jaringan adalah sebagai berikut:

  1. Semua transaksi baru disiarkan ke semua node;
  2. Setiap node mengemas transaksi baru ke dalam sebuah blok;
  3. Setiap node mulai mencari bukti kerja yang sulit untuk blok tersebut;
  4. Ketika sebuah blok menemukan bukti kerjanya, blok tersebut disiarkan ke semua node;
  5. Node lain hanya menerima blok tersebut jika semua transaksinya valid dan belum digunakan ganda;
  6. Node menunjukkan bahwa mereka menerima blok dengan memasukkan hash blok yang diterima sebagai hash sebelumnya saat membuat blok berikutnya.

Node selalu menganggap rantai terpanjang adalah yang benar, dan terus menambahkan data baru ke dalamnya. Jika dua node secara bersamaan menyiarkan dua versi berbeda dari “blok berikutnya” ke jaringan, beberapa node akan menerima salah satu versi terlebih dahulu, sementara yang lain menerima versi lainnya. Dalam kasus ini, node akan terus bekerja pada blok yang mereka terima terlebih dahulu, tetapi juga menyimpan cabang lain jika cabang tersebut menjadi rantai terpanjang. Ketika bukti kerja berikutnya ditemukan dan salah satu cabang menjadi rantai yang lebih panjang, perbedaan sementara ini akan dihapus, dan node yang bekerja pada cabang lain akan beralih ke rantai yang lebih panjang.

Transaksi baru tidak harus disiarkan ke semua node. Selama cukup banyak node menerima transaksi, transaksi tersebut akan segera dikemas ke dalam sebuah blok. Penyiaran blok juga memungkinkan beberapa pesan terlewat. Jika sebuah node tidak menerima blok tertentu, node tersebut akan menyadari kehilangan blok saat menerima blok berikutnya, dan akan meminta blok yang hilang.

6. Insentif (Incentive)

Sesuai kesepakatan, transaksi pertama di setiap blok adalah transaksi khusus yang menghasilkan koin baru, yang dimiliki oleh pembuat blok tersebut. Cara ini memberikan insentif bagi node untuk mendukung jaringan, sekaligus menyediakan cara untuk mengedarkan koin ke dalam sistem—karena dalam sistem ini tidak ada otoritas terpusat yang menerbitkan koin. Penambahan koin baru secara stabil ke dalam sirkulasi mirip dengan penambang emas yang terus menghabiskan sumber daya mereka untuk menambah emas ke dalam sirkulasi. Dalam sistem kita, sumber daya yang digunakan adalah waktu kerja CPU dan listrik yang digunakan.

Insentif juga bisa berasal dari biaya transaksi. Jika nilai output transaksi lebih kecil dari inputnya, selisihnya adalah biaya transaksi; biaya ini diberikan kepada node yang mengemas transaksi ke dalam blok. Setelah jumlah koin yang ditetapkan telah beredar, insentif sepenuhnya berasal dari biaya transaksi, dan tidak akan ada inflasi.

Mekanisme insentif juga dapat mendorong node untuk tetap jujur. Jika penyerang serakah dapat mengumpulkan lebih banyak kekuatan CPU daripada semua node jujur, dia harus memilih: apakah menggunakan kekuatan tersebut untuk menipu orang lain dengan mengambil kembali uang yang sudah dibelanjakan, atau menggunakan kekuatan tersebut untuk menghasilkan koin baru? Dia akan menemukan bahwa mengikuti aturan lebih menguntungkan, karena aturan saat ini memungkinkan dia mendapatkan lebih banyak koin daripada gabungan orang lain, jelas lebih baik daripada diam-diam menghancurkan sistem dan membuat kekayaannya sendiri menjadi tidak bernilai.

7. Penghematan Ruang Hard Disk (Reclaiming Disk Space)

Jika transaksi terakhir sebuah koin terjadi cukup banyak blok sebelumnya, maka catatan transaksi pengeluaran koin sebelum itu dapat dihapus—tujuannya untuk menghemat ruang disk. Agar fungsi ini dapat dilakukan tanpa merusak hash blok, catatan transaksi di-hash ke dalam pohon Merkle[7,2,5], dan hanya akar pohon yang dimasukkan ke dalam hash blok. Dengan memangkas cabang pohon, blok lama dapat dikompresi. Hash internal tidak perlu disimpan.

Header blok tanpa catatan transaksi berukuran sekitar 80 byte. Jika satu blok dihasilkan setiap sepuluh menit, 80 byte x 6 x 24 x 365 = 4,2M per tahun. Hingga tahun 2008, sebagian besar komputer yang dijual memiliki memori 2GB, dan menurut prediksi hukum Moore, akan bertambah 1,2GB per tahun, sehingga menyimpan header blok di memori tidak menjadi masalah.

8. Verifikasi Pembayaran Sederhana (Simplified Payment Verification)

Bahkan tanpa menjalankan node jaringan penuh, pembayaran tetap dapat diverifikasi. Pengguna hanya perlu salinan header blok dari rantai terpanjang yang memiliki bukti kerja—dia dapat memeriksa ke node online untuk memastikan bahwa rantai yang dimilikinya memang rantai terpanjang—lalu mendapatkan cabang pohon Merkle, sehingga dapat terhubung ke transaksi saat blok diberi stempel waktu. Pengguna tidak dapat memeriksa transaksi sendiri, tetapi dengan terhubung ke rantai, dia dapat melihat bahwa node jaringan telah menerima transaksi tersebut, dan blok-blok berikutnya yang ditambahkan semakin memperkuat bahwa jaringan telah menerima transaksi tersebut.

Selama node jujur masih menguasai jaringan, verifikasi tetap dapat diandalkan. Namun, jika jaringan dikendalikan oleh penyerang, verifikasi tidak lagi dapat diandalkan. Meskipun node jaringan dapat memverifikasi catatan transaksi sendiri, jika penyerang terus menguasai jaringan, maka verifikasi sederhana dapat tertipu oleh catatan transaksi palsu yang dibuat penyerang. Salah satu strategi penanggulangan adalah perangkat lunak klien menerima peringatan dari node jaringan. Ketika node jaringan menemukan blok tidak valid, mereka mengirimkan peringatan, menampilkan notifikasi di perangkat lunak pengguna, meminta pengguna mengunduh blok lengkap, dan memperingatkan pengguna untuk memeriksa konsistensi transaksi. Pedagang dengan transaksi frekuensi tinggi tetap disarankan menjalankan node penuh sendiri untuk memastikan keamanan yang lebih independen dan konfirmasi transaksi yang lebih cepat.

9. Penggabungan dan Pemisahan Nilai (Combining and Splitting Value)

Meskipun memungkinkan untuk memproses koin satu per satu, mencatat setiap sen secara terpisah sangat tidak efisien. Untuk memungkinkan pemisahan dan penggabungan nilai, catatan transaksi mencakup beberapa input dan output. Biasanya, input berasal dari satu transaksi sebelumnya yang besar, atau dari gabungan beberapa input kecil; sementara output biasanya dua: satu untuk pembayaran (ke penerima), dan jika perlu, satu untuk kembalian (ke pengirim).

Perlu dicatat bahwa “fan-out” di sini bukan masalah—“fan-out” berarti satu transaksi bergantung pada beberapa transaksi, dan transaksi tersebut bergantung pada lebih banyak transaksi lagi. Tidak pernah diperlukan salinan riwayat lengkap dari satu transaksi secara independen.

10. Privasi (Privacy)

Model perbankan tradisional melindungi privasi dengan membatasi akses ke informasi tentang pelaku transaksi dan pihak ketiga yang dipercaya. Kebutuhan untuk membuat semua catatan transaksi terbuka meniadakan metode ini. Namun, privasi tetap dapat dijaga dengan memutus aliran informasi di tempat lain—anonimitas kunci publik. Publik dapat melihat bahwa seseorang mentransfer sejumlah uang ke orang lain, tetapi tidak ada informasi yang mengarah ke identitas tertentu. Tingkat publikasi informasi ini mirip dengan perdagangan saham, hanya waktu dan jumlah transaksi yang diumumkan, tetapi tidak ada yang tahu siapa pihak-pihak dalam transaksi.

11. Perhitungan (Calculations)

Misalkan ada skenario di mana penyerang mencoba menghasilkan rantai alternatif yang lebih cepat daripada rantai jujur. Bahkan jika dia berhasil, sistem tidak akan berada dalam posisi ambigu, yaitu, dia tidak dapat menciptakan nilai dari nol, atau mengambil uang yang tidak pernah menjadi miliknya. Node jaringan tidak akan menganggap transaksi tidak valid sebagai pembayaran, dan node jujur tidak akan pernah menerima blok yang berisi pembayaran seperti itu. Penyerang hanya dapat mengubah transaksinya sendiri, mencoba mengambil kembali uang yang sudah dibelanjakan.

Persaingan antara rantai jujur dan penyerang dapat digambarkan sebagai random walk binomial. Kejadian sukses adalah rantai jujur mendapat satu blok baru, meningkatkan keunggulannya sebesar 1; kejadian gagal adalah rantai penyerang mendapat satu blok baru, mengurangi keunggulan rantai jujur sebesar 1.

Kemungkinan penyerang mengejar dari posisi tertinggal mirip dengan masalah kebangkrutan penjudi. Misalkan seorang penjudi dengan chip tak terbatas, mulai dari posisi rugi, diizinkan bertaruh tanpa batas, tujuannya menutupi kerugian. Kita dapat menghitung kemungkinan dia akhirnya menutupi kerugian, yaitu kemungkinan penyerang mengejar rantai jujur[8], sebagai berikut:

Karena kita sudah mengasumsikan , dan penyerang harus mengejar semakin banyak blok, maka kemungkinan suksesnya menurun secara eksponensial. Jika penyerang tidak beruntung di awal dan gagal maju, peluangnya akan semakin kecil seiring dia semakin tertinggal.

Sekarang pertimbangkan berapa lama penerima transaksi baru harus menunggu agar yakin pengirim tidak dapat mengubah transaksi. Kita asumsikan pengirim adalah penyerang, berusaha membuat penerima percaya bahwa pembayaran sudah dilakukan, lalu mengambil kembali uangnya. Dalam kasus ini, penerima akan menerima peringatan, tetapi pengirim berharap saat itu sudah terlambat.

Penerima membuat sepasang kunci publik dan privat baru, lalu memberitahu pengirim sebelum menandatangani. Ini mencegah pengirim menyiapkan rantai blok di muka dan, jika cukup beruntung, memimpin sebelum transaksi dilakukan. Setelah pembayaran dilakukan, pengirim yang tidak jujur diam-diam mulai bekerja pada rantai paralel, mencoba memasukkan versi transaksi yang berlawanan.

Penerima menunggu hingga transaksi dimasukkan ke dalam blok, dan satu blok berikutnya sudah ditambahkan. Dia tidak tahu kemajuan penyerang, tetapi dapat mengasumsikan waktu rata-rata pembuatan blok jujur; kemajuan penyerang mengikuti distribusi Poisson, dengan nilai harapan:

Untuk menghitung kemungkinan penyerang masih bisa mengejar, kita kalikan kepadatan Poisson dari kemajuan penyerang dengan kemungkinan dia bisa mengejar dari titik itu:

Untuk menghindari penjumlahan deret tak hingga dari distribusi kepadatan…

Diubah ke program bahasa C…

Dari hasil parsial, kita dapat melihat kemungkinan menurun secara eksponensial seiring bertambahnya Z:

Jika P kurang dari 0,1%…

12. Kesimpulan (Conclusion)

Kami mengusulkan sistem transaksi elektronik yang tidak bergantung pada kepercayaan; dimulai dari kerangka koin biasa dengan tanda tangan digital, yang meskipun memberikan kontrol kepemilikan yang kuat, tidak dapat mencegah pengeluaran ganda. Untuk mengatasi masalah ini, kami mengusulkan jaringan peer-to-peer dengan mekanisme bukti kerja untuk mencatat riwayat transaksi publik, selama node jujur menguasai mayoritas kekuatan CPU, penyerang tidak akan berhasil mengubah sistem hanya dengan kekuatan komputasi. Kekuatan jaringan ini terletak pada kesederhanaan tanpa struktur. Node dapat bekerja secara bersamaan dengan sedikit koordinasi. Mereka bahkan tidak perlu dikenali, karena jalur pesan tidak bergantung pada tujuan tertentu; pesan hanya perlu disebarkan dengan upaya maksimal. Node bebas keluar masuk, dan saat bergabung kembali, cukup menerima rantai bukti kerja sebagai bukti dari semua yang terjadi selama mereka offline. Mereka memberikan suara dengan kekuatan CPU mereka, dengan terus menambah blok valid ke rantai dan menolak blok tidak valid, untuk menunjukkan penerimaan atau penolakan terhadap transaksi yang valid. Aturan dan insentif apa pun dapat ditegakkan melalui mekanisme konsensus ini.

BTC1.76%
Lihat Asli
Halaman ini mungkin berisi konten pihak ketiga, yang disediakan untuk tujuan informasi saja (bukan pernyataan/jaminan) dan tidak boleh dianggap sebagai dukungan terhadap pandangannya oleh Gate, atau sebagai nasihat keuangan atau profesional. Lihat Penafian untuk detailnya.
  • Hadiah
  • Komentar
  • Posting ulang
  • Bagikan
Komentar
0/400
Tidak ada komentar
  • Sematkan
Perdagangkan Kripto Di Mana Saja Kapan Saja
qrCode
Pindai untuk mengunduh aplikasi Gate
Komunitas
Bahasa Indonesia
  • 简体中文
  • English
  • Tiếng Việt
  • 繁體中文
  • Español
  • Русский
  • Français (Afrique)
  • Português (Portugal)
  • Bahasa Indonesia
  • 日本語
  • بالعربية
  • Українська
  • Português (Brasil)