#state-transition #rollup #module #system #sovereign #blockchain #distributed-systems

sov-modules-stf-template

Defines a generic state transition function for use with the Sovereign SDK module system

3 releases (breaking)

0.3.0 Oct 20, 2023
0.2.0 Sep 14, 2023
0.1.0 May 31, 2023

#24 in #state-transition

38 downloads per month
Used in sov-modules-rollup-templa…

MIT/Apache

300KB
6K SLoC

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.

  1. The DispatchCall trait is responsible for decoding serialized messages and forwarding them to the appropriate module.
  2. The Genesis trait handles the initialization process of the rollup. It sets up the initial state upon the rollup deployment.
  3. The 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.

Dependencies

~7–27MB
~418K SLoC