@maci-protocol/testing 0.0.0-ci.00107eb

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.
Files changed (93) hide show
  1. package/CHANGELOG.md +262 -0
  2. package/LICENSE +21 -0
  3. package/README.md +16 -0
  4. package/build/hardhat.config.d.ts +5 -0
  5. package/build/hardhat.config.d.ts.map +1 -0
  6. package/build/hardhat.config.js +37 -0
  7. package/build/hardhat.config.js.map +1 -0
  8. package/build/ts/__tests__/e2e.full.test.d.ts +2 -0
  9. package/build/ts/__tests__/e2e.full.test.d.ts.map +1 -0
  10. package/build/ts/__tests__/e2e.full.test.js +839 -0
  11. package/build/ts/__tests__/e2e.full.test.js.map +1 -0
  12. package/build/ts/__tests__/e2e.nonQv.test.d.ts +2 -0
  13. package/build/ts/__tests__/e2e.nonQv.test.d.ts.map +1 -0
  14. package/build/ts/__tests__/e2e.nonQv.test.js +605 -0
  15. package/build/ts/__tests__/e2e.nonQv.test.js.map +1 -0
  16. package/build/ts/__tests__/e2e.test.d.ts +2 -0
  17. package/build/ts/__tests__/e2e.test.d.ts.map +1 -0
  18. package/build/ts/__tests__/e2e.test.js +1596 -0
  19. package/build/ts/__tests__/e2e.test.js.map +1 -0
  20. package/build/ts/__tests__/integration.test.d.ts +2 -0
  21. package/build/ts/__tests__/integration.test.d.ts.map +1 -0
  22. package/build/ts/__tests__/integration.test.js +288 -0
  23. package/build/ts/__tests__/integration.test.js.map +1 -0
  24. package/build/ts/__tests__/keyChange.test.d.ts +2 -0
  25. package/build/ts/__tests__/keyChange.test.d.ts.map +1 -0
  26. package/build/ts/__tests__/keyChange.test.js +455 -0
  27. package/build/ts/__tests__/keyChange.test.js.map +1 -0
  28. package/build/ts/__tests__/maciKeys.test.d.ts +2 -0
  29. package/build/ts/__tests__/maciKeys.test.d.ts.map +1 -0
  30. package/build/ts/__tests__/maciKeys.test.js +78 -0
  31. package/build/ts/__tests__/maciKeys.test.js.map +1 -0
  32. package/build/ts/__tests__/stress/stress.full.test.d.ts +2 -0
  33. package/build/ts/__tests__/stress/stress.full.test.d.ts.map +1 -0
  34. package/build/ts/__tests__/stress/stress.full.test.js +186 -0
  35. package/build/ts/__tests__/stress/stress.full.test.js.map +1 -0
  36. package/build/ts/__tests__/unit/fundWallet.test.d.ts +2 -0
  37. package/build/ts/__tests__/unit/fundWallet.test.d.ts.map +1 -0
  38. package/build/ts/__tests__/unit/fundWallet.test.js +15 -0
  39. package/build/ts/__tests__/unit/fundWallet.test.js.map +1 -0
  40. package/build/ts/__tests__/unit/joinPoll.test.d.ts +2 -0
  41. package/build/ts/__tests__/unit/joinPoll.test.d.ts.map +1 -0
  42. package/build/ts/__tests__/unit/joinPoll.test.js +160 -0
  43. package/build/ts/__tests__/unit/joinPoll.test.js.map +1 -0
  44. package/build/ts/__tests__/unit/poll.test.d.ts +2 -0
  45. package/build/ts/__tests__/unit/poll.test.d.ts.map +1 -0
  46. package/build/ts/__tests__/unit/poll.test.js +87 -0
  47. package/build/ts/__tests__/unit/poll.test.js.map +1 -0
  48. package/build/ts/__tests__/unit/publish.test.d.ts +2 -0
  49. package/build/ts/__tests__/unit/publish.test.d.ts.map +1 -0
  50. package/build/ts/__tests__/unit/publish.test.js +130 -0
  51. package/build/ts/__tests__/unit/publish.test.js.map +1 -0
  52. package/build/ts/__tests__/unit/setVerifyingKeys.test.d.ts +2 -0
  53. package/build/ts/__tests__/unit/setVerifyingKeys.test.d.ts.map +1 -0
  54. package/build/ts/__tests__/unit/setVerifyingKeys.test.js +52 -0
  55. package/build/ts/__tests__/unit/setVerifyingKeys.test.js.map +1 -0
  56. package/build/ts/__tests__/unit/signup.test.d.ts +2 -0
  57. package/build/ts/__tests__/unit/signup.test.d.ts.map +1 -0
  58. package/build/ts/__tests__/unit/signup.test.js +65 -0
  59. package/build/ts/__tests__/unit/signup.test.js.map +1 -0
  60. package/build/ts/__tests__/unit/timeTravel.test.d.ts +2 -0
  61. package/build/ts/__tests__/unit/timeTravel.test.d.ts.map +1 -0
  62. package/build/ts/__tests__/unit/timeTravel.test.js +14 -0
  63. package/build/ts/__tests__/unit/timeTravel.test.js.map +1 -0
  64. package/build/ts/__tests__/unit/utils.test.d.ts +2 -0
  65. package/build/ts/__tests__/unit/utils.test.d.ts.map +1 -0
  66. package/build/ts/__tests__/unit/utils.test.js +36 -0
  67. package/build/ts/__tests__/unit/utils.test.js.map +1 -0
  68. package/build/ts/constants.d.ts +82 -0
  69. package/build/ts/constants.d.ts.map +1 -0
  70. package/build/ts/constants.js +198 -0
  71. package/build/ts/constants.js.map +1 -0
  72. package/build/ts/index.d.ts +4 -0
  73. package/build/ts/index.d.ts.map +1 -0
  74. package/build/ts/index.js +23 -0
  75. package/build/ts/index.js.map +1 -0
  76. package/build/ts/testingClass.d.ts +43 -0
  77. package/build/ts/testingClass.d.ts.map +1 -0
  78. package/build/ts/testingClass.js +145 -0
  79. package/build/ts/testingClass.js.map +1 -0
  80. package/build/ts/types.d.ts +99 -0
  81. package/build/ts/types.d.ts.map +1 -0
  82. package/build/ts/types.js +3 -0
  83. package/build/ts/types.js.map +1 -0
  84. package/build/ts/user.d.ts +27 -0
  85. package/build/ts/user.d.ts.map +1 -0
  86. package/build/ts/user.js +36 -0
  87. package/build/ts/user.js.map +1 -0
  88. package/build/ts/utils.d.ts +70 -0
  89. package/build/ts/utils.d.ts.map +1 -0
  90. package/build/ts/utils.js +192 -0
  91. package/build/ts/utils.js.map +1 -0
  92. package/build/tsconfig.tsbuildinfo +1 -0
  93. package/package.json +54 -0
@@ -0,0 +1,186 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ const crypto_1 = require("@maci-protocol/crypto");
4
+ const domainobjs_1 = require("@maci-protocol/domainobjs");
5
+ const sdk_1 = require("@maci-protocol/sdk");
6
+ const constants_1 = require("../../constants");
7
+ const utils_1 = require("../../utils");
8
+ const filePerMode = {
9
+ [sdk_1.EMode.FULL]: {
10
+ voteTallyZkey: constants_1.testTallyVotesFullZkeyPath,
11
+ messageProcessorZkey: constants_1.testProcessMessageFullZkeyPath,
12
+ messageProcessorWitnessGenerator: constants_1.testProcessMessagesFullWitnessPath,
13
+ messageProcessorWitnessDatFile: constants_1.testProcessMessagesFullWitnessDatPath,
14
+ voteTallyWitnessGenerator: constants_1.testTallyVotesFullWitnessPath,
15
+ voteTallyWitnessDatFile: constants_1.testTallyVotesFullWitnessDatPath,
16
+ messageProcessorWasm: constants_1.testProcessMessagesFullWasmPath,
17
+ voteTallyWasm: constants_1.testTallyVotesFullWasmPath,
18
+ },
19
+ [sdk_1.EMode.NON_QV]: {
20
+ voteTallyZkey: constants_1.testVoteTallyNonQvZkeyPath,
21
+ messageProcessorZkey: constants_1.testProcessMessageNonQvZkeyPath,
22
+ messageProcessorWitnessGenerator: constants_1.testProcessMessagesNonQvWitnessPath,
23
+ messageProcessorWitnessDatFile: constants_1.testProcessMessagesNonQvWitnessDatPath,
24
+ voteTallyWitnessGenerator: constants_1.testVoteTallyNonQvWitnessPath,
25
+ voteTallyWitnessDatFile: constants_1.testVoteTallyNonQvWitnessDatPath,
26
+ messageProcessorWasm: constants_1.testProcessMessagesNonQvWasmPath,
27
+ voteTallyWasm: constants_1.testVoteTallyNonQvWasmPath,
28
+ },
29
+ [sdk_1.EMode.QV]: {
30
+ voteTallyZkey: constants_1.testTallyVotesZkeyPath,
31
+ messageProcessorZkey: constants_1.testProcessMessageZkeyPath,
32
+ messageProcessorWitnessGenerator: constants_1.testProcessMessagesWitnessPath,
33
+ messageProcessorWitnessDatFile: constants_1.testProcessMessagesWitnessDatPath,
34
+ voteTallyWitnessGenerator: constants_1.testTallyVotesWitnessPath,
35
+ voteTallyWitnessDatFile: constants_1.testTallyVotesWitnessDatPath,
36
+ messageProcessorWasm: constants_1.testProcessMessagesWasmPath,
37
+ voteTallyWasm: constants_1.testTallyVotesWasmPath,
38
+ },
39
+ };
40
+ const numberSignups = 100;
41
+ const numberMessagesPerUser = 2;
42
+ const pollDuration = 900000;
43
+ Object.entries(filePerMode).forEach((data) => {
44
+ const mode = Number(data[0]);
45
+ const files = data[1];
46
+ describe(`stress tests ${sdk_1.EMode[mode]}`, function test() {
47
+ const useWasm = (0, sdk_1.isArm)();
48
+ this.timeout(pollDuration);
49
+ let maciAddresses;
50
+ let initialVoiceCreditProxyContractAddress;
51
+ let signer;
52
+ const generateProofsArgs = {
53
+ outputDir: constants_1.testProofsDirPath,
54
+ tallyFile: constants_1.testTallyFilePath,
55
+ voteTallyZkey: files.voteTallyZkey,
56
+ messageProcessorZkey: files.messageProcessorZkey,
57
+ pollId: 0n,
58
+ rapidsnark: constants_1.testRapidsnarkPath,
59
+ messageProcessorWitnessGenerator: files.messageProcessorWitnessGenerator,
60
+ messageProcessorWitnessDatFile: files.messageProcessorWitnessDatFile,
61
+ voteTallyWitnessGenerator: files.voteTallyWitnessGenerator,
62
+ voteTallyWitnessDatFile: files.voteTallyWitnessDatFile,
63
+ coordinatorPrivateKey: constants_1.coordinatorPrivateKey,
64
+ messageProcessorWasm: files.messageProcessorWasm,
65
+ voteTallyWasm: files.voteTallyWasm,
66
+ useWasm,
67
+ mode,
68
+ };
69
+ const prepareTest = async () => {
70
+ const [signupPolicy, , signupPolicyFactory, signupCheckerFactory] = await (0, sdk_1.deployFreeForAllSignUpPolicy)({}, signer, true);
71
+ const signupPolicyContractAddress = await signupPolicy.getAddress();
72
+ const [pollPolicy] = await (0, sdk_1.deployFreeForAllSignUpPolicy)({ policy: signupPolicyFactory, checker: signupCheckerFactory }, signer, true);
73
+ const pollPolicyContractAddress = await pollPolicy.getAddress();
74
+ // deploy the smart contracts
75
+ const maciContractsAddresses = await (0, sdk_1.deployMaci)({
76
+ ...constants_1.deployArgs,
77
+ signer,
78
+ signupPolicyAddress: signupPolicyContractAddress,
79
+ });
80
+ // we set the verifying keys
81
+ const { verifyingKeysRegistryContractAddress } = maciContractsAddresses;
82
+ await (0, sdk_1.setVerifyingKeys)({
83
+ ...(await (0, constants_1.verifyingKeysArgs)(signer, [mode])),
84
+ verifyingKeysRegistryAddress: verifyingKeysRegistryContractAddress,
85
+ });
86
+ const startDate = await (0, sdk_1.getBlockTimestamp)(signer);
87
+ // deploy a poll contract
88
+ await (0, sdk_1.deployPoll)({
89
+ ...constants_1.deployPollArgs,
90
+ signer,
91
+ pollStartTimestamp: startDate,
92
+ pollEndTimestamp: startDate + pollDuration,
93
+ relayers: [await signer.getAddress()],
94
+ maciAddress: maciContractsAddresses.maciContractAddress,
95
+ policyContractAddress: pollPolicyContractAddress,
96
+ initialVoiceCreditProxyContractAddress,
97
+ mode,
98
+ });
99
+ return maciContractsAddresses;
100
+ };
101
+ // before all tests we deploy the verifying keys registry contract and set the verifying keys
102
+ before(async () => {
103
+ signer = await (0, sdk_1.getDefaultSigner)();
104
+ const constantInitialVoiceCreditProxyFactory = await (0, sdk_1.deployConstantInitialVoiceCreditProxyFactory)(signer, true);
105
+ const initialVoiceCreditProxy = await (0, sdk_1.deployConstantInitialVoiceCreditProxy)({ amount: constants_1.DEFAULT_INITIAL_VOICE_CREDITS }, constantInitialVoiceCreditProxyFactory, signer);
106
+ initialVoiceCreditProxyContractAddress = await initialVoiceCreditProxy.getAddress();
107
+ });
108
+ describe(`${numberSignups} signup(s), ${numberSignups * numberMessagesPerUser} message(s)`, () => {
109
+ const users = Array.from({ length: numberSignups }, () => new domainobjs_1.Keypair());
110
+ before(async () => {
111
+ // deploy the smart contracts
112
+ maciAddresses = await prepareTest();
113
+ });
114
+ after(async () => {
115
+ await (0, utils_1.clean)();
116
+ });
117
+ it("should signup users", async () => {
118
+ // eslint-disable-next-line @typescript-eslint/prefer-for-of
119
+ for (let index = 0; index < users.length; index += 1) {
120
+ // eslint-disable-next-line no-await-in-loop
121
+ await (0, sdk_1.signup)({
122
+ maciAddress: maciAddresses.maciContractAddress,
123
+ maciPublicKey: users[index].publicKey.serialize(),
124
+ sgData: constants_1.DEFAULT_SG_DATA,
125
+ signer,
126
+ });
127
+ }
128
+ });
129
+ it("should join users", async () => {
130
+ // eslint-disable-next-line @typescript-eslint/prefer-for-of
131
+ for (let index = 0; index < users.length; index += 1) {
132
+ // eslint-disable-next-line no-await-in-loop
133
+ await (0, sdk_1.joinPoll)({
134
+ maciAddress: maciAddresses.maciContractAddress,
135
+ privateKey: users[index].privateKey.serialize(),
136
+ pollId: 0n,
137
+ pollJoiningZkey: constants_1.testPollJoiningZkeyPath,
138
+ useWasm,
139
+ pollJoiningWasm: constants_1.testPollJoiningWasmPath,
140
+ pollWitnessGenerator: constants_1.testPollJoiningWitnessPath,
141
+ rapidsnark: constants_1.testRapidsnarkPath,
142
+ sgDataArg: constants_1.DEFAULT_SG_DATA,
143
+ ivcpDataArg: constants_1.DEFAULT_IVCP_DATA,
144
+ signer,
145
+ });
146
+ }
147
+ });
148
+ it("should publish messages", async () => {
149
+ // eslint-disable-next-line @typescript-eslint/prefer-for-of
150
+ for (let index = 0; index < users.length; index += 1) {
151
+ for (let voteOptionIndex = numberMessagesPerUser; voteOptionIndex >= 0; voteOptionIndex -= 1) {
152
+ // eslint-disable-next-line no-await-in-loop
153
+ await (0, sdk_1.publish)({
154
+ publicKey: users[index].publicKey.serialize(),
155
+ stateIndex: BigInt(index + 1),
156
+ voteOptionIndex: BigInt(voteOptionIndex),
157
+ nonce: 1n,
158
+ pollId: 0n,
159
+ newVoteWeight: BigInt(constants_1.DEFAULT_INITIAL_VOICE_CREDITS),
160
+ maciAddress: maciAddresses.maciContractAddress,
161
+ salt: (0, crypto_1.generateRandomSalt)(),
162
+ privateKey: users[index].privateKey.serialize(),
163
+ signer,
164
+ });
165
+ }
166
+ }
167
+ });
168
+ it("should generate zk-SNARK proofs and verify them", async () => {
169
+ await (0, sdk_1.timeTravel)({ seconds: pollDuration, signer });
170
+ await (0, sdk_1.mergeSignups)({ ...constants_1.mergeSignupsArgs, maciAddress: maciAddresses.maciContractAddress, signer });
171
+ const { tallyData: tallyFileData } = await (0, sdk_1.generateProofs)({
172
+ ...generateProofsArgs,
173
+ maciAddress: maciAddresses.maciContractAddress,
174
+ signer,
175
+ });
176
+ await (0, sdk_1.proveOnChain)({ ...constants_1.proveOnChainArgs, maciAddress: maciAddresses.maciContractAddress, signer });
177
+ await (0, sdk_1.verify)({
178
+ ...(await (0, constants_1.verifyArgs)(signer)),
179
+ tallyData: tallyFileData,
180
+ maciAddress: tallyFileData.maci,
181
+ });
182
+ });
183
+ });
184
+ });
185
+ });
186
+ //# sourceMappingURL=stress.full.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"stress.full.test.js","sourceRoot":"","sources":["../../../../ts/__tests__/stress/stress.full.test.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=fundWallet.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"fundWallet.test.d.ts","sourceRoot":"","sources":["../../../../ts/__tests__/unit/fundWallet.test.ts"],"names":[],"mappings":""}
@@ -0,0 +1,15 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ const sdk_1 = require("@maci-protocol/sdk");
4
+ const chai_1 = require("chai");
5
+ const ethers_1 = require("ethers");
6
+ describe("fundWallet", () => {
7
+ it("should increase the balance of a wallet", async () => {
8
+ const signer = await (0, sdk_1.getDefaultSigner)();
9
+ const balanceBefore = await signer.provider?.getBalance(ethers_1.ZeroAddress);
10
+ await (0, sdk_1.fundWallet)({ amount: 1000000000, address: ethers_1.ZeroAddress, signer });
11
+ const balanceAfter = await signer.provider?.getBalance(ethers_1.ZeroAddress);
12
+ (0, chai_1.expect)(Number(balanceAfter)).to.be.gt(Number(balanceBefore));
13
+ });
14
+ });
15
+ //# sourceMappingURL=fundWallet.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"fundWallet.test.js","sourceRoot":"","sources":["../../../../ts/__tests__/unit/fundWallet.test.ts"],"names":[],"mappings":";;AAAA,4CAAkE;AAClE,+BAA8B;AAC9B,mCAAqC;AAErC,QAAQ,CAAC,YAAY,EAAE,GAAG,EAAE;IAC1B,EAAE,CAAC,yCAAyC,EAAE,KAAK,IAAI,EAAE;QACvD,MAAM,MAAM,GAAG,MAAM,IAAA,sBAAgB,GAAE,CAAC;QAExC,MAAM,aAAa,GAAG,MAAM,MAAM,CAAC,QAAQ,EAAE,UAAU,CAAC,oBAAW,CAAC,CAAC;QACrE,MAAM,IAAA,gBAAU,EAAC,EAAE,MAAM,EAAE,UAAU,EAAE,OAAO,EAAE,oBAAW,EAAE,MAAM,EAAE,CAAC,CAAC;QACvE,MAAM,YAAY,GAAG,MAAM,MAAM,CAAC,QAAQ,EAAE,UAAU,CAAC,oBAAW,CAAC,CAAC;QAEpE,IAAA,aAAM,EAAC,MAAM,CAAC,YAAY,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,MAAM,CAAC,aAAc,CAAC,CAAC,CAAC;IAChE,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=joinPoll.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"joinPoll.test.d.ts","sourceRoot":"","sources":["../../../../ts/__tests__/unit/joinPoll.test.ts"],"names":[],"mappings":""}
@@ -0,0 +1,160 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ const domainobjs_1 = require("@maci-protocol/domainobjs");
4
+ const sdk_1 = require("@maci-protocol/sdk");
5
+ const browser_1 = require("@maci-protocol/sdk/browser");
6
+ const chai_1 = require("chai");
7
+ const constants_1 = require("../../constants");
8
+ const utils_1 = require("../../utils");
9
+ const useWasm = (0, utils_1.isArm)();
10
+ describe("joinPoll", function test() {
11
+ let signer;
12
+ let maciAddresses;
13
+ let initialVoiceCreditProxyContractAddress;
14
+ const users = new Array(3).fill(undefined).map(() => new domainobjs_1.Keypair());
15
+ const mockPollId = 9000n;
16
+ this.timeout(900000);
17
+ // before all tests we deploy the verifying keys registry contract and set the verifying keys
18
+ before(async () => {
19
+ signer = await (0, sdk_1.getDefaultSigner)();
20
+ const [signupPolicy, , signupPolicyFactory, signupCheckerFactory] = await (0, sdk_1.deployFreeForAllSignUpPolicy)({}, signer, true);
21
+ const signupPolicyContractAddress = await signupPolicy.getAddress();
22
+ const [pollPolicy] = await (0, sdk_1.deployFreeForAllSignUpPolicy)({ policy: signupPolicyFactory, checker: signupCheckerFactory }, signer, true);
23
+ const pollPolicyContractAddress = await pollPolicy.getAddress();
24
+ const constantInitialVoiceCreditProxyFactory = await (0, sdk_1.deployConstantInitialVoiceCreditProxyFactory)(signer, true);
25
+ const initialVoiceCreditProxy = await (0, sdk_1.deployConstantInitialVoiceCreditProxy)({ amount: constants_1.DEFAULT_INITIAL_VOICE_CREDITS }, constantInitialVoiceCreditProxyFactory, signer);
26
+ initialVoiceCreditProxyContractAddress = await initialVoiceCreditProxy.getAddress();
27
+ const startDate = await (0, sdk_1.getBlockTimestamp)(signer);
28
+ // deploy the smart contracts
29
+ maciAddresses = await (0, sdk_1.deployMaci)({
30
+ ...constants_1.deployArgs,
31
+ signer,
32
+ signupPolicyAddress: signupPolicyContractAddress,
33
+ });
34
+ // we set the verifying keys
35
+ const { verifyingKeysRegistryContractAddress } = maciAddresses;
36
+ await (0, sdk_1.setVerifyingKeys)({
37
+ ...(await (0, constants_1.verifyingKeysArgs)(signer)),
38
+ verifyingKeysRegistryAddress: verifyingKeysRegistryContractAddress,
39
+ });
40
+ // signup the user
41
+ await (0, sdk_1.signup)({
42
+ maciAddress: maciAddresses.maciContractAddress,
43
+ maciPublicKey: users[0].publicKey.serialize(),
44
+ sgData: constants_1.DEFAULT_SG_DATA,
45
+ signer,
46
+ });
47
+ await (0, sdk_1.signup)({
48
+ maciAddress: maciAddresses.maciContractAddress,
49
+ maciPublicKey: users[1].publicKey.serialize(),
50
+ sgData: constants_1.DEFAULT_SG_DATA,
51
+ signer,
52
+ });
53
+ await (0, sdk_1.signup)({
54
+ maciAddress: maciAddresses.maciContractAddress,
55
+ maciPublicKey: users[2].publicKey.serialize(),
56
+ sgData: constants_1.DEFAULT_SG_DATA,
57
+ signer,
58
+ });
59
+ // deploy a poll contract
60
+ await (0, sdk_1.deployPoll)({
61
+ ...constants_1.deployPollArgs,
62
+ signer,
63
+ pollStartTimestamp: startDate,
64
+ pollEndTimestamp: startDate + constants_1.pollDuration,
65
+ relayers: [await signer.getAddress()],
66
+ maciAddress: maciAddresses.maciContractAddress,
67
+ policyContractAddress: pollPolicyContractAddress,
68
+ initialVoiceCreditProxyContractAddress,
69
+ });
70
+ });
71
+ it("should allow to join the poll and return the user data", async () => {
72
+ const startBlock = await signer.provider?.getBlockNumber();
73
+ await (0, sdk_1.joinPoll)({
74
+ maciAddress: maciAddresses.maciContractAddress,
75
+ privateKey: users[0].privateKey.serialize(),
76
+ signer,
77
+ pollId: 0n,
78
+ pollJoiningZkey: constants_1.testPollJoiningZkeyPath,
79
+ useWasm,
80
+ pollJoiningWasm: constants_1.testPollJoiningWasmPath,
81
+ pollWitnessGenerator: constants_1.testPollJoiningWitnessPath,
82
+ rapidsnark: constants_1.testRapidsnarkPath,
83
+ sgDataArg: constants_1.DEFAULT_SG_DATA,
84
+ ivcpDataArg: constants_1.DEFAULT_IVCP_DATA,
85
+ });
86
+ const registeredUserData = await (0, sdk_1.getJoinedUserData)({
87
+ maciAddress: maciAddresses.maciContractAddress,
88
+ pollId: 0n,
89
+ pollPublicKey: users[0].publicKey.serialize(),
90
+ signer,
91
+ startBlock: startBlock || 0,
92
+ });
93
+ (0, chai_1.expect)(registeredUserData.isJoined).to.eq(true);
94
+ (0, chai_1.expect)(BigInt(registeredUserData.pollStateIndex)).to.eq(1);
95
+ });
96
+ it("should allow to join the poll using a precomputed inclusion proof", async () => {
97
+ const startBlock = await signer.provider?.getBlockNumber();
98
+ const stateTree = await (0, sdk_1.generateMaciStateTreeWithEndKey)({
99
+ maciContractAddress: maciAddresses.maciContractAddress,
100
+ signer,
101
+ userPublicKey: users[1].publicKey,
102
+ });
103
+ const inclusionProof = stateTree.signUpTree.generateProof(2);
104
+ await (0, browser_1.joinPoll)({
105
+ maciAddress: maciAddresses.maciContractAddress,
106
+ privateKey: users[1].privateKey.serialize(),
107
+ signer,
108
+ pollId: 0n,
109
+ inclusionProof,
110
+ pollJoiningZkey: constants_1.testPollJoiningZkeyPath,
111
+ pollJoiningWasm: constants_1.testPollJoiningWasmPath,
112
+ sgDataArg: constants_1.DEFAULT_SG_DATA,
113
+ ivcpDataArg: constants_1.DEFAULT_IVCP_DATA,
114
+ });
115
+ const registeredUserData = await (0, sdk_1.getJoinedUserData)({
116
+ maciAddress: maciAddresses.maciContractAddress,
117
+ pollId: 0n,
118
+ pollPublicKey: users[1].publicKey.serialize(),
119
+ signer,
120
+ startBlock: startBlock || 0,
121
+ });
122
+ (0, chai_1.expect)(registeredUserData.isJoined).to.eq(true);
123
+ (0, chai_1.expect)(BigInt(registeredUserData.pollStateIndex)).to.eq(2);
124
+ });
125
+ it("should throw error if poll does not exist", async () => {
126
+ await (0, chai_1.expect)((0, sdk_1.joinPoll)({
127
+ maciAddress: maciAddresses.maciContractAddress,
128
+ privateKey: users[0].privateKey.serialize(),
129
+ signer,
130
+ pollId: mockPollId,
131
+ pollJoiningZkey: constants_1.testPollJoiningZkeyPath,
132
+ sgDataArg: constants_1.DEFAULT_SG_DATA,
133
+ ivcpDataArg: constants_1.DEFAULT_IVCP_DATA,
134
+ })).eventually.rejectedWith("PollDoesNotExist(9000)");
135
+ });
136
+ it("should throw error if user did not sign up to maci and therefore state index is invalid", async () => {
137
+ const keypair = new domainobjs_1.Keypair();
138
+ await (0, chai_1.expect)((0, sdk_1.joinPoll)({
139
+ maciAddress: maciAddresses.maciContractAddress,
140
+ privateKey: keypair.privateKey.serialize(),
141
+ signer,
142
+ pollId: 0n,
143
+ pollJoiningZkey: constants_1.testPollJoiningZkeyPath,
144
+ sgDataArg: constants_1.DEFAULT_SG_DATA,
145
+ ivcpDataArg: constants_1.DEFAULT_IVCP_DATA,
146
+ })).eventually.rejectedWith("Invalid state index");
147
+ });
148
+ it("should throw error if current poll id is invalid", async () => {
149
+ await (0, chai_1.expect)((0, sdk_1.joinPoll)({
150
+ maciAddress: maciAddresses.maciContractAddress,
151
+ privateKey: users[0].privateKey.serialize(),
152
+ signer,
153
+ pollId: -1n,
154
+ pollJoiningZkey: constants_1.testPollJoiningZkeyPath,
155
+ sgDataArg: constants_1.DEFAULT_SG_DATA,
156
+ ivcpDataArg: constants_1.DEFAULT_IVCP_DATA,
157
+ })).eventually.rejectedWith("Invalid poll id");
158
+ });
159
+ });
160
+ //# sourceMappingURL=joinPoll.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"joinPoll.test.js","sourceRoot":"","sources":["../../../../ts/__tests__/unit/joinPoll.test.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=poll.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"poll.test.d.ts","sourceRoot":"","sources":["../../../../ts/__tests__/unit/poll.test.ts"],"names":[],"mappings":""}
@@ -0,0 +1,87 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ const sdk_1 = require("@maci-protocol/sdk");
4
+ const chai_1 = require("chai");
5
+ const constants_1 = require("../../constants");
6
+ describe("poll", function test() {
7
+ this.timeout(900000);
8
+ let maciAddresses;
9
+ let initialVoiceCreditProxyContractAddress;
10
+ let pollAddresses;
11
+ let signer;
12
+ // before all tests we deploy the verifying keys registry contract and set the verifying keys
13
+ before(async () => {
14
+ signer = await (0, sdk_1.getDefaultSigner)();
15
+ const [signupPolicy, , signupPolicyFactory, signupCheckerFactory] = await (0, sdk_1.deployFreeForAllSignUpPolicy)({}, signer, true);
16
+ const signupPolicyContractAddress = await signupPolicy.getAddress();
17
+ const [pollPolicy] = await (0, sdk_1.deployFreeForAllSignUpPolicy)({ policy: signupPolicyFactory, checker: signupCheckerFactory }, signer, true);
18
+ const pollPolicyContractAddress = await pollPolicy.getAddress();
19
+ const constantInitialVoiceCreditProxyFactory = await (0, sdk_1.deployConstantInitialVoiceCreditProxyFactory)(signer, true);
20
+ const initialVoiceCreditProxy = await (0, sdk_1.deployConstantInitialVoiceCreditProxy)({ amount: constants_1.DEFAULT_INITIAL_VOICE_CREDITS }, constantInitialVoiceCreditProxyFactory, signer);
21
+ initialVoiceCreditProxyContractAddress = await initialVoiceCreditProxy.getAddress();
22
+ const startDate = await (0, sdk_1.getBlockTimestamp)(signer);
23
+ // deploy the smart contracts
24
+ maciAddresses = await (0, sdk_1.deployMaci)({
25
+ ...constants_1.deployArgs,
26
+ signer,
27
+ signupPolicyAddress: signupPolicyContractAddress,
28
+ });
29
+ // we set the verifying keys
30
+ const { verifyingKeysRegistryContractAddress } = maciAddresses;
31
+ await (0, sdk_1.setVerifyingKeys)({
32
+ ...(await (0, constants_1.verifyingKeysArgs)(signer)),
33
+ verifyingKeysRegistryAddress: verifyingKeysRegistryContractAddress,
34
+ });
35
+ // deploy a poll contract
36
+ pollAddresses = await (0, sdk_1.deployPoll)({
37
+ ...constants_1.deployPollArgs,
38
+ signer,
39
+ pollStartTimestamp: startDate,
40
+ pollEndTimestamp: startDate + constants_1.pollDuration,
41
+ relayers: [await signer.getAddress()],
42
+ maciAddress: maciAddresses.maciContractAddress,
43
+ policyContractAddress: pollPolicyContractAddress,
44
+ initialVoiceCreditProxyContractAddress,
45
+ });
46
+ });
47
+ describe("check deploy and get poll", () => {
48
+ it("should get current poll properly", async () => {
49
+ const pollData = await (0, sdk_1.getPoll)({
50
+ maciAddress: maciAddresses.maciContractAddress,
51
+ signer,
52
+ });
53
+ const samePollData = await (0, sdk_1.getPoll)({
54
+ maciAddress: maciAddresses.maciContractAddress,
55
+ pollId: pollData.id,
56
+ signer,
57
+ });
58
+ (0, chai_1.expect)(pollData.address).to.eq(pollAddresses.pollContractAddress);
59
+ (0, chai_1.expect)(pollData).to.deep.eq(samePollData);
60
+ });
61
+ it("should get finished poll properly", async () => {
62
+ const pollData = await (0, sdk_1.getPoll)({
63
+ maciAddress: maciAddresses.maciContractAddress,
64
+ provider: signer.provider,
65
+ });
66
+ await (0, sdk_1.timeTravel)({ seconds: constants_1.pollDuration, signer });
67
+ await (0, sdk_1.mergeSignups)({ pollId: BigInt(pollData.id), maciAddress: maciAddresses.maciContractAddress, signer });
68
+ const finishedPollData = await (0, sdk_1.getPoll)({
69
+ maciAddress: maciAddresses.maciContractAddress,
70
+ signer,
71
+ });
72
+ (0, chai_1.expect)(pollData.id).to.eq(finishedPollData.id);
73
+ (0, chai_1.expect)(pollData.address).to.eq(finishedPollData.address);
74
+ (0, chai_1.expect)(finishedPollData.isMerged).to.eq(true);
75
+ });
76
+ it("should throw error if there are no signer and provider", async () => {
77
+ await (0, chai_1.expect)((0, sdk_1.getPoll)({ maciAddress: maciAddresses.maciContractAddress, pollId: -1n })).eventually.rejectedWith("No signer and provider are provided");
78
+ });
79
+ it("should throw error if current poll id is invalid", async () => {
80
+ await (0, chai_1.expect)((0, sdk_1.getPoll)({ maciAddress: maciAddresses.maciContractAddress, pollId: -1n, signer })).eventually.rejectedWith("Invalid poll id -1");
81
+ });
82
+ it("should throw error if current poll is not deployed", async () => {
83
+ await (0, chai_1.expect)((0, sdk_1.getPoll)({ maciAddress: maciAddresses.maciContractAddress, pollId: 9000n, signer })).eventually.rejectedWith("MACI contract doesn't have any deployed poll 9000");
84
+ });
85
+ });
86
+ });
87
+ //# sourceMappingURL=poll.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"poll.test.js","sourceRoot":"","sources":["../../../../ts/__tests__/unit/poll.test.ts"],"names":[],"mappings":";;AAAA,4CAc4B;AAC5B,+BAA8B;AAI9B,+CAMyB;AAEzB,QAAQ,CAAC,MAAM,EAAE,SAAS,IAAI;IAC5B,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC;IAErB,IAAI,aAA6B,CAAC;IAClC,IAAI,sCAA8C,CAAC;IACnD,IAAI,aAAiC,CAAC;IACtC,IAAI,MAAc,CAAC;IAEnB,6FAA6F;IAC7F,MAAM,CAAC,KAAK,IAAI,EAAE;QAChB,MAAM,GAAG,MAAM,IAAA,sBAAgB,GAAE,CAAC;QAElC,MAAM,CAAC,YAAY,EAAE,AAAD,EAAG,mBAAmB,EAAE,oBAAoB,CAAC,GAAG,MAAM,IAAA,kCAA4B,EACpG,EAAE,EACF,MAAM,EACN,IAAI,CACL,CAAC;QACF,MAAM,2BAA2B,GAAG,MAAM,YAAY,CAAC,UAAU,EAAE,CAAC;QAEpE,MAAM,CAAC,UAAU,CAAC,GAAG,MAAM,IAAA,kCAA4B,EACrD,EAAE,MAAM,EAAE,mBAAmB,EAAE,OAAO,EAAE,oBAAoB,EAAE,EAC9D,MAAM,EACN,IAAI,CACL,CAAC;QACF,MAAM,yBAAyB,GAAG,MAAM,UAAU,CAAC,UAAU,EAAE,CAAC;QAEhE,MAAM,sCAAsC,GAAG,MAAM,IAAA,kDAA4C,EAAC,MAAM,EAAE,IAAI,CAAC,CAAC;QAChH,MAAM,uBAAuB,GAAG,MAAM,IAAA,2CAAqC,EACzE,EAAE,MAAM,EAAE,yCAA6B,EAAE,EACzC,sCAAsC,EACtC,MAAM,CACP,CAAC;QACF,sCAAsC,GAAG,MAAM,uBAAuB,CAAC,UAAU,EAAE,CAAC;QAEpF,MAAM,SAAS,GAAG,MAAM,IAAA,uBAAiB,EAAC,MAAM,CAAC,CAAC;QAElD,6BAA6B;QAC7B,aAAa,GAAG,MAAM,IAAA,gBAAU,EAAC;YAC/B,GAAG,sBAAU;YACb,MAAM;YACN,mBAAmB,EAAE,2BAA2B;SACjD,CAAC,CAAC;QAEH,4BAA4B;QAC5B,MAAM,EAAE,oCAAoC,EAAE,GAAG,aAAa,CAAC;QAC/D,MAAM,IAAA,sBAAgB,EAAC;YACrB,GAAG,CAAC,MAAM,IAAA,6BAAiB,EAAC,MAAM,CAAC,CAAC;YACpC,4BAA4B,EAAE,oCAAoC;SACnE,CAAC,CAAC;QAEH,yBAAyB;QACzB,aAAa,GAAG,MAAM,IAAA,gBAAU,EAAC;YAC/B,GAAG,0BAAc;YACjB,MAAM;YACN,kBAAkB,EAAE,SAAS;YAC7B,gBAAgB,EAAE,SAAS,GAAG,wBAAY;YAC1C,QAAQ,EAAE,CAAC,MAAM,MAAM,CAAC,UAAU,EAAE,CAAC;YACrC,WAAW,EAAE,aAAa,CAAC,mBAAmB;YAC9C,qBAAqB,EAAE,yBAAyB;YAChD,sCAAsC;SACvC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;IAEH,QAAQ,CAAC,2BAA2B,EAAE,GAAG,EAAE;QACzC,EAAE,CAAC,kCAAkC,EAAE,KAAK,IAAI,EAAE;YAChD,MAAM,QAAQ,GAAG,MAAM,IAAA,aAAO,EAAC;gBAC7B,WAAW,EAAE,aAAa,CAAC,mBAAmB;gBAC9C,MAAM;aACP,CAAC,CAAC;YACH,MAAM,YAAY,GAAG,MAAM,IAAA,aAAO,EAAC;gBACjC,WAAW,EAAE,aAAa,CAAC,mBAAmB;gBAC9C,MAAM,EAAE,QAAQ,CAAC,EAAE;gBACnB,MAAM;aACP,CAAC,CAAC;YAEH,IAAA,aAAM,EAAC,QAAQ,CAAC,OAAO,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,aAAa,CAAC,mBAAmB,CAAC,CAAC;YAClE,IAAA,aAAM,EAAC,QAAQ,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,YAAY,CAAC,CAAC;QAC5C,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,mCAAmC,EAAE,KAAK,IAAI,EAAE;YACjD,MAAM,QAAQ,GAAG,MAAM,IAAA,aAAO,EAAC;gBAC7B,WAAW,EAAE,aAAa,CAAC,mBAAmB;gBAC9C,QAAQ,EAAE,MAAM,CAAC,QAAS;aAC3B,CAAC,CAAC;YAEH,MAAM,IAAA,gBAAU,EAAC,EAAE,OAAO,EAAE,wBAAY,EAAE,MAAM,EAAE,CAAC,CAAC;YACpD,MAAM,IAAA,kBAAY,EAAC,EAAE,MAAM,EAAE,MAAM,CAAC,QAAQ,CAAC,EAAE,CAAC,EAAE,WAAW,EAAE,aAAa,CAAC,mBAAmB,EAAE,MAAM,EAAE,CAAC,CAAC;YAE5G,MAAM,gBAAgB,GAAG,MAAM,IAAA,aAAO,EAAC;gBACrC,WAAW,EAAE,aAAa,CAAC,mBAAmB;gBAC9C,MAAM;aACP,CAAC,CAAC;YAEH,IAAA,aAAM,EAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,gBAAgB,CAAC,EAAE,CAAC,CAAC;YAC/C,IAAA,aAAM,EAAC,QAAQ,CAAC,OAAO,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,gBAAgB,CAAC,OAAO,CAAC,CAAC;YACzD,IAAA,aAAM,EAAC,gBAAgB,CAAC,QAAQ,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,IAAI,CAAC,CAAC;QAChD,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,wDAAwD,EAAE,KAAK,IAAI,EAAE;YACtE,MAAM,IAAA,aAAM,EAAC,IAAA,aAAO,EAAC,EAAE,WAAW,EAAE,aAAa,CAAC,mBAAmB,EAAE,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,UAAU,CAAC,YAAY,CAC5G,qCAAqC,CACtC,CAAC;QACJ,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,kDAAkD,EAAE,KAAK,IAAI,EAAE;YAChE,MAAM,IAAA,aAAM,EACV,IAAA,aAAO,EAAC,EAAE,WAAW,EAAE,aAAa,CAAC,mBAAmB,EAAE,MAAM,EAAE,CAAC,EAAE,EAAE,MAAM,EAAE,CAAC,CACjF,CAAC,UAAU,CAAC,YAAY,CAAC,oBAAoB,CAAC,CAAC;QAClD,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,oDAAoD,EAAE,KAAK,IAAI,EAAE;YAClE,MAAM,IAAA,aAAM,EACV,IAAA,aAAO,EAAC,EAAE,WAAW,EAAE,aAAa,CAAC,mBAAmB,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,CAAC,CACnF,CAAC,UAAU,CAAC,YAAY,CAAC,mDAAmD,CAAC,CAAC;QACjF,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=publish.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"publish.test.d.ts","sourceRoot":"","sources":["../../../../ts/__tests__/unit/publish.test.ts"],"names":[],"mappings":""}