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

Make gadgets to handle an execution state instead of an opcode per step #196

Merged
Merged
Show file tree
Hide file tree
Changes from 32 commits
Commits
Show all changes
37 commits
Select commit Hold shift + click to select a range
88dda23
feat(bus-mapping): implment ToLittleEndian for U256
han0110 Nov 20, 2021
afb640f
refactor: refactor EvmCircuit and all *Gadgets with ConstraintBuilder…
han0110 Dec 2, 2021
024f01e
feat: add execution gadget name and constraint names for easier debug…
han0110 Dec 2, 2021
b049919
feat: refactor MemoryGadget with ConstraintBuilder
han0110 Nov 21, 2021
ed862b2
feat: refactor all with SameContextGadget for opcode and gas_left check
han0110 Dec 2, 2021
20eef38
feat: add ErrorOOGPureMemoryGadget as original MemoryGadget's OOG han…
han0110 Nov 23, 2021
fdb7409
feat: make struct in bus_mapping_tmp be like the being implemented on…
han0110 Dec 2, 2021
889de05
feat: make EvmCircuit pub for further benchs and examples usage
han0110 Nov 24, 2021
7c3add3
feat: add bitwise gadgets back as a single AndGadget
han0110 Dec 2, 2021
d472698
feat: assign transaction context
han0110 Nov 24, 2021
b268c54
feat: test AND, OR, XOR in the same trace to further shorten testing …
han0110 Nov 24, 2021
beaef7a
feat: fix comment of ADD, add comment for PUSH
han0110 Nov 25, 2021
6d486fa
chore: remove Range17 table
han0110 Dec 2, 2021
1bc3c31
chore: add rw_lookup and rw_lookup_at for all read/write lookup
han0110 Nov 27, 2021
701faed
feat: refactor util and extend AddWordsGadget to add N words
han0110 Dec 2, 2021
e5ee1c6
feat: adopt JumpGadget and JumpiGadget from upstream with new interface
han0110 Dec 2, 2021
37bcf2c
fix: add missing execution result ErrorOutOfGasCodeStore
han0110 Dec 1, 2021
284c1fc
chore: cap jump and jumpi's testing time as k upto 11
han0110 Dec 1, 2021
c536f11
fix: pass test after rebasing
han0110 Dec 2, 2021
b4c7c59
chore: remove moved files
han0110 Dec 3, 2021
22fd394
feat: add number of cells used for StepState into param as constant
han0110 Dec 3, 2021
426786e
chore: rename ExecutionResult to ExecutionState
han0110 Dec 3, 2021
c87c747
chore: rename ExecutionResult to ExecutionState
han0110 Dec 3, 2021
e91cb04
chore: rename StateTransition to StepStateTransition
han0110 Dec 3, 2021
57b71f2
chore: rename q_execution_state to execution_state_selector
han0110 Dec 3, 2021
dba3630
chore: renaming ExecutionState BITWISE, CMP, SCMP, MEMORY
han0110 Dec 3, 2021
640757f
fix: fix name and_gadget to bitwise_gadget
han0110 Dec 3, 2021
646bc28
chore: calculate rotation_offset from state instead of hardcoding
han0110 Dec 4, 2021
4229f84
chore: add comment on opcode_source and update namings
han0110 Dec 4, 2021
3921da7
fix: use OpcodeId for checking whether an u8 is PUSH*
han0110 Dec 7, 2021
665b9d1
fix: remove incorrect comments
han0110 Dec 7, 2021
98f87ba
fix: add more docs
han0110 Dec 7, 2021
0b68140
fix: improve comment
han0110 Dec 8, 2021
13efaec
chore: init array with same value F::zero() and length
han0110 Dec 8, 2021
8186ca0
fix: use *_lookup_with_counter instead of *_lookup_inner
han0110 Dec 9, 2021
3c57d83
feat: add docs on Lookup and its variants
han0110 Dec 9, 2021
9cc8bc7
fix: make MemoryExpansionGadget's expression method more straightforward
han0110 Dec 14, 2021
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
9 changes: 9 additions & 0 deletions bus-mapping/src/eth_types.rs
Original file line number Diff line number Diff line change
Expand Up @@ -93,6 +93,15 @@ impl ToBigEndian for U256 {
}
}

impl ToLittleEndian for U256 {
/// Encode the value as byte array in little endian.
fn to_le_bytes(&self) -> [u8; 32] {
let mut bytes = [0u8; 32];
self.to_little_endian(&mut bytes);
bytes
}
}

impl<F: FieldExt> ToScalar<F> for U256 {
fn to_scalar(&self) -> Option<F> {
let mut bytes = [0u8; 32];
Expand Down
6 changes: 6 additions & 0 deletions bus-mapping/src/evm.rs
Original file line number Diff line number Diff line change
Expand Up @@ -121,6 +121,12 @@ impl GasCost {
pub const SLOW: Self = Self(10);
/// Constant cost for ext step
pub const EXT: Self = Self(20);
/// Constant cost for SHA3
pub const SHA3: Self = Self(30);
/// Constant cost for SELFDESTRUCT
pub const SELFDESTRUCT: Self = Self(5000);
/// Constant cost for CREATE
pub const CREATE: Self = Self(32000);
/// Constant cost for every additional word when expanding memory
pub const MEMORY: Self = Self(3);
/// Constant cost for a cold SLOAD
Expand Down
42 changes: 0 additions & 42 deletions bus-mapping/src/evm/gas.rs

This file was deleted.

151 changes: 150 additions & 1 deletion bus-mapping/src/evm/opcodes/ids.rs
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
use crate::error::Error;
use crate::{error::Error, evm::GasCost};
use core::fmt::Debug;
use lazy_static::lazy_static;
use regex::Regex;
Expand Down Expand Up @@ -486,6 +486,155 @@ impl OpcodeId {
pub const fn as_u64(&self) -> u64 {
self.as_u8() as u64
}

/// Returns the constant gas cost of `OpcodeId`
pub const fn constant_gas_cost(&self) -> GasCost {
match self {
OpcodeId::STOP => GasCost::ZERO,
OpcodeId::ADD => GasCost::FASTEST,
OpcodeId::MUL => GasCost::FAST,
OpcodeId::SUB => GasCost::FASTEST,
OpcodeId::DIV => GasCost::FAST,
OpcodeId::SDIV => GasCost::FAST,
OpcodeId::MOD => GasCost::FAST,
OpcodeId::SMOD => GasCost::FAST,
OpcodeId::ADDMOD => GasCost::MID,
OpcodeId::MULMOD => GasCost::MID,
OpcodeId::EXP => GasCost::ZERO,
OpcodeId::SIGNEXTEND => GasCost::FAST,
OpcodeId::LT => GasCost::FASTEST,
OpcodeId::GT => GasCost::FASTEST,
OpcodeId::SLT => GasCost::FASTEST,
OpcodeId::SGT => GasCost::FASTEST,
OpcodeId::EQ => GasCost::FASTEST,
OpcodeId::ISZERO => GasCost::FASTEST,
OpcodeId::AND => GasCost::FASTEST,
OpcodeId::OR => GasCost::FASTEST,
OpcodeId::XOR => GasCost::FASTEST,
OpcodeId::NOT => GasCost::FASTEST,
OpcodeId::BYTE => GasCost::FASTEST,
OpcodeId::SHL => GasCost::FASTEST,
OpcodeId::SHR => GasCost::FASTEST,
OpcodeId::SAR => GasCost::FASTEST,
OpcodeId::SHA3 => GasCost::SHA3,
OpcodeId::ADDRESS => GasCost::QUICK,
OpcodeId::BALANCE => GasCost::WARM_STORAGE_READ_COST,
OpcodeId::ORIGIN => GasCost::QUICK,
OpcodeId::CALLER => GasCost::QUICK,
OpcodeId::CALLVALUE => GasCost::QUICK,
OpcodeId::CALLDATALOAD => GasCost::FASTEST,
OpcodeId::CALLDATASIZE => GasCost::QUICK,
OpcodeId::CALLDATACOPY => GasCost::FASTEST,
OpcodeId::CODESIZE => GasCost::QUICK,
OpcodeId::CODECOPY => GasCost::FASTEST,
OpcodeId::GASPRICE => GasCost::QUICK,
OpcodeId::EXTCODESIZE => GasCost::WARM_STORAGE_READ_COST,
OpcodeId::EXTCODECOPY => GasCost::WARM_STORAGE_READ_COST,
OpcodeId::RETURNDATASIZE => GasCost::QUICK,
OpcodeId::RETURNDATACOPY => GasCost::FASTEST,
OpcodeId::EXTCODEHASH => GasCost::WARM_STORAGE_READ_COST,
OpcodeId::BLOCKHASH => GasCost::EXT,
OpcodeId::COINBASE => GasCost::QUICK,
OpcodeId::TIMESTAMP => GasCost::QUICK,
OpcodeId::NUMBER => GasCost::QUICK,
OpcodeId::DIFFICULTY => GasCost::QUICK,
OpcodeId::GASLIMIT => GasCost::QUICK,
OpcodeId::CHAINID => GasCost::QUICK,
OpcodeId::SELFBALANCE => GasCost::FAST,
OpcodeId::BASEFEE => GasCost::QUICK,
OpcodeId::POP => GasCost::QUICK,
OpcodeId::MLOAD => GasCost::FASTEST,
OpcodeId::MSTORE => GasCost::FASTEST,
OpcodeId::MSTORE8 => GasCost::FASTEST,
OpcodeId::SLOAD => GasCost::ZERO,
OpcodeId::SSTORE => GasCost::ZERO,
OpcodeId::JUMP => GasCost::MID,
OpcodeId::JUMPI => GasCost::SLOW,
OpcodeId::PC => GasCost::QUICK,
OpcodeId::MSIZE => GasCost::QUICK,
OpcodeId::GAS => GasCost::QUICK,
OpcodeId::JUMPDEST => GasCost::ONE,
OpcodeId::PUSH1 => GasCost::FASTEST,
OpcodeId::PUSH2 => GasCost::FASTEST,
OpcodeId::PUSH3 => GasCost::FASTEST,
OpcodeId::PUSH4 => GasCost::FASTEST,
OpcodeId::PUSH5 => GasCost::FASTEST,
OpcodeId::PUSH6 => GasCost::FASTEST,
OpcodeId::PUSH7 => GasCost::FASTEST,
OpcodeId::PUSH8 => GasCost::FASTEST,
OpcodeId::PUSH9 => GasCost::FASTEST,
OpcodeId::PUSH10 => GasCost::FASTEST,
OpcodeId::PUSH11 => GasCost::FASTEST,
OpcodeId::PUSH12 => GasCost::FASTEST,
OpcodeId::PUSH13 => GasCost::FASTEST,
OpcodeId::PUSH14 => GasCost::FASTEST,
OpcodeId::PUSH15 => GasCost::FASTEST,
OpcodeId::PUSH16 => GasCost::FASTEST,
OpcodeId::PUSH17 => GasCost::FASTEST,
OpcodeId::PUSH18 => GasCost::FASTEST,
OpcodeId::PUSH19 => GasCost::FASTEST,
OpcodeId::PUSH20 => GasCost::FASTEST,
OpcodeId::PUSH21 => GasCost::FASTEST,
OpcodeId::PUSH22 => GasCost::FASTEST,
OpcodeId::PUSH23 => GasCost::FASTEST,
OpcodeId::PUSH24 => GasCost::FASTEST,
OpcodeId::PUSH25 => GasCost::FASTEST,
OpcodeId::PUSH26 => GasCost::FASTEST,
OpcodeId::PUSH27 => GasCost::FASTEST,
OpcodeId::PUSH28 => GasCost::FASTEST,
OpcodeId::PUSH29 => GasCost::FASTEST,
OpcodeId::PUSH30 => GasCost::FASTEST,
OpcodeId::PUSH31 => GasCost::FASTEST,
OpcodeId::PUSH32 => GasCost::FASTEST,
OpcodeId::DUP1 => GasCost::FASTEST,
OpcodeId::DUP2 => GasCost::FASTEST,
OpcodeId::DUP3 => GasCost::FASTEST,
OpcodeId::DUP4 => GasCost::FASTEST,
OpcodeId::DUP5 => GasCost::FASTEST,
OpcodeId::DUP6 => GasCost::FASTEST,
OpcodeId::DUP7 => GasCost::FASTEST,
OpcodeId::DUP8 => GasCost::FASTEST,
OpcodeId::DUP9 => GasCost::FASTEST,
OpcodeId::DUP10 => GasCost::FASTEST,
OpcodeId::DUP11 => GasCost::FASTEST,
OpcodeId::DUP12 => GasCost::FASTEST,
OpcodeId::DUP13 => GasCost::FASTEST,
OpcodeId::DUP14 => GasCost::FASTEST,
OpcodeId::DUP15 => GasCost::FASTEST,
OpcodeId::DUP16 => GasCost::FASTEST,
OpcodeId::SWAP1 => GasCost::FASTEST,
OpcodeId::SWAP2 => GasCost::FASTEST,
OpcodeId::SWAP3 => GasCost::FASTEST,
OpcodeId::SWAP4 => GasCost::FASTEST,
OpcodeId::SWAP5 => GasCost::FASTEST,
OpcodeId::SWAP6 => GasCost::FASTEST,
OpcodeId::SWAP7 => GasCost::FASTEST,
OpcodeId::SWAP8 => GasCost::FASTEST,
OpcodeId::SWAP9 => GasCost::FASTEST,
OpcodeId::SWAP10 => GasCost::FASTEST,
OpcodeId::SWAP11 => GasCost::FASTEST,
OpcodeId::SWAP12 => GasCost::FASTEST,
OpcodeId::SWAP13 => GasCost::FASTEST,
OpcodeId::SWAP14 => GasCost::FASTEST,
OpcodeId::SWAP15 => GasCost::FASTEST,
OpcodeId::SWAP16 => GasCost::FASTEST,
OpcodeId::LOG0 => GasCost::ZERO,
OpcodeId::LOG1 => GasCost::ZERO,
OpcodeId::LOG2 => GasCost::ZERO,
OpcodeId::LOG3 => GasCost::ZERO,
OpcodeId::LOG4 => GasCost::ZERO,
OpcodeId::CREATE => GasCost::CREATE,
OpcodeId::CALL => GasCost::WARM_STORAGE_READ_COST,
OpcodeId::CALLCODE => GasCost::WARM_STORAGE_READ_COST,
OpcodeId::RETURN => GasCost::ZERO,
OpcodeId::DELEGATECALL => GasCost::WARM_STORAGE_READ_COST,
OpcodeId::CREATE2 => GasCost::CREATE,
OpcodeId::STATICCALL => GasCost::WARM_STORAGE_READ_COST,
OpcodeId::REVERT => GasCost::ZERO,
OpcodeId::INVALID(_) => GasCost::ZERO,
OpcodeId::SELFDESTRUCT => GasCost::SELFDESTRUCT,
}
}
}

impl FromStr for OpcodeId {
Expand Down
2 changes: 1 addition & 1 deletion zkevm-circuits/Cargo.toml
Original file line number Diff line number Diff line change
Expand Up @@ -23,7 +23,7 @@ rand = "0.8"

[dev-dependencies]
criterion = "0.3"
num = "0.4"
rand = "0.8"

[[bench]]
name = "binary_value"
Expand Down
Loading