utils.py 1.0 KB

1234567891011121314151617181920212223242526272829303132
  1. from datetime import datetime
  2. import src.proof_of_work
  3. import src.block
  4. from src.block import *
  5. from src.blockchain import *
  6. from src.crypto import *
  7. from src.transaction import *
  8. import logging
  9. logging.basicConfig(level=logging.INFO, format="%(asctime)s %(levelname)-8s %(message)s")
  10. def extend_blockchain(chain, trans:list=None, verify_res=True):
  11. ts = datetime.utcfromtimestamp(0)
  12. new_block = Block.create(chain, trans, ts)
  13. new_block.hash = new_block.get_hash()
  14. new_chain = chain.try_append(new_block)
  15. assert (new_chain is not None) == verify_res
  16. return new_chain
  17. def trans_as_input(trans, out_idx=0):
  18. assert len(trans.targets) > out_idx
  19. return TransactionInput(trans.get_hash(), out_idx)
  20. def new_trans(old_trans, out_idx=0):
  21. amount = old_trans.targets[out_idx].amount
  22. key = Signing.generate_private_key()
  23. trans = Transaction([trans_as_input(old_trans, out_idx)],
  24. [TransactionTarget(key, amount)])
  25. trans.sign([old_trans.targets[out_idx].recipient_pk])
  26. return trans