@maci-protocol/sdk 0.0.0-ci.fd7cff6 → 0.0.0-ci.ffabe48

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 (217) hide show
  1. package/LICENSE +1 -2
  2. package/build/package.json +15 -6
  3. package/build/ts/browser/index.d.ts +6 -7
  4. package/build/ts/browser/index.d.ts.map +1 -1
  5. package/build/ts/browser/index.js +16 -20
  6. package/build/ts/browser/index.js.map +1 -1
  7. package/build/ts/browser/joinPoll.d.ts +10 -0
  8. package/build/ts/browser/joinPoll.d.ts.map +1 -0
  9. package/build/ts/browser/joinPoll.js +88 -0
  10. package/build/ts/browser/joinPoll.js.map +1 -0
  11. package/build/ts/browser/utils.d.ts +18 -0
  12. package/build/ts/browser/utils.d.ts.map +1 -0
  13. package/build/ts/browser/utils.js +37 -0
  14. package/build/ts/browser/utils.js.map +1 -0
  15. package/build/ts/deploy/index.d.ts +3 -2
  16. package/build/ts/deploy/index.d.ts.map +1 -1
  17. package/build/ts/deploy/index.js +5 -3
  18. package/build/ts/deploy/index.js.map +1 -1
  19. package/build/ts/deploy/maci.js +1 -1
  20. package/build/ts/deploy/maci.js.map +1 -1
  21. package/build/ts/deploy/poll.d.ts +1 -1
  22. package/build/ts/deploy/poll.d.ts.map +1 -1
  23. package/build/ts/deploy/poll.js +20 -13
  24. package/build/ts/deploy/poll.js.map +1 -1
  25. package/build/ts/deploy/types.d.ts +21 -8
  26. package/build/ts/deploy/types.d.ts.map +1 -1
  27. package/build/ts/deploy/utils.js +1 -1
  28. package/build/ts/deploy/utils.js.map +1 -1
  29. package/build/ts/deploy/verifyingKeysRegistry.d.ts +7 -0
  30. package/build/ts/deploy/verifyingKeysRegistry.d.ts.map +1 -0
  31. package/build/ts/deploy/verifyingKeysRegistry.js +14 -0
  32. package/build/ts/deploy/verifyingKeysRegistry.js.map +1 -0
  33. package/build/ts/index.d.ts +2 -1
  34. package/build/ts/index.d.ts.map +1 -1
  35. package/build/ts/index.js +26 -8
  36. package/build/ts/index.js.map +1 -1
  37. package/build/ts/maci/policy.d.ts +13 -1
  38. package/build/ts/maci/policy.d.ts.map +1 -1
  39. package/build/ts/maci/policy.js +41 -2
  40. package/build/ts/maci/policy.js.map +1 -1
  41. package/build/ts/maci/state.d.ts +1 -1
  42. package/build/ts/maci/state.js +11 -11
  43. package/build/ts/maci/state.js.map +1 -1
  44. package/build/ts/maci/types.d.ts +34 -2
  45. package/build/ts/maci/types.d.ts.map +1 -1
  46. package/build/ts/maci/types.js +2 -0
  47. package/build/ts/maci/types.js.map +1 -1
  48. package/build/ts/maciKeys/__tests__/keypair.test.js +7 -7
  49. package/build/ts/maciKeys/__tests__/keypair.test.js.map +1 -1
  50. package/build/ts/maciKeys/__tests__/publicKeys.test.js +7 -7
  51. package/build/ts/maciKeys/__tests__/publicKeys.test.js.map +1 -1
  52. package/build/ts/maciKeys/keypair.js +3 -3
  53. package/build/ts/maciKeys/keypair.js.map +1 -1
  54. package/build/ts/maciKeys/publicKeys.d.ts +2 -2
  55. package/build/ts/maciKeys/publicKeys.d.ts.map +1 -1
  56. package/build/ts/maciKeys/publicKeys.js +6 -6
  57. package/build/ts/maciKeys/publicKeys.js.map +1 -1
  58. package/build/ts/poll/poll.js +7 -7
  59. package/build/ts/poll/poll.js.map +1 -1
  60. package/build/ts/poll/types.d.ts +6 -7
  61. package/build/ts/poll/types.d.ts.map +1 -1
  62. package/build/ts/poll/utils.js +3 -3
  63. package/build/ts/poll/utils.js.map +1 -1
  64. package/build/ts/proof/__tests__/download.test.js +7 -4
  65. package/build/ts/proof/__tests__/download.test.js.map +1 -1
  66. package/build/ts/proof/download.d.ts +3 -3
  67. package/build/ts/proof/download.d.ts.map +1 -1
  68. package/build/ts/proof/download.js +5 -7
  69. package/build/ts/proof/download.js.map +1 -1
  70. package/build/ts/proof/generate.d.ts +2 -2
  71. package/build/ts/proof/generate.d.ts.map +1 -1
  72. package/build/ts/proof/generate.js +8 -8
  73. package/build/ts/proof/generate.js.map +1 -1
  74. package/build/ts/proof/prove.js +14 -14
  75. package/build/ts/proof/prove.js.map +1 -1
  76. package/build/ts/proof/types.d.ts +31 -5
  77. package/build/ts/proof/types.d.ts.map +1 -1
  78. package/build/ts/proof/utils.d.ts +10 -0
  79. package/build/ts/proof/utils.d.ts.map +1 -0
  80. package/build/ts/proof/utils.js +24 -0
  81. package/build/ts/proof/utils.js.map +1 -0
  82. package/build/ts/relayer/__tests__/messages.test.js +1 -1
  83. package/build/ts/relayer/__tests__/messages.test.js.map +1 -1
  84. package/build/ts/relayer/__tests__/utils.test.js +3 -3
  85. package/build/ts/relayer/__tests__/utils.test.js.map +1 -1
  86. package/build/ts/relayer/messages.js +1 -1
  87. package/build/ts/relayer/utils.js +4 -4
  88. package/build/ts/relayer/utils.js.map +1 -1
  89. package/build/ts/subgraph/index.d.ts +3 -0
  90. package/build/ts/subgraph/index.d.ts.map +1 -0
  91. package/build/ts/subgraph/index.js +18 -0
  92. package/build/ts/subgraph/index.js.map +1 -0
  93. package/build/ts/subgraph/maciSubgraph.d.ts +28 -0
  94. package/build/ts/subgraph/maciSubgraph.d.ts.map +1 -0
  95. package/build/ts/subgraph/maciSubgraph.js +62 -0
  96. package/build/ts/subgraph/maciSubgraph.js.map +1 -0
  97. package/build/ts/subgraph/types.d.ts +20 -0
  98. package/build/ts/subgraph/types.d.ts.map +1 -0
  99. package/build/ts/subgraph/types.js +3 -0
  100. package/build/ts/subgraph/types.js.map +1 -0
  101. package/build/ts/tally/commitments.d.ts.map +1 -1
  102. package/build/ts/tally/commitments.js +8 -7
  103. package/build/ts/tally/commitments.js.map +1 -1
  104. package/build/ts/tally/index.d.ts +2 -1
  105. package/build/ts/tally/index.d.ts.map +1 -1
  106. package/build/ts/tally/index.js +4 -1
  107. package/build/ts/tally/index.js.map +1 -1
  108. package/build/ts/tally/results.d.ts +14 -0
  109. package/build/ts/tally/results.d.ts.map +1 -0
  110. package/build/ts/tally/results.js +44 -0
  111. package/build/ts/tally/results.js.map +1 -0
  112. package/build/ts/tally/types.d.ts +40 -13
  113. package/build/ts/tally/types.d.ts.map +1 -1
  114. package/build/ts/tally/utils.d.ts +3 -3
  115. package/build/ts/tally/utils.d.ts.map +1 -1
  116. package/build/ts/tally/utils.js +10 -10
  117. package/build/ts/tally/utils.js.map +1 -1
  118. package/build/ts/tally/verification.d.ts +1 -1
  119. package/build/ts/tally/verification.d.ts.map +1 -1
  120. package/build/ts/tally/verification.js +10 -10
  121. package/build/ts/tally/verification.js.map +1 -1
  122. package/build/ts/trees/index.d.ts +2 -2
  123. package/build/ts/trees/index.d.ts.map +1 -1
  124. package/build/ts/trees/index.js +3 -1
  125. package/build/ts/trees/index.js.map +1 -1
  126. package/build/ts/trees/stateTree.d.ts +23 -1
  127. package/build/ts/trees/stateTree.d.ts.map +1 -1
  128. package/build/ts/trees/stateTree.js +76 -12
  129. package/build/ts/trees/stateTree.js.map +1 -1
  130. package/build/ts/trees/types.d.ts +11 -2
  131. package/build/ts/trees/types.d.ts.map +1 -1
  132. package/build/ts/user/index.d.ts +4 -2
  133. package/build/ts/user/index.d.ts.map +1 -1
  134. package/build/ts/user/index.js +14 -8
  135. package/build/ts/user/index.js.map +1 -1
  136. package/build/ts/user/joinPoll.d.ts +8 -0
  137. package/build/ts/user/joinPoll.d.ts.map +1 -0
  138. package/build/ts/user/joinPoll.js +84 -0
  139. package/build/ts/user/joinPoll.js.map +1 -0
  140. package/build/ts/user/signup.d.ts +20 -0
  141. package/build/ts/user/signup.d.ts.map +1 -0
  142. package/build/ts/user/signup.js +84 -0
  143. package/build/ts/user/signup.js.map +1 -0
  144. package/build/ts/user/types.d.ts +60 -20
  145. package/build/ts/user/types.d.ts.map +1 -1
  146. package/build/ts/user/utils.d.ts +42 -14
  147. package/build/ts/user/utils.d.ts.map +1 -1
  148. package/build/ts/user/utils.js +116 -49
  149. package/build/ts/user/utils.js.map +1 -1
  150. package/build/ts/utils/params.d.ts +1 -1
  151. package/build/ts/utils/params.d.ts.map +1 -1
  152. package/build/ts/utils/params.js +3 -3
  153. package/build/ts/utils/params.js.map +1 -1
  154. package/build/ts/utils/proofs.d.ts +2 -2
  155. package/build/ts/utils/proofs.d.ts.map +1 -1
  156. package/build/ts/utils/proofs.js +4 -4
  157. package/build/ts/utils/proofs.js.map +1 -1
  158. package/build/ts/utils/types.d.ts +2 -2
  159. package/build/ts/utils/types.d.ts.map +1 -1
  160. package/build/ts/utils/utils.d.ts +8 -0
  161. package/build/ts/utils/utils.d.ts.map +1 -1
  162. package/build/ts/utils/utils.js +14 -1
  163. package/build/ts/utils/utils.js.map +1 -1
  164. package/build/ts/verifyingKeys/checkVerifyingKeys.d.ts +1 -1
  165. package/build/ts/verifyingKeys/checkVerifyingKeys.d.ts.map +1 -1
  166. package/build/ts/verifyingKeys/checkVerifyingKeys.js +14 -15
  167. package/build/ts/verifyingKeys/checkVerifyingKeys.js.map +1 -1
  168. package/build/ts/verifyingKeys/index.d.ts +2 -2
  169. package/build/ts/verifyingKeys/index.d.ts.map +1 -1
  170. package/build/ts/verifyingKeys/index.js +5 -5
  171. package/build/ts/verifyingKeys/index.js.map +1 -1
  172. package/build/ts/verifyingKeys/setVerifyingKeys.d.ts +1 -1
  173. package/build/ts/verifyingKeys/setVerifyingKeys.d.ts.map +1 -1
  174. package/build/ts/verifyingKeys/setVerifyingKeys.js +46 -35
  175. package/build/ts/verifyingKeys/setVerifyingKeys.js.map +1 -1
  176. package/build/ts/verifyingKeys/types.d.ts +45 -37
  177. package/build/ts/verifyingKeys/types.d.ts.map +1 -1
  178. package/build/ts/verifyingKeys/utils.d.ts +10 -10
  179. package/build/ts/verifyingKeys/utils.d.ts.map +1 -1
  180. package/build/ts/verifyingKeys/utils.js +76 -60
  181. package/build/ts/verifyingKeys/utils.js.map +1 -1
  182. package/build/ts/vote/generate.d.ts +1 -1
  183. package/build/ts/vote/generate.d.ts.map +1 -1
  184. package/build/ts/vote/generate.js +4 -4
  185. package/build/ts/vote/generate.js.map +1 -1
  186. package/build/ts/vote/index.d.ts +1 -1
  187. package/build/ts/vote/index.d.ts.map +1 -1
  188. package/build/ts/vote/index.js +2 -2
  189. package/build/ts/vote/index.js.map +1 -1
  190. package/build/ts/vote/invalidate.js +3 -3
  191. package/build/ts/vote/invalidate.js.map +1 -1
  192. package/build/ts/vote/publish.d.ts +1 -1
  193. package/build/ts/vote/publish.d.ts.map +1 -1
  194. package/build/ts/vote/publish.js +19 -19
  195. package/build/ts/vote/publish.js.map +1 -1
  196. package/build/ts/vote/submit.js +5 -5
  197. package/build/ts/vote/submit.js.map +1 -1
  198. package/build/ts/vote/types.d.ts +6 -6
  199. package/build/ts/vote/types.d.ts.map +1 -1
  200. package/build/ts/vote/utils.d.ts +2 -2
  201. package/build/ts/vote/utils.d.ts.map +1 -1
  202. package/build/ts/vote/utils.js +7 -7
  203. package/build/ts/vote/utils.js.map +1 -1
  204. package/build/tsconfig.build.tsbuildinfo +1 -1
  205. package/package.json +21 -12
  206. package/build/ts/deploy/vkRegistry.d.ts +0 -7
  207. package/build/ts/deploy/vkRegistry.d.ts.map +0 -1
  208. package/build/ts/deploy/vkRegistry.js +0 -14
  209. package/build/ts/deploy/vkRegistry.js.map +0 -1
  210. package/build/ts/proof/constants.d.ts +0 -17
  211. package/build/ts/proof/constants.d.ts.map +0 -1
  212. package/build/ts/proof/constants.js +0 -20
  213. package/build/ts/proof/constants.js.map +0 -1
  214. package/build/ts/user/user.d.ts +0 -42
  215. package/build/ts/user/user.d.ts.map +0 -1
  216. package/build/ts/user/user.js +0 -192
  217. package/build/ts/user/user.js.map +0 -1
@@ -2,14 +2,14 @@
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.verify = void 0;
4
4
  const typechain_types_1 = require("@maci-protocol/contracts/typechain-types");
5
+ const core_1 = require("@maci-protocol/core");
5
6
  const contracts_1 = require("../utils/contracts");
6
7
  const utils_1 = require("./utils");
7
8
  /**
8
9
  * Verify the results of a poll on-chain
9
10
  * @param VerifyArgs - The arguments for the verify command
10
11
  */
11
- const verify = async ({ pollId, tallyData, signer, tallyCommitments, numVoteOptions, voteOptionTreeDepth, }) => {
12
- const useQv = tallyData.isQuadratic;
12
+ const verify = async ({ pollId, tallyData, signer, tallyCommitments, totalVoteOptions, voteOptionTreeDepth, }) => {
13
13
  const maciContractAddress = tallyData.maci;
14
14
  const validContract = await (0, contracts_1.contractExists)(signer.provider, maciContractAddress);
15
15
  if (!validContract) {
@@ -26,33 +26,33 @@ const verify = async ({ pollId, tallyData, signer, tallyCommitments, numVoteOpti
26
26
  if (!validResultsCommitment) {
27
27
  throw new Error("Invalid results commitment format");
28
28
  }
29
- if (tallyData.results.tally.length !== numVoteOptions) {
29
+ if (tallyData.results.tally.length !== totalVoteOptions) {
30
30
  throw new Error("Wrong number of vote options.");
31
31
  }
32
32
  // destructure the tally commitments
33
- const { newTallyCommitment, newSpentVoiceCreditsCommitment, newPerVOSpentVoiceCreditsCommitment, newResultsCommitment, } = tallyCommitments;
34
- // verify that the results commitment matches the output of genTreeCommitment()
33
+ const { newTallyCommitment, newSpentVoiceCreditsCommitment, newPerVoteOptionSpentVoiceCreditsCommitment, newResultsCommitment, } = tallyCommitments;
34
+ // verify that the results commitment matches the output of generateTreeCommitment()
35
35
  if (onChainTallyCommitment !== newTallyCommitment) {
36
36
  throw new Error("The on-chain tally commitment does not match.");
37
37
  }
38
38
  // verify total spent voice credits on-chain
39
- const verified = await tallyContract.verifySpentVoiceCredits(tallyData.totalSpentVoiceCredits.spent, tallyData.totalSpentVoiceCredits.salt, newResultsCommitment, newPerVOSpentVoiceCreditsCommitment ?? 0n);
39
+ const verified = await tallyContract.verifySpentVoiceCredits(tallyData.totalSpentVoiceCredits.spent, tallyData.totalSpentVoiceCredits.salt, newResultsCommitment, newPerVoteOptionSpentVoiceCreditsCommitment ?? 0n);
40
40
  if (!verified) {
41
41
  throw new Error("The on-chain verification of total spent voice credits failed.");
42
42
  }
43
43
  // verify tally result on-chain for each vote option
44
- const failedPerVOSpentCredits = await (0, utils_1.verifyTallyResults)(tallyContract, tallyData, voteOptionTreeDepth, newSpentVoiceCreditsCommitment, newPerVOSpentVoiceCreditsCommitment);
44
+ const failedPerVOSpentCredits = await (0, utils_1.verifyTallyResults)(tallyContract, tallyData, voteOptionTreeDepth, newSpentVoiceCreditsCommitment, newPerVoteOptionSpentVoiceCreditsCommitment);
45
45
  if (failedPerVOSpentCredits.length > 0) {
46
46
  throw new Error(`At least one spent voice credits entry in the tally results failed the on-chain verification. Please check your tally results at these indexes: ${failedPerVOSpentCredits.join(", ")}`);
47
47
  }
48
- if (!useQv) {
48
+ if (tallyData.mode !== core_1.EMode.QV) {
49
49
  return true;
50
50
  }
51
- if (tallyData.perVOSpentVoiceCredits?.tally.length !== numVoteOptions) {
51
+ if (tallyData.perVoteOptionSpentVoiceCredits?.tally.length !== totalVoteOptions) {
52
52
  throw new Error("Wrong number of vote options.");
53
53
  }
54
54
  // verify per vote option voice credits on-chain
55
- const failedSpentCredits = await (0, utils_1.verifyPerVOSpentVoiceCredits)(tallyContract, tallyData, voteOptionTreeDepth, newSpentVoiceCreditsCommitment, newResultsCommitment);
55
+ const failedSpentCredits = await (0, utils_1.verifyPerVoteOptionSpentVoiceCredits)(tallyContract, tallyData, voteOptionTreeDepth, newSpentVoiceCreditsCommitment, newResultsCommitment);
56
56
  if (failedSpentCredits.length > 0) {
57
57
  throw new Error(`At least one tally result failed the on-chain verification. Please check your Tally data at these indexes: ${failedSpentCredits.join(", ")}`);
58
58
  }
@@ -1 +1 @@
1
- {"version":3,"file":"verification.js","sourceRoot":"","sources":["../../../ts/tally/verification.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"verification.js","sourceRoot":"","sources":["../../../ts/tally/verification.ts"],"names":[],"mappings":"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"}
@@ -1,3 +1,3 @@
1
- export { generateSignUpTree } from "./stateTree";
2
- export type { IGenerateSignUpTreeArgs, IGenerateSignUpTree } from "./types";
1
+ export { generateSignUpTree, generateSignUpTreeWithEndKey, generateSignUpTreeFromKeys } from "./stateTree";
2
+ export type { IGenerateSignUpTreeArgs, IGenerateSignUpTree, IGenerateSignUpTreeWithEndKeyArgs } from "./types";
3
3
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../ts/trees/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,kBAAkB,EAAE,MAAM,aAAa,CAAC;AACjD,YAAY,EAAE,uBAAuB,EAAE,mBAAmB,EAAE,MAAM,SAAS,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../ts/trees/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,kBAAkB,EAAE,4BAA4B,EAAE,0BAA0B,EAAE,MAAM,aAAa,CAAC;AAC3G,YAAY,EAAE,uBAAuB,EAAE,mBAAmB,EAAE,iCAAiC,EAAE,MAAM,SAAS,CAAC"}
@@ -1,6 +1,8 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.generateSignUpTree = void 0;
3
+ exports.generateSignUpTreeFromKeys = exports.generateSignUpTreeWithEndKey = exports.generateSignUpTree = void 0;
4
4
  var stateTree_1 = require("./stateTree");
5
5
  Object.defineProperty(exports, "generateSignUpTree", { enumerable: true, get: function () { return stateTree_1.generateSignUpTree; } });
6
+ Object.defineProperty(exports, "generateSignUpTreeWithEndKey", { enumerable: true, get: function () { return stateTree_1.generateSignUpTreeWithEndKey; } });
7
+ Object.defineProperty(exports, "generateSignUpTreeFromKeys", { enumerable: true, get: function () { return stateTree_1.generateSignUpTreeFromKeys; } });
6
8
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../ts/trees/index.ts"],"names":[],"mappings":";;;AAAA,yCAAiD;AAAxC,+GAAA,kBAAkB,OAAA"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../ts/trees/index.ts"],"names":[],"mappings":";;;AAAA,yCAA2G;AAAlG,+GAAA,kBAAkB,OAAA;AAAE,yHAAA,4BAA4B,OAAA;AAAE,uHAAA,0BAA0B,OAAA"}
@@ -1,4 +1,6 @@
1
- import type { IGenerateSignUpTreeArgs, IGenerateSignUpTree } from "./types";
1
+ import { PublicKey } from "@maci-protocol/domainobjs";
2
+ import { LeanIMT } from "@zk-kit/lean-imt";
3
+ import type { IGenerateSignUpTreeArgs, IGenerateSignUpTree, IGenerateSignUpTreeWithEndKeyArgs } from "./types";
2
4
  /**
3
5
  * Generate a State tree object from the events of a MACI smart contracts
4
6
  * @param provider - the ethereum provider
@@ -10,4 +12,24 @@ import type { IGenerateSignUpTreeArgs, IGenerateSignUpTree } from "./types";
10
12
  * @returns State tree
11
13
  */
12
14
  export declare const generateSignUpTree: ({ provider, address, fromBlock, blocksPerRequest, endBlock, sleepAmount, }: IGenerateSignUpTreeArgs) => Promise<IGenerateSignUpTree>;
15
+ /**
16
+ * Generate a State tree object from the events of a MACI smart contracts
17
+ * @param provider - the ethereum provider
18
+ * @param address - the address of the MACI contract
19
+ * @param fromBlock - the block number from which to start fetching events
20
+ * @param blocksPerRequest - the number of blocks to fetch in each request
21
+ * @param endBlock - the block number at which to stop fetching events
22
+ * @param sleepAmount - the amount of time to sleep between each request
23
+ * @param userPublicKey - the user public key where we end/stop the signUpTree replica.
24
+ * If user public key is 4th then the returned signUpTree will have only 4 leaves
25
+ * (does not matter if MACI' signUpTree has more).
26
+ * @returns State tree
27
+ */
28
+ export declare const generateSignUpTreeWithEndKey: ({ provider, address, fromBlock, blocksPerRequest, endBlock, sleepAmount, userPublicKey, }: IGenerateSignUpTreeWithEndKeyArgs) => Promise<IGenerateSignUpTree>;
29
+ /**
30
+ * Generate a sign up tree from the public keys
31
+ * @param publicKeys - the public keys to generate the sign up tree from
32
+ * @returns the sign up tree
33
+ */
34
+ export declare const generateSignUpTreeFromKeys: (publicKeys: PublicKey[]) => LeanIMT;
13
35
  //# sourceMappingURL=stateTree.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"stateTree.d.ts","sourceRoot":"","sources":["../../../ts/trees/stateTree.ts"],"names":[],"mappings":"AAQA,OAAO,KAAK,EAAE,uBAAuB,EAAE,mBAAmB,EAAE,MAAM,SAAS,CAAC;AAI5E;;;;;;;;;GASG;AACH,eAAO,MAAM,kBAAkB,GAAU,4EAOtC,uBAAuB,KAAG,OAAO,CAAC,mBAAmB,CAqCvD,CAAC"}
1
+ {"version":3,"file":"stateTree.d.ts","sourceRoot":"","sources":["../../../ts/trees/stateTree.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,SAAS,EAAE,MAAM,2BAA2B,CAAC;AACtD,OAAO,EAAE,OAAO,EAAuB,MAAM,kBAAkB,CAAC;AAEhE,OAAO,KAAK,EAAE,uBAAuB,EAAE,mBAAmB,EAAE,iCAAiC,EAAE,MAAM,SAAS,CAAC;AAI/G;;;;;;;;;GASG;AACH,eAAO,MAAM,kBAAkB,GAAU,4EAOtC,uBAAuB,KAAG,OAAO,CAAC,mBAAmB,CAoCvD,CAAC;AAEF;;;;;;;;;;;;GAYG;AACH,eAAO,MAAM,4BAA4B,GAAU,2FAQhD,iCAAiC,KAAG,OAAO,CAAC,mBAAmB,CA8CjE,CAAC;AAEF;;;;GAIG;AACH,eAAO,MAAM,0BAA0B,GAAI,YAAY,SAAS,EAAE,KAAG,OAMpE,CAAC"}
@@ -1,12 +1,11 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.generateSignUpTree = void 0;
3
+ exports.generateSignUpTreeFromKeys = exports.generateSignUpTreeWithEndKey = exports.generateSignUpTree = void 0;
4
4
  /* eslint-disable no-underscore-dangle */
5
- const contracts_1 = require("@maci-protocol/contracts");
5
+ const typechain_types_1 = require("@maci-protocol/contracts/typechain-types");
6
6
  const crypto_1 = require("@maci-protocol/crypto");
7
7
  const domainobjs_1 = require("@maci-protocol/domainobjs");
8
8
  const lean_imt_1 = require("@zk-kit/lean-imt");
9
- const console_1 = require("console");
10
9
  const utils_1 = require("../utils/utils");
11
10
  /**
12
11
  * Generate a State tree object from the events of a MACI smart contracts
@@ -20,10 +19,10 @@ const utils_1 = require("../utils/utils");
20
19
  */
21
20
  const generateSignUpTree = async ({ provider, address, fromBlock = 0, blocksPerRequest = 50, endBlock, sleepAmount, }) => {
22
21
  const lastBlock = endBlock || (await provider.getBlockNumber());
23
- const maciContract = contracts_1.MACI__factory.connect(address, provider);
22
+ const maciContract = typechain_types_1.MACI__factory.connect(address, provider);
24
23
  const signUpTree = new lean_imt_1.LeanIMT(crypto_1.hashLeanIMT);
25
24
  signUpTree.insert(crypto_1.PAD_KEY_HASH);
26
- const pubKeys = [];
25
+ const publicKeys = [];
27
26
  // Fetch event logs in batches (lastBlock inclusive)
28
27
  for (let i = fromBlock; i <= lastBlock; i += blocksPerRequest + 1) {
29
28
  // the last block batch will be either current iteration block + blockPerRequest
@@ -32,12 +31,11 @@ const generateSignUpTree = async ({ provider, address, fromBlock = 0, blocksPerR
32
31
  // eslint-disable-next-line no-await-in-loop
33
32
  const signUpLogs = await maciContract.queryFilter(maciContract.filters.SignUp(), i, toBlock);
34
33
  signUpLogs.forEach((event) => {
35
- (0, console_1.assert)(!!event);
36
- const pubKeyX = event.args._userPubKeyX;
37
- const pubKeyY = event.args._userPubKeyY;
38
- const pubKey = new domainobjs_1.PubKey([pubKeyX, pubKeyY]);
39
- pubKeys.push(pubKey);
40
- signUpTree.insert((0, crypto_1.hashLeftRight)(pubKeyX, pubKeyY));
34
+ const publicKeyX = event.args._userPublicKeyX;
35
+ const publicKeyY = event.args._userPublicKeyY;
36
+ const publicKey = new domainobjs_1.PublicKey([publicKeyX, publicKeyY]);
37
+ publicKeys.push(publicKey);
38
+ signUpTree.insert((0, crypto_1.hashLeftRight)(publicKeyX, publicKeyY));
41
39
  });
42
40
  if (sleepAmount) {
43
41
  // eslint-disable-next-line no-await-in-loop
@@ -46,8 +44,74 @@ const generateSignUpTree = async ({ provider, address, fromBlock = 0, blocksPerR
46
44
  }
47
45
  return {
48
46
  signUpTree,
49
- pubKeys,
47
+ publicKeys,
50
48
  };
51
49
  };
52
50
  exports.generateSignUpTree = generateSignUpTree;
51
+ /**
52
+ * Generate a State tree object from the events of a MACI smart contracts
53
+ * @param provider - the ethereum provider
54
+ * @param address - the address of the MACI contract
55
+ * @param fromBlock - the block number from which to start fetching events
56
+ * @param blocksPerRequest - the number of blocks to fetch in each request
57
+ * @param endBlock - the block number at which to stop fetching events
58
+ * @param sleepAmount - the amount of time to sleep between each request
59
+ * @param userPublicKey - the user public key where we end/stop the signUpTree replica.
60
+ * If user public key is 4th then the returned signUpTree will have only 4 leaves
61
+ * (does not matter if MACI' signUpTree has more).
62
+ * @returns State tree
63
+ */
64
+ const generateSignUpTreeWithEndKey = async ({ provider, address, fromBlock = 0, blocksPerRequest = 50, endBlock, sleepAmount, userPublicKey, }) => {
65
+ const lastBlock = endBlock || (await provider.getBlockNumber());
66
+ const maciContract = typechain_types_1.MACI__factory.connect(address, provider);
67
+ const signUpTree = new lean_imt_1.LeanIMT(crypto_1.hashLeanIMT);
68
+ signUpTree.insert(crypto_1.PAD_KEY_HASH);
69
+ const publicKeys = [];
70
+ // Fetch event logs in batches (lastBlock inclusive)
71
+ for (let i = fromBlock; i <= lastBlock; i += blocksPerRequest + 1) {
72
+ // the last block batch will be either current iteration block + blockPerRequest
73
+ // or the end block if it is set
74
+ const toBlock = i + blocksPerRequest >= lastBlock ? lastBlock : i + blocksPerRequest;
75
+ // eslint-disable-next-line no-await-in-loop
76
+ const signUpLogs = await maciContract.queryFilter(maciContract.filters.SignUp(), i, toBlock);
77
+ // eslint-disable-next-line @typescript-eslint/prefer-for-of
78
+ for (let j = 0; j < signUpLogs.length; j += 1) {
79
+ const event = signUpLogs[j];
80
+ const publicKeyX = event.args._userPublicKeyX;
81
+ const publicKeyY = event.args._userPublicKeyY;
82
+ const publicKey = new domainobjs_1.PublicKey([publicKeyX, publicKeyY]);
83
+ publicKeys.push(publicKey);
84
+ signUpTree.insert((0, crypto_1.hashLeftRight)(publicKeyX, publicKeyY));
85
+ // early return cause we found the user
86
+ if (publicKey.equals(userPublicKey)) {
87
+ return {
88
+ signUpTree,
89
+ publicKeys,
90
+ };
91
+ }
92
+ }
93
+ if (sleepAmount) {
94
+ // eslint-disable-next-line no-await-in-loop
95
+ await (0, utils_1.sleep)(sleepAmount);
96
+ }
97
+ }
98
+ return {
99
+ signUpTree,
100
+ publicKeys,
101
+ };
102
+ };
103
+ exports.generateSignUpTreeWithEndKey = generateSignUpTreeWithEndKey;
104
+ /**
105
+ * Generate a sign up tree from the public keys
106
+ * @param publicKeys - the public keys to generate the sign up tree from
107
+ * @returns the sign up tree
108
+ */
109
+ const generateSignUpTreeFromKeys = (publicKeys) => {
110
+ const signUpTree = new lean_imt_1.LeanIMT(crypto_1.hashLeanIMT);
111
+ publicKeys.forEach((key) => {
112
+ signUpTree.insert(key.hash());
113
+ });
114
+ return signUpTree;
115
+ };
116
+ exports.generateSignUpTreeFromKeys = generateSignUpTreeFromKeys;
53
117
  //# sourceMappingURL=stateTree.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"stateTree.js","sourceRoot":"","sources":["../../../ts/trees/stateTree.ts"],"names":[],"mappings":";;;AAAA,yCAAyC;AACzC,wDAAwE;AACxE,kDAAiF;AACjF,0DAAmD;AACnD,+CAAgE;AAEhE,qCAAiC;AAIjC,0CAAuC;AAEvC;;;;;;;;;GASG;AACI,MAAM,kBAAkB,GAAG,KAAK,EAAE,EACvC,QAAQ,EACR,OAAO,EACP,SAAS,GAAG,CAAC,EACb,gBAAgB,GAAG,EAAE,EACrB,QAAQ,EACR,WAAW,GACa,EAAgC,EAAE;IAC1D,MAAM,SAAS,GAAG,QAAQ,IAAI,CAAC,MAAM,QAAQ,CAAC,cAAc,EAAE,CAAC,CAAC;IAEhE,MAAM,YAAY,GAAG,yBAAW,CAAC,OAAO,CAAC,OAAO,EAAE,QAAQ,CAAC,CAAC;IAC5D,MAAM,UAAU,GAAG,IAAI,kBAAO,CAAC,oBAAkC,CAAC,CAAC;IACnE,UAAU,CAAC,MAAM,CAAC,qBAAY,CAAC,CAAC;IAChC,MAAM,OAAO,GAAa,EAAE,CAAC;IAE7B,oDAAoD;IACpD,KAAK,IAAI,CAAC,GAAG,SAAS,EAAE,CAAC,IAAI,SAAS,EAAE,CAAC,IAAI,gBAAgB,GAAG,CAAC,EAAE,CAAC;QAClE,gFAAgF;QAChF,gCAAgC;QAChC,MAAM,OAAO,GAAG,CAAC,GAAG,gBAAgB,IAAI,SAAS,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,GAAG,gBAAgB,CAAC;QAErF,4CAA4C;QAC5C,MAAM,UAAU,GAAG,MAAM,YAAY,CAAC,WAAW,CAAC,YAAY,CAAC,OAAO,CAAC,MAAM,EAAE,EAAE,CAAC,EAAE,OAAO,CAAC,CAAC;QAC7F,UAAU,CAAC,OAAO,CAAC,CAAC,KAAK,EAAE,EAAE;YAC3B,IAAA,gBAAM,EAAC,CAAC,CAAC,KAAK,CAAC,CAAC;YAChB,MAAM,OAAO,GAAG,KAAK,CAAC,IAAI,CAAC,YAAY,CAAC;YACxC,MAAM,OAAO,GAAG,KAAK,CAAC,IAAI,CAAC,YAAY,CAAC;YAExC,MAAM,MAAM,GAAG,IAAI,mBAAM,CAAC,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC,CAAC;YAE9C,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;YACrB,UAAU,CAAC,MAAM,CAAC,IAAA,sBAAa,EAAC,OAAO,EAAE,OAAO,CAAC,CAAC,CAAC;QACrD,CAAC,CAAC,CAAC;QAEH,IAAI,WAAW,EAAE,CAAC;YAChB,4CAA4C;YAC5C,MAAM,IAAA,aAAK,EAAC,WAAW,CAAC,CAAC;QAC3B,CAAC;IACH,CAAC;IAED,OAAO;QACL,UAAU;QACV,OAAO;KACR,CAAC;AACJ,CAAC,CAAC;AA5CW,QAAA,kBAAkB,sBA4C7B"}
1
+ {"version":3,"file":"stateTree.js","sourceRoot":"","sources":["../../../ts/trees/stateTree.ts"],"names":[],"mappings":"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"}
@@ -1,4 +1,4 @@
1
- import type { PubKey } from "@maci-protocol/domainobjs";
1
+ import type { PublicKey } from "@maci-protocol/domainobjs";
2
2
  import type { LeanIMT } from "@zk-kit/lean-imt";
3
3
  import type { Provider } from "ethers";
4
4
  /**
@@ -30,6 +30,15 @@ export interface IGenerateSignUpTreeArgs {
30
30
  */
31
31
  sleepAmount?: number;
32
32
  }
33
+ /**
34
+ * An interface that represents arguments of generation sign up tree which stops fetching at a given public key
35
+ */
36
+ export interface IGenerateSignUpTreeWithEndKeyArgs extends IGenerateSignUpTreeArgs {
37
+ /**
38
+ * The public key of the user
39
+ */
40
+ userPublicKey: PublicKey;
41
+ }
33
42
  /**
34
43
  * An interface that represents sign up tree and state leaves
35
44
  */
@@ -41,6 +50,6 @@ export interface IGenerateSignUpTree {
41
50
  /**
42
51
  * State leaves
43
52
  */
44
- pubKeys: PubKey[];
53
+ publicKeys: PublicKey[];
45
54
  }
46
55
  //# sourceMappingURL=types.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../ts/trees/types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,2BAA2B,CAAC;AACxD,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,kBAAkB,CAAC;AAChD,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,QAAQ,CAAC;AAEvC;;GAEG;AACH,MAAM,WAAW,uBAAuB;IACtC;;OAEG;IACH,QAAQ,EAAE,QAAQ,CAAC;IAEnB;;OAEG;IACH,OAAO,EAAE,MAAM,CAAC;IAEhB;;OAEG;IACH,SAAS,CAAC,EAAE,MAAM,CAAC;IAEnB;;OAEG;IACH,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAE1B;;OAEG;IACH,QAAQ,CAAC,EAAE,MAAM,CAAC;IAElB;;OAEG;IACH,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB;AAED;;GAEG;AACH,MAAM,WAAW,mBAAmB;IAClC;;OAEG;IACH,UAAU,EAAE,OAAO,CAAC;IAEpB;;OAEG;IACH,OAAO,EAAE,MAAM,EAAE,CAAC;CACnB"}
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../ts/trees/types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,2BAA2B,CAAC;AAC3D,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,kBAAkB,CAAC;AAChD,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,QAAQ,CAAC;AAEvC;;GAEG;AACH,MAAM,WAAW,uBAAuB;IACtC;;OAEG;IACH,QAAQ,EAAE,QAAQ,CAAC;IAEnB;;OAEG;IACH,OAAO,EAAE,MAAM,CAAC;IAEhB;;OAEG;IACH,SAAS,CAAC,EAAE,MAAM,CAAC;IAEnB;;OAEG;IACH,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAE1B;;OAEG;IACH,QAAQ,CAAC,EAAE,MAAM,CAAC;IAElB;;OAEG;IACH,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB;AAED;;GAEG;AACH,MAAM,WAAW,iCAAkC,SAAQ,uBAAuB;IAChF;;OAEG;IACH,aAAa,EAAE,SAAS,CAAC;CAC1B;AAED;;GAEG;AACH,MAAM,WAAW,mBAAmB;IAClC;;OAEG;IACH,UAAU,EAAE,OAAO,CAAC;IAEpB;;OAEG;IACH,UAAU,EAAE,SAAS,EAAE,CAAC;CACzB"}
@@ -1,3 +1,5 @@
1
- export { getSignedupUserData, signup, getJoinedUserData, joinPoll, hasUserJoinedPoll, hasUserSignedUp } from "./user";
2
- export type { IJoinedUserArgs, IIsRegisteredUser, IIsJoinedUser, ISignupArgs, IRegisteredUserArgs, IPollJoinedCircuitInputs, IPollJoiningCircuitInputs, IJoinPollArgs, IIsNullifierOnChainArgs, IGetPollJoiningCircuitEventsArgs, IGetPollJoiningCircuitInputsFromStateFileArgs, IJoinPollData, IParsePollJoinEventsArgs, IParseSignupEventsArgs, ISignupData, IHasUserSignedUpArgs, } from "./types";
1
+ export { joinPoll } from "./joinPoll";
2
+ export { getSignedupUserData, signup, hasUserSignedUp } from "./signup";
3
+ export { getJoinedUserData, hasUserJoinedPoll, generateMaciStateTree, generateMaciStateTreeWithEndKey, getPollJoiningCircuitEvents, joiningCircuitInputs, } from "./utils";
4
+ export type { IJoinedUserArgs, IIsRegisteredUser, IIsJoinedUser, ISignupArgs, IRegisteredUserArgs, IPollJoinedCircuitInputs, IPollJoiningCircuitInputs, IJoinPollArgs, IIsNullifierOnChainArgs, IGetPollJoiningCircuitEventsArgs, IGetPollJoiningCircuitInputsFromStateFileArgs, IJoinPollData, IParsePollJoinEventsArgs, IParseSignupEventsArgs, ISignupData, IHasUserSignedUpArgs, IGenerateMaciStateTreeArgs, IGenerateMaciStateTreeWithEndKeyArgs, } from "./types";
3
5
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../ts/user/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,mBAAmB,EAAE,MAAM,EAAE,iBAAiB,EAAE,QAAQ,EAAE,iBAAiB,EAAE,eAAe,EAAE,MAAM,QAAQ,CAAC;AACtH,YAAY,EACV,eAAe,EACf,iBAAiB,EACjB,aAAa,EACb,WAAW,EACX,mBAAmB,EACnB,wBAAwB,EACxB,yBAAyB,EACzB,aAAa,EACb,uBAAuB,EACvB,gCAAgC,EAChC,6CAA6C,EAC7C,aAAa,EACb,wBAAwB,EACxB,sBAAsB,EACtB,WAAW,EACX,oBAAoB,GACrB,MAAM,SAAS,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../ts/user/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AACtC,OAAO,EAAE,mBAAmB,EAAE,MAAM,EAAE,eAAe,EAAE,MAAM,UAAU,CAAC;AACxE,OAAO,EACL,iBAAiB,EACjB,iBAAiB,EACjB,qBAAqB,EACrB,+BAA+B,EAC/B,2BAA2B,EAC3B,oBAAoB,GACrB,MAAM,SAAS,CAAC;AACjB,YAAY,EACV,eAAe,EACf,iBAAiB,EACjB,aAAa,EACb,WAAW,EACX,mBAAmB,EACnB,wBAAwB,EACxB,yBAAyB,EACzB,aAAa,EACb,uBAAuB,EACvB,gCAAgC,EAChC,6CAA6C,EAC7C,aAAa,EACb,wBAAwB,EACxB,sBAAsB,EACtB,WAAW,EACX,oBAAoB,EACpB,0BAA0B,EAC1B,oCAAoC,GACrC,MAAM,SAAS,CAAC"}
@@ -1,11 +1,17 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.hasUserSignedUp = exports.hasUserJoinedPoll = exports.joinPoll = exports.getJoinedUserData = exports.signup = exports.getSignedupUserData = void 0;
4
- var user_1 = require("./user");
5
- Object.defineProperty(exports, "getSignedupUserData", { enumerable: true, get: function () { return user_1.getSignedupUserData; } });
6
- Object.defineProperty(exports, "signup", { enumerable: true, get: function () { return user_1.signup; } });
7
- Object.defineProperty(exports, "getJoinedUserData", { enumerable: true, get: function () { return user_1.getJoinedUserData; } });
8
- Object.defineProperty(exports, "joinPoll", { enumerable: true, get: function () { return user_1.joinPoll; } });
9
- Object.defineProperty(exports, "hasUserJoinedPoll", { enumerable: true, get: function () { return user_1.hasUserJoinedPoll; } });
10
- Object.defineProperty(exports, "hasUserSignedUp", { enumerable: true, get: function () { return user_1.hasUserSignedUp; } });
3
+ exports.joiningCircuitInputs = exports.getPollJoiningCircuitEvents = exports.generateMaciStateTreeWithEndKey = exports.generateMaciStateTree = exports.hasUserJoinedPoll = exports.getJoinedUserData = exports.hasUserSignedUp = exports.signup = exports.getSignedupUserData = exports.joinPoll = void 0;
4
+ var joinPoll_1 = require("./joinPoll");
5
+ Object.defineProperty(exports, "joinPoll", { enumerable: true, get: function () { return joinPoll_1.joinPoll; } });
6
+ var signup_1 = require("./signup");
7
+ Object.defineProperty(exports, "getSignedupUserData", { enumerable: true, get: function () { return signup_1.getSignedupUserData; } });
8
+ Object.defineProperty(exports, "signup", { enumerable: true, get: function () { return signup_1.signup; } });
9
+ Object.defineProperty(exports, "hasUserSignedUp", { enumerable: true, get: function () { return signup_1.hasUserSignedUp; } });
10
+ var utils_1 = require("./utils");
11
+ Object.defineProperty(exports, "getJoinedUserData", { enumerable: true, get: function () { return utils_1.getJoinedUserData; } });
12
+ Object.defineProperty(exports, "hasUserJoinedPoll", { enumerable: true, get: function () { return utils_1.hasUserJoinedPoll; } });
13
+ Object.defineProperty(exports, "generateMaciStateTree", { enumerable: true, get: function () { return utils_1.generateMaciStateTree; } });
14
+ Object.defineProperty(exports, "generateMaciStateTreeWithEndKey", { enumerable: true, get: function () { return utils_1.generateMaciStateTreeWithEndKey; } });
15
+ Object.defineProperty(exports, "getPollJoiningCircuitEvents", { enumerable: true, get: function () { return utils_1.getPollJoiningCircuitEvents; } });
16
+ Object.defineProperty(exports, "joiningCircuitInputs", { enumerable: true, get: function () { return utils_1.joiningCircuitInputs; } });
11
17
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../ts/user/index.ts"],"names":[],"mappings":";;;AAAA,+BAAsH;AAA7G,2GAAA,mBAAmB,OAAA;AAAE,8FAAA,MAAM,OAAA;AAAE,yGAAA,iBAAiB,OAAA;AAAE,gGAAA,QAAQ,OAAA;AAAE,yGAAA,iBAAiB,OAAA;AAAE,uGAAA,eAAe,OAAA"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../ts/user/index.ts"],"names":[],"mappings":";;;AAAA,uCAAsC;AAA7B,oGAAA,QAAQ,OAAA;AACjB,mCAAwE;AAA/D,6GAAA,mBAAmB,OAAA;AAAE,gGAAA,MAAM,OAAA;AAAE,yGAAA,eAAe,OAAA;AACrD,iCAOiB;AANf,0GAAA,iBAAiB,OAAA;AACjB,0GAAA,iBAAiB,OAAA;AACjB,8GAAA,qBAAqB,OAAA;AACrB,wHAAA,+BAA+B,OAAA;AAC/B,oHAAA,2BAA2B,OAAA;AAC3B,6GAAA,oBAAoB,OAAA"}
@@ -0,0 +1,8 @@
1
+ import type { IJoinPollData, IJoinPollArgs } from "./types";
2
+ /**
3
+ * Join Poll user to the Poll contract
4
+ * @param {IJoinPollArgs} args - The arguments for the join poll command
5
+ * @returns {IJoinPollData} The poll state index of the joined user and transaction hash
6
+ */
7
+ export declare const joinPoll: ({ maciAddress, privateKey, stateFile, pollId, signer, startBlock, endBlock, blocksPerBatch, pollJoiningZkey, useWasm, rapidsnark, pollWitgen, pollWasm, sgDataArg, ivcpDataArg, }: IJoinPollArgs) => Promise<IJoinPollData>;
8
+ //# sourceMappingURL=joinPoll.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"joinPoll.d.ts","sourceRoot":"","sources":["../../../ts/user/joinPoll.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAE,aAAa,EAAE,aAAa,EAAE,MAAM,SAAS,CAAC;AAQ5D;;;;GAIG;AACH,eAAO,MAAM,QAAQ,GAAU,mLAgB5B,aAAa,KAAG,OAAO,CAAC,aAAa,CA4FvC,CAAC"}
@@ -0,0 +1,84 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.joinPoll = void 0;
4
+ /* eslint-disable no-underscore-dangle */
5
+ const typechain_types_1 = require("@maci-protocol/contracts/typechain-types");
6
+ const crypto_1 = require("@maci-protocol/crypto");
7
+ const domainobjs_1 = require("@maci-protocol/domainobjs");
8
+ const contracts_1 = require("../utils/contracts");
9
+ const proofs_1 = require("../utils/proofs");
10
+ const utils_1 = require("./utils");
11
+ /**
12
+ * Join Poll user to the Poll contract
13
+ * @param {IJoinPollArgs} args - The arguments for the join poll command
14
+ * @returns {IJoinPollData} The poll state index of the joined user and transaction hash
15
+ */
16
+ const joinPoll = async ({ maciAddress, privateKey, stateFile, pollId, signer, startBlock, endBlock, blocksPerBatch, pollJoiningZkey, useWasm, rapidsnark, pollWitgen, pollWasm, sgDataArg, ivcpDataArg, }) => {
17
+ const validContract = await (0, contracts_1.contractExists)(signer.provider, maciAddress);
18
+ if (!validContract) {
19
+ throw new Error("MACI contract does not exist");
20
+ }
21
+ if (!domainobjs_1.PrivateKey.isValidSerialized(privateKey)) {
22
+ throw new Error("Invalid MACI private key");
23
+ }
24
+ if (pollId < 0) {
25
+ throw new Error("Invalid poll id");
26
+ }
27
+ const userMaciPrivateKey = domainobjs_1.PrivateKey.deserialize(privateKey);
28
+ const userMaciPublicKey = new domainobjs_1.Keypair(userMaciPrivateKey).publicKey;
29
+ const nullifier = (0, crypto_1.poseidon)([BigInt(userMaciPrivateKey.asCircuitInputs()), pollId]);
30
+ // check if the user has already joined the poll based on the nullifier
31
+ const hasUserJoinedAlready = await (0, utils_1.hasUserJoinedPoll)({
32
+ maciAddress,
33
+ pollId,
34
+ nullifier,
35
+ signer,
36
+ });
37
+ if (hasUserJoinedAlready) {
38
+ throw new Error("User has already joined");
39
+ }
40
+ const maciContract = typechain_types_1.MACI__factory.connect(maciAddress, signer);
41
+ const pollContracts = await maciContract.getPoll(pollId);
42
+ const pollContract = typechain_types_1.Poll__factory.connect(pollContracts.poll, signer);
43
+ // get the state index from the MACI contract
44
+ const stateIndex = await maciContract.getStateIndex(userMaciPublicKey.hash()).catch(() => -1n);
45
+ let circuitInputs;
46
+ if (stateFile) {
47
+ circuitInputs = await (0, utils_1.getPollJoiningCircuitInputsFromStateFile)({
48
+ stateFile,
49
+ pollId,
50
+ stateIndex,
51
+ userMaciPrivateKey,
52
+ });
53
+ }
54
+ else {
55
+ circuitInputs = await (0, utils_1.getPollJoiningCircuitEvents)({
56
+ maciContract,
57
+ stateIndex,
58
+ pollId,
59
+ userMaciPrivateKey,
60
+ signer,
61
+ startBlock,
62
+ endBlock,
63
+ blocksPerBatch,
64
+ });
65
+ }
66
+ const currentStateRootIndex = Number.parseInt((await maciContract.totalSignups()).toString(), 10) - 1;
67
+ // generate the proof for this batch
68
+ const proof = await (0, proofs_1.generateAndVerifyProof)(circuitInputs, pollJoiningZkey, useWasm, rapidsnark, pollWitgen, pollWasm);
69
+ // submit the message onchain as well as the encryption public key
70
+ const tx = await pollContract.joinPoll(nullifier, userMaciPublicKey.asContractParam(), currentStateRootIndex, proof, sgDataArg, ivcpDataArg);
71
+ const receipt = await tx.wait();
72
+ if (receipt?.status !== 1) {
73
+ throw new Error("Transaction failed");
74
+ }
75
+ const [{ args }] = await pollContract.queryFilter(pollContract.filters.PollJoined, receipt.blockNumber, receipt.blockNumber);
76
+ return {
77
+ pollStateIndex: args._pollStateIndex.toString(),
78
+ voiceCredits: args._voiceCreditBalance.toString(),
79
+ nullifier: nullifier.toString(),
80
+ hash: receipt.hash,
81
+ };
82
+ };
83
+ exports.joinPoll = joinPoll;
84
+ //# sourceMappingURL=joinPoll.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"joinPoll.js","sourceRoot":"","sources":["../../../ts/user/joinPoll.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,20 @@
1
+ import type { IIsRegisteredUser, ISignupArgs, ISignupData, IRegisteredUserArgs, IHasUserSignedUpArgs } from "./types";
2
+ /**
3
+ * Checks if user is registered with a given public key and get its data
4
+ * @param IRegisteredArgs - The arguments for the check register command
5
+ * @returns whether the user is registered or not and their state index
6
+ */
7
+ export declare const getSignedupUserData: ({ maciAddress, maciPublicKey, signer, }: IRegisteredUserArgs) => Promise<IIsRegisteredUser>;
8
+ /**
9
+ * Signup a user to the MACI contract
10
+ * @param {SignupArgs} args - The arguments for the signup command
11
+ * @returns {ISignupData} The state index of the user and transaction hash
12
+ */
13
+ export declare const signup: ({ maciPublicKey, maciAddress, sgData, signer }: ISignupArgs) => Promise<ISignupData>;
14
+ /**
15
+ * Checks if a user is signed up with a given public key
16
+ * @param {IIsSignedUpArgs} args - The arguments for the is signed up command
17
+ * @returns {boolean} Whether the user is signed up or not
18
+ */
19
+ export declare const hasUserSignedUp: ({ maciAddress, maciPublicKey, signer, }: IHasUserSignedUpArgs) => Promise<boolean>;
20
+ //# sourceMappingURL=signup.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"signup.d.ts","sourceRoot":"","sources":["../../../ts/user/signup.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,iBAAiB,EAAE,WAAW,EAAE,WAAW,EAAE,mBAAmB,EAAE,oBAAoB,EAAE,MAAM,SAAS,CAAC;AAItH;;;;GAIG;AACH,eAAO,MAAM,mBAAmB,GAAU,yCAIvC,mBAAmB,KAAG,OAAO,CAAC,iBAAiB,CAsBjD,CAAC;AAEF;;;;GAIG;AACH,eAAO,MAAM,MAAM,GAAU,gDAAgD,WAAW,KAAG,OAAO,CAAC,WAAW,CA6C7G,CAAC;AAEF;;;;GAIG;AACH,eAAO,MAAM,eAAe,GAAU,yCAInC,oBAAoB,KAAG,OAAO,CAAC,OAAO,CAMxC,CAAC"}
@@ -0,0 +1,84 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.hasUserSignedUp = exports.signup = exports.getSignedupUserData = void 0;
4
+ const typechain_types_1 = require("@maci-protocol/contracts/typechain-types");
5
+ const domainobjs_1 = require("@maci-protocol/domainobjs");
6
+ const ethers_1 = require("ethers");
7
+ const contracts_1 = require("../utils/contracts");
8
+ /**
9
+ * Checks if user is registered with a given public key and get its data
10
+ * @param IRegisteredArgs - The arguments for the check register command
11
+ * @returns whether the user is registered or not and their state index
12
+ */
13
+ const getSignedupUserData = async ({ maciAddress, maciPublicKey, signer, }) => {
14
+ const maciContract = typechain_types_1.MACI__factory.connect(maciAddress, signer);
15
+ const publicKey = domainobjs_1.PublicKey.deserialize(maciPublicKey);
16
+ try {
17
+ const stateIndex = await maciContract.getStateIndex(publicKey.hash());
18
+ return {
19
+ isRegistered: stateIndex !== 0n, // 0 index is reserved for deleted leaves
20
+ stateIndex: String(stateIndex),
21
+ };
22
+ }
23
+ catch (error) {
24
+ // Check if this is a "UserNotSignedUp" maci contract error
25
+ if (error instanceof Error && error.message.includes("UserNotSignedUp()")) {
26
+ return {
27
+ isRegistered: false,
28
+ stateIndex: undefined,
29
+ };
30
+ }
31
+ // If it's a different error, rethrow it
32
+ throw error;
33
+ }
34
+ };
35
+ exports.getSignedupUserData = getSignedupUserData;
36
+ /**
37
+ * Signup a user to the MACI contract
38
+ * @param {SignupArgs} args - The arguments for the signup command
39
+ * @returns {ISignupData} The state index of the user and transaction hash
40
+ */
41
+ const signup = async ({ maciPublicKey, maciAddress, sgData, signer }) => {
42
+ // validate user key
43
+ if (!domainobjs_1.PublicKey.isValidSerialized(maciPublicKey)) {
44
+ throw new Error("Invalid MACI public key");
45
+ }
46
+ const userMaciPublicKey = domainobjs_1.PublicKey.deserialize(maciPublicKey);
47
+ const validContract = await (0, contracts_1.contractExists)(signer.provider, maciAddress);
48
+ if (!validContract) {
49
+ throw new Error("There is no contract deployed at the specified address");
50
+ }
51
+ // we validate that the signup data and voice credit data is valid
52
+ if (!(0, ethers_1.isBytesLike)(sgData)) {
53
+ throw new Error("invalid signup gateway data");
54
+ }
55
+ const maciContract = typechain_types_1.MACI__factory.connect(maciAddress, signer);
56
+ let stateIndex = "";
57
+ let receipt = null;
58
+ // sign up to the MACI contract
59
+ const tx = await maciContract.signUp(userMaciPublicKey.asContractParam(), sgData);
60
+ receipt = await tx.wait();
61
+ if (receipt?.status !== 1) {
62
+ throw new Error("The transaction failed");
63
+ }
64
+ // get state index from the event
65
+ const [{ args = [] } = { args: [] }] = await maciContract.queryFilter(maciContract.filters.SignUp, receipt.blockNumber, receipt.blockNumber);
66
+ stateIndex = args[0].toString();
67
+ return {
68
+ stateIndex: stateIndex ? stateIndex.toString() : "",
69
+ transactionHash: receipt.hash,
70
+ };
71
+ };
72
+ exports.signup = signup;
73
+ /**
74
+ * Checks if a user is signed up with a given public key
75
+ * @param {IIsSignedUpArgs} args - The arguments for the is signed up command
76
+ * @returns {boolean} Whether the user is signed up or not
77
+ */
78
+ const hasUserSignedUp = async ({ maciAddress, maciPublicKey, signer, }) => {
79
+ const maciContract = typechain_types_1.MACI__factory.connect(maciAddress, signer);
80
+ const stateIndex = await maciContract.getStateIndex(domainobjs_1.PublicKey.deserialize(maciPublicKey).hash());
81
+ return stateIndex !== 0n;
82
+ };
83
+ exports.hasUserSignedUp = hasUserSignedUp;
84
+ //# sourceMappingURL=signup.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"signup.js","sourceRoot":"","sources":["../../../ts/user/signup.ts"],"names":[],"mappings":"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"}