loop/staticaddr/withdraw/interface.go
Boris Nagaev e0367e552a
staticaddr: coordinate concurrent deposit use
Withdrawals obtain signatures before deposits enter their durable state,
leaving a window where a loop-in can select the same outputs.

Coordinate in-flight client operations with an in-memory registry.
Persist withdrawal data before publication. Existing recovery resumes it
after restart.
2026-08-02 00:26:56 -05:00

48 lines
1.7 KiB
Go

package withdraw
import (
"context"
"github.com/btcsuite/btcd/wire"
"github.com/lightninglabs/loop/fsm"
"github.com/lightninglabs/loop/staticaddr/deposit"
"github.com/lightninglabs/loop/staticaddr/script"
)
// AddressManager handles fetching of address parameters.
type AddressManager interface {
// GetStaticAddressParameters returns the static address parameters.
GetStaticAddressParameters(ctx context.Context) (*script.Parameters,
error)
// GetStaticAddress returns the deposit address for the given
// client and server public keys.
GetStaticAddress(ctx context.Context) (*script.StaticAddress, error)
}
type DepositManager interface {
// EnsureDepositsFresh reconciles active deposits with the wallet view.
EnsureDepositsFresh(ctx context.Context) error
// RegisterDepositUse registers the deposits for exclusive use by this
// client operation and returns a function that unregisters them.
RegisterDepositUse(deposits []*deposit.Deposit) (func(), error)
// GetActiveDepositsInState returns all active deposits in the given
// state.
GetActiveDepositsInState(stateFilter fsm.StateType) ([]*deposit.Deposit,
error)
// AllOutpointsActiveDeposits returns all active deposits referenced by
// the outpoints if every deposit is active and in the given state.
AllOutpointsActiveDeposits(outpoints []wire.OutPoint,
stateFilter fsm.StateType) ([]*deposit.Deposit, bool)
// TransitionDeposits transitions the deposits with the given event and
// waits until they reach the expected final state.
TransitionDeposits(ctx context.Context, deposits []*deposit.Deposit,
event fsm.EventType, expectedFinalState fsm.StateType) error
// UpdateDeposit persists the current deposit fields.
UpdateDeposit(ctx context.Context, d *deposit.Deposit) error
}