From e2b9c458e4b8930ee2e2b88cac1a7a562820ee10 Mon Sep 17 00:00:00 2001 From: rorp Date: Mon, 7 Feb 2022 17:50:53 -0800 Subject: [PATCH] Change `DLCUtil.buildOracleSignatures` (#4061) --- .../core/protocol/dlc/compute/DLCUtil.scala | 20 +++++++++++++++++++ .../org/bitcoins/dlc/wallet/DLCWallet.scala | 6 +++--- 2 files changed, 23 insertions(+), 3 deletions(-) diff --git a/core/src/main/scala/org/bitcoins/core/protocol/dlc/compute/DLCUtil.scala b/core/src/main/scala/org/bitcoins/core/protocol/dlc/compute/DLCUtil.scala index bc2320f67a..378ae355cd 100644 --- a/core/src/main/scala/org/bitcoins/core/protocol/dlc/compute/DLCUtil.scala +++ b/core/src/main/scala/org/bitcoins/core/protocol/dlc/compute/DLCUtil.scala @@ -295,4 +295,24 @@ object DLCUtil { result } + + def buildOracleSignaturesNaive( + announcements: OrderedAnnouncements, + attestments: Vector[OracleAttestmentTLV]): Vector[OracleSignatures] = { + + attestments.foldLeft(Vector.empty[OracleSignatures]) { (acc, sig) => + // Nonces should be unique so searching for the first nonce should be safe + val firstNonce = sig.sigs.head.rx + announcements + .find( + _.eventTLV.nonces.headOption + .contains(firstNonce)) match { + case Some(announcement) => + acc :+ OracleSignatures(SingleOracleInfo(announcement), sig.sigs) + case None => + throw new RuntimeException( + s"Cannot find announcement for associated public key, ${sig.publicKey.hex}") + } + } + } } 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 bd6d028182..d4a23ecd58 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 @@ -1421,9 +1421,9 @@ abstract class DLCWallet announcementData, nonceDbs) - oracleSigs = DLCUtil.buildOracleSignatures(announcements = - announcementTLVs, - attestments = sigs.toVector) + oracleSigs = DLCUtil.buildOracleSignaturesNaive( + announcements = announcementTLVs, + attestments = sigs.toVector) tx <- executeDLC(contractId, oracleSigs) } yield tx