當前位置:妙知谷 >

遊戲數碼 >網際網路 >

深入淺出比特幣:比特幣系統是如何執行的?

深入淺出比特幣:比特幣系統是如何執行的?

操作方法

(01

深入淺出比特幣:比特幣系統是如何執行的?
02)第零章 玩具最近比特幣又火了,而且得到了主流媒體的普遍報道。可惜的是大概一萬個談論比特幣的人中也沒有一個真正懂它是怎麼工作的,於是只要一提到比特幣,什麼龐氏騙局,傳銷之類的話馬上就殺過來了。弄得普及比特幣知識的人一個個都是騙子。要知道比特幣在進入大眾視野之前,是一幫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,或者是。它們都只是這個生態圈的一部分,比特幣的運轉,不依賴於它們任何一個。)而做到這一點,比特幣用的是數字簽名技術。而且比特幣系統並不會刻意跟蹤某個地址擁有多少錢,而是通過管理每筆交易的輸入輸出來記錄賬目的。數字簽名比較複雜,位元島人是用不慣的,他們如何操作呢?還是撕紙。我們還是拿 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,而乙部份則是被我嚴格加密儲存在中的一個祕鑰,他跟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 一樣,它以網際網路為基礎,使得以前不可想象的事情變成可能。在現實中,它被說成是一幫無政府主義者的烏托邦,也被說成是人類經濟史上的一次大革命;它被認為是天才的技術創造,也被認為是有很多缺陷的一個開源軟體;它被利用成投資或是投機的工具,也被當做不可接觸的老鼠藥。由於不同的背景,不同的看問題角度,每個人眼中必然有不同的比特幣。蓋茨說它是技術傑作,而芒格說它是老鼠藥,從某種角度看,他們都能自圓其說。作為鍵人我,唯一的希望是,你看完這篇文章後不要再說比特幣是“騙局”了。這種說法真的顯得很沒文化,你不覺得嗎?

  • 文章版權屬於文章作者所有,轉載請註明 https://miaozhigu.com/zh-tw/sm/hulianwang/dez00v.html