首頁>科技>

基於chain33架構開發的位元元,採用了創新的SPOS 即 Safe POS共識機制,SPOS的創新及應用主要體現在兩個方面。

其一就是透過Ticket選票機制實現POS共識

位元元透過 Ticket 實現 POS 的安全挖礦邏輯。使用者使用錢包賬戶中 BTY 餘額購票(挖礦權,目前 3000 個 BTY對應1票),一票對應一個唯一的 Ticket ID,同時擁有一份挖礦權;一個區塊只能由一票挖出,實際的挖礦機率各票均分(如全網有 N 張票,則一張票挖到礦的機率為 1/N)。

Ticket 挖礦流程如下所示:

錢包:定期檢查賬戶中的 BTY 餘額來購買票, 當滿足購票條件後構造一條買票交易發往區塊鏈。

共識:它會一直嘗試使用本地持有的票去打包區塊,一旦打包成功,是表示對應的 Ticket 持有人挖礦成功,並獲得對應的區塊獎勵。

智慧合約:智慧合約會把地址對應的票資訊寫入到區塊鏈資料庫,每一張Ticket 都對應有一個唯一的 Ticket ID,也會有一條資料記錄在資料庫。惡意節點,試圖分叉位元元,或者任何系統能檢測到的惡意行為,都可能會被懲罰,每次懲罰會損失 20%的資產。挖礦必須以位元元基金會發布的標準錢包進行,篡改挖礦行為,如果被系統自動判定為惡意,都會給礦工造成巨大的損失。

位元元POS共識特點:

(1)相較於POW、POC等共識機制免去了共識共識過程中不必要的資源浪費,如儲存浪費、算力浪費等。

(2)智慧合約執行1/N的選票邏輯確保了出塊的公平公正

(3)懲罰機制的設計,確保礦工正向運作,保證主網執行安全

其二位元元在區塊產生中能夠產生公平的隨機數,保證鏈上應用隨機數呼叫的安全,體現Safe

針對遊戲等應用場景,在區塊鏈上為了體現公平性,就需要一個不能被預測的隨機數,來保證公平公正。

目前的區塊鏈大體有如下實現方案:

(1) 合約中呼叫外部中心化的隨機數發生器獲取隨機數;

(2) 使用區塊 hash 中的某些值作為隨機數。

但是這兩種方案都有非常明顯的弊端,原因在於:

(1) 區塊鏈多節點之間智慧合約執行結果是要求強一致的,如果合約從外部讀取資料,是很有可能獲取到不同結果的(比如網路原因導致有的節點讀取正常,有的返回錯誤)進而導致分叉。

(2) 區塊的雜湊可以被控制,導致隨機數被控制。由於一些區塊鏈系統沒有提供很好的隨機數演算法,所以很多 DApp 開發者會自己封裝自認為完美的隨機數演算法導致隨機數被預知。

針對以上兩個弊端,位元元實現了在隨機數上的最佳化:

位元元在原來的隨機數基礎上引入了 VRF(Verifiable Random Functions)可驗證隨機函式邏輯,使得隨機性進一步增強,以下是具體實現邏輯:

首先,使用者使用錢包賬戶中的 BTY 購買票(Ticket),3000BTY 對應一票。

錢包同時生成一個 randNum,雜湊過後再結合錢包挖礦地址的私鑰,票對應的 index(一次可以買多張票)等元素再做兩次雜湊,得到一個公開雜湊引數(pubHash):pubHash=hash(hash(privateKey:index:hash(randNum)))

然後,新購買的票中包含這個 pubHash 以及 randNum 並存入區塊鏈,這張票有 12 小時的成熟期,過了 12 小時才可以參與挖礦;接著共識演算法從區塊鏈中找到已經成熟的票(Ticket)開始打包。

由於共識打包區塊操作只在節點本地執行,所以它可以讀取本地儲存的私鑰,算出一個私密雜湊(privHash)並將這個引數放入到挖礦交易中:privHash = hash(privateKey:index:hash(randNum))

最後,智慧合約收到挖礦交易,對比 hash(privHash)和 pubHash 的值,兩者一致挖礦交易成功,對應的節點獲得挖礦獎勵,否則挖礦交易執行失敗。

VRF 關鍵術語

SK, PK: VRF 中使用的公私鑰對,SK 為私鑰,PK 為公鑰

M: 輸入資料

R:VRF 雜湊輸出

P:VRF 證明

Prover:證明者,擁有 VRF 公私鑰 PK 和 SK

Verifier:驗證者,擁有 VRF 中的公鑰 PK

? 函式組

? 包括四個函式,分為兩類

生成函式

R=VRF_Hash(SK,M)

P=VRF_Proof(SK,M)

驗證函式

R=VRF_P2H(P)

VRF_Verify(PK,M,P)

? VRF 使用流程

(1) 證明者生成一對金鑰,PK 和 SK

(2) 證明者計算 R = VRF_Hash(SK,M),P = VRF_Proof(SK,M)

(3) 證明者把 R,P,PK,M 遞交給驗證者

(4) 驗證者計算,滿足 VRF_P2H(P) = R 並且 VRF_Verify(PK, M, P) = True

即驗證透過,否則驗證不透過

BTY 使用 VRF 實現隨機性的流程

(1) SK 對應挖礦節點賬戶的私鑰, PK 對應挖礦節點賬戶的公鑰。

(2) 在 2019 年 BTY 升級分叉的那個高度,挖礦節點先讀取前一個區塊中儲存的 privHash 作為輸入 M,並透過 VRF 生成函式分別計算出 R 和 P。

(3) 挖礦節點將 R 和 P 寫入挖礦交易中,打包進區塊並廣播。

(4) 所有節點收到區塊,在智慧合約中透過 VRF 驗證函式來驗證正確性(滿足VRF_P2H(P) = R 並且 VRF_Verify(PK, M, P) = True 即驗證透過,否則驗證不通)

(5) 再往後的區塊,讀取前一個區塊中儲存的 R 作為輸入 M 來計算 R 和 P。

(6) 可以看出,當前區塊引入的隨機數,都需要依賴於上一個區塊的隨機值 R ,隨機值更不容易被控制,隨機性大大增強。因此,SPOS 共識的實現結合了隨機數,由於一般情況下是無法預測其它節點的共識資訊,所以也無法獲取到它的共識隨機數。並且系統設定私密雜湊(privHash)不能提前洩露,就算有惡意礦工自己提前暴露,它對應的票也會被作廢,同時本金會被凍結較長時間(2 天以上)。再加上系統設定票需要經過 12 小時的成熟期後才可以參與挖礦,以及在共識邏輯中引入 VRF 可驗證隨機函式的實現,每一個區塊的隨機值都依賴於上一個區塊的隨機數 R,隨機性進一步增強。

這些條件組合起來,系統的隨機數幾乎是無法被操控的。這樣當開發者實現的 DApp 中需要保證公平隨機時,就可以直接使用系統提供的這個安全的隨機數了。

6
最新評論
  • 整治雙十一購物亂象,國家再次出手!該跟這些套路說再見了
  • 雲米科技,小米智慧家居戰略潛在最大受益者,比肩海爾格力