refactor: rename proverBackendCmd to proverBackend and standardize enum values

This commit is contained in:
Dmitriy Ryajov 2025-05-29 21:39:19 -06:00 committed by Eric
parent 5baa88a1f4
commit 70ec129aae
No known key found for this signature in database
6 changed files with 77 additions and 68 deletions

View File

@ -10,7 +10,6 @@
import pkg/chronos
import pkg/questionable
import pkg/confutils
import pkg/confutils/defs
import pkg/confutils/std/net
import pkg/confutils/toml/defs as confTomlDefs
import pkg/confutils/toml/std/net as confTomlNet

View File

@ -208,9 +208,15 @@ proc new*(
.withTcpTransport({ServerFlags.ReuseAddr})
.build()
let numThreads =
if int(config.numThreads) == 0:
countProcessors()
else:
int(config.numThreads)
var tp =
try:
Taskpool.new(numThreads = int(config.numThreads))
Taskpool.new(numThreads)
except CatchableError as exc:
raiseAssert("Failure in tp initialization:" & exc.msg)

View File

@ -18,6 +18,7 @@ import std/terminal # Is not used in tests
import std/options
import std/strutils
import std/typetraits
import std/cpuinfo
import pkg/chronos
import pkg/chronicles/helpers
@ -54,9 +55,7 @@ export
DefaultQuotaBytes, DefaultBlockTtl, DefaultBlockInterval, DefaultNumBlocksPerInterval,
DefaultRequestCacheSize
type ThreadCount* = distinct Natural
proc `==`*(a, b: ThreadCount): bool {.borrow.}
type ThreadCount* = range[0 .. 256]
proc defaultDataDir*(): string =
let dataDir =
@ -76,7 +75,6 @@ const
DefaultDataDir* = defaultDataDir()
DefaultCircuitDir* = defaultDataDir() / "circuits"
DefaultThreadCount* = ThreadCount(0)
type
StartUpCmd* {.pure.} = enum
@ -88,8 +86,11 @@ type
prover
ProverBackendCmd* {.pure.} = enum
nimGroth16
circomCompat
nimgroth16
circomcompat
Curves* {.pure.} = enum
bn128 = "bn128"
LogKind* {.pure.} = enum
Auto = "auto"
@ -197,7 +198,8 @@ type
numThreads* {.
desc:
"Number of worker threads (\"0\" = use as many threads as there are CPU cores available)",
defaultValue: DefaultThreadCount,
defaultValueDesc: "0",
defaultValue: ThreadCount(0),
name: "num-threads"
.}: ThreadCount
@ -384,6 +386,22 @@ type
name: "circuit-dir"
.}: OutDir
proverBackend* {.
desc:
"The backend to use for the prover. " &
"Must be one of: nimgroth16, circomcompat",
defaultValue: ProverBackendCmd.nimgroth16,
defaultValueDesc: "nimgroth16",
name: "prover-backend"
.}: ProverBackendCmd
curve* {.
desc: "The curve to use for the storage circuit",
defaultValue: Curves.bn128,
defaultValueDesc: $Curves.bn128,
name: "curve"
.}: Curves
circomR1cs* {.
desc: "The r1cs file for the storage circuit",
defaultValue: $DefaultCircuitDir / "proof_main.r1cs",
@ -391,28 +409,21 @@ type
name: "circom-r1cs"
.}: InputFile
case proverBackendCmd*: ProverBackendCmd
of ProverBackendCmd.nimGroth16:
nimGroth16Curve* {.
desc: "The curve to use for the storage circuit",
defaultValue: "bn128",
name: "nim-groth16-curve"
.}: string
circomGraph* {.
desc:
"The graph file for the storage circuit (only used with nimgroth16 backend)",
defaultValue: $DefaultCircuitDir / "proof_main.bin",
defaultValueDesc: $DefaultDataDir & "/circuits/proof_main.bin",
name: "circom-graph"
.}: InputFile
circomGraph* {.
desc: "The graph file for the storage circuit",
defaultValue: $DefaultCircuitDir / "graph.bin",
defaultValueDesc: $DefaultDataDir & "/circuits/graph.bin",
name: "nim-groth16-graph"
.}: InputFile
of ProverBackendCmd.circomCompat:
circomWasm* {.
desc:
"The wasm file for the storage circuit - DEPRECATED: use the default nimGroth16 backend",
defaultValue: $DefaultCircuitDir / "proof_main.wasm",
defaultValueDesc: $DefaultDataDir & "/circuits/proof_main.wasm",
name: "circom-wasm"
.}: InputFile
circomWasm* {.
desc:
"The wasm file for the storage circuit (only used with circomcompat backend)",
defaultValue: $DefaultCircuitDir / "proof_main.wasm",
defaultValueDesc: $DefaultDataDir & "/circuits/proof_main.wasm",
name: "circom-wasm"
.}: InputFile
circomZkey* {.
desc: "The zkey file for the storage circuit",
@ -421,11 +432,11 @@ type
name: "circom-zkey"
.}: InputFile
# TODO: should probably be hidden and behind a feature flag
circomNoZkey* {.
desc: "Ignore the zkey file - use only for testing!",
defaultValue: false,
name: "circom-no-zkey"
name: "circom-no-zkey",
hidden
.}: bool
numProofSamples* {.
@ -516,7 +527,7 @@ const
proc parseCmdArg*(
T: typedesc[MultiAddress], input: string
): MultiAddress {.upraises: [ValueError].} =
): MultiAddress {.raises: [ValueError].} =
var ma: MultiAddress
try:
let res = MultiAddress.init(input)
@ -530,12 +541,8 @@ proc parseCmdArg*(
quit QuitFailure
ma
proc parseCmdArg*(T: type ThreadCount, input: string): T {.upraises: [ValueError].} =
let count = parseInt(input)
if count != 0 and count < 2:
warn "Invalid number of threads", input = input
quit QuitFailure
ThreadCount(count)
proc parseCmdArg*(T: type ThreadCount, val: string): T {.raises: [ValueError].} =
ThreadCount(val.parseUInt())
proc parseCmdArg*(T: type SignedPeerRecord, uri: string): T =
var res: SignedPeerRecord
@ -597,7 +604,7 @@ proc parseCmdArg*(T: type Duration, val: string): T =
proc readValue*(
r: var TomlReader, val: var EthAddress
) {.upraises: [SerializationError, IOError].} =
) {.raises: [SerializationError, IOError].} =
val = EthAddress.init(r.readValue(string)).get()
proc readValue*(r: var TomlReader, val: var SignedPeerRecord) =
@ -625,7 +632,7 @@ proc readValue*(r: var TomlReader, val: var MultiAddress) =
proc readValue*(
r: var TomlReader, val: var NBytes
) {.upraises: [SerializationError, IOError].} =
) {.raises: [SerializationError, IOError].} =
var value = 0'i64
var str = r.readValue(string)
let count = parseSize(str, value, alwaysBin = true)
@ -636,7 +643,7 @@ proc readValue*(
proc readValue*(
r: var TomlReader, val: var ThreadCount
) {.upraises: [SerializationError, IOError].} =
) {.raises: [SerializationError, IOError].} =
var str = r.readValue(string)
try:
val = parseCmdArg(ThreadCount, str)
@ -645,7 +652,7 @@ proc readValue*(
proc readValue*(
r: var TomlReader, val: var Duration
) {.upraises: [SerializationError, IOError].} =
) {.raises: [SerializationError, IOError].} =
var str = r.readValue(string)
var dur: Duration
let count = parseDuration(str, dur)
@ -712,7 +719,7 @@ proc stripAnsi*(v: string): string =
res
proc updateLogLevel*(logLevel: string) {.upraises: [ValueError].} =
proc updateLogLevel*(logLevel: string) {.raises: [ValueError].} =
# Updates log levels (without clearing old ones)
let directives = logLevel.split(";")
try:

View File

@ -35,17 +35,14 @@ export backends
logScope:
topics = "codex prover"
type
Prover* = ref object
case backendKind: ProverBackendCmd
of ProverBackendCmd.nimGroth16:
groth16Backend*: NimGroth16BackendRef
of ProverBackendCmd.circomCompat:
circomCompatBackend*: CircomCompatBackendRef
nSamples: int
tp: Taskpool
AnyBackend* = NimGroth16BackendRef or CircomCompatBackendRef
type Prover* = ref object
case backendKind: ProverBackendCmd
of ProverBackendCmd.nimgroth16:
groth16Backend*: NimGroth16BackendRef
of ProverBackendCmd.circomcompat:
circomCompatBackend*: CircomCompatBackendRef
nSamples: int
tp: Taskpool
proc prove*[SomeSampler](
self: Prover,
@ -69,7 +66,7 @@ proc prove*[SomeSampler](
# prove slot
case self.backendKind
of ProverBackendCmd.nimGroth16:
of ProverBackendCmd.nimgroth16:
let
proof = ?await self.groth16Backend.prove(proofInput)
verified =
@ -78,7 +75,7 @@ proc prove*[SomeSampler](
else:
bool.none
return success (proof.toGroth16Proof, verified)
of ProverBackendCmd.circomCompat:
of ProverBackendCmd.circomcompat:
let
proof = ?await self.circomCompatBackend.prove(proofInput)
verified =
@ -93,7 +90,7 @@ proc new*(
): Prover =
Prover(
circomCompatBackend: backend,
backendKind: ProverBackendCmd.circomCompat,
backendKind: ProverBackendCmd.circomcompat,
nSamples: nSamples,
tp: tp,
)
@ -103,7 +100,7 @@ proc new*(
): Prover =
Prover(
groth16Backend: backend,
backendKind: ProverBackendCmd.nimGroth16,
backendKind: ProverBackendCmd.nimgroth16,
nSamples: nSamples,
tp: tp,
)

View File

@ -91,7 +91,7 @@ proc initializeNimGroth16Backend(
$graphFile,
$r1csFile,
$zkeyFile,
config.nimGroth16Curve,
$config.curve,
config.maxSlotDepth,
config.maxDatasetDepth,
config.maxBlockDepth,
@ -121,14 +121,14 @@ proc initializeCircomCompatBackend(
proc initializeProver*(config: CodexConf, tp: Taskpool): ?!Prover =
let prover =
case config.proverBackendCmd
of ProverBackendCmd.nimGroth16:
case config.proverBackend
of ProverBackendCmd.nimgroth16:
without backend =? initializeNimGroth16Backend(config, tp), err:
suggestDownloadTool(config)
return failure("Unable to initialize NimGroth16 backend")
Prover.new(backend, config.numProofSamples, tp)
of ProverBackendCmd.circomCompat:
of ProverBackendCmd.circomcompat:
without backend =? initializeCircomCompatBackend(config, tp), err:
suggestDownloadTool(config)
return failure("Unable to initialize CircomCompat backend")

View File

@ -29,7 +29,7 @@ suite "Test BackendFactory":
metricsAddress: parseIpAddress("127.0.0.1"),
persistenceCmd: PersistenceCmd.prover,
marketplaceAddress: EthAddress.example.some,
proverBackendCmd: ProverBackendCmd.nimGroth16,
proverBackend: ProverBackendCmd.nimgroth16,
circomGraph: InputFile("tests/circuits/fixtures/proof_main.bin"),
circomR1cs: InputFile("tests/circuits/fixtures/proof_main.r1cs"),
circomZkey: InputFile("tests/circuits/fixtures/proof_main.zkey"),
@ -47,7 +47,7 @@ suite "Test BackendFactory":
metricsAddress: parseIpAddress("127.0.0.1"),
persistenceCmd: PersistenceCmd.prover,
marketplaceAddress: EthAddress.example.some,
proverBackendCmd: ProverBackendCmd.circomCompat,
proverBackend: ProverBackendCmd.circomcompat,
circomWasm: InputFile("tests/circuits/fixtures/proof_main.wasm"),
circomR1cs: InputFile("tests/circuits/fixtures/proof_main.r1cs"),
circomZkey: InputFile("tests/circuits/fixtures/proof_main.zkey"),
@ -65,7 +65,7 @@ suite "Test BackendFactory":
metricsAddress: parseIpAddress("127.0.0.1"),
persistenceCmd: PersistenceCmd.prover,
marketplaceAddress: EthAddress.example.some,
proverBackendCmd: ProverBackendCmd.circomCompat,
proverBackend: ProverBackendCmd.circomcompat,
# Set the circuitDir such that the tests/circuits/fixtures/ files
# will be picked up as local files:
circuitDir: OutDir("tests/circuits/fixtures"),
@ -83,7 +83,7 @@ suite "Test BackendFactory":
metricsAddress: parseIpAddress("127.0.0.1"),
persistenceCmd: PersistenceCmd.prover,
marketplaceAddress: EthAddress.example.some,
proverBackendCmd: ProverBackendCmd.nimGroth16,
proverBackend: ProverBackendCmd.nimgroth16,
# Set the circuitDir such that the tests/circuits/fixtures/ files
# will be picked up as local files:
circuitDir: OutDir("tests/circuits/fixtures"),
@ -101,7 +101,7 @@ suite "Test BackendFactory":
nat: NatConfig(hasExtIp: false, nat: NatNone),
metricsAddress: parseIpAddress("127.0.0.1"),
persistenceCmd: PersistenceCmd.prover,
proverBackendCmd: ProverBackendCmd.nimGroth16,
proverBackend: ProverBackendCmd.nimgroth16,
marketplaceAddress: EthAddress.example.some,
circuitDir: OutDir(circuitDir),
)