@@ -34,6 +34,8 @@ pub mod txout;
3434
3535use core:: default:: Default ;
3636
37+ #[ cfg( feature = "bincode" ) ]
38+ use bincode:: { Decode , Encode } ;
3739use hashes:: { Hash , sha256d} ;
3840
3941use crate :: blockdata:: constants:: WITNESS_SCALE_FACTOR ;
@@ -158,6 +160,7 @@ impl<E> EncodeSigningDataResult<E> {
158160/// We therefore deviate from the spec by always using the Segwit witness encoding
159161/// for 0-input transactions, which results in unambiguously parseable transactions.
160162#[ derive( Clone , PartialEq , Eq , PartialOrd , Ord , Debug , Hash ) ]
163+ #[ cfg_attr( feature = "bincode" , derive( Encode , Decode ) ) ]
161164#[ cfg_attr( feature = "serde" , derive( Serialize , Deserialize ) ) ]
162165#[ cfg_attr( feature = "serde" , serde( crate = "actual_serde" ) ) ]
163166pub struct Transaction {
@@ -911,6 +914,8 @@ mod tests {
911914 use crate :: blockdata:: constants:: WITNESS_SCALE_FACTOR ;
912915 use crate :: consensus:: encode:: { deserialize, serialize} ;
913916 use crate :: internal_macros:: hex;
917+ use crate :: network:: message:: { NetworkMessage , RawNetworkMessage } ;
918+ use crate :: network:: message_sml:: MnListDiff ;
914919
915920 #[ test]
916921 fn test_is_coinbase ( ) {
@@ -1253,6 +1258,18 @@ mod tests {
12531258 assert_eq ! ( data. len( ) , 20 ) ;
12541259 assert_eq ! ( & data, & pk_data. as_slice( ) ) ;
12551260 }
1261+
1262+ #[ test]
1263+ fn deserialize_serialize_coinbase_transaction_in_dml ( ) {
1264+ let block_hex = include_str ! ( "../../../tests/data/test_DML_diffs/DML_0_2221605.hex" ) ;
1265+ let data = hex:: decode ( block_hex) . expect ( "decode hex" ) ;
1266+ let mn_list_diff: RawNetworkMessage = deserialize ( & data) . expect ( "deserialize MnListDiff" ) ;
1267+ if let NetworkMessage :: MnListDiff ( diff) = mn_list_diff. payload {
1268+ let serialized = serialize ( & diff. coinbase_tx ) ;
1269+ let deserialized: Transaction =
1270+ deserialize ( serialized. as_slice ( ) ) . expect ( "expected to deserialize" ) ;
1271+ }
1272+ }
12561273}
12571274
12581275#[ cfg( all( test, feature = "unstable" ) ) ]
0 commit comments