磨鏈-3.12分享
磨鏈 (mochain): 區塊鏈技術非盈利組織
關於mochain社區文化:
註冊域名: mochain.info,mochain.group,mochain.tech
Github 組織:https://github.com/mochain
Gitter 房間:https://gitter.im/mochain
知識星球:磨鏈https://t.zsxq.com/M3BMVZN
簡書專題:https://www.jianshu.com/c/7713057aaebd
相關分享
相關討論
磨鏈計劃相關
磨鏈計劃相關
磨鏈計劃9-區塊基礎
更新相關共識機制、分散式概念https://www.gitbook.com/book/fisho2017/blockchain-basic-concept/details
:常見共識機制
POW:proof-of-work工作量證明,這個最簡單的理解就是多勞多得,說的書面化,「通過工作以獲得指定成果,成果證明付出的努力」,工作量證明最早出現的應用場景是哈希現金,Adam Back於1997年發明用於抵抗郵件的拒絕服務及垃圾郵件網管濫用。比特幣中通過計算哈希函數(Hash Function)來作工作量證明,這裡簡要說明下哈希函數:也稱為散列函數,給定一個輸入x,它會算出相應的輸出H(x),輸入x可以是任意長度的字元串,輸出結果即H(x)的長度是固定的,計算H(x)的過程是高效的(對於長度為n的字元串x,計算出H(x)的時間複雜度應為O(n)關於函數碰撞等具體問題將來另作一文說明)。比特幣中計算方式是SHA256(Secure Hash Algorithm)輸出為256位的哈希演算法,比特幣中區塊結構如下:
比特幣的區塊由區塊頭及該區塊所包含的交易列表組成。區塊頭的大小為80位元組,由4位元組的版本號、32位元組的上一個區塊的散列值、32位元組的Merkle Root Hash、4位元組的時間綴(當前時間)、4位元組的當前難度值、4位元組的隨機數組成。區塊包含的交易列表則附加在區塊頭後面,其中的第一筆交易是coinbase交易,這是一筆為了讓礦工獲得獎勵及手續費的特殊交易(目前曠工獎勵12.5比特幣)。
擁有80位元組固定長度的區塊頭,就是用於比特幣工作量證明的輸入字元串。因此,為了使區塊頭能體現區塊所包含的所有交易,在區塊的構造過程中,需要將該區塊要包含的交易列表,通過Merkle Tree演算法生成Merkle Root Hash,並以此作為交易列表的摘要存到區塊頭中。其中Merkle Tree的演算法圖解如下:
難度值(difficulty)是礦工們在挖礦時候的重要參考指標,它決定了礦工大約需要經過多少次哈希運算才能產生一個合法的區塊。比特幣的區塊大約每10分鐘生成一個,如果要在不同的全網算力條件下,新區塊的產生保持都基本這個速率,難度值必須根據全網算力的變化進行調整。簡單地說,難度值被設定在無論挖礦能力如何,新區塊產生速率都保持在10分鐘一個。
難度的調整是在每個完整節點中獨立自動發生的。每2016個區塊,所有節點都會按統一的公式自動調整難度,這個公式是由最新2016個區塊的花費時長與期望時長(期望時長為20160分鐘即兩周,是按每10分鐘一個區塊的產生速率計算出的總時長)比較得出的,根據實際時長與期望時長的比值,進行相應調整(或變難或變易)。也就是說,如果區塊產生的速率比10分鐘快則增加難度,比10分鐘慢則降低難度。這裡有一個誤區,不是每個區塊產生的時間都是10分鐘左右,有時候區塊的產生要時間久很多或者很快生成,故這個10分鐘是一個平均值。難度公式:新難度值 = 舊難度值 * ( 過去2016個區塊花費時長 / 20160 分鐘 ),而工作量證明的目標值(target)計算公式:
目標值 = 最大目標值 / 難度值(其中最大目標值為一個恆定值:0x00000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF新難度值 = 舊難度值 * ( 過去2016個區塊花費時長 / 20160 分鐘 ))
整個工作量計算公式具體為:
POW工作量證明一直運行在比特幣上,但越來越多職責POW,一,資源的浪費,大量計算節點通宵達旦的計算,對於資源是很大程度的浪費。二、比特幣的收益促使聯合挖礦,礦池的集中是對去中心化的一種威脅(51%算力威脅)。
POS機制:
POS:POS權益證明(proof of stake)。這個解釋為股權證明,2012年sunny king首次提出了POS概念,POS不需要大量算力來維持網路安全,通過錢包相應權重來獲取獎勵。所謂POS股權證明,通俗解釋依據你持有的數字貨幣的數量和持有時間,根據這個兩個要素髮放一個利息,這裡的銀行存款的概念很相似。這裡需要引入一個幣齡的概念,幣齡根據你持有的幣乘以持有時間來計算,一旦你發現了一個POS的區塊,那麼你的幣齡就被清空。當你被清空了365幣齡,你將獲得0.05個幣的利息,那麼計算公式就是:數字貨幣量*持有時間/365=利息。Pos機制鼓勵每個人去打開客戶端錢包,根據上面對POS的解釋,打開客戶端錢包里才可能發現區塊,那麼就會獲得利息,當然現在POS2.0的機制(下文會解釋2.0)里,必須在線運行客戶端錢包,才會按照你的數字貨幣持有量和運行客戶端錢包時間分發利息,不停的有在線客戶端錢包運行,這也就保障了整個系統網路的健壯和系統運行的保障了。昨天剛好有個朋友來問,在比特幣系統中萬一比特幣挖完了,那麼算力大大降低了,是不是就可能出現51%算力集中攻擊。這個問題如果在POS機制中,就要求攻擊者需要擁有51%的貨幣量,試想下,51%的貨幣量被控制,這個難度和這個環境的不可靠,應該也不會吸引到太多的人了。再對比下比特幣,有些人認為比特幣是不會膨脹的一個貨幣體系,因為他的數量的是確定的,但是有沒有想過一個錢包丟失的問題,要深究的話,比特幣是一個貨幣緊縮體系,總數一定,但是會有不確定丟失。
POS的機制,那和比特幣的POW機制相比,POS認為是一定程序上縮短了達成共識的時間,而且節省了資源,不像POW需要大量的算力。但是POS也有自己不可避免的缺點,單純來說POW中,算力是基礎,根據算力來決定你的話語權,但是控制算力目前來看,規模越大,越無法控制甚至壟斷,相對來說比較公平。POS類似股票,持有貨幣量決定話語權,在一個公司內部,前期奮鬥,後期可能作為決策者有大量的股份那就有決定權,數字貨幣環境不是單純的一個公司那麼簡單,數字貨幣要求一個公正的環境,那麼POS機制下,後來者明顯處於了劣勢,你前期持有幣,那麼你就可以不斷的通過利息機制獲得新幣,這個過程對於先前就掌握了幣的人不需要付出太多的成本,可以永久吃利息,那麼這會造成一個買賣幣的問題,掌握了一定數量幣,而且一直增加,那麼就沒有太大的賣幣的需求,而且你的話語權因為你掌握的幣不會變,後來者不管如何努力,話語權還是處於劣勢。技術角度來說,之前的文章中有對軟分叉和硬分叉做過簡單介紹,那麼在POS機制中,一旦發生了硬分叉,這個問題就相當複雜了,因為持有貨幣的人在兩條鏈上都有相同數量的貨幣,新的分叉也能獲得利益,那麼這個分叉就很大程序會被默許,這樣的分叉一旦出現就會不斷出現,整個系統就處於崩潰,缺乏約束健壯性。大多數都是採用POS+POW機制,例如點點幣,黑幣。
POS2.0:這裡再說下黑幣,黑幣的機制被稱為POS2.0(上文有提過),這個概念是前5000個區塊,使用純POW機制,5001到10000使用POS和POW混合機制、10001之後採用純POS機制。這種模式在前期完成開採和分配,然後再進入POS模式。
DPOS機制:
DPOS:股份授權證明機制,這種機制採用投票的方式,由Bitshares提出,先解釋下這個投票過程:每一個持有數字貨幣的人來進行投票,投票選舉一組代表,假設這一組的數據是101個,然後這101個代表理解成為101個特權節點,101個節點權利完全相等,類似議會制度,選舉委員。當然不是選出後永遠都是這些節點成為特權節點,一旦在生成區塊的時候未能生成(這裡會有網路原因,節點宕機,惡意行為等原因),節點被除名,再次選舉新節點來替代。除名選舉在系統中時刻進行。
這種方式仔細考慮下,時刻運行選擇和除名操作,這樣保證了網路上所有可信任節點,整個網路更加民主,不需要網路中所有節點或者大部分節點確認,被選舉出來的節點實時保證在線有效,那麼就保證了系統正常運行,更重要的是,區塊一直由這些選舉節點在確認生成大大提高了確認的效率,縮減整個交易確認時間,這個在很大程序上改善了比特幣網路中POW效率的問題。對比之前的POW和POS機制,這種方式在單一區塊中可容納更多交易,使其可接近目前中心化系統的處理效率,每個節點投票選舉,然後特權節點生成區塊,每個節點有選舉權,這樣不依賴算力和持有幣數量的的約束。有興趣的可以看下DPOS的白皮書:https://wenku.baidu.com/view/74034196ba0d4a7303763a48.html
DPOS背後的理性邏輯:
使權益所有者能夠通過投票決定記賬人
最大化權益所有者的紅利
最小化保證網路安全的消耗
最小化網路運行成本
最大化網路的性能
DPOS本質上是把整個網路中權益分給每一個節點,從而實現去中心化的概念,現實中的投票機制可能會有缺陷,但是通過不停的選舉和淘汰,保證網路中節點的高效率,從而提高整個系統的高效性。
磨鏈計劃
+
※蝦說區塊鏈-音頻-3-hash演算法
※蝦說區塊鏈-79-以太坊白皮書三
TAG:投河自盡的蝦 |