Polygon Chain Development Kit,一个开源框架,用于在以太坊上快速部署由ZK驱动的L2。
使用Polygon CDK开发的链的高级架构,可以像L1区块链一样定制业务规则
Polygon CDK的设计原则
Key Factors
数据可用性将交易的执行和数据存储分离,允许交易数据驻留在链外(off-chain data),同时仍可用于验证,大大提高了可扩展性,降低了成本。
Polygon CDK Validium 是一种基于 zkEVM基础的独特的扩展方案,它为zkEVM整合了DAC,一种独特的数据可用性方法。
Polygon CDK框架内,数据可用性委员会(DAC)成员运行DA节点,以确保链外数据的安全性、可访问性和完整性。链外数据由DAC管理,确保可用性。
Data Availability Committees 数据可用性委员会,有一个核心职责:核实每个人都能访问根据链上事件重建L2状态所需的数据。这意味着,即使L2运营商离线,用户仍可访问其资产的数据。
在CDK-developed链中,DAC作为一个安全的节点联盟,确保链外数据访问。
DAC的优势:
DAC成员由L1上的智能合约进行管理。sequencer将L2 batch数据发送给DAC成员,只在L1上传hash值(accumulated input hash),而不是完整的L2交易数据。
// 带有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"`
}
func (db *DB) StoreOffChainData(ctx context.Context, od []offchaindata.OffChainData, dbTx pgx.Tx) error
func (d *DataComEndpoints) SignSequence(signedSequence sequence.SignedSequence) (interface{}, types.Error)
zkEVM部署
zkEVM Node,管理polygon zkEVM网络、处理交易、维护状态并与L1交互
zkEVM Contracts, 部署在以太坊上的一系列合约,主要有PolygonZkEVM
,PolygonZkEVMBridge
和PolygonZkEVMGlobalExitRoot
Validium部署
CDKDataCommittee.sol
和 CDKValidium.sol
**
zkEVM vs. Validium
Feature | zkEVM | Validium |
---|---|---|
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 被添加到以太坊状态 |
主要有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
// 只有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上的桥,用于资产跨链。
Polygon CDK 的整个数据流流程
[以上纯个人理解(搬运),如有错误,欢迎指正!]