Struct massa_execution_worker::execution::ExecutionState

source ·
pub(crate) struct ExecutionState {
Show 15 fields config: ExecutionConfig, pub active_history: Arc<RwLock<ActiveHistory>>, pub active_cursor: Slot, pub final_cursor: Slot, final_events_cache: Box<dyn EventCacheController>, final_state: Arc<RwLock<dyn FinalStateController>>, execution_context: Arc<Mutex<ExecutionContext>>, execution_interface: Box<dyn Interface>, stats_counter: ExecutionStatsCounter, pub module_cache: Arc<RwLock<ModuleCache>>, mip_store: MipStore, wallet: Arc<RwLock<Wallet>>, selector: Box<dyn SelectorController>, channels: ExecutionChannels, massa_metrics: MassaMetrics,
}
Expand description

Structure holding consistent speculative and final execution states, and allowing access to them.

Fields§

§config: ExecutionConfig§active_history: Arc<RwLock<ActiveHistory>>§active_cursor: Slot§final_cursor: Slot§final_events_cache: Box<dyn EventCacheController>§final_state: Arc<RwLock<dyn FinalStateController>>§execution_context: Arc<Mutex<ExecutionContext>>§execution_interface: Box<dyn Interface>§stats_counter: ExecutionStatsCounter§module_cache: Arc<RwLock<ModuleCache>>§mip_store: MipStore§wallet: Arc<RwLock<Wallet>>§selector: Box<dyn SelectorController>§channels: ExecutionChannels§massa_metrics: MassaMetrics

prometheus metrics

Implementations§

source§

impl ExecutionState

source

pub fn new( config: ExecutionConfig, final_state: Arc<RwLock<dyn FinalStateController>>, mip_store: MipStore, selector: Box<dyn SelectorController>, channels: ExecutionChannels, wallet: Arc<RwLock<Wallet>>, massa_metrics: MassaMetrics, event_cache: Box<dyn EventCacheController>, ) -> ExecutionState

Create a new execution state. This should be called only once at the start of the execution worker.

§Arguments
  • config: execution configuration
  • final_state: atomic access to the final state
§returns

A new ExecutionState

source

pub fn get_final_state_fingerprint(&self) -> Hash

Get the fingerprint of the final state

source

pub fn get_stats(&self) -> ExecutionStats

Get execution statistics

source

pub fn apply_final_execution_output(&mut self, exec_out: ExecutionOutput)

Applies the output of an execution to the final execution state. The newly applied final output should be from the slot just after the last executed final slot

§Arguments
  • exec_out: execution output to apply
source

pub fn apply_active_execution_output(&mut self, exec_out: ExecutionOutput)

Applies an execution output to the active (non-final) state The newly active final output should be from the slot just after the last executed active slot

§Arguments
  • exec_out: execution output to apply
source

fn prepare_operation_for_execution( &self, operation: &SecureShareOperation, sender_addr: Address, ) -> Result<ExecutionContextSnapshot, ExecutionError>

Helper function. Within a locked execution context (lock is taken at the beginning of the function then released at the end):

  • if not yet executed then transfer fee and add the operation to the context then return a context snapshot
§Arguments
  • operation: operation to be schedule
  • sender_addr: sender address for the operation (for fee transfer)
source

pub fn execute_operation( &self, operation: &SecureShareOperation, block_slot: Slot, remaining_block_gas: &mut u64, block_credits: &mut Amount, ) -> Result<(), ExecutionError>

Execute an operation in the context of a block. Assumes the execution context was initialized at the beginning of the slot.

§Arguments
  • operation: operation to execute
  • block_slot: slot of the block in which the op is included
  • remaining_block_gas: mutable reference towards the remaining gas in the block
  • block_credits: mutable reference towards the total block reward/fee credits
source

fn execute_denunciation( &self, denunciation: &Denunciation, block_slot: &Slot, block_credits: &mut Amount, ) -> Result<DenunciationResult, ExecutionError>

Execute a denunciation in the context of a block.

§Arguments
  • denunciation: denunciation to process
  • block_credits: mutable reference towards the total block reward/fee credits
source

pub fn execute_roll_sell_op( &self, operation: &OperationType, seller_addr: Address, operation_id: OperationId, ) -> Result<(), ExecutionError>

Execute an operation of type RollSell Will panic if called with another operation type

§Arguments
  • operation: the WrappedOperation to process, must be an RollSell
  • sender_addr: address of the sender
source

pub fn execute_roll_buy_op( &self, operation: &OperationType, buyer_addr: Address, operation_id: OperationId, ) -> Result<(), ExecutionError>

Execute an operation of type RollBuy Will panic if called with another operation type

§Arguments
  • operation: the WrappedOperation to process, must be an RollBuy
  • buyer_addr: address of the buyer
source

pub fn execute_transaction_op( &self, operation: &OperationType, sender_addr: Address, operation_id: OperationId, ) -> Result<(), ExecutionError>

Execute an operation of type Transaction Will panic if called with another operation type

§Arguments
  • operation: the WrappedOperation to process, must be a Transaction
  • operation_id: ID of the operation
  • sender_addr: address of the sender
source

pub fn execute_executesc_op( &self, operation: &OperationType, sender_addr: Address, ) -> Result<(), ExecutionError>

Execute an operation of type ExecuteSC Will panic if called with another operation type

§Arguments
  • operation: the WrappedOperation to process, must be an ExecuteSC
  • sender_addr: address of the sender
source

pub fn execute_callsc_op( &self, operation: &OperationType, sender_addr: Address, operation_id: OperationId, ) -> Result<(), ExecutionError>

Execute an operation of type CallSC Will panic if called with another operation type

§Arguments
  • operation: the WrappedOperation to process, must be an CallSC
  • block_creator_addr: address of the block creator
  • operation_id: ID of the operation
  • sender_addr: address of the sender
source

pub fn execute_async_message( &self, message: AsyncMessage, bytecode: Option<Bytecode>, ) -> Result<AsyncMessageExecutionResult, ExecutionError>

Tries to execute an asynchronous message If the execution failed reimburse the message sender.

§Arguments
  • message: message information
  • bytecode: executable target bytecode, or None if unavailable
source

fn execute_deferred_call( &self, id: &DeferredCallId, call: DeferredCall, ) -> Result<DeferredCallExecutionResult, ExecutionError>

source

pub fn execute_slot( &mut self, slot: &Slot, exec_target: Option<&(BlockId, ExecutionBlockMetadata)>, selector: Box<dyn SelectorController>, ) -> ExecutionOutput

Executes a full slot (with or without a block inside) without causing any changes to the state, just yielding the execution output.

§Arguments
  • slot: slot to execute
  • exec_target: metadata of the block to execute, if not miss
  • selector: Reference to the selector
§Returns

An ExecutionOutput structure summarizing the output of the executed slot

source

pub fn execute_candidate_slot( &mut self, slot: &Slot, exec_target: Option<&(BlockId, ExecutionBlockMetadata)>, selector: Box<dyn SelectorController>, )

Execute a candidate slot

source

pub fn execute_final_slot( &mut self, slot: &Slot, exec_target: Option<&(BlockId, ExecutionBlockMetadata)>, selector: Box<dyn SelectorController>, )

Execute an SCE-final slot

source

pub(crate) fn execute_readonly_request( &self, req: ReadOnlyExecutionRequest, ) -> Result<ReadOnlyExecutionOutput, ExecutionError>

Runs a read-only execution request. The executed bytecode appears to be able to read and write the consensus state, but all accumulated changes are simply returned as an ExecutionOutput object, and not actually applied to the consensus state.

§Arguments
  • req: a read-only execution request
§Returns

ExecutionOutput describing the output of the execution, or an error

source

pub fn get_final_and_candidate_balance( &self, address: &Address, ) -> (Option<Amount>, Option<Amount>)

Gets a balance both at the latest final and candidate executed slots

source

pub fn get_final_and_active_bytecode( &self, address: &Address, ) -> (Option<Bytecode>, Option<Bytecode>)

Gets a balance both at the latest final and candidate executed slots

source

pub fn get_final_and_candidate_rolls(&self, address: &Address) -> (u64, u64)

Gets roll counts both at the latest final and active executed slots

source

pub fn get_final_and_active_data_entry( &self, address: &Address, key: &[u8], ) -> (Option<Vec<u8>>, Option<Vec<u8>>)

Gets a data entry both at the latest final and active executed slots

source

pub fn get_final_datastore_keys( &self, addr: &Address, prefix: &[u8], start_key: Bound<Vec<u8>>, end_key: Bound<Vec<u8>>, count: Option<u32>, ) -> Option<BTreeSet<Vec<u8>>>

source

pub fn get_final_and_candidate_datastore_keys( &self, addr: &Address, prefix: &[u8], start_key: Bound<Vec<u8>>, end_key: Bound<Vec<u8>>, count: Option<u32>, ) -> (Option<BTreeSet<Vec<u8>>>, Option<BTreeSet<Vec<u8>>>)

Get every final and active datastore key of the given address

source

pub fn get_address_cycle_infos( &self, address: &Address, ) -> Vec<ExecutionAddressCycleInfo>

source

pub fn get_cycle_active_rolls(&self, cycle: u64) -> BTreeMap<Address, u64>

Returns for a given cycle the stakers taken into account by the selector. That correspond to the roll_counts in cycle - 3.

By default it returns an empty map.

source

pub fn get_filtered_sc_output_event( &self, filter: EventFilter, ) -> Vec<SCOutputEvent>

Gets execution events optionally filtered by:

  • start slot
  • end slot
  • emitter address
  • original caller address
  • operation id
  • event state (final, candidate or both)
source

pub fn get_denunciation_execution_status( &self, denunciation_index: &DenunciationIndex, ) -> (bool, bool)

Check if a denunciation has been executed given a DenunciationIndex Returns a tuple of booleans:

  • first boolean is true if the denunciation has been executed speculatively
  • second boolean is true if the denunciation has been executed in the final state
source

pub fn get_cycle_infos( &self, cycle: u64, restrict_to_addresses: Option<&PreHashSet<Address>>, ) -> Option<ExecutionQueryCycleInfos>

Get cycle infos

source

pub fn get_address_future_deferred_credits( &self, address: &Address, max_slot: Bound<Slot>, ) -> BTreeMap<Slot, Amount>

Get future deferred credits of an address

source

pub fn get_address_deferred_credits( &self, address: &Address, ) -> (BTreeMap<Slot, Amount>, BTreeMap<Slot, Amount>)

Get future deferred credits of an address Returns tuple: (speculative, final)

source

pub fn get_ops_exec_status( &self, batch: &[OperationId], ) -> Vec<(Option<bool>, Option<bool>)>

Get the execution status of a batch of operations.

Return value: vector of (Option<speculative_status>, Option<final_status>) If an Option is None it means that the op execution was not found. Note that old op executions are forgotten. Otherwise, the status is a boolean indicating whether the execution was successful (true) or if there was an error (false.)

source

pub fn update_versioning_stats( &mut self, block_info: &Option<ExecutedBlockInfo>, slot: &Slot, )

Update MipStore with block header stats

source

pub fn deferred_call_quote( &self, target_slot: Slot, max_request_gas: u64, params_size: u64, ) -> (Slot, u64, bool, Amount)

source

pub fn deferred_call_info( &self, call_id: &DeferredCallId, ) -> Option<DeferredCall>

source

pub fn get_deferred_calls_by_slot(&self, slot: Slot) -> Vec<DeferredCallId>

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
§

impl<T> ArchivePointee for T

§

type ArchivedMetadata = ()

The archived version of the pointer metadata for this type.
§

fn pointer_metadata( _: &<T as ArchivePointee>::ArchivedMetadata, ) -> <T as Pointee>::Metadata

Converts some archived metadata to the pointer metadata for itself.
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
§

impl<T> Conv for T

§

fn conv<T>(self) -> T
where Self: Into<T>,

Converts self into T using Into<T>. Read more
§

impl<F, W, T, D> Deserialize<With<T, W>, D> for F
where W: DeserializeWith<F, T, D>, D: Fallible + ?Sized, F: ?Sized,

§

fn deserialize( &self, deserializer: &mut D, ) -> Result<With<T, W>, <D as Fallible>::Error>

Deserializes using the given deserializer
§

impl<T> FmtForward for T

§

fn fmt_binary(self) -> FmtBinary<Self>
where Self: Binary,

Causes self to use its Binary implementation when Debug-formatted.
§

fn fmt_display(self) -> FmtDisplay<Self>
where Self: Display,

Causes self to use its Display implementation when Debug-formatted.
§

fn fmt_lower_exp(self) -> FmtLowerExp<Self>
where Self: LowerExp,

Causes self to use its LowerExp implementation when Debug-formatted.
§

fn fmt_lower_hex(self) -> FmtLowerHex<Self>
where Self: LowerHex,

Causes self to use its LowerHex implementation when Debug-formatted.
§

fn fmt_octal(self) -> FmtOctal<Self>
where Self: Octal,

Causes self to use its Octal implementation when Debug-formatted.
§

fn fmt_pointer(self) -> FmtPointer<Self>
where Self: Pointer,

Causes self to use its Pointer implementation when Debug-formatted.
§

fn fmt_upper_exp(self) -> FmtUpperExp<Self>
where Self: UpperExp,

Causes self to use its UpperExp implementation when Debug-formatted.
§

fn fmt_upper_hex(self) -> FmtUpperHex<Self>
where Self: UpperHex,

Causes self to use its UpperHex implementation when Debug-formatted.
§

fn fmt_list(self) -> FmtList<Self>
where &'a Self: for<'a> IntoIterator,

Formats each item in a sequence. Read more
source§

impl<T> From<T> for T

source§

fn from(t: T) -> T

Returns the argument unchanged.

§

impl<T> Instrument for T

§

fn instrument(self, span: Span) -> Instrumented<Self>

Instruments this type with the provided [Span], returning an Instrumented wrapper. Read more
§

fn in_current_span(self) -> Instrumented<Self>

Instruments this type with the current Span, returning an Instrumented wrapper. Read more
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> IntoRequest<T> for T

source§

fn into_request(self) -> Request<T>

Wrap the input message T in a tonic::Request
§

impl<T> LayoutRaw for T

§

fn layout_raw(_: <T as Pointee>::Metadata) -> Result<Layout, LayoutError>

Gets the layout of the type.
§

impl<T> Pipe for T
where T: ?Sized,

§

fn pipe<R>(self, func: impl FnOnce(Self) -> R) -> R
where Self: Sized,

Pipes by value. This is generally the method you want to use. Read more
§

fn pipe_ref<'a, R>(&'a self, func: impl FnOnce(&'a Self) -> R) -> R
where R: 'a,

Borrows self and passes that borrow into the pipe function. Read more
§

fn pipe_ref_mut<'a, R>(&'a mut self, func: impl FnOnce(&'a mut Self) -> R) -> R
where R: 'a,

Mutably borrows self and passes that borrow into the pipe function. Read more
§

fn pipe_borrow<'a, B, R>(&'a self, func: impl FnOnce(&'a B) -> R) -> R
where Self: Borrow<B>, B: 'a + ?Sized, R: 'a,

Borrows self, then passes self.borrow() into the pipe function. Read more
§

fn pipe_borrow_mut<'a, B, R>( &'a mut self, func: impl FnOnce(&'a mut B) -> R, ) -> R
where Self: BorrowMut<B>, B: 'a + ?Sized, R: 'a,

Mutably borrows self, then passes self.borrow_mut() into the pipe function. Read more
§

fn pipe_as_ref<'a, U, R>(&'a self, func: impl FnOnce(&'a U) -> R) -> R
where Self: AsRef<U>, U: 'a + ?Sized, R: 'a,

Borrows self, then passes self.as_ref() into the pipe function.
§

fn pipe_as_mut<'a, U, R>(&'a mut self, func: impl FnOnce(&'a mut U) -> R) -> R
where Self: AsMut<U>, U: 'a + ?Sized, R: 'a,

Mutably borrows self, then passes self.as_mut() into the pipe function.
§

fn pipe_deref<'a, T, R>(&'a self, func: impl FnOnce(&'a T) -> R) -> R
where Self: Deref<Target = T>, T: 'a + ?Sized, R: 'a,

Borrows self, then passes self.deref() into the pipe function.
§

fn pipe_deref_mut<'a, T, R>( &'a mut self, func: impl FnOnce(&'a mut T) -> R, ) -> R
where Self: DerefMut<Target = T> + Deref, T: 'a + ?Sized, R: 'a,

Mutably borrows self, then passes self.deref_mut() into the pipe function.
§

impl<T> Pointable for T

§

const ALIGN: usize = _

The alignment of pointer.
§

type Init = T

The type for initializers.
§

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

Initializes a with the given initializer. Read more
§

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

Dereferences the given pointer. Read more
§

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

Mutably dereferences the given pointer. Read more
§

unsafe fn drop(ptr: usize)

Drops the object pointed to by the given pointer. Read more
§

impl<T> Pointee for T

§

type Metadata = ()

The type for metadata in pointers and references to Self.
source§

impl<T> Same for T

§

type Output = T

Should always be Self
§

impl<T> Tap for T

§

fn tap(self, func: impl FnOnce(&Self)) -> Self

Immutable access to a value. Read more
§

fn tap_mut(self, func: impl FnOnce(&mut Self)) -> Self

Mutable access to a value. Read more
§

fn tap_borrow<B>(self, func: impl FnOnce(&B)) -> Self
where Self: Borrow<B>, B: ?Sized,

Immutable access to the Borrow<B> of a value. Read more
§

fn tap_borrow_mut<B>(self, func: impl FnOnce(&mut B)) -> Self
where Self: BorrowMut<B>, B: ?Sized,

Mutable access to the BorrowMut<B> of a value. Read more
§

fn tap_ref<R>(self, func: impl FnOnce(&R)) -> Self
where Self: AsRef<R>, R: ?Sized,

Immutable access to the AsRef<R> view of a value. Read more
§

fn tap_ref_mut<R>(self, func: impl FnOnce(&mut R)) -> Self
where Self: AsMut<R>, R: ?Sized,

Mutable access to the AsMut<R> view of a value. Read more
§

fn tap_deref<T>(self, func: impl FnOnce(&T)) -> Self
where Self: Deref<Target = T>, T: ?Sized,

Immutable access to the Deref::Target of a value. Read more
§

fn tap_deref_mut<T>(self, func: impl FnOnce(&mut T)) -> Self
where Self: DerefMut<Target = T> + Deref, T: ?Sized,

Mutable access to the Deref::Target of a value. Read more
§

fn tap_dbg(self, func: impl FnOnce(&Self)) -> Self

Calls .tap() only in debug builds, and is erased in release builds.
§

fn tap_mut_dbg(self, func: impl FnOnce(&mut Self)) -> Self

Calls .tap_mut() only in debug builds, and is erased in release builds.
§

fn tap_borrow_dbg<B>(self, func: impl FnOnce(&B)) -> Self
where Self: Borrow<B>, B: ?Sized,

Calls .tap_borrow() only in debug builds, and is erased in release builds.
§

fn tap_borrow_mut_dbg<B>(self, func: impl FnOnce(&mut B)) -> Self
where Self: BorrowMut<B>, B: ?Sized,

Calls .tap_borrow_mut() only in debug builds, and is erased in release builds.
§

fn tap_ref_dbg<R>(self, func: impl FnOnce(&R)) -> Self
where Self: AsRef<R>, R: ?Sized,

Calls .tap_ref() only in debug builds, and is erased in release builds.
§

fn tap_ref_mut_dbg<R>(self, func: impl FnOnce(&mut R)) -> Self
where Self: AsMut<R>, R: ?Sized,

Calls .tap_ref_mut() only in debug builds, and is erased in release builds.
§

fn tap_deref_dbg<T>(self, func: impl FnOnce(&T)) -> Self
where Self: Deref<Target = T>, T: ?Sized,

Calls .tap_deref() only in debug builds, and is erased in release builds.
§

fn tap_deref_mut_dbg<T>(self, func: impl FnOnce(&mut T)) -> Self
where Self: DerefMut<Target = T> + Deref, T: ?Sized,

Calls .tap_deref_mut() only in debug builds, and is erased in release builds.
§

impl<T> TryConv for T

§

fn try_conv<T>(self) -> Result<T, Self::Error>
where Self: TryInto<T>,

Attempts to convert self into T using TryInto<T>. Read more
source§

impl<T, U> TryFrom<U> for T
where U: Into<T>,

§

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>,

§

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.
§

impl<T> Upcastable for T
where T: Any + Send + Sync + 'static,

§

fn upcast_any_ref(&self) -> &(dyn Any + 'static)

upcast ref
§

fn upcast_any_mut(&mut self) -> &mut (dyn Any + 'static)

upcast mut ref
§

fn upcast_any_box(self: Box<T>) -> Box<dyn Any>

upcast boxed dyn
§

impl<V, T> VZip<V> for T
where V: MultiLane<T>,

§

fn vzip(self) -> V

§

impl<T> WithSubscriber for T

§

fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self>
where S: Into<Dispatch>,

Attaches the provided Subscriber to this type, returning a [WithDispatch] wrapper. Read more
§

fn with_current_subscriber(self) -> WithDispatch<Self>

Attaches the current default Subscriber to this type, returning a [WithDispatch] wrapper. Read more
§

impl<T> ErasedDestructor for T
where T: 'static,

§

impl<T> MaybeSendSync for T