Skip to content

Commit fc1d749

Browse files
Merge pull request #1 from code-architect/IssueBranch1
Issue: Not appending into json, creating seperate array object
2 parents e73c4f7 + 29a1037 commit fc1d749

File tree

5 files changed

+217
-8
lines changed

5 files changed

+217
-8
lines changed

.gitignore

+2-1
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
11
blockchain_project
22
test.txt
33
.idea
4-
**/__pycache__/
4+
**/__pycache__/
5+
test.json

Blockchain/Backend/core/blockchain.py

+15-6
Original file line numberDiff line numberDiff line change
@@ -7,16 +7,24 @@
77
from Blockchain.Backend.core.block import Block
88
from Blockchain.Backend.core.blockheader import BlockHeader
99
from Blockchain.Backend.util.util import hash256
10+
from Blockchain.Backend.core.database.database import BlockchainDB
1011

1112
ZERO_HASH = '0' * 64
1213
VERSION = 1
1314

1415

1516
class Blockchain:
1617
def __init__(self):
17-
self.chain = []
1818
self.GenesisBlock()
1919

20+
def write_on_disk(self, block):
21+
blockchainDB = BlockchainDB()
22+
blockchainDB.write(block)
23+
24+
def fetch_last_block(self):
25+
blockchainDB = BlockchainDB()
26+
return blockchainDB.lastBlock()
27+
2028
def GenesisBlock(self):
2129
BlockHeight = 0
2230
prevBlockHash = ZERO_HASH
@@ -30,14 +38,15 @@ def addBlock(self, BlockHeight, prevBlockHash):
3038
blockheader = BlockHeader(version=VERSION, prevBlockHash=prevBlockHash, merkleRoot=merkleRoot,
3139
timestamp=timestamp, bits=bits)
3240
blockheader.mine()
33-
self.chain.append(Block(BlockHeight, 1, blockheader.__dict__, 1, Transaction).__dict__)
34-
print(json.dumps(self.chain, indent=4))
41+
self.write_on_disk([Block(BlockHeight, 1, blockheader.__dict__, 1, Transaction).__dict__])
3542

3643
def main(self):
3744
while True:
38-
lastBlock = self.chain[::-1]
39-
BlockHeight = lastBlock[0]["Height"] + 1
40-
prevBlockHash = lastBlock[0]["BlockHeader"]["blockHash"]
45+
lastBlock = self.fetch_last_block()
46+
print(json.dumps(lastBlock, indent=4))
47+
sys.exit()
48+
BlockHeight = lastBlock["Height"] + 1
49+
prevBlockHash = lastBlock["BlockHeader"]["blockHash"]
4150
self.addBlock(BlockHeight, prevBlockHash)
4251

4352

Original file line numberDiff line numberDiff line change
@@ -0,0 +1,45 @@
1+
import os.path
2+
import json
3+
4+
5+
class BaseDB:
6+
def __init__(self):
7+
self.basepath = 'data'
8+
self.filepath = '/'.join((self.basepath, self.filename))
9+
10+
def read(self):
11+
if not os.path.exists(self.filepath):
12+
print(f"File named {self.filepath} do not exists")
13+
return False
14+
15+
with open(self.filepath, "r") as file:
16+
raw = file.readline()
17+
18+
if len(raw) > 0:
19+
data = json.loads(raw)
20+
else:
21+
data = []
22+
return data
23+
24+
def write(self, item):
25+
data = self.read()
26+
if data:
27+
data = data + item
28+
else:
29+
data = item
30+
31+
with open(self.filepath, "w+") as file:
32+
file.write(json.dumps(data))
33+
34+
35+
class BlockchainDB(BaseDB):
36+
def __init__(self):
37+
self.filename = 'blockchain'
38+
super().__init__()
39+
40+
def lastBlock(self):
41+
data = self.read()
42+
43+
if data:
44+
return data[-1]
45+

data/blockchain

+1
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
[{"Height": 0, "Blocksize": 1, "BlockHeader": {"bits": "ffff001f", "timestamp": 1692729445, "merkleRoot": "01d3c8ffac385f49854b12bc69248645efddb80a0435dd09631643bdc605d1d1", "prevBlockHash": "0000000000000000000000000000000000000000000000000000000000000000", "version": 1, "nonce": 15295, "blockHash": "00009ebc50942c8801ec6c875b236606dfd8b1e9ef205f74690c341460e60ef7"}, "TxCount": 1, "Txs": "Code Architect sent 0 Bitcoins to Indranil"}, {"Height": 1, "Blocksize": 1, "BlockHeader": {"bits": "ffff001f", "timestamp": 1692729447, "merkleRoot": "ede8645e1159205c35365fc6b765fbea7acab3d30d83f2094e87b1dc2829b69b", "prevBlockHash": "00009ebc50942c8801ec6c875b236606dfd8b1e9ef205f74690c341460e60ef7", "version": 1, "nonce": 109115, "blockHash": "0000cae118f59ae712cd5d62865ad6144bd2cf80c9e1c7169a96c88e6e862f48"}, "TxCount": 1, "Txs": "Code Architect sent 1 Bitcoins to Indranil"}, {"Height": 2, "Blocksize": 1, "BlockHeader": {"bits": "ffff001f", "timestamp": 1692729460, "merkleRoot": "ee3d44bff24ade0bd29fbf90bcfa1a8a2ef2c991a92bf92e8e8d7bf85cf75e30", "prevBlockHash": "0000cae118f59ae712cd5d62865ad6144bd2cf80c9e1c7169a96c88e6e862f48", "version": 1, "nonce": 183684, "blockHash": "0000916dee0bbd97e527af45e286ab8e21cc7a3a8af60e2b908603300d4a0fac"}, "TxCount": 1, "Txs": "Code Architect sent 2 Bitcoins to Indranil"}, {"Height": 3, "Blocksize": 1, "BlockHeader": {"bits": "ffff001f", "timestamp": 1692729484, "merkleRoot": "d0249e654794fa76a823925895732057dc5c51075131f4784a65d31f93754113", "prevBlockHash": "0000916dee0bbd97e527af45e286ab8e21cc7a3a8af60e2b908603300d4a0fac", "version": 1, "nonce": 144594, "blockHash": "000018ef9505346130b507c3e1f7cf5c6c9dcddbc738c524b4514a7d2ed238ae"}, "TxCount": 1, "Txs": "Code Architect sent 3 Bitcoins to Indranil"}, {"Height": 4, "Blocksize": 1, "BlockHeader": {"bits": "ffff001f", "timestamp": 1692729505, "merkleRoot": "3bf90cb05ba2fb3325fec0def457cd7cc6126b204c8963d4939350b2add27c6d", "prevBlockHash": "000018ef9505346130b507c3e1f7cf5c6c9dcddbc738c524b4514a7d2ed238ae", "version": 1, "nonce": 161055, "blockHash": "00009c9356f959c582a0061a19248b8ce5b3c87e53c614e1e0368afcbe2ed4fd"}, "TxCount": 1, "Txs": "Code Architect sent 4 Bitcoins to Indranil"}, {"Height": 5, "Blocksize": 1, "BlockHeader": {"bits": "ffff001f", "timestamp": 1692729528, "merkleRoot": "5957ff49fe734ffde6fb685fd313afff54a59671e98acab4f5c84fa8ded0b177", "prevBlockHash": "00009c9356f959c582a0061a19248b8ce5b3c87e53c614e1e0368afcbe2ed4fd", "version": 1, "nonce": 36012, "blockHash": "000042ab6b3283cdb973a8a35968c8b90fb88c8175cfcfbbc5e54928004de991"}, "TxCount": 1, "Txs": "Code Architect sent 5 Bitcoins to Indranil"}, {"Height": 0, "Blocksize": 1, "BlockHeader": {"bits": "ffff001f", "timestamp": 1692729914, "merkleRoot": "01d3c8ffac385f49854b12bc69248645efddb80a0435dd09631643bdc605d1d1", "prevBlockHash": "0000000000000000000000000000000000000000000000000000000000000000", "version": 1, "nonce": 9509, "blockHash": "0000c1633833c5d777fc47490622da88377deebef93af6c850416819946ee7bf"}, "TxCount": 1, "Txs": "Code Architect sent 0 Bitcoins to Indranil"}, {"Height": 0, "Blocksize": 1, "BlockHeader": {"bits": "ffff001f", "timestamp": 1692729937, "merkleRoot": "01d3c8ffac385f49854b12bc69248645efddb80a0435dd09631643bdc605d1d1", "prevBlockHash": "0000000000000000000000000000000000000000000000000000000000000000", "version": 1, "nonce": 11483, "blockHash": "000022531d37957f78d5bde2e2e82fbc68d218f2e7495e1c610e7a63a290e941"}, "TxCount": 1, "Txs": "Code Architect sent 0 Bitcoins to Indranil"}]

test.txt

+154-1
Original file line numberDiff line numberDiff line change
@@ -59,4 +59,157 @@
5959
"TxCount": 1,
6060
"Txs": "Code Architect sent 3 Bitcoins to Indranil"
6161
}
62-
]
62+
]
63+
========================================================================================================================
64+
[
65+
{
66+
"Height":0,
67+
"Blocksize":1,
68+
"BlockHeader":{
69+
"bits":"ffff001f",
70+
"timestamp":1692657500,
71+
"merkleRoot":"01d3c8ffac385f49854b12bc69248645efddb80a0435dd09631643bdc605d1d1",
72+
"prevBlockHash":"0000000000000000000000000000000000000000000000000000000000000000",
73+
"version":1,
74+
"nonce":108714,
75+
"blockHash":"00003170f01bbe52b51e8492d8e5728fe73066a9441203951b2f9d6209a69445"
76+
},
77+
"TxCount":1,
78+
"Txs":"Code Architect sent 0 Bitcoins to Indranil"
79+
},
80+
{
81+
"Height":1,
82+
"Blocksize":1,
83+
"BlockHeader":{
84+
"bits":"ffff001f",
85+
"timestamp":1692657523,
86+
"merkleRoot":"ede8645e1159205c35365fc6b765fbea7acab3d30d83f2094e87b1dc2829b69b",
87+
"prevBlockHash":"00003170f01bbe52b51e8492d8e5728fe73066a9441203951b2f9d6209a69445",
88+
"version":1,
89+
"nonce":111792,
90+
"blockHash":"0000f439a736c7911b8dee1fd9c923dbbe3ee0c978b82738487f8b6938e63f9b"
91+
},
92+
"TxCount":1,
93+
"Txs":"Code Architect sent 1 Bitcoins to Indranil"
94+
},
95+
{
96+
"Height":2,
97+
"Blocksize":1,
98+
"BlockHeader":{
99+
"bits":"ffff001f",
100+
"timestamp":1692657548,
101+
"merkleRoot":"ee3d44bff24ade0bd29fbf90bcfa1a8a2ef2c991a92bf92e8e8d7bf85cf75e30",
102+
"prevBlockHash":"0000f439a736c7911b8dee1fd9c923dbbe3ee0c978b82738487f8b6938e63f9b",
103+
"version":1,
104+
"nonce":21582,
105+
"blockHash":"00004f8a782317bcf9f3c8186b9b691b55184935b24818027a8563d14ad082e2"
106+
},
107+
"TxCount":1,
108+
"Txs":"Code Architect sent 2 Bitcoins to Indranil"
109+
},
110+
{
111+
"Height":3,
112+
"Blocksize":1,
113+
"BlockHeader":{
114+
"bits":"ffff001f",
115+
"timestamp":1692657554,
116+
"merkleRoot":"d0249e654794fa76a823925895732057dc5c51075131f4784a65d31f93754113",
117+
"prevBlockHash":"00004f8a782317bcf9f3c8186b9b691b55184935b24818027a8563d14ad082e2",
118+
"version":1,
119+
"nonce":66076,
120+
"blockHash":"00002b0d684dcfefa1b5ba2932d07fc37d15bfc0daab63b7c3268f9d5e0f83ee"
121+
},
122+
"TxCount":1,
123+
"Txs":"Code Architect sent 3 Bitcoins to Indranil"
124+
},
125+
{
126+
"Height":4,
127+
"Blocksize":1,
128+
"BlockHeader":{
129+
"bits":"ffff001f",
130+
"timestamp":1692657569,
131+
"merkleRoot":"3bf90cb05ba2fb3325fec0def457cd7cc6126b204c8963d4939350b2add27c6d",
132+
"prevBlockHash":"00002b0d684dcfefa1b5ba2932d07fc37d15bfc0daab63b7c3268f9d5e0f83ee",
133+
"version":1,
134+
"nonce":180264,
135+
"blockHash":"0000fcf8280a4b1257c80c78356ad871029c73eefea962a5294b7cb4dc4b6286"
136+
},
137+
"TxCount":1,
138+
"Txs":"Code Architect sent 4 Bitcoins to Indranil"
139+
},
140+
{
141+
"Height":5,
142+
"Blocksize":1,
143+
"BlockHeader":{
144+
"bits":"ffff001f",
145+
"timestamp":1692657614,
146+
"merkleRoot":"5957ff49fe734ffde6fb685fd313afff54a59671e98acab4f5c84fa8ded0b177",
147+
"prevBlockHash":"0000fcf8280a4b1257c80c78356ad871029c73eefea962a5294b7cb4dc4b6286",
148+
"version":1,
149+
"nonce":30409,
150+
"blockHash":"0000b23e97e6bb1d4dbe7038919fef40c858e5c322ddd8098d4afeb6d219563d"
151+
},
152+
"TxCount":1,
153+
"Txs":"Code Architect sent 5 Bitcoins to Indranil"
154+
},
155+
{
156+
"Height":6,
157+
"Blocksize":1,
158+
"BlockHeader":{
159+
"bits":"ffff001f",
160+
"timestamp":1692657622,
161+
"merkleRoot":"fc73585acb5dfb029ad461c0a2caa7259d33e3e9c613eec7ea9926a7fdceb92c",
162+
"prevBlockHash":"0000b23e97e6bb1d4dbe7038919fef40c858e5c322ddd8098d4afeb6d219563d",
163+
"version":1,
164+
"nonce":77209,
165+
"blockHash":"00007c9c68f3363a4ff405ee88e33a35977d81671b83e6aa43a0339b5c95fee2"
166+
},
167+
"TxCount":1,
168+
"Txs":"Code Architect sent 6 Bitcoins to Indranil"
169+
},
170+
{
171+
"Height":7,
172+
"Blocksize":1,
173+
"BlockHeader":{
174+
"bits":"ffff001f",
175+
"timestamp":1692657640,
176+
"merkleRoot":"c60d4f8469964e9fd702615c38ff489206fd29631fa1d6adcc375f915e44a7b2",
177+
"prevBlockHash":"00007c9c68f3363a4ff405ee88e33a35977d81671b83e6aa43a0339b5c95fee2",
178+
"version":1,
179+
"nonce":29698,
180+
"blockHash":"0000345d065bf285c91933744e9f09d62a44f1752455ea1fb35520b2cb4eedda"
181+
},
182+
"TxCount":1,
183+
"Txs":"Code Architect sent 7 Bitcoins to Indranil"
184+
},
185+
{
186+
"Height":8,
187+
"Blocksize":1,
188+
"BlockHeader":{
189+
"bits":"ffff001f",
190+
"timestamp":1692657648,
191+
"merkleRoot":"4150d4d57d892d62b513a6e24e6a53c040294a1e5bf9bedc802015c87ece6a68",
192+
"prevBlockHash":"0000345d065bf285c91933744e9f09d62a44f1752455ea1fb35520b2cb4eedda",
193+
"version":1,
194+
"nonce":20037,
195+
"blockHash":"0000b3d936b8b1ded816a1f17b9011a672ebdbd383ceb9a793a68297775a11cf"
196+
},
197+
"TxCount":1,
198+
"Txs":"Code Architect sent 8 Bitcoins to Indranil"
199+
},
200+
{
201+
"Height":9,
202+
"Blocksize":1,
203+
"BlockHeader":{
204+
"bits":"ffff001f",
205+
"timestamp":1692657652,
206+
"merkleRoot":"0bd8e4e8e1f1f496d7335c684fd85d9926ff1527948d40d2b992d880a4914d70",
207+
"prevBlockHash":"0000b3d936b8b1ded816a1f17b9011a672ebdbd383ceb9a793a68297775a11cf",
208+
"version":1,
209+
"nonce":69766,
210+
"blockHash":"0000b5ef3d138dc2961e25c5e389189a56469ac338a972bc85d361834420c6a9"
211+
},
212+
"TxCount":1,
213+
"Txs":"Code Architect sent 9 Bitcoins to Indranil"
214+
}
215+
]

0 commit comments

Comments
 (0)