Struct SetCodeAuthorization

Source
pub struct SetCodeAuthorization {
    pub discarded: bool,
    pub chain_id: Vec<u8>,
    pub address: Vec<u8>,
    pub nonce: u64,
    pub v: u32,
    pub r: Vec<u8>,
    pub s: Vec<u8>,
    pub authority: Option<Vec<u8>>,
}
Expand description

SetCodeAuthorization represents the authorization of a transaction to set code of an EOA (Externally Owned Account) as defined in EIP-7702.

The ‘authority’ field is the address that is authorizing the delegation mechanism. The ‘authority’ value is computed from the signature contained in the message using the computation authority = ecrecover(keccak(MAGIC || rlp([chain_id, address, nonce])), y_parity, r, s) where MAGIC is 0x5, || is the bytes concatenation operator, ecrecover is the Ethereum signature recovery and y_parity is the recovery ID value denoted v in the message below. Checking the go-ethereum implementation at https://github.com/ethereum/go-ethereum/blob/v1.15.0/core/types/tx_setcode.go#L117 might prove easier to “read”.

We do extract the ‘authority’ value from the signature in the message and store it in the ‘authority’ field for convenience so you don’t need to perform the computation yourself.

Fields§

§discarded: bool

Discarded determines if this authorization was skipped due to being invalid. As EIP-7702 states, if the authorization is invalid (invalid signature, nonce mismatch, etc.) it must be simply discarded and the transaction is processed as if the authorization was not present in the authorization list.

This boolean records if the authorization was discarded or not by the chain due to invalidity.

§chain_id: Vec<u8>

ChainID is the chain ID of the chain where the transaction was executed, used to recover the authority from the signature.

§address: Vec<u8>

Address contains the address this account is delegating to. This address usually contain code that this account essentially “delegates” to.

Note: This was missing when EIP-7702 was first activated on Holesky, Sepolia, BSC Chapel, BSC Mainnet and Arbitrum Sepolia but was ready for Ethereum Mainnet hard fork. We will backfill those missing values in the near future at which point we will remove this note.

§nonce: u64

Nonce is the nonce of the account that is authorizing delegation mechanism, EIP-7702 rules states that nonce should be verified using this rule:

  • Verify the nonce of authority is equal to nonce. In case authority does not exist in the trie, verify that nonce is equal to 0.

Read SetCodeAuthorization to know how to recover the authority value.

§v: u32

V is the recovery ID value for the signature Y point. While it’s defined as a uint32, it’s actually bounded by a uint8 data type withing the Ethereum protocol.

§r: Vec<u8>

R is the signature’s X point on the elliptic curve (32 bytes).

§s: Vec<u8>

S is the signature’s Y point on the elliptic curve (32 bytes).

§authority: Option<Vec<u8>>

Authority is the address of the account that is authorizing delegation mechanism, it is computed from the signature contained in the message and stored for convenience.

If the authority cannot be recovered from the signature, this field will be empty and the discarded field will be set to true.

Implementations§

Source§

impl SetCodeAuthorization

Source

pub fn authority(&self) -> &[u8]

Returns the value of authority, or the default value if authority is unset.

Trait Implementations§

Source§

impl Clone for SetCodeAuthorization

Source§

fn clone(&self) -> SetCodeAuthorization

Returns a duplicate of the value. Read more
1.0.0 · Source§

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

Performs copy-assignment from source. Read more
Source§

impl Debug for SetCodeAuthorization

Source§

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

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

impl Default for SetCodeAuthorization

Source§

fn default() -> SetCodeAuthorization

Returns the “default value” for a type. Read more
Source§

impl Message for SetCodeAuthorization

Source§

fn encoded_len(&self) -> usize

Returns the encoded length of the message without a length delimiter.
Source§

fn clear(&mut self)

Clears the message, resetting all fields to their default.
Source§

fn encode(&self, buf: &mut impl BufMut) -> Result<(), EncodeError>
where Self: Sized,

Encodes the message to a buffer. Read more
Source§

fn encode_to_vec(&self) -> Vec<u8>
where Self: Sized,

Encodes the message to a newly allocated buffer.
Source§

fn encode_length_delimited( &self, buf: &mut impl BufMut, ) -> Result<(), EncodeError>
where Self: Sized,

Encodes the message with a length-delimiter to a buffer. Read more
Source§

fn encode_length_delimited_to_vec(&self) -> Vec<u8>
where Self: Sized,

Encodes the message with a length-delimiter to a newly allocated buffer.
Source§

fn decode(buf: impl Buf) -> Result<Self, DecodeError>
where Self: Default,

Decodes an instance of the message from a buffer. Read more
Source§

fn decode_length_delimited(buf: impl Buf) -> Result<Self, DecodeError>
where Self: Default,

Decodes a length-delimited instance of the message from the buffer.
Source§

fn merge(&mut self, buf: impl Buf) -> Result<(), DecodeError>
where Self: Sized,

Decodes an instance of the message from a buffer, and merges it into self. Read more
Source§

fn merge_length_delimited(&mut self, buf: impl Buf) -> Result<(), DecodeError>
where Self: Sized,

Decodes a length-delimited instance of the message from buffer, and merges it into self.
Source§

impl PartialEq for SetCodeAuthorization

Source§

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

Tests for self and other values to be equal, and is used by ==.
1.0.0 · Source§

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

Tests for !=. The default implementation is almost always sufficient, and should not be overridden without very good reason.
Source§

impl StructuralPartialEq for SetCodeAuthorization

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.

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> 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 = Infallible

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

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

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<V, T> VZip<V> for T
where V: MultiLane<T>,

Source§

fn vzip(self) -> V