@@ -594,33 +594,27 @@ impl Writeable for Channel {
594594 . collect ( ) ,
595595 } ;
596596 write_tlv_fields ! ( writer, {
597- ( 1 , self . max_htlc_value_in_flight_msat, required) ,
598- ( 3 , self . max_accepted_htlcs, required) ,
599- ( 5 , self . outgoing_reputation, required) ,
600- ( 7 , self . incoming_revenue, required) ,
601- ( 9 , general_bucket_data, required) ,
602- ( 11 , self . last_congestion_misuse, required) ,
597+ ( 1 , self . outgoing_reputation, required) ,
598+ ( 3 , self . incoming_revenue, required) ,
599+ ( 5 , general_bucket_data, required) ,
600+ ( 7 , self . last_congestion_misuse, required) ,
603601 } ) ;
604602 Ok ( ( ) )
605603 }
606604}
607605
608- impl < ES : EntropySource > ReadableArgs < ( & ResourceManagerConfig , & ES ) > for Channel {
606+ impl < ES : EntropySource > ReadableArgs < ( u64 , u16 , & ResourceManagerConfig , & ES ) > for Channel {
609607 fn read < R : Read > (
610- reader : & mut R , args : ( & ResourceManagerConfig , & ES ) ,
608+ reader : & mut R , args : ( u64 , u16 , & ResourceManagerConfig , & ES ) ,
611609 ) -> Result < Self , DecodeError > {
612- let ( config, entropy_source) = args;
610+ let ( max_htlc_value_in_flight_msat , max_accepted_htlcs , config, entropy_source) = args;
613611 _init_and_read_len_prefixed_tlv_fields ! ( reader, {
614- ( 1 , max_htlc_value_in_flight_msat, required) ,
615- ( 3 , max_accepted_htlcs, required) ,
616- ( 5 , outgoing_reputation, required) ,
617- ( 7 , incoming_revenue, required) ,
618- ( 9 , general_bucket_data, required) ,
619- ( 11 , last_congestion_misuse, required) ,
612+ ( 1 , outgoing_reputation, required) ,
613+ ( 3 , incoming_revenue, required) ,
614+ ( 5 , general_bucket_data, required) ,
615+ ( 7 , last_congestion_misuse, required) ,
620616 } ) ;
621617
622- let max_htlc_value_in_flight_msat: u64 = max_htlc_value_in_flight_msat. 0 . unwrap ( ) ;
623- let max_accepted_htlcs: u16 = max_accepted_htlcs. 0 . unwrap ( ) ;
624618 let general_bucket_data: GeneralBucketData = general_bucket_data. 0 . unwrap ( ) ;
625619
626620 let alloc = bucket_allocations (
@@ -1001,13 +995,15 @@ impl Writeable for DefaultResourceManager {
1001995 }
1002996}
1003997
1004- impl < ES : EntropySource > ReadableArgs < ( ResourceManagerConfig , & ES ) > for DefaultResourceManager {
998+ impl < ES : EntropySource > ReadableArgs < ( ResourceManagerConfig , & ES , & HashMap < u64 , ( u64 , u16 ) > ) >
999+ for DefaultResourceManager
1000+ {
10051001 fn read < R : Read > (
1006- reader : & mut R , args : ( ResourceManagerConfig , & ES ) ,
1002+ reader : & mut R , args : ( ResourceManagerConfig , & ES , & HashMap < u64 , ( u64 , u16 ) > ) ,
10071003 ) -> Result < DefaultResourceManager , DecodeError > {
1008- let ( config, entropy_source) = args;
1004+ let ( config, entropy_source, channel_limits ) = args;
10091005 _init_and_read_len_prefixed_tlv_fields ! ( reader, {
1010- ( 1 , channels, ( required: ReadableArgs , ( & config, entropy_source) ) ) ,
1006+ ( 1 , channels, ( required: ReadableArgs , ( & config, entropy_source, channel_limits ) ) ) ,
10111007 } ) ;
10121008 let channels: HashMap < u64 , Channel > = channels. 0 . unwrap ( ) ;
10131009 Ok ( DefaultResourceManager {
@@ -1018,13 +1014,23 @@ impl<ES: EntropySource> ReadableArgs<(ResourceManagerConfig, &ES)> for DefaultRe
10181014 }
10191015}
10201016
1021- impl < ES : EntropySource > ReadableArgs < ( & ResourceManagerConfig , & ES ) > for HashMap < u64 , Channel > {
1022- fn read < R : Read > ( r : & mut R , args : ( & ResourceManagerConfig , & ES ) ) -> Result < Self , DecodeError > {
1017+ impl < ES : EntropySource > ReadableArgs < ( & ResourceManagerConfig , & ES , & HashMap < u64 , ( u64 , u16 ) > ) >
1018+ for HashMap < u64 , Channel >
1019+ {
1020+ fn read < R : Read > (
1021+ r : & mut R , args : ( & ResourceManagerConfig , & ES , & HashMap < u64 , ( u64 , u16 ) > ) ,
1022+ ) -> Result < Self , DecodeError > {
1023+ let ( config, entropy_source, channel_limits) = args;
10231024 let len: CollectionLength = Readable :: read ( r) ?;
10241025 let mut ret = new_hash_map ( ) ;
10251026 for _ in 0 ..len. 0 {
10261027 let k: u64 = Readable :: read ( r) ?;
1027- let v = Channel :: read ( r, args) ?;
1028+ let & ( max_htlc_value_in_flight_msat, max_accepted_htlcs) =
1029+ channel_limits. get ( & k) . ok_or ( DecodeError :: InvalidValue ) ?;
1030+ let v = Channel :: read (
1031+ r,
1032+ ( max_htlc_value_in_flight_msat, max_accepted_htlcs, config, entropy_source) ,
1033+ ) ?;
10281034 if ret. insert ( k, v) . is_some ( ) {
10291035 return Err ( DecodeError :: InvalidValue ) ;
10301036 }
@@ -2539,9 +2545,13 @@ mod tests {
25392545 . unwrap ( )
25402546 . clone ( ) ;
25412547
2548+ let mut channel_limits = crate :: prelude:: new_hash_map ( ) ;
2549+ channel_limits. insert ( INCOMING_SCID , ( 5_000_000_000u64 , 114u16 ) ) ;
2550+ channel_limits. insert ( OUTGOING_SCID , ( 5_000_000_000u64 , 114u16 ) ) ;
2551+
25422552 let deserialized_rm = DefaultResourceManager :: read (
25432553 & mut serialized_rm. as_slice ( ) ,
2544- ( ResourceManagerConfig :: default ( ) , & entropy_source) ,
2554+ ( ResourceManagerConfig :: default ( ) , & entropy_source, & channel_limits ) ,
25452555 )
25462556 . unwrap ( ) ;
25472557 let deserialized_channels = deserialized_rm. channels . lock ( ) . unwrap ( ) ;
0 commit comments