comparison tests/implementation_testing.py @ 24:139c77ea99b7

add plyvel
author Dennis Concepcion Martin <dennisconcepcionmartin@gmail.com>
date Sun, 14 Nov 2021 17:36:43 +0100
parents 32061555853c
children
comparison
equal deleted inserted replaced
23:32061555853c 24:139c77ea99b7
1 import os 1 import os
2 import plyvel
3 import tempfile
2 from bitcaviar_plus.block import deserialize_block 4 from bitcaviar_plus.block import deserialize_block
5 from bitcaviar_plus.block import __deserialize_header
3 from bitcaviar_plus.errors import InvalidMagicBytes 6 from bitcaviar_plus.errors import InvalidMagicBytes
4 import plyvel
5 7
6 8
7 # noinspection PyUnresolvedReferences
8 def parse_genesis_block(): 9 def parse_genesis_block():
9 blk_path = '/bitcoin-node/.bitcoin/blocks/blk00355.dat' 10 blk_path = '/bitcoin-node/.bitcoin/blocks/blk00355.dat'
10 db = plyvel.DB('/bitcoin-node/.bitcoin/blocks/index/', create_if_missing=False)
11 11
12 with open(blk_path, 'rb') as f: 12 with open(blk_path, 'rb') as f:
13 file_size = os.path.getsize(blk_path) 13 file_size = os.path.getsize(blk_path)
14 while f.tell() < file_size: 14 while f.tell() < file_size:
15 try: 15 try:
16 block = deserialize_block(f) 16 block = deserialize_block(f)
17 except InvalidMagicBytes as e: 17 except InvalidMagicBytes as e:
18 print(e) 18 print(e)
19 19
20 20
21 # noinspection PyUnresolvedReferences
22 def iterate_leveldb_keys():
23 db = plyvel.DB('/bitcoin-node/.bitcoin/blocks/index/', create_if_missing=False)
24 for key, value in db:
25 print('---- RAW KEY ----')
26 print(key.hex())
27 print('---- LITTLE ENDIAN KEY ----')
28 print(key[::-1].hex())
29 print('---- RAW VALUE ----')
30 print(value[::-1].hex())
31 exit()
32
33
34 # noinspection PyUnresolvedReferences
35 def search_block():
36 db = plyvel.DB('/bitcoin-node/.bitcoin/blocks/index/', create_if_missing=False)
37 search_type = bytes.fromhex('62') # 'b' (block) in hex is 62
38 block_hash = bytes.fromhex('000000000019d6689c085ae165831e934ff763ae46a2a6c172b3f1b60a8ce26f')[::-1]
39 key = search_type + block_hash
40 value = db.get(key)
41 print(value.hex())
42 db.close()
43
44
21 if __name__ == '__main__': 45 if __name__ == '__main__':
22 parse_genesis_block() 46 search_block()