pub trait DeterministicState: Sized + Send + Sync + Clone + 'static {
type Action: Sized + Send + Sync + 'static;
type AuthorityAction: Sized + Clone + Send + Sync + 'static;
fn accept_seq(&self) -> u64;
fn authority(&self, action: Self::Action) -> Self::AuthorityAction;
fn update(&mut self, action: &Self::AuthorityAction);
}