pub struct SingletonDriver<S> { /* private fields */ }Expand description
Core driver for Action Layer singletons.
Generic over the state type S. Handles common singleton operations:
- Launching
- Building action spends
- State/lineage tracking
- Proof generation
Specific singleton implementations (NetworkSingleton, CollateralSingleton, etc.) wrap this driver and expose typed action methods.
Implementations§
Source§impl<S> SingletonDriver<S>
impl<S> SingletonDriver<S>
Sourcepub fn new(action_hashes: Vec<Bytes32>, hint: Bytes32, initial_state: S) -> Self
pub fn new(action_hashes: Vec<Bytes32>, hint: Bytes32, initial_state: S) -> Self
Create a driver for a new singleton (not yet launched)
Sourcepub fn from_coin(
singleton: SingletonCoin,
state: S,
action_hashes: Vec<Bytes32>,
hint: Bytes32,
) -> Self
pub fn from_coin( singleton: SingletonCoin, state: S, action_hashes: Vec<Bytes32>, hint: Bytes32, ) -> Self
Create a driver for an existing on-chain singleton
Sourcepub fn launcher_id(&self) -> Option<Bytes32>
pub fn launcher_id(&self) -> Option<Bytes32>
Get the launcher ID (None if not launched)
Sourcepub fn current_coin(&self) -> Option<&Coin>
pub fn current_coin(&self) -> Option<&Coin>
Get the current coin (None if not launched or melted)
Sourcepub fn is_launched(&self) -> bool
pub fn is_launched(&self) -> bool
Check if the singleton has been launched
Sourcepub fn action_config(&self) -> &ActionLayerConfig<S>
pub fn action_config(&self) -> &ActionLayerConfig<S>
Get the action layer config
Sourcepub fn inner_puzzle_hash(&self) -> TreeHash
pub fn inner_puzzle_hash(&self) -> TreeHash
Compute the inner puzzle hash for the current state
Sourcepub fn inner_puzzle_hash_for_state(&self, state: &S) -> TreeHash
pub fn inner_puzzle_hash_for_state(&self, state: &S) -> TreeHash
Compute the inner puzzle hash for a given state
Sourcepub fn singleton_puzzle_hash(&self) -> Option<TreeHash>
pub fn singleton_puzzle_hash(&self) -> Option<TreeHash>
Compute the full singleton puzzle hash (None if not launched)
Sourcepub fn singleton_puzzle_hash_for_state(&self, state: &S) -> Option<TreeHash>
pub fn singleton_puzzle_hash_for_state(&self, state: &S) -> Option<TreeHash>
Compute singleton puzzle hash for a given state
Sourcepub fn update_action_hashes(&mut self, action_hashes: Vec<Bytes32>)
pub fn update_action_hashes(&mut self, action_hashes: Vec<Bytes32>)
Update action hashes (needed after launch when network_id becomes known)
Sourcepub fn launch(
&mut self,
ctx: &mut SpendContext,
funding_coin: &Coin,
amount: u64,
) -> Result<LaunchResult, DriverError>
pub fn launch( &mut self, ctx: &mut SpendContext, funding_coin: &Coin, amount: u64, ) -> Result<LaunchResult, DriverError>
Launch the singleton
Creates the launcher spend in the context. Returns the launcher ID and conditions to be included in the funding coin spend.
Sourcepub fn build_action_spend(
&self,
ctx: &mut SpendContext,
action_index: usize,
action_puzzle: NodePtr,
action_solution: NodePtr,
) -> Result<(), DriverError>
pub fn build_action_spend( &self, ctx: &mut SpendContext, action_index: usize, action_puzzle: NodePtr, action_solution: NodePtr, ) -> Result<(), DriverError>
Build an action spend.
Adds the singleton spend to the context. Does NOT update internal state -
call apply_spend() after the transaction confirms.
§Arguments
ctx- Spend contextaction_index- Index of the action in the merkle treeaction_puzzle- The curried action puzzle (NodePtr)action_solution- The action solution (NodePtr)
Sourcepub fn apply_spend(&mut self, new_state: S)
pub fn apply_spend(&mut self, new_state: S)
Update internal state after a spend confirms.
Call this after the transaction is confirmed on chain.
Sourcepub fn mark_melted(&mut self)
pub fn mark_melted(&mut self)
Mark the singleton as melted (destroyed).
Call this after a melt action (like withdraw) confirms.
Sourcepub fn expected_new_coin(&self, new_state: &S) -> Option<Coin>
pub fn expected_new_coin(&self, new_state: &S) -> Option<Coin>
Compute the expected new coin after a spend with given new state
Sourcepub fn expected_child_launcher_id(&self) -> Option<Bytes32>
pub fn expected_child_launcher_id(&self) -> Option<Bytes32>
Compute the expected child launcher ID for a child singleton emitted by the current singleton
Trait Implementations§
Auto Trait Implementations§
impl<S> Freeze for SingletonDriver<S>where
S: Freeze,
impl<S> RefUnwindSafe for SingletonDriver<S>where
S: RefUnwindSafe,
impl<S> Send for SingletonDriver<S>where
S: Send,
impl<S> Sync for SingletonDriver<S>where
S: Sync,
impl<S> Unpin for SingletonDriver<S>where
S: Unpin,
impl<S> UnwindSafe for SingletonDriver<S>where
S: UnwindSafe,
Blanket Implementations§
Source§impl<'a, T, E> AsTaggedExplicit<'a, E> for Twhere
T: 'a,
impl<'a, T, E> AsTaggedExplicit<'a, E> for Twhere
T: 'a,
Source§impl<'a, T, E> AsTaggedImplicit<'a, E> for Twhere
T: 'a,
impl<'a, T, E> AsTaggedImplicit<'a, E> for Twhere
T: 'a,
Source§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
Source§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
Source§impl<T> FmtForward for T
impl<T> FmtForward for T
Source§fn fmt_binary(self) -> FmtBinary<Self>where
Self: Binary,
fn fmt_binary(self) -> FmtBinary<Self>where
Self: Binary,
self to use its Binary implementation when Debug-formatted.Source§fn fmt_display(self) -> FmtDisplay<Self>where
Self: Display,
fn fmt_display(self) -> FmtDisplay<Self>where
Self: Display,
self to use its Display implementation when
Debug-formatted.Source§fn fmt_lower_exp(self) -> FmtLowerExp<Self>where
Self: LowerExp,
fn fmt_lower_exp(self) -> FmtLowerExp<Self>where
Self: LowerExp,
self to use its LowerExp implementation when
Debug-formatted.Source§fn fmt_lower_hex(self) -> FmtLowerHex<Self>where
Self: LowerHex,
fn fmt_lower_hex(self) -> FmtLowerHex<Self>where
Self: LowerHex,
self to use its LowerHex implementation when
Debug-formatted.Source§fn fmt_octal(self) -> FmtOctal<Self>where
Self: Octal,
fn fmt_octal(self) -> FmtOctal<Self>where
Self: Octal,
self to use its Octal implementation when Debug-formatted.Source§fn fmt_pointer(self) -> FmtPointer<Self>where
Self: Pointer,
fn fmt_pointer(self) -> FmtPointer<Self>where
Self: Pointer,
self to use its Pointer implementation when
Debug-formatted.Source§fn fmt_upper_exp(self) -> FmtUpperExp<Self>where
Self: UpperExp,
fn fmt_upper_exp(self) -> FmtUpperExp<Self>where
Self: UpperExp,
self to use its UpperExp implementation when
Debug-formatted.Source§fn fmt_upper_hex(self) -> FmtUpperHex<Self>where
Self: UpperHex,
fn fmt_upper_hex(self) -> FmtUpperHex<Self>where
Self: UpperHex,
self to use its UpperHex implementation when
Debug-formatted.Source§impl<T> Instrument for T
impl<T> Instrument for T
Source§fn instrument(self, span: Span) -> Instrumented<Self>
fn instrument(self, span: Span) -> Instrumented<Self>
Source§fn in_current_span(self) -> Instrumented<Self>
fn in_current_span(self) -> Instrumented<Self>
Source§impl<T> Pipe for Twhere
T: ?Sized,
impl<T> Pipe for Twhere
T: ?Sized,
Source§fn pipe<R>(self, func: impl FnOnce(Self) -> R) -> Rwhere
Self: Sized,
fn pipe<R>(self, func: impl FnOnce(Self) -> R) -> Rwhere
Self: Sized,
Source§fn pipe_ref<'a, R>(&'a self, func: impl FnOnce(&'a Self) -> R) -> Rwhere
R: 'a,
fn pipe_ref<'a, R>(&'a self, func: impl FnOnce(&'a Self) -> R) -> Rwhere
R: 'a,
self and passes that borrow into the pipe function. Read moreSource§fn pipe_ref_mut<'a, R>(&'a mut self, func: impl FnOnce(&'a mut Self) -> R) -> Rwhere
R: 'a,
fn pipe_ref_mut<'a, R>(&'a mut self, func: impl FnOnce(&'a mut Self) -> R) -> Rwhere
R: 'a,
self and passes that borrow into the pipe function. Read moreSource§fn pipe_borrow<'a, B, R>(&'a self, func: impl FnOnce(&'a B) -> R) -> R
fn pipe_borrow<'a, B, R>(&'a self, func: impl FnOnce(&'a B) -> R) -> R
Source§fn pipe_borrow_mut<'a, B, R>(
&'a mut self,
func: impl FnOnce(&'a mut B) -> R,
) -> R
fn pipe_borrow_mut<'a, B, R>( &'a mut self, func: impl FnOnce(&'a mut B) -> R, ) -> R
Source§fn pipe_as_ref<'a, U, R>(&'a self, func: impl FnOnce(&'a U) -> R) -> R
fn pipe_as_ref<'a, U, R>(&'a self, func: impl FnOnce(&'a U) -> R) -> R
self, then passes self.as_ref() into the pipe function.Source§fn pipe_as_mut<'a, U, R>(&'a mut self, func: impl FnOnce(&'a mut U) -> R) -> R
fn pipe_as_mut<'a, U, R>(&'a mut self, func: impl FnOnce(&'a mut U) -> R) -> R
self, then passes self.as_mut() into the pipe
function.Source§fn pipe_deref<'a, T, R>(&'a self, func: impl FnOnce(&'a T) -> R) -> R
fn pipe_deref<'a, T, R>(&'a self, func: impl FnOnce(&'a T) -> R) -> R
self, then passes self.deref() into the pipe function.Source§impl<T> PolicyExt for Twhere
T: ?Sized,
impl<T> PolicyExt for Twhere
T: ?Sized,
Source§impl<T> Tap for T
impl<T> Tap for T
Source§fn tap_borrow<B>(self, func: impl FnOnce(&B)) -> Self
fn tap_borrow<B>(self, func: impl FnOnce(&B)) -> Self
Borrow<B> of a value. Read moreSource§fn tap_borrow_mut<B>(self, func: impl FnOnce(&mut B)) -> Self
fn tap_borrow_mut<B>(self, func: impl FnOnce(&mut B)) -> Self
BorrowMut<B> of a value. Read moreSource§fn tap_ref<R>(self, func: impl FnOnce(&R)) -> Self
fn tap_ref<R>(self, func: impl FnOnce(&R)) -> Self
AsRef<R> view of a value. Read moreSource§fn tap_ref_mut<R>(self, func: impl FnOnce(&mut R)) -> Self
fn tap_ref_mut<R>(self, func: impl FnOnce(&mut R)) -> Self
AsMut<R> view of a value. Read moreSource§fn tap_deref<T>(self, func: impl FnOnce(&T)) -> Self
fn tap_deref<T>(self, func: impl FnOnce(&T)) -> Self
Deref::Target of a value. Read moreSource§fn tap_deref_mut<T>(self, func: impl FnOnce(&mut T)) -> Self
fn tap_deref_mut<T>(self, func: impl FnOnce(&mut T)) -> Self
Deref::Target of a value. Read moreSource§fn tap_dbg(self, func: impl FnOnce(&Self)) -> Self
fn tap_dbg(self, func: impl FnOnce(&Self)) -> Self
.tap() only in debug builds, and is erased in release builds.Source§fn tap_mut_dbg(self, func: impl FnOnce(&mut Self)) -> Self
fn tap_mut_dbg(self, func: impl FnOnce(&mut Self)) -> Self
.tap_mut() only in debug builds, and is erased in release
builds.Source§fn tap_borrow_dbg<B>(self, func: impl FnOnce(&B)) -> Self
fn tap_borrow_dbg<B>(self, func: impl FnOnce(&B)) -> Self
.tap_borrow() only in debug builds, and is erased in release
builds.Source§fn tap_borrow_mut_dbg<B>(self, func: impl FnOnce(&mut B)) -> Self
fn tap_borrow_mut_dbg<B>(self, func: impl FnOnce(&mut B)) -> Self
.tap_borrow_mut() only in debug builds, and is erased in release
builds.Source§fn tap_ref_dbg<R>(self, func: impl FnOnce(&R)) -> Self
fn tap_ref_dbg<R>(self, func: impl FnOnce(&R)) -> Self
.tap_ref() only in debug builds, and is erased in release
builds.Source§fn tap_ref_mut_dbg<R>(self, func: impl FnOnce(&mut R)) -> Self
fn tap_ref_mut_dbg<R>(self, func: impl FnOnce(&mut R)) -> Self
.tap_ref_mut() only in debug builds, and is erased in release
builds.Source§fn tap_deref_dbg<T>(self, func: impl FnOnce(&T)) -> Self
fn tap_deref_dbg<T>(self, func: impl FnOnce(&T)) -> Self
.tap_deref() only in debug builds, and is erased in release
builds.