-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathblockchain.py
More file actions
40 lines (32 loc) · 1.05 KB
/
blockchain.py
File metadata and controls
40 lines (32 loc) · 1.05 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
import logging
import pickle
from typing import List
from block import Block
logging.basicConfig(level=logging.INFO)
class Blockchain:
def __init__(self, proof_length=4):
"""
Initializes a new chain to which blocks can be added.
:param proof_length:
"""
logging.info("Creating a new blockchain...")
self.chain: List[Block] = []
self.proof_length = proof_length
logging.info("Adding genesis block...")
with open("genesis_block", "rb") as f:
genesis_block = pickle.loads(f.read())
self.chain.append(genesis_block)
@property
def length(self) -> int:
return len(self.chain)
@property
def first_block(self) -> Block:
return self.chain[0]
@property
def last_block(self) -> Block:
return self.chain[-1]
def add_block(self, block: Block) -> None:
logging.info(f"Adding block: {block}")
self.last_block.next = block
self.chain.append(block)
logging.info(f"Block: {block} added to chain: {self}")