What changed, and why it matters
This commit updates Eclair's underlying bitcoin-lib dependency from version 0.41 to 0.43.2 and adjusts Eclair's code to match the new library's API. The changes are mostly mechanical: switching how Musig2 nonces and Taproot script trees are represented, removing Kotlin-to-Scala conversion helpers, and updating Maven checksums. There is no explicit mention of a security fix in the commit message or diff, and no independent security advisory was supplied. The update could include upstream security fixes, but that is speculation based on the version bump, not direct evidence in this commit.
Review the bitcoin-lib 0.43.2 and secp256k1-kmp 0.19.0 release notes or changelog for security fixes. Verify that the new library artifacts match the updated checksums and that no breaking API changes were missed. Run the full test suite, especially MuSig2 and Taproot channel tests, before deploying. If the upstream release contains security fixes, prioritize deployment and consider issuing a security notice.
Security signals we found
Dependency version bump of core cryptographic library (bitcoin-lib 0.41 -> 0.43.2, secp256k1-kmp 0.18.0 -> 0.19.0)
Refactoring of MuSig2 nonce handling and Taproot script tree construction
Removal of Kotlin interop conversions around cryptographic types
No explicit security claim, CVE reference, or advisory text in commit message or diff
Evidence from the diff
The commit bumps fr.acinq.bitcoin-lib from 0.41 to 0.43.2 and fr.acinq.secp256k1-kmp artifacts from 0.18.0 to 0.19.0. Code changes adapt to the new library API: IndividualNonce and LocalNonce move from fr.acinq.bitcoin.crypto.musig2 to fr.acinq.bitcoin.scalacompat.Musig2; LocalNonce becomes a case class returned directly by generateNonce/generateNonceWithCounter instead of a tuple; ScriptTree constructors become Scala-style case-class factories; KotlinUtils.scala2kmp conversions are removed in favor of native Scala methods; and the JSON serializer now uses x.data.toHex for nonces. The pom.xml and .mvn checksums are updated accordingly. No vulnerability description, CVE, or security-relevant changelog is present in the provided materials.
Changed components
pom.xml (bitcoin-lib and secp256k1-kmp versions).mvn/checksums/checksums-central.sha256eclair-core/src/main/scala/fr/acinq/eclair/channel/Commitments.scalaeclair-core/src/main/scala/fr/acinq/eclair/channel/Helpers.scalaeclair-core/src/main/scala/fr/acinq/eclair/channel/fsm/Channel.scalaeclair-core/src/main/scala/fr/acinq/eclair/channel/fund/InteractiveTxBuilder.scalaeclair-core/src/main/scala/fr/acinq/eclair/channel/fund/InteractiveTxFunder.scalaeclair-core/src/main/scala/fr/acinq/eclair/crypto/NonceGenerator.scalaeclair-core/src/main/scala/fr/acinq/eclair/crypto/keymanager/LocalOnChainKeyManager.scalaeclair-core/src/main/scala/fr/acinq/eclair/json/JsonSerializers.scalaeclair-core/src/main/scala/fr/acinq/eclair/transactions/Scripts.scalaeclair-core/src/main/scala/fr/acinq/eclair/transactions/Transactions.scalaeclair-core/src/main/scala/fr/acinq/eclair/wire/protocol/ChannelTlv.scalaeclair-core/src/main/scala/fr/acinq/eclair/wire/protocol/CommonCodecs.scalaeclair-core/src/main/scala/fr/acinq/eclair/wire/protocol/HtlcTlv.scalaeclair-core/src/main/scala/fr/acinq/eclair/wire/protocol/InteractiveTxTlv.scalaeclair-core/src/main/scala/fr/acinq/eclair/wire/protocol/LightningMessageTypes.scalaeclair-core/src/main/scala/fr/acinq/eclair/wire/protocol/OfferTypes.scalaeclair-core/src/test/scala/fr/acinq/eclair/transactions/TransactionsSpec.scalaeclair-core/src/test/scala/fr/acinq/eclair/wire/protocol/LightningMessageCodecsSpec.scalaInspect captured patch +85 / −95
diff --git a/.mvn/checksums/checksums-central.sha256 b/.mvn/checksums/checksums-central.sha256
index 13e6377..3199c34 100644
--- a/.mvn/checksums/checksums-central.sha256
+++ b/.mvn/checksums/checksums-central.sha256
@@ -54,7 +54,6 @@
0b9b14a3d62106fafe8c68a717b87b87ad18685899451b753c04fa41b6857784 org/junit/junit-bom/5.7.1/junit-bom-5.7.1.pom
0baf22d7475efbc70b2fa31f3d827848043ecc8adaf77c914ef3afd9193e1a23 org/apache/maven/surefire/surefire-extensions-api/3.1.2/surefire-extensions-api-3.1.2.pom
0bdb79a0a5e0cce2d8d2d339ad53453cdf90045fe34c5e4b19b064bb1aee5876 javax/json/javax.json-api/1.1.4/javax.json-api-1.1.4.jar
-0bf385ef1733e4f66f80284e8d54638a89de44591d256a3fa0b9fdf1f76714f2 fr/acinq/bitcoin-lib_2.13/0.41/bitcoin-lib_2.13-0.41.jar
0c23863893a2291f5a7afdbd8d15923b3948afd87e563fa341cdcf6eae338a60 commons-io/commons-io/2.6/commons-io-2.6.pom
0c6f123b11491742ddf3dc34ec2d3d10f533e2ef9ca889db8a704290270bdd07 org/scala-sbt/util-position_2.13/1.8.0/util-position_2.13-1.8.0.jar
0cc647963b74ad1d7a37c9868e9e5a8f474e49297e1863582253a08a4c719cb1 classworlds/classworlds/1.1-alpha-2/classworlds-1.1-alpha-2.pom
@@ -70,12 +69,10 @@
0fa7dd96ff039af75db12bca1d9af5529df55e80b16ce86ecc8cf38a13699c9d org/apache/maven/maven-project/2.0/maven-project-2.0.jar
0ffa0ad084ebff5712540a7b7ea0abda487c53d3a18f78c98d1a3675dab9bf61 org/codehaus/plexus/plexus-utils/3.1.0/plexus-utils-3.1.0.jar
109edd22a65676a023c73fde368d89ea2021b1b99f84fc9de478743dd1ae436a org/scalatest/scalatest-funspec_2.13/3.2.16/scalatest-funspec_2.13-3.2.16.pom
-10f0e27eb2e9ba95b9f4e3c7ef8873c0d6a9977ef08c856d16b0d3f9225edee8 fr/acinq/secp256k1/secp256k1-kmp-jni-jvm/0.18.0/secp256k1-kmp-jni-jvm-0.18.0.pom
110438863bad37c28f906bf87016e38c7a8c758ba321e09d11dc5a2363a8e79e org/apache/commons/commons-lang3/3.14.0/commons-lang3-3.14.0.pom
11067f6a75fded12bcdc8daf7a66ddd942ce289c3daf88a3fe0f8b12858a2ee6 org/codehaus/plexus/plexus-utils/3.0.24/plexus-utils-3.0.24.pom
11647956e48a0c5bfb3ac33f6da7e83f341002b6857efd335a505b687be34b75 org/slf4j/slf4j-parent/1.7.30/slf4j-parent-1.7.30.pom
116678679dba3d36d799f672c26ee2443480efa1b1bbb8250f06e0dd5a91a795 org/apache/maven/resolver/maven-resolver-api/1.6.3/maven-resolver-api-1.6.3.pom
-1189d45af3606c940422d0227fd081bb916bd55e335186c33fb7309286425dba fr/acinq/secp256k1/secp256k1-kmp-jni-jvm-extract/0.18.0/secp256k1-kmp-jni-jvm-extract-0.18.0.jar
11a987607957fcac04d6ac182308abf5a7d3707f519863e55c8eb419953f5374 org/codehaus/plexus/plexus/1.0.9/plexus-1.0.9.pom
1205a1f229999170dcadcfb885a278ad0bc2295540a251f4c438f887ead7bbd9 org/apache/maven/maven-aether-provider/3.0/maven-aether-provider-3.0.jar
12b10766b543c2c36a0853103e5a1bc9300d1aa394067c89d8e6be5df214ca4c org/eclipse/sisu/sisu-inject/0.3.4/sisu-inject-0.3.4.pom
@@ -100,6 +97,7 @@
165963357938192c656f43970798698f02855b190718bf2ced4d80ba28744a92 io/kamon/kamon-jdbc_2.13/2.7.4/kamon-jdbc_2.13-2.7.4.pom
1678d4120a585d8a630131aeec4c524d928398583b7eab616ee7d5a87f520d3d org/sonatype/oss/oss-parent/5/oss-parent-5.pom
169dd904a4b0f6520cffe658cc62292bfe9f3c14a989fa92120724cde43a9968 org/junit/junit-bom/5.10.2/junit-bom-5.10.2.pom
+16bb5f91091abee68728e66526149a672a23ec8dfddc96ad17ba9ef1e98ddd1c fr/acinq/secp256k1/secp256k1-kmp-jni-jvm-mingw/0.19.0/secp256k1-kmp-jni-jvm-mingw-0.19.0.jar
171a1af82b6759eb5740b3b8809aca80113deaf1153036f2f4445901dfd3f91d commons-io/commons-io/2.15.1/commons-io-2.15.1.pom
171c98a1e2a5a2445b0ddd83ee15cb53122b82c44bec045fd00d817c72948b1e org/apache/maven/maven-repository-metadata/3.2.5/maven-repository-metadata-3.2.5.pom
172dcfe5a24767e25efde18779d630d335b153b92090c4d0addb1e3171d17303 com/typesafe/akka/akka-cluster-typed_2.13/2.6.20/akka-cluster-typed_2.13-2.6.20.pom
@@ -124,6 +122,7 @@
1933a6037439b389bda2feaccfc0113880fd8d88f7d240d2052b91108dd5ae89 org/apache/apache/5/apache-5.pom
1955432f6d8af32806d82d8218fedfe4be3bb3e23d59a74d81449ffc74bf7bd1 com/fasterxml/jackson/jackson-bom/2.12.7/jackson-bom-2.12.7.pom
19889dbdf1b254b2601a5ee645b8147a974644882297684c798afe5d63d78dfe com/google/code/findbugs/jsr305/3.0.2/jsr305-3.0.2.pom
+1a0bbdae4f9e8893874ccd256f677dd0fe48c41976ef6f60abf5f695cac84a50 fr/acinq/secp256k1/secp256k1-kmp-jni-jvm-extract/0.19.0/secp256k1-kmp-jni-jvm-extract-0.19.0.jar
1a31736abe1527968fb72d60c371acfa7e131985bf18cf5dc4f0497b8dee14e8 org/scala-sbt/zinc-classpath_2.13/1.8.0/zinc-classpath_2.13-1.8.0.pom
1a8faf7a6a2b848acb26a959954ee115c0d79dbe75a6206fb3b8c7c2f45a237f org/apache/maven/maven-parent/34/maven-parent-34.pom
1ada4580f68cd17a534fb3c0337087073223a76cb77304dbe5a1b19df3d53c2f io/netty/netty-codec-http/4.1.94.Final/netty-codec-http-4.1.94.Final.jar
@@ -133,6 +132,7 @@
1bc264824ec876b0ca6f4f5838175c541c638cbc43326a268b9aee7d4778b5ef org/codehaus/plexus/plexus-containers/1.5.5/plexus-containers-1.5.5.pom
1c0b4ee0b623402dd5bb78fd4a69bf808da2510524f489a24b0f3cc58ded046e io/netty/netty-codec-socks/4.1.94.Final/netty-codec-socks-4.1.94.Final.jar
1c36ab1098026165a9cd6d18732d58da95adab6aa25938d472fa9c4a9498f944 org/codehaus/plexus/plexus-java/1.1.2/plexus-java-1.1.2.pom
+1c424feb2e0b906d3ef83a0ef864393978d73595dd89e8810881f12556edc171 fr/acinq/secp256k1/secp256k1-kmp-jni-jvm-mingw/0.19.0/secp256k1-kmp-jni-jvm-mingw-0.19.0.pom
1c4256de3cbfed7490ff15c0a02f80be3a4b837447c719f74c987b5090b6706b org/scala-lang/modules/scala-java8-compat_2.13/1.0.0/scala-java8-compat_2.13-1.0.0.pom
1c5c5ac5e8f29aefc8faa051ffa14eccd85b9e20f4bb35dc82fba7d5da50d326 org/sonatype/aether/aether-api/1.7/aether-api-1.7.jar
1c82245904713835392e9cf22dce10f0a5fb4ef10d0db17ff4f48ca9ca97744c io/netty/netty-all/4.1.94.Final/netty-all-4.1.94.Final.jar
@@ -202,16 +202,15 @@
28ebd49fdb015a3fe50f42747554241b0c7896f28a27fcdb2a787d2929ea2d95 org/apache/maven/maven-builder-support/3.8.6/maven-builder-support-3.8.6.pom
28fc63720c4a5ff92bf0e358ed55a6f24626f35bccc13cc3e194231e158848f6 org/apache/maven/maven/3.0/maven-3.0.pom
29004012161043936443d59574924e0406a2326f53943f02eca7944b33c169df org/sonatype/aether/aether-parent/1.7/aether-parent-1.7.pom
-293b7ee9e0b079b00d902806d52e642ebe29cfc7cf1cee8a79e96dfc73551aad fr/acinq/secp256k1/secp256k1-kmp-jni-common/0.18.0/secp256k1-kmp-jni-common-0.18.0.jar
2994a7eb78f2710bd3d3bfb639b2c94e219cedac0d4d084d516e78c16dddecf6 com/google/j2objc/j2objc-annotations/1.1/j2objc-annotations-1.1.jar
29bf1fe5e722532b79b1fa25b4ab38a485d984a9e167fdb458df4e86ebe8e9a1 org/xerial/sqlite-jdbc/3.42.0.0/sqlite-jdbc-3.42.0.0.pom
-29cfaa1de771c1022885dbf3c0e6871050716a001717cc89f9e677012db232bf fr/acinq/secp256k1/secp256k1-kmp-jni-jvm-extract/0.18.0/secp256k1-kmp-jni-jvm-extract-0.18.0.pom
29fd54ef49c7b404b091e87bb8726de50447d728b46c592fab0806ac9f6b113b org/codehaus/plexus/plexus-utils/1.3/plexus-utils-1.3.pom
2a0abfc63ed5c6216356255aa7c572723087938879934aca1ce11f17c24ce156 org/codehaus/plexus/plexus-classworlds/1.2-alpha-7/plexus-classworlds-1.2-alpha-7.pom
2a8219763d4bee42ffc085d322004effca8a4b9470e1a62a5a1b2cb6b22abc62 org/eclipse/jgit/org.eclipse.jgit/5.12.0.202106070339-r/org.eclipse.jgit-5.12.0.202106070339-r.jar
2a8a1b9046b8f26c2dd5fa4d0c5b18b55156f7d1291f2b64dc31b1261018774a org/apache/maven/maven-profile/2.0/maven-profile-2.0.pom
2a95ee1db20ea67178d9b42b4ce09b147223aa3eea992c73f262adb5c9733919 org/scala-lang/modules/scala-parallel-collections_2.13/0.2.0/scala-parallel-collections_2.13-0.2.0.pom
2adabf37623ccecedcb617284071ebb3eafa884d63d8546b572249681102c6d4 org/scala-sbt/zinc-core_2.13/1.8.0/zinc-core_2.13-1.8.0.jar
+2b103a1d5df617042130c190754c67688b1a3bf17d172ed56a6a647af46a05d6 fr/acinq/secp256k1/secp256k1-kmp-jni-common/0.19.0/secp256k1-kmp-jni-common-0.19.0.jar
2b3f02f2d0ec3e95884f9ab415596ce627492469c2d8fd75e3fb00fb69532c44 org/sonatype/sisu/sisu-guice/2.1.7/sisu-guice-2.1.7.pom
2b59062030ab0a15c5d0977ba22421706368926488739a65f25793e715cc8a74 org/codehaus/plexus/plexus/2.0.7/plexus-2.0.7.pom
2b6461b313e56918416a773206ff7d64cf101a662cb03a1428f05f9dabe4b1ea io/netty/netty-transport/4.1.94.Final/netty-transport-4.1.94.Final.pom
@@ -235,7 +234,6 @@
2ed07d65845131f5336a86476c9a4056b59d0b58b9815ab3679bb0f36f35f705 org/junit/junit-bom/5.9.2/junit-bom-5.9.2.pom
30e8e86a673564df28b14507c7943238fcedbb87b71dc7ceee1f676c5315c1eb org/mockito/mockito-core/4.3.1/mockito-core-4.3.1.pom
30f5789efa39ddbf96095aada3fc1260c4561faf2f714686717cb2dc5049475a net/java/jvnet-parent/3/jvnet-parent-3.pom
-312186e455a702ad6c59e7ff84f6361b1dedd1bded3eca343eec4c6c53db7199 fr/acinq/bitcoin/bitcoin-kmp-jvm/0.25.0/bitcoin-kmp-jvm-0.25.0.jar
317d515c5c69278a980c6219901d327efb4210ca44ae1f07c2a304d487ec7cae org/apache/maven/maven-aether-provider/3.2.5/maven-aether-provider-3.2.5.pom
321ddbb7ee6fe4f53dea6b4cd6db74154d6bfa42391c1f763b361b9f485acf05 org/ow2/ow2/1.5.1/ow2-1.5.1.pom
322d96e5277de60c00dd4833c19a6e8c6f148aa61bafc7debd3d962beb55d847 org/scalatest/scalatest-mustmatchers_2.13/3.2.16/scalatest-mustmatchers_2.13-3.2.16.pom
@@ -288,6 +286,7 @@
3b0559bb8432f28937efe6ca193ef54a8506d0075d73fd7406b9b116c6a11063 org/sonatype/plexus/plexus-sec-dispatcher/1.3/plexus-sec-dispatcher-1.3.jar
3b1a46b4bc26a0176acaf99312ff2f3a631faf3224b0996af546aa48bd73c647 org/apache/maven/maven-settings/3.0/maven-settings-3.0.jar
3b93391acabb4274bd5ec73793ba8b80a441210f6f547bccff2bb6e82559d63e org/scalatest/scalatest-mustmatchers_2.13/3.2.16/scalatest-mustmatchers_2.13-3.2.16.jar
+3b9e4f78df5e0147558d219758694d396fe16516229e879949f32ff6e7506f79 fr/acinq/secp256k1/secp256k1-kmp-jni-jvm-darwin/0.19.0/secp256k1-kmp-jni-jvm-darwin-0.19.0.jar
3bb4315850fd1470f6c8ffbbc247ec4978696fc7ca3c40949590699da9bb058f com/typesafe/ssl-config-core_2.13/0.4.3/ssl-config-core_2.13-0.4.3.jar
3c0731e6ba43ae9634bf7b2fd35086d1bb6c321f99acec52a4cd3c69fc17be6a org/scala-sbt/compiler-bridge_2.13/1.8.0/compiler-bridge_2.13-1.8.0.pom
3c3a4f5786c75b8df8ef1addce66ccb4bb8bd2ff874069e0e6c85d4b4576a748 org/slf4j/slf4j-parent/1.7.9/slf4j-parent-1.7.9.pom
@@ -320,6 +319,7 @@
43579c3ebe47e78358a7f32f967378ef56175b2294b335183584f0bd23595231 org/checkerframework/checker-qual/3.31.0/checker-qual-3.31.0.pom
4367abba02c31f1dce129b455652966b1703b554a9bc9ddbf33e96ca00cfe15c org/zeromq/jeromq/0.5.2/jeromq-0.5.2.pom
439550da8d5451f84cbc6806df7cdccc30c4bbf59456659af95aac907bf658e1 org/apache/maven/maven-core/3.8.6/maven-core-3.8.6.jar
+43c196ab589cff83c5d094848b2c85454f0025fc4741a00bd0cf9b84d6273251 fr/acinq/bitcoin-lib_2.13/0.43.2/bitcoin-lib_2.13-0.43.2.pom
43c75ef577d610ab77ec2894acbde0c72604416ba8ba8b49e9a740d045a40250 org/codehaus/plexus/plexus-archiver/4.4.0/plexus-archiver-4.4.0.jar
43f30a6f8370440194de49a6e1cbb3b385cc175c67c8ce6506fa172c475ee3db org/eclipse/jgit/org.eclipse.jgit/5.12.0.202106070339-r/org.eclipse.jgit-5.12.0.202106070339-r.pom
44062569f108b3b2163142b94aea2b8549ffdbcdefb66e6d5650d14ad3b4849f org/scalatest/scalatest-featurespec_2.13/3.2.16/scalatest-featurespec_2.13-3.2.16.pom
@@ -355,6 +355,7 @@
4b41aeb688e244a26d9629c90a286ea284c2fb6550dface2628c7b5a60bc09c7 org/apache/maven/resolver/maven-resolver-impl/1.6.3/maven-resolver-impl-1.6.3.pom
4b570fcdbe5a894f249d2eb9b929358a9c88c3e548d227a80010461930222f2a org/codehaus/plexus/plexus-utils/3.3.1/plexus-utils-3.3.1.jar
4b731e951a2cc890c139036348c224fe321b716120b8fde823b5ea762538d607 org/codehaus/janino/janino-parent/3.1.10/janino-parent-3.1.10.pom
+4b906373ae5cd7b9f37e47b1f2be6267106ec4e3eb01ce0308e87f3bc164f7bc fr/acinq/secp256k1/secp256k1-kmp-jni-jvm-linux/0.19.0/secp256k1-kmp-jni-jvm-linux-0.19.0.pom
4bdfb49157d5ecf36b05b3b1a4253d1e8cff2a28603cab1c0893c262c6819b58 com/softwaremill/sttp/client3/json-common_2.13/3.8.16/json-common_2.13-3.8.16.pom
4c0e71f92187ead7877a5a4f9eef0c07fc233ad88db256c0d58f51cdf129df21 io/netty/netty-resolver-dns-native-macos/4.1.94.Final/netty-resolver-dns-native-macos-4.1.94.Final-osx-x86_64.jar
4c390808024e92b769115d75fb424af96d2fd1404b359580f9a3b985cc0e0d93 com/github/jnr/jnr-constants/0.9.12/jnr-constants-0.9.12.pom
@@ -376,7 +377,6 @@
505777efcfb0c93baee9514c949b061c3d2f66c11d1e1d2c73a84995344dcd8c com/softwaremill/sttp/client3/json4s_2.13/3.8.16/json4s_2.13-3.8.16.pom
50d2a59155284109a708675b52ebb4598500e43693967cff1401cb26b97f8853 org/glassfish/javax.json/1.1.4/javax.json-1.1.4.pom
50d699f86369802baf2cd16c31d936ad8f0c1a8976120cd1dc3dc70c8abed99a org/apache/maven/doxia/doxia-sink-api/1.0/doxia-sink-api-1.0.pom
-50dd3830ac681abaa2831ae87fc42c25e54c4cad3aa6bf51badae89f11bc0c21 fr/acinq/bitcoin-lib_2.13/0.41/bitcoin-lib_2.13-0.41.pom
50fa72ddfdd176d02736e8f435e244882c7351d9397a27816b140f52a5d091ef org/apache/maven/doxia/doxia-module-fml/1.0/doxia-module-fml-1.0.jar
51215c67d2c068d8b7d2f6f80f51372a098075deccc448d4bdd7b987ba8328fb org/ow2/ow2/1.3/ow2-1.3.pom
512967d34539859e403cf489e8ba3ac7fc7648b5bdca44e1a81ca1312a78d6b3 org/apache/maven/surefire/surefire-extensions-spi/3.1.2/surefire-extensions-spi-3.1.2.jar
@@ -387,7 +387,7 @@
52f77c5ec49f787c9c417ebed5d6efd9922f44a202f217376e4f94c0d74f3549 org/codehaus/plexus/plexus-classworlds/2.6.0/plexus-classworlds-2.6.0.jar
53120586ef6f58019d3efb989a5c601827ba307e680ba0299eef9521831e4d25 com/softwaremill/sttp/shared/ws_2.13/1.3.13/ws_2.13-1.3.13.jar
53174d76087bb73cc29db9c02766fb921fd7fc652f7952f3609e0018e3dd5ded org/xerial/sqlite-jdbc/3.42.0.0/sqlite-jdbc-3.42.0.0.jar
-533d065f1af7c6e30437b10b15780a8729f6a077bd8774953beba8fb02451732 fr/acinq/secp256k1/secp256k1-kmp-jvm/0.18.0/secp256k1-kmp-jvm-0.18.0.jar
+533d065f1af7c6e30437b10b15780a8729f6a077bd8774953beba8fb02451732 fr/acinq/secp256k1/secp256k1-kmp-jvm/0.19.0/secp256k1-kmp-jvm-0.19.0.jar
53980a8268b6c1f1f1052759ca42e55ea614ec621611cb6248920aad70742854 com/typesafe/akka/akka-pki_2.13/2.6.20/akka-pki_2.13-2.6.20.jar
53ae5ea7fa5c284e8279aa348e7b9de4548b0cae10bfd058fa217c791875e4cf com/github/jnr/jnr-a64asm/1.0.0/jnr-a64asm-1.0.0.jar
53c887c082345b07dfe486b08cc805126c62fe863a027ce696db60428f4ab47c org/apache/maven/plugins/maven-assembly-plugin/3.6.0/maven-assembly-plugin-3.6.0.jar
@@ -396,6 +396,7 @@
548b0ef6f04356ef2283af5140d9404f38fd3891a509d468537abf2f9462944d javax/annotation/jsr250-api/1.0/jsr250-api-1.0.pom
5498d020941318c23a707b11b73032632da91672e36cc4a7e2fc4e19726c1306 org/apache/maven/shared/maven-common-artifact-filters/3.1.1/maven-common-artifact-filters-3.1.1.pom
55014a6339b3c6176fbb516d48c97a1a3ed7dbcaaa56e763e38b3518a54a35a4 com/github/jnr/jffi/1.2.18/jffi-1.2.18.jar
+5550f32786f0db25eda52a4135385e2701c082d9aab06156adfe5e8ce276b688 fr/acinq/secp256k1/secp256k1-kmp-jni-jvm-extract/0.19.0/secp256k1-kmp-jni-jvm-extract-0.19.0.pom
555d0c9eaa69c042aff924927b9381e8f8174136d355eead445224452e6291cc org/apache/apache/31/apache-31.pom
56039535b624f38c81dde40525a70b710e861f7972210c7ec679034b5d563973 org/apache/maven/maven-archiver/3.6.0/maven-archiver-3.6.0.pom
560c7051ddc768e1372e4087970764e4c013903c5dc6eb52c29877370dae2694 org/apache/commons/commons-parent/56/commons-parent-56.pom
@@ -429,7 +430,6 @@
5bbd1c09391144321563b6be39b53cb2fa7656f97e24dc19cd02f88115b70c2b org/scalatest/scalatest-shouldmatchers_2.13/3.2.16/scalatest-shouldmatchers_2.13-3.2.16.jar
5c1271080f49d69bb56be5030d07482cdaa3f5ec3e7716489b0fc3bd77eb6ebb org/scala-lang/scala-library/2.13.0/scala-library-2.13.0.pom
5c285b72e6dc0a98e99ae0a1ceeb4027dab9adfa441844046bd3f19e0efdcb54 org/scala-lang/modules/scala-parser-combinators_2.13/1.1.2/scala-parser-combinators_2.13-1.1.2.jar
-5c3127c10ef2f8b96018fad6905bbae5c2503d600870c2e62046d8ebeb39e760 fr/acinq/secp256k1/secp256k1-kmp-jni-jvm-darwin/0.18.0/secp256k1-kmp-jni-jvm-darwin-0.18.0.jar
5c31b96ad7c7c52a9bc9c6e8ee9ae963575819accfd6f99133ddaab8ec8e6780 io/netty/netty-handler-ssl-ocsp/4.1.94.Final/netty-handler-ssl-ocsp-4.1.94.Final.pom
5c856fefc046a88de0118ac5e45cddf638975fa980c007d242633276f7266f02 org/scala-lang/modules/scala-parser-combinators_2.13/1.1.2/scala-parser-combinators_2.13-1.1.2.pom
5c8b507a80901fcdaef89f50c639176b516e8866c6bf07be1ab8ab9da5a4877f org/eclipse/aether/aether-util/1.0.0.v20140518/aether-util-1.0.0.v20140518.pom
@@ -444,7 +444,6 @@
5fe611b07793d5ff3378ca3ae2c75e38bae08e73c3ae0acdf116ae5d6978d19f org/codehaus/plexus/plexus-container-default/1.0-alpha-20/plexus-container-default-1.0-alpha-20.pom
6047c86dae48672243662c26074731be6328edcc170a366807d56f57ce2a1965 org/apache/maven/doxia/doxia-module-xdoc/1.0/doxia-module-xdoc-1.0.pom
606b5fa03b171d8204aac0fbace11ee28e71175a0f869bd45f09c9319e7e88dc org/eclipse/aether/aether/1.0.0.v20140518/aether-1.0.0.v20140518.pom
-611946e9155e990c1215392636c97e0f12fa6c8caf33475e107ffee6cb7f2903 fr/acinq/secp256k1/secp256k1-kmp-jni-jvm-mingw/0.18.0/secp256k1-kmp-jni-jvm-mingw-0.18.0.jar
615e762648a4602b491234387d8f698da3e72909827ed26c01c9befe79eef127 com/typesafe/akka/akka-protobuf-v3_2.13/2.6.20/akka-protobuf-v3_2.13-2.6.20.jar
61988e54486a5dc38f06c70fdae5b108556c63bd433697b9f4305fcdb30fa40e org/apache/maven/shared/maven-shared-incremental/1.1/maven-shared-incremental-1.1.jar
61b49d85c73476d990fe289d7024ddc48739273777f5b6a15ac80ff9b7790a3b io/netty/netty-codec-dns/4.1.94.Final/netty-codec-dns-4.1.94.Final.pom
@@ -507,7 +506,6 @@
7098a1ab8336ecd4c9dc21cbbcac869f82c66f64b8ac4f7988d41b4fcb44e49a org/apache/commons/commons-parent/35/commons-parent-35.pom
70cef83d246309a2aa355c38f2004edda3621ae0bc5c55a7a139eaeef4d1231a org/apache/maven/maven-parent/16/maven-parent-16.pom
71525b143164e2db6ddd626623a6fd155c51a89801b34f395c727b9ea40d9f1e org/scalatest/scalatest-flatspec_2.13/3.2.16/scalatest-flatspec_2.13-3.2.16.jar
-717f6883e57e52857a4b47face1256bcd817647bff5282e14edea01098f6fe70 fr/acinq/secp256k1/secp256k1-kmp-jvm/0.18.0/secp256k1-kmp-jvm-0.18.0.pom
71853291f61bda32786a866533361cae474344f5b2772a379179b02112444ed3 org/scala-lang/scala-library/2.13.11/scala-library-2.13.11.jar
71999f597522e5f50eb41474ee2cbe2b9991651922ee8a090e00b8742de8c9a6 com/fasterxml/jackson/jackson-base/2.12.6/jackson-base-2.12.6.pom
71c4f78e437b8fdcd9cc0dfd2abea8c089eb677005a6a5cff320206cc52b46cc org/ow2/asm/asm/5.0.3/asm-5.0.3.jar
@@ -526,6 +524,7 @@
74bd60c8eebd3d43f77a66c69c86540c257a3a098172f8b1d7fcdc9ed3e139ea commons-io/commons-io/2.12.0/commons-io-2.12.0.jar
74ec6332eb86a295632c00348f304ce1e2ba7ea945ac21ca88f1bc6ac486ebfc org/scala-sbt/util-logging_2.13/1.8.0/util-logging_2.13-1.8.0.pom
755c07a1ae47cff80f633265b224341d6d8cc26f02d37eb407bc45ff5db9a71d org/apache/maven/maven-aether-provider/3.0/maven-aether-provider-3.0.pom
+757d252754e5ff8d239e72a77e88f01d8b47e4c0061722b2ff7c02a1722ff60e fr/acinq/secp256k1/secp256k1-kmp-jni-common/0.19.0/secp256k1-kmp-jni-common-0.19.0.pom
7580f14fa1691206e37081ad3f92063b1603b328da0bb316f2fef02e0562e7ec com/squareup/okhttp3/okhttp/4.10.0/okhttp-4.10.0.jar
758a0cc05d5e68e32e07ad96142d79426065f6c9ae8066b4ed2e28b67c506e37 com/typesafe/akka/akka-parsing_2.13/10.2.7/akka-parsing_2.13-10.2.7.pom
759079b9cf0cddae5ba06c96fd72347d82d0bc1d903c95d398c96522b139e470 org/apache/maven/maven-artifact/3.0/maven-artifact-3.0.jar
@@ -581,7 +580,6 @@
7fcc34e747ab753d7a842d6bf24f45c11852260ff181a60030a751f8b7d73865 io/netty/netty-codec-stomp/4.1.94.Final/netty-codec-stomp-4.1.94.Final.jar
7fd0cde8ca2d9a7904d67a7743785a7c2ea98ad45c32185db9d713a7a9232d0c com/github/luben/zstd-jni/1.5.5-2/zstd-jni-1.5.5-2.pom
8021cd27867f1503c906e5a9881933309f2ad7daca20ca13c96b81fbdc5ec9e8 org/scala-lang/scala-library/2.13.6/scala-library-2.13.6.pom
-8035a41188e52ebdc3c017a5cb2fbffe86b68776fa6e40a1bda52c44e25220c1 fr/acinq/secp256k1/secp256k1-kmp-jni-jvm-darwin/0.18.0/secp256k1-kmp-jni-jvm-darwin-0.18.0.pom
803766d9fecc4112c72b39951e60c2e60156c2b100c3aa11df98b27583ba3eb6 nu/studer/java-ordered-properties/1.0.4/java-ordered-properties-1.0.4.jar
8066ee7c49f9f29da96ee62f7cb13bee022cb4b68e51437b33da3b6d01398f13 io/netty/netty-buffer/4.1.94.Final/netty-buffer-4.1.94.Final.jar
807df085f4f5d0fe962565f7671684867abb0355de02ed76ee030d41f5b86445 com/amazonaws/aws-java-sdk-core/1.12.504/aws-java-sdk-core-1.12.504.pom
@@ -605,12 +603,12 @@
83ee748b12d06afb0ad4050a591132b3e8025fbb1990f1ed002e8b73293e69b4 org/codehaus/plexus/plexus-utils/3.0.24/plexus-utils-3.0.24.jar
84b98521684ab22f9528470fa6d8ab68a230e1b211623c989ba7016c306eb773 org/eclipse/aether/aether-api/1.0.0.v20140518/aether-api-1.0.0.v20140518.jar
8526329bb34b9dd24ff93bd7175c7a572f98351dcbe504c5d686838de871079e org/apache/maven/maven-model/3.8.2/maven-model-3.8.2.jar
+85884e0975bfc1c110322f3c5e905ad5b15fcdc65a53db250f626386b07736d2 fr/acinq/secp256k1/secp256k1-kmp-jni-jvm/0.19.0/secp256k1-kmp-jni-jvm-0.19.0.jar
85a1275db305ff756eff284f13919a27ae693d6e94c65b013cc236da1efc3d7d org/scodec/scodec-bits_2.13/1.1.37/scodec-bits_2.13-1.1.37.pom
85af589ccb95d5f435b7f3b9895bf4ee5ca2e995dfb32abf4767a772cd1c9ab2 com/fasterxml/jackson/dataformat/jackson-dataformat-cbor/2.12.6/jackson-dataformat-cbor-2.12.6.pom
866414588fe0a8fb7341baa987f6fee05671b9859e28c32cb63bc529f42a63a9 com/fasterxml/jackson/core/jackson-core/2.12.7/jackson-core-2.12.7.pom
86c2d5e817489e1b478bd713c5cd8ad980eb9045fa831ef3a0d72952a20d4395 org/scala-lang/scala-compiler/2.13.11/scala-compiler-2.13.11.pom
86e0255d4c879c61b4833ed7f13124e8bb679df47debb127326e7db7dd49a07b org/codehaus/plexus/plexus-utils/3.5.1/plexus-utils-3.5.1.jar
-87277f609b746d32dc1ce427960513cccaf9d8af287e6c027ba5d1d1edb51ebe fr/acinq/secp256k1/secp256k1-kmp-jni-jvm/0.18.0/secp256k1-kmp-jni-jvm-0.18.0.jar
873139960c4c780176dda580b003a2c4bf82188bdce5bb99234e224ef7acfceb org/codehaus/plexus/plexus-sec-dispatcher/2.0/plexus-sec-dispatcher-2.0.jar
879b3e718453c8b934ff5e8225107a24701bde392f96daf6135f94f9e161dbc5 org/scala-lang/modules/scala-java8-compat_2.13/1.0.0/scala-java8-compat_2.13-1.0.0.jar
87e66ffad03aa18129ea0762d2c02f566a9480e6eee8d84e25e1b931f12ea831 org/eclipse/sisu/org.eclipse.sisu.plexus/0.3.4/org.eclipse.sisu.plexus-0.3.4.jar
@@ -661,6 +659,7 @@
91f7a33096ea69bac2cbaf6d01feb934cac002c48d8c8cfa9c240b40f1ec21df org/apache/apache/19/apache-19.pom
91fbba37f1c8b251cf9ea9e7d3a369eb79eb1e6a5df1d4bbf483dd0380740281 com/google/guava/guava/32.1.1-jre/guava-32.1.1-jre.jar
920135797dcca5917b5a5c017642a58d340a4cd1bcd12f56f892a5663bd7bddc com/google/errorprone/error_prone_annotations/2.18.0/error_prone_annotations-2.18.0.pom
+9254428fa7b0f40275c40e8d5dfd3a189c8a938250d6b8b936f1d812b037ea56 fr/acinq/bitcoin/bitcoin-kmp-jvm/0.26.0/bitcoin-kmp-jvm-0.26.0.pom
9283e684d401d821a4cbb2646f9611cbbcd7828d2499483d13a4b507775a4cd7 org/scalatest/scalatest-compatible/3.2.16/scalatest-compatible-3.2.16.jar
92eee24bc3c843e4881d46c1dd6505471ee3142facfb466b428cfea5a56c6b60 org/ow2/asm/asm/9.6/asm-9.6.pom
92f1c78b5b6775430e3ad4ca3bc5ea0fe862f28b1ee69fa293e2d1b33be977da org/scalatest/scalatest-wordspec_2.13/3.2.16/scalatest-wordspec_2.13-3.2.16.jar
@@ -695,19 +694,21 @@
98d561914ff908ec21d8b46bef89fb7af824d416dfd32b1ba71fa5d4a4f4c7a0 org/jline/jline-parent/3.21.0/jline-parent-3.21.0.pom
998f2b12ddad4904bf19d5971d048970f31b7d774be06449ca04428fd4975fae io/netty/netty-transport-classes-epoll/4.1.94.Final/netty-transport-classes-epoll-4.1.94.Final.pom
9990a2039778f6b4cc94790141c2868864eacee0620c6c459451121a901cd5b5 io/github/java-diff-utils/java-diff-utils/4.12/java-diff-utils-4.12.jar
-99f6d699d72a3e8274b275718868d69cf225823353988c765c2243f041c96812 fr/acinq/secp256k1/secp256k1-kmp-jni-jvm-mingw/0.18.0/secp256k1-kmp-jni-jvm-mingw-0.18.0.pom
+9a3529d60e7f4de5bb02c075d64502b265c41c0e4dc80bb926b2f2cc47b66a8d fr/acinq/bitcoin/bitcoin-kmp-jvm/0.26.0/bitcoin-kmp-jvm-0.26.0.jar
9a3b99f097f93ce0f1643560f727a24fa9e2d0e3bbbb044a518a2cd17c1e5ac0 org/apache/maven/wagon/wagon/2.12/wagon-2.12.pom
9a4c894f2601f403396363f31b22ff55f665de9393c0ec941df38a05d5ab4d66 org/codehaus/plexus/plexus-i18n/1.0-beta-7/plexus-i18n-1.0-beta-7.pom
9a7f1b5c5a9effd61eadfd8731452a2f76a8e79111fac391ef75ea801bea203a org/codehaus/plexus/plexus-cipher/2.0/plexus-cipher-2.0.jar
9a8273601fbeb2fd822bcd1df06e0ddb9d76e6e884b0f96a00567f6a2e5d5c0f com/typesafe/akka/akka-actor_2.13/2.6.20/akka-actor_2.13-2.6.20.jar
9aa9dfeb2e85e1d5e7932c87140697cecc2b0fadd933d679fd420a2e43831a82 oro/oro/2.0.8/oro-2.0.8.pom
9b28bb307017938a94d06c85b2b099bc46912b859d084fb293e569f432eadb7c org/codehaus/plexus/plexus-sec-dispatcher/2.0/plexus-sec-dispatcher-2.0.pom
+9ba123b4c224c1b0bff2fbdb93f67679481789ad608eddf988662252e4c363a2 fr/acinq/secp256k1/secp256k1-kmp-jvm/0.19.0/secp256k1-kmp-jvm-0.19.0.pom
9bb6808b89502af52b4662dfcd797945cb869a54b57f994e1652cab9f4d8f835 org/scala-sbt/zinc-compile-core_2.13/1.8.0/zinc-compile-core_2.13-1.8.0.pom
9c5f7cd5226ac8c3798cb1f800c031f7dedc1606dc50dc29567877c8224459a7 org/sonatype/forge/forge-parent/6/forge-parent-6.pom
9c62e83b103e38b10351603e246d7e54899d4a8f1d305176f5546dd3f8c55358 joda-time/joda-time/2.10.10/joda-time-2.10.10.pom
9c6b7a64b5649f669a5882a844ab0f9869733dc78c02fc980889647fac0dcf55 com/softwaremill/sttp/client3/json4s_2.13/3.8.16/json4s_2.13-3.8.16.jar
9c9b62a7703d4994b60fb7f9e42805f9abc798d1397e4d22c1118cd12aa678d8 org/codehaus/plexus/plexus-compiler/2.15.0/plexus-compiler-2.15.0.pom
9cba594c08db7271d0c20e9845d622bb39e69583910b45e7d5df82f6058d4dd9 org/apache/httpcomponents/httpcomponents-client/4.5.13/httpcomponents-client-4.5.13.pom
+9d174c91974e4a356cfe1c6db29fb58bd9aff07b19579658be6322d0a26fbdd5 fr/acinq/secp256k1/secp256k1-kmp-jni-jvm/0.19.0/secp256k1-kmp-jni-jvm-0.19.0.pom
9d5d51eb42081d6fc13f4dca6855cd30d098a5b1d0b06d5644a1342bd1e50a44 io/netty/netty-transport-classes-epoll/4.1.94.Final/netty-transport-classes-epoll-4.1.94.Final.jar
9dd9c299ca3ec9287db2ec26571a5cc611dc21a1a4f5d2ef1255a924face47a8 com/github/jnr/jnr-a64asm/1.0.0/jnr-a64asm-1.0.0.pom
9ddf5d8882837bb6e96db62671b979d842749a22f137b6e1124783d16840fabb org/apache/maven/surefire/surefire-shared-utils/3.1.2/surefire-shared-utils-3.1.2.pom
@@ -756,7 +757,6 @@ a775e6bbf89895978ea3b702aa759fd42c0f128e63d0a589fd5cf5d8afbf5451 org/slf4j/slf4
a7cb7fcc257ae8b3d6089e21c5607c32d284c7955a7a0ac5d351a30298a7ab84 com/typesafe/akka/akka-stream_2.13/2.6.20/akka-stream_2.13-2.6.20.jar
a7f1fec73e53a9796bcfd8d41c490d61dd70141604752e6e75b2e755f044fe8f org/scala-sbt/compiler-interface/1.8.0/compiler-interface-1.8.0.jar
a837bd7d73291564dc8e8c826de0fede75896527a35bdcddb77b0545ee656a4c org/codehaus/plexus/plexus-archiver/4.9.2/plexus-archiver-4.9.2.jar
-a84771a8394441c5ad84c165a6ec8f09fd341d85b6be764506706660a8ee5911 fr/acinq/secp256k1/secp256k1-kmp-jni-common/0.18.0/secp256k1-kmp-jni-common-0.18.0.pom
a854365061c28821ddf1a520b8a197991613fd1d56f50f42c468b789b4714f20 org/codehaus/plexus/plexus-components/1.1.12/plexus-components-1.1.12.pom
a87c049279564d207b6f807a9b27c859b4e68273692d9e2c80fbe283fd86a6aa com/typesafe/akka/akka-slf4j_2.13/2.6.20/akka-slf4j_2.13-2.6.20.pom
a88f57fa7917db25fa555ac867b5bf76c660a7016a6be39be607f5dcfa792944 org/eclipse/sisu/org.eclipse.sisu.plexus/0.3.4/org.eclipse.sisu.plexus-0.3.4.pom
@@ -948,6 +948,7 @@ da73e32b58132e64daf12269fd9d011c0b303f234840f179908725a632b6b57c org/sonatype/p
dac807f65b07698ff39b1b07bfef3d87ae3fd46d91bbf8a2bc02b2a831616f68 org/apache/commons/commons-lang3/3.8.1/commons-lang3-3.8.1.jar
dada2833d2f72fe87a60f5cd115762a8d7e8979d19dd35559893ff3ad1d9253c org/scodec/scodec-core_2.13/1.11.10/scodec-core_2.13-1.11.10.pom
daddea1ea0be0f56978ab3006b8ac92834afeefbd9b7e4e6316fca57df0fa636 commons-logging/commons-logging/1.2/commons-logging-1.2.jar
+db36392894c6a7d8b5f2e21b05556aa047b93566a78974ee1d55db6ce8728742 fr/acinq/secp256k1/secp256k1-kmp-jni-jvm-darwin/0.19.0/secp256k1-kmp-jni-jvm-darwin-0.19.0.pom
db5f50d0615eb423bf46aef97bf0e2ffcf96f135fff6028fb6f8ffa6df280b98 org/jline/jline-terminal/3.19.0/jline-terminal-3.19.0.pom
dc2807225359adffd593c60a7d1352969554113a0a5a20962f23a1cfd6539ffc org/jline/jline-parent/3.19.0/jline-parent-3.19.0.pom
dd0317f46922124e81571781a4276d425fab4abc95f43701b9a6bb7ac72584d4 org/scala-lang/scala-library/2.13.1/scala-library-2.13.1.pom
@@ -981,10 +982,10 @@ e302200cf462cf1af9f3e870738253cdf90d7abc8279b9d3b507a5d0d3b9f289 org/sonatype/s
e32cc4b1244adec021c5a6b52bcdbe73441769bf0f60d154920b3c03604b855d io/netty/netty-resolver/4.1.94.Final/netty-resolver-4.1.94.Final.pom
e38ad14b9c6596e0133c58511aa668e3b14784484e0df5d0ef92438dbeb0682a org/apache/maven/maven-repository-metadata/3.8.6/maven-repository-metadata-3.8.6.pom
e3dfe1964273e253016e11e39546d2f7133af6cd7801051a438cf77f32640ce0 org/scala-sbt/zinc_2.13/1.8.0/zinc_2.13-1.8.0.pom
-e43a2b3fa3b8f0b6e0a4f05c0580e9bea38a83ff5a37c92b5e1ac88c69403061 fr/acinq/secp256k1/secp256k1-kmp-jni-jvm-linux/0.18.0/secp256k1-kmp-jni-jvm-linux-0.18.0.pom
e465bc09128b9b9ed92e26c56bba72a2c6101560abf7d60df5753f6b05222a41 org/apache/maven/maven-model/3.8.6/maven-model-3.8.6.pom
e5182eb3e5e73cf89d6426ca7f5cbae2e72819b9bed68d872f80f3b535269cb8 org/codehaus/plexus/plexus-utils/3.5.0/plexus-utils-3.5.0.jar
e5430a6275a3c8c5230a73b3bf05ea20fde8383b113744a2c306f912f75fc575 io/zonky/test/postgres/embedded-postgres-binaries-linux-amd64-alpine/14.5.0/embedded-postgres-binaries-linux-amd64-alpine-14.5.0.jar
+e559dd653199390e0c52a87b998516ed5e8f46504e1fb0f91015f04bf0da599a fr/acinq/secp256k1/secp256k1-kmp-jni-jvm-linux/0.19.0/secp256k1-kmp-jni-jvm-linux-0.19.0.jar
e56188aa8ce51278006aa90bc7e0f304a81e2f1219f462e7d21f262535cd2795 org/sonatype/forge/forge-parent/5/forge-parent-5.pom
e599d5318e97aa48f42136a2927e6dfa4e8881dff0e6c8e3109ddbbff51d7b7d commons-codec/commons-codec/1.11/commons-codec-1.11.jar
e5aebcc93079a6f6470e93a8b8c446ede7db704fc1c75c7362f7e15af76f851b io/netty/netty-codec-xml/4.1.94.Final/netty-codec-xml-4.1.94.Final.pom
@@ -1023,13 +1024,13 @@ ef5dbc7fa918b6dbba71d27e5b3d7a00df624bcfa2549a7297f36fe275f634d7 org/codehaus/p
ef5fa49aeb90df9cac923435577dc9c2701a18ba29191b6e407e7870795eea35 org/codehaus/plexus/plexus-container-default/1.0-alpha-30/plexus-container-default-1.0-alpha-30.jar
ef88fe2a46361da645a9ffeeddf5bb49dd4b5f49cfca3457374fa10e85660fde org/apache/maven/maven-artifact-manager/2.0/maven-artifact-manager-2.0.jar
efaa4fc4832aad9703df46b89cb02845dbf4db6f6ac88534b7824c4956a3a5fb org/apache/maven/reporting/maven-reporting-api/3.0/maven-reporting-api-3.0.pom
-efc5c8d2c50345835dbc93c91741a97d480ea12c37ab6ff7dd144585290d12e7 fr/acinq/bitcoin/bitcoin-kmp-jvm/0.25.0/bitcoin-kmp-jvm-0.25.0.pom
f02a95fa1a5e95edb3ed859fd0fb7df709d121a35290eff8b74dce2ab7f4d6ed com/google/j2objc/j2objc-annotations/2.8/j2objc-annotations-2.8.jar
f094f01c1b5bd2a28d27063291a6dc20ea99d8209c037c990264396bcc08f7cd com/thoughtworks/paranamer/paranamer-parent/2.8/paranamer-parent-2.8.pom
f0c98c571e93a7cb4dd18df0fa308f0963e7a0620ac2d4244e61e709d03ad6be com/google/j2objc/j2objc-annotations/1.1/j2objc-annotations-1.1.pom
f15e206b98ca25294506d2dadfe5ce2a6da9df9cf7c85d8e7191f99a422df3c9 ch/qos/logback/logback-core/1.5.16/logback-core-1.5.16.jar
f1a709cd489f23498a0b6b3dfbfc0d21d4f15904791446dec7f8a58a7da5bd6a commons-lang/commons-lang/2.1/commons-lang-2.1.pom
f1c07cff218cb7f834ab5218671f996d188d07210bd425e1a31c6e57bb662399 org/apache/maven/doxia/doxia-sitetools/1.0/doxia-sitetools-1.0.pom
+f1ef1c48bf148b288d2dd961d3796ea33e5af0a8e9cb6b2fc91aedf829d3a767 fr/acinq/bitcoin-lib_2.13/0.43.2/bitcoin-lib_2.13-0.43.2.jar
f21d19eb49b4a66cd85354a9ee7335439ea92a368173760a202766008cc19924 org/apache/maven/shared/maven-shared-incremental/1.1/maven-shared-incremental-1.1.pom
f2df122d753eba8e980f238433466dba62debbc28661b7d423ee7a99098ab99b com/chuusai/shapeless_2.13/2.3.9/shapeless_2.13-2.3.9.pom
f3812df661f0a82e501d6b1ee14df1b277df29ab58c6c8c785624d6b1149b76d org/codehaus/plexus/plexus-velocity/1.1.7/plexus-velocity-1.1.7.pom
@@ -1083,7 +1084,6 @@ fd3edb9fd9b7cabd67a0c29c0c9c0a6d1ae7a40053956aec281f42ccad1bdcf1 org/slf4j/slf4
fd94a8ef572719510ee0a275632423060efa3f4756e996f92b34e1c1f5d4ef96 io/netty/netty-resolver-dns-native-macos/4.1.94.Final/netty-resolver-dns-native-macos-4.1.94.Final-osx-aarch_64.jar
fdc1a8e8a231d73a6f2258e2a48cf0f7fd7113366ee81c026b184dbc3021efe2 org/scala-lang/scala-library/2.13.13/scala-library-2.13.13.pom
fdfbcc92e87f424578b303bcb47e0f55fee990c4b6da0006c9e75879d1e442e4 org/scala-lang/scala-reflect/2.13.8/scala-reflect-2.13.8.jar
-fdfef41af418c7952a521eb313716ad9e690830f3f79892ace28de195f12d458 fr/acinq/secp256k1/secp256k1-kmp-jni-jvm-linux/0.18.0/secp256k1-kmp-jni-jvm-linux-0.18.0.jar
fe6b68b358059e530bcb4fdf17da534cc710e3bd443acd73f566fb6f824b44ab com/softwaremill/sttp/client3/okhttp-backend_2.13/3.8.16/okhttp-backend_2.13-3.8.16.jar
ff513db0361fd41237bef4784968bc15aae478d4ec0a9496f811072ccaf3841d org/apache/apache/13/apache-13.pom
ff690ffc550b7ada3a4b79ef4ca89bf002b24f43a13a35d10195c3bba63d7654 org/sonatype/aether/aether-util/1.7/aether-util-1.7.jar
diff --git a/eclair-core/src/main/scala/fr/acinq/eclair/channel/Commitments.scala b/eclair-core/src/main/scala/fr/acinq/eclair/channel/Commitments.scala
index 5ff0323..9e87a3a 100644
--- a/eclair-core/src/main/scala/fr/acinq/eclair/channel/Commitments.scala
+++ b/eclair-core/src/main/scala/fr/acinq/eclair/channel/Commitments.scala
@@ -1,10 +1,10 @@
package fr.acinq.eclair.channel
import akka.event.LoggingAdapter
-import fr.acinq.bitcoin.crypto.musig2.IndividualNonce
import fr.acinq.bitcoin.scalacompat.Crypto.{PrivateKey, PublicKey}
+import fr.acinq.bitcoin.scalacompat.Musig2.IndividualNonce
import fr.acinq.bitcoin.scalacompat.{ByteVector32, ByteVector64, Crypto, OutPoint, Satoshi, SatoshiLong, Transaction, TxId}
-import fr.acinq.eclair.blockchain.fee.{FeeratePerByte, FeeratePerKw, FeeratesPerKw, OnChainFeeConf}
+import fr.acinq.eclair.blockchain.fee.{FeeratePerKw, FeeratesPerKw, OnChainFeeConf}
import fr.acinq.eclair.channel.ChannelSpendSignature.{IndividualSignature, PartialSignatureWithNonce}
import fr.acinq.eclair.channel.Helpers.Closing
import fr.acinq.eclair.channel.Monitoring.{Metrics, Tags}
diff --git a/eclair-core/src/main/scala/fr/acinq/eclair/channel/Helpers.scala b/eclair-core/src/main/scala/fr/acinq/eclair/channel/Helpers.scala
index 98e7317..33c2676 100644
--- a/eclair-core/src/main/scala/fr/acinq/eclair/channel/Helpers.scala
+++ b/eclair-core/src/main/scala/fr/acinq/eclair/channel/Helpers.scala
@@ -17,8 +17,8 @@
package fr.acinq.eclair.channel
import akka.event.{DiagnosticLoggingAdapter, LoggingAdapter}
-import fr.acinq.bitcoin.crypto.musig2.IndividualNonce
import fr.acinq.bitcoin.scalacompat.Crypto.{PrivateKey, PublicKey, sha256}
+import fr.acinq.bitcoin.scalacompat.Musig2.{IndividualNonce, LocalNonce}
import fr.acinq.bitcoin.scalacompat._
import fr.acinq.eclair._
import fr.acinq.eclair.blockchain.OnChainPubkeyCache
diff --git a/eclair-core/src/main/scala/fr/acinq/eclair/channel/fsm/Channel.scala b/eclair-core/src/main/scala/fr/acinq/eclair/channel/fsm/Channel.scala
index fbad954..0300db9 100644
--- a/eclair-core/src/main/scala/fr/acinq/eclair/channel/fsm/Channel.scala
+++ b/eclair-core/src/main/scala/fr/acinq/eclair/channel/fsm/Channel.scala
@@ -20,8 +20,8 @@ import akka.actor.typed.scaladsl.Behaviors
import akka.actor.typed.scaladsl.adapter.{ClassicActorContextOps, actorRefAdapter}
import akka.actor.{Actor, ActorContext, ActorRef, FSM, OneForOneStrategy, PossiblyHarmful, Props, SupervisorStrategy, typed}
import akka.event.Logging.MDC
-import fr.acinq.bitcoin.crypto.musig2.IndividualNonce
import fr.acinq.bitcoin.scalacompat.Crypto.{PrivateKey, PublicKey}
+import fr.acinq.bitcoin.scalacompat.Musig2.{IndividualNonce, LocalNonce}
import fr.acinq.bitcoin.scalacompat.{ByteVector32, Satoshi, SatoshiLong, Transaction, TxId}
import fr.acinq.eclair.Logs.LogCategory
import fr.acinq.eclair._
diff --git a/eclair-core/src/main/scala/fr/acinq/eclair/channel/fund/InteractiveTxBuilder.scala b/eclair-core/src/main/scala/fr/acinq/eclair/channel/fund/InteractiveTxBuilder.scala
index 9a10fd1..7b841b1 100644
--- a/eclair-core/src/main/scala/fr/acinq/eclair/channel/fund/InteractiveTxBuilder.scala
+++ b/eclair-core/src/main/scala/fr/acinq/eclair/channel/fund/InteractiveTxBuilder.scala
@@ -22,9 +22,9 @@ import akka.actor.typed.scaladsl.{ActorContext, Behaviors, StashBuffer}
import akka.actor.typed.{ActorRef, Behavior}
import akka.event.LoggingAdapter
import fr.acinq.bitcoin.ScriptFlags
-import fr.acinq.bitcoin.crypto.musig2.IndividualNonce
import fr.acinq.bitcoin.psbt.Psbt
import fr.acinq.bitcoin.scalacompat.Crypto.{PrivateKey, PublicKey}
+import fr.acinq.bitcoin.scalacompat.Musig2.{IndividualNonce, LocalNonce}
import fr.acinq.bitcoin.scalacompat.{ByteVector32, LexicographicalOrdering, OutPoint, Satoshi, SatoshiLong, Script, ScriptWitness, Transaction, TxId, TxIn, TxOut}
import fr.acinq.eclair.blockchain.OnChainChannelFunder
import fr.acinq.eclair.blockchain.fee.FeeratePerKw
diff --git a/eclair-core/src/main/scala/fr/acinq/eclair/channel/fund/InteractiveTxFunder.scala b/eclair-core/src/main/scala/fr/acinq/eclair/channel/fund/InteractiveTxFunder.scala
index f5b22fd..d6935f0 100644
--- a/eclair-core/src/main/scala/fr/acinq/eclair/channel/fund/InteractiveTxFunder.scala
+++ b/eclair-core/src/main/scala/fr/acinq/eclair/channel/fund/InteractiveTxFunder.scala
@@ -19,7 +19,7 @@ package fr.acinq.eclair.channel.fund
import akka.actor.typed.scaladsl.{ActorContext, Behaviors}
import akka.actor.typed.{ActorRef, Behavior}
import fr.acinq.bitcoin.scalacompat.Crypto.PublicKey
-import fr.acinq.bitcoin.scalacompat.{KotlinUtils, OutPoint, Satoshi, SatoshiLong, Script, ScriptWitness, Transaction, TxIn, TxOut}
+import fr.acinq.bitcoin.scalacompat.{OutPoint, Satoshi, SatoshiLong, Script, ScriptWitness, Transaction, TxIn, TxOut}
import fr.acinq.eclair.blockchain.OnChainChannelFunder
import fr.acinq.eclair.blockchain.fee.FeeratePerKw
import fr.acinq.eclair.channel.fund.InteractiveTxBuilder._
@@ -75,7 +75,7 @@ object InteractiveTxFunder {
*/
def computeSpliceContribution(isInitiator: Boolean, sharedInput: SharedFundingInput, spliceInAmount: Satoshi, spliceOut: Seq[TxOut], targetFeerate: FeeratePerKw): Satoshi = {
val fees = if (spliceInAmount == 0.sat) {
- val spliceOutputsWeight = spliceOut.map(KotlinUtils.scala2kmp).map(_.weight()).sum
+ val spliceOutputsWeight = spliceOut.map(_.weight()).sum
val weight = if (isInitiator) {
// The initiator must add the shared input, the shared output and pay for the fees of the common transaction fields.
val dummyTx = Transaction(2, Nil, Seq(sharedInput.info.txOut), 0)
diff --git a/eclair-core/src/main/scala/fr/acinq/eclair/crypto/NonceGenerator.scala b/eclair-core/src/main/scala/fr/acinq/eclair/crypto/NonceGenerator.scala
index 02bc3a1..fd6c458 100644
--- a/eclair-core/src/main/scala/fr/acinq/eclair/crypto/NonceGenerator.scala
+++ b/eclair-core/src/main/scala/fr/acinq/eclair/crypto/NonceGenerator.scala
@@ -1,9 +1,9 @@
package fr.acinq.eclair.crypto
import fr.acinq.bitcoin.scalacompat.Crypto.{PrivateKey, PublicKey}
+import fr.acinq.bitcoin.scalacompat.Musig2.LocalNonce
import fr.acinq.bitcoin.scalacompat.{ByteVector32, Musig2, TxId}
import fr.acinq.eclair.randomBytes32
-import fr.acinq.eclair.transactions.Transactions.LocalNonce
import grizzled.slf4j.Logging
object NonceGenerator extends Logging {
@@ -17,8 +17,7 @@ object NonceGenerator extends Logging {
* @return a deterministic nonce used to sign our local commit tx: its public part is sent to our peer.
*/
def verificationNonce(fundingTxId: TxId, fundingPrivKey: PrivateKey, remoteFundingPubKey: PublicKey, commitIndex: Long): LocalNonce = {
- val nonces = Musig2.generateNonceWithCounter(commitIndex, fundingPrivKey, Seq(fundingPrivKey.publicKey, remoteFundingPubKey), None, Some(fundingTxId.value))
- LocalNonce(nonces._1, nonces._2)
+ Musig2.generateNonceWithCounter(commitIndex, fundingPrivKey, Seq(fundingPrivKey.publicKey, remoteFundingPubKey), None, Some(fundingTxId.value))
}
/**
@@ -26,8 +25,7 @@ object NonceGenerator extends Logging {
*/
def signingNonce(localFundingPubKey: PublicKey, remoteFundingPubKey: PublicKey, fundingTxId: TxId): LocalNonce = {
val sessionId = randomBytes32()
- val nonces = Musig2.generateNonce(sessionId, Right(localFundingPubKey), Seq(localFundingPubKey, remoteFundingPubKey), None, Some(fundingTxId.value))
- LocalNonce(nonces._1, nonces._2)
+ Musig2.generateNonce(sessionId, Right(localFundingPubKey), Seq(localFundingPubKey, remoteFundingPubKey), None, Some(fundingTxId.value))
}
}
diff --git a/eclair-core/src/main/scala/fr/acinq/eclair/crypto/keymanager/LocalOnChainKeyManager.scala b/eclair-core/src/main/scala/fr/acinq/eclair/crypto/keymanager/LocalOnChainKeyManager.scala
index 7145e2c..8eafa1b 100644
--- a/eclair-core/src/main/scala/fr/acinq/eclair/crypto/keymanager/LocalOnChainKeyManager.scala
+++ b/eclair-core/src/main/scala/fr/acinq/eclair/crypto/keymanager/LocalOnChainKeyManager.scala
@@ -17,7 +17,6 @@
package fr.acinq.eclair.crypto.keymanager
import com.typesafe.config.ConfigFactory
-import fr.acinq.bitcoin.ScriptTree
import fr.acinq.bitcoin.psbt.Psbt
import fr.acinq.bitcoin.scalacompat.DeterministicWallet._
import fr.acinq.bitcoin.scalacompat.{Block, BlockHash, ByteVector64, Crypto, DeterministicWallet, MnemonicCode, Satoshi, Script, computeBIP84Address}
@@ -295,8 +294,8 @@ class LocalOnChainKeyManager(override val walletName: String, seed: ByteVector,
}
private def signPsbtInput86(psbt: Psbt, pos: Int): Psbt = {
+ import fr.acinq.bitcoin.SigHash
import fr.acinq.bitcoin.scalacompat.KotlinUtils._
- import fr.acinq.bitcoin.{Script, SigHash}
val input = psbt.getInput(pos)
require(input != null, s"input $pos is missing from psbt: bitcoin core may be malicious")
@@ -307,7 +306,7 @@ class LocalOnChainKeyManager(override val walletName: String, seed: ByteVector,
val (pub, keypath) = input.getTaprootDerivationPaths.asScala.toSeq.head
val priv = fr.acinq.bitcoin.DeterministicWallet.derivePrivateKey(master.priv, keypath.keyPath).getPrivateKey
require(priv.publicKey().xOnly() == pub, s"derived public key doesn't match (expected=$pub actual=${priv.publicKey().xOnly()}): bitcoin core may be malicious")
- val expectedScript = ByteVector(Script.write(Script.pay2tr(pub, null.asInstanceOf[ScriptTree])))
+ val expectedScript = Script.write(Script.pay2tr(pub, None))
require(kmp2scala(input.getWitnessUtxo.publicKeyScript) == expectedScript, s"script mismatch (expected=$expectedScript, actual=${input.getWitnessUtxo.publicKeyScript}): bitcoin core may be malicious")
// No need to update the input, we can directly sign and finalize.
diff --git a/eclair-core/src/main/scala/fr/acinq/eclair/json/JsonSerializers.scala b/eclair-core/src/main/scala/fr/acinq/eclair/json/JsonSerializers.scala
index d6d76d0..f2e6871 100644
--- a/eclair-core/src/main/scala/fr/acinq/eclair/json/JsonSerializers.scala
+++ b/eclair-core/src/main/scala/fr/acinq/eclair/json/JsonSerializers.scala
@@ -17,9 +17,9 @@
package fr.acinq.eclair.json
import com.google.common.net.HostAndPort
-import fr.acinq.bitcoin.crypto.musig2.IndividualNonce
import fr.acinq.bitcoin.scalacompat.Crypto.{PrivateKey, PublicKey}
import fr.acinq.bitcoin.scalacompat.DeterministicWallet.KeyPath
+import fr.acinq.bitcoin.scalacompat.Musig2.IndividualNonce
import fr.acinq.bitcoin.scalacompat.{BlockHash, BlockId, Btc, ByteVector32, ByteVector64, OutPoint, Satoshi, Transaction, TxId}
import fr.acinq.eclair.balance.CheckBalance.{DetailedOnChainBalance, GlobalBalance, OffChainBalance}
import fr.acinq.eclair.blockchain.fee.FeeratePerKw
@@ -153,7 +153,7 @@ object ByteVector64Serializer extends MinimalSerializer({
})
object IndividualNonceSerializer extends MinimalSerializer({
- case x: IndividualNonce => JString(x.toString)
+ case x: IndividualNonce => JString(x.data.toHex)
})
object UInt64Serializer extends MinimalSerializer({
diff --git a/eclair-core/src/main/scala/fr/acinq/eclair/transactions/Scripts.scala b/eclair-core/src/main/scala/fr/acinq/eclair/transactions/Scripts.scala
index f2a9393..874e2ba 100644
--- a/eclair-core/src/main/scala/fr/acinq/eclair/transactions/Scripts.scala
+++ b/eclair-core/src/main/scala/fr/acinq/eclair/transactions/Scripts.scala
@@ -17,7 +17,6 @@
package fr.acinq.eclair.transactions
import fr.acinq.bitcoin.Script.LOCKTIME_THRESHOLD
-import fr.acinq.bitcoin.ScriptTree
import fr.acinq.bitcoin.SigHash._
import fr.acinq.bitcoin.TxIn.{SEQUENCE_LOCKTIME_DISABLE_FLAG, SEQUENCE_LOCKTIME_MASK, SEQUENCE_LOCKTIME_TYPE_FLAG}
import fr.acinq.bitcoin.scalacompat.Crypto.{PublicKey, XonlyPublicKey}
@@ -28,7 +27,6 @@ import fr.acinq.eclair.transactions.Transactions._
import fr.acinq.eclair.{BlockHeight, CltvExpiry, CltvExpiryDelta}
import scodec.bits.ByteVector
-import scala.jdk.CollectionConverters.SeqHasAsJava
import scala.util.{Success, Try}
/**
@@ -318,10 +316,6 @@ object Scripts {
*/
object Taproot {
- import KotlinUtils._
-
- implicit def scala2kmpscript(input: Seq[fr.acinq.bitcoin.scalacompat.ScriptElt]): java.util.List[fr.acinq.bitcoin.ScriptElt] = input.map(e => scala2kmp(e)).asJava
-
/**
* Taproot signatures are usually 64 bytes, unless a non-default sighash is used, in which case it is appended.
*/
@@ -347,7 +341,7 @@ object Scripts {
// miniscript: older(16)
private val anchorScript: Seq[ScriptElt] = OP_16 :: OP_CHECKSEQUENCEVERIFY :: Nil
- val anchorScriptTree = new ScriptTree.Leaf(anchorScript)
+ val anchorScriptTree = ScriptTree.Leaf(anchorScript)
/**
* Script used for local or remote anchor outputs.
@@ -381,7 +375,7 @@ object Scripts {
}
case class ToLocalScriptTree(localDelayed: ScriptTree.Leaf, revocation: ScriptTree.Leaf) {
- val scriptTree: ScriptTree.Branch = new ScriptTree.Branch(localDelayed, revocation)
+ val scriptTree: ScriptTree.Branch = ScriptTree.Branch(localDelayed, revocation)
}
/**
@@ -389,8 +383,8 @@ object Scripts {
*/
def toLocalScriptTree(keys: CommitmentPublicKeys, toSelfDelay: CltvExpiryDelta): ToLocalScriptTree = {
ToLocalScriptTree(
- new ScriptTree.Leaf(toLocalDelayed(keys, toSelfDelay)),
- new ScriptTree.Leaf(toRevocationKey(keys)),
+ ScriptTree.Leaf(toLocalDelayed(keys, toSelfDelay)),
+ ScriptTree.Leaf(toRevocationKey(keys)),
)
}
@@ -419,7 +413,7 @@ object Scripts {
* @return a script tree with a single leaf (to remote key, with a 1-block CSV delay)
*/
def toRemoteScriptTree(keys: CommitmentPublicKeys): ScriptTree.Leaf = {
- new ScriptTree.Leaf(toRemoteDelayed(keys))
+ ScriptTree.Leaf(toRemoteDelayed(keys))
}
/**
@@ -459,7 +453,7 @@ object Scripts {
}
case class OfferedHtlcScriptTree(timeout: ScriptTree.Leaf, success: ScriptTree.Leaf) {
- val scriptTree: ScriptTree.Branch = new ScriptTree.Branch(timeout, success)
+ val scriptTree: ScriptTree.Branch = ScriptTree.Branch(timeout, success)
def witnessTimeout(commitKeys: LocalCommitmentKeys, localSig: ByteVector64, remoteSig: ByteVector64): ScriptWitness = {
Script.witnessScriptPathPay2tr(commitKeys.revocationPublicKey.xOnly, timeout, ScriptWitness(Seq(Taproot.encodeSig(remoteSig, htlcRemoteSighash(ZeroFeeHtlcTxSimpleTaprootChannelCommitmentFormat)), localSig)), scriptTree)
@@ -475,8 +469,8 @@ object Scripts {
*/
def offeredHtlcScriptTree(keys: CommitmentPublicKeys, paymentHash: ByteVector32): OfferedHtlcScriptTree = {
OfferedHtlcScriptTree(
- new ScriptTree.Leaf(offeredHtlcTimeout(keys)),
- new ScriptTree.Leaf(offeredHtlcSuccess(keys, paymentHash)),
+ ScriptTree.Leaf(offeredHtlcTimeout(keys)),
+ ScriptTree.Leaf(offeredHtlcSuccess(keys, paymentHash)),
)
}
@@ -510,7 +504,7 @@ object Scripts {
}
case class ReceivedHtlcScriptTree(timeout: ScriptTree.Leaf, success: ScriptTree.Leaf) {
- val scriptTree = new ScriptTree.Branch(timeout, success)
+ val scriptTree = ScriptTree.Branch(timeout, success)
def witnessSuccess(commitKeys: LocalCommitmentKeys, localSig: ByteVector64, remoteSig: ByteVector64, paymentPreimage: ByteVector32): ScriptWitness = {
Script.witnessScriptPathPay2tr(commitKeys.revocationPublicKey.xOnly, success, ScriptWitness(Seq(Taproot.encodeSig(remoteSig, htlcRemoteSighash(ZeroFeeHtlcTxSimpleTaprootChannelCommitmentFormat)), localSig, paymentPreimage)), scriptTree)
@@ -526,8 +520,8 @@ object Scripts {
*/
def receivedHtlcScriptTree(keys: CommitmentPublicKeys, paymentHash: ByteVector32, expiry: CltvExpiry): ReceivedHtlcScriptTree = {
ReceivedHtlcScriptTree(
- new ScriptTree.Leaf(receivedHtlcTimeout(keys, expiry)),
- new ScriptTree.Leaf(receivedHtlcSuccess(keys, paymentHash)),
+ ScriptTree.Leaf(receivedHtlcTimeout(keys, expiry)),
+ ScriptTree.Leaf(receivedHtlcSuccess(keys, paymentHash)),
)
}
@@ -535,7 +529,7 @@ object Scripts {
* Script tree used for the output of pre-signed HTLC 2nd-stage transactions.
*/
def htlcDelayedScriptTree(keys: CommitmentPublicKeys, toSelfDelay: CltvExpiryDelta): ScriptTree.Leaf = {
- new ScriptTree.Leaf(toLocalDelayed(keys, toSelfDelay))
+ ScriptTree.Leaf(toLocalDelayed(keys, toSelfDelay))
}
/**
diff --git a/eclair-core/src/main/scala/fr/acinq/eclair/transactions/Transactions.scala b/eclair-core/src/main/scala/fr/acinq/eclair/transactions/Transactions.scala
index d60a70b..9608b64 100644
--- a/eclair-core/src/main/scala/fr/acinq/eclair/transactions/Transactions.scala
+++ b/eclair-core/src/main/scala/fr/acinq/eclair/transactions/Transactions.scala
@@ -18,11 +18,11 @@ package fr.acinq.eclair.transactions
import fr.acinq.bitcoin.SigHash._
import fr.acinq.bitcoin.SigVersion._
-import fr.acinq.bitcoin.crypto.musig2.{IndividualNonce, SecretNonce}
import fr.acinq.bitcoin.scalacompat.Crypto.{PrivateKey, PublicKey, XonlyPublicKey}
import fr.acinq.bitcoin.scalacompat.KotlinUtils._
import fr.acinq.bitcoin.scalacompat._
-import fr.acinq.bitcoin.{ScriptFlags, ScriptTree}
+import fr.acinq.bitcoin.ScriptFlags
+import fr.acinq.bitcoin.scalacompat.Musig2.{IndividualNonce, LocalNonce}
import fr.acinq.eclair._
import fr.acinq.eclair.blockchain.fee.FeeratePerKw
import fr.acinq.eclair.channel.ChannelSpendSignature
@@ -239,15 +239,13 @@ object Transactions {
* @param leafHash hash of the leaf script we're spending (must belong to the tree).
*/
case class TaprootScriptPath(internalKey: XonlyPublicKey, scriptTree: ScriptTree, leafHash: ByteVector32) extends Taproot {
- val leaf: ScriptTree.Leaf = Option(scriptTree.findScript(leafHash)).getOrElse(throw new IllegalArgumentException("script tree must contain the provided leaf"))
+ val leaf: ScriptTree.Leaf = scriptTree.findScript(leafHash).getOrElse(throw new IllegalArgumentException("script tree must contain the provided leaf"))
val redeemScript: ByteVector = leaf.getScript
override val pubkeyScript: ByteVector = Script.write(Script.pay2tr(internalKey, Some(scriptTree)))
}
}
// @formatter:on
- case class LocalNonce(secretNonce: SecretNonce, publicNonce: IndividualNonce)
-
sealed trait TransactionWithInputInfo {
// @formatter:off
def input: InputInfo
diff --git a/eclair-core/src/main/scala/fr/acinq/eclair/wire/protocol/ChannelTlv.scala b/eclair-core/src/main/scala/fr/acinq/eclair/wire/protocol/ChannelTlv.scala
index e0a4440..ac0f921 100644
--- a/eclair-core/src/main/scala/fr/acinq/eclair/wire/protocol/ChannelTlv.scala
+++ b/eclair-core/src/main/scala/fr/acinq/eclair/wire/protocol/ChannelTlv.scala
@@ -16,7 +16,7 @@
package fr.acinq.eclair.wire.protocol
-import fr.acinq.bitcoin.crypto.musig2.IndividualNonce
+import fr.acinq.bitcoin.scalacompat.Musig2.IndividualNonce
import fr.acinq.bitcoin.scalacompat.{ByteVector32, ByteVector64, Satoshi, TxId}
import fr.acinq.eclair.channel.ChannelSpendSignature.PartialSignatureWithNonce
import fr.acinq.eclair.channel.{ChannelType, ChannelTypes}
diff --git a/eclair-core/src/main/scala/fr/acinq/eclair/wire/protocol/CommonCodecs.scala b/eclair-core/src/main/scala/fr/acinq/eclair/wire/protocol/CommonCodecs.scala
index 8fad3ef..9feb009 100644
--- a/eclair-core/src/main/scala/fr/acinq/eclair/wire/protocol/CommonCodecs.scala
+++ b/eclair-core/src/main/scala/fr/acinq/eclair/wire/protocol/CommonCodecs.scala
@@ -16,8 +16,8 @@
package fr.acinq.eclair.wire.protocol
-import fr.acinq.bitcoin.crypto.musig2.IndividualNonce
import fr.acinq.bitcoin.scalacompat.Crypto.{PrivateKey, PublicKey}
+import fr.acinq.bitcoin.scalacompat.Musig2.IndividualNonce
import fr.acinq.bitcoin.scalacompat.{BlockHash, ByteVector32, ByteVector64, Satoshi, Transaction, TxHash, TxId}
import fr.acinq.eclair.blockchain.fee.FeeratePerKw
import fr.acinq.eclair.channel.ChannelSpendSignature.PartialSignatureWithNonce
@@ -160,8 +160,8 @@ object CommonCodecs {
val publicKey: Codec[PublicKey] = catchAllCodec(bytes(33).xmap(bin => PublicKey(bin), pub => pub.value))
val publicNonce: Codec[IndividualNonce] = Codec[IndividualNonce](
- (pub: IndividualNonce) => bytes(Secp256k1.MUSIG2_PUBLIC_NONCE_SIZE).encode(ByteVector.view(pub.toByteArray)),
- (wire: BitVector) => bytes(Secp256k1.MUSIG2_PUBLIC_NONCE_SIZE).decode(wire).map(_.map(b => new IndividualNonce(b.toArray)))
+ (pub: IndividualNonce) => bytes(Secp256k1.MUSIG2_PUBLIC_NONCE_SIZE).encode(pub.data),
+ (wire: BitVector) => bytes(Secp256k1.MUSIG2_PUBLIC_NONCE_SIZE).decode(wire).map(_.map(IndividualNonce(_)))
)
val partialSignatureWithNonce: Codec[PartialSignatureWithNonce] = (bytes32 :: publicNonce).as[PartialSignatureWithNonce]
diff --git a/eclair-core/src/main/scala/fr/acinq/eclair/wire/protocol/HtlcTlv.scala b/eclair-core/src/main/scala/fr/acinq/eclair/wire/protocol/HtlcTlv.scala
index 2471bd3..2a62118 100644
--- a/eclair-core/src/main/scala/fr/acinq/eclair/wire/protocol/HtlcTlv.scala
+++ b/eclair-core/src/main/scala/fr/acinq/eclair/wire/protocol/HtlcTlv.scala
@@ -16,8 +16,8 @@
package fr.acinq.eclair.wire.protocol
-import fr.acinq.bitcoin.crypto.musig2.IndividualNonce
import fr.acinq.bitcoin.scalacompat.Crypto.PublicKey
+import fr.acinq.bitcoin.scalacompat.Musig2.IndividualNonce
import fr.acinq.bitcoin.scalacompat.TxId
import fr.acinq.eclair.UInt64
import fr.acinq.eclair.channel.ChannelSpendSignature.PartialSignatureWithNonce
diff --git a/eclair-core/src/main/scala/fr/acinq/eclair/wire/protocol/InteractiveTxTlv.scala b/eclair-core/src/main/scala/fr/acinq/eclair/wire/protocol/InteractiveTxTlv.scala
index 8450634..f8ae3d1 100644
--- a/eclair-core/src/main/scala/fr/acinq/eclair/wire/protocol/InteractiveTxTlv.scala
+++ b/eclair-core/src/main/scala/fr/acinq/eclair/wire/protocol/InteractiveTxTlv.scala
@@ -16,7 +16,7 @@
package fr.acinq.eclair.wire.protocol
-import fr.acinq.bitcoin.crypto.musig2.IndividualNonce
+import fr.acinq.bitcoin.scalacompat.Musig2.IndividualNonce
import fr.acinq.bitcoin.scalacompat.{ByteVector64, Satoshi, TxId}
import fr.acinq.eclair.UInt64
import fr.acinq.eclair.channel.ChannelSpendSignature.PartialSignatureWithNonce
diff --git a/eclair-core/src/main/scala/fr/acinq/eclair/wire/protocol/LightningMessageTypes.scala b/eclair-core/src/main/scala/fr/acinq/eclair/wire/protocol/LightningMessageTypes.scala
index 01fd334..ba4d08f 100644
--- a/eclair-core/src/main/scala/fr/acinq/eclair/wire/protocol/LightningMessageTypes.scala
+++ b/eclair-core/src/main/scala/fr/acinq/eclair/wire/protocol/LightningMessageTypes.scala
@@ -18,8 +18,8 @@ package fr.acinq.eclair.wire.protocol
import com.google.common.base.Charsets
import com.google.common.net.InetAddresses
-import fr.acinq.bitcoin.crypto.musig2.IndividualNonce
import fr.acinq.bitcoin.scalacompat.Crypto.{PrivateKey, PublicKey}
+import fr.acinq.bitcoin.scalacompat.Musig2.IndividualNonce
import fr.acinq.bitcoin.scalacompat.{BlockHash, ByteVector32, ByteVector64, OutPoint, Satoshi, SatoshiLong, ScriptWitness, Transaction, TxId, TxOut}
import fr.acinq.eclair.blockchain.fee.FeeratePerKw
import fr.acinq.eclair.channel.ChannelSpendSignature.{IndividualSignature, PartialSignatureWithNonce}
diff --git a/eclair-core/src/main/scala/fr/acinq/eclair/wire/protocol/OfferTypes.scala b/eclair-core/src/main/scala/fr/acinq/eclair/wire/protocol/OfferTypes.scala
index e15d213..aa64f18 100644
--- a/eclair-core/src/main/scala/fr/acinq/eclair/wire/protocol/OfferTypes.scala
+++ b/eclair-core/src/main/scala/fr/acinq/eclair/wire/protocol/OfferTypes.scala
@@ -17,13 +17,13 @@
package fr.acinq.eclair.wire.protocol
import fr.acinq.bitcoin.Bech32
-import fr.acinq.bitcoin.scalacompat.Crypto.{PrivateKey, PublicKey, XonlyPublicKey}
+import fr.acinq.bitcoin.scalacompat.Crypto.{PrivateKey, PublicKey, SchnorrTweak, XonlyPublicKey}
import fr.acinq.bitcoin.scalacompat.{Block, BlockHash, ByteVector32, ByteVector64, Crypto, LexicographicalOrdering}
import fr.acinq.eclair.crypto.Sphinx.RouteBlinding.BlindedRoute
import fr.acinq.eclair.wire.protocol.CommonCodecs.varint
import fr.acinq.eclair.wire.protocol.OnionRoutingCodecs.{ForbiddenTlv, InvalidTlvPayload, MissingRequiredTlv}
import fr.acinq.eclair.wire.protocol.TlvCodecs.genericTlv
-import fr.acinq.eclair.{Bolt12Feature, CltvExpiryDelta, Feature, Features, MilliSatoshi, MilliSatoshiLong, TimestampSecond, UInt64, nodeFee, randomBytes32}
+import fr.acinq.eclair.{Bolt12Feature, CltvExpiryDelta, Features, MilliSatoshi, MilliSatoshiLong, TimestampSecond, UInt64, nodeFee, randomBytes32}
import scodec.Codec
import scodec.bits.ByteVector
import scodec.codecs.vector
@@ -316,6 +316,7 @@ object OfferTypes {
/**
* An offer string can be split with '+' to fit in places with a low character limit. This validates that the string adheres to the spec format to guard against copy-pasting errors.
+ *
* @return a lowercase string with '+' and whitespaces removed
*/
private def validateFormat(s: String): String = {
@@ -445,7 +446,7 @@ object OfferTypes {
}
case class InvoiceError(records: TlvStream[InvoiceErrorTlv]) {
- val error = records.get[Error].get.message
+ val error: String = records.get[Error].get.message
}
object InvoiceError {
@@ -499,7 +500,7 @@ object OfferTypes {
def signSchnorr(tag: ByteVector, msg: ByteVector32, key: PrivateKey): ByteVector64 = {
val h = hash(tag, msg)
// NB: we don't add auxiliary random data to keep signatures deterministic.
- Crypto.signSchnorr(h, key, fr.acinq.bitcoin.Crypto.SchnorrTweak.NoTweak.INSTANCE)
+ Crypto.signSchnorr(h, key, SchnorrTweak.NoTweak)
}
def verifySchnorr(tag: ByteVector, msg: ByteVector32, signature: ByteVector64, publicKey: PublicKey): Boolean = {
diff --git a/eclair-core/src/test/scala/fr/acinq/eclair/transactions/TransactionsSpec.scala b/eclair-core/src/test/scala/fr/acinq/eclair/transactions/TransactionsSpec.scala
index ed50512..af9f165 100644
--- a/eclair-core/src/test/scala/fr/acinq/eclair/transactions/TransactionsSpec.scala
+++ b/eclair-core/src/test/scala/fr/acinq/eclair/transactions/TransactionsSpec.scala
@@ -286,9 +286,9 @@ class TransactionsSpec extends AnyFunSuite with Logging {
commitTxFeerate = feeratePerKw,
toLocal = 400.millibtc.toMilliSatoshi,
toRemote = 300.millibtc.toMilliSatoshi)
- val (secretLocalNonce, publicLocalNonce) = Musig2.generateNonce(randomBytes32(), Left(localFundingPriv), Seq(localFundingPriv.publicKey), None, None)
- val (secretRemoteNonce, publicRemoteNonce) = Musig2.generateNonce(randomBytes32(), Left(remoteFundingPriv), Seq(remoteFundingPriv.publicKey), None, None)
- val publicNonces = Seq(publicLocalNonce, publicRemoteNonce)
+ val localNonce = Musig2.generateNonce(randomBytes32(), Left(localFundingPriv), Seq(localFundingPriv.publicKey), None, None)
+ val remoteNonce = Musig2.generateNonce(randomBytes32(), Left(remoteFundingPriv), Seq(remoteFundingPriv.publicKey), None, None)
+ val publicNonces = Seq(localNonce, remoteNonce).map(_.publicNonce)
val (commitTx, commitTxOutputs, htlcTimeoutTxs, htlcSuccessTxs) = {
val commitTxNumber = 0x404142434445L
@@ -297,11 +297,11 @@ class TransactionsSpec extends AnyFunSuite with Logging {
val commitTx = commitmentFormat match {
case _: SimpleTaprootChannelCommitmentFormat =>
val Right(commitTx) = for {
- localPartialSig <- txInfo.partialSign(localFundingPriv, remoteFundingPriv.publicKey, LocalNonce(secretLocalNonce, publicLocalNonce), publicNonces)
- remotePartialSig <- txInfo.partialSign(remoteFundingPriv, localFundingPriv.publicKey, LocalNonce(secretRemoteNonce, publicRemoteNonce), publicNonces)
- _ = assert(txInfo.checkRemotePartialSignature(localFundingPriv.publicKey, remoteFundingPriv.publicKey, remotePartialSig, publicLocalNonce))
+ localPartialSig <- txInfo.partialSign(localFundingPriv, remoteFundingPriv.publicKey, localNonce, publicNonces)
+ remotePartialSig <- txInfo.partialSign(remoteFundingPriv, localFundingPriv.publicKey, remoteNonce, publicNonces)
+ _ = assert(txInfo.checkRemotePartialSignature(localFundingPriv.publicKey, remoteFundingPriv.publicKey, remotePartialSig, localNonce.publicNonce))
invalidRemotePartialSig = ChannelSpendSignature.PartialSignatureWithNonce(randomBytes32(), remotePartialSig.nonce)
- _ = assert(!txInfo.checkRemotePartialSignature(localFundingPriv.publicKey, remoteFundingPriv.publicKey, invalidRemotePartialSig, publicLocalNonce))
+ _ = assert(!txInfo.checkRemotePartialSignature(localFundingPriv.publicKey, remoteFundingPriv.publicKey, invalidRemotePartialSig, localNonce.publicNonce))
tx <- txInfo.aggregateSigs(localFundingPriv.publicKey, remoteFundingPriv.publicKey, localPartialSig, remotePartialSig)
} yield tx
commitTx
diff --git a/eclair-core/src/test/scala/fr/acinq/eclair/wire/protocol/LightningMessageCodecsSpec.scala b/eclair-core/src/test/scala/fr/acinq/eclair/wire/protocol/LightningMessageCodecsSpec.scala
index 13140c8..4c08afb 100644
--- a/eclair-core/src/test/scala/fr/acinq/eclair/wire/protocol/LightningMessageCodecsSpec.scala
+++ b/eclair-core/src/test/scala/fr/acinq/eclair/wire/protocol/LightningMessageCodecsSpec.scala
@@ -17,8 +17,8 @@
package fr.acinq.eclair.wire.protocol
import com.google.common.base.Charsets
-import fr.acinq.bitcoin.crypto.musig2.IndividualNonce
import fr.acinq.bitcoin.scalacompat.Crypto.{PrivateKey, PublicKey}
+import fr.acinq.bitcoin.scalacompat.Musig2.IndividualNonce
import fr.acinq.bitcoin.scalacompat.{Block, BlockHash, ByteVector32, ByteVector64, OutPoint, SatoshiLong, Script, ScriptWitness, Transaction, TxHash, TxId}
import fr.acinq.eclair.FeatureSupport.Optional
import fr.acinq.eclair.Features.DataLossProtect
@@ -149,8 +149,8 @@ class LightningMessageCodecsSpec extends AnyFunSuite {
val point = randomKey().publicKey
val txId = randomTxId()
val nextTxId = randomTxId()
- val nonce = new IndividualNonce(randomBytes(66).toArray)
- val nextNonce = new IndividualNonce(randomBytes(66).toArray)
+ val nonce = IndividualNonce(randomBytes(66))
+ val nextNonce = IndividualNonce(randomBytes(66))
val randomData = randomBytes(42)
val tlvTag = UInt64(hex"47010000")
@@ -163,24 +163,24 @@ class LightningMessageCodecsSpec extends AnyFunSuite {
hex"0088" ++ channelId ++ hex"0001020304050607 0809aabbccddeeff" ++ key.value ++ point.value ++ hex"00 20" ++ txId.value.reverse -> ChannelReestablish(channelId, 0x01020304050607L, 0x0809aabbccddeeffL, key, point, TlvStream(ChannelReestablishTlv.NextFundingTlv(txId))),
hex"0088" ++ channelId ++ hex"0001020304050607 0809aabbccddeeff" ++ key.value ++ point.value ++ hex"01 20" ++ txId.value.reverse -> ChannelReestablish(channelId, 0x01020304050607L, 0x0809aabbccddeeffL, key, point, TlvStream(ChannelReestablishTlv.YourLastFundingLockedTlv(txId))),
hex"0088" ++ channelId ++ hex"0001020304050607 0809aabbccddeeff" ++ key.value ++ point.value ++ hex"03 20" ++ txId.value.reverse -> ChannelReestablish(channelId, 0x01020304050607L, 0x0809aabbccddeeffL, key, point, TlvStream(ChannelReestablishTlv.MyCurrentFundingLockedTlv(txId))),
- hex"0088" ++ channelId ++ hex"0001020304050607 0809aabbccddeeff" ++ key.value ++ point.value ++ hex"18 42" ++ ByteVector(nonce.toByteArray) -> ChannelReestablish(channelId, 0x01020304050607L, 0x0809aabbccddeeffL, key, point, TlvStream(ChannelReestablishTlv.CurrentCommitNonceTlv(nonce))),
- hex"0088" ++ channelId ++ hex"0001020304050607 0809aabbccddeeff" ++ key.value ++ point.value ++ hex"16 c4" ++ txId.value.reverse ++ ByteVector(nonce.toByteArray) ++ nextTxId.value.reverse ++ ByteVector(nextNonce.toByteArray) -> ChannelReestablish(channelId, 0x01020304050607L, 0x0809aabbccddeeffL, key, point, TlvStream(ChannelReestablishTlv.NextLocalNoncesTlv(Seq(txId -> nonce, nextTxId -> nextNonce)))),
+ hex"0088" ++ channelId ++ hex"0001020304050607 0809aabbccddeeff" ++ key.value ++ point.value ++ hex"18 42" ++ nonce.data -> ChannelReestablish(channelId, 0x01020304050607L, 0x0809aabbccddeeffL, key, point, TlvStream(ChannelReestablishTlv.CurrentCommitNonceTlv(nonce))),
+ hex"0088" ++ channelId ++ hex"0001020304050607 0809aabbccddeeff" ++ key.value ++ point.value ++ hex"16 c4" ++ txId.value.reverse ++ nonce.data ++ nextTxId.value.reverse ++ nextNonce.data -> ChannelReestablish(channelId, 0x01020304050607L, 0x0809aabbccddeeffL, key, point, TlvStream(ChannelReestablishTlv.NextLocalNoncesTlv(Seq(txId -> nonce, nextTxId -> nextNonce)))),
hex"0088" ++ channelId ++ hex"0001020304050607 0809aabbccddeeff" ++ key.value ++ point.value ++ hex"fe47010000 00" -> ChannelReestablish(channelId, 0x01020304050607L, 0x0809aabbccddeeffL, key, point, TlvStream[ChannelReestablishTlv](Set.empty[ChannelReestablishTlv], Set(GenericTlv(tlvTag, ByteVector.empty)))),
hex"0088" ++ channelId ++ hex"0001020304050607 0809aabbccddeeff" ++ key.value ++ point.value ++ hex"fe47010000 07 bbbbbbbbbbbbbb" -> ChannelReestablish(channelId, 0x01020304050607L, 0x0809aabbccddeeffL, key, point, TlvStream[ChannelReestablishTlv](Set.empty[ChannelReestablishTlv], Set(GenericTlv(tlvTag, hex"bbbbbbbbbbbbbb")))),
hex"0084" ++ channelId ++ signature ++ hex"0000" -> CommitSig(channelId, IndividualSignature(signature), Nil),
- hex"0084" ++ channelId ++ ByteVector64.Zeroes ++ hex"0000" ++ hex"02 62" ++ partialSig ++ ByteVector(nonce.toByteArray) -> CommitSig(channelId, PartialSignatureWithNonce(partialSig, nonce), Nil, batchSize = 1),
+ hex"0084" ++ channelId ++ ByteVector64.Zeroes ++ hex"0000" ++ hex"02 62" ++ partialSig ++ nonce.data -> CommitSig(channelId, PartialSignatureWithNonce(partialSig, nonce), Nil, batchSize = 1),
hex"0084" ++ channelId ++ signature ++ hex"0000 fe47010000 00" -> CommitSig(channelId, IndividualSignature(signature), Nil, TlvStream[CommitSigTlv](Set.empty[CommitSigTlv], Set(GenericTlv(tlvTag, ByteVector.empty)))),
hex"0084" ++ channelId ++ signature ++ hex"0000 fe47010000 07 cccccccccccccc" -> CommitSig(channelId, IndividualSignature(signature), Nil, TlvStream[CommitSigTlv](Set.empty[CommitSigTlv], Set(GenericTlv(tlvTag, hex"cccccccccccccc")))),
hex"0085" ++ channelId ++ key.value ++ point.value -> RevokeAndAck(channelId, key, point),
- hex"0085" ++ channelId ++ key.value ++ point.value ++ hex"16 62" ++ txId.value.reverse ++ ByteVector(nonce.toByteArray) -> RevokeAndAck(channelId, key, point, Seq(txId -> nonce)),
- hex"0085" ++ channelId ++ key.value ++ point.value ++ hex"16 c4" ++ txId.value.reverse ++ ByteVector(nonce.toByteArray) ++ nextTxId.value.reverse ++ ByteVector(nextNonce.toByteArray) -> RevokeAndAck(channelId, key, point, Seq(txId -> nonce, nextTxId -> nextNonce)),
+ hex"0085" ++ channelId ++ key.value ++ point.value ++ hex"16 62" ++ txId.value.reverse ++ nonce.data -> RevokeAndAck(channelId, key, point, Seq(txId -> nonce)),
+ hex"0085" ++ channelId ++ key.value ++ point.value ++ hex"16 c4" ++ txId.value.reverse ++ nonce.data ++ nextTxId.value.reverse ++ nextNonce.data -> RevokeAndAck(channelId, key, point, Seq(txId -> nonce, nextTxId -> nextNonce)),
hex"0085" ++ channelId ++ key.value ++ point.value ++ hex" fe47010000 00" -> RevokeAndAck(channelId, key, point, TlvStream[RevokeAndAckTlv](Set.empty[RevokeAndAckTlv], Set(GenericTlv(tlvTag, ByteVector.empty)))),
hex"0085" ++ channelId ++ key.value ++ point.value ++ hex" fe47010000 07 cccccccccccccc" -> RevokeAndAck(channelId, key, point, TlvStream[RevokeAndAckTlv](Set.empty[RevokeAndAckTlv], Set(GenericTlv(tlvTag, hex"cccccccccccccc")))),
hex"0026" ++ channelId ++ hex"002a" ++ randomData -> Shutdown(channelId, randomData),
- hex"0026" ++ channelId ++ hex"002a" ++ randomData ++ hex"08 42" ++ ByteVector(nonce.toByteArray) -> Shutdown(channelId, randomData, nonce),
+ hex"0026" ++ channelId ++ hex"002a" ++ randomData ++ hex"08 42" ++ nonce.data -> Shutdown(channelId, randomData, nonce),
hex"0026" ++ channelId ++ hex"002a" ++ randomData ++ hex"fe47010000 00" -> Shutdown(channelId, randomData, TlvStream[ShutdownTlv](Set.empty[ShutdownTlv], Set(GenericTlv(tlvTag, ByteVector.empty)))),
hex"0026" ++ channelId ++ hex"002a" ++ randomData ++ hex"fe47010000 07 cccccccccccccc" -> Shutdown(channelId, randomData, TlvStream[ShutdownTlv](Set.empty[ShutdownTlv], Set(GenericTlv(tlvTag, hex"cccccccccccccc")))),
@@ -215,9 +215,9 @@ class LightningMessageCodecsSpec extends AnyFunSuite {
// This is random, longer mainnet transaction.
val txBin2 = hex"0200000000010142180a8812fc79a3da7fb2471eff3e22d7faee990604c2ba7f2fc8dfb15b550a0200000000feffffff030f241800000000001976a9146774040642a78ca3b8b395e70f8391b21ec026fc88ac4a155801000000001600148d2e0b57adcb8869e603fd35b5179caf053361253b1d010000000000160014e032f4f4b9f8611df0d30a20648c190c263bbc33024730440220506005aa347f5b698542cafcb4f1a10250aeb52a609d6fd67ef68f9c1a5d954302206b9bb844343f4012bccd9d08a0f5430afb9549555a3252e499be7df97aae477a012103976d6b3eea3de4b056cd88cdfd50a22daf121e0fb5c6e45ba0f40e1effbd275a00000000"
val tx2 = Transaction.read(txBin2.toArray)
- val nonce = new IndividualNonce("2062534ccb3be5a8997843f3b6bc530a94cbc60eceb538674ceedd62d8be07f2dfa5df6acf3ded7444268d56925bb2c33afe71a55f4fa88f3985451a681415930f6b")
- val nextNonce = new IndividualNonce("b218b34786408f0a1aee2b35a0e860aa234b8013d1c385d1fcb4583fc4472bedfdd69a53c71006ec9f8b33724b719a50aa137814f4d0c00caff4e1da0d9856a957e7")
- val fundingNonce = new IndividualNonce("a49ff67b08c720b993c946556cde1be1c3b664bc847c4792135dfd6ef0986e00e9871808c6620b0420567dad525b27431453d4434fd326f8ac56496639b72326eb5d")
+ val nonce = IndividualNonce(hex"2062534ccb3be5a8997843f3b6bc530a94cbc60eceb538674ceedd62d8be07f2dfa5df6acf3ded7444268d56925bb2c33afe71a55f4fa88f3985451a681415930f6b")
+ val nextNonce = IndividualNonce(hex"b218b34786408f0a1aee2b35a0e860aa234b8013d1c385d1fcb4583fc4472bedfdd69a53c71006ec9f8b33724b719a50aa137814f4d0c00caff4e1da0d9856a957e7")
+ val fundingNonce = IndividualNonce(hex"a49ff67b08c720b993c946556cde1be1c3b664bc847c4792135dfd6ef0986e00e9871808c6620b0420567dad525b27431453d4434fd326f8ac56496639b72326eb5d")
val fundingRate = LiquidityAds.FundingRate(25_000 sat, 250_000 sat, 750, 150, 50 sat, 500 sat)
val testCases = Seq(
TxAddInput(channelId1, UInt64(561), Some(tx1), 1, 5) -> hex"0042 aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa 0000000000000231 00f7 020000000001014ade359c5deb7c1cde2e94f401854658f97d7fa31c17ce9a831db253120a0a410100000017160014eb9a5bd79194a23d19d6ec473c768fb74f9ed32cffffffff021ca408000000000017a914946118f24bb7b37d5e9e39579e4a411e70f5b6a08763e703000000000017a9143638b2602d11f934c04abc6adb1494f69d1f14af8702473044022059ddd943b399211e4266a349f26b3289979e29f9b067792c6cfa8cc5ae25f44602204d627a5a5b603d0562e7969011fb3d64908af90a3ec7c876eaa9baf61e1958af012102f5188df1da92ed818581c29778047800ed6635788aa09d9469f7d17628f7323300000000 00000001 00000005",
@@ -261,7 +261,7 @@ class LightningMessageCodecsSpec extends AnyFunSuite {
test("encode/decode open_channel") {
val defaultOpen = OpenChannel(BlockHash(ByteVector32.Zeroes), ByteVector32.Zeroes, 1 sat, 1 msat, 1 sat, UInt64(1), 1 sat, 1 msat, FeeratePerKw(1 sat), CltvExpiryDelta(1), 1, publicKey(1), point(2), point(3), point(4), point(5), point(6), ChannelFlags(announceChannel = false))
- val nonce = new IndividualNonce("2062534ccb3be5a8997843f3b6bc530a94cbc60eceb538674ceedd62d8be07f2dfa5df6acf3ded7444268d56925bb2c33afe71a55f4fa88f3985451a681415930f6b")
+ val nonce = IndividualNonce(hex"2062534ccb3be5a8997843f3b6bc530a94cbc60eceb538674ceedd62d8be07f2dfa5df6acf3ded7444268d56925bb2c33afe71a55f4fa88f3985451a681415930f6b")
// Legacy encoding that omits the upfront_shutdown_script and trailing tlv stream.
// To allow extending all messages with TLV streams, the upfront_shutdown_script was moved to a TLV stream extension
// in https://github.com/lightningnetwork/lightning-rfc/pull/714 and made mandatory when including a TLV stream.
@@ -368,7 +368,7 @@ class LightningMessageCodecsSpec extends AnyFunSuite {
test("encode/decode accept_channel") {
val defaultAccept = AcceptChannel(ByteVector32.Zeroes, 1 sat, UInt64(1), 1 sat, 1 msat, 1, CltvExpiryDelta(1), 1, publicKey(1), point(2), point(3), point(4), point(5), point(6))
- val nonce = new IndividualNonce("2062534ccb3be5a8997843f3b6bc530a94cbc60eceb538674ceedd62d8be07f2dfa5df6acf3ded7444268d56925bb2c33afe71a55f4fa88f3985451a681415930f6b")
+ val nonce = IndividualNonce(hex"2062534ccb3be5a8997843f3b6bc530a94cbc60eceb538674ceedd62d8be07f2dfa5df6acf3ded7444268d56925bb2c33afe71a55f4fa88f3985451a681415930f6b")
// Legacy encoding that omits the upfront_shutdown_script and trailing tlv stream.
// To allow extending all messages with TLV streams, the upfront_shutdown_script was moved to a TLV stream extension
// in https://github.com/lightningnetwork/lightning-rfc/pull/714 and made mandatory when including a TLV stream.
@@ -553,13 +553,13 @@ class LightningMessageCodecsSpec extends AnyFunSuite {
val channelId = ByteVector32(hex"58a00a6f14e69a2e97b18cf76f755c8551fea9947cf7b6ece9d641013eba5f86")
val sig1 = ByteVector64(hex"01010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101")
val partialSig1 = ByteVector32(hex"0101010101010101010101010101010101010101010101010101010101010101")
- val nonce1 = new IndividualNonce("52682593fd0783ea60657ed2d118e8f958c4a7a198237749b6729eccf963be1bc559531ec4b83bcfc42009cd08f7e95747146cec2fd09571b3fa76656e3012a4c97a")
+ val nonce1 = IndividualNonce(hex"52682593fd0783ea60657ed2d118e8f958c4a7a198237749b6729eccf963be1bc559531ec4b83bcfc42009cd08f7e95747146cec2fd09571b3fa76656e3012a4c97a")
val sig2 = ByteVector64(hex"02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202")
val partialSig2 = ByteVector32(hex"0202020202020202020202020202020202020202020202020202020202020202")
- val nonce2 = new IndividualNonce("585b2fe8ca7a969bbda11ee9cbc95386abfddcc901967f84da4011c2a7cb5ada1dae51bdcd93a8b2933fcec7b2cda5a3f43ea2d0a29eb126bd329d4735d5389fe703")
+ val nonce2 = IndividualNonce(hex"585b2fe8ca7a969bbda11ee9cbc95386abfddcc901967f84da4011c2a7cb5ada1dae51bdcd93a8b2933fcec7b2cda5a3f43ea2d0a29eb126bd329d4735d5389fe703")
val sig3 = ByteVector64(hex"03030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303")
val partialSig3 = ByteVector32(hex"0303030303030303030303030303030303030303030303030303030303030303")
- val nonce3 = new IndividualNonce("19bed0825ceb5acf504cddea72e37a75505290a22850c183725963edfe2dfb9f26e27180b210c05635987b80b3de3b7d01732653565b9f25ec23f7aff26122e00bff")
+ val nonce3 = IndividualNonce(hex"19bed0825ceb5acf504cddea72e37a75505290a22850c183725963edfe2dfb9f26e27180b210c05635987b80b3de3b7d01732653565b9f25ec23f7aff26122e00bff")
val closerScript = hex"deadbeef"
val closeeScript = hex"d43db3ef1234"
val testCases = Seq(
@@ -595,7 +595,7 @@ class LightningMessageCodecsSpec extends AnyFunSuite {
FundingSigned(randomBytes32(), randomBytes64()),
ChannelReady(randomBytes32(), point(2)),
ChannelReady(randomBytes32(), point(2), Alias(123456)),
- ChannelReady(randomBytes32(), point(2), Alias(123456), new IndividualNonce(randomBytes(66).toArray)),
+ ChannelReady(randomBytes32(), point(2), Alias(123456), IndividualNonce(randomBytes(66))),
UpdateFee(randomBytes32(), FeeratePerKw(2 sat)),
Shutdown(randomBytes32(), bin(47, 0)),
ClosingSigned(randomBytes32(), 2 sat, randomBytes64()),
diff --git a/pom.xml b/pom.xml
index 3a44515..4e5edde 100644
--- a/pom.xml
+++ b/pom.xml
@@ -71,7 +71,7 @@
<akka.version>2.6.20</akka.version>
<akka.http.version>10.2.7</akka.http.version>
<sttp.version>3.8.16</sttp.version>
- <bitcoinlib.version>0.41</bitcoinlib.version>
+ <bitcoinlib.version>0.43.2</bitcoinlib.version>
<guava.version>32.1.1-jre</guava.version>
<kamon.version>2.7.4</kamon.version>
<kanela-agent.version>1.0.18</kanela-agent.version>
Why this scored 35/100
Community notes
Notes can correct, qualify, or add evidence to the AI analysis. Every note shown here has been validated by a human moderator.
The AI analysis stands alone for now. Submit a note if you can add evidence or important context.