Saya menulis 5 idea tentang Bitcoin di sini tahun lepas, dan ini mungkin artikel pertama mengenai Bitcoin di sini, jadi hari ini saya akan memperkenalkan protokol Bitcoin.
Artikel ini adalah terjemahan daripada artikel Michael Nielsen mengenai protokol Bitcoin, yang menurut penerjemah adalah yang paling jelas tentang Bitcoin. Michael Nielsen adalah seorang saintis, penulis, dan pengaturcara yang mengkaji pengiraan kuantum, untuk perincian lihat perkenalan beliau sendiri. Terjemahan ini dibuat kerana penerjemah berpendapat bahawa artikel dan perbincangan mengenai Bitcoin mempunyai banyak, banyak sokongan dan banyak bantahan.
Hanya membiarkan orang tahu apa itu, di mana ia sesuai dengan ruang wang elektronik, tidak cuba untuk meyakinkan mereka bahawa ia adalah baik. Satu lagi kata-katanya ialah “Jika anda tidak percaya saya atau tidak mendapatkannya, saya tidak mempunyai masa untuk cuba untuk meyakinkan anda, maaf”.
Beribu-ribu artikel cuba menjelaskan Bitcoin, mata wang dalam talian, peer-to-peer. Kebanyakan artikel hanya mengulas mengenai protokol yang mendasari dan meninggalkan banyak perincian. Walaupun artikel yang sangat mendalam telah terlewat di tempat-tempat penting.
Memahami protokol ini adalah sukar, kerana ia mudah untuk menganggap Bitcoin sebagai sesuatu yang diberikan dan berfikir bagaimana untuk memanfaatkan spekulasi lain untuk menjadi kaya, berfikir apakah ia adalah gelembung, berfikir apakah Bitcoin bermakna pengakhiran cukai dan sebagainya. Berfikir tentang ini adalah menarik, tetapi idea-idea ini sangat membatasi pemahaman anda.
Saya akan menerangkan skrip Bitcoin dan kontrak pintar di artikel yang akan datang. Untuk artikel ini saya akan memberi tumpuan kepada perincian protokol Bitcoin. Untuk memahami artikel ini, anda mungkin perlu membiasakan diri dengan kata laluan kunci awam dan tandatangan digital yang berkaitan, dan mungkin juga dengan fungsi hash (mengubah input dengan panjang yang diingini menjadi output dengan panjang yang tetap).
Bitcoin adalah berasaskan kriptografi, dan ini mungkin mengejutkan anda, bukankah Bitcoin adalah mata wang? Adakah ia adalah cara untuk menghantar mesej rahsia? Sebenarnya, kebanyakan masalah yang ingin diselesaikan oleh Bitcoin adalah mengenai perlindungan transaksi yang menjamin orang tidak boleh mencuri barang orang lain atau menyamar sebagai orang lain dan sebagainya. Dalam dunia fizikal yang terdiri daripada atom, kita menjamin keselamatan melalui kunci, tanda tangan, peti selamat bank dan sebagainya.
Strategi dalam artikel ini adalah untuk membina Bitcoin secara beransur-ansur. Kita akan bermula dengan mata wang digital yang sangat sederhana, yang kita panggil Infocoin, untuk sementara waktu, untuk membezakannya daripada Bitcoin. Sudah tentu, Infocoin versi pertama kita akan mempunyai banyak kelemahan, jadi kita akan melalui beberapa iterasi, setiap iterasi akan memperkenalkan satu atau dua konsep baru.
Cara ini lebih perlahan daripada menerangkan Bitcoin secara langsung. Tetapi walaupun anda dapat memahami asas Bitcoin, sukar untuk memahami mengapa Bitcoin dirancang seperti ini. Kelebihan penjelasan langkah demi langkah yang perlahan adalah bahawa ia memberi anda pemahaman yang lebih jelas tentang setiap elemen Bitcoin.
Akhirnya, saya harus mengatakan bahawa saya adalah orang baru dalam dunia Bitcoin. Saya mempunyai sedikit perhatian pada tahun 2011, tetapi saya benar-benar serius mengkaji perinciannya pada awal 2013. Saya mengalu-alukan sesiapa sahaja untuk membetulkan apa yang saya salah.
Pada pandangan pertama, sebuah mata wang digital mungkin tidak mungkin wujud. Anggaplah seseorang yang kita panggil Alice mempunyai beberapa mata wang digital yang dia mahu belanjakan. Jika Alice boleh menggunakan satu senar sebagai wang, bagaimana kita boleh menghalang dia menggunakan senar yang sama berulang kali? Jika kita dapat menyelesaikan masalah ini, bagaimana kita boleh menghalang orang lain untuk memalsukan senar dan mencuri dari Alice?
Ini hanyalah dua daripada banyak masalah yang perlu diselesaikan dengan menggunakan maklumat sebagai mata wang. Dalam Infocoin edisi pertama, kami cuba mendapatkan Alice untuk memberikan satu senar sebagai wang dan mencari cara untuk melindungi ia daripada pemalsuan. Misalkan Alice ingin memberikan satu infocoin kepada Bob.
Cara ini tidak begitu menonjol, tetapi masih mempunyai beberapa kelebihan. Siapa pun di dunia boleh menggunakan kunci awam Alice untuk mengesahkan bahawa Alice adalah orang yang menandatangani. Tidak ada orang lain yang dapat menghasilkan hasil yang ditandatangani oleh tanda tangan itu. Tanda tangan itu hanya dapat dihasilkan dari kunci peribadi yang dimiliki oleh Alice, pada asasnya lihat tanda tangan digital yang disebutkan di atas), jadi Alice tidak boleh menyesal mengatakan tidak, saya tidak memberikan infocoin kepada Bob.
Saya belum mengatakan apa sebenarnya wang dalam perjanjian ini. Jelasnya: wang sebenarnya adalah mesej itu sendiri. Maksudnya, satu siri yang ditandatangani mewakili huruf yang saya katakan Alice akan memberi Bob sebuah infocoin.
Masalah dengan Infocoin edisi pertama kami ialah Alice boleh menghantar mesej yang sama kepada Bob berulang kali dengan tanda tangan yang sama. Misalkan Bob menerima 10 mesej seperti itu. Saya terkejut, Alice, untuk memberikan satu infocoin kepada Bob. Adakah ini bermaksud Alice memberikan 10 infocoin yang berbeza kepada Bob?
Kita mahu infocoin mempunyai satu identiti yang unik. Ia memerlukan satu label atau nombor siri. Alice boleh menandatangani pada mesej yang diberi nombor siri 8740348 infocoin oleh Alice kepada Bob. Kemudian Alice akan menandatangani pada mesej lain yang diberi nombor siri 8770431 infocoin oleh Alice kepada Bob, supaya Bob dan orang lain akan tahu bahawa ini adalah dua infocoin yang berbeza.
Untuk mewujudkan rancangan ini, kita perlu mempunyai sumber nombor siri yang boleh dipercayai. Salah satu cara untuk menghasilkan nombor siri adalah dengan menubuhkan sebuah institusi seperti bank. Bank ini akan menghasilkan nombor siri untuk infocoin, mencatat siapa yang memiliki mana-mana infocoin, dan mengesahkan keaslian transaksi.
Lebih terperinci lagi, mari kita anggap Alice pergi ke sebuah bank dan berkata, “Saya mahu mengambil infocoin dari akaun saya”. Bank itu memotong satu infocoin dari akaunnya, dan kemudian memberinya nombor siri baru yang tidak pernah digunakan, misalkan 1234567. Kemudian, ketika Alice ingin menghantar infocoin kepada Bob, dia memberi tanda tangan kepada mesej baru itu.
Penyelesaian di atas nampaknya sangat berpotensi. Tetapi, kita boleh melakukan sesuatu yang lebih bercita-cita tinggi. Kita boleh menghapuskan bank dari perjanjian ini. Ini mengubah sifat mata wang itu sendiri secara besar-besaran.
Kita boleh bayangkan ia sebagai sebuah buku catatan terbuka yang dikongsi bersama yang menyimpan rekod transaksi semua infocoin. Kita akan memanggilnya sebagai “blockchain blockchain” kerana ia adalah apa yang disebut dalam Bitcoin.
Sekarang, mari kita anggap bahawa Alice akan memberikan infocoin kepada Bob. Dia akan menandatangani pada kotak infocoin dengan nombor siri 1234567 di kotak mesej. Dan akan mengeluarkan mesej yang ditandatangani kepada Bob, Bob boleh menggunakan rantaian bloknya sendiri untuk memeriksa, OK, itu adalah infocoin yang Alice berikan kepada saya.
Kita masih mempunyai masalah dari mana nombor siri yang tersimpan, tetapi ia agak mudah untuk diselesaikan, jadi saya akan menerangkannya kemudian. Masalah yang lebih sukar adalah bahawa protokol ini membenarkan Alice berulang kali membayar infocoin-nya. Dia boleh menghantar mesej yang ditandatangani. Alice akan memberikan Bob nombor siri 1234567 untuk infocoin, dan dia juga boleh menghantar mesej yang ditandatangani bahawa Alice akan memberikan Charlie nombor siri 1234567 untuk infocoin. Bob dan Charlie menggunakan blockchain mereka sendiri untuk memeriksa bahawa infocoin itu benar-benar berasal dari Alice.
Kami memanggil masalah ini sebagai masalah double spending, dan pada pandangan pertama, ia kelihatan sukar untuk berjaya. Bagaimanapun, jika Alice menghantar mesej kepada Bob terlebih dahulu, dan kemudian Bob menghantar mesej kepada semua orang lain (termasuk Charlie), orang lain mengemas kini blockchain mereka. Pada masa ini, Charlie tidak akan ditipu oleh Alice. Oleh itu, double spending nampaknya hanya mungkin untuk jangka masa yang singkat.
Cara yang paling mudah ialah apabila Alice menghantar infocoin kepada Bob, Bob tidak boleh memeriksa urus niaga itu sendiri. Sebaliknya, dia harus mengumumkan urus niaga itu kepada seluruh rangkaian infocoin, supaya orang lain dapat membantu menilai apakah urus niaga itu masuk akal. Jika mereka bersama-sama memutuskan bahawa urus niaga itu masuk akal, maka Bob boleh menerima infocoin itu, dan semua orang akan mengemas kini blockchain mereka.
Lebih khusus lagi, andaikan Alice mahu memberi Bob sebuah infocoin. Seperti sebelum ini, dia memberi tanda tangan mesej, saya rasa Alice akan memberikan Bob sebuah kod infocoin bernomor 1234567 dan akan menandatangani mesej yang terkenal kepada Bob. Seperti sebelum ini, Bob menggunakan blockchainnya sendiri untuk membuat pemeriksaan, dan mata wang itu memang milik Alice. Tetapi protokolnya berbeza, Bob tidak menerima ini secara langsung, tetapi menerbitkan mesej Alice kepada seluruh rangkaian.
Protokol ini masih mempunyai banyak faktor yang tidak pasti. Sebagai contoh, jika ada cukup orang yang menerbitkan berita ini, berapa banyak orang yang cukup? Ia tidak boleh menjadi rangkaian infocoin keseluruhan, kerana kita tidak tahu siapa yang berada di rangkaian infocoin terlebih dahulu.
Katakanlah Alice mahu berganda dalam perjanjian yang disebutkan di atas, dia perlu menguasai seluruh rangkaian infocoin. Katakanlah dia menggunakan sistem automatik untuk membuat banyak akaun dengan identiti yang berbeza di rangkaian infocoin, dengan asumsi ada satu bilion. Seperti sebelumnya, dia cuba melakukan berganda, memberikan infocoin yang sama kepada Bob dan Charlie, tetapi ketika Bob dan Charlie bertanya kepada rangkaian infocoin untuk memeriksa urus niaga ini, asfalt Alice membanjiri seluruh rangkaian, memberitahu Bob dan Charlie bahawa mereka boleh melalui urus niaga ini, dan mungkin menipu salah seorang daripada mereka atau kedua-duanya untuk menerima urus niaga ini.
Terdapat satu cara yang bijak untuk menggunakan satu kaedah yang dipanggil “Proof-of-work” (Proof-of-work) untuk membuat penipuan. Kaedah ini tidak intuitif, ia memerlukan gabungan dua konsep, 1) proses untuk membuat penipuan transaksi secara manual memerlukan perhitungan kos yang tinggi; 2) memberi ganjaran kepada mereka yang membantu memeriksa transaksi ini.
Itulah inti dari bukti kerja. Tetapi untuk benar-benar memahami bukti kerja, kita perlu melihat lebih terperinci.
Katakanlah Alice akan memberikan maklumat kepada seluruh rangkaian. Katakanlah Alice akan memberikan kepada Bob sebuah infocoin dengan nombor siri 1234567. Apabila orang lain di rangkaian mendengar berita ini, setiap orang akan menambahkannya ke dalam barisan transaksi yang belum diluluskan oleh seluruh rangkaian.

David memeriksa blockchainnya sendiri dan melihat bahawa transaksi yang disebutkan di atas adalah wajar. Dia akan membantu menyebarkan mesej pengesahan ini ke seluruh rangkaian. Tetapi sebelum itu, perjanjian transaksi pemeriksaan memerlukan David menyelesaikan teka-teki pengiraan yang sukar, iaitu bukti kerja.
Jadi, apa yang David perlu selesaikan? Untuk menerangkannya, kita gunakan fungsi hash tetap yang diketahui oleh semua orang di rangkaian untuk memasukkan ia ke dalam protokol itu sendiri. Bitcoin menggunakan fungsi hash SHA-256 yang terkenal, tetapi fungsi hash kriptografi apa pun boleh digunakan di sini.

Masalah yang David akan selesaikan ialah mencari nombor rawak x, yang apabila kita tambah x ini ke belakang L dan hash kombinasi ini, hasilnya bermula dengan beberapa 0. Kesulitan masalah ini boleh disesuaikan dengan menyesuaikan bilangan permulaan sifar. Untuk masalah yang mudah, sifar hanya memerlukan 3 atau 4 permulaan sifar, dan untuk masalah yang sukar, sifar mungkin memerlukan lebih banyak permulaan sifar, seperti 15 sifar berturut-turut. Dalam kes di atas, sifar x = 0 tidak berjaya, kerana hasilnya tidak bermula dengan 0.
Ia tidak berlaku apabila x sama dengan 1.

Kemudian kita cuba x = 2, kemudian x = 3, 4, 5… dan akhirnya, kita dapati x = 4350, kita dapat x = 4350.

Nombor rawak x ini memberi kita satu hasil iaitu empat hash yang bermula dengan 0.
Apa yang membuat masalah ini tidak mudah diselesaikan adalah bahawa hasil fungsi hash kod selalu rawak, dan sebarang perubahan kecil pada nilai input akan mengubah hasil output fungsi hash secara keseluruhan, sehingga sukar untuk diramalkan. Jadi jika kita memerlukan hasil output mesti bermula dengan 10 angka 0, maka David akan memerlukan purata 1610 ≈ 1012 x yang berbeza untuk mencari nilai yang sesuai. Ini adalah tugas yang sangat mencabar dan memerlukan banyak kebolehan pengiraan.
Jelas sekali, kita dapat mengawal tahap kesukaran masalah bukti kerja dengan menetapkan berapa banyak sifar yang diperlukan. Sebenarnya, protokol Bitcoin dapat mengawal tahap kesukaran dengan sedikit pengubahsuaian terhadap bukti kerja di atas.
Baiklah, mari kita anggap David bernasib baik dan menemui satu x yang sesuai (nonce), tahniah kepadanya! (dia akan mendapat ganjaran untuk mencari jawapannya). Dia akan mendedahkan bahawa dia telah membuktikan bahawa transaksi dalam blok ini adalah sah, dan pada masa yang sama mendedahkan nilai x yang dia dapati, dan peserta lain dalam infocoin dapat membuktikan bahawa x membuktikan penyelesaian yang berkesan.
Untuk membuat kerja-kerja untuk membuktikan bahawa program ini berfungsi, peserta rangkaian perlu mempunyai insentif untuk membantu mengesahkan transaksi. Tanpa insentif, tidak ada yang akan bersedia untuk membelanjakan tenaga pengkomputeran mereka sendiri untuk membantu memeriksa transaksi. Jika peserta rangkaian tidak bersedia untuk membelanjakan tenaga pengkomputeran, maka keseluruhan sistem tidak akan berfungsi. Oleh itu, kita boleh memberi ganjaran kepada sesiapa sahaja yang berjaya mengesahkan transaksi dengan memberi mereka beberapa infocoin.
Dalam protokol bitcoin, proses pengesahan ini dipanggil penambangan. Setiap pengesahan yang berjaya dalam setiap blok transaksi akan menerima bitcoin sebagai ganjaran. Pada mulanya, ganjaran adalah 50 bitcoin. Tetapi setiap 210,000 blok yang disahkan (iaitu kira-kira setiap 4 tahun), ganjaran akan berkurangan separuh.
Anda boleh melihat bukti kerja sebagai proses untuk mengesahkan transaksi yang bersaing. Setiap peserta akan menghabiskan sebahagian daripada kekuatan pengkomputeran. Peluang seorang pelombong untuk menang adalah kira-kira sama dengan saiz kekuatan pengkomputeran yang mereka kuasai dan perkadaran kekuatan pengkomputeran seluruh rangkaian. Sebagai contoh, jika seorang pelombong mengawal satu peratus daripada kekuatan pengkomputeran keseluruhan rangkaian, maka kemungkinannya untuk menang adalah kira-kira satu peratus.
Sudah tentu, walaupun penambang yang tidak jujur mempunyai peluang yang sangat kecil untuk merosakkan keseluruhan blockchain, kita tidak cukup yakin untuk menggunakannya sebagai mata wang.
Saya akan mengkaji masalah binari, tetapi sebelum itu, saya ingin menambah satu butiran penting dalam konsep Infocoin. Idealnya, kami berharap rangkaian Infocoin dapat menyatukan urutan transaksi yang berlaku. Jika kita tidak mempunyai urutan yang seragam, maka tidak jelas siapa yang mempunyai infocoin pada masa tertentu. Untuk membantu menyelesaikan masalah ini.

Dalam keadaan yang tidak sengaja, satu blockchain akan menghasilkan cabang. Ini adalah kerana, kadang-kadang, dua penambang mengesahkan transaksi blok hampir pada masa yang sama. Mereka mengumumkan pada masa yang sama ke dalam rangkaian, ada yang mengemas kini blockchain mereka dengan satu kaedah, dan yang lain mengemas kini blockchain mereka dengan kaedah lain.

Ini menyebabkan situasi yang kita ingin elakkan, di mana urutan transaksi tidak jelas, dan tidak jelas siapa yang mempunyai infocoin mana. Nasib baik, ada cara mudah untuk memindahkan cabang. Peraturannya adalah: jika terdapat cabang, orang di rangkaian akan terus menyimpan dua cabang, dan dalam apa jua keadaan, pelombong hanya akan bekerja pada blockchain yang paling panjang.
Katakanlah kita mempunyai sebuah cawangan, di mana beberapa penambang menerima blok A terlebih dahulu, sementara yang lain menerima blok B. Mereka yang menerima blok A akan terus menggali di cawangan mereka, manakala yang lain akan menggali di cawangan Block B. Katakanlah penambang di cawangan B berjaya menggali blok seterusnya:

Apabila mereka menerima mesej ini, orang-orang di cawangan A akan menyedari bahawa cawangan B adalah yang terpanjang, dan mereka akan beralih ke cawangan B. Kerja di cawangan A akan berhenti dengan cepat, jadi semua orang akan bekerja pada blockchain dengan urutan yang sama.
Begitu juga, jika seorang pelombong di cawangan A menggali blok seterusnya, maka orang yang bekerja di cawangan B akan berhenti dan beralih ke cawangan A.
Walau apa pun hasilnya, proses ini memastikan bahawa blockchain mempunyai urutan yang seragam. Dalam Bitcoin, satu transaksi tidak boleh dianggap sebagai pengesahan sehingga 1) ia berada dalam blok dalam cabang terpanjang, dan 2) sekurang-kurangnya 5 blok yang disahkan disahkan di belakangnya. Dalam kes ini, kita mengatakan bahawa transaksi ini mempunyai 6 blok pengesahan. Ini memberi seluruh rangkaian masa untuk menyatukan urutan blok.
Sekarang kita memahami urutan masa, mari kita kembali kepada apa yang berlaku jika seseorang yang tidak jujur mahu berbelanja dua kali ganda. Misalkan Alice mahu memberikan transaksi yang sama kepada Bob dan Charlie pada masa yang sama. Satu kemungkinan adalah untuk membenarkannya dengan satu blok yang membawa dua transaksi pada masa yang sama.
Tetapi kemungkinan lain ialah dia cuba untuk mendedahkan dua transaksi secara berasingan. Dia mungkin mendedahkan satu transaksi kepada sebahagian penambang, dan satu lagi kepada sebahagian penambang yang lain, dan dia ingin kedua-dua transaksi disahkan.
Satu lagi kemungkinan ialah, Alice = Bob, iaitu Alice cuba untuk memberikan satu koin kepada Charlie, dan dia juga memberikan koin itu kepada dirinya sendiri, kerana dia boleh mempunyai lebih banyak akaun. Dalam kes ini, strategi Alice adalah menunggu sehingga Charlie menerima Infocoin ini, iaitu kira-kira selepas urus niaga telah disahkan 6 kali dalam blockchain terpanjang.

Malangnya, pada masa ini Alice sudah tertinggal 6 langkah dari blockchain terpanjang. Dia sukar untuk mengikuti cabang terpanjang. Para pelombong lain tidak akan membantunya, kerana mereka semua perlu bekerja pada cabang terpanjang untuk mendapat ganjaran. Kecuali jika Alice dapat menggabungkan lebih cepat daripada orang lain di rangkaian dalam menyelesaikan bukti kerja (iaitu, dia mungkin mempunyai lebih daripada 50% kekuatan perhitungan keseluruhan rangkaian).
Sudah tentu, ini tidak begitu tegas untuk mengatakan bahawa Alice pasti tidak boleh berbohong. Ini hanya kesimpulan yang munasabah. Buku putih Bitcoin tidak melakukan analisis keselamatan yang ketat, hanya kesimpulan tidak rasmi seperti saya.
Michael meninggalkan konsep Infocoin dan menerangkan protokol Bitcoin dengan lebih terperinci melalui penglihatan perdagangan Bitcoin. Jika anda melihat di sini, anda boleh mengikuti saya di Weibo, dan blog saya.
Anda juga boleh mengikuti beliau di Twitter, atau ikuti bab pertama buku beliau yang akan diterbitkan mengenai rangkaian saraf dan pembelajaran mendalam.
Dipetik dari artikel oleh Jan Tsukasa