annotate src/bitcaviar_plus/helpers.py @ 28:30535f42d0ff

refactor code
author Dennis Concepcion Martin <dennisconcepcionmartin@gmail.com>
date Wed, 02 Feb 2022 21:16:10 +0100
parents 6a0a8cce058e
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
8
4d259e84160d fix OverFlow bug
Dennis Concepcion Martin <dennisconcepcionmartin@gmail.com>
parents:
diff changeset
1 import hashlib
4d259e84160d fix OverFlow bug
Dennis Concepcion Martin <dennisconcepcionmartin@gmail.com>
parents:
diff changeset
2
4d259e84160d fix OverFlow bug
Dennis Concepcion Martin <dennisconcepcionmartin@gmail.com>
parents:
diff changeset
3 """
4d259e84160d fix OverFlow bug
Dennis Concepcion Martin <dennisconcepcionmartin@gmail.com>
parents:
diff changeset
4 Helper methods
4d259e84160d fix OverFlow bug
Dennis Concepcion Martin <dennisconcepcionmartin@gmail.com>
parents:
diff changeset
5 """
4d259e84160d fix OverFlow bug
Dennis Concepcion Martin <dennisconcepcionmartin@gmail.com>
parents:
diff changeset
6
4d259e84160d fix OverFlow bug
Dennis Concepcion Martin <dennisconcepcionmartin@gmail.com>
parents:
diff changeset
7
28
30535f42d0ff refactor code
Dennis Concepcion Martin <dennisconcepcionmartin@gmail.com>
parents: 12
diff changeset
8 def get_var_int(f):
8
4d259e84160d fix OverFlow bug
Dennis Concepcion Martin <dennisconcepcionmartin@gmail.com>
parents:
diff changeset
9 """
4d259e84160d fix OverFlow bug
Dennis Concepcion Martin <dennisconcepcionmartin@gmail.com>
parents:
diff changeset
10 A VarInt (variable integer) is a field used in transaction data to indicate the number of upcoming fields,
4d259e84160d fix OverFlow bug
Dennis Concepcion Martin <dennisconcepcionmartin@gmail.com>
parents:
diff changeset
11 or the length of an upcoming field.
4d259e84160d fix OverFlow bug
Dennis Concepcion Martin <dennisconcepcionmartin@gmail.com>
parents:
diff changeset
12 More info: https://learnmeabitcoin.com/technical/varint
4d259e84160d fix OverFlow bug
Dennis Concepcion Martin <dennisconcepcionmartin@gmail.com>
parents:
diff changeset
13 :param f: buffer, required
4d259e84160d fix OverFlow bug
Dennis Concepcion Martin <dennisconcepcionmartin@gmail.com>
parents:
diff changeset
14 :return: string
4d259e84160d fix OverFlow bug
Dennis Concepcion Martin <dennisconcepcionmartin@gmail.com>
parents:
diff changeset
15 """
4d259e84160d fix OverFlow bug
Dennis Concepcion Martin <dennisconcepcionmartin@gmail.com>
parents:
diff changeset
16
4d259e84160d fix OverFlow bug
Dennis Concepcion Martin <dennisconcepcionmartin@gmail.com>
parents:
diff changeset
17 prefix = f.read(1).hex()
4d259e84160d fix OverFlow bug
Dennis Concepcion Martin <dennisconcepcionmartin@gmail.com>
parents:
diff changeset
18
4d259e84160d fix OverFlow bug
Dennis Concepcion Martin <dennisconcepcionmartin@gmail.com>
parents:
diff changeset
19 if int(prefix, 16) == 253:
4d259e84160d fix OverFlow bug
Dennis Concepcion Martin <dennisconcepcionmartin@gmail.com>
parents:
diff changeset
20 number_of_transactions = f.read(2)[::-1].hex()
4d259e84160d fix OverFlow bug
Dennis Concepcion Martin <dennisconcepcionmartin@gmail.com>
parents:
diff changeset
21 elif int(prefix, 16) == 254:
4d259e84160d fix OverFlow bug
Dennis Concepcion Martin <dennisconcepcionmartin@gmail.com>
parents:
diff changeset
22 number_of_transactions = f.read(4)[::-1].hex()
4d259e84160d fix OverFlow bug
Dennis Concepcion Martin <dennisconcepcionmartin@gmail.com>
parents:
diff changeset
23 elif int(prefix, 16) == 255:
4d259e84160d fix OverFlow bug
Dennis Concepcion Martin <dennisconcepcionmartin@gmail.com>
parents:
diff changeset
24 number_of_transactions = f.read(8)[::-1].hex()
4d259e84160d fix OverFlow bug
Dennis Concepcion Martin <dennisconcepcionmartin@gmail.com>
parents:
diff changeset
25 else:
4d259e84160d fix OverFlow bug
Dennis Concepcion Martin <dennisconcepcionmartin@gmail.com>
parents:
diff changeset
26 number_of_transactions = prefix
4d259e84160d fix OverFlow bug
Dennis Concepcion Martin <dennisconcepcionmartin@gmail.com>
parents:
diff changeset
27
4d259e84160d fix OverFlow bug
Dennis Concepcion Martin <dennisconcepcionmartin@gmail.com>
parents:
diff changeset
28 return number_of_transactions
4d259e84160d fix OverFlow bug
Dennis Concepcion Martin <dennisconcepcionmartin@gmail.com>
parents:
diff changeset
29
4d259e84160d fix OverFlow bug
Dennis Concepcion Martin <dennisconcepcionmartin@gmail.com>
parents:
diff changeset
30
28
30535f42d0ff refactor code
Dennis Concepcion Martin <dennisconcepcionmartin@gmail.com>
parents: 12
diff changeset
31 def compute_hash(data):
8
4d259e84160d fix OverFlow bug
Dennis Concepcion Martin <dennisconcepcionmartin@gmail.com>
parents:
diff changeset
32 """
4d259e84160d fix OverFlow bug
Dennis Concepcion Martin <dennisconcepcionmartin@gmail.com>
parents:
diff changeset
33 Get hash
4d259e84160d fix OverFlow bug
Dennis Concepcion Martin <dennisconcepcionmartin@gmail.com>
parents:
diff changeset
34 :param data: bytes, required
4d259e84160d fix OverFlow bug
Dennis Concepcion Martin <dennisconcepcionmartin@gmail.com>
parents:
diff changeset
35 :return: string
4d259e84160d fix OverFlow bug
Dennis Concepcion Martin <dennisconcepcionmartin@gmail.com>
parents:
diff changeset
36 """
4d259e84160d fix OverFlow bug
Dennis Concepcion Martin <dennisconcepcionmartin@gmail.com>
parents:
diff changeset
37
4d259e84160d fix OverFlow bug
Dennis Concepcion Martin <dennisconcepcionmartin@gmail.com>
parents:
diff changeset
38 h = hashlib.sha256(data).digest()
4d259e84160d fix OverFlow bug
Dennis Concepcion Martin <dennisconcepcionmartin@gmail.com>
parents:
diff changeset
39 h = hashlib.sha256(h).digest()
4d259e84160d fix OverFlow bug
Dennis Concepcion Martin <dennisconcepcionmartin@gmail.com>
parents:
diff changeset
40
9
e218f70e19e9 refactor code
Dennis Concepcion Martin <dennisconcepcionmartin@gmail.com>
parents: 8
diff changeset
41 return h[::-1].hex()