@@ -21,14 +21,16 @@ use secp256k1;
21
21
22
22
use util:: byte_utils;
23
23
use util:: logger:: Logger ;
24
- use util:: ser:: Writeable ;
24
+ use util:: ser:: { Writeable , Writer , Readable } ;
25
25
26
26
use ln:: chan_utils;
27
27
use ln:: chan_utils:: { TxCreationKeys , HTLCOutputInCommitment , make_funding_redeemscript, ChannelPublicKeys } ;
28
28
use ln:: msgs;
29
29
30
30
use std:: sync:: Arc ;
31
31
use std:: sync:: atomic:: { AtomicUsize , Ordering } ;
32
+ use std:: io:: Error ;
33
+ use ln:: msgs:: DecodeError ;
32
34
33
35
/// When on-chain outputs are created by rust-lightning (which our counterparty is not able to
34
36
/// claim at any point in the future) an event is generated which you must track and be able to
@@ -214,7 +216,8 @@ impl InMemoryChannelKeys {
214
216
delayed_payment_base_key : SecretKey ,
215
217
htlc_base_key : SecretKey ,
216
218
commitment_seed : [ u8 ; 32 ] ,
217
- channel_value_satoshis : u64 ) -> InMemoryChannelKeys {
219
+ channel_value_satoshis : u64 ,
220
+ remote_channel_pubkeys : Option < ChannelPublicKeys > ) -> InMemoryChannelKeys {
218
221
let from_secret = |s : & SecretKey | PublicKey :: from_secret_key ( secp_ctx, s) ;
219
222
let local_keys = ChannelPublicKeys {
220
223
funding_pubkey : from_secret ( & funding_key) ,
@@ -231,7 +234,7 @@ impl InMemoryChannelKeys {
231
234
htlc_base_key,
232
235
commitment_seed,
233
236
channel_value_satoshis,
234
- remote_channel_pubkeys : None ,
237
+ remote_channel_pubkeys,
235
238
local_channel_pubkeys : local_keys
236
239
}
237
240
}
@@ -301,17 +304,47 @@ impl ChannelKeys for InMemoryChannelKeys {
301
304
}
302
305
}
303
306
304
- impl_writeable ! ( InMemoryChannelKeys , 0 , {
305
- funding_key,
306
- revocation_base_key,
307
- payment_base_key,
308
- delayed_payment_base_key,
309
- htlc_base_key,
310
- commitment_seed,
311
- local_channel_pubkeys,
312
- remote_channel_pubkeys,
313
- channel_value_satoshis
314
- } ) ;
307
+ impl Writeable for InMemoryChannelKeys {
308
+ fn write < W : Writer > ( & self , writer : & mut W ) -> Result < ( ) , Error > {
309
+ self . funding_key . write ( writer) ?;
310
+ self . revocation_base_key . write ( writer) ?;
311
+ self . payment_base_key . write ( writer) ?;
312
+ self . delayed_payment_base_key . write ( writer) ?;
313
+ self . htlc_base_key . write ( writer) ?;
314
+ self . commitment_seed . write ( writer) ?;
315
+ self . remote_channel_pubkeys . write ( writer) ?;
316
+ self . channel_value_satoshis . write ( writer) ?;
317
+
318
+ Ok ( ( ) )
319
+ }
320
+ }
321
+
322
+ impl < R : :: std:: io:: Read > Readable < R > for InMemoryChannelKeys {
323
+ fn read ( reader : & mut R ) -> Result < Self , DecodeError > {
324
+ let funding_key = Readable :: read ( reader) ?;
325
+ let revocation_base_key = Readable :: read ( reader) ?;
326
+ let payment_base_key = Readable :: read ( reader) ?;
327
+ let delayed_payment_base_key = Readable :: read ( reader) ?;
328
+ let htlc_base_key = Readable :: read ( reader) ?;
329
+ let commitment_seed = Readable :: read ( reader) ?;
330
+ let remote_channel_pubkeys = Readable :: read ( reader) ?;
331
+ let channel_value_satoshis = Readable :: read ( reader) ?;
332
+ let secp_ctx = Secp256k1 :: signing_only ( ) ;
333
+
334
+
335
+ Ok ( InMemoryChannelKeys :: new (
336
+ & secp_ctx,
337
+ funding_key,
338
+ revocation_base_key,
339
+ payment_base_key,
340
+ delayed_payment_base_key,
341
+ htlc_base_key,
342
+ commitment_seed,
343
+ channel_value_satoshis,
344
+ remote_channel_pubkeys
345
+ ) )
346
+ }
347
+ }
315
348
316
349
/// Simple KeysInterface implementor that takes a 32-byte seed for use as a BIP 32 extended key
317
350
/// and derives keys from that.
@@ -461,6 +494,7 @@ impl KeysInterface for KeysManager {
461
494
htlc_base_key,
462
495
commitment_seed,
463
496
channel_value_satoshis,
497
+ None ,
464
498
)
465
499
}
466
500
0 commit comments