Skip to content

Commit 991fa14

Browse files
authored
Merge pull request #2869 from privacy-ethereum/feat/bump-excubiae-version
feat: bump excubiae version
2 parents 2833e73 + b0b6996 commit 991fa14

15 files changed

Lines changed: 418 additions & 327 deletions

packages/contracts/hardhat.config.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -93,7 +93,7 @@ const config: HardhatUserConfig = {
9393
mnemonic: TEST_MNEMONIC,
9494
path: "m/44'/60'/0'/0",
9595
initialIndex: 0,
96-
count: 20,
96+
count: 1025,
9797
},
9898
gas: DEFAULT_BLOCK_GAS_LIMIT,
9999
loggingEnabled: process.env.HARDHAT_LOGGING === "true",

packages/contracts/package.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -221,7 +221,7 @@
221221
"benchmark:polygon-cardona-zkevm": "pnpm run benchmark --network polygon_cardona_zkevm"
222222
},
223223
"dependencies": {
224-
"@excubiae/contracts": "^0.11.0",
224+
"@excubiae/contracts": "^0.13.0",
225225
"@maci-protocol/core": "^3.0.0",
226226
"@maci-protocol/crypto": "^3.0.0",
227227
"@maci-protocol/domainobjs": "^3.0.0",

packages/contracts/tests/MACI.test.ts

Lines changed: 12 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -30,6 +30,7 @@ describe("MACI", function test() {
3030
const users = [new Keypair(), new Keypair(), new Keypair()];
3131

3232
let signer: Signer;
33+
let userSigners: Signer[];
3334

3435
const maciState = new MaciState(STATE_TREE_DEPTH);
3536

@@ -41,6 +42,8 @@ describe("MACI", function test() {
4142
stateTreeDepth: STATE_TREE_DEPTH,
4243
signer,
4344
});
45+
const signers = await getSigners();
46+
[signer, ...userSigners] = signers;
4447

4548
maciContract = r.maciContract;
4649
signuPolicyContract = r.policyContract;
@@ -76,10 +79,9 @@ describe("MACI", function test() {
7679
const user = users[index];
7780

7881
// eslint-disable-next-line no-await-in-loop
79-
const tx = await maciContract.signUp(
80-
user.publicKey.asContractParam(),
81-
AbiCoder.defaultAbiCoder().encode(["uint256"], [1]),
82-
);
82+
const tx = await maciContract
83+
.connect(userSigners[index])
84+
.signUp(user.publicKey.asContractParam(), AbiCoder.defaultAbiCoder().encode(["uint256"], [1]));
8385
// eslint-disable-next-line no-await-in-loop
8486
const receipt = await tx.wait();
8587
expect(receipt?.status).to.eq(1);
@@ -158,7 +160,9 @@ describe("MACI", function test() {
158160
// start from one as we already have one signup (blank state leaf)
159161
for (let i = 1; i < maxUsers; i += 1) {
160162
// eslint-disable-next-line no-await-in-loop
161-
await maci.signUp(keypair.publicKey.asContractParam(), AbiCoder.defaultAbiCoder().encode(["uint256"], [1]));
163+
await maci
164+
.connect(userSigners[i])
165+
.signUp(keypair.publicKey.asContractParam(), AbiCoder.defaultAbiCoder().encode(["uint256"], [1]));
162166
}
163167

164168
// the next signup should fail
@@ -181,7 +185,9 @@ describe("MACI", function test() {
181185
for (let i = 1; i < maxUsers; i += 1) {
182186
const keypair = new Keypair();
183187
// eslint-disable-next-line no-await-in-loop
184-
await maci.signUp(keypair.publicKey.asContractParam(), AbiCoder.defaultAbiCoder().encode(["uint256"], [1]));
188+
await maci
189+
.connect(userSigners[i])
190+
.signUp(keypair.publicKey.asContractParam(), AbiCoder.defaultAbiCoder().encode(["uint256"], [1]));
185191
}
186192
});
187193
});

packages/contracts/tests/Poll.test.ts

Lines changed: 28 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@ import { type EthereumProvider } from "hardhat/types";
99

1010
import { deployFreeForAllSignUpPolicy } from "../ts/deploy";
1111
import { type IVerifyingKeyStruct } from "../ts/types";
12-
import { getBlockTimestamp, getDefaultSigner, getSigners } from "../ts/utils";
12+
import { getBlockTimestamp, getSigners } from "../ts/utils";
1313
import {
1414
Poll__factory as PollFactory,
1515
type MACI,
@@ -44,6 +44,7 @@ describe("Poll", function test() {
4444
let pollPolicyContract: IBasePolicy;
4545
let initialVoiceCreditProxyContract: ConstantInitialVoiceCreditProxy;
4646
let signer: Signer;
47+
let userSigners: Signer[];
4748

4849
const coordinator = new Keypair();
4950

@@ -55,7 +56,8 @@ describe("Poll", function test() {
5556

5657
describe("deployment", () => {
5758
before(async () => {
58-
signer = await getDefaultSigner();
59+
const signers = await getSigners();
60+
[signer, ...userSigners] = signers;
5961

6062
const startDate = await getBlockTimestamp(signer);
6163

@@ -76,10 +78,9 @@ describe("Poll", function test() {
7678
maciState.signUp(user.publicKey);
7779

7880
// eslint-disable-next-line no-await-in-loop
79-
await maciContract.signUp(
80-
user.publicKey.asContractParam(),
81-
AbiCoder.defaultAbiCoder().encode(["uint256"], [1]),
82-
);
81+
await maciContract
82+
.connect(userSigners[i])
83+
.signUp(user.publicKey.asContractParam(), AbiCoder.defaultAbiCoder().encode(["uint256"], [1]));
8384
}
8485

8586
[pollPolicyContract] = await deployFreeForAllSignUpPolicy({}, signer, true);
@@ -220,14 +221,16 @@ describe("Poll", function test() {
220221
const publicKey = user.publicKey.asContractParam();
221222
const mockNullifier = AbiCoder.defaultAbiCoder().encode(["uint256"], [i]);
222223

223-
const response = await pollContract.joinPoll(
224-
mockNullifier,
225-
publicKey,
226-
i,
227-
mockProof,
228-
AbiCoder.defaultAbiCoder().encode(["uint256"], [1]),
229-
AbiCoder.defaultAbiCoder().encode(["uint256"], [1]),
230-
);
224+
const response = await pollContract
225+
.connect(userSigners[i])
226+
.joinPoll(
227+
mockNullifier,
228+
publicKey,
229+
i,
230+
mockProof,
231+
AbiCoder.defaultAbiCoder().encode(["uint256"], [1]),
232+
AbiCoder.defaultAbiCoder().encode(["uint256"], [1]),
233+
);
231234
const receipt = await response.wait();
232235
const [event] = await pollContract.queryFilter(
233236
pollContract.filters.PollJoined,
@@ -349,6 +352,7 @@ describe("Poll", function test() {
349352
const mockNullifier = AbiCoder.defaultAbiCoder().encode(["uint256"], [i]);
350353

351354
await contract
355+
.connect(userSigners[i])
352356
.joinPoll(
353357
mockNullifier,
354358
publicKey,
@@ -361,14 +365,16 @@ describe("Poll", function test() {
361365
}
362366

363367
await expect(
364-
contract.joinPoll(
365-
AbiCoder.defaultAbiCoder().encode(["uint256"], [maxUsers]),
366-
new Keypair().publicKey.asContractParam(),
367-
maxUsers,
368-
mockProof,
369-
AbiCoder.defaultAbiCoder().encode(["uint256"], [1]),
370-
AbiCoder.defaultAbiCoder().encode(["uint256"], [1]),
371-
),
368+
contract
369+
.connect(userSigners[maxUsers])
370+
.joinPoll(
371+
AbiCoder.defaultAbiCoder().encode(["uint256"], [maxUsers]),
372+
new Keypair().publicKey.asContractParam(),
373+
maxUsers,
374+
mockProof,
375+
AbiCoder.defaultAbiCoder().encode(["uint256"], [1]),
376+
AbiCoder.defaultAbiCoder().encode(["uint256"], [1]),
377+
),
372378
).to.be.revertedWithCustomError(contract, "TooManySignups");
373379
});
374380
});

packages/contracts/tests/Tally.test.ts

Lines changed: 30 additions & 26 deletions
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,7 @@ import { type EthereumProvider } from "hardhat/types";
2020

2121
import { deployFreeForAllSignUpPolicy } from "../ts/deploy";
2222
import { type IVerifyingKeyStruct } from "../ts/types";
23-
import { asHex, getDefaultSigner, getBlockTimestamp } from "../ts/utils";
23+
import { asHex, getBlockTimestamp, getSigners } from "../ts/utils";
2424
import {
2525
type Tally,
2626
type MACI,
@@ -52,6 +52,7 @@ describe("VoteTally", function test() {
5252
this.timeout(900000); // 15 minutes
5353

5454
let signer: Signer;
55+
let userSigners: Signer[];
5556
let maciContract: MACI;
5657
let pollContract: PollContract;
5758
let tallyContract: Tally;
@@ -75,7 +76,8 @@ describe("VoteTally", function test() {
7576

7677
users = [new Keypair(), new Keypair()];
7778

78-
signer = await getDefaultSigner();
79+
const signers = await getSigners();
80+
[signer, ...userSigners] = signers;
7981

8082
const startTime = await getBlockTimestamp(signer);
8183

@@ -239,10 +241,9 @@ describe("VoteTally", function test() {
239241
// signup on chain
240242

241243
// eslint-disable-next-line no-await-in-loop
242-
await maciContract.signUp(
243-
users[i].publicKey.asContractParam(),
244-
AbiCoder.defaultAbiCoder().encode(["uint256"], [1]),
245-
);
244+
await maciContract
245+
.connect(userSigners[i])
246+
.signUp(users[i].publicKey.asContractParam(), AbiCoder.defaultAbiCoder().encode(["uint256"], [1]));
246247
}
247248

248249
const [pollPolicyContract] = await deployFreeForAllSignUpPolicy({}, signer, true);
@@ -340,14 +341,16 @@ describe("VoteTally", function test() {
340341

341342
// join on chain
342343
// eslint-disable-next-line no-await-in-loop
343-
await pollContract.joinPoll(
344-
nullifier,
345-
pollKeys[i].publicKey.asContractParam(),
346-
i,
347-
[0, 0, 0, 0, 0, 0, 0, 0],
348-
AbiCoder.defaultAbiCoder().encode(["uint256"], [1]),
349-
AbiCoder.defaultAbiCoder().encode(["uint256"], [0]),
350-
);
344+
await pollContract
345+
.connect(userSigners[i])
346+
.joinPoll(
347+
nullifier,
348+
pollKeys[i].publicKey.asContractParam(),
349+
i,
350+
[0, 0, 0, 0, 0, 0, 0, 0],
351+
AbiCoder.defaultAbiCoder().encode(["uint256"], [1]),
352+
AbiCoder.defaultAbiCoder().encode(["uint256"], [0]),
353+
);
351354
}
352355

353356
await timeTravel(signer.provider! as unknown as EthereumProvider, updatedDuration);
@@ -569,10 +572,9 @@ describe("VoteTally", function test() {
569572
// signup on chain
570573

571574
// eslint-disable-next-line no-await-in-loop
572-
await maciContract.signUp(
573-
users[i].publicKey.asContractParam(),
574-
AbiCoder.defaultAbiCoder().encode(["uint256"], [1]),
575-
);
575+
await maciContract
576+
.connect(userSigners[i])
577+
.signUp(users[i].publicKey.asContractParam(), AbiCoder.defaultAbiCoder().encode(["uint256"], [1]));
576578
}
577579

578580
const [pollPolicyContract] = await deployFreeForAllSignUpPolicy({}, signer, true);
@@ -672,14 +674,16 @@ describe("VoteTally", function test() {
672674

673675
// join on chain
674676
// eslint-disable-next-line no-await-in-loop
675-
await pollContract.joinPoll(
676-
nullifier,
677-
pollKeys[i].publicKey.asContractParam(),
678-
i,
679-
[0, 0, 0, 0, 0, 0, 0, 0],
680-
AbiCoder.defaultAbiCoder().encode(["uint256"], [1]),
681-
AbiCoder.defaultAbiCoder().encode(["uint256"], [0]),
682-
);
677+
await pollContract
678+
.connect(userSigners[i])
679+
.joinPoll(
680+
nullifier,
681+
pollKeys[i].publicKey.asContractParam(),
682+
i,
683+
[0, 0, 0, 0, 0, 0, 0, 0],
684+
AbiCoder.defaultAbiCoder().encode(["uint256"], [1]),
685+
AbiCoder.defaultAbiCoder().encode(["uint256"], [0]),
686+
);
683687
}
684688

685689
await timeTravel(signer.provider! as unknown as EthereumProvider, duration);

packages/contracts/tests/policies/SemaphorePolicy.test.ts

Lines changed: 26 additions & 26 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@ import { Keypair } from "@maci-protocol/domainobjs";
22
import { expect } from "chai";
33
import { AbiCoder, type Signer, ZeroAddress } from "ethers";
44

5-
import type { MACI, MockSemaphore, SemaphorePolicy, SemaphoreChecker } from "../../typechain-types";
5+
import type { MACI, MockSemaphore, SemaphorePolicy, SemaphoreChecker, ISemaphore } from "../../typechain-types";
66

77
import { deploySemaphoreSignupPolicy, deployContract } from "../../ts/deploy";
88
import { getDefaultSigner, getSigners } from "../../ts/utils";
@@ -21,44 +21,39 @@ describe("Semaphore", () => {
2121
const validGroupId = 0n;
2222
const invalidGroupId = 1n;
2323

24-
const proof = {
25-
merkleTreeDepth: 1n,
26-
merkleTreeRoot: 0n,
27-
nullifier: 0n,
28-
message: 0n,
29-
scope: validGroupId,
30-
points: [0n, 0n, 0n, 0n, 0n, 0n, 0n, 0n],
31-
};
32-
33-
const invalidProof = {
34-
merkleTreeDepth: 1n,
35-
merkleTreeRoot: 0n,
36-
nullifier: 0n,
37-
message: 0n,
38-
scope: invalidGroupId,
39-
points: [1n, 0n, 0n, 0n, 0n, 0n, 0n, 0n],
40-
};
41-
42-
const encodedProofInvalidGroupId = AbiCoder.defaultAbiCoder().encode(
43-
["uint256", "uint256", "uint256", "uint256", "uint256", "uint256[8]"],
44-
[proof.merkleTreeDepth, proof.merkleTreeRoot, proof.nullifier, proof.message, invalidGroupId, proof.points],
45-
);
24+
let proof: ISemaphore.SemaphoreProofStruct;
25+
let invalidProof: ISemaphore.SemaphoreProofStruct;
4626

4727
before(async () => {
4828
signer = await getDefaultSigner();
4929
mockSemaphore = await deployContract("MockSemaphore", signer, true, validGroupId);
5030
const mockSemaphoreAddress = await mockSemaphore.getAddress();
5131
signerAddress = await signer.getAddress();
5232

53-
// eslint-disable-next-line no-bitwise
54-
proof.scope = (BigInt(signerAddress) << 96n) | validGroupId;
55-
5633
[semaphorePolicy, semaphoreChecker] = await deploySemaphoreSignupPolicy(
5734
{ semaphore: mockSemaphoreAddress, groupId: validGroupId },
5835
{},
5936
signer,
6037
true,
6138
);
39+
40+
proof = {
41+
merkleTreeDepth: 1n,
42+
merkleTreeRoot: 0n,
43+
nullifier: 0n,
44+
message: BigInt(signerAddress),
45+
scope: validGroupId,
46+
points: [0n, 0n, 0n, 0n, 0n, 0n, 0n, 0n],
47+
};
48+
49+
invalidProof = {
50+
merkleTreeDepth: 1n,
51+
merkleTreeRoot: 0n,
52+
nullifier: 0n,
53+
message: BigInt(signerAddress),
54+
scope: invalidGroupId,
55+
points: [1n, 0n, 0n, 0n, 0n, 0n, 0n, 0n],
56+
};
6257
});
6358

6459
describe("Deployment", () => {
@@ -104,6 +99,11 @@ describe("Semaphore", () => {
10499
});
105100

106101
it("should not register a user if the register function is called with invalid groupId", async () => {
102+
const encodedProofInvalidGroupId = AbiCoder.defaultAbiCoder().encode(
103+
["uint256", "uint256", "uint256", "uint256", "uint256", "uint256[8]"],
104+
[proof.merkleTreeDepth, proof.merkleTreeRoot, proof.nullifier, proof.message, invalidGroupId, proof.points],
105+
);
106+
107107
await expect(
108108
maciContract.signUp(user.publicKey.asContractParam(), encodedProofInvalidGroupId),
109109
).to.be.revertedWithCustomError(semaphoreChecker, "InvalidGroup");

packages/testing/hardhat.config.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,7 @@ const config: HardhatUserConfig = {
1111
hardhat: {
1212
gas: GAS_LIMIT,
1313
blockGasLimit: GAS_LIMIT,
14-
accounts: { count: 30, mnemonic: WALLET_MNEMONIC },
14+
accounts: { count: 101, mnemonic: WALLET_MNEMONIC },
1515
mining: {
1616
auto: true,
1717
interval: 100,

packages/testing/package.json

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -43,6 +43,7 @@
4343
"ethers": "^6.15.0",
4444
"hardhat": "^2.25.0",
4545
"@maci-protocol/circuits": "^3.0.0",
46+
"@maci-protocol/contracts": "^3.0.0",
4647
"@maci-protocol/cli": "^3.0.0",
4748
"@maci-protocol/core": "^3.0.0",
4849
"@maci-protocol/crypto": "^3.0.0",

0 commit comments

Comments
 (0)