mirror of https://github.com/status-im/nim-abc.git
Add transaction store
This commit is contained in:
parent
f35395bf3b
commit
44c4bb56a2
|
@ -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]
|
|
@ -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
|
Loading…
Reference in New Issue