POC共識機制詳解

2021-09-24 04:43:24 字數 3551 閱讀 8148

首先什麼是區塊鏈中的共識機制?能夠確保分布式節點維護資料一致性的機制就是共識機制。比較成熟的共識機制有pow、pos、dpos、pbft等等。

poc是nuls獨創的一種整合了dpos和pos優點並加入了信用機制的一種新的共識機制,他的全稱是proof of credit,信用共識機制。和dpos相比,poc的節點擊舉機制更靈活,去中心化成度更高,和pos相比效率更高,演算法更簡單清晰。

nuls希望創造一種高效的、去中心化的、全民參與的、公平的、全民收益的共識機制,poc就是這樣誕生的。下面就從兩個方面詳細介紹一下poc的執行方式。

poc中參與區塊打包和驗證的節點,叫做共識節點。為了避免共識節點被大戶完全控制,poc設計了乙個更開放的節點擊舉方式。

首先,任何人都可以建立節點,因為poc節點的門檻足夠低,只要鎖定20000nuls以上的保證金,就可以建立乙個節點,為了避免節點數量太少,poc限制了節點保證金的區間,只接受2w-20w的保證金,超出或者小於這個區間的保證金不能建立節點,交易一旦確認保證金將被鎖死,不能再參與交易,直至停止節點後解鎖。

每個節點都不需要堆外暴露自己的伺服器位置,網路中人知道有這樣乙個節點,但並不能把節點和ip位址關聯起來,這極大的降低了節點被針對性攻擊的可能性,保證了節點的安全。

建立節點需要設定幾個引數,如下:

保證金金額:需要建立節點中存在足夠的nuls來做保證金,最少2w最多20w個nuls。保證金和委託金額一樣有共識收益。

佣金比例:節點可以接受任何賬戶的委託,節點會從委託人收益中抽取一部分佣金,比如佣金比例設定為10%,則會從委託人收益中收取10%作為節點的獎勵

建立好的節點的狀態是「待共識」,就是字面等待的意思。如果2w保證金建立的節點就可以參與共識,那麼這個網路最多可以達到5000個節點,這是乙個非常龐大的數字,如此多的分布式節點來維護網路,效率會非常低下,而且2w的門檻很難叫做全面參與的共識。

poc的設計中,建立節點的門檻很低,但是參與共識的門檻在某些程度上很高,就是節點建立後需要得到至少20wnuls的委託才可以參與共識會議,同時每個節點接受委託設定了上限,目前是50wnuls,這是為了一定程度上減少節點數量,又保證一定的去中心化特性,同時也能提高網路效能。

任何人都可以去參與委託,poc目前設定的門檻是2000個nuls起步,這是乙個基本執行引數,可以通過社群治理方式進行修改,委託之後委託人就可以參與共識獎勵的分配,獲得相應的收益。委託的金額在交易生效一刻鎖死,不能進行任何交易,直至節點停止解鎖或者主動撤銷委託退出共識,撤銷後將停止收益的分配(有輪次延遲)。委託者隨時可以通過退出共識操作,撤回自己委託的nuls。

節點的建立賬戶有權利隨時終止節點的執行,當節點停止時,所有委託在該節點上的金額都會解鎖到委託人的賬戶中,節點的保證金

##節點執行

這裡引入乙個「輪次」的概念,poc的區塊提交方式是以輪次的方式進行的,從創世塊開始,按照共識節點格式來計算輪次,比如節點又a,b,c三個,出塊間隔是10s,創世塊時間是1970-00-00 00:00:00,則第一輪的時間就是1970-00-00 00:00:10至1970-00-00 00:00:40,依次類推。

每一輪的出塊順序使用偽隨機的方式動態計算的,具體演算法是把所有的節點的打包位址,解析為位元組碼,在位元組碼之前拼接本輪次的開始時間的時間戳,然後對拼接後的結果進行hash256的摘要計算,最後對摘要進行排序,得到本輪所有節點的出塊順序。之後按照計算的結果每隔10s輪流出塊。

區塊鏈的共識機制必須考慮惡意節點存在的情況,在poc的設計中,理論上,只要惡意節點少於50%,就不能影響網路的安全性,在這個基礎上,poc總結了一些對非正常行為的懲罰措施,以懲戒惡意或者低能的節點,就是紅黃牌機制。

當乙個節點應該出塊,卻最終沒能成功在區塊鏈上新增乙個區塊時,發放一張黃牌,用以警告。這種情況的可能性是節點宕機、高度未同步、硬體不穩定、節點本地分叉等等原因,這是節點維護者必須盡可能避免的情況。

如何讓節點不得黃牌?提高伺服器效能和網路效能,開放網路連線埠,讓更多的節點可以連線到,及時更新錢包版本,使用工具監視伺服器執行狀態等等。

紅牌是懲罰作惡節點的終極方式,節點收到紅牌後,將退出共識會議(有輪次延遲),不再獲取共識獎勵,不再參與區塊打包。節點的保證金將鎖定60天,在這60天中保證金不能參與任何交易。節點的建立位址從收到紅牌懲罰起,就被剝奪了建立節點的權利,永遠不能作為建立位址來建立節點了。目前紅牌懲罰主要懲罰兩個惡意行為:

節點離線,當節點信用值降至-1時,節點將收到紅牌懲罰,

嘗試分叉,當乙個節點在乙個高度打包出兩個不同的區塊時,認為節點在嘗試分叉,如果100輪內存在3次嘗試分叉行為,節點將收到紅牌懲罰。

注:嘗試分叉很多時候是因為節點維護人員將打包位址匯入了兩個不同的錢包中,兩個錢包都認為自己是節點,進行出塊導致的。

nuls團隊最初為poc共識設計了非常複雜的信用值計算方式,但在最終上線時,簡化了信用值計算的邏輯,並表示當前的信用值計算並不是完美的,不能百分百的代表節點的能力,後續會繼續深入研究優化。

當前的信用值計算方式:createval = (100輪內正確出塊數量-100輪內黃牌懲罰次數)/100。目前的取值範圍是1~-1之間。

poc的共識收益分為兩個部分,交易手續費和網路維護的通脹獎勵,交易手續費的計算是根據交易大小進行計算,最小的單價是0.001nuls/kb,網路維護的通脹獎勵是500w/年,約合每個區塊158548960na(1.58548960nuls)。

那麼是不是乙個節點打包成功乙個區塊就有1.58548960nuls獎勵了呢?並不是的。poc追求公平性,每個節點的保證金和委託金額都可能不一樣,所以實際的計算中,獎勵是以輪次為計算單元的。具體演算法如下:

sum(reward) = 158548960na * 本輪節點數量
每個節點根據節點權重來劃分各自應得的比例,用節點自己的權重除以所有節點的權重之和,就是自己節點本輪所佔節點的比例,計算方式如下:

weight(node) = (保證金+接受的委託總額)* createval

reward(node) = sum(reward) * weight(node)/(weight(0)+…+weight(n))

因為poc和通脹是息息相關的,所以這裡簡單介紹一下nuls的通脹機制(最近社群中在討論減少通脹的提案,這裡只談之前的通脹方案)。

nuls每年最大通脹金額為定額的500wnuls,第一年不超過總量的5%,第二年不超過總量的4.761%,比例逐年遞減。

上面有兩個詞「最大」和「不超過」,為什麼不確定的說乙個數字?因為當乙個節點應該出塊,卻沒有出塊時,在計算收益時,其他節點會計算該節點的權重,並未該節點預留了份額,但因為節點沒有出塊,會導致這份通脹沒有人領取,就是取消了,所以500w只是理論值,實際的通脹要更少。

首先完美的狀態是每個節點的信用值為1,此時各個節點按照保證金和委託金額來分配本輪的共識獎勵,一分付出一分回報,很公平。當有乙個節點信用值低於1的時候,此節點的權重下降,但其他節點權重不變,導致此節點佔比下降,所以收益下降。此時因為此節點的權重下降,其他節點的權重不變,所以佔比上公升,收益也會上公升。所以節點的信用值,直接影響收益,需要謹慎對待。

選擇共識中的信用值高的節點可以最快獲得收益,如果知道哪些節點比較穩定也可以優先考慮。

錢包中節點列表的排序規則如下

共識中排在前面

信用高排在前面

可以委託金額高的排在前面

4.已經不可再委託的排在最後

參考:操作指南

POW共識機制

因為記賬有一定的獎勵和手續費,所以自然會有競爭,pow proof of work 工作量證明共識機制就是用來在 誰有權記賬 這一問題上達成共識。簡單來說,就是爭奪記賬權的多方通過付出計算資源解決乙個數學難題,誰先解決誰就獲得記賬權,這個爭奪的過程就是 挖礦 也是位元幣發行的過程。具體的計算問題是,...

DPOS共識機制

鏈客,有問必答!eos在第一版 中使用的dpos共識機制,而在新一版的白書中,對共識機制進行了改進,使用bft dpos混合共識機制。使出塊速度從原來的3秒變為0.5秒,tps顯著提高,達到測試3590次 秒。eos第一版共識機制dpos eos現在系統執行的鏈用的共識機制是第一版 的,也就是純dp...

DPOS共識機制

鏈客,有問必答!eos在第一版 中使用的dpos共識機制,而在新一版的白書中,對共識機制進行了改進,使用bft dpos混合共識機制。使出塊速度從原來的3秒變為0.5秒,tps顯著提高,達到測試3590次 秒。eos第一版共識機制dpos eos現在系統執行的鏈用的共識機制是第一版 的,也就是純dp...