pub trait Operation {
    type Code: Operation<Code = Self::Code> + Into<u8>;
    type ImmediateRef: ?Sized;
    type Immediate: Borrow<Self::ImmediateRef> + BorrowMut<Self::ImmediateRef>;

    fn immediate(&self) -> Option<&Self::ImmediateRef>;
    fn immediate_mut(&mut self) -> Option<&mut Self::ImmediateRef>;
    fn into_immediate(self) -> Option<Self::Immediate>;
    fn extra_len(&self) -> usize;
    fn code(&self) -> Self::Code;
    fn mnemonic(&self) -> &str;
    fn is_jump(&self) -> bool;
    fn is_jump_target(&self) -> bool;
    fn is_exit(&self) -> bool;
    fn pops(&self) -> usize;
    fn pushes(&self) -> usize;

    fn code_byte(&self) -> u8 { ... }
}
Expand description

Trait for types that represent an EVM instruction.

Required Associated Types§

source

type Code: Operation<Code = Self::Code> + Into<u8>

The return type of Operation::code.

source

type ImmediateRef: ?Sized

The return root type of Operation::immediate_mut and Operation::immediate.

source

type Immediate: Borrow<Self::ImmediateRef> + BorrowMut<Self::ImmediateRef>

The type of the immediate argument for this operation.

Required Methods§

source

fn immediate(&self) -> Option<&Self::ImmediateRef>

Get a shared reference to the immediate argument of this operation, if one exists.

source

fn immediate_mut(&mut self) -> Option<&mut Self::ImmediateRef>

Get a mutable reference to the immediate argument of this operation, if one exists.

source

fn into_immediate(self) -> Option<Self::Immediate>

Consume this operation and return its immediate argument, if one exists.

source

fn extra_len(&self) -> usize

Length of immediate argument.

source

fn code(&self) -> Self::Code

The action (opcode) of this operation, without any immediates.

source

fn mnemonic(&self) -> &str

Human-readable name for this operation.

source

fn is_jump(&self) -> bool

Returns true if the current instruction changes the program counter (other than incrementing it.)

source

fn is_jump_target(&self) -> bool

Returns true if the current instruction is a valid destination for jumps.

source

fn is_exit(&self) -> bool

Returns true if the current instruction causes the EVM to stop executing the contract.

source

fn pops(&self) -> usize

How many stack elements this instruction pops.

source

fn pushes(&self) -> usize

How many stack elements this instruction pushes.

Provided Methods§

source

fn code_byte(&self) -> u8

The byte (opcode) that indicates this operation.

Implementors§

source§

impl Operation for Add

source§

impl Operation for AddMod

source§

impl Operation for Address

source§

impl Operation for And

source§

impl Operation for Balance

source§

impl Operation for BaseFee

source§

impl Operation for BlockHash

source§

impl Operation for Byte

source§

impl Operation for Call

source§

impl Operation for CallCode

source§

impl Operation for CallDataCopy

source§

impl Operation for CallDataLoad

source§

impl Operation for CallDataSize

source§

impl Operation for CallValue

source§

impl Operation for Caller

source§

impl Operation for ChainId

source§

impl Operation for CodeCopy

source§

impl Operation for CodeSize

source§

impl Operation for Coinbase

source§

impl Operation for Create2

source§

impl Operation for Create

source§

impl Operation for DelegateCall

source§

impl Operation for Difficulty

source§

impl Operation for Div

source§

impl Operation for Dup1

source§

impl Operation for Dup2

source§

impl Operation for Dup3

source§

impl Operation for Dup4

source§

impl Operation for Dup5

source§

impl Operation for Dup6

source§

impl Operation for Dup7

source§

impl Operation for Dup8

source§

impl Operation for Dup9

source§

impl Operation for Dup10

source§

impl Operation for Dup11

source§

impl Operation for Dup12

source§

impl Operation for Dup13

source§

impl Operation for Dup14

source§

impl Operation for Dup15

source§

impl Operation for Dup16

source§

impl Operation for Eq

source§

impl Operation for Exp

source§

impl Operation for ExtCodeCopy

source§

impl Operation for ExtCodeHash

source§

impl Operation for ExtCodeSize

source§

impl Operation for Gas

source§

impl Operation for GasLimit

source§

impl Operation for GasPrice

source§

impl Operation for GetPc

source§

impl Operation for Gt

source§

impl Operation for Invalid0c

source§

impl Operation for Invalid0d

source§

impl Operation for Invalid0e

source§

impl Operation for Invalid0f

source§

impl Operation for Invalid1e

source§

impl Operation for Invalid1f

source§

impl Operation for Invalid2a

source§

impl Operation for Invalid2b

source§

impl Operation for Invalid2c

source§

impl Operation for Invalid2d

source§

impl Operation for Invalid2e

source§

impl Operation for Invalid2f

source§

impl Operation for Invalid4a

source§

impl Operation for Invalid4b

source§

impl Operation for Invalid4c

source§

impl Operation for Invalid4d

source§

impl Operation for Invalid4e

source§

impl Operation for Invalid4f

source§

impl Operation for Invalid5c

source§

impl Operation for Invalid5d

source§

impl Operation for Invalid5e

source§

impl Operation for Invalid5f

source§

impl Operation for Invalid21

source§

impl Operation for Invalid22

source§

impl Operation for Invalid23

source§

impl Operation for Invalid24

source§

impl Operation for Invalid25

source§

impl Operation for Invalid26

source§

impl Operation for Invalid27

source§

impl Operation for Invalid28

source§

impl Operation for Invalid29

source§

impl Operation for Invalid49

source§

impl Operation for Invalid

source§

impl Operation for InvalidA5

source§

impl Operation for InvalidA6

source§

impl Operation for InvalidA7

source§

impl Operation for InvalidA8

source§

impl Operation for InvalidA9

source§

impl Operation for InvalidAa

source§

impl Operation for InvalidAb

source§

impl Operation for InvalidAc

source§

impl Operation for InvalidAd

source§

impl Operation for InvalidAe

source§

impl Operation for InvalidAf

source§

impl Operation for InvalidB0

source§

impl Operation for InvalidB1

source§

impl Operation for InvalidB2

source§

impl Operation for InvalidB3

source§

impl Operation for InvalidB4

source§

impl Operation for InvalidB5

source§

impl Operation for InvalidB6

source§

impl Operation for InvalidB7

source§

impl Operation for InvalidB8

source§

impl Operation for InvalidB9

source§

impl Operation for InvalidBa

source§

impl Operation for InvalidBb

source§

impl Operation for InvalidBc

source§

impl Operation for InvalidBd

source§

impl Operation for InvalidBe

source§

impl Operation for InvalidBf

source§

impl Operation for InvalidC0

source§

impl Operation for InvalidC1

source§

impl Operation for InvalidC2

source§

impl Operation for InvalidC3

source§

impl Operation for InvalidC4

source§

impl Operation for InvalidC5

source§

impl Operation for InvalidC6

source§

impl Operation for InvalidC7

source§

impl Operation for InvalidC8

source§

impl Operation for InvalidC9

source§

impl Operation for InvalidCa

source§

impl Operation for InvalidCb

source§

impl Operation for InvalidCc

source§

impl Operation for InvalidCd

source§

impl Operation for InvalidCe

source§

impl Operation for InvalidCf

source§

impl Operation for InvalidD0

source§

impl Operation for InvalidD1

source§

impl Operation for InvalidD2

source§

impl Operation for InvalidD3

source§

impl Operation for InvalidD4

source§

impl Operation for InvalidD5

source§

impl Operation for InvalidD6

source§

impl Operation for InvalidD7

source§

impl Operation for InvalidD8

source§

impl Operation for InvalidD9

source§

impl Operation for InvalidDa

source§

impl Operation for InvalidDb

source§

impl Operation for InvalidDc

source§

impl Operation for InvalidDd

source§

impl Operation for InvalidDe

source§

impl Operation for InvalidDf

source§

impl Operation for InvalidE0

source§

impl Operation for InvalidE1

source§

impl Operation for InvalidE2

source§

impl Operation for InvalidE3

source§

impl Operation for InvalidE4

source§

impl Operation for InvalidE5

source§

impl Operation for InvalidE6

source§

impl Operation for InvalidE7

source§

impl Operation for InvalidE8

source§

impl Operation for InvalidE9

source§

impl Operation for InvalidEa

source§

impl Operation for InvalidEb

source§

impl Operation for InvalidEc

source§

impl Operation for InvalidEd

source§

impl Operation for InvalidEe

source§

impl Operation for InvalidEf

source§

impl Operation for InvalidF6

source§

impl Operation for InvalidF7

source§

impl Operation for InvalidF8

source§

impl Operation for InvalidF9

source§

impl Operation for InvalidFb

source§

impl Operation for InvalidFc

source§

impl Operation for IsZero

source§

impl Operation for Jump

source§

impl Operation for JumpDest

source§

impl Operation for JumpI

source§

impl Operation for Keccak256

source§

impl Operation for Log0

source§

impl Operation for Log1

source§

impl Operation for Log2

source§

impl Operation for Log3

source§

impl Operation for Log4

source§

impl Operation for Lt

source§

impl Operation for MLoad

source§

impl Operation for MSize

source§

impl Operation for MStore8

source§

impl Operation for MStore

source§

impl Operation for Mod

source§

impl Operation for Mul

source§

impl Operation for MulMod

source§

impl Operation for Not

source§

impl Operation for Number

source§

impl Operation for Or

source§

impl Operation for Origin

source§

impl Operation for Pop

source§

impl Operation for Return

source§

impl Operation for ReturnDataCopy

source§

impl Operation for ReturnDataSize

source§

impl Operation for Revert

source§

impl Operation for SDiv

source§

impl Operation for SGt

source§

impl Operation for SLoad

source§

impl Operation for SLt

source§

impl Operation for SMod

source§

impl Operation for SStore

source§

impl Operation for Sar

source§

impl Operation for SelfBalance

source§

impl Operation for SelfDestruct

source§

impl Operation for Shl

source§

impl Operation for Shr

source§

impl Operation for SignExtend

source§

impl Operation for StaticCall

source§

impl Operation for Stop

source§

impl Operation for Sub

source§

impl Operation for Swap1

source§

impl Operation for Swap2

source§

impl Operation for Swap3

source§

impl Operation for Swap4

source§

impl Operation for Swap5

source§

impl Operation for Swap6

source§

impl Operation for Swap7

source§

impl Operation for Swap8

source§

impl Operation for Swap9

source§

impl Operation for Swap10

source§

impl Operation for Swap11

source§

impl Operation for Swap12

source§

impl Operation for Swap13

source§

impl Operation for Swap14

source§

impl Operation for Swap15

source§

impl Operation for Swap16

source§

impl Operation for Timestamp

source§

impl Operation for Xor

source§

impl<I> Operation for Push1<I>where
    I: Immediate<1usize>,

§

type Immediate = I

§

type ImmediateRef = I

§

type Code = Push1<()>

source§

impl<I> Operation for Push2<I>where
    I: Immediate<2usize>,

§

type Immediate = I

§

type ImmediateRef = I

§

type Code = Push2<()>

source§

impl<I> Operation for Push3<I>where
    I: Immediate<3usize>,

§

type Immediate = I

§

type ImmediateRef = I

§

type Code = Push3<()>

source§

impl<I> Operation for Push4<I>where
    I: Immediate<4usize>,

§

type Immediate = I

§

type ImmediateRef = I

§

type Code = Push4<()>

source§

impl<I> Operation for Push5<I>where
    I: Immediate<5usize>,

§

type Immediate = I

§

type ImmediateRef = I

§

type Code = Push5<()>

source§

impl<I> Operation for Push6<I>where
    I: Immediate<6usize>,

§

type Immediate = I

§

type ImmediateRef = I

§

type Code = Push6<()>

source§

impl<I> Operation for Push7<I>where
    I: Immediate<7usize>,

§

type Immediate = I

§

type ImmediateRef = I

§

type Code = Push7<()>

source§

impl<I> Operation for Push8<I>where
    I: Immediate<8usize>,

§

type Immediate = I

§

type ImmediateRef = I

§

type Code = Push8<()>

source§

impl<I> Operation for Push9<I>where
    I: Immediate<9usize>,

§

type Immediate = I

§

type ImmediateRef = I

§

type Code = Push9<()>

source§

impl<I> Operation for Push10<I>where
    I: Immediate<10usize>,

§

type Immediate = I

§

type ImmediateRef = I

§

type Code = Push10<()>

source§

impl<I> Operation for Push11<I>where
    I: Immediate<11usize>,

§

type Immediate = I

§

type ImmediateRef = I

§

type Code = Push11<()>

source§

impl<I> Operation for Push12<I>where
    I: Immediate<12usize>,

§

type Immediate = I

§

type ImmediateRef = I

§

type Code = Push12<()>

source§

impl<I> Operation for Push13<I>where
    I: Immediate<13usize>,

§

type Immediate = I

§

type ImmediateRef = I

§

type Code = Push13<()>

source§

impl<I> Operation for Push14<I>where
    I: Immediate<14usize>,

§

type Immediate = I

§

type ImmediateRef = I

§

type Code = Push14<()>

source§

impl<I> Operation for Push15<I>where
    I: Immediate<15usize>,

§

type Immediate = I

§

type ImmediateRef = I

§

type Code = Push15<()>

source§

impl<I> Operation for Push16<I>where
    I: Immediate<16usize>,

§

type Immediate = I

§

type ImmediateRef = I

§

type Code = Push16<()>

source§

impl<I> Operation for Push17<I>where
    I: Immediate<17usize>,

§

type Immediate = I

§

type ImmediateRef = I

§

type Code = Push17<()>

source§

impl<I> Operation for Push18<I>where
    I: Immediate<18usize>,

§

type Immediate = I

§

type ImmediateRef = I

§

type Code = Push18<()>

source§

impl<I> Operation for Push19<I>where
    I: Immediate<19usize>,

§

type Immediate = I

§

type ImmediateRef = I

§

type Code = Push19<()>

source§

impl<I> Operation for Push20<I>where
    I: Immediate<20usize>,

§

type Immediate = I

§

type ImmediateRef = I

§

type Code = Push20<()>

source§

impl<I> Operation for Push21<I>where
    I: Immediate<21usize>,

§

type Immediate = I

§

type ImmediateRef = I

§

type Code = Push21<()>

source§

impl<I> Operation for Push22<I>where
    I: Immediate<22usize>,

§

type Immediate = I

§

type ImmediateRef = I

§

type Code = Push22<()>

source§

impl<I> Operation for Push23<I>where
    I: Immediate<23usize>,

§

type Immediate = I

§

type ImmediateRef = I

§

type Code = Push23<()>

source§

impl<I> Operation for Push24<I>where
    I: Immediate<24usize>,

§

type Immediate = I

§

type ImmediateRef = I

§

type Code = Push24<()>

source§

impl<I> Operation for Push25<I>where
    I: Immediate<25usize>,

§

type Immediate = I

§

type ImmediateRef = I

§

type Code = Push25<()>

source§

impl<I> Operation for Push26<I>where
    I: Immediate<26usize>,

§

type Immediate = I

§

type ImmediateRef = I

§

type Code = Push26<()>

source§

impl<I> Operation for Push27<I>where
    I: Immediate<27usize>,

§

type Immediate = I

§

type ImmediateRef = I

§

type Code = Push27<()>

source§

impl<I> Operation for Push28<I>where
    I: Immediate<28usize>,

§

type Immediate = I

§

type ImmediateRef = I

§

type Code = Push28<()>

source§

impl<I> Operation for Push29<I>where
    I: Immediate<29usize>,

§

type Immediate = I

§

type ImmediateRef = I

§

type Code = Push29<()>

source§

impl<I> Operation for Push30<I>where
    I: Immediate<30usize>,

§

type Immediate = I

§

type ImmediateRef = I

§

type Code = Push30<()>

source§

impl<I> Operation for Push31<I>where
    I: Immediate<31usize>,

§

type Immediate = I

§

type ImmediateRef = I

§

type Code = Push31<()>

source§

impl<I> Operation for Push32<I>where
    I: Immediate<32usize>,

§

type Immediate = I

§

type ImmediateRef = I

§

type Code = Push32<()>

source§

impl<T> Operation for Op<T>where
    T: Immediates + ?Sized,