test_verifications.py 1.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445
  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. def wrapper():
  7. gen_chain = Blockchain([GENESIS_BLOCK])
  8. assert gen_chain.verify_all()
  9. key = Signing.generate_private_key()
  10. reward_trans = Transaction([], [TransactionTarget(key, gen_chain.compute_blockreward(gen_chain.head))])
  11. chain = extend_blockchain(gen_chain, [reward_trans])
  12. try:
  13. fn(chain, reward_trans)
  14. except:
  15. global errors
  16. errors += 1
  17. traceback.print_exc()
  18. return wrapper
  19. @trans_test
  20. def test_double_spend1(chain, reward_trans):
  21. trans1 = new_trans(reward_trans)
  22. chain = extend_blockchain(chain, [trans1])
  23. # spending the coin in reward_trans again must fail:
  24. extend_blockchain(chain, [trans1], verify_res=False)
  25. # spending the output of trans1 must work:
  26. assert chain.is_coin_still_valid(trans_as_input(trans1))
  27. @trans_test
  28. def test_double_spend2(chain, reward_trans):
  29. trans1 = new_trans(reward_trans)
  30. trans2 = new_trans(reward_trans)
  31. extend_blockchain(chain, [trans1, trans2], verify_res=False)
  32. @trans_test
  33. def test_double_spend3(chain, reward_trans):
  34. trans1 = Transaction([trans_as_input(reward_trans), trans_as_input(reward_trans)], [])
  35. key = reward_trans.targets[0].recipient_pk
  36. trans1.sign([key, key])
  37. extend_blockchain(chain, [trans1], verify_res=False)