@@ -2,7 +2,6 @@ use secp256k1::key::PublicKey;
2
2
use secp256k1:: { Secp256k1 , Signature } ;
3
3
use secp256k1;
4
4
use bitcoin:: util:: hash:: Sha256dHash ;
5
- use bitcoin:: network:: serialize:: serialize;
6
5
use bitcoin:: blockdata:: script:: Script ;
7
6
8
7
use std:: error:: Error ;
@@ -13,19 +12,6 @@ use std::result::Result;
13
12
use util:: { byte_utils, internal_traits, events} ;
14
13
use util:: ser:: { Readable , Writeable , Writer } ;
15
14
16
- pub trait MsgEncodable {
17
- fn encode ( & self ) -> Vec < u8 > ;
18
- #[ inline]
19
- fn encoded_len ( & self ) -> usize { self . encode ( ) . len ( ) }
20
- #[ inline]
21
- fn encode_with_len ( & self ) -> Vec < u8 > {
22
- let enc = self . encode ( ) ;
23
- let mut res = Vec :: with_capacity ( enc. len ( ) + 2 ) ;
24
- res. extend_from_slice ( & byte_utils:: be16_to_array ( enc. len ( ) as u16 ) ) ;
25
- res. extend_from_slice ( & enc) ;
26
- res
27
- }
28
- }
29
15
#[ derive( Debug ) ]
30
16
pub enum DecodeError {
31
17
/// Unknown realm byte in an OnionHopData packet
@@ -553,167 +539,6 @@ impl From<::std::io::Error> for DecodeError {
553
539
}
554
540
}
555
541
556
- impl MsgEncodable for GlobalFeatures {
557
- fn encode ( & self ) -> Vec < u8 > {
558
- let mut res = Vec :: with_capacity ( self . flags . len ( ) + 2 ) ;
559
- res. extend_from_slice ( & byte_utils:: be16_to_array ( self . flags . len ( ) as u16 ) ) ;
560
- res. extend_from_slice ( & self . flags [ ..] ) ;
561
- res
562
- }
563
- fn encoded_len ( & self ) -> usize { self . flags . len ( ) + 2 }
564
- }
565
-
566
- impl MsgEncodable for ChannelReestablish {
567
- fn encode ( & self ) -> Vec < u8 > {
568
- let mut res = Vec :: with_capacity ( if self . data_loss_protect . is_some ( ) { 32 +2 * 8 +33 +32 } else { 32 +2 * 8 } ) ;
569
-
570
- res. extend_from_slice ( & serialize ( & self . channel_id ) . unwrap ( ) [ ..] ) ;
571
- res. extend_from_slice ( & byte_utils:: be64_to_array ( self . next_local_commitment_number ) ) ;
572
- res. extend_from_slice ( & byte_utils:: be64_to_array ( self . next_remote_commitment_number ) ) ;
573
-
574
- if let & Some ( ref data_loss_protect) = & self . data_loss_protect {
575
- res. extend_from_slice ( & data_loss_protect. your_last_per_commitment_secret [ ..] ) ;
576
- res. extend_from_slice ( & data_loss_protect. my_current_per_commitment_point . serialize ( ) ) ;
577
- }
578
- res
579
- }
580
- }
581
-
582
- impl MsgEncodable for UnsignedNodeAnnouncement {
583
- fn encode ( & self ) -> Vec < u8 > {
584
- let features = self . features . encode ( ) ;
585
- let mut res = Vec :: with_capacity ( 74 + features. len ( ) + self . addresses . len ( ) * 7 + self . excess_address_data . len ( ) + self . excess_data . len ( ) ) ;
586
- res. extend_from_slice ( & features[ ..] ) ;
587
- res. extend_from_slice ( & byte_utils:: be32_to_array ( self . timestamp ) ) ;
588
- res. extend_from_slice ( & self . node_id . serialize ( ) ) ;
589
- res. extend_from_slice ( & self . rgb ) ;
590
- res. extend_from_slice ( & self . alias ) ;
591
- let mut addr_slice = Vec :: with_capacity ( self . addresses . len ( ) * 18 ) ;
592
- let mut addrs_to_encode = self . addresses . clone ( ) ;
593
- addrs_to_encode. sort_unstable_by ( |a, b| { a. get_id ( ) . cmp ( & b. get_id ( ) ) } ) ;
594
- addrs_to_encode. dedup_by ( |a, b| { a. get_id ( ) == b. get_id ( ) } ) ;
595
- for addr in addrs_to_encode. iter ( ) {
596
- match addr {
597
- & NetAddress :: IPv4 { addr, port} => {
598
- addr_slice. push ( 1 ) ;
599
- addr_slice. extend_from_slice ( & addr) ;
600
- addr_slice. extend_from_slice ( & byte_utils:: be16_to_array ( port) ) ;
601
- } ,
602
- & NetAddress :: IPv6 { addr, port} => {
603
- addr_slice. push ( 2 ) ;
604
- addr_slice. extend_from_slice ( & addr) ;
605
- addr_slice. extend_from_slice ( & byte_utils:: be16_to_array ( port) ) ;
606
- } ,
607
- & NetAddress :: OnionV2 { addr, port} => {
608
- addr_slice. push ( 3 ) ;
609
- addr_slice. extend_from_slice ( & addr) ;
610
- addr_slice. extend_from_slice ( & byte_utils:: be16_to_array ( port) ) ;
611
- } ,
612
- & NetAddress :: OnionV3 { ed25519_pubkey, checksum, version, port} => {
613
- addr_slice. push ( 4 ) ;
614
- addr_slice. extend_from_slice ( & ed25519_pubkey) ;
615
- addr_slice. extend_from_slice ( & byte_utils:: be16_to_array ( checksum) ) ;
616
- addr_slice. push ( version) ;
617
- addr_slice. extend_from_slice ( & byte_utils:: be16_to_array ( port) ) ;
618
- } ,
619
- }
620
- }
621
- res. extend_from_slice ( & byte_utils:: be16_to_array ( ( addr_slice. len ( ) + self . excess_address_data . len ( ) ) as u16 ) ) ;
622
- res. extend_from_slice ( & addr_slice[ ..] ) ;
623
- res. extend_from_slice ( & self . excess_address_data [ ..] ) ;
624
- res. extend_from_slice ( & self . excess_data [ ..] ) ;
625
- res
626
- }
627
- }
628
-
629
- impl MsgEncodable for UnsignedChannelAnnouncement {
630
- fn encode ( & self ) -> Vec < u8 > {
631
- let features = self . features . encode ( ) ;
632
- let mut res = Vec :: with_capacity ( 172 + features. len ( ) + self . excess_data . len ( ) ) ;
633
- res. extend_from_slice ( & features[ ..] ) ;
634
- res. extend_from_slice ( & self . chain_hash [ ..] ) ;
635
- res. extend_from_slice ( & byte_utils:: be64_to_array ( self . short_channel_id ) ) ;
636
- res. extend_from_slice ( & self . node_id_1 . serialize ( ) ) ;
637
- res. extend_from_slice ( & self . node_id_2 . serialize ( ) ) ;
638
- res. extend_from_slice ( & self . bitcoin_key_1 . serialize ( ) ) ;
639
- res. extend_from_slice ( & self . bitcoin_key_2 . serialize ( ) ) ;
640
- res. extend_from_slice ( & self . excess_data [ ..] ) ;
641
- res
642
- }
643
- }
644
-
645
- impl MsgEncodable for UnsignedChannelUpdate {
646
- fn encode ( & self ) -> Vec < u8 > {
647
- let mut res = Vec :: with_capacity ( 64 + self . excess_data . len ( ) ) ;
648
- res. extend_from_slice ( & self . chain_hash [ ..] ) ;
649
- res. extend_from_slice ( & byte_utils:: be64_to_array ( self . short_channel_id ) ) ;
650
- res. extend_from_slice ( & byte_utils:: be32_to_array ( self . timestamp ) ) ;
651
- res. extend_from_slice ( & byte_utils:: be16_to_array ( self . flags ) ) ;
652
- res. extend_from_slice ( & byte_utils:: be16_to_array ( self . cltv_expiry_delta ) ) ;
653
- res. extend_from_slice ( & byte_utils:: be64_to_array ( self . htlc_minimum_msat ) ) ;
654
- res. extend_from_slice ( & byte_utils:: be32_to_array ( self . fee_base_msat ) ) ;
655
- res. extend_from_slice ( & byte_utils:: be32_to_array ( self . fee_proportional_millionths ) ) ;
656
- res. extend_from_slice ( & self . excess_data [ ..] ) ;
657
- res
658
- }
659
- }
660
-
661
- impl MsgEncodable for ChannelUpdate {
662
- fn encode ( & self ) -> Vec < u8 > {
663
- let mut res = Vec :: with_capacity ( 128 ) ;
664
- res. extend_from_slice ( & self . signature . serialize_compact ( & Secp256k1 :: without_caps ( ) ) [ ..] ) ;
665
- res. extend_from_slice ( & self . contents . encode ( ) [ ..] ) ;
666
- res
667
- }
668
- }
669
-
670
- impl MsgEncodable for OnionRealm0HopData {
671
- fn encode ( & self ) -> Vec < u8 > {
672
- let mut res = Vec :: with_capacity ( 32 ) ;
673
- res. extend_from_slice ( & byte_utils:: be64_to_array ( self . short_channel_id ) ) ;
674
- res. extend_from_slice ( & byte_utils:: be64_to_array ( self . amt_to_forward ) ) ;
675
- res. extend_from_slice ( & byte_utils:: be32_to_array ( self . outgoing_cltv_value ) ) ;
676
- res. resize ( 32 , 0 ) ;
677
- res
678
- }
679
- }
680
-
681
- impl MsgEncodable for OnionHopData {
682
- fn encode ( & self ) -> Vec < u8 > {
683
- let mut res = Vec :: with_capacity ( 65 ) ;
684
- res. push ( self . realm ) ;
685
- res. extend_from_slice ( & self . data . encode ( ) [ ..] ) ;
686
- res. extend_from_slice ( & self . hmac ) ;
687
- res
688
- }
689
- }
690
-
691
- impl MsgEncodable for OnionPacket {
692
- fn encode ( & self ) -> Vec < u8 > {
693
- let mut res = Vec :: with_capacity ( 1 + 33 + 20 * 65 + 32 ) ;
694
- res. push ( self . version ) ;
695
- match self . public_key {
696
- Ok ( pubkey) => res. extend_from_slice ( & pubkey. serialize ( ) ) ,
697
- Err ( _) => res. extend_from_slice ( & [ 0 ; 33 ] ) ,
698
- }
699
- res. extend_from_slice ( & self . hop_data ) ;
700
- res. extend_from_slice ( & self . hmac ) ;
701
- res
702
- }
703
- }
704
-
705
- impl MsgEncodable for DecodedOnionErrorPacket {
706
- fn encode ( & self ) -> Vec < u8 > {
707
- let mut res = Vec :: with_capacity ( 32 + 4 + self . failuremsg . len ( ) + self . pad . len ( ) ) ;
708
- res. extend_from_slice ( & self . hmac ) ;
709
- res. extend_from_slice ( & [ ( ( self . failuremsg . len ( ) >> 8 ) & 0xff ) as u8 , ( self . failuremsg . len ( ) & 0xff ) as u8 ] ) ;
710
- res. extend_from_slice ( & self . failuremsg ) ;
711
- res. extend_from_slice ( & [ ( ( self . pad . len ( ) >> 8 ) & 0xff ) as u8 , ( self . pad . len ( ) & 0xff ) as u8 ] ) ;
712
- res. extend_from_slice ( & self . pad ) ;
713
- res
714
- }
715
- }
716
-
717
542
impl_writeable_len_match ! ( AcceptChannel , {
718
543
{ AcceptChannel { shutdown_scriptpubkey: Some ( ref script) , ..} , 270 + 2 + script. len( ) } ,
719
544
{ _, 270 }
@@ -1339,8 +1164,8 @@ impl_writeable_len_match!(NodeAnnouncement, {
1339
1164
#[ cfg( test) ]
1340
1165
mod tests {
1341
1166
use hex;
1342
- use ln:: msgs:: MsgEncodable ;
1343
1167
use ln:: msgs;
1168
+ use util:: ser:: Writeable ;
1344
1169
use secp256k1:: key:: { PublicKey , SecretKey } ;
1345
1170
use secp256k1:: Secp256k1 ;
1346
1171
0 commit comments