@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,153 @@
1
+ ---
2
+ title: What is MACI?
3
+ description: High-level introduction to Minimum Anti-Collusion Infrastructure (MACI)
4
+ sidebar_label: What is MACI?
5
+ sidebar_position: 1
6
+ ---
7
+
8
+ # Welcome to MACI
9
+
10
+ ![MACI card](/img/maci-card.png)
11
+
12
+ ## What is MACI?
13
+
14
+ **Minimal Anti-Collusion Infrastructure (MACI)** is an open-source public good that serves as infrastructure for private on-chain voting.
15
+
16
+ MACI is an Ethereum application that provides privacy and collusion resistance for on-chain voting, both in a [quadratic](https://vitalik.eth.limo/general/2019/12/07/quadratic.html) and non-quadratic fashion. A common problem among today’s on-chain voting (or public good funding) processes is how easy it is to bribe voters into voting for a particular option. Since all transactions on the blockchain are public by default, without MACI, voters can easily prove to the briber which option they voted for and therefore receive the bribe rewards.
17
+
18
+ MACI counters this problem by using encryption and zero-knowledge proofs (zk-SNARKs) to hide how each person voted while still publicly revealing the final result. User’s cannot prove which option they voted for, and therefore bribers cannot reliably trust that a user voted for their preferred option. For example, a voter can tell a briber that they are voting for option A, but in reality they voted for option B. There is no reliable way to prove which option the voter actually voted for, so the briber has less incentive to pay voters to vote their way.
19
+
20
+ Applications like [clr.fund](https://clr.fund/) or protocols like [Allo](https://github.com/gitcoinco/MACI_QF) build atop MACI to increase
21
+ user privacy and discourage collusion or bribery for public goods funding.
22
+
23
+ ## Why MACI Matters
24
+
25
+ To understand the promise of on-chain voting and the purpose of MACI, we highly recommend reading [Vitalik's post on blockchain voting](https://vitalik.eth.limo/general/2021/05/25/voting2.html). He provides an overview of the incredible potential of e-voting and why blockchains are an excellent technology to implement e-voting solutions on top of.
26
+
27
+ Below we attempt to summarize some of the points laid out in that post:
28
+
29
+ ### Security requirements of a voting system
30
+
31
+ Any voting system requires a few crucial security properties in order to be trusted by users:
32
+
33
+ - **Correct execution**: the result (tally of votes) must be correct, and the result must be guaranteed by a transparent process (so that everyone is convinced that the result is correct)
34
+ - **Censorship resistance**: anyone eligible to vote should be able to vote, and it should not be possible to interfere with anyone's attempt to vote or to prevent anyone’s vote from being counted
35
+ - **Privacy:** you should not be able to tell which candidate someone specific voted for, or even if they voted at all
36
+ - **Coercion resistance:** you should not be able to prove to someone else how you voted, even if you want to
37
+
38
+ ### Voting systems
39
+
40
+ Looking at various approaches to implement a voting system, we can see how they compare across these properties.
41
+
42
+ #### In-person voting systems
43
+
44
+ In short, it's hard to know for sure how current voting systems operate. Governments and corporations spend lots of resources on their systems and processes in an attempt to ensure their integrity, but ultimately neither the systems nor the processes are fully auditable, so we must trust that these security properties are being enforced.
45
+
46
+ | | In-person |
47
+ | --------------------- | --------- |
48
+ | Correct execution | 🤷‍♂️ |
49
+ | Censorship resistance | 🤷‍♂️ |
50
+ | Privacy | 🤷‍♂️ |
51
+ | Collusion resistance | 🤷‍♂️ |
52
+
53
+ #### Blockchain voting systems
54
+
55
+ Blockchains provide two key properties: correct execution and censorship resistance. In terms of execution, the blockchain accepts inputs (transaction) from users, correctly processes them according to some pre-defined rules, and returns the correct output. No one is able to change the rules. Any user that wants to send a transaction and is willing to pay a high enough fee can send the transaction and expect to see it quickly included on-chain.
56
+
57
+ By default, however, Blockchain voting applications face challenges. Ethereum, like most blockchains, is completely transparent - all transaction data is public, so there is no privacy for voters or their votes. This makes bribery very easy as a result: someone can easily show a transaction receipt that proves how they voted. In some cases, bribery can be completely automated via smart contracts to make collusion entirely trustless.
58
+
59
+ | | In-person | Ethereum |
60
+ | --------------------- | --------- | -------- |
61
+ | Correct execution | 🤷‍♂️ | ✅ |
62
+ | Censorship resistance | 🤷‍♂️ | ✅ |
63
+ | Privacy | 🤷‍♂️ | ❌ |
64
+ | Collusion resistance | 🤷‍♂️ | ❌ |
65
+
66
+ #### Blockchain voting systems (with ZKPs)
67
+
68
+ Enter zero-knowledge proofs (ZKPs), which when combined with blockchains like Ethereum, can enable private on-chain voting but maintain public on-chain results that are verifiable by anyone (including smart contracts). Vote tallying takes place off-chain but ZKPs are submitted and verified on-chain, which guarantees votes are counted correctly without revealing the individual votes.
69
+
70
+ | | In-person | Ethereum | Ethereum w/ ZK |
71
+ | --------------------- | --------- | -------- | -------------- |
72
+ | Correct execution | 🤷‍♂️ | ✅ | ✅ |
73
+ | Censorship resistance | 🤷‍♂️ | ✅ | ✅ |
74
+ | Privacy | 🤷‍♂️ | ❌ | ✅ |
75
+ | Collusion resistance | 🤷‍♂️ | ❌ | ✅ |
76
+
77
+ This, in essence, is why MACI exists. By combining these technologies in novel ways, we believe we can achieve all the core security properties that a voting system must have.
78
+
79
+ ## Features
80
+
81
+ MACI offers the following guarantees:
82
+
83
+ | Property | Description |
84
+ | ------------------------ | ----------------------------------------------------------------------------------------------------------------------- |
85
+ | **Collusion Resistance** | No one except a trusted coordinator should be certain of the validity of a vote, reducing the effectiveness of bribery. |
86
+ | **Receipt-freeness** | No one can prove (besides to the coordinator) which way they voted. |
87
+ | **Privacy** | No one except a trusted coordinator should be able to decrypt a vote. |
88
+ | **Uncensorability** | No one — not even the trusted coordinator, should be able to censor a vote. |
89
+ | **Unforgeability** | Only the owner of a user's private key may cast a vote tied to its corresponding public key. |
90
+ | **Non-repudiation** | No one may modify or delete a vote after it is cast, although a user may cast another vote to nullify it. |
91
+ | **Correct execution** | No one, not even the trusted coordinator, should be able to produce a false tally of votes. |
92
+
93
+ Under the hood, MACI uses Ethereum smart contracts, ECDH encryption, and zero-knowledge proofs.
94
+ It inherits security and uncensorability from the underlying Ethereum
95
+ blockchain, ensures unforgeability via asymmetric encryption, and achieves
96
+ collusion resistance, privacy, and correct execution via zk-SNARK proofs.
97
+
98
+ The participants of a MACI voting process are: 1) the voters and 2) a trusted coordinator. The coordinator is in charge of setting up the system, deploying polls, and computing the tally of the votes. Through smart contracts and ZK-proofs, MACI ensures that everything is done in a fair manner. Although MACI can provide collusion resistance only if the coordinator is honest, a dishonest coordinator can neither censor nor tamper with its execution.
99
+
100
+ Note that MACI presumes an identity system where each legitimate member
101
+ controls a unique Ethereum private key.
102
+
103
+ For information on MACI's latest features, please check out our [MACI v2.0.0 release post](/blog/2024-v2).
104
+
105
+ ## Background
106
+
107
+ MACI was originally proposed by Vitalik Buterin in [this ethresear.ch
108
+ post](https://ethresear.ch/t/minimal-anti-collusion-infrastructure/5413) and has been maintained and improved since thanks to support from the Ethereum Foundation. For a general overview, the history and the importance of MACI, see [Release Announcement: MACI 1.0](/blog/maci-1-0-release) by Wei Jie, one of the creators. He also created a helpful [overview of MACI video](https://www.youtube.com/watch?v=sKuNj_IQVYI). Kyle Charbonnet wrote a great [Technical Introduction to MACI 1.0](/blog/maci-1-0-technical-introduction) that provides a walkthrough on how MACI operates.
109
+
110
+ ## Credits
111
+
112
+ MACI is a public good infrastructure that is supported by the [Ethereum Foundation](https://ethereum.foundation/) within [Privacy & Scaling Explorations (PSE)](https://pse.dev/). It's also continuously improved by our open source community! Many people have contributed to MACI, but below are some notable contributors.
113
+
114
+ **[MACI v1.0](/blog/maci-1-0-release) was originally developed by:**
115
+
116
+ - [Barry WhiteHat](https://github.com/barryWhiteHat)
117
+ - [Cory Dickson](https://github.com/corydickson)
118
+ - [Chih-Cheng Liang](https://twitter.com/ChihChengLiang)
119
+ - [Han Jian](https://han0110.github.io/)
120
+ - [Kendrick Tan](https://kndrck.co/)
121
+ - [Kirill Goncharov](https://github.com/xuhcc)
122
+ - [Kobi Gurkan](http://kobi.one/)
123
+ - [Koh Wei Jie](https://kohweijie.com)
124
+ - [Samuel Gosling](https://twitter.com/xGozzy)
125
+
126
+ **[MACI v1.1.1](/blog/maci-v1-1-1-release) was primarily developed by:**
127
+
128
+ - [ctrlc03](https://github.com/ctrlc03)
129
+ - [chaosma](https://github.com/chaosma)
130
+ - [baumstern](https://github.com/baumstern)
131
+ - [daodesigner](https://github.com/daodesigner)
132
+ - [0xjei](https://github.com/0xjei)
133
+
134
+ **[MACI v1.2 till v3.0](/blog/2024-v2) was primarily developed by:**
135
+
136
+ - [ctrlc03](https://github.com/ctrlc03)
137
+ - [samajammin](https://github.com/samajammin)
138
+ - [0xmad](https://github.com/0xmad)
139
+ - [kittybest](https://github.com/kittybest)
140
+ - [crisgarner](https://github.com/crisgarner)
141
+
142
+ **Currently, MACI (v3.0 and beyond) is maintained and continuously improved by a core development team:**
143
+
144
+ - [ctrlc03](https://github.com/ctrlc03)
145
+ - [0xmad](https://github.com/0xmad)
146
+ - [nicoserranop](https://github.com/NicoSerranoP)
147
+ - [john](https://github.com/JohnGuilding)
148
+
149
+ Our core team continues to work on improving the protocol and its documentation with help from our open source community.
150
+
151
+ :::info
152
+ If you are using one of the previous versions of MACI, see the [MACI v2.0](/docs/v2.x/introduction) documentation.
153
+ :::
@@ -0,0 +1,4 @@
1
+ {
2
+ "label": "Processes",
3
+ "position": 11
4
+ }
@@ -0,0 +1,38 @@
1
+ ---
2
+ title: CI Pipeline
3
+ description: Introduction to how MACI's CI works
4
+ sidebar_label: CI
5
+ sidebar_position: 2
6
+ ---
7
+
8
+ # Continuous Integration (CI) Pipeline
9
+
10
+ CI (Continuous Integration) pipeline is an automated workflow to ensure that software is always in a working state. An event like opening a pull request causes a pipeline to run. The pipeline consists of an automated build process and a suite of automated tests (See [Testing](https://pse.dev/docs/guides/testing) for more details).
11
+
12
+ ![cicd-maci drawio-7](https://user-images.githubusercontent.com/1610146/185962260-091cd952-5444-44f3-89e3-be64e81d4c21.png)
13
+
14
+ ## Pipeline Triggers
15
+
16
+ ### Commit to Main Branch
17
+
18
+ Each commit (i.e. a merged PR) to the main branch triggers the pipeline. The pipeline creates packages that can be deployed to any environment. Packages are uploaded to an artifact repository (e.g. npm).
19
+
20
+ ![cicd-maci drawio-12](https://user-images.githubusercontent.com/1610146/183404579-8bcb76fe-34b6-4748-a5ae-e2e4b010bd86.png)
21
+
22
+ ### Pull Request (PR)
23
+
24
+ When a pull request has been created (or updated), it triggers the PR pipeline. It gives the reviewer confidence that the software works as expected with the introduced code changes.
25
+
26
+ ![cicd-maci drawio-9](https://user-images.githubusercontent.com/1610146/183391880-d3a20f29-2708-4d72-988d-4781c0396e48.png)
27
+
28
+ ### Nightly
29
+
30
+ Nightly build runs every midnight. It is to ensure that all required dependencies are present and to show no bugs have been introduced.
31
+
32
+ ![cicd-maci drawio-11](https://user-images.githubusercontent.com/1610146/183404455-cc2aaace-fe52-40f4-b5e4-3c852c5ff516.png)
33
+
34
+ ### Tag Push
35
+
36
+ When a tag has been pushed, it triggers a release pipeline. It will draft a release note with an auto-generated changelog and publish npm package(s).
37
+
38
+ ![cicd-maci drawio-5](https://user-images.githubusercontent.com/1610146/185958513-51dadaf1-7f72-404b-b482-149b91edcaab.png)
@@ -0,0 +1,94 @@
1
+ ---
2
+ title: MACI versioning and release process
3
+ description: How MACI's versioning and release process works
4
+ sidebar_label: MACI versioning
5
+ sidebar_position: 1
6
+ ---
7
+
8
+ # MACI versioning and release process
9
+
10
+ This document outlines the approach to versioning and releasing the MACI project. The primary goal here is to set clear expectations and provide a consistent user experience for developers integrating MACI and its packages.
11
+
12
+ ## MACI code
13
+
14
+ MACI code consists 3 core parts: Circom circuits, Solidity contracts and JS (TS) libraries, from which we release a total of 7 NPM packages. See the [codebase overview](/docs/technical-references/) for more details.
15
+
16
+ ## MACI versioning
17
+
18
+ MACI follows the [Semantic Versioning Specification (SemVer)](https://semver.org/).
19
+
20
+ All MACI packages are organized in our monorepo and follow a global release approach, meaning that all packages have the same version.
21
+
22
+ Currently, MACI core team manually decides when to release and what the version should be. Packages are released [automatically via CI](https://github.com/privacy-scaling-explorations/maci/blob/main/.github/workflows/release.yml) when a new tag is created in GitHub. [You can view our releases and tags in GitHub](https://github.com/privacy-scaling-explorations/maci/releases).
23
+
24
+ ## MACI Release Process
25
+
26
+ To release a new version of MACI, follow these steps:
27
+
28
+ :::warning
29
+ Version number '1.2.3' is used here as an example. You should replace the version number '1.2.3' with the version number you are planning to release
30
+ :::
31
+
32
+ 1. Verify that tests have passed on GitHub Actions
33
+
34
+ 2. Clone maci:
35
+
36
+ ```
37
+ git clone https://github.com/privacy-scaling-explorations/maci
38
+ ```
39
+
40
+ 3. Switch to the `main` branch:
41
+
42
+ ```
43
+ git checkout main
44
+ ```
45
+
46
+ 4. Install required dependencies:
47
+
48
+ ```
49
+ pnpm install
50
+ ```
51
+
52
+ 5. Run `lerna version` to update CHANGELOG and version numbers of sub-packages:
53
+
54
+ ```
55
+ pnpm exec lerna version --no-push --no-git-tag-version --conventional-commits 1.2.3
56
+ ```
57
+
58
+ 6. Commit changes:
59
+
60
+ ```
61
+ git commit --message "chore(release): publish 1.2.3"
62
+ ```
63
+
64
+ 7. Push changes and create a pull request
65
+
66
+ After the pull request has been merged:
67
+
68
+ 8. Retrieve merged commit
69
+
70
+ 9. Add a tag:
71
+
72
+ ```
73
+ git tag --sign v1.2.3 --message v1.2.3
74
+ ```
75
+
76
+ 10. Publish tag:
77
+
78
+ ```
79
+ git push v1.2.3
80
+ ```
81
+
82
+ Once the tag is pushed, GitHub Actions will automatically publish the packages to npm.js and create a release on GitHub.
83
+
84
+ ---
85
+
86
+ The following packages will be published on NPM:
87
+
88
+ - [`@maci-circuits`](https://www.npmjs.com/package/maci-circuits)
89
+ - [`@maci-contracts`](https://www.npmjs.com/package/maci-contracts)
90
+ - [`@maci-cli`](https://www.npmjs.com/package/maci-cli)
91
+ - [`@maci-core`](https://www.npmjs.com/package/maci-core)
92
+ - [`@maci-crypto`](https://www.npmjs.com/package/maci-crypto)
93
+ - [`@maci-domainobjs`](https://www.npmjs.com/package/maci-domainobjs)
94
+ - [`@maci-integrationtests`](https://www.npmjs.com/package/maci-integrationtests)
@@ -0,0 +1,326 @@
1
+ ---
2
+ title: Quick Start
3
+ description: Getting with MACI
4
+ sidebar_label: Quick Start
5
+ sidebar_position: 2
6
+ ---
7
+
8
+ # Quick Start
9
+
10
+ ## Requirements
11
+
12
+ You need the following to use MACI:
13
+
14
+ - Node.js: use a JS toolchain manager like [`nvm`](https://github.com/nvm-sh/nvm) or [`volta`](https://volta.sh/) to install Node.js. We recommend using Node 20 or above.
15
+ - [pnpm](https://pnpm.io/installation): Fast, disk space efficient package manager.
16
+
17
+ ## Installation
18
+
19
+ To install MACI you need to run the following commands:
20
+
21
+ ```bash
22
+ git clone https://github.com/privacy-scaling-explorations/maci.git && \
23
+ cd maci && \
24
+ pnpm install && \
25
+ pnpm run build
26
+ ```
27
+
28
+ :::note
29
+ We suggest you use the latest released version. You can check all the releases [here](https://github.com/privacy-scaling-explorations/maci/releases).
30
+ :::
31
+
32
+ #### Decide whether you need to compile new circuits or use the test ones
33
+
34
+ If you are going to be making any changes to the circom circuits, then you can follow the [compile circuits guide](./guides/compile-circuits.md) and skip the next section.
35
+
36
+ ### Download the zero knowledge artifacts
37
+
38
+ MACI has two main zk-SNARK circuits, and each of them is parameterized. In order to prove and verify them we need to use the `.zkey` Artifacts. There should be one
39
+ `.zkey` file for each circuit and set of parameters.
40
+
41
+ Unless you wish to generate a fresh set of `.zkey` files, you should obtain
42
+ them from someone who has performed a multi-party trusted setup for said
43
+ circuits. For more details on which artifacts have undergone a trusted setup, please refer to the [Trusted Setup](/docs/security/trusted-setup) page.
44
+
45
+ :::important
46
+ Note the locations of the `.zkey` files cause you will need it when deploying contracts.
47
+ :::
48
+
49
+ #### Download test artifacts
50
+
51
+ For all but production use cases, we suggest using the test artifacts, with the latest dev updates you can do it by running:
52
+
53
+ ```bash
54
+ pnpm download-zkeys:test
55
+ ```
56
+
57
+ #### Download ceremony artifacts
58
+
59
+ For production you need to use the ceremony artifacts which have undergone a trusted setup, you can download them with the command:
60
+
61
+ ```bash
62
+ pnpm download-zkeys:ceremony
63
+ ```
64
+
65
+ :::info
66
+ Currently, the ceremony artifacts work with MACI version up to 2.x
67
+ :::
68
+
69
+ ## Deploy Contracts
70
+
71
+ ### Generate Coordinator Keys
72
+
73
+ In order to run MACI polls, a coordinator is required to publish their MACI public key. You will need to generate a MACI keypair, and treat the private key just as your ethereum private keys. Please store them in a safe place as you won't be able to finish a round if you lose access, or if compromised a bad actor could decrypt the vote and publish them online. You can generate a new key pair using maci-cli by running the following command in the root of the project:
74
+
75
+ ```bash
76
+ pnpm run generate-maci-keypair
77
+ ```
78
+
79
+ ### Set the .env
80
+
81
+ Head to the `packages/contracts` folder and copy the `.env.example` file.
82
+
83
+ ```bash
84
+ cd packages/contracts && \
85
+ cp .env.example .env
86
+ ```
87
+
88
+ Make sure to include a mnemonic and RPC url (make sure to replace NETWORK with the network you want to use).
89
+
90
+ ```js
91
+ MNEMONIC = "your_ethereum_secret_key";
92
+ NETWORK_RPC_URL = "the_eth_provider_url";
93
+ NETWORK_ETHERSCAN_API_KEY = "etherscan api key";
94
+ ```
95
+
96
+ ### Set the configuration file
97
+
98
+ In the folder and copy the config example and update the fields as necessary:
99
+
100
+ ```bash
101
+ cd ./packages/contracts && \
102
+ cp deploy-config-example.json deploy-config.json
103
+
104
+ ```
105
+
106
+ #### ConstantInitialVoiceCreditProxy
107
+
108
+ Specifies the number of credits allocated to each voter.
109
+
110
+ | Property | Description |
111
+ | ---------- | -------------------------------------------------------- |
112
+ | **deploy** | Defines if the contract needs to be deployed. |
113
+ | **amount** | Defines how many vote credits each participant will get. |
114
+
115
+ #### Policy
116
+
117
+ MACI uses a "policy" contract to configure and enforce the eligibility criteria of voters who can participate in MACI polls. In other words, it is a way to allowlist signups to the system to protect against sybil attacks. Please refer to the [policy page in the documentation](/docs/technical-references/smart-contracts/Policies) for more information on the supported Policies.
118
+
119
+ | Property | Description |
120
+ | ---------- | ------------------------------------------------ |
121
+ | **deploy** | Defines if the contract is going to be deployed. |
122
+
123
+ :::important
124
+ For testing we suggest using the **FreeForAlPolicy** as it allows anyone to signup on MACI.
125
+ :::
126
+
127
+ #### MACI
128
+
129
+ | Property | Description |
130
+ | ------------------ | ------------------------------------------- |
131
+ | **stateTreeDepth** | Defines how many users the system supports. |
132
+ | **policy** | Defines which policy to use. |
133
+
134
+ #### VerifyingKeysRegistry
135
+
136
+ The VerifyingKeysRegistry hold the verifying keys used to verify the proofs, on the zkeys field we define the path to the zero knowledge artifacts we downloaded in the previous steps.
137
+
138
+ | Property | Description |
139
+ | --------------------------------- | ------------------------------------------------------------------------------------ |
140
+ | **stateTreeDepth** | Defines how many users the system supports. |
141
+ | **tallyProcessingStateTreeDepth** | Defines how many ballots can be processed per batch when tallying the results. |
142
+ | **messageTreeDepth** | Defines how many messages (votes) the system supports. |
143
+ | **voteOptionTreeDepth** | Defines how many vote options the system supports. |
144
+ | **messageBatchDepth** | Defines how many messages in a batch can the circuit process. |
145
+ | **zkeys** | Defines the path to the zkey files for QV, Non QV and Full Credits keys. |
146
+ | **pollJoiningZkey** | Defines the zkey to the poll joining circuit which allows to join polls for voting. |
147
+ | **pollJoinedZkey** | Defines the zkey to the poll joined circuit which allows to prove you joined a poll. |
148
+
149
+ :::important
150
+ The recommended values for test keys are: **10-1-2-2-1**. For ceremony keys: **14-5-9-3-2**.
151
+ :::
152
+
153
+ #### Poll
154
+
155
+ | Property | Description |
156
+ | --------------------------- | ----------------------------------------------------------------- |
157
+ | **pollStartDate** | Defines when the poll starts in seconds. |
158
+ | **pollEndDate** | Defines how long is going to be the poll in seconds. |
159
+ | **coordinatorPublicKey** | Defines the coordinator public MACI key. |
160
+ | **useQuadraticVoting** | Defines if the poll uses quadratic voting or not. |
161
+ | **policy** | Defines the policy of the poll. |
162
+ | **relayers** | Defines an array of addresses that are allowed to relay messages. |
163
+ | **initialVoiceCreditProxy** | Defines the type of voice credit proxy to use for this poll. |
164
+ | **voteOptions** | Defines how many votes options are valid for this poll. |
165
+
166
+ ### Deploy MACI Contracts
167
+
168
+ To deploy the MACI contracts to a specific network you can append `:network` to the deployment commands, e.g. `pnpm deploy:sepolia` - please refer to the available networks on the package.json scripts section.
169
+
170
+ ```bash
171
+ pnpm deploy:NETWORK
172
+ ```
173
+
174
+ There are already some deployed contracts that could be reused, copy the `default-deployed-contracts.json` file if you need them to avoid deploying redundant contracts and save your gas fee.
175
+
176
+ ```bash
177
+ cp default-deployed-contracts.json deployed-contracts.json
178
+ ```
179
+
180
+ Delete any contract you want to redeploy and then run the following command to save gas:
181
+
182
+ ```bash
183
+ pnpm deploy:NETWORK --incremental
184
+ ```
185
+
186
+ ### Deploy Poll
187
+
188
+ Before deploying a Poll, make sure you have set the coordinator MACI public key to which you own the private key. To deploy your first Poll you can run the following command:
189
+
190
+ ```sh
191
+ pnpm deploy-poll:NETWORK
192
+ ```
193
+
194
+ :::important
195
+ Starting another poll doesn't require deploying MACI contracts again, you can run `pnpm deploy-poll:NETWORK` command and then use the new poll-id.
196
+ :::
197
+
198
+ ## Poll Finalization
199
+
200
+ As a coordinator, first you need to merge signups and messages (votes). This optimization is needed to reduce gas cost for voters. Then the coordinator generates proofs for the message processing, and tally calculations. This allows to publish the poll results on-chain and then everyone can verify the results when the poll is over. You run a merge with:
201
+
202
+ ```bash
203
+ pnpm merge:[network] --poll [poll-id]
204
+ ```
205
+
206
+ :::info
207
+ `poll-id` starts at 0 and increments for each deployed poll
208
+ :::
209
+
210
+ Then you need to generate the proofs for the message processing, and tally calculations. This allows to publish the poll results on-chain and then everyone can verify the results:
211
+
212
+ ```bash
213
+ pnpm run prove:[network] --poll [poll-id] \
214
+ --coordinator-private-key [coordinator-maci-private-key] \
215
+ --tally-file ../results/tally.json \
216
+ --output-dir ../results/proofs/ \
217
+ --start-block [block-number] \
218
+ --blocks-per-batch [number-of-blocks]
219
+ ```
220
+
221
+ :::info
222
+ The `--coordinator-private-key` is the one you generated earlier with `pnpm run generate-maci-keypair`.
223
+
224
+ `--start-block` is the block number from which to start looking for events from. You can use the block that you deployed the contracts in.
225
+
226
+ You can reduce the time of the proving by including more blocks per batch with `--blocks-per-batch`, you can try with 500.
227
+ :::
228
+
229
+ #### Submit On-chain
230
+
231
+ Now it's time to submit the poll results on-chain so that everyone can verify the results:
232
+
233
+ ```bash
234
+ pnpm submitOnChain:[network] --poll [poll-id] \
235
+ --output-dir ../results/proofs/ \
236
+ --tally-file ../results/tally.json
237
+ ```
238
+
239
+ ### Tally
240
+
241
+ Once the proofs are generated, and results tallied, the results (Tally) are written to a file. Let's take a look at one:
242
+
243
+ ```json
244
+ {
245
+ "maci": "0xd54b47F8e6A1b97F3A84f63c867286272b273b7C",
246
+ "pollId": "0",
247
+ "network": "localhost",
248
+ "chainId": "31337",
249
+ "isQuadratic": true,
250
+ "tallyAddress": "0xD4fbAF1dFe100d07f8Ef73d8c92e93d0Bcf7b45D",
251
+ "newTallyCommitment": "0x2f55cc85f7f141098ba791a9f6a646f8773b9bb4f5852ccc33b5a28e7b0756e5",
252
+ "results": {
253
+ "tally": [
254
+ "9",
255
+ "0",
256
+ "0",
257
+ "0",
258
+ "0",
259
+ "0",
260
+ "0",
261
+ "0",
262
+ "0",
263
+ "0",
264
+ "0",
265
+ "0",
266
+ "0",
267
+ "0",
268
+ "0",
269
+ "0",
270
+ "0",
271
+ "0",
272
+ "0",
273
+ "0",
274
+ "0",
275
+ "0",
276
+ "0",
277
+ "0",
278
+ "0"
279
+ ],
280
+ "salt": "0x2e9cd240b86cf456fa4deced8e7420c45e3c16941d2dcec308f8b6d48264dda3",
281
+ "commitment": "0x296eac2a7289974f23497bebd39e86599d0b7032796fb84dcc1f6bbda38262ca"
282
+ },
283
+ "totalSpentVoiceCredits": {
284
+ "spent": "81",
285
+ "salt": "0x24f57b75c227987727c13d1e83409d70478b42bdc12a4a4df8129c72fbaf5aaf",
286
+ "commitment": "0xb4ebe68b0da828c0b978ddee86ba934b8e215499ac766491f236ad85fd606de"
287
+ },
288
+ "perVoteOptionSpentVoiceCredits": {
289
+ "tally": [
290
+ "81",
291
+ "0",
292
+ "0",
293
+ "0",
294
+ "0",
295
+ "0",
296
+ "0",
297
+ "0",
298
+ "0",
299
+ "0",
300
+ "0",
301
+ "0",
302
+ "0",
303
+ "0",
304
+ "0",
305
+ "0",
306
+ "0",
307
+ "0",
308
+ "0",
309
+ "0",
310
+ "0",
311
+ "0",
312
+ "0",
313
+ "0",
314
+ "0"
315
+ ],
316
+ "salt": "0x2590434ea2d600f7bd2396ba7fa454ad4c975c29424ee481561d9786538a5e48",
317
+ "commitment": "0x54ec996599886da21c4b07c25d1de544292a8b7c38b79726995c869c9e95db"
318
+ }
319
+ }
320
+ ```
321
+
322
+ We observe an array named results, which holds the aggregated votes for each option. Each option corresponds to an index in the array. In the example above, the first option (index 0) received a total of 9 votes, while all other options received no votes
323
+
324
+ The `totalSpentVoiceCredits` object contains the total amount of voice credits spent in the poll. This is the sum of all voice credits spent by all voters, and in quadratic voting, is the sum of the squares of all votes.
325
+
326
+ The `perVoteOptionSpentVoiceCredits` will contain the amount of voice credits spent per vote option. In this case, the first option received 81 voice credits, and every other option received 0 voice credits. This is because there was only one valid vote casted, with a weight of 9. Given the quadratic voting formula, the total amount of voice credits spent is 81.
@@ -0,0 +1,34 @@
1
+ ---
2
+ title: Resources
3
+ description: A collection of resources for better understanding MACI
4
+ sidebar_label: Resources
5
+ sidebar_position: 13
6
+ ---
7
+
8
+ ## Articles
9
+
10
+ - [ethresear](https://ethresear.ch/t/minimal-anti-collusion-infrastructure/5413) - Vitalik Buterin 05/2019
11
+ - [MACI Anonymization](https://ethresear.ch/t/maci-anonymization-using-rerandomizable-encryption/7054) - Kobi Gurkan 03/2020
12
+ - [Release Announcement: MACI 1.0](/blog/maci-1-0-release) - Koh Wei Jie 05/2020
13
+ - [Technical Introduction to MACI 1.0](/blog/maci-1-0-technical-introduction) - Kyle Charbonnet 01/2022
14
+ - [MACI v1.1.1 Release](/blog/maci-v1-1-1-release) - ctrlc03 && chaosma 01/2023
15
+ - [MACI v1.2.0 release post](/blog/maci-v1-2-0-release) - ctrlc03 02/2024
16
+ - [MACI v2.0.0 release post](/blog/2024-v2) - ctrlc03 08/2024
17
+ - [Getting Started With MACI](https://medium.com/@bbaraona/getting-started-with-maci-5cc145d00e04) - Benjamin Barahona 12/04/2024
18
+
19
+ ## Videos
20
+
21
+ - [Overview of MACI](https://www.youtube.com/watch?v=sKuNj_IQVYI) - Koh Wei Jie 05/2020
22
+ - [Making sense of MACI](https://www.youtube.com/watch?v=ooxgPzdaZ_s) - Koh Wei Jie 08/2020
23
+ - [MACI on ZKPodcast](https://www.youtube.com/watch?v=f9nUGPD5I3o) - Koh Wei Jie 12/2020
24
+ - [Anonymity in MACI](https://www.youtube.com/watch?v=X54LaXfJTn4) - Marija Mikić 07/2023
25
+ - [Seeing like a Voting](https://youtu.be/euhugXsTUgY?si=jNhqmvFYD9F0r-tB) - Daehyun 11/2023
26
+ - [MACI - Private Voting](https://www.youtube.com/watch?v=85bZwcQIgEo&t=1382s) - ctrlc03 03/2024
27
+ - [Construyendo votaciones privadas onchain con MACI](https://www.youtube.com/watch?v=3u5VJJsKLfg) - Crisgarner 03/2024
28
+ - [MACI - Starting From Scratch](https://www.youtube.com/watch?v=qVuhWlHnQF0) - Doris Chan 03/2024
29
+ - [MACI Workshop](https://www.youtube.com/watch?v=AimgqnMjG0o) - ctrlc03 04/2024
30
+ - [MACI Starter Kit Demo](https://www.youtube.com/watch?v=pYoBLLtVEoI&t=1s) - Yash 05/2024
31
+ - [The Promise of Blockchain Voting](https://www.youtube.com/watch?v=TQxR7U52ne0) - Sam Richards 06/2024
32
+ - [MACI Tutorial Deploying Contracts and Subgraph](https://www.youtube.com/watch?v=-QA0VB9EUMk) - Crisgarner 09/2024
33
+ - [MACI Tutorial Frontend Deployment 🚀](https://www.youtube.com/watch?v=q0yS8RfwDcw) - Crisgarner 09/2024
34
+ - [Finalizing a MACI Round](https://www.youtube.com/watch?v=nlS3hOC0ljw) - Crisgarner 09/2024
@@ -0,0 +1,4 @@
1
+ {
2
+ "label": "Security",
3
+ "position": 8
4
+ }