From 94b4cfb82505fd48398285fcb142a46274bdd8a9 Mon Sep 17 00:00:00 2001 From: Mark Spanbroek Date: Wed, 4 Aug 2021 14:23:46 +0200 Subject: [PATCH] Calculate transaction and output values --- abc/transactions.nim | 9 +++++++++ tests/abc/testTransactions.nim | 10 ++++++++++ 2 files changed, 19 insertions(+) diff --git a/abc/transactions.nim b/abc/transactions.nim index ec3f539..2335596 100644 --- a/abc/transactions.nim +++ b/abc/transactions.nim @@ -88,3 +88,12 @@ func hasValidSignature*(transaction: Transaction): bool = let signature = transaction.signature let signee = aggregate(signees) signee.verify(message, signature) + +func value*(transaction: Transaction): UInt256 = + for (_, value) in transaction.outputs: + result += value + +func outputValue*(transaction: Transaction, owner: PublicKey): UInt256 = + for (outputOwner, value) in transaction.outputs: + if outputOwner == owner: + result += value diff --git a/tests/abc/testTransactions.nim b/tests/abc/testTransactions.nim index 846eddb..b35d1b0 100644 --- a/tests/abc/testTransactions.nim +++ b/tests/abc/testTransactions.nim @@ -27,6 +27,16 @@ suite "Transactions": check transaction.inputs.len == 1 check transaction.outputs.len == 2 + test "transaction value is the sum of its output values": + let genesis = !Transaction.init({alice: 32.u256, bob: 10.u256}, victor) + check genesis.value == 42.u256 + + test "output value is the value of the output for given owner": + let genesis = !Transaction.init({alice: 32.u256, bob: 10.u256}, victor) + check genesis.outputValue(alice) == 32.u256 + check genesis.outputValue(bob) == 10.u256 + check genesis.outputValue(victor) == 0.u256 + test "a transaction can be converted to bytes": let genesis = !Transaction.init({alice: 32.u256, bob: 10.u256}, victor) let transaction = !Transaction.init(