Polkadot 筆記

概要

Polkadot它的設計核心理念為即時擴展性(extensibilty)和伸縮性(scalability),提供一套獨立的中繼鏈(relay-chain),可以在此鏈其上託管其他區塊鍊大量可驗證的動態數據結構。這些數據架構稱為平行鍊或者側鏈,解決了將私有鏈/聯盟鏈融入到公有鏈的共識網絡中,同時又能保有隱私和許可的防護措施。它給予了機會將數百個區塊鏈互相連接,其目標解決合併安全性和去信任的鏈間可交易性問題。


參與方

有四個基本的角色在維持Polkadot網絡

  • 收集人(collat​​or)
  • 釣魚人(fisherman)
  • 提名人(nominator)
  • 驗證人(validator)

驗證人(validator)

允許有資金的提名人推舉一個或多個可以代表他們的驗證人,或驗證人需要抵押足夠多的押金,所以可能驗證人的押金是屬於推舉他的提名人的。

每個驗證小組處理不同部分,這包括更新從一條平行鏈的出口隊列轉移到另一條平行鏈的入隊列、或處理已批准的中繼鏈的交易集合、批准最終的區塊、吸收平行鏈的最終改變。

不同的驗證人小組一旦都批准了自己所屬平行鏈的新塊,他們就必須開始批准中繼鏈自身的區塊。

把驗證人隨機地分成很多個組,一條平行鏈對應一組,但每個塊的組成員數也可能不一樣。

可以跟平行鏈收集人分享手續費,以激勵打包特定收集人的區塊。

沒有履行職責的驗證人,輕微會扣留他們的獎勵,嚴重會扣減或喪失全他們的押金,例如雙向簽名(double-signing)、合謀提供一個非法區塊等可證明的惡意行為,或著試圖同時批准不同分叉上的兩個分支。

提名人(nominator)

通过投放资本来表示他们信任某个特定驗證人或群体,同意他们可以代表维护整个网络。

按照他们的入金比例,他们也会受到和驗證人总押金同样比例的奖励和扣减。

提名人和收集人為同一人,不同時機不同角色。

收集人(collat​​or)

提議平行鏈新區塊的工作指派給收集人。

他們會運行一個特定平行鏈的全節點礦工,他們有全部的必要信息。可以打包新塊,並執行交易,

他們會收集並執行交易,並創建一個”未密封”(unsealed)的區塊,再加上一個[1]零知識證明一起提交給一個或多個當前負責提議(proposing)該平行鏈區塊的驗證人。

平行鏈收集人必須要有完全同步的中繼鍊和平行鏈。

收集所有交易的手續費作為回報。

收集人可能提高所需支付的手續費,使區塊對於驗證人更有吸引力。

這樣的驗證人組需要,還要保證提供平行鏈的候選塊是有效的。

第一,所有的狀態轉換及引用的外部數據被公正地執行。

第二,參與方需要可以容易訪問候選塊、下載或執行任何外部數據候選塊。

收集人把交易收集給驗證人,並且要提供一個非交互的零知識證明(noninteractive zero-knowledge),用來證明本子塊的父塊是有效的。

釣魚人(fisherman)

釣魚人只要及時舉報並證明至少一個有抵押的參與方存在非法行為,他們就能獲得獎勵。

非法行為包括對兩個有相同父塊的不同區塊進行簽名,或在平行鏈上批准一個無效區塊。

釣魚人上報關於單個驗證人的非法消息簽名的基礎獎勵是從最小開始的,這個獎勵會隨著其他釣魚人上報更多的非法簽名而逐漸增加。

只需要提交很少的押金。這個押金用於預防浪費驗證人計算時間和計算資源的女巫攻擊。它是立即可以提現的。


共識

收集人收集並且廣播用戶的交易,也廣播候選區塊給釣魚人和驗證人。

用戶提交一個交易,先轉移到平行鏈外部,然後通過中繼鏈再轉移到另一條平行鏈,成為可以被另一個平行鏈那裡的賬戶執行的交易。

中繼鏈防止垃圾(spam)數據的方法留給了平行鏈協議自身。

因為中繼鏈節點將需要做大量的其他計算,將會通過提高手續費或塊大小的限制減小交易吞吐量。


權益證明

度量單位稱為“代幣”(tokens)。

初始代幣總量為1000萬個DOT(Polkadot中的代幣),隨著時間的推移,DOT將有每年增加一個尚待確定的增加比率。

初期將有500萬個DOT用於ICO(在第一小時參加拍賣的投資者將獲得最終價格15%的折扣)。

注:不接受來自中國公民或中國境內人士的付款,如果發現中國公民或居民參與,將強制撤回發放的代幣並向其退款。

通過按比例分配的增發代幣和收集到的交易手續費激勵。但因為所有代幣持有者都有公平參與的機會,所以代幣持有者的資產不會隨著時間而遭受損失,

驗證人嚴重依賴他們抵押進來的權益。驗證人離職的時候開始,也許3個月左右押金凍結期是為了還能懲罰將來的不當行為,直到區塊鏈週期性的檢查點到來。

檢查點鎖定器(checkpoint latch)能規避長程[2]“無權益抵押”(nothing-at-stake)攻擊,防止比一般更長的危險的鏈重構(chain-reorganistation)發生。

為了保證最新開始同步的客戶端不會被誤導進錯誤的鏈,網絡會出現定期的“硬分叉”,把最近檢查點區塊的哈希值硬編碼進客戶端。


跨鏈通信

在平行鏈間可以存在某種信息通道,一條平行鏈中的執行交易的時候,可以給第二條平行鍊或中繼鏈轉發一個交易。 (目前生產環境中的區塊鏈外部交易,並沒有給它的來源方返回任何信息的原生能力。)

為了保證最小的實現複雜度、最小的風險和最小的平行鏈架構束縛,這些跨鏈交易和目前標準的外部交易沒有區別。

跨鏈交易需支付的手續費,並不像目前的比特幣或以太坊系統那樣,而是必須通過來源平行鍊和目的平行鏈的談判邏輯來管理。

中繼鏈跨鏈交易的問題任務是把交易從來源平行鏈的出口隊列轉移到目的平行鏈的入隊列,可以用一個簡單的隊列機制梅克爾樹(Merkle tree)來保證數據真實。

為了預防一條平行鏈往另一條平行鏈發送垃圾交易,規定在在前一個塊結束後,發送每一個交易時,目標平行鏈的入隊列不能太大。

如果入隊列太大平行鏈會被看做是飽和,再往停滯的目標鏈發送交易,這樣就可以同步地報告失敗了,直到入隊列降到臨界值以下。

允許各平行鏈相互決定他們的飽和度大小。 (因為不存在返迴路徑,如果第二個交易也是同樣的原因失敗了,它可能也不會給來源調用者發送回复,這就需要用到一些其他的恢復方法)。


協議

權益代幣的流動性

基於原則選擇不把所有的代幣都質押進來(可能20%),代幣會被強制保持可流通的狀態。

押金沒收/燒毀

驗證人的某些行為會導致懲罰性地沒收他們的押金。如果押金降低到允許的最小值,驗證會提前結束。

一個不完整的將導致懲罰的行為列表:

屬於一條平行鏈的驗證人小組,卻不為該平行鏈的區塊提供合法性驗證。

簽名了該平行鏈一個不合法的區塊。

不去處理出口隊列中被投票為已生效的消息。

不參與到共識流程中。

在中繼鏈兩個競爭性的分叉上同時簽名。

釣魚人之外的一些參與方也可以舉報這些非法行為,並從中獲得獎勵。

燒幣可以從整體上增加代幣的價值,也就可以補償整個網絡而不僅是涉及到的特定幾方。

獎金必須足夠高才能讓驗證工作是值得做的,規定的獎金也不能比惡意驗證人的押金高太多,否則會不正當地激勵非法行為。

平行鏈註冊

必須通過全民公投才能註冊新的平行鏈,例如佔2/3的多數派通過,並且全系統1/3的代幣都參與了投票才算通過。

打包中繼鏈區塊

判斷一個區塊是否有效的一致性的數據引用:

需要有至少三分之二的驗證人(validator)投票“是”,並且沒人投“否”。

需要超過三分之一的驗證人(validator)對出口隊列消息的可用性與否投票“是”。

可用性

對於出口隊列裡這個塊的已提交交易,驗證人是否有足夠的信息才能在下一個塊正確地驗證平行鏈的候選塊。

投1(知道)或0(不確定)。當他們投了1,後面的投票和這個不對應會導致懲罰。

有效性

平行鏈的區塊是否有效,是否包含了引用的所有的外部數據。

他們可以投1(有效)、-1(無效)或0(不確定)。只要他們投了非0,後面的投票和這個不對應會導致懲罰。

當所有驗證人的票都被記錄過後,只有足夠的簽名票數才能達成一致性,然後中繼鏈的區塊就打包完成了,開始打包下一個區塊。

發現贏的那個意見少於一定數量的票,或有一個“是”且至少有一個“否”投票,,那就可以假設平行鏈發生了意外的硬分叉,這條平行鏈的共識就會被自動暫停,或假設就是有惡意行為發生,並懲罰那些給輸的那個意見投了“是”票的驗證人。

公眾參與

微意見(micro-complaints)系統是一種可以促進公眾參與的方式。可以有外部參與方來監管驗證人。他們找到提供了非可用數據的驗證人。給其他的驗證人提交一個微意見。這個方案需要用PoW或押金機制來防止女巫攻擊,否則它會讓整個系統失效。

可用性保證人

從驗證人裡提名出第二個小組作為可用性保證人(Availability Guarantors)。他們也需要和普通驗證人那樣交押金。和普通驗證人不同的是,他們只需要形成一個單一的小組,監管所有重要跨鏈數據的可用性。

收集人設置

為了確保收集人的區塊被選中的機會是平等的,用隨機數生成器來決定每個候選塊的權重,每個收集人隨機公平地打敗別人的機會。

為了阻止驗證人通過女巫攻擊來生成一個最接近於獲勝票的地址,會要求他們的地址有基本的餘額,更優雅的方式是綜合考慮地址的餘額來計算獲勝的概率。

收集人保險

惡意收集人可以填充非法或超重的區塊給驗證人,通過讓他們受害浪費他們的資源來獲取大量的潛在機會成本。為了預防,

第一:發給驗證人的平行鏈候選塊必須要用有錢的中繼鏈賬戶簽名,否則驗證人會立即丟棄這個塊。

第二:會用組合算法對這些候選塊進行排序,因素包括高於一定限額的賬戶餘額、收集人過去成功提交的區塊數、和獲勝票的接近程度。

任何驗證人都可以指出那個非法的區塊,並將那個收集人部分或全部的餘額都轉給那個受害的驗證人。這種優先級高於其他交易,使得收集人不能在懲罰之前轉走他的餘額。

區塊超重

因為執行一個區塊要花費的時間是相對的,為了防止驗證人提交這些大幅超出普通區塊的超重塊,結果會有三種:

第一種是這個區塊絕對沒有超重,超過2/3的驗證人聲明他們可以在一定時間內算完。

另一種是這個區塊絕對超重了,超過2/3的驗證人聲明他們無法在限定的時間內執行完這個區塊。

再一種就是意見分歧基本持平,後面兩種情況下我們會做一些懲罰。

外部數據可用性

可能是成立一個驗證人小組,就是可用性保證人。

或收集人有內在的激勵去形成一個小組對某條平行鏈區塊的外部數據發起挑戰,來獲取驗證人的獎勵。一旦超過法定個數驗證人都證明交易的非可用性,小組就可以解散了。

路由提交

重點在於-使用梅克爾樹來證明

每條平行鏈的頭部都包含一個出口樹根(egress-trie-root)。這個樹根包含了一個路由信息的格子列表,可以在平行鏈的驗證人之間提供梅克爾樹證明,能證明某條平行鏈的區塊對應著另一條平行鏈的出口隊列。

平行鏈的驗證

平行鏈候選塊的數據包含區塊頭、前塊頭、外部數據輸入、出口隊列數據、狀態轉換有效性的內部證明數據,這個數據集最多有幾百K字節(KiB)。

如果校驗沒有完成,驗證人會嘗試從前一個塊的驗證人開始驗證,之後到所有簽名了這個數據的驗證人。

一旦一個驗證人接收到了一個候選塊,他們就在本地驗證它。驗證人完成了對候選塊的校驗後,並發送必要的驗證信息給小組裡的其他副驗證人,對塊頭哈希進行投票。

節點輪換的問題

在一段區塊後才​​重新分配,或者一段時間內只輪換一個驗證人(validator)。就可以保證節點間連接的隨機性。

One clap, two clap, three clap, forty?

By clapping more or less, you can signal to us which stories really stand out.