Struct light_registry::protocol_config::state::ProtocolConfig

source ·
pub struct ProtocolConfig {
Show 16 fields pub genesis_slot: u64, pub min_weight: u64, pub slot_length: u64, pub registration_phase_length: u64, pub active_phase_length: u64, pub report_work_phase_length: u64, pub network_fee: u64, pub cpi_context_size: u64, pub finalize_counter_limit: u64, pub place_holder: Pubkey, pub place_holder_a: u64, pub place_holder_b: u64, pub place_holder_c: u64, pub place_holder_d: u64, pub place_holder_e: u64, pub place_holder_f: u64,
}
Expand description

Epoch Phases:

  1. Registration
  2. Active
  3. Report Work
  4. Post (Epoch has ended, and rewards can be claimed.)
  • There is always an active phase in progress, registration and report work phases run in parallel to a currently active phase.

Fields§

§genesis_slot: u64

Solana slot when the protocol starts operating.

§min_weight: u64

Minimum weight required for a forester to register to an epoch.

§slot_length: u64

Light protocol slot length.

§registration_phase_length: u64

Foresters can register for this phase.

§active_phase_length: u64

Foresters can perform work in this phase.

§report_work_phase_length: u64

Foresters can report work to receive performance based rewards in this phase.

§network_fee: u64§cpi_context_size: u64§finalize_counter_limit: u64§place_holder: Pubkey

Placeholder for future protocol updates.

§place_holder_a: u64§place_holder_b: u64§place_holder_c: u64§place_holder_d: u64§place_holder_e: u64§place_holder_f: u64

Implementations§

source§

impl ProtocolConfig

Light Epoch Example:

Diagram of epochs 0 and 1. Registration 0 starts at genesis slot. |–– Registration 0 ––|—————— Active 0 ——|–– Report Work 0 ––|–– Post 0 –– |– Registration 1 –|—————— Active 1 —————– (Post epoch does not end unlike the other phases.)

let genesis = 0; let registration_phase_length = 100; let active_phase_length = 1000; let report_work_phase_length = 100; let slot = 10;

To get the latest registry epoch:

  • slot = 0; let current_registry_epoch = (slot - genesis) / active_phase_length; current_registry_epoch = (0 - 0) / 1000 = 0; first active phase starts at genesis + registration_phase_length = 0 + 100 = 100;

To get the current active epoch:

  • slot = 100; let current_active_epoch = (slot - genesis - registration_phase_length) / active_phase_length; current_active_epoch = (100 - 0 - 100) / 1000 = 0;

Epoch 0:

  • Registration 0: 0 - 100
  • Active 0: 100 - 1100
  • Report Work 0: 1100 - 1200
  • Post 0: 1200 - inf

Epoch 1:

  • Registration 1: 1000 - 1100
  • Active 1: 1100 - 2100
  • Report Work 1: 2100 - 2200
  • Post 1: 2200 - inf

Epoch 2:

  • Registration 2: 2000 - 2100
  • Active 2: 2100 - 3100
  • Report Work 2: 3100 - 3200
  • Post 2: 3200 - inf
source

pub fn get_latest_register_epoch(&self, slot: u64) -> Result<u64>

Current epoch including registration phase.

source

pub fn get_current_epoch(&self, slot: u64) -> u64

source

pub fn get_current_active_epoch(&self, slot: u64) -> Result<u64>

source

pub fn get_latest_register_epoch_progress(&self, slot: u64) -> Result<u64>

source

pub fn get_current_active_epoch_progress(&self, slot: u64) -> u64

source

pub fn is_registration_phase(&self, slot: u64) -> Result<u64>

In the last part of the active phase the registration phase starts. Returns end slot of the registration phase/start slot of the next active phase.

source

pub fn is_active_phase(&self, slot: u64, epoch: u64) -> Result<()>

source

pub fn is_report_work_phase(&self, slot: u64, epoch: u64) -> Result<()>

source

pub fn is_post_epoch(&self, slot: u64, epoch: u64) -> Result<()>

Trait Implementations§

source§

impl BorshDeserialize for ProtocolConfig

source§

fn deserialize_reader<R: Read>(reader: &mut R) -> Result<Self, Error>

source§

fn deserialize(buf: &mut &[u8]) -> Result<Self, Error>

Deserializes this instance from a given slice of bytes. Updates the buffer to point at the remaining bytes.
source§

fn try_from_slice(v: &[u8]) -> Result<Self, Error>

Deserialize this instance from a slice of bytes.
source§

fn try_from_reader<R>(reader: &mut R) -> Result<Self, Error>
where R: Read,

source§

impl BorshSerialize for ProtocolConfig

source§

fn serialize<W: Write>(&self, writer: &mut W) -> Result<(), Error>

source§

fn try_to_vec(&self) -> Result<Vec<u8>, Error>

Serialize this instance into a vector of bytes.
source§

impl Clone for ProtocolConfig

source§

fn clone(&self) -> ProtocolConfig

Returns a copy 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 ProtocolConfig

source§

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

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

impl Default for ProtocolConfig

source§

fn default() -> Self

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

impl IdlBuild for ProtocolConfig

source§

fn __anchor_private_full_path() -> String

Returns the full module path of the type.
source§

fn __anchor_private_gen_idl_type() -> Option<IdlTypeDefinition>

Returns the IDL type definition of the type or None if it doesn’t exist.
source§

fn __anchor_private_insert_idl_defined( defined_types: &mut HashMap<String, IdlTypeDefinition>, )

Insert the type definition to the defined types hashmap.
source§

impl PartialEq for ProtocolConfig

source§

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

source§

impl Eq for ProtocolConfig

source§

impl StructuralPartialEq for ProtocolConfig

Auto Trait Implementations§

Blanket Implementations§

source§

impl<T> AbiExample for T

source§

default fn example() -> T

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, dst: *mut T)

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

impl<Q, K> Equivalent<K> for Q
where Q: Eq + ?Sized, K: Borrow<Q> + ?Sized,

source§

fn equivalent(&self, key: &K) -> bool

Checks if this value is equivalent to the given key. 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<T> Pointable for T

source§

const ALIGN: usize = _

The alignment of pointer.
source§

type Init = T

The type for initializers.
source§

unsafe fn init(init: <T as Pointable>::Init) -> usize

Initializes a with the given initializer. Read more
source§

unsafe fn deref<'a>(ptr: usize) -> &'a T

Dereferences the given pointer. Read more
source§

unsafe fn deref_mut<'a>(ptr: usize) -> &'a mut T

Mutably dereferences the given pointer. Read more
source§

unsafe fn drop(ptr: usize)

Drops the object pointed to by the given pointer. 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 = 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