Skip to content
This repository was archived by the owner on Jul 5, 2024. It is now read-only.

Add test function with EVM circuit stats#616

Merged
ed255 merged 3 commits into
mainfrom
feature/evm-stats
Jul 22, 2022
Merged

Add test function with EVM circuit stats#616
ed255 merged 3 commits into
mainfrom
feature/evm-stats

Conversation

@ed255
Copy link
Copy Markdown
Contributor

@ed255 ed255 commented Jul 12, 2022

This is a little utility (in the form of a test function) that prints to stdout a table with all the implemented states and their responsible opcodes with the following stats:

  • height: number of rows used by the execution state
  • gas: gas value used for the opcode execution
  • height/gas: ratio between circuit cost and gas cost

The idea of this utility is to quickly check which are the worst case opcodes in terms of rows VS gas cost.

Here's the current table:

state opcode h g h/g
STOP STOP 2 0 inf
ADD_SUB ADD 5 3 1.667
ADD_SUB SUB 5 3 1.667
MUL_DIV_MOD MUL 8 5 1.600
MUL_DIV_MOD DIV 8 5 1.600
MUL_DIV_MOD MOD 8 5 1.600
SDIV_SMOD SDIV 19 5 3.800
SDIV_SMOD SMOD 19 5 3.800
ADDMOD ADDMOD 17 8 2.125
MULMOD MULMOD 20 8 2.500
EXP EXP 4 60 0.067
SIGNEXTEND SIGNEXTEND 4 5 0.800
CMP LT 5 3 1.667
CMP GT 5 3 1.667
CMP EQ 5 3 1.667
SCMP SLT 5 3 1.667
SCMP SGT 5 3 1.667
ISZERO ISZERO 2 3 0.667
BITWISE AND 5 3 1.667
BITWISE OR 5 3 1.667
BITWISE XOR 5 3 1.667
NOT NOT 5 3 1.667
BYTE BYTE 3 3 1.000
SHL SHL 4 3 1.333
SHR SHR 7 3 2.333
SAR SAR 4 3 1.333
SHA3 SHA3 4 57 0.070
ADDRESS ADDRESS 2 2 1.000
BALANCE BALANCE 3 2600 0.001
ORIGIN ORIGIN 2 2 1.000
CALLER CALLER 2 2 1.000
CALLVALUE CALLVALUE 2 2 1.000
CALLDATALOAD CALLDATALOAD 9 3 3.000
CALLDATASIZE CALLDATASIZE 2 2 1.000
CALLDATACOPY CALLDATACOPY 3 21 0.143
CODESIZE CODESIZE 2 2 1.000
CODECOPY CODECOPY 3 21 0.143
GASPRICE GASPRICE 2 2 1.000
EXTCODESIZE EXTCODESIZE 3 2600 0.001
EXTCODECOPY EXTCODECOPY 6 2612 0.002
RETURNDATASIZE RETURNDATASIZE 2 2 1.000
RETURNDATACOPY RETURNDATACOPY 4 21 0.190
EXTCODEHASH EXTCODEHASH 2 2600 0.001
BLOCKHASH BLOCKHASH 3 20 0.150
BLOCKCTXU64 TIMESTAMP 2 2 1.000
BLOCKCTXU64 NUMBER 2 2 1.000
BLOCKCTXU64 GASLIMIT 2 2 1.000
BLOCKCTXU160 COINBASE 2 2 1.000
BLOCKCTXU256 DIFFICULTY 2 2 1.000
BLOCKCTXU256 BASEFEE 2 2 1.000
CHAINID CHAINID 2 2 1.000
SELFBALANCE SELFBALANCE 2 5 0.400
POP POP 2 2 1.000
MEMORY MLOAD 5 15 0.333
MEMORY MSTORE 5 15 0.333
MEMORY MSTORE8 5 12 0.417
SLOAD SLOAD 2 2100 0.001
SSTORE SSTORE 3 22100 0.000
JUMP JUMP 2 8 0.250
JUMPI JUMPI 2 10 0.200
PC PC 2 2 1.000
MSIZE MSIZE 2 2 1.000
GAS GAS 2 2 1.000
JUMPDEST JUMPDEST 2 1 2.000
PUSH PUSH1 9 3 3.000
PUSH PUSH2 9 3 3.000
PUSH PUSH3 9 3 3.000
PUSH PUSH4 9 3 3.000
PUSH PUSH5 9 3 3.000
PUSH PUSH6 9 3 3.000
PUSH PUSH7 9 3 3.000
PUSH PUSH8 9 3 3.000
PUSH PUSH9 9 3 3.000
PUSH PUSH10 9 3 3.000
PUSH PUSH11 9 3 3.000
PUSH PUSH12 9 3 3.000
PUSH PUSH13 9 3 3.000
PUSH PUSH14 9 3 3.000
PUSH PUSH15 9 3 3.000
PUSH PUSH16 9 3 3.000
PUSH PUSH17 9 3 3.000
PUSH PUSH18 9 3 3.000
PUSH PUSH19 9 3 3.000
PUSH PUSH20 9 3 3.000
PUSH PUSH21 9 3 3.000
PUSH PUSH22 9 3 3.000
PUSH PUSH23 9 3 3.000
PUSH PUSH24 9 3 3.000
PUSH PUSH25 9 3 3.000
PUSH PUSH26 9 3 3.000
PUSH PUSH27 9 3 3.000
PUSH PUSH28 9 3 3.000
PUSH PUSH29 9 3 3.000
PUSH PUSH30 9 3 3.000
PUSH PUSH31 9 3 3.000
PUSH PUSH32 9 3 3.000
DUP DUP1 2 3 0.667
DUP DUP2 2 3 0.667
DUP DUP3 2 3 0.667
DUP DUP4 2 3 0.667
DUP DUP5 2 3 0.667
DUP DUP6 2 3 0.667
DUP DUP7 2 3 0.667
DUP DUP8 2 3 0.667
DUP DUP9 2 3 0.667
DUP DUP10 2 3 0.667
DUP DUP11 2 3 0.667
DUP DUP12 2 3 0.667
DUP DUP13 2 3 0.667
DUP DUP14 2 3 0.667
DUP DUP15 2 3 0.667
DUP DUP16 2 3 0.667
SWAP SWAP1 2 3 0.667
SWAP SWAP2 2 3 0.667
SWAP SWAP3 2 3 0.667
SWAP SWAP4 2 3 0.667
SWAP SWAP5 2 3 0.667
SWAP SWAP6 2 3 0.667
SWAP SWAP7 2 3 0.667
SWAP SWAP8 2 3 0.667
SWAP SWAP9 2 3 0.667
SWAP SWAP10 2 3 0.667
SWAP SWAP11 2 3 0.667
SWAP SWAP12 2 3 0.667
SWAP SWAP13 2 3 0.667
SWAP SWAP14 2 3 0.667
SWAP SWAP15 2 3 0.667
SWAP SWAP16 2 3 0.667
LOG LOG0 3 902 0.003
LOG LOG1 3 1277 0.002
LOG LOG2 3 1652 0.002
LOG LOG3 3 2027 0.001
LOG LOG4 3 2402 0.001
CREATE CREATE 6 32012 0.000
CALL CALL 13 41800 0.000
CALLCODE CALLCODE 11 16800 0.001
RETURN RETURN 2 15 0.133
DELEGATECALL DELEGATECALL 10 2689 0.004
CREATE2 CREATE2 7 32024 0.000
STATICCALL STATICCALL 10 2689 0.004
SELFDESTRUCT SELFDESTRUCT 2 32600 0.000

@github-actions github-actions Bot added the crate-zkevm-circuits Issues related to the zkevm-circuits workspace member label Jul 12, 2022
@ed255 ed255 force-pushed the feature/evm-stats branch 2 times, most recently from 43beb85 to 342bb6b Compare July 12, 2022 09:24
Comment thread zkevm-circuits/src/evm_circuit.rs
@ed255 ed255 force-pushed the feature/evm-stats branch from 342bb6b to 5be7d5a Compare July 13, 2022 09:43
Copy link
Copy Markdown
Collaborator

@DreamWuGit DreamWuGit left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

LGTM !!

@ed255 ed255 requested a review from ChihChengLiang July 15, 2022 14:26
Copy link
Copy Markdown
Collaborator

@ChihChengLiang ChihChengLiang left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

LGTM. Great script!

Comment thread zkevm-circuits/src/evm_circuit.rs Outdated
ed255 and others added 2 commits July 21, 2022 15:17
Co-authored-by: Chih Cheng Liang <chihchengliang@gmail.com>
@ed255 ed255 force-pushed the feature/evm-stats branch from e8ee21e to 945f697 Compare July 21, 2022 13:17
@ed255 ed255 merged commit 46dd697 into main Jul 22, 2022
@ChihChengLiang
Copy link
Copy Markdown
Collaborator

@ed255 The row listed in @han0110's table is 34 access/3 gas.
But the table listed by this PR is 5 rows/15 gas = 0.3333.
Do we know what causes the difference?

@han0110
Copy link
Copy Markdown
Contributor

han0110 commented Jul 22, 2022

34 access/3 gas goes to State circuit, the table added in this PR is for EVM circuit, so that's why it's so different (so actually after Keccak, State circuit would be the next bottleneck in regard to gas capacity without satisfied solution for now.)

@CPerezz CPerezz deleted the feature/evm-stats branch November 30, 2022 11:59
jonathanpwang pushed a commit to axiom-crypto/zkevm-circuits that referenced this pull request Aug 1, 2023
* add MemoryWordAddress gadget and todos

* update buss mapping MemoryOp with word type value

* update mload/mstore with memory word

* fix mload buss mapping test

* add evm circuit with new memory word type and fix mstore circuit test pass

* fix mload&mstor8 circuit

* udpate error invalid creation code circuit

* update calldataload buss mapping

* fix calldataload buss map test

* update calldataload circuit&test pass

* update log* sha3 calldatacopy buss mapping tests

* add state circuit constraint for memory word tag

* copy circuit buss mapping add mask field into copy event

* copy circuit add value_wrod_rlc

* add word_index into copy table and align calldata to word

* fix word_index lt gate issue and move some columns

* fix memor word lookup & rw counter

* calldatacopy fix evm circuit root test

* fix calldatacopy evm circuit internal test, memory offset overflow fail

* fix codecopy bussmapping and copy circuit test pass

* update codecopy evm circuit

* update exrcodecopy and gen_copy_steps_for_log

* try log with byte lookup and refactor

* update log* with log byte to word and disable rows[0].addr + 1 == rows[2].addr

* update sha3 copy circuit & evm circuit

* Fix test case `test_precompiled_call` in CALL OP. (privacy-ethereum#485)

* fix log with non zero start slot and comment multi buss mapping tests

* add create/return test into copy circuit

* update return non root non create to generate diff r/w bytes

* reading with writing word one by one

* [feat] returndatacopy implemented (privacy-ethereum#506)

* init impl of returndatacopy

* add aux_bytes to CopyEvent

* add read_steps and write_steps and rlc_acc_read and rlc_acc_write

* add assert

* using real dst word value

* rlc_acc_read/write only counts when not padding

* fix overflow

* fix typo

* add read_word

* fix rwc

* write after read one by one

* add test

* fix constraint

* fix typo

* update test

* fix lookup

* fix rw_increase

* update return gadget

* fix root create in return tests

* fix returndatacopy, add calldatacopy non root

* fix trace test with last_callee_memory

* fix calldatacopy non root

* update create pass for non persistent etc.

* fix calldatacopy test

* add constrain rlc_acc_read == rlc_acc_write

* cargo fmt

---------

Co-authored-by: Dream Wu <wwuwwei@126.com>

* some fix

* enable and remove state circuit tods

* recover test for MemoryWordOp

* recover test for TxLogOp

* mask is boolean

* word_index [0--32] increase by 1

* fix copy circuit degree increase issue

* update constraint for read=write vaule for non memory to memory

* enable addr change of copy circuit and rename is_word_continue

* Apply suggestions from code review

Co-authored-by: naure <naure@users.noreply.github.com>

* fix not enough row

* memory_opt_opcodes: constraints for MLOAD/MSTORE/MSTORE8/CALLDATALOAD (privacy-ethereum#533)

* memory_opt_opcodes: constraints for MLOAD/MSTORE/MSTORE8

* memory_opt_opcodes: refactor all memory alignment logic into a gadget

* memory_opt_opcodes: connect calldata and memory values

* memory_opt_opcodes: switch to BE-order to match current copy circuit

---------

Co-authored-by: Aurélien Nicolas <info@nau.re>

* fix codecopy & log test failures

* fix return/create test failures

* fix returndatacopy& insufficient balance in create

* fix calldatacopy and some clippy

* add constraint for rw counter (privacy-ethereum#532)

* fix tx_log table issue

* constraint rw_counter and rw_inc_left

* constraint rw_counter

* simplify constraint

* add column is_mem_to_mem to reduce the degree

* replace other usage of memory to memory tag query

* fix value_acc

* fix merge

* remove is_mem_to_mem

* fix build

* apply review

* fix merge

* restore addr contraint

* Fix/callop memory (privacy-ethereum#555)

* add gen_copy_steps for callop precompile

* calc rlc from memory word

* add rws count

* fix lookup

* change to memory to memory

* [memory_opt] fix failed precompile test (privacy-ethereum#547)

* Replace `call_id` with `caller_id` for copy steps of input bytes.

* Set `max_copy_rows` to 1100 in precompile test.

* update tests

---------

Co-authored-by: Steven Gu <asongala@163.com>

* fix degree issue

* using real length in copy table lookup (privacy-ethereum#565)

* add real_length

* add constraint

* fmt

* remove bytes_length_word

* fix comment

* fix clippy

* replace print to trace

* do not need to suppress theses

* fix import

* fix other crates

* fix incomplete comment

* Add condition for input, output and return bytes for precompile (as bus-mapping). (privacy-ethereum#571)

* Fix to calculate copy length as the minimum value (as bus-mapping). (privacy-ethereum#573)

* remove Memory related codes (privacy-ethereum#574)

* remove Memory related

* update inline doc

* remove memory constraints

* fix inline doc

* remove outdated test

* Memory opt update (privacy-ethereum#541)

* memory_opt_opcodes: constraints for MLOAD/MSTORE/MSTORE8

* memory_opt_opcodes: refactor all memory alignment logic into a gadget

* memory_opt_opcodes: connect calldata and memory values

* memory_opt_opcodes: switch to BE-order to match current copy circuit

* memory_opt_update: add memory value_prev to the RW API

* memory_opt_update: track value_prev for memory writes

* memory_opt_update: check value_prev of memory ops

* memory_opt_update: common lookup with mstore8

* memory_opt_update: add column word_prev in copy circuit

* memory_opt_update: find value_prev in memory_write_word

* memory_opt_update: move common logic into read_memory_word

* memory_opt_update: fix tests

* memory_opt_update: move logic to a common read_memory_caller function

* memory_opt_update: fix, simplify, optimize RETURN copy

* memory_opt_update: refactor calldatacopy

* memory_opt_update: calldatacopy with value prev

* memory_opt_update: revert new_read name

* memory_opt_update: returndatacopy with value prev

* memory_opt_update: common function align_range with correct edge cases

* memory_opt_update: optimize codecopy

* memory_opt_update: optimize log copy

* memory_opt_update: fix LOG off-by-one word count

* memory_opt_update: prepare callop write_memory_words

* memory_opt_update: remove unnecessary stack_index

* memory_opt_update: read actual log data

* fix memory_word_value to memory_word_pair in callop

* memory_opt_update: fix indexes in circuit_row

* memory_opt_update: take rwc from bus-mapping instead of outdated calculations

* memory_opt_update: remove redundant RWC calculations

* memory_opt_update: remove redundant RWC calculations

* memory_opt_update: remove redundant RWC calculations

* memory_opt_update: remove redundant RWC calculations

* memory_opt_update: track copy RWs for check_rw_lookups

* memory_opt_update: fix calldatacopy source length

* add prev bytes and refactor copy event  (privacy-ethereum#569)

* refactor copy event bytes

* update to use CopyBytes sturcture

* make calldatacopy with pre_bytes & remove bytes_read_prev

* set prev_write_bytes in copy table and pass calldatacopy root

* update code copy with pre bytes

---------

Co-authored-by: Aurélien Nicolas <info@nau.re>

* fix returndatacopy and state test (privacy-ethereum#582)

* fix_returndatacopy and state test

* update state_circuit_simple_2 test

* use new_write

* memory_opt_update: fix copy_circuit_invalid_tx_log with a more flexible test

* memory_opt_update: remove outdated constraint on log

* Revert "memory_opt_update: in log, use extend_for_range"

This reverts commit fb5ae3e.

* fix state circuit: value_prev column is initial_value for first access for (ext)codecopy (privacy-ethereum#583)

* fix state circuit: value_prev column is initial_value for first access

* remove unused comment

* fix_statetest_extcodecopy: simplify copy_start

---------

Co-authored-by: Aurélien Nicolas <info@nau.re>

* memory_opt_update: in log, use extend_for_range

* memory_opt_circuit: constrain is_tx_log

* memory_opt_update: fix check_rw_lookup again

* fix precompile prev bytes (privacy-ethereum#590)

* fix prev_bytes

* fix memory word count

---------

Co-authored-by: DreamWuGit <wwuwwei@126.com>

---------

Co-authored-by: Aurélien Nicolas <info@nau.re>
Co-authored-by: Dream Wu <wwuwwei@126.com>
Co-authored-by: Akase Cho <lightsing@users.noreply.github.com>

* refactor memory_write_word_prev_bytes to memory_write_word

* fix clippy

* misc updates

* fix constraint

* fix merge

* fix fmt & remove unused comment

* codecopy buss mapping memory word test

* update sha3 test and mark get_addr_shift_slot deprecated

* better to use usize in addresses

* refactor to use Memory::align_range

* fix clippy

* use Memory::align_range for return_revert

* remove unnecessary cast

* add a cfg

* rename MemoryWord back to Memory

* rename MemoryWord back to Memory

* disable memory tracing by default

* fix some typos

* use &memory_updated

* include copy_rwc_inc in rw_offset

* refactor helper get_copy_bytes

* not a soundness problem anymore

* apply review

* refactor write_chunks&write_chunk_for_copy_step

* Memory opt refactor (privacy-ethereum#603)

* initial refactor

* fix code_copy

* fix

* fix

* fix

* remove debug print

* remove debug print

* fix return/create

* fix compile

* add memory_range

* use word_count

* cargo fmt && clippy

* add missing docs

* remove gen_copy_steps

* fmt

* refactor for all copy bytes using rlc_acc equality (privacy-ethereum#604)

Co-authored-by: naure <naure@users.noreply.github.com>

* fix return_revert

* copy_simplify_addr: always increment the address (privacy-ethereum#609)

* copy_simplify_addr: always increment the address

* copy_simplify_addr: derive addr_slot at once at the end

* copy_simplify_addr: control by front mask + return value prev

* copy_simplify_addr: replace addr_slot by an expression

* copy_simplify_addr: adjust limits for CREATE tests

---------

Co-authored-by: Aurélien Nicolas <info@nau.re>

* fix begin_tx copy event

* fix clippy

* fix scroll feature test failure

* Copy: fix conditions (privacy-ethereum#616)

* memory_opt_counters: replace incorrect non_pad_non_mask with is_continue

* memory_opt_counters: constraints on front_mask

* memory_opt_continue: remove redundant conditation

---------

Co-authored-by: Aurélien Nicolas <info@nau.re>
Co-authored-by: DreamWuGit <wwuwwei@126.com>

* memory_opt_word_end: replace broken LtChip with IsEqualChip (privacy-ethereum#617)

* memory_opt_counters: replace incorrect non_pad_non_mask with is_continue

* memory_opt_counters: constraints on front_mask

* memory_opt_word_end: replace broken LtChip with IsEqualChip

* memory_opt_continue: remove redundant conditation

---------

Co-authored-by: Aurélien Nicolas <info@nau.re>
Co-authored-by: DreamWuGit <wwuwwei@126.com>

* memory_opt_pad: replace LtChip with a simple column (privacy-ethereum#620)

Co-authored-by: Aurélien Nicolas <info@nau.re>

* memory_opt: Ensure that the word operation completes.

* memory_opt_rlc: simplify rlc_acc check (privacy-ethereum#621)

*replace LtChip with a simple column

* memory_opt_rlc: simplify rlc_acc check

* memory_opt_rlc: accumulate RLC or copy based on mask

* memory_opt_rlc: simplify RLC with a single column

* memory_opt_rlc: use value_acc for read/write equality

* memory_opt_rlc: enforce RLC initial value

---------

Co-authored-by: Aurélien Nicolas <info@nau.re>

* word_rlc: introduce value_prev in copy circuit (privacy-ethereum#626)

* word_rlc: introduce value_prev in copy circuit

* memory_opt_word_rlc: verify word RLCs

---------

Co-authored-by: Aurélien Nicolas <info@nau.re>

* memory_opt_length: constrain length and mask (privacy-ethereum#628)

* memory_opt_length: track both source and destination lengths. Simplify constraints

* memory_opt_length: constrain the shape of the mask

---------

Co-authored-by: Aurélien Nicolas <info@nau.re>

* memory_opt_rwc: fix and simplify RW counter logic (privacy-ethereum#631)

* memory_opt_rwc: fix and simplify RW counter logic

* memory_opt_rwc: simplify CopyEvent rw functions

---------

Co-authored-by: Aurélien Nicolas <info@nau.re>

* memory_opt: Prevent an event from spilling into the disabled rows.

* Delete `memory.clone` in invalid-creation-code error. (privacy-ethereum#632)

* memory_opt: value column is in the first phase

* memory_opt_check_align: require aligned memory addresses in State (privacy-ethereum#634)

* memory_opt_check_align: require aligned memory addresses in State

* memory_opt_check_align: tests

---------

Co-authored-by: Aurélien Nicolas <info@nau.re>

* Copy: remove LtChip (privacy-ethereum#635)

* memory_opt_rm_ltchip: replace LessThan with IsEqual

* memory_opt_rm_ltchip: support other rotations in IsEqualChip

* memory_opt_rm_ltchip: constrain is_pad from is_src_end_next

* memory_opt_rm_ltchip: remove the old chip

* memory_opt_rm_ltchip: add doc and assertion

---------

Co-authored-by: Aurélien Nicolas <info@nau.re>

* memory_opt_readability: give a name to Rotations (privacy-ethereum#636)

Co-authored-by: Aurélien Nicolas <info@nau.re>

* memory_opt: organize variables and comments

* Copy Gadgets (privacy-ethereum#637)

* memory_opt_gadgets: move code into a function

* memory_opt_gadgets: move code into constrain_word_rlc()

* memory_opt_gadgets: move code into constrain_value_rlc()

* memory_opt_gadgets: move code into constrain_event_rlc_acc()

* memory_opt_gadgets: constrain_bytes_left

* memory_opt_gadgets: doc

* memory_opt_gadgets: move code into constrain_rw_counter. rustfmt works again!

* memory_opt_gadgets: constrain_forward_parameters and constrain_address

* memory_opt_gadgets: move code to constrain_mask()

* memory_opt_gadgets: move code to constrain_is_pad()

* memory_opt_gadgets: move code to constrain_non_pad_non_mask()

* memory_opt_gadgets: move code to constrain_first_last

* memory_opt_gadgets: constrain_masked_value and constrain_must_terminate

* memory_opt_gadgets: reorg is_pad and is_last

* memory_opt_gadgets: reorder gadgets to match the circuit

* memory_opt_gadgets: move code into constrain_tag. Done!

---------

Co-authored-by: Aurélien Nicolas <info@nau.re>

* memory_opt: remove unnecessary is_event column

* memory_opt: remove duplicate code in CopyTable::assignments (privacy-ethereum#638)

Co-authored-by: Aurélien Nicolas <info@nau.re>

* memory_opt: hide details of extend_at_least

* Avoid whole memory clone when generating copy steps (privacy-ethereum#629)

* Avoid whole memory clone for CODECOPY and EXTCODECOPY.

* Update

* Fix to extend memory as range(begin_slot, full_length), and update `src_addr_end`.

* Delete unused function `write_memory_words` in callop.

* Delete memory clone in callop.

* Fix lint.

* Delete memory clone in calldatacopy.

* Update returndatacopy, and extract to a common function.

* Fix lint.

* Update bytecode copy.

* Small fix.

* Fix failed testool cases for memory-copy. (privacy-ethereum#642)

---------

Co-authored-by: Steven <asongala@163.com>
Co-authored-by: Akase Cho <lightsing@users.noreply.github.com>
Co-authored-by: lightsing <light.tsing@gmail.com>
Co-authored-by: naure <naure@users.noreply.github.com>
Co-authored-by: Aurélien Nicolas <info@nau.re>
Co-authored-by: Zhang Zhuo <mycinbrin@gmail.com>
Sign up for free to subscribe to this conversation on GitHub. Already have an account? Sign in.

Labels

crate-zkevm-circuits Issues related to the zkevm-circuits workspace member

Projects

None yet

Development

Successfully merging this pull request may close these issues.

4 participants