mirror of
https://github.com/logos-storage/logos-storage-nim.git
synced 2026-01-05 23:13:09 +00:00
improve tests
This commit is contained in:
parent
75e4146612
commit
2e08de32b5
@ -25,8 +25,6 @@ type
|
||||
CircomInputs* = Inputs
|
||||
VerifyResult* = Atomic[bool]
|
||||
|
||||
export VerifyResult
|
||||
|
||||
proc toCircomInputs*(inputs: ProofInputs[Poseidon2Hash]): CircomInputs =
|
||||
var
|
||||
slotIndex = inputs.slotIndex.toF.toBytes.toArray32
|
||||
|
||||
@ -26,29 +26,36 @@ suite "Test Circom Compat Backend - control inputs":
|
||||
var
|
||||
circom: CircomCompat
|
||||
proofInputs: ProofInputs[Poseidon2Hash]
|
||||
taskpool: Taskpool
|
||||
|
||||
setup:
|
||||
let
|
||||
inputData = readFile("tests/circuits/fixtures/input.json")
|
||||
inputJson = !JsonNode.parse(inputData)
|
||||
|
||||
taskpool = Taskpool.new()
|
||||
proofInputs = Poseidon2Hash.jsonToProofInput(inputJson)
|
||||
circom = CircomCompat.init(r1cs, wasm, zkey)
|
||||
circom = CircomCompat.init(r1cs, wasm, zkey, taskpool = taskpool)
|
||||
|
||||
teardown:
|
||||
circom.release() # this comes from the rust FFI
|
||||
taskpool.shutdown()
|
||||
|
||||
test "Should verify with correct inputs":
|
||||
let proof = circom.prove(proofInputs).tryGet
|
||||
let proof = (await circom.prove(proofInputs)).tryGet
|
||||
|
||||
check circom.verify(proof, proofInputs).tryGet
|
||||
var resp = (await circom.verify(proof, proofInputs)).tryGet
|
||||
|
||||
check resp
|
||||
|
||||
test "Should not verify with incorrect inputs":
|
||||
proofInputs.slotIndex = 1 # change slot index
|
||||
|
||||
let proof = circom.prove(proofInputs).tryGet
|
||||
let proof = (await circom.prove(proofInputs)).tryGet
|
||||
|
||||
check circom.verify(proof, proofInputs).tryGet == false
|
||||
var resp = (await circom.verify(proof, proofInputs)).tryGet
|
||||
|
||||
check resp == false
|
||||
|
||||
suite "Test Circom Compat Backend":
|
||||
let
|
||||
@ -77,6 +84,7 @@ suite "Test Circom Compat Backend":
|
||||
challenge: array[32, byte]
|
||||
builder: Poseidon2Builder
|
||||
sampler: Poseidon2Sampler
|
||||
taskpool: Taskpool
|
||||
|
||||
setup:
|
||||
let
|
||||
@ -91,8 +99,9 @@ suite "Test Circom Compat Backend":
|
||||
|
||||
builder = Poseidon2Builder.new(store, verifiable).tryGet
|
||||
sampler = Poseidon2Sampler.new(slotId, store, builder).tryGet
|
||||
taskpool = Taskpool.new()
|
||||
|
||||
circom = CircomCompat.init(r1cs, wasm, zkey)
|
||||
circom = CircomCompat.init(r1cs, wasm, zkey, taskpool = taskpool)
|
||||
challenge = 1234567.toF.toBytes.toArray32
|
||||
|
||||
proofInputs = (await sampler.getProofInput(challenge, samples)).tryGet
|
||||
@ -101,15 +110,20 @@ suite "Test Circom Compat Backend":
|
||||
circom.release() # this comes from the rust FFI
|
||||
await repoTmp.destroyDb()
|
||||
await metaTmp.destroyDb()
|
||||
taskpool.shutdown()
|
||||
|
||||
test "Should verify with correct input":
|
||||
var proof = circom.prove(proofInputs).tryGet
|
||||
var proof = (await circom.prove(proofInputs)).tryGet
|
||||
|
||||
check circom.verify(proof, proofInputs).tryGet
|
||||
var resp = (await circom.verify(proof, proofInputs)).tryGet
|
||||
|
||||
check resp == true
|
||||
|
||||
test "Should not verify with incorrect input":
|
||||
proofInputs.slotIndex = 1 # change slot index
|
||||
|
||||
let proof = circom.prove(proofInputs).tryGet
|
||||
let proof = (await circom.prove(proofInputs)).tryGet
|
||||
|
||||
check circom.verify(proof, proofInputs).tryGet == false
|
||||
var resp = (await circom.verify(proof, proofInputs)).tryGet
|
||||
|
||||
check resp == false
|
||||
|
||||
@ -52,7 +52,7 @@ suite "Test BackendFactory":
|
||||
circomWasm: InputFile("tests/circuits/fixtures/proof_main.wasm"),
|
||||
circomZkey: InputFile("tests/circuits/fixtures/proof_main.zkey"),
|
||||
)
|
||||
backend = config.initializeBackend(utilsMock).tryGet
|
||||
backend = config.initializeBackend(utilsMock, taskpool = nil).tryGet
|
||||
|
||||
check:
|
||||
backend.vkp != nil
|
||||
@ -73,7 +73,7 @@ suite "Test BackendFactory":
|
||||
# will be picked up as local files:
|
||||
circuitDir: OutDir("tests/circuits/fixtures"),
|
||||
)
|
||||
backend = config.initializeBackend(utilsMock).tryGet
|
||||
backend = config.initializeBackend(utilsMock, taskpool = nil).tryGet
|
||||
|
||||
check:
|
||||
backend.vkp != nil
|
||||
@ -91,7 +91,7 @@ suite "Test BackendFactory":
|
||||
marketplaceAddress: EthAddress.example.some,
|
||||
circuitDir: OutDir(circuitDir),
|
||||
)
|
||||
backendResult = config.initializeBackend(utilsMock)
|
||||
backendResult = config.initializeBackend(utilsMock, taskpool = nil)
|
||||
|
||||
check:
|
||||
backendResult.isErr
|
||||
|
||||
@ -19,7 +19,6 @@ import ./helpers
|
||||
import ../helpers
|
||||
|
||||
suite "Test Prover":
|
||||
var backend: AnyBackend
|
||||
let
|
||||
samples = 5
|
||||
blockSize = DefaultBlockSize
|
||||
@ -31,6 +30,8 @@ suite "Test Prover":
|
||||
var
|
||||
store: BlockStore
|
||||
prover: Prover
|
||||
backend: AnyBackend
|
||||
taskpool: Taskpool
|
||||
|
||||
setup:
|
||||
let
|
||||
@ -46,8 +47,8 @@ suite "Test Prover":
|
||||
circomZkey: InputFile("tests/circuits/fixtures/proof_main.zkey"),
|
||||
numProofSamples: samples,
|
||||
)
|
||||
|
||||
backend = config.initializeBackend(taskpool = Taskpool.new()).tryGet()
|
||||
taskpool = Taskpool.new()
|
||||
backend = config.initializeBackend(taskpool = taskpool).tryGet()
|
||||
|
||||
store = RepoStore.new(repoDs, metaDs)
|
||||
prover = Prover.new(store, backend, config.numProofSamples)
|
||||
@ -55,6 +56,7 @@ suite "Test Prover":
|
||||
teardown:
|
||||
await repoTmp.destroyDb()
|
||||
await metaTmp.destroyDb()
|
||||
taskpool.shutdown()
|
||||
|
||||
test "Should sample and prove a slot":
|
||||
let (_, _, verifiable) = await createVerifiableManifest(
|
||||
@ -90,6 +92,37 @@ suite "Test Prover":
|
||||
check:
|
||||
(await prover.verify(proof, inputs)).tryGet == true
|
||||
|
||||
test "Should concurrently prove/verify":
|
||||
const iterations = 5
|
||||
|
||||
var proveTasks = newSeq[Future[?!(AnyProofInputs, AnyProof)]]()
|
||||
var verifyTasks = newSeq[Future[?!bool]]()
|
||||
|
||||
for i in 0 ..< iterations:
|
||||
# create multiple prove tasks
|
||||
let (_, _, verifiable) = await createVerifiableManifest(
|
||||
store,
|
||||
8, # number of blocks in the original dataset (before EC)
|
||||
5, # ecK
|
||||
3, # ecM
|
||||
blockSize,
|
||||
cellSize,
|
||||
)
|
||||
|
||||
proveTasks.add(prover.prove(1, verifiable, challenge))
|
||||
|
||||
let proveResults = await allFinished(proveTasks)
|
||||
#
|
||||
for i in 0 ..< proveResults.len:
|
||||
var (inputs, proofs) = proveTasks[i].read().tryGet()
|
||||
verifyTasks.add(prover.verify(proofs, inputs))
|
||||
|
||||
let verifyResults = await allFinished(verifyTasks)
|
||||
|
||||
for i in 0 ..< verifyResults.len:
|
||||
check:
|
||||
verifyResults[i].read().isErr == false
|
||||
|
||||
test "Should complete prove/verify task when cancelled":
|
||||
let (_, _, verifiable) = await createVerifiableManifest(
|
||||
store,
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user