Skip to content

Instantly share code, notes, and snippets.

@dexX7
Created November 2, 2014 23:46
Show Gist options
  • Save dexX7/cbd16b05f1f3870b7afc to your computer and use it in GitHub Desktop.
Save dexX7/cbd16b05f1f3870b7afc to your computer and use it in GitHub Desktop.

Revisions

  1. dexX7 created this gist Nov 2, 2014.
    55 changes: 55 additions & 0 deletions leveldb_dump.py
    Original file line number Diff line number Diff line change
    @@ -0,0 +1,55 @@
    #!/usr/bin/env python
    import binascii
    import sys

    import leveldb

    def b2x(b):
    """Convert bytes to a hex string"""
    if sys.version > '3':
    return binascii.hexlify(b).decode('utf8')
    else:
    return binascii.hexlify(b)

    def db_count(filepath):
    """Prints number of records in LevelDB database"""
    db = leveldb.LevelDB(filepath)
    count = 1
    for k in db.RangeIter(None, None, False):
    count += 1
    print(count)

    def db_dump(filepath, to_hex=0):
    """Prints records of LevelDB database"""
    db = leveldb.LevelDB(filepath)
    for k, v in db.RangeIter(None, None):
    if to_hex:
    k = b2x(k)
    v = b2x(v)
    print('%s %s' % (k, v,))

    if __name__ == '__main__':
    if len(sys.argv) == 1:
    print('Dumps or counts content of one or more LevelDB databases.')
    print('Binary entries can be converted to hex.\n')
    print('Usage:')
    print(' python %s [--count] [--binary] path1 [path2, path3, ...]\n' % (sys.argv[0],))
    print('Examples:')
    print(' python %s ~/.bitcoin/testnet3/MP_spinfo/' % (sys.argv[0],))
    print(' python %s --count ~/.bitcoin/testnet3/MP_txlist/' % (sys.argv[0],))
    print(' python %s --binary ~/.bitcoin/testnet3/chainstate/' % (sys.argv[0],))

    count = 0
    to_hex = 0
    for arg in sys.argv[1:]:
    if '--count' in arg:
    count = 1
    continue
    if '--binary' in arg:
    to_hex = 1
    continue

    if count:
    db_count(arg)
    else:
    db_dump(arg, to_hex)