Struct TransactionScriptsVerifier

Source
pub struct TransactionScriptsVerifier<DL: CellDataProvider, V = DebugPrinter, M: DefaultMachineRunner = Machine> { /* private fields */ }
Expand description

This struct leverages CKB VM to verify transaction inputs.

Implementations§

Source§

impl<DL> TransactionScriptsVerifier<DL>

Source

pub fn new( rtx: Arc<ResolvedTransaction>, data_loader: DL, consensus: Arc<Consensus>, tx_env: Arc<TxVerifyEnv>, ) -> Self

Create a script verifier using default CKB syscalls and a default debug printer

Source

pub fn new_with_debug_printer( rtx: Arc<ResolvedTransaction>, data_loader: DL, consensus: Arc<Consensus>, tx_env: Arc<TxVerifyEnv>, debug_printer: DebugPrinter, ) -> Self

Create a script verifier using default CKB syscalls and a custom debug printer

Source§

impl<DL, V, M> TransactionScriptsVerifier<DL, V, M>

Source

pub fn new_with_generator( rtx: Arc<ResolvedTransaction>, data_loader: DL, consensus: Arc<Consensus>, tx_env: Arc<TxVerifyEnv>, syscall_generator: SyscallGenerator<DL, V, <M as DefaultMachineRunner>::Inner>, syscall_context: V, ) -> TransactionScriptsVerifier<DL, V, M>

Creates a script verifier for the transaction.

§Params
  • rtx - transaction which cell out points have been resolved.
  • data_loader - used to load cell data.
  • consensus - consensus parameters.
  • tx_env - enviroment for verifying transaction, such as committed block, etc.
  • syscall_generator - a syscall generator for current verifier
  • syscall_context - context for syscall generator
Source

pub fn extract_script(&self, script: &Script) -> Result<Bytes, ScriptError>

Extracts actual script binary either in dep cells.

Source

pub fn select_version( &self, script: &Script, ) -> Result<ScriptVersion, ScriptError>

Returns the version of the machine based on the script and the consensus rules.

Source

pub fn groups(&self) -> impl Iterator<Item = (&Byte32, &ScriptGroup)>

Returns all script groups.

Source

pub fn groups_with_type( &self, ) -> impl Iterator<Item = (ScriptGroupType, &Byte32, &ScriptGroup)>

Returns all script groups with type.

Source

pub fn find_script_group( &self, script_group_type: ScriptGroupType, script_hash: &Byte32, ) -> Option<&ScriptGroup>

Finds the script group from cell deps.

Source

pub fn verify(&self, max_cycles: Cycle) -> Result<Cycle, Error>

Verifies the transaction by running scripts.

§Params
  • max_cycles - Maximum allowed cycles to run the scripts. The verification quits early when the consumed cycles exceed the limit.
§Returns

It returns the total consumed cycles on success, Otherwise it returns the verification error.

Source

pub fn resumable_verify( &self, limit_cycles: Cycle, ) -> Result<VerifyResult, Error>

Performing a resumable verification on the transaction scripts.

§Params
  • limit_cycles - Maximum allowed cycles to run the scripts. The verification quits early when the consumed cycles exceed the limit.
§Returns

It returns the total consumed cycles if verification completed, If verify is suspended, a state will returned.

Source

pub fn resume_from_state( &self, state: &TransactionState, limit_cycles: Cycle, ) -> Result<VerifyResult, Error>

Resuming an suspended verify from vm state

§Params
  • state - vm state.

  • limit_cycles - Maximum allowed cycles to run the scripts. The verification quits early when the consumed cycles exceed the limit.

§Returns

It returns the total consumed cycles if verification completed, If verify is suspended, a borrowed state will returned.

Source

pub fn complete( &self, snap: &TransactionState, max_cycles: Cycle, ) -> Result<Cycle, Error>

Complete an suspended verify

§Params
  • snap - Captured transaction verification state.

  • max_cycles - Maximum allowed cycles to run the scripts. The verification quits early when the consumed cycles exceed the limit.

§Returns

It returns the total consumed cycles on completed, Otherwise it returns the verification error.

Source

pub fn verify_single( &self, script_group_type: ScriptGroupType, script_hash: &Byte32, max_cycles: Cycle, ) -> Result<Cycle, ScriptError>

Runs a single script in current transaction, while this is not useful for CKB itself, it can be very helpful when building a CKB debugger.

Source

pub fn create_scheduler( &self, script_group: &ScriptGroup, ) -> Result<Scheduler<DL, V, M>, ScriptError>

Create a scheduler to manage virtual machine instances.

Source

pub fn resume_scheduler( &self, script_group: &ScriptGroup, state: &FullSuspendedState, ) -> Result<Scheduler<DL, V, M>, ScriptError>

Resumes a scheduler from a previous state.

Source

pub fn detailed_run( &self, script_group: &ScriptGroup, max_cycles: Cycle, ) -> Result<TerminatedResult, ScriptError>

Runs a single program, then returns the exit code together with the entire machine to the caller for more inspections.

Source§

impl<DL, V, M> TransactionScriptsVerifier<DL, V, M>
where DL: CellDataProvider + HeaderProvider + ExtensionProvider + Send + Sync + Clone + 'static, V: Send + Clone + 'static, M: DefaultMachineRunner + Send + 'static,

Source

pub async fn resumable_verify_with_signal( &self, limit_cycles: Cycle, command_rx: &mut Receiver<ChunkCommand>, ) -> Result<Cycle, Error>

Performing a resumable verification on the transaction scripts with signal channel, if Suspend comes from command_rx, the process will be hang up until Resume comes, otherwise, it will return until the verification is completed.

Auto Trait Implementations§

§

impl<DL, V, M> Freeze for TransactionScriptsVerifier<DL, V, M>
where V: Freeze,

§

impl<DL, V, M> RefUnwindSafe for TransactionScriptsVerifier<DL, V, M>

§

impl<DL, V, M> Send for TransactionScriptsVerifier<DL, V, M>
where V: Send, DL: Sync + Send,

§

impl<DL, V, M> Sync for TransactionScriptsVerifier<DL, V, M>
where V: Sync, DL: Sync + Send,

§

impl<DL, V, M> Unpin for TransactionScriptsVerifier<DL, V, M>
where V: Unpin,

§

impl<DL, V, M> UnwindSafe for TransactionScriptsVerifier<DL, V, M>
where V: UnwindSafe, DL: RefUnwindSafe,

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> AsAny for T
where T: Any,

Source§

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

Cast to trait Any
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