Crates.io | sov-modules-stf-template |
lib.rs | sov-modules-stf-template |
version | 0.3.0 |
source | src |
created_at | 2023-05-31 16:15:45.848908 |
updated_at | 2023-10-20 17:05:53.743087 |
description | Defines a generic state transition function for use with the Sovereign SDK module system |
homepage | https://www.sovereign.xyz |
repository | https://github.com/sovereign-labs/sovereign-sdk |
max_upload_size | |
id | 878953 |
size | 27,731 |
sov-default-stf
AppTemplate
This crate contains an implementation of a StateTransitionFunction
called AppTemplate
that is specifically designed to work with the Module System. The AppTemplate
relies on a set of traits that, when combined, define the logic for transitioning the rollup state.
DispatchCall
trait is responsible for decoding serialized messages and forwarding them to the appropriate module.Genesis
trait handles the initialization process of the rollup. It sets up the initial state upon the rollup deployment.TxHooks
& ApplyBlobHooks
traits that allow for the injection of custom logic into the transaction processing pipeline. They provide a mechanism to execute additional actions or perform specific operations during the transaction processing phase.Runtime
Both the DispatchCall
and Genesis
traits can be automatically derived (see RT
in the above snippet) for any set of modules:
#[derive(Genesis, DispatchCall, MessageCodec)]
#[serialization(borsh::BorshDeserialize, borsh::BorshSerialize)]
pub struct Runtime<C: Context> {
accounts: accounts::Accounts<C>,
bank: sov_bank::Bank<C>,
sequencer: sequencer::Sequencer<C>,
...
some other modules
}
The Runtime
struct acts as the entry point where all the rollup modules are assembled together. The #[derive]
macro generates the necessary implementations for the Genesis and DispatchCall
traits from the sov-module-api
crate.
To obtain an instance of the StateTransitionFunction
, you can pass aRuntime
, to the AppTemplate::new(..)
method. This ensures that the implementation of the StateTransitionFunction
is straightforward and does not require manual integration or complex setup steps.