Omnibus commited on
Commit
a5a5b67
·
1 Parent(s): ae8d1d7

Update mychain.py

Browse files
Files changed (1) hide show
  1. mychain.py +140 -1
mychain.py CHANGED
@@ -7,7 +7,146 @@ from huggingface_hub import (upload_file,HfApi)
7
  token_self = os.environ['HF_TOKEN']
8
  api = HfApi(token=token_self)
9
 
10
- class MyChain:
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
11
 
12
  def __init__(self,chain_load,load=None,create=None):
13
  global main_chain
 
7
  token_self = os.environ['HF_TOKEN']
8
  api = HfApi(token=token_self)
9
 
10
+ class MyChainSend:
11
+
12
+ def __init__(self,chain_load,load=None,create=None):
13
+ global main_chain
14
+ main_chain=chain_load
15
+
16
+ self.pending_transactions = []
17
+ if load == None or load=="":
18
+ self.chain = []
19
+ self.create_block(proof=1, previous_hash='0',chain_n=create)
20
+ elif load != None and load !="":
21
+ #r = requests.get(load)
22
+ lod = json.loads(load)
23
+ self.chain = lod
24
+ def reset(self,create=None):
25
+ self.chain = []
26
+ self.pending_transactions = []
27
+ self.create_block(proof=1, previous_hash='0',chain_n=create)
28
+ def create_block(self, balance, proof, previous_hash,chain_r=None,chain_n=None):
29
+ if chain_r=="" or chain_r==None:
30
+ chain_r=f"{main_chain.split('datasets/',1)[1].split('/raw',1)[0]}"
31
+ if chain_n !="" and chain_n !=None:
32
+ chain_n = f"{main_chain.split('main/',1)[1]}{chain_n}.json"
33
+ if chain_n=="" or chain_n==None:
34
+ chain_n=chain_d
35
+ block = {'index': len(self.chain) + 1,
36
+ 'timestamp': str(datetime.datetime.now()),
37
+ 'transactions': self.pending_transactions,
38
+ 'balance': balance,
39
+ 'proof': proof,
40
+ 'previous_hash': previous_hash}
41
+ if self.block_valid(block) == True:
42
+
43
+ self.pending_transactions = []
44
+ self.chain.append(block)
45
+ json_object = json.dumps(self.chain, indent=4)
46
+ with open("tmp.json", "w") as outfile:
47
+ outfile.write(json_object)
48
+ try:
49
+ api.upload_file(
50
+ path_or_fileobj="tmp.json",
51
+ path_in_repo=chain_n,
52
+ repo_id=chain_r,
53
+ token=token_self,
54
+ repo_type="dataset",
55
+ )
56
+ os.remove("tmp.json")
57
+
58
+ except Exception as e:
59
+ print(e)
60
+ pass
61
+ return block
62
+ else:
63
+ block = {"Not Valid"}
64
+ print("not Valid")
65
+ return block
66
+ def print_previous_block(self):
67
+ return self.chain[-1]
68
+ def new_transaction(self, sender, recipient, amount, balance):
69
+ transaction = {
70
+ 'sender': sender,
71
+ 'recipient': recipient,
72
+ 'amount': amount,
73
+ 'balance': balance
74
+ }
75
+ self.pending_transactions.append(transaction)
76
+ def proof_of_work(self, previous_proof):
77
+ new_proof = 1
78
+ check_proof = False
79
+ while check_proof is False:
80
+ hash_operation = hashlib.sha256(
81
+ str(new_proof**2 - previous_proof**2).encode()).hexdigest()
82
+ if hash_operation[:5] == '00000':
83
+ check_proof = True
84
+ else:
85
+ new_proof += 1
86
+ return new_proof
87
+
88
+ def hash(self, block):
89
+ encoded_block = json.dumps(block, sort_keys=True).encode()
90
+ return hashlib.sha256(encoded_block).hexdigest()
91
+ def block_valid(self, block):
92
+ print (block)
93
+ #prev_block=len(self.chain)
94
+ if len(self.chain) > 0:
95
+ prev_block = len(self.chain)-1
96
+ previous_block = self.chain[prev_block]
97
+ print (previous_block)
98
+ out=True
99
+ ind=None
100
+ mes=None
101
+ if block['previous_hash'] != self.hash(previous_block):
102
+ out=False
103
+ #ind=block_index
104
+ mes='Hash'
105
+
106
+ previous_proof = previous_block['proof']
107
+ proof = block['proof']
108
+ hash_operation = hashlib.sha256(
109
+ str(proof**2 - previous_proof**2).encode()).hexdigest()
110
+
111
+ if hash_operation[:5] != '00000':
112
+ out=False
113
+ #ind=block_index+1
114
+ mes='Proof'
115
+ previous_block = block
116
+ else:
117
+ out = True
118
+ return out
119
+
120
+ def chain_valid(self, chain):
121
+ previous_block = chain[0]
122
+ block_index = 1
123
+ out=True
124
+ ind=None
125
+ mes=None
126
+ while block_index < len(chain):
127
+ block = chain[block_index]
128
+ if block['previous_hash'] != self.hash(previous_block):
129
+ out=False
130
+ ind=block_index
131
+ mes='Hash'
132
+ break
133
+
134
+ previous_proof = previous_block['proof']
135
+ proof = block['proof']
136
+ hash_operation = hashlib.sha256(
137
+ str(proof**2 - previous_proof**2).encode()).hexdigest()
138
+
139
+ if hash_operation[:5] != '00000':
140
+ out=False
141
+ ind=block_index+1
142
+ mes='Proof'
143
+ break
144
+ previous_block = block
145
+ block_index += 1
146
+
147
+ return out, ind, mes
148
+
149
+ class MyChainRec:
150
 
151
  def __init__(self,chain_load,load=None,create=None):
152
  global main_chain