@maci-protocol/website 0.0.0-ci.1e276ed

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 (415) hide show
  1. package/.eslintrc.js +157 -0
  2. package/CHANGELOG.md +566 -0
  3. package/LICENSE +22 -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/assets/MACI_Bob_SignUp_1.png +0 -0
  27. package/blog/assets/MACI_Bob_SignUp_2.png +0 -0
  28. package/blog/assets/MACI_Complex_Message.png +0 -0
  29. package/blog/assets/MACI_Contracts.png +0 -0
  30. package/blog/assets/MACI_Sign_Up.png +0 -0
  31. package/blog/assets/MACI_Simple_Message.png +0 -0
  32. package/blog/assets/MACI_Verifier_1.png +0 -0
  33. package/blog/authors.yml +5 -0
  34. package/docusaurus.config.ts +213 -0
  35. package/package.json +65 -0
  36. package/src/components/ActionCard/index.tsx +30 -0
  37. package/src/components/ActionCard/styles.module.css +96 -0
  38. package/src/components/HomepageFeatures/index.tsx +91 -0
  39. package/src/components/HomepageFeatures/styles.module.css +17 -0
  40. package/src/components/ProjectCard/index.tsx +74 -0
  41. package/src/components/ProjectCard/styles.module.css +77 -0
  42. package/src/components/ProjectList/index.tsx +218 -0
  43. package/src/components/ProjectList/styles.module.css +180 -0
  44. package/src/content/projects.json +294 -0
  45. package/src/css/card.module.css +130 -0
  46. package/src/css/custom.css +91 -0
  47. package/src/icons/IconDiscord.tsx +16 -0
  48. package/src/icons/IconGithub.tsx +16 -0
  49. package/src/icons/IconWebsite.tsx +16 -0
  50. package/src/pages/blogs.tsx +58 -0
  51. package/src/pages/index.module.css +152 -0
  52. package/src/pages/index.tsx +66 -0
  53. package/src/pages/projects.tsx +44 -0
  54. package/src/pages/roadmap.md +150 -0
  55. package/src/pages/typedoc.tsx +11 -0
  56. package/src/plugins/blog-plugin/index.ts +86 -0
  57. package/src/react-app-env.d.ts +1 -0
  58. package/src/scripts/setupSolidityDocs.ts +67 -0
  59. package/src/scripts/setupTypedoc.ts +112 -0
  60. package/src/scripts/utils.ts +115 -0
  61. package/src/utils/getProjectsByFilter.ts +40 -0
  62. package/static/.nojekyll +0 -0
  63. package/static/audit_reports/20210922_Hashcloak_audit_report.pdf +0 -0
  64. package/static/audit_reports/202220930_Hashcloak_audit_report.pdf +0 -0
  65. package/static/audit_reports/20240223_PSE_Audit_audit_report.pdf +0 -0
  66. package/static/audit_reports/20240731_PSE_Audit_audit_report.pdf +0 -0
  67. package/static/fonts/DM_Sans.woff2 +0 -0
  68. package/static/fonts/Share_Tech_Mono.woff2 +0 -0
  69. package/static/img/box.png +0 -0
  70. package/static/img/box_dark.png +0 -0
  71. package/static/img/chain.png +0 -0
  72. package/static/img/chain_dark.png +0 -0
  73. package/static/img/chart.png +0 -0
  74. package/static/img/chart_dark.png +0 -0
  75. package/static/img/circuits/MACI-Circuits.excalidraw +39652 -0
  76. package/static/img/circuits/calculateTotal.svg +21 -0
  77. package/static/img/circuits/ecdh.svg +21 -0
  78. package/static/img/circuits/messageToCommand.svg +21 -0
  79. package/static/img/circuits/messageValidator.svg +21 -0
  80. package/static/img/circuits/poseidonHasher13.svg +21 -0
  81. package/static/img/circuits/privToPubkey.svg +21 -0
  82. package/static/img/circuits/processMessages.svg +21 -0
  83. package/static/img/circuits/processMessagesInputHasher.svg +21 -0
  84. package/static/img/circuits/processMessages_2_0.svg +21 -0
  85. package/static/img/circuits/processOne.svg +21 -0
  86. package/static/img/circuits/processTopup.svg +21 -0
  87. package/static/img/circuits/processingAfterPollEnds.svg +21 -0
  88. package/static/img/circuits/quinBatchLeavesExists.svg +21 -0
  89. package/static/img/circuits/quinCheckRoot.svg +21 -0
  90. package/static/img/circuits/quinGeneratePathIndices.svg +21 -0
  91. package/static/img/circuits/quinSelector.svg +21 -0
  92. package/static/img/circuits/resultsCommitmentVerifier.svg +21 -0
  93. package/static/img/circuits/splicer.svg +21 -0
  94. package/static/img/circuits/tallyInputHasher.svg +21 -0
  95. package/static/img/circuits/tallyVotes.svg +21 -0
  96. package/static/img/circuits/unpackElement.svg +21 -0
  97. package/static/img/circuits/verifySignature.svg +21 -0
  98. package/static/img/completingAPoll.svg +4 -0
  99. package/static/img/contracts.svg +16 -0
  100. package/static/img/coordinatorComponents.svg +21 -0
  101. package/static/img/favicon.ico +0 -0
  102. package/static/img/generateProofs.svg +4 -0
  103. package/static/img/hero.svg +9 -0
  104. package/static/img/maci-card.png +0 -0
  105. package/static/img/maci-rpgf-design.jpg +0 -0
  106. package/static/img/messageProcessingLocal.svg +21 -0
  107. package/static/img/offlineProcessing.svg +21 -0
  108. package/static/img/pse-logo-round.png +0 -0
  109. package/static/img/relayer-diagram.png +0 -0
  110. package/static/img/tallyCommitments.svg +4 -0
  111. package/static/img/voteTallyingLocal.svg +21 -0
  112. package/tsconfig.json +34 -0
  113. package/versioned_docs/version-v0.x/circuits.md +22 -0
  114. package/versioned_docs/version-v0.x/contract.md +186 -0
  115. package/versioned_docs/version-v0.x/faq.md +67 -0
  116. package/versioned_docs/version-v0.x/introduction.md +119 -0
  117. package/versioned_docs/version-v0.x/quadratic-vote-tallying-circuit.md +138 -0
  118. package/versioned_docs/version-v0.x/state-root-transition-circuit.md +230 -0
  119. package/versioned_docs/version-v1.2/audit.md +160 -0
  120. package/versioned_docs/version-v1.2/ci-pipeline.md +38 -0
  121. package/versioned_docs/version-v1.2/circuits.md +508 -0
  122. package/versioned_docs/version-v1.2/cli.md +689 -0
  123. package/versioned_docs/version-v1.2/contracts.md +445 -0
  124. package/versioned_docs/version-v1.2/contributing/code-of-conduct.md +91 -0
  125. package/versioned_docs/version-v1.2/contributing/contributing.md +129 -0
  126. package/versioned_docs/version-v1.2/coordinator-processing.md +46 -0
  127. package/versioned_docs/version-v1.2/deployment.md +122 -0
  128. package/versioned_docs/version-v1.2/installation.md +175 -0
  129. package/versioned_docs/version-v1.2/integrating.md +200 -0
  130. package/versioned_docs/version-v1.2/introduction.md +94 -0
  131. package/versioned_docs/version-v1.2/key-change.md +182 -0
  132. package/versioned_docs/version-v1.2/overview.md +47 -0
  133. package/versioned_docs/version-v1.2/poll-types.md +68 -0
  134. package/versioned_docs/version-v1.2/primitives.md +216 -0
  135. package/versioned_docs/version-v1.2/project-ideas.md +14 -0
  136. package/versioned_docs/version-v1.2/purpose.md +62 -0
  137. package/versioned_docs/version-v1.2/solidity-docs/MACI.md +345 -0
  138. package/versioned_docs/version-v1.2/solidity-docs/MessageProcessor.md +266 -0
  139. package/versioned_docs/version-v1.2/solidity-docs/MessageProcessorFactory.md +26 -0
  140. package/versioned_docs/version-v1.2/solidity-docs/Poll.md +381 -0
  141. package/versioned_docs/version-v1.2/solidity-docs/PollFactory.md +50 -0
  142. package/versioned_docs/version-v1.2/solidity-docs/SignUpToken.md +27 -0
  143. package/versioned_docs/version-v1.2/solidity-docs/Subsidy.md +218 -0
  144. package/versioned_docs/version-v1.2/solidity-docs/SubsidyFactory.md +27 -0
  145. package/versioned_docs/version-v1.2/solidity-docs/Tally.md +311 -0
  146. package/versioned_docs/version-v1.2/solidity-docs/TallyFactory.md +27 -0
  147. package/versioned_docs/version-v1.2/solidity-docs/TallyNonQv.md +296 -0
  148. package/versioned_docs/version-v1.2/solidity-docs/TallyNonQvFactory.md +27 -0
  149. package/versioned_docs/version-v1.2/solidity-docs/TopupCredit.md +61 -0
  150. package/versioned_docs/version-v1.2/solidity-docs/VkRegistry.md +457 -0
  151. package/versioned_docs/version-v1.2/solidity-docs/benchmarks/HasherBenchmarks.md +44 -0
  152. package/versioned_docs/version-v1.2/solidity-docs/crypto/Hasher.md +125 -0
  153. package/versioned_docs/version-v1.2/solidity-docs/crypto/IVerifier.md +11 -0
  154. package/versioned_docs/version-v1.2/solidity-docs/crypto/MockVerifier.md +17 -0
  155. package/versioned_docs/version-v1.2/solidity-docs/crypto/Pairing.md +85 -0
  156. package/versioned_docs/version-v1.2/solidity-docs/crypto/PoseidonT3.md +9 -0
  157. package/versioned_docs/version-v1.2/solidity-docs/crypto/PoseidonT4.md +9 -0
  158. package/versioned_docs/version-v1.2/solidity-docs/crypto/PoseidonT5.md +9 -0
  159. package/versioned_docs/version-v1.2/solidity-docs/crypto/PoseidonT6.md +9 -0
  160. package/versioned_docs/version-v1.2/solidity-docs/crypto/SnarkCommon.md +16 -0
  161. package/versioned_docs/version-v1.2/solidity-docs/crypto/SnarkConstants.md +40 -0
  162. package/versioned_docs/version-v1.2/solidity-docs/crypto/Verifier.md +61 -0
  163. package/versioned_docs/version-v1.2/solidity-docs/gatekeepers/EASGatekeeper.md +121 -0
  164. package/versioned_docs/version-v1.2/solidity-docs/gatekeepers/FreeForAllSignUpGatekeeper.md +40 -0
  165. package/versioned_docs/version-v1.2/solidity-docs/gatekeepers/SignUpGatekeeper.md +26 -0
  166. package/versioned_docs/version-v1.2/solidity-docs/gatekeepers/SignUpTokenGatekeeper.md +93 -0
  167. package/versioned_docs/version-v1.2/solidity-docs/gatekeepers/hatsGatekeepers/HatsGatekeeperBase.md +79 -0
  168. package/versioned_docs/version-v1.2/solidity-docs/gatekeepers/hatsGatekeepers/HatsGatekeeperMultiple.md +48 -0
  169. package/versioned_docs/version-v1.2/solidity-docs/gatekeepers/hatsGatekeepers/HatsGatekeeperSingle.md +42 -0
  170. package/versioned_docs/version-v1.2/solidity-docs/index.md +4 -0
  171. package/versioned_docs/version-v1.2/solidity-docs/initialVoiceCreditProxy/ConstantInitialVoiceCreditProxy.md +40 -0
  172. package/versioned_docs/version-v1.2/solidity-docs/initialVoiceCreditProxy/InitialVoiceCreditProxy.md +26 -0
  173. package/versioned_docs/version-v1.2/solidity-docs/interfaces/IEAS.md +40 -0
  174. package/versioned_docs/version-v1.2/solidity-docs/interfaces/IHats.md +103 -0
  175. package/versioned_docs/version-v1.2/solidity-docs/interfaces/IMPFactory.md +26 -0
  176. package/versioned_docs/version-v1.2/solidity-docs/interfaces/IMessageProcessor.md +31 -0
  177. package/versioned_docs/version-v1.2/solidity-docs/interfaces/IPoll.md +217 -0
  178. package/versioned_docs/version-v1.2/solidity-docs/interfaces/IPollFactory.md +29 -0
  179. package/versioned_docs/version-v1.2/solidity-docs/interfaces/ITallyFactory.md +28 -0
  180. package/versioned_docs/version-v1.2/solidity-docs/interfaces/ITallySubsidyFactory.md +27 -0
  181. package/versioned_docs/version-v1.2/solidity-docs/interfaces/IVerifier.md +25 -0
  182. package/versioned_docs/version-v1.2/solidity-docs/interfaces/IVkRegistry.md +70 -0
  183. package/versioned_docs/version-v1.2/solidity-docs/mocks/MockHatsProtocol.md +133 -0
  184. package/versioned_docs/version-v1.2/solidity-docs/trees/AccQueue.md +464 -0
  185. package/versioned_docs/version-v1.2/solidity-docs/trees/AccQueueBinary.md +60 -0
  186. package/versioned_docs/version-v1.2/solidity-docs/trees/AccQueueBinary0.md +40 -0
  187. package/versioned_docs/version-v1.2/solidity-docs/trees/AccQueueBinaryMaci.md +34 -0
  188. package/versioned_docs/version-v1.2/solidity-docs/trees/AccQueueQuinary.md +75 -0
  189. package/versioned_docs/version-v1.2/solidity-docs/trees/AccQueueQuinary0.md +40 -0
  190. package/versioned_docs/version-v1.2/solidity-docs/trees/AccQueueQuinaryBlankSl.md +40 -0
  191. package/versioned_docs/version-v1.2/solidity-docs/trees/AccQueueQuinaryMaci.md +40 -0
  192. package/versioned_docs/version-v1.2/solidity-docs/trees/EmptyBallotRoots.md +13 -0
  193. package/versioned_docs/version-v1.2/solidity-docs/utilities/CommonUtilities.md +25 -0
  194. package/versioned_docs/version-v1.2/solidity-docs/utilities/DomainObjs.md +40 -0
  195. package/versioned_docs/version-v1.2/solidity-docs/utilities/Params.md +36 -0
  196. package/versioned_docs/version-v1.2/solidity-docs/utilities/Utilities.md +79 -0
  197. package/versioned_docs/version-v1.2/spec.md +944 -0
  198. package/versioned_docs/version-v1.2/testing-in-detail.md +209 -0
  199. package/versioned_docs/version-v1.2/testing.md +472 -0
  200. package/versioned_docs/version-v1.2/topup.md +43 -0
  201. package/versioned_docs/version-v1.2/troubleshooting.md +51 -0
  202. package/versioned_docs/version-v1.2/trusted-setup.md +76 -0
  203. package/versioned_docs/version-v1.2/typedoc/cli/.nojekyll +1 -0
  204. package/versioned_docs/version-v1.2/typedoc/cli/index.md +15 -0
  205. package/versioned_docs/version-v1.2/typedoc/cli/interfaces/AirdropArgs.md +89 -0
  206. package/versioned_docs/version-v1.2/typedoc/cli/interfaces/DeployArgs.md +154 -0
  207. package/versioned_docs/version-v1.2/typedoc/cli/interfaces/DeployPollArgs.md +154 -0
  208. package/versioned_docs/version-v1.2/typedoc/cli/interfaces/DeployedContracts.md +130 -0
  209. package/versioned_docs/version-v1.2/typedoc/cli/interfaces/GenLocalStateArgs.md +168 -0
  210. package/versioned_docs/version-v1.2/typedoc/cli/interfaces/GenProofsArgs.md +388 -0
  211. package/versioned_docs/version-v1.2/typedoc/cli/interfaces/IGenKeypairArgs.md +37 -0
  212. package/versioned_docs/version-v1.2/typedoc/cli/interfaces/IRegisteredUserArgs.md +63 -0
  213. package/versioned_docs/version-v1.2/typedoc/cli/interfaces/MergeMessagesArgs.md +76 -0
  214. package/versioned_docs/version-v1.2/typedoc/cli/interfaces/MergeSignupsArgs.md +76 -0
  215. package/versioned_docs/version-v1.2/typedoc/cli/interfaces/PollContracts.md +53 -0
  216. package/versioned_docs/version-v1.2/typedoc/cli/interfaces/ProveOnChainArgs.md +128 -0
  217. package/versioned_docs/version-v1.2/typedoc/cli/interfaces/PublishArgs.md +154 -0
  218. package/versioned_docs/version-v1.2/typedoc/cli/interfaces/SignupArgs.md +89 -0
  219. package/versioned_docs/version-v1.2/typedoc/cli/interfaces/SubsidyData.md +73 -0
  220. package/versioned_docs/version-v1.2/typedoc/cli/interfaces/TallyData.md +166 -0
  221. package/versioned_docs/version-v1.2/typedoc/cli/interfaces/TopupArgs.md +89 -0
  222. package/versioned_docs/version-v1.2/typedoc/cli/interfaces/VerifyArgs.md +128 -0
  223. package/versioned_docs/version-v1.2/typedoc/cli/modules.md +556 -0
  224. package/versioned_docs/version-v1.2/typedoc/core/.nojekyll +1 -0
  225. package/versioned_docs/version-v1.2/typedoc/core/classes/MaciState.md +295 -0
  226. package/versioned_docs/version-v1.2/typedoc/core/classes/Poll.md +1098 -0
  227. package/versioned_docs/version-v1.2/typedoc/core/index.md +110 -0
  228. package/versioned_docs/version-v1.2/typedoc/core/interfaces/BatchSizes.md +50 -0
  229. package/versioned_docs/version-v1.2/typedoc/core/interfaces/IJsonMaciState.md +77 -0
  230. package/versioned_docs/version-v1.2/typedoc/core/interfaces/IProcessMessagesCircuitInputs.md +242 -0
  231. package/versioned_docs/version-v1.2/typedoc/core/interfaces/ISubsidyCircuitInputs.md +198 -0
  232. package/versioned_docs/version-v1.2/typedoc/core/interfaces/ITallyCircuitInputs.md +231 -0
  233. package/versioned_docs/version-v1.2/typedoc/core/interfaces/MaxValues.md +37 -0
  234. package/versioned_docs/version-v1.2/typedoc/core/interfaces/TreeDepths.md +63 -0
  235. package/versioned_docs/version-v1.2/typedoc/core/modules.md +289 -0
  236. package/versioned_docs/version-v1.2/typedoc/crypto/.nojekyll +1 -0
  237. package/versioned_docs/version-v1.2/typedoc/crypto/classes/AccQueue.md +770 -0
  238. package/versioned_docs/version-v1.2/typedoc/crypto/classes/G1Point.md +115 -0
  239. package/versioned_docs/version-v1.2/typedoc/crypto/classes/G2Point.md +140 -0
  240. package/versioned_docs/version-v1.2/typedoc/crypto/classes/IncrementalQuinTree.md +470 -0
  241. package/versioned_docs/version-v1.2/typedoc/crypto/index.md +44 -0
  242. package/versioned_docs/version-v1.2/typedoc/crypto/interfaces/Keypair.md +33 -0
  243. package/versioned_docs/version-v1.2/typedoc/crypto/interfaces/PoseidonFuncs.md +115 -0
  244. package/versioned_docs/version-v1.2/typedoc/crypto/interfaces/Queue.md +33 -0
  245. package/versioned_docs/version-v1.2/typedoc/crypto/interfaces/Signature.md +37 -0
  246. package/versioned_docs/version-v1.2/typedoc/crypto/modules.md +913 -0
  247. package/versioned_docs/version-v1.2/typedoc/domainobjs/.nojekyll +1 -0
  248. package/versioned_docs/version-v1.2/typedoc/domainobjs/classes/Ballot.md +274 -0
  249. package/versioned_docs/version-v1.2/typedoc/domainobjs/classes/Keypair.md +181 -0
  250. package/versioned_docs/version-v1.2/typedoc/domainobjs/classes/Message.md +244 -0
  251. package/versioned_docs/version-v1.2/typedoc/domainobjs/classes/PCommand.md +409 -0
  252. package/versioned_docs/version-v1.2/typedoc/domainobjs/classes/PrivKey.md +206 -0
  253. package/versioned_docs/version-v1.2/typedoc/domainobjs/classes/PubKey.md +289 -0
  254. package/versioned_docs/version-v1.2/typedoc/domainobjs/classes/StateLeaf.md +340 -0
  255. package/versioned_docs/version-v1.2/typedoc/domainobjs/classes/TCommand.md +200 -0
  256. package/versioned_docs/version-v1.2/typedoc/domainobjs/classes/VerifyingKey.md +240 -0
  257. package/versioned_docs/version-v1.2/typedoc/domainobjs/index.md +81 -0
  258. package/versioned_docs/version-v1.2/typedoc/domainobjs/interfaces/ICommand.md +104 -0
  259. package/versioned_docs/version-v1.2/typedoc/domainobjs/interfaces/IG1ContractParams.md +31 -0
  260. package/versioned_docs/version-v1.2/typedoc/domainobjs/interfaces/IG2ContractParams.md +31 -0
  261. package/versioned_docs/version-v1.2/typedoc/domainobjs/interfaces/IJsonBallot.md +42 -0
  262. package/versioned_docs/version-v1.2/typedoc/domainobjs/interfaces/IJsonCommand.md +32 -0
  263. package/versioned_docs/version-v1.2/typedoc/domainobjs/interfaces/IJsonKeyPair.md +31 -0
  264. package/versioned_docs/version-v1.2/typedoc/domainobjs/interfaces/IJsonPCommand.md +111 -0
  265. package/versioned_docs/version-v1.2/typedoc/domainobjs/interfaces/IJsonStateLeaf.md +42 -0
  266. package/versioned_docs/version-v1.2/typedoc/domainobjs/interfaces/IJsonTCommand.md +67 -0
  267. package/versioned_docs/version-v1.2/typedoc/domainobjs/interfaces/IMessageContractParams.md +31 -0
  268. package/versioned_docs/version-v1.2/typedoc/domainobjs/interfaces/IStateLeaf.md +39 -0
  269. package/versioned_docs/version-v1.2/typedoc/domainobjs/interfaces/IStateLeafContractParams.md +42 -0
  270. package/versioned_docs/version-v1.2/typedoc/domainobjs/interfaces/IVkContractParams.md +64 -0
  271. package/versioned_docs/version-v1.2/typedoc/domainobjs/interfaces/IVkObjectParams.md +108 -0
  272. package/versioned_docs/version-v1.2/typedoc/domainobjs/interfaces/Proof.md +46 -0
  273. package/versioned_docs/version-v1.2/typedoc/domainobjs/interfaces/VoteOptionTreeLeaf.md +24 -0
  274. package/versioned_docs/version-v1.2/typedoc/domainobjs/modules.md +110 -0
  275. package/versioned_docs/version-v1.2/typedoc/index.md +4 -0
  276. package/versioned_docs/version-v1.2/versioning.md +94 -0
  277. package/versioned_docs/version-v1.2/workflow.md +142 -0
  278. package/versioned_docs/version-v2.x/case-studies.md +35 -0
  279. package/versioned_docs/version-v2.x/contributing/_category_.json +4 -0
  280. package/versioned_docs/version-v2.x/contributing/code-of-conduct.md +92 -0
  281. package/versioned_docs/version-v2.x/contributing/contributing.md +149 -0
  282. package/versioned_docs/version-v2.x/contributing/project-ideas.md +78 -0
  283. package/versioned_docs/version-v2.x/core-concepts/_category_.json +4 -0
  284. package/versioned_docs/version-v2.x/core-concepts/ballot.md +19 -0
  285. package/versioned_docs/version-v2.x/core-concepts/coordinator-processing.md +46 -0
  286. package/versioned_docs/version-v2.x/core-concepts/hashing-and-encryption.md +45 -0
  287. package/versioned_docs/version-v2.x/core-concepts/key-change.md +179 -0
  288. package/versioned_docs/version-v2.x/core-concepts/maci-keys.md +84 -0
  289. package/versioned_docs/version-v2.x/core-concepts/maci-messages.md +44 -0
  290. package/versioned_docs/version-v2.x/core-concepts/merkle-trees.md +23 -0
  291. package/versioned_docs/version-v2.x/core-concepts/poll-types.md +106 -0
  292. package/versioned_docs/version-v2.x/core-concepts/spec.md +883 -0
  293. package/versioned_docs/version-v2.x/core-concepts/state-leaf.md +42 -0
  294. package/versioned_docs/version-v2.x/core-concepts/workflow.md +142 -0
  295. package/versioned_docs/version-v2.x/getting-started.md +313 -0
  296. package/versioned_docs/version-v2.x/guides/_category_.json +4 -0
  297. package/versioned_docs/version-v2.x/guides/compile-circuits.md +163 -0
  298. package/versioned_docs/version-v2.x/guides/frontend.md +99 -0
  299. package/versioned_docs/version-v2.x/guides/integrating.md +73 -0
  300. package/versioned_docs/version-v2.x/guides/maciWrapper.md +173 -0
  301. package/versioned_docs/version-v2.x/guides/subgraph.md +79 -0
  302. package/versioned_docs/version-v2.x/guides/testing/_category_.json +4 -0
  303. package/versioned_docs/version-v2.x/guides/testing/testing-in-detail.md +203 -0
  304. package/versioned_docs/version-v2.x/guides/testing/testing.md +163 -0
  305. package/versioned_docs/version-v2.x/guides/troubleshooting.md +161 -0
  306. package/versioned_docs/version-v2.x/introduction.md +146 -0
  307. package/versioned_docs/version-v2.x/processes/_category_.json +4 -0
  308. package/versioned_docs/version-v2.x/processes/ci-pipeline.md +38 -0
  309. package/versioned_docs/version-v2.x/processes/versioning.md +94 -0
  310. package/versioned_docs/version-v2.x/resources.md +33 -0
  311. package/versioned_docs/version-v2.x/security/_category_.json +4 -0
  312. package/versioned_docs/version-v2.x/security/audit.md +167 -0
  313. package/versioned_docs/version-v2.x/security/trusted-setup.md +166 -0
  314. package/versioned_docs/version-v2.x/supported-networks/_category_.json +4 -0
  315. package/versioned_docs/version-v2.x/supported-networks/deployed-contracts.md +1108 -0
  316. package/versioned_docs/version-v2.x/supported-networks/supported-networks.md +47 -0
  317. package/versioned_docs/version-v2.x/technical-references/_category_.json +4 -0
  318. package/versioned_docs/version-v2.x/technical-references/smart-contracts/AccQueue.md +21 -0
  319. package/versioned_docs/version-v2.x/technical-references/smart-contracts/Gatekeepers.md +40 -0
  320. package/versioned_docs/version-v2.x/technical-references/smart-contracts/MACI.md +152 -0
  321. package/versioned_docs/version-v2.x/technical-references/smart-contracts/MessageProcessor.md +13 -0
  322. package/versioned_docs/version-v2.x/technical-references/smart-contracts/Params.md +32 -0
  323. package/versioned_docs/version-v2.x/technical-references/smart-contracts/Poll.md +104 -0
  324. package/versioned_docs/version-v2.x/technical-references/smart-contracts/PollFactory.md +43 -0
  325. package/versioned_docs/version-v2.x/technical-references/smart-contracts/Tally.md +45 -0
  326. package/versioned_docs/version-v2.x/technical-references/smart-contracts/VkRegistry.md +57 -0
  327. package/versioned_docs/version-v2.x/technical-references/smart-contracts/VoiceCreditProxy.md +18 -0
  328. package/versioned_docs/version-v2.x/technical-references/smart-contracts/_category_.json +8 -0
  329. package/versioned_docs/version-v2.x/technical-references/technical-references.md +47 -0
  330. package/versioned_docs/version-v2.x/technical-references/typescript-code/_category_.json +4 -0
  331. package/versioned_docs/version-v2.x/technical-references/typescript-code/cli.md +699 -0
  332. package/versioned_docs/version-v2.x/technical-references/zk-snark-circuits/_category_.json +4 -0
  333. package/versioned_docs/version-v2.x/technical-references/zk-snark-circuits/processMessages.md +107 -0
  334. package/versioned_docs/version-v2.x/technical-references/zk-snark-circuits/setup.md +101 -0
  335. package/versioned_docs/version-v2.x/technical-references/zk-snark-circuits/tallyVotes.md +79 -0
  336. package/versioned_docs/version-v2.x/technical-references/zk-snark-circuits/utilities.md +131 -0
  337. package/versioned_docs/version-v2.x/technical-references/zk-snark-circuits/zk-snark-circuits.md +37 -0
  338. package/versioned_docs/version-v2.x/use-cases/_category_.json +4 -0
  339. package/versioned_docs/version-v2.x/use-cases/governance.md +18 -0
  340. package/versioned_docs/version-v2.x/use-cases/polling.md +10 -0
  341. package/versioned_docs/version-v2.x/use-cases/public-goods.md +65 -0
  342. package/versioned_docs/version-v3.x/case-studies.md +35 -0
  343. package/versioned_docs/version-v3.x/contributing/_category_.json +4 -0
  344. package/versioned_docs/version-v3.x/contributing/code-of-conduct.md +92 -0
  345. package/versioned_docs/version-v3.x/contributing/contributing.md +149 -0
  346. package/versioned_docs/version-v3.x/contributing/project-ideas.md +78 -0
  347. package/versioned_docs/version-v3.x/core-concepts/_category_.json +4 -0
  348. package/versioned_docs/version-v3.x/core-concepts/ballot.md +19 -0
  349. package/versioned_docs/version-v3.x/core-concepts/coordinator-processing.md +46 -0
  350. package/versioned_docs/version-v3.x/core-concepts/coordinator-service.md +16 -0
  351. package/versioned_docs/version-v3.x/core-concepts/hashing-and-encryption.md +45 -0
  352. package/versioned_docs/version-v3.x/core-concepts/key-change.md +179 -0
  353. package/versioned_docs/version-v3.x/core-concepts/maci-keys.md +84 -0
  354. package/versioned_docs/version-v3.x/core-concepts/maci-messages.md +44 -0
  355. package/versioned_docs/version-v3.x/core-concepts/merkle-trees.md +16 -0
  356. package/versioned_docs/version-v3.x/core-concepts/offchain-voting.md +14 -0
  357. package/versioned_docs/version-v3.x/core-concepts/poll-types.md +58 -0
  358. package/versioned_docs/version-v3.x/core-concepts/polls.md +81 -0
  359. package/versioned_docs/version-v3.x/core-concepts/spec.md +883 -0
  360. package/versioned_docs/version-v3.x/core-concepts/state-leaf.md +42 -0
  361. package/versioned_docs/version-v3.x/core-concepts/workflow.md +149 -0
  362. package/versioned_docs/version-v3.x/guides/_category_.json +4 -0
  363. package/versioned_docs/version-v3.x/guides/compile-circuits.md +175 -0
  364. package/versioned_docs/version-v3.x/guides/integrating.md +137 -0
  365. package/versioned_docs/version-v3.x/guides/subgraph.md +79 -0
  366. package/versioned_docs/version-v3.x/guides/testing/_category_.json +4 -0
  367. package/versioned_docs/version-v3.x/guides/testing/testing-in-detail.md +191 -0
  368. package/versioned_docs/version-v3.x/guides/testing/testing-introduction.md +158 -0
  369. package/versioned_docs/version-v3.x/guides/troubleshooting.md +161 -0
  370. package/versioned_docs/version-v3.x/introduction.md +153 -0
  371. package/versioned_docs/version-v3.x/processes/_category_.json +4 -0
  372. package/versioned_docs/version-v3.x/processes/ci-pipeline.md +38 -0
  373. package/versioned_docs/version-v3.x/processes/versioning.md +94 -0
  374. package/versioned_docs/version-v3.x/quick-start.md +318 -0
  375. package/versioned_docs/version-v3.x/resources.md +33 -0
  376. package/versioned_docs/version-v3.x/security/_category_.json +4 -0
  377. package/versioned_docs/version-v3.x/security/audit.md +167 -0
  378. package/versioned_docs/version-v3.x/security/trusted-setup.md +172 -0
  379. package/versioned_docs/version-v3.x/supported-networks/_category_.json +4 -0
  380. package/versioned_docs/version-v3.x/supported-networks/deployed-contracts.md +112 -0
  381. package/versioned_docs/version-v3.x/supported-networks/supported-networks.md +53 -0
  382. package/versioned_docs/version-v3.x/technical-references/_category_.json +4 -0
  383. package/versioned_docs/version-v3.x/technical-references/coordinator-service/_category_.json +8 -0
  384. package/versioned_docs/version-v3.x/technical-references/coordinator-service/index.md +10 -0
  385. package/versioned_docs/version-v3.x/technical-references/coordinator-service/installation.md +43 -0
  386. package/versioned_docs/version-v3.x/technical-references/offchain-relayer/_category_.json +8 -0
  387. package/versioned_docs/version-v3.x/technical-references/offchain-relayer/index.md +51 -0
  388. package/versioned_docs/version-v3.x/technical-references/offchain-relayer/installation.md +109 -0
  389. package/versioned_docs/version-v3.x/technical-references/smart-contracts/MACI.md +160 -0
  390. package/versioned_docs/version-v3.x/technical-references/smart-contracts/MessageProcessor.md +13 -0
  391. package/versioned_docs/version-v3.x/technical-references/smart-contracts/Params.md +33 -0
  392. package/versioned_docs/version-v3.x/technical-references/smart-contracts/Policies.md +39 -0
  393. package/versioned_docs/version-v3.x/technical-references/smart-contracts/Poll.md +170 -0
  394. package/versioned_docs/version-v3.x/technical-references/smart-contracts/PollFactory.md +33 -0
  395. package/versioned_docs/version-v3.x/technical-references/smart-contracts/Tally.md +43 -0
  396. package/versioned_docs/version-v3.x/technical-references/smart-contracts/VkRegistry.md +62 -0
  397. package/versioned_docs/version-v3.x/technical-references/smart-contracts/VoiceCreditProxy.md +18 -0
  398. package/versioned_docs/version-v3.x/technical-references/smart-contracts/_category_.json +8 -0
  399. package/versioned_docs/version-v3.x/technical-references/technical-references.md +48 -0
  400. package/versioned_docs/version-v3.x/technical-references/zk-snark-circuits/_category_.json +4 -0
  401. package/versioned_docs/version-v3.x/technical-references/zk-snark-circuits/joinPoll.md +53 -0
  402. package/versioned_docs/version-v3.x/technical-references/zk-snark-circuits/processMessages.md +106 -0
  403. package/versioned_docs/version-v3.x/technical-references/zk-snark-circuits/setup.md +96 -0
  404. package/versioned_docs/version-v3.x/technical-references/zk-snark-circuits/tallyVotes.md +79 -0
  405. package/versioned_docs/version-v3.x/technical-references/zk-snark-circuits/utilities.md +131 -0
  406. package/versioned_docs/version-v3.x/technical-references/zk-snark-circuits/zk-snark-circuits.md +42 -0
  407. package/versioned_docs/version-v3.x/use-cases/_category_.json +4 -0
  408. package/versioned_docs/version-v3.x/use-cases/governance.md +18 -0
  409. package/versioned_docs/version-v3.x/use-cases/polling.md +10 -0
  410. package/versioned_docs/version-v3.x/use-cases/public-goods.md +65 -0
  411. package/versioned_sidebars/version-v0.x-sidebars.json +8 -0
  412. package/versioned_sidebars/version-v1.2-sidebars.json +8 -0
  413. package/versioned_sidebars/version-v2.x-sidebars.json +8 -0
  414. package/versioned_sidebars/version-v3.x-sidebars.json +8 -0
  415. package/versions.json +1 -0
@@ -0,0 +1,107 @@
1
+ ---
2
+ title: MACI Process Messages Circuit
3
+ description: Introduction to the core zk-SNARK circuits of MACI
4
+ sidebar_label: Process Messages Circuit
5
+ sidebar_position: 3
6
+ ---
7
+
8
+ [**Repo link**](https://github.com/privacy-scaling-explorations/maci/blob/dev/circuits/circom/core)
9
+
10
+ This circuit allows the coordinator to prove that they have correctly processed each message in reverse order, in a consecutive batch of 5 ^ msgBatchDepth messages to the respective state leaf within the state tree. Coordinators would use this circuit to prove correct execution at the end of each Poll.
11
+
12
+ The [`processMessages`](https://github.com/privacy-scaling-explorations/maci/blob/dev/circuits/circom/core/qv/processMessages.circom) circuit will try to decrypt the messages, and based on the content of the message, update within itself the trees, to generate a proof that the coordinator's off-chain processing was done correctly. In other words, the circuit takes a final state, an initial state, and the leaves (messages and user signups) - it processes these messages via the different state transitions to finally check that the expected state is correct.
13
+ The pre-requisites for this circuit are:
14
+
15
+ - the related Poll has ended
16
+ - the state tree has been merged
17
+ - the message tree has been merged
18
+
19
+ This circuit requires the coordinator's private key, hence a proof for this circuit can only be generated by the coordinator. The private key is needed in order to generate the ECDH shared key used to decrypt the messages.
20
+
21
+ ![ProcessMessages](/img/circuits/processMessages_2_0.svg)
22
+
23
+ :::info
24
+ A version working with non quadratic voting (non-qv) is also [available](https://github.com/privacy-scaling-explorations/maci/blob/dev/circuits/circom/core/non-qv/processMessages.circom). This version is called `processMessagesNonQV` and is to be used when the Poll is not using the quadratic voting feature. Note that by default MACI works with quadratic voting.
25
+ :::
26
+
27
+ #### Parameters
28
+
29
+ | # | Parameter | Description |
30
+ | --- | ------------------------ | ---------------------------------------------------- |
31
+ | 0 | State tree depth | Allows $(2^{n})$ signups. |
32
+ | 1 | Message tree depth | Allows $(5^{n})$ votes or key-change messages. |
33
+ | 2 | Message batch tree depth | Allows $(5^{n})$ messages to be processed per batch. |
34
+ | 3 | Vote option tree depth | Allows $(5^{n})$ vote options. |
35
+
36
+ #### Inputs
37
+
38
+ | Input signal | Description |
39
+ | -------------------------------- | --------------------------------------------------------------------------------------- |
40
+ | `numSignUps` | Number of users that have completed the sign up |
41
+ | `index` | The batch index of current message batch |
42
+ | `pollEndTimestamp` | The Unix timestamp at which the poll ends |
43
+ | `msgRoot` | The root of the message tree |
44
+ | `msgs` | The batch of messages as an array of arrays |
45
+ | `msgSubrootPathElements` | As described below |
46
+ | `coordinatorPublicKeyHash` | $\mathsf{poseidon_2}([cPk_x, cPk_y])$ |
47
+ | `newSbCommitment` | As described below |
48
+ | `coordPrivKey` | The coordinator's private key |
49
+ | `batchEndIndex` | The last batch index |
50
+ | `encPubKeys` | The public keys used to generate shared ECDH encryption keys to encrypt the messages |
51
+ | `currentStateRoot` | The state root before the commands are applied |
52
+ | `currentStateLeaves` | The state leaves upon which messages are applied |
53
+ | `currentStateLeavesPathElements` | The Merkle path to each incremental state root |
54
+ | `currentSbCommitment` | As described below |
55
+ | `currentSbSalt` | As described below |
56
+ | `newSbCommitment` | As described below |
57
+ | `newSbSalt` | As described below |
58
+ | `currentBallotRoot` | The root of the ballot tree before messages are applied |
59
+ | `currentBallots` | The ballots upon which ballots are applied |
60
+ | `currentBallotsPathElements` | The Merkle path to each incremental ballot root |
61
+ | `currentVoteWeights` | The existing vote weight for the vote option in the ballot which each command refers to |
62
+ | `currentVoteWeightsPathElements` | The Merkle path from each vote weight to the vote option root in its ballot |
63
+
64
+ ##### `currentSbCommitment` and `newSbCommitment`
65
+
66
+ The `currentSbCommitment` is the $poseidon_3$ hash of the state tree root, the ballot tree root, and a random salt. The purpose of the random salt, which should be unique to each batch, is to ensure that the value of `currentSbCommitment` always changes even if all the commands in a batch are invalid and therefore do not change the state tree or ballot tree root.
67
+
68
+ The result of applying a batch of messages to `currentSbCommitment` is `newSbCommitment`.
69
+
70
+ ##### `currentSbSalt`
71
+
72
+ The salt used to produce `currentSbCommitment` (see above).
73
+
74
+ ##### `newSbSalt`
75
+
76
+ The salt used to produce `newSbCommitment` (see above).
77
+
78
+ ##### `msgSubrootPathElements`
79
+
80
+ The index of each message in `msgs` is consecutive. As such, in order to prove that each message in `msgs` is indeed a leaf of the message tree, we compute the subtree root of `msgs`, and then verify that the subtree root is indeed a subroot of `msgRoot`.
81
+
82
+ A simplified example using a tree of arity 2:
83
+
84
+ ```
85
+ r
86
+ / \
87
+ s ...
88
+ / \
89
+ o o
90
+ / \ / \
91
+ a b c d
92
+ ```
93
+
94
+ To prove that `a...d` are leaves of the tree with root `r`, we prove that the leaves have the subroot `s` with depth 2, and _then_ prove that `s` is a member of `r` at depth 1.
95
+
96
+ The implementation for this is in the `QuinBatchLeavesExists` circuit in `https://github.com/privacy-scaling-explorations/maci/blob/dev/circuits/circom/trees/incrementalQuinTree.circom`.
97
+
98
+ This method requires fewer circuit constraints than if we verified a Merkle proof for each leaf.
99
+
100
+ #### Statements that the circuit proves
101
+
102
+ 1. That the prover knows the preimage to `currentSbCommitment` (that is, the state root, ballot root, and `currentSbSalt`)
103
+ 2. That `maxVoteOptions <= (5 ^ voteOptionTreeDepth)`
104
+ 3. That `numSignUps <= (2 ^ stateTreeDepth)`
105
+ 4. That `coordinatorPublicKeyHash` is a hash of public key that is correctly derived from `coordPrivKey`
106
+ 5. That each message in `msgs` exists in the message tree
107
+ 6. That after decrypting and applying each message, in reverse order, to the corresponding state and ballot leaves, the new state root, new ballot root, and `newSbSalt` are the preimage to `newSbCommitment`
@@ -0,0 +1,101 @@
1
+ ---
2
+ title: MACI Circuits setup
3
+ description: Introduction to the core zk-SNARK circuits of MACI
4
+ sidebar_label: Building and testing
5
+ sidebar_position: 2
6
+ ---
7
+
8
+ ## Compile circuits
9
+
10
+ ### Prerequisites
11
+
12
+ Before building the project, make sure you have the installed the dependencies as explained in the [installation](/docs/v2.x/getting-started#installation) page.
13
+
14
+ ### Building MACI circuits
15
+
16
+ To build the main circuits of MACI, run the following command (`-c` postfix for c++ witness gen, and `-wasm` postfix for WASM witness gen only):
17
+
18
+ ```
19
+ pnpm build-test-circuits-c -- --out-path $OUT_PATH
20
+ pnpm build-test-circuits-wasm -- --out-path $OUT_PATH
21
+ ```
22
+
23
+ Please note that the circuits are configured with testing purpose parameters, which means it can only handle a limited amount of messages (up to 25 messages). For more information on the parameters and how to configure them, please refer to the individual circuit documentation within this page. Also, within the [configure-circomkit](/docs/guides/compile-circuits#configure-circomkit) section of the `compile circuits` page, you'll see how you can update the config file with new params.
24
+
25
+ To compile a single circuit, you can run:
26
+
27
+ ```
28
+ pnpm circom:build $CIRCUIT_NAME
29
+ ```
30
+
31
+ > Please note that the name should match one of the circuit names inside the `circom.json` file.
32
+
33
+ ### Parameters
34
+
35
+ MACI's circuits are parameterized, and thus can be configured to support different number of users, messages (votes), and vote options. Please ensure you understand what each of these parameter means and correctly configure them when building circuits from scratch, and when deploying the smart contracts.
36
+
37
+ - **STATE_TREE_DEPTH** = how many users the system supports
38
+ - **MESSAGE_TREE_DEPTH** = how many messages (votes) the system supports
39
+ - **VOTE_OPTIONS_TREE_DEPTH** = how many vote options the system supports
40
+ - **MESSAGE_BATCH_TREE_DEPTH** = how many messages in a batch can the circuit process
41
+ - **INT_STATE_TREE_DEPTH** = how many ballots can be processed per batch when tallying the results
42
+
43
+ For instance, given a binary tree for signups, if you set `STATE_TREE_DEPTH` to 2, the system will support 4 users, as 2 \*\* 2 = 4.
44
+
45
+ For messages, we use a quinary (five leaves) merkle tree, so if you set `MESSAGE_TREE_DEPTH` to 2, the system will support 32 messages, as 5 \*\* 2 = 32.
46
+
47
+ Please refer to the individual circuit documentation for more details on the inner working of each circuit and where parameters fit.
48
+
49
+ ### Generating zKeys
50
+
51
+ Run from the root directory to save to the `cli/zkeys` folder:
52
+
53
+ ```bash
54
+ pnpm setup:zkeys -- --outPath ../cli/zkeys
55
+ ```
56
+
57
+ Run from the circuits folder with `--outPath` to save to a custom folder:
58
+
59
+ ```bash
60
+ cd packages/circuits && pnpm gen-zkeys --outPath ./CUSTOM_FOLDER_NAME
61
+ ```
62
+
63
+ The larger the trees, the more time this process may take. You may also need a
64
+ machine with a very large amount of memory.
65
+
66
+ > Note that you will have to modify the parameters inside the `./circuits/circom/circuits.json` file to match your use case. For example, if you want to support up to 3125 messages, the message tree depth parameter should be set to `5` (as $5^5 = 3125$).
67
+
68
+ #### Measure the circuit sizes
69
+
70
+ The size of a circuit is denoted by its number of constraints. The larger this
71
+ number, the more time it takes to compile it, generate its `.zkey` file, and
72
+ perform phase 2 contributions.
73
+
74
+ Run this command to measure a circuit:
75
+
76
+ ```bash
77
+ pnpm exec snarkjs r1cs info CIRCUIT_NAME.circom
78
+ ```
79
+
80
+ #### Download the `.ptau` file
81
+
82
+ This file should be the result of the Perpetual Powers of Tau trusted setup
83
+ contribution which [Hermez Network
84
+ selected](https://blog.hermez.io/hermez-cryptographic-setup/).
85
+
86
+ When running the `setup:zkeys` command, the `.ptau` file will be downloaded automatically.
87
+
88
+ ### Generating and Validating ZK Proofs
89
+
90
+ To generate and validate ZK proofs from the artifacts produced by `circom`, you will need [`snarkjs`](https://github.com/iden3/snarkjs#groth16-1).
91
+
92
+ ## Testing
93
+
94
+ To test the circuits package, please use `pnpm run test`. This will run all of the tests inside the tests folder.
95
+
96
+ To run individual tests, you can use the following commands (for all other circuits please refer to the `package.json` scripts section):
97
+
98
+ - `pnpm run test:processMessages` to run the tests for the `processMessages` circuit.
99
+ - `pnpm run test:tallyVotes` to run the tests for the `tallyVotes` circuit.
100
+
101
+ More details on testing are provided in the [testing section](/docs/v2.x/guides/testing) of the documentation.
@@ -0,0 +1,79 @@
1
+ ---
2
+ title: MACI Tally Votes Circuit
3
+ description: Introduction to the core zk-SNARK circuits of MACI
4
+ sidebar_label: Tally Votes Circuit
5
+ sidebar_position: 4
6
+ ---
7
+
8
+ [**Repo link**](https://github.com/privacy-scaling-explorations/maci/blob/dev/circuits/circom/core)
9
+
10
+ #### Parameters
11
+
12
+ | # | Parameter | Description |
13
+ | --- | ---------------------- | -------------------------------------------------------- |
14
+ | 0 | State tree depth | Allows $(5^{n})$ signups. |
15
+ | 1 | State leaf batch depth | Allows $(5^{n})$ users' votes to be processed per batch. |
16
+ | 2 | Vote option tree depth | Allows $(5^{n})$ vote options. |
17
+
18
+ ![TallyVotes](/img/circuits/tallyVotes.svg)
19
+
20
+ :::info
21
+ A version working with non quadratic voting (non-qv) is also [available](https://github.com/privacy-scaling-explorations/maci/blob/dev/circuits/circom/core/non-qv/tallyVotes.circom). This version is called `tallyVotesNonQv` and is to be used when the Poll is not using the quadratic voting feature. Note that by default MACI works with quadratic voting.
22
+ :::
23
+
24
+ #### Input signals
25
+
26
+ | Input signal | Description |
27
+ | --------------------------------------- | ---------------------------------------------------------------- |
28
+ | `numSignUps` | The number of users that signup |
29
+ | `index` | Start index of given batch |
30
+ | `sbCommitment` | Described below |
31
+ | `currentTallyCommitment` | Described below |
32
+ | `newTallyCommitment` | Described below |
33
+ | `stateRoot` | The root of the state tree after all messages have been applied |
34
+ | `ballotRoot` | The root of the ballot tree after all messages have been applied |
35
+ | `sbSalt` | The salt used to produce `sbCommitment` |
36
+ | `ballots` | The ballots in the batch being tallied |
37
+ | `ballotPathElements` | The Merkle path to each ballot leaf |
38
+ | `votes` | The votes in each ballot cast per result |
39
+ | `currentResults` | The current tally of votes per vote option |
40
+ | `currentResultsRootSalt` | A random value |
41
+ | `currentSpentVoiceCreditSubtotal` | The subtotal of voice credits spent across all vote options |
42
+ | `currentSpentVoiceCreditSubtotalSalt` | A random value |
43
+ | `currentPerVOSpentVoiceCredits` | The voice credits spent on each vote option so far |
44
+ | `currentPerVOSpentVoiceCreditsRootSalt` | A random value |
45
+ | `newResultsRootSalt` | A random value |
46
+ | `newPerVOSpentVoiceCreditsRootSalt` | A random value |
47
+ | `newSpentVoiceCreditSubtotalSalt` | A random value |
48
+
49
+ ##### `sbCommitment`
50
+
51
+ The commitment to `stateRoot`, `ballotRoot`, and `sbSalt`:
52
+
53
+ $poseidon_3([stateRoot, ballotRoot, sbSalt])$
54
+
55
+ Proving preimage of `sbCommitment` is one out of the several steps required to prove that the votes were tallied correctly. By establishing that the coordinator knows `ballotRoot`, the coordinator can (using other parts of the circuit) prove that they know the preimage of the ballot leaves in the batch being tallied.
56
+
57
+ ##### `currentTallyCommitment` and `newTallyCommitment`
58
+
59
+ A tally is represented by a _tally commitment_, which is the $poseidon_3$ hash of:
60
+
61
+ 1. $tc_r$: a commitment to the votes per option
62
+ - This is the hash of the Merkle root $r_r$ of the votes and a salt $r_s$, computed as $poseidon_2([r_r, r_s])$
63
+ 2. $tc_t$: a commitment to the total spent voice credits
64
+ - This is the hash of the total spent voice credits $t_c$ and a salt $t_s$, computed as $poseidon_2([t_c, t_s])$
65
+ 3. $tc_p$: a commitment to the spent voice credits per vote option
66
+ - This is the hash of the Merkle root of the spent voice credits per vote option $p_v$ and a salt $p_s$, computed as $poseidon_2([p_v, p_s])$
67
+
68
+ The tally commitment is computed as such:
69
+
70
+ $poseidon_3([tc_r, tc_t, tc_p])$
71
+
72
+ #### Statements that the circuit proves
73
+
74
+ 1. That the coordinator knows the preimage of `sbCommitment`
75
+ 2. That `index` is less than or equal to `numSignUps`
76
+ 3. That each ballot in `ballots` is in a member of the ballot tree with the Merkle root `ballotRoot` at indices `batchStartIndex` to `batchStartIndex + (5 ** intStateTreeDepth)`
77
+ 4. That each set of votes (`votes[i]`) has the Merkle root $blt_r$ whose value equals `ballots[i][1]`
78
+ 5. That the tally is valid, which is:
79
+ - That the sum of votes per vote option is correct
@@ -0,0 +1,131 @@
1
+ ---
2
+ title: MACI Utility Circuits
3
+ description: Introduction to the core zk-SNARK circuits of MACI
4
+ sidebar_label: Utility Circuits
5
+ sidebar_position: 5
6
+ ---
7
+
8
+ #### Process Messages Input Hasher
9
+
10
+ A utility circuit used by the main `processMessages` circuit to hash its inputs.
11
+
12
+ ![ProcessMessagesInputHasher](/img/circuits/processMessagesInputHasher.svg)
13
+
14
+ It outputs one field element, which is the SHA256 hash of the following inputs:
15
+
16
+ 1. `packedVals`
17
+ 2. `pollEndTimestamp`
18
+ 3. `msgRoot`
19
+ 4. `coordinatorPubKeyHash`
20
+ 5. `newSbCommitment`
21
+ 6. `currentSbCommitment`
22
+
23
+ #### Tally Votes Input Hasher
24
+
25
+ A utility template that generates a sha256 hash of the provided tally inputs.
26
+
27
+ ![TallyVotesInputHasher](/img/circuits/tallyInputHasher.svg)
28
+
29
+ It outputs one field element, which is the SHA256 hash of the following inputs:
30
+
31
+ 1. `packedVals`
32
+ 2. `sbCommitment`
33
+ 3. `currentTallyCommitment`
34
+ 4. `newTallyCommitment`
35
+
36
+ #### ResultsCommitmentVerifier
37
+
38
+ A utility circuit used by the main `tallyVotes` circuit to verify that the results commitment is correct.
39
+
40
+ ![ResultsCommitmentVerifier](/img/circuits/resultsCommitmentVerifier.svg)
41
+
42
+ #### QuinCheckRoot
43
+
44
+ Utility circuit that given a quin Merkle root and a list of leaves, check if the root is the correct result of inserting all the leaves into the tree in the given order.
45
+
46
+ ![QuinCheckRoot](/img/circuits/quinCheckRoot.svg)
47
+
48
+ #### CalculateTotal
49
+
50
+ Utility circuit used to calculate the sum of an array of elements.
51
+
52
+ ![CalculateTotal](/img/circuits/calculateTotal.svg)
53
+
54
+ #### ECDH
55
+
56
+ Utility circuit used to generate a shared key from a private key and a public key.
57
+
58
+ ![ECDH](/img/circuits/ecdh.svg)
59
+
60
+ #### Poseidon
61
+
62
+ Utility circuit used to generate a Poseidon hash. In this case, it supports up to 13 inputs.
63
+
64
+ ![Poseidon13](/img/circuits/poseidonHasher13.svg)
65
+
66
+ #### MessageToCommand
67
+
68
+ Utility circuit used to convert a message into a command, this involves decrypting the message.
69
+
70
+ ![MessageToCommand](/img/circuits/messageToCommand.svg)
71
+
72
+ #### MessageValidator
73
+
74
+ Utility circuit used to validate a message. This performs several checks:
75
+
76
+ - `stateTreeIndex` is valid
77
+ - `voteOptionIndex` is valid
78
+ - `nonce` is valid
79
+ - the signature is valid
80
+ - the user signed up before poll end timestamp
81
+ - the user had enough voice credits
82
+
83
+ ![MessageValidator](/img/circuits/messageValidator.svg)
84
+
85
+ #### PrivToPubKey
86
+
87
+ Utility circuit used to generate a public key from a private key.
88
+
89
+ ![PrivToPubKey](/img/circuits/privToPubkey.svg)
90
+
91
+ #### VerifySignature
92
+
93
+ Utility circuit used to verify a EdDSA signature
94
+
95
+ ![VerifySignature](/img/circuits/verifySignature.svg)
96
+
97
+ #### UnpackElement
98
+
99
+ Utility circuit used to unpack an input element.
100
+
101
+ ![UnpackElement](/img/circuits/unpackElement.svg)
102
+
103
+ #### QuinSelector
104
+
105
+ Utility circuit used to select one element from an array of n elements at a given index.
106
+
107
+ ![QuinSelector](/img/circuits/quinSelector.svg)
108
+
109
+ #### Splicer
110
+
111
+ Utility circuit used to insert one element in an array at position `index`.
112
+
113
+ ![Splicer](/img/circuits/splicer.svg)
114
+
115
+ #### QuinBatchLeavesExists
116
+
117
+ Utility circuit used to check if a batch of leaves exists in a quinary tree.
118
+
119
+ ![QuinBatchLeavesExists](/img/circuits/quinBatchLeavesExists.svg)
120
+
121
+ #### QuinGeneratePathIndices
122
+
123
+ Utility circuit used to generate the indices needed to traverse the tree until we find the leaf we are looking for.
124
+
125
+ ![QuinGeneratePathIndices](/img/circuits/quinGeneratePathIndices.svg)
126
+
127
+ #### ProcessOne
128
+
129
+ Utility circuit used to process one message.
130
+
131
+ ![ProcessOne](/img/circuits/processOne.svg)
@@ -0,0 +1,37 @@
1
+ ---
2
+ title: MACI Circuits Introduction
3
+ description: Introduction to the core zk-SNARK circuits of MACI
4
+ sidebar_label: zk-SNARK Circuits
5
+ sidebar_position: 1
6
+ ---
7
+
8
+ MACI has two main zk-SNARK [circuits](https://github.com/privacy-scaling-explorations/maci/tree/dev/circuits):
9
+
10
+ 1. ProcessMessages.circom, which takes a batch of encrypted messages, decrypts them, and generates a proof that the coordinator's local processing was performed correctly. [QV](https://github.com/privacy-scaling-explorations/maci/blob/dev/circuits/circom/core/qv/processMessages.circom) and [non-QV](https://github.com/privacy-scaling-explorations/maci/blob/dev/circuits/circom/core/non-qv/processMessages.circom) versions are available.
11
+ 2. TallyVotes.circom, which counts votes from users' ballots, batch by batch. [QV](https://github.com/privacy-scaling-explorations/maci/blob/dev/circuits/circom/core/qv/tallyVotes.circom) and [non-QV](https://github.com/privacy-scaling-explorations/maci/blob/dev/circuits/circom/core/non-qv/tallyVotes.circom) versions are available.
12
+
13
+ The rest of the circuits are utilities templates that are required for the main circuits to work correctly. These include utilities such as float math, conversion of private keys, and Poseidon hashing/encryption.
14
+
15
+ Each circuit is parameterised and it is important to set the right parameters that match your use case. For example, if you want to support up to 3125 messages, the message tree depth parameter should be set to `5` (as $5^5 = 3125$).
16
+
17
+ ## Background
18
+
19
+ ### zk-SNARKs
20
+
21
+ zk-SNARKs are a type of zero-knowledge proof which allows a "prover" to prove to a "verifier" that they know a secret without revealing the secret itself. In MACI, the prover is the coordinator. MACI uses zk-SNARKs to prove that the coordinator has correctly processed the batches of messages and that all votes have been tallied correctly. A smart contract acts as the verifier to check the proof from the coordinator. Users can also verify that the process was done correctly at any point after the proof generation.
22
+
23
+ ### Circom
24
+
25
+ MACI's circuits are written using [Circom](https://docs.circom.io/), a domain-specific language (DSL) used to write zk-SNARK circuits. Circom syntax resembles JavaScript, and it currently is one of the most popular DSL in use by zk developers. Please refer to their documentation to learn more about the language.
26
+
27
+ ### Proving system
28
+
29
+ MACI uses [Groth16](https://eprint.iacr.org/2016/260.pdf) as its proving system. Groth16 is a zk-SNARK proving system that allows for the generation of proofs that are small and fast to verify.
30
+
31
+ ## How are the circuits used?
32
+
33
+ The circuits are used by the coordinator (the prover) to prove that they have correctly processed a batch of messages and tallied the votes correctly. This happens after a Poll has completed, and the coordinator has merged the state and message trees. The coordinator then generates a proof for each batch of messages, and submits them to the contract. The contract then verifies the proofs and updates the commitments on chain.
34
+
35
+ ## How do the Circuits fit in a voting round?
36
+
37
+ ![flow](/img/circuits/processingAfterPollEnds.svg)
@@ -0,0 +1,4 @@
1
+ {
2
+ "label": "Use Cases",
3
+ "position": 3
4
+ }
@@ -0,0 +1,18 @@
1
+ ---
2
+ title: Governance Applications
3
+ description: Overview of MACI governance applications.
4
+ sidebar_label: Governance
5
+ sidebar_position: 1
6
+ ---
7
+
8
+ MACI is designed to be used in a variety of applications where stakes are high, and we believe that governance is one of them.
9
+
10
+ ## DAOs Governance
11
+
12
+ MACI, as a privacy-preserving on-chain voting protocol, enables the execution of on-chain proposals where results directly trigger smart contracts. Public voting in DAOs currently faces challenges such as vote coercion and bandwagon effects, which MACI aims to mitigate.
13
+
14
+ In 2023 Nouns DAO, Aztec and Aragon ZK Research joined to do a Private Voting Research Sprint. You can read the technical report [here](https://research.aragon.org/nouns-tech.html) and the general report [here](https://research.aragon.org/nouns.html).
15
+
16
+ ## Elections
17
+
18
+ We believe MACI could eventually be used in elections, where privacy is paramount. While we are still far from implementing government elections using MACI, work is being done to start testing the waters with college student councils. We are excited to continue working on making local elections a reality, together with our community and their contribution. Stay tuned.
@@ -0,0 +1,10 @@
1
+ ---
2
+ title: Polling
3
+ description: Overview of MACI polling applications.
4
+ sidebar_label: Polling
5
+ sidebar_position: 3
6
+ ---
7
+
8
+ Polling typically involves surveying public opinion, and MACI can be effectively applied to this use case.
9
+
10
+ Decentralized social networks, such as Farcaster or Lens, which are native to Web3, enable seamless integration for conducting private polls.
@@ -0,0 +1,65 @@
1
+ ---
2
+ title: Public Goods Funding
3
+ description: Overview of public goods funding.
4
+ sidebar_label: Public Goods Funding
5
+ sidebar_position: 2
6
+ ---
7
+
8
+ # What is Public Goods Funding?
9
+
10
+ Think crowdfunding and grant-giving where the community weighs the contribution of each project and decides how much of financial funding said project should receive.
11
+
12
+ There are different flavors of funding mechanisms, you can find more information about each of them below:
13
+
14
+ - [Simple Percentage](#simple-voting)
15
+ - [Quadratic Funding](#quadratic-funding)
16
+ - [Retroactive Public Goods Funding](#retroactive-public-goods-funding)
17
+
18
+ ## Simple Voting
19
+
20
+ Public goods funding through a Simple Voting mechanism involves a pool of funds that is allocated based on the outcomes of a straightforward voting process. The percentage of votes received determines the corresponding percentage of the pool distributed.
21
+
22
+ While Simple voting makes sense for some cases, we suggest using Quadratic Funding for more fair model. You can read more [here](#quadratic-funding-a-better-balance).
23
+
24
+ ## Quadratic Funding
25
+
26
+ Quadratic funding (QF) is a crowdfunding mechanism that aims to distribute funds in a way that is more fair and inclusive than traditional crowdfunding. It works by matching small individual contributions with matching funds from a larger pool, using a quadratic formula.
27
+
28
+ In a QF round, donors are incentivized to contribute money to a project or cause that they support. The matching funds are then distributed to the projects that receive the most support from the largest number of people. This helps to ensure that smaller, grassroots projects can receive funding and support, even if they don't have access to large donors or corporate sponsors.
29
+
30
+ The quadratic formula used in this type of funding means that the matching funds increase exponentially with the number of individual contributors, which helps to amplify the impact of smaller donations and create a more equitable distribution of funds. This makes it possible for projects with a large number of small supporters to receive more funding than projects with just a few large supporters, which helps to level the playing field for smaller and less well-funded initiatives.
31
+
32
+ Quadratic funding is made up of:
33
+
34
+ 1. a pool of funds to be distributed
35
+ 2. a voting system for distributing those funds
36
+
37
+ Two common voting systems you may have used are 1-person-1-vote and 1-dollar-1-vote. Quadratic funding is a best-of-both-worlds solution where users vote with the **square root** of the money they spend — read on to learn more.
38
+
39
+ ### Quadratic Funding: a better balance?
40
+
41
+ Quadratic funding is a compromise between 1-dollar-1-vote and 1-person-1-vote. Participants vote on how to distribute pooled funds by making individual donations, but each person's influence, rather than being the amount of money they spend, is the square root of that amount.
42
+
43
+ Compared to 1-dollar-1-vote in the market, quadratic funding makes it exponentially easier for the influence of many poorer people to outweigh that of a single rich person:
44
+
45
+ - 1-dollar-1-vote: 1 person paying \$10,000 has the same influence as 100 people paying \$100
46
+ - Quadratic funding: 1 person paying \$10,000 has the same influence as 100 people paying \$1 or 10 people paying \$100
47
+
48
+ Compared to 1-person-1-vote, quadratic funding lets the person who lives in Florida full-time, and cares twice as much about the vote's outcome than the person who lives in Florida half-time, have more influence:
49
+
50
+ - 1-person-1-vote: the two Florida voters have equal influence
51
+ - Quadratic funding: the full-time Florida resident, who cares twice as much, pays twice as much, and as a result gets 2^(1/2) times the influence of the half-time resident
52
+
53
+ (It's important to note that while these example are a good demonstration of the argument for quadratic funding, they do over-simplify these situations, which are as sociological as they are mathematical.)
54
+
55
+ ### Quadratic Funding Resources
56
+
57
+ - [Quadratic Payments: A Primer](https://vitalik.eth.limo/general/2019/12/07/quadratic.html)
58
+ - [Liberal Radicalism: A Flexible Design For Philanthropic Matching Funds](https://papers.ssrn.com/sol3/papers.cfm?abstract_id=3243656)
59
+ - [Quadratic Voting](https://www.radicalxchange.org/concepts/plural-voting/)
60
+
61
+ ## Retroactive Public Goods Funding
62
+
63
+ Retroactive Public Goods Funding (Retro Funding) is based on the idea that it’s easier to agree on what was useful in the past than what might be useful in the future. Originally was designed by Vitalik and a simple early version implemented by Optimism Foundation. You can read the original post [here](https://medium.com/ethereum-optimism/retroactive-public-goods-funding-33c9b7d00f0c).
64
+
65
+ An implementation of Retro Funding with MACI is similar as using Quadratic Funding or Simple Majority, with the difference that the selected projects need to present what they have done and voters assign funds based on results.
@@ -0,0 +1,35 @@
1
+ ---
2
+ title: Case Studies
3
+ description: Overview of what is quadratic funding
4
+ sidebar_label: Case Studies
5
+ sidebar_position: 12
6
+ ---
7
+
8
+ # Case Studies
9
+
10
+ View some of our previous collaborations below!
11
+
12
+ Public Good rounds come in different shapes in sizes. The hope is that these projects will provide inspiration for prospective organizers on how they may want to structure their QF round.
13
+
14
+ ## 2024
15
+
16
+ - [ETH Mexico](https://pse-team.notion.site/case-study-eth-mexico-24?pvs=74)
17
+ - [Cryptoversidad](https://pse-team.notion.site/Cryptoversidad-24-159d57e8dd7e80c88407cfaf6f538f3e?pvs=4)
18
+ - [Ethereum TGU: Trust Round](https://pse-team.notion.site/case-study-ethereum-tgu-24-trust-round?pvs=74)
19
+ - [Devcon Sea](https://pse-team.notion.site/case-study-devcon-sea-24?pvs=74)
20
+ - [Ethereum TGU: Academy Round](https://pse-team.notion.site/Ethereum-TGU-24-Academia-Round-17ad57e8dd7e804ab65be5b6f3e6d7c3?pvs=4)
21
+
22
+ ## 2023
23
+
24
+ - [ETH Honduras](https://www.notion.so/pse-team/ETH-Honduras-23-8a73c9ce00bf40e896bf6a1caf946710?pvs=4)
25
+ - [ETH Argentina](https://www.notion.so/pse-team/ETH-Argentina-23-4836cbac426e4e4cbc56af7b639aa47b?pvs=4)
26
+ - [ETHCon Korea](https://www.notion.so/pse-team/ETHCon-Korea-23-38a7c83ab66b4f5f8694141583da5c0a?pvs=4)
27
+
28
+ ## 2022
29
+
30
+ - [ETH Honduras](https://www.notion.so/pse-team/ETH-Honduras-22-d1790da6ea0a45f38fdf023a6d10ef46?pvs=4)
31
+ - [ETH LATAM](https://www.notion.so/pse-team/ETHLatam-22-6250f0f076984879aa38078d212a61f1?pvs=4)
32
+ - [ETH Barcelona](https://www.notion.so/pse-team/ETHBarcelona-22-15a5c2d1464c41429d0865b59a4e3242?pvs=4)
33
+ - [ETH Colombia](https://www.notion.so/pse-team/ETHColombia-22-af1faa11a6d24c36b7ec846e1f2bfc5d?pvs=4)
34
+ - [ETH Prague](https://www.notion.so/pse-team/ETHPrague-22-948c98e6e2fd4b509d44cfc7445bdff6?pvs=4)
35
+ - [ETH Dam](https://www.notion.so/pse-team/ETHDam-23-131c320619db4a75b9478bb39ad1d793?pvs=4)
@@ -0,0 +1,4 @@
1
+ {
2
+ "label": "Contributing",
3
+ "position": 10
4
+ }