@@ -221,6 +221,7 @@ enum KeyStorage {
221
221
revocation_base_key : SecretKey ,
222
222
htlc_base_key : SecretKey ,
223
223
delayed_payment_base_key : SecretKey ,
224
+ payment_base_key : SecretKey ,
224
225
prev_latest_per_commitment_point : Option < PublicKey > ,
225
226
latest_per_commitment_point : Option < PublicKey > ,
226
227
} ,
@@ -340,7 +341,7 @@ impl PartialEq for ChannelMonitor {
340
341
}
341
342
342
343
impl ChannelMonitor {
343
- pub ( super ) fn new ( revocation_base_key : & SecretKey , delayed_payment_base_key : & SecretKey , htlc_base_key : & SecretKey , our_to_self_delay : u16 , destination_script : Script , logger : Arc < Logger > ) -> ChannelMonitor {
344
+ pub ( super ) fn new ( revocation_base_key : & SecretKey , delayed_payment_base_key : & SecretKey , htlc_base_key : & SecretKey , payment_base_key : & SecretKey , our_to_self_delay : u16 , destination_script : Script , logger : Arc < Logger > ) -> ChannelMonitor {
344
345
ChannelMonitor {
345
346
funding_txo : None ,
346
347
commitment_transaction_number_obscure_factor : 0 ,
@@ -349,6 +350,7 @@ impl ChannelMonitor {
349
350
revocation_base_key : revocation_base_key. clone ( ) ,
350
351
htlc_base_key : htlc_base_key. clone ( ) ,
351
352
delayed_payment_base_key : delayed_payment_base_key. clone ( ) ,
353
+ payment_base_key : payment_base_key. clone ( ) ,
352
354
prev_latest_per_commitment_point : None ,
353
355
latest_per_commitment_point : None ,
354
356
} ,
@@ -512,11 +514,12 @@ impl ChannelMonitor {
512
514
feerate_per_kw,
513
515
htlc_outputs,
514
516
} ) ;
515
- self . key_storage = if let KeyStorage :: PrivMode { ref revocation_base_key, ref htlc_base_key, ref delayed_payment_base_key, prev_latest_per_commitment_point : _ , ref latest_per_commitment_point } = self . key_storage {
517
+ self . key_storage = if let KeyStorage :: PrivMode { ref revocation_base_key, ref htlc_base_key, ref delayed_payment_base_key, ref payment_base_key , ref latest_per_commitment_point, .. } = self . key_storage {
516
518
KeyStorage :: PrivMode {
517
519
revocation_base_key : * revocation_base_key,
518
520
htlc_base_key : * htlc_base_key,
519
521
delayed_payment_base_key : * delayed_payment_base_key,
522
+ payment_base_key : * payment_base_key,
520
523
prev_latest_per_commitment_point : * latest_per_commitment_point,
521
524
latest_per_commitment_point : Some ( local_keys. per_commitment_point ) ,
522
525
}
@@ -642,11 +645,12 @@ impl ChannelMonitor {
642
645
U48 ( self . commitment_transaction_number_obscure_factor ) . write ( writer) ?;
643
646
644
647
match self . key_storage {
645
- KeyStorage :: PrivMode { ref revocation_base_key, ref htlc_base_key, ref delayed_payment_base_key, ref prev_latest_per_commitment_point, ref latest_per_commitment_point } => {
648
+ KeyStorage :: PrivMode { ref revocation_base_key, ref htlc_base_key, ref delayed_payment_base_key, ref payment_base_key , ref prev_latest_per_commitment_point, ref latest_per_commitment_point } => {
646
649
writer. write_all ( & [ 0 ; 1 ] ) ?;
647
650
writer. write_all ( & revocation_base_key[ ..] ) ?;
648
651
writer. write_all ( & htlc_base_key[ ..] ) ?;
649
652
writer. write_all ( & delayed_payment_base_key[ ..] ) ?;
653
+ writer. write_all ( & payment_base_key[ ..] ) ?;
650
654
if let Some ( ref prev_latest_per_commitment_point) = * prev_latest_per_commitment_point {
651
655
writer. write_all ( & [ 1 ; 1 ] ) ?;
652
656
writer. write_all ( & prev_latest_per_commitment_point. serialize ( ) ) ?;
@@ -911,7 +915,24 @@ impl ChannelMonitor {
911
915
htlc_idxs. push ( None ) ;
912
916
values. push ( outp. value ) ;
913
917
total_value += outp. value ;
914
- break ; // There can only be one of these
918
+ } else if outp. script_pubkey . is_v0_p2wpkh ( ) {
919
+ match self . key_storage {
920
+ KeyStorage :: PrivMode { ref payment_base_key, .. } => {
921
+ let per_commitment_point = PublicKey :: from_secret_key ( & self . secp_ctx , & per_commitment_key) ;
922
+ if let Ok ( local_key) = chan_utils:: derive_private_key ( & self . secp_ctx , & per_commitment_point, & payment_base_key) {
923
+ spendable_outputs. push ( SpendableOutputDescriptor :: DynamicOutput {
924
+ outpoint : BitcoinOutPoint { txid : commitment_txid, vout : idx as u32 } ,
925
+ key : local_key,
926
+ witness_script : None ,
927
+ to_self_delay : 0 ,
928
+ } ) ;
929
+ }
930
+ }
931
+ KeyStorage :: SigsMode { .. } => {
932
+ //TODO: we need to ensure an offline client will generate the event when it
933
+ // cames back online after only the watchtower saw the transaction
934
+ }
935
+ }
915
936
}
916
937
}
917
938
@@ -1049,6 +1070,28 @@ impl ChannelMonitor {
1049
1070
Some ( their_htlc_base_key) => ignore_error ! ( chan_utils:: derive_public_key( & self . secp_ctx, revocation_point, & their_htlc_base_key) ) ,
1050
1071
} ;
1051
1072
1073
+
1074
+ for ( idx, outp) in tx. output . iter ( ) . enumerate ( ) {
1075
+ if outp. script_pubkey . is_v0_p2wpkh ( ) {
1076
+ match self . key_storage {
1077
+ KeyStorage :: PrivMode { ref payment_base_key, .. } => {
1078
+ if let Ok ( local_key) = chan_utils:: derive_private_key ( & self . secp_ctx , & revocation_point, & payment_base_key) {
1079
+ spendable_outputs. push ( SpendableOutputDescriptor :: DynamicOutput {
1080
+ outpoint : BitcoinOutPoint { txid : commitment_txid, vout : idx as u32 } ,
1081
+ key : local_key,
1082
+ witness_script : None ,
1083
+ to_self_delay : 0 ,
1084
+ } ) ;
1085
+ }
1086
+ }
1087
+ KeyStorage :: SigsMode { .. } => {
1088
+ //TODO: we need to ensure an offline client will generate the event when it
1089
+ // cames back online after only the watchtower saw the transaction
1090
+ }
1091
+ }
1092
+ }
1093
+ }
1094
+
1052
1095
let mut total_value = 0 ;
1053
1096
let mut values = Vec :: new ( ) ;
1054
1097
let mut inputs = Vec :: new ( ) ;
@@ -1242,8 +1285,8 @@ impl ChannelMonitor {
1242
1285
if let Ok ( local_delayedkey) = chan_utils:: derive_private_key( & self . secp_ctx, per_commitment_point, delayed_payment_base_key) {
1243
1286
spendable_outputs. push( SpendableOutputDescriptor :: DynamicOutput {
1244
1287
outpoint: BitcoinOutPoint { txid: $father_tx. txid( ) , vout: $vout } ,
1245
- local_delayedkey,
1246
- witness_script: chan_utils:: get_revokeable_redeemscript( & local_tx. revocation_key, self . our_to_self_delay, & local_tx. delayed_payment_key) ,
1288
+ key : local_delayedkey,
1289
+ witness_script: Some ( chan_utils:: get_revokeable_redeemscript( & local_tx. revocation_key, self . our_to_self_delay, & local_tx. delayed_payment_key) ) ,
1247
1290
to_self_delay: self . our_to_self_delay
1248
1291
} ) ;
1249
1292
}
@@ -1309,7 +1352,7 @@ impl ChannelMonitor {
1309
1352
if let & Some ( ref local_tx) = & self . current_local_signed_commitment_tx {
1310
1353
if local_tx. txid == commitment_txid {
1311
1354
match self . key_storage {
1312
- KeyStorage :: PrivMode { revocation_base_key : _ , htlc_base_key : _ , ref delayed_payment_base_key, prev_latest_per_commitment_point : _ , ref latest_per_commitment_point } => {
1355
+ KeyStorage :: PrivMode { ref delayed_payment_base_key, ref latest_per_commitment_point, .. } => {
1313
1356
return self . broadcast_by_local_state ( local_tx, latest_per_commitment_point, & Some ( * delayed_payment_base_key) ) ;
1314
1357
} ,
1315
1358
KeyStorage :: SigsMode { .. } => {
@@ -1321,7 +1364,7 @@ impl ChannelMonitor {
1321
1364
if let & Some ( ref local_tx) = & self . prev_local_signed_commitment_tx {
1322
1365
if local_tx. txid == commitment_txid {
1323
1366
match self . key_storage {
1324
- KeyStorage :: PrivMode { revocation_base_key : _ , htlc_base_key : _ , ref delayed_payment_base_key, ref prev_latest_per_commitment_point, .. } => {
1367
+ KeyStorage :: PrivMode { ref delayed_payment_base_key, ref prev_latest_per_commitment_point, .. } => {
1325
1368
return self . broadcast_by_local_state ( local_tx, prev_latest_per_commitment_point, & Some ( * delayed_payment_base_key) ) ;
1326
1369
} ,
1327
1370
KeyStorage :: SigsMode { .. } => {
@@ -1393,7 +1436,7 @@ impl ChannelMonitor {
1393
1436
if self . would_broadcast_at_height ( height) {
1394
1437
broadcaster. broadcast_transaction ( & cur_local_tx. tx ) ;
1395
1438
match self . key_storage {
1396
- KeyStorage :: PrivMode { revocation_base_key : _ , htlc_base_key : _ , ref delayed_payment_base_key, prev_latest_per_commitment_point : _ , ref latest_per_commitment_point } => {
1439
+ KeyStorage :: PrivMode { ref delayed_payment_base_key, ref latest_per_commitment_point, .. } => {
1397
1440
let ( txs, mut outputs) = self . broadcast_by_local_state ( & cur_local_tx, latest_per_commitment_point, & Some ( * delayed_payment_base_key) ) ;
1398
1441
spendable_outputs. append ( & mut outputs) ;
1399
1442
for tx in txs {
@@ -1481,6 +1524,7 @@ impl<R: ::std::io::Read> ReadableArgs<R, Arc<Logger>> for (Sha256dHash, ChannelM
1481
1524
let revocation_base_key = Readable :: read ( reader) ?;
1482
1525
let htlc_base_key = Readable :: read ( reader) ?;
1483
1526
let delayed_payment_base_key = Readable :: read ( reader) ?;
1527
+ let payment_base_key = Readable :: read ( reader) ?;
1484
1528
let prev_latest_per_commitment_point = match <u8 as Readable < R > >:: read ( reader) ? {
1485
1529
0 => None ,
1486
1530
1 => Some ( Readable :: read ( reader) ?) ,
@@ -1495,6 +1539,7 @@ impl<R: ::std::io::Read> ReadableArgs<R, Arc<Logger>> for (Sha256dHash, ChannelM
1495
1539
revocation_base_key,
1496
1540
htlc_base_key,
1497
1541
delayed_payment_base_key,
1542
+ payment_base_key,
1498
1543
prev_latest_per_commitment_point,
1499
1544
latest_per_commitment_point,
1500
1545
}
@@ -1724,7 +1769,7 @@ mod tests {
1724
1769
1725
1770
{
1726
1771
// insert_secret correct sequence
1727
- monitor = ChannelMonitor :: new ( & SecretKey :: from_slice ( & secp_ctx, & [ 42 ; 32 ] ) . unwrap ( ) , & SecretKey :: from_slice ( & secp_ctx, & [ 43 ; 32 ] ) . unwrap ( ) , & SecretKey :: from_slice ( & secp_ctx, & [ 44 ; 32 ] ) . unwrap ( ) , 0 , Script :: new ( ) , logger. clone ( ) ) ;
1772
+ monitor = ChannelMonitor :: new ( & SecretKey :: from_slice ( & secp_ctx, & [ 42 ; 32 ] ) . unwrap ( ) , & SecretKey :: from_slice ( & secp_ctx, & [ 43 ; 32 ] ) . unwrap ( ) , & SecretKey :: from_slice ( & secp_ctx, & [ 44 ; 32 ] ) . unwrap ( ) , & SecretKey :: from_slice ( & secp_ctx , & [ 44 ; 32 ] ) . unwrap ( ) , 0 , Script :: new ( ) , logger. clone ( ) ) ;
1728
1773
secrets. clear ( ) ;
1729
1774
1730
1775
secrets. push ( [ 0 ; 32 ] ) ;
@@ -1770,7 +1815,7 @@ mod tests {
1770
1815
1771
1816
{
1772
1817
// insert_secret #1 incorrect
1773
- monitor = ChannelMonitor :: new ( & SecretKey :: from_slice ( & secp_ctx, & [ 42 ; 32 ] ) . unwrap ( ) , & SecretKey :: from_slice ( & secp_ctx, & [ 43 ; 32 ] ) . unwrap ( ) , & SecretKey :: from_slice ( & secp_ctx, & [ 44 ; 32 ] ) . unwrap ( ) , 0 , Script :: new ( ) , logger. clone ( ) ) ;
1818
+ monitor = ChannelMonitor :: new ( & SecretKey :: from_slice ( & secp_ctx, & [ 42 ; 32 ] ) . unwrap ( ) , & SecretKey :: from_slice ( & secp_ctx, & [ 43 ; 32 ] ) . unwrap ( ) , & SecretKey :: from_slice ( & secp_ctx, & [ 44 ; 32 ] ) . unwrap ( ) , & SecretKey :: from_slice ( & secp_ctx , & [ 44 ; 32 ] ) . unwrap ( ) , 0 , Script :: new ( ) , logger. clone ( ) ) ;
1774
1819
secrets. clear ( ) ;
1775
1820
1776
1821
secrets. push ( [ 0 ; 32 ] ) ;
@@ -1786,7 +1831,7 @@ mod tests {
1786
1831
1787
1832
{
1788
1833
// insert_secret #2 incorrect (#1 derived from incorrect)
1789
- monitor = ChannelMonitor :: new ( & SecretKey :: from_slice ( & secp_ctx, & [ 42 ; 32 ] ) . unwrap ( ) , & SecretKey :: from_slice ( & secp_ctx, & [ 43 ; 32 ] ) . unwrap ( ) , & SecretKey :: from_slice ( & secp_ctx, & [ 44 ; 32 ] ) . unwrap ( ) , 0 , Script :: new ( ) , logger. clone ( ) ) ;
1834
+ monitor = ChannelMonitor :: new ( & SecretKey :: from_slice ( & secp_ctx, & [ 42 ; 32 ] ) . unwrap ( ) , & SecretKey :: from_slice ( & secp_ctx, & [ 43 ; 32 ] ) . unwrap ( ) , & SecretKey :: from_slice ( & secp_ctx, & [ 44 ; 32 ] ) . unwrap ( ) , & SecretKey :: from_slice ( & secp_ctx , & [ 44 ; 32 ] ) . unwrap ( ) , 0 , Script :: new ( ) , logger. clone ( ) ) ;
1790
1835
secrets. clear ( ) ;
1791
1836
1792
1837
secrets. push ( [ 0 ; 32 ] ) ;
@@ -1812,7 +1857,7 @@ mod tests {
1812
1857
1813
1858
{
1814
1859
// insert_secret #3 incorrect
1815
- monitor = ChannelMonitor :: new ( & SecretKey :: from_slice ( & secp_ctx, & [ 42 ; 32 ] ) . unwrap ( ) , & SecretKey :: from_slice ( & secp_ctx, & [ 43 ; 32 ] ) . unwrap ( ) , & SecretKey :: from_slice ( & secp_ctx, & [ 44 ; 32 ] ) . unwrap ( ) , 0 , Script :: new ( ) , logger. clone ( ) ) ;
1860
+ monitor = ChannelMonitor :: new ( & SecretKey :: from_slice ( & secp_ctx, & [ 42 ; 32 ] ) . unwrap ( ) , & SecretKey :: from_slice ( & secp_ctx, & [ 43 ; 32 ] ) . unwrap ( ) , & SecretKey :: from_slice ( & secp_ctx, & [ 44 ; 32 ] ) . unwrap ( ) , & SecretKey :: from_slice ( & secp_ctx , & [ 44 ; 32 ] ) . unwrap ( ) , 0 , Script :: new ( ) , logger. clone ( ) ) ;
1816
1861
secrets. clear ( ) ;
1817
1862
1818
1863
secrets. push ( [ 0 ; 32 ] ) ;
@@ -1838,7 +1883,7 @@ mod tests {
1838
1883
1839
1884
{
1840
1885
// insert_secret #4 incorrect (1,2,3 derived from incorrect)
1841
- monitor = ChannelMonitor :: new ( & SecretKey :: from_slice ( & secp_ctx, & [ 42 ; 32 ] ) . unwrap ( ) , & SecretKey :: from_slice ( & secp_ctx, & [ 43 ; 32 ] ) . unwrap ( ) , & SecretKey :: from_slice ( & secp_ctx, & [ 44 ; 32 ] ) . unwrap ( ) , 0 , Script :: new ( ) , logger. clone ( ) ) ;
1886
+ monitor = ChannelMonitor :: new ( & SecretKey :: from_slice ( & secp_ctx, & [ 42 ; 32 ] ) . unwrap ( ) , & SecretKey :: from_slice ( & secp_ctx, & [ 43 ; 32 ] ) . unwrap ( ) , & SecretKey :: from_slice ( & secp_ctx, & [ 44 ; 32 ] ) . unwrap ( ) , & SecretKey :: from_slice ( & secp_ctx , & [ 44 ; 32 ] ) . unwrap ( ) , 0 , Script :: new ( ) , logger. clone ( ) ) ;
1842
1887
secrets. clear ( ) ;
1843
1888
1844
1889
secrets. push ( [ 0 ; 32 ] ) ;
@@ -1884,7 +1929,7 @@ mod tests {
1884
1929
1885
1930
{
1886
1931
// insert_secret #5 incorrect
1887
- monitor = ChannelMonitor :: new ( & SecretKey :: from_slice ( & secp_ctx, & [ 42 ; 32 ] ) . unwrap ( ) , & SecretKey :: from_slice ( & secp_ctx, & [ 43 ; 32 ] ) . unwrap ( ) , & SecretKey :: from_slice ( & secp_ctx, & [ 44 ; 32 ] ) . unwrap ( ) , 0 , Script :: new ( ) , logger. clone ( ) ) ;
1932
+ monitor = ChannelMonitor :: new ( & SecretKey :: from_slice ( & secp_ctx, & [ 42 ; 32 ] ) . unwrap ( ) , & SecretKey :: from_slice ( & secp_ctx, & [ 43 ; 32 ] ) . unwrap ( ) , & SecretKey :: from_slice ( & secp_ctx, & [ 44 ; 32 ] ) . unwrap ( ) , & SecretKey :: from_slice ( & secp_ctx , & [ 44 ; 32 ] ) . unwrap ( ) , 0 , Script :: new ( ) , logger. clone ( ) ) ;
1888
1933
secrets. clear ( ) ;
1889
1934
1890
1935
secrets. push ( [ 0 ; 32 ] ) ;
@@ -1920,7 +1965,7 @@ mod tests {
1920
1965
1921
1966
{
1922
1967
// insert_secret #6 incorrect (5 derived from incorrect)
1923
- monitor = ChannelMonitor :: new ( & SecretKey :: from_slice ( & secp_ctx, & [ 42 ; 32 ] ) . unwrap ( ) , & SecretKey :: from_slice ( & secp_ctx, & [ 43 ; 32 ] ) . unwrap ( ) , & SecretKey :: from_slice ( & secp_ctx, & [ 44 ; 32 ] ) . unwrap ( ) , 0 , Script :: new ( ) , logger. clone ( ) ) ;
1968
+ monitor = ChannelMonitor :: new ( & SecretKey :: from_slice ( & secp_ctx, & [ 42 ; 32 ] ) . unwrap ( ) , & SecretKey :: from_slice ( & secp_ctx, & [ 43 ; 32 ] ) . unwrap ( ) , & SecretKey :: from_slice ( & secp_ctx, & [ 44 ; 32 ] ) . unwrap ( ) , & SecretKey :: from_slice ( & secp_ctx , & [ 44 ; 32 ] ) . unwrap ( ) , 0 , Script :: new ( ) , logger. clone ( ) ) ;
1924
1969
secrets. clear ( ) ;
1925
1970
1926
1971
secrets. push ( [ 0 ; 32 ] ) ;
@@ -1966,7 +2011,7 @@ mod tests {
1966
2011
1967
2012
{
1968
2013
// insert_secret #7 incorrect
1969
- monitor = ChannelMonitor :: new ( & SecretKey :: from_slice ( & secp_ctx, & [ 42 ; 32 ] ) . unwrap ( ) , & SecretKey :: from_slice ( & secp_ctx, & [ 43 ; 32 ] ) . unwrap ( ) , & SecretKey :: from_slice ( & secp_ctx, & [ 44 ; 32 ] ) . unwrap ( ) , 0 , Script :: new ( ) , logger. clone ( ) ) ;
2014
+ monitor = ChannelMonitor :: new ( & SecretKey :: from_slice ( & secp_ctx, & [ 42 ; 32 ] ) . unwrap ( ) , & SecretKey :: from_slice ( & secp_ctx, & [ 43 ; 32 ] ) . unwrap ( ) , & SecretKey :: from_slice ( & secp_ctx, & [ 44 ; 32 ] ) . unwrap ( ) , & SecretKey :: from_slice ( & secp_ctx , & [ 44 ; 32 ] ) . unwrap ( ) , 0 , Script :: new ( ) , logger. clone ( ) ) ;
1970
2015
secrets. clear ( ) ;
1971
2016
1972
2017
secrets. push ( [ 0 ; 32 ] ) ;
@@ -2012,7 +2057,7 @@ mod tests {
2012
2057
2013
2058
{
2014
2059
// insert_secret #8 incorrect
2015
- monitor = ChannelMonitor :: new ( & SecretKey :: from_slice ( & secp_ctx, & [ 42 ; 32 ] ) . unwrap ( ) , & SecretKey :: from_slice ( & secp_ctx, & [ 43 ; 32 ] ) . unwrap ( ) , & SecretKey :: from_slice ( & secp_ctx, & [ 44 ; 32 ] ) . unwrap ( ) , 0 , Script :: new ( ) , logger. clone ( ) ) ;
2060
+ monitor = ChannelMonitor :: new ( & SecretKey :: from_slice ( & secp_ctx, & [ 42 ; 32 ] ) . unwrap ( ) , & SecretKey :: from_slice ( & secp_ctx, & [ 43 ; 32 ] ) . unwrap ( ) , & SecretKey :: from_slice ( & secp_ctx, & [ 44 ; 32 ] ) . unwrap ( ) , & SecretKey :: from_slice ( & secp_ctx , & [ 44 ; 32 ] ) . unwrap ( ) , 0 , Script :: new ( ) , logger. clone ( ) ) ;
2016
2061
secrets. clear ( ) ;
2017
2062
2018
2063
secrets. push ( [ 0 ; 32 ] ) ;
@@ -2131,7 +2176,7 @@ mod tests {
2131
2176
2132
2177
// Prune with one old state and a local commitment tx holding a few overlaps with the
2133
2178
// old state.
2134
- let mut monitor = ChannelMonitor :: new ( & SecretKey :: from_slice ( & secp_ctx, & [ 42 ; 32 ] ) . unwrap ( ) , & SecretKey :: from_slice ( & secp_ctx, & [ 43 ; 32 ] ) . unwrap ( ) , & SecretKey :: from_slice ( & secp_ctx, & [ 44 ; 32 ] ) . unwrap ( ) , 0 , Script :: new ( ) , logger. clone ( ) ) ;
2179
+ let mut monitor = ChannelMonitor :: new ( & SecretKey :: from_slice ( & secp_ctx, & [ 42 ; 32 ] ) . unwrap ( ) , & SecretKey :: from_slice ( & secp_ctx, & [ 43 ; 32 ] ) . unwrap ( ) , & SecretKey :: from_slice ( & secp_ctx, & [ 44 ; 32 ] ) . unwrap ( ) , & SecretKey :: from_slice ( & secp_ctx , & [ 44 ; 32 ] ) . unwrap ( ) , 0 , Script :: new ( ) , logger. clone ( ) ) ;
2135
2180
monitor. set_their_to_self_delay ( 10 ) ;
2136
2181
2137
2182
monitor. provide_latest_local_commitment_tx_info ( dummy_tx. clone ( ) , dummy_keys ! ( ) , 0 , preimages_to_local_htlcs ! ( preimages[ 0 ..10 ] ) ) ;
0 commit comments