@ercworldio/blockchain-shared 1.0.3-dev.4 → 1.0.3-dev.4-PROJ-1296.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/build/chains/networks_dev copy.json +793 -0
- package/build/chains/networks_dev.json +12 -12
- package/build/chains/networks_prod-sh.json +40 -4
- package/build/chains/networks_prod-yb.json +40 -4
- package/build/contracts/Escrow.d.ts +66 -5
- package/build/contracts/Escrow.d.ts.map +1 -1
- package/build/contracts/Escrow.js +93 -2
- package/build/contracts/EscrowErrors.d.ts +85 -1
- package/build/contracts/EscrowErrors.d.ts.map +1 -1
- package/build/contracts/EscrowErrors.js +59 -14
- package/build/contracts/artifacts/Escrow.json +0 -12
- package/build/contracts/contract-events/AccessControlEvents.d.ts +12 -2
- package/build/contracts/contract-events/AccessControlEvents.d.ts.map +1 -1
- package/build/contracts/contract-events/AccessControlEvents.js +29 -5
- package/build/contracts/contract-events/EscrowEvents.d.ts +134 -2
- package/build/contracts/contract-events/EscrowEvents.d.ts.map +1 -1
- package/build/contracts/contract-events/EscrowEvents.js +67 -17
- package/build/contracts/contract-events/types/events.d.ts +35 -1
- package/build/contracts/contract-events/types/events.d.ts.map +1 -1
- package/build/contracts/typechain-types/contracts/escrow/Escrow.d.ts +1 -4
- package/build/contracts/typechain-types/contracts/escrow/Escrow.d.ts.map +1 -1
- package/build/contracts/typechain-types/contracts/lib/Events.d.ts +1 -4
- package/build/contracts/typechain-types/contracts/lib/Events.d.ts.map +1 -1
- package/build/contracts/typechain-types/factories/contracts/escrow/EscrowAccessControl__factory.d.ts +1 -1
- package/build/contracts/typechain-types/factories/contracts/escrow/EscrowAccessControl__factory.js +1 -1
- package/build/contracts/typechain-types/factories/contracts/escrow/Escrow__factory.d.ts +1 -6
- package/build/contracts/typechain-types/factories/contracts/escrow/Escrow__factory.d.ts.map +1 -1
- package/build/contracts/typechain-types/factories/contracts/escrow/Escrow__factory.js +1 -7
- package/build/contracts/typechain-types/factories/contracts/lib/Events__factory.d.ts +1 -6
- package/build/contracts/typechain-types/factories/contracts/lib/Events__factory.d.ts.map +1 -1
- package/build/contracts/typechain-types/factories/contracts/lib/Events__factory.js +1 -7
- package/build/contracts/types/escrow.d.ts +13 -1
- package/build/contracts/types/escrow.d.ts.map +1 -1
- package/build/contracts/types/escrow.js +4 -0
- package/build/entities/AdminOperationThresholds.d.ts +0 -1
- package/build/entities/AdminOperationThresholds.d.ts.map +1 -1
- package/build/entities/AdminOperationThresholds.js +1 -5
- package/build/entities/AdminWithdrawal.d.ts +20 -0
- package/build/entities/AdminWithdrawal.d.ts.map +1 -0
- package/build/entities/AdminWithdrawal.js +88 -0
- package/build/entities/ClaimJob.d.ts +1 -0
- package/build/entities/ClaimJob.d.ts.map +1 -1
- package/build/entities/ClaimJob.js +4 -0
- package/build/entities/CryptoOperationType.d.ts +18 -0
- package/build/entities/CryptoOperationType.d.ts.map +1 -0
- package/build/entities/CryptoOperationType.js +50 -0
- package/build/entities/EscrowRoles.js +1 -1
- package/build/entities/GlobalTimelock.d.ts +0 -1
- package/build/entities/GlobalTimelock.d.ts.map +1 -1
- package/build/entities/GlobalTimelock.js +1 -5
- package/build/entities/GranularTimelock .d.ts +0 -1
- package/build/entities/GranularTimelock .d.ts.map +1 -1
- package/build/entities/GranularTimelock .js +0 -4
- package/build/entities/GranularTimelock.d.ts +11 -0
- package/build/entities/GranularTimelock.d.ts.map +1 -0
- package/build/entities/GranularTimelock.js +52 -0
- package/build/entities/RoleHash.js +1 -1
- package/build/entities/ScheduleTransactionJob.d.ts +23 -0
- package/build/entities/ScheduleTransactionJob.d.ts.map +1 -0
- package/build/entities/ScheduleTransactionJob.js +89 -0
- package/build/entities/ScheduleTransactionJobHistory.d.ts +17 -0
- package/build/entities/ScheduleTransactionJobHistory.d.ts.map +1 -0
- package/build/entities/ScheduleTransactionJobHistory.js +66 -0
- package/build/entities/TokenExecutionThresholds.d.ts +0 -1
- package/build/entities/TokenExecutionThresholds.d.ts.map +1 -1
- package/build/entities/TokenExecutionThresholds.js +1 -5
- package/build/entities/WithdrawalCommitment.d.ts +15 -0
- package/build/entities/WithdrawalCommitment.d.ts.map +1 -0
- package/build/entities/WithdrawalCommitment.js +64 -0
- package/build/entities/index.d.ts +22 -0
- package/build/entities/index.d.ts.map +1 -0
- package/build/entities/index.js +37 -0
- package/build/errors/errors.d.ts +30 -0
- package/build/errors/errors.d.ts.map +1 -1
- package/build/errors/errors.js +64 -2
- package/build/index.d.ts +6 -9
- package/build/index.d.ts.map +1 -1
- package/build/index.js +22 -11
- package/build/interfaces.d.ts +2 -2
- package/build/interfaces.d.ts.map +1 -1
- package/build/services/AlchemyWebhooks.d.ts.map +1 -1
- package/build/services/AlchemyWebhooks.js +33 -29
- package/build/services/AzureEventHubHandler.d.ts.map +1 -1
- package/build/services/AzureEventHubHandler.js +17 -5
- package/build/services/ClaimJobService.d.ts +5 -2
- package/build/services/ClaimJobService.d.ts.map +1 -1
- package/build/services/ClaimJobService.js +135 -24
- package/build/services/ClaimJobServiceStatic.d.ts +9 -0
- package/build/services/ClaimJobServiceStatic.d.ts.map +1 -0
- package/build/services/ClaimJobServiceStatic.js +54 -0
- package/build/services/SweepJobService.d.ts +3 -3
- package/build/services/SweepJobService.d.ts.map +1 -1
- package/build/services/SweepJobService.js +7 -12
- package/build/services/WithdrawalService.d.ts +10 -0
- package/build/services/WithdrawalService.d.ts.map +1 -0
- package/build/services/WithdrawalService.js +36 -0
- package/build/services/db/multisig/MultisigService.d.ts +31 -0
- package/build/services/db/multisig/MultisigService.d.ts.map +1 -0
- package/build/services/db/multisig/MultisigService.js +134 -0
- package/build/services/db/roles/ContractRoles.d.ts +2 -2
- package/build/services/db/roles/ContractRoles.d.ts.map +1 -1
- package/build/services/db/roles/ContractRoles.js +18 -12
- package/build/services/db/timelock/ScheduleTransactionJobHistoryService.d.ts +14 -0
- package/build/services/db/timelock/ScheduleTransactionJobHistoryService.d.ts.map +1 -0
- package/build/services/db/timelock/ScheduleTransactionJobHistoryService.js +63 -0
- package/build/services/db/timelock/ScheduleTransactionService.d.ts +32 -0
- package/build/services/db/timelock/ScheduleTransactionService.d.ts.map +1 -0
- package/build/services/db/timelock/ScheduleTransactionService.js +212 -0
- package/build/services/types/azure_event_hub_handler.d.ts +9 -1
- package/build/services/types/azure_event_hub_handler.d.ts.map +1 -1
- package/build/services/types/azure_event_hub_handler.js +8 -0
- package/build/services/types/claim.d.ts +17 -1
- package/build/services/types/claim.d.ts.map +1 -1
- package/build/services/types/claim_job_service.d.ts +9 -1
- package/build/services/types/claim_job_service.d.ts.map +1 -1
- package/build/services/types/db/index.d.ts +3 -0
- package/build/services/types/db/index.d.ts.map +1 -0
- package/build/services/types/db/index.js +18 -0
- package/build/services/types/db/multisig_service.d.ts +154 -0
- package/build/services/types/db/multisig_service.d.ts.map +1 -0
- package/build/services/types/db/multisig_service.js +2 -0
- package/build/services/types/db/timelock.d.ts +28 -0
- package/build/services/types/db/timelock.d.ts.map +1 -0
- package/build/services/types/db/timelock.js +2 -0
- package/build/services/types/db/withdrawal_service.d.ts +16 -0
- package/build/services/types/db/withdrawal_service.d.ts.map +1 -0
- package/build/services/types/db/withdrawal_service.js +2 -0
- package/build/services/types/index.d.ts +1 -0
- package/build/services/types/index.d.ts.map +1 -1
- package/build/services/types/index.js +1 -0
- package/build/services/types/watchdog.d.ts +9 -0
- package/build/services/types/watchdog.d.ts.map +1 -0
- package/build/services/types/watchdog.js +2 -0
- package/build/utils/custodial.d.ts +8 -0
- package/build/utils/custodial.d.ts.map +1 -1
- package/build/utils/custodial.js +23 -2
- package/package.json +6 -3
|
@@ -32,9 +32,17 @@ class AzureEventHubHandler {
|
|
|
32
32
|
Withdrawal: this.config.config.withdrawalEventHubName,
|
|
33
33
|
LowReserves: 'eventsstream',
|
|
34
34
|
CoverageInfo: 'eventsstream',
|
|
35
|
-
RoleGranted:
|
|
36
|
-
RoleRevoked:
|
|
35
|
+
RoleGranted: 'rawtransferlogs',
|
|
36
|
+
RoleRevoked: 'rawtransferlogs',
|
|
37
37
|
TransferLogsRaw: this.config.config.transferLogsRawEventHubName,
|
|
38
|
+
WithdrawalExecuted: 'rawtransferlogs',
|
|
39
|
+
WithdrawalScheduled: 'rawtransferlogs',
|
|
40
|
+
WithdrawalCancelled: 'rawtransferlogs',
|
|
41
|
+
SetTimelockGranular: 'rawtransferlogs',
|
|
42
|
+
SetTokenTimelock: 'rawtransferlogs',
|
|
43
|
+
ConfigureAdminMultisig: 'rawtransferlogs',
|
|
44
|
+
ConfigureTokenMultisig: 'rawtransferlogs',
|
|
45
|
+
AdminWithdraw: 'rawtransferlogs'
|
|
38
46
|
};
|
|
39
47
|
this.logger = (0, Logger_1.createLogger)("AzureEventHubHandler", this.config.pipelineConfig.azureAppName);
|
|
40
48
|
this.initializeEventHubClients();
|
|
@@ -69,10 +77,10 @@ class AzureEventHubHandler {
|
|
|
69
77
|
*/
|
|
70
78
|
sendEvent(eventData) {
|
|
71
79
|
return __awaiter(this, void 0, void 0, function* () {
|
|
72
|
-
|
|
80
|
+
let eventHubName = this.event_name_to_event_hub_name[eventData.eventName];
|
|
73
81
|
if (!eventHubName) {
|
|
74
|
-
this.logger.info(`[AzureEventHubHandler]: Event hub name not found for ${eventData.eventName} event.
|
|
75
|
-
|
|
82
|
+
this.logger.info(`[AzureEventHubHandler]: Event hub name not found for ${eventData.eventName} event. Using 'rawtransferlogs'`);
|
|
83
|
+
eventHubName = this.config.config.transferLogsRawEventHubName ? this.config.config.transferLogsRawEventHubName : 'rawtransferlogs';
|
|
76
84
|
}
|
|
77
85
|
const clientDefault = new event_hubs_1.EventHubProducerClient(this.config.config.azureConnectionStringNotifications, eventHubName, { retryOptions: { retryDelayInMs: 10000 } });
|
|
78
86
|
const eventDataBatch = yield clientDefault.createBatch();
|
|
@@ -127,6 +135,10 @@ class AzureEventHubHandler {
|
|
|
127
135
|
getEventHubClient(eventName) {
|
|
128
136
|
return __awaiter(this, void 0, void 0, function* () {
|
|
129
137
|
try {
|
|
138
|
+
// Fallback to rawtransferlogs if event name is not mapped to a event hub client
|
|
139
|
+
if (!this.event_name_to_event_hub_name[eventName]) {
|
|
140
|
+
return this.eventHubClients.get(this.config.config.transferLogsRawEventHubName || 'rawtransferlogs');
|
|
141
|
+
}
|
|
130
142
|
return this.eventHubClients.get(this.event_name_to_event_hub_name[eventName]);
|
|
131
143
|
}
|
|
132
144
|
catch (error) {
|
|
@@ -2,7 +2,7 @@ import { ClaimJobs } from "../entities/ClaimJob";
|
|
|
2
2
|
import { JobStatus } from "./types/claim";
|
|
3
3
|
import { ChainId } from "../interfaces";
|
|
4
4
|
import { IDatabasePool } from "../interfaces/database";
|
|
5
|
-
import { ClaimJobLockMetadata, ClaimSearchFilters, CreateClaimJobsPayload, MarkCompletePayload, Paginated } from "./types/claim_job_service";
|
|
5
|
+
import { ClaimJobLockMetadata, ClaimJobWithDetails, ClaimSearchFilters, CreateClaimJobsPayload, MarkCompletePayload, Paginated } from "./types/claim_job_service";
|
|
6
6
|
declare class ClaimJobsService {
|
|
7
7
|
private dbPool;
|
|
8
8
|
private errors;
|
|
@@ -12,7 +12,10 @@ declare class ClaimJobsService {
|
|
|
12
12
|
private get_repo;
|
|
13
13
|
private get_history_repo;
|
|
14
14
|
private paginate;
|
|
15
|
-
|
|
15
|
+
get_available_jobs_no_timelock_deprecated: (limit?: number, job_ttl_s?: number, max_retry_count?: number, lock_metadata?: ClaimJobLockMetadata) => Promise<ClaimJobWithDetails[]>;
|
|
16
|
+
get_available_jobs_no_timelock: (limit?: number, job_ttl_s?: number, max_retry_count?: number, lock_metadata?: ClaimJobLockMetadata) => Promise<ClaimJobWithDetails[]>;
|
|
17
|
+
get_available_jobs_with_timelock_deprecated: (limit?: number, job_ttl_s?: number, max_retry_count?: number, lock_metadata?: ClaimJobLockMetadata) => Promise<ClaimJobWithDetails[]>;
|
|
18
|
+
get_available_jobs_with_timelock: (limit?: number, job_ttl_s?: number, max_retry_count?: number, lock_metadata?: ClaimJobLockMetadata) => Promise<ClaimJobWithDetails[]>;
|
|
16
19
|
requeue_expired_jobs: (current_status: JobStatus, ttl_seconds: number, limit: number, lock_owner: string, lock_reason: string, max_retries: number) => Promise<ClaimJobs[]>;
|
|
17
20
|
get_stale_jobs: (status: JobStatus, stale_time_mins: number, ttl_mins: number, lock_owner: string, lock_reason: string, limit?: number) => Promise<ClaimJobs[]>;
|
|
18
21
|
get_stale_jobs_deprecated: (status: JobStatus, stale_time_mins: number, limit?: number) => Promise<ClaimJobs[]>;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ClaimJobService.d.ts","sourceRoot":"","sources":["../../src/services/ClaimJobService.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,sBAAsB,CAAC;AAGjD,OAAO,EAAE,SAAS,
|
|
1
|
+
{"version":3,"file":"ClaimJobService.d.ts","sourceRoot":"","sources":["../../src/services/ClaimJobService.ts"],"names":[],"mappings":"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"}
|
|
@@ -55,41 +55,151 @@ class ClaimJobsService {
|
|
|
55
55
|
items: items || []
|
|
56
56
|
};
|
|
57
57
|
});
|
|
58
|
-
this.
|
|
58
|
+
this.get_available_jobs_no_timelock_deprecated = (...args_1) => __awaiter(this, [...args_1], void 0, function* (limit = 10, job_ttl_s = 120, max_retry_count = 5, lock_metadata = { lock_owner: "claim-worker", lock_reason: "process_queued" }) {
|
|
59
|
+
var _a;
|
|
60
|
+
const repo = this.get_repo();
|
|
61
|
+
const result = yield repo.query(`SELECT accounting.fn_get_available_claim_jobs_no_timelock($1::int, $2::int, $3::int, $4::text, $5::text)`, [limit, job_ttl_s, max_retry_count, lock_metadata.lock_owner, lock_metadata.lock_reason]);
|
|
62
|
+
return (_a = result[0].fn_get_available_claim_jobs_no_timelock) !== null && _a !== void 0 ? _a : [];
|
|
63
|
+
});
|
|
64
|
+
this.get_available_jobs_no_timelock = (...args_1) => __awaiter(this, [...args_1], void 0, function* (limit = 10, job_ttl_s = 120, max_retry_count = 5, lock_metadata = { lock_owner: "claim-worker", lock_reason: "process_queued" }) {
|
|
59
65
|
const repo = this.get_repo();
|
|
60
|
-
const ttlSeconds = job_ttl_s;
|
|
61
|
-
const batchGroupId = (0, uuid_1.v4)();
|
|
62
66
|
const rows = yield repo.query(`
|
|
63
67
|
WITH candidates AS (
|
|
64
68
|
SELECT id
|
|
65
69
|
FROM accounting.claim_jobs
|
|
66
70
|
WHERE job_status = 'queued'
|
|
71
|
+
AND has_timelock = false
|
|
67
72
|
AND (lock_expires_at IS NULL OR lock_expires_at < now())
|
|
73
|
+
AND retry_count < $6
|
|
68
74
|
ORDER BY blockchain, chain_id ASC
|
|
69
75
|
LIMIT $1
|
|
70
76
|
FOR UPDATE SKIP LOCKED
|
|
77
|
+
),
|
|
78
|
+
updated AS (
|
|
79
|
+
UPDATE accounting.claim_jobs cj
|
|
80
|
+
SET
|
|
81
|
+
job_status = 'processing',
|
|
82
|
+
locked_at = now(),
|
|
83
|
+
lock_expires_at = now() + ($2 || ' seconds')::interval,
|
|
84
|
+
batch_group_id = $3,
|
|
85
|
+
metadata = jsonb_set(
|
|
86
|
+
jsonb_set(
|
|
87
|
+
coalesce(cj.metadata, '{}'::jsonb),
|
|
88
|
+
'{lock_owner}', to_jsonb($4::text)
|
|
89
|
+
),
|
|
90
|
+
'{lock_reason}', to_jsonb($5::text)
|
|
91
|
+
),
|
|
92
|
+
updated_at = now()
|
|
93
|
+
FROM candidates c
|
|
94
|
+
WHERE cj.id = c.id
|
|
95
|
+
RETURNING cj.*
|
|
71
96
|
)
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
97
|
+
SELECT
|
|
98
|
+
u.*,
|
|
99
|
+
NULL::text AS commitment_hash,
|
|
100
|
+
NULL::timestamptz AS execute_at,
|
|
101
|
+
(
|
|
102
|
+
SELECT COALESCE(json_agg(json_build_object(
|
|
103
|
+
'name', COALESCE(cr.role_alias, ''),
|
|
104
|
+
'signerAddress', cs.signer_address,
|
|
105
|
+
'contractAddress', cs.contract_address,
|
|
106
|
+
'createdAt', cs.created_at,
|
|
107
|
+
'updatedAt', cs.updated_at,
|
|
108
|
+
'operationType', cs.operation_type,
|
|
109
|
+
'v', cs.v,
|
|
110
|
+
'r', cs.r,
|
|
111
|
+
's', cs.s
|
|
112
|
+
)), '[]'::json)
|
|
113
|
+
FROM multisig.crypto_signatures cs
|
|
114
|
+
LEFT JOIN multisig.crypto_escrow_roles cer
|
|
115
|
+
ON LOWER(cer.wallet_address) = LOWER(cs.signer_address)
|
|
116
|
+
AND LOWER(cer.blockchain) = LOWER(cs.blockchain)
|
|
117
|
+
AND cer.chain_id = cs.chain_id
|
|
118
|
+
AND LOWER(cer.contract_address) = LOWER(cs.contract_address)
|
|
119
|
+
LEFT JOIN multisig.crypto_role cr ON cr.id = cer.role_id
|
|
120
|
+
WHERE cs.reference_id = u.request_id
|
|
121
|
+
AND cs.v IS NOT NULL
|
|
122
|
+
AND cs.r IS NOT NULL
|
|
123
|
+
AND cs.s IS NOT NULL
|
|
124
|
+
) AS multisig_signatures
|
|
125
|
+
FROM updated u;
|
|
126
|
+
`, [limit, job_ttl_s, (0, uuid_1.v4)(), lock_metadata.lock_owner, lock_metadata.lock_reason, max_retry_count]);
|
|
127
|
+
return rows;
|
|
128
|
+
});
|
|
129
|
+
this.get_available_jobs_with_timelock_deprecated = (...args_1) => __awaiter(this, [...args_1], void 0, function* (limit = 10, job_ttl_s = 120, max_retry_count = 5, lock_metadata = { lock_owner: "claim-worker", lock_reason: "process_queued" }) {
|
|
130
|
+
var _a;
|
|
131
|
+
const repo = this.get_repo();
|
|
132
|
+
const result = yield repo.query(`SELECT accounting.fn_get_available_claim_jobs_with_timelock($1::int, $2::int, $3::int, $4::text, $5::text)`, [limit, job_ttl_s, max_retry_count, lock_metadata.lock_owner, lock_metadata.lock_reason]);
|
|
133
|
+
return (_a = result[0].fn_get_available_claim_jobs_with_timelock) !== null && _a !== void 0 ? _a : [];
|
|
134
|
+
});
|
|
135
|
+
this.get_available_jobs_with_timelock = (...args_1) => __awaiter(this, [...args_1], void 0, function* (limit = 10, job_ttl_s = 120, max_retry_count = 5, lock_metadata = { lock_owner: "claim-worker", lock_reason: "process_queued" }) {
|
|
136
|
+
const repo = this.get_repo();
|
|
137
|
+
const rows = yield repo.query(`
|
|
138
|
+
WITH scheduled_status AS (
|
|
139
|
+
SELECT id FROM multisig.crypto_commitment_statuses WHERE status = 'scheduled'
|
|
140
|
+
),
|
|
141
|
+
candidates AS (
|
|
142
|
+
SELECT cj.id
|
|
143
|
+
FROM accounting.claim_jobs cj
|
|
144
|
+
JOIN multisig.crypto_withdrawal_commitment cwc ON cwc.request_id = cj.request_id
|
|
145
|
+
JOIN scheduled_status ss ON cwc.status_id = ss.id
|
|
146
|
+
WHERE cj.job_status = 'queued'
|
|
147
|
+
AND cj.has_timelock = true
|
|
148
|
+
AND (cj.lock_expires_at IS NULL OR cj.lock_expires_at < now())
|
|
149
|
+
AND cj.retry_count < $6
|
|
150
|
+
AND cwc.execute_at < now()
|
|
151
|
+
ORDER BY cj.blockchain, cj.chain_id ASC
|
|
152
|
+
LIMIT $1
|
|
153
|
+
FOR UPDATE SKIP LOCKED
|
|
154
|
+
),
|
|
155
|
+
updated AS (
|
|
156
|
+
UPDATE accounting.claim_jobs cj
|
|
157
|
+
SET
|
|
158
|
+
job_status = 'processing',
|
|
159
|
+
locked_at = now(),
|
|
160
|
+
lock_expires_at = now() + ($2 || ' seconds')::interval,
|
|
161
|
+
batch_group_id = $3,
|
|
162
|
+
metadata = jsonb_set(
|
|
163
|
+
jsonb_set(
|
|
164
|
+
coalesce(cj.metadata, '{}'::jsonb),
|
|
165
|
+
'{lock_owner}', to_jsonb($4::text)
|
|
166
|
+
),
|
|
167
|
+
'{lock_reason}', to_jsonb($5::text)
|
|
168
|
+
),
|
|
169
|
+
updated_at = now()
|
|
170
|
+
FROM candidates c
|
|
171
|
+
WHERE cj.id = c.id
|
|
172
|
+
RETURNING cj.*
|
|
173
|
+
)
|
|
174
|
+
SELECT
|
|
175
|
+
u.*,
|
|
176
|
+
cwc.commitment_hash,
|
|
177
|
+
cwc.execute_at,
|
|
178
|
+
(
|
|
179
|
+
SELECT COALESCE(json_agg(json_build_object(
|
|
180
|
+
'name', COALESCE(cr.role_alias, ''),
|
|
181
|
+
'signerAddress', cs.signer_address,
|
|
182
|
+
'contractAddress', cs.contract_address,
|
|
183
|
+
'createdAt', cs.created_at,
|
|
184
|
+
'updatedAt', cs.updated_at,
|
|
185
|
+
'operationType', cs.operation_type,
|
|
186
|
+
'v', cs.v,
|
|
187
|
+
'r', cs.r,
|
|
188
|
+
's', cs.s
|
|
189
|
+
)), '[]'::json)
|
|
190
|
+
FROM multisig.crypto_signatures cs
|
|
191
|
+
LEFT JOIN multisig.crypto_escrow_roles cer
|
|
192
|
+
ON LOWER(cer.wallet_address) = LOWER(cs.signer_address)
|
|
193
|
+
AND LOWER(cer.blockchain) = LOWER(cs.blockchain)
|
|
194
|
+
AND cer.chain_id = cs.chain_id
|
|
195
|
+
AND LOWER(cer.contract_address) = LOWER(cs.contract_address)
|
|
196
|
+
LEFT JOIN multisig.crypto_role cr ON cr.id = cer.role_id
|
|
197
|
+
WHERE cs.reference_id = u.request_id
|
|
198
|
+
) AS multisig_signatures
|
|
199
|
+
FROM updated u
|
|
200
|
+
LEFT JOIN multisig.crypto_withdrawal_commitment cwc ON cwc.request_id = u.request_id;
|
|
201
|
+
`, [limit, job_ttl_s, (0, uuid_1.v4)(), lock_metadata.lock_owner, lock_metadata.lock_reason, max_retry_count]);
|
|
202
|
+
return rows;
|
|
93
203
|
});
|
|
94
204
|
this.requeue_expired_jobs = (current_status, ttl_seconds, limit, lock_owner, lock_reason, max_retries) => __awaiter(this, void 0, void 0, function* () {
|
|
95
205
|
const rows = yield this.get_repo().query(`
|
|
@@ -400,6 +510,7 @@ class ClaimJobsService {
|
|
|
400
510
|
entity.token = payload.token;
|
|
401
511
|
entity.decimals = payload.decimals;
|
|
402
512
|
entity.job_status = "queued";
|
|
513
|
+
entity.has_timelock = payload.has_timelock;
|
|
403
514
|
return entity;
|
|
404
515
|
};
|
|
405
516
|
this.dbPool = dbPool;
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import { Pool } from "pg";
|
|
2
|
+
import { ClaimJobs } from "../entities";
|
|
3
|
+
import { RequeueJobConfiguration } from "./types/watchdog";
|
|
4
|
+
import { JobStatus } from "./types";
|
|
5
|
+
declare class ClaimJobServiceStatic {
|
|
6
|
+
static requeue_expired_jobs: (pool: Pool, data: RequeueJobConfiguration<JobStatus>) => Promise<ClaimJobs[]>;
|
|
7
|
+
}
|
|
8
|
+
export default ClaimJobServiceStatic;
|
|
9
|
+
//# sourceMappingURL=ClaimJobServiceStatic.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ClaimJobServiceStatic.d.ts","sourceRoot":"","sources":["../../src/services/ClaimJobServiceStatic.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,MAAM,IAAI,CAAC;AAC1B,OAAO,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AACxC,OAAO,EAAE,uBAAuB,EAAE,MAAM,kBAAkB,CAAC;AAC3D,OAAO,EAAE,SAAS,EAAE,MAAM,SAAS,CAAC;AAEpC,cAAM,qBAAqB;IACzB,MAAM,CAAC,oBAAoB,GACzB,MAAM,IAAI,EACV,MAAM,uBAAuB,CAAC,SAAS,CAAC,KACvC,OAAO,CAAC,SAAS,EAAE,CAAC,CAwCrB;CACH;AAED,eAAe,qBAAqB,CAAC"}
|
|
@@ -0,0 +1,54 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
|
|
3
|
+
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
|
|
4
|
+
return new (P || (P = Promise))(function (resolve, reject) {
|
|
5
|
+
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
|
|
6
|
+
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
|
|
7
|
+
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
|
|
8
|
+
step((generator = generator.apply(thisArg, _arguments || [])).next());
|
|
9
|
+
});
|
|
10
|
+
};
|
|
11
|
+
var _a;
|
|
12
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
13
|
+
class ClaimJobServiceStatic {
|
|
14
|
+
}
|
|
15
|
+
_a = ClaimJobServiceStatic;
|
|
16
|
+
ClaimJobServiceStatic.requeue_expired_jobs = (pool, data) => __awaiter(void 0, void 0, void 0, function* () {
|
|
17
|
+
const result = yield pool.query(`
|
|
18
|
+
WITH expired AS (
|
|
19
|
+
SELECT id
|
|
20
|
+
FROM accounting.claim_jobs
|
|
21
|
+
WHERE job_status = $4
|
|
22
|
+
AND (
|
|
23
|
+
lock_expires_at IS NULL
|
|
24
|
+
OR lock_expires_at < now()
|
|
25
|
+
)
|
|
26
|
+
AND retry_count < $5
|
|
27
|
+
ORDER BY lock_expires_at ASC
|
|
28
|
+
LIMIT $1
|
|
29
|
+
FOR UPDATE SKIP LOCKED
|
|
30
|
+
)
|
|
31
|
+
UPDATE accounting.claim_jobs cj
|
|
32
|
+
SET
|
|
33
|
+
job_status = 'queued',
|
|
34
|
+
locked_at = NULL,
|
|
35
|
+
lock_expires_at = NULL,
|
|
36
|
+
metadata = jsonb_set(
|
|
37
|
+
jsonb_set(
|
|
38
|
+
coalesce(metadata, '{}'::jsonb),
|
|
39
|
+
'{requeued_by}',
|
|
40
|
+
to_jsonb($2::text),
|
|
41
|
+
true
|
|
42
|
+
),
|
|
43
|
+
'{requeue_reason}',
|
|
44
|
+
to_jsonb($3::text),
|
|
45
|
+
true
|
|
46
|
+
),
|
|
47
|
+
updated_at = now()
|
|
48
|
+
FROM expired e
|
|
49
|
+
WHERE cj.id = e.id
|
|
50
|
+
RETURNING cj.*;
|
|
51
|
+
`, [data.limit, data.lock_owner, data.lock_reason, data.watch_status, data.max_retries]);
|
|
52
|
+
return result.rows;
|
|
53
|
+
});
|
|
54
|
+
exports.default = ClaimJobServiceStatic;
|
|
@@ -21,9 +21,9 @@ WHERE job_status IN ('pending', 'queued');
|
|
|
21
21
|
*/
|
|
22
22
|
createSweepJob(userId: number, blockchain: string, chainId: string, address: string, parentIndex: number, childIndex: number, token: string, decimals: number, balance: bigint): Promise<SweepJob>;
|
|
23
23
|
markBatchComplete(sweepResults: SweepResult[]): Promise<void>;
|
|
24
|
-
findAndLockQueuedBatchJobs(blockchain: BlockchainType, limit: number | undefined, lock_owner: string, lock_expiry_duration_min?: number
|
|
25
|
-
findAndLockQueuedJobs(blockchain: BlockchainType, limit: number | undefined, lock_owner: string, lock_expiry_duration_min?: number
|
|
26
|
-
findAndLockPendingJobs(blockchain: BlockchainType, lock_owner: string, lock_interval_mins?: number, limit?: number
|
|
24
|
+
findAndLockQueuedBatchJobs(blockchain: BlockchainType, limit: number | undefined, lock_owner: string, lock_expiry_duration_min?: number): Promise<SweepJob[]>;
|
|
25
|
+
findAndLockQueuedJobs(blockchain: BlockchainType, limit: number | undefined, lock_owner: string, lock_expiry_duration_min?: number): Promise<SweepJob[]>;
|
|
26
|
+
findAndLockPendingJobs(blockchain: BlockchainType, lock_owner: string, lock_interval_mins?: number, limit?: number): Promise<SweepJob[]>;
|
|
27
27
|
createSweepJobDeprec(userId: number, blockchain: string, chainId: string, address: string, parentIndex: number, childIndex: number, token: string, decimals: number, balance: bigint): Promise<SweepJob>;
|
|
28
28
|
dispatchAddSweepJobWithBalanceCheck(wallet_id: number, blockchain: BlockchainType, user_id: number, address: string, parentIndex: number, childIndex: number, is_full_sweep: boolean): Promise<void>;
|
|
29
29
|
batchCreateSweepJob(user_id: number, address: string, parent_index: number, child_index: number, need_sweep: DepositWalletBalance[]): Promise<boolean>;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"SweepJobService.d.ts","sourceRoot":"","sources":["../../src/services/SweepJobService.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,sBAAsB,CAAC;AAEhD,OAAO,EAAE,cAAc,EAAE,MAAM,eAAe,CAAC;AAC/C,OAAO,EAAE,SAAS,EAAE,OAAO,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;AAEhE,OAAO,EAAE,oBAAoB,EAAE,MAAM,kCAAkC,CAAC;AAExE,OAAO,EAAE,aAAa,EAAE,MAAM,wBAAwB,CAAC;AACvD,OAAO,EAAE,OAAO,EAAE,MAAM,sBAAsB,CAAC;AAC/C,OAAO,EAAE,SAAS,EAAE,MAAM,2BAA2B,CAAC;AACtD,OAAO,EAAE,cAAc,EAAE,kBAAkB,EAAE,MAAM,2BAA2B,CAAC;AAI/E,cAAM,eAAe;IACjB,OAAO,CAAC,MAAM,CAAgB;IAC9B,OAAO,CAAC,MAAM,CAAU;IACxB,OAAO,CAAC,MAAM,CAAS;gBACX,MAAM,EAAE,aAAa,EAAE,MAAM,EAAE,OAAO;IAMlD,OAAO,CAAC,OAAO;IAOT,wBAAwB,CAAC,IAAI,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,YAAK,EAAE,OAAO,EAAE,kBAAkB,GAAG,OAAO,CAAC,SAAS,CAAC,QAAQ,EAAE,CAAC,CAAC;IAgCjI;;;;;OAKG;IAEG,cAAc,CAChB,MAAM,EAAE,MAAM,EACd,UAAU,EAAE,MAAM,EAClB,OAAO,EAAE,MAAM,EACf,OAAO,EAAE,MAAM,EACf,WAAW,EAAE,MAAM,EACnB,UAAU,EAAE,MAAM,EAClB,KAAK,EAAE,MAAM,EACb,QAAQ,EAAE,MAAM,EAChB,OAAO,EAAE,MAAM,GAChB,OAAO,CAAC,QAAQ,CAAC;IA8Dd,iBAAiB,CAAC,YAAY,EAAE,WAAW,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC;IAmE7D,0BAA0B,CAC5B,UAAU,EAAE,cAAc,EAC1B,KAAK,EAAE,MAAM,YAAM,EACnB,UAAU,EAAE,MAAM,EAClB,wBAAwB,GAAE,MAAW,
|
|
1
|
+
{"version":3,"file":"SweepJobService.d.ts","sourceRoot":"","sources":["../../src/services/SweepJobService.ts"],"names":[],"mappings":"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"}
|
|
@@ -222,9 +222,8 @@ class SweepJobService {
|
|
|
222
222
|
const repo = this.getRepo();
|
|
223
223
|
yield repo.query(`
|
|
224
224
|
UPDATE usersmanagement.sweep_jobs
|
|
225
|
-
SET
|
|
225
|
+
SET
|
|
226
226
|
job_status = $1,
|
|
227
|
-
retry_count = retry_count + 1,
|
|
228
227
|
updated_at = now()
|
|
229
228
|
WHERE id = ANY($2::bigint[])
|
|
230
229
|
`, [
|
|
@@ -242,7 +241,6 @@ class SweepJobService {
|
|
|
242
241
|
SET
|
|
243
242
|
job_status = $1,
|
|
244
243
|
error_message = data.error_message,
|
|
245
|
-
retry_count = j.retry_count + 1,
|
|
246
244
|
updated_at = now()
|
|
247
245
|
FROM (
|
|
248
246
|
SELECT
|
|
@@ -461,7 +459,7 @@ WHERE job_status IN ('pending', 'queued');
|
|
|
461
459
|
}
|
|
462
460
|
// Get batch of jobs for low priority sweeps (midnight worker)
|
|
463
461
|
findAndLockQueuedBatchJobs(blockchain_1) {
|
|
464
|
-
return __awaiter(this, arguments, void 0, function* (blockchain, limit = 100, lock_owner, lock_expiry_duration_min = 30
|
|
462
|
+
return __awaiter(this, arguments, void 0, function* (blockchain, limit = 100, lock_owner, lock_expiry_duration_min = 30) {
|
|
465
463
|
const repo = this.getRepo();
|
|
466
464
|
const rows = yield repo.query(`
|
|
467
465
|
WITH locked AS (
|
|
@@ -470,7 +468,6 @@ WHERE job_status IN ('pending', 'queued');
|
|
|
470
468
|
WHERE job_status = 'queued'
|
|
471
469
|
AND blockchain = $1
|
|
472
470
|
AND sweep_before IS NULL
|
|
473
|
-
AND retry_count < $5
|
|
474
471
|
AND (locked_at IS NULL OR lock_expires_at < now())
|
|
475
472
|
ORDER BY created_at ASC
|
|
476
473
|
LIMIT $2
|
|
@@ -485,13 +482,13 @@ WHERE job_status IN ('pending', 'queued');
|
|
|
485
482
|
FROM locked
|
|
486
483
|
WHERE j.id = locked.id
|
|
487
484
|
RETURNING j.*;
|
|
488
|
-
`, [blockchain, limit, lock_owner, lock_expiry_duration_min
|
|
485
|
+
`, [blockchain, limit, lock_owner, lock_expiry_duration_min]);
|
|
489
486
|
return rows[0];
|
|
490
487
|
});
|
|
491
488
|
}
|
|
492
489
|
// Pull jobs ready for transfer by sweep worker
|
|
493
490
|
findAndLockQueuedJobs(blockchain_1) {
|
|
494
|
-
return __awaiter(this, arguments, void 0, function* (blockchain, limit = 100, lock_owner, lock_expiry_duration_min = 5
|
|
491
|
+
return __awaiter(this, arguments, void 0, function* (blockchain, limit = 100, lock_owner, lock_expiry_duration_min = 5) {
|
|
495
492
|
const repo = this.getRepo();
|
|
496
493
|
const rows = yield repo.query(`
|
|
497
494
|
WITH locked AS (
|
|
@@ -500,7 +497,6 @@ WHERE job_status IN ('pending', 'queued');
|
|
|
500
497
|
WHERE job_status = 'queued'
|
|
501
498
|
AND blockchain = $1
|
|
502
499
|
AND sweep_before <= now()
|
|
503
|
-
AND retry_count < $5
|
|
504
500
|
AND (locked_at IS NULL OR lock_expires_at < now())
|
|
505
501
|
ORDER BY sweep_before ASC
|
|
506
502
|
LIMIT $2
|
|
@@ -514,13 +510,13 @@ WHERE job_status IN ('pending', 'queued');
|
|
|
514
510
|
FROM locked
|
|
515
511
|
WHERE j.id = locked.id
|
|
516
512
|
RETURNING j.*;
|
|
517
|
-
`, [blockchain, limit, lock_owner, lock_expiry_duration_min
|
|
513
|
+
`, [blockchain, limit, lock_owner, lock_expiry_duration_min]);
|
|
518
514
|
return rows[0];
|
|
519
515
|
});
|
|
520
516
|
}
|
|
521
517
|
// Pull jobs to ensure enough gas cost by funding worker
|
|
522
518
|
findAndLockPendingJobs(blockchain_1, lock_owner_1) {
|
|
523
|
-
return __awaiter(this, arguments, void 0, function* (blockchain, lock_owner, lock_interval_mins = 5, limit = 100
|
|
519
|
+
return __awaiter(this, arguments, void 0, function* (blockchain, lock_owner, lock_interval_mins = 5, limit = 100) {
|
|
524
520
|
const repo = this.getRepo();
|
|
525
521
|
const rows = yield repo.query(`
|
|
526
522
|
WITH locked AS (
|
|
@@ -528,7 +524,6 @@ WHERE job_status IN ('pending', 'queued');
|
|
|
528
524
|
FROM usersmanagement.sweep_jobs
|
|
529
525
|
WHERE job_status = 'pending'
|
|
530
526
|
AND blockchain = $1
|
|
531
|
-
AND retry_count < $5
|
|
532
527
|
AND (locked_at IS NULL OR lock_expires_at < now())
|
|
533
528
|
ORDER BY created_at
|
|
534
529
|
LIMIT $2
|
|
@@ -541,7 +536,7 @@ WHERE job_status IN ('pending', 'queued');
|
|
|
541
536
|
FROM locked
|
|
542
537
|
WHERE j.id = locked.id
|
|
543
538
|
RETURNING j.*;
|
|
544
|
-
`, [blockchain, limit, lock_owner, lock_interval_mins
|
|
539
|
+
`, [blockchain, limit, lock_owner, lock_interval_mins]);
|
|
545
540
|
return rows[0];
|
|
546
541
|
});
|
|
547
542
|
}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import { Pool } from "pg";
|
|
2
|
+
import { WithdrawRequestDetails } from "./types";
|
|
3
|
+
import { WithdrawalCommitment } from "../entities";
|
|
4
|
+
declare class WithdrawalService {
|
|
5
|
+
static get_crypto_withdrawal_request: (pool: Pool, request_id: number) => Promise<WithdrawRequestDetails | null>;
|
|
6
|
+
static get_withdrawal_commitments: (pool: Pool, blockchain: string, chainId: string, escrowAddress: string) => Promise<WithdrawalCommitment[]>;
|
|
7
|
+
static get_withdrawal_commitment: (pool: Pool, request_id: number) => Promise<WithdrawalCommitment>;
|
|
8
|
+
}
|
|
9
|
+
export default WithdrawalService;
|
|
10
|
+
//# sourceMappingURL=WithdrawalService.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"WithdrawalService.d.ts","sourceRoot":"","sources":["../../src/services/WithdrawalService.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,IAAI,EAAE,MAAM,IAAI,CAAC;AAC1B,OAAO,EAAE,sBAAsB,EAAE,MAAM,SAAS,CAAC;AACjD,OAAO,EAAoB,oBAAoB,EAAE,MAAM,aAAa,CAAC;AAErE,cAAM,iBAAiB;IACnB,MAAM,CAAC,6BAA6B,GAAU,MAAM,IAAI,EAAE,YAAY,MAAM,4CAQ3E;IAED,MAAM,CAAC,0BAA0B,GAAU,MAAM,IAAI,EAAE,YAAY,MAAM,EAAE,SAAS,MAAM,EAAE,eAAe,MAAM,qCAUhH;IAED,MAAM,CAAC,yBAAyB,GAAU,MAAM,IAAI,EAAE,YAAY,MAAM,mCAUvE;CACJ;AAED,eAAe,iBAAiB,CAAC"}
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
|
|
3
|
+
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
|
|
4
|
+
return new (P || (P = Promise))(function (resolve, reject) {
|
|
5
|
+
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
|
|
6
|
+
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
|
|
7
|
+
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
|
|
8
|
+
step((generator = generator.apply(thisArg, _arguments || [])).next());
|
|
9
|
+
});
|
|
10
|
+
};
|
|
11
|
+
var _a;
|
|
12
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
13
|
+
class WithdrawalService {
|
|
14
|
+
}
|
|
15
|
+
_a = WithdrawalService;
|
|
16
|
+
WithdrawalService.get_crypto_withdrawal_request = (pool, request_id) => __awaiter(void 0, void 0, void 0, function* () {
|
|
17
|
+
const result = yield pool.query(`
|
|
18
|
+
SELECT accounting.fn_get_crypto_withdrawal_details($1::bigint);
|
|
19
|
+
`, [request_id]);
|
|
20
|
+
return result.rows[0].fn_get_crypto_withdrawal_details;
|
|
21
|
+
});
|
|
22
|
+
WithdrawalService.get_withdrawal_commitments = (pool, blockchain, chainId, escrowAddress) => __awaiter(void 0, void 0, void 0, function* () {
|
|
23
|
+
const status = "scheduled";
|
|
24
|
+
const result = yield pool.query(`
|
|
25
|
+
SELECT multisig.fn_get_withdrawal_commitments($1::text,$2::text,$3::text,$4::text);
|
|
26
|
+
`, [blockchain, chainId, escrowAddress, status]);
|
|
27
|
+
return result.rows[0].fn_get_withdrawal_commitments;
|
|
28
|
+
});
|
|
29
|
+
WithdrawalService.get_withdrawal_commitment = (pool, request_id) => __awaiter(void 0, void 0, void 0, function* () {
|
|
30
|
+
const result = yield pool.query(`
|
|
31
|
+
SELECT * from multisig.crypto_withdrawal_commitment
|
|
32
|
+
WHERE request_id = $1::bigint
|
|
33
|
+
`, [request_id]);
|
|
34
|
+
return result.rows[0];
|
|
35
|
+
});
|
|
36
|
+
exports.default = WithdrawalService;
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
import { Pool } from "pg";
|
|
2
|
+
import { GetAdminOperationThreshold, UpsertAdminOperationThreshold, GetGlobalTimelock, UpsertGlobalTimelock, GetGranularTimelock, UpsertGranularTimelock, GetTokenExecutionThreshold, UpsertTokenExecutionThreshold, FnWithdrawalScheduledPayload, FnWithdrawalScheduledResult, FnWithdrawalExecutedResult, FnWithdrawalExecutedPayload, FnWithdrawalCancelledPayload, FnWithdrawalCancelledResult, FnGetWithdrawalCommitmentsResult, FnGetWithdrawalCommitmentsPayload } from "../../types";
|
|
3
|
+
import { OperationType } from "../../../contracts/types/escrow";
|
|
4
|
+
/**
|
|
5
|
+
* Adapter class for interfacing the DB functions
|
|
6
|
+
* related to escrow multisig threshold execution settings
|
|
7
|
+
*/
|
|
8
|
+
declare class MultisigService {
|
|
9
|
+
/** Returns all admin operation signature thresholds for the given escrow. */
|
|
10
|
+
static fn_get_admin_operation_thresholds(pool: Pool, blockchain: string, chainId: string, escrow_address: string): Promise<GetAdminOperationThreshold[]>;
|
|
11
|
+
/** Inserts or updates the manager/executive signature thresholds for the given escrow. */
|
|
12
|
+
static fn_upsert_admin_operation_threshold(pool: Pool, blockchain: string, chainId: string, escrow_address: string, operation_type: OperationType, sigs_manager: number, sigs_executive: number): Promise<UpsertAdminOperationThreshold>;
|
|
13
|
+
/** Returns all global timelock configs for the given escrow. */
|
|
14
|
+
static fn_get_global_timelock(pool: Pool, blockchain: string, chainId: string, escrow_address: string): Promise<GetGlobalTimelock[]>;
|
|
15
|
+
/** Inserts or updates the global timelock durations for a token/escrow pair. */
|
|
16
|
+
static fn_upsert_global_timelock(pool: Pool, blockchain: string, chainId: string, escrow_address: string, token_address: string, threshold_amount: number, duration_below_seconds: number, duration_above_seconds: number): Promise<UpsertGlobalTimelock>;
|
|
17
|
+
/** Returns all granular timelock configs for the given escrow. */
|
|
18
|
+
static fn_get_granular_timelock(pool: Pool, blockchain: string, chainId: string, escrow_address: string): Promise<GetGranularTimelock[]>;
|
|
19
|
+
/** Inserts or updates the timelock duration for a specific receiver address. */
|
|
20
|
+
static fn_upsert_granular_timelock(pool: Pool, blockchain: string, chainId: string, escrow_address: string, receiver_address: string, duration_seconds: number): Promise<UpsertGranularTimelock>;
|
|
21
|
+
/** Returns all per-token execution signature thresholds for the given escrow. */
|
|
22
|
+
static fn_get_token_execution_thresholds(pool: Pool, blockchain: string, chainId: string, escrow_address: string): Promise<GetTokenExecutionThreshold[]>;
|
|
23
|
+
/** Inserts or updates the above/below signature thresholds for a token/escrow pair. */
|
|
24
|
+
static fn_upsert_token_execution_threshold(pool: Pool, blockchain: string, chainId: string, escrow_address: string, token_address: string, threshold_amount: number, sigs_executive_below: number, sigs_executive_above: number, sigs_manager_below: number, sigs_manager_above: number): Promise<UpsertTokenExecutionThreshold>;
|
|
25
|
+
static fn_get_withdrawal_commitments(pool: Pool, data: FnGetWithdrawalCommitmentsPayload): Promise<FnGetWithdrawalCommitmentsResult[]>;
|
|
26
|
+
static fn_withdrawal_scheduled(pool: Pool, data: FnWithdrawalScheduledPayload): Promise<FnWithdrawalScheduledResult>;
|
|
27
|
+
static fn_withdrawal_executed(pool: Pool, data: FnWithdrawalExecutedPayload): Promise<FnWithdrawalExecutedResult>;
|
|
28
|
+
static fn_withdrawal_cancelled(pool: Pool, data: FnWithdrawalCancelledPayload): Promise<FnWithdrawalCancelledResult>;
|
|
29
|
+
}
|
|
30
|
+
export default MultisigService;
|
|
31
|
+
//# sourceMappingURL=MultisigService.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"MultisigService.d.ts","sourceRoot":"","sources":["../../../../src/services/db/multisig/MultisigService.ts"],"names":[],"mappings":"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"}
|