mirror of
https://github.com/logos-storage/logos-storage-nim-validator.git
synced 2026-01-04 14:33:12 +00:00
85 lines
1.9 KiB
Nim
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 &= ")"
|