Skip to content

GitLab

  • Projects
  • Groups
  • Snippets
  • Help
    • Loading...
  • Help
    • Help
    • Support
    • Community forum
    • Submit feedback
    • Contribute to GitLab
  • Sign in
zkevm-circuits
zkevm-circuits
  • Project overview
    • Project overview
    • Details
    • Activity
    • Releases
  • Repository
    • Repository
    • Files
    • Commits
    • Branches
    • Tags
    • Contributors
    • Graph
    • Compare
  • Issues 0
    • Issues 0
    • List
    • Boards
    • Labels
    • Service Desk
    • Milestones
  • Merge Requests 0
    • Merge Requests 0
  • CI / CD
    • CI / CD
    • Pipelines
    • Jobs
    • Schedules
  • Operations
    • Operations
    • Incidents
    • Environments
  • Packages & Registries
    • Packages & Registries
    • Package Registry
  • Analytics
    • Analytics
    • CI / CD
    • Repository
    • Value Stream
  • Wiki
    • Wiki
  • Snippets
    • Snippets
  • Members
    • Members
  • Activity
  • Graph
  • Create a new issue
  • Jobs
  • Commits
  • Issue Boards
Collapse sidebar

新注册的用户请输入邮箱并保存,随后登录邮箱激活账号。后续可直接使用邮箱登录!

  • zkp
  • zkevm-circuitszkevm-circuits
  • Wiki
    • Zkevm docs
  • 10 public

Last edited by gzxu Aug 07, 2024
Page history
This is an old version of this page. You can view the most recent version or browse the history.

10 public

总体布局

本段介绍结构体PublicCircuitConfig的列及其含义。

单功能列 Single-purpose columns

下面是public子电路中的单功能的列:

    /// various public information tag, e.g. BlockNumber, TxFrom
    tag: Column<Instance>,
     /// tx_id (start from 1), except for tag=BlockHash, means recent block number diff (1...256)
    tx_idx_or_number_diff: Column<Instance>,
  • tag 指该行数据的类别, 其具体类型为:
    pub enum Tag {
        #[default]
        BlockCoinbase,
        BlockTimestamp,
        BlockNumber,
        BlockDifficulty,
        BlockGasLimit,
        BlockBaseFee,
        BlockHash,
        TxStatus,
        // combine From and Value together to reduce number of lookups
        TxFromValue,
        // combine To and CallDataLength together to reduce number of lookups
        TxToCallDataSize,
        TxIsCreate,
        TxGasLimit,
        TxGasPrice,
        TxCalldata, //TODO make sure this equals copy tag PublicCalldata
        TxLog,
        TxLogSize,
    }
  • tx_idx_or_number_diff 指交易id;当该行数据为BlockHash的时候指的是最近的block number

多功能列 Versatile columns

为了减少列的使用,缩减电路规模,设计了多功能的列。在不同的行数据类别下,这些列存放不同的数据。目前设计有4个多功能列,代码里呈现为:

values: [Column<Instance>; NUM_VALUES],

表设计

区块公共数据存放

tag为BlockCoinbase时,该行数据值为:

tag tx_idx_or_number_diff value[0] values[1] values[2] values[3]
BlockCoinbase 0 coinbase[..4] coinbase[4..] 0 0

tag为BlockTimeStamp时,该行数据值为:

tag tx_idx_or_number_diff value[0] values[1] values[2] values[3]
BlockTimestamp 0 BlockTimestamp[..16] BlockTimestamp[16..] 0 0

tag为BlockNumber时,该行数据值为:

tag tx_idx_or_number_diff value[0] values[1] values[2] values[3]
BlockNumber 0 0 BlockNumber 0 0

tag为BlockDifficulty时,该行数据值为:

tag tx_idx_or_number_diff value[0] values[1] values[2] values[3]
BlockDifficulty 0 BlockDifficulty[..16] BlockDifficulty[16..] 0 0

tag为BlockGasLimit时,该行数据值为:

tag tx_idx_or_number_diff value[0] values[1] values[2] values[3]
BlockGasLimit 0 BlockGasLimit[..16] BlockGasLimit[16..] 0 0

tag为BlockBaseFee时,该行数据值为:

tag tx_idx_or_number_diff value[0] values[1] values[2] values[3]
BlockBaseFee 0 BlockBaseFee[..16] BlockBaseFee[16..] 0 0

tag为BlockHash的时候,遍历最近的history_hash,每行存放数据值如下,其中index代表在history_hash中的次序,hash为该次序对应的hash值:

tag tx_idx_or_number_diff value[0] values[1] values[2] values[3]
BlockHash index+1 hash[..16] hash[16..] 0 0

区块交易相关数据存放

对区块中的每一笔交易遍历存放如下数据类型,其中tx_idx为该交易在区块中的交易列表中的序号(从1开始)

tag为TxFromValue时,该行数据值为:

tag tx_idx_or_number_diff value[0] values[1] values[2] values[3]
TxFromValue tx_idx from[..4] from[4..] value[..16] value[16..]

tag为TxToCallDataSize时,该行数据值为:

tag tx_idx_or_number_diff value[0] values[1] values[2] values[3]
TxToCallDataSize tx_idx to_hi to_lo 0 tx.input.len

tag为TxIsCreate时,该行数值为:

tag tx_idx_or_number_diff value[0] values[1] values[2] values[3]
TxIsCreate tx_idx 0 1/0(创建合约为1,普通合约调用为0) 0 0

tag为TxGasLimit时,该行数值为:

tag tx_idx_or_number_diff value[0] values[1] values[2] values[3]
TxGasLimit tx_idx gas[..16] gas[16..] 0 0

tag为TxGasPrice时,该行数值为:

tag tx_idx_or_number_diff value[0] values[1] values[2] values[3]
TxGasPrice tx_idx gas_price[..16] gas_price[16..] 0 0

将合约的输入数据按byte遍历, 每个byte存放进TxCalldata的数据行,其中idx为该byte在合约的输入数据中的次序,byte为该次序对应的byte数据,该行数值为:

tag tx_idx_or_number_diff value[0] values[1] values[2] values[3]
TxCalldata tx_idx idx byte 0 0

区块log数据存放

区块中每笔交易可以产生多条log,遍历区块中每笔交易的每个log,其中topic_num为该log中topics的数目(不超过4);tx_idx为该log所属的transaction_index;log_index为该log的log_index;address为该log所属的地址;如果topic_num为0的话,log_tag为AddrWith0Topic;如果topic_num为1/2/3/4的话,log_tag为AddrWith1/2/3/4Topic。

tag为TxLog,该行数值为:

tag tx_idx_or_number_diff value[0] values[1] values[2] values[3]
TxLog tx_idx log_index log_tag address[..4] address[4..]

tag为TxLog的时候,根据topic的数目,依次存放topic1/2/3/4的数据,其中topic_hash为该topic对应的hash,topic_log_tag为Topic1/2/3/4,每行数值为:

tag tx_idx_or_number_diff value[0] values[1] values[2] values[3]
TxLog tx_idx log_index topic_log_tag topic_hash[..16] topic_hash[16..]

tag为TxLogSize时候,记录了log的data长度(data_len),该行数值为:

tag tx_idx_or_number_diff value[0] values[1] values[2] values[3]
TxLogSize tx_idx 0 data_len 0 0

将log中的数据按照byte便利,每个byte存放一行,其中data_idx为该byte在数据块中的次序,其中LogTag::Data为该数据类型,每行数值为:

tag tx_idx_or_number_diff value[0] values[1] values[2] values[3]
TxLog tx_idx log_index LogTag::Data byte data_idx
Clone repository
  • basics
    • evm
    • halo2
  • code notes
    • binary_number_with_real_selector
    • how to use macro
    • simple_lt
    • simple_lt_word
  • Home
  • image
  • zkevm docs
    • 1 introduction
    • 10 public
    • 11 fixed
    • 12 exp
    • 13 keccak
    • 14 comparisons
    • 15 differences
View All Pages

Copyright © 2024 ChainWeaver Org. All Rights Reserved. 版权所有。

京ICP备2023035722号-3

京公网安备 11010802044225号