Skip to content

Commit a589c63

Browse files
committed
Introduce CurrencyConversion in Flow and ChannelManager
Following the introduction of the `CurrencyConversion` trait, this commit integrates it into the `Flow` and `ChannelManager` as a required parameter. This change enables users to supply their own fiat-to-msat conversion logic when constructing the Flow or ChannelManager, making synchronised currency handling fully customizable at the application level.
1 parent f10ac51 commit a589c63

File tree

13 files changed

+207
-70
lines changed

13 files changed

+207
-70
lines changed

fuzz/src/chanmon_consistency.rs

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -58,6 +58,9 @@ use lightning::ln::msgs::{
5858
use lightning::ln::script::ShutdownScript;
5959
use lightning::ln::types::ChannelId;
6060
use lightning::offers::invoice::UnsignedBolt12Invoice;
61+
use lightning::offers::invoice_request::CurrencyConversion;
62+
use lightning::offers::offer::CurrencyCode;
63+
use lightning::offers::parse::Bolt12SemanticError;
6164
use lightning::onion_message::messenger::{Destination, MessageRouter, OnionMessagePath};
6265
use lightning::routing::router::{
6366
InFlightHtlcs, Path, PaymentParameters, Route, RouteHop, RouteParameters, Router,
@@ -150,6 +153,14 @@ impl MessageRouter for FuzzRouter {
150153
}
151154
}
152155

156+
struct FuzzCurrencyConversion {}
157+
158+
impl CurrencyConversion for FuzzCurrencyConversion {
159+
fn fiat_to_msats(&self, _iso4217_code: CurrencyCode) -> Result<u64, Bolt12SemanticError> {
160+
unreachable!()
161+
}
162+
}
163+
153164
pub struct TestBroadcaster {}
154165
impl BroadcasterInterface for TestBroadcaster {
155166
fn broadcast_transactions(&self, _txs: &[&Transaction]) {}
@@ -464,6 +475,7 @@ type ChanMan<'a> = ChannelManager<
464475
Arc<FuzzEstimator>,
465476
&'a FuzzRouter,
466477
&'a FuzzRouter,
478+
&'a FuzzCurrencyConversion,
467479
Arc<dyn Logger>,
468480
>;
469481

@@ -637,6 +649,7 @@ pub fn do_test<Out: Output>(data: &[u8], underlying_out: Out, anchors: bool) {
637649
let out = SearchingOutput::new(underlying_out);
638650
let broadcast = Arc::new(TestBroadcaster {});
639651
let router = FuzzRouter {};
652+
let currency_conversion = FuzzCurrencyConversion {};
640653

641654
macro_rules! make_node {
642655
($node_id: expr, $fee_estimator: expr) => {{
@@ -679,6 +692,7 @@ pub fn do_test<Out: Output>(data: &[u8], underlying_out: Out, anchors: bool) {
679692
broadcast.clone(),
680693
&router,
681694
&router,
695+
&currency_conversion,
682696
Arc::clone(&logger),
683697
keys_manager.clone(),
684698
keys_manager.clone(),
@@ -770,6 +784,7 @@ pub fn do_test<Out: Output>(data: &[u8], underlying_out: Out, anchors: bool) {
770784
tx_broadcaster: broadcast.clone(),
771785
router: &router,
772786
message_router: &router,
787+
currency_conversion: &currency_conversion,
773788
logger,
774789
default_config: config,
775790
channel_monitors: monitor_refs,

fuzz/src/full_stack.rs

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -50,6 +50,9 @@ use lightning::ln::peer_handler::{
5050
use lightning::ln::script::ShutdownScript;
5151
use lightning::ln::types::ChannelId;
5252
use lightning::offers::invoice::UnsignedBolt12Invoice;
53+
use lightning::offers::invoice_request::CurrencyConversion;
54+
use lightning::offers::offer::CurrencyCode;
55+
use lightning::offers::parse::Bolt12SemanticError;
5356
use lightning::onion_message::messenger::{Destination, MessageRouter, OnionMessagePath};
5457
use lightning::routing::gossip::{NetworkGraph, P2PGossipSync};
5558
use lightning::routing::router::{
@@ -181,6 +184,14 @@ impl MessageRouter for FuzzRouter {
181184
}
182185
}
183186

187+
struct FuzzCurrencyConversion {}
188+
189+
impl CurrencyConversion for FuzzCurrencyConversion {
190+
fn fiat_to_msats(&self, _iso4217_code: CurrencyCode) -> Result<u64, Bolt12SemanticError> {
191+
unreachable!()
192+
}
193+
}
194+
184195
struct TestBroadcaster {
185196
txn_broadcasted: Mutex<Vec<Transaction>>,
186197
}
@@ -236,6 +247,7 @@ type ChannelMan<'a> = ChannelManager<
236247
Arc<FuzzEstimator>,
237248
&'a FuzzRouter,
238249
&'a FuzzRouter,
250+
&'a FuzzCurrencyConversion,
239251
Arc<dyn Logger>,
240252
>;
241253
type PeerMan<'a> = PeerManager<
@@ -543,6 +555,7 @@ pub fn do_test(mut data: &[u8], logger: &Arc<dyn Logger>) {
543555
});
544556
let fee_est = Arc::new(FuzzEstimator { input: input.clone() });
545557
let router = FuzzRouter {};
558+
let currency_conversion = FuzzCurrencyConversion {};
546559

547560
macro_rules! get_slice {
548561
($len: expr) => {
@@ -606,6 +619,7 @@ pub fn do_test(mut data: &[u8], logger: &Arc<dyn Logger>) {
606619
broadcast.clone(),
607620
&router,
608621
&router,
622+
&currency_conversion,
609623
Arc::clone(&logger),
610624
keys_manager.clone(),
611625
keys_manager.clone(),

fuzz/src/lsps_message.rs

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,7 @@ use lightning::chain::{chainmonitor, BestBlock};
1010
use lightning::ln::channelmanager::{ChainParameters, ChannelManager};
1111
use lightning::ln::peer_handler::CustomMessageHandler;
1212
use lightning::ln::wire::CustomMessageReader;
13+
use lightning::offers::invoice_request::DefaultCurrencyConversion;
1314
use lightning::onion_message::messenger::DefaultMessageRouter;
1415
use lightning::routing::gossip::NetworkGraph;
1516
use lightning::routing::router::DefaultRouter;
@@ -49,6 +50,7 @@ pub fn do_test(data: &[u8]) {
4950
));
5051
let msg_router =
5152
Arc::new(DefaultMessageRouter::new(Arc::clone(&network_graph), Arc::clone(&keys_manager)));
53+
let currency_conversion = Arc::new(DefaultCurrencyConversion {});
5254
let chain_source = Arc::new(TestChainSource::new(Network::Bitcoin));
5355
let kv_store = Arc::new(TestStore::new(false));
5456
let chain_monitor = Arc::new(chainmonitor::ChainMonitor::new(
@@ -68,6 +70,7 @@ pub fn do_test(data: &[u8]) {
6870
Arc::clone(&tx_broadcaster),
6971
Arc::clone(&router),
7072
Arc::clone(&msg_router),
73+
Arc::clone(&currency_conversion),
7174
Arc::clone(&logger),
7275
Arc::clone(&keys_manager),
7376
Arc::clone(&keys_manager),

lightning-background-processor/src/lib.rs

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1672,6 +1672,7 @@ mod tests {
16721672
IgnoringMessageHandler, MessageHandler, PeerManager, SocketDescriptor,
16731673
};
16741674
use lightning::ln::types::ChannelId;
1675+
use lightning::offers::invoice_request::DefaultCurrencyConversion;
16751676
use lightning::onion_message::messenger::{DefaultMessageRouter, OnionMessenger};
16761677
use lightning::routing::gossip::{NetworkGraph, P2PGossipSync};
16771678
use lightning::routing::router::{CandidateRouteHop, DefaultRouter, Path, RouteHop};
@@ -1745,6 +1746,7 @@ mod tests {
17451746
Arc<KeysManager>,
17461747
>,
17471748
>,
1749+
Arc<DefaultCurrencyConversion>,
17481750
Arc<test_utils::TestLogger>,
17491751
>;
17501752

@@ -2167,6 +2169,7 @@ mod tests {
21672169
Arc::clone(&network_graph),
21682170
Arc::clone(&keys_manager),
21692171
));
2172+
let currency_conversion = Arc::new(DefaultCurrencyConversion {});
21702173
let chain_source = Arc::new(test_utils::TestChainSource::new(Network::Bitcoin));
21712174
let kv_store =
21722175
Arc::new(Persister::new(format!("{}_persister_{}", &persist_dir, i).into()));
@@ -2189,6 +2192,7 @@ mod tests {
21892192
Arc::clone(&tx_broadcaster),
21902193
Arc::clone(&router),
21912194
Arc::clone(&msg_router),
2195+
currency_conversion,
21922196
Arc::clone(&logger),
21932197
Arc::clone(&keys_manager),
21942198
Arc::clone(&keys_manager),

lightning-block-sync/src/init.rs

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -50,6 +50,7 @@ where
5050
/// use lightning::chain::chaininterface::BroadcasterInterface;
5151
/// use lightning::chain::chaininterface::FeeEstimator;
5252
/// use lightning::ln::channelmanager::{ChannelManager, ChannelManagerReadArgs};
53+
/// use lightning::offers::invoice_request::CurrencyConversion;
5354
/// use lightning::onion_message::messenger::MessageRouter;
5455
/// use lightning::routing::router::Router;
5556
/// use lightning::sign;
@@ -71,6 +72,7 @@ where
7172
/// F: FeeEstimator,
7273
/// R: Router,
7374
/// MR: MessageRouter,
75+
/// CC: CurrencyConversion,
7476
/// L: Logger,
7577
/// C: chain::Filter,
7678
/// P: chainmonitor::Persist<SP::EcdsaSigner>,
@@ -85,6 +87,7 @@ where
8587
/// fee_estimator: &F,
8688
/// router: &R,
8789
/// message_router: &MR,
90+
/// currency_conversion: &CC,
8891
/// logger: &L,
8992
/// persister: &P,
9093
/// ) {
@@ -105,11 +108,12 @@ where
105108
/// tx_broadcaster,
106109
/// router,
107110
/// message_router,
111+
/// currency_conversion,
108112
/// logger,
109113
/// config,
110114
/// vec![&mut monitor],
111115
/// );
112-
/// <(BlockHash, ChannelManager<&ChainMonitor<SP::EcdsaSigner, &C, &T, &F, &L, &P, &ES>, &T, &ES, &NS, &SP, &F, &R, &MR, &L>)>::read(
116+
/// <(BlockHash, ChannelManager<&ChainMonitor<SP::EcdsaSigner, &C, &T, &F, &L, &P, &ES>, &T, &ES, &NS, &SP, &F, &R, &MR, &CC, &L>)>::read(
113117
/// &mut Cursor::new(&serialized_manager), read_args).unwrap()
114118
/// };
115119
///

0 commit comments

Comments
 (0)