85 lines
1.9 KiB
Nim
Raw Normal View History

2024-12-04 15:43:34 +01:00
import ../basics
2024-12-12 15:01:24 +01:00
import ../hashing
2024-12-04 15:43:34 +01:00
import ./storagerequest
import ./period
import ./proofinput
2024-12-04 15:43:34 +01:00
import ./groth16
export storagerequest
export period
export proofinput
2024-12-04 15:43:34 +01:00
export groth16
type
TransactionVersion* {.pure.} = enum
version0
TransactionKind* {.pure.} = enum
storageProof
missingProof
2024-12-12 15:01:24 +01:00
Transaction* = ref object
proofInput: StorageProofInput
2024-12-04 15:43:34 +01:00
case kind: TransactionKind
of storageProof:
proof: Groth16Proof
of missingProof:
discard
2024-12-12 15:01:24 +01:00
hash: ?Hash
2024-12-04 15:43:34 +01:00
func storageProof*(
_: type Transaction,
proofInput: StorageProofInput,
2024-12-04 15:43:34 +01:00
proof: Groth16Proof
): Transaction =
Transaction(
kind: TransactionKind.storageProof,
proofInput: proofInput,
2024-12-04 15:43:34 +01:00
proof: proof
)
func missingProof*(
_: type Transaction,
proofInput: StorageProofInput
2024-12-04 15:43:34 +01:00
): Transaction =
Transaction(
kind: TransactionKind.missingProof,
proofInput: proofInput
2024-12-04 15:43:34 +01:00
)
func version*(transaction: Transaction): TransactionVersion =
TransactionVersion.version0
func kind*(transaction: Transaction): TransactionKind =
transaction.kind
func proofInput*(transaction: Transaction): StorageProofInput =
transaction.proofInput
2024-12-04 15:43:34 +01:00
func proof*(transaction: Transaction): Groth16Proof =
transaction.proof
2024-12-12 15:01:24 +01:00
func `hash=`*(transaction: Transaction, hash: Hash) =
transaction.hash = some hash
func hash*(transaction: Transaction): ?Hash =
transaction.hash
2024-12-04 15:43:34 +01:00
func `==`*(a, b: Transaction): bool =
if a.kind != b.kind:
return false
if a.proofInput != b.proofInput:
2024-12-04 15:43:34 +01:00
return false
case a.kind
of TransactionKind.storageProof:
a.proof == b.proof
of TransactionKind.missingProof:
true
2024-12-18 10:19:09 +01:00
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 &= ")"