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