@xyo-network/xl1-cli 5.2.0 → 5.2.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/cli-min.mjs CHANGED
@@ -23,9 +23,9 @@ import fs$1, { readFileSync as readFileSync$1, readdirSync as readdirSync$1 } fr
23
23
  import http$1 from "node:http";
24
24
  import { notStrictEqual, strictEqual } from "assert";
25
25
  import { MongoClient, ObjectId } from "mongodb";
26
- import FS from "node:fs/promises";
27
26
  import { AlwaysOnSampler, BasicTracerProvider, BatchSpanProcessor, ConsoleSpanExporter } from "@opentelemetry/sdk-trace-base";
28
27
  import tty from "node:tty";
28
+ import FS from "node:fs/promises";
29
29
  import { AsyncLocalStorageContextManager } from "@opentelemetry/context-async-hooks";
30
30
  import { CompositePropagator, W3CBaggagePropagator, W3CTraceContextPropagator } from "@opentelemetry/core";
31
31
  import { PrometheusExporter } from "@opentelemetry/exporter-prometheus";
@@ -224749,7 +224749,7 @@ var import_cjs$1 = (/* @__PURE__ */ __commonJSMin(((exports) => {
224749
224749
  Object.defineProperty(exports, "__esModule", { value: true });
224750
224750
  (init_tslib_es6(), __toCommonJS(tslib_es6_exports)).__exportStar(require_bullMQOtel(), exports);
224751
224751
  })))();
224752
- var DEFAULT_HEARTBEAT_INTERVAL = 15e3;
224752
+ var DEFAULT_HEARTBEAT_INTERVAL$1 = 15e3;
224753
224753
  var DEFAULT_RECONNECT_BASE_DELAY = 1e3;
224754
224754
  var DEFAULT_RECONNECT_JITTER = .25;
224755
224755
  var DEFAULT_RECONNECT_MAX_DELAY = 3e4;
@@ -224928,7 +224928,7 @@ var ManagedWebSocketEventTransport = class {
224928
224928
  this.webSocketUrl = webSocketUrl;
224929
224929
  this.network = network;
224930
224930
  this.options = {
224931
- heartbeatInterval: options.heartbeatInterval ?? DEFAULT_HEARTBEAT_INTERVAL,
224931
+ heartbeatInterval: options.heartbeatInterval ?? DEFAULT_HEARTBEAT_INTERVAL$1,
224932
224932
  reconnectBaseDelay: options.reconnectBaseDelay ?? DEFAULT_RECONNECT_BASE_DELAY,
224933
224933
  reconnectJitter: options.reconnectJitter ?? DEFAULT_RECONNECT_JITTER,
224934
224934
  reconnectMaxDelay: options.reconnectMaxDelay ?? DEFAULT_RECONNECT_MAX_DELAY,
@@ -228695,6 +228695,7 @@ var ChainHeadSelector = class _ChainHeadSelector extends ChainFinalizer {
228695
228695
  admission;
228696
228696
  allowedProducers;
228697
228697
  backoffMs;
228698
+ heartbeatInterval;
228698
228699
  minCandidates;
228699
228700
  _timeSinceLastUncle = Date.now();
228700
228701
  constructor(params) {
@@ -228702,6 +228703,7 @@ var ChainHeadSelector = class _ChainHeadSelector extends ChainFinalizer {
228702
228703
  this.admission = params.admission ?? "allowlist";
228703
228704
  this.allowedProducers = params.allowedProducers;
228704
228705
  this.backoffMs = params.backoffMs;
228706
+ this.heartbeatInterval = params.heartbeatInterval;
228705
228707
  this.minCandidates = params.minCandidates;
228706
228708
  }
228707
228709
  get context() {
@@ -228716,8 +228718,9 @@ var ChainHeadSelector = class _ChainHeadSelector extends ChainFinalizer {
228716
228718
  const allowed = allProposedBlocks.filter((pb) => this.isAllowed(pb));
228717
228719
  const proposedBlocks = await this.admit(allProposedBlocks, allowed);
228718
228720
  this.windowedFinalizedChain = await getWindowedChain$1(this.context, this.blockViewer, this.maxWindowSize, this.windowedFinalizedChain);
228719
- const uncles = findUncles$1(this.context, this.windowedFinalizedChain, proposedBlocks);
228720
- this.reportSilentUncleRejections(proposedBlocks, uncles.length);
228721
+ const pacedBlocks = this.filterPacedHeartbeatCandidates(proposedBlocks);
228722
+ const uncles = findUncles$1(this.context, this.windowedFinalizedChain, pacedBlocks);
228723
+ this.reportSilentUncleRejections(pacedBlocks, uncles.length);
228721
228724
  return findBestUncle(this.windowedFinalizedChain, uncles, {
228722
228725
  backoffMs: this.backoffMs,
228723
228726
  minCandidates: this.minCandidates
@@ -228771,6 +228774,28 @@ var ChainHeadSelector = class _ChainHeadSelector extends ChainFinalizer {
228771
228774
  producer: candidate[0].addresses[0]
228772
228775
  })));
228773
228776
  }
228777
+ /**
228778
+ * Defense against unwanted heartbeat rates: a transaction-less (heartbeat) candidate qualifies
228779
+ * only when its signing epoch is at least heartbeatInterval after the current head's. Measured
228780
+ * on chain data, so every finalizer applies the same pace deterministically regardless of wall
228781
+ * clock. A producer heartbeating faster than the network's pace — misconfigured or hostile —
228782
+ * cannot drive the chain's block rate: its candidates never qualify and age out of the pool,
228783
+ * while transaction-carrying candidates are exempt and finalize immediately.
228784
+ */
228785
+ filterPacedHeartbeatCandidates(proposedBlocks) {
228786
+ const interval = this.heartbeatInterval;
228787
+ if (interval === void 0 || proposedBlocks.length === 0) return proposedBlocks;
228788
+ const headEpoch = this.windowedFinalizedChain.at(-1)?.[0].$epoch;
228789
+ if (!isDefined$1(headEpoch)) return proposedBlocks;
228790
+ const paced = proposedBlocks.filter((candidate) => {
228791
+ if (candidate[1].some((payload) => isTransactionBoundWitness$1(payload))) return true;
228792
+ const candidateEpoch = candidate[0].$epoch;
228793
+ if (!isDefined$1(candidateEpoch)) return true;
228794
+ return candidateEpoch - headEpoch >= interval;
228795
+ });
228796
+ if (paced.length < proposedBlocks.length) this.context.logger?.debug(`findBestHead: paced out ${proposedBlocks.length - paced.length} heartbeat candidate(s) younger than ${interval}ms since the head`);
228797
+ return paced;
228798
+ }
228774
228799
  /** Whether the configured allow-list admits a candidate. An empty list admits everyone. */
228775
228800
  isAllowed(candidate) {
228776
228801
  const allowedProducers = this.allowedProducers;
@@ -228818,6 +228843,574 @@ var ChainHeadSelector = class _ChainHeadSelector extends ChainFinalizer {
228818
228843
  asSchema$1("network.xyo.chain.summary.producers", true);
228819
228844
  asSchema$1("network.xyo.chain.summary.staked.intent", true);
228820
228845
  asSchema$1("network.xyo.chain.summary.transfers", true);
228846
+ (/* @__PURE__ */ __commonJSMin(((exports, module) => {
228847
+ module.exports = function shallowEqual(objA, objB, compare, compareContext) {
228848
+ var ret = compare ? compare.call(compareContext, objA, objB) : void 0;
228849
+ if (ret !== void 0) return !!ret;
228850
+ if (objA === objB) return true;
228851
+ if (typeof objA !== "object" || !objA || typeof objB !== "object" || !objB) return false;
228852
+ var keysA = Object.keys(objA);
228853
+ var keysB = Object.keys(objB);
228854
+ if (keysA.length !== keysB.length) return false;
228855
+ var bHasOwnProperty = Object.prototype.hasOwnProperty.bind(objB);
228856
+ for (var idx = 0; idx < keysA.length; idx++) {
228857
+ var key = keysA[idx];
228858
+ if (!bHasOwnProperty(key)) return false;
228859
+ var valueA = objA[key];
228860
+ var valueB = objB[key];
228861
+ ret = compare ? compare.call(compareContext, valueA, valueB, key) : void 0;
228862
+ if (ret === false || ret === void 0 && valueA !== valueB) return false;
228863
+ }
228864
+ return true;
228865
+ };
228866
+ })))();
228867
+ function stringReplaceAll(string, substring, postfix) {
228868
+ let index = string.indexOf(substring);
228869
+ if (index === -1) return string;
228870
+ const substringLength = substring.length;
228871
+ let endIndex = 0;
228872
+ let returnValue = "";
228873
+ do {
228874
+ returnValue += string.slice(endIndex, index) + substring + postfix;
228875
+ endIndex = index + substringLength;
228876
+ index = string.indexOf(substring, endIndex);
228877
+ } while (index !== -1);
228878
+ returnValue += string.slice(endIndex);
228879
+ return returnValue;
228880
+ }
228881
+ function stringEncaseCRLFWithFirstIndex(string, prefix, postfix, index) {
228882
+ let endIndex = 0;
228883
+ let returnValue = "";
228884
+ do {
228885
+ const isGotCR = string[index - 1] === "\r";
228886
+ returnValue += string.slice(endIndex, isGotCR ? index - 1 : index) + prefix + (isGotCR ? "\r\n" : "\n") + postfix;
228887
+ endIndex = index + 1;
228888
+ index = string.indexOf("\n", endIndex);
228889
+ } while (index !== -1);
228890
+ returnValue += string.slice(endIndex);
228891
+ return returnValue;
228892
+ }
228893
+ //#endregion
228894
+ //#region ../../node_modules/.pnpm/chalk@6.0.0/node_modules/chalk/source/vendor/ansi-styles/index.js
228895
+ const ANSI_BACKGROUND_OFFSET$1 = 10;
228896
+ const ANSI_UNDERLINE_OFFSET = 20;
228897
+ const wrapAnsi16$1 = (offset = 0) => (code) => `\u{1B}[${code + offset}m`;
228898
+ const wrapAnsi256$1 = (offset = 0) => (code) => `\u{1B}[${38 + offset};5;${code}m`;
228899
+ const wrapAnsi16m$1 = (offset = 0) => (red, green, blue) => `\u{1B}[${38 + offset};2;${red};${green};${blue}m`;
228900
+ const wrapUnderlineAnsi = (code) => `\u{1B}[58;5;${code < 90 ? code - 30 : code - 90 + 8}m`;
228901
+ const styles$2 = {
228902
+ modifier: {
228903
+ reset: [0, 0],
228904
+ bold: [1, 22],
228905
+ dim: [2, 22],
228906
+ italic: [3, 23],
228907
+ underline: [4, 24],
228908
+ underlineDouble: ["4:2", 24],
228909
+ underlineCurly: ["4:3", 24],
228910
+ underlineDotted: ["4:4", 24],
228911
+ underlineDashed: ["4:5", 24],
228912
+ overline: [53, 55],
228913
+ inverse: [7, 27],
228914
+ hidden: [8, 28],
228915
+ strikethrough: [9, 29]
228916
+ },
228917
+ color: {
228918
+ black: [30, 39],
228919
+ red: [31, 39],
228920
+ green: [32, 39],
228921
+ yellow: [33, 39],
228922
+ blue: [34, 39],
228923
+ magenta: [35, 39],
228924
+ cyan: [36, 39],
228925
+ white: [37, 39],
228926
+ blackBright: [90, 39],
228927
+ gray: [90, 39],
228928
+ grey: [90, 39],
228929
+ redBright: [91, 39],
228930
+ greenBright: [92, 39],
228931
+ yellowBright: [93, 39],
228932
+ blueBright: [94, 39],
228933
+ magentaBright: [95, 39],
228934
+ cyanBright: [96, 39],
228935
+ whiteBright: [97, 39]
228936
+ },
228937
+ bgColor: {
228938
+ bgBlack: [40, 49],
228939
+ bgRed: [41, 49],
228940
+ bgGreen: [42, 49],
228941
+ bgYellow: [43, 49],
228942
+ bgBlue: [44, 49],
228943
+ bgMagenta: [45, 49],
228944
+ bgCyan: [46, 49],
228945
+ bgWhite: [47, 49],
228946
+ bgBlackBright: [100, 49],
228947
+ bgGray: [100, 49],
228948
+ bgGrey: [100, 49],
228949
+ bgRedBright: [101, 49],
228950
+ bgGreenBright: [102, 49],
228951
+ bgYellowBright: [103, 49],
228952
+ bgBlueBright: [104, 49],
228953
+ bgMagentaBright: [105, 49],
228954
+ bgCyanBright: [106, 49],
228955
+ bgWhiteBright: [107, 49]
228956
+ },
228957
+ underlineColor: {
228958
+ underlineBlack: ["58;5;0", 59],
228959
+ underlineRed: ["58;5;1", 59],
228960
+ underlineGreen: ["58;5;2", 59],
228961
+ underlineYellow: ["58;5;3", 59],
228962
+ underlineBlue: ["58;5;4", 59],
228963
+ underlineMagenta: ["58;5;5", 59],
228964
+ underlineCyan: ["58;5;6", 59],
228965
+ underlineWhite: ["58;5;7", 59],
228966
+ underlineBlackBright: ["58;5;8", 59],
228967
+ underlineGray: ["58;5;8", 59],
228968
+ underlineGrey: ["58;5;8", 59],
228969
+ underlineRedBright: ["58;5;9", 59],
228970
+ underlineGreenBright: ["58;5;10", 59],
228971
+ underlineYellowBright: ["58;5;11", 59],
228972
+ underlineBlueBright: ["58;5;12", 59],
228973
+ underlineMagentaBright: ["58;5;13", 59],
228974
+ underlineCyanBright: ["58;5;14", 59],
228975
+ underlineWhiteBright: ["58;5;15", 59]
228976
+ }
228977
+ };
228978
+ Object.keys(styles$2.modifier);
228979
+ const foregroundColorNames$1 = Object.keys(styles$2.color);
228980
+ const backgroundColorNames$1 = Object.keys(styles$2.bgColor);
228981
+ Object.keys(styles$2.underlineColor);
228982
+ [...foregroundColorNames$1, ...backgroundColorNames$1];
228983
+ function assembleStyles$1() {
228984
+ const codes = /* @__PURE__ */ new Map();
228985
+ for (const [groupName, group] of Object.entries(styles$2)) {
228986
+ for (const [styleName, style] of Object.entries(group)) {
228987
+ styles$2[styleName] = {
228988
+ open: `\u{1B}[${style[0]}m`,
228989
+ close: `\u{1B}[${style[1]}m`
228990
+ };
228991
+ group[styleName] = styles$2[styleName];
228992
+ codes.set(Number.parseInt(style[0], 10), style[1]);
228993
+ }
228994
+ Object.defineProperty(styles$2, groupName, {
228995
+ value: group,
228996
+ enumerable: false
228997
+ });
228998
+ }
228999
+ Object.defineProperty(styles$2, "codes", {
229000
+ value: codes,
229001
+ enumerable: false
229002
+ });
229003
+ styles$2.color.close = "\x1B[39m";
229004
+ styles$2.bgColor.close = "\x1B[49m";
229005
+ styles$2.underlineColor.close = "\x1B[59m";
229006
+ styles$2.color.ansi = wrapAnsi16$1();
229007
+ styles$2.color.ansi256 = wrapAnsi256$1();
229008
+ styles$2.color.ansi16m = wrapAnsi16m$1();
229009
+ styles$2.bgColor.ansi = wrapAnsi16$1(ANSI_BACKGROUND_OFFSET$1);
229010
+ styles$2.bgColor.ansi256 = wrapAnsi256$1(ANSI_BACKGROUND_OFFSET$1);
229011
+ styles$2.bgColor.ansi16m = wrapAnsi16m$1(ANSI_BACKGROUND_OFFSET$1);
229012
+ styles$2.underlineColor.ansi = wrapUnderlineAnsi;
229013
+ styles$2.underlineColor.ansi256 = wrapAnsi256$1(ANSI_UNDERLINE_OFFSET);
229014
+ styles$2.underlineColor.ansi16m = wrapAnsi16m$1(ANSI_UNDERLINE_OFFSET);
229015
+ Object.defineProperties(styles$2, {
229016
+ rgbToAnsi256: {
229017
+ value(red, green, blue) {
229018
+ if (red === green && green === blue) {
229019
+ if (red < 8) return 16;
229020
+ if (red > 248) return 231;
229021
+ return Math.round((red - 8) / 247 * 24) + 232;
229022
+ }
229023
+ return 16 + 36 * Math.round(red / 255 * 5) + 6 * Math.round(green / 255 * 5) + Math.round(blue / 255 * 5);
229024
+ },
229025
+ enumerable: false
229026
+ },
229027
+ hexToRgb: {
229028
+ value(hex) {
229029
+ const matches = /[\da-f]{6}|[\da-f]{3}/i.exec(hex.toString(16));
229030
+ if (!matches) return [
229031
+ 0,
229032
+ 0,
229033
+ 0
229034
+ ];
229035
+ let [colorString] = matches;
229036
+ if (colorString.length === 3) colorString = [...colorString].map((character) => character + character).join("");
229037
+ const integer = Number.parseInt(colorString, 16);
229038
+ return [
229039
+ integer >> 16 & 255,
229040
+ integer >> 8 & 255,
229041
+ integer & 255
229042
+ ];
229043
+ },
229044
+ enumerable: false
229045
+ },
229046
+ hexToAnsi256: {
229047
+ value: (hex) => styles$2.rgbToAnsi256(...styles$2.hexToRgb(hex)),
229048
+ enumerable: false
229049
+ },
229050
+ ansi256ToAnsi: {
229051
+ value(code) {
229052
+ if (code < 8) return 30 + code;
229053
+ if (code < 16) return 90 + (code - 8);
229054
+ let red;
229055
+ let green;
229056
+ let blue;
229057
+ if (code >= 232) {
229058
+ red = ((code - 232) * 10 + 8) / 255;
229059
+ green = red;
229060
+ blue = red;
229061
+ } else {
229062
+ code -= 16;
229063
+ const remainder = code % 36;
229064
+ red = Math.floor(code / 36) / 5;
229065
+ green = Math.floor(remainder / 6) / 5;
229066
+ blue = remainder % 6 / 5;
229067
+ }
229068
+ const value = Math.max(red, green, blue) * 2;
229069
+ if (value === 0) return 30;
229070
+ let result = 30 + (Math.round(blue) << 2 | Math.round(green) << 1 | Math.round(red));
229071
+ if (value === 2) result += 60;
229072
+ return result;
229073
+ },
229074
+ enumerable: false
229075
+ },
229076
+ rgbToAnsi: {
229077
+ value: (red, green, blue) => styles$2.ansi256ToAnsi(styles$2.rgbToAnsi256(red, green, blue)),
229078
+ enumerable: false
229079
+ },
229080
+ hexToAnsi: {
229081
+ value: (hex) => styles$2.ansi256ToAnsi(styles$2.hexToAnsi256(hex)),
229082
+ enumerable: false
229083
+ }
229084
+ });
229085
+ return styles$2;
229086
+ }
229087
+ const ansiStyles$1 = assembleStyles$1();
229088
+ //#endregion
229089
+ //#region ../../node_modules/.pnpm/chalk@6.0.0/node_modules/chalk/source/vendor/supports-color/index.js
229090
+ function hasFlag(flag, argv = globalThis.Deno ? globalThis.Deno.args : process$1.argv) {
229091
+ const prefix = flag.startsWith("-") ? "" : flag.length === 1 ? "-" : "--";
229092
+ const position = argv.indexOf(prefix + flag);
229093
+ const terminatorPosition = argv.indexOf("--");
229094
+ return position !== -1 && (terminatorPosition === -1 || position < terminatorPosition);
229095
+ }
229096
+ const { env: env$1 } = process$1;
229097
+ let flagForceColor;
229098
+ if (hasFlag("no-color") || hasFlag("no-colors") || hasFlag("color=false") || hasFlag("color=never")) flagForceColor = 0;
229099
+ else if (hasFlag("color") || hasFlag("colors") || hasFlag("color=true") || hasFlag("color=always")) flagForceColor = 1;
229100
+ function hasNumericForceColor() {
229101
+ return /^\d+$/.test(env$1.FORCE_COLOR);
229102
+ }
229103
+ function envForceColor() {
229104
+ if (!("FORCE_COLOR" in env$1)) return;
229105
+ if (env$1.FORCE_COLOR === "false") return 0;
229106
+ if (env$1.FORCE_COLOR === "true" || env$1.FORCE_COLOR.length === 0) return 1;
229107
+ if (!hasNumericForceColor()) return;
229108
+ return Math.min(Number.parseInt(env$1.FORCE_COLOR, 10), 3);
229109
+ }
229110
+ function translateLevel(level) {
229111
+ if (level === 0) return false;
229112
+ return {
229113
+ level,
229114
+ hasBasic: true,
229115
+ has256: level >= 2,
229116
+ has16m: level >= 3
229117
+ };
229118
+ }
229119
+ function _supportsColor(haveStream, { streamIsTTY, sniffFlags = true } = {}) {
229120
+ const noFlagForceColor = envForceColor();
229121
+ if (noFlagForceColor !== void 0) flagForceColor = noFlagForceColor;
229122
+ const forceColor = sniffFlags ? flagForceColor : noFlagForceColor;
229123
+ if (forceColor === 0) return 0;
229124
+ if (sniffFlags) {
229125
+ if (hasFlag("color=16m") || hasFlag("color=full") || hasFlag("color=truecolor")) return 3;
229126
+ if (hasFlag("color=256")) return 2;
229127
+ }
229128
+ if (forceColor !== void 0 && hasNumericForceColor()) return forceColor;
229129
+ if ("TF_BUILD" in env$1 && "AGENT_NAME" in env$1) return 1;
229130
+ if (haveStream && !streamIsTTY && forceColor === void 0) return 0;
229131
+ const min = forceColor || 0;
229132
+ if (env$1.TERM === "dumb") return min;
229133
+ if (process$1.platform === "win32") {
229134
+ const osRelease = os.release().split(".");
229135
+ if (Number(osRelease[0]) >= 10 && Number(osRelease[2]) >= 10586) return Number(osRelease[2]) >= 14931 ? 3 : 2;
229136
+ return 1;
229137
+ }
229138
+ if ("CI" in env$1) {
229139
+ if ([
229140
+ "GITHUB_ACTIONS",
229141
+ "GITEA_ACTIONS",
229142
+ "CIRCLECI"
229143
+ ].some((key) => key in env$1)) return 3;
229144
+ if ([
229145
+ "TRAVIS",
229146
+ "APPVEYOR",
229147
+ "GITLAB_CI",
229148
+ "BUILDKITE",
229149
+ "DRONE"
229150
+ ].some((sign) => sign in env$1) || env$1.CI_NAME === "codeship") return 1;
229151
+ return min;
229152
+ }
229153
+ if ("TEAMCITY_VERSION" in env$1) return /^(?:9\.0*[1-9]\d*\.|\d{2,}\.)/.test(env$1.TEAMCITY_VERSION) ? 1 : 0;
229154
+ if (env$1.COLORTERM === "truecolor") return 3;
229155
+ if (env$1.TERM === "xterm-kitty") return 3;
229156
+ if (env$1.TERM === "xterm-ghostty") return 3;
229157
+ if (env$1.TERM === "wezterm") return 3;
229158
+ if ("TERM_PROGRAM" in env$1) {
229159
+ const version = Number.parseInt((env$1.TERM_PROGRAM_VERSION || "").split(".", 1)[0], 10);
229160
+ switch (env$1.TERM_PROGRAM) {
229161
+ case "iTerm.app": return version >= 3 ? 3 : 2;
229162
+ case "Apple_Terminal": return 2;
229163
+ }
229164
+ }
229165
+ if (/-256(?:color)?$/i.test(env$1.TERM)) return 2;
229166
+ if (/^screen|^xterm|^vt100|^vt220|^rxvt|color|ansi|cygwin|linux/i.test(env$1.TERM)) return 1;
229167
+ if ("COLORTERM" in env$1) return 1;
229168
+ return min;
229169
+ }
229170
+ function createSupportsColor(stream, options = {}) {
229171
+ return translateLevel(_supportsColor(stream, {
229172
+ streamIsTTY: stream && stream.isTTY,
229173
+ ...options
229174
+ }));
229175
+ }
229176
+ //#endregion
229177
+ //#region ../../node_modules/.pnpm/chalk@6.0.0/node_modules/chalk/source/index.js
229178
+ const { stdout: stdoutColor, stderr: stderrColor } = {
229179
+ stdout: createSupportsColor({ isTTY: tty.isatty(1) }),
229180
+ stderr: createSupportsColor({ isTTY: tty.isatty(2) })
229181
+ };
229182
+ const GENERATOR = Symbol("GENERATOR");
229183
+ const STYLER = Symbol("STYLER");
229184
+ const IS_EMPTY = Symbol("IS_EMPTY");
229185
+ const LEVEL = Symbol("LEVEL");
229186
+ const styles$1 = Object.create(null);
229187
+ const assertValidLevel = (level) => {
229188
+ if (!Number.isSafeInteger(level) || level < 0 || level > 3) throw new Error("The `level` should be an integer from 0 to 3");
229189
+ };
229190
+ const levelDescriptor = {
229191
+ enumerable: true,
229192
+ get() {
229193
+ return this[LEVEL];
229194
+ },
229195
+ set(level) {
229196
+ assertValidLevel(level);
229197
+ this[LEVEL] = level;
229198
+ }
229199
+ };
229200
+ const applyOptions = (object, options = {}) => {
229201
+ if (options.level !== void 0) assertValidLevel(options.level);
229202
+ const colorLevel = stdoutColor ? stdoutColor.level : 0;
229203
+ object[LEVEL] = options.level === void 0 ? colorLevel : options.level;
229204
+ };
229205
+ const chalkFactory = (options) => {
229206
+ const chalk = (...strings) => strings.join(" ");
229207
+ applyOptions(chalk, options);
229208
+ Object.setPrototypeOf(chalk, createChalk.prototype);
229209
+ return chalk;
229210
+ };
229211
+ function createChalk(options) {
229212
+ return chalkFactory(options);
229213
+ }
229214
+ Object.setPrototypeOf(createChalk.prototype, Function.prototype);
229215
+ for (const [styleName, style] of Object.entries(ansiStyles$1)) styles$1[styleName] = { get() {
229216
+ const builder = createBuilder(this, createStyler(style.open, style.close, this[STYLER]), this[IS_EMPTY]);
229217
+ Object.defineProperty(this, styleName, { value: builder });
229218
+ return builder;
229219
+ } };
229220
+ styles$1.visible = { get() {
229221
+ const builder = createBuilder(this, this[STYLER], true);
229222
+ Object.defineProperty(this, "visible", { value: builder });
229223
+ return builder;
229224
+ } };
229225
+ const createModelConverters = (model, type) => {
229226
+ const style = ansiStyles$1[type];
229227
+ if (model === "rgb") {
229228
+ const ansi = (red, green, blue) => style.ansi(ansiStyles$1.rgbToAnsi(red, green, blue));
229229
+ const ansi256 = (red, green, blue) => style.ansi256(ansiStyles$1.rgbToAnsi256(red, green, blue));
229230
+ return [
229231
+ ansi,
229232
+ ansi,
229233
+ ansi256,
229234
+ style.ansi16m
229235
+ ];
229236
+ }
229237
+ if (model === "hex") {
229238
+ const ansi = (hex) => style.ansi(ansiStyles$1.hexToAnsi(hex));
229239
+ const ansi256 = (hex) => style.ansi256(ansiStyles$1.hexToAnsi256(hex));
229240
+ return [
229241
+ ansi,
229242
+ ansi,
229243
+ ansi256,
229244
+ (hex) => style.ansi16m(...ansiStyles$1.hexToRgb(hex))
229245
+ ];
229246
+ }
229247
+ const ansi = (code) => style.ansi(ansiStyles$1.ansi256ToAnsi(code));
229248
+ return [
229249
+ ansi,
229250
+ ansi,
229251
+ style.ansi256,
229252
+ style.ansi256
229253
+ ];
229254
+ };
229255
+ for (const model of [
229256
+ "rgb",
229257
+ "hex",
229258
+ "ansi256"
229259
+ ]) {
229260
+ const capitalizedModel = model[0].toUpperCase() + model.slice(1);
229261
+ for (const [styleName, type] of [
229262
+ [model, "color"],
229263
+ ["bg" + capitalizedModel, "bgColor"],
229264
+ ["underline" + capitalizedModel, "underlineColor"]
229265
+ ]) {
229266
+ const { close } = ansiStyles$1[type];
229267
+ const converters = createModelConverters(model, type);
229268
+ styles$1[styleName] = { get() {
229269
+ const styleFunction = function(first, second, third) {
229270
+ const open = converters[this.level](first, second, third);
229271
+ return createBuilder(this, createStyler(open, close, this[STYLER]), this[IS_EMPTY]);
229272
+ };
229273
+ Object.defineProperty(this, styleName, { value: styleFunction });
229274
+ return styleFunction;
229275
+ } };
229276
+ }
229277
+ }
229278
+ const proto = Object.defineProperties(() => {}, {
229279
+ ...styles$1,
229280
+ level: {
229281
+ enumerable: true,
229282
+ get() {
229283
+ return this[GENERATOR].level;
229284
+ },
229285
+ set(level) {
229286
+ this[GENERATOR].level = level;
229287
+ }
229288
+ }
229289
+ });
229290
+ const createStyler = (open, close, parent) => {
229291
+ let openAll;
229292
+ let closeAll;
229293
+ if (parent === void 0) {
229294
+ openAll = open;
229295
+ closeAll = close;
229296
+ } else {
229297
+ openAll = parent.openAll + open;
229298
+ closeAll = close + parent.closeAll;
229299
+ }
229300
+ return {
229301
+ open,
229302
+ close,
229303
+ openAll,
229304
+ closeAll,
229305
+ parent
229306
+ };
229307
+ };
229308
+ const createBuilder = (self, _styler, _isEmpty) => {
229309
+ const builder = (...arguments_) => {
229310
+ if (arguments_.length === 1) return applyStyle(builder, "" + arguments_[0]);
229311
+ if (arguments_.length === 2) return applyStyle(builder, arguments_[0] + " " + arguments_[1]);
229312
+ return applyStyle(builder, arguments_.join(" "));
229313
+ };
229314
+ Object.setPrototypeOf(builder, proto);
229315
+ builder[GENERATOR] = self[GENERATOR] ?? self;
229316
+ builder[STYLER] = _styler;
229317
+ builder[IS_EMPTY] = _isEmpty;
229318
+ return builder;
229319
+ };
229320
+ const applyStyle = (self, string) => {
229321
+ if (self[GENERATOR][LEVEL] <= 0 || !string) return self[IS_EMPTY] ? "" : string;
229322
+ let styler = self[STYLER];
229323
+ if (styler === void 0) return string;
229324
+ const { openAll, closeAll } = styler;
229325
+ if (string.includes("\x1B")) while (styler !== void 0) {
229326
+ string = stringReplaceAll(string, styler.close, styler.open);
229327
+ styler = styler.parent;
229328
+ }
229329
+ const lfIndex = string.indexOf("\n");
229330
+ if (lfIndex !== -1) string = stringEncaseCRLFWithFirstIndex(string, closeAll, openAll, lfIndex);
229331
+ return openAll + string + closeAll;
229332
+ };
229333
+ Object.defineProperties(createChalk.prototype, {
229334
+ ...styles$1,
229335
+ level: levelDescriptor
229336
+ });
229337
+ const chalk = createChalk();
229338
+ createChalk({ level: stderrColor ? stderrColor.level : 0 });
229339
+ //#endregion
229340
+ //#region ../chain-sdk/dist/neutral/utils.mjs
229341
+ function hexToLast4BytesInt(value) {
229342
+ assertEx$1(isHex(value), () => "value must be a hex string");
229343
+ const last4Bytes = value.slice(-8);
229344
+ return Number.parseInt(last4Bytes, 16);
229345
+ }
229346
+ function seededRandom(seed) {
229347
+ return function() {
229348
+ const x = Math.sin(seed++) * 1e4;
229349
+ return x - Math.floor(x);
229350
+ };
229351
+ }
229352
+ function shuffleWithSeed(set, seed) {
229353
+ const array = [...set].toSorted((a, b) => String(a).localeCompare(String(b)));
229354
+ const random = seededRandom(seed);
229355
+ for (let i = array.length - 1; i > 0; i--) {
229356
+ const j = Math.floor(random() * (i + 1));
229357
+ const swap = array[i];
229358
+ array[i] = array[j];
229359
+ array[j] = swap;
229360
+ }
229361
+ return array;
229362
+ }
229363
+ function spanDurationInMillis(span) {
229364
+ return span.duration[0] * 1e3 + span.duration[1] / 1e6;
229365
+ }
229366
+ (class _XyoConsoleSpanExporter extends ConsoleSpanExporter {
229367
+ static durationToLogLevel = [
229368
+ 0,
229369
+ 1,
229370
+ 10,
229371
+ 100,
229372
+ 1e3
229373
+ ];
229374
+ static logLevelToChalkColor = [
229375
+ chalk.grey,
229376
+ chalk.white,
229377
+ chalk.green,
229378
+ chalk.yellow,
229379
+ chalk.red
229380
+ ];
229381
+ _logLevel;
229382
+ constructor(logLevel = 0) {
229383
+ super();
229384
+ this._logLevel = logLevel;
229385
+ }
229386
+ get logLevel() {
229387
+ return this._logLevel;
229388
+ }
229389
+ export(spans) {
229390
+ for (const span of spans) {
229391
+ const spanLevel = this.spanLevel(span);
229392
+ if (spanLevel < this.logLevel) continue;
229393
+ const duration = spanDurationInMillis(span);
229394
+ console.log(chalk.grey([
229395
+ `Span [${span.name}]`,
229396
+ this.logColor(spanLevel)(`${duration}ms`),
229397
+ `TraceId: ${span.spanContext().traceId}`
229398
+ ].join(", ")));
229399
+ }
229400
+ }
229401
+ logColor(level) {
229402
+ return _XyoConsoleSpanExporter.logLevelToChalkColor[level] ?? chalk.magenta;
229403
+ }
229404
+ spanLevel(span) {
229405
+ let logLevel = 0;
229406
+ const duration = spanDurationInMillis(span);
229407
+ for (let x = _XyoConsoleSpanExporter.durationToLogLevel.length - 1; x >= 0; x--) if (duration > _XyoConsoleSpanExporter.durationToLogLevel[x]) {
229408
+ logLevel = x;
229409
+ break;
229410
+ }
229411
+ return logLevel;
229412
+ }
229413
+ });
228821
229414
  //#endregion
228822
229415
  //#region ../chain-sdk/dist/neutral/protocol.mjs
228823
229416
  var isBaseBuildBlockOptions = (value) => {
@@ -228947,376 +229540,6 @@ var createGenesisBlock = async (initialBlockProducer, nextContractAddress, genes
228947
229540
  return await buildGenesisBlock(nextContractAddress, [], blockPayloads, [initialBlockProducer]);
228948
229541
  };
228949
229542
  //#endregion
228950
- //#region ../chain-sdk/dist/neutral/ethereum.mjs
228951
- var __defProp$13 = Object.defineProperty;
228952
- var __getOwnPropDesc$13 = Object.getOwnPropertyDescriptor;
228953
- var __defNormalProp$13 = (obj, key, value) => key in obj ? __defProp$13(obj, key, {
228954
- enumerable: true,
228955
- configurable: true,
228956
- writable: true,
228957
- value
228958
- }) : obj[key] = value;
228959
- var __decorateClass$13 = (decorators, target, key, kind) => {
228960
- var result = kind > 1 ? void 0 : kind ? __getOwnPropDesc$13(target, key) : target;
228961
- for (var i = decorators.length - 1, decorator; i >= 0; i--) if (decorator = decorators[i]) result = (kind ? decorator(target, key, result) : decorator(result)) || result;
228962
- if (kind && result) __defProp$13(target, key, result);
228963
- return result;
228964
- };
228965
- var __publicField$13 = (obj, key, value) => __defNormalProp$13(obj, typeof key !== "symbol" ? key + "" : key, value);
228966
- var STAKE_EVENT_NAMES$1 = /* @__PURE__ */ new Set([
228967
- "StakeAdded",
228968
- "StakeRemoved",
228969
- "StakeWithdrawn"
228970
- ]);
228971
- var DEFAULT_HEAD_POLL_INTERVAL_MS$1 = 5e3;
228972
- var MIN_HEAD_POLL_INTERVAL_MS = 5e3;
228973
- var RestStakeEventsViewerOptionsZod = object$3({ headPollIntervalMs: number$1().optional() });
228974
- var RestStakeEventsViewer = class extends AbstractCreatableProvider$1 {
228975
- moniker = RestStakeEventsViewer.defaultMoniker;
228976
- completeFrames = /* @__PURE__ */ new Map();
228977
- contractInterface = new Interface(IAddressStakingEvents__factory2.abi);
228978
- currentHead;
228979
- headPollIntervalMs = DEFAULT_HEAD_POLL_INTERVAL_MS$1;
228980
- lastSuccessfulSyncAt;
228981
- manifestPromise;
228982
- positionCountCheckpoints = [];
228983
- stakeEventCache = [];
228984
- stakeEventsByPosition = /* @__PURE__ */ new Map();
228985
- syncPromise;
228986
- tailFrame;
228987
- get address() {
228988
- return toEthAddress(assertEx$1(this.config.chain.id, () => "RestStakeEventsViewer requires config.chain.id (the staking contract address)"));
228989
- }
228990
- get eventIndexBaseUrl() {
228991
- const connection = RestStakeEventsViewer.requireBoundConnection(this.config);
228992
- return assertEx$1(connection.config.type === "rest" ? connection.config.baseUrl : void 0, () => `Connection "${connection.name}" bound to RestStakeEventsViewer requires a rest baseUrl`).replace(/\/+$/, "");
228993
- }
228994
- get fetchFn() {
228995
- return this.context.fetchFn ?? fetch.bind(globalThis);
228996
- }
228997
- /** Creates the provider instance after its configuration has resolved. */
228998
- async createHandler() {
228999
- await super.createHandler();
229000
- RestStakeEventsViewer.requireBoundConnection(this.config);
229001
- const { headPollIntervalMs } = RestStakeEventsViewerOptionsZod.parse(this.config.options);
229002
- if (headPollIntervalMs !== void 0) assertEx$1(headPollIntervalMs >= MIN_HEAD_POLL_INTERVAL_MS, () => `headPollIntervalMs must be at least ${MIN_HEAD_POLL_INTERVAL_MS}ms`);
229003
- this.headPollIntervalMs = headPollIntervalMs ?? DEFAULT_HEAD_POLL_INTERVAL_MS$1;
229004
- }
229005
- async positionCount(range) {
229006
- await this.sync();
229007
- this.assertRangeAvailable(range);
229008
- if (range[0] === 0) return this.positionCountThrough(range[1]);
229009
- return this.matchingStakeEvents(range).reduce((max, event) => Math.max(max, event.args.id), -1) + 1;
229010
- }
229011
- async stakeEvents(range = [0, "latest"], filter) {
229012
- await this.sync();
229013
- this.assertRangeAvailable(range);
229014
- return this.matchingStakeEvents(range, filter);
229015
- }
229016
- assertRangeAvailable(range) {
229017
- const head = assertEx$1(this.currentHead, () => "EVM event index head is unavailable");
229018
- assertEx$1(range[1] === "latest" || range[1] <= head.block, () => `Stake-event range ends at ${range[1]}, beyond EVM event index head ${head.block}`);
229019
- }
229020
- decodeIndexedStakeEvents() {
229021
- return [...[...this.completeFrames.entries()].sort(([a], [b]) => a - b).map(([, frame]) => frame), ...this.tailFrame === void 0 ? [] : [this.tailFrame]].flatMap((frame) => frame.logs).sort((a, b) => a.blockNumber - b.blockNumber || a.transactionIndex - b.transactionIndex || a.index - b.index).flatMap((log) => {
229022
- const event = this.stakeEventFromLog(log);
229023
- return event === void 0 ? [] : [event];
229024
- });
229025
- }
229026
- async fetchJson(path) {
229027
- const response = await this.fetchFn(`${this.eventIndexBaseUrl}/${path}`);
229028
- assertEx$1(response.ok, () => `EVM event index request failed [${response.status}] for ${path}`);
229029
- return await response.json();
229030
- }
229031
- async getManifest() {
229032
- this.manifestPromise ??= (async () => {
229033
- const manifest = asEvmEventIndexManifest(await this.fetchJson(evmEventIndexManifestPath(this.address)), true);
229034
- assertEx$1(manifest.address.toLowerCase() === this.address.toLowerCase(), () => "EVM event index manifest address mismatch");
229035
- return manifest;
229036
- })();
229037
- return await this.manifestPromise;
229038
- }
229039
- indexStakeEvents(events) {
229040
- this.stakeEventCache = events;
229041
- this.positionCountCheckpoints = [];
229042
- this.stakeEventsByPosition.clear();
229043
- let maxPositionId = -1;
229044
- for (const event of events) {
229045
- const positionEvents = this.stakeEventsByPosition.get(event.args.id) ?? [];
229046
- positionEvents.push(event);
229047
- this.stakeEventsByPosition.set(event.args.id, positionEvents);
229048
- if (event.args.id > maxPositionId) {
229049
- maxPositionId = event.args.id;
229050
- this.positionCountCheckpoints.push({
229051
- count: maxPositionId + 1,
229052
- time: event.time
229053
- });
229054
- }
229055
- }
229056
- }
229057
- matchesFilter(event, range, filter) {
229058
- if (range[1] !== "latest" && event.time > range[1]) return false;
229059
- if (event.time < range[0]) return false;
229060
- if (isDefined$1(filter?.name) && event.name !== filter.name) return false;
229061
- if (isDefined$1(filter?.args?.id) && event.args.id !== filter.args.id) return false;
229062
- if (isDefined$1(filter?.args?.staked) && event.args.staked !== filter.args.staked) return false;
229063
- if (isDefined$1(filter?.args?.staker) && event.args.staker !== filter.args.staker) return false;
229064
- return true;
229065
- }
229066
- matchingStakeEvents(range, filter) {
229067
- const positionId = filter?.args?.id;
229068
- return (isDefined$1(positionId) ? this.stakeEventsByPosition.get(positionId) ?? [] : this.stakeEventCache).filter((event) => this.matchesFilter(event, range, filter));
229069
- }
229070
- positionCountThrough(end) {
229071
- if (end === "latest") return this.positionCountCheckpoints.at(-1)?.count ?? 0;
229072
- let low = 0;
229073
- let high = this.positionCountCheckpoints.length;
229074
- while (low < high) {
229075
- const middle = Math.floor((low + high) / 2);
229076
- if (this.positionCountCheckpoints[middle].time <= end) low = middle + 1;
229077
- else high = middle;
229078
- }
229079
- return this.positionCountCheckpoints[low - 1]?.count ?? 0;
229080
- }
229081
- stakeEventFromLog(log) {
229082
- const parsed = this.contractInterface.parseLog({
229083
- data: log.data,
229084
- topics: log.topics
229085
- });
229086
- if (parsed === null || !STAKE_EVENT_NAMES$1.has(parsed.name)) return;
229087
- const [staked, staker, id, amount] = parsed.args;
229088
- return {
229089
- name: parsed.name,
229090
- args: {
229091
- amount: asAttoXL1$1(amount),
229092
- id: Number(id),
229093
- staked: toAddress(staked),
229094
- staker: toAddress(staker)
229095
- },
229096
- time: log.blockNumber
229097
- };
229098
- }
229099
- async sync() {
229100
- const now = Date.now();
229101
- const elapsed = this.lastSuccessfulSyncAt === void 0 ? void 0 : now - this.lastSuccessfulSyncAt;
229102
- if (this.currentHead !== void 0 && elapsed !== void 0 && elapsed >= 0 && elapsed < this.headPollIntervalMs) return;
229103
- this.syncPromise ??= this.syncFromHead().then(() => {
229104
- this.lastSuccessfulSyncAt = Date.now();
229105
- }).finally(() => {
229106
- this.syncPromise = void 0;
229107
- });
229108
- await this.syncPromise;
229109
- }
229110
- async syncFromHead() {
229111
- const manifest = await this.getManifest();
229112
- const head = asEvmEventIndexHead(await this.fetchJson(evmEventIndexHeadPath(this.address)), true);
229113
- assertEx$1(head.address.toLowerCase() === this.address.toLowerCase(), () => "EVM event index head address mismatch");
229114
- assertEx$1(head.chainId === manifest.chainId, () => "EVM event index chain mismatch");
229115
- if (this.currentHead?.block === head.block && this.currentHead.hash === head.hash) return;
229116
- if (this.currentHead !== void 0 && (head.block < this.currentHead.block || head.block === this.currentHead.block && head.hash !== this.currentHead.hash)) {
229117
- this.completeFrames.clear();
229118
- this.tailFrame = void 0;
229119
- }
229120
- const indexedBlockCount = Math.max(0, head.block - manifest.deploymentBlock + 1);
229121
- const completeFrameCount = Math.floor(indexedBlockCount / manifest.frameSize);
229122
- const missingFrameIndexes = Array.from({ length: completeFrameCount }, (_, index) => index).filter((index) => !this.completeFrames.has(index));
229123
- await Promise.all(missingFrameIndexes.map(async (index) => {
229124
- const frame = asEvmEventIndexFrame(await this.fetchJson(evmEventIndexFramePath(this.address, index)), true);
229125
- const expectedFrom = manifest.deploymentBlock + index * manifest.frameSize;
229126
- assertEx$1(frame.fromBlock === expectedFrom, () => `EVM event index frame ${index} starts at the wrong block`);
229127
- assertEx$1(frame.toBlock === expectedFrom + manifest.frameSize - 1, () => `EVM event index frame ${index} is incomplete`);
229128
- this.completeFrames.set(index, frame);
229129
- }));
229130
- const tailStart = manifest.deploymentBlock + completeFrameCount * manifest.frameSize;
229131
- this.tailFrame = tailStart <= head.block ? asEvmEventIndexFrame(await this.fetchJson(`${evmEventIndexTailPath(this.address)}?head=${head.hash}`), true) : void 0;
229132
- if (this.tailFrame !== void 0) {
229133
- assertEx$1(this.tailFrame.fromBlock === tailStart, () => "EVM event index tail starts at the wrong block");
229134
- assertEx$1(this.tailFrame.toBlock === head.block, () => "EVM event index tail is stale relative to its head");
229135
- }
229136
- this.indexStakeEvents(this.decodeIndexedStakeEvents());
229137
- this.currentHead = head;
229138
- }
229139
- };
229140
- __publicField$13(RestStakeEventsViewer, "connectionTypes", ["rest"]);
229141
- __publicField$13(RestStakeEventsViewer, "defaultMoniker", StakeEventsViewerMoniker$1);
229142
- __publicField$13(RestStakeEventsViewer, "dependencies", []);
229143
- __publicField$13(RestStakeEventsViewer, "monikers", [StakeEventsViewerMoniker$1]);
229144
- __publicField$13(RestStakeEventsViewer, "surface", "node");
229145
- RestStakeEventsViewer = __decorateClass$13([creatableProvider$1()], RestStakeEventsViewer);
229146
- var DEFAULT_REFRESH_INTERVAL_MS = 5e3;
229147
- var MIN_REFRESH_INTERVAL_MS = 5e3;
229148
- var RestStakeViewerOptionsZod = object$3({ refreshIntervalMs: number$1().optional() });
229149
- var RestStakeViewer = class extends AbstractCreatableProvider$1 {
229150
- moniker = RestStakeViewer.defaultMoniker;
229151
- _chainContractViewer;
229152
- _stakeEventsViewer;
229153
- lastSuccessfulSyncAt;
229154
- positionIndex = /* @__PURE__ */ new Map();
229155
- positionsByStaked = /* @__PURE__ */ new Map();
229156
- positionsByStaker = /* @__PURE__ */ new Map();
229157
- refreshIntervalMs = DEFAULT_REFRESH_INTERVAL_MS;
229158
- syncPromise;
229159
- /** Returns the finalized stake-event source used to materialize positions. */
229160
- get stakeEvents() {
229161
- return this._stakeEventsViewer;
229162
- }
229163
- /** Returns active finalized stake positions. */
229164
- async activeStakes() {
229165
- await this.sync();
229166
- return this.positionIndex.values().filter((position) => position.removeBlock === 0 && position.withdrawBlock === 0).toArray();
229167
- }
229168
- /** Creates the provider after its REST binding and dependencies resolve. */
229169
- async createHandler() {
229170
- await super.createHandler();
229171
- RestStakeViewer.requireBoundConnection(this.config);
229172
- const { refreshIntervalMs } = RestStakeViewerOptionsZod.parse(this.config.options);
229173
- if (refreshIntervalMs !== void 0) assertEx$1(refreshIntervalMs >= MIN_REFRESH_INTERVAL_MS, () => `refreshIntervalMs must be at least ${MIN_REFRESH_INTERVAL_MS}ms`);
229174
- this.refreshIntervalMs = refreshIntervalMs ?? DEFAULT_REFRESH_INTERVAL_MS;
229175
- this._chainContractViewer = await this.locator.getInstance(ChainContractViewerMoniker$1);
229176
- this._stakeEventsViewer = await this.locator.getInstance(StakeEventsViewerMoniker$1);
229177
- }
229178
- /** Returns the configured chain's withdrawal delay. */
229179
- async minWithdrawalBlocks() {
229180
- return await this._chainContractViewer.minWithdrawalBlocks();
229181
- }
229182
- /** Returns finalized positions that have been removed but not withdrawn. */
229183
- async removedStakes() {
229184
- await this.sync();
229185
- return this.positionIndex.values().filter((position) => position.removeBlock !== 0 && position.withdrawBlock === 0).toArray();
229186
- }
229187
- /** Returns the configured rewards contract address. */
229188
- async rewardsContract() {
229189
- return toAddress(await this._chainContractViewer.rewardsContract());
229190
- }
229191
- /** Returns a finalized position by its contract id. */
229192
- async stakeById(id) {
229193
- await this.sync();
229194
- return assertEx$1(this.positionIndex.get(id), () => `RestStakeViewer: position ${id} not found in finalized event index`);
229195
- }
229196
- /** Returns a staker's finalized position by its contract slot. */
229197
- async stakeByStaker(staker, slot) {
229198
- await this.sync();
229199
- const position = this.positionsByStaker.get(toAddress(staker))?.at(slot);
229200
- return assertEx$1(position, () => `RestStakeViewer: staker ${staker} has no finalized position at slot ${slot}`);
229201
- }
229202
- /** Returns finalized positions added for an address in the supplied EVM block range. */
229203
- async stakesByStaked(staked, range = [0, void 0]) {
229204
- await this.sync();
229205
- return this.positionsInRange(this.positionsByStaked.get(toAddress(staked)) ?? [], range);
229206
- }
229207
- /** Returns finalized positions added by a staker in the supplied EVM block range. */
229208
- async stakesByStaker(staker, range = [0, void 0]) {
229209
- await this.sync();
229210
- return this.positionsInRange(this.positionsByStaker.get(toAddress(staker)) ?? [], range);
229211
- }
229212
- /** Returns the configured staking-token address. */
229213
- async stakingTokenAddress() {
229214
- return toAddress(await this._chainContractViewer.stakingTokenAddress());
229215
- }
229216
- /** Returns finalized positions that have completed withdrawal. */
229217
- async withdrawnStakes() {
229218
- await this.sync();
229219
- return this.positionIndex.values().filter((position) => position.removeBlock !== 0 && position.withdrawBlock !== 0).toArray();
229220
- }
229221
- applyEvent(index, event) {
229222
- if (event.name === "StakeAdded") {
229223
- index.set(event.args.id, {
229224
- id: event.args.id,
229225
- staked: toAddress(event.args.staked),
229226
- staker: toAddress(event.args.staker),
229227
- amount: event.args.amount,
229228
- addBlock: event.time,
229229
- removeBlock: 0,
229230
- withdrawBlock: 0
229231
- });
229232
- return;
229233
- }
229234
- const position = assertEx$1(index.get(event.args.id), () => `RestStakeViewer: ${event.name} precedes StakeAdded for position ${event.args.id}`);
229235
- index.set(event.args.id, {
229236
- ...position,
229237
- ...event.name === "StakeRemoved" ? { removeBlock: event.time } : { withdrawBlock: event.time }
229238
- });
229239
- }
229240
- positionsInRange(positions, range) {
229241
- const [fromBlock, configuredToBlock] = range;
229242
- const toBlock = configuredToBlock ?? Number.MAX_SAFE_INTEGER;
229243
- return positions.filter((position) => position.addBlock >= fromBlock && position.addBlock <= toBlock);
229244
- }
229245
- rebuildPositionIndex(events) {
229246
- const positionIndex = /* @__PURE__ */ new Map();
229247
- for (const event of events.toSorted((left, right) => left.time - right.time)) this.applyEvent(positionIndex, event);
229248
- const positionsByStaked = /* @__PURE__ */ new Map();
229249
- const positionsByStaker = /* @__PURE__ */ new Map();
229250
- for (const position of positionIndex.values().toArray().toSorted((left, right) => left.id - right.id)) {
229251
- const staked = toAddress(position.staked);
229252
- const staker = toAddress(position.staker);
229253
- positionsByStaked.set(staked, [...positionsByStaked.get(staked) ?? [], position]);
229254
- positionsByStaker.set(staker, [...positionsByStaker.get(staker) ?? [], position]);
229255
- }
229256
- this.positionIndex = positionIndex;
229257
- this.positionsByStaked = positionsByStaked;
229258
- this.positionsByStaker = positionsByStaker;
229259
- }
229260
- async sync() {
229261
- const now = Date.now();
229262
- const elapsed = this.lastSuccessfulSyncAt === void 0 ? void 0 : now - this.lastSuccessfulSyncAt;
229263
- if (elapsed !== void 0 && elapsed >= 0 && elapsed < this.refreshIntervalMs) return;
229264
- this.syncPromise ??= Promise.resolve(this.stakeEvents.stakeEvents([0, "latest"])).then((events) => this.rebuildPositionIndex(events)).then(() => {
229265
- this.lastSuccessfulSyncAt = Date.now();
229266
- }).finally(() => {
229267
- this.syncPromise = void 0;
229268
- });
229269
- await this.syncPromise;
229270
- }
229271
- };
229272
- __publicField$13(RestStakeViewer, "connectionTypes", ["rest"]);
229273
- __publicField$13(RestStakeViewer, "defaultMoniker", StakeViewerMoniker$1);
229274
- __publicField$13(RestStakeViewer, "dependencies", [ChainContractViewerMoniker$1, StakeEventsViewerMoniker$1]);
229275
- __publicField$13(RestStakeViewer, "monikers", [StakeViewerMoniker$1]);
229276
- __publicField$13(RestStakeViewer, "surface", "node");
229277
- RestStakeViewer = __decorateClass$13([creatableProvider$1()], RestStakeViewer);
229278
- function evmContractRunnerHandleKey(moniker) {
229279
- return `evm-contract-runner:${moniker}`;
229280
- }
229281
- var AbstractEvmRunner = class extends AbstractEvmProvider$1 {
229282
- _runner;
229283
- get runner() {
229284
- return assertEx$1(this._runner, () => "EVM contract runner not initialized");
229285
- }
229286
- /** Creates the provider instance after its dependencies and configuration have resolved. */
229287
- async createHandler() {
229288
- const key = evmContractRunnerHandleKey(this.moniker);
229289
- this._runner = await this.connectionHandles.getOrOpen(key, () => {
229290
- throw new Error(`No EVM contract runner seeded for [${this.moniker}] \u2014 set context.connectionHandles["${key}"] before create`);
229291
- });
229292
- await super.createHandler();
229293
- }
229294
- };
229295
- var EvmStakeRunner = class extends AbstractEvmRunner {
229296
- moniker = EvmStakeRunner.defaultMoniker;
229297
- async addStake(staked, amount) {
229298
- await (await this.contract.addStake(getAddress(toEthAddress(staked)), amount)).wait();
229299
- return true;
229300
- }
229301
- async removeStake(slot) {
229302
- await (await this.contract.removeStake(slot)).wait();
229303
- return true;
229304
- }
229305
- async withdrawStake(slot) {
229306
- await (await this.contract.withdrawStake(slot)).wait();
229307
- return true;
229308
- }
229309
- connectContract(address) {
229310
- return IStakedXyoChain__factory.connect(address, this.runner);
229311
- }
229312
- };
229313
- __publicField$13(EvmStakeRunner, "connectionTypes", ["evm-rpc"]);
229314
- __publicField$13(EvmStakeRunner, "defaultMoniker", StakeRunnerMoniker);
229315
- __publicField$13(EvmStakeRunner, "dependencies", []);
229316
- __publicField$13(EvmStakeRunner, "monikers", [StakeRunnerMoniker]);
229317
- __publicField$13(EvmStakeRunner, "surface", "node");
229318
- EvmStakeRunner = __decorateClass$13([creatableProvider$1()], EvmStakeRunner);
229319
- //#endregion
229320
229543
  //#region ../chain-sdk/dist/neutral/validation.mjs
229321
229544
  var BlockAllowedPayloadSchemasValidator = (context, block) => {
229322
229545
  const errors = [];
@@ -229859,23 +230082,23 @@ var validateHydratedTransactionState = async (context, tx) => {
229859
230082
  };
229860
230083
  //#endregion
229861
230084
  //#region ../chain-sdk/dist/neutral/modules.mjs
229862
- var __defProp$12 = Object.defineProperty;
229863
- var __getOwnPropDesc$12 = Object.getOwnPropertyDescriptor;
230085
+ var __defProp$13 = Object.defineProperty;
230086
+ var __getOwnPropDesc$13 = Object.getOwnPropertyDescriptor;
229864
230087
  var __getProtoOf$1 = Object.getPrototypeOf;
229865
230088
  var __reflectGet$1 = Reflect.get;
229866
- var __defNormalProp$12 = (obj, key, value) => key in obj ? __defProp$12(obj, key, {
230089
+ var __defNormalProp$13 = (obj, key, value) => key in obj ? __defProp$13(obj, key, {
229867
230090
  enumerable: true,
229868
230091
  configurable: true,
229869
230092
  writable: true,
229870
230093
  value
229871
230094
  }) : obj[key] = value;
229872
- var __decorateClass$12 = (decorators, target, key, kind) => {
229873
- var result = kind > 1 ? void 0 : kind ? __getOwnPropDesc$12(target, key) : target;
230095
+ var __decorateClass$13 = (decorators, target, key, kind) => {
230096
+ var result = kind > 1 ? void 0 : kind ? __getOwnPropDesc$13(target, key) : target;
229874
230097
  for (var i = decorators.length - 1, decorator; i >= 0; i--) if (decorator = decorators[i]) result = (kind ? decorator(target, key, result) : decorator(result)) || result;
229875
- if (kind && result) __defProp$12(target, key, result);
230098
+ if (kind && result) __defProp$13(target, key, result);
229876
230099
  return result;
229877
230100
  };
229878
- var __publicField$12 = (obj, key, value) => __defNormalProp$12(obj, typeof key !== "symbol" ? key + "" : key, value);
230101
+ var __publicField$13 = (obj, key, value) => __defNormalProp$13(obj, typeof key !== "symbol" ? key + "" : key, value);
229879
230102
  var __superGet$1 = (cls, obj, key) => __reflectGet$1(__getProtoOf$1(cls), key, obj);
229880
230103
  var BlockRewardDivinerConfigSchema = asSchema$1("network.xyo.diviner.chain.block.reward.config", true);
229881
230104
  var BlockRewardDiviner = class extends AbstractDiviner {
@@ -229935,9 +230158,9 @@ var FixedPercentageBlockRewardDiviner = class extends BlockRewardDiviner {
229935
230158
  }))).flat().filter(exists$1);
229936
230159
  }
229937
230160
  };
229938
- __publicField$12(FixedPercentageBlockRewardDiviner, "configSchemas", [BlockRewardDivinerConfigSchema, FixedPercentageBlockRewardDivinerConfigSchema]);
229939
- __publicField$12(FixedPercentageBlockRewardDiviner, "defaultConfigSchema", FixedPercentageBlockRewardDivinerConfigSchema);
229940
- FixedPercentageBlockRewardDiviner = __decorateClass$12([creatableModule$1()], FixedPercentageBlockRewardDiviner);
230161
+ __publicField$13(FixedPercentageBlockRewardDiviner, "configSchemas", [BlockRewardDivinerConfigSchema, FixedPercentageBlockRewardDivinerConfigSchema]);
230162
+ __publicField$13(FixedPercentageBlockRewardDiviner, "defaultConfigSchema", FixedPercentageBlockRewardDivinerConfigSchema);
230163
+ FixedPercentageBlockRewardDiviner = __decorateClass$13([creatableModule$1()], FixedPercentageBlockRewardDiviner);
229941
230164
  var countDecimalPlaces = (num) => {
229942
230165
  if (!Number.isFinite(num)) throw new TypeError("Input must be a finite number");
229943
230166
  const numStr = num.toString();
@@ -229983,9 +230206,9 @@ var BlockValidationDiviner = class extends AbstractDiviner {
229983
230206
  return results;
229984
230207
  }
229985
230208
  };
229986
- __publicField$12(BlockValidationDiviner, "configSchemas", [...__superGet$1(BlockValidationDiviner, BlockValidationDiviner, "configSchemas"), BlockValidationDivinerConfigSchema]);
229987
- __publicField$12(BlockValidationDiviner, "targetSchema", BlockValidationDivinerConfigSchema);
229988
- BlockValidationDiviner = __decorateClass$12([creatableModule$1()], BlockValidationDiviner);
230209
+ __publicField$13(BlockValidationDiviner, "configSchemas", [...__superGet$1(BlockValidationDiviner, BlockValidationDiviner, "configSchemas"), BlockValidationDivinerConfigSchema]);
230210
+ __publicField$13(BlockValidationDiviner, "targetSchema", BlockValidationDivinerConfigSchema);
230211
+ BlockValidationDiviner = __decorateClass$13([creatableModule$1()], BlockValidationDiviner);
229989
230212
  var HeadValidationDivinerConfigSchema = asSchema$1("network.xyo.diviner.chain.head.validation.config", true);
229990
230213
  var HeadValidationDiviner = class extends AbstractDiviner {
229991
230214
  _context;
@@ -230073,9 +230296,9 @@ var HeadValidationDiviner = class extends AbstractDiviner {
230073
230296
  });
230074
230297
  }
230075
230298
  };
230076
- __publicField$12(HeadValidationDiviner, "configSchemas", [...__superGet$1(HeadValidationDiviner, HeadValidationDiviner, "configSchemas"), HeadValidationDivinerConfigSchema]);
230077
- __publicField$12(HeadValidationDiviner, "targetSchema", HeadValidationDivinerConfigSchema);
230078
- HeadValidationDiviner = __decorateClass$12([creatableModule$1()], HeadValidationDiviner);
230299
+ __publicField$13(HeadValidationDiviner, "configSchemas", [...__superGet$1(HeadValidationDiviner, HeadValidationDiviner, "configSchemas"), HeadValidationDivinerConfigSchema]);
230300
+ __publicField$13(HeadValidationDiviner, "targetSchema", HeadValidationDivinerConfigSchema);
230301
+ HeadValidationDiviner = __decorateClass$13([creatableModule$1()], HeadValidationDiviner);
230079
230302
  var ArchivistNextWitnessConfigSchema = asSchema$1("network.xyo.witness.archivist.next.config", true);
230080
230303
  var ArchivistNextWitness = class extends AbstractWitness {
230081
230304
  static configSchemas = [...super.configSchemas, ArchivistNextWitnessConfigSchema];
@@ -230100,591 +230323,23 @@ AsObjectFactory.create(isWeightedNetworkStake);
230100
230323
  var isNetworkStakeObserve = isPayloadOfSchemaType$1(asSchema$1("network.xyo.witness.chain.stake.network.observe", true));
230101
230324
  AsObjectFactory.create(isNetworkStakeObserve);
230102
230325
  AsObjectFactory.create(isNetworkStakeObserve);
230103
- (/* @__PURE__ */ __commonJSMin(((exports, module) => {
230104
- module.exports = function shallowEqual(objA, objB, compare, compareContext) {
230105
- var ret = compare ? compare.call(compareContext, objA, objB) : void 0;
230106
- if (ret !== void 0) return !!ret;
230107
- if (objA === objB) return true;
230108
- if (typeof objA !== "object" || !objA || typeof objB !== "object" || !objB) return false;
230109
- var keysA = Object.keys(objA);
230110
- var keysB = Object.keys(objB);
230111
- if (keysA.length !== keysB.length) return false;
230112
- var bHasOwnProperty = Object.prototype.hasOwnProperty.bind(objB);
230113
- for (var idx = 0; idx < keysA.length; idx++) {
230114
- var key = keysA[idx];
230115
- if (!bHasOwnProperty(key)) return false;
230116
- var valueA = objA[key];
230117
- var valueB = objB[key];
230118
- ret = compare ? compare.call(compareContext, valueA, valueB, key) : void 0;
230119
- if (ret === false || ret === void 0 && valueA !== valueB) return false;
230120
- }
230121
- return true;
230122
- };
230123
- })))();
230124
- function stringReplaceAll(string, substring, postfix) {
230125
- let index = string.indexOf(substring);
230126
- if (index === -1) return string;
230127
- const substringLength = substring.length;
230128
- let endIndex = 0;
230129
- let returnValue = "";
230130
- do {
230131
- returnValue += string.slice(endIndex, index) + substring + postfix;
230132
- endIndex = index + substringLength;
230133
- index = string.indexOf(substring, endIndex);
230134
- } while (index !== -1);
230135
- returnValue += string.slice(endIndex);
230136
- return returnValue;
230137
- }
230138
- function stringEncaseCRLFWithFirstIndex(string, prefix, postfix, index) {
230139
- let endIndex = 0;
230140
- let returnValue = "";
230141
- do {
230142
- const isGotCR = string[index - 1] === "\r";
230143
- returnValue += string.slice(endIndex, isGotCR ? index - 1 : index) + prefix + (isGotCR ? "\r\n" : "\n") + postfix;
230144
- endIndex = index + 1;
230145
- index = string.indexOf("\n", endIndex);
230146
- } while (index !== -1);
230147
- returnValue += string.slice(endIndex);
230148
- return returnValue;
230149
- }
230150
- //#endregion
230151
- //#region ../../node_modules/.pnpm/chalk@6.0.0/node_modules/chalk/source/vendor/ansi-styles/index.js
230152
- const ANSI_BACKGROUND_OFFSET$1 = 10;
230153
- const ANSI_UNDERLINE_OFFSET = 20;
230154
- const wrapAnsi16$1 = (offset = 0) => (code) => `\u{1B}[${code + offset}m`;
230155
- const wrapAnsi256$1 = (offset = 0) => (code) => `\u{1B}[${38 + offset};5;${code}m`;
230156
- const wrapAnsi16m$1 = (offset = 0) => (red, green, blue) => `\u{1B}[${38 + offset};2;${red};${green};${blue}m`;
230157
- const wrapUnderlineAnsi = (code) => `\u{1B}[58;5;${code < 90 ? code - 30 : code - 90 + 8}m`;
230158
- const styles$2 = {
230159
- modifier: {
230160
- reset: [0, 0],
230161
- bold: [1, 22],
230162
- dim: [2, 22],
230163
- italic: [3, 23],
230164
- underline: [4, 24],
230165
- underlineDouble: ["4:2", 24],
230166
- underlineCurly: ["4:3", 24],
230167
- underlineDotted: ["4:4", 24],
230168
- underlineDashed: ["4:5", 24],
230169
- overline: [53, 55],
230170
- inverse: [7, 27],
230171
- hidden: [8, 28],
230172
- strikethrough: [9, 29]
230173
- },
230174
- color: {
230175
- black: [30, 39],
230176
- red: [31, 39],
230177
- green: [32, 39],
230178
- yellow: [33, 39],
230179
- blue: [34, 39],
230180
- magenta: [35, 39],
230181
- cyan: [36, 39],
230182
- white: [37, 39],
230183
- blackBright: [90, 39],
230184
- gray: [90, 39],
230185
- grey: [90, 39],
230186
- redBright: [91, 39],
230187
- greenBright: [92, 39],
230188
- yellowBright: [93, 39],
230189
- blueBright: [94, 39],
230190
- magentaBright: [95, 39],
230191
- cyanBright: [96, 39],
230192
- whiteBright: [97, 39]
230193
- },
230194
- bgColor: {
230195
- bgBlack: [40, 49],
230196
- bgRed: [41, 49],
230197
- bgGreen: [42, 49],
230198
- bgYellow: [43, 49],
230199
- bgBlue: [44, 49],
230200
- bgMagenta: [45, 49],
230201
- bgCyan: [46, 49],
230202
- bgWhite: [47, 49],
230203
- bgBlackBright: [100, 49],
230204
- bgGray: [100, 49],
230205
- bgGrey: [100, 49],
230206
- bgRedBright: [101, 49],
230207
- bgGreenBright: [102, 49],
230208
- bgYellowBright: [103, 49],
230209
- bgBlueBright: [104, 49],
230210
- bgMagentaBright: [105, 49],
230211
- bgCyanBright: [106, 49],
230212
- bgWhiteBright: [107, 49]
230213
- },
230214
- underlineColor: {
230215
- underlineBlack: ["58;5;0", 59],
230216
- underlineRed: ["58;5;1", 59],
230217
- underlineGreen: ["58;5;2", 59],
230218
- underlineYellow: ["58;5;3", 59],
230219
- underlineBlue: ["58;5;4", 59],
230220
- underlineMagenta: ["58;5;5", 59],
230221
- underlineCyan: ["58;5;6", 59],
230222
- underlineWhite: ["58;5;7", 59],
230223
- underlineBlackBright: ["58;5;8", 59],
230224
- underlineGray: ["58;5;8", 59],
230225
- underlineGrey: ["58;5;8", 59],
230226
- underlineRedBright: ["58;5;9", 59],
230227
- underlineGreenBright: ["58;5;10", 59],
230228
- underlineYellowBright: ["58;5;11", 59],
230229
- underlineBlueBright: ["58;5;12", 59],
230230
- underlineMagentaBright: ["58;5;13", 59],
230231
- underlineCyanBright: ["58;5;14", 59],
230232
- underlineWhiteBright: ["58;5;15", 59]
230233
- }
230234
- };
230235
- Object.keys(styles$2.modifier);
230236
- const foregroundColorNames$1 = Object.keys(styles$2.color);
230237
- const backgroundColorNames$1 = Object.keys(styles$2.bgColor);
230238
- Object.keys(styles$2.underlineColor);
230239
- [...foregroundColorNames$1, ...backgroundColorNames$1];
230240
- function assembleStyles$1() {
230241
- const codes = /* @__PURE__ */ new Map();
230242
- for (const [groupName, group] of Object.entries(styles$2)) {
230243
- for (const [styleName, style] of Object.entries(group)) {
230244
- styles$2[styleName] = {
230245
- open: `\u{1B}[${style[0]}m`,
230246
- close: `\u{1B}[${style[1]}m`
230247
- };
230248
- group[styleName] = styles$2[styleName];
230249
- codes.set(Number.parseInt(style[0], 10), style[1]);
230250
- }
230251
- Object.defineProperty(styles$2, groupName, {
230252
- value: group,
230253
- enumerable: false
230254
- });
230255
- }
230256
- Object.defineProperty(styles$2, "codes", {
230257
- value: codes,
230258
- enumerable: false
230259
- });
230260
- styles$2.color.close = "\x1B[39m";
230261
- styles$2.bgColor.close = "\x1B[49m";
230262
- styles$2.underlineColor.close = "\x1B[59m";
230263
- styles$2.color.ansi = wrapAnsi16$1();
230264
- styles$2.color.ansi256 = wrapAnsi256$1();
230265
- styles$2.color.ansi16m = wrapAnsi16m$1();
230266
- styles$2.bgColor.ansi = wrapAnsi16$1(ANSI_BACKGROUND_OFFSET$1);
230267
- styles$2.bgColor.ansi256 = wrapAnsi256$1(ANSI_BACKGROUND_OFFSET$1);
230268
- styles$2.bgColor.ansi16m = wrapAnsi16m$1(ANSI_BACKGROUND_OFFSET$1);
230269
- styles$2.underlineColor.ansi = wrapUnderlineAnsi;
230270
- styles$2.underlineColor.ansi256 = wrapAnsi256$1(ANSI_UNDERLINE_OFFSET);
230271
- styles$2.underlineColor.ansi16m = wrapAnsi16m$1(ANSI_UNDERLINE_OFFSET);
230272
- Object.defineProperties(styles$2, {
230273
- rgbToAnsi256: {
230274
- value(red, green, blue) {
230275
- if (red === green && green === blue) {
230276
- if (red < 8) return 16;
230277
- if (red > 248) return 231;
230278
- return Math.round((red - 8) / 247 * 24) + 232;
230279
- }
230280
- return 16 + 36 * Math.round(red / 255 * 5) + 6 * Math.round(green / 255 * 5) + Math.round(blue / 255 * 5);
230281
- },
230282
- enumerable: false
230283
- },
230284
- hexToRgb: {
230285
- value(hex) {
230286
- const matches = /[\da-f]{6}|[\da-f]{3}/i.exec(hex.toString(16));
230287
- if (!matches) return [
230288
- 0,
230289
- 0,
230290
- 0
230291
- ];
230292
- let [colorString] = matches;
230293
- if (colorString.length === 3) colorString = [...colorString].map((character) => character + character).join("");
230294
- const integer = Number.parseInt(colorString, 16);
230295
- return [
230296
- integer >> 16 & 255,
230297
- integer >> 8 & 255,
230298
- integer & 255
230299
- ];
230300
- },
230301
- enumerable: false
230302
- },
230303
- hexToAnsi256: {
230304
- value: (hex) => styles$2.rgbToAnsi256(...styles$2.hexToRgb(hex)),
230305
- enumerable: false
230306
- },
230307
- ansi256ToAnsi: {
230308
- value(code) {
230309
- if (code < 8) return 30 + code;
230310
- if (code < 16) return 90 + (code - 8);
230311
- let red;
230312
- let green;
230313
- let blue;
230314
- if (code >= 232) {
230315
- red = ((code - 232) * 10 + 8) / 255;
230316
- green = red;
230317
- blue = red;
230318
- } else {
230319
- code -= 16;
230320
- const remainder = code % 36;
230321
- red = Math.floor(code / 36) / 5;
230322
- green = Math.floor(remainder / 6) / 5;
230323
- blue = remainder % 6 / 5;
230324
- }
230325
- const value = Math.max(red, green, blue) * 2;
230326
- if (value === 0) return 30;
230327
- let result = 30 + (Math.round(blue) << 2 | Math.round(green) << 1 | Math.round(red));
230328
- if (value === 2) result += 60;
230329
- return result;
230330
- },
230331
- enumerable: false
230332
- },
230333
- rgbToAnsi: {
230334
- value: (red, green, blue) => styles$2.ansi256ToAnsi(styles$2.rgbToAnsi256(red, green, blue)),
230335
- enumerable: false
230336
- },
230337
- hexToAnsi: {
230338
- value: (hex) => styles$2.ansi256ToAnsi(styles$2.hexToAnsi256(hex)),
230339
- enumerable: false
230340
- }
230341
- });
230342
- return styles$2;
230343
- }
230344
- const ansiStyles$1 = assembleStyles$1();
230345
- //#endregion
230346
- //#region ../../node_modules/.pnpm/chalk@6.0.0/node_modules/chalk/source/vendor/supports-color/index.js
230347
- function hasFlag(flag, argv = globalThis.Deno ? globalThis.Deno.args : process$1.argv) {
230348
- const prefix = flag.startsWith("-") ? "" : flag.length === 1 ? "-" : "--";
230349
- const position = argv.indexOf(prefix + flag);
230350
- const terminatorPosition = argv.indexOf("--");
230351
- return position !== -1 && (terminatorPosition === -1 || position < terminatorPosition);
230352
- }
230353
- const { env: env$1 } = process$1;
230354
- let flagForceColor;
230355
- if (hasFlag("no-color") || hasFlag("no-colors") || hasFlag("color=false") || hasFlag("color=never")) flagForceColor = 0;
230356
- else if (hasFlag("color") || hasFlag("colors") || hasFlag("color=true") || hasFlag("color=always")) flagForceColor = 1;
230357
- function hasNumericForceColor() {
230358
- return /^\d+$/.test(env$1.FORCE_COLOR);
230359
- }
230360
- function envForceColor() {
230361
- if (!("FORCE_COLOR" in env$1)) return;
230362
- if (env$1.FORCE_COLOR === "false") return 0;
230363
- if (env$1.FORCE_COLOR === "true" || env$1.FORCE_COLOR.length === 0) return 1;
230364
- if (!hasNumericForceColor()) return;
230365
- return Math.min(Number.parseInt(env$1.FORCE_COLOR, 10), 3);
230366
- }
230367
- function translateLevel(level) {
230368
- if (level === 0) return false;
230369
- return {
230370
- level,
230371
- hasBasic: true,
230372
- has256: level >= 2,
230373
- has16m: level >= 3
230374
- };
230375
- }
230376
- function _supportsColor(haveStream, { streamIsTTY, sniffFlags = true } = {}) {
230377
- const noFlagForceColor = envForceColor();
230378
- if (noFlagForceColor !== void 0) flagForceColor = noFlagForceColor;
230379
- const forceColor = sniffFlags ? flagForceColor : noFlagForceColor;
230380
- if (forceColor === 0) return 0;
230381
- if (sniffFlags) {
230382
- if (hasFlag("color=16m") || hasFlag("color=full") || hasFlag("color=truecolor")) return 3;
230383
- if (hasFlag("color=256")) return 2;
230384
- }
230385
- if (forceColor !== void 0 && hasNumericForceColor()) return forceColor;
230386
- if ("TF_BUILD" in env$1 && "AGENT_NAME" in env$1) return 1;
230387
- if (haveStream && !streamIsTTY && forceColor === void 0) return 0;
230388
- const min = forceColor || 0;
230389
- if (env$1.TERM === "dumb") return min;
230390
- if (process$1.platform === "win32") {
230391
- const osRelease = os.release().split(".");
230392
- if (Number(osRelease[0]) >= 10 && Number(osRelease[2]) >= 10586) return Number(osRelease[2]) >= 14931 ? 3 : 2;
230393
- return 1;
230394
- }
230395
- if ("CI" in env$1) {
230396
- if ([
230397
- "GITHUB_ACTIONS",
230398
- "GITEA_ACTIONS",
230399
- "CIRCLECI"
230400
- ].some((key) => key in env$1)) return 3;
230401
- if ([
230402
- "TRAVIS",
230403
- "APPVEYOR",
230404
- "GITLAB_CI",
230405
- "BUILDKITE",
230406
- "DRONE"
230407
- ].some((sign) => sign in env$1) || env$1.CI_NAME === "codeship") return 1;
230408
- return min;
230409
- }
230410
- if ("TEAMCITY_VERSION" in env$1) return /^(?:9\.0*[1-9]\d*\.|\d{2,}\.)/.test(env$1.TEAMCITY_VERSION) ? 1 : 0;
230411
- if (env$1.COLORTERM === "truecolor") return 3;
230412
- if (env$1.TERM === "xterm-kitty") return 3;
230413
- if (env$1.TERM === "xterm-ghostty") return 3;
230414
- if (env$1.TERM === "wezterm") return 3;
230415
- if ("TERM_PROGRAM" in env$1) {
230416
- const version = Number.parseInt((env$1.TERM_PROGRAM_VERSION || "").split(".", 1)[0], 10);
230417
- switch (env$1.TERM_PROGRAM) {
230418
- case "iTerm.app": return version >= 3 ? 3 : 2;
230419
- case "Apple_Terminal": return 2;
230420
- }
230421
- }
230422
- if (/-256(?:color)?$/i.test(env$1.TERM)) return 2;
230423
- if (/^screen|^xterm|^vt100|^vt220|^rxvt|color|ansi|cygwin|linux/i.test(env$1.TERM)) return 1;
230424
- if ("COLORTERM" in env$1) return 1;
230425
- return min;
230426
- }
230427
- function createSupportsColor(stream, options = {}) {
230428
- return translateLevel(_supportsColor(stream, {
230429
- streamIsTTY: stream && stream.isTTY,
230430
- ...options
230431
- }));
230432
- }
230433
- //#endregion
230434
- //#region ../../node_modules/.pnpm/chalk@6.0.0/node_modules/chalk/source/index.js
230435
- const { stdout: stdoutColor, stderr: stderrColor } = {
230436
- stdout: createSupportsColor({ isTTY: tty.isatty(1) }),
230437
- stderr: createSupportsColor({ isTTY: tty.isatty(2) })
230438
- };
230439
- const GENERATOR = Symbol("GENERATOR");
230440
- const STYLER = Symbol("STYLER");
230441
- const IS_EMPTY = Symbol("IS_EMPTY");
230442
- const LEVEL = Symbol("LEVEL");
230443
- const styles$1 = Object.create(null);
230444
- const assertValidLevel = (level) => {
230445
- if (!Number.isSafeInteger(level) || level < 0 || level > 3) throw new Error("The `level` should be an integer from 0 to 3");
230446
- };
230447
- const levelDescriptor = {
230448
- enumerable: true,
230449
- get() {
230450
- return this[LEVEL];
230451
- },
230452
- set(level) {
230453
- assertValidLevel(level);
230454
- this[LEVEL] = level;
230455
- }
230456
- };
230457
- const applyOptions = (object, options = {}) => {
230458
- if (options.level !== void 0) assertValidLevel(options.level);
230459
- const colorLevel = stdoutColor ? stdoutColor.level : 0;
230460
- object[LEVEL] = options.level === void 0 ? colorLevel : options.level;
230461
- };
230462
- const chalkFactory = (options) => {
230463
- const chalk = (...strings) => strings.join(" ");
230464
- applyOptions(chalk, options);
230465
- Object.setPrototypeOf(chalk, createChalk.prototype);
230466
- return chalk;
230467
- };
230468
- function createChalk(options) {
230469
- return chalkFactory(options);
230470
- }
230471
- Object.setPrototypeOf(createChalk.prototype, Function.prototype);
230472
- for (const [styleName, style] of Object.entries(ansiStyles$1)) styles$1[styleName] = { get() {
230473
- const builder = createBuilder(this, createStyler(style.open, style.close, this[STYLER]), this[IS_EMPTY]);
230474
- Object.defineProperty(this, styleName, { value: builder });
230475
- return builder;
230476
- } };
230477
- styles$1.visible = { get() {
230478
- const builder = createBuilder(this, this[STYLER], true);
230479
- Object.defineProperty(this, "visible", { value: builder });
230480
- return builder;
230481
- } };
230482
- const createModelConverters = (model, type) => {
230483
- const style = ansiStyles$1[type];
230484
- if (model === "rgb") {
230485
- const ansi = (red, green, blue) => style.ansi(ansiStyles$1.rgbToAnsi(red, green, blue));
230486
- const ansi256 = (red, green, blue) => style.ansi256(ansiStyles$1.rgbToAnsi256(red, green, blue));
230487
- return [
230488
- ansi,
230489
- ansi,
230490
- ansi256,
230491
- style.ansi16m
230492
- ];
230493
- }
230494
- if (model === "hex") {
230495
- const ansi = (hex) => style.ansi(ansiStyles$1.hexToAnsi(hex));
230496
- const ansi256 = (hex) => style.ansi256(ansiStyles$1.hexToAnsi256(hex));
230497
- return [
230498
- ansi,
230499
- ansi,
230500
- ansi256,
230501
- (hex) => style.ansi16m(...ansiStyles$1.hexToRgb(hex))
230502
- ];
230503
- }
230504
- const ansi = (code) => style.ansi(ansiStyles$1.ansi256ToAnsi(code));
230505
- return [
230506
- ansi,
230507
- ansi,
230508
- style.ansi256,
230509
- style.ansi256
230510
- ];
230511
- };
230512
- for (const model of [
230513
- "rgb",
230514
- "hex",
230515
- "ansi256"
230516
- ]) {
230517
- const capitalizedModel = model[0].toUpperCase() + model.slice(1);
230518
- for (const [styleName, type] of [
230519
- [model, "color"],
230520
- ["bg" + capitalizedModel, "bgColor"],
230521
- ["underline" + capitalizedModel, "underlineColor"]
230522
- ]) {
230523
- const { close } = ansiStyles$1[type];
230524
- const converters = createModelConverters(model, type);
230525
- styles$1[styleName] = { get() {
230526
- const styleFunction = function(first, second, third) {
230527
- const open = converters[this.level](first, second, third);
230528
- return createBuilder(this, createStyler(open, close, this[STYLER]), this[IS_EMPTY]);
230529
- };
230530
- Object.defineProperty(this, styleName, { value: styleFunction });
230531
- return styleFunction;
230532
- } };
230533
- }
230534
- }
230535
- const proto = Object.defineProperties(() => {}, {
230536
- ...styles$1,
230537
- level: {
230538
- enumerable: true,
230539
- get() {
230540
- return this[GENERATOR].level;
230541
- },
230542
- set(level) {
230543
- this[GENERATOR].level = level;
230544
- }
230545
- }
230546
- });
230547
- const createStyler = (open, close, parent) => {
230548
- let openAll;
230549
- let closeAll;
230550
- if (parent === void 0) {
230551
- openAll = open;
230552
- closeAll = close;
230553
- } else {
230554
- openAll = parent.openAll + open;
230555
- closeAll = close + parent.closeAll;
230556
- }
230557
- return {
230558
- open,
230559
- close,
230560
- openAll,
230561
- closeAll,
230562
- parent
230563
- };
230564
- };
230565
- const createBuilder = (self, _styler, _isEmpty) => {
230566
- const builder = (...arguments_) => {
230567
- if (arguments_.length === 1) return applyStyle(builder, "" + arguments_[0]);
230568
- if (arguments_.length === 2) return applyStyle(builder, arguments_[0] + " " + arguments_[1]);
230569
- return applyStyle(builder, arguments_.join(" "));
230570
- };
230571
- Object.setPrototypeOf(builder, proto);
230572
- builder[GENERATOR] = self[GENERATOR] ?? self;
230573
- builder[STYLER] = _styler;
230574
- builder[IS_EMPTY] = _isEmpty;
230575
- return builder;
230576
- };
230577
- const applyStyle = (self, string) => {
230578
- if (self[GENERATOR][LEVEL] <= 0 || !string) return self[IS_EMPTY] ? "" : string;
230579
- let styler = self[STYLER];
230580
- if (styler === void 0) return string;
230581
- const { openAll, closeAll } = styler;
230582
- if (string.includes("\x1B")) while (styler !== void 0) {
230583
- string = stringReplaceAll(string, styler.close, styler.open);
230584
- styler = styler.parent;
230585
- }
230586
- const lfIndex = string.indexOf("\n");
230587
- if (lfIndex !== -1) string = stringEncaseCRLFWithFirstIndex(string, closeAll, openAll, lfIndex);
230588
- return openAll + string + closeAll;
230589
- };
230590
- Object.defineProperties(createChalk.prototype, {
230591
- ...styles$1,
230592
- level: levelDescriptor
230593
- });
230594
- const chalk = createChalk();
230595
- createChalk({ level: stderrColor ? stderrColor.level : 0 });
230596
- //#endregion
230597
- //#region ../chain-sdk/dist/neutral/utils.mjs
230598
- function hexToLast4BytesInt(value) {
230599
- assertEx$1(isHex(value), () => "value must be a hex string");
230600
- const last4Bytes = value.slice(-8);
230601
- return Number.parseInt(last4Bytes, 16);
230602
- }
230603
- function seededRandom(seed) {
230604
- return function() {
230605
- const x = Math.sin(seed++) * 1e4;
230606
- return x - Math.floor(x);
230607
- };
230608
- }
230609
- function shuffleWithSeed(set, seed) {
230610
- const array = [...set].toSorted((a, b) => String(a).localeCompare(String(b)));
230611
- const random = seededRandom(seed);
230612
- for (let i = array.length - 1; i > 0; i--) {
230613
- const j = Math.floor(random() * (i + 1));
230614
- const swap = array[i];
230615
- array[i] = array[j];
230616
- array[j] = swap;
230617
- }
230618
- return array;
230619
- }
230620
- function spanDurationInMillis(span) {
230621
- return span.duration[0] * 1e3 + span.duration[1] / 1e6;
230622
- }
230623
- (class _XyoConsoleSpanExporter extends ConsoleSpanExporter {
230624
- static durationToLogLevel = [
230625
- 0,
230626
- 1,
230627
- 10,
230628
- 100,
230629
- 1e3
230630
- ];
230631
- static logLevelToChalkColor = [
230632
- chalk.grey,
230633
- chalk.white,
230634
- chalk.green,
230635
- chalk.yellow,
230636
- chalk.red
230637
- ];
230638
- _logLevel;
230639
- constructor(logLevel = 0) {
230640
- super();
230641
- this._logLevel = logLevel;
230642
- }
230643
- get logLevel() {
230644
- return this._logLevel;
230645
- }
230646
- export(spans) {
230647
- for (const span of spans) {
230648
- const spanLevel = this.spanLevel(span);
230649
- if (spanLevel < this.logLevel) continue;
230650
- const duration = spanDurationInMillis(span);
230651
- console.log(chalk.grey([
230652
- `Span [${span.name}]`,
230653
- this.logColor(spanLevel)(`${duration}ms`),
230654
- `TraceId: ${span.spanContext().traceId}`
230655
- ].join(", ")));
230656
- }
230657
- }
230658
- logColor(level) {
230659
- return _XyoConsoleSpanExporter.logLevelToChalkColor[level] ?? chalk.magenta;
230660
- }
230661
- spanLevel(span) {
230662
- let logLevel = 0;
230663
- const duration = spanDurationInMillis(span);
230664
- for (let x = _XyoConsoleSpanExporter.durationToLogLevel.length - 1; x >= 0; x--) if (duration > _XyoConsoleSpanExporter.durationToLogLevel[x]) {
230665
- logLevel = x;
230666
- break;
230667
- }
230668
- return logLevel;
230669
- }
230670
- });
230671
230326
  //#endregion
230672
230327
  //#region ../chain-sdk/dist/neutral/services.mjs
230673
- var __defProp$11 = Object.defineProperty;
230674
- var __getOwnPropDesc$11 = Object.getOwnPropertyDescriptor;
230675
- var __defNormalProp$11 = (obj, key, value) => key in obj ? __defProp$11(obj, key, {
230328
+ var __defProp$12 = Object.defineProperty;
230329
+ var __getOwnPropDesc$12 = Object.getOwnPropertyDescriptor;
230330
+ var __defNormalProp$12 = (obj, key, value) => key in obj ? __defProp$12(obj, key, {
230676
230331
  enumerable: true,
230677
230332
  configurable: true,
230678
230333
  writable: true,
230679
230334
  value
230680
230335
  }) : obj[key] = value;
230681
- var __decorateClass$11 = (decorators, target, key, kind) => {
230682
- var result = kind > 1 ? void 0 : kind ? __getOwnPropDesc$11(target, key) : target;
230336
+ var __decorateClass$12 = (decorators, target, key, kind) => {
230337
+ var result = kind > 1 ? void 0 : kind ? __getOwnPropDesc$12(target, key) : target;
230683
230338
  for (var i = decorators.length - 1, decorator; i >= 0; i--) if (decorator = decorators[i]) result = (kind ? decorator(target, key, result) : decorator(result)) || result;
230684
- if (kind && result) __defProp$11(target, key, result);
230339
+ if (kind && result) __defProp$12(target, key, result);
230685
230340
  return result;
230686
230341
  };
230687
- var __publicField$11 = (obj, key, value) => __defNormalProp$11(obj, typeof key !== "symbol" ? key + "" : key, value);
230342
+ var __publicField$12 = (obj, key, value) => __defNormalProp$12(obj, typeof key !== "symbol" ? key + "" : key, value);
230688
230343
  var ValidatorMoniker = "Validator";
230689
230344
  var XyoValidator = class extends AbstractCreatableProvider$1 {
230690
230345
  moniker = XyoValidator.defaultMoniker;
@@ -230705,12 +230360,12 @@ var XyoValidator = class extends AbstractCreatableProvider$1 {
230705
230360
  return true;
230706
230361
  }
230707
230362
  };
230708
- __publicField$11(XyoValidator, "connectionTypes", []);
230709
- __publicField$11(XyoValidator, "defaultMoniker", ValidatorMoniker);
230710
- __publicField$11(XyoValidator, "dependencies", [BlockViewerMoniker$1]);
230711
- __publicField$11(XyoValidator, "monikers", [ValidatorMoniker]);
230712
- __publicField$11(XyoValidator, "surface", "node");
230713
- XyoValidator = __decorateClass$11([creatableProvider$1()], XyoValidator);
230363
+ __publicField$12(XyoValidator, "connectionTypes", []);
230364
+ __publicField$12(XyoValidator, "defaultMoniker", ValidatorMoniker);
230365
+ __publicField$12(XyoValidator, "dependencies", [BlockViewerMoniker$1]);
230366
+ __publicField$12(XyoValidator, "monikers", [ValidatorMoniker]);
230367
+ __publicField$12(XyoValidator, "surface", "node");
230368
+ XyoValidator = __decorateClass$12([creatableProvider$1()], XyoValidator);
230714
230369
  var BaseElectionService = class extends AbstractCreatableProvider$1 {
230715
230370
  moniker = BaseElectionService.defaultMoniker;
230716
230371
  get blockViewer() {
@@ -230734,11 +230389,11 @@ var BaseElectionService = class extends AbstractCreatableProvider$1 {
230734
230389
  return shuffleWithSeed(new Set(candidates), hexToLast4BytesInt(previousBlockHash)).slice(0, maxSize);
230735
230390
  }
230736
230391
  };
230737
- __publicField$11(BaseElectionService, "connectionTypes", []);
230738
- __publicField$11(BaseElectionService, "defaultMoniker", "Election");
230739
- __publicField$11(BaseElectionService, "dependencies", []);
230740
- __publicField$11(BaseElectionService, "monikers", ["Election"]);
230741
- BaseElectionService = __decorateClass$11([creatableProvider$1()], BaseElectionService);
230392
+ __publicField$12(BaseElectionService, "connectionTypes", []);
230393
+ __publicField$12(BaseElectionService, "defaultMoniker", "Election");
230394
+ __publicField$12(BaseElectionService, "dependencies", []);
230395
+ __publicField$12(BaseElectionService, "monikers", ["Election"]);
230396
+ BaseElectionService = __decorateClass$12([creatableProvider$1()], BaseElectionService);
230742
230397
  var createBootstrapHead = async (account, chainId, genesisBlockRewardAmount, genesisBlockRewardAddress) => {
230743
230398
  const chain = [];
230744
230399
  const genesisBlock = await createGenesisBlock(account, chainId, genesisBlockRewardAmount, genesisBlockRewardAddress);
@@ -230768,7 +230423,7 @@ async function reportRejectedBlock(deadLetterQueueRunner, block, result, observe
230768
230423
  const signed = observer === void 0 ? void 0 : await buildSignedBlockRejection(rejection, observer);
230769
230424
  await deadLetterQueueRunner.rejectBlock(rejection, signed);
230770
230425
  }
230771
- async function processPendingBlocks({ blockValidationViewer, blockViewer, context, logger, mempoolViewer, finalizationRunner, allowedProducers, backoffMs, minCandidates, deadLetterQueueRunner, observer, admission, eligibility, publishAdmissionShadow }) {
230426
+ async function processPendingBlocks({ blockValidationViewer, blockViewer, context, logger, mempoolViewer, finalizationRunner, allowedProducers, backoffMs, heartbeatInterval, minCandidates, deadLetterQueueRunner, observer, admission, eligibility, publishAdmissionShadow }) {
230772
230427
  const start = Date.now();
230773
230428
  const currentBlock = await blockViewer.currentBlock();
230774
230429
  const headSelector = new ChainHeadSelector({
@@ -230779,6 +230434,7 @@ async function processPendingBlocks({ blockValidationViewer, blockViewer, contex
230779
230434
  windowedFinalizedChain: [currentBlock],
230780
230435
  allowedProducers,
230781
230436
  backoffMs,
230437
+ heartbeatInterval,
230782
230438
  minCandidates,
230783
230439
  admission,
230784
230440
  eligibility,
@@ -230875,11 +230531,11 @@ var BaseNetworkStakeStepRewardService = class extends AbstractCreatableProvider$
230875
230531
  throw new Error("Method [networkStakeStepRewardsForStepLevel] not implemented.");
230876
230532
  }
230877
230533
  };
230878
- __publicField$11(BaseNetworkStakeStepRewardService, "connectionTypes", []);
230879
- __publicField$11(BaseNetworkStakeStepRewardService, "defaultMoniker", NetworkStakeStepRewardViewerMoniker);
230880
- __publicField$11(BaseNetworkStakeStepRewardService, "dependencies", []);
230881
- __publicField$11(BaseNetworkStakeStepRewardService, "monikers", [NetworkStakeStepRewardViewerMoniker]);
230882
- BaseNetworkStakeStepRewardService = __decorateClass$11([creatableProvider$1()], BaseNetworkStakeStepRewardService);
230534
+ __publicField$12(BaseNetworkStakeStepRewardService, "connectionTypes", []);
230535
+ __publicField$12(BaseNetworkStakeStepRewardService, "defaultMoniker", NetworkStakeStepRewardViewerMoniker);
230536
+ __publicField$12(BaseNetworkStakeStepRewardService, "dependencies", []);
230537
+ __publicField$12(BaseNetworkStakeStepRewardService, "monikers", [NetworkStakeStepRewardViewerMoniker]);
230538
+ BaseNetworkStakeStepRewardService = __decorateClass$12([creatableProvider$1()], BaseNetworkStakeStepRewardService);
230883
230539
  function selectSupersededCandidate(candidates, address, block, previous) {
230884
230540
  const own = candidates.filter((candidate) => candidate.block === block && candidate.previous === previous && candidate.addresses.includes(address));
230885
230541
  if (own.length === 0) return void 0;
@@ -230971,6 +230627,7 @@ function producerTuningFromConfig(config) {
230971
230627
  const parsed = ProducerTuningOptionsZod.safeParse(options);
230972
230628
  return parsed.success ? parsed.data : {};
230973
230629
  }
230630
+ var DEFAULT_HEARTBEAT_INTERVAL = 3e5;
230974
230631
  var SimpleBlockRunner = class extends AbstractCreatableProvider$1 {
230975
230632
  moniker = SimpleBlockRunner.defaultMoniker;
230976
230633
  _blockRewardDiviner;
@@ -231030,7 +230687,7 @@ var SimpleBlockRunner = class extends AbstractCreatableProvider$1 {
231030
230687
  return this._finalizationViewer;
231031
230688
  }
231032
230689
  get heartbeatInterval() {
231033
- return this.params.heartbeatInterval ?? this.producerTuning.heartbeatInterval ?? 36e5;
230690
+ return this.params.heartbeatInterval ?? this.producerTuning.heartbeatInterval ?? 3e5;
231034
230691
  }
231035
230692
  get mempoolViewer() {
231036
230693
  return this._mempoolViewer;
@@ -231371,14 +231028,14 @@ var SimpleBlockRunner = class extends AbstractCreatableProvider$1 {
231371
231028
  * no attributable transaction to exclude). Such a build fails identically until external state
231372
231029
  * changes, so retrying at the production tick rate only churns build → validate → DLQ.
231373
231030
  */
231374
- __publicField$11(SimpleBlockRunner, "RejectedBuildBackoffMs", 1e3);
231375
- __publicField$11(SimpleBlockRunner, "connectionTypes", [
231031
+ __publicField$12(SimpleBlockRunner, "RejectedBuildBackoffMs", 1e3);
231032
+ __publicField$12(SimpleBlockRunner, "connectionTypes", [
231376
231033
  "lmdb",
231377
231034
  "mongo",
231378
231035
  "memory"
231379
231036
  ]);
231380
- __publicField$11(SimpleBlockRunner, "defaultMoniker", BlockRunnerMoniker);
231381
- __publicField$11(SimpleBlockRunner, "dependencies", [
231037
+ __publicField$12(SimpleBlockRunner, "defaultMoniker", BlockRunnerMoniker);
231038
+ __publicField$12(SimpleBlockRunner, "dependencies", [
231382
231039
  AccountBalanceViewerMoniker$1,
231383
231040
  BlockRewardViewerMoniker$1,
231384
231041
  BlockValidationViewerMoniker$1,
@@ -231386,9 +231043,379 @@ __publicField$11(SimpleBlockRunner, "dependencies", [
231386
231043
  MempoolViewerMoniker$1,
231387
231044
  TimeSyncViewerMoniker$1
231388
231045
  ]);
231389
- __publicField$11(SimpleBlockRunner, "monikers", [BlockRunnerMoniker]);
231390
- __publicField$11(SimpleBlockRunner, "surface", "node");
231391
- SimpleBlockRunner = __decorateClass$11([creatableProvider$1()], SimpleBlockRunner);
231046
+ __publicField$12(SimpleBlockRunner, "monikers", [BlockRunnerMoniker]);
231047
+ __publicField$12(SimpleBlockRunner, "surface", "node");
231048
+ SimpleBlockRunner = __decorateClass$12([creatableProvider$1()], SimpleBlockRunner);
231049
+ //#endregion
231050
+ //#region ../chain-sdk/dist/neutral/ethereum.mjs
231051
+ var __defProp$11 = Object.defineProperty;
231052
+ var __getOwnPropDesc$11 = Object.getOwnPropertyDescriptor;
231053
+ var __defNormalProp$11 = (obj, key, value) => key in obj ? __defProp$11(obj, key, {
231054
+ enumerable: true,
231055
+ configurable: true,
231056
+ writable: true,
231057
+ value
231058
+ }) : obj[key] = value;
231059
+ var __decorateClass$11 = (decorators, target, key, kind) => {
231060
+ var result = kind > 1 ? void 0 : kind ? __getOwnPropDesc$11(target, key) : target;
231061
+ for (var i = decorators.length - 1, decorator; i >= 0; i--) if (decorator = decorators[i]) result = (kind ? decorator(target, key, result) : decorator(result)) || result;
231062
+ if (kind && result) __defProp$11(target, key, result);
231063
+ return result;
231064
+ };
231065
+ var __publicField$11 = (obj, key, value) => __defNormalProp$11(obj, typeof key !== "symbol" ? key + "" : key, value);
231066
+ var STAKE_EVENT_NAMES$1 = /* @__PURE__ */ new Set([
231067
+ "StakeAdded",
231068
+ "StakeRemoved",
231069
+ "StakeWithdrawn"
231070
+ ]);
231071
+ var DEFAULT_HEAD_POLL_INTERVAL_MS$1 = 5e3;
231072
+ var MIN_HEAD_POLL_INTERVAL_MS = 5e3;
231073
+ var RestStakeEventsViewerOptionsZod = object$3({ headPollIntervalMs: number$1().optional() });
231074
+ var RestStakeEventsViewer = class extends AbstractCreatableProvider$1 {
231075
+ moniker = RestStakeEventsViewer.defaultMoniker;
231076
+ completeFrames = /* @__PURE__ */ new Map();
231077
+ contractInterface = new Interface(IAddressStakingEvents__factory2.abi);
231078
+ currentHead;
231079
+ headPollIntervalMs = DEFAULT_HEAD_POLL_INTERVAL_MS$1;
231080
+ lastSuccessfulSyncAt;
231081
+ manifestPromise;
231082
+ positionCountCheckpoints = [];
231083
+ stakeEventCache = [];
231084
+ stakeEventsByPosition = /* @__PURE__ */ new Map();
231085
+ syncPromise;
231086
+ tailFrame;
231087
+ get address() {
231088
+ return toEthAddress(assertEx$1(this.config.chain.id, () => "RestStakeEventsViewer requires config.chain.id (the staking contract address)"));
231089
+ }
231090
+ get eventIndexBaseUrl() {
231091
+ const connection = RestStakeEventsViewer.requireBoundConnection(this.config);
231092
+ return assertEx$1(connection.config.type === "rest" ? connection.config.baseUrl : void 0, () => `Connection "${connection.name}" bound to RestStakeEventsViewer requires a rest baseUrl`).replace(/\/+$/, "");
231093
+ }
231094
+ get fetchFn() {
231095
+ return this.context.fetchFn ?? fetch.bind(globalThis);
231096
+ }
231097
+ /** Creates the provider instance after its configuration has resolved. */
231098
+ async createHandler() {
231099
+ await super.createHandler();
231100
+ RestStakeEventsViewer.requireBoundConnection(this.config);
231101
+ const { headPollIntervalMs } = RestStakeEventsViewerOptionsZod.parse(this.config.options);
231102
+ if (headPollIntervalMs !== void 0) assertEx$1(headPollIntervalMs >= MIN_HEAD_POLL_INTERVAL_MS, () => `headPollIntervalMs must be at least ${MIN_HEAD_POLL_INTERVAL_MS}ms`);
231103
+ this.headPollIntervalMs = headPollIntervalMs ?? DEFAULT_HEAD_POLL_INTERVAL_MS$1;
231104
+ }
231105
+ async positionCount(range) {
231106
+ await this.sync();
231107
+ this.assertRangeAvailable(range);
231108
+ if (range[0] === 0) return this.positionCountThrough(range[1]);
231109
+ return this.matchingStakeEvents(range).reduce((max, event) => Math.max(max, event.args.id), -1) + 1;
231110
+ }
231111
+ async stakeEvents(range = [0, "latest"], filter) {
231112
+ await this.sync();
231113
+ this.assertRangeAvailable(range);
231114
+ return this.matchingStakeEvents(range, filter);
231115
+ }
231116
+ assertRangeAvailable(range) {
231117
+ const head = assertEx$1(this.currentHead, () => "EVM event index head is unavailable");
231118
+ assertEx$1(range[1] === "latest" || range[1] <= head.block, () => `Stake-event range ends at ${range[1]}, beyond EVM event index head ${head.block}`);
231119
+ }
231120
+ decodeIndexedStakeEvents() {
231121
+ return [...[...this.completeFrames.entries()].sort(([a], [b]) => a - b).map(([, frame]) => frame), ...this.tailFrame === void 0 ? [] : [this.tailFrame]].flatMap((frame) => frame.logs).sort((a, b) => a.blockNumber - b.blockNumber || a.transactionIndex - b.transactionIndex || a.index - b.index).flatMap((log) => {
231122
+ const event = this.stakeEventFromLog(log);
231123
+ return event === void 0 ? [] : [event];
231124
+ });
231125
+ }
231126
+ async fetchJson(path) {
231127
+ const response = await this.fetchFn(`${this.eventIndexBaseUrl}/${path}`);
231128
+ assertEx$1(response.ok, () => `EVM event index request failed [${response.status}] for ${path}`);
231129
+ return await response.json();
231130
+ }
231131
+ async getManifest() {
231132
+ this.manifestPromise ??= (async () => {
231133
+ const manifest = asEvmEventIndexManifest(await this.fetchJson(evmEventIndexManifestPath(this.address)), true);
231134
+ assertEx$1(manifest.address.toLowerCase() === this.address.toLowerCase(), () => "EVM event index manifest address mismatch");
231135
+ return manifest;
231136
+ })();
231137
+ return await this.manifestPromise;
231138
+ }
231139
+ indexStakeEvents(events) {
231140
+ this.stakeEventCache = events;
231141
+ this.positionCountCheckpoints = [];
231142
+ this.stakeEventsByPosition.clear();
231143
+ let maxPositionId = -1;
231144
+ for (const event of events) {
231145
+ const positionEvents = this.stakeEventsByPosition.get(event.args.id) ?? [];
231146
+ positionEvents.push(event);
231147
+ this.stakeEventsByPosition.set(event.args.id, positionEvents);
231148
+ if (event.args.id > maxPositionId) {
231149
+ maxPositionId = event.args.id;
231150
+ this.positionCountCheckpoints.push({
231151
+ count: maxPositionId + 1,
231152
+ time: event.time
231153
+ });
231154
+ }
231155
+ }
231156
+ }
231157
+ matchesFilter(event, range, filter) {
231158
+ if (range[1] !== "latest" && event.time > range[1]) return false;
231159
+ if (event.time < range[0]) return false;
231160
+ if (isDefined$1(filter?.name) && event.name !== filter.name) return false;
231161
+ if (isDefined$1(filter?.args?.id) && event.args.id !== filter.args.id) return false;
231162
+ if (isDefined$1(filter?.args?.staked) && event.args.staked !== filter.args.staked) return false;
231163
+ if (isDefined$1(filter?.args?.staker) && event.args.staker !== filter.args.staker) return false;
231164
+ return true;
231165
+ }
231166
+ matchingStakeEvents(range, filter) {
231167
+ const positionId = filter?.args?.id;
231168
+ return (isDefined$1(positionId) ? this.stakeEventsByPosition.get(positionId) ?? [] : this.stakeEventCache).filter((event) => this.matchesFilter(event, range, filter));
231169
+ }
231170
+ positionCountThrough(end) {
231171
+ if (end === "latest") return this.positionCountCheckpoints.at(-1)?.count ?? 0;
231172
+ let low = 0;
231173
+ let high = this.positionCountCheckpoints.length;
231174
+ while (low < high) {
231175
+ const middle = Math.floor((low + high) / 2);
231176
+ if (this.positionCountCheckpoints[middle].time <= end) low = middle + 1;
231177
+ else high = middle;
231178
+ }
231179
+ return this.positionCountCheckpoints[low - 1]?.count ?? 0;
231180
+ }
231181
+ stakeEventFromLog(log) {
231182
+ const parsed = this.contractInterface.parseLog({
231183
+ data: log.data,
231184
+ topics: log.topics
231185
+ });
231186
+ if (parsed === null || !STAKE_EVENT_NAMES$1.has(parsed.name)) return;
231187
+ const [staked, staker, id, amount] = parsed.args;
231188
+ return {
231189
+ name: parsed.name,
231190
+ args: {
231191
+ amount: asAttoXL1$1(amount),
231192
+ id: Number(id),
231193
+ staked: toAddress(staked),
231194
+ staker: toAddress(staker)
231195
+ },
231196
+ time: log.blockNumber
231197
+ };
231198
+ }
231199
+ async sync() {
231200
+ const now = Date.now();
231201
+ const elapsed = this.lastSuccessfulSyncAt === void 0 ? void 0 : now - this.lastSuccessfulSyncAt;
231202
+ if (this.currentHead !== void 0 && elapsed !== void 0 && elapsed >= 0 && elapsed < this.headPollIntervalMs) return;
231203
+ this.syncPromise ??= this.syncFromHead().then(() => {
231204
+ this.lastSuccessfulSyncAt = Date.now();
231205
+ }).finally(() => {
231206
+ this.syncPromise = void 0;
231207
+ });
231208
+ await this.syncPromise;
231209
+ }
231210
+ async syncFromHead() {
231211
+ const manifest = await this.getManifest();
231212
+ const head = asEvmEventIndexHead(await this.fetchJson(evmEventIndexHeadPath(this.address)), true);
231213
+ assertEx$1(head.address.toLowerCase() === this.address.toLowerCase(), () => "EVM event index head address mismatch");
231214
+ assertEx$1(head.chainId === manifest.chainId, () => "EVM event index chain mismatch");
231215
+ if (this.currentHead?.block === head.block && this.currentHead.hash === head.hash) return;
231216
+ if (this.currentHead !== void 0 && (head.block < this.currentHead.block || head.block === this.currentHead.block && head.hash !== this.currentHead.hash)) {
231217
+ this.completeFrames.clear();
231218
+ this.tailFrame = void 0;
231219
+ }
231220
+ const indexedBlockCount = Math.max(0, head.block - manifest.deploymentBlock + 1);
231221
+ const completeFrameCount = Math.floor(indexedBlockCount / manifest.frameSize);
231222
+ const missingFrameIndexes = Array.from({ length: completeFrameCount }, (_, index) => index).filter((index) => !this.completeFrames.has(index));
231223
+ await Promise.all(missingFrameIndexes.map(async (index) => {
231224
+ const frame = asEvmEventIndexFrame(await this.fetchJson(evmEventIndexFramePath(this.address, index)), true);
231225
+ const expectedFrom = manifest.deploymentBlock + index * manifest.frameSize;
231226
+ assertEx$1(frame.fromBlock === expectedFrom, () => `EVM event index frame ${index} starts at the wrong block`);
231227
+ assertEx$1(frame.toBlock === expectedFrom + manifest.frameSize - 1, () => `EVM event index frame ${index} is incomplete`);
231228
+ this.completeFrames.set(index, frame);
231229
+ }));
231230
+ const tailStart = manifest.deploymentBlock + completeFrameCount * manifest.frameSize;
231231
+ this.tailFrame = tailStart <= head.block ? asEvmEventIndexFrame(await this.fetchJson(`${evmEventIndexTailPath(this.address)}?head=${head.hash}`), true) : void 0;
231232
+ if (this.tailFrame !== void 0) {
231233
+ assertEx$1(this.tailFrame.fromBlock === tailStart, () => "EVM event index tail starts at the wrong block");
231234
+ assertEx$1(this.tailFrame.toBlock === head.block, () => "EVM event index tail is stale relative to its head");
231235
+ }
231236
+ this.indexStakeEvents(this.decodeIndexedStakeEvents());
231237
+ this.currentHead = head;
231238
+ }
231239
+ };
231240
+ __publicField$11(RestStakeEventsViewer, "connectionTypes", ["rest"]);
231241
+ __publicField$11(RestStakeEventsViewer, "defaultMoniker", StakeEventsViewerMoniker$1);
231242
+ __publicField$11(RestStakeEventsViewer, "dependencies", []);
231243
+ __publicField$11(RestStakeEventsViewer, "monikers", [StakeEventsViewerMoniker$1]);
231244
+ __publicField$11(RestStakeEventsViewer, "surface", "node");
231245
+ RestStakeEventsViewer = __decorateClass$11([creatableProvider$1()], RestStakeEventsViewer);
231246
+ var DEFAULT_REFRESH_INTERVAL_MS = 5e3;
231247
+ var MIN_REFRESH_INTERVAL_MS = 5e3;
231248
+ var RestStakeViewerOptionsZod = object$3({ refreshIntervalMs: number$1().optional() });
231249
+ var RestStakeViewer = class extends AbstractCreatableProvider$1 {
231250
+ moniker = RestStakeViewer.defaultMoniker;
231251
+ _chainContractViewer;
231252
+ _stakeEventsViewer;
231253
+ lastSuccessfulSyncAt;
231254
+ positionIndex = /* @__PURE__ */ new Map();
231255
+ positionsByStaked = /* @__PURE__ */ new Map();
231256
+ positionsByStaker = /* @__PURE__ */ new Map();
231257
+ refreshIntervalMs = DEFAULT_REFRESH_INTERVAL_MS;
231258
+ syncPromise;
231259
+ /** Returns the finalized stake-event source used to materialize positions. */
231260
+ get stakeEvents() {
231261
+ return this._stakeEventsViewer;
231262
+ }
231263
+ /** Returns active finalized stake positions. */
231264
+ async activeStakes() {
231265
+ await this.sync();
231266
+ return this.positionIndex.values().filter((position) => position.removeBlock === 0 && position.withdrawBlock === 0).toArray();
231267
+ }
231268
+ /** Creates the provider after its REST binding and dependencies resolve. */
231269
+ async createHandler() {
231270
+ await super.createHandler();
231271
+ RestStakeViewer.requireBoundConnection(this.config);
231272
+ const { refreshIntervalMs } = RestStakeViewerOptionsZod.parse(this.config.options);
231273
+ if (refreshIntervalMs !== void 0) assertEx$1(refreshIntervalMs >= MIN_REFRESH_INTERVAL_MS, () => `refreshIntervalMs must be at least ${MIN_REFRESH_INTERVAL_MS}ms`);
231274
+ this.refreshIntervalMs = refreshIntervalMs ?? DEFAULT_REFRESH_INTERVAL_MS;
231275
+ this._chainContractViewer = await this.locator.getInstance(ChainContractViewerMoniker$1);
231276
+ this._stakeEventsViewer = await this.locator.getInstance(StakeEventsViewerMoniker$1);
231277
+ }
231278
+ /** Returns the configured chain's withdrawal delay. */
231279
+ async minWithdrawalBlocks() {
231280
+ return await this._chainContractViewer.minWithdrawalBlocks();
231281
+ }
231282
+ /** Returns finalized positions that have been removed but not withdrawn. */
231283
+ async removedStakes() {
231284
+ await this.sync();
231285
+ return this.positionIndex.values().filter((position) => position.removeBlock !== 0 && position.withdrawBlock === 0).toArray();
231286
+ }
231287
+ /** Returns the configured rewards contract address. */
231288
+ async rewardsContract() {
231289
+ return toAddress(await this._chainContractViewer.rewardsContract());
231290
+ }
231291
+ /** Returns a finalized position by its contract id. */
231292
+ async stakeById(id) {
231293
+ await this.sync();
231294
+ return assertEx$1(this.positionIndex.get(id), () => `RestStakeViewer: position ${id} not found in finalized event index`);
231295
+ }
231296
+ /** Returns a staker's finalized position by its contract slot. */
231297
+ async stakeByStaker(staker, slot) {
231298
+ await this.sync();
231299
+ const position = this.positionsByStaker.get(toAddress(staker))?.at(slot);
231300
+ return assertEx$1(position, () => `RestStakeViewer: staker ${staker} has no finalized position at slot ${slot}`);
231301
+ }
231302
+ /** Returns finalized positions added for an address in the supplied EVM block range. */
231303
+ async stakesByStaked(staked, range = [0, void 0]) {
231304
+ await this.sync();
231305
+ return this.positionsInRange(this.positionsByStaked.get(toAddress(staked)) ?? [], range);
231306
+ }
231307
+ /** Returns finalized positions added by a staker in the supplied EVM block range. */
231308
+ async stakesByStaker(staker, range = [0, void 0]) {
231309
+ await this.sync();
231310
+ return this.positionsInRange(this.positionsByStaker.get(toAddress(staker)) ?? [], range);
231311
+ }
231312
+ /** Returns the configured staking-token address. */
231313
+ async stakingTokenAddress() {
231314
+ return toAddress(await this._chainContractViewer.stakingTokenAddress());
231315
+ }
231316
+ /** Returns finalized positions that have completed withdrawal. */
231317
+ async withdrawnStakes() {
231318
+ await this.sync();
231319
+ return this.positionIndex.values().filter((position) => position.removeBlock !== 0 && position.withdrawBlock !== 0).toArray();
231320
+ }
231321
+ applyEvent(index, event) {
231322
+ if (event.name === "StakeAdded") {
231323
+ index.set(event.args.id, {
231324
+ id: event.args.id,
231325
+ staked: toAddress(event.args.staked),
231326
+ staker: toAddress(event.args.staker),
231327
+ amount: event.args.amount,
231328
+ addBlock: event.time,
231329
+ removeBlock: 0,
231330
+ withdrawBlock: 0
231331
+ });
231332
+ return;
231333
+ }
231334
+ const position = assertEx$1(index.get(event.args.id), () => `RestStakeViewer: ${event.name} precedes StakeAdded for position ${event.args.id}`);
231335
+ index.set(event.args.id, {
231336
+ ...position,
231337
+ ...event.name === "StakeRemoved" ? { removeBlock: event.time } : { withdrawBlock: event.time }
231338
+ });
231339
+ }
231340
+ positionsInRange(positions, range) {
231341
+ const [fromBlock, configuredToBlock] = range;
231342
+ const toBlock = configuredToBlock ?? Number.MAX_SAFE_INTEGER;
231343
+ return positions.filter((position) => position.addBlock >= fromBlock && position.addBlock <= toBlock);
231344
+ }
231345
+ rebuildPositionIndex(events) {
231346
+ const positionIndex = /* @__PURE__ */ new Map();
231347
+ for (const event of events.toSorted((left, right) => left.time - right.time)) this.applyEvent(positionIndex, event);
231348
+ const positionsByStaked = /* @__PURE__ */ new Map();
231349
+ const positionsByStaker = /* @__PURE__ */ new Map();
231350
+ for (const position of positionIndex.values().toArray().toSorted((left, right) => left.id - right.id)) {
231351
+ const staked = toAddress(position.staked);
231352
+ const staker = toAddress(position.staker);
231353
+ positionsByStaked.set(staked, [...positionsByStaked.get(staked) ?? [], position]);
231354
+ positionsByStaker.set(staker, [...positionsByStaker.get(staker) ?? [], position]);
231355
+ }
231356
+ this.positionIndex = positionIndex;
231357
+ this.positionsByStaked = positionsByStaked;
231358
+ this.positionsByStaker = positionsByStaker;
231359
+ }
231360
+ async sync() {
231361
+ const now = Date.now();
231362
+ const elapsed = this.lastSuccessfulSyncAt === void 0 ? void 0 : now - this.lastSuccessfulSyncAt;
231363
+ if (elapsed !== void 0 && elapsed >= 0 && elapsed < this.refreshIntervalMs) return;
231364
+ this.syncPromise ??= Promise.resolve(this.stakeEvents.stakeEvents([0, "latest"])).then((events) => this.rebuildPositionIndex(events)).then(() => {
231365
+ this.lastSuccessfulSyncAt = Date.now();
231366
+ }).finally(() => {
231367
+ this.syncPromise = void 0;
231368
+ });
231369
+ await this.syncPromise;
231370
+ }
231371
+ };
231372
+ __publicField$11(RestStakeViewer, "connectionTypes", ["rest"]);
231373
+ __publicField$11(RestStakeViewer, "defaultMoniker", StakeViewerMoniker$1);
231374
+ __publicField$11(RestStakeViewer, "dependencies", [ChainContractViewerMoniker$1, StakeEventsViewerMoniker$1]);
231375
+ __publicField$11(RestStakeViewer, "monikers", [StakeViewerMoniker$1]);
231376
+ __publicField$11(RestStakeViewer, "surface", "node");
231377
+ RestStakeViewer = __decorateClass$11([creatableProvider$1()], RestStakeViewer);
231378
+ function evmContractRunnerHandleKey(moniker) {
231379
+ return `evm-contract-runner:${moniker}`;
231380
+ }
231381
+ var AbstractEvmRunner = class extends AbstractEvmProvider$1 {
231382
+ _runner;
231383
+ get runner() {
231384
+ return assertEx$1(this._runner, () => "EVM contract runner not initialized");
231385
+ }
231386
+ /** Creates the provider instance after its dependencies and configuration have resolved. */
231387
+ async createHandler() {
231388
+ const key = evmContractRunnerHandleKey(this.moniker);
231389
+ this._runner = await this.connectionHandles.getOrOpen(key, () => {
231390
+ throw new Error(`No EVM contract runner seeded for [${this.moniker}] \u2014 set context.connectionHandles["${key}"] before create`);
231391
+ });
231392
+ await super.createHandler();
231393
+ }
231394
+ };
231395
+ var EvmStakeRunner = class extends AbstractEvmRunner {
231396
+ moniker = EvmStakeRunner.defaultMoniker;
231397
+ async addStake(staked, amount) {
231398
+ await (await this.contract.addStake(getAddress(toEthAddress(staked)), amount)).wait();
231399
+ return true;
231400
+ }
231401
+ async removeStake(slot) {
231402
+ await (await this.contract.removeStake(slot)).wait();
231403
+ return true;
231404
+ }
231405
+ async withdrawStake(slot) {
231406
+ await (await this.contract.withdrawStake(slot)).wait();
231407
+ return true;
231408
+ }
231409
+ connectContract(address) {
231410
+ return IStakedXyoChain__factory.connect(address, this.runner);
231411
+ }
231412
+ };
231413
+ __publicField$11(EvmStakeRunner, "connectionTypes", ["evm-rpc"]);
231414
+ __publicField$11(EvmStakeRunner, "defaultMoniker", StakeRunnerMoniker);
231415
+ __publicField$11(EvmStakeRunner, "dependencies", []);
231416
+ __publicField$11(EvmStakeRunner, "monikers", [StakeRunnerMoniker]);
231417
+ __publicField$11(EvmStakeRunner, "surface", "node");
231418
+ EvmStakeRunner = __decorateClass$11([creatableProvider$1()], EvmStakeRunner);
231392
231419
  //#endregion
231393
231420
  //#region ../chain-sdk/dist/neutral/slashing.mjs
231394
231421
  function competes(first, second) {
@@ -232198,6 +232225,7 @@ var FinalizerConfigZod = /* @__PURE__ */ extend(HostActorIdentityZod, {
232198
232225
  paramsFile: /* @__PURE__ */ optional$2(/* @__PURE__ */ string$3()),
232199
232226
  backoffMs: /* @__PURE__ */ _default$1(/* @__PURE__ */ number$4(), DEFAULT_BACKOFF_MS$1),
232200
232227
  finalizationCheckInterval: /* @__PURE__ */ _default$1(/* @__PURE__ */ number$4(), 500),
232228
+ heartbeatInterval: /* @__PURE__ */ _default$1(/* @__PURE__ */ number$4(), DEFAULT_HEARTBEAT_INTERVAL),
232201
232229
  minCandidates: /* @__PURE__ */ _default$1((/* @__PURE__ */ number$5()).check(/* @__PURE__ */ _multipleOf(1), /* @__PURE__ */ _nonnegative()), 1),
232202
232230
  publishContentEncoding: /* @__PURE__ */ optional$2(/* @__PURE__ */ _enum$1([
232203
232231
  "br",
@@ -232380,6 +232408,9 @@ var FinalizerActor = class extends ChainActor {
232380
232408
  get finalizationRunner() {
232381
232409
  return this._finalizationRunner;
232382
232410
  }
232411
+ get heartbeatInterval() {
232412
+ return this.params.config.heartbeatInterval;
232413
+ }
232383
232414
  get mempoolViewer() {
232384
232415
  return this._mempoolViewer;
232385
232416
  }
@@ -232534,6 +232565,7 @@ var FinalizerActor = class extends ChainActor {
232534
232565
  finalizationRunner: this.finalizationRunner,
232535
232566
  allowedProducers: this.allowedProducers,
232536
232567
  backoffMs: this.backoffMs,
232568
+ heartbeatInterval: this.heartbeatInterval,
232537
232569
  minCandidates: this.minCandidates,
232538
232570
  admission: this.admission,
232539
232571
  eligibility: this._eligibility,
@@ -233289,7 +233321,7 @@ var ProducerConfigZod = /* @__PURE__ */ extend(ActorIdentityZod, {
233289
233321
  title: "producer.disableIntentRedeclaration",
233290
233322
  type: "boolean"
233291
233323
  }),
233292
- heartbeatInterval: (/* @__PURE__ */ _default$1(/* @__PURE__ */ number$4(), 36e5)).register(globalRegistry, {
233324
+ heartbeatInterval: (/* @__PURE__ */ _default$1(/* @__PURE__ */ number$4(), DEFAULT_HEARTBEAT_INTERVAL)).register(globalRegistry, {
233293
233325
  description: "The number of milliseconds between heartbeats if no blocks are produced",
233294
233326
  title: "producer.heartbeatInterval",
233295
233327
  type: "number"
@@ -246261,6 +246293,7 @@ function defaultDevConfig() {
246261
246293
  name: "finalizer",
246262
246294
  accountPath: "5",
246263
246295
  finalizationCheckInterval: 200,
246296
+ heartbeatInterval: 5e3,
246264
246297
  minCandidates: 1
246265
246298
  }
246266
246299
  ]
@@ -248852,8 +248885,8 @@ $0 <command> [options]`).parserConfiguration({
248852
248885
  }
248853
248886
  }).help().alias("help", "h").version(fullVersion2);
248854
248887
  }
248855
- var version = isDefined$1("5.2.0") ? "5.2.0" : "unknown";
248856
- var gitHash = isDefined$1("eb511295a") ? "eb511295a" : "";
248888
+ var version = isDefined$1("5.2.1") ? "5.2.1" : "unknown";
248889
+ var gitHash = isDefined$1("2708f0cd8") ? "2708f0cd8" : "";
248857
248890
  var fullVersion = gitHash.length > 0 ? `${version} (${gitHash})` : version;
248858
248891
  var mapXl1CliFailure = createSysExitFailureMapper();
248859
248892
  var defaultDependencies2 = {