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