Skip to main content

LayoutFingerprint

Struct LayoutFingerprint 

Source
pub struct LayoutFingerprint { /* private fields */ }
Expand description

An 8-byte deterministic layout fingerprint.

Generated from SHA-256("hopper:v1:" + name + ":" + version + ":" + fields)[..8]. Two layouts with identical fields, types, sizes, and ordering produce the same fingerprint. Any structural change produces a different one.

Use this to assert compatibility between layout versions at compile time, verify on-chain accounts match expected schemas, and detect schema drift in migration paths.

Implementations§

Source§

impl LayoutFingerprint

Source

pub const fn from_bytes(bytes: [u8; 8]) -> Self

Create a fingerprint from raw bytes.

Source

pub const fn as_bytes(&self) -> &[u8; 8]

Raw fingerprint bytes.

Source

pub const fn matches(&self, other: &LayoutFingerprint) -> bool

Check if two fingerprints match.

Source

pub const fn differs_from(&self, other: &LayoutFingerprint) -> bool

Check if two fingerprints differ (schema changed between versions).

Source

pub fn verify_header(&self, data: &[u8]) -> Result<(), ProgramError>

Verify this fingerprint matches data read from an account header.

Reads the layout_id from bytes 4..12 of the header and compares.

Trait Implementations§

Source§

impl Clone for LayoutFingerprint

Source§

fn clone(&self) -> LayoutFingerprint

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 PartialEq for LayoutFingerprint

Source§

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

Tests for self and other values to be equal, and is used by ==.
1.0.0 (const: unstable) · 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 LayoutFingerprint

Source§

impl Eq for LayoutFingerprint

Source§

impl StructuralPartialEq for LayoutFingerprint

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.