pub struct Bytecode { /* private fields */ }
Expand description
EVM Bytecode
Implementations§
source§impl Bytecode
impl Bytecode
sourcepub fn from_raw_unchecked(input: Vec<u8>) -> Self
pub fn from_raw_unchecked(input: Vec<u8>) -> Self
Build not checked bytecode
sourcepub fn push<T: ToWord>(&mut self, n: u8, value: T) -> &mut Self
pub fn push<T: ToWord>(&mut self, n: u8, value: T) -> &mut Self
Push, value is useless for PUSH0
sourcepub fn add_marker(&mut self, marker: String) -> &mut Self
pub fn add_marker(&mut self, marker: String) -> &mut Self
Add marker
sourcepub fn insert_marker(&mut self, marker: &str, pos: usize)
pub fn insert_marker(&mut self, marker: &str, pos: usize)
Insert marker
sourcepub fn setup_state(&mut self) -> &mut Self
pub fn setup_state(&mut self) -> &mut Self
Setup state
sourcepub fn append_op(&mut self, op: OpcodeWithData) -> &mut Self
pub fn append_op(&mut self, op: OpcodeWithData) -> &mut Self
Append an opcode
sourcepub fn iter(&self) -> BytecodeIterator<'_> ⓘ
pub fn iter(&self) -> BytecodeIterator<'_> ⓘ
create iterator
sourcepub fn op_jumpdest(&mut self) -> usize
pub fn op_jumpdest(&mut self) -> usize
JUMPDEST opcode
sourcepub fn store_code_to_mem(&mut self, code: &Self)
pub fn store_code_to_mem(&mut self, code: &Self)
Append the instructions to store another code to memory
source§impl Bytecode
impl Bytecode
pub fn op_push1<T: ToWord>(&mut self, value: T) -> &mut Self
pub fn op_push2<T: ToWord>(&mut self, value: T) -> &mut Self
pub fn op_push3<T: ToWord>(&mut self, value: T) -> &mut Self
pub fn op_push4<T: ToWord>(&mut self, value: T) -> &mut Self
pub fn op_push5<T: ToWord>(&mut self, value: T) -> &mut Self
pub fn op_push6<T: ToWord>(&mut self, value: T) -> &mut Self
pub fn op_push7<T: ToWord>(&mut self, value: T) -> &mut Self
pub fn op_push8<T: ToWord>(&mut self, value: T) -> &mut Self
pub fn op_push9<T: ToWord>(&mut self, value: T) -> &mut Self
pub fn op_push10<T: ToWord>(&mut self, value: T) -> &mut Self
pub fn op_push11<T: ToWord>(&mut self, value: T) -> &mut Self
pub fn op_push12<T: ToWord>(&mut self, value: T) -> &mut Self
pub fn op_push13<T: ToWord>(&mut self, value: T) -> &mut Self
pub fn op_push14<T: ToWord>(&mut self, value: T) -> &mut Self
pub fn op_push15<T: ToWord>(&mut self, value: T) -> &mut Self
pub fn op_push16<T: ToWord>(&mut self, value: T) -> &mut Self
pub fn op_push17<T: ToWord>(&mut self, value: T) -> &mut Self
pub fn op_push18<T: ToWord>(&mut self, value: T) -> &mut Self
pub fn op_push19<T: ToWord>(&mut self, value: T) -> &mut Self
pub fn op_push20<T: ToWord>(&mut self, value: T) -> &mut Self
pub fn op_push21<T: ToWord>(&mut self, value: T) -> &mut Self
pub fn op_push22<T: ToWord>(&mut self, value: T) -> &mut Self
pub fn op_push23<T: ToWord>(&mut self, value: T) -> &mut Self
pub fn op_push24<T: ToWord>(&mut self, value: T) -> &mut Self
pub fn op_push25<T: ToWord>(&mut self, value: T) -> &mut Self
pub fn op_push26<T: ToWord>(&mut self, value: T) -> &mut Self
pub fn op_push27<T: ToWord>(&mut self, value: T) -> &mut Self
pub fn op_push28<T: ToWord>(&mut self, value: T) -> &mut Self
pub fn op_push29<T: ToWord>(&mut self, value: T) -> &mut Self
pub fn op_push30<T: ToWord>(&mut self, value: T) -> &mut Self
pub fn op_push31<T: ToWord>(&mut self, value: T) -> &mut Self
pub fn op_push32<T: ToWord>(&mut self, value: T) -> &mut Self
source§impl Bytecode
impl Bytecode
pub fn op_stop(&mut self) -> &mut Self
pub fn op_add<A: ToWord, B: ToWord>(&mut self, a: A, b: B) -> &mut Self
pub fn op_mul<A: ToWord, B: ToWord>(&mut self, a: A, b: B) -> &mut Self
pub fn op_sub<A: ToWord, B: ToWord>(&mut self, a: A, b: B) -> &mut Self
pub fn op_div<A: ToWord, B: ToWord>(&mut self, a: A, b: B) -> &mut Self
pub fn op_sdiv<A: ToWord, B: ToWord>(&mut self, a: A, b: B) -> &mut Self
pub fn op_mod<A: ToWord, B: ToWord>(&mut self, a: A, b: B) -> &mut Self
pub fn op_smod<A: ToWord, B: ToWord>(&mut self, a: A, b: B) -> &mut Self
pub fn op_addmod<A: ToWord, B: ToWord, N: ToWord>( &mut self, a: A, b: B, n: N ) -> &mut Self
pub fn op_mulmod<A: ToWord, B: ToWord, N: ToWord>( &mut self, a: A, b: B, n: N ) -> &mut Self
pub fn op_exp<A: ToWord, B: ToWord>(&mut self, a: A, exponent: B) -> &mut Self
pub fn op_signextend<A: ToWord, B: ToWord>(&mut self, b: A, x: B) -> &mut Self
pub fn op_lt<A: ToWord, B: ToWord>(&mut self, a: A, b: B) -> &mut Self
pub fn op_gt<A: ToWord, B: ToWord>(&mut self, a: A, b: B) -> &mut Self
pub fn op_slt<A: ToWord, B: ToWord>(&mut self, a: A, b: B) -> &mut Self
pub fn op_sgt<A: ToWord, B: ToWord>(&mut self, a: A, b: B) -> &mut Self
pub fn op_eq<A: ToWord, B: ToWord>(&mut self, a: A, b: B) -> &mut Self
pub fn op_iszero<A: ToWord>(&mut self, a: A) -> &mut Self
pub fn op_and<A: ToWord, B: ToWord>(&mut self, a: A, b: B) -> &mut Self
pub fn op_or<A: ToWord, B: ToWord>(&mut self, a: A, b: B) -> &mut Self
pub fn op_xor<A: ToWord, B: ToWord>(&mut self, a: A, b: B) -> &mut Self
pub fn op_not<A: ToWord>(&mut self, a: A) -> &mut Self
pub fn op_byte<I: ToWord, X: ToWord>(&mut self, i: I, x: X) -> &mut Self
pub fn op_shl<S: ToWord, V: ToWord>(&mut self, shift: S, value: V) -> &mut Self
pub fn op_shr<S: ToWord, V: ToWord>(&mut self, shift: S, value: V) -> &mut Self
pub fn op_sar<S: ToWord, V: ToWord>(&mut self, shift: S, value: V) -> &mut Self
pub fn op_sha3<O: ToWord, S: ToWord>(&mut self, offset: O, size: S) -> &mut Self
pub fn op_address(&mut self) -> &mut Self
pub fn op_balance<A: ToWord>(&mut self, address: A) -> &mut Self
pub fn op_origin(&mut self) -> &mut Self
pub fn op_caller(&mut self) -> &mut Self
pub fn op_callvalue(&mut self) -> &mut Self
pub fn op_calldataload<I: ToWord>(&mut self, i: I) -> &mut Self
pub fn op_calldatasize(&mut self) -> &mut Self
pub fn op_calldatacopy<D: ToWord, B: ToWord, C: ToWord>( &mut self, dest_offset: D, offset: B, size: C ) -> &mut Self
pub fn op_codesize(&mut self) -> &mut Self
pub fn op_codecopy<D: ToWord, B: ToWord, C: ToWord>( &mut self, dest_offset: D, offset: B, size: C ) -> &mut Self
pub fn op_gasprice(&mut self) -> &mut Self
pub fn op_extcodesize<A: ToWord>(&mut self, address: A) -> &mut Self
pub fn op_extcodecopy<A: ToWord, D: ToWord, B: ToWord, C: ToWord>( &mut self, address: A, dest_offset: D, offset: B, size: C ) -> &mut Self
pub fn op_returndatasize(&mut self) -> &mut Self
pub fn op_returndatacopy<D: ToWord, B: ToWord, C: ToWord>( &mut self, dest_offset: D, offset: B, size: C ) -> &mut Self
pub fn op_extcodehash<A: ToWord>(&mut self, address: A) -> &mut Self
pub fn op_blockhash<B: ToWord>(&mut self, blocknumber: B) -> &mut Self
pub fn op_coinbase(&mut self) -> &mut Self
pub fn op_timestamp(&mut self) -> &mut Self
pub fn op_number(&mut self) -> &mut Self
pub fn op_prevrandao(&mut self) -> &mut Self
pub fn op_difficulty(&mut self) -> &mut Self
pub fn op_gaslimit(&mut self) -> &mut Self
pub fn op_chainid(&mut self) -> &mut Self
pub fn op_selfbalance(&mut self) -> &mut Self
pub fn op_pop(&mut self) -> &mut Self
pub fn op_mload<O: ToWord>(&mut self, offset: O) -> &mut Self
pub fn op_mstore<O: ToWord, V: ToWord>( &mut self, offset: O, value: V ) -> &mut Self
pub fn op_mstore8<O: ToWord, V: ToWord>( &mut self, offset: O, value: V ) -> &mut Self
pub fn op_sload<O: ToWord>(&mut self, offset: O) -> &mut Self
pub fn op_sstore<O: ToWord, V: ToWord>( &mut self, offset: O, value: V ) -> &mut Self
pub fn op_jump<C: ToWord>(&mut self, counter: C) -> &mut Self
pub fn op_jumpi<C: ToWord>(&mut self, counter: C) -> &mut Self
pub fn op_pc(&mut self) -> &mut Self
pub fn op_msize(&mut self) -> &mut Self
pub fn op_gas(&mut self) -> &mut Self
pub fn op_dup1(&mut self) -> &mut Self
pub fn op_dup2(&mut self) -> &mut Self
pub fn op_dup3(&mut self) -> &mut Self
pub fn op_dup4(&mut self) -> &mut Self
pub fn op_dup5(&mut self) -> &mut Self
pub fn op_dup6(&mut self) -> &mut Self
pub fn op_dup7(&mut self) -> &mut Self
pub fn op_dup8(&mut self) -> &mut Self
pub fn op_dup9(&mut self) -> &mut Self
pub fn op_dup10(&mut self) -> &mut Self
pub fn op_dup11(&mut self) -> &mut Self
pub fn op_dup12(&mut self) -> &mut Self
pub fn op_dup13(&mut self) -> &mut Self
pub fn op_dup14(&mut self) -> &mut Self
pub fn op_dup15(&mut self) -> &mut Self
pub fn op_dup16(&mut self) -> &mut Self
pub fn op_swap1(&mut self) -> &mut Self
pub fn op_swap2(&mut self) -> &mut Self
pub fn op_swap3(&mut self) -> &mut Self
pub fn op_swap4(&mut self) -> &mut Self
pub fn op_swap5(&mut self) -> &mut Self
pub fn op_swap6(&mut self) -> &mut Self
pub fn op_swap7(&mut self) -> &mut Self
pub fn op_swap8(&mut self) -> &mut Self
pub fn op_swap9(&mut self) -> &mut Self
pub fn op_swap10(&mut self) -> &mut Self
pub fn op_swap11(&mut self) -> &mut Self
pub fn op_swap12(&mut self) -> &mut Self
pub fn op_swap13(&mut self) -> &mut Self
pub fn op_swap14(&mut self) -> &mut Self
pub fn op_swap15(&mut self) -> &mut Self
pub fn op_swap16(&mut self) -> &mut Self
pub fn op_log0<O: ToWord, S: ToWord>(&mut self, offset: O, size: S) -> &mut Self
pub fn op_log1<O: ToWord, S: ToWord, T1: ToWord>( &mut self, offset: O, size: S, topic1: T1 ) -> &mut Self
pub fn op_log2<O: ToWord, S: ToWord, T1: ToWord, T2: ToWord>( &mut self, offset: O, size: S, topic1: T1, topic2: T2 ) -> &mut Self
pub fn op_log3<O: ToWord, S: ToWord, T1: ToWord, T2: ToWord, T3: ToWord>( &mut self, offset: O, size: S, topic1: T1, topic2: T2, topic3: T3 ) -> &mut Self
pub fn op_log4<O: ToWord, S: ToWord, T1: ToWord, T2: ToWord, T3: ToWord, T4: ToWord>( &mut self, offset: O, size: S, topic1: T1, topic2: T2, topic3: T3, topic4: T4 ) -> &mut Self
pub fn op_create<V: ToWord, O: ToWord, S: ToWord>( &mut self, value: V, offset: O, size: S ) -> &mut Self
pub fn op_call<G: ToWord, A: ToWord, V: ToWord, AO: ToWord, AS: ToWord, RO: ToWord, RS: ToWord>( &mut self, gas: G, address: A, value: V, args_offset: AO, args_size: AS, ret_offset: RO, ret_size: RS ) -> &mut Self
pub fn op_callcode<G: ToWord, A: ToWord, V: ToWord, AO: ToWord, AS: ToWord, RO: ToWord, RS: ToWord>( &mut self, gas: G, address: A, value: V, args_offset: AO, args_size: AS, ret_offset: RO, ret_size: RS ) -> &mut Self
pub fn op_return<O: ToWord, S: ToWord>( &mut self, offset: O, size: S ) -> &mut Self
pub fn op_delegatecall<G: ToWord, A: ToWord, AO: ToWord, AS: ToWord, RO: ToWord, RS: ToWord>( &mut self, gas: G, address: A, args_offset: AO, args_size: AS, ret_offset: RO, ret_size: RS ) -> &mut Self
pub fn op_create2<V: ToWord, O: ToWord, SI: ToWord, SA: ToWord>( &mut self, value: V, offset: O, size: SI, salt: SA ) -> &mut Self
pub fn op_staticcall<G: ToWord, A: ToWord, AO: ToWord, AS: ToWord, RO: ToWord, RS: ToWord>( &mut self, gas: G, address: A, args_offset: AO, args_size: AS, ret_offset: RO, ret_size: RS ) -> &mut Self
pub fn op_revert<O: ToWord, S: ToWord>( &mut self, offset: O, size: S ) -> &mut Self
Trait Implementations§
source§impl PartialEq for Bytecode
impl PartialEq for Bytecode
impl Eq for Bytecode
impl StructuralPartialEq for Bytecode
Auto Trait Implementations§
impl RefUnwindSafe for Bytecode
impl Send for Bytecode
impl Sync for Bytecode
impl Unpin for Bytecode
impl UnwindSafe for Bytecode
Blanket Implementations§
source§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
source§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
Mutably borrows from an owned value. Read more
§impl<T> Conv for T
impl<T> Conv for T
§impl<T> FmtForward for T
impl<T> FmtForward for T
§fn fmt_binary(self) -> FmtBinary<Self>where
Self: Binary,
fn fmt_binary(self) -> FmtBinary<Self>where
Self: Binary,
Causes
self
to use its Binary
implementation when Debug
-formatted.§fn fmt_display(self) -> FmtDisplay<Self>where
Self: Display,
fn fmt_display(self) -> FmtDisplay<Self>where
Self: Display,
Causes
self
to use its Display
implementation when
Debug
-formatted.§fn fmt_lower_exp(self) -> FmtLowerExp<Self>where
Self: LowerExp,
fn fmt_lower_exp(self) -> FmtLowerExp<Self>where
Self: LowerExp,
Causes
self
to use its LowerExp
implementation when
Debug
-formatted.§fn fmt_lower_hex(self) -> FmtLowerHex<Self>where
Self: LowerHex,
fn fmt_lower_hex(self) -> FmtLowerHex<Self>where
Self: LowerHex,
Causes
self
to use its LowerHex
implementation when
Debug
-formatted.§fn fmt_octal(self) -> FmtOctal<Self>where
Self: Octal,
fn fmt_octal(self) -> FmtOctal<Self>where
Self: Octal,
Causes
self
to use its Octal
implementation when Debug
-formatted.§fn fmt_pointer(self) -> FmtPointer<Self>where
Self: Pointer,
fn fmt_pointer(self) -> FmtPointer<Self>where
Self: Pointer,
Causes
self
to use its Pointer
implementation when
Debug
-formatted.§fn fmt_upper_exp(self) -> FmtUpperExp<Self>where
Self: UpperExp,
fn fmt_upper_exp(self) -> FmtUpperExp<Self>where
Self: UpperExp,
Causes
self
to use its UpperExp
implementation when
Debug
-formatted.§fn fmt_upper_hex(self) -> FmtUpperHex<Self>where
Self: UpperHex,
fn fmt_upper_hex(self) -> FmtUpperHex<Self>where
Self: UpperHex,
Causes
self
to use its UpperHex
implementation when
Debug
-formatted.§fn fmt_list(self) -> FmtList<Self>where
&'a Self: for<'a> IntoIterator,
fn fmt_list(self) -> FmtList<Self>where
&'a Self: for<'a> IntoIterator,
Formats each item in a sequence. Read more
§impl<T> Instrument for T
impl<T> Instrument for T
§fn instrument(self, span: Span) -> Instrumented<Self>
fn instrument(self, span: Span) -> Instrumented<Self>
§fn in_current_span(self) -> Instrumented<Self>
fn in_current_span(self) -> Instrumented<Self>
§impl<T> Pipe for Twhere
T: ?Sized,
impl<T> Pipe for Twhere
T: ?Sized,
§fn pipe<R>(self, func: impl FnOnce(Self) -> R) -> Rwhere
Self: Sized,
fn pipe<R>(self, func: impl FnOnce(Self) -> R) -> Rwhere
Self: Sized,
Pipes by value. This is generally the method you want to use. Read more
§fn pipe_ref<'a, R>(&'a self, func: impl FnOnce(&'a Self) -> R) -> Rwhere
R: 'a,
fn pipe_ref<'a, R>(&'a self, func: impl FnOnce(&'a Self) -> R) -> Rwhere
R: 'a,
Borrows
self
and passes that borrow into the pipe function. Read more§fn pipe_ref_mut<'a, R>(&'a mut self, func: impl FnOnce(&'a mut Self) -> R) -> Rwhere
R: 'a,
fn pipe_ref_mut<'a, R>(&'a mut self, func: impl FnOnce(&'a mut Self) -> R) -> Rwhere
R: 'a,
Mutably borrows
self
and passes that borrow into the pipe function. Read more§fn pipe_borrow<'a, B, R>(&'a self, func: impl FnOnce(&'a B) -> R) -> R
fn pipe_borrow<'a, B, R>(&'a self, func: impl FnOnce(&'a B) -> R) -> R
§fn pipe_borrow_mut<'a, B, R>(
&'a mut self,
func: impl FnOnce(&'a mut B) -> R
) -> R
fn pipe_borrow_mut<'a, B, R>( &'a mut self, func: impl FnOnce(&'a mut B) -> R ) -> R
§fn pipe_as_ref<'a, U, R>(&'a self, func: impl FnOnce(&'a U) -> R) -> R
fn pipe_as_ref<'a, U, R>(&'a self, func: impl FnOnce(&'a U) -> R) -> R
Borrows
self
, then passes self.as_ref()
into the pipe function.§fn pipe_as_mut<'a, U, R>(&'a mut self, func: impl FnOnce(&'a mut U) -> R) -> R
fn pipe_as_mut<'a, U, R>(&'a mut self, func: impl FnOnce(&'a mut U) -> R) -> R
Mutably borrows
self
, then passes self.as_mut()
into the pipe
function.§fn pipe_deref<'a, T, R>(&'a self, func: impl FnOnce(&'a T) -> R) -> R
fn pipe_deref<'a, T, R>(&'a self, func: impl FnOnce(&'a T) -> R) -> R
Borrows
self
, then passes self.deref()
into the pipe function.§impl<T> Pointable for T
impl<T> Pointable for T
§impl<T> Tap for T
impl<T> Tap for T
§fn tap_borrow<B>(self, func: impl FnOnce(&B)) -> Self
fn tap_borrow<B>(self, func: impl FnOnce(&B)) -> Self
Immutable access to the
Borrow<B>
of a value. Read more§fn tap_borrow_mut<B>(self, func: impl FnOnce(&mut B)) -> Self
fn tap_borrow_mut<B>(self, func: impl FnOnce(&mut B)) -> Self
Mutable access to the
BorrowMut<B>
of a value. Read more§fn tap_ref<R>(self, func: impl FnOnce(&R)) -> Self
fn tap_ref<R>(self, func: impl FnOnce(&R)) -> Self
Immutable access to the
AsRef<R>
view of a value. Read more§fn tap_ref_mut<R>(self, func: impl FnOnce(&mut R)) -> Self
fn tap_ref_mut<R>(self, func: impl FnOnce(&mut R)) -> Self
Mutable access to the
AsMut<R>
view of a value. Read more§fn tap_deref<T>(self, func: impl FnOnce(&T)) -> Self
fn tap_deref<T>(self, func: impl FnOnce(&T)) -> Self
Immutable access to the
Deref::Target
of a value. Read more§fn tap_deref_mut<T>(self, func: impl FnOnce(&mut T)) -> Self
fn tap_deref_mut<T>(self, func: impl FnOnce(&mut T)) -> Self
Mutable access to the
Deref::Target
of a value. Read more§fn tap_dbg(self, func: impl FnOnce(&Self)) -> Self
fn tap_dbg(self, func: impl FnOnce(&Self)) -> Self
Calls
.tap()
only in debug builds, and is erased in release builds.§fn tap_mut_dbg(self, func: impl FnOnce(&mut Self)) -> Self
fn tap_mut_dbg(self, func: impl FnOnce(&mut Self)) -> Self
Calls
.tap_mut()
only in debug builds, and is erased in release
builds.§fn tap_borrow_dbg<B>(self, func: impl FnOnce(&B)) -> Self
fn tap_borrow_dbg<B>(self, func: impl FnOnce(&B)) -> Self
Calls
.tap_borrow()
only in debug builds, and is erased in release
builds.§fn tap_borrow_mut_dbg<B>(self, func: impl FnOnce(&mut B)) -> Self
fn tap_borrow_mut_dbg<B>(self, func: impl FnOnce(&mut B)) -> Self
Calls
.tap_borrow_mut()
only in debug builds, and is erased in release
builds.§fn tap_ref_dbg<R>(self, func: impl FnOnce(&R)) -> Self
fn tap_ref_dbg<R>(self, func: impl FnOnce(&R)) -> Self
Calls
.tap_ref()
only in debug builds, and is erased in release
builds.§fn tap_ref_mut_dbg<R>(self, func: impl FnOnce(&mut R)) -> Self
fn tap_ref_mut_dbg<R>(self, func: impl FnOnce(&mut R)) -> Self
Calls
.tap_ref_mut()
only in debug builds, and is erased in release
builds.§fn tap_deref_dbg<T>(self, func: impl FnOnce(&T)) -> Self
fn tap_deref_dbg<T>(self, func: impl FnOnce(&T)) -> Self
Calls
.tap_deref()
only in debug builds, and is erased in release
builds.