友快網

導航選單

【大咖說】阮一峰:我對比特幣這個玩意感到好奇是由什麼技術支撐的

最近這段時間,虛擬貨幣頻頻衝上熱搜,比特幣、以太坊、狗狗幣各種技術名詞層出不窮,搞得大家眼花繚亂的。

而且虛擬機器貨幣大漲大跌的事情頻頻出現,不過講真這東西我沒有碰,因為秉持著「

看不懂的東西,絕不碰

」。否則自己就是一個賭徒,再加上搞這種,每天肯定會花大量時間來看盤,極大消耗的精力。

正所謂內行看門道,外行看熱鬧,咱們也不能光吃瓜看熱鬧,也得看看裡面的門道。

身為技術人,我也對

比特幣這個玩意到底是什麼

感到好奇,是由什麼技術支撐的呢?

我在「阮一峰」的部落格那,發現他之前寫這篇很通熟易懂,是一個能瞭解比特幣來龍去脈的機會,特此分享給大家。

比特幣的開始

比特幣(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),並且節點之間時刻不停地在同步資訊。

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

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

最後,插播廣告

CUT/IQ Team Leader臨床試驗和影象質量分析主管(臨床背景)

DL Protocol Developer協議開發工程師

SW Design Engineer軟體開發工程師

RF Engineer射頻工程師

Hardware Engineer(Power)硬體工程師(電源)

R&D Process Improvement Engineer流程改進工程師

Mechanical Engineer機械工程師

Equipment Engineer裝置工程師

RF Process Engineer射頻工藝工程師

Process Engineer工藝工程師

Installation Enginee磁共振安裝工程師

Software Engineer軟體開發工程師

Process Engineer生產工藝工程師

Factory Installation Engineer工廠安裝工程師

Sr。 HW Engineer高階硬體工程師

Senior Quality Engineer高階質量工程師

參考連結

How Bitcoin works , by Timothy B。 Lee

Bitcoins the hard way: Using the raw Bitcoin protocol, by Ken Shirriff

掃碼加好友,加入海歸Python程式設計和人工智慧群

上一篇:魏延、楊儀之爭,都沒落得好下場,他們兩個究竟有什麼矛盾?
下一篇:《仙劍奇俠傳九野》x《軒轅劍:蒼之曜》雙世聯動已上線,竟現木甲靈兒、月如?