use crate::{CallResponse, Context, Error, Spec};
use sov_state::WorkingSet;
pub trait Genesis {
type Context: Context;
type Config;
fn genesis(
&self,
config: &Self::Config,
working_set: &mut WorkingSet<<<Self as Genesis>::Context as Spec>::Storage>,
) -> Result<(), Error>;
}
pub trait DispatchCall {
type Context: Context;
type Decodable;
fn decode_call(serialized_message: &[u8]) -> Result<Self::Decodable, std::io::Error>;
fn dispatch_call(
&self,
message: Self::Decodable,
working_set: &mut WorkingSet<<<Self as DispatchCall>::Context as Spec>::Storage>,
context: &Self::Context,
) -> Result<CallResponse, Error>;
fn module_address(&self, message: &Self::Decodable) -> &<Self::Context as Spec>::Address;
}