天天看點

關于很火的【比特币】

比特币是現在網際網路技術中一個很火熱的話題,涉及到區塊鍊,不對稱加密,分布式存儲等很多的技術,特此找到一篇很好的介紹文章。

原文位址:http://www.ruanyifeng.com/blog/2018/01/bitcoin-tutorial.html

比特币(bitcoin)誕生于2008年的一篇

論文

一個署名為中本聰的人,提出了革命性的構想:讓我們創造一種不受政府或其他任何人控制的貨币!這個想法堪稱瘋狂:一串數字,背後沒有任何資産支援,也沒有任何人負責,你把它當作錢付給對方,怎麼會有人願意接受?

關于很火的【比特币】
但是,狂想居然變成了現實。随後的幾年,在全世界無數愛好者的支援下,比特币網絡運作起來了,越來越多的人和資本參與,星星之火,終成燎原。剛剛過去的2017年,比特币迎來了爆發式的增長,從年初的1000美元,最高漲到了2萬美元,全世界都為之震動,上到政府,下到普通百姓都在關注。事實就是比特币已經并将繼續改變世界。
關于很火的【比特币】
新聞媒體往往隻關注它的火爆表現,忽視或者無法回答一些基本的問題。

  • 比特币的原理是什麼?
  • 為什麼這個無人管理的體系可以成功運作?
  • 比特币交易的流程是怎麼回事?
  • 它與區塊鍊又是什麼關系?

下面,我嘗試回答這些問題,希望幫助大家了解比特币。抛開技術細節,還是很容易解釋的。

有一點說明,本文隻讨論技術問題,不涉及如何投資比特币,更不會預測價格走勢。事實上,我也不知道,如果我知道怎麼發财,可能就不會在這裡寫部落格了。

一、非對稱加密

首先,了解比特币,必須了解

非對稱加密

你可能聽說過這個詞,所謂非對稱加密,其實很簡單,就是加密和解密需要兩把鑰匙:一把公鑰和一把私鑰。

關于很火的【比特币】

公鑰是公開的,任何人都可以擷取。私鑰是保密的,隻有擁有者才能使用。他人使用你的公鑰加密資訊,然後發送給你,你用私鑰解密,取出資訊。反過來,你也可以用私鑰加密資訊,别人用你的公鑰解開,進而證明這個資訊确實是你發出的,且未被篡改,這叫做數字簽名(更詳細的介紹請看

《什麼是數字簽名》

)。

現在請設想,如果公鑰加密的不是普通的資訊,而是加密了一筆錢,發送給你,這會怎樣?

首先,你能解開加密包,取出裡面的錢,因為私鑰在你手裡。其次,别人偷不走這筆錢,因為他們沒有你的私鑰。是以,支付可以成功。

這就是比特币(以及其他數字貨币)的原理:非對稱加密保證了支付的可靠性。

由于支付的錢必須通過私鑰取出,是以你是誰并不重要,重要的是誰擁有私鑰。隻有擁有了私鑰,才能取出支付給你的錢。(事實上,真實的交易流程稍有不同,私鑰保證的不是取出支付給你的錢,而是保證隻有你能把這些屬于你的錢支付出去,詳見後文。)

二、比特币錢包

對于比特币來說,錢不是支付給個人的,而是支付給某一把私鑰。這就是交易匿名性的根本原因,因為沒有人知道,那些私鑰背後的主人是誰。

是以,比特币交易的第一件事,就是你必須擁有自己的公鑰和私鑰。

你去網上那些比特币交易所開戶,它們會讓你首先生成一個比特币錢包(wallet)。這個錢包不是用來存放比特币,而是存放你的公鑰和私鑰。軟體會幫你生成這兩把鑰匙,然後放在錢包裡面。

關于很火的【比特币】

根據協定,公鑰的長度是512位。這個長度不太友善傳播,是以協定又規定,要為公鑰生成一個160位的指紋。所謂指紋,就是一個比較短的、易于傳播的哈希值。160位是二進制,寫成十六進制,大約是26到35個字元,比如 1BvBMSEYstWetqTFn5Au4m4GFg7xJaNVN2。這個字元串就叫做錢包的位址,它是唯一的,即每個錢包的位址肯定都是不一樣的。

關于很火的【比特币】

你向别人收錢時,隻要告訴對方你的錢包位址即可,對方向這個位址付款。由于你是這個位址的擁有者,是以你會收到這筆錢。

由于你是否擁有某個錢包位址,是由私鑰證明的(具體的證明方法稍後介紹),是以一定要保護好私鑰。這是極其重要的,如果你的私鑰被偷了,你的比特币也就等于沒了,因為他人可以冒用你的身份了,把錢包裡面的錢都轉走。

同樣的,你向他人支付比特币,千萬不能寫錯他人的錢包位址,否則你的比特币就支付到了另一個不同的人了。

三、交易過程

下面,我把整個流程串起來,看看比特币如何完成一筆交易。

一筆交易就是一個位址的比特币,轉移到另一個位址。由于比特币的交易記錄全部都是公開的,哪個位址擁有多少比特币,都是可以查到的。是以,支付方是否擁有足夠的比特币,完成這筆交易,這是可以輕易驗證的。

問題出在怎麼防止其他人,冒用你的名義申報交易。舉例來說,有人申報了一筆交易:位址 A 向位址 B 支付10個比特币。我怎麼知道這個申報是真的,申報人就是位址 A 的主人?

比特币協定規定,申報交易的時候,除了交易金額,轉出比特币的一方還必須提供以下資料。

  • 上一筆交易的 Hash(你從哪裡得到這些比特币)
  • 本次交易雙方的位址
  • 支付方的公鑰
  • 支付方的私鑰生成的數字簽名

驗證這筆交易是否屬實,需要三步。

第一步,找到上一筆交易,确認支付方的比特币來源。

第二步,算出支付方公鑰的指紋,确認與支付方的位址一緻,進而保證公鑰屬實。

第三步,使用公鑰去解開數字簽名,保證私鑰屬實。

經過上面三步,就可以認定這筆交易是真實的。

四、交易确認與區塊鍊

确認交易的真實性以後,交易還不算完成。交易資料必須寫入資料庫,才算成立,對方才能真正收到錢。

比特币使用的是一種特殊的資料庫,叫做區塊鍊(blockchain),詳細的介紹請看

《區塊鍊入門教程》

。本文隻讨論交易如何寫入區塊鍊。

首先,所有的交易資料都會傳送到礦工那裡。礦工負責把這些交易寫入區塊鍊。

根據比特币協定,一個區塊的大小最大是 1MB,而一筆交易大概是500位元組左右,是以一個區塊最多可以包含2000多筆交易。礦工負責把這2000多筆交易打包在一起,組成一個區塊,然後計算這個區塊的哈希。

關于很火的【比特币】

計算哈希的過程叫做采礦,這需要大量的計算。礦工之間也在競争,誰先算出哈希,誰就能第一個添加新區塊進入區塊鍊,進而享受這個區塊的全部收益,而其他礦工将一無所獲。

一筆交易一旦寫入了區塊鍊,就無法反悔了。這裡需要建立一個觀念:比特币不存放在錢包或其他别的地方,而是隻存在于區塊鍊上面。區塊鍊記載了你參與的每一筆交易,你得到過多少比特币,你又支付了多少比特币,是以可以算出來你擁有多少資産。

五、礦工的收益

交易的确認離不開礦工。為什麼有人願意做礦工呢?

比特币協定規定,挖到新區塊的礦工将獲得獎勵,一開始(2008年)是50個比特币,然後每4年減半,目前(2018年)是12.5個比特币。這也是比特币的供給增加機制,流通中新增的比特币都是這樣誕生的。

你可能看出來了,每4年獎勵減半,由于比特币可以分割到小數點後八位,那麼到了2140年,礦工将得不到任何獎勵,比特币的數量也将停止增加。這時,礦工的收益就完全依靠交易手續費了。

所謂交易手續費,就是礦工可以從每筆交易抽成,具體的金額由支付方自願決定。你完全可以一毛不拔,一分錢也不給礦工,但是那樣的話,你的交易就會沒人處理,遲遲無法寫入區塊鍊,得到确認。礦工們總是優先處理手續費最高的交易。

目前由于交易數量猛增,手續費已經水漲船高,一個區塊2000多筆交易的手續費總額可以達到3~10個比特币。如果你的手續費給低了,很可能過了一個星期,交易還沒确認。

一個區塊的獎勵金12.5個比特币,再加上手續費,收益是相當可觀的。按照目前的價格,可以達到100萬~200萬人民币。想想看,運氣好的話,幾分鐘就能挖到一個區塊,拿到這樣一大筆錢,怪不得人們對挖礦趨之若鹜。

六、區塊的擴容

說過,比特币協定規定,平均10分鐘誕生一個區塊。區塊的大小隻有 1MB,最多隻能包含2000多筆交易。也就是說,比特币網絡每10分鐘,最多隻能處理2000多筆交易,換算一下,就是處理速度為3~5筆/秒。

全世界的比特币交易這麼多,可是區塊鍊每秒最多隻能處理5筆,這已經成為制約比特币發展的一個瓶頸。

很早就有人呼籲,改革比特币協定,提升處理速度。這件事在2017年8月有了一點眉目,當時區塊鍊發生了一次分叉,誕生了一個新協定,稱為 

Bitcoin Cash

(簡稱 BCH)。這種新貨币其他方面都與比特币一緻,就是每個區塊的大小從 1MB 增加到了 8MB,是以處理速度提升了8倍,手續費也低得多。該協定是對原有區塊鍊的分叉,是以當時持有比特币的人,等于一人獲贈了一份同樣數量的 BCH。

關于很火的【比特币】

BCH 等于創造了一種新貨币,還有人提議,原始比特币的區塊大小提升到 2MB,這稱為 

SegWit2x

 。這個建議原定于2017年11月實施,但是最後一刻由于缺乏共識,就被取消了,目前還在讨論中。

七、點對點網絡

比特币是一個全世界的開放網絡,隻要你有伺服器,就能加入這個網絡,成為一個節點。每個節點都包含了整個區塊鍊(目前大概 100多 GB),并且節點之間時刻不停地在同步資訊。

關于很火的【比特币】

當你發生了一筆支付,你所在的節點就會把這筆交易告訴另一個節點,直至傳遍整個網絡。礦工從網上收集各種新發生的交易,将它們打包寫入區塊鍊。一旦寫入成功, 礦工所在節點的區塊鍊,就成為最新版本,其他節點都會來複制新增的區塊,保證全網的區塊鍊都是一緻的。

最後,你所在的節點也拿到了最新的區塊鍊,進而得知你早先的那筆交易,已經寫在裡面了,至此交易确認成功。

八、還有一個問題

寫到這裡,我就介紹完了比特币的基本知識,希望你已經明白了比特币是怎麼回事。但是還有一個根本的問題,我沒有回答:比特币的本質到底是什麼?

說到底,比特币隻是區塊鍊的一條記錄,是憑空生成的,為什麼可以當錢用?舉例來說,礦工獲得12.5個比特币的獎勵,其實就是區塊鍊有一個記錄:"xxx位址獲得12.5個比特币"。正是這行記錄,導緻該礦工獲得了大筆金錢。如果區塊鍊突然增加了一條記錄,記載你的位址獲得了1000個比特币,你就真的會有1000個比特币。這到底是為什麼?

這篇文章已經夠長了,這個問題就留到下次再談,歡迎關注本系列的最後一篇文章

《加密貨币的本質》

九、參考連結

繼續閱讀