@@ -317,7 +317,7 @@ pub(super) struct Channel {
317
317
their_htlc_minimum_msat : u64 ,
318
318
our_htlc_minimum_msat : u64 ,
319
319
their_to_self_delay : u16 ,
320
- //implied by BREAKDOWN_TIMEOUT: our_to_self_delay: u16,
320
+ our_to_self_delay : u16 ,
321
321
#[ cfg( test) ]
322
322
pub their_max_accepted_htlcs : u16 ,
323
323
#[ cfg( not( test) ) ]
@@ -413,6 +413,9 @@ impl Channel {
413
413
if push_msat > channel_value_satoshis * 1000 {
414
414
return Err ( APIError :: APIMisuseError { err : "push value > channel value" } ) ;
415
415
}
416
+ if config. own_channel_config . our_to_self_delay < BREAKDOWN_TIMEOUT {
417
+ return Err ( APIError :: APIMisuseError { err : "Configured with an unreasonable our_to_self_delay putting user funds at risks" } ) ;
418
+ }
416
419
417
420
418
421
let background_feerate = fee_estimator. get_est_sat_per_1000_weight ( ConfirmationTarget :: Background ) ;
@@ -424,7 +427,7 @@ impl Channel {
424
427
425
428
let secp_ctx = Secp256k1 :: new ( ) ;
426
429
let channel_monitor = ChannelMonitor :: new ( & chan_keys. revocation_base_key , & chan_keys. delayed_payment_base_key ,
427
- & chan_keys. htlc_base_key , & chan_keys. payment_base_key , & keys_provider. get_shutdown_pubkey ( ) , BREAKDOWN_TIMEOUT ,
430
+ & chan_keys. htlc_base_key , & chan_keys. payment_base_key , & keys_provider. get_shutdown_pubkey ( ) , config . own_channel_config . our_to_self_delay ,
428
431
keys_provider. get_destination_script ( ) , logger. clone ( ) ) ;
429
432
430
433
Ok ( Channel {
@@ -481,6 +484,7 @@ impl Channel {
481
484
their_htlc_minimum_msat : 0 ,
482
485
our_htlc_minimum_msat : Channel :: derive_our_htlc_minimum_msat ( feerate) ,
483
486
their_to_self_delay : 0 ,
487
+ our_to_self_delay : config. own_channel_config . our_to_self_delay ,
484
488
their_max_accepted_htlcs : 0 ,
485
489
minimum_depth : 0 , // Filled in in accept_channel
486
490
@@ -518,6 +522,10 @@ impl Channel {
518
522
let chan_keys = keys_provider. get_channel_keys ( true ) ;
519
523
let mut local_config = ( * config) . channel_options . clone ( ) ;
520
524
525
+ if config. own_channel_config . our_to_self_delay < BREAKDOWN_TIMEOUT {
526
+ return Err ( ChannelError :: Close ( "Configured with an unreasonable our_to_self_delay putting user funds at risks" ) ) ;
527
+ }
528
+
521
529
// Check sanity of message fields:
522
530
if msg. funding_satoshis >= MAX_FUNDING_SATOSHIS {
523
531
return Err ( ChannelError :: Close ( "funding value > 2^24" ) ) ;
@@ -539,7 +547,7 @@ impl Channel {
539
547
}
540
548
Channel :: check_remote_fee ( fee_estimator, msg. feerate_per_kw ) ?;
541
549
542
- if msg. to_self_delay > MAX_LOCAL_BREAKDOWN_TIMEOUT {
550
+ if msg. to_self_delay > config . peer_channel_config_limits . their_to_self_delay || msg . to_self_delay > MAX_LOCAL_BREAKDOWN_TIMEOUT {
543
551
return Err ( ChannelError :: Close ( "They wanted our payments to be delayed by a needlessly long period" ) ) ;
544
552
}
545
553
if msg. max_accepted_htlcs < 1 {
@@ -612,7 +620,7 @@ impl Channel {
612
620
613
621
let secp_ctx = Secp256k1 :: new ( ) ;
614
622
let mut channel_monitor = ChannelMonitor :: new ( & chan_keys. revocation_base_key , & chan_keys. delayed_payment_base_key ,
615
- & chan_keys. htlc_base_key , & chan_keys. payment_base_key , & keys_provider. get_shutdown_pubkey ( ) , BREAKDOWN_TIMEOUT ,
623
+ & chan_keys. htlc_base_key , & chan_keys. payment_base_key , & keys_provider. get_shutdown_pubkey ( ) , config . own_channel_config . our_to_self_delay ,
616
624
keys_provider. get_destination_script ( ) , logger. clone ( ) ) ;
617
625
channel_monitor. set_their_base_keys ( & msg. htlc_basepoint , & msg. delayed_payment_basepoint ) ;
618
626
channel_monitor. set_their_to_self_delay ( msg. to_self_delay ) ;
@@ -692,6 +700,7 @@ impl Channel {
692
700
their_htlc_minimum_msat : msg. htlc_minimum_msat ,
693
701
our_htlc_minimum_msat : Channel :: derive_our_htlc_minimum_msat ( msg. feerate_per_kw as u64 ) ,
694
702
their_to_self_delay : msg. to_self_delay ,
703
+ our_to_self_delay : config. own_channel_config . our_to_self_delay ,
695
704
their_max_accepted_htlcs : msg. max_accepted_htlcs ,
696
705
minimum_depth : config. own_channel_config . minimum_depth ,
697
706
@@ -927,7 +936,7 @@ impl Channel {
927
936
log_trace ! ( self , " ...including {} output with value {}" , if local { "to_local" } else { "to_remote" } , value_to_a) ;
928
937
txouts. push ( ( TxOut {
929
938
script_pubkey : chan_utils:: get_revokeable_redeemscript ( & keys. revocation_key ,
930
- if local { self . their_to_self_delay } else { BREAKDOWN_TIMEOUT } ,
939
+ if local { self . their_to_self_delay } else { self . our_to_self_delay } ,
931
940
& keys. a_delayed_payment_key ) . to_v0_p2wsh ( ) ,
932
941
value : value_to_a as u64
933
942
} , None ) ) ;
@@ -1126,7 +1135,7 @@ impl Channel {
1126
1135
/// @local is used only to convert relevant internal structures which refer to remote vs local
1127
1136
/// to decide value of outputs and direction of HTLCs.
1128
1137
fn build_htlc_transaction ( & self , prev_hash : & Sha256dHash , htlc : & HTLCOutputInCommitment , local : bool , keys : & TxCreationKeys , feerate_per_kw : u64 ) -> Transaction {
1129
- chan_utils:: build_htlc_transaction ( prev_hash, feerate_per_kw, if local { self . their_to_self_delay } else { BREAKDOWN_TIMEOUT } , htlc, & keys. a_delayed_payment_key , & keys. revocation_key )
1138
+ chan_utils:: build_htlc_transaction ( prev_hash, feerate_per_kw, if local { self . their_to_self_delay } else { self . our_to_self_delay } , htlc, & keys. a_delayed_payment_key , & keys. revocation_key )
1130
1139
}
1131
1140
1132
1141
fn create_htlc_tx_signature ( & self , tx : & Transaction , htlc : & HTLCOutputInCommitment , keys : & TxCreationKeys ) -> Result < ( Script , Signature , bool ) , ChannelError > {
@@ -1380,7 +1389,7 @@ impl Channel {
1380
1389
if msg. htlc_minimum_msat >= ( self . channel_value_satoshis - msg. channel_reserve_satoshis ) * 1000 {
1381
1390
return Err ( ChannelError :: Close ( "Minimum htlc value is full channel value" ) ) ;
1382
1391
}
1383
- if msg. to_self_delay > MAX_LOCAL_BREAKDOWN_TIMEOUT {
1392
+ if msg. to_self_delay > config . peer_channel_config_limits . their_to_self_delay || msg . to_self_delay > MAX_LOCAL_BREAKDOWN_TIMEOUT {
1384
1393
return Err ( ChannelError :: Close ( "They wanted our payments to be delayed by a needlessly long period" ) ) ;
1385
1394
}
1386
1395
if msg. max_accepted_htlcs < 1 {
@@ -3064,7 +3073,7 @@ impl Channel {
3064
3073
channel_reserve_satoshis : Channel :: get_our_channel_reserve_satoshis ( self . channel_value_satoshis ) ,
3065
3074
htlc_minimum_msat : self . our_htlc_minimum_msat ,
3066
3075
feerate_per_kw : fee_estimator. get_est_sat_per_1000_weight ( ConfirmationTarget :: Background ) as u32 ,
3067
- to_self_delay : BREAKDOWN_TIMEOUT ,
3076
+ to_self_delay : self . our_to_self_delay ,
3068
3077
max_accepted_htlcs : OUR_MAX_HTLCS ,
3069
3078
funding_pubkey : PublicKey :: from_secret_key ( & self . secp_ctx , & self . local_keys . funding_key ) ,
3070
3079
revocation_basepoint : PublicKey :: from_secret_key ( & self . secp_ctx , & self . local_keys . revocation_base_key ) ,
@@ -3097,7 +3106,7 @@ impl Channel {
3097
3106
channel_reserve_satoshis : Channel :: get_our_channel_reserve_satoshis ( self . channel_value_satoshis ) ,
3098
3107
htlc_minimum_msat : self . our_htlc_minimum_msat ,
3099
3108
minimum_depth : self . minimum_depth ,
3100
- to_self_delay : BREAKDOWN_TIMEOUT ,
3109
+ to_self_delay : self . our_to_self_delay ,
3101
3110
max_accepted_htlcs : OUR_MAX_HTLCS ,
3102
3111
funding_pubkey : PublicKey :: from_secret_key ( & self . secp_ctx , & self . local_keys . funding_key ) ,
3103
3112
revocation_basepoint : PublicKey :: from_secret_key ( & self . secp_ctx , & self . local_keys . revocation_base_key ) ,
@@ -3746,6 +3755,7 @@ impl Writeable for Channel {
3746
3755
self . their_htlc_minimum_msat . write ( writer) ?;
3747
3756
self . our_htlc_minimum_msat . write ( writer) ?;
3748
3757
self . their_to_self_delay . write ( writer) ?;
3758
+ self . our_to_self_delay . write ( writer) ?;
3749
3759
self . their_max_accepted_htlcs . write ( writer) ?;
3750
3760
self . minimum_depth . write ( writer) ?;
3751
3761
@@ -3907,6 +3917,7 @@ impl<R : ::std::io::Read> ReadableArgs<R, Arc<Logger>> for Channel {
3907
3917
let their_htlc_minimum_msat = Readable :: read ( reader) ?;
3908
3918
let our_htlc_minimum_msat = Readable :: read ( reader) ?;
3909
3919
let their_to_self_delay = Readable :: read ( reader) ?;
3920
+ let our_to_self_delay = Readable :: read ( reader) ?;
3910
3921
let their_max_accepted_htlcs = Readable :: read ( reader) ?;
3911
3922
let minimum_depth = Readable :: read ( reader) ?;
3912
3923
@@ -3984,6 +3995,7 @@ impl<R : ::std::io::Read> ReadableArgs<R, Arc<Logger>> for Channel {
3984
3995
their_htlc_minimum_msat,
3985
3996
our_htlc_minimum_msat,
3986
3997
their_to_self_delay,
3998
+ our_to_self_delay,
3987
3999
their_max_accepted_htlcs,
3988
4000
minimum_depth,
3989
4001
0 commit comments