coordinator library
LibSpiffy Coordinator API - The canonical public interface for third-party apps.
Import this library to interact with LibSpiffy through the unified coordinator:
import 'package:libspiffy/coordinator.dart';
// Send commands
libspiffy.coordinator.tell(CreateWalletCommand(walletId: 'my-wallet', name: 'My Wallet'));
// Subscribe to events
libspiffy.coordinatorEvents?.listen((event) {
if (event is WalletCreatedEvent) { ... }
if (event is PaymentReadyEvent) { ... }
});
This provides clean command/event names without collisions with internal domain types.
For access to internal actors and domain types, use package:libspiffy/libspiffy.dart.
Classes
- AcceptChannelCommand
- Accept an incoming channel request
- AncestorProofRequestedEvent
- What became of a RequestAncestorProofCommand (bead libspiffy-a2v3).
- AncestorProofRequestReceivedEvent
-
A
proof_requesta peer sent us, and what we did about it (bead libspiffy-a2v3). - AncestorProofResponseEvent
-
What became of a
proof_responsea counterparty sent back (bead libspiffy-a2v3). - AnchorPublicKeyEvent
- Answer to IssueAnchorKeyCommand: the wallet's anchor public key for the context (compressed, hex), or why there is none (an xpub or WIF wallet has no anchor key; an empty context is refused).
- AnchorSignedEvent
- Answer to SignWithAnchorKeyCommand: the DER signature (hex) of SHA-256 of the message by the anchor key publicKey, or why there is none. The signature is deterministic (RFC 6979) with a low S.
- BalanceResponse
- Balance query response, computed from the read model.
- BalanceUpdatedEvent
- The wallet's balance changed: the read model applied an event that moved money, and these are the numbers it now holds (bead libspiffy-7ye4).
- BEEFSettledEvent
- Result of settling a BEEF via ARC.
- BEEFValidationResultEvent
- The answer to a ValidateBEEFCommand: a counterparty's payment, checked, recorded and submitted.
- BlockHeadersStoredEvent
- Block headers stored Block headers were stored: how many, and the heights they span.
- BroadcastDeferredPaymentCommand
- Broadcast a deferred payment yourself, e.g. when the recipient is slow to do it. Its unconfirmed ancestors (from the BEEF rebuilt from storage) are submitted first. Idempotent: a transaction the network already has is reported as such. Answered with DeferredPaymentBroadcastEvent.
- BroadcastFailureEvent
- Broadcast to Arc failed (transaction queued for retry via duraq)
- CancelDeferredPaymentCommand
- Cancel an outstanding deferred payment and release its inputs. Answered with DeferredPaymentCancelledEvent.
- ChannelClosedEvent
- Channel closed
- ChannelFundingRetriedEvent
- another retry.
- ChannelOpenedEvent
- Channel opened successfully
- ChannelOpenResentEvent
- The outcome of a ResendChannelOpenCommand (bead libspiffy-1n3).
- ChannelP2PAdapter
- Transport-agnostic adapter that translates between P2P protocol messages (as raw maps) and LibSpiffy's PaymentChannelManagerActor messages.
- ChannelP2PMessageToSendEvent
- Outgoing P2P message that the app must transmit to the peer
- ChannelP2PReceived
- Incoming P2P message for a payment channel.
- ChannelPayCommand
- Make a payment over an open channel
- ChannelPaymentEvent
- Payment made or received on a channel
- ChannelRefundClaimedEvent
- The outcome of a RetryChannelFundingCommand (bead libspiffy-1n3).
- ChannelRequestReceivedEvent
- Incoming channel request from a peer (app should show UI for approval)
- CheckDeferredPaymentStatusCommand
- Ask the network about a deferred payment now instead of waiting for the periodic ARC scan. Answered with DeferredPaymentStatusEvent.
- ClaimChannelRefundCommand
- Claim the refund of an expired channel (non-cooperative close).
- ClientChannelInfo
- Tracks state for a channel we initiated (client role).
- CloseChannelCommand
- Close a payment channel
- CoordinatorEvent
- Base class for all coordinator events emitted on the event stream.
- CreateInvoiceCommand
- Create a payment invoice
- CreateWalletCommand
- Create a new wallet
- DeferredNetworkStatus
- Network status strings recorded for deferred payments.
- DeferredPayment
- Read model of a deferred payment. Never deleted (only a wallet deletion removes it): resolved payments stay listable with their state.
- DeferredPaymentBroadcastEvent
- Result of BroadcastDeferredPaymentCommand.
- DeferredPaymentCancelledEvent
- Result of CancelDeferredPaymentCommand.
- DeferredPaymentDetail
- One deferred payment in a DeferredPaymentsResponse, with what is needed to act on it.
- DeferredPaymentInput
- One input a deferred payment holds.
- DeferredPaymentPage
- One page of deferred payments.
- DeferredPaymentPurpose
-
The
purposea deferred payment carries, for the values the wallet itself sets and reads back. - DeferredPaymentQuery
- Filter and page of ReadModelStorage.listDeferredPayments.
- DeferredPaymentReclaimedEvent
- Result of ReclaimDeferredPaymentCommand.
- DeferredPaymentsResponse
- Answer to GetDeferredPaymentsQuery.
- DeferredPaymentStatusEvent
- Result of CheckDeferredPaymentStatusCommand.
- DeleteWalletCommand
- Delete a wallet permanently (event-sourced)
- DeriveType42DestinationCommand
- Derives a type-42 destination for paying the holder of anchor key anchorPublicKey while it is offline (beads libspiffy-zxkd, libspiffy-fdal; spv-understanding.md, "Payment modes"). Answered with Type42DestinationEvent: the address to pay, and the hand-off (A, its anchorContext when given, the payer key B and the invoice number) the payee takes the payment in with.
- ErrorEvent
- Error from the coordinator
- ExpireChannelCommand
- Record that a payment channel has expired (lockTime elapsed).
- ExportTransactionQuery
- Export a transaction of the wallet with its merkle proof, as a BEEF that another wallet imports with ImportTransactionCommand (bead libspiffy-m8qu).
- GetBalanceQuery
- Query wallet balance
- GetDeferredPaymentsQuery
-
List or search the wallet's deferred payments. Answered with
DeferredPaymentsResponse (or an ErrorEvent with source
getDeferredPayments). - GetTransactionDetailQuery
- Query specific transaction detail
- GetTransactionsQuery
- Query wallet transactions
- ImportCompleteEvent
- Wallet import completed
- ImportProgressEvent
- Wallet import progress update
- ImportTransactionCommand
- Import a transaction the wallet already knows to be mined: recovering a wallet, or bringing in its own history.
- ImportTransactionConfirmedEvent
- Transaction confirmed by aggregate during import
- ImportUTXOConfirmedEvent
- UTXO confirmed by aggregate during import
- ImportWalletCommand
- Import a wallet from extended private key or WIF
- InvoiceCreatedEvent
- Invoice created successfully
- InvoicePaidEvent
- Invoice paid
- IssueAnchorKeyCommand
- Issues the wallet's anchor key for anchorContext (beads libspiffy-zxkd, libspiffy-fdal): the key a payer derives type-42 destinations from to pay this wallet while it is offline (spv-understanding.md, "Payment modes"). The app publishes it, bound to the identity it is for. Answered with AnchorPublicKeyEvent.
- OpenChannelCommand
- Open a payment channel with a peer
- P2PMessageReceived
- An inbound peer-to-peer message the app received on its own transport and hands to the library (bead libspiffy-a2v3).
- P2PMessageToSendEvent
- An outgoing peer-to-peer message the app must transmit to toPeerId on its own transport (bead libspiffy-a2v3).
- PayInvoiceCommand
- Pay an invoice (builds BEEF, does NOT broadcast)
- PaymentReadyEvent
- BEEF payment constructed and ready for transmission to counterparty
- PeerInfo
- Tracks which peers are involved in a channel.
- PendingRequest
- A pending incoming channel request awaiting accept/reject.
- ProofP2PAdapter
- Asks a counterparty for a fresh merkle proof, and answers when one asks us (bead libspiffy-a2v3).
- ProvisionFundingCommand
- Provision earmark-aware funding UTXOs for a token lifecycle.
- ProvisioningCompleteEvent
- Funding provisioning completed (earmarked UTXOs created).
- ReclaimDeferredPaymentCommand
- Reclaim an outstanding deferred payment: spend the inputs it holds back into this wallet and broadcast that transaction. Answered with DeferredPaymentReclaimedEvent.
- RecordOutgoingCommand
- Record an outgoing transaction in the wallet
- RefreshWalletCommand
- Refresh wallet data
- RegisterWatchAddressCommand
- Register an address to watch for activity
- RejectChannelCommand
- Reject an incoming channel request
- ReleaseUTXOsCommand
- Release reserved UTXOs
- RequestAncestorProofCommand
- Ask the counterparty who handed us txid for a fresh merkle proof for its ancestry (bead libspiffy-a2v3).
- ResendChannelOpenCommand
-
Send
channel_openagain for a channel that is already open on this side, when the counterparty never received it (bead libspiffy-1n3). - RetryChannelFundingCommand
- Broadcast the funding transaction of a channel whose funding broadcast failed, so the open can finish (bead libspiffy-1n3).
- ServerChannelInfo
- Tracks state for a channel we accepted (server role).
- SettleBEEFCommand
- Settle a BEEF by broadcasting all unsettled transactions (hasMerkle=false) to ARC in dependency order.
- ShutdownCommand
- Gracefully shutdown the coordinator
- SignWithAnchorKeyCommand
-
Signs
SHA-256(message)with the wallet's anchor key for anchorContext (beads libspiffy-zxkd, libspiffy-fdal), to bind that anchor to an identity — a NodeCast registration, say. The message is hashed by the wallet, so the anchor key never signs a digest the caller chose; the message should name its purpose (domain separation). Answered with AnchorSignedEvent. - SplitTransactionOutcome
- One Benford split transaction and how it ended (SplitTransactionStatus).
- SplitUTXOsCommand
- Split UTXOs using Benford's Law distribution for privacy
- SPVValidationResultEvent
- SPV validation result for a received transaction
- StoreHeadersCommand
- Store block headers for SPV validation
- TimestampCommand
- Create a timestamp archive (OP_RETURN data on-chain)
- TimestampCompleteEvent
- Timestamp archive completed
- TransactionConfirmationRevertedEvent
- The chain no longer supports a confirmation this wallet announced.
- TransactionConfirmedEvent
- A merkle proof put the transaction in the block at blockHeight, whose header we hold on our active chain: confirmed, and there is nothing more to it (bead libspiffy-jc3h).
- TransactionDetailResponse
- Transaction detail query response
- TransactionExportedEvent
- Answer to ExportTransactionQuery: the transaction with its proof and what proves its ancestry, as BEEF bytes, or why there is none.
- TransactionImportedEvent
- Transaction imported into wallet
- TransactionRecordedEvent
-
An outgoing transaction a RecordOutgoingCommand asked the wallet to
record is recorded: journaled by the wallet aggregate and applied to
the read model, so the transaction queries can already see it (bead
libspiffy-5ml6). The same promise
WalletCreatedEventand TransactionImportedEvent make, for the same reason — an app told "recorded" queries next. - TransactionsResponse
- Transactions query response
- Type42DestinationEvent
- Answer to DeriveType42DestinationCommand: the destination, or why there is none. Type42Destination.address is what the payer pays; Type42Destination.derivation is the hand-off.
- UnfinishedChannel
- One channel that started opening and never finished (bead libspiffy-29jd).
- UnfinishedChannelsFoundEvent
-
Channels of walletId that started opening and never reached
open, reported once at startup (bead libspiffy-29jd). - UTXOSplitCompleteEvent
- Benford UTXO split completed.
- UTXOSplitStartedEvent
- A Benford UTXO split has started: the wallet's spendable outputs have been chosen and the first split transaction is about to be built.
- ValidateBEEFCommand
- Validate incoming BEEF data (structural + SPV validation)
- WalletCoordinatorActor
- The canonical public interface for third-party apps using LibSpiffy.
- WalletCreatedEvent
- Wallet successfully created
- WalletStatusEvent
- Wallet status update
- WatchAddressRegisteredEvent
- Watch address registered
Enums
- DeferredPaymentNetworkSource
- Where a network check or a broadcast of a deferred payment goes.
- DeferredPaymentState
- Lifecycle of a deferred payment.
- SplitTransactionStatus
-
How one Benford split transaction ended (bead libspiffy-wdch). A split is
recorded as a deferred payment before it is broadcast (bead
libspiffy-ypp), so every status but notRecorded names a transaction the
wallet lists (
GetDeferredPaymentsQuery) until the network settles it.