@@ -21,6 +21,7 @@ use ln::channelmanager::{PendingForwardHTLCInfo, HTLCFailReason};
21
21
use ln:: chan_utils:: { TxCreationKeys , HTLCOutputInCommitment , HTLC_SUCCESS_TX_WEIGHT , HTLC_TIMEOUT_TX_WEIGHT } ;
22
22
use ln:: chan_utils;
23
23
use chain:: chaininterface:: { FeeEstimator , ConfirmationTarget } ;
24
+ use chain:: transaction:: OutPoint ;
24
25
use util:: { transaction_utils, rng} ;
25
26
use util:: sha2:: Sha256 ;
26
27
@@ -482,9 +483,9 @@ impl Channel {
482
483
let our_channel_monitor_claim_key_hash = Hash160 :: from_data ( & PublicKey :: from_secret_key ( & secp_ctx, & chan_keys. channel_monitor_claim_key ) . unwrap ( ) . serialize ( ) ) ;
483
484
let our_channel_monitor_claim_script = Builder :: new ( ) . push_opcode ( opcodes:: All :: OP_PUSHBYTES_0 ) . push_slice ( & our_channel_monitor_claim_key_hash[ ..] ) . into_script ( ) ;
484
485
let mut channel_monitor = ChannelMonitor :: new ( & chan_keys. revocation_base_key ,
485
- & PublicKey :: from_secret_key ( & secp_ctx, & chan_keys. delayed_payment_base_key ) . unwrap ( ) ,
486
- & chan_keys. htlc_base_key ,
487
- BREAKDOWN_TIMEOUT , our_channel_monitor_claim_script) ;
486
+ & PublicKey :: from_secret_key ( & secp_ctx, & chan_keys. delayed_payment_base_key ) . unwrap ( ) ,
487
+ & chan_keys. htlc_base_key ,
488
+ BREAKDOWN_TIMEOUT , our_channel_monitor_claim_script) ;
488
489
channel_monitor. set_their_htlc_base_key ( & msg. htlc_basepoint ) ;
489
490
channel_monitor. set_their_to_self_delay ( msg. to_self_delay ) ;
490
491
@@ -599,8 +600,8 @@ impl Channel {
599
600
let txins = {
600
601
let mut ins: Vec < TxIn > = Vec :: new ( ) ;
601
602
ins. push ( TxIn {
602
- prev_hash : self . channel_monitor . get_funding_txo ( ) . unwrap ( ) . 0 ,
603
- prev_index : self . channel_monitor . get_funding_txo ( ) . unwrap ( ) . 1 as u32 ,
603
+ prev_hash : self . channel_monitor . get_funding_txo ( ) . unwrap ( ) . txid ,
604
+ prev_index : self . channel_monitor . get_funding_txo ( ) . unwrap ( ) . index as u32 ,
604
605
script_sig : Script :: new ( ) ,
605
606
sequence : ( ( 0x80 as u32 ) << 8 * 3 ) | ( ( obscured_commitment_transaction_number >> 3 * 8 ) as u32 ) ,
606
607
witness : Vec :: new ( ) ,
@@ -733,8 +734,8 @@ impl Channel {
733
734
let txins = {
734
735
let mut ins: Vec < TxIn > = Vec :: new ( ) ;
735
736
ins. push ( TxIn {
736
- prev_hash : self . channel_monitor . get_funding_txo ( ) . unwrap ( ) . 0 ,
737
- prev_index : self . channel_monitor . get_funding_txo ( ) . unwrap ( ) . 1 as u32 ,
737
+ prev_hash : self . channel_monitor . get_funding_txo ( ) . unwrap ( ) . txid ,
738
+ prev_index : self . channel_monitor . get_funding_txo ( ) . unwrap ( ) . index as u32 ,
738
739
script_sig : Script :: new ( ) ,
739
740
sequence : 0xffffffff ,
740
741
witness : Vec :: new ( ) ,
@@ -1150,7 +1151,8 @@ impl Channel {
1150
1151
panic ! ( "Should not have advanced channel commitment tx numbers prior to funding_created" ) ;
1151
1152
}
1152
1153
1153
- self . channel_monitor . set_funding_info ( msg. funding_txid , msg. funding_output_index ) ;
1154
+ let funding_info = OutPoint :: new ( msg. funding_txid , msg. funding_output_index ) ;
1155
+ self . channel_monitor . set_funding_info ( funding_info) ;
1154
1156
1155
1157
let ( remote_initial_commitment_tx, our_signature) = match self . funding_created_signature ( & msg. signature ) {
1156
1158
Ok ( res) => res,
@@ -1165,7 +1167,7 @@ impl Channel {
1165
1167
self . channel_monitor . provide_latest_remote_commitment_tx_info ( & remote_initial_commitment_tx, Vec :: new ( ) ) ;
1166
1168
self . channel_state = ChannelState :: FundingSent as u32 ;
1167
1169
let funding_txo = self . channel_monitor . get_funding_txo ( ) . unwrap ( ) ;
1168
- self . channel_id = funding_txo. 0 . into_be ( ) ^ Uint256 :: from_u64 ( funding_txo . 1 as u64 ) . unwrap ( ) ; //TODO: or le?
1170
+ self . channel_id = funding_txo. to_channel_id ( ) ;
1169
1171
self . cur_remote_commitment_transaction_number -= 1 ;
1170
1172
self . cur_local_commitment_transaction_number -= 1 ;
1171
1173
@@ -1240,11 +1242,11 @@ impl Channel {
1240
1242
HTLCState :: AwaitingAnnouncedRemoteRevoke => { } ,
1241
1243
HTLCState :: LocalAnnounced => { if for_remote_update_check { continue ; } } ,
1242
1244
HTLCState :: Committed => { } ,
1243
- HTLCState :: RemoteRemoved => { if for_remote_update_check { continue ; } } ,
1244
- HTLCState :: AwaitingRemoteRevokeToRemove => { if for_remote_update_check { continue ; } } ,
1245
- HTLCState :: AwaitingRemovedRemoteRevoke => { if for_remote_update_check { continue ; } } ,
1246
- HTLCState :: LocalRemoved => { } ,
1247
- HTLCState :: LocalRemovedAwaitingCommitment => { if for_remote_update_check { continue ; } } ,
1245
+ HTLCState :: RemoteRemoved => { if for_remote_update_check { continue ; } } ,
1246
+ HTLCState :: AwaitingRemoteRevokeToRemove => { if for_remote_update_check { continue ; } } ,
1247
+ HTLCState :: AwaitingRemovedRemoteRevoke => { if for_remote_update_check { continue ; } } ,
1248
+ HTLCState :: LocalRemoved => { } ,
1249
+ HTLCState :: LocalRemovedAwaitingCommitment => { if for_remote_update_check { continue ; } } ,
1248
1250
}
1249
1251
if !htlc. outbound {
1250
1252
inbound_htlc_count += 1 ;
@@ -1823,7 +1825,7 @@ impl Channel {
1823
1825
1824
1826
/// Returns the funding_txo we either got from our peer, or were given by
1825
1827
/// get_outbound_funding_created.
1826
- pub fn get_funding_txo ( & self ) -> Option < ( Sha256dHash , u16 ) > {
1828
+ pub fn get_funding_txo ( & self ) -> Option < OutPoint > {
1827
1829
self . channel_monitor . get_funding_txo ( )
1828
1830
}
1829
1831
@@ -1920,17 +1922,17 @@ impl Channel {
1920
1922
}
1921
1923
if non_shutdown_state & !( ChannelState :: TheirFundingLocked as u32 ) == ChannelState :: FundingSent as u32 {
1922
1924
for ( ref tx, index_in_block) in txn_matched. iter ( ) . zip ( indexes_of_txn_matched) {
1923
- if tx. txid ( ) == self . channel_monitor . get_funding_txo ( ) . unwrap ( ) . 0 {
1924
- let txo_idx = self . channel_monitor . get_funding_txo ( ) . unwrap ( ) . 1 as usize ;
1925
+ if tx. txid ( ) == self . channel_monitor . get_funding_txo ( ) . unwrap ( ) . txid {
1926
+ let txo_idx = self . channel_monitor . get_funding_txo ( ) . unwrap ( ) . index as usize ;
1925
1927
if txo_idx >= tx. output . len ( ) || tx. output [ txo_idx] . script_pubkey != self . get_funding_redeemscript ( ) . to_v0_p2wsh ( ) ||
1926
1928
tx. output [ txo_idx] . value != self . channel_value_satoshis {
1927
1929
self . channel_state = ChannelState :: ShutdownComplete as u32 ;
1928
1930
self . channel_update_count += 1 ;
1929
1931
} else {
1930
1932
self . funding_tx_confirmations = 1 ;
1931
- self . short_channel_id = Some ( ( ( height as u64 ) << ( 5 * 8 ) ) |
1933
+ self . short_channel_id = Some ( ( ( height as u64 ) << ( 5 * 8 ) ) |
1932
1934
( ( * index_in_block as u64 ) << ( 2 * 8 ) ) |
1933
- ( ( self . channel_monitor . get_funding_txo ( ) . unwrap ( ) . 1 as u64 ) << ( 2 * 8 ) ) ) ;
1935
+ ( ( self . channel_monitor . get_funding_txo ( ) . unwrap ( ) . index as u64 ) << ( 2 * 8 ) ) ) ;
1934
1936
}
1935
1937
}
1936
1938
}
@@ -2043,7 +2045,7 @@ impl Channel {
2043
2045
/// or if called on an inbound channel.
2044
2046
/// Note that channel_id changes during this call!
2045
2047
/// Do NOT broadcast the funding transaction until after a successful funding_signed call!
2046
- pub fn get_outbound_funding_created ( & mut self , funding_txid : Sha256dHash , funding_output_index : u16 ) -> Result < ( msgs:: FundingCreated , ChannelMonitor ) , HandleError > {
2048
+ pub fn get_outbound_funding_created ( & mut self , funding_txo : OutPoint ) -> Result < ( msgs:: FundingCreated , ChannelMonitor ) , HandleError > {
2047
2049
if !self . channel_outbound {
2048
2050
panic ! ( "Tried to create outbound funding_created message on an inbound channel!" ) ;
2049
2051
}
@@ -2054,7 +2056,7 @@ impl Channel {
2054
2056
panic ! ( "Should not have advanced channel commitment tx numbers prior to funding_created" ) ;
2055
2057
}
2056
2058
2057
- self . channel_monitor . set_funding_info ( funding_txid , funding_output_index ) ;
2059
+ self . channel_monitor . set_funding_info ( funding_txo ) ;
2058
2060
2059
2061
let ( our_signature, commitment_tx) = match self . get_outbound_funding_created_signature ( ) {
2060
2062
Ok ( res) => res,
@@ -2070,13 +2072,13 @@ impl Channel {
2070
2072
self . channel_monitor . provide_latest_remote_commitment_tx_info ( & commitment_tx, Vec :: new ( ) ) ;
2071
2073
self . channel_state = ChannelState :: FundingCreated as u32 ;
2072
2074
let funding_txo = self . channel_monitor . get_funding_txo ( ) . unwrap ( ) ;
2073
- self . channel_id = funding_txo. 0 . into_be ( ) ^ Uint256 :: from_u64 ( funding_txo . 1 as u64 ) . unwrap ( ) ; //TODO: or le?
2075
+ self . channel_id = funding_txo. to_channel_id ( ) ;
2074
2076
self . cur_remote_commitment_transaction_number -= 1 ;
2075
2077
2076
2078
Ok ( ( msgs:: FundingCreated {
2077
2079
temporary_channel_id : temporary_channel_id,
2078
- funding_txid : funding_txid ,
2079
- funding_output_index : funding_output_index ,
2080
+ funding_txid : funding_txo . txid ,
2081
+ funding_output_index : funding_txo . index ,
2080
2082
signature : our_signature
2081
2083
} , self . channel_monitor . clone ( ) ) )
2082
2084
}
@@ -2330,6 +2332,7 @@ mod tests {
2330
2332
use ln:: channel:: { Channel , ChannelKeys , HTLCOutput , HTLCState , HTLCOutputInCommitment , TxCreationKeys } ;
2331
2333
use ln:: chan_utils;
2332
2334
use chain:: chaininterface:: { FeeEstimator , ConfirmationTarget } ;
2335
+ use chain:: transaction:: OutPoint ;
2333
2336
use secp256k1:: { Secp256k1 , Message , Signature } ;
2334
2337
use secp256k1:: key:: { SecretKey , PublicKey } ;
2335
2338
use crypto:: sha2:: Sha256 ;
@@ -2369,7 +2372,8 @@ mod tests {
2369
2372
chan. their_to_self_delay = 144 ;
2370
2373
chan. our_dust_limit_satoshis = 546 ;
2371
2374
2372
- chan. channel_monitor . set_funding_info ( Sha256dHash :: from_hex ( "8984484a580b825b9972d7adb15050b3ab624ccd731946b3eeddb92f4e7ef6be" ) . unwrap ( ) , 0 ) ;
2375
+ let funding_info = OutPoint :: new ( Sha256dHash :: from_hex ( "8984484a580b825b9972d7adb15050b3ab624ccd731946b3eeddb92f4e7ef6be" ) . unwrap ( ) , 0 ) ;
2376
+ chan. channel_monitor . set_funding_info ( funding_info) ;
2373
2377
2374
2378
chan. their_payment_basepoint = PublicKey :: from_secret_key ( & secp_ctx, & SecretKey :: from_slice ( & secp_ctx, & hex_bytes ( "4444444444444444444444444444444444444444444444444444444444444444" ) . unwrap ( ) [ ..] ) . unwrap ( ) ) . unwrap ( ) ;
2375
2379
assert_eq ! ( chan. their_payment_basepoint. serialize( ) [ ..] ,
@@ -2868,17 +2872,17 @@ mod tests {
2868
2872
2869
2873
seed[ 0 ..32 ] . clone_from_slice ( & hex_bytes ( "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF" ) . unwrap ( ) ) ;
2870
2874
assert_eq ! ( chan_utils:: build_commitment_secret( seed, 281474976710655 ) ,
2871
- hex_bytes( "7cc854b54e3e0dcdb010d7a3fee464a9687be6e8db3be6854c475621e007a5dc" ) . unwrap( ) [ ..] ) ;
2875
+ hex_bytes( "7cc854b54e3e0dcdb010d7a3fee464a9687be6e8db3be6854c475621e007a5dc" ) . unwrap( ) [ ..] ) ;
2872
2876
2873
2877
assert_eq ! ( chan_utils:: build_commitment_secret( seed, 0xaaaaaaaaaaa ) ,
2874
- hex_bytes( "56f4008fb007ca9acf0e15b054d5c9fd12ee06cea347914ddbaed70d1c13a528" ) . unwrap( ) [ ..] ) ;
2878
+ hex_bytes( "56f4008fb007ca9acf0e15b054d5c9fd12ee06cea347914ddbaed70d1c13a528" ) . unwrap( ) [ ..] ) ;
2875
2879
2876
2880
assert_eq ! ( chan_utils:: build_commitment_secret( seed, 0x555555555555 ) ,
2877
- hex_bytes( "9015daaeb06dba4ccc05b91b2f73bd54405f2be9f217fbacd3c5ac2e62327d31" ) . unwrap( ) [ ..] ) ;
2881
+ hex_bytes( "9015daaeb06dba4ccc05b91b2f73bd54405f2be9f217fbacd3c5ac2e62327d31" ) . unwrap( ) [ ..] ) ;
2878
2882
2879
2883
seed[ 0 ..32 ] . clone_from_slice ( & hex_bytes ( "0101010101010101010101010101010101010101010101010101010101010101" ) . unwrap ( ) ) ;
2880
2884
assert_eq ! ( chan_utils:: build_commitment_secret( seed, 1 ) ,
2881
- hex_bytes( "915c75942a26bb3a433a8ce2cb0427c29ec6c1775cfc78328b57f6ba7bfeaa9c" ) . unwrap( ) [ ..] ) ;
2885
+ hex_bytes( "915c75942a26bb3a433a8ce2cb0427c29ec6c1775cfc78328b57f6ba7bfeaa9c" ) . unwrap( ) [ ..] ) ;
2882
2886
}
2883
2887
2884
2888
#[ test]
0 commit comments