比特幣與拜占庭將軍問題
㈠ 拜占庭容錯和PBFT共識演算法
實用的拜占庭容錯演算法
BFT 是區塊鏈共識演算法中,需要解決的一個核心問題。比特幣的POW,eos的dpos,以及共識演算法pos,這些公鏈演算法,解決的是共識節點眾多情況下的bft問題。
拜占庭將軍問題。也稱為拜占庭容錯。
用來描述分布式系統一致性問題。
背景如下:
拜占庭帝國想要進攻一個強大的敵人,為此派出了10支軍隊去包圍這個敵人。這個敵人雖不比拜占庭帝國,但也足以抵禦5支常規拜占庭軍隊的同時襲擊。這10支軍隊在分開的包圍狀態下同時攻擊。他們任一支軍隊單獨進攻都毫無勝算,除非有至少6支軍隊(一半以上)同時襲擊才能攻下敵國。他們分散在敵國的四周,依靠通信兵騎馬相互通信來協商進攻意向及進攻時間。困擾這些將軍的問題是,他們不確定他們中是否有叛徒,叛徒可能擅自變更進攻意向或者進攻時間。在這種狀態下,拜占庭將軍們才能保證有多於6支軍隊在同一時間一起發起進攻,從而贏取戰斗?
單從上面的說明可能無法理解這個問題的復雜性,我們來簡單分析一下:
先看在沒有叛徒情況下,假如一個將軍A提一個進攻提議(如:明日下午1點進攻,你願意加入嗎?)由通信兵通信分別告訴其他的將軍,如果幸運中的幸運,他收到了其他6位將軍以上的同意,發起進攻。如果不幸,其他的將軍也在此時發出不同的進攻提議(如:明日下午2點、3點進攻,你願意加入嗎?),由於時間上的差異,不同的將軍收到(並認可)的進攻提議可能是不一樣的,這是可能出現A提議有3個支持者,B提議有4個支持者,C提議有2個支持者等等。
再加一點復雜性,在有叛徒情況下,一個叛徒會向不同的將軍發出不同的進攻提議(通知A明日下午1點進攻, 通知B明日下午2點進攻等等),一個叛徒也會可能同意多個進攻提議(即同意下午1點進攻又同意下午2點進攻)。
叛徒發送前後不一致的進攻提議,被稱為「拜占庭錯誤」,而能夠處理拜占庭錯誤的這種容錯性稱為「Byzantine fault tolerance」,簡稱為BFT。
使用密碼學演算法保證節點之間的消息傳送是不可篡改的, 通過下面的演算法我們可以保證A將軍收到B將軍發來的消息確實是B將軍本人的真實請求 。
我們採用的是哈希函數(散列演算法)SHA256 -- 從數據(byte)值中創建獨一無二的hash值,並壓縮成摘要,將數據格式固定下來。通過這個摘要與個人私鑰生成Digital Signature 和個人公鑰Public-key certificate,接收方驗證簽名和摘要,如果是通過驗證,即證明摘要內容沒有經過篡改。
pbft容忍無效或者惡意節點數量 e 。為了保證整個系統可以正常運作,需要有2f+1個正常節點,系統的總結點數為 :3f+1。即pbft演算法容忍小於1/3的惡意或者無效節點。 原因見節點作惡的極端情況
pbft是一種狀態機副本復制演算法,所有副本在一個view輪換過程中操作,哪些是主節點(進攻的提議者的大將軍們,輪流當)通過view中其他節點(其他將軍)賦予的編號和節點數集合來確定,即:主節點p=v mod |R| 。 v:view編號,|R|節點個數,p:主節點編號。 關於狀態機復制演算法、view change的意義(主要是防止主節點作惡),主節點詳見論文。
基於拜占庭將軍問題,PBFT演算法一致性的確保主要分為這三個階段:預准備(pre-prepare)、准備(prepare)和確認(commit)。流程如下圖所示:
[圖片上傳失敗...(image-e3329d-1562488133052)]
首先解釋一下上面各個符號表達的意思:
下面結合上圖,詳細說一下PBFT的步驟:
根據上述流程,在 N ≥ 3F + 1 的情況下一致性是可能解決, N為總計算機數,F為有問題的計算機總數 。
下面所有的校驗流程略去對消息內容、簽名和身份的驗證,即已經保證了節點之間消息傳播是不可篡改的
上述演算法中,比較重要的一個點是view change,為了能恢復之前的請求,每一個副本節點收到消息之後或者發送消息的時候都會記錄消息到本地的log記錄中。當執行請求後,副本節點需要把之前該請求的記錄消息清除掉。最簡單的做法是在reply消息後,在執行一次當前狀態的共識同步,但是為了節省資源,一般在多條請求K後執行一次狀態同步。這個狀態同步就是checkpoint消息。
為了節省內存,系統需要一種將日誌中的 無異議消息記錄 刪除的機制。為了保證系統的安全性,副本節點在刪除自己的消息日誌前,需要確保至少 f+1 個正常副本節點執行了消息對應的請求,並且可以在視圖變更時向其他副本節點證明。另外,如果一些副本節點錯過部分消息,但是這些消息已經被所有正常副本節點刪除了,這就需要通過 傳輸部分或者全部服務狀態實現該副本節點的同步 。因此,副本節點同樣需要證明狀態的正確性。
在每一個操作執行後都生成這樣的證明是非常消耗資源的。因此,證明過程只有在請求序號可以被某個常數(比如100)整除的時候才會周期性地進行。我們將這些請求執行後得到的狀態稱作 檢查點(checkpoint) ,並且將具有證明的檢查點稱作 穩定檢查點(stable checkpoint) 。
上述情況是理想情況,實際上當副本節點i向其他節點發出checkpoint消息之後,其他節點還沒有完成K條請求的相互共識,所以不會立即對i的請求作出響應。其他節點會按照自己的處理步驟和順序,向前行進和共識。但是此時i發出的checkpoint沒有形成stable,為了防止i太快,超過自己太多,於是被便會設置一個高水位H=h+L,其中L就是我們指定允許的高度差,等於checkpoint周期處理數K的整數倍,可以設置為L=2K。當副本節點i處理請求超過高水位H時,副本節點即使接受到請求也會視為非法請求。等待stable checkpoint發生變化,再繼續向前推進處理。
如果主節點作惡,它可能會給不同的請求編上相同的序號,或者不去分配序號,或者讓相鄰請求的序號不連續。備份節點(備份主節點)應當有職責來主動檢查這些序號的合法性。如果主節點掉線或者作惡不廣播客戶端的請求,客戶端設置超時機制,超時的話,向所有副本節點廣播請求消息。副本節點檢測出主節點或者下線,發起view change流程。
我們在上面講到,當網路中有F台有問題的計算機時,至少需要3F+1台計算機才能保證一致性問題的解決,我們在這里討論一下原因。
我們可以考慮:由於有F個節點為故障或被攻擊的節點,故我們只能從N-F個節點中進行判斷。但是由於非同步傳輸,故當收到N-F個消息後,並不能確定後面是否有新的消息。(有可能是目前收到的N-F個節點的消息中存在被攻擊的節點發來的消息,而好的節點的消息由於非同步傳輸還沒有被收到。)
我們考慮最壞的情況,即剩下F個都是好的節點,收到的中有F個被攻擊的節點,故我們需要使得收到的中好節點的數量 (N-F)-F 大於被攻擊節點的數量 F ,於是有 N-2F>F ,即 N>3F ,所以N的最小整數為 N=3F+1 。
pbft是需要參與認證的節點進行的。所以一個完整的共識演算法包括DPOS+PBFT。其速度是可以達到1500tps左右的。
參考文獻:
https://mathpretty.com/9602.html
https://blog.csdn.net/jfkidear/article/details/81275974
Practical Byzantine Fault Tolerance
Miguel Castro and Barbara Liskov Laboratory for Computer Science, Massachusetts Institute of Technology, 545 Technology Square, Cambridge, MA 02139 castro,liskov @lcs .mit.e
https://www.jianshu.com/p/fb5edf031afd 部分論文翻譯
㈡ 拜占庭問題
拜占庭帝國即中世紀的土耳其,擁有巨大的財富,周圍10個鄰邦垂誕已久,但拜占庭高牆聳立,固若金湯,沒有一個單獨的鄰邦能夠成功入侵。任何單個鄰邦入侵的都會失敗,同時也有可能自身被其他9個鄰邦入侵。拜占庭帝國防禦能力如此之強,至少要有十個鄰邦中的一半以上同時進攻,才有可能攻破。
然而,如果其中的一個或者幾個鄰邦本身答應好一起進攻,但實際過程出現背叛,那麼入侵者可能都會被殲滅。
於是每一方都小心行事,不敢輕易相信鄰國。這就是拜占庭將軍問題。
在拜占庭問題中,最重要的point就是: 所有將軍如何達成一致攻打拜占庭的共識 ,這當中,可能出現的情況舉例如下:
用一個模型解釋一下:
假設只有3個人,A、B、C,三人中如果其中一個是叛徒。當A發出進攻命令時,B如果是叛徒,他可能告訴C,他收到的是「撤退」的命令。這時C收到一個「進攻」,一個「撤退「,於是C被信息迷惑,而無所適從。
如果A是叛徒。他告訴B「進攻」,告訴C「撤退」。當C告訴B,他收到「撤退」命令時,B由於收到了司令「進攻」的命令,而無法與C保持一致。
正由於上述原因,在只有三個角色的系統中,只要有一個是叛徒,即叛徒數等於1/3,拜占庭問題便不可解。
可以看得出, 只要叛徒的數量大於或等於1/3,拜占庭問題不可解
從技術上理解, 拜占庭將軍問題是分布式系統容錯性問題 。加密貨幣建立在P2P網路之上,是典型的分布式系統,類比一下, 將軍就是P2P網路中的節點,信使就是節點之間的通信,進攻還是撤退的決定就是需要達成的共識 。 如果某台獨立的節點計算機拓機、掉線或攻擊網路搞破壞,整個系統就要停止運行,那這樣的系統將非常脆弱,所以容許部分節點出錯或搞破壞而不影響整個系統運行是必要的 , 這就需要演算法理論上的支撐,保證分布式系統在一定量的錯誤節點存在的情況下,仍然保持一致性和可用性 。
而且,拜占庭將軍與兩軍問題不同,前者假定信差沒有問題,只是將軍出現了叛變等問題;後者研究信差的通信問題。
終極解決方案到了——
如果 10個將軍中的幾個同時發起消息,勢必會造成系統的混亂,造成各說各的攻擊時間方案,行動難以一致 。
誰都可以發起進攻的信息,但由誰來發出呢?中本聰巧妙地在個系統加入了 發送信息的成本 ,即:
它加入的 成本就是」工作量「 —— 節點必須完成一個計算工作才能向各城邦傳播消息 ,當然,誰第一個完成工作,誰才能傳播消息。(這也是 工作量證明機制的意義:以檢驗結果的方式證明你過去所做過了多少工作 )
這種加密技術——非對稱加密,完全可以解決古代難以解決的簽名問題:
中本聰在設計比特幣時,它採用了一種工作量證明機制叫哈希現金,在一個交易塊這要找到一個隨機數,計算機只能用窮舉法來找到這個隨機數,可以說,能不能找到全靠運氣,所以對於各個節點來說,這個世界上,只有隨機才是真正的公平,實現隨機的最好辦法是使用數學,所有的將軍在尋找共識的過程,藉助了大家都認可的數學邏輯。
當然了, 憑什麼要義務進行計算工作,那麼肯定要有一個激勵機制 :比特幣的獎勵機制是每打包一個塊,目前是獎勵25個比特幣,而拜占庭將軍問題的獎勵機制可以是瓜分拜占庭獲得的利益。
在這個分布式網路里:
每個將軍都有一份實時與其他將軍同步的消息賬本 。
賬本里有每個將軍的簽名都是可以驗證身份的。 如果有哪些消息不一致,可以知道消息不一致的是哪些將軍 。
盡管有消息不一致的,只要超過半數同意進攻,少數服從多數,共識達成(只要大多數是好人,那麼就可以實現共識)。
區塊鏈上的共識機制主要解決 由誰來構造區塊 ,以及 如何維護區塊鏈統一 的問題。
拜占庭容錯問題需要解決的也同樣是 誰來發起信息 ,如何 實現信息的統一同步 的問題。
註:區塊鏈學習新人,若有不正確的地方,望指出
㈢ 比特幣機制研究
現今世界的電子支付系統已經十分發達,我們平時的各種消費基本上在支付寶和微信上都可以輕松解決。但是無論是支付寶、微信,其實本質上都依賴於一個中心化的金融系統,即使在大多數情況這個系統運行得很好,但是由於信任模型的存在,還是會存在著仲裁糾紛,有仲裁糾紛就意味著不存在 不可撤銷的交易 ,這樣對於 不可撤銷的服務 來說,一定比例的欺詐是不可避免的。在比特幣出來之前,不存在一個 不引入中心化的可信任方 就能解決在通信通道上支付的方案。
比特幣的強大之處就在於:它是一個基於密碼學原理而不是依賴於中心化機構的電子支付系統,它能夠允許任何有交易意願的雙方能直接交易而不需要一個可信任的第三方。交易在數學計算上的不可撤銷將保護 提供不可撤銷服務 的商家不被欺詐,而用來保護買家的 程序化合約機制 也比較容易實現。
假設網路中有A, B ,C三個人。
A付給B 1比特幣 ,B付給C 2比特幣 ,C付給A 3比特幣 。
如下圖所示:
為了刺激比特幣系統中的用戶進行記賬,記賬是有獎勵的。獎勵來源主要有兩方面:
比特幣中每一筆交易都會有手續費,手續費會給記賬者
記賬會有打包區塊的獎勵,中本聰在08年設計的方案是: 每10分鍾打一個包,每打一個包獎勵50個比特幣,每4年單次打包的獎勵數減半,即4年後每打一個包獎勵25個比特幣,再過四年後就獎勵12.5個比特幣... 這樣我們其實可以算出比特幣的總量:
要說明打包的記錄以誰為準的問題,我們需要引入一個知名的 拜占庭將軍問題 (Byzantine failures)。拜占庭將軍問題是由萊斯利·蘭伯特提出的點對點通信中的基本問題。含義是在存在消息丟失的不可靠信道上試圖通過消息傳遞的方式達到一致性是不可能的。
假設有9個互相遠離的將軍包圍了拜占庭帝國,除非有5個及以上的將軍一起攻打,拜占庭帝國才能被打下來。而這9個將軍之間是互不信任的,他們並不知道這其中是否有叛徒,那麼如何通過遠距離協商來讓他們贏取戰斗呢?
口頭協議有3個默認規則:
1.每個信息都能夠被准確接收
2.接收者知道是誰發送給他的
3.誰沒有發送消息大家都知道
4.接受者不知道轉發信息的轉發者是誰
將軍們遵循口頭規則的話,那就是下面的場景:將軍1對其他8個將軍發送了信息,然後將軍2~9將消息進行轉達(廣播),每個將軍都是消息的接受者和轉發者,這樣一輪下來,總共就會有9×8=72次發送。這樣將軍就可以根據自己手中的信息,選擇多數人的投票結果行動即可,這個時候即便有間諜,因為少數服從多數的原則,只要大部分將軍同意攻打拜占庭,自己就去行動。
這個方案有很多缺點:
1.首先是發送量大,9個將軍之間要發送72次,隨著節點數的增加,工作量呈現幾何增長。
2.再者是無法找出誰是叛徒,因為是口頭協議,接受者不知道轉發信息的轉發者是誰,每個將軍手裡的數據僅僅只是一個數量的對比:
這里我們假設有3個叛徒,在一種最極端的情況下即叛徒轉發信息時總是篡改為「不進攻」,那麼我們最壞的結果就如上圖所示。將軍1根據手裡的信息可以推出要進攻的結論,卻無法獲知將軍裡面誰是叛徒。
這樣我們就有了方案二:書面協議。
書面協議即將軍在接受到信息後可以進行簽字,並且大家都能夠識別出這個簽字是否是本人,換種說法就是如果有人篡改簽字大家可以知道。書面協議相對比口頭協議就是增加了一個認證機制,所有的消息都有記錄。一旦發現有人所給出的信息不一致,就是追查間諜。
有了書面協議,那麼將軍1手裡的信息就是這樣的:
可以很明顯得看出,在最壞的一種情況——叛徒總是轉發「不進攻」的消息之下,將軍7、8、9是團隊里的叛徒。
這個方案解決了口頭協議里歷史信息不可追溯的問題,但是在發送量方面並沒有做到任何改進。
在我們的示例中,比特幣系統里的每個用戶發起了一筆交易,都會通過自己的私鑰進行簽名,用數學公式表示就是:
所以之前的區塊就變成了這樣:
這樣每一筆交易都由交易發起者通過私鑰進行數字簽名,由於私鑰是不公開的,所以交易信息也就無法被偽造了。
如書面協議末尾所說的那樣,書面協議未能解決信息交流過多的問題。當比特幣系統中存在上千萬節點的時候,如果要互相廣播驗證,請求響應的次數那將是一個非常龐大的數字,顯然勢必會造成網路擁堵、節點處理變慢。為了解決這個問題,中本聰乾脆讓整個10分鍾出一個區塊,這個區塊由誰來打包發出呢?這里就採用了工作量證明機制(PoW)。工作量證明,說白了就是解一個數學題,誰先解出來數學題,誰就能有打包區塊的權力。換在拜占庭將軍的例子中就是,誰先做出數學題,誰就成為將軍們裡面的總司令,其他將軍聽從他發號的命令。
首先,礦工會將區塊頭所佔用的128位元組的字元串進行兩次sha256求值,即:
這樣求得一個值Hash,將其與目標值相比對,如果符合條件,則視為工作量證明成功。
工作量證明成功的條件寫在了區塊鏈頭部的 難度數 欄位,它要求了最後進行兩次sha256運算的Hash值必須小於定下的目標值;如果不是的話,那就改變區塊頭的 隨機數 (nonce),通過一次次地重復計算檢驗,直到符合條件為止。
此外, 比特幣有自己的一套難度控制系統,使得比特幣系統要在全網不同的算力條件下,都保持10分鍾生成一個區塊的速率。這也就意味著:難度值必須根據全網算力的變化進行調整。難度調整的策略是由最新2016個區塊的花費時長與期望時長(期望時長為20160分鍾即兩周,是按每10分鍾一個區塊的產生速率計算出的總時長)比較得出的,根據實際時長與期望時長的比值,進行相應調整(或變難或變易)。也就是說,如果區塊產生的速率比10分鍾快則增加難度,比10分鍾慢則降低難度。
PoW其實在比特幣中是做了以下的三件事情。
這樣可以防止一台高性能機器同時跑上萬個節點,因為每完成一個工作都要有足夠的算力。
有經濟獎勵就會加速整個系統的去中心化,也鼓勵大家不要去作惡,要積極地按照協議本來的執行方式去執行。(所以說,無幣區塊鏈其實是不可行的,無幣區塊鏈一定導致中心化。)
也就是說,每個節點都不能以自身硬體條件去控制出快速度。現在的比特幣上平均10分鍾出一個塊,性能再好的機器也無法打破這個規則,這就能夠保證 區塊鏈是可以收斂到共同的主鏈上的 ,也就是我們所說的共識。
綜上,共識只是PoW三個作用中的一點,事實上PoW設計的作用有點至少有這么三種。
默克爾樹的概念其實很簡單,如圖所示
這樣,我們區塊的結構就大致完整了,這里分成了區塊頭和區塊體兩部分。
區塊鏈的每個節點,都保存著區塊鏈從創世到現在的每一區塊,即每一筆交易都被保存在節點上,現在已經有幾百個GB了。
每當比特幣系統中有一筆新的交易生成,就會將新交易廣播到所有的節點。每個節點都把新交易收集起來,並生成對應的默克爾根,拼接完區塊頭後,就開始調整區塊頭里的隨機數值,然後就開始算數學題
將算出的result和網路中的目標值進行比對,如果是結果是小於的話,就全網廣播答案。其他礦工收到了這個信息後,就會立馬放下手裡的運算,開始下一個區塊的計算。
舉個例子,當前A節點在挖38936個區塊,A挖礦節點一旦完成計算,立刻將這個區塊發給它的所有相鄰節點。這些節點在接收並驗證這個新區塊後,也會繼續傳播此區塊。當這個新區塊在網路中擴散時,每個節點都會將它作為第38936個區塊(前一個區塊為38935)加到自身節點的區塊鏈副本中。當挖礦節點收到並驗證了這個新區塊後,它們會放棄之前對構建這個相同高度區塊的計算,並立即開始計算區塊鏈中下一個區塊的工作。
整個流程就像下一張圖所展示的這樣:
簡單來說,雙花問題是一筆錢重復花了兩次。具體來講,雙花問題可分為兩種情況:
1.同一筆錢被多次使用;
2.一筆錢只被使用過一次,但是通過黑客攻擊或造假等方式,將這筆錢復制了一份,再次使用。
在我們生活的數字系統中,由於數據的可復制性,使得系統可能存在同一筆數字資產因不當操作被重復使用的情況,為了解決雙花問題,日常生活中是依賴於第三方的信任機構的。這類機構對數據進行中心化管理,並通過實時修改賬戶余額的方法來防止雙重支付的出現。而作為去中心化的點對點價值傳輸系統,比特幣通過UTXO、時間戳等技術的整合來解決雙花問題。
UTXO的英文全稱是 unspent transaction outputs ,意為 未使用的交易輸出 。UTXO是一種有別於傳統記賬方式的新的記賬模型。
銀行里傳統的記賬方式是基於賬戶的,主要是記錄某個用戶的賬戶余額。而UTXO的交易方式,是基於交易本身的,甚至沒有賬戶的概念。在UTXO的記賬機制里,除了貨幣發行外,所有的資金來源都必須來自於前面某一個或幾個交易。任何一筆的交易總量必須等於交易輸出總量。UTXO的記賬機制使得比特幣網路中的每一筆轉賬,都能夠追溯到它前面一筆交易。
比特幣的挖礦節點獲得新區塊的挖礦獎勵,比如 12.5 個比特幣,這時,它的錢包地址得到的就是一個 UTXO,即這個新區塊的幣基交易(也稱創幣交易)的輸出。幣基交易是一個特殊的交易,它沒有輸入,只有輸出。
當甲要把一筆比特幣轉給乙時,這個過程是把甲的錢包地址中之前的一個 UTXO,用私鑰進行簽名,發送到乙的地址。這個過程是一個新的交易,而乙得到的是一個新的 UTXO。
這就是為什麼有人說在這個世界上根本沒有比特幣,只有 UTXO,你的地址中的比特幣是指沒花掉的交易輸出。
以Alice向Bob進行轉賬的過程舉例的話:
UTXO 與我們熟悉的賬戶概念的差別很大。我們日常接觸最多的是賬戶,比如,我在銀行開設一個賬戶,賬戶里的余額就是我的錢。
但在比特幣網路中沒有賬戶的概念,你可以有多個錢包地址,每個錢包地址中都有著多個 UTXO,你的錢是所有這些地址中的 UTXO 加起來的總和。
中本聰發明比特幣的目標是創建一個點對點的電子現金,UTXO 的設計正可以看成是借鑒了現金的思路:我們可能在這個口袋裡裝點現金,在那個櫃子角落裡放點現金,在這種情況下不存在一個賬戶,你放在各處的現金加起來就是你所有的錢。
採用 UTXO 設計還有一個技術上的理由,這種特別的數據結構可以讓雙重花費更容易驗證。對比一下:
㈣ 拜占庭問題與共識演算法
「拜占庭將軍問題」(Byzantine Generals Problem)是一個經典難題,這個難題是這樣描述的:拜占庭是東羅馬帝國的首都,它的軍隊分成多個師,每個師都由一個將軍統領。這些將軍通過信使進行交流,來達成一個共同作戰方案,有些將軍可能是叛徒,想故意破壞這個過程,這會造成那些忠誠的將軍也無法達成一個統一的作戰計劃。這個難題在於如何讓那些忠誠的將軍在這樣的情況下達成統一作戰方案,而避免那些叛徒對作戰方案的誤導。
在點對點、分布式的區塊鏈中,常常用拜占庭問題來比喻節點如何達成共識的問題。將軍即對應著一個個節點,達成統一作戰方案即達成共識,正確的打包與驗證區塊數據,防止惡意節點(叛徒將軍)破壞區塊鏈的運行。
顧名思義,就是能夠解決拜占庭問題,使各個節點達成共識,解決共識問題的各種機制也被稱為共識演算法。在各種各樣的共識演算法中,又一直存在一個「不可能三角」的難題,這三角是指「安全性」、「去中心化」和「速度」,也就是說難以同時保證速度、安全性和去中心化程度,三者之間往往會顧此失彼。
現在各種共識演算法算起來有好幾十種,計算機界也一直處於研究階段,並沒有說哪種演算法已經完美。
下面盤點一下講解pBET和POW兩種演算法,以及它們的「安全性」、「去中心化」和「速度」如何。
實用拜占庭容錯是一種較早的共識演算法。pBFT的一個原則,就是少數服從多數。節點通過在相互傳遞有關決策的消息,誰的決策贊同的人數多,就採用誰的。所以在這個系統中,安全性隨著誠實節點的數量而增加。誠實節點同意正確的決策,拒絕惡意節點的錯誤決策,只要惡意節點的數量少於總數的1/3,就能保證達成共識。
達成共識可以簡化為四步:
pBFT 使用投票機制以循環方式選舉領導節點。
領導者發起決策並將其廣播給輔助節點。
所有節點,包括領導節點和輔助節點,都發送響應。
當 ⅔ + 1 個節點發送相同的響應時,該響應被認為是有效的。
如果領導者有惡意行為,它可以被大多數節點刪除。
按少數服從多數的原則。那按理來說,只要惡意節點的數量少於1/2就夠了啊,那麼為什麼PBFT演算法的容錯數量要滿足惡意節點的數量少於總數的1/3呢?
因為 PBFT 演算法的除了需要支持容錯故障節點之外,還需要支持容錯作惡節點。假設集群節點數為 N,有問題的節點為 f。有問題的節點中,可以既是故障節點,也可以是作惡節點,或者只是故障節點或者只是作惡節點。那麼會產生以下兩種極端情況:
(1)這f 個有問題節點既是故障節點,又是作惡節點,那麼根據少數服從多數的原則,集群里正常節點只需要比f個節點再多一個節點,即 f+1 個節點,正確節點的數量就會比故障節點數量多,那麼集群就能達成共識,即總節點數為f+(f+1)=n,也就是說這種情況支持的最大容錯節點數量是 (n-1)/2。
(2)故障節點和作惡節點都是不同的節點。那麼就會有 f 個作惡節點和 f 個故障節點,當發現節點是作惡節點後,會被集群排除在外,剩下 f 個故障節點,那麼根據少數服從多數的原則,集群里正常節點只需要比f個節點再多一個節點,即 f+1 個節點,確節點的數量就會比故障節點數量多,那麼集群就能達成共識。所以,所有類型的節點數量加起來就是 f+1 個正常節點,f個故障節點和f個作惡節點,即 3f+1=n。
結合上述兩種情況,因此PBFT演算法支持的最大容錯節點數量是(n-1)/3,即少於1/3。
pBFT的優缺點
pBFT 系統不需要高計算資源或大量能源來運行。pBFT 在節點少的時候可以快速達成共識,因為所有節點都在不斷地相互通信。一旦節點就決策達成一致,交易就完成了。
然而,pBFT的缺點也很明顯:頻繁的通信使它只能在節點數量有限的網路中正常工作。隨著每個新節點加入網路,通信開銷呈指數增長,響應所需的時間也隨之增加。
pBFT 網路也容易受到女巫(Sybil)攻擊,女巫就是惡意黑客製造的不同節點,黑客可以控制多個節點,使其超過1/3,那系統將無法達成正確的共識。
從不可能三角的角度來看,由此可見pBFT在節點少的時候速度快,但安全性差,去中心化低;節點多了又會導致速度很慢。
中本聰設計了POW共識機制來解決上面pBFT這個經典共識的可擴展性問題。
上面說到,pBFT通過不斷廣播然後計算節點的消息數,時間花費過長。POW是怎麼做的:我不要計算節點數是否超過2/3,我直接選一個節點,按它的決策,其他節點全部同步它的決策。這樣就省去在全節點通信然後計算節點數的費時操作。
那麼,對於哪個節點來打包區塊,那就很重要,萬一是惡意節點呢?必須對打包的節點進行要求,哪個節點有權力進行打包呢?那就是解決復雜的數學問題,俗稱挖kuang。節點必須花費大量算力和電費來爭取某次打包區塊的權力。這樣的成本就限制了黑客的女巫攻擊。
如果打包區塊的權力真的被黑客搶到了,那可能會有什麼問題?
(1)竊取冰糖橙
黑客能夠竊取屬於另一個用戶,不受她控制的地址里的冰糖橙嗎?答案是否定的。即使這一輪是由黑客打包區塊鏈上的下一個區塊,她也不可能竊取別人的比特幣。這么做的話,黑客需要發起一筆有效的交易來轉移比特幣到自己的地址。這就要求黑客偽造比特幣擁有者的簽名,然而如果數字簽名機制是安全的,她是無法辦到的。只要背後的密碼學基礎是牢靠的,她就無法輕易竊取比特幣。
(2)拒絕服務攻擊
讓我們來考慮另一種攻擊。假設黑客不喜歡叫鮑勃的某個用戶,黑客可以決定她不把鮑勃發起的任何交易放進她所提議的區塊里。換言之,她拒絕提供服務給鮑勃。盡管這是黑客可以開展的有效的攻擊,但幸好這不過是個小問題。如果鮑勃的交易沒有被放進黑客所打包的下一個區塊,鮑勃只要等到下一個誠實節點發起區塊的時候,他的交易記錄就會被放進這個區塊里。所以這其實也不算是一個有效的攻擊。
也就是說,黑客花費重大成本取得的打包,但並不能起到有效的攻擊。由於對惡意節點進行懲罰、對誠實節點進行獎勵這樣的機制下,共識就達成了。
盡管有所改進,POW也引入了其他問題。工作量證明需要所有節點解決復雜的數學問題,這會消耗大量的能源,就是大家所熟知的挖kuang耗費電力。並且解決復雜的數學問題的時間也要求不短,10分鍾左右。
從不可能三角的角度來看,POW去中心化高,安全性高,但速度還是慢,但至少已經不會像pBFT那樣由於節點多導致花費時間呈指數增長。
共識演算法各式各樣,冰糖橙的POW並不是真正去解決分布式共識問題,它不能完美的套用到其他場景。但它在貨幣系統的這個特定場景下解決了冰糖橙的共識問題。POW在冰糖橙里運行得非常好。
㈤ 比特幣因為什麼可以被稱為主流幣
拜占庭將軍問題
在討論比特幣為什麼會被稱為主流幣之前先看一個有趣的問題,這個問題的名字叫做拜占庭將軍問題。
這個問題是由萊斯利·蘭伯特提出的點對點通信的基本問題。
為什麼會被稱為拜占庭將軍問題呢?有兩大歷史淵源。
一、拜占庭位於如今土耳其的伊斯坦布爾,是東羅馬帝國的首都,由於羅馬帝國當時土地遼闊,每個軍隊都相隔較遠,信息傳遞全靠信差。而在戰爭時拜占庭的所有將軍必須達成是否攻擊的共識,這樣才能贏得戰爭。但是因為有叛徒和間諜的存在就會擾亂秩序,使得難以形成正確的共識。拜占庭將軍問題就這樣形成了。
二、Leslie Lamport(2013 年的圖靈講得主)用來為描述分布式系統一致性問題(Distributed Consensus)在論文中抽象出來一個著名的例子。
Leslie Lamport在20頁的文章中舉了一個具體的例子來描述什麼是拜占庭將軍問題,拜占庭排出了10支部隊去圍攻一個城池,10支部隊由10個將軍帶領,分布在城池的四周靠通信兵傳遞信息,由於敵人實力強悍,必須要6隊或以上的人馬同時發起進攻才能贏得戰爭。如何保證至少6支軍隊可以同時發起進攻。
從字面上看起來似乎不是一個很難的問題,其實際解決起來卻沒那麼容易,在中本聰提出比特幣網路概念之前這個問題一直就沒有得到較好的解決。
為什麼這么難解決呢?
因為信息傳遞是分散的,並且其中還可能存在間諜叛徒搗亂。
先不考慮有叛徒和間諜的情況,光10個將軍想要統一一個發動進攻的時間都很難,舉例:每一個將軍都有著自己的進攻想法,想要統一一個進攻時間就要將自己的想法讓通信兵傳達給剩餘的9位將軍,並詢問是否同意在這個時間發起進攻,又由於路途遠近的不同,收到的提議的時間都不同,這樣就很容易形成一個混亂的局面。
如果再加上叛徒和間諜就更可怕了,叛徒和間諜可以向不同的將軍發出不同的提案,或者同意多個將軍的進攻提案。
這樣來看這個問題是不是就極其復雜了。
其實拜占庭將軍問題,就是要解決分散的人們在沒有一個中心化指揮時,如何達成共識的問題。
那中本聰如何成功解決拜占庭將軍問題的呢?
POW工作量證明
中本聰提出用工作量證明的方法解決這個問題。
POW工作量證明通過增加信息發送的成本,降低節點發送信息的速率,保證在一個時間只有很少的節點進行信息的傳遞,並且信息的傳遞附上簽名的辦法很好的解決了拜占庭將軍問題。
那工作量證明是什麼呢?其實際就是一個散列函數,當你輸入一個任意值X進入這個函數進行運算,會對應得到H(X)的結果,但當你稍微變動一下X,H(X)就會發生巨大的變化 , 也就是說理論上你無法在得知H(X)的情況下反推出X的結果,想要算出X唯一的辦法就是窮舉運算,也就是我們常說的一個一個帶進去試 。 由於這個運算量很大,而運算的過程就是工作的過程。
哈希函數
前面說到的散列函數實際上就是哈希函數,只是翻譯不同哈希是Hash的音譯。
其實在比特幣網路的整體架構中,哈希函數到處都有體現,整個網路的運行就是圍繞中哈希函數展開的。
比特幣在記賬時,使用哈希函數對記錄的數據進行哈希,數據哈希可以帶來一下好處,首先信息變短並且原始信息被隱藏,其次有了標識和驗證信息的辦法。
下面用一個大概流程進行展示。
區塊鏈在記賬時先把正常的信息進行Hash,會得到一個Hash值。
1.Hash(序號0、記賬時間、交易記錄) = 123456ABC
賬頁的信息和Hash值組合就構成了一個完整的區塊。
在記下一頁賬時,將上一個區塊的Hash值和當前的賬頁信息一同Hash。
2.Hash(上一個Hash值、序號1、記賬時間、交易記錄) = 654321CBA
這樣第二個區塊不僅包含自己區塊的信息還間接包含了前一個區塊的信息。
礦工在挖礦時,實際上就是在計算Hash函數。之後會專門寫一篇文章來講解挖礦的過程。
在確定數字貨幣所有權方面,其實也是經過兩次Hash從私鑰得到了地址,這個地址平常我們打幣使用的地址。誰擁有私鑰誰就可以進行交易,私鑰就是你唯一的資產憑證,所以一定要保管好自己的私鑰。
為什麼比特幣可以被稱為主流幣呢?不是因為它漲幅有多麼驚人,市值有多高,而是因為它的出現解決了許多問題,給人們提供了一種全新的點對點電子分布式網路架構。
㈥ 比特幣的價值到底在哪方面
還是稀缺性吧
㈦ 你對比特幣的認識可能都是錯的!請重新認比特幣
比特幣(Bitcoin)的概念最初由中本聰在2008年11月1日提出,並於2009年1月3日正式誕生 。
根據中本聰的思路設計發布的開源軟體以及建構其上的P2P網路。比特幣是一種P2P形式的虛擬的加密數字貨幣。點對點的傳輸意味著一個去中心化的支付系統。
與所有的貨幣不同,比特幣是依據特定演算法,通過大量的計算產生,比特幣經濟使用整個P2P網路中眾多節點構成的分布式資料庫來確認並記錄所有的交易行為,並使用密碼學的設計來確保貨幣流通各個環節安全性。P2P的去中心化特性與演算法本身可以確保無法通過大量製造比特幣來人為操控幣值。基於密碼學的設計可以使比特幣只能被真實的擁有者轉移或支付。這同樣確保了貨幣所有權與流通交易的匿名性。
比特幣與其他虛擬貨幣最大的不同,是其總數量非常有限,具有極強的稀缺性。
比特幣的趨勢:
比特幣是一種去中心化的點對點的電子現金系統,從出世到現在,已經10年有餘。比特幣現在的價格在1萬美元徘徊,很多人覺得價格已經太高了,現在買不劃算。但事實上,盡管比特幣已經走了10年,它仍然像腹中胎兒,很多少並不知道比特幣的存在。
比特幣還沒有成長為嬰兒孩童,還有巨大的成長空間,它的前景是廣闊的。不妨下一個十年,我們再來看比特幣究竟到達了怎樣的高度。越來越多的人將會知道比特幣,人人都需要比特幣,比特幣的交易需求會極為旺盛。
比特幣是龐氏騙局嗎?:
首先龐氏騙局是對金融領域投資詐騙的稱呼,是金字塔騙局(Pyramid scheme)的始祖。很多非法的傳銷集團就是用這一招聚斂錢財的,這種騙術是一個名叫查爾斯·龐茲的投機商人「發明」的。龐氏騙局在中國又稱「拆東牆補西牆」「空手套白狼」。簡言之就是利用新投資人的錢來向老投資者支付利息和短期回報,以製造賺錢的假象進而騙取更多的投資。
想讓全世界知道你對比特幣技術完全無知,最好的方法有:一是使用鬱金香泡沫作比喻,二是說比特幣是一種龐氏騙局。一個人喜歡這么說,大多是因為在對一件自己不了解的事物做出斷言前,根本沒有能力去做一些基礎研究。
當你了解比特幣背後的技術和它被發明的原因,或許就會發現比特幣完全不是旁氏騙局。好了,讓我們抽絲剝繭地來做一個分解。有人說,龐氏騙局是一種欺騙性的投資騙局,承諾高回報率,對投資者來說風險很小。
中本聰最初發布的比特幣白皮書,大概有八頁那麼長,相當有技術性,但消化起來也不是特別困難。其中沒有提到任何關於比特幣「投資」的回報,它甚至沒有提到比特幣的價格。
它簡單地解決了計算機科學中最古老的問題之一,即拜占庭將軍的問題,從而確立了它在這個過程中的價值。比特幣的價值主張從來都不是利潤驅動,在最初的幾年裡持有比特幣被認為是「正當的」。
比特幣絕對不是一項機密,它是世界上最開放的技術之一。它是開源的,任何人都可以查看代碼,任何人都可以為代碼做出貢獻,任何人都可以自動運行軟體並參與到網路中。所有比特幣交易的 歷史 ,對世界上任何一個人來說都是可見的。
比特幣不產生回報,但比特幣的價格與稀缺性,導致了其與人們的需求直接相關,這種需求不是強加給別人的。比特幣的最大支持者也不會四處詢問你有多少錢,然後蠱惑你去投資更多的比特幣。加入比特幣網路的新用戶,不會用新資金去為老用戶提供資金。可以毫不客氣地說,宣傳比特幣是龐氏騙局的人,大都懶於去認真研究理解比特幣的真正價值。
區塊鏈是什麼:
區塊鏈是一個信息技術領域的術語。從本質上講,它是一個共享資料庫,存儲於其中的數據或信息,具有「不可偽造」「全程留痕」「可以追溯」「公開透明」「集體維護」等特徵。基於這些特徵,區塊鏈技術奠定了堅實的「信任」基礎,創造了可靠的「合作」機制,具有廣闊的運用。
區塊鏈起源於比特幣,2008年11月1日,一位自稱中本聰的人發表了《比特幣:一種點對點的電子現金系統》一文 ,闡述了基於P2P網路技術、加密技術、時間戳技術、區塊鏈技術等的電子現金系統的構架理念,這標志著比特幣的誕生。兩個月後理論步入實踐,2009年1月3日第一個序號為0的創世區塊誕生。幾天後2009年1月9日出現序號為1的區塊,並與序號為0的創世區塊相連接形成了鏈,標志著區塊鏈的誕生 。
虛擬貨幣是不是騙局?:
㈧ 拜占庭協議
拜占庭將軍問題是指「在存在消息丟失的不可靠信道上試圖通過消息傳遞的方式達到一致性是不可能的」。因此在系統中存在除了消息延遲或不可送達的故障以外的錯誤,包括消息被篡改、節點不按照協議進行處理等,將會潛在地會對系統造成針對性的破壞。
改進型實用拜占庭容錯 (Practical Byzantine Fault Tolerance/PBFT)
PBET共識機制是少數服從多數,根據信息在分布式網路中節點間互相交換後各節點列出所有得到的信息,一個節點代表一票,選擇大多數的結果作為解決辦法。PBET將容錯量控制在全部節點數的1/3,即如只要有超過2/3的正常節點,整個系統便可正常運作。
授權拜占庭容錯演算法(Delegated Byzantine Fault Tolerance/dBFT)
dBFT,是基於持有權益比例來選出專門的記賬人(記賬節點),然後記賬人之間通過拜占庭容錯演算法(即少數服從多數的投票機制)來達成共識,決定動態參與節點。dBFT可以容忍任何類型的錯誤,且專門的多個記賬人使得每一個區塊都有最終性、不會分叉。
拜占庭協議採用的方法是確保可以通過分布式的方法達成共識,即使出現了拜占庭式的失敗也不會影響。「拜占庭失敗」指的則是分布式系統中演算法執行過程中的任意一個錯誤,也包括非理性的行為。
而聯邦拜占庭協議的主要特點是權力下放和任意行為容忍:
FBA帶來了開放的成員名單以及對拜占庭協議的去中心化控制;
任何人都可以加入其中;
通過分布式的方式,FBA使得法定人數或者節點足夠的群體能夠達成一致。每個節點決定信任對象,不同的節點也不需要依賴於信賴相同的參與者組合,即可完成共識。
非聯邦拜占庭協議的主要特點包括了中心化和任意行為容忍。它要求所有參與者對系統成員資源達成一致共識——這意味著這是一個中心化的系統。網路中的每個節點必須提前知曉且驗證過。
和非聯盟的拜占庭協議相比,比特幣設定理性行為者控制著大多數的計算能力,並通過分發硬幣來激勵潛在攻擊者遵守協議。因此,拜占庭協議可以抵禦擁有巨大計算能力的外部攻擊者,但是成員名單是非公開的。
而SCP靈感正是來源於比特幣。同時它從比特幣中汲取經驗,同時在低算力環境中擴展了對非理性行為的容忍能力。
㈨ 如何用最簡單的方式解讀區塊鏈
大家最近天天都能聽到區塊鏈這個詞,那什麼是區塊鏈呢?「分布式、難以篡改、一致存儲」等解釋太技術化且較為干澀。我這里來通俗的科普下:區塊鏈主要為了解決互不信任的個體之間的信任問題。
舉個通俗的例子:話說老李和老王一個村,老李最近手頭有點緊,想向老王借點錢。老王呢,擔心借了老李後他賴賬怎麼辦,於是找來「德高望重」的村長,不過想想,村長也不可信,以前村長還偷過別人家的地瓜啊!怎麼辦?
區塊鏈的方法是:老王借了1000塊錢給老李後,然後用大喇叭在村裡大喊「我老王今天借了老李1000元錢,大家都趕緊記錄下」,於是村裡的所有人都記錄在了自己家裡的賬本上,謹慎的保管了起來。這下可好,老李再也賴不過了,村裡即便有不守信的人,那還是好人多呀,老李也不可能找村裡全部的人偷偷抹掉自己的借錢記錄的。就這樣,區塊鏈解決了互不信任的老王和老李之間的借錢的信任問題。
在沒有出現區塊鏈之前,我們是如何解決互不信任個體間的信任問題呢?簡單啊,找兩者都信任的「德高望重」的「見證人」就好了,例如故事裡的村長,例如買賣雙方之間的支付寶,例如公證處等等。不過可能這類「見證人」也不一定一直誠信下去,所以區塊鏈乾脆就讓大家都作為見證人。
老王放心了,但老李頭疼啊!老李要等村裡人都記錄好了才能拿到借給他的錢,誰家還沒個大爺大媽手腳慢一些的。所以目前區塊鏈距離應用還有一定的距離,效率問題需要得到大幅提升才可以。
回想一下,你平時是怎麼和別人交易的:一件漂亮的衣服,你可以在實體店挑好,確認好了對方衣服質量不錯,對方確認你的錢是真錢,那麼我們面對面一手交錢一手拿貨。
要是我們隔著十萬八千里,彼此既不認識也不信任還是想交易呢?那就要有我們都信任的第三方了,也就是達成所謂的共識機制。比如:你可以在淘寶通過第三方見證擔保完成交易,錢先給支付寶——支付寶收款讓賣家發貨——賣家發貨——你確認收貨——支付寶再把錢給賣家。
但是,倘若這個中心化的機構作惡了,馬爸爸撕了賬本,不承認你給了錢,或者和賣家聯合起來騙你錢,那可怎麼辦?
又或者政府借了你一100萬,最後用超發貨幣的方式還給你錢,100萬縮水到1萬,由你來承受通貨膨脹的損失,你又怎麼辦?
有沒有不被任何政府、組織機構控制,能公開透明的完成仲裁,記錄了就不被篡改,沒有跑路風險的第三方呢?
別著急,我們的主角區塊鏈技術解決就是這樣的問題——你們之間的交易可以被所有在這個區塊鏈系統的人見證,大家的小賬本里頭都會記錄你們的交易。B如果否認收了A的錢,或者A說自己借了300塊錢,都會被路人甲乙丙丁質疑。具體是如何做到的呢?
1)系統給每個人都發了個小賬本,讓每個人都有記賬的權利,咱們稱之為分布式記賬。
2)為了鼓勵大家幫別人記賬,系統代碼設定將比特幣這樣的代幣獎勵給記賬者,為了防止一堆人記賬堵死,還將代幣設為有限個,甲乙丙丁需要通過系統規定的機制進行計算,算的最快最好的才能獲得記賬的權利,記錄之後通過系統廣播給大家,所有人復制一份相同的賬本,這個通過計算獲得獎勵的過程就叫挖礦,記賬的路人甲乙丙丁就是礦工。
3)有一天,最初記錄這筆交易的甲Game Over了,這個賬本卻還是存在在其他人的賬本里,A和B誰想否認都不行。我們把通過代碼寫好了如何仲裁和分配,無需銀行、政府、企業等中心化組織機構作為第三方見證(去中心化),直接點對點(P2P)交易的方式,稱為去中心化。
4)系統把多個交易打包成區塊,按時間順序鏈接起來成為最後人手一本的賬本,這就是區塊鏈技術
其實把區塊鏈簡單理解為賬本不過是最淺顯的解讀了,把它的每個特點拆分開來,所能應用的領域很多很多。
現在傳統金融行業、券商、投資機構正在跑步入場,物聯網, 游戲 ,儲存,版權,防偽,徵信,支付,預測市場(賭博之類)、社區等眾多領域已經開始了區塊鏈的 探索 應用。
互聯網讓萬物皆可連,區塊鏈能否讓所連皆可信呢?
我用天地自然運化的奇石解讀一下區塊鏈:
所有科學、哲學、道義⋯⋯天地都包涵著。任何一個事物、任何一種文化都與天地道化有關。
區塊鏈自然逃不脫天地運化法:即順然、隨然、無窮、無常。
它就是這塊奇石,其表面整體上的數據運化,一是,整體向著無形無象。二是線點守著一個規律:即無常之道。就是說它們每條線,每個點,追求的都不是一個閉合的目標和一個局限的目的。這樣說大家我好理解了:一個畫家要畫一隻雞,是有目的的,有終結相的,而奇石,大自然造化時,是沒有終結相的。所以相不閉合,線、點數據也不終結。區塊連接之技術,就是這個天運之道。無常運化無形無象,永無終結。(無中心化,就是無形無相,形式不封閉,結構不封閉,思想不封閉⋯⋯如「石」辦事就行)。
山東曲阜孔子靈石館
大家好,我是皮皮,我在這里用幾個生活小例子給大家解讀一下什麼叫區塊鏈?
去中心化,不可篡改級,分布式存貯的,以加密信息做鏈接地址的數據區塊鏈接系統,叫區塊鏈
這玩意本來就是許多高 科技 的復合品,沒法簡單,再簡單也是一大段話,而且未必能說清楚
區塊鏈(Blockchain)嚴格的定義是指通過基於密碼學技術設計的共識機制方式,在對等網路中多個節點共同維護一個持續增長,由時間戳和有序記錄數據塊所構建的鏈式列表賬本的分布式資料庫技術。該技術方案讓參與系統中的任意多個節點,把一段時間系統內全部信息交流的數據,通過密碼學演算法計算和記錄到一個數據塊(block),並且生成該數據塊的指紋用於鏈接(chain)下個數據塊和校驗,系統所有參與節點來共同認定記錄是否為真。
區塊鏈是一種類似於NoSQL(非關系型資料庫)這樣的技術解決方案統稱,並不是某種特定技術,能夠通過很多編程語言和架構來實現區塊鏈技術。並且實現區塊鏈的方式種類也有很多,目前常見的包括POW(Proof of Work,工作量證明),POS(Proof of Stake,權益證明),DPOS(Delegate Proof of Stake,股份授權證明機制)等。
區塊鏈的概念首次在論文《比特幣:一種點對點的電子現金系統(Bitcoin: A Peer-to-Peer Electronic Cash System)》中提出,作者為自稱中本聰(Satoshi Nakamoto)的個人(或團體)。因此可以把比特幣看成區塊鏈的首個在金融支付領域中的應用。
【通俗解釋】
無論多大的系統或者多小的網站,一般在它背後都有資料庫。那麼這個資料庫由誰來維護?在一般情況下,誰負責運營這個網路或者系統,那麼就由誰來進行維護。如果是微信資料庫肯定是騰訊團隊維護,淘寶的資料庫就是阿里的團隊在維護。大家一定認為這種方式是天經地義的,但是區塊鏈技術卻不是這樣。
如果我們把資料庫想像成是一個賬本:比如支付寶就是很典型的賬本,任何數據的改變就是記賬型的。資料庫的維護我們可以認為是很簡單的記賬方式。在區塊鏈的世界也是這樣,區塊鏈系統中的每一個人都有機會參與記賬。系統會在一段時間內,可能選擇十秒鍾內,也可能十分鍾,選出這段時間記賬最快最好的人,由這個人來記賬,他會把這段時間資料庫的變化和賬本的變化記在一個區塊(block)中,我們可以把這個區塊想像成一頁紙上,系統在確認記錄正確後,會把過去賬本的數據指紋鏈接(chain)這張紙上,然後把這張紙發給整個系統裡面其他的所有人。然後周而復始,系統會尋找下一個記賬又快又好的人,而系統中的其他所有人都會獲得整個賬本的副本。這也就意味著這個系統每一個人都有一模一樣的賬本,這種技術,我們就稱之為區塊鏈技術(Blockchain),也稱為分布式賬本技術。
由於每個人(計算機)都有一模一樣的賬本,並且每個人(計算機)都有著完全相等的權利,因此不會由於單個人(計算機)失去聯系或宕機,而導致整個系統崩潰。既然有一模一樣的賬本,就意味著所有的數據都是公開透明的,每一個人可以看到每一個賬戶上到底有什麼數字變化。它非常有趣的特性就是,其中的數據無法篡改。因為系統會自動比較,會認為相同數量最多的賬本是真的賬本,少部分和別人數量不一樣的賬本是虛假的賬本。在這種情況下,任何人篡改自己的賬本是沒有任何意義的,因為除非你能夠篡改整個系統裡面大部分節點。如果整個系統節點只有五個、十個節點也許還容易做到,但是如果有上萬個甚至上十萬個,並且還分布在互聯網上的任何角落,除非某個人能控制世界上大多數的電腦,否則不太可能篡改這樣大型的區塊鏈。
【要素】
結合區塊鏈的定義,我們認為必須具有如下四點要素才能被稱為公開區塊鏈技術,如果只具有前3點要素,我們將認為其為私有區塊鏈技術(私有鏈)。
1、點對點的對等網路(權力對等、物理點對點連接)
2、可驗證的數據結構(可驗證的PKC體系,不可篡改資料庫)
3、分布式的共識機制(解決拜占庭將軍問題,解決雙重支付)
4、納什均衡的博弈設計(合作是演化穩定的策略)
【特性】
結合定義區塊鏈的定義,區塊鏈會現實出四個主要的特性:去中心化(Decentralized)、去信任(Trustless)、集體維護(Collectively maintain)、可靠資料庫(Reliable Database)。並且由四個特性會引申出另外2個特性:開源(Open Source)、隱私保護(Anonymity)。如果一個系統不具備這些特徵,將不能視其為基於區塊鏈技術的應用。
去中心化(Decentralized):整個網路沒有中心化的硬體或者管理機構,任意節點之間的權利和義務都是均等的,且任一節點的損壞或者失去都會不影響整個系統的運作。因此也可以認為區塊鏈系統具有極好的健壯性。
去信任(Trustless):參與整個系統中的每個節點之間進行數據交換是無需互相信任的,整個系統的運作規則是公開透明的,所有的數據內容也是公開的,因此在系統指定的規則范圍和時間范圍內,節點之間是不能也無法欺騙其它節點。
集體維護(Collectively maintain):系統中的數據塊由整個系統中所有具有維護功能的節點來共同維護的,而這些具有維護功能的節點是任何人都可以參與的。
可靠資料庫(Reliable Database):整個系統將通過分資料庫的形式,讓每個參與節點都能獲得一份完整資料庫的拷貝。除非能夠同時控制整個系統中超過51%的節點,否則單個節點上對資料庫的修改是無效的,也無法影響其他節點上的數據內容。因此參與系統中的節點越多和計算能力越強,該系統中的數據安全性越高。
開源(Open Source):由於整個系統的運作規則必須是公開透明的,所以對於程序而言,整個系統必定會是開源的。
隱私保護(Anonymity):由於節點和節點之間是無需互相信任的,因此節點和節點之間無需公開身份,在系統中的每個參與的節點的隱私都是受到保護的。
【區塊鏈意義之一 :解決拜占庭將軍問題】
區塊鏈解決的核心問題不是「數字貨幣」,而是在信息不對稱、不確定的環境下,如何建立滿足經濟活動賴以發生、發展的「信任」生態體系。而這個問題稱之為「拜占庭將軍問題」,也可稱為「拜占庭容錯」或者「兩軍問題」,這是一個分布式系統中進行信息機交互時面臨的難題,即在整個網路中的任意節點都無法信任與之通信的對方時,如何能創建出共識基礎來進行安全的信息交互而無需擔心數據被篡改。區塊鏈使用演算法證明機制來保證整個網路的安全,藉助它,整個系統中的所有節點能夠在去信任的環境下自動安全的交換數據。更多介紹請參見《比特幣與拜占庭將軍問題》。
【區塊鏈意義之二:實現跨國價值轉移】
互聯網誕生最初,最早核心解決的問題是信息製造和傳輸,我們可以通過互聯網將信息快速生成並且復制到全世界每一個有著網路的角落,但是它尚始終不能解決價值轉移和信用轉移。這里所謂的價值轉移是指,在網路中每個人都能夠認可和確認的方式,將某一部分價值精確的從某一個地址轉移到另一個地址,而且必須確保當價值轉移後,原來的地址減少了被轉移的部分,而新的地址增加了所轉移的價值。這里說的價值可以是貨幣資產,也可以是某種實體資產或者虛擬資產(包括有價證券、金融衍生品等)。而這操作的結果必須獲得所有參與方的認可,且其結果不能受到任何某一方的操縱。
在目前的互聯網中也有各種各樣的金融體系,也有許多政府銀行提供或者第三方提供的支付系統,但是它還是依靠中心化的方案來解決。所謂中心化的方案,就是通過某個公司或者政府信用作為背書,將所有的價值轉移計算放在一個中心伺服器(集群)中,盡管所有的計算也是由程序自動完成,但是卻必須信任這個中心化的人或者機構。事實上通過中心化的信用背書來解決,也只能將信用局限在一定的機構、地區或者國家的范圍之內。由此可以看出,必須要解決的這個根本問題,那就是信用。所以價值轉移的核心問題是跨國信用共識。
在如此紛繁復雜的全球體系中,要憑空建立一個全球性的信用共識體系是很難的,由於每個國家的政治、經濟和文化情況不同,對於兩個國家的企業和政府完全互信是幾乎做不到的,這也就意味著無論是以個人抑或企業政府的信用進行背書,對於跨國之間的價值交換即使可以完成,也有著巨大的時間和經濟成本。但是在漫長的人類 歷史 中,無論每個國家的宗教、政治和文化是如何的不同,唯一能取得共識的是數學(基礎科學)。因此,可以毫不誇張的說,數學(演算法)是全球文明的最大公約數,也是全球人類獲得最多共識的基礎。如果我們以數學演算法(程序)作為背書,所有的規則都建立一個公開透明的數學演算法(程序)之上,能夠讓所有不同政治文化背景的人群獲得共識。
【未來的發展】
互聯網將使得全球之間的互動越來越緊密,伴隨而來的就是巨大的信任鴻溝。目前現有的主流資料庫技術架構都是私密且中心化的,在這個架構上是永遠無法解決價值轉移和互信問題。所以區塊鏈技術有可能將成為下一代資料庫架構。通過去中心化技術,將能夠在大數據的基礎上完成數學(演算法)背書、全球互信這個巨大的進步。
區塊鏈技術作為一種特定分布式存取數據技術,它通過網路中多個參與計算的節點開共同參與數據的計算和記錄,並且互相驗證其信息的有效性(防偽)。從這一點來,區塊鏈技術也是一種特定的資料庫技術。互聯網剛剛進入大數據時代,但是從目前來看,大數據還處於非常基礎的階段。但是當進入到區塊鏈資料庫階段,將進入到真正的強信任背書的大數據時代。這裡面的所有數據都獲得堅不可摧的質量,任何人都沒有能力也沒有必要去質疑。
也許我們現在正處在一個重大的轉折點之上——和工業革命所帶來的深刻變革幾乎相同的重大轉折的早期階段。不僅僅是新技術指數級、數字化和組合式的進步與變革,更多的驚喜也許還會在我們前面。在未來的24個月里,這個星球所增長的計算機算力和記錄的數據將會超過所有 歷史 階段的總和。在過去的24個月里,這個增值可能已經超過了1000倍。這些數字化的數據信息還在以比摩爾定律更快的速度增長。區塊鏈技術將不僅僅應用在金融支付領域,而是將會擴展到目前所有應用范圍,諸如去中心化的微博、微信、搜索、租房,甚至是打車軟體都有可能會出現。因為區塊鏈將可以讓人類無地域限制的、去信任的方式來進行大規模協作。
區塊鏈是一種技術,基於這項技術產生很多應用,包括與數據和信息相關的一切行業業務,比特幣就是其中最為人熟知的一種應用。對於區塊鏈的通俗解釋就是,假如在網上買一隻口紅,首先找到心儀的產品和賣家下單,先把錢給中間平台,等到賣家發貨買家確認收貨以後,中間平台再把錢轉給賣家,因為信任問題買賣家之間都依賴於中間平台,而區塊鏈作為去中心化的分布式賬本資料庫,則著力於去掉這個中間平台但同時又解決信任問題。在區塊鏈中每個人擁有自己的記賬本,用來記錄發生的每一件事,假如在交易中出現賣家拿錢不發貨的行為,這一條記錄將永久存在不可修改,不需要互相交換信息,區塊鏈的世界會選擇在同一個時間節點記錄最快質量最好的那個人的記賬本進行復制發送並串聯,最後越疊越厚形成區塊。
大家在談論虛擬貨幣時,往往離不開區塊鏈這個概念,那麼區塊鏈到底是個神馬玩意呢?
區塊鏈是一種底層技術,本質上是一個去中心化的分布式賬本資料庫。聽起來好像十分高端,遙不可及,其實是很容易理解的。
舉個例子,假如要在淘寶上購買商品,那麼一般首先要做的就是打開淘寶,找到想要的商品並下單將錢支付給作為交易中介的淘寶。等收到商品並確認收貨後淘寶便會將貨款打給賣家。這本來只是我和賣家的交易,但卻多了個「中心」,即淘寶。
在交易進行的過程中,這個「中心」擁有無限大的權力,甚至隨意修改賬單。因此,「中心」往往需要強大的後台為其背書。
於是,有一個名叫中本聰的男人想要幹掉這個權力無窮大的中心,他想創造一個去中心化的系統,在這個系統里,每個人都是中心,都有記賬的權力。於是,他創造了比特幣。
在比特幣的系統中,每個人都有一個小賬本用以記錄發生的每一筆交易。一筆交易只有經過大部分人確認後才有效。如果賣家不發貨,那麼每個人的小賬本都會將這件事記錄下來,讓他無處可逃。
這時候大家可能會有疑問,既然只是一個公開的賬本,那麼為什麼又要叫區塊鏈呢?這就涉及到了共識問題,區塊鏈系統是一個由眾多「中心」組成的系統,整個區塊鏈是屬於所有參與記賬的個體的。這時候就產生了新的問題,一個系統必須要有秩序才能長遠的存在。假如記賬者可以不計成本地胡作非為,那就可能出現本來只是購買一台手機,但收到的卻是一台特斯拉的情況。
於是,中本聰發明了一種名為PoW的共識方式。這種方式提高了記賬者記賬的成本,讓其不能輕易作惡。PoW通過密碼學的方式要求記賬者需要通過競爭計算能力來獲取記賬權,第一個計算出結果的記賬者即可獲得一個由若干筆交易打包而來的區塊的記賬權,同時獲得一定的代幣作為獎勵。這就是我們俗稱的「挖礦」。
既然記賬者已經將一個包含了若干筆交易的區塊記錄了下來,那麼系統就需要進行整理排序,不可能讓無數的區塊雜亂無章地分布在系統中。於是就需要把所有區塊按照時間順序首尾相連鏈接鏈接起來,這時,區塊鏈便誕生了。區塊鏈的核心是技術。
㈩ 拜占庭將軍很忙—《區塊鏈思維》第21塊
無論在鏈圈,還是在幣圈混,經常聽到一個名詞「拜占庭將軍問題」。
到底拜占庭是啥,拜占庭將軍怎麼啦,到處都被提及,這位將軍好忙啊!
先說拜占庭這個地方。很久很久以前的歐洲,建立在比中世紀還古老的時期,歷史上就是東羅馬帝國,跨越了千年的歷史期盼。
扯遠了,回到正題,什麼是拜占庭將軍問題。
拜占庭這個地方異常堅固,同時被十個獨立鄰邦環伺,分別有一位將軍,單獨攻城必敗,只有一半以上的將軍同時攻打才能破城。
十位將軍為了協調一致,在那個古老的時代,累死傳令兵,要麼飛鴿傳書(那時的歐洲比中國落後,好像沒有這個高速通信手段)。十位將軍相互通信一次就需要90次傳信,每位將軍都有各自的攻城計劃,要想達成統一就需要往復傳遞不知道多少次。
我們可以假設一個場景,一個桌子上坐著十位將軍,每個人各自說著自己的想法,同時聽其他九位的說法,但是信息的傳遞不是實時的,有快有慢,有早有晚。想明白了嗎?也就是說,這十位將軍如果想達成一致,理論上有可能,實際上他們的有生之年都實現不了,難怪拜占庭帝國經歷了千年也沒有被這十位將軍攻破。
中本聰這個神人,利用互聯網信息傳遞的及時性特點,引入時間戳可以明確知道「誰先說、誰後說」的特性,創造性地加入挖礦機制(就是用計算機算隨機數滿足一定難度才算成功)比拼各位將軍的智商來決定誰做本次進攻的統帥,使用非對稱加密保證信息傳輸的安全性等等手段融合到比特幣中,用實例說明自己破解了這個歷史難題「拜占庭將軍問題」。從而向世人證明解決60億人口的互信問題是有去中心化解決方案地。
幣圈和鏈圈的朋友很焦慮的另一個關鍵問題就是:這個圈子概念太TM多。除了這個「拜占庭將軍問題」,還有一個「拜占庭容錯」,這是什麼鬼?這兩個是一樣的嗎?這兩個是故意有一個被寫錯了嗎?還是說我的智商稅沒交夠?其實,你都說對了。
「拜占庭將軍問題」假設所有十個將軍都是好的,都想攻破拜占庭,只是達成共識很難,比特幣提供了好人達成共識的方案。
「拜占庭容錯」是說十個將軍可以很好地達成共識。但是,如果其中出了壞人,怎麼解決?
如果十個將軍中出現了壞人(叫叛徒也行),進攻計劃是否會永遠無法達成共識呢?
「拜占庭容錯」告訴大家,是可以達成地,並且,還能找出這些「叛徒」是誰。只是,10個將軍中叛徒的數量不能超過3個,超出了就無法「容錯」,也找不出這些叛徒是誰。對應的公式就是:3n+1。其中3n+1是將軍總數(區塊鏈的賬本/礦機總數),n是能夠「容錯」的「叛徒」(惡意記錯賬)總數。
對於十個將軍來說,最多容忍三個叛徒,多了就徹底沒戲啦。為了比特幣的容錯能力越來越強,就需要更多的節點,這樣才能容忍並找出更多的叛徒。懂了吧。
小結一下:拜占庭將軍問題是假設都是好人前提下如何達成共識,拜占庭容錯就是全網最多能夠容忍多少叛徒並且能找出他們。
請交智商稅到如下地址:
國稅BTC到Kcash:
地稅ETH及各種原生Token到 Imtoken:
不交稅的,祝你做「韭菜」一切順利 :D