@maci-protocol/coordinator 0.0.0-ci.01622be
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/CHANGELOG.md +51 -0
- package/LICENSE +21 -0
- package/README.md +49 -0
- package/build/hardhat.config.cjs +34 -0
- package/build/hardhat.config.cjs.map +1 -0
- package/build/hardhat.config.d.cts +27 -0
- package/build/hardhat.config.d.cts.map +1 -0
- package/build/scripts/generateKeypair.d.ts +2 -0
- package/build/scripts/generateKeypair.d.ts.map +1 -0
- package/build/scripts/generateKeypair.js +25 -0
- package/build/scripts/generateKeypair.js.map +1 -0
- package/build/scripts/generateMaciKeyPair.d.ts +2 -0
- package/build/scripts/generateMaciKeyPair.d.ts.map +1 -0
- package/build/scripts/generateMaciKeyPair.js +3 -0
- package/build/scripts/generateMaciKeyPair.js.map +1 -0
- package/build/scripts/getAuthHeader.d.ts +2 -0
- package/build/scripts/getAuthHeader.d.ts.map +1 -0
- package/build/scripts/getAuthHeader.js +31 -0
- package/build/scripts/getAuthHeader.js.map +1 -0
- package/build/tests/constants.d.ts +7 -0
- package/build/tests/constants.d.ts.map +1 -0
- package/build/tests/constants.js +9 -0
- package/build/tests/constants.js.map +1 -0
- package/build/tests/e2e.aa.test.d.ts +2 -0
- package/build/tests/e2e.aa.test.d.ts.map +1 -0
- package/build/tests/e2e.aa.test.js +106 -0
- package/build/tests/e2e.aa.test.js.map +1 -0
- package/build/tests/e2e.deploy.test.d.ts +2 -0
- package/build/tests/e2e.deploy.test.d.ts.map +1 -0
- package/build/tests/e2e.deploy.test.js +282 -0
- package/build/tests/e2e.deploy.test.js.map +1 -0
- package/build/tests/utils.d.ts +20 -0
- package/build/tests/utils.d.ts.map +1 -0
- package/build/tests/utils.js +53 -0
- package/build/tests/utils.js.map +1 -0
- package/build/ts/app.module.d.ts +3 -0
- package/build/ts/app.module.d.ts.map +1 -0
- package/build/ts/app.module.js +36 -0
- package/build/ts/app.module.js.map +1 -0
- package/build/ts/auth/AccountSignatureGuard.service.d.ts +44 -0
- package/build/ts/auth/AccountSignatureGuard.service.d.ts.map +1 -0
- package/build/ts/auth/AccountSignatureGuard.service.js +96 -0
- package/build/ts/auth/AccountSignatureGuard.service.js.map +1 -0
- package/build/ts/auth/__tests__/AccountSignatureGuard.test.d.ts +2 -0
- package/build/ts/auth/__tests__/AccountSignatureGuard.test.d.ts.map +1 -0
- package/build/ts/auth/__tests__/AccountSignatureGuard.test.js +113 -0
- package/build/ts/auth/__tests__/AccountSignatureGuard.test.js.map +1 -0
- package/build/ts/common/__tests__/common.test.d.ts +2 -0
- package/build/ts/common/__tests__/common.test.d.ts.map +1 -0
- package/build/ts/common/__tests__/common.test.js +75 -0
- package/build/ts/common/__tests__/common.test.js.map +1 -0
- package/build/ts/common/accountAbstraction.d.ts +38 -0
- package/build/ts/common/accountAbstraction.d.ts.map +1 -0
- package/build/ts/common/accountAbstraction.js +81 -0
- package/build/ts/common/accountAbstraction.js.map +1 -0
- package/build/ts/common/chain.d.ts +16 -0
- package/build/ts/common/chain.d.ts.map +1 -0
- package/build/ts/common/chain.js +35 -0
- package/build/ts/common/chain.js.map +1 -0
- package/build/ts/common/errors.d.ts +32 -0
- package/build/ts/common/errors.d.ts.map +1 -0
- package/build/ts/common/errors.js +33 -0
- package/build/ts/common/errors.js.map +1 -0
- package/build/ts/common/index.d.ts +6 -0
- package/build/ts/common/index.d.ts.map +1 -0
- package/build/ts/common/index.js +6 -0
- package/build/ts/common/index.js.map +1 -0
- package/build/ts/common/networks.d.ts +29 -0
- package/build/ts/common/networks.d.ts.map +1 -0
- package/build/ts/common/networks.js +70 -0
- package/build/ts/common/networks.js.map +1 -0
- package/build/ts/common/types.d.ts +8 -0
- package/build/ts/common/types.d.ts.map +1 -0
- package/build/ts/common/types.js +2 -0
- package/build/ts/common/types.js.map +1 -0
- package/build/ts/crypto/__tests__/crypto.service.test.d.ts +2 -0
- package/build/ts/crypto/__tests__/crypto.service.test.d.ts.map +1 -0
- package/build/ts/crypto/__tests__/crypto.service.test.js +26 -0
- package/build/ts/crypto/__tests__/crypto.service.test.js.map +1 -0
- package/build/ts/crypto/crypto.module.d.ts +3 -0
- package/build/ts/crypto/crypto.module.d.ts.map +1 -0
- package/build/ts/crypto/crypto.module.js +18 -0
- package/build/ts/crypto/crypto.module.js.map +1 -0
- package/build/ts/crypto/crypto.service.d.ts +31 -0
- package/build/ts/crypto/crypto.service.d.ts.map +1 -0
- package/build/ts/crypto/crypto.service.js +68 -0
- package/build/ts/crypto/crypto.service.js.map +1 -0
- package/build/ts/deployer/__tests__/deployer.controller.test.d.ts +2 -0
- package/build/ts/deployer/__tests__/deployer.controller.test.d.ts.map +1 -0
- package/build/ts/deployer/__tests__/deployer.controller.test.js +84 -0
- package/build/ts/deployer/__tests__/deployer.controller.test.js.map +1 -0
- package/build/ts/deployer/__tests__/deployer.service.test.d.ts +2 -0
- package/build/ts/deployer/__tests__/deployer.service.test.d.ts.map +1 -0
- package/build/ts/deployer/__tests__/deployer.service.test.js +166 -0
- package/build/ts/deployer/__tests__/deployer.service.test.js.map +1 -0
- package/build/ts/deployer/__tests__/utils.d.ts +65 -0
- package/build/ts/deployer/__tests__/utils.d.ts.map +1 -0
- package/build/ts/deployer/__tests__/utils.js +131 -0
- package/build/ts/deployer/__tests__/utils.js.map +1 -0
- package/build/ts/deployer/constants.d.ts +13 -0
- package/build/ts/deployer/constants.d.ts.map +1 -0
- package/build/ts/deployer/constants.js +13 -0
- package/build/ts/deployer/constants.js.map +1 -0
- package/build/ts/deployer/deployer.controller.d.ts +34 -0
- package/build/ts/deployer/deployer.controller.d.ts.map +1 -0
- package/build/ts/deployer/deployer.controller.js +89 -0
- package/build/ts/deployer/deployer.controller.js.map +1 -0
- package/build/ts/deployer/deployer.module.d.ts +3 -0
- package/build/ts/deployer/deployer.module.d.ts.map +1 -0
- package/build/ts/deployer/deployer.module.js +23 -0
- package/build/ts/deployer/deployer.module.js.map +1 -0
- package/build/ts/deployer/deployer.service.d.ts +76 -0
- package/build/ts/deployer/deployer.service.d.ts.map +1 -0
- package/build/ts/deployer/deployer.service.js +341 -0
- package/build/ts/deployer/deployer.service.js.map +1 -0
- package/build/ts/deployer/dto.d.ts +46 -0
- package/build/ts/deployer/dto.d.ts.map +1 -0
- package/build/ts/deployer/dto.js +125 -0
- package/build/ts/deployer/dto.js.map +1 -0
- package/build/ts/deployer/types.d.ts +344 -0
- package/build/ts/deployer/types.d.ts.map +1 -0
- package/build/ts/deployer/types.js +2 -0
- package/build/ts/deployer/types.js.map +1 -0
- package/build/ts/file/__tests__/file.service.test.d.ts +2 -0
- package/build/ts/file/__tests__/file.service.test.d.ts.map +1 -0
- package/build/ts/file/__tests__/file.service.test.js +77 -0
- package/build/ts/file/__tests__/file.service.test.js.map +1 -0
- package/build/ts/file/file.module.d.ts +3 -0
- package/build/ts/file/file.module.d.ts.map +1 -0
- package/build/ts/file/file.module.js +18 -0
- package/build/ts/file/file.module.js.map +1 -0
- package/build/ts/file/file.service.d.ts +63 -0
- package/build/ts/file/file.service.d.ts.map +1 -0
- package/build/ts/file/file.service.js +120 -0
- package/build/ts/file/file.service.js.map +1 -0
- package/build/ts/file/types.d.ts +36 -0
- package/build/ts/file/types.d.ts.map +1 -0
- package/build/ts/file/types.js +2 -0
- package/build/ts/file/types.js.map +1 -0
- package/build/ts/jest/setup.d.ts +8 -0
- package/build/ts/jest/setup.d.ts.map +1 -0
- package/build/ts/jest/setup.js +2 -0
- package/build/ts/jest/setup.js.map +1 -0
- package/build/ts/jest/transform.d.ts +8 -0
- package/build/ts/jest/transform.d.ts.map +1 -0
- package/build/ts/jest/transform.js +10 -0
- package/build/ts/jest/transform.js.map +1 -0
- package/build/ts/main.d.ts +2 -0
- package/build/ts/main.d.ts.map +1 -0
- package/build/ts/main.js +46 -0
- package/build/ts/main.js.map +1 -0
- package/build/ts/proof/__tests__/proof.controller.test.d.ts +2 -0
- package/build/ts/proof/__tests__/proof.controller.test.d.ts.map +1 -0
- package/build/ts/proof/__tests__/proof.controller.test.js +92 -0
- package/build/ts/proof/__tests__/proof.controller.test.js.map +1 -0
- package/build/ts/proof/__tests__/proof.gateway.test.d.ts +2 -0
- package/build/ts/proof/__tests__/proof.gateway.test.d.ts.map +1 -0
- package/build/ts/proof/__tests__/proof.gateway.test.js +65 -0
- package/build/ts/proof/__tests__/proof.gateway.test.js.map +1 -0
- package/build/ts/proof/__tests__/proof.service.test.d.ts +2 -0
- package/build/ts/proof/__tests__/proof.service.test.d.ts.map +1 -0
- package/build/ts/proof/__tests__/proof.service.test.js +130 -0
- package/build/ts/proof/__tests__/proof.service.test.js.map +1 -0
- package/build/ts/proof/dto.d.ts +75 -0
- package/build/ts/proof/dto.d.ts.map +1 -0
- package/build/ts/proof/dto.js +277 -0
- package/build/ts/proof/dto.js.map +1 -0
- package/build/ts/proof/proof.controller.d.ts +47 -0
- package/build/ts/proof/proof.controller.d.ts.map +1 -0
- package/build/ts/proof/proof.controller.js +135 -0
- package/build/ts/proof/proof.controller.js.map +1 -0
- package/build/ts/proof/proof.gateway.d.ts +35 -0
- package/build/ts/proof/proof.gateway.d.ts.map +1 -0
- package/build/ts/proof/proof.gateway.js +93 -0
- package/build/ts/proof/proof.gateway.js.map +1 -0
- package/build/ts/proof/proof.module.d.ts +3 -0
- package/build/ts/proof/proof.module.d.ts.map +1 -0
- package/build/ts/proof/proof.module.js +24 -0
- package/build/ts/proof/proof.module.js.map +1 -0
- package/build/ts/proof/proof.service.d.ts +54 -0
- package/build/ts/proof/proof.service.d.ts.map +1 -0
- package/build/ts/proof/proof.service.js +166 -0
- package/build/ts/proof/proof.service.js.map +1 -0
- package/build/ts/proof/types.d.ts +148 -0
- package/build/ts/proof/types.d.ts.map +1 -0
- package/build/ts/proof/types.js +11 -0
- package/build/ts/proof/types.js.map +1 -0
- package/build/ts/sessionKeys/__tests__/sessionKeys.controller.test.d.ts +2 -0
- package/build/ts/sessionKeys/__tests__/sessionKeys.controller.test.d.ts.map +1 -0
- package/build/ts/sessionKeys/__tests__/sessionKeys.controller.test.js +44 -0
- package/build/ts/sessionKeys/__tests__/sessionKeys.controller.test.js.map +1 -0
- package/build/ts/sessionKeys/__tests__/sessionKeys.service.test.d.ts +2 -0
- package/build/ts/sessionKeys/__tests__/sessionKeys.service.test.d.ts.map +1 -0
- package/build/ts/sessionKeys/__tests__/sessionKeys.service.test.js +61 -0
- package/build/ts/sessionKeys/__tests__/sessionKeys.service.test.js.map +1 -0
- package/build/ts/sessionKeys/__tests__/utils.d.ts +25 -0
- package/build/ts/sessionKeys/__tests__/utils.d.ts.map +1 -0
- package/build/ts/sessionKeys/__tests__/utils.js +64 -0
- package/build/ts/sessionKeys/__tests__/utils.js.map +1 -0
- package/build/ts/sessionKeys/dto.d.ts +11 -0
- package/build/ts/sessionKeys/dto.d.ts.map +1 -0
- package/build/ts/sessionKeys/dto.js +29 -0
- package/build/ts/sessionKeys/dto.js.map +1 -0
- package/build/ts/sessionKeys/provider/KernelEIP1193Provider.d.ts +53 -0
- package/build/ts/sessionKeys/provider/KernelEIP1193Provider.d.ts.map +1 -0
- package/build/ts/sessionKeys/provider/KernelEIP1193Provider.js +105 -0
- package/build/ts/sessionKeys/provider/KernelEIP1193Provider.js.map +1 -0
- package/build/ts/sessionKeys/sessionKeys.controller.d.ts +26 -0
- package/build/ts/sessionKeys/sessionKeys.controller.d.ts.map +1 -0
- package/build/ts/sessionKeys/sessionKeys.controller.js +74 -0
- package/build/ts/sessionKeys/sessionKeys.controller.js.map +1 -0
- package/build/ts/sessionKeys/sessionKeys.module.d.ts +3 -0
- package/build/ts/sessionKeys/sessionKeys.module.d.ts.map +1 -0
- package/build/ts/sessionKeys/sessionKeys.module.js +23 -0
- package/build/ts/sessionKeys/sessionKeys.module.js.map +1 -0
- package/build/ts/sessionKeys/sessionKeys.service.d.ts +61 -0
- package/build/ts/sessionKeys/sessionKeys.service.d.ts.map +1 -0
- package/build/ts/sessionKeys/sessionKeys.service.js +122 -0
- package/build/ts/sessionKeys/sessionKeys.service.js.map +1 -0
- package/build/ts/sessionKeys/types.d.ts +11 -0
- package/build/ts/sessionKeys/types.d.ts.map +1 -0
- package/build/ts/sessionKeys/types.js +2 -0
- package/build/ts/sessionKeys/types.js.map +1 -0
- package/build/ts/subgraph/__tests__/subgraph.controller.test.d.ts +2 -0
- package/build/ts/subgraph/__tests__/subgraph.controller.test.d.ts.map +1 -0
- package/build/ts/subgraph/__tests__/subgraph.controller.test.js +50 -0
- package/build/ts/subgraph/__tests__/subgraph.controller.test.js.map +1 -0
- package/build/ts/subgraph/__tests__/subgraph.gateway.test.d.ts +2 -0
- package/build/ts/subgraph/__tests__/subgraph.gateway.test.d.ts.map +1 -0
- package/build/ts/subgraph/__tests__/subgraph.gateway.test.js +83 -0
- package/build/ts/subgraph/__tests__/subgraph.gateway.test.js.map +1 -0
- package/build/ts/subgraph/__tests__/subgraph.service.test.d.ts +2 -0
- package/build/ts/subgraph/__tests__/subgraph.service.test.d.ts.map +1 -0
- package/build/ts/subgraph/__tests__/subgraph.service.test.js +58 -0
- package/build/ts/subgraph/__tests__/subgraph.service.test.js.map +1 -0
- package/build/ts/subgraph/dto.d.ts +27 -0
- package/build/ts/subgraph/dto.d.ts.map +1 -0
- package/build/ts/subgraph/dto.js +83 -0
- package/build/ts/subgraph/dto.js.map +1 -0
- package/build/ts/subgraph/subgraph.controller.d.ts +24 -0
- package/build/ts/subgraph/subgraph.controller.d.ts.map +1 -0
- package/build/ts/subgraph/subgraph.controller.js +66 -0
- package/build/ts/subgraph/subgraph.controller.js.map +1 -0
- package/build/ts/subgraph/subgraph.gateway.d.ts +35 -0
- package/build/ts/subgraph/subgraph.gateway.d.ts.map +1 -0
- package/build/ts/subgraph/subgraph.gateway.js +93 -0
- package/build/ts/subgraph/subgraph.gateway.js.map +1 -0
- package/build/ts/subgraph/subgraph.module.d.ts +3 -0
- package/build/ts/subgraph/subgraph.module.d.ts.map +1 -0
- package/build/ts/subgraph/subgraph.module.js +23 -0
- package/build/ts/subgraph/subgraph.module.js.map +1 -0
- package/build/ts/subgraph/subgraph.service.d.ts +20 -0
- package/build/ts/subgraph/subgraph.service.d.ts.map +1 -0
- package/build/ts/subgraph/subgraph.service.js +106 -0
- package/build/ts/subgraph/subgraph.service.js.map +1 -0
- package/build/ts/subgraph/types.d.ts +93 -0
- package/build/ts/subgraph/types.d.ts.map +1 -0
- package/build/ts/subgraph/types.js +24 -0
- package/build/ts/subgraph/types.js.map +1 -0
- package/build/tsconfig.build.tsbuildinfo +1 -0
- package/package.json +125 -0
|
@@ -0,0 +1,54 @@
|
|
|
1
|
+
import { type IGenerateProofsOptions } from "@maci-protocol/sdk";
|
|
2
|
+
import { IProof, ITallyData } from "@maci-protocol/sdk";
|
|
3
|
+
import type { IGenerateArgs, IGenerateData, IMergeArgs, ISubmitProofsArgs } from "./types";
|
|
4
|
+
import { CryptoService } from "../crypto/crypto.service";
|
|
5
|
+
import { FileService } from "../file/file.service";
|
|
6
|
+
import { SessionKeysService } from "../sessionKeys/sessionKeys.service";
|
|
7
|
+
/**
|
|
8
|
+
* ProofGeneratorService is responsible for generating message processing and tally proofs.
|
|
9
|
+
*/
|
|
10
|
+
export declare class ProofGeneratorService {
|
|
11
|
+
private readonly cryptoService;
|
|
12
|
+
private readonly fileService;
|
|
13
|
+
private readonly sessionKeysService;
|
|
14
|
+
/**
|
|
15
|
+
* Deployment helper
|
|
16
|
+
*/
|
|
17
|
+
private readonly deployment;
|
|
18
|
+
/**
|
|
19
|
+
* Logger
|
|
20
|
+
*/
|
|
21
|
+
private readonly logger;
|
|
22
|
+
/**
|
|
23
|
+
* Proof generator initialization
|
|
24
|
+
*/
|
|
25
|
+
constructor(cryptoService: CryptoService, fileService: FileService, sessionKeysService: SessionKeysService);
|
|
26
|
+
/**
|
|
27
|
+
* Read and parse proofs
|
|
28
|
+
* @param folder - folder path to read proofs from
|
|
29
|
+
* @param type - type of proofs to read (tally or process)
|
|
30
|
+
* @returns proofs
|
|
31
|
+
*/
|
|
32
|
+
readProofs(folder: string, type: "tally" | "process"): Promise<IProof[]>;
|
|
33
|
+
/**
|
|
34
|
+
* Generate proofs for message processing and tally
|
|
35
|
+
*
|
|
36
|
+
* @param args - generate proofs arguments
|
|
37
|
+
* @returns - generated proofs for message processing and tally
|
|
38
|
+
*/
|
|
39
|
+
generate({ approval, sessionKeyAddress, chain, poll, maciContractAddress, mode, encryptedCoordinatorPrivateKey, startBlock, endBlock, blocksPerBatch, }: IGenerateArgs, options?: IGenerateProofsOptions): Promise<IGenerateData>;
|
|
40
|
+
/**
|
|
41
|
+
* Merge state and message trees
|
|
42
|
+
*
|
|
43
|
+
* @param args - merge arguments
|
|
44
|
+
* @returns whether the proofs were successfully merged
|
|
45
|
+
*/
|
|
46
|
+
merge({ maciContractAddress, pollId, approval, sessionKeyAddress, chain }: IMergeArgs): Promise<boolean>;
|
|
47
|
+
/**
|
|
48
|
+
* Submit proofs on-chain
|
|
49
|
+
*
|
|
50
|
+
* @param args - submit proofs on-chain arguments
|
|
51
|
+
*/
|
|
52
|
+
submit({ maciContractAddress, pollId, sessionKeyAddress, approval, chain, }: ISubmitProofsArgs): Promise<ITallyData>;
|
|
53
|
+
}
|
|
54
|
+
//# sourceMappingURL=proof.service.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"proof.service.d.ts","sourceRoot":"","sources":["../../../ts/proof/proof.service.ts"],"names":[],"mappings":"AACA,OAAO,EAIL,KAAK,sBAAsB,EAI5B,MAAM,oBAAoB,CAAC;AAC5B,OAAO,EAAE,MAAM,EAAE,UAAU,EAAgC,MAAM,oBAAoB,CAAC;AAOtF,OAAO,KAAK,EAAE,aAAa,EAAE,aAAa,EAAE,UAAU,EAAE,iBAAiB,EAAE,MAAM,SAAS,CAAC;AAG3F,OAAO,EAAE,aAAa,EAAE,MAAM,0BAA0B,CAAC;AACzD,OAAO,EAAE,WAAW,EAAE,MAAM,sBAAsB,CAAC;AACnD,OAAO,EAAE,kBAAkB,EAAE,MAAM,oCAAoC,CAAC;AAExE;;GAEG;AACH,qBACa,qBAAqB;IAe9B,OAAO,CAAC,QAAQ,CAAC,aAAa;IAC9B,OAAO,CAAC,QAAQ,CAAC,WAAW;IAC5B,OAAO,CAAC,QAAQ,CAAC,kBAAkB;IAhBrC;;OAEG;IACH,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAa;IAExC;;OAEG;IACH,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAS;IAEhC;;OAEG;gBAEgB,aAAa,EAAE,aAAa,EAC5B,WAAW,EAAE,WAAW,EACxB,kBAAkB,EAAE,kBAAkB;IAOzD;;;;;OAKG;IACG,UAAU,CAAC,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,OAAO,GAAG,SAAS,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC;IAY9E;;;;;OAKG;IACG,QAAQ,CACZ,EACE,QAAQ,EACR,iBAAiB,EACjB,KAAK,EACL,IAAI,EACJ,mBAAmB,EACnB,IAAI,EACJ,8BAA8B,EAC9B,UAAU,EACV,QAAQ,EACR,cAAc,GACf,EAAE,aAAa,EAChB,OAAO,CAAC,EAAE,sBAAsB,GAC/B,OAAO,CAAC,aAAa,CAAC;IAuEzB;;;;;OAKG;IACG,KAAK,CAAC,EAAE,mBAAmB,EAAE,MAAM,EAAE,QAAQ,EAAE,iBAAiB,EAAE,KAAK,EAAE,EAAE,UAAU,GAAG,OAAO,CAAC,OAAO,CAAC;IAY9G;;;;OAIG;IACG,MAAM,CAAC,EACX,mBAAmB,EACnB,MAAM,EACN,iBAAiB,EACjB,QAAQ,EACR,KAAK,GACN,EAAE,iBAAiB,GAAG,OAAO,CAAC,UAAU,CAAC;CAiB3C"}
|
|
@@ -0,0 +1,166 @@
|
|
|
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 ProofGeneratorService_1;
|
|
11
|
+
import { Keypair, PrivateKey, PublicKey } from "@maci-protocol/domainobjs";
|
|
12
|
+
import { Deployment, EContracts, getPoll, mergeSignups, EMode, } from "@maci-protocol/sdk";
|
|
13
|
+
import { generateProofs, proveOnChain } from "@maci-protocol/sdk";
|
|
14
|
+
import { Logger, Injectable } from "@nestjs/common";
|
|
15
|
+
import hre from "hardhat";
|
|
16
|
+
import fs from "fs";
|
|
17
|
+
import path from "path";
|
|
18
|
+
import { ErrorCodes } from "../common";
|
|
19
|
+
import { CryptoService } from "../crypto/crypto.service";
|
|
20
|
+
import { FileService } from "../file/file.service";
|
|
21
|
+
import { SessionKeysService } from "../sessionKeys/sessionKeys.service";
|
|
22
|
+
/**
|
|
23
|
+
* ProofGeneratorService is responsible for generating message processing and tally proofs.
|
|
24
|
+
*/
|
|
25
|
+
let ProofGeneratorService = ProofGeneratorService_1 = class ProofGeneratorService {
|
|
26
|
+
cryptoService;
|
|
27
|
+
fileService;
|
|
28
|
+
sessionKeysService;
|
|
29
|
+
/**
|
|
30
|
+
* Deployment helper
|
|
31
|
+
*/
|
|
32
|
+
deployment;
|
|
33
|
+
/**
|
|
34
|
+
* Logger
|
|
35
|
+
*/
|
|
36
|
+
logger;
|
|
37
|
+
/**
|
|
38
|
+
* Proof generator initialization
|
|
39
|
+
*/
|
|
40
|
+
constructor(cryptoService, fileService, sessionKeysService) {
|
|
41
|
+
this.cryptoService = cryptoService;
|
|
42
|
+
this.fileService = fileService;
|
|
43
|
+
this.sessionKeysService = sessionKeysService;
|
|
44
|
+
this.deployment = Deployment.getInstance({ hre });
|
|
45
|
+
this.deployment.setHre(hre);
|
|
46
|
+
this.logger = new Logger(ProofGeneratorService_1.name);
|
|
47
|
+
}
|
|
48
|
+
/**
|
|
49
|
+
* Read and parse proofs
|
|
50
|
+
* @param folder - folder path to read proofs from
|
|
51
|
+
* @param type - type of proofs to read (tally or process)
|
|
52
|
+
* @returns proofs
|
|
53
|
+
*/
|
|
54
|
+
async readProofs(folder, type) {
|
|
55
|
+
const files = await fs.promises.readdir(folder);
|
|
56
|
+
return Promise.all(files
|
|
57
|
+
.filter((f) => f.startsWith(`${type}_`) && f.endsWith(".json"))
|
|
58
|
+
.sort()
|
|
59
|
+
.map(async (file) => fs.promises.readFile(`${folder}/${file}`, "utf8").then((result) => JSON.parse(result))));
|
|
60
|
+
}
|
|
61
|
+
/**
|
|
62
|
+
* Generate proofs for message processing and tally
|
|
63
|
+
*
|
|
64
|
+
* @param args - generate proofs arguments
|
|
65
|
+
* @returns - generated proofs for message processing and tally
|
|
66
|
+
*/
|
|
67
|
+
async generate({ approval, sessionKeyAddress, chain, poll, maciContractAddress, mode, encryptedCoordinatorPrivateKey, startBlock, endBlock, blocksPerBatch, }, options) {
|
|
68
|
+
try {
|
|
69
|
+
const signer = await this.sessionKeysService.getCoordinatorSigner(chain, sessionKeyAddress, approval);
|
|
70
|
+
const pollData = await getPoll({
|
|
71
|
+
maciAddress: maciContractAddress,
|
|
72
|
+
pollId: poll,
|
|
73
|
+
signer,
|
|
74
|
+
});
|
|
75
|
+
const pollContract = await this.deployment.getContract({
|
|
76
|
+
name: EContracts.Poll,
|
|
77
|
+
address: pollData.address,
|
|
78
|
+
});
|
|
79
|
+
const coordinatorPublicKey = await pollContract.coordinatorPublicKey();
|
|
80
|
+
const { privateKey } = await this.fileService.getPrivateKey();
|
|
81
|
+
const maciPrivateKey = PrivateKey.deserialize(this.cryptoService.decrypt(privateKey, encryptedCoordinatorPrivateKey));
|
|
82
|
+
const coordinatorKeypair = new Keypair(maciPrivateKey);
|
|
83
|
+
const publicKey = new PublicKey([
|
|
84
|
+
BigInt(coordinatorPublicKey.x.toString()),
|
|
85
|
+
BigInt(coordinatorPublicKey.y.toString()),
|
|
86
|
+
]);
|
|
87
|
+
if (!coordinatorKeypair.publicKey.equals(publicKey)) {
|
|
88
|
+
this.logger.error(`Error: ${ErrorCodes.PRIVATE_KEY_MISMATCH}, wrong private key`);
|
|
89
|
+
throw new Error(ErrorCodes.PRIVATE_KEY_MISMATCH.toString());
|
|
90
|
+
}
|
|
91
|
+
// There are only QV and Non-QV modes
|
|
92
|
+
const tally = this.fileService.getZkeyFilePaths(process.env.COORDINATOR_TALLY_ZKEY_NAME, mode === EMode.QV ? mode : EMode.NON_QV);
|
|
93
|
+
const messageProcessor = this.fileService.getZkeyFilePaths(process.env.COORDINATOR_MESSAGE_PROCESS_ZKEY_NAME, mode);
|
|
94
|
+
const { processProofs, tallyProofs, tallyData } = await generateProofs({
|
|
95
|
+
outputDir: path.resolve("./proofs"),
|
|
96
|
+
coordinatorPrivateKey: maciPrivateKey.serialize(),
|
|
97
|
+
signer,
|
|
98
|
+
maciAddress: maciContractAddress,
|
|
99
|
+
pollId: BigInt(poll),
|
|
100
|
+
startBlock,
|
|
101
|
+
endBlock,
|
|
102
|
+
blocksPerBatch,
|
|
103
|
+
rapidsnark: process.env.COORDINATOR_RAPIDSNARK_EXE,
|
|
104
|
+
mode,
|
|
105
|
+
tallyZkey: tally.zkey,
|
|
106
|
+
tallyWitgen: tally.witgen,
|
|
107
|
+
tallyWasm: tally.wasm,
|
|
108
|
+
processZkey: messageProcessor.zkey,
|
|
109
|
+
processWitgen: messageProcessor.witgen,
|
|
110
|
+
processWasm: messageProcessor.wasm,
|
|
111
|
+
tallyFile: path.resolve("./tally.json"),
|
|
112
|
+
});
|
|
113
|
+
return {
|
|
114
|
+
processProofs,
|
|
115
|
+
tallyProofs,
|
|
116
|
+
tallyData,
|
|
117
|
+
};
|
|
118
|
+
}
|
|
119
|
+
catch (error) {
|
|
120
|
+
options?.onFail?.(error);
|
|
121
|
+
throw error;
|
|
122
|
+
}
|
|
123
|
+
}
|
|
124
|
+
/**
|
|
125
|
+
* Merge state and message trees
|
|
126
|
+
*
|
|
127
|
+
* @param args - merge arguments
|
|
128
|
+
* @returns whether the proofs were successfully merged
|
|
129
|
+
*/
|
|
130
|
+
async merge({ maciContractAddress, pollId, approval, sessionKeyAddress, chain }) {
|
|
131
|
+
const signer = await this.sessionKeysService.getCoordinatorSigner(chain, sessionKeyAddress, approval);
|
|
132
|
+
await mergeSignups({
|
|
133
|
+
maciAddress: maciContractAddress,
|
|
134
|
+
pollId: BigInt(pollId),
|
|
135
|
+
signer,
|
|
136
|
+
});
|
|
137
|
+
return true;
|
|
138
|
+
}
|
|
139
|
+
/**
|
|
140
|
+
* Submit proofs on-chain
|
|
141
|
+
*
|
|
142
|
+
* @param args - submit proofs on-chain arguments
|
|
143
|
+
*/
|
|
144
|
+
async submit({ maciContractAddress, pollId, sessionKeyAddress, approval, chain, }) {
|
|
145
|
+
const signer = await this.sessionKeysService.getCoordinatorSigner(chain, sessionKeyAddress, approval);
|
|
146
|
+
const tallyData = await proveOnChain({
|
|
147
|
+
pollId: BigInt(pollId),
|
|
148
|
+
maciAddress: maciContractAddress,
|
|
149
|
+
proofDir: "./proofs",
|
|
150
|
+
tallyFile: "./tally.json",
|
|
151
|
+
signer,
|
|
152
|
+
});
|
|
153
|
+
if (!tallyData) {
|
|
154
|
+
throw new Error("Tally data is undefined");
|
|
155
|
+
}
|
|
156
|
+
return tallyData;
|
|
157
|
+
}
|
|
158
|
+
};
|
|
159
|
+
ProofGeneratorService = ProofGeneratorService_1 = __decorate([
|
|
160
|
+
Injectable(),
|
|
161
|
+
__metadata("design:paramtypes", [CryptoService,
|
|
162
|
+
FileService,
|
|
163
|
+
SessionKeysService])
|
|
164
|
+
], ProofGeneratorService);
|
|
165
|
+
export { ProofGeneratorService };
|
|
166
|
+
//# sourceMappingURL=proof.service.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"proof.service.js","sourceRoot":"","sources":["../../../ts/proof/proof.service.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,148 @@
|
|
|
1
|
+
import type { ITallyData, IProof, EMode } from "@maci-protocol/sdk";
|
|
2
|
+
import type { Hex } from "viem";
|
|
3
|
+
import { ESupportedNetworks } from "../common";
|
|
4
|
+
/**
|
|
5
|
+
* WS events for proof generation
|
|
6
|
+
*/
|
|
7
|
+
export declare enum EProofGenerationEvents {
|
|
8
|
+
START = "start-generation",
|
|
9
|
+
PROGRESS = "progress-generation",
|
|
10
|
+
FINISH = "finish-generation",
|
|
11
|
+
ERROR = "exception"
|
|
12
|
+
}
|
|
13
|
+
export interface IReadProofsResults {
|
|
14
|
+
/**
|
|
15
|
+
* Process proofs list
|
|
16
|
+
*/
|
|
17
|
+
process: IProof[];
|
|
18
|
+
/**
|
|
19
|
+
* Tally proofs list
|
|
20
|
+
*/
|
|
21
|
+
tally: IProof[];
|
|
22
|
+
}
|
|
23
|
+
/**
|
|
24
|
+
* Interface that represents generate proofs arguments
|
|
25
|
+
*/
|
|
26
|
+
export interface IGenerateArgs {
|
|
27
|
+
/**
|
|
28
|
+
* Approval for the session key
|
|
29
|
+
*/
|
|
30
|
+
approval?: string;
|
|
31
|
+
/**
|
|
32
|
+
* Session key address
|
|
33
|
+
*/
|
|
34
|
+
sessionKeyAddress?: Hex;
|
|
35
|
+
/**
|
|
36
|
+
* Chain
|
|
37
|
+
*/
|
|
38
|
+
chain: ESupportedNetworks;
|
|
39
|
+
/**
|
|
40
|
+
* Poll id
|
|
41
|
+
*/
|
|
42
|
+
poll: number;
|
|
43
|
+
/**
|
|
44
|
+
* Maci contract address
|
|
45
|
+
*/
|
|
46
|
+
maciContractAddress: string;
|
|
47
|
+
/**
|
|
48
|
+
* Whether to use Qv or NonQv
|
|
49
|
+
*/
|
|
50
|
+
mode: EMode;
|
|
51
|
+
/**
|
|
52
|
+
* Encrypted coordinator private key with RSA public key (see .env.example)
|
|
53
|
+
*/
|
|
54
|
+
encryptedCoordinatorPrivateKey: string;
|
|
55
|
+
/**
|
|
56
|
+
* Start block for event processing
|
|
57
|
+
*/
|
|
58
|
+
startBlock?: number;
|
|
59
|
+
/**
|
|
60
|
+
* End block for event processing
|
|
61
|
+
*/
|
|
62
|
+
endBlock?: number;
|
|
63
|
+
/**
|
|
64
|
+
* Blocks per batch for event processing
|
|
65
|
+
*/
|
|
66
|
+
blocksPerBatch?: number;
|
|
67
|
+
}
|
|
68
|
+
/**
|
|
69
|
+
* Interface that represents generated proofs data
|
|
70
|
+
*/
|
|
71
|
+
export interface IGenerateData {
|
|
72
|
+
/**
|
|
73
|
+
* Message processing proofs
|
|
74
|
+
*/
|
|
75
|
+
processProofs: IProof[];
|
|
76
|
+
/**
|
|
77
|
+
* Tally proofs
|
|
78
|
+
*/
|
|
79
|
+
tallyProofs: IProof[];
|
|
80
|
+
/**
|
|
81
|
+
* TallyData
|
|
82
|
+
*/
|
|
83
|
+
tallyData: ITallyData;
|
|
84
|
+
}
|
|
85
|
+
/**
|
|
86
|
+
* Interface that represents zkey filepaths
|
|
87
|
+
*/
|
|
88
|
+
export interface IGetZkeyFilesData {
|
|
89
|
+
/**
|
|
90
|
+
* Zkey filepath
|
|
91
|
+
*/
|
|
92
|
+
zkey: string;
|
|
93
|
+
/**
|
|
94
|
+
* Wasm filepath
|
|
95
|
+
*/
|
|
96
|
+
wasm: string;
|
|
97
|
+
}
|
|
98
|
+
/**
|
|
99
|
+
* Merge arguments
|
|
100
|
+
*/
|
|
101
|
+
export interface IMergeArgs {
|
|
102
|
+
/**
|
|
103
|
+
* MACI contract address
|
|
104
|
+
*/
|
|
105
|
+
maciContractAddress: string;
|
|
106
|
+
/**
|
|
107
|
+
* Poll ID
|
|
108
|
+
*/
|
|
109
|
+
pollId: number;
|
|
110
|
+
/**
|
|
111
|
+
* Approval for the session key
|
|
112
|
+
*/
|
|
113
|
+
approval?: string;
|
|
114
|
+
/**
|
|
115
|
+
* Session key address
|
|
116
|
+
*/
|
|
117
|
+
sessionKeyAddress?: Hex;
|
|
118
|
+
/**
|
|
119
|
+
* Chain
|
|
120
|
+
*/
|
|
121
|
+
chain: ESupportedNetworks;
|
|
122
|
+
}
|
|
123
|
+
/**
|
|
124
|
+
* Submit proofs on-chain arguments
|
|
125
|
+
*/
|
|
126
|
+
export interface ISubmitProofsArgs {
|
|
127
|
+
/**
|
|
128
|
+
* MACI contract address
|
|
129
|
+
*/
|
|
130
|
+
maciContractAddress: string;
|
|
131
|
+
/**
|
|
132
|
+
* Poll ID
|
|
133
|
+
*/
|
|
134
|
+
pollId: number;
|
|
135
|
+
/**
|
|
136
|
+
* Approval for the session key
|
|
137
|
+
*/
|
|
138
|
+
approval?: string;
|
|
139
|
+
/**
|
|
140
|
+
* Session key address
|
|
141
|
+
*/
|
|
142
|
+
sessionKeyAddress?: Hex;
|
|
143
|
+
/**
|
|
144
|
+
* Chain
|
|
145
|
+
*/
|
|
146
|
+
chain: ESupportedNetworks;
|
|
147
|
+
}
|
|
148
|
+
//# sourceMappingURL=types.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../ts/proof/types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,oBAAoB,CAAC;AACpE,OAAO,KAAK,EAAE,GAAG,EAAE,MAAM,MAAM,CAAC;AAEhC,OAAO,EAAE,kBAAkB,EAAE,MAAM,WAAW,CAAC;AAE/C;;GAEG;AACH,oBAAY,sBAAsB;IAChC,KAAK,qBAAqB;IAC1B,QAAQ,wBAAwB;IAChC,MAAM,sBAAsB;IAC5B,KAAK,cAAc;CACpB;AAKD,MAAM,WAAW,kBAAkB;IACjC;;OAEG;IACH,OAAO,EAAE,MAAM,EAAE,CAAC;IAElB;;OAEG;IACH,KAAK,EAAE,MAAM,EAAE,CAAC;CACjB;AAED;;GAEG;AACH,MAAM,WAAW,aAAa;IAC5B;;OAEG;IACH,QAAQ,CAAC,EAAE,MAAM,CAAC;IAElB;;OAEG;IACH,iBAAiB,CAAC,EAAE,GAAG,CAAC;IAExB;;OAEG;IACH,KAAK,EAAE,kBAAkB,CAAC;IAE1B;;OAEG;IACH,IAAI,EAAE,MAAM,CAAC;IAEb;;OAEG;IACH,mBAAmB,EAAE,MAAM,CAAC;IAE5B;;OAEG;IACH,IAAI,EAAE,KAAK,CAAC;IAEZ;;OAEG;IACH,8BAA8B,EAAE,MAAM,CAAC;IAEvC;;OAEG;IACH,UAAU,CAAC,EAAE,MAAM,CAAC;IAEpB;;OAEG;IACH,QAAQ,CAAC,EAAE,MAAM,CAAC;IAElB;;OAEG;IACH,cAAc,CAAC,EAAE,MAAM,CAAC;CACzB;AAED;;GAEG;AACH,MAAM,WAAW,aAAa;IAC5B;;OAEG;IACH,aAAa,EAAE,MAAM,EAAE,CAAC;IAExB;;OAEG;IACH,WAAW,EAAE,MAAM,EAAE,CAAC;IAEtB;;OAEG;IACH,SAAS,EAAE,UAAU,CAAC;CACvB;AAED;;GAEG;AACH,MAAM,WAAW,iBAAiB;IAChC;;OAEG;IACH,IAAI,EAAE,MAAM,CAAC;IAEb;;OAEG;IACH,IAAI,EAAE,MAAM,CAAC;CACd;AAED;;GAEG;AACH,MAAM,WAAW,UAAU;IACzB;;OAEG;IACH,mBAAmB,EAAE,MAAM,CAAC;IAE5B;;OAEG;IACH,MAAM,EAAE,MAAM,CAAC;IAEf;;OAEG;IACH,QAAQ,CAAC,EAAE,MAAM,CAAC;IAElB;;OAEG;IACH,iBAAiB,CAAC,EAAE,GAAG,CAAC;IAExB;;OAEG;IACH,KAAK,EAAE,kBAAkB,CAAC;CAC3B;AAED;;GAEG;AACH,MAAM,WAAW,iBAAiB;IAChC;;OAEG;IACH,mBAAmB,EAAE,MAAM,CAAC;IAE5B;;OAEG;IACH,MAAM,EAAE,MAAM,CAAC;IAEf;;OAEG;IACH,QAAQ,CAAC,EAAE,MAAM,CAAC;IAElB;;OAEG;IACH,iBAAiB,CAAC,EAAE,GAAG,CAAC;IAExB;;OAEG;IACH,KAAK,EAAE,kBAAkB,CAAC;CAC3B"}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* WS events for proof generation
|
|
3
|
+
*/
|
|
4
|
+
export var EProofGenerationEvents;
|
|
5
|
+
(function (EProofGenerationEvents) {
|
|
6
|
+
EProofGenerationEvents["START"] = "start-generation";
|
|
7
|
+
EProofGenerationEvents["PROGRESS"] = "progress-generation";
|
|
8
|
+
EProofGenerationEvents["FINISH"] = "finish-generation";
|
|
9
|
+
EProofGenerationEvents["ERROR"] = "exception";
|
|
10
|
+
})(EProofGenerationEvents || (EProofGenerationEvents = {}));
|
|
11
|
+
//# sourceMappingURL=types.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.js","sourceRoot":"","sources":["../../../ts/proof/types.ts"],"names":[],"mappings":"AAKA;;GAEG;AACH,MAAM,CAAN,IAAY,sBAKX;AALD,WAAY,sBAAsB;IAChC,oDAA0B,CAAA;IAC1B,0DAAgC,CAAA;IAChC,sDAA4B,CAAA;IAC5B,6CAAmB,CAAA;AACrB,CAAC,EALW,sBAAsB,KAAtB,sBAAsB,QAKjC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"sessionKeys.controller.test.d.ts","sourceRoot":"","sources":["../../../../ts/sessionKeys/__tests__/sessionKeys.controller.test.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
import { Test } from "@nestjs/testing";
|
|
2
|
+
import { zeroAddress } from "viem";
|
|
3
|
+
import { SessionKeysController } from "../sessionKeys.controller";
|
|
4
|
+
import { SessionKeysService } from "../sessionKeys.service";
|
|
5
|
+
describe("SessionKeysController", () => {
|
|
6
|
+
let sessionKeysController;
|
|
7
|
+
const mockSessionKeysService = {
|
|
8
|
+
generateSessionKey: jest.fn(),
|
|
9
|
+
deactivateSessionKey: jest.fn(),
|
|
10
|
+
};
|
|
11
|
+
const defaultGenerateSessionKeyReturn = {
|
|
12
|
+
sessionKeyAddress: zeroAddress,
|
|
13
|
+
};
|
|
14
|
+
beforeEach(async () => {
|
|
15
|
+
const app = await Test.createTestingModule({
|
|
16
|
+
controllers: [SessionKeysController],
|
|
17
|
+
})
|
|
18
|
+
.useMocker((token) => {
|
|
19
|
+
if (token === SessionKeysService) {
|
|
20
|
+
mockSessionKeysService.generateSessionKey.mockResolvedValue(defaultGenerateSessionKeyReturn);
|
|
21
|
+
return mockSessionKeysService;
|
|
22
|
+
}
|
|
23
|
+
return jest.fn();
|
|
24
|
+
})
|
|
25
|
+
.compile();
|
|
26
|
+
sessionKeysController = app.get(SessionKeysController);
|
|
27
|
+
});
|
|
28
|
+
afterEach(() => {
|
|
29
|
+
jest.clearAllMocks();
|
|
30
|
+
});
|
|
31
|
+
describe("v1/session-keys/generate", () => {
|
|
32
|
+
test("should return a session key address", () => {
|
|
33
|
+
const data = sessionKeysController.generateSessionKey();
|
|
34
|
+
expect(data).toStrictEqual(defaultGenerateSessionKeyReturn);
|
|
35
|
+
});
|
|
36
|
+
});
|
|
37
|
+
describe("v1/session-keys/delete", () => {
|
|
38
|
+
test("should delete a session key", () => {
|
|
39
|
+
sessionKeysController.deactivateSessionKey({ sessionKeyAddress: zeroAddress });
|
|
40
|
+
expect(mockSessionKeysService.deactivateSessionKey).toHaveBeenCalledWith(zeroAddress);
|
|
41
|
+
});
|
|
42
|
+
});
|
|
43
|
+
});
|
|
44
|
+
//# sourceMappingURL=sessionKeys.controller.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"sessionKeys.controller.test.js","sourceRoot":"","sources":["../../../../ts/sessionKeys/__tests__/sessionKeys.controller.test.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,MAAM,iBAAiB,CAAC;AACvC,OAAO,EAAE,WAAW,EAAE,MAAM,MAAM,CAAC;AAInC,OAAO,EAAE,qBAAqB,EAAE,MAAM,2BAA2B,CAAC;AAClE,OAAO,EAAE,kBAAkB,EAAE,MAAM,wBAAwB,CAAC;AAE5D,QAAQ,CAAC,uBAAuB,EAAE,GAAG,EAAE;IACrC,IAAI,qBAA4C,CAAC;IAEjD,MAAM,sBAAsB,GAAG;QAC7B,kBAAkB,EAAE,IAAI,CAAC,EAAE,EAAE;QAC7B,oBAAoB,EAAE,IAAI,CAAC,EAAE,EAAE;KAChC,CAAC;IAEF,MAAM,+BAA+B,GAA8B;QACjE,iBAAiB,EAAE,WAAW;KAC/B,CAAC;IAEF,UAAU,CAAC,KAAK,IAAI,EAAE;QACpB,MAAM,GAAG,GAAG,MAAM,IAAI,CAAC,mBAAmB,CAAC;YACzC,WAAW,EAAE,CAAC,qBAAqB,CAAC;SACrC,CAAC;aACC,SAAS,CAAC,CAAC,KAAK,EAAE,EAAE;YACnB,IAAI,KAAK,KAAK,kBAAkB,EAAE,CAAC;gBACjC,sBAAsB,CAAC,kBAAkB,CAAC,iBAAiB,CAAC,+BAA+B,CAAC,CAAC;gBAC7F,OAAO,sBAAsB,CAAC;YAChC,CAAC;YAED,OAAO,IAAI,CAAC,EAAE,EAAE,CAAC;QACnB,CAAC,CAAC;aACD,OAAO,EAAE,CAAC;QAEb,qBAAqB,GAAG,GAAG,CAAC,GAAG,CAAwB,qBAAqB,CAAC,CAAC;IAChF,CAAC,CAAC,CAAC;IAEH,SAAS,CAAC,GAAG,EAAE;QACb,IAAI,CAAC,aAAa,EAAE,CAAC;IACvB,CAAC,CAAC,CAAC;IAEH,QAAQ,CAAC,0BAA0B,EAAE,GAAG,EAAE;QACxC,IAAI,CAAC,qCAAqC,EAAE,GAAG,EAAE;YAC/C,MAAM,IAAI,GAAG,qBAAqB,CAAC,kBAAkB,EAAE,CAAC;YACxD,MAAM,CAAC,IAAI,CAAC,CAAC,aAAa,CAAC,+BAA+B,CAAC,CAAC;QAC9D,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;IAEH,QAAQ,CAAC,wBAAwB,EAAE,GAAG,EAAE;QACtC,IAAI,CAAC,6BAA6B,EAAE,GAAG,EAAE;YACvC,qBAAqB,CAAC,oBAAoB,CAAC,EAAE,iBAAiB,EAAE,WAAW,EAAE,CAAC,CAAC;YAC/E,MAAM,CAAC,sBAAsB,CAAC,oBAAoB,CAAC,CAAC,oBAAoB,CAAC,WAAW,CAAC,CAAC;QACxF,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"sessionKeys.service.test.d.ts","sourceRoot":"","sources":["../../../../ts/sessionKeys/__tests__/sessionKeys.service.test.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,61 @@
|
|
|
1
|
+
import dotenv from "dotenv";
|
|
2
|
+
import { zeroAddress } from "viem";
|
|
3
|
+
import { ErrorCodes, ESupportedNetworks } from "../../common";
|
|
4
|
+
import { FileService } from "../../file/file.service";
|
|
5
|
+
import { SessionKeysService } from "../sessionKeys.service";
|
|
6
|
+
import { generateApproval } from "./utils";
|
|
7
|
+
dotenv.config();
|
|
8
|
+
describe("SessionKeysService", () => {
|
|
9
|
+
const fileService = new FileService();
|
|
10
|
+
let sessionKeysService;
|
|
11
|
+
beforeAll(() => {
|
|
12
|
+
sessionKeysService = new SessionKeysService(fileService);
|
|
13
|
+
});
|
|
14
|
+
describe("generateSessionKey", () => {
|
|
15
|
+
test("should generate and store a session key", async () => {
|
|
16
|
+
const sessionKeyAddress = await sessionKeysService.generateSessionKey();
|
|
17
|
+
expect(sessionKeyAddress).toBeDefined();
|
|
18
|
+
expect(sessionKeyAddress).not.toEqual(zeroAddress);
|
|
19
|
+
const sessionKey = fileService.getSessionKey(sessionKeyAddress.sessionKeyAddress);
|
|
20
|
+
expect(sessionKey).toBeDefined();
|
|
21
|
+
});
|
|
22
|
+
});
|
|
23
|
+
describe("deactivateSessionKey", () => {
|
|
24
|
+
test("should delete a session key", async () => {
|
|
25
|
+
const sessionKeyAddress = await sessionKeysService.generateSessionKey();
|
|
26
|
+
expect(sessionKeyAddress).toBeDefined();
|
|
27
|
+
expect(sessionKeyAddress).not.toEqual(zeroAddress);
|
|
28
|
+
const sessionKey = fileService.getSessionKey(sessionKeyAddress.sessionKeyAddress);
|
|
29
|
+
expect(sessionKey).toBeDefined();
|
|
30
|
+
sessionKeysService.deactivateSessionKey(sessionKeyAddress.sessionKeyAddress);
|
|
31
|
+
const sessionKeyDeleted = fileService.getSessionKey(sessionKeyAddress.sessionKeyAddress);
|
|
32
|
+
expect(sessionKeyDeleted).toBeUndefined();
|
|
33
|
+
});
|
|
34
|
+
});
|
|
35
|
+
describe("generateClientFromSessionKey", () => {
|
|
36
|
+
test("should fail to generate a client with an invalid approval", async () => {
|
|
37
|
+
const sessionKeyAddress = await sessionKeysService.generateSessionKey();
|
|
38
|
+
await expect(sessionKeysService.generateClientFromSessionKey(sessionKeyAddress.sessionKeyAddress, "0xinvalid", ESupportedNetworks.OPTIMISM_SEPOLIA)).rejects.toThrow(ErrorCodes.INVALID_APPROVAL.toString());
|
|
39
|
+
});
|
|
40
|
+
test("should throw when given a non existent session key address", async () => {
|
|
41
|
+
const approval = await generateApproval(zeroAddress);
|
|
42
|
+
await expect(sessionKeysService.generateClientFromSessionKey(zeroAddress, approval, ESupportedNetworks.OPTIMISM_SEPOLIA)).rejects.toThrow(ErrorCodes.SESSION_KEY_NOT_FOUND.toString());
|
|
43
|
+
});
|
|
44
|
+
test("should generate a client from a session key", async () => {
|
|
45
|
+
jest.mock("@zerodev/sdk", () => ({
|
|
46
|
+
...jest.requireActual("@zerodev/sdk"),
|
|
47
|
+
createKernelAccountClient: jest.fn().mockReturnValue({ mockedKernelClient: true }),
|
|
48
|
+
}));
|
|
49
|
+
const mockGenerateClientFromSessionKey = jest.fn().mockResolvedValue({ mockedClient: true });
|
|
50
|
+
jest
|
|
51
|
+
.spyOn(SessionKeysService.prototype, "generateClientFromSessionKey")
|
|
52
|
+
.mockImplementation(mockGenerateClientFromSessionKey);
|
|
53
|
+
const sessionKeyAddress = await sessionKeysService.generateSessionKey();
|
|
54
|
+
const approval = await generateApproval(sessionKeyAddress.sessionKeyAddress);
|
|
55
|
+
const client = await sessionKeysService.generateClientFromSessionKey(sessionKeyAddress.sessionKeyAddress, approval, ESupportedNetworks.OPTIMISM_SEPOLIA);
|
|
56
|
+
expect(mockGenerateClientFromSessionKey).toHaveBeenCalledWith(sessionKeyAddress.sessionKeyAddress, approval, ESupportedNetworks.OPTIMISM_SEPOLIA);
|
|
57
|
+
expect(client).toEqual({ mockedClient: true });
|
|
58
|
+
});
|
|
59
|
+
});
|
|
60
|
+
});
|
|
61
|
+
//# sourceMappingURL=sessionKeys.service.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"sessionKeys.service.test.js","sourceRoot":"","sources":["../../../../ts/sessionKeys/__tests__/sessionKeys.service.test.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
import { type Policy } from "@zerodev/permissions";
|
|
2
|
+
import { CreateKernelAccountReturnType } from "@zerodev/sdk";
|
|
3
|
+
import { type Hex } from "viem";
|
|
4
|
+
export declare const ENTRY_POINT: import("@zerodev/sdk/types").EntryPointType<"0.7">;
|
|
5
|
+
export declare const KERNEL_VERSION: import("@zerodev/sdk/types").KERNEL_V3_VERSION_TYPE;
|
|
6
|
+
/**
|
|
7
|
+
* Generate a timestamp policy
|
|
8
|
+
* @param endTime - The end time of the policy
|
|
9
|
+
* @param start - The start time of the policy
|
|
10
|
+
* @returns The timestamp policy
|
|
11
|
+
*/
|
|
12
|
+
export declare const generateTimestampPolicy: (endTime: number, start?: number) => Policy;
|
|
13
|
+
/**
|
|
14
|
+
* Get smart contract kernel account
|
|
15
|
+
* @param sessionKeyAddress - the session key address
|
|
16
|
+
* @returns - the kernel account
|
|
17
|
+
*/
|
|
18
|
+
export declare const getKernelAccount: (sessionKeyAddress: Hex) => Promise<CreateKernelAccountReturnType>;
|
|
19
|
+
/**
|
|
20
|
+
* Generate an approval for a session key
|
|
21
|
+
* @param sessionKeyAddress - the session key address
|
|
22
|
+
* @returns - the approval
|
|
23
|
+
*/
|
|
24
|
+
export declare const generateApproval: (sessionKeyAddress: Hex) => Promise<string>;
|
|
25
|
+
//# sourceMappingURL=utils.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"utils.d.ts","sourceRoot":"","sources":["../../../../ts/sessionKeys/__tests__/utils.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,KAAK,MAAM,EAAqD,MAAM,sBAAsB,CAAC;AAGtG,OAAO,EAA8C,6BAA6B,EAAE,MAAM,cAAc,CAAC;AAGzG,OAAO,EAAE,KAAK,GAAG,EAAE,MAAM,MAAM,CAAC;AAQhC,eAAO,MAAM,WAAW,oDAAuB,CAAC;AAChD,eAAO,MAAM,cAAc,qDAAc,CAAC;AAE1C;;;;;GAKG;AACH,eAAO,MAAM,uBAAuB,GAAI,SAAS,MAAM,EAAE,QAAQ,MAAM,KAAG,MAItE,CAAC;AAEL;;;;GAIG;AACH,eAAO,MAAM,gBAAgB,GAAU,mBAAmB,GAAG,KAAG,OAAO,CAAC,6BAA6B,CA6BpG,CAAC;AAEF;;;;GAIG;AACH,eAAO,MAAM,gBAAgB,GAAU,mBAAmB,GAAG,KAAG,OAAO,CAAC,MAAM,CAG7E,CAAC"}
|
|
@@ -0,0 +1,64 @@
|
|
|
1
|
+
import { signerToEcdsaValidator } from "@zerodev/ecdsa-validator";
|
|
2
|
+
import { serializePermissionAccount, toPermissionValidator } from "@zerodev/permissions";
|
|
3
|
+
import { toSudoPolicy, toTimestampPolicy } from "@zerodev/permissions/policies";
|
|
4
|
+
import { toECDSASigner } from "@zerodev/permissions/signers";
|
|
5
|
+
import { addressToEmptyAccount, createKernelAccount } from "@zerodev/sdk";
|
|
6
|
+
import { getEntryPoint, KERNEL_V3_1 } from "@zerodev/sdk/constants";
|
|
7
|
+
import dotenv from "dotenv";
|
|
8
|
+
import { privateKeyToAccount } from "viem/accounts";
|
|
9
|
+
import { ESupportedNetworks } from "../../common";
|
|
10
|
+
import { getPublicClient } from "../../common/accountAbstraction";
|
|
11
|
+
dotenv.config();
|
|
12
|
+
export const ENTRY_POINT = getEntryPoint("0.7");
|
|
13
|
+
export const KERNEL_VERSION = KERNEL_V3_1;
|
|
14
|
+
/**
|
|
15
|
+
* Generate a timestamp policy
|
|
16
|
+
* @param endTime - The end time of the policy
|
|
17
|
+
* @param start - The start time of the policy
|
|
18
|
+
* @returns The timestamp policy
|
|
19
|
+
*/
|
|
20
|
+
export const generateTimestampPolicy = (endTime, start) => toTimestampPolicy({
|
|
21
|
+
validAfter: start,
|
|
22
|
+
validUntil: endTime,
|
|
23
|
+
});
|
|
24
|
+
/**
|
|
25
|
+
* Get smart contract kernel account
|
|
26
|
+
* @param sessionKeyAddress - the session key address
|
|
27
|
+
* @returns - the kernel account
|
|
28
|
+
*/
|
|
29
|
+
export const getKernelAccount = async (sessionKeyAddress) => {
|
|
30
|
+
const publicClient = getPublicClient(ESupportedNetworks.OPTIMISM_SEPOLIA);
|
|
31
|
+
const sessionKeySigner = privateKeyToAccount(process.env.TEST_PRIVATE_KEY);
|
|
32
|
+
const ecdsaValidator = await signerToEcdsaValidator(publicClient, {
|
|
33
|
+
signer: sessionKeySigner,
|
|
34
|
+
entryPoint: ENTRY_POINT,
|
|
35
|
+
kernelVersion: KERNEL_VERSION,
|
|
36
|
+
});
|
|
37
|
+
const emptyAccount = addressToEmptyAccount(sessionKeyAddress);
|
|
38
|
+
const emptySessionKeySigner = await toECDSASigner({ signer: emptyAccount });
|
|
39
|
+
const permissionPlugin = await toPermissionValidator(publicClient, {
|
|
40
|
+
entryPoint: ENTRY_POINT,
|
|
41
|
+
kernelVersion: KERNEL_VERSION,
|
|
42
|
+
signer: emptySessionKeySigner,
|
|
43
|
+
policies: [toSudoPolicy({})],
|
|
44
|
+
});
|
|
45
|
+
const sessionKeyAccount = await createKernelAccount(publicClient, {
|
|
46
|
+
entryPoint: ENTRY_POINT,
|
|
47
|
+
kernelVersion: KERNEL_VERSION,
|
|
48
|
+
plugins: {
|
|
49
|
+
sudo: ecdsaValidator,
|
|
50
|
+
regular: permissionPlugin,
|
|
51
|
+
},
|
|
52
|
+
});
|
|
53
|
+
return sessionKeyAccount;
|
|
54
|
+
};
|
|
55
|
+
/**
|
|
56
|
+
* Generate an approval for a session key
|
|
57
|
+
* @param sessionKeyAddress - the session key address
|
|
58
|
+
* @returns - the approval
|
|
59
|
+
*/
|
|
60
|
+
export const generateApproval = async (sessionKeyAddress) => {
|
|
61
|
+
const sessionKeyAccount = await getKernelAccount(sessionKeyAddress);
|
|
62
|
+
return serializePermissionAccount(sessionKeyAccount);
|
|
63
|
+
};
|
|
64
|
+
//# sourceMappingURL=utils.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"utils.js","sourceRoot":"","sources":["../../../../ts/sessionKeys/__tests__/utils.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,sBAAsB,EAAE,MAAM,0BAA0B,CAAC;AAClE,OAAO,EAAe,0BAA0B,EAAE,qBAAqB,EAAE,MAAM,sBAAsB,CAAC;AACtG,OAAO,EAAE,YAAY,EAAE,iBAAiB,EAAE,MAAM,+BAA+B,CAAC;AAChF,OAAO,EAAE,aAAa,EAAE,MAAM,8BAA8B,CAAC;AAC7D,OAAO,EAAE,qBAAqB,EAAE,mBAAmB,EAAiC,MAAM,cAAc,CAAC;AACzG,OAAO,EAAE,aAAa,EAAE,WAAW,EAAE,MAAM,wBAAwB,CAAC;AACpE,OAAO,MAAM,MAAM,QAAQ,CAAC;AAE5B,OAAO,EAAE,mBAAmB,EAAE,MAAM,eAAe,CAAC;AAEpD,OAAO,EAAE,kBAAkB,EAAE,MAAM,cAAc,CAAC;AAClD,OAAO,EAAE,eAAe,EAAE,MAAM,iCAAiC,CAAC;AAElE,MAAM,CAAC,MAAM,EAAE,CAAC;AAEhB,MAAM,CAAC,MAAM,WAAW,GAAG,aAAa,CAAC,KAAK,CAAC,CAAC;AAChD,MAAM,CAAC,MAAM,cAAc,GAAG,WAAW,CAAC;AAE1C;;;;;GAKG;AACH,MAAM,CAAC,MAAM,uBAAuB,GAAG,CAAC,OAAe,EAAE,KAAc,EAAU,EAAE,CACjF,iBAAiB,CAAC;IAChB,UAAU,EAAE,KAAK;IACjB,UAAU,EAAE,OAAO;CACpB,CAAC,CAAC;AAEL;;;;GAIG;AACH,MAAM,CAAC,MAAM,gBAAgB,GAAG,KAAK,EAAE,iBAAsB,EAA0C,EAAE;IACvG,MAAM,YAAY,GAAG,eAAe,CAAC,kBAAkB,CAAC,gBAAgB,CAAC,CAAC;IAE1E,MAAM,gBAAgB,GAAG,mBAAmB,CAAC,OAAO,CAAC,GAAG,CAAC,gBAAwB,CAAC,CAAC;IACnF,MAAM,cAAc,GAAG,MAAM,sBAAsB,CAAC,YAAY,EAAE;QAChE,MAAM,EAAE,gBAAgB;QACxB,UAAU,EAAE,WAAW;QACvB,aAAa,EAAE,cAAc;KAC9B,CAAC,CAAC;IAEH,MAAM,YAAY,GAAG,qBAAqB,CAAC,iBAAiB,CAAC,CAAC;IAC9D,MAAM,qBAAqB,GAAG,MAAM,aAAa,CAAC,EAAE,MAAM,EAAE,YAAY,EAAE,CAAC,CAAC;IAE5E,MAAM,gBAAgB,GAAG,MAAM,qBAAqB,CAAC,YAAY,EAAE;QACjE,UAAU,EAAE,WAAW;QACvB,aAAa,EAAE,cAAc;QAC7B,MAAM,EAAE,qBAAqB;QAC7B,QAAQ,EAAE,CAAC,YAAY,CAAC,EAAE,CAAC,CAAC;KAC7B,CAAC,CAAC;IAEH,MAAM,iBAAiB,GAAG,MAAM,mBAAmB,CAAC,YAAY,EAAE;QAChE,UAAU,EAAE,WAAW;QACvB,aAAa,EAAE,cAAc;QAC7B,OAAO,EAAE;YACP,IAAI,EAAE,cAAc;YACpB,OAAO,EAAE,gBAAgB;SAC1B;KACF,CAAC,CAAC;IACH,OAAO,iBAAiB,CAAC;AAC3B,CAAC,CAAC;AAEF;;;;GAIG;AACH,MAAM,CAAC,MAAM,gBAAgB,GAAG,KAAK,EAAE,iBAAsB,EAAmB,EAAE;IAChF,MAAM,iBAAiB,GAAG,MAAM,gBAAgB,CAAC,iBAAiB,CAAC,CAAC;IACpE,OAAO,0BAA0B,CAAC,iBAAiB,CAAC,CAAC;AACvD,CAAC,CAAC"}
|