mirror of
https://github.com/status-im/nim-codex.git
synced 2025-01-10 02:45:59 +00:00
8589e63d34
* Update codex-contracts-eth * contracts: update G2Point definition * integration: disable automatic advancing of time reason: makes reasoning about timing in tests harder, because the period is set to 60 seconds in the marketplace configuration, but this code switches to a new period every 500 milliseconds * integration: fix parameters of marketplace payouts test * integration: update test settings * integration: fix typo * integration: workaround for hardhat issue Subscriptions expire after 5 minutes when using websockets. Use http and polling instead. * integration: remove origDatasetSizeInBlocks * integration: fix proof parameters for test * integration: do not log output by default * integration: fix failure rate in test * integration: fix warning * integration: include clock in logs * integration: allow for more periods 5 periods was cutting it close, if we get too much pointer downtime, then the test would fail
71 lines
1.7 KiB
Nim
71 lines
1.7 KiB
Nim
## Nim-Codex
|
|
## Copyright (c) 2024 Status Research & Development GmbH
|
|
## Licensed under either of
|
|
## * Apache License, version 2.0, ([LICENSE-APACHE](LICENSE-APACHE))
|
|
## * MIT license ([LICENSE-MIT](LICENSE-MIT))
|
|
## at your option.
|
|
## This file may not be copied, modified, or distributed except according to
|
|
## those terms.
|
|
|
|
{.push raises: [].}
|
|
|
|
import pkg/circomcompat
|
|
|
|
import ../../../contracts
|
|
import ../../types
|
|
import ../../../merkletree
|
|
|
|
type
|
|
CircomG1* = G1
|
|
CircomG2* = G2
|
|
|
|
CircomProof* = Proof
|
|
CircomKey* = VerifyingKey
|
|
CircomInputs* = Inputs
|
|
|
|
proc toCircomInputs*(inputs: ProofInputs[Poseidon2Hash]): CircomInputs =
|
|
var
|
|
slotIndex = inputs.slotIndex.toF.toBytes.toArray32
|
|
datasetRoot = inputs.datasetRoot.toBytes.toArray32
|
|
entropy = inputs.entropy.toBytes.toArray32
|
|
|
|
elms = [
|
|
entropy,
|
|
datasetRoot,
|
|
slotIndex
|
|
]
|
|
|
|
let inputsPtr = allocShared0(32 * elms.len)
|
|
copyMem(inputsPtr, addr elms[0], elms.len * 32)
|
|
|
|
CircomInputs(
|
|
elms: cast[ptr array[32, byte]](inputsPtr),
|
|
len: elms.len.uint)
|
|
|
|
proc releaseCircomInputs*(inputs: var CircomInputs) =
|
|
if not inputs.elms.isNil:
|
|
deallocShared(inputs.elms)
|
|
inputs.elms = nil
|
|
|
|
func toG1*(g: CircomG1): G1Point =
|
|
G1Point(
|
|
x: UInt256.fromBytesLE(g.x),
|
|
y: UInt256.fromBytesLE(g.y))
|
|
|
|
func toG2*(g: CircomG2): G2Point =
|
|
G2Point(
|
|
x: Fp2Element(
|
|
real: UInt256.fromBytesLE(g.x[0]),
|
|
imag: UInt256.fromBytesLE(g.x[1])
|
|
),
|
|
y: Fp2Element(
|
|
real: UInt256.fromBytesLE(g.y[0]),
|
|
imag: UInt256.fromBytesLE(g.y[1])
|
|
))
|
|
|
|
func toGroth16Proof*(proof: CircomProof): Groth16Proof =
|
|
Groth16Proof(
|
|
a: proof.a.toG1,
|
|
b: proof.b.toG2,
|
|
c: proof.c.toG1)
|