2024-12-18 10:19:09 +01:00

85 lines
1.9 KiB
Nim

import ../basics
import ../hashing
import ./storagerequest
import ./period
import ./proofinput
import ./groth16
export storagerequest
export period
export proofinput
export groth16
type
TransactionVersion* {.pure.} = enum
version0
TransactionKind* {.pure.} = enum
storageProof
missingProof
Transaction* = ref object
proofInput: StorageProofInput
case kind: TransactionKind
of storageProof:
proof: Groth16Proof
of missingProof:
discard
hash: ?Hash
func storageProof*(
_: type Transaction,
proofInput: StorageProofInput,
proof: Groth16Proof
): Transaction =
Transaction(
kind: TransactionKind.storageProof,
proofInput: proofInput,
proof: proof
)
func missingProof*(
_: type Transaction,
proofInput: StorageProofInput
): Transaction =
Transaction(
kind: TransactionKind.missingProof,
proofInput: proofInput
)
func version*(transaction: Transaction): TransactionVersion =
TransactionVersion.version0
func kind*(transaction: Transaction): TransactionKind =
transaction.kind
func proofInput*(transaction: Transaction): StorageProofInput =
transaction.proofInput
func proof*(transaction: Transaction): Groth16Proof =
transaction.proof
func `hash=`*(transaction: Transaction, hash: Hash) =
transaction.hash = some hash
func hash*(transaction: Transaction): ?Hash =
transaction.hash
func `==`*(a, b: Transaction): bool =
if a.kind != b.kind:
return false
if a.proofInput != b.proofInput:
return false
case a.kind
of TransactionKind.storageProof:
a.proof == b.proof
of TransactionKind.missingProof:
true
func `$`*(transaction: Transaction): string =
result &= "Transaction("
result &= "version: " & $transaction.version
result &= ", kind: " & $transaction.kind
result &= ", proofInput: " & $transaction.proofInput
if transaction.kind == TransactionKind.storageProof:
result &= ", proof: " & $transaction.proof
result &= ")"