基於交易的權益證明機制

基於交易的權益證明機制

2012年,化名Sunny King的網友推出了Peercoin,該加密電子貨幣採用工作量證明機制發行新幣,採用權益證明機制維護網路安全,這是權益證明機制在加密電子貨幣中的首次套用。

基本介紹

  • 中文名:基於交易的權益證明機制
  • 外文名:Based on the trading mechanism of interest
  • 時間:2012年
  • 人物:Sunny King
  • 套用:加密電子貨幣
  • 學科:計算機
概念,實現思路,Coinstake,Kernel,Coinage,StakeReward,基於權益證明的交易,

概念

2012年,化名Sunny King的網友推出了Peercoin,該加密電子貨幣採用工作量證明機制發行新幣,採用權益證明機制維護網路安全,這是權益證明機制在加密電子貨幣中的首次套用。
與要求證明人執行一定量的計算工作不同,權益證明要求證明人提供一定數量加密貨幣的所有權即可。權益證明機制的運作方式是,當創造一個新區塊時,礦工需要創建一個“幣權”交易,交易會按照預先設定的比例把一些幣傳送給礦工本身。權益證明機制根據每個節點擁有代幣的比例和時間,依據算法等比例地降低節點的挖礦難度,從而加快了尋找隨機數的速度。這種共識機制可以縮短達成共識所需的時間,但本質上仍然需要網路中的節點進行挖礦運算。因此,PoS機制並沒有從根本上解決PoW機制難以套用於商業領域的問題。

實現思路

Peercoin(點點幣,PPC)於2012年8月發布,最大創新是其採礦方式混合了POW及POS兩種方式,其中POW主要用於發行代幣,未來預計隨著挖礦難度上升,產量降低,系統安全主要由POS維護。目前區塊鏈中存在兩種類型的區塊,POW區塊和POS區塊。PPC的作者為同樣不願意公開身份的密碼貨幣極客Sunny King,同時也是Primecoin的研發者。
要掌握Peercoin的POS機制,需要重點理解Sunny King專門為PPC設計的幾個核心概念:Coinstake,Kernel,Stake Modifier,ModifierInterval,StakeReward,Coinage等。

Coinstake

為了實現POS,Sunny King專門設計了一種特殊類型交易,叫Coinstake,Coinstake的設計借鑑於中本聰的Coinbase設計。本質上Coinbase和Coinsake都是一筆交易,只是對他們的輸入、輸出做了一些硬性限制,這樣才不會擾亂系統原有的POW機制。
1) Coinbase結構要求:
(1)輸入數量必須等於1,且輸入的Prevout欄位(指定前一筆交易的輸出)必須置空值。
(2)輸出數量必須大於等於1。
2 ) Coinstake結構要求。
(1)輸入數量大於等於1,且第一個輸入的Prevout欄位不能為空,即要求Kernel必須存在。
(2)輸出數量大於等於2,且第一個輸出必須置空值。
這兩種特殊交易在區塊鏈中存放的位置也有特殊要求,中本聰規定每個區塊的第一筆交易必須放置Coinbase,反之,Coinbase不能出現在區塊的其他位置。Sunny King顯然不想破壞這個規則,他增加了一條規則,對於POS區塊,第二筆交易必須放置Coinstake,反之,Coinstake不能出現在其他地方。換言之,只要第二筆交易是Coinstake,那么這個區塊就當POS區塊來處理。
Coinbase和Coinstake都不應該被單獨廣播,而只存在於區塊中,因此客戶端節點一般都不允許進入記憶體池,當花費這兩種交易時,都需要檢測是否已經成熟。

Kernel

Coinstake的第一個輸入(Input 0)叫KernelKernel在POS機制里確實起到核心作用,合格區塊的判定與之息息相關。合格區塊表述為:
SHA256D(nStakeModifier+txPrev.block.nTime+txPrev.offset+txPrev.nTime+txPrev.vout.n+nTime)< bnTarget X nCoinDayWeight
公式中的每一個參數都有明確的設計目的。
nS takeModifier:專門為POS設計的調節器,按照以上公式,如果沒有參數nStakeModifier當一個人收到一筆幣之後,他立即就能提前計算得知自己在未來何時可以鍛造區塊,這顯然不符合設計目標,Sunny King希望POS礦工和POW礦工一樣做盲目探索,以實時線上維護區塊鏈,nStakeModifier的設計就是為了防止POS礦工提前計算。nStakeModifier可以理解為POS區塊的一個屬性,每一個區塊對應一個nS takeModifier值,但nStakeModifier並不是每個區塊都變動,不過協定規定每隔一定時間Cmodifier interval)必須重新計算一次,取值與前一個nS takeModifier以及最新區塊哈希值有關,因此POS礦工無法提前計算,因為他不知道未來的區塊哈希值。
也就是說,在PPC系統中,除了存在區塊鏈、幣鏈(幣的交易簽名歷史),還隱藏著一個很少被提及的鏈條一一權益調節器鏈條。
值得一提的是,Sunny King是在PPC後來的版本才加入這個調節器的,一開始他使用nBits。
txPrev: Kernel對應的前一筆交易。
txPrev.block.nTime: txPrev所在區塊的時間戳,一筆交易被納入區塊的時間是交易發起者不能確定的,節點有可能通過提前計算預估到未來對自己有利的時間戳,這個參數就是為了防止節點利用這種預估優勢提前生成大批交易。
txPrev.offset: txPrev在區塊中的偏移量,用以降低網路節點同時生成Coinstake的機率。
txPrev.nTime: txPrev構造時間,設計目標如txPrev.offset。
txPrev.vout.n: Kernel在txPrev中的輸出下標,設計目標如txPrev.offset。
bnTarget:全網當前目標難度基準值,類似POW中的當前難度值,由nbits記錄。
nCoinDayWeight: Kernel消耗的幣齡,加入了一個時間權重。

Coinage

幣齡,也叫幣天,假如1.5個幣存在於區塊鏈中10天,幣齡數值為
Coinage=1.5×10=15
PPC採用幣齡,而不是直接採用餘額(Balance)來計算。

StakeReward

權益激勵,俗稱獲得利息,計算公式為:
stakeReward=Coinage×33/(365×33+8)×0.01×COIN
公式可簡化為
stakeReward=(0.01×Coinage/365)×COIN
其中,Coinage即上文說的幣齡,COIN可理解為“幣”,1 COIN即通常所說的1個幣,本質是一個常量,中本聰在比特幣系統里定義為100 000 000,如此設計主要是為了避免浮點數運算,比特幣支持8位小數源於此。

基於權益證明的交易

網路上的每一筆交易在網路中都有內含的權益證明。交易的發起者希望網路接受這筆交易,交易的接受方則會根據網路是否已經接受了該交易來決定是否發貨。很顯然,買方賣方的利益都與網路的健康安全息息相關。畢竟,如果交易無法按預期執行,這個網路就是無價值的。一個運作良好的網路在每個區塊都有幾千筆的交易。這說明有幾千個利益相關者都可以為網路的安全做出貢獻。
幣天數代表一個特定的幣距最後一次在網路上交易的時間。在給定的時間點,只存在有限的幣天數,它們在那些長期持有大量貨幣結餘的人手中持續增加。所以幣天數可被視為在網路中權益的代表(proxy)。每當這些幣有交易時,幣天數即被銷毀,因此不能被重複使用。
為了在工作量驗證系統中成功實施51%攻擊,攻擊者必須隱藏自己的替代鏈。一旦他們從第一次支付中鎖定利潤,它們就可以廣播較長的秘密鏈,使原來的交易失效。自私挖礦攻擊中也需要隱藏算出的區塊,自私挖礦攻擊在擁有遠低於51%的哈希算力時也可能是有效的。
為了防止這種行為,我們必須阻止礦工保有秘密區塊鏈。如果廣播的每一筆交易都包含最新區塊的哈希值,而且區塊鏈執行這樣的規則:交易的權益證明只能被記在該區塊所構成的區塊鏈上,這樣的話就沒有人能夠建立秘密區塊鏈以影響(leverage)公眾鏈中交易的幣銷毀天數。
現在,交易提交到某個公眾鏈,最佳的區塊鏈可以通過總銷毀幣天數來衡量,而不是通過總的工作量來衡量。

相關詞條

熱門詞條

聯絡我們