@maci-protocol/coordinator 0.0.0-ci.533e19d

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (257) hide show
  1. package/CHANGELOG.md +51 -0
  2. package/LICENSE +22 -0
  3. package/README.md +42 -0
  4. package/build/hardhat.config.cjs +31 -0
  5. package/build/hardhat.config.cjs.map +1 -0
  6. package/build/hardhat.config.d.cts +24 -0
  7. package/build/hardhat.config.d.cts.map +1 -0
  8. package/build/scripts/generateKeypair.d.ts +2 -0
  9. package/build/scripts/generateKeypair.d.ts.map +1 -0
  10. package/build/scripts/generateKeypair.js +25 -0
  11. package/build/scripts/generateKeypair.js.map +1 -0
  12. package/build/scripts/generateMaciKeyPair.d.ts +2 -0
  13. package/build/scripts/generateMaciKeyPair.d.ts.map +1 -0
  14. package/build/scripts/generateMaciKeyPair.js +3 -0
  15. package/build/scripts/generateMaciKeyPair.js.map +1 -0
  16. package/build/scripts/getAuthHeader.d.ts +2 -0
  17. package/build/scripts/getAuthHeader.d.ts.map +1 -0
  18. package/build/scripts/getAuthHeader.js +31 -0
  19. package/build/scripts/getAuthHeader.js.map +1 -0
  20. package/build/tests/constants.d.ts +8 -0
  21. package/build/tests/constants.d.ts.map +1 -0
  22. package/build/tests/constants.js +10 -0
  23. package/build/tests/constants.js.map +1 -0
  24. package/build/tests/e2e.aa.test.d.ts +2 -0
  25. package/build/tests/e2e.aa.test.d.ts.map +1 -0
  26. package/build/tests/e2e.aa.test.js +103 -0
  27. package/build/tests/e2e.aa.test.js.map +1 -0
  28. package/build/tests/e2e.deploy.test.d.ts +2 -0
  29. package/build/tests/e2e.deploy.test.d.ts.map +1 -0
  30. package/build/tests/e2e.deploy.test.js +234 -0
  31. package/build/tests/e2e.deploy.test.js.map +1 -0
  32. package/build/tests/utils.d.ts +14 -0
  33. package/build/tests/utils.d.ts.map +1 -0
  34. package/build/tests/utils.js +44 -0
  35. package/build/tests/utils.js.map +1 -0
  36. package/build/ts/app.module.d.ts +3 -0
  37. package/build/ts/app.module.d.ts.map +1 -0
  38. package/build/ts/app.module.js +36 -0
  39. package/build/ts/app.module.js.map +1 -0
  40. package/build/ts/auth/AccountSignatureGuard.service.d.ts +44 -0
  41. package/build/ts/auth/AccountSignatureGuard.service.d.ts.map +1 -0
  42. package/build/ts/auth/AccountSignatureGuard.service.js +96 -0
  43. package/build/ts/auth/AccountSignatureGuard.service.js.map +1 -0
  44. package/build/ts/auth/__tests__/AccountSignatureGuard.test.d.ts +2 -0
  45. package/build/ts/auth/__tests__/AccountSignatureGuard.test.d.ts.map +1 -0
  46. package/build/ts/auth/__tests__/AccountSignatureGuard.test.js +113 -0
  47. package/build/ts/auth/__tests__/AccountSignatureGuard.test.js.map +1 -0
  48. package/build/ts/common/__tests__/common.test.d.ts +2 -0
  49. package/build/ts/common/__tests__/common.test.d.ts.map +1 -0
  50. package/build/ts/common/__tests__/common.test.js +79 -0
  51. package/build/ts/common/__tests__/common.test.js.map +1 -0
  52. package/build/ts/common/accountAbstraction.d.ts +55 -0
  53. package/build/ts/common/accountAbstraction.d.ts.map +1 -0
  54. package/build/ts/common/accountAbstraction.js +110 -0
  55. package/build/ts/common/accountAbstraction.js.map +1 -0
  56. package/build/ts/common/errors.d.ts +33 -0
  57. package/build/ts/common/errors.d.ts.map +1 -0
  58. package/build/ts/common/errors.js +34 -0
  59. package/build/ts/common/errors.js.map +1 -0
  60. package/build/ts/common/index.d.ts +4 -0
  61. package/build/ts/common/index.d.ts.map +1 -0
  62. package/build/ts/common/index.js +4 -0
  63. package/build/ts/common/index.js.map +1 -0
  64. package/build/ts/common/networks.d.ts +29 -0
  65. package/build/ts/common/networks.d.ts.map +1 -0
  66. package/build/ts/common/networks.js +70 -0
  67. package/build/ts/common/networks.js.map +1 -0
  68. package/build/ts/common/types.d.ts +9 -0
  69. package/build/ts/common/types.d.ts.map +1 -0
  70. package/build/ts/common/types.js +2 -0
  71. package/build/ts/common/types.js.map +1 -0
  72. package/build/ts/crypto/__tests__/crypto.service.test.d.ts +2 -0
  73. package/build/ts/crypto/__tests__/crypto.service.test.d.ts.map +1 -0
  74. package/build/ts/crypto/__tests__/crypto.service.test.js +26 -0
  75. package/build/ts/crypto/__tests__/crypto.service.test.js.map +1 -0
  76. package/build/ts/crypto/crypto.module.d.ts +3 -0
  77. package/build/ts/crypto/crypto.module.d.ts.map +1 -0
  78. package/build/ts/crypto/crypto.module.js +18 -0
  79. package/build/ts/crypto/crypto.module.js.map +1 -0
  80. package/build/ts/crypto/crypto.service.d.ts +31 -0
  81. package/build/ts/crypto/crypto.service.d.ts.map +1 -0
  82. package/build/ts/crypto/crypto.service.js +68 -0
  83. package/build/ts/crypto/crypto.service.js.map +1 -0
  84. package/build/ts/deployer/__tests__/deployer.controller.test.d.ts +2 -0
  85. package/build/ts/deployer/__tests__/deployer.controller.test.d.ts.map +1 -0
  86. package/build/ts/deployer/__tests__/deployer.controller.test.js +84 -0
  87. package/build/ts/deployer/__tests__/deployer.controller.test.js.map +1 -0
  88. package/build/ts/deployer/__tests__/deployer.service.test.d.ts +2 -0
  89. package/build/ts/deployer/__tests__/deployer.service.test.d.ts.map +1 -0
  90. package/build/ts/deployer/__tests__/deployer.service.test.js +425 -0
  91. package/build/ts/deployer/__tests__/deployer.service.test.js.map +1 -0
  92. package/build/ts/deployer/__tests__/utils.d.ts +36 -0
  93. package/build/ts/deployer/__tests__/utils.d.ts.map +1 -0
  94. package/build/ts/deployer/__tests__/utils.js +96 -0
  95. package/build/ts/deployer/__tests__/utils.js.map +1 -0
  96. package/build/ts/deployer/constants.d.ts +13 -0
  97. package/build/ts/deployer/constants.d.ts.map +1 -0
  98. package/build/ts/deployer/constants.js +13 -0
  99. package/build/ts/deployer/constants.js.map +1 -0
  100. package/build/ts/deployer/deployer.controller.d.ts +34 -0
  101. package/build/ts/deployer/deployer.controller.d.ts.map +1 -0
  102. package/build/ts/deployer/deployer.controller.js +89 -0
  103. package/build/ts/deployer/deployer.controller.js.map +1 -0
  104. package/build/ts/deployer/deployer.module.d.ts +3 -0
  105. package/build/ts/deployer/deployer.module.d.ts.map +1 -0
  106. package/build/ts/deployer/deployer.module.js +23 -0
  107. package/build/ts/deployer/deployer.module.js.map +1 -0
  108. package/build/ts/deployer/deployer.service.d.ts +112 -0
  109. package/build/ts/deployer/deployer.service.d.ts.map +1 -0
  110. package/build/ts/deployer/deployer.service.js +614 -0
  111. package/build/ts/deployer/deployer.service.js.map +1 -0
  112. package/build/ts/deployer/dto.d.ts +46 -0
  113. package/build/ts/deployer/dto.d.ts.map +1 -0
  114. package/build/ts/deployer/dto.js +117 -0
  115. package/build/ts/deployer/dto.js.map +1 -0
  116. package/build/ts/deployer/types.d.ts +293 -0
  117. package/build/ts/deployer/types.d.ts.map +1 -0
  118. package/build/ts/deployer/types.js +2 -0
  119. package/build/ts/deployer/types.js.map +1 -0
  120. package/build/ts/deployer/utils.d.ts +8 -0
  121. package/build/ts/deployer/utils.d.ts.map +1 -0
  122. package/build/ts/deployer/utils.js +9 -0
  123. package/build/ts/deployer/utils.js.map +1 -0
  124. package/build/ts/file/__tests__/file.service.test.d.ts +2 -0
  125. package/build/ts/file/__tests__/file.service.test.d.ts.map +1 -0
  126. package/build/ts/file/__tests__/file.service.test.js +76 -0
  127. package/build/ts/file/__tests__/file.service.test.js.map +1 -0
  128. package/build/ts/file/file.module.d.ts +3 -0
  129. package/build/ts/file/file.module.d.ts.map +1 -0
  130. package/build/ts/file/file.module.js +18 -0
  131. package/build/ts/file/file.module.js.map +1 -0
  132. package/build/ts/file/file.service.d.ts +62 -0
  133. package/build/ts/file/file.service.d.ts.map +1 -0
  134. package/build/ts/file/file.service.js +115 -0
  135. package/build/ts/file/file.service.js.map +1 -0
  136. package/build/ts/file/types.d.ts +36 -0
  137. package/build/ts/file/types.d.ts.map +1 -0
  138. package/build/ts/file/types.js +2 -0
  139. package/build/ts/file/types.js.map +1 -0
  140. package/build/ts/jest/setup.d.ts +8 -0
  141. package/build/ts/jest/setup.d.ts.map +1 -0
  142. package/build/ts/jest/setup.js +2 -0
  143. package/build/ts/jest/setup.js.map +1 -0
  144. package/build/ts/jest/transform.d.ts +8 -0
  145. package/build/ts/jest/transform.d.ts.map +1 -0
  146. package/build/ts/jest/transform.js +10 -0
  147. package/build/ts/jest/transform.js.map +1 -0
  148. package/build/ts/main.d.ts +2 -0
  149. package/build/ts/main.d.ts.map +1 -0
  150. package/build/ts/main.js +46 -0
  151. package/build/ts/main.js.map +1 -0
  152. package/build/ts/proof/__tests__/proof.controller.test.d.ts +2 -0
  153. package/build/ts/proof/__tests__/proof.controller.test.d.ts.map +1 -0
  154. package/build/ts/proof/__tests__/proof.controller.test.js +89 -0
  155. package/build/ts/proof/__tests__/proof.controller.test.js.map +1 -0
  156. package/build/ts/proof/__tests__/proof.gateway.test.d.ts +2 -0
  157. package/build/ts/proof/__tests__/proof.gateway.test.d.ts.map +1 -0
  158. package/build/ts/proof/__tests__/proof.gateway.test.js +61 -0
  159. package/build/ts/proof/__tests__/proof.gateway.test.js.map +1 -0
  160. package/build/ts/proof/__tests__/proof.service.test.d.ts +2 -0
  161. package/build/ts/proof/__tests__/proof.service.test.d.ts.map +1 -0
  162. package/build/ts/proof/__tests__/proof.service.test.js +128 -0
  163. package/build/ts/proof/__tests__/proof.service.test.js.map +1 -0
  164. package/build/ts/proof/dto.d.ts +73 -0
  165. package/build/ts/proof/dto.d.ts.map +1 -0
  166. package/build/ts/proof/dto.js +255 -0
  167. package/build/ts/proof/dto.js.map +1 -0
  168. package/build/ts/proof/proof.controller.d.ts +46 -0
  169. package/build/ts/proof/proof.controller.d.ts.map +1 -0
  170. package/build/ts/proof/proof.controller.js +135 -0
  171. package/build/ts/proof/proof.controller.js.map +1 -0
  172. package/build/ts/proof/proof.gateway.d.ts +35 -0
  173. package/build/ts/proof/proof.gateway.d.ts.map +1 -0
  174. package/build/ts/proof/proof.gateway.js +93 -0
  175. package/build/ts/proof/proof.gateway.js.map +1 -0
  176. package/build/ts/proof/proof.module.d.ts +3 -0
  177. package/build/ts/proof/proof.module.d.ts.map +1 -0
  178. package/build/ts/proof/proof.module.js +24 -0
  179. package/build/ts/proof/proof.module.js.map +1 -0
  180. package/build/ts/proof/proof.service.d.ts +54 -0
  181. package/build/ts/proof/proof.service.d.ts.map +1 -0
  182. package/build/ts/proof/proof.service.js +246 -0
  183. package/build/ts/proof/proof.service.js.map +1 -0
  184. package/build/ts/proof/types.d.ts +140 -0
  185. package/build/ts/proof/types.d.ts.map +1 -0
  186. package/build/ts/proof/types.js +11 -0
  187. package/build/ts/proof/types.js.map +1 -0
  188. package/build/ts/sessionKeys/__tests__/sessionKeys.controller.test.d.ts +2 -0
  189. package/build/ts/sessionKeys/__tests__/sessionKeys.controller.test.d.ts.map +1 -0
  190. package/build/ts/sessionKeys/__tests__/sessionKeys.controller.test.js +44 -0
  191. package/build/ts/sessionKeys/__tests__/sessionKeys.controller.test.js.map +1 -0
  192. package/build/ts/sessionKeys/__tests__/sessionKeys.service.test.d.ts +2 -0
  193. package/build/ts/sessionKeys/__tests__/sessionKeys.service.test.d.ts.map +1 -0
  194. package/build/ts/sessionKeys/__tests__/sessionKeys.service.test.js +61 -0
  195. package/build/ts/sessionKeys/__tests__/sessionKeys.service.test.js.map +1 -0
  196. package/build/ts/sessionKeys/__tests__/utils.d.ts +25 -0
  197. package/build/ts/sessionKeys/__tests__/utils.d.ts.map +1 -0
  198. package/build/ts/sessionKeys/__tests__/utils.js +64 -0
  199. package/build/ts/sessionKeys/__tests__/utils.js.map +1 -0
  200. package/build/ts/sessionKeys/dto.d.ts +11 -0
  201. package/build/ts/sessionKeys/dto.d.ts.map +1 -0
  202. package/build/ts/sessionKeys/dto.js +29 -0
  203. package/build/ts/sessionKeys/dto.js.map +1 -0
  204. package/build/ts/sessionKeys/sessionKeys.controller.d.ts +26 -0
  205. package/build/ts/sessionKeys/sessionKeys.controller.d.ts.map +1 -0
  206. package/build/ts/sessionKeys/sessionKeys.controller.js +74 -0
  207. package/build/ts/sessionKeys/sessionKeys.controller.js.map +1 -0
  208. package/build/ts/sessionKeys/sessionKeys.module.d.ts +3 -0
  209. package/build/ts/sessionKeys/sessionKeys.module.d.ts.map +1 -0
  210. package/build/ts/sessionKeys/sessionKeys.module.js +23 -0
  211. package/build/ts/sessionKeys/sessionKeys.module.js.map +1 -0
  212. package/build/ts/sessionKeys/sessionKeys.service.d.ts +50 -0
  213. package/build/ts/sessionKeys/sessionKeys.service.d.ts.map +1 -0
  214. package/build/ts/sessionKeys/sessionKeys.service.js +104 -0
  215. package/build/ts/sessionKeys/sessionKeys.service.js.map +1 -0
  216. package/build/ts/sessionKeys/types.d.ts +11 -0
  217. package/build/ts/sessionKeys/types.d.ts.map +1 -0
  218. package/build/ts/sessionKeys/types.js +2 -0
  219. package/build/ts/sessionKeys/types.js.map +1 -0
  220. package/build/ts/subgraph/__tests__/subgraph.controller.test.d.ts +2 -0
  221. package/build/ts/subgraph/__tests__/subgraph.controller.test.d.ts.map +1 -0
  222. package/build/ts/subgraph/__tests__/subgraph.controller.test.js +50 -0
  223. package/build/ts/subgraph/__tests__/subgraph.controller.test.js.map +1 -0
  224. package/build/ts/subgraph/__tests__/subgraph.gateway.test.d.ts +2 -0
  225. package/build/ts/subgraph/__tests__/subgraph.gateway.test.d.ts.map +1 -0
  226. package/build/ts/subgraph/__tests__/subgraph.gateway.test.js +83 -0
  227. package/build/ts/subgraph/__tests__/subgraph.gateway.test.js.map +1 -0
  228. package/build/ts/subgraph/__tests__/subgraph.service.test.d.ts +2 -0
  229. package/build/ts/subgraph/__tests__/subgraph.service.test.d.ts.map +1 -0
  230. package/build/ts/subgraph/__tests__/subgraph.service.test.js +58 -0
  231. package/build/ts/subgraph/__tests__/subgraph.service.test.js.map +1 -0
  232. package/build/ts/subgraph/dto.d.ts +27 -0
  233. package/build/ts/subgraph/dto.d.ts.map +1 -0
  234. package/build/ts/subgraph/dto.js +83 -0
  235. package/build/ts/subgraph/dto.js.map +1 -0
  236. package/build/ts/subgraph/subgraph.controller.d.ts +24 -0
  237. package/build/ts/subgraph/subgraph.controller.d.ts.map +1 -0
  238. package/build/ts/subgraph/subgraph.controller.js +66 -0
  239. package/build/ts/subgraph/subgraph.controller.js.map +1 -0
  240. package/build/ts/subgraph/subgraph.gateway.d.ts +35 -0
  241. package/build/ts/subgraph/subgraph.gateway.d.ts.map +1 -0
  242. package/build/ts/subgraph/subgraph.gateway.js +93 -0
  243. package/build/ts/subgraph/subgraph.gateway.js.map +1 -0
  244. package/build/ts/subgraph/subgraph.module.d.ts +3 -0
  245. package/build/ts/subgraph/subgraph.module.d.ts.map +1 -0
  246. package/build/ts/subgraph/subgraph.module.js +23 -0
  247. package/build/ts/subgraph/subgraph.module.js.map +1 -0
  248. package/build/ts/subgraph/subgraph.service.d.ts +20 -0
  249. package/build/ts/subgraph/subgraph.service.d.ts.map +1 -0
  250. package/build/ts/subgraph/subgraph.service.js +106 -0
  251. package/build/ts/subgraph/subgraph.service.js.map +1 -0
  252. package/build/ts/subgraph/types.d.ts +93 -0
  253. package/build/ts/subgraph/types.d.ts.map +1 -0
  254. package/build/ts/subgraph/types.js +24 -0
  255. package/build/ts/subgraph/types.js.map +1 -0
  256. package/build/tsconfig.build.tsbuildinfo +1 -0
  257. package/package.json +124 -0
@@ -0,0 +1,614 @@
1
+ var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
2
+ var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
3
+ if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
4
+ else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
5
+ return c > 3 && r && Object.defineProperty(target, key, r), r;
6
+ };
7
+ var __metadata = (this && this.__metadata) || function (k, v) {
8
+ if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
9
+ };
10
+ var DeployerService_1;
11
+ import { PubKey, VerifyingKey } from "@maci-protocol/domainobjs";
12
+ import { ConstantInitialVoiceCreditProxy__factory as ConstantInitialVoiceCreditProxyFactory, ContractStorage, EPolicies, FreeForAllPolicy__factory as FreeForAllPolicyFactory, EASPolicy__factory as EASPolicyFactory, ZupassPolicy__factory as ZupassPolicyFactory, HatsPolicy__factory as HatsPolicyFactory, SemaphorePolicy__factory as SemaphorePolicyFactory, GitcoinPassportPolicy__factory as GitcoinPassportPolicyFactory, Verifier__factory as VerifierFactory, PoseidonT3__factory as PoseidonT3Factory, PoseidonT4__factory as PoseidonT4Factory, PoseidonT5__factory as PoseidonT5Factory, PoseidonT6__factory as PoseidonT6Factory, VkRegistry__factory as VkRegistryFactory, TallyFactory__factory as TallyFactoryFactory, PollFactory__factory as PollFactoryFactory, MessageProcessorFactory__factory as MessageProcessorFactoryFactory, MessageProcessor__factory as MessageProcessorFactory, ERC20VotesPolicy__factory as ERC20VotesPolicyFactory, Tally__factory as TallyFactory, Poll__factory as PollFactory, MACI__factory as MACIFactory, EContracts, EInitialVoiceCreditProxies, EMode, deployPoll, extractAllVks, extractVk, genEmptyBallotRoots, } from "@maci-protocol/sdk";
13
+ import { Injectable, Logger } from "@nestjs/common";
14
+ import { BaseContract } from "ethers";
15
+ import { encodeFunctionData } from "viem";
16
+ import path from "path";
17
+ import { ErrorCodes } from "../common";
18
+ import { getBundlerClient, getDeployedContractAddress, getPublicClient } from "../common/accountAbstraction";
19
+ import { FileService } from "../file/file.service";
20
+ import { SessionKeysService } from "../sessionKeys/sessionKeys.service";
21
+ import { MAX_GAS_LIMIT } from "./constants";
22
+ import { estimateExtraGasLimit } from "./utils";
23
+ /**
24
+ * DeployerService is responsible for deploying contracts.
25
+ */
26
+ let DeployerService = DeployerService_1 = class DeployerService {
27
+ sessionKeysService;
28
+ fileService;
29
+ /**
30
+ * Logger
31
+ */
32
+ logger = new Logger(DeployerService_1.name);
33
+ /**
34
+ * Contract storage instance
35
+ */
36
+ storage;
37
+ /**
38
+ * Create a new instance of DeployerService
39
+ *
40
+ * @param fileService - file service
41
+ */
42
+ constructor(sessionKeysService, fileService) {
43
+ this.sessionKeysService = sessionKeysService;
44
+ this.fileService = fileService;
45
+ this.logger = new Logger(DeployerService_1.name);
46
+ this.storage = ContractStorage.getInstance(path.join(process.cwd(), "deployed-contracts.json"));
47
+ }
48
+ /**
49
+ * Get the policy abi and bytecode based on the policy type
50
+ * and also check if there is already an instance deployed
51
+ *
52
+ * @param policyType - the policy type
53
+ * @param network - the network
54
+ * @param args - the policy args
55
+ * @returns - the policy abi and bytecode
56
+ */
57
+ getPolicyData(policyType, network, args) {
58
+ const address = this.storage.getAddress(policyType, network);
59
+ let storedArgs;
60
+ let isAlreadyDeployed;
61
+ // based on the policy type, we need to deploy the correct policy
62
+ switch (policyType) {
63
+ case EPolicies.FreeForAll: {
64
+ return {
65
+ address,
66
+ abi: FreeForAllPolicyFactory.abi,
67
+ bytecode: FreeForAllPolicyFactory.bytecode,
68
+ alreadyDeployed: !!address,
69
+ };
70
+ }
71
+ case EPolicies.EAS: {
72
+ storedArgs = this.storage.getContractArgs(policyType, network);
73
+ isAlreadyDeployed =
74
+ !!storedArgs &&
75
+ storedArgs.length === 3 &&
76
+ storedArgs[0] === args.easAddress &&
77
+ storedArgs[1] === args.schema &&
78
+ storedArgs[2] === args.attester;
79
+ return {
80
+ address: isAlreadyDeployed ? address : undefined,
81
+ abi: EASPolicyFactory.abi,
82
+ bytecode: EASPolicyFactory.bytecode,
83
+ alreadyDeployed: isAlreadyDeployed,
84
+ };
85
+ }
86
+ case EPolicies.Zupass: {
87
+ storedArgs = this.storage.getContractArgs(policyType, network);
88
+ isAlreadyDeployed =
89
+ !!storedArgs &&
90
+ storedArgs.length === 4 &&
91
+ storedArgs[0] === args.signer1 &&
92
+ storedArgs[1] === args.signer2 &&
93
+ storedArgs[2] === args.eventId &&
94
+ storedArgs[3] === args.zupassVerifier;
95
+ return {
96
+ address: isAlreadyDeployed ? address : undefined,
97
+ abi: ZupassPolicyFactory.abi,
98
+ bytecode: ZupassPolicyFactory.bytecode,
99
+ alreadyDeployed: isAlreadyDeployed,
100
+ };
101
+ }
102
+ case EPolicies.Hats: {
103
+ storedArgs = this.storage.getContractArgs(policyType, network);
104
+ isAlreadyDeployed =
105
+ !!storedArgs &&
106
+ storedArgs.length === 2 &&
107
+ storedArgs[0] === args.hatsProtocolAddress &&
108
+ JSON.stringify(storedArgs[1]) === JSON.stringify(args.critrionHats);
109
+ return {
110
+ address: isAlreadyDeployed ? address : undefined,
111
+ abi: HatsPolicyFactory.abi,
112
+ bytecode: HatsPolicyFactory.bytecode,
113
+ alreadyDeployed: isAlreadyDeployed,
114
+ };
115
+ }
116
+ case EPolicies.Semaphore: {
117
+ storedArgs = this.storage.getContractArgs(policyType, network);
118
+ isAlreadyDeployed =
119
+ !!storedArgs &&
120
+ storedArgs.length === 2 &&
121
+ storedArgs[0] === args.semaphoreContract &&
122
+ storedArgs[1] === args.groupId;
123
+ return {
124
+ address: isAlreadyDeployed ? address : undefined,
125
+ abi: SemaphorePolicyFactory.abi,
126
+ bytecode: SemaphorePolicyFactory.bytecode,
127
+ alreadyDeployed: isAlreadyDeployed,
128
+ };
129
+ }
130
+ case EPolicies.GitcoinPassport: {
131
+ storedArgs = this.storage.getContractArgs(policyType, network);
132
+ isAlreadyDeployed =
133
+ !!storedArgs &&
134
+ storedArgs.length === 2 &&
135
+ storedArgs[0] === args.decoderAddress &&
136
+ storedArgs[1] === args.passingScore;
137
+ return {
138
+ address: isAlreadyDeployed ? address : undefined,
139
+ abi: GitcoinPassportPolicyFactory.abi,
140
+ bytecode: GitcoinPassportPolicyFactory.bytecode,
141
+ alreadyDeployed: isAlreadyDeployed,
142
+ };
143
+ }
144
+ case EPolicies.ERC20Votes: {
145
+ storedArgs = this.storage.getContractArgs(policyType, network);
146
+ isAlreadyDeployed =
147
+ !!storedArgs &&
148
+ storedArgs.length === 3 &&
149
+ storedArgs[0] === args.token &&
150
+ storedArgs[1] === args.factor &&
151
+ storedArgs[2] === args.snapshotBlock;
152
+ return {
153
+ address: isAlreadyDeployed ? address : undefined,
154
+ abi: ERC20VotesPolicyFactory.abi,
155
+ bytecode: ERC20VotesPolicyFactory.bytecode,
156
+ alreadyDeployed: isAlreadyDeployed,
157
+ };
158
+ }
159
+ default:
160
+ throw new Error(ErrorCodes.UNSUPPORTED_POLICY.toString());
161
+ }
162
+ }
163
+ /**
164
+ * Get the voice credit proxy abi and bytecode based on the voice credit proxy type
165
+ * and also check if there is already an instance deployed
166
+ *
167
+ * @param voiceCreditProxyType - the voice credit proxy type
168
+ * @param network - the network
169
+ * @param args - the voice credit proxy args
170
+ * @returns - the voice credit proxy abi and bytecode
171
+ */
172
+ getVoiceCreditProxyData(voiceCreditProxyType, network, args) {
173
+ let storedArgs;
174
+ let isAlreadyDeployed;
175
+ const address = this.storage.getAddress(voiceCreditProxyType, network);
176
+ switch (voiceCreditProxyType) {
177
+ case EInitialVoiceCreditProxies.Constant: {
178
+ storedArgs = this.storage.getContractArgs(voiceCreditProxyType, network);
179
+ isAlreadyDeployed = !!storedArgs && storedArgs[0] === args.amount;
180
+ return {
181
+ address: isAlreadyDeployed ? address : undefined,
182
+ abi: ConstantInitialVoiceCreditProxyFactory.abi,
183
+ bytecode: ConstantInitialVoiceCreditProxyFactory.bytecode,
184
+ alreadyDeployed: isAlreadyDeployed,
185
+ };
186
+ }
187
+ default:
188
+ throw new Error(ErrorCodes.UNSUPPORTED_VOICE_CREDIT_PROXY.toString());
189
+ }
190
+ }
191
+ /**
192
+ * @param abi - the abi
193
+ * @param bytecode - the bytecode
194
+ * @param args - the args
195
+ * @param publicClient - the public client
196
+ * @returns - the address
197
+ */
198
+ async deployAndGetAddress(kernelClient, abi, bytecode, args, bundlerClient, publicClient) {
199
+ const deployCallData = await kernelClient.account.encodeDeployCallData({
200
+ abi,
201
+ args,
202
+ bytecode,
203
+ });
204
+ const gasPrice = await kernelClient.getUserOperationGasPrice();
205
+ const opEstimate = await kernelClient.prepareUserOperation({
206
+ callData: deployCallData,
207
+ sender: kernelClient.account.address,
208
+ maxFeePerGas: gasPrice.maxFeePerGas,
209
+ maxPriorityFeePerGas: gasPrice.maxPriorityFeePerGas,
210
+ });
211
+ const callGasLimitMultiplier = estimateExtraGasLimit(opEstimate.callGasLimit);
212
+ const tx = await kernelClient.sendUserOperation({
213
+ callData: deployCallData,
214
+ sender: kernelClient.account.address,
215
+ maxFeePerGas: gasPrice.maxFeePerGas,
216
+ maxPriorityFeePerGas: gasPrice.maxPriorityFeePerGas,
217
+ callGasLimit: opEstimate.callGasLimit + callGasLimitMultiplier < MAX_GAS_LIMIT
218
+ ? opEstimate.callGasLimit + callGasLimitMultiplier
219
+ : MAX_GAS_LIMIT,
220
+ });
221
+ const receipt = await bundlerClient.waitForUserOperationReceipt({
222
+ hash: tx,
223
+ });
224
+ const txReceipt = await publicClient.getTransactionReceipt({
225
+ hash: receipt.receipt.transactionHash,
226
+ });
227
+ return getDeployedContractAddress(txReceipt);
228
+ }
229
+ /**
230
+ * Deploy a contract and store the address
231
+ *
232
+ * @param contract - the contract to deploy
233
+ * @param args - the args
234
+ * @param abi - the abi
235
+ * @param bytecode - the bytecode
236
+ * @param kernelClient - the kernel client
237
+ * @param publicClient - the public client
238
+ * @param chain - the chain
239
+ * @returns - the address of the deployed contract
240
+ */
241
+ async deployAndStore(contract, args, abi, bytecode, kernelClient, bundlerClient, publicClient, chain) {
242
+ let address = this.storage.getAddress(contract, chain);
243
+ if (!address) {
244
+ address = await this.deployAndGetAddress(kernelClient, abi, bytecode, args, bundlerClient, publicClient);
245
+ if (!address) {
246
+ this.logger.error(`Failed to deploy contract: ${contract}`);
247
+ throw new Error(`${ErrorCodes.FAILED_TO_DEPLOY_CONTRACT} ${contract}`);
248
+ }
249
+ await this.storage.register({
250
+ id: contract,
251
+ contract: new BaseContract(address, abi),
252
+ args: args.map((arg) => {
253
+ if (Array.isArray(arg)) {
254
+ return arg.map((a) => String(a));
255
+ }
256
+ return String(arg);
257
+ }),
258
+ network: chain,
259
+ });
260
+ }
261
+ return address;
262
+ }
263
+ /**
264
+ * Estimate gas, add a bit extra and send the user operation (aka. transaction)
265
+ * @param to - the to address of the user operation
266
+ * @param value - the value of the user operation
267
+ * @param abi - the abi
268
+ * @param functionName - the function name
269
+ * @param args - the args
270
+ * @param errorMessage - the error message
271
+ * @param kernelClient - the kernel client
272
+ * @param bundlerClient - the bundler client
273
+ */
274
+ async estimateGasAndSend(to, value, abi, functionName, args, errorMessage, kernelClient, bundlerClient) {
275
+ const gasEstimates = await kernelClient.getUserOperationGasPrice();
276
+ const userOperation = {
277
+ sender: kernelClient.account.address,
278
+ maxFeePerGas: gasEstimates.maxFeePerGas,
279
+ maxPriorityFeePerGas: gasEstimates.maxPriorityFeePerGas,
280
+ callData: await kernelClient.account.encodeCalls([
281
+ {
282
+ to,
283
+ value,
284
+ data: encodeFunctionData({
285
+ abi,
286
+ functionName,
287
+ args,
288
+ }),
289
+ },
290
+ ]),
291
+ };
292
+ const opEstimate = await kernelClient.prepareUserOperation(userOperation);
293
+ const callGasLimitMultiplier = estimateExtraGasLimit(opEstimate.callGasLimit);
294
+ const userOperationHash = await kernelClient.sendUserOperation({
295
+ ...userOperation,
296
+ callGasLimit: opEstimate.callGasLimit + callGasLimitMultiplier < MAX_GAS_LIMIT
297
+ ? opEstimate.callGasLimit + callGasLimitMultiplier
298
+ : MAX_GAS_LIMIT,
299
+ });
300
+ const receipt = await bundlerClient.waitForUserOperationReceipt({ hash: userOperationHash });
301
+ if (!receipt.success) {
302
+ throw new Error(errorMessage);
303
+ }
304
+ return receipt;
305
+ }
306
+ /**
307
+ * Get verifying keys arguments (specially zkey paths)
308
+ * @param signer - the signer
309
+ * @param vkRegistryContract - the deployed vk registry contract
310
+ * @param vkRegistryArgs - the arguments send to the endpoint
311
+ * @param mode - use QV or NON_QV
312
+ * @returns SetVerifyingKeysArgs
313
+ */
314
+ async getVerifyingKeysArgs(signer, vkRegistryContract, vkRegistryArgs, mode) {
315
+ const pollJoiningZkeyPath = this.fileService.getZkeyFilePaths(process.env.COORDINATOR_POLL_JOINING_ZKEY_NAME, true).zkey;
316
+ const pollJoinedZkeyPath = this.fileService.getZkeyFilePaths(process.env.COORDINATOR_POLL_JOINED_ZKEY_NAME, true).zkey;
317
+ const processMessagesZkeyPath = this.fileService.getZkeyFilePaths(process.env.COORDINATOR_MESSAGE_PROCESS_ZKEY_NAME, mode === EMode.QV).zkey;
318
+ const tallyVotesZkeyPath = this.fileService.getZkeyFilePaths(process.env.COORDINATOR_TALLY_ZKEY_NAME, mode === EMode.QV).zkey;
319
+ const { pollJoiningVk, pollJoinedVk, processVk, tallyVk } = await extractAllVks({
320
+ pollJoiningZkeyPath,
321
+ pollJoinedZkeyPath,
322
+ processMessagesZkeyPath,
323
+ tallyVotesZkeyPath,
324
+ });
325
+ const { stateTreeDepth, intStateTreeDepth, voteOptionTreeDepth, messageBatchSize } = vkRegistryArgs;
326
+ return {
327
+ pollJoiningVk: pollJoiningVk,
328
+ pollJoinedVk: pollJoinedVk,
329
+ processMessagesVk: processVk,
330
+ tallyVotesVk: tallyVk,
331
+ stateTreeDepth: Number(stateTreeDepth),
332
+ intStateTreeDepth: Number(intStateTreeDepth),
333
+ voteOptionTreeDepth: Number(voteOptionTreeDepth),
334
+ messageBatchSize: Number(messageBatchSize),
335
+ signer,
336
+ mode,
337
+ vkRegistryAddress: await vkRegistryContract.getAddress(),
338
+ };
339
+ }
340
+ /**
341
+ * Deploy MACI contracts
342
+ *
343
+ * @param args - deploy maci arguments
344
+ * @param options - ws hooks
345
+ * @returns - deployed maci contract
346
+ * @returns the address of the deployed maci contract
347
+ */
348
+ async deployMaci({ approval, sessionKeyAddress, chain, config }) {
349
+ const publicClient = getPublicClient(chain);
350
+ const bundlerClient = getBundlerClient(chain);
351
+ const kernelClient = await this.sessionKeysService.generateClientFromSessionKey(sessionKeyAddress, approval, chain);
352
+ let policyAddress = this.storage.getAddress(config.policy.type, chain);
353
+ const policyData = this.getPolicyData(config.policy.type, chain, config.policy.args);
354
+ // if the policy is not already deployed, we need to deploy it
355
+ if (!policyData.alreadyDeployed) {
356
+ policyAddress = await this.deployAndStore(config.policy.type, config.policy.args ? Object.values(config.policy.args) : [], policyData.abi, policyData.bytecode, kernelClient, bundlerClient, publicClient, chain);
357
+ }
358
+ // deploy all maci contracts
359
+ // (we are not using Promise.all because the write tx nonce should be sequential)
360
+ // 1. verifier
361
+ await this.deployAndStore(EContracts.Verifier, [], VerifierFactory.abi, VerifierFactory.bytecode, kernelClient, bundlerClient, publicClient, chain);
362
+ // 2. poseidon
363
+ let poseidonT3Address;
364
+ let poseidonT4Address;
365
+ let poseidonT5Address;
366
+ let poseidonT6Address;
367
+ if (config.Poseidon) {
368
+ // Some times the poseidon contracts are already deployed so we don't need to deploy them again
369
+ poseidonT3Address = config.Poseidon.poseidonT3;
370
+ poseidonT4Address = config.Poseidon.poseidonT4;
371
+ poseidonT5Address = config.Poseidon.poseidonT5;
372
+ poseidonT6Address = config.Poseidon.poseidonT6;
373
+ }
374
+ else {
375
+ poseidonT3Address = await this.deployAndStore(EContracts.PoseidonT3, [], PoseidonT3Factory.abi, PoseidonT3Factory.bytecode, kernelClient, bundlerClient, publicClient, chain);
376
+ poseidonT4Address = await this.deployAndStore(EContracts.PoseidonT4, [], PoseidonT4Factory.abi, PoseidonT4Factory.bytecode, kernelClient, bundlerClient, publicClient, chain);
377
+ poseidonT5Address = await this.deployAndStore(EContracts.PoseidonT5, [], PoseidonT5Factory.abi, PoseidonT5Factory.bytecode, kernelClient, bundlerClient, publicClient, chain);
378
+ poseidonT6Address = await this.deployAndStore(EContracts.PoseidonT6, [], PoseidonT6Factory.abi, PoseidonT6Factory.bytecode, kernelClient, bundlerClient, publicClient, chain);
379
+ }
380
+ // 3. factories
381
+ const pollFactoryAddress = await this.deployAndStore(EContracts.PollFactory, [], PollFactoryFactory.abi, PollFactoryFactory.linkBytecode({
382
+ "contracts/crypto/PoseidonT3.sol:PoseidonT3": poseidonT3Address,
383
+ "contracts/crypto/PoseidonT4.sol:PoseidonT4": poseidonT4Address,
384
+ "contracts/crypto/PoseidonT5.sol:PoseidonT5": poseidonT5Address,
385
+ "contracts/crypto/PoseidonT6.sol:PoseidonT6": poseidonT6Address,
386
+ }), kernelClient, bundlerClient, publicClient, chain);
387
+ const tallyFactoryAddress = await this.deployAndStore(EContracts.TallyFactory, [], TallyFactoryFactory.abi, TallyFactoryFactory.linkBytecode({
388
+ "contracts/crypto/PoseidonT3.sol:PoseidonT3": poseidonT3Address,
389
+ "contracts/crypto/PoseidonT4.sol:PoseidonT4": poseidonT4Address,
390
+ "contracts/crypto/PoseidonT5.sol:PoseidonT5": poseidonT5Address,
391
+ "contracts/crypto/PoseidonT6.sol:PoseidonT6": poseidonT6Address,
392
+ }), kernelClient, bundlerClient, publicClient, chain);
393
+ const messageProcessorFactoryAddress = await this.deployAndStore(EContracts.MessageProcessorFactory, [], MessageProcessorFactoryFactory.abi, MessageProcessorFactoryFactory.linkBytecode({
394
+ "contracts/crypto/PoseidonT3.sol:PoseidonT3": poseidonT3Address,
395
+ "contracts/crypto/PoseidonT4.sol:PoseidonT4": poseidonT4Address,
396
+ "contracts/crypto/PoseidonT5.sol:PoseidonT5": poseidonT5Address,
397
+ "contracts/crypto/PoseidonT6.sol:PoseidonT6": poseidonT6Address,
398
+ }), kernelClient, bundlerClient, publicClient, chain);
399
+ // 4. VkRegistry
400
+ const vkRegistryAddress = await this.deployAndStore(EContracts.VkRegistry, [], VkRegistryFactory.abi, VkRegistryFactory.bytecode, kernelClient, bundlerClient, publicClient, chain);
401
+ try {
402
+ const processMessagesZkeyPathQv = this.fileService.getZkeyFilePaths(process.env.COORDINATOR_MESSAGE_PROCESS_ZKEY_NAME, true);
403
+ const tallyVotesZkeyPathQv = this.fileService.getZkeyFilePaths(process.env.COORDINATOR_TALLY_ZKEY_NAME, true);
404
+ const processMessagesZkeyPathNonQv = this.fileService.getZkeyFilePaths(process.env.COORDINATOR_MESSAGE_PROCESS_ZKEY_NAME, false);
405
+ const tallyVotesZkeyPathNonQv = this.fileService.getZkeyFilePaths(process.env.COORDINATOR_TALLY_ZKEY_NAME, false);
406
+ const pollJoiningZkeyPath = this.fileService.getZkeyFilePaths(process.env.COORDINATOR_POLL_JOINING_ZKEY_NAME, true);
407
+ const pollJoinedZkeyPath = this.fileService.getZkeyFilePaths(process.env.COORDINATOR_POLL_JOINED_ZKEY_NAME, true);
408
+ const [qvProcessVk, qvTallyVk, nonQvProcessVk, nonQvTallyVk, pollJoiningVk, pollJoinedVk] = await Promise.all([
409
+ extractVk(processMessagesZkeyPathQv.zkey),
410
+ extractVk(tallyVotesZkeyPathQv.zkey),
411
+ extractVk(processMessagesZkeyPathNonQv.zkey),
412
+ extractVk(tallyVotesZkeyPathNonQv.zkey),
413
+ extractVk(pollJoiningZkeyPath.zkey),
414
+ extractVk(pollJoinedZkeyPath.zkey),
415
+ ]).then((vks) => vks.map((vk) => vk && VerifyingKey.fromObj(vk).asContractParam()));
416
+ const processZkeys = [qvProcessVk, nonQvProcessVk].filter(Boolean);
417
+ const tallyZkeys = [qvTallyVk, nonQvTallyVk].filter(Boolean);
418
+ // check if the keys are already set
419
+ const [isProcessVkSet, isProcessNonQvVkSet, isTallyVkSet, isTallyNonQvVkSet] = await Promise.all([
420
+ publicClient.readContract({
421
+ address: vkRegistryAddress,
422
+ abi: VkRegistryFactory.abi,
423
+ functionName: "hasProcessVk",
424
+ args: [
425
+ config.VkRegistry.args.stateTreeDepth,
426
+ config.VkRegistry.args.voteOptionTreeDepth,
427
+ config.VkRegistry.args.messageBatchSize,
428
+ EMode.QV,
429
+ ],
430
+ }),
431
+ publicClient.readContract({
432
+ address: vkRegistryAddress,
433
+ abi: VkRegistryFactory.abi,
434
+ functionName: "hasProcessVk",
435
+ args: [
436
+ config.VkRegistry.args.stateTreeDepth,
437
+ config.VkRegistry.args.voteOptionTreeDepth,
438
+ config.VkRegistry.args.messageBatchSize,
439
+ EMode.NON_QV,
440
+ ],
441
+ }),
442
+ publicClient.readContract({
443
+ address: vkRegistryAddress,
444
+ abi: VkRegistryFactory.abi,
445
+ functionName: "hasTallyVk",
446
+ args: [
447
+ config.VkRegistry.args.stateTreeDepth,
448
+ config.VkRegistry.args.intStateTreeDepth,
449
+ config.VkRegistry.args.voteOptionTreeDepth,
450
+ EMode.QV,
451
+ ],
452
+ }),
453
+ publicClient.readContract({
454
+ address: vkRegistryAddress,
455
+ abi: VkRegistryFactory.abi,
456
+ functionName: "hasTallyVk",
457
+ args: [
458
+ config.VkRegistry.args.stateTreeDepth,
459
+ config.VkRegistry.args.intStateTreeDepth,
460
+ config.VkRegistry.args.voteOptionTreeDepth,
461
+ EMode.NON_QV,
462
+ ],
463
+ }),
464
+ ]);
465
+ if (isProcessVkSet && isProcessNonQvVkSet && isTallyVkSet && isTallyNonQvVkSet) {
466
+ this.logger.debug("Verifying keys are already set on the vk registry");
467
+ }
468
+ else {
469
+ await this.estimateGasAndSend(vkRegistryAddress, 0n, VkRegistryFactory.abi, "setVerifyingKeysBatch", [
470
+ config.VkRegistry.args.stateTreeDepth,
471
+ config.VkRegistry.args.intStateTreeDepth,
472
+ config.VkRegistry.args.voteOptionTreeDepth,
473
+ config.VkRegistry.args.messageBatchSize,
474
+ [EMode.QV, EMode.NON_QV],
475
+ pollJoiningVk,
476
+ pollJoinedVk,
477
+ processZkeys,
478
+ tallyZkeys,
479
+ ], ErrorCodes.FAILED_TO_SET_VERIFYING_KEYS_ON_VK_REGISTRY.toString(), kernelClient, bundlerClient);
480
+ }
481
+ }
482
+ catch (error) {
483
+ this.logger.error("Failed to set verifying keys on vk registry: ", error);
484
+ throw error;
485
+ }
486
+ // 5. maci (here we don't check whether one is already deployed, we just deploy it)
487
+ const emptyBallotRoots = genEmptyBallotRoots(config.MACI.stateTreeDepth);
488
+ const maciAddress = await this.deployAndStore(EContracts.MACI, [
489
+ pollFactoryAddress,
490
+ messageProcessorFactoryAddress,
491
+ tallyFactoryAddress,
492
+ policyAddress,
493
+ config.MACI.stateTreeDepth,
494
+ emptyBallotRoots,
495
+ ], MACIFactory.abi, MACIFactory.linkBytecode({
496
+ "contracts/crypto/PoseidonT3.sol:PoseidonT3": "0x07490eba00dc4ACA6721D052Fa4C5002Aa077233",
497
+ "contracts/crypto/PoseidonT4.sol:PoseidonT4": "0xbb0e724CE02e5E7eDd31e632dc6e59F229a1126d",
498
+ "contracts/crypto/PoseidonT5.sol:PoseidonT5": "0xE0398F7DFAC494c530F6404AfEaC8669ABeD2679",
499
+ "contracts/crypto/PoseidonT6.sol:PoseidonT6": "0xfD77833F10a29c76A6a0ede235Eb651D744d0E2F",
500
+ }), kernelClient, bundlerClient, publicClient, chain);
501
+ // set the gate on the policy
502
+ await this.estimateGasAndSend(policyAddress, 0n, policyData.abi, "setTarget", [maciAddress], ErrorCodes.FAILED_TO_SET_MACI_INSTANCE_ON_POLICY.toString(), kernelClient, bundlerClient);
503
+ return { address: maciAddress };
504
+ }
505
+ /**
506
+ * Deploy a poll
507
+ *
508
+ * @param args - deploy poll dto
509
+ * @returns poll id
510
+ */
511
+ async deployPoll({ approval, sessionKeyAddress, chain, config }) {
512
+ const publicClient = getPublicClient(chain);
513
+ const bundlerClient = getBundlerClient(chain);
514
+ const kernelClient = await this.sessionKeysService.generateClientFromSessionKey(sessionKeyAddress, approval, chain);
515
+ const signer = await this.sessionKeysService.getKernelClientSigner(kernelClient);
516
+ // check if there is a maci contract deployed on this chain
517
+ const maciAddress = this.storage.getAddress(EContracts.MACI, chain);
518
+ if (!maciAddress) {
519
+ throw new Error(ErrorCodes.MACI_NOT_DEPLOYED.toString());
520
+ }
521
+ // check if there is a verifier deployed on this chain
522
+ const verifierAddress = this.storage.getAddress(EContracts.Verifier, chain);
523
+ if (!verifierAddress) {
524
+ throw new Error(ErrorCodes.VERIFIER_NOT_DEPLOYED.toString());
525
+ }
526
+ // check if there is a vk registry deployed on this chain
527
+ const vkRegistryAddress = this.storage.getAddress(EContracts.VkRegistry, chain);
528
+ if (!vkRegistryAddress) {
529
+ throw new Error(ErrorCodes.VK_REGISTRY_NOT_DEPLOYED.toString());
530
+ }
531
+ // check if policy address was given
532
+ let policyAddress = config.policy.address;
533
+ if (!policyAddress) {
534
+ const policyData = this.getPolicyData(config.policy.type, chain, config.policy.args);
535
+ policyAddress = policyData.address;
536
+ // if the policy is not already deployed, we need to deploy it
537
+ if (!policyData.alreadyDeployed) {
538
+ policyAddress = await this.deployAndStore(config.policy.type, config.policy.args ? Object.values(config.policy.args) : [], policyData.abi, policyData.bytecode, kernelClient, bundlerClient, publicClient, chain);
539
+ }
540
+ }
541
+ // check if initial voice credit proxy address was given
542
+ let initialVoiceCreditProxyAddress = config.initialVoiceCreditsProxy.address;
543
+ if (!initialVoiceCreditProxyAddress) {
544
+ const voiceCreditProxyData = this.getVoiceCreditProxyData(config.initialVoiceCreditsProxy.type, chain, config.initialVoiceCreditsProxy.args);
545
+ initialVoiceCreditProxyAddress = voiceCreditProxyData.address;
546
+ // if the voice credit proxy is not already deployed, we need to deploy it
547
+ if (!voiceCreditProxyData.alreadyDeployed) {
548
+ initialVoiceCreditProxyAddress = await this.deployAndStore(config.initialVoiceCreditsProxy.type, Object.values(config.initialVoiceCreditsProxy.args), voiceCreditProxyData.abi, voiceCreditProxyData.bytecode, kernelClient, bundlerClient, publicClient, chain);
549
+ }
550
+ }
551
+ const mode = config.useQuadraticVoting ? EMode.QV : EMode.NON_QV;
552
+ const deployPollArgs = {
553
+ maciAddress,
554
+ pollStartTimestamp: config.startDate,
555
+ pollEndTimestamp: config.endDate,
556
+ intStateTreeDepth: config.intStateTreeDepth,
557
+ voteOptionTreeDepth: config.voteOptionTreeDepth,
558
+ messageBatchSize: config.messageBatchSize,
559
+ coordinatorPubKey: PubKey.deserialize(config.coordinatorPubkey),
560
+ verifierContractAddress: verifierAddress,
561
+ vkRegistryContractAddress: vkRegistryAddress,
562
+ mode,
563
+ policyContractAddress: policyAddress,
564
+ initialVoiceCreditProxyContractAddress: initialVoiceCreditProxyAddress,
565
+ relayers: config.relayers ? config.relayers.map((address) => address) : [],
566
+ voteOptions: Number(config.voteOptions),
567
+ initialVoiceCredits: Number(config.initialVoiceCreditsProxy.args.amount),
568
+ signer,
569
+ };
570
+ const { pollContractAddress, messageProcessorContractAddress, tallyContractAddress, pollId } = await deployPoll(deployPollArgs);
571
+ const poll = PollFactory.connect(pollContractAddress, signer);
572
+ // read the emptyBallotRoot and extContracts
573
+ const emptyBallotRoot = await poll.emptyBallotRoot();
574
+ const extContracts = await poll.extContracts();
575
+ // store to storage
576
+ await Promise.all([
577
+ this.storage.register({
578
+ id: EContracts.Poll,
579
+ key: `poll-${pollId}`,
580
+ contract: poll,
581
+ args: [
582
+ {
583
+ ...deployPollArgs,
584
+ extContracts,
585
+ emptyBallotRoot: emptyBallotRoot.toString(),
586
+ },
587
+ ],
588
+ network: chain,
589
+ }),
590
+ this.storage.register({
591
+ id: EContracts.MessageProcessor,
592
+ key: `poll-${pollId}`,
593
+ contract: new BaseContract(messageProcessorContractAddress, MessageProcessorFactory.abi),
594
+ args: [verifierAddress, vkRegistryAddress, pollContractAddress, mode],
595
+ network: chain,
596
+ }),
597
+ this.storage.register({
598
+ id: EContracts.Tally,
599
+ key: `poll-${pollId}`,
600
+ contract: new BaseContract(tallyContractAddress, TallyFactory.abi),
601
+ args: [verifierAddress, vkRegistryAddress, pollContractAddress, messageProcessorContractAddress, mode],
602
+ network: chain,
603
+ }),
604
+ ]);
605
+ return { pollId: pollId.toString() };
606
+ }
607
+ };
608
+ DeployerService = DeployerService_1 = __decorate([
609
+ Injectable(),
610
+ __metadata("design:paramtypes", [SessionKeysService,
611
+ FileService])
612
+ ], DeployerService);
613
+ export { DeployerService };
614
+ //# sourceMappingURL=deployer.service.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"deployer.service.js","sourceRoot":"","sources":["../../../ts/deployer/deployer.service.ts"],"names":[],"mappings":"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"}