@xyo-network/chain-reward-redemption 1.16.9 → 1.16.10

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.
@@ -115,40 +115,208 @@ var addDataLakeRoutes = /* @__PURE__ */ __name((app) => {
115
115
  import { addRouteDefinitions } from "@xylabs/express";
116
116
 
117
117
  // src/server/routes/rewardRedemption/routeDefinitions/routes/claimRange.ts
118
- import { assertEx as assertEx3 } from "@xylabs/assert";
118
+ import { assertEx } from "@xylabs/assert";
119
119
  import { requestHandlerValidator } from "@xylabs/express";
120
- import { isDefined as isDefined5 } from "@xylabs/typeof";
121
- import { blockRangeSteps as blockRangeSteps2 } from "@xyo-network/chain-protocol";
120
+ import { isDefined as isDefined3 } from "@xylabs/typeof";
121
+ import { blockRangeSteps } from "@xyo-network/chain-protocol";
122
122
  import { PayloadBuilder as PayloadBuilder2 } from "@xyo-network/payload-builder";
123
123
  import { PayloadZodLoose } from "@xyo-network/payload-model";
124
124
  import { asSentinelInstance } from "@xyo-network/sentinel-model";
125
- import { asXL1BlockRange as asXL1BlockRange2 } from "@xyo-network/xl1-protocol";
125
+ import { asXL1BlockRange, StepIdentitySchema } from "@xyo-network/xl1-protocol";
126
+ import { z } from "zod";
127
+
128
+ // src/server/routes/rewardRedemption/routeDefinitions/util/getViewerFromConfig.ts
129
+ import { isDefined as isDefined2 } from "@xylabs/typeof";
130
+ import { HttpRpcTransport, JsonRpcNetworkStakeViewer, JsonRpcXyoViewer, NetworkStakeViewerRpcSchemas, XyoViewerRpcSchemas } from "@xyo-network/xl1-rpc";
131
+ var viewer;
132
+ var getViewerFromConfig = /* @__PURE__ */ __name((config) => {
133
+ if (isDefined2(viewer)) return viewer;
134
+ const transport = new HttpRpcTransport(config.rewardRedemptionApi.chainRpcApiUrl, {
135
+ ...XyoViewerRpcSchemas,
136
+ ...NetworkStakeViewerRpcSchemas
137
+ });
138
+ const networkStakeViewer = new JsonRpcNetworkStakeViewer(transport);
139
+ viewer = new JsonRpcXyoViewer(transport, {
140
+ networkStakeViewer
141
+ });
142
+ return viewer;
143
+ }, "getViewerFromConfig");
144
+
145
+ // src/server/routes/rewardRedemption/routeDefinitions/util/rewardableSteps.ts
146
+ var RewardableSteps = [
147
+ 3,
148
+ 4,
149
+ 5,
150
+ 6,
151
+ 7,
152
+ 8
153
+ ];
154
+
155
+ // src/server/routes/rewardRedemption/routeDefinitions/routes/claimRange.ts
156
+ var query = z.object({
157
+ fromBlock: z.coerce.number().int().nonnegative().optional(),
158
+ toBlock: z.coerce.number().int().nonnegative().optional(),
159
+ step: z.coerce.number().int().nonnegative().min(Math.min(...RewardableSteps)).max(Math.max(...RewardableSteps)).optional().default(3)
160
+ });
161
+ var response = z.array(PayloadZodLoose);
162
+ var validateRequest = requestHandlerValidator({
163
+ query,
164
+ response
165
+ });
166
+ var getChainStepRewardsClaimSentinel = /* @__PURE__ */ __name(async (node) => {
167
+ const mod = await node.resolve("XYORewardRedemptionNode:ChainStepRewardsClaimSentinel");
168
+ const sentinel = asSentinelInstance(mod);
169
+ return assertEx(sentinel, () => "ChainStepRewardsClaimSentinel not found on node");
170
+ }, "getChainStepRewardsClaimSentinel");
171
+ var postClaimRange = {
172
+ method: "post",
173
+ path: "/rewards/claimRange",
174
+ handlers: validateRequest(async (req, res) => {
175
+ const { config, node } = req.app;
176
+ const { fromBlock, toBlock, step } = z.parse(query, req.query);
177
+ const viewer2 = getViewerFromConfig(config);
178
+ const from = isDefined3(fromBlock) ? fromBlock : 0;
179
+ const currentBlock = await viewer2.currentBlockNumber();
180
+ const to = isDefined3(toBlock) ? Math.min(toBlock, currentBlock) : currentBlock;
181
+ if (to <= from) {
182
+ res.status(400);
183
+ res.json([]);
184
+ return;
185
+ }
186
+ const range = asXL1BlockRange([
187
+ from,
188
+ to
189
+ ], {
190
+ name: "claimRange"
191
+ });
192
+ const stepIdentities = blockRangeSteps(range, [
193
+ step
194
+ ]);
195
+ const results = [];
196
+ for (const stepIdentity of stepIdentities) {
197
+ const mod = await getChainStepRewardsClaimSentinel(node);
198
+ const stepIdentityPayload = new PayloadBuilder2({
199
+ schema: StepIdentitySchema
200
+ }).fields(stepIdentity).build();
201
+ const result = await mod.report([
202
+ stepIdentityPayload
203
+ ]);
204
+ results.push(...result);
205
+ }
206
+ res.status(200);
207
+ res.json(results);
208
+ })
209
+ };
210
+
211
+ // src/server/routes/rewardRedemption/routeDefinitions/routes/redeem.ts
212
+ import { assertEx as assertEx2 } from "@xylabs/assert";
213
+ import { requestHandlerValidator as requestHandlerValidator2 } from "@xylabs/express";
214
+ import { PayloadZodLoose as PayloadZodLoose2, PayloadZodStrictOfSchema } from "@xyo-network/payload-model";
215
+ import { asSentinelInstance as asSentinelInstance2 } from "@xyo-network/sentinel-model";
216
+ import { EIP712DataPayloadFieldsZod, EIP712DataPayloadSchema, EIP712SignaturePayloadFieldsZod, EIP712SignaturePayloadSchema } from "@xyo-network/xl1-protocol-sdk";
126
217
  import { z as z2 } from "zod";
218
+ var body = z2.tuple([
219
+ PayloadZodStrictOfSchema(EIP712DataPayloadSchema).extend(EIP712DataPayloadFieldsZod.shape),
220
+ PayloadZodStrictOfSchema(EIP712SignaturePayloadSchema).extend(EIP712SignaturePayloadFieldsZod.shape)
221
+ ]);
222
+ var response2 = z2.array(PayloadZodLoose2);
223
+ var validateRequest2 = requestHandlerValidator2({
224
+ body,
225
+ response: response2
226
+ });
227
+ var getDerivedAddressWalletTransferSentinel = /* @__PURE__ */ __name(async (node) => {
228
+ const mod = await node.resolve("XYORewardRedemptionNode:DerivedAddressWalletTransferSentinel");
229
+ const sentinel = asSentinelInstance2(mod);
230
+ return assertEx2(sentinel, () => "DerivedAddressWalletTransferSentinel not found on node");
231
+ }, "getDerivedAddressWalletTransferSentinel");
232
+ var postRedeem = {
233
+ method: "post",
234
+ path: "/rewards/redeem",
235
+ handlers: validateRequest2(async (req, res) => {
236
+ const { node } = req.app;
237
+ const { body: body2 } = req;
238
+ const sentinel = await getDerivedAddressWalletTransferSentinel(node);
239
+ const result = await sentinel.report(body2);
240
+ res.status(200);
241
+ res.json(result);
242
+ })
243
+ };
244
+
245
+ // src/server/routes/rewardRedemption/routeDefinitions/getRouteDefinitions.ts
246
+ var getRouteDefinitions = /* @__PURE__ */ __name(() => {
247
+ return [
248
+ postClaimRange,
249
+ postRedeem
250
+ ];
251
+ }, "getRouteDefinitions");
252
+
253
+ // src/server/routes/rewardRedemption/addRewardRoutes.ts
254
+ var addRewardRedemptionRoutes = /* @__PURE__ */ __name((app) => {
255
+ const routeDefinitions = getRouteDefinitions();
256
+ addRouteDefinitions(app, routeDefinitions);
257
+ }, "addRewardRedemptionRoutes");
258
+
259
+ // src/server/routes/addRoutes.ts
260
+ var addRoutes = /* @__PURE__ */ __name((app) => {
261
+ addDataLakeRoutes(app);
262
+ addRewardRedemptionRoutes(app);
263
+ }, "addRoutes");
264
+
265
+ // src/server/app.ts
266
+ var getApp = /* @__PURE__ */ __name((node, config) => {
267
+ addInstrumentation();
268
+ const app = express2();
269
+ app.set("etag", false);
270
+ app.use(cors());
271
+ app.use(compression());
272
+ app.use(responseProfiler);
273
+ app.use(getJsonBodyParser(getJsonBodyParserOptions({
274
+ limit: "1mb"
275
+ })));
276
+ app.use(standardResponses);
277
+ disableExpressDefaultPoweredByHeader(app);
278
+ app.use(customPoweredByHeader);
279
+ disableCaseSensitiveRouting(app);
280
+ app.config = config;
281
+ app.node = node;
282
+ addRoutes(app);
283
+ app.use(standardErrors);
284
+ return app;
285
+ }, "getApp");
286
+
287
+ // src/server/server.ts
288
+ import { assertEx as assertEx5 } from "@xylabs/assert";
289
+ import { isDefined as isDefined7, isString } from "@xylabs/typeof";
290
+ import { boot } from "@xyo-network/bios";
291
+ import { HDWallet as HDWallet2 } from "@xyo-network/wallet";
292
+
293
+ // src/manifest/getLocator.ts
294
+ import { isDefined as isDefined6 } from "@xylabs/typeof";
295
+ import { MemoryArchivist } from "@xyo-network/archivist-memory";
296
+ import { MongoDBArchivistV2 } from "@xyo-network/archivist-mongodb";
297
+ import { ViewArchivist } from "@xyo-network/archivist-view";
298
+ import { initTelemetry } from "@xyo-network/chain-telemetry";
299
+ import { AbstractModule, LoggerModuleStatusReporter } from "@xyo-network/module-abstract";
300
+ import { ModuleFactoryLocator } from "@xyo-network/module-factory-locator";
301
+ import { MemorySentinel } from "@xyo-network/sentinel-memory";
302
+ import { HDWallet } from "@xyo-network/wallet";
303
+ import { hasMongoConfig, SimpleXyoGateway, SimpleXyoSigner } from "@xyo-network/xl1-protocol-sdk";
304
+ import { HttpRpcXyoConnection } from "@xyo-network/xl1-rpc";
127
305
 
128
306
  // src/modules/ChainStepRewardsClaimSentinel/ChainStepRewardsClaimSentinel.ts
129
- import { assertEx } from "@xylabs/assert";
307
+ import { assertEx as assertEx3 } from "@xylabs/assert";
130
308
  import { delay } from "@xylabs/delay";
131
309
  import { toAddress } from "@xylabs/hex";
132
- import { isDefined as isDefined2, isUndefined } from "@xylabs/typeof";
133
- import { blockRangeSteps, createTransferPayload } from "@xyo-network/chain-protocol";
310
+ import { isDefined as isDefined4, isUndefined } from "@xylabs/typeof";
311
+ import { blockRangeSteps as blockRangeSteps2, createTransferPayload } from "@xyo-network/chain-protocol";
134
312
  import { AbstractSentinel } from "@xyo-network/sentinel-abstract";
135
- import { asXL1BlockNumber, asXL1BlockRange, XYO_STEP_REWARD_ADDRESS } from "@xyo-network/xl1-protocol";
313
+ import { asXL1BlockNumber, asXL1BlockRange as asXL1BlockRange2, isStepIdentityPayload, XYO_STEP_REWARD_ADDRESS } from "@xyo-network/xl1-protocol";
136
314
  import { completedStepRewardAddress, derivedReceiveAddress, flattenHydratedTransaction, flattenHydratedTransactions, SimpleXyoGatewayRunner } from "@xyo-network/xl1-protocol-sdk";
137
315
  import { Mutex } from "async-mutex";
138
-
139
- // src/modules/ChainStepRewardsClaimSentinel/StepIdentityPayload.ts
140
- import { AsObjectFactory } from "@xylabs/object";
141
- import { isPayloadOfZodType } from "@xyo-network/payload-model";
142
- import { StepIdentityZod } from "@xyo-network/xl1-protocol";
143
- var StepIdentitySchema = "network.xyo.chain.step.identity";
144
- var isStepIdentityPayload = isPayloadOfZodType(StepIdentityZod, StepIdentitySchema);
145
- var asStepIdentityPayload = AsObjectFactory.create(isStepIdentityPayload);
146
-
147
- // src/modules/ChainStepRewardsClaimSentinel/ChainStepRewardsClaimSentinel.ts
148
316
  var ChainStepRewardsClaimSentinelConfigSchema = "network.xyo.sentinel.chain.step.rewards.claim.config";
149
317
  var defaultStepClaimIntervalMs = 15e3;
150
318
  var scope = "reward-escrow";
151
- var RewardableSteps = [
319
+ var RewardableSteps2 = [
152
320
  3,
153
321
  4,
154
322
  5,
@@ -173,16 +341,16 @@ var ChainStepRewardsClaimSentinel = class extends AbstractSentinel {
173
341
  _reportMutex = new Mutex();
174
342
  _viewer;
175
343
  get connection() {
176
- return assertEx(this._connection, () => "Connection is not defined");
344
+ return assertEx3(this._connection, () => "Connection is not defined");
177
345
  }
178
346
  get gateway() {
179
- return new SimpleXyoGatewayRunner(assertEx(this._gateway, () => "Gateway is not defined"));
347
+ return new SimpleXyoGatewayRunner(assertEx3(this._gateway, () => "Gateway is not defined"));
180
348
  }
181
349
  get stepClaimIntervalMs() {
182
- return isDefined2(this.config.stepClaimIntervalMs) ? this.config.stepClaimIntervalMs : defaultStepClaimIntervalMs;
350
+ return isDefined4(this.config.stepClaimIntervalMs) ? this.config.stepClaimIntervalMs : defaultStepClaimIntervalMs;
183
351
  }
184
352
  get viewer() {
185
- return assertEx(this._viewer, () => "Viewer is not defined");
353
+ return assertEx3(this._viewer, () => "Viewer is not defined");
186
354
  }
187
355
  async createHandler() {
188
356
  await super.createHandler();
@@ -198,9 +366,9 @@ var ChainStepRewardsClaimSentinel = class extends AbstractSentinel {
198
366
  this._claimErrorCounter = this.meter?.createCounter("chain_step_rewards_claim_sentinel_errors_total", {
199
367
  description: "Number of claim errors"
200
368
  });
201
- const gateway = assertEx(this.params.gateway, () => "Gateway parameter is required");
202
- const connection = assertEx(await gateway.connection(), () => "Gateway connection is required");
203
- const viewer2 = assertEx(connection.viewer, () => "Viewer is not defined in gateway connection");
369
+ const gateway = assertEx3(this.params.gateway, () => "Gateway parameter is required");
370
+ const connection = assertEx3(await gateway.connection(), () => "Gateway connection is required");
371
+ const viewer2 = assertEx3(connection.viewer, () => "Viewer is not defined in gateway connection");
204
372
  this._gateway = gateway;
205
373
  this._connection = connection;
206
374
  this._viewer = viewer2;
@@ -217,15 +385,17 @@ var ChainStepRewardsClaimSentinel = class extends AbstractSentinel {
217
385
  } else {
218
386
  const stepIdentities = payloads.filter(isStepIdentityPayload).map((p) => {
219
387
  const { step, block: blockNumber } = p;
220
- const block = asXL1BlockNumber(blockNumber, true);
388
+ const block = asXL1BlockNumber(blockNumber, {
389
+ name: "reportHandler"
390
+ });
221
391
  return {
222
392
  step,
223
393
  block
224
394
  };
225
- }).filter((stepIdentity) => RewardableSteps.includes(stepIdentity.step));
395
+ }).filter((stepIdentity) => RewardableSteps2.includes(stepIdentity.step));
226
396
  for (const stepIdentity of stepIdentities) {
227
397
  const result = await this.claimStepIdentity(stepIdentity);
228
- if (isDefined2(result)) response3.push(...flattenHydratedTransaction(result));
398
+ if (isDefined4(result)) response3.push(...flattenHydratedTransaction(result));
229
399
  }
230
400
  }
231
401
  return response3;
@@ -242,7 +412,7 @@ var ChainStepRewardsClaimSentinel = class extends AbstractSentinel {
242
412
  addressClaims[receiveAddress] = reward;
243
413
  }
244
414
  const totalClaimed = Object.values(addressClaims).reduce((acc, val) => acc + val, 0n);
245
- assertEx(totalClaimed <= balance, () => "Total claimed exceeds claimable balance");
415
+ assertEx3(totalClaimed <= balance, () => "Total claimed exceeds claimable balance");
246
416
  const unclaimed = balance - totalClaimed;
247
417
  if (unclaimed > 0n) {
248
418
  addressClaims[XYO_STEP_REWARD_ADDRESS] = unclaimed;
@@ -251,19 +421,21 @@ var ChainStepRewardsClaimSentinel = class extends AbstractSentinel {
251
421
  }
252
422
  async claimAllSteps() {
253
423
  const results = [];
254
- for (const step of RewardableSteps) {
424
+ for (const step of RewardableSteps2) {
255
425
  const from = 0;
256
426
  const to = await this.viewer.currentBlockNumber();
257
- const range = asXL1BlockRange([
258
- asXL1BlockNumber(from),
259
- asXL1BlockNumber(to)
260
- ], true);
261
- const stepIdentities = blockRangeSteps(range, [
427
+ const range = asXL1BlockRange2([
428
+ from,
429
+ to
430
+ ], {
431
+ name: "claimAllSteps"
432
+ });
433
+ const stepIdentities = blockRangeSteps2(range, [
262
434
  step
263
435
  ]);
264
436
  for (const stepIdentity of stepIdentities) {
265
437
  const result = await this.claimStepIdentity(stepIdentity);
266
- if (isDefined2(result)) {
438
+ if (isDefined4(result)) {
267
439
  results.push(result);
268
440
  }
269
441
  await delay(this.stepClaimIntervalMs);
@@ -309,27 +481,27 @@ var ChainStepRewardsClaimSentinel = class extends AbstractSentinel {
309
481
  nbf: currentBlockNumber,
310
482
  exp: currentBlockNumber + 10
311
483
  });
312
- if (isDefined2(result)) return result[1];
484
+ if (isDefined4(result)) return result[1];
313
485
  }
314
486
  };
315
487
 
316
488
  // src/modules/DerivedAddressWalletTransferSentinel/DerivedAddressWalletTransferSentinel.ts
317
- import { assertEx as assertEx2 } from "@xylabs/assert";
489
+ import { assertEx as assertEx4 } from "@xylabs/assert";
318
490
  import { AddressZod, EthAddressZod, hexToBigInt, HexZod, toAddress as toAddress2, toHex } from "@xylabs/hex";
319
- import { isDefined as isDefined3, isUndefined as isUndefined2 } from "@xylabs/typeof";
491
+ import { isDefined as isDefined5, isUndefined as isUndefined2 } from "@xylabs/typeof";
320
492
  import { createTransferPayload as createTransferPayload2 } from "@xyo-network/chain-protocol";
321
493
  import { AbstractSentinel as AbstractSentinel2 } from "@xyo-network/sentinel-abstract";
322
494
  import { derivedReceiveAddress as derivedReceiveAddress2, flattenHydratedTransaction as flattenHydratedTransaction2, isEIP712DataPayload, isEIP712SignaturePayload, SimpleXyoGatewayRunner as SimpleXyoGatewayRunner2, verifyEIP712Message } from "@xyo-network/xl1-protocol-sdk";
323
- import z from "zod";
495
+ import z3 from "zod";
324
496
  var DerivedAddressWalletTransferSentinelConfigSchema = "network.xyo.sentinel.chain.derived.address.wallet.transfer.config";
325
497
  var scope2 = "reward-escrow";
326
- var ConfirmedClaimValuesZod = z.object({
498
+ var ConfirmedClaimValuesZod = z3.object({
327
499
  "From": EthAddressZod,
328
500
  "To XL1 Address": AddressZod,
329
- "XL1 Amount": z.string(),
501
+ "XL1 Amount": z3.string(),
330
502
  "XL1 Amount (Hex)": HexZod,
331
- "XL1 Not after block": z.number().int().nonnegative(),
332
- "XL1 Not before block": z.number().int().nonnegative()
503
+ "XL1 Not after block": z3.number().int().nonnegative(),
504
+ "XL1 Not before block": z3.number().int().nonnegative()
333
505
  });
334
506
  var parseConfirmedClaimValues = /* @__PURE__ */ __name((values) => {
335
507
  return {
@@ -382,7 +554,7 @@ var DerivedAddressWalletTransferSentinel = class extends AbstractSentinel2 {
382
554
  const parsedAddress = toAddress2(parsed.from);
383
555
  if (signatureAddress === parsedAddress) {
384
556
  const tx = await this.submitRewardDistributionTransaction(parsed);
385
- if (isDefined3(tx)) {
557
+ if (isDefined5(tx)) {
386
558
  this._transferSuccessCounter?.add(1);
387
559
  return flattenHydratedTransaction2(tx);
388
560
  }
@@ -392,18 +564,18 @@ var DerivedAddressWalletTransferSentinel = class extends AbstractSentinel2 {
392
564
  }
393
565
  submitRewardDistributionTransaction = /* @__PURE__ */ __name(async (claimValues) => {
394
566
  const { amount, from: address, to, nbf, exp } = claimValues;
395
- const signer = assertEx2(await this.gateway.signer(), () => "Signer is not defined in gateway");
567
+ const signer = assertEx4(await this.gateway.signer(), () => "Signer is not defined in gateway");
396
568
  const signerAddress = await signer.address();
397
569
  const connection = await this.gateway.connection();
398
- const viewer2 = assertEx2(connection.viewer, () => "Viewer is not defined in gateway connection");
570
+ const viewer2 = assertEx4(connection.viewer, () => "Viewer is not defined in gateway connection");
399
571
  const currentBlock = await viewer2.currentBlockNumber();
400
572
  if (currentBlock < nbf || currentBlock > exp) throw new Error("Transaction is not within a valid block range");
401
573
  const escrowAccount = derivedReceiveAddress2(address, scope2);
402
574
  const balance = await viewer2.accountBalance(escrowAccount);
403
575
  const redemptionAmount = hexToBigInt(toHex(amount));
404
- assertEx2(balance === redemptionAmount, () => "Insufficient balance in escrow account");
576
+ assertEx4(balance === redemptionAmount, () => "Insufficient balance in escrow account");
405
577
  const allowance = await viewer2.accountBalance(signerAddress);
406
- assertEx2(allowance > 1000n, () => "Insufficient allowance to transfer from escrow account");
578
+ assertEx4(allowance > 1000n, () => "Insufficient allowance to transfer from escrow account");
407
579
  const transferPayload = createTransferPayload2(escrowAccount, {
408
580
  [to]: hexToBigInt(toHex(amount))
409
581
  });
@@ -419,185 +591,11 @@ var DerivedAddressWalletTransferSentinel = class extends AbstractSentinel2 {
419
591
  nbf,
420
592
  exp
421
593
  });
422
- if (isDefined3(result)) return result[1];
594
+ if (isDefined5(result)) return result[1];
423
595
  }, "submitRewardDistributionTransaction");
424
596
  };
425
597
 
426
- // src/server/routes/rewardRedemption/routeDefinitions/util/getViewerFromConfig.ts
427
- import { isDefined as isDefined4 } from "@xylabs/typeof";
428
- import { HttpRpcTransport, JsonRpcNetworkStakeViewer, JsonRpcXyoViewer, NetworkStakeViewerRpcSchemas, XyoViewerRpcSchemas } from "@xyo-network/xl1-rpc";
429
- var viewer;
430
- var getViewerFromConfig = /* @__PURE__ */ __name((config) => {
431
- if (isDefined4(viewer)) return viewer;
432
- const transport = new HttpRpcTransport(config.rewardRedemptionApi.chainRpcApiUrl, {
433
- ...XyoViewerRpcSchemas,
434
- ...NetworkStakeViewerRpcSchemas
435
- });
436
- const networkStakeViewer = new JsonRpcNetworkStakeViewer(transport);
437
- viewer = new JsonRpcXyoViewer(transport, {
438
- networkStakeViewer
439
- });
440
- return viewer;
441
- }, "getViewerFromConfig");
442
-
443
- // src/server/routes/rewardRedemption/routeDefinitions/util/rewardableSteps.ts
444
- var RewardableSteps2 = [
445
- 3,
446
- 4,
447
- 5,
448
- 6,
449
- 7,
450
- 8
451
- ];
452
-
453
- // src/server/routes/rewardRedemption/routeDefinitions/routes/claimRange.ts
454
- var query = z2.object({
455
- fromBlock: z2.coerce.number().int().nonnegative().optional(),
456
- toBlock: z2.coerce.number().int().nonnegative().optional(),
457
- step: z2.coerce.number().int().nonnegative().min(Math.min(...RewardableSteps2)).max(Math.max(...RewardableSteps2)).optional().default(3)
458
- });
459
- var response = z2.array(PayloadZodLoose);
460
- var validateRequest = requestHandlerValidator({
461
- query,
462
- response
463
- });
464
- var getChainStepRewardsClaimSentinel = /* @__PURE__ */ __name(async (node) => {
465
- const mod = await node.resolve("XYORewardRedemptionNode:ChainStepRewardsClaimSentinel");
466
- const sentinel = asSentinelInstance(mod);
467
- return assertEx3(sentinel, () => "ChainStepRewardsClaimSentinel not found on node");
468
- }, "getChainStepRewardsClaimSentinel");
469
- var postClaimRange = {
470
- method: "post",
471
- path: "/rewards/claimRange",
472
- handlers: validateRequest(async (req, res) => {
473
- const { config, node } = req.app;
474
- const { fromBlock, toBlock, step } = z2.parse(query, req.query);
475
- const viewer2 = getViewerFromConfig(config);
476
- const from = isDefined5(fromBlock) ? fromBlock : 0;
477
- const currentBlock = await viewer2.currentBlockNumber();
478
- const to = isDefined5(toBlock) ? Math.min(toBlock, currentBlock) : currentBlock;
479
- if (to <= from) {
480
- res.status(400);
481
- res.json([]);
482
- return;
483
- }
484
- const range = asXL1BlockRange2([
485
- from,
486
- to
487
- ], true);
488
- const stepIdentities = blockRangeSteps2(range, [
489
- step
490
- ]);
491
- const results = [];
492
- for (const stepIdentity of stepIdentities) {
493
- const mod = await getChainStepRewardsClaimSentinel(node);
494
- const stepIdentityPayload = new PayloadBuilder2({
495
- schema: StepIdentitySchema
496
- }).fields(stepIdentity).build();
497
- const result = await mod.report([
498
- stepIdentityPayload
499
- ]);
500
- results.push(...result);
501
- }
502
- res.status(200);
503
- res.json(results);
504
- })
505
- };
506
-
507
- // src/server/routes/rewardRedemption/routeDefinitions/routes/redeem.ts
508
- import { assertEx as assertEx4 } from "@xylabs/assert";
509
- import { requestHandlerValidator as requestHandlerValidator2 } from "@xylabs/express";
510
- import { PayloadZodLoose as PayloadZodLoose2, PayloadZodStrictOfSchema } from "@xyo-network/payload-model";
511
- import { asSentinelInstance as asSentinelInstance2 } from "@xyo-network/sentinel-model";
512
- import { EIP712DataPayloadFieldsZod, EIP712DataPayloadSchema, EIP712SignaturePayloadFieldsZod, EIP712SignaturePayloadSchema } from "@xyo-network/xl1-protocol-sdk";
513
- import { z as z3 } from "zod";
514
- var body = z3.tuple([
515
- PayloadZodStrictOfSchema(EIP712DataPayloadSchema).extend(EIP712DataPayloadFieldsZod.shape),
516
- PayloadZodStrictOfSchema(EIP712SignaturePayloadSchema).extend(EIP712SignaturePayloadFieldsZod.shape)
517
- ]);
518
- var response2 = z3.array(PayloadZodLoose2);
519
- var validateRequest2 = requestHandlerValidator2({
520
- body,
521
- response: response2
522
- });
523
- var getDerivedAddressWalletTransferSentinel = /* @__PURE__ */ __name(async (node) => {
524
- const mod = await node.resolve("XYORewardRedemptionNode:DerivedAddressWalletTransferSentinel");
525
- const sentinel = asSentinelInstance2(mod);
526
- return assertEx4(sentinel, () => "DerivedAddressWalletTransferSentinel not found on node");
527
- }, "getDerivedAddressWalletTransferSentinel");
528
- var postRedeem = {
529
- method: "post",
530
- path: "/rewards/redeem",
531
- handlers: validateRequest2(async (req, res) => {
532
- const { node } = req.app;
533
- const { body: body2 } = req;
534
- const sentinel = await getDerivedAddressWalletTransferSentinel(node);
535
- const result = await sentinel.report(body2);
536
- res.status(200);
537
- res.json(result);
538
- })
539
- };
540
-
541
- // src/server/routes/rewardRedemption/routeDefinitions/getRouteDefinitions.ts
542
- var getRouteDefinitions = /* @__PURE__ */ __name(() => {
543
- return [
544
- postClaimRange,
545
- postRedeem
546
- ];
547
- }, "getRouteDefinitions");
548
-
549
- // src/server/routes/rewardRedemption/addRewardRoutes.ts
550
- var addRewardRedemptionRoutes = /* @__PURE__ */ __name((app) => {
551
- const routeDefinitions = getRouteDefinitions();
552
- addRouteDefinitions(app, routeDefinitions);
553
- }, "addRewardRedemptionRoutes");
554
-
555
- // src/server/routes/addRoutes.ts
556
- var addRoutes = /* @__PURE__ */ __name((app) => {
557
- addDataLakeRoutes(app);
558
- addRewardRedemptionRoutes(app);
559
- }, "addRoutes");
560
-
561
- // src/server/app.ts
562
- var getApp = /* @__PURE__ */ __name((node, config) => {
563
- addInstrumentation();
564
- const app = express2();
565
- app.set("etag", false);
566
- app.use(cors());
567
- app.use(compression());
568
- app.use(responseProfiler);
569
- app.use(getJsonBodyParser(getJsonBodyParserOptions({
570
- limit: "1mb"
571
- })));
572
- app.use(standardResponses);
573
- disableExpressDefaultPoweredByHeader(app);
574
- app.use(customPoweredByHeader);
575
- disableCaseSensitiveRouting(app);
576
- app.config = config;
577
- app.node = node;
578
- addRoutes(app);
579
- app.use(standardErrors);
580
- return app;
581
- }, "getApp");
582
-
583
- // src/server/server.ts
584
- import { assertEx as assertEx5 } from "@xylabs/assert";
585
- import { isDefined as isDefined7, isString } from "@xylabs/typeof";
586
- import { boot } from "@xyo-network/bios";
587
- import { HDWallet as HDWallet2 } from "@xyo-network/wallet";
588
-
589
598
  // src/manifest/getLocator.ts
590
- import { isDefined as isDefined6 } from "@xylabs/typeof";
591
- import { MemoryArchivist } from "@xyo-network/archivist-memory";
592
- import { MongoDBArchivistV2 } from "@xyo-network/archivist-mongodb";
593
- import { ViewArchivist } from "@xyo-network/archivist-view";
594
- import { initTelemetry } from "@xyo-network/chain-telemetry";
595
- import { AbstractModule, LoggerModuleStatusReporter } from "@xyo-network/module-abstract";
596
- import { ModuleFactoryLocator } from "@xyo-network/module-factory-locator";
597
- import { MemorySentinel } from "@xyo-network/sentinel-memory";
598
- import { HDWallet } from "@xyo-network/wallet";
599
- import { hasMongoConfig, SimpleXyoGateway, SimpleXyoSigner } from "@xyo-network/xl1-protocol-sdk";
600
- import { HttpRpcXyoConnection } from "@xyo-network/xl1-rpc";
601
599
  var getLocator = /* @__PURE__ */ __name(async (context) => {
602
600
  const { config, logger } = context;
603
601
  const { otlpEndpoint } = config.telemetry?.otel ?? {};
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/server/app.ts","../../src/server/instrumentation.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/modules/ChainStepRewardsClaimSentinel/ChainStepRewardsClaimSentinel.ts","../../src/modules/ChainStepRewardsClaimSentinel/StepIdentityPayload.ts","../../src/modules/DerivedAddressWalletTransferSentinel/DerivedAddressWalletTransferSentinel.ts","../../src/server/routes/rewardRedemption/routeDefinitions/util/getViewerFromConfig.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/manifest/getLocator.ts","../../src/manifest/getNode.ts","../../src/manifest/node.json","../../src/manifest/nodeManifest.ts","../../src/manifest/private/index.ts","../../src/manifest/public/index.ts"],"sourcesContent":["import {\n customPoweredByHeader, disableCaseSensitiveRouting, disableExpressDefaultPoweredByHeader, getJsonBodyParser, getJsonBodyParserOptions, responseProfiler,\n standardErrors, standardResponses,\n} from '@xylabs/express'\nimport type { NodeInstance } from '@xyo-network/node-model'\nimport type { Config } from '@xyo-network/xl1-protocol-sdk'\nimport compression from 'compression'\nimport cors from 'cors'\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: Config): Express => {\n addInstrumentation()\n const app = express()\n app.set('etag', false)\n app.use(cors())\n app.use(compression())\n app.use(responseProfiler)\n app.use(getJsonBodyParser(getJsonBodyParserOptions({ limit: '1mb' })))\n app.use(standardResponses)\n disableExpressDefaultPoweredByHeader(app)\n app.use(customPoweredByHeader)\n disableCaseSensitiveRouting(app)\n app.config = config\n app.node = node\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 { setRawResponseFormat } from '@xylabs/express'\nimport { asHash } from '@xylabs/hex'\nimport { isDefined } from '@xylabs/typeof'\nimport type {\n ArchivistInstance,\n ArchivistNextOptions, NextOptions,\n} from '@xyo-network/archivist-model'\nimport { asArchivistInstance } from '@xyo-network/archivist-model'\nimport type { ModuleIdentifier } from '@xyo-network/module-model'\nimport type { NodeInstance } from '@xyo-network/node-model'\nimport { PayloadBuilder } from '@xyo-network/payload-builder'\nimport type { Payload } from '@xyo-network/payload-model'\nimport { isAnyPayload, isSequence } from '@xyo-network/payload-model'\nimport type { Router } from 'express'\nimport express from 'express'\nimport type { Request } from 'express-serve-static-core'\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\ntype 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 { assertEx } from '@xylabs/assert'\nimport type { RouteDefinition } from '@xylabs/express'\nimport { requestHandlerValidator } from '@xylabs/express'\nimport { isDefined } from '@xylabs/typeof'\nimport { blockRangeSteps } from '@xyo-network/chain-protocol'\nimport type { NodeInstance } from '@xyo-network/node-model'\nimport { PayloadBuilder } from '@xyo-network/payload-builder'\nimport type { Payload } from '@xyo-network/payload-model'\nimport { PayloadZodLoose } from '@xyo-network/payload-model'\nimport type { SentinelInstance } from '@xyo-network/sentinel-model'\nimport { asSentinelInstance } from '@xyo-network/sentinel-model'\nimport type { StepIdentityPayload } from '@xyo-network/xl1-protocol'\nimport { asXL1BlockRange } from '@xyo-network/xl1-protocol'\nimport { z } from 'zod'\n\nimport { StepIdentitySchema } from '../../../../../modules/index.ts'\nimport { getViewerFromConfig, 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 { config, node } = req.app\n const {\n fromBlock, toBlock, step,\n } = z.parse(query, req.query)\n const viewer = getViewerFromConfig(config)\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], true)\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","import type { Attributes, Counter } from '@opentelemetry/api'\nimport { assertEx } from '@xylabs/assert'\nimport { delay } from '@xylabs/delay'\nimport type { Address } from '@xylabs/hex'\nimport { toAddress } from '@xylabs/hex'\nimport { isDefined, isUndefined } from '@xylabs/typeof'\nimport { blockRangeSteps, createTransferPayload } from '@xyo-network/chain-protocol'\nimport type { AnyConfigSchema } from '@xyo-network/module-model'\nimport type { Payload } from '@xyo-network/payload-model'\nimport { AbstractSentinel } from '@xyo-network/sentinel-abstract'\nimport type {\n SentinelConfig, SentinelInstance, SentinelModuleEventData, SentinelParams,\n} from '@xyo-network/sentinel-model'\nimport type {\n AttoXL1, SignedHydratedTransaction, StepIdentity,\n} from '@xyo-network/xl1-protocol'\nimport {\n asXL1BlockNumber, asXL1BlockRange, XYO_STEP_REWARD_ADDRESS,\n} from '@xyo-network/xl1-protocol'\nimport type {\n XyoConnection, XyoGateway, XyoGatewayRunner, XyoViewer,\n} from '@xyo-network/xl1-protocol-sdk'\nimport {\n completedStepRewardAddress, derivedReceiveAddress, flattenHydratedTransaction, flattenHydratedTransactions,\n SimpleXyoGatewayRunner,\n} from '@xyo-network/xl1-protocol-sdk'\nimport { Mutex } from 'async-mutex'\n\nimport { isStepIdentityPayload } from './StepIdentityPayload.ts'\n\nexport const ChainStepRewardsClaimSentinelConfigSchema = 'network.xyo.sentinel.chain.step.rewards.claim.config'\nexport type ChainStepRewardsClaimSentinelConfigSchema = typeof ChainStepRewardsClaimSentinelConfigSchema\n\n/**\n * The configuration for the chain step rewards claim sentinel\n */\nexport type ChainStepRewardsClaimSentinelConfig = SentinelConfig<{\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: XyoGateway\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 RewardableSteps = [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: XyoGateway | 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 new SimpleXyoGatewayRunner(assertEx(this._gateway, () => 'Gateway is not defined'))\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(): Promise<void> {\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(await 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, true)\n return { step, block }\n }).filter(stepIdentity => 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 RewardableSteps) {\n // Fetch unclaimed rewards and process claims\n const from = 0\n const to = await this.viewer.currentBlockNumber()\n const range = asXL1BlockRange([asXL1BlockNumber(from), asXL1BlockNumber(to)], true)\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.accountBalance(stepRewardAddress)\n if (balance > 0n) {\n this.logger?.info(`Found balance of ${balance} to claim for step ${stepIdentity.step} at block ${stepIdentity.block}`)\n this._claimAttemptsCounter?.add(1, claimCounterAttributes)\n // For stakers\n const rewardsByStaker = await this.viewer.networkStakeStepRewardPoolRewards(stepIdentity)\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: currentBlockNumber + 10 })\n if (isDefined(result)) return result[1]\n }\n}\n","import { AsObjectFactory } from '@xylabs/object'\nimport { isPayloadOfZodType } from '@xyo-network/payload-model'\nimport type { StepIdentityPayload } from '@xyo-network/xl1-protocol'\nimport { StepIdentityZod } from '@xyo-network/xl1-protocol'\n\nexport const StepIdentitySchema = 'network.xyo.chain.step.identity' as const\nexport type StepIdentitySchema = typeof StepIdentitySchema\n\nexport const isStepIdentityPayload = isPayloadOfZodType<StepIdentityPayload>(StepIdentityZod, StepIdentitySchema)\n\nexport const asStepIdentityPayload = AsObjectFactory.create(isStepIdentityPayload)\n","import type { Attributes, Counter } from '@opentelemetry/api'\nimport { assertEx } from '@xylabs/assert'\nimport type { Address } from '@xylabs/hex'\nimport {\n AddressZod, EthAddressZod, hexToBigInt, HexZod, toAddress, toHex,\n} from '@xylabs/hex'\nimport { isDefined, isUndefined } from '@xylabs/typeof'\nimport { createTransferPayload } from '@xyo-network/chain-protocol'\nimport type { AnyConfigSchema } from '@xyo-network/module-model'\nimport type { Payload } from '@xyo-network/payload-model'\nimport { AbstractSentinel } from '@xyo-network/sentinel-abstract'\nimport type {\n SentinelConfig, SentinelInstance, SentinelModuleEventData, SentinelParams,\n} from '@xyo-network/sentinel-model'\nimport type { SignedHydratedTransaction } from '@xyo-network/xl1-protocol'\nimport type { XyoGateway, XyoGatewayRunner } from '@xyo-network/xl1-protocol-sdk'\nimport {\n derivedReceiveAddress, flattenHydratedTransaction, isEIP712DataPayload, isEIP712SignaturePayload, SimpleXyoGatewayRunner, verifyEIP712Message,\n} from '@xyo-network/xl1-protocol-sdk'\nimport z from 'zod'\n\nexport const DerivedAddressWalletTransferSentinelConfigSchema = 'network.xyo.sentinel.chain.derived.address.wallet.transfer.config'\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: XyoGateway\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: number\n from: Address\n nbf: number\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': z.number().int().nonnegative(),\n 'XL1 Not before block': z.number().int().nonnegative(),\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 new SimpleXyoGatewayRunner(this.params.gateway)\n }\n\n override async createHandler(): Promise<void> {\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(isEIP712DataPayload)\n const signature = payloads?.find(isEIP712SignaturePayload)\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(await this.gateway.signer(), () => 'Signer is not defined in gateway')\n const signerAddress = await signer.address()\n const connection = await 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.accountBalance(escrowAccount)\n // NOTE: 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.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 { isDefined } from '@xylabs/typeof'\nimport type { Config } from '@xyo-network/xl1-protocol-sdk'\nimport {\n HttpRpcTransport, JsonRpcNetworkStakeViewer, JsonRpcXyoViewer, NetworkStakeViewerRpcSchemas, XyoViewerRpcSchemas,\n} from '@xyo-network/xl1-rpc'\n\nlet viewer: JsonRpcXyoViewer | undefined\n\nexport const getViewerFromConfig = (config: Config): JsonRpcXyoViewer => {\n if (isDefined(viewer)) return viewer\n const transport = new HttpRpcTransport(config.rewardRedemptionApi.chainRpcApiUrl, { ...XyoViewerRpcSchemas, ...NetworkStakeViewerRpcSchemas })\n const networkStakeViewer = new JsonRpcNetworkStakeViewer(transport)\n viewer = new JsonRpcXyoViewer(transport, { networkStakeViewer })\n return viewer\n}\n","export const RewardableSteps = [3, 4, 5, 6, 7, 8]\n","import { assertEx } from '@xylabs/assert'\nimport type { RouteDefinition } from '@xylabs/express'\nimport { requestHandlerValidator } from '@xylabs/express'\nimport type { NodeInstance } from '@xyo-network/node-model'\nimport { PayloadZodLoose, PayloadZodStrictOfSchema } from '@xyo-network/payload-model'\nimport type { SentinelInstance } from '@xyo-network/sentinel-model'\nimport { asSentinelInstance } from '@xyo-network/sentinel-model'\nimport {\n EIP712DataPayloadFieldsZod, EIP712DataPayloadSchema, EIP712SignaturePayloadFieldsZod,\n EIP712SignaturePayloadSchema,\n} from '@xyo-network/xl1-protocol-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 { addDataLakeRoutes } from './dataLake/index.ts'\nimport { addRewardRedemptionRoutes } from './rewardRedemption/index.ts'\n\nexport const addRoutes = (app: Express) => {\n addDataLakeRoutes(app)\n addRewardRedemptionRoutes(app)\n}\n","import { assertEx } from '@xylabs/assert'\nimport type { Logger } from '@xylabs/logger'\nimport { isDefined, isString } from '@xylabs/typeof'\nimport { boot } from '@xyo-network/bios'\nimport type { BiosExternalInterface } from '@xyo-network/bios-model'\nimport type { NodeInstance } from '@xyo-network/node-model'\nimport { HDWallet } from '@xyo-network/wallet'\nimport { type Config } from '@xyo-network/xl1-protocol-sdk'\n\nimport { getNode } from '../manifest/index.ts'\nimport { getApp } from './app.ts'\n\nconst hostname = '::'\n// const hostname = '0.0.0.0'\n\n// TODO: Make nodejs version of bios support round tripping mnemonic between boots\nconst getSeedPhrase = async (bios: BiosExternalInterface, config: Config, logger?: Logger): Promise<string> => {\n const storedSeedPhrase = await bios.seedPhraseStore.get('os')\n logger?.debug(`[Bridge] Stored mnemonic: ${storedSeedPhrase}`)\n const { mnemonic } = config.api\n if (isString(storedSeedPhrase) && isString(mnemonic)) {\n logger?.warn('[Bridge] Stored mnemonic does not match supplied. Updating stored mnemonic to supplied.')\n await bios.seedPhraseStore.set('os', mnemonic)\n } else {\n let seedPhrase: string\n if (isString(mnemonic)) {\n seedPhrase = mnemonic\n } else {\n seedPhrase = HDWallet.generateMnemonic()\n logger?.log('[Bridge] No mnemonic provided, using random mnemonic. This is not recommended for production use.')\n logger?.log(`[Bridge] Mnemonic: ${seedPhrase}`)\n }\n await bios.seedPhraseStore.set('os', seedPhrase)\n }\n return assertEx(await bios.seedPhraseStore.get('os'), () => 'Unable to acquire mnemonic from bios')\n}\n\ninterface GetServerContext {\n config: Config\n logger?: Logger\n node?: NodeInstance\n}\n\nexport const getServer = async (context: GetServerContext) => {\n const { logger, config } = context\n const { port, mnemonic } = config.rewardRedemptionApi\n const bios = await boot()\n const seedPhrase = isDefined(mnemonic) ? mnemonic : await getSeedPhrase(bios, config, logger)\n const wallet = await HDWallet.fromPhrase(seedPhrase)\n const nodeContext = {\n wallet, logger, config,\n }\n const node = context.node ?? await getNode(nodeContext)\n const app = getApp(node, config)\n const server = app.listen(port, hostname, () => logger?.log(`[Bridge] Server listening at http://${hostname}:${port}`))\n server.setTimeout(120_000)\n return server\n}\n","import type { Logger } from '@xylabs/logger'\nimport { type BaseMongoSdkPrivateConfig } from '@xylabs/mongo'\nimport { isDefined } from '@xylabs/typeof'\nimport { MemoryArchivist } from '@xyo-network/archivist-memory'\nimport { MongoDBArchivistV2 } from '@xyo-network/archivist-mongodb'\nimport { ViewArchivist } from '@xyo-network/archivist-view'\nimport { initTelemetry } from '@xyo-network/chain-telemetry'\nimport { AbstractModule, LoggerModuleStatusReporter } from '@xyo-network/module-abstract'\nimport { ModuleFactoryLocator } from '@xyo-network/module-factory-locator'\nimport type { MongoDBModuleParamsV2 } from '@xyo-network/module-model-mongodb'\nimport { MemorySentinel } from '@xyo-network/sentinel-memory'\nimport { HDWallet } from '@xyo-network/wallet'\nimport type { Config, XyoGateway } from '@xyo-network/xl1-protocol-sdk'\nimport {\n hasMongoConfig, SimpleXyoGateway, SimpleXyoSigner,\n} from '@xyo-network/xl1-protocol-sdk'\nimport { HttpRpcXyoConnection } from '@xyo-network/xl1-rpc'\n\nimport type { ChainStepRewardsClaimSentinelParams, DerivedAddressWalletTransferSentinelParams } from '../modules/index.ts'\nimport { ChainStepRewardsClaimSentinel, DerivedAddressWalletTransferSentinel } from '../modules/index.ts'\n\nexport interface GetLocatorContext {\n config: Config\n logger?: Logger\n}\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: GetLocatorContext) => {\n const { config, logger } = context\n const { otlpEndpoint } = config.telemetry?.otel ?? {}\n const { traceProvider, meterProvider } = await initTelemetry({\n attributes: {\n serviceName: 'xl1-rewards',\n serviceVersion: '1.0.0',\n },\n otlpEndpoint,\n metricsConfig: {\n endpoint: '/metrics',\n port: 9465,\n },\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\nconst getGateway = async (\n config: Config,\n): Promise<XyoGateway> => {\n const { mnemonic, chainRpcApiUrl: endpoint } = config.rewardRedemptionApi\n const walletPromise = isDefined(mnemonic) ? HDWallet.fromPhrase(mnemonic) : HDWallet.random()\n const account = await walletPromise\n const signer = new SimpleXyoSigner(account)\n const connection = new HttpRpcXyoConnection({ endpoint })\n const gateway = new SimpleXyoGateway(signer, connection)\n return gateway\n}\n","import type { Logger } from '@xylabs/logger'\nimport { ManifestWrapper } from '@xyo-network/manifest-wrapper'\nimport type { WalletInstance } from '@xyo-network/wallet-model'\nimport type { Config } from '@xyo-network/xl1-protocol-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: GetNodeContext) => {\n const { wallet } = context\n const locator = await getLocator(context)\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/manifest-model'\n\nimport node from './node.json' with { type: 'json' }\n\n/**\n * Root Node Manifest\n */\nexport const NodeManifest = node as PackageManifestPayload\n","/**\n * Private Child Manifests\n */\nexport const PrivateChildManifests = []\n","import type { ModuleManifest, PackageManifestPayload } from '@xyo-network/manifest-model'\n\n/**\n * Public Child Manifests\n */\nexport const PublicChildManifests: ModuleManifest[] = []\n"],"mappings":"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","names":["customPoweredByHeader","disableCaseSensitiveRouting","disableExpressDefaultPoweredByHeader","getJsonBodyParser","getJsonBodyParserOptions","responseProfiler","standardErrors","standardResponses","compression","cors","express","registerInstrumentations","ExpressInstrumentation","HttpInstrumentation","addInstrumentation","instrumentations","HttpInstrumentation","ExpressInstrumentation","registerInstrumentations","setRawResponseFormat","asHash","isDefined","asArchivistInstance","PayloadBuilder","isAnyPayload","isSequence","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","assertEx","requestHandlerValidator","isDefined","blockRangeSteps","PayloadBuilder","PayloadZodLoose","asSentinelInstance","asXL1BlockRange","z","assertEx","delay","toAddress","isDefined","isUndefined","blockRangeSteps","createTransferPayload","AbstractSentinel","asXL1BlockNumber","asXL1BlockRange","XYO_STEP_REWARD_ADDRESS","completedStepRewardAddress","derivedReceiveAddress","flattenHydratedTransaction","flattenHydratedTransactions","SimpleXyoGatewayRunner","Mutex","AsObjectFactory","isPayloadOfZodType","StepIdentityZod","StepIdentitySchema","isStepIdentityPayload","asStepIdentityPayload","create","ChainStepRewardsClaimSentinelConfigSchema","defaultStepClaimIntervalMs","scope","RewardableSteps","ChainStepRewardsClaimSentinel","AbstractSentinel","configSchemas","defaultConfigSchema","_claimAttemptsCounter","_claimCheckCounter","_claimErrorCounter","_claimSuccessCounter","_connection","_gateway","_reportMutex","Mutex","_viewer","connection","assertEx","gateway","SimpleXyoGatewayRunner","stepClaimIntervalMs","isDefined","config","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","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","accountBalance","networkStakeStepRewardPoolRewards","addressDistributions","keys","tx","submitRewardDistributionTransaction","error","transferPayload","createTransferPayload","context","addPayloadsToChain","nbf","exp","assertEx","AddressZod","EthAddressZod","hexToBigInt","HexZod","toAddress","toHex","isDefined","isUndefined","createTransferPayload","AbstractSentinel","derivedReceiveAddress","flattenHydratedTransaction","isEIP712DataPayload","isEIP712SignaturePayload","SimpleXyoGatewayRunner","verifyEIP712Message","z","DerivedAddressWalletTransferSentinelConfigSchema","scope","ConfirmedClaimValuesZod","z","object","EthAddressZod","AddressZod","string","HexZod","number","int","nonnegative","parseConfirmedClaimValues","values","amount","exp","from","toAddress","From","nbf","to","DerivedAddressWalletTransferSentinel","AbstractSentinel","configSchemas","defaultConfigSchema","_transferAttemptsCounter","_transferErrorCounter","_transferSuccessCounter","gateway","SimpleXyoGatewayRunner","params","createHandler","meter","createCounter","description","reportHandler","payloads","data","find","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","accountBalance","redemptionAmount","hexToBigInt","toHex","allowance","transferPayload","createTransferPayload","context","chain","chainId","result","addPayloadsToChain","isDefined","HttpRpcTransport","JsonRpcNetworkStakeViewer","JsonRpcXyoViewer","NetworkStakeViewerRpcSchemas","XyoViewerRpcSchemas","viewer","getViewerFromConfig","config","isDefined","transport","HttpRpcTransport","rewardRedemptionApi","chainRpcApiUrl","XyoViewerRpcSchemas","NetworkStakeViewerRpcSchemas","networkStakeViewer","JsonRpcNetworkStakeViewer","JsonRpcXyoViewer","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","config","app","parse","viewer","getViewerFromConfig","from","isDefined","currentBlock","currentBlockNumber","to","status","json","range","asXL1BlockRange","stepIdentities","blockRangeSteps","results","stepIdentity","stepIdentityPayload","PayloadBuilder","schema","StepIdentitySchema","fields","build","result","report","push","assertEx","requestHandlerValidator","PayloadZodLoose","PayloadZodStrictOfSchema","asSentinelInstance","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","addDataLakeRoutes","addRewardRedemptionRoutes","getApp","node","config","addInstrumentation","app","express","set","use","cors","compression","responseProfiler","getJsonBodyParser","getJsonBodyParserOptions","limit","standardResponses","disableExpressDefaultPoweredByHeader","customPoweredByHeader","disableCaseSensitiveRouting","addRoutes","standardErrors","assertEx","isDefined","isString","boot","HDWallet","isDefined","MemoryArchivist","MongoDBArchivistV2","ViewArchivist","initTelemetry","AbstractModule","LoggerModuleStatusReporter","ModuleFactoryLocator","MemorySentinel","HDWallet","hasMongoConfig","SimpleXyoGateway","SimpleXyoSigner","HttpRpcXyoConnection","getLocator","context","config","logger","otlpEndpoint","telemetry","otel","traceProvider","meterProvider","initTelemetry","attributes","serviceName","serviceVersion","metricsConfig","endpoint","port","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","gateway","getGateway","chainStepRewardsClaimSentinelParams","ChainStepRewardsClaimSentinel","derivedAddressWalletTransferSentinelParams","DerivedAddressWalletTransferSentinel","mnemonic","chainRpcApiUrl","rewardRedemptionApi","walletPromise","HDWallet","fromPhrase","random","account","signer","SimpleXyoSigner","connection","HttpRpcXyoConnection","SimpleXyoGateway","ManifestWrapper","NodeManifest","node","PrivateChildManifests","PublicChildManifests","getNode","context","wallet","locator","getLocator","wrapper","ManifestWrapper","NodeManifest","PublicChildManifests","PrivateChildManifests","node","childNodes","loadNodes","length","Promise","all","map","childNode","register","attach","address","hostname","getSeedPhrase","bios","config","logger","storedSeedPhrase","seedPhraseStore","get","debug","mnemonic","api","isString","warn","set","seedPhrase","HDWallet","generateMnemonic","log","assertEx","getServer","context","port","rewardRedemptionApi","boot","isDefined","wallet","fromPhrase","nodeContext","node","getNode","app","getApp","server","listen","setTimeout"]}
1
+ {"version":3,"sources":["../../src/server/app.ts","../../src/server/instrumentation.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/getViewerFromConfig.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/manifest/getLocator.ts","../../src/modules/ChainStepRewardsClaimSentinel/ChainStepRewardsClaimSentinel.ts","../../src/modules/DerivedAddressWalletTransferSentinel/DerivedAddressWalletTransferSentinel.ts","../../src/manifest/getNode.ts","../../src/manifest/node.json","../../src/manifest/nodeManifest.ts","../../src/manifest/private/index.ts","../../src/manifest/public/index.ts"],"sourcesContent":["import {\n customPoweredByHeader, disableCaseSensitiveRouting, disableExpressDefaultPoweredByHeader, getJsonBodyParser, getJsonBodyParserOptions, responseProfiler,\n standardErrors, standardResponses,\n} from '@xylabs/express'\nimport type { NodeInstance } from '@xyo-network/node-model'\nimport type { Config } from '@xyo-network/xl1-protocol-sdk'\nimport compression from 'compression'\nimport cors from 'cors'\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: Config): Express => {\n addInstrumentation()\n const app = express()\n app.set('etag', false)\n app.use(cors())\n app.use(compression())\n app.use(responseProfiler)\n app.use(getJsonBodyParser(getJsonBodyParserOptions({ limit: '1mb' })))\n app.use(standardResponses)\n disableExpressDefaultPoweredByHeader(app)\n app.use(customPoweredByHeader)\n disableCaseSensitiveRouting(app)\n app.config = config\n app.node = node\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 { setRawResponseFormat } from '@xylabs/express'\nimport { asHash } from '@xylabs/hex'\nimport { isDefined } from '@xylabs/typeof'\nimport type {\n ArchivistInstance,\n ArchivistNextOptions, NextOptions,\n} from '@xyo-network/archivist-model'\nimport { asArchivistInstance } from '@xyo-network/archivist-model'\nimport type { ModuleIdentifier } from '@xyo-network/module-model'\nimport type { NodeInstance } from '@xyo-network/node-model'\nimport { PayloadBuilder } from '@xyo-network/payload-builder'\nimport type { Payload } from '@xyo-network/payload-model'\nimport { isAnyPayload, isSequence } from '@xyo-network/payload-model'\nimport type { Router } from 'express'\nimport express from 'express'\nimport type { Request } from 'express-serve-static-core'\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\ntype 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 { assertEx } from '@xylabs/assert'\nimport type { RouteDefinition } from '@xylabs/express'\nimport { requestHandlerValidator } from '@xylabs/express'\nimport { isDefined } from '@xylabs/typeof'\nimport { blockRangeSteps } from '@xyo-network/chain-protocol'\nimport type { NodeInstance } from '@xyo-network/node-model'\nimport { PayloadBuilder } from '@xyo-network/payload-builder'\nimport type { Payload } from '@xyo-network/payload-model'\nimport { PayloadZodLoose } from '@xyo-network/payload-model'\nimport type { SentinelInstance } from '@xyo-network/sentinel-model'\nimport { asSentinelInstance } from '@xyo-network/sentinel-model'\nimport type { StepIdentityPayload } from '@xyo-network/xl1-protocol'\nimport { asXL1BlockRange, StepIdentitySchema } from '@xyo-network/xl1-protocol'\nimport { z } from 'zod'\n\nimport { getViewerFromConfig, 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 { config, node } = req.app\n const {\n fromBlock, toBlock, step,\n } = z.parse(query, req.query)\n const viewer = getViewerFromConfig(config)\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","import { isDefined } from '@xylabs/typeof'\nimport type { Config } from '@xyo-network/xl1-protocol-sdk'\nimport {\n HttpRpcTransport, JsonRpcNetworkStakeViewer, JsonRpcXyoViewer, NetworkStakeViewerRpcSchemas, XyoViewerRpcSchemas,\n} from '@xyo-network/xl1-rpc'\n\nlet viewer: JsonRpcXyoViewer | undefined\n\nexport const getViewerFromConfig = (config: Config): JsonRpcXyoViewer => {\n if (isDefined(viewer)) return viewer\n const transport = new HttpRpcTransport(config.rewardRedemptionApi.chainRpcApiUrl, { ...XyoViewerRpcSchemas, ...NetworkStakeViewerRpcSchemas })\n const networkStakeViewer = new JsonRpcNetworkStakeViewer(transport)\n viewer = new JsonRpcXyoViewer(transport, { networkStakeViewer })\n return viewer\n}\n","export const RewardableSteps = [3, 4, 5, 6, 7, 8]\n","import { assertEx } from '@xylabs/assert'\nimport type { RouteDefinition } from '@xylabs/express'\nimport { requestHandlerValidator } from '@xylabs/express'\nimport type { NodeInstance } from '@xyo-network/node-model'\nimport { PayloadZodLoose, PayloadZodStrictOfSchema } from '@xyo-network/payload-model'\nimport type { SentinelInstance } from '@xyo-network/sentinel-model'\nimport { asSentinelInstance } from '@xyo-network/sentinel-model'\nimport {\n EIP712DataPayloadFieldsZod, EIP712DataPayloadSchema, EIP712SignaturePayloadFieldsZod,\n EIP712SignaturePayloadSchema,\n} from '@xyo-network/xl1-protocol-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 { addDataLakeRoutes } from './dataLake/index.ts'\nimport { addRewardRedemptionRoutes } from './rewardRedemption/index.ts'\n\nexport const addRoutes = (app: Express) => {\n addDataLakeRoutes(app)\n addRewardRedemptionRoutes(app)\n}\n","import { assertEx } from '@xylabs/assert'\nimport type { Logger } from '@xylabs/logger'\nimport { isDefined, isString } from '@xylabs/typeof'\nimport { boot } from '@xyo-network/bios'\nimport type { BiosExternalInterface } from '@xyo-network/bios-model'\nimport type { NodeInstance } from '@xyo-network/node-model'\nimport { HDWallet } from '@xyo-network/wallet'\nimport { type Config } from '@xyo-network/xl1-protocol-sdk'\n\nimport { getNode } from '../manifest/index.ts'\nimport { getApp } from './app.ts'\n\nconst hostname = '::'\n// const hostname = '0.0.0.0'\n\n// TODO: Make nodejs version of bios support round tripping mnemonic between boots\nconst getSeedPhrase = async (bios: BiosExternalInterface, config: Config, logger?: Logger): Promise<string> => {\n const storedSeedPhrase = await bios.seedPhraseStore.get('os')\n logger?.debug(`[Bridge] Stored mnemonic: ${storedSeedPhrase}`)\n const { mnemonic } = config.api\n if (isString(storedSeedPhrase) && isString(mnemonic)) {\n logger?.warn('[Bridge] Stored mnemonic does not match supplied. Updating stored mnemonic to supplied.')\n await bios.seedPhraseStore.set('os', mnemonic)\n } else {\n let seedPhrase: string\n if (isString(mnemonic)) {\n seedPhrase = mnemonic\n } else {\n seedPhrase = HDWallet.generateMnemonic()\n logger?.log('[Bridge] No mnemonic provided, using random mnemonic. This is not recommended for production use.')\n logger?.log(`[Bridge] Mnemonic: ${seedPhrase}`)\n }\n await bios.seedPhraseStore.set('os', seedPhrase)\n }\n return assertEx(await bios.seedPhraseStore.get('os'), () => 'Unable to acquire mnemonic from bios')\n}\n\ninterface GetServerContext {\n config: Config\n logger?: Logger\n node?: NodeInstance\n}\n\nexport const getServer = async (context: GetServerContext) => {\n const { logger, config } = context\n const { port, mnemonic } = config.rewardRedemptionApi\n const bios = await boot()\n const seedPhrase = isDefined(mnemonic) ? mnemonic : await getSeedPhrase(bios, config, logger)\n const wallet = await HDWallet.fromPhrase(seedPhrase)\n const nodeContext = {\n wallet, logger, config,\n }\n const node = context.node ?? await getNode(nodeContext)\n const app = getApp(node, config)\n const server = app.listen(port, hostname, () => logger?.log(`[Bridge] Server listening at http://${hostname}:${port}`))\n server.setTimeout(120_000)\n return server\n}\n","import type { Logger } from '@xylabs/logger'\nimport { type BaseMongoSdkPrivateConfig } from '@xylabs/mongo'\nimport { isDefined } from '@xylabs/typeof'\nimport { MemoryArchivist } from '@xyo-network/archivist-memory'\nimport { MongoDBArchivistV2 } from '@xyo-network/archivist-mongodb'\nimport { ViewArchivist } from '@xyo-network/archivist-view'\nimport { initTelemetry } from '@xyo-network/chain-telemetry'\nimport { AbstractModule, LoggerModuleStatusReporter } from '@xyo-network/module-abstract'\nimport { ModuleFactoryLocator } from '@xyo-network/module-factory-locator'\nimport type { MongoDBModuleParamsV2 } from '@xyo-network/module-model-mongodb'\nimport { MemorySentinel } from '@xyo-network/sentinel-memory'\nimport { HDWallet } from '@xyo-network/wallet'\nimport type { Config, XyoGateway } from '@xyo-network/xl1-protocol-sdk'\nimport {\n hasMongoConfig, SimpleXyoGateway, SimpleXyoSigner,\n} from '@xyo-network/xl1-protocol-sdk'\nimport { HttpRpcXyoConnection } from '@xyo-network/xl1-rpc'\n\nimport type { ChainStepRewardsClaimSentinelParams, DerivedAddressWalletTransferSentinelParams } from '../modules/index.ts'\nimport { ChainStepRewardsClaimSentinel, DerivedAddressWalletTransferSentinel } from '../modules/index.ts'\n\nexport interface GetLocatorContext {\n config: Config\n logger?: Logger\n}\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: GetLocatorContext) => {\n const { config, logger } = context\n const { otlpEndpoint } = config.telemetry?.otel ?? {}\n const { traceProvider, meterProvider } = await initTelemetry({\n attributes: {\n serviceName: 'xl1-rewards',\n serviceVersion: '1.0.0',\n },\n otlpEndpoint,\n metricsConfig: {\n endpoint: '/metrics',\n port: 9465,\n },\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\nconst getGateway = async (\n config: Config,\n): Promise<XyoGateway> => {\n const { mnemonic, chainRpcApiUrl: endpoint } = config.rewardRedemptionApi\n const walletPromise = isDefined(mnemonic) ? HDWallet.fromPhrase(mnemonic) : HDWallet.random()\n const account = await walletPromise\n const signer = new SimpleXyoSigner(account)\n const connection = new HttpRpcXyoConnection({ endpoint })\n const gateway = new SimpleXyoGateway(signer, connection)\n return gateway\n}\n","import type { Attributes, Counter } from '@opentelemetry/api'\nimport { assertEx } from '@xylabs/assert'\nimport { delay } from '@xylabs/delay'\nimport type { Address } from '@xylabs/hex'\nimport { toAddress } from '@xylabs/hex'\nimport { isDefined, isUndefined } from '@xylabs/typeof'\nimport { blockRangeSteps, createTransferPayload } from '@xyo-network/chain-protocol'\nimport type { AnyConfigSchema } from '@xyo-network/module-model'\nimport type { Payload } from '@xyo-network/payload-model'\nimport { AbstractSentinel } from '@xyo-network/sentinel-abstract'\nimport type {\n SentinelConfig, SentinelInstance, SentinelModuleEventData, SentinelParams,\n} from '@xyo-network/sentinel-model'\nimport type {\n AttoXL1, SignedHydratedTransaction, StepIdentity,\n} from '@xyo-network/xl1-protocol'\nimport {\n asXL1BlockNumber, asXL1BlockRange, isStepIdentityPayload,\n XYO_STEP_REWARD_ADDRESS,\n} from '@xyo-network/xl1-protocol'\nimport type {\n XyoConnection, XyoGateway, XyoGatewayRunner, XyoViewer,\n} from '@xyo-network/xl1-protocol-sdk'\nimport {\n completedStepRewardAddress, derivedReceiveAddress, flattenHydratedTransaction, flattenHydratedTransactions,\n SimpleXyoGatewayRunner,\n} from '@xyo-network/xl1-protocol-sdk'\nimport { Mutex } from 'async-mutex'\n\nexport const ChainStepRewardsClaimSentinelConfigSchema = 'network.xyo.sentinel.chain.step.rewards.claim.config'\nexport type ChainStepRewardsClaimSentinelConfigSchema = typeof ChainStepRewardsClaimSentinelConfigSchema\n\n/**\n * The configuration for the chain step rewards claim sentinel\n */\nexport type ChainStepRewardsClaimSentinelConfig = SentinelConfig<{\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: XyoGateway\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 RewardableSteps = [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: XyoGateway | 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 new SimpleXyoGatewayRunner(assertEx(this._gateway, () => 'Gateway is not defined'))\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(): Promise<void> {\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(await 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 => 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 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.accountBalance(stepRewardAddress)\n if (balance > 0n) {\n this.logger?.info(`Found balance of ${balance} to claim for step ${stepIdentity.step} at block ${stepIdentity.block}`)\n this._claimAttemptsCounter?.add(1, claimCounterAttributes)\n // For stakers\n const rewardsByStaker = await this.viewer.networkStakeStepRewardPoolRewards(stepIdentity)\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: currentBlockNumber + 10 })\n if (isDefined(result)) return result[1]\n }\n}\n","import type { Attributes, Counter } from '@opentelemetry/api'\nimport { assertEx } from '@xylabs/assert'\nimport type { Address } from '@xylabs/hex'\nimport {\n AddressZod, EthAddressZod, hexToBigInt, HexZod, toAddress, toHex,\n} from '@xylabs/hex'\nimport { isDefined, isUndefined } from '@xylabs/typeof'\nimport { createTransferPayload } from '@xyo-network/chain-protocol'\nimport type { AnyConfigSchema } from '@xyo-network/module-model'\nimport type { Payload } from '@xyo-network/payload-model'\nimport { AbstractSentinel } from '@xyo-network/sentinel-abstract'\nimport type {\n SentinelConfig, SentinelInstance, SentinelModuleEventData, SentinelParams,\n} from '@xyo-network/sentinel-model'\nimport type { SignedHydratedTransaction } from '@xyo-network/xl1-protocol'\nimport type { XyoGateway, XyoGatewayRunner } from '@xyo-network/xl1-protocol-sdk'\nimport {\n derivedReceiveAddress, flattenHydratedTransaction, isEIP712DataPayload, isEIP712SignaturePayload, SimpleXyoGatewayRunner, verifyEIP712Message,\n} from '@xyo-network/xl1-protocol-sdk'\nimport z from 'zod'\n\nexport const DerivedAddressWalletTransferSentinelConfigSchema = 'network.xyo.sentinel.chain.derived.address.wallet.transfer.config'\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: XyoGateway\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: number\n from: Address\n nbf: number\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': z.number().int().nonnegative(),\n 'XL1 Not before block': z.number().int().nonnegative(),\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 new SimpleXyoGatewayRunner(this.params.gateway)\n }\n\n override async createHandler(): Promise<void> {\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(isEIP712DataPayload)\n const signature = payloads?.find(isEIP712SignaturePayload)\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(await this.gateway.signer(), () => 'Signer is not defined in gateway')\n const signerAddress = await signer.address()\n const connection = await 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.accountBalance(escrowAccount)\n // NOTE: 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.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/logger'\nimport { ManifestWrapper } from '@xyo-network/manifest-wrapper'\nimport type { WalletInstance } from '@xyo-network/wallet-model'\nimport type { Config } from '@xyo-network/xl1-protocol-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: GetNodeContext) => {\n const { wallet } = context\n const locator = await getLocator(context)\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/manifest-model'\n\nimport node from './node.json' with { type: 'json' }\n\n/**\n * Root Node Manifest\n */\nexport const NodeManifest = node as PackageManifestPayload\n","/**\n * Private Child Manifests\n */\nexport const PrivateChildManifests = []\n","import type { ModuleManifest, PackageManifestPayload } from '@xyo-network/manifest-model'\n\n/**\n * Public Child Manifests\n */\nexport const PublicChildManifests: ModuleManifest[] = []\n"],"mappings":"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","names":["customPoweredByHeader","disableCaseSensitiveRouting","disableExpressDefaultPoweredByHeader","getJsonBodyParser","getJsonBodyParserOptions","responseProfiler","standardErrors","standardResponses","compression","cors","express","registerInstrumentations","ExpressInstrumentation","HttpInstrumentation","addInstrumentation","instrumentations","HttpInstrumentation","ExpressInstrumentation","registerInstrumentations","setRawResponseFormat","asHash","isDefined","asArchivistInstance","PayloadBuilder","isAnyPayload","isSequence","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","assertEx","requestHandlerValidator","isDefined","blockRangeSteps","PayloadBuilder","PayloadZodLoose","asSentinelInstance","asXL1BlockRange","StepIdentitySchema","z","isDefined","HttpRpcTransport","JsonRpcNetworkStakeViewer","JsonRpcXyoViewer","NetworkStakeViewerRpcSchemas","XyoViewerRpcSchemas","viewer","getViewerFromConfig","config","isDefined","transport","HttpRpcTransport","rewardRedemptionApi","chainRpcApiUrl","XyoViewerRpcSchemas","NetworkStakeViewerRpcSchemas","networkStakeViewer","JsonRpcNetworkStakeViewer","JsonRpcXyoViewer","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","config","app","parse","viewer","getViewerFromConfig","from","isDefined","currentBlock","currentBlockNumber","to","status","json","range","asXL1BlockRange","name","stepIdentities","blockRangeSteps","results","stepIdentity","stepIdentityPayload","PayloadBuilder","schema","StepIdentitySchema","fields","build","result","report","push","assertEx","requestHandlerValidator","PayloadZodLoose","PayloadZodStrictOfSchema","asSentinelInstance","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","addDataLakeRoutes","addRewardRedemptionRoutes","getApp","node","config","addInstrumentation","app","express","set","use","cors","compression","responseProfiler","getJsonBodyParser","getJsonBodyParserOptions","limit","standardResponses","disableExpressDefaultPoweredByHeader","customPoweredByHeader","disableCaseSensitiveRouting","addRoutes","standardErrors","assertEx","isDefined","isString","boot","HDWallet","isDefined","MemoryArchivist","MongoDBArchivistV2","ViewArchivist","initTelemetry","AbstractModule","LoggerModuleStatusReporter","ModuleFactoryLocator","MemorySentinel","HDWallet","hasMongoConfig","SimpleXyoGateway","SimpleXyoSigner","HttpRpcXyoConnection","assertEx","delay","toAddress","isDefined","isUndefined","blockRangeSteps","createTransferPayload","AbstractSentinel","asXL1BlockNumber","asXL1BlockRange","isStepIdentityPayload","XYO_STEP_REWARD_ADDRESS","completedStepRewardAddress","derivedReceiveAddress","flattenHydratedTransaction","flattenHydratedTransactions","SimpleXyoGatewayRunner","Mutex","ChainStepRewardsClaimSentinelConfigSchema","defaultStepClaimIntervalMs","scope","RewardableSteps","ChainStepRewardsClaimSentinel","AbstractSentinel","configSchemas","defaultConfigSchema","_claimAttemptsCounter","_claimCheckCounter","_claimErrorCounter","_claimSuccessCounter","_connection","_gateway","_reportMutex","Mutex","_viewer","connection","assertEx","gateway","SimpleXyoGatewayRunner","stepClaimIntervalMs","isDefined","config","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","accountBalance","networkStakeStepRewardPoolRewards","addressDistributions","keys","tx","submitRewardDistributionTransaction","error","transferPayload","createTransferPayload","context","addPayloadsToChain","nbf","exp","assertEx","AddressZod","EthAddressZod","hexToBigInt","HexZod","toAddress","toHex","isDefined","isUndefined","createTransferPayload","AbstractSentinel","derivedReceiveAddress","flattenHydratedTransaction","isEIP712DataPayload","isEIP712SignaturePayload","SimpleXyoGatewayRunner","verifyEIP712Message","z","DerivedAddressWalletTransferSentinelConfigSchema","scope","ConfirmedClaimValuesZod","z","object","EthAddressZod","AddressZod","string","HexZod","number","int","nonnegative","parseConfirmedClaimValues","values","amount","exp","from","toAddress","From","nbf","to","DerivedAddressWalletTransferSentinel","AbstractSentinel","configSchemas","defaultConfigSchema","_transferAttemptsCounter","_transferErrorCounter","_transferSuccessCounter","gateway","SimpleXyoGatewayRunner","params","createHandler","meter","createCounter","description","reportHandler","payloads","data","find","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","accountBalance","redemptionAmount","hexToBigInt","toHex","allowance","transferPayload","createTransferPayload","context","chain","chainId","result","addPayloadsToChain","getLocator","context","config","logger","otlpEndpoint","telemetry","otel","traceProvider","meterProvider","initTelemetry","attributes","serviceName","serviceVersion","metricsConfig","endpoint","port","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","gateway","getGateway","chainStepRewardsClaimSentinelParams","ChainStepRewardsClaimSentinel","derivedAddressWalletTransferSentinelParams","DerivedAddressWalletTransferSentinel","mnemonic","chainRpcApiUrl","rewardRedemptionApi","walletPromise","HDWallet","fromPhrase","random","account","signer","SimpleXyoSigner","connection","HttpRpcXyoConnection","SimpleXyoGateway","ManifestWrapper","NodeManifest","node","PrivateChildManifests","PublicChildManifests","getNode","context","wallet","locator","getLocator","wrapper","ManifestWrapper","NodeManifest","PublicChildManifests","PrivateChildManifests","node","childNodes","loadNodes","length","Promise","all","map","childNode","register","attach","address","hostname","getSeedPhrase","bios","config","logger","storedSeedPhrase","seedPhraseStore","get","debug","mnemonic","api","isString","warn","set","seedPhrase","HDWallet","generateMnemonic","log","assertEx","getServer","context","port","rewardRedemptionApi","boot","isDefined","wallet","fromPhrase","nodeContext","node","getNode","app","getApp","server","listen","setTimeout"]}
@@ -1 +1 @@
1
- {"version":3,"file":"ChainStepRewardsClaimSentinel.d.ts","sourceRoot":"","sources":["../../../../src/modules/ChainStepRewardsClaimSentinel/ChainStepRewardsClaimSentinel.ts"],"names":[],"mappings":"AAOA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,2BAA2B,CAAA;AAChE,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,4BAA4B,CAAA;AACzD,OAAO,EAAE,gBAAgB,EAAE,MAAM,gCAAgC,CAAA;AACjE,OAAO,KAAK,EACV,cAAc,EAAE,gBAAgB,EAAE,uBAAuB,EAAE,cAAc,EAC1E,MAAM,6BAA6B,CAAA;AAOpC,OAAO,KAAK,EACV,aAAa,EAAE,UAAU,EAAE,gBAAgB,EAAE,SAAS,EACvD,MAAM,+BAA+B,CAAA;AAStC,eAAO,MAAM,yCAAyC,yDAAyD,CAAA;AAC/G,MAAM,MAAM,yCAAyC,GAAG,OAAO,yCAAyC,CAAA;AAExG;;GAEG;AACH,MAAM,MAAM,mCAAmC,GAAG,cAAc,CAAC;IAC/D;;OAEG;IACH,MAAM,EAAE,yCAAyC,CAAA;IACjD;;OAEG;IACH,mBAAmB,EAAE,MAAM,CAAA;CAC5B,CAAC,CAAA;AAEF,UAAU,wCAAwC;IAChD,OAAO,EAAE,UAAU,CAAA;CACpB;AAED,MAAM,MAAM,mCAAmC,CAC7C,OAAO,SAAS,eAAe,CAAC,mCAAmC,CAAC,GAAG,eAAe,CAAC,mCAAmC,CAAC,IACzH,cAAc,CAAC,OAAO,CAAC,GAAG,wCAAwC,CAAA;AAQtE,qBAAa,6BAA6B,CACxC,OAAO,SAAS,mCAAmC,GAAG,mCAAmC,EACzF,UAAU,SAAS,uBAAuB,CAAC,gBAAgB,CAAC,OAAO,CAAC,CAAC,GAAG,uBAAuB,CAAC,gBAAgB,CAAC,OAAO,CAAC,CAAC,CAC1H,SAAQ,gBAAgB,CAAC,OAAO,EAAE,UAAU,CAAC;IAC7C,gBAAyB,aAAa,WAA8C;IACpF,gBAAyB,mBAAmB,0DAA4C;IACxF,OAAO,CAAC,qBAAqB,CAAiC;IAC9D,OAAO,CAAC,kBAAkB,CAAiC;IAC3D,OAAO,CAAC,kBAAkB,CAAiC;IAC3D,OAAO,CAAC,oBAAoB,CAAiC;IAC7D,OAAO,CAAC,WAAW,CAA2B;IAC9C,OAAO,CAAC,QAAQ,CAAwB;IACxC,OAAO,CAAC,YAAY,CAAc;IAClC,OAAO,CAAC,OAAO,CAAuB;IAEtC,SAAS,KAAK,UAAU,IAAI,aAAa,CAExC;IAED,SAAS,KAAK,OAAO,IAAI,gBAAgB,CAExC;IAED,SAAS,KAAK,mBAAmB,IAAI,MAAM,CAE1C;IAED,SAAS,KAAK,MAAM,IAAI,SAAS,CAEhC;IAEc,aAAa,IAAI,OAAO,CAAC,IAAI,CAAC;IAmB9B,aAAa,CAAC,QAAQ,CAAC,EAAE,OAAO,EAAE,GAAG,OAAO,CAAC,OAAO,EAAE,CAAC;IA2BtE,OAAO,CAAC,6BAA6B;YAuBvB,aAAa;YAsBb,iBAAiB;YA+BjB,mCAAmC;CAalD"}
1
+ {"version":3,"file":"ChainStepRewardsClaimSentinel.d.ts","sourceRoot":"","sources":["../../../../src/modules/ChainStepRewardsClaimSentinel/ChainStepRewardsClaimSentinel.ts"],"names":[],"mappings":"AAOA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,2BAA2B,CAAA;AAChE,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,4BAA4B,CAAA;AACzD,OAAO,EAAE,gBAAgB,EAAE,MAAM,gCAAgC,CAAA;AACjE,OAAO,KAAK,EACV,cAAc,EAAE,gBAAgB,EAAE,uBAAuB,EAAE,cAAc,EAC1E,MAAM,6BAA6B,CAAA;AAQpC,OAAO,KAAK,EACV,aAAa,EAAE,UAAU,EAAE,gBAAgB,EAAE,SAAS,EACvD,MAAM,+BAA+B,CAAA;AAOtC,eAAO,MAAM,yCAAyC,yDAAyD,CAAA;AAC/G,MAAM,MAAM,yCAAyC,GAAG,OAAO,yCAAyC,CAAA;AAExG;;GAEG;AACH,MAAM,MAAM,mCAAmC,GAAG,cAAc,CAAC;IAC/D;;OAEG;IACH,MAAM,EAAE,yCAAyC,CAAA;IACjD;;OAEG;IACH,mBAAmB,EAAE,MAAM,CAAA;CAC5B,CAAC,CAAA;AAEF,UAAU,wCAAwC;IAChD,OAAO,EAAE,UAAU,CAAA;CACpB;AAED,MAAM,MAAM,mCAAmC,CAC7C,OAAO,SAAS,eAAe,CAAC,mCAAmC,CAAC,GAAG,eAAe,CAAC,mCAAmC,CAAC,IACzH,cAAc,CAAC,OAAO,CAAC,GAAG,wCAAwC,CAAA;AAQtE,qBAAa,6BAA6B,CACxC,OAAO,SAAS,mCAAmC,GAAG,mCAAmC,EACzF,UAAU,SAAS,uBAAuB,CAAC,gBAAgB,CAAC,OAAO,CAAC,CAAC,GAAG,uBAAuB,CAAC,gBAAgB,CAAC,OAAO,CAAC,CAAC,CAC1H,SAAQ,gBAAgB,CAAC,OAAO,EAAE,UAAU,CAAC;IAC7C,gBAAyB,aAAa,WAA8C;IACpF,gBAAyB,mBAAmB,0DAA4C;IACxF,OAAO,CAAC,qBAAqB,CAAiC;IAC9D,OAAO,CAAC,kBAAkB,CAAiC;IAC3D,OAAO,CAAC,kBAAkB,CAAiC;IAC3D,OAAO,CAAC,oBAAoB,CAAiC;IAC7D,OAAO,CAAC,WAAW,CAA2B;IAC9C,OAAO,CAAC,QAAQ,CAAwB;IACxC,OAAO,CAAC,YAAY,CAAc;IAClC,OAAO,CAAC,OAAO,CAAuB;IAEtC,SAAS,KAAK,UAAU,IAAI,aAAa,CAExC;IAED,SAAS,KAAK,OAAO,IAAI,gBAAgB,CAExC;IAED,SAAS,KAAK,mBAAmB,IAAI,MAAM,CAE1C;IAED,SAAS,KAAK,MAAM,IAAI,SAAS,CAEhC;IAEc,aAAa,IAAI,OAAO,CAAC,IAAI,CAAC;IAmB9B,aAAa,CAAC,QAAQ,CAAC,EAAE,OAAO,EAAE,GAAG,OAAO,CAAC,OAAO,EAAE,CAAC;IA2BtE,OAAO,CAAC,6BAA6B;YAuBvB,aAAa;YAsBb,iBAAiB;YA+BjB,mCAAmC;CAalD"}
@@ -1,3 +1,2 @@
1
1
  export * from './ChainStepRewardsClaimSentinel.ts';
2
- export * from './StepIdentityPayload.ts';
3
2
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/modules/ChainStepRewardsClaimSentinel/index.ts"],"names":[],"mappings":"AAAA,cAAc,oCAAoC,CAAA;AAClD,cAAc,0BAA0B,CAAA"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/modules/ChainStepRewardsClaimSentinel/index.ts"],"names":[],"mappings":"AAAA,cAAc,oCAAoC,CAAA"}
@@ -30,11 +30,7 @@ interface ParsedClaimValues {
30
30
  }
31
31
  export declare const ConfirmedClaimValuesZod: z.ZodObject<{
32
32
  From: z.ZodString;
33
- 'To XL1 Address': z.ZodType<import("@xylabs/typeof").Brand<import("@xylabs/hex").Hex, {
34
- readonly __address: true;
35
- }>, unknown, z.z.core.$ZodTypeInternals<import("@xylabs/typeof").Brand<import("@xylabs/hex").Hex, {
36
- readonly __address: true;
37
- }>, unknown>>;
33
+ 'To XL1 Address': z.ZodPipe<z.ZodString, z.ZodTransform<Address, string>>;
38
34
  'XL1 Amount': z.ZodString;
39
35
  'XL1 Amount (Hex)': z.ZodPipe<z.ZodString, z.ZodTransform<import("@xylabs/hex").Hex, string>>;
40
36
  'XL1 Not after block': z.ZodNumber;
@@ -1 +1 @@
1
- {"version":3,"file":"DerivedAddressWalletTransferSentinel.d.ts","sourceRoot":"","sources":["../../../../src/modules/DerivedAddressWalletTransferSentinel/DerivedAddressWalletTransferSentinel.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,aAAa,CAAA;AAM1C,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,2BAA2B,CAAA;AAChE,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,4BAA4B,CAAA;AACzD,OAAO,EAAE,gBAAgB,EAAE,MAAM,gCAAgC,CAAA;AACjE,OAAO,KAAK,EACV,cAAc,EAAE,gBAAgB,EAAE,uBAAuB,EAAE,cAAc,EAC1E,MAAM,6BAA6B,CAAA;AACpC,OAAO,KAAK,EAAE,yBAAyB,EAAE,MAAM,2BAA2B,CAAA;AAC1E,OAAO,KAAK,EAAE,UAAU,EAAE,gBAAgB,EAAE,MAAM,+BAA+B,CAAA;AAIjF,OAAO,CAAC,MAAM,KAAK,CAAA;AAEnB,eAAO,MAAM,gDAAgD,sEAAsE,CAAA;AACnI,MAAM,MAAM,gDAAgD,GAAG,OAAO,gDAAgD,CAAA;AAEtH;;GAEG;AACH,MAAM,MAAM,0CAA0C,GAAG,cAAc,CAAC;IACtE;;OAEG;IACH,MAAM,EAAE,gDAAgD,CAAA;CACzD,CAAC,CAAA;AAEF,MAAM,WAAW,+CAA+C;IAC9D,OAAO,EAAE,UAAU,CAAA;CACpB;AAED,MAAM,MAAM,0CAA0C,CACpD,OAAO,SAAS,eAAe,CAAC,0CAA0C,CAAC,GAAG,eAAe,CAAC,0CAA0C,CAAC,IACvI,cAAc,CAAC,OAAO,CAAC,GAAG,+CAA+C,CAAA;AAI7E,UAAU,iBAAiB;IACzB,MAAM,EAAE,MAAM,CAAA;IAEd,GAAG,EAAE,MAAM,CAAA;IACX,IAAI,EAAE,OAAO,CAAA;IACb,GAAG,EAAE,MAAM,CAAA;IACX,EAAE,EAAE,OAAO,CAAA;CACZ;AAGD,eAAO,MAAM,uBAAuB;;;;;;;;;;;mBAOlC,CAAA;AAEF,MAAM,MAAM,oBAAoB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,uBAAuB,CAAC,CAAA;AAY1E,qBAAa,oCAAoC,CAC/C,OAAO,SAAS,0CAA0C,GAAG,0CAA0C,EACvG,UAAU,SAAS,uBAAuB,CAAC,gBAAgB,CAAC,OAAO,CAAC,CAAC,GAAG,uBAAuB,CAAC,gBAAgB,CAAC,OAAO,CAAC,CAAC,CAC1H,SAAQ,gBAAgB,CAAC,OAAO,EAAE,UAAU,CAAC;IAC7C,gBAAyB,aAAa,WAAqD;IAC3F,gBAAyB,mBAAmB,uEAAmD;IAC/F,OAAO,CAAC,wBAAwB,CAAiC;IACjE,OAAO,CAAC,qBAAqB,CAAiC;IAC9D,OAAO,CAAC,uBAAuB,CAAiC;IAEhE,SAAS,KAAK,OAAO,IAAI,gBAAgB,CAExC;IAEc,aAAa,IAAI,OAAO,CAAC,IAAI,CAAC;IAiB9B,aAAa,CAAC,QAAQ,CAAC,EAAE,OAAO,EAAE,GAAG,OAAO,CAAC,OAAO,EAAE,CAAC;IAyBtE,SAAS,CAAC,mCAAmC,GAAU,aAAa,iBAAiB,KAAG,OAAO,CAAC,yBAAyB,GAAG,SAAS,CAAC,CAwCrI;CACF"}
1
+ {"version":3,"file":"DerivedAddressWalletTransferSentinel.d.ts","sourceRoot":"","sources":["../../../../src/modules/DerivedAddressWalletTransferSentinel/DerivedAddressWalletTransferSentinel.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,aAAa,CAAA;AAM1C,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,2BAA2B,CAAA;AAChE,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,4BAA4B,CAAA;AACzD,OAAO,EAAE,gBAAgB,EAAE,MAAM,gCAAgC,CAAA;AACjE,OAAO,KAAK,EACV,cAAc,EAAE,gBAAgB,EAAE,uBAAuB,EAAE,cAAc,EAC1E,MAAM,6BAA6B,CAAA;AACpC,OAAO,KAAK,EAAE,yBAAyB,EAAE,MAAM,2BAA2B,CAAA;AAC1E,OAAO,KAAK,EAAE,UAAU,EAAE,gBAAgB,EAAE,MAAM,+BAA+B,CAAA;AAIjF,OAAO,CAAC,MAAM,KAAK,CAAA;AAEnB,eAAO,MAAM,gDAAgD,sEAAsE,CAAA;AACnI,MAAM,MAAM,gDAAgD,GAAG,OAAO,gDAAgD,CAAA;AAEtH;;GAEG;AACH,MAAM,MAAM,0CAA0C,GAAG,cAAc,CAAC;IACtE;;OAEG;IACH,MAAM,EAAE,gDAAgD,CAAA;CACzD,CAAC,CAAA;AAEF,MAAM,WAAW,+CAA+C;IAC9D,OAAO,EAAE,UAAU,CAAA;CACpB;AAED,MAAM,MAAM,0CAA0C,CACpD,OAAO,SAAS,eAAe,CAAC,0CAA0C,CAAC,GAAG,eAAe,CAAC,0CAA0C,CAAC,IACvI,cAAc,CAAC,OAAO,CAAC,GAAG,+CAA+C,CAAA;AAI7E,UAAU,iBAAiB;IACzB,MAAM,EAAE,MAAM,CAAA;IAEd,GAAG,EAAE,MAAM,CAAA;IACX,IAAI,EAAE,OAAO,CAAA;IACb,GAAG,EAAE,MAAM,CAAA;IACX,EAAE,EAAE,OAAO,CAAA;CACZ;AAGD,eAAO,MAAM,uBAAuB;;;;;;;mBAOlC,CAAA;AAEF,MAAM,MAAM,oBAAoB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,uBAAuB,CAAC,CAAA;AAY1E,qBAAa,oCAAoC,CAC/C,OAAO,SAAS,0CAA0C,GAAG,0CAA0C,EACvG,UAAU,SAAS,uBAAuB,CAAC,gBAAgB,CAAC,OAAO,CAAC,CAAC,GAAG,uBAAuB,CAAC,gBAAgB,CAAC,OAAO,CAAC,CAAC,CAC1H,SAAQ,gBAAgB,CAAC,OAAO,EAAE,UAAU,CAAC;IAC7C,gBAAyB,aAAa,WAAqD;IAC3F,gBAAyB,mBAAmB,uEAAmD;IAC/F,OAAO,CAAC,wBAAwB,CAAiC;IACjE,OAAO,CAAC,qBAAqB,CAAiC;IAC9D,OAAO,CAAC,uBAAuB,CAAiC;IAEhE,SAAS,KAAK,OAAO,IAAI,gBAAgB,CAExC;IAEc,aAAa,IAAI,OAAO,CAAC,IAAI,CAAC;IAiB9B,aAAa,CAAC,QAAQ,CAAC,EAAE,OAAO,EAAE,GAAG,OAAO,CAAC,OAAO,EAAE,CAAC;IAyBtE,SAAS,CAAC,mCAAmC,GAAU,aAAa,iBAAiB,KAAG,OAAO,CAAC,yBAAyB,GAAG,SAAS,CAAC,CAwCrI;CACF"}
@@ -1 +1 @@
1
- {"version":3,"file":"claimRange.d.ts","sourceRoot":"","sources":["../../../../../../../src/server/routes/rewardRedemption/routeDefinitions/routes/claimRange.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,iBAAiB,CAAA;AAgCtD,eAAO,MAAM,cAAc,EAAE,eA8B5B,CAAA"}
1
+ {"version":3,"file":"claimRange.d.ts","sourceRoot":"","sources":["../../../../../../../src/server/routes/rewardRedemption/routeDefinitions/routes/claimRange.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,iBAAiB,CAAA;AA+BtD,eAAO,MAAM,cAAc,EAAE,eA8B5B,CAAA"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@xyo-network/chain-reward-redemption",
3
- "version": "1.16.9",
3
+ "version": "1.16.10",
4
4
  "description": "XYO Layer One Rewards",
5
5
  "homepage": "https://xylabs.com",
6
6
  "bugs": {
@@ -49,22 +49,21 @@
49
49
  "@opentelemetry/instrumentation": "~0.208.0",
50
50
  "@opentelemetry/instrumentation-express": "~0.57.0",
51
51
  "@opentelemetry/instrumentation-http": "~0.208.0",
52
- "@xylabs/assert": "~5.0.24",
53
- "@xylabs/delay": "~5.0.24",
54
- "@xylabs/express": "~5.0.24",
55
- "@xylabs/hex": "~5.0.24",
56
- "@xylabs/logger": "~5.0.24",
57
- "@xylabs/object": "~5.0.24",
58
- "@xylabs/typeof": "~5.0.24",
59
- "@xylabs/vitest-extended": "~5.0.24",
52
+ "@xylabs/assert": "~5.0.25",
53
+ "@xylabs/delay": "~5.0.25",
54
+ "@xylabs/express": "~5.0.25",
55
+ "@xylabs/hex": "~5.0.25",
56
+ "@xylabs/logger": "~5.0.25",
57
+ "@xylabs/typeof": "~5.0.25",
58
+ "@xylabs/vitest-extended": "~5.0.25",
60
59
  "@xyo-network/archivist-memory": "~5.1.21",
61
60
  "@xyo-network/archivist-model": "~5.1.21",
62
61
  "@xyo-network/archivist-mongodb": "~5.1.21",
63
62
  "@xyo-network/archivist-view": "~5.1.21",
64
63
  "@xyo-network/bios": "~7.1.1",
65
64
  "@xyo-network/boundwitness-model": "~5.1.21",
66
- "@xyo-network/chain-protocol": "~1.16.9",
67
- "@xyo-network/chain-telemetry": "~1.16.9",
65
+ "@xyo-network/chain-protocol": "~1.16.10",
66
+ "@xyo-network/chain-telemetry": "~1.16.10",
68
67
  "@xyo-network/manifest-model": "~5.1.21",
69
68
  "@xyo-network/manifest-wrapper": "~5.1.21",
70
69
  "@xyo-network/module-abstract": "~5.1.21",
@@ -78,9 +77,9 @@
78
77
  "@xyo-network/sentinel-model": "~5.1.21",
79
78
  "@xyo-network/wallet": "~5.1.21",
80
79
  "@xyo-network/wallet-model": "~5.1.21",
81
- "@xyo-network/xl1-protocol": "~1.13.6",
82
- "@xyo-network/xl1-protocol-sdk": "~1.16.9",
83
- "@xyo-network/xl1-rpc": "~1.16.9",
80
+ "@xyo-network/xl1-protocol": "~1.13.11",
81
+ "@xyo-network/xl1-protocol-sdk": "~1.16.10",
82
+ "@xyo-network/xl1-rpc": "~1.16.10",
84
83
  "async-mutex": "~0.5.0",
85
84
  "compression": "~1.8.1",
86
85
  "cors": "~2.8.5",
@@ -94,11 +93,11 @@
94
93
  "@types/express": "5.0.5",
95
94
  "@types/express-serve-static-core": "~5.1.0",
96
95
  "@types/node": "~24.10.1",
97
- "@xylabs/base": "~5.0.24",
98
- "@xylabs/delay": "~5.0.24",
99
- "@xylabs/mongo": "~5.0.24",
100
- "@xylabs/object": "~5.0.24",
101
- "@xylabs/promise": "~5.0.24",
96
+ "@xylabs/base": "~5.0.25",
97
+ "@xylabs/delay": "~5.0.25",
98
+ "@xylabs/mongo": "~5.0.25",
99
+ "@xylabs/object": "~5.0.25",
100
+ "@xylabs/promise": "~5.0.25",
102
101
  "@xylabs/ts-scripts-yarn3": "~7.2.8",
103
102
  "@xylabs/tsconfig": "~7.2.8",
104
103
  "@xyo-network/account": "~5.1.21",
@@ -108,8 +107,8 @@
108
107
  "@xyo-network/archivist-mongodb": "~5.1.21",
109
108
  "@xyo-network/bios-model": "~7.1.1",
110
109
  "@xyo-network/boundwitness-builder": "~5.1.21",
111
- "@xyo-network/chain-protocol": "~1.16.9",
112
- "@xyo-network/chain-services": "~1.16.9",
110
+ "@xyo-network/chain-protocol": "~1.16.10",
111
+ "@xyo-network/chain-services": "~1.16.10",
113
112
  "@xyo-network/manifest-wrapper": "~5.1.21",
114
113
  "@xyo-network/module-abstract": "~5.1.21",
115
114
  "@xyo-network/module-abstract-mongodb": "~5.1.21",
@@ -117,7 +116,7 @@
117
116
  "@xyo-network/node-memory": "~5.1.21",
118
117
  "@xyo-network/payload-builder": "~5.1.21",
119
118
  "@xyo-network/sentinel-memory": "~5.1.21",
120
- "@xyo-network/xl1-protocol": "~1.13.6",
119
+ "@xyo-network/xl1-protocol": "~1.13.11",
121
120
  "dotenv": "~17.2.3",
122
121
  "eslint": "^9.39.1",
123
122
  "ethers": "~6.15.0",
@@ -125,7 +124,7 @@
125
124
  "nodemon": "~3.1.11",
126
125
  "tslib": "~2.8.1",
127
126
  "typescript": "~5.9.3",
128
- "vitest": "~4.0.8",
127
+ "vitest": "~4.0.9",
129
128
  "vitest-mock-extended": "~3.1.0"
130
129
  },
131
130
  "engines": {
@@ -15,7 +15,8 @@ import type {
15
15
  AttoXL1, SignedHydratedTransaction, StepIdentity,
16
16
  } from '@xyo-network/xl1-protocol'
17
17
  import {
18
- asXL1BlockNumber, asXL1BlockRange, XYO_STEP_REWARD_ADDRESS,
18
+ asXL1BlockNumber, asXL1BlockRange, isStepIdentityPayload,
19
+ XYO_STEP_REWARD_ADDRESS,
19
20
  } from '@xyo-network/xl1-protocol'
20
21
  import type {
21
22
  XyoConnection, XyoGateway, XyoGatewayRunner, XyoViewer,
@@ -26,8 +27,6 @@ import {
26
27
  } from '@xyo-network/xl1-protocol-sdk'
27
28
  import { Mutex } from 'async-mutex'
28
29
 
29
- import { isStepIdentityPayload } from './StepIdentityPayload.ts'
30
-
31
30
  export const ChainStepRewardsClaimSentinelConfigSchema = 'network.xyo.sentinel.chain.step.rewards.claim.config'
32
31
  export type ChainStepRewardsClaimSentinelConfigSchema = typeof ChainStepRewardsClaimSentinelConfigSchema
33
32
 
@@ -124,7 +123,7 @@ export class ChainStepRewardsClaimSentinel<
124
123
  .filter(isStepIdentityPayload)
125
124
  .map<StepIdentity>((p) => {
126
125
  const { step, block: blockNumber } = p
127
- const block = asXL1BlockNumber(blockNumber, true)
126
+ const block = asXL1BlockNumber(blockNumber, { name: 'reportHandler' })
128
127
  return { step, block }
129
128
  }).filter(stepIdentity => RewardableSteps.includes(stepIdentity.step))
130
129
  for (const stepIdentity of stepIdentities) {
@@ -167,7 +166,7 @@ export class ChainStepRewardsClaimSentinel<
167
166
  // Fetch unclaimed rewards and process claims
168
167
  const from = 0
169
168
  const to = await this.viewer.currentBlockNumber()
170
- const range = asXL1BlockRange([asXL1BlockNumber(from), asXL1BlockNumber(to)], true)
169
+ const range = asXL1BlockRange([from, to], { name: 'claimAllSteps' })
171
170
  // For each rewardable step in range
172
171
  const stepIdentities = blockRangeSteps(range, [step])
173
172
  for (const stepIdentity of stepIdentities) {
@@ -1,2 +1 @@
1
1
  export * from './ChainStepRewardsClaimSentinel.ts'
2
- export * from './StepIdentityPayload.ts'
@@ -4,7 +4,9 @@ import { toEthAddress, toHex } from '@xylabs/hex'
4
4
  import { Account } from '@xyo-network/account'
5
5
  import { TestChainId } from '@xyo-network/chain-protocol'
6
6
  import { PayloadBuilder } from '@xyo-network/payload-builder'
7
- import { asAttoXL1, AttoXL1ConvertFactor } from '@xyo-network/xl1-protocol'
7
+ import {
8
+ asAttoXL1, asXL1BlockNumber, AttoXL1ConvertFactor,
9
+ } from '@xyo-network/xl1-protocol'
8
10
  import type {
9
11
  EIP712DataPayload, XyoGateway, XyoRunner, XyoViewer,
10
12
  } from '@xyo-network/xl1-protocol-sdk'
@@ -26,7 +28,7 @@ describe('DerivedAddressWalletTransferSentinel', () => {
26
28
  let gateway: XyoGateway
27
29
  const nbf = 1000
28
30
  const exp = 2000
29
- const currentBlockNumber = Math.floor((nbf + exp) / 2)
31
+ const currentBlockNumber = asXL1BlockNumber(Math.floor((nbf + exp) / 2), true)
30
32
  const accountBalanceXl1 = 10n
31
33
  const accountBalance = asAttoXL1(accountBalanceXl1 * AttoXL1ConvertFactor.xl1)
32
34
  const domain = {
@@ -10,10 +10,9 @@ import { PayloadZodLoose } from '@xyo-network/payload-model'
10
10
  import type { SentinelInstance } from '@xyo-network/sentinel-model'
11
11
  import { asSentinelInstance } from '@xyo-network/sentinel-model'
12
12
  import type { StepIdentityPayload } from '@xyo-network/xl1-protocol'
13
- import { asXL1BlockRange } from '@xyo-network/xl1-protocol'
13
+ import { asXL1BlockRange, StepIdentitySchema } from '@xyo-network/xl1-protocol'
14
14
  import { z } from 'zod'
15
15
 
16
- import { StepIdentitySchema } from '../../../../../modules/index.ts'
17
16
  import { getViewerFromConfig, RewardableSteps } from '../util/index.ts'
18
17
 
19
18
  const query = z.object({
@@ -48,7 +47,7 @@ export const postClaimRange: RouteDefinition = {
48
47
  res.json([])
49
48
  return
50
49
  }
51
- const range = asXL1BlockRange([from, to], true)
50
+ const range = asXL1BlockRange([from, to], { name: 'claimRange' })
52
51
  // For each rewardable step in range
53
52
  const stepIdentities = blockRangeSteps(range, [step])
54
53
  const results: Payload[] = []
@@ -1,6 +0,0 @@
1
- import type { StepIdentityPayload } from '@xyo-network/xl1-protocol';
2
- export declare const StepIdentitySchema: "network.xyo.chain.step.identity";
3
- export type StepIdentitySchema = typeof StepIdentitySchema;
4
- export declare const isStepIdentityPayload: (x?: unknown | null) => x is StepIdentityPayload;
5
- export declare const asStepIdentityPayload: import("@xylabs/object").AsTypeFunction<StepIdentityPayload>;
6
- //# sourceMappingURL=StepIdentityPayload.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"StepIdentityPayload.d.ts","sourceRoot":"","sources":["../../../../src/modules/ChainStepRewardsClaimSentinel/StepIdentityPayload.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,2BAA2B,CAAA;AAGpE,eAAO,MAAM,kBAAkB,EAAG,iCAA0C,CAAA;AAC5E,MAAM,MAAM,kBAAkB,GAAG,OAAO,kBAAkB,CAAA;AAE1D,eAAO,MAAM,qBAAqB,kDAA+E,CAAA;AAEjH,eAAO,MAAM,qBAAqB,8DAAgD,CAAA"}
@@ -1,11 +0,0 @@
1
- import { AsObjectFactory } from '@xylabs/object'
2
- import { isPayloadOfZodType } from '@xyo-network/payload-model'
3
- import type { StepIdentityPayload } from '@xyo-network/xl1-protocol'
4
- import { StepIdentityZod } from '@xyo-network/xl1-protocol'
5
-
6
- export const StepIdentitySchema = 'network.xyo.chain.step.identity' as const
7
- export type StepIdentitySchema = typeof StepIdentitySchema
8
-
9
- export const isStepIdentityPayload = isPayloadOfZodType<StepIdentityPayload>(StepIdentityZod, StepIdentitySchema)
10
-
11
- export const asStepIdentityPayload = AsObjectFactory.create(isStepIdentityPayload)