@xyo-network/chain-reward-redemption 1.23.0 → 1.23.2
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/dist/node/index.mjs +217 -230
- package/dist/node/index.mjs.map +7 -1
- package/package.json +24 -24
package/dist/node/index.mjs
CHANGED
|
@@ -1,5 +1,15 @@
|
|
|
1
1
|
var __defProp = Object.defineProperty;
|
|
2
|
-
var
|
|
2
|
+
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
|
|
3
|
+
var __defNormalProp = (obj, key, value) => key in obj ? __defProp(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;
|
|
4
|
+
var __decorateClass = (decorators, target, key, kind) => {
|
|
5
|
+
var result = kind > 1 ? void 0 : kind ? __getOwnPropDesc(target, key) : target;
|
|
6
|
+
for (var i = decorators.length - 1, decorator; i >= 0; i--)
|
|
7
|
+
if (decorator = decorators[i])
|
|
8
|
+
result = (kind ? decorator(target, key, result) : decorator(result)) || result;
|
|
9
|
+
if (kind && result) __defProp(target, key, result);
|
|
10
|
+
return result;
|
|
11
|
+
};
|
|
12
|
+
var __publicField = (obj, key, value) => __defNormalProp(obj, typeof key !== "symbol" ? key + "" : key, value);
|
|
3
13
|
|
|
4
14
|
// src/command.ts
|
|
5
15
|
import { RewardRedemptionConfigZod } from "@xyo-network/chain-orchestration";
|
|
@@ -11,7 +21,11 @@ import { initActorWallet } from "@xyo-network/chain-orchestration";
|
|
|
11
21
|
// src/RewardRedemptionActor.ts
|
|
12
22
|
import { creatable } from "@xylabs/sdk-js";
|
|
13
23
|
import { ActorV3 } from "@xyo-network/chain-orchestration";
|
|
14
|
-
import {
|
|
24
|
+
import {
|
|
25
|
+
asHostActorConfigContext,
|
|
26
|
+
XyoGatewayRunnerMoniker,
|
|
27
|
+
XyoViewerMoniker as XyoViewerMoniker2
|
|
28
|
+
} from "@xyo-network/xl1-sdk";
|
|
15
29
|
|
|
16
30
|
// src/server/app.ts
|
|
17
31
|
import { standardErrors } from "@xylabs/express";
|
|
@@ -22,86 +36,74 @@ import express2 from "express";
|
|
|
22
36
|
import { registerInstrumentations } from "@opentelemetry/instrumentation";
|
|
23
37
|
import { ExpressInstrumentation } from "@opentelemetry/instrumentation-express";
|
|
24
38
|
import { HttpInstrumentation } from "@opentelemetry/instrumentation-http";
|
|
25
|
-
var addInstrumentation =
|
|
26
|
-
const instrumentations = [
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
];
|
|
30
|
-
registerInstrumentations({
|
|
31
|
-
instrumentations
|
|
32
|
-
});
|
|
33
|
-
}, "addInstrumentation");
|
|
39
|
+
var addInstrumentation = () => {
|
|
40
|
+
const instrumentations = [new HttpInstrumentation(), new ExpressInstrumentation()];
|
|
41
|
+
registerInstrumentations({ instrumentations });
|
|
42
|
+
};
|
|
34
43
|
|
|
35
44
|
// src/server/routes/livez/get.ts
|
|
36
45
|
import { setRawResponseFormat } from "@xylabs/express";
|
|
37
46
|
import { ReasonPhrases } from "http-status-codes";
|
|
38
47
|
var message = ReasonPhrases.OK;
|
|
39
|
-
var handler =
|
|
48
|
+
var handler = (_req, res) => {
|
|
40
49
|
setRawResponseFormat(res);
|
|
41
|
-
res.status(200).send({
|
|
42
|
-
|
|
43
|
-
});
|
|
44
|
-
}, "handler");
|
|
50
|
+
res.status(200).send({ message });
|
|
51
|
+
};
|
|
45
52
|
var getLivez = handler;
|
|
46
53
|
|
|
47
54
|
// src/server/routes/readyz/get.ts
|
|
48
55
|
import { setRawResponseFormat as setRawResponseFormat2 } from "@xylabs/express";
|
|
49
56
|
import { ReasonPhrases as ReasonPhrases2 } from "http-status-codes";
|
|
50
57
|
var message2 = ReasonPhrases2.OK;
|
|
51
|
-
var handler2 =
|
|
58
|
+
var handler2 = (_req, res) => {
|
|
52
59
|
setRawResponseFormat2(res);
|
|
53
|
-
res.status(200).send({
|
|
54
|
-
|
|
55
|
-
});
|
|
56
|
-
}, "handler");
|
|
60
|
+
res.status(200).send({ message: message2 });
|
|
61
|
+
};
|
|
57
62
|
var getReadyz = handler2;
|
|
58
63
|
|
|
59
64
|
// src/server/routes/startupz/get.ts
|
|
60
65
|
import { setRawResponseFormat as setRawResponseFormat3 } from "@xylabs/express";
|
|
61
66
|
import { ReasonPhrases as ReasonPhrases3 } from "http-status-codes";
|
|
62
67
|
var message3 = ReasonPhrases3.OK;
|
|
63
|
-
var handler3 =
|
|
68
|
+
var handler3 = (_req, res) => {
|
|
64
69
|
setRawResponseFormat3(res);
|
|
65
|
-
res.status(200).send({
|
|
66
|
-
|
|
67
|
-
});
|
|
68
|
-
}, "handler");
|
|
70
|
+
res.status(200).send({ message: message3 });
|
|
71
|
+
};
|
|
69
72
|
var getStartupz = handler3;
|
|
70
73
|
|
|
71
74
|
// src/server/routes/addProbeRoutes.ts
|
|
72
|
-
var addProbeRoutes =
|
|
75
|
+
var addProbeRoutes = (app) => {
|
|
73
76
|
app.get("/livez", getLivez);
|
|
74
77
|
app.get("/readyz", getReadyz);
|
|
75
78
|
app.get("/startupz", getStartupz);
|
|
76
|
-
}
|
|
79
|
+
};
|
|
77
80
|
|
|
78
81
|
// src/server/routes/dataLake/archivistMiddleware.ts
|
|
79
82
|
import { setRawResponseFormat as setRawResponseFormat4 } from "@xylabs/express";
|
|
80
83
|
import { asHash, isDefined } from "@xylabs/sdk-js";
|
|
81
|
-
import {
|
|
84
|
+
import {
|
|
85
|
+
asArchivistInstance,
|
|
86
|
+
isAnyPayload,
|
|
87
|
+
isSequence,
|
|
88
|
+
PayloadBuilder
|
|
89
|
+
} from "@xyo-network/sdk-js";
|
|
82
90
|
import express from "express";
|
|
83
|
-
var resolveArchivist =
|
|
91
|
+
var resolveArchivist = async (node, archivistModuleIdentifier) => {
|
|
84
92
|
const mod = await node.resolve(archivistModuleIdentifier);
|
|
85
|
-
return asArchivistInstance(mod, {
|
|
86
|
-
|
|
87
|
-
});
|
|
88
|
-
}, "resolveArchivist");
|
|
93
|
+
return asArchivistInstance(mod, { required: true });
|
|
94
|
+
};
|
|
89
95
|
var archivistInstance;
|
|
90
|
-
var getArchivist =
|
|
96
|
+
var getArchivist = async (node, archivistModuleIdentifier) => {
|
|
91
97
|
if (isDefined(archivistInstance)) return archivistInstance;
|
|
92
98
|
archivistInstance = await resolveArchivist(node, archivistModuleIdentifier);
|
|
93
99
|
return archivistInstance;
|
|
94
|
-
}
|
|
95
|
-
var archivistMiddleware =
|
|
100
|
+
};
|
|
101
|
+
var archivistMiddleware = (options) => {
|
|
96
102
|
const { node, archivistModuleIdentifier } = options;
|
|
97
|
-
const router = express.Router({
|
|
98
|
-
mergeParams: true
|
|
99
|
-
});
|
|
103
|
+
const router = express.Router({ mergeParams: true });
|
|
100
104
|
router.post("/insert", async (req, res) => {
|
|
101
105
|
setRawResponseFormat4(res);
|
|
102
|
-
const body2 = Array.isArray(req.body) ? req.body : [
|
|
103
|
-
req.body
|
|
104
|
-
];
|
|
106
|
+
const body2 = Array.isArray(req.body) ? req.body : [req.body];
|
|
105
107
|
const payloads = (await PayloadBuilder.hashPairs(body2)).map((p) => p[0]);
|
|
106
108
|
const archivist = await getArchivist(node, archivistModuleIdentifier);
|
|
107
109
|
const result = await archivist.insert(payloads);
|
|
@@ -136,9 +138,7 @@ var archivistMiddleware = /* @__PURE__ */ __name((options) => {
|
|
|
136
138
|
const hash = asHash(rawHash);
|
|
137
139
|
if (isDefined(hash)) {
|
|
138
140
|
const archivist = await getArchivist(node, archivistModuleIdentifier);
|
|
139
|
-
const [payload] = await archivist.get([
|
|
140
|
-
hash
|
|
141
|
-
]);
|
|
141
|
+
const [payload] = await archivist.get([hash]);
|
|
142
142
|
if (isAnyPayload(payload)) {
|
|
143
143
|
res.json(payload);
|
|
144
144
|
return;
|
|
@@ -150,17 +150,14 @@ var archivistMiddleware = /* @__PURE__ */ __name((options) => {
|
|
|
150
150
|
res.status(400).send();
|
|
151
151
|
});
|
|
152
152
|
return router;
|
|
153
|
-
}
|
|
153
|
+
};
|
|
154
154
|
|
|
155
155
|
// src/server/routes/dataLake/addDataLakeRoutes.ts
|
|
156
|
-
var addDataLakeRoutes =
|
|
156
|
+
var addDataLakeRoutes = (app) => {
|
|
157
157
|
const { node } = app;
|
|
158
158
|
const archivistModuleIdentifier = "Data";
|
|
159
|
-
app.use("/data", archivistMiddleware({
|
|
160
|
-
|
|
161
|
-
archivistModuleIdentifier
|
|
162
|
-
}));
|
|
163
|
-
}, "addDataLakeRoutes");
|
|
159
|
+
app.use("/data", archivistMiddleware({ node, archivistModuleIdentifier }));
|
|
160
|
+
};
|
|
164
161
|
|
|
165
162
|
// src/server/routes/rewardRedemption/addRewardRoutes.ts
|
|
166
163
|
import { addRouteDefinitions } from "@xylabs/express";
|
|
@@ -168,19 +165,21 @@ import { addRouteDefinitions } from "@xylabs/express";
|
|
|
168
165
|
// src/server/routes/rewardRedemption/routeDefinitions/routes/claimRange.ts
|
|
169
166
|
import { requestHandlerValidator } from "@xylabs/express";
|
|
170
167
|
import { assertEx, isDefined as isDefined2 } from "@xylabs/sdk-js";
|
|
171
|
-
import {
|
|
172
|
-
|
|
168
|
+
import {
|
|
169
|
+
asSentinelInstance,
|
|
170
|
+
PayloadBuilder as PayloadBuilder2,
|
|
171
|
+
PayloadZodLoose
|
|
172
|
+
} from "@xyo-network/sdk-js";
|
|
173
|
+
import {
|
|
174
|
+
asXL1BlockRange,
|
|
175
|
+
blockRangeSteps,
|
|
176
|
+
StepIdentitySchema,
|
|
177
|
+
XyoViewerMoniker
|
|
178
|
+
} from "@xyo-network/xl1-sdk";
|
|
173
179
|
import { z } from "zod";
|
|
174
180
|
|
|
175
181
|
// src/server/routes/rewardRedemption/routeDefinitions/util/rewardableSteps.ts
|
|
176
|
-
var RewardableSteps = [
|
|
177
|
-
3,
|
|
178
|
-
4,
|
|
179
|
-
5,
|
|
180
|
-
6,
|
|
181
|
-
7,
|
|
182
|
-
8
|
|
183
|
-
];
|
|
182
|
+
var RewardableSteps = [3, 4, 5, 6, 7, 8];
|
|
184
183
|
|
|
185
184
|
// src/server/routes/rewardRedemption/routeDefinitions/routes/claimRange.ts
|
|
186
185
|
var query = z.object({
|
|
@@ -189,21 +188,22 @@ var query = z.object({
|
|
|
189
188
|
step: z.coerce.number().int().nonnegative().min(Math.min(...RewardableSteps)).max(Math.max(...RewardableSteps)).optional().default(3)
|
|
190
189
|
});
|
|
191
190
|
var response = z.array(PayloadZodLoose);
|
|
192
|
-
var validateRequest = requestHandlerValidator({
|
|
193
|
-
|
|
194
|
-
response
|
|
195
|
-
});
|
|
196
|
-
var getChainStepRewardsClaimSentinel = /* @__PURE__ */ __name(async (node) => {
|
|
191
|
+
var validateRequest = requestHandlerValidator({ query, response });
|
|
192
|
+
var getChainStepRewardsClaimSentinel = async (node) => {
|
|
197
193
|
const mod = await node.resolve("XYORewardRedemptionNode:ChainStepRewardsClaimSentinel");
|
|
198
194
|
const sentinel = asSentinelInstance(mod);
|
|
199
195
|
return assertEx(sentinel, () => "ChainStepRewardsClaimSentinel not found on node");
|
|
200
|
-
}
|
|
196
|
+
};
|
|
201
197
|
var postClaimRange = {
|
|
202
198
|
method: "post",
|
|
203
199
|
path: "/rewards/claimRange",
|
|
204
200
|
handlers: validateRequest(async (req, res) => {
|
|
205
201
|
const { locator, node } = req.app;
|
|
206
|
-
const {
|
|
202
|
+
const {
|
|
203
|
+
fromBlock,
|
|
204
|
+
toBlock,
|
|
205
|
+
step
|
|
206
|
+
} = z.parse(query, req.query);
|
|
207
207
|
const viewer = await locator.getInstance(XyoViewerMoniker);
|
|
208
208
|
const from = isDefined2(fromBlock) ? fromBlock : 0;
|
|
209
209
|
const currentBlock = await viewer.currentBlockNumber();
|
|
@@ -213,24 +213,13 @@ var postClaimRange = {
|
|
|
213
213
|
res.json([]);
|
|
214
214
|
return;
|
|
215
215
|
}
|
|
216
|
-
const range = asXL1BlockRange([
|
|
217
|
-
|
|
218
|
-
to
|
|
219
|
-
], {
|
|
220
|
-
name: "claimRange"
|
|
221
|
-
});
|
|
222
|
-
const stepIdentities = blockRangeSteps(range, [
|
|
223
|
-
step
|
|
224
|
-
]);
|
|
216
|
+
const range = asXL1BlockRange([from, to], { name: "claimRange" });
|
|
217
|
+
const stepIdentities = blockRangeSteps(range, [step]);
|
|
225
218
|
const results = [];
|
|
226
219
|
for (const stepIdentity of stepIdentities) {
|
|
227
220
|
const mod = await getChainStepRewardsClaimSentinel(node);
|
|
228
|
-
const stepIdentityPayload = new PayloadBuilder2({
|
|
229
|
-
|
|
230
|
-
}).fields(stepIdentity).build();
|
|
231
|
-
const result = await mod.report([
|
|
232
|
-
stepIdentityPayload
|
|
233
|
-
]);
|
|
221
|
+
const stepIdentityPayload = new PayloadBuilder2({ schema: StepIdentitySchema }).fields(stepIdentity).build();
|
|
222
|
+
const result = await mod.report([stepIdentityPayload]);
|
|
234
223
|
results.push(...result);
|
|
235
224
|
}
|
|
236
225
|
res.status(200);
|
|
@@ -241,8 +230,17 @@ var postClaimRange = {
|
|
|
241
230
|
// src/server/routes/rewardRedemption/routeDefinitions/routes/redeem.ts
|
|
242
231
|
import { requestHandlerValidator as requestHandlerValidator2 } from "@xylabs/express";
|
|
243
232
|
import { assertEx as assertEx2 } from "@xylabs/sdk-js";
|
|
244
|
-
import {
|
|
245
|
-
|
|
233
|
+
import {
|
|
234
|
+
asSentinelInstance as asSentinelInstance2,
|
|
235
|
+
PayloadZodLoose as PayloadZodLoose2,
|
|
236
|
+
PayloadZodStrictOfSchema
|
|
237
|
+
} from "@xyo-network/sdk-js";
|
|
238
|
+
import {
|
|
239
|
+
EIP712DataPayloadFieldsZod,
|
|
240
|
+
EIP712DataPayloadSchema,
|
|
241
|
+
EIP712SignaturePayloadFieldsZod,
|
|
242
|
+
EIP712SignaturePayloadSchema
|
|
243
|
+
} from "@xyo-network/xl1-sdk";
|
|
246
244
|
import { z as z2 } from "zod";
|
|
247
245
|
var body = z2.tuple([
|
|
248
246
|
PayloadZodStrictOfSchema(EIP712DataPayloadSchema).extend(EIP712DataPayloadFieldsZod.shape),
|
|
@@ -253,11 +251,11 @@ var validateRequest2 = requestHandlerValidator2({
|
|
|
253
251
|
body,
|
|
254
252
|
response: response2
|
|
255
253
|
});
|
|
256
|
-
var getDerivedAddressWalletTransferSentinel =
|
|
254
|
+
var getDerivedAddressWalletTransferSentinel = async (node) => {
|
|
257
255
|
const mod = await node.resolve("XYORewardRedemptionNode:DerivedAddressWalletTransferSentinel");
|
|
258
256
|
const sentinel = asSentinelInstance2(mod);
|
|
259
257
|
return assertEx2(sentinel, () => "DerivedAddressWalletTransferSentinel not found on node");
|
|
260
|
-
}
|
|
258
|
+
};
|
|
261
259
|
var postRedeem = {
|
|
262
260
|
method: "post",
|
|
263
261
|
path: "/rewards/redeem",
|
|
@@ -272,28 +270,28 @@ var postRedeem = {
|
|
|
272
270
|
};
|
|
273
271
|
|
|
274
272
|
// src/server/routes/rewardRedemption/routeDefinitions/getRouteDefinitions.ts
|
|
275
|
-
var getRouteDefinitions =
|
|
273
|
+
var getRouteDefinitions = () => {
|
|
276
274
|
return [
|
|
277
275
|
postClaimRange,
|
|
278
276
|
postRedeem
|
|
279
277
|
];
|
|
280
|
-
}
|
|
278
|
+
};
|
|
281
279
|
|
|
282
280
|
// src/server/routes/rewardRedemption/addRewardRoutes.ts
|
|
283
|
-
var addRewardRedemptionRoutes =
|
|
281
|
+
var addRewardRedemptionRoutes = (app) => {
|
|
284
282
|
const routeDefinitions = getRouteDefinitions();
|
|
285
283
|
addRouteDefinitions(app, routeDefinitions);
|
|
286
|
-
}
|
|
284
|
+
};
|
|
287
285
|
|
|
288
286
|
// src/server/routes/addRoutes.ts
|
|
289
|
-
var addRoutes =
|
|
287
|
+
var addRoutes = (app) => {
|
|
290
288
|
addProbeRoutes(app);
|
|
291
289
|
addDataLakeRoutes(app);
|
|
292
290
|
addRewardRedemptionRoutes(app);
|
|
293
|
-
}
|
|
291
|
+
};
|
|
294
292
|
|
|
295
293
|
// src/server/app.ts
|
|
296
|
-
var getApp =
|
|
294
|
+
var getApp = (node, config, locator) => {
|
|
297
295
|
addInstrumentation();
|
|
298
296
|
const app = express2();
|
|
299
297
|
sharedMiddleware(app);
|
|
@@ -303,7 +301,7 @@ var getApp = /* @__PURE__ */ __name((node, config, locator) => {
|
|
|
303
301
|
addRoutes(app);
|
|
304
302
|
app.use(standardErrors);
|
|
305
303
|
return app;
|
|
306
|
-
}
|
|
304
|
+
};
|
|
307
305
|
|
|
308
306
|
// src/server/server.ts
|
|
309
307
|
import { boot } from "@xyo-network/bios";
|
|
@@ -315,32 +313,43 @@ import { isDefined as isDefined5 } from "@xylabs/sdk-js";
|
|
|
315
313
|
import { MongoDBArchivistV2 } from "@xyo-network/archivist-mongodb";
|
|
316
314
|
import { ViewArchivist } from "@xyo-network/archivist-view";
|
|
317
315
|
import { initTelemetry } from "@xyo-network/chain-telemetry";
|
|
318
|
-
import {
|
|
316
|
+
import {
|
|
317
|
+
AbstractModule,
|
|
318
|
+
LoggerModuleStatusReporter,
|
|
319
|
+
MemoryArchivist,
|
|
320
|
+
MemorySentinel,
|
|
321
|
+
ModuleFactoryLocator
|
|
322
|
+
} from "@xyo-network/sdk-js";
|
|
319
323
|
import { hasMongoConfig } from "@xyo-network/xl1-sdk";
|
|
320
324
|
|
|
321
325
|
// src/services/modules/ChainStepRewardsClaimSentinel/ChainStepRewardsClaimSentinel.ts
|
|
322
|
-
import {
|
|
326
|
+
import {
|
|
327
|
+
assertEx as assertEx3,
|
|
328
|
+
delay,
|
|
329
|
+
isDefined as isDefined3,
|
|
330
|
+
isUndefined,
|
|
331
|
+
toAddress
|
|
332
|
+
} from "@xylabs/sdk-js";
|
|
323
333
|
import { AbstractSentinel, asSchema } from "@xyo-network/sdk-js";
|
|
324
|
-
import {
|
|
334
|
+
import {
|
|
335
|
+
asXL1BlockNumber,
|
|
336
|
+
asXL1BlockRange as asXL1BlockRange2,
|
|
337
|
+
blockRangeSteps as blockRangeSteps2,
|
|
338
|
+
completedStepRewardAddress,
|
|
339
|
+
createTransferPayload,
|
|
340
|
+
derivedReceiveAddress,
|
|
341
|
+
flattenHydratedTransaction,
|
|
342
|
+
flattenHydratedTransactions,
|
|
343
|
+
isStepIdentityPayload,
|
|
344
|
+
XYO_STEP_REWARD_ADDRESS
|
|
345
|
+
} from "@xyo-network/xl1-sdk";
|
|
325
346
|
import { Mutex } from "async-mutex";
|
|
326
347
|
var ChainStepRewardsClaimSentinelConfigSchema = asSchema("network.xyo.sentinel.chain.step.rewards.claim.config", true);
|
|
327
348
|
var defaultStepClaimIntervalMs = 15e3;
|
|
328
349
|
var scope = "reward-escrow";
|
|
329
|
-
var DefaultRewardableSteps = [
|
|
330
|
-
3,
|
|
331
|
-
4,
|
|
332
|
-
5,
|
|
333
|
-
6,
|
|
334
|
-
7,
|
|
335
|
-
8
|
|
336
|
-
];
|
|
350
|
+
var DefaultRewardableSteps = [3, 4, 5, 6, 7, 8];
|
|
337
351
|
var ChainStepRewardsClaimSentinel = class extends AbstractSentinel {
|
|
338
|
-
static
|
|
339
|
-
__name(this, "ChainStepRewardsClaimSentinel");
|
|
340
|
-
}
|
|
341
|
-
static configSchemas = [
|
|
342
|
-
ChainStepRewardsClaimSentinelConfigSchema
|
|
343
|
-
];
|
|
352
|
+
static configSchemas = [ChainStepRewardsClaimSentinelConfigSchema];
|
|
344
353
|
static defaultConfigSchema = ChainStepRewardsClaimSentinelConfigSchema;
|
|
345
354
|
_claimAttemptsCounter;
|
|
346
355
|
_claimCheckCounter;
|
|
@@ -367,18 +376,10 @@ var ChainStepRewardsClaimSentinel = class extends AbstractSentinel {
|
|
|
367
376
|
}
|
|
368
377
|
async createHandler() {
|
|
369
378
|
await super.createHandler();
|
|
370
|
-
this._claimAttemptsCounter = this.meter?.createCounter("chain_step_rewards_claim_sentinel_attempts_total", {
|
|
371
|
-
|
|
372
|
-
});
|
|
373
|
-
this.
|
|
374
|
-
description: "Number of claim checks"
|
|
375
|
-
});
|
|
376
|
-
this._claimSuccessCounter = this.meter?.createCounter("chain_step_rewards_claim_sentinel_success_total", {
|
|
377
|
-
description: "Number of claim successes"
|
|
378
|
-
});
|
|
379
|
-
this._claimErrorCounter = this.meter?.createCounter("chain_step_rewards_claim_sentinel_errors_total", {
|
|
380
|
-
description: "Number of claim errors"
|
|
381
|
-
});
|
|
379
|
+
this._claimAttemptsCounter = this.meter?.createCounter("chain_step_rewards_claim_sentinel_attempts_total", { description: "Number of claim attempts" });
|
|
380
|
+
this._claimCheckCounter = this.meter?.createCounter("chain_step_rewards_claim_sentinel_check_total", { description: "Number of claim checks" });
|
|
381
|
+
this._claimSuccessCounter = this.meter?.createCounter("chain_step_rewards_claim_sentinel_success_total", { description: "Number of claim successes" });
|
|
382
|
+
this._claimErrorCounter = this.meter?.createCounter("chain_step_rewards_claim_sentinel_errors_total", { description: "Number of claim errors" });
|
|
382
383
|
const gateway = assertEx3(this.params.gateway, () => "Gateway parameter is required");
|
|
383
384
|
const connection = assertEx3(gateway.connection, () => "Gateway connection is required");
|
|
384
385
|
const viewer = assertEx3(connection.viewer, () => "Viewer is not defined in gateway connection");
|
|
@@ -398,13 +399,8 @@ var ChainStepRewardsClaimSentinel = class extends AbstractSentinel {
|
|
|
398
399
|
} else {
|
|
399
400
|
const stepIdentities = payloads.filter(isStepIdentityPayload).map((p) => {
|
|
400
401
|
const { step, block: blockNumber } = p;
|
|
401
|
-
const block = asXL1BlockNumber(blockNumber, {
|
|
402
|
-
|
|
403
|
-
});
|
|
404
|
-
return {
|
|
405
|
-
step,
|
|
406
|
-
block
|
|
407
|
-
};
|
|
402
|
+
const block = asXL1BlockNumber(blockNumber, { name: "reportHandler" });
|
|
403
|
+
return { step, block };
|
|
408
404
|
}).filter((stepIdentity) => this.rewardableSteps.includes(stepIdentity.step));
|
|
409
405
|
for (const stepIdentity of stepIdentities) {
|
|
410
406
|
const result = await this.claimStepIdentity(stepIdentity);
|
|
@@ -437,15 +433,8 @@ var ChainStepRewardsClaimSentinel = class extends AbstractSentinel {
|
|
|
437
433
|
for (const step of this.rewardableSteps) {
|
|
438
434
|
const from = 0;
|
|
439
435
|
const to = await this.viewer.currentBlockNumber();
|
|
440
|
-
const range = asXL1BlockRange2([
|
|
441
|
-
|
|
442
|
-
to
|
|
443
|
-
], {
|
|
444
|
-
name: "claimAllSteps"
|
|
445
|
-
});
|
|
446
|
-
const stepIdentities = blockRangeSteps2(range, [
|
|
447
|
-
step
|
|
448
|
-
]);
|
|
436
|
+
const range = asXL1BlockRange2([from, to], { name: "claimAllSteps" });
|
|
437
|
+
const stepIdentities = blockRangeSteps2(range, [step]);
|
|
449
438
|
for (const stepIdentity of stepIdentities) {
|
|
450
439
|
const result = await this.claimStepIdentity(stepIdentity);
|
|
451
440
|
if (isDefined3(result)) {
|
|
@@ -458,25 +447,28 @@ var ChainStepRewardsClaimSentinel = class extends AbstractSentinel {
|
|
|
458
447
|
}
|
|
459
448
|
async claimStepIdentity(stepIdentity) {
|
|
460
449
|
this.logger?.info(`Checking rewards to claim for step ${stepIdentity.step} at block ${stepIdentity.block}`);
|
|
461
|
-
const claimCounterAttributes = {
|
|
462
|
-
step: stepIdentity.step.toString(),
|
|
463
|
-
block: stepIdentity.block.toString()
|
|
464
|
-
};
|
|
450
|
+
const claimCounterAttributes = { step: stepIdentity.step.toString(), block: stepIdentity.block.toString() };
|
|
465
451
|
try {
|
|
466
452
|
this._claimCheckCounter?.add(1, claimCounterAttributes);
|
|
467
453
|
const stepRewardAddress = completedStepRewardAddress(stepIdentity);
|
|
468
454
|
const balance = await this.viewer.account.balance.accountBalance(stepRewardAddress);
|
|
469
|
-
this.logger?.info(
|
|
455
|
+
this.logger?.info(
|
|
456
|
+
`Found balance of ${balance} to claim for step ${stepIdentity.step} at block ${stepIdentity.block} in step reward address ${stepRewardAddress}`
|
|
457
|
+
);
|
|
470
458
|
if (balance > 0n) {
|
|
471
459
|
this._claimAttemptsCounter?.add(1, claimCounterAttributes);
|
|
472
460
|
const rewardsByStaker = await this.viewer.networkStakeStepRewardPoolRewards(stepIdentity);
|
|
473
461
|
const rewardRecipients = Object.keys(rewardsByStaker).length;
|
|
474
|
-
this.logger?.info(
|
|
462
|
+
this.logger?.info(
|
|
463
|
+
`Found ${rewardRecipients} reward recipients for step ${stepIdentity.step} at block ${stepIdentity.block}`
|
|
464
|
+
);
|
|
475
465
|
if (!this.config.claimEmptySteps) {
|
|
476
466
|
assertEx3(rewardRecipients > 0, () => "No reward recipients for step");
|
|
477
467
|
}
|
|
478
468
|
const addressDistributions = this.calculateAddressDistributions(rewardsByStaker, balance);
|
|
479
|
-
this.logger?.info(
|
|
469
|
+
this.logger?.info(
|
|
470
|
+
`Calculated address distributions for step ${stepIdentity.step} at block ${stepIdentity.block} with ${Object.keys(addressDistributions).length} addresses`
|
|
471
|
+
);
|
|
480
472
|
const tx = await this.submitRewardDistributionTransaction(stepRewardAddress, addressDistributions, stepIdentity, this.gateway);
|
|
481
473
|
this.logger?.info(`Claimed rewards for step ${stepIdentity.step} at block ${stepIdentity.block}`);
|
|
482
474
|
this._claimSuccessCounter?.add(1, claimCounterAttributes);
|
|
@@ -489,24 +481,35 @@ var ChainStepRewardsClaimSentinel = class extends AbstractSentinel {
|
|
|
489
481
|
}
|
|
490
482
|
async submitRewardDistributionTransaction(stepRewardAddress, addressDistributions, step, gateway) {
|
|
491
483
|
const transferPayload = createTransferPayload(stepRewardAddress, addressDistributions);
|
|
492
|
-
transferPayload.context = {
|
|
493
|
-
step
|
|
494
|
-
};
|
|
484
|
+
transferPayload.context = { step };
|
|
495
485
|
const currentBlockNumber = await this.viewer.currentBlockNumber();
|
|
496
|
-
const result = await gateway.addPayloadsToChain?.([
|
|
497
|
-
transferPayload
|
|
498
|
-
], [], {
|
|
499
|
-
nbf: currentBlockNumber,
|
|
500
|
-
exp: asXL1BlockNumber(currentBlockNumber + 10)
|
|
501
|
-
});
|
|
486
|
+
const result = await gateway.addPayloadsToChain?.([transferPayload], [], { nbf: currentBlockNumber, exp: asXL1BlockNumber(currentBlockNumber + 10) });
|
|
502
487
|
if (isDefined3(result)) return result[1];
|
|
503
488
|
}
|
|
504
489
|
};
|
|
505
490
|
|
|
506
491
|
// src/services/modules/DerivedAddressWalletTransferSentinel/DerivedAddressWalletTransferSentinel.ts
|
|
507
|
-
import {
|
|
492
|
+
import {
|
|
493
|
+
AddressZod,
|
|
494
|
+
assertEx as assertEx4,
|
|
495
|
+
EthAddressZod,
|
|
496
|
+
hexToBigInt,
|
|
497
|
+
HexZod,
|
|
498
|
+
isDefined as isDefined4,
|
|
499
|
+
isUndefined as isUndefined2,
|
|
500
|
+
toAddress as toAddress2,
|
|
501
|
+
toHex
|
|
502
|
+
} from "@xylabs/sdk-js";
|
|
508
503
|
import { AbstractSentinel as AbstractSentinel2, asSchema as asSchema2 } from "@xyo-network/sdk-js";
|
|
509
|
-
import {
|
|
504
|
+
import {
|
|
505
|
+
createTransferPayload as createTransferPayload2,
|
|
506
|
+
derivedReceiveAddress as derivedReceiveAddress2,
|
|
507
|
+
flattenHydratedTransaction as flattenHydratedTransaction2,
|
|
508
|
+
isEIP712DataPayload,
|
|
509
|
+
isEIP712SignaturePayload,
|
|
510
|
+
verifyEIP712Message,
|
|
511
|
+
XL1BlockNumberZod
|
|
512
|
+
} from "@xyo-network/xl1-sdk";
|
|
510
513
|
import z3 from "zod";
|
|
511
514
|
var DerivedAddressWalletTransferSentinelConfigSchema = asSchema2("network.xyo.sentinel.chain.derived.address.wallet.transfer.config", true);
|
|
512
515
|
var scope2 = "reward-escrow";
|
|
@@ -515,10 +518,11 @@ var ConfirmedClaimValuesZod = z3.object({
|
|
|
515
518
|
"To XL1 Address": AddressZod,
|
|
516
519
|
"XL1 Amount": z3.string(),
|
|
517
520
|
"XL1 Amount (Hex)": HexZod,
|
|
521
|
+
// Hex
|
|
518
522
|
"XL1 Not after block": XL1BlockNumberZod,
|
|
519
523
|
"XL1 Not before block": XL1BlockNumberZod
|
|
520
524
|
});
|
|
521
|
-
var parseConfirmedClaimValues =
|
|
525
|
+
var parseConfirmedClaimValues = (values) => {
|
|
522
526
|
return {
|
|
523
527
|
amount: values["XL1 Amount (Hex)"],
|
|
524
528
|
exp: values["XL1 Not after block"],
|
|
@@ -526,14 +530,9 @@ var parseConfirmedClaimValues = /* @__PURE__ */ __name((values) => {
|
|
|
526
530
|
nbf: values["XL1 Not before block"],
|
|
527
531
|
to: toAddress2(values["To XL1 Address"])
|
|
528
532
|
};
|
|
529
|
-
}
|
|
533
|
+
};
|
|
530
534
|
var DerivedAddressWalletTransferSentinel = class extends AbstractSentinel2 {
|
|
531
|
-
static
|
|
532
|
-
__name(this, "DerivedAddressWalletTransferSentinel");
|
|
533
|
-
}
|
|
534
|
-
static configSchemas = [
|
|
535
|
-
DerivedAddressWalletTransferSentinelConfigSchema
|
|
536
|
-
];
|
|
535
|
+
static configSchemas = [DerivedAddressWalletTransferSentinelConfigSchema];
|
|
537
536
|
static defaultConfigSchema = DerivedAddressWalletTransferSentinelConfigSchema;
|
|
538
537
|
_transferAttemptsCounter;
|
|
539
538
|
_transferErrorCounter;
|
|
@@ -543,15 +542,18 @@ var DerivedAddressWalletTransferSentinel = class extends AbstractSentinel2 {
|
|
|
543
542
|
}
|
|
544
543
|
async createHandler() {
|
|
545
544
|
await super.createHandler();
|
|
546
|
-
this._transferAttemptsCounter = this.meter?.createCounter(
|
|
547
|
-
|
|
548
|
-
|
|
549
|
-
|
|
550
|
-
|
|
551
|
-
|
|
552
|
-
|
|
553
|
-
|
|
554
|
-
|
|
545
|
+
this._transferAttemptsCounter = this.meter?.createCounter(
|
|
546
|
+
"derived_address_wallet_transfer_sentinel_attempts_total",
|
|
547
|
+
{ description: "Number of transfer attempts" }
|
|
548
|
+
);
|
|
549
|
+
this._transferSuccessCounter = this.meter?.createCounter(
|
|
550
|
+
"derived_address_wallet_transfer_sentinel_success_total",
|
|
551
|
+
{ description: "Number of transfer successes" }
|
|
552
|
+
);
|
|
553
|
+
this._transferErrorCounter = this.meter?.createCounter(
|
|
554
|
+
"derived_address_wallet_transfer_sentinel_errors_total",
|
|
555
|
+
{ description: "Number of transfer errors" }
|
|
556
|
+
);
|
|
555
557
|
}
|
|
556
558
|
async reportHandler(payloads) {
|
|
557
559
|
const data = payloads?.find((x) => isEIP712DataPayload(x));
|
|
@@ -577,8 +579,14 @@ var DerivedAddressWalletTransferSentinel = class extends AbstractSentinel2 {
|
|
|
577
579
|
this._transferErrorCounter?.add(1);
|
|
578
580
|
return [];
|
|
579
581
|
}
|
|
580
|
-
submitRewardDistributionTransaction =
|
|
581
|
-
const {
|
|
582
|
+
submitRewardDistributionTransaction = async (claimValues) => {
|
|
583
|
+
const {
|
|
584
|
+
amount,
|
|
585
|
+
from: address,
|
|
586
|
+
to,
|
|
587
|
+
nbf,
|
|
588
|
+
exp
|
|
589
|
+
} = claimValues;
|
|
582
590
|
const signer = assertEx4(this.gateway.signer, () => "Signer is not defined in gateway");
|
|
583
591
|
const signerAddress = await signer.address();
|
|
584
592
|
const connection = this.gateway.connection;
|
|
@@ -591,27 +599,20 @@ var DerivedAddressWalletTransferSentinel = class extends AbstractSentinel2 {
|
|
|
591
599
|
assertEx4(balance === redemptionAmount, () => "Insufficient balance in escrow account");
|
|
592
600
|
const allowance = await viewer.account.balance.accountBalance(signerAddress);
|
|
593
601
|
assertEx4(allowance > 1000n, () => "Insufficient allowance to transfer from escrow account");
|
|
594
|
-
const transferPayload = createTransferPayload2(escrowAccount, {
|
|
595
|
-
|
|
596
|
-
});
|
|
597
|
-
transferPayload.context = {
|
|
598
|
-
address,
|
|
599
|
-
scope: scope2
|
|
600
|
-
};
|
|
602
|
+
const transferPayload = createTransferPayload2(escrowAccount, { [to]: hexToBigInt(toHex(amount)) });
|
|
603
|
+
transferPayload.context = { address, scope: scope2 };
|
|
601
604
|
const chain = await viewer.chainId();
|
|
602
|
-
const result = await this.gateway.addPayloadsToChain?.([
|
|
603
|
-
transferPayload
|
|
604
|
-
], [], {
|
|
605
|
+
const result = await this.gateway.addPayloadsToChain?.([transferPayload], [], {
|
|
605
606
|
chain,
|
|
606
607
|
nbf,
|
|
607
608
|
exp
|
|
608
609
|
});
|
|
609
610
|
if (isDefined4(result)) return result[1];
|
|
610
|
-
}
|
|
611
|
+
};
|
|
611
612
|
};
|
|
612
613
|
|
|
613
614
|
// src/services/manifest/getLocator.ts
|
|
614
|
-
var getLocator =
|
|
615
|
+
var getLocator = async (context, gateway) => {
|
|
615
616
|
const { config, logger } = context;
|
|
616
617
|
const { otlpEndpoint } = config.telemetry?.otel ?? {};
|
|
617
618
|
const { path: endpoint = "/metrics", port = 9467 } = config.telemetry?.metrics?.scrape ?? {};
|
|
@@ -621,17 +622,20 @@ var getLocator = /* @__PURE__ */ __name(async (context, gateway) => {
|
|
|
621
622
|
serviceVersion: "1.0.0"
|
|
622
623
|
},
|
|
623
624
|
otlpEndpoint,
|
|
624
|
-
metricsConfig: {
|
|
625
|
-
endpoint,
|
|
626
|
-
port
|
|
627
|
-
}
|
|
625
|
+
metricsConfig: { endpoint, port }
|
|
628
626
|
});
|
|
629
627
|
if (isDefined5(logger)) AbstractModule.defaultLogger = logger;
|
|
630
628
|
const statusReporter = logger ? new LoggerModuleStatusReporter(logger) : void 0;
|
|
631
629
|
const locator = new ModuleFactoryLocator();
|
|
632
630
|
const mongoConfig = config.storage?.mongo;
|
|
633
631
|
if (hasMongoConfig(mongoConfig)) {
|
|
634
|
-
const {
|
|
632
|
+
const {
|
|
633
|
+
connectionString: dbConnectionString,
|
|
634
|
+
database: dbName,
|
|
635
|
+
domain: dbDomain,
|
|
636
|
+
password: dbPassword,
|
|
637
|
+
username: dbUserName
|
|
638
|
+
} = mongoConfig;
|
|
635
639
|
const payloadSdkConfig = {
|
|
636
640
|
dbConnectionString,
|
|
637
641
|
dbDomain,
|
|
@@ -677,7 +681,7 @@ var getLocator = /* @__PURE__ */ __name(async (context, gateway) => {
|
|
|
677
681
|
};
|
|
678
682
|
locator.register(DerivedAddressWalletTransferSentinel.factory(derivedAddressWalletTransferSentinelParams));
|
|
679
683
|
return locator;
|
|
680
|
-
}
|
|
684
|
+
};
|
|
681
685
|
|
|
682
686
|
// src/services/manifest/getNode.ts
|
|
683
687
|
import { ManifestWrapper } from "@xyo-network/sdk-js";
|
|
@@ -779,7 +783,7 @@ var PrivateChildManifests = [];
|
|
|
779
783
|
var PublicChildManifests = [];
|
|
780
784
|
|
|
781
785
|
// src/services/manifest/getNode.ts
|
|
782
|
-
var getNode =
|
|
786
|
+
var getNode = async (context, gateway, wallet) => {
|
|
783
787
|
const locator = await getLocator(context, gateway);
|
|
784
788
|
const wrapper = new ManifestWrapper(NodeManifest, wallet, locator, PublicChildManifests, PrivateChildManifests);
|
|
785
789
|
const [node, ...childNodes] = await wrapper.loadNodes();
|
|
@@ -788,11 +792,11 @@ var getNode = /* @__PURE__ */ __name(async (context, gateway, wallet) => {
|
|
|
788
792
|
await Promise.all(childNodes.map((childNode) => node.attach(childNode.address, true)));
|
|
789
793
|
}
|
|
790
794
|
return node;
|
|
791
|
-
}
|
|
795
|
+
};
|
|
792
796
|
|
|
793
797
|
// src/server/server.ts
|
|
794
798
|
var hostname = "::";
|
|
795
|
-
var getServer =
|
|
799
|
+
var getServer = async (context, gateway, locator, providedNode) => {
|
|
796
800
|
const { logger, config } = context;
|
|
797
801
|
const { port } = config;
|
|
798
802
|
const bios = await boot();
|
|
@@ -809,26 +813,10 @@ var getServer = /* @__PURE__ */ __name(async (context, gateway, locator, provide
|
|
|
809
813
|
});
|
|
810
814
|
server.setTimeout(12e4);
|
|
811
815
|
return server;
|
|
812
|
-
}
|
|
816
|
+
};
|
|
813
817
|
|
|
814
818
|
// src/RewardRedemptionActor.ts
|
|
815
|
-
function _ts_decorate(decorators, target, key, desc) {
|
|
816
|
-
var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
|
|
817
|
-
if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
|
|
818
|
-
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;
|
|
819
|
-
return c > 3 && r && Object.defineProperty(target, key, r), r;
|
|
820
|
-
}
|
|
821
|
-
__name(_ts_decorate, "_ts_decorate");
|
|
822
819
|
var RewardRedemptionActor = class extends ActorV3 {
|
|
823
|
-
static {
|
|
824
|
-
__name(this, "RewardRedemptionActor");
|
|
825
|
-
}
|
|
826
|
-
static needs = {
|
|
827
|
-
required: [
|
|
828
|
-
XyoGatewayRunnerMoniker,
|
|
829
|
-
XyoViewerMoniker2
|
|
830
|
-
]
|
|
831
|
-
};
|
|
832
820
|
_gatewayRunner;
|
|
833
821
|
server;
|
|
834
822
|
get gatewayRunner() {
|
|
@@ -855,7 +843,13 @@ var RewardRedemptionActor = class extends ActorV3 {
|
|
|
855
843
|
this.server = void 0;
|
|
856
844
|
}
|
|
857
845
|
};
|
|
858
|
-
RewardRedemptionActor
|
|
846
|
+
__publicField(RewardRedemptionActor, "needs", {
|
|
847
|
+
required: [
|
|
848
|
+
XyoGatewayRunnerMoniker,
|
|
849
|
+
XyoViewerMoniker2
|
|
850
|
+
]
|
|
851
|
+
});
|
|
852
|
+
RewardRedemptionActor = __decorateClass([
|
|
859
853
|
creatable()
|
|
860
854
|
], RewardRedemptionActor);
|
|
861
855
|
|
|
@@ -873,18 +867,14 @@ async function getRewardRedemptionActor(config, locator) {
|
|
|
873
867
|
locator
|
|
874
868
|
});
|
|
875
869
|
}
|
|
876
|
-
__name(getRewardRedemptionActor, "getRewardRedemptionActor");
|
|
877
870
|
async function runRewardRedemptionApi(config, orchestrator, locator) {
|
|
878
871
|
const rewardRedemption = await getRewardRedemptionActor(config, locator);
|
|
879
|
-
const actors = [
|
|
880
|
-
rewardRedemption
|
|
881
|
-
].filter(exists);
|
|
872
|
+
const actors = [rewardRedemption].filter(exists);
|
|
882
873
|
for (const actor of actors) {
|
|
883
874
|
await orchestrator.registerActor(actor);
|
|
884
875
|
}
|
|
885
876
|
await orchestrator.start();
|
|
886
877
|
}
|
|
887
|
-
__name(runRewardRedemptionApi, "runRewardRedemptionApi");
|
|
888
878
|
|
|
889
879
|
// src/command.ts
|
|
890
880
|
function rewardRedemptionCommand(getConfiguration, getLocatorsFromConfig) {
|
|
@@ -892,16 +882,13 @@ function rewardRedemptionCommand(getConfiguration, getLocatorsFromConfig) {
|
|
|
892
882
|
command: "reward-redemption-api",
|
|
893
883
|
deprecated: 'Use "start rewardRedemption" instead',
|
|
894
884
|
describe: "Run a XL1 Rewards Redemption API Node",
|
|
895
|
-
handler:
|
|
885
|
+
handler: async () => {
|
|
896
886
|
const configuration = getConfiguration();
|
|
897
|
-
const { locators, orchestrator } = await getLocatorsFromConfig([
|
|
898
|
-
"rewardRedemption"
|
|
899
|
-
], configuration);
|
|
887
|
+
const { locators, orchestrator } = await getLocatorsFromConfig(["rewardRedemption"], configuration);
|
|
900
888
|
await runRewardRedemptionApi(RewardRedemptionConfigZod.parse(locators["rewardRedemption"].context.config), orchestrator, locators["rewardRedemption"]);
|
|
901
|
-
}
|
|
889
|
+
}
|
|
902
890
|
};
|
|
903
891
|
}
|
|
904
|
-
__name(rewardRedemptionCommand, "rewardRedemptionCommand");
|
|
905
892
|
export {
|
|
906
893
|
ChainStepRewardsClaimSentinel,
|
|
907
894
|
ChainStepRewardsClaimSentinelConfigSchema,
|
|
@@ -918,4 +905,4 @@ export {
|
|
|
918
905
|
rewardRedemptionCommand,
|
|
919
906
|
runRewardRedemptionApi
|
|
920
907
|
};
|
|
921
|
-
//# sourceMappingURL=index.mjs.map
|
|
908
|
+
//# sourceMappingURL=index.mjs.map
|
package/dist/node/index.mjs.map
CHANGED
|
@@ -1 +1,7 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/command.ts","../../src/run.ts","../../src/RewardRedemptionActor.ts","../../src/server/app.ts","../../src/server/instrumentation.ts","../../src/server/routes/livez/get.ts","../../src/server/routes/readyz/get.ts","../../src/server/routes/startupz/get.ts","../../src/server/routes/addProbeRoutes.ts","../../src/server/routes/dataLake/archivistMiddleware.ts","../../src/server/routes/dataLake/addDataLakeRoutes.ts","../../src/server/routes/rewardRedemption/addRewardRoutes.ts","../../src/server/routes/rewardRedemption/routeDefinitions/routes/claimRange.ts","../../src/server/routes/rewardRedemption/routeDefinitions/util/rewardableSteps.ts","../../src/server/routes/rewardRedemption/routeDefinitions/routes/redeem.ts","../../src/server/routes/rewardRedemption/routeDefinitions/getRouteDefinitions.ts","../../src/server/routes/addRoutes.ts","../../src/server/server.ts","../../src/services/manifest/getLocator.ts","../../src/services/modules/ChainStepRewardsClaimSentinel/ChainStepRewardsClaimSentinel.ts","../../src/services/modules/DerivedAddressWalletTransferSentinel/DerivedAddressWalletTransferSentinel.ts","../../src/services/manifest/getNode.ts","../../src/services/manifest/node.json","../../src/services/manifest/nodeManifest.ts","../../src/services/manifest/private/index.ts","../../src/services/manifest/public/index.ts"],"sourcesContent":["import type { GetLocatorsFromConfig } from '@xyo-network/chain-orchestration'\nimport { RewardRedemptionConfigZod } from '@xyo-network/chain-orchestration'\nimport type { Config } from '@xyo-network/xl1-sdk'\nimport type { CommandModule } from 'yargs'\n\nimport { runRewardRedemptionApi } from './run.ts'\n\nexport function rewardRedemptionCommand(getConfiguration: () => Config, getLocatorsFromConfig: GetLocatorsFromConfig): CommandModule {\n return {\n command: 'reward-redemption-api',\n deprecated: 'Use \"start rewardRedemption\" instead',\n describe: 'Run a XL1 Rewards Redemption API Node',\n handler: async () => {\n const configuration = getConfiguration()\n const { locators, orchestrator } = await getLocatorsFromConfig(['rewardRedemption'], configuration)\n await runRewardRedemptionApi(RewardRedemptionConfigZod.parse(locators['rewardRedemption'].context.config), orchestrator, locators['rewardRedemption'])\n },\n }\n}\n","import { exists } from '@xylabs/sdk-js'\nimport type {\n OrchestratorInstance,\n RewardRedemptionConfig,\n} from '@xyo-network/chain-orchestration'\nimport { initActorWallet } from '@xyo-network/chain-orchestration'\nimport type { ProviderFactoryLocatorInstance } from '@xyo-network/xl1-sdk'\n\nimport { RewardRedemptionActor } from './RewardRedemptionActor.ts'\n\nexport async function getRewardRedemptionActor(\n config: RewardRedemptionConfig,\n locator: ProviderFactoryLocatorInstance,\n) {\n const account = await initActorWallet({\n config, logger: locator.context.logger, singletons: {}, caches: {},\n })\n return await RewardRedemptionActor.create({\n account, config, locator,\n })\n}\n\nexport async function runRewardRedemptionApi(\n config: RewardRedemptionConfig,\n orchestrator: OrchestratorInstance,\n locator: ProviderFactoryLocatorInstance,\n) {\n const rewardRedemption = await getRewardRedemptionActor(config, locator)\n const actors = [rewardRedemption].filter(exists)\n\n for (const actor of actors) {\n await orchestrator.registerActor(actor)\n }\n await orchestrator.start()\n}\n","import type { Server } from 'node:http'\n\nimport { creatable } from '@xylabs/sdk-js'\nimport type {\n ActorCapabilityNeeds, ActorParamsV3, RewardRedemptionConfig,\n} from '@xyo-network/chain-orchestration'\nimport { ActorV3 } from '@xyo-network/chain-orchestration'\nimport type { XyoGatewayRunner } from '@xyo-network/xl1-sdk'\nimport {\n asHostActorConfigContext,\n XyoGatewayRunnerMoniker,\n XyoViewerMoniker,\n} from '@xyo-network/xl1-sdk'\n\nimport { getServer } from './server/index.ts'\n\nexport type RewardRedemptionActorParams = ActorParamsV3<{\n config: RewardRedemptionConfig\n}>\n\n@creatable()\nexport class RewardRedemptionActor extends ActorV3<RewardRedemptionActorParams> {\n static readonly needs: ActorCapabilityNeeds = {\n required: [\n XyoGatewayRunnerMoniker,\n XyoViewerMoniker,\n ],\n }\n\n protected _gatewayRunner!: XyoGatewayRunner\n private server?: Server\n\n protected get gatewayRunner() {\n return this._gatewayRunner\n }\n\n override async createHandler() {\n await super.createHandler()\n this._gatewayRunner = await this.locator.getInstance(XyoGatewayRunnerMoniker)\n }\n\n override async startHandler() {\n await super.startHandler()\n this.stopServer()\n await this.startServer()\n }\n\n override async stopHandler() {\n await super.stopHandler()\n this.stopServer()\n }\n\n private async startServer() {\n this.server = await getServer(asHostActorConfigContext(this.context, true), this._gatewayRunner, this.locator)\n }\n\n private stopServer() {\n this.server?.close()\n this.server = undefined\n }\n}\n","import { standardErrors } from '@xylabs/express'\nimport type { RewardRedemptionConfig } from '@xyo-network/chain-orchestration'\nimport { sharedMiddleware } from '@xyo-network/chain-orchestration'\nimport type { NodeInstance } from '@xyo-network/sdk-js'\nimport type { ProviderFactoryLocatorInstance } from '@xyo-network/xl1-sdk'\nimport type { Express } from 'express'\nimport express from 'express'\n\nimport { addInstrumentation } from './instrumentation.ts'\nimport { addRoutes } from './routes/index.ts'\n\nexport const getApp = (node: NodeInstance, config: RewardRedemptionConfig, locator: ProviderFactoryLocatorInstance): Express => {\n addInstrumentation()\n const app = express()\n sharedMiddleware(app)\n app.config = config\n app.node = node\n app.locator = locator\n addRoutes(app)\n app.use(standardErrors)\n return app\n}\n","import { registerInstrumentations } from '@opentelemetry/instrumentation'\nimport { ExpressInstrumentation } from '@opentelemetry/instrumentation-express'\nimport { HttpInstrumentation } from '@opentelemetry/instrumentation-http'\n\n/**\n * Registers OpenTelemetry instrumentations for HTTP and Express.\n * This function is used to set up the necessary instrumentations for monitoring\n * HTTP requests and Express applications. Since it monkey patches the Express\n * router & middleware system, it should be called before any Express applications\n * are defined.\n */\nexport const addInstrumentation = () => {\n const instrumentations = [new HttpInstrumentation(), new ExpressInstrumentation()]\n registerInstrumentations({ instrumentations })\n}\n","import type { NoReqParams } from '@xylabs/express'\nimport { setRawResponseFormat } from '@xylabs/express'\nimport type { RequestHandler } from 'express'\nimport { ReasonPhrases } from 'http-status-codes'\n\nconst message = ReasonPhrases.OK\n\nconst handler: RequestHandler<NoReqParams> = (_req, res) => {\n setRawResponseFormat(res)\n res.status(200).send({ message })\n}\n\nexport const getLivez: RequestHandler<NoReqParams> = handler\n","import type { NoReqParams } from '@xylabs/express'\nimport { setRawResponseFormat } from '@xylabs/express'\nimport type { RequestHandler } from 'express'\nimport { ReasonPhrases } from 'http-status-codes'\n\nconst message = ReasonPhrases.OK\n\nconst handler: RequestHandler<NoReqParams> = (_req, res) => {\n setRawResponseFormat(res)\n res.status(200).send({ message })\n}\n\nexport const getReadyz: RequestHandler<NoReqParams> = handler\n","import type { NoReqParams } from '@xylabs/express'\nimport { setRawResponseFormat } from '@xylabs/express'\nimport type { RequestHandler } from 'express'\nimport { ReasonPhrases } from 'http-status-codes'\n\nconst message = ReasonPhrases.OK\n\nconst handler: RequestHandler<NoReqParams> = (_req, res) => {\n setRawResponseFormat(res)\n res.status(200).send({ message })\n}\n\nexport const getStartupz: RequestHandler<NoReqParams> = handler\n","import type { Express } from 'express'\n\nimport { getLivez } from './livez/index.ts'\nimport { getReadyz } from './readyz/index.ts'\nimport { getStartupz } from './startupz/index.ts'\n\nexport const addProbeRoutes = (app: Express) => {\n app.get('/livez', getLivez)\n app.get('/readyz', getReadyz)\n app.get('/startupz', getStartupz)\n}\n","import { setRawResponseFormat } from '@xylabs/express'\nimport { asHash, isDefined } from '@xylabs/sdk-js'\nimport type {\n ArchivistInstance,\n ArchivistNextOptions, ModuleIdentifier,\n NextOptions, NodeInstance, Payload,\n} from '@xyo-network/sdk-js'\nimport {\n asArchivistInstance, isAnyPayload, isSequence, PayloadBuilder,\n} from '@xyo-network/sdk-js'\nimport type { Request, Router } from 'express'\nimport express from 'express'\n\nconst resolveArchivist = async (node: NodeInstance, archivistModuleIdentifier: ModuleIdentifier): Promise<ArchivistInstance> => {\n const mod = await node.resolve(archivistModuleIdentifier)\n return asArchivistInstance(mod, { required: true })\n}\n\nlet archivistInstance: ArchivistInstance | undefined\n\nconst getArchivist = async (node: NodeInstance, archivistModuleIdentifier: ModuleIdentifier): Promise<ArchivistInstance> => {\n if (isDefined(archivistInstance)) return archivistInstance\n archivistInstance = await resolveArchivist(node, archivistModuleIdentifier)\n return archivistInstance\n}\n\ninterface ArchivistMiddlewareOptions {\n archivistModuleIdentifier: ModuleIdentifier\n node: NodeInstance\n}\n\nexport const archivistMiddleware = (options: ArchivistMiddlewareOptions): Router => {\n const { node, archivistModuleIdentifier } = options\n const router = express.Router({ mergeParams: true })\n\n router.post('/insert', async (req, res) => {\n setRawResponseFormat(res)\n const body = Array.isArray(req.body) ? req.body : [req.body]\n const payloads = (await PayloadBuilder.hashPairs<Payload>(body)).map(p => p[0])\n const archivist = await getArchivist(node, archivistModuleIdentifier)\n const result = await archivist.insert(payloads)\n res.status(200).json(result)\n })\n\n router.get('/next', async (req: Request<Partial<NextOptions>>, res) => {\n setRawResponseFormat(res)\n const cursor = isSequence(req.query.cursor) ? req.query.cursor : undefined\n const limit = isDefined(req.query.limit) ? Number(req.query.limit) : undefined\n const open = isDefined(req.query.open) ? Boolean(req.query.open) : undefined\n const order = req.query.order === 'asc' ? 'asc' : 'desc'\n const options: ArchivistNextOptions = {\n limit, open, order, cursor,\n }\n const archivist = await getArchivist(node, archivistModuleIdentifier)\n const result = await archivist.next(options)\n res.status(200).json(result)\n })\n router.post('/next', async (req: Request<{}, {}, ArchivistNextOptions | undefined>, res) => {\n setRawResponseFormat(res)\n const options = req.body\n const archivist = await getArchivist(node, archivistModuleIdentifier)\n const result = await (isDefined(options) ? archivist.next(options) : archivist.next())\n res.status(200).json(result)\n })\n\n router.get('/get/:hash', async (req, res) => {\n setRawResponseFormat(res)\n const { hash: rawHash } = req.params\n const hash = asHash(rawHash)\n if (isDefined(hash)) {\n const archivist = await getArchivist(node, archivistModuleIdentifier)\n const [payload] = await archivist.get([hash])\n if (isAnyPayload(payload)) {\n res.json(payload)\n return\n } else {\n res.status(404).send()\n return\n }\n }\n res.status(400).send()\n })\n\n return router\n}\n","import type { Express } from 'express'\n\nimport { archivistMiddleware } from './archivistMiddleware.ts'\n\nexport const addDataLakeRoutes = (app: Express) => {\n const { node } = app\n const archivistModuleIdentifier = 'Data'\n app.use('/data', archivistMiddleware({ node, archivistModuleIdentifier }))\n}\n","import { addRouteDefinitions } from '@xylabs/express'\nimport type { Express } from 'express'\n\nimport { getRouteDefinitions } from './routeDefinitions/index.ts'\n\nexport const addRewardRedemptionRoutes = (app: Express) => {\n const routeDefinitions = getRouteDefinitions()\n addRouteDefinitions(app, routeDefinitions)\n}\n","import type { RouteDefinition } from '@xylabs/express'\nimport { requestHandlerValidator } from '@xylabs/express'\nimport { assertEx, isDefined } from '@xylabs/sdk-js'\nimport type {\n NodeInstance, Payload, SentinelInstance,\n} from '@xyo-network/sdk-js'\nimport {\n asSentinelInstance, PayloadBuilder, PayloadZodLoose,\n} from '@xyo-network/sdk-js'\nimport type { StepIdentityPayload, XyoViewer } from '@xyo-network/xl1-sdk'\nimport {\n asXL1BlockRange, blockRangeSteps,\n StepIdentitySchema, XyoViewerMoniker,\n} from '@xyo-network/xl1-sdk'\nimport { z } from 'zod'\n\nimport { RewardableSteps } from '../util/index.ts'\n\nconst query = z.object({\n fromBlock: z.coerce.number().int().nonnegative().optional(),\n toBlock: z.coerce.number().int().nonnegative().optional(),\n step: z.coerce.number().int().nonnegative().min(Math.min(...RewardableSteps)).max(Math.max(...RewardableSteps)).optional().default(3),\n})\nconst response = z.array(PayloadZodLoose)\n\nconst validateRequest = requestHandlerValidator({ query, response })\n\nconst getChainStepRewardsClaimSentinel = async (node: NodeInstance): Promise<SentinelInstance> => {\n const mod = await node.resolve('XYORewardRedemptionNode:ChainStepRewardsClaimSentinel')\n const sentinel = asSentinelInstance(mod)\n return assertEx(sentinel, () => 'ChainStepRewardsClaimSentinel not found on node')\n}\n\nexport const postClaimRange: RouteDefinition = {\n method: 'post',\n path: '/rewards/claimRange',\n handlers: validateRequest(async (req, res) => {\n const { locator, node } = req.app\n const {\n fromBlock, toBlock, step,\n } = z.parse(query, req.query)\n const viewer = await locator.getInstance<XyoViewer>(XyoViewerMoniker)\n const from = isDefined(fromBlock) ? fromBlock : 0\n const currentBlock = await viewer.currentBlockNumber()\n const to = isDefined(toBlock) ? Math.min(toBlock, currentBlock) : currentBlock\n if (to <= from) {\n res.status(400)\n res.json([])\n return\n }\n const range = asXL1BlockRange([from, to], { name: 'claimRange' })\n // For each rewardable step in range\n const stepIdentities = blockRangeSteps(range, [step])\n const results: Payload[] = []\n for (const stepIdentity of stepIdentities) {\n const mod = await getChainStepRewardsClaimSentinel(node)\n const stepIdentityPayload = new PayloadBuilder<StepIdentityPayload>({ schema: StepIdentitySchema }).fields(stepIdentity).build()\n const result = await mod.report([stepIdentityPayload])\n results.push(...result)\n }\n res.status(200)\n res.json(results)\n }),\n}\n","export const RewardableSteps = [3, 4, 5, 6, 7, 8]\n","import type { RouteDefinition } from '@xylabs/express'\nimport { requestHandlerValidator } from '@xylabs/express'\nimport { assertEx } from '@xylabs/sdk-js'\nimport type { NodeInstance, SentinelInstance } from '@xyo-network/sdk-js'\nimport {\n asSentinelInstance, PayloadZodLoose, PayloadZodStrictOfSchema,\n} from '@xyo-network/sdk-js'\nimport {\n EIP712DataPayloadFieldsZod, EIP712DataPayloadSchema, EIP712SignaturePayloadFieldsZod,\n EIP712SignaturePayloadSchema,\n} from '@xyo-network/xl1-sdk'\nimport { z } from 'zod'\n\nconst body = z.tuple([\n PayloadZodStrictOfSchema(EIP712DataPayloadSchema).extend(EIP712DataPayloadFieldsZod.shape),\n PayloadZodStrictOfSchema(EIP712SignaturePayloadSchema).extend(EIP712SignaturePayloadFieldsZod.shape),\n])\n\nconst response = z.array(PayloadZodLoose)\nconst validateRequest = requestHandlerValidator({\n body,\n response,\n})\n\nconst getDerivedAddressWalletTransferSentinel = async (node: NodeInstance): Promise<SentinelInstance> => {\n const mod = await node.resolve('XYORewardRedemptionNode:DerivedAddressWalletTransferSentinel')\n const sentinel = asSentinelInstance(mod)\n return assertEx(sentinel, () => 'DerivedAddressWalletTransferSentinel not found on node')\n}\n\nexport const postRedeem: RouteDefinition = {\n method: 'post',\n path: '/rewards/redeem',\n handlers: validateRequest(async (req, res) => {\n const { node } = req.app\n const { body } = req\n const sentinel = await getDerivedAddressWalletTransferSentinel(node)\n const result = await sentinel.report(body)\n res.status(200)\n res.json(result)\n }),\n}\n","import type { RouteDefinition } from '@xylabs/express'\n\nimport { postClaimRange, postRedeem } from './routes/index.ts'\n\nexport const getRouteDefinitions = (): RouteDefinition[] => {\n return [\n postClaimRange,\n postRedeem,\n ]\n}\n","import type { Express } from 'express'\n\nimport { addProbeRoutes } from './addProbeRoutes.ts'\nimport { addDataLakeRoutes } from './dataLake/index.ts'\nimport { addRewardRedemptionRoutes } from './rewardRedemption/index.ts'\n\nexport const addRoutes = (app: Express) => {\n addProbeRoutes(app)\n addDataLakeRoutes(app)\n addRewardRedemptionRoutes(app)\n}\n","import { boot } from '@xyo-network/bios'\nimport { initActorSeedPhrase } from '@xyo-network/chain-orchestration'\nimport type { NodeInstance } from '@xyo-network/sdk-js'\nimport { HDWallet } from '@xyo-network/sdk-js'\nimport type {\n HostActorConfigContext, ProviderFactoryLocatorInstance, XyoGatewayRunner,\n} from '@xyo-network/xl1-sdk'\n\nimport { getNode } from '../services/manifest/index.ts'\nimport { getApp } from './app.ts'\n\nconst hostname = '::'\n// const hostname = '0.0.0.0'\n\nexport const getServer = async (context: HostActorConfigContext, gateway: XyoGatewayRunner, locator: ProviderFactoryLocatorInstance, providedNode?: NodeInstance) => {\n const { logger, config } = context\n const { port } = config\n const bios = await boot()\n const seedPhrase = await initActorSeedPhrase(context, bios)\n const wallet = await HDWallet.fromPhrase(seedPhrase)\n const node = providedNode ?? (await getNode(context, gateway, wallet))\n const app = getApp(node, config, locator)\n const server = await new Promise<ReturnType<typeof app.listen>>((resolve, reject) => {\n const srv = app.listen(port, hostname, () => {\n logger?.log(`[RewardsRedemption] Server listening at http://${hostname}:${port}`)\n resolve(srv)\n })\n srv.once('error', reject)\n })\n server.setTimeout(120_000)\n return server\n}\n","import { type BaseMongoSdkPrivateConfig } from '@xylabs/mongo'\nimport { isDefined } from '@xylabs/sdk-js'\nimport { MongoDBArchivistV2 } from '@xyo-network/archivist-mongodb'\nimport { ViewArchivist } from '@xyo-network/archivist-view'\nimport { initTelemetry } from '@xyo-network/chain-telemetry'\nimport type { MongoDBModuleParamsV2 } from '@xyo-network/module-model-mongodb'\nimport {\n AbstractModule, LoggerModuleStatusReporter,\n MemoryArchivist, MemorySentinel, ModuleFactoryLocator,\n} from '@xyo-network/sdk-js'\nimport type { BaseConfigContext, XyoGatewayRunner } from '@xyo-network/xl1-sdk'\nimport { hasMongoConfig } from '@xyo-network/xl1-sdk'\n\nimport type { ChainStepRewardsClaimSentinelParams, DerivedAddressWalletTransferSentinelParams } from '../modules/index.ts'\nimport { ChainStepRewardsClaimSentinel, DerivedAddressWalletTransferSentinel } from '../modules/index.ts'\n\n/**\n * Used for retrieving a locator with the necessary modules registered for testing\n * operation of the node (entirely in memory)\n * @returns A locator with the necessary modules registered\n */\nexport const getLocator = async (context: BaseConfigContext, gateway: XyoGatewayRunner) => {\n const { config, logger } = context\n const { otlpEndpoint } = config.telemetry?.otel ?? {}\n const { path: endpoint = '/metrics', port: port = 9467 } = config.telemetry?.metrics?.scrape ?? {}\n const { traceProvider, meterProvider } = await initTelemetry({\n attributes: {\n serviceName: 'xl1-reward-redemption',\n serviceVersion: '1.0.0',\n },\n otlpEndpoint,\n metricsConfig: { endpoint, port },\n })\n\n if (isDefined(logger)) AbstractModule.defaultLogger = logger\n const statusReporter = logger ? new LoggerModuleStatusReporter(logger) : undefined\n\n const locator = new ModuleFactoryLocator()\n // If there's a MongoDB configuration\n const mongoConfig = config.storage?.mongo\n if (hasMongoConfig(mongoConfig)) {\n // Create the MongoDB SDK from the configuration\n const {\n connectionString: dbConnectionString, database: dbName, domain: dbDomain, password: dbPassword, username: dbUserName,\n } = mongoConfig\n const payloadSdkConfig: BaseMongoSdkPrivateConfig = {\n dbConnectionString, dbDomain, dbName, dbPassword, dbUserName,\n }\n const params: Partial<MongoDBModuleParamsV2> = {\n meterProvider, payloadSdkConfig, statusReporter, traceProvider,\n }\n // Register the MongoDB Archivist as the default\n locator.register(MongoDBArchivistV2.factory(params), undefined, true)\n }\n\n locator.register(MemoryArchivist.factory({\n traceProvider, meterProvider, statusReporter,\n }))\n locator.register(MemorySentinel.factory({\n traceProvider, meterProvider, statusReporter,\n }))\n locator.register(ViewArchivist.factory({\n traceProvider, meterProvider, statusReporter,\n }))\n // const gateway = await getGateway(config)\n const chainStepRewardsClaimSentinelParams: Partial<ChainStepRewardsClaimSentinelParams> = {\n gateway, traceProvider, meterProvider, statusReporter,\n }\n locator.register(ChainStepRewardsClaimSentinel.factory(chainStepRewardsClaimSentinelParams))\n const derivedAddressWalletTransferSentinelParams: Partial<DerivedAddressWalletTransferSentinelParams> = {\n gateway, traceProvider, meterProvider, statusReporter,\n }\n locator.register(DerivedAddressWalletTransferSentinel.factory(derivedAddressWalletTransferSentinelParams))\n return locator\n}\n\n// const getGateway = async (config: Config): Promise<XyoGatewayRunner | undefined> => {\n// const { mnemonic, chainRpcApiUrl } = config.actors.rewardRedemption\n\n// // Create locator\n// const transportFactory: TransportFactory = (schemas: RpcSchemaMap) => new HttpRpcTransport(chainRpcApiUrl, schemas)\n// const locator = await buildJsonRpcProviderLocator({ transportFactory })\n\n// // Register signer\n// const phrase = mnemonic ?? HDWallet.generateMnemonic()\n// const wallet = await generateXyoBaseWalletFromPhrase(phrase)\n// const account = await wallet.derivePath(ADDRESS_INDEX.XYO)\n// locator.register(SimpleXyoSigner.factory<SimpleXyoSigner>(SimpleXyoSigner.dependencies, { account }))\n// locator.register(SimpleXyoGatewayRunner.factory<SimpleXyoGatewayRunner>(SimpleXyoGatewayRunner.dependencies, {}))\n\n// // Use locator to get gateway\n// const gateway = await locator.getInstance<SimpleXyoGatewayRunner>(SimpleXyoGatewayRunner.defaultMoniker)\n// return gateway\n// }\n","import type { Attributes, Counter } from '@opentelemetry/api'\nimport type { Address } from '@xylabs/sdk-js'\nimport {\n assertEx, delay, isDefined, isUndefined, toAddress,\n} from '@xylabs/sdk-js'\nimport type {\n AnyConfigSchema, Payload,\n SentinelConfig, SentinelInstance, SentinelModuleEventData, SentinelParams,\n} from '@xyo-network/sdk-js'\nimport { AbstractSentinel, asSchema } from '@xyo-network/sdk-js'\nimport type {\n AttoXL1, SignedHydratedTransaction, StepIdentity,\n XyoConnection, XyoGatewayRunner, XyoViewer,\n} from '@xyo-network/xl1-sdk'\nimport {\n asXL1BlockNumber, asXL1BlockRange, blockRangeSteps,\n completedStepRewardAddress, createTransferPayload, derivedReceiveAddress, flattenHydratedTransaction, flattenHydratedTransactions,\n isStepIdentityPayload, XYO_STEP_REWARD_ADDRESS,\n} from '@xyo-network/xl1-sdk'\nimport { Mutex } from 'async-mutex'\n\nexport const ChainStepRewardsClaimSentinelConfigSchema = asSchema('network.xyo.sentinel.chain.step.rewards.claim.config', true)\nexport type ChainStepRewardsClaimSentinelConfigSchema = typeof ChainStepRewardsClaimSentinelConfigSchema\n\n/**\n * The configuration for the chain step rewards claim sentinel\n */\nexport type ChainStepRewardsClaimSentinelConfig = SentinelConfig<{\n /**\n * Whether to claim steps even if there are no rewardees within the\n * step to claim. Defaults to false preventing rollovers of empty steps\n * as the nominal use case has rewardees present.\n */\n claimEmptySteps?: boolean\n /**\n * Step indices to scan for claimable rewards. Defaults to [3, 4, 5, 6, 7, 8],\n * matching the steps with non-zero StepRewardFractions in the protocol.\n * Override (e.g. to a single-step subset) for tests that only care about\n * one rewardable boundary.\n */\n rewardableSteps?: number[]\n /**\n * The schema for the chain step rewards claim sentinel config\n */\n schema: ChainStepRewardsClaimSentinelConfigSchema\n /**\n * The interval in milliseconds between checking for step rewards to claim\n */\n stepClaimIntervalMs: number\n}>\n\ninterface ChainStepRewardsClaimSentinelParamFields {\n gateway: XyoGatewayRunner\n}\n\nexport type ChainStepRewardsClaimSentinelParams<\n TConfig extends AnyConfigSchema<ChainStepRewardsClaimSentinelConfig> = AnyConfigSchema<ChainStepRewardsClaimSentinelConfig>,\n> = SentinelParams<TConfig> & ChainStepRewardsClaimSentinelParamFields\n\nconst defaultStepClaimIntervalMs = 15_000\n// const retryAttempts = 3\n// const retryDelayMs = 60_000\nconst scope = 'reward-escrow'\nconst DefaultRewardableSteps = [3, 4, 5, 6, 7, 8]\n\nexport class ChainStepRewardsClaimSentinel<\n TParams extends ChainStepRewardsClaimSentinelParams = ChainStepRewardsClaimSentinelParams,\n TEventData extends SentinelModuleEventData<SentinelInstance<TParams>> = SentinelModuleEventData<SentinelInstance<TParams>>,\n> extends AbstractSentinel<TParams, TEventData> {\n static override readonly configSchemas = [ChainStepRewardsClaimSentinelConfigSchema]\n static override readonly defaultConfigSchema = ChainStepRewardsClaimSentinelConfigSchema\n private _claimAttemptsCounter: Counter<Attributes> | undefined\n private _claimCheckCounter: Counter<Attributes> | undefined\n private _claimErrorCounter: Counter<Attributes> | undefined\n private _claimSuccessCounter: Counter<Attributes> | undefined\n private _connection: XyoConnection | undefined\n private _gateway: XyoGatewayRunner | undefined\n private _reportMutex = new Mutex()\n private _viewer: XyoViewer | undefined\n\n protected get connection(): XyoConnection {\n return assertEx(this._connection, () => 'Connection is not defined')\n }\n\n protected get gateway(): XyoGatewayRunner {\n return assertEx(this._gateway, () => 'Gateway is not defined')\n }\n\n protected get rewardableSteps(): number[] {\n return isDefined(this.config.rewardableSteps) ? this.config.rewardableSteps : DefaultRewardableSteps\n }\n\n protected get stepClaimIntervalMs(): number {\n return isDefined(this.config.stepClaimIntervalMs) ? this.config.stepClaimIntervalMs : defaultStepClaimIntervalMs\n }\n\n protected get viewer(): XyoViewer {\n return assertEx(this._viewer, () => 'Viewer is not defined')\n }\n\n override async createHandler() {\n await super.createHandler()\n // Create meters for tracking claim attempts, successes, and errors.\n this._claimAttemptsCounter = this.meter?.createCounter('chain_step_rewards_claim_sentinel_attempts_total', { description: 'Number of claim attempts' })\n this._claimCheckCounter = this.meter?.createCounter('chain_step_rewards_claim_sentinel_check_total', { description: 'Number of claim checks' })\n this._claimSuccessCounter = this.meter?.createCounter('chain_step_rewards_claim_sentinel_success_total', { description: 'Number of claim successes' })\n this._claimErrorCounter = this.meter?.createCounter('chain_step_rewards_claim_sentinel_errors_total', { description: 'Number of claim errors' })\n\n const gateway = assertEx(this.params.gateway, () => 'Gateway parameter is required')\n const connection = assertEx(gateway.connection, () => 'Gateway connection is required')\n const viewer = assertEx(connection.viewer, () => 'Viewer is not defined in gateway connection')\n // this._gateway = withRetry(gateway, retryDelayMs, retryAttempts)\n // this._connection = withRetry(connection, retryDelayMs, retryAttempts)\n // this._viewer = withRetry(viewer, retryDelayMs, retryAttempts)\n this._gateway = gateway // withRetry(gateway, retryDelayMs, retryAttempts)\n this._connection = connection // withRetry(connection, retryDelayMs, retryAttempts)\n this._viewer = viewer // withRetry(viewer, retryDelayMs, retryAttempts)\n }\n\n override async reportHandler(payloads?: Payload[]): Promise<Payload[]> {\n if (this._reportMutex.isLocked()) {\n this.logger?.debug(`ChainRewardsClaimSentinel [${this.id}] is already running, skipping report [${Date.now()}]`)\n return []\n }\n return await this._reportMutex.runExclusive(async () => {\n const response: Payload[] = []\n if (isUndefined(payloads) || payloads.length === 0) {\n await this.claimAllSteps()\n } else {\n // Process provided payloads\n const stepIdentities = payloads\n .filter(isStepIdentityPayload)\n .map<StepIdentity>((p) => {\n const { step, block: blockNumber } = p\n const block = asXL1BlockNumber(blockNumber, { name: 'reportHandler' })\n return { step, block }\n }).filter(stepIdentity => this.rewardableSteps.includes(stepIdentity.step))\n for (const stepIdentity of stepIdentities) {\n const result = await this.claimStepIdentity(stepIdentity)\n if (isDefined(result)) response.push(...flattenHydratedTransaction(result))\n }\n }\n return response\n })\n }\n\n private calculateAddressDistributions(rewardsByStaker: Record<Address, bigint>, balance: AttoXL1): Record<Address, bigint> {\n const addressClaims: Record<Address, bigint> = {}\n const totalRewards = Object.values(rewardsByStaker).reduce((acc, val) => acc + val, 0n)\n for (const [staker, amount] of Object.entries(rewardsByStaker)) {\n // Ensure they have accrued an amount\n if (amount <= 0n) continue\n const reward = (balance * amount) / totalRewards\n // Ensure they earned a reward\n if (reward <= 0n) continue\n // Accumulate rewards by address\n const receiveAddress = derivedReceiveAddress(toAddress(staker), scope)\n addressClaims[receiveAddress] = reward\n }\n const totalClaimed = Object.values(addressClaims).reduce((acc, val) => acc + val, 0n)\n assertEx(totalClaimed <= balance, () => 'Total claimed exceeds claimable balance')\n const unclaimed = balance - totalClaimed\n if (unclaimed > 0n) {\n // Return anything unclaimed (due to truncation/rounding) to step rewards pool address\n addressClaims[XYO_STEP_REWARD_ADDRESS] = unclaimed\n }\n return addressClaims\n }\n\n private async claimAllSteps(): Promise<Payload[]> {\n // No payloads to process, just do claims since last run\n const results: SignedHydratedTransaction[] = []\n\n for (const step of this.rewardableSteps) {\n // Fetch unclaimed rewards and process claims\n const from = 0\n const to = await this.viewer.currentBlockNumber()\n const range = asXL1BlockRange([from, to], { name: 'claimAllSteps' })\n // For each rewardable step in range\n const stepIdentities = blockRangeSteps(range, [step])\n for (const stepIdentity of stepIdentities) {\n const result = await this.claimStepIdentity(stepIdentity)\n if (isDefined(result)) {\n results.push(result)\n }\n await delay(this.stepClaimIntervalMs)\n }\n }\n return flattenHydratedTransactions(results)\n }\n\n private async claimStepIdentity(stepIdentity: StepIdentity): Promise<SignedHydratedTransaction | undefined> {\n this.logger?.info(`Checking rewards to claim for step ${stepIdentity.step} at block ${stepIdentity.block}`)\n const claimCounterAttributes = { step: stepIdentity.step.toString(), block: stepIdentity.block.toString() }\n try {\n this._claimCheckCounter?.add(1, claimCounterAttributes)\n // If wallet has balance\n const stepRewardAddress = completedStepRewardAddress(stepIdentity)\n const balance = await this.viewer.account.balance.accountBalance(stepRewardAddress)\n this.logger?.info(\n `Found balance of ${balance} to claim for step ${stepIdentity.step} at block ${stepIdentity.block}`\n + ` in step reward address ${stepRewardAddress}`,\n )\n if (balance > 0n) {\n this._claimAttemptsCounter?.add(1, claimCounterAttributes)\n // For stakers\n const rewardsByStaker = await this.viewer.networkStakeStepRewardPoolRewards(stepIdentity)\n const rewardRecipients = Object.keys(rewardsByStaker).length\n this.logger?.info(\n `Found ${rewardRecipients} reward recipients for step ${stepIdentity.step} at block ${stepIdentity.block}`,\n )\n // If not configured to claim empty steps\n if (!this.config.claimEmptySteps) {\n // Ensure there are rewards recipients\n assertEx(rewardRecipients > 0, () => 'No reward recipients for step')\n }\n const addressDistributions = this.calculateAddressDistributions(rewardsByStaker, balance)\n this.logger?.info(\n `Calculated address distributions for step ${stepIdentity.step} at block ${stepIdentity.block}`\n + ` with ${Object.keys(addressDistributions).length} addresses`,\n )\n // Create single transaction for all claims\n const tx = await this.submitRewardDistributionTransaction(stepRewardAddress, addressDistributions, stepIdentity, this.gateway)\n this.logger?.info(`Claimed rewards for step ${stepIdentity.step} at block ${stepIdentity.block}`)\n this._claimSuccessCounter?.add(1, claimCounterAttributes)\n // Return submitted transaction\n return tx\n }\n } catch (error) {\n this._claimErrorCounter?.add(1, claimCounterAttributes)\n this.logger?.error(`Error claiming rewards for step ${stepIdentity.step} at block ${stepIdentity.block}:`, error)\n }\n }\n\n private async submitRewardDistributionTransaction(\n stepRewardAddress: Address,\n addressDistributions: Record<Address, bigint>,\n step: StepIdentity,\n gateway: XyoGatewayRunner,\n ): Promise<SignedHydratedTransaction | undefined> {\n // Create single transfer payload for all claims\n const transferPayload = createTransferPayload(stepRewardAddress, addressDistributions)\n transferPayload.context = { step }\n const currentBlockNumber = await this.viewer.currentBlockNumber()\n const result = await gateway.addPayloadsToChain?.([transferPayload], [], { nbf: currentBlockNumber, exp: asXL1BlockNumber(currentBlockNumber + 10) })\n if (isDefined(result)) return result[1]\n }\n}\n","import type { Attributes, Counter } from '@opentelemetry/api'\nimport type { Address } from '@xylabs/sdk-js'\nimport {\n AddressZod, assertEx, EthAddressZod, hexToBigInt, HexZod, isDefined, isUndefined,\n toAddress, toHex,\n} from '@xylabs/sdk-js'\nimport type {\n AnyConfigSchema, Payload,\n SentinelConfig, SentinelInstance, SentinelModuleEventData, SentinelParams,\n} from '@xyo-network/sdk-js'\nimport { AbstractSentinel, asSchema } from '@xyo-network/sdk-js'\nimport type {\n SignedHydratedTransaction, XL1BlockNumber, XyoGatewayRunner,\n} from '@xyo-network/xl1-sdk'\nimport {\n createTransferPayload,\n derivedReceiveAddress, flattenHydratedTransaction, isEIP712DataPayload, isEIP712SignaturePayload,\n verifyEIP712Message, XL1BlockNumberZod,\n} from '@xyo-network/xl1-sdk'\nimport z from 'zod'\n\nexport const DerivedAddressWalletTransferSentinelConfigSchema = asSchema('network.xyo.sentinel.chain.derived.address.wallet.transfer.config', true)\nexport type DerivedAddressWalletTransferSentinelConfigSchema = typeof DerivedAddressWalletTransferSentinelConfigSchema\n\n/**\n * The configuration for the derived address wallet transfer sentinel\n */\nexport type DerivedAddressWalletTransferSentinelConfig = SentinelConfig<{\n /**\n * The schema for the derived address wallet transfer sentinel config\n */\n schema: DerivedAddressWalletTransferSentinelConfigSchema\n}>\n\nexport interface DerivedAddressWalletTransferSentinelParamFields {\n gateway: XyoGatewayRunner\n}\n\nexport type DerivedAddressWalletTransferSentinelParams<\n TConfig extends AnyConfigSchema<DerivedAddressWalletTransferSentinelConfig> = AnyConfigSchema<DerivedAddressWalletTransferSentinelConfig>,\n> = SentinelParams<TConfig> & DerivedAddressWalletTransferSentinelParamFields\n\nconst scope = 'reward-escrow'\n\ninterface ParsedClaimValues {\n amount: string\n // chainId: ChainId\n exp: XL1BlockNumber\n from: Address\n nbf: XL1BlockNumber\n to: Address\n}\n\n// Assuming EthAddress and Hex are string-like (typical case)\nexport const ConfirmedClaimValuesZod = z.object({\n 'From': EthAddressZod,\n 'To XL1 Address': AddressZod,\n 'XL1 Amount': z.string(),\n 'XL1 Amount (Hex)': HexZod, // Hex\n 'XL1 Not after block': XL1BlockNumberZod,\n 'XL1 Not before block': XL1BlockNumberZod,\n})\n\nexport type ConfirmedClaimValues = z.infer<typeof ConfirmedClaimValuesZod>\n\nconst parseConfirmedClaimValues = (values: ConfirmedClaimValues): ParsedClaimValues => {\n return {\n amount: values['XL1 Amount (Hex)'],\n exp: values['XL1 Not after block'],\n from: toAddress(values.From),\n nbf: values['XL1 Not before block'],\n to: toAddress(values['To XL1 Address']),\n }\n}\n\nexport class DerivedAddressWalletTransferSentinel<\n TParams extends DerivedAddressWalletTransferSentinelParams = DerivedAddressWalletTransferSentinelParams,\n TEventData extends SentinelModuleEventData<SentinelInstance<TParams>> = SentinelModuleEventData<SentinelInstance<TParams>>,\n> extends AbstractSentinel<TParams, TEventData> {\n static override readonly configSchemas = [DerivedAddressWalletTransferSentinelConfigSchema]\n static override readonly defaultConfigSchema = DerivedAddressWalletTransferSentinelConfigSchema\n private _transferAttemptsCounter: Counter<Attributes> | undefined\n private _transferErrorCounter: Counter<Attributes> | undefined\n private _transferSuccessCounter: Counter<Attributes> | undefined\n\n protected get gateway(): XyoGatewayRunner {\n return this.params.gateway\n }\n\n override async createHandler() {\n await super.createHandler()\n // Create meters for tracking claim attempts, successes, and errors.\n this._transferAttemptsCounter = this.meter?.createCounter(\n 'derived_address_wallet_transfer_sentinel_attempts_total',\n { description: 'Number of transfer attempts' },\n )\n this._transferSuccessCounter = this.meter?.createCounter(\n 'derived_address_wallet_transfer_sentinel_success_total',\n { description: 'Number of transfer successes' },\n )\n this._transferErrorCounter = this.meter?.createCounter(\n 'derived_address_wallet_transfer_sentinel_errors_total',\n { description: 'Number of transfer errors' },\n )\n }\n\n override async reportHandler(payloads?: Payload[]): Promise<Payload[]> {\n const data = payloads?.find(x => isEIP712DataPayload(x))\n const signature = payloads?.find(x => isEIP712SignaturePayload(x))\n if (isUndefined(data) || isUndefined(signature)) return []\n this._transferAttemptsCounter?.add(1)\n const valid = await verifyEIP712Message(data, signature)\n if (!valid) {\n this._transferErrorCounter?.add(1)\n throw new Error('Invalid EIP712 signature')\n }\n const values = ConfirmedClaimValuesZod.parse(data.values)\n const parsed = parseConfirmedClaimValues(values)\n const signatureAddress = toAddress(signature.address)\n const parsedAddress = toAddress(parsed.from)\n if (signatureAddress === parsedAddress) {\n const tx = await this.submitRewardDistributionTransaction(parsed)\n if (isDefined(tx)) {\n this._transferSuccessCounter?.add(1)\n return flattenHydratedTransaction(tx)\n }\n }\n this._transferErrorCounter?.add(1)\n return []\n }\n\n protected submitRewardDistributionTransaction = async (claimValues: ParsedClaimValues): Promise<SignedHydratedTransaction | undefined> => {\n const {\n amount, from: address, to, nbf, exp,\n } = claimValues\n // Ensure necessary gateway pre-requisites are met\n const signer = assertEx(this.gateway.signer, () => 'Signer is not defined in gateway')\n const signerAddress = await signer.address()\n const connection = this.gateway.connection\n const viewer = assertEx(connection.viewer, () => 'Viewer is not defined in gateway connection')\n\n // TODO: Validate chainId against supplied in ClaimValues to prevent replay attacks\n // const chainId = await viewer.chainId()\n\n // Ensure the transaction is within the valid block range\n const currentBlock = await viewer.currentBlockNumber()\n if (currentBlock < nbf || currentBlock > exp) throw new Error('Transaction is not within a valid block range')\n\n // Parse the signer's address\n const escrowAccount = derivedReceiveAddress(address, scope)\n\n // Ensure the escrow account has sufficient balance\n const balance = await viewer.account.balance.accountBalance(escrowAccount)\n // MEMO: Currently we require the full amount to be redeemed from the escrow account. We do\n // not allow partial escrow redemptions.\n const redemptionAmount = hexToBigInt(toHex(amount))\n assertEx(balance === redemptionAmount, () => 'Insufficient balance in escrow account')\n\n // Ensure we have enough allowance to transfer from the escrow account\n const allowance = await viewer.account.balance.accountBalance(signerAddress)\n assertEx(allowance > 1000n, () => 'Insufficient allowance to transfer from escrow account')\n\n // Create the transfer payload\n const transferPayload = createTransferPayload(escrowAccount, { [to]: hexToBigInt(toHex(amount)) })\n // Add required validation context\n transferPayload.context = { address, scope }\n const chain = await viewer.chainId()\n const result = await this.gateway.addPayloadsToChain?.([transferPayload], [], {\n chain, nbf, exp,\n })\n if (isDefined(result)) return result[1]\n }\n}\n","import type { Logger } from '@xylabs/sdk-js'\nimport { ManifestWrapper } from '@xyo-network/sdk-js'\nimport type { WalletInstance } from '@xyo-network/wallet-model'\nimport type {\n BaseConfigContext,\n Config, XyoGatewayRunner,\n} from '@xyo-network/xl1-sdk'\n\nimport { getLocator } from './getLocator.ts'\nimport { NodeManifest } from './nodeManifest.ts'\nimport { PrivateChildManifests } from './private/index.ts'\nimport { PublicChildManifests } from './public/index.ts'\n\nexport interface GetNodeContext {\n config: Config\n logger?: Logger\n wallet: WalletInstance\n}\n\n/**\n * Creates a node with the xyo-chain modules registered\n * @param context The context to use for the node\n * @returns A node with the xyo-chain modules registered\n */\nexport const getNode = async (context: BaseConfigContext, gateway: XyoGatewayRunner, wallet: WalletInstance) => {\n const locator = await getLocator(context, gateway)\n const wrapper = new ManifestWrapper(NodeManifest, wallet, locator, PublicChildManifests, PrivateChildManifests)\n const [node, ...childNodes] = await wrapper.loadNodes()\n if (childNodes?.length > 0) {\n await Promise.all(childNodes.map(childNode => node.register(childNode)))\n await Promise.all(childNodes.map(childNode => node.attach(childNode.address, true)))\n }\n return node\n}\n","{\n \"$schema\": \"https://raw.githubusercontent.com/XYOracleNetwork/sdk-xyo-client-js/main/packages/manifest/src/schema.json\",\n \"nodes\": [\n {\n \"config\": {\n \"accountPath\": \"44'/60'/1\",\n \"name\": \"XYORewardRedemptionNode\",\n \"schema\": \"network.xyo.node.config\"\n },\n \"modules\": {\n \"private\": [\n {\n \"config\": {\n \"accountPath\": \"1/1'/1'\",\n \"name\": \"DataPrivate\",\n \"getCache\": {\n \"enabled\": true,\n \"maxEntries\": 5000\n },\n \"payloadSdkConfig\": {\n \"collection\": \"reward_redemption_api_datalake\"\n },\n \"schema\": \"network.xyo.archivist.config\"\n }\n },\n {\n \"config\": {\n \"accountPath\": \"1/1'/2'\",\n \"name\": \"ChainStepRewardsClaimSentinel\",\n \"schema\": \"network.xyo.sentinel.chain.step.rewards.claim.config\"\n }\n },\n {\n \"config\": {\n \"accountPath\": \"1/1'/3'\",\n \"automations\": [\n {\n \"frequency\": 60000,\n \"frequencyUnits\": \"millis\",\n \"schema\": \"network.xyo.automation.interval\",\n \"type\": \"interval\"\n }\n ],\n \"name\": \"ChainRewardsClaimIntervalSentinel\",\n \"schema\": \"network.xyo.sentinel.config\",\n \"synchronous\": true,\n \"tasks\": [\n {\n \"mod\": \"ChainStepRewardsClaimSentinel\",\n \"endPoint\": \"report\"\n }\n ]\n }\n },\n {\n \"config\": {\n \"accountPath\": \"1/1'/4'\",\n \"name\": \"DerivedAddressWalletTransferSentinel\",\n \"schema\": \"network.xyo.sentinel.chain.derived.address.wallet.transfer.config\"\n }\n }\n ],\n \"public\": [\n {\n \"config\": {\n \"accountPath\": \"1/1/1\",\n \"name\": \"Data\",\n \"allowedQueries\": [\n \"network.xyo.query.archivist.get\",\n \"network.xyo.query.archivist.next\"\n ],\n \"getCache\": {\n \"enabled\": true,\n \"maxEntries\": 5000\n },\n \"originArchivist\": \"DataPrivate\",\n \"schema\": \"network.xyo.archivist.view.config\"\n }\n }\n ]\n }\n }\n ],\n \"schema\": \"network.xyo.manifest\"\n}\n","import type { PackageManifestPayload } from '@xyo-network/sdk-js'\n\nimport node from './node.json' with { type: 'json' }\n\n/**\n * Root Node Manifest\n */\nexport const NodeManifest = node as unknown as PackageManifestPayload\n","/**\n * Private Child Manifests\n */\nexport const PrivateChildManifests = []\n","import type { ModuleManifest } from '@xyo-network/sdk-js'\n\n/**\n * Public Child Manifests\n */\nexport const PublicChildManifests: ModuleManifest[] = []\n"],"mappings":"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","names":["RewardRedemptionConfigZod","exists","initActorWallet","creatable","ActorV3","asHostActorConfigContext","XyoGatewayRunnerMoniker","XyoViewerMoniker","standardErrors","sharedMiddleware","express","registerInstrumentations","ExpressInstrumentation","HttpInstrumentation","addInstrumentation","instrumentations","HttpInstrumentation","ExpressInstrumentation","registerInstrumentations","setRawResponseFormat","ReasonPhrases","message","ReasonPhrases","OK","handler","_req","res","setRawResponseFormat","status","send","getLivez","setRawResponseFormat","ReasonPhrases","message","ReasonPhrases","OK","handler","_req","res","setRawResponseFormat","status","send","getReadyz","setRawResponseFormat","ReasonPhrases","message","ReasonPhrases","OK","handler","_req","res","setRawResponseFormat","status","send","getStartupz","addProbeRoutes","app","get","getLivez","getReadyz","getStartupz","setRawResponseFormat","asHash","isDefined","asArchivistInstance","isAnyPayload","isSequence","PayloadBuilder","express","resolveArchivist","node","archivistModuleIdentifier","mod","resolve","asArchivistInstance","required","archivistInstance","getArchivist","isDefined","archivistMiddleware","options","router","express","Router","mergeParams","post","req","res","setRawResponseFormat","body","Array","isArray","payloads","PayloadBuilder","hashPairs","map","p","archivist","result","insert","status","json","get","cursor","isSequence","query","undefined","limit","Number","open","Boolean","order","next","hash","rawHash","params","asHash","payload","isAnyPayload","send","addDataLakeRoutes","app","node","archivistModuleIdentifier","use","archivistMiddleware","addRouteDefinitions","requestHandlerValidator","assertEx","isDefined","asSentinelInstance","PayloadBuilder","PayloadZodLoose","asXL1BlockRange","blockRangeSteps","StepIdentitySchema","XyoViewerMoniker","z","RewardableSteps","query","z","object","fromBlock","coerce","number","int","nonnegative","optional","toBlock","step","min","Math","RewardableSteps","max","default","response","array","PayloadZodLoose","validateRequest","requestHandlerValidator","getChainStepRewardsClaimSentinel","node","mod","resolve","sentinel","asSentinelInstance","assertEx","postClaimRange","method","path","handlers","req","res","locator","app","parse","viewer","getInstance","XyoViewerMoniker","from","isDefined","currentBlock","currentBlockNumber","to","status","json","range","asXL1BlockRange","name","stepIdentities","blockRangeSteps","results","stepIdentity","stepIdentityPayload","PayloadBuilder","schema","StepIdentitySchema","fields","build","result","report","push","requestHandlerValidator","assertEx","asSentinelInstance","PayloadZodLoose","PayloadZodStrictOfSchema","EIP712DataPayloadFieldsZod","EIP712DataPayloadSchema","EIP712SignaturePayloadFieldsZod","EIP712SignaturePayloadSchema","z","body","z","tuple","PayloadZodStrictOfSchema","EIP712DataPayloadSchema","extend","EIP712DataPayloadFieldsZod","shape","EIP712SignaturePayloadSchema","EIP712SignaturePayloadFieldsZod","response","array","PayloadZodLoose","validateRequest","requestHandlerValidator","getDerivedAddressWalletTransferSentinel","node","mod","resolve","sentinel","asSentinelInstance","assertEx","postRedeem","method","path","handlers","req","res","app","result","report","status","json","getRouteDefinitions","postClaimRange","postRedeem","addRewardRedemptionRoutes","app","routeDefinitions","getRouteDefinitions","addRouteDefinitions","addRoutes","app","addProbeRoutes","addDataLakeRoutes","addRewardRedemptionRoutes","getApp","node","config","locator","addInstrumentation","app","express","sharedMiddleware","addRoutes","use","standardErrors","boot","initActorSeedPhrase","HDWallet","isDefined","MongoDBArchivistV2","ViewArchivist","initTelemetry","AbstractModule","LoggerModuleStatusReporter","MemoryArchivist","MemorySentinel","ModuleFactoryLocator","hasMongoConfig","assertEx","delay","isDefined","isUndefined","toAddress","AbstractSentinel","asSchema","asXL1BlockNumber","asXL1BlockRange","blockRangeSteps","completedStepRewardAddress","createTransferPayload","derivedReceiveAddress","flattenHydratedTransaction","flattenHydratedTransactions","isStepIdentityPayload","XYO_STEP_REWARD_ADDRESS","Mutex","ChainStepRewardsClaimSentinelConfigSchema","asSchema","defaultStepClaimIntervalMs","scope","DefaultRewardableSteps","ChainStepRewardsClaimSentinel","AbstractSentinel","configSchemas","defaultConfigSchema","_claimAttemptsCounter","_claimCheckCounter","_claimErrorCounter","_claimSuccessCounter","_connection","_gateway","_reportMutex","Mutex","_viewer","connection","assertEx","gateway","rewardableSteps","isDefined","config","stepClaimIntervalMs","viewer","createHandler","meter","createCounter","description","params","reportHandler","payloads","isLocked","logger","debug","id","Date","now","runExclusive","response","isUndefined","length","claimAllSteps","stepIdentities","filter","isStepIdentityPayload","map","p","step","block","blockNumber","asXL1BlockNumber","name","stepIdentity","includes","result","claimStepIdentity","push","flattenHydratedTransaction","calculateAddressDistributions","rewardsByStaker","balance","addressClaims","totalRewards","Object","values","reduce","acc","val","staker","amount","entries","reward","receiveAddress","derivedReceiveAddress","toAddress","totalClaimed","unclaimed","XYO_STEP_REWARD_ADDRESS","results","from","to","currentBlockNumber","range","asXL1BlockRange","blockRangeSteps","delay","flattenHydratedTransactions","info","claimCounterAttributes","toString","add","stepRewardAddress","completedStepRewardAddress","account","accountBalance","networkStakeStepRewardPoolRewards","rewardRecipients","keys","claimEmptySteps","addressDistributions","tx","submitRewardDistributionTransaction","error","transferPayload","createTransferPayload","context","addPayloadsToChain","nbf","exp","AddressZod","assertEx","EthAddressZod","hexToBigInt","HexZod","isDefined","isUndefined","toAddress","toHex","AbstractSentinel","asSchema","createTransferPayload","derivedReceiveAddress","flattenHydratedTransaction","isEIP712DataPayload","isEIP712SignaturePayload","verifyEIP712Message","XL1BlockNumberZod","z","DerivedAddressWalletTransferSentinelConfigSchema","asSchema","scope","ConfirmedClaimValuesZod","z","object","EthAddressZod","AddressZod","string","HexZod","XL1BlockNumberZod","parseConfirmedClaimValues","values","amount","exp","from","toAddress","From","nbf","to","DerivedAddressWalletTransferSentinel","AbstractSentinel","configSchemas","defaultConfigSchema","_transferAttemptsCounter","_transferErrorCounter","_transferSuccessCounter","gateway","params","createHandler","meter","createCounter","description","reportHandler","payloads","data","find","x","isEIP712DataPayload","signature","isEIP712SignaturePayload","isUndefined","add","valid","verifyEIP712Message","Error","parse","parsed","signatureAddress","address","parsedAddress","tx","submitRewardDistributionTransaction","isDefined","flattenHydratedTransaction","claimValues","signer","assertEx","signerAddress","connection","viewer","currentBlock","currentBlockNumber","escrowAccount","derivedReceiveAddress","balance","account","accountBalance","redemptionAmount","hexToBigInt","toHex","allowance","transferPayload","createTransferPayload","context","chain","chainId","result","addPayloadsToChain","getLocator","context","gateway","config","logger","otlpEndpoint","telemetry","otel","path","endpoint","port","metrics","scrape","traceProvider","meterProvider","initTelemetry","attributes","serviceName","serviceVersion","metricsConfig","isDefined","AbstractModule","defaultLogger","statusReporter","LoggerModuleStatusReporter","undefined","locator","ModuleFactoryLocator","mongoConfig","storage","mongo","hasMongoConfig","connectionString","dbConnectionString","database","dbName","domain","dbDomain","password","dbPassword","username","dbUserName","payloadSdkConfig","params","register","MongoDBArchivistV2","factory","MemoryArchivist","MemorySentinel","ViewArchivist","chainStepRewardsClaimSentinelParams","ChainStepRewardsClaimSentinel","derivedAddressWalletTransferSentinelParams","DerivedAddressWalletTransferSentinel","ManifestWrapper","NodeManifest","node","PrivateChildManifests","PublicChildManifests","getNode","context","gateway","wallet","locator","getLocator","wrapper","ManifestWrapper","NodeManifest","PublicChildManifests","PrivateChildManifests","node","childNodes","loadNodes","length","Promise","all","map","childNode","register","attach","address","hostname","getServer","context","gateway","locator","providedNode","logger","config","port","bios","boot","seedPhrase","initActorSeedPhrase","wallet","HDWallet","fromPhrase","node","getNode","app","getApp","server","Promise","resolve","reject","srv","listen","log","once","setTimeout","RewardRedemptionActor","ActorV3","needs","required","XyoGatewayRunnerMoniker","XyoViewerMoniker","_gatewayRunner","server","gatewayRunner","createHandler","locator","getInstance","startHandler","stopServer","startServer","stopHandler","getServer","asHostActorConfigContext","context","close","undefined","getRewardRedemptionActor","config","locator","account","initActorWallet","logger","context","singletons","caches","RewardRedemptionActor","create","runRewardRedemptionApi","orchestrator","rewardRedemption","actors","filter","exists","actor","registerActor","start","rewardRedemptionCommand","getConfiguration","getLocatorsFromConfig","command","deprecated","describe","handler","configuration","locators","orchestrator","runRewardRedemptionApi","RewardRedemptionConfigZod","parse","context","config"]}
|
|
1
|
+
{
|
|
2
|
+
"version": 3,
|
|
3
|
+
"sources": ["../../src/command.ts", "../../src/run.ts", "../../src/RewardRedemptionActor.ts", "../../src/server/app.ts", "../../src/server/instrumentation.ts", "../../src/server/routes/livez/get.ts", "../../src/server/routes/readyz/get.ts", "../../src/server/routes/startupz/get.ts", "../../src/server/routes/addProbeRoutes.ts", "../../src/server/routes/dataLake/archivistMiddleware.ts", "../../src/server/routes/dataLake/addDataLakeRoutes.ts", "../../src/server/routes/rewardRedemption/addRewardRoutes.ts", "../../src/server/routes/rewardRedemption/routeDefinitions/routes/claimRange.ts", "../../src/server/routes/rewardRedemption/routeDefinitions/util/rewardableSteps.ts", "../../src/server/routes/rewardRedemption/routeDefinitions/routes/redeem.ts", "../../src/server/routes/rewardRedemption/routeDefinitions/getRouteDefinitions.ts", "../../src/server/routes/addRoutes.ts", "../../src/server/server.ts", "../../src/services/manifest/getLocator.ts", "../../src/services/modules/ChainStepRewardsClaimSentinel/ChainStepRewardsClaimSentinel.ts", "../../src/services/modules/DerivedAddressWalletTransferSentinel/DerivedAddressWalletTransferSentinel.ts", "../../src/services/manifest/getNode.ts", "../../src/services/manifest/node.json", "../../src/services/manifest/nodeManifest.ts", "../../src/services/manifest/private/index.ts", "../../src/services/manifest/public/index.ts"],
|
|
4
|
+
"sourcesContent": ["import type { GetLocatorsFromConfig } from '@xyo-network/chain-orchestration'\nimport { RewardRedemptionConfigZod } from '@xyo-network/chain-orchestration'\nimport type { Config } from '@xyo-network/xl1-sdk'\nimport type { CommandModule } from 'yargs'\n\nimport { runRewardRedemptionApi } from './run.ts'\n\nexport function rewardRedemptionCommand(getConfiguration: () => Config, getLocatorsFromConfig: GetLocatorsFromConfig): CommandModule {\n return {\n command: 'reward-redemption-api',\n deprecated: 'Use \"start rewardRedemption\" instead',\n describe: 'Run a XL1 Rewards Redemption API Node',\n handler: async () => {\n const configuration = getConfiguration()\n const { locators, orchestrator } = await getLocatorsFromConfig(['rewardRedemption'], configuration)\n await runRewardRedemptionApi(RewardRedemptionConfigZod.parse(locators['rewardRedemption'].context.config), orchestrator, locators['rewardRedemption'])\n },\n }\n}\n", "import { exists } from '@xylabs/sdk-js'\nimport type {\n OrchestratorInstance,\n RewardRedemptionConfig,\n} from '@xyo-network/chain-orchestration'\nimport { initActorWallet } from '@xyo-network/chain-orchestration'\nimport type { ProviderFactoryLocatorInstance } from '@xyo-network/xl1-sdk'\n\nimport { RewardRedemptionActor } from './RewardRedemptionActor.ts'\n\nexport async function getRewardRedemptionActor(\n config: RewardRedemptionConfig,\n locator: ProviderFactoryLocatorInstance,\n) {\n const account = await initActorWallet({\n config, logger: locator.context.logger, singletons: {}, caches: {},\n })\n return await RewardRedemptionActor.create({\n account, config, locator,\n })\n}\n\nexport async function runRewardRedemptionApi(\n config: RewardRedemptionConfig,\n orchestrator: OrchestratorInstance,\n locator: ProviderFactoryLocatorInstance,\n) {\n const rewardRedemption = await getRewardRedemptionActor(config, locator)\n const actors = [rewardRedemption].filter(exists)\n\n for (const actor of actors) {\n await orchestrator.registerActor(actor)\n }\n await orchestrator.start()\n}\n", "import type { Server } from 'node:http'\n\nimport { creatable } from '@xylabs/sdk-js'\nimport type {\n ActorCapabilityNeeds, ActorParamsV3, RewardRedemptionConfig,\n} from '@xyo-network/chain-orchestration'\nimport { ActorV3 } from '@xyo-network/chain-orchestration'\nimport type { XyoGatewayRunner } from '@xyo-network/xl1-sdk'\nimport {\n asHostActorConfigContext,\n XyoGatewayRunnerMoniker,\n XyoViewerMoniker,\n} from '@xyo-network/xl1-sdk'\n\nimport { getServer } from './server/index.ts'\n\nexport type RewardRedemptionActorParams = ActorParamsV3<{\n config: RewardRedemptionConfig\n}>\n\n@creatable()\nexport class RewardRedemptionActor extends ActorV3<RewardRedemptionActorParams> {\n static readonly needs: ActorCapabilityNeeds = {\n required: [\n XyoGatewayRunnerMoniker,\n XyoViewerMoniker,\n ],\n }\n\n protected _gatewayRunner!: XyoGatewayRunner\n private server?: Server\n\n protected get gatewayRunner() {\n return this._gatewayRunner\n }\n\n override async createHandler() {\n await super.createHandler()\n this._gatewayRunner = await this.locator.getInstance(XyoGatewayRunnerMoniker)\n }\n\n override async startHandler() {\n await super.startHandler()\n this.stopServer()\n await this.startServer()\n }\n\n override async stopHandler() {\n await super.stopHandler()\n this.stopServer()\n }\n\n private async startServer() {\n this.server = await getServer(asHostActorConfigContext(this.context, true), this._gatewayRunner, this.locator)\n }\n\n private stopServer() {\n this.server?.close()\n this.server = undefined\n }\n}\n", "import { standardErrors } from '@xylabs/express'\nimport type { RewardRedemptionConfig } from '@xyo-network/chain-orchestration'\nimport { sharedMiddleware } from '@xyo-network/chain-orchestration'\nimport type { NodeInstance } from '@xyo-network/sdk-js'\nimport type { ProviderFactoryLocatorInstance } from '@xyo-network/xl1-sdk'\nimport type { Express } from 'express'\nimport express from 'express'\n\nimport { addInstrumentation } from './instrumentation.ts'\nimport { addRoutes } from './routes/index.ts'\n\nexport const getApp = (node: NodeInstance, config: RewardRedemptionConfig, locator: ProviderFactoryLocatorInstance): Express => {\n addInstrumentation()\n const app = express()\n sharedMiddleware(app)\n app.config = config\n app.node = node\n app.locator = locator\n addRoutes(app)\n app.use(standardErrors)\n return app\n}\n", "import { registerInstrumentations } from '@opentelemetry/instrumentation'\nimport { ExpressInstrumentation } from '@opentelemetry/instrumentation-express'\nimport { HttpInstrumentation } from '@opentelemetry/instrumentation-http'\n\n/**\n * Registers OpenTelemetry instrumentations for HTTP and Express.\n * This function is used to set up the necessary instrumentations for monitoring\n * HTTP requests and Express applications. Since it monkey patches the Express\n * router & middleware system, it should be called before any Express applications\n * are defined.\n */\nexport const addInstrumentation = () => {\n const instrumentations = [new HttpInstrumentation(), new ExpressInstrumentation()]\n registerInstrumentations({ instrumentations })\n}\n", "import type { NoReqParams } from '@xylabs/express'\nimport { setRawResponseFormat } from '@xylabs/express'\nimport type { RequestHandler } from 'express'\nimport { ReasonPhrases } from 'http-status-codes'\n\nconst message = ReasonPhrases.OK\n\nconst handler: RequestHandler<NoReqParams> = (_req, res) => {\n setRawResponseFormat(res)\n res.status(200).send({ message })\n}\n\nexport const getLivez: RequestHandler<NoReqParams> = handler\n", "import type { NoReqParams } from '@xylabs/express'\nimport { setRawResponseFormat } from '@xylabs/express'\nimport type { RequestHandler } from 'express'\nimport { ReasonPhrases } from 'http-status-codes'\n\nconst message = ReasonPhrases.OK\n\nconst handler: RequestHandler<NoReqParams> = (_req, res) => {\n setRawResponseFormat(res)\n res.status(200).send({ message })\n}\n\nexport const getReadyz: RequestHandler<NoReqParams> = handler\n", "import type { NoReqParams } from '@xylabs/express'\nimport { setRawResponseFormat } from '@xylabs/express'\nimport type { RequestHandler } from 'express'\nimport { ReasonPhrases } from 'http-status-codes'\n\nconst message = ReasonPhrases.OK\n\nconst handler: RequestHandler<NoReqParams> = (_req, res) => {\n setRawResponseFormat(res)\n res.status(200).send({ message })\n}\n\nexport const getStartupz: RequestHandler<NoReqParams> = handler\n", "import type { Express } from 'express'\n\nimport { getLivez } from './livez/index.ts'\nimport { getReadyz } from './readyz/index.ts'\nimport { getStartupz } from './startupz/index.ts'\n\nexport const addProbeRoutes = (app: Express) => {\n app.get('/livez', getLivez)\n app.get('/readyz', getReadyz)\n app.get('/startupz', getStartupz)\n}\n", "import { setRawResponseFormat } from '@xylabs/express'\nimport { asHash, isDefined } from '@xylabs/sdk-js'\nimport type {\n ArchivistInstance,\n ArchivistNextOptions, ModuleIdentifier,\n NextOptions, NodeInstance, Payload,\n} from '@xyo-network/sdk-js'\nimport {\n asArchivistInstance, isAnyPayload, isSequence, PayloadBuilder,\n} from '@xyo-network/sdk-js'\nimport type { Request, Router } from 'express'\nimport express from 'express'\n\nconst resolveArchivist = async (node: NodeInstance, archivistModuleIdentifier: ModuleIdentifier): Promise<ArchivistInstance> => {\n const mod = await node.resolve(archivistModuleIdentifier)\n return asArchivistInstance(mod, { required: true })\n}\n\nlet archivistInstance: ArchivistInstance | undefined\n\nconst getArchivist = async (node: NodeInstance, archivistModuleIdentifier: ModuleIdentifier): Promise<ArchivistInstance> => {\n if (isDefined(archivistInstance)) return archivistInstance\n archivistInstance = await resolveArchivist(node, archivistModuleIdentifier)\n return archivistInstance\n}\n\ninterface ArchivistMiddlewareOptions {\n archivistModuleIdentifier: ModuleIdentifier\n node: NodeInstance\n}\n\nexport const archivistMiddleware = (options: ArchivistMiddlewareOptions): Router => {\n const { node, archivistModuleIdentifier } = options\n const router = express.Router({ mergeParams: true })\n\n router.post('/insert', async (req, res) => {\n setRawResponseFormat(res)\n const body = Array.isArray(req.body) ? req.body : [req.body]\n const payloads = (await PayloadBuilder.hashPairs<Payload>(body)).map(p => p[0])\n const archivist = await getArchivist(node, archivistModuleIdentifier)\n const result = await archivist.insert(payloads)\n res.status(200).json(result)\n })\n\n router.get('/next', async (req: Request<Partial<NextOptions>>, res) => {\n setRawResponseFormat(res)\n const cursor = isSequence(req.query.cursor) ? req.query.cursor : undefined\n const limit = isDefined(req.query.limit) ? Number(req.query.limit) : undefined\n const open = isDefined(req.query.open) ? Boolean(req.query.open) : undefined\n const order = req.query.order === 'asc' ? 'asc' : 'desc'\n const options: ArchivistNextOptions = {\n limit, open, order, cursor,\n }\n const archivist = await getArchivist(node, archivistModuleIdentifier)\n const result = await archivist.next(options)\n res.status(200).json(result)\n })\n router.post('/next', async (req: Request<{}, {}, ArchivistNextOptions | undefined>, res) => {\n setRawResponseFormat(res)\n const options = req.body\n const archivist = await getArchivist(node, archivistModuleIdentifier)\n const result = await (isDefined(options) ? archivist.next(options) : archivist.next())\n res.status(200).json(result)\n })\n\n router.get('/get/:hash', async (req, res) => {\n setRawResponseFormat(res)\n const { hash: rawHash } = req.params\n const hash = asHash(rawHash)\n if (isDefined(hash)) {\n const archivist = await getArchivist(node, archivistModuleIdentifier)\n const [payload] = await archivist.get([hash])\n if (isAnyPayload(payload)) {\n res.json(payload)\n return\n } else {\n res.status(404).send()\n return\n }\n }\n res.status(400).send()\n })\n\n return router\n}\n", "import type { Express } from 'express'\n\nimport { archivistMiddleware } from './archivistMiddleware.ts'\n\nexport const addDataLakeRoutes = (app: Express) => {\n const { node } = app\n const archivistModuleIdentifier = 'Data'\n app.use('/data', archivistMiddleware({ node, archivistModuleIdentifier }))\n}\n", "import { addRouteDefinitions } from '@xylabs/express'\nimport type { Express } from 'express'\n\nimport { getRouteDefinitions } from './routeDefinitions/index.ts'\n\nexport const addRewardRedemptionRoutes = (app: Express) => {\n const routeDefinitions = getRouteDefinitions()\n addRouteDefinitions(app, routeDefinitions)\n}\n", "import type { RouteDefinition } from '@xylabs/express'\nimport { requestHandlerValidator } from '@xylabs/express'\nimport { assertEx, isDefined } from '@xylabs/sdk-js'\nimport type {\n NodeInstance, Payload, SentinelInstance,\n} from '@xyo-network/sdk-js'\nimport {\n asSentinelInstance, PayloadBuilder, PayloadZodLoose,\n} from '@xyo-network/sdk-js'\nimport type { StepIdentityPayload, XyoViewer } from '@xyo-network/xl1-sdk'\nimport {\n asXL1BlockRange, blockRangeSteps,\n StepIdentitySchema, XyoViewerMoniker,\n} from '@xyo-network/xl1-sdk'\nimport { z } from 'zod'\n\nimport { RewardableSteps } from '../util/index.ts'\n\nconst query = z.object({\n fromBlock: z.coerce.number().int().nonnegative().optional(),\n toBlock: z.coerce.number().int().nonnegative().optional(),\n step: z.coerce.number().int().nonnegative().min(Math.min(...RewardableSteps)).max(Math.max(...RewardableSteps)).optional().default(3),\n})\nconst response = z.array(PayloadZodLoose)\n\nconst validateRequest = requestHandlerValidator({ query, response })\n\nconst getChainStepRewardsClaimSentinel = async (node: NodeInstance): Promise<SentinelInstance> => {\n const mod = await node.resolve('XYORewardRedemptionNode:ChainStepRewardsClaimSentinel')\n const sentinel = asSentinelInstance(mod)\n return assertEx(sentinel, () => 'ChainStepRewardsClaimSentinel not found on node')\n}\n\nexport const postClaimRange: RouteDefinition = {\n method: 'post',\n path: '/rewards/claimRange',\n handlers: validateRequest(async (req, res) => {\n const { locator, node } = req.app\n const {\n fromBlock, toBlock, step,\n } = z.parse(query, req.query)\n const viewer = await locator.getInstance<XyoViewer>(XyoViewerMoniker)\n const from = isDefined(fromBlock) ? fromBlock : 0\n const currentBlock = await viewer.currentBlockNumber()\n const to = isDefined(toBlock) ? Math.min(toBlock, currentBlock) : currentBlock\n if (to <= from) {\n res.status(400)\n res.json([])\n return\n }\n const range = asXL1BlockRange([from, to], { name: 'claimRange' })\n // For each rewardable step in range\n const stepIdentities = blockRangeSteps(range, [step])\n const results: Payload[] = []\n for (const stepIdentity of stepIdentities) {\n const mod = await getChainStepRewardsClaimSentinel(node)\n const stepIdentityPayload = new PayloadBuilder<StepIdentityPayload>({ schema: StepIdentitySchema }).fields(stepIdentity).build()\n const result = await mod.report([stepIdentityPayload])\n results.push(...result)\n }\n res.status(200)\n res.json(results)\n }),\n}\n", "export const RewardableSteps = [3, 4, 5, 6, 7, 8]\n", "import type { RouteDefinition } from '@xylabs/express'\nimport { requestHandlerValidator } from '@xylabs/express'\nimport { assertEx } from '@xylabs/sdk-js'\nimport type { NodeInstance, SentinelInstance } from '@xyo-network/sdk-js'\nimport {\n asSentinelInstance, PayloadZodLoose, PayloadZodStrictOfSchema,\n} from '@xyo-network/sdk-js'\nimport {\n EIP712DataPayloadFieldsZod, EIP712DataPayloadSchema, EIP712SignaturePayloadFieldsZod,\n EIP712SignaturePayloadSchema,\n} from '@xyo-network/xl1-sdk'\nimport { z } from 'zod'\n\nconst body = z.tuple([\n PayloadZodStrictOfSchema(EIP712DataPayloadSchema).extend(EIP712DataPayloadFieldsZod.shape),\n PayloadZodStrictOfSchema(EIP712SignaturePayloadSchema).extend(EIP712SignaturePayloadFieldsZod.shape),\n])\n\nconst response = z.array(PayloadZodLoose)\nconst validateRequest = requestHandlerValidator({\n body,\n response,\n})\n\nconst getDerivedAddressWalletTransferSentinel = async (node: NodeInstance): Promise<SentinelInstance> => {\n const mod = await node.resolve('XYORewardRedemptionNode:DerivedAddressWalletTransferSentinel')\n const sentinel = asSentinelInstance(mod)\n return assertEx(sentinel, () => 'DerivedAddressWalletTransferSentinel not found on node')\n}\n\nexport const postRedeem: RouteDefinition = {\n method: 'post',\n path: '/rewards/redeem',\n handlers: validateRequest(async (req, res) => {\n const { node } = req.app\n const { body } = req\n const sentinel = await getDerivedAddressWalletTransferSentinel(node)\n const result = await sentinel.report(body)\n res.status(200)\n res.json(result)\n }),\n}\n", "import type { RouteDefinition } from '@xylabs/express'\n\nimport { postClaimRange, postRedeem } from './routes/index.ts'\n\nexport const getRouteDefinitions = (): RouteDefinition[] => {\n return [\n postClaimRange,\n postRedeem,\n ]\n}\n", "import type { Express } from 'express'\n\nimport { addProbeRoutes } from './addProbeRoutes.ts'\nimport { addDataLakeRoutes } from './dataLake/index.ts'\nimport { addRewardRedemptionRoutes } from './rewardRedemption/index.ts'\n\nexport const addRoutes = (app: Express) => {\n addProbeRoutes(app)\n addDataLakeRoutes(app)\n addRewardRedemptionRoutes(app)\n}\n", "import { boot } from '@xyo-network/bios'\nimport { initActorSeedPhrase } from '@xyo-network/chain-orchestration'\nimport type { NodeInstance } from '@xyo-network/sdk-js'\nimport { HDWallet } from '@xyo-network/sdk-js'\nimport type {\n HostActorConfigContext, ProviderFactoryLocatorInstance, XyoGatewayRunner,\n} from '@xyo-network/xl1-sdk'\n\nimport { getNode } from '../services/manifest/index.ts'\nimport { getApp } from './app.ts'\n\nconst hostname = '::'\n// const hostname = '0.0.0.0'\n\nexport const getServer = async (context: HostActorConfigContext, gateway: XyoGatewayRunner, locator: ProviderFactoryLocatorInstance, providedNode?: NodeInstance) => {\n const { logger, config } = context\n const { port } = config\n const bios = await boot()\n const seedPhrase = await initActorSeedPhrase(context, bios)\n const wallet = await HDWallet.fromPhrase(seedPhrase)\n const node = providedNode ?? (await getNode(context, gateway, wallet))\n const app = getApp(node, config, locator)\n const server = await new Promise<ReturnType<typeof app.listen>>((resolve, reject) => {\n const srv = app.listen(port, hostname, () => {\n logger?.log(`[RewardsRedemption] Server listening at http://${hostname}:${port}`)\n resolve(srv)\n })\n srv.once('error', reject)\n })\n server.setTimeout(120_000)\n return server\n}\n", "import { type BaseMongoSdkPrivateConfig } from '@xylabs/mongo'\nimport { isDefined } from '@xylabs/sdk-js'\nimport { MongoDBArchivistV2 } from '@xyo-network/archivist-mongodb'\nimport { ViewArchivist } from '@xyo-network/archivist-view'\nimport { initTelemetry } from '@xyo-network/chain-telemetry'\nimport type { MongoDBModuleParamsV2 } from '@xyo-network/module-model-mongodb'\nimport {\n AbstractModule, LoggerModuleStatusReporter,\n MemoryArchivist, MemorySentinel, ModuleFactoryLocator,\n} from '@xyo-network/sdk-js'\nimport type { BaseConfigContext, XyoGatewayRunner } from '@xyo-network/xl1-sdk'\nimport { hasMongoConfig } from '@xyo-network/xl1-sdk'\n\nimport type { ChainStepRewardsClaimSentinelParams, DerivedAddressWalletTransferSentinelParams } from '../modules/index.ts'\nimport { ChainStepRewardsClaimSentinel, DerivedAddressWalletTransferSentinel } from '../modules/index.ts'\n\n/**\n * Used for retrieving a locator with the necessary modules registered for testing\n * operation of the node (entirely in memory)\n * @returns A locator with the necessary modules registered\n */\nexport const getLocator = async (context: BaseConfigContext, gateway: XyoGatewayRunner) => {\n const { config, logger } = context\n const { otlpEndpoint } = config.telemetry?.otel ?? {}\n const { path: endpoint = '/metrics', port: port = 9467 } = config.telemetry?.metrics?.scrape ?? {}\n const { traceProvider, meterProvider } = await initTelemetry({\n attributes: {\n serviceName: 'xl1-reward-redemption',\n serviceVersion: '1.0.0',\n },\n otlpEndpoint,\n metricsConfig: { endpoint, port },\n })\n\n if (isDefined(logger)) AbstractModule.defaultLogger = logger\n const statusReporter = logger ? new LoggerModuleStatusReporter(logger) : undefined\n\n const locator = new ModuleFactoryLocator()\n // If there's a MongoDB configuration\n const mongoConfig = config.storage?.mongo\n if (hasMongoConfig(mongoConfig)) {\n // Create the MongoDB SDK from the configuration\n const {\n connectionString: dbConnectionString, database: dbName, domain: dbDomain, password: dbPassword, username: dbUserName,\n } = mongoConfig\n const payloadSdkConfig: BaseMongoSdkPrivateConfig = {\n dbConnectionString, dbDomain, dbName, dbPassword, dbUserName,\n }\n const params: Partial<MongoDBModuleParamsV2> = {\n meterProvider, payloadSdkConfig, statusReporter, traceProvider,\n }\n // Register the MongoDB Archivist as the default\n locator.register(MongoDBArchivistV2.factory(params), undefined, true)\n }\n\n locator.register(MemoryArchivist.factory({\n traceProvider, meterProvider, statusReporter,\n }))\n locator.register(MemorySentinel.factory({\n traceProvider, meterProvider, statusReporter,\n }))\n locator.register(ViewArchivist.factory({\n traceProvider, meterProvider, statusReporter,\n }))\n // const gateway = await getGateway(config)\n const chainStepRewardsClaimSentinelParams: Partial<ChainStepRewardsClaimSentinelParams> = {\n gateway, traceProvider, meterProvider, statusReporter,\n }\n locator.register(ChainStepRewardsClaimSentinel.factory(chainStepRewardsClaimSentinelParams))\n const derivedAddressWalletTransferSentinelParams: Partial<DerivedAddressWalletTransferSentinelParams> = {\n gateway, traceProvider, meterProvider, statusReporter,\n }\n locator.register(DerivedAddressWalletTransferSentinel.factory(derivedAddressWalletTransferSentinelParams))\n return locator\n}\n\n// const getGateway = async (config: Config): Promise<XyoGatewayRunner | undefined> => {\n// const { mnemonic, chainRpcApiUrl } = config.actors.rewardRedemption\n\n// // Create locator\n// const transportFactory: TransportFactory = (schemas: RpcSchemaMap) => new HttpRpcTransport(chainRpcApiUrl, schemas)\n// const locator = await buildJsonRpcProviderLocator({ transportFactory })\n\n// // Register signer\n// const phrase = mnemonic ?? HDWallet.generateMnemonic()\n// const wallet = await generateXyoBaseWalletFromPhrase(phrase)\n// const account = await wallet.derivePath(ADDRESS_INDEX.XYO)\n// locator.register(SimpleXyoSigner.factory<SimpleXyoSigner>(SimpleXyoSigner.dependencies, { account }))\n// locator.register(SimpleXyoGatewayRunner.factory<SimpleXyoGatewayRunner>(SimpleXyoGatewayRunner.dependencies, {}))\n\n// // Use locator to get gateway\n// const gateway = await locator.getInstance<SimpleXyoGatewayRunner>(SimpleXyoGatewayRunner.defaultMoniker)\n// return gateway\n// }\n", "import type { Attributes, Counter } from '@opentelemetry/api'\nimport type { Address } from '@xylabs/sdk-js'\nimport {\n assertEx, delay, isDefined, isUndefined, toAddress,\n} from '@xylabs/sdk-js'\nimport type {\n AnyConfigSchema, Payload,\n SentinelConfig, SentinelInstance, SentinelModuleEventData, SentinelParams,\n} from '@xyo-network/sdk-js'\nimport { AbstractSentinel, asSchema } from '@xyo-network/sdk-js'\nimport type {\n AttoXL1, SignedHydratedTransaction, StepIdentity,\n XyoConnection, XyoGatewayRunner, XyoViewer,\n} from '@xyo-network/xl1-sdk'\nimport {\n asXL1BlockNumber, asXL1BlockRange, blockRangeSteps,\n completedStepRewardAddress, createTransferPayload, derivedReceiveAddress, flattenHydratedTransaction, flattenHydratedTransactions,\n isStepIdentityPayload, XYO_STEP_REWARD_ADDRESS,\n} from '@xyo-network/xl1-sdk'\nimport { Mutex } from 'async-mutex'\n\nexport const ChainStepRewardsClaimSentinelConfigSchema = asSchema('network.xyo.sentinel.chain.step.rewards.claim.config', true)\nexport type ChainStepRewardsClaimSentinelConfigSchema = typeof ChainStepRewardsClaimSentinelConfigSchema\n\n/**\n * The configuration for the chain step rewards claim sentinel\n */\nexport type ChainStepRewardsClaimSentinelConfig = SentinelConfig<{\n /**\n * Whether to claim steps even if there are no rewardees within the\n * step to claim. Defaults to false preventing rollovers of empty steps\n * as the nominal use case has rewardees present.\n */\n claimEmptySteps?: boolean\n /**\n * Step indices to scan for claimable rewards. Defaults to [3, 4, 5, 6, 7, 8],\n * matching the steps with non-zero StepRewardFractions in the protocol.\n * Override (e.g. to a single-step subset) for tests that only care about\n * one rewardable boundary.\n */\n rewardableSteps?: number[]\n /**\n * The schema for the chain step rewards claim sentinel config\n */\n schema: ChainStepRewardsClaimSentinelConfigSchema\n /**\n * The interval in milliseconds between checking for step rewards to claim\n */\n stepClaimIntervalMs: number\n}>\n\ninterface ChainStepRewardsClaimSentinelParamFields {\n gateway: XyoGatewayRunner\n}\n\nexport type ChainStepRewardsClaimSentinelParams<\n TConfig extends AnyConfigSchema<ChainStepRewardsClaimSentinelConfig> = AnyConfigSchema<ChainStepRewardsClaimSentinelConfig>,\n> = SentinelParams<TConfig> & ChainStepRewardsClaimSentinelParamFields\n\nconst defaultStepClaimIntervalMs = 15_000\n// const retryAttempts = 3\n// const retryDelayMs = 60_000\nconst scope = 'reward-escrow'\nconst DefaultRewardableSteps = [3, 4, 5, 6, 7, 8]\n\nexport class ChainStepRewardsClaimSentinel<\n TParams extends ChainStepRewardsClaimSentinelParams = ChainStepRewardsClaimSentinelParams,\n TEventData extends SentinelModuleEventData<SentinelInstance<TParams>> = SentinelModuleEventData<SentinelInstance<TParams>>,\n> extends AbstractSentinel<TParams, TEventData> {\n static override readonly configSchemas = [ChainStepRewardsClaimSentinelConfigSchema]\n static override readonly defaultConfigSchema = ChainStepRewardsClaimSentinelConfigSchema\n private _claimAttemptsCounter: Counter<Attributes> | undefined\n private _claimCheckCounter: Counter<Attributes> | undefined\n private _claimErrorCounter: Counter<Attributes> | undefined\n private _claimSuccessCounter: Counter<Attributes> | undefined\n private _connection: XyoConnection | undefined\n private _gateway: XyoGatewayRunner | undefined\n private _reportMutex = new Mutex()\n private _viewer: XyoViewer | undefined\n\n protected get connection(): XyoConnection {\n return assertEx(this._connection, () => 'Connection is not defined')\n }\n\n protected get gateway(): XyoGatewayRunner {\n return assertEx(this._gateway, () => 'Gateway is not defined')\n }\n\n protected get rewardableSteps(): number[] {\n return isDefined(this.config.rewardableSteps) ? this.config.rewardableSteps : DefaultRewardableSteps\n }\n\n protected get stepClaimIntervalMs(): number {\n return isDefined(this.config.stepClaimIntervalMs) ? this.config.stepClaimIntervalMs : defaultStepClaimIntervalMs\n }\n\n protected get viewer(): XyoViewer {\n return assertEx(this._viewer, () => 'Viewer is not defined')\n }\n\n override async createHandler() {\n await super.createHandler()\n // Create meters for tracking claim attempts, successes, and errors.\n this._claimAttemptsCounter = this.meter?.createCounter('chain_step_rewards_claim_sentinel_attempts_total', { description: 'Number of claim attempts' })\n this._claimCheckCounter = this.meter?.createCounter('chain_step_rewards_claim_sentinel_check_total', { description: 'Number of claim checks' })\n this._claimSuccessCounter = this.meter?.createCounter('chain_step_rewards_claim_sentinel_success_total', { description: 'Number of claim successes' })\n this._claimErrorCounter = this.meter?.createCounter('chain_step_rewards_claim_sentinel_errors_total', { description: 'Number of claim errors' })\n\n const gateway = assertEx(this.params.gateway, () => 'Gateway parameter is required')\n const connection = assertEx(gateway.connection, () => 'Gateway connection is required')\n const viewer = assertEx(connection.viewer, () => 'Viewer is not defined in gateway connection')\n // this._gateway = withRetry(gateway, retryDelayMs, retryAttempts)\n // this._connection = withRetry(connection, retryDelayMs, retryAttempts)\n // this._viewer = withRetry(viewer, retryDelayMs, retryAttempts)\n this._gateway = gateway // withRetry(gateway, retryDelayMs, retryAttempts)\n this._connection = connection // withRetry(connection, retryDelayMs, retryAttempts)\n this._viewer = viewer // withRetry(viewer, retryDelayMs, retryAttempts)\n }\n\n override async reportHandler(payloads?: Payload[]): Promise<Payload[]> {\n if (this._reportMutex.isLocked()) {\n this.logger?.debug(`ChainRewardsClaimSentinel [${this.id}] is already running, skipping report [${Date.now()}]`)\n return []\n }\n return await this._reportMutex.runExclusive(async () => {\n const response: Payload[] = []\n if (isUndefined(payloads) || payloads.length === 0) {\n await this.claimAllSteps()\n } else {\n // Process provided payloads\n const stepIdentities = payloads\n .filter(isStepIdentityPayload)\n .map<StepIdentity>((p) => {\n const { step, block: blockNumber } = p\n const block = asXL1BlockNumber(blockNumber, { name: 'reportHandler' })\n return { step, block }\n }).filter(stepIdentity => this.rewardableSteps.includes(stepIdentity.step))\n for (const stepIdentity of stepIdentities) {\n const result = await this.claimStepIdentity(stepIdentity)\n if (isDefined(result)) response.push(...flattenHydratedTransaction(result))\n }\n }\n return response\n })\n }\n\n private calculateAddressDistributions(rewardsByStaker: Record<Address, bigint>, balance: AttoXL1): Record<Address, bigint> {\n const addressClaims: Record<Address, bigint> = {}\n const totalRewards = Object.values(rewardsByStaker).reduce((acc, val) => acc + val, 0n)\n for (const [staker, amount] of Object.entries(rewardsByStaker)) {\n // Ensure they have accrued an amount\n if (amount <= 0n) continue\n const reward = (balance * amount) / totalRewards\n // Ensure they earned a reward\n if (reward <= 0n) continue\n // Accumulate rewards by address\n const receiveAddress = derivedReceiveAddress(toAddress(staker), scope)\n addressClaims[receiveAddress] = reward\n }\n const totalClaimed = Object.values(addressClaims).reduce((acc, val) => acc + val, 0n)\n assertEx(totalClaimed <= balance, () => 'Total claimed exceeds claimable balance')\n const unclaimed = balance - totalClaimed\n if (unclaimed > 0n) {\n // Return anything unclaimed (due to truncation/rounding) to step rewards pool address\n addressClaims[XYO_STEP_REWARD_ADDRESS] = unclaimed\n }\n return addressClaims\n }\n\n private async claimAllSteps(): Promise<Payload[]> {\n // No payloads to process, just do claims since last run\n const results: SignedHydratedTransaction[] = []\n\n for (const step of this.rewardableSteps) {\n // Fetch unclaimed rewards and process claims\n const from = 0\n const to = await this.viewer.currentBlockNumber()\n const range = asXL1BlockRange([from, to], { name: 'claimAllSteps' })\n // For each rewardable step in range\n const stepIdentities = blockRangeSteps(range, [step])\n for (const stepIdentity of stepIdentities) {\n const result = await this.claimStepIdentity(stepIdentity)\n if (isDefined(result)) {\n results.push(result)\n }\n await delay(this.stepClaimIntervalMs)\n }\n }\n return flattenHydratedTransactions(results)\n }\n\n private async claimStepIdentity(stepIdentity: StepIdentity): Promise<SignedHydratedTransaction | undefined> {\n this.logger?.info(`Checking rewards to claim for step ${stepIdentity.step} at block ${stepIdentity.block}`)\n const claimCounterAttributes = { step: stepIdentity.step.toString(), block: stepIdentity.block.toString() }\n try {\n this._claimCheckCounter?.add(1, claimCounterAttributes)\n // If wallet has balance\n const stepRewardAddress = completedStepRewardAddress(stepIdentity)\n const balance = await this.viewer.account.balance.accountBalance(stepRewardAddress)\n this.logger?.info(\n `Found balance of ${balance} to claim for step ${stepIdentity.step} at block ${stepIdentity.block}`\n + ` in step reward address ${stepRewardAddress}`,\n )\n if (balance > 0n) {\n this._claimAttemptsCounter?.add(1, claimCounterAttributes)\n // For stakers\n const rewardsByStaker = await this.viewer.networkStakeStepRewardPoolRewards(stepIdentity)\n const rewardRecipients = Object.keys(rewardsByStaker).length\n this.logger?.info(\n `Found ${rewardRecipients} reward recipients for step ${stepIdentity.step} at block ${stepIdentity.block}`,\n )\n // If not configured to claim empty steps\n if (!this.config.claimEmptySteps) {\n // Ensure there are rewards recipients\n assertEx(rewardRecipients > 0, () => 'No reward recipients for step')\n }\n const addressDistributions = this.calculateAddressDistributions(rewardsByStaker, balance)\n this.logger?.info(\n `Calculated address distributions for step ${stepIdentity.step} at block ${stepIdentity.block}`\n + ` with ${Object.keys(addressDistributions).length} addresses`,\n )\n // Create single transaction for all claims\n const tx = await this.submitRewardDistributionTransaction(stepRewardAddress, addressDistributions, stepIdentity, this.gateway)\n this.logger?.info(`Claimed rewards for step ${stepIdentity.step} at block ${stepIdentity.block}`)\n this._claimSuccessCounter?.add(1, claimCounterAttributes)\n // Return submitted transaction\n return tx\n }\n } catch (error) {\n this._claimErrorCounter?.add(1, claimCounterAttributes)\n this.logger?.error(`Error claiming rewards for step ${stepIdentity.step} at block ${stepIdentity.block}:`, error)\n }\n }\n\n private async submitRewardDistributionTransaction(\n stepRewardAddress: Address,\n addressDistributions: Record<Address, bigint>,\n step: StepIdentity,\n gateway: XyoGatewayRunner,\n ): Promise<SignedHydratedTransaction | undefined> {\n // Create single transfer payload for all claims\n const transferPayload = createTransferPayload(stepRewardAddress, addressDistributions)\n transferPayload.context = { step }\n const currentBlockNumber = await this.viewer.currentBlockNumber()\n const result = await gateway.addPayloadsToChain?.([transferPayload], [], { nbf: currentBlockNumber, exp: asXL1BlockNumber(currentBlockNumber + 10) })\n if (isDefined(result)) return result[1]\n }\n}\n", "import type { Attributes, Counter } from '@opentelemetry/api'\nimport type { Address } from '@xylabs/sdk-js'\nimport {\n AddressZod, assertEx, EthAddressZod, hexToBigInt, HexZod, isDefined, isUndefined,\n toAddress, toHex,\n} from '@xylabs/sdk-js'\nimport type {\n AnyConfigSchema, Payload,\n SentinelConfig, SentinelInstance, SentinelModuleEventData, SentinelParams,\n} from '@xyo-network/sdk-js'\nimport { AbstractSentinel, asSchema } from '@xyo-network/sdk-js'\nimport type {\n SignedHydratedTransaction, XL1BlockNumber, XyoGatewayRunner,\n} from '@xyo-network/xl1-sdk'\nimport {\n createTransferPayload,\n derivedReceiveAddress, flattenHydratedTransaction, isEIP712DataPayload, isEIP712SignaturePayload,\n verifyEIP712Message, XL1BlockNumberZod,\n} from '@xyo-network/xl1-sdk'\nimport z from 'zod'\n\nexport const DerivedAddressWalletTransferSentinelConfigSchema = asSchema('network.xyo.sentinel.chain.derived.address.wallet.transfer.config', true)\nexport type DerivedAddressWalletTransferSentinelConfigSchema = typeof DerivedAddressWalletTransferSentinelConfigSchema\n\n/**\n * The configuration for the derived address wallet transfer sentinel\n */\nexport type DerivedAddressWalletTransferSentinelConfig = SentinelConfig<{\n /**\n * The schema for the derived address wallet transfer sentinel config\n */\n schema: DerivedAddressWalletTransferSentinelConfigSchema\n}>\n\nexport interface DerivedAddressWalletTransferSentinelParamFields {\n gateway: XyoGatewayRunner\n}\n\nexport type DerivedAddressWalletTransferSentinelParams<\n TConfig extends AnyConfigSchema<DerivedAddressWalletTransferSentinelConfig> = AnyConfigSchema<DerivedAddressWalletTransferSentinelConfig>,\n> = SentinelParams<TConfig> & DerivedAddressWalletTransferSentinelParamFields\n\nconst scope = 'reward-escrow'\n\ninterface ParsedClaimValues {\n amount: string\n // chainId: ChainId\n exp: XL1BlockNumber\n from: Address\n nbf: XL1BlockNumber\n to: Address\n}\n\n// Assuming EthAddress and Hex are string-like (typical case)\nexport const ConfirmedClaimValuesZod = z.object({\n 'From': EthAddressZod,\n 'To XL1 Address': AddressZod,\n 'XL1 Amount': z.string(),\n 'XL1 Amount (Hex)': HexZod, // Hex\n 'XL1 Not after block': XL1BlockNumberZod,\n 'XL1 Not before block': XL1BlockNumberZod,\n})\n\nexport type ConfirmedClaimValues = z.infer<typeof ConfirmedClaimValuesZod>\n\nconst parseConfirmedClaimValues = (values: ConfirmedClaimValues): ParsedClaimValues => {\n return {\n amount: values['XL1 Amount (Hex)'],\n exp: values['XL1 Not after block'],\n from: toAddress(values.From),\n nbf: values['XL1 Not before block'],\n to: toAddress(values['To XL1 Address']),\n }\n}\n\nexport class DerivedAddressWalletTransferSentinel<\n TParams extends DerivedAddressWalletTransferSentinelParams = DerivedAddressWalletTransferSentinelParams,\n TEventData extends SentinelModuleEventData<SentinelInstance<TParams>> = SentinelModuleEventData<SentinelInstance<TParams>>,\n> extends AbstractSentinel<TParams, TEventData> {\n static override readonly configSchemas = [DerivedAddressWalletTransferSentinelConfigSchema]\n static override readonly defaultConfigSchema = DerivedAddressWalletTransferSentinelConfigSchema\n private _transferAttemptsCounter: Counter<Attributes> | undefined\n private _transferErrorCounter: Counter<Attributes> | undefined\n private _transferSuccessCounter: Counter<Attributes> | undefined\n\n protected get gateway(): XyoGatewayRunner {\n return this.params.gateway\n }\n\n override async createHandler() {\n await super.createHandler()\n // Create meters for tracking claim attempts, successes, and errors.\n this._transferAttemptsCounter = this.meter?.createCounter(\n 'derived_address_wallet_transfer_sentinel_attempts_total',\n { description: 'Number of transfer attempts' },\n )\n this._transferSuccessCounter = this.meter?.createCounter(\n 'derived_address_wallet_transfer_sentinel_success_total',\n { description: 'Number of transfer successes' },\n )\n this._transferErrorCounter = this.meter?.createCounter(\n 'derived_address_wallet_transfer_sentinel_errors_total',\n { description: 'Number of transfer errors' },\n )\n }\n\n override async reportHandler(payloads?: Payload[]): Promise<Payload[]> {\n const data = payloads?.find(x => isEIP712DataPayload(x))\n const signature = payloads?.find(x => isEIP712SignaturePayload(x))\n if (isUndefined(data) || isUndefined(signature)) return []\n this._transferAttemptsCounter?.add(1)\n const valid = await verifyEIP712Message(data, signature)\n if (!valid) {\n this._transferErrorCounter?.add(1)\n throw new Error('Invalid EIP712 signature')\n }\n const values = ConfirmedClaimValuesZod.parse(data.values)\n const parsed = parseConfirmedClaimValues(values)\n const signatureAddress = toAddress(signature.address)\n const parsedAddress = toAddress(parsed.from)\n if (signatureAddress === parsedAddress) {\n const tx = await this.submitRewardDistributionTransaction(parsed)\n if (isDefined(tx)) {\n this._transferSuccessCounter?.add(1)\n return flattenHydratedTransaction(tx)\n }\n }\n this._transferErrorCounter?.add(1)\n return []\n }\n\n protected submitRewardDistributionTransaction = async (claimValues: ParsedClaimValues): Promise<SignedHydratedTransaction | undefined> => {\n const {\n amount, from: address, to, nbf, exp,\n } = claimValues\n // Ensure necessary gateway pre-requisites are met\n const signer = assertEx(this.gateway.signer, () => 'Signer is not defined in gateway')\n const signerAddress = await signer.address()\n const connection = this.gateway.connection\n const viewer = assertEx(connection.viewer, () => 'Viewer is not defined in gateway connection')\n\n // TODO: Validate chainId against supplied in ClaimValues to prevent replay attacks\n // const chainId = await viewer.chainId()\n\n // Ensure the transaction is within the valid block range\n const currentBlock = await viewer.currentBlockNumber()\n if (currentBlock < nbf || currentBlock > exp) throw new Error('Transaction is not within a valid block range')\n\n // Parse the signer's address\n const escrowAccount = derivedReceiveAddress(address, scope)\n\n // Ensure the escrow account has sufficient balance\n const balance = await viewer.account.balance.accountBalance(escrowAccount)\n // MEMO: Currently we require the full amount to be redeemed from the escrow account. We do\n // not allow partial escrow redemptions.\n const redemptionAmount = hexToBigInt(toHex(amount))\n assertEx(balance === redemptionAmount, () => 'Insufficient balance in escrow account')\n\n // Ensure we have enough allowance to transfer from the escrow account\n const allowance = await viewer.account.balance.accountBalance(signerAddress)\n assertEx(allowance > 1000n, () => 'Insufficient allowance to transfer from escrow account')\n\n // Create the transfer payload\n const transferPayload = createTransferPayload(escrowAccount, { [to]: hexToBigInt(toHex(amount)) })\n // Add required validation context\n transferPayload.context = { address, scope }\n const chain = await viewer.chainId()\n const result = await this.gateway.addPayloadsToChain?.([transferPayload], [], {\n chain, nbf, exp,\n })\n if (isDefined(result)) return result[1]\n }\n}\n", "import type { Logger } from '@xylabs/sdk-js'\nimport { ManifestWrapper } from '@xyo-network/sdk-js'\nimport type { WalletInstance } from '@xyo-network/wallet-model'\nimport type {\n BaseConfigContext,\n Config, XyoGatewayRunner,\n} from '@xyo-network/xl1-sdk'\n\nimport { getLocator } from './getLocator.ts'\nimport { NodeManifest } from './nodeManifest.ts'\nimport { PrivateChildManifests } from './private/index.ts'\nimport { PublicChildManifests } from './public/index.ts'\n\nexport interface GetNodeContext {\n config: Config\n logger?: Logger\n wallet: WalletInstance\n}\n\n/**\n * Creates a node with the xyo-chain modules registered\n * @param context The context to use for the node\n * @returns A node with the xyo-chain modules registered\n */\nexport const getNode = async (context: BaseConfigContext, gateway: XyoGatewayRunner, wallet: WalletInstance) => {\n const locator = await getLocator(context, gateway)\n const wrapper = new ManifestWrapper(NodeManifest, wallet, locator, PublicChildManifests, PrivateChildManifests)\n const [node, ...childNodes] = await wrapper.loadNodes()\n if (childNodes?.length > 0) {\n await Promise.all(childNodes.map(childNode => node.register(childNode)))\n await Promise.all(childNodes.map(childNode => node.attach(childNode.address, true)))\n }\n return node\n}\n", "{\n \"$schema\": \"https://raw.githubusercontent.com/XYOracleNetwork/sdk-xyo-client-js/main/packages/manifest/src/schema.json\",\n \"nodes\": [\n {\n \"config\": {\n \"accountPath\": \"44'/60'/1\",\n \"name\": \"XYORewardRedemptionNode\",\n \"schema\": \"network.xyo.node.config\"\n },\n \"modules\": {\n \"private\": [\n {\n \"config\": {\n \"accountPath\": \"1/1'/1'\",\n \"name\": \"DataPrivate\",\n \"getCache\": {\n \"enabled\": true,\n \"maxEntries\": 5000\n },\n \"payloadSdkConfig\": {\n \"collection\": \"reward_redemption_api_datalake\"\n },\n \"schema\": \"network.xyo.archivist.config\"\n }\n },\n {\n \"config\": {\n \"accountPath\": \"1/1'/2'\",\n \"name\": \"ChainStepRewardsClaimSentinel\",\n \"schema\": \"network.xyo.sentinel.chain.step.rewards.claim.config\"\n }\n },\n {\n \"config\": {\n \"accountPath\": \"1/1'/3'\",\n \"automations\": [\n {\n \"frequency\": 60000,\n \"frequencyUnits\": \"millis\",\n \"schema\": \"network.xyo.automation.interval\",\n \"type\": \"interval\"\n }\n ],\n \"name\": \"ChainRewardsClaimIntervalSentinel\",\n \"schema\": \"network.xyo.sentinel.config\",\n \"synchronous\": true,\n \"tasks\": [\n {\n \"mod\": \"ChainStepRewardsClaimSentinel\",\n \"endPoint\": \"report\"\n }\n ]\n }\n },\n {\n \"config\": {\n \"accountPath\": \"1/1'/4'\",\n \"name\": \"DerivedAddressWalletTransferSentinel\",\n \"schema\": \"network.xyo.sentinel.chain.derived.address.wallet.transfer.config\"\n }\n }\n ],\n \"public\": [\n {\n \"config\": {\n \"accountPath\": \"1/1/1\",\n \"name\": \"Data\",\n \"allowedQueries\": [\n \"network.xyo.query.archivist.get\",\n \"network.xyo.query.archivist.next\"\n ],\n \"getCache\": {\n \"enabled\": true,\n \"maxEntries\": 5000\n },\n \"originArchivist\": \"DataPrivate\",\n \"schema\": \"network.xyo.archivist.view.config\"\n }\n }\n ]\n }\n }\n ],\n \"schema\": \"network.xyo.manifest\"\n}\n", "import type { PackageManifestPayload } from '@xyo-network/sdk-js'\n\nimport node from './node.json' with { type: 'json' }\n\n/**\n * Root Node Manifest\n */\nexport const NodeManifest = node as unknown as PackageManifestPayload\n", "/**\n * Private Child Manifests\n */\nexport const PrivateChildManifests = []\n", "import type { ModuleManifest } from '@xyo-network/sdk-js'\n\n/**\n * Public Child Manifests\n */\nexport const PublicChildManifests: ModuleManifest[] = []\n"],
|
|
5
|
+
"mappings": "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",
|
|
6
|
+
"names": ["XyoViewerMoniker", "express", "setRawResponseFormat", "ReasonPhrases", "message", "handler", "setRawResponseFormat", "ReasonPhrases", "message", "handler", "setRawResponseFormat", "body", "options", "isDefined", "PayloadBuilder", "isDefined", "PayloadBuilder", "requestHandlerValidator", "assertEx", "asSentinelInstance", "PayloadZodLoose", "z", "response", "validateRequest", "body", "express", "isDefined", "assertEx", "isDefined", "asXL1BlockRange", "blockRangeSteps", "response", "assertEx", "isDefined", "isUndefined", "toAddress", "AbstractSentinel", "asSchema", "createTransferPayload", "derivedReceiveAddress", "flattenHydratedTransaction", "z", "scope", "isDefined", "XyoViewerMoniker"]
|
|
7
|
+
}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@xyo-network/chain-reward-redemption",
|
|
3
|
-
"version": "1.23.
|
|
3
|
+
"version": "1.23.2",
|
|
4
4
|
"description": "XYO Layer One Rewards",
|
|
5
5
|
"homepage": "https://xylabs.com",
|
|
6
6
|
"bugs": {
|
|
@@ -35,8 +35,8 @@
|
|
|
35
35
|
"README.md"
|
|
36
36
|
],
|
|
37
37
|
"dependencies": {
|
|
38
|
-
"@xyo-network/chain-orchestration": "~1.23.
|
|
39
|
-
"@xyo-network/chain-telemetry": "~1.23.
|
|
38
|
+
"@xyo-network/chain-orchestration": "~1.23.2",
|
|
39
|
+
"@xyo-network/chain-telemetry": "~1.23.2"
|
|
40
40
|
},
|
|
41
41
|
"devDependencies": {
|
|
42
42
|
"@bitauth/libauth": "~3.0.0",
|
|
@@ -47,14 +47,14 @@
|
|
|
47
47
|
"@opentelemetry/context-async-hooks": "~2.7.1",
|
|
48
48
|
"@opentelemetry/context-zone": "~2.7.1",
|
|
49
49
|
"@opentelemetry/core": "~2.7.1",
|
|
50
|
-
"@opentelemetry/exporter-prometheus": "~0.
|
|
51
|
-
"@opentelemetry/exporter-trace-otlp-grpc": "~0.
|
|
52
|
-
"@opentelemetry/exporter-trace-otlp-http": "~0.
|
|
50
|
+
"@opentelemetry/exporter-prometheus": "~0.218",
|
|
51
|
+
"@opentelemetry/exporter-trace-otlp-grpc": "~0.218",
|
|
52
|
+
"@opentelemetry/exporter-trace-otlp-http": "~0.218",
|
|
53
53
|
"@opentelemetry/host-metrics": "~0.38.3",
|
|
54
|
-
"@opentelemetry/instrumentation": "~0.
|
|
55
|
-
"@opentelemetry/instrumentation-express": "~0.
|
|
56
|
-
"@opentelemetry/instrumentation-http": "~0.
|
|
57
|
-
"@opentelemetry/instrumentation-runtime-node": "~0.
|
|
54
|
+
"@opentelemetry/instrumentation": "~0.218",
|
|
55
|
+
"@opentelemetry/instrumentation-express": "~0.66",
|
|
56
|
+
"@opentelemetry/instrumentation-http": "~0.218",
|
|
57
|
+
"@opentelemetry/instrumentation-runtime-node": "~0.31",
|
|
58
58
|
"@opentelemetry/resources": "~2.7.1",
|
|
59
59
|
"@opentelemetry/sdk-metrics": "~2.7.1",
|
|
60
60
|
"@opentelemetry/sdk-trace-base": "^2.7.1",
|
|
@@ -70,8 +70,8 @@
|
|
|
70
70
|
"@xylabs/mongo": "^5.1.2",
|
|
71
71
|
"@xylabs/sdk-js": "^5.1.2",
|
|
72
72
|
"@xylabs/threads": "~5.1.2",
|
|
73
|
-
"@xylabs/toolchain": "~
|
|
74
|
-
"@xylabs/tsconfig": "~
|
|
73
|
+
"@xylabs/toolchain": "~8.0.4",
|
|
74
|
+
"@xylabs/tsconfig": "~8.0.4",
|
|
75
75
|
"@xyo-network/account": "~5.6.2",
|
|
76
76
|
"@xyo-network/account-model": "~5.6.3",
|
|
77
77
|
"@xyo-network/api": "~5.6.2",
|
|
@@ -98,8 +98,8 @@
|
|
|
98
98
|
"@xyo-network/typechain": "^4.1.3",
|
|
99
99
|
"@xyo-network/wallet": "~5.6.2",
|
|
100
100
|
"@xyo-network/wallet-model": "^5.6.3",
|
|
101
|
-
"@xyo-network/xl1-protocol-sdk": "~1.30.
|
|
102
|
-
"@xyo-network/xl1-sdk": "^1.30.
|
|
101
|
+
"@xyo-network/xl1-protocol-sdk": "~1.30.2",
|
|
102
|
+
"@xyo-network/xl1-sdk": "^1.30.2",
|
|
103
103
|
"ajv": "^8.20.0",
|
|
104
104
|
"async-mutex": "^0.5.0",
|
|
105
105
|
"bn.js": "^5.2.3",
|
|
@@ -130,9 +130,9 @@
|
|
|
130
130
|
"shallowequal": "~1.1.0",
|
|
131
131
|
"store2": "~2.14.4",
|
|
132
132
|
"tslib": "^2.8.1",
|
|
133
|
-
"typescript": "~
|
|
133
|
+
"typescript": "~6.0.3",
|
|
134
134
|
"uuid": "~14.0.0",
|
|
135
|
-
"vite": "^8.0.
|
|
135
|
+
"vite": "^8.0.13",
|
|
136
136
|
"vitest": "^4.1.6",
|
|
137
137
|
"wasm-feature-detect": "~1.8.0",
|
|
138
138
|
"web3-types": "~1.10.0",
|
|
@@ -140,7 +140,7 @@
|
|
|
140
140
|
"winston": "~3.19.0",
|
|
141
141
|
"winston-transport": "~4.9.0",
|
|
142
142
|
"zod": "~4.4.3",
|
|
143
|
-
"@xyo-network/chain-validation": "~1.23.
|
|
143
|
+
"@xyo-network/chain-validation": "~1.23.2"
|
|
144
144
|
},
|
|
145
145
|
"peerDependencies": {
|
|
146
146
|
"@bitauth/libauth": "~3.0",
|
|
@@ -151,14 +151,14 @@
|
|
|
151
151
|
"@opentelemetry/context-async-hooks": "~2.7",
|
|
152
152
|
"@opentelemetry/context-zone": "~2.7",
|
|
153
153
|
"@opentelemetry/core": "~2.7",
|
|
154
|
-
"@opentelemetry/exporter-prometheus": "~0.
|
|
155
|
-
"@opentelemetry/exporter-trace-otlp-grpc": "~0.
|
|
156
|
-
"@opentelemetry/exporter-trace-otlp-http": "~0.
|
|
154
|
+
"@opentelemetry/exporter-prometheus": "~0.218",
|
|
155
|
+
"@opentelemetry/exporter-trace-otlp-grpc": "~0.218",
|
|
156
|
+
"@opentelemetry/exporter-trace-otlp-http": "~0.218",
|
|
157
157
|
"@opentelemetry/host-metrics": "~0.38",
|
|
158
|
-
"@opentelemetry/instrumentation": "~0.
|
|
159
|
-
"@opentelemetry/instrumentation-express": "~0.
|
|
160
|
-
"@opentelemetry/instrumentation-http": "~0.
|
|
161
|
-
"@opentelemetry/instrumentation-runtime-node": "~0.
|
|
158
|
+
"@opentelemetry/instrumentation": "~0.218",
|
|
159
|
+
"@opentelemetry/instrumentation-express": "~0.66",
|
|
160
|
+
"@opentelemetry/instrumentation-http": "~0.218",
|
|
161
|
+
"@opentelemetry/instrumentation-runtime-node": "~0.31",
|
|
162
162
|
"@opentelemetry/resources": "~2.7",
|
|
163
163
|
"@opentelemetry/sdk-metrics": "~2.7",
|
|
164
164
|
"@opentelemetry/sdk-trace-base": "^2.7",
|