Skip to content

Commit c30d72e

Browse files
committed
Merge branch 'master' into mainnet
2 parents 344d568 + 79119fc commit c30d72e

File tree

10 files changed

+36
-18
lines changed

10 files changed

+36
-18
lines changed

gradle/libs.versions.toml

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
[versions]
2-
lightningkmp = "1.10.7"
3-
secp256k1 = "0.18.0" # keep in check with lightning-kmp secp version
2+
lightningkmp = "1.10.8"
3+
secp256k1 = "0.19.0" # keep in check with lightning-kmp secp version
44

55
kotlin = "2.1.10"
66
ktor = "3.1.0"

phoenix-android/build.gradle.kts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -26,8 +26,8 @@ android {
2626
applicationId = "fr.acinq.phoenix.mainnet"
2727
minSdk = 26
2828
targetSdk = 35
29-
versionCode = 108
30-
versionName = "2.6.5"
29+
versionCode = 109
30+
versionName = gitCommitHash()
3131
testInstrumentationRunner = "androidx.test.runner.AndroidJUnitRunner"
3232
}
3333

phoenix-android/src/main/kotlin/fr/acinq/phoenix/android/payments/send/cpfp/CpfpView.kt

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -66,7 +66,8 @@ fun CpfpView(
6666
val vm = viewModel<CpfpViewModel>(factory = CpfpViewModel.Factory(peerManager))
6767
val mempoolFeerate by business.appConfigurationManager.mempoolFeerate.collectAsState()
6868

69-
var feerate by remember { mutableStateOf(mempoolFeerate?.halfHour?.feerate ?: 10.sat) }
69+
val recommendedFeerate by peerManager.recommendedFeerateFlow.collectAsState()
70+
var feerate by remember { mutableStateOf(recommendedFeerate.feerate) }
7071

7172
Column(
7273
modifier = Modifier.padding(horizontal = 24.dp),

phoenix-android/src/main/kotlin/fr/acinq/phoenix/android/payments/send/spliceout/SpliceOutView.kt

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -29,7 +29,6 @@ import androidx.compose.material.Text
2929
import androidx.compose.runtime.*
3030
import androidx.compose.ui.Alignment
3131
import androidx.compose.ui.Modifier
32-
import androidx.compose.ui.draw.alpha
3332
import androidx.compose.ui.platform.LocalContext
3433
import androidx.compose.ui.platform.LocalSoftwareKeyboardController
3534
import androidx.compose.ui.res.stringResource
@@ -72,12 +71,13 @@ fun SendSpliceOutView(
7271
val keyboardManager = LocalSoftwareKeyboardController.current
7372

7473
val peerManager = business.peerManager
74+
val recommendedFeerate by peerManager.recommendedFeerateFlow.collectAsState()
7575
val mempoolFeerate by business.appConfigurationManager.mempoolFeerate.collectAsState()
7676
val balance = business.balanceManager.balance.collectAsState(null).value
7777
val mayDoPayments by business.peerManager.mayDoPayments.collectAsState()
7878
val vm = viewModel<SpliceOutViewModel>(factory = SpliceOutViewModel.Factory(peerManager, business.chain))
7979

80-
var feerate by remember { mutableStateOf(mempoolFeerate?.halfHour?.feerate ?: 3.sat) }
80+
var feerate by remember { mutableStateOf(recommendedFeerate.feerate) }
8181
var amount by remember { mutableStateOf(requestedAmount) }
8282
var amountErrorMessage by remember { mutableStateOf("") }
8383

phoenix-android/src/main/kotlin/fr/acinq/phoenix/android/settings/MutualCloseView.kt

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -94,7 +94,8 @@ fun MutualCloseView(
9494
var address by remember { mutableStateOf("") }
9595
var addressErrorMessage by remember { mutableStateOf<String?>(null) }
9696
val mempoolFeerate by business.appConfigurationManager.mempoolFeerate.collectAsState()
97-
var feerate by remember { mutableStateOf(mempoolFeerate?.halfHour?.feerate ?: 3.sat) }
97+
val recommendedFeerate by business.peerManager.recommendedFeerateFlow.collectAsState()
98+
var feerate by remember { mutableStateOf(recommendedFeerate.feerate) }
9899

99100
var showScannerView by remember { mutableStateOf(false) }
100101
var showConfirmationDialog by remember { mutableStateOf(false) }

phoenix-android/src/main/kotlin/fr/acinq/phoenix/android/settings/fees/LiquidityPolicyView.kt

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -212,7 +212,6 @@ private fun EditMaxFee(
212212
)
213213
}
214214
}
215-
216215
}
217216
Spacer(Modifier.width(12.dp))
218217
InlineSatoshiInput(

phoenix-android/src/main/kotlin/fr/acinq/phoenix/android/settings/walletinfo/FinalWalletRefundView.kt

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -152,7 +152,8 @@ private fun ColumnScope.AvailableForRefund(
152152
val mempoolFeerate by business.appConfigurationManager.mempoolFeerate.collectAsState()
153153

154154
var address by remember { mutableStateOf("") }
155-
var feerate by remember { mutableStateOf(mempoolFeerate?.halfHour?.feerate ?: 3.sat) }
155+
val recommendedFeerate by business.peerManager.recommendedFeerateFlow.collectAsState()
156+
var feerate by remember { mutableStateOf(recommendedFeerate.feerate) }
156157

157158
var showScannerView by remember { mutableStateOf(false) }
158159

phoenix-android/src/main/kotlin/fr/acinq/phoenix/android/settings/walletinfo/SwapInRefundView.kt

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -112,7 +112,8 @@ private fun AvailableForRefundView(
112112
var showScannerView by remember { mutableStateOf(false) }
113113

114114
val mempoolFeerate by business.appConfigurationManager.mempoolFeerate.collectAsState()
115-
var feerate by remember { mutableStateOf(mempoolFeerate?.halfHour?.feerate ?: 3.sat) }
115+
val recommendedFeerate by peerManager.recommendedFeerateFlow.collectAsState()
116+
var feerate by remember { mutableStateOf(recommendedFeerate.feerate) }
116117

117118
if (showScannerView) {
118119
SwapInRefundScanner(

phoenix-ios/phoenix-ios.xcodeproj/project.pbxproj

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -2519,7 +2519,7 @@
25192519
ASSETCATALOG_COMPILER_APPICON_NAME = "AppIcon-Green";
25202520
CODE_SIGN_ENTITLEMENTS = "phoenix-ios/Phoenix.entitlements";
25212521
CODE_SIGN_STYLE = Automatic;
2522-
CURRENT_PROJECT_VERSION = 94;
2522+
CURRENT_PROJECT_VERSION = 95;
25232523
DEVELOPMENT_ASSET_PATHS = "\"phoenix-ios/Preview Content\"";
25242524
DEVELOPMENT_TEAM = XD77LN4376;
25252525
ENABLE_PREVIEWS = YES;
@@ -2543,7 +2543,7 @@
25432543
ASSETCATALOG_COMPILER_APPICON_NAME = "AppIcon-Green";
25442544
CODE_SIGN_ENTITLEMENTS = "phoenix-ios/Phoenix.entitlements";
25452545
CODE_SIGN_STYLE = Automatic;
2546-
CURRENT_PROJECT_VERSION = 94;
2546+
CURRENT_PROJECT_VERSION = 95;
25472547
DEVELOPMENT_ASSET_PATHS = "\"phoenix-ios/Preview Content\"";
25482548
DEVELOPMENT_TEAM = XD77LN4376;
25492549
ENABLE_PREVIEWS = YES;
@@ -2641,7 +2641,7 @@
26412641
CLANG_CXX_LANGUAGE_STANDARD = "gnu++17";
26422642
CODE_SIGN_ENTITLEMENTS = "phoenix-notifySrvExt/phoenix-notifySrvExt.entitlements";
26432643
CODE_SIGN_STYLE = Automatic;
2644-
CURRENT_PROJECT_VERSION = 94;
2644+
CURRENT_PROJECT_VERSION = 95;
26452645
DEVELOPMENT_TEAM = XD77LN4376;
26462646
GENERATE_INFOPLIST_FILE = YES;
26472647
INFOPLIST_FILE = "phoenix-notifySrvExt/Info.plist";
@@ -2668,7 +2668,7 @@
26682668
CLANG_CXX_LANGUAGE_STANDARD = "gnu++17";
26692669
CODE_SIGN_ENTITLEMENTS = "phoenix-notifySrvExt/phoenix-notifySrvExt.entitlements";
26702670
CODE_SIGN_STYLE = Automatic;
2671-
CURRENT_PROJECT_VERSION = 94;
2671+
CURRENT_PROJECT_VERSION = 95;
26722672
DEVELOPMENT_TEAM = XD77LN4376;
26732673
GENERATE_INFOPLIST_FILE = YES;
26742674
INFOPLIST_FILE = "phoenix-notifySrvExt/Info.plist";

phoenix-shared/src/commonMain/kotlin/fr.acinq.phoenix/managers/PeerManager.kt

Lines changed: 18 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,6 @@
11
package fr.acinq.phoenix.managers
22

33
import fr.acinq.bitcoin.ByteVector32
4-
import fr.acinq.bitcoin.Crypto
54
import fr.acinq.lightning.CltvExpiryDelta
65
import fr.acinq.lightning.DefaultSwapInParams
76
import fr.acinq.lightning.InvoiceDefaultRoutingFees
@@ -18,6 +17,7 @@ import fr.acinq.lightning.blockchain.electrum.IElectrumClient
1817
import fr.acinq.lightning.blockchain.electrum.SwapInManager
1918
import fr.acinq.lightning.blockchain.electrum.SwapInWallet
2019
import fr.acinq.lightning.blockchain.electrum.WalletState
20+
import fr.acinq.lightning.blockchain.fee.FeeratePerByte
2121
import fr.acinq.lightning.channel.states.ChannelStateWithCommitments
2222
import fr.acinq.lightning.channel.states.Normal
2323
import fr.acinq.lightning.channel.states.Offline
@@ -28,8 +28,6 @@ import fr.acinq.lightning.payment.LiquidityPolicy
2828
import fr.acinq.lightning.utils.Connection
2929
import fr.acinq.lightning.utils.msat
3030
import fr.acinq.lightning.utils.sat
31-
import fr.acinq.lightning.wire.InitTlv
32-
import fr.acinq.lightning.wire.TlvStream
3331
import fr.acinq.phoenix.PhoenixBusiness
3432
import fr.acinq.phoenix.data.LocalChannelInfo
3533
import fr.acinq.phoenix.utils.extensions.isTerminated
@@ -126,6 +124,23 @@ class PeerManager(
126124
initialValue = null,
127125
)
128126

127+
/**
128+
* Provides a recommended fee rate for various user operations in the app (e.g., splice-out, simple close, cpfp).
129+
* Returns the mempool.space half-hour estimation if available, falls back to the peer funding feerate if not, and worst case, returns a static base value of 3s/vb.
130+
*/
131+
@OptIn(ExperimentalCoroutinesApi::class)
132+
val recommendedFeerateFlow = peerState.filterNotNull().flatMapLatest { peer ->
133+
combine(configurationManager.mempoolFeerate, peer.peerFeeratesFlow) { mempoolFeerate, peerFeerates ->
134+
mempoolFeerate?.halfHour
135+
?: peerFeerates?.fundingFeerate?.let { FeeratePerByte(it) }
136+
?: FeeratePerByte(3.sat)
137+
}
138+
}.stateIn(
139+
scope = this,
140+
started = SharingStarted.Eagerly,
141+
initialValue = FeeratePerByte(3.sat)
142+
)
143+
129144
@OptIn(ExperimentalCoroutinesApi::class)
130145
val swapInNextTimeout = swapInWallet.filterNotNull().mapLatest { it.nextTimeout }
131146

0 commit comments

Comments
 (0)