annotate README.md @ 34:bd0ec5cb2300 default tip

Move to mercurial
author Dennis C. M. <dennis@denniscm.com>
date Tue, 03 Jun 2025 14:24:28 +0100
parents e947bfd3db1a
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
32
e947bfd3db1a Add images to readme
Dennis C. M. <dennis@denniscm.com>
parents: 31
diff changeset
1 # bitcaviar-plus
17
25b0a9a206c4 Update README.md
Dennis C. M. <dennis@denniscm.com>
parents: 14
diff changeset
2
34
bd0ec5cb2300 Move to mercurial
Dennis C. M. <dennis@denniscm.com>
parents: 32
diff changeset
3 I want to learn more about the technology behind Bitcoin, so what better way to
bd0ec5cb2300 Move to mercurial
Dennis C. M. <dennis@denniscm.com>
parents: 32
diff changeset
4 do so than by making a project?
32
e947bfd3db1a Add images to readme
Dennis C. M. <dennis@denniscm.com>
parents: 31
diff changeset
5
34
bd0ec5cb2300 Move to mercurial
Dennis C. M. <dennis@denniscm.com>
parents: 32
diff changeset
6 Here is a Bitcoin parser written in Python that I made. It was a very nice
bd0ec5cb2300 Move to mercurial
Dennis C. M. <dennis@denniscm.com>
parents: 32
diff changeset
7 learning experience.
32
e947bfd3db1a Add images to readme
Dennis C. M. <dennis@denniscm.com>
parents: 31
diff changeset
8
e947bfd3db1a Add images to readme
Dennis C. M. <dennis@denniscm.com>
parents: 31
diff changeset
9 ## Installation
e947bfd3db1a Add images to readme
Dennis C. M. <dennis@denniscm.com>
parents: 31
diff changeset
10 ```bash
e947bfd3db1a Add images to readme
Dennis C. M. <dennis@denniscm.com>
parents: 31
diff changeset
11 python setup.py install
e947bfd3db1a Add images to readme
Dennis C. M. <dennis@denniscm.com>
parents: 31
diff changeset
12 ```
e947bfd3db1a Add images to readme
Dennis C. M. <dennis@denniscm.com>
parents: 31
diff changeset
13
e947bfd3db1a Add images to readme
Dennis C. M. <dennis@denniscm.com>
parents: 31
diff changeset
14 ## Usage
e947bfd3db1a Add images to readme
Dennis C. M. <dennis@denniscm.com>
parents: 31
diff changeset
15
e947bfd3db1a Add images to readme
Dennis C. M. <dennis@denniscm.com>
parents: 31
diff changeset
16 To deserialize the genesis block:
e947bfd3db1a Add images to readme
Dennis C. M. <dennis@denniscm.com>
parents: 31
diff changeset
17
e947bfd3db1a Add images to readme
Dennis C. M. <dennis@denniscm.com>
parents: 31
diff changeset
18 ```python
e947bfd3db1a Add images to readme
Dennis C. M. <dennis@denniscm.com>
parents: 31
diff changeset
19 from bitcaviar_plus.block import deserialize_block
e947bfd3db1a Add images to readme
Dennis C. M. <dennis@denniscm.com>
parents: 31
diff changeset
20
e947bfd3db1a Add images to readme
Dennis C. M. <dennis@denniscm.com>
parents: 31
diff changeset
21
e947bfd3db1a Add images to readme
Dennis C. M. <dennis@denniscm.com>
parents: 31
diff changeset
22 def parse_genesis_block():
e947bfd3db1a Add images to readme
Dennis C. M. <dennis@denniscm.com>
parents: 31
diff changeset
23 with open('path/to/file/blk00000.dat', 'rb') as f:
e947bfd3db1a Add images to readme
Dennis C. M. <dennis@denniscm.com>
parents: 31
diff changeset
24 block = deserialize_block(f)
e947bfd3db1a Add images to readme
Dennis C. M. <dennis@denniscm.com>
parents: 31
diff changeset
25 print(block)
e947bfd3db1a Add images to readme
Dennis C. M. <dennis@denniscm.com>
parents: 31
diff changeset
26 To deserialize the entire blockchain:
e947bfd3db1a Add images to readme
Dennis C. M. <dennis@denniscm.com>
parents: 31
diff changeset
27
e947bfd3db1a Add images to readme
Dennis C. M. <dennis@denniscm.com>
parents: 31
diff changeset
28 import os
e947bfd3db1a Add images to readme
Dennis C. M. <dennis@denniscm.com>
parents: 31
diff changeset
29 from bitcaviar_plus.block import deserialize_block
e947bfd3db1a Add images to readme
Dennis C. M. <dennis@denniscm.com>
parents: 31
diff changeset
30 from bitcaviar_plus.errors import InvalidMagicBytes
e947bfd3db1a Add images to readme
Dennis C. M. <dennis@denniscm.com>
parents: 31
diff changeset
31
e947bfd3db1a Add images to readme
Dennis C. M. <dennis@denniscm.com>
parents: 31
diff changeset
32
e947bfd3db1a Add images to readme
Dennis C. M. <dennis@denniscm.com>
parents: 31
diff changeset
33 def parse_entire_blockchain():
e947bfd3db1a Add images to readme
Dennis C. M. <dennis@denniscm.com>
parents: 31
diff changeset
34 file_counter = -1
e947bfd3db1a Add images to readme
Dennis C. M. <dennis@denniscm.com>
parents: 31
diff changeset
35 while True:
e947bfd3db1a Add images to readme
Dennis C. M. <dennis@denniscm.com>
parents: 31
diff changeset
36 file_counter += 1
e947bfd3db1a Add images to readme
Dennis C. M. <dennis@denniscm.com>
parents: 31
diff changeset
37 file_name = 'path/to/file/blk{}.dat'.format(str(file_counter).zfill(5))
e947bfd3db1a Add images to readme
Dennis C. M. <dennis@denniscm.com>
parents: 31
diff changeset
38 with open(file_name, 'rb') as f:
e947bfd3db1a Add images to readme
Dennis C. M. <dennis@denniscm.com>
parents: 31
diff changeset
39 file_size = os.path.getsize(file_name)
e947bfd3db1a Add images to readme
Dennis C. M. <dennis@denniscm.com>
parents: 31
diff changeset
40 while f.tell() < file_size:
e947bfd3db1a Add images to readme
Dennis C. M. <dennis@denniscm.com>
parents: 31
diff changeset
41 try:
e947bfd3db1a Add images to readme
Dennis C. M. <dennis@denniscm.com>
parents: 31
diff changeset
42 block = deserialize_block(f)
e947bfd3db1a Add images to readme
Dennis C. M. <dennis@denniscm.com>
parents: 31
diff changeset
43 except InvalidMagicBytes as e:
e947bfd3db1a Add images to readme
Dennis C. M. <dennis@denniscm.com>
parents: 31
diff changeset
44 print(e)
e947bfd3db1a Add images to readme
Dennis C. M. <dennis@denniscm.com>
parents: 31
diff changeset
45
e947bfd3db1a Add images to readme
Dennis C. M. <dennis@denniscm.com>
parents: 31
diff changeset
46 ```
e947bfd3db1a Add images to readme
Dennis C. M. <dennis@denniscm.com>
parents: 31
diff changeset
47
e947bfd3db1a Add images to readme
Dennis C. M. <dennis@denniscm.com>
parents: 31
diff changeset
48 This is the output:
e947bfd3db1a Add images to readme
Dennis C. M. <dennis@denniscm.com>
parents: 31
diff changeset
49
e947bfd3db1a Add images to readme
Dennis C. M. <dennis@denniscm.com>
parents: 31
diff changeset
50 ```json
e947bfd3db1a Add images to readme
Dennis C. M. <dennis@denniscm.com>
parents: 31
diff changeset
51 {
e947bfd3db1a Add images to readme
Dennis C. M. <dennis@denniscm.com>
parents: 31
diff changeset
52 "magic_number": "f9beb4d9",
e947bfd3db1a Add images to readme
Dennis C. M. <dennis@denniscm.com>
parents: 31
diff changeset
53 "size": "0000011d",
e947bfd3db1a Add images to readme
Dennis C. M. <dennis@denniscm.com>
parents: 31
diff changeset
54 "id": "000000000019d6...",
e947bfd3db1a Add images to readme
Dennis C. M. <dennis@denniscm.com>
parents: 31
diff changeset
55 "transaction_count": "01",
e947bfd3db1a Add images to readme
Dennis C. M. <dennis@denniscm.com>
parents: 31
diff changeset
56 "header": {
e947bfd3db1a Add images to readme
Dennis C. M. <dennis@denniscm.com>
parents: 31
diff changeset
57 "version": "00000001",
e947bfd3db1a Add images to readme
Dennis C. M. <dennis@denniscm.com>
parents: 31
diff changeset
58 "previous_block_id": "00000000000000...",
e947bfd3db1a Add images to readme
Dennis C. M. <dennis@denniscm.com>
parents: 31
diff changeset
59 "merkle_root": "4a5e1e4baab89f3a32...",
e947bfd3db1a Add images to readme
Dennis C. M. <dennis@denniscm.com>
parents: 31
diff changeset
60 "time": "495fab29",
e947bfd3db1a Add images to readme
Dennis C. M. <dennis@denniscm.com>
parents: 31
diff changeset
61 "bits": "1d00ffff",
e947bfd3db1a Add images to readme
Dennis C. M. <dennis@denniscm.com>
parents: 31
diff changeset
62 "nonce": "7c2bac1d"
e947bfd3db1a Add images to readme
Dennis C. M. <dennis@denniscm.com>
parents: 31
diff changeset
63 },
e947bfd3db1a Add images to readme
Dennis C. M. <dennis@denniscm.com>
parents: 31
diff changeset
64 "transactions": [
e947bfd3db1a Add images to readme
Dennis C. M. <dennis@denniscm.com>
parents: 31
diff changeset
65 {
e947bfd3db1a Add images to readme
Dennis C. M. <dennis@denniscm.com>
parents: 31
diff changeset
66 "version": "00000001",
e947bfd3db1a Add images to readme
Dennis C. M. <dennis@denniscm.com>
parents: 31
diff changeset
67 "input_count": "01",
e947bfd3db1a Add images to readme
Dennis C. M. <dennis@denniscm.com>
parents: 31
diff changeset
68 "output_count": "01",
e947bfd3db1a Add images to readme
Dennis C. M. <dennis@denniscm.com>
parents: 31
diff changeset
69 "lock_time": "00000000",
e947bfd3db1a Add images to readme
Dennis C. M. <dennis@denniscm.com>
parents: 31
diff changeset
70 "id": "4a5e1e4baab89f3a32518a8...",
e947bfd3db1a Add images to readme
Dennis C. M. <dennis@denniscm.com>
parents: 31
diff changeset
71 "inputs": [
e947bfd3db1a Add images to readme
Dennis C. M. <dennis@denniscm.com>
parents: 31
diff changeset
72 {
e947bfd3db1a Add images to readme
Dennis C. M. <dennis@denniscm.com>
parents: 31
diff changeset
73 "id": "0000000000000000000000...",
e947bfd3db1a Add images to readme
Dennis C. M. <dennis@denniscm.com>
parents: 31
diff changeset
74 "vout": "ffffffff",
e947bfd3db1a Add images to readme
Dennis C. M. <dennis@denniscm.com>
parents: 31
diff changeset
75 "script_sig_size": "4d",
e947bfd3db1a Add images to readme
Dennis C. M. <dennis@denniscm.com>
parents: 31
diff changeset
76 "script_sig": "04ffff001d01044554686520546...",
e947bfd3db1a Add images to readme
Dennis C. M. <dennis@denniscm.com>
parents: 31
diff changeset
77 "sequence": "ffffffff"
e947bfd3db1a Add images to readme
Dennis C. M. <dennis@denniscm.com>
parents: 31
diff changeset
78 }
e947bfd3db1a Add images to readme
Dennis C. M. <dennis@denniscm.com>
parents: 31
diff changeset
79 ],
e947bfd3db1a Add images to readme
Dennis C. M. <dennis@denniscm.com>
parents: 31
diff changeset
80 "outputs": [
e947bfd3db1a Add images to readme
Dennis C. M. <dennis@denniscm.com>
parents: 31
diff changeset
81 {
e947bfd3db1a Add images to readme
Dennis C. M. <dennis@denniscm.com>
parents: 31
diff changeset
82 "value": "000000012a05f200",
e947bfd3db1a Add images to readme
Dennis C. M. <dennis@denniscm.com>
parents: 31
diff changeset
83 "script_pub_key_size": "43",
e947bfd3db1a Add images to readme
Dennis C. M. <dennis@denniscm.com>
parents: 31
diff changeset
84 "script_pub_key": "4104678afdb0fe55482719..."
e947bfd3db1a Add images to readme
Dennis C. M. <dennis@denniscm.com>
parents: 31
diff changeset
85 }
e947bfd3db1a Add images to readme
Dennis C. M. <dennis@denniscm.com>
parents: 31
diff changeset
86 ]
e947bfd3db1a Add images to readme
Dennis C. M. <dennis@denniscm.com>
parents: 31
diff changeset
87 }
e947bfd3db1a Add images to readme
Dennis C. M. <dennis@denniscm.com>
parents: 31
diff changeset
88 ]
e947bfd3db1a Add images to readme
Dennis C. M. <dennis@denniscm.com>
parents: 31
diff changeset
89 }
e947bfd3db1a Add images to readme
Dennis C. M. <dennis@denniscm.com>
parents: 31
diff changeset
90 ```
13
4bbe48c95079 add instructions
Dennis Concepcion Martin <dennisconcepcionmartin@gmail.com>
parents: 4
diff changeset
91
30
dbf757904681 CHnage info files
Dennis <dennis@denniscm.com>
parents: 29
diff changeset
92 ## Attribution
28
30535f42d0ff refactor code
Dennis Concepcion Martin <dennisconcepcionmartin@gmail.com>
parents: 21
diff changeset
93
30
dbf757904681 CHnage info files
Dennis <dennis@denniscm.com>
parents: 29
diff changeset
94 - [blockchain-parser](https://github.com/ragestack/blockchain-parser/blob/master/blockchain-parser.py)
dbf757904681 CHnage info files
Dennis <dennis@denniscm.com>
parents: 29
diff changeset
95 - [bitcoinbook](https://github.com/bitcoinbook/bitcoinbook)
dbf757904681 CHnage info files
Dennis <dennis@denniscm.com>
parents: 29
diff changeset
96 - [learnmeabitcoin.com](https://learnmeabitcoin.com/)
13
4bbe48c95079 add instructions
Dennis Concepcion Martin <dennisconcepcionmartin@gmail.com>
parents: 4
diff changeset
97