From 439f112ef1baaae89df13f0ac5a52daaffaf5d38 Mon Sep 17 00:00:00 2001 From: Jason Date: Thu, 24 Jul 2025 12:14:27 +0200 Subject: [PATCH 1/3] feat(lightning): set max dust htlc exposure in dev settings --- src/screens/Settings/DevSettings/LdkDebug.tsx | 135 +++++++++++++++++- src/store/slices/settings.ts | 2 + src/utils/lightning/index.ts | 10 ++ 3 files changed, 145 insertions(+), 2 deletions(-) diff --git a/src/screens/Settings/DevSettings/LdkDebug.tsx b/src/screens/Settings/DevSettings/LdkDebug.tsx index 60ba7a896..1e0c38750 100644 --- a/src/screens/Settings/DevSettings/LdkDebug.tsx +++ b/src/screens/Settings/DevSettings/LdkDebug.tsx @@ -2,7 +2,7 @@ import Clipboard from '@react-native-clipboard/clipboard'; import lm from '@synonymdev/react-native-ldk'; import React, { ReactElement, memo, useState } from 'react'; import { useTranslation } from 'react-i18next'; -import { ScrollView, StyleSheet } from 'react-native'; +import { ScrollView, StyleSheet, TouchableOpacity, View } from 'react-native'; import RNFS from 'react-native-fs'; import Share from 'react-native-share'; @@ -13,17 +13,19 @@ import { useLightningBalance } from '../../../hooks/lightning'; import { useAppDispatch, useAppSelector } from '../../../hooks/redux'; import { useSheetRef } from '../../../sheets/SheetRefsProvider'; import { openChannelsSelector } from '../../../store/reselect/lightning'; +import { settingsSelector } from '../../../store/reselect/settings'; import { selectedNetworkSelector, selectedWalletSelector, } from '../../../store/reselect/wallet'; import { removeLightningPeer } from '../../../store/slices/lightning'; +import { updateSettings } from '../../../store/slices/settings'; import { createLightningInvoice, savePeer, } from '../../../store/utils/lightning'; import { TextInput, View as ThemedView } from '../../../styles/components'; -import { Caption13Up } from '../../../styles/text'; +import { BodyM, Caption13Up } from '../../../styles/text'; import { addPeer, getNodeId, @@ -53,6 +55,15 @@ const LdkDebug = (): ReactElement => { const selectedWallet = useAppSelector(selectedWalletSelector); const selectedNetwork = useAppSelector(selectedNetworkSelector); const openChannels = useAppSelector(openChannelsSelector); + const settings = useAppSelector(settingsSelector); + + // Max Dust HTLC Exposure form state + const [selectedType, setSelectedType] = useState< + 'fixed_limit' | 'fee_rate_multiplier' | null + >(settings?.max_dust_htlc_exposure_type ?? null); + const [exposureValue, setExposureValue] = useState( + settings?.max_dust_htlc_exposure?.toString() ?? '1000', + ); const onNodeId = async (): Promise => { const nodeId = await getNodeId(); @@ -435,6 +446,97 @@ const LdkDebug = (): ReactElement => { )} + + Max Dust HTLC Exposure + + + {/* Radio buttons for type selection */} + + setSelectedType( + selectedType === 'fixed_limit' ? null : 'fixed_limit', + ) + }> + + Fixed Limit (sats) + + + + setSelectedType( + selectedType === 'fee_rate_multiplier' + ? null + : 'fee_rate_multiplier', + ) + }> + + Fee Rate Multiplier + + + {/* Number input - only show when a type is selected */} + {selectedType && ( + + )} + + {/* Action buttons */} + +