Skip to content

Commit f39df44

Browse files
author
Antoine Riard
committed
Add getter for Minimum Relay Fee in FeeEstimator
We need to ensure that we respect minrelayfee when computing RBF bumped fee.
1 parent ca03df9 commit f39df44

File tree

5 files changed

+22
-9
lines changed

5 files changed

+22
-9
lines changed

src/chain/chaininterface.rs

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -109,6 +109,11 @@ pub trait FeeEstimator: Sync + Send {
109109
/// * satoshis-per-byte * 250
110110
/// * ceil(satoshis-per-kbyte / 4)
111111
fn get_est_sat_per_1000_weight(&self, confirmation_target: ConfirmationTarget) -> u64;
112+
/// Gets satoshis of minimum relay fee required per 1000 Weight-Units.
113+
///
114+
/// Give us back the minimum relay fee setup by node mempool. It's should be accounted in generic fee
115+
/// computation but in case of RBF we need more granularity on fee composition.
116+
fn get_min_relay_sat_per_1000_weight(&self) -> u64;
112117
}
113118

114119
/// Utility for tracking registered txn/outpoints and checking for matches

src/ln/channel.rs

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -3994,12 +3994,16 @@ mod tests {
39943994
use std::sync::Arc;
39953995

39963996
struct TestFeeEstimator {
3997-
fee_est: u64
3997+
fee_est: u64,
3998+
minrelayfee: u64
39983999
}
39994000
impl FeeEstimator for TestFeeEstimator {
40004001
fn get_est_sat_per_1000_weight(&self, _: ConfirmationTarget) -> u64 {
40014002
self.fee_est
40024003
}
4004+
fn get_min_relay_sat_per_1000_weight(&self) -> u64 {
4005+
self.minrelayfee
4006+
}
40034007
}
40044008

40054009
#[test]
@@ -4034,7 +4038,7 @@ mod tests {
40344038
#[test]
40354039
fn outbound_commitment_test() {
40364040
// Test vectors from BOLT 3 Appendix C:
4037-
let feeest = TestFeeEstimator{fee_est: 15000};
4041+
let feeest = TestFeeEstimator{fee_est: 15000, minrelayfee: 0};
40384042
let logger : Arc<Logger> = Arc::new(test_utils::TestLogger::new());
40394043
let secp_ctx = Secp256k1::new();
40404044

src/ln/functional_test_utils.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -839,7 +839,7 @@ pub fn create_network(node_count: usize) -> Vec<Node> {
839839

840840
for i in 0..node_count {
841841
let logger: Arc<Logger> = Arc::new(test_utils::TestLogger::with_id(format!("node {}", i)));
842-
let feeest = Arc::new(test_utils::TestFeeEstimator { sat_per_kw: 253 });
842+
let feeest = Arc::new(test_utils::TestFeeEstimator { sat_per_kw: 253, min_relay_sat_per_kw: 0});
843843
let chain_monitor = Arc::new(chaininterface::ChainWatchInterfaceUtil::new(Network::Testnet, Arc::clone(&logger)));
844844
let tx_broadcaster = Arc::new(test_utils::TestBroadcaster{txn_broadcasted: Mutex::new(Vec::new())});
845845
let mut seed = [0; 32];

src/ln/functional_tests.rs

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -3236,7 +3236,7 @@ fn test_no_txn_manager_serialize_deserialize() {
32363236
let mut chan_0_monitor_serialized = test_utils::TestVecWriter(Vec::new());
32373237
nodes[0].chan_monitor.simple_monitor.monitors.lock().unwrap().iter().next().unwrap().1.write_for_disk(&mut chan_0_monitor_serialized).unwrap();
32383238

3239-
nodes[0].chan_monitor = Arc::new(test_utils::TestChannelMonitor::new(nodes[0].chain_monitor.clone(), nodes[0].tx_broadcaster.clone(), Arc::new(test_utils::TestLogger::new()), Arc::new(test_utils::TestFeeEstimator { sat_per_kw: 253 })));
3239+
nodes[0].chan_monitor = Arc::new(test_utils::TestChannelMonitor::new(nodes[0].chain_monitor.clone(), nodes[0].tx_broadcaster.clone(), Arc::new(test_utils::TestLogger::new()), Arc::new(test_utils::TestFeeEstimator { sat_per_kw: 253, min_relay_sat_per_kw: 0})));
32403240
let mut chan_0_monitor_read = &chan_0_monitor_serialized.0[..];
32413241
let (_, chan_0_monitor) = <(Sha256dHash, ChannelMonitor)>::read(&mut chan_0_monitor_read, Arc::new(test_utils::TestLogger::new())).unwrap();
32423242
assert!(chan_0_monitor_read.is_empty());
@@ -3250,7 +3250,7 @@ fn test_no_txn_manager_serialize_deserialize() {
32503250
<(Sha256dHash, ChannelManager)>::read(&mut nodes_0_read, ChannelManagerReadArgs {
32513251
default_config: config,
32523252
keys_manager,
3253-
fee_estimator: Arc::new(test_utils::TestFeeEstimator { sat_per_kw: 253 }),
3253+
fee_estimator: Arc::new(test_utils::TestFeeEstimator { sat_per_kw: 253, min_relay_sat_per_kw: 0}),
32543254
monitor: nodes[0].chan_monitor.clone(),
32553255
chain_monitor: nodes[0].chain_monitor.clone(),
32563256
tx_broadcaster: nodes[0].tx_broadcaster.clone(),
@@ -3302,7 +3302,7 @@ fn test_simple_manager_serialize_deserialize() {
33023302
let mut chan_0_monitor_serialized = test_utils::TestVecWriter(Vec::new());
33033303
nodes[0].chan_monitor.simple_monitor.monitors.lock().unwrap().iter().next().unwrap().1.write_for_disk(&mut chan_0_monitor_serialized).unwrap();
33043304

3305-
nodes[0].chan_monitor = Arc::new(test_utils::TestChannelMonitor::new(nodes[0].chain_monitor.clone(), nodes[0].tx_broadcaster.clone(), Arc::new(test_utils::TestLogger::new()), Arc::new(test_utils::TestFeeEstimator { sat_per_kw: 253 })));
3305+
nodes[0].chan_monitor = Arc::new(test_utils::TestChannelMonitor::new(nodes[0].chain_monitor.clone(), nodes[0].tx_broadcaster.clone(), Arc::new(test_utils::TestLogger::new()), Arc::new(test_utils::TestFeeEstimator { sat_per_kw: 253, min_relay_sat_per_kw: 0})));
33063306
let mut chan_0_monitor_read = &chan_0_monitor_serialized.0[..];
33073307
let (_, chan_0_monitor) = <(Sha256dHash, ChannelMonitor)>::read(&mut chan_0_monitor_read, Arc::new(test_utils::TestLogger::new())).unwrap();
33083308
assert!(chan_0_monitor_read.is_empty());
@@ -3315,7 +3315,7 @@ fn test_simple_manager_serialize_deserialize() {
33153315
<(Sha256dHash, ChannelManager)>::read(&mut nodes_0_read, ChannelManagerReadArgs {
33163316
default_config: UserConfig::new(),
33173317
keys_manager,
3318-
fee_estimator: Arc::new(test_utils::TestFeeEstimator { sat_per_kw: 253 }),
3318+
fee_estimator: Arc::new(test_utils::TestFeeEstimator { sat_per_kw: 253, min_relay_sat_per_kw: 0}),
33193319
monitor: nodes[0].chan_monitor.clone(),
33203320
chain_monitor: nodes[0].chain_monitor.clone(),
33213321
tx_broadcaster: nodes[0].tx_broadcaster.clone(),
@@ -3362,7 +3362,7 @@ fn test_manager_serialize_deserialize_inconsistent_monitor() {
33623362
node_0_monitors_serialized.push(writer.0);
33633363
}
33643364

3365-
nodes[0].chan_monitor = Arc::new(test_utils::TestChannelMonitor::new(nodes[0].chain_monitor.clone(), nodes[0].tx_broadcaster.clone(), Arc::new(test_utils::TestLogger::new()), Arc::new(test_utils::TestFeeEstimator { sat_per_kw: 253 })));
3365+
nodes[0].chan_monitor = Arc::new(test_utils::TestChannelMonitor::new(nodes[0].chain_monitor.clone(), nodes[0].tx_broadcaster.clone(), Arc::new(test_utils::TestLogger::new()), Arc::new(test_utils::TestFeeEstimator { sat_per_kw: 253, min_relay_sat_per_kw: 0})));
33663366
let mut node_0_monitors = Vec::new();
33673367
for serialized in node_0_monitors_serialized.iter() {
33683368
let mut read = &serialized[..];
@@ -3376,7 +3376,7 @@ fn test_manager_serialize_deserialize_inconsistent_monitor() {
33763376
let (_, nodes_0_deserialized) = <(Sha256dHash, ChannelManager)>::read(&mut nodes_0_read, ChannelManagerReadArgs {
33773377
default_config: UserConfig::new(),
33783378
keys_manager,
3379-
fee_estimator: Arc::new(test_utils::TestFeeEstimator { sat_per_kw: 253 }),
3379+
fee_estimator: Arc::new(test_utils::TestFeeEstimator { sat_per_kw: 253, min_relay_sat_per_kw: 0}),
33803380
monitor: nodes[0].chan_monitor.clone(),
33813381
chain_monitor: nodes[0].chain_monitor.clone(),
33823382
tx_broadcaster: nodes[0].tx_broadcaster.clone(),

src/util/test_utils.rs

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -33,11 +33,15 @@ impl Writer for TestVecWriter {
3333

3434
pub struct TestFeeEstimator {
3535
pub sat_per_kw: u64,
36+
pub min_relay_sat_per_kw: u64
3637
}
3738
impl chaininterface::FeeEstimator for TestFeeEstimator {
3839
fn get_est_sat_per_1000_weight(&self, _confirmation_target: ConfirmationTarget) -> u64 {
3940
self.sat_per_kw
4041
}
42+
fn get_min_relay_sat_per_1000_weight(&self) -> u64 {
43+
self.min_relay_sat_per_kw
44+
}
4145
}
4246

4347
pub struct TestChannelMonitor {

0 commit comments

Comments
 (0)