一個故事告訴你比特幣的原理及運作機制
週末花時間看了一些比特幣原理相關的資料,雖然不敢說把每個細節都完全搞懂了,不過整體思路和關鍵部分的主要原理還是比較明白。寫一篇文章分享給大家。這篇文章的定位會比較科普,儘量用類比的方法將比特幣的基本原理講出來。這篇文章不會涉及演算法和協議中比較細節的部分,打算後面會再寫一篇程式設計師視角下的比特幣原理,那裡會從技術人員的視角對比特幣系統中較為關鍵的資料結構、演算法和協議進行一些講解。
在這篇文章中我會給出一個虛擬的村莊叫“位元村”,整個文章會以講故事的方式,逐步告訴大家比特幣提出的動機、解決了什麼問題以及一些關鍵元件的目標和設計方案。
問題的提出
我們先從比特幣產生的動機開始。
以物易物的位元村
話說在這個世界上,有一個叫位元村的小村莊,村莊共有幾百戶人家。這個村莊幾乎與世隔絕,過著自給自足的生活。由於沒有大規模貿易,位元村村民一直過著以物易物的生活,也就是說村民之間並沒有使用統一的貨幣,互相間的貿易基本上就是老張家拿一袋麵粉換老李家一隻羊,王大嫂拿一筐野果換劉大嬸兩尺布。村民們一直就這麼純樸的生活著。
實物貨幣
終於有一天,村民覺得一直這樣以物易物實在太不方便了,於是村子全員開會,討論如何解決這個問題。有人提議,以便於分割且稀有的東西,例如黃金,作為一般等價物,把其它物品和黃金的對應關係編成一張表格,例如一克黃金對應一隻羊,一克黃金對應一袋麵粉等等,此時老張再也不用扛著一袋麵粉氣喘吁吁的去老李家換羊了,他只要從家裡摸出一克金子,就可以去老李家牽回一隻羊,而老李拿著這一克黃金可以從任何願意出讓麵粉的人那裡換回一袋麵粉,當然也可以換取任何和一克黃金等值的物品。
此時位元村進入了實物貨幣時代。
符號貨幣
好景不長,過了一段時間,實物貨幣的弊端也出現了。因為位元村附近金礦並不多,開採和冶煉金子太費時費力了。而隨著使用,金子總是不斷會因為磨損、丟失或有人故意囤積而發生損耗。全村人又一次坐在了一起,開始商討對策。此時有人說,其實大家也不必一定要真的用黃金啊,隨便找張紙,寫上“一克黃金”,只要全村人都認同這張紙就等於一克黃金,問題不就解決了。其他人紛紛表示認同,但同時也有了新的問題:真實的黃金是需要開採和冶煉的,金礦有限,開採和冶煉也需要成本,所以沒有人可以短期憑空製造大量的黃金,可寫字就不同了,只要我紙夠筆夠,隨便像寫多少寫多少,那這就變成拼誰家裡紙多了,搞不好到時一萬張紙才能換一隻羊(實際上這就發生了經濟學上的通貨膨脹)。
大家一想也是啊。不過此時又有人提出瞭解決方案:這個紙不是誰寫都有效,我們只認村裡德高望重的老村長寫得,大家都認識老村長的字。老村長寫一些紙,同時按照各家黃金存量發給大家等量的紙,例如老張家有二百克黃金,老村長就發給老張二百張寫著“一克黃金”的紙,同時將老張家的黃金拿走作為抵押。就這樣,老村長將村裡所有黃金收歸到自己的家裡,並按各家上交的黃金數量發給等值的寫有字的紙。此時村民就可以拿著這些紙當黃金進行貿易了,而且大家都認得老村長的字,其他人偽造不出來。另外,如果誰的紙磨損太嚴重,也可拿到老村長那裡兌換新的等值的紙,另外老村長承諾任何人如果想要換成真黃金,只要拿紙回來,老村長就會把等值的黃金還給那人。因為老村長寫得紙的黃金量和真實放在家裡的黃金量是一樣的,所以只要嚴格按照銷燬多少紙新寫多少紙的原則,每一張有效的紙總能換回相應的真黃金。
此時,位元村進入了符號貨幣(紙幣)時代。而老村長就承擔了政府和銀行的角色。
中央系統虛擬貨幣
又過了幾年,老村長由於每天都要核對大量的舊紙幣,寫新的紙幣,還要把各種賬目仔細做好記錄。一來二去,老村長操勞過度不幸駕鶴西去了。
位元村再次召開全體大會,討論應該怎麼辦。此時老村長的兒子二狗子自告奮勇接過了父親的筆,承擔起貨幣發行的責任。這個年輕的村長二狗子很聰明,他做了幾天,發現好像也不用真的寫那麼多紙。完全可以這樣:村民把紙幣都交上來,銷燬,但是二狗子會記錄下每戶上交的紙幣數量。以後如果要進行付錢,例如老張要拿一克金子向老李換一隻羊,就一起給二狗子打個電話,說明要將老張名下的一克金子劃歸老李名下,二狗子拿出賬本,看看老張名下是否有一克金子,如果有就在老張的名下減掉一克,在老李的名下加上一克,這樣就完成了支付,此時老李在電話中聽到二狗子確認轉賬完成,就可以放心讓老張把羊牽走了。
此時位元村進入了中央系統虛擬貨幣時代。每個村民都不需要用實物支付,支付過程變成了二狗子那邊維護的賬本上數字的變更。
分散式虛擬貨幣
這新上任的二狗子是聰明,不過這人有時候是聰明反被聰明誤。有一天二狗子盯著這賬本,心想這全村各戶誰有多少錢就是我說的算,那我豈不是……。於是他頭腦一熱,私自從老張帳下劃了十克金子到自己名下。
本以為天衣無縫,但沒想到老張也有記賬的習慣,有一天他正要付錢卻被二狗子告知賬戶沒錢了。老張核對了一下自己的賬本,明明還有十克啊,於是拿著賬本去找二狗子理論,這一核對發現了那筆未經老張同意的轉賬。
東窗事發!位元村炸開鍋了。二狗子被彈劾是不可避免了,不過通過這件事,大家發現了賬本集中在一個人手裡的弊端:
- 這個體系完全依賴於賬本持有人的個人信用,如果這個人不守規矩,隨意篡改賬本,那麼整個貨幣系統就會崩潰
- 如果這個人家裡失火或者賬本失竊,同樣也會為整個體系帶來毀滅性的打擊
正當人們不知所措時,村裡一個叫中本聰的宅男科學家走上了臺,告訴大家他已經設計了一套不依賴任何中央處理人的叫比特幣的虛擬貨幣系統,可以解決上述問題。然後他緩緩講述了自己的方案。
下面我們就來看看中本聰同學是如何設計這套系統的。
相關文章
- 通俗講解比特幣的原理及運作機制比特幣
- Hadoop Yarn 框架原理及運作機制HadoopYarn框架
- 一個故事告訴你什麼才是好的程式設計師程式設計師
- 從技術角度告訴你,區塊鏈到底有哪些特點和運作機制區塊鏈
- 一個故事告訴你,學習程式設計是否需要天賦?程式設計
- 用一張圖告訴你Android中的事件傳遞機制Android事件
- 一個故事看懂機械硬碟原理硬碟
- 一篇文章告訴你物件儲存底層的工作機制物件
- 一篇故事告訴你什麼是微服務架構!微服務架構
- 作為一個程式設計師,告訴你一些編碼知識程式設計師
- 告訴你 Redis 是一個牛逼貨Redis
- 比特幣的原理及價值:只能作為一種投資品比特幣
- 兩個故事告訴大家,程式設計師技術和運氣同樣重要...程式設計師
- 一個詞告訴你什麼是翻譯
- 雲圖說|一圖告訴你主機安全的運維效率如何提升超出預期運維
- 告訴你,我是一個與眾不同的密碼密碼
- 如何“友好”地告訴經理:有一個好程式設計師是你的幸運?程式設計師
- 【vue】用圖告訴你響應式原理Vue
- 談談比特幣的機制及攻擊比特幣
- 讓機器告訴你故事的結局應該是什麼:利用GAN進行故事型常識閱讀理解
- CODING 告訴你如何建立一個 Scrum 團隊Scrum
- 4個理由告訴你Java為何排行第一Java
- 一張圖告訴你最流行的 7 個 JavaScript 框架特點JavaScript框架
- ?【圖】用圖片告訴你Java中的位運算Java
- 一個故事講完CPU的工作原理
- DBA的一天是怎樣的?運維工程師告訴你答案運維工程師
- 如何用“友好”的方式告訴經理:擁有一個好程式設計師是你的幸運?程式設計師
- Nginx快取原理及機制Nginx快取
- HTTP快取機制及原理HTTP快取
- 走近比特幣:一個故事看懂“區塊鏈”比特幣區塊鏈
- 告訴你什麼是TestOps測試運維運維
- 設計、故事、運營、機制,關於遊戲的13本書遊戲
- 作為獨立開發者 別人不會告訴你的事
- 一個故事看懂計算機作業系統的進化史計算機作業系統
- HashMap原理(二) 擴容機制及存取原理HashMap
- 用資料告訴你關於手機app的15個有趣事實APP
- 一個小白使用者告訴你如何做手機遊戲遊戲
- 如何實現一個簡單的雨滴動畫?手把手告訴你動畫