@@ -5384,10 +5384,16 @@ impl<Signer: Sign> Channel<Signer> {
5384
5384
if msg. contents . htlc_minimum_msat >= self . channel_value_satoshis * 1000 {
5385
5385
return Err ( ChannelError :: Close ( "Minimum htlc value is greater than channel value" . to_string ( ) ) ) ;
5386
5386
}
5387
+ let outbound_htlc_maximum_msat = match msg. contents . htlc_maximum_msat {
5388
+ OptionalField :: Present ( htcl_max) => Some ( htcl_max) ,
5389
+ OptionalField :: Absent => None
5390
+ } ;
5387
5391
self . counterparty_forwarding_info = Some ( CounterpartyForwardingInfo {
5388
5392
fee_base_msat : msg. contents . fee_base_msat ,
5389
5393
fee_proportional_millionths : msg. contents . fee_proportional_millionths ,
5390
- cltv_expiry_delta : msg. contents . cltv_expiry_delta
5394
+ cltv_expiry_delta : msg. contents . cltv_expiry_delta ,
5395
+ outbound_htlc_minimum_msat : Some ( msg. contents . htlc_minimum_msat ) ,
5396
+ outbound_htlc_maximum_msat,
5391
5397
} ) ;
5392
5398
5393
5399
Ok ( ( ) )
@@ -5842,6 +5848,7 @@ impl<Signer: Sign> Writeable for Channel<Signer> {
5842
5848
( 17 , self . announcement_sigs_state, required) ,
5843
5849
( 19 , self . latest_inbound_scid_alias, option) ,
5844
5850
( 21 , self . outbound_scid_alias, required) ,
5851
+ ( 23 , self . counterparty_forwarding_info. as_ref( ) . map( |info| info. outbound_htlc_maximum_msat) . unwrap_or( None ) , option) ,
5845
5852
} ) ;
5846
5853
5847
5854
Ok ( ( ) )
@@ -6040,12 +6047,14 @@ impl<'a, Signer: Sign, K: Deref> ReadableArgs<(&'a K, u32)> for Channel<Signer>
6040
6047
let _dummy: u32 = Readable :: read ( reader) ?;
6041
6048
}
6042
6049
6043
- let counterparty_forwarding_info = match <u8 as Readable >:: read ( reader) ? {
6050
+ let mut counterparty_forwarding_info = match <u8 as Readable >:: read ( reader) ? {
6044
6051
0 => None ,
6045
6052
1 => Some ( CounterpartyForwardingInfo {
6046
6053
fee_base_msat : Readable :: read ( reader) ?,
6047
6054
fee_proportional_millionths : Readable :: read ( reader) ?,
6048
6055
cltv_expiry_delta : Readable :: read ( reader) ?,
6056
+ outbound_htlc_minimum_msat : Some ( counterparty_htlc_minimum_msat) ,
6057
+ outbound_htlc_maximum_msat : None ,
6049
6058
} ) ,
6050
6059
_ => return Err ( DecodeError :: InvalidValue ) ,
6051
6060
} ;
@@ -6099,6 +6108,7 @@ impl<'a, Signer: Sign, K: Deref> ReadableArgs<(&'a K, u32)> for Channel<Signer>
6099
6108
let mut announcement_sigs_state = Some ( AnnouncementSigsState :: NotSent ) ;
6100
6109
let mut latest_inbound_scid_alias = None ;
6101
6110
let mut outbound_scid_alias = None ;
6111
+ let mut outbound_htlc_maximum_msat = None ;
6102
6112
6103
6113
read_tlv_fields ! ( reader, {
6104
6114
( 0 , announcement_sigs, option) ,
@@ -6116,8 +6126,14 @@ impl<'a, Signer: Sign, K: Deref> ReadableArgs<(&'a K, u32)> for Channel<Signer>
6116
6126
( 17 , announcement_sigs_state, option) ,
6117
6127
( 19 , latest_inbound_scid_alias, option) ,
6118
6128
( 21 , outbound_scid_alias, option) ,
6129
+ ( 23 , outbound_htlc_maximum_msat, option) ,
6119
6130
} ) ;
6120
6131
6132
+ if outbound_htlc_maximum_msat. is_some ( ) && counterparty_forwarding_info. is_some ( ) {
6133
+ let cf_info = counterparty_forwarding_info. as_mut ( ) . unwrap ( ) ;
6134
+ cf_info. outbound_htlc_maximum_msat = outbound_htlc_maximum_msat;
6135
+ }
6136
+
6121
6137
if let Some ( preimages) = preimages_opt {
6122
6138
let mut iter = preimages. into_iter ( ) ;
6123
6139
for htlc in pending_outbound_htlcs. iter_mut ( ) {
0 commit comments