@maci-protocol/website 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 (420) hide show
  1. package/.eslintrc.js +157 -0
  2. package/CHANGELOG.md +566 -0
  3. package/LICENSE +21 -0
  4. package/README.md +58 -0
  5. package/babel.config.js +3 -0
  6. package/blog/2021-10-12-maci-v1.md +100 -0
  7. package/blog/2022-09-22-maci-v1-technical-introduction.md +180 -0
  8. package/blog/2023-01-18-maci-v1.1.1.md +121 -0
  9. package/blog/2024-01-18-roadmap.md +106 -0
  10. package/blog/2024-02-28-maci-v1.2.0.md +121 -0
  11. package/blog/2024-04-10-roadmap-q2.md +96 -0
  12. package/blog/2024-05-08-ethdam.md +169 -0
  13. package/blog/2024-05-22-the-origins-of-maci.md +38 -0
  14. package/blog/2024-05-28-upcoming-grants.md +85 -0
  15. package/blog/2024-06-17-understanding-maci.md +63 -0
  16. package/blog/2024-06-21-deciphering-maci.md +48 -0
  17. package/blog/2024-06-28-revolusioning-public-goods-funding.md +32 -0
  18. package/blog/2024-07-23-q2-review.md +72 -0
  19. package/blog/2024-07-30-roadmap-q3.md +61 -0
  20. package/blog/2024-08-10-maci-v2.md +102 -0
  21. package/blog/2024-08-29-anonymous-poll-joining.md +47 -0
  22. package/blog/2024-10-29-q3-review.md +63 -0
  23. package/blog/2024-11-20-maci-platform.md +93 -0
  24. package/blog/2024-12-01-maci-getting-started.md +294 -0
  25. package/blog/2025-03-21-roadmap-2025.md +112 -0
  26. package/blog/2025-08-18-maci-aragon-plugin.md +107 -0
  27. package/blog/2025-09-05-maci-coordinator-service.md +167 -0
  28. package/blog/assets/MACI_Bob_SignUp_1.png +0 -0
  29. package/blog/assets/MACI_Bob_SignUp_2.png +0 -0
  30. package/blog/assets/MACI_Complex_Message.png +0 -0
  31. package/blog/assets/MACI_Contracts.png +0 -0
  32. package/blog/assets/MACI_Sign_Up.png +0 -0
  33. package/blog/assets/MACI_Simple_Message.png +0 -0
  34. package/blog/assets/MACI_Verifier_1.png +0 -0
  35. package/blog/authors.yml +5 -0
  36. package/docusaurus.config.ts +219 -0
  37. package/package.json +66 -0
  38. package/src/components/ActionCard/index.tsx +30 -0
  39. package/src/components/ActionCard/styles.module.css +96 -0
  40. package/src/components/HomepageFeatures/index.tsx +91 -0
  41. package/src/components/HomepageFeatures/styles.module.css +17 -0
  42. package/src/components/ProjectCard/index.tsx +74 -0
  43. package/src/components/ProjectCard/styles.module.css +77 -0
  44. package/src/components/ProjectList/index.tsx +218 -0
  45. package/src/components/ProjectList/styles.module.css +180 -0
  46. package/src/content/projects.json +294 -0
  47. package/src/css/card.module.css +130 -0
  48. package/src/css/custom.css +91 -0
  49. package/src/icons/IconDiscord.tsx +16 -0
  50. package/src/icons/IconGithub.tsx +16 -0
  51. package/src/icons/IconWebsite.tsx +16 -0
  52. package/src/pages/blogs.tsx +58 -0
  53. package/src/pages/index.module.css +152 -0
  54. package/src/pages/index.tsx +66 -0
  55. package/src/pages/projects.tsx +44 -0
  56. package/src/pages/roadmap.md +109 -0
  57. package/src/pages/typedoc.tsx +11 -0
  58. package/src/plugins/blog-plugin/index.ts +86 -0
  59. package/src/react-app-env.d.ts +1 -0
  60. package/src/scripts/setupSolidityDocs.ts +67 -0
  61. package/src/scripts/setupTypedoc.ts +112 -0
  62. package/src/scripts/utils.ts +115 -0
  63. package/src/utils/getProjectsByFilter.ts +40 -0
  64. package/static/.nojekyll +0 -0
  65. package/static/audit_reports/20210922_Hashcloak_audit_report.pdf +0 -0
  66. package/static/audit_reports/202220930_Hashcloak_audit_report.pdf +0 -0
  67. package/static/audit_reports/20240223_PSE_Audit_audit_report.pdf +0 -0
  68. package/static/audit_reports/20240731_PSE_Audit_audit_report.pdf +0 -0
  69. package/static/fonts/DM_Sans.woff2 +0 -0
  70. package/static/fonts/Share_Tech_Mono.woff2 +0 -0
  71. package/static/img/box.png +0 -0
  72. package/static/img/box_dark.png +0 -0
  73. package/static/img/chain.png +0 -0
  74. package/static/img/chain_dark.png +0 -0
  75. package/static/img/chart.png +0 -0
  76. package/static/img/chart_dark.png +0 -0
  77. package/static/img/circuits/MACI-Circuits.excalidraw +39652 -0
  78. package/static/img/circuits/calculateTotal.svg +21 -0
  79. package/static/img/circuits/ecdh.svg +21 -0
  80. package/static/img/circuits/messageToCommand.svg +21 -0
  81. package/static/img/circuits/messageValidator.svg +21 -0
  82. package/static/img/circuits/poseidonHasher13.svg +21 -0
  83. package/static/img/circuits/privToPubkey.svg +21 -0
  84. package/static/img/circuits/processMessages.svg +21 -0
  85. package/static/img/circuits/processMessagesInputHasher.svg +21 -0
  86. package/static/img/circuits/processMessages_2_0.svg +21 -0
  87. package/static/img/circuits/processOne.svg +21 -0
  88. package/static/img/circuits/processTopup.svg +21 -0
  89. package/static/img/circuits/processingAfterPollEnds.svg +21 -0
  90. package/static/img/circuits/quinBatchLeavesExists.svg +21 -0
  91. package/static/img/circuits/quinCheckRoot.svg +21 -0
  92. package/static/img/circuits/quinGeneratePathIndices.svg +21 -0
  93. package/static/img/circuits/quinSelector.svg +21 -0
  94. package/static/img/circuits/resultsCommitmentVerifier.svg +21 -0
  95. package/static/img/circuits/splicer.svg +21 -0
  96. package/static/img/circuits/tallyInputHasher.svg +21 -0
  97. package/static/img/circuits/tallyVotes.svg +21 -0
  98. package/static/img/circuits/unpackElement.svg +21 -0
  99. package/static/img/circuits/verifySignature.svg +21 -0
  100. package/static/img/completingAPoll.svg +4 -0
  101. package/static/img/contracts.svg +16 -0
  102. package/static/img/coordinatorComponents.svg +21 -0
  103. package/static/img/favicon.ico +0 -0
  104. package/static/img/generateProofs.svg +4 -0
  105. package/static/img/hero.svg +9 -0
  106. package/static/img/maci-card.png +0 -0
  107. package/static/img/maci-rpgf-design.jpg +0 -0
  108. package/static/img/messageProcessingLocal.svg +21 -0
  109. package/static/img/offlineProcessing.svg +21 -0
  110. package/static/img/pse-logo-round.png +0 -0
  111. package/static/img/relayer-diagram.png +0 -0
  112. package/static/img/tallyCommitments.svg +4 -0
  113. package/static/img/voteTallyingLocal.svg +21 -0
  114. package/tsconfig.json +34 -0
  115. package/versioned_docs/version-v0.x/circuits.md +22 -0
  116. package/versioned_docs/version-v0.x/contract.md +186 -0
  117. package/versioned_docs/version-v0.x/faq.md +67 -0
  118. package/versioned_docs/version-v0.x/introduction.md +115 -0
  119. package/versioned_docs/version-v0.x/quadratic-vote-tallying-circuit.md +138 -0
  120. package/versioned_docs/version-v0.x/state-root-transition-circuit.md +230 -0
  121. package/versioned_docs/version-v1.2/audit.md +160 -0
  122. package/versioned_docs/version-v1.2/ci-pipeline.md +38 -0
  123. package/versioned_docs/version-v1.2/circuits.md +508 -0
  124. package/versioned_docs/version-v1.2/cli.md +689 -0
  125. package/versioned_docs/version-v1.2/contracts.md +445 -0
  126. package/versioned_docs/version-v1.2/contributing/code-of-conduct.md +91 -0
  127. package/versioned_docs/version-v1.2/contributing/contributing.md +129 -0
  128. package/versioned_docs/version-v1.2/coordinator-processing.md +46 -0
  129. package/versioned_docs/version-v1.2/deployment.md +122 -0
  130. package/versioned_docs/version-v1.2/installation.md +175 -0
  131. package/versioned_docs/version-v1.2/integrating.md +200 -0
  132. package/versioned_docs/version-v1.2/introduction.md +94 -0
  133. package/versioned_docs/version-v1.2/key-change.md +182 -0
  134. package/versioned_docs/version-v1.2/overview.md +47 -0
  135. package/versioned_docs/version-v1.2/poll-types.md +68 -0
  136. package/versioned_docs/version-v1.2/primitives.md +216 -0
  137. package/versioned_docs/version-v1.2/project-ideas.md +14 -0
  138. package/versioned_docs/version-v1.2/purpose.md +62 -0
  139. package/versioned_docs/version-v1.2/solidity-docs/MACI.md +345 -0
  140. package/versioned_docs/version-v1.2/solidity-docs/MessageProcessor.md +266 -0
  141. package/versioned_docs/version-v1.2/solidity-docs/MessageProcessorFactory.md +26 -0
  142. package/versioned_docs/version-v1.2/solidity-docs/Poll.md +381 -0
  143. package/versioned_docs/version-v1.2/solidity-docs/PollFactory.md +50 -0
  144. package/versioned_docs/version-v1.2/solidity-docs/SignUpToken.md +27 -0
  145. package/versioned_docs/version-v1.2/solidity-docs/Subsidy.md +218 -0
  146. package/versioned_docs/version-v1.2/solidity-docs/SubsidyFactory.md +27 -0
  147. package/versioned_docs/version-v1.2/solidity-docs/Tally.md +311 -0
  148. package/versioned_docs/version-v1.2/solidity-docs/TallyFactory.md +27 -0
  149. package/versioned_docs/version-v1.2/solidity-docs/TallyNonQv.md +296 -0
  150. package/versioned_docs/version-v1.2/solidity-docs/TallyNonQvFactory.md +27 -0
  151. package/versioned_docs/version-v1.2/solidity-docs/TopupCredit.md +61 -0
  152. package/versioned_docs/version-v1.2/solidity-docs/VkRegistry.md +457 -0
  153. package/versioned_docs/version-v1.2/solidity-docs/benchmarks/HasherBenchmarks.md +44 -0
  154. package/versioned_docs/version-v1.2/solidity-docs/crypto/Hasher.md +125 -0
  155. package/versioned_docs/version-v1.2/solidity-docs/crypto/IVerifier.md +11 -0
  156. package/versioned_docs/version-v1.2/solidity-docs/crypto/MockVerifier.md +17 -0
  157. package/versioned_docs/version-v1.2/solidity-docs/crypto/Pairing.md +85 -0
  158. package/versioned_docs/version-v1.2/solidity-docs/crypto/PoseidonT3.md +9 -0
  159. package/versioned_docs/version-v1.2/solidity-docs/crypto/PoseidonT4.md +9 -0
  160. package/versioned_docs/version-v1.2/solidity-docs/crypto/PoseidonT5.md +9 -0
  161. package/versioned_docs/version-v1.2/solidity-docs/crypto/PoseidonT6.md +9 -0
  162. package/versioned_docs/version-v1.2/solidity-docs/crypto/SnarkCommon.md +16 -0
  163. package/versioned_docs/version-v1.2/solidity-docs/crypto/SnarkConstants.md +40 -0
  164. package/versioned_docs/version-v1.2/solidity-docs/crypto/Verifier.md +61 -0
  165. package/versioned_docs/version-v1.2/solidity-docs/gatekeepers/EASGatekeeper.md +121 -0
  166. package/versioned_docs/version-v1.2/solidity-docs/gatekeepers/FreeForAllSignUpGatekeeper.md +40 -0
  167. package/versioned_docs/version-v1.2/solidity-docs/gatekeepers/SignUpGatekeeper.md +26 -0
  168. package/versioned_docs/version-v1.2/solidity-docs/gatekeepers/SignUpTokenGatekeeper.md +93 -0
  169. package/versioned_docs/version-v1.2/solidity-docs/gatekeepers/hatsGatekeepers/HatsGatekeeperBase.md +79 -0
  170. package/versioned_docs/version-v1.2/solidity-docs/gatekeepers/hatsGatekeepers/HatsGatekeeperMultiple.md +48 -0
  171. package/versioned_docs/version-v1.2/solidity-docs/gatekeepers/hatsGatekeepers/HatsGatekeeperSingle.md +42 -0
  172. package/versioned_docs/version-v1.2/solidity-docs/index.md +4 -0
  173. package/versioned_docs/version-v1.2/solidity-docs/initialVoiceCreditProxy/ConstantInitialVoiceCreditProxy.md +40 -0
  174. package/versioned_docs/version-v1.2/solidity-docs/initialVoiceCreditProxy/InitialVoiceCreditProxy.md +26 -0
  175. package/versioned_docs/version-v1.2/solidity-docs/interfaces/IEAS.md +40 -0
  176. package/versioned_docs/version-v1.2/solidity-docs/interfaces/IHats.md +103 -0
  177. package/versioned_docs/version-v1.2/solidity-docs/interfaces/IMPFactory.md +26 -0
  178. package/versioned_docs/version-v1.2/solidity-docs/interfaces/IMessageProcessor.md +31 -0
  179. package/versioned_docs/version-v1.2/solidity-docs/interfaces/IPoll.md +217 -0
  180. package/versioned_docs/version-v1.2/solidity-docs/interfaces/IPollFactory.md +29 -0
  181. package/versioned_docs/version-v1.2/solidity-docs/interfaces/ITallyFactory.md +28 -0
  182. package/versioned_docs/version-v1.2/solidity-docs/interfaces/ITallySubsidyFactory.md +27 -0
  183. package/versioned_docs/version-v1.2/solidity-docs/interfaces/IVerifier.md +25 -0
  184. package/versioned_docs/version-v1.2/solidity-docs/interfaces/IVkRegistry.md +70 -0
  185. package/versioned_docs/version-v1.2/solidity-docs/mocks/MockHatsProtocol.md +133 -0
  186. package/versioned_docs/version-v1.2/solidity-docs/trees/AccQueue.md +464 -0
  187. package/versioned_docs/version-v1.2/solidity-docs/trees/AccQueueBinary.md +60 -0
  188. package/versioned_docs/version-v1.2/solidity-docs/trees/AccQueueBinary0.md +40 -0
  189. package/versioned_docs/version-v1.2/solidity-docs/trees/AccQueueBinaryMaci.md +34 -0
  190. package/versioned_docs/version-v1.2/solidity-docs/trees/AccQueueQuinary.md +75 -0
  191. package/versioned_docs/version-v1.2/solidity-docs/trees/AccQueueQuinary0.md +40 -0
  192. package/versioned_docs/version-v1.2/solidity-docs/trees/AccQueueQuinaryBlankSl.md +40 -0
  193. package/versioned_docs/version-v1.2/solidity-docs/trees/AccQueueQuinaryMaci.md +40 -0
  194. package/versioned_docs/version-v1.2/solidity-docs/trees/EmptyBallotRoots.md +13 -0
  195. package/versioned_docs/version-v1.2/solidity-docs/utilities/CommonUtilities.md +25 -0
  196. package/versioned_docs/version-v1.2/solidity-docs/utilities/DomainObjs.md +40 -0
  197. package/versioned_docs/version-v1.2/solidity-docs/utilities/Params.md +36 -0
  198. package/versioned_docs/version-v1.2/solidity-docs/utilities/Utilities.md +79 -0
  199. package/versioned_docs/version-v1.2/spec.md +944 -0
  200. package/versioned_docs/version-v1.2/testing-in-detail.md +209 -0
  201. package/versioned_docs/version-v1.2/testing.md +472 -0
  202. package/versioned_docs/version-v1.2/topup.md +43 -0
  203. package/versioned_docs/version-v1.2/troubleshooting.md +51 -0
  204. package/versioned_docs/version-v1.2/trusted-setup.md +76 -0
  205. package/versioned_docs/version-v1.2/typedoc/cli/.nojekyll +1 -0
  206. package/versioned_docs/version-v1.2/typedoc/cli/index.md +15 -0
  207. package/versioned_docs/version-v1.2/typedoc/cli/interfaces/AirdropArgs.md +89 -0
  208. package/versioned_docs/version-v1.2/typedoc/cli/interfaces/DeployArgs.md +154 -0
  209. package/versioned_docs/version-v1.2/typedoc/cli/interfaces/DeployPollArgs.md +154 -0
  210. package/versioned_docs/version-v1.2/typedoc/cli/interfaces/DeployedContracts.md +130 -0
  211. package/versioned_docs/version-v1.2/typedoc/cli/interfaces/GenLocalStateArgs.md +168 -0
  212. package/versioned_docs/version-v1.2/typedoc/cli/interfaces/GenProofsArgs.md +388 -0
  213. package/versioned_docs/version-v1.2/typedoc/cli/interfaces/IGenKeypairArgs.md +37 -0
  214. package/versioned_docs/version-v1.2/typedoc/cli/interfaces/IRegisteredUserArgs.md +63 -0
  215. package/versioned_docs/version-v1.2/typedoc/cli/interfaces/MergeMessagesArgs.md +76 -0
  216. package/versioned_docs/version-v1.2/typedoc/cli/interfaces/MergeSignupsArgs.md +76 -0
  217. package/versioned_docs/version-v1.2/typedoc/cli/interfaces/PollContracts.md +53 -0
  218. package/versioned_docs/version-v1.2/typedoc/cli/interfaces/ProveOnChainArgs.md +128 -0
  219. package/versioned_docs/version-v1.2/typedoc/cli/interfaces/PublishArgs.md +154 -0
  220. package/versioned_docs/version-v1.2/typedoc/cli/interfaces/SignupArgs.md +89 -0
  221. package/versioned_docs/version-v1.2/typedoc/cli/interfaces/SubsidyData.md +73 -0
  222. package/versioned_docs/version-v1.2/typedoc/cli/interfaces/TallyData.md +166 -0
  223. package/versioned_docs/version-v1.2/typedoc/cli/interfaces/TopupArgs.md +89 -0
  224. package/versioned_docs/version-v1.2/typedoc/cli/interfaces/VerifyArgs.md +128 -0
  225. package/versioned_docs/version-v1.2/typedoc/cli/modules.md +556 -0
  226. package/versioned_docs/version-v1.2/typedoc/core/.nojekyll +1 -0
  227. package/versioned_docs/version-v1.2/typedoc/core/classes/MaciState.md +295 -0
  228. package/versioned_docs/version-v1.2/typedoc/core/classes/Poll.md +1098 -0
  229. package/versioned_docs/version-v1.2/typedoc/core/index.md +110 -0
  230. package/versioned_docs/version-v1.2/typedoc/core/interfaces/BatchSizes.md +50 -0
  231. package/versioned_docs/version-v1.2/typedoc/core/interfaces/IJsonMaciState.md +77 -0
  232. package/versioned_docs/version-v1.2/typedoc/core/interfaces/IProcessMessagesCircuitInputs.md +242 -0
  233. package/versioned_docs/version-v1.2/typedoc/core/interfaces/ISubsidyCircuitInputs.md +198 -0
  234. package/versioned_docs/version-v1.2/typedoc/core/interfaces/ITallyCircuitInputs.md +231 -0
  235. package/versioned_docs/version-v1.2/typedoc/core/interfaces/MaxValues.md +37 -0
  236. package/versioned_docs/version-v1.2/typedoc/core/interfaces/TreeDepths.md +63 -0
  237. package/versioned_docs/version-v1.2/typedoc/core/modules.md +289 -0
  238. package/versioned_docs/version-v1.2/typedoc/crypto/.nojekyll +1 -0
  239. package/versioned_docs/version-v1.2/typedoc/crypto/classes/AccQueue.md +770 -0
  240. package/versioned_docs/version-v1.2/typedoc/crypto/classes/G1Point.md +115 -0
  241. package/versioned_docs/version-v1.2/typedoc/crypto/classes/G2Point.md +140 -0
  242. package/versioned_docs/version-v1.2/typedoc/crypto/classes/IncrementalQuinTree.md +470 -0
  243. package/versioned_docs/version-v1.2/typedoc/crypto/index.md +44 -0
  244. package/versioned_docs/version-v1.2/typedoc/crypto/interfaces/Keypair.md +33 -0
  245. package/versioned_docs/version-v1.2/typedoc/crypto/interfaces/PoseidonFuncs.md +115 -0
  246. package/versioned_docs/version-v1.2/typedoc/crypto/interfaces/Queue.md +33 -0
  247. package/versioned_docs/version-v1.2/typedoc/crypto/interfaces/Signature.md +37 -0
  248. package/versioned_docs/version-v1.2/typedoc/crypto/modules.md +913 -0
  249. package/versioned_docs/version-v1.2/typedoc/domainobjs/.nojekyll +1 -0
  250. package/versioned_docs/version-v1.2/typedoc/domainobjs/classes/Ballot.md +274 -0
  251. package/versioned_docs/version-v1.2/typedoc/domainobjs/classes/Keypair.md +181 -0
  252. package/versioned_docs/version-v1.2/typedoc/domainobjs/classes/Message.md +244 -0
  253. package/versioned_docs/version-v1.2/typedoc/domainobjs/classes/PCommand.md +409 -0
  254. package/versioned_docs/version-v1.2/typedoc/domainobjs/classes/PrivKey.md +206 -0
  255. package/versioned_docs/version-v1.2/typedoc/domainobjs/classes/PubKey.md +289 -0
  256. package/versioned_docs/version-v1.2/typedoc/domainobjs/classes/StateLeaf.md +340 -0
  257. package/versioned_docs/version-v1.2/typedoc/domainobjs/classes/TCommand.md +200 -0
  258. package/versioned_docs/version-v1.2/typedoc/domainobjs/classes/VerifyingKey.md +240 -0
  259. package/versioned_docs/version-v1.2/typedoc/domainobjs/index.md +81 -0
  260. package/versioned_docs/version-v1.2/typedoc/domainobjs/interfaces/ICommand.md +104 -0
  261. package/versioned_docs/version-v1.2/typedoc/domainobjs/interfaces/IG1ContractParams.md +31 -0
  262. package/versioned_docs/version-v1.2/typedoc/domainobjs/interfaces/IG2ContractParams.md +31 -0
  263. package/versioned_docs/version-v1.2/typedoc/domainobjs/interfaces/IJsonBallot.md +42 -0
  264. package/versioned_docs/version-v1.2/typedoc/domainobjs/interfaces/IJsonCommand.md +32 -0
  265. package/versioned_docs/version-v1.2/typedoc/domainobjs/interfaces/IJsonKeyPair.md +31 -0
  266. package/versioned_docs/version-v1.2/typedoc/domainobjs/interfaces/IJsonPCommand.md +111 -0
  267. package/versioned_docs/version-v1.2/typedoc/domainobjs/interfaces/IJsonStateLeaf.md +42 -0
  268. package/versioned_docs/version-v1.2/typedoc/domainobjs/interfaces/IJsonTCommand.md +67 -0
  269. package/versioned_docs/version-v1.2/typedoc/domainobjs/interfaces/IMessageContractParams.md +31 -0
  270. package/versioned_docs/version-v1.2/typedoc/domainobjs/interfaces/IStateLeaf.md +39 -0
  271. package/versioned_docs/version-v1.2/typedoc/domainobjs/interfaces/IStateLeafContractParams.md +42 -0
  272. package/versioned_docs/version-v1.2/typedoc/domainobjs/interfaces/IVkContractParams.md +64 -0
  273. package/versioned_docs/version-v1.2/typedoc/domainobjs/interfaces/IVkObjectParams.md +108 -0
  274. package/versioned_docs/version-v1.2/typedoc/domainobjs/interfaces/Proof.md +46 -0
  275. package/versioned_docs/version-v1.2/typedoc/domainobjs/interfaces/VoteOptionTreeLeaf.md +24 -0
  276. package/versioned_docs/version-v1.2/typedoc/domainobjs/modules.md +110 -0
  277. package/versioned_docs/version-v1.2/typedoc/index.md +4 -0
  278. package/versioned_docs/version-v1.2/versioning.md +94 -0
  279. package/versioned_docs/version-v1.2/workflow.md +142 -0
  280. package/versioned_docs/version-v2.x/case-studies.md +35 -0
  281. package/versioned_docs/version-v2.x/contributing/_category_.json +4 -0
  282. package/versioned_docs/version-v2.x/contributing/code-of-conduct.md +92 -0
  283. package/versioned_docs/version-v2.x/contributing/contributing.md +149 -0
  284. package/versioned_docs/version-v2.x/contributing/project-ideas.md +78 -0
  285. package/versioned_docs/version-v2.x/core-concepts/_category_.json +4 -0
  286. package/versioned_docs/version-v2.x/core-concepts/ballot.md +19 -0
  287. package/versioned_docs/version-v2.x/core-concepts/coordinator-processing.md +46 -0
  288. package/versioned_docs/version-v2.x/core-concepts/hashing-and-encryption.md +45 -0
  289. package/versioned_docs/version-v2.x/core-concepts/key-change.md +179 -0
  290. package/versioned_docs/version-v2.x/core-concepts/maci-keys.md +84 -0
  291. package/versioned_docs/version-v2.x/core-concepts/maci-messages.md +44 -0
  292. package/versioned_docs/version-v2.x/core-concepts/merkle-trees.md +23 -0
  293. package/versioned_docs/version-v2.x/core-concepts/poll-types.md +106 -0
  294. package/versioned_docs/version-v2.x/core-concepts/spec.md +883 -0
  295. package/versioned_docs/version-v2.x/core-concepts/state-leaf.md +42 -0
  296. package/versioned_docs/version-v2.x/core-concepts/workflow.md +142 -0
  297. package/versioned_docs/version-v2.x/getting-started.md +313 -0
  298. package/versioned_docs/version-v2.x/guides/_category_.json +4 -0
  299. package/versioned_docs/version-v2.x/guides/compile-circuits.md +163 -0
  300. package/versioned_docs/version-v2.x/guides/frontend.md +99 -0
  301. package/versioned_docs/version-v2.x/guides/integrating.md +73 -0
  302. package/versioned_docs/version-v2.x/guides/maciWrapper.md +173 -0
  303. package/versioned_docs/version-v2.x/guides/subgraph.md +79 -0
  304. package/versioned_docs/version-v2.x/guides/testing/_category_.json +4 -0
  305. package/versioned_docs/version-v2.x/guides/testing/testing-in-detail.md +203 -0
  306. package/versioned_docs/version-v2.x/guides/testing/testing.md +163 -0
  307. package/versioned_docs/version-v2.x/guides/troubleshooting.md +161 -0
  308. package/versioned_docs/version-v2.x/introduction.md +146 -0
  309. package/versioned_docs/version-v2.x/processes/_category_.json +4 -0
  310. package/versioned_docs/version-v2.x/processes/ci-pipeline.md +38 -0
  311. package/versioned_docs/version-v2.x/processes/versioning.md +94 -0
  312. package/versioned_docs/version-v2.x/resources.md +33 -0
  313. package/versioned_docs/version-v2.x/security/_category_.json +4 -0
  314. package/versioned_docs/version-v2.x/security/audit.md +167 -0
  315. package/versioned_docs/version-v2.x/security/trusted-setup.md +166 -0
  316. package/versioned_docs/version-v2.x/supported-networks/_category_.json +4 -0
  317. package/versioned_docs/version-v2.x/supported-networks/deployed-contracts.md +1108 -0
  318. package/versioned_docs/version-v2.x/supported-networks/supported-networks.md +47 -0
  319. package/versioned_docs/version-v2.x/technical-references/_category_.json +4 -0
  320. package/versioned_docs/version-v2.x/technical-references/smart-contracts/AccQueue.md +21 -0
  321. package/versioned_docs/version-v2.x/technical-references/smart-contracts/Gatekeepers.md +40 -0
  322. package/versioned_docs/version-v2.x/technical-references/smart-contracts/MACI.md +152 -0
  323. package/versioned_docs/version-v2.x/technical-references/smart-contracts/MessageProcessor.md +13 -0
  324. package/versioned_docs/version-v2.x/technical-references/smart-contracts/Params.md +32 -0
  325. package/versioned_docs/version-v2.x/technical-references/smart-contracts/Poll.md +104 -0
  326. package/versioned_docs/version-v2.x/technical-references/smart-contracts/PollFactory.md +43 -0
  327. package/versioned_docs/version-v2.x/technical-references/smart-contracts/Tally.md +45 -0
  328. package/versioned_docs/version-v2.x/technical-references/smart-contracts/VkRegistry.md +57 -0
  329. package/versioned_docs/version-v2.x/technical-references/smart-contracts/VoiceCreditProxy.md +18 -0
  330. package/versioned_docs/version-v2.x/technical-references/smart-contracts/_category_.json +8 -0
  331. package/versioned_docs/version-v2.x/technical-references/technical-references.md +47 -0
  332. package/versioned_docs/version-v2.x/technical-references/typescript-code/_category_.json +4 -0
  333. package/versioned_docs/version-v2.x/technical-references/typescript-code/cli.md +699 -0
  334. package/versioned_docs/version-v2.x/technical-references/zk-snark-circuits/_category_.json +4 -0
  335. package/versioned_docs/version-v2.x/technical-references/zk-snark-circuits/processMessages.md +107 -0
  336. package/versioned_docs/version-v2.x/technical-references/zk-snark-circuits/setup.md +101 -0
  337. package/versioned_docs/version-v2.x/technical-references/zk-snark-circuits/tallyVotes.md +79 -0
  338. package/versioned_docs/version-v2.x/technical-references/zk-snark-circuits/utilities.md +131 -0
  339. package/versioned_docs/version-v2.x/technical-references/zk-snark-circuits/zk-snark-circuits.md +37 -0
  340. package/versioned_docs/version-v2.x/use-cases/_category_.json +4 -0
  341. package/versioned_docs/version-v2.x/use-cases/governance.md +18 -0
  342. package/versioned_docs/version-v2.x/use-cases/polling.md +10 -0
  343. package/versioned_docs/version-v2.x/use-cases/public-goods.md +65 -0
  344. package/versioned_docs/version-v3.x/case-studies.md +35 -0
  345. package/versioned_docs/version-v3.x/contributing/_category_.json +4 -0
  346. package/versioned_docs/version-v3.x/contributing/code-of-conduct.md +92 -0
  347. package/versioned_docs/version-v3.x/contributing/contributing.md +155 -0
  348. package/versioned_docs/version-v3.x/contributing/project-ideas.md +78 -0
  349. package/versioned_docs/version-v3.x/core-concepts/_category_.json +4 -0
  350. package/versioned_docs/version-v3.x/core-concepts/ballot.md +19 -0
  351. package/versioned_docs/version-v3.x/core-concepts/coordinator-processing.md +46 -0
  352. package/versioned_docs/version-v3.x/core-concepts/coordinator-service.md +16 -0
  353. package/versioned_docs/version-v3.x/core-concepts/hashing-and-encryption.md +45 -0
  354. package/versioned_docs/version-v3.x/core-concepts/key-change.md +179 -0
  355. package/versioned_docs/version-v3.x/core-concepts/maci-keys.md +84 -0
  356. package/versioned_docs/version-v3.x/core-concepts/maci-messages.md +44 -0
  357. package/versioned_docs/version-v3.x/core-concepts/merkle-trees.md +16 -0
  358. package/versioned_docs/version-v3.x/core-concepts/offchain-voting.md +14 -0
  359. package/versioned_docs/version-v3.x/core-concepts/poll-types.md +82 -0
  360. package/versioned_docs/version-v3.x/core-concepts/polls.md +105 -0
  361. package/versioned_docs/version-v3.x/core-concepts/spec.md +817 -0
  362. package/versioned_docs/version-v3.x/core-concepts/state-leaf.md +42 -0
  363. package/versioned_docs/version-v3.x/core-concepts/workflow.md +149 -0
  364. package/versioned_docs/version-v3.x/guides/_category_.json +4 -0
  365. package/versioned_docs/version-v3.x/guides/compile-circuits.md +191 -0
  366. package/versioned_docs/version-v3.x/guides/integrating.md +137 -0
  367. package/versioned_docs/version-v3.x/guides/sdk.md +121 -0
  368. package/versioned_docs/version-v3.x/guides/subgraph.md +79 -0
  369. package/versioned_docs/version-v3.x/guides/testing/_category_.json +4 -0
  370. package/versioned_docs/version-v3.x/guides/testing/testing-in-detail.md +191 -0
  371. package/versioned_docs/version-v3.x/guides/testing/testing-introduction.md +190 -0
  372. package/versioned_docs/version-v3.x/guides/troubleshooting.md +206 -0
  373. package/versioned_docs/version-v3.x/introduction.md +153 -0
  374. package/versioned_docs/version-v3.x/processes/_category_.json +4 -0
  375. package/versioned_docs/version-v3.x/processes/ci-pipeline.md +38 -0
  376. package/versioned_docs/version-v3.x/processes/versioning.md +94 -0
  377. package/versioned_docs/version-v3.x/quick-start.md +326 -0
  378. package/versioned_docs/version-v3.x/resources.md +34 -0
  379. package/versioned_docs/version-v3.x/security/_category_.json +4 -0
  380. package/versioned_docs/version-v3.x/security/audit.md +167 -0
  381. package/versioned_docs/version-v3.x/security/trusted-setup.md +172 -0
  382. package/versioned_docs/version-v3.x/supported-networks/_category_.json +4 -0
  383. package/versioned_docs/version-v3.x/supported-networks/costs.md +725 -0
  384. package/versioned_docs/version-v3.x/supported-networks/deployed-contracts.md +112 -0
  385. package/versioned_docs/version-v3.x/supported-networks/supported-networks.md +69 -0
  386. package/versioned_docs/version-v3.x/technical-references/_category_.json +4 -0
  387. package/versioned_docs/version-v3.x/technical-references/coordinator-service/_category_.json +8 -0
  388. package/versioned_docs/version-v3.x/technical-references/coordinator-service/index.md +24 -0
  389. package/versioned_docs/version-v3.x/technical-references/coordinator-service/installation.md +15 -0
  390. package/versioned_docs/version-v3.x/technical-references/coordinator-service/usage.md +64 -0
  391. package/versioned_docs/version-v3.x/technical-references/offchain-relayer/_category_.json +8 -0
  392. package/versioned_docs/version-v3.x/technical-references/offchain-relayer/index.md +51 -0
  393. package/versioned_docs/version-v3.x/technical-references/offchain-relayer/installation.md +109 -0
  394. package/versioned_docs/version-v3.x/technical-references/smart-contracts/MACI.md +160 -0
  395. package/versioned_docs/version-v3.x/technical-references/smart-contracts/MessageProcessor.md +13 -0
  396. package/versioned_docs/version-v3.x/technical-references/smart-contracts/Params.md +33 -0
  397. package/versioned_docs/version-v3.x/technical-references/smart-contracts/Policies.md +39 -0
  398. package/versioned_docs/version-v3.x/technical-references/smart-contracts/Poll.md +170 -0
  399. package/versioned_docs/version-v3.x/technical-references/smart-contracts/PollFactory.md +33 -0
  400. package/versioned_docs/version-v3.x/technical-references/smart-contracts/Tally.md +43 -0
  401. package/versioned_docs/version-v3.x/technical-references/smart-contracts/VkRegistry.md +62 -0
  402. package/versioned_docs/version-v3.x/technical-references/smart-contracts/VoiceCreditProxy.md +18 -0
  403. package/versioned_docs/version-v3.x/technical-references/smart-contracts/_category_.json +8 -0
  404. package/versioned_docs/version-v3.x/technical-references/technical-references.md +48 -0
  405. package/versioned_docs/version-v3.x/technical-references/zk-snark-circuits/_category_.json +4 -0
  406. package/versioned_docs/version-v3.x/technical-references/zk-snark-circuits/joinPoll.md +52 -0
  407. package/versioned_docs/version-v3.x/technical-references/zk-snark-circuits/processMessages.md +170 -0
  408. package/versioned_docs/version-v3.x/technical-references/zk-snark-circuits/setup.md +96 -0
  409. package/versioned_docs/version-v3.x/technical-references/zk-snark-circuits/tallyVotes.md +79 -0
  410. package/versioned_docs/version-v3.x/technical-references/zk-snark-circuits/utilities.md +131 -0
  411. package/versioned_docs/version-v3.x/technical-references/zk-snark-circuits/zk-snark-circuits.md +42 -0
  412. package/versioned_docs/version-v3.x/use-cases/_category_.json +4 -0
  413. package/versioned_docs/version-v3.x/use-cases/governance.md +18 -0
  414. package/versioned_docs/version-v3.x/use-cases/polling.md +10 -0
  415. package/versioned_docs/version-v3.x/use-cases/public-goods.md +65 -0
  416. package/versioned_sidebars/version-v0.x-sidebars.json +8 -0
  417. package/versioned_sidebars/version-v1.2-sidebars.json +8 -0
  418. package/versioned_sidebars/version-v2.x-sidebars.json +8 -0
  419. package/versioned_sidebars/version-v3.x-sidebars.json +8 -0
  420. package/versions.json +1 -0
@@ -0,0 +1,79 @@
1
+ ---
2
+ title: Subgraph Deployment
3
+ description: How to deploy a MACI Subgraph
4
+ sidebar_label: Subgraph Deployment
5
+ sidebar_position: 1
6
+ ---
7
+
8
+ # Subgraph Deployment
9
+
10
+ In some instances like a frontend you might need to deploy a subgraph, in the MACI repository you can find the configuration to deploy a subgraph on The Graph Network or Alchemy Subgraphs.
11
+
12
+ :::important
13
+ While the free plan of The Graph and Alchemy can work well, it's recommended to use a paid plan for production.
14
+ :::
15
+
16
+ ## Configuration
17
+
18
+ Head to the subgraph folder in the app folder.
19
+
20
+ ```bash
21
+ cd apps/subgraph
22
+ ```
23
+
24
+ Edit the `network.json` file in the `config` folder. Adding the network it was deployed, the MACI contract and the block where it was deployed.
25
+
26
+ ```json
27
+ {
28
+ "network": "optimism-sepolia",
29
+ "maciContractAddress": "0xD18Ca45b6cC1f409380731C40551BD66932046c3",
30
+ "maciContractStartBlock": 11052407
31
+ }
32
+ ```
33
+
34
+ :::note
35
+ See the supported networks of The Graph **[here](https://thegraph.com/docs/en/developing/supported-networks/)**.
36
+ :::
37
+
38
+ Create a subgraph in [the graph studio](https://thegraph.com/studio/) and name it `maci-subgraph`.
39
+
40
+ ## The Graph Deployment
41
+
42
+ The first thing you need to do is to copy the `key` in subgraph studio dashboard and run the following command to authenticate:
43
+
44
+ ```bash
45
+ graph auth --studio {key}
46
+ ```
47
+
48
+ Then run the following commands to build and deploy the subgraph:
49
+
50
+ ```bash
51
+ pnpm run build && \
52
+ pnpm run deploy
53
+ ```
54
+
55
+ :::important
56
+ The `pnpm run deploy` command uses `maci-subgraph` as the subgraph name by default, but if you named your subgraph differently (e.g. maci-graph, my-graph, etc.), please change the command to `graph deploy --node https://api.studio.thegraph.com/deploy/ your_subgraph_name`
57
+ :::
58
+
59
+ ## Alchemy Deployment
60
+
61
+ Deploying to the Alchemy subgraph service requires some changes to the `subgraph.template.yaml` file located in the `templates` folder. You need to remove the following keys:
62
+
63
+ ```yaml
64
+ indexerHints:
65
+ prune: auto
66
+ ```
67
+
68
+ Now you can run the deploy command with some minor changes:
69
+
70
+ ```bash
71
+ graph deploy SUBGRAPH_NAME \
72
+ --version-label VERSION \
73
+ --node https://subgraphs.alchemy.com/api/subgraphs/deploy \
74
+ --deploy-key API_KEY
75
+ ```
76
+
77
+ :::note
78
+ In order to get a subgraph deploy key for alchemy, head to the subgraph dashboard section and select `add subgraph` and pick `Deploy a New Subgraph` here you will see the deploy key.
79
+ :::
@@ -0,0 +1,4 @@
1
+ {
2
+ "label": "Testing",
3
+ "position": 7
4
+ }
@@ -0,0 +1,191 @@
1
+ ---
2
+ title: MACI Testing in Detail
3
+ description: How MACI tests work in detail
4
+ sidebar_label: Testing in detail
5
+ sidebar_position: 2
6
+ ---
7
+
8
+ # Testing in detail
9
+
10
+ This doc expands on our [introduction to testing](/docs/guides/testing/testing-introduction) doc and explains how MACI tests work in greater detail. This information should be used by MACI's maintainers as well as contributors.
11
+
12
+ ## Automated Tests
13
+
14
+ ### Integration Tests
15
+
16
+ Integration tests follow a similar fashion of the e2e tests, though they also ensure that the tally results are as expected.
17
+
18
+ Currently, tests are defined using a JSON file, here is one example:
19
+
20
+ ```json
21
+ {
22
+ "name": "Happy path",
23
+ "description": "Full tree, 4 batches, no bribers",
24
+ "numVotesPerUser": 1,
25
+ "numUsers": 15,
26
+ "expectedTally": [15, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
27
+ "expectedSpentVoiceCredits": [15, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
28
+ "expectedTotalSpentVoiceCredits": 15
29
+ }
30
+ ```
31
+
32
+ This test will generate 15 signups (as expressed in `numUsers`), and submit one vote (`numVotesPerUser`) for each of the users. As we did not provide any vote detail, it will use the default: `weight = 1`, `option = 0` for all voters. This will result of course in a tally result of 15 for option 0, and 0 for all other options.
33
+
34
+ Finally, the whole process of merging the state and message trees is performed, proofs are generated and the tally result is verified against the expected result.
35
+
36
+ #### How to implement a new test case
37
+
38
+ To add a new test case, it is quite simple. You can amend the `testing/ts/__tests__/data/suites.json` file and add your test declaration in there.
39
+
40
+ ```json
41
+ {
42
+ "name": "4 voters 1 vote per user",
43
+ "description": "has correct results",
44
+ "numUsers": 4,
45
+ "numVotesPerUser": 1,
46
+ "votes": {
47
+ "0": {
48
+ "0": { "voteOptionIndex": 0, "voteWeight": 1, "valid": true }
49
+ },
50
+ "1": {
51
+ "0": { "voteOptionIndex": 0, "voteWeight": 1, "valid": true }
52
+ },
53
+ "2": {
54
+ "0": { "voteOptionIndex": 0, "voteWeight": 1, "valid": true }
55
+ },
56
+ "3": {
57
+ "0": { "voteOptionIndex": 0, "voteWeight": 1, "valid": true }
58
+ }
59
+ },
60
+ "expectedTally": [4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
61
+ "expectedSpentVoiceCredits": [4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
62
+ "expectedTotalSpentVoiceCredits": 4
63
+ }
64
+ ```
65
+
66
+ Let's look at the fields in detail:
67
+
68
+ - `name`: the name of the test case
69
+ - `description`: a description of the test case
70
+ - `numUsers`: the number of users to generate
71
+ - `numVotesPerUser`: the number of votes to generate for each user
72
+ - `votes`: the votes to generate. This is an object where the key is the user index, and the value is another object where the key is the message index, and the value is the vote details. If you do not provide any vote details, the default will be used: `weight = 1`, `option = 0` for all voters.
73
+ - `expectedTally`: the expected tally result for each vote option (in order)
74
+ - `expectedSpentVoiceCredits`: the expected spent voice credits for each vote option (in order)
75
+ - `expectedTotalSpentVoiceCredits`: the expected total spent voice credits
76
+
77
+ As an example, let's try to implement a test given the following criteria:
78
+
79
+ 1. We want 10 users to signup
80
+ 2. We want each user to publish a different vote
81
+ 3. We want to verify that the tally result is as expected
82
+
83
+ ```json
84
+ {
85
+ "name": "10 Users test",
86
+ "description": "Should signup 10 users, submit 10 votes and tally the results",
87
+ "numUsers": 10,
88
+ "numVotesPerUser": 1,
89
+ "votes": {
90
+ "0": {
91
+ "0": { "voteOptionIndex": 0, "voteWeight": 5 }
92
+ },
93
+ "1": {
94
+ "0": { "voteOptionIndex": 0, "voteWeight": 9 }
95
+ },
96
+ "2": {
97
+ "0": { "voteOptionIndex": 5, "voteWeight": 3 }
98
+ },
99
+ "3": {
100
+ "0": { "voteOptionIndex": 3, "voteWeight": 2 }
101
+ },
102
+ "4": {
103
+ "0": { "voteOptionIndex": 0, "voteWeight": 1 }
104
+ },
105
+ "5": {
106
+ "0": { "voteOptionIndex": 9, "voteWeight": 1 }
107
+ },
108
+ "6": {
109
+ "0": { "voteOptionIndex": 4, "voteWeight": 7 }
110
+ },
111
+ "7": {
112
+ "0": { "voteOptionIndex": 7, "voteWeight": 5 }
113
+ },
114
+ "8": {
115
+ "0": { "voteOptionIndex": 3, "voteWeight": 10 }
116
+ },
117
+ "9": {
118
+ "0": { "voteOptionIndex": 8, "voteWeight": 2 }
119
+ }
120
+ },
121
+ "expectedTally": [15, 0, 0, 12, 7, 3, 0, 5, 2, 1, 0, 0, 0, 0, 0, 0, 0, 0],
122
+ "expectedSpentVoiceCredits": [107, 0, 0, 104, 49, 9, 0, 25, 4, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
123
+ "expectedTotalSpentVoiceCredits": 299
124
+ }
125
+ ```
126
+
127
+ **Why expectedTally as above**
128
+
129
+ [(5 + 9 + 1), 0, 0, (2 + 10), 7, 3, 0, 5, 2, 1, 0, 0, 0, 0, 0, 0, 0, 0] -> [15, 0, 0, 12, 7, 3, 0, 5, 2, 1, 0, 0, 0, 0, 0, 0, 0, 0]
130
+
131
+ **Why 299 voice credits spent**
132
+
133
+ - 5 ** 2 + 9 ** 2 + 3 ** 2 + 2 ** 2 + 1 ** 2 + 1 ** 1 + 7 ** 2 + 5 ** 2 + 10 ** 2 + 2 ** 2 = 25 + 81 + 9 + 4 + 1 + 1 + 49 + 25 + 100 + 4 = 299
134
+
135
+ **Why expectedSpentVoiceCredits as above**
136
+
137
+ [(25 + 81 + 1), 0, 0, (4 + 100), 49, 0, 25, 4, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0] -> [107, 0, 0, 104, 49, 0, 25, 4, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]
138
+
139
+ #### MACI keys integration tests
140
+
141
+ Another test file which is found inside the integration tests folder is the `maciKeys.test.ts` file. This file contains a number of tests that are used to verify that the MACI keys work as expected. These tests are written in TypeScript and use the `mocha` and `chai` frameworks.
142
+
143
+ They are testing that between the `contracts`, `domainobjs` and `crypto` packages, the MACI keys are working correctly, and are serialized/deserialized as expected. This is particularly important to test due to different data formats for keys, especially when parsed from the smart contract events.
144
+
145
+ ### Contract tests
146
+
147
+ Within the contracts folder, there are a number of tests that are used to verify that the contracts work as expected. These tests are written in TypeScript and use the `hardhat` framework.
148
+
149
+ These tests interact with all other packages, such as crypto, domainobjs and core, where mock data comes from. Their main goal is to ensure that the smart contracts have the correct parameters when deployed, privileged functions cannot be called by non-privileged users, and that the contract state is as expected after a series of operations.
150
+
151
+ ### Circuits tests
152
+
153
+ Within the circuits folder, there are a number of tests that are used to verify that the circuits work as expected. These tests are written in TypeScript and use the `circom_tester` (which runs on top of `mocha` and `chai`).
154
+
155
+ These tests often use mock data from the `core` package. For instance, when testing the `processMessages` circuit, we are required to generate the parameters from the `core` packing, using the `Poll:processMessages` function. The same applies to vote tallying, where we need the `Poll:tally` function to be run first with mock users and vote messages.
156
+
157
+ All of the tests run using test parameters, usually `10, 20, 2`, aside from the tests inside: [`ceremonyParam`](https://github.com/privacy-scaling-explorations/maci/blob/main/circuits/ts/__tests__/CeremonyParams.test.ts) which use the parameters of the latest MACI ceremony. More details on the trusted setup can be found [here](/docs/security/trusted-setup).
158
+
159
+ ### Core
160
+
161
+ The core package contains a number of tests that are used to verify that the core functions work as expected. These tests are written in TypeScript and use the `mocha` and `chai` frameworks.
162
+
163
+ These tests interact with the crypto and dombinobjs packages, where mock data comes from. Their main goal is to ensure that the core functions work as expected, and that the state is as expected after a series of operations.
164
+
165
+ Currently, there is a blend of e2e and unit tests, where e2e tests are used to verify that the entire MACI local processing works as expected (users signup, publish votes, messages are processed and finally these votes are tallied). Unit tests on the other hand are used to verify that the core functions work as expected, such as `MessageProcessor` and `VoteTally`. You will find them in separate files, with e2e being [here](https://github.com/privacy-scaling-explorations/maci/blob/main/core/ts/__tests__/e2e.test.ts) and unit tests in the other files.
166
+
167
+ ### Domainobjs/Crypto tests
168
+
169
+ These tests are used to verify that MACI's primitives such as private keys work as expected. They are written in TypeScript and use the `mocha` and `chai` frameworks.
170
+
171
+ ## "Manual" Testing
172
+
173
+ To ensure that the MACI stack works as expected, without having to run the entire test suite (or even just the e2e tests), there is a [bash script](https://github.com/privacy-scaling-explorations/maci/blob/main/packages/contracts/testScriptLocalhost.sh) inside the contracts folder which can be used.
174
+
175
+ This script contains a number of actions which touch all of the parts of MACI, and resemble exactly what other e2e tests do.
176
+
177
+ Looking at this in more details we do the following:
178
+
179
+ 1. Deploy a `VerifyingKeysRegistry` contract
180
+ 2. Set the verification keys on this smart contract
181
+ 3. Deploy a `MACI` contract (and associated utility contracts)
182
+ 4. Deploy a Poll from the MACI contract.
183
+ 5. Signup 1 user
184
+ 6. Publish 2 messages
185
+ 7. Travel in time (local blockchain node) to arrive at the end of the poll
186
+ 8. Merge the tree commitments on chain
187
+ 9. Generate proofs for the message processing and vote tallying
188
+ 10. Update the on chain state
189
+ 11. Verify that proofs and tally are correct
190
+
191
+ The above is the minimum required to ensure that the stack works as expected, as it encompasses actions from both voters and the coordinator.
@@ -0,0 +1,190 @@
1
+ ---
2
+ title: Testing MACI
3
+ description: An introduction on how to test MACI
4
+ sidebar_label: Testing Introduction
5
+ sidebar_position: 1
6
+ ---
7
+
8
+ # Testing introduction
9
+
10
+ ## Unit tests
11
+
12
+ Unit tests within the project are built using [Mocha](https://mochajs.org/) and [Chai](https://www.chaijs.com/). Mocha is a test framework that provides the environment to write and run JavaScript tests, while Chai is an assertion library that allows us to write assertions in a more expressive and readable way.
13
+
14
+ The following submodules contain unit tests: `core`, `crypto`, `circuits`,
15
+ `contracts`, and `domainobjs`.
16
+
17
+ You can run all unit tests from the root directory of the repo by running:
18
+
19
+ ```bash
20
+ pnpm run test
21
+ ```
22
+
23
+ Or you can run unit tests within each submodule. for example to run the `crypto` tests:
24
+
25
+ ```bash
26
+ cd packages/crypto
27
+ pnpm run test
28
+ ```
29
+
30
+ You can also run individual tests within submodules, for example:
31
+
32
+ ```bash
33
+ cd packages/contracts
34
+ pnpm run test:tally
35
+ ```
36
+
37
+ This test command will run `Tally.test.ts`
38
+
39
+ ### Contracts
40
+
41
+ First, compile the contracts.
42
+
43
+ From the main `maci/` directory, run:
44
+
45
+ ```bash
46
+ cd packages/contracts && \
47
+ pnpm run compileSol
48
+ ```
49
+
50
+ To run Contracts only tests, run:
51
+
52
+ ```bash
53
+ pnpm run test
54
+ ```
55
+
56
+ To run e2e tests for hardhat tasks for `contracts` using the in-memory hardhat network:
57
+
58
+ ```bash
59
+ pnpm run test:hardhat
60
+ ```
61
+
62
+ You can update the `deploy-config.json` file to change policies or other deployment settings used by the test.
63
+
64
+ You can enhance test reporting and gas cost estimation by adding the following variables to your `.env` file:
65
+
66
+ ```bash
67
+ # CoinMarkerCap api key for prices (gas reporter)
68
+ COINMARKETCAP_API_KEY=
69
+ # Gas price for gas reporter
70
+ # Allows you to manually specify the gas price (e.g. 3 gwei)
71
+ GAS_REPORTER_PRICE=
72
+ ```
73
+
74
+ These variables are used by `hardhat-gas-reporter` to show cost estimates for gas usage in the test reports.
75
+
76
+ If you would like to run these E2E tests against a different [supported networks](/docs/supported-networks/), you can override the network like this:
77
+
78
+ ```bash
79
+ pnpm exec hardhat test --network {NETWORK} ./tests/e2e/hardhatTasks.test.ts
80
+ ```
81
+
82
+ ### Circuits
83
+
84
+ To test the circuits, from the main `maci/` directory, run:
85
+
86
+ ```bash
87
+ cd packages/circuits && \
88
+ pnpm run test
89
+ ```
90
+
91
+ Tests are run using [Mocha](https://mochajs.org/) and [`circom_tester`](https://github.com/iden3/circom_tester).
92
+
93
+ ## CLI
94
+
95
+ You can test the CLI locally. First, you need to either generate `.zkey` files,
96
+ or download them. Please remember to not use these testing `.zkey` files in production.
97
+
98
+ ### Download `.zkey` files or the witness generation binaries
99
+
100
+ MACI has two main zk-SNARK circuits, `MessageProcessor` and `VoteTally`.
101
+
102
+ :::info
103
+ The `MessageProcessor` and `VoteTally` circuits are also provided in a non-quadratic voting (non-QV) and in a full credits voting (full) versions. Currently these new versions have not undergone a trusted setup ceremony.
104
+ :::
105
+
106
+ Each circuit is parameterised and there should be one
107
+ `.zkey` file for each circuit and set of parameters.
108
+
109
+ Unless you wish to generate a fresh set of `.zkey` files, you should obtain
110
+ them from someone who has performed a multi-party trusted setup for said
111
+ circuits.
112
+
113
+ Note the locations of the `.zkey` files as the smart contract tasks require them as part of the JSON configuration file.
114
+
115
+ For testing purposes you can download the required artifacts using the [`download-zkeys:test`](https://github.com/privacy-scaling-explorations/maci/blob/main/package.json#L15). The script will place all required artifacts inside the `cli/zkeys` folder.
116
+
117
+ You can run the script directly with bash or use pnpm: `pnpm run download:test-zkeys` from the monorepo root.
118
+
119
+ ### Compile the circuits and generate zkeys (if decided to generate from scratch)
120
+
121
+ From the root folder, run:
122
+
123
+ **for c++ witness generator**
124
+
125
+ ```bash
126
+ pnpm build:circuits-c -- --outPath ../../zkeys
127
+ ```
128
+
129
+ **for wasm witness generator**
130
+
131
+ ```bash
132
+ pnpm build:circuits-wasm -- --outPath ../../zkeys
133
+ ```
134
+
135
+ **generate zkeys**
136
+
137
+ ```bash
138
+ pnpm setup:zkeys --outPath ../../zkeys
139
+ ```
140
+
141
+ ### Check the Rapidsnark binary
142
+
143
+ Next, ensure that the `prover` binary of `rapidsnark` is in
144
+ `~/rapidsnark/build/prover`.
145
+
146
+ :::info
147
+ This step is only required if you wish to use rapidsnark, for faster proof generation. You can also use the WASM witnesses provided in the `testing/zkeys` folder.
148
+ :::
149
+
150
+ ### Run CLI tests
151
+
152
+ You can find the tests in `maci/testing/ts/__tests__`.
153
+
154
+ To run the tests first start a hardhat node in the background:
155
+
156
+ ```bash
157
+ cd packages/contracts
158
+ pnpm run hardhat &
159
+ cd ../testing/ts
160
+ ```
161
+
162
+ Then run the tests (this will run all tests):
163
+
164
+ ```bash
165
+ pnpm run test
166
+ ```
167
+
168
+ To run e2e tests (quadratic voting):
169
+
170
+ ```bash
171
+ pnpm run test:e2e
172
+ ```
173
+
174
+ To run e2e tests with normal voting (not quadratic voting):
175
+
176
+ ```bash
177
+ pnpm run test:e2e-non-qv
178
+ ```
179
+
180
+ To run e2e tests with full credits voting (full):
181
+
182
+ ```bash
183
+ pnpm run test:e2e-full
184
+ ```
185
+
186
+ To run integration tests:
187
+
188
+ ```bash
189
+ pnpm run test:integration
190
+ ```
@@ -0,0 +1,206 @@
1
+ ---
2
+ title: Troubleshooting
3
+ description: How to troubleshoot MACI's failures
4
+ sidebar_label: Troubleshooting
5
+ sidebar_position: 5
6
+ ---
7
+
8
+ # Troubleshooting
9
+
10
+ ## cli: `generateProofs` command failure
11
+
12
+ ### Case: missing `.dat` files
13
+
14
+ If your logs look like the following, then make sure you have `MessageProcessorQv_10-2-1-2_test.dat` and `VoteTallyQv_10-1-2_test.dat` files in the same directory as your zkeys:
15
+
16
+ ```
17
+ node build/ts/index.js generateProofs -x 0xf204a4Ef082f5c04bB89F7D5E6568B796096735a \
18
+ > -sk macisk.49953af3585856f539d194b46c82f4ed54ec508fb9b882940cbe68bbc57e59e \
19
+ > -o 0 \
20
+ > -r ~/rapidsnark/build/prover \
21
+ > -wp ./zkeys/MessageProcessorQv_10-2-1-2_test \
22
+ > -wt ./zkeys/VoteTallyQv_10-1-2_test \
23
+ > -zp ./zkeys/MessageProcessorQv_10-2-1-2_test.0.zkey \
24
+ > -zt ./zkeys/VoteTallyQv_10-1-2_test.0.zkey \
25
+ > -t tally.json \
26
+ > -f proofs
27
+
28
+ fromBlock = 0
29
+ Generating proofs of message processing...
30
+ terminate called after throwing an instance of 'std::system_error'
31
+ what(): open: No such file or directory
32
+ Aborted (core dumped)
33
+
34
+ terminate called after throwing an instance of 'std::system_error'
35
+ what(): open: No such file or directory
36
+ Aborted (core dumped)
37
+
38
+ Error: could not generate proof.
39
+ Error: Error executing ./zkeys/MessageProcessorQv_10-2-1-2_test /tmp/tmp-9904-zG0k8YPTATWB/input.json /tmp/tmp-9904-zG0k8YPTATWB/output.wtns
40
+ at genProof (/home/ubuntu/maci/circuits/ts/index.ts:44:15)
41
+ at /home/ubuntu/maci/cli/ts/generateProofs.ts:339:25
42
+ at step (/home/ubuntu/maci/cli/build/generateProofs.js:33:23)
43
+ at Object.next (/home/ubuntu/maci/cli/build/generateProofs.js:14:53)
44
+ at fulfilled (/home/ubuntu/maci/cli/build/generateProofs.js:5:58)
45
+ ```
46
+
47
+ You can generate the missing `.dat` files using the following command:
48
+
49
+ ```bash
50
+ pnpm build:circuits-c -- --outPath ../cli/zkeys
51
+ ```
52
+
53
+ ## contracts: `prove` command failure
54
+
55
+ ### Case `Commitment mismatch`
56
+
57
+ If your log looks like the following, that's because you have already run the `prove` command. You can access the `cli` and attempt again by executing the `generateProofs` command.
58
+
59
+ ```
60
+ Error: commitment mismatch
61
+ at Prover.validateCommitment (/home/user/Documents/maci/contracts/tasks/helpers/Prover.ts:458:13)
62
+ at Prover.proveTally (/home/user/Documents/maci/contracts/tasks/helpers/Prover.ts:390:12)
63
+ at processTicksAndRejections (node:internal/process/task_queues:95:5)
64
+ at async SimpleTaskDefinition.action (/home/user/Documents/maci/contracts/tasks/runner/prove.ts:235:7)
65
+ at async Environment._runTaskDefinition (/home/user/Documents/maci/node_modules/.pnpm/hardhat@2.22.2_ts-node@10.9.2_typescript@5.4.3/node_modules/hardhat/src/internal/core/runtime-environment.ts:359:14)
66
+ at async Environment.run (/home/user/Documents/maci/node_modules/.pnpm/hardhat@2.22.2_ts-node@10.9.2_typescript@5.4.3/node_modules/hardhat/src/internal/core/runtime-environment.ts:192:14)
67
+ at async main (/home/user/Documents/maci/node_modules/.pnpm/hardhat@2.22.2_ts-node@10.9.2_typescript@5.4.3/node_modules/hardhat/src/internal/cli/cli.ts:323:7)
68
+  ELIFECYCLE  Command failed with exit code 1.
69
+  ELIFECYCLE  Command failed with exit code 1.
70
+ ```
71
+
72
+ This is because commitments are generated using random salts, thus will differ at each `generateProofs` run.
73
+
74
+ In [core/Poll.ts](https://github.com/privacy-scaling-explorations/maci/blob/main/packages/core/ts/Poll.ts):
75
+
76
+ ```
77
+ let newSbSalt = genRandomSalt();
78
+ while (this.sbSalts[this.currentMessageBatchIndex!] === newSbSalt) {
79
+ newSbSalt = genRandomSalt();
80
+ }
81
+ ```
82
+
83
+ ## General Failure
84
+
85
+ ### Case `AssertionError`
86
+
87
+ This could happen when you run `prove` in the `contracts` package, or run `generateProofs` in the `cli` package. If your log looks like the following, there are two possible reasons:
88
+
89
+ 1. If your MACI keypair for the coordinator was generated based on a previous version, it may have been generated incorrectly due to a breaking change in a third-party package (`zk-kit/eddsa-poseidon`). Please generate a new pair and run the whole process again.
90
+ 2. The provided private key is unmatched to the public key which deployed the poll, you will need to input the correct private key.
91
+
92
+ ```
93
+ An unexpected error occurred:
94
+
95
+ AssertionError [ERR_ASSERTION]: false == true
96
+ at genMaciStateFromContract (/home/user/Documents/maci/contracts/ts/genMaciState.ts:156:9)
97
+ at processTicksAndRejections (node:internal/process/task_queues:95:5)
98
+ at async SimpleTaskDefinition.action (/home/user/Documents/maci/contracts/tasks/runner/prove.ts:127:25)
99
+ at async Environment._runTaskDefinition (/home/user/Documents/maci/node_modules/.pnpm/hardhat@2.22.2_ts-node@10.9.2_typescript@5.4.3/node_modules/hardhat/src/internal/core/runtime-environment.ts:359:14)
100
+ at async Environment.run (/home/user/Documents/maci/node_modules/.pnpm/hardhat@2.22.2_ts-node@10.9.2_typescript@5.4.3/node_modules/hardhat/src/internal/core/runtime-environment.ts:192:14)
101
+ at async main (/home/user/Documents/maci/node_modules/.pnpm/hardhat@2.22.2_ts-node@10.9.2_typescript@5.4.3/node_modules/hardhat/src/internal/cli/cli.ts:323:7) {
102
+ generatedMessage: true,
103
+ code: 'ERR_ASSERTION',
104
+ actual: false,
105
+ expected: true,
106
+ operator: '=='
107
+ }
108
+ ```
109
+
110
+ ### Cannot filter non-indexed parameters
111
+
112
+ If you encountered the following error log:
113
+
114
+ ```
115
+ TypeError: cannot filter non-indexed parameters; must be null (argument="contract._messageRoot", value=4658669366154318429589992378027343879410506110087584229116806667655891474709, code=INVALID_ARGUMENT, version=6.11.1)
116
+ at makeError (/home/user/Documents/maci/node_modules/.pnpm/ethers@6.11.1/node_modules/ethers/src.ts/utils/errors.ts:687:21)
117
+ at assert (/home/user/Documents/maci/node_modules/.pnpm/ethers@6.11.1/node_modules/ethers/src.ts/utils/errors.ts:715:25)
118
+ at assertArgument (/home/user/Documents/maci/node_modules/.pnpm/ethers@6.11.1/node_modules/ethers/src.ts/utils/errors.ts:727:5)
119
+ at /home/user/Documents/maci/node_modules/.pnpm/ethers@6.11.1/node_modules/ethers/src.ts/abi/interface.ts:1047:31
120
+ at Array.forEach (<anonymous>)
121
+ at Interface.encodeFilterTopics (/home/user/Documents/maci/node_modules/.pnpm/ethers@6.11.1/node_modules/ethers/src.ts/abi/interface.ts:1042:16)
122
+ at /home/user/Documents/maci/node_modules/.pnpm/ethers@6.11.1/node_modules/ethers/src.ts/contract/contract.ts:108:39
123
+ at processTicksAndRejections (node:internal/process/task_queues:95:5)
124
+ at async getSubInfo (/home/user/Documents/maci/node_modules/.pnpm/ethers@6.11.1/node_modules/ethers/src.ts/contract/contract.ts:502:18)
125
+ at async Proxy.queryFilter (/home/user/Documents/maci/node_modules/.pnpm/ethers@6.11.1/node_modules/ethers/src.ts/contract/contract.ts:938:38) {
126
+ code: 'INVALID_ARGUMENT',
127
+ argument: 'contract._messageRoot',
128
+ value: 4658669366154318429589992378027343879410506110087584229116806667655891474709n,
129
+ shortMessage: 'cannot filter non-indexed parameters; must be null'
130
+ }
131
+ ```
132
+
133
+ This could happen during running `generateProofs` in `cli` package, or running `prove` in `contracts` package.
134
+ Be aware that we updated several parameters to `indexed`:
135
+
136
+ ```javascript
137
+ event MergeMaciStateAqSubRoots(uint256 indexed _numSrQueueOps);
138
+ event MergeMaciStateAq(uint256 indexed _stateRoot, uint256 indexed _numSignups);
139
+ event MergeMessageAqSubRoots(uint256 indexed _numSrQueueOps);
140
+ event MergeMessageAq(uint256 indexed _messageRoot);
141
+ ```
142
+
143
+ Please remember to pull the latest MACI repo updates(`git fetch origin && git pull origin main`) and run `pnpm build` in the root of this monorepo.
144
+
145
+ ### Verifier contract found the proof invalid
146
+
147
+ If your log looks like the following, that's because the zkey and wasm files added to the [`VerifyingKeysRegistry` contract](/docs/technical-references/smart-contracts/VerifyingKeysRegistry) are different from what you use to run the **prove** command. Check if you're using the correct zkey and wasm files.
148
+
149
+ ```
150
+ Error: The verifier contract found the proof invalid.
151
+ at Prover.proveMessageProcessing (/home/user/Documents/maci/contracts/tasks/helpers/Prover.ts:215:15)
152
+ at processTicksAndRejections (node:internal/process/task_queues:95:5)
153
+ at async SimpleTaskDefinition.action (/home/user/Documents/maci/contracts/tasks/runner/prove.ts:185:7)
154
+ at async Environment._runTaskDefinition (/home/user/Documents/maci/node_modules/.pnpm/hardhat@2.22.2_ts-node@10.9.2_typescript@5.4.4/node_modules/hardhat/src/internal/core/runtime-environment.ts:359:14)
155
+ at async Environment.run (/home/user/Documents/maci/node_modules/.pnpm/hardhat@2.22.2_ts-node@10.9.2_typescript@5.4.4/node_modules/hardhat/src/internal/core/runtime-environment.ts:192:14)
156
+ at async main (/home/user/Documents/maci/node_modules/.pnpm/hardhat@2.22.2_ts-node@10.9.2_typescript@5.4.4/node_modules/hardhat/src/internal/cli/cli.ts:323:7)
157
+ ```
158
+
159
+ ### The on-chain verification of total spent voice credits failed
160
+
161
+ If you ran the `verify` command and got this error, please ensure consistency in your use of quadratic voting throughout interactions with MACI, including poll deployment, proof generation, and verification.
162
+
163
+ ### Proof generation process is killed
164
+
165
+ If your terminal output ends like this:
166
+
167
+ ```
168
+ [i] Starting to fetch logs from block 8386826
169
+ [i] Generating proofs of message processing...
170
+ [i] Progress: 1 / 1
171
+ [i] Wait until proof generation is finished
172
+ Killed
173
+ ELIFECYCLE  Command failed with exit code 137.
174
+ ```
175
+
176
+ This typically indicates the proof generation process was terminated due to exceeding the system's available memory limit (exit code `137` = SIGKILL by the OS, often due to OOM).
177
+
178
+ Increase Node.js' memory allocation by setting the `NODE_OPTIONS` environment variable before running the command:
179
+
180
+ ```bash
181
+ export NODE_OPTIONS="--max-old-space-size=4096"
182
+ # You can increase the value further (e.g., 8192 for 8GB) if your system has enough RAM:
183
+ export NODE_OPTIONS="--max-old-space-size=8192"
184
+ ```
185
+
186
+ ### Error: Not enough or too many values for input signals
187
+
188
+ If you see errors like:
189
+
190
+ ```
191
+ Error: Not enough values for input signal currentVoteWeightsPathElements
192
+ at /home/maci/node_modules/.pnpm/circom_runtime@0.1.28/node_modules/circom_runtime/build/main.cjs:513:27
193
+ ...
194
+ ```
195
+
196
+ ```
197
+ Error: Too many values for input signal ballots
198
+ at /home/maci/node_modules/.pnpm/circom_runtime@0.1.28/node_modules/circom_runtime/build/main.cjs:513:27
199
+ ...
200
+ ```
201
+
202
+ This usually happens when the Merkle tree depth configured in your MACI deployment does not match the depth expected by the zkey files used during proof generation.
203
+ To solve this:
204
+
205
+ - Download the correct zkey files from a trusted source.
206
+ - Verify that the `stateTreeDepth`, `messageTreeDepth`, and `voteOptionTreeDepth` used in your CLI or config match the values used to generate those zkey files.