@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
|
@@ -0,0 +1,297 @@
|
|
|
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 SchedulerService_1;
|
|
11
|
+
import { getPoll, isTallied } from "@maci-protocol/sdk";
|
|
12
|
+
import { Injectable, Logger } from "@nestjs/common";
|
|
13
|
+
import { SchedulerRegistry } from "@nestjs/schedule";
|
|
14
|
+
import { ErrorCodes } from "../common";
|
|
15
|
+
import { ProofGeneratorService } from "../proof/proof.service";
|
|
16
|
+
import { RedisService } from "../redis/redis.service";
|
|
17
|
+
import { getPollKeyFromObject } from "../redis/utils";
|
|
18
|
+
import { SessionKeysService } from "../sessionKeys/sessionKeys.service";
|
|
19
|
+
const BUFFER_TIMEOUT = 15 * 1000; // 15 seconds buffer for poll finalization
|
|
20
|
+
let SchedulerService = SchedulerService_1 = class SchedulerService {
|
|
21
|
+
sessionKeysService;
|
|
22
|
+
redisService;
|
|
23
|
+
schedulerRegistry;
|
|
24
|
+
proofService;
|
|
25
|
+
/**
|
|
26
|
+
* Logger
|
|
27
|
+
*/
|
|
28
|
+
logger;
|
|
29
|
+
/**
|
|
30
|
+
* Create a new scheduler service instance.
|
|
31
|
+
* @param sessionKeysService - session keys service to manage session keys
|
|
32
|
+
* @param redisService - redis service to interact with Redis database
|
|
33
|
+
* @param schedulerRegistry - scheduler registry to manage scheduled tasks
|
|
34
|
+
*/
|
|
35
|
+
constructor(sessionKeysService, redisService, schedulerRegistry, proofService) {
|
|
36
|
+
this.sessionKeysService = sessionKeysService;
|
|
37
|
+
this.redisService = redisService;
|
|
38
|
+
this.schedulerRegistry = schedulerRegistry;
|
|
39
|
+
this.proofService = proofService;
|
|
40
|
+
this.logger = new Logger(SchedulerService_1.name);
|
|
41
|
+
}
|
|
42
|
+
/**
|
|
43
|
+
* Instantiate and schedule the saved polls in the database
|
|
44
|
+
* @dev it is a lifecycle hook provided by NestJS that is called after all dependencies
|
|
45
|
+
* are injected and the module is fully initialized.
|
|
46
|
+
* This ensures your service is ready and all dependencies are available.
|
|
47
|
+
*/
|
|
48
|
+
async onModuleInit() {
|
|
49
|
+
await this.restoreTimeouts();
|
|
50
|
+
}
|
|
51
|
+
/**
|
|
52
|
+
* Check if poll is scheduled for finalization
|
|
53
|
+
* @param args - Arguments for checking poll finalization
|
|
54
|
+
* @returns true if poll is scheduled for finalization, false otherwise
|
|
55
|
+
*/
|
|
56
|
+
async isPollScheduled(scheduledPoll) {
|
|
57
|
+
const key = getPollKeyFromObject(scheduledPoll);
|
|
58
|
+
const { maciAddress, pollId, chain } = scheduledPoll;
|
|
59
|
+
const { isPollTallied } = await this.getPollFinalizationData({
|
|
60
|
+
maciAddress,
|
|
61
|
+
pollId,
|
|
62
|
+
chain,
|
|
63
|
+
});
|
|
64
|
+
if (isPollTallied) {
|
|
65
|
+
this.deleteScheduledPoll({ maciAddress, pollId, chain });
|
|
66
|
+
this.logger.error(`Error: ${ErrorCodes.POLL_ALREADY_TALLIED}, poll has already been tallied`);
|
|
67
|
+
throw new Error(ErrorCodes.POLL_ALREADY_TALLIED.toString());
|
|
68
|
+
}
|
|
69
|
+
const storedPoll = await this.redisService.get(key);
|
|
70
|
+
if (!storedPoll) {
|
|
71
|
+
return { isScheduled: false };
|
|
72
|
+
}
|
|
73
|
+
const isPollTimeoutScheduled = this.schedulerRegistry.doesExist("timeout", key);
|
|
74
|
+
if (!isPollTimeoutScheduled) {
|
|
75
|
+
// delete redis data so user has to reschedule again
|
|
76
|
+
await this.redisService.delete(key);
|
|
77
|
+
return { isScheduled: false };
|
|
78
|
+
}
|
|
79
|
+
return { isScheduled: true };
|
|
80
|
+
}
|
|
81
|
+
/**
|
|
82
|
+
* Return the poll end date and whether it is tallied
|
|
83
|
+
* @param args - Arguments to retrieve poll data
|
|
84
|
+
*/
|
|
85
|
+
async getPollFinalizationData({ pollId, maciAddress, chain, sessionKeyAddress, approval, }) {
|
|
86
|
+
const signer = await this.sessionKeysService.getCoordinatorSigner(chain, sessionKeyAddress, approval);
|
|
87
|
+
const [{ endDate, isMerged: isPollMerged }, isPollTallied] = await Promise.all([
|
|
88
|
+
getPoll({
|
|
89
|
+
maciAddress,
|
|
90
|
+
pollId: BigInt(pollId),
|
|
91
|
+
signer,
|
|
92
|
+
}),
|
|
93
|
+
isTallied({
|
|
94
|
+
maciAddress,
|
|
95
|
+
pollId: String(pollId),
|
|
96
|
+
signer,
|
|
97
|
+
}),
|
|
98
|
+
]);
|
|
99
|
+
return {
|
|
100
|
+
endDate: Number(endDate),
|
|
101
|
+
isPollTallied,
|
|
102
|
+
isPollMerged,
|
|
103
|
+
};
|
|
104
|
+
}
|
|
105
|
+
/**
|
|
106
|
+
* Finalize poll starting from any step
|
|
107
|
+
*
|
|
108
|
+
* @param args - generate proofs arguments
|
|
109
|
+
*/
|
|
110
|
+
async finalizePoll(poll) {
|
|
111
|
+
const { maciAddress, pollId, chain, deploymentBlockNumber, mode, merged, proofsGenerated } = poll;
|
|
112
|
+
const key = getPollKeyFromObject({ maciAddress, pollId, chain });
|
|
113
|
+
const { endDate, isPollMerged } = await this.getPollFinalizationData({
|
|
114
|
+
maciAddress,
|
|
115
|
+
pollId,
|
|
116
|
+
chain,
|
|
117
|
+
});
|
|
118
|
+
if (endDate * 1000 > Date.now()) {
|
|
119
|
+
this.logger.error(`Error finalizing poll ${pollId}: voting period is not over.`);
|
|
120
|
+
await this.deleteScheduledPoll({ maciAddress, pollId, chain });
|
|
121
|
+
await this.setupPollFinalization(poll);
|
|
122
|
+
return;
|
|
123
|
+
}
|
|
124
|
+
if (isPollMerged !== merged) {
|
|
125
|
+
this.logger.error(`Error finalizing poll ${pollId}: is poll merged mismatch. Updating database.`);
|
|
126
|
+
await this.deleteScheduledPoll({ maciAddress, pollId, chain });
|
|
127
|
+
await this.setupPollFinalization({ ...poll, merged: isPollMerged });
|
|
128
|
+
return;
|
|
129
|
+
}
|
|
130
|
+
try {
|
|
131
|
+
if (!merged) {
|
|
132
|
+
await this.proofService
|
|
133
|
+
.merge({
|
|
134
|
+
maciContractAddress: maciAddress,
|
|
135
|
+
pollId: Number(pollId),
|
|
136
|
+
chain,
|
|
137
|
+
})
|
|
138
|
+
.then(() => this.redisService.set(key, JSON.stringify({ ...poll, merged: true })))
|
|
139
|
+
.catch(async (error) => {
|
|
140
|
+
await this.deleteScheduledPoll({ maciAddress, pollId, chain });
|
|
141
|
+
await this.setupPollFinalization(poll);
|
|
142
|
+
throw new Error(`Error merging poll ${pollId}: ${error.message}`);
|
|
143
|
+
});
|
|
144
|
+
}
|
|
145
|
+
if (!proofsGenerated) {
|
|
146
|
+
await this.proofService
|
|
147
|
+
.generate({
|
|
148
|
+
maciContractAddress: maciAddress,
|
|
149
|
+
poll: Number(pollId),
|
|
150
|
+
chain,
|
|
151
|
+
mode,
|
|
152
|
+
startBlock: deploymentBlockNumber,
|
|
153
|
+
blocksPerBatch: Number(process.env.COORDINATOR_BLOCK_BATCH_SIZE || 1000),
|
|
154
|
+
})
|
|
155
|
+
.then(() => this.redisService.set(key, JSON.stringify({ ...poll, merged: true, proofsGenerated: true })))
|
|
156
|
+
.catch(async (error) => {
|
|
157
|
+
await this.deleteScheduledPoll({ maciAddress, pollId, chain });
|
|
158
|
+
await this.setupPollFinalization({ ...poll, merged: true });
|
|
159
|
+
throw new Error(`Error generating proofs for poll ${pollId}: ${error.message}`);
|
|
160
|
+
});
|
|
161
|
+
}
|
|
162
|
+
await this.proofService
|
|
163
|
+
.submit({
|
|
164
|
+
maciContractAddress: maciAddress,
|
|
165
|
+
pollId: Number(pollId),
|
|
166
|
+
chain,
|
|
167
|
+
})
|
|
168
|
+
.then(() => this.deleteScheduledPoll({ maciAddress, pollId, chain }))
|
|
169
|
+
.catch(async (error) => {
|
|
170
|
+
await this.deleteScheduledPoll({ maciAddress, pollId, chain });
|
|
171
|
+
await this.setupPollFinalization({ ...poll, merged: true, proofsGenerated: true });
|
|
172
|
+
throw new Error(`Error submitting proofs for poll ${pollId}: ${error.message}`);
|
|
173
|
+
});
|
|
174
|
+
}
|
|
175
|
+
catch (error) {
|
|
176
|
+
this.logger.error(`Error finalizing poll ${pollId}: ${error.message}`);
|
|
177
|
+
}
|
|
178
|
+
}
|
|
179
|
+
/**
|
|
180
|
+
* Store poll information and schedule its finalization.
|
|
181
|
+
* @param args - Arguments for storing and scheduling poll finalization
|
|
182
|
+
* @return delay in milliseconds until the poll is scheduled for finalization
|
|
183
|
+
*/
|
|
184
|
+
async setupPollFinalization(poll) {
|
|
185
|
+
const { maciAddress, pollId, chain, endDate } = poll;
|
|
186
|
+
const key = getPollKeyFromObject({ maciAddress, pollId, chain });
|
|
187
|
+
await this.redisService.set(key, JSON.stringify(poll));
|
|
188
|
+
const shouldBeExecutedIn = endDate * 1000 - Date.now();
|
|
189
|
+
const toBeExecutedIn = shouldBeExecutedIn > 0 ? shouldBeExecutedIn : 0;
|
|
190
|
+
const delay = toBeExecutedIn + BUFFER_TIMEOUT;
|
|
191
|
+
const timeout = setTimeout(async () => {
|
|
192
|
+
await this.finalizePoll(poll);
|
|
193
|
+
}, delay);
|
|
194
|
+
const isPollTimeoutScheduled = this.schedulerRegistry.doesExist("timeout", key);
|
|
195
|
+
if (isPollTimeoutScheduled) {
|
|
196
|
+
this.logger.error(`Error: ${ErrorCodes.POLL_ALREADY_SCHEDULED}, poll is already scheduled`);
|
|
197
|
+
throw new Error(ErrorCodes.POLL_ALREADY_SCHEDULED.toString());
|
|
198
|
+
}
|
|
199
|
+
this.schedulerRegistry.addTimeout(key, timeout);
|
|
200
|
+
return { delay };
|
|
201
|
+
}
|
|
202
|
+
/**
|
|
203
|
+
* Schedule poll for finalization
|
|
204
|
+
* @param args - Arguments to register poll for finalization
|
|
205
|
+
* @returns Response object with isScheduled property indicating the poll is scheduled
|
|
206
|
+
*/
|
|
207
|
+
async registerPoll({ maciAddress, pollId, chain, mode, deploymentBlockNumber, sessionKeyAddress, approval, }) {
|
|
208
|
+
const { endDate, isPollTallied } = await this.getPollFinalizationData({
|
|
209
|
+
maciAddress,
|
|
210
|
+
pollId,
|
|
211
|
+
chain,
|
|
212
|
+
sessionKeyAddress,
|
|
213
|
+
approval,
|
|
214
|
+
});
|
|
215
|
+
if (isPollTallied) {
|
|
216
|
+
this.logger.error(`Error: ${ErrorCodes.POLL_ALREADY_TALLIED}, poll has already been tallied`);
|
|
217
|
+
throw new Error(ErrorCodes.POLL_ALREADY_TALLIED.toString());
|
|
218
|
+
}
|
|
219
|
+
const { isScheduled } = await this.isPollScheduled({
|
|
220
|
+
maciAddress,
|
|
221
|
+
pollId,
|
|
222
|
+
chain,
|
|
223
|
+
});
|
|
224
|
+
if (isScheduled) {
|
|
225
|
+
this.logger.error(`Error: ${ErrorCodes.POLL_ALREADY_SCHEDULED}, poll is already scheduled`);
|
|
226
|
+
throw new Error(ErrorCodes.POLL_ALREADY_SCHEDULED.toString());
|
|
227
|
+
}
|
|
228
|
+
await this.setupPollFinalization({
|
|
229
|
+
maciAddress,
|
|
230
|
+
pollId,
|
|
231
|
+
chain,
|
|
232
|
+
deploymentBlockNumber,
|
|
233
|
+
mode,
|
|
234
|
+
endDate,
|
|
235
|
+
merged: false,
|
|
236
|
+
proofsGenerated: false,
|
|
237
|
+
});
|
|
238
|
+
return { isScheduled: true };
|
|
239
|
+
}
|
|
240
|
+
/**
|
|
241
|
+
* Delete scheduled poll
|
|
242
|
+
* @param args - Arguments to identify the scheduled poll
|
|
243
|
+
* @returns Response object with isScheduled property indicating the poll is no longer scheduled
|
|
244
|
+
*/
|
|
245
|
+
async deleteScheduledPoll(scheduledPoll) {
|
|
246
|
+
const key = getPollKeyFromObject(scheduledPoll);
|
|
247
|
+
const isPollTimeoutScheduled = this.schedulerRegistry.doesExist("timeout", key);
|
|
248
|
+
if (isPollTimeoutScheduled) {
|
|
249
|
+
this.schedulerRegistry.deleteTimeout(key);
|
|
250
|
+
}
|
|
251
|
+
await this.redisService.delete(key);
|
|
252
|
+
return { isScheduled: false };
|
|
253
|
+
}
|
|
254
|
+
/**
|
|
255
|
+
* Restore all scheduled timeouts from Redis
|
|
256
|
+
*/
|
|
257
|
+
async restoreTimeouts() {
|
|
258
|
+
const polls = await this.redisService.getAll();
|
|
259
|
+
await Promise.all(polls.map(async ({ key, value }) => {
|
|
260
|
+
this.logger.log(`Restoring timeout for poll key: ${key}`);
|
|
261
|
+
try {
|
|
262
|
+
if (!value) {
|
|
263
|
+
await this.redisService.delete(key);
|
|
264
|
+
return;
|
|
265
|
+
}
|
|
266
|
+
const poll = JSON.parse(value);
|
|
267
|
+
const { endDate, isPollTallied } = await this.getPollFinalizationData({
|
|
268
|
+
maciAddress: poll.maciAddress,
|
|
269
|
+
pollId: poll.pollId,
|
|
270
|
+
chain: poll.chain,
|
|
271
|
+
});
|
|
272
|
+
if (isPollTallied) {
|
|
273
|
+
await this.deleteScheduledPoll({
|
|
274
|
+
maciAddress: poll.maciAddress,
|
|
275
|
+
pollId: poll.pollId,
|
|
276
|
+
chain: poll.chain,
|
|
277
|
+
});
|
|
278
|
+
return;
|
|
279
|
+
}
|
|
280
|
+
const { delay } = await this.setupPollFinalization({ ...poll, endDate });
|
|
281
|
+
this.logger.log(`poll ${value} to be finalized at ${new Date(Date.now() + delay).toISOString()}`);
|
|
282
|
+
}
|
|
283
|
+
catch (error) {
|
|
284
|
+
this.logger.error(`Error restoring timeout for poll key: ${key}`, error);
|
|
285
|
+
}
|
|
286
|
+
}));
|
|
287
|
+
}
|
|
288
|
+
};
|
|
289
|
+
SchedulerService = SchedulerService_1 = __decorate([
|
|
290
|
+
Injectable(),
|
|
291
|
+
__metadata("design:paramtypes", [SessionKeysService,
|
|
292
|
+
RedisService,
|
|
293
|
+
SchedulerRegistry,
|
|
294
|
+
ProofGeneratorService])
|
|
295
|
+
], SchedulerService);
|
|
296
|
+
export { SchedulerService };
|
|
297
|
+
//# sourceMappingURL=scheduler.service.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"scheduler.service.js","sourceRoot":"","sources":["../../../ts/scheduler/scheduler.service.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,65 @@
|
|
|
1
|
+
import type { IIdentityScheduledPoll, IScheduledPoll } from "../redis/types";
|
|
2
|
+
import type { Hex } from "viem";
|
|
3
|
+
/**
|
|
4
|
+
* Identity scheduled poll arguments with required arguments for signer
|
|
5
|
+
*/
|
|
6
|
+
export interface IIdentityPollWithSignerArgs extends IIdentityScheduledPoll {
|
|
7
|
+
/**
|
|
8
|
+
* Approval for the session key
|
|
9
|
+
*/
|
|
10
|
+
approval?: string;
|
|
11
|
+
/**
|
|
12
|
+
* Session key address
|
|
13
|
+
*/
|
|
14
|
+
sessionKeyAddress?: Hex;
|
|
15
|
+
}
|
|
16
|
+
/**
|
|
17
|
+
* Scheduled poll arguments with required arguments for signer
|
|
18
|
+
*/
|
|
19
|
+
export interface ISchedulePollWithSignerArgs extends IScheduledPoll {
|
|
20
|
+
/**
|
|
21
|
+
* Approval for the session key
|
|
22
|
+
*/
|
|
23
|
+
approval?: string;
|
|
24
|
+
/**
|
|
25
|
+
* Session key address
|
|
26
|
+
*/
|
|
27
|
+
sessionKeyAddress?: Hex;
|
|
28
|
+
}
|
|
29
|
+
/**
|
|
30
|
+
* poll end date and is tallied response
|
|
31
|
+
*/
|
|
32
|
+
export interface IGetPollFinalizationData {
|
|
33
|
+
/**
|
|
34
|
+
* End date of the poll
|
|
35
|
+
*/
|
|
36
|
+
endDate: number;
|
|
37
|
+
/**
|
|
38
|
+
* Indicates if the poll is tallied
|
|
39
|
+
*/
|
|
40
|
+
isPollTallied: boolean;
|
|
41
|
+
/**
|
|
42
|
+
* Indicates if the poll has been merged
|
|
43
|
+
*/
|
|
44
|
+
isPollMerged: boolean;
|
|
45
|
+
}
|
|
46
|
+
/**
|
|
47
|
+
* Is poll scheduled response
|
|
48
|
+
*/
|
|
49
|
+
export interface IIsPollScheduledResponse {
|
|
50
|
+
/**
|
|
51
|
+
* Indicates if the poll is scheduled
|
|
52
|
+
*
|
|
53
|
+
*/
|
|
54
|
+
isScheduled: boolean;
|
|
55
|
+
}
|
|
56
|
+
/**
|
|
57
|
+
* Setup poll finalization response
|
|
58
|
+
*/
|
|
59
|
+
export interface ISetupPollFinalizationResponse {
|
|
60
|
+
/**
|
|
61
|
+
* delay in milliseconds until poll finalization is executed
|
|
62
|
+
*/
|
|
63
|
+
delay: number;
|
|
64
|
+
}
|
|
65
|
+
//# sourceMappingURL=types.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../ts/scheduler/types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,sBAAsB,EAAE,cAAc,EAAE,MAAM,gBAAgB,CAAC;AAC7E,OAAO,KAAK,EAAE,GAAG,EAAE,MAAM,MAAM,CAAC;AAEhC;;GAEG;AACH,MAAM,WAAW,2BAA4B,SAAQ,sBAAsB;IACzE;;OAEG;IACH,QAAQ,CAAC,EAAE,MAAM,CAAC;IAElB;;OAEG;IACH,iBAAiB,CAAC,EAAE,GAAG,CAAC;CACzB;AAED;;GAEG;AACH,MAAM,WAAW,2BAA4B,SAAQ,cAAc;IACjE;;OAEG;IACH,QAAQ,CAAC,EAAE,MAAM,CAAC;IAElB;;OAEG;IACH,iBAAiB,CAAC,EAAE,GAAG,CAAC;CACzB;AAED;;GAEG;AACH,MAAM,WAAW,wBAAwB;IACvC;;OAEG;IACH,OAAO,EAAE,MAAM,CAAC;IAEhB;;OAEG;IACH,aAAa,EAAE,OAAO,CAAC;IAEvB;;OAEG;IACH,YAAY,EAAE,OAAO,CAAC;CACvB;AAED;;GAEG;AACH,MAAM,WAAW,wBAAwB;IACvC;;;OAGG;IACH,WAAW,EAAE,OAAO,CAAC;CACtB;AAED;;GAEG;AACH,MAAM,WAAW,8BAA8B;IAC7C;;OAEG;IACH,KAAK,EAAE,MAAM,CAAC;CACf"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.js","sourceRoot":"","sources":["../../../ts/scheduler/types.ts"],"names":[],"mappings":""}
|
|
@@ -29,8 +29,8 @@ describe("SessionKeysController", () => {
|
|
|
29
29
|
jest.clearAllMocks();
|
|
30
30
|
});
|
|
31
31
|
describe("v1/session-keys/generate", () => {
|
|
32
|
-
test("should return a session key address", () => {
|
|
33
|
-
const data = sessionKeysController.generateSessionKey();
|
|
32
|
+
test("should return a session key address", async () => {
|
|
33
|
+
const data = await sessionKeysController.generateSessionKey();
|
|
34
34
|
expect(data).toStrictEqual(defaultGenerateSessionKeyReturn);
|
|
35
35
|
});
|
|
36
36
|
});
|
|
@@ -1 +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,
|
|
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,KAAK,IAAI,EAAE;YACrD,MAAM,IAAI,GAAG,MAAM,qBAAqB,CAAC,kBAAkB,EAAE,CAAC;YAC9D,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"}
|
|
@@ -1,18 +1,36 @@
|
|
|
1
|
+
import { ESupportedChains } from "@maci-protocol/sdk";
|
|
2
|
+
import { createKernelAccount, createKernelAccountClient } from "@zerodev/sdk";
|
|
1
3
|
import dotenv from "dotenv";
|
|
2
4
|
import { zeroAddress } from "viem";
|
|
3
|
-
import { ErrorCodes
|
|
5
|
+
import { ErrorCodes } from "../../common";
|
|
4
6
|
import { FileService } from "../../file/file.service";
|
|
5
7
|
import { SessionKeysService } from "../sessionKeys.service";
|
|
6
8
|
import { generateApproval } from "./utils";
|
|
7
9
|
dotenv.config();
|
|
10
|
+
jest.mock("@zerodev/sdk", () => ({
|
|
11
|
+
...jest.requireActual("@zerodev/sdk"),
|
|
12
|
+
createKernelAccount: jest.fn(),
|
|
13
|
+
createKernelAccountClient: jest.fn(),
|
|
14
|
+
}));
|
|
15
|
+
jest.mock("@zerodev/permissions", () => ({
|
|
16
|
+
...jest.requireActual("@zerodev/permissions"),
|
|
17
|
+
serializePermissionAccount: jest.fn().mockResolvedValue("approval"),
|
|
18
|
+
deserializePermissionAccount: jest.fn().mockResolvedValue({}),
|
|
19
|
+
}));
|
|
8
20
|
describe("SessionKeysService", () => {
|
|
9
21
|
const fileService = new FileService();
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
22
|
+
const mockedKernelAccount = { mockedAccount: true };
|
|
23
|
+
const mockedKernelAccountClient = { mockedAccountClient: true };
|
|
24
|
+
beforeEach(() => {
|
|
25
|
+
createKernelAccount.mockResolvedValue(mockedKernelAccount);
|
|
26
|
+
createKernelAccountClient.mockResolvedValue(mockedKernelAccountClient);
|
|
27
|
+
});
|
|
28
|
+
afterEach(() => {
|
|
29
|
+
jest.clearAllMocks();
|
|
13
30
|
});
|
|
14
31
|
describe("generateSessionKey", () => {
|
|
15
32
|
test("should generate and store a session key", async () => {
|
|
33
|
+
const sessionKeysService = new SessionKeysService(fileService);
|
|
16
34
|
const sessionKeyAddress = await sessionKeysService.generateSessionKey();
|
|
17
35
|
expect(sessionKeyAddress).toBeDefined();
|
|
18
36
|
expect(sessionKeyAddress).not.toEqual(zeroAddress);
|
|
@@ -22,6 +40,7 @@ describe("SessionKeysService", () => {
|
|
|
22
40
|
});
|
|
23
41
|
describe("deactivateSessionKey", () => {
|
|
24
42
|
test("should delete a session key", async () => {
|
|
43
|
+
const sessionKeysService = new SessionKeysService(fileService);
|
|
25
44
|
const sessionKeyAddress = await sessionKeysService.generateSessionKey();
|
|
26
45
|
expect(sessionKeyAddress).toBeDefined();
|
|
27
46
|
expect(sessionKeyAddress).not.toEqual(zeroAddress);
|
|
@@ -34,27 +53,23 @@ describe("SessionKeysService", () => {
|
|
|
34
53
|
});
|
|
35
54
|
describe("generateClientFromSessionKey", () => {
|
|
36
55
|
test("should fail to generate a client with an invalid approval", async () => {
|
|
56
|
+
createKernelAccountClient.mockRejectedValue(new Error());
|
|
57
|
+
const sessionKeysService = new SessionKeysService(fileService);
|
|
37
58
|
const sessionKeyAddress = await sessionKeysService.generateSessionKey();
|
|
38
|
-
await expect(sessionKeysService.generateClientFromSessionKey(sessionKeyAddress.sessionKeyAddress, "0xinvalid",
|
|
59
|
+
await expect(sessionKeysService.generateClientFromSessionKey(sessionKeyAddress.sessionKeyAddress, "0xinvalid", ESupportedChains.OptimismSepolia)).rejects.toThrow(ErrorCodes.INVALID_APPROVAL.toString());
|
|
39
60
|
});
|
|
40
61
|
test("should throw when given a non existent session key address", async () => {
|
|
62
|
+
const sessionKeysService = new SessionKeysService(fileService);
|
|
41
63
|
const approval = await generateApproval(zeroAddress);
|
|
42
|
-
await expect(sessionKeysService.generateClientFromSessionKey(zeroAddress, approval,
|
|
64
|
+
await expect(sessionKeysService.generateClientFromSessionKey(zeroAddress, approval, ESupportedChains.OptimismSepolia)).rejects.toThrow(ErrorCodes.SESSION_KEY_NOT_FOUND.toString());
|
|
43
65
|
});
|
|
44
66
|
test("should generate a client from a session key", async () => {
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
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 });
|
|
67
|
+
const sessionKeysService = new SessionKeysService(fileService);
|
|
68
|
+
const { sessionKeyAddress } = await sessionKeysService.generateSessionKey();
|
|
69
|
+
const approval = await generateApproval(sessionKeyAddress);
|
|
70
|
+
const client = await sessionKeysService.generateClientFromSessionKey(sessionKeyAddress, approval, ESupportedChains.OptimismSepolia);
|
|
71
|
+
expect(createKernelAccountClient).toHaveBeenCalledTimes(1);
|
|
72
|
+
expect(client).toEqual(mockedKernelAccountClient);
|
|
58
73
|
});
|
|
59
74
|
});
|
|
60
75
|
});
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"sessionKeys.service.test.js","sourceRoot":"","sources":["../../../../ts/sessionKeys/__tests__/sessionKeys.service.test.ts"],"names":[],"mappings":"AAAA,OAAO,MAAM,MAAM,QAAQ,CAAC;AAC5B,OAAO,EAAE,WAAW,EAAE,MAAM,MAAM,CAAC;AAEnC,OAAO,EAAE,UAAU,EAAE,
|
|
1
|
+
{"version":3,"file":"sessionKeys.service.test.js","sourceRoot":"","sources":["../../../../ts/sessionKeys/__tests__/sessionKeys.service.test.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { type Policy } from "@zerodev/permissions";
|
|
2
|
-
import { CreateKernelAccountReturnType } from "@zerodev/sdk";
|
|
2
|
+
import { type CreateKernelAccountReturnType } from "@zerodev/sdk";
|
|
3
3
|
import { type Hex } from "viem";
|
|
4
4
|
export declare const ENTRY_POINT: import("@zerodev/sdk/types").EntryPointType<"0.7">;
|
|
5
5
|
export declare const KERNEL_VERSION: import("@zerodev/sdk/types").KERNEL_V3_VERSION_TYPE;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"utils.d.ts","sourceRoot":"","sources":["../../../../ts/sessionKeys/__tests__/utils.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"utils.d.ts","sourceRoot":"","sources":["../../../../ts/sessionKeys/__tests__/utils.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,KAAK,MAAM,EAAqD,MAAM,sBAAsB,CAAC;AAGtG,OAAO,EAA8C,KAAK,6BAA6B,EAAE,MAAM,cAAc,CAAC;AAG9G,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"}
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import { ESupportedChains } from "@maci-protocol/sdk";
|
|
1
2
|
import { signerToEcdsaValidator } from "@zerodev/ecdsa-validator";
|
|
2
3
|
import { serializePermissionAccount, toPermissionValidator } from "@zerodev/permissions";
|
|
3
4
|
import { toSudoPolicy, toTimestampPolicy } from "@zerodev/permissions/policies";
|
|
@@ -6,8 +7,8 @@ import { addressToEmptyAccount, createKernelAccount } from "@zerodev/sdk";
|
|
|
6
7
|
import { getEntryPoint, KERNEL_V3_1 } from "@zerodev/sdk/constants";
|
|
7
8
|
import dotenv from "dotenv";
|
|
8
9
|
import { privateKeyToAccount } from "viem/accounts";
|
|
9
|
-
import { ESupportedNetworks } from "../../common";
|
|
10
10
|
import { getPublicClient } from "../../common/accountAbstraction";
|
|
11
|
+
import { getWallet } from "../../common/chain";
|
|
11
12
|
dotenv.config();
|
|
12
13
|
export const ENTRY_POINT = getEntryPoint("0.7");
|
|
13
14
|
export const KERNEL_VERSION = KERNEL_V3_1;
|
|
@@ -27,8 +28,9 @@ export const generateTimestampPolicy = (endTime, start) => toTimestampPolicy({
|
|
|
27
28
|
* @returns - the kernel account
|
|
28
29
|
*/
|
|
29
30
|
export const getKernelAccount = async (sessionKeyAddress) => {
|
|
30
|
-
const publicClient = getPublicClient(
|
|
31
|
-
const
|
|
31
|
+
const publicClient = await getPublicClient(ESupportedChains.Localhost);
|
|
32
|
+
const wallet = getWallet();
|
|
33
|
+
const sessionKeySigner = privateKeyToAccount(wallet.privateKey);
|
|
32
34
|
const ecdsaValidator = await signerToEcdsaValidator(publicClient, {
|
|
33
35
|
signer: sessionKeySigner,
|
|
34
36
|
entryPoint: ENTRY_POINT,
|
|
@@ -42,7 +44,7 @@ export const getKernelAccount = async (sessionKeyAddress) => {
|
|
|
42
44
|
signer: emptySessionKeySigner,
|
|
43
45
|
policies: [toSudoPolicy({})],
|
|
44
46
|
});
|
|
45
|
-
|
|
47
|
+
return await createKernelAccount(publicClient, {
|
|
46
48
|
entryPoint: ENTRY_POINT,
|
|
47
49
|
kernelVersion: KERNEL_VERSION,
|
|
48
50
|
plugins: {
|
|
@@ -50,7 +52,6 @@ export const getKernelAccount = async (sessionKeyAddress) => {
|
|
|
50
52
|
regular: permissionPlugin,
|
|
51
53
|
},
|
|
52
54
|
});
|
|
53
|
-
return sessionKeyAccount;
|
|
54
55
|
};
|
|
55
56
|
/**
|
|
56
57
|
* Generate an approval for a session key
|
|
@@ -59,6 +60,6 @@ export const getKernelAccount = async (sessionKeyAddress) => {
|
|
|
59
60
|
*/
|
|
60
61
|
export const generateApproval = async (sessionKeyAddress) => {
|
|
61
62
|
const sessionKeyAccount = await getKernelAccount(sessionKeyAddress);
|
|
62
|
-
return serializePermissionAccount(sessionKeyAccount);
|
|
63
|
+
return await serializePermissionAccount(sessionKeyAccount);
|
|
63
64
|
};
|
|
64
65
|
//# sourceMappingURL=utils.js.map
|
|
@@ -1 +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,
|
|
1
|
+
{"version":3,"file":"utils.js","sourceRoot":"","sources":["../../../../ts/sessionKeys/__tests__/utils.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,gBAAgB,EAAE,MAAM,oBAAoB,CAAC;AACtD,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,EAAsC,MAAM,cAAc,CAAC;AAC9G,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,eAAe,EAAE,MAAM,iCAAiC,CAAC;AAClE,OAAO,EAAE,SAAS,EAAE,MAAM,oBAAoB,CAAC;AAE/C,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,MAAM,eAAe,CAAC,gBAAgB,CAAC,SAAS,CAAC,CAAC;IACvE,MAAM,MAAM,GAAG,SAAS,EAAE,CAAC;IAE3B,MAAM,gBAAgB,GAAG,mBAAmB,CAAC,MAAM,CAAC,UAAiB,CAAC,CAAC;IACvE,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,OAAO,MAAM,mBAAmB,CAAC,YAAY,EAAE;QAC7C,UAAU,EAAE,WAAW;QACvB,aAAa,EAAE,cAAc;QAC7B,OAAO,EAAE;YACP,IAAI,EAAE,cAAc;YACpB,OAAO,EAAE,gBAAgB;SAC1B;KACF,CAAC,CAAC;AACL,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,MAAM,0BAA0B,CAAC,iBAAiB,CAAC,CAAC;AAC7D,CAAC,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"KernelEIP1193Provider.d.ts","sourceRoot":"","sources":["../../../../ts/sessionKeys/provider/KernelEIP1193Provider.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,mBAAmB,EAAE,MAAM,cAAc,CAAC;
|
|
1
|
+
{"version":3,"file":"KernelEIP1193Provider.d.ts","sourceRoot":"","sources":["../../../../ts/sessionKeys/provider/KernelEIP1193Provider.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,mBAAmB,EAAE,MAAM,cAAc,CAAC;AAExD,OAAO,EAAE,kBAAkB,EAAY,MAAM,MAAM,CAAC;AAEpD,OAAO,EAAE,YAAY,EAAE,MAAM,QAAQ,CAAC;AAEtC,OAAO,KAAK,EAAE,iBAAiB,EAAE,gBAAgB,EAAQ,GAAG,EAA8C,MAAM,MAAM,CAAC;AAEvH,eAAO,MAAM,iBAAiB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAG5B,CAAC;AAEH,KAAK,6BAA6B,GAAG,UAAU,CAC7C,OAAO,kBAAkB,CAAC,OAAO,iBAAiB,EAAE,eAAe,CAAC,CACrE,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC;AAEb,eAAO,MAAM,oBAAoB,GAAI,MAAM,6BAA6B,KAAG,GAKvE,CAAC;AAEL,qBAAa,qBAAsB,SAAQ,YAAY;IACrD,OAAO,CAAC,YAAY,CAAsB;gBAE9B,YAAY,EAAE,mBAAmB;IAKvC,OAAO,CAAC,EAAE,MAAM,EAAE,MAAW,EAAE,EAAE,iBAAiB,GAAG,UAAU,CAAC,gBAAgB,CAAC;IAoBvF,OAAO,CAAC,wBAAwB;IAQhC,OAAO,CAAC,iBAAiB;YAQX,wBAAwB;YAexB,aAAa;YAiBb,kBAAkB;YAiBlB,wBAAwB;CA0BvC"}
|