def test_coin_creation(self): scrooge = Scrooge() coins = [ Scroogecoin(value=2, wallet_id=scrooge.wallet.id), Scroogecoin(value=5, wallet_id=scrooge.wallet.id) ] scrooge.create_coins(coins) self.assertTrue( isinstance(scrooge.blockchain.blocks[1].transaction, CoinCreation))
def test_get_coins(self): scrooge = Scrooge() wallet1 = Wallet() wallet2 = Wallet() coins = [ Scroogecoin(value=20, wallet_id=wallet1.id), Scroogecoin(value=100, wallet_id=wallet2.id), Scroogecoin(value=30, wallet_id=wallet1.id), ] scrooge.create_coins(coins) wallet_coins = wallet1.get_coins(scrooge.blockchain) self.assertEqual(len(wallet_coins), 2) self.assertEqual(wallet_coins[0].value + wallet_coins[1].value, 50)
def test_process_payment_without_signature(self): """ Put coins in Scrooge's wallet, and transfer them to the same wallet without signing """ scrooge = Scrooge() coin = Scroogecoin(value=2, wallet_id=scrooge.wallet.id) created_coins = scrooge.create_coins([coin]).transaction.created_coins payment = Payment(created_coins=[coin], consumed_coins=created_coins) payment_result = scrooge.process_payment(payment, []) self.assertEqual(payment_result, None)
def test_process_payment_with_signature(self): """ Put coins in Scrooge's wallet, and transfer them to the same wallet """ scrooge = Scrooge() coin = Scroogecoin(value=2, wallet_id=scrooge.wallet.id) created_coins = scrooge.create_coins([coin]).transaction.created_coins payment = Payment(created_coins=[coin], consumed_coins=created_coins) signature = scrooge.wallet.sign(encoded_hash_object(payment)) payment_result = scrooge.process_payment( payment, [(scrooge.wallet.verifying_key, signature)]) self.assertFalse(payment_result == None)
def test_devide_coin_in_two_coins(self): """ Check that the coin division is done correctly """ scrooge = Scrooge() wallet = Wallet() coin = Scroogecoin(value=20, wallet_id=wallet.id) created_block = scrooge.create_coins([coin]) created_coins = created_block.transaction.created_coins new_coins = wallet.devide_coin(coin=created_coins[0], value=15, scrooge=scrooge) self.assertTrue(len(new_coins) == 2) self.assertTrue(new_coins[0].wallet_id == wallet.id and new_coins[1].wallet_id == wallet.id) self.assertEqual(new_coins[0].value + new_coins[1].value, 20)
LOGGER = SafeWriter("log.txt", "w") def key_capture_thread(): global keep_going input() keep_going = False scrooge = Scrooge() users = {} for i in range(100): users[i] = User() coins = [Scroogecoin(user_id=users[i].id) for _ in range(10)] scrooge.create_coins(coins) for user in users.values(): LOGGER.write(f'User ID: {user.id}, balance = {len(user.get_balance(scrooge.ledger))}') threading.Thread(target=key_capture_thread, args=(), name='key_capture_thread', daemon=True).start() while keep_going: user_a = random.choice(list(users.values())) user_b = random.choice(list(users.values())) amount = random.randint(1, 10) LOGGER.write(f'Balance: {len(user_a.get_balance(scrooge.ledger))}, {len(user_b.get_balance(scrooge.ledger))}') coins = user_a.get_balance(scrooge.ledger)[:amount] payment = Transaction(amount=amount, coins=coins, sender=user_a, receiver=user_b) payment.signature = user_a.sign(encoded_hash_object(payment)) payment_status = scrooge.process_payment(
from scrooge import Scrooge from user import User import random import sys import keyboard sys.stdout = open('out.txt', 'w') print('Initializing Scrooge') scrooge = Scrooge() for i in range(0, 10): print('Creating User ' + str(i)) new_user = User(scrooge) scrooge.users[str(new_user.key.publickey().export_key())]=new_user for user_key in scrooge.users.keys(): scrooge.create_coins(10, user_key) users = list(scrooge.users.items()) print('=============================================\n') print('Printing users') print('=============================================\n') for user in scrooge.users.values(): print(user) print('=============================================\n') print('Simulating transactions. Some of these transactions are double spending at random.') print('This simulation does not end. You can terminate by pressing on space') print('=============================================\n') while True: try: if keyboard.is_pressed('space'): print('You pressed on space! Terminating') sys.exit()