Omnibus commited on
Commit
2d1234e
·
1 Parent(s): 1613c7f

Update mychain.py

Browse files
Files changed (1) hide show
  1. mychain.py +198 -1
mychain.py CHANGED
@@ -3,11 +3,157 @@ import json
3
  import hashlib
4
  import datetime
5
  from huggingface_hub import (upload_file,HfApi)
6
- #from blockchain import Blockchain as blockchain
7
 
8
  token_self = os.environ['HF_TOKEN']
9
  api = HfApi(token=token_self)
10
  chain_d="chain1.json"
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
11
  class MyChainSend:
12
 
13
  def __init__(self,chain_load,load=None,create=None):
@@ -122,6 +268,7 @@ class MyChainSend:
122
  return out
123
 
124
  def chain_valid(self, chain):
 
125
  previous_block = chain[0]
126
  block_index = 1
127
  out=True
@@ -150,6 +297,56 @@ class MyChainSend:
150
 
151
  return out, ind, mes
152
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
153
  class MyChainRec:
154
 
155
  def __init__(self,chain_load, load=None,create=None):
 
3
  import hashlib
4
  import datetime
5
  from huggingface_hub import (upload_file,HfApi)
 
6
 
7
  token_self = os.environ['HF_TOKEN']
8
  api = HfApi(token=token_self)
9
  chain_d="chain1.json"
10
+
11
+
12
+ class Blockchain:
13
+
14
+ def __init__(self,chain_load,load=None,create=None):
15
+ global main_chain
16
+ main_chain=chain_load
17
+
18
+ self.pending_transactions = []
19
+ self.trans_data_out = []
20
+ if load == None or load=="":
21
+ self.chain = []
22
+ self.create_block(proof=1, previous_hash='0',chain_n=create)
23
+ elif load != None and load !="":
24
+ #r = requests.get(load)
25
+ lod = json.loads(load)
26
+ self.chain = lod
27
+ def reset(self,create=None):
28
+ self.chain = []
29
+ self.pending_transactions = []
30
+ self.create_block(proof=1, previous_hash='0',chain_n=create)
31
+ def create_block(self, proof, previous_hash,chain_r=None,chain_n=None):
32
+ if chain_r=="" or chain_r==None:
33
+ chain_r=f"{main_chain.split('datasets/',1)[1].split('/raw',1)[0]}"
34
+ if chain_n !="" and chain_n !=None:
35
+ chain_n = f"{main_chain.split('main/',1)[1]}{chain_n}"
36
+ if chain_n=="" or chain_n==None:
37
+ chain_n=chain_d
38
+ block = {'index': len(self.chain) + 1,
39
+ 'timestamp': str(datetime.datetime.now()),
40
+ 'transactions': self.pending_transactions,
41
+ 'proof': proof,
42
+ 'previous_hash': previous_hash}
43
+ if self.block_valid(block) == True:
44
+
45
+ self.pending_transactions = []
46
+ self.chain.append(block)
47
+ json_object = json.dumps(self.chain, indent=4)
48
+ with open("tmp.json", "w") as outfile:
49
+ outfile.write(json_object)
50
+ try:
51
+ api.upload_file(
52
+ path_or_fileobj="tmp.json",
53
+ path_in_repo=chain_n,
54
+ repo_id=chain_r,
55
+ token=token_self,
56
+ repo_type="dataset",
57
+ )
58
+ os.remove("tmp.json")
59
+
60
+ except Exception as e:
61
+ print(e)
62
+ pass
63
+ return block
64
+ else:
65
+ block = {"Not Valid"}
66
+ print("not Valid")
67
+ return block
68
+ def print_previous_block(self):
69
+ return self.chain[-1]
70
+ def new_transaction(self, block):
71
+ print (f'block::{block}')
72
+ trans_data = {
73
+ 'name': block[0]['name'],
74
+ 'recipient': block[0]['recipient'],
75
+ 'amount': block[0]['amount'],
76
+ 'balance': block[0]['balance'],
77
+ 'index': block[0]['index'],
78
+ 'timestamp': block[0]['timestamp'],
79
+ 'proof': block[0]['proof'],
80
+ 'previous_hash': block[0]['previous_hash']
81
+ }
82
+ self.trans_data_out.append(trans_data)
83
+ self.pending_transactions.append(block)
84
+ def proof_of_work(self, previous_proof):
85
+ new_proof = 1
86
+ check_proof = False
87
+ while check_proof is False:
88
+ hash_operation = hashlib.sha256(
89
+ str(new_proof**2 - previous_proof**2).encode()).hexdigest()
90
+ if hash_operation[:5] == '00000':
91
+ check_proof = True
92
+ else:
93
+ new_proof += 1
94
+ return new_proof
95
+
96
+ def hash(self, block):
97
+ encoded_block = json.dumps(block, sort_keys=True).encode()
98
+ return hashlib.sha256(encoded_block).hexdigest()
99
+ def block_valid(self, block):
100
+ print (block)
101
+ #prev_block=len(self.chain)
102
+ if len(self.chain) > 0:
103
+ prev_block = len(self.chain)-1
104
+ previous_block = self.chain[prev_block]
105
+ print (previous_block)
106
+ out=True
107
+ ind=None
108
+ mes=None
109
+ if block['previous_hash'] != self.hash(previous_block):
110
+ out=False
111
+ #ind=block_index
112
+ mes='Hash'
113
+
114
+ previous_proof = previous_block['proof']
115
+ proof = block['proof']
116
+ hash_operation = hashlib.sha256(
117
+ str(proof**2 - previous_proof**2).encode()).hexdigest()
118
+
119
+ if hash_operation[:5] != '00000':
120
+ out=False
121
+ #ind=block_index+1
122
+ mes='Proof'
123
+ previous_block = block
124
+ else:
125
+ out = True
126
+ return out
127
+
128
+ def chain_valid(self, chain):
129
+ previous_block = chain[0]
130
+ block_index = 1
131
+ out=True
132
+ ind=None
133
+ mes=None
134
+ while block_index < len(chain):
135
+ block = chain[block_index]
136
+ if block['previous_hash'] != self.hash(previous_block):
137
+ out=False
138
+ ind=block_index
139
+ mes='Hash'
140
+ break
141
+
142
+ previous_proof = previous_block['proof']
143
+ proof = block['proof']
144
+ hash_operation = hashlib.sha256(
145
+ str(proof**2 - previous_proof**2).encode()).hexdigest()
146
+
147
+ if hash_operation[:5] != '00000':
148
+ out=False
149
+ ind=block_index+1
150
+ mes='Proof'
151
+ break
152
+ previous_block = block
153
+ block_index += 1
154
+
155
+ return out, ind, mes
156
+
157
  class MyChainSend:
158
 
159
  def __init__(self,chain_load,load=None,create=None):
 
268
  return out
269
 
270
  def chain_valid(self, chain):
271
+
272
  previous_block = chain[0]
273
  block_index = 1
274
  out=True
 
297
 
298
  return out, ind, mes
299
 
300
+ def deep_valid_send(self, chain1=self.chain,chain2=blockchain.chain):
301
+ previous_block = chain[0]
302
+ block_index = 2
303
+ out=True
304
+ ind=None
305
+ mes=None
306
+ while block_index < len(chain1):
307
+ block = chain[block_index]
308
+ block_ind = block['block']
309
+ block2 = chain2[block_ind]
310
+
311
+ check1 = {
312
+ 'timestamp':block['timestamp'],
313
+ 'recipient':block['transactions']['recipient'],
314
+ 'amount':block['transactions']['amount'],
315
+ 'balance':block['transactions']['balance'],
316
+ 'balance2':block['balance'],
317
+ 'proof':block['proof'],
318
+ 'previous_hash':block['previous_hash']
319
+ }
320
+ zz=1
321
+ while zz < len(block2[transactions]):
322
+
323
+ check2 = {
324
+ 'timestamp':block2['timestamp'],
325
+ 'sender':block2['transactions'][zz][0]['name'],
326
+ 'recipient':block2['transactions'][zz][0]['recipient'],
327
+ 'amount':block2['transactions'][zz][0]['amount'],
328
+ 'balance':block2['transactions'][zz][0]['balance'],
329
+ 'balance2':block2['transactions'][zz][0]['balance'],
330
+ 'proof':block2['proof'],
331
+ 'previous_hash':block2['previous_hash']
332
+ }
333
+ zz+=1
334
+
335
+
336
+ if self.hash(check1) != self.hash(check2):
337
+ out=False
338
+ ind=block_index
339
+ mes='Hash'
340
+ break
341
+
342
+ if out = False:
343
+ break
344
+ block_index += 1
345
+
346
+ return out, ind, mes
347
+
348
+
349
+
350
  class MyChainRec:
351
 
352
  def __init__(self,chain_load, load=None,create=None):