Struct ckb_script::TransactionScriptsVerifier
source · pub struct TransactionScriptsVerifier<DL> { /* private fields */ }
Expand description
This struct leverages CKB VM to verify transaction inputs.
FlatBufferBuilder owned Vec<u8>
that grows as needed, in the
future, we might refactor this to share buffer to achieve zero-copy
Implementations§
source§impl<DL: CellDataProvider + HeaderProvider + ExtensionProvider + Send + Sync + Clone + 'static> TransactionScriptsVerifier<DL>
impl<DL: CellDataProvider + HeaderProvider + ExtensionProvider + Send + Sync + Clone + 'static> TransactionScriptsVerifier<DL>
sourcepub fn new(
rtx: Arc<ResolvedTransaction>,
data_loader: DL,
consensus: Arc<Consensus>,
tx_env: Arc<TxVerifyEnv>
) -> TransactionScriptsVerifier<DL>
pub fn new( rtx: Arc<ResolvedTransaction>, data_loader: DL, consensus: Arc<Consensus>, tx_env: Arc<TxVerifyEnv> ) -> TransactionScriptsVerifier<DL>
Creates a script verifier for the transaction.
Params
rtx
- transaction which cell out points have been resolved.data_loader
- used to load cell data.
sourcepub fn set_debug_printer<F: Fn(&Byte32, &str) + Sync + Send + 'static>(
&mut self,
func: F
)
pub fn set_debug_printer<F: Fn(&Byte32, &str) + Sync + Send + 'static>( &mut self, func: F )
Sets a callback to handle the debug syscall.
Script can print a message using the debug syscall.
The callback receives two parameters:
hash: &Byte32
: this is the script hash of currently running script group.message: &str
: message passed to the debug syscall.
sourcepub fn extract_script(&self, script: &Script) -> Result<Bytes, ScriptError>
pub fn extract_script(&self, script: &Script) -> Result<Bytes, ScriptError>
Extracts actual script binary either in dep cells.
sourcepub fn select_version(
&self,
script: &Script
) -> Result<ScriptVersion, ScriptError>
pub fn select_version( &self, script: &Script ) -> Result<ScriptVersion, ScriptError>
Returns the version of the machine based on the script and the consensus rules.
sourcepub fn resumable_verify(
&self,
limit_cycles: Cycle
) -> Result<VerifyResult, Error>
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.
sourcepub fn resume_from_snap(
&self,
snap: &TransactionSnapshot,
limit_cycles: Cycle
) -> Result<VerifyResult, Error>
pub fn resume_from_snap( &self, snap: &TransactionSnapshot, limit_cycles: Cycle ) -> Result<VerifyResult, Error>
Resuming an suspended verify from snapshot
Params
-
snap
- Captured transaction verification snapshot. -
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.
sourcepub fn resume_from_state(
&self,
state: TransactionState,
limit_cycles: Cycle
) -> Result<VerifyResult, Error>
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.
sourcepub fn complete(
&self,
snap: &TransactionSnapshot,
max_cycles: Cycle
) -> Result<Cycle, Error>
pub fn complete( &self, snap: &TransactionSnapshot, max_cycles: Cycle ) -> Result<Cycle, Error>
Complete an suspended verify
Params
-
snap
- Captured transaction verification snapshot. -
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.
sourcepub fn verify_single(
&self,
script_group_type: ScriptGroupType,
script_hash: &Byte32,
max_cycles: Cycle
) -> Result<Cycle, ScriptError>
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.
sourcepub fn groups(&self) -> impl Iterator<Item = (&Byte32, &ScriptGroup)>
pub fn groups(&self) -> impl Iterator<Item = (&Byte32, &ScriptGroup)>
Returns all script groups.
sourcepub fn groups_with_type(
&self
) -> impl Iterator<Item = (ScriptGroupType, &Byte32, &ScriptGroup)>
pub fn groups_with_type( &self ) -> impl Iterator<Item = (ScriptGroupType, &Byte32, &ScriptGroup)>
Returns all script groups with type.
sourcepub fn find_script_group(
&self,
script_group_type: ScriptGroupType,
script_hash: &Byte32
) -> Option<&ScriptGroup>
pub fn find_script_group( &self, script_group_type: ScriptGroupType, script_hash: &Byte32 ) -> Option<&ScriptGroup>
Finds the script group from cell deps.
sourcepub fn generate_syscalls(
&self,
script_version: ScriptVersion,
script_group: &ScriptGroup,
context: Arc<Mutex<MachineContext>>
) -> Vec<Box<dyn Syscalls<CoreMachine>>>
pub fn generate_syscalls( &self, script_version: ScriptVersion, script_group: &ScriptGroup, context: Arc<Mutex<MachineContext>> ) -> Vec<Box<dyn Syscalls<CoreMachine>>>
Prepares syscalls.