From c2237ab6fec6bcabe1eca250e1d6d80243a3f403 Mon Sep 17 00:00:00 2001 From: benthecarman Date: Sat, 12 Jun 2021 06:01:24 -0700 Subject: [PATCH] Only unreserve our utxos when canceling a DLC (#3250) --- .../scala/org/bitcoins/dlc/wallet/DLCWallet.scala | 13 +++++++------ 1 file changed, 7 insertions(+), 6 deletions(-) diff --git a/dlc-wallet/src/main/scala/org/bitcoins/dlc/wallet/DLCWallet.scala b/dlc-wallet/src/main/scala/org/bitcoins/dlc/wallet/DLCWallet.scala index 17218bc431..3aa1dc1fe8 100644 --- a/dlc-wallet/src/main/scala/org/bitcoins/dlc/wallet/DLCWallet.scala +++ b/dlc-wallet/src/main/scala/org/bitcoins/dlc/wallet/DLCWallet.scala @@ -252,22 +252,23 @@ abstract class DLCWallet */ override def cancelDLC(dlcId: Sha256Digest): Future[Unit] = { for { - inputs <- dlcInputsDAO.findByDLCId(dlcId) - dbs <- spendingInfoDAO.findByOutPoints(inputs.map(_.outPoint)) - // allow this to fail in the case they have already been unreserved - _ <- unmarkUTXOsAsReserved(dbs).recover { case _: Throwable => () } - dlcOpt <- dlcDAO.read(dlcId) - _ = dlcOpt match { + dlcDb = dlcOpt match { case Some(db) => require( db.state == DLCState.Offered || db.state == DLCState.Accepted || db.state == DLCState.Signed, "Cannot cancel a DLC after it has been signed") + db case None => throw new IllegalArgumentException( s"No DLC Found with dlc id ${dlcId.hex}") } + inputs <- dlcInputsDAO.findByDLCId(dlcId, dlcDb.isInitiator) + dbs <- spendingInfoDAO.findByOutPoints(inputs.map(_.outPoint)) + // allow this to fail in the case they have already been unreserved + _ <- unmarkUTXOsAsReserved(dbs).recover { case _: Throwable => () } + _ <- dlcSigsDAO.deleteByDLCId(dlcId) _ <- dlcRefundSigDAO.deleteByDLCId(dlcId) _ <- dlcInputsDAO.deleteByDLCId(dlcId)