Noxed #3 徹頭徹尾瞭解 DEXON

第三篇 Noxed 系列帶你瞭解「抽籤機制 (sortition)」、「時段轉換機制」,以及「公正群」是如何選取的。

DEXON 中文
DEXONZH
7 min readMay 6, 2019

--

上一篇文章中,我們介紹了 DEXON 共識演算法的核心 —— 拜占庭協議,它負責決定哪一個區塊可以接上主鏈。然而,當越來越多節點參與共識,網路的負擔也會同時增加。在這篇文章中,我們將探討 DEXON 能夠達成去中心化,支援上千個節點同時運作的關鍵。

而這個故事要從古希臘時期開始說起。

抽籤機制

在開始之前,我們先來回顧一小段歷史。首先,讓我們來看看 Wikipedia 是怎麼說明抽籤機制 (sortition) 的:

抽籤機制是一種「從一群候選名單中,隨機抽出政府官員」的選舉方式。抽籤機制的目標,是要確保所有的競爭者或候選者都有相同的機會可以執政。

雅典人相信抽籤比起投票選舉更加民主。為了防止少數人動手腳,影響抽籤結果,雅典人設計了一台名叫「可雷羅蒂瑞安機 (Kleroterion machine)」的機器來抽籤。可雷羅蒂瑞安機是一塊帶有很多插槽的裝置,雅典公民可以把小石板隨機插到某一個插槽裡,然後可雷羅蒂瑞安機會滾出不同顏色的球。如果球是白色,則代表這個公民中籤,可以進入議會。

From: https://en.wikipedia.org/wiki/Kleroterion

同樣地,DEXON 也有一個負責拜占庭協議的小議會,只不過 DEXON 不是利用石板來抽籤。我們利用密碼學來創造出在區塊鏈世界中安全且公平的「可雷羅蒂瑞安機」,並且用來決定誰可以參加 DEXON 的小議會。接下來,就讓我們來看看什麼是 DEXON 的小議會並且如何加入吧!

時段轉換機制

在前一篇文章中,我們利用「拜占庭將軍問題」來說明電腦之間要取得共識的問題。在拜占庭的世界裡,將軍們想利用拜占庭協議來共同決定是否要進攻城池;而在區塊鏈的世界裡,將軍們的目標不是城池,而是決定誰可以出塊。

那麼,誰是要參與拜占庭協議的「將軍們」呢?在 DEXON 中,我們稱那些參與拜占庭協議的節點為「公證群 (notary set)」。在民主社會中,議會代表透過立法程序來決定一條新的法律。而公證群就像一個議會一樣,公證群的成員們透過拜占庭協議來決定每一塊的出塊權。

賠錢的生意沒人做。就像比特幣或是大部分的區塊鏈,DEXON 的出塊者可以藉由出塊獎勵和交易費賺取報酬 (報酬以 DXN 支付)。然而,在 DEXON 之中,想要獲得出塊權,必須要先成為公證群的成員。所以,如果你不在公證群裡面的話,一塊錢也賺不到了。

先別擔心,就像民主社會的議會一樣,公證群每過一段時間就會定期重選。在區塊鏈中,「區塊高度」就是一個大家都有共識的時鐘。目前 DEXON 設定每經過 3600 塊,公證群就會重選。比方說,`公證群1`會負責`區塊1`到`區塊3600`。接者,`公證群2`負責`區塊3601`到`區塊7200`,依此類推。平均而言,DEXON 每一秒會出一塊,所以大約一個小時公證群就會重選一次。

在 DEXON 之中,每 3600 個區塊我們稱為一個「時段 (epoch)」。

公證群是如何選取的?

下一個問題來了,要怎麼做才能被選進公證群呢?參與公證群有兩個步驟:「註冊」與「抽籤」。

註冊

所有要加入公證群的節點都必須完成註冊,而一個成功的註冊必須滿足以下兩點:

1. 將節點的公鑰註冊到區塊鏈上

2. 將足夠多的 DXN 存放在治理合約 (governance contract) 之中 (目前門檻為一百萬 DXN)

你可能會好奇:為什麼要存放 DXN 在治理合約呢?原因有兩點:第一,這可以限制候選節點的數量。由於每一個成功註冊的帳號都有相同的機率被選進公證群之中,如果完全不需存放 DXN,攻擊者就可以註冊很多分身帳號,嚴重排擠合法使用者的權利。

第二,這些 DXN 可以做為節點的保證金。如果這些節點在之後的共識演算法之中作惡(例如在拜占庭協議中故意傳送錯誤的資訊),治理合約就可以沒收保證金。如此一來,攻擊者作惡的成本就會提高,系統也就會更加穩定。

抽籤

由於拜占庭協議的通訊量很大,所以在實際的網路中,如果有上千個節點同時參與協議,網路很可能會塞車。因此,我們藉由抽籤機制來限制公證群的大小。

接下來,我們以一個具體的例子來說明抽籤機制。首先,每一個時段都會對應到一個「魔術數字」。假設你在第99個時段以前註冊公鑰 (`pk`) 並存放足夠的 DXN。那麼,在第100個時段時,你的公鑰 `pk` 以及第100個時段的魔術數字會被一起丟進抽籤函數裡面,而抽籤函數會回傳「中籤」或「槓龜」。如果你在第100個時段中籤的話,就會成為第101個時段的公證群,並且參與第101個時段的拜占庭協議。如果你在第100個時段槓龜的話,只要你在治理合約當中存放的 DXN 沒有提出來,你就可以繼續參與下一個時段的抽籤。

具體而言,所有人都可以利用魔術數字`m`以及候選者的公鑰`pk_i`算出

** h_i = hash(m, pk_i) **

假設公證群的大小是`n`,那麼擁有前`n`小`h_i`的那些節點可以參加下一個時段的公證群。

在下一篇文章中,我們將聚焦在 DEXON 另一個核心技術——「鏈上隨機數」,其中包括:
1. DEXON 的鏈上隨機數有哪些優勢呢?
2. 鏈上隨機數是如何生成的?
3. 我們如何得到魔術數字呢?

Noxed 是什麼?

Noxed 是由 DEXON 基金會所製作的全新區塊鏈學習系列,我們將以文字、影片或圖像的方式來闡述 DEXON 的來龍去脈。如果你希望看到更多 DEXON 技術相關的主題,請在留言中告知我們。

立刻加入 DEXON 社群

「社群即是力量」,如果你想更了解 DEXON,或是加入 DEXON 社群成為社群管理員,歡迎加入我們!

Telegram discussions: https://t.me/dexon_foundation
Announcements: https://t.me/dexon_news
Scam alerts: https://t.me/dexon_scam_alerts

👩‍💻 Discord: https://discord.gg/WwZUTFj
👩‍💻 Github: https://github.com/dexon-foundation
👩‍💻 Reddit: https://www.reddit.com/r/DEXONFoundation/

👉 Twitter: https://twitter.com/dexonfoundation
👉 英文 Faceboook: https://www.facebook.com/DEXON.Foundation/
👉 中文 Faceboook: https://www.facebook.com/dexonchinese/
👉YouTube: https://www.youtube.com/channel/UCbg6l4M8QmSrJphxQvKof5g
👉 Medium: https://medium.com/dexon

--

--