@maci-protocol/coordinator 0.0.0-ci.7e1bbc4 → 0.0.0-ci.7faea84
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/README.md +65 -11
- package/build/hardhat.config.cjs +14 -9
- package/build/hardhat.config.cjs.map +1 -1
- package/build/hardhat.config.d.cts +12 -12
- package/build/hardhat.config.d.cts.map +1 -1
- package/build/scripts/generateKeypair.js +2 -2
- package/build/scripts/generateKeypair.js.map +1 -1
- package/build/tests/constants.d.ts +3 -3
- package/build/tests/constants.d.ts.map +1 -1
- package/build/tests/constants.js +5 -3
- package/build/tests/constants.js.map +1 -1
- package/build/tests/e2e.deploy.test.js +47 -65
- package/build/tests/e2e.deploy.test.js.map +1 -1
- package/build/tests/e2e.redis.test.d.ts +2 -0
- package/build/tests/e2e.redis.test.d.ts.map +1 -0
- package/build/tests/e2e.redis.test.js +118 -0
- package/build/tests/e2e.redis.test.js.map +1 -0
- package/build/tests/utils.d.ts +1 -1
- package/build/tests/utils.d.ts.map +1 -1
- package/build/tests/utils.js +5 -3
- package/build/tests/utils.js.map +1 -1
- package/build/ts/app.module.d.ts.map +1 -1
- package/build/ts/app.module.js +6 -0
- package/build/ts/app.module.js.map +1 -1
- package/build/ts/common/__tests__/common.test.js +43 -41
- package/build/ts/common/__tests__/common.test.js.map +1 -1
- package/build/ts/common/accountAbstraction.d.ts +5 -5
- package/build/ts/common/accountAbstraction.d.ts.map +1 -1
- package/build/ts/common/accountAbstraction.js +11 -9
- package/build/ts/common/accountAbstraction.js.map +1 -1
- package/build/ts/common/chain.d.ts +12 -6
- package/build/ts/common/chain.d.ts.map +1 -1
- package/build/ts/common/chain.js +19 -17
- package/build/ts/common/chain.js.map +1 -1
- package/build/ts/common/coordinatorKeypair.d.ts +7 -0
- package/build/ts/common/coordinatorKeypair.d.ts.map +1 -0
- package/build/ts/common/coordinatorKeypair.js +14 -0
- package/build/ts/common/coordinatorKeypair.js.map +1 -0
- package/build/ts/common/errors.d.ts +16 -12
- package/build/ts/common/errors.d.ts.map +1 -1
- package/build/ts/common/errors.js +16 -12
- package/build/ts/common/errors.js.map +1 -1
- package/build/ts/common/http.d.ts +6 -0
- package/build/ts/common/http.d.ts.map +1 -0
- package/build/ts/common/http.js +49 -0
- package/build/ts/common/http.js.map +1 -0
- package/build/ts/common/index.d.ts +1 -1
- package/build/ts/common/index.d.ts.map +1 -1
- package/build/ts/common/index.js +1 -1
- package/build/ts/common/index.js.map +1 -1
- package/build/ts/common/networks.d.ts +2 -21
- package/build/ts/common/networks.d.ts.map +1 -1
- package/build/ts/common/networks.js +39 -48
- package/build/ts/common/networks.js.map +1 -1
- package/build/ts/common/types.d.ts +2 -2
- package/build/ts/common/types.d.ts.map +1 -1
- package/build/ts/deployer/__tests__/deployer.controller.test.js +23 -25
- package/build/ts/deployer/__tests__/deployer.controller.test.js.map +1 -1
- package/build/ts/deployer/__tests__/deployer.service.test.js +184 -80
- package/build/ts/deployer/__tests__/deployer.service.test.js.map +1 -1
- package/build/ts/deployer/__tests__/utils.d.ts +10 -14
- package/build/ts/deployer/__tests__/utils.d.ts.map +1 -1
- package/build/ts/deployer/__tests__/utils.js +15 -24
- package/build/ts/deployer/__tests__/utils.js.map +1 -1
- package/build/ts/deployer/deployer.controller.d.ts.map +1 -1
- package/build/ts/deployer/deployer.controller.js +19 -6
- package/build/ts/deployer/deployer.controller.js.map +1 -1
- package/build/ts/deployer/deployer.service.d.ts +17 -8
- package/build/ts/deployer/deployer.service.d.ts.map +1 -1
- package/build/ts/deployer/deployer.service.js +226 -60
- package/build/ts/deployer/deployer.service.js.map +1 -1
- package/build/ts/deployer/dto.d.ts +3 -3
- package/build/ts/deployer/dto.d.ts.map +1 -1
- package/build/ts/deployer/dto.js +5 -5
- package/build/ts/deployer/dto.js.map +1 -1
- package/build/ts/deployer/types.d.ts +41 -34
- package/build/ts/deployer/types.d.ts.map +1 -1
- package/build/ts/file/__tests__/file.service.test.js +12 -11
- package/build/ts/file/__tests__/file.service.test.js.map +1 -1
- package/build/ts/file/file.service.d.ts +4 -3
- package/build/ts/file/file.service.d.ts.map +1 -1
- package/build/ts/file/file.service.js +16 -10
- package/build/ts/file/file.service.js.map +1 -1
- package/build/ts/file/types.d.ts +2 -2
- package/build/ts/file/types.d.ts.map +1 -1
- package/build/ts/health/__tests__/health.controller.test.d.ts +2 -0
- package/build/ts/health/__tests__/health.controller.test.d.ts.map +1 -0
- package/build/ts/health/__tests__/health.controller.test.js +52 -0
- package/build/ts/health/__tests__/health.controller.test.js.map +1 -0
- package/build/ts/health/__tests__/health.service.test.d.ts +2 -0
- package/build/ts/health/__tests__/health.service.test.d.ts.map +1 -0
- package/build/ts/health/__tests__/health.service.test.js +101 -0
- package/build/ts/health/__tests__/health.service.test.js.map +1 -0
- package/build/ts/health/health.controller.d.ts +16 -0
- package/build/ts/health/health.controller.d.ts.map +1 -0
- package/build/ts/health/health.controller.js +43 -0
- package/build/ts/health/health.controller.js.map +1 -0
- package/build/ts/health/health.module.d.ts +3 -0
- package/build/ts/health/health.module.d.ts.map +1 -0
- package/build/ts/health/health.module.js +22 -0
- package/build/ts/health/health.module.js.map +1 -0
- package/build/ts/health/health.service.d.ts +42 -0
- package/build/ts/health/health.service.d.ts.map +1 -0
- package/build/ts/health/health.service.js +176 -0
- package/build/ts/health/health.service.js.map +1 -0
- package/build/ts/health/types.d.ts +87 -0
- package/build/ts/health/types.d.ts.map +1 -0
- package/build/ts/health/types.js +2 -0
- package/build/ts/health/types.js.map +1 -0
- package/build/ts/jest/__mocks__/@openzeppelin/merkle-tree.d.ts +11 -0
- package/build/ts/jest/__mocks__/@openzeppelin/merkle-tree.d.ts.map +1 -0
- package/build/ts/jest/__mocks__/@openzeppelin/merkle-tree.js +12 -0
- package/build/ts/jest/__mocks__/@openzeppelin/merkle-tree.js.map +1 -0
- package/build/ts/main.js +1 -1
- package/build/ts/proof/__tests__/proof.controller.test.js +6 -7
- package/build/ts/proof/__tests__/proof.controller.test.js.map +1 -1
- package/build/ts/proof/__tests__/proof.gateway.test.js +3 -4
- package/build/ts/proof/__tests__/proof.gateway.test.js.map +1 -1
- package/build/ts/proof/__tests__/proof.service.test.js +28 -74
- package/build/ts/proof/__tests__/proof.service.test.js.map +1 -1
- package/build/ts/proof/dto.d.ts +6 -10
- package/build/ts/proof/dto.d.ts.map +1 -1
- package/build/ts/proof/dto.js +15 -30
- package/build/ts/proof/dto.js.map +1 -1
- package/build/ts/proof/proof.controller.d.ts.map +1 -1
- package/build/ts/proof/proof.controller.js +38 -15
- package/build/ts/proof/proof.controller.js.map +1 -1
- package/build/ts/proof/proof.module.d.ts.map +1 -1
- package/build/ts/proof/proof.module.js +1 -0
- package/build/ts/proof/proof.module.js.map +1 -1
- package/build/ts/proof/proof.service.d.ts +2 -4
- package/build/ts/proof/proof.service.d.ts.map +1 -1
- package/build/ts/proof/proof.service.js +26 -27
- package/build/ts/proof/proof.service.js.map +1 -1
- package/build/ts/proof/types.d.ts +6 -10
- package/build/ts/proof/types.d.ts.map +1 -1
- package/build/ts/proof/types.js.map +1 -1
- package/build/ts/redis/__tests__/redis.service.test.d.ts +2 -0
- package/build/ts/redis/__tests__/redis.service.test.d.ts.map +1 -0
- package/build/ts/redis/__tests__/redis.service.test.js +148 -0
- package/build/ts/redis/__tests__/redis.service.test.js.map +1 -0
- package/build/ts/redis/redis.module.d.ts +3 -0
- package/build/ts/redis/redis.module.d.ts.map +1 -0
- package/build/ts/redis/redis.module.js +18 -0
- package/build/ts/redis/redis.module.js.map +1 -0
- package/build/ts/redis/redis.service.d.ts +53 -0
- package/build/ts/redis/redis.service.d.ts.map +1 -0
- package/build/ts/redis/redis.service.js +99 -0
- package/build/ts/redis/redis.service.js.map +1 -0
- package/build/ts/redis/types.d.ts +66 -0
- package/build/ts/redis/types.d.ts.map +1 -0
- package/build/ts/redis/types.js +2 -0
- package/build/ts/redis/types.js.map +1 -0
- package/build/ts/redis/utils.d.ts +20 -0
- package/build/ts/redis/utils.d.ts.map +1 -0
- package/build/ts/redis/utils.js +27 -0
- package/build/ts/redis/utils.js.map +1 -0
- package/build/ts/scheduler/__tests__/scheduler.controller.test.d.ts +2 -0
- package/build/ts/scheduler/__tests__/scheduler.controller.test.d.ts.map +1 -0
- package/build/ts/scheduler/__tests__/scheduler.controller.test.js +62 -0
- package/build/ts/scheduler/__tests__/scheduler.controller.test.js.map +1 -0
- package/build/ts/scheduler/__tests__/scheduler.service.test.d.ts +2 -0
- package/build/ts/scheduler/__tests__/scheduler.service.test.d.ts.map +1 -0
- package/build/ts/scheduler/__tests__/scheduler.service.test.js +369 -0
- package/build/ts/scheduler/__tests__/scheduler.service.test.js.map +1 -0
- package/build/ts/scheduler/dto.d.ts +41 -0
- package/build/ts/scheduler/dto.d.ts.map +1 -0
- package/build/ts/scheduler/dto.js +115 -0
- package/build/ts/scheduler/dto.js.map +1 -0
- package/build/ts/scheduler/scheduler.controller.d.ts +32 -0
- package/build/ts/scheduler/scheduler.controller.d.ts.map +1 -0
- package/build/ts/scheduler/scheduler.controller.js +118 -0
- package/build/ts/scheduler/scheduler.controller.js.map +1 -0
- package/build/ts/scheduler/scheduler.module.d.ts +3 -0
- package/build/ts/scheduler/scheduler.module.d.ts.map +1 -0
- package/build/ts/scheduler/scheduler.module.js +24 -0
- package/build/ts/scheduler/scheduler.module.js.map +1 -0
- package/build/ts/scheduler/scheduler.service.d.ts +71 -0
- package/build/ts/scheduler/scheduler.service.d.ts.map +1 -0
- package/build/ts/scheduler/scheduler.service.js +297 -0
- package/build/ts/scheduler/scheduler.service.js.map +1 -0
- package/build/ts/scheduler/types.d.ts +65 -0
- package/build/ts/scheduler/types.d.ts.map +1 -0
- package/build/ts/scheduler/types.js +2 -0
- package/build/ts/scheduler/types.js.map +1 -0
- package/build/ts/sessionKeys/__tests__/sessionKeys.controller.test.js +2 -2
- package/build/ts/sessionKeys/__tests__/sessionKeys.controller.test.js.map +1 -1
- package/build/ts/sessionKeys/__tests__/sessionKeys.service.test.js +34 -19
- package/build/ts/sessionKeys/__tests__/sessionKeys.service.test.js.map +1 -1
- package/build/ts/sessionKeys/__tests__/utils.d.ts +1 -1
- package/build/ts/sessionKeys/__tests__/utils.d.ts.map +1 -1
- package/build/ts/sessionKeys/__tests__/utils.js +7 -6
- package/build/ts/sessionKeys/__tests__/utils.js.map +1 -1
- package/build/ts/sessionKeys/provider/KernelEIP1193Provider.d.ts +1 -1
- package/build/ts/sessionKeys/provider/KernelEIP1193Provider.d.ts.map +1 -1
- package/build/ts/sessionKeys/sessionKeys.service.d.ts +4 -3
- package/build/ts/sessionKeys/sessionKeys.service.d.ts.map +1 -1
- package/build/ts/sessionKeys/sessionKeys.service.js +1 -2
- package/build/ts/sessionKeys/sessionKeys.service.js.map +1 -1
- package/build/ts/subgraph/__tests__/subgraph.controller.test.js +3 -3
- package/build/ts/subgraph/__tests__/subgraph.controller.test.js.map +1 -1
- package/build/ts/subgraph/__tests__/subgraph.gateway.test.js +2 -2
- package/build/ts/subgraph/__tests__/subgraph.gateway.test.js.map +1 -1
- package/build/ts/subgraph/__tests__/subgraph.service.test.js +5 -5
- package/build/ts/subgraph/__tests__/subgraph.service.test.js.map +1 -1
- package/build/ts/subgraph/dto.d.ts +2 -2
- package/build/ts/subgraph/dto.d.ts.map +1 -1
- package/build/ts/subgraph/dto.js +3 -3
- package/build/ts/subgraph/dto.js.map +1 -1
- package/build/ts/subgraph/subgraph.controller.d.ts.map +1 -1
- package/build/ts/subgraph/subgraph.controller.js +8 -3
- package/build/ts/subgraph/subgraph.controller.js.map +1 -1
- package/build/ts/subgraph/subgraph.service.d.ts +4 -0
- package/build/ts/subgraph/subgraph.service.d.ts.map +1 -1
- package/build/ts/subgraph/subgraph.service.js +23 -10
- package/build/ts/subgraph/subgraph.service.js.map +1 -1
- package/build/ts/subgraph/types.d.ts +2 -2
- package/build/ts/subgraph/types.d.ts.map +1 -1
- package/build/tsconfig.build.tsbuildinfo +1 -1
- package/package.json +45 -39
- package/build/tests/e2e.aa.test.d.ts +0 -2
- package/build/tests/e2e.aa.test.d.ts.map +0 -1
- package/build/tests/e2e.aa.test.js +0 -106
- package/build/tests/e2e.aa.test.js.map +0 -1
|
@@ -8,22 +8,21 @@ var __metadata = (this && this.__metadata) || function (k, v) {
|
|
|
8
8
|
if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
|
|
9
9
|
};
|
|
10
10
|
var ProofGeneratorService_1;
|
|
11
|
-
import {
|
|
12
|
-
import { Deployment, EContracts, getPoll, mergeSignups, } from "@maci-protocol/sdk";
|
|
11
|
+
import { PublicKey } from "@maci-protocol/domainobjs";
|
|
12
|
+
import { Deployment, EContracts, getPoll, mergeSignups, EMode, } from "@maci-protocol/sdk";
|
|
13
13
|
import { generateProofs, proveOnChain } from "@maci-protocol/sdk";
|
|
14
14
|
import { Logger, Injectable } from "@nestjs/common";
|
|
15
15
|
import hre from "hardhat";
|
|
16
16
|
import fs from "fs";
|
|
17
17
|
import path from "path";
|
|
18
18
|
import { ErrorCodes } from "../common";
|
|
19
|
-
import {
|
|
19
|
+
import { getCoordinatorKeypair } from "../common/coordinatorKeypair";
|
|
20
20
|
import { FileService } from "../file/file.service";
|
|
21
21
|
import { SessionKeysService } from "../sessionKeys/sessionKeys.service";
|
|
22
22
|
/**
|
|
23
23
|
* ProofGeneratorService is responsible for generating message processing and tally proofs.
|
|
24
24
|
*/
|
|
25
25
|
let ProofGeneratorService = ProofGeneratorService_1 = class ProofGeneratorService {
|
|
26
|
-
cryptoService;
|
|
27
26
|
fileService;
|
|
28
27
|
sessionKeysService;
|
|
29
28
|
/**
|
|
@@ -37,8 +36,7 @@ let ProofGeneratorService = ProofGeneratorService_1 = class ProofGeneratorServic
|
|
|
37
36
|
/**
|
|
38
37
|
* Proof generator initialization
|
|
39
38
|
*/
|
|
40
|
-
constructor(
|
|
41
|
-
this.cryptoService = cryptoService;
|
|
39
|
+
constructor(fileService, sessionKeysService) {
|
|
42
40
|
this.fileService = fileService;
|
|
43
41
|
this.sessionKeysService = sessionKeysService;
|
|
44
42
|
this.deployment = Deployment.getInstance({ hre });
|
|
@@ -64,7 +62,7 @@ let ProofGeneratorService = ProofGeneratorService_1 = class ProofGeneratorServic
|
|
|
64
62
|
* @param args - generate proofs arguments
|
|
65
63
|
* @returns - generated proofs for message processing and tally
|
|
66
64
|
*/
|
|
67
|
-
async generate({ approval, sessionKeyAddress, chain, poll, maciContractAddress,
|
|
65
|
+
async generate({ approval, sessionKeyAddress, chain, poll, maciContractAddress, mode, startBlock, endBlock, blocksPerBatch, useWasm, }, options) {
|
|
68
66
|
try {
|
|
69
67
|
const signer = await this.sessionKeysService.getCoordinatorSigner(chain, sessionKeyAddress, approval);
|
|
70
68
|
const pollData = await getPoll({
|
|
@@ -76,37 +74,39 @@ let ProofGeneratorService = ProofGeneratorService_1 = class ProofGeneratorServic
|
|
|
76
74
|
name: EContracts.Poll,
|
|
77
75
|
address: pollData.address,
|
|
78
76
|
});
|
|
79
|
-
const
|
|
80
|
-
const
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
const publicKey = new PublicKey([
|
|
84
|
-
BigInt(coordinatorPublicKey.x.toString()),
|
|
85
|
-
BigInt(coordinatorPublicKey.y.toString()),
|
|
77
|
+
const publicKeyOnChain = await pollContract.coordinatorPublicKey();
|
|
78
|
+
const coordinatorPublicKeyOnChain = new PublicKey([
|
|
79
|
+
BigInt(publicKeyOnChain.x.toString()),
|
|
80
|
+
BigInt(publicKeyOnChain.y.toString()),
|
|
86
81
|
]);
|
|
87
|
-
|
|
82
|
+
const coordinatorKeypair = getCoordinatorKeypair();
|
|
83
|
+
if (!coordinatorKeypair.publicKey.equals(coordinatorPublicKeyOnChain)) {
|
|
88
84
|
this.logger.error(`Error: ${ErrorCodes.PRIVATE_KEY_MISMATCH}, wrong private key`);
|
|
89
85
|
throw new Error(ErrorCodes.PRIVATE_KEY_MISMATCH.toString());
|
|
90
86
|
}
|
|
91
|
-
|
|
92
|
-
const
|
|
87
|
+
// There are only QV and Non-QV modes available for tally circuit
|
|
88
|
+
const tally = this.fileService.getZkeyFilePaths(process.env.COORDINATOR_TALLY_ZKEY_NAME,
|
|
89
|
+
// if FULL use NON_QV because there are only VoteTallyQV and VoteTallyNonQV zkeys
|
|
90
|
+
mode === EMode.FULL ? EMode.NON_QV : mode);
|
|
91
|
+
const messageProcessor = this.fileService.getZkeyFilePaths(process.env.COORDINATOR_MESSAGE_PROCESS_ZKEY_NAME, mode);
|
|
93
92
|
const { processProofs, tallyProofs, tallyData } = await generateProofs({
|
|
94
93
|
outputDir: path.resolve("./proofs"),
|
|
95
|
-
coordinatorPrivateKey:
|
|
94
|
+
coordinatorPrivateKey: coordinatorKeypair.privateKey.serialize(),
|
|
96
95
|
signer,
|
|
97
96
|
maciAddress: maciContractAddress,
|
|
98
97
|
pollId: BigInt(poll),
|
|
99
98
|
startBlock,
|
|
100
99
|
endBlock,
|
|
101
100
|
blocksPerBatch,
|
|
101
|
+
useWasm,
|
|
102
102
|
rapidsnark: process.env.COORDINATOR_RAPIDSNARK_EXE,
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
103
|
+
mode,
|
|
104
|
+
voteTallyZkey: tally.zkey,
|
|
105
|
+
voteTallyWitnessGenerator: tally.witnessGenerator,
|
|
106
|
+
voteTallyWasm: tally.wasm,
|
|
107
|
+
messageProcessorZkey: messageProcessor.zkey,
|
|
108
|
+
messageProcessorWitnessGenerator: messageProcessor.witnessGenerator,
|
|
109
|
+
messageProcessorWasm: messageProcessor.wasm,
|
|
110
110
|
tallyFile: path.resolve("./tally.json"),
|
|
111
111
|
});
|
|
112
112
|
return {
|
|
@@ -157,8 +157,7 @@ let ProofGeneratorService = ProofGeneratorService_1 = class ProofGeneratorServic
|
|
|
157
157
|
};
|
|
158
158
|
ProofGeneratorService = ProofGeneratorService_1 = __decorate([
|
|
159
159
|
Injectable(),
|
|
160
|
-
__metadata("design:paramtypes", [
|
|
161
|
-
FileService,
|
|
160
|
+
__metadata("design:paramtypes", [FileService,
|
|
162
161
|
SessionKeysService])
|
|
163
162
|
], ProofGeneratorService);
|
|
164
163
|
export { ProofGeneratorService };
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"proof.service.js","sourceRoot":"","sources":["../../../ts/proof/proof.service.ts"],"names":[],"mappings":";;;;;;;;;;AAAA,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"proof.service.js","sourceRoot":"","sources":["../../../ts/proof/proof.service.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,6 +1,5 @@
|
|
|
1
|
-
import type { ITallyData, IProof } from "@maci-protocol/sdk";
|
|
1
|
+
import type { ITallyData, IProof, EMode, ESupportedChains } from "@maci-protocol/sdk";
|
|
2
2
|
import type { Hex } from "viem";
|
|
3
|
-
import { ESupportedNetworks } from "../common";
|
|
4
3
|
/**
|
|
5
4
|
* WS events for proof generation
|
|
6
5
|
*/
|
|
@@ -35,7 +34,7 @@ export interface IGenerateArgs {
|
|
|
35
34
|
/**
|
|
36
35
|
* Chain
|
|
37
36
|
*/
|
|
38
|
-
chain:
|
|
37
|
+
chain: ESupportedChains;
|
|
39
38
|
/**
|
|
40
39
|
* Poll id
|
|
41
40
|
*/
|
|
@@ -47,11 +46,7 @@ export interface IGenerateArgs {
|
|
|
47
46
|
/**
|
|
48
47
|
* Whether to use Qv or NonQv
|
|
49
48
|
*/
|
|
50
|
-
|
|
51
|
-
/**
|
|
52
|
-
* Encrypted coordinator private key with RSA public key (see .env.example)
|
|
53
|
-
*/
|
|
54
|
-
encryptedCoordinatorPrivateKey: string;
|
|
49
|
+
mode: EMode;
|
|
55
50
|
/**
|
|
56
51
|
* Start block for event processing
|
|
57
52
|
*/
|
|
@@ -64,6 +59,7 @@ export interface IGenerateArgs {
|
|
|
64
59
|
* Blocks per batch for event processing
|
|
65
60
|
*/
|
|
66
61
|
blocksPerBatch?: number;
|
|
62
|
+
useWasm?: boolean;
|
|
67
63
|
}
|
|
68
64
|
/**
|
|
69
65
|
* Interface that represents generated proofs data
|
|
@@ -118,7 +114,7 @@ export interface IMergeArgs {
|
|
|
118
114
|
/**
|
|
119
115
|
* Chain
|
|
120
116
|
*/
|
|
121
|
-
chain:
|
|
117
|
+
chain: ESupportedChains;
|
|
122
118
|
}
|
|
123
119
|
/**
|
|
124
120
|
* Submit proofs on-chain arguments
|
|
@@ -143,6 +139,6 @@ export interface ISubmitProofsArgs {
|
|
|
143
139
|
/**
|
|
144
140
|
* Chain
|
|
145
141
|
*/
|
|
146
|
-
chain:
|
|
142
|
+
chain: ESupportedChains;
|
|
147
143
|
}
|
|
148
144
|
//# sourceMappingURL=types.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../ts/proof/types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,EAAE,
|
|
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,gBAAgB,EAAE,MAAM,oBAAoB,CAAC;AACtF,OAAO,KAAK,EAAE,GAAG,EAAE,MAAM,MAAM,CAAC;AAEhC;;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,gBAAgB,CAAC;IAExB;;OAEG;IACH,IAAI,EAAE,MAAM,CAAC;IAEb;;OAEG;IACH,mBAAmB,EAAE,MAAM,CAAC;IAE5B;;OAEG;IACH,IAAI,EAAE,KAAK,CAAC;IAEZ;;OAEG;IACH,UAAU,CAAC,EAAE,MAAM,CAAC;IAEpB;;OAEG;IACH,QAAQ,CAAC,EAAE,MAAM,CAAC;IAElB;;OAEG;IACH,cAAc,CAAC,EAAE,MAAM,CAAC;IAKxB,OAAO,CAAC,EAAE,OAAO,CAAC;CACnB;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,gBAAgB,CAAC;CACzB;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,gBAAgB,CAAC;CACzB"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.js","sourceRoot":"","sources":["../../../ts/proof/types.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"types.js","sourceRoot":"","sources":["../../../ts/proof/types.ts"],"names":[],"mappings":"AAGA;;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":"redis.service.test.d.ts","sourceRoot":"","sources":["../../../../ts/redis/__tests__/redis.service.test.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,148 @@
|
|
|
1
|
+
import { ESupportedChains, EMode } from "@maci-protocol/sdk";
|
|
2
|
+
import { createClient } from "@redis/client";
|
|
3
|
+
import { RedisService } from "../redis.service";
|
|
4
|
+
import { getPollKeyFromObject } from "../utils";
|
|
5
|
+
const REDIS__GET_ALL_PREFIX = "*-test";
|
|
6
|
+
const scheduledPoll = {
|
|
7
|
+
maciAddress: "0xb83074Ac11fc569AC12F1b7D0C0a6809c3dc355b",
|
|
8
|
+
pollId: "5",
|
|
9
|
+
mode: EMode.NON_QV,
|
|
10
|
+
chain: ESupportedChains.OptimismSepolia,
|
|
11
|
+
endDate: 1752534000,
|
|
12
|
+
deploymentBlockNumber: 1,
|
|
13
|
+
merged: false,
|
|
14
|
+
proofsGenerated: false,
|
|
15
|
+
};
|
|
16
|
+
jest.mock("@redis/client", () => {
|
|
17
|
+
const mockRedisClient = {
|
|
18
|
+
connect: jest.fn().mockResolvedValue(undefined),
|
|
19
|
+
set: jest.fn().mockResolvedValue("OK"),
|
|
20
|
+
get: jest.fn().mockResolvedValue(null),
|
|
21
|
+
scan: jest.fn().mockResolvedValue({ cursor: "0", keys: ["1", "2", "3"] }),
|
|
22
|
+
del: jest.fn().mockResolvedValue(1),
|
|
23
|
+
quit: jest.fn().mockResolvedValue("OK"),
|
|
24
|
+
isOpen: true,
|
|
25
|
+
};
|
|
26
|
+
return {
|
|
27
|
+
createClient: jest.fn(() => mockRedisClient),
|
|
28
|
+
};
|
|
29
|
+
});
|
|
30
|
+
describe("RedisService", () => {
|
|
31
|
+
let service;
|
|
32
|
+
let mockRedisClient;
|
|
33
|
+
beforeAll(async () => {
|
|
34
|
+
service = new RedisService();
|
|
35
|
+
await service.onModuleInit();
|
|
36
|
+
mockRedisClient = createClient();
|
|
37
|
+
});
|
|
38
|
+
afterAll(() => {
|
|
39
|
+
jest.clearAllMocks();
|
|
40
|
+
});
|
|
41
|
+
test("should connect to Redis without issues", () => {
|
|
42
|
+
expect(service.isOpen()).toBe(true);
|
|
43
|
+
});
|
|
44
|
+
test("should set and get a value, and parse it as IScheduledPoll", async () => {
|
|
45
|
+
const key = getPollKeyFromObject(scheduledPoll, true);
|
|
46
|
+
const value = JSON.stringify(scheduledPoll);
|
|
47
|
+
await service.set(key, value);
|
|
48
|
+
mockRedisClient.get.mockResolvedValueOnce(value);
|
|
49
|
+
const stored = await service.get(key);
|
|
50
|
+
expect(stored).not.toBeNull();
|
|
51
|
+
const parsed = JSON.parse(stored);
|
|
52
|
+
expect(parsed).toEqual(scheduledPoll);
|
|
53
|
+
});
|
|
54
|
+
test("should return null when non-existent key is requested", async () => {
|
|
55
|
+
const nonExistentKey = "non-existent-key";
|
|
56
|
+
const result = await service.get(nonExistentKey);
|
|
57
|
+
expect(result).toBeNull();
|
|
58
|
+
});
|
|
59
|
+
test("should set and get multiple values", async () => {
|
|
60
|
+
const pollOne = { ...scheduledPoll };
|
|
61
|
+
pollOne.pollId = "1";
|
|
62
|
+
const pollKeyOne = getPollKeyFromObject(pollOne, true);
|
|
63
|
+
await service.set(pollKeyOne, JSON.stringify(pollOne));
|
|
64
|
+
mockRedisClient.get.mockResolvedValueOnce(JSON.stringify(pollOne));
|
|
65
|
+
const pollTwo = { ...scheduledPoll };
|
|
66
|
+
pollTwo.pollId = "2";
|
|
67
|
+
const pollKeyTwo = getPollKeyFromObject(pollTwo, true);
|
|
68
|
+
await service.set(pollKeyTwo, JSON.stringify(pollTwo));
|
|
69
|
+
mockRedisClient.get.mockResolvedValueOnce(JSON.stringify(pollTwo));
|
|
70
|
+
const pollThree = { ...scheduledPoll };
|
|
71
|
+
pollThree.pollId = "3";
|
|
72
|
+
const pollKeyThree = getPollKeyFromObject(pollThree, true);
|
|
73
|
+
await service.set(pollKeyThree, JSON.stringify(pollThree));
|
|
74
|
+
mockRedisClient.get.mockResolvedValueOnce(JSON.stringify(pollThree));
|
|
75
|
+
const [storedPollOne, storedPollTwo, storedPollThree] = await Promise.all([
|
|
76
|
+
service.get(pollKeyOne),
|
|
77
|
+
service.get(pollKeyTwo),
|
|
78
|
+
service.get(pollKeyThree),
|
|
79
|
+
]);
|
|
80
|
+
expect(pollOne).toEqual(JSON.parse(storedPollOne || "{}"));
|
|
81
|
+
expect(pollTwo).toEqual(JSON.parse(storedPollTwo || "{}"));
|
|
82
|
+
expect(pollThree).toEqual(JSON.parse(storedPollThree || "{}"));
|
|
83
|
+
});
|
|
84
|
+
test("should retrieve all values using getAll", async () => {
|
|
85
|
+
const pollOne = { ...scheduledPoll };
|
|
86
|
+
pollOne.pollId = "1";
|
|
87
|
+
const pollKeyOne = getPollKeyFromObject(pollOne, true);
|
|
88
|
+
await service.set(pollKeyOne, JSON.stringify(pollOne));
|
|
89
|
+
const pollTwo = { ...scheduledPoll };
|
|
90
|
+
pollTwo.pollId = "2";
|
|
91
|
+
const pollKeyTwo = getPollKeyFromObject(pollTwo, true);
|
|
92
|
+
await service.set(pollKeyTwo, JSON.stringify(pollTwo));
|
|
93
|
+
const pollThree = { ...scheduledPoll };
|
|
94
|
+
pollThree.pollId = "3";
|
|
95
|
+
const pollKeyThree = getPollKeyFromObject(pollThree, true);
|
|
96
|
+
await service.set(pollKeyThree, JSON.stringify(pollThree));
|
|
97
|
+
mockRedisClient.get.mockImplementation(async (key) => {
|
|
98
|
+
if (["1", "2", "3"].includes(String(key))) {
|
|
99
|
+
return Promise.resolve("{}");
|
|
100
|
+
}
|
|
101
|
+
return Promise.resolve(null);
|
|
102
|
+
});
|
|
103
|
+
const all = await service.getAll(REDIS__GET_ALL_PREFIX);
|
|
104
|
+
expect(all.length).toBe(3);
|
|
105
|
+
});
|
|
106
|
+
test("should delete a value and return one as confirmation", async () => {
|
|
107
|
+
const key = "delete-me";
|
|
108
|
+
await service.set(key, '{"bye":"now"}');
|
|
109
|
+
const deleted = await service.delete(key);
|
|
110
|
+
const value = await service.get(key);
|
|
111
|
+
expect(deleted).toBe(1);
|
|
112
|
+
expect(value).toBeNull();
|
|
113
|
+
});
|
|
114
|
+
test("should not throw and return zero when deleting non-existent value", async () => {
|
|
115
|
+
mockRedisClient.del.mockResolvedValueOnce(0);
|
|
116
|
+
const key = "non-existent-key";
|
|
117
|
+
const deleted = await service.delete(key);
|
|
118
|
+
expect(deleted).toBe(0);
|
|
119
|
+
});
|
|
120
|
+
test("should update a value using set with same key", async () => {
|
|
121
|
+
const key = getPollKeyFromObject(scheduledPoll, true);
|
|
122
|
+
const valuePoll = JSON.stringify(scheduledPoll);
|
|
123
|
+
await service.set(key, valuePoll);
|
|
124
|
+
const updatedPoll = { ...scheduledPoll, endDate: 1 };
|
|
125
|
+
const updatedPollValue = JSON.stringify(updatedPoll);
|
|
126
|
+
await service.set(key, updatedPollValue);
|
|
127
|
+
mockRedisClient.get.mockResolvedValueOnce(updatedPollValue);
|
|
128
|
+
const stored = await service.get(key);
|
|
129
|
+
const parsed = JSON.parse(stored);
|
|
130
|
+
expect(parsed.endDate).toBe(updatedPoll.endDate);
|
|
131
|
+
});
|
|
132
|
+
test("should return production key name when test is not specified", () => {
|
|
133
|
+
const originalEnv = process.env.NODE_ENV;
|
|
134
|
+
process.env.NODE_ENV = "production";
|
|
135
|
+
try {
|
|
136
|
+
const key = getPollKeyFromObject(scheduledPoll, false);
|
|
137
|
+
expect(key).toBe(`${scheduledPoll.chain}-${scheduledPoll.maciAddress}-poll-${scheduledPoll.pollId}`);
|
|
138
|
+
}
|
|
139
|
+
finally {
|
|
140
|
+
process.env.NODE_ENV = originalEnv;
|
|
141
|
+
}
|
|
142
|
+
});
|
|
143
|
+
test("should return test key name when test is specified", () => {
|
|
144
|
+
const key = getPollKeyFromObject(scheduledPoll, true);
|
|
145
|
+
expect(key).toBe(`${scheduledPoll.chain}-${scheduledPoll.maciAddress}-poll-${scheduledPoll.pollId}-test`);
|
|
146
|
+
});
|
|
147
|
+
});
|
|
148
|
+
//# sourceMappingURL=redis.service.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"redis.service.test.js","sourceRoot":"","sources":["../../../../ts/redis/__tests__/redis.service.test.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"redis.module.d.ts","sourceRoot":"","sources":["../../../ts/redis/redis.module.ts"],"names":[],"mappings":"AAIA,qBAIa,WAAW;CAAG"}
|
|
@@ -0,0 +1,18 @@
|
|
|
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
|
+
import { Module } from "@nestjs/common";
|
|
8
|
+
import { RedisService } from "./redis.service";
|
|
9
|
+
let RedisModule = class RedisModule {
|
|
10
|
+
};
|
|
11
|
+
RedisModule = __decorate([
|
|
12
|
+
Module({
|
|
13
|
+
exports: [RedisService],
|
|
14
|
+
providers: [RedisService],
|
|
15
|
+
})
|
|
16
|
+
], RedisModule);
|
|
17
|
+
export { RedisModule };
|
|
18
|
+
//# sourceMappingURL=redis.module.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"redis.module.js","sourceRoot":"","sources":["../../../ts/redis/redis.module.ts"],"names":[],"mappings":";;;;;;AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,gBAAgB,CAAC;AAExC,OAAO,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAC;AAMxC,IAAM,WAAW,GAAjB,MAAM,WAAW;CAAG,CAAA;AAAd,WAAW;IAJvB,MAAM,CAAC;QACN,OAAO,EAAE,CAAC,YAAY,CAAC;QACvB,SAAS,EAAE,CAAC,YAAY,CAAC;KAC1B,CAAC;GACW,WAAW,CAAG"}
|
|
@@ -0,0 +1,53 @@
|
|
|
1
|
+
import { OnModuleInit } from "@nestjs/common";
|
|
2
|
+
import { IGetAllSingleObject } from "./types";
|
|
3
|
+
/**
|
|
4
|
+
* Redis service to interact with the Redis database.
|
|
5
|
+
*/
|
|
6
|
+
export declare class RedisService implements OnModuleInit {
|
|
7
|
+
/**
|
|
8
|
+
* Client instance used to interact with the Redis database.
|
|
9
|
+
*/
|
|
10
|
+
private client;
|
|
11
|
+
/**
|
|
12
|
+
* Create a new instance of the RedisService.
|
|
13
|
+
* The Redis configuration is set up here
|
|
14
|
+
*/
|
|
15
|
+
constructor();
|
|
16
|
+
/**
|
|
17
|
+
* Initializes the Redis client connection when the module has been uploaded.
|
|
18
|
+
* @dev it is a lifecycle hook provided by NestJS that is called after all dependencies
|
|
19
|
+
* are injected and the module is fully initialized.
|
|
20
|
+
* This ensures your service is ready and all dependencies are available.
|
|
21
|
+
*/
|
|
22
|
+
onModuleInit(): Promise<void>;
|
|
23
|
+
/**
|
|
24
|
+
* Saves a new key-value pair in Redis.
|
|
25
|
+
* @param key key for the Redis entry
|
|
26
|
+
* @param value value to be stored in Redis
|
|
27
|
+
*/
|
|
28
|
+
set(key: string, value: string): Promise<void>;
|
|
29
|
+
/**
|
|
30
|
+
* Retrieves a value from Redis by its key.
|
|
31
|
+
* @param key key for the Redis entry
|
|
32
|
+
* @returns the value stored as string in Redis or null if the key does not exist
|
|
33
|
+
*/
|
|
34
|
+
get(key: string): Promise<string | null>;
|
|
35
|
+
/**
|
|
36
|
+
* Retrieves all keys from Redis that match a specific pattern.
|
|
37
|
+
* @param match optional pattern to match keys in Redis
|
|
38
|
+
* @dev if no match is provided, it will return all keys
|
|
39
|
+
* @returns the array of string values stored in Redis that match the pattern
|
|
40
|
+
*/
|
|
41
|
+
getAll(match?: string): Promise<IGetAllSingleObject[]>;
|
|
42
|
+
/**
|
|
43
|
+
* Deletes a key from Redis.
|
|
44
|
+
* @param key key to be deleted from Redis
|
|
45
|
+
*/
|
|
46
|
+
delete(key: string): Promise<number>;
|
|
47
|
+
/**
|
|
48
|
+
* Check if the connection to Redis is open
|
|
49
|
+
* @return true if the connection is open, false otherwise
|
|
50
|
+
*/
|
|
51
|
+
isOpen(): boolean;
|
|
52
|
+
}
|
|
53
|
+
//# sourceMappingURL=redis.service.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"redis.service.d.ts","sourceRoot":"","sources":["../../../ts/redis/redis.service.ts"],"names":[],"mappings":"AAAA,OAAO,EAAc,YAAY,EAAE,MAAM,gBAAgB,CAAC;AAG1D,OAAO,EAAE,mBAAmB,EAAE,MAAM,SAAS,CAAC;AAE9C;;GAEG;AACH,qBACa,YAAa,YAAW,YAAY;IAC/C;;OAEG;IACH,OAAO,CAAC,MAAM,CAAkB;IAEhC;;;OAGG;;IAQH;;;;;OAKG;IACG,YAAY,IAAI,OAAO,CAAC,IAAI,CAAC;IAInC;;;;OAIG;IACG,GAAG,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAMpD;;;;OAIG;IACG,GAAG,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC;IAI9C;;;;;OAKG;IACG,MAAM,CAAC,KAAK,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,mBAAmB,EAAE,CAAC;IAwB5D;;;OAGG;IACG,MAAM,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;IAI1C;;;OAGG;IACH,MAAM,IAAI,OAAO;CAGlB"}
|
|
@@ -0,0 +1,99 @@
|
|
|
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
|
+
import { Injectable } from "@nestjs/common";
|
|
11
|
+
import { createClient } from "@redis/client";
|
|
12
|
+
/**
|
|
13
|
+
* Redis service to interact with the Redis database.
|
|
14
|
+
*/
|
|
15
|
+
let RedisService = class RedisService {
|
|
16
|
+
/**
|
|
17
|
+
* Client instance used to interact with the Redis database.
|
|
18
|
+
*/
|
|
19
|
+
client;
|
|
20
|
+
/**
|
|
21
|
+
* Create a new instance of the RedisService.
|
|
22
|
+
* The Redis configuration is set up here
|
|
23
|
+
*/
|
|
24
|
+
constructor() {
|
|
25
|
+
this.client = createClient({
|
|
26
|
+
url: `redis://${process.env.COORDINATOR_REDIS_HOST}:${process.env.COORDINATOR_REDIS_PORT}`,
|
|
27
|
+
disableOfflineQueue: true,
|
|
28
|
+
});
|
|
29
|
+
}
|
|
30
|
+
/**
|
|
31
|
+
* Initializes the Redis client connection when the module has been uploaded.
|
|
32
|
+
* @dev it is a lifecycle hook provided by NestJS that is called after all dependencies
|
|
33
|
+
* are injected and the module is fully initialized.
|
|
34
|
+
* This ensures your service is ready and all dependencies are available.
|
|
35
|
+
*/
|
|
36
|
+
async onModuleInit() {
|
|
37
|
+
await this.client.connect();
|
|
38
|
+
}
|
|
39
|
+
/**
|
|
40
|
+
* Saves a new key-value pair in Redis.
|
|
41
|
+
* @param key key for the Redis entry
|
|
42
|
+
* @param value value to be stored in Redis
|
|
43
|
+
*/
|
|
44
|
+
async set(key, value) {
|
|
45
|
+
// we are not using @redis/json because we dont need complex search capabilities
|
|
46
|
+
// we store a string (lightweight) and parse it to use the object
|
|
47
|
+
await this.client.set(key, value);
|
|
48
|
+
}
|
|
49
|
+
/**
|
|
50
|
+
* Retrieves a value from Redis by its key.
|
|
51
|
+
* @param key key for the Redis entry
|
|
52
|
+
* @returns the value stored as string in Redis or null if the key does not exist
|
|
53
|
+
*/
|
|
54
|
+
async get(key) {
|
|
55
|
+
return this.client.get(key);
|
|
56
|
+
}
|
|
57
|
+
/**
|
|
58
|
+
* Retrieves all keys from Redis that match a specific pattern.
|
|
59
|
+
* @param match optional pattern to match keys in Redis
|
|
60
|
+
* @dev if no match is provided, it will return all keys
|
|
61
|
+
* @returns the array of string values stored in Redis that match the pattern
|
|
62
|
+
*/
|
|
63
|
+
async getAll(match) {
|
|
64
|
+
let result = [];
|
|
65
|
+
let currentCursor = "0";
|
|
66
|
+
do {
|
|
67
|
+
// using a cursor is recommended to be use in production environment
|
|
68
|
+
// eslint-disable-next-line no-await-in-loop
|
|
69
|
+
const { cursor, keys } = await this.client.scan(currentCursor, { MATCH: match || "*", COUNT: 100 });
|
|
70
|
+
// eslint-disable-next-line no-await-in-loop
|
|
71
|
+
const values = await Promise.all(keys.map((key) => this.get(key)));
|
|
72
|
+
result = result.concat(values
|
|
73
|
+
.map((value, index) => ({ key: keys[index], value }))
|
|
74
|
+
.filter((item) => item.value !== null));
|
|
75
|
+
currentCursor = cursor;
|
|
76
|
+
} while (currentCursor !== "0");
|
|
77
|
+
return result;
|
|
78
|
+
}
|
|
79
|
+
/**
|
|
80
|
+
* Deletes a key from Redis.
|
|
81
|
+
* @param key key to be deleted from Redis
|
|
82
|
+
*/
|
|
83
|
+
async delete(key) {
|
|
84
|
+
return this.client.del(key);
|
|
85
|
+
}
|
|
86
|
+
/**
|
|
87
|
+
* Check if the connection to Redis is open
|
|
88
|
+
* @return true if the connection is open, false otherwise
|
|
89
|
+
*/
|
|
90
|
+
isOpen() {
|
|
91
|
+
return this.client.isOpen;
|
|
92
|
+
}
|
|
93
|
+
};
|
|
94
|
+
RedisService = __decorate([
|
|
95
|
+
Injectable(),
|
|
96
|
+
__metadata("design:paramtypes", [])
|
|
97
|
+
], RedisService);
|
|
98
|
+
export { RedisService };
|
|
99
|
+
//# sourceMappingURL=redis.service.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"redis.service.js","sourceRoot":"","sources":["../../../ts/redis/redis.service.ts"],"names":[],"mappings":";;;;;;;;;AAAA,OAAO,EAAE,UAAU,EAAgB,MAAM,gBAAgB,CAAC;AAC1D,OAAO,EAAE,YAAY,EAAmB,MAAM,eAAe,CAAC;AAI9D;;GAEG;AAEI,IAAM,YAAY,GAAlB,MAAM,YAAY;IACvB;;OAEG;IACK,MAAM,CAAkB;IAEhC;;;OAGG;IACH;QACE,IAAI,CAAC,MAAM,GAAG,YAAY,CAAC;YACzB,GAAG,EAAE,WAAW,OAAO,CAAC,GAAG,CAAC,sBAAsB,IAAI,OAAO,CAAC,GAAG,CAAC,sBAAsB,EAAE;YAC1F,mBAAmB,EAAE,IAAI;SAC1B,CAAC,CAAC;IACL,CAAC;IAED;;;;;OAKG;IACH,KAAK,CAAC,YAAY;QAChB,MAAM,IAAI,CAAC,MAAM,CAAC,OAAO,EAAE,CAAC;IAC9B,CAAC;IAED;;;;OAIG;IACH,KAAK,CAAC,GAAG,CAAC,GAAW,EAAE,KAAa;QAClC,gFAAgF;QAChF,iEAAiE;QACjE,MAAM,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC;IACpC,CAAC;IAED;;;;OAIG;IACH,KAAK,CAAC,GAAG,CAAC,GAAW;QACnB,OAAO,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;IAC9B,CAAC;IAED;;;;;OAKG;IACH,KAAK,CAAC,MAAM,CAAC,KAAc;QACzB,IAAI,MAAM,GAA0B,EAAE,CAAC;QACvC,IAAI,aAAa,GAAG,GAAG,CAAC;QAExB,GAAG,CAAC;YACF,oEAAoE;YACpE,4CAA4C;YAC5C,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,GAAG,MAAM,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,aAAa,EAAE,EAAE,KAAK,EAAE,KAAK,IAAI,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,CAAC,CAAC;YAEpG,4CAA4C;YAC5C,MAAM,MAAM,GAAG,MAAM,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;YAEnE,MAAM,GAAG,MAAM,CAAC,MAAM,CACpB,MAAM;iBACH,GAAG,CAAC,CAAC,KAAK,EAAE,KAAK,EAAE,EAAE,CAAC,CAAC,EAAE,GAAG,EAAE,IAAI,CAAC,KAAK,CAAC,EAAE,KAAK,EAAE,CAAC,CAAC;iBACpD,MAAM,CAAC,CAAC,IAAI,EAA+B,EAAE,CAAC,IAAI,CAAC,KAAK,KAAK,IAAI,CAAC,CACtE,CAAC;YAEF,aAAa,GAAG,MAAM,CAAC;QACzB,CAAC,QAAQ,aAAa,KAAK,GAAG,EAAE;QAEhC,OAAO,MAAM,CAAC;IAChB,CAAC;IAED;;;OAGG;IACH,KAAK,CAAC,MAAM,CAAC,GAAW;QACtB,OAAO,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;IAC9B,CAAC;IAED;;;OAGG;IACH,MAAM;QACJ,OAAO,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC;IAC5B,CAAC;CACF,CAAA;AA5FY,YAAY;IADxB,UAAU,EAAE;;GACA,YAAY,CA4FxB"}
|
|
@@ -0,0 +1,66 @@
|
|
|
1
|
+
import type { EMode, ESupportedChains } from "@maci-protocol/sdk";
|
|
2
|
+
/**
|
|
3
|
+
* Interface of the minimal properties to identify a scheduled poll
|
|
4
|
+
*/
|
|
5
|
+
export interface IIdentityScheduledPoll {
|
|
6
|
+
/**
|
|
7
|
+
* Maci contract address
|
|
8
|
+
*/
|
|
9
|
+
maciAddress: string;
|
|
10
|
+
/**
|
|
11
|
+
* Poll id (unique identifier)
|
|
12
|
+
*/
|
|
13
|
+
pollId: string;
|
|
14
|
+
/**
|
|
15
|
+
* Chain in which the poll is deployed
|
|
16
|
+
*/
|
|
17
|
+
chain: ESupportedChains;
|
|
18
|
+
}
|
|
19
|
+
/**
|
|
20
|
+
* Interface for scheduled polls stored in Redis
|
|
21
|
+
*/
|
|
22
|
+
export interface IScheduledPoll extends IIdentityScheduledPoll {
|
|
23
|
+
/**
|
|
24
|
+
* Deployment block number
|
|
25
|
+
*/
|
|
26
|
+
deploymentBlockNumber: number;
|
|
27
|
+
/**
|
|
28
|
+
* Voting mode
|
|
29
|
+
*/
|
|
30
|
+
mode: EMode;
|
|
31
|
+
/**
|
|
32
|
+
* End date in seconds
|
|
33
|
+
*/
|
|
34
|
+
endDate: number;
|
|
35
|
+
/**
|
|
36
|
+
* Whether the MACI contract's state root has been merged
|
|
37
|
+
*/
|
|
38
|
+
merged: boolean;
|
|
39
|
+
/**
|
|
40
|
+
* Whether the proofs has been generated
|
|
41
|
+
*/
|
|
42
|
+
proofsGenerated: boolean;
|
|
43
|
+
}
|
|
44
|
+
/**
|
|
45
|
+
* getPollKeyForRedis parameters
|
|
46
|
+
*/
|
|
47
|
+
export interface IGetPollKeyForRedisParams extends IIdentityScheduledPoll {
|
|
48
|
+
/**
|
|
49
|
+
* Test environment flag (optional)
|
|
50
|
+
*/
|
|
51
|
+
test?: boolean;
|
|
52
|
+
}
|
|
53
|
+
/**
|
|
54
|
+
* Interface for getAll single object
|
|
55
|
+
*/
|
|
56
|
+
export interface IGetAllSingleObject {
|
|
57
|
+
/**
|
|
58
|
+
* The key of the object
|
|
59
|
+
*/
|
|
60
|
+
key: string;
|
|
61
|
+
/**
|
|
62
|
+
* The value of the object
|
|
63
|
+
*/
|
|
64
|
+
value: string;
|
|
65
|
+
}
|
|
66
|
+
//# sourceMappingURL=types.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../ts/redis/types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,KAAK,EAAE,gBAAgB,EAAE,MAAM,oBAAoB,CAAC;AAElE;;GAEG;AACH,MAAM,WAAW,sBAAsB;IACrC;;OAEG;IACH,WAAW,EAAE,MAAM,CAAC;IAEpB;;OAEG;IACH,MAAM,EAAE,MAAM,CAAC;IAEf;;OAEG;IACH,KAAK,EAAE,gBAAgB,CAAC;CACzB;AAED;;GAEG;AACH,MAAM,WAAW,cAAe,SAAQ,sBAAsB;IAC5D;;OAEG;IACH,qBAAqB,EAAE,MAAM,CAAC;IAE9B;;OAEG;IACH,IAAI,EAAE,KAAK,CAAC;IAEZ;;OAEG;IACH,OAAO,EAAE,MAAM,CAAC;IAEhB;;OAEG;IACH,MAAM,EAAE,OAAO,CAAC;IAEhB;;OAEG;IACH,eAAe,EAAE,OAAO,CAAC;CAC1B;AAED;;GAEG;AACH,MAAM,WAAW,yBAA0B,SAAQ,sBAAsB;IACvE;;OAEG;IACH,IAAI,CAAC,EAAE,OAAO,CAAC;CAChB;AAED;;GAEG;AACH,MAAM,WAAW,mBAAmB;IAClC;;OAEG;IACH,GAAG,EAAE,MAAM,CAAC;IAEZ;;OAEG;IACH,KAAK,EAAE,MAAM,CAAC;CACf"}
|