-
Notifications
You must be signed in to change notification settings - Fork 1
/
peer.py
65 lines (51 loc) · 1.7 KB
/
peer.py
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
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
# import libraries
import json
from Blockchain import Blockchain
from Block import Block
from flask import Flask, request
# app object
app = Flask(__name__)
# blockchain object
blockchain = Blockchain()
# peers list
peers = []
@app.route("/new_transaction", methods=["POST"])
def new_transaction():
file_data = request.get_json() # get json response
required_fields = ["user", "v_file", "file_data", "file_size"]
for field in required_fields:
if not file_data.get(field):
return "Transaction does not have valid fields!", 404
blockchain.add_pending(file_data)
return "Success", 201
@app.route("/chain", methods=["GET"])
def get_chain():
# consensus()
chain = []
for block in blockchain.chain:
chain.append(block.__dict__)
# print chain len
print("Chain Len: {0}".format(len(chain)))
return json.dumps({"length": len(chain), "chain": chain})
@app.route("/mine", methods=["GET"])
def mine_uncofirmed_transactions():
result = blockchain.mine()
if result:
return "Block #{0} mined successfully.".format(result)
else:
return "No pending transactions to mine."
@app.route("/pending_tx")
def get_pending_tx():
return json.dumps(blockchain.pending)
@app.route("/add_block", methods=["POST"])
def validate_and_add_block():
block_data = request.get_json()
block = Block(block_data["index"],
block_data["transactions"], block_data["prev_hash"])
hashl = block_data["hash"]
added = blockchain.add_block(block, hashl)
if not added:
return "The Block was thrown away by the node.", 400
return "The block was added to the blockchain.", 201
# run the app
app.run(port=8800, debug=True)