@@ -273,8 +273,14 @@ impl_writeable_tlv_based!(ChannelCounterparty, {
273273
274274/// Details of a channel, as returned by [`ChannelManager::list_channels`] and [`ChannelManager::list_usable_channels`] 
275275/// 
276+ /// Balances of a channel are available through [`ChainMonitor::get_claimable_balances`] and 
277+ /// [`ChannelMonitor::get_claimable_balances`], calculated with respect to the corresponding on-chain 
278+ /// transactions. 
279+ /// 
276280/// [`ChannelManager::list_channels`]: crate::ln::channelmanager::ChannelManager::list_channels 
277281/// [`ChannelManager::list_usable_channels`]: crate::ln::channelmanager::ChannelManager::list_usable_channels 
282+ /// [`ChainMonitor::get_claimable_balances`]: crate::chain::chainmonitor::ChainMonitor::get_claimable_balances 
283+ /// [`ChannelMonitor::get_claimable_balances`]: crate::chain::channelmonitor::ChannelMonitor::get_claimable_balances 
278284#[ derive( Clone ,  Debug ,  PartialEq ) ]  
279285pub  struct  ChannelDetails  { 
280286	/// The channel's ID (prior to funding transaction generation, this is a random 32 bytes, 
@@ -363,6 +369,7 @@ pub struct ChannelDetails {
363369/// This does not consider any on-chain fees. 
364370/// 
365371/// See also [`ChannelDetails::outbound_capacity_msat`] 
372+ #[ deprecated( since = "0.0.124" ,  note = "use [`ChainMonitor::get_claimable_balances`] instead" ) ]  
366373	pub  balance_msat :  u64 , 
367374	/// The available outbound capacity for sending HTLCs to the remote peer. This does not include 
368375/// any pending HTLCs which are not yet fully resolved (and, thus, whose balance is not 
@@ -495,6 +502,7 @@ impl ChannelDetails {
495502		let  balance = context. get_available_balances ( fee_estimator) ; 
496503		let  ( to_remote_reserve_satoshis,  to_self_reserve_satoshis)  =
497504			context. get_holder_counterparty_selected_channel_reserve_satoshis ( ) ; 
505+ 		#[ allow( deprecated) ]   // TODO: Remove once balance_msat is removed. 
498506		ChannelDetails  { 
499507			channel_id :  context. channel_id ( ) , 
500508			counterparty :  ChannelCounterparty  { 
@@ -561,38 +569,41 @@ impl Writeable for ChannelDetails {
561569		// versions prior to 0.0.113, the u128 is serialized as two separate u64 values. 
562570		let  user_channel_id_low = self . user_channel_id  as  u64 ; 
563571		let  user_channel_id_high_opt = Some ( ( self . user_channel_id  >> 64 )  as  u64 ) ; 
564- 		write_tlv_fields ! ( writer,  { 
565- 			( 1 ,  self . inbound_scid_alias,  option) , 
566- 			( 2 ,  self . channel_id,  required) , 
567- 			( 3 ,  self . channel_type,  option) , 
568- 			( 4 ,  self . counterparty,  required) , 
569- 			( 5 ,  self . outbound_scid_alias,  option) , 
570- 			( 6 ,  self . funding_txo,  option) , 
571- 			( 7 ,  self . config,  option) , 
572- 			( 8 ,  self . short_channel_id,  option) , 
573- 			( 9 ,  self . confirmations,  option) , 
574- 			( 10 ,  self . channel_value_satoshis,  required) , 
575- 			( 12 ,  self . unspendable_punishment_reserve,  option) , 
576- 			( 14 ,  user_channel_id_low,  required) , 
577- 			( 16 ,  self . balance_msat,  required) , 
578- 			( 18 ,  self . outbound_capacity_msat,  required) , 
579- 			( 19 ,  self . next_outbound_htlc_limit_msat,  required) , 
580- 			( 20 ,  self . inbound_capacity_msat,  required) , 
581- 			( 21 ,  self . next_outbound_htlc_minimum_msat,  required) , 
582- 			( 22 ,  self . confirmations_required,  option) , 
583- 			( 24 ,  self . force_close_spend_delay,  option) , 
584- 			( 26 ,  self . is_outbound,  required) , 
585- 			( 28 ,  self . is_channel_ready,  required) , 
586- 			( 30 ,  self . is_usable,  required) , 
587- 			( 32 ,  self . is_public,  required) , 
588- 			( 33 ,  self . inbound_htlc_minimum_msat,  option) , 
589- 			( 35 ,  self . inbound_htlc_maximum_msat,  option) , 
590- 			( 37 ,  user_channel_id_high_opt,  option) , 
591- 			( 39 ,  self . feerate_sat_per_1000_weight,  option) , 
592- 			( 41 ,  self . channel_shutdown_state,  option) , 
593- 			( 43 ,  self . pending_inbound_htlcs,  optional_vec) , 
594- 			( 45 ,  self . pending_outbound_htlcs,  optional_vec) , 
595- 		} ) ; 
572+ 		#[ allow( deprecated) ]   // TODO: Remove once balance_msat is removed. 
573+ 		{ 
574+ 			write_tlv_fields ! ( writer,  { 
575+ 				( 1 ,  self . inbound_scid_alias,  option) , 
576+ 				( 2 ,  self . channel_id,  required) , 
577+ 				( 3 ,  self . channel_type,  option) , 
578+ 				( 4 ,  self . counterparty,  required) , 
579+ 				( 5 ,  self . outbound_scid_alias,  option) , 
580+ 				( 6 ,  self . funding_txo,  option) , 
581+ 				( 7 ,  self . config,  option) , 
582+ 				( 8 ,  self . short_channel_id,  option) , 
583+ 				( 9 ,  self . confirmations,  option) , 
584+ 				( 10 ,  self . channel_value_satoshis,  required) , 
585+ 				( 12 ,  self . unspendable_punishment_reserve,  option) , 
586+ 				( 14 ,  user_channel_id_low,  required) , 
587+ 				( 16 ,  self . balance_msat,  required) , 
588+ 				( 18 ,  self . outbound_capacity_msat,  required) , 
589+ 				( 19 ,  self . next_outbound_htlc_limit_msat,  required) , 
590+ 				( 20 ,  self . inbound_capacity_msat,  required) , 
591+ 				( 21 ,  self . next_outbound_htlc_minimum_msat,  required) , 
592+ 				( 22 ,  self . confirmations_required,  option) , 
593+ 				( 24 ,  self . force_close_spend_delay,  option) , 
594+ 				( 26 ,  self . is_outbound,  required) , 
595+ 				( 28 ,  self . is_channel_ready,  required) , 
596+ 				( 30 ,  self . is_usable,  required) , 
597+ 				( 32 ,  self . is_public,  required) , 
598+ 				( 33 ,  self . inbound_htlc_minimum_msat,  option) , 
599+ 				( 35 ,  self . inbound_htlc_maximum_msat,  option) , 
600+ 				( 37 ,  user_channel_id_high_opt,  option) , 
601+ 				( 39 ,  self . feerate_sat_per_1000_weight,  option) , 
602+ 				( 41 ,  self . channel_shutdown_state,  option) , 
603+ 				( 43 ,  self . pending_inbound_htlcs,  optional_vec) , 
604+ 				( 45 ,  self . pending_outbound_htlcs,  optional_vec) , 
605+ 			} ) ; 
606+ 		} 
596607		Ok ( ( ) ) 
597608	} 
598609} 
@@ -640,6 +651,7 @@ impl Readable for ChannelDetails {
640651		let  user_channel_id = user_channel_id_low as  u128 
641652			+ ( ( user_channel_id_high_opt. unwrap_or ( 0  as  u64 )  as  u128 )  << 64 ) ; 
642653
654+ 		#[ allow( deprecated) ]   // TODO: Remove once balance_msat is removed. 
643655		Ok ( Self  { 
644656			inbound_scid_alias, 
645657			channel_id :  channel_id. 0 . unwrap ( ) , 
@@ -703,3 +715,93 @@ impl_writeable_tlv_based_enum!(ChannelShutdownState,
703715	( 6 ,  NegotiatingClosingFee )  => { } , 
704716	( 8 ,  ShutdownComplete )  => { } , 
705717) ; 
718+ 
719+ #[ cfg( test) ]  
720+ mod  tests { 
721+ 	use  bitcoin:: { hashes:: Hash  as  _,  secp256k1:: PublicKey } ; 
722+ 	use  lightning_types:: features:: Features ; 
723+ 	use  types:: payment:: PaymentHash ; 
724+ 
725+ 	use  crate :: { 
726+ 		chain:: transaction:: OutPoint , 
727+ 		ln:: { 
728+ 			channel_state:: { 
729+ 				InboundHTLCDetails ,  InboundHTLCStateDetails ,  OutboundHTLCDetails , 
730+ 				OutboundHTLCStateDetails , 
731+ 			} , 
732+ 			types:: ChannelId , 
733+ 		} , 
734+ 		util:: { 
735+ 			config:: ChannelConfig , 
736+ 			ser:: { Readable ,  Writeable } , 
737+ 		} , 
738+ 	} ; 
739+ 
740+ 	use  super :: { ChannelCounterparty ,  ChannelDetails ,  ChannelShutdownState } ; 
741+ 
742+ 	#[ test]  
743+ 	fn  test_channel_details_serialization ( )  { 
744+ 		#[ allow( deprecated) ]  
745+ 		let  channel_details = ChannelDetails  { 
746+ 			channel_id :  ChannelId :: new_zero ( ) , 
747+ 			counterparty :  ChannelCounterparty  { 
748+ 				features :  Features :: empty ( ) , 
749+ 				node_id :  PublicKey :: from_slice ( & [ 2 ;  33 ] ) . unwrap ( ) , 
750+ 				unspendable_punishment_reserve :  1983 , 
751+ 				forwarding_info :  None , 
752+ 				outbound_htlc_minimum_msat :  None , 
753+ 				outbound_htlc_maximum_msat :  None , 
754+ 			} , 
755+ 			funding_txo :  Some ( OutPoint  { 
756+ 				txid :  bitcoin:: Txid :: from_slice ( & [ 0 ;  32 ] ) . unwrap ( ) , 
757+ 				index :  1 , 
758+ 			} ) , 
759+ 			channel_type :  None , 
760+ 			short_channel_id :  None , 
761+ 			outbound_scid_alias :  None , 
762+ 			inbound_scid_alias :  None , 
763+ 			channel_value_satoshis :  50_100 , 
764+ 			user_channel_id :  ( u64:: MAX  as  u128 )  + 1 ,  // Gets us into the high bytes 
765+ 			balance_msat :  23_100 , 
766+ 			outbound_capacity_msat :  24_300 , 
767+ 			next_outbound_htlc_limit_msat :  20_000 , 
768+ 			next_outbound_htlc_minimum_msat :  132 , 
769+ 			inbound_capacity_msat :  42 , 
770+ 			unspendable_punishment_reserve :  Some ( 8273 ) , 
771+ 			confirmations_required :  Some ( 5 ) , 
772+ 			confirmations :  Some ( 73 ) , 
773+ 			force_close_spend_delay :  Some ( 10 ) , 
774+ 			is_outbound :  true , 
775+ 			is_channel_ready :  false , 
776+ 			is_usable :  true , 
777+ 			is_public :  false , 
778+ 			inbound_htlc_minimum_msat :  Some ( 98 ) , 
779+ 			inbound_htlc_maximum_msat :  Some ( 983274 ) , 
780+ 			config :  Some ( ChannelConfig :: default ( ) ) , 
781+ 			feerate_sat_per_1000_weight :  Some ( 212 ) , 
782+ 			channel_shutdown_state :  Some ( ChannelShutdownState :: NotShuttingDown ) , 
783+ 			pending_inbound_htlcs :  vec ! [ InboundHTLCDetails  { 
784+ 				htlc_id:  12 , 
785+ 				amount_msat:  333 , 
786+ 				cltv_expiry:  127 , 
787+ 				payment_hash:  PaymentHash ( [ 3 ;  32 ] ) , 
788+ 				state:  Some ( InboundHTLCStateDetails :: AwaitingRemoteRevokeToAdd ) , 
789+ 				is_dust:  true , 
790+ 			} ] , 
791+ 			pending_outbound_htlcs :  vec ! [ OutboundHTLCDetails  { 
792+ 				htlc_id:  Some ( 81 ) , 
793+ 				amount_msat:  5000 , 
794+ 				cltv_expiry:  129 , 
795+ 				payment_hash:  PaymentHash ( [ 4 ;  32 ] ) , 
796+ 				state:  Some ( OutboundHTLCStateDetails :: AwaitingRemoteRevokeToAdd ) , 
797+ 				skimmed_fee_msat:  Some ( 42 ) , 
798+ 				is_dust:  false , 
799+ 			} ] , 
800+ 		} ; 
801+ 		let  mut  buffer = Vec :: new ( ) ; 
802+ 		channel_details. write ( & mut  buffer) . unwrap ( ) ; 
803+ 		let  deser_channel_details = ChannelDetails :: read ( & mut  buffer. as_slice ( ) ) . unwrap ( ) ; 
804+ 
805+ 		assert_eq ! ( deser_channel_details,  channel_details) ; 
806+ 	} 
807+ } 
0 commit comments