比特幣系統是如何運行的?(轉自知乎,原做者Wu Hao)

比特幣系統是如何運行的?(轉自知乎,原做者Wu Hao)安全

第零章 玩具

最近比特幣又火了,並且獲得了主流媒體的廣泛報道。惋惜的是大概一萬個談論比特幣的人中也沒有一個真正懂它是怎麼工做的,因而只要一提到比特幣,什麼龐氏騙局,傳銷之類的話立刻就殺過來了。弄得普及比特幣知識的人一個個都是騙子。要知道比特幣在進入大衆視野以前,是一幫hackers和geeks慢慢養大的玩具,他們絕對不是生長騙子的土壤。

改變世界要從本身作起。因此我今天下定決心,寫一篇讓初中生也看得懂的文章(若是你以爲仍是看不懂,絕對不是你智商不夠,而是我無知自大,寫得很差。那些說本身智商不夠的朋友讓我以爲惶恐),來介紹比特幣運行的原理。也許你看完跟我同樣,會佩服其天才的設計:原來他是這樣把「我的發行貨幣」這種荒誕不經的想法變爲現實的。

通俗易懂是本文的初衷,同時又但願篇幅儘可能小,勢必要忽略細節,或作不精確的比喻,一定貽笑大方,還請諒解,並且歡迎各類批評指正。文中包含了大量比喻,對這部分千萬不要當真。我會用非專業性的語言盡我所能地描述事實真相,可是若是想真正懂得原理,請去官網。固然本文也能夠用於研究官方文檔前的預熱。

比特幣是個比較複雜的系統,若是你想10分鐘就弄明白,神仙也辦不到。還但願多開點耐心的預算。



第一章 帳單

第一章 第一節 撕紙遊戲

比特幣本質上是一個廣播和管理帳單的系統。也許有點讓人難以相信的是,每一個標準客戶端都保存有有史以來每一筆賬單。並且沒有任何特殊結點(服務器),於是稱之爲去中心化的點對點系統。

很顯然賬單必須惟一,那麼在一個點對點的系統中如何能作到這一點呢?想像100個互不信任的人住在一個小島上,他們沒有物理貨幣,只能相互給帳面上錢,而且每給一筆都喊一句讓全部人知道。若是他們每人均可以記賬,顯然就亂套了:當兩我的的賬單對不上號怎麼辦?若是由一個指定的人來記賬,那他又有可能以權謀私。

比特幣怎麼解決這個問提?每一個人均可以記賬,把每一筆交易都記在一張牛皮紙上,籤個名。那麼,誰的牛皮紙算數呢?很簡單,全部人都得把這張紙撕成等面積的兩半,讓偏差小於必定值,好比0.1%。若是知足這個條件,那麼你的就被你們承認,每人複印一份拿回家。什麼?你撕完了發現偏差是0.100001%?對不起,大俠請從新來過。爲何要撕紙呢,由於紙一分爲二造成的那一條線,是獨一無二的,具有了防僞的功能。而撕成偏差極小的兩半,是有「難度」的,沒有難度沒法成爲遊戲。

沒事幹玩撕紙遊戲幹嗎?由於你們約定,每一個人均可以在賬單上添一筆,說「比特島公共基金給本人25元」。你的帳單被判爲有效的話,你就獲得了這25元。這個撕紙遊戲就叫挖礦,由於遊戲過程就像淘金同樣。

比特幣的挖礦就是用電腦來進行這種撕紙撞大運的遊戲,當前的數據是全絡「撕」61,000,000,000,000次每秒,換句話說大概每61,000,000,000,000 x 600 次嘗試產生一個幸運兒。無疑這須要巨大的硬件和能源,可是如你如今所知,這是維持比特幣這個金融系統必須付出的成本,而不是所謂的「純粹浪費資源」。要明白現實中的金融系統要比這個昂貴得多,一個銀行客服的成本至關於多少臺電腦?


第一章第二節 帳單鏈

全部的有效帳單組合在一塊兒,才能成爲完整的帳單。怎麼作到這一點呢?每一份帳單都把前一份帳單縮小成1/10,貼在本身的角落上,換句話說每一個帳單都知道上個帳單是哪一個,一個鏈就造成了。這對玩記帳遊戲的人有產生問題了:假如第123份帳單生成好了,A和B都拿這個做爲前一個節點,記帳,撕紙,而後他們幾乎同時撕出了符合要求的帳單怎麼辦?那個稍微慢一點點的(假定是B)怎麼甘心認輸呢?方法很簡單:大衆只認最長的那一條鏈。因此,當一個新帳單生成並被廣播時,每一個玩家會當即放棄當前這一局遊戲,拿到最新的帳單縮小成1/10,貼在本身的新的一張帳單的角落上,開始下一輪遊戲。不然就算你撕出了合法的帳單,也會被孤立,變得無效。

明白B是怎麼被淘汰的了嗎?想象這樣一個有趣的無限接力賽遊戲:環形賽道,每一棒一圈,每圈跑完之後你就把棒子插到一個「下一代接力棒生成器」中,生成一大堆下一代接力棒供下一棒的選手們使用。只要你的棒子的下一代被大多數人使用,你就爲這一輪的勝者。顯然下一棒的選手們會去拿最先生成的新一代棒子,於是其餘的上一棒的選手會自動就放棄。哪怕是因爲慣性B也跑到交棒點,而後順手把棒子插到一個「下一代接力棒生成器」中,也是徒勞的。由於你們都已經跑了,再也沒人理會你的接力棒了。

可是若是真的有兩我的同時跑到終點怎麼辦?那也不要緊,下一輪就會有拿着兩種棒子的人跑了。平局的這一輪兩我的如何決勝?你應該也已經想到,「我不比你快,我兒子比你快就行」。在現實挖礦中,這種兩種棒子同時跑的現象是十分常見的,因此礦工每隔一段時間就要經歷一次「空歡喜」。具體可見Orphaned Blocks


第一章第三節 遊戲規則

記帳是個平常事務,因此礦工每時每刻都在試圖製造合法的帳單。那麼假如我但願天天一份帳單就好,可是這些礦工技術愈來愈好,玩的人愈來愈多了怎麼辦呢?不要緊,若是帳單生成得太快,就提升偏差要求,反之下降要求,以達到動態平衡。比特幣的控制目標是十分鐘一個帳單,就是傳說中的一個"Block".

怎麼保證沒有人僞造帳單呢?答案是不能100%保證,可是僞造很是困難。因爲帳單鏈的存在,僞造一份帳單必須把從這份帳單之後的全部帳單所有僞造一遍。不然,好比你僞造的是第123份,大衆拿手裏的第124份的複印件中的第123份的縮略圖一對比,會發現撕紙的痕跡不同。於是拒絕認可你的合法性。你也沒法直接竄改那牛皮紙,由於撕紙遊戲規定一旦有改動,該紙當即做廢。於是那個被大衆所認可的帳單鏈表明的,實際上是歷史上全部的最高效的撕紙生產力的總和。你要推翻它就必須拿出比這個更大的生產力僞造一條新的更長帳單鏈,而後混淆是非說,你這條鏈纔是合法的,由於大衆只承認最長的那一條。

注意,這不是不可能。現實中新一代礦機的製造商徹底有這樣的能力,由於他們的生產力是別人的成百上千倍,再加上規模化製造礦機,這個是很容易實現的。但問題是很顯然這背離了他們的利益,這會是對他們本身賴以賺錢的平臺的核心機制毀滅性打擊,因此這種事情是不會發生的。

若是對這個仍是不放心的話,其實已經有修補這個漏洞的方案,只不過彷佛目前並未實施。


第一章第四節 2100萬

如同不少人知道斯諾克滿分是147同樣,不少人最早了解到比特幣的信息之一即是,比特幣總數上限是2100萬。對普通人來講,這就是最大的賣點。而這又是如何實現的呢?其實這個上限就是前面提到的比特島公共基金的總量,經過撕紙遊戲分配給獲勝者。顯然總有一天是要坐吃山空的,怎麼辦呢?兩個辦法。一是日後拖:每四年撕紙的獎勵減半,09年還獎勵50呢,現在13年就只有25了。這麼玩要玩到下個世紀纔算瓜分完。二是伸手要:假如你給別人錢的同時,給記帳的一點小費,別人就優先給你記帳,你的交易就較早第獲得確認。原做者的假設是,到最後礦工只經過小費得到收益。

這裏面隱藏的一個重要的信息是,比特島公共基金是經過這個遊戲作了另一件很是重要的事,把錢分發出去的。發現了吧,記帳和分發貨幣,這兩個最基本的工做,就是由這個巧妙的遊戲完成的。



第二章 支付

第二章第一節 匿名

說了這麼多,其實最根本的問題尚未聊到,那就是比特島上的人都是沒有名字的,這個帳單要怎麼寫?更重要的是,D 說 D 給了 WM 0.5元,記帳的如何知道 D 的帳戶上有沒有0.5元,又如何記錄 WM 今後多了0.5元錢呢?比特島人是經過「發微博」實現的,神奇吧。

假定 D 的微博號是 188Nxs23XGUonU8og9u6n4CNwr5oqqsVjE(如下簡寫爲188N),WM 的微博號是 19XRiapec1aDN4NCJMmLkkp7iXegEQvBGz(如下簡寫爲19XR)。只要 D 在微博上發 「我支付給 @ 19XR 0.5元」 就行了。爲何這句話直接就被斷定爲真話呢?@羅永浩說本身的ROM比MIUI好,你們都會懷疑他是否是吹牛,可是若是他說本身的ROM比MIUI差,就不會有人質疑他了。一樣的道理若是@188說「@19XR支付給我0.5元」,是不會有人直接採信的,但反之則可。

咱們來一個案例分析,其中有三名參與者。除了上文提到的 D,WM 外,再加上微博號爲 136LvpXuWFRjfuVBCmoqFFGSstbMQkNEKr(如下簡寫爲136L)的比特島居民 DS。DS辛苦挖礦獲得25元,而後上交20元給 D, 後來 D 又支付0.5元給WM。

首先是 DS 贏得了某輪的撕紙大賽,那個全島惟一,人手一份的帳單鏈上的最後一份帳單是 DS 生成的。那麼這份帳單上就有一條寫着「比特島公共基金支付 @136L 25元」。(固然若是這位 DS 真名是雷鋒,他就會寫成 「比特島公共基金支付 @188N 25元」,徹底把本身的勞動成果奉獻給 D,這也是徹底能夠的。)

而後 DS 經過微博帳號@136L 發微博說「我支付 @188N 20元」。這時全部礦工們(也就是記帳的)都看到了,要不要記錄在冊呢?他們首先要去查帳單鏈,看看@136L總共收到多少錢,又送出去多少錢,若是其他額大於20的話,那這筆帳就是有效的,能夠記下了。礦工們查完發現@136L 只存在於一筆得到25元的交易上,餘額就是25元,當前交易有效。

後來 D 又經過微博帳號@188N 發微博說「我支付 19XR 0.5元」。一樣因爲根據帳單鏈發現@188N餘額大於0.5元,交易被記錄。

總結一下。 第一,一組微博的用戶名密碼就是承載比特幣的一個容器,所謂的「錢包」就是記錄你所擁有的全部的微博用戶名密碼的文本文件。第二,帳單鏈中保存的所有都是「微博用戶名」,你根本沒法知道是誰擁有這些用戶名對應的密碼,這就是所謂的匿名。

可是從另一個角度看,比特幣又是徹底透明的。由於任何一個「微博用戶名」的財富總量都是公開的數據。若是你有興趣能夠去觀摩一下高富帥的交易歷史,好比Bitcoin Address 1933phfhK3ZgFQNLGSDXvqCn32k2buXY8a


第二章第二節 點對點

現實生活中比特幣的交易是徹底點對點的,不依賴於微博這麼蠢的東西。(事實上任何網站都不是比特幣系統的一部分,無論是官網,仍是最大的交易網站mtgox,或者是blockchain.info。它們都只是這個生態圈的一部分,比特幣的運轉,不依賴於它們任何一個。)而作到這一點,比特幣用的是數字簽名技術。並且比特幣系統並不會刻意跟蹤某個地址擁有多少錢,而是經過管理每筆交易的輸入輸出來記錄帳目的。

數字簽名比較複雜,比特島人是用不慣的,他們如何操做呢?仍是撕紙。咱們仍是拿 D 給 WM 0.5元爲例子。咱們先假定 DS 在第1024頁帳單的419條目給了 D 25元。
第一步,WM 隨便拿張紙,隨便撕成甲乙兩半。而後吧其中甲部分交給 D,這半張紙就是一個比特幣地址。
第二步,D 向大衆廣播這樣一封信:「我是第1024頁帳單的419條目的受益方,我要將其中的0.5元轉讓給這半張紙(附上 WM 給他的半張紙)。」
第三步,記帳者收到消息,調出第1024頁帳單的419條目,查看此條目的受益方收到的錢夠不夠,而後驗證次受益方就是本次交易的發起人。所有確認後,則把這則帳目包括這半張紙(或者其複印件)歸入帳單中。假定此條目爲1984頁1989條。
如今,當 WM 要把錢轉讓給別人時,他就能夠拿出他剩下的那張紙的乙部份,證實的收益方是他,由於世界上只有他這半張紙跟1984頁1989條中記載的那半張紙匹配。
再回來看第二步,其實D也是經過提供某張紙的乙部份來證實他是第1024頁帳單的419條目的收益方的。

總結一下,一個交易包含一下信息:
1.資金來源,即前面某個帳單中的某個條目。
2.資金去向,即某張紙的甲部分的複印件,和金額大小。用於指定本次交易的受益方和金額。
3.簽名,即資金來源條目中所副的那張半張紙對應的乙部份的複印件,用於證實這次交易是由資金來源所指向的收益方發起的。
這裏要註明的是,咱們假定撕開的紙的甲部分是能夠無限重複複印的。而乙部份由受益方持有,且只有從原件複印出來的第一代複印有效,換句話說簽名只有乙部份的持有人才能夠作。

實際上在這個例子中,一張紙的甲部分就是比特幣地址,好比我提供的136LvpXuWFRjfuVBCmoqFFGSstbMQkNEKr,而乙部份則是被我嚴格加密保存在wallet.dat中的一個祕鑰,他跟136LvpXuWFRjfuVBCmoqFFGSstbMQkNEKr是一對。而所謂的附上乙部份的第一代複印件,就是利用祕鑰對信息簽名的過程。

換句話說,「我向136LvpXuWFRjfuVBCmoqFFGSstbMQkNEKr打入0.0001BTC」實際的意思是「我把0.0001BTC的控制權交給了136LvpXuWFRjfuVBCmoqFFGSstbMQkNEKr對應的祕密字符串的擁有者」。


第二章第三節 重要的細節

一個典型的比特幣客戶端含有N個地址及其對應的私鑰,而不是一個。並且這N個地址相互沒有什麼特殊關係,只不過在界面上它會顯示全部地址所擁有的比特幣的餘額。這是相對於常見的一用戶名一密碼模式的最大區別。這個帶來的問題是「錢包備份」的問題:別覺得備份一次就萬事大吉了,有可能有新產生的地址祕鑰沒有獲得備份。固然這樣的備份方法也是有的,這裏只是提醒要安全備份,就不展開說了。

再介紹另一個有趣的細節。如上文所說,當你把比特幣打給另一個地址時,你所發出的消是,「我要吧第M號交易的輸出到地址X的一些比特比做爲輸入源,輸出給地址Y」。這裏有一個很是重要的規定,就是每筆交易都必須輸入源的金額用光!因此比特幣客戶端的作法是建立一個「找零地址」,把額外的輸入輸出給這個找零地址。舉個例子,假如個人某地址136LvpXuWFRjfuVBCmoqFFGSstbMQkNEKr某次交易得到了1萬個比特幣,而後當我拿這筆錢中的0.01個幣買一瓶礦泉水時,公衆就會從全局帳單看到地址136LvpXuWFRjfuVBCmoqFFGSstbMQkNEKr打到地址DZA 0.01個幣,同時打到DZB 9999.99個幣。固然公衆無從知道這個DZB只是個人一個找零地址。因此有些搞數據分析的專家看到頻繁的大規模財產轉移就會覺得這是刻意的轉移/掩蓋財產,最後發現鬧了笑話。



第三章 沙發 --總結以及FAQ


第三章第一節 主觀臆斷

這一章叫沙發,由於文章主體已經結束了。

相信不少人都搶過沙發,或者是在論壇上搶整。我想問你們一個問題:把時間倒回2009年,當比特幣還一錢不值的時候,大家會去挖礦搶幣嗎?我想我必定會的,緣由跟搶沙發相似,可是比搶沙發更有意思:
a. 我所搶的東西是個「好」東西,它好到可讓人崇拜。正如你會去搶你喜歡的人的沙發。
b. 稀缺,若是沒有總量上限,我就不會去「搶」了。沙發也如此,是限量供應的。
c. 絕對可靠的物權,只要沒有丟掉個人私鑰,個人就永遠是個人,沒人能拿走。

我想,無論當初鍾本聰開發比特幣時,是抱着實驗的心態,仍是真的預見到本身要改變世界,對於普通玩家來講,在最初很長的一段時間內,挖礦只是一種優雅的搶沙發的方式,固然也許還有認爲它往後真的能生根發芽的一種「信仰」。

總有人問我,比特幣有什麼「實際價值」,通常來講有此會引起一堆關於法幣,黃金或者是「Rai stones」的大辯論。這裏我不想糾纏於這個問題,只想回答另一個問題:比特幣問什麼有價格?有人想要,能夠交換,稀缺這三個要素構成了價格造成的必要條件。能夠交換,稀缺是比特幣天生的,那麼」有人想要「這個判斷爲不爲真呢?固然!我只須要舉出一個例子,那就是我,本文做者。

回到那個虛擬的比特島,若是把世界上的全部人分紅兩類,相信比特幣的和不相信比特幣的,而後前者都住在比特島上。那麼,無論在島外的人看起來多麼好笑,對於島上的人來講,比特幣就是黃金。

比特島外的人也是能夠持有比特幣的,由於儘管他不認可這種貨幣,可是隻要他隨時能夠到比特島換回」真金白銀「就能夠了。

據說過那個2010年有人用1萬比特幣買一個pizza的故事嗎?比特幣不是一個忽然冒出來的價值上千人民幣一個的怪物。只不過是比特島的人口一直在不緊不慢的增加,比特幣的潛在價值也在不緊不慢地增長,在這個IT時代的參照系中,比特幣發展得沒有你想象的快。可是比特幣的價格並無像其潛在價格同樣增加,而常常是積蓄上漲的力量,而後忽然像火山噴發同樣,吸引全世界的眼球。

比特幣真的會改變世界嗎?若是你問我並且只能用「會「或」不會「來回答,個人回答是」不會「。正如比爾蓋茨所說「I think it's a techno tour de force, but that's an area where governments are gonna maintain a dominate role.(我認爲比特幣是個技術傑做,可是政府會在這個[貨幣]領域保持統治地位)」取代法幣是妄想。比特幣的下限是繼續淪爲少數人的玩具,上限是成爲IT時代的黃金。

以上是主觀臆斷。


第三章第二節 客觀事實

客觀事實是:比特幣不是騙局,因此任何形式的騙局都跟比特幣無關。對我我的而言,說比特幣是龐氏騙局會讓我很難受,就像我原本有個女兒像奶茶妹同樣漂亮卻被人說長得跟鳳姐同樣。

先簡單介紹一下龐氏騙局:我要騙錢,因而我成立了一個基金,可是我並不投資,只是作假帳,跟投資者說個人基金回報又穩定又高。這樣一來個人基金必然會出現愈來愈大的實際虧空,這不要緊,只要有愈來愈多的人把錢投入個人基金,個人現金流就不會枯竭,騙局也就不會被拆穿。衆所周知的詐騙500億美圓的Bernard Madoff就是由於金融危機才致使其騙局顯形。

說比特幣是龐氏騙局的人認定比特幣創始人 Satoshi Nakamoto(注:沒人知道Satoshi是一我的仍是一個組織,並且目前他已經」退出江湖「) 就是 Bernard Madoff。由於Satoshi做爲最先的挖礦者之一,是大量比特幣的持有者,因此比特幣升值他就是最大的受益者。於是他就是背後的騙子。這個理論最大的問題在於一個」騙「字。在比特幣的世界,一切都是透明的,騙從何來?任何人若是購買比特幣都是基於本身對公開信息的判斷,Satoshi既沒有也沒法跟投資者保證又高又穩定的回報,而這個是龐氏騙局的基本特徵。

任何一個龐氏騙局都有一個死穴,那就懷揣一本假帳。Madoff之前老是以商業機密爲由,拒絕透露投資細節。任何一個基金只要將本身的投資流向徹底公開,就能夠洗脫龐氏騙局的嫌疑了。那麼我想問,若是Satoshi想要洗脫嫌疑,你做爲懷疑者想要他公開什麼?他持有的比特幣的數量?好吧,就算他如人們所猜想擁有100萬比特幣,站在鏡頭前像全世界宣佈這個事實,那又怎麼樣呢?比特幣就土崩瓦解了?我看不出來爲何這會對比特幣有什麼致命性的影響。沒有誰騙了誰,沒有陰暗的祕密,騙局無從談起。

如今說說傳銷,比特幣是我見過最滑稽的傳銷了。假如我擁有十個比特幣,那麼我傳銷一個比特幣得到的收益有多少呢?咱們能夠大體估算一下:假定傳銷出去一個比特幣給比特幣帶來的升值約至關於銷燬一個比特幣所帶來的,那麼每傳銷出去一個比特幣我持有的每一個比特幣大約升值 1/(2100萬)。換句話說,我這是爲全部的比特島人搞傳銷,或者說共產主義傳銷。這麼崇高的共產主義傳銷你見過嗎?

傳銷的特色是,每一個人*直接*從其下家獲利,比特幣徹底不具有這個特色。實際上持有比特幣的人鼓吹比特幣,跟持有黃金的人鼓吹黃金,或者持有北京房子的人鼓吹房價沒有什麼區別。是有點討人厭啦,可是傳銷這帽子扣得大了點。我我的通常都在鼓吹的同時警示風險,表示不懂的話不要玩。

爲何你們都喜歡說比特幣是騙局呢,並非由於他們真的經過分析比較,而後從邏輯上得出這樣一個論斷。而是由於他們對比特幣的見解是「沒有實際價值,最後下家買單」。長得這麼反革命,天然就是反革命了,拖出去遊街批鬥!

比特幣長得這麼反革命不是沒有緣由的,可是我想把「沒有實際價值,最後下家買單」改爲「可能低於實際價值,可能最後下家買單」。對比特幣的惡評,無非是來源於對其巨大的泡沫風險和不肯定性風險的反感。是的,查理芒格爺爺說得沒錯」比特幣是老鼠藥「。對於一個不瞭解它的人,最好把它當作老鼠藥:不要碰!


第三章第三節 結語

比特幣是什麼?本質上,跟HTTP 或者 Bittorrent 同樣,它是基於因特網的一個協議,一個天才的發明創造。跟HTTP 或者 Bittorrent 同樣,它以互聯網爲基礎,使得之前不可想象的事情變成可能。

在現實中,它被說成是一幫無政府主義者的烏托邦,也被說成是人類經濟史上的一次大革命;它被認爲是天才的技術創造,也被認爲是有不少缺陷的一個開源軟件;它被利用成投資或是投機的工具,也被當作不可接觸的老鼠藥。

因爲不一樣的背景,不一樣的看問題角度,每一個人眼中必然有不一樣的比特幣。蓋茨說它是技術傑做,而芒格說它是老鼠藥,從某種角度看,他們都能自圓其說。做爲鍵人我,惟一的但願是,你看完這篇文章後不要再說比特幣是「騙局」了。這種說法真的顯得很沒文化,你不以爲嗎?服務器

如下是比特幣系統運行的圖示~dom

相關文章
相關標籤/搜索