@@ -173,6 +173,7 @@ struct LatestMonitorState {
173173	/// A set of (monitor id, serialized `ChannelMonitor`)s which we're currently "persisting", 
174174 	/// from LDK's perspective. 
175175 	pending_monitors :  Vec < ( u64 ,  Vec < u8 > ) > , 
176+ 	funding_txo :  OutPoint , 
176177} 
177178
178179struct  TestChainMonitor  { 
@@ -189,7 +190,7 @@ struct TestChainMonitor {
189190			Arc < TestPersister > , 
190191		> , 
191192	> , 
192- 	pub  latest_monitors :  Mutex < HashMap < OutPoint ,  LatestMonitorState > > , 
193+ 	pub  latest_monitors :  Mutex < HashMap < ChannelId ,  LatestMonitorState > > , 
193194} 
194195impl  TestChainMonitor  { 
195196	pub  fn  new ( 
@@ -213,35 +214,37 @@ impl TestChainMonitor {
213214} 
214215impl  chain:: Watch < TestChannelSigner >  for  TestChainMonitor  { 
215216	fn  watch_channel ( 
216- 		& self ,  funding_txo :   OutPoint ,  monitor :  channelmonitor:: ChannelMonitor < TestChannelSigner > , 
217+ 		& self ,  channel_id :   ChannelId ,  monitor :  channelmonitor:: ChannelMonitor < TestChannelSigner > , 
217218	)  -> Result < chain:: ChannelMonitorUpdateStatus ,  ( ) >  { 
218219		let  mut  ser = VecWriter ( Vec :: new ( ) ) ; 
219220		monitor. write ( & mut  ser) . unwrap ( ) ; 
220221		let  monitor_id = monitor. get_latest_update_id ( ) ; 
221- 		let  res = self . chain_monitor . watch_channel ( funding_txo,  monitor) ; 
222+ 		let  funding_txo = monitor. get_funding_txo ( ) . 0 ; 
223+ 		let  res = self . chain_monitor . watch_channel ( channel_id,  monitor) ; 
222224		let  state = match  res { 
223225			Ok ( chain:: ChannelMonitorUpdateStatus :: Completed )  => LatestMonitorState  { 
224226				persisted_monitor_id :  monitor_id, 
225227				persisted_monitor :  ser. 0 , 
226228				pending_monitors :  Vec :: new ( ) , 
229+ 				funding_txo, 
227230			} , 
228231			Ok ( chain:: ChannelMonitorUpdateStatus :: InProgress )  => { 
229232				panic ! ( "The test currently doesn't test initial-persistence via the async pipeline" ) 
230233			} , 
231234			Ok ( chain:: ChannelMonitorUpdateStatus :: UnrecoverableError )  => panic ! ( ) , 
232235			Err ( ( ) )  => panic ! ( ) , 
233236		} ; 
234- 		if  self . latest_monitors . lock ( ) . unwrap ( ) . insert ( funding_txo ,  state) . is_some ( )  { 
237+ 		if  self . latest_monitors . lock ( ) . unwrap ( ) . insert ( channel_id ,  state) . is_some ( )  { 
235238			panic ! ( "Already had monitor pre-watch_channel" ) ; 
236239		} 
237240		res
238241	} 
239242
240243	fn  update_channel ( 
241- 		& self ,  funding_txo :   OutPoint ,  update :  & channelmonitor:: ChannelMonitorUpdate , 
244+ 		& self ,  channel_id :   ChannelId ,  update :  & channelmonitor:: ChannelMonitorUpdate , 
242245	)  -> chain:: ChannelMonitorUpdateStatus  { 
243246		let  mut  map_lock = self . latest_monitors . lock ( ) . unwrap ( ) ; 
244- 		let  map_entry = map_lock. get_mut ( & funding_txo ) . expect ( "Didn't have monitor on update call" ) ; 
247+ 		let  map_entry = map_lock. get_mut ( & channel_id ) . expect ( "Didn't have monitor on update call" ) ; 
245248		let  latest_monitor_data = map_entry
246249			. pending_monitors 
247250			. last ( ) 
@@ -265,7 +268,7 @@ impl chain::Watch<TestChannelSigner> for TestChainMonitor {
265268			. unwrap ( ) ; 
266269		let  mut  ser = VecWriter ( Vec :: new ( ) ) ; 
267270		deserialized_monitor. write ( & mut  ser) . unwrap ( ) ; 
268- 		let  res = self . chain_monitor . update_channel ( funding_txo ,  update) ; 
271+ 		let  res = self . chain_monitor . update_channel ( channel_id ,  update) ; 
269272		match  res { 
270273			chain:: ChannelMonitorUpdateStatus :: Completed  => { 
271274				map_entry. persisted_monitor_id  = update. update_id ; 
@@ -711,9 +714,9 @@ pub fn do_test<Out: Output>(data: &[u8], underlying_out: Out, anchors: bool) {
711714
712715			let  mut  monitors = new_hash_map( ) ; 
713716			let  mut  old_monitors = $old_monitors. latest_monitors. lock( ) . unwrap( ) ; 
714- 			for  ( outpoint ,  mut  prev_state)  in old_monitors. drain( )  { 
717+ 			for  ( channel_id ,  mut  prev_state)  in old_monitors. drain( )  { 
715718				monitors. insert( 
716- 					outpoint , 
719+ 					prev_state . funding_txo , 
717720					<( BlockHash ,  ChannelMonitor <TestChannelSigner >) >:: read( 
718721						& mut  Cursor :: new( & prev_state. persisted_monitor) , 
719722						( & * $keys_manager,  & * $keys_manager) , 
@@ -725,7 +728,7 @@ pub fn do_test<Out: Output>(data: &[u8], underlying_out: Out, anchors: bool) {
725728				// considering them discarded. LDK should replay these for us as they're stored in 
726729				// the `ChannelManager`. 
727730				prev_state. pending_monitors. clear( ) ; 
728- 				chain_monitor. latest_monitors. lock( ) . unwrap( ) . insert( outpoint ,  prev_state) ; 
731+ 				chain_monitor. latest_monitors. lock( ) . unwrap( ) . insert( channel_id ,  prev_state) ; 
729732			} 
730733			let  mut  monitor_refs = new_hash_map( ) ; 
731734			for  ( outpoint,  monitor)  in monitors. iter( )  { 
@@ -752,9 +755,9 @@ pub fn do_test<Out: Output>(data: &[u8], underlying_out: Out, anchors: bool) {
752755					. 1 , 
753756				chain_monitor. clone( ) , 
754757			) ; 
755- 			for  ( funding_txo ,  mon)  in monitors. drain( )  { 
758+ 			for  ( _ ,  mon)  in monitors. drain( )  { 
756759				assert_eq!( 
757- 					chain_monitor. chain_monitor. watch_channel( funding_txo ,  mon) , 
760+ 					chain_monitor. chain_monitor. watch_channel( mon . channel_id ( ) ,  mon) , 
758761					Ok ( ChannelMonitorUpdateStatus :: Completed ) 
759762				) ; 
760763			} 
@@ -825,7 +828,6 @@ pub fn do_test<Out: Output>(data: &[u8], underlying_out: Out, anchors: bool) {
825828			} ; 
826829
827830			$source. handle_accept_channel( $dest. get_our_node_id( ) ,  & accept_channel) ; 
828- 			let  funding_output; 
829831			{ 
830832				let  mut  events = $source. get_and_clear_pending_events( ) ; 
831833				assert_eq!( events. len( ) ,  1 ) ; 
@@ -845,7 +847,6 @@ pub fn do_test<Out: Output>(data: &[u8], underlying_out: Out, anchors: bool) {
845847							script_pubkey:  output_script, 
846848						} ] , 
847849					} ; 
848- 					funding_output = OutPoint  {  txid:  tx. compute_txid( ) ,  index:  0  } ; 
849850					$source
850851						. funding_transaction_generated( 
851852							temporary_channel_id, 
@@ -890,13 +891,19 @@ pub fn do_test<Out: Output>(data: &[u8], underlying_out: Out, anchors: bool) {
890891			$source. handle_funding_signed( $dest. get_our_node_id( ) ,  & funding_signed) ; 
891892			let  events = $source. get_and_clear_pending_events( ) ; 
892893			assert_eq!( events. len( ) ,  1 ) ; 
893- 			if  let  events:: Event :: ChannelPending  {  ref counterparty_node_id,  .. }  = events[ 0 ]  { 
894+ 			let  channel_id = if  let  events:: Event :: ChannelPending  { 
895+ 				ref counterparty_node_id, 
896+ 				ref channel_id, 
897+ 				..
898+ 			}  = events[ 0 ] 
899+ 			{ 
894900				assert_eq!( counterparty_node_id,  & $dest. get_our_node_id( ) ) ; 
901+ 				channel_id. clone( ) 
895902			}  else { 
896903				panic!( "Wrong event type" ) ; 
897- 			} 
904+ 			} ; 
898905
899- 			funding_output 
906+ 			channel_id 
900907		} } ; 
901908	} 
902909
@@ -963,8 +970,8 @@ pub fn do_test<Out: Output>(data: &[u8], underlying_out: Out, anchors: bool) {
963970
964971	let  mut  nodes = [ node_a,  node_b,  node_c] ; 
965972
966- 	let  chan_1_funding  = make_channel ! ( nodes[ 0 ] ,  nodes[ 1 ] ,  keys_manager_b,  0 ) ; 
967- 	let  chan_2_funding  = make_channel ! ( nodes[ 1 ] ,  nodes[ 2 ] ,  keys_manager_c,  1 ) ; 
973+ 	let  chan_1_id  = make_channel ! ( nodes[ 0 ] ,  nodes[ 1 ] ,  keys_manager_b,  0 ) ; 
974+ 	let  chan_2_id  = make_channel ! ( nodes[ 1 ] ,  nodes[ 2 ] ,  keys_manager_c,  1 ) ; 
968975
969976	for  node in  nodes. iter ( )  { 
970977		confirm_txn ! ( node) ; 
@@ -1363,14 +1370,14 @@ pub fn do_test<Out: Output>(data: &[u8], underlying_out: Out, anchors: bool) {
13631370				} 
13641371			} ; 
13651372
1366- 		let  complete_all_monitor_updates = |monitor :  & Arc < TestChainMonitor > ,  chan_funding | { 
1367- 			if  let  Some ( state)  = monitor. latest_monitors . lock ( ) . unwrap ( ) . get_mut ( chan_funding )  { 
1373+ 		let  complete_all_monitor_updates = |monitor :  & Arc < TestChainMonitor > ,  chan_id | { 
1374+ 			if  let  Some ( state)  = monitor. latest_monitors . lock ( ) . unwrap ( ) . get_mut ( chan_id )  { 
13681375				assert ! ( 
13691376					state. pending_monitors. windows( 2 ) . all( |pair| pair[ 0 ] . 0  < pair[ 1 ] . 0 ) , 
13701377					"updates should be sorted by id" 
13711378				) ; 
13721379				for  ( id,  data)  in  state. pending_monitors . drain ( ..)  { 
1373- 					monitor. chain_monitor . channel_monitor_updated ( * chan_funding ,  id) . unwrap ( ) ; 
1380+ 					monitor. chain_monitor . channel_monitor_updated ( * chan_id ,  id) . unwrap ( ) ; 
13741381					if  id > state. persisted_monitor_id  { 
13751382						state. persisted_monitor_id  = id; 
13761383						state. persisted_monitor  = data; 
@@ -1410,10 +1417,10 @@ pub fn do_test<Out: Output>(data: &[u8], underlying_out: Out, anchors: bool) {
14101417					ChannelMonitorUpdateStatus :: Completed 
14111418			} , 
14121419
1413- 			0x08  => complete_all_monitor_updates ( & monitor_a,  & chan_1_funding ) , 
1414- 			0x09  => complete_all_monitor_updates ( & monitor_b,  & chan_1_funding ) , 
1415- 			0x0a  => complete_all_monitor_updates ( & monitor_b,  & chan_2_funding ) , 
1416- 			0x0b  => complete_all_monitor_updates ( & monitor_c,  & chan_2_funding ) , 
1420+ 			0x08  => complete_all_monitor_updates ( & monitor_a,  & chan_1_id ) , 
1421+ 			0x09  => complete_all_monitor_updates ( & monitor_b,  & chan_1_id ) , 
1422+ 			0x0a  => complete_all_monitor_updates ( & monitor_b,  & chan_2_id ) , 
1423+ 			0x0b  => complete_all_monitor_updates ( & monitor_c,  & chan_2_id ) , 
14171424
14181425			0x0c  => { 
14191426				if  !chan_a_disconnected { 
@@ -1683,21 +1690,21 @@ pub fn do_test<Out: Output>(data: &[u8], underlying_out: Out, anchors: bool) {
16831690				nodes[ 2 ] . maybe_update_chan_fees ( ) ; 
16841691			} , 
16851692
1686- 			0xf0  => complete_monitor_update ( & monitor_a,  & chan_1_funding ,  & complete_first) , 
1687- 			0xf1  => complete_monitor_update ( & monitor_a,  & chan_1_funding ,  & complete_second) , 
1688- 			0xf2  => complete_monitor_update ( & monitor_a,  & chan_1_funding ,  & Vec :: pop) , 
1693+ 			0xf0  => complete_monitor_update ( & monitor_a,  & chan_1_id ,  & complete_first) , 
1694+ 			0xf1  => complete_monitor_update ( & monitor_a,  & chan_1_id ,  & complete_second) , 
1695+ 			0xf2  => complete_monitor_update ( & monitor_a,  & chan_1_id ,  & Vec :: pop) , 
16891696
1690- 			0xf4  => complete_monitor_update ( & monitor_b,  & chan_1_funding ,  & complete_first) , 
1691- 			0xf5  => complete_monitor_update ( & monitor_b,  & chan_1_funding ,  & complete_second) , 
1692- 			0xf6  => complete_monitor_update ( & monitor_b,  & chan_1_funding ,  & Vec :: pop) , 
1697+ 			0xf4  => complete_monitor_update ( & monitor_b,  & chan_1_id ,  & complete_first) , 
1698+ 			0xf5  => complete_monitor_update ( & monitor_b,  & chan_1_id ,  & complete_second) , 
1699+ 			0xf6  => complete_monitor_update ( & monitor_b,  & chan_1_id ,  & Vec :: pop) , 
16931700
1694- 			0xf8  => complete_monitor_update ( & monitor_b,  & chan_2_funding ,  & complete_first) , 
1695- 			0xf9  => complete_monitor_update ( & monitor_b,  & chan_2_funding ,  & complete_second) , 
1696- 			0xfa  => complete_monitor_update ( & monitor_b,  & chan_2_funding ,  & Vec :: pop) , 
1701+ 			0xf8  => complete_monitor_update ( & monitor_b,  & chan_2_id ,  & complete_first) , 
1702+ 			0xf9  => complete_monitor_update ( & monitor_b,  & chan_2_id ,  & complete_second) , 
1703+ 			0xfa  => complete_monitor_update ( & monitor_b,  & chan_2_id ,  & Vec :: pop) , 
16971704
1698- 			0xfc  => complete_monitor_update ( & monitor_c,  & chan_2_funding ,  & complete_first) , 
1699- 			0xfd  => complete_monitor_update ( & monitor_c,  & chan_2_funding ,  & complete_second) , 
1700- 			0xfe  => complete_monitor_update ( & monitor_c,  & chan_2_funding ,  & Vec :: pop) , 
1705+ 			0xfc  => complete_monitor_update ( & monitor_c,  & chan_2_id ,  & complete_first) , 
1706+ 			0xfd  => complete_monitor_update ( & monitor_c,  & chan_2_id ,  & complete_second) , 
1707+ 			0xfe  => complete_monitor_update ( & monitor_c,  & chan_2_id ,  & Vec :: pop) , 
17011708
17021709			0xff  => { 
17031710				// Test that no channel is in a stuck state where neither party can send funds even 
@@ -1711,10 +1718,10 @@ pub fn do_test<Out: Output>(data: &[u8], underlying_out: Out, anchors: bool) {
17111718				* monitor_c. persister . update_ret . lock ( ) . unwrap ( )  =
17121719					ChannelMonitorUpdateStatus :: Completed ; 
17131720
1714- 				complete_all_monitor_updates ( & monitor_a,  & chan_1_funding ) ; 
1715- 				complete_all_monitor_updates ( & monitor_b,  & chan_1_funding ) ; 
1716- 				complete_all_monitor_updates ( & monitor_b,  & chan_2_funding ) ; 
1717- 				complete_all_monitor_updates ( & monitor_c,  & chan_2_funding ) ; 
1721+ 				complete_all_monitor_updates ( & monitor_a,  & chan_1_id ) ; 
1722+ 				complete_all_monitor_updates ( & monitor_b,  & chan_1_id ) ; 
1723+ 				complete_all_monitor_updates ( & monitor_b,  & chan_2_id ) ; 
1724+ 				complete_all_monitor_updates ( & monitor_c,  & chan_2_id ) ; 
17181725
17191726				// Next, make sure peers are all connected to each other 
17201727				if  chan_a_disconnected { 
0 commit comments