search
比特幣深層技術原理淺析

比特幣深層技術原理淺析

中成才

渡鴉區塊鏈專欄作者

這是一篇主要針對技術小白的文章。本文盡量使用通俗易懂但又不失要義的文字,帶你深入剖析當前備受追捧的比特幣背後的深層技術原理,最後會簡要介紹一下業界市場的現狀。

目前加密貨幣這個圈子可簡要分為幣圈和鏈圈,幣圈專註於投資炒幣,而鏈圈專註於區塊鏈(blockchain)技術的創新發展。雖然幣圈是高回報的利益驅動,但也正是他們的天使資金推動了這個領域的蓬勃發展。本文將使用「加密貨幣」作為與比特幣同類事物的統稱,也有稱做「電子貨幣」,中本聰(Satoshi Nakamoto)本人稱比特幣(Bitcoin)為「電子現金(Electronic Cash)」。

為什麼應該關注比特幣

近一年來,加密貨幣的價格加速飆升,屢創新高。無論是比特幣(BTC)、以太幣(ETH)、創新幣(泛指區別於前者而有一些有意義的技術創新的加密幣)、山寨幣還是合約代幣(通過智能合約 smart contract 創建的 tokens),基本都是暴漲的大趨勢,而尤數比特幣最為金貴!一方面它是加密貨幣的鼻祖;另一方面總量有限(2100萬個);其三,挖礦難度極高(不亞於當年機械化的淘金熱潮)。相比於樓市的高不可攀、股市的動蕩,幣價的持續高漲總是讓人按捺不住,大批投資者紛紛湧入炒幣的陣營。畢竟這種低投入高收益的機會千載難逢!

在這個新興領域,加密幣受到追捧並非僅僅因為炒作,還有其內在的動因。雖有泡沫,但一方面市場剛需在增加,另一方面更多的是對技術的認可、對未來的憧憬和期待。簡單講,加密貨幣的底層技術(區塊鏈)將重構世界經濟體系。而這種變革也將如同互聯網的迅猛發展歷程,腳步只會更快!這可以從各國政府、銀行業在該技術領域上的投入力度、以及俄羅斯總統普京會見23歲的以太坊創始人(Vitalik Buterin)事件上窺見一斑。對我們普通民眾來說,也將能夠切身享受到區塊鏈技術帶來的便利。因此,儘早了解加密貨幣及區塊鏈技術一定是有好處的。

比特幣作為加密貨幣的鼻祖,其協議構建了歷史上第一個具有[在互聯網上進行點對點價值傳輸]能力的去中心化網路系統。它向世人展示了去中心化的力量:在沒有第三方信任背書的前提下,仍可保證資金安全。它是一個沒有國家擔保的銀行,但沒人能搶走你的錢。同時也揭示了在互聯網[信息高速公路]上架設[價值高速公路]的可能性。比特幣的歷史意義不言而喻,在業界擁有神聖的地位。而其協議中明晰的密碼學邏輯、簡單粗暴卻又無懈可擊的共識機制,是入門加密貨幣或區塊鏈知識的首選對象。

就在圈內人士炒幣、投資ICO、創造新鏈、滲透實體商業應用造福人類鬧得如火如荼、不亦樂乎之時,可能圈外人士還一臉茫然、將信將疑的不知所措!比特幣靠譜嗎?是不是傳銷?微信支付寶不夠嗎?我們有法幣還要比特幣幹嘛?比特幣厲害在哪?它到底解決了什麼問題?都是怎麼做到的?去中心化有什麼用?能吃嗎?……帶著這些問題,讓老司機帶你一步步揭開比特幣的神秘面紗。

一、比特幣是什麼

1. 由來

2008年10月31日,中本聰通過一個密碼學小組發送了一封郵件,首次公布了比特幣白皮書《比特幣:一個點對點電子現金系統》(Bitcoin: A Peer to Peer Electronic Cash System),提出了比特幣網路。其特點如下(摘自量子鏈Qtum白皮書):

  • 防止雙重支付;

  • 無鑄幣廠或其他信任方;

  • 參與者可匿名;

  • 通過工作量證明方式發行新幣;

  • 基於工作量證明的新幣發行過程中,也同時阻止了雙重支付的發生。

在2009年1月3日,比特幣的創始區塊被挖出,並於2009年1月12日在第170個區塊發生了第一筆轉賬交易(從中本聰到 Hal Finney),從此開啟了其作為一種點對點的價值交換網路的蓬勃發展時代。比特幣網路的價值從零開始,到今天已經成長為一個價值約600億美金的點對點支付網路。

話說,比特幣創始區塊的幣基參數提到了倫敦《泰晤士時報》的一則報道:

2009年1月3日,財政大臣拯救銀行。

這被看成比特幣發明的政治動機,同時也很好的證明了第一個區塊的打包時間是在上述報道出來之後。

我們常說的比特幣是指在比特幣網路中產生併流轉的加密貨幣。而比特幣網路本質上是一個公開的分散式賬本,也就是人手一本賬,誰都可以查看並審核其他人有沒有造假:有沒有非法鑄幣、有沒有誰把一筆錢同時花給幾個人(雙重支付問題,因為互聯網上的信息是可以無限複製併發給任何人的,這也是歷史上所有做電子現金的人首要解決的問題,但顯然在此之前都失敗了)等,只不過你可能只認識自己和與自己有支付往來的人,而不知道其他人是誰(匿名性),但這並不影響你審查造假,如果有,可以說不!如果有半數以上的人都說不(51%攻擊/共識),那這個賬會被丟棄,就像沒有發生過,除非重來直到半數以上的人(其實審核過程是由運行比特幣協議程序的網路節點自動完成)都同意。這是怎麼做到的呢?請看下文。

二、去中心化

談到分散式賬本,得先談談去中心化。去中心化的概念並不新鮮,比如我們熟悉的電子郵箱,每個公司都可以搭建屬於自己域名後綴的郵件伺服器,而這些不同的郵件伺服器之間可以互相收發郵件,假如我註冊了域名叫 dog.com,然後搭建了郵件伺服器並註冊自己的郵箱叫 zhongchengcai@dog.com,該郵箱可以給 @qq.com 郵箱發郵件。那它有什麼優勢呢?如果我的 @dog.com 伺服器掛掉了,不影響 @qq.com 郵箱與 @aliyun.com 郵箱發郵件。

可能你突然要問了,為什麼 qq 和 aliyun 可以互發郵件,但微信不能跟支付寶互相聊天?這就是中心化的問題所在。微信和支付寶的聊天系統都是中心化的(與去中心化相反),他們技術上其實是可以做到互聯互通的,但很顯然,誰願意把自己賴以生存的根基與人共享呢!大家或許都記得有那麼幾次微信突然用不了,說是機房的光纜被挖斷了。這凸顯了中心化的弊端。那麼如果某一天支付寶機房也癱瘓了,你支付寶里的錢?(當然不會丟啦,有國家監管,大可放心)

但這些危機對於比特幣網路來說,都不是問題。它沒有一個中心化的公司或組織來控制這些伺服器,每個人都可以選擇運行你相信或認可的那個[支持比特幣協議的]程序,這個程序運行時就是一個伺服器或節點,它與成千上萬的別人的比特幣程序節點相連,它們互相平等,沒有誰管理控制誰。這些節點共同維護比特幣網路,部分節點的加入、退出、掉線都不會影響整個網路的健壯運行。除非全部同時掉線,顯然這是不可能的。

三、交易與賬本

有了去中心化的分散式的運行比特幣協議的節點,前文提到分散式賬本,怎麼個分散式?其實就是每個節點複製賬本的一個備份,同時這個賬本里的賬單也由這些節點共同記錄完成。那...怎麼記?

  • 導讀

    節點運行程序只是幫人完成重複勞動,它運行的每一步都體現了設計它的人的意圖,這包括記賬。但是如果記賬方式採用人們的傳統方式,你翻到這頁寫一筆,我翻到那頁寫一筆,這麼多人同時進行,顯然一下就亂套了。

1. UTXO

我們不妨先來分析一下,對於一個貨幣支付系統,到底要記什麼?無非就是誰給誰錢了(轉賬),或者誰的錢少了,少的去哪了,而誰的錢又多了(還是轉賬,只不過記錄方式不同)。這個「誰」都可以用一個賬戶id來表示,前者可以記錄為從一個賬戶id_a到另一個賬戶id_b的轉賬明細,後者可以記錄為給賬戶id_x減去n個幣,同時給賬戶id_y加上n個幣。這兩種方式正是當前比特幣和以太坊的兩種不同記賬方式。前者稱為UTXO(Unspend Transaction Output)模型:未花費的交易輸出;後者稱為賬戶(Account)模型。比特幣記錄的便是交易明細,其中收款者 id 被稱為地址。我們可以把一筆錢簡稱為一個UTXO。

2. 區塊鏈

知道了記什麼,那麼還是那個問題:怎麼記?我們並沒有更好的辦法,仍然只能一頁頁的來,而且一個個的來。也就是說,我們不但不能改動前面的賬本頁,在一段時間內只能新啟一頁,而且還得每個交易都排著隊一個個的審核確認。我們把這個「頁」構造為數據「區塊(block)」,並把區塊按頁碼順序「鏈接(chain)」起來,即構成了賬本「區塊鏈(blockchain)」(聽上去倒是挺簡單的嘛!——我都說了簡單粗暴)。怎麼鏈接?紙頁可以用線串,難不成...?嗯,還真有:我們叫它哈希(hash)指針。

哈希指針是給前一個數據區塊生成哈希值,然後存儲在後一個新產生區塊的頭部。它不僅可以唯一標識前一個塊是誰,而且還可以檢測前一個塊是否被篡改:如果前一個區塊的交易被篡改,那麼算出來的哈希值就跟后一個區塊頭部存儲的哈希指針不一致。這可以幫助新加入的節點在網路中查找歷史區塊時鑒別真偽,也可用於審核最新產生的區塊是否合法(對於新區塊這還不夠)。在比特幣共識協議中,哈希指針更有其獨特的作用。後文再詳細論述。

區塊鏈是比特幣的底層技術,比特幣區塊鏈的一個數據塊大小目前的上限是1M,但即將要擴容到2~4M。

哈希到底是個什麼東西?

它是「hash」的音譯。指代一種摘要演算法,這種演算法可以將一個很大的數據內容(如:ppt文件、電影或程序包)用一個簡短的字元串表示。厲害之處在於:只要那個文件有一點改動(即使一個位元組、一個標點符號),那麼重新算出來的這個哈希字元串就會跟著變化,往往跟原始的那個有很大不一樣,一眼就能看出來。
那...這能幹什麼用呢?如果你發現有人偷偷改了你的ppt, 比起一個字一個字的去對比檢查,直接生成一個哈希值進行對比豈不是方便多了。
常用的哈希演算法有md5, sha1, sha2等,可以在這裡體驗或問度娘下載使用。區塊鏈使用sha256(隸屬於sha2族)。

3. 密碼學

前文有簡單提到過匿名性,那是不是意味著任何人包括系統本身都不知道任何一個地址的真實身份是誰。那麼系統又如何知道這個地址的錢誰有許可權支配,以及收款人...?

這要歸功於數學的奧妙和密碼學的成功。這裡不多展開。簡單講,你既可以用同一個密碼和相對應的加密演算法去加/解密任何電子文檔內容(對稱加密),又可以用某種演算法先生成一對密碼(密鑰對),一個叫公鑰,另一個叫私鑰,然後用公鑰加密即可用私鑰解密,用私鑰加密又可用公鑰解密(非對稱加密)。比特幣的公私鑰使用了橢圓曲線密碼演算法secp256k1。而比特幣中的密碼學還包括哈希證明及謎題,後文再細講。

在比特幣系統里密碼是怎麼使用的呢?先生成一對公私鑰,私鑰一定要藏好。然後把公鑰通過某種轉換(SHA256 + RIPEMD160 hash演算法)生成一個字元串,即比特幣地址,該地址即可發給任何人,讓他們給你付款(只要人家願意)。就像支付寶收款碼,你也可以生成一個收款二維碼貼在任何地方。不過你以字元串方式發給別人的地址其實通常會再進行一次轉換(Base58編碼),以便更短更可讀。如果還不了解可下載手機錢包app體驗一下:blockchain.info、Jaxx等。

比特幣以及其他類似貨幣的整個技術體系都是以密碼學為基礎,這正是筆者為何稱其為「加密貨幣」的原因。

4. 提款權

有了公私鑰密碼,確認身份就好辦了,我私鑰加密的內容只有我這個公鑰可以解開。這正是比特幣協議驗證身份的基礎:

你想要花掉一個UTXO的錢給另一個地址,就看你有沒有提款權。

而你的這個UTXO本身也是由別人支付給你的,系統曾經驗證過他的提款權。

提款權的驗證由一組簡單的腳本程序來完成,這裡不作展開。一筆交易包括輸入(要轉出的那些交易的hash ID、公鑰、提款權簽名)、輸出(收款人的地址腳本及數量)、本交易hash ID以及元信息。需要注意的是,對於本交易並不會驗證輸出的收款地址,因為無法驗證也沒必要(收款人需要自行保證正確性,除非他想要丟掉這筆錢),只有在收款人想花掉它的時候才一併驗證,收款地址是提款權驗證時的一個必須參數。那麼本交易僅需驗證輸入參數提供者是否對其指定的UTXO有提款權。

需要注意的是:一個UTXO每次都得花完。你說我不想給人家這麼多錢!那可以同時

支付給自己的另一個地址,不然

沒花完的,就被礦工撿去了!

什麼?Are you joke me?是的,礦工就是撿漏的,這也就是所謂的交易費。

  • 話說,即將在數月內實施的隔離驗證方案將改變交易的數據結構。

5. 資金安全

前文提到,私鑰一定要藏好。只要你不泄露收款地址的那個公鑰對應的私鑰,就沒人能取走你的錢。也許有人想到了暴力破解,或者碰巧正好別人生成了跟我一樣的密鑰對怎麼辦呢?這或許是個問題,但你知道比特幣的橢圓曲線密碼演算法能生成多少個不同的密鑰對嗎?

理論上比銀河系中所有星球上的沙子還要多(假設都跟地球一樣)。

不過也許你會想到應對措施:借鑒銀行的方法重試3次就凍結。其實這是不行的,銀行是中心化的黑盒子,每個環節都控制在他們手裡。但對於一個去中心化的公開賬本,我可以先拿到你UTXO的收款地址,用本地計算機窮舉出你的私鑰之後再發送一次交易(不需要3次),只不過這要算出來得好多萬年呢!此時你一定想到了量子計算機,不過仍然不用擔心,首先已經有了抗量子計算的密碼演算法;其次,社區一直在積極應對當前面臨的各種問題,到時候提前升級節點程序即可。

6. 雙重支付

前文論述了如何驗證身份,應對盜取。但是如果一個合法的身份通過發送多筆交易把一個UTXO同時支付給好幾個地址,又該怎麼應對呢?

對每筆交易的驗證,除了提款權,其實還有是否已花費的驗證。

這些驗證在一個區塊的產生過程中將順序執行,即:如果一個UTXO在歷史上任何一筆交易中被花費,那麼它在後續另一筆交易中一定會被檢測駁回;同時由於塊的產生也是順序的,這意味著在任何情況下,雙重支付交易總能被檢測,這得益於區塊鏈的數據結構和UTXO記賬模型,雙重支付的問題終於得到解決。事實上,還有一種情況會導致雙重支付:區塊鏈分叉,將在後文討論。

7. 匿名性

前文提到的「驗證身份」其實並不准確,比特幣交易僅需驗證提款權而非身份。在整個比特幣網路中,手握密鑰走天下,沒人管你是誰。這便是其匿名性。也許你聽說過前不久的比特幣勒索病毒(它只是勒索讓你給它支付比特幣,而不是攻擊比特幣網路系統),為什麼不勒索美元、歐元或人民幣?這也正是匿名性的優勢所在。也許你會問:

匿名性豈不是會助長犯罪?

確實是這樣的,著名的暗網(deep web)黑市交易網站「絲綢之路(Silk Road)」就是一個例子,僅支持比特幣。但任何事物都有兩面性,就看怎樣使用它。菜刀可以切菜,也可以...?殺豬。

匿名性真好,我豈不是可以為所欲為了?To young to simple, 警察蜀黍想找到你還是很容易的。絲綢之路的創建者已被FBI拘捕(暗網本身就具有很強的匿名性,但仍然被找到)。

四、新幣發行與挖礦

先簡要回答幾個問題:

  • 礦工是誰

比特幣網路節點就是礦工,它們驗證交易、爭奪出塊權,同時也維護著整個比特幣網路的健壯運行。

  • 為什麼要挖礦

獲得獎勵報酬(可是很賺錢的呢!利益驅使,大部分是這樣的);

就是想維護比特幣網路(情懷,估計是占很少數吧)。

  • 那又是為什麼叫「挖礦」呢?

比特幣挖礦所經歷的階段與上世紀的淘金熱挖礦歷史非常相似。

黃金挖礦從個人拿著盤子在沙裡淘金,到一小群人用流沙槽來淘金,到一群人用水沖刷金山來淘金再到現代化機械露天挖礦;比特幣挖礦則從個人用CPU電腦,到GPU,到FPGA定製硬體再到ASIC專用晶元。兩者都是由個人操作為主演變為大公司專業運作。目前比特幣的挖礦主要由全球幾大專業礦池在運作。

1. 交易費

維護比特幣網路節點的運維成本日趨高昂,而礦工的默認行為也早已變為「費用替代策略」,即優先處理交易費較高的交易(包括對一個雙重支付的二選其一的優先權)。交易費的收取方式便是前文提到的「撿漏」,即當發送一筆交易時,支付給收款地址的數量比可花費的要少一點點,留下的這部分便是交易費。那具體應該留多少呢?通常錢包會給你一個建議值,如果不想支付任何費用,最終還是會被確認的,只是不知道需要等多久。由於受限於區塊大小1M的限制,而當前網路的待確認交易量遠大於該限制,導致網路非常擁堵,所以費用太低的話,就遙遙無期啦。

交易費的巧妙之處還在於保證了總量不會流失。

2. 挖礦(新幣發行)

那麼除了交易費以外,礦工還有其它收入來源嗎?當然有。每一個創建新區塊的礦工都可以寫一筆交易支付給自己,但這筆交易比較特殊:沒有輸入。這叫做幣基交易,是產生新幣的過程,也是給礦工的獎勵。礦工基本都是逐利的,它們付出高昂成本維護比特幣網路,大多不是因為情懷,而只是為了賺取這個獎勵和交易費,這就是所謂的挖礦。試想:

如果沒有這些交易費和獎勵作為收入來源,礦工入不敷出,紛紛退出挖礦,那比特幣網路也將不復存在。

這個激勵措施也是比特幣協議設計的另一個巧妙之處。

3. 網路調整

不過呢,給礦工的獎勵每過四年將減半,當前是25個比特幣,最終會減少到0,總量的2100萬個便是據此推算出來的。注意總量並不是確定的2100萬,具體是多少會有出入,無法確定確切的數目。因為

比特幣平均每10分鐘挖出一個數據區塊(block)。

快則能到6分鐘,慢則10幾分鐘,一年到底能出多少個塊也並不確定。

由於全網的算力總在不斷增強(競爭),那麼出塊速度也會不斷變快,如果一直持續下去豈不是越來越快?中本聰早就考慮到了這個問題,因此設計為

每兩周調整一次難度係數(其實是每2016個塊調整一次)。

慢了就調快,快了就調慢。新的問題來了:怎麼調?礦工又為什麼必須得照做?

五、工作量證明與51%攻擊

前文一直沒有談到一個問題:由誰創建區塊。

目前一個塊獎勵25個比特幣,加上交易費,按照當前的價格,大概50萬RMB。如果都讓我一個人來挖,每10分鐘入賬50萬,一天7200萬。除去成本,兩天完成小目標:一個億 ...

簡直不能更美!

1. 出塊權

現實總是殘酷的,遇到這種好事情人們只會做一件事:搶!比特幣是競爭挖礦,那就需要有一個標準來判定競爭的輸贏。前文提到哈希指針,它是一個有256個比特位的大整數,有大小之分;還提到每兩周調整一次難度,這會產生一個難度係數。中本聰設計了一個簡單的規則:結合難度係數先算出一個值作為限定範圍,即哈希指針的最大值。直觀來看,可簡單認為就是

限定所生成的哈希指針字元串前面0的個數,顯然0越多,難度越大。

所有礦工誰先生成該範圍內的哈希指針值,誰贏得出塊權。

  • 這裡的出塊權是一個抽象的概念,實際上並非這麼一個簡單的競爭過程。

2. 哈希謎題

由於哈希函數的不可預測性,使得要找到這個值並沒有捷徑。這是一個數學難題,被稱為哈希謎題。假設哈希函數的輸出值分佈是均勻的,則要使得每次輸出的運算結果

值落在限定值w範圍內的概率為:

w / 2^256

顯然w越小,每次成功的概率越小,要找到目標值的平均運算次數就越多。而由於礦工單位時間內的運算次數跟算力成正比,也就意味著,算力的提升可以縮短找到的時間。礦工們在解決哈希謎題上的比拼,就是算力的比拼;反過來,出塊的數量比例也反映了礦工在全網的算力比例。這種基於難度調整的哈希謎題設計,也使得限定每10分鐘一個的平均出塊速度成為可能。

3. 工作量證明

前面已經知道了判定標準,那怎麼生成呢?在確認將要納入的全部交易(交易全都合法並且總量不超過塊大小的上限)之後,需要做兩件事:

  • 修改隨機數。不重複的更改正在試圖創造的這個數據塊中的兩處隨機數:塊頭部和幣基交易中各一個,一般只更改頭部隨機數,如果在更改一圈之後還沒找到符合要求的哈希值,則修改幣基交易中的隨機數,這會觸發梅克爾樹(merkle tree)的重新生成並將改變傳導到樹根(root),樹根存儲在塊頭部;

  • 計算哈希值。將頭部數據作為輸入參數通過相關哈希演算法生成哈希值,並確認該值是否在限定範圍之內。

不停重複這兩個步驟,直到找到符合限定條件的哈希指針值。雖然要找到符合條件的值非常困難,但要驗證別人找到的是否符合條件卻十分容易,因為所有需要的數據都在塊里,那麼僅需計算一遍即可。

這整個過程其實是一個簡單粗暴的窮舉運算,沒有捷徑也無法偽造它,只能拼實力老老實實去一遍遍運算,付出多少便回報多少。那麼若一個礦工能夠生成一個合法的數據區塊,也就證明了其確實付出了實實在在的勞動,這被稱為工作量證明。它提高了維護比特幣網路的准入門檻,也增加了破壞網路的難度。

工作量證明在現實中也有很多例子,比如聯考:如果沒有付出辛勤的學習,是難以考出好成績的。10000小時理論,也是同樣的道理。

4. 自舉仲裁

但這還沒完,前面說到出塊權,那具體如何實施,誰來做裁判?在一個點對點的對等網路里,沒有誰能當得了裁判,因為你控制不了誰,也沒人願意聽你的。但這些節點會有個群體效應,或者說,全都是裁判。誰都不希望別人撿便宜,也沒人願意自己吃虧。那麼這是一個怎樣的過程呢?首先難度係數在整個網路里是達成一致的。這意味著,一個哈希指針確實符合要求的區塊在廣播到全網以後,一定會被大多數節點認可。那礦工要做的便是在挖到某塊B之後,儘快的把它廣播出去。此時如果大多數礦工在收到塊B的時候自己還沒有挖到符合要求的塊,它們會首先驗證塊B,通過之後,將立即基於塊B重新開始挖礦。

它們為什麼要這麼積極?因為如果不這麼做,將得不償失。如果有一個礦工X在收到塊B之後仍執意要繼續基於B之前的塊挖,會發生什麼呢?可能很快就挖到了塊C,也可能很久挖不到。如果挖到,立即將塊C廣播出去,那麼由於大多數其他礦工都基於塊B在挖了,當它們發現C和B產生了分叉,則很可能丟棄C。因為它們也會想:其它節點應該也是基於B在挖了,如果我基於C挖,我和X所在的這個分叉很可能追趕不上其它大多數基於塊B挖礦的那個分叉鏈的長度。比特幣協議有一條共識:

最長的鏈代表了最大的工作量。

所有節點都應該延長最長的鏈。研究表明:低於一半算力的節點所延長的分叉鏈,將永遠追不上超過一半算力的節點所延長的分叉鏈,而差距只會越來越遠。當短的鏈越來越得不到認可,它們的信心也會慢慢喪失:在這個分叉上挖到的塊獲得的獎勵,並不會被市場承認,市場也會害怕損失而只相信長鏈,這些獎勵賣不出去,無法獲得收益,最終導致放棄。因此,礦工都會有自知之明,會自覺的積極的維護長鏈。這是一種自舉效應,使得分叉的可能性得到收斂。這正是比特幣區塊鏈至今還沒有出現過分叉的原因。

5. 分叉

新的問題又來了:如果在某個時刻網路里有兩個礦工同時挖到區塊(肯定是不一樣的兩個塊)並廣播了出去,而一個礦工同時收到這兩個塊該如何處理?正常情況下,當驗證到一個塊合法,則會丟棄另一個塊。不過假設一定要作個選擇,那該選哪個呢?網路中難以統計當前哪個塊被大多數算力所支持,而只能靠時間來證明。經過時間的推移,各分叉鏈長度的差距將越拉越大,最終短的被迫放棄。事實上,由於比特幣網路的出塊時間很長,10分鐘足以完成全網同步,節點很容易檢測出分叉並立即糾正。即往往分叉只有一個塊高度,稱為孤塊。

6. 51%攻擊

前面提到,短的分叉鏈由於算力低於全網的一半,導致無法追上長鏈,而得不到承認。但假如我突然獲得了一台超級計算機,甚至超過全網的算力,此時我回滾到較早的某個塊高度開始分叉挖礦,很快分叉高度便超過了主鏈高度,此時會發生什麼呢?這其實就是所謂的51%攻擊。此時全網會不會放棄主鏈而接受這個分叉還很難說。顯然這會造成混亂,市場不知道該相信誰,分叉之前的一個UTXO可以分別在兩個分叉上各花費一次,都會被確認。但這會導致市場對比特幣逐漸失去信心,比特幣將會被拋棄,從而走向失敗。

7. 雙重支付攻擊

如果在非51%攻擊的情況下正常產生了短分叉,有人將一個UTXO發送了兩筆交易,分別在兩個分叉上被打包。而由於其中一個分叉最終一定會被丟棄,這個分叉上被打包的交易也隨之失效。那假如我作為收款人,明明前面看到這筆交易被打包廣播出來,過了一段時間卻發現被丟棄了,豈不是坑爹。這實際上是一種雙重支付攻擊。所以我們在進行比特幣轉賬的時候,通常應該等待確認6個塊左右,才能認為這筆交易是確定無疑的了。雙重支付攻擊成功的可能性會隨著確認數目的增加而指數級降低。

8. 共識協議與反作弊

本節所闡述的概念當中,用於確保比特幣賬本可靠無誤運行的核心要點正是基於難度調整的工作量證明,這套解決方案常被稱作比特幣的共識協議,即基於工作量證明的共識協議,簡稱 PoW(Proof of Work)。

前面講解了 PoW 的工作原理,它的厲害之處除了保障系統正確運行以外,其實還有 反作弊:

a. 假設沒有工作量證明,即沒有哈希謎題,意味著難度設定無法生效,導致無法保證出塊間隔,而出塊權也無法判定。任何節點都可以隨時打包區塊並廣播,收到區塊的節點即使根據難度去判定,可能永遠都得不到合法的區塊,同時難度調整也沒有了參考;而「最長的鏈代表共識鏈」的設定也無從談起,因為任何節點都可以毫無節制的在任意時間內打包任意長度的區塊鏈。這導致系統根本無法正確有序的運行;

b. 而有了工作量證明,情況完全反轉。哈希謎題決定了無法在短時間內找到合法塊(平均情況。因為是概率問題,必然存在極少極少的情況能夠在很短的時間內找到),這保證了10分鐘左右的出塊間隔;有了這麼長時間的間隔保證全網同步,節點很容易檢測到分叉亦能夠及時作出處理;出塊權有了判定標準,難度調整也有了依據,這驅動了正向循環。如果有少部分(比特幣網路的基礎設定是大多數51%以上節點是好人)節點試圖搞破壞,例如廣播不合法區塊,不按難度判定等,由於它們佔少數,其分叉鏈永遠追不上主鏈,因而作弊無法成功。

現在市面上可以看到許許多多的區塊鏈項目,它們創造了很多有噱頭的共識協議,如:權益證明、基於勞動量的貢獻證明、信用證明、基於網路帶寬或存儲量的服務質量證明等,這裡面有些是可以反作弊的,有些不可以,而有些能否反作弊得看具體代碼實現。如果做不到反作弊,這個區塊鏈是沒有價值的。因此在我們判斷一個項目好壞的時候,共識協議的反作弊能力是一個基本要點。有些雖然不能反作弊但也能正常運行,這導致了項目的欺騙性。因此更應該仔細考察其反作弊能力,否則一旦受到作弊攻擊,其市場信心將會驟降,token 價值亦蕩然無存。

六、比特幣的神聖地位

我們每個人都或多或少有一些英雄情結,有崇敬武松、諸葛亮、周公瑾的,有喜歡楊過、令狐沖、張無忌的,有嚮往超人、蜘蛛俠、變形金鋼的,也有信仰救世主的。他們要麼聰明絕頂,要麼神功蓋世,要麼英勇無敵、一身正氣,要麼令人敬仰、跪拜臣服。

我們每個人也都越來越離不開數字世界。要獲取信息,也要與外界交流。雖然信息化極大的方便了人們的生活,但有時候卻特別麻煩。比如每下載一個新的App,都需要註冊賬號;安裝了微信還得安裝QQ、脈脈、釘釘等,為什麼就沒有一個技術把這些問題全搞定?包括各家推出的智能家居設備也都局限於自家服務的全家桶,甚至我們的跨國轉賬成本非常高昂。大家也許覺得這很正常啊,本來就是這樣的啊。其實不然!原因就是前面去中心化部分講到的。而區塊鏈技術的開放性、匿名性和安全性將使得以前不可能的事情成為可能,在人工智慧和物聯網時代,亦將如同DNA般大放異彩!當然這需要從業者的積極開放共享心態,以及前瞻性的思維,而筆者也正在為推動實現這樣的目標而努力。

前面也說過,區塊鏈技術是比特幣的底層技術。比特幣不僅是一種加密貨幣,不僅使得價值高速公路成為可能,也給我打開了智能新經濟時代的大門。而其協議本身完全拼算力實力的簡單粗暴,也正如一位拿著板斧開天闢地的英雄,在這個暗流涌動的數字世界里屹立不倒!無論是黑客、病毒、DDoS攻擊亦或是演算法的發展、人工智慧的進步,都拿整個網路系統毫無辦法!自面世以來安全運行8年卻從未發生過一次事故包括down機(除了擁堵。這也是為了安全,慢工出細活嘛,成功的紐約共識大會推動了這個問題很快會被解決)。比特幣的劃時代創舉,奠定了其在從業者心中神一般的地位。

七、生態

雖然比特幣網路已運行8年多,但目前仍處於區塊鏈和加密貨幣的發展早期,生態圈內各個環節都在蓬勃健康發展,從錢包、礦機製造、挖礦池、交易所、媒體(如渡鴉區塊鏈)、區塊鏈服務網站(如info)、技術人才庫inblockchain到實體行業購物支付,ATM兌換取款,都已經很完善。目前已有很多國家把比特幣合法化了,如美國、日本等,甚至有小國家如委內瑞拉將其直接作為法定貨幣。而將其視為一種數字商品。早期常出現的交易所跑路事件,現在也基本沒有出現了。

1. ICO

除了加密貨幣的交易,還出現了一種新的募資方式,叫 ICO(Initial Coin Offerings 代幣首次公開發行)。傳統的創業天使投資通常由機構參與,一個估值,一筆大錢,流程複雜。但 ICO 模式對其進行了顛覆,使得每個人都有機會成為天使投資人,而且不限金額。基本原理是,通過以太坊智能合約生成要發行的代幣(token),只要投資者向這個合約地址發送指定的加密貨幣,便可以獲得相應數量的代幣。代幣具有加密貨幣的屬性,可以自由流通。顯然 ICO 將是未來投資的新模式,也是資產數字化的途徑。國內的 ICO 投資平台有ico365、icoage等。

2. 交易所

加密貨幣的產生除了挖礦,還有就是花錢購買。交易所就是提供[用法定貨幣去兌換加密貨幣]或者[加密貨幣互換]服務的平台。這裡的加密貨幣包括 ICO 產生的代幣。交易所就像銀行,甚至比銀行業務更複雜,除了放貸。由於監管的不同,他們的可操作空間也很大,對投資者的風險通常是可能會出現兌付危機,甚至卷錢跑路。目前很多國家都有很多交易所,的有雲幣網、比特時代等。也有提供線下撮合交易的平台,如幣信App等。

3. 騙局

但不得不吐糟的是,由於處在監管早期,存在法律的空白,這個行業目前仍然魚龍混雜,亂象叢生。主流機構大力投入,開源社區積極貢獻,各種區塊鏈峰會也絡繹不絕,看似一片欣欣向榮的景象,卻也為騙子營造了滋生的土壤。各種山寨幣如雨後春筍,抄襲造概念的新鏈輕鬆圈錢 ICO,圈內戲稱就差狗鏈、拉鏈了。

韭菜年年有,今年何其多。由於今年加密貨幣的暴漲,讓很多早期投資者賺的盆滿缽滿,很多人抱著十投一中、一中也倍賺的心態,這滋長了騙子的信心。然而很多時候我們真的很難分辨一個 ICO 項目的好壞(山寨幣還好一點),好項目也可能因為團隊的能力或其他原因導致失敗。因此即使是完善了監管,也不能保證你的投資不會打水漂。總之,投資有風險,還是需要自己擦亮眼睛,仔細調研辨識。

除了亂象,圈內也有很多趣聞。許多人甚至包括一些專家、公知,在根本沒搞清楚比特幣、區塊鏈到底是什麼的情況下,到處發表高見;也有一些項目提出了很多偽概念偽命題;還有一些不良媒體製造恐慌,比如就在筆者寫此文的早晨一則假新聞說,以太坊創始人車禍死了!甚至還出現了區塊鏈示範村「一村一區塊村村相連接」,大家就當玩笑好了。

八、監管

根據央行對比特幣和交易所的態度,能夠看到一個詞「包容」。日前,李克強總理說:「如果沿用老辦法管制,就可能沒有今天的微信!」。總理舉此例,要求政府部門對待各類新業態、新模式要有「包容審慎」的態度。我們的民族曾經有過落後,也付出了慘痛的代價。我想,擁抱新事物將會是監管的大方向。

九、未來

區塊鏈仍然處於發展早期,還有很多很多問題有待解決,比如:交易吞吐量低、確認速度慢、交易費高、智能合約不夠安全、不能抗量子計算等等,這需要社區、技術開發者以及各種能人志士的共同創新努力;在商業應用拓展方面還有很多阻力,這需要推動大眾對相關知識的普及和認可。但放眼未來,區塊鏈技術的潛力和應用前景無限。一句話總結:它是世界經濟發展的新方向。

十、建議

也許說了這麼多,你還是沒能理解比特幣和區塊鏈這個新興領域。那麼不用著急,筆者本人也是花了很長時間的研究思考才慢慢了解的。這個領域本身也是偏重於技術,筆者給你的建議是,勤思考,轉換思維方式,摒棄傳統慣性思維,擁抱變化,接受新事物。

加入渡鴉

(全職記者∕實習生):cx@jqblockchain.com

熱門推薦

本文由 一點資訊 提供 原文連結

一點資訊
寫了5860316篇文章,獲得23293次喜歡
留言回覆
回覆
精彩推薦