《讀懂區塊鏈PoS共識》第三章 PoS執行原理

買賣虛擬貨幣
本章,我嘗試描述PoS共識執行的步驟,來了解其大致的原理。一般情況下,PoS共識的執行有7個基本步驟,執行節點,註冊成驗證人,Stake,選舉驗證人,打包交易,廣播交易,驗證人確認,以下我會對每個步驟進行解釋。因為不同專案有不同的實現方案,當我們在看具體專案時,會發現有的專案會有細節上的不同,或者已有步驟的先後次序不一樣,這些不同都是這些專案的特色,或是增加安全,或是提高效能。我把各個專案中的精華拿出來,我發現大致過程是差不多的,用一句話將PoS共識串起來:持幣人將幣Stake,獲得出塊權利,在指定時間打包交易,並廣播出去,得到驗證後,新區塊生成。執行節點持幣人成為驗證人之前,需要執行節點客戶端,成為一個區塊鏈分散式網路中的接入點,也叫節點。早期的區塊鏈專案,為了方便大家接入網路,都會有命令列,為使用者體驗著想的團隊還會開發一個簡單的視覺化客戶端,即錢包客戶端。這些錢包客戶端以桌面版為主,一般支援Windows,MacOS和Linux3種系統,如Bitcoin Core,Parity等。客戶端裡整合了執行的命令,並且都是視覺化的簡單操作,使用者只需要簡單點幾下,即可以執行起節點。
這個節點就是我們所說的,區塊鏈分散式賬簿中的一個點,這個點(也就是你執行節點的電腦),儲存著區塊鏈所有的交易記錄,並將參與到整個網路的共識當中去。所以,你的電腦即充當了儲存的功能,也充當著計算的功能。

那Nuls專案舉例,首先在官網下載對應的錢包客戶端,以MACOS為例

安裝好錢包後,開啟,進入區塊同步的階段。從途中可以見到主網高度為1987877個塊,本地同步了374個塊,按照網路速度和資料大小,區塊同步可能持續的時間較長。

區塊同步完成之後,你可以選擇建立一個錢包,或者匯入錢包

建立完成後的一個錢包

錢包建立完成,可以參與到PoS共識,即PoS挖礦中去。按照Nuls的共識,你可以將你的挖礦權益委託給礦工。錢包中已經列舉了一些礦工,選擇一個礦工,輸入你要委託的Nuls數量,就可以參與到共識挖礦中來。


除了錢包客戶端之外,專案提供最多的方式就是命令列了,有程式設計基礎的小夥伴,可以按照官方的介紹,執行相關的命令就可以了。命令列我們拿Tezso來舉例一下,以下是用命令列建立Teozs節點的步驟:https://github.com/tezoscommunity/FAQ/blob/master/Compile_Mainnet.md

登入Debian或是Ubuntu系統,並升級基礎包(用你機器的IP將下面命令中的 "192.155.xxx.xxx" 替換掉)

ssh admin@chaindaily
apt-get update
apt-get dist-upgrade -y

建立一個Tezos賬戶,不要以root許可權執行服務。注意make build-deps這個命令需要sudo的許可權

adduser tezos
adduser tezos sudo
reboot
ssh admin@chaindaily

如果你執行的是Ubuntu 16, 執行下面的命令安裝 bubblewrap和最新版本的git

sudo add-apt-repository ppa:ansible/bubblewrap
sudo add-apt-repository ppa:git-core/ppa
sudo apt-get update

建立環境初始化

sudo apt-get install -y patch unzip make gcc m4 git g++ aspcud bubblewrap curl bzip2 rsync libev-dev libgmp-dev pkg-config libhidapi-dev

安裝OPAM

方法一
sh <(curl -sL https://raw.githubusercontent.com/ocaml/opam/master/shell/install.sh)

方法二
wget https://github.com/ocaml/opam/releases/download/2.0.0/opam-2.0.0-x86_64-linux
sudo mv opam-2.0.0-x86_64-linux /usr/local/bin/opam
sudo chmod a+x /usr/local/bin/opam

獲得主網原始碼
git clone -b mainnet https://gitlab.com/tezos/tezos.git
cd tezos

初始化依賴工具
make build-deps

編譯
eval $(opam env)
make

設點節點身份
./tezos-node identity generate 26.

執行節點,等待節點同步成功
nohup ./tezos-node run --rpc-addr 127.0.0.1:8732 &

不過在此要說明的一點就是,自己執行全節點,意味著你需要付出諸如儲存空間,計算力,電力等資源,並且保證你是24小時開機,才能讓一個完整的全節點錢包執行下去,同時可以獲得PoS共識中Stake的收益,所以這看上去不是一個很簡單的差事。

目前為止,全節點執行已經慢慢發展了幾個階段,下面我來說說這幾個階段的演變過程。

一般自己執行執行起來的節點是全節點,全節點就是記錄了主網上線以來的全部資料。初期的PoS專案基本都是類似Nul這樣的全節點錢包客戶端,其模擬的也是比特幣初期可用電腦CPU挖礦的原理,執行節點的門檻也就是需要一臺計算機。但全節點有個不好的地方,隨著區塊資料的增多,會需要更多儲存空間。同時,錢包客戶端不能掉線,也就是不能關機,斷網或者斷電,要不然你無法執行節點來獲得出塊機會,已獲得的出塊機會在此種情況下也無法繼續。

家用電腦不同於專業挖礦,所以隨著個人全節點的缺點暴露的越來越多,開始出現專業執行的礦池,礦池是專業挖礦的機構,可以支援24小時,不斷電,不停網的挖礦方式,普通使用者如果不想自己守著電腦挖礦,可以將幣傳送給礦池,讓礦池來幫助自己出塊獲得獎勵。礦池透過收取一定的手續費來獲得收入。

這也是委託的第一種方式,但是這種委託需要把幣給到礦池手中,使用者往往需要承擔很大的風險,如果礦池失竊,或是捲款潛逃,使用者往往一點辦法都沒有,需要極大的信任,還需要礦池維護人員有良好的職業操守。

專案方在執行一段時間後,也會發現個人Stak的意願並不是很高,而自建礦池或者整合已有礦池到委託驗證人的選擇裡面來,既可以幫助礦池做安全背書,也能大大提高個人Stake的意願,維護網路安全(當然,前提是對驗證人有嚴格的稽覈),所以我們開始看到第二種委託形式——專案方支援委託權益的轉移了。這種形式下,個人只需要將幣轉移到中間賬戶,或者是傳送個合約賬戶,就可以完成獎勵的獲得,承擔的風險大大降低。

但第二種形式的委託也有問題,畢竟使用者無法使用Stake的幣,大量使用者會因為流動性原因不進行Stake。後來有專案方做了進一步的妥協,支援委託只是建立一種關係,而不需轉移代幣,Tezos上的委託就是如此。使用者發起委託,委託期間,但是仍然能支配自己的代幣,極大的降低了非自願執行節點使用者Staking的成本(當然,第三種形式的委託,使用者能自由支配委託代幣是因為有節點幫助使用者交了抵押金)。

但是,代交抵押金來出塊的方式,並不能讓節點獲得足夠大的收益,也不能以此形成更專業化的操作礦池,雖然對去中心化有極大的幫助,但是在一定程度上會降低一些節點驗證人的動力。於是,第四種委託方式出現了,使用者委託仍然是層關係,委託期間,Staking代幣的歸屬權仍然屬於使用者自己,但是要使用,比如傳送,需要解鎖Stak的代幣才可以,為了防範長程攻擊,解鎖的時間一般持續20天~40天左右,以提高攻擊成本。

無論那種形式的委託,只要你想成為驗證人,那麼第一步肯定還是需要自己執行節點的。現在只要是公鏈專案都支援執行節點,大多數都提供了命令列的執行方式,錢包客戶端執行的全節點已經開始慢慢退出舞臺。執行節點變成了一件更加專業的事情,每個PoS共識專案都有自己的命令,按照命令執行即可以執行全節點。

宣告為驗證人

節點執行起來後,需要執行變成驗證人的命令,執行完命令,就可以變成驗證人。一般對驗證人的要求比全節點的要求要多。首先你需要保證的就是驗證人節點的配置符合專案的要求,一般情況下,驗證人的配置要求要比全節點的配置要求要高。其次確認專案對驗證人節點的一些硬性門檻,如持幣量,鎖定時間等。Teozs要求驗證節點的持幣量需要達到10000個XTZ,Cosmos要求驗證節點的Stake量在前100位,Cardano要求節點是礦池,持幣量(包含委託量)達到總體幣量的1%。

除了硬性要求,還有一些軟性實力的要求,比如驗證人需要時團隊,或者公司,要求不能用雲伺服器,要求在社羣有一定的聲譽,要求投票需要達到一定的數量等等,這些門檻都需要在申請驗證人之前瞭解,如果在不瞭解的情況下執行,可能無法宣告成為驗證人。

同樣以Tezos為例,Tezos對機器配置的要求不高,但有持幣10000個XTZ數量的門檻,達到門檻,執行以下命令成為驗證人

啟用成為Baker

./tezos-client add address my_account <public key hash from donation PDF>
./tezos-client activate fundraiser account my_account with <activation key from verification site>

質押Stake

Stake和成為驗證人可以合成一部,由於Stake在PoS共識中的重要性,我把這兩部拆開了。成為驗證人之後,該驗證人賬戶中的幣會被檢測,帶有門檻的PoS共識會在此檢測一些條件,當條件符合時,賬戶被標識為合格,然後放到驗證人列表當中。如果不合格,此驗證人並不會在真正的驗證人列表裡面。

合格的驗證人,其賬戶裡面所有的幣都是質押成為Staking的幣,系統會計算該賬戶的Staking數量在總體Staking量中的佔比,使用演算法來選舉每個區塊的驗證人。

在Tezos上沒有Stake的操作命令,只需要生命成為驗證人的賬號有代幣,成為驗證人之後,該賬戶的幣就相當於預設Stake了。另外,需要注意的是,在Tezos上執行成為驗證人的命令時,系統就會進行驗證人門檻的判斷,比如賬戶中是否有10000個XTZ。只有滿足門檻後,才能成為驗證人,並且進行Stake。

選舉驗證人

系統會從候選的驗證人列表當中選擇出塊人。選擇出塊人的演算法有很多種,每種的優缺點都不一樣,但是它們都有一個共同要保證的任務,那就是保證選舉結果不能被操縱,不能被預測,防止Grind Attack的攻擊發生。只有安全性足夠高的演算法,才能保證整個token的激勵系統不會被單一方所控制。

以下我們來列舉幾種目前比較流行的選舉方式:

Follow-the-Satoshi
Follow-the-Satoshi演算法,最早出現在論文《Proof of Activity: Extending Bitcoin’s Proof of Work via Proof of Stake》中,其作用就是在PoA(Proof of Activity)共識當中選出出塊人。

Satoshi這裡的意思是聰,是比特幣電子貨幣形式裡,最小的計數單位,每個已被鑄造出來的聰都對應一個UTXO(未經花費的輸出--Unspent Transaction Output),而每個UTXO都可以對應到一個私鑰,而每一個私鑰都可以對應到一個持有人。如果用持幣權重(Voting Power)代替算力權重的話,PoS共識中的持幣人其權重,其實就是多個聰的集合,所以選擇出塊人,即從這些聰的集合當中選擇就可以了,哪個持有人中擁有最多被選中的聰,那他就是這個高度的出塊人。這就是Follow-the-Satoshi的原理。

PoS中的持幣人staking後,可以被最小單位s劃分成很多份,Follow-the-Satoshi當中會有一個隨機數輸入源p,充當最開始的隨機起始點,然後隨機選出這個出塊人。每個持幣人都有多份s,那麼單個塊的出塊人就是當前包含最多p的持幣人。

運用Follow-the-Satoshi演算法的PoS專案有Tezos和Cardano。

Tezos對演算法做了改良,因為聰的單位太小,隨著系統鍛造出來的聰越來越多,選擇演算法會變得低效,所以Tezos進行了規整,以10000XTZ為一個卷(Roll),將卷作為隨機數選擇的目標,以此來提高選擇效率,包含選中最多的卷將成為塊的出塊人。同時,為了讓隨機數源變得不可預測,Tezos將4096個塊當成一個選舉週期(Cycle),利用上一個週期出塊人披露的Nonce(在通訊安全中,Nonce是一個在加密通訊只能使用一次的數字)為隨機數輸入源。未披露的驗證人將會被扣除抵押金。

Cardano的做法和Tezos類似,以一定區塊數為選舉週期(Epoch),每個週期有一個創世塊,每個創世塊中包含了每個塊的出塊人和一個隨機種子p。和Tezos不同的是,Cardano每個塊只有一個出塊人,如果這個出塊人掉線,這個塊會被拋棄,直接進入下一個區塊。而Tezos中單個塊會有多個出塊人,這些出塊人會有不同的優先順序,以避免備選出塊人出現的種種情況。

Round Robin

維基百科對Round Robin的解釋是:
術語迴圈/輪轉/輪替(英語:Round-robin)用於多種情況中,通常指將多個某物輪流用於某事,例如“逐戶派對”(round-robin-party)中所有參與者要挨家挨戶地拜訪每位參與者的住處並參加那裡的小型聚會。聯名信(round-robin letter)往往是指一大群下屬為批評其領導而寫的一封信,這種信一般只在簽名人數多到難於逐個報復後才會寄出。

一個簡單的Round Robin演算法的例子如:F(i, b) = 1 if b.height % N == i else 0

RR(Round Robin)常用於聯盟鏈或者私有鏈居多,因為迴圈出塊的可預知性太強,如果在一個可允許被隨意進入(Pemissionless)的區塊鏈網路裡面,被攻擊的概率會比較大,系統抗風險性變差。所以,在聯盟鏈或者私有鏈的網路裡面,各個節點互相知道/稽覈/同意(Pemission),利用RR既是一種簡單可行的方式,又是一種高效的演算法。

但是,後來有專案方改良了RR的演算法,用於到Pemissionless的區塊鏈網路中來確定出塊人。我不確定是否是EXONUM團隊對RR進行了首次改良,但是我在google找到到了他們改良的方案。相對的,在Multichain的白皮書中也有將RR演算法運用到聯盟鏈中的說明。

在EXONUM裡面,RR的執行邏輯是,在一個高度H裡面,所有出塊人排列成一定的順序(優先順序),如果首位出塊人掉線則直接跳過,第二位出塊人代替首位出塊人位置來出塊,如果第二位出塊人掉線,則排在第三位的出塊人頂上,以此類推,由此得出迴圈演算法的說法。在高度H+1裡面,在H高度的出塊人將不在獲得出塊機會,其出塊權利會被鎖定一定的週期F,只有等權利解鎖後才會再次被加入的排序中來。

當然,每個高度H的出塊人排序不能是固定的,那麼會被攻擊者找到攻擊目標。所以每個高度H的順序由演算法得出,T = Hash(H) mod M!。可以確定每輪(Round),驗證人的排序都不一樣,這樣就避免了相同順序下,驗證人合謀的低成本問題。

Cosmos同樣使用了RR演算法來進行驗證人選舉。Cosmos按照出塊人的權重(Voting Power),來確定高度H下的出塊人(Proposer),每個高度的第一個Proposer對出塊進行提議,然後進入該高度H的第一個Round,其他驗證人對該提議進行兩輪投票(Prevote和Precommit),兩輪都超過2/3透過,該區塊被commit,成為高度為H+1的塊。如果中間的任意議論投票中,有一輪的投票並沒有達到2/3的權重(Voting Power),那麼第一個Proposer的提議被否決,這進入第二個Proposer的提議階段,提議重複第一個Proposer提議的流程,以此類推。

在寫此書的時候,Cosmos的測試跑到了Gaia9003,Genki4002,同時還進行著一個主網上線前的測試網網路Game of Stake,對於測試網中的很多功能還在測試,包括驗證人選舉,所以對於RR的演算法並不是最終版本,等到主網上線後,我會再來補充具體的選舉出塊人方式。

DPoS

DPoS是由Daniel Lamier在2013年的位元股(Bitshares)上提出來的,其底層是基於石墨烯平臺來搭建,我在此處說明的是基於石墨烯底層搭建的DPoS系統,其他的委託權益證明共識Delegate-PoS不在此範圍之內。

基於石墨烯的DPoS,其出塊人選舉和RR演算法有點像,更像是簡單版本的RR。在DPoS的系統中,所有出塊人由使用者投票得出,投票最高的幾位出塊人獲得出塊機會。通常,出塊人的數量是固定的,如EOS裡面固定是21位,這21位出塊人被投票出來之後,在一輪(126個塊,每個出塊人6個塊)中,其出塊順序由15個及以上的生產者約定的順序安排。

目前EOS的約定順序是按照字母a-z排列的,比如Asia會比Basic排在前面出塊,而Canada會在Basic後面出塊。目前的這種排序方式,決定了每輪的排序其實有一樣的順序。

所以DPoS裡面一個很基礎的選舉方式就是,系統規定一個固定數量的出塊人,出塊人由持幣人投票得出,投票率按照高到低排序,系統按照高到低選擇指定數量的出塊人,然後將出塊人隨機排序,隨機源可能是時間戳,也可以能出塊人之間隨機的引數。

多方計算(multiparty computation (MPC) )

多方計算是由Cardano提出來的,目的是保證選舉演算法中的無偏差性,透過計算獲得一個隨機數,作為選舉演算法的輸入。隨機源計算出來後,選舉演算法仍然使用的是3.4.1 follow the satoshi的方法。為了避免重複,我們這裡說一下MPC。

在Cardano的文件中,對多方計算有以下的解釋:

多方計算(multiparty computation (MPC) )方法用來實現選舉的隨機性,每個參選人獨立進行一次『投硬幣』的行為,然後與其他參選人分享結果。這個想法就是:結果由每個參選人隨機產生,但最終它們在相同的最終價值上達成一致。

Cadano使用的是類似於扔硬幣的方案來決定區塊人,分為3個階段。提交,開啟和恢復階段。在提交階段,參選人透過私鑰簽名一個提交,並附上週期標號,公鑰等資訊,這個提交會被廣播給其他參選人,每個參選人都可以拿到其他參選人的提交。

在開啟階段,參選人提交一個開啟狀態,這個狀態帶著一個值,可以解開第一步提交的資料。同樣,每個人都可以拿到其他人的開啟值。

最後恢復階段,每個參選人相當於都拿到了所有的提交和開啟,如果參選人中存在不誠實的人,那麼很有可能有些不提交,或者不提交開啟的情況出現,在這種情況下,誠實的選民可以張貼(上面有提到)來重建金鑰,這個想法很簡單:即使某些選民是對手,選舉也能成功結束。每個誠實的參選人解出來的都是同一個金鑰,也就是隨機種子。

這就是Cardano多方計算的出來的結果。

VRF

Verifiable random function (VRF) ,同樣是計算隨機元的一個方法,其應用代表是Algorand和Dfinity 。VRF的描述其實很簡單:

它是一種偽隨機函式,可以在不提供輸入值的情況下,驗證結果的正確性。給定輸入值x,秘鑰SK的所有者可以計算函式值y = FSK(x)和證明pSK(x)。 使用證明和公鑰<math> PK = g ^ {SK} </ math>,每個人都可以檢查值y = FSK(x)是否確實正確計算,整個過程並不需要用到所有者的私鑰。

其他

業界還有一些選舉演算法,Vitalik曾經寫過一篇文章,專門介紹了選舉演算法的不同優缺點。連結:https://vitalik.ca/files/randomness.html

其中如NXT的RNG演算法,RANDAO演算法等等,有興趣的小夥伴可以看一下。

偽隨機數源

隨機數分為真隨機數和偽隨機數,真隨機數是真是發生在現實中的隨機事件產生的結果,比如扔硬幣,扔骰子等等,偽隨機數是用確定性的演算法計算出來自[0,1]均勻分佈的隨機數序列,其實偽隨機數並不是真正意義上的隨機數。因為產生偽隨機數是用確定的演算法,那麼只要是輸入是一樣的,那麼輸出肯定是一樣的,也就意味著,輸入源一旦被確定,那麼輸出是肯定會被知道的。

PoS出塊人不能被提前被人預測出來,如果順序能被知道,那麼出塊人提前勾結形成卡特爾組織,對系統是有一定危害的(在沒有出現抵押金-抵扣的策略之前,這種攻擊代價更小)。所以,PoS中的隨機演算法輸入源顯得非常非常重要。

在Tezos中,要求在下一個選舉週期之前,該週期所有出塊人必須披露一個Nonce,所有的Nonce會被收集到一個列表,透過Scrypt金鑰衍生函式得出種子,該種子用於下個選擇週期的隨機種子輸入源。

EOS中,在每個出塊週期開始時,會根據持幣人所投票數選出21個區塊生產者。被選中的區塊生產者的順序會根據15個及以上的區塊生產者的同意,制定出塊順序的安排。

在Cadona中,使用多方計算(multiparty computation (MPC) )的方法來獲取隨機種子,簡稱扔硬幣(Coin tossing)。簡單來說就是這個方法模擬了現實中扔骰子的過程,來最終確定隨機種子的生成,需要每個出塊人都扔一次硬幣得到一個隨機數,然後互相分享扔硬幣的結果,然後對所有結果進行種子生成,如果所有人都生成了一樣的結果,那麼說明大家互相使用了一樣的結果。這就確認了種子生成。

Cadano和Tezos的隨機種子生成很相似,只不過實現細節上有不一樣。Cadano用多方計算保證了即使有人沒有分享結果,也能透過部分結果恢復成整體。而Tezos要求每個出塊人都批次Nonce,否則會被扣除抵押金(Slash)。相當於Cadano用了數學的方法解決了批次的問題,Tezos用了規則來限定,各有千秋了。

打包交易

輪到出塊人出塊的時候,出塊人會從交易池裡面挑選交易交易,並驗證交易後,將其打包到區塊中。

驗證的過程就是對交易做一些基本的判斷,比如判斷交易合不合法,簽名是否正確,交易賬戶是否有足夠的餘額,交易是否已經被花出,交易資料大小是否已經超出限制等,不同PoS公有鏈對於交易的判斷不同,驗證的條件也不同。

另外,從交易池子裡面挑選交易,一般會有一個選擇邏輯。該選擇邏輯會參考兩個因素,一個是交易手續費的大小,一個是發起交易的時間點。一般情況下,出塊人的節點設定會優先選擇手續費大的進行打包,同時系統也會設定一定引數,將交易時間點靠前的交易加入打包。當然,出塊人還可以設定一些引數來調整打包程式,比如選擇交易額大的,佔記憶體空間小的等等,但是,不可以設定一些對地址交易的優先順序,如果可以,那麼該PoS機制的抗審查能力會被質疑。

廣播交易

出塊人將新區塊生成後,會將區塊資料廣播到網路當中,為了讓所有節點都把這些交易記錄到自己的網路當中,這樣全網維護的賬本才能統一。網路中其他的節點會在不同的時間接收到廣播的資料,新的節點會對打包資料進行進一步確認,並對其簽名做認證,只有透過的驗證資料對其進記錄該節點本地所記錄的賬本當中。如果沒有認證透過,那麼節點將拒絕對其簽名,同時,也不會將節點資料繼續廣播到其他節點中去。

廣播透過點對點(Peer to Peer P2P)的網路進行傳播。在點對點的網路當中,所有節點都是平等的,並且廣播的傳遞並不會以物理地域為界限選擇節點廣播,而是會和網路中和自己連線的節點為傳播,1傳多,多傳廣,這樣節點資訊傳播會以病毒擴散般的速度擴散開來。

雖然廣播的傳遞不是以最近原則為基礎,但是廣播傳播的速度會受到地域的影響,廣播到達各個節點的時間並不一致,所以會出現一個資料同步問題。出塊人透過節點A進行了廣播,節點B在100ms後接受到了資料包,節點C則是在1000ms後接收到了資料包,這種延遲的時間間隔,會讓整個網路有被攻擊的機會出現,比如雙花攻擊、短程攻擊等等,結果會影響交易的最終確定性,通常為了使得整個網路消滅延遲,通常交易的最終確定需要一定區塊的時間確認。

驗證人確認

PoS當中,礦工除了會出塊外,還有充當驗證人的角色。為了保證足夠快的交易確認,每個區塊的需要一定數量的驗證人來進行簽名確認,來保證其交易的合法性。

當前高度下,當出塊人出塊並廣播後,被驗證人接受到廣播,緊接著對區塊資料進行驗證,在確認後用私鑰簽名,並繼續廣播出去。假設每個塊需要10個簽名,那麼只有當網路中的所有的驗證人都簽名後,這個塊才會被認為是最終的區塊,並且填充到新的高度上來。

所以在出塊人廣播後,每個節點接收到廣播,並維護這區塊的一箇中心狀態,比如當系統只有1個簽名的時候,節點並不能承認這個塊是一個最終塊,只有當該節點收到該區塊新的簽名更新,直到數量更新到10的時候,該節點才會把區塊寫到最高的高度上來的。

當然,為了保證簽名的順利性,整個區塊的確認機制需要保證被提前選出來的驗證人不會作惡,不線上或者有時間延遲等問題,可替代的解決方案有驗證人備選,判斷最小時間延遲,Slash作惡等。

所以,其實每個由節點所執行的PoS網路當中,節點執行的其實都是一個服務程式,這個程式會檢測很多狀態,以此來確認該區塊的最終確定性。比如,檢測是否有簽名權利,檢測是否可以替代簽名,檢測區塊的最終簽名狀態等,不同的檢測結果會觸發接下來的很多操作,其目的都是為了保證整個區塊鏈能順利並且穩定的執行下去,不至於某個驗證人不線上,整個網路崩潰的問題出現。

至此,PoS共識的7個步驟就說完了,整個過程從執行人的角度來說,從執行節點到區塊驗證確認;從區塊高度角度說,就一個個新塊打包生成的一個過程,每個區塊鏈的共識基本都是這樣,不斷往復迴圈的一個過程。

免責聲明:

  1. 本文版權歸原作者所有,僅代表作者本人觀點,不代表鏈報觀點或立場。
  2. 如發現文章、圖片等侵權行爲,侵權責任將由作者本人承擔。
  3. 鏈報僅提供相關項目信息,不構成任何投資建議

推荐阅读

;