InvokeContext

Struct InvokeContext 

Source
pub struct InvokeContext<'a, 'ix_data> {
    pub transaction_context: &'a mut TransactionContext<'ix_data>,
    pub program_cache_for_tx_batch: &'a mut ProgramCacheForTxBatch,
    pub environment_config: EnvironmentConfig<'a>,
    pub execute_time: Option<Measure>,
    pub timings: ExecuteDetailsTimings,
    pub syscall_context: Vec<Option<SyscallContext>>,
    /* private fields */
}
👎Deprecated since 3.1.0: This crate has been marked for formal inclusion in the Agave Unstable API. From v4.0.0 onward, the agave-unstable-api crate feature must be specified to acknowledge use of an interface that may break without warning.
Expand description

Main pipeline from runtime to program execution.

Fields§

§transaction_context: &'a mut TransactionContext<'ix_data>
👎Deprecated since 3.1.0: This crate has been marked for formal inclusion in the Agave Unstable API. From v4.0.0 onward, the agave-unstable-api crate feature must be specified to acknowledge use of an interface that may break without warning.

Information about the currently executing transaction.

§program_cache_for_tx_batch: &'a mut ProgramCacheForTxBatch
👎Deprecated since 3.1.0: This crate has been marked for formal inclusion in the Agave Unstable API. From v4.0.0 onward, the agave-unstable-api crate feature must be specified to acknowledge use of an interface that may break without warning.

The local program cache for the transaction batch.

§environment_config: EnvironmentConfig<'a>
👎Deprecated since 3.1.0: This crate has been marked for formal inclusion in the Agave Unstable API. From v4.0.0 onward, the agave-unstable-api crate feature must be specified to acknowledge use of an interface that may break without warning.

Runtime configurations used to provision the invocation environment.

§execute_time: Option<Measure>
👎Deprecated since 3.1.0: This crate has been marked for formal inclusion in the Agave Unstable API. From v4.0.0 onward, the agave-unstable-api crate feature must be specified to acknowledge use of an interface that may break without warning.

Latest measurement not yet accumulated in ExecuteDetailsTimings::execute_us

§timings: ExecuteDetailsTimings
👎Deprecated since 3.1.0: This crate has been marked for formal inclusion in the Agave Unstable API. From v4.0.0 onward, the agave-unstable-api crate feature must be specified to acknowledge use of an interface that may break without warning.
§syscall_context: Vec<Option<SyscallContext>>
👎Deprecated since 3.1.0: This crate has been marked for formal inclusion in the Agave Unstable API. From v4.0.0 onward, the agave-unstable-api crate feature must be specified to acknowledge use of an interface that may break without warning.

Implementations§

Source§

impl<'a, 'ix_data> InvokeContext<'a, 'ix_data>

Source

pub fn new( transaction_context: &'a mut TransactionContext<'ix_data>, program_cache_for_tx_batch: &'a mut ProgramCacheForTxBatch, environment_config: EnvironmentConfig<'a>, log_collector: Option<Rc<RefCell<LogCollector>>>, compute_budget: SVMTransactionExecutionBudget, execution_cost: SVMTransactionExecutionCost, ) -> Self

👎Deprecated since 3.1.0: This crate has been marked for formal inclusion in the Agave Unstable API. From v4.0.0 onward, the agave-unstable-api crate feature must be specified to acknowledge use of an interface that may break without warning.
Source

pub fn push(&mut self) -> Result<(), InstructionError>

👎Deprecated since 3.1.0: This crate has been marked for formal inclusion in the Agave Unstable API. From v4.0.0 onward, the agave-unstable-api crate feature must be specified to acknowledge use of an interface that may break without warning.

Push a stack frame onto the invocation stack

Source

pub fn get_stack_height(&self) -> usize

👎Deprecated since 3.1.0: This crate has been marked for formal inclusion in the Agave Unstable API. From v4.0.0 onward, the agave-unstable-api crate feature must be specified to acknowledge use of an interface that may break without warning.

Current height of the invocation stack, top level instructions are height solana_instruction::TRANSACTION_LEVEL_STACK_HEIGHT

Source

pub fn native_invoke( &mut self, instruction: Instruction, signers: &[Pubkey], ) -> Result<(), InstructionError>

👎Deprecated since 3.1.0: This crate has been marked for formal inclusion in the Agave Unstable API. From v4.0.0 onward, the agave-unstable-api crate feature must be specified to acknowledge use of an interface that may break without warning.

Entrypoint for a cross-program invocation from a builtin program

Source

pub fn prepare_next_instruction( &mut self, instruction: Instruction, signers: &[Pubkey], ) -> Result<(), InstructionError>

👎Deprecated since 3.1.0: This crate has been marked for formal inclusion in the Agave Unstable API. From v4.0.0 onward, the agave-unstable-api crate feature must be specified to acknowledge use of an interface that may break without warning.

Helper to prepare for process_instruction() when the instruction is not a top level one, and depends on AccountMetas

Source

pub fn prepare_next_top_level_instruction( &mut self, message: &impl SVMMessage, instruction: &SVMInstruction<'_>, program_account_index: IndexOfAccount, data: &'ix_data [u8], ) -> Result<(), InstructionError>

👎Deprecated since 3.1.0: This crate has been marked for formal inclusion in the Agave Unstable API. From v4.0.0 onward, the agave-unstable-api crate feature must be specified to acknowledge use of an interface that may break without warning.

Helper to prepare for process_instruction()/process_precompile() when the instruction is a top level one

Source

pub fn process_instruction( &mut self, compute_units_consumed: &mut u64, timings: &mut ExecuteTimings, ) -> Result<(), InstructionError>

👎Deprecated since 3.1.0: This crate has been marked for formal inclusion in the Agave Unstable API. From v4.0.0 onward, the agave-unstable-api crate feature must be specified to acknowledge use of an interface that may break without warning.

Processes an instruction and returns how many compute units were used

Source

pub fn process_precompile( &mut self, program_id: &Pubkey, instruction_data: &[u8], message_instruction_datas_iter: impl Iterator<Item = &'ix_data [u8]>, ) -> Result<(), InstructionError>

👎Deprecated since 3.1.0: This crate has been marked for formal inclusion in the Agave Unstable API. From v4.0.0 onward, the agave-unstable-api crate feature must be specified to acknowledge use of an interface that may break without warning.

Processes a precompile instruction

Source

pub fn get_log_collector(&self) -> Option<Rc<RefCell<LogCollector>>>

👎Deprecated since 3.1.0: This crate has been marked for formal inclusion in the Agave Unstable API. From v4.0.0 onward, the agave-unstable-api crate feature must be specified to acknowledge use of an interface that may break without warning.

Get this invocation’s LogCollector

Source

pub fn consume_checked(&self, amount: u64) -> Result<(), Box<dyn Error>>

👎Deprecated since 3.1.0: This crate has been marked for formal inclusion in the Agave Unstable API. From v4.0.0 onward, the agave-unstable-api crate feature must be specified to acknowledge use of an interface that may break without warning.

Consume compute units

Source

pub fn mock_set_remaining(&self, remaining: u64)

👎Deprecated since 3.1.0: This crate has been marked for formal inclusion in the Agave Unstable API. From v4.0.0 onward, the agave-unstable-api crate feature must be specified to acknowledge use of an interface that may break without warning.

Set compute units

Only use for tests and benchmarks

Source

pub fn get_compute_budget(&self) -> &SVMTransactionExecutionBudget

👎Deprecated since 3.1.0: This crate has been marked for formal inclusion in the Agave Unstable API. From v4.0.0 onward, the agave-unstable-api crate feature must be specified to acknowledge use of an interface that may break without warning.

Get this invocation’s compute budget

Source

pub fn get_execution_cost(&self) -> &SVMTransactionExecutionCost

👎Deprecated since 3.1.0: This crate has been marked for formal inclusion in the Agave Unstable API. From v4.0.0 onward, the agave-unstable-api crate feature must be specified to acknowledge use of an interface that may break without warning.

Get this invocation’s compute budget

Source

pub fn get_feature_set(&self) -> &SVMFeatureSet

👎Deprecated since 3.1.0: This crate has been marked for formal inclusion in the Agave Unstable API. From v4.0.0 onward, the agave-unstable-api crate feature must be specified to acknowledge use of an interface that may break without warning.

Get the current feature set.

Source

pub fn get_program_runtime_environments_for_deployment( &self, ) -> &ProgramRuntimeEnvironments

👎Deprecated since 3.1.0: This crate has been marked for formal inclusion in the Agave Unstable API. From v4.0.0 onward, the agave-unstable-api crate feature must be specified to acknowledge use of an interface that may break without warning.
Source

pub fn is_stake_raise_minimum_delegation_to_1_sol_active(&self) -> bool

👎Deprecated since 3.1.0: This crate has been marked for formal inclusion in the Agave Unstable API. From v4.0.0 onward, the agave-unstable-api crate feature must be specified to acknowledge use of an interface that may break without warning.
Source

pub fn is_deprecate_legacy_vote_ixs_active(&self) -> bool

👎Deprecated since 3.1.0: This crate has been marked for formal inclusion in the Agave Unstable API. From v4.0.0 onward, the agave-unstable-api crate feature must be specified to acknowledge use of an interface that may break without warning.
Source

pub fn get_sysvar_cache(&self) -> &SysvarCache

👎Deprecated since 3.1.0: This crate has been marked for formal inclusion in the Agave Unstable API. From v4.0.0 onward, the agave-unstable-api crate feature must be specified to acknowledge use of an interface that may break without warning.

Get cached sysvars

Source

pub fn get_epoch_stake(&self) -> u64

👎Deprecated since 3.1.0: This crate has been marked for formal inclusion in the Agave Unstable API. From v4.0.0 onward, the agave-unstable-api crate feature must be specified to acknowledge use of an interface that may break without warning.

Get cached epoch total stake.

Source

pub fn get_epoch_stake_for_vote_account(&self, pubkey: &'a Pubkey) -> u64

👎Deprecated since 3.1.0: This crate has been marked for formal inclusion in the Agave Unstable API. From v4.0.0 onward, the agave-unstable-api crate feature must be specified to acknowledge use of an interface that may break without warning.

Get cached stake for the epoch vote account.

Source

pub fn is_precompile(&self, pubkey: &Pubkey) -> bool

👎Deprecated since 3.1.0: This crate has been marked for formal inclusion in the Agave Unstable API. From v4.0.0 onward, the agave-unstable-api crate feature must be specified to acknowledge use of an interface that may break without warning.
Source

pub fn get_check_aligned(&self) -> bool

👎Deprecated since 3.1.0: This crate has been marked for formal inclusion in the Agave Unstable API. From v4.0.0 onward, the agave-unstable-api crate feature must be specified to acknowledge use of an interface that may break without warning.
Source

pub fn set_syscall_context( &mut self, syscall_context: SyscallContext, ) -> Result<(), InstructionError>

👎Deprecated since 3.1.0: This crate has been marked for formal inclusion in the Agave Unstable API. From v4.0.0 onward, the agave-unstable-api crate feature must be specified to acknowledge use of an interface that may break without warning.
Source

pub fn get_syscall_context(&self) -> Result<&SyscallContext, InstructionError>

👎Deprecated since 3.1.0: This crate has been marked for formal inclusion in the Agave Unstable API. From v4.0.0 onward, the agave-unstable-api crate feature must be specified to acknowledge use of an interface that may break without warning.
Source

pub fn get_syscall_context_mut( &mut self, ) -> Result<&mut SyscallContext, InstructionError>

👎Deprecated since 3.1.0: This crate has been marked for formal inclusion in the Agave Unstable API. From v4.0.0 onward, the agave-unstable-api crate feature must be specified to acknowledge use of an interface that may break without warning.
Source

pub fn insert_register_trace(&mut self, register_trace: Vec<[u64; 12]>)

👎Deprecated since 3.1.0: This crate has been marked for formal inclusion in the Agave Unstable API. From v4.0.0 onward, the agave-unstable-api crate feature must be specified to acknowledge use of an interface that may break without warning.

Insert a VM register trace

Source

pub fn iterate_vm_traces( &self, callback: &dyn Fn(InstructionContext<'_, '_>, &Executable, RegisterTrace<'_>), )

👎Deprecated since 3.1.0: This crate has been marked for formal inclusion in the Agave Unstable API. From v4.0.0 onward, the agave-unstable-api crate feature must be specified to acknowledge use of an interface that may break without warning.

Iterates over all VM register traces (including CPI)

Trait Implementations§

Source§

impl ContextObject for InvokeContext<'_, '_>

Source§

fn consume(&mut self, amount: u64)

Consume instructions from meter
Source§

fn get_remaining(&self) -> u64

Get the number of remaining instructions allowed

Auto Trait Implementations§

§

impl<'a, 'ix_data> !Freeze for InvokeContext<'a, 'ix_data>

§

impl<'a, 'ix_data> !RefUnwindSafe for InvokeContext<'a, 'ix_data>

§

impl<'a, 'ix_data> !Send for InvokeContext<'a, 'ix_data>

§

impl<'a, 'ix_data> !Sync for InvokeContext<'a, 'ix_data>

§

impl<'a, 'ix_data> Unpin for InvokeContext<'a, 'ix_data>

§

impl<'a, 'ix_data> !UnwindSafe for InvokeContext<'a, 'ix_data>

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

Source§

type Output = T

Should always be Self
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