verifications.py 1.6 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152
  1. from .utils import *
  2. import traceback
  3. errors = 0
  4. def trans_test(fn):
  5. """ Immediately runs a test that requires a blockchain, and a transaction with private key in that blockchain. """
  6. gen_chain = Blockchain([GENESIS_BLOCK])
  7. assert gen_chain.verify_all()
  8. key = Signing.generate_private_key()
  9. reward_trans = Transaction([], [TransactionTarget(key, gen_chain.compute_blockreward(gen_chain.head))])
  10. chain = extend_blockchain(gen_chain, [reward_trans])
  11. try:
  12. fn(chain, reward_trans)
  13. except:
  14. global errors
  15. errors += 1
  16. traceback.print_exc()
  17. @trans_test
  18. def test_double_spend1(chain, reward_trans):
  19. trans1 = new_trans(reward_trans)
  20. chain = extend_blockchain(chain, [trans1])
  21. # spending the coin in reward_trans again must fail:
  22. extend_blockchain(chain, [trans1], verify_res=False)
  23. # spending the output of trans1 must work:
  24. assert chain.is_coin_still_valid(trans_as_input(trans1))
  25. @trans_test
  26. def test_double_spend2(chain, reward_trans):
  27. trans1 = new_trans(reward_trans)
  28. trans2 = new_trans(reward_trans)
  29. extend_blockchain(chain, [trans1, trans2], verify_res=False)
  30. @trans_test
  31. def test_double_spend3(chain, reward_trans):
  32. trans1 = Transaction([trans_as_input(reward_trans), trans_as_input(reward_trans)], [])
  33. key = reward_trans.targets[0].recipient_pk
  34. trans1.sign([key, key])
  35. extend_blockchain(chain, [trans1], verify_res=False)
  36. OKGREEN = '\033[92m'
  37. FAIL = '\033[91m'
  38. ENDC = '\033[0m'
  39. if errors == 0:
  40. print(OKGREEN + "All tests passed." + ENDC)
  41. else:
  42. print(FAIL + str(errors) + " tests failed." + ENDC)