Skip to content

Commit 1b2c598

Browse files
committed
Merge pull request #14 from l-adic/require-inputs-only-solve
Add Verify command
2 parents 77415e0 + bbd2c17 commit 1b2c598

File tree

16 files changed

+504
-232
lines changed

16 files changed

+504
-232
lines changed

Diff for: .gitignore

+2
Original file line numberDiff line numberDiff line change
@@ -11,3 +11,5 @@ TAGS
1111
dist-newstyle
1212
inputs.json
1313
circuit-output
14+
factors.*
15+
factors-inputs-template.json

Diff for: arithmetic-circuits.cabal

+1-1
Original file line numberDiff line numberDiff line change
@@ -114,7 +114,7 @@ library circom-compat
114114
arithmetic-circuits
115115
, arithmetic-circuits:language
116116
, bytestring
117-
, directory
117+
, errors
118118
, optparse-applicative
119119
, vector
120120

Diff for: bench/Circuit/Bench.hs

+12-18
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,6 @@ import Criterion
66
import Data.Field.Galois (Prime)
77
import Data.IntMap qualified as IntMap
88
import Data.Map qualified as Map
9-
import Data.Vector (generateM)
109
import Protolude
1110

1211
type Fr = Prime 21888242871839275222246405745257275088548364400416034343698204186575808495617
@@ -15,30 +14,25 @@ benchmarks :: Benchmark
1514
benchmarks =
1615
bgroup
1716
"largeMult"
18-
[ bench "1_000" $ whnf largeMult 1000,
19-
bench "10_000" $ whnf largeMult 10000,
20-
bench "100_000" $ whnf largeMult 100_000,
21-
bench "1_000_000" $ whnf largeMult 1_000_000
17+
[ bench "1_000" $ whnf largeMult (Proxy @1000),
18+
bench "10_000" $ whnf largeMult (Proxy @10000),
19+
bench "100_000" $ whnf largeMult (Proxy @100_000),
20+
bench "1_000_000" $ whnf largeMult (Proxy @1_000_000)
2221
]
2322

24-
largeMult :: Int -> Fr
23+
largeMult :: (KnownNat n) => Proxy n -> IO Fr
2524
largeMult n =
2625
let BuilderState {bsVars, bsCircuit} = snd $ runCircuitBuilder (program n)
2726
inputs =
28-
assignInputs bsVars $
29-
Map.fromList $
30-
map (\i -> (nameInput i, fromIntegral i + 1)) [0 .. n - 1]
27+
assignInputs bsVars $ Map.singleton "x" (Array $ map fromIntegral [1 .. natVal n])
3128
w = altSolve bsCircuit inputs
32-
in fromMaybe (panic "output not found") $ lookupVar bsVars "out" w
29+
res = fromMaybe (panic "output not found") $ lookupVar bsVars "out" w
30+
in pure res
3331

34-
nameInput :: (Integral a) => a -> Text
35-
nameInput i = "x" <> show (toInteger i)
36-
37-
program :: Int -> ExprM Fr (Var Wire Fr 'TField)
38-
program p = do
39-
xs <- generateM p $ \i ->
40-
var_ <$> fieldInput Public (nameInput i)
41-
fieldOutput "out" $ product xs
32+
program :: forall n. (KnownNat n) => Proxy n -> ExprM Fr (Var Wire Fr 'TField)
33+
program _ = do
34+
xs <- fieldInputs @n Public "x"
35+
fieldOutput "out" $ product $ map var_ xs
4236

4337
altSolve :: ArithCircuit Fr -> IntMap Fr -> IntMap Fr
4438
altSolve p inputs =

Diff for: circom-compat/app/Main.hs

+4-2
Original file line numberDiff line numberDiff line change
@@ -16,9 +16,11 @@ program = do
1616
a <- var_ <$> fieldInput Private "a"
1717
b <- var_ <$> fieldInput Private "b"
1818
n <- var_ <$> fieldInput Public "n"
19-
let cs =
19+
zs <- map var_ <$> fieldInputs @5 Public "zs"
20+
let s = unAdd_ $ foldMap Add_ zs
21+
cs =
2022
[ neq_ n a,
2123
neq_ n b,
22-
eq_ n (a * b)
24+
eq_ n (a * b + s)
2325
]
2426
boolOutput "out" $ unAnd_ $ foldMap And_ cs

0 commit comments

Comments
 (0)