Skip to main content

HopperHeader

Struct HopperHeader 

Source
#[repr(C, packed(1))]
pub struct HopperHeader { pub disc: u8, pub version: u8, pub flags: u16, pub layout_id: [u8; 8], pub schema_epoch: u32, }
Expand description

The canonical 16-byte header at the start of every Hopper account.

The Hopper Safety Audit’s “header epoching” recommendation asked the reserved tail to carry a schema_epoch: u32 so the runtime can distinguish schema-compatible minor versions from wire- incompatible revisions without bumping the single version byte.

byte 0     : disc (u8)
byte 1     : version (u8)
bytes 2-3  : flags (u16 LE)
bytes 4-11 : layout_id (first 8 bytes of canonical wire fingerprint)
bytes 12-15: schema_epoch (u32 LE), audit-added

schema_epoch defaults to 1 at account initialisation via init_header. Programs that publish a migration bump this field to advertise the new shape while retaining the same disc/version; on-chain manifests (future work) pin the (disc, version, schema_epoch, layout_id) tuple so clients can verify they’re reading the expected wire format.

Fields§

§disc: u8§version: u8§flags: u16§layout_id: [u8; 8]§schema_epoch: u32

Schema-evolution epoch. Little-endian u32. 1 for freshly initialised headers; bumped by migration helpers.

Implementations§

Source§

impl HopperHeader

Source

pub const SIZE: usize = 16

The header is always 16 bytes.

Source

pub fn from_bytes(data: &[u8]) -> Option<&Self>

Read a header from the start of a raw data slice.

Source

pub fn from_bytes_mut(data: &mut [u8]) -> Option<&mut Self>

Read a mutable header from the start of a raw data slice.

Trait Implementations§

Source§

impl Clone for HopperHeader

Source§

fn clone(&self) -> HopperHeader

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 HopperHeader

Source§

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

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

impl PartialEq for HopperHeader

Source§

fn eq(&self, other: &HopperHeader) -> 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 Copy for HopperHeader

Source§

impl Eq for HopperHeader

Source§

impl StructuralPartialEq for HopperHeader

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, 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.