Skip to main content

CuBudget

Struct CuBudget 

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

Compute-unit budget tracker.

On BPF this is backed by the sol_remaining_compute_units syscall (SIMD-0049), so snapshots and guards read the real remaining budget. That SIMD is Withdrawn and its feature gate has never been activated on mainnet-beta, devnet, or testnet: a deployed program referencing the symbol is rejected by the loader. On-chain builds therefore include this type only with the crate’s remaining-compute-units-syscall feature, for private clusters that activate the gate. Off-chain there is no CU metering: remaining reports u64::MAX, so every guard passes trivially and used reports 0.

Implementations§

Source§

impl CuBudget

Source

pub fn remaining() -> u64

Remaining compute units for the current invocation.

On BPF, reads the sol_remaining_compute_units syscall (SIMD-0049; not activated on any public cluster, see the type docs). Off-chain, returns u64::MAX, host builds have no CU meter, so guards built on this pass trivially, matching the crate’s other host fallbacks.

Source

pub fn snapshot() -> Self

Take a snapshot of the current compute budget.

Stores the remaining CU at call time (via remaining), enabling the snapshot/check pattern: let b = CuBudget::snapshot(); ...; b.used().

Note: this no longer emits a sol_log_compute_units log line the way pre-SIMD-0049 versions did; it reads instead. Use checkpoint for the logging behavior.

Source

pub fn used(&self) -> u64

Compute units consumed since this snapshot was taken.

Saturates at 0 (the remaining budget can only decrease within an invocation, but saturating keeps hostile or host-side inputs from wrapping). Off-chain this is always 0.

Source

pub fn checkpoint()

Log the current compute unit consumption for profiling.

Emits via sol_log_compute_units on BPF. Use this to instrument hot paths and identify CU bottlenecks.

Source

pub fn require_remaining(&self, min_remaining: u64) -> ProgramResult

Assert that at least min_remaining CU are available.

On BPF this is a real guard (SIMD-0049): it reads the remaining budget and returns Err(ProgramError::Custom(ERR_INSUFFICIENT_CU)) when it is below the floor, letting the program fail cleanly (state untouched, clear error) instead of hard-aborting mid-CPI when the runtime exhausts the meter.

Off-chain, remaining is u64::MAX, so this always returns Ok.

Source

pub fn log_delta(&self, label: &str)

Log CU consumed since the snapshot.

Emits a structured log that off-chain tools can parse. Format: "cu-delta: <label>"

Trait Implementations§

Source§

impl Clone for CuBudget

Source§

fn clone(&self) -> Self

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 Copy for CuBudget

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 = !

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, !>

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.