Add transaction store

This commit is contained in:
Mark Spanbroek 2021-06-30 11:22:28 +02:00
parent f35395bf3b
commit 44c4bb56a2
2 changed files with 50 additions and 0 deletions

30
abc/txstore.nim Normal file
View File

@ -0,0 +1,30 @@
import std/tables
import std/hashes
import ./transactions
type
TxStore* = object
genesis: TxHash
transactions: Table[TxHash, Transaction]
export transactions
func hash(h: TxHash): Hash =
h.toBytes.hash
func add*(store: var TxStore, transactions: varargs[Transaction]) =
for transaction in transactions:
store.transactions[transaction.hash] = transaction
func init*(_: type TxStore, genesis: Transaction): TxStore =
result.genesis = genesis.hash
result.add(genesis)
func genesis*(store: TxStore): TxHash =
store.genesis
func hasTx*(store: TxStore, hash: TxHash): bool =
store.transactions.hasKey(hash)
func `[]`*(store: TxStore, hash: TxHash): Transaction =
store.transactions[hash]

20
tests/testTxStore.nim Normal file
View File

@ -0,0 +1,20 @@
import abc/txstore
import ./basics
import ./alicebob
suite "Transaction Store":
let genesis = Transaction.genesis
let transaction = Transaction.example
test "is initialized with a genesis transaction":
let store = TxStore.init(genesis)
check store.hasTx(genesis.hash)
check store[genesis.hash] == genesis
test "stores transactions":
var store = TxStore.init(genesis)
check not store.hasTx(transaction.hash)
store.add(transaction)
check store.hasTx(transaction.hash)
check store[transaction.hash] == transaction