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 的整个数据流流程

[以上纯个人理解 (搬运),如有错误,欢迎指正!]

加载中...
此文章数据所有权由区块链加密技术和智能合约保障仅归创作者所有。