@xyo-network/chain-sdk 4.5.6 → 5.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (55) hide show
  1. package/dist/browser/modules/analyze/ChainHeadSelector.d.ts +7 -0
  2. package/dist/browser/modules/analyze/ChainHeadSelector.d.ts.map +1 -1
  3. package/dist/browser/modules/ethereum/indexing/RestStakeEventsViewer.d.ts +4 -21
  4. package/dist/browser/modules/ethereum/indexing/RestStakeEventsViewer.d.ts.map +1 -1
  5. package/dist/browser/modules/ethereum/providers/AbstractEvmRunner.d.ts +14 -7
  6. package/dist/browser/modules/ethereum/providers/AbstractEvmRunner.d.ts.map +1 -1
  7. package/dist/browser/modules/ethereum/providers/EvmStakeRunner.d.ts +1 -4
  8. package/dist/browser/modules/ethereum/providers/EvmStakeRunner.d.ts.map +1 -1
  9. package/dist/browser/modules/services/BlockReward/EvmBlockRewardViewer.d.ts +1 -1
  10. package/dist/browser/modules/services/BlockReward/EvmBlockRewardViewer.d.ts.map +1 -1
  11. package/dist/browser/modules/services/implementation/processPendingBlocks.d.ts +2 -1
  12. package/dist/browser/modules/services/implementation/processPendingBlocks.d.ts.map +1 -1
  13. package/dist/browser/modules/services/simple/block/runner/SimpleBlockRunner.d.ts +5 -1
  14. package/dist/browser/modules/services/simple/block/runner/SimpleBlockRunner.d.ts.map +1 -1
  15. package/dist/browser/modules/services/simple/block/runner/producerTuning.d.ts +12 -9
  16. package/dist/browser/modules/services/simple/block/runner/producerTuning.d.ts.map +1 -1
  17. package/dist/neutral/analyze.mjs +3 -1
  18. package/dist/neutral/analyze.mjs.map +2 -2
  19. package/dist/neutral/ethereum.mjs +26 -26
  20. package/dist/neutral/ethereum.mjs.map +2 -2
  21. package/dist/neutral/modules/analyze/ChainHeadSelector.d.ts +7 -0
  22. package/dist/neutral/modules/analyze/ChainHeadSelector.d.ts.map +1 -1
  23. package/dist/neutral/modules/ethereum/indexing/RestStakeEventsViewer.d.ts +4 -21
  24. package/dist/neutral/modules/ethereum/indexing/RestStakeEventsViewer.d.ts.map +1 -1
  25. package/dist/neutral/modules/ethereum/providers/AbstractEvmRunner.d.ts +14 -7
  26. package/dist/neutral/modules/ethereum/providers/AbstractEvmRunner.d.ts.map +1 -1
  27. package/dist/neutral/modules/ethereum/providers/EvmStakeRunner.d.ts +1 -4
  28. package/dist/neutral/modules/ethereum/providers/EvmStakeRunner.d.ts.map +1 -1
  29. package/dist/neutral/modules/services/BlockReward/EvmBlockRewardViewer.d.ts +1 -1
  30. package/dist/neutral/modules/services/BlockReward/EvmBlockRewardViewer.d.ts.map +1 -1
  31. package/dist/neutral/modules/services/implementation/processPendingBlocks.d.ts +2 -1
  32. package/dist/neutral/modules/services/implementation/processPendingBlocks.d.ts.map +1 -1
  33. package/dist/neutral/modules/services/simple/block/runner/SimpleBlockRunner.d.ts +5 -1
  34. package/dist/neutral/modules/services/simple/block/runner/SimpleBlockRunner.d.ts.map +1 -1
  35. package/dist/neutral/modules/services/simple/block/runner/producerTuning.d.ts +12 -9
  36. package/dist/neutral/modules/services/simple/block/runner/producerTuning.d.ts.map +1 -1
  37. package/dist/neutral/services.mjs +11 -2
  38. package/dist/neutral/services.mjs.map +2 -2
  39. package/dist/node/modules/analyze/ChainHeadSelector.d.ts +7 -0
  40. package/dist/node/modules/analyze/ChainHeadSelector.d.ts.map +1 -1
  41. package/dist/node/modules/ethereum/indexing/RestStakeEventsViewer.d.ts +4 -21
  42. package/dist/node/modules/ethereum/indexing/RestStakeEventsViewer.d.ts.map +1 -1
  43. package/dist/node/modules/ethereum/providers/AbstractEvmRunner.d.ts +14 -7
  44. package/dist/node/modules/ethereum/providers/AbstractEvmRunner.d.ts.map +1 -1
  45. package/dist/node/modules/ethereum/providers/EvmStakeRunner.d.ts +1 -4
  46. package/dist/node/modules/ethereum/providers/EvmStakeRunner.d.ts.map +1 -1
  47. package/dist/node/modules/services/BlockReward/EvmBlockRewardViewer.d.ts +1 -1
  48. package/dist/node/modules/services/BlockReward/EvmBlockRewardViewer.d.ts.map +1 -1
  49. package/dist/node/modules/services/implementation/processPendingBlocks.d.ts +2 -1
  50. package/dist/node/modules/services/implementation/processPendingBlocks.d.ts.map +1 -1
  51. package/dist/node/modules/services/simple/block/runner/SimpleBlockRunner.d.ts +5 -1
  52. package/dist/node/modules/services/simple/block/runner/SimpleBlockRunner.d.ts.map +1 -1
  53. package/dist/node/modules/services/simple/block/runner/producerTuning.d.ts +12 -9
  54. package/dist/node/modules/services/simple/block/runner/producerTuning.d.ts.map +1 -1
  55. package/package.json +7 -6
@@ -7,6 +7,12 @@ export interface ChainHeadSelectorParams extends ChainFinalizerParams {
7
7
  * List of allowed producer addresses, if undefined anyone can participate
8
8
  */
9
9
  allowedProducers?: Address[];
10
+ /**
11
+ * Back-off timeout (ms) after which a head is accepted even with fewer than
12
+ * minCandidates uncle chains available.
13
+ * When undefined, findBestUncle applies DEFAULT_BACKOFF_MS from the protocol SDK.
14
+ */
15
+ backoffMs?: number;
10
16
  context: BaseContext;
11
17
  mempoolViewer: MempoolViewer;
12
18
  /**
@@ -17,6 +23,7 @@ export interface ChainHeadSelectorParams extends ChainFinalizerParams {
17
23
  }
18
24
  export declare class ChainHeadSelector extends ChainFinalizer<ChainHeadSelectorParams> {
19
25
  protected allowedProducers?: Address[];
26
+ protected backoffMs?: number;
20
27
  protected minCandidates?: number;
21
28
  private _timeSinceLastUncle;
22
29
  constructor(params: ChainHeadSelectorParams);
@@ -1 +1 @@
1
- {"version":3,"file":"ChainHeadSelector.d.ts","sourceRoot":"","sources":["../../../../src/modules/analyze/ChainHeadSelector.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,iBAAiB,CAAA;AAI9C,OAAO,KAAK,EACV,WAAW,EAAE,aAAa,EAAE,+BAA+B,EAC5D,MAAM,sBAAsB,CAAA;AAK7B,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,qBAAqB,CAAA;AAC/D,OAAO,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAA;AAEpD,MAAM,WAAW,uBAAwB,SAAQ,oBAAoB;IACnE;;OAEG;IACH,gBAAgB,CAAC,EAAE,OAAO,EAAE,CAAA;IAC5B,OAAO,EAAE,WAAW,CAAA;IACpB,aAAa,EAAE,aAAa,CAAA;IAC5B;;;OAGG;IACH,aAAa,CAAC,EAAE,MAAM,CAAA;CACvB;AAED,qBAAa,iBAAkB,SAAQ,cAAc,CAAC,uBAAuB,CAAC;IAC5E,SAAS,CAAC,gBAAgB,CAAC,EAAE,OAAO,EAAE,CAAA;IACtC,SAAS,CAAC,aAAa,CAAC,EAAE,MAAM,CAAA;IAChC,OAAO,CAAC,mBAAmB,CAAa;gBAE5B,MAAM,EAAE,uBAAuB;IAM3C,SAAS,KAAK,OAAO;;;;;;;MAEpB;IAED,SAAS,KAAK,aAAa,kBAE1B;IAEK,YAAY,IAAI,OAAO,CAAC,+BAA+B,EAAE,CAAC;CAgBjE"}
1
+ {"version":3,"file":"ChainHeadSelector.d.ts","sourceRoot":"","sources":["../../../../src/modules/analyze/ChainHeadSelector.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,iBAAiB,CAAA;AAI9C,OAAO,KAAK,EACV,WAAW,EAAE,aAAa,EAAE,+BAA+B,EAC5D,MAAM,sBAAsB,CAAA;AAK7B,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,qBAAqB,CAAA;AAC/D,OAAO,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAA;AAEpD,MAAM,WAAW,uBAAwB,SAAQ,oBAAoB;IACnE;;OAEG;IACH,gBAAgB,CAAC,EAAE,OAAO,EAAE,CAAA;IAC5B;;;;OAIG;IACH,SAAS,CAAC,EAAE,MAAM,CAAA;IAClB,OAAO,EAAE,WAAW,CAAA;IACpB,aAAa,EAAE,aAAa,CAAA;IAC5B;;;OAGG;IACH,aAAa,CAAC,EAAE,MAAM,CAAA;CACvB;AAED,qBAAa,iBAAkB,SAAQ,cAAc,CAAC,uBAAuB,CAAC;IAC5E,SAAS,CAAC,gBAAgB,CAAC,EAAE,OAAO,EAAE,CAAA;IACtC,SAAS,CAAC,SAAS,CAAC,EAAE,MAAM,CAAA;IAC5B,SAAS,CAAC,aAAa,CAAC,EAAE,MAAM,CAAA;IAChC,OAAO,CAAC,mBAAmB,CAAa;gBAE5B,MAAM,EAAE,uBAAuB;IAO3C,SAAS,KAAK,OAAO;;;;;;;MAEpB;IAED,SAAS,KAAK,aAAa,kBAE1B;IAEK,YAAY,IAAI,OAAO,CAAC,+BAA+B,EAAE,CAAC;CAgBjE"}
@@ -1,19 +1,13 @@
1
1
  import type { EthAddress } from '@ariestools/sdk';
2
- import type { CreatableProviderParams, StakeEvent, StakeEventFilter, StakeEventName, StakeEventsViewer } from '@xyo-network/xl1-sdk';
2
+ import type { StakeEvent, StakeEventFilter, StakeEventName, StakeEventsViewer } from '@xyo-network/xl1-sdk';
3
3
  import { AbstractCreatableProvider } from '@xyo-network/xl1-sdk';
4
- export interface RestStakeEventsViewerParams extends CreatableProviderParams {
5
- /** Staking contract address; defaults to `config.chain.id`. */
6
- address: EthAddress;
7
- /** Public base URL of the bucket containing the EVM event index. */
8
- eventIndexBaseUrl: string;
9
- /** Optional fetch override for tests, authentication, or a custom HTTP agent. */
10
- fetchFn?: typeof globalThis.fetch;
11
- }
12
4
  /**
13
5
  * StakeEventsViewer backed by the finalized contract-event index rather than eth_getLogs.
14
6
  * Raw indexed logs remain contract-generic; this viewer applies the staking ABI at the edge.
7
+ * The staking contract address comes from `config.chain.id` and the index bucket URL from
8
+ * the bound `rest` connection's `baseUrl`.
15
9
  */
16
- export declare class RestStakeEventsViewer extends AbstractCreatableProvider<RestStakeEventsViewerParams> implements StakeEventsViewer {
10
+ export declare class RestStakeEventsViewer extends AbstractCreatableProvider implements StakeEventsViewer {
17
11
  static readonly connectionTypes: readonly ["rest"];
18
12
  static readonly defaultMoniker: "StakeEventsViewer";
19
13
  static readonly dependencies: never[];
@@ -30,17 +24,6 @@ export declare class RestStakeEventsViewer extends AbstractCreatableProvider<Res
30
24
  get address(): EthAddress;
31
25
  get eventIndexBaseUrl(): string;
32
26
  protected get fetchFn(): typeof globalThis.fetch;
33
- static paramsHandler(params: Partial<RestStakeEventsViewerParams>): Promise<{
34
- address: EthAddress;
35
- eventIndexBaseUrl: string;
36
- fetchFn: typeof fetch | undefined;
37
- context: import("@xyo-network/xl1-sdk").CreatableProviderContextType;
38
- name?: import("@ariestools/sdk").CreatableName;
39
- statusReporter?: import("@ariestools/sdk").CreatableStatusReporter<void> | undefined;
40
- logger?: import("@ariestools/sdk").Logger;
41
- meterProvider?: import("@opentelemetry/api").MeterProvider;
42
- traceProvider?: import("@opentelemetry/api").TracerProvider;
43
- }>;
44
27
  positionCount(range: [number, number | 'latest']): Promise<number>;
45
28
  stakeEvents<TName extends StakeEventName>(range?: [number, number | 'latest'], filter?: StakeEventFilter<TName>): Promise<StakeEvent<TName>[]>;
46
29
  private decodeIndexedStakeEvents;
@@ -1 +1 @@
1
- {"version":3,"file":"RestStakeEventsViewer.d.ts","sourceRoot":"","sources":["../../../../../src/modules/ethereum/indexing/RestStakeEventsViewer.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAA;AAKjD,OAAO,KAAK,EACV,uBAAuB,EACN,UAAU,EAAE,gBAAgB,EAAE,cAAc,EAAE,iBAAiB,EACjF,MAAM,sBAAsB,CAAA;AAC7B,OAAO,EACL,yBAAyB,EAG1B,MAAM,sBAAsB,CAAA;AAK7B,MAAM,WAAW,2BAA4B,SAAQ,uBAAuB;IAC1E,+DAA+D;IAC/D,OAAO,EAAE,UAAU,CAAA;IACnB,oEAAoE;IACpE,iBAAiB,EAAE,MAAM,CAAA;IACzB,iFAAiF;IACjF,OAAO,CAAC,EAAE,OAAO,UAAU,CAAC,KAAK,CAAA;CAClC;AAED;;;GAGG;AACH,qBACa,qBAAsB,SAAQ,yBAAyB,CAAC,2BAA2B,CAAE,YAAW,iBAAiB;IAC5H,MAAM,CAAC,QAAQ,CAAC,eAAe,oBAAoB;IACnD,MAAM,CAAC,QAAQ,CAAC,cAAc,sBAA2B;IACzD,MAAM,CAAC,QAAQ,CAAC,YAAY,UAAK;IACjC,MAAM,CAAC,QAAQ,CAAC,QAAQ,wBAA6B;IACrD,MAAM,CAAC,QAAQ,CAAC,OAAO,EAAG,MAAM,CAAS;IACzC,OAAO,sBAAuC;IAE9C,OAAO,CAAC,QAAQ,CAAC,cAAc,CAAwC;IACvE,OAAO,CAAC,QAAQ,CAAC,iBAAiB,CAAoD;IACtF,OAAO,CAAC,WAAW,CAAC,CAAmB;IACvC,OAAO,CAAC,eAAe,CAAC,CAAgC;IACxD,OAAO,CAAC,eAAe,CAAmB;IAC1C,OAAO,CAAC,WAAW,CAAC,CAAe;IACnC,OAAO,CAAC,SAAS,CAAC,CAAoB;IAEtC,IAAI,OAAO,IAAI,UAAU,CAExB;IAED,IAAI,iBAAiB,IAAI,MAAM,CAE9B;IAED,SAAS,KAAK,OAAO,IAAI,OAAO,UAAU,CAAC,KAAK,CAE/C;WAEqB,aAAa,CAAC,MAAM,EAAE,OAAO,CAAC,2BAA2B,CAAC;;;;;;;;;;;IAmB1E,aAAa,CAAC,KAAK,EAAE,CAAC,MAAM,EAAE,MAAM,GAAG,QAAQ,CAAC,GAAG,OAAO,CAAC,MAAM,CAAC;IAKlE,WAAW,CAAC,KAAK,SAAS,cAAc,EAC5C,KAAK,GAAE,CAAC,MAAM,EAAE,MAAM,GAAG,QAAQ,CAAiB,EAClD,MAAM,CAAC,EAAE,gBAAgB,CAAC,KAAK,CAAC,GAC/B,OAAO,CAAC,UAAU,CAAC,KAAK,CAAC,EAAE,CAAC;IAK/B,OAAO,CAAC,wBAAwB;YAalB,SAAS;YAMT,WAAW;IAUzB,OAAO,CAAC,aAAa;IAcrB,OAAO,CAAC,iBAAiB;YAgBX,IAAI;YAOJ,YAAY;CAmC3B"}
1
+ {"version":3,"file":"RestStakeEventsViewer.d.ts","sourceRoot":"","sources":["../../../../../src/modules/ethereum/indexing/RestStakeEventsViewer.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAA;AAKjD,OAAO,KAAK,EAEV,UAAU,EAAE,gBAAgB,EAAE,cAAc,EAAE,iBAAiB,EAChE,MAAM,sBAAsB,CAAA;AAC7B,OAAO,EACL,yBAAyB,EAG1B,MAAM,sBAAsB,CAAA;AAK7B;;;;;GAKG;AACH,qBACa,qBAAsB,SAAQ,yBAA0B,YAAW,iBAAiB;IAC/F,MAAM,CAAC,QAAQ,CAAC,eAAe,oBAAoB;IACnD,MAAM,CAAC,QAAQ,CAAC,cAAc,sBAA2B;IACzD,MAAM,CAAC,QAAQ,CAAC,YAAY,UAAK;IACjC,MAAM,CAAC,QAAQ,CAAC,QAAQ,wBAA6B;IACrD,MAAM,CAAC,QAAQ,CAAC,OAAO,EAAG,MAAM,CAAS;IACzC,OAAO,sBAAuC;IAE9C,OAAO,CAAC,QAAQ,CAAC,cAAc,CAAwC;IACvE,OAAO,CAAC,QAAQ,CAAC,iBAAiB,CAAoD;IACtF,OAAO,CAAC,WAAW,CAAC,CAAmB;IACvC,OAAO,CAAC,eAAe,CAAC,CAAgC;IACxD,OAAO,CAAC,eAAe,CAAmB;IAC1C,OAAO,CAAC,WAAW,CAAC,CAAe;IACnC,OAAO,CAAC,SAAS,CAAC,CAAoB;IAEtC,IAAI,OAAO,IAAI,UAAU,CAExB;IAED,IAAI,iBAAiB,IAAI,MAAM,CAO9B;IAED,SAAS,KAAK,OAAO,IAAI,OAAO,UAAU,CAAC,KAAK,CAE/C;IAEK,aAAa,CAAC,KAAK,EAAE,CAAC,MAAM,EAAE,MAAM,GAAG,QAAQ,CAAC,GAAG,OAAO,CAAC,MAAM,CAAC;IAKlE,WAAW,CAAC,KAAK,SAAS,cAAc,EAC5C,KAAK,GAAE,CAAC,MAAM,EAAE,MAAM,GAAG,QAAQ,CAAiB,EAClD,MAAM,CAAC,EAAE,gBAAgB,CAAC,KAAK,CAAC,GAC/B,OAAO,CAAC,UAAU,CAAC,KAAK,CAAC,EAAE,CAAC;IAK/B,OAAO,CAAC,wBAAwB;YAalB,SAAS;YAMT,WAAW;IAUzB,OAAO,CAAC,aAAa;IAcrB,OAAO,CAAC,iBAAiB;YAgBX,IAAI;YAOJ,YAAY;CAmC3B"}
@@ -1,10 +1,17 @@
1
- import type { EvmViewerParams } from '@xyo-network/xl1-sdk';
2
- import { AbstractEvmViewer } from '@xyo-network/xl1-sdk';
1
+ import type { CreatableProviderParams } from '@xyo-network/xl1-sdk';
2
+ import { AbstractEvmProvider } from '@xyo-network/xl1-sdk';
3
3
  import type { BaseContract, ContractRunner } from 'ethers';
4
- export interface EvmRunnerParams extends EvmViewerParams {
5
- runner: ContractRunner;
6
- }
7
- export declare abstract class AbstractEvmRunner<TParams extends EvmRunnerParams = EvmRunnerParams, TContract extends BaseContract = BaseContract> extends AbstractEvmViewer<TParams, TContract> {
8
- static paramsHandler<T extends AbstractEvmRunner>(params: Partial<T['params']>): Promise<T['params']>;
4
+ /** Shared-handle key for a moniker's seeded EVM contract runner (ethers signer/wallet). */
5
+ export declare function evmContractRunnerHandleKey(moniker: string): string;
6
+ /**
7
+ * Base for EVM mutation providers. The contract runner (an ethers signer/wallet) is a
8
+ * thick runtime object with no config representation — hosts seed it in
9
+ * `context.connectionHandles` under `evmContractRunnerHandleKey(moniker)` before create.
10
+ */
11
+ export declare abstract class AbstractEvmRunner<TContract extends BaseContract = BaseContract, TParams extends CreatableProviderParams = CreatableProviderParams> extends AbstractEvmProvider<TParams, TContract> {
12
+ private _runner?;
13
+ protected get runner(): ContractRunner;
14
+ /** Creates the provider instance after its dependencies and configuration have resolved. */
15
+ createHandler(): Promise<void>;
9
16
  }
10
17
  //# sourceMappingURL=AbstractEvmRunner.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"AbstractEvmRunner.d.ts","sourceRoot":"","sources":["../../../../../src/modules/ethereum/providers/AbstractEvmRunner.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAA;AAC3D,OAAO,EAAE,iBAAiB,EAAE,MAAM,sBAAsB,CAAA;AACxD,OAAO,KAAK,EAAE,YAAY,EAAE,cAAc,EAAE,MAAM,QAAQ,CAAA;AAE1D,MAAM,WAAW,eAAgB,SAAQ,eAAe;IACtD,MAAM,EAAE,cAAc,CAAA;CACvB;AAED,8BAAsB,iBAAiB,CAAC,OAAO,SAAS,eAAe,GAAG,eAAe,EACvF,SAAS,SAAS,YAAY,GAAG,YAAY,CAAE,SAC/C,iBAAiB,CAAC,OAAO,EAAE,SAAS,CAAC;WACf,aAAa,CAAC,CAAC,SAAS,iBAAiB,EAAE,MAAM,EAAE,OAAO,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC;CAKrH"}
1
+ {"version":3,"file":"AbstractEvmRunner.d.ts","sourceRoot":"","sources":["../../../../../src/modules/ethereum/providers/AbstractEvmRunner.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,uBAAuB,EAAE,MAAM,sBAAsB,CAAA;AACnE,OAAO,EAAE,mBAAmB,EAAE,MAAM,sBAAsB,CAAA;AAC1D,OAAO,KAAK,EAAE,YAAY,EAAE,cAAc,EAAE,MAAM,QAAQ,CAAA;AAE1D,2FAA2F;AAC3F,wBAAgB,0BAA0B,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,CAElE;AAED;;;;GAIG;AACH,8BAAsB,iBAAiB,CAAC,SAAS,SAAS,YAAY,GAAG,YAAY,EACnF,OAAO,SAAS,uBAAuB,GAAG,uBAAuB,CAAE,SACnE,mBAAmB,CAAC,OAAO,EAAE,SAAS,CAAC;IACvC,OAAO,CAAC,OAAO,CAAC,CAAgB;IAEhC,SAAS,KAAK,MAAM,IAAI,cAAc,CAErC;IAED,4FAA4F;IAC7E,aAAa;CAO7B"}
@@ -1,11 +1,8 @@
1
1
  import type { Address, EthAddress } from '@ariestools/sdk';
2
2
  import type { IStakedXyoChain } from '@xyo-network/typechain';
3
3
  import type { StakeRunner } from '@xyo-network/xl1-sdk';
4
- import type { EvmRunnerParams } from './AbstractEvmRunner.js';
5
4
  import { AbstractEvmRunner } from './AbstractEvmRunner.js';
6
- export interface EvmStakeRunnerParams extends EvmRunnerParams {
7
- }
8
- export declare class EvmStakeRunner extends AbstractEvmRunner<EvmStakeRunnerParams, IStakedXyoChain> implements StakeRunner {
5
+ export declare class EvmStakeRunner extends AbstractEvmRunner<IStakedXyoChain> implements StakeRunner {
9
6
  static readonly connectionTypes: readonly ["evm-rpc"];
10
7
  static readonly defaultMoniker: "StakeRunner";
11
8
  static readonly dependencies: never[];
@@ -1 +1 @@
1
- {"version":3,"file":"EvmStakeRunner.d.ts","sourceRoot":"","sources":["../../../../../src/modules/ethereum/providers/EvmStakeRunner.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAA;AAE1D,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,wBAAwB,CAAA;AAE7D,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,sBAAsB,CAAA;AAOvD,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,wBAAwB,CAAA;AAC7D,OAAO,EAAE,iBAAiB,EAAE,MAAM,wBAAwB,CAAA;AAE1D,MAAM,WAAW,oBAAqB,SAAQ,eAAe;CAAG;AAEhE,qBACa,cAAe,SAAQ,iBAAiB,CAAC,oBAAoB,EAAE,eAAe,CAAE,YAAW,WAAW;IACjH,MAAM,CAAC,QAAQ,CAAC,eAAe,uBAAuB;IACtD,MAAM,CAAC,QAAQ,CAAC,cAAc,gBAAqB;IACnD,MAAM,CAAC,QAAQ,CAAC,YAAY,UAAK;IACjC,MAAM,CAAC,QAAQ,CAAC,QAAQ,kBAAuB;IAC/C,MAAM,CAAC,QAAQ,CAAC,OAAO,EAAG,MAAM,CAAS;IAChC,OAAO,gBAAgC;IAE1C,QAAQ,CAAC,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;IAM3D,WAAW,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;IAM3C,aAAa,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;cAMhC,eAAe,CAAC,OAAO,EAAE,UAAU;CAGvD"}
1
+ {"version":3,"file":"EvmStakeRunner.d.ts","sourceRoot":"","sources":["../../../../../src/modules/ethereum/providers/EvmStakeRunner.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAA;AAE1D,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,wBAAwB,CAAA;AAE7D,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,sBAAsB,CAAA;AAOvD,OAAO,EAAE,iBAAiB,EAAE,MAAM,wBAAwB,CAAA;AAE1D,qBACa,cAAe,SAAQ,iBAAiB,CAAC,eAAe,CAAE,YAAW,WAAW;IAC3F,MAAM,CAAC,QAAQ,CAAC,eAAe,uBAAuB;IACtD,MAAM,CAAC,QAAQ,CAAC,cAAc,gBAAqB;IACnD,MAAM,CAAC,QAAQ,CAAC,YAAY,UAAK;IACjC,MAAM,CAAC,QAAQ,CAAC,QAAQ,kBAAuB;IAC/C,MAAM,CAAC,QAAQ,CAAC,OAAO,EAAG,MAAM,CAAS;IAChC,OAAO,gBAAgC;IAE1C,QAAQ,CAAC,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;IAM3D,WAAW,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;IAM3C,aAAa,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;cAMhC,eAAe,CAAC,OAAO,EAAE,UAAU;CAGvD"}
@@ -1,2 +1,2 @@
1
- export { EvmBlockRewardViewer, type EvmBlockRewardViewerParams } from '@xyo-network/xl1-sdk';
1
+ export { EvmBlockRewardViewer } from '@xyo-network/xl1-sdk';
2
2
  //# sourceMappingURL=EvmBlockRewardViewer.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"EvmBlockRewardViewer.d.ts","sourceRoot":"","sources":["../../../../../src/modules/services/BlockReward/EvmBlockRewardViewer.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,oBAAoB,EAAE,KAAK,0BAA0B,EAAE,MAAM,sBAAsB,CAAA"}
1
+ {"version":3,"file":"EvmBlockRewardViewer.d.ts","sourceRoot":"","sources":["../../../../../src/modules/services/BlockReward/EvmBlockRewardViewer.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,oBAAoB,EAAE,MAAM,sBAAsB,CAAA"}
@@ -2,6 +2,7 @@ import type { Address, Logger } from '@ariestools/sdk';
2
2
  import type { BaseContext, BlockValidationViewer, BlockViewer, DeadLetterQueueRunner, FinalizationRunner, MempoolViewer } from '@xyo-network/xl1-sdk';
3
3
  interface ProcessPendingBlocksParams {
4
4
  allowedProducers?: Address[];
5
+ backoffMs?: number;
5
6
  blockValidationViewer: BlockValidationViewer;
6
7
  blockViewer: BlockViewer;
7
8
  context: BaseContext;
@@ -11,7 +12,7 @@ interface ProcessPendingBlocksParams {
11
12
  mempoolViewer: MempoolViewer;
12
13
  minCandidates?: number;
13
14
  }
14
- export declare function processPendingBlocks({ blockValidationViewer, blockViewer, context, logger, mempoolViewer, finalizationRunner, allowedProducers, minCandidates, deadLetterQueueRunner, }: ProcessPendingBlocksParams): Promise<[{
15
+ export declare function processPendingBlocks({ blockValidationViewer, blockViewer, context, logger, mempoolViewer, finalizationRunner, allowedProducers, backoffMs, minCandidates, deadLetterQueueRunner, }: ProcessPendingBlocksParams): Promise<[{
15
16
  schema: "network.xyo.boundwitness" & {
16
17
  readonly __schema: true;
17
18
  };
@@ -1 +1 @@
1
- {"version":3,"file":"processPendingBlocks.d.ts","sourceRoot":"","sources":["../../../../../src/modules/services/implementation/processPendingBlocks.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,EAAE,MAAM,iBAAiB,CAAA;AAEtD,OAAO,KAAK,EACV,WAAW,EAAE,qBAAqB,EAAE,WAAW,EAAE,qBAAqB,EAAE,kBAAkB,EAAE,aAAa,EAC1G,MAAM,sBAAsB,CAAA;AAO7B,UAAU,0BAA0B;IAClC,gBAAgB,CAAC,EAAE,OAAO,EAAE,CAAA;IAC5B,qBAAqB,EAAE,qBAAqB,CAAA;IAC5C,WAAW,EAAE,WAAW,CAAA;IACxB,OAAO,EAAE,WAAW,CAAA;IACpB,qBAAqB,CAAC,EAAE,qBAAqB,CAAA;IAC7C,kBAAkB,EAAE,kBAAkB,CAAA;IACtC,MAAM,CAAC,EAAE,MAAM,CAAA;IACf,aAAa,EAAE,aAAa,CAAA;IAC5B,aAAa,CAAC,EAAE,MAAM,CAAA;CACvB;AAGD,wBAAsB,oBAAoB,CAAC,EACzC,qBAAqB,EAAE,WAAW,EAAE,OAAO,EAAE,MAAM,EAAE,aAAa,EAAE,kBAAkB,EAAE,gBAAgB,EAAE,aAAa,EAAE,qBAAqB,GAC/I,EAAE,0BAA0B;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;oBA0E5B"}
1
+ {"version":3,"file":"processPendingBlocks.d.ts","sourceRoot":"","sources":["../../../../../src/modules/services/implementation/processPendingBlocks.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,EAAE,MAAM,iBAAiB,CAAA;AAEtD,OAAO,KAAK,EACV,WAAW,EAAE,qBAAqB,EAAE,WAAW,EAAE,qBAAqB,EAAE,kBAAkB,EAAE,aAAa,EAC1G,MAAM,sBAAsB,CAAA;AAO7B,UAAU,0BAA0B;IAClC,gBAAgB,CAAC,EAAE,OAAO,EAAE,CAAA;IAC5B,SAAS,CAAC,EAAE,MAAM,CAAA;IAClB,qBAAqB,EAAE,qBAAqB,CAAA;IAC5C,WAAW,EAAE,WAAW,CAAA;IACxB,OAAO,EAAE,WAAW,CAAA;IACpB,qBAAqB,CAAC,EAAE,qBAAqB,CAAA;IAC7C,kBAAkB,EAAE,kBAAkB,CAAA;IACtC,MAAM,CAAC,EAAE,MAAM,CAAA;IACf,aAAa,EAAE,aAAa,CAAA;IAC5B,aAAa,CAAC,EAAE,MAAM,CAAA;CACvB;AAGD,wBAAsB,oBAAoB,CAAC,EACzC,qBAAqB,EAAE,WAAW,EAAE,OAAO,EAAE,MAAM,EAAE,aAAa,EAAE,kBAAkB,EAAE,gBAAgB,EAAE,SAAS,EAAE,aAAa,EAAE,qBAAqB,GAC1J,EAAE,0BAA0B;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;oBA0E5B"}
@@ -81,7 +81,11 @@ export declare class SimpleBlockRunner extends AbstractCreatableProvider<SimpleB
81
81
  protected get finalizationViewer(): FinalizationViewer;
82
82
  protected get heartbeatInterval(): number;
83
83
  protected get mempoolViewer(): MempoolViewer;
84
- protected get producerTuning(): import('./producerTuning.js').ProducerTuningFields;
84
+ protected get producerTuning(): {
85
+ disableIntentRedeclaration?: boolean | undefined;
86
+ heartbeatInterval?: number | undefined;
87
+ rewardAddress?: string | undefined;
88
+ };
85
89
  protected get rejectedTransactionsArchivist(): ArchivistInstance<import("@xyo-network/sdk").ArchivistParams<import("@xyo-network/sdk").AnyConfigSchema<import("@xyo-network/sdk").ArchivistConfig>>, import("@xyo-network/sdk").ArchivistModuleEventData, import("@xyo-network/sdk").Payload>;
86
90
  protected get rewardAddress(): Address;
87
91
  protected get timeSyncViewer(): TimeSyncViewer;
@@ -1 +1 @@
1
- {"version":3,"file":"SimpleBlockRunner.d.ts","sourceRoot":"","sources":["../../../../../../../src/modules/services/simple/block/runner/SimpleBlockRunner.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"SimpleBlockRunner.d.ts","sourceRoot":"","sources":["../../../../../../../src/modules/services/simple/block/runner/SimpleBlockRunner.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,OAAO,EAAQ,UAAU,EAC1B,MAAM,iBAAiB,CAAA;AAKxB,OAAO,KAAK,EACV,eAAe,EACf,iBAAiB,EAAE,YAAY,EAChC,MAAM,kBAAkB,CAAA;AAKzB,OAAO,KAAK,EACV,oBAAoB,EAAuB,iBAAiB,EACxC,iBAAiB,EAAE,WAAW,EAAE,qBAAqB,EAAW,gBAAgB,EAAE,uBAAuB,EAC7H,qBAAqB,EACrB,kBAAkB,EAClB,oCAAoC,EAAgC,aAAa,EACjF,mCAAmC,EACnC,+BAA+B,EAClB,cAAc,EAAE,QAAQ,EACtC,MAAM,sBAAsB,CAAA;AAC7B,OAAO,EACL,yBAAyB,EAM1B,MAAM,sBAAsB,CAAA;AAE7B,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,UAAU,CAAA;AAQlD;;GAEG;AACH,eAAO,MAAM,kBAAkB,KAAK,CAAA;AAEpC;;GAEG;AACH,eAAO,MAAM,mCAAmC,MAAM,CAAA;AAEtD;;;GAGG;AACH,eAAO,MAAM,iCAAiC,MAAM,CAAA;AAEpD,MAAM,WAAW,uBAAwB,SAAQ,uBAAuB;IACtE,4FAA4F;IAC5F,OAAO,CAAC,EAAE,eAAe,CAAA;IACzB,0BAA0B,CAAC,EAAE,OAAO,CAAA;IACpC,iBAAiB,CAAC,EAAE,MAAM,CAAA;IAC1B,6BAA6B,CAAC,EAAE,iBAAiB,CAAA;IACjD,gGAAgG;IAChG,aAAa,CAAC,EAAE,OAAO,CAAA;IACvB;;;;;;OAMG;IACH,gBAAgB,CAAC,EAAE,OAAO,CAAA;IAC1B,0BAA0B,CAAC,EAAE,oCAAoC,CAAA;CAClE;AAED,qBACa,iBAAkB,SAAQ,yBAAyB,CAAC,uBAAuB,CAAE,YAAW,WAAW;IAC9G,MAAM,CAAC,QAAQ,CAAC,eAAe,uCAAuC;IACtE,MAAM,CAAC,QAAQ,CAAC,cAAc,gBAAqB;IACnD,MAAM,CAAC,QAAQ,CAAC,YAAY,yIAO3B;IAED,MAAM,CAAC,QAAQ,CAAC,QAAQ,kBAAuB;IAC/C,MAAM,CAAC,QAAQ,CAAC,OAAO,EAAG,MAAM,CAAS;IACzC,OAAO,gBAAmC;IAE1C,SAAS,CAAC,mBAAmB,CAAC,EAAE,kBAAkB,CAAA;IAClD,SAAS,CAAC,sBAAsB,CAAC,EAAE,qBAAqB,CAAA;IAGxD,SAAS,CAAC,0BAA0B,6CAAkB;IACtD,SAAS,CAAC,uBAAuB,CAAC,EAAE,MAAM,CAAA;IAC1C,SAAS,CAAC,8BAA8B,CAAC,EAAE,iBAAiB,CAAA;IAE5D,OAAO,CAAC,QAAQ,CAAC,CAAiB;IAClC,OAAO,CAAC,qBAAqB,CAAC,CAAsB;IACpD,OAAO,CAAC,QAAQ,CAAC,CAAS;IAC1B,OAAO,CAAC,kBAAkB,CAAC,CAAmB;IAC9C,OAAO,CAAC,sBAAsB,CAAC,CAAuB;IACtD,OAAO,CAAC,mBAAmB,CAAC,CAAoB;IAChD,OAAO,CAAC,cAAc,CAAC,CAAe;IACtC,OAAO,CAAC,cAAc,CAAC,CAAS;IAChC,OAAO,CAAC,eAAe,CAAC,CAAgB;IAExC;;OAEG;IACH,MAAM,KAAK,gBAAgB,IAAI,MAAM,CAEpC;IAED;;;OAGG;IACH,MAAM,KAAK,qBAAqB,IAAI,MAAM,CAEzC;IAED;;;OAGG;IACH,MAAM,KAAK,mBAAmB,IAAI,MAAM,CAEvC;IAED,SAAS,KAAK,OAAO,oBAEpB;IAED,SAAS,KAAK,oBAAoB,yBAEjC;IAED,SAAS,KAAK,OAAO;;;;MAEpB;IAED,SAAS,KAAK,iBAAiB,sBAE9B;IAED,SAAS,KAAK,qBAAqB,0BAElC;IAED,SAAS,KAAK,kBAAkB,uBAE/B;IAED,SAAS,KAAK,iBAAiB,WAE9B;IAED,SAAS,KAAK,aAAa,kBAE1B;IAED,SAAS,KAAK,cAAc;;;;MAE3B;IAMD,SAAS,KAAK,6BAA6B,mPAE1C;IAED,SAAS,KAAK,aAAa,IAAI,OAAO,CAErC;IAMD,SAAS,KAAK,cAAc,IAAI,cAAc,CAE7C;IAMc,aAAa;IAqBtB,IAAI,CAAC,IAAI,EAAE,YAAY,CAAC,iBAAiB,CAAC,GAAG,OAAO,CAAC,+BAA+B,GAAG,SAAS,CAAC;IAgBjG,gBAAgB,CAAC,IAAI,EAAE,mCAAmC,EAAE,KAAK,EAAE,IAAI,GAAG,OAAO,CAAC,+BAA+B,CAAC;IAClH,gBAAgB,CAAC,IAAI,EAAE,mCAAmC,EAAE,KAAK,CAAC,EAAE,KAAK,GAAG,OAAO,CAAC,+BAA+B,GAAG,SAAS,CAAC;cAOtH,uBAAuB,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,QAAQ,EAAE,CAAC;IAiB3E;;;;OAIG;IACH,SAAS,CAAC,wBAAwB,CAAC,IAAI,EAAE,YAAY,CAAC,iBAAiB,CAAC,GAAG,UAAU,CAAC,gBAAgB,GAAG,SAAS,CAAC;cAsBnG,qBAAqB,CAAC,IAAI,EAAE,YAAY,CAAC,iBAAiB,CAAC,EAAE,gBAAgB,CAAC,EAAE,OAAO,EAAE,KAAK,UAAQ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;IAsEtH;;;;;;;;OAQG;IACH,OAAO,CAAC,kBAAkB;IAS1B,OAAO,CAAC,yBAAyB;YAiBnB,cAAc;YAsDd,mBAAmB;IAIjC;;;;OAIG;IACH,OAAO,CAAC,iBAAiB;YAQX,oBAAoB;YAkBpB,4BAA4B;YAiC5B,yBAAyB;CAqDxC"}
@@ -1,13 +1,16 @@
1
- /** Producer tuning fields read loosely from the producer actor config. */
2
- export interface ProducerTuningFields {
3
- disableIntentRedeclaration?: boolean;
4
- heartbeatInterval?: number;
5
- rewardAddress?: string;
6
- }
1
+ import { z } from 'zod';
7
2
  /**
8
- * Producer tuning from the loose locator config: the lifted `producer` section
9
- * (see orchestration's providerTuningFromActors), else top-level fields
10
- * (actor-scoped or test configs).
3
+ * Producer tuning read from the materialized provider config's `options`
4
+ * (`providerBindings.BlockRunner.options` — orchestration lifts the producer
5
+ * actor slice there at config load).
11
6
  */
7
+ export declare const ProducerTuningOptionsZod: z.ZodObject<{
8
+ disableIntentRedeclaration: z.ZodOptional<z.ZodCoercedBoolean<unknown>>;
9
+ heartbeatInterval: z.ZodOptional<z.ZodCoercedNumber<unknown>>;
10
+ rewardAddress: z.ZodOptional<z.ZodString>;
11
+ }, z.core.$strip>;
12
+ /** Producer tuning fields resolved from provider options. */
13
+ export type ProducerTuningFields = z.infer<typeof ProducerTuningOptionsZod>;
14
+ /** Producer tuning from the materialized provider config. */
12
15
  export declare function producerTuningFromConfig(config: unknown): ProducerTuningFields;
13
16
  //# sourceMappingURL=producerTuning.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"producerTuning.d.ts","sourceRoot":"","sources":["../../../../../../../src/modules/services/simple/block/runner/producerTuning.ts"],"names":[],"mappings":"AAAA,0EAA0E;AAC1E,MAAM,WAAW,oBAAoB;IACnC,0BAA0B,CAAC,EAAE,OAAO,CAAA;IACpC,iBAAiB,CAAC,EAAE,MAAM,CAAA;IAC1B,aAAa,CAAC,EAAE,MAAM,CAAA;CACvB;AAED;;;;GAIG;AACH,wBAAgB,wBAAwB,CAAC,MAAM,EAAE,OAAO,GAAG,oBAAoB,CAG9E"}
1
+ {"version":3,"file":"producerTuning.d.ts","sourceRoot":"","sources":["../../../../../../../src/modules/services/simple/block/runner/producerTuning.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAA;AAEvB;;;;GAIG;AACH,eAAO,MAAM,wBAAwB;;;;iBAInC,CAAA;AAEF,6DAA6D;AAC7D,MAAM,MAAM,oBAAoB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,wBAAwB,CAAC,CAAA;AAE3E,6DAA6D;AAC7D,wBAAgB,wBAAwB,CAAC,MAAM,EAAE,OAAO,GAAG,oBAAoB,CAI9E"}
@@ -166,11 +166,13 @@ import {
166
166
  } from "@xyo-network/xl1-sdk";
167
167
  var ChainHeadSelector = class extends ChainFinalizer {
168
168
  allowedProducers;
169
+ backoffMs;
169
170
  minCandidates;
170
171
  _timeSinceLastUncle = Date.now();
171
172
  constructor(params) {
172
173
  super(params);
173
174
  this.allowedProducers = params.allowedProducers;
175
+ this.backoffMs = params.backoffMs;
174
176
  this.minCandidates = params.minCandidates;
175
177
  }
176
178
  get context() {
@@ -186,7 +188,7 @@ var ChainHeadSelector = class extends ChainFinalizer {
186
188
  const proposedBlocks = isDefined2(allowedProducers) && allowedProducers.length > 0 ? allProposedBlocks.filter((pb) => allowedProducers.includes(toAddress2(pb[0].addresses[0]))) : allProposedBlocks;
187
189
  this.windowedFinalizedChain = await getWindowedChain(this.context, this.blockViewer, this.maxWindowSize, this.windowedFinalizedChain);
188
190
  const uncles = findUncles(this.context, this.windowedFinalizedChain, proposedBlocks);
189
- return findBestUncle(this.windowedFinalizedChain, uncles, { minCandidates: this.minCandidates }) ?? this.windowedFinalizedChain;
191
+ return findBestUncle(this.windowedFinalizedChain, uncles, { backoffMs: this.backoffMs, minCandidates: this.minCandidates }) ?? this.windowedFinalizedChain;
190
192
  }, this.context);
191
193
  }
192
194
  };
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../src/modules/analyze/analyzeChain.ts", "../../src/modules/analyze/BalanceAnalyzer/BalanceAnalyzer.ts", "../../src/modules/analyze/BalanceAnalyzer/ChainSummaryBalances.ts", "../../src/modules/analyze/ChainFinalizer.ts", "../../src/modules/analyze/ChainHeadSelector.ts", "../../src/modules/analyze/producer/ChainProducersAnalyzer.ts", "../../src/modules/analyze/producer/ChainSummaryProducers.ts", "../../src/modules/analyze/producer/ChainStakeIntentAnalyzer.ts", "../../src/modules/analyze/producer/ChainSummaryStakeIntent.ts", "../../src/modules/analyze/TransferAnalyzer/ChainSummaryTransfers.ts", "../../src/modules/analyze/TransferAnalyzer/TransferAnalyzer.ts"],
4
- "sourcesContent": ["/* eslint-disable complexity */\nimport type { Hash } from '@ariestools/sdk'\nimport {\n assertEx, isError, spanRootAsync,\n} from '@ariestools/sdk'\nimport type { Payload } from '@xyo-network/sdk'\nimport type {\n BlockContextRead,\n ChainAnalyzer,\n HydratedBlock, HydratedBlockWithHashMeta,\n} from '@xyo-network/xl1-sdk'\nimport { hydrateBlock } from '@xyo-network/xl1-sdk'\n\nconst analyzeBlock = async (block: HydratedBlock, handlers: ChainAnalyzer[]): Promise<HydratedBlock> => {\n await Promise.all(handlers.map(async (handler) => {\n await handler.onBlock(block)\n }))\n return block\n}\n\nexport const analyzeChain = async (\n context: BlockContextRead,\n handlers: ChainAnalyzer[],\n /* the hash to start at */\n head: Hash | HydratedBlockWithHashMeta,\n /* a hash that we should stop at if we reach it */\n previousHead: Hash | null = null,\n /* max number of blocks to analyze (-1 for no limit) */\n maxDepth = -1n,\n): Promise<Payload[]> => {\n const { logger } = context\n logger?.log('analyzeChain.start', previousHead)\n return assertEx(await spanRootAsync('analyzeChain', async () => {\n let lastBlockNumber = -1\n let maxDepthLimit = maxDepth === -1n ? BigInt(Number.MAX_SAFE_INTEGER) : maxDepth\n let cursor: HydratedBlockWithHashMeta | null = typeof head === 'string' ? await hydrateBlock(context, head) : head\n // If the terminal block is the current head, we don't need to analyze it\n logger?.log('analyzeChain.cursor', cursor?.[0].block)\n if (previousHead !== null && cursor?.[0]._hash === previousHead) return []\n while (cursor && (maxDepthLimit > 0n)) {\n maxDepthLimit -= 1n\n await analyzeBlock(cursor, handlers)\n lastBlockNumber = cursor[0].block\n try {\n cursor = cursor[0].previous === null ? null : await hydrateBlock(context, cursor[0].previous)\n } catch (ex) {\n if (isError(ex)) {\n logger?.warn('Error in hydrateBlock', ex)\n }\n break\n }\n if (cursor?.[0]._hash === previousHead) break\n }\n if (previousHead === null && maxDepth === -1n && lastBlockNumber !== 0) {\n logger?.warn(`Expected root block number to be 0, but was ${lastBlockNumber} : ${previousHead}`)\n }\n logger?.log('analyzeChain.done', lastBlockNumber)\n return handlers.map((handler) => {\n return handler.result()\n })\n }, context), () => 'analyzeChain failed')\n}\n", "import type { Address, Hash } from '@ariestools/sdk'\nimport { isDefined, toAddress } from '@ariestools/sdk'\nimport { trace, type Tracer } from '@opentelemetry/api'\nimport { PayloadBuilder } from '@xyo-network/sdk'\nimport type {\n ChainAnalyzer,\n HydratedBlockWithHashMeta, SignedBigInt,\n} from '@xyo-network/xl1-sdk'\nimport {\n netBalancesForPayloads,\n parseSignedBigInt, toSignedBigInt,\n} from '@xyo-network/xl1-sdk'\n\nimport type { ChainSummaryBalances } from './ChainSummaryBalances.ts'\nimport { ChainSummaryBalancesSchema } from './ChainSummaryBalances.ts'\n\nconst bigintBalances = (balances: Partial<Record<Address, SignedBigInt>>) => {\n const result: Record<string, bigint> = {}\n for (const [address, balance] of Object.entries(balances)) {\n if (isDefined(balance)) {\n const propertyKey = String(toAddress(address))\n result[propertyKey] = parseSignedBigInt(balance)\n }\n }\n return result\n}\n\nexport class BalanceAnalyzer implements ChainAnalyzer {\n protected _tracer: Tracer | undefined\n private _addresses: Address[]\n private _balances: Record<string, bigint> = {}\n private _firstBlock?: Hash\n private _lastBlock?: Hash\n private _minBalances: bigint[]\n\n constructor(addresses: Address[] = [], minBalances: bigint[] = [], startingBalances?: ChainSummaryBalances) {\n this._addresses = addresses\n this._minBalances = minBalances\n this._balances = startingBalances ? bigintBalances(startingBalances.balances) : {}\n }\n\n protected get tracer() {\n if (this._tracer) return this._tracer\n this._tracer = trace.getTracer('BalanceAnalyzer')\n return this._tracer\n }\n\n onBlock([block, payloads]: HydratedBlockWithHashMeta): boolean {\n this._firstBlock = this._firstBlock ?? block._hash\n this._lastBlock = block._hash\n const netBalances = netBalancesForPayloads({ singletons: {} }, payloads)\n for (const [address, balance] of Object.entries(netBalances)) {\n const propertyKey = String(toAddress(address))\n this._balances[propertyKey] = (this._balances[propertyKey] ?? 0n) + balance\n }\n return this.shouldContinue()\n }\n\n result() {\n const balances: Record<string, SignedBigInt> = {}\n const positiveBalances = Object.entries(this._balances).filter(([, balance]) => balance > 0n)\n for (const [address, balance] of positiveBalances) {\n const propertyKey = String(toAddress(address))\n balances[propertyKey] = toSignedBigInt(balance)\n }\n const builder = new PayloadBuilder<ChainSummaryBalances>({ schema: ChainSummaryBalancesSchema })\n return builder.fields({\n firstBlock: this._firstBlock ?? null,\n lastBlock: this._lastBlock ?? null,\n balances,\n }).build()\n }\n\n shouldContinue() {\n return !this.allMinBalancesReached()\n }\n\n protected allMinBalancesReached() {\n if (this._minBalances.length === 0) return true\n for (let i = 0; i < this._addresses.length; i++) {\n const propertyKey = String(this._addresses[i])\n if ((this._balances[propertyKey] ?? 0n) < this._minBalances[i]) return false\n }\n return true\n }\n}\n", "import {\n type Address, type Hash, type Hex,\n} from '@ariestools/sdk'\nimport type { Payload } from '@xyo-network/sdk'\nimport { asSchema, isPayloadOfSchemaType } from '@xyo-network/sdk'\nimport type { SignedBigInt } from '@xyo-network/xl1-sdk'\n\nexport const ChainSummaryBalancesSchema = asSchema('network.xyo.chain.summary.balances', true)\nexport type ChainSummaryBalancesSchema = typeof ChainSummaryBalancesSchema\n\nexport interface ChainSummaryBalancesFields {\n balances: Partial<Record<Address, SignedBigInt>>\n firstBlock: Hash | null\n hasMinBalance?: Record<Address, Hex>\n lastBlock: Hash | null\n}\n\nexport type ChainSummaryBalances = Payload<ChainSummaryBalancesFields, ChainSummaryBalancesSchema>\nexport const isChainSummaryBalances = isPayloadOfSchemaType<ChainSummaryBalances>(ChainSummaryBalancesSchema)\n", "import type { BaseParams, Promisable } from '@ariestools/sdk'\nimport { Base } from '@ariestools/sdk'\nimport type { Tracer } from '@opentelemetry/api'\nimport type { BlockViewer, SignedHydratedBlockWithHashMeta } from '@xyo-network/xl1-sdk'\nimport { asXL1BlockRange } from '@xyo-network/xl1-sdk'\n\nexport interface ChainFinalizerParams extends BaseParams {\n blockViewer: BlockViewer\n maxWindowSize?: number\n windowedFinalizedChain?: SignedHydratedBlockWithHashMeta[]\n}\n\nexport class ChainFinalizer<TParams extends ChainFinalizerParams = ChainFinalizerParams> extends Base<TParams> {\n protected _tracer: Tracer | undefined\n // the chainArchivist is assumed to be an archivist with already validated blocks in it along with all the transactions and payloads\n // it is also assumed that the sequence order of archivist is that newer blocks come after older blocks\n\n protected windowedFinalizedChain: SignedHydratedBlockWithHashMeta[]\n\n constructor(params: TParams) {\n super(params)\n this.windowedFinalizedChain = [...(params.windowedFinalizedChain ?? [])]\n }\n\n protected get blockViewer() {\n return this.params.blockViewer\n }\n\n protected get finalizedBlockNumber() {\n return this.windowedFinalizedChain?.at(-1)?.[0].block ?? -1\n }\n\n protected get maxWindowSize() {\n return this.params.maxWindowSize ?? 100\n }\n\n protected get windowRange() {\n return asXL1BlockRange([this.windowedFinalizedChain.at(0)?.[0].block ?? 0, this.finalizedBlockNumber])\n }\n\n finalizeChainFragment(chain: SignedHydratedBlockWithHashMeta[]): Promisable<void> {\n this.windowedFinalizedChain = [...this.windowedFinalizedChain, ...chain].slice(-this.maxWindowSize)\n }\n}\n", "import type { Address } from '@ariestools/sdk'\nimport {\n isDefined, spanRootAsync, toAddress,\n} from '@ariestools/sdk'\nimport type {\n BaseContext, MempoolViewer, SignedHydratedBlockWithHashMeta,\n} from '@xyo-network/xl1-sdk'\nimport {\n findBestUncle, findUncles, getWindowedChain,\n} from '@xyo-network/xl1-sdk'\n\nimport type { ChainFinalizerParams } from './ChainFinalizer.ts'\nimport { ChainFinalizer } from './ChainFinalizer.ts'\n\nexport interface ChainHeadSelectorParams extends ChainFinalizerParams {\n /**\n * List of allowed producer addresses, if undefined anyone can participate\n */\n allowedProducers?: Address[]\n context: BaseContext\n mempoolViewer: MempoolViewer\n /**\n * Minimum number of uncle candidates required before accepting one.\n * When undefined, findBestUncle applies DEFAULT_MIN_CANDIDATES from the protocol SDK.\n */\n minCandidates?: number\n}\n\nexport class ChainHeadSelector extends ChainFinalizer<ChainHeadSelectorParams> {\n protected allowedProducers?: Address[]\n protected minCandidates?: number\n private _timeSinceLastUncle = Date.now()\n\n constructor(params: ChainHeadSelectorParams) {\n super(params)\n this.allowedProducers = params.allowedProducers\n this.minCandidates = params.minCandidates\n }\n\n protected get context() {\n return this.params.context\n }\n\n protected get mempoolViewer() {\n return this.params.mempoolViewer\n }\n\n async findBestHead(): Promise<SignedHydratedBlockWithHashMeta[]> {\n return await spanRootAsync('findBestHead', async () => {\n const allProposedBlocks = await this.mempoolViewer.pendingBlocks()\n const allowedProducers = this.allowedProducers\n\n // if only allowed producers, enforce it\n const proposedBlocks = isDefined(allowedProducers) && allowedProducers.length > 0\n ? allProposedBlocks.filter(pb => allowedProducers.includes(toAddress(pb[0].addresses[0])))\n : allProposedBlocks\n\n // TODO: Validate proposed blocks\n this.windowedFinalizedChain = await getWindowedChain(this.context, this.blockViewer, this.maxWindowSize, this.windowedFinalizedChain)\n const uncles = findUncles(this.context, this.windowedFinalizedChain, proposedBlocks)\n return findBestUncle(this.windowedFinalizedChain, uncles, { minCandidates: this.minCandidates }) ?? this.windowedFinalizedChain\n }, this.context)\n }\n}\n\n/*\n\nComparing two heads for which is better\n\nProducer Energy\n\n1. +1 Point for every block not produced by it in recent chain LOG(active producers * 100)\n2a. Energy Multiplied by - # of transactions in block is above normal (last 1000 blocks) (+0.5 per std deviation) (max 2.5)\n2b. Energy Divided by - # of transactions in block is below normal (last 1000 blocks) (+0.5 per std deviation) (max 2.5)\n3a. Energy Multiplied by - # of gas in block is above normal (last 1000 blocks) (+0.5 per std deviation) (max 2.5)\n3b. Energy Divided by - # of gas in block is below normal (last 1000 blocks) (+0.5 per std deviation) (max 2.5)\n\nOther Ideas\n\n1. Total diverse addresses in block (not quite incentivizing what we really want)\n2. Total transactions in block (more is better, encourages non-lethargic blocks)\n3. Sum total of transactions in block (higher value means more influential/better)\n4. Sum of gas of transactions in block (higher is better, prioritizes paying contributors)\n5. Exp of transactions in block (lower is better, prioritizes not aging out before inclusion)\n6. Recency of this producer's last produced block (encourages diversification in block producers)\n\n*/\n", "import type { Promisable } from '@ariestools/sdk'\nimport { isDefined, toAddress } from '@ariestools/sdk'\nimport { type ChainAnalyzer, type HydratedBlock } from '@xyo-network/xl1-sdk'\n\nimport type { AnalyzedProducer, ChainSummaryProducers } from './ChainSummaryProducers.ts'\nimport { ChainSummaryProducersSchema } from './ChainSummaryProducers.ts'\n\nexport class ChainProducersAnalyzer implements ChainAnalyzer<ChainSummaryProducers> {\n private endingBlock = 0\n private producers: Record<string, AnalyzedProducer> = {}\n private startingBlock = 0\n\n onBlock([block]: HydratedBlock): Promisable<boolean> {\n // avoid analyzing the same block twice\n if (block.block === this.endingBlock) return true\n\n // update the ending block\n this.endingBlock = block.block\n const blockProducerAddressRaw = block.addresses[0]\n\n if (blockProducerAddressRaw === undefined) return true\n\n const blockProducerAddress = toAddress(blockProducerAddressRaw)\n\n const producerKey = String(blockProducerAddress)\n const existingProducer: AnalyzedProducer | undefined = this.producers[producerKey]\n if (isDefined(existingProducer)) {\n existingProducer.rewardsEarned = (existingProducer.rewardsEarned ?? 0n) + 0n\n existingProducer.blocksProduced++\n } else {\n const newProducer: AnalyzedProducer = {\n address: blockProducerAddress, rewardsEarned: 0n, blocksProduced: 1,\n }\n this.producers[producerKey] = newProducer\n }\n\n return true\n }\n\n result(): ChainSummaryProducers {\n return {\n endingBlock: this.endingBlock,\n producers: this.producers,\n schema: ChainSummaryProducersSchema,\n startingBlock: this.startingBlock,\n }\n }\n\n shouldContinue(): boolean {\n return true\n }\n}\n", "import type { Address } from '@ariestools/sdk'\nimport type { Payload } from '@xyo-network/sdk'\nimport { asSchema, isPayloadOfSchemaType } from '@xyo-network/sdk'\n\nexport const ChainSummaryProducersSchema = asSchema('network.xyo.chain.summary.producers', true)\nexport type ChainSummaryProducersSchema = typeof ChainSummaryProducersSchema\n\nexport interface AnalyzedProducer {\n address: Address\n blocksProduced: number\n rewardsEarned: bigint\n}\n\nexport interface ChainSummaryProducersFields {\n endingBlock: number\n producers: Record<string, AnalyzedProducer>\n startingBlock: number\n}\n\nexport type ChainSummaryProducers = Payload<ChainSummaryProducersFields, ChainSummaryProducersSchema>\nexport const isChainSummaryProducers = isPayloadOfSchemaType<ChainSummaryProducers>(ChainSummaryProducersSchema)\n", "import type { Promisable } from '@ariestools/sdk'\nimport { assertEx } from '@ariestools/sdk'\nimport {\n type ChainAnalyzer, type ChainStakeIntent, type HydratedBlock,\n type Intent,\n isChainStakeIntentWithStorageMeta,\n} from '@xyo-network/xl1-sdk'\n\nimport type { ChainSummaryStakeIntent } from './ChainSummaryStakeIntent.ts'\nimport { ChainSummaryStakeIntentSchema } from './ChainSummaryStakeIntent.ts'\n\nexport class ChainStakeIntentAnalyzer implements ChainAnalyzer<ChainSummaryStakeIntent> {\n private _endingBlock: number | undefined = undefined\n private _intent: Intent\n private _intentPayloads: ChainStakeIntent[] = []\n private _startingBlock: number | undefined = undefined\n\n constructor(intent: Intent) {\n this._intent = intent\n }\n\n onBlock([block, validatedPayloads]: HydratedBlock): Promisable<boolean> {\n this._startingBlock ??= block.block\n\n // Update the ending block\n this._endingBlock = block.block\n const intents = validatedPayloads.filter(isChainStakeIntentWithStorageMeta)\n const desiredIntents = intents.filter(intent => intent.intent === this._intent)\n this._intentPayloads.push(...desiredIntents)\n return true\n }\n\n result(): ChainSummaryStakeIntent {\n assertEx(this._startingBlock !== undefined, () => 'ChainStakeIntentAnalyzer: Invalid startingBlock')\n assertEx(this._endingBlock !== undefined, () => 'ChainStakeIntentAnalyzer: Invalid endingBlock')\n return {\n endingBlock: this._endingBlock!,\n intents: this._intentPayloads,\n schema: ChainSummaryStakeIntentSchema,\n startingBlock: this._startingBlock!,\n }\n }\n\n shouldContinue(): boolean {\n return true\n }\n}\n", "import type { Payload } from '@xyo-network/sdk'\nimport { asSchema, isPayloadOfSchemaType } from '@xyo-network/sdk'\nimport type { ChainStakeIntent } from '@xyo-network/xl1-sdk'\n\nexport const ChainSummaryStakeIntentSchema = asSchema('network.xyo.chain.summary.staked.intent', true)\nexport type ChainSummaryStakeIntentSchema = typeof ChainSummaryStakeIntentSchema\n\ninterface ChainSummaryStakeIntentFields {\n endingBlock: number\n intents: ChainStakeIntent[]\n startingBlock: number\n}\n\nexport type ChainSummaryStakeIntent = Payload<ChainSummaryStakeIntentFields, ChainSummaryStakeIntentSchema>\nexport const isChainSummaryStakeIntent = isPayloadOfSchemaType<ChainSummaryStakeIntent>(ChainSummaryStakeIntentSchema)\n", "import {\n type Address, type Hash, type Hex,\n} from '@ariestools/sdk'\nimport type { Payload } from '@xyo-network/sdk'\nimport { asSchema, isPayloadOfSchemaType } from '@xyo-network/sdk'\nimport type { SignedBigInt } from '@xyo-network/xl1-sdk'\n\nexport const ChainSummaryTransfersSchema = asSchema('network.xyo.chain.summary.transfers', true)\nexport type ChainSummaryTransfersSchema = typeof ChainSummaryTransfersSchema\n\nexport interface ChainSummaryTransfersFields {\n firstBlock: Hash | null\n hasMinTransfer?: Record<Address, Hex>\n lastBlock: Hash | null\n transfers: Record<Address, Record<Address, SignedBigInt>>\n}\n\nexport type ChainSummaryTransfers = Payload<ChainSummaryTransfersFields, ChainSummaryTransfersSchema>\nexport const isChainSummaryTransfers = isPayloadOfSchemaType<ChainSummaryTransfers>(ChainSummaryTransfersSchema)\n", "import type { Address, Hash } from '@ariestools/sdk'\nimport { isDefined, toAddress } from '@ariestools/sdk'\nimport { trace, type Tracer } from '@opentelemetry/api'\nimport { PayloadBuilder } from '@xyo-network/sdk'\nimport type {\n ChainAnalyzer,\n HydratedBlockWithHashMeta, SignedBigInt,\n} from '@xyo-network/xl1-sdk'\nimport {\n netTransfersForPayloads,\n parseSignedBigInt, toSignedBigInt,\n} from '@xyo-network/xl1-sdk'\n\nimport type { ChainSummaryTransfers } from './ChainSummaryTransfers.ts'\nimport { ChainSummaryTransfersSchema } from './ChainSummaryTransfers.ts'\n\nconst bigintTransfers = (transfers: Record<Address, Record<Address, SignedBigInt>>) => {\n const result: Record<string, Record<string, bigint>> = {}\n for (const [from, toMap] of Object.entries(transfers)) {\n const fromKey = String(toAddress(from))\n for (const [to, balance] of Object.entries(toMap)) {\n const toKey = String(toAddress(to))\n if (isDefined(balance)) {\n const fromTransfers = result[fromKey] ?? {}\n result[fromKey] = fromTransfers\n fromTransfers[toKey] = parseSignedBigInt(balance)\n }\n }\n }\n return result\n}\n\nexport class TransferAnalyzer implements ChainAnalyzer {\n protected _tracer: Tracer | undefined\n private _firstBlock?: Hash\n private _lastBlock?: Hash\n private _transfers: Record<string, Record<string, bigint>> = {}\n\n constructor(startingTransfers?: ChainSummaryTransfers) {\n this._transfers = startingTransfers ? bigintTransfers(startingTransfers.transfers) : {}\n }\n\n protected get tracer() {\n if (this._tracer) return this._tracer\n this._tracer = trace.getTracer('TransferAnalyzer')\n return this._tracer\n }\n\n onBlock([block, payloads]: HydratedBlockWithHashMeta): boolean {\n this._firstBlock = this._firstBlock ?? block._hash\n this._lastBlock = block._hash\n const netTransfers = netTransfersForPayloads({ singletons: {} }, payloads)\n for (const [from, toMap] of Object.entries(netTransfers)) {\n const fromKey = String(toAddress(from))\n const fromTransfers = this._transfers[fromKey] ?? {}\n this._transfers[fromKey] = fromTransfers\n for (const [to, balance] of Object.entries(toMap)) {\n const toKey = String(toAddress(to))\n fromTransfers[toKey] = (fromTransfers[toKey] ?? 0n) + balance\n }\n }\n return this.shouldContinue()\n }\n\n result() {\n const transfers: Record<string, Record<string, SignedBigInt>> = {}\n for (const [from, toMap] of Object.entries(this._transfers)) {\n const fromKey = String(toAddress(from))\n const positiveTransfers = Object.entries(toMap).filter(([, balance]) => balance > 0n)\n for (const [to, balance] of positiveTransfers) {\n const fromTransfers = transfers[fromKey] ?? {}\n transfers[fromKey] = fromTransfers\n const toKey = String(toAddress(to))\n fromTransfers[toKey] = toSignedBigInt(balance)\n }\n }\n const builder = new PayloadBuilder<ChainSummaryTransfers>({ schema: ChainSummaryTransfersSchema })\n return builder.fields({\n firstBlock: this._firstBlock ?? null,\n lastBlock: this._lastBlock ?? null,\n transfers,\n }).build()\n }\n\n shouldContinue() {\n return true\n }\n}\n"],
5
- "mappings": "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",
4
+ "sourcesContent": ["/* eslint-disable complexity */\nimport type { Hash } from '@ariestools/sdk'\nimport {\n assertEx, isError, spanRootAsync,\n} from '@ariestools/sdk'\nimport type { Payload } from '@xyo-network/sdk'\nimport type {\n BlockContextRead,\n ChainAnalyzer,\n HydratedBlock, HydratedBlockWithHashMeta,\n} from '@xyo-network/xl1-sdk'\nimport { hydrateBlock } from '@xyo-network/xl1-sdk'\n\nconst analyzeBlock = async (block: HydratedBlock, handlers: ChainAnalyzer[]): Promise<HydratedBlock> => {\n await Promise.all(handlers.map(async (handler) => {\n await handler.onBlock(block)\n }))\n return block\n}\n\nexport const analyzeChain = async (\n context: BlockContextRead,\n handlers: ChainAnalyzer[],\n /* the hash to start at */\n head: Hash | HydratedBlockWithHashMeta,\n /* a hash that we should stop at if we reach it */\n previousHead: Hash | null = null,\n /* max number of blocks to analyze (-1 for no limit) */\n maxDepth = -1n,\n): Promise<Payload[]> => {\n const { logger } = context\n logger?.log('analyzeChain.start', previousHead)\n return assertEx(await spanRootAsync('analyzeChain', async () => {\n let lastBlockNumber = -1\n let maxDepthLimit = maxDepth === -1n ? BigInt(Number.MAX_SAFE_INTEGER) : maxDepth\n let cursor: HydratedBlockWithHashMeta | null = typeof head === 'string' ? await hydrateBlock(context, head) : head\n // If the terminal block is the current head, we don't need to analyze it\n logger?.log('analyzeChain.cursor', cursor?.[0].block)\n if (previousHead !== null && cursor?.[0]._hash === previousHead) return []\n while (cursor && (maxDepthLimit > 0n)) {\n maxDepthLimit -= 1n\n await analyzeBlock(cursor, handlers)\n lastBlockNumber = cursor[0].block\n try {\n cursor = cursor[0].previous === null ? null : await hydrateBlock(context, cursor[0].previous)\n } catch (ex) {\n if (isError(ex)) {\n logger?.warn('Error in hydrateBlock', ex)\n }\n break\n }\n if (cursor?.[0]._hash === previousHead) break\n }\n if (previousHead === null && maxDepth === -1n && lastBlockNumber !== 0) {\n logger?.warn(`Expected root block number to be 0, but was ${lastBlockNumber} : ${previousHead}`)\n }\n logger?.log('analyzeChain.done', lastBlockNumber)\n return handlers.map((handler) => {\n return handler.result()\n })\n }, context), () => 'analyzeChain failed')\n}\n", "import type { Address, Hash } from '@ariestools/sdk'\nimport { isDefined, toAddress } from '@ariestools/sdk'\nimport { trace, type Tracer } from '@opentelemetry/api'\nimport { PayloadBuilder } from '@xyo-network/sdk'\nimport type {\n ChainAnalyzer,\n HydratedBlockWithHashMeta, SignedBigInt,\n} from '@xyo-network/xl1-sdk'\nimport {\n netBalancesForPayloads,\n parseSignedBigInt, toSignedBigInt,\n} from '@xyo-network/xl1-sdk'\n\nimport type { ChainSummaryBalances } from './ChainSummaryBalances.ts'\nimport { ChainSummaryBalancesSchema } from './ChainSummaryBalances.ts'\n\nconst bigintBalances = (balances: Partial<Record<Address, SignedBigInt>>) => {\n const result: Record<string, bigint> = {}\n for (const [address, balance] of Object.entries(balances)) {\n if (isDefined(balance)) {\n const propertyKey = String(toAddress(address))\n result[propertyKey] = parseSignedBigInt(balance)\n }\n }\n return result\n}\n\nexport class BalanceAnalyzer implements ChainAnalyzer {\n protected _tracer: Tracer | undefined\n private _addresses: Address[]\n private _balances: Record<string, bigint> = {}\n private _firstBlock?: Hash\n private _lastBlock?: Hash\n private _minBalances: bigint[]\n\n constructor(addresses: Address[] = [], minBalances: bigint[] = [], startingBalances?: ChainSummaryBalances) {\n this._addresses = addresses\n this._minBalances = minBalances\n this._balances = startingBalances ? bigintBalances(startingBalances.balances) : {}\n }\n\n protected get tracer() {\n if (this._tracer) return this._tracer\n this._tracer = trace.getTracer('BalanceAnalyzer')\n return this._tracer\n }\n\n onBlock([block, payloads]: HydratedBlockWithHashMeta): boolean {\n this._firstBlock = this._firstBlock ?? block._hash\n this._lastBlock = block._hash\n const netBalances = netBalancesForPayloads({ singletons: {} }, payloads)\n for (const [address, balance] of Object.entries(netBalances)) {\n const propertyKey = String(toAddress(address))\n this._balances[propertyKey] = (this._balances[propertyKey] ?? 0n) + balance\n }\n return this.shouldContinue()\n }\n\n result() {\n const balances: Record<string, SignedBigInt> = {}\n const positiveBalances = Object.entries(this._balances).filter(([, balance]) => balance > 0n)\n for (const [address, balance] of positiveBalances) {\n const propertyKey = String(toAddress(address))\n balances[propertyKey] = toSignedBigInt(balance)\n }\n const builder = new PayloadBuilder<ChainSummaryBalances>({ schema: ChainSummaryBalancesSchema })\n return builder.fields({\n firstBlock: this._firstBlock ?? null,\n lastBlock: this._lastBlock ?? null,\n balances,\n }).build()\n }\n\n shouldContinue() {\n return !this.allMinBalancesReached()\n }\n\n protected allMinBalancesReached() {\n if (this._minBalances.length === 0) return true\n for (let i = 0; i < this._addresses.length; i++) {\n const propertyKey = String(this._addresses[i])\n if ((this._balances[propertyKey] ?? 0n) < this._minBalances[i]) return false\n }\n return true\n }\n}\n", "import {\n type Address, type Hash, type Hex,\n} from '@ariestools/sdk'\nimport type { Payload } from '@xyo-network/sdk'\nimport { asSchema, isPayloadOfSchemaType } from '@xyo-network/sdk'\nimport type { SignedBigInt } from '@xyo-network/xl1-sdk'\n\nexport const ChainSummaryBalancesSchema = asSchema('network.xyo.chain.summary.balances', true)\nexport type ChainSummaryBalancesSchema = typeof ChainSummaryBalancesSchema\n\nexport interface ChainSummaryBalancesFields {\n balances: Partial<Record<Address, SignedBigInt>>\n firstBlock: Hash | null\n hasMinBalance?: Record<Address, Hex>\n lastBlock: Hash | null\n}\n\nexport type ChainSummaryBalances = Payload<ChainSummaryBalancesFields, ChainSummaryBalancesSchema>\nexport const isChainSummaryBalances = isPayloadOfSchemaType<ChainSummaryBalances>(ChainSummaryBalancesSchema)\n", "import type { BaseParams, Promisable } from '@ariestools/sdk'\nimport { Base } from '@ariestools/sdk'\nimport type { Tracer } from '@opentelemetry/api'\nimport type { BlockViewer, SignedHydratedBlockWithHashMeta } from '@xyo-network/xl1-sdk'\nimport { asXL1BlockRange } from '@xyo-network/xl1-sdk'\n\nexport interface ChainFinalizerParams extends BaseParams {\n blockViewer: BlockViewer\n maxWindowSize?: number\n windowedFinalizedChain?: SignedHydratedBlockWithHashMeta[]\n}\n\nexport class ChainFinalizer<TParams extends ChainFinalizerParams = ChainFinalizerParams> extends Base<TParams> {\n protected _tracer: Tracer | undefined\n // the chainArchivist is assumed to be an archivist with already validated blocks in it along with all the transactions and payloads\n // it is also assumed that the sequence order of archivist is that newer blocks come after older blocks\n\n protected windowedFinalizedChain: SignedHydratedBlockWithHashMeta[]\n\n constructor(params: TParams) {\n super(params)\n this.windowedFinalizedChain = [...(params.windowedFinalizedChain ?? [])]\n }\n\n protected get blockViewer() {\n return this.params.blockViewer\n }\n\n protected get finalizedBlockNumber() {\n return this.windowedFinalizedChain?.at(-1)?.[0].block ?? -1\n }\n\n protected get maxWindowSize() {\n return this.params.maxWindowSize ?? 100\n }\n\n protected get windowRange() {\n return asXL1BlockRange([this.windowedFinalizedChain.at(0)?.[0].block ?? 0, this.finalizedBlockNumber])\n }\n\n finalizeChainFragment(chain: SignedHydratedBlockWithHashMeta[]): Promisable<void> {\n this.windowedFinalizedChain = [...this.windowedFinalizedChain, ...chain].slice(-this.maxWindowSize)\n }\n}\n", "import type { Address } from '@ariestools/sdk'\nimport {\n isDefined, spanRootAsync, toAddress,\n} from '@ariestools/sdk'\nimport type {\n BaseContext, MempoolViewer, SignedHydratedBlockWithHashMeta,\n} from '@xyo-network/xl1-sdk'\nimport {\n findBestUncle, findUncles, getWindowedChain,\n} from '@xyo-network/xl1-sdk'\n\nimport type { ChainFinalizerParams } from './ChainFinalizer.ts'\nimport { ChainFinalizer } from './ChainFinalizer.ts'\n\nexport interface ChainHeadSelectorParams extends ChainFinalizerParams {\n /**\n * List of allowed producer addresses, if undefined anyone can participate\n */\n allowedProducers?: Address[]\n /**\n * Back-off timeout (ms) after which a head is accepted even with fewer than\n * minCandidates uncle chains available.\n * When undefined, findBestUncle applies DEFAULT_BACKOFF_MS from the protocol SDK.\n */\n backoffMs?: number\n context: BaseContext\n mempoolViewer: MempoolViewer\n /**\n * Minimum number of uncle candidates required before accepting one.\n * When undefined, findBestUncle applies DEFAULT_MIN_CANDIDATES from the protocol SDK.\n */\n minCandidates?: number\n}\n\nexport class ChainHeadSelector extends ChainFinalizer<ChainHeadSelectorParams> {\n protected allowedProducers?: Address[]\n protected backoffMs?: number\n protected minCandidates?: number\n private _timeSinceLastUncle = Date.now()\n\n constructor(params: ChainHeadSelectorParams) {\n super(params)\n this.allowedProducers = params.allowedProducers\n this.backoffMs = params.backoffMs\n this.minCandidates = params.minCandidates\n }\n\n protected get context() {\n return this.params.context\n }\n\n protected get mempoolViewer() {\n return this.params.mempoolViewer\n }\n\n async findBestHead(): Promise<SignedHydratedBlockWithHashMeta[]> {\n return await spanRootAsync('findBestHead', async () => {\n const allProposedBlocks = await this.mempoolViewer.pendingBlocks()\n const allowedProducers = this.allowedProducers\n\n // if only allowed producers, enforce it\n const proposedBlocks = isDefined(allowedProducers) && allowedProducers.length > 0\n ? allProposedBlocks.filter(pb => allowedProducers.includes(toAddress(pb[0].addresses[0])))\n : allProposedBlocks\n\n // TODO: Validate proposed blocks\n this.windowedFinalizedChain = await getWindowedChain(this.context, this.blockViewer, this.maxWindowSize, this.windowedFinalizedChain)\n const uncles = findUncles(this.context, this.windowedFinalizedChain, proposedBlocks)\n return findBestUncle(this.windowedFinalizedChain, uncles, { backoffMs: this.backoffMs, minCandidates: this.minCandidates }) ?? this.windowedFinalizedChain\n }, this.context)\n }\n}\n\n/*\n\nComparing two heads for which is better\n\nProducer Energy\n\n1. +1 Point for every block not produced by it in recent chain LOG(active producers * 100)\n2a. Energy Multiplied by - # of transactions in block is above normal (last 1000 blocks) (+0.5 per std deviation) (max 2.5)\n2b. Energy Divided by - # of transactions in block is below normal (last 1000 blocks) (+0.5 per std deviation) (max 2.5)\n3a. Energy Multiplied by - # of gas in block is above normal (last 1000 blocks) (+0.5 per std deviation) (max 2.5)\n3b. Energy Divided by - # of gas in block is below normal (last 1000 blocks) (+0.5 per std deviation) (max 2.5)\n\nOther Ideas\n\n1. Total diverse addresses in block (not quite incentivizing what we really want)\n2. Total transactions in block (more is better, encourages non-lethargic blocks)\n3. Sum total of transactions in block (higher value means more influential/better)\n4. Sum of gas of transactions in block (higher is better, prioritizes paying contributors)\n5. Exp of transactions in block (lower is better, prioritizes not aging out before inclusion)\n6. Recency of this producer's last produced block (encourages diversification in block producers)\n\n*/\n", "import type { Promisable } from '@ariestools/sdk'\nimport { isDefined, toAddress } from '@ariestools/sdk'\nimport { type ChainAnalyzer, type HydratedBlock } from '@xyo-network/xl1-sdk'\n\nimport type { AnalyzedProducer, ChainSummaryProducers } from './ChainSummaryProducers.ts'\nimport { ChainSummaryProducersSchema } from './ChainSummaryProducers.ts'\n\nexport class ChainProducersAnalyzer implements ChainAnalyzer<ChainSummaryProducers> {\n private endingBlock = 0\n private producers: Record<string, AnalyzedProducer> = {}\n private startingBlock = 0\n\n onBlock([block]: HydratedBlock): Promisable<boolean> {\n // avoid analyzing the same block twice\n if (block.block === this.endingBlock) return true\n\n // update the ending block\n this.endingBlock = block.block\n const blockProducerAddressRaw = block.addresses[0]\n\n if (blockProducerAddressRaw === undefined) return true\n\n const blockProducerAddress = toAddress(blockProducerAddressRaw)\n\n const producerKey = String(blockProducerAddress)\n const existingProducer: AnalyzedProducer | undefined = this.producers[producerKey]\n if (isDefined(existingProducer)) {\n existingProducer.rewardsEarned = (existingProducer.rewardsEarned ?? 0n) + 0n\n existingProducer.blocksProduced++\n } else {\n const newProducer: AnalyzedProducer = {\n address: blockProducerAddress, rewardsEarned: 0n, blocksProduced: 1,\n }\n this.producers[producerKey] = newProducer\n }\n\n return true\n }\n\n result(): ChainSummaryProducers {\n return {\n endingBlock: this.endingBlock,\n producers: this.producers,\n schema: ChainSummaryProducersSchema,\n startingBlock: this.startingBlock,\n }\n }\n\n shouldContinue(): boolean {\n return true\n }\n}\n", "import type { Address } from '@ariestools/sdk'\nimport type { Payload } from '@xyo-network/sdk'\nimport { asSchema, isPayloadOfSchemaType } from '@xyo-network/sdk'\n\nexport const ChainSummaryProducersSchema = asSchema('network.xyo.chain.summary.producers', true)\nexport type ChainSummaryProducersSchema = typeof ChainSummaryProducersSchema\n\nexport interface AnalyzedProducer {\n address: Address\n blocksProduced: number\n rewardsEarned: bigint\n}\n\nexport interface ChainSummaryProducersFields {\n endingBlock: number\n producers: Record<string, AnalyzedProducer>\n startingBlock: number\n}\n\nexport type ChainSummaryProducers = Payload<ChainSummaryProducersFields, ChainSummaryProducersSchema>\nexport const isChainSummaryProducers = isPayloadOfSchemaType<ChainSummaryProducers>(ChainSummaryProducersSchema)\n", "import type { Promisable } from '@ariestools/sdk'\nimport { assertEx } from '@ariestools/sdk'\nimport {\n type ChainAnalyzer, type ChainStakeIntent, type HydratedBlock,\n type Intent,\n isChainStakeIntentWithStorageMeta,\n} from '@xyo-network/xl1-sdk'\n\nimport type { ChainSummaryStakeIntent } from './ChainSummaryStakeIntent.ts'\nimport { ChainSummaryStakeIntentSchema } from './ChainSummaryStakeIntent.ts'\n\nexport class ChainStakeIntentAnalyzer implements ChainAnalyzer<ChainSummaryStakeIntent> {\n private _endingBlock: number | undefined = undefined\n private _intent: Intent\n private _intentPayloads: ChainStakeIntent[] = []\n private _startingBlock: number | undefined = undefined\n\n constructor(intent: Intent) {\n this._intent = intent\n }\n\n onBlock([block, validatedPayloads]: HydratedBlock): Promisable<boolean> {\n this._startingBlock ??= block.block\n\n // Update the ending block\n this._endingBlock = block.block\n const intents = validatedPayloads.filter(isChainStakeIntentWithStorageMeta)\n const desiredIntents = intents.filter(intent => intent.intent === this._intent)\n this._intentPayloads.push(...desiredIntents)\n return true\n }\n\n result(): ChainSummaryStakeIntent {\n assertEx(this._startingBlock !== undefined, () => 'ChainStakeIntentAnalyzer: Invalid startingBlock')\n assertEx(this._endingBlock !== undefined, () => 'ChainStakeIntentAnalyzer: Invalid endingBlock')\n return {\n endingBlock: this._endingBlock!,\n intents: this._intentPayloads,\n schema: ChainSummaryStakeIntentSchema,\n startingBlock: this._startingBlock!,\n }\n }\n\n shouldContinue(): boolean {\n return true\n }\n}\n", "import type { Payload } from '@xyo-network/sdk'\nimport { asSchema, isPayloadOfSchemaType } from '@xyo-network/sdk'\nimport type { ChainStakeIntent } from '@xyo-network/xl1-sdk'\n\nexport const ChainSummaryStakeIntentSchema = asSchema('network.xyo.chain.summary.staked.intent', true)\nexport type ChainSummaryStakeIntentSchema = typeof ChainSummaryStakeIntentSchema\n\ninterface ChainSummaryStakeIntentFields {\n endingBlock: number\n intents: ChainStakeIntent[]\n startingBlock: number\n}\n\nexport type ChainSummaryStakeIntent = Payload<ChainSummaryStakeIntentFields, ChainSummaryStakeIntentSchema>\nexport const isChainSummaryStakeIntent = isPayloadOfSchemaType<ChainSummaryStakeIntent>(ChainSummaryStakeIntentSchema)\n", "import {\n type Address, type Hash, type Hex,\n} from '@ariestools/sdk'\nimport type { Payload } from '@xyo-network/sdk'\nimport { asSchema, isPayloadOfSchemaType } from '@xyo-network/sdk'\nimport type { SignedBigInt } from '@xyo-network/xl1-sdk'\n\nexport const ChainSummaryTransfersSchema = asSchema('network.xyo.chain.summary.transfers', true)\nexport type ChainSummaryTransfersSchema = typeof ChainSummaryTransfersSchema\n\nexport interface ChainSummaryTransfersFields {\n firstBlock: Hash | null\n hasMinTransfer?: Record<Address, Hex>\n lastBlock: Hash | null\n transfers: Record<Address, Record<Address, SignedBigInt>>\n}\n\nexport type ChainSummaryTransfers = Payload<ChainSummaryTransfersFields, ChainSummaryTransfersSchema>\nexport const isChainSummaryTransfers = isPayloadOfSchemaType<ChainSummaryTransfers>(ChainSummaryTransfersSchema)\n", "import type { Address, Hash } from '@ariestools/sdk'\nimport { isDefined, toAddress } from '@ariestools/sdk'\nimport { trace, type Tracer } from '@opentelemetry/api'\nimport { PayloadBuilder } from '@xyo-network/sdk'\nimport type {\n ChainAnalyzer,\n HydratedBlockWithHashMeta, SignedBigInt,\n} from '@xyo-network/xl1-sdk'\nimport {\n netTransfersForPayloads,\n parseSignedBigInt, toSignedBigInt,\n} from '@xyo-network/xl1-sdk'\n\nimport type { ChainSummaryTransfers } from './ChainSummaryTransfers.ts'\nimport { ChainSummaryTransfersSchema } from './ChainSummaryTransfers.ts'\n\nconst bigintTransfers = (transfers: Record<Address, Record<Address, SignedBigInt>>) => {\n const result: Record<string, Record<string, bigint>> = {}\n for (const [from, toMap] of Object.entries(transfers)) {\n const fromKey = String(toAddress(from))\n for (const [to, balance] of Object.entries(toMap)) {\n const toKey = String(toAddress(to))\n if (isDefined(balance)) {\n const fromTransfers = result[fromKey] ?? {}\n result[fromKey] = fromTransfers\n fromTransfers[toKey] = parseSignedBigInt(balance)\n }\n }\n }\n return result\n}\n\nexport class TransferAnalyzer implements ChainAnalyzer {\n protected _tracer: Tracer | undefined\n private _firstBlock?: Hash\n private _lastBlock?: Hash\n private _transfers: Record<string, Record<string, bigint>> = {}\n\n constructor(startingTransfers?: ChainSummaryTransfers) {\n this._transfers = startingTransfers ? bigintTransfers(startingTransfers.transfers) : {}\n }\n\n protected get tracer() {\n if (this._tracer) return this._tracer\n this._tracer = trace.getTracer('TransferAnalyzer')\n return this._tracer\n }\n\n onBlock([block, payloads]: HydratedBlockWithHashMeta): boolean {\n this._firstBlock = this._firstBlock ?? block._hash\n this._lastBlock = block._hash\n const netTransfers = netTransfersForPayloads({ singletons: {} }, payloads)\n for (const [from, toMap] of Object.entries(netTransfers)) {\n const fromKey = String(toAddress(from))\n const fromTransfers = this._transfers[fromKey] ?? {}\n this._transfers[fromKey] = fromTransfers\n for (const [to, balance] of Object.entries(toMap)) {\n const toKey = String(toAddress(to))\n fromTransfers[toKey] = (fromTransfers[toKey] ?? 0n) + balance\n }\n }\n return this.shouldContinue()\n }\n\n result() {\n const transfers: Record<string, Record<string, SignedBigInt>> = {}\n for (const [from, toMap] of Object.entries(this._transfers)) {\n const fromKey = String(toAddress(from))\n const positiveTransfers = Object.entries(toMap).filter(([, balance]) => balance > 0n)\n for (const [to, balance] of positiveTransfers) {\n const fromTransfers = transfers[fromKey] ?? {}\n transfers[fromKey] = fromTransfers\n const toKey = String(toAddress(to))\n fromTransfers[toKey] = toSignedBigInt(balance)\n }\n }\n const builder = new PayloadBuilder<ChainSummaryTransfers>({ schema: ChainSummaryTransfersSchema })\n return builder.fields({\n firstBlock: this._firstBlock ?? null,\n lastBlock: this._lastBlock ?? null,\n transfers,\n }).build()\n }\n\n shouldContinue() {\n return true\n }\n}\n"],
5
+ "mappings": ";AAEA;AAAA,EACE;AAAA,EAAU;AAAA,EAAS;AAAA,OACd;AAOP,SAAS,oBAAoB;AAE7B,IAAM,eAAe,OAAO,OAAsB,aAAsD;AACtG,QAAM,QAAQ,IAAI,SAAS,IAAI,OAAO,YAAY;AAChD,UAAM,QAAQ,QAAQ,KAAK;AAAA,EAC7B,CAAC,CAAC;AACF,SAAO;AACT;AAEO,IAAM,eAAe,OAC1B,SACA,UAEA,MAEA,eAA4B,MAE5B,WAAW,CAAC,OACW;AACvB,QAAM,EAAE,OAAO,IAAI;AACnB,UAAQ,IAAI,sBAAsB,YAAY;AAC9C,SAAO,SAAS,MAAM,cAAc,gBAAgB,YAAY;AAC9D,QAAI,kBAAkB;AACtB,QAAI,gBAAgB,aAAa,CAAC,KAAK,OAAO,OAAO,gBAAgB,IAAI;AACzE,QAAI,SAA2C,OAAO,SAAS,WAAW,MAAM,aAAa,SAAS,IAAI,IAAI;AAE9G,YAAQ,IAAI,uBAAuB,SAAS,CAAC,EAAE,KAAK;AACpD,QAAI,iBAAiB,QAAQ,SAAS,CAAC,EAAE,UAAU,aAAc,QAAO,CAAC;AACzE,WAAO,UAAW,gBAAgB,IAAK;AACrC,uBAAiB;AACjB,YAAM,aAAa,QAAQ,QAAQ;AACnC,wBAAkB,OAAO,CAAC,EAAE;AAC5B,UAAI;AACF,iBAAS,OAAO,CAAC,EAAE,aAAa,OAAO,OAAO,MAAM,aAAa,SAAS,OAAO,CAAC,EAAE,QAAQ;AAAA,MAC9F,SAAS,IAAI;AACX,YAAI,QAAQ,EAAE,GAAG;AACf,kBAAQ,KAAK,yBAAyB,EAAE;AAAA,QAC1C;AACA;AAAA,MACF;AACA,UAAI,SAAS,CAAC,EAAE,UAAU,aAAc;AAAA,IAC1C;AACA,QAAI,iBAAiB,QAAQ,aAAa,CAAC,MAAM,oBAAoB,GAAG;AACtE,cAAQ,KAAK,+CAA+C,eAAe,MAAM,YAAY,EAAE;AAAA,IACjG;AACA,YAAQ,IAAI,qBAAqB,eAAe;AAChD,WAAO,SAAS,IAAI,CAAC,YAAY;AAC/B,aAAO,QAAQ,OAAO;AAAA,IACxB,CAAC;AAAA,EACH,GAAG,OAAO,GAAG,MAAM,qBAAqB;AAC1C;;;AC5DA,SAAS,WAAW,iBAAiB;AACrC,SAAS,aAA0B;AACnC,SAAS,sBAAsB;AAK/B;AAAA,EACE;AAAA,EACA;AAAA,EAAmB;AAAA,OACd;;;ACPP,SAAS,UAAU,6BAA6B;AAGzC,IAAM,6BAA6B,SAAS,sCAAsC,IAAI;AAWtF,IAAM,yBAAyB,sBAA4C,0BAA0B;;;ADF5G,IAAM,iBAAiB,CAAC,aAAqD;AAC3E,QAAM,SAAiC,CAAC;AACxC,aAAW,CAAC,SAAS,OAAO,KAAK,OAAO,QAAQ,QAAQ,GAAG;AACzD,QAAI,UAAU,OAAO,GAAG;AACtB,YAAM,cAAc,OAAO,UAAU,OAAO,CAAC;AAC7C,aAAO,WAAW,IAAI,kBAAkB,OAAO;AAAA,IACjD;AAAA,EACF;AACA,SAAO;AACT;AAEO,IAAM,kBAAN,MAA+C;AAAA,EAC1C;AAAA,EACF;AAAA,EACA,YAAoC,CAAC;AAAA,EACrC;AAAA,EACA;AAAA,EACA;AAAA,EAER,YAAY,YAAuB,CAAC,GAAG,cAAwB,CAAC,GAAG,kBAAyC;AAC1G,SAAK,aAAa;AAClB,SAAK,eAAe;AACpB,SAAK,YAAY,mBAAmB,eAAe,iBAAiB,QAAQ,IAAI,CAAC;AAAA,EACnF;AAAA,EAEA,IAAc,SAAS;AACrB,QAAI,KAAK,QAAS,QAAO,KAAK;AAC9B,SAAK,UAAU,MAAM,UAAU,iBAAiB;AAChD,WAAO,KAAK;AAAA,EACd;AAAA,EAEA,QAAQ,CAAC,OAAO,QAAQ,GAAuC;AAC7D,SAAK,cAAc,KAAK,eAAe,MAAM;AAC7C,SAAK,aAAa,MAAM;AACxB,UAAM,cAAc,uBAAuB,EAAE,YAAY,CAAC,EAAE,GAAG,QAAQ;AACvE,eAAW,CAAC,SAAS,OAAO,KAAK,OAAO,QAAQ,WAAW,GAAG;AAC5D,YAAM,cAAc,OAAO,UAAU,OAAO,CAAC;AAC7C,WAAK,UAAU,WAAW,KAAK,KAAK,UAAU,WAAW,KAAK,MAAM;AAAA,IACtE;AACA,WAAO,KAAK,eAAe;AAAA,EAC7B;AAAA,EAEA,SAAS;AACP,UAAM,WAAyC,CAAC;AAChD,UAAM,mBAAmB,OAAO,QAAQ,KAAK,SAAS,EAAE,OAAO,CAAC,CAAC,EAAE,OAAO,MAAM,UAAU,EAAE;AAC5F,eAAW,CAAC,SAAS,OAAO,KAAK,kBAAkB;AACjD,YAAM,cAAc,OAAO,UAAU,OAAO,CAAC;AAC7C,eAAS,WAAW,IAAI,eAAe,OAAO;AAAA,IAChD;AACA,UAAM,UAAU,IAAI,eAAqC,EAAE,QAAQ,2BAA2B,CAAC;AAC/F,WAAO,QAAQ,OAAO;AAAA,MACpB,YAAY,KAAK,eAAe;AAAA,MAChC,WAAW,KAAK,cAAc;AAAA,MAC9B;AAAA,IACF,CAAC,EAAE,MAAM;AAAA,EACX;AAAA,EAEA,iBAAiB;AACf,WAAO,CAAC,KAAK,sBAAsB;AAAA,EACrC;AAAA,EAEU,wBAAwB;AAChC,QAAI,KAAK,aAAa,WAAW,EAAG,QAAO;AAC3C,aAAS,IAAI,GAAG,IAAI,KAAK,WAAW,QAAQ,KAAK;AAC/C,YAAM,cAAc,OAAO,KAAK,WAAW,CAAC,CAAC;AAC7C,WAAK,KAAK,UAAU,WAAW,KAAK,MAAM,KAAK,aAAa,CAAC,EAAG,QAAO;AAAA,IACzE;AACA,WAAO;AAAA,EACT;AACF;;;AEpFA,SAAS,YAAY;AAGrB,SAAS,uBAAuB;AAQzB,IAAM,iBAAN,cAA0F,KAAc;AAAA,EACnG;AAAA;AAAA;AAAA,EAIA;AAAA,EAEV,YAAY,QAAiB;AAC3B,UAAM,MAAM;AACZ,SAAK,yBAAyB,CAAC,GAAI,OAAO,0BAA0B,CAAC,CAAE;AAAA,EACzE;AAAA,EAEA,IAAc,cAAc;AAC1B,WAAO,KAAK,OAAO;AAAA,EACrB;AAAA,EAEA,IAAc,uBAAuB;AACnC,WAAO,KAAK,wBAAwB,GAAG,EAAE,IAAI,CAAC,EAAE,SAAS;AAAA,EAC3D;AAAA,EAEA,IAAc,gBAAgB;AAC5B,WAAO,KAAK,OAAO,iBAAiB;AAAA,EACtC;AAAA,EAEA,IAAc,cAAc;AAC1B,WAAO,gBAAgB,CAAC,KAAK,uBAAuB,GAAG,CAAC,IAAI,CAAC,EAAE,SAAS,GAAG,KAAK,oBAAoB,CAAC;AAAA,EACvG;AAAA,EAEA,sBAAsB,OAA4D;AAChF,SAAK,yBAAyB,CAAC,GAAG,KAAK,wBAAwB,GAAG,KAAK,EAAE,MAAM,CAAC,KAAK,aAAa;AAAA,EACpG;AACF;;;AC1CA;AAAA,EACE,aAAAA;AAAA,EAAW,iBAAAC;AAAA,EAAe,aAAAC;AAAA,OACrB;AAIP;AAAA,EACE;AAAA,EAAe;AAAA,EAAY;AAAA,OACtB;AAyBA,IAAM,oBAAN,cAAgC,eAAwC;AAAA,EACnE;AAAA,EACA;AAAA,EACA;AAAA,EACF,sBAAsB,KAAK,IAAI;AAAA,EAEvC,YAAY,QAAiC;AAC3C,UAAM,MAAM;AACZ,SAAK,mBAAmB,OAAO;AAC/B,SAAK,YAAY,OAAO;AACxB,SAAK,gBAAgB,OAAO;AAAA,EAC9B;AAAA,EAEA,IAAc,UAAU;AACtB,WAAO,KAAK,OAAO;AAAA,EACrB;AAAA,EAEA,IAAc,gBAAgB;AAC5B,WAAO,KAAK,OAAO;AAAA,EACrB;AAAA,EAEA,MAAM,eAA2D;AAC/D,WAAO,MAAMC,eAAc,gBAAgB,YAAY;AACrD,YAAM,oBAAoB,MAAM,KAAK,cAAc,cAAc;AACjE,YAAM,mBAAmB,KAAK;AAG9B,YAAM,iBAAiBC,WAAU,gBAAgB,KAAK,iBAAiB,SAAS,IAC5E,kBAAkB,OAAO,QAAM,iBAAiB,SAASC,WAAU,GAAG,CAAC,EAAE,UAAU,CAAC,CAAC,CAAC,CAAC,IACvF;AAGJ,WAAK,yBAAyB,MAAM,iBAAiB,KAAK,SAAS,KAAK,aAAa,KAAK,eAAe,KAAK,sBAAsB;AACpI,YAAM,SAAS,WAAW,KAAK,SAAS,KAAK,wBAAwB,cAAc;AACnF,aAAO,cAAc,KAAK,wBAAwB,QAAQ,EAAE,WAAW,KAAK,WAAW,eAAe,KAAK,cAAc,CAAC,KAAK,KAAK;AAAA,IACtI,GAAG,KAAK,OAAO;AAAA,EACjB;AACF;;;ACtEA,SAAS,aAAAC,YAAW,aAAAC,kBAAiB;;;ACCrC,SAAS,YAAAC,WAAU,yBAAAC,8BAA6B;AAEzC,IAAM,8BAA8BD,UAAS,uCAAuC,IAAI;AAgBxF,IAAM,0BAA0BC,uBAA6C,2BAA2B;;;ADbxG,IAAM,yBAAN,MAA6E;AAAA,EAC1E,cAAc;AAAA,EACd,YAA8C,CAAC;AAAA,EAC/C,gBAAgB;AAAA,EAExB,QAAQ,CAAC,KAAK,GAAuC;AAEnD,QAAI,MAAM,UAAU,KAAK,YAAa,QAAO;AAG7C,SAAK,cAAc,MAAM;AACzB,UAAM,0BAA0B,MAAM,UAAU,CAAC;AAEjD,QAAI,4BAA4B,OAAW,QAAO;AAElD,UAAM,uBAAuBC,WAAU,uBAAuB;AAE9D,UAAM,cAAc,OAAO,oBAAoB;AAC/C,UAAM,mBAAiD,KAAK,UAAU,WAAW;AACjF,QAAIC,WAAU,gBAAgB,GAAG;AAC/B,uBAAiB,iBAAiB,iBAAiB,iBAAiB,MAAM;AAC1E,uBAAiB;AAAA,IACnB,OAAO;AACL,YAAM,cAAgC;AAAA,QACpC,SAAS;AAAA,QAAsB,eAAe;AAAA,QAAI,gBAAgB;AAAA,MACpE;AACA,WAAK,UAAU,WAAW,IAAI;AAAA,IAChC;AAEA,WAAO;AAAA,EACT;AAAA,EAEA,SAAgC;AAC9B,WAAO;AAAA,MACL,aAAa,KAAK;AAAA,MAClB,WAAW,KAAK;AAAA,MAChB,QAAQ;AAAA,MACR,eAAe,KAAK;AAAA,IACtB;AAAA,EACF;AAAA,EAEA,iBAA0B;AACxB,WAAO;AAAA,EACT;AACF;;;AElDA,SAAS,YAAAC,iBAAgB;AACzB;AAAA,EAGE;AAAA,OACK;;;ACLP,SAAS,YAAAC,WAAU,yBAAAC,8BAA6B;AAGzC,IAAM,gCAAgCD,UAAS,2CAA2C,IAAI;AAU9F,IAAM,4BAA4BC,uBAA+C,6BAA6B;;;ADH9G,IAAM,2BAAN,MAAiF;AAAA,EAC9E,eAAmC;AAAA,EACnC;AAAA,EACA,kBAAsC,CAAC;AAAA,EACvC,iBAAqC;AAAA,EAE7C,YAAY,QAAgB;AAC1B,SAAK,UAAU;AAAA,EACjB;AAAA,EAEA,QAAQ,CAAC,OAAO,iBAAiB,GAAuC;AACtE,SAAK,mBAAmB,MAAM;AAG9B,SAAK,eAAe,MAAM;AAC1B,UAAM,UAAU,kBAAkB,OAAO,iCAAiC;AAC1E,UAAM,iBAAiB,QAAQ,OAAO,YAAU,OAAO,WAAW,KAAK,OAAO;AAC9E,SAAK,gBAAgB,KAAK,GAAG,cAAc;AAC3C,WAAO;AAAA,EACT;AAAA,EAEA,SAAkC;AAChC,IAAAC,UAAS,KAAK,mBAAmB,QAAW,MAAM,iDAAiD;AACnG,IAAAA,UAAS,KAAK,iBAAiB,QAAW,MAAM,+CAA+C;AAC/F,WAAO;AAAA,MACL,aAAa,KAAK;AAAA,MAClB,SAAS,KAAK;AAAA,MACd,QAAQ;AAAA,MACR,eAAe,KAAK;AAAA,IACtB;AAAA,EACF;AAAA,EAEA,iBAA0B;AACxB,WAAO;AAAA,EACT;AACF;;;AE1CA,SAAS,YAAAC,WAAU,yBAAAC,8BAA6B;AAGzC,IAAM,8BAA8BD,UAAS,uCAAuC,IAAI;AAWxF,IAAM,0BAA0BC,uBAA6C,2BAA2B;;;ACjB/G,SAAS,aAAAC,YAAW,aAAAC,kBAAiB;AACrC,SAAS,SAAAC,cAA0B;AACnC,SAAS,kBAAAC,uBAAsB;AAK/B;AAAA,EACE;AAAA,EACA,qBAAAC;AAAA,EAAmB,kBAAAC;AAAA,OACd;AAKP,IAAM,kBAAkB,CAAC,cAA8D;AACrF,QAAM,SAAiD,CAAC;AACxD,aAAW,CAAC,MAAM,KAAK,KAAK,OAAO,QAAQ,SAAS,GAAG;AACrD,UAAM,UAAU,OAAOC,WAAU,IAAI,CAAC;AACtC,eAAW,CAAC,IAAI,OAAO,KAAK,OAAO,QAAQ,KAAK,GAAG;AACjD,YAAM,QAAQ,OAAOA,WAAU,EAAE,CAAC;AAClC,UAAIC,WAAU,OAAO,GAAG;AACtB,cAAM,gBAAgB,OAAO,OAAO,KAAK,CAAC;AAC1C,eAAO,OAAO,IAAI;AAClB,sBAAc,KAAK,IAAIC,mBAAkB,OAAO;AAAA,MAClD;AAAA,IACF;AAAA,EACF;AACA,SAAO;AACT;AAEO,IAAM,mBAAN,MAAgD;AAAA,EAC3C;AAAA,EACF;AAAA,EACA;AAAA,EACA,aAAqD,CAAC;AAAA,EAE9D,YAAY,mBAA2C;AACrD,SAAK,aAAa,oBAAoB,gBAAgB,kBAAkB,SAAS,IAAI,CAAC;AAAA,EACxF;AAAA,EAEA,IAAc,SAAS;AACrB,QAAI,KAAK,QAAS,QAAO,KAAK;AAC9B,SAAK,UAAUC,OAAM,UAAU,kBAAkB;AACjD,WAAO,KAAK;AAAA,EACd;AAAA,EAEA,QAAQ,CAAC,OAAO,QAAQ,GAAuC;AAC7D,SAAK,cAAc,KAAK,eAAe,MAAM;AAC7C,SAAK,aAAa,MAAM;AACxB,UAAM,eAAe,wBAAwB,EAAE,YAAY,CAAC,EAAE,GAAG,QAAQ;AACzE,eAAW,CAAC,MAAM,KAAK,KAAK,OAAO,QAAQ,YAAY,GAAG;AACxD,YAAM,UAAU,OAAOH,WAAU,IAAI,CAAC;AACtC,YAAM,gBAAgB,KAAK,WAAW,OAAO,KAAK,CAAC;AACnD,WAAK,WAAW,OAAO,IAAI;AAC3B,iBAAW,CAAC,IAAI,OAAO,KAAK,OAAO,QAAQ,KAAK,GAAG;AACjD,cAAM,QAAQ,OAAOA,WAAU,EAAE,CAAC;AAClC,sBAAc,KAAK,KAAK,cAAc,KAAK,KAAK,MAAM;AAAA,MACxD;AAAA,IACF;AACA,WAAO,KAAK,eAAe;AAAA,EAC7B;AAAA,EAEA,SAAS;AACP,UAAM,YAA0D,CAAC;AACjE,eAAW,CAAC,MAAM,KAAK,KAAK,OAAO,QAAQ,KAAK,UAAU,GAAG;AAC3D,YAAM,UAAU,OAAOA,WAAU,IAAI,CAAC;AACtC,YAAM,oBAAoB,OAAO,QAAQ,KAAK,EAAE,OAAO,CAAC,CAAC,EAAE,OAAO,MAAM,UAAU,EAAE;AACpF,iBAAW,CAAC,IAAI,OAAO,KAAK,mBAAmB;AAC7C,cAAM,gBAAgB,UAAU,OAAO,KAAK,CAAC;AAC7C,kBAAU,OAAO,IAAI;AACrB,cAAM,QAAQ,OAAOA,WAAU,EAAE,CAAC;AAClC,sBAAc,KAAK,IAAII,gBAAe,OAAO;AAAA,MAC/C;AAAA,IACF;AACA,UAAM,UAAU,IAAIC,gBAAsC,EAAE,QAAQ,4BAA4B,CAAC;AACjG,WAAO,QAAQ,OAAO;AAAA,MACpB,YAAY,KAAK,eAAe;AAAA,MAChC,WAAW,KAAK,cAAc;AAAA,MAC9B;AAAA,IACF,CAAC,EAAE,MAAM;AAAA,EACX;AAAA,EAEA,iBAAiB;AACf,WAAO;AAAA,EACT;AACF;",
6
6
  "names": ["isDefined", "spanRootAsync", "toAddress", "spanRootAsync", "isDefined", "toAddress", "isDefined", "toAddress", "asSchema", "isPayloadOfSchemaType", "toAddress", "isDefined", "assertEx", "asSchema", "isPayloadOfSchemaType", "assertEx", "asSchema", "isPayloadOfSchemaType", "isDefined", "toAddress", "trace", "PayloadBuilder", "parseSignedBigInt", "toSignedBigInt", "toAddress", "isDefined", "parseSignedBigInt", "trace", "toSignedBigInt", "PayloadBuilder"]
7
7
  }
@@ -460,7 +460,6 @@ import {
460
460
  evmEventIndexHeadPath,
461
461
  evmEventIndexManifestPath,
462
462
  evmEventIndexTailPath,
463
- resolveRestConnectionEndpoint,
464
463
  StakeEventsViewerMoniker
465
464
  } from "@xyo-network/xl1-sdk";
466
465
  import { Interface } from "ethers";
@@ -475,28 +474,18 @@ var RestStakeEventsViewer = class extends AbstractCreatableProvider {
475
474
  syncPromise;
476
475
  tailFrame;
477
476
  get address() {
478
- return this.params.address;
477
+ return toEthAddress4(assertEx5(this.config.chain.id, () => "RestStakeEventsViewer requires config.chain.id (the staking contract address)"));
479
478
  }
480
479
  get eventIndexBaseUrl() {
481
- return this.params.eventIndexBaseUrl;
480
+ const connection = RestStakeEventsViewer.requireBoundConnection(this.config);
481
+ const baseUrl = assertEx5(
482
+ connection.config.type === "rest" ? connection.config.baseUrl : void 0,
483
+ () => `Connection "${connection.name}" bound to RestStakeEventsViewer requires a rest baseUrl`
484
+ );
485
+ return baseUrl.replace(/\/+$/, "");
482
486
  }
483
487
  get fetchFn() {
484
- return this.params.fetchFn ?? fetch.bind(globalThis);
485
- }
486
- static async paramsHandler(params) {
487
- const contextConfig = params.context?.config;
488
- const address = params.address ?? toEthAddress4(assertEx5(contextConfig?.chain?.id, () => "RestStakeEventsViewer requires an address param or config.chain.id"));
489
- const moniker = this.defaultMoniker;
490
- const eventIndexBaseUrl = isDefined3(params.eventIndexBaseUrl) && params.eventIndexBaseUrl !== "" ? params.eventIndexBaseUrl : resolveRestConnectionEndpoint(
491
- assertEx5(contextConfig, () => "Context config is required to resolve the EVM event index endpoint"),
492
- moniker
493
- );
494
- return {
495
- ...await super.paramsHandler(params),
496
- address,
497
- eventIndexBaseUrl: eventIndexBaseUrl.replace(/\/+$/, ""),
498
- fetchFn: params.fetchFn
499
- };
488
+ return this.context.fetchFn ?? fetch.bind(globalThis);
500
489
  }
501
490
  async positionCount(range) {
502
491
  const events = await this.stakeEvents(range);
@@ -599,12 +588,22 @@ RestStakeEventsViewer = __decorateClass([
599
588
 
600
589
  // src/modules/ethereum/providers/AbstractEvmRunner.ts
601
590
  import { assertEx as assertEx6 } from "@ariestools/sdk";
602
- import { AbstractEvmViewer } from "@xyo-network/xl1-sdk";
603
- var AbstractEvmRunner = class extends AbstractEvmViewer {
604
- static async paramsHandler(params) {
605
- const runner = assertEx6(params?.runner, () => new Error("No runner defined"));
606
- const provider = assertEx6(runner.provider, () => new Error("Runner must have a provider defined"));
607
- return { ...await super.paramsHandler({ ...params, provider }), runner };
591
+ import { AbstractEvmProvider } from "@xyo-network/xl1-sdk";
592
+ function evmContractRunnerHandleKey(moniker) {
593
+ return `evm-contract-runner:${moniker}`;
594
+ }
595
+ var AbstractEvmRunner = class extends AbstractEvmProvider {
596
+ _runner;
597
+ get runner() {
598
+ return assertEx6(this._runner, () => "EVM contract runner not initialized");
599
+ }
600
+ /** Creates the provider instance after its dependencies and configuration have resolved. */
601
+ async createHandler() {
602
+ const key = evmContractRunnerHandleKey(this.moniker);
603
+ this._runner = await this.connectionHandles.getOrOpen(key, () => {
604
+ throw new Error(`No EVM contract runner seeded for [${this.moniker}] \u2014 set context.connectionHandles["${key}"] before create`);
605
+ });
606
+ await super.createHandler();
608
607
  }
609
608
  };
610
609
 
@@ -634,7 +633,7 @@ var EvmStakeRunner = class extends AbstractEvmRunner {
634
633
  return true;
635
634
  }
636
635
  connectContract(address) {
637
- return IStakedXyoChain__factory.connect(address, this.params.runner);
636
+ return IStakedXyoChain__factory.connect(address, this.runner);
638
637
  }
639
638
  };
640
639
  __publicField(EvmStakeRunner, "connectionTypes", ["evm-rpc"]);
@@ -657,6 +656,7 @@ export {
657
656
  createChainContract,
658
657
  createChainRewardsContract,
659
658
  ethBlockRate,
659
+ evmContractRunnerHandleKey,
660
660
  getDefaultGasConfig,
661
661
  getEthBlockRateBlocks,
662
662
  nextContractAddress,