@maci-protocol/website 0.0.0-ci.f4bc8a6 → 0.0.0-ci.f5db322

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 (52) hide show
  1. package/LICENSE +1 -2
  2. package/blog/2024-02-28-maci-v1.2.0.md +1 -1
  3. package/blog/2024-08-10-maci-v2.md +1 -1
  4. package/docusaurus.config.ts +2 -2
  5. package/package.json +5 -5
  6. package/src/pages/roadmap.md +39 -80
  7. package/static/img/circuits/MACI-Circuits.excalidraw +79 -79
  8. package/static/img/circuits/ecdh.svg +1 -1
  9. package/static/img/circuits/messageToCommand.svg +1 -1
  10. package/static/img/circuits/messageValidator.svg +1 -1
  11. package/static/img/circuits/privToPubkey.svg +1 -1
  12. package/static/img/circuits/processMessages.svg +1 -1
  13. package/static/img/circuits/processMessagesInputHasher.svg +1 -1
  14. package/static/img/circuits/processMessages_2_0.svg +1 -1
  15. package/static/img/circuits/processOne.svg +1 -1
  16. package/static/img/circuits/processTopup.svg +1 -1
  17. package/static/img/circuits/quinBatchLeavesExists.svg +1 -1
  18. package/static/img/circuits/quinCheckRoot.svg +1 -1
  19. package/static/img/circuits/quinGeneratePathIndices.svg +1 -1
  20. package/static/img/circuits/quinSelector.svg +1 -1
  21. package/static/img/circuits/resultsCommitmentVerifier.svg +1 -1
  22. package/static/img/circuits/splicer.svg +1 -1
  23. package/static/img/circuits/tallyInputHasher.svg +1 -1
  24. package/static/img/circuits/tallyVotes.svg +1 -1
  25. package/static/img/circuits/verifySignature.svg +1 -1
  26. package/versioned_docs/version-v0.x/quadratic-vote-tallying-circuit.md +16 -16
  27. package/versioned_docs/version-v3.x/core-concepts/key-change.md +28 -28
  28. package/versioned_docs/version-v3.x/core-concepts/maci-keys.md +1 -1
  29. package/versioned_docs/version-v3.x/core-concepts/poll-types.md +3 -3
  30. package/versioned_docs/version-v3.x/core-concepts/polls.md +4 -4
  31. package/versioned_docs/version-v3.x/core-concepts/spec.md +41 -107
  32. package/versioned_docs/version-v3.x/core-concepts/state-leaf.md +2 -2
  33. package/versioned_docs/version-v3.x/guides/compile-circuits.md +7 -7
  34. package/versioned_docs/version-v3.x/guides/integrating.md +9 -9
  35. package/versioned_docs/version-v3.x/guides/testing/testing-in-detail.md +1 -1
  36. package/versioned_docs/version-v3.x/guides/troubleshooting.md +11 -11
  37. package/versioned_docs/version-v3.x/quick-start.md +29 -21
  38. package/versioned_docs/version-v3.x/security/audit.md +2 -2
  39. package/versioned_docs/version-v3.x/supported-networks/deployed-contracts.md +8 -8
  40. package/versioned_docs/version-v3.x/technical-references/smart-contracts/MACI.md +6 -6
  41. package/versioned_docs/version-v3.x/technical-references/smart-contracts/MessageProcessor.md +1 -1
  42. package/versioned_docs/version-v3.x/technical-references/smart-contracts/Params.md +2 -2
  43. package/versioned_docs/version-v3.x/technical-references/smart-contracts/Poll.md +8 -8
  44. package/versioned_docs/version-v3.x/technical-references/smart-contracts/PollFactory.md +1 -1
  45. package/versioned_docs/version-v3.x/technical-references/smart-contracts/Tally.md +3 -3
  46. package/versioned_docs/version-v3.x/technical-references/smart-contracts/VkRegistry.md +5 -5
  47. package/versioned_docs/version-v3.x/technical-references/zk-snark-circuits/joinPoll.md +3 -4
  48. package/versioned_docs/version-v3.x/technical-references/zk-snark-circuits/processMessages.md +12 -12
  49. package/versioned_docs/version-v3.x/technical-references/zk-snark-circuits/setup.md +1 -1
  50. package/versioned_docs/version-v3.x/technical-references/zk-snark-circuits/tallyVotes.md +3 -3
  51. package/versioned_docs/version-v3.x/technical-references/zk-snark-circuits/utilities.md +7 -7
  52. package/versioned_docs/version-v3.x/technical-references/zk-snark-circuits/zk-snark-circuits.md +1 -1
@@ -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
+ - [VerifyingKeysRegistry](https://github.com/privacy-scaling-explorations/maci/blob/dev/packages/contracts/contracts/VerifyingKeysRegistry.sol)
11
+ - [PoseidonHashers](https://github.com/privacy-scaling-explorations/maci/blob/dev/packages/contracts/contracts/crypto/Hasher.sol)
12
+ - [PollFactory](https://github.com/privacy-scaling-explorations/maci/blob/dev/packages/contracts/contracts/PollFactory.sol)
13
+ - [MessageProcessorFactory](https://github.com/privacy-scaling-explorations/maci/blob/dev/packages/contracts/contracts/MessageProcessorFactory.sol)
14
+ - [TallyFactory](https://github.com/privacy-scaling-explorations/maci/blob/dev/packages/contracts/contracts/TallyFactory.sol)
15
+ - [Verifier](https://github.com/privacy-scaling-explorations/maci/blob/dev/packages/contracts/contracts/crypto/Verifier.sol)
16
16
  - [FreeForAllPolicy](https://github.com/privacy-scaling-explorations/excubiae/tree/main/packages/contracts/contracts/extensions/freeForAll)
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/dev/packages/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
 
@@ -29,7 +29,7 @@ cd cli && node build/ts/index.js checkVerifyingKeys -q false -vk 0x74569d524a193
29
29
  ```
30
30
 
31
31
  :::info
32
- You should change the -vk parameter to the VkRegistry address for the chain you are deploying to. Also you might need to modify the parameters based on the circuit configuration. Please refer to the [circuits page](/docs/technical-references/zk-snark-circuits/setup) for more information. Also you can add `-uq false` if you want to check non quadratic voting keys.
32
+ You should change the -vk parameter to the VerifyingKeysRegistry address for the chain you are deploying to. Also you might need to modify the parameters based on the circuit configuration. Please refer to the [circuits page](/docs/technical-references/zk-snark-circuits/setup) for more information. Also you can add `-uq false` if you want to check non quadratic voting keys.
33
33
  :::
34
34
 
35
35
  ## Contract Addresses
@@ -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/dev/packages/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.
@@ -62,12 +62,12 @@ This function does the following:
62
62
  - hashes the public key and inserts it into the state tree.
63
63
 
64
64
  ```ts
65
- function signUp(PubKey memory _pubKey, bytes memory _signUpPolicyData) public virtual {
65
+ function signUp(PublicKey memory _publicKey, bytes memory _signUpPolicyData) public virtual {
66
66
  // ensure we do not have more signups than what the circuits support
67
67
  if (leanIMTData.size >= maxSignups) revert TooManySignups();
68
68
 
69
69
  // ensure that the public key is on the baby jubjub curve
70
- if (!CurveBabyJubJub.isOnCurve(_pubKey.x, _pubKey.y)) {
70
+ if (!CurveBabyJubJub.isOnCurve(_publicKey.x, _publicKey.y)) {
71
71
  revert InvalidPubKey();
72
72
  }
73
73
 
@@ -76,13 +76,13 @@ function signUp(PubKey memory _pubKey, bytes memory _signUpPolicyData) public vi
76
76
  signUpPolicy.register(msg.sender, _signUpPolicyData);
77
77
 
78
78
  // Hash the public key and insert it into the tree.
79
- uint256 pubKeyHash = hashLeftRight(_pubKey.x, _pubKey.y);
79
+ uint256 pubKeyHash = hashLeftRight(_publicKey.x, _publicKey.y);
80
80
  uint256 stateRoot = InternalLeanIMT._insert(leanIMTData, pubKeyHash);
81
81
 
82
82
  // Store the current state tree root in the array
83
83
  stateRootsOnSignUp.push(stateRoot);
84
84
 
85
- emit SignUp(leanIMTData.size - 1, block.timestamp, _pubKey.x, _pubKey.y);
85
+ emit SignUp(leanIMTData.size - 1, block.timestamp, _publicKey.x, _publicKey.y);
86
86
  }
87
87
  ```
88
88
 
@@ -156,5 +156,5 @@ Polls require the following information:
156
156
  - `voteOptions`: the number of vote options for the poll
157
157
 
158
158
  :::info
159
- Please be advised that the number of signups in the MACI contract (number of leaves in the merkle tree holding MACI's state) considers the initial zero leaf as one signup. For this reason, when accounting for the real users signed up to MACI, you should subtract one from the value returned from the `numSignUps` function.
159
+ Please be advised that the number of signups in the MACI contract (number of leaves in the merkle tree holding MACI's state) considers the initial zero leaf as one signup. For this reason, when accounting for the real users signed up to MACI, you should subtract one from the value returned from the `totalSignups` function.
160
160
  :::
@@ -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/dev/packages/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`.
@@ -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/dev/packages/contracts/contracts/utilities/Params.sol)
10
10
  :::
11
11
 
12
12
  A contract holding three structs:
@@ -14,7 +14,7 @@ A contract holding three structs:
14
14
  ```ts
15
15
  /// @notice A struct holding the depths of the merkle trees
16
16
  struct TreeDepths {
17
- uint8 intStateTreeDepth;
17
+ uint8 tallyProcessingStateTreeDepth;
18
18
  uint8 voteOptionTreeDepth;
19
19
  }
20
20
 
@@ -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/dev/packages/contracts/contracts/Poll.sol)
10
10
  :::
11
11
 
12
12
  This contract allows users to submit their votes.
@@ -26,7 +26,7 @@ The `joinPoll` function looks as follows:
26
26
  /// @inheritdoc IPoll
27
27
  function joinPoll(
28
28
  uint256 _nullifier,
29
- PubKey calldata _pubKey,
29
+ PublicKey calldata _publicKey,
30
30
  uint256 _stateRootIndex,
31
31
  uint256[8] calldata _proof,
32
32
  bytes memory _signUpPolicyData,
@@ -41,7 +41,7 @@ The `joinPoll` function looks as follows:
41
41
  pollNullifiers[_nullifier] = true;
42
42
 
43
43
  // Verify user's proof
44
- if (!verifyJoiningPollProof(_nullifier, _stateRootIndex, _pubKey, _proof)) {
44
+ if (!verifyJoiningPollProof(_nullifier, _stateRootIndex, _publicKey, _proof)) {
45
45
  revert InvalidPollProof();
46
46
  }
47
47
 
@@ -55,7 +55,7 @@ The `joinPoll` function looks as follows:
55
55
  );
56
56
 
57
57
  // Store user in the pollStateTree
58
- uint256 stateLeaf = hashStateLeaf(StateLeaf(_pubKey, voiceCreditBalance, block.timestamp));
58
+ uint256 stateLeaf = hashStateLeaf(StateLeaf(_publicKey, voiceCreditBalance, block.timestamp));
59
59
 
60
60
  uint256 stateRoot = InternalLazyIMT._insert(pollStateTree, stateLeaf);
61
61
 
@@ -63,7 +63,7 @@ The `joinPoll` function looks as follows:
63
63
  pollStateRootsOnJoin.push(stateRoot);
64
64
 
65
65
  uint256 pollStateIndex = pollStateTree.numberOfLeaves - 1;
66
- emit PollJoined(_pubKey.x, _pubKey.y, voiceCreditBalance, block.timestamp, _nullifier, pollStateIndex);
66
+ emit PollJoined(_publicKey.x, _publicKey.y, voiceCreditBalance, block.timestamp, _nullifier, pollStateIndex);
67
67
  }
68
68
  ```
69
69
 
@@ -72,7 +72,7 @@ The `joinPoll` function looks as follows:
72
72
  The `publishMessage` function looks as follows:
73
73
 
74
74
  ```ts
75
- function publishMessage(Message calldata _message, PubKey calldata _encPubKey) public virtual isOpenForVoting {
75
+ function publishMessage(Message calldata _message, PublicKey calldata _encPubKey) public virtual isOpenForVoting {
76
76
  // check if the public key is on the curve
77
77
  if (!CurveBabyJubJub.isOnCurve(_encPubKey.x, _encPubKey.y)) {
78
78
  revert InvalidPubKey();
@@ -84,7 +84,7 @@ function publishMessage(Message calldata _message, PubKey calldata _encPubKey) p
84
84
  }
85
85
 
86
86
  // compute current message hash
87
- uint256 messageHash = hashMessageAndEncPubKey(_message, _encPubKey);
87
+ uint256 messageHash = hashMessageAndPublicKey(_message, _encPubKey);
88
88
 
89
89
  // update current message chain hash
90
90
  updateChainHash(messageHash);
@@ -96,7 +96,7 @@ function publishMessage(Message calldata _message, PubKey calldata _encPubKey) p
96
96
  The `publishMessageBatch` function looks as follows:
97
97
 
98
98
  ```ts
99
- function publishMessageBatch(Message[] calldata _messages, PubKey[] calldata _encPubKeys) public virtual {
99
+ function publishMessageBatch(Message[] calldata _messages, PublicKey[] calldata _encPubKeys) public virtual {
100
100
  if (_messages.length != _encPubKeys.length) {
101
101
  revert InvalidBatchLength();
102
102
  }
@@ -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/dev/packages/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/dev/packages/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.
@@ -16,14 +16,14 @@ This contract should be deployed alongside a `Poll`, with the the constructor ac
16
16
  ```ts
17
17
  constructor(
18
18
  address _verifier,
19
- address _vkRegistry,
19
+ address _verifyingKeysRegistry,
20
20
  address _poll,
21
21
  address _mp,
22
22
  address _tallyOwner,
23
23
  Mode _mode
24
24
  ) payable {
25
25
  verifier = IVerifier(_verifier);
26
- vkRegistry = IVkRegistry(_vkRegistry);
26
+ vkRegistry = IVkRegistry(_verifyingKeysRegistry);
27
27
  poll = IPoll(_poll);
28
28
  messageProcessor = IMessageProcessor(_mp);
29
29
  mode = _mode;
@@ -1,15 +1,15 @@
1
1
  ---
2
- title: VkRegistry Smart Contract
3
- description: VkRegistry smart contract
4
- sidebar_label: VkRegistry
2
+ title: VerifyingKeysRegistry Smart Contract
3
+ description: VerifyingKeysRegistry smart contract
4
+ sidebar_label: VerifyingKeysRegistry
5
5
  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: [VerifyingKeysRegistry.sol](https://github.com/privacy-scaling-explorations/maci/blob/dev/packages/contracts/contracts/VerifyingKeysRegistry.sol)
10
10
  :::
11
11
 
12
- The VkRegistry is a contract that holds the verifying keys for the zk-SNARK circuits. It holds four different sets of keys:
12
+ The VerifyingKeysRegistry is a contract that holds the verifying keys for the zk-SNARK circuits. It holds four different sets of keys:
13
13
 
14
14
  - `processVks` - The keys for the processMessages circuit
15
15
  - `tallyVks` - The keys for the tallyVotes circuit
@@ -21,8 +21,8 @@ Users need to provide a valid proof to the Poll smart contract to join a poll, a
21
21
 
22
22
  | Input signal | Description |
23
23
  | ---------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
24
- | `privKey` | The user's private key |
25
- | `pollPubKey` | The poll's public key |
24
+ | `privateKey` | The user's private key |
25
+ | `pollPublicKey` | The poll's public key |
26
26
  | `siblings` | The siblings for the merkle tree inclusion proof |
27
27
  | `indices` | The indices for the merkle tree inclusion proof |
28
28
  | `nullifier` | The nullifier |
@@ -44,9 +44,8 @@ Users will use this circuit to anonymously prove that they joined a poll. This c
44
44
 
45
45
  | Input signal | Description |
46
46
  | ---------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
47
- | `privKey` | The user's private key |
47
+ | `privateKey` | The user's private key |
48
48
  | `voiceCreditsBalance` | The user's initial voice credits balance |
49
- | `joinTimestamp` | The timestamp of when the user joined the poll |
50
49
  | `pathElements` | The path elements for the merkle tree inclusion proof |
51
50
  | `pathIndices` | The path indices for the merkle tree inclusion proof |
52
51
  | `stateRoot` | The MACI state tree root |
@@ -7,7 +7,7 @@ sidebar_position: 3
7
7
 
8
8
  [**Repo link**](https://github.com/privacy-scaling-explorations/maci/blob/dev/circuits/circom/core)
9
9
 
10
- This circuit allows the coordinator to prove that they have correctly processed each message in reverse order, in a consecutive batch of 5 ^ msgBatchDepth messages to the respective state leaf within the state tree. Coordinators would use this circuit to prove correct execution at the end of each Poll.
10
+ This circuit allows the coordinator to prove that they have correctly processed each message in reverse order, in a consecutive batch of 5 ^ messageBatchDepth 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
12
  The [`processMessages`](https://github.com/privacy-scaling-explorations/maci/blob/dev/circuits/circom/core/qv/processMessages.circom) circuit will try to decrypt the messages, and based on the content of the message, update within itself the trees, to generate a proof that the coordinator's off-chain processing was done correctly. In other words, the circuit takes a final state, an initial state, and the leaves (messages and user signups) - it processes these messages via the different state transitions to finally check that the expected state is correct.
13
13
  The pre-requisites for this circuit are:
@@ -36,17 +36,17 @@ A version working with non quadratic voting (non-qv) is also [available](https:/
36
36
 
37
37
  | Input signal | Description |
38
38
  | -------------------------------- | --------------------------------------------------------------------------------------- |
39
- | `numSignUps` | Number of users that have completed the sign up |
39
+ | `totalSignups` | Number of users that have completed the sign up |
40
40
  | `index` | The batch index of current message batch |
41
41
  | `pollEndTimestamp` | The Unix timestamp at which the poll ends |
42
- | `msgRoot` | The root of the message tree |
43
- | `msgs` | The batch of messages as an array of arrays |
44
- | `msgSubrootPathElements` | As described below |
42
+ | `messageRoot` | The root of the message tree |
43
+ | `messages` | The batch of messages as an array of arrays |
44
+ | `messageSubrootPathElements` | As described below |
45
45
  | `coordinatorPublicKeyHash` | $\mathsf{poseidon_2}([cPk_x, cPk_y])$ |
46
46
  | `newSbCommitment` | As described below |
47
- | `coordPrivKey` | The coordinator's private key |
47
+ | `coordinatorPrivateKey` | The coordinator's private key |
48
48
  | `batchEndIndex` | The last batch index |
49
- | `encPubKeys` | The public keys used to generate shared ECDH encryption keys to encrypt the messages |
49
+ | `encryptionPublicKeys` | The public keys used to generate shared ECDH encryption keys to encrypt the messages |
50
50
  | `currentStateRoot` | The state root before the commands are applied |
51
51
  | `currentStateLeaves` | The state leaves upon which messages are applied |
52
52
  | `currentStateLeavesPathElements` | The Merkle path to each incremental state root |
@@ -74,9 +74,9 @@ The salt used to produce `currentSbCommitment` (see above).
74
74
 
75
75
  The salt used to produce `newSbCommitment` (see above).
76
76
 
77
- ##### `msgSubrootPathElements`
77
+ ##### `messageSubrootPathElements`
78
78
 
79
- The index of each message in `msgs` is consecutive. As such, in order to prove that each message in `msgs` is indeed a leaf of the message tree, we compute the subtree root of `msgs`, and then verify that the subtree root is indeed a subroot of `msgRoot`.
79
+ The index of each message in `messages` is consecutive. As such, in order to prove that each message in `messages` is indeed a leaf of the message tree, we compute the subtree root of `messages`, and then verify that the subtree root is indeed a subroot of `messageRoot`.
80
80
 
81
81
  A simplified example using a tree of arity 2:
82
82
 
@@ -100,7 +100,7 @@ This method requires fewer circuit constraints than if we verified a Merkle proo
100
100
 
101
101
  1. That the prover knows the preimage to `currentSbCommitment` (that is, the state root, ballot root, and `currentSbSalt`)
102
102
  2. That `maxVoteOptions <= (5 ^ voteOptionTreeDepth)`
103
- 3. That `numSignUps <= (2 ^ stateTreeDepth)`
104
- 4. That `coordinatorPublicKeyHash` is a hash of public key that is correctly derived from `coordPrivKey`
105
- 5. That each message in `msgs` exists in the message tree
103
+ 3. That `totalSignups <= (2 ^ stateTreeDepth)`
104
+ 4. That `coordinatorPublicKeyHash` is a hash of public key that is correctly derived from `coordinatorPrivateKey`
105
+ 5. That each message in `messages` exists in the message tree
106
106
  6. That after decrypting and applying each message, in reverse order, to the corresponding state and ballot leaves, the new state root, new ballot root, and `newSbSalt` are the preimage to `newSbCommitment`
@@ -37,7 +37,7 @@ MACI's circuits are parameterized, and thus can be configured to support differe
37
37
  - **STATE_TREE_DEPTH** = how many users the system supports
38
38
  - **VOTE_OPTIONS_TREE_DEPTH** = how many vote options the system supports
39
39
  - **MESSAGE_BATCH_SIZE** = how many messages in a batch the circuit should process
40
- - **INT_STATE_TREE_DEPTH** = how many ballots can be processed per batch when tallying the results (`5 ** INT_STATE_TREE_DEPTH` ballots)
40
+ - **TALLY_PROCESSING_STATE_TREE_DEPTH** = how many ballots can be processed per batch when tallying the results (`5 ** TALLY_PROCESSING_STATE_TREE_DEPTH` ballots)
41
41
 
42
42
  Please refer to the individual circuit documentation for more details on the inner working of each circuit and where parameters fit.
43
43
 
@@ -25,7 +25,7 @@ A version working with non quadratic voting (non-qv) is also [available](https:/
25
25
 
26
26
  | Input signal | Description |
27
27
  | --------------------------------------- | ---------------------------------------------------------------- |
28
- | `numSignUps` | The number of users that signup |
28
+ | `totalSignups` | The number of users that signup |
29
29
  | `index` | Start index of given batch |
30
30
  | `sbCommitment` | Described below |
31
31
  | `currentTallyCommitment` | Described below |
@@ -72,8 +72,8 @@ $poseidon_3([tc_r, tc_t, tc_p])$
72
72
  #### Statements that the circuit proves
73
73
 
74
74
  1. That the coordinator knows the preimage of `sbCommitment`
75
- 2. That `index` is less than or equal to `numSignUps`
76
- 3. That each ballot in `ballots` is in a member of the ballot tree with the Merkle root `ballotRoot` at indices `batchStartIndex` to `batchStartIndex + (5 ** intStateTreeDepth)`
75
+ 2. That `index` is less than or equal to `totalSignups`
76
+ 3. That each ballot in `ballots` is in a member of the ballot tree with the Merkle root `ballotRoot` at indices `batchStartIndex` to `batchStartIndex + (5 ** tallyProcessingStateTreeDepth)`
77
77
  4. That each set of votes (`votes[i]`) has the Merkle root $blt_r$ whose value equals `ballots[i][1]`
78
78
  5. That the tally is valid, which is:
79
79
  - That the sum of votes per vote option is correct
@@ -15,7 +15,7 @@ It outputs one field element, which is the SHA256 hash of the following inputs:
15
15
 
16
16
  1. `packedVals`
17
17
  2. `pollEndTimestamp`
18
- 3. `msgRoot`
18
+ 3. `messageRoot`
19
19
  4. `coordinatorPubKeyHash`
20
20
  5. `newSbCommitment`
21
21
  6. `currentSbCommitment`
@@ -39,11 +39,11 @@ A utility circuit used by the main `tallyVotes` circuit to verify that the resul
39
39
 
40
40
  ![ResultsCommitmentVerifier](/img/circuits/resultsCommitmentVerifier.svg)
41
41
 
42
- #### QuinCheckRoot
42
+ #### QuinaryCheckRoot
43
43
 
44
44
  Utility circuit that given a quin Merkle root and a list of leaves, check if the root is the correct result of inserting all the leaves into the tree in the given order.
45
45
 
46
- ![QuinCheckRoot](/img/circuits/quinCheckRoot.svg)
46
+ ![QuinaryCheckRoot](/img/circuits/quinCheckRoot.svg)
47
47
 
48
48
  #### CalculateTotal
49
49
 
@@ -100,11 +100,11 @@ Utility circuit used to unpack an input element.
100
100
 
101
101
  ![UnpackElement](/img/circuits/unpackElement.svg)
102
102
 
103
- #### QuinSelector
103
+ #### QuinarySelector
104
104
 
105
105
  Utility circuit used to select one element from an array of n elements at a given index.
106
106
 
107
- ![QuinSelector](/img/circuits/quinSelector.svg)
107
+ ![QuinarySelector](/img/circuits/quinSelector.svg)
108
108
 
109
109
  #### Splicer
110
110
 
@@ -118,11 +118,11 @@ Utility circuit used to check if a batch of leaves exists in a quinary tree.
118
118
 
119
119
  ![QuinBatchLeavesExists](/img/circuits/quinBatchLeavesExists.svg)
120
120
 
121
- #### QuinGeneratePathIndices
121
+ #### QuinaryGeneratePathIndices
122
122
 
123
123
  Utility circuit used to generate the indices needed to traverse the tree until we find the leaf we are looking for.
124
124
 
125
- ![QuinGeneratePathIndices](/img/circuits/quinGeneratePathIndices.svg)
125
+ ![QuinaryGeneratePathIndices](/img/circuits/quinGeneratePathIndices.svg)
126
126
 
127
127
  #### ProcessOne
128
128
 
@@ -5,7 +5,7 @@ sidebar_label: zk-SNARK Circuits
5
5
  sidebar_position: 1
6
6
  ---
7
7
 
8
- MACI has three main zk-SNARK [circuits](https://github.com/privacy-scaling-explorations/maci/tree/dev/circuits):
8
+ MACI has three main zk-SNARK [circuits](https://github.com/privacy-scaling-explorations/maci/tree/dev/packages/circuits):
9
9
 
10
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
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.