11use crate :: http:: { BinaryResponse , JsonResponse } ;
2- use crate :: utils:: hex_to_uint256 ;
2+ use crate :: utils:: hex_to_work ;
33use crate :: { BlockHeaderData , BlockSourceError } ;
44
5- use bitcoin:: blockdata:: block:: { Block , BlockHeader } ;
5+ use bitcoin:: blockdata:: block:: { Block , Header } ;
66use bitcoin:: consensus:: encode;
77use bitcoin:: hash_types:: { BlockHash , TxMerkleNode , Txid } ;
88use bitcoin:: hashes:: hex:: FromHex ;
@@ -88,17 +88,21 @@ impl TryFrom<serde_json::Value> for BlockHeaderData {
8888 } }
8989
9090 Ok ( BlockHeaderData {
91- header : BlockHeader {
92- version : get_field ! ( "version" , as_i64) . try_into ( ) . map_err ( |_| ( ) ) ?,
91+ header : Header {
92+ version : bitcoin:: blockdata:: block:: Version :: from_consensus (
93+ get_field ! ( "version" , as_i64) . try_into ( ) . map_err ( |_| ( ) ) ?
94+ ) ,
9395 prev_blockhash : if let Some ( hash_str) = response. get ( "previousblockhash" ) {
94- BlockHash :: from_hex ( hash_str. as_str ( ) . ok_or ( ( ) ) ?) . map_err ( |_| ( ) ) ?
96+ BlockHash :: from_str ( hash_str. as_str ( ) . ok_or ( ( ) ) ?) . map_err ( |_| ( ) ) ?
9597 } else { BlockHash :: all_zeros ( ) } ,
96- merkle_root : TxMerkleNode :: from_hex ( get_field ! ( "merkleroot" , as_str) ) . map_err ( |_| ( ) ) ?,
98+ merkle_root : TxMerkleNode :: from_str ( get_field ! ( "merkleroot" , as_str) ) . map_err ( |_| ( ) ) ?,
9799 time : get_field ! ( "time" , as_u64) . try_into ( ) . map_err ( |_| ( ) ) ?,
98- bits : u32:: from_be_bytes ( <[ u8 ; 4 ] >:: from_hex ( get_field ! ( "bits" , as_str) ) . map_err ( |_| ( ) ) ?) ,
100+ bits : bitcoin:: CompactTarget :: from_consensus (
101+ u32:: from_be_bytes ( <[ u8 ; 4 ] >:: from_hex ( get_field ! ( "bits" , as_str) ) . map_err ( |_| ( ) ) ?)
102+ ) ,
99103 nonce : get_field ! ( "nonce" , as_u64) . try_into ( ) . map_err ( |_| ( ) ) ?,
100104 } ,
101- chainwork : hex_to_uint256 ( get_field ! ( "chainwork" , as_str) ) . map_err ( |_| ( ) ) ?,
105+ chainwork : hex_to_work ( get_field ! ( "chainwork" , as_str) ) . map_err ( |_| ( ) ) ?,
102106 height : get_field ! ( "height" , as_u64) . try_into ( ) . map_err ( |_| ( ) ) ?,
103107 } )
104108 }
@@ -132,7 +136,7 @@ impl TryInto<(BlockHash, Option<u32>)> for JsonResponse {
132136 }
133137
134138 let hash = match & self . 0 [ "bestblockhash" ] {
135- serde_json:: Value :: String ( hex_data) => match BlockHash :: from_hex ( & hex_data) {
139+ serde_json:: Value :: String ( hex_data) => match BlockHash :: from_str ( & hex_data) {
136140 Err ( _) => return Err ( std:: io:: Error :: new ( std:: io:: ErrorKind :: InvalidData , "invalid hex data" ) ) ,
137141 Ok ( block_hash) => block_hash,
138142 } ,
@@ -288,8 +292,8 @@ pub(crate) mod tests {
288292 use super :: * ;
289293 use bitcoin:: blockdata:: constants:: genesis_block;
290294 use bitcoin:: hashes:: Hash ;
291- use bitcoin:: hashes:: hex:: ToHex ;
292295 use bitcoin:: network:: constants:: Network ;
296+ use hex:: DisplayHex ;
293297 use serde_json:: value:: Number ;
294298 use serde_json:: Value ;
295299
@@ -298,14 +302,14 @@ pub(crate) mod tests {
298302 fn from ( data : BlockHeaderData ) -> Self {
299303 let BlockHeaderData { chainwork, height, header } = data;
300304 serde_json:: json!( {
301- "chainwork" : chainwork. to_string ( ) [ "0x" . len ( ) .. ] ,
305+ "chainwork" : chainwork. to_be_bytes ( ) . as_hex ( ) . to_string ( ) ,
302306 "height" : height,
303- "version" : header. version,
304- "merkleroot" : header. merkle_root. to_hex ( ) ,
307+ "version" : header. version. to_consensus ( ) ,
308+ "merkleroot" : header. merkle_root. to_string ( ) ,
305309 "time" : header. time,
306310 "nonce" : header. nonce,
307- "bits" : header. bits. to_hex ( ) ,
308- "previousblockhash" : header. prev_blockhash. to_hex ( ) ,
311+ "bits" : header. bits. to_consensus ( ) . to_be_bytes ( ) . as_hex ( ) . to_string ( ) ,
312+ "previousblockhash" : header. prev_blockhash. to_string ( ) ,
309313 } )
310314 }
311315 }
@@ -394,7 +398,7 @@ pub(crate) mod tests {
394398 #[ test]
395399 fn into_block_header_from_json_response_with_valid_header_array ( ) {
396400 let genesis_block = genesis_block ( Network :: Bitcoin ) ;
397- let best_block_header = BlockHeader {
401+ let best_block_header = Header {
398402 prev_blockhash : genesis_block. block_hash ( ) ,
399403 ..genesis_block. header
400404 } ;
@@ -541,7 +545,7 @@ pub(crate) mod tests {
541545 fn into_block_hash_from_json_response_without_height ( ) {
542546 let block = genesis_block ( Network :: Bitcoin ) ;
543547 let response = JsonResponse ( serde_json:: json!( {
544- "bestblockhash" : block. block_hash( ) . to_hex ( ) ,
548+ "bestblockhash" : block. block_hash( ) . to_string ( ) ,
545549 } ) ) ;
546550 match TryInto :: < ( BlockHash , Option < u32 > ) > :: try_into ( response) {
547551 Err ( e) => panic ! ( "Unexpected error: {:?}" , e) ,
@@ -556,7 +560,7 @@ pub(crate) mod tests {
556560 fn into_block_hash_from_json_response_with_unexpected_blocks_type ( ) {
557561 let block = genesis_block ( Network :: Bitcoin ) ;
558562 let response = JsonResponse ( serde_json:: json!( {
559- "bestblockhash" : block. block_hash( ) . to_hex ( ) ,
563+ "bestblockhash" : block. block_hash( ) . to_string ( ) ,
560564 "blocks" : "foo" ,
561565 } ) ) ;
562566 match TryInto :: < ( BlockHash , Option < u32 > ) > :: try_into ( response) {
@@ -572,7 +576,7 @@ pub(crate) mod tests {
572576 fn into_block_hash_from_json_response_with_invalid_height ( ) {
573577 let block = genesis_block ( Network :: Bitcoin ) ;
574578 let response = JsonResponse ( serde_json:: json!( {
575- "bestblockhash" : block. block_hash( ) . to_hex ( ) ,
579+ "bestblockhash" : block. block_hash( ) . to_string ( ) ,
576580 "blocks" : std:: u64 :: MAX ,
577581 } ) ) ;
578582 match TryInto :: < ( BlockHash , Option < u32 > ) > :: try_into ( response) {
@@ -588,7 +592,7 @@ pub(crate) mod tests {
588592 fn into_block_hash_from_json_response_with_height ( ) {
589593 let block = genesis_block ( Network :: Bitcoin ) ;
590594 let response = JsonResponse ( serde_json:: json!( {
591- "bestblockhash" : block. block_hash( ) . to_hex ( ) ,
595+ "bestblockhash" : block. block_hash( ) . to_string ( ) ,
592596 "blocks" : 1 ,
593597 } ) ) ;
594598 match TryInto :: < ( BlockHash , Option < u32 > ) > :: try_into ( response) {
0 commit comments