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:
- Registration
- Active
- Report Work
- 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: u64Solana slot when the protocol starts operating.
min_weight: u64Minimum weight required for a forester to register to an epoch.
slot_length: u64Light protocol slot length.
registration_phase_length: u64Foresters can register for this phase.
active_phase_length: u64Foresters can perform work in this phase.
report_work_phase_length: u64Foresters can report work to receive performance based rewards in this phase.
network_fee: u64§cpi_context_size: u64§finalize_counter_limit: u64§place_holder: PubkeyPlaceholder 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: u64Implementations§
source§impl ProtocolConfig
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
sourcepub fn get_latest_register_epoch(&self, slot: u64) -> Result<u64>
pub fn get_latest_register_epoch(&self, slot: u64) -> Result<u64>
Current epoch including registration phase.
pub fn get_current_epoch(&self, slot: u64) -> u64
pub fn get_current_active_epoch(&self, slot: u64) -> Result<u64>
pub fn get_latest_register_epoch_progress(&self, slot: u64) -> Result<u64>
pub fn get_current_active_epoch_progress(&self, slot: u64) -> u64
sourcepub fn is_registration_phase(&self, slot: u64) -> Result<u64>
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.
pub fn is_active_phase(&self, slot: u64, epoch: u64) -> Result<()>
pub fn is_report_work_phase(&self, slot: u64, epoch: u64) -> Result<()>
pub fn is_post_epoch(&self, slot: u64, epoch: u64) -> Result<()>
Trait Implementations§
source§impl BorshDeserialize for ProtocolConfig
impl BorshDeserialize for ProtocolConfig
fn deserialize_reader<R: Read>(reader: &mut R) -> Result<Self, Error>
source§fn deserialize(buf: &mut &[u8]) -> Result<Self, Error>
fn deserialize(buf: &mut &[u8]) -> Result<Self, Error>
source§fn try_from_slice(v: &[u8]) -> Result<Self, Error>
fn try_from_slice(v: &[u8]) -> Result<Self, Error>
fn try_from_reader<R>(reader: &mut R) -> Result<Self, Error>where
R: Read,
source§impl BorshSerialize for ProtocolConfig
impl BorshSerialize for ProtocolConfig
source§impl Clone for ProtocolConfig
impl Clone for ProtocolConfig
source§fn clone(&self) -> ProtocolConfig
fn clone(&self) -> ProtocolConfig
1.0.0 · source§fn clone_from(&mut self, source: &Self)
fn clone_from(&mut self, source: &Self)
source. Read moresource§impl Debug for ProtocolConfig
impl Debug for ProtocolConfig
source§impl Default for ProtocolConfig
impl Default for ProtocolConfig
source§impl IdlBuild for ProtocolConfig
impl IdlBuild for ProtocolConfig
source§fn __anchor_private_full_path() -> String
fn __anchor_private_full_path() -> String
source§fn __anchor_private_gen_idl_type() -> Option<IdlTypeDefinition>
fn __anchor_private_gen_idl_type() -> Option<IdlTypeDefinition>
None if it doesn’t exist.source§fn __anchor_private_insert_idl_defined(
defined_types: &mut HashMap<String, IdlTypeDefinition>,
)
fn __anchor_private_insert_idl_defined( defined_types: &mut HashMap<String, IdlTypeDefinition>, )
source§impl PartialEq for ProtocolConfig
impl PartialEq for ProtocolConfig
impl Copy for ProtocolConfig
impl Eq for ProtocolConfig
impl StructuralPartialEq for ProtocolConfig
Auto Trait Implementations§
impl Freeze for ProtocolConfig
impl RefUnwindSafe for ProtocolConfig
impl Send for ProtocolConfig
impl Sync for ProtocolConfig
impl Unpin for ProtocolConfig
impl UnwindSafe for ProtocolConfig
Blanket Implementations§
source§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
source§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
source§impl<T> CloneToUninit for Twhere
T: Clone,
impl<T> CloneToUninit for Twhere
T: Clone,
source§unsafe fn clone_to_uninit(&self, dst: *mut T)
unsafe fn clone_to_uninit(&self, dst: *mut T)
clone_to_uninit)source§impl<Q, K> Equivalent<K> for Q
impl<Q, K> Equivalent<K> for Q
source§impl<T> IntoEither for T
impl<T> IntoEither for T
source§fn into_either(self, into_left: bool) -> Either<Self, Self>
fn into_either(self, into_left: bool) -> Either<Self, Self>
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 moresource§fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
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