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