79340da313a34f480179b4cc792a4b5b2c4c1470
[novacoin.git] / bitcointools / dbdump.py
1 #!/usr/bin/env python
2 #
3 # Code for dumping the bitcoin Berkeley db files in a human-readable format
4 #
5 from bsddb.db import *
6 import logging
7 import sys
8
9 from address import dump_addresses
10 from wallet import dump_wallet, dump_accounts
11 from blkindex import dump_blkindex_summary
12 from transaction import dump_transaction
13 from block import dump_block, dump_block_n, search_blocks, check_block_chain
14 from util import determine_db_dir, create_env
15
16 def main():
17   import optparse
18   parser = optparse.OptionParser(usage="%prog [options]")
19   parser.add_option("--datadir", dest="datadir", default=None,
20                     help="Look for files here (defaults to bitcoin default)")
21   parser.add_option("--wallet", action="store_true", dest="dump_wallet", default=False,
22                     help="Print out contents of the wallet.dat file")
23   parser.add_option("--wallet-tx", action="store_true", dest="dump_wallet_tx", default=False,
24                     help="Print transactions in the wallet.dat file")
25   parser.add_option("--wallet-tx-filter", action="store", dest="wallet_tx_filter", default="",
26                     help="Only print transactions that match given string/regular expression")
27   parser.add_option("--accounts", action="store_true", dest="dump_accounts", default="",
28                     help="Print out account names, one per line")
29   parser.add_option("--blkindex", action="store_true", dest="dump_blkindex", default=False,
30                     help="Print out summary of blkindex.dat file")
31   parser.add_option("--check-block-chain", action="store_true", dest="check_chain", default=False,
32                     help="Scan back and forward through the block chain, looking for inconsistencies")
33   parser.add_option("--address", action="store_true", dest="dump_addr", default=False,
34                     help="Print addresses in the addr.dat file")
35   parser.add_option("--transaction", action="store", dest="dump_transaction", default=None,
36                     help="Dump a single transaction, given hex transaction id (or abbreviated id)")
37   parser.add_option("--block", action="store", dest="dump_block", default=None,
38                     help="Dump a single block, given its hex hash (or abbreviated hex hash) OR block height")
39   parser.add_option("--search-blocks", action="store", dest="search_blocks", default=None,
40                     help="Search the block chain for blocks containing given regex pattern")
41   (options, args) = parser.parse_args()
42
43   if options.datadir is None:
44     db_dir = determine_db_dir()
45   else:
46     db_dir = options.datadir
47
48   try:
49     db_env = create_env(db_dir)
50   except DBNoSuchFileError:
51     logging.error("Couldn't open " + db_dir)
52     sys.exit(1)
53
54   dump_tx = options.dump_wallet_tx
55   if len(options.wallet_tx_filter) > 0:
56     dump_tx = True
57   if options.dump_wallet or dump_tx:
58     dump_wallet(db_env, options.dump_wallet, dump_tx, options.wallet_tx_filter)
59   if options.dump_accounts:
60     dump_accounts(db_env)
61
62   if options.dump_addr:
63     dump_addresses(db_env)
64
65   if options.check_chain:
66     check_block_chain(db_env)
67
68   if options.dump_blkindex:
69     dump_blkindex_summary(db_env)
70
71   if options.dump_transaction is not None:
72     dump_transaction(db_dir, db_env, options.dump_transaction)
73
74   if options.dump_block is not None:
75     if len(options.dump_block) < 7: # Probably an integer...
76       try:
77         dump_block_n(db_dir, db_env, int(options.dump_block))
78       except ValueError:
79         dump_block(db_dir, db_env, options.dump_block)
80     else:
81       dump_block(db_dir, db_env, options.dump_block)
82
83   if options.search_blocks is not None:
84     search_blocks(db_dir, db_env, options.search_blocks)
85
86   db_env.close()
87
88 if __name__ == '__main__':
89     main()