【朋克智库】比特币详解1.0——区块链的萌芽
區塊鏈是堪比互聯網的偉大發明。
比特幣是區塊鏈世界的第一個殺手級應用。比特幣之于區塊鏈,就好比當年郵件之于互聯網。
要深入了解區塊鏈,第一站一定是比特幣。
不過在那之前,「朋克」先簡單介紹下區塊鏈世界的組成部分。
區塊鏈的世界里有各種鏈(Chain),就好比互聯網的世界里有各種網站。鏈又大致可以分成三種:公鏈、聯盟鏈、私有鏈。
公鏈是所有人都可以加入成為節點和參與記賬的鏈,聯盟鏈是只有聯盟內的組織可以參與記賬的鏈,而私有鏈就是僅有一個組織自己進行記賬的鏈。
公鏈之于區塊鏈,就好比操作系統對于電腦或手機。只不過,目前區塊鏈的水平大致等同于DOS系統對于電腦的階段。(但是,如果沒有DOS的鋪墊,哪來的windows系統;沒有塞班的鋪墊,又哪來的Android和IOS呢。)
所以第一站,「朋克」先講一講區塊鏈世界的開山鼻祖,比特幣。
一、比特幣的由來
比特幣是在2008年,由一個化名為中本聰(SatoshiNakamoto)的人提出的一種數字貨幣。目前一枚比特幣的價格約為10000美元(2018年2月27日),比特幣總市值約為1750億美元。(「朋克」提醒各位小伙伴,比特幣的最小單位是0.00000001枚,所以千萬不要以為買比特幣必須一枚一枚的買)。
二、數字貨幣怎么理解?
簡單的理解,數字貨幣就是一種既不需要紙幣,也不需要金銀銅的貨幣,所有的貨幣都是以數字的形式存儲在網上。這個乍一聽似乎覺得非常難以理解,但是仔細想想,現在有多少人是經常使用紙幣的呢?相信大多數小伙伴小額用支付寶微信,大額用銀行轉賬。所以從某種意義上來說,大家的銀行存款也都是一串數字而已。
那么比特幣(以及區塊鏈中的其它數字貨幣)與這種銀行數字存款最大的區別是什么呢?
銀行系統是由銀行作為中心化的機構,有著中心化的賬本,進而控制所有的交易及記錄。比特幣則是一個沒有中心化機構的支付系統。那可能大家會想,那這樣的話,誰來進行記賬呢,誰又能保證交易的正確性呢?
三、分布式賬本
沒有中心化的賬本咋辦?
這個問題好解決。要是沒有一個中心化的機構來記賬,那就大家一起記賬唄。所有人一起記賬,用去中心化的賬本代替了中心化的賬本,并且由于賬本是公開的,并且所有人都可以進行記錄和驗證,從而保證了賬本的可靠性。這也就是分布式記賬的理念。
四、早期分布式賬本面臨的問題
那在這個系統里誰來主導記賬(交易的記錄和確認)呢?這個問題其實困擾了分布式賬本發展非常多年。根據民主的觀念,好像大家的第一反應都是,這有什么難的,輪流(或隨機)進行記賬不就行了嗎,要是萬一記賬有分歧,少數服從多數不就好了嗎,反正賬本是公開透明的。
乍一聽好像是這個道理。但是,互聯網有一句名言“隔著電腦,沒有人知道你是一條狗”,參與區塊鏈記賬的,是電腦(節點)。分布式記賬可以實現節點之間平等,卻沒辦法實現人人平等。因為一個人可以制造近乎無窮多個節點。要是按照輪流記賬的原則,壞人要是想搞亂賬本那可就太簡單了。
舉個栗子,假設有10個人,其中9個好人,1個壞人。9個好人每個人各有一個節點,而1個壞人偷偷注冊了10個節點(因為這是在互聯網上,注冊節點的成本約等于0),這樣總共有19個節點。如果按照最簡單的輪流(或隨機)進行記賬,壞人有超過50%的概率可以獲得記賬權,如果剩下9個好人節點對記賬有疑義了,因為壞人控制了10個節點,超過了總節點的一半,那他就可以強行把有問題的賬記錄下來并且讓別人必須要接受這個賬本。
看到這里大家應該都明白了,因為在互聯網上創造節點的成本約等于零,所以壞人(攻擊者)可以用近乎于零的成本創造大量節點,就可以擁有整個系統的話語權(這也就是俗稱的“女巫攻擊”)。
如果用輪流(或隨機)進行記賬的模式,核心的問題就是:創造節點的成本約等于零→贏得大量記賬權的成本約等于零→攻擊系統的成本約等于零。導致極易產生攻擊!!!
這個問題困擾了分布式賬本發展多年...
...直到中本聰橫空出世!
五、工作量證明(Proof of Work,挖礦)
中本聰的思路很簡單,就是不能按照輪流(或隨機)的模式進行記賬,而是每一個節點必須要做一定的工作后才能贏得記賬權,這也就是所謂的工作量證明(Proof of Work,簡稱PoW)。這樣,攻擊整個系統的成本,就會從基本為零的成本變為非常高的成本(因為要執行一定的工作)。
打個比方,比特幣的機制,會不斷的發布數學題目(SHA256加密)給所有節點,整個數學題目唯一的解法就是枚舉法,每當有節點找到正確的解,就會贏得記賬權。同時系統會生成下一個新的題目,當有一個新的節點解出了新的題目后,記賬權就從之前的節點轉移到了新的節點。
整個過程會不斷的重復,每一個新的節點開始記錄新的賬本,也就是比特幣中的區塊,賬本與賬本之間的銜接也就是區塊與區塊的銜接,也就形成了區塊鏈。(比特幣的機制會自動調節解題難度,從而保證區塊與區塊的出塊間隔在10分鐘左右,這也就是比特幣的出塊速度。)整個過程中,主要依靠的是算力,算力越強,就可以在同等時間驗算更多的解,從而可以更快的找到正確的解。這樣,要攻擊這個系統,就需要非常強的算力(一般來說認為需要整個系統51%以上的算力),從而使比特幣的體系安全性非常高。
而為了鼓勵大家進行記賬,一方面贏得記賬權節點,可以獲得一次性的一定數量的比特幣獎勵,同時可以獲得記賬的交易手續費。這也就是俗稱的挖礦。
六、個人財產的保護
那么講完了賬本和記賬的問題,對個人來說,比特幣又是如何保障個人財產的呢?
中本聰使用了公鑰密碼學來解決這個問題。公鑰密碼學的原理可以用這個簡單的類比來說明:小朋克一開始有兩個不同密碼和一個賬戶(地址),分別稱為公共密碼(公鑰)和私密密碼(私鑰)。通過私密密碼可以推導出公共密碼,通過公共密碼可以推導出賬戶地址,但是反過來是無法推導的。
這個公共密碼是所有人(節點)都能看到,而私密密碼只有小朋克自己知道。每當小朋克要發送交易,必須要用私密密碼才能操控賬戶,發送交易。而其他所有人可以通過公共密碼進行交易的驗證。
從數學原理上來說,是小朋克通過私密密碼把信息加密,然后把公共密碼和被加密的信息公布在網絡上。所有人都可以通過用公共密碼解密信息的方式來確認這筆信息一定是由小朋克發送的,并且由于公共密碼不能用來加密信息,沒有人可以冒充小明克發送能由公共密碼解密的信息。
?
?
在比特幣的系統中,私鑰是一筆資產所有權的唯一證明。從某種意義上來說,比特幣通過密碼學原理真正的實現了人民對自己資產的完全控制。
七、Coin的機制
比特幣的總量是有上限的,總共是2100萬個比特幣。每個區塊獎勵給礦工的比特幣數量約每4年減半一次,從最開始的50個比特幣到25個比特幣到目前的12.5個比特幣。后面還會降為6.25個、3.125個...... 預計到2140年,所有的比特幣將全部被挖出,出塊將沒有獎勵,礦工的收益全部來自于交易費用。
比特幣最終是一種不會通貨膨脹的數字貨幣(當然目前因為仍不斷有出塊獎勵所以有輕微的通貨膨脹),并且由于不可避免的會有人遺失秘鑰或操作失誤導致比特幣無法找回,比特幣是一種輕微的通貨緊縮的貨幣。
這可能會造成因幣值會緩慢上升,導致大家更愿意持幣而不是將幣花出去的現象,降低比特幣的流動性。當然這是2140年才需要考慮的事情,之前一直會保持輕度的通貨膨脹。
八、智能合約
智能合約是區塊鏈世界里非常重要的機制。智能合約,通俗的來講,就是用代碼寫好合約(合同),從而保證合約一定會按照約定好的條件執行。
這也是顛覆式的進步。通過智能合約可以完美的解決交易雙方之間的信任問題。
In Code We Trust!
代碼是最值得信任的合同!
并且,應用范圍不僅僅限于簡單的合約。比特幣可以實現編程,并且可以運行去中心化的程序(decentralized-apps)。想象一下未來所有的程序都在區塊鏈上運行,從而再也不用擔心各種信任問題。
聽起來非常美好吧!
可是,比特幣作為最早的可編程的數字貨幣,在實際應用過程中,一方面由于比特幣的智能合約不是圖靈完備的(注:圖靈完備是指這種計算機語言理論上能寫出任何程序),因而只能支持非常基礎的操作;另一方面由于比特幣緩慢的出塊速度,導致合約的執行和交互至少以10分鐘為單位,因此智能合約在比特幣內應用并不廣泛,反而在以太坊上大方光彩(之后的文章里「朋克」會詳細介紹)。
九、分叉及解決方案
可能大家會有一個疑問,萬一有兩個節點接近同時找到了正確的解,那到底是由誰來進行記賬呢?
在這種情況下,兩個節點都會進行記賬,也就會造成分叉。在這種情況下,其它節點會遵循最長鏈原則,即哪條鏈上有新的區塊產生,使得它的鏈更長,則就會在更長的鏈上繼續記賬。而被拋棄的區塊,一般被稱為孤塊。
上面說的這種情況雖然會產生分叉,但最終還是會在最長的鏈上繼續走下去,最終只有一條鏈長期存在。
但是有情況會產生硬分叉,也就是會永久的形成兩條鏈,并且之后的鏈與鏈之間,完全獨立。
這種情況發生在,當部分節點修改共識規則,這些節點產生的新塊將被舊的節點判斷為非法,但是這些節點本身會在新的區塊上繼續發展下去,這樣就會形成硬分叉。例如比特幣現金(BCH)從比特幣(BTC)分叉時,就是將區塊上限由1M提升至8M,那么舊的節點就認為BCH節點新生成的區塊為非法,同時BCH也不認可BTC節點形成的區塊,從而造成了硬分叉。另外,當部分節點與原有的其它節點之間的網絡(主動或被動地)完全中斷之后,也有可能造成硬分叉。
十、惡意攻擊及解決方案
那么比特幣在什么時候會存在安全性問題?
?
?
?
?
首先需要注意的是,
惡意節點哪怕獲得了記賬權,也無法發送錯誤的交易!
否則,其它節點不會承認它的記賬權,而是繼續進行計算爭奪這個區塊的記賬權。
因此,惡意節點能做的事情是,通過分叉的機制,否認區塊內已經確認的交易。通常意義上,我們認為若能控制超過51%的比特幣算力,就獲得了這種否認已被區塊打包的交易的能力。
假設惡意節點A控制了51%的算力,想否認第N個塊中的某筆交易,它就修改它的比特幣節點,拒絕承認這個塊,重新從N-1個塊開始挖礦,并故意不打包這筆交易,強行開始產生分叉。因為A占有的算力比網絡剩余的算力更多,A的分叉的出塊速度一定會比主鏈快。比特幣的共識是區塊高度最高的鏈為主鏈,因此A否認別人交易的鏈將會成為主鏈。這樣,之前已經獲得一個區塊確認的交易也可以被否定。
不過,這里需要強調的一點是,惡意節點不能只修改鏈中間的一個區塊而不改變后續的區塊。舉個栗子,如果現在已經有5個區塊,高度分別為1,2,3,4,5。如果惡意節點要修改高度為3的區塊中的一筆交易,那么它必須連帶的把區塊3之后的所有區塊全部都重新開始計算,而不是僅僅把區塊3重新替換。
這也被稱為區塊鏈不可篡改的特性。這是因為每一個區塊頭都有一段數據,是上一個區塊頭的信息(例如區塊高度、產生時間等)加密而成的。只要改動其中的一個區塊,后面的所有區塊頭包含的上一個區塊的加密信息就會無法對上。所以,如果要惡意攻擊的話,必須將后面的區塊全部重新挖出來。
正是基于這種不可篡改的特性,惡意攻擊方式并不是不能防范的,主要就是通過更多的節點確認數來進行防范。假設現在的塊高度為M,而惡意節點要修改的交易在N,則M-N(M-N的值又被稱為交易的確認數)越大,惡意分叉成功的時間也就越長,因為誠實節點在M的高度進行挖礦,而惡意分叉需要從N的高度重新挖,中間需要追趕M-N個高度。這也是為什么很多交易所要6個確認后才會顯示余額,因為當6個確認后,占有51%算力的惡意否認交易理論上要超過20天才能成功分叉,這將給整個社區足夠的時間采取反制措施。
所以,即使占有網絡的絕大數算力也并不意味著就能為所欲為。
十一、小結
區塊鏈就這樣伴隨著比特幣的誕生,而萌芽。
雖然比特幣只是區塊鏈技術的應用之一,但是沒有比特幣就沒有區塊鏈的誕生。比特幣是跨時代的產品,通過巧妙的設定(分布式賬本+工作量證明),形成了安全性非常高的共識機制,屬于區塊鏈1.0的代表公鏈。
這也是人類歷史上,第一次實現真正安全的去中心化的交易體系。
但是,不可否認的是,目前比特幣的公鏈系統頂多算是電腦的DOS系統水平,還存在大量的問題和瓶頸。
那么比特幣具體有哪些問題,又該如何解決呢?
?
https://zhuanlan.zhihu.com/p/34075135?
總結
以上是生活随笔為你收集整理的【朋克智库】比特币详解1.0——区块链的萌芽的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Android 进程保活手段分析
- 下一篇: 【朋克智库】比特币详解2.0——比特币的