Skip to main content

Plot

Struct Plot 

Source
#[repr(C)]
pub struct Plot {
Show 15 fields pub authority: Pubkey, pub plot_level: u64, pub fuel_capacity: u64, pub current_fuel: u64, pub max_rig_slots: u64, pub total_mining_power: u64, pub last_claim_block: u64, pub last_fuel_update_block: u64, pub last_upgrade_timestamp: i64, pub total_fuel_requirement: u64, pub num_rigs_staked: u64, pub last_refinery_rewards_factor: Numeric, pub buffer_a: u64, pub buffer_b: u64, pub buffer_c: u64,
}
Expand description

Plot account (one per wallet/authority)

Fields§

§authority: Pubkey

The authority (owner) of this plot account.

§plot_level: u64

Plot level (0-9: Basic to Master)

§fuel_capacity: u64

Maximum fuel capacity (tank size)

§current_fuel: u64

Current fuel remaining in tank

§max_rig_slots: u64

Maximum number of rig slots (1-5)

§total_mining_power: u64

Total mining power from all staked rigs

§last_claim_block: u64

Last block when rewards were claimed

§last_fuel_update_block: u64

Last block when fuel was updated (for consumption calculation)

§last_upgrade_timestamp: i64

Timestamp of last upgrade (for 24h cooldown)

§total_fuel_requirement: u64

Sum of fuel_requirement of all rigs currently placed on this plot (placement constraint)

§num_rigs_staked: u64

Number of rigs currently placed on this plot (≤ max_rig_slots)

§last_refinery_rewards_factor: Numeric

Refinery rewards factor at this plot’s last claim (for claimable = power * (current - this))

§buffer_a: u64

Sum of fuel_consumption_rate of all staked rigs (used for fuel consumption on claim). Stored in buffer_a. buffer_a: total_fuel_consumption_rate

§buffer_b: u64

Buffer for future extensions

§buffer_c: u64

Buffer for future extensions

Implementations§

Source§

impl Plot

Source

pub fn pda(&self) -> (Pubkey, u8)

Source

pub fn initialize(&mut self, authority: Pubkey, clock: &Clock)

Source

pub fn can_upgrade(&self, clock: &Clock) -> bool

Check if plot can be upgraded (24h cooldown)

Source

pub fn get_upgrade_cost(&self) -> Option<u64>

Get upgrade cost for the next level (in atomic units, 11 decimals) Returns None if already at max level (9)

Source

pub fn upgrade_cost_for_level(level: u64) -> u64

Get upgrade cost for a specific level (in atomic units, 11 decimals)

Source

pub fn level_stats(level: u64) -> (u64, u64)

Get level stats (slots, fuel_capacity) for a specific level

Source

pub fn upgrade(&mut self, clock: &Clock) -> Option<u64>

Upgrade plot to next level Returns the upgrade cost if successful, None if already at max level

Source

pub fn apply_fuel_consumption(&mut self, clock: &Clock) -> u64

Apply fuel consumption since last_fuel_update_block using buffer_a (total_fuel_consumption_rate). Uses fuel-supported blocks: rewards accrue only for blocks where fuel was available; fuel can deplete mid-interval so we cap at fuel_supported_blocks and consume proportionally. Returns effective mining power for the period (0 if no fuel; else scaled by fuel_supported_blocks/blocks_elapsed).

Source

pub fn update_fuel_consumption( &mut self, staked_rig_consumption_rates: &[u64], clock: &Clock, ) -> u64

Update fuel consumption based on staked rig consumption rates (alternative when rig list available). Uses same fuel-supported-blocks logic as apply_fuel_consumption.

Source§

impl Plot

Source

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

Trait Implementations§

Source§

impl AccountValidation for Plot

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 Plot

Source§

fn clone(&self) -> Plot

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 Plot

Source§

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

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

impl<'de> Deserialize<'de> for Plot

Source§

fn deserialize<__D>(__deserializer: __D) -> Result<Self, __D::Error>
where __D: Deserializer<'de>,

Deserialize this value from the given Serde deserializer. Read more
Source§

impl Discriminator for Plot

Source§

impl PartialEq for Plot

Source§

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

Source§

fn serialize<__S>(&self, __serializer: __S) -> Result<__S::Ok, __S::Error>
where __S: Serializer,

Serialize this value into the given Serde serializer. Read more
Source§

impl Zeroable for Plot

Source§

fn zeroed() -> Self

Source§

impl Copy for Plot

Source§

impl Pod for Plot

Source§

impl StructuralPartialEq for Plot

Auto Trait Implementations§

§

impl Freeze for Plot

§

impl RefUnwindSafe for Plot

§

impl Send for Plot

§

impl Sync for Plot

§

impl Unpin for Plot

§

impl UnwindSafe for Plot

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

Source§

fn strict_as<Dst>(self) -> Dst
where T: StrictCast<Dst>,

Casts the value.
Source§

impl<Src, Dst> StrictCastFrom<Src> for Dst
where Src: StrictCast<Dst>,

Source§

fn strict_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> DeserializeOwned for T
where T: for<'de> Deserialize<'de>,

Source§

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