diff --git a/account/manager.go b/account/manager.go index 01189ca..070b49b 100644 --- a/account/manager.go +++ b/account/manager.go @@ -140,6 +140,12 @@ type Manager struct { // Finalize message for. pendingBatchMtx sync.Mutex + // reservationMtx prevents a trader from attempting to have more than + // once active reservation at a time when creating new accounts. This is + // done to ensure an account picks up the correct reservation once its + // time to fund it. + reservationMtx sync.Mutex + wg sync.WaitGroup quit chan struct{} } @@ -260,6 +266,12 @@ func (m *Manager) QuoteAccount(ctx context.Context, value btcutil.Amount, func (m *Manager) InitAccount(ctx context.Context, value btcutil.Amount, expiry, bestHeight, confTarget uint32) (*Account, error) { + // We'll make sure to acquire the reservation lock throughout the + // account funding process to ensure we use the same reservation, as + // only one can be active per trader LSAT. + m.reservationMtx.Lock() + defer m.reservationMtx.Unlock() + // First, make sure we have a valid amount to create the account. We // need to ask the auctioneer for the maximum as it dynamically defines // that value.