標籤:

Casper+Sharding鏈規範V2.1(一)

Casper+Sharding鏈規範V2.1(一)

Casper+Sharding chain v2.1 - CodiMD?

notes.ethereum.org

進行中!!!!!

此文章為Casper + Sharding(shasper))鏈2.1版規範,非定稿。

本協議中,有中央PoS鏈用來存儲並管理當前有效PoS驗證人集。在當前PoW主鏈發送含有32ETH的交易才可成為初始驗證人。交易發送完畢,到PoS鏈處理該區塊時,交易發送人進入驗證人排序階段並最終成為有效(活躍)驗證人,直至自願註銷或因不當行為被強行註銷。

PoS鏈上的主要負載源是證明attestations)。一個證明具有雙重作用:

1. 證實信標鏈中的某個父塊

2. 證實分片中的區塊哈希(足夠數量的此類證明創造了「交聯(crosslink)」,確認分片區塊到主鏈中)。

每個分片(比方說,總共1024個分片)本身就是一個PoS鏈,作存儲交易和帳戶用。交聯一則用於將分片「確認」進主鏈,二則也是不同分片間能夠彼此通訊的主要方式。

或者,還可以想像個更簡單的「最小分片演算法」,其中交聯就是提出數據塊的哈希,這些數據塊本身彼此互不鏈接。

注意:

github.com/ethereum/beaan ethresear.ch post 中的python代碼沒有反應出更新。出現分歧時,本文通常為最新修改版本。

術語

  • 驗證人:Casper /分片共識系統的參與者。在Casper機制中存入32 ETH押金驗證人
  • 活躍驗證人集:當前正在參與的驗證人,以及Casper機制希望生成並證明區塊、交聯及其他共識對象(的驗證人)
  • 委員會:活躍驗證人集的(偽)隨機採樣子集。整體提及委員會時,如「該委員會證實X」,認為是「包含足夠數量驗證人,被協議承認可代表委員會的該委員會某子集」
  • 提議人:出塊的驗證人
  • 證明人:委員會中籤署區塊的驗證人
  • 信標鏈:中心化PoS鏈,是分片系統的基礎
  • 分片鏈:進行交易、存儲賬戶數據的單鏈
  • 交聯:來自委員會的一組簽名,證實分片鏈中的區塊,可以包含在信標鏈中。交聯是信標鏈「獲悉」分片鏈更新狀態的主要手段
  • 時隙(Slot):長8秒的時間段,在此期間,一個提議人能夠創建一個區塊,一些證明人可以進行證明
  • 代遷移:驗證人集的變更
  • 代:創世以來在特定鏈中發生代遷移的數量
  • 周期:一個多區塊跨度,在此期間,所有驗證人都只有一次機會進行證明(除非在驗證人內部發生代遷移)
  • 落定,正當:參見Casper FFG定稿

常數

  • 分片計數(SHARD_COUNT):代表分片數量的常數,目前設置為1024
  • 押金大小(DEPOSIT_SIZE):32 ETH
  • 最大驗證人計數(MAX_VALIDATOR_COUNT):222= 4194304 #注意,一次性押金最大值為~1.34億枚ETH
  • 時隙時常(SLOT_DURATION):8秒
  • 周期時長(CIRCLE_DURATION):64個時隙
  • 委員會最小規模(MIN_COMMITTEE_SIZE):128(基本原理見建議最低值111)

PoW主鏈變更

本PoS/分片協議可單獨於現有PoW主鏈實施。只需對PoW主鏈做兩處變更,其中第二個變更非技術必須。

  • 在PoW主鏈上增加合約;該合約支持存入DEPOSIT_SIZE的ETH;deposit函數以:(i)pubkey(位元組),(ii)withdrawal_shard_id(int),(iii)withdrawal_addr(地址),(iv)randao_commitment(32位元組),(v)bls_proof_of_possession 為參數
  • PoW主鏈客戶端將實現一種prioritize(block_hash,value)的方法。區塊可用且已驗證時,此方法將其分數設置為給定值,並遞歸調整所有後代的分數。使得PoS信標鏈的終結小工具隱式地完結主鏈區塊。注意,將此實現到PoW客戶端是對PoW分叉選擇規則的變更,因此是可視為分叉。

信標鏈

信標鏈是PoS系統的「主鏈」。主要職責為:

  • 存儲並維護活躍、等待中以及退出的驗證人集
  • 處理交聯(見上文)
  • 處理自己鏈上的逐塊共識以及定局小工具

以下為進入每個信標鏈區塊的欄位:

信標鏈狀態分為活躍狀態和結晶狀態兩種。

以下為活躍狀態/ActiveState:

以下為結晶狀態/CrystallizedState:

ShardAndCommittee對象的形式

每個ValidatorRecord都是包含驗證人信息的對象:

CrosslinkRecord包含待提交至區塊鏈的上一個完整交聯信息:

信標鏈處理

處理信標鏈與處理PoW鏈在很多方面非常類似。客戶端下載並處理區塊,維護當前「規範鏈」,終止於當前的「頭部」。但是,由於信標鏈與現有PoW鏈的關係,並且本身是PoS鏈,所以(處理)也存在一定的差異。

由節點處理的信標鏈區塊,必須滿足三個條件:

  • parent_hash指向的父區塊已被處理並認可
  • pow_chain_ref指向的PoW鏈區塊已被處理並認可
  • 節點的本地時鐘時間大於或等於GENESIS_TIME + slot_number * SLOT_DURATION計算得出的最小時間戳

未滿足這三個條件時,客戶端應延遲處理區塊,直至三個條件都滿足。

有鑒於PoS機制,出塊將顯著不同。客戶端只在需要創建區塊時檢查其認為是規範鏈的鏈,並查找其時隙號;時隙到達時,按要求提議或證實區塊。

信標鏈分叉選擇規則

信標鏈使用的是「傾向包含最高時隙數合理區塊(highest-slot-number justified block)的鏈」的Casper FFG分叉選擇規則。從均來自同一個合理區塊的諸多鏈間選擇時,鏈使用「即時消息驅動的GHOST」(IMD GHOST)選擇鏈的頭部。

詳見:

ethresear.ch/t/beacon-c

網路模擬器實施見:

github.com/ethereum/res

以下為工作原理的例子(綠色代表完結區塊,黃色代表合理區塊,灰色代表證明):

信標鏈狀態遷移函數

現在定義下狀態遷移函數。設置層面,狀態遷移由兩部分組成:

1. 結晶狀態重算,僅在block.slot_number> = last_state_recalc + CYCLE_LENGTH時發生,且影響CrystallizedState和ActiveState

2. 每塊處理,即每個區塊都發生(結晶狀態重算區塊期間時,(每塊處理)待結晶狀態重算之後發生),且僅影響ActiveState

結晶狀態重算通常關注驗證人集的變更,包括調整餘額、添加刪除驗證人以及處理交聯和管理區塊合理(block justification);每塊處理通常關注驗證聚合簽名並保存ActiveState中區塊內活動相關的臨時記錄。

未完待續。

推薦閱讀:

我就想問問:2018年投資數字貨幣,還有可能暴富嗎?
如何做一個真正去中心化的EOS Blockchain?
關於加密貨幣卡片的故事,我印了一張寶寶幣
ETH拿穩別動,有V神代碼拉盤!老狼5月5行情分析
區塊鏈淘金者要小心,技術是關鍵

TAG:以太坊 |