鏈客,專爲開發者而生,有問必答!node
此文章來自鏈客區塊鏈技術問答社區,未經容許拒絕轉載。算法
咱們爲 V SYSTEMS 區塊鏈平臺設計了了一個注重高擴展性的權益證實(PoS)共識機制,稱爲超級節點權益證實共識(Supernode PoS)。該共識機制的特色包括固定的區塊鑄幣間隔、冷鑄幣、以及權益流動性。安全
本文也闡述了了SPoS 與最初 Peercoin 在 2012 年引入的 PoS 機制之間的沿襲與差別。網絡
早在 2011 年,比特幣網絡經歷了多是它的第一次顯著增加。那時,絕大部分的比特幣使用者及支持者們對於這一去中心化?網絡的能源消耗問題可能並不關心。然而,Peercoin 項目已經提出了問題:能源消耗對達成共識真的必不可少嗎?對於大多數比特幣的鼓吹者而言,這個問題的答案是確定的:比特幣就像是黃金;挖金礦所消耗的能源給黃金賦予了價值,而比特幣挖礦所消耗的能源不只能使網絡達成共識並保共識安全,也是比特幣貨幣價值的支撐。分佈式
但回顧歷史,人們對因而什麼給予了黃金貨幣價值這一問題衆說不一。奧地利學派推斷其必然來自於某種初始的商品價值。有人推測,一旦民族國家有了足夠的能力能夠剝奪黃金的貨幣角色,那麼黃金就應該沒有什麼價值了。只要人們相信比特幣的貨幣效用,就天然會問道:究竟是什麼給予了比特幣價值?性能
Peercoin 在必定意義上是在嘗試解開這個最重要的貨幣奧祕。它成功地將工做量證實或(借用黃金挖礦而來的)挖礦的能源消耗從共識算法中分離了出來,並將能源的做用限制到僅用於數字貨幣的發行。接下來很容易考查能源僅剩的與貨幣發行的關聯,由於人們能夠切換到某種相似股票的發行模型,從而可輕易將能源成分從發行機制中剔除。區塊鏈
於是事實上,權益證實共識技術進一步代表了貨幣價值並不是來源於能源消耗。並且,貨幣價值也不須要內在價值或任何其餘類型的商品價值。僅由貨幣效用就能夠賦予價值。ui
Peercoin 達成共識的方法極具開創性。它徹底拋棄了比特幣的取得驚人成功的工做量量證實共識機制,而去尋求一種徹底不不依賴能源消耗的算法。它對權益證實充滿信心,相信這一律念能夠獨立地造成一個共識算法,而不須要任何工做量量證實成分。加密
有的做者誤解這一點。就共識算法而言, Peercoin 是純權益證實的。工做量量證實僅僅用於數字貨幣的公平分配,並不不參與共識算法。spa
對於一個無能耗的共識系統,咱們稱產生區塊的過程爲鑄幣(minting),以區分於消耗大量量能源的挖礦過程。
Peercoin 的共識算法繼承了了比特幣的一些特徵。例如,它也隨機地產生區塊,僅能夠觀察到平均區塊間隔或目標區塊間隔。與這一過程相關聯的是一個稱做權益證實難度的度量,對應於該度量量有一個?用於鑄幣的由共識協議維護的可調節閥值。
引入權益證實共識機制是區塊鏈技術發展中的一個巨大里程。它不只消除了爲達到分佈式共識?而進行挖礦的能源消耗,也極大加強了區塊鏈的擴展能力,爲區塊鏈技術的各類應用鋪平了道路。
自從 Peercoin 開創性的面世後,常有人針對該系統某些方面提出批評。一個常常能聽到的批評是「權益欺壓(stake grinding)」。這種攻擊在 2012 年Peercoin 最第一版本發佈後不久即被發現。Peercoin 於 2013 年2 月發佈的 0.3 版本中實現了一個重要的新算法,以抵抗這種類型的攻擊。
這個新算法引入了一個稱爲「核(kernel)」的共識字段。它是一個會隨區塊鏈逐漸變化共識數字:在給定的時間隔內協議會選中一個區塊,被選中的區塊能夠改變核的一個比特位。核能夠當作是區塊鏈上的一個緩慢改變的隨機源(entropy source),區塊鏈的一個短分叉給它帶來的影響將十分有限。有了核的保護,權益欺壓的威脅就基本上被消除了。
另外一個針對權益證實共識常見的批評爲「無風險分叉(nothing-at-stake)」問題。該問題可表述爲,因爲鑄幣不涉及工做量或能源消耗,鑄幣者可嘗試在區塊樹的全部分支上進行鑄幣而不會有任何損失。於是在利益的驅使下,鑄幣者將會在全部分支上進行鑄幣,以免某一給定分叉輸掉競爭而致使的損失。這種論證的問題在於它忽略了權益證實的核心原則。權益證實的思想是,當某人在貨幣供應中擁有了的必定比例的權益後,他應當已有激勵去作對整個系統有益的事情,而不會對系統進行攻擊。因爲在全部分支上進行鑄幣可認爲是對協議的一種攻擊,它已是權益證實所不容許的了。按這樣的觀點,即使是所謂的理性鑄幣者也不該當之內部貨幣單位來估量價值,而應當之外部穩訂貨幣來衡量其權益的總價值。
考慮到對權益價值可能的負面影響,這或許與公地的悲劇有必定關聯。然而,即使按公地悲劇最初的解釋,可能避免的少許鑄幣損失也比不上權益價值潛在損失的量級。事實上,沒有證據代表「無風險分叉」致使了任何爲進一步制止該攻擊而做出的協議調整。
在權益證實共識面世後不久,Peercoin 社區就掀起了了關於冷鑄幣(cold minting)特徵的討論。它與比特幣稱爲冷存儲的特徵有關,即私鑰由離線錢包進行管理理。因爲權益證實共識要求鑄幣者對區塊進行簽名,爲此其私鑰必須保持在線。這與冷存儲可得到的高安全性是矛盾的。
解決的辦法是將鑄幣與消費的角色相分離。也就是說,權益全部權的密鑰與鑄幣所需的密鑰能夠是不一樣的。那麼,鑄幣密鑰保持在線的同時,全部權密鑰能夠放置在離線存儲中。這天然就會容許出現鑄幣池(minting pool),相似於比特幣的礦池。鑑於比特幣礦池的中心化傾向,鑄幣池也是不被同意。
考慮到衆多因素,冷鑄幣特徵並未在 Peercoin 中實現。而在其餘一些權益證實系統中確已經實現了鑄幣密鑰與全部權密鑰的分離。這種分離如今一般被稱爲權益代理或出租。
區塊鏈行業在最近幾年年中見證了去中心化應用的巨幅增加。比特幣與以太坊都出現過週期性交易擁堵。愈來愈多的關注點投向了單一區塊鏈的表現上。
這就已經爲共識算法的設計帶來了幾個問題。首先,挖礦或鑄幣節點可能沒有足夠的激勵升級節點硬件。且這種節點也可能大量存在。因爲整個網絡的維護成本很是之大,有的節點在硬件升級上註定會被甩在後面。
另外一個問題與比特幣產生區塊的隨機過程有關。儘管平均區塊間隔是 10 分鐘,但有時候下一個區塊的產生須要等待比這長得多的時間。對於面向性能的系統而言,這就成了一個問題。這類系統更傾向於固定的而非隨機分佈的響應時間。
如上的考慮,鑄幣協議應當設計成有固定的區塊間隔,且要將鑄幣節點提高到比網絡中其餘節點更重要的位置。
爲實現鑄幣的固定區塊間隔,咱們定義一個稱爲鑄幣時段(minting slot)的實體。每一個時段對應於鑄幣權的一次平均分配。所以,爲得到某個時段的鑄幣權,一個潛在的鑄幣參與者必須取得該時段的全部權。
在每分鐘內定義了60 個鑄幣時段,每一個時段對應於其中特定的一秒鐘。要在給定的一秒鐘內取得鑄幣權,必須取得該秒對應鑄幣時段的全部權。
基本上系統中的鑄幣者將會輪流着進行鑄幣。這樣作的好處是,若是有某些超級節點停?止了鑄幣,無論出於什麼緣由,他們對系統響應及吞吐量的影響都會被最小化。
每一個超級節點的本地時鐘都經過網絡時間協議進行同步,以保證鑄幣活動的正常順序。回到 2009 年年,比特幣選擇不依賴於網絡時間協議進行時鐘同步,因此比特幣協議容許礦工們時鐘偏移多達 2 個小時。一般而言,現今的網絡時間協議能夠做爲一項基本的互聯網服務,與域名服務相似,於是能夠合理地假設其有很高的安全性。
鑄幣時段的競爭能夠容許在任意時間自由進行。挑戰者能夠選擇一個時段向當前的鑄幣者發起挑戰。爲防止濫用挑戰,挑戰者須要支付一筆較高的挑戰費。當挑戰者發佈一個競爭交易後,協議將檢查競爭者與當前鑄幣者的質押權益以決定誰是競爭的勝出者。
鑄幣者參與鑄幣的質押權益包括其擁有的且未租借給別人的數字貨幣,以及其餘用戶租借給該鑄幣者的數字貨幣。術語「租借(lease)」指明的關係爲鑄幣者一般以鑄幣池形式運行,並須要給數字貨幣的擁有者支付必定利利息。在租借期間,貨幣的全部權並未轉讓,所以鑄幣者不能花費或轉讓租借來的貨幣。
鑄幣時段的平等鑄幣權使得網絡中超級節點擁有平等的地位及相同的鑄幣輸出。這與比特幣挖礦設計造成鮮明對比。在比特幣挖礦中,沒有內在機制防止礦池市場造成壟斷,其已成爲了系統去中心化目標的一個現實威脅。
鑄幣時段的平等鑄幣權在鑄幣經濟中扮演了了一個不可或缺的角色。超級節點造成了一個由鑄幣池組成的市場。鑄幣池市場決定租借的利率。因爲權益全部者有將權益租借給支付更高利率的超級節點的理性偏好,而對於支付高利率的超級節點來講,鑄幣輸出(即收入)是固定的,租借來更多的權益將會迫使它下降租借利率,因此存在一個平衡點,其做爲一種內在的力量迫使超級節點的租借利率趨於相等。
V SYSTEMS 平臺也採用了Peercoin 的手續費銷燬模型以下降通脹率,同時消除鑄幣者之間的利益摩擦。
對超級節點硬件資源的要求將經過共識協議範疇以外的社區力量進行標準化與提高。
以往的權益證實共識系統對於權益在參與鑄幣後的移動行爲進行了諸多限制。儘管在技術層面這可能有其合理考慮,但在經濟層面,它倒是用戶參與鑄幣的一個進入門檻。
然而,在權益證實共識中,參與鑄幣的權益數量直接關係到共識的安全等級。從這個意義上講,對權益的移動不加任何限制是對網絡安全有益的。稱不限制權益移動的這種性質爲權益流動性(stake liquidity)。有了權益流動性,鑄幣者能夠隨時花費或轉讓其擁有的權益。而租借權益的人也能夠隨時解除租借關係,並花費或轉讓其權益。
權益流動性也引入了某些攻擊的可能性。從權益證實的角度來看,不該當容許使用同一權益在多個鑄幣時段索取鑄幣權。然而因爲權益具備流動性,或許能夠利用這種流動性嘗試快速移動權益, 爲權益獲取比其應得的更多的鑄幣時段。稱這種類型的攻擊爲頻繁競爭攻擊(busy contention attack)。
抵抗這類攻擊的辦法是爲帳戶餘額引入某種度量,其相似於鑄幣時段競爭的累加平均。思路是,權益必須留存在帳戶中一段時間,以等待帳戶度量恢復到滿額,這樣便可阻止頻繁競爭攻擊。
傳統的記帳系統使用帳戶模型,它密切監測一個稱爲餘額的可變狀態以及相應交易歷史。比特幣內部使用了一種不一樣的形式,咱們稱之爲幣袋(coinbag)模型。想要得到帳戶餘額,則須要收集與帳戶或地址相關聯的幣袋信息,並將各個幣袋的貨幣數目相加獲得餘額。過去幾年,許多加密貨幣系統都用回了更傳統的帳戶模型。V SYSTEMS 也採用了帳戶模型,使得能更有效監測餘額。
定義了租借關係以後,每一個帳戶的基本餘額能夠描述爲兩個不一樣的部分:一是標準餘額(regular balance),即用戶擁有的餘額;另外一個是鑄幣餘額(minting balance),它是標準餘額加上租借來的餘額並減去租借出去的部分。這兩種不一樣的餘額會隨着相關交易易的確認而即時變更。
10.1 幣齡
幣齡(coin age)被定義貨幣數量與持幣週期之積。例如,以幣天(coin-day)爲單位的幣齡就是貨幣數量與持有這些貨幣的天數的乘積。
仍使用 Peercoin 白皮書中的例子,若是 Bob 從 Alice 那裏收到 10 個幣並持有這些幣 90天,那麼咱們就稱 Bob 累積的幣齡爲 900 幣天。另外,當 Bob 花掉了從 Alice 那裏接收到的 10 個幣時,就稱 Bob 用這 10 個幣累積的幣齡已經被消費(或銷燬)了。
做爲控制鑄幣機率的價值證實,幣齡顯示出了它的優勢與穩定性。然而,因爲它是一個基於交易的量,計算複雜度與給定時間內所執行的交易數量有關。並且,幣齡也並非一個能體現出鑄幣者對社區貢獻量大小的準確值。
10.2 已確認餘額
已確認餘額(confirmed balance)指的是經 N 個區塊確認以後的鑄幣餘額(總的標準餘額 + 租入 -租出)。
其中,Bi 是在?高度爲 i 的區塊中的鑄幣餘額。N 是一個用來估計做?用區間的常數。已確認餘額的優勢包括:
· 餘額不不會因某些大額輸入而當即增長,但會因大額轉出而當即減小;
· 爲了獲得一個很?高的已確認餘額,礦工/鑄幣者須要收集並長時間持有貨幣。
然而,已確認餘額自己也有缺點:
· 在一段時間內連續或累積的輸入不不影響這段時間內的餘額計算;
· 計算複雜度爲 O(N )。對於高速鑄幣情形,爲了了達到較好的性能與較高的穩定性,須要選取一個較大的 N。此時,O(N ) 算法將會是對系統性能形成影響的一個因素。
10.3 關於餘額計算方式的提議
10.3.1 加權平均餘額
爲克服已確認餘額的缺點,並下降計算複雜度,咱們須要爲高速挖礦/鑄幣的區塊鏈系統設計一個新的、有更多性質且更容易計算的餘額模式。
借鑑操做系統平均負載以及隨機過程公式的思想,咱們設計了以下加權平均餘額:
這一新餘額模式的計算複雜度降到了O(1) ,只需在每次鑄幣餘額發生變更時記錄一下加權平均餘額。並且該模式下餘額的最快增加速度是線性的(參看例11.1)。可是,從例11.1.1 及例 11.1.2 能夠看出,若是餘額頻繁變更,則加權平均餘額的降低速度會變慢。此外,這也是一個好的性質,只要總的加權平均餘額受控的話。受控意味着餘額不會莫名其妙地被創造出來(相似於物理學中的能量守恆律)。從例11.2.1 及例11.2.2 能夠得出加權平均餘額公式並不知足守恆律。
10.3.2 鑄幣平均餘額
爲使加權平均餘額擁有好的性質,並克服其缺點,咱們提出一個新的餘額模式,稱爲鑄幣平均餘額(MAB),其定義以下:
其中,Bhn 表示高度在 hn 時的當前餘額。
鑄幣平均餘額是取當前餘額與加權平均餘額的較小者。計算複雜度仍爲 O(1) 。並且,在這個公式中,若是用戶將其全部餘額轉出,則 MAB 會直接減爲 0。有了了這個性質,總的鑄幣平均餘額將會是守恆的,且被總餘額所控制。
本章中,咱們將設計許多數值實例例以展現鑄幣平均餘額的性質。假設鑄幣的速度爲每秒一個區塊,則一天中能夠獲得 24 ×60 ×60 = 86400 個區塊。本章中,咱們對全部例子都取 N = 86400。並且做爲理想情形,咱們也令全部交易手續費爲 0。
11.1 增加與降低速率
本章的第一個例例子是關於餘額增加與降低速率的。
11.1.1 簡化的增加與降低速率
設 Alice 與 Bob 的初始餘額都爲 0。Alice 在每一個區塊產生時都能獲得 1 個幣,而 Bob 在高度爲 43200 的區塊上可一次性得到 86400 個幣。Alice 的增加表現可用幾何級數公式計算。圖 1a 展現了一天內 Alice 與 Bob 的加權平均餘額以及鑄幣平均餘額的表現。
相似地,設 Charlie 與 Dave 的初始餘額/WAB/MAB 都爲 86400。Charlie 每一個區塊都減小 1 個幣,而 Dave 在高度爲 43200 的區塊中失去 86400 個幣。圖 1b 展現了了一天內Charlie 與 Dave 的加權平均餘額以及鑄幣平均餘額的表現。
11.1.2 緩慢降低速率
設 Alice 和 Bob 分別有初始加權平均餘額 12000 和 2000。設初始區塊高度爲奇數,僅Bob 有餘額 1,且 Bob 在區塊高度爲奇數裏將他全部餘額轉給 Alice。相似地,在區塊高度爲偶數時, Alice 將其全部餘額轉給 Bob。圖 2 展現了400000 個區塊內 Alice 與 Bob的加權平均餘額狀況。能夠看到二者 WAB 之和在緩慢降低。而若是 Alice 與 Bob 在這段時間內沒作任何動做,那麼他們 WAB 之和應當在高度爲 86400 時等於 1。
11.2 餘額守恆律律
咱們將給出幾個例子來講明鑄幣平均餘額(MAB)的良好性質。
11.2.1 守恆律律
在這個例子中,Alice 與 Charlie 的初始 WAB 以及餘額均爲 100,而 Bob 與 Dave 的初始WAB 與餘額均爲 0。在高度 h =0 時,Charlie 向 Dave 轉了100 個幣。在另外一個組中,Alice 與 Bob 將每隔 10800 個區塊交換一下他們的餘額。圖 3 代表每一個組中的總餘額是守恆的。
11.2.2 非守恆情形
在這個例子中,Alice 的初始 WAB/MAB 以及餘額均爲 100,而 Bob 與 Charlie 的初始 WAB/ MAB 以及餘額均爲 0。在高度 h =0 時,Alice 向 Charlie 轉出 80 個幣。然後,Alice 與 Bob 每隔 10800 個區塊交換一下餘額。圖 4a 與 4b 顯示了了兩個餘額計算公式之間的差別。
從圖 4a 能夠看出總的 WAB 在某些區間內會超過 100,即意味着利用某些「好」的策略略能夠創造更多的 WAB。然而,圖 4b 代表總的 MAB 老是小於 100,而這在實際應用中是一個好的性質。
11.3 鑄幣者的鑄幣平均餘額
在本例例中,咱們將展現一些關於鑄幣者的狀況。第一個鑄幣者的初始餘額 100,而初始WAB/ MAB 均爲 0。鑄幣獎勵爲每分鐘 1 個幣。
圖 5 展現了了一天內 WAB、MAB 以及餘額的變化狀況。
第二個鑄幣者的初始餘額爲 10000,初始 WAB/MAB 爲 0。鑄幣獎勵仍爲每分鐘 1 個幣。在高度爲 500 時,鑄幣者將其他額內的 99000 個幣轉出。
圖 6a 及 6b 展現了了在五天內 WAB、MAB 以及餘額的變化狀況。
超級節點權益證實共識(SPoS)是朝着高性能區塊鏈系統的一個演化過程。生態資源能夠更更有效地向超級節點的硬件升級傾斜,系統響應不不只更更快?並且更更加可預測、更更加穩定。咱們也設計了了鑄幣平均餘額以?支持權益流動性。