@xyo-network/xl1-cli 1.19.4 → 1.19.6

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.
Files changed (2) hide show
  1. package/dist/cli-min.mjs +260 -209
  2. package/package.json +5 -6
package/dist/cli-min.mjs CHANGED
@@ -20795,23 +20795,29 @@ var uniq = (arr) => {
20795
20795
  };
20796
20796
 
20797
20797
  // src/assertDefinedEx.ts
20798
- function assertDefinedEx(expr, messageOrFunc) {
20798
+ function assertDefinedEx(expr, func) {
20799
20799
  if (expr !== void 0) return expr;
20800
- if (typeof messageOrFunc === "function") {
20801
- const errorOrMessage = messageOrFunc(expr);
20800
+ if (typeof func === "function") {
20801
+ const errorOrMessage = func(expr);
20802
20802
  throw typeof errorOrMessage === "string" ? new Error(errorOrMessage) : errorOrMessage;
20803
20803
  }
20804
- throw new Error(messageOrFunc);
20804
+ if (func !== void 0) {
20805
+ throw new Error("Invalid assertEx usage: second argument must be a function or undefined");
20806
+ }
20807
+ throw new Error("Assertion failed: value is undefined");
20805
20808
  }
20806
20809
 
20807
20810
  // src/assertEx.ts
20808
- function assertEx(expr, messageOrFunc) {
20811
+ function assertEx(expr, func) {
20809
20812
  if (expr) return expr;
20810
- if (typeof messageOrFunc === "function") {
20811
- const errorOrMessage = messageOrFunc(expr);
20813
+ if (typeof func === "function") {
20814
+ const errorOrMessage = func(expr);
20812
20815
  throw typeof errorOrMessage === "string" ? new Error(errorOrMessage) : errorOrMessage;
20813
20816
  }
20814
- throw new Error(messageOrFunc);
20817
+ if (func !== void 0) {
20818
+ throw new Error("Invalid assertEx usage: second argument must be a function or undefined");
20819
+ }
20820
+ throw new Error("Assertion failed");
20815
20821
  }
20816
20822
 
20817
20823
  /** A special constant with type `never` */
@@ -35312,6 +35318,8 @@ var toHex = (value, config = {}) => {
35312
35318
  const { prefix = false } = config;
35313
35319
  return hexFrom(value, { prefix, ...config });
35314
35320
  };
35321
+
35322
+ // src/address/AddressValidationZod.ts
35315
35323
  var AddressValidationZod = string$2().refine((x) => HexZod.safeParse(x)).refine((x) => x.length === ADDRESS_LENGTH, { error: (e) => new Error(`Address must have 40 characters [${e.input}]`) }).transform((v) => v);
35316
35324
 
35317
35325
  // src/address/AddressTransformZod.ts
@@ -35332,20 +35340,6 @@ union$1([string$2(), bigint$1(), number$3()]).transform((value) => {
35332
35340
  }
35333
35341
  }).refine((x) => AddressValidationZod.safeParse(x).data).transform((x) => x);
35334
35342
 
35335
- // src/address/to.ts
35336
- var toAddress = (value, config = {}) => {
35337
- const { bitLength = 160, prefix = false } = config;
35338
- return hexFrom(value, {
35339
- bitLength,
35340
- prefix,
35341
- ...config
35342
- });
35343
- };
35344
-
35345
- // src/address/addressDeprecated.ts
35346
- string$2().regex(AddressRegEx);
35347
- string$2().toLowerCase().regex(AddressRegEx).transform((v) => toAddress(v));
35348
-
35349
35343
  // src/address/is.ts
35350
35344
  var isAddress = (value, config = {}) => {
35351
35345
  const { bitLength = 160, prefix = false } = config;
@@ -35371,6 +35365,16 @@ function asAddress(value, assert) {
35371
35365
  return assertError(void 0, assert, error.message);
35372
35366
  }
35373
35367
  }
35368
+
35369
+ // src/address/to.ts
35370
+ var toAddress = (value, config = {}) => {
35371
+ const { bitLength = 160, prefix = false } = config;
35372
+ return hexFrom(value, {
35373
+ bitLength,
35374
+ prefix,
35375
+ ...config
35376
+ });
35377
+ };
35374
35378
  var EthAddressRegEx = HexRegExMinMaxMixedCaseWithPrefix(20, 20);
35375
35379
  string$2().regex(EthAddressRegEx);
35376
35380
  string$2().regex(EthAddressRegEx).transform((v) => toEthAddress(v));
@@ -89239,15 +89243,20 @@ var SimpleMempoolRunner = class extends AbstractCreatableProvider {
89239
89243
  return [isPayloadBundle(p) ? await bundledPayloadToHydratedBlock(p) : void 0, p];
89240
89244
  }));
89241
89245
  return blockBundles.map(([block, bundle3]) => {
89242
- const result = [block ? block[0].chain === chainId && block[0].block > headNumber && isSignedHydratedBlockWithHashMeta(block) ? block : void 0 : void 0, bundle3];
89243
- if (result[0] === void 0) {
89246
+ const blockCheckPassed = !!block;
89247
+ const chainIdPassed = blockCheckPassed ? block[0].chain === chainId : false;
89248
+ const blockNumberPassed = blockCheckPassed ? block[0].block > headNumber : false;
89249
+ const typeCheckPassed = blockCheckPassed ? isSignedHydratedBlockWithHashMeta(block) : false;
89250
+ const validationPassed = blockCheckPassed && chainIdPassed && blockNumberPassed && typeCheckPassed;
89251
+ const validatedBlock = validationPassed ? block : void 0;
89252
+ if (!validationPassed) {
89244
89253
  this.logger?.info(`Pruning block bundle ${bundle3._hash} during simpleValidationCheck`);
89245
- this.logger?.info(` - chainId match: ${block ? block[0].chain === chainId : "n/a"}`);
89246
- this.logger?.info(` - headNumber check: ${block ? block[0].block > headNumber : "n/a"}`);
89247
- this.logger?.info(` - isSignedHydratedBlockWithHashMeta: ${block ? isSignedHydratedBlockWithHashMeta(block) : "n/a"}`);
89248
- this.logger?.info(` - block value: ${block ? JSON.stringify(block, null, 2) : "n/a"}`);
89254
+ this.logger?.info(` - chainId match: ${chainIdPassed}`);
89255
+ this.logger?.info(` - blockNumber check: ${blockNumberPassed}`);
89256
+ this.logger?.info(` - typeCheck: ${typeCheckPassed}`);
89257
+ this.logger?.info(` - bundle hash: ${bundle3._hash}`);
89249
89258
  }
89250
- return result;
89259
+ return [validatedBlock, bundle3];
89251
89260
  });
89252
89261
  }
89253
89262
  };
@@ -201982,6 +201991,44 @@ async function createChain(signer, stakingTokenAddress, initialBlockProducer, re
201982
201991
  ];
201983
201992
  }
201984
201993
  __name$e(createChain, "createChain");
201994
+ var EthHashRegEx = HexRegExMinMaxMixedCaseWithPrefix(32, 32);
201995
+ var EthHashZod = string$2().regex(EthHashRegEx, {
201996
+ message: "Invalid address format"
201997
+ });
201998
+ var EvmStakeAddedEventNameZod = literal$2("StakeAdded");
201999
+ var EvmStakeRemovedEventNameZod = literal$2("StakeRemoved");
202000
+ var EvmStakeWithdrawnEventNameZod = literal$2("StakeWithdrawn");
202001
+ var EvmStakeEventNameZod = union$1([
202002
+ EvmStakeAddedEventNameZod,
202003
+ EvmStakeRemovedEventNameZod,
202004
+ EvmStakeWithdrawnEventNameZod
202005
+ ]);
202006
+ var EvmStakeEventArgsZod = tuple([
202007
+ EthAddressZod,
202008
+ EthAddressZod,
202009
+ bigint$1(),
202010
+ bigint$1()
202011
+ ]);
202012
+ var EvmStakeEventZod = object$4({
202013
+ address: EthAddressZod,
202014
+ args: EvmStakeEventArgsZod,
202015
+ blockHash: EthHashZod,
202016
+ blockNumber: number$3(),
202017
+ eventName: EvmStakeEventNameZod,
202018
+ transactionHash: EthHashZod,
202019
+ transactionIndex: number$3()
202020
+ });
202021
+ EvmStakeEventZod.extend({
202022
+ eventName: EvmStakeAddedEventNameZod
202023
+ });
202024
+ EvmStakeEventZod.extend({
202025
+ eventName: EvmStakeRemovedEventNameZod
202026
+ });
202027
+ EvmStakeEventZod.extend({
202028
+ eventName: EvmStakeWithdrawnEventNameZod
202029
+ });
202030
+
202031
+ // src/drivers/EvmStakeEventsViewer.ts
201985
202032
  function _ts_decorate$5(decorators, target, key, desc) {
201986
202033
  var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
201987
202034
  if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
@@ -201989,6 +202036,170 @@ function _ts_decorate$5(decorators, target, key, desc) {
201989
202036
  return c > 3 && r && Object.defineProperty(target, key, r), r;
201990
202037
  }
201991
202038
  __name$e(_ts_decorate$5, "_ts_decorate");
202039
+ var EvmStakeEventsViewer = class _EvmStakeEventsViewer extends AbstractCreatableProvider {
202040
+ static {
202041
+ __name$e(this, "EvmStakeEventsViewer");
202042
+ }
202043
+ static defaultMoniker = StakeEventsViewerMoniker;
202044
+ static dependencies = [];
202045
+ static monikers = [
202046
+ StakeEventsViewerMoniker
202047
+ ];
202048
+ moniker = _EvmStakeEventsViewer.defaultMoniker;
202049
+ eventCache = /* @__PURE__ */ new Map();
202050
+ get contract() {
202051
+ return assertEx(this.params.contract, () => new Error("Contract not defined"));
202052
+ }
202053
+ get deploymentBlock() {
202054
+ return this.params.deploymentBlock ?? 0;
202055
+ }
202056
+ async positionCount(range) {
202057
+ const events = await this.stakeEvents(range);
202058
+ const positionIds = events.map((e) => e.args.id);
202059
+ return Math.max(-1, ...positionIds) + 1;
202060
+ }
202061
+ stakeEvents(range = [
202062
+ 0,
202063
+ "latest"
202064
+ ], filter) {
202065
+ const allEvents = [
202066
+ ...this.eventCache.values()
202067
+ ];
202068
+ const result = allEvents.filter((e) => {
202069
+ if (range[1] !== "latest" && e.time > range[1]) {
202070
+ return false;
202071
+ }
202072
+ if (e.time < range[0]) {
202073
+ return false;
202074
+ }
202075
+ if (isDefined(filter?.name) && e.name !== filter.name) {
202076
+ return false;
202077
+ }
202078
+ if (isDefined(filter?.args?.id) && e.args.id !== filter.args.id) {
202079
+ return false;
202080
+ }
202081
+ if (isDefined(filter?.args?.staked) && e.args.staked !== filter.args.staked) {
202082
+ return false;
202083
+ }
202084
+ if (isDefined(filter?.args?.staker) && e.args.staker !== filter.args.staker) {
202085
+ return false;
202086
+ }
202087
+ return true;
202088
+ });
202089
+ return result;
202090
+ }
202091
+ onEventHandler(staked, staker, id, amount, event, throwOnInvalid = false) {
202092
+ const validatedEventResult = EvmStakeEventZod.safeParse(event);
202093
+ if (validatedEventResult.error) {
202094
+ this.logger?.warn(`Received invalid stake event [${event.eventName}/${event.blockNumber}], ignoring...`);
202095
+ this.logger?.warn(` - ${validatedEventResult.error.message}`);
202096
+ if (throwOnInvalid) {
202097
+ throw new Error(`Invalid stake event: ${validatedEventResult.error.message}`);
202098
+ }
202099
+ return;
202100
+ }
202101
+ const validatedEvent = validatedEventResult.data;
202102
+ const { eventName, blockNumber } = validatedEvent;
202103
+ this.logger?.log(`Processing ${eventName} event for stake ID ${id} at block ${blockNumber}`);
202104
+ const cacheKey = `${Number(id)}|${eventName}|${staker}`;
202105
+ const existingStakeEvent = this.eventCache.get(cacheKey);
202106
+ const stakeEvent = {
202107
+ name: eventName,
202108
+ args: {
202109
+ id: Number(id),
202110
+ staked: toAddress(staked),
202111
+ staker: toAddress(staker),
202112
+ amount: asAttoXL1(amount)
202113
+ },
202114
+ time: blockNumber
202115
+ };
202116
+ if (isDefined(existingStakeEvent)) {
202117
+ this.logger?.warn(`Received ${eventName} event for stake ID ${id} that is already cached, updating cache...`);
202118
+ this.logger?.warn("1");
202119
+ this.logger?.warn("Previous event", existingStakeEvent);
202120
+ this.logger?.warn("2");
202121
+ this.logger?.warn("New event", stakeEvent);
202122
+ this.logger?.warn("3");
202123
+ }
202124
+ this.eventCache.set(cacheKey, stakeEvent);
202125
+ return stakeEvent;
202126
+ }
202127
+ async startHandler() {
202128
+ try {
202129
+ const currentEthBlock = assertEx(await this.contract.runner?.provider?.getBlockNumber(), () => new Error("Failed to egt currentEthBlock"));
202130
+ await this.contract.on(this.contract.getEvent("StakeAdded"), (staked, staker, id, amount, event) => {
202131
+ this.onEventHandler(staked, staker, id, amount, event);
202132
+ });
202133
+ await this.contract.on(this.contract.getEvent("StakeRemoved"), (staked, staker, id, amount, event) => {
202134
+ this.onEventHandler(staked, staker, id, amount, event);
202135
+ });
202136
+ await this.contract.on(this.contract.getEvent("StakeWithdrawn"), (staked, staker, id, amount, event) => {
202137
+ this.onEventHandler(staked, staker, id, amount, event);
202138
+ });
202139
+ await this.loadHistoricalEvents(currentEthBlock);
202140
+ } catch (error) {
202141
+ this.logger?.error("EthereumChainStakeEvents failed to start:", error);
202142
+ throw error;
202143
+ }
202144
+ }
202145
+ async loadHistoricalEvents(currentEthBlock) {
202146
+ const allStakeEvents = (await Promise.all([
202147
+ this.stakeEventsNative([
202148
+ this.deploymentBlock,
202149
+ currentEthBlock
202150
+ ], {
202151
+ name: "StakeAdded"
202152
+ }),
202153
+ this.stakeEventsNative([
202154
+ this.deploymentBlock,
202155
+ currentEthBlock
202156
+ ], {
202157
+ name: "StakeRemoved"
202158
+ }),
202159
+ this.stakeEventsNative([
202160
+ this.deploymentBlock,
202161
+ currentEthBlock
202162
+ ], {
202163
+ name: "StakeWithdrawn"
202164
+ })
202165
+ ])).flat().toSorted((a, b) => a.time - b.time);
202166
+ console.warn(`Caching ${allStakeEvents.length} stake events from chain starting at block ${this.deploymentBlock}`);
202167
+ for (const event of allStakeEvents) {
202168
+ this.eventCache.set(`${Number(event.args.id)}|${event.name}|${event.args.staker}`, event);
202169
+ }
202170
+ }
202171
+ async stakeEventsNative(range = [
202172
+ 0,
202173
+ "latest"
202174
+ ], filter) {
202175
+ const name = filter?.name;
202176
+ if (isDefined(name)) {
202177
+ const stakedFilter = filter?.args?.staked;
202178
+ const stakerFilter = filter?.args?.staker;
202179
+ const stakedFilterEth = isDefined(stakedFilter) ? toEthAddress(stakedFilter) : void 0;
202180
+ const stakerFilterEth = isDefined(stakerFilter) ? toEthAddress(stakerFilter) : void 0;
202181
+ let ethEvents = [];
202182
+ const ethFilter = this.contract.filters[name](stakedFilterEth, stakerFilterEth);
202183
+ ethEvents = await this.contract.queryFilter(ethFilter, range[0], range[1]);
202184
+ return ethEvents.map((e) => {
202185
+ assertEx(e.eventName === name, () => `Event name mismatch expected '${name}' but got '${e.eventName}'`);
202186
+ return this.onEventHandler(e.args.staked, e.args.by, e.args.id, e.args.amount, e, true);
202187
+ }).filter(exists$2);
202188
+ } else {
202189
+ throw new Error("Only filtered stake events (by name) are supported");
202190
+ }
202191
+ }
202192
+ };
202193
+ EvmStakeEventsViewer = _ts_decorate$5([
202194
+ creatableProvider()
202195
+ ], EvmStakeEventsViewer);
202196
+ function _ts_decorate2$3(decorators, target, key, desc) {
202197
+ var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
202198
+ if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
202199
+ else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
202200
+ return c > 3 && r && Object.defineProperty(target, key, r), r;
202201
+ }
202202
+ __name$e(_ts_decorate2$3, "_ts_decorate");
201992
202203
  var ethStakeToStake = /* @__PURE__ */ __name$e((ethStake) => {
201993
202204
  const stake = {
201994
202205
  id: Number(ethStake.id),
@@ -202001,16 +202212,16 @@ var ethStakeToStake = /* @__PURE__ */ __name$e((ethStake) => {
202001
202212
  };
202002
202213
  return stake;
202003
202214
  }, "ethStakeToStake");
202004
- var EthereumChainStakeViewer = class _EthereumChainStakeViewer extends AbstractCreatableProvider {
202215
+ var EvmStakeViewer = class _EvmStakeViewer extends AbstractCreatableProvider {
202005
202216
  static {
202006
- __name$e(this, "EthereumChainStakeViewer");
202217
+ __name$e(this, "EvmStakeViewer");
202007
202218
  }
202008
202219
  static defaultMoniker = StakeViewerMoniker;
202009
202220
  static dependencies = [];
202010
202221
  static monikers = [
202011
202222
  StakeViewerMoniker
202012
202223
  ];
202013
- moniker = _EthereumChainStakeViewer.defaultMoniker;
202224
+ moniker = _EvmStakeViewer.defaultMoniker;
202014
202225
  _callMutex = new Mutex$1();
202015
202226
  _deploymentBlock = 0;
202016
202227
  _stakeCache = /* @__PURE__ */ new Map();
@@ -202211,174 +202422,9 @@ var EthereumChainStakeViewer = class _EthereumChainStakeViewer extends AbstractC
202211
202422
  }
202212
202423
  }
202213
202424
  };
202214
- EthereumChainStakeViewer = _ts_decorate$5([
202215
- creatableProvider()
202216
- ], EthereumChainStakeViewer);
202217
- function _ts_decorate2$3(decorators, target, key, desc) {
202218
- var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
202219
- if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
202220
- else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
202221
- return c > 3 && r && Object.defineProperty(target, key, r), r;
202222
- }
202223
- __name$e(_ts_decorate2$3, "_ts_decorate");
202224
- var isStakeLogEventName = /* @__PURE__ */ __name$e((name) => {
202225
- return isString$1(name) && [
202226
- "StakeAdded",
202227
- "StakeRemoved",
202228
- "StakeWithdrawn"
202229
- ].includes(name);
202230
- }, "isStakeLogEventName");
202231
- var EthereumChainStakeEventsViewer = class _EthereumChainStakeEventsViewer extends AbstractCreatableProvider {
202232
- static {
202233
- __name$e(this, "EthereumChainStakeEventsViewer");
202234
- }
202235
- static defaultMoniker = StakeEventsViewerMoniker;
202236
- static dependencies = [];
202237
- static monikers = [
202238
- StakeEventsViewerMoniker
202239
- ];
202240
- moniker = _EthereumChainStakeEventsViewer.defaultMoniker;
202241
- eventCache = /* @__PURE__ */ new Map();
202242
- get contract() {
202243
- return assertEx(this.params.contract, () => new Error("Contract not defined"));
202244
- }
202245
- get deploymentBlock() {
202246
- return this.params.deploymentBlock ?? 0;
202247
- }
202248
- async positionCount(range) {
202249
- const events = await this.stakeEvents(range);
202250
- const positionIds = events.map((e) => e.args.id);
202251
- return Math.max(-1, ...positionIds) + 1;
202252
- }
202253
- stakeEvents(range = [
202254
- 0,
202255
- "latest"
202256
- ], filter) {
202257
- const allEvents = [
202258
- ...this.eventCache.values()
202259
- ];
202260
- const result = allEvents.filter((e) => {
202261
- if (range[1] !== "latest" && e.time > range[1]) {
202262
- return false;
202263
- }
202264
- if (e.time < range[0]) {
202265
- return false;
202266
- }
202267
- if (isDefined(filter?.name) && e.name !== filter.name) {
202268
- return false;
202269
- }
202270
- if (isDefined(filter?.args?.id) && e.args.id !== filter.args.id) {
202271
- return false;
202272
- }
202273
- if (isDefined(filter?.args?.staked) && e.args.staked !== filter.args.staked) {
202274
- return false;
202275
- }
202276
- if (isDefined(filter?.args?.staker) && e.args.staker !== filter.args.staker) {
202277
- return false;
202278
- }
202279
- return true;
202280
- });
202281
- return result;
202282
- }
202283
- onEventHandler(staked, staker, id, amount, { eventName, blockNumber }) {
202284
- if (blockNumber === void 0) {
202285
- this.logger?.warn(`Received ${eventName} event with ${blockNumber} blockNumber, ignoring...`);
202286
- return;
202287
- }
202288
- if (!isStakeLogEventName(eventName)) {
202289
- this.logger?.warn(`Received event with unsupported name '${eventName}'`);
202290
- return;
202291
- }
202292
- this.logger?.log(`Processing ${eventName} event for stake ID ${id} at block ${blockNumber}`);
202293
- const cacheKey = `${Number(id)}|${eventName}|${staker}`;
202294
- const existingStakeEvent = this.eventCache.get(cacheKey);
202295
- const stakeEvent = {
202296
- name: eventName,
202297
- args: {
202298
- id: Number(id),
202299
- staked: toAddress(staked),
202300
- staker: toAddress(staker),
202301
- amount: asAttoXL1(amount)
202302
- },
202303
- time: blockNumber
202304
- };
202305
- if (isDefined(existingStakeEvent)) {
202306
- this.logger?.warn(`Received ${eventName} event for stake ID ${id} that is already cached, updating cache...`);
202307
- this.logger?.warn("1");
202308
- this.logger?.warn("Previous event", existingStakeEvent);
202309
- this.logger?.warn("2");
202310
- this.logger?.warn("New event", stakeEvent);
202311
- this.logger?.warn("3");
202312
- }
202313
- this.eventCache.set(cacheKey, stakeEvent);
202314
- return stakeEvent;
202315
- }
202316
- async startHandler() {
202317
- try {
202318
- const currentEthBlock = assertEx(await this.contract.runner?.provider?.getBlockNumber(), () => new Error("Failed to egt currentEthBlock"));
202319
- await this.contract.on(this.contract.getEvent("StakeAdded"), (staked, staker, id, amount, event) => {
202320
- this.onEventHandler(staked, staker, id, amount, event);
202321
- });
202322
- await this.contract.on(this.contract.getEvent("StakeRemoved"), (staked, staker, id, amount, event) => {
202323
- this.onEventHandler(staked, staker, id, amount, event);
202324
- });
202325
- await this.contract.on(this.contract.getEvent("StakeWithdrawn"), (staked, staker, id, amount, event) => {
202326
- this.onEventHandler(staked, staker, id, amount, event);
202327
- });
202328
- const allStakeEvents = (await Promise.all([
202329
- this.stakeEventsNative([
202330
- this.deploymentBlock,
202331
- currentEthBlock
202332
- ], {
202333
- name: "StakeAdded"
202334
- }),
202335
- this.stakeEventsNative([
202336
- this.deploymentBlock,
202337
- currentEthBlock
202338
- ], {
202339
- name: "StakeRemoved"
202340
- }),
202341
- this.stakeEventsNative([
202342
- this.deploymentBlock,
202343
- currentEthBlock
202344
- ], {
202345
- name: "StakeWithdrawn"
202346
- })
202347
- ])).flat().toSorted((a, b) => a.time - b.time);
202348
- console.warn(`Caching ${allStakeEvents.length} stake events from chain starting at block ${this.deploymentBlock}`);
202349
- for (const event of allStakeEvents) {
202350
- this.eventCache.set(`${Number(event.args.id)}|${event.name}|${event.args.staker}`, event);
202351
- }
202352
- } catch (error) {
202353
- this.logger?.error("EthereumChainStakeEvents failed to start:", error);
202354
- throw error;
202355
- }
202356
- }
202357
- async stakeEventsNative(range = [
202358
- 0,
202359
- "latest"
202360
- ], filter) {
202361
- const name = filter?.name;
202362
- if (isDefined(name)) {
202363
- const stakedFilter = filter?.args?.staked;
202364
- const stakerFilter = filter?.args?.staker;
202365
- const stakedFilterEth = isDefined(stakedFilter) ? toEthAddress(stakedFilter) : void 0;
202366
- const stakerFilterEth = isDefined(stakerFilter) ? toEthAddress(stakerFilter) : void 0;
202367
- let ethEvents = [];
202368
- const ethFilter = this.contract.filters[name](stakedFilterEth, stakerFilterEth);
202369
- ethEvents = await this.contract.queryFilter(ethFilter, range[0], range[1]);
202370
- return ethEvents.map((e) => {
202371
- assertEx(e.eventName === name, () => `Event name mismatch expected '${name}' but got '${e.eventName}'`);
202372
- return this.onEventHandler(e.args.staked, e.args.by, e.args.id, e.args.amount, e);
202373
- }).filter(exists$2);
202374
- } else {
202375
- throw new Error("Only filtered stake events (by name) are supported");
202376
- }
202377
- }
202378
- };
202379
- EthereumChainStakeEventsViewer = _ts_decorate2$3([
202425
+ EvmStakeViewer = _ts_decorate2$3([
202380
202426
  creatableProvider()
202381
- ], EthereumChainStakeEventsViewer);
202427
+ ], EvmStakeViewer);
202382
202428
  var AbstractEvmProvider = class extends AbstractCreatableProvider {
202383
202429
  static {
202384
202430
  __name$e(this, "AbstractEvmProvider");
@@ -297899,19 +297945,19 @@ async function initEvmChainStakeViewer(context, config, logger) {
297899
297945
  });
297900
297946
  const contractAddress = assertEx(config.chain.id, () => "Missing config.evm.chainId");
297901
297947
  const contract = IStakedXyoChain__factory.connect(toEthAddress(contractAddress), provider2);
297902
- const stakeEventsViewer = await EthereumChainStakeEventsViewer.create({
297948
+ const stakeEventsViewer = await EvmStakeEventsViewer.create({
297903
297949
  contract,
297904
297950
  logger,
297905
297951
  context
297906
297952
  });
297907
- assertEx(await stakeEventsViewer.start(), () => "Failed to start EthereumChainStakeEvents reader");
297908
- const stakeChainViewer = await EthereumChainStakeViewer.create({
297953
+ assertEx(await stakeEventsViewer.start(), () => "Failed to start EvmStakeEvents reader");
297954
+ const stakeChainViewer = await EvmStakeViewer.create({
297909
297955
  contract,
297910
297956
  stakeEventsViewer,
297911
297957
  logger,
297912
297958
  context
297913
297959
  });
297914
- assertEx(await stakeChainViewer.start(), () => "Failed to start EthereumChainStake viewer");
297960
+ assertEx(await stakeChainViewer.start(), () => "Failed to start EvmStake viewer");
297915
297961
  return stakeChainViewer;
297916
297962
  }
297917
297963
  __name$6(initEvmChainStakeViewer, "initEvmChainStakeViewer");
@@ -298770,12 +298816,12 @@ async function getServer$3(params) {
298770
298816
  });
298771
298817
  const contractAddress = assertEx(config.chain.id, () => "Missing config.chain.chainId");
298772
298818
  const contract = IStakedXyoChain__factory.connect(toEthAddress(contractAddress), provider);
298773
- locator.register(EthereumChainStakeEventsViewer.factory(EthereumChainStakeEventsViewer.dependencies, {
298819
+ locator.register(EvmStakeEventsViewer.factory(EvmStakeEventsViewer.dependencies, {
298774
298820
  contract
298775
298821
  }));
298776
- const stakeEventsViewer = await locator.getInstance(EthereumChainStakeEventsViewer.defaultMoniker);
298777
- assertEx(await stakeEventsViewer.start(), () => "Failed to start EthereumChainStakeEventsViewer");
298778
- locator.register(EthereumChainStakeViewer.factory(EthereumChainStakeViewer.dependencies, {
298822
+ const stakeEventsViewer = await locator.getInstance(EvmStakeEventsViewer.defaultMoniker);
298823
+ assertEx(await stakeEventsViewer.start(), () => "Failed to start EvmStakeEventsViewer");
298824
+ locator.register(EvmStakeViewer.factory(EvmStakeViewer.dependencies, {
298779
298825
  contract,
298780
298826
  stakeEventsViewer
298781
298827
  }));
@@ -343133,10 +343179,15 @@ var ChainStepRewardsClaimSentinel = class extends AbstractSentinel {
343133
343179
  this._claimCheckCounter?.add(1, claimCounterAttributes);
343134
343180
  const stepRewardAddress = completedStepRewardAddress(stepIdentity);
343135
343181
  const balance = await this.viewer.account.balance.accountBalance(stepRewardAddress);
343182
+ this.logger?.info(`Found balance of ${balance} to claim for step ${stepIdentity.step} at block ${stepIdentity.block} in step reward address ${stepRewardAddress}`);
343136
343183
  if (balance > 0n) {
343137
- this.logger?.info(`Found balance of ${balance} to claim for step ${stepIdentity.step} at block ${stepIdentity.block}`);
343138
343184
  this._claimAttemptsCounter?.add(1, claimCounterAttributes);
343139
343185
  const rewardsByStaker = await this.viewer.networkStakeStepRewardPoolRewards(stepIdentity);
343186
+ const rewardRecipients = Object.keys(rewardsByStaker).length;
343187
+ this.logger?.info(`Found ${rewardRecipients} reward recipients for step ${stepIdentity.step} at block ${stepIdentity.block}`);
343188
+ if (!this.config.claimEmptySteps) {
343189
+ assertEx(rewardRecipients > 0, () => "No reward recipients for step");
343190
+ }
343140
343191
  const addressDistributions = this.calculateAddressDistributions(rewardsByStaker, balance);
343141
343192
  this.logger?.info(`Calculated address distributions for step ${stepIdentity.step} at block ${stepIdentity.block} with ${Object.keys(addressDistributions).length} addresses`);
343142
343193
  const tx = await this.submitRewardDistributionTransaction(stepRewardAddress, addressDistributions, stepIdentity, this.gateway);
@@ -350450,7 +350501,7 @@ var waitForHostPort = /* @__PURE__ */ __name((host, port) => {
350450
350501
 
350451
350502
  // src/runCLI.ts
350452
350503
  var configuration;
350453
- var version = isDefined("1.19.3") ? "1.19.3" : "unknown";
350504
+ var version = isDefined("1.19.5") ? "1.19.5" : "unknown";
350454
350505
  var getContextFromConfig = /* @__PURE__ */ __name(async (configuration2) => {
350455
350506
  const logger = initLogger(configuration2);
350456
350507
  const orchestrator = await Orchestrator.create({
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@xyo-network/xl1-cli",
3
- "version": "1.19.4",
3
+ "version": "1.19.6",
4
4
  "description": "XYO Layer One CLI",
5
5
  "homepage": "https://xylabs.com",
6
6
  "bugs": {
@@ -62,11 +62,10 @@
62
62
  },
63
63
  "devDependencies": {
64
64
  "@rollup/plugin-node-resolve": "^16.0.3",
65
- "@xylabs/sdk-js": "~5.0.64",
66
- "@xylabs/telemetry": "~5.0.64",
65
+ "@xylabs/sdk-js": "~5.0.65",
67
66
  "@xylabs/ts-scripts-yarn3": "~7.3.2",
68
67
  "@xylabs/tsconfig": "~7.3.2",
69
- "@xylabs/vitest-extended": "~5.0.64",
68
+ "@xylabs/vitest-extended": "~5.0.65",
70
69
  "@xyo-network/account-model": "~5.3.2",
71
70
  "@xyo-network/archivist-lmdb": "~5.3.2",
72
71
  "@xyo-network/archivist-memory": "~5.3.2",
@@ -75,8 +74,8 @@
75
74
  "@xyo-network/payload-model": "~5.3.2",
76
75
  "@xyo-network/wallet": "~5.3.2",
77
76
  "@xyo-network/wallet-model": "~5.3.2",
78
- "@xyo-network/xl1-cli-lib": "~1.19.4",
79
- "@xyo-network/xl1-sdk": "~1.21.9",
77
+ "@xyo-network/xl1-cli-lib": "~1.19.6",
78
+ "@xyo-network/xl1-sdk": "~1.21.10",
80
79
  "async-mutex": "~0.5.0",
81
80
  "dotenv": "~17.2.3",
82
81
  "eslint": "^9.39.2",