Albert

Albert

twitter

Polygon CDK研究

Polygon Chain Development Kit,一個開源框架,用於在以太坊上快速部署由 ZK 驅動的 L2。

使用 Polygon CDK 開發的鏈的高級架構,可以像 L1 區塊鏈一樣定制業務規則

1

為什麼要選擇 Polygon CDK ?#

Polygon CDK 的設計原則

  • 高度模塊化,開發人員可以根據自己的需要定制鏈,從執行環境到 gas token
  • 高度可擴展性,CDK 開發的 L2 可提高交易速度
  • 統一的流動性,CDK 開發的鏈可確保在 Polygon 2.0 L2 生態系統內鏈間的資產轉移
  • 獨立的 DA,CDK 開發的鏈具有專用的 DA 和 DAC,可提供強大的鏈外數據訪問和可靠性
  • 可組合可操作性,借助 LXLY Bridge, 實現鏈間的無縫互動和資產交換
  • 近乎即時的最終確認,使用 Polygon CDK 部署的鏈依賴於加密安全,無需完整節點即可確保交易完整性

CDK 開發的鏈如何融入整個 Polygon 2.0 生態系統

Key Factors

  • Scalability for Ethereum, CDK 鏈可擴展以太坊
  • 業務邏輯定制,CDK 鏈完全支持 EVM,允許自定義 gas limit,op code 兼容性和技術集成
  • 隱私選項,CDK 鏈可以創建私有的 app chain。為優先考慮隱私的人提供一種選擇,支持客戶維護其應用數據的機密性,同時享受區塊鏈技術帶來的好處
  • 以合規為導向,CDK 鏈可實現網絡主權和合規性,允許網絡維護者選擇符合當地法規的管理者,確保符合地區法規要求
  • 廣泛的 Web3 支持,CDK 鏈是 zkEVM stack 的直接分叉,便於服務的移植,利用了一個全面的生態系統

Polygon CDK Data Avalilablity#

數據可用性將交易的執行和數據存儲分離,允許交易數據駐留在鏈外 (off-chain data),同時仍可用於驗證,大大提高了可擴展性,降低了成本。

Polygon CDK Validium 是一種基於 zkEVM 基礎的獨特的擴展方案,它為 zkEVM 整合了 DAC,一種獨特的數據可用性方法。

Polygon CDK 框架內,數據可用性委員會 (DAC) 成員運行 DA 節點,以確保鏈外數據的安全性、可訪問性和完整性。鏈外數據由 DAC 管理,確保可用性。

Data Availability Committees 數據可用性委員會,有一個核心職責:核實每個人都能訪問根據鏈上事件重建 L2 狀態所需的數據。這意味著,即使 L2 運營商離線,用戶仍可訪問其資產的數據。

在 CDK-developed 鏈中,DAC 作為一個安全的節點聯盟,確保鏈外數據訪問。

DAC 的優勢:

  • Lower Transaction Fees 計算要求降低,費用也隨之降低
  • State Privacy,確保數據完整性

DAC 成員由 L1 上的智能合約進行管理。sequencer 將 L2 batch 數據發送給 DAC 成員,只在 L1 上傳 hash 值 (accumulated input hash),而不是完整的 L2 交易數據。

  • sequencer 有一個 ECC 私鑰,在將 L2 batch 數據發送給 DAC 之前,會用自己的私鑰簽名。
// 帶有sequencer簽名的sequence
type SignedSequence struct {
	Sequence  Sequence       `json:"sequence"`
	Signature types.ArgBytes `json:"signature"`
}

// sequencer需要發送到L1的數據,以及一些metadata
// 排好序的交易列表,稱為sequence
type Sequence struct {
	Batches         []batch.Batch `json:"batches"`
	OldAccInputHash common.Hash   `json:"oldAccInputhash"`
}

// batch結構體
type Batch struct {
	Number         types.ArgUint64 `json:"number"`
	GlobalExitRoot common.Hash     `json:"globalExitRoot"`
	Timestamp      types.ArgUint64 `json:"timestamp"`
	Coinbase       common.Address  `json:"coinbase"`
	L2Data         types.ArgBytes  `json:"batchL2Data"`
}


  • DAC 成員向 sequencer 提供 API (datacom 服務)
    • 從 L1 合約中讀取 sequencer 地址 (如果有更新,會監聽合約進行更新)
    • 接收 & 存儲 sequencer 發過來的 L2 batch 數據 (CDK 稱這部分為 offchain data)
      • 驗證 sequencer 地址 (通過 sequencer 的 ECC 簽名恢復)
      • 存儲數據
      • func (db *DB) StoreOffChainData(ctx context.Context, od []offchaindata.OffChainData, dbTx pgx.Tx) error
        
    • 存儲成功後,對 accumulated input hash 進行簽名,並返回給 sequencer (每個 DAC 成員有一個 ECC 私鑰)
    • 核心代碼
      • func (d *DataComEndpoints) SignSequence(signedSequence sequence.SignedSequence) (interface{}, types.Error)
        

zkEVM 和 Validium 在部署上的區別#

zkEVM vs. Validium

FeaturezkEVMValidium
Transaction Data Storage所有交易數據保存到 L1只將交易數據 hash 保存到 L1
Data Availability所有數據都在鏈上提供,數據可用性高鏈外數據可用性由 DAC 管理,DAC 負責驗證交易數據的哈希值
Security由於鏈上數據的可用性和零知識證明(ZKPs)的使用,它具有很高的安全性DAC 成員可能會串通,降低安全性。不過通過使用 ZKP,安全性仍然可以得到保證。
Gas Fees高 gas 費gas 費低,因為鏈上只存儲了交易數據 hash
Proof Generation使用 Prover 生成批處理事務的 ZKPs 以進行驗證使用 Prover 生成批處理事務的 ZKPs 以進行驗證
Transaction Validation驗證通過以太坊上的智能合約實現驗證涉及一個附加層,由 DAC 成員簽署交易數據的哈希值
Final Settlement交易批次及其相應的 ZKP 被添加到以太坊狀態中交易數據的哈希值及其 ZKP 被添加到以太坊狀態

zkEVM Node 的關鍵組件#

3

  • Aggregator 聚合器
    • 負責向 L2 提交 L2 state 的有效性證明。
      • 它需要向 sequencer 獲取交易的 batch
      • 並和 prover 交互獲得 zk proof,將多個證明匯總成單個證明
      • 使用 EthTxManager 將聚合的 zk proof 發送到 L1
  • Prover
    • 負責為 batched transactions 生成 zk proof,這些 proof 用於在 L1 上驗證 L2 state。
  • Sequencer
    • 負責對 L2 交易進行排序,推動 L2 狀態向前。
      • Transaction Ordering 交易排序,從 tx pool 中獲取交易,並添加到 state 中
      • State Transition 狀態轉換,與 Executor 協作,執行交易,並更新 state
      • Trusted finality 可信的最終性確認,一旦 sequencer 將交易添加到 state 中,就會與其它節點共享該信息,使交易最終確認 (排序器級別的信任)。
        • 其它節點在獲得 zkp 確認之後,才是最終級別的確認。
  • SequenceSender
    • SequenceSender 將排好序的交易列表 (稱為 sequence) 發送給 L1
      • 發送的其實是 sequence 的 fingerprint(可以理解為一個 hash 值)
      • 使用 EthTxManager 來處理 L1 交易
    • 它還與數據可用性層協作,確保所有交易數據能在鏈外訪問
  • Synchronizer
    • Synchronizer 使節點的本地狀態和以太坊 L1 保持同步,是 L1 和 L2 節點之間的橋樑
      • 監聽 L1 合約的事件
      • 根據 L1 事件,從數據可用性層下載數據
      • 更新狀態,使本地狀態和主網保持一致
      • 處理 L1 區塊重組:檢測和管理區塊鏈重組,以保持數據的完整性
  • Executor
    • 狀態轉換 (state transition) 的實現,也即 VM 的實現
      • Batch execution: 接收一批交易的執行請求
      • EVM-compatible 的交易處理
      • 從執行中提取必要的 metadata,如 state root, transaction receipts, logs (events)
  • EthTxmanager
    • 用於和 ETH 主網交互,包括:
      • 管理 SequenceSender 和 Aggregator 向 L1 發送交易的請求
      • 為交易涉及的賬戶管理 nonce
      • 動態調整 gas 價格,以確保交易被及時打包
  • State
    • 是節點數據管理的重要組件。
      • 狀態管理,處理所有狀態相關的數據,包括 batch, block 和 transaction
      • 與 Executor 通信,以處理交易和更新狀態
      • StateDB 用於狀態持久化
  • Pool
    • 交易池,用於交易的臨時存儲
      • 臨時存儲經過 RPC 提交的交易
      • 為 Sequencer 提供交易,以進行交易排序和打包 batch
  • JSON RPC
    • 給用戶交互的 HTTP 接口
  • L2GasPricer
    • 根據 L1 gas price 計算 L2 gas price

合約#

主要有 3 個合約

CDKDataCommittee合約#

CDKDataCommittee合約用於管理 DAC 成員、驗證 DAC 簽名。主要有 2 個方法:

  • admin 可以設置 DAC 成員和 N/M 多簽

    function setupCommittee(
            uint _requiredAmountOfSignatures,
            string[] calldata urls,
            bytes calldata addrsBytes
        ) external
    
  • 驗證 DAC 簽名

    • 驗證signedHash是否達到足夠的簽名閾值
    function verifySignatures(
            bytes32 signedHash,
            bytes calldata signaturesAndAddrs
        ) external view
    
    // signedHash是根據BatchData計算得到,並不是transactionsHash
    

CDKValidium合約#

管理和更新 L2 的狀態。

  • trusted sequencer向該合約提交交易 batches

    • sequenceBatches會調用CDKDataCommittee合約的verifySignatures方法,驗證 DAC 簽名是否達到閾值
    function sequenceBatches(
            BatchData[] calldata batches, // BatchData包含transactionsHash
            address l2Coinbase,
            bytes calldata signaturesAndAddrs
        ) external ifNotEmergencyState onlyTrustedSequencer
    
    struct BatchData {
            bytes32 transactionsHash; // L2交易的keccak256
            bytes32 globalExitRoot; // 該批次的Global exit root,用於L1提款
            uint64 timestamp;
            uint64 minForcedTimestamp;
        }
    
  • verifyBatches 驗證交易 batches

    • 提供 zk proof,證明一批交易
    // 只有TrustedAggregator才可以調用
    function verifyBatchesTrustedAggregator(
            uint64 pendingStateNum,
            uint64 initNumBatch,
            uint64 finalNewBatch,
            bytes32 newLocalExitRoot,
            bytes32 newStateRoot,
            bytes32[24] calldata proof
        ) external onlyTrustedAggregator
    
    function verifyBatches(
            uint64 pendingStateNum,
            uint64 initNumBatch,
            uint64 finalNewBatch,
            bytes32 newLocalExitRoot,
            bytes32 newStateRoot,
            bytes32[24] calldata proof
        ) external ifNotEmergencyState
    

PolygonZkEVMBridge合約#

部署在 L1 和 L2 上的橋,用於資產跨鏈。

數據流#

  1. 批次 (batches) 組裝,Sequencer 收集用戶交易,並將其整理成批次 (batches)
  2. 批次認證,批次組裝完成後,Sequencer 將批次數據及其對應的 hash 值發送給 DAC
  3. 數據驗證和存儲,各 DAC 節點獨立驗證批次數據,驗證通過後,哈希值會存儲在每個節點的本地數據庫中
  4. 簽名生成,每個 DAC 節點都會為批次 hash 值生成一個簽名,這是對批次完整性和真實性的認可
  5. 與 Ethereum 通信,Sequencer 收集 DAC 成員的簽名和原始批次的 hash 值,並提交給 Ethereum 網絡進行驗證
  6. Ethereum 上的驗證,Ethereum 上的 rollup 合約會根據有效的 DAC 成員列表驗證提交的簽名,並確認批次 hash 值得到足夠的批准
  7. 使用 ZKP 進行最終確認,聚合器為該批次的交易準備 ZKP 並提交給 Ethereum。該證明確認批准交易的有效性,但不透露交易細節,從而更新 Ethereum 上 CKD 鏈的狀態。

1697850863320
Polygon CDK 的整個數據流流程

[以上純個人理解 (搬運),如有錯誤,歡迎指正!]

載入中......
此文章數據所有權由區塊鏈加密技術和智能合約保障僅歸創作者所有。