@crisp-e3/contracts 0.2.2-test → 0.2.3-test
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/contracts/CRISPVerifier.sol +71 -102
- package/package.json +3 -3
|
@@ -7,120 +7,120 @@ pragma solidity >=0.8.21;
|
|
|
7
7
|
|
|
8
8
|
uint256 constant N = 524288;
|
|
9
9
|
uint256 constant LOG_N = 19;
|
|
10
|
-
uint256 constant NUMBER_OF_PUBLIC_INPUTS =
|
|
10
|
+
uint256 constant NUMBER_OF_PUBLIC_INPUTS = 0;
|
|
11
11
|
library HonkVerificationKey {
|
|
12
12
|
function loadVerificationKey() internal pure returns (Honk.VerificationKey memory) {
|
|
13
13
|
Honk.VerificationKey memory vk = Honk.VerificationKey({
|
|
14
14
|
circuitSize: uint256(524288),
|
|
15
15
|
logCircuitSize: uint256(19),
|
|
16
|
-
publicInputsSize: uint256(
|
|
16
|
+
publicInputsSize: uint256(0),
|
|
17
17
|
ql: Honk.G1Point({
|
|
18
|
-
x: uint256(
|
|
19
|
-
y: uint256(
|
|
18
|
+
x: uint256(0x2c3d4ff818b2bd107b25afcec82f8b489d4f474ae163602869b5a8a6c75be6e5),
|
|
19
|
+
y: uint256(0x28aa3d140258eea62b3be3a080a7d393b807e00545db188385eb242f441bc85c)
|
|
20
20
|
}),
|
|
21
21
|
qr: Honk.G1Point({
|
|
22
|
-
x: uint256(
|
|
23
|
-
y: uint256(
|
|
22
|
+
x: uint256(0x08285c76834e6840d1db5a6cfcfa2b94a9ec2e80f8df2cd2d1b18ffc7fe40028),
|
|
23
|
+
y: uint256(0x03398be294abb06d5be9215c3a07f41754cdffe71b68c9452f18bde7dbfebbf6)
|
|
24
24
|
}),
|
|
25
25
|
qo: Honk.G1Point({
|
|
26
|
-
x: uint256(
|
|
27
|
-
y: uint256(
|
|
26
|
+
x: uint256(0x21c476dfe2f9a4d67870bd34757144ee6fb45cb24b7e0690282da0fd639a3353),
|
|
27
|
+
y: uint256(0x1e73766089a804e8a07b8eb1bc05de03735ff1b7f612703016d8d3b4b0cfe7cc)
|
|
28
28
|
}),
|
|
29
29
|
q4: Honk.G1Point({
|
|
30
|
-
x: uint256(
|
|
31
|
-
y: uint256(
|
|
30
|
+
x: uint256(0x2c86d05c5ba85d0253e26efa5546f4c3fb8ac4ee70f81439ebb7379195e1bca7),
|
|
31
|
+
y: uint256(0x019000463d3006c44b2f219477873d0c28ebdc2d89641c78004a0a0954b08319)
|
|
32
32
|
}),
|
|
33
33
|
qm: Honk.G1Point({
|
|
34
|
-
x: uint256(
|
|
35
|
-
y: uint256(
|
|
34
|
+
x: uint256(0x2bdcef4b06d52299573cef34e1c4d76e9c3f2e0fddcb7724f574038b59454723),
|
|
35
|
+
y: uint256(0x1b83babf5f2a43a8f49ec5a6559062d1746cde944e2f7b127997d072cb34b773)
|
|
36
36
|
}),
|
|
37
37
|
qc: Honk.G1Point({
|
|
38
|
-
x: uint256(
|
|
39
|
-
y: uint256(
|
|
38
|
+
x: uint256(0x26cad107a18c777ebc50038a599554620c674f90edb5d711ba8a278d6cdd90c1),
|
|
39
|
+
y: uint256(0x20f83ee863e42a6500fdd389c885847eefa658a22e1a7ae344efe97128cbfdfb)
|
|
40
40
|
}),
|
|
41
41
|
qArith: Honk.G1Point({
|
|
42
|
-
x: uint256(
|
|
43
|
-
y: uint256(
|
|
42
|
+
x: uint256(0x0b43af826bf6b48e6f09cec083808d1287512599954832f1190916c40b1671fa),
|
|
43
|
+
y: uint256(0x22f871141d9876b55696ca69a669a55d65c7d37ae850a96ac6e3d2d22ff6514a)
|
|
44
44
|
}),
|
|
45
45
|
qDeltaRange: Honk.G1Point({
|
|
46
|
-
x: uint256(
|
|
47
|
-
y: uint256(
|
|
46
|
+
x: uint256(0x0d70a4b74f6fe3e56fb046749637c33eda3deb8872ce35f3df9a9096ece42291),
|
|
47
|
+
y: uint256(0x0475f69ca23e9a23e8a869233b5feabce8362642f1f4e9aeb1522d259b77e04f)
|
|
48
48
|
}),
|
|
49
49
|
qElliptic: Honk.G1Point({
|
|
50
|
-
x: uint256(
|
|
51
|
-
y: uint256(
|
|
50
|
+
x: uint256(0x2bc2c2351835a2dd570566bcc75c3b9a6a1ba3523f0e4e2b0ba2c4f88550150d),
|
|
51
|
+
y: uint256(0x0f08565b5963e41a2c40930a416b4e780b181131c05df87d030e2797eb486708)
|
|
52
52
|
}),
|
|
53
53
|
qAux: Honk.G1Point({
|
|
54
|
-
x: uint256(
|
|
55
|
-
y: uint256(
|
|
54
|
+
x: uint256(0x1db45523d96ad9e6b6599c69b623e4a0977c518bf40c9b65d440880a11d60300),
|
|
55
|
+
y: uint256(0x03e2a52f673e0ab7c9a6f8d9d4478e31fdd5b8e6c17d46e246faee867bf51eb4)
|
|
56
56
|
}),
|
|
57
57
|
qLookup: Honk.G1Point({
|
|
58
|
-
x: uint256(
|
|
59
|
-
y: uint256(
|
|
58
|
+
x: uint256(0x2f937da7da3cdb00e22a7bdbfb630ac9d512f349a1d8e9c11fab9be0fa66457e),
|
|
59
|
+
y: uint256(0x0a5e66af6292b45fb74c5d93d5cf9b6ef649e35d6dcc1ffc781d2038a301f9d7)
|
|
60
60
|
}),
|
|
61
61
|
qPoseidon2External: Honk.G1Point({
|
|
62
|
-
x: uint256(
|
|
63
|
-
y: uint256(
|
|
62
|
+
x: uint256(0x2b0a956add08b0a436c494b0df6f0f8c46c3384cac4b12382ced4c68df586db0),
|
|
63
|
+
y: uint256(0x163d269cc1d7cd8d56eab21eb4a4f488623d66fbe11576ba746924e512bae194)
|
|
64
64
|
}),
|
|
65
65
|
qPoseidon2Internal: Honk.G1Point({
|
|
66
|
-
x: uint256(
|
|
67
|
-
y: uint256(
|
|
66
|
+
x: uint256(0x1da6676cc9b080ecd66a5f0d7b45b6cbda1f81f2c351b25c9e251e0b5c64e5ab),
|
|
67
|
+
y: uint256(0x183a1995a089488ea19245d06bd0db968f862e67e92e0f94d375bbf8c1f7499d)
|
|
68
68
|
}),
|
|
69
69
|
s1: Honk.G1Point({
|
|
70
|
-
x: uint256(
|
|
71
|
-
y: uint256(
|
|
70
|
+
x: uint256(0x262b5b85bfc63ed2c654dace13dd4174f12d7c742f0718e9d5a1e98994c32083),
|
|
71
|
+
y: uint256(0x21fe8ee6c561fcab51f58a368471a5ce2317a7b75476886c1b536e76aeee6b2a)
|
|
72
72
|
}),
|
|
73
73
|
s2: Honk.G1Point({
|
|
74
|
-
x: uint256(
|
|
75
|
-
y: uint256(
|
|
74
|
+
x: uint256(0x00af332d7114f45137a5543d5afbbde445b1423800e4fc74d21e3a6fb609fd94),
|
|
75
|
+
y: uint256(0x1954104be52a1ead2ec9197481607a7d3ca77ea30aea48f69d3278ee8fde3bb5)
|
|
76
76
|
}),
|
|
77
77
|
s3: Honk.G1Point({
|
|
78
|
-
x: uint256(
|
|
79
|
-
y: uint256(
|
|
78
|
+
x: uint256(0x0b6ef97fac2880a778ef04ac752a7c29bade69fede791130cf137350d7b55bf2),
|
|
79
|
+
y: uint256(0x29352e633fdd5f90c535ff3fa1a328c4fb10e829260c89a7400ad4c68c4320c0)
|
|
80
80
|
}),
|
|
81
81
|
s4: Honk.G1Point({
|
|
82
|
-
x: uint256(
|
|
83
|
-
y: uint256(
|
|
82
|
+
x: uint256(0x2b6d511d05a187438ba738e2a267129c7eab60a40d2b7626162a7e62aa49decf),
|
|
83
|
+
y: uint256(0x2e85f7538945d8929e37bd7bd58b410143dd10f3988f55ba3cdd8ca5a9ead0ca)
|
|
84
84
|
}),
|
|
85
85
|
t1: Honk.G1Point({
|
|
86
|
-
x: uint256(
|
|
87
|
-
y: uint256(
|
|
86
|
+
x: uint256(0x2026dc48b1355cab6cc65f62e57c2a8b939208914da13061dece58a7d107d72f),
|
|
87
|
+
y: uint256(0x24befe3cce085c85100629c8aff5b47e2b283b96796aabd7c6a8b8199a40be2e)
|
|
88
88
|
}),
|
|
89
89
|
t2: Honk.G1Point({
|
|
90
|
-
x: uint256(
|
|
91
|
-
y: uint256(
|
|
90
|
+
x: uint256(0x2baaa5f1b8119ca614edaf29dbdee4507d6560b7c1a909bc7e3f1f84b49258ea),
|
|
91
|
+
y: uint256(0x12be10f98e563e199b1c3c94a34874986934673a787367455e03ccf4a3ef0cdd)
|
|
92
92
|
}),
|
|
93
93
|
t3: Honk.G1Point({
|
|
94
|
-
x: uint256(
|
|
95
|
-
y: uint256(
|
|
94
|
+
x: uint256(0x160f6a41dabe93896d38ef5a3fa159df028044d93f4ce90f5473c533a792a824),
|
|
95
|
+
y: uint256(0x1038a846deed12d6e5215a4f408c3d9c66baf984ec4c1905c67d4f3c2d80aa24)
|
|
96
96
|
}),
|
|
97
97
|
t4: Honk.G1Point({
|
|
98
|
-
x: uint256(
|
|
99
|
-
y: uint256(
|
|
98
|
+
x: uint256(0x2c2de7017bed19f1dbac860651ec57db3c7f7d206fd6b68243459b1e109c6b59),
|
|
99
|
+
y: uint256(0x01622ed4ea3dcb382f63b793d3ee003d7c33d1aea42683fc5424070f5ad069b9)
|
|
100
100
|
}),
|
|
101
101
|
id1: Honk.G1Point({
|
|
102
|
-
x: uint256(
|
|
103
|
-
y: uint256(
|
|
102
|
+
x: uint256(0x08b931d23212132a225290da0401c47bc60beaf11bbaee3ff1a676b2a8a8cbd2),
|
|
103
|
+
y: uint256(0x2b704805f8988ac4fe51638fa6eb80371668913b5253aeee9dd102477995a8a1)
|
|
104
104
|
}),
|
|
105
105
|
id2: Honk.G1Point({
|
|
106
|
-
x: uint256(
|
|
107
|
-
y: uint256(
|
|
106
|
+
x: uint256(0x12e0275781e96737e5eb0adb50d093fa7885172e69e9cc51baaf4b05ad1a8830),
|
|
107
|
+
y: uint256(0x03b5d3da82c564191e17426e1e34b59fef2c9de9d6ed16f043333267e544abe3)
|
|
108
108
|
}),
|
|
109
109
|
id3: Honk.G1Point({
|
|
110
|
-
x: uint256(
|
|
111
|
-
y: uint256(
|
|
110
|
+
x: uint256(0x25d731f633791fcedf1b64d76d4a0860352689ab141450737f2349083bcabe8f),
|
|
111
|
+
y: uint256(0x2ffda063edd9ac30be6ae4454ad0bcf77e2be627e73cf22e3aa45eb7715f4c08)
|
|
112
112
|
}),
|
|
113
113
|
id4: Honk.G1Point({
|
|
114
|
-
x: uint256(
|
|
115
|
-
y: uint256(
|
|
114
|
+
x: uint256(0x05607184d3e42dfe8ef18ab55f653af79d0030a5fbc6b4be2421cdcf684b32a2),
|
|
115
|
+
y: uint256(0x05be236673cb6b322f9b720f2806643762463a1c39aa83570ae7c17421b1ccdc)
|
|
116
116
|
}),
|
|
117
117
|
lagrangeFirst: Honk.G1Point({
|
|
118
118
|
x: uint256(0x0000000000000000000000000000000000000000000000000000000000000001),
|
|
119
119
|
y: uint256(0x0000000000000000000000000000000000000000000000000000000000000002)
|
|
120
120
|
}),
|
|
121
121
|
lagrangeLast: Honk.G1Point({
|
|
122
|
-
x: uint256(
|
|
123
|
-
y: uint256(
|
|
122
|
+
x: uint256(0x29e6fb99b7ab5bbaae22112941f9e1dfb35d1b9fb78a0ec9e380859a84f48332),
|
|
123
|
+
y: uint256(0x07eeab05aa34fc5038de782d1ff4619a8cdf44dc3f4071e3feffc6f947821699)
|
|
124
124
|
})
|
|
125
125
|
});
|
|
126
126
|
return vk;
|
|
@@ -272,7 +272,6 @@ uint256 constant BATCHED_RELATION_PARTIAL_LENGTH = 8;
|
|
|
272
272
|
uint256 constant NUMBER_OF_ENTITIES = 40;
|
|
273
273
|
uint256 constant NUMBER_UNSHIFTED = 35;
|
|
274
274
|
uint256 constant NUMBER_TO_BE_SHIFTED = 5;
|
|
275
|
-
uint256 constant PAIRING_POINTS_SIZE = 16;
|
|
276
275
|
|
|
277
276
|
// Alphas are used as relation separators so there should be NUMBER_OF_SUBRELATIONS - 1
|
|
278
277
|
uint256 constant NUMBER_OF_ALPHAS = 25;
|
|
@@ -390,8 +389,6 @@ library Honk {
|
|
|
390
389
|
|
|
391
390
|
|
|
392
391
|
struct Proof {
|
|
393
|
-
// Pairing point object
|
|
394
|
-
Fr[PAIRING_POINTS_SIZE] pairingPointObject;
|
|
395
392
|
// Free wires
|
|
396
393
|
Honk.G1ProofPoint w1;
|
|
397
394
|
Honk.G1ProofPoint w2;
|
|
@@ -489,13 +486,9 @@ library TranscriptLib {
|
|
|
489
486
|
round0[0] = bytes32(circuitSize);
|
|
490
487
|
round0[1] = bytes32(publicInputsSize);
|
|
491
488
|
round0[2] = bytes32(pubInputsOffset);
|
|
492
|
-
|
|
493
|
-
for (uint256 i = 0; i < publicInputsSize - PAIRING_POINTS_SIZE; i++) {
|
|
489
|
+
for (uint256 i = 0; i < publicInputsSize; i++) {
|
|
494
490
|
round0[3 + i] = bytes32(publicInputs[i]);
|
|
495
491
|
}
|
|
496
|
-
for (uint256 i = 0; i < PAIRING_POINTS_SIZE; i++) {
|
|
497
|
-
round0[3 + publicInputsSize - PAIRING_POINTS_SIZE + i] = FrLib.toBytes32(proof.pairingPointObject[i]);
|
|
498
|
-
}
|
|
499
492
|
|
|
500
493
|
// Create the first challenge
|
|
501
494
|
// Note: w4 is added to the challenge later on
|
|
@@ -680,33 +673,19 @@ library TranscriptLib {
|
|
|
680
673
|
}
|
|
681
674
|
|
|
682
675
|
function loadProof(bytes calldata proof) internal pure returns (Honk.Proof memory p) {
|
|
683
|
-
// TODO(https://github.com/AztecProtocol/barretenberg/issues/1332): Optimize this away when we finalize.
|
|
684
|
-
uint256 boundary = 0x0;
|
|
685
|
-
|
|
686
|
-
// Pairing point object
|
|
687
|
-
for (uint256 i = 0; i < PAIRING_POINTS_SIZE; i++) {
|
|
688
|
-
p.pairingPointObject[i] = bytesToFr(proof[boundary:boundary + 0x20]);
|
|
689
|
-
boundary += 0x20;
|
|
690
|
-
}
|
|
691
676
|
// Commitments
|
|
692
|
-
p.w1 = bytesToG1ProofPoint(proof[
|
|
693
|
-
|
|
694
|
-
p.w2 = bytesToG1ProofPoint(proof[
|
|
695
|
-
|
|
696
|
-
p.w3 = bytesToG1ProofPoint(proof[boundary:boundary + 0x80]);
|
|
697
|
-
boundary += 0x80;
|
|
677
|
+
p.w1 = bytesToG1ProofPoint(proof[0x0:0x80]);
|
|
678
|
+
|
|
679
|
+
p.w2 = bytesToG1ProofPoint(proof[0x80:0x100]);
|
|
680
|
+
p.w3 = bytesToG1ProofPoint(proof[0x100:0x180]);
|
|
698
681
|
|
|
699
682
|
// Lookup / Permutation Helper Commitments
|
|
700
|
-
p.lookupReadCounts = bytesToG1ProofPoint(proof[
|
|
701
|
-
|
|
702
|
-
p.
|
|
703
|
-
|
|
704
|
-
p.
|
|
705
|
-
boundary
|
|
706
|
-
p.lookupInverses = bytesToG1ProofPoint(proof[boundary:boundary + 0x80]);
|
|
707
|
-
boundary += 0x80;
|
|
708
|
-
p.zPerm = bytesToG1ProofPoint(proof[boundary:boundary + 0x80]);
|
|
709
|
-
boundary += 0x80;
|
|
683
|
+
p.lookupReadCounts = bytesToG1ProofPoint(proof[0x180:0x200]);
|
|
684
|
+
p.lookupReadTags = bytesToG1ProofPoint(proof[0x200:0x280]);
|
|
685
|
+
p.w4 = bytesToG1ProofPoint(proof[0x280:0x300]);
|
|
686
|
+
p.lookupInverses = bytesToG1ProofPoint(proof[0x300:0x380]);
|
|
687
|
+
p.zPerm = bytesToG1ProofPoint(proof[0x380:0x400]);
|
|
688
|
+
uint256 boundary = 0x400;
|
|
710
689
|
|
|
711
690
|
// Sumcheck univariates
|
|
712
691
|
for (uint256 i = 0; i < CONST_PROOF_SIZE_LOG_N; i++) {
|
|
@@ -736,7 +715,7 @@ library TranscriptLib {
|
|
|
736
715
|
|
|
737
716
|
// Shplonk
|
|
738
717
|
p.shplonkQ = bytesToG1ProofPoint(proof[boundary:boundary + 0x80]);
|
|
739
|
-
boundary
|
|
718
|
+
boundary = boundary + 0x80;
|
|
740
719
|
// KZG
|
|
741
720
|
p.kzgQuotient = bytesToG1ProofPoint(proof[boundary:boundary + 0x80]);
|
|
742
721
|
}
|
|
@@ -1563,7 +1542,7 @@ abstract contract BaseHonkVerifier is IVerifier {
|
|
|
1563
1542
|
error ShpleminiFailed();
|
|
1564
1543
|
|
|
1565
1544
|
// Number of field elements in a ultra honk zero knowledge proof
|
|
1566
|
-
uint256 constant PROOF_SIZE =
|
|
1545
|
+
uint256 constant PROOF_SIZE = 440;
|
|
1567
1546
|
|
|
1568
1547
|
function loadVerificationKey() internal pure virtual returns (Honk.VerificationKey memory);
|
|
1569
1548
|
|
|
@@ -1576,7 +1555,7 @@ abstract contract BaseHonkVerifier is IVerifier {
|
|
|
1576
1555
|
Honk.VerificationKey memory vk = loadVerificationKey();
|
|
1577
1556
|
Honk.Proof memory p = TranscriptLib.loadProof(proof);
|
|
1578
1557
|
|
|
1579
|
-
if (publicInputs.length != vk.publicInputsSize
|
|
1558
|
+
if (publicInputs.length != vk.publicInputsSize) {
|
|
1580
1559
|
revert PublicInputsLengthWrong();
|
|
1581
1560
|
}
|
|
1582
1561
|
|
|
@@ -1587,7 +1566,7 @@ abstract contract BaseHonkVerifier is IVerifier {
|
|
|
1587
1566
|
// Derive public input delta
|
|
1588
1567
|
// TODO(https://github.com/AztecProtocol/barretenberg/issues/1281): Add pubInputsOffset to VK or remove entirely.
|
|
1589
1568
|
t.relationParameters.publicInputsDelta = computePublicInputDelta(
|
|
1590
|
-
publicInputs,
|
|
1569
|
+
publicInputs, t.relationParameters.beta, t.relationParameters.gamma, /*pubInputsOffset=*/1
|
|
1591
1570
|
);
|
|
1592
1571
|
|
|
1593
1572
|
// Sumcheck
|
|
@@ -1600,7 +1579,7 @@ abstract contract BaseHonkVerifier is IVerifier {
|
|
|
1600
1579
|
return sumcheckVerified && shpleminiVerified; // Boolean condition not required - nice for vanity :)
|
|
1601
1580
|
}
|
|
1602
1581
|
|
|
1603
|
-
function computePublicInputDelta(bytes32[] memory publicInputs, Fr
|
|
1582
|
+
function computePublicInputDelta(bytes32[] memory publicInputs, Fr beta, Fr gamma, uint256 offset)
|
|
1604
1583
|
internal
|
|
1605
1584
|
view
|
|
1606
1585
|
returns (Fr publicInputDelta)
|
|
@@ -1612,7 +1591,7 @@ abstract contract BaseHonkVerifier is IVerifier {
|
|
|
1612
1591
|
Fr denominatorAcc = gamma - (beta * FrLib.from(offset + 1));
|
|
1613
1592
|
|
|
1614
1593
|
{
|
|
1615
|
-
for (uint256 i = 0; i < numPublicInputs
|
|
1594
|
+
for (uint256 i = 0; i < numPublicInputs; i++) {
|
|
1616
1595
|
Fr pubInput = FrLib.fromBytes32(publicInputs[i]);
|
|
1617
1596
|
|
|
1618
1597
|
numerator = numerator * (numeratorAcc + pubInput);
|
|
@@ -1621,16 +1600,6 @@ abstract contract BaseHonkVerifier is IVerifier {
|
|
|
1621
1600
|
numeratorAcc = numeratorAcc + beta;
|
|
1622
1601
|
denominatorAcc = denominatorAcc - beta;
|
|
1623
1602
|
}
|
|
1624
|
-
|
|
1625
|
-
for (uint256 i = 0; i < PAIRING_POINTS_SIZE; i++) {
|
|
1626
|
-
Fr pubInput = pairingPointObject[i];
|
|
1627
|
-
|
|
1628
|
-
numerator = numerator * (numeratorAcc + pubInput);
|
|
1629
|
-
denominator = denominator * (denominatorAcc + pubInput);
|
|
1630
|
-
|
|
1631
|
-
numeratorAcc = numeratorAcc + beta;
|
|
1632
|
-
denominatorAcc = denominatorAcc - beta;
|
|
1633
|
-
}
|
|
1634
1603
|
}
|
|
1635
1604
|
|
|
1636
1605
|
// Fr delta = numerator / denominator; // TOOO: batch invert later?
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@crisp-e3/contracts",
|
|
3
|
-
"version": "0.2.
|
|
3
|
+
"version": "0.2.3-test",
|
|
4
4
|
"type": "module",
|
|
5
5
|
"files": [
|
|
6
6
|
"contracts",
|
|
@@ -59,8 +59,8 @@
|
|
|
59
59
|
"typechain": "^8.3.0",
|
|
60
60
|
"typescript": "5.8.3",
|
|
61
61
|
"viem": "2.30.6",
|
|
62
|
-
"@crisp-e3/
|
|
63
|
-
"@crisp-e3/
|
|
62
|
+
"@crisp-e3/sdk": "^0.2.3-test",
|
|
63
|
+
"@crisp-e3/zk-inputs": "^0.2.3-test"
|
|
64
64
|
},
|
|
65
65
|
"scripts": {
|
|
66
66
|
"compile": "hardhat compile",
|