Skip to main content

PushValue

Struct PushValue 

Source
pub struct PushValue {
    pub value: B256,
}
Expand description

Represents a value to be pushed onto the EVM stack

This type encapsulates a 32-byte value and provides methods to:

  • Generate complete bytecode with optimal PUSH opcode (PUSH0-PUSH32)
  • Extract just the hex data without any opcode

Fields§

§value: B256

The 32-byte value to push

Implementations§

Source§

impl PushValue

Source

pub fn new(value: B256) -> PushValue

Creates a new PushValue from a B256 value

Source

pub fn to_hex_with_opcode(&self, evm_version: &EVMVersion) -> String

Converts the PushValue to bytecode with the appropriate PUSH opcode

This generates optimal bytecode by:

  • Trimming leading zeros from the value
  • Selecting the smallest PUSH opcode (PUSH0-PUSH32)
  • PUSH0 if the EVM version supports it and the value is zero
  • Encoding the result as a hex string

Use this for normal macro/function bytecode generation.

§Examples
  • Value 0x01 → "6001" (PUSH1 0x01)
  • Value 0x00 → "5f" (PUSH0, if supported by EVM version)
  • Value 0x123456... → "7f123456..." (PUSH32)
Source

pub fn to_hex_trimmed(&self) -> String

Returns the hex-encoded data without any PUSH opcode

This trims leading zeros and returns just the hex data. Use this for padding operations or when you need just the raw data without leading zeros.

§Examples
  • Value 0x0000...0001 → "01"
  • Value 0x0000...1234 → "1234"
  • Value 0x0000...0000 → "" (empty string)
Source

pub fn to_hex_full(&self) -> String

Returns the full 32-byte hex-encoded data without any PUSH opcode

This always returns the full 64-character hex string (32 bytes). Use this for code tables where the full 32-byte value must be preserved.

§Examples
  • Value 0x0000...0001 → "0000000000000000000000000000000000000000000000000000000000000001"
  • Value 0x0000...1234 → "0000000000000000000000000000000000000000000000000000000000001234"
  • Value 0x0000...0000 → "0000000000000000000000000000000000000000000000000000000000000000"
Source

pub fn to_hex_full_with_opcode(&self) -> String

Converts the full 32-byte value to hex string with PUSH32 opcode prefix (0x7f).

Always generates a PUSH32 instruction (33 bytes total: 1 byte opcode + 32 bytes data), regardless of leading zeros. This is useful for operations that require exact 32-byte values on the stack, such as padding functions.

§Examples
  • Value 0x0000...0001 → "7f0000000000000000000000000000000000000000000000000000000000000001"
  • Value 0x0000...1234 → "7f0000000000000000000000000000000000000000000000000000000000001234"
  • Value 0xFFFF...FFFF → "7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff"

Trait Implementations§

Source§

impl Clone for PushValue

Source§

fn clone(&self) -> Self

Returns a duplicate of the value. Read more
1.0.0 (const: unstable) · Source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
Source§

impl Debug for PushValue

Source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
Source§

impl From<&[u8; 32]> for PushValue

Convert from a reference to a 32-byte array to PushValue

Source§

fn from(bytes: &[u8; 32]) -> Self

Converts to this type from the input type.
Source§

impl From<FixedBytes<32>> for PushValue

Convert from B256 to PushValue

Source§

fn from(value: B256) -> Self

Converts to this type from the input type.
Source§

impl From<[u8; 4]> for PushValue

Convert from a 4-byte array (function/error selector) to PushValue

This left-pads the 4 bytes to 32 bytes (zeros on the left, data on the right)

Source§

fn from(bytes: [u8; 4]) -> Self

Converts to this type from the input type.
Source§

impl From<[u8; 32]> for PushValue

Convert from a 32-byte array directly to PushValue

Source§

fn from(bytes: [u8; 32]) -> Self

Converts to this type from the input type.
Source§

impl PartialEq for PushValue

Source§

fn eq(&self, other: &Self) -> bool

Equality operator ==. Read more
1.0.0 (const: unstable) · Source§

fn ne(&self, other: &Rhs) -> bool

Inequality operator !=. Read more
Source§

impl StructuralPartialEq for PushValue

Auto Trait Implementations§

Blanket Implementations§

Source§

impl<T> Any for T
where T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<T> Borrow<T> for T
where T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
Source§

impl<T> CloneToUninit for T
where T: Clone,

Source§

unsafe fn clone_to_uninit(&self, dest: *mut u8)

🔬This is a nightly-only experimental API. (clone_to_uninit)
Performs copy-assignment from self to dest. Read more
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

§

impl<T> Instrument for T

§

fn instrument(self, span: Span) -> Instrumented<Self> ⓘ

Instruments this type with the provided [Span], returning an Instrumented wrapper. Read more
§

fn in_current_span(self) -> Instrumented<Self> ⓘ

Instruments this type with the current Span, returning an Instrumented wrapper. Read more
Source§

impl<T, U> Into<U> for T
where U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

That is, this conversion is whatever the implementation of From<T> for U chooses to do.

Source§

impl<T> IntoEither for T

Source§

fn into_either(self, into_left: bool) -> Either<Self, Self> ⓘ

Converts self into a Left variant of Either<Self, Self> if into_left is true. Converts self into a Right variant of Either<Self, Self> otherwise. Read more
Source§

fn into_either_with<F>(self, into_left: F) -> Either<Self, Self> ⓘ
where F: FnOnce(&Self) -> bool,

Converts self into a Left variant of Either<Self, Self> if into_left(&self) returns true. Converts self into a Right variant of Either<Self, Self> otherwise. Read more
Source§

impl<T> Same for T

Source§

type Output = T

Should always be Self
Source§

impl<T> ToOwned for T
where T: Clone,

Source§

type Owned = T

The resulting type after obtaining ownership.
Source§

fn to_owned(&self) -> T

Creates owned data from borrowed data, usually by cloning. Read more
Source§

fn clone_into(&self, target: &mut T)

Uses borrowed data to replace owned data, usually by cloning. Read more
Source§

impl<T, U> TryFrom<U> for T
where U: Into<T>,

Source§

type Error = !

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, !>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
Source§

impl<S, T> Upcast<T> for S
where T: UpcastFrom<S> + ?Sized, S: ?Sized,

Source§

fn upcast(&self) -> &T
where Self: ErasableGeneric, T: Sized + ErasableGeneric<Repr = Self::Repr>,

Perform a zero-cost type-safe upcast to a wider ref type within the Wasm bindgen generics type system. Read more
Source§

fn upcast_into(self) -> T
where Self: Sized + ErasableGeneric, T: Sized + ErasableGeneric<Repr = Self::Repr>,

Perform a zero-cost type-safe upcast to a wider type within the Wasm bindgen generics type system. Read more
§

impl<V, T> VZip<V> for T
where V: MultiLane<T>,

§

fn vzip(self) -> V

§

impl<T> WithSubscriber for T

§

fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self> ⓘ
where S: Into<Dispatch>,

Attaches the provided Subscriber to this type, returning a [WithDispatch] wrapper. Read more
§

fn with_current_subscriber(self) -> WithDispatch<Self> ⓘ

Attaches the current default Subscriber to this type, returning a [WithDispatch] wrapper. Read more

Layout§

Note: Most layout information is completely unstable and may even differ between compilations. The only exception is types with certain repr(...) attributes. Please see the Rust Reference's “Type Layout” chapter for details on type layout guarantees.

Size: 32 bytes