@maci-protocol/website 0.0.0-ci.c8b9410 → 0.0.0-ci.c92e3dd

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 (80) hide show
  1. package/blog/2024-02-28-maci-v1.2.0.md +1 -1
  2. package/blog/2025-03-21-roadmap-2025.md +1 -1
  3. package/blog/2025-08-18-maci-aragon-plugin.md +107 -0
  4. package/blog/2025-09-05-maci-coordinator-service.md +167 -0
  5. package/docusaurus.config.ts +7 -1
  6. package/package.json +16 -15
  7. package/versioned_docs/version-v0.x/introduction.md +0 -4
  8. package/versioned_docs/version-v1.2/circuits.md +8 -8
  9. package/versioned_docs/version-v1.2/contributing/contributing.md +4 -4
  10. package/versioned_docs/version-v1.2/deployment.md +1 -1
  11. package/versioned_docs/version-v1.2/integrating.md +1 -1
  12. package/versioned_docs/version-v1.2/key-change.md +1 -1
  13. package/versioned_docs/version-v1.2/poll-types.md +1 -1
  14. package/versioned_docs/version-v1.2/testing-in-detail.md +3 -3
  15. package/versioned_docs/version-v1.2/testing.md +1 -1
  16. package/versioned_docs/version-v1.2/topup.md +1 -1
  17. package/versioned_docs/version-v1.2/typedoc/core/index.md +2 -2
  18. package/versioned_docs/version-v1.2/versioning.md +3 -3
  19. package/versioned_docs/version-v1.2/workflow.md +1 -1
  20. package/versioned_docs/version-v2.x/contributing/contributing.md +4 -4
  21. package/versioned_docs/version-v2.x/core-concepts/key-change.md +1 -1
  22. package/versioned_docs/version-v2.x/core-concepts/merkle-trees.md +1 -1
  23. package/versioned_docs/version-v2.x/core-concepts/poll-types.md +1 -1
  24. package/versioned_docs/version-v2.x/core-concepts/workflow.md +1 -1
  25. package/versioned_docs/version-v2.x/guides/integrating.md +1 -1
  26. package/versioned_docs/version-v2.x/guides/testing/testing-in-detail.md +3 -3
  27. package/versioned_docs/version-v2.x/guides/testing/testing.md +1 -1
  28. package/versioned_docs/version-v2.x/processes/versioning.md +3 -3
  29. package/versioned_docs/version-v2.x/supported-networks/deployed-contracts.md +7 -7
  30. package/versioned_docs/version-v2.x/technical-references/smart-contracts/AccQueue.md +1 -1
  31. package/versioned_docs/version-v2.x/technical-references/smart-contracts/MACI.md +1 -1
  32. package/versioned_docs/version-v2.x/technical-references/smart-contracts/MessageProcessor.md +1 -1
  33. package/versioned_docs/version-v2.x/technical-references/smart-contracts/Params.md +1 -1
  34. package/versioned_docs/version-v2.x/technical-references/smart-contracts/Poll.md +1 -1
  35. package/versioned_docs/version-v2.x/technical-references/smart-contracts/PollFactory.md +1 -1
  36. package/versioned_docs/version-v2.x/technical-references/smart-contracts/Tally.md +1 -1
  37. package/versioned_docs/version-v2.x/technical-references/smart-contracts/VkRegistry.md +1 -1
  38. package/versioned_docs/version-v2.x/technical-references/smart-contracts/VoiceCreditProxy.md +1 -1
  39. package/versioned_docs/version-v2.x/technical-references/zk-snark-circuits/processMessages.md +4 -4
  40. package/versioned_docs/version-v2.x/technical-references/zk-snark-circuits/tallyVotes.md +2 -2
  41. package/versioned_docs/version-v2.x/technical-references/zk-snark-circuits/zk-snark-circuits.md +3 -3
  42. package/versioned_docs/version-v3.x/contributing/contributing.md +11 -5
  43. package/versioned_docs/version-v3.x/core-concepts/key-change.md +1 -1
  44. package/versioned_docs/version-v3.x/core-concepts/maci-keys.md +1 -1
  45. package/versioned_docs/version-v3.x/core-concepts/poll-types.md +31 -7
  46. package/versioned_docs/version-v3.x/core-concepts/polls.md +31 -7
  47. package/versioned_docs/version-v3.x/core-concepts/spec.md +2 -2
  48. package/versioned_docs/version-v3.x/core-concepts/workflow.md +2 -2
  49. package/versioned_docs/version-v3.x/guides/compile-circuits.md +31 -15
  50. package/versioned_docs/version-v3.x/guides/integrating.md +2 -2
  51. package/versioned_docs/version-v3.x/guides/sdk.md +121 -0
  52. package/versioned_docs/version-v3.x/guides/testing/testing-in-detail.md +3 -3
  53. package/versioned_docs/version-v3.x/guides/testing/testing-introduction.md +38 -6
  54. package/versioned_docs/version-v3.x/guides/troubleshooting.md +53 -8
  55. package/versioned_docs/version-v3.x/processes/versioning.md +3 -3
  56. package/versioned_docs/version-v3.x/quick-start.md +3 -3
  57. package/versioned_docs/version-v3.x/resources.md +1 -0
  58. package/versioned_docs/version-v3.x/security/trusted-setup.md +36 -36
  59. package/versioned_docs/version-v3.x/supported-networks/costs.md +725 -0
  60. package/versioned_docs/version-v3.x/supported-networks/deployed-contracts.md +8 -8
  61. package/versioned_docs/version-v3.x/supported-networks/supported-networks.md +16 -0
  62. package/versioned_docs/version-v3.x/technical-references/coordinator-service/index.md +15 -1
  63. package/versioned_docs/version-v3.x/technical-references/coordinator-service/installation.md +5 -33
  64. package/versioned_docs/version-v3.x/technical-references/coordinator-service/usage.md +64 -0
  65. package/versioned_docs/version-v3.x/technical-references/smart-contracts/MACI.md +2 -2
  66. package/versioned_docs/version-v3.x/technical-references/smart-contracts/MessageProcessor.md +1 -1
  67. package/versioned_docs/version-v3.x/technical-references/smart-contracts/Params.md +1 -1
  68. package/versioned_docs/version-v3.x/technical-references/smart-contracts/Policies.md +1 -1
  69. package/versioned_docs/version-v3.x/technical-references/smart-contracts/Poll.md +1 -1
  70. package/versioned_docs/version-v3.x/technical-references/smart-contracts/PollFactory.md +1 -1
  71. package/versioned_docs/version-v3.x/technical-references/smart-contracts/Tally.md +2 -2
  72. package/versioned_docs/version-v3.x/technical-references/smart-contracts/VkRegistry.md +4 -4
  73. package/versioned_docs/version-v3.x/technical-references/smart-contracts/VoiceCreditProxy.md +1 -1
  74. package/versioned_docs/version-v3.x/technical-references/technical-references.md +8 -8
  75. package/versioned_docs/version-v3.x/technical-references/zk-snark-circuits/joinPoll.md +1 -1
  76. package/versioned_docs/version-v3.x/technical-references/zk-snark-circuits/processMessages.md +69 -5
  77. package/versioned_docs/version-v3.x/technical-references/zk-snark-circuits/setup.md +3 -3
  78. package/versioned_docs/version-v3.x/technical-references/zk-snark-circuits/tallyVotes.md +3 -3
  79. package/versioned_docs/version-v3.x/technical-references/zk-snark-circuits/utilities.md +2 -2
  80. package/versioned_docs/version-v3.x/technical-references/zk-snark-circuits/zk-snark-circuits.md +3 -3
@@ -65,7 +65,7 @@ Therefore, even if a coordinator is corrupt, they are unable to change a user’
65
65
 
66
66
  To explain the MACI workflow, let's give a quick overview of the key smart contracts.
67
67
 
68
- See our [smart contract docs](/docs/v1.2/contracts) or our [contract source code](https://github.com/privacy-scaling-explorations/maci/tree/dev/contracts/contracts) for a more in-depth explanation of all smart contracts.
68
+ See our [smart contract docs](/docs/v1.2/contracts) or our [contract source code](https://github.com/privacy-scaling-explorations/maci/tree/main/contracts/contracts) for a more in-depth explanation of all smart contracts.
69
69
 
70
70
  ### MACI.sol
71
71
 
@@ -57,13 +57,13 @@ Pull requests are great if you want to add a feature or fix a bug. Here's a quic
57
57
 
58
58
  7. Make the test pass.
59
59
 
60
- 8. Commit your changes. Please make sure your forked `dev` branch is synced as well feature/fix branch and there are no "temp" commits (like wip, fix typo/lint/types and etc). We recommend to squash the feature/fix branch commits before creating PR. You can use this command for it:
60
+ 8. Commit your changes. Please make sure your forked `main` branch is synced as well feature/fix branch and there are no "temp" commits (like wip, fix typo/lint/types and etc). We recommend to squash the feature/fix branch commits before creating PR. You can use this command for it:
61
61
 
62
62
  ```bash
63
- git reset $(git merge-base dev $(git rev-parse --abbrev-ref HEAD))
63
+ git reset $(git merge-base main $(git rev-parse --abbrev-ref HEAD))
64
64
  ```
65
65
 
66
- 9. Push to your fork and submit a pull request on our `dev` branch. Please provide us with some explanation of why you made the changes you made. For new features make sure to explain a standard use case to us.
66
+ 9. Push to your fork and submit a pull request on our `main` branch. Please provide us with some explanation of why you made the changes you made. For new features make sure to explain a standard use case to us.
67
67
 
68
68
  10. Link any issues that the PR is addressing as described in our processes documentation.
69
69
 
@@ -131,7 +131,7 @@ Just as in the subject, use the imperative, present tense: "change" not "changed
131
131
 
132
132
  ### Branch rules
133
133
 
134
- - Branches should generally be created off of the base branch (`dev` )
134
+ - Branches should generally be created off of the base branch (`main` )
135
135
  - Avoid long descriptive names for long-lived branches
136
136
  - Use kebab-case (no CamelCase)
137
137
  - Use grouping tokens (words) at the beginning of your branch names (in a similar way to the `type` of commit)
@@ -175,5 +175,5 @@ expect(stateLeaf2.pubKey.equals(user2Keypair.pubKey)).to.eq(true);
175
175
  We see that is important that we set the final message (the one with the new vote) with nonce 1, as this vote would be counted as the first vote.
176
176
 
177
177
  :::info
178
- Tests related to key changes have been added to the [core package](https://github.com/privacy-scaling-explorations/maci/blob/dev/core/ts/__tests__/) and to the [cli package](https://github.com/privacy-scaling-explorations/maci/blob/dev/cli/tests/).
178
+ Tests related to key changes have been added to the [core package](https://github.com/privacy-scaling-explorations/maci/blob/main/core/ts/__tests__/) and to the [cli package](https://github.com/privacy-scaling-explorations/maci/blob/main/cli/tests/).
179
179
  :::
@@ -5,7 +5,7 @@ sidebar_label: Merkle Trees
5
5
  sidebar_position: 5
6
6
  ---
7
7
 
8
- MACI uses different types of merkle trees to store and manage data. On chain, a [LazyIMT](https://github.com/privacy-scaling-explorations/zk-kit.solidity/tree/main/packages/lazy-imt) is used to store user's state leaves, and an [AccQueue](https://github.com/privacy-scaling-explorations/maci/blob/dev/packages/contracts/contracts/trees/AccQueue.sol) to store user's messages.
8
+ MACI uses different types of merkle trees to store and manage data. On chain, a [LazyIMT](https://github.com/privacy-scaling-explorations/zk-kit.solidity/tree/main/packages/lazy-imt) is used to store user's state leaves, and an [AccQueue](https://github.com/privacy-scaling-explorations/maci/blob/main/packages/contracts/contracts/trees/AccQueue.sol) to store user's messages.
9
9
 
10
10
  ## Accumulator queue
11
11
 
@@ -11,7 +11,7 @@ This document will explain how to use each of these options. Hardhat tasks are t
11
11
 
12
12
  ## Quadratic Voting
13
13
 
14
- MACI has always worked with quadratic voting. Users signing up to MACI are assigned a number of voice credits based on certain conditions (enforced by the [initial voice credit proxy contract](https://github.com/privacy-scaling-explorations/maci/blob/dev/contracts/contracts/initialVoiceCreditProxy/InitialVoiceCreditProxy.sol)), and after each vote, the number of voice credits is reduced by the square of the weight of the vote casted. For instance, if the vote weight is 5, a user must have at least 25 voice credits to cast the vote.
14
+ MACI has always worked with quadratic voting. Users signing up to MACI are assigned a number of voice credits based on certain conditions (enforced by the [initial voice credit proxy contract](https://github.com/privacy-scaling-explorations/maci/blob/main/contracts/contracts/initialVoiceCreditProxy/InitialVoiceCreditProxy.sol)), and after each vote, the number of voice credits is reduced by the square of the weight of the vote casted. For instance, if the vote weight is 5, a user must have at least 25 voice credits to cast the vote.
15
15
 
16
16
  To run a poll with quadratic voting, the coordinator must deploy the Poll with the mode set to quadratic voting.
17
17
 
@@ -65,7 +65,7 @@ Therefore, even if a coordinator is corrupt, they are unable to change a user’
65
65
 
66
66
  To explain the MACI workflow, let's give a quick overview of the key smart contracts.
67
67
 
68
- See our [smart contract docs](/docs/category/smart-contracts) or our [contract source code](https://github.com/privacy-scaling-explorations/maci/tree/dev/contracts/contracts) for a more in-depth explanation of all smart contracts.
68
+ See our [smart contract docs](/docs/category/smart-contracts) or our [contract source code](https://github.com/privacy-scaling-explorations/maci/tree/main/contracts/contracts) for a more in-depth explanation of all smart contracts.
69
69
 
70
70
  ### MACI.sol
71
71
 
@@ -41,7 +41,7 @@ function signUp(
41
41
 
42
42
  ## InitialVoiceCreditProxy
43
43
 
44
- If you'd like to extend the functionality of how votes are distributed among users, you need to extend [InitialVoiceCreditProxy](https://github.com/privacy-scaling-explorations/maci/blob/dev/contracts/contracts/initialVoiceCreditProxy/InitialVoiceCreditProxy.sol) contract. You can see our [basic example](https://github.com/privacy-scaling-explorations/maci/blob/dev/contracts/contracts/initialVoiceCreditProxy/ConstantInitialVoiceCreditProxy.sol) how it's implemented for constant distribution.
44
+ If you'd like to extend the functionality of how votes are distributed among users, you need to extend [InitialVoiceCreditProxy](https://github.com/privacy-scaling-explorations/maci/blob/main/contracts/contracts/initialVoiceCreditProxy/InitialVoiceCreditProxy.sol) contract. You can see our [basic example](https://github.com/privacy-scaling-explorations/maci/blob/main/contracts/contracts/initialVoiceCreditProxy/ConstantInitialVoiceCreditProxy.sol) how it's implemented for constant distribution.
45
45
 
46
46
  ```ts
47
47
  contract ConstantInitialVoiceCreditProxy is InitialVoiceCreditProxy {
@@ -165,7 +165,7 @@ Within the circuits folder, there are a number of tests that are used to verify
165
165
 
166
166
  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.
167
167
 
168
- All of the tests run using test parameters, usually `10, 2, 1, 2`, aside from the tests inside: [`ceremonyParam`](https://github.com/privacy-scaling-explorations/maci/blob/dev/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).
168
+ All of the tests run using test parameters, usually `10, 2, 1, 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).
169
169
 
170
170
  ### Core
171
171
 
@@ -173,7 +173,7 @@ The core package contains a number of tests that are used to verify that the cor
173
173
 
174
174
  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.
175
175
 
176
- 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 `processMessage` and `tallyVotes`. You will find them in separate files, with e2e being [here](https://github.com/privacy-scaling-explorations/maci/blob/dev/core/ts/__tests__/e2e.test.ts) and unit tests in the other files.
176
+ 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 `processMessage` and `tallyVotes`. 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.
177
177
 
178
178
  ### Domainobjs/Crypto tests
179
179
 
@@ -181,7 +181,7 @@ These tests are used to verify that MACI's primitives such as private keys work
181
181
 
182
182
  ## "Manual" Testing
183
183
 
184
- 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/dev/cli/testScript.sh) inside the cli folder which can be used.
184
+ 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/cli/testScript.sh) inside the cli folder which can be used.
185
185
 
186
186
  This script contains a number of actions which touch all of the parts of MACI, and resemble exactly what other e2e tests do.
187
187
 
@@ -87,7 +87,7 @@ circuits.
87
87
  Note the locations of the `.zkey` files as the CLI requires them as
88
88
  command-line flags.
89
89
 
90
- For testing purposes you can download the required artifacts using the [`download-zkeys:test`](https://github.com/privacy-scaling-explorations/maci/blob/dev/package.json#L15). The script will place all required artifacts inside the `cli/zkeys` folder.
90
+ 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.
91
91
 
92
92
  You can run the script directly with bash or use pnpm: `pnpm run download:test-zkeys` from the monorepo root.
93
93
 
@@ -19,7 +19,7 @@ MACI follows the [Semantic Versioning Specification (SemVer)](https://semver.org
19
19
 
20
20
  All MACI packages are organized in our monorepo and follow a global release approach, meaning that all packages have the same version.
21
21
 
22
- Currently, MACI core team manually decides when to release and what the version should be. Packages are released [automatically via CI](https://github.com/privacy-scaling-explorations/maci/blob/dev/.github/workflows/release.yml) when a new tag is created in GitHub. [You can view our releases and tags in GitHub](https://github.com/privacy-scaling-explorations/maci/releases).
22
+ Currently, MACI core team manually decides when to release and what the version should be. Packages are released [automatically via CI](https://github.com/privacy-scaling-explorations/maci/blob/main/.github/workflows/release.yml) when a new tag is created in GitHub. [You can view our releases and tags in GitHub](https://github.com/privacy-scaling-explorations/maci/releases).
23
23
 
24
24
  ## MACI Release Process
25
25
 
@@ -37,10 +37,10 @@ Version number '1.2.3' is used here as an example. You should replace the versio
37
37
  git clone https://github.com/privacy-scaling-explorations/maci
38
38
  ```
39
39
 
40
- 3. Switch to the `dev` branch:
40
+ 3. Switch to the `main` branch:
41
41
 
42
42
  ```
43
- git checkout dev
43
+ git checkout main
44
44
  ```
45
45
 
46
46
  4. Install required dependencies:
@@ -7,14 +7,14 @@ sidebar_position: 2
7
7
 
8
8
  There are a number of MACI's smart contracts which can be re-used by different deployments. These are the following:
9
9
 
10
- - [VkRegistry](https://github.com/privacy-scaling-explorations/maci/blob/dev/contracts/contracts/VkRegistry.sol)
11
- - [PoseidonHashers](https://github.com/privacy-scaling-explorations/maci/blob/dev/contracts/contracts/crypto/Hasher.sol)
12
- - [PollFactory](https://github.com/privacy-scaling-explorations/maci/blob/dev/contracts/contracts/PollFactory.sol)
13
- - [MessageProcessorFactory](https://github.com/privacy-scaling-explorations/maci/blob/dev/contracts/contracts/MessageProcessorFactory.sol)
14
- - [TallyFactory](https://github.com/privacy-scaling-explorations/maci/blob/dev/contracts/contracts/TallyFactory.sol)
15
- - [Verifier](https://github.com/privacy-scaling-explorations/maci/blob/dev/contracts/contracts/crypto/Verifier.sol)
10
+ - [VkRegistry](https://github.com/privacy-scaling-explorations/maci/blob/main/contracts/contracts/VkRegistry.sol)
11
+ - [PoseidonHashers](https://github.com/privacy-scaling-explorations/maci/blob/main/contracts/contracts/crypto/Hasher.sol)
12
+ - [PollFactory](https://github.com/privacy-scaling-explorations/maci/blob/main/contracts/contracts/PollFactory.sol)
13
+ - [MessageProcessorFactory](https://github.com/privacy-scaling-explorations/maci/blob/main/contracts/contracts/MessageProcessorFactory.sol)
14
+ - [TallyFactory](https://github.com/privacy-scaling-explorations/maci/blob/main/contracts/contracts/TallyFactory.sol)
15
+ - [Verifier](https://github.com/privacy-scaling-explorations/maci/blob/main/contracts/contracts/crypto/Verifier.sol)
16
16
  - [FreeForAllGatekeeper](https://github.com/privacy-scaling-explorations/maci/blob/v2.5.0/packages/contracts/contracts/gatekeepers/FreeForAllGatekeeper.sol)
17
- - [ConstantInitialVoiceCreditProxy](https://github.com/privacy-scaling-explorations/maci/blob/dev/contracts/contracts/initialVoiceCreditProxy/ConstantInitialVoiceCreditProxy.sol) - if you are happy to work with a fixed amount of credits
17
+ - [ConstantInitialVoiceCreditProxy](https://github.com/privacy-scaling-explorations/maci/blob/main/contracts/contracts/initialVoiceCreditProxy/ConstantInitialVoiceCreditProxy.sol) - if you are happy to work with a fixed amount of credits
18
18
 
19
19
  VkRegistries can be re-used by different protocols to share the same set of verifying keys. Please be advised that you should be verifying that those verifying keys are the ones that have undergone a trusted setup ceremony.
20
20
 
@@ -6,7 +6,7 @@ sidebar_position: 1
6
6
  ---
7
7
 
8
8
  :::info
9
- Code location: [AccQueue.sol](https://github.com/privacy-scaling-explorations/maci/blob/dev/contracts/contracts/trees/AccQueue.sol)
9
+ Code location: [AccQueue.sol](https://github.com/privacy-scaling-explorations/maci/blob/main/contracts/contracts/trees/AccQueue.sol)
10
10
  :::
11
11
 
12
12
  The AccQueue contract represents a Merkle Tree where each leaf insertion only updates a subtree. To obtain the main tree root, the subtrees must be merged together by the contract owner. This requires at least two operations, a `mergeSubRoots` and a `merge`.
@@ -6,7 +6,7 @@ sidebar_position: 1
6
6
  ---
7
7
 
8
8
  :::info
9
- Code location: [MACI.sol](https://github.com/privacy-scaling-explorations/maci/blob/dev/contracts/contracts/MACI.sol)
9
+ Code location: [MACI.sol](https://github.com/privacy-scaling-explorations/maci/blob/main/contracts/contracts/MACI.sol)
10
10
  :::
11
11
 
12
12
  `MACI.sol` is the core contract of the project, as it provides the base layer for user signups and Polls to be created.
@@ -6,7 +6,7 @@ sidebar_position: 4
6
6
  ---
7
7
 
8
8
  :::info
9
- Code location: [MessageProcessor.sol](https://github.com/privacy-scaling-explorations/maci/blob/dev/contracts/contracts/MessageProcessor.sol)
9
+ Code location: [MessageProcessor.sol](https://github.com/privacy-scaling-explorations/maci/blob/main/contracts/contracts/MessageProcessor.sol)
10
10
  :::
11
11
 
12
12
  This contract is used to prepare parameters for the zk-SNARK circuits as well as for verifying proofs. It should be deployed alongside a `Poll` and ownership assigned to the coordinator.
@@ -6,7 +6,7 @@ sidebar_position: 9
6
6
  ---
7
7
 
8
8
  :::info
9
- Code location: [Params.sol](https://github.com/privacy-scaling-explorations/maci/blob/dev/contracts/contracts/utils/Params.sol)
9
+ Code location: [Params.sol](https://github.com/privacy-scaling-explorations/maci/blob/main/contracts/contracts/utils/Params.sol)
10
10
  :::
11
11
 
12
12
  A contract holding three structs:
@@ -6,7 +6,7 @@ sidebar_position: 2
6
6
  ---
7
7
 
8
8
  :::info
9
- Code location: [Poll.sol](https://github.com/privacy-scaling-explorations/maci/blob/dev/contracts/contracts/Poll.sol)
9
+ Code location: [Poll.sol](https://github.com/privacy-scaling-explorations/maci/blob/main/contracts/contracts/Poll.sol)
10
10
  :::
11
11
 
12
12
  This contract allows users to submit their votes.
@@ -6,7 +6,7 @@ sidebar_position: 3
6
6
  ---
7
7
 
8
8
  :::info
9
- Code location: [PollFactory.sol](https://github.com/privacy-scaling-explorations/maci/blob/dev/contracts/contracts/PollFactory.sol)
9
+ Code location: [PollFactory.sol](https://github.com/privacy-scaling-explorations/maci/blob/main/contracts/contracts/PollFactory.sol)
10
10
  :::
11
11
 
12
12
  `PollFactory` is a smart contract that is used to deploy new Polls. This is used by MACI inside the `deployPoll` function.
@@ -6,7 +6,7 @@ sidebar_position: 5
6
6
  ---
7
7
 
8
8
  :::info
9
- Code location: [Tally.sol](https://github.com/privacy-scaling-explorations/maci/blob/dev/contracts/contracts/Tally.sol)
9
+ Code location: [Tally.sol](https://github.com/privacy-scaling-explorations/maci/blob/main/contracts/contracts/Tally.sol)
10
10
  :::
11
11
 
12
12
  The `Tally` contract is used by the coordinator to submit commitments to the tally results via the `tallyVotes` function. This is done in batches and the final commitment can be used by the users to verify the validity of the results.
@@ -6,7 +6,7 @@ sidebar_position: 8
6
6
  ---
7
7
 
8
8
  :::info
9
- Code location: [VkRegistry.sol](https://github.com/privacy-scaling-explorations/maci/blob/dev/contracts/contracts/VkRegistry.sol)
9
+ Code location: [VkRegistry.sol](https://github.com/privacy-scaling-explorations/maci/blob/main/contracts/contracts/VkRegistry.sol)
10
10
  :::
11
11
 
12
12
  The VkRegistry is a contract that holds the verifying keys for the zk-SNARK circuits. It holds two different sets of keys:
@@ -6,7 +6,7 @@ sidebar_position: 7
6
6
  ---
7
7
 
8
8
  :::info
9
- Code location: [InitialVoiceCreditProxy](https://github.com/privacy-scaling-explorations/maci/tree/dev/contracts/contracts/initialVoiceCreditProxy)
9
+ Code location: [InitialVoiceCreditProxy](https://github.com/privacy-scaling-explorations/maci/tree/main/contracts/contracts/initialVoiceCreditProxy)
10
10
  :::
11
11
 
12
12
  The VoiceCreditProxy contract is used to assign voice credits to users. Whichever implementation should the MACI deployers use, this must implement a view function that returns the balance for a user, such as the one below:
@@ -5,11 +5,11 @@ sidebar_label: Process Messages Circuit
5
5
  sidebar_position: 3
6
6
  ---
7
7
 
8
- [**Repo link**](https://github.com/privacy-scaling-explorations/maci/blob/dev/circuits/circom/core)
8
+ [**Repo link**](https://github.com/privacy-scaling-explorations/maci/blob/main/circuits/circom/core)
9
9
 
10
10
  This circuit allows the coordinator to prove that they have correctly processed each message in reverse order, in a consecutive batch of 5 ^ msgBatchDepth messages to the respective state leaf within the state tree. Coordinators would use this circuit to prove correct execution at the end of each Poll.
11
11
 
12
- The [`processMessages`](https://github.com/privacy-scaling-explorations/maci/blob/dev/circuits/circom/core/qv/processMessages.circom) circuit will try to decrypt the messages, and based on the content of the message, update within itself the trees, to generate a proof that the coordinator's off-chain processing was done correctly. In other words, the circuit takes a final state, an initial state, and the leaves (messages and user signups) - it processes these messages via the different state transitions to finally check that the expected state is correct.
12
+ The [`processMessages`](https://github.com/privacy-scaling-explorations/maci/blob/main/circuits/circom/core/qv/processMessages.circom) circuit will try to decrypt the messages, and based on the content of the message, update within itself the trees, to generate a proof that the coordinator's off-chain processing was done correctly. In other words, the circuit takes a final state, an initial state, and the leaves (messages and user signups) - it processes these messages via the different state transitions to finally check that the expected state is correct.
13
13
  The pre-requisites for this circuit are:
14
14
 
15
15
  - the related Poll has ended
@@ -21,7 +21,7 @@ This circuit requires the coordinator's private key, hence a proof for this circ
21
21
  ![ProcessMessages](/img/circuits/processMessages_2_0.svg)
22
22
 
23
23
  :::info
24
- A version working with non quadratic voting (non-qv) is also [available](https://github.com/privacy-scaling-explorations/maci/blob/dev/circuits/circom/core/non-qv/processMessages.circom). This version is called `processMessagesNonQV` and is to be used when the Poll is not using the quadratic voting feature. Note that by default MACI works with quadratic voting.
24
+ A version working with non quadratic voting (non-qv) is also [available](https://github.com/privacy-scaling-explorations/maci/blob/main/circuits/circom/core/non-qv/processMessages.circom). This version is called `processMessagesNonQV` and is to be used when the Poll is not using the quadratic voting feature. Note that by default MACI works with quadratic voting.
25
25
  :::
26
26
 
27
27
  #### Parameters
@@ -93,7 +93,7 @@ A simplified example using a tree of arity 2:
93
93
 
94
94
  To prove that `a...d` are leaves of the tree with root `r`, we prove that the leaves have the subroot `s` with depth 2, and _then_ prove that `s` is a member of `r` at depth 1.
95
95
 
96
- The implementation for this is in the `QuinBatchLeavesExists` circuit in `https://github.com/privacy-scaling-explorations/maci/blob/dev/circuits/circom/trees/incrementalQuinTree.circom`.
96
+ The implementation for this is in the `QuinBatchLeavesExists` circuit in `https://github.com/privacy-scaling-explorations/maci/blob/main/circuits/circom/trees/incrementalQuinTree.circom`.
97
97
 
98
98
  This method requires fewer circuit constraints than if we verified a Merkle proof for each leaf.
99
99
 
@@ -5,7 +5,7 @@ sidebar_label: Tally Votes Circuit
5
5
  sidebar_position: 4
6
6
  ---
7
7
 
8
- [**Repo link**](https://github.com/privacy-scaling-explorations/maci/blob/dev/circuits/circom/core)
8
+ [**Repo link**](https://github.com/privacy-scaling-explorations/maci/blob/main/circuits/circom/core)
9
9
 
10
10
  #### Parameters
11
11
 
@@ -18,7 +18,7 @@ sidebar_position: 4
18
18
  ![TallyVotes](/img/circuits/tallyVotes.svg)
19
19
 
20
20
  :::info
21
- A version working with non quadratic voting (non-qv) is also [available](https://github.com/privacy-scaling-explorations/maci/blob/dev/circuits/circom/core/non-qv/tallyVotes.circom). This version is called `tallyVotesNonQv` and is to be used when the Poll is not using the quadratic voting feature. Note that by default MACI works with quadratic voting.
21
+ A version working with non quadratic voting (non-qv) is also [available](https://github.com/privacy-scaling-explorations/maci/blob/main/circuits/circom/core/non-qv/tallyVotes.circom). This version is called `tallyVotesNonQv` and is to be used when the Poll is not using the quadratic voting feature. Note that by default MACI works with quadratic voting.
22
22
  :::
23
23
 
24
24
  #### Input signals
@@ -5,10 +5,10 @@ sidebar_label: zk-SNARK Circuits
5
5
  sidebar_position: 1
6
6
  ---
7
7
 
8
- MACI has two main zk-SNARK [circuits](https://github.com/privacy-scaling-explorations/maci/tree/dev/circuits):
8
+ MACI has two main zk-SNARK [circuits](https://github.com/privacy-scaling-explorations/maci/tree/main/circuits):
9
9
 
10
- 1. ProcessMessages.circom, which takes a batch of encrypted messages, decrypts them, and generates a proof that the coordinator's local processing was performed correctly. [QV](https://github.com/privacy-scaling-explorations/maci/blob/dev/circuits/circom/core/qv/processMessages.circom) and [non-QV](https://github.com/privacy-scaling-explorations/maci/blob/dev/circuits/circom/core/non-qv/processMessages.circom) versions are available.
11
- 2. TallyVotes.circom, which counts votes from users' ballots, batch by batch. [QV](https://github.com/privacy-scaling-explorations/maci/blob/dev/circuits/circom/core/qv/tallyVotes.circom) and [non-QV](https://github.com/privacy-scaling-explorations/maci/blob/dev/circuits/circom/core/non-qv/tallyVotes.circom) versions are available.
10
+ 1. ProcessMessages.circom, which takes a batch of encrypted messages, decrypts them, and generates a proof that the coordinator's local processing was performed correctly. [QV](https://github.com/privacy-scaling-explorations/maci/blob/main/circuits/circom/core/qv/processMessages.circom) and [non-QV](https://github.com/privacy-scaling-explorations/maci/blob/main/circuits/circom/core/non-qv/processMessages.circom) versions are available.
11
+ 2. TallyVotes.circom, which counts votes from users' ballots, batch by batch. [QV](https://github.com/privacy-scaling-explorations/maci/blob/main/circuits/circom/core/qv/tallyVotes.circom) and [non-QV](https://github.com/privacy-scaling-explorations/maci/blob/main/circuits/circom/core/non-qv/tallyVotes.circom) versions are available.
12
12
 
13
13
  The rest of the circuits are utilities templates that are required for the main circuits to work correctly. These include utilities such as float math, conversion of private keys, and Poseidon hashing/encryption.
14
14
 
@@ -57,15 +57,21 @@ Pull requests are great if you want to add a feature or fix a bug. Here's a quic
57
57
 
58
58
  7. Make the test pass.
59
59
 
60
- 8. Commit your changes. Please make sure your forked `dev` branch is synced as well feature/fix branch and there are no "temp" commits (like wip, fix typo/lint/types and etc). We recommend to squash the feature/fix branch commits before creating PR. You can use this command for it:
60
+ 8. Commit your changes. Please make sure your forked `main` branch is synced as well feature/fix branch and there are no "temp" commits (like wip, fix typo/lint/types and etc). We recommend to squash the feature/fix branch commits before creating PR. You can use this command for it:
61
61
 
62
62
  ```bash
63
- git reset $(git merge-base dev $(git rev-parse --abbrev-ref HEAD))
63
+ git checkout main
64
+ git pull
65
+ git checkout your-branch
66
+ git rebase main
67
+ git reset $(git merge-base main $(git rev-parse --abbrev-ref HEAD))
64
68
  ```
65
69
 
66
- 9. Push to your fork and submit a pull request on our `dev` branch. Please provide us with some explanation of why you made the changes you made. For new features make sure to explain a standard use case to us.
70
+ 9. Before creating a pull request make sure your work is ready. Do not create WIP pull requests and do not skip pre-commit hooks.
67
71
 
68
- 10. Link any issues that the PR is addressing as described in our processes documentation.
72
+ 10. Push to your fork and submit a pull request on our `main` branch. Please provide us with some explanation of why you made the changes you made. For new features make sure to explain a standard use case to us. Do not remove our PR template and follow all the steps defined in it.
73
+
74
+ 11. Link any issues that the PR is addressing as described in our processes documentation.
69
75
 
70
76
  ## CI (Github Actions) Tests
71
77
 
@@ -131,7 +137,7 @@ Just as in the subject, use the imperative, present tense: "change" not "changed
131
137
 
132
138
  ### Branch rules
133
139
 
134
- - Branches should generally be created off of the base branch (`dev` )
140
+ - Branches should generally be created off of the base branch (`main` )
135
141
  - Avoid long descriptive names for long-lived branches
136
142
  - Use kebab-case (no CamelCase)
137
143
  - Use grouping tokens (words) at the beginning of your branch names (in a similar way to the `type` of commit)
@@ -175,5 +175,5 @@ expect(stateLeaf2.publicKey.equals(user2Keypair.publicKey)).to.eq(true);
175
175
  We see that is important that we set the final message (the one with the new vote) with nonce 1, as this vote would be counted as the first vote.
176
176
 
177
177
  :::info
178
- Tests related to key changes have been added to the [core package](https://github.com/privacy-scaling-explorations/maci/blob/dev/core/ts/__tests__/) and to the [cli package](https://github.com/privacy-scaling-explorations/maci/blob/dev/cli/tests/).
178
+ Tests related to key changes have been added to the [core package](https://github.com/privacy-scaling-explorations/maci/blob/main/core/ts/__tests__/) and to the [cli package](https://github.com/privacy-scaling-explorations/maci/blob/main/cli/tests/).
179
179
  :::
@@ -78,7 +78,7 @@ Serialized, these will look like **macipk.0e5194a54562ea4d440ac6a0049a41d4b600e3
78
78
  After successfully [installing](/docs/quick-start#installation) MACI, you can easily generate your MACI key pair by running:
79
79
 
80
80
  ```bash
81
- pnpm run generateMaciKeyPair
81
+ pnpm run generate-maci-keypair
82
82
  ```
83
83
 
84
84
  This command will create the necessary public and private keys required for running various MACI operations.
@@ -5,25 +5,25 @@ sidebar_label: Poll types
5
5
  sidebar_position: 9
6
6
  ---
7
7
 
8
- MACI allows to conduct polls in both a quadratic voting and non quadratic voting fashion. One should be aware that the only distinction between the two happens when messages are processed and votes tallied. On top of that, the Tally smart contract has been split into two different ones, with the non quadratic voting version one being slightly smaller, due to the need of one less function.
8
+ MACI allows to conduct polls in both a quadratic voting and non quadratic voting fashion. One should be aware that the only distinction between the two happens when messages are processed and votes tallied. On top of that, the Tally smart contract has been split into two different ones, with the non quadratic voting version one being slightly smaller, due to the need of one less function. Additionally, there is a variation of non quadratic voting that allows participants to cast their entire voice credit balance for a single option only.
9
9
 
10
10
  This document will explain how to use each of these options. Hardhat tasks are the currently recommended way to deploy contracts and run polls but you can also use the MACI cli.
11
11
 
12
12
  ## Quadratic Voting
13
13
 
14
- MACI has always worked with quadratic voting. Users signing up to MACI are assigned a number of voice credits based on certain conditions (enforced by the [initial voice credit proxy contract](https://github.com/privacy-scaling-explorations/maci/blob/dev/packages/contracts/contracts/initialVoiceCreditProxy/ConstantInitialVoiceCreditProxy.sol)), and after each vote, the number of voice credits is reduced by the square of the weight of the vote casted. For instance, if the vote weight is 5, a user must have at least 25 voice credits to cast the vote.
14
+ MACI has always worked with quadratic voting. Users signing up to MACI are assigned a number of voice credits based on certain conditions (enforced by the [initial voice credit proxy contract](https://github.com/privacy-scaling-explorations/maci/blob/main/packages/contracts/contracts/initialVoiceCreditProxy/ConstantInitialVoiceCreditProxy.sol)), and after each vote, the number of voice credits is reduced by the square of the weight of the vote casted. For instance, if the vote weight is 5, a user must have at least 25 voice credits to cast the vote.
15
15
 
16
16
  To run a poll with quadratic voting, the coordinator must deploy the Poll with the mode set to quadratic voting.
17
17
 
18
18
  ### Using Hardhat tasks
19
19
 
20
- In the deploy-config.json file set the `useQuadraticVoting` value to **true**.
20
+ In the deploy-config.json file set the `mode` value to **qv**.
21
21
 
22
22
  ```json
23
23
  "Poll": {
24
24
  "pollDuration": 604800,
25
25
  "coordinatorPublicKey": "macipk",
26
- "useQuadraticVoting": true
26
+ "mode": "qv"
27
27
  }
28
28
  ```
29
29
 
@@ -37,17 +37,41 @@ pnpm deploy-poll:NETWORK
37
37
 
38
38
  The non quadratic voting option is a new feature that has been added to MACI with the v1.2 release. It allows to conduct polls without the quadratic voting mechanism. This means that the number of voice credits is not reduced by the square of the weight of the vote casted. This option is useful for polls where the quadratic voting mechanism is not necessary, and it is also slightly cheaper for coordinators to tally votes, as there are less checks required in the Tally smart contract.
39
39
 
40
- To run a poll with non quadratic voting, the coordinator must set the `useQuadraticVoting` parameter to `false` when creating the MACI instance. This will make the MACI instance use the `TallyNonQv` smart contract, which is a smaller version of the `Tally` smart contract, as it does not require the checks for the quadratic voting mechanism.
40
+ To run a poll with non quadratic voting, the coordinator must set the `mode` parameter to `non-qv` when creating the MACI instance. This will make the MACI instance use the `TallyNonQv` smart contract, which is a smaller version of the `Tally` smart contract, as it does not require the checks for the quadratic voting mechanism.
41
41
 
42
42
  ### Using Hardhat tasks
43
43
 
44
- In the deploy-config.json file set the `useQuadraticVoting` value to **false**.
44
+ In the deploy-config.json file set the `mode` value to **non-qv**.
45
45
 
46
46
  ```json
47
47
  "Poll": {
48
48
  "pollDuration": 604800,
49
49
  "coordinatorPublicKey": "macipk",
50
- "useQuadraticVoting": false
50
+ "mode": "non-qv"
51
+ }
52
+ ```
53
+
54
+ Then run the task to create a poll:
55
+
56
+ ```bash
57
+ pnpm deploy-poll:NETWORK
58
+ ```
59
+
60
+ ## Full Credits Voting
61
+
62
+ Full Credits Voting is a new feature introduced in MACI v3. This voting mode disables the quadratic voting mechanism and requires participants to allocate their entire voice credit balance to a single option. Unlike quadratic voting, where the cost of votes increases quadratically with the number of votes cast, Full Credits Voting uses a linear model: participants spend all their available voice credits on one chosen option. No splitting across multiple options is allowed. This option is useful for polls where the quadratic voting mechanism is not necessary and where it's important to ensure voters fully commit to a single choice—eliminating fragmented or spread-out voting behavior. It also offers a slight cost advantage for coordinators, as tallying is more efficient with fewer checks required in the Tally smart contract.
63
+
64
+ To run a poll full credits voting, the coordinator must set the `mode` parameter to `full` when creating the MACI instance. This will make the MACI instance use the `TallyNonQv` smart contract, which is a smaller version of the `Tally` smart contract, as it does not require the checks for the quadratic voting mechanism.
65
+
66
+ ### Using Hardhat tasks
67
+
68
+ In the deploy-config.json file set the `mode` value to **full**.
69
+
70
+ ```json
71
+ "Poll": {
72
+ "pollDuration": 604800,
73
+ "coordinatorPublicKey": "macipk",
74
+ "mode": "full"
51
75
  }
52
76
  ```
53
77
 
@@ -11,7 +11,7 @@ Currently, you can configure the following parameters for a poll:
11
11
 
12
12
  - Poll duration, in the form of a unix timestamp for start and end times. This allows polls to be scheduled to start at a certain time, and run for a certain amount of time.
13
13
  - Vote option - how many vote options are allowed for a poll.
14
- - Vote mode - quadratic or non quadratic voting. One should be aware that the only distinction between the two happens when messages are processed and votes tallied.
14
+ - Vote mode - quadratic, non quadratic, full credits voting. One should be aware that the only distinction between them happens when messages are processed and votes tallied.
15
15
  - Policy - the Excubiae policy that will be used to gate access to the poll.
16
16
  - Initial voice credit proxy - the initial voice credit proxy that will be used to assign voice credits to voters.
17
17
  - Relayer - the list of addresses that will be able to relay messages on behalf of other users (for now this is recommended to be the coordinator only)
@@ -34,19 +34,19 @@ The full configuration for a poll looks like this:
34
34
 
35
35
  ## Quadratic Voting
36
36
 
37
- MACI has always worked with quadratic voting. Users joining a Poll are assigned a number of voice credits based on certain conditions (enforced by the [initial voice credit proxy contract](https://github.com/privacy-scaling-explorations/maci/blob/dev/packages/contracts/contracts/initialVoiceCreditProxy/ConstantInitialVoiceCreditProxy.sol)), and after each vote, the number of voice credits is reduced by the square of the weight of the vote casted. For instance, if the vote weight is 5, a user must have at least 25 voice credits to cast the vote.
37
+ MACI has always worked with quadratic voting. Users joining a Poll are assigned a number of voice credits based on certain conditions (enforced by the [initial voice credit proxy contract](https://github.com/privacy-scaling-explorations/maci/blob/main/packages/contracts/contracts/initialVoiceCreditProxy/ConstantInitialVoiceCreditProxy.sol)), and after each vote, the number of voice credits is reduced by the square of the weight of the vote casted. For instance, if the vote weight is 5, a user must have at least 25 voice credits to cast the vote.
38
38
 
39
39
  To run a poll with quadratic voting, the coordinator must deploy the Poll with the mode set to quadratic voting.
40
40
 
41
41
  ### Using Hardhat tasks
42
42
 
43
- In the deploy-config.json file set the `useQuadraticVoting` value to **true**.
43
+ In the deploy-config.json file set the `mode` value to **qv**.
44
44
 
45
45
  ```json
46
46
  "Poll": {
47
47
  [...]
48
48
  "coordinatorPublicKey": "macipk",
49
- "useQuadraticVoting": true
49
+ "mode": "qv"
50
50
  }
51
51
  ```
52
52
 
@@ -60,17 +60,41 @@ pnpm deploy-poll:NETWORK
60
60
 
61
61
  The non quadratic voting option is a new feature that has been added to MACI with the v1.2 release. It allows to conduct polls without the quadratic voting mechanism. This means that the number of voice credits is not reduced by the square of the weight of the vote casted. This option is useful for polls where the quadratic voting mechanism is not necessary, and it is also slightly cheaper for coordinators to tally votes, as there are less checks required in the Tally smart contract.
62
62
 
63
- To run a poll with non quadratic voting, the coordinator must set the `useQuadraticVoting` parameter to `false` when creating the MACI instance.
63
+ To run a poll with non quadratic voting, the coordinator must set the `mode` parameter to `non-qv` when creating the MACI instance.
64
64
 
65
65
  ### Using Hardhat tasks
66
66
 
67
- In the deploy-config.json file set the `useQuadraticVoting` value to **false**.
67
+ In the deploy-config.json file set the `mode` value to **non-qv**.
68
68
 
69
69
  ```json
70
70
  "Poll": {
71
71
  [...]
72
72
  "coordinatorPublicKey": "macipk",
73
- "useQuadraticVoting": false
73
+ "mode": "non-qv"
74
+ }
75
+ ```
76
+
77
+ Then run the task to create a poll:
78
+
79
+ ```bash
80
+ pnpm deploy-poll:NETWORK
81
+ ```
82
+
83
+ ## Full Credits Voting
84
+
85
+ Full Credits Voting is a new feature introduced in MACI v3. This voting mode disables the quadratic voting mechanism and requires participants to allocate their entire voice credit balance to a single option. Unlike quadratic voting, where the cost of votes increases quadratically with the number of votes cast, Full Credits Voting uses a linear model: participants spend all their available voice credits on one chosen option. No splitting across multiple options is allowed. This option is useful for polls where the quadratic voting mechanism is not necessary and where it's important to ensure voters fully commit to a single choice—eliminating fragmented or spread-out voting behavior. It also offers a slight cost advantage for coordinators, as tallying is more efficient with fewer checks required in the Tally smart contract.
86
+
87
+ To run a poll with full credits voting, the coordinator must set the `mode` parameter to `full` when creating the MACI instance.
88
+
89
+ ### Using Hardhat tasks
90
+
91
+ In the deploy-config.json file set the `mode` value to **full**.
92
+
93
+ ```json
94
+ "Poll": {
95
+ [...]
96
+ "coordinatorPublicKey": "macipk",
97
+ "mode": "full"
74
98
  }
75
99
  ```
76
100
 
@@ -580,7 +580,7 @@ Please note that MACI requires the coordinator to generate proofs on an x86 mach
580
580
 
581
581
  ### 6.1. Message processing circuit
582
582
 
583
- The message processing circuit, defined in `circuits/circom/processMessages.circom`, allows the coordinator to prove that they have correctly applied each message in reverse order, in a consecutive batch of `5 ^ messageBatchDepth` messages to the respective state leaf within the state tree.
583
+ The message processing circuit, defined in `circuits/circom/coordinator/qv/MessageProcessor.circom`, allows the coordinator to prove that they have correctly applied each message in reverse order, in a consecutive batch of `5 ^ messageBatchDepth` messages to the respective state leaf within the state tree.
584
584
 
585
585
  #### Parameters
586
586
 
@@ -747,7 +747,7 @@ The final tally should be:
747
747
  2. Total voice credits per vote option: `[3, 9, 19, 33, 26]`
748
748
  3. Total spent voice credits: `66`
749
749
 
750
- The coordinator uses the ballot tallying circuit (`tallyVotes.circom`) to generate proofs that they have correctly computed the tally. As there are many ballots to tally, each proof only computes the tally for a batch of ballots. Each proof is chained to the previous one such that each proof is also a proof of knowledge of the preimage of the previous tally commitment.
750
+ The coordinator uses the ballot tallying circuit (`VoteTally.circom`) to generate proofs that they have correctly computed the tally. As there are many ballots to tally, each proof only computes the tally for a batch of ballots. Each proof is chained to the previous one such that each proof is also a proof of knowledge of the preimage of the previous tally commitment.
751
751
 
752
752
  #### Parameters
753
753
 
@@ -66,7 +66,7 @@ Therefore, even if a coordinator is corrupt, they are unable to change a user’
66
66
 
67
67
  To explain the MACI workflow, let's give a quick overview of the key smart contracts.
68
68
 
69
- See our [smart contract docs](/docs/category/smart-contracts) or our [contract source code](https://github.com/privacy-scaling-explorations/maci/tree/dev/contracts/contracts) for a more in-depth explanation of all smart contracts.
69
+ See our [smart contract docs](/docs/category/smart-contracts) or our [contract source code](https://github.com/privacy-scaling-explorations/maci/tree/main/contracts/contracts) for a more in-depth explanation of all smart contracts.
70
70
 
71
71
  ### MACI.sol
72
72
 
@@ -133,7 +133,7 @@ The `MessageProcessor` contract will send the proof to a separate verifier contr
133
133
 
134
134
  #### Tally Results
135
135
 
136
- Finally, once all messages have been processed, the coordinator tallies the votes of the valid messages (off-chain). The coordinator creates a zk-SNARK proving that the valid messages in the state tree (proved in Process Messages step) contain votes that sum to the given tally result. Then, they call [`Tally.tallyVotes()`](/docs/technical-references/smart-contracts/solidity-docs/Tally#tallyvotes) with a hash of the correct tally results and the zk-SNARK proof. Similarly to the processMessages function, the `tallyVotes` function will send the proof to a verifier contract to ensure that it is valid.
136
+ Finally, once all messages have been processed, the coordinator tallies the votes of the valid messages (off-chain). The coordinator creates a zk-SNARK proving that the valid messages in the state tree (proved in Process Messages step) contain votes that sum to the given tally result. Then, they call [`Tally.tallyVotes()`](/docs/technical-references/smart-contracts/solidity-docs/Tally#tallyvotes) with a hash of the correct tally results and the zk-SNARK proof. Similarly to the `processMessages` function, the `tallyVotes` function will send the proof to a verifier contract to ensure that it is valid.
137
137
 
138
138
  <!-- "hash of the correct tally results" - so are the final results actually put on chain? or just a hash?? -->
139
139