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

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
149
  .requiredOption("-i, --int-state-tree-depth <intStateTreeDepth>", "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("-b, --message-batch-size <messageBatchSize>", "the message batch size", parseInt)
151
152
  .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
153
  .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)")
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
+ intStateTreeDepth: args.intStateTreeDepth,
169
+ voteOptionTreeDepth: args.voteOptionTreeDepth,
170
+ messageBatchSize: args.messageBatchSize,
171
+ processMessagesZkeyPath: args.processMessagesZkey,
172
+ tallyVotesZkeyPath: args.tallyVotesZkey,
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,14 +253,15 @@ 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)
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)
255
259
  .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)
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
266
  .option("-m, --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)
@@ -265,20 +270,20 @@ program
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
+ intStateTreeDepth: args.intStateTreeDepth,
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,7 +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")
340
+ .requiredOption("-k, --private-key <privateKey>", "the private key")
335
341
  .option("-i, --state-index <stateIndex>", "the user's state index", BigInt)
336
342
  .option("-s, --sg-data <sgData>", "the signup policy data")
337
343
  .option("-v, --ivcp-data <ivcpData>", "the initial voice credit proxy data")
@@ -349,37 +355,37 @@ program
349
355
  .option("-w, --wasm", "whether to use the wasm binaries")
350
356
  .option("-r, --rapidsnark <rapidsnark>", "the path to the rapidsnark binary")
351
357
  .option("-g, --poll-witnessgen <pollWitnessgen>", "the path to the poll witness generation binary")
352
- .action(async (cmdObj) => {
358
+ .action(async (args) => {
353
359
  try {
354
360
  const signer = await getSigner();
355
361
  const network = await signer.provider?.getNetwork();
356
362
  const [maciAddress] = (0, utils_1.readContractAddresses)({
357
363
  contractNames: [sdk_1.EContracts.MACI],
358
364
  network: network?.name,
359
- defaultAddresses: [cmdObj.maciAddress],
365
+ defaultAddresses: [args.maciAddress],
360
366
  });
361
- const privateKey = cmdObj.privKey || (await (0, utils_1.promptSensitiveValue)("Insert your MACI private key"));
367
+ const privateKey = args.privateKey || (await (0, utils_1.promptSensitiveValue)("Insert your MACI private key"));
362
368
  const data = await (0, sdk_1.joinPoll)({
363
369
  maciAddress,
364
370
  privateKey,
365
- stateIndex: cmdObj.stateIndex,
366
- stateFile: cmdObj.stateFile,
367
- pollId: cmdObj.pollId,
371
+ stateIndex: args.stateIndex,
372
+ stateFile: args.stateFile,
373
+ pollId: args.pollId,
368
374
  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`) });
375
+ startBlock: args.startBlock,
376
+ endBlock: args.endBlock,
377
+ blocksPerBatch: args.blocksPerBatch,
378
+ pollJoiningZkey: args.pollJoiningZkey,
379
+ pollWasm: args.pollWasm,
380
+ useWasm: args.wasm,
381
+ rapidsnark: args.rapidsnark,
382
+ pollWitgen: args.pollWitnessgen,
383
+ sgDataArg: args.sgData ?? utils_1.DEFAULT_SG_DATA,
384
+ ivcpDataArg: args.ivcpData ?? utils_1.DEFAULT_IVCP_DATA,
385
+ });
386
+ (0, sdk_1.logGreen)({ quiet: args.quiet, text: (0, sdk_1.info)(`User joined poll with nullifier: ${data.nullifier}`) });
387
+ (0, sdk_1.logGreen)({ quiet: args.quiet, text: (0, sdk_1.info)(`User joined poll with state index: ${data.pollStateIndex}`) });
388
+ (0, sdk_1.logGreen)({ quiet: args.quiet, text: (0, sdk_1.info)(`User joined poll with ${data.voiceCredits} voice credits`) });
383
389
  }
384
390
  catch (error) {
385
391
  program.error(error.message, { exitCode: 1 });
@@ -391,45 +397,57 @@ program
391
397
  .requiredOption("-s, --state-tree-depth <stateTreeDepth>", "the state tree depth", parseInt)
392
398
  .requiredOption("-i, --int-state-tree-depth <intStateTreeDepth>", "the intermediate state tree depth", parseInt)
393
399
  .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)
400
+ .requiredOption("-b, --message-batch-size <messageBatchSize>", "the message batch size", parseInt)
401
+ .option("--poll-state-tree-depth <pollStateTreeDepth>", "the poll state tree depth", parseInt)
395
402
  .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
403
  .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
404
  .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
405
  .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
406
  .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
407
  .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)
408
+ .option("--process-messages-zkey-full <processMessagesZkeyPathFull>", "the process messages 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)")
409
+ .option("--tally-votes-zkey-full <tallyVotesZkeyPathFull>", "the tally votes 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)")
410
+ .option("-m, --mode <mode>", "Voting mode (qv, non-qv, full)", (value) => constants_1.MODE_NAME_TO_ENUM[value], sdk_1.EMode.QV)
402
411
  .option("-k, --vk-registry <vkRegistry>", "the vk registry contract address")
403
412
  .option("-q, --quiet <quiet>", "whether to print values to the console", (value) => value === "true", false)
404
413
  .option("-r, --rpc-provider <provider>", "the rpc provider URL")
405
- .action(async (cmdObj) => {
414
+ .action(async (args) => {
406
415
  try {
407
416
  const signer = await getSigner();
408
417
  const network = await signer.provider?.getNetwork();
409
- const [vkRegistryAddress] = (0, utils_1.readContractAddresses)({
410
- contractNames: [sdk_1.EContracts.VkRegistry],
418
+ const [verifyingKeysRegistryAddress] = (0, utils_1.readContractAddresses)({
419
+ contractNames: [sdk_1.EContracts.VerifyingKeysRegistry],
411
420
  network: network?.name,
412
- defaultAddresses: [cmdObj.vkRegistry],
421
+ defaultAddresses: [args.vkRegistry],
413
422
  });
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,
423
+ const processKeys = {
424
+ [sdk_1.EMode.QV]: args.processMessagesZkeyQv,
425
+ [sdk_1.EMode.NON_QV]: args.processMessagesZkeyNonQv,
426
+ [sdk_1.EMode.FULL]: args.processMessagesZkeyFull,
427
+ };
428
+ const tallyKeys = {
429
+ [sdk_1.EMode.QV]: args.tallyVotesZkeyQv,
430
+ [sdk_1.EMode.NON_QV]: args.tallyVotesZkeyNonQv,
431
+ [sdk_1.EMode.FULL]: args.tallyVotesZkeyFull,
432
+ };
433
+ const { pollJoiningVerifyingKey, pollJoinedVerifyingKey, processVerifyingKey, tallyVerifyingKey } = await (0, sdk_1.extractAllVerifyingKeys)({
434
+ pollJoiningZkeyPath: args.pollJoiningZkey,
435
+ pollJoinedZkeyPath: args.pollJoinedZkey,
436
+ processMessagesZkeyPath: processKeys[args.mode],
437
+ tallyVotesZkeyPath: tallyKeys[args.mode],
421
438
  });
422
439
  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,
440
+ stateTreeDepth: args.stateTreeDepth,
441
+ intStateTreeDepth: args.intStateTreeDepth,
442
+ voteOptionTreeDepth: args.voteOptionTreeDepth,
443
+ messageBatchSize: args.messageBatchSize,
444
+ pollStateTreeDepth: args.pollStateTreeDepth || args.stateTreeDepth,
445
+ pollJoiningVerifyingKey: pollJoiningVerifyingKey,
446
+ pollJoinedVerifyingKey: pollJoinedVerifyingKey,
447
+ processMessagesVerifyingKey: processVerifyingKey,
448
+ tallyVotesVerifyingKey: tallyVerifyingKey,
449
+ verifyingKeysRegistryAddress,
450
+ mode: args.mode,
433
451
  signer,
434
452
  });
435
453
  }
@@ -440,9 +458,9 @@ program
440
458
  program
441
459
  .command("publish")
442
460
  .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")
461
+ .requiredOption("-p, --public-key <publicKey>", "the MACI public key which should replace the user's public key in the state tree")
444
462
  .option("-x, --maci-address <maciAddress>", "the MACI contract address")
445
- .option("-k, --privkey <privkey>", "your serialized MACI private key")
463
+ .option("-k, --private-key <privateKey>", "your serialized MACI private key")
446
464
  .requiredOption("-i, --state-index <stateIndex>", "the user's state index", BigInt)
447
465
  .requiredOption("-v, --vote-option-index <voteOptionIndex>", "the vote option index", BigInt)
448
466
  .requiredOption("-n, --nonce <nonce>", "the message nonce", BigInt)
@@ -451,25 +469,25 @@ program
451
469
  .requiredOption("-w, --new-vote-weight <newVoteWeight>", "the new vote weight", BigInt)
452
470
  .option("-q, --quiet <quiet>", "whether to print values to the console", (value) => value === "true", false)
453
471
  .option("-r, --rpc-provider <provider>", "the rpc provider URL")
454
- .action(async (cmdObj) => {
472
+ .action(async (args) => {
455
473
  try {
456
474
  const signer = await getSigner();
457
475
  const network = await signer.provider?.getNetwork();
458
476
  const [maciAddress] = (0, utils_1.readContractAddresses)({
459
477
  contractNames: [sdk_1.EContracts.MACI],
460
478
  network: network?.name,
461
- defaultAddresses: [cmdObj.maciAddress],
479
+ defaultAddresses: [args.maciAddress],
462
480
  });
463
- const privateKey = cmdObj.privkey || (await (0, utils_1.promptSensitiveValue)("Insert your MACI private key"));
481
+ const privateKey = args.privateKey || (await (0, utils_1.promptSensitiveValue)("Insert your MACI private key"));
464
482
  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,
483
+ publicKey: args.publicKey,
484
+ stateIndex: args.stateIndex,
485
+ voteOptionIndex: args.voteOptionIndex,
486
+ nonce: args.nonce,
487
+ pollId: args.pollId,
488
+ newVoteWeight: args.newVoteWeight,
471
489
  maciAddress,
472
- salt: cmdObj.salt,
490
+ salt: args.salt,
473
491
  privateKey,
474
492
  signer,
475
493
  });
@@ -484,23 +502,23 @@ program
484
502
  .option("-q, --quiet <quiet>", "whether to print values to the console", (value) => value === "true", false)
485
503
  .option("-x, --maci-address <maciAddress>", "the MACI contract address")
486
504
  .requiredOption("-p, --poll-id <pollId>", "the poll id", BigInt)
487
- .action(async (cmdObj) => {
505
+ .action(async (args) => {
488
506
  try {
489
507
  const signer = await getSigner();
490
508
  const network = await signer.provider?.getNetwork();
491
509
  const [maciAddress] = (0, utils_1.readContractAddresses)({
492
510
  contractNames: [sdk_1.EContracts.MACI],
493
511
  network: network?.name,
494
- defaultAddresses: [cmdObj.maciAddress],
512
+ defaultAddresses: [args.maciAddress],
495
513
  });
496
514
  const receipt = await (0, sdk_1.mergeSignups)({
497
- pollId: cmdObj.pollId,
515
+ pollId: args.pollId,
498
516
  maciAddress,
499
517
  signer,
500
518
  });
501
- (0, sdk_1.logGreen)({ quiet: cmdObj.quiet, text: (0, sdk_1.info)(`Transaction hash: ${receipt.hash}`) });
519
+ (0, sdk_1.logGreen)({ quiet: args.quiet, text: (0, sdk_1.info)(`Transaction hash: ${receipt.hash}`) });
502
520
  (0, sdk_1.logGreen)({
503
- quiet: cmdObj.quiet,
521
+ quiet: args.quiet,
504
522
  text: (0, sdk_1.success)(`Executed mergeSignups(); gas used: ${receipt.gasUsed.toString()}`),
505
523
  });
506
524
  }
@@ -514,19 +532,19 @@ program
514
532
  .requiredOption("-s, --seconds <seconds>", "the number of seconds to fast-forward", parseInt)
515
533
  .option("-q, --quiet <quiet>", "whether to print values to the console", (value) => value === "true", false)
516
534
  .option("-r, --rpc-provider <provider>", "the rpc provider URL")
517
- .action(async (cmdObj) => {
535
+ .action(async (args) => {
518
536
  try {
519
- (0, utils_1.banner)(cmdObj.quiet);
537
+ (0, utils_1.banner)(args.quiet);
520
538
  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`) });
539
+ await (0, sdk_1.timeTravel)({ seconds: args.seconds, signer });
540
+ (0, sdk_1.logGreen)({ quiet: args.quiet, text: (0, sdk_1.success)(`Fast-forwarded ${args.seconds} seconds`) });
523
541
  }
524
542
  catch (error) {
525
543
  program.error(error.message, { exitCode: 1 });
526
544
  }
527
545
  });
528
546
  program
529
- .command("extractVkToFile")
547
+ .command("extractVerifyingKeyToFile")
530
548
  .description("extract vkey to json file")
531
549
  .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
550
  .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)")
@@ -535,16 +553,16 @@ program
535
553
  .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
554
  .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)")
537
555
  .requiredOption("-o, --output-file <outputFile>", "the output file path of extracted vkeys")
538
- .action(async (cmdObj) => {
556
+ .action(async (args) => {
539
557
  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,
558
+ await (0, sdk_1.extractVerifyingKeyToFile)({
559
+ processMessagesZkeyPathQv: args.processMessagesZkeyQv,
560
+ tallyVotesZkeyPathQv: args.tallyVotesZkeyQv,
561
+ processMessagesZkeyPathNonQv: args.processMessagesZkeyNonQv,
562
+ tallyVotesZkeyPathNonQv: args.tallyVotesZkeyNonQv,
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,17 +680,17 @@ 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
  });
@@ -682,7 +700,7 @@ program
682
700
  `ID: ${details.id}`,
683
701
  `Start time: ${new Date(Number(details.startDate) * 1000).toString()}`,
684
702
  `End time: ${new Date(Number(details.endDate) * 1000).toString()}`,
685
- `Number of signups ${details.numSignups}`,
703
+ `Number of signups ${details.totalSignups}`,
686
704
  `State tree merged: ${details.isMerged}`,
687
705
  `Mode: ${details.mode === 0n ? "Quadratic Voting" : "Non-Quadratic Voting"}`,
688
706
  ].join("\n")),
@@ -699,15 +717,15 @@ program
699
717
  .requiredOption("-w, --address <address>", "the address to fund")
700
718
  .option("-q, --quiet <quiet>", "whether to print values to the console", (value) => value === "true", false)
701
719
  .option("-r, --rpc-provider <provider>", "the rpc provider URL")
702
- .action(async (cmdObj) => {
720
+ .action(async (args) => {
703
721
  try {
704
- (0, utils_1.banner)(cmdObj.quiet);
722
+ (0, utils_1.banner)(args.quiet);
705
723
  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}`) });
724
+ const hash = await (0, sdk_1.fundWallet)({ amount: args.amount, address: args.address, signer });
725
+ (0, sdk_1.logYellow)({ quiet: args.quiet, text: (0, sdk_1.info)(`Transaction hash: ${hash}`) });
708
726
  (0, sdk_1.logGreen)({
709
- quiet: cmdObj.quiet,
710
- text: (0, sdk_1.success)(`Successfully funded ${cmdObj.address} with ${cmdObj.amount} wei`),
727
+ quiet: args.quiet,
728
+ text: (0, sdk_1.success)(`Successfully funded ${args.address} with ${args.amount} wei`),
711
729
  });
712
730
  }
713
731
  catch (error) {
@@ -722,34 +740,34 @@ program
722
740
  .option("-x, --maci-address <maciAddress>", "the MACI contract address")
723
741
  .option("-q, --quiet <quiet>", "whether to print values to the console", (value) => value === "true", false)
724
742
  .option("-r, --rpc-provider <provider>", "the rpc provider URL")
725
- .action(async (cmdObj) => {
743
+ .action(async (args) => {
726
744
  try {
727
- (0, utils_1.banner)(cmdObj.quiet);
745
+ (0, utils_1.banner)(args.quiet);
728
746
  const signer = await getSigner();
729
747
  const network = await signer.provider?.getNetwork();
730
748
  // 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}`);
749
+ const isTallyFileExists = fs_1.default.existsSync(args.tallyFile);
750
+ if (!args.tallyFile || !isTallyFileExists) {
751
+ throw new Error(`Unable to open ${args.tallyFile}`);
734
752
  }
735
- const tallyData = await (0, utils_1.readJSONFile)(cmdObj.tallyFile);
753
+ const tallyData = await (0, utils_1.readJSONFile)(args.tallyFile);
736
754
  const [maciAddress] = (0, utils_1.readContractAddresses)({
737
755
  contractNames: [sdk_1.EContracts.MACI],
738
756
  network: network?.name,
739
- defaultAddresses: [cmdObj.maciAddress],
757
+ defaultAddresses: [args.maciAddress],
740
758
  });
741
- const pollParams = await (0, sdk_1.getPollParams)({ pollId: cmdObj.pollId, maciContractAddress: maciAddress, signer });
759
+ const pollParams = await (0, sdk_1.getPollParams)({ pollId: args.pollId, maciContractAddress: maciAddress, signer });
742
760
  const tallyCommitments = (0, sdk_1.generateTallyCommitments)({
743
761
  tallyData,
744
762
  voteOptionTreeDepth: pollParams.voteOptionTreeDepth,
745
763
  });
746
764
  await (0, sdk_1.verify)({
747
765
  tallyData,
748
- pollId: cmdObj.pollId,
766
+ pollId: args.pollId,
749
767
  maciAddress,
750
768
  signer,
751
769
  tallyCommitments,
752
- numVoteOptions: pollParams.numVoteOptions,
770
+ totalVoteOptions: pollParams.totalVoteOptions,
753
771
  voteOptionTreeDepth: pollParams.voteOptionTreeDepth,
754
772
  });
755
773
  }
@@ -758,9 +776,9 @@ program
758
776
  }
759
777
  });
760
778
  program
761
- .command("genProofs")
779
+ .command("generateProofs")
762
780
  .description("generate the proofs for a poll")
763
- .option("-k, --privkey <privkey>", "your serialized MACI private key")
781
+ .option("-k, --private-key <privateKey>", "your serialized MACI private key")
764
782
  .option("-x, --maci-address <maciAddress>", "the MACI contract address")
765
783
  .requiredOption("-o, --poll-id <pollId>", "the poll id", BigInt)
766
784
  .requiredOption("-t, --tally-file <tallyFile>", "the tally file with results, per vote option spent credits, spent voice credits total")
@@ -783,9 +801,9 @@ program
783
801
  .option("--start-block <startBlock>", "the block number to start looking for events from", parseInt)
784
802
  .option("--end-block <endBlock>", "the block number to end looking for events from", parseInt)
785
803
  .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)
804
+ .option("-m, --mode <mode>", "Voting mode (qv, non-qv, full)", (value) => constants_1.MODE_NAME_TO_ENUM[value], sdk_1.EMode.QV)
787
805
  .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, }) => {
806
+ .action(async ({ quiet, maciAddress, pollId, ipfsMessageBackupFiles, stateFile, startBlock, endBlock, blocksPerBatch, privateKey, transactionHash, output, tallyFile, tallyZkey, tallyWitnessgen, tallyWasm, processZkey, processWitnessgen, processWasm, mode, tallyWitnessdat, processWitnessdat, wasm, rapidsnark, }) => {
789
807
  try {
790
808
  (0, utils_1.banner)(quiet);
791
809
  const signer = await getSigner();
@@ -795,7 +813,7 @@ program
795
813
  network: network?.name,
796
814
  defaultAddresses: [maciAddress],
797
815
  });
798
- const coordinatorPrivateKey = privkey || (await (0, utils_1.promptSensitiveValue)("Insert your MACI private key"));
816
+ const coordinatorPrivateKey = privateKey || (await (0, utils_1.promptSensitiveValue)("Insert your MACI private key"));
799
817
  await (0, sdk_1.generateProofs)({
800
818
  maciAddress: maciContractAddress,
801
819
  coordinatorPrivateKey,
@@ -815,7 +833,7 @@ program
815
833
  processZkey,
816
834
  processWitgen: processWitnessgen,
817
835
  processWasm,
818
- useQuadraticVoting,
836
+ mode,
819
837
  tallyDatFile: tallyWitnessdat,
820
838
  processDatFile: processWitnessdat,
821
839
  useWasm: wasm,
@@ -827,12 +845,12 @@ program
827
845
  }
828
846
  });
829
847
  program
830
- .command("genLocalState")
848
+ .command("generateLocalState")
831
849
  .description("generate a local MACI state from the smart contracts events")
832
850
  .requiredOption("-o, --output <outputPath>", "the path where to write the state")
833
851
  .requiredOption("-p, --poll-id <pollId>", "the id of the poll", BigInt)
834
852
  .option("-x, --maci-address <maciAddress>", "the MACI contract address")
835
- .option("-k, --privkey <privkey>", "your serialized MACI private key")
853
+ .option("-k, --private-key <privateKey>", "your serialized MACI private key")
836
854
  .option("--start-block <startBlock>", "the start block number", parseInt)
837
855
  .option("--end-block <endBlock>", "the end block number", parseInt)
838
856
  .option("--blocks-per-batch <blockPerBatch>", "the blocks per batch", parseInt)
@@ -842,30 +860,30 @@ program
842
860
  .option("-r, --rpc-provider <provider>", "the rpc provider URL")
843
861
  .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
862
  .option("-l, --logs-output <logsOutputPath>", "the path where to save the logs for debugging and auditing purposes")
845
- .action(async (cmdObj) => {
863
+ .action(async (args) => {
846
864
  try {
847
865
  const signer = await getSigner();
848
866
  const network = await signer.provider?.getNetwork();
849
867
  const [maciAddress] = (0, utils_1.readContractAddresses)({
850
868
  contractNames: [sdk_1.EContracts.MACI],
851
869
  network: network?.name,
852
- defaultAddresses: [cmdObj.maciAddress],
870
+ defaultAddresses: [args.maciAddress],
853
871
  });
854
- const coordinatorPrivateKey = cmdObj.privkey || (await (0, utils_1.promptSensitiveValue)("Insert your MACI private key"));
872
+ const coordinatorPrivateKey = args.privateKey || (await (0, utils_1.promptSensitiveValue)("Insert your MACI private key"));
855
873
  await (0, sdk_1.generateMaciState)({
856
- outputPath: cmdObj.output.toString(),
857
- pollId: cmdObj.pollId,
874
+ outputPath: args.output.toString(),
875
+ pollId: args.pollId,
858
876
  maciAddress,
859
877
  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,
878
+ provider: args.rpcProvider,
879
+ endBlock: args.endBlock,
880
+ startBlock: args.startBlock,
881
+ blockPerBatch: args.blocksPerBatch,
882
+ transactionHash: args.transactionHash,
883
+ ipfsMessageBackupFiles: args.ipfsMessageBackupFiles,
884
+ sleep: args.sleep,
867
885
  signer,
868
- logsOutputPath: cmdObj.logsOutput,
886
+ logsOutputPath: args.logsOutput,
869
887
  });
870
888
  }
871
889
  catch (error) {
@@ -880,20 +898,20 @@ program
880
898
  .option("-q, --quiet <quiet>", "whether to print values to the console", (value) => value === "true", false)
881
899
  .option("-r, --rpc-provider <provider>", "the rpc provider URL")
882
900
  .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) => {
901
+ .requiredOption("-f, --proof-dir <proofDir>", "the proof output directory from the generateProofs subcommand")
902
+ .action(async (args) => {
885
903
  try {
886
904
  const signer = await getSigner();
887
905
  const network = await signer.provider?.getNetwork();
888
906
  const [maciAddress] = (0, utils_1.readContractAddresses)({
889
907
  contractNames: [sdk_1.EContracts.MACI],
890
908
  network: network?.name,
891
- defaultAddresses: [cmdObj.maciAddress],
909
+ defaultAddresses: [args.maciAddress],
892
910
  });
893
911
  await (0, sdk_1.proveOnChain)({
894
- pollId: cmdObj.pollId,
895
- tallyFile: cmdObj.tallyFile,
896
- proofDir: cmdObj.proofDir,
912
+ pollId: args.pollId,
913
+ tallyFile: args.tallyFile,
914
+ proofDir: args.proofDir,
897
915
  maciAddress,
898
916
  signer,
899
917
  });