@@ -6,7 +6,7 @@ use crate::utils;
6
6
use bitcoin:: block:: { Header , Version } ;
7
7
use bitcoin:: consensus:: { Decodable , Encodable } ;
8
8
use bitcoin:: hashes:: Hash ;
9
- use bitcoin:: { Address , Block , BlockHash , CompactTarget , Transaction , Txid } ;
9
+ use bitcoin:: { Address , Block , BlockHash , CompactTarget , Transaction , TxMerkleNode , Txid } ;
10
10
use rusqlite:: params;
11
11
use std:: str:: FromStr ;
12
12
use std:: time:: { SystemTime , UNIX_EPOCH } ;
@@ -163,10 +163,28 @@ impl Ledger {
163
163
let mut encoded_hash: Vec < u8 > = Vec :: new ( ) ;
164
164
hash. consensus_encode ( & mut encoded_hash) . unwrap ( ) ;
165
165
166
+ // Handle genesis block.
167
+ if hash == BlockHash :: all_zeros ( ) {
168
+ return Ok ( Block {
169
+ header : Header {
170
+ version : Version :: TWO ,
171
+ prev_blockhash : BlockHash :: all_zeros ( ) ,
172
+ merkle_root : TxMerkleNode :: all_zeros ( ) ,
173
+ time : 0 ,
174
+ bits : CompactTarget :: default ( ) ,
175
+ nonce : 0 ,
176
+ } ,
177
+ txdata : vec ! [ ] ,
178
+ } ) ;
179
+ }
180
+
166
181
let qr = match self . database . lock ( ) . unwrap ( ) . query_row (
167
182
"SELECT body FROM blocks WHERE hash = ?1" ,
168
183
params ! [ encoded_hash] ,
169
- |row| Ok ( row. get :: < _ , Vec < u8 > > ( 0 ) . unwrap ( ) ) ,
184
+ |row| {
185
+ tracing:: error!( "row {:?}" , row) ;
186
+ Ok ( row. get :: < _ , Vec < u8 > > ( 0 ) . unwrap ( ) )
187
+ } ,
170
188
) {
171
189
Ok ( qr) => qr,
172
190
Err ( e) => {
0 commit comments