Spaces:
Runtime error
Runtime error
Update mychain.py
Browse files- mychain.py +143 -0
mychain.py
CHANGED
|
@@ -3,6 +3,7 @@ import json
|
|
| 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)
|
|
@@ -34,6 +35,7 @@ class MyChainSend:
|
|
| 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,
|
|
@@ -173,6 +175,7 @@ class MyChainRec:
|
|
| 173 |
chain_n=chain_d
|
| 174 |
block = {'index': len(self.chain) + 1,
|
| 175 |
'timestamp': str(datetime.datetime.now()),
|
|
|
|
| 176 |
'transactions': self.pending_transactions,
|
| 177 |
'balance': balance,
|
| 178 |
'proof': proof,
|
|
@@ -255,6 +258,146 @@ class MyChainRec:
|
|
| 255 |
out = True
|
| 256 |
return out
|
| 257 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 258 |
def chain_valid(self, chain):
|
| 259 |
previous_block = chain[0]
|
| 260 |
block_index = 1
|
|
|
|
| 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)
|
|
|
|
| 35 |
chain_n=chain_d
|
| 36 |
block = {'index': len(self.chain) + 1,
|
| 37 |
'timestamp': str(datetime.datetime.now()),
|
| 38 |
+
'block': blockchain.print_previous_block,
|
| 39 |
'transactions': self.pending_transactions,
|
| 40 |
'balance': balance,
|
| 41 |
'proof': proof,
|
|
|
|
| 175 |
chain_n=chain_d
|
| 176 |
block = {'index': len(self.chain) + 1,
|
| 177 |
'timestamp': str(datetime.datetime.now()),
|
| 178 |
+
'block': blockchain.print_previous_block,
|
| 179 |
'transactions': self.pending_transactions,
|
| 180 |
'balance': balance,
|
| 181 |
'proof': proof,
|
|
|
|
| 258 |
out = True
|
| 259 |
return out
|
| 260 |
|
| 261 |
+
def chain_valid(self, chain):
|
| 262 |
+
previous_block = chain[0]
|
| 263 |
+
block_index = 1
|
| 264 |
+
out=True
|
| 265 |
+
ind=None
|
| 266 |
+
mes=None
|
| 267 |
+
while block_index < len(chain):
|
| 268 |
+
block = chain[block_index]
|
| 269 |
+
if block['previous_hash'] != self.hash(previous_block):
|
| 270 |
+
out=False
|
| 271 |
+
ind=block_index
|
| 272 |
+
mes='Hash'
|
| 273 |
+
break
|
| 274 |
+
|
| 275 |
+
previous_proof = previous_block['proof']
|
| 276 |
+
proof = block['proof']
|
| 277 |
+
hash_operation = hashlib.sha256(
|
| 278 |
+
str(proof**2 - previous_proof**2).encode()).hexdigest()
|
| 279 |
+
|
| 280 |
+
if hash_operation[:5] != '00000':
|
| 281 |
+
out=False
|
| 282 |
+
ind=block_index+1
|
| 283 |
+
mes='Proof'
|
| 284 |
+
break
|
| 285 |
+
previous_block = block
|
| 286 |
+
block_index += 1
|
| 287 |
+
|
| 288 |
+
return out, ind, mes
|
| 289 |
+
|
| 290 |
+
|
| 291 |
+
class MyChainTrans:
|
| 292 |
+
|
| 293 |
+
def __init__(self,chain_load,block_trans,load=None,create=None):
|
| 294 |
+
global main_chain
|
| 295 |
+
main_chain=chain_load
|
| 296 |
+
|
| 297 |
+
self.pending_transactions = []
|
| 298 |
+
if load == None or load=="":
|
| 299 |
+
self.chain = []
|
| 300 |
+
self.create_block(balance=0,proof=1, previous_hash='0',chain_n=create)
|
| 301 |
+
elif load != None and load !="":
|
| 302 |
+
#r = requests.get(load)
|
| 303 |
+
lod = json.loads(load)
|
| 304 |
+
self.chain = lod
|
| 305 |
+
def reset(self,create=None):
|
| 306 |
+
self.chain = []
|
| 307 |
+
self.pending_transactions = []
|
| 308 |
+
self.create_block(proof=1, previous_hash='0',chain_n=create)
|
| 309 |
+
def create_block(self, balance, proof, previous_hash,chain_r=None,chain_n=None):
|
| 310 |
+
if chain_r=="" or chain_r==None:
|
| 311 |
+
chain_r=f"{main_chain.split('datasets/',1)[1].split('/raw',1)[0]}"
|
| 312 |
+
if chain_n !="" and chain_n !=None:
|
| 313 |
+
chain_n = f"{main_chain.split('main/',1)[1]}{chain_n}.json"
|
| 314 |
+
if chain_n=="" or chain_n==None:
|
| 315 |
+
chain_n=chain_d
|
| 316 |
+
block = {'block':blockchain.print_previous_block,
|
| 317 |
+
'index': len(self.chain) + 1,
|
| 318 |
+
'timestamp': str(datetime.datetime.now()),
|
| 319 |
+
'transactions': self.pending_transactions,
|
| 320 |
+
'proof': proof,
|
| 321 |
+
'previous_hash': previous_hash}
|
| 322 |
+
if self.block_valid(block) == True:
|
| 323 |
+
|
| 324 |
+
self.pending_transactions = []
|
| 325 |
+
self.chain.append(block)
|
| 326 |
+
json_object = json.dumps(self.chain, indent=4)
|
| 327 |
+
with open("tmp.json", "w") as outfile:
|
| 328 |
+
outfile.write(json_object)
|
| 329 |
+
try:
|
| 330 |
+
api.upload_file(
|
| 331 |
+
path_or_fileobj="tmp.json",
|
| 332 |
+
path_in_repo=chain_n,
|
| 333 |
+
repo_id=chain_r,
|
| 334 |
+
token=token_self,
|
| 335 |
+
repo_type="dataset",
|
| 336 |
+
)
|
| 337 |
+
os.remove("tmp.json")
|
| 338 |
+
|
| 339 |
+
except Exception as e:
|
| 340 |
+
print(e)
|
| 341 |
+
pass
|
| 342 |
+
return block
|
| 343 |
+
else:
|
| 344 |
+
block = {"Not Valid"}
|
| 345 |
+
print("not Valid")
|
| 346 |
+
return block
|
| 347 |
+
def print_previous_block(self):
|
| 348 |
+
return self.chain[-1]
|
| 349 |
+
def new_transaction(self, sender, recipient, amount, balance):
|
| 350 |
+
transaction = {
|
| 351 |
+
'sender': sender,
|
| 352 |
+
'recipient': recipient,
|
| 353 |
+
'amount': amount,
|
| 354 |
+
'balance': balance
|
| 355 |
+
}
|
| 356 |
+
self.pending_transactions.append(transaction)
|
| 357 |
+
def proof_of_work(self, previous_proof):
|
| 358 |
+
new_proof = 1
|
| 359 |
+
check_proof = False
|
| 360 |
+
while check_proof is False:
|
| 361 |
+
hash_operation = hashlib.sha256(
|
| 362 |
+
str(new_proof**2 - previous_proof**2).encode()).hexdigest()
|
| 363 |
+
if hash_operation[:5] == '00000':
|
| 364 |
+
check_proof = True
|
| 365 |
+
else:
|
| 366 |
+
new_proof += 1
|
| 367 |
+
return new_proof
|
| 368 |
+
|
| 369 |
+
def hash(self, block):
|
| 370 |
+
encoded_block = json.dumps(block, sort_keys=True).encode()
|
| 371 |
+
return hashlib.sha256(encoded_block).hexdigest()
|
| 372 |
+
def block_valid(self, block):
|
| 373 |
+
#print (block)
|
| 374 |
+
#prev_block=len(self.chain)
|
| 375 |
+
if len(self.chain) > 0:
|
| 376 |
+
prev_block = len(self.chain)-1
|
| 377 |
+
previous_block = self.chain[prev_block]
|
| 378 |
+
#print (previous_block)
|
| 379 |
+
out=True
|
| 380 |
+
ind=None
|
| 381 |
+
mes=None
|
| 382 |
+
if block['previous_hash'] != self.hash(previous_block):
|
| 383 |
+
out=False
|
| 384 |
+
#ind=block_index
|
| 385 |
+
mes='Hash'
|
| 386 |
+
|
| 387 |
+
previous_proof = previous_block['proof']
|
| 388 |
+
proof = block['proof']
|
| 389 |
+
hash_operation = hashlib.sha256(
|
| 390 |
+
str(proof**2 - previous_proof**2).encode()).hexdigest()
|
| 391 |
+
|
| 392 |
+
if hash_operation[:5] != '00000':
|
| 393 |
+
out=False
|
| 394 |
+
#ind=block_index+1
|
| 395 |
+
mes='Proof'
|
| 396 |
+
previous_block = block
|
| 397 |
+
else:
|
| 398 |
+
out = True
|
| 399 |
+
return out
|
| 400 |
+
|
| 401 |
def chain_valid(self, chain):
|
| 402 |
previous_block = chain[0]
|
| 403 |
block_index = 1
|