using System; using System.Collections.Generic; using System.Linq; using System.Threading.Tasks; using NBitcoin; using NBXplorer.Models; namespace BTCPayServer.Payments.PayJoin { public class PayJoinRepository { HashSet _Outpoints = new HashSet(); HashSet _LockedInputs = new HashSet(); public Task TryLock(OutPoint outpoint) { lock (_Outpoints) { return Task.FromResult(_Outpoints.Add(outpoint)); } } public Task TryUnlock(params OutPoint[] outPoints) { if (outPoints.Length == 0) return Task.FromResult(true); lock (_Outpoints) { bool r = true; foreach (var outpoint in outPoints) { r &= _Outpoints.Remove(outpoint); } return Task.FromResult(r); } } public Task TryLockInputs(OutPoint[] outPoint) { lock (_LockedInputs) { foreach (var o in outPoint) if (!_LockedInputs.Add(o)) return Task.FromResult(false); } return Task.FromResult(true); } } }