@@ -11,7 +11,9 @@ use std::cmp;
11
11
use secp256k1:: Signature ;
12
12
use secp256k1:: key:: { PublicKey , SecretKey } ;
13
13
use bitcoin:: blockdata:: script:: Script ;
14
- use bitcoin:: blockdata:: transaction:: OutPoint ;
14
+ use bitcoin:: blockdata:: transaction:: { OutPoint , Transaction } ;
15
+ use bitcoin:: consensus;
16
+ use bitcoin:: consensus:: Encodable ;
15
17
use bitcoin_hashes:: sha256d:: Hash as Sha256dHash ;
16
18
use std:: marker:: Sized ;
17
19
use ln:: msgs:: DecodeError ;
@@ -625,6 +627,27 @@ impl<R: Read> Readable<R> for OutPoint {
625
627
}
626
628
}
627
629
630
+ impl Writeable for Transaction {
631
+ fn write < W : Writer > ( & self , writer : & mut W ) -> Result < ( ) , :: std:: io:: Error > {
632
+ match self . consensus_encode ( WriterWriteAdaptor ( writer) ) {
633
+ Ok ( _) => Ok ( ( ) ) ,
634
+ Err ( consensus:: encode:: Error :: Io ( e) ) => Err ( e) ,
635
+ Err ( _) => panic ! ( "We shouldn't get a consensus::encode::Error unless our Write generated an std::io::Error" ) ,
636
+ }
637
+ }
638
+ }
639
+
640
+ impl < R : Read > Readable < R > for Transaction {
641
+ fn read ( r : & mut R ) -> Result < Self , DecodeError > {
642
+ match consensus:: encode:: Decodable :: consensus_decode ( r) {
643
+ Ok ( t) => Ok ( t) ,
644
+ Err ( consensus:: encode:: Error :: Io ( ref e) ) if e. kind ( ) == :: std:: io:: ErrorKind :: UnexpectedEof => Err ( DecodeError :: ShortRead ) ,
645
+ Err ( consensus:: encode:: Error :: Io ( e) ) => Err ( DecodeError :: Io ( e) ) ,
646
+ Err ( _) => Err ( DecodeError :: InvalidValue ) ,
647
+ }
648
+ }
649
+ }
650
+
628
651
impl < R : Read , T : Readable < R > > Readable < R > for Mutex < T > {
629
652
fn read ( r : & mut R ) -> Result < Self , DecodeError > {
630
653
let t: T = Readable :: read ( r) ?;
0 commit comments