Proof

Struct Proof 

Source
#[repr(C)]
pub struct Proof { pub claimed_epochs: [u64; 8], pub authority: Pubkey, pub last_claim_at: i64, pub last_claim_epoch: u64, pub total_claimed_rewards: u64, pub claim_count: u32, pub _padding: [u8; 4], }
Expand description

Proof accounts track a member’s basic claim information. Every member is allowed one proof account which is required by the program to claim rewards. A member is usually mapped to a public wallet address.

Note: Double-spending prevention is handled by a bitmap-based epoch tracking system combined with the Dual Merkle Tree system for unlimited claim history.

Fields§

§claimed_epochs: [u64; 8]

Bitmap tracking claimed epochs (512 bits = 8 u64s, covers ~1.4 years) Each bit represents whether an epoch has been claimed Circulation: epoch % 512 determines the bit position

§authority: Pubkey

The signer authorized to use this proof, usually member pubkey

§last_claim_at: i64

Timestamp of the last claim (Unix timestamp)

§last_claim_epoch: u64

Epoch of the last claim (project-specific epoch number)

§total_claimed_rewards: u64

Sum of all successful claims (lifetime total)

§claim_count: u32

Number of successful claims

§_padding: [u8; 4]

Padding to ensure 8-byte alignment

Implementations§

Source§

impl Proof

Source

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

Source§

impl Proof

Source

pub fn is_epoch_claimed(&self, epoch: u64) -> bool

Check if a specific epoch has been claimed using bitmap tracking

§Parameters
  • epoch: The epoch number to check
§Returns
  • true if the epoch has been claimed, false otherwise
§Circulation Logic

Uses modulo 512 to circulate the bitmap: epoch % 512 determines the bit position This provides a rolling 512-day window (~1.4 years) for claim tracking

Source

pub fn mark_epoch_claimed(&mut self, epoch: u64)

Mark a specific epoch as claimed in the bitmap

§Parameters
  • epoch: The epoch number to mark as claimed
§Circulation Logic

Uses modulo 512 to circulate the bitmap: epoch % 512 determines the bit position This provides a rolling 512-day window (~1.4 years) for claim tracking

Source

pub fn clear_epoch_claimed(&mut self, epoch: u64)

Clear a specific epoch claim in the bitmap (for testing/reset purposes)

§Parameters
  • epoch: The epoch number to clear
§Circulation Logic

Uses modulo 512 to circulate the bitmap: epoch % 512 determines the bit position This provides a rolling 512-day window (~1.4 years) for claim tracking

Source

pub fn claimed_epoch_count(&self) -> u32

Get the number of claimed epochs in the bitmap

§Returns
  • The total number of claimed epochs tracked in the bitmap
Source

pub fn is_empty(&self) -> bool

Check if the bitmap is empty (no epochs claimed)

§Returns
  • true if no epochs are claimed, false otherwise

Trait Implementations§

Source§

impl AccountValidation for Proof

Source§

fn assert<F>(&self, condition: F) -> Result<&Self, ProgramError>
where F: Fn(&Self) -> bool,

Source§

fn assert_err<F>( &self, condition: F, err: ProgramError, ) -> Result<&Self, ProgramError>
where F: Fn(&Self) -> bool,

Source§

fn assert_msg<F>(&self, condition: F, msg: &str) -> Result<&Self, ProgramError>
where F: Fn(&Self) -> bool,

Source§

fn assert_mut<F>(&mut self, condition: F) -> Result<&mut Self, ProgramError>
where F: Fn(&Self) -> bool,

Source§

fn assert_mut_err<F>( &mut self, condition: F, err: ProgramError, ) -> Result<&mut Self, ProgramError>
where F: Fn(&Self) -> bool,

Source§

fn assert_mut_msg<F>( &mut self, condition: F, msg: &str, ) -> Result<&mut Self, ProgramError>
where F: Fn(&Self) -> bool,

Source§

impl Clone for Proof

Source§

fn clone(&self) -> Proof

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 Proof

Source§

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

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

impl Discriminator for Proof

Source§

impl PartialEq for Proof

Source§

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

Source§

fn zeroed() -> Self

Source§

impl Copy for Proof

Source§

impl Pod for Proof

Source§

impl StructuralPartialEq for Proof

Auto Trait Implementations§

§

impl Freeze for Proof

§

impl RefUnwindSafe for Proof

§

impl Send for Proof

§

impl Sync for Proof

§

impl Unpin for Proof

§

impl UnwindSafe for Proof

Blanket Implementations§

Source§

impl<T> AccountDeserialize for T
where T: Discriminator + Pod,

Source§

impl<T> AccountHeaderDeserialize for T
where T: Discriminator + Pod,

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> Az for T

Source§

fn az<Dst>(self) -> Dst
where T: Cast<Dst>,

Casts the value.
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<Src, Dst> CastFrom<Src> for Dst
where Src: Cast<Dst>,

Source§

fn cast_from(src: Src) -> Dst

Casts the value.
Source§

impl<T> CheckedAs for T

Source§

fn checked_as<Dst>(self) -> Option<Dst>
where T: CheckedCast<Dst>,

Casts the value.
Source§

impl<T> CheckedBitPattern for T
where T: AnyBitPattern,

Source§

type Bits = T

Self must have the same layout as the specified Bits except for the possible invalid bit patterns being checked during is_valid_bit_pattern.
Source§

fn is_valid_bit_pattern(_bits: &T) -> bool

If this function returns true, then it must be valid to reinterpret bits as &Self.
Source§

impl<Src, Dst> CheckedCastFrom<Src> for Dst
where Src: CheckedCast<Dst>,

Source§

fn checked_cast_from(src: Src) -> Option<Dst>

Casts the value.
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> 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<Src, Dst> LosslessTryInto<Dst> for Src
where Dst: LosslessTryFrom<Src>,

Source§

fn lossless_try_into(self) -> Option<Dst>

Performs the conversion.
Source§

impl<Src, Dst> LossyInto<Dst> for Src
where Dst: LossyFrom<Src>,

Source§

fn lossy_into(self) -> Dst

Performs the conversion.
Source§

impl<T> OverflowingAs for T

Source§

fn overflowing_as<Dst>(self) -> (Dst, bool)
where T: OverflowingCast<Dst>,

Casts the value.
Source§

impl<Src, Dst> OverflowingCastFrom<Src> for Dst
where Src: OverflowingCast<Dst>,

Source§

fn overflowing_cast_from(src: Src) -> (Dst, bool)

Casts the value.
Source§

impl<T> Same for T

Source§

type Output = T

Should always be Self
Source§

impl<T> SaturatingAs for T

Source§

fn saturating_as<Dst>(self) -> Dst
where T: SaturatingCast<Dst>,

Casts the value.
Source§

impl<Src, Dst> SaturatingCastFrom<Src> for Dst
where Src: SaturatingCast<Dst>,

Source§

fn saturating_cast_from(src: Src) -> Dst

Casts the value.
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<T> UnwrappedAs for T

Source§

fn unwrapped_as<Dst>(self) -> Dst
where T: UnwrappedCast<Dst>,

Casts the value.
Source§

impl<Src, Dst> UnwrappedCastFrom<Src> for Dst
where Src: UnwrappedCast<Dst>,

Source§

fn unwrapped_cast_from(src: Src) -> Dst

Casts the value.
Source§

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

Source§

fn vzip(self) -> V

Source§

impl<T> WrappingAs for T

Source§

fn wrapping_as<Dst>(self) -> Dst
where T: WrappingCast<Dst>,

Casts the value.
Source§

impl<Src, Dst> WrappingCastFrom<Src> for Dst
where Src: WrappingCast<Dst>,

Source§

fn wrapping_cast_from(src: Src) -> Dst

Casts the value.
Source§

impl<T> AnyBitPattern for T
where T: Pod,

Source§

impl<T> NoUninit for T
where T: Pod,