本章,我嘗試描述PoS共識運行的步驟,來了解其大致的原理。
一般情況下,PoS共識的運行有7個基本步驟,運行節點,注冊成驗證人,Stake,選舉驗證人,打包交易,廣播交易,驗證人確認,以下我會對每個步驟進行解釋。
因為不同項目有不同的實現方案,當我們在看具體項目時,會發現有的項目會有細節上的不同,或者已有步驟的先后次序不一樣,這些不同都是這些項目的特色,或是增加安全,或是提高性能。我把各個項目中的精華拿出來,我發現大致過程是差不多的,用一句話將PoS共識串起來:
持幣人將幣Stake,獲得出塊權利,在指定時間打包交易,并廣播出去,得到驗證后,新區塊生成。
運行節點
持幣人成為驗證人之前,需要運行節點客戶端,成為一個區塊鏈分布式網絡中的接入點,也叫節點。早期的區塊鏈項目,為了方便大家接入網絡,都會有命令行,為用戶體驗著想的團隊還會開發一個簡單的可視化客戶端,即錢包客戶端。這些錢包客戶端以桌面版為主,一般支持Windows,MacOS和Linux3種系統,如BitcoinCore,Parity等。客戶端里集成了運行的命令,并且都是可視化的簡單操作,用戶只需要簡單點幾下,即可以運行起節點。
這個節點就是我們所說的,區塊鏈分布式賬簿中的一個點,這個點,存儲著區塊鏈所有的交易記錄,并將參與到整個網絡的共識當中去。所以,你的電腦即充當了存儲的功能,也充當著計算的功能。
那Nuls項目舉例,首先在官網下載對應的錢包客戶端,以MACOS為例
安裝好錢包后,打開,進入區塊同步的階段。從途中可以見到主網高度為1987877個塊,本地同步了374個塊,按照網路速度和數據大小,區塊同步可能持續的時間較長。
區塊同步完成之后,你可以選擇創建一個錢包,或者導入錢包
創建完成后的一個錢包
錢包創建完成,可以參與到PoS共識,即PoS挖礦中去。按照Nuls的共識,你可以將你的挖礦權益委托給礦工。錢包中已經列舉了一些礦工,選擇一個礦工,輸入你要委托的Nuls數量,就可以參與到共識挖礦中來。
除了錢包客戶端之外,項目提供最多的方式就是命令行了,有編程基礎的小伙伴,可以按照官方的介紹,執行相關的命令就可以了。命令行我們拿Tezso來舉例一下,以下是用命令行創建Teozs節點的步驟:https://github.com/tezoscommunity/FAQ/blob/master/Compile_Mainnet.md
登錄Debian或是Ubuntu系統,并升級基礎包
ssh
apt-getupdate
apt-getdist-upgrade-y
創建一個Tezos賬戶,不要以root權限運行服務。注意makebuild-deps這個命令需要sudo的權限
addusertezos
addusertezossudo
reboot
ssh
如果你運行的是Ubuntu16,執行下面的命令安裝bubblewrap和最新版本的git
聲音 | 農村農業部:建設農業農村大數據中心 加快區塊鏈等技術應用:據新華網報道,農業農村部有關負責人表示,我國將實施數字農業農村規劃,開展數字農業和數字鄉村試點,實施“互聯網+”農產品出村進城工程,建設農業農村大數據中心,加快物聯網、區塊鏈、人工智能、5G等現代信息技術應用。[2020/1/27]
sudoadd-apt-repositoryppa:ansible/bubblewrap
sudoadd-apt-repositoryppa:git-core/ppa
sudoapt-getupdate
創建環境初始化
sudoapt-getinstall-ypatchunzipmakegccm4gitgaspcudbubblewrapcurlbzip2rsynclibev-devlibgmp-devpkg-configlibhidapi-dev
安裝OPAM
方法一
sh<(curl-sLhttps://raw.githubusercontent.com/ocaml/opam/master/shell/install.sh)
方法二
wgethttps://github.com/ocaml/opam/releases/download/2.0.0/opam-2.0.0-x86_64-linux
sudomvopam-2.0.0-x86_64-linux/usr/local/bin/opam
sudochmodax/usr/local/bin/opam
獲得主網源碼
gitclone-bmainnethttps://gitlab.com/tezos/tezos.git
cdtezos
初始化依賴工具
makebuild-deps
編譯
eval$(opamenv)
make
設點節點身份
./tezos-nodeidentitygenerate26.
運行節點,等待節點同步成功
nohup./tezos-noderun--rpc-addr127.0.0.1:8732&
不過在此要說明的一點就是,自己運行全節點,意味著你需要付出諸如存儲空間,計算力,電力等資源,并且保證你是24小時開機,才能讓一個完整的全節點錢包運行下去,同時可以獲得PoS共識中Stake的收益,所以這看上去不是一個很簡單的差事。
目前為止,全節點運行已經慢慢發展了幾個階段,下面我來說說這幾個階段的演變過程。
一般自己運行運行起來的節點是全節點,全節點就是記錄了主網上線以來的全部數據。初期的PoS項目基本都是類似Nul這樣的全節點錢包客戶端,其模擬的也是比特幣初期可用電腦CPU挖礦的原理,運行節點的門檻也就是需要一臺計算機。但全節點有個不好的地方,隨著區塊數據的增多,會需要更多存儲空間。同時,錢包客戶端不能掉線,也就是不能關機,斷網或者斷電,要不然你無法運行節點來獲得出塊機會,已獲得的出塊機會在此種情況下也無法繼續。
動態 | 報告:區塊鏈和物聯網技術應用相對較少:據上證報中國證券網訊,中國互聯網金融協會金融科技發展與研究專委會聯合瞭望智庫組建了商業銀行數字化轉型課題組。課題組面向51家各類型商業銀行展開問卷調查,走訪調研10余家代表性商業銀行和金融科技公司,形成了《中國商業銀行數字化轉型調查研究報告》。《報告》于10月18日正式發布。《報告》顯示,總體上看,我國商業銀行數字化轉型正在加速。商業銀行通過加大轉型投入力度、招錄數字化人才、搭建統一大數據平臺、改進線上渠道和網點服務等綜合措施加快推進轉型。從技術應用上看,大數據和生物識別技術在調研銀行中應用廣泛,區塊鏈和物聯網技術應用相對較少,新型互聯網銀行和國有大型商業銀行在技術創新應用方面更為積極。[2019/10/18]
家用電腦不同于專業挖礦,所以隨著個人全節點的缺點暴露的越來越多,開始出現專業運行的礦池,礦池是專業挖礦的機構,可以支持24小時,不斷電,不停網的挖礦方式,普通用戶如果不想自己守著電腦挖礦,可以將幣發送給礦池,讓礦池來幫助自己出塊獲得獎勵。礦池通過收取一定的手續費來獲得收入。
這也是委托的第一種方式,但是這種委托需要把幣給到礦池手中,用戶往往需要承擔很大的風險,如果礦池失竊,或是卷款潛逃,用戶往往一點辦法都沒有,需要極大的信任,還需要礦池維護人員有良好的職業操守。
項目方在運行一段時間后,也會發現個人Stak的意愿并不是很高,而自建礦池或者集成已有礦池到委托驗證人的選擇里面來,既可以幫助礦池做安全背書,也能大大提高個人Stake的意愿,維護網絡安全,所以我們開始看到第二種委托形式——項目方支持委托權益的轉移了。這種形式下,個人只需要將幣轉移到中間賬戶,或者是發送個合約賬戶,就可以完成獎勵的獲得,承擔的風險大大降低。
但第二種形式的委托也有問題,畢竟用戶無法使用Stake的幣,大量用戶會因為流動性原因不進行Stake。后來有項目方做了進一步的妥協,支持委托只是建立一種關系,而不需轉移代幣,Tezos上的委托就是如此。用戶發起委托,委托期間,但是仍然能支配自己的代幣,極大的降低了非自愿運行節點用戶Staking的成本。
但是,代交抵押金來出塊的方式,并不能讓節點獲得足夠大的收益,也不能以此形成更專業化的操作礦池,雖然對去中心化有極大的幫助,但是在一定程度上會降低一些節點驗證人的動力。于是,第四種委托方式出現了,用戶委托仍然是層關系,委托期間,Staking代幣的歸屬權仍然屬于用戶自己,但是要使用,比如發送,需要解鎖Stak的代幣才可以,為了防范長程攻擊,解鎖的時間一般持續20天~40天左右,以提高攻擊成本。
無論那種形式的委托,只要你想成為驗證人,那么第一步肯定還是需要自己運行節點的。現在只要是公鏈項目都支持運行節點,大多數都提供了命令行的運行方式,錢包客戶端運行的全節點已經開始慢慢退出舞臺。運行節點變成了一件更加專業的事情,每個PoS共識項目都有自己的命令,按照命令執行即可以運行全節點。
聲明為驗證人
節點運行起來后,需要執行變成驗證人的命令,執行完命令,就可以變成驗證人。一般對驗證人的要求比全節點的要求要多。首先你需要保證的就是驗證人節點的配置符合項目的要求,一般情況下,驗證人的配置要求要比全節點的配置要求要高。其次確認項目對驗證人節點的一些硬性門檻,如持幣量,鎖定時間等。Teozs要求驗證節點的持幣量需要達到10000個XTZ,Cosmos要求驗證節點的Stake量在前100位,Cardano要求節點是礦池,持幣量達到總體幣量的1%。
聲音 | 網商銀行董事長:非常重視區塊鏈技術且已完成很多場景的落地應用:據澎湃新聞報道,螞蟻金服總裁、網商銀行董事長胡曉明表示非常重視區塊鏈技術,并稱:“我們在此之前已經做了長達幾年的研究和技術探索,積累了目前全球最多的專利,并且已經完成了很多場景的落地應用,對于Libra,我們覺得整個社會應該用開放和謹慎的態度去看待這個事情。”網商銀行行長金曉龍透露,上周網商銀行和成都市綜合企業擔保企業中心共同做了擔保憑證的區塊鏈,在擔保憑證區塊鏈的保障下,已經有企業獲得融資,另一個場景就是資產轉讓的環節里,通過區塊鏈技術,把大量隨借隨還的債權債務信息和合作機構進行同步。[2019/6/25]
除了硬性要求,還有一些軟性實力的要求,比如驗證人需要時團隊,或者公司,要求不能用云服務器,要求在社區有一定的聲譽,要求投票需要達到一定的數量等等,這些門檻都需要在申請驗證人之前了解,如果在不了解的情況下運行,可能無法聲明成為驗證人。
同樣以Tezos為例,Tezos對機器配置的要求不高,但有持幣10000個XTZ數量的門檻,達到門檻,執行以下命令成為驗證人
激活成為Baker
./tezos-clientaddaddressmy_account
./tezos-clientactivatefundraiseraccountmy_accountwith
質押Stake
Stake和成為驗證人可以合成一部,由于Stake在PoS共識中的重要性,我把這兩部拆開了。成為驗證人之后,該驗證人賬戶中的幣會被檢測,帶有門檻的PoS共識會在此檢測一些條件,當條件符合時,賬戶被標識為合格,然后放到驗證人列表當中。如果不合格,此驗證人并不會在真正的驗證人列表里面。
合格的驗證人,其賬戶里面所有的幣都是質押成為Staking的幣,系統會計算該賬戶的Staking數量在總體Staking量中的占比,使用算法來選舉每個區塊的驗證人。
在Tezos上沒有Stake的操作命令,只需要生命成為驗證人的賬號有代幣,成為驗證人之后,該賬戶的幣就相當于默認Stake了。另外,需要注意的是,在Tezos上執行成為驗證人的命令時,系統就會進行驗證人門檻的判斷,比如賬戶中是否有10000個XTZ。只有滿足門檻后,才能成為驗證人,并且進行Stake。
選舉驗證人
系統會從候選的驗證人列表當中選擇出塊人。選擇出塊人的算法有很多種,每種的優缺點都不一樣,但是它們都有一個共同要保證的任務,那就是保證選舉結果不能被操縱,不能被預測,防止GrindAttack的攻擊發生。只有安全性足夠高的算法,才能保證整個token的激勵系統不會被單一方所控制。
以下我們來列舉幾種目前比較流行的選舉方式:
Follow-the-Satoshi
Follow-the-Satoshi算法,最早出現在論文《ProofofActivity:ExtendingBitcoin’sProofofWorkviaProofofStake》中,其作用就是在PoA共識當中選出出塊人。
Satoshi這里的意思是聰,是比特幣電子貨幣形式里,最小的計數單位,每個已被鑄造出來的聰都對應一個UTXO,而每個UTXO都可以對應到一個私鑰,而每一個私鑰都可以對應到一個持有人。如果用持幣權重代替算力權重的話,PoS共識中的持幣人其權重,其實就是多個聰的集合,所以選擇出塊人,即從這些聰的集合當中選擇就可以了,哪個持有人中擁有最多被選中的聰,那他就是這個高度的出塊人。這就是Follow-the-Satoshi的原理。
聲音 | 建設銀行原董事長:比特幣交易通過信息技術瞬息完成:據新浪財經報道,日前,中國金融博物館在沈陽舉辦第104期“博物館金融大講堂”,中國建設銀行原董事長王洪章做題為“金融安全與風險防范”的主題演講表示,互聯網從15年前開始引進,快速發展則是2012年之后, 電子支付、P2P以及區塊鏈比特幣的炒作,它的交易通過信息技術瞬息完成。[2019/5/5]
PoS中的持幣人staking后,可以被最小單位s劃分成很多份,Follow-the-Satoshi當中會有一個隨機數輸入源p,充當最開始的隨機起始點,然后隨機選出這個出塊人。每個持幣人都有多份s,那么單個塊的出塊人就是當前包含最多p的持幣人。
運用Follow-the-Satoshi算法的PoS項目有Tezos和Cardano。
Tezos對算法做了改良,因為聰的單位太小,隨著系統鍛造出來的聰越來越多,選擇算法會變得低效,所以Tezos進行了規整,以10000XTZ為一個卷,將卷作為隨機數選擇的目標,以此來提高選擇效率,包含選中最多的卷將成為塊的出塊人。同時,為了讓隨機數源變得不可預測,Tezos將4096個塊當成一個選舉周期,利用上一個周期出塊人披露的Nonce為隨機數輸入源。未披露的驗證人將會被扣除抵押金。
Cardano的做法和Tezos類似,以一定區塊數為選舉周期,每個周期有一個創世塊,每個創世塊中包含了每個塊的出塊人和一個隨機種子p。和Tezos不同的是,Cardano每個塊只有一個出塊人,如果這個出塊人掉線,這個塊會被拋棄,直接進入下一個區塊。而Tezos中單個塊會有多個出塊人,這些出塊人會有不同的優先級,以避免備選出塊人出現的種種情況。
RoundRobin
維基百科對RoundRobin的解釋是:
術語循環/輪轉/輪替用于多種情況中,通常指將多個某物輪流用于某事,例如“逐戶派對”中所有參與者要挨家挨戶地拜訪每位參與者的住處并參加那里的小型聚會。聯名信往往是指一大群下屬為批評其領導而寫的一封信,這種信一般只在簽名人數多到難于逐個報復后才會寄出。
一個簡單的RoundRobin算法的例子如:F(i,b)=1ifb.height%N==ielse0
RR常用于聯盟鏈或者私有鏈居多,因為循環出塊的可預知性太強,如果在一個可允許被隨意進入的區塊鏈網絡里面,被攻擊的概率會比較大,系統抗風險性變差。所以,在聯盟鏈或者私有鏈的網絡里面,各個節點互相知道/審核/同意,利用RR既是一種簡單可行的方式,又是一種高效的算法。
但是,后來有項目方改良了RR的算法,用于到Pemissionless的區塊鏈網絡中來確定出塊人。我不確定是否是EXONUM團隊對RR進行了首次改良,但是我在google找到到了他們改良的方案。相對的,在Multichain的白皮書中也有將RR算法運用到聯盟鏈中的說明。
在EXONUM里面,RR的執行邏輯是,在一個高度H里面,所有出塊人排列成一定的順序,如果首位出塊人掉線則直接跳過,第二位出塊人代替首位出塊人位置來出塊,如果第二位出塊人掉線,則排在第三位的出塊人頂上,以此類推,由此得出循環算法的說法。在高度H1里面,在H高度的出塊人將不在獲得出塊機會,其出塊權利會被鎖定一定的周期F,只有等權利解鎖后才會再次被加入的排序中來。
聲音 | 普華永道區塊鏈負責人:區塊鏈技術是瑞士銀行業發展的推動者:據Cointelegraph消息,針對區塊鏈技術發展可能給瑞士銀行業帶來的沖擊,普華永道區塊鏈負責人Pierre-Edouard Wahl認為區塊鏈技術的發展是能夠促進瑞士銀行業務發展的。他表示:“我實際上認為它將成為推動者。是的,它可能會損害他們現有的業務,但新技術往往就是這種情況,要么采用它們,要么對這些技術如何實際提供新解決方案,以及改進現有解決方案有不同的看法。[2018/8/8]
當然,每個高度H的出塊人排序不能是固定的,那么會被攻擊者找到攻擊目標。所以每個高度H的順序由算法得出,T=Hash(H)modM!。可以確定每輪,驗證人的排序都不一樣,這樣就避免了相同順序下,驗證人合謀的低成本問題。
Cosmos同樣使用了RR算法來進行驗證人選舉。Cosmos按照出塊人的權重,來確定高度H下的出塊人,每個高度的第一個Proposer對出塊進行提議,然后進入該高度H的第一個Round,其他驗證人對該提議進行兩輪投票,兩輪都超過2/3通過,該區塊被commit,成為高度為H1的塊。如果中間的任意議論投票中,有一輪的投票并沒有達到2/3的權重,那么第一個Proposer的提議被否決,這進入第二個Proposer的提議階段,提議重復第一個Proposer提議的流程,以此類推。
在寫此書的時候,Cosmos的測試跑到了Gaia9003,Genki4002,同時還進行著一個主網上線前的測試網網絡GameofStake,對于測試網中的很多功能還在測試,包括驗證人選舉,所以對于RR的算法并不是最終版本,等到主網上線后,我會再來補充具體的選舉出塊人方式。
DPoS
DPoS是由DanielLamier在2013年的比特股上提出來的,其底層是基于石墨烯平臺來搭建,我在此處說明的是基于石墨烯底層搭建的DPoS系統,其他的委托權益證明共識Delegate-PoS不在此范圍之內。
基于石墨烯的DPoS,其出塊人選舉和RR算法有點像,更像是簡單版本的RR。在DPoS的系統中,所有出塊人由用戶投票得出,投票最高的幾位出塊人獲得出塊機會。通常,出塊人的數量是固定的,如EOS里面固定是21位,這21位出塊人被投票出來之后,在一輪中,其出塊順序由15個及以上的生產者約定的順序安排。
目前EOS的約定順序是按照字母a-z排列的,比如Asia會比Basic排在前面出塊,而Canada會在Basic后面出塊。目前的這種排序方式,決定了每輪的排序其實有一樣的順序。
所以DPoS里面一個很基礎的選舉方式就是,系統規定一個固定數量的出塊人,出塊人由持幣人投票得出,投票率按照高到低排序,系統按照高到低選擇指定數量的出塊人,然后將出塊人隨機排序,隨機源可能是時間戳,也可以能出塊人之間隨機的參數。
多方計算
多方計算是由Cardano提出來的,目的是保證選舉算法中的無偏差性,通過計算獲得一個隨機數,作為選舉算法的輸入。隨機源計算出來后,選舉算法仍然使用的是3.4.1followthesatoshi的方法。為了避免重復,我們這里說一下MPC。
在Cardano的文檔中,對多方計算有以下的解釋:
多方計算方法用來實現選舉的隨機性,每個參選人獨立進行一次『投硬幣』的行為,然后與其他參選人分享結果。這個想法就是:結果由每個參選人隨機產生,但最終它們在相同的最終價值上達成一致。
Cadano使用的是類似于扔硬幣的方案來決定區塊人,分為3個階段。提交,開啟和恢復階段。在提交階段,參選人通過私鑰簽名一個提交,并附上周期標號,公鑰等信息,這個提交會被廣播給其他參選人,每個參選人都可以拿到其他參選人的提交。
在開啟階段,參選人提交一個開啟狀態,這個狀態帶著一個值,可以解開第一步提交的數據。同樣,每個人都可以拿到其他人的開啟值。
最后恢復階段,每個參選人相當于都拿到了所有的提交和開啟,如果參選人中存在不誠實的人,那么很有可能有些不提交,或者不提交開啟的情況出現,在這種情況下,誠實的選民可以張貼來重建密鑰,這個想法很簡單:即使某些選民是對手,選舉也能成功結束。每個誠實的參選人解出來的都是同一個密鑰,也就是隨機種子。
這就是Cardano多方計算的出來的結果。
VRF
Verifiablerandomfunction(VRF),同樣是計算隨機元的一個方法,其應用代表是Algorand和Dfinity。VRF的描述其實很簡單:
它是一種偽隨機函數,可以在不提供輸入值的情況下,驗證結果的正確性。給定輸入值x,秘鑰SK的所有者可以計算函數值y=FSK和證明pSK。使用證明和公鑰PK=g^{SK}math>,每個人都可以檢查值y=FSK是否確實正確計算,整個過程并不需要用到所有者的私鑰。
其他
業界還有一些選舉算法,Vitalik曾經寫過一篇文章,專門介紹了選舉算法的不同優缺點。鏈接:https://vitalik.ca/files/randomness.html
其中如NXT的RNG算法,RANDAO算法等等,有興趣的小伙伴可以看一下。
偽隨機數源
隨機數分為真隨機數和偽隨機數,真隨機數是真是發生在現實中的隨機事件產生的結果,比如扔硬幣,扔骰子等等,偽隨機數是用確定性的算法計算出來自均勻分布的隨機數序列,其實偽隨機數并不是真正意義上的隨機數。因為產生偽隨機數是用確定的算法,那么只要是輸入是一樣的,那么輸出肯定是一樣的,也就意味著,輸入源一旦被確定,那么輸出是肯定會被知道的。
PoS出塊人不能被提前被人預測出來,如果順序能被知道,那么出塊人提前勾結形成卡特爾組織,對系統是有一定危害的。所以,PoS中的隨機算法輸入源顯得非常非常重要。
在Tezos中,要求在下一個選舉周期之前,該周期所有出塊人必須披露一個Nonce,所有的Nonce會被收集到一個列表,通過Scrypt密鑰衍生函數得出種子,該種子用于下個選擇周期的隨機種子輸入源。
EOS中,在每個出塊周期開始時,會根據持幣人所投票數選出21個區塊生產者。被選中的區塊生產者的順序會根據15個及以上的區塊生產者的同意,制定出塊順序的安排。
在Cadona中,使用多方計算的方法來獲取隨機種子,簡稱扔硬幣。簡單來說就是這個方法模擬了現實中扔骰子的過程,來最終確定隨機種子的生成,需要每個出塊人都扔一次硬幣得到一個隨機數,然后互相分享扔硬幣的結果,然后對所有結果進行種子生成,如果所有人都生成了一樣的結果,那么說明大家互相使用了一樣的結果。這就確認了種子生成。
Cadano和Tezos的隨機種子生成很相似,只不過實現細節上有不一樣。Cadano用多方計算保證了即使有人沒有分享結果,也能通過部分結果恢復成整體。而Tezos要求每個出塊人都批量Nonce,否則會被扣除抵押金。相當于Cadano用了數學的方法解決了批量的問題,Tezos用了規則來限定,各有千秋了。
打包交易
輪到出塊人出塊的時候,出塊人會從交易池里面挑選交易交易,并驗證交易后,將其打包到區塊中。
驗證的過程就是對交易做一些基本的判斷,比如判斷交易合不合法,簽名是否正確,交易賬戶是否有足夠的余額,交易是否已經被花出,交易數據大小是否已經超出限制等,不同PoS公有鏈對于交易的判斷不同,驗證的條件也不同。
另外,從交易池子里面挑選交易,一般會有一個選擇邏輯。該選擇邏輯會參考兩個因素,一個是交易手續費的大小,一個是發起交易的時間點。一般情況下,出塊人的節點設置會優先選擇手續費大的進行打包,同時系統也會設定一定參數,將交易時間點靠前的交易加入打包。當然,出塊人還可以設置一些參數來調整打包程序,比如選擇交易額大的,占內存空間小的等等,但是,不可以設置一些對地址交易的優先級,如果可以,那么該PoS機制的抗審查能力會被質疑。
廣播交易
出塊人將新區塊生成后,會將區塊數據廣播到網絡當中,為了讓所有節點都把這些交易記錄到自己的網絡當中,這樣全網維護的賬本才能統一。網絡中其他的節點會在不同的時間接收到廣播的數據,新的節點會對打包數據進行進一步確認,并對其簽名做認證,只有通過的驗證數據對其進記錄該節點本地所記錄的賬本當中。如果沒有認證通過,那么節點將拒絕對其簽名,同時,也不會將節點數據繼續廣播到其他節點中去。
廣播通過點對點的網絡進行傳播。在點對點的網絡當中,所有節點都是平等的,并且廣播的傳遞并不會以物理地域為界限選擇節點廣播,而是會和網絡中和自己連接的節點為傳播,1傳多,多傳廣,這樣節點信息傳播會以病擴散般的速度擴散開來。
雖然廣播的傳遞不是以最近原則為基礎,但是廣播傳播的速度會受到地域的影響,廣播到達各個節點的時間并不一致,所以會出現一個數據同步問題。出塊人通過節點A進行了廣播,節點B在100ms后接受到了數據包,節點C則是在1000ms后接收到了數據包,這種延遲的時間間隔,會讓整個網絡有被攻擊的機會出現,比如雙花攻擊、短程攻擊等等,結果會影響交易的最終確定性,通常為了使得整個網絡消滅延遲,通常交易的最終確定需要一定區塊的時間確認。
驗證人確認
PoS當中,礦工除了會出塊外,還有充當驗證人的角色。為了保證足夠快的交易確認,每個區塊的需要一定數量的驗證人來進行簽名確認,來保證其交易的合法性。
當前高度下,當出塊人出塊并廣播后,被驗證人接受到廣播,緊接著對區塊數據進行驗證,在確認后用私鑰簽名,并繼續廣播出去。假設每個塊需要10個簽名,那么只有當網絡中的所有的驗證人都簽名后,這個塊才會被認為是最終的區塊,并且填充到新的高度上來。
所以在出塊人廣播后,每個節點接收到廣播,并維護這區塊的一個中心狀態,比如當系統只有1個簽名的時候,節點并不能承認這個塊是一個最終塊,只有當該節點收到該區塊新的簽名更新,直到數量更新到10的時候,該節點才會把區塊寫到最高的高度上來的。
當然,為了保證簽名的順利性,整個區塊的確認機制需要保證被提前選出來的驗證人不會作惡,不在線或者有時間延遲等問題,可替代的解決方案有驗證人備選,判斷最小時間延遲,Slash作惡等。
所以,其實每個由節點所運行的PoS網絡當中,節點運行的其實都是一個服務程序,這個程序會檢測很多狀態,以此來確認該區塊的最終確定性。比如,檢測是否有簽名權利,檢測是否可以替代簽名,檢測區塊的最終簽名狀態等,不同的檢測結果會觸發接下來的很多操作,其目的都是為了保證整個區塊鏈能順利并且穩定的運行下去,不至于某個驗證人不在線,整個網絡崩潰的問題出現。
至此,PoS共識的7個步驟就說完了,整個過程從運行人的角度來說,從運行節點到區塊驗證確認;從區塊高度角度說,就一個個新塊打包生成的一個過程,每個區塊鏈的共識基本都是這樣,不斷往復循環的一個過程。
尊敬的用戶: 為了提高礦工的收益,火幣礦池將對BTC或BCH挖礦的用戶分配ELA聯合挖礦收益,并將于2019年5月6日開啟收益發放.
1900/1/1 0:00:00文章系金色財經專欄作者供稿,發表言論僅代表其個人觀點,僅供學習交流!金色盤面不會主動提供任何交易指導,亦不會收取任何費用指導交易,請讀者仔細甄別,謹防上當.
1900/1/1 0:00:00美國CFTC前主席:加密貨幣市場需要監管才能成長 ◇金色盤面 據huobiglobal數據顯示,BTC最近成交價38209.58元,24小時變化-0.21%;ETH最近成交價1111.23元.
1900/1/1 0:00:004月26日,紐約總檢察長辦公室的一則指控,將數字貨幣交易所Bitfinex和穩定幣霸主USDT的母公司Tether推向了輿論中心.
1900/1/1 0:00:00BitfinexIEO風險回報半定量分析:LEO值不值得買?AlbertTheKing· 05月05日 熱度:1402 本輪IEO會對市場抽血10億美元,相當于當前btc市值的1%.
1900/1/1 0:00:00一、“黑色星期一來襲” 加密市場迎來5月最黑暗的一天,BTC跌破5800,直逼5600。如果跌破5600,BTC將回到節前.
1900/1/1 0:00:00