@maci-protocol/cli 0.0.0-ci.e3476db → 0.0.0-ci.e998765

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/build/ts/index.js CHANGED
@@ -45,6 +45,7 @@ const fs_1 = __importDefault(require("fs"));
45
45
  const path_1 = __importDefault(require("path"));
46
46
  require("./cliInit");
47
47
  const utils_1 = require("./utils");
48
+ const constants_1 = require("./utils/constants");
48
49
  const defaults_1 = require("./utils/defaults");
49
50
  // set the description version and name of the cli tool
50
51
  const { description, version, name } = JSON.parse(fs_1.default.readFileSync(path_1.default.resolve(__dirname, "..", "package.json"), "utf8"));
@@ -66,25 +67,25 @@ program
66
67
  .option("-q, --quiet <quiet>", "whether to print values to the console", (value) => value === "true", false)
67
68
  .option("-r, --rpc-provider <provider>", "the rpc provider URL")
68
69
  .requiredOption("-s, --stateTreeDepth <stateTreeDepth>", "the state tree depth", parseInt)
69
- .action(async (cmdOptions) => {
70
+ .action(async (args) => {
70
71
  try {
71
72
  const signer = await getSigner();
72
- (0, utils_1.banner)(cmdOptions.quiet);
73
+ (0, utils_1.banner)(args.quiet);
73
74
  const network = await signer.provider?.getNetwork();
74
75
  const [poseidonT3, poseidonT4, poseidonT5, poseidonT6] = (0, utils_1.readContractAddresses)({
75
76
  contractNames: [sdk_1.EContracts.PoseidonT3, sdk_1.EContracts.PoseidonT4, sdk_1.EContracts.PoseidonT5, sdk_1.EContracts.PoseidonT6],
76
77
  network: network?.name,
77
78
  });
78
79
  let [signupPolicyContractAddress] = (0, utils_1.readContractAddresses)({
79
- contractNames: [cmdOptions.signupPolicyContractName.toString()],
80
+ contractNames: [args.signupPolicyContractName.toString()],
80
81
  network: network?.name,
81
82
  });
82
83
  if (!signupPolicyContractAddress) {
83
- const checkerFactory = cmdOptions.freeForAllCheckerFactoryAddress
84
- ? sdk_1.FreeForAllCheckerFactory__factory.connect(cmdOptions.freeForAllCheckerFactoryAddress, signer)
84
+ const checkerFactory = args.freeForAllCheckerFactoryAddress
85
+ ? sdk_1.FreeForAllCheckerFactory__factory.connect(args.freeForAllCheckerFactoryAddress, signer)
85
86
  : undefined;
86
- const policyFactory = cmdOptions.freeForAllPolicyFactoryAddress
87
- ? sdk_1.FreeForAllPolicyFactory__factory.connect(cmdOptions.freeForAllPolicyFactoryAddress, signer)
87
+ const policyFactory = args.freeForAllPolicyFactoryAddress
88
+ ? sdk_1.FreeForAllPolicyFactory__factory.connect(args.freeForAllPolicyFactoryAddress, signer)
88
89
  : undefined;
89
90
  const [contract] = await (0, sdk_1.deployFreeForAllSignUpPolicy)({ checker: checkerFactory, policy: policyFactory }, signer, true);
90
91
  signupPolicyContractAddress = await contract.getAddress();
@@ -102,13 +103,13 @@ program
102
103
  poseidonT6,
103
104
  },
104
105
  signer,
105
- stateTreeDepth: cmdOptions.stateTreeDepth,
106
+ stateTreeDepth: args.stateTreeDepth,
106
107
  });
107
- const emptyBallotRoots = (0, sdk_1.genEmptyBallotRoots)(cmdOptions.stateTreeDepth);
108
+ const emptyBallotRoots = (0, sdk_1.generateEmptyBallotRoots)(args.stateTreeDepth);
108
109
  // save to the JSON File
109
110
  await (0, utils_1.storeContractAddresses)({
110
111
  data: {
111
- [cmdOptions.signupPolicyContractName]: { address: signupPolicyContractAddress, args: [] },
112
+ [args.signupPolicyContractName]: { address: signupPolicyContractAddress, args: [] },
112
113
  [sdk_1.EContracts.Verifier]: { address: verifierContractAddress, args: [] },
113
114
  [sdk_1.EContracts.MACI]: {
114
115
  address: maciContractAddress,
@@ -117,7 +118,7 @@ program
117
118
  messageProcessorFactoryContractAddress,
118
119
  tallyFactoryContractAddress,
119
120
  signupPolicyContractAddress,
120
- cmdOptions.stateTreeDepth,
121
+ args.stateTreeDepth,
121
122
  emptyBallotRoots.map((root) => root.toString()),
122
123
  ],
123
124
  },
@@ -131,7 +132,7 @@ program
131
132
  },
132
133
  signer,
133
134
  });
134
- (0, sdk_1.logGreen)({ quiet: cmdOptions.quiet, text: (0, sdk_1.success)(`MACI deployed at: ${maciContractAddress}`) });
135
+ (0, sdk_1.logGreen)({ quiet: args.quiet, text: (0, sdk_1.success)(`MACI deployed at: ${maciContractAddress}`) });
135
136
  }
136
137
  catch (error) {
137
138
  program.error(error.message, { exitCode: 1 });
@@ -140,75 +141,75 @@ program
140
141
  program
141
142
  .command("checkVerifyingKeys")
142
143
  .description("check that the verifying keys in the contract match the local ones")
143
- .option("-u, --use-quadratic-voting <useQuadraticVoting>", "whether to use quadratic voting", (value) => value === "true", true)
144
+ .option("-m, --mode <mode>", "Voting mode (qv, non-qv, full)", (value) => constants_1.MODE_NAME_TO_ENUM[value], sdk_1.EMode.QV)
144
145
  .option("-q, --quiet <quiet>", "whether to print values to the console", (value) => value === "true", false)
145
146
  .option("-r, --rpc-provider <provider>", "the rpc provider URL")
146
- .option("-k, --vk-contract <vkContract>", "the VkRegistry contract address")
147
+ .option("-k, --vk-contract <vkContract>", "the VerifyingKeysRegistry contract address")
147
148
  .requiredOption("-s, --state-tree-depth <stateTreeDepth>", "the state tree depth", parseInt)
148
- .requiredOption("-i, --int-state-tree-depth <intStateTreeDepth>", "the intermediate state tree depth", parseInt)
149
+ .requiredOption("-i, --tally-processing-state-tree-depth <tallyProcessingStateTreeDepth>", "the intermediate state tree depth", parseInt)
149
150
  .requiredOption("-v, --vote-option-tree-depth <voteOptionTreeDepth>", "the vote option tree depth", parseInt)
150
- .requiredOption("-b, --msg-batch-size <messageBatchSize>", "the message batch size", parseInt)
151
- .requiredOption("-p, --process-messages-zkey <processMessagesZkeyPath>", "the process messages zkey path (see different options for zkey files to use specific circuits https://maci.pse.dev/docs/trusted-setup, https://maci.pse.dev/docs/testing/#pre-compiled-artifacts-for-testing)")
152
- .requiredOption("-t, --tally-votes-zkey <tallyVotesZkeyPath>", "the tally votes zkey path (see different options for zkey files to use specific circuits https://maci.pse.dev/docs/trusted-setup, https://maci.pse.dev/docs/testing/#pre-compiled-artifacts-for-testing)")
151
+ .requiredOption("-b, --message-batch-size <messageBatchSize>", "the message batch size", parseInt)
152
+ .requiredOption("-p, --message-processor-zkey <messageProcessorZkeyPath>", "the message processor zkey path (see different options for zkey files to use specific circuits https://maci.pse.dev/docs/trusted-setup, https://maci.pse.dev/docs/testing/#pre-compiled-artifacts-for-testing)")
153
+ .requiredOption("-t, --vote-tally-zkey <voteTallyZkeyPath>", "the vote tally zkey path (see different options for zkey files to use specific circuits https://maci.pse.dev/docs/trusted-setup, https://maci.pse.dev/docs/testing/#pre-compiled-artifacts-for-testing)")
153
154
  .requiredOption("--poll-joining-zkey <pollJoiningZkey>", "the poll joining zkey path (see different options for zkey files to use specific circuits https://maci.pse.dev/docs/trusted-setup, https://maci.pse.dev/docs/testing/#pre-compiled-artifacts-for-testing)")
154
155
  .requiredOption("--poll-joined-zkey <pollJoinedZkey>", "the poll joined zkey path (see different options for zkey files to use specific circuits https://maci.pse.dev/docs/trusted-setup, https://maci.pse.dev/docs/testing/#pre-compiled-artifacts-for-testing)")
155
- .action(async (cmdOptions) => {
156
+ .action(async (args) => {
156
157
  try {
157
158
  const signer = await getSigner();
158
159
  const network = await signer.provider?.getNetwork();
159
- const [vkContractAddress] = (0, utils_1.readContractAddresses)({
160
- contractNames: [sdk_1.EContracts.VkRegistry],
160
+ const [contractAddress] = (0, utils_1.readContractAddresses)({
161
+ contractNames: [sdk_1.EContracts.VerifyingKeysRegistry],
161
162
  network: network?.name,
162
- defaultAddresses: [cmdOptions.vkContract],
163
+ defaultAddresses: [args.vkContract],
163
164
  });
164
- (0, sdk_1.logYellow)({ quiet: cmdOptions.quiet, text: (0, sdk_1.info)("Retrieving verifying keys from the contract...") });
165
+ (0, sdk_1.logYellow)({ quiet: args.quiet, text: (0, sdk_1.info)("Retrieving verifying keys from the contract...") });
165
166
  await (0, sdk_1.checkVerifyingKeys)({
166
- stateTreeDepth: cmdOptions.stateTreeDepth,
167
- intStateTreeDepth: cmdOptions.intStateTreeDepth,
168
- voteOptionTreeDepth: cmdOptions.voteOptionTreeDepth,
169
- messageBatchSize: cmdOptions.msgBatchSize,
170
- processMessagesZkeyPath: cmdOptions.processMessagesZkey,
171
- tallyVotesZkeyPath: cmdOptions.tallyVotesZkey,
172
- pollJoiningZkeyPath: cmdOptions.pollJoiningZkey,
173
- pollJoinedZkeyPath: cmdOptions.pollJoinedZkey,
174
- vkRegistry: vkContractAddress,
175
- useQuadraticVoting: cmdOptions.useQuadraticVoting,
167
+ stateTreeDepth: args.stateTreeDepth,
168
+ tallyProcessingStateTreeDepth: args.tallyProcessingStateTreeDepth,
169
+ voteOptionTreeDepth: args.voteOptionTreeDepth,
170
+ messageBatchSize: args.messageBatchSize,
171
+ messageProcessorZkeyPath: args.messageProcessorZkey,
172
+ voteTallyZkeyPath: args.voteTallyZkey,
173
+ pollJoiningZkeyPath: args.pollJoiningZkey,
174
+ pollJoinedZkeyPath: args.pollJoinedZkey,
175
+ verifyingKeysRegistry: contractAddress,
176
+ mode: args.mode,
176
177
  signer,
177
178
  });
178
- (0, sdk_1.logGreen)({ quiet: cmdOptions.quiet, text: (0, sdk_1.success)("Verifying keys match") });
179
+ (0, sdk_1.logGreen)({ quiet: args.quiet, text: (0, sdk_1.success)("Verifying keys match") });
179
180
  }
180
181
  catch (error) {
181
182
  program.error(error.message, { exitCode: 1 });
182
183
  }
183
184
  });
184
185
  program
185
- .command("genMaciPubKey")
186
+ .command("generateMaciPubKey")
186
187
  .description("generate a new MACI public key")
187
- .requiredOption("-k, --privkey <privkey>", "the private key")
188
+ .requiredOption("-k, --private-key <privateKey>", "the private key")
188
189
  .option("-q, --quiet <quiet>", "whether to print values to the console", (value) => value === "true", false)
189
190
  .option("-r, --rpc-provider <provider>", "the rpc provider URL")
190
- .action((cmdObj) => {
191
- const publicKey = (0, sdk_1.generateMaciPublicKey)(cmdObj.privkey);
192
- (0, sdk_1.logGreen)({ quiet: cmdObj.quiet, text: (0, sdk_1.success)(`Public key: ${publicKey}`) });
191
+ .action((args) => {
192
+ const publicKey = (0, sdk_1.generateMaciPublicKey)(args.privateKey);
193
+ (0, sdk_1.logGreen)({ quiet: args.quiet, text: (0, sdk_1.success)(`Public key: ${publicKey}`) });
193
194
  });
194
195
  program
195
- .command("genMaciKeyPair")
196
+ .command("generateMaciKeyPair")
196
197
  .description("generate a new MACI key pair")
197
198
  .option("-s, --seed <seed>", "seed value for keypair", (value) => (value ? BigInt(value) : undefined), undefined)
198
199
  .option("-q, --quiet <quiet>", "whether to print values to the console", (value) => value === "true", false)
199
- .action((cmdObj) => {
200
- const { publicKey, privateKey } = (0, sdk_1.generateKeypair)({ seed: cmdObj.seed });
201
- (0, sdk_1.logGreen)({ quiet: cmdObj.quiet, text: (0, sdk_1.success)(`Public key: ${publicKey}`) });
202
- (0, sdk_1.logGreen)({ quiet: cmdObj.quiet, text: (0, sdk_1.success)(`Private key: ${privateKey}`) });
200
+ .action((args) => {
201
+ const { publicKey, privateKey } = (0, sdk_1.generateKeypair)({ seed: args.seed });
202
+ (0, sdk_1.logGreen)({ quiet: args.quiet, text: (0, sdk_1.success)(`Public key: ${publicKey}`) });
203
+ (0, sdk_1.logGreen)({ quiet: args.quiet, text: (0, sdk_1.success)(`Private key: ${privateKey}`) });
203
204
  });
204
205
  program
205
- .command("deployVkRegistry")
206
+ .command("deployVerifyingKeysRegistry")
206
207
  .description("deploy a new verification key registry contract")
207
208
  .option("-q, --quiet <quiet>", "whether to print values to the console", (value) => value === "true", false)
208
209
  .option("-r, --rpc-provider <provider>", "the rpc provider URL")
209
- .action(async (cmdObj) => {
210
+ .action(async (args) => {
210
211
  try {
211
- (0, utils_1.banner)(cmdObj.quiet);
212
+ (0, utils_1.banner)(args.quiet);
212
213
  const signer = await getSigner();
213
214
  // assume that the vkRegistry contract is the first one to be deployed
214
215
  const isContractAddressesStoreExists = fs_1.default.existsSync(utils_1.contractAddressesStorePath);
@@ -217,12 +218,15 @@ program
217
218
  (0, utils_1.resetContractAddresses)(network?.name);
218
219
  }
219
220
  // deploy and store the address
220
- const vkRegistryAddress = await (0, sdk_1.deployVkRegistryContract)({ signer });
221
+ const verifyingKeysRegistryAddress = await (0, sdk_1.deployVerifyingKeysRegistryContract)({ signer });
221
222
  await (0, utils_1.storeContractAddresses)({
222
- data: { [sdk_1.EContracts.VkRegistry]: { address: vkRegistryAddress, args: [] } },
223
+ data: { [sdk_1.EContracts.VerifyingKeysRegistry]: { address: verifyingKeysRegistryAddress, args: [] } },
223
224
  signer,
224
225
  });
225
- (0, sdk_1.logGreen)({ quiet: cmdObj.quiet, text: (0, sdk_1.success)(`VkRegistry deployed at: ${vkRegistryAddress}`) });
226
+ (0, sdk_1.logGreen)({
227
+ quiet: args.quiet,
228
+ text: (0, sdk_1.success)(`VerifyingKeysRegistry deployed at: ${verifyingKeysRegistryAddress}`),
229
+ });
226
230
  }
227
231
  catch (error) {
228
232
  program.error(error.message, { exitCode: 1 });
@@ -249,36 +253,37 @@ program
249
253
  program
250
254
  .command("deployPoll")
251
255
  .description("deploy a new poll")
252
- .option("-k, --vkRegistryAddress <vkRegistryAddress>", "the vk registry contract address")
253
- .requiredOption("-s, --start <pollStartDate>", "the poll start date", parseInt)
254
- .requiredOption("-e, --end <pollEndDate>", "the poll end date", parseInt)
255
- .requiredOption("-i, --int-state-tree-depth <intStateTreeDepth>", "the int state tree depth", parseInt)
256
- .requiredOption("-b, --msg-batch-size <messageBatchSize>", "the message batch size", parseInt)
256
+ .option("-k, --verifyingKeysRegistryAddress <verifyingKeysRegistryAddress>", "the vk registry contract address")
257
+ .requiredOption("--start <pollStartDate>", "the poll start date", parseInt)
258
+ .requiredOption("--end <pollEndDate>", "the poll end date", parseInt)
259
+ .requiredOption("-i, --tally-processing-state-tree-depth <tallyProcessingStateTreeDepth>", "the int state tree depth", parseInt)
260
+ .requiredOption("-b, --message-batch-size <messageBatchSize>", "the message batch size", parseInt)
261
+ .requiredOption("-s, --state-tree-depth <stateTreeDepth>", "the state tree depth", parseInt)
257
262
  .requiredOption("-v, --vote-option-tree-depth <voteOptionTreeDepth>", "the vote option tree depth", parseInt)
258
- .requiredOption("-p, --pubkey <coordinatorPubkey>", "the coordinator public key")
259
- .option("-u, --use-quadratic-voting <useQuadraticVoting>", "whether to use quadratic voting", (value) => value === "true", true)
263
+ .requiredOption("-p, --public-key <publicKey>", "the coordinator public key")
264
+ .option("-m, --mode <mode>", "Voting mode (qv, non-qv, full)", (value) => constants_1.MODE_NAME_TO_ENUM[value], sdk_1.EMode.QV)
260
265
  .option("-x, --maci-address <maciAddress>", "the MACI contract address")
261
- .option("-m, --relayers <relayers>", "the relayer addresses", (value) => value.split(",").map((item) => item.trim()))
266
+ .option("--relayers <relayers>", "the relayer addresses", (value) => value.split(",").map((item) => item.trim()))
262
267
  .option("-q, --quiet <quiet>", "whether to print values to the console", (value) => value === "true", false)
263
268
  .option("-r, --rpc-provider <provider>", "the rpc provider URL")
264
269
  .option("-o, --vote-options <voteOptions>", "the number of vote options", parseInt)
265
270
  .option("--initial-voice-credits <initialVoiceCredits>", "the initial voice credits", parseInt)
266
271
  .option("--initial-voice-credits-proxy <initialVoiceCreditsProxy>", "the initial voice credits proxy address")
267
272
  .option("--signup-policy <signupPolicy>", "the signup policy contract address")
268
- .action(async (cmdObj) => {
273
+ .action(async (args) => {
269
274
  try {
270
- (0, utils_1.banner)(cmdObj.quiet);
275
+ (0, utils_1.banner)(args.quiet);
271
276
  const signer = await getSigner();
272
277
  const network = await signer.provider?.getNetwork();
273
- const [vkRegistryAddress, maciAddress, initialVoiceCreditProxyAddress, verifierContractAddress] = (0, utils_1.readContractAddresses)({
278
+ const [verifyingKeysRegistryAddress, maciAddress, initialVoiceCreditProxyAddress, verifierContractAddress] = (0, utils_1.readContractAddresses)({
274
279
  contractNames: [
275
- sdk_1.EContracts.VkRegistry,
280
+ sdk_1.EContracts.VerifyingKeysRegistry,
276
281
  sdk_1.EContracts.MACI,
277
282
  sdk_1.EContracts.ConstantInitialVoiceCreditProxy,
278
283
  sdk_1.EContracts.Verifier,
279
284
  ],
280
285
  network: network?.name,
281
- defaultAddresses: [cmdObj.vkRegistryAddress, cmdObj.maciAddress, cmdObj.initialVoiceCreditsProxy],
286
+ defaultAddresses: [args.verifyingKeysRegistryAddress, args.maciAddress, args.initialVoiceCreditsProxy],
282
287
  });
283
288
  const maciContract = sdk_1.MACI__factory.connect(maciAddress, signer);
284
289
  const nextPollId = await maciContract.nextPollId();
@@ -288,39 +293,40 @@ program
288
293
  contractNames: [policyContractName.toString()],
289
294
  keys: [nextPollId.toString()],
290
295
  network: network?.name,
291
- defaultAddresses: [cmdObj.signupPolicy],
296
+ defaultAddresses: [args.signupPolicy],
292
297
  });
293
298
  const { pollId, pollContractAddress, tallyContractAddress, messageProcessorContractAddress, initialVoiceCreditProxyContractAddress, policyContractAddress, } = await (0, sdk_1.deployPoll)({
294
- initialVoiceCredits: cmdObj.initialVoiceCredits || defaults_1.DEFAULT_INITIAL_VOICE_CREDITS,
295
- pollStartTimestamp: cmdObj.start,
296
- pollEndTimestamp: cmdObj.end,
297
- intStateTreeDepth: cmdObj.intStateTreeDepth,
298
- messageBatchSize: cmdObj.msgBatchSize,
299
- voteOptionTreeDepth: cmdObj.voteOptionTreeDepth,
300
- coordinatorPubKey: domainobjs_1.PubKey.deserialize(cmdObj.pubkey),
299
+ initialVoiceCredits: args.initialVoiceCredits || defaults_1.DEFAULT_INITIAL_VOICE_CREDITS,
300
+ pollStartTimestamp: args.start,
301
+ pollEndTimestamp: args.end,
302
+ tallyProcessingStateTreeDepth: args.tallyProcessingStateTreeDepth,
303
+ messageBatchSize: args.messageBatchSize,
304
+ stateTreeDepth: args.stateTreeDepth,
305
+ voteOptionTreeDepth: args.voteOptionTreeDepth,
306
+ coordinatorPublicKey: domainobjs_1.PublicKey.deserialize(args.publicKey),
301
307
  maciAddress,
302
- vkRegistryContractAddress: vkRegistryAddress,
303
- relayers: cmdObj.relayers ?? [ethers_1.ZeroAddress],
304
- mode: cmdObj.useQuadraticVoting ? sdk_1.EMode.QV : sdk_1.EMode.NON_QV,
308
+ verifyingKeysRegistryContractAddress: verifyingKeysRegistryAddress,
309
+ relayers: args.relayers ?? [ethers_1.ZeroAddress],
310
+ mode: args.mode,
305
311
  signer,
306
- voteOptions: cmdObj.voteOptions ?? defaults_1.DEFAULT_VOTE_OPTIONS,
312
+ voteOptions: args.voteOptions ?? defaults_1.DEFAULT_VOTE_OPTIONS,
307
313
  verifierContractAddress,
308
314
  policyContractAddress: signupPolicyContractAddress,
309
315
  initialVoiceCreditProxyContractAddress: initialVoiceCreditProxyAddress,
310
316
  });
311
- (0, sdk_1.logGreen)({ quiet: cmdObj.quiet, text: (0, sdk_1.success)(`Poll ID: ${pollId}`) });
312
- (0, sdk_1.logGreen)({ quiet: cmdObj.quiet, text: (0, sdk_1.success)(`Poll contract address: ${pollContractAddress}`) });
313
- (0, sdk_1.logGreen)({ quiet: cmdObj.quiet, text: (0, sdk_1.success)(`Tally contract address: ${tallyContractAddress}`) });
317
+ (0, sdk_1.logGreen)({ quiet: args.quiet, text: (0, sdk_1.success)(`Poll ID: ${pollId}`) });
318
+ (0, sdk_1.logGreen)({ quiet: args.quiet, text: (0, sdk_1.success)(`Poll contract address: ${pollContractAddress}`) });
319
+ (0, sdk_1.logGreen)({ quiet: args.quiet, text: (0, sdk_1.success)(`Tally contract address: ${tallyContractAddress}`) });
314
320
  (0, sdk_1.logGreen)({
315
- quiet: cmdObj.quiet,
321
+ quiet: args.quiet,
316
322
  text: (0, sdk_1.success)(`Message processor contract address: ${messageProcessorContractAddress}`),
317
323
  });
318
324
  (0, sdk_1.logGreen)({
319
- quiet: cmdObj.quiet,
325
+ quiet: args.quiet,
320
326
  text: (0, sdk_1.success)(`Initial voice credit proxy contract address: ${initialVoiceCreditProxyContractAddress}`),
321
327
  });
322
328
  (0, sdk_1.logGreen)({
323
- quiet: cmdObj.quiet,
329
+ quiet: args.quiet,
324
330
  text: (0, sdk_1.success)(`Signup policy contract address: ${policyContractAddress}`),
325
331
  });
326
332
  }
@@ -331,8 +337,7 @@ program
331
337
  program
332
338
  .command("joinPoll")
333
339
  .description("join the poll")
334
- .requiredOption("-k, --priv-key <privKey>", "the private key")
335
- .option("-i, --state-index <stateIndex>", "the user's state index", BigInt)
340
+ .requiredOption("-k, --private-key <privateKey>", "the private key")
336
341
  .option("-s, --sg-data <sgData>", "the signup policy data")
337
342
  .option("-v, --ivcp-data <ivcpData>", "the initial voice credit proxy data")
338
343
  .option("-n, --new-voice-credit-balance <newVoiceCreditBalance>", "the voice credit balance of the user for the poll", BigInt)
@@ -348,38 +353,37 @@ program
348
353
  .requiredOption("--poll-joining-zkey <pollZkeyPath>", "the poll join zkey path (see different options for zkey files to use specific circuits https://maci.pse.dev/docs/trusted-setup, https://maci.pse.dev/docs/testing/#pre-compiled-artifacts-for-testing)")
349
354
  .option("-w, --wasm", "whether to use the wasm binaries")
350
355
  .option("-r, --rapidsnark <rapidsnark>", "the path to the rapidsnark binary")
351
- .option("-g, --poll-witnessgen <pollWitnessgen>", "the path to the poll witness generation binary")
352
- .action(async (cmdObj) => {
356
+ .option("-g, --poll-witness-generator <pollWitnessGenerator>", "the path to the poll witness generation binary")
357
+ .action(async (args) => {
353
358
  try {
354
359
  const signer = await getSigner();
355
360
  const network = await signer.provider?.getNetwork();
356
361
  const [maciAddress] = (0, utils_1.readContractAddresses)({
357
362
  contractNames: [sdk_1.EContracts.MACI],
358
363
  network: network?.name,
359
- defaultAddresses: [cmdObj.maciAddress],
364
+ defaultAddresses: [args.maciAddress],
360
365
  });
361
- const privateKey = cmdObj.privKey || (await (0, utils_1.promptSensitiveValue)("Insert your MACI private key"));
366
+ const privateKey = args.privateKey || (await (0, utils_1.promptSensitiveValue)("Insert your MACI private key"));
362
367
  const data = await (0, sdk_1.joinPoll)({
363
368
  maciAddress,
364
369
  privateKey,
365
- stateIndex: cmdObj.stateIndex,
366
- stateFile: cmdObj.stateFile,
367
- pollId: cmdObj.pollId,
370
+ stateFile: args.stateFile,
371
+ pollId: args.pollId,
368
372
  signer,
369
- startBlock: cmdObj.startBlock,
370
- endBlock: cmdObj.endBlock,
371
- blocksPerBatch: cmdObj.blocksPerBatch,
372
- pollJoiningZkey: cmdObj.pollJoiningZkey,
373
- pollWasm: cmdObj.pollWasm,
374
- useWasm: cmdObj.wasm,
375
- rapidsnark: cmdObj.rapidsnark,
376
- pollWitgen: cmdObj.pollWitnessgen,
377
- sgDataArg: cmdObj.sgData ?? utils_1.DEFAULT_SG_DATA,
378
- ivcpDataArg: cmdObj.ivcpData ?? utils_1.DEFAULT_IVCP_DATA,
379
- });
380
- (0, sdk_1.logGreen)({ quiet: cmdObj.quiet, text: (0, sdk_1.info)(`User joined poll with nullifier: ${data.nullifier}`) });
381
- (0, sdk_1.logGreen)({ quiet: cmdObj.quiet, text: (0, sdk_1.info)(`User joined poll with state index: ${data.pollStateIndex}`) });
382
- (0, sdk_1.logGreen)({ quiet: cmdObj.quiet, text: (0, sdk_1.info)(`User joined poll with ${data.voiceCredits} voice credits`) });
373
+ startBlock: args.startBlock,
374
+ endBlock: args.endBlock,
375
+ blocksPerBatch: args.blocksPerBatch,
376
+ pollJoiningZkey: args.pollJoiningZkey,
377
+ pollWasm: args.pollWasm,
378
+ useWasm: args.wasm,
379
+ rapidsnark: args.rapidsnark,
380
+ pollWitnessGenerator: args.pollWitnessGenerator,
381
+ sgDataArg: args.sgData ?? utils_1.DEFAULT_SG_DATA,
382
+ ivcpDataArg: args.ivcpData ?? utils_1.DEFAULT_IVCP_DATA,
383
+ });
384
+ (0, sdk_1.logGreen)({ quiet: args.quiet, text: (0, sdk_1.info)(`User joined poll with nullifier: ${data.nullifier}`) });
385
+ (0, sdk_1.logGreen)({ quiet: args.quiet, text: (0, sdk_1.info)(`User joined poll with state index: ${data.pollStateIndex}`) });
386
+ (0, sdk_1.logGreen)({ quiet: args.quiet, text: (0, sdk_1.info)(`User joined poll with ${data.voiceCredits} voice credits`) });
383
387
  }
384
388
  catch (error) {
385
389
  program.error(error.message, { exitCode: 1 });
@@ -389,47 +393,59 @@ program
389
393
  .command("setVerifyingKeys")
390
394
  .description("set the verifying keys")
391
395
  .requiredOption("-s, --state-tree-depth <stateTreeDepth>", "the state tree depth", parseInt)
392
- .requiredOption("-i, --int-state-tree-depth <intStateTreeDepth>", "the intermediate state tree depth", parseInt)
396
+ .requiredOption("-i, --tally-processing-state-tree-depth <tallyProcessingStateTreeDepth>", "the intermediate state tree depth", parseInt)
393
397
  .requiredOption("-v, --vote-option-tree-depth <voteOptionTreeDepth>", "the vote option tree depth", parseInt)
394
- .requiredOption("-b, --msg-batch-size <messageBatchSize>", "the message batch size", parseInt)
398
+ .requiredOption("-b, --message-batch-size <messageBatchSize>", "the message batch size", parseInt)
399
+ .option("--poll-state-tree-depth <pollStateTreeDepth>", "the poll state tree depth", parseInt)
395
400
  .option("--poll-joining-zkey <pollJoiningZkeyPath>", "the poll joining zkey path (see different options for zkey files to use specific circuits https://maci.pse.dev/docs/trusted-setup, https://maci.pse.dev/docs/testing/#pre-compiled-artifacts-for-testing)")
396
401
  .option("--poll-joined-zkey <pollJoinedZkeyPath>", "the poll joined zkey path (see different options for zkey files to use specific circuits https://maci.pse.dev/docs/trusted-setup, https://maci.pse.dev/docs/testing/#pre-compiled-artifacts-for-testing)")
397
- .option("--process-messages-zkey-qv <processMessagesZkeyPathQv>", "the process messages qv zkey path (see different options for zkey files to use specific circuits https://maci.pse.dev/docs/trusted-setup, https://maci.pse.dev/docs/testing/#pre-compiled-artifacts-for-testing)")
398
- .option("--tally-votes-zkey-qv <tallyVotesZkeyPathQv>", "the tally votes qv zkey path (see different options for zkey files to use specific circuits https://maci.pse.dev/docs/trusted-setup, https://maci.pse.dev/docs/testing/#pre-compiled-artifacts-for-testing)")
399
- .option("--process-messages-zkey-non-qv <processMessagesZkeyPathNonQv>", "the process messages non-qv zkey path (see different options for zkey files to use specific circuits https://maci.pse.dev/docs/trusted-setup, https://maci.pse.dev/docs/testing/#pre-compiled-artifacts-for-testing)")
400
- .option("--tally-votes-zkey-non-qv <tallyVotesZkeyPathNonQv>", "the tally votes non-qv zkey path (see different options for zkey files to use specific circuits https://maci.pse.dev/docs/trusted-setup, https://maci.pse.dev/docs/testing/#pre-compiled-artifacts-for-testing)")
401
- .option("-u, --use-quadratic-voting <useQuadraticVoting>", "whether to use quadratic voting", (value) => value === "true", true)
402
+ .option("--message-processor-zkey-qv <messageProcessorZkeyPathQv>", "the message processor qv zkey path (see different options for zkey files to use specific circuits https://maci.pse.dev/docs/trusted-setup, https://maci.pse.dev/docs/testing/#pre-compiled-artifacts-for-testing)")
403
+ .option("--vote-tally-zkey-qv <voteTallyZkeyPathQv>", "the vote tally qv zkey path (see different options for zkey files to use specific circuits https://maci.pse.dev/docs/trusted-setup, https://maci.pse.dev/docs/testing/#pre-compiled-artifacts-for-testing)")
404
+ .option("--message-processor-zkey-non-qv <messageProcessorZkeyPathNonQv>", "the message processor non-qv zkey path (see different options for zkey files to use specific circuits https://maci.pse.dev/docs/trusted-setup, https://maci.pse.dev/docs/testing/#pre-compiled-artifacts-for-testing)")
405
+ .option("--vote-tally-zkey-non-qv <voteTallyZkeyPathNonQv>", "the vote tally non-qv zkey path (see different options for zkey files to use specific circuits https://maci.pse.dev/docs/trusted-setup, https://maci.pse.dev/docs/testing/#pre-compiled-artifacts-for-testing)")
406
+ .option("--message-processor-zkey-full <messageProcessorZkeyPathFull>", "the message processor full zkey path (see different options for zkey files to use specific circuits https://maci.pse.dev/docs/trusted-setup, https://maci.pse.dev/docs/testing/#pre-compiled-artifacts-for-testing)")
407
+ .option("--vote-tally-zkey-full <tallyVotesZkeyPathFull>", "the vote tally full zkey path (see different options for zkey files to use specific circuits https://maci.pse.dev/docs/trusted-setup, https://maci.pse.dev/docs/testing/#pre-compiled-artifacts-for-testing)")
408
+ .option("-m, --mode <mode>", "Voting mode (qv, non-qv, full)", (value) => constants_1.MODE_NAME_TO_ENUM[value], sdk_1.EMode.QV)
402
409
  .option("-k, --vk-registry <vkRegistry>", "the vk registry contract address")
403
410
  .option("-q, --quiet <quiet>", "whether to print values to the console", (value) => value === "true", false)
404
411
  .option("-r, --rpc-provider <provider>", "the rpc provider URL")
405
- .action(async (cmdObj) => {
412
+ .action(async (args) => {
406
413
  try {
407
414
  const signer = await getSigner();
408
415
  const network = await signer.provider?.getNetwork();
409
- const [vkRegistryAddress] = (0, utils_1.readContractAddresses)({
410
- contractNames: [sdk_1.EContracts.VkRegistry],
416
+ const [verifyingKeysRegistryAddress] = (0, utils_1.readContractAddresses)({
417
+ contractNames: [sdk_1.EContracts.VerifyingKeysRegistry],
411
418
  network: network?.name,
412
- defaultAddresses: [cmdObj.vkRegistry],
419
+ defaultAddresses: [args.vkRegistry],
413
420
  });
414
- const { pollJoiningVk, pollJoinedVk, processVk, tallyVk } = await (0, sdk_1.extractAllVks)({
415
- pollJoiningZkeyPath: cmdObj.pollJoiningZkey,
416
- pollJoinedZkeyPath: cmdObj.pollJoinedZkey,
417
- processMessagesZkeyPath: cmdObj.useQuadraticVoting
418
- ? cmdObj.processMessagesZkeyQv
419
- : cmdObj.processMessagesZkeyNonQv,
420
- tallyVotesZkeyPath: cmdObj.useQuadraticVoting ? cmdObj.tallyVotesZkeyQv : cmdObj.tallyVotesZkeyQv,
421
+ const processKeys = {
422
+ [sdk_1.EMode.QV]: args.messageProcessorZkeyQv,
423
+ [sdk_1.EMode.NON_QV]: args.messageProcessorZkeyNonQv,
424
+ [sdk_1.EMode.FULL]: args.messageProcessorZkeyFull,
425
+ };
426
+ const tallyKeys = {
427
+ [sdk_1.EMode.QV]: args.voteTallyZkeyQv,
428
+ [sdk_1.EMode.NON_QV]: args.voteTallyZkeyNonQv,
429
+ [sdk_1.EMode.FULL]: args.voteTallyZkeyFull,
430
+ };
431
+ const { pollJoiningVerifyingKey, pollJoinedVerifyingKey, processVerifyingKey, tallyVerifyingKey } = await (0, sdk_1.extractAllVerifyingKeys)({
432
+ pollJoiningZkeyPath: args.pollJoiningZkey,
433
+ pollJoinedZkeyPath: args.pollJoinedZkey,
434
+ messageProcessorZkeyPath: processKeys[args.mode],
435
+ voteTallyZkeyPath: tallyKeys[args.mode],
421
436
  });
422
437
  await (0, sdk_1.setVerifyingKeys)({
423
- stateTreeDepth: cmdObj.stateTreeDepth,
424
- intStateTreeDepth: cmdObj.intStateTreeDepth,
425
- voteOptionTreeDepth: cmdObj.voteOptionTreeDepth,
426
- messageBatchSize: cmdObj.msgBatchSize,
427
- pollJoiningVk: pollJoiningVk,
428
- pollJoinedVk: pollJoinedVk,
429
- processMessagesVk: processVk,
430
- tallyVotesVk: tallyVk,
431
- vkRegistryAddress,
432
- mode: cmdObj.useQuadraticVoting ? sdk_1.EMode.QV : sdk_1.EMode.NON_QV,
438
+ stateTreeDepth: args.stateTreeDepth,
439
+ tallyProcessingStateTreeDepth: args.tallyProcessingStateTreeDepth,
440
+ voteOptionTreeDepth: args.voteOptionTreeDepth,
441
+ messageBatchSize: args.messageBatchSize,
442
+ pollStateTreeDepth: args.pollStateTreeDepth || args.stateTreeDepth,
443
+ pollJoiningVerifyingKey: pollJoiningVerifyingKey,
444
+ pollJoinedVerifyingKey: pollJoinedVerifyingKey,
445
+ processMessagesVerifyingKey: processVerifyingKey,
446
+ tallyVotesVerifyingKey: tallyVerifyingKey,
447
+ verifyingKeysRegistryAddress,
448
+ mode: args.mode,
433
449
  signer,
434
450
  });
435
451
  }
@@ -440,9 +456,9 @@ program
440
456
  program
441
457
  .command("publish")
442
458
  .description("publish a new message to a MACI Poll contract")
443
- .requiredOption("-p, --pubkey <pubkey>", "the MACI public key which should replace the user's public key in the state tree")
459
+ .requiredOption("-p, --public-key <publicKey>", "the MACI public key which should replace the user's public key in the state tree")
444
460
  .option("-x, --maci-address <maciAddress>", "the MACI contract address")
445
- .option("-k, --privkey <privkey>", "your serialized MACI private key")
461
+ .option("-k, --private-key <privateKey>", "your serialized MACI private key")
446
462
  .requiredOption("-i, --state-index <stateIndex>", "the user's state index", BigInt)
447
463
  .requiredOption("-v, --vote-option-index <voteOptionIndex>", "the vote option index", BigInt)
448
464
  .requiredOption("-n, --nonce <nonce>", "the message nonce", BigInt)
@@ -451,25 +467,25 @@ program
451
467
  .requiredOption("-w, --new-vote-weight <newVoteWeight>", "the new vote weight", BigInt)
452
468
  .option("-q, --quiet <quiet>", "whether to print values to the console", (value) => value === "true", false)
453
469
  .option("-r, --rpc-provider <provider>", "the rpc provider URL")
454
- .action(async (cmdObj) => {
470
+ .action(async (args) => {
455
471
  try {
456
472
  const signer = await getSigner();
457
473
  const network = await signer.provider?.getNetwork();
458
474
  const [maciAddress] = (0, utils_1.readContractAddresses)({
459
475
  contractNames: [sdk_1.EContracts.MACI],
460
476
  network: network?.name,
461
- defaultAddresses: [cmdObj.maciAddress],
477
+ defaultAddresses: [args.maciAddress],
462
478
  });
463
- const privateKey = cmdObj.privkey || (await (0, utils_1.promptSensitiveValue)("Insert your MACI private key"));
479
+ const privateKey = args.privateKey || (await (0, utils_1.promptSensitiveValue)("Insert your MACI private key"));
464
480
  await (0, sdk_1.publish)({
465
- pubkey: cmdObj.pubkey,
466
- stateIndex: cmdObj.stateIndex,
467
- voteOptionIndex: cmdObj.voteOptionIndex,
468
- nonce: cmdObj.nonce,
469
- pollId: cmdObj.pollId,
470
- newVoteWeight: cmdObj.newVoteWeight,
481
+ publicKey: args.publicKey,
482
+ stateIndex: args.stateIndex,
483
+ voteOptionIndex: args.voteOptionIndex,
484
+ nonce: args.nonce,
485
+ pollId: args.pollId,
486
+ newVoteWeight: args.newVoteWeight,
471
487
  maciAddress,
472
- salt: cmdObj.salt,
488
+ salt: args.salt,
473
489
  privateKey,
474
490
  signer,
475
491
  });
@@ -484,23 +500,23 @@ program
484
500
  .option("-q, --quiet <quiet>", "whether to print values to the console", (value) => value === "true", false)
485
501
  .option("-x, --maci-address <maciAddress>", "the MACI contract address")
486
502
  .requiredOption("-p, --poll-id <pollId>", "the poll id", BigInt)
487
- .action(async (cmdObj) => {
503
+ .action(async (args) => {
488
504
  try {
489
505
  const signer = await getSigner();
490
506
  const network = await signer.provider?.getNetwork();
491
507
  const [maciAddress] = (0, utils_1.readContractAddresses)({
492
508
  contractNames: [sdk_1.EContracts.MACI],
493
509
  network: network?.name,
494
- defaultAddresses: [cmdObj.maciAddress],
510
+ defaultAddresses: [args.maciAddress],
495
511
  });
496
512
  const receipt = await (0, sdk_1.mergeSignups)({
497
- pollId: cmdObj.pollId,
513
+ pollId: args.pollId,
498
514
  maciAddress,
499
515
  signer,
500
516
  });
501
- (0, sdk_1.logGreen)({ quiet: cmdObj.quiet, text: (0, sdk_1.info)(`Transaction hash: ${receipt.hash}`) });
517
+ (0, sdk_1.logGreen)({ quiet: args.quiet, text: (0, sdk_1.info)(`Transaction hash: ${receipt.hash}`) });
502
518
  (0, sdk_1.logGreen)({
503
- quiet: cmdObj.quiet,
519
+ quiet: args.quiet,
504
520
  text: (0, sdk_1.success)(`Executed mergeSignups(); gas used: ${receipt.gasUsed.toString()}`),
505
521
  });
506
522
  }
@@ -514,37 +530,39 @@ program
514
530
  .requiredOption("-s, --seconds <seconds>", "the number of seconds to fast-forward", parseInt)
515
531
  .option("-q, --quiet <quiet>", "whether to print values to the console", (value) => value === "true", false)
516
532
  .option("-r, --rpc-provider <provider>", "the rpc provider URL")
517
- .action(async (cmdObj) => {
533
+ .action(async (args) => {
518
534
  try {
519
- (0, utils_1.banner)(cmdObj.quiet);
535
+ (0, utils_1.banner)(args.quiet);
520
536
  const signer = await getSigner();
521
- await (0, sdk_1.timeTravel)({ seconds: cmdObj.seconds, signer });
522
- (0, sdk_1.logGreen)({ quiet: cmdObj.quiet, text: (0, sdk_1.success)(`Fast-forwarded ${cmdObj.seconds} seconds`) });
537
+ await (0, sdk_1.timeTravel)({ seconds: args.seconds, signer });
538
+ (0, sdk_1.logGreen)({ quiet: args.quiet, text: (0, sdk_1.success)(`Fast-forwarded ${args.seconds} seconds`) });
523
539
  }
524
540
  catch (error) {
525
541
  program.error(error.message, { exitCode: 1 });
526
542
  }
527
543
  });
528
544
  program
529
- .command("extractVkToFile")
545
+ .command("extractVerifyingKeyToFile")
530
546
  .description("extract vkey to json file")
531
547
  .requiredOption("--poll-joining-zkey <pollJoiningZkey>", "the poll joining zkey path (see different options for zkey files to use specific circuits https://maci.pse.dev/docs/trusted-setup, https://maci.pse.dev/docs/testing/#pre-compiled-artifacts-for-testing)")
532
548
  .requiredOption("--poll-joined-zkey <pollJoinedZkey>", "the poll joined zkey path (see different options for zkey files to use specific circuits https://maci.pse.dev/docs/trusted-setup, https://maci.pse.dev/docs/testing/#pre-compiled-artifacts-for-testing)")
533
- .requiredOption("--process-messages-zkey-qv <processMessagesZkeyPathQv>", "the process messages qv zkey path (see different options for zkey files to use specific circuits https://maci.pse.dev/docs/trusted-setup, https://maci.pse.dev/docs/testing/#pre-compiled-artifacts-for-testing)")
534
- .requiredOption("--tally-votes-zkey-qv <tallyVotesZkeyPathQv>", "the tally votes qv zkey path (see different options for zkey files to use specific circuits https://maci.pse.dev/docs/trusted-setup, https://maci.pse.dev/docs/testing/#pre-compiled-artifacts-for-testing)")
535
- .requiredOption("--process-messages-zkey-non-qv <processMessagesZkeyPathNonQv>", "the process messages non-qv zkey path (see different options for zkey files to use specific circuits https://maci.pse.dev/docs/trusted-setup, https://maci.pse.dev/docs/testing/#pre-compiled-artifacts-for-testing)")
536
- .requiredOption("--tally-votes-zkey-non-qv <tallyVotesZkeyPathNonQv>", "the tally votes non-qv zkey path (see different options for zkey files to use specific circuits https://maci.pse.dev/docs/trusted-setup, https://maci.pse.dev/docs/testing/#pre-compiled-artifacts-for-testing)")
549
+ .requiredOption("--message-processor-zkey-qv <messageProcessorZkeyPathQv>", "the message processor qv zkey path (see different options for zkey files to use specific circuits https://maci.pse.dev/docs/trusted-setup, https://maci.pse.dev/docs/testing/#pre-compiled-artifacts-for-testing)")
550
+ .requiredOption("--vote-tally-zkey-qv <voteTallyZkeyPathQv>", "the vote tally qv zkey path (see different options for zkey files to use specific circuits https://maci.pse.dev/docs/trusted-setup, https://maci.pse.dev/docs/testing/#pre-compiled-artifacts-for-testing)")
551
+ .requiredOption("--message-processor-zkey-non-qv <messageProcessorZkeyPathNonQv>", "the message processor non-qv zkey path (see different options for zkey files to use specific circuits https://maci.pse.dev/docs/trusted-setup, https://maci.pse.dev/docs/testing/#pre-compiled-artifacts-for-testing)")
552
+ .requiredOption("--message-processor-zkey-full <messageProcessorZkeyPathFull>", "the message processor full zkey path (see different options for zkey files to use specific circuits https://maci.pse.dev/docs/trusted-setup, https://maci.pse.dev/docs/testing/#pre-compiled-artifacts-for-testing)")
553
+ .requiredOption("--vote-tally-zkey-non-qv <voteTallyZkeyPathNonQv>", "the vote tally non-qv zkey path (see different options for zkey files to use specific circuits https://maci.pse.dev/docs/trusted-setup, https://maci.pse.dev/docs/testing/#pre-compiled-artifacts-for-testing)")
537
554
  .requiredOption("-o, --output-file <outputFile>", "the output file path of extracted vkeys")
538
- .action(async (cmdObj) => {
555
+ .action(async (args) => {
539
556
  try {
540
- await (0, sdk_1.extractVkToFile)({
541
- processMessagesZkeyPathQv: cmdObj.processMessagesZkeyQv,
542
- tallyVotesZkeyPathQv: cmdObj.tallyVotesZkeyQv,
543
- processMessagesZkeyPathNonQv: cmdObj.processMessagesZkeyNonQv,
544
- tallyVotesZkeyPathNonQv: cmdObj.tallyVotesZkeyNonQv,
545
- pollJoiningZkeyPath: cmdObj.pollJoiningZkey,
546
- pollJoinedZkeyPath: cmdObj.pollJoinedZkey,
547
- outputFilePath: cmdObj.outputFile,
557
+ await (0, sdk_1.extractVerifyingKeyToFile)({
558
+ messageProcessorZkeyPathQv: args.messageProcessorZkeyQv,
559
+ messageProcessorZkeyPathFull: args.messageProcessorZkeyFull,
560
+ voteTallyZkeyPathQv: args.voteTallyZkeyQv,
561
+ messageProcessorZkeyPathNonQv: args.messageProcessorZkeyNonQv,
562
+ voteTallyZkeyPathNonQv: args.voteTallyZkeyNonQv,
563
+ pollJoiningZkeyPath: args.pollJoiningZkey,
564
+ pollJoinedZkeyPath: args.pollJoinedZkey,
565
+ outputFilePath: args.outputFile,
548
566
  });
549
567
  }
550
568
  catch (error) {
@@ -554,28 +572,28 @@ program
554
572
  program
555
573
  .command("signup")
556
574
  .description("Sign up to a MACI contract")
557
- .requiredOption("-p, --pubkey <maciPubKey>", "the MACI public key")
575
+ .requiredOption("-p, --public-key <publicKey>", "the MACI public key")
558
576
  .option("-x, --maci-address <maciAddress>", "the MACI contract address")
559
577
  .option("-s, --sg-data <sgData>", "the signup gateway data")
560
578
  .option("-q, --quiet <quiet>", "whether to print values to the console", (value) => value === "true", false)
561
579
  .option("-r, --rpc-provider <provider>", "the rpc provider URL")
562
- .action(async (cmdObj) => {
580
+ .action(async (args) => {
563
581
  try {
564
582
  const signer = await getSigner();
565
583
  const network = await signer.provider?.getNetwork();
566
584
  const [maciAddress] = (0, utils_1.readContractAddresses)({
567
585
  contractNames: [sdk_1.EContracts.MACI],
568
586
  network: network?.name,
569
- defaultAddresses: [cmdObj.maciAddress],
587
+ defaultAddresses: [args.maciAddress],
570
588
  });
571
589
  const data = await (0, sdk_1.signup)({
572
- maciPubKey: cmdObj.pubkey,
590
+ maciPublicKey: args.publicKey,
573
591
  maciAddress,
574
- sgData: cmdObj.sgData ?? utils_1.DEFAULT_SG_DATA,
592
+ sgData: args.sgData ?? utils_1.DEFAULT_SG_DATA,
575
593
  signer,
576
594
  });
577
595
  (0, sdk_1.logGreen)({
578
- quiet: cmdObj.quiet,
596
+ quiet: args.quiet,
579
597
  text: (0, sdk_1.success)(`State index: ${data.stateIndex.toString()}\n Transaction hash: ${data.transactionHash}`),
580
598
  });
581
599
  }
@@ -586,28 +604,28 @@ program
586
604
  program
587
605
  .command("isRegisteredUser")
588
606
  .description("Checks if user is registered with their public key and get their data")
589
- .requiredOption("-p, --pubkey <maciPubKey>", "the MACI public key")
607
+ .requiredOption("-p, --public-key <publicKey>", "the MACI public key")
590
608
  .option("-x, --maci-address <maciAddress>", "the MACI contract address")
591
609
  .option("-q, --quiet <quiet>", "whether to print values to the console", (value) => value === "true", false)
592
- .action(async (cmdObj) => {
610
+ .action(async (args) => {
593
611
  try {
594
612
  const signer = await getSigner();
595
613
  const network = await signer.provider?.getNetwork();
596
614
  const [maciAddress] = (0, utils_1.readContractAddresses)({
597
615
  contractNames: [sdk_1.EContracts.MACI],
598
616
  network: network?.name,
599
- defaultAddresses: [cmdObj.maciAddress],
617
+ defaultAddresses: [args.maciAddress],
600
618
  });
601
619
  const data = await (0, sdk_1.getSignedupUserData)({
602
- maciPubKey: cmdObj.pubkey,
620
+ maciPublicKey: args.publicKey,
603
621
  maciAddress,
604
622
  signer,
605
623
  });
606
624
  if (data.isRegistered) {
607
- (0, sdk_1.logGreen)({ quiet: cmdObj.quiet, text: (0, sdk_1.success)(`State index: ${data.stateIndex?.toString()}`) });
625
+ (0, sdk_1.logGreen)({ quiet: args.quiet, text: (0, sdk_1.success)(`State index: ${data.stateIndex?.toString()}`) });
608
626
  }
609
627
  else {
610
- (0, sdk_1.logRed)({ quiet: cmdObj.quiet, text: "User is not registered" });
628
+ (0, sdk_1.logRed)({ quiet: args.quiet, text: "User is not registered" });
611
629
  }
612
630
  }
613
631
  catch (error) {
@@ -617,32 +635,32 @@ program
617
635
  program
618
636
  .command("isJoinedUser")
619
637
  .description("Checks if user is joined to the poll with public key")
620
- .requiredOption("-p, --pubkey <pubkey>", "the MACI public key")
638
+ .requiredOption("-p, --public-key <publicKey>", "the MACI public key")
621
639
  .option("-x, --maci-address <maciAddress>", "the MACI contract address")
622
640
  .requiredOption("-o, --poll-id <pollId>", "the poll id", BigInt)
623
641
  .option("-q, --quiet <quiet>", "whether to print values to the console", (value) => value === "true", false)
624
642
  .option("--start-block <startBlock>", "the block number to start looking for events from", parseInt)
625
643
  .option("--end-block <endBlock>", "the block number to end looking for events from", parseInt)
626
644
  .option("--blocks-per-batch <blockPerBatch>", "the number of blocks to process per batch", parseInt)
627
- .action(async (cmdObj) => {
645
+ .action(async (args) => {
628
646
  try {
629
647
  const signer = await getSigner();
630
648
  const network = await signer.provider?.getNetwork();
631
649
  const [maciAddress] = (0, utils_1.readContractAddresses)({
632
650
  contractNames: [sdk_1.EContracts.MACI],
633
651
  network: network?.name,
634
- defaultAddresses: [cmdObj.maciAddress],
652
+ defaultAddresses: [args.maciAddress],
635
653
  });
636
654
  const data = await (0, sdk_1.getJoinedUserData)({
637
- pollPubKey: cmdObj.pubkey,
638
- startBlock: cmdObj.startBlock,
655
+ pollPublicKey: args.publicKey,
656
+ startBlock: args.startBlock,
639
657
  maciAddress,
640
- pollId: cmdObj.pollId,
658
+ pollId: args.pollId,
641
659
  signer,
642
660
  });
643
661
  if (data.isJoined) {
644
662
  (0, sdk_1.logGreen)({
645
- quiet: cmdObj.quiet,
663
+ quiet: args.quiet,
646
664
  text: (0, sdk_1.success)([
647
665
  `Poll state index: ${data.pollStateIndex?.toString()}, registered: ${data.isJoined}`,
648
666
  `Voice credits: ${data.voiceCredits?.toString()}`,
@@ -650,7 +668,7 @@ program
650
668
  });
651
669
  }
652
670
  else {
653
- (0, sdk_1.logRed)({ quiet: cmdObj.quiet, text: "User has not joined the poll" });
671
+ (0, sdk_1.logRed)({ quiet: args.quiet, text: "User has not joined the poll" });
654
672
  }
655
673
  }
656
674
  catch (error) {
@@ -662,29 +680,34 @@ program
662
680
  .description("Get deployed poll from MACI contract")
663
681
  .option("-p, --poll <poll>", "the poll id")
664
682
  .option("-x, --maci-address <maciAddress>", "the MACI contract address")
665
- .action(async (cmdObj) => {
683
+ .action(async (args) => {
666
684
  try {
667
685
  const signer = await getSigner();
668
686
  const network = await signer.provider?.getNetwork();
669
687
  const [maciAddress] = (0, utils_1.readContractAddresses)({
670
688
  contractNames: [sdk_1.EContracts.MACI],
671
689
  network: network?.name,
672
- defaultAddresses: [cmdObj.maciAddress],
690
+ defaultAddresses: [args.maciAddress],
673
691
  });
674
692
  const details = await (0, sdk_1.getPoll)({
675
- pollId: cmdObj.poll,
693
+ pollId: args.poll,
676
694
  maciAddress,
677
695
  signer,
678
696
  });
697
+ const modeNames = {
698
+ [sdk_1.EMode.QV]: "Quadratic Voting",
699
+ [sdk_1.EMode.NON_QV]: "Non-Quadratic Voting",
700
+ [sdk_1.EMode.FULL]: "Full Credits Voting",
701
+ };
679
702
  (0, sdk_1.logGreen)({
680
703
  quiet: true,
681
704
  text: (0, sdk_1.success)([
682
705
  `ID: ${details.id}`,
683
706
  `Start time: ${new Date(Number(details.startDate) * 1000).toString()}`,
684
707
  `End time: ${new Date(Number(details.endDate) * 1000).toString()}`,
685
- `Number of signups ${details.numSignups}`,
708
+ `Number of signups ${details.totalSignups}`,
686
709
  `State tree merged: ${details.isMerged}`,
687
- `Mode: ${details.mode === 0n ? "Quadratic Voting" : "Non-Quadratic Voting"}`,
710
+ `Mode: ${modeNames[details.mode]}`,
688
711
  ].join("\n")),
689
712
  });
690
713
  }
@@ -699,15 +722,15 @@ program
699
722
  .requiredOption("-w, --address <address>", "the address to fund")
700
723
  .option("-q, --quiet <quiet>", "whether to print values to the console", (value) => value === "true", false)
701
724
  .option("-r, --rpc-provider <provider>", "the rpc provider URL")
702
- .action(async (cmdObj) => {
725
+ .action(async (args) => {
703
726
  try {
704
- (0, utils_1.banner)(cmdObj.quiet);
727
+ (0, utils_1.banner)(args.quiet);
705
728
  const signer = await getSigner();
706
- const hash = await (0, sdk_1.fundWallet)({ amount: cmdObj.amount, address: cmdObj.address, signer });
707
- (0, sdk_1.logYellow)({ quiet: cmdObj.quiet, text: (0, sdk_1.info)(`Transaction hash: ${hash}`) });
729
+ const hash = await (0, sdk_1.fundWallet)({ amount: args.amount, address: args.address, signer });
730
+ (0, sdk_1.logYellow)({ quiet: args.quiet, text: (0, sdk_1.info)(`Transaction hash: ${hash}`) });
708
731
  (0, sdk_1.logGreen)({
709
- quiet: cmdObj.quiet,
710
- text: (0, sdk_1.success)(`Successfully funded ${cmdObj.address} with ${cmdObj.amount} wei`),
732
+ quiet: args.quiet,
733
+ text: (0, sdk_1.success)(`Successfully funded ${args.address} with ${args.amount} wei`),
711
734
  });
712
735
  }
713
736
  catch (error) {
@@ -722,34 +745,34 @@ program
722
745
  .option("-x, --maci-address <maciAddress>", "the MACI contract address")
723
746
  .option("-q, --quiet <quiet>", "whether to print values to the console", (value) => value === "true", false)
724
747
  .option("-r, --rpc-provider <provider>", "the rpc provider URL")
725
- .action(async (cmdObj) => {
748
+ .action(async (args) => {
726
749
  try {
727
- (0, utils_1.banner)(cmdObj.quiet);
750
+ (0, utils_1.banner)(args.quiet);
728
751
  const signer = await getSigner();
729
752
  const network = await signer.provider?.getNetwork();
730
753
  // read the tally file
731
- const isTallyFileExists = fs_1.default.existsSync(cmdObj.tallyFile);
732
- if (!cmdObj.tallyFile || !isTallyFileExists) {
733
- throw new Error(`Unable to open ${cmdObj.tallyFile}`);
754
+ const isTallyFileExists = fs_1.default.existsSync(args.tallyFile);
755
+ if (!args.tallyFile || !isTallyFileExists) {
756
+ throw new Error(`Unable to open ${args.tallyFile}`);
734
757
  }
735
- const tallyData = await (0, utils_1.readJSONFile)(cmdObj.tallyFile);
758
+ const tallyData = await (0, utils_1.readJSONFile)(args.tallyFile);
736
759
  const [maciAddress] = (0, utils_1.readContractAddresses)({
737
760
  contractNames: [sdk_1.EContracts.MACI],
738
761
  network: network?.name,
739
- defaultAddresses: [cmdObj.maciAddress],
762
+ defaultAddresses: [args.maciAddress],
740
763
  });
741
- const pollParams = await (0, sdk_1.getPollParams)({ pollId: cmdObj.pollId, maciContractAddress: maciAddress, signer });
764
+ const pollParams = await (0, sdk_1.getPollParams)({ pollId: args.pollId, maciContractAddress: maciAddress, signer });
742
765
  const tallyCommitments = (0, sdk_1.generateTallyCommitments)({
743
766
  tallyData,
744
767
  voteOptionTreeDepth: pollParams.voteOptionTreeDepth,
745
768
  });
746
769
  await (0, sdk_1.verify)({
747
770
  tallyData,
748
- pollId: cmdObj.pollId,
771
+ pollId: args.pollId,
749
772
  maciAddress,
750
773
  signer,
751
774
  tallyCommitments,
752
- numVoteOptions: pollParams.numVoteOptions,
775
+ totalVoteOptions: pollParams.totalVoteOptions,
753
776
  voteOptionTreeDepth: pollParams.voteOptionTreeDepth,
754
777
  });
755
778
  }
@@ -758,34 +781,34 @@ program
758
781
  }
759
782
  });
760
783
  program
761
- .command("genProofs")
784
+ .command("generateProofs")
762
785
  .description("generate the proofs for a poll")
763
- .option("-k, --privkey <privkey>", "your serialized MACI private key")
786
+ .option("-k, --private-key <privateKey>", "your serialized MACI private key")
764
787
  .option("-x, --maci-address <maciAddress>", "the MACI contract address")
765
788
  .requiredOption("-o, --poll-id <pollId>", "the poll id", BigInt)
766
789
  .requiredOption("-t, --tally-file <tallyFile>", "the tally file with results, per vote option spent credits, spent voice credits total")
767
790
  .option("-r, --rapidsnark <rapidsnark>", "the path to the rapidsnark binary")
768
- .option("-g, --process-witnessgen <processWitnessgen>", "the path to the process witness generation binary")
769
- .option("--process-witnessdat <processWitnessdat>", "the path to the process witness dat file")
770
- .option("--tally-witnessgen <tallyWitnessgen>", "the path to the tally witness generation binary")
771
- .option("--tally-witnessdat <tallyWitnessdat>", "the path to the tally witness dat file")
791
+ .option("-g, --message-processor-witness-generator <messageProcessorWitnessGenerator>", "the path to the process witness generation binary")
792
+ .option("--message-processor-witnessDat <messageProcessorWitnessDat>", "the path to the process witness dat file")
793
+ .option("--vote-tally-witness-generator <voteTallyWitnessGenerator>", "the path to the tally witness generation binary")
794
+ .option("--vote-tally-witnessDat <voteTallyWitnessDat>", "the path to the tally witness dat file")
772
795
  .requiredOption("--poll-joining-zkey <processJoinZkey>", "the path to the poll join zkey")
773
- .requiredOption("--process-zkey <processZkey>", "the path to the process zkey")
774
- .requiredOption("--tally-zkey <tallyZkey>", "the path to the tally zkey")
796
+ .requiredOption("--message-processor-zkey <messageProcessorZkey>", "the path to the process zkey")
797
+ .requiredOption("--vote-tally-zkey <voteTallyZkey>", "the path to the tally zkey")
775
798
  .option("-q, --quiet <quiet>", "whether to print values to the console", (value) => value === "true", false)
776
799
  .option("-p, --rpc-provider <provider>", "the rpc provider URL")
777
800
  .requiredOption("-f, --output <outputDir>", "the output directory for proofs")
778
801
  .option("--transaction-hash <transactionHash>", "transaction hash of MACI contract creation")
779
802
  .option("-w, --wasm", "whether to use the wasm binaries")
780
- .option("--process-wasm <processWasm>", "the path to the process witness generation wasm binary")
781
- .option("--tally-wasm <tallyWasm>", "the path to the tally witness generation wasm binary")
803
+ .option("--message-processor-wasm <messageProcessorWasm>", "the path to the process witness generation wasm binary")
804
+ .option("--vote-tally-wasm <voteTallyWasm>", "the path to the tally witness generation wasm binary")
782
805
  .option("--state-file <stateFile>", "the path to the state file containing the serialized maci state")
783
806
  .option("--start-block <startBlock>", "the block number to start looking for events from", parseInt)
784
807
  .option("--end-block <endBlock>", "the block number to end looking for events from", parseInt)
785
808
  .option("--blocks-per-batch <blockPerBatch>", "the number of blocks to process per batch", parseInt)
786
- .option("-u, --use-quadratic-voting <useQuadraticVoting>", "whether to use quadratic voting", (value) => value === "true", true)
809
+ .option("-m, --mode <mode>", "Voting mode (qv, non-qv, full)", (value) => constants_1.MODE_NAME_TO_ENUM[value], sdk_1.EMode.QV)
787
810
  .option("-b, --ipfs-message-backup-files <ipfsMessageBackupFiles>", "Backup files for ipfs messages (name format: ipfsHash1.json, ipfsHash2.json, ..., ipfsHashN.json)", (value) => value?.split(/\s*,\s*/))
788
- .action(async ({ quiet, maciAddress, pollId, ipfsMessageBackupFiles, stateFile, startBlock, endBlock, blocksPerBatch, privkey, transactionHash, output, tallyFile, tallyZkey, tallyWitnessgen, tallyWasm, processZkey, processWitnessgen, processWasm, useQuadraticVoting, tallyWitnessdat, processWitnessdat, wasm, rapidsnark, }) => {
811
+ .action(async ({ quiet, maciAddress, pollId, ipfsMessageBackupFiles, stateFile, startBlock, endBlock, blocksPerBatch, privateKey, transactionHash, output, tallyFile, voteTallyZkey, voteTallyWitnessGenerator, voteTallyWasm, messageProcessorZkey, messageProcessorWitnessGenerator, messageProcessorWasm, mode, voteTallyWitnessDat, messageProcessorWitnessDat, wasm, rapidsnark, }) => {
789
812
  try {
790
813
  (0, utils_1.banner)(quiet);
791
814
  const signer = await getSigner();
@@ -795,7 +818,7 @@ program
795
818
  network: network?.name,
796
819
  defaultAddresses: [maciAddress],
797
820
  });
798
- const coordinatorPrivateKey = privkey || (await (0, utils_1.promptSensitiveValue)("Insert your MACI private key"));
821
+ const coordinatorPrivateKey = privateKey || (await (0, utils_1.promptSensitiveValue)("Insert your MACI private key"));
799
822
  await (0, sdk_1.generateProofs)({
800
823
  maciAddress: maciContractAddress,
801
824
  coordinatorPrivateKey,
@@ -809,15 +832,15 @@ program
809
832
  signer,
810
833
  outputDir: output,
811
834
  tallyFile,
812
- tallyZkey,
813
- tallyWitgen: tallyWitnessgen,
814
- tallyWasm,
815
- processZkey,
816
- processWitgen: processWitnessgen,
817
- processWasm,
818
- useQuadraticVoting,
819
- tallyDatFile: tallyWitnessdat,
820
- processDatFile: processWitnessdat,
835
+ voteTallyZkey,
836
+ voteTallyWitnessGenerator,
837
+ voteTallyWasm,
838
+ messageProcessorZkey,
839
+ messageProcessorWitnessGenerator,
840
+ messageProcessorWasm,
841
+ mode,
842
+ voteTallyWitnessDatFile: voteTallyWitnessDat,
843
+ messageProcessorWitnessDatFile: messageProcessorWitnessDat,
821
844
  useWasm: wasm,
822
845
  rapidsnark,
823
846
  });
@@ -827,12 +850,12 @@ program
827
850
  }
828
851
  });
829
852
  program
830
- .command("genLocalState")
853
+ .command("generateLocalState")
831
854
  .description("generate a local MACI state from the smart contracts events")
832
855
  .requiredOption("-o, --output <outputPath>", "the path where to write the state")
833
856
  .requiredOption("-p, --poll-id <pollId>", "the id of the poll", BigInt)
834
857
  .option("-x, --maci-address <maciAddress>", "the MACI contract address")
835
- .option("-k, --privkey <privkey>", "your serialized MACI private key")
858
+ .option("-k, --private-key <privateKey>", "your serialized MACI private key")
836
859
  .option("--start-block <startBlock>", "the start block number", parseInt)
837
860
  .option("--end-block <endBlock>", "the end block number", parseInt)
838
861
  .option("--blocks-per-batch <blockPerBatch>", "the blocks per batch", parseInt)
@@ -842,30 +865,30 @@ program
842
865
  .option("-r, --rpc-provider <provider>", "the rpc provider URL")
843
866
  .option("-b, --ipfs-message-backup-files <ipfsMessageBackupFiles>", "Backup files for ipfs messages (name format: ipfsHash1.json, ipfsHash2.json, ..., ipfsHashN.json)", (value) => value?.split(/\s*,\s*/))
844
867
  .option("-l, --logs-output <logsOutputPath>", "the path where to save the logs for debugging and auditing purposes")
845
- .action(async (cmdObj) => {
868
+ .action(async (args) => {
846
869
  try {
847
870
  const signer = await getSigner();
848
871
  const network = await signer.provider?.getNetwork();
849
872
  const [maciAddress] = (0, utils_1.readContractAddresses)({
850
873
  contractNames: [sdk_1.EContracts.MACI],
851
874
  network: network?.name,
852
- defaultAddresses: [cmdObj.maciAddress],
875
+ defaultAddresses: [args.maciAddress],
853
876
  });
854
- const coordinatorPrivateKey = cmdObj.privkey || (await (0, utils_1.promptSensitiveValue)("Insert your MACI private key"));
877
+ const coordinatorPrivateKey = args.privateKey || (await (0, utils_1.promptSensitiveValue)("Insert your MACI private key"));
855
878
  await (0, sdk_1.generateMaciState)({
856
- outputPath: cmdObj.output.toString(),
857
- pollId: cmdObj.pollId,
879
+ outputPath: args.output.toString(),
880
+ pollId: args.pollId,
858
881
  maciAddress,
859
882
  coordinatorPrivateKey,
860
- provider: cmdObj.rpcProvider,
861
- endBlock: cmdObj.endBlock,
862
- startBlock: cmdObj.startBlock,
863
- blockPerBatch: cmdObj.blocksPerBatch,
864
- transactionHash: cmdObj.transactionHash,
865
- ipfsMessageBackupFiles: cmdObj.ipfsMessageBackupFiles,
866
- sleep: cmdObj.sleep,
883
+ provider: args.rpcProvider,
884
+ endBlock: args.endBlock,
885
+ startBlock: args.startBlock,
886
+ blockPerBatch: args.blocksPerBatch,
887
+ transactionHash: args.transactionHash,
888
+ ipfsMessageBackupFiles: args.ipfsMessageBackupFiles,
889
+ sleep: args.sleep,
867
890
  signer,
868
- logsOutputPath: cmdObj.logsOutput,
891
+ logsOutputPath: args.logsOutput,
869
892
  });
870
893
  }
871
894
  catch (error) {
@@ -880,20 +903,20 @@ program
880
903
  .option("-q, --quiet <quiet>", "whether to print values to the console", (value) => value === "true", false)
881
904
  .option("-r, --rpc-provider <provider>", "the rpc provider URL")
882
905
  .option("-x, --maci-address <maciAddress>", "the MACI contract address")
883
- .requiredOption("-f, --proof-dir <proofDir>", "the proof output directory from the genProofs subcommand")
884
- .action(async (cmdObj) => {
906
+ .requiredOption("-f, --proof-dir <proofDir>", "the proof output directory from the generateProofs subcommand")
907
+ .action(async (args) => {
885
908
  try {
886
909
  const signer = await getSigner();
887
910
  const network = await signer.provider?.getNetwork();
888
911
  const [maciAddress] = (0, utils_1.readContractAddresses)({
889
912
  contractNames: [sdk_1.EContracts.MACI],
890
913
  network: network?.name,
891
- defaultAddresses: [cmdObj.maciAddress],
914
+ defaultAddresses: [args.maciAddress],
892
915
  });
893
916
  await (0, sdk_1.proveOnChain)({
894
- pollId: cmdObj.pollId,
895
- tallyFile: cmdObj.tallyFile,
896
- proofDir: cmdObj.proofDir,
917
+ pollId: args.pollId,
918
+ tallyFile: args.tallyFile,
919
+ proofDir: args.proofDir,
897
920
  maciAddress,
898
921
  signer,
899
922
  });