OSDN Git Service

new repo
[bytom/vapor.git] / vendor / github.com / btcsuite / btcd / database / cmd / dbtool / fetchblock.go
1 // Copyright (c) 2015-2016 The btcsuite developers
2 // Use of this source code is governed by an ISC
3 // license that can be found in the LICENSE file.
4
5 package main
6
7 import (
8         "encoding/hex"
9         "errors"
10         "time"
11
12         "github.com/btcsuite/btcd/chaincfg/chainhash"
13         "github.com/btcsuite/btcd/database"
14 )
15
16 // fetchBlockCmd defines the configuration options for the fetchblock command.
17 type fetchBlockCmd struct{}
18
19 var (
20         // fetchBlockCfg defines the configuration options for the command.
21         fetchBlockCfg = fetchBlockCmd{}
22 )
23
24 // Execute is the main entry point for the command.  It's invoked by the parser.
25 func (cmd *fetchBlockCmd) Execute(args []string) error {
26         // Setup the global config options and ensure they are valid.
27         if err := setupGlobalConfig(); err != nil {
28                 return err
29         }
30
31         if len(args) < 1 {
32                 return errors.New("required block hash parameter not specified")
33         }
34         blockHash, err := chainhash.NewHashFromStr(args[0])
35         if err != nil {
36                 return err
37         }
38
39         // Load the block database.
40         db, err := loadBlockDB()
41         if err != nil {
42                 return err
43         }
44         defer db.Close()
45
46         return db.View(func(tx database.Tx) error {
47                 log.Infof("Fetching block %s", blockHash)
48                 startTime := time.Now()
49                 blockBytes, err := tx.FetchBlock(blockHash)
50                 if err != nil {
51                         return err
52                 }
53                 log.Infof("Loaded block in %v", time.Since(startTime))
54                 log.Infof("Block Hex: %s", hex.EncodeToString(blockBytes))
55                 return nil
56         })
57 }
58
59 // Usage overrides the usage display for the command.
60 func (cmd *fetchBlockCmd) Usage() string {
61         return "<block-hash>"
62 }