From a00462a8446dccd0448e9e59449ca06f99d3f273 Mon Sep 17 00:00:00 2001 From: sstone Date: Wed, 31 Jan 2024 10:55:44 +0100 Subject: [PATCH 1/3] User Either type provided by bitcoin-kmp --- .../blockchain/electrum/ElectrumClient.kt | 3 +- .../blockchain/electrum/ElectrumDataTypes.kt | 1 + .../fr/acinq/lightning/channel/Commitments.kt | 1 + .../fr/acinq/lightning/channel/Helpers.kt | 1 + .../acinq/lightning/channel/InteractiveTx.kt | 6 ++- .../acinq/lightning/channel/states/Channel.kt | 1 + .../acinq/lightning/channel/states/Closing.kt | 2 +- .../states/LegacyWaitForFundingConfirmed.kt | 2 +- .../states/LegacyWaitForFundingLocked.kt | 2 +- .../lightning/channel/states/Negotiating.kt | 2 +- .../acinq/lightning/channel/states/Normal.kt | 5 ++- .../acinq/lightning/channel/states/Offline.kt | 2 +- .../lightning/channel/states/ShuttingDown.kt | 2 +- .../acinq/lightning/channel/states/Syncing.kt | 2 +- .../channel/states/WaitForAcceptChannel.kt | 2 +- .../channel/states/WaitForChannelReady.kt | 2 +- .../channel/states/WaitForFundingConfirmed.kt | 2 +- .../channel/states/WaitForFundingCreated.kt | 2 +- .../channel/states/WaitForFundingSigned.kt | 2 +- .../channel/states/WaitForOpenChannel.kt | 2 +- .../acinq/lightning/crypto/sphinx/Sphinx.kt | 1 + .../fr/acinq/lightning/db/PaymentsDb.kt | 1 + .../kotlin/fr/acinq/lightning/io/Peer.kt | 1 + .../acinq/lightning/json/JsonSerializers.kt | 2 +- .../payment/IncomingPaymentHandler.kt | 1 + .../payment/IncomingPaymentPacket.kt | 2 +- .../payment/OutgoingPaymentFailure.kt | 2 +- .../payment/OutgoingPaymentHandler.kt | 1 + .../payment/OutgoingPaymentPacket.kt | 2 +- .../acinq/lightning/payment/PaymentRequest.kt | 1 + .../lightning/payment/RouteCalculation.kt | 2 +- .../serialization/v2/ChannelState.kt | 2 +- .../serialization/v3/ChannelState.kt | 2 +- .../serialization/v4/Deserialization.kt | 1 + .../serialization/v4/Serialization.kt | 2 +- .../kotlin/fr/acinq/lightning/utils/Either.kt | 39 ------------------- .../fr/acinq/lightning/wire/LiquidityAds.kt | 2 +- .../electrum/ElectrumRequestTest.kt | 1 + .../channel/CommitmentsTestsCommon.kt | 1 + .../channel/InteractiveTxTestsCommon.kt | 2 +- .../channel/states/NormalTestsCommon.kt | 1 + .../channel/states/ShutdownTestsCommon.kt | 2 +- .../crypto/sphinx/SphinxTestsCommon.kt | 2 +- .../acinq/lightning/db/InMemoryPaymentsDb.kt | 2 +- .../lightning/db/PaymentsDbTestsCommon.kt | 1 + .../fr/acinq/lightning/io/peer/PeerTest.kt | 1 + .../IncomingPaymentHandlerTestsCommon.kt | 1 + .../OutgoingPaymentFailureTestsCommon.kt | 2 +- .../OutgoingPaymentHandlerTestsCommon.kt | 1 + .../payment/PaymentPacketTestsCommon.kt | 1 + .../payment/PaymentRequestTestsCommon.kt | 1 + .../payment/RouteCalculationTestsCommon.kt | 1 + 52 files changed, 57 insertions(+), 71 deletions(-) delete mode 100644 src/commonMain/kotlin/fr/acinq/lightning/utils/Either.kt diff --git a/src/commonMain/kotlin/fr/acinq/lightning/blockchain/electrum/ElectrumClient.kt b/src/commonMain/kotlin/fr/acinq/lightning/blockchain/electrum/ElectrumClient.kt index ce0f5a9e7..fb846b19b 100644 --- a/src/commonMain/kotlin/fr/acinq/lightning/blockchain/electrum/ElectrumClient.kt +++ b/src/commonMain/kotlin/fr/acinq/lightning/blockchain/electrum/ElectrumClient.kt @@ -1,6 +1,7 @@ package fr.acinq.lightning.blockchain.electrum import fr.acinq.bitcoin.* +import fr.acinq.bitcoin.utils.Either import fr.acinq.lightning.blockchain.fee.FeeratePerKw import fr.acinq.lightning.io.TcpSocket import fr.acinq.lightning.io.send @@ -129,7 +130,7 @@ class ElectrumClient( withTimeout(timeout) { val handshakeFlow = linesFlow(socket) .map { json.decodeFromString(ElectrumResponseDeserializer, it) } - .filterIsInstance>() + .filterIsInstance>() .map { it.value } // Note that since we synchronously wait for the response, we can safely reuse requestId = 0. val ourVersion = ServerVersion() diff --git a/src/commonMain/kotlin/fr/acinq/lightning/blockchain/electrum/ElectrumDataTypes.kt b/src/commonMain/kotlin/fr/acinq/lightning/blockchain/electrum/ElectrumDataTypes.kt index bb84d8b7c..3fff5e3b7 100644 --- a/src/commonMain/kotlin/fr/acinq/lightning/blockchain/electrum/ElectrumDataTypes.kt +++ b/src/commonMain/kotlin/fr/acinq/lightning/blockchain/electrum/ElectrumDataTypes.kt @@ -3,6 +3,7 @@ package fr.acinq.lightning.blockchain.electrum import fr.acinq.bitcoin.* import fr.acinq.bitcoin.io.ByteArrayInput import fr.acinq.bitcoin.io.readNBytes +import fr.acinq.bitcoin.utils.Either import fr.acinq.lightning.blockchain.fee.FeeratePerKB import fr.acinq.lightning.blockchain.fee.FeeratePerKw import fr.acinq.lightning.utils.* diff --git a/src/commonMain/kotlin/fr/acinq/lightning/channel/Commitments.kt b/src/commonMain/kotlin/fr/acinq/lightning/channel/Commitments.kt index 43103c86f..4a1124d1f 100644 --- a/src/commonMain/kotlin/fr/acinq/lightning/channel/Commitments.kt +++ b/src/commonMain/kotlin/fr/acinq/lightning/channel/Commitments.kt @@ -2,6 +2,7 @@ package fr.acinq.lightning.channel import fr.acinq.bitcoin.* import fr.acinq.bitcoin.Crypto.sha256 +import fr.acinq.bitcoin.utils.Either import fr.acinq.lightning.CltvExpiryDelta import fr.acinq.lightning.Feature import fr.acinq.lightning.MilliSatoshi diff --git a/src/commonMain/kotlin/fr/acinq/lightning/channel/Helpers.kt b/src/commonMain/kotlin/fr/acinq/lightning/channel/Helpers.kt index aef2f09f1..3dea139eb 100644 --- a/src/commonMain/kotlin/fr/acinq/lightning/channel/Helpers.kt +++ b/src/commonMain/kotlin/fr/acinq/lightning/channel/Helpers.kt @@ -5,6 +5,7 @@ import fr.acinq.bitcoin.Crypto.ripemd160 import fr.acinq.bitcoin.Crypto.sha256 import fr.acinq.bitcoin.Script.pay2wsh import fr.acinq.bitcoin.Script.write +import fr.acinq.bitcoin.utils.Either import fr.acinq.lightning.Feature import fr.acinq.lightning.Features import fr.acinq.lightning.MilliSatoshi diff --git a/src/commonMain/kotlin/fr/acinq/lightning/channel/InteractiveTx.kt b/src/commonMain/kotlin/fr/acinq/lightning/channel/InteractiveTx.kt index 2df046406..78227ce21 100644 --- a/src/commonMain/kotlin/fr/acinq/lightning/channel/InteractiveTx.kt +++ b/src/commonMain/kotlin/fr/acinq/lightning/channel/InteractiveTx.kt @@ -7,6 +7,7 @@ import fr.acinq.bitcoin.crypto.musig2.Musig2 import fr.acinq.bitcoin.crypto.musig2.SecretNonce import fr.acinq.bitcoin.utils.getOrDefault import fr.acinq.lightning.Lightning.randomBytes32 +import fr.acinq.bitcoin.utils.Either import fr.acinq.lightning.MilliSatoshi import fr.acinq.lightning.blockchain.electrum.WalletState import fr.acinq.lightning.blockchain.fee.FeeratePerKw @@ -656,7 +657,7 @@ data class InteractiveTxSession( swapInKeys, fundingParams, SharedFundingInputBalances(previousLocalBalance, previousRemoteBalance, localHtlcs.map { it.add.amountMsat }.sum()), - fundingContributions.inputs.map { i -> Either.Left(i) } + fundingContributions.outputs.map { o -> Either.Right(o) }, + fundingContributions.inputs.map { i -> Either.Left(i) } + fundingContributions.outputs.map { o -> Either.Right(o) }, previousTxs, localHtlcs ) @@ -664,7 +665,8 @@ data class InteractiveTxSession( val isComplete: Boolean = txCompleteSent != null && txCompleteReceived != null fun send(): Pair { - return when (val msg = toSend.firstOrNull()) { + val msg = toSend.firstOrNull() + return when (msg) { null -> { val localSwapIns = localInputs.filterIsInstance() val remoteSwapIns = remoteInputs.filterIsInstance() diff --git a/src/commonMain/kotlin/fr/acinq/lightning/channel/states/Channel.kt b/src/commonMain/kotlin/fr/acinq/lightning/channel/states/Channel.kt index 86d707579..b0f57c89b 100644 --- a/src/commonMain/kotlin/fr/acinq/lightning/channel/states/Channel.kt +++ b/src/commonMain/kotlin/fr/acinq/lightning/channel/states/Channel.kt @@ -1,6 +1,7 @@ package fr.acinq.lightning.channel.states import fr.acinq.bitcoin.* +import fr.acinq.bitcoin.utils.Either import fr.acinq.lightning.CltvExpiryDelta import fr.acinq.lightning.Feature import fr.acinq.lightning.NodeParams diff --git a/src/commonMain/kotlin/fr/acinq/lightning/channel/states/Closing.kt b/src/commonMain/kotlin/fr/acinq/lightning/channel/states/Closing.kt index 9ee59eb1f..baee55dcd 100644 --- a/src/commonMain/kotlin/fr/acinq/lightning/channel/states/Closing.kt +++ b/src/commonMain/kotlin/fr/acinq/lightning/channel/states/Closing.kt @@ -3,6 +3,7 @@ package fr.acinq.lightning.channel.states import fr.acinq.bitcoin.Satoshi import fr.acinq.bitcoin.Transaction import fr.acinq.bitcoin.updated +import fr.acinq.bitcoin.utils.Either import fr.acinq.lightning.blockchain.* import fr.acinq.lightning.blockchain.fee.FeeratePerKw import fr.acinq.lightning.channel.* @@ -16,7 +17,6 @@ import fr.acinq.lightning.channel.Helpers.Closing.overriddenOutgoingHtlcs import fr.acinq.lightning.channel.Helpers.Closing.timedOutHtlcs import fr.acinq.lightning.transactions.Transactions import fr.acinq.lightning.transactions.Transactions.TransactionWithInputInfo.ClosingTx -import fr.acinq.lightning.utils.Either import fr.acinq.lightning.utils.getValue import fr.acinq.lightning.wire.ChannelReestablish import fr.acinq.lightning.wire.Error diff --git a/src/commonMain/kotlin/fr/acinq/lightning/channel/states/LegacyWaitForFundingConfirmed.kt b/src/commonMain/kotlin/fr/acinq/lightning/channel/states/LegacyWaitForFundingConfirmed.kt index 899cd73f4..3f5324b7d 100644 --- a/src/commonMain/kotlin/fr/acinq/lightning/channel/states/LegacyWaitForFundingConfirmed.kt +++ b/src/commonMain/kotlin/fr/acinq/lightning/channel/states/LegacyWaitForFundingConfirmed.kt @@ -2,11 +2,11 @@ package fr.acinq.lightning.channel.states import fr.acinq.bitcoin.ScriptFlags import fr.acinq.bitcoin.Transaction +import fr.acinq.bitcoin.utils.Either import fr.acinq.lightning.ShortChannelId import fr.acinq.lightning.blockchain.WatchEventConfirmed import fr.acinq.lightning.blockchain.WatchEventSpent import fr.acinq.lightning.channel.* -import fr.acinq.lightning.utils.Either import fr.acinq.lightning.utils.Try import fr.acinq.lightning.utils.runTrying import fr.acinq.lightning.wire.ChannelReady diff --git a/src/commonMain/kotlin/fr/acinq/lightning/channel/states/LegacyWaitForFundingLocked.kt b/src/commonMain/kotlin/fr/acinq/lightning/channel/states/LegacyWaitForFundingLocked.kt index 63f1e41f5..54253677d 100644 --- a/src/commonMain/kotlin/fr/acinq/lightning/channel/states/LegacyWaitForFundingLocked.kt +++ b/src/commonMain/kotlin/fr/acinq/lightning/channel/states/LegacyWaitForFundingLocked.kt @@ -1,11 +1,11 @@ package fr.acinq.lightning.channel.states +import fr.acinq.bitcoin.utils.Either import fr.acinq.lightning.ChannelEvents import fr.acinq.lightning.ShortChannelId import fr.acinq.lightning.blockchain.WatchEventSpent import fr.acinq.lightning.channel.* import fr.acinq.lightning.router.Announcements -import fr.acinq.lightning.utils.Either import fr.acinq.lightning.utils.toMilliSatoshi import fr.acinq.lightning.wire.ChannelReady import fr.acinq.lightning.wire.Error diff --git a/src/commonMain/kotlin/fr/acinq/lightning/channel/states/Negotiating.kt b/src/commonMain/kotlin/fr/acinq/lightning/channel/states/Negotiating.kt index b3b51f4dd..b50299edb 100644 --- a/src/commonMain/kotlin/fr/acinq/lightning/channel/states/Negotiating.kt +++ b/src/commonMain/kotlin/fr/acinq/lightning/channel/states/Negotiating.kt @@ -2,11 +2,11 @@ package fr.acinq.lightning.channel.states import fr.acinq.bitcoin.Transaction import fr.acinq.bitcoin.updated +import fr.acinq.bitcoin.utils.Either import fr.acinq.lightning.blockchain.* import fr.acinq.lightning.channel.* import fr.acinq.lightning.channel.states.Channel.MAX_NEGOTIATION_ITERATIONS import fr.acinq.lightning.transactions.Transactions.TransactionWithInputInfo.ClosingTx -import fr.acinq.lightning.utils.Either import fr.acinq.lightning.utils.msat import fr.acinq.lightning.wire.ClosingSigned import fr.acinq.lightning.wire.ClosingSignedTlv diff --git a/src/commonMain/kotlin/fr/acinq/lightning/channel/states/Normal.kt b/src/commonMain/kotlin/fr/acinq/lightning/channel/states/Normal.kt index b99ccd05e..be6fb9ec9 100644 --- a/src/commonMain/kotlin/fr/acinq/lightning/channel/states/Normal.kt +++ b/src/commonMain/kotlin/fr/acinq/lightning/channel/states/Normal.kt @@ -3,6 +3,7 @@ package fr.acinq.lightning.channel.states import fr.acinq.bitcoin.Bitcoin import fr.acinq.bitcoin.SigHash import fr.acinq.bitcoin.TxId +import fr.acinq.bitcoin.utils.Either import fr.acinq.lightning.Feature import fr.acinq.lightning.Features import fr.acinq.lightning.ShortChannelId @@ -521,12 +522,12 @@ data class Normal( spliceStatus.spliceInit.feerate, cmd.message.willFund, )) { - is Either.Left -> { + is Either.Left -> { logger.error { "rejecting liquidity proposal: ${liquidityLease.value.message}" } spliceStatus.command.replyTo.complete(ChannelCommand.Commitment.Splice.Response.Failure.InvalidLiquidityAds(liquidityLease.value)) Pair(this@Normal.copy(spliceStatus = SpliceStatus.Aborted), listOf(ChannelAction.Message.Send(TxAbort(channelId, liquidityLease.value.message)))) } - is Either.Right -> { + is Either.Right -> { val parentCommitment = commitments.active.first() val sharedInput = SharedFundingInput.Multisig2of2(parentCommitment) val fundingParams = InteractiveTxParams( diff --git a/src/commonMain/kotlin/fr/acinq/lightning/channel/states/Offline.kt b/src/commonMain/kotlin/fr/acinq/lightning/channel/states/Offline.kt index 99b1456f3..978e12a4f 100644 --- a/src/commonMain/kotlin/fr/acinq/lightning/channel/states/Offline.kt +++ b/src/commonMain/kotlin/fr/acinq/lightning/channel/states/Offline.kt @@ -1,10 +1,10 @@ package fr.acinq.lightning.channel.states +import fr.acinq.bitcoin.utils.Either import fr.acinq.lightning.Feature import fr.acinq.lightning.ShortChannelId import fr.acinq.lightning.blockchain.* import fr.acinq.lightning.channel.* -import fr.acinq.lightning.utils.Either import fr.acinq.lightning.wire.ChannelReady import fr.acinq.lightning.wire.ChannelReadyTlv import fr.acinq.lightning.wire.Error diff --git a/src/commonMain/kotlin/fr/acinq/lightning/channel/states/ShuttingDown.kt b/src/commonMain/kotlin/fr/acinq/lightning/channel/states/ShuttingDown.kt index 40e0ae7a4..b9bb26da7 100644 --- a/src/commonMain/kotlin/fr/acinq/lightning/channel/states/ShuttingDown.kt +++ b/src/commonMain/kotlin/fr/acinq/lightning/channel/states/ShuttingDown.kt @@ -1,10 +1,10 @@ package fr.acinq.lightning.channel.states +import fr.acinq.bitcoin.utils.Either import fr.acinq.lightning.blockchain.WatchEventConfirmed import fr.acinq.lightning.blockchain.WatchEventSpent import fr.acinq.lightning.channel.* import fr.acinq.lightning.transactions.Transactions -import fr.acinq.lightning.utils.Either import fr.acinq.lightning.wire.* data class ShuttingDown( diff --git a/src/commonMain/kotlin/fr/acinq/lightning/channel/states/Syncing.kt b/src/commonMain/kotlin/fr/acinq/lightning/channel/states/Syncing.kt index 6ff1ec5e4..c95250824 100644 --- a/src/commonMain/kotlin/fr/acinq/lightning/channel/states/Syncing.kt +++ b/src/commonMain/kotlin/fr/acinq/lightning/channel/states/Syncing.kt @@ -1,10 +1,10 @@ package fr.acinq.lightning.channel.states +import fr.acinq.bitcoin.utils.Either import fr.acinq.lightning.ShortChannelId import fr.acinq.lightning.blockchain.* import fr.acinq.lightning.channel.* import fr.acinq.lightning.crypto.KeyManager -import fr.acinq.lightning.utils.Either import fr.acinq.lightning.utils.toByteVector import fr.acinq.lightning.wire.* diff --git a/src/commonMain/kotlin/fr/acinq/lightning/channel/states/WaitForAcceptChannel.kt b/src/commonMain/kotlin/fr/acinq/lightning/channel/states/WaitForAcceptChannel.kt index b5a5ce3fe..06f4383b1 100644 --- a/src/commonMain/kotlin/fr/acinq/lightning/channel/states/WaitForAcceptChannel.kt +++ b/src/commonMain/kotlin/fr/acinq/lightning/channel/states/WaitForAcceptChannel.kt @@ -1,10 +1,10 @@ package fr.acinq.lightning.channel.states import fr.acinq.bitcoin.ByteVector32 +import fr.acinq.bitcoin.utils.Either import fr.acinq.lightning.ChannelEvents import fr.acinq.lightning.channel.* import fr.acinq.lightning.channel.Helpers.Funding.computeChannelId -import fr.acinq.lightning.utils.Either import fr.acinq.lightning.utils.msat import fr.acinq.lightning.wire.AcceptDualFundedChannel import fr.acinq.lightning.wire.Error diff --git a/src/commonMain/kotlin/fr/acinq/lightning/channel/states/WaitForChannelReady.kt b/src/commonMain/kotlin/fr/acinq/lightning/channel/states/WaitForChannelReady.kt index 9df8f13f4..6dcd02a02 100644 --- a/src/commonMain/kotlin/fr/acinq/lightning/channel/states/WaitForChannelReady.kt +++ b/src/commonMain/kotlin/fr/acinq/lightning/channel/states/WaitForChannelReady.kt @@ -1,12 +1,12 @@ package fr.acinq.lightning.channel.states +import fr.acinq.bitcoin.utils.Either import fr.acinq.lightning.ChannelEvents import fr.acinq.lightning.ShortChannelId import fr.acinq.lightning.blockchain.WatchEventConfirmed import fr.acinq.lightning.blockchain.WatchEventSpent import fr.acinq.lightning.channel.* import fr.acinq.lightning.router.Announcements -import fr.acinq.lightning.utils.Either import fr.acinq.lightning.utils.toMilliSatoshi import fr.acinq.lightning.wire.* diff --git a/src/commonMain/kotlin/fr/acinq/lightning/channel/states/WaitForFundingConfirmed.kt b/src/commonMain/kotlin/fr/acinq/lightning/channel/states/WaitForFundingConfirmed.kt index e297823da..22876b53d 100644 --- a/src/commonMain/kotlin/fr/acinq/lightning/channel/states/WaitForFundingConfirmed.kt +++ b/src/commonMain/kotlin/fr/acinq/lightning/channel/states/WaitForFundingConfirmed.kt @@ -1,13 +1,13 @@ package fr.acinq.lightning.channel.states import fr.acinq.bitcoin.TxId +import fr.acinq.bitcoin.utils.Either import fr.acinq.lightning.MilliSatoshi import fr.acinq.lightning.ShortChannelId import fr.acinq.lightning.blockchain.BITCOIN_FUNDING_DEPTHOK import fr.acinq.lightning.blockchain.WatchConfirmed import fr.acinq.lightning.blockchain.WatchEventConfirmed import fr.acinq.lightning.channel.* -import fr.acinq.lightning.utils.Either import fr.acinq.lightning.utils.msat import fr.acinq.lightning.utils.toMilliSatoshi import fr.acinq.lightning.wire.* diff --git a/src/commonMain/kotlin/fr/acinq/lightning/channel/states/WaitForFundingCreated.kt b/src/commonMain/kotlin/fr/acinq/lightning/channel/states/WaitForFundingCreated.kt index e7fb016e0..45f093b15 100644 --- a/src/commonMain/kotlin/fr/acinq/lightning/channel/states/WaitForFundingCreated.kt +++ b/src/commonMain/kotlin/fr/acinq/lightning/channel/states/WaitForFundingCreated.kt @@ -2,10 +2,10 @@ package fr.acinq.lightning.channel.states import fr.acinq.bitcoin.ByteVector32 import fr.acinq.bitcoin.PublicKey +import fr.acinq.bitcoin.utils.Either import fr.acinq.lightning.MilliSatoshi import fr.acinq.lightning.blockchain.fee.FeeratePerKw import fr.acinq.lightning.channel.* -import fr.acinq.lightning.utils.Either import fr.acinq.lightning.wire.* /* diff --git a/src/commonMain/kotlin/fr/acinq/lightning/channel/states/WaitForFundingSigned.kt b/src/commonMain/kotlin/fr/acinq/lightning/channel/states/WaitForFundingSigned.kt index ba6603190..2ed3c3ed7 100644 --- a/src/commonMain/kotlin/fr/acinq/lightning/channel/states/WaitForFundingSigned.kt +++ b/src/commonMain/kotlin/fr/acinq/lightning/channel/states/WaitForFundingSigned.kt @@ -3,6 +3,7 @@ package fr.acinq.lightning.channel.states import fr.acinq.bitcoin.ByteVector32 import fr.acinq.bitcoin.PublicKey import fr.acinq.bitcoin.crypto.Pack +import fr.acinq.bitcoin.utils.Either import fr.acinq.lightning.ChannelEvents import fr.acinq.lightning.MilliSatoshi import fr.acinq.lightning.ShortChannelId @@ -10,7 +11,6 @@ import fr.acinq.lightning.blockchain.BITCOIN_FUNDING_DEPTHOK import fr.acinq.lightning.blockchain.WatchConfirmed import fr.acinq.lightning.channel.* import fr.acinq.lightning.crypto.ShaChain -import fr.acinq.lightning.utils.Either import fr.acinq.lightning.utils.msat import fr.acinq.lightning.wire.* import kotlin.math.absoluteValue diff --git a/src/commonMain/kotlin/fr/acinq/lightning/channel/states/WaitForOpenChannel.kt b/src/commonMain/kotlin/fr/acinq/lightning/channel/states/WaitForOpenChannel.kt index ffb6e19c6..adc88ce7d 100644 --- a/src/commonMain/kotlin/fr/acinq/lightning/channel/states/WaitForOpenChannel.kt +++ b/src/commonMain/kotlin/fr/acinq/lightning/channel/states/WaitForOpenChannel.kt @@ -2,12 +2,12 @@ package fr.acinq.lightning.channel.states import fr.acinq.bitcoin.ByteVector32 import fr.acinq.bitcoin.Satoshi +import fr.acinq.bitcoin.utils.Either import fr.acinq.lightning.ChannelEvents import fr.acinq.lightning.MilliSatoshi import fr.acinq.lightning.blockchain.electrum.WalletState import fr.acinq.lightning.channel.* import fr.acinq.lightning.channel.Helpers.Funding.computeChannelId -import fr.acinq.lightning.utils.Either import fr.acinq.lightning.utils.msat import fr.acinq.lightning.wire.* diff --git a/src/commonMain/kotlin/fr/acinq/lightning/crypto/sphinx/Sphinx.kt b/src/commonMain/kotlin/fr/acinq/lightning/crypto/sphinx/Sphinx.kt index 9caf00a07..231a71f5f 100644 --- a/src/commonMain/kotlin/fr/acinq/lightning/crypto/sphinx/Sphinx.kt +++ b/src/commonMain/kotlin/fr/acinq/lightning/crypto/sphinx/Sphinx.kt @@ -6,6 +6,7 @@ import fr.acinq.bitcoin.crypto.Digest import fr.acinq.bitcoin.crypto.hmac import fr.acinq.bitcoin.io.ByteArrayInput import fr.acinq.bitcoin.io.ByteArrayOutput +import fr.acinq.bitcoin.utils.Either import fr.acinq.lightning.crypto.ChaCha20 import fr.acinq.lightning.utils.* import fr.acinq.lightning.wire.* diff --git a/src/commonMain/kotlin/fr/acinq/lightning/db/PaymentsDb.kt b/src/commonMain/kotlin/fr/acinq/lightning/db/PaymentsDb.kt index bee0fe3ae..2c705ee19 100644 --- a/src/commonMain/kotlin/fr/acinq/lightning/db/PaymentsDb.kt +++ b/src/commonMain/kotlin/fr/acinq/lightning/db/PaymentsDb.kt @@ -1,6 +1,7 @@ package fr.acinq.lightning.db import fr.acinq.bitcoin.* +import fr.acinq.bitcoin.utils.Either import fr.acinq.lightning.MilliSatoshi import fr.acinq.lightning.ShortChannelId import fr.acinq.lightning.channel.ChannelException diff --git a/src/commonMain/kotlin/fr/acinq/lightning/io/Peer.kt b/src/commonMain/kotlin/fr/acinq/lightning/io/Peer.kt index 7b08272c4..6aeb0bdc1 100644 --- a/src/commonMain/kotlin/fr/acinq/lightning/io/Peer.kt +++ b/src/commonMain/kotlin/fr/acinq/lightning/io/Peer.kt @@ -1,6 +1,7 @@ package fr.acinq.lightning.io import fr.acinq.bitcoin.* +import fr.acinq.bitcoin.utils.Either import fr.acinq.lightning.* import fr.acinq.lightning.blockchain.WatchEvent import fr.acinq.lightning.blockchain.electrum.* diff --git a/src/commonMain/kotlin/fr/acinq/lightning/json/JsonSerializers.kt b/src/commonMain/kotlin/fr/acinq/lightning/json/JsonSerializers.kt index 4b40d2113..8852a8f35 100644 --- a/src/commonMain/kotlin/fr/acinq/lightning/json/JsonSerializers.kt +++ b/src/commonMain/kotlin/fr/acinq/lightning/json/JsonSerializers.kt @@ -100,6 +100,7 @@ package fr.acinq.lightning.json import fr.acinq.bitcoin.* +import fr.acinq.bitcoin.utils.Either import fr.acinq.lightning.* import fr.acinq.lightning.blockchain.fee.FeeratePerKw import fr.acinq.lightning.channel.* @@ -112,7 +113,6 @@ import fr.acinq.lightning.json.JsonSerializers.SurrogateSerializer import fr.acinq.lightning.transactions.CommitmentSpec import fr.acinq.lightning.transactions.IncomingHtlc import fr.acinq.lightning.transactions.OutgoingHtlc -import fr.acinq.lightning.utils.Either import fr.acinq.lightning.utils.UUID import fr.acinq.lightning.wire.* import kotlinx.serialization.* diff --git a/src/commonMain/kotlin/fr/acinq/lightning/payment/IncomingPaymentHandler.kt b/src/commonMain/kotlin/fr/acinq/lightning/payment/IncomingPaymentHandler.kt index c49ffe1f8..02e12ad75 100644 --- a/src/commonMain/kotlin/fr/acinq/lightning/payment/IncomingPaymentHandler.kt +++ b/src/commonMain/kotlin/fr/acinq/lightning/payment/IncomingPaymentHandler.kt @@ -4,6 +4,7 @@ import fr.acinq.bitcoin.ByteVector import fr.acinq.bitcoin.ByteVector32 import fr.acinq.bitcoin.Crypto import fr.acinq.bitcoin.PrivateKey +import fr.acinq.bitcoin.utils.Either import fr.acinq.lightning.CltvExpiry import fr.acinq.lightning.Lightning.randomBytes32 import fr.acinq.lightning.LiquidityEvents diff --git a/src/commonMain/kotlin/fr/acinq/lightning/payment/IncomingPaymentPacket.kt b/src/commonMain/kotlin/fr/acinq/lightning/payment/IncomingPaymentPacket.kt index 28d8c9972..db7fb86df 100644 --- a/src/commonMain/kotlin/fr/acinq/lightning/payment/IncomingPaymentPacket.kt +++ b/src/commonMain/kotlin/fr/acinq/lightning/payment/IncomingPaymentPacket.kt @@ -2,8 +2,8 @@ package fr.acinq.lightning.payment import fr.acinq.bitcoin.ByteVector32 import fr.acinq.bitcoin.PrivateKey +import fr.acinq.bitcoin.utils.Either import fr.acinq.lightning.crypto.sphinx.Sphinx -import fr.acinq.lightning.utils.Either import fr.acinq.lightning.wire.* object IncomingPaymentPacket { diff --git a/src/commonMain/kotlin/fr/acinq/lightning/payment/OutgoingPaymentFailure.kt b/src/commonMain/kotlin/fr/acinq/lightning/payment/OutgoingPaymentFailure.kt index 6f37a704f..ae9f574bf 100644 --- a/src/commonMain/kotlin/fr/acinq/lightning/payment/OutgoingPaymentFailure.kt +++ b/src/commonMain/kotlin/fr/acinq/lightning/payment/OutgoingPaymentFailure.kt @@ -1,8 +1,8 @@ package fr.acinq.lightning.payment +import fr.acinq.bitcoin.utils.Either import fr.acinq.lightning.channel.ChannelException import fr.acinq.lightning.db.LightningOutgoingPayment -import fr.acinq.lightning.utils.Either import fr.acinq.lightning.utils.currentTimestampMillis import fr.acinq.lightning.wire.* diff --git a/src/commonMain/kotlin/fr/acinq/lightning/payment/OutgoingPaymentHandler.kt b/src/commonMain/kotlin/fr/acinq/lightning/payment/OutgoingPaymentHandler.kt index b7a1efa46..104addc84 100644 --- a/src/commonMain/kotlin/fr/acinq/lightning/payment/OutgoingPaymentHandler.kt +++ b/src/commonMain/kotlin/fr/acinq/lightning/payment/OutgoingPaymentHandler.kt @@ -1,6 +1,7 @@ package fr.acinq.lightning.payment import fr.acinq.bitcoin.ByteVector32 +import fr.acinq.bitcoin.utils.Either import fr.acinq.lightning.* import fr.acinq.lightning.channel.* import fr.acinq.lightning.channel.states.Channel diff --git a/src/commonMain/kotlin/fr/acinq/lightning/payment/OutgoingPaymentPacket.kt b/src/commonMain/kotlin/fr/acinq/lightning/payment/OutgoingPaymentPacket.kt index 0d04a3757..d6b7962bc 100644 --- a/src/commonMain/kotlin/fr/acinq/lightning/payment/OutgoingPaymentPacket.kt +++ b/src/commonMain/kotlin/fr/acinq/lightning/payment/OutgoingPaymentPacket.kt @@ -4,6 +4,7 @@ import fr.acinq.bitcoin.ByteVector import fr.acinq.bitcoin.ByteVector32 import fr.acinq.bitcoin.PrivateKey import fr.acinq.bitcoin.PublicKey +import fr.acinq.bitcoin.utils.Either import fr.acinq.lightning.CltvExpiry import fr.acinq.lightning.Lightning import fr.acinq.lightning.MilliSatoshi @@ -15,7 +16,6 @@ import fr.acinq.lightning.crypto.sphinx.Sphinx import fr.acinq.lightning.router.ChannelHop import fr.acinq.lightning.router.Hop import fr.acinq.lightning.router.NodeHop -import fr.acinq.lightning.utils.Either import fr.acinq.lightning.utils.UUID import fr.acinq.lightning.wire.FailureMessage import fr.acinq.lightning.wire.OnionRoutingPacket diff --git a/src/commonMain/kotlin/fr/acinq/lightning/payment/PaymentRequest.kt b/src/commonMain/kotlin/fr/acinq/lightning/payment/PaymentRequest.kt index 76496e595..b064e11f8 100644 --- a/src/commonMain/kotlin/fr/acinq/lightning/payment/PaymentRequest.kt +++ b/src/commonMain/kotlin/fr/acinq/lightning/payment/PaymentRequest.kt @@ -4,6 +4,7 @@ import fr.acinq.bitcoin.* import fr.acinq.bitcoin.Script.tail import fr.acinq.bitcoin.io.ByteArrayInput import fr.acinq.bitcoin.io.ByteArrayOutput +import fr.acinq.bitcoin.utils.Either import fr.acinq.lightning.* import fr.acinq.lightning.Lightning.randomBytes32 import fr.acinq.lightning.utils.* diff --git a/src/commonMain/kotlin/fr/acinq/lightning/payment/RouteCalculation.kt b/src/commonMain/kotlin/fr/acinq/lightning/payment/RouteCalculation.kt index 2076e14eb..5523af0d5 100644 --- a/src/commonMain/kotlin/fr/acinq/lightning/payment/RouteCalculation.kt +++ b/src/commonMain/kotlin/fr/acinq/lightning/payment/RouteCalculation.kt @@ -2,11 +2,11 @@ package fr.acinq.lightning.payment import fr.acinq.bitcoin.ByteVector32 import fr.acinq.bitcoin.Satoshi +import fr.acinq.bitcoin.utils.Either import fr.acinq.lightning.MilliSatoshi import fr.acinq.lightning.channel.states.ChannelState import fr.acinq.lightning.channel.states.Normal import fr.acinq.lightning.logging.* -import fr.acinq.lightning.utils.Either import fr.acinq.lightning.utils.UUID import fr.acinq.lightning.utils.msat diff --git a/src/commonMain/kotlin/fr/acinq/lightning/serialization/v2/ChannelState.kt b/src/commonMain/kotlin/fr/acinq/lightning/serialization/v2/ChannelState.kt index 90c1e8974..5e4a7c017 100644 --- a/src/commonMain/kotlin/fr/acinq/lightning/serialization/v2/ChannelState.kt +++ b/src/commonMain/kotlin/fr/acinq/lightning/serialization/v2/ChannelState.kt @@ -40,6 +40,7 @@ package fr.acinq.lightning.serialization.v2 import fr.acinq.bitcoin.* +import fr.acinq.bitcoin.utils.Either import fr.acinq.lightning.* import fr.acinq.lightning.blockchain.fee.FeeratePerKw import fr.acinq.lightning.channel.InteractiveTxOutput @@ -52,7 +53,6 @@ import fr.acinq.lightning.channel.states.ShuttingDown import fr.acinq.lightning.channel.states.WaitForRemotePublishFutureCommitment import fr.acinq.lightning.crypto.ShaChain import fr.acinq.lightning.transactions.Transactions -import fr.acinq.lightning.utils.Either import fr.acinq.lightning.utils.UUID import fr.acinq.lightning.utils.msat import fr.acinq.lightning.wire.* diff --git a/src/commonMain/kotlin/fr/acinq/lightning/serialization/v3/ChannelState.kt b/src/commonMain/kotlin/fr/acinq/lightning/serialization/v3/ChannelState.kt index 0a548543d..a22d32396 100644 --- a/src/commonMain/kotlin/fr/acinq/lightning/serialization/v3/ChannelState.kt +++ b/src/commonMain/kotlin/fr/acinq/lightning/serialization/v3/ChannelState.kt @@ -40,6 +40,7 @@ package fr.acinq.lightning.serialization.v3 import fr.acinq.bitcoin.* +import fr.acinq.bitcoin.utils.Either import fr.acinq.lightning.* import fr.acinq.lightning.blockchain.fee.FeeratePerKw import fr.acinq.lightning.channel.InteractiveTxOutput @@ -52,7 +53,6 @@ import fr.acinq.lightning.channel.states.ShuttingDown import fr.acinq.lightning.channel.states.WaitForRemotePublishFutureCommitment import fr.acinq.lightning.crypto.ShaChain import fr.acinq.lightning.transactions.Transactions -import fr.acinq.lightning.utils.Either import fr.acinq.lightning.utils.UUID import fr.acinq.lightning.utils.msat import fr.acinq.lightning.wire.* diff --git a/src/commonMain/kotlin/fr/acinq/lightning/serialization/v4/Deserialization.kt b/src/commonMain/kotlin/fr/acinq/lightning/serialization/v4/Deserialization.kt index ffb75c69f..5d84a6cd2 100644 --- a/src/commonMain/kotlin/fr/acinq/lightning/serialization/v4/Deserialization.kt +++ b/src/commonMain/kotlin/fr/acinq/lightning/serialization/v4/Deserialization.kt @@ -5,6 +5,7 @@ import fr.acinq.bitcoin.crypto.musig2.IndividualNonce import fr.acinq.bitcoin.io.ByteArrayInput import fr.acinq.bitcoin.io.Input import fr.acinq.bitcoin.io.readNBytes +import fr.acinq.bitcoin.utils.Either import fr.acinq.lightning.CltvExpiryDelta import fr.acinq.lightning.Features import fr.acinq.lightning.ShortChannelId diff --git a/src/commonMain/kotlin/fr/acinq/lightning/serialization/v4/Serialization.kt b/src/commonMain/kotlin/fr/acinq/lightning/serialization/v4/Serialization.kt index 70793c4ee..229bd854f 100644 --- a/src/commonMain/kotlin/fr/acinq/lightning/serialization/v4/Serialization.kt +++ b/src/commonMain/kotlin/fr/acinq/lightning/serialization/v4/Serialization.kt @@ -4,13 +4,13 @@ import fr.acinq.bitcoin.* import fr.acinq.bitcoin.crypto.musig2.IndividualNonce import fr.acinq.bitcoin.io.ByteArrayOutput import fr.acinq.bitcoin.io.Output +import fr.acinq.bitcoin.utils.Either import fr.acinq.lightning.FeatureSupport import fr.acinq.lightning.Features import fr.acinq.lightning.channel.* import fr.acinq.lightning.channel.states.* import fr.acinq.lightning.transactions.* import fr.acinq.lightning.transactions.Transactions.TransactionWithInputInfo.* -import fr.acinq.lightning.utils.Either import fr.acinq.lightning.wire.LightningCodecs import fr.acinq.lightning.wire.LightningMessage import fr.acinq.lightning.wire.LiquidityAds diff --git a/src/commonMain/kotlin/fr/acinq/lightning/utils/Either.kt b/src/commonMain/kotlin/fr/acinq/lightning/utils/Either.kt deleted file mode 100644 index 7257d4036..000000000 --- a/src/commonMain/kotlin/fr/acinq/lightning/utils/Either.kt +++ /dev/null @@ -1,39 +0,0 @@ -package fr.acinq.lightning.utils - -sealed class Either { - abstract val isLeft: Boolean - abstract val isRight: Boolean - abstract val left: A? - abstract val right: B? - - fun fold(fa: (A) -> X, fb: (B) -> X): X = when (this) { - is Left -> fa(this.value) - is Right -> fb(this.value) - } - - fun transform(fa: (A) -> X, fb: (B) -> Y): Either = when (this) { - is Left -> Left(fa(this.value)) - is Right -> Right(fb(this.value)) - } - - data class Left(val value: A) : Either() { - override val isLeft = true - override val isRight = false - override val left: A? = value - override val right = null - } - - data class Right(val value: B) : Either() { - override val isLeft = false - override val isRight = true - override val left = null - override val right = value - } -} - -@Suppress("UNCHECKED_CAST") -fun Either.flatMap(f: (R) -> Either): Either = - this.fold({ this as Either }, f) - -fun Either.map(f: (R) -> T): Either = - flatMap { Either.Right(f(it)) } \ No newline at end of file diff --git a/src/commonMain/kotlin/fr/acinq/lightning/wire/LiquidityAds.kt b/src/commonMain/kotlin/fr/acinq/lightning/wire/LiquidityAds.kt index 03682d10b..b3e0439ce 100644 --- a/src/commonMain/kotlin/fr/acinq/lightning/wire/LiquidityAds.kt +++ b/src/commonMain/kotlin/fr/acinq/lightning/wire/LiquidityAds.kt @@ -4,11 +4,11 @@ import fr.acinq.bitcoin.* import fr.acinq.bitcoin.io.ByteArrayOutput import fr.acinq.bitcoin.io.Input import fr.acinq.bitcoin.io.Output +import fr.acinq.bitcoin.utils.Either import fr.acinq.lightning.MilliSatoshi import fr.acinq.lightning.blockchain.fee.FeeratePerKw import fr.acinq.lightning.channel.* import fr.acinq.lightning.transactions.Transactions -import fr.acinq.lightning.utils.Either import fr.acinq.lightning.utils.msat import fr.acinq.lightning.utils.sat diff --git a/src/commonTest/kotlin/fr/acinq/lightning/blockchain/electrum/ElectrumRequestTest.kt b/src/commonTest/kotlin/fr/acinq/lightning/blockchain/electrum/ElectrumRequestTest.kt index 83d15579a..2ac290809 100644 --- a/src/commonTest/kotlin/fr/acinq/lightning/blockchain/electrum/ElectrumRequestTest.kt +++ b/src/commonTest/kotlin/fr/acinq/lightning/blockchain/electrum/ElectrumRequestTest.kt @@ -3,6 +3,7 @@ package fr.acinq.lightning.blockchain.electrum import fr.acinq.bitcoin.BlockHash import fr.acinq.bitcoin.BlockHeader import fr.acinq.bitcoin.ByteVector32 +import fr.acinq.bitcoin.utils.Either import fr.acinq.lightning.tests.utils.LightningTestSuite import fr.acinq.lightning.utils.* import kotlinx.serialization.json.Json diff --git a/src/commonTest/kotlin/fr/acinq/lightning/channel/CommitmentsTestsCommon.kt b/src/commonTest/kotlin/fr/acinq/lightning/channel/CommitmentsTestsCommon.kt index a3e12341f..c775d5937 100644 --- a/src/commonTest/kotlin/fr/acinq/lightning/channel/CommitmentsTestsCommon.kt +++ b/src/commonTest/kotlin/fr/acinq/lightning/channel/CommitmentsTestsCommon.kt @@ -1,6 +1,7 @@ package fr.acinq.lightning.channel import fr.acinq.bitcoin.* +import fr.acinq.bitcoin.utils.Either import fr.acinq.lightning.CltvExpiry import fr.acinq.lightning.CltvExpiryDelta import fr.acinq.lightning.Features diff --git a/src/commonTest/kotlin/fr/acinq/lightning/channel/InteractiveTxTestsCommon.kt b/src/commonTest/kotlin/fr/acinq/lightning/channel/InteractiveTxTestsCommon.kt index 3d2a4a9dd..afda04b1c 100644 --- a/src/commonTest/kotlin/fr/acinq/lightning/channel/InteractiveTxTestsCommon.kt +++ b/src/commonTest/kotlin/fr/acinq/lightning/channel/InteractiveTxTestsCommon.kt @@ -1,6 +1,7 @@ package fr.acinq.lightning.channel import fr.acinq.bitcoin.* +import fr.acinq.bitcoin.utils.Either import fr.acinq.lightning.Lightning.randomBytes32 import fr.acinq.lightning.Lightning.randomBytes64 import fr.acinq.lightning.Lightning.randomKey @@ -12,7 +13,6 @@ import fr.acinq.lightning.tests.TestConstants import fr.acinq.lightning.tests.utils.LightningTestSuite import fr.acinq.lightning.transactions.Scripts import fr.acinq.lightning.transactions.Transactions -import fr.acinq.lightning.utils.Either import fr.acinq.lightning.utils.msat import fr.acinq.lightning.utils.sat import fr.acinq.lightning.wire.* diff --git a/src/commonTest/kotlin/fr/acinq/lightning/channel/states/NormalTestsCommon.kt b/src/commonTest/kotlin/fr/acinq/lightning/channel/states/NormalTestsCommon.kt index 0e8dbb04e..f80517101 100644 --- a/src/commonTest/kotlin/fr/acinq/lightning/channel/states/NormalTestsCommon.kt +++ b/src/commonTest/kotlin/fr/acinq/lightning/channel/states/NormalTestsCommon.kt @@ -1,6 +1,7 @@ package fr.acinq.lightning.channel.states import fr.acinq.bitcoin.* +import fr.acinq.bitcoin.utils.Either import fr.acinq.lightning.* import fr.acinq.lightning.Lightning.randomBytes32 import fr.acinq.lightning.blockchain.* diff --git a/src/commonTest/kotlin/fr/acinq/lightning/channel/states/ShutdownTestsCommon.kt b/src/commonTest/kotlin/fr/acinq/lightning/channel/states/ShutdownTestsCommon.kt index bbcec0e7e..50b4685ff 100644 --- a/src/commonTest/kotlin/fr/acinq/lightning/channel/states/ShutdownTestsCommon.kt +++ b/src/commonTest/kotlin/fr/acinq/lightning/channel/states/ShutdownTestsCommon.kt @@ -1,6 +1,7 @@ package fr.acinq.lightning.channel.states import fr.acinq.bitcoin.* +import fr.acinq.bitcoin.utils.Either import fr.acinq.lightning.CltvExpiry import fr.acinq.lightning.Feature import fr.acinq.lightning.Features @@ -22,7 +23,6 @@ import fr.acinq.lightning.channel.TestsHelper.signAndRevack import fr.acinq.lightning.serialization.Encryption.from import fr.acinq.lightning.tests.TestConstants import fr.acinq.lightning.tests.utils.LightningTestSuite -import fr.acinq.lightning.utils.Either import fr.acinq.lightning.utils.UUID import fr.acinq.lightning.utils.msat import fr.acinq.lightning.wire.* diff --git a/src/commonTest/kotlin/fr/acinq/lightning/crypto/sphinx/SphinxTestsCommon.kt b/src/commonTest/kotlin/fr/acinq/lightning/crypto/sphinx/SphinxTestsCommon.kt index d0e18dd2b..0dcd17f19 100644 --- a/src/commonTest/kotlin/fr/acinq/lightning/crypto/sphinx/SphinxTestsCommon.kt +++ b/src/commonTest/kotlin/fr/acinq/lightning/crypto/sphinx/SphinxTestsCommon.kt @@ -5,12 +5,12 @@ import fr.acinq.bitcoin.ByteVector32 import fr.acinq.bitcoin.PrivateKey import fr.acinq.bitcoin.PublicKey import fr.acinq.lightning.EncodedNodeId +import fr.acinq.bitcoin.utils.Either import fr.acinq.lightning.crypto.RouteBlinding import fr.acinq.lightning.crypto.sphinx.Sphinx.computeEphemeralPublicKeysAndSharedSecrets import fr.acinq.lightning.crypto.sphinx.Sphinx.decodePayloadLength import fr.acinq.lightning.crypto.sphinx.Sphinx.generateFiller import fr.acinq.lightning.tests.utils.LightningTestSuite -import fr.acinq.lightning.utils.Either import fr.acinq.lightning.utils.msat import fr.acinq.lightning.wire.* import fr.acinq.secp256k1.Hex diff --git a/src/commonTest/kotlin/fr/acinq/lightning/db/InMemoryPaymentsDb.kt b/src/commonTest/kotlin/fr/acinq/lightning/db/InMemoryPaymentsDb.kt index fcfe88949..f833b27d7 100644 --- a/src/commonTest/kotlin/fr/acinq/lightning/db/InMemoryPaymentsDb.kt +++ b/src/commonTest/kotlin/fr/acinq/lightning/db/InMemoryPaymentsDb.kt @@ -3,10 +3,10 @@ package fr.acinq.lightning.db import fr.acinq.bitcoin.ByteVector32 import fr.acinq.bitcoin.Crypto import fr.acinq.bitcoin.TxId +import fr.acinq.bitcoin.utils.Either import fr.acinq.lightning.channel.ChannelException import fr.acinq.lightning.payment.FinalFailure import fr.acinq.lightning.payment.OutgoingPaymentFailure -import fr.acinq.lightning.utils.Either import fr.acinq.lightning.utils.UUID import fr.acinq.lightning.utils.toByteVector32 import fr.acinq.lightning.wire.FailureMessage diff --git a/src/commonTest/kotlin/fr/acinq/lightning/db/PaymentsDbTestsCommon.kt b/src/commonTest/kotlin/fr/acinq/lightning/db/PaymentsDbTestsCommon.kt index 4f45b4673..85e781ab0 100644 --- a/src/commonTest/kotlin/fr/acinq/lightning/db/PaymentsDbTestsCommon.kt +++ b/src/commonTest/kotlin/fr/acinq/lightning/db/PaymentsDbTestsCommon.kt @@ -1,6 +1,7 @@ package fr.acinq.lightning.db import fr.acinq.bitcoin.* +import fr.acinq.bitcoin.utils.Either import fr.acinq.lightning.* import fr.acinq.lightning.Lightning.randomBytes32 import fr.acinq.lightning.Lightning.randomKey diff --git a/src/commonTest/kotlin/fr/acinq/lightning/io/peer/PeerTest.kt b/src/commonTest/kotlin/fr/acinq/lightning/io/peer/PeerTest.kt index cb2ff9538..09c22dc42 100644 --- a/src/commonTest/kotlin/fr/acinq/lightning/io/peer/PeerTest.kt +++ b/src/commonTest/kotlin/fr/acinq/lightning/io/peer/PeerTest.kt @@ -3,6 +3,7 @@ package fr.acinq.lightning.io.peer import fr.acinq.bitcoin.Block import fr.acinq.bitcoin.ByteVector32 import fr.acinq.bitcoin.PrivateKey +import fr.acinq.bitcoin.utils.Either import fr.acinq.lightning.CltvExpiryDelta import fr.acinq.lightning.InvoiceDefaultRoutingFees import fr.acinq.lightning.Lightning.randomBytes32 diff --git a/src/commonTest/kotlin/fr/acinq/lightning/payment/IncomingPaymentHandlerTestsCommon.kt b/src/commonTest/kotlin/fr/acinq/lightning/payment/IncomingPaymentHandlerTestsCommon.kt index 16dcc18fe..2bdc6191c 100644 --- a/src/commonTest/kotlin/fr/acinq/lightning/payment/IncomingPaymentHandlerTestsCommon.kt +++ b/src/commonTest/kotlin/fr/acinq/lightning/payment/IncomingPaymentHandlerTestsCommon.kt @@ -1,6 +1,7 @@ package fr.acinq.lightning.payment import fr.acinq.bitcoin.* +import fr.acinq.bitcoin.utils.Either import fr.acinq.lightning.CltvExpiryDelta import fr.acinq.lightning.Lightning import fr.acinq.lightning.Lightning.randomBytes32 diff --git a/src/commonTest/kotlin/fr/acinq/lightning/payment/OutgoingPaymentFailureTestsCommon.kt b/src/commonTest/kotlin/fr/acinq/lightning/payment/OutgoingPaymentFailureTestsCommon.kt index 5d33ce65e..7894da6ea 100644 --- a/src/commonTest/kotlin/fr/acinq/lightning/payment/OutgoingPaymentFailureTestsCommon.kt +++ b/src/commonTest/kotlin/fr/acinq/lightning/payment/OutgoingPaymentFailureTestsCommon.kt @@ -1,9 +1,9 @@ package fr.acinq.lightning.payment import fr.acinq.bitcoin.ByteVector32 +import fr.acinq.bitcoin.utils.Either import fr.acinq.lightning.channel.TooManyAcceptedHtlcs import fr.acinq.lightning.tests.utils.LightningTestSuite -import fr.acinq.lightning.utils.Either import fr.acinq.lightning.utils.msat import fr.acinq.lightning.wire.IncorrectOrUnknownPaymentDetails import fr.acinq.lightning.wire.PaymentTimeout diff --git a/src/commonTest/kotlin/fr/acinq/lightning/payment/OutgoingPaymentHandlerTestsCommon.kt b/src/commonTest/kotlin/fr/acinq/lightning/payment/OutgoingPaymentHandlerTestsCommon.kt index ab9d2e835..d1c4e25d5 100644 --- a/src/commonTest/kotlin/fr/acinq/lightning/payment/OutgoingPaymentHandlerTestsCommon.kt +++ b/src/commonTest/kotlin/fr/acinq/lightning/payment/OutgoingPaymentHandlerTestsCommon.kt @@ -4,6 +4,7 @@ import fr.acinq.bitcoin.Block import fr.acinq.bitcoin.ByteVector32 import fr.acinq.bitcoin.Crypto import fr.acinq.bitcoin.PrivateKey +import fr.acinq.bitcoin.utils.Either import fr.acinq.lightning.* import fr.acinq.lightning.Lightning.randomBytes32 import fr.acinq.lightning.Lightning.randomKey diff --git a/src/commonTest/kotlin/fr/acinq/lightning/payment/PaymentPacketTestsCommon.kt b/src/commonTest/kotlin/fr/acinq/lightning/payment/PaymentPacketTestsCommon.kt index 8ddc815fc..7d50ca60a 100644 --- a/src/commonTest/kotlin/fr/acinq/lightning/payment/PaymentPacketTestsCommon.kt +++ b/src/commonTest/kotlin/fr/acinq/lightning/payment/PaymentPacketTestsCommon.kt @@ -5,6 +5,7 @@ import fr.acinq.bitcoin.ByteVector import fr.acinq.bitcoin.Crypto import fr.acinq.bitcoin.PrivateKey import fr.acinq.bitcoin.io.ByteArrayInput +import fr.acinq.bitcoin.utils.Either import fr.acinq.lightning.* import fr.acinq.lightning.Lightning.nodeFee import fr.acinq.lightning.Lightning.randomBytes diff --git a/src/commonTest/kotlin/fr/acinq/lightning/payment/PaymentRequestTestsCommon.kt b/src/commonTest/kotlin/fr/acinq/lightning/payment/PaymentRequestTestsCommon.kt index ee8627c3e..4b5e16404 100644 --- a/src/commonTest/kotlin/fr/acinq/lightning/payment/PaymentRequestTestsCommon.kt +++ b/src/commonTest/kotlin/fr/acinq/lightning/payment/PaymentRequestTestsCommon.kt @@ -1,6 +1,7 @@ package fr.acinq.lightning.payment import fr.acinq.bitcoin.* +import fr.acinq.bitcoin.utils.Either import fr.acinq.lightning.* import fr.acinq.lightning.Lightning.randomBytes32 import fr.acinq.lightning.Lightning.randomKey diff --git a/src/commonTest/kotlin/fr/acinq/lightning/payment/RouteCalculationTestsCommon.kt b/src/commonTest/kotlin/fr/acinq/lightning/payment/RouteCalculationTestsCommon.kt index 2f11287fc..6b2183e53 100644 --- a/src/commonTest/kotlin/fr/acinq/lightning/payment/RouteCalculationTestsCommon.kt +++ b/src/commonTest/kotlin/fr/acinq/lightning/payment/RouteCalculationTestsCommon.kt @@ -1,6 +1,7 @@ package fr.acinq.lightning.payment import fr.acinq.bitcoin.ByteVector32 +import fr.acinq.bitcoin.utils.Either import fr.acinq.lightning.Lightning.randomBytes32 import fr.acinq.lightning.MilliSatoshi import fr.acinq.lightning.ShortChannelId From d53282bd6173e3c9df810016d227196f6f326daf Mon Sep 17 00:00:00 2001 From: sstone Date: Thu, 1 Feb 2024 16:57:12 +0100 Subject: [PATCH 2/3] Use Try type provided by bitcoin-kmp --- .../lightning/blockchain/WatcherTypes.kt | 4 +- .../blockchain/electrum/ElectrumDataTypes.kt | 2 + .../fr/acinq/lightning/channel/Commitments.kt | 1 + .../fr/acinq/lightning/channel/Helpers.kt | 2 + .../acinq/lightning/channel/InteractiveTx.kt | 2 + .../states/LegacyWaitForFundingConfirmed.kt | 4 +- .../acinq/lightning/crypto/sphinx/Sphinx.kt | 2 + .../payment/OutgoingPaymentHandler.kt | 1 + .../acinq/lightning/payment/PaymentRequest.kt | 2 + .../lightning/transactions/Transactions.kt | 2 + .../kotlin/fr/acinq/lightning/utils/Try.kt | 46 ------------------- .../ElectrumWatcherIntegrationTest.kt | 2 +- .../transactions/AnchorOutputsTestsCommon.kt | 2 + 13 files changed, 21 insertions(+), 51 deletions(-) delete mode 100644 src/commonMain/kotlin/fr/acinq/lightning/utils/Try.kt diff --git a/src/commonMain/kotlin/fr/acinq/lightning/blockchain/WatcherTypes.kt b/src/commonMain/kotlin/fr/acinq/lightning/blockchain/WatcherTypes.kt index 64c9a0f0d..7f443302f 100644 --- a/src/commonMain/kotlin/fr/acinq/lightning/blockchain/WatcherTypes.kt +++ b/src/commonMain/kotlin/fr/acinq/lightning/blockchain/WatcherTypes.kt @@ -1,8 +1,8 @@ package fr.acinq.lightning.blockchain import fr.acinq.bitcoin.* -import fr.acinq.lightning.utils.Try -import fr.acinq.lightning.utils.runTrying +import fr.acinq.bitcoin.utils.Try +import fr.acinq.bitcoin.utils.runTrying sealed class BitcoinEvent data object BITCOIN_FUNDING_DEPTHOK : BitcoinEvent() diff --git a/src/commonMain/kotlin/fr/acinq/lightning/blockchain/electrum/ElectrumDataTypes.kt b/src/commonMain/kotlin/fr/acinq/lightning/blockchain/electrum/ElectrumDataTypes.kt index 3fff5e3b7..d8607f694 100644 --- a/src/commonMain/kotlin/fr/acinq/lightning/blockchain/electrum/ElectrumDataTypes.kt +++ b/src/commonMain/kotlin/fr/acinq/lightning/blockchain/electrum/ElectrumDataTypes.kt @@ -4,6 +4,8 @@ import fr.acinq.bitcoin.* import fr.acinq.bitcoin.io.ByteArrayInput import fr.acinq.bitcoin.io.readNBytes import fr.acinq.bitcoin.utils.Either +import fr.acinq.bitcoin.utils.Try +import fr.acinq.bitcoin.utils.runTrying import fr.acinq.lightning.blockchain.fee.FeeratePerKB import fr.acinq.lightning.blockchain.fee.FeeratePerKw import fr.acinq.lightning.utils.* diff --git a/src/commonMain/kotlin/fr/acinq/lightning/channel/Commitments.kt b/src/commonMain/kotlin/fr/acinq/lightning/channel/Commitments.kt index 4a1124d1f..c1b728c9b 100644 --- a/src/commonMain/kotlin/fr/acinq/lightning/channel/Commitments.kt +++ b/src/commonMain/kotlin/fr/acinq/lightning/channel/Commitments.kt @@ -3,6 +3,7 @@ package fr.acinq.lightning.channel import fr.acinq.bitcoin.* import fr.acinq.bitcoin.Crypto.sha256 import fr.acinq.bitcoin.utils.Either +import fr.acinq.bitcoin.utils.Try import fr.acinq.lightning.CltvExpiryDelta import fr.acinq.lightning.Feature import fr.acinq.lightning.MilliSatoshi diff --git a/src/commonMain/kotlin/fr/acinq/lightning/channel/Helpers.kt b/src/commonMain/kotlin/fr/acinq/lightning/channel/Helpers.kt index 3dea139eb..c37a6a3e0 100644 --- a/src/commonMain/kotlin/fr/acinq/lightning/channel/Helpers.kt +++ b/src/commonMain/kotlin/fr/acinq/lightning/channel/Helpers.kt @@ -6,6 +6,8 @@ import fr.acinq.bitcoin.Crypto.sha256 import fr.acinq.bitcoin.Script.pay2wsh import fr.acinq.bitcoin.Script.write import fr.acinq.bitcoin.utils.Either +import fr.acinq.bitcoin.utils.Try +import fr.acinq.bitcoin.utils.runTrying import fr.acinq.lightning.Feature import fr.acinq.lightning.Features import fr.acinq.lightning.MilliSatoshi diff --git a/src/commonMain/kotlin/fr/acinq/lightning/channel/InteractiveTx.kt b/src/commonMain/kotlin/fr/acinq/lightning/channel/InteractiveTx.kt index 78227ce21..b559a30a2 100644 --- a/src/commonMain/kotlin/fr/acinq/lightning/channel/InteractiveTx.kt +++ b/src/commonMain/kotlin/fr/acinq/lightning/channel/InteractiveTx.kt @@ -8,6 +8,8 @@ import fr.acinq.bitcoin.crypto.musig2.SecretNonce import fr.acinq.bitcoin.utils.getOrDefault import fr.acinq.lightning.Lightning.randomBytes32 import fr.acinq.bitcoin.utils.Either +import fr.acinq.bitcoin.utils.Try +import fr.acinq.bitcoin.utils.runTrying import fr.acinq.lightning.MilliSatoshi import fr.acinq.lightning.blockchain.electrum.WalletState import fr.acinq.lightning.blockchain.fee.FeeratePerKw diff --git a/src/commonMain/kotlin/fr/acinq/lightning/channel/states/LegacyWaitForFundingConfirmed.kt b/src/commonMain/kotlin/fr/acinq/lightning/channel/states/LegacyWaitForFundingConfirmed.kt index 3f5324b7d..1761a11d3 100644 --- a/src/commonMain/kotlin/fr/acinq/lightning/channel/states/LegacyWaitForFundingConfirmed.kt +++ b/src/commonMain/kotlin/fr/acinq/lightning/channel/states/LegacyWaitForFundingConfirmed.kt @@ -3,12 +3,12 @@ package fr.acinq.lightning.channel.states import fr.acinq.bitcoin.ScriptFlags import fr.acinq.bitcoin.Transaction import fr.acinq.bitcoin.utils.Either +import fr.acinq.bitcoin.utils.Try +import fr.acinq.bitcoin.utils.runTrying import fr.acinq.lightning.ShortChannelId import fr.acinq.lightning.blockchain.WatchEventConfirmed import fr.acinq.lightning.blockchain.WatchEventSpent import fr.acinq.lightning.channel.* -import fr.acinq.lightning.utils.Try -import fr.acinq.lightning.utils.runTrying import fr.acinq.lightning.wire.ChannelReady import fr.acinq.lightning.wire.Error import fr.acinq.lightning.wire.FundingCreated diff --git a/src/commonMain/kotlin/fr/acinq/lightning/crypto/sphinx/Sphinx.kt b/src/commonMain/kotlin/fr/acinq/lightning/crypto/sphinx/Sphinx.kt index 231a71f5f..ba1e0dceb 100644 --- a/src/commonMain/kotlin/fr/acinq/lightning/crypto/sphinx/Sphinx.kt +++ b/src/commonMain/kotlin/fr/acinq/lightning/crypto/sphinx/Sphinx.kt @@ -7,6 +7,8 @@ import fr.acinq.bitcoin.crypto.hmac import fr.acinq.bitcoin.io.ByteArrayInput import fr.acinq.bitcoin.io.ByteArrayOutput import fr.acinq.bitcoin.utils.Either +import fr.acinq.bitcoin.utils.Try +import fr.acinq.bitcoin.utils.runTrying import fr.acinq.lightning.crypto.ChaCha20 import fr.acinq.lightning.utils.* import fr.acinq.lightning.wire.* diff --git a/src/commonMain/kotlin/fr/acinq/lightning/payment/OutgoingPaymentHandler.kt b/src/commonMain/kotlin/fr/acinq/lightning/payment/OutgoingPaymentHandler.kt index 104addc84..8245319d6 100644 --- a/src/commonMain/kotlin/fr/acinq/lightning/payment/OutgoingPaymentHandler.kt +++ b/src/commonMain/kotlin/fr/acinq/lightning/payment/OutgoingPaymentHandler.kt @@ -2,6 +2,7 @@ package fr.acinq.lightning.payment import fr.acinq.bitcoin.ByteVector32 import fr.acinq.bitcoin.utils.Either +import fr.acinq.bitcoin.utils.Try import fr.acinq.lightning.* import fr.acinq.lightning.channel.* import fr.acinq.lightning.channel.states.Channel diff --git a/src/commonMain/kotlin/fr/acinq/lightning/payment/PaymentRequest.kt b/src/commonMain/kotlin/fr/acinq/lightning/payment/PaymentRequest.kt index b064e11f8..19bfac249 100644 --- a/src/commonMain/kotlin/fr/acinq/lightning/payment/PaymentRequest.kt +++ b/src/commonMain/kotlin/fr/acinq/lightning/payment/PaymentRequest.kt @@ -5,6 +5,8 @@ import fr.acinq.bitcoin.Script.tail import fr.acinq.bitcoin.io.ByteArrayInput import fr.acinq.bitcoin.io.ByteArrayOutput import fr.acinq.bitcoin.utils.Either +import fr.acinq.bitcoin.utils.Try +import fr.acinq.bitcoin.utils.runTrying import fr.acinq.lightning.* import fr.acinq.lightning.Lightning.randomBytes32 import fr.acinq.lightning.utils.* diff --git a/src/commonMain/kotlin/fr/acinq/lightning/transactions/Transactions.kt b/src/commonMain/kotlin/fr/acinq/lightning/transactions/Transactions.kt index 28448b1b8..b826695a4 100644 --- a/src/commonMain/kotlin/fr/acinq/lightning/transactions/Transactions.kt +++ b/src/commonMain/kotlin/fr/acinq/lightning/transactions/Transactions.kt @@ -18,6 +18,8 @@ package fr.acinq.lightning.transactions import fr.acinq.bitcoin.* import fr.acinq.bitcoin.crypto.Pack +import fr.acinq.bitcoin.utils.Try +import fr.acinq.bitcoin.utils.runTrying import fr.acinq.lightning.CltvExpiryDelta import fr.acinq.lightning.MilliSatoshi import fr.acinq.lightning.blockchain.fee.FeeratePerKw diff --git a/src/commonMain/kotlin/fr/acinq/lightning/utils/Try.kt b/src/commonMain/kotlin/fr/acinq/lightning/utils/Try.kt deleted file mode 100644 index 45aae4712..000000000 --- a/src/commonMain/kotlin/fr/acinq/lightning/utils/Try.kt +++ /dev/null @@ -1,46 +0,0 @@ -package fr.acinq.lightning.utils - -sealed class Try { - abstract val isSuccess: Boolean - val isFailure: Boolean get() = !isSuccess - abstract fun get(): T - abstract fun getOrElse(f: () -> T): T - abstract fun recoverWith(f: () -> Try): Try - abstract fun map(f: (T) -> R): Try - - data class Success(val result: T) : Try() { - override val isSuccess: Boolean = true - override fun get(): T = result - override fun getOrElse(f: () -> T): T = result - override fun recoverWith(f: () -> Try): Try = this - override fun map(f: (T) -> R): Try = runTrying { f(result) } - } - - data class Failure(val error: Throwable) : Try() { - override val isSuccess: Boolean = false - override fun get(): T = throw error - override fun getOrElse(f: () -> T): T = f() - override fun recoverWith(f: () -> Try): Try = f() - - @Suppress("UNCHECKED_CAST") - override fun map(f: (T) -> R): Try = this as Try - } - - companion object { - operator fun invoke(block: () -> T): Try = runTrying(block) - } -} - -inline fun runTrying(block: () -> R): Try = - try { - Try.Success(block()) - } catch (e: Throwable) { - Try.Failure(e) - } - -inline fun T.runTrying(block: T.() -> R): Try = - try { - Try.Success(block()) - } catch (e: Throwable) { - Try.Failure(e) - } diff --git a/src/commonTest/kotlin/fr/acinq/lightning/blockchain/electrum/ElectrumWatcherIntegrationTest.kt b/src/commonTest/kotlin/fr/acinq/lightning/blockchain/electrum/ElectrumWatcherIntegrationTest.kt index f5036aa86..6011e22dd 100644 --- a/src/commonTest/kotlin/fr/acinq/lightning/blockchain/electrum/ElectrumWatcherIntegrationTest.kt +++ b/src/commonTest/kotlin/fr/acinq/lightning/blockchain/electrum/ElectrumWatcherIntegrationTest.kt @@ -2,6 +2,7 @@ package fr.acinq.lightning.blockchain.electrum import fr.acinq.bitcoin.* import fr.acinq.bitcoin.SigHash.SIGHASH_ALL +import fr.acinq.bitcoin.utils.runTrying import fr.acinq.lightning.blockchain.* import fr.acinq.lightning.io.TcpSocket import fr.acinq.lightning.tests.bitcoind.BitcoindService @@ -10,7 +11,6 @@ import fr.acinq.lightning.tests.utils.runSuspendBlocking import fr.acinq.lightning.tests.utils.runSuspendTest import fr.acinq.lightning.utils.ServerAddress import fr.acinq.lightning.utils.currentTimestampMillis -import fr.acinq.lightning.utils.runTrying import fr.acinq.lightning.utils.sat import kotlinx.coroutines.delay import kotlinx.coroutines.flow.first diff --git a/src/commonTest/kotlin/fr/acinq/lightning/transactions/AnchorOutputsTestsCommon.kt b/src/commonTest/kotlin/fr/acinq/lightning/transactions/AnchorOutputsTestsCommon.kt index 95cdd1f98..e57048707 100644 --- a/src/commonTest/kotlin/fr/acinq/lightning/transactions/AnchorOutputsTestsCommon.kt +++ b/src/commonTest/kotlin/fr/acinq/lightning/transactions/AnchorOutputsTestsCommon.kt @@ -1,6 +1,8 @@ package fr.acinq.lightning.transactions import fr.acinq.bitcoin.* +import fr.acinq.bitcoin.utils.Try +import fr.acinq.bitcoin.utils.runTrying import fr.acinq.lightning.CltvExpiry import fr.acinq.lightning.CltvExpiryDelta import fr.acinq.lightning.Lightning.randomBytes32 From 7b124e7f9a1ba7de7b80cde62f39ab4dc8e9b3e5 Mon Sep 17 00:00:00 2001 From: sstone Date: Thu, 15 Feb 2024 11:58:53 +0100 Subject: [PATCH 3/3] Use Chain type provided by bitcoin-kmp --- .../kotlin/fr/acinq/lightning/NodeParams.kt | 19 ++--------- .../acinq/lightning/channel/InteractiveTx.kt | 26 ++++++++------- .../fr/acinq/lightning/crypto/KeyManager.kt | 33 +++++++++---------- .../acinq/lightning/crypto/LocalKeyManager.kt | 23 +++++++------ .../lightning/transactions/SwapInProtocol.kt | 17 +++++----- .../electrum/SwapInManagerTestsCommon.kt | 3 +- .../lightning/channel/RecoveryTestsCommon.kt | 3 +- .../states/WaitForAcceptChannelTestsCommon.kt | 3 +- .../crypto/LocalKeyManagerTestsCommon.kt | 25 +++++++------- .../fr/acinq/lightning/tests/TestConstants.kt | 9 ++--- .../lightning/wire/InitTlvTestsCommon.kt | 4 +-- 11 files changed, 75 insertions(+), 90 deletions(-) diff --git a/src/commonMain/kotlin/fr/acinq/lightning/NodeParams.kt b/src/commonMain/kotlin/fr/acinq/lightning/NodeParams.kt index 54e1e58c4..22ecad6cd 100644 --- a/src/commonMain/kotlin/fr/acinq/lightning/NodeParams.kt +++ b/src/commonMain/kotlin/fr/acinq/lightning/NodeParams.kt @@ -1,7 +1,7 @@ package fr.acinq.lightning import co.touchlab.kermit.Logger -import fr.acinq.bitcoin.Block +import fr.acinq.bitcoin.Bitcoin import fr.acinq.bitcoin.PublicKey import fr.acinq.bitcoin.Satoshi import fr.acinq.lightning.Lightning.nodeFee @@ -152,7 +152,7 @@ data class NodeParams( val autoReconnect: Boolean, val initialRandomReconnectDelaySeconds: Long, val maxReconnectIntervalSeconds: Long, - val chain: Chain, + val chain: Bitcoin.Chain, val channelFlags: Byte, val paymentRequestExpirySeconds: Long, val multiPartPaymentExpirySeconds: Long, @@ -183,7 +183,7 @@ data class NodeParams( /** * Library integrators should use this constructor and override values. */ - constructor(chain: Chain, loggerFactory: LoggerFactory, keyManager: KeyManager) : this( + constructor(chain: Bitcoin.Chain, loggerFactory: LoggerFactory, keyManager: KeyManager) : this( loggerFactory = loggerFactory, keyManager = keyManager, alias = "lightning-kmp", @@ -244,17 +244,4 @@ data class NodeParams( paymentRecipientExpiryParams = RecipientCltvExpiryParams(CltvExpiryDelta(75), CltvExpiryDelta(200)), liquidityPolicy = MutableStateFlow(LiquidityPolicy.Auto(maxAbsoluteFee = 2_000.sat, maxRelativeFeeBasisPoints = 3_000 /* 3000 = 30 % */, skipAbsoluteFeeCheck = false)) ) - - sealed class Chain(val name: String, private val genesis: Block) { - object Regtest : Chain("Regtest", Block.RegtestGenesisBlock) - object Testnet : Chain("Testnet", Block.TestnetGenesisBlock) - object Mainnet : Chain("Mainnet", Block.LivenetGenesisBlock) - - fun isMainnet(): Boolean = this is Mainnet - fun isTestnet(): Boolean = this is Testnet - - val chainHash by lazy { genesis.hash } - - override fun toString(): String = name - } } diff --git a/src/commonMain/kotlin/fr/acinq/lightning/channel/InteractiveTx.kt b/src/commonMain/kotlin/fr/acinq/lightning/channel/InteractiveTx.kt index b559a30a2..7b3daeabf 100644 --- a/src/commonMain/kotlin/fr/acinq/lightning/channel/InteractiveTx.kt +++ b/src/commonMain/kotlin/fr/acinq/lightning/channel/InteractiveTx.kt @@ -686,24 +686,25 @@ data class InteractiveTxSession( } } is Either.Left -> { - val txAddInput = when (msg.value) { - is InteractiveTxInput.LocalOnly -> TxAddInput(fundingParams.channelId, msg.value.serialId, msg.value.previousTx, msg.value.previousTxOutput, msg.value.sequence) + val inputOutgoing = msg.value + val txAddInput = when (inputOutgoing) { + is InteractiveTxInput.LocalOnly -> TxAddInput(fundingParams.channelId, inputOutgoing.serialId, inputOutgoing.previousTx, inputOutgoing.previousTxOutput, inputOutgoing.sequence) is InteractiveTxInput.LocalLegacySwapIn -> { val swapInParams = TxAddInputTlv.SwapInParamsLegacy(swapInKeys.userPublicKey, swapInKeys.remoteServerPublicKey, swapInKeys.refundDelay) - TxAddInput(fundingParams.channelId, msg.value.serialId, msg.value.previousTx, msg.value.previousTxOutput, msg.value.sequence, TlvStream(swapInParams)) + TxAddInput(fundingParams.channelId, inputOutgoing.serialId, inputOutgoing.previousTx, inputOutgoing.previousTxOutput, inputOutgoing.sequence, TlvStream(swapInParams)) } is InteractiveTxInput.LocalSwapIn -> { val swapInParams = TxAddInputTlv.SwapInParams(swapInKeys.userPublicKey, swapInKeys.remoteServerPublicKey, swapInKeys.userRefundPublicKey, swapInKeys.refundDelay) - TxAddInput(fundingParams.channelId, msg.value.serialId, msg.value.previousTx, msg.value.previousTxOutput, msg.value.sequence, TlvStream(swapInParams)) + TxAddInput(fundingParams.channelId, inputOutgoing.serialId, inputOutgoing.previousTx, inputOutgoing.previousTxOutput, inputOutgoing.sequence, TlvStream(swapInParams)) } - is InteractiveTxInput.Shared -> TxAddInput(fundingParams.channelId, msg.value.serialId, msg.value.outPoint, msg.value.sequence) + is InteractiveTxInput.Shared -> TxAddInput(fundingParams.channelId, inputOutgoing.serialId, inputOutgoing.outPoint, inputOutgoing.sequence) } - val nextSecretNonces = when (msg.value) { + val nextSecretNonces = when (inputOutgoing) { // Generate a secret nonce for this input if we don't already have one. - is InteractiveTxInput.LocalSwapIn -> when (secretNonces[msg.value.serialId]) { + is InteractiveTxInput.LocalSwapIn -> when (secretNonces[inputOutgoing.serialId]) { null -> { val secretNonce = Musig2.generateNonce(randomBytes32(), swapInKeys.userPrivateKey, listOf(swapInKeys.userPublicKey, swapInKeys.remoteServerPublicKey)) - secretNonces + (msg.value.serialId to secretNonce) + secretNonces + (inputOutgoing.serialId to secretNonce) } else -> secretNonces } @@ -713,10 +714,11 @@ data class InteractiveTxSession( Pair(next, InteractiveTxSessionAction.SendMessage(txAddInput)) } is Either.Right -> { - val next = copy(toSend = toSend.tail(), localOutputs = localOutputs + msg.value, txCompleteSent = null) - val txAddOutput = when (msg.value) { - is InteractiveTxOutput.Local -> TxAddOutput(fundingParams.channelId, msg.value.serialId, msg.value.amount, msg.value.pubkeyScript) - is InteractiveTxOutput.Shared -> TxAddOutput(fundingParams.channelId, msg.value.serialId, msg.value.amount, msg.value.pubkeyScript) + val outputOutgoing = msg.value + val next = copy(toSend = toSend.tail(), localOutputs = localOutputs + outputOutgoing, txCompleteSent = null) + val txAddOutput = when (outputOutgoing) { + is InteractiveTxOutput.Local -> TxAddOutput(fundingParams.channelId, outputOutgoing.serialId, outputOutgoing.amount, outputOutgoing.pubkeyScript) + is InteractiveTxOutput.Shared -> TxAddOutput(fundingParams.channelId, outputOutgoing.serialId, outputOutgoing.amount, outputOutgoing.pubkeyScript) } Pair(next, InteractiveTxSessionAction.SendMessage(txAddOutput)) } diff --git a/src/commonMain/kotlin/fr/acinq/lightning/crypto/KeyManager.kt b/src/commonMain/kotlin/fr/acinq/lightning/crypto/KeyManager.kt index 33716dede..850e2ede3 100644 --- a/src/commonMain/kotlin/fr/acinq/lightning/crypto/KeyManager.kt +++ b/src/commonMain/kotlin/fr/acinq/lightning/crypto/KeyManager.kt @@ -7,7 +7,6 @@ import fr.acinq.bitcoin.crypto.musig2.SecretNonce import fr.acinq.bitcoin.io.ByteArrayInput import fr.acinq.bitcoin.utils.Either import fr.acinq.lightning.DefaultSwapInParams -import fr.acinq.lightning.NodeParams import fr.acinq.lightning.blockchain.fee.FeeratePerKw import fr.acinq.lightning.transactions.SwapInProtocol import fr.acinq.lightning.transactions.SwapInProtocolLegacy @@ -71,7 +70,7 @@ interface KeyManager { } data class Bip84OnChainKeys( - private val chain: NodeParams.Chain, + private val chain: Bitcoin.Chain, private val master: DeterministicWallet.ExtendedPrivateKey, val account: Long ) { @@ -80,8 +79,8 @@ interface KeyManager { val xpub: String = DeterministicWallet.encode( input = DeterministicWallet.publicKey(xpriv), prefix = when (chain) { - NodeParams.Chain.Testnet, NodeParams.Chain.Regtest -> DeterministicWallet.vpub - NodeParams.Chain.Mainnet -> DeterministicWallet.zpub + Bitcoin.Chain.Testnet, Bitcoin.Chain.Regtest, Bitcoin.Chain.Signet -> DeterministicWallet.vpub + Bitcoin.Chain.Mainnet -> DeterministicWallet.zpub } ) @@ -101,9 +100,9 @@ interface KeyManager { } companion object { - fun bip84BasePath(chain: NodeParams.Chain) = when (chain) { - NodeParams.Chain.Regtest, NodeParams.Chain.Testnet -> KeyPath.empty / hardened(84) / hardened(1) - NodeParams.Chain.Mainnet -> KeyPath.empty / hardened(84) / hardened(0) + fun bip84BasePath(chain: Bitcoin.Chain) = when (chain) { + Bitcoin.Chain.Regtest, Bitcoin.Chain.Testnet, Bitcoin.Chain.Signet -> KeyPath.empty / hardened(84) / hardened(1) + Bitcoin.Chain.Mainnet -> KeyPath.empty / hardened(84) / hardened(0) } } } @@ -116,7 +115,7 @@ interface KeyManager { * The keys used are static across swaps to make recovery easier. */ data class SwapInOnChainKeys( - private val chain: NodeParams.Chain, + private val chain: Bitcoin.Chain, private val master: DeterministicWallet.ExtendedPrivateKey, val remoteServerPublicKey: PublicKey, val refundDelay: Int = DefaultSwapInParams.RefundDelay @@ -200,20 +199,20 @@ interface KeyManager { } companion object { - private fun swapInKeyBasePath(chain: NodeParams.Chain) = when (chain) { - NodeParams.Chain.Regtest, NodeParams.Chain.Testnet -> KeyPath.empty / hardened(51) / hardened(0) - NodeParams.Chain.Mainnet -> KeyPath.empty / hardened(52) / hardened(0) + private fun swapInKeyBasePath(chain: Bitcoin.Chain) = when (chain) { + Bitcoin.Chain.Regtest, Bitcoin.Chain.Testnet, Bitcoin.Chain.Signet -> KeyPath.empty / hardened(51) / hardened(0) + Bitcoin.Chain.Mainnet -> KeyPath.empty / hardened(52) / hardened(0) } - fun swapInUserKeyPath(chain: NodeParams.Chain) = swapInKeyBasePath(chain) / hardened(0) + fun swapInUserKeyPath(chain: Bitcoin.Chain) = swapInKeyBasePath(chain) / hardened(0) - fun swapInLocalServerKeyPath(chain: NodeParams.Chain) = swapInKeyBasePath(chain) / hardened(1) + fun swapInLocalServerKeyPath(chain: Bitcoin.Chain) = swapInKeyBasePath(chain) / hardened(1) - fun swapInUserRefundKeyPath(chain: NodeParams.Chain) = swapInKeyBasePath(chain) / hardened(2) / 0L + fun swapInUserRefundKeyPath(chain: Bitcoin.Chain) = swapInKeyBasePath(chain) / hardened(2) / 0L - fun encodedSwapInUserKeyPath(chain: NodeParams.Chain) = when (chain) { - NodeParams.Chain.Regtest, NodeParams.Chain.Testnet -> "51h/0h/0h" - NodeParams.Chain.Mainnet -> "52h/0h/0h" + fun encodedSwapInUserKeyPath(chain: Bitcoin.Chain) = when (chain) { + Bitcoin.Chain.Regtest, Bitcoin.Chain.Testnet, Bitcoin.Chain.Signet -> "51h/0h/0h" + Bitcoin.Chain.Mainnet -> "52h/0h/0h" } /** Swap-in servers use a different swap-in key for different users. */ diff --git a/src/commonMain/kotlin/fr/acinq/lightning/crypto/LocalKeyManager.kt b/src/commonMain/kotlin/fr/acinq/lightning/crypto/LocalKeyManager.kt index 87adcfded..d8764fb8a 100644 --- a/src/commonMain/kotlin/fr/acinq/lightning/crypto/LocalKeyManager.kt +++ b/src/commonMain/kotlin/fr/acinq/lightning/crypto/LocalKeyManager.kt @@ -5,7 +5,6 @@ import fr.acinq.bitcoin.DeterministicWallet.derivePrivateKey import fr.acinq.bitcoin.DeterministicWallet.hardened import fr.acinq.bitcoin.crypto.Pack import fr.acinq.lightning.Lightning.secureRandom -import fr.acinq.lightning.NodeParams.Chain import fr.acinq.lightning.crypto.LocalKeyManager.Companion.channelKeyPath /** @@ -34,7 +33,7 @@ import fr.acinq.lightning.crypto.LocalKeyManager.Companion.channelKeyPath * @param seed seed from which the channel keys will be derived * @param remoteSwapInExtendedPublicKey xpub belonging to our swap-in server, that must be used in our swap address */ -data class LocalKeyManager(val seed: ByteVector, val chain: Chain, val remoteSwapInExtendedPublicKey: String) : KeyManager { +data class LocalKeyManager(val seed: ByteVector, val chain: Bitcoin.Chain, val remoteSwapInExtendedPublicKey: String) : KeyManager { private val master = DeterministicWallet.generate(seed) @@ -47,7 +46,7 @@ data class LocalKeyManager(val seed: ByteVector, val chain: Chain, val remoteSwa override val swapInOnChainWallet: KeyManager.SwapInOnChainKeys = run { val (prefix, xpub) = DeterministicWallet.ExtendedPublicKey.decode(remoteSwapInExtendedPublicKey) val expectedPrefix = when (chain) { - Chain.Mainnet -> DeterministicWallet.xpub + Bitcoin.Chain.Mainnet -> DeterministicWallet.xpub else -> DeterministicWallet.tpub } require(prefix == expectedPrefix) { "unexpected swap-in xpub prefix $prefix (expected $expectedPrefix)" } @@ -150,21 +149,21 @@ data class LocalKeyManager(val seed: ByteVector, val chain: Chain, val remoteSwa return KeyPath(path) } - fun channelKeyBasePath(chain: Chain) = when (chain) { - Chain.Regtest, Chain.Testnet -> KeyPath.empty / hardened(48) / hardened(1) - Chain.Mainnet -> KeyPath.empty / hardened(50) / hardened(1) + fun channelKeyBasePath(chain: Bitcoin.Chain) = when (chain) { + Bitcoin.Chain.Regtest, Bitcoin.Chain.Testnet, Bitcoin.Chain.Signet -> KeyPath.empty / hardened(48) / hardened(1) + Bitcoin.Chain.Mainnet -> KeyPath.empty / hardened(50) / hardened(1) } /** Path for node keys generated by eclair-core */ @Deprecated("used for backward-compat with eclair-core", replaceWith = ReplaceWith("nodeKeyBasePath(chain)")) - fun eclairNodeKeyBasePath(chain: Chain) = when (chain) { - Chain.Regtest, Chain.Testnet -> KeyPath.empty / hardened(46) / hardened(0) - Chain.Mainnet -> KeyPath.empty / hardened(47) / hardened(0) + fun eclairNodeKeyBasePath(chain: Bitcoin.Chain) = when (chain) { + Bitcoin.Chain.Regtest, Bitcoin.Chain.Testnet, Bitcoin.Chain.Signet -> KeyPath.empty / hardened(46) / hardened(0) + Bitcoin.Chain.Mainnet -> KeyPath.empty / hardened(47) / hardened(0) } - fun nodeKeyBasePath(chain: Chain) = when (chain) { - Chain.Regtest, Chain.Testnet -> KeyPath.empty / hardened(48) / hardened(0) - Chain.Mainnet -> KeyPath.empty / hardened(50) / hardened(0) + fun nodeKeyBasePath(chain: Bitcoin.Chain) = when (chain) { + Bitcoin.Chain.Regtest, Bitcoin.Chain.Testnet, Bitcoin.Chain.Signet -> KeyPath.empty / hardened(48) / hardened(0) + Bitcoin.Chain.Mainnet -> KeyPath.empty / hardened(50) / hardened(0) } } } diff --git a/src/commonMain/kotlin/fr/acinq/lightning/transactions/SwapInProtocol.kt b/src/commonMain/kotlin/fr/acinq/lightning/transactions/SwapInProtocol.kt index d55a2d380..2381494f7 100644 --- a/src/commonMain/kotlin/fr/acinq/lightning/transactions/SwapInProtocol.kt +++ b/src/commonMain/kotlin/fr/acinq/lightning/transactions/SwapInProtocol.kt @@ -5,7 +5,6 @@ import fr.acinq.bitcoin.crypto.musig2.IndividualNonce import fr.acinq.bitcoin.crypto.musig2.Musig2 import fr.acinq.bitcoin.crypto.musig2.SecretNonce import fr.acinq.bitcoin.utils.Either -import fr.acinq.lightning.NodeParams /** * new swap-in protocol based on musig2 and taproot: (user key + server key) OR (user refund key + delay) @@ -24,7 +23,7 @@ data class SwapInProtocol(val userPublicKey: PublicKey, val serverPublicKey: Pub private val scriptTree = ScriptTree.Leaf(0, refundScript) val pubkeyScript: List = Script.pay2tr(internalPublicKey, scriptTree) - fun address(chain: NodeParams.Chain): String = Bitcoin.addressFromPublicKeyScript(chain.chainHash, pubkeyScript).right!! + fun address(chain: Bitcoin.Chain): String = Bitcoin.addressFromPublicKeyScript(chain.chainHash, pubkeyScript).right!! fun witness(fundingTx: Transaction, index: Int, parentTxOuts: List, userNonce: IndividualNonce, serverNonce: IndividualNonce, userPartialSig: ByteVector32, serverPartialSig: ByteVector32): Either { val publicKeys = listOf(userPublicKey, serverPublicKey) @@ -56,10 +55,10 @@ data class SwapInProtocol(val userPublicKey: PublicKey, val serverPublicKey: Pub } companion object { - fun privateDescriptor(chain: NodeParams.Chain, userPublicKey: PublicKey, serverPublicKey: PublicKey, refundDelay: Int, masterRefundKey: DeterministicWallet.ExtendedPrivateKey): String { + fun privateDescriptor(chain: Bitcoin.Chain, userPublicKey: PublicKey, serverPublicKey: PublicKey, refundDelay: Int, masterRefundKey: DeterministicWallet.ExtendedPrivateKey): String { val internalPubKey = Musig2.aggregateKeys(listOf(userPublicKey, serverPublicKey)) val prefix = when (chain) { - NodeParams.Chain.Mainnet -> DeterministicWallet.xprv + Bitcoin.Chain.Mainnet -> DeterministicWallet.xprv else -> DeterministicWallet.tprv } val xpriv = DeterministicWallet.encode(masterRefundKey, prefix) @@ -68,10 +67,10 @@ data class SwapInProtocol(val userPublicKey: PublicKey, val serverPublicKey: Pub return "$desc#$checksum" } - fun publicDescriptor(chain: NodeParams.Chain, userPublicKey: PublicKey, serverPublicKey: PublicKey, refundDelay: Int, masterRefundKey: DeterministicWallet.ExtendedPublicKey): String { + fun publicDescriptor(chain: Bitcoin.Chain, userPublicKey: PublicKey, serverPublicKey: PublicKey, refundDelay: Int, masterRefundKey: DeterministicWallet.ExtendedPublicKey): String { val internalPubKey = Musig2.aggregateKeys(listOf(userPublicKey, serverPublicKey)) val prefix = when (chain) { - NodeParams.Chain.Mainnet -> DeterministicWallet.xpub + Bitcoin.Chain.Mainnet -> DeterministicWallet.xpub else -> DeterministicWallet.tpub } val xpub = DeterministicWallet.encode(masterRefundKey, prefix) @@ -99,7 +98,7 @@ data class SwapInProtocolLegacy(val userPublicKey: PublicKey, val serverPublicKe val pubkeyScript: List = Script.pay2wsh(redeemScript) - fun address(chain: NodeParams.Chain): String = Bitcoin.addressFromPublicKeyScript(chain.chainHash, pubkeyScript).right!! + fun address(chain: Bitcoin.Chain): String = Bitcoin.addressFromPublicKeyScript(chain.chainHash, pubkeyScript).right!! fun witness(userSig: ByteVector64, serverSig: ByteVector64): ScriptWitness { return ScriptWitness(listOf(Scripts.der(serverSig, SigHash.SIGHASH_ALL), Scripts.der(userSig, SigHash.SIGHASH_ALL), Script.write(redeemScript).byteVector())) @@ -130,12 +129,12 @@ data class SwapInProtocolLegacy(val userPublicKey: PublicKey, val serverPublicKe * @param refundDelay refund delay * @return a p2wsh descriptor that can be imported in bitcoin core (from version 24 on) to recover user funds once the funding delay has passed. */ - fun descriptor(chain: NodeParams.Chain, masterPublicKey: DeterministicWallet.ExtendedPublicKey, userExtendedPublicKey: DeterministicWallet.ExtendedPublicKey, remoteServerPublicKey: PublicKey, refundDelay: Int): String { + fun descriptor(chain: Bitcoin.Chain, masterPublicKey: DeterministicWallet.ExtendedPublicKey, userExtendedPublicKey: DeterministicWallet.ExtendedPublicKey, remoteServerPublicKey: PublicKey, refundDelay: Int): String { // Since child public keys cannot be derived from a master xpub when hardened derivation is used, // we need to provide the fingerprint of the master xpub and the hardened derivation path. // This lets wallets that have access to the master xpriv derive the corresponding private and public keys. val masterFingerprint = ByteVector(Crypto.hash160(masterPublicKey.publickeybytes).take(4).toByteArray()) - val encodedChildKey = DeterministicWallet.encode(userExtendedPublicKey, testnet = chain != NodeParams.Chain.Mainnet) + val encodedChildKey = DeterministicWallet.encode(userExtendedPublicKey, testnet = chain != Bitcoin.Chain.Mainnet) val userKey = "[${masterFingerprint.toHex()}/${userExtendedPublicKey.path.asString('h').removePrefix("m/")}]$encodedChildKey" return "wsh(and_v(v:pk($userKey),or_d(pk(${remoteServerPublicKey.toHex()}),older($refundDelay))))" } diff --git a/src/commonTest/kotlin/fr/acinq/lightning/blockchain/electrum/SwapInManagerTestsCommon.kt b/src/commonTest/kotlin/fr/acinq/lightning/blockchain/electrum/SwapInManagerTestsCommon.kt index 5a9f9e747..7ac28bcd1 100644 --- a/src/commonTest/kotlin/fr/acinq/lightning/blockchain/electrum/SwapInManagerTestsCommon.kt +++ b/src/commonTest/kotlin/fr/acinq/lightning/blockchain/electrum/SwapInManagerTestsCommon.kt @@ -2,7 +2,6 @@ package fr.acinq.lightning.blockchain.electrum import fr.acinq.bitcoin.* import fr.acinq.lightning.Lightning.randomBytes32 -import fr.acinq.lightning.NodeParams import fr.acinq.lightning.SwapInParams import fr.acinq.lightning.blockchain.BITCOIN_FUNDING_DEPTHOK import fr.acinq.lightning.blockchain.WatchEventConfirmed @@ -25,7 +24,7 @@ class SwapInManagerTestsCommon : LightningTestSuite() { private val dummyPubkey = PublicKey.fromHex("02eae982c8563a1c256ee9b4655af7d4c0dc545d1e5c350a68c5f8902cd4cf3021") private val dummyScript = Script.pay2wpkh(dummyPubkey) - private val dummyAddress = Bitcoin.computeP2WpkhAddress(dummyPubkey, NodeParams.Chain.Regtest.chainHash) + private val dummyAddress = Bitcoin.computeP2WpkhAddress(dummyPubkey, Bitcoin.Chain.Regtest.chainHash) @Test fun `swap funds`() { diff --git a/src/commonTest/kotlin/fr/acinq/lightning/channel/RecoveryTestsCommon.kt b/src/commonTest/kotlin/fr/acinq/lightning/channel/RecoveryTestsCommon.kt index 1e3c08be1..b0e3ad5a0 100644 --- a/src/commonTest/kotlin/fr/acinq/lightning/channel/RecoveryTestsCommon.kt +++ b/src/commonTest/kotlin/fr/acinq/lightning/channel/RecoveryTestsCommon.kt @@ -2,7 +2,6 @@ package fr.acinq.lightning.channel import fr.acinq.bitcoin.* import fr.acinq.lightning.MilliSatoshi -import fr.acinq.lightning.NodeParams import fr.acinq.lightning.blockchain.fee.FeeratePerKw import fr.acinq.lightning.crypto.LocalKeyManager import fr.acinq.lightning.tests.TestConstants @@ -37,7 +36,7 @@ class RecoveryTestsCommon { // use Bob's mnemonic words to initialise his key manager val seed = MnemonicCode.toSeed(TestConstants.Bob.mnemonics, "").toByteVector32() - val keyManager = LocalKeyManager(seed, NodeParams.Chain.Regtest, TestConstants.aliceSwapInServerXpub) + val keyManager = LocalKeyManager(seed, Bitcoin.Chain.Regtest, TestConstants.aliceSwapInServerXpub) // recompute our channel keys from the extracted funding pubkey and see if we can find and spend our output fun findAndSpend(fundingKey: PublicKey): Transaction? { diff --git a/src/commonTest/kotlin/fr/acinq/lightning/channel/states/WaitForAcceptChannelTestsCommon.kt b/src/commonTest/kotlin/fr/acinq/lightning/channel/states/WaitForAcceptChannelTestsCommon.kt index c14c31113..1f4fd506e 100644 --- a/src/commonTest/kotlin/fr/acinq/lightning/channel/states/WaitForAcceptChannelTestsCommon.kt +++ b/src/commonTest/kotlin/fr/acinq/lightning/channel/states/WaitForAcceptChannelTestsCommon.kt @@ -1,5 +1,6 @@ package fr.acinq.lightning.channel.states +import fr.acinq.bitcoin.Bitcoin import fr.acinq.bitcoin.ByteVector32 import fr.acinq.bitcoin.Satoshi import fr.acinq.lightning.* @@ -107,7 +108,7 @@ class WaitForAcceptChannelTestsCommon : LightningTestSuite() { // we don't want their dust limit to be below 354 val lowDustLimitSatoshis = 353.sat // but we only enforce it on mainnet - val aliceMainnet = alice.copy(ctx = alice.ctx.copy(staticParams = alice.ctx.staticParams.copy(nodeParams = alice.staticParams.nodeParams.copy(chain = NodeParams.Chain.Mainnet)))) + val aliceMainnet = alice.copy(ctx = alice.ctx.copy(staticParams = alice.ctx.staticParams.copy(nodeParams = alice.staticParams.nodeParams.copy(chain = Bitcoin.Chain.Mainnet)))) val (alice1, actions1) = aliceMainnet.process(ChannelCommand.MessageReceived(accept.copy(dustLimit = lowDustLimitSatoshis))) assertIs>(alice1) val error = actions1.hasOutgoingMessage() diff --git a/src/commonTest/kotlin/fr/acinq/lightning/crypto/LocalKeyManagerTestsCommon.kt b/src/commonTest/kotlin/fr/acinq/lightning/crypto/LocalKeyManagerTestsCommon.kt index 058dff5df..968fc2a07 100644 --- a/src/commonTest/kotlin/fr/acinq/lightning/crypto/LocalKeyManagerTestsCommon.kt +++ b/src/commonTest/kotlin/fr/acinq/lightning/crypto/LocalKeyManagerTestsCommon.kt @@ -3,7 +3,6 @@ package fr.acinq.lightning.crypto import fr.acinq.bitcoin.* import fr.acinq.bitcoin.crypto.Pack import fr.acinq.lightning.Lightning.randomKey -import fr.acinq.lightning.NodeParams import fr.acinq.lightning.blockchain.fee.FeeratePerByte import fr.acinq.lightning.blockchain.fee.FeeratePerKw import fr.acinq.lightning.tests.TestConstants @@ -21,7 +20,7 @@ class LocalKeyManagerTestsCommon : LightningTestSuite() { // if this test breaks it means that we will generate a different node id from // the same seed, which could be a problem during an upgrade val seed = ByteVector("17b086b228025fa8f4416324b6ba2ec36e68570ae2fc3d392520969f2a9d0c1501") - val keyManager = LocalKeyManager(seed, NodeParams.Chain.Regtest, TestConstants.aliceSwapInServerXpub) + val keyManager = LocalKeyManager(seed, Bitcoin.Chain.Regtest, TestConstants.aliceSwapInServerXpub) assertEquals(keyManager.nodeKeys.nodeKey.publicKey, PublicKey.fromHex("0392ea6e914abcee840dc8a763b02ba5ac47e0ac3fadcd5294f9516fe353882522")) } @@ -30,14 +29,14 @@ class LocalKeyManagerTestsCommon : LightningTestSuite() { // if this test breaks it means that we will generate a different legacy node id from // the same seed, which could be a problem during migration from legacy to kmp val seed = MnemonicCode.toSeed("sock able evoke work output half bamboo energy simple fiber unhappy afford", passphrase = "").byteVector() - val keyManager = LocalKeyManager(seed, NodeParams.Chain.Regtest, TestConstants.aliceSwapInServerXpub) + val keyManager = LocalKeyManager(seed, Bitcoin.Chain.Regtest, TestConstants.aliceSwapInServerXpub) assertEquals(keyManager.nodeKeys.legacyNodeKey.publicKey, PublicKey.fromHex("0388a99397c5a599c4c56ea2b9f938bd2893744a590af7c1f05c9c3ee822c13fdc")) } @Test fun `generate channel keys`() { val seed = ByteVector("aeb3e9b5642cd4523e9e09164047f60adb413633549c3c6189192921311894d501") - val keyManager = LocalKeyManager(seed, NodeParams.Chain.Regtest, TestConstants.aliceSwapInServerXpub) + val keyManager = LocalKeyManager(seed, Bitcoin.Chain.Regtest, TestConstants.aliceSwapInServerXpub) val fundingKeyPath = makeFundingKeyPath(ByteVector("06535806c1aa73971ec4877a5e2e684fa636136c073810f190b63eefc58ca488"), isInitiator = false) val channelKeys = keyManager.channelKeys(fundingKeyPath) @@ -57,8 +56,8 @@ class LocalKeyManagerTestsCommon : LightningTestSuite() { @Test fun `generate different node ids from the same seed on different chains`() { val seed = ByteVector("17b086b228025fa8f4416324b6ba2ec36e68570ae2fc3d392520969f2a9d0c1501") - val keyManager1 = LocalKeyManager(seed, NodeParams.Chain.Regtest, DeterministicWallet.encode(dummyExtendedPubkey, testnet = true)) - val keyManager2 = LocalKeyManager(seed, NodeParams.Chain.Mainnet, DeterministicWallet.encode(dummyExtendedPubkey, testnet = false)) + val keyManager1 = LocalKeyManager(seed, Bitcoin.Chain.Regtest, DeterministicWallet.encode(dummyExtendedPubkey, testnet = true)) + val keyManager2 = LocalKeyManager(seed, Bitcoin.Chain.Mainnet, DeterministicWallet.encode(dummyExtendedPubkey, testnet = false)) assertNotEquals(keyManager1.nodeKeys.nodeKey.publicKey, keyManager2.nodeKeys.nodeKey.publicKey) val fundingKeyPath = KeyPath("1") val channelKeys1 = keyManager1.channelKeys(fundingKeyPath) @@ -85,7 +84,7 @@ class LocalKeyManagerTestsCommon : LightningTestSuite() { @Test fun `test vectors -- testnet + initiator`() { val seed = ByteVector("17b086b228025fa8f4416324b6ba2ec36e68570ae2fc3d392520969f2a9d0c1501") - val keyManager = LocalKeyManager(seed, NodeParams.Chain.Regtest, TestConstants.aliceSwapInServerXpub) + val keyManager = LocalKeyManager(seed, Bitcoin.Chain.Regtest, TestConstants.aliceSwapInServerXpub) val fundingKeyPath = makeFundingKeyPath(ByteVector("be4fa97c62b9f88437a3be577b31eb48f2165c7bc252194a15ff92d995778cfb"), isInitiator = true) val localParams = TestConstants.Alice.channelParams().copy(fundingKeyPath = fundingKeyPath) @@ -102,7 +101,7 @@ class LocalKeyManagerTestsCommon : LightningTestSuite() { @Test fun `test vectors -- testnet + non-initiator`() { val seed = ByteVector("aeb3e9b5642cd4523e9e09164047f60adb413633549c3c6189192921311894d501") - val keyManager = LocalKeyManager(seed, NodeParams.Chain.Regtest, TestConstants.aliceSwapInServerXpub) + val keyManager = LocalKeyManager(seed, Bitcoin.Chain.Regtest, TestConstants.aliceSwapInServerXpub) val fundingKeyPath = makeFundingKeyPath(ByteVector("06535806c1aa73971ec4877a5e2e684fa636136c073810f190b63eefc58ca488"), isInitiator = false) val localParams = TestConstants.Alice.channelParams().copy(fundingKeyPath = fundingKeyPath) @@ -119,7 +118,7 @@ class LocalKeyManagerTestsCommon : LightningTestSuite() { @Test fun `test vectors -- mainnet + initiator`() { val seed = ByteVector("d8d5431487c2b19ee6486aad6c3bdfb99d10b727bade7fa848e2ab7901c15bff01") - val keyManager = LocalKeyManager(seed, NodeParams.Chain.Mainnet, DeterministicWallet.encode(dummyExtendedPubkey, testnet = false)) + val keyManager = LocalKeyManager(seed, Bitcoin.Chain.Mainnet, DeterministicWallet.encode(dummyExtendedPubkey, testnet = false)) val fundingKeyPath = makeFundingKeyPath(ByteVector("ec1c41cd6be2b6e4ef46c1107f6c51fbb2066d7e1f7720bde4715af233ae1322"), isInitiator = true) val localParams = TestConstants.Alice.channelParams().copy(fundingKeyPath = fundingKeyPath) @@ -136,7 +135,7 @@ class LocalKeyManagerTestsCommon : LightningTestSuite() { @Test fun `test vectors -- mainnet + non-initiator`() { val seed = ByteVector("4b809dd593b36131c454d60c2f7bdfd49d12ec455e5b657c47a9ca0f5dfc5eef01") - val keyManager = LocalKeyManager(seed, NodeParams.Chain.Mainnet, DeterministicWallet.encode(dummyExtendedPubkey, testnet = false)) + val keyManager = LocalKeyManager(seed, Bitcoin.Chain.Mainnet, DeterministicWallet.encode(dummyExtendedPubkey, testnet = false)) val fundingKeyPath = makeFundingKeyPath(ByteVector("2b4f045be5303d53f9d3a84a1e70c12251168dc29f300cf9cece0ec85cd8182b"), isInitiator = false) val localParams = TestConstants.Alice.channelParams().copy(fundingKeyPath = fundingKeyPath) @@ -155,7 +154,7 @@ class LocalKeyManagerTestsCommon : LightningTestSuite() { // basic test taken from https://github.com/bitcoin/bips/blob/master/bip-0084.mediawiki val mnemonics = "abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon about".split(" ") val seed = MnemonicCode.toSeed(mnemonics, "").toByteVector() - val keyManager = LocalKeyManager(seed, NodeParams.Chain.Mainnet, DeterministicWallet.encode(dummyExtendedPubkey, testnet = false)) + val keyManager = LocalKeyManager(seed, Bitcoin.Chain.Mainnet, DeterministicWallet.encode(dummyExtendedPubkey, testnet = false)) assertEquals(keyManager.finalOnChainWallet.address(addressIndex = 0L), "bc1qcr8te4kr609gcawutmrza0j4xv80jy8z306fyu") assertEquals(keyManager.finalOnChainWallet.address(addressIndex = 1L), "bc1qnjg0jd8228aq7egyzacy8cys3knf9xvrerkf9g") assertEquals(keyManager.finalOnChainWallet.privateKey(addressIndex = 1L).toBase58(Base58.Prefix.SecretKey), "Kxpf5b8p3qX56DKEe5NqWbNUP9MnqoRFzZwHRtsFqhzuvUJsYZCy") @@ -168,7 +167,7 @@ class LocalKeyManagerTestsCommon : LightningTestSuite() { // reference data was generated from electrum 4.1.5 val mnemonics = "abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon about".split(" ") val seed = MnemonicCode.toSeed(mnemonics, "").toByteVector() - val keyManager = LocalKeyManager(seed, NodeParams.Chain.Testnet, TestConstants.aliceSwapInServerXpub) + val keyManager = LocalKeyManager(seed, Bitcoin.Chain.Testnet, TestConstants.aliceSwapInServerXpub) assertEquals(keyManager.finalOnChainWallet.privateKey(addressIndex = 0L).toBase58(Base58.Prefix.SecretKeyTestnet), "cTGhosGriPpuGA586jemcuH9pE9spwUmneMBmYYzrQEbY92DJrbo") assertEquals(keyManager.finalOnChainWallet.privateKey(addressIndex = 1L).toBase58(Base58.Prefix.SecretKeyTestnet), "cQFUndrpAyMaE3HAsjMCXiT94MzfsABCREat1x7Qe3Mtq9KihD4V") assertEquals(keyManager.finalOnChainWallet.xpub, "vpub5Y6cjg78GGuNLsaPhmYsiw4gYX3HoQiRBiSwDaBXKUafCt9bNwWQiitDk5VZ5BVxYnQdwoTyXSs2JHRPAgjAvtbBrf8ZhDYe2jWAqvZVnsc") @@ -216,7 +215,7 @@ class LocalKeyManagerTestsCommon : LightningTestSuite() { fun `compute descriptors to recover swap-in funds`() { val seed = MnemonicCode.toSeed("abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon about", "") val master = DeterministicWallet.generate(seed) - val chain = NodeParams.Chain.Regtest + val chain = Bitcoin.Chain.Regtest val userPublicKey = PrivateKey.fromHex("0101010101010101010101010101010101010101010101010101010101010101").publicKey() val remoteServerPublicKey = PrivateKey.fromHex("0202020202020202020202020202020202020202020202020202020202020202").publicKey() val userRefundExtendedPrivateKey = DeterministicWallet.derivePrivateKey(master, KeyManager.SwapInOnChainKeys.swapInUserRefundKeyPath(chain)) diff --git a/src/commonTest/kotlin/fr/acinq/lightning/tests/TestConstants.kt b/src/commonTest/kotlin/fr/acinq/lightning/tests/TestConstants.kt index 2c4509f1a..bb69977bc 100644 --- a/src/commonTest/kotlin/fr/acinq/lightning/tests/TestConstants.kt +++ b/src/commonTest/kotlin/fr/acinq/lightning/tests/TestConstants.kt @@ -1,5 +1,6 @@ package fr.acinq.lightning.tests +import fr.acinq.bitcoin.Bitcoin import fr.acinq.bitcoin.ByteVector import fr.acinq.bitcoin.ByteVector32 import fr.acinq.bitcoin.MnemonicCode @@ -47,10 +48,10 @@ object TestConstants { private val mnemonics = MnemonicCode.toMnemonics(entropy) private val seed = MnemonicCode.toSeed(mnemonics, "").toByteVector32() - val keyManager = LocalKeyManager(seed, NodeParams.Chain.Regtest, bobSwapInServerXpub) + val keyManager = LocalKeyManager(seed, Bitcoin.Chain.Regtest, bobSwapInServerXpub) val walletParams = WalletParams(NodeUri(Bob.keyManager.nodeKeys.nodeKey.publicKey, "bob.com", 9735), trampolineFees, InvoiceDefaultRoutingFees(1_000.msat, 100, CltvExpiryDelta(144)), swapInParams) val nodeParams = NodeParams( - chain = NodeParams.Chain.Regtest, + chain = Bitcoin.Chain.Regtest, loggerFactory = testLoggerFactory, keyManager = keyManager, ).copy( @@ -96,10 +97,10 @@ object TestConstants { val mnemonics = MnemonicCode.toMnemonics(entropy) private val seed = MnemonicCode.toSeed(mnemonics, "").toByteVector32() - val keyManager = LocalKeyManager(seed, NodeParams.Chain.Regtest, aliceSwapInServerXpub) + val keyManager = LocalKeyManager(seed, Bitcoin.Chain.Regtest, aliceSwapInServerXpub) val walletParams = WalletParams(NodeUri(Alice.keyManager.nodeKeys.nodeKey.publicKey, "alice.com", 9735), trampolineFees, InvoiceDefaultRoutingFees(1_000.msat, 100, CltvExpiryDelta(144)), swapInParams) val nodeParams = NodeParams( - chain = NodeParams.Chain.Regtest, + chain = Bitcoin.Chain.Regtest, loggerFactory = testLoggerFactory, keyManager = keyManager, ).copy( diff --git a/src/commonTest/kotlin/fr/acinq/lightning/wire/InitTlvTestsCommon.kt b/src/commonTest/kotlin/fr/acinq/lightning/wire/InitTlvTestsCommon.kt index b8f348a51..09ac763e9 100644 --- a/src/commonTest/kotlin/fr/acinq/lightning/wire/InitTlvTestsCommon.kt +++ b/src/commonTest/kotlin/fr/acinq/lightning/wire/InitTlvTestsCommon.kt @@ -1,9 +1,9 @@ package fr.acinq.lightning.wire +import fr.acinq.bitcoin.Bitcoin import fr.acinq.bitcoin.Crypto import fr.acinq.bitcoin.MnemonicCode import fr.acinq.bitcoin.byteVector -import fr.acinq.lightning.NodeParams import fr.acinq.lightning.crypto.LocalKeyManager import fr.acinq.lightning.tests.TestConstants import fr.acinq.lightning.tests.utils.LightningTestSuite @@ -15,7 +15,7 @@ import kotlin.test.assertTrue class InitTlvTestsCommon : LightningTestSuite() { @Test fun `legacy phoenix TLV`() { - val keyManager = LocalKeyManager(MnemonicCode.toSeed("sock able evoke work output half bamboo energy simple fiber unhappy afford", passphrase = "").byteVector(), NodeParams.Chain.Testnet, TestConstants.aliceSwapInServerXpub) + val keyManager = LocalKeyManager(MnemonicCode.toSeed("sock able evoke work output half bamboo energy simple fiber unhappy afford", passphrase = "").byteVector(), Bitcoin.Chain.Testnet, TestConstants.aliceSwapInServerXpub) val testCases = listOf( Pair( first = keyManager.nodeKeys.legacyNodeKey.publicKey,