def test_bank_balances(): # Create bank and issue Alice some coins bank = Bank() coinbase = bank.issue(1000, alice_public_key) # Alice sends 10 coins to Bob tx_ins = [TxIn(tx_id=coinbase.id, index=0, signature=None)] tx_id = uuid.uuid4() tx_outs = [ TxOut(tx_id=tx_id, index=0, amount=10, public_key=bob_public_key), TxOut(tx_id=tx_id, index=1, amount=990, public_key=alice_public_key), ] alice_to_bob = Tx(id=tx_id, tx_ins=tx_ins, tx_outs=tx_outs) alice_to_bob.sign_input(0, alice_private_key) # After signing, Bob modifies transaction to get more $$$ alice_to_bob.tx_outs[0].amount = 990 alice_to_bob.tx_outs[1].amount = 10 with pytest.raises(BadSignatureError): bank.handle_tx(alice_to_bob)
def test_bank_balances(): # Create bank and issue Alice some coins bank = Bank() coinbase = bank.issue(1000, alice_public_key) # Alice sends 10 coins to Bob tx_ins = [ TxIn(tx_id=coinbase.id, index=0, signature=None), ] tx_id = uuid.uuid4() tx_outs = [ TxOut(tx_id=tx_id, index=0, amount=10, public_key=bob_public_key), TxOut(tx_id=tx_id, index=1, amount=990, public_key=alice_public_key), ] alice_to_bob = Tx(id=tx_id, tx_ins=tx_ins, tx_outs=tx_outs) alice_to_bob.sign_input(0, alice_private_key) bank.handle_tx(alice_to_bob) alice_balance = bank.fetch_balance(alice_public_key) assert alice_balance == 990 # Alice sends 10 coins to Bob tx_ins = [ TxIn(tx_id=tx_id, index=1, signature=None), ] tx_id = uuid.uuid4() tx_outs = [ TxOut(tx_id=tx_id, index=0, amount=10, public_key=bob_public_key), TxOut(tx_id=tx_id, index=1, amount=980, public_key=alice_public_key), ] alice_to_bob = Tx(id=tx_id, tx_ins=tx_ins, tx_outs=tx_outs) alice_to_bob.sign_input(0, alice_private_key) bank.handle_tx(alice_to_bob) alice_balance = bank.fetch_balance(alice_public_key) assert alice_balance == 980
def prepare_simple_tx(utxos, sender_private_key, recipient_public_key, amount): from mybanknetcoin import Tx, TxIn, TxOut sender_public_key = sender_private_key.get_verifying_key() # Construct tx.tx_outs tx_ins = [] tx_in_sum = 0 for tx_out in utxos: tx_ins.append( TxIn(tx_id=tx_out.tx_id, index=tx_out.index, signature=None)) tx_in_sum += tx_out.amount if tx_in_sum > amount: break # Make sure sender can afford it assert tx_in_sum >= amount # Construct tx.tx_outs tx_id = uuid.uuid4() change = tx_in_sum - amount tx_outs = [ TxOut(tx_id=tx_id, index=0, amount=amount, public_key=recipient_public_key), TxOut(tx_id=tx_id, index=1, amount=change, public_key=sender_public_key), ] # Construct tx and sign inputs tx = Tx(id=tx_id, tx_ins=tx_ins, tx_outs=tx_outs) for i in range(len(tx.tx_ins)): tx.sign_input(i, sender_private_key) return tx