@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,121 @@
1
+ ---
2
+ slug: maci-v1-2-0-release
3
+ title: MACI v1.2.0 Release
4
+ description: "MACI v1.2.0: Enhancing Blockchain Privacy & Security with Developer-Friendly Updates"
5
+ authors:
6
+ name: ctrlc03
7
+ title: MACI team
8
+ url: https://pse.dev
9
+ image_url: /img/pse-logo-round.png
10
+ tags: [release, audit, security, documentation]
11
+ excerpt: "We are pleased to announce the release of MACI v1.2.0"
12
+ ---
13
+
14
+ # MACI v1.2 Release
15
+
16
+ We are pleased to announce the release of MACI [v1.2.0](https://github.com/privacy-scaling-explorations/maci/releases/tag/v1.2.0)!
17
+
18
+ This is our first release since [MACI v1.1.1](/blog/maci-v1-1-1-release) just over one year ago. This new release focuses on improved developer experience, security, performance and clearer documentation for users looking to learn and use MACI.
19
+
20
+ ## Background
21
+
22
+ MACI - Minimal Anti-Collusion Infrastructure - is an Ethereum application that provides privacy and collusion resistance for on-chain voting. If you're new to MACI, we first recommend reading our [documentation](/docs/introduction) for background information and technical details.
23
+
24
+ ## Refactoring Work
25
+
26
+ We prioritized enhancing MACI's developer experience by refactoring its code, fixing bugs, and improving documentation.
27
+
28
+ Key refactoring activities were:
29
+
30
+ 1. Upgrading libraries to their latest versions and substituting obsolete dependencies with up-to-date and actively maintained alternatives.
31
+ 2. Making the code standardized, modular, well-documented, and uniformly formatted.
32
+ 3. Fixing bugs and community-reported issues.
33
+
34
+ ### Library Updates
35
+
36
+ MACI has relied on custom code and dependencies since its initial implementation, notably from repositories by one of the original MACI developers, [Koh Wei Jie](https://github.com/weijiekoh). We felt that MACI could benefit from a dependency refresh, so we've shifted towards using actively maintained open-source libraries, such as [circomkit](https://github.com/erhant/circomkit) and [zk-kit](https://github.com/privacy-scaling-explorations/zk-kit).
37
+
38
+ Circomkit has become our go-to for circuit-related tasks, such as compiling circuits, generating test zkeys, and unit tests.
39
+
40
+ We've moved reusable circuit logic, like our [Poseidon permutation](https://github.com/privacy-scaling-explorations/zk-kit/tree/main/packages/poseidon-cipher) encryption and decryption code, into zk-kit. This not only benefits MACI through more circuit usage and testing but also supports wider community adoption.
41
+
42
+ These efforts are part of a broader initiative at [Privacy and Scaling Explorations (PSE)](https://pse.dev/) to foster open-source development and contribute to public goods. By aligning MACI with these values, we aim to enhance its utility and encourage collaborative growth. In the coming months, we're committed to extracting more of our circuit logic for broader use ([track progress here](https://github.com/privacy-scaling-explorations/zk-kit/issues/131)) and contributing to projects that align with [our mission](/roadmap#maci-mission--vision).
43
+
44
+ ### Code Refactor
45
+
46
+ We've undergone extensive efforts to clean up MACI's code:
47
+
48
+ - Removed dead and redundant code.
49
+ - Split monolithic files into smaller, logically structured ones.
50
+ - Improved documentation with detailed code comments and tools like ([TypeDoc](https://typedoc.org/) and [solidity-docgen](https://github.com/OpenZeppelin/solidity-docgen)) for automatic doc generation.
51
+ - Enforced strong type safety on the TypeScript components.
52
+ - Optimized and modularized the smart contract code.
53
+ - Extended the test suites.
54
+
55
+ These improvements aim to simplify the onboarding process for new developers, ensuring they can easily navigate and effectively utilize MACI.
56
+
57
+ ## New Features
58
+
59
+ ### Flexible Voting Strategies
60
+
61
+ After years of built-in quadratic voting (QV) in MACI, we now support non-quadratic voting polls. This opens up the door to potential integrations with a wider variety of projects, such as DAO governance applications.
62
+
63
+ The new version of the Tally circuit (specific for non-QV), has reduced constraints, enabling a quicker proof generation process for vote tallying.
64
+
65
+ We invite projects interested in leveraging this secure, on-chain voting mechanism to reach out for potential integrations. We hope to continue to expand support for additional voting methodologies, so please let us know your project's needs!
66
+
67
+ ### New Gatekeeper
68
+
69
+ In our effort to fortify MACI against Sybil attacks, we've integrated an innovative gatekeeper mechanism: [EAS](https://attest.sh/) - you can [view the contract here](https://github.com/privacy-scaling-explorations/maci/blob/v1.2.0/contracts/contracts/gatekeepers/EASGatekeeper.sol).
70
+
71
+ As part of configuring a MACI deployment, the coordinator sets a user signup gatekeeper contract. This contract dictates the criteria a user must pass in order to participate in a poll. For example, user might need to prove ownership of a certain NFT, or prove that they have passed some sort of proof-of-personhood verification.
72
+
73
+ With the addition of this new gatekeeper, EAS (and soon™ [Hats Protocol](https://www.hatsprotocol.xyz/), MACI instances could be configured to e.g. only allow Ethereum accounts with a trusted EAS attestation or those designated with a specific role by the Hats Protocol. These modules open up new avenues for access control strategies.
74
+
75
+ We expect to continue to expand our [gatekeeper capabilities](https://github.com/privacy-scaling-explorations/maci/tree/v1.2.0/contracts/contracts/gatekeepers) and welcome the community to come up with new and innovative ways to grant access to MACI's rounds, helping make MACI more customizable and sybil-resilient. The Hats Protocol gatekeeper is [currently in progress](https://github.com/privacy-scaling-explorations/maci/pull/1191) and will be released soon™ (in v1.2.1).
76
+
77
+ ### Documentation Website
78
+
79
+ We're excited to announce that all MACI documentation has been unified on our new website, [maci.pse.dev](/)!
80
+
81
+ This platform will serve as the definitive resource for all information related to MACI, including [blog](/blog) releases, [documentation](/docs/introduction) updates, and [roadmap](/roadmap) progress. Please report any inconsistencies you may find. As always, we welcome suggestions on how to make it better.
82
+
83
+ ## Security Audit
84
+
85
+ Thanks to thorough reviews by PSE's internal Audit team, clr.fund's developer, [yuetloo](https://github.com/yuetloo), and our core development team, we've identified and addressed several bugs during our recent refactoring efforts. Most notably, a critical bug in MACI v1.x discovered by [Kyle](https://github.com/kcharbo3), which could have allowed coordinators to censor votes, has been [fixed](https://github.com/privacy-scaling-explorations/maci/pull/1170).
86
+
87
+ For more details on our recent audit, please [refer to our audit docs](/docs/security/audit#pse-audit-202402) or [view the full report](/audit_reports/20240223_PSE_Audit_audit_report.pdf).
88
+
89
+ After this audit and the resulting fixes, we feel more confident with MACI and its security.
90
+
91
+ ## Trusted Setup Ceremony
92
+
93
+ Following the successful completion of our [MACI trusted setup ceremony](https://ceremony.pse.dev/projects/Maci%20v1%20Trusted%20Setup%20Ceremony) for [MACI v1.1.1](/blog/maci-v1-1-1-release), we are preparing for a new ceremony to cover the security enhancements added in our v1.2.0 circuits.
94
+
95
+ To accomplish this, we'll leverage the tooling of [P0tion](https://github.com/privacy-scaling-explorations/p0tion), which helps to streamline and automate Groth16 phase2 ceremonies.
96
+
97
+ We'll update this page after the ceremony completes to include the production-ready zkey artifacts. In the meantime, the artifacts for v.1.1.1 can be found on our [website](/docs/security/trusted-setup), and the [`tallyVotes`](https://github.com/privacy-scaling-explorations/maci/blob/dev/circuits/circom/tallyVotes.circom) artifacts can still be used in production.
98
+
99
+ ## Get Involved
100
+
101
+ MACI is deeply committed to our community, through our open initiatives like [public roadmaps](https://github.com/privacy-scaling-explorations/maci/discussions/859), transparent [repository management](https://github.com/privacy-scaling-explorations/maci/discussions/847), and a [public Discord channel](https://discord.com/invite/sF5CT5rzrR) for interaction with our team.
102
+
103
+ With every issue, PR, feature and roadmap iteration, we welcome feedback to ensure that the continued development of MACI reflects your and the community's needs. Keep an eye out on our [documentation](/), [GitHub discussions](https://github.com/privacy-scaling-explorations/maci/discussions) and our official [Twitter/X account](https://twitter.com/zkMACI) for updates.
104
+
105
+ For those looking to contribute directly, report bugs, or offer feedback, our [GitHub repository](https://github.com/privacy-scaling-explorations/maci) is open for issues and discussions. We're eager to assist with your projects or contributions.
106
+
107
+ For practical implementation insights, review our docs as well as the [clr.fund](https://github.com/clrfund/monorepo/) and [QF](https://github.com/quadratic-gardens/qfi) repositories as reference implementations. Both are quadratic funding implementations, a mechanism which otherwise is highly susceptible to collusion and bribery. Most notably, clr.fund is already working on integrating MACI v1.2.0, after having used v0.x until now. You can follow their development effort under this [GitHub branch](https://github.com/clrfund/monorepo/tree/feat/maci-v1).
108
+
109
+ For any other questions or feedback, please reach out to us via [PSE's Discord](https://discord.com/invite/sF5CT5rzrR), in our [`#🗳️-maci` channel](https://https//discord.com/channels/943612659163602974/1164613809730748507). We're excited to connect and collaborate with you!
110
+
111
+ ## References
112
+
113
+ - [MACI GitHub repository](https://github.com/privacy-scaling-explorations/maci)
114
+ - [MACI documentation](/docs/introduction)
115
+ - [A technical introduction to MACI 1.0 - Kyle Charbonnet](/blog/maci-1-0-technical-introduction)
116
+ - [Minimal anti-collusion infrastructure - Vitalik](https://ethresear.ch/t/minimal-anti-collusion-infrastructure/5413)
117
+ - [PSE Discord server](https://discord.com/invite/sF5CT5rzrR)
118
+
119
+ ## Release
120
+
121
+ Here's the link to the new release code in GitHub: [v1.2.0 Release](https://github.com/privacy-scaling-explorations/maci/releases/tag/v1.2.0).
@@ -0,0 +1,96 @@
1
+ ---
2
+ slug: 2024-q2-roadmap
3
+ title: 2024 Q2 Roadmap update
4
+ description: A review of Q1 and our plans for MACI in Q2 2024
5
+ authors:
6
+ name: Sam Richards
7
+ title: MACI team lead
8
+ url: https://x.com/samonchain
9
+ image_url: https://avatars.githubusercontent.com/u/8097623?v=4
10
+ tags: [roadmap, rpgf, qf, qv]
11
+ excerpt: "Glad to have you here! We have a few MACI roadmap updates to share.Before we hop into our Q2 plans, let's take a look at what we did in Q1:"
12
+ ---
13
+
14
+ Greetings anon,
15
+
16
+ Glad to have you here! We have a few MACI roadmap updates to share.
17
+
18
+ Before we hop into our Q2 plans, let's take a look at what we did in Q1:
19
+
20
+ ## Q1 in review
21
+
22
+ In our [kickoff of 2024](/blog/2024-team-roadmap), we aimed at [a few major Q1 goals](https://github.com/privacy-scaling-explorations/maci/discussions/859#discussioncomment-7849385) that all tied together:
23
+
24
+ ### ✅ Release MACI v1.2
25
+
26
+ We completed a significant refactor to simplify the codebase and improve developer experience. After an internal audit and revamped documentation, we released a new MACI version - see our [MACI v1.2 release post](/blog/maci-v1-2-0-release) to read up on the details of that upgrade.
27
+
28
+ ### ✅ Support clr.fund upgrade
29
+
30
+ [clr.fund](https://clr.fund/#/), a quadratic funding (QF) project which has distributed millions of dollars to Ethereum public goods, is the longest-running production application built on MACI (since 2020!). Thanks primarily to the hard work of their core dev [yuetloo](https://github.com/yuetloo), clr.fund successfully upgraded from MACI 0.x to our fresh v1.2 release. Nicely done!
31
+
32
+ ### ✅ Support ETH Latam QF round
33
+
34
+ We teamed up with [ETH Latam](https://ethlatam.org/) to help them run a QF round using the clr.fund stack (running on MACI v1.2). Over 60 conference attendees participated (using [Zupass](https://zupass.org/) tickets as the gatekeeper to the faucet and round) to distribute over 30,000 DAI to public good projects across Central America and the Caribbean - [view the round results](https://qf.ethlatam.org/#/leaderboards/0x86F33909474c0dEf2Cb7F93d2eE0B8aF26112BF6/networks/optimism) and learn more in [ETH Kipu's ETH Latam recap post](https://mirror.xyz/ethlatam.eth/OoDqW3Omy8NbOGosdDQ8XUp_fZjP4sf_s4VHkaPWZXM)!
35
+
36
+ ### ✅ Support ETH Colombia QF round
37
+
38
+ The ETH Colombia team ran a [QF round for their community](https://www.ethcolombia.org/quadratic-funding-ethco-2024-q1) - [view the round results here](https://qf.ethcolombia.org/#/leaderboards/0xa73Ec044b47186646D84D614b8a194dA3bE00260/networks/optimism).
39
+
40
+ ### ✅ Community engagement via events
41
+
42
+ We participated in our first hackathons ([ETHGlobal Circuit Breaker](https://www.youtube.com/live/iTea0pvwUzw?si=HBycM7oXVAc_grb3), [ETHGlobal London](https://ethglobal.com/events/london2024/prizes#ethereum-foundation), [ETH Latam](https://taikai.network/ethlatam/hackathons/honduras/overview), [ETHTaipei](https://taikai.network/en/ethtaipei/hackathons/hackathon-2024/overview) and [ETHDam](https://www.youtube.com/live/Y5b7K058Nvk?si=36P2bBOTnZpmf5B2&t=4568)) and distributed over $10,000 in bounties. We had a blast engaging with hackers from around the world, receiving feedback, and seeing innovative project ideas on MACI come to life. Thank you to all those who participated!
43
+
44
+ ## Q2 Roadmap
45
+
46
+ Now let's look at what we're excited to build over the next few months:
47
+
48
+ ### 🎯 MACI-RPGF
49
+
50
+ [Retroactive Public Goods Funding](https://medium.com/ethereum-optimism/retroactive-public-goods-funding-33c9b7d00f0c) (RPGF) has been building momentum over the past few years and really took the crypto space by storm after [Optimism's recent round of 30 million OP](https://community.optimism.io/docs/governance/retropgf-3/).
51
+
52
+ In February we [proposed MACI as a solution for Optimism's RPGF tech stack](https://gov.optimism.io/t/building-a-private-on-chain-implementation-for-retropgf/7733), thanks to MACI's strong guarantees of correct execution, censorship resistance, privacy, and collusion resistance. Since releasing a demo of our [full-stack MACI-RPGF implementation](https://github.com/privacy-scaling-explorations/maci-rpgf/) in March, we've received positive feedback and interest from various communities in running RPGF rounds on MACI.
53
+
54
+ This quarter we're excited to keep building out MACI-RPGF with additional functionality and improved UX. Our efforts will include supporting community organizers who want to fork and operate MACI-RPGF rounds in production. If you're interested in running a round for your community, [please get in touch](https://qf.pse.dev/apply)!
55
+
56
+ ### 🎯 MACI Coordinator Service
57
+
58
+ From [years of supporting QF rounds on MACI](https://qf.pse.dev/case-studies) we've learned a lot about the pain-points of community organizers. The blunt truth is that many technical barriers still exist - in order to operate a MACI poll (whether in a QF round or a simple voting application), you essentially must be a developer to deploy the smart contracts, execute on-chain transactions, and run tooling to generate zero-knowledge proofs to guarantee the integrity of a MACI poll. This is no trivial feat, and as a result, MACI is simply not a viable option for many communities to use today.
59
+
60
+ We're aiming to change this by building a "Coordinator Service" to simplify the [role of the coordinator](/docs/overview/workflow#coordinator), automate tasks, and remove technical barriers to running MACI-RPGF (and all MACI) rounds. This will include a web interface to deploy and operate MACI instances as well as a server to generate proofs and submit them on-chain. We're confident this tooling will accelerate community adoption by offloading the technical overhead and domain knowledge currently required to use this technology stack. More details to come on this soon!
61
+
62
+ ### 🎯 MACI Core Protocol Improvements
63
+
64
+ After our thorough refactor of MACI's code, which led to the release of v1.2, we're now in position to add new features and improvements to the core protocol. As always, we are open to suggestions from the community, so please let us know what ideas and feature requests you have!
65
+
66
+ Currently, we have a couple of focus areas:
67
+
68
+ **Unconditional Privacy**
69
+
70
+ As of now, MACI's [coordinator](/docs/overview/workflow#coordinator) can track [user key changes](/docs/core-concepts/key-change), which allows them to associate voters with their respective votes, and thus potentially collude with bribers to deanonymize users. We're investigating ways to prevent this possibility. The [3227](https://3327.io/) team implemented a [proof of concept](https://github.com/privacy-scaling-explorations/maci/issues/796) using El-Gamal to remove the link between a new MACI key and their original key. Furthermore, there is a proposal under discussion on how to implement anonymous poll signups, which would provide the same benefits of the El-Gamal protocol, though with a much better user experience.
71
+
72
+ **Deployment Improvements**
73
+
74
+ MACI's deployment process can certainly be made easier and more efficient. We will explore ways to improve this, for instance making it cheaper to deploy MACI by implementing patterns to only deploy contracts once if they can be reused across MACI instances. We aim to make it more user-friendly as well by providing a better interface to deploy MACI instances.
75
+
76
+ ### 🎯 Support Gitcoin Allo protocol integration
77
+
78
+ In our [initial 2024 roadmap](/roadmap) we outlined our plans to engage more with the broader Ethereum ecosystem in order to validate the value of MACI by exploring integrations and gathering input from community developers. Gitcoin is a great example: we've been in discussions with them to explore a MACI integration into their Allo protocol - the smart contracts that power Gitcoin Grants Stack - in order to increase user privacy and bribery resistance in their public good funding infrastructure.
79
+
80
+ We're already in the process of supporting this integration, thanks to [Nick Lionis and Tse Lao and their ETHDam hackathon project](https://taikai.network/cryptocanal/hackathons/ethdam2024/projects/cluxse8cz00pjz3010wbq3thf/idea). We're excited to see this integration come to life in production and to support Gitcoin in their efforts to improve public goods funding on Ethereum!
81
+
82
+ ### 🎯 Support ETHDam hackathon QV round
83
+
84
+ Given the privacy focus of [ETHDam](https://www.ethdam.com/), we're excited to support a private quadratic voting (QV) round for the hackathon, powered by MACI. Conference attendees will use clr.fund to vote on their favorite hackathon projects in order to allocate $10,000 to hackathon projects building novel privacy and security solutions in the ecosystem. The round is live at [ethdamqf.com](https://ethdamqf.com/#/), so stay tuned for results!
85
+
86
+ ### 🎯 MACI starter kit
87
+
88
+ We're teaming up with [Buidl Guild](https://buidlguidl.com/) and the [Scaffold-ETH](https://scaffoldeth.io/) team to build a MACI starter kit: a web app that integrates MACI in order to run polls. We expect this to be a useful template for any developer prototyping on MACI or just looking for a simple reference implementation. Whether you're a dev that prefers reading through code vs. documentation, or you're a builder who merely wants to understand how the MACI user flow works, we hope this will be a great resource for you!
89
+
90
+ ## How does that sound?
91
+
92
+ Questions? Concerns? Ideas? We’d love to hear from you!
93
+
94
+ If there is a feature you think we should work on, or an initiative you'd like to collaborate with us on, please let us know! We welcome input from anyone in the community. The best ways to get in touch are to hop in [our Discord](https://discord.com/invite/sF5CT5rzrR) (`#🗳️-maci` channel), [tag us on X](https://twitter.com/zkmaci) or [create an issue on GitHub](https://github.com/privacy-scaling-explorations/maci/).
95
+
96
+ Onward and upward 🚀
@@ -0,0 +1,169 @@
1
+ ---
2
+ slug: ethdam-bug
3
+ title: ETHDam(n)
4
+ description: A post mortem of the MACI bug that caused a denial of service during the ETHDam Quadratic Funding round
5
+ authors:
6
+ name: ctrlc03
7
+ title: MACI dev
8
+ url: https://x.com/ctrlc03
9
+ image_url: https://avatars.githubusercontent.com/u/93448202?v=4
10
+ tags: [security, bug, babyjubjub, input validation]
11
+ excerpt: "During ETHDam's Quadratic Funding round, run on clr.fund, we discovered a critical bug in MACI. The issue stemmed from the lack of validation on MACI public keys within the [Poll contract]. A user (spoiler alert, it was a self-inflicted denial of service (DoS)) was able to submit a MACI public key which was not a point of the Baby JubJub elliptic curve, and it broke everything."
12
+ ---
13
+
14
+ During [ETHDam's Quadratic Funding round](https://ethdamqf.com/#/), run on [clr.fund](https://clr.fund), we discovered a critical bug in MACI. The issue stemmed from the lack of validation on MACI public keys within the [Poll contract](/docs/developers-references/smart-contracts/solidity-docs/Poll). A user (spoiler alert, it was a self-inflicted denial of service (DoS)) was able to submit a MACI public key which was not a point of the Baby JubJub elliptic curve, and it broke everything.
15
+
16
+ ## So... what happened, really?
17
+
18
+ Well, during the ETHDam round, there was an issue with the subgraph that caused the frontend web app to incorrectly display that the voting period had ended, which prevented users from voting.
19
+
20
+ A quick way for us to identify the issue was to directly call the Poll's [smart contract](https://gnosisscan.io/address/0x37f9dcBd2486eDCa7fF2aaD52f1dd7d7D7d70A7c#code) to submit an invalid vote. If the contract accepted votes, that meant that it was not a MACI issue. Given the contract accepted votes, it immediately helped us confirm that the bug was a frontend issue. What we didn't know at the time was that this vote, as well as its associated key, would cause a denial of service.
21
+
22
+ The message in question can be seen on Gnosis Chain's [block explorer](https://gnosisscan.io/tx/0x69bb877937e95ebeffc5256f59f8fccf92be9d42eb8b560f4e18ed26bc881090). Below is proof that the wallet which submitted the invalid key is from one of our teammates (just in case you thought we'd want to censor it :P).
23
+
24
+ ```json
25
+ {
26
+ "address": "0xc59975735ed4774b3Ee8479D0b5A26388B929a34",
27
+ "msg": "This is proof that I control this wallet and dossed MACI by mistake while doing an invalid vote",
28
+ "sig": "0x8962b66462630f12476d7bdb348f08af574ba40dd32c6f149ea26717830f13f50f4e95574e8fc909dd3dd1e20bcd85ae2c3caaf41bed6b123973353635483b7f1b",
29
+ "version": "2"
30
+ }
31
+ ```
32
+
33
+ One can verify the message using [etherscan](https://etherscan.io/verifiedSignatures#), paste the address, message and signature. Don't take our word for it, verify!
34
+
35
+ The message was sent alongside an invalid MACI public key. As a result, due to how MACI messages are processed, the zk-SNARK circuit failed to generate a proof, which prevented the QF round from finalizing.
36
+
37
+ A MACI public key is (supposedly, at least) a point on the [Baby JubJub elliptic curve](https://eips.ethereum.org/EIPS/eip-2494). The mistake that MACI's code made was to not validate at the smart contract level that the keys accepted as arguments were actually valid points on the curve. At the time the bug was triggered, the two coordinates of the point (x and y) were only checked to be less or equal to the curve [prime order](https://github.com/privacy-scaling-explorations/zk-kit/blob/main/packages/baby-jubjub/src/baby-jubjub.ts#L13).
38
+
39
+ The MACI key in question looked like the below object:
40
+
41
+ ```json
42
+ {
43
+ "x": 1,
44
+ "y": 1
45
+ }
46
+ ```
47
+
48
+ In MACI, messages are (well, **_should be_**) encrypted using a shared key generated using a random keypair and the coordinator's public key. This allows for the coordinator to reverse the process - as long as they have the random public key - and decrypt the message using the same shared key. This is achieved using [Elliptic-curve Diffie–Hellman (ECDH)](https://en.wikipedia.org/wiki/Elliptic-curve_Diffie%E2%80%93Hellman).
49
+
50
+ Shared key generation from the user's side:
51
+
52
+ ```
53
+ ECDH(randomKeyPair.privateKey, coordinatorPublicKey)
54
+ ```
55
+
56
+ Shared key generation from the coordinator's side:
57
+
58
+ ```
59
+ ECDH(coordinatorPrivateKey, randomKeyPair.publicKey)
60
+ ```
61
+
62
+ The `randomKeyPair.publicKey` that was sent as `{x: 1, y: 1}` was eventually passed by the coordinator to a zk-SNARK circuit to try and decrypt the corresponding message and perform further processing.
63
+
64
+ When passed to the circuit, the code would perform the ECDH operation by performing a scalar multiplication between the public and the coordinator private key. This happens inside the [`MessageToCommand`](https://github.com/privacy-scaling-explorations/maci/blob/v1.2.0/circuits/circom/messageToCommand.circom#L41) template, which calls the [`ECDH` template](https://github.com/privacy-scaling-explorations/zk-kit.circom/blob/main/packages/ecdh/src/ecdh.circom). Here, there is a call to [`escalarMulAny`](https://github.com/privacy-scaling-explorations/zk-kit.circom/blob/main/packages/ecdh/src/ecdh.circom#L25) which in turns calls [`SegmentMulAny`](https://github.com/iden3/circomlib/blob/master/circuits/escalarmulany.circom#L154), where we encounter the final call to [`Edwards2Montgomery`](https://github.com/iden3/circomlib/blob/master/circuits/escalarmulany.circom#L78) where the error pops up.
65
+
66
+ Looking inside the [`Edwards2Montgomery`](https://github.com/iden3/circomlib/blob/master/circuits/montgomery.circom#L21-L40) template, we can see the operation that is performed on the public key. In short, the point is [converted](https://en.wikipedia.org/wiki/Montgomery_curve#Equivalence_with_twisted_Edwards_curves) from the Twisted Edwards form to Montgomery form, as it allows for cheaper operations inside the circuit (whereas outside it is represented in its original Twisted Edward form).
67
+
68
+ The equation to convert between the two forms is presented below:
69
+
70
+ ```bash
71
+ 1 + y 1 + y
72
+ [u, v] = [ ------- , ---------- ]
73
+ 1 - y (1 - y)x
74
+
75
+ ```
76
+
77
+ We can see how passing a `y` of 1, the equation would result in a division by zero. Below you can see the full stack trace of the error:
78
+
79
+ ```bash
80
+ Error in template Edwards2Montgomery_349 line: 38
81
+ Error in template SegmentMulAny_362 line: 81
82
+ Error in template EscalarMulAny_364 line: 163
83
+ Error in template Ecdh_365 line: 23
84
+ ```
85
+
86
+ > Please note that passing `x` as 0 would also trigger this error, though within the `EscalarMulAny` template, this case is handled and the G8 point is passed [instead](https://github.com/iden3/circomlib/blob/master/circuits/escalarmulany.circom#L161), preventing an error while generating the proof.
87
+
88
+ Given this issue, we weren't able to complete the proof generation for message processing. It is somewhat good news, as once a message is posted to MACI's smart contracts, it's not possible to censor it even if these messages trigger bugs.
89
+
90
+ ## How was the round saved?
91
+
92
+ After understanding the bug, the team came up with a solution that would both allow EthDAM to pay out projects with cryptographic guarantee of the results, as well as provide a solution that is fully transparent and verifiable. After all, MACI is all about verifiability.
93
+
94
+ Given that the clr.fund round was run using a token with no monetary value (EthDAMToken), instead of spinning up a new round and asking users to re-submit their votes, we opted for an automated solution which would scrap all signups and contribution of this token, as well as all messages, and to re-submit them to the new clr.fund round contracts.
95
+
96
+ This way, voters can validate that all signups and votes were included, and by not submitting this invalid message, being able to generate zk-SNARK proofs and validate publicly the final tally result.
97
+
98
+ The script in question can be found [in a gist](https://gist.github.com/ctrlc03/714bd5dc5cc21456396dd3742801c3cd). In a nutshell, the script pulled all signups from the original round [fundingRound](https://gnosisscan.io/address/0xdc36cb99274e7007864512129202f97637832b61#code) contract, and submitted them on the [new contract](https://gnosisscan.io/address/0xAbCF7403c8806B1DEF9c83D90dd2Ef6bAA5BcbD4), after having approved the new contract to spend all EthDAMToken tokens. Then, it pulls the messages, aside from the invalid one, and posts them to the new [Poll](https://gnosisscan.io/address/0x3A56A74326550f333587Aa25A2D7a2640589A5B4) contract.
99
+
100
+ After this, the EthDAM team was able to complete the tally alongside ZK proofs to be submitted on chain.
101
+
102
+ ## How did we fix MACI?
103
+
104
+ To fix the bug, we added code to validate that a given point is on the curve. The Solidity [library](https://github.com/yondonfu/sol-baby-jubjub), found within the original Baby JubJub paper, was originally developed by [yondonfu](https://github.com/yondonfu) and for sake of simplicity, it was copied over to the MACI's repo. The code needed just a couple of small upgrades to work with more recent Solidity versions (0.8.20).
105
+
106
+ ```solidity
107
+ /**
108
+ * @dev Check if a given point is on the curve
109
+ * (168700x^2 + y^2) - (1 + 168696x^2y^2) == 0
110
+ */
111
+ function isOnCurve(uint256 _x, uint256 _y) internal pure returns (bool) {
112
+ uint256 xSq = mulmod(_x, _x, Q);
113
+ uint256 ySq = mulmod(_y, _y, Q);
114
+ uint256 lhs = addmod(mulmod(A, xSq, Q), ySq, Q);
115
+ uint256 rhs = addmod(1, mulmod(mulmod(D, xSq, Q), ySq, Q), Q);
116
+ return submod(lhs, rhs, Q) == 0;
117
+ }
118
+ ```
119
+
120
+ As seen in the code above, the function will evaluate the Baby JubJub equation using the input public key x and y values. Any value that is not on the curve, will be rejected, as shown below:
121
+
122
+ ```solidity
123
+ // check if the public key is on the curve
124
+ if (!CurveBabyJubJub.isOnCurve(_encPubKey.x, _encPubKey.y)) {
125
+ revert InvalidPubKey();
126
+ }
127
+ ```
128
+
129
+ The bug was fixed with this [PR](https://github.com/privacy-scaling-explorations/maci/pull/1408). On top of preventing such invalid values from being accepted by the contract, we also added more validation across the TypeScript libraries to make it harder for users to make such mistakes.
130
+
131
+ ## Footnote
132
+
133
+ The MACI team would like to first of all thank [EthDAM's team](https://www.ethdam.com/) for their patience while we navigated through this issue, and trusting us with coming up with a transparent solution for the round.
134
+
135
+ Furthermore, we thank [mikerah](https://twitter.com/badcryptobitch) from [HashCloak](https://hashcloak.com/) for helping to review the fix, and their expertise in handling security incidents like this. Together with them, we looked at other repositories using similar code, looking for the same mistake, though we did not find similar protocols where an invalid key would cause a denial of service. If you are a ZK developer reading this, we hope this was a lesson that would help remind us all to always validate user input for future scenarios.
136
+
137
+ Finally, a big thank you to [Raphael](https://x.com/rrtoledo_) for explaining the math behind the issue, and suggesting that full point validation would end up being a much better solution than just not accepting `y = 1`.
138
+
139
+ ## Contract addresses
140
+
141
+ Below is a list of the contract addresses for this EthDAM round. All code is verified on Gnosis's block explorer and can be reviewed.
142
+
143
+ **RoundToken**
144
+
145
+ - [EthDAMToken](https://gnosisscan.io/address/0xBbbe1B8460b5fBC7f43C1dd6929A66F54c1B90ef)
146
+
147
+ **clr.fund Instance**
148
+
149
+ - [clr.fund](https://gnosisscan.io/address/0x55ff8c4dCccE90989b5B173587a0981AA4a84319)
150
+
151
+ **Original round**
152
+
153
+ - [FundingRound](https://gnosisscan.io/address/0xdc36cb99274e7007864512129202f97637832b61#code)
154
+ - [MACI](https://gnosisscan.io/address/0xf5aa8c642bd4eec9c44fe6997a790b57bcd410d5)
155
+ - [Poll](https://gnosisscan.io/address/0x37f9dcBd2486eDCa7fF2aaD52f1dd7d7D7d70A7c)
156
+
157
+ **New Round**
158
+
159
+ - [Funding Round](https://gnosisscan.io/address/0xAbCF7403c8806B1DEF9c83D90dd2Ef6bAA5BcbD4)
160
+ - [MACI](https://gnosisscan.io/address/0x3F08b072570abb12df93A826ee87aDcF08979847)
161
+ - [Poll](https://gnosisscan.io/address/0x3A56A74326550f333587Aa25A2D7a2640589A5B4)
162
+ - [Tally](https://gnosisscan.io/address/0xCbE6241208a329a1b1F205e75ABa19fbaD6c571e)
163
+ - [MessageProcessor](https://gnosisscan.io/address/0xD25C88A92228b5F9171A3622B92f2c757cbFafaE)
164
+
165
+ ## MACI New Version
166
+
167
+ We decided to publish a new version of MACI with the fix (and other changes made since the 1.2 release). The new version is [1.2.1](https://github.com/privacy-scaling-explorations/maci/releases/tag/v1.2.1).
168
+
169
+ Please do not use the 1.2 version of the contracts for any new deployments, as it contains the bug described in this post. All other packages are safe, though 1.2.1 is the recommended version to use.
@@ -0,0 +1,38 @@
1
+ ---
2
+ slug: maci-origins
3
+ title: The Origins of MACI - Vitalik’s Vision for Secure Digital Voting
4
+ description: An introduction to MACI's history
5
+ authors:
6
+ name: Vee
7
+ title: MACI marketing manager
8
+ url: https://github.com/Vee-18
9
+ image_url: /img/pse-logo-round.png
10
+ tags: [maci, voting, history, vitalik]
11
+ excerpt: "Minimal Anti-Collusion Infrastructure (MACI), is making waves in the world of private, digital voting. But where did this technology originate? Vitalik Buterin is the mind that thought of MACI. In this post, we’ll dive into his vision for a more secure and private digital voting system."
12
+ ---
13
+
14
+ Minimal Anti-Collusion Infrastructure (MACI), is making waves in the world of private, digital voting. But where did this technology originate? Vitalik Buterin is the mind that thought of MACI. In this post, we’ll dive into his vision for a more secure and private digital voting system.
15
+
16
+ ## Who is Vitalik Buterin?
17
+
18
+ For those unfamiliar with the name, [Vitalik Buterin](https://vitalik.eth.limo/) is a Russian-Canadian programmer who co-founded Ethereum. Ethereum is a blockchain platform that has been a game-changer in the world of cryptocurrency and beyond. Vitalik’s passion for blockchain technology led him to explore various applications, including digital voting, which eventually culminated in the [proposal](https://ethresear.ch/t/minimal-anti-collusion-infrastructure/5413) of MACI.
19
+
20
+ ## What Inspired MACI?
21
+
22
+ Vitalik was deeply concerned with the issues plaguing traditional and digital voting systems, such as fraud, lack of privacy, and potential manipulation. He imagined a system that could handle digital voting with utmost integrity, transparency, and security, ensuring that people’s votes would genuinely make a difference. This led to the birth of Minimum Anti-Collusion Infrastructure or MACI.
23
+
24
+ ## Breaking Down MACI
25
+
26
+ MACI is a system designed for digital voting that protects against collusion and bribery, while ensuring privacy, authenticity, and that no vote can be censored. How? Through cleverly employing smart contracts on the Ethereum blockchain and something called Zero-Knowledge Proofs (ZKPs). This combination makes sure that no one, aside from a trusted coordinator who helps tally results, can view the votes. However, absolutely no one, not even the coordinator, can tamper with the results.
27
+
28
+ ## The Importance of Privacy
29
+
30
+ One of Vitalik’s major concerns was the privacy of voters. In a world where data is often exposed or misused, the anonymity of a voter is of utmost importance in maintaining the integrity of the voting process. MACI ensures that votes remain a secret, and that only a trusted coordinator has the ability to decrypt them.
31
+
32
+ ## A Democratic Revolution
33
+
34
+ Through MACI, Vitalik sought to revolutionise the democratic process. Imagine a world where communities could make decisions without fear of interference or manipulation. Where funds could be raised and allocated for public goods and services in a fair and transparent way. That’s what MACI is all about.
35
+
36
+ ## Final Thoughts
37
+
38
+ Vitalik’s vision for MACI was not just a technological advancement, but a stride towards a more just and democratic society. Through blockchain technology, he has shown how innovation can be harnessed for the greater good, by protecting the sanctity of each vote. MACI is a testament to how technology can be a powerful tool in upholding democratic values and ensuring that every voice is heard. If you’re keen on learning more, dig in to our documentation [**here**](https://maci.pse.dev/docs/introduction). Also, join us in building our future, connect with our team on [Discord](https://discord.com/invite/sF5CT5rzrR)!
@@ -0,0 +1,85 @@
1
+ ---
2
+ slug: upcoming-grants-2024
3
+ title: Upcoming grants for MACI protocol improvements
4
+ description: Dive into the next MACI protocol changes and improvements.
5
+ authors:
6
+ name: ctrlc03
7
+ title: MACI dev
8
+ url: https://x.com/ctrlc03
9
+ image_url: https://avatars.githubusercontent.com/u/93448202?v=4
10
+ tags: [voting, security, anonymity, roadmap, grants]
11
+ excerpt: "Minimal Anti Collusion Infrastructure (MACI) is a public good that allows one to run secure, private, on-chain voting polls."
12
+ ---
13
+
14
+ Minimal Anti Collusion Infrastructure ([MACI](https://github.com/privacy-scaling-explorations/maci)) is a public good that allows one to run secure, private, on-chain voting polls.
15
+
16
+ Given MACI's open source nature, it's common for our core team to develop new features or to fix issues based on community feedback. However, it's been less common for external contributors to make significant changes to the core protocol.
17
+
18
+ Well, this soon will be a reality thanks to a MACI improvement proposal sent by the [3327](https://3327.io/) team. 3327 is collective of 10+ people working on improving blockchain technologies, with a focus on research and engineering. Their engineering team previously worked on implementing the [ElGamal flow](https://github.com/0x3327/maci/blob/feat/elgamal/docs/elgamal-flow.md) into MACI ([here's a nice presentation on it from Marija Mikić at EthCC [6]](https://www.youtube.com/live/X54LaXfJTn4)). The work described in this post aims to be its direct replacement due to its simplified nature and several additional benefits.
19
+
20
+ This proposal can be divided into two parts:
21
+
22
+ 1. bring unconditional privacy to MACI's voters
23
+ 2. optimise inefficient merkle tree structure holding messages, by replacing it with a hash chain
24
+
25
+ ## 1) Enable unconditional voter privacy
26
+
27
+ Currently with MACI, if a voter performs a [key change](/docs/core-concepts/key-change), the voter's new key would not be anonymous to the coordinator. The coordinator could collude with a bad actor to inform the latter of the key change, as the coordinator would have access to all decrypted messages.
28
+
29
+ The key focus of this improvement is to enable users to be completely anonymous by removing the link between the original signup key and the key used for voting. How would this work? Well, users sign up to vote via the [MACI contract](/docs/developers-references/smart-contracts/MACI), and depending on the [gatekeeper](/docs/developers-references/smart-contracts/Gatekeepers) in use, they'd have to prove that they've passed the entry condition. Now, given knowledge of this key, they can signup with a new key to polls deployed by this same MACI contract.
30
+
31
+ Thus, voters can prove anonymously that they know the preimage of a [`StateLeaf`](/docs/developers-references/typescript-code/typedoc/domainobjs/classes/StateLeaf), by passing this information to a zk-SNARK circuit, and validating this proof within the poll contract when joining with the new key. You might be thinking that everyone knows the preimage of a state leaf, as it's public information that can be taken from the contracts' logs. However, the circuit will not accept the public key directly but would instead take the private key and use it to generate the public key. This way, only users with knowledge of a specific private key can generate a valid inclusion proof.
32
+
33
+ Now after signing up to the Poll with this new key, there will not be any link to the original key, and users will effectively be anonymous. Of course users should ensure that they are using different wallets where possible.
34
+
35
+ Finally, with the use of a nullifier, it will not be possible for the same original key to be used to signup more than once for each new poll.
36
+
37
+ Are there any drawbacks? Well, yes. There will be an extra step for users to register to individual Polls. We aim to offset this cost and additional step soon either with gasless transactions or by moving some logic off-chain.
38
+
39
+ ## 2) Message structure optimisation
40
+
41
+ On top of the improvements to anonymity, the [3327 team](https://3327.io/) aims to also replace the Merkle tree used for storing messages with a [hash chain](https://csrc.nist.gov/glossary/term/hash_chain). Some of the benefits of this approach are:
42
+
43
+ - unlimited number of messages
44
+ - removal of expensive merge operations from the coordinator
45
+ - cheaper to send messages as only one hash is required to update the hash chain
46
+ - less constraints on the circuits due to simplified logic
47
+
48
+ **Unlimited messages**
49
+
50
+ Merkle trees are usually bound by a depth property. Together with the number of leaves per node, we can calculate the max capacity of a tree. For instance, for a binary tree with a depth of 10, we can host up to **2^10** (1024) leaves. On the other hand, hash chains do not have a limit, unless if we wanted to set one, so we technically can support an unlimited number of messages.
51
+
52
+ **Cheaper operations**
53
+
54
+ Hashing the previous hash chain with the message is cheaper than inserting into a Merkle tree. Additionally, removing the need for the coordinator to perform merge operations on the accumulator queues that were used on chain will greatly reduce costs and processing time.
55
+
56
+ **Smaller circuits**
57
+
58
+ As cited in their proposal, processing message inclusion proofs for **k** messages in a tree with height **h** requires **k \* h** hashing operations within the circuit with **2 \* k \* h** signal values for inclusion proofs. Processing messages with chain hashes removes the unnecessary inclusion proofs and requires only **k** hashes to be computed for **k** messages without any extra signals, as the requirement is to prove that the order and inclusion of all messages are correct.
59
+
60
+ ## A call for MACI grant proposals
61
+
62
+ So what does this mean for you, Anon?
63
+
64
+ As an open-source project of [PSE](https://pse.dev) with support from the Ethereum Foundation, MACI is fortunate to have the resources to invest in the maintenance and improvement of the protocol. This means we're able to fund full-time developers as well as allocate grants for various research and development initiatives.
65
+
66
+ We encourage all community members to contribute to the improvement and ongoing development of MACI! After all, our goal is to build the most secure e-voting system, and this cannot be accomplished without all of your support.
67
+
68
+ As a team, we are incredibly excited about this proposal and will continue to work hard to help the [3327 team](https://3327.io/) get this upgrade production-ready over the next 3 months.
69
+
70
+ To contribute to MACI, submit issues, or learn more about it, you can reach out to us either via [Discord](https://discord.com/invite/sF5CT5rzrR) or [GitHub issues](https://github.com/privacy-scaling-explorations/maci/issues/new/choose).
71
+
72
+ If you have an ambitious idea you'd like to work on, reach out to us and we could create a proposal to build together! If you don't yet have a specific idea but are still keen to work on MACI, we have some research ideas which might inspire you and we could collaborate on a grant together. Feel free to explore these ideas below and get in touch:
73
+
74
+ - [MACI coordinator in a TEE](https://github.com/privacy-scaling-explorations/maci/discussions/1385)
75
+ - [Group wise matching](https://github.com/privacy-scaling-explorations/maci/issues/905)
76
+ - [Folding schemes for MACI's circuits](https://github.com/privacy-scaling-explorations/maci/issues/904)
77
+
78
+ ## References
79
+
80
+ - [3327 team](https://3327.io/)
81
+ - [3327 ElGamal flow](https://github.com/0x3327/maci/blob/feat/elgamal/docs/elgamal-flow.md)
82
+ - [3327 ElGamal API](https://github.com/0x3327/maci/blob/feat/elgamal/docs/elgamal-api.md)
83
+ - [Marija Mikić - Anonymity in MACI - EthCC [6]](https://www.youtube.com/live/X54LaXfJTn4)
84
+ - [MACI Original idea](https://ethresear.ch/t/minimal-anti-collusion-infrastructure/5413)
85
+ - [MACI Anonymization](https://ethresear.ch/t/maci-anonymization-using-rerandomizable-encryption/7054)
@@ -0,0 +1,63 @@
1
+ ---
2
+ slug: maci-for-beginners
3
+ title: Understanding MACI - A Beginner's Guide to Private On-Chain Voting
4
+ description: An introduction to MACI's
5
+ authors:
6
+ name: Vee
7
+ title: MACI contributor
8
+ url: https://github.com/Vee-18
9
+ image_url: /img/pse-logo-round.png
10
+ tags: [maci, voting, history, vitalik]
11
+ excerpt: "In this blog post, we’ll give a high-level, beginner friendly introduction of what Minimal Anti-Collusion Infrastructure (MACI) is, and how it could be used in a real-world context. We’ll take you through the essentials of MACI, making complex concepts accessible regardless of your background in the blockchain space."
12
+ ---
13
+
14
+ Hey Anon!
15
+
16
+ In this blog post, we’ll give a high-level, beginner friendly introduction of what Minimal Anti-Collusion Infrastructure (MACI) is, and how it could be used in a real-world context. We’ll take you through the essentials of MACI, making complex concepts accessible regardless of your background in the blockchain space.
17
+
18
+ ## What is MACI?
19
+
20
+ MACI is a cutting-edge solution that ensures private, reliable voting on the blockchain.
21
+
22
+ ## Blockchain Voting Challenges for Beginners
23
+
24
+ On-chain voting is a method of casting votes directly on the blockchain, leveraging its decentralized and transparent nature. While this provides us with censorship resistance and guarantees correct execution, the transparency of blockchains can be a double-edged sword. Given all transaction data is public by default, it means everyone can see how anyone voted. This ensures all votes are correctly counted but the visibility could lead to undue influence on voters' decisions, and potentially opens doors for unethical practices like voter bribery. The challenge, therefore, lies in preserving the privacy of each vote while maintaining the core principles of blockchain: transparency, process integrity, and security.
25
+
26
+ ## How MACI Offers a Solution
27
+
28
+ Minimal Anti-Collusion Infrastructure, or MACI, steps in as an elegant solution to these challenges. Despite operating on-chain, it protects the privacy of voters and votes, thereby significantly reducing the chances of vote manipulation through bribery. How does it achieve this? By employing advanced cryptographic techniques like zero-knowledge proofs (zk-SNARKs), **MACI ensures that while the outcome of the vote is public and transparent, individual voting choices remain private**. For instance, let's say you vote in an election using MACI, you could claim to everyone that you voted for a particular candidate, but in reality, you might have voted for someone else. There's no way for anyone to verify your claim, making bribery less appealing.
29
+
30
+ ## Key Features of MACI
31
+
32
+ MACI isn't just a tool; it's a fortress safeguarding the integrity of on-chain voting. Let's break down its key features:
33
+
34
+ - **Collusion Resistance**: MACI makes it virtually impossible for voters to be swayed by bribes, as they can't prove how they voted.
35
+ - **Privacy**: Your vote is your secret. Only you know where your support lies, thanks to the encryption technology MACI employs.
36
+ - **Uncensorability**: Every vote counts and cannot be blocked, edited or removed, ensuring a fair voting process.
37
+ - **Unforgeability**: Your vote is tied to your unique digital identity, preventing anyone else from casting a vote in your place.
38
+ - **Non-repudiation**: Once cast, your vote is set in stone. You can change your mind and vote again, but you can't erase your previous vote.
39
+ - **Correct Execution**: The final tally is accurate and tamper-proof, ensuring that the true voice of the voting population is heard.
40
+
41
+ These features come together to create a voting environment where your voice is heard, loud and clear, without fear of external influence or manipulation.
42
+
43
+ ## Technical Overview Simplified
44
+
45
+ At its heart, MACI is built on Ethereum, a blockchain platform. This foundation provides a high level of security and trust. The real magic, however, lies in something called zk-SNARKs. Think of zk-SNARKs as a cloak of invisibility for your vote; they hide your voting choices while still guaranteeing the overall vote count to be tallied accurately. This blend of Ethereum's robust framework and the innovative use of zk-SNARKs makes MACI a reliable and secure choice for on-chain voting, ensuring that your vote is both private and counted.
46
+
47
+ If you’re interested in more of the technical details, check out the MACI documentation.
48
+
49
+ ## Real-World Applications and Limitations
50
+
51
+ Imagine a world where funding for public goods, like community projects or open-source software, is decided through fair and transparent voting. This is where MACI shows its true potential. [Quadratic funding](/docs/use-cases/public-goods-funding/quadratic-funding) is already harnessing MACI's capabilities to enhance user privacy and discourage any form of collusion in funding decisions.
52
+
53
+ However, like any system, MACI isn't perfect. Its effectiveness hinges on the honesty of the coordinator – the entity or person overseeing the voting process and tallying the results. A dishonest coordinator could pose risks, but thankfully, MACI is designed to minimise even this possibility, maintaining a high level of integrity in the voting process.
54
+
55
+ ## Conclusion
56
+
57
+ As we've explored, Minimal Anti-Collusion Infrastructure (MACI) stands as a testament to the innovative solutions being developed in the blockchain space, especially for those new to this technology. It addresses the critical need for privacy and fairness in on-chain voting, ensuring that your vote remains your own, free from external pressures and manipulation.
58
+
59
+ Blockchain technology is continually evolving, and with tools like MACI, it's becoming more accessible and trustworthy. Whether you're a blockchain enthusiast, a developer, or someone just starting to explore this exciting field, MACI represents a significant step forward in creating a more democratic and transparent digital world.
60
+
61
+ We encourage you to delve deeper into MACI and the broader world of blockchain by reading through our [documentation](/docs/introduction) and installing MACI. Join us too on our [Discord](https://discord.com/invite/sF5CT5rzrR) to report any bugs or to chat with our team. Your involvement can help shape a future where digital voting is not just secure, but also truly representative of the people's voice.
62
+
63
+ Together, let's embrace these advancements and contribute to a fairer, more transparent digital voting landscape.