@xyo-network/xl1-protocol-sdk 1.26.19 → 1.26.21

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.
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/actor/ActorV3.ts","../../src/amount/splitOnDecimal.ts","../../src/amount/splitOnDecimalToString.ts","../../src/amount/ShiftedBigInt.ts","../../src/amount/XL1Amount.ts","../../src/block/hydrate/allHashesPresent.ts","../../src/block/hydrate/blockPayloadsFromHydratedBlock.ts","../../src/block/hydrate/flattenHydratedBlock.ts","../../src/block/hydrate/flattenHydratedBlocks.ts","../../src/block/hydrate/hydrateBlock.ts","../../src/block/hydrate/transactionsFromHydratedBlock.ts","../../src/block/hydrate/tryHydrateBlock.ts","../../src/block/primitives/blockFromBlockNumber.ts","../../src/ChainContextHelpers.ts","../../src/driver/cache/LruCacheMap.ts","../../src/driver/memory/MemoryMap.ts","../../src/block/primitives/frames/calculateFramesFromRange.ts","../../src/block/primitives/frames/deepCalculateFramesFromRange.ts","../../src/block/primitives/hashFromBlockNumber.ts","../../src/block/primitives/model.ts","../../src/block/primitives/toStepIdentityString.ts","../../src/block/primitives/validateTransactionOpcodes.ts","../../src/config/Actor.ts","../../src/validation/lib/isLocalhost.ts","../../src/validation/lib/getUrl.ts","../../src/validation/schema/Address.ts","../../src/validation/schema/Mnemonic.ts","../../src/config/Base.ts","../../src/config/Chain.ts","../../src/config/DataLake/DataLake.ts","../../src/config/DataLake/RestDataLakeConfig.ts","../../src/config/DataLake/DataLakeRemoteConfig.ts","../../src/config/DataLake/RouterDataLakeConfig.ts","../../src/config/Evm.ts","../../src/config/Log.ts","../../src/config/Providers.ts","../../src/config/Provider.ts","../../src/config/Remote.ts","../../src/config/storage/driver/Mongo.ts","../../src/config/storage/Storage.ts","../../src/config/Telemetry.ts","../../src/config/Validation.ts","../../src/config/Actors.ts","../../src/config/Config.ts","../../src/config/HostActor.ts","../../src/config/UsageMeta.ts","../../src/constants.ts","../../src/context/Actor.ts","../../src/model/CreatableProviderContext.zod.ts","../../src/model/PayloadBundle/bundledPayloadToHydratedBlock.ts","../../src/model/PayloadBundle/bundledPayloadToHydratedTransaction.ts","../../src/model/PayloadBundle/hydratedBlockToPayloadBundle.ts","../../src/model/PayloadBundle/hydratedTransactionToPayloadBundle.ts","../../src/transaction/buildRandomTransaction.ts","../../src/createTransferPayload.ts","../../src/transaction/buildTransaction.ts","../../src/transaction/buildUnsignedTransaction.ts","../../src/transaction/confirmSubmittedTransaction.ts","../../src/transaction/hydrateTransaction.ts","../../src/transaction/primitives/transactionBlockByteCount.ts","../../src/transaction/primitives/transactionElevatedPayloads.ts","../../src/transaction/primitives/transactionOperations.ts","../../src/transaction/primitives/transactionRequiredGas.ts","../../src/transaction/script.ts","../../src/transaction/signTransaction.ts","../../src/transaction/TransactionBuilder.ts","../../src/CreatableProvider/AbstractCreatableProvider.ts","../../src/CreatableProvider/ProviderFactory.ts","../../src/CreatableProvider/CreatableProvider.ts","../../src/CreatableProvider/CreatableProviderRegistry.ts","../../src/CreatableProvider/LabeledCreatableProviderFactory.ts","../../src/CreatableProvider/ProviderFactoryLocator.ts","../../src/context/getEmptyProviderContext.ts","../../src/context/HostActor.ts","../../src/createDeclarationPayload.ts","../../src/eip-712/Payloads/EIP712Data.ts","../../src/eip-712/Types.ts","../../src/eip-712/Payloads/EIP712Signature.ts","../../src/eip-712/sign.ts","../../src/eip-712/verify.ts","../../src/multipliers.ts","../../src/payloads/AddressPairPayload.ts","../../src/payloads/netBalancesForPayloads.ts","../../src/payloads/netSchemasForPayloads.ts","../../src/payloads/netTransfersForPayloads.ts","../../src/primitives/block/range/blockRangeSteps.ts","../../src/primitives/block/rate/blockRate.ts","../../src/primitives/block/rate/timeHelpers.ts","../../src/primitives/block/rate/stepRate.ts","../../src/primitives/block/rate/timeRate.ts","../../src/primitives/chain/getWindowedChain.ts","../../src/primitives/chain/step/chainStepRewardAddress.ts","../../src/primitives/payload/mergeTransfers.ts","../../src/primitives/step/completedStepRewardAddress.ts","../../src/primitives/step/derivedReceiveAddress.ts","../../src/primitives/step/stepBlockRange.ts","../../src/primitives/step/stepTransferIndex.ts","../../src/primitives/chain/step/stepRewardBlock.ts","../../src/primitives/chain/step/stepRewardTotal.ts","../../src/primitives/chain/step/stepsRewardTotal.ts","../../src/primitives/chain/time/externalBlockNumberFromXL1BlockNumber.ts","../../src/primitives/chain/time/externalBlockRangeFromXL1BlockRange.ts","../../src/primitives/chain/time/externalBlockRangeFromStep.ts","../../src/primitives/datalake/addDataLakePayloadsToPayloads.ts","../../src/primitives/datalake/addDataLakePayloads.ts","../../src/primitives/mapToMapType.ts","../../src/primitives/readPayloadMapFromStore.ts","../../src/primitives/rewardFromBlockNumber.ts","../../src/primitives/rewards/networkStakeStepRewardPositionWeight.ts","../../src/primitives/stake/activeStakeAtTimeByAddress.ts","../../src/primitives/stake/mergedAddRemoveStakeEventsByStaker.ts","../../src/primitives/stake/activeStakeAtTimeByPosition.ts","../../src/primitives/stake/mergedAddRemoveStakeEventsByPosition.ts","../../src/primitives/stake/allStakersForRange.ts","../../src/primitives/stake/allStakersForStep.ts","../../src/primitives/stake/weightedStakeForRangeByPosition.ts","../../src/primitives/state/findMostRecentBlock.ts","../../src/primitives/state/hydratedBlockByNumber.ts","../../src/primitives/transaction/elevatedPayloads.ts","../../src/primitives/uncle/scoreUncle.ts","../../src/primitives/uncle/findBestUncle.ts","../../src/primitives/uncle/findUncles.ts","../../src/services/StakeIntentService/ChainIndexingServiceStateSchema.ts","../../src/SignedBigInt.ts","../../src/simple/accountBalance/SimpleAccountBalanceViewer.ts","../../src/summary/model/BalancesStepSummary.ts","../../src/summary/model/SchemasStepSummary.ts","../../src/summary/model/StepSummary.ts","../../src/summary/model/TransfersSummary.ts","../../src/summary/primitives/balances/balancesStepSummaryFromRange.ts","../../src/summary/primitives/balances/balancesSummary.ts","../../src/summary/primitives/schemas/schemasStepSummaryFromRange.ts","../../src/summary/primitives/schemas/schemasSummary.ts","../../src/summary/primitives/transfers/transfersStepSummaryFromRange.ts","../../src/summary/primitives/transfers/transfersSummary.ts","../../src/simple/block/SimpleBlockViewer.ts","../../src/utils/HydratedCache.ts","../../src/utils/isZodError.ts","../../src/simple/blockReward/SimpleBlockRewardViewer.ts","../../src/simple/blockValidation/SimpleBlockValidationViewer.ts","../../src/simple/chainContractViewer/SimpleChainContractViewer.ts","../../src/simple/client/SimpleXyoClient.ts","../../src/simple/datalake/RestDataLakeRunner.ts","../../src/simple/datalake/AbstractRestDataLake.ts","../../src/simple/datalake/RestDataLakeViewer.ts","../../src/simple/datalake/SimpleDataLakeRunner.ts","../../src/simple/datalake/AbstractSimpleDataLake.ts","../../src/simple/datalake/SimpleDataLakeViewer.ts","../../src/simple/finalization/SimpleFinalizationRunner.ts","../../src/simple/finalization/SimpleFinalizationViewer.ts","../../src/simple/gateway/SimpleXyoGateway.ts","../../src/simple/gateway/SimpleXyoGatewayRunner.ts","../../src/simple/mempool/SimpleMempoolRunner.ts","../../src/simple/mempool/SimpleMempoolViewer.ts","../../src/simple/network/SimpleXyoNetwork.ts","../../src/simple/network/lib/FailedNetworkStatusPayloads.ts","../../src/simple/network/lib/StatusNetworks.ts","../../src/simple/permissions/SimpleXyoPermissions.ts","../../src/simple/permissions/store/MemoryPermissions.ts","../../src/simple/runner/SimpleXyoRunner.ts","../../src/simple/signer/SimpleXyoSigner.ts","../../src/simple/StakeEventsViewer/SimpleStakeEventsViewer.ts","../../src/simple/StakeTotalsViewer/SimpleStakeTotalsViewer.ts","../../src/simple/StakeViewer/SimpleStakeViewer.ts","../../src/simple/timeSync2/SimpleTimeSyncViewer.ts","../../src/simple/transactionValidation/SimpleTransactionValidationViewer.ts","../../src/simple/TransactionViewer/SimpleTransactionViewer.ts","../../src/simple/windowedBlock/SimpleWindowedBlockViewer.ts","../../src/status/ServiceStatus.ts","../../src/status/RuntimeStatusMonitor.ts","../../src/time/primitives/xl1BlockNumberToEthBlockNumber.ts","../../src/wallet/generateXyoBaseWalletFromPhrase.ts","../../src/wallet/paths.ts"],"sourcesContent":["import type {\n CreatableInstance, CreatableName, CreatableParams, CreatableStatusReporter, EmptyObject,\n Logger,\n} from '@xylabs/sdk-js'\nimport {\n AbstractCreatable,\n assertEx,\n delay, IdLogger,\n} from '@xylabs/sdk-js'\nimport type { AccountInstance } from '@xyo-network/sdk-js'\nimport { Semaphore } from 'async-mutex'\nimport z from 'zod'\n\nimport type { ProviderFactoryLocatorInstance } from '../CreatableProvider/index.ts'\n\nconst CreatableNameZod = z.custom<CreatableName>(val => typeof val === 'string' && val.length > 0)\nconst StatusReporterInstanceZod = z.custom<CreatableStatusReporter>(val => val && typeof val === 'object' && 'report' in val)\nconst AccountInstanceZod = z.custom<AccountInstance>(val => val && typeof val === 'object' && 'address' in val)\n\n/** ActorParamsV3Zod constant. */\nexport const ActorParamsV3Zod = z.object({\n account: AccountInstanceZod,\n locator: z.unknown(),\n name: CreatableNameZod,\n statusReporter: StatusReporterInstanceZod.optional(),\n})\n\n/** ActorParamsV3Zod type. */\nexport type ActorParamsV3Zod = z.infer<typeof ActorParamsV3Zod>\n\n/** ActorParamsV3 type. */\nexport type ActorParamsV3<T extends EmptyObject | void = void> = CreatableParams & {\n account: AccountInstance\n locator: ProviderFactoryLocatorInstance\n} & (T extends void ? EmptyObject : T)\n\n/** ActorInstanceV3 type. */\nexport type ActorInstanceV3<T extends ActorParamsV3 = ActorParamsV3> = CreatableInstance<T>\n\n/** ActorV3 implementation. */\nexport abstract class ActorV3<TParams extends ActorParamsV3 = ActorParamsV3> extends AbstractCreatable<TParams> {\n protected readonly _intervals: Map<string, ReturnType<typeof setInterval>> = new Map()\n protected readonly _semaphores: Map<string, Semaphore> = new Map()\n protected readonly _timeouts: Map<string, ReturnType<typeof setTimeout>> = new Map()\n\n private _logger?: Logger\n\n override get logger() {\n this._logger = new IdLogger(assertEx(this.context.logger, () => `Logger is required in context for actor ${this.name}.`), () => this.name)\n return this._logger\n }\n\n protected get account() {\n return this.params.account\n }\n\n protected get context() {\n return this.locator.context\n }\n\n protected get locator() {\n return this.params.locator\n }\n\n static override async paramsHandler<T extends ActorInstanceV3>(params: Partial<T['params']>) {\n const baseParams = await super.paramsHandler({ ...params, name: params.name ?? 'UnknownActor' })\n const account = assertEx(params.account, () => `params.account is required for actor ${baseParams.name}.`)\n const locator = assertEx(params.locator, () => `params.locator is required for actor ${baseParams.name}.`)\n return {\n ...baseParams, account, locator,\n } satisfies ActorParamsV3\n }\n\n /**\n * The timer runs until the actor is deactivated (or you manually stop it).\n */\n registerTimer(timerName: string, callback: () => Promise<void>, dueTimeMs: number, periodMs: number) {\n if (this.status !== 'starting') {\n this.logger?.warn(\n `Cannot register timer '${timerName}' because actor is not starting.`,\n )\n return\n }\n\n let running = false\n\n this._semaphores.set(timerName, new Semaphore(1))\n\n const timeoutId = setTimeout(() => {\n const intervalId = setInterval(() => {\n const semaphore = this._semaphores.get(timerName)\n if (this.status !== 'started' || !this._intervals.has(timerName) || !semaphore || running) return\n if (semaphore.isLocked()) {\n this.logger?.warn(\n `Skipping timer '${this.name}:${timerName}' execution because previous execution is still running.`,\n )\n return\n }\n semaphore.acquire().then(([, release]) => {\n const startTime = Date.now()\n running = true\n callback()\n .then(() => {\n const duration = Date.now() - startTime\n if (duration > periodMs) {\n this.logger?.warn(\n `Timer '${this.name}:${timerName}' execution took longer (${duration}ms) than the period (${periodMs}ms).`,\n )\n } else if (duration > 5000) {\n this.logger?.warn(\n `Timer '${this.name}:${timerName}' execution took longer (${duration}ms) than 5000ms.`,\n )\n }\n })\n .catch((error) => {\n this.logger?.error(`Error in timer '${this.name}:${timerName}': ${error}`)\n this.logger?.error(error.stack)\n })\n .finally(() => {\n release()\n running = false\n })\n }).catch((error) => {\n this.logger?.error(`Error acquiring semaphore for timer '${this.name}:${timerName}': ${error}`)\n })\n }, periodMs)\n\n // store interval so we can clear it on stop()\n this._intervals.set(timerName, intervalId)\n }, dueTimeMs)\n\n // store timeout so we can clear it on stop() if interval hasn't started yet\n this._timeouts.set(timerName, timeoutId)\n\n this.logger?.log(\n `Timer '${this.name}:${timerName}' registered: first call after ${dueTimeMs}ms, recurring every ${periodMs}ms.`,\n )\n }\n\n /**\n * Called by the Orchestrator when the actor is deactivated.\n * Stop all running timers.\n */\n override async stopHandler() {\n await super.stopHandler()\n this.logger?.log('Stopping all timers...')\n\n // wait for all semaphores to be free and acquire them to prevent new tasks from starting\n await Promise.all(\n [...this._semaphores.values()].map(async (semaphore) => {\n // Wait for any running tasks to complete\n while (semaphore.isLocked()) {\n this.logger?.log('Waiting for running timer task to complete...')\n await delay(500)\n }\n await semaphore.acquire()\n }),\n )\n\n this._semaphores.clear()\n\n for (const [, timeoutRef] of this._timeouts.entries()) {\n clearTimeout(timeoutRef)\n }\n this._timeouts.clear()\n\n for (const [, intervalRef] of this._intervals.entries()) {\n clearInterval(intervalRef)\n }\n this._intervals.clear()\n\n this.logger?.log('Stopped.')\n }\n}\n\n/** Actor implementation. */\nexport abstract class Actor<TParams extends ActorParamsV3 = ActorParamsV3> extends ActorV3<TParams> {}\n","/** Splits a bigint into whole and decimal parts based on the specified number of decimal places */\nexport const splitOnDecimal = (value: bigint, places = 18): [bigint, bigint] => {\n const whole = value / BigInt(10 ** places)\n const decimal = value % BigInt(10 ** places)\n return [whole, decimal]\n}\n","import { splitOnDecimal } from './splitOnDecimal.ts'\n\n/** Formats a bigint as a locale-aware decimal string with configurable precision and character limits */\nexport const splitOnDecimalToString = (\n value: bigint,\n places = 18,\n maxDecimal = places,\n maxCharacters = 9,\n minDecimals = 1,\n locale: Intl.LocalesArgument = 'en-US',\n): string => {\n const [whole, decimal] = splitOnDecimal(value, places)\n const remainderLength = decimal.toString().length\n const precedingZerosInDecimal = places - remainderLength\n if (whole === 0n && precedingZerosInDecimal >= maxDecimal && decimal !== 0n) return '< 0.'.padEnd(maxDecimal + 5, '0') + '1'\n\n const wholeCharacters = whole.toString(10).length\n const calcMaxDecimalCharacters = maxCharacters === -1 ? places : wholeCharacters > maxCharacters ? 0 : maxCharacters - wholeCharacters\n const maxDecimalCharacters = Math.min(maxDecimal, calcMaxDecimalCharacters)\n\n // Format whole number with thousand separators according to locale\n const formattedWhole = new Intl.NumberFormat(locale, {\n maximumFractionDigits: 0,\n useGrouping: true,\n }).format(whole)\n\n // Get decimal separator for the locale\n const decimalSeparator = new Intl.NumberFormat(locale)\n .formatToParts(1.1)\n .find(part => part.type === 'decimal')?.value ?? '.'\n\n // Pad decimal part to correct number of places\n let paddedDecimal = decimal.toString().padStart(places, '0').slice(0, maxDecimalCharacters)\n // remove unneeded trailing zeros (honoring minDecimals)\n while (paddedDecimal.length > minDecimals && paddedDecimal.endsWith('0')) {\n paddedDecimal = paddedDecimal.slice(0, -1)\n }\n\n return `${formattedWhole}${paddedDecimal.length > 0 ? decimalSeparator : ''}${paddedDecimal}`\n}\n","import type { ShiftedBigIntConfig } from '@xyo-network/xl1-protocol-lib'\n\nimport { splitOnDecimalToString } from './splitOnDecimalToString.ts'\n\n/** Represents a bigint with a fixed decimal point shift, supporting locale-aware string formatting */\nexport class ShiftedBigInt {\n static readonly defaultConfig: ShiftedBigIntConfig = {\n places: 18,\n maxDecimal: 18,\n maxCharacters: 9,\n minDecimals: 1,\n locale: 'en-US',\n }\n\n config: ShiftedBigIntConfig\n value: bigint\n\n constructor(\n value: bigint | ShiftedBigInt,\n config: Partial<ShiftedBigIntConfig> = {},\n ) {\n this.value = typeof value === 'bigint' ? value : value.value\n this.config = {\n ...ShiftedBigInt.defaultConfig, ...(typeof value === 'bigint' ? {} : value.config), ...config,\n }\n }\n\n get locale(): Intl.LocalesArgument {\n return this.config.locale ?? 'en-US'\n }\n\n get maxCharacters(): number {\n return this.config.maxCharacters ?? 9\n }\n\n get maxDecimal(): number {\n return this.config.maxDecimal ?? this.places\n }\n\n get minDecimals(): number {\n return this.config.minDecimals ?? 1\n }\n\n get places(): number {\n return this.config.places ?? 18\n }\n\n toFullString(): string {\n return splitOnDecimalToString(\n this.value,\n this.places,\n this.places,\n Infinity,\n this.places,\n this.locale,\n )\n }\n\n toShortString(): string {\n return splitOnDecimalToString(\n this.value,\n this.places,\n this.maxDecimal,\n this.maxCharacters,\n this.minDecimals,\n this.locale,\n )\n }\n\n toString(): string {\n return this.toFullString()\n }\n}\n","/* eslint-disable @typescript-eslint/member-ordering */\nimport { assertEx } from '@xylabs/sdk-js'\nimport type { ShiftedBigIntConfig, XL1AmountInstance } from '@xyo-network/xl1-protocol-lib'\nimport {\n AttoXL1, FemtoXL1, MicroXL1, MilliXL1, NanoXL1, PicoXL1, XL1,\n XL1Places,\n} from '@xyo-network/xl1-protocol-lib'\n\nimport { ShiftedBigInt } from './ShiftedBigInt.ts'\n\nconst MAX_XL1_AMOUNT = 2n ** 256n - 1n\nconst allowedPlaces = Object.values(XL1Places)\n\n/** Represents an XL1 token amount stored in AttoXL1, with conversions to milli, micro, nano, pico, femto, and atto denominations */\nexport class XL1Amount implements XL1AmountInstance {\n value: AttoXL1\n private locale: Intl.LocalesArgument\n\n constructor(value: bigint, locale: Intl.LocalesArgument = 'en-US') {\n this.locale = locale\n this.value = AttoXL1(value > MAX_XL1_AMOUNT ? MAX_XL1_AMOUNT : value < 0n ? 0n : value)\n }\n\n static from(value: bigint, places: bigint = XL1Places.atto) {\n assertEx(allowedPlaces.includes(places), () => `Invalid conversion places (${places} not in ${allowedPlaces})`)\n return new XL1Amount(value * 10n ** BigInt(places))\n }\n\n static fromMilli(value: MilliXL1) {\n return this.from(value, XL1Places.milli)\n }\n\n static fromMicro(value: MicroXL1) {\n return this.from(value, XL1Places.micro)\n }\n\n static fromNano(value: NanoXL1) {\n return this.from(value, XL1Places.nano)\n }\n\n static fromPico(value: PicoXL1) {\n return this.from(value, XL1Places.pico)\n }\n\n static fromFemto(value: FemtoXL1) {\n return this.from(value, XL1Places.femto)\n }\n\n static fromAtto(value: AttoXL1) {\n return this.from(value, XL1Places.atto)\n }\n\n static fromXL1(value: XL1) {\n return this.from(value, XL1Places.xl1)\n }\n\n to(places: number | bigint = XL1Places.atto) {\n return this.value / 10n ** BigInt(places)\n }\n\n get milli() {\n return MilliXL1(this.to(XL1Places.milli))\n }\n\n get micro() {\n return MicroXL1(this.to(XL1Places.micro))\n }\n\n get nano() {\n return NanoXL1(this.to(XL1Places.nano))\n }\n\n get pico() {\n return PicoXL1(this.to(XL1Places.pico))\n }\n\n get femto() {\n return FemtoXL1(this.to(XL1Places.femto))\n }\n\n get atto() {\n return AttoXL1(this.to(XL1Places.atto))\n }\n\n get xl1() {\n return XL1(this.to(XL1Places.xl1))\n }\n\n toString(places: number = Number(XL1Places.atto), config: Partial<ShiftedBigIntConfig> = {}): string {\n assertEx(allowedPlaces.includes(BigInt(places)), () => `Invalid conversion places (${places} not in ${allowedPlaces})`)\n return new ShiftedBigInt(\n this.value,\n {\n places,\n locale: this.locale,\n maxDecimal: places,\n minDecimals: 0,\n maxCharacters: places,\n ...config,\n },\n ).toShortString()\n }\n}\n","import type { Hash } from '@xylabs/sdk-js'\nimport type { Payload, WithHashMeta } from '@xyo-network/sdk-js'\n\n/** AllHashesPresent helper function. */\nexport function allHashesPresent(hashes: Hash[], payloads: WithHashMeta<Payload>[]): boolean {\n const payloadHashes = new Set(payloads.map(p => p._hash))\n return hashes.every(hash => payloadHashes.has(hash))\n}\n","import { assertEx } from '@xylabs/sdk-js'\nimport type { WithStorageMeta } from '@xyo-network/sdk-js'\nimport type { HydratedBlockWithStorageMeta } from '@xyo-network/xl1-protocol-lib'\nimport { isTransactionBoundWitness } from '@xyo-network/xl1-protocol-lib'\n\n/** blockPayloadsFromHydratedBlock constant. */\nexport const blockPayloadsFromHydratedBlock = (block: HydratedBlockWithStorageMeta): WithStorageMeta[] => {\n return block[0].payload_hashes.map(hash => assertEx(\n block[1].find(p => p._hash === hash),\n () => `missing payload ${hash}`,\n )).filter(x => !isTransactionBoundWitness(x))\n}\n","import type { Payload } from '@xyo-network/sdk-js'\nimport { type BlockBoundWitness, toHydratedBlock } from '@xyo-network/xl1-protocol-lib'\n\n/** flattenHydratedBlock constant. */\nexport const flattenHydratedBlock = <B extends BlockBoundWitness, P extends Payload>(hydratedBlock: [B, P[]]): (P | B)[] => {\n const [blk, blkPayloads] = hydratedBlock\n return [...blkPayloads, blk]\n}\n\n/** tryUnflattenHydratedBlock constant. */\nexport const tryUnflattenHydratedBlock = <\n B extends BlockBoundWitness,\n P extends Payload,\n>(flattened: (P | B)[]): [B, P[]] | undefined => {\n // Last element is the block\n const blk = flattened.at(-1) as B\n\n // All previous elements are payloads\n const payloads = flattened.slice(0, -1) as P[]\n\n return toHydratedBlock([blk, payloads])\n}\n\n/** unflattenHydratedBlock constant. */\nexport const unflattenHydratedBlock = <\n B extends BlockBoundWitness,\n P extends Payload,\n>(flattened: (P | B)[]): [B, P[]] => toHydratedBlock(tryUnflattenHydratedBlock(flattened), true) as [B, P[]]\n","import type { HydratedBlock } from '@xyo-network/xl1-protocol-lib'\n\nimport { flattenHydratedBlock } from './flattenHydratedBlock.ts'\n\n/** flattenHydratedBlocks constant. */\nexport const flattenHydratedBlocks = <T extends HydratedBlock>(hydratedBlocks: T[]): (T[0] | T[1][number])[] =>\n hydratedBlocks.flatMap(blk => flattenHydratedBlock(blk))\n","import type { Hash } from '@xylabs/sdk-js'\nimport { assertEx } from '@xylabs/sdk-js'\nimport { asAnyPayload } from '@xyo-network/sdk-js'\nimport type { BlockContextRead, HydratedBlockWithStorageMeta } from '@xyo-network/xl1-protocol-lib'\nimport { asBlockBoundWitnessWithStorageMeta, isTransactionBoundWitnessWithStorageMeta } from '@xyo-network/xl1-protocol-lib'\n\nimport { allHashesPresent } from './allHashesPresent.ts'\n\n/** hydrateBlock constant. */\nexport const hydrateBlock = async (\n context: BlockContextRead,\n hash: Hash,\n maxDepth: number = 1,\n minDepth = maxDepth,\n): Promise<HydratedBlockWithStorageMeta> => {\n assertEx(maxDepth >= 0, () => 'maxDepth must be greater than or equal to 0')\n assertEx(minDepth >= 0, () => 'minDepth must be greater than or equal to 0')\n assertEx(maxDepth >= minDepth, () => 'maxDepth must be greater than or equal to minDepth')\n\n const { chainMap } = context\n\n const [block] = await chainMap.get([hash])\n const bw = assertEx(asBlockBoundWitnessWithStorageMeta(\n assertEx(block, () => `block ${hash} not found`),\n ), () => `hash ${hash} is not a BlockBoundWitness`)\n\n if (maxDepth === 0) return [bw, []]\n const blkPayloads = (await chainMap.get(bw.payload_hashes)).map(p => asAnyPayload(p, true))\n if (minDepth === 1) assertEx(allHashesPresent(bw.payload_hashes, blkPayloads), () => `Unable to find all payloads for block ${hash}`)\n if (maxDepth === 1) return [bw, blkPayloads]\n const transactions = blkPayloads.filter(isTransactionBoundWitnessWithStorageMeta)\n const transactionsPayloadHashes = transactions.flatMap(tx => tx.payload_hashes)\n const transactionsPayloads = (await chainMap.get(transactionsPayloadHashes)).map(p => asAnyPayload(p, true))\n assertEx(allHashesPresent(transactionsPayloadHashes, transactionsPayloads), () => `Unable to find all payloads for transactions in block ${hash}`)\n const allPayloadsHashes = new Set([...blkPayloads, ...transactionsPayloads].flatMap(p => p._hash))\n const allPayloads = (await chainMap.get([...allPayloadsHashes])).map(p => asAnyPayload(p, true))\n const allPayloadsFiltered = allPayloads.filter(p => allPayloadsHashes.has(p._hash))\n if (maxDepth === 2) assertEx(allHashesPresent(\n [...allPayloadsHashes],\n allPayloadsFiltered,\n ), () => `Unable to find all payloads for transactions in block ${hash}`)\n return [bw, allPayloadsFiltered]\n}\n","import type { HydratedBlock, TransactionBoundWitnessWithHashMeta } from '@xyo-network/xl1-protocol-lib'\nimport { isTransactionBoundWitnessWithHashMeta } from '@xyo-network/xl1-protocol-lib'\n\n/** transactionsFromHydratedBlock constant. */\nexport const transactionsFromHydratedBlock = (block: HydratedBlock): TransactionBoundWitnessWithHashMeta[] => {\n return block[1].filter(isTransactionBoundWitnessWithHashMeta)\n}\n","import type { Hash } from '@xylabs/sdk-js'\nimport { assertEx } from '@xylabs/sdk-js'\nimport type { ReadArchivist } from '@xyo-network/sdk-js'\nimport type { HydratedBlock } from '@xyo-network/xl1-protocol-lib'\nimport { isBlockBoundWitnessWithStorageMeta, isTransactionBoundWitnessWithStorageMeta } from '@xyo-network/xl1-protocol-lib'\n\n/** tryHydrateBlock constant. */\nexport const tryHydrateBlock = async (\n archivist: ReadArchivist,\n hash: Hash,\n maxDepth: number = 1,\n): Promise<HydratedBlock | undefined> => {\n assertEx(maxDepth >= 0, () => 'maxDepth must be greater than or equal to 0')\n const bw = (await archivist.get([hash])).find(isBlockBoundWitnessWithStorageMeta)\n if (!bw) return undefined\n if (maxDepth === 0) return [bw, []]\n const blkPayloads = await archivist.get(bw.payload_hashes)\n if (maxDepth === 1) return [bw, blkPayloads]\n const transactions = blkPayloads.filter(isTransactionBoundWitnessWithStorageMeta)\n const transactionsPayloadHashes = transactions.flatMap(tx => tx.payload_hashes)\n const transactionsPayloads = await archivist.get(transactionsPayloadHashes)\n const allPayloadsHashes = new Set([...blkPayloads, ...transactionsPayloads].flatMap(p => p._hash))\n const allPayloads = await archivist.get([...allPayloadsHashes])\n const allPayloadsFiltered = allPayloads.filter(p => allPayloadsHashes.has(p._hash))\n return [bw, allPayloadsFiltered]\n}\n","import {\n asHash, type Hash, isDefined,\n spanAsync,\n} from '@xylabs/sdk-js'\nimport { toSafeJsonString } from '@xylabs/sdk-js'\nimport type { Signed, WithHashMeta } from '@xyo-network/sdk-js'\nimport type {\n BlockBoundWitness, ChainContextRead, XL1BlockNumber,\n} from '@xyo-network/xl1-protocol-lib'\nimport {\n asSignedBlockBoundWitnessWithStorageMeta, SignedBlockBoundWitnessWithHashMetaZod, StepSizes,\n} from '@xyo-network/xl1-protocol-lib'\n\nimport { withContextCacheResponse } from '../../ChainContextHelpers.ts'\n\n/** BlockFromBlockNumber helper function. */\nexport async function blockFromBlockNumber(\n context: ChainContextRead,\n blockNumber: XL1BlockNumber,\n): Promise<WithHashMeta<Signed<BlockBoundWitness>>> {\n return await spanAsync('blockFromBlockNumber', async () => {\n const cacheKey = `${blockNumber}`\n const { chainMap, head } = context\n return await withContextCacheResponse(context, 'blockFromBlockNumber', cacheKey, async () => {\n const [result] = await chainMap.get([head._hash])\n if (!isDefined(result)) {\n throw new Error(`Head block not found for hash: ${head._hash}`)\n }\n let currentBlock = asSignedBlockBoundWitnessWithStorageMeta(\n result,\n () => `Found Payload is not a Signed<BlockBoundWitness>: ${JSON.stringify(result, null, 2)}`,\n )\n if (currentBlock.block < blockNumber) {\n throw new Error(`Block number ${blockNumber} is greater than head ${currentBlock.block}.`)\n }\n while (currentBlock.block > blockNumber) {\n let jumpHash: Hash | null = currentBlock.previous\n let jumpBlockNumber = currentBlock.block - 1\n for (const [step, stepSize] of StepSizes.entries()) {\n const possibleJumpBlockNumber = currentBlock.block - (currentBlock.block % stepSize) - 1\n if (possibleJumpBlockNumber >= blockNumber && possibleJumpBlockNumber <= jumpBlockNumber) {\n jumpBlockNumber = possibleJumpBlockNumber\n jumpHash = asHash(currentBlock.step_hashes?.at(step), () => `Step hash not found for step ${step} in block ${currentBlock.block}`)\n }\n }\n const [newBlock] = await chainMap.get([\n asHash(jumpHash, () => `Jump hash not found for block number [${blockNumber}]: ${jumpBlockNumber} ${toSafeJsonString(currentBlock, 10)}`),\n ])\n if (!isDefined(newBlock)) {\n throw new Error(`Block not found for jump hash: ${jumpHash}`)\n }\n currentBlock = asSignedBlockBoundWitnessWithStorageMeta(\n newBlock,\n () => {\n const result = SignedBlockBoundWitnessWithHashMetaZod.safeParse(newBlock)\n return `Found Payload [jump hash] is not a Signed<BlockBoundWitness>: ${result.error}`\n },\n )\n if (currentBlock.block === blockNumber) {\n break\n }\n if (currentBlock.block < blockNumber) {\n throw new Error(`Block number ${blockNumber} is not a valid step block number for block ${head._hash}.`)\n }\n }\n return currentBlock\n })\n }, { ...context, timeBudgetLimit: 500 })\n}\n","import {\n isDefined, isObject, isUndefined,\n timeBudget,\n} from '@xylabs/sdk-js'\nimport type { CachingContext, MapType } from '@xyo-network/xl1-protocol-lib'\n\nimport { LruCacheMap, MemoryMap } from './driver/index.ts'\n\n/** Retrieves or creates a named cache from the caching context */\nexport function contextCache<TCacheValue>(\n context: CachingContext,\n name: string,\n create?: () => MapType<string, TCacheValue>,\n): MapType<string, TCacheValue> {\n if (!isObject(context.caches)) {\n throw new Error('Context does not have an appropriate caches property')\n }\n if (isUndefined(context.caches[name])) {\n context.caches[name] = create?.() ?? new MemoryMap<string, TCacheValue>()\n }\n return context.caches[name] as MapType<string, TCacheValue>\n}\n\n/** Options for the withContextCacheResponse helper */\nexport interface withContextCacheResponseOptions {\n max?: number\n}\n\n/** Executes a function with LRU caching, returning the cached result if available */\nexport async function withContextCacheResponse<T extends {} | string | number | bigint>(\n context: CachingContext,\n name: string,\n key: string,\n func: () => Promise<T extends {} | string | number | bigint ? T : never>,\n { max = 10_000 }: withContextCacheResponseOptions = {},\n): Promise<T> {\n const cache = contextCache<Promise<T>>(\n context,\n name,\n () => new LruCacheMap<string, Promise<T>>({ max }),\n )\n const { timeBudgetLimit = 0 } = context\n const cacheResult = await cache.get(key)\n if (isDefined(cacheResult)) {\n return cacheResult\n }\n const result = timeBudgetLimit > 0 ? timeBudget(name, context.logger, func, timeBudgetLimit) : func()\n await cache.set(key, result)\n return result\n}\n","import type { SyncMap } from '@xyo-network/xl1-protocol-lib'\nimport { LRUCache } from 'lru-cache'\n\n/** LruCacheMap implementation. */\nexport class LruCacheMap<K extends {}, V extends {} | string | number | bigint, FC = () => void> implements SyncMap<K, V> {\n private lruCache: LRUCache<K, V, FC>\n\n constructor(options?: LRUCache.Options<K, V, FC>) {\n this.lruCache = new LRUCache<K, V, FC>(options ?? { max: 5000 })\n }\n\n clear(): void {\n this.lruCache.clear()\n }\n\n delete(id: K): boolean {\n return this.lruCache.delete(id)\n }\n\n get(id: K): V | undefined {\n return this.lruCache.get(id)\n }\n\n getMany(id: K[]): V[] {\n const results: V[] = []\n for (const key of id) {\n const value = this.lruCache.get(key)\n if (value !== undefined) {\n results.push(value)\n }\n }\n return results\n }\n\n has(id: K): boolean {\n return this.lruCache.has(id)\n }\n\n set(id: K, data: V) {\n this.lruCache.set(id, data)\n }\n\n setMany(entries: [K, V][]): void {\n for (const [key, value] of entries) {\n this.lruCache.set(key, value)\n }\n }\n}\n","import { isDefined } from '@xylabs/sdk-js'\nimport type { SyncMap } from '@xyo-network/xl1-protocol-lib'\n\n/** MemoryMap implementation. */\nexport class MemoryMap<K extends {}, V = {}> implements SyncMap<K, V> {\n private map: Map<K, V>\n\n constructor() {\n this.map = new Map<K, V>()\n }\n\n clear(): void {\n this.map.clear()\n }\n\n delete(id: K): boolean {\n return this.map.delete(id)\n }\n\n get(id: K): V | undefined {\n return this.map.get(id)\n }\n\n getMany(ids: K[]): V[] {\n const results: V[] = []\n for (const id of ids) {\n const data = this.map.get(id)\n if (isDefined(data)) {\n results.push(data)\n }\n }\n return results\n }\n\n has(id: K): boolean {\n return this.map.has(id)\n }\n\n set(id: K, data: V) {\n this.map.set(id, data)\n }\n\n setMany(entries: [K, V][]): void {\n for (const [key, value] of entries) {\n this.map.set(key, value)\n }\n }\n}\n","import type { XL1BlockRange } from '@xyo-network/xl1-protocol-lib'\nimport { asXL1BlockNumber, stepSize } from '@xyo-network/xl1-protocol-lib'\n\n/** CalculateFramesFromRange helper function. */\nexport function calculateFramesFromRange(range: XL1BlockRange, step: number): [\n // ranges of fitted frames\n XL1BlockRange[],\n // ranges of remaining blocks\n XL1BlockRange[]] {\n const size = stepSize(step)\n let start = (Math.trunc(range[0] / size)) * size\n const fitted: XL1BlockRange[] = []\n const remaining: XL1BlockRange[] = []\n\n // if the start is not aligned with the range, add a remaining block\n if (start !== range[0]) {\n start += size\n remaining.push([range[0], asXL1BlockNumber(Math.min(start - 1, range[1]), true)])\n }\n\n for (let i = start; i <= range[1]; i += size) {\n if ((i + size - 1) <= range[1]) {\n fitted.push([asXL1BlockNumber(i, { name: 'calculateFramesFromRange A' }),\n asXL1BlockNumber(Math.min(i + size - 1, range[1]), { name: 'calculateFramesFromRange B' })])\n } else {\n remaining.push([asXL1BlockNumber(i, { name: 'calculateFramesFromRange C' }), range[1]])\n }\n }\n return [fitted, remaining]\n}\n","import type { XL1BlockRange } from '@xyo-network/xl1-protocol-lib'\nimport { StepSizes } from '@xyo-network/xl1-protocol-lib'\n\nimport { calculateFramesFromRange } from './calculateFramesFromRange.ts'\n\n/** DeepCalculateFramesFromRange helper function. */\nexport function deepCalculateFramesFromRange(range: XL1BlockRange, startingStep = StepSizes.length - 1): XL1BlockRange[] {\n const fitted: XL1BlockRange[] = []\n let remaining: XL1BlockRange[] = [range]\n\n for (let step = startingStep; step >= 0; step--) {\n const newRemaining: XL1BlockRange[] = []\n for (const range of remaining) {\n const [newFittedFrames, newRemainingFrames] = calculateFramesFromRange(range, step)\n fitted.push(...newFittedFrames)\n newRemaining.push(...newRemainingFrames)\n }\n remaining = newRemaining\n }\n\n for (const range of remaining) {\n for (let i = range[0]; i <= range[1]; i++) {\n fitted.push([i, i]) // Add individual frames for remaining ranges\n }\n }\n\n return fitted.toSorted((a, b) => a[0] - b[0]) // Sort by start of range\n}\n","import { type Hash } from '@xylabs/sdk-js'\nimport type { ChainContextRead, XL1BlockNumber } from '@xyo-network/xl1-protocol-lib'\n\nimport { blockFromBlockNumber } from './blockFromBlockNumber.ts'\n\n/** HashFromBlockNumber helper function. */\nexport async function hashFromBlockNumber(context: ChainContextRead, blockNumber: XL1BlockNumber): Promise<Hash> {\n return (await blockFromBlockNumber(context, blockNumber))._hash\n}\n","import type {\n ReadArchivist, ReadWriteArchivist, WriteArchivist,\n} from '@xyo-network/sdk-js'\n\n/** Type guard that checks if a value is a valid ReadArchivist. */\nexport function isReadArchivist(value: unknown): value is ReadArchivist {\n return (value as ReadArchivist).get !== undefined && (value as ReadArchivist).next !== undefined\n}\n\n/** Type guard that checks if a value is a valid WriteArchivist. */\nexport function isWriteArchivist(value: unknown): value is WriteArchivist {\n return (value as WriteArchivist).insert !== undefined\n}\n\n/** Type guard that checks if a value is a valid ReadWriteArchivist. */\nexport function isReadWriteArchivist(value: unknown): value is ReadWriteArchivist {\n return isReadArchivist(value) && isWriteArchivist(value)\n}\n","import type { StepIdentity, StepIdentityString } from '@xyo-network/xl1-protocol-lib'\n\n/** Converts a value to StepIdentityString format. */\nexport function toStepIdentityString({ block, step }: StepIdentity): StepIdentityString {\n return `${block}|${step}` as StepIdentityString\n}\n","import {\n assertEx, isHash, toSafeJsonString,\n} from '@xylabs/sdk-js'\nimport {\n type Payload, PayloadBuilder, type WithStorageMeta,\n} from '@xyo-network/sdk-js'\nimport type { HydratedTransaction } from '@xyo-network/xl1-protocol-lib'\nimport { isExecutable } from '@xyo-network/xl1-protocol-lib'\n\n/** Validates TransactionsOpcodes and returns any errors found. */\nexport async function validateTransactionsOpcodes(txs: HydratedTransaction[]) {\n const txElevatedPayloads: WithStorageMeta<Payload>[] = []\n for (const [txBw, txPayloads] of txs) {\n if (isExecutable(txBw)) {\n const operations = txBw.script.map(op => op.split('|'))\n for (let [opCode, ...args] of operations) {\n switch (opCode) {\n case 'elevate': {\n const [hash, ...rest] = args\n const txPayloadsWithStorageMeta = await PayloadBuilder.addStorageMeta(txPayloads)\n assertEx(rest.length === 0, () => `Invalid elevate operation ${opCode} ${args} - Too many Arguments`)\n if (isHash(hash)) {\n assertEx(\n txBw.payload_hashes.includes(hash),\n () => `Invalid elevate operation ${opCode} ${args} - Hash not in payload hashes => ${toSafeJsonString(txBw, 20)}`,\n )\n const txPayload = assertEx(\n txPayloadsWithStorageMeta.find(p => p._hash === hash),\n () => `Invalid elevate operation ${opCode} ${args} - Payload not found`,\n )\n txElevatedPayloads.push(txPayload)\n } else {\n throw new Error(`Invalid elevate operation ${opCode} ${args} - Invalid hash`)\n }\n break\n }\n default: {\n throw new Error(`Invalid opCode ${opCode}`)\n }\n }\n }\n }\n }\n return txElevatedPayloads\n}\n","import {\n zodAsFactory, zodIsFactory, zodToFactory,\n} from '@xylabs/sdk-js'\nimport { globalRegistry, z } from 'zod'\n\nimport { MnemonicStringZod } from '../validation/index.ts'\nimport { BaseConfigZod } from './Base.ts'\n\n/** ActorConfigZod constant. */\nexport const ActorConfigZod = BaseConfigZod.extend({\n name: z.string(),\n mnemonic: MnemonicStringZod.optional().register(globalRegistry, {\n description: 'Mnemonic for the Actor wallet',\n title: 'mnemonic',\n type: 'string',\n }),\n healthCheckPort: z.coerce.number().optional().register(globalRegistry, {\n description: 'Port for the Producer health checks',\n title: 'producer.healthCheckPort',\n type: 'number',\n }),\n})\n\n/** ActorConfig type. */\nexport type ActorConfig = z.infer<typeof ActorConfigZod>\n\n/** Type guard that checks if a value is a valid ActorConfig. */\nexport const isActorConfig = zodIsFactory(ActorConfigZod)\n/** Converts a value to ActorConfig, throwing if invalid. */\nexport const asActorConfig = zodAsFactory(ActorConfigZod, 'asActorConfig')\n/** toActorConfig constant. */\nexport const toActorConfig = zodToFactory(ActorConfigZod, 'toActorConfig')\n","/** Type guard that checks if a value is a valid Localhost. */\nexport const isLocalhost = (hostname: string): boolean => {\n return (\n hostname === 'localhost'\n || hostname === '127.0.0.1'\n || hostname === '::1' // IPv6 localhost\n || hostname.endsWith('.localhost')\n )\n}\n","import { isLocalhost } from './isLocalhost.ts'\n\n/** getUrl constant. */\nexport const getUrl = (host: string, port: number): string => {\n const scheme = isLocalhost(host) ? 'http' : 'https'\n return `${scheme}://${host}:${port}`\n}\n","/** TODO constant. */\nexport const TODO = true\n","import { z } from 'zod'\n\n/**\n * Validates a single string containing a BIP-39 mnemonic.\n *\n * • Trims leading/trailing whitespace.\n * • Collapses any run of whitespace (spaces, tabs, new-lines) to a single space.\n * • Splits on spaces → array of words.\n * • Checks that the word-count is 12, 15, 18, 21, or 24.\n *\n */\nexport const MnemonicStringZod = z\n .string()\n .transform(s => s.trim().replaceAll(/\\s+/g, ' ')) // normalize spacing\n .refine(\n s => [12, 15, 18, 21, 24].includes(s.split(' ').length),\n { message: 'Mnemonic must contain 12, 15, 18, 21, or 24 words.' },\n ).describe('BIP-39 mnemonic string')\n\n/** MnemonicString type. */\nexport type MnemonicString = z.infer<typeof MnemonicStringZod>\n","import { z } from 'zod'\n\nimport { ChainConfigZod } from './Chain.ts'\nimport { DataLakeConfigZod } from './DataLake/index.ts'\nimport { EvmConfigZod } from './Evm.ts'\nimport { LogConfigZod } from './Log.ts'\nimport { ProvidersConfigZod } from './Providers.ts'\nimport { RemoteConfigZod } from './Remote.ts'\nimport { StorageConfigZod } from './storage/index.ts'\nimport { TelemetryConfigZod } from './Telemetry.ts'\nimport { ValidationConfigZod } from './Validation.ts'\n\n/** BaseConfigZod constant. */\nexport const BaseConfigZod = z.object({\n chain: ChainConfigZod.default(ChainConfigZod.parse({})).describe('Configuration for the chain'),\n dataLake: DataLakeConfigZod.optional().describe('Configuration for data lakes'),\n evm: EvmConfigZod.default(EvmConfigZod.parse({})).describe('Configuration for EVM-backed services'),\n log: LogConfigZod.default(LogConfigZod.parse({})).describe('Configuration for logging'),\n providers: ProvidersConfigZod.default(ProvidersConfigZod.parse([])).describe('Configuration for providers'),\n remote: RemoteConfigZod.default(RemoteConfigZod.parse({})).describe('Configuration for remote services'),\n storage: StorageConfigZod.default(StorageConfigZod.parse({})).describe('Configuration for the storage'),\n telemetry: TelemetryConfigZod.default(TelemetryConfigZod.parse({})).describe('Configuration for telemetry'),\n validation: ValidationConfigZod.default(ValidationConfigZod.parse({})).describe('Configuration for validation'),\n})\n\n/** BaseConfig type. */\nexport type BaseConfig = z.infer<typeof BaseConfigZod>\n","import { AddressZod, HexZod } from '@xylabs/sdk-js'\nimport { globalRegistry, z } from 'zod'\n\n/** ChainConfigZod constant. */\nexport const ChainConfigZod = z.object({\n id: HexZod.optional()\n .register(globalRegistry, {\n description:\n 'The unique identifier for the chain. Should be the staking contract address for contract-backed chains.',\n title: 'chain.id',\n type: 'string',\n }),\n genesisRewardAddress: AddressZod.optional()\n .register(globalRegistry, {\n description:\n 'Address to send the initial genesis rewards to, if a new chain is being created.',\n title: 'chain.genesisRewardAddress',\n type: 'Address',\n }),\n})\n\n/** ChainConfig type. */\nexport type ChainConfig = z.infer<typeof ChainConfigZod>\n","import { z } from 'zod'\n\nimport { type RestDataLakeConfig, RestDataLakeConfigZod } from './RestDataLakeConfig.ts'\nimport { type RouterDataLakeConfig, RouterDataLakeConfigZod } from './RouterDataLakeConfig.ts'\n\n/** DataLakeConfig type. */\nexport type DataLakeConfig = RestDataLakeConfig | RouterDataLakeConfig\n\n// z.lazy handles the circular reference between DataLakeConfigZod and RouterDataLakeZod\n/** DataLakeConfigZod constant. */\nexport const DataLakeConfigZod: z.ZodType<DataLakeConfig> = z.lazy(() =>\n z.union([RestDataLakeConfigZod, RouterDataLakeConfigZod])).describe('Configuration for a data lake')\n","import { globalRegistry, z } from 'zod'\n\nimport { DataLakeDriverConfigBaseZod } from './DataLakeRemoteConfig.ts'\n\n/** RestDataLakeConfigZod constant. */\nexport const RestDataLakeConfigZod = DataLakeDriverConfigBaseZod.extend({\n driver: z.literal('rest').register(globalRegistry, {\n description: 'Driver for the REST data lake',\n type: 'string',\n }),\n url: z.string().register(globalRegistry, {\n description: 'URL for the REST data lake',\n type: 'string',\n }),\n}).describe('Configuration for the REST data lake driver')\n\n/** RestDataLakeConfig type. */\nexport type RestDataLakeConfig = z.infer<typeof RestDataLakeConfigZod>\n","import { globalRegistry, z } from 'zod'\n\n/** DataLakeDriverConfigBaseZod constant. */\nexport const DataLakeDriverConfigBaseZod = z.object({\n driver: z.string().register(globalRegistry, {\n description: 'Driver for the data lake',\n type: 'string',\n }),\n}).describe('Base configuration for a data lake driver')\n/** DataLakeDriverConfigBase type. */\nexport type DataLakeDriverConfigBase = z.infer<typeof DataLakeDriverConfigBaseZod>\n","import { globalRegistry, z } from 'zod'\n\nimport type { DataLakeConfig } from './DataLake.ts'\nimport { DataLakeConfigZod } from './DataLake.ts'\n\n/** Configuration for RouterDataLake. */\nexport interface RouterDataLakeConfig {\n children: DataLakeConfig[]\n driver: 'router'\n}\n\n/** RouterDataLakeConfigZod constant. */\nexport const RouterDataLakeConfigZod: z.ZodType<RouterDataLakeConfig> = z.object({\n driver: z.literal('router').register(globalRegistry, {\n description: 'Driver for the router data lake',\n type: 'string',\n }),\n children: z.array(z.lazy(() => DataLakeConfigZod)).register(globalRegistry, {\n description: 'Child data lake drivers',\n type: 'array',\n }),\n}).describe('Configuration for the router data lake driver')\n","import { globalRegistry, z } from 'zod'\n\n/** EvmInfuraConfigZod constant. */\nexport const EvmInfuraConfigZod = z.object({\n projectId: z.string().optional().register(globalRegistry, {\n description: 'Infura project ID',\n title: 'evm.infura.projectId',\n type: 'string',\n }),\n projectSecret: z.string().optional().register(globalRegistry, {\n description: 'Infura project secret',\n title: 'evm.infura.projectSecret',\n type: 'string',\n }),\n})\n\n/** EvmJsonRpcConfigZod constant. */\nexport const EvmJsonRpcConfigZod = z.object({\n url: z.url().optional().register(globalRegistry, {\n description: 'JSON-RPC URL',\n title: 'evm.jsonRpc.url',\n type: 'string',\n }),\n})\n\n/** EvmConfigZod constant. */\nexport const EvmConfigZod = z.object({\n chainId: z.string().optional().register(globalRegistry, {\n description: 'EVM chain ID',\n title: 'evm.chainId',\n type: 'string',\n }),\n infura: EvmInfuraConfigZod.optional().describe('Infura Provider configuration'),\n jsonRpc: EvmJsonRpcConfigZod.optional().describe('JSON-RPC Provider configuration'),\n})\n\n/** EvmConfig type. */\nexport type EvmConfig = z.infer<typeof EvmConfigZod>\n","import type { LogLevelKey } from '@xylabs/sdk-js'\nimport { LogLevel } from '@xylabs/sdk-js'\nimport { globalRegistry, z } from 'zod'\n\nconst LogLevelNames = Object.keys(LogLevel) as [LogLevelKey]\n\n/** LogConfigZod constant. */\nexport const LogConfigZod = z.object({\n logLevel: z.enum(LogLevelNames).default('info').register(globalRegistry, {\n choices: LogLevelNames,\n default: 'info',\n description: 'Desired process verbosity',\n title: 'logLevel',\n type: 'string',\n }),\n silent: z.boolean().default(false).register(globalRegistry, {\n default: false,\n description: 'Whether to run in silent mode',\n title: 'silent',\n type: 'boolean',\n }),\n})\n\n/** LogConfig type. */\nexport type LogConfig = z.infer<typeof LogConfigZod>\n","import z from 'zod'\n\nimport { ProviderConfigZod } from './Provider.ts'\n\n/** ProvidersConfigZod constant. */\nexport const ProvidersConfigZod = z.array(ProviderConfigZod.loose()).describe('Configuration for providers').default([])\n\n/** ProvidersConfig type. */\nexport type ProvidersConfig = z.infer<typeof ProvidersConfigZod>\n","import {\n zodAsFactory, zodIsFactory, zodToFactory,\n} from '@xylabs/sdk-js'\nimport { z } from 'zod'\n\n/** ProviderConfigZod constant. */\nexport const ProviderConfigZod = z.object({\n moniker: z.string(),\n labels: z.array(z.string()).optional(),\n}).describe('Configuration for a Provider')\n\n/** ProviderConfig type. */\nexport type ProviderConfig = z.infer<typeof ProviderConfigZod>\n\n/** Type guard that checks if a value is a valid ProviderConfig. */\nexport const isProviderConfig = zodIsFactory(ProviderConfigZod)\n/** Converts a value to ProviderConfig, throwing if invalid. */\nexport const asProviderConfig = zodAsFactory(ProviderConfigZod, 'asProviderConfig')\n/** toProviderConfig constant. */\nexport const toProviderConfig = zodToFactory(ProviderConfigZod, 'toProviderConfig')\n","import { globalRegistry, z } from 'zod'\n\n/** RpcRemoteConfigBaseZod constant. */\nexport const RpcRemoteConfigBaseZod = z.object({\n protocol: z.string('http').register(globalRegistry, {\n description: 'Protocol for the RPC connection',\n type: 'string',\n }),\n}).describe('Base configuration for the remote RPC')\n\n/** RpcRemoteConfigBase type. */\nexport type RpcRemoteConfigBase = z.infer<typeof RpcRemoteConfigBaseZod>\n\n/** HttpRpcRemoteConfigZod constant. */\nexport const HttpRpcRemoteConfigZod = RpcRemoteConfigBaseZod.extend({\n protocol: z.string('http').register(globalRegistry, {\n description: 'Protocol for the RPC connection',\n type: 'string',\n }).default('http'),\n url: z.string().register(globalRegistry, {\n description: 'URL for the Chain RPC API',\n type: 'string',\n }),\n}).describe('Configuration for the remote RPC using Http')\n\n/** HttpRpcRemoteConfig type. */\nexport type HttpRpcRemoteConfig = z.infer<typeof HttpRpcRemoteConfigZod>\n\n/** PostMessageRpcRemoteConfigZod constant. */\nexport const PostMessageRpcRemoteConfigZod = RpcRemoteConfigBaseZod.extend({\n protocol: z.string().register(globalRegistry, {\n description: 'Protocol for the RPC connection',\n type: 'string',\n }).default('postMessage'),\n networkId: z.string().register(globalRegistry, {\n description: 'Network ID to use for the postMessage RPC connection',\n type: 'string',\n }),\n sessionId: z.string().register(globalRegistry, {\n description: 'Session ID to use for the postMessage RPC connection',\n type: 'string',\n }),\n}).describe('Configuration for the remote RPC using postMessage')\n\n/** PostMessageRpcRemoteConfig type. */\nexport type PostMessageRpcRemoteConfig = z.infer<typeof PostMessageRpcRemoteConfigZod>\n\n/** RpcRemoteConfigZod constant. */\nexport const RpcRemoteConfigZod = z.union([HttpRpcRemoteConfigZod, PostMessageRpcRemoteConfigZod])\n .describe('Configuration for a remote RPC connection, either Http or postMessage')\n\n/** RpcRemoteConfig type. */\nexport type RpcRemoteConfig = z.infer<typeof RpcRemoteConfigZod>\n\n/** RemoteConfigZod constant. */\nexport const RemoteConfigZod = z.object({ rpc: RpcRemoteConfigZod.optional() }).describe('Configuration for remote connections, including RPC')\n\n/** RemoteConfig type. */\nexport type RemoteConfig = z.infer<typeof RemoteConfigZod>\n","import { isDefined, isUndefined } from '@xylabs/sdk-js'\nimport { globalRegistry, z } from 'zod'\n\n/**\n * Checks if the provided MongoDB configuration contains all necessary fields\n * for establishing a connection.\n * @param config MongoDB configuration object\n * @returns True if the configuration contains all necessary fields for\n * establishing a connection\n */\nexport const hasMongoConfig = (config?: MongoConfig): config is Required<MongoConfig> => {\n if (isUndefined(config)) return false\n return (\n isDefined(config.connectionString)\n && isDefined(config.database)\n && isDefined(config.domain)\n && isDefined(config.password)\n && isDefined(config.username)\n )\n}\n\n/** MongoConfigZod constant. */\nexport const MongoConfigZod = z.object({\n // TODO: Create from other arguments\n connectionString: z.string().nonempty().optional().register(globalRegistry, {\n description: 'MongoDB connection string',\n title: 'storage.mongo.connectionString',\n type: 'string',\n }),\n database: z.string().nonempty().optional().register(globalRegistry, {\n description: 'MongoDB database name',\n title: 'storage.mongo.database',\n type: 'string',\n }),\n domain: z.string().nonempty().optional().register(globalRegistry, {\n description: 'MongoDB domain',\n title: 'storage.mongo.domain',\n type: 'string',\n }),\n password: z.string().nonempty().optional().register(globalRegistry, {\n description: 'MongoDB password',\n title: 'storage.mongo.password',\n type: 'string',\n }),\n username: z.string().nonempty().optional().register(globalRegistry, {\n description: 'MongoDB username',\n title: 'storage.mongo.username',\n type: 'string',\n }),\n})\n\n/** MongoConfig type. */\nexport type MongoConfig = z.infer<typeof MongoConfigZod>\n","import { globalRegistry, z } from 'zod'\n\nimport { MongoConfigZod } from './driver/index.ts'\n\n/** StorageConfigZod constant. */\nexport const StorageConfigZod = z.object({\n mongo: MongoConfigZod.optional().describe('Configuration for the MongoD storage driver'),\n root: z.string().optional().register(globalRegistry, {\n description: 'Root directory for local storage',\n title: 'storage.root',\n type: 'string',\n }),\n}).describe('Storage configuration options')\n\n/** StorageConfig type. */\nexport type StorageConfig = z.infer<typeof StorageConfigZod>\n","import { globalRegistry, z } from 'zod'\n\n/** DefaultMetricsScrapePorts constant. */\nexport const DefaultMetricsScrapePorts = {\n api: 9465,\n bridge: 9468,\n mempool: 9466,\n producer: 9464,\n rewardRedemptionApi: 9467,\n}\n\n/** MetricsScrapeConfigZod constant. */\nexport const MetricsScrapeConfigZod = z.object({\n path: z.string().default('/metrics').register(globalRegistry, {\n default: '/metrics',\n description: 'Path for the metrics scrape endpoint',\n title: 'telemetry.metrics.scrape.path',\n type: 'string',\n }),\n port: z.coerce.number().int().positive().optional().register(globalRegistry, {\n description: 'Port for the metrics scrape endpoint',\n title: 'telemetry.metrics.scrape.port',\n type: 'number',\n }),\n}).describe('Metrics scrape configuration')\n\n/** MetricsConfigZod constant. */\nexport const MetricsConfigZod = z.object({ scrape: MetricsScrapeConfigZod }).describe('Metrics configuration options')\n\n/** OpenTelemetryConfigZod constant. */\nexport const OpenTelemetryConfigZod = z.object({\n // OpenTelemetry options\n otlpEndpoint: z.url().optional().register(globalRegistry, {\n description: 'OTLP endpoint for exporting telemetry data',\n title: 'telemetry.otel.otlpEndpoint',\n type: 'string',\n }),\n})\n\n/** TelemetryConfigZod constant. */\nexport const TelemetryConfigZod = z.object({\n // Metrics configuration\n metrics: MetricsConfigZod.optional().describe('Metrics configuration'),\n // OpenTelemetry configuration\n otel: OpenTelemetryConfigZod.optional().describe('OpenTelemetry configuration'),\n}).describe('Telemetry configuration options')\n\n/** TelemetryConfig type. */\nexport type TelemetryConfig = z.infer<typeof TelemetryConfigZod>\n","import { AddressZod, asAddress } from '@xylabs/sdk-js'\nimport { globalRegistry, z } from 'zod'\n\n/** ValidationConfigZod constant. */\nexport const ValidationConfigZod = z.object({\n allowedRewardRedeemers: z.preprocess((val) => {\n if (typeof val === 'string') {\n return val.split(',').map(s => asAddress(s.trim()))\n }\n return val\n }, z.array(AddressZod).optional().register(globalRegistry, {\n description: 'List of allowed reward redeemer addresses, if undefined anyone can participate',\n title: 'allowedRewardRedeemers',\n type: 'array',\n })),\n allowedRewardEscrowAccountSigners: z.preprocess((val) => {\n if (typeof val === 'string') {\n return val.split(',').map(s => asAddress(s.trim()))\n }\n return val\n }, z.array(AddressZod).optional().register(globalRegistry, {\n description: 'List of allowed reward escrow account signer addresses, if undefined anyone can participate',\n title: 'allowedRewardEscrowAccountSigners',\n type: 'array',\n })),\n})\n\n/** ValidationConfig type. */\nexport type ValidationConfig = z.infer<typeof ValidationConfigZod>\n","import z from 'zod'\n\nimport { ActorConfigZod } from './Actor.ts'\n\n/** ActorsConfigZod constant. */\nexport const ActorsConfigZod = z.array(ActorConfigZod.loose()).describe('Actor-specific configurations that override the base configuration when the actor is running').default([])\n\n/** ActorsConfig type. */\nexport type ActorsConfig = z.infer<typeof ActorsConfigZod>\n","import type z from 'zod'\n\nimport { ActorConfigZod } from './Actor.ts'\nimport { ActorsConfigZod } from './Actors.ts'\nimport { BaseConfigZod } from './Base.ts'\nimport type { DeepPartial } from './DeepPartial.ts'\n\n/** ConfigZod constant. */\nexport const ConfigZod = BaseConfigZod.extend({ actors: ActorsConfigZod }).describe('The complete configuration for the protocol, including global settings and actor-specific overrides')\n\n/** Config type. */\nexport type Config = z.infer<typeof ConfigZod>\n\n/** ResolveConfig helper function. */\nexport function resolveConfig(\n config: DeepPartial<Config>,\n) {\n const parsedConfig = ConfigZod.parse(config)\n const { actors, ...rootConfig } = parsedConfig\n parsedConfig.actors = actors.map((actorConfig) => {\n return ActorConfigZod.loose().parse({ ...rootConfig, ...actorConfig })\n })\n return parsedConfig\n}\n","import {\n zodAsFactory, zodIsFactory, zodToFactory,\n} from '@xylabs/sdk-js'\nimport { globalRegistry, z } from 'zod'\n\nimport { ActorConfigZod } from './Actor.ts'\n\n/** HostActorConfigZod constant. */\nexport const HostActorConfigZod = ActorConfigZod.extend({\n host: z.string().default('localhost').register(globalRegistry, {\n default: 'localhost',\n description: 'Host for the Actor',\n title: 'host',\n type: 'string',\n }),\n port: z.coerce.number().default(8080).register(globalRegistry, {\n default: 8080,\n description: 'Port for the Actor',\n title: 'port',\n type: 'number',\n }),\n})\n\n/** HostActorConfig type. */\nexport type HostActorConfig = z.infer<typeof HostActorConfigZod>\n\n/** Type guard that checks if a value is a valid HostActorConfig. */\nexport const isHostActorConfig = zodIsFactory(HostActorConfigZod)\n/** Converts a value to HostActorConfig, throwing if invalid. */\nexport const asHostActorConfig = zodAsFactory(HostActorConfigZod, 'asHostActorConfig')\n/** toHostActorConfig constant. */\nexport const toHostActorConfig = zodToFactory(HostActorConfigZod, 'toHostActorConfig')\n","import { z } from 'zod'\n\nconst DescriptionSchema = z.string()\nconst TitleSchema = z.string()\n\n/** Schema identifier for JSONMeta payloads. */\nexport const JSONSchemaMetaSchema = z\n .object({\n id: z.string().optional(),\n title: TitleSchema.optional(),\n description: DescriptionSchema.optional(),\n deprecated: z.boolean().optional(),\n })\n .catchall(z.unknown()) // allow arbitrary extra keys\n\n/** Schema identifier for GlobalMeta payloads. */\nexport const GlobalMetaSchema = JSONSchemaMetaSchema.extend({})\n\nconst ChoicesSchema = z\n .array(z.union([z.string(), z.number(), z.literal(true), z.undefined()]))\n .readonly()\n\n/** Schema identifier for UsageMeta payloads. */\nexport const UsageMetaSchema = GlobalMetaSchema.extend({\n choices: ChoicesSchema.optional(),\n default: z.unknown().optional(),\n description: DescriptionSchema,\n group: z.string().optional(),\n hidden: z.boolean().optional(),\n title: TitleSchema,\n type: z.union([\n z.literal('array'),\n z.literal('count'),\n z.literal('boolean'),\n z.literal('number'),\n z.literal('string'),\n ]),\n})\n\n/** UsageMeta type. */\nexport type UsageMeta = z.infer<typeof UsageMetaSchema>\n\n/** Type guard that checks if a value is a valid UsageMeta. */\nexport function isUsageMeta(v: unknown): v is UsageMeta {\n return UsageMetaSchema.safeParse(v).success\n}\n","/** XL1_NETWORK_STAKING_GENESIS_PERIOD_END_EPOCH constant. */\nexport const XL1_NETWORK_STAKING_GENESIS_PERIOD_END_EPOCH = 1_760_572_800 as const\n/** XL1_NETWORK_STAKING_GENESIS_PERIOD_END_XL1_BLOCK constant. */\nexport const XL1_NETWORK_STAKING_GENESIS_PERIOD_END_XL1_BLOCK = 107_496 as const\n","import {\n zodAsFactory, zodIsFactory, zodToFactory,\n} from '@xylabs/sdk-js'\nimport type { z } from 'zod'\n\nimport { ActorConfigZod } from '../config/index.ts'\nimport { BaseConfigContextZod } from '../model/index.ts'\n\n/** ActorConfigContext constant. */\nexport const ActorConfigContext = BaseConfigContextZod.extend({ config: ActorConfigZod })\n\n/** ActorConfigContext type. */\nexport type ActorConfigContext = z.infer<typeof ActorConfigContext>\n\n/** Type guard that checks if a value is a valid ActorConfigContext. */\nexport const isActorConfigContext = zodIsFactory(ActorConfigContext)\n/** Converts a value to ActorConfigContext, throwing if invalid. */\nexport const asActorConfigContext = zodAsFactory(ActorConfigContext, 'asActorConfigContext')\n/** toActorConfigContext constant. */\nexport const toActorConfigContext = zodToFactory(ActorConfigContext, 'toActorConfigContext')\n","import {\n zodAsFactory, zodIsFactory, zodToFactory,\n} from '@xylabs/sdk-js'\nimport type { CachingContext } from '@xyo-network/xl1-protocol-lib'\nimport { CachingContextZod } from '@xyo-network/xl1-protocol-lib'\nimport { z } from 'zod'\n\nimport { type BaseConfig, BaseConfigZod } from '../config/index.ts'\nimport type { ProviderFactoryLocatorInstance } from '../CreatableProvider/index.ts'\nimport type { RuntimeStatusMonitor } from '../status/index.ts'\n\n/** RuntimeStatusMonitorZod constant. */\nexport const RuntimeStatusMonitorZod = z.custom<RuntimeStatusMonitor>(val => val && typeof val === 'object')\n\n/** ProviderFactoryLocatorZod constant. */\nexport const ProviderFactoryLocatorZod: z.ZodType<ProviderFactoryLocatorInstance> = z.lazy(() =>\n z.custom<ProviderFactoryLocatorInstance>(val => val && typeof val === 'object' && 'context' in val && 'registry' in val))\n\n/** CreatableProviderContextType type. */\nexport type CreatableProviderContextType = CachingContext & {\n _id?: string\n config: BaseConfig\n locator: ProviderFactoryLocatorInstance\n statusReporter?: RuntimeStatusMonitor\n}\n\n/** BaseConfigContextZod constant. */\nexport const BaseConfigContextZod = CachingContextZod.extend({\n config: BaseConfigZod.loose(),\n locator: ProviderFactoryLocatorZod.optional(),\n})\n/** BaseConfigContext type. */\nexport type BaseConfigContext = z.infer<typeof BaseConfigContextZod>\n\n/** CreatableProviderContextZod constant. */\nexport const CreatableProviderContextZod: z.ZodType<CreatableProviderContextType> = z.lazy(() =>\n BaseConfigContextZod.extend({\n _id: z.string().optional(),\n locator: ProviderFactoryLocatorZod,\n statusReporter: RuntimeStatusMonitorZod.optional(),\n }))\n\n/** Type guard that checks if a value is a valid BaseConfigContext. */\nexport const isBaseConfigContext = zodIsFactory(BaseConfigContextZod)\n/** Converts a value to BaseConfigContext, throwing if invalid. */\nexport const asBaseConfigContext = zodAsFactory(BaseConfigContextZod, 'asBaseConfigContext')\n/** toBaseConfigContext constant. */\nexport const toBaseConfigContext = zodToFactory(BaseConfigContextZod, 'toBaseConfigContext')\n\n/** Type guard that checks if a value is a valid CreatableProviderContext. */\nexport const isCreatableProviderContext = zodIsFactory(CreatableProviderContextZod)\n/** Converts a value to CreatableProviderContext, throwing if invalid. */\nexport const asCreatableProviderContext = zodAsFactory(CreatableProviderContextZod, 'asCreatableProviderContext')\n/** toCreatableProviderContext constant. */\nexport const toCreatableProviderContext = zodToFactory(CreatableProviderContextZod, 'toCreatableProviderContext')\n","import type { PayloadBundle } from '@xyo-network/sdk-js'\nimport { PayloadBuilder } from '@xyo-network/sdk-js'\nimport type { SignedHydratedBlockWithHashMeta } from '@xyo-network/xl1-protocol-lib'\nimport { asSignedBlockBoundWitnessWithHashMeta } from '@xyo-network/xl1-protocol-lib'\n\n/** bundledPayloadToHydratedBlock constant. */\nexport const bundledPayloadToHydratedBlock = async (\n payload: PayloadBundle,\n): Promise<SignedHydratedBlockWithHashMeta | undefined> => {\n const withHashMeta = await PayloadBuilder.addHashMeta(payload.payloads)\n const tx = asSignedBlockBoundWitnessWithHashMeta(withHashMeta.find(p => p._hash === payload.root))\n if (tx) {\n return [tx, withHashMeta.filter(p => p._hash !== payload.root)]\n }\n}\n","import type { PayloadBundle } from '@xyo-network/sdk-js'\nimport { PayloadBuilder } from '@xyo-network/sdk-js'\nimport type { SignedHydratedTransactionWithHashMeta } from '@xyo-network/xl1-protocol-lib'\nimport { asSignedTransactionBoundWitnessWithHashMeta } from '@xyo-network/xl1-protocol-lib'\n\n/** bundledPayloadToHydratedTransaction constant. */\nexport const bundledPayloadToHydratedTransaction = async (\n payload: PayloadBundle,\n): Promise<SignedHydratedTransactionWithHashMeta | undefined> => {\n const withHashMeta = await PayloadBuilder.addHashMeta(payload.payloads)\n const tx = asSignedTransactionBoundWitnessWithHashMeta(withHashMeta.find(p => p._hash === payload.root))\n if (tx) {\n return [tx, withHashMeta.filter(p => p._hash !== payload.root)]\n }\n}\n","import type { Hash } from '@xylabs/sdk-js'\nimport { type PayloadBundle, PayloadBundleSchema } from '@xyo-network/sdk-js'\nimport { PayloadBuilder } from '@xyo-network/sdk-js'\nimport type { SignedHydratedBlockWithHashMeta } from '@xyo-network/xl1-protocol-lib'\n\nimport { flattenHydratedBlock } from '../../block/index.ts'\n\n/** hydratedBlockToPayloadBundle constant. */\nexport const hydratedBlockToPayloadBundle = (transaction: SignedHydratedBlockWithHashMeta): PayloadBundle => {\n const root = transaction[0]._hash\n return bundle(root, transaction)\n}\n\nconst bundle = (root: Hash, transaction: SignedHydratedBlockWithHashMeta) => {\n const payloads = flattenHydratedBlock(transaction).flatMap(p => PayloadBuilder.omitStorageMeta(p))\n return new PayloadBuilder<PayloadBundle>({ schema: PayloadBundleSchema })\n .fields({ payloads, root })\n .build()\n}\n","import type { Hash } from '@xylabs/sdk-js'\nimport { type PayloadBundle, PayloadBundleSchema } from '@xyo-network/sdk-js'\nimport { PayloadBuilder } from '@xyo-network/sdk-js'\nimport type { SignedHydratedTransactionWithHashMeta } from '@xyo-network/xl1-protocol-lib'\n\nimport { flattenHydratedTransaction } from '../../transaction/index.ts'\n\n/** hydratedTransactionToPayloadBundle constant. */\nexport const hydratedTransactionToPayloadBundle = (transaction: SignedHydratedTransactionWithHashMeta): PayloadBundle => {\n const root = transaction[0]._hash\n return bundle(root, transaction)\n}\n\nconst bundle = (root: Hash, transaction: SignedHydratedTransactionWithHashMeta) => {\n const payloads = flattenHydratedTransaction(transaction)\n return new PayloadBuilder<PayloadBundle>({ schema: PayloadBundleSchema })\n .fields({ payloads, root })\n .build()\n}\n","import type { Address } from '@xylabs/sdk-js'\nimport type {\n AccountInstance, Payload, Schema,\n} from '@xyo-network/sdk-js'\nimport { Account } from '@xyo-network/sdk-js'\nimport type {\n AllowedBlockPayload, ChainId,\n SignedHydratedTransactionWithHashMeta,\n Transfer,\n XL1BlockNumber,\n} from '@xyo-network/xl1-protocol-lib'\nimport { asXL1BlockNumber, isAllowedBlockPayload } from '@xyo-network/xl1-protocol-lib'\n\nimport { createTransferPayload } from '../createTransferPayload.ts'\nimport { buildTransaction } from './buildTransaction.ts'\n\n/** buildRandomTransaction constant. */\nexport const buildRandomTransaction = async (\n chain: ChainId,\n payloads?: Payload[],\n account?: AccountInstance,\n nbf: XL1BlockNumber = asXL1BlockNumber(0, true),\n exp: XL1BlockNumber = asXL1BlockNumber(nbf + 1000, true),\n privatePayloadSchemas: Schema[] = [],\n receiverAddress?: Address,\n): Promise<SignedHydratedTransactionWithHashMeta> => {\n const elevatedPayloads: AllowedBlockPayload[] = (payloads ?? []).filter(isAllowedBlockPayload)\n const additionalPayloads: Payload[] = (payloads ?? []).filter(payload => !isAllowedBlockPayload(payload))\n const sender = account ?? await Account.random()\n if (elevatedPayloads?.length === 0) {\n const receiver = receiverAddress ?? (await Account.random()).address\n const transferPayload: Transfer = createTransferPayload(sender.address, { [receiver]: 1n })\n elevatedPayloads.push(transferPayload)\n }\n const hydratedTransaction = await buildTransaction(chain, elevatedPayloads, additionalPayloads, sender, nbf, exp)\n // remove private payloads from hydrated\n return [hydratedTransaction[0], hydratedTransaction[1].filter(p => !privatePayloadSchemas.includes(p.schema))]\n}\n","import type { Address, JsonObject } from '@xylabs/sdk-js'\nimport { toHex } from '@xylabs/sdk-js'\nimport { PayloadBuilder } from '@xyo-network/sdk-js'\nimport type { Transfer } from '@xyo-network/xl1-protocol-lib'\nimport { TransferSchema } from '@xyo-network/xl1-protocol-lib'\n\n/** Creates a TransferPayload instance. */\nexport function createTransferPayload(from: Address, transfers: Record<Address, bigint>, context?: JsonObject): Transfer {\n return new PayloadBuilder<Transfer>({ schema: TransferSchema })\n .fields({\n epoch: Date.now(),\n from,\n transfers: Object.fromEntries(Object.entries(transfers).map(([k, v]) => [k, toHex(v)])),\n context,\n }).build()\n}\n","import type { Address } from '@xylabs/sdk-js'\nimport { assertEx, toHex } from '@xylabs/sdk-js'\nimport type { AccountInstance, Payload } from '@xyo-network/sdk-js'\nimport {\n asAnyPayload, BoundWitnessBuilder, PayloadBuilder,\n} from '@xyo-network/sdk-js'\nimport type {\n AllowedBlockPayload,\n ChainId,\n ExecutableFields,\n FromFields,\n SignedHydratedTransactionWithHashMeta,\n TransactionBoundWitness, TransactionBoundWitnessFields, TransactionFeesBigInt,\n XL1BlockNumber,\n} from '@xyo-network/xl1-protocol-lib'\nimport { defaultTransactionFees } from '@xyo-network/xl1-protocol-lib'\n\n/** Builds a Transaction instance. */\nexport async function buildTransaction(\n chain: ChainId,\n onChainPayloads: AllowedBlockPayload[],\n offChainPayloads: Payload[],\n signer: AccountInstance | AccountInstance[],\n nbf: XL1BlockNumber,\n exp: XL1BlockNumber,\n from?: Address,\n fees: TransactionFeesBigInt = defaultTransactionFees,\n): Promise<SignedHydratedTransactionWithHashMeta> {\n if (from === undefined && Array.isArray(signer)) {\n throw new Error('from is required when signer is an array')\n }\n\n const txBoundWitnessFields: Omit<TransactionBoundWitnessFields, 'from'> = {\n chain,\n fees: {\n base: toHex(fees.base),\n gasLimit: toHex(fees.gasLimit),\n gasPrice: toHex(fees.gasPrice),\n priority: toHex(fees.priority),\n },\n nbf,\n exp,\n }\n\n const elevatedHashes = await PayloadBuilder.hashes(onChainPayloads)\n const script: string[] = []\n for (const elevatedHash of elevatedHashes) {\n script.push(`elevate|${elevatedHash}`)\n }\n\n const fields: TransactionBoundWitnessFields & FromFields & Partial<ExecutableFields> = {\n ...txBoundWitnessFields,\n from: from ?? (Array.isArray(signer) ? assertEx(signer.at(0)?.address) : signer.address),\n }\n\n if (script.length > 0) {\n fields.script = script\n }\n\n const [tx, txPayloads] = await new BoundWitnessBuilder<TransactionBoundWitness>()\n .fields(fields)\n .meta({ $signatures: [] })\n .payloads([...onChainPayloads, ...offChainPayloads])\n .signers(Array.isArray(signer) ? signer : [signer])\n .build()\n\n return [await PayloadBuilder.addHashMeta(tx), await PayloadBuilder.addHashMeta(txPayloads.map(p => asAnyPayload(p, true)))]\n}\n","import type { Address } from '@xylabs/sdk-js'\nimport { toHex } from '@xylabs/sdk-js'\nimport type { Payload } from '@xyo-network/sdk-js'\nimport { BoundWitnessBuilder, PayloadBuilder } from '@xyo-network/sdk-js'\nimport type {\n AllowedBlockPayload, ChainId, ExecutableFields, FromFields, TransactionBoundWitness, TransactionBoundWitnessFields, TransactionFeesBigInt,\n UnsignedHydratedTransaction,\n XL1BlockNumber,\n} from '@xyo-network/xl1-protocol-lib'\nimport { defaultTransactionFees } from '@xyo-network/xl1-protocol-lib'\n\n/** Builds a UnsignedTransaction instance. */\nexport async function buildUnsignedTransaction(\n chain: ChainId,\n onChainPayloads: AllowedBlockPayload[],\n offChainPayloads: Payload[],\n nbf: XL1BlockNumber,\n exp: XL1BlockNumber,\n from: Address,\n fees: TransactionFeesBigInt = defaultTransactionFees,\n): Promise<UnsignedHydratedTransaction> {\n const txBoundWitnessFields: Omit<TransactionBoundWitnessFields, 'from'> = {\n chain,\n fees: {\n base: toHex(fees.base),\n gasLimit: toHex(fees.gasLimit),\n gasPrice: toHex(fees.gasPrice),\n priority: toHex(fees.priority),\n },\n nbf,\n exp,\n }\n\n const elevatedHashes = await PayloadBuilder.hashes(onChainPayloads)\n const script: string[] = []\n for (const elevatedHash of elevatedHashes) {\n script.push(`elevate|${elevatedHash}`)\n }\n\n const fields: TransactionBoundWitnessFields & FromFields & Partial<ExecutableFields> = {\n ...txBoundWitnessFields,\n from,\n }\n\n if (script.length > 0) {\n fields.script = script\n }\n\n const [tx, txPayloads] = await new BoundWitnessBuilder<TransactionBoundWitness>()\n .fields(fields)\n .meta({ $signatures: [] })\n .payloads([...onChainPayloads, ...offChainPayloads])\n .build(false)\n\n return [tx, txPayloads]\n}\n","import type { Hash } from '@xylabs/sdk-js'\nimport { delay, isDefined } from '@xylabs/sdk-js'\nimport type {\n ConfirmSubmittedTransactionOptions, SignedHydratedTransaction,\n XyoViewer,\n} from '@xyo-network/xl1-protocol-lib'\n\nconst DEFAULT_CONFIRMATION_ATTEMPTS = 20\nconst DEFAULT_DELAY_BETWEEN_ATTEMPTS = 1000 // milliseconds\n\n/**\n * Confirms a submitted transaction by checking if it has been included in the blockchain.\n * @param viewer The viewer\n * @param txHash The hash of the transaction to confirm\n * @param options Options for confirmation\n * @returns The confirmed transaction or throws an error if not confirmed\n */\nexport const confirmSubmittedTransaction = async (\n viewer: XyoViewer,\n txHash: Hash,\n options?: ConfirmSubmittedTransactionOptions,\n): Promise<SignedHydratedTransaction> => {\n const { attempts: maxAttempts = DEFAULT_CONFIRMATION_ATTEMPTS, delay: attemptDelay = DEFAULT_DELAY_BETWEEN_ATTEMPTS } = options ?? {}\n options?.logger?.log('🚀 confirming transaction:', txHash, '\\n')\n let attempts = 0\n while (true) {\n const tx = await viewer.transaction.byHash(txHash) ?? undefined\n if (isDefined(tx)) {\n options?.logger?.log('✅ Transaction confirmed:', txHash, '\\n')\n return tx\n } else {\n attempts++\n if (attempts > maxAttempts) {\n options?.logger?.error(`⚠️ Transaction not confirmed after ${maxAttempts} attempts`)\n throw new Error(`Transaction ${txHash} not confirmed after ${maxAttempts} attempts`)\n } else {\n options?.logger?.log(`🔄 Transaction not confirmed yet, attempt ${attempts}. Retrying...`, '\\n')\n await delay(attemptDelay)\n }\n }\n }\n}\n","import type { Hash } from '@xylabs/sdk-js'\nimport { assertEx } from '@xylabs/sdk-js'\nimport type { Payload, WithStorageMeta } from '@xyo-network/sdk-js'\nimport {\n asAnyPayload, hydrateTypedBoundWitness, tryHydrateTypedBoundWitness,\n} from '@xyo-network/sdk-js'\nimport type {\n AllowedBlockPayload, HydratedTransaction, SignedHydratedTransaction,\n SignedHydratedTransactionWithHashMeta,\n SignedHydratedTransactionWithStorageMeta, TransactionBoundWitness,\n} from '@xyo-network/xl1-protocol-lib'\nimport {\n asSignedHydratedTransaction, isAllowedBlockPayload, isSignedTransactionBoundWitnessWithStorageMeta,\n} from '@xyo-network/xl1-protocol-lib'\n\nimport type { ChainStoreRead } from '../model/index.ts'\n\n/** tryHydrateTransaction constant. */\nexport const tryHydrateTransaction = async (\n { chainMap }: ChainStoreRead,\n hash: Hash,\n): Promise<SignedHydratedTransactionWithStorageMeta | undefined> => {\n return (await tryHydrateTypedBoundWitness<TransactionBoundWitness>(\n {\n get(hashes: Hash[]) {\n return chainMap.get(hashes)\n },\n next() {\n throw new Error('Not implemented')\n },\n },\n hash,\n isSignedTransactionBoundWitnessWithStorageMeta,\n )) as SignedHydratedTransactionWithStorageMeta | undefined\n}\n\n/** hydrateTransaction constant. */\nexport const hydrateTransaction = async (\n { chainMap }: ChainStoreRead,\n hash: Hash,\n): Promise<SignedHydratedTransaction> => {\n return await hydrateTypedBoundWitness<TransactionBoundWitness>(\n {\n get(hashes: Hash[]) {\n return chainMap.get(hashes)\n },\n next() {\n throw new Error('Not implemented')\n },\n },\n hash,\n isSignedTransactionBoundWitnessWithStorageMeta,\n ) as SignedHydratedTransaction\n}\n\n/** FlattenHydratedTransaction helper function. */\nexport function flattenHydratedTransaction<T extends HydratedTransaction>(hydratedTransaction: T): (T[0] | T[1][number])[] {\n const [tx, txPayloads] = hydratedTransaction\n return [...txPayloads, tx]\n}\n\n/** tryUnflattenHydratedTransaction constant. */\nexport const tryUnflattenHydratedTransaction = (\n flattened: Payload[],\n): SignedHydratedTransaction | undefined => {\n // Last element is always the transaction bound witness\n const tx = flattened.at(-1)\n\n // Everything else is a payloads\n const txPayloads = flattened.slice(0, -1)\n\n return asSignedHydratedTransaction([tx, txPayloads])\n}\n\n/** unflattenHydratedTransaction constant. */\nexport const unflattenHydratedTransaction = (flattened: Payload[]): SignedHydratedTransaction =>\n asSignedHydratedTransaction(tryUnflattenHydratedTransaction(flattened), true)\n\n/** FlattenHydratedTransactions helper function. */\nexport function flattenHydratedTransactions<T extends HydratedTransaction>(hydratedTransactions: T[]): (T[0] | T[1][number])[] {\n return hydratedTransactions.flatMap(tx => flattenHydratedTransaction(tx))\n}\n\n/** tryHydrateElevatedTransaction constant. */\nexport const tryHydrateElevatedTransaction = async (\n { chainMap }: ChainStoreRead,\n hash: Hash,\n): Promise<SignedHydratedTransactionWithHashMeta | undefined> => {\n const hydratedTransaction = await tryHydrateTransaction({ chainMap }, hash)\n if (!hydratedTransaction) {\n return undefined\n }\n const [transaction, payloads] = hydratedTransaction\n const opCodes = (transaction.script ?? []).filter(operation => operation.startsWith('elevate|'))\n const elevatedPayloads: WithStorageMeta<AllowedBlockPayload>[] = []\n for (const opCode of opCodes) {\n const [code, hash] = opCode.split('|')\n if (code === 'elevated') {\n const elevatedPayload = payloads.find(payload => payload._hash === hash)\n if (isAllowedBlockPayload(elevatedPayload)) {\n elevatedPayloads.push(elevatedPayload)\n }\n }\n }\n if (opCodes.length === elevatedPayloads.length) {\n return [transaction, elevatedPayloads.map(p => asAnyPayload(p, true))]\n }\n return undefined\n}\n\n/** hydrateElevatedTransaction constant. */\nexport const hydrateElevatedTransaction = async (\n context: ChainStoreRead,\n hash: Hash,\n): Promise<SignedHydratedTransactionWithHashMeta> => {\n return assertEx(await tryHydrateElevatedTransaction(context, hash), () => 'Hydration failed')\n}\n","import { PayloadBuilder } from '@xyo-network/sdk-js'\nimport type { HydratedTransaction } from '@xyo-network/xl1-protocol-lib'\n\n/** The number of bytes that a transaction and its payloads will take up in a block */\nexport function transactionBlockByteCount([transaction, payloads]: HydratedTransaction): number {\n const cleanTransaction = PayloadBuilder.omitStorageMeta(transaction)\n const transactionBytes = JSON.stringify(cleanTransaction).length\n const cleanPayloads = PayloadBuilder.omitStorageMeta(payloads)\n return cleanPayloads.reduce((acc: number, payload) => acc + JSON.stringify(payload).length, 0) + transactionBytes\n}\n","import { asHash, type Hash } from '@xylabs/sdk-js'\nimport type { Payload, WithHashMeta } from '@xyo-network/sdk-js'\nimport type { HydratedTransactionWithHashMeta, TransactionBoundWitness } from '@xyo-network/xl1-protocol-lib'\n\nimport { crackOperations } from './transactionOperations.ts'\n\n/** TransactionElevatedPayloadHashes helper function. */\nexport function transactionElevatedPayloadHashes(transaction: TransactionBoundWitness): Hash[] {\n const elevateOperations = crackOperations(transaction.script ?? []).filter(op => op[0] === 'elevate')\n return elevateOperations.map(op => asHash(op[1][0], true))\n}\n\n/** TransactionElevatedPayloads helper function. */\nexport function transactionElevatedPayloads([transaction, payloads]: HydratedTransactionWithHashMeta): WithHashMeta<Payload>[] {\n const hashes = transactionElevatedPayloadHashes(transaction)\n const elevatedPayloads = payloads.filter(payload => hashes.includes(payload._hash))\n return elevatedPayloads\n}\n","/** CrackOperation helper function. */\nexport function crackOperation(operation: string): [string, string[]] {\n const parts = operation.split('|')\n if (parts.length < 2) {\n throw new Error(`Invalid operation format: ${operation}`)\n }\n return [parts[0], parts.slice(1)]\n}\n\n/** CrackOperations helper function. */\nexport function crackOperations(operations: string[]): [string, string[]][] {\n return operations.map(op => crackOperation(op))\n}\n","import type { HydratedTransactionWithHashMeta } from '@xyo-network/xl1-protocol-lib'\nimport { AttoXL1, TransactionGasCosts } from '@xyo-network/xl1-protocol-lib'\n\nimport { transactionBlockByteCount } from './transactionBlockByteCount.ts'\nimport { transactionElevatedPayloads } from './transactionElevatedPayloads.ts'\n\n/** The required gas for the byte storage on the block chain for a transaction */\nexport function transactionBytesRequiredGas([transaction, payloads]: HydratedTransactionWithHashMeta): AttoXL1 {\n const transactionBlockBytes = transactionBlockByteCount([transaction, payloads])\n return AttoXL1(TransactionGasCosts.characterStorage * BigInt(transactionBlockBytes))\n}\n\n/** TransactionRequiredGas helper function. */\nexport function transactionRequiredGas(hydratedTransaction: HydratedTransactionWithHashMeta): AttoXL1 {\n const elevatedPayloads = transactionElevatedPayloads(hydratedTransaction)\n const hashes = elevatedPayloads.length + 1 /* for transaction itself */\n const signatures = hydratedTransaction[0].addresses.length\n return AttoXL1(transactionBytesRequiredGas(hydratedTransaction)\n + TransactionGasCosts.hashValidation * BigInt(hashes)\n + TransactionGasCosts.signatureValidation * BigInt(signatures)\n + TransactionGasCosts.payloadValidation * BigInt(elevatedPayloads.length))\n}\n","import { asHash, type Hash } from '@xylabs/sdk-js'\nimport { assertEx, filterAs } from '@xylabs/sdk-js'\nimport type { WithHashMeta } from '@xyo-network/sdk-js'\nimport { isHashMeta } from '@xyo-network/sdk-js'\nimport type { AllowedBlockPayload, HydratedTransactionWithHashMeta } from '@xyo-network/xl1-protocol-lib'\nimport { isAllowedBlockPayload } from '@xyo-network/xl1-protocol-lib'\n\n/** tryExtractElevatedHashesFromScript constant. */\nexport const tryExtractElevatedHashesFromScript = (strings: string[]): Hash[] => {\n const hashes = strings\n .filter(str => str.startsWith('elevate|'))\n .map(str => str.split('|')[1])\n return filterAs(hashes, h => asHash(h))\n}\n\n/** extractElevatedHashesFromScript constant. */\nexport const extractElevatedHashesFromScript = (strings: string[]): Hash[] => {\n const hashes = strings\n .filter(str => str.startsWith('elevate|'))\n .map(str => str.split('|')[1])\n const filtered = filterAs(hashes, h => asHash(h))\n assertEx(filtered.length === hashes.length, () => 'Invalid elevated hashes')\n return filtered\n}\n\n/** tryExtractElevatedHashes constant. */\nexport const tryExtractElevatedHashes = (tx: HydratedTransactionWithHashMeta): WithHashMeta<AllowedBlockPayload>[] => {\n const [bw, payloads] = tx\n const { script } = bw\n const hashes = script ? tryExtractElevatedHashesFromScript(script) : []\n return payloads\n .filter(p => hashes.includes(p._hash))\n .filter(isAllowedBlockPayload)\n .filter(isHashMeta)\n}\n\n/** extractElevatedHashes constant. */\nexport const extractElevatedHashes = (tx: HydratedTransactionWithHashMeta): WithHashMeta<AllowedBlockPayload>[] => {\n const [bw, payloads] = tx\n const { script } = bw\n const hashes = script ? tryExtractElevatedHashesFromScript(script) : []\n const filtered = payloads\n .filter(p => hashes.includes(p._hash))\n .filter(isAllowedBlockPayload)\n .filter(isHashMeta)\n assertEx(filtered.length === hashes.length, () => 'Invalid elevated hashes')\n return filtered\n}\n","import {\n assertEx, hexFromArrayBuffer, toArrayBuffer,\n} from '@xylabs/sdk-js'\nimport type { AccountInstance, Signed } from '@xyo-network/sdk-js'\nimport { PayloadBuilder } from '@xyo-network/sdk-js'\nimport type { TransactionBoundWitness, UnsignedTransactionBoundWitness } from '@xyo-network/xl1-protocol-lib'\n\n/**\n * Signs an unsigned transaction with the provided account.\n * @param tx The transaction to sign\n * @param account The account to sign the transaction with\n * @returns The signed transaction\n */\nexport async function signTransaction(tx: UnsignedTransactionBoundWitness, account: AccountInstance) {\n assertEx(tx.from === account.address, () => 'Signer address does not match transaction from address')\n // Clone tx to prevent modifying original\n const unsignedTx = structuredClone(tx)\n // Update dynamic fields based on account\n unsignedTx.addresses = [account.address]\n unsignedTx.previous_hashes = [account.previousHash ?? null]\n // Calculate tx hash and sign it\n const hash = await PayloadBuilder.dataHash(unsignedTx)\n const hashBytes = toArrayBuffer(hash)\n const [signature] = await account.sign(hashBytes)\n // Append the signatures to the transaction\n const result: Signed<TransactionBoundWitness> = {\n ...unsignedTx,\n $signatures: [hexFromArrayBuffer(signature)],\n }\n // Return the signed transaction\n return result\n}\n","import type { Hex } from '@xylabs/sdk-js'\nimport { assertEx, Base } from '@xylabs/sdk-js'\nimport type {\n AccountInstance, Payload, PayloadBuilderOptions,\n} from '@xyo-network/sdk-js'\nimport { PayloadBuilder } from '@xyo-network/sdk-js'\nimport type {\n AllowedBlockPayload,\n ChainId,\n TransactionFeesBigInt,\n} from '@xyo-network/xl1-protocol-lib'\nimport {\n asXL1BlockNumber,\n defaultTransactionFees, isAllowedBlockPayload, minTransactionFees, XYO_ZERO_ADDRESS,\n} from '@xyo-network/xl1-protocol-lib'\n\nimport { buildTransaction } from './buildTransaction.ts'\nimport { transactionRequiredGas } from './primitives/index.ts'\n\n/** Builder for constructing Transaction instances. */\nexport class TransactionBuilder<TPayload extends Payload> extends Base<Omit<PayloadBuilderOptions, 'schema'>> {\n private _blockRange?: [number, number]\n private _chain?: Hex\n private _elevatedPayloads: AllowedBlockPayload[] = []\n private _fees: TransactionFeesBigInt | undefined\n private _payloads: TPayload[] = []\n private _signers: AccountInstance[] = []\n\n constructor(options: Omit<PayloadBuilderOptions, 'schema'> = {}) {\n super(options)\n }\n\n async build() {\n const chain = assertEx(this._chain, () => 'Chain must be set before building the transaction')\n const fees = assertEx(this._fees, () => 'Fees must be set before building the transaction')\n const blockRange = assertEx(this._blockRange, () => 'Block range must be set before building the transaction')\n return await buildTransaction(\n chain,\n this._elevatedPayloads,\n this._payloads,\n this._signers,\n asXL1BlockNumber(blockRange[0], true),\n asXL1BlockNumber(blockRange[1], true),\n this._signers[0]?.address,\n fees,\n )\n }\n\n chain(chain: ChainId) {\n this._chain = chain\n return this\n }\n\n async dryRun() {\n return await buildTransaction(\n XYO_ZERO_ADDRESS,\n this._elevatedPayloads,\n this._payloads,\n this._signers,\n asXL1BlockNumber(0, true),\n asXL1BlockNumber(1000, true),\n this._signers[0]?.address,\n defaultTransactionFees,\n )\n }\n\n elevatedPayload(payload?: AllowedBlockPayload) {\n const allowedPayload = isAllowedBlockPayload(payload) ? payload : undefined\n const allowPayloadExists = assertEx(allowedPayload, () => 'Payload must be an AllowedBlockPayload')\n this._elevatedPayloads.push(allowPayloadExists)\n return this\n }\n\n elevatedPayloads(payloads?: AllowedBlockPayload[]) {\n if (payloads)\n for (const payload of payloads) {\n this.elevatedPayload(payload)\n }\n return this\n }\n\n async estimatedMinimumFees(): Promise<TransactionFeesBigInt> {\n const tx = await this.dryRun()\n const requiredGas = transactionRequiredGas(tx)\n return {\n base: minTransactionFees.base,\n // eslint-disable-next-line unicorn/prefer-math-min-max\n gasLimit: requiredGas > minTransactionFees.gasLimit ? requiredGas : minTransactionFees.gasLimit,\n gasPrice: minTransactionFees.gasPrice,\n priority: minTransactionFees.priority,\n }\n }\n\n fees(fees: TransactionFeesBigInt) {\n this._fees = fees\n return this\n }\n\n payload(payload?: TPayload) {\n this._payloads.push(payload as TPayload)\n return this\n }\n\n payloads(payloads?: TPayload[]) {\n if (payloads)\n for (const payload of payloads) {\n if (payload !== null) {\n this.payload(payload)\n }\n }\n return this\n }\n\n range(blockRange: [number, number]) {\n if (blockRange.length !== 2) {\n throw new Error('Block range must be an array of two numbers')\n }\n this._blockRange = blockRange\n return this\n }\n\n async removeElevatedPayload(payload: AllowedBlockPayload) {\n const hash = await PayloadBuilder.hash(payload)\n const existingHashes = await PayloadBuilder.hashes(this._elevatedPayloads)\n\n // no async after this point to prevent changing _elevatedPayloads from other promise\n const existingPayloadIndex = existingHashes.indexOf(hash)\n if (existingPayloadIndex === -1) {\n throw new Error('Payload not found in the transaction')\n }\n this._elevatedPayloads = this._elevatedPayloads.filter((_, index) => index !== existingPayloadIndex)\n return this\n }\n\n async removePayload(payload: TPayload) {\n const hash = await PayloadBuilder.hash(payload)\n const existingHashes = await PayloadBuilder.hashes(this._payloads)\n\n // no async after this point to prevent changing _payloads from other promise\n const existingPayloadIndex = existingHashes.indexOf(hash)\n if (existingPayloadIndex === -1) {\n throw new Error('Payload not found in the transaction')\n }\n this._payloads = this._payloads.filter((_, index) => index !== existingPayloadIndex)\n return this\n }\n\n signer(signer?: AccountInstance) {\n if (signer) {\n this._signers.push(signer)\n }\n return this\n }\n\n signers(signers?: (AccountInstance | null)[]) {\n if (signers)\n for (const signer of signers) {\n if (signer !== null) {\n this.signer(signer)\n }\n }\n return this\n }\n}\n","import type { Logger } from '@xylabs/sdk-js'\nimport {\n AbstractCreatable, assertEx, IdLogger,\n} from '@xylabs/sdk-js'\nimport type { Provider, ProviderMoniker } from '@xyo-network/xl1-protocol-lib'\n\nimport type {\n CreatableProvider,\n CreatableProviderEventData, CreatableProviderInstance, CreatableProviderParams,\n ProviderMap,\n} from './CreatableProvider.ts'\nimport { ProviderFactory } from './ProviderFactory.ts'\n\n/** Abstract base class for CreatableProvider implementations. */\nexport abstract class AbstractCreatableProvider<TParams extends CreatableProviderParams = CreatableProviderParams,\n TEventData extends CreatableProviderEventData = CreatableProviderEventData> extends AbstractCreatable<TParams, TEventData>\n implements Omit<CreatableProviderInstance, 'moniker'> {\n dependencies: ProviderMap = {}\n\n protected _contextCache: TParams['context'] | undefined\n protected _logger: Logger | undefined | null\n\n abstract readonly moniker: ProviderMoniker\n\n override get logger() {\n // we use null as a way to know if it has been initialized to nothing\n if (this._logger === undefined) {\n const providedLogger = this.params.logger ?? this.context.logger\n this._logger = providedLogger ? new IdLogger(providedLogger, () => `${this.moniker} [${this.constructor.name}]`) : null\n }\n return this._logger ?? undefined\n }\n\n override get meter() {\n return this.context.meterProvider?.getMeter(this.name) ?? super.meter\n }\n\n override get tracer() {\n return this.context.traceProvider?.getTracer(this.name) ?? super.tracer\n }\n\n protected get config() {\n return this.context.config!\n }\n\n protected get context() {\n return this.params.context!\n }\n\n protected get locator() {\n return this.context.locator!\n }\n\n static factory<TInstance extends CreatableProviderInstance, TDependencies extends ProviderMoniker[] = ProviderMoniker[]>(\n this: CreatableProvider<TInstance>,\n dependencies: TDependencies,\n params: Omit<TInstance['params'], 'context'>,\n ) {\n const factory = ProviderFactory.withParams<TInstance, TDependencies>(this, dependencies, params)\n return factory\n }\n\n static override async paramsHandler<T extends CreatableProviderInstance>(\n params: Partial<T['params']> = {},\n ) {\n const context = assertEx(params.context, () => new Error('Context is required'))\n const config = assertEx(context.config, () => new Error('Context config is required'))\n const locator = assertEx(context.locator, () => new Error('Context locator is required'))\n return await super.paramsHandler<T>({\n ...params,\n statusReporter: params.statusReporter ?? context.statusReporter,\n context: {\n ...context, config, locator,\n },\n name: params.name ?? (this as unknown as CreatableProvider<T>).defaultMoniker,\n logger: params.logger ?? context.logger,\n })\n }\n\n override async createHandler() {\n await super.createHandler()\n if (this.tracer === undefined) {\n this.logger?.warn('No tracer available in context')\n }\n if (this.meter === undefined) {\n this.logger?.warn('No meter available in context')\n }\n }\n\n async locateAndCreate<TProvider extends Provider<ProviderMoniker>>(moniker: TProvider['moniker']) {\n return await this.locator.getInstance<TProvider>(moniker)\n }\n\n async tryLocateAndCreate<TProvider extends Provider<ProviderMoniker>>(moniker: TProvider['moniker']) {\n return await this.locator.tryGetInstance<TProvider>(moniker)\n }\n}\n","import type { Labels, WithOptionalLabels } from '@xylabs/sdk-js'\nimport { assertEx } from '@xylabs/sdk-js'\nimport type { ProviderMoniker } from '@xyo-network/xl1-protocol-lib'\n\nimport type {\n CreatableProvider, CreatableProviderFactory, CreatableProviderInstance,\n ProviderFactoryScope,\n} from './CreatableProvider.ts'\nimport type { GetInstanceOptions } from './GetInstanceOptions.ts'\n\ndeclare global {\n var xyoServiceSingletons: Record<string, unknown>\n}\n\n/** ProviderFactoryDescription helper function. */\nexport function providerFactoryDescription(factory: CreatableProviderFactory, labels?: Labels) {\n return `${factory.providerName}:${factory.defaultMoniker}:${JSON.stringify(labels ?? (factory as WithOptionalLabels).labels ?? {})}`\n}\n\n/** ProviderFactory implementation. */\nexport class ProviderFactory<TProvider extends CreatableProviderInstance,\n TDependencies extends ProviderMoniker[]> implements CreatableProviderFactory<TProvider> {\n creatableProvider: CreatableProvider<TProvider>\n\n defaultMoniker: CreatableProvider<TProvider>['monikers'][number]\n\n defaultParams: Omit<TProvider['params'], 'context'>\n\n dependencies: TDependencies\n\n labels?: Labels\n\n monikers: CreatableProvider<TProvider>['monikers']\n\n providerName: string\n\n scope: ProviderFactoryScope\n\n private _uniqueId: symbol\n\n constructor(\n creatableProvider: CreatableProvider<TProvider>,\n dependencies: TDependencies,\n params: Omit<TProvider['params'], 'context'>,\n labels: Labels = {},\n scope: ProviderFactoryScope = 'context',\n ) {\n this.creatableProvider = creatableProvider\n this.defaultParams = params\n this.defaultMoniker = creatableProvider.defaultMoniker\n this.dependencies = dependencies\n this.monikers = creatableProvider.monikers\n this.scope = scope\n assertEx(this.monikers.includes(this.defaultMoniker), () => 'defaultMoniker must be in monikers')\n this.labels = Object.assign({}, (creatableProvider as WithOptionalLabels).labels ?? {}, labels ?? {})\n this.providerName = creatableProvider.name\n this._uniqueId = Symbol(providerFactoryDescription(this))\n }\n\n get resolvedMoniker() {\n const labels: Labels = this.labels ?? {}\n const labelString = Object.entries(labels).map(([key, value]) => `${key}=${value}`).join(',')\n return labelString.length === 0 ? `${this.defaultMoniker}` : `${this.defaultMoniker}|${labelString}`\n }\n\n get uniqueId(): symbol {\n return this._uniqueId\n }\n\n static withParams<TInstance extends CreatableProviderInstance, TDependencies extends ProviderMoniker[]>(\n creatableProvider: CreatableProvider<TInstance>,\n dependencies: TDependencies,\n params: Omit<TInstance['params'], 'context'>,\n labels: Labels = {},\n ) {\n return new ProviderFactory<TInstance, TDependencies>(creatableProvider, dependencies, params, labels)\n }\n\n factory<TInstance extends CreatableProviderInstance, TDependencies extends ProviderMoniker[]>(\n this: CreatableProviderFactory<TInstance, TDependencies>,\n dependencies: TDependencies,\n params: Omit<TInstance['params'], 'context'>,\n labels: Labels = {},\n ) {\n return new ProviderFactory<TInstance, TDependencies>(this.creatableProvider, dependencies, params, labels)\n }\n\n async getInstance(this: CreatableProviderFactory<TProvider>, params: TProvider['params'], { start = true }: GetInstanceOptions): Promise<TProvider> {\n let scopeObject: Record<string, unknown> = {}\n switch (this.scope) {\n case 'global': {\n if (globalThis.xyoServiceSingletons === undefined) {\n globalThis.xyoServiceSingletons = {}\n }\n scopeObject = globalThis.xyoServiceSingletons\n break\n }\n case 'context': {\n const context = assertEx(\n params?.context,\n () => 'Context is required for context-scoped providers',\n )\n if (context.singletons === undefined) {\n context.singletons = {}\n }\n scopeObject = context.singletons\n break\n }\n default: {\n scopeObject = {}\n break\n }\n }\n const mergedParams: TProvider['params'] = {\n ...this.defaultParams,\n ...params,\n } as TProvider['params']\n const resultPromise = scopeObject[this.resolvedMoniker] as Promise<TProvider> ?? this.creatableProvider.create<TProvider>(mergedParams)\n scopeObject[this.resolvedMoniker] = resultPromise\n const result = await resultPromise\n if (start) {\n assertEx(await result.start(), () => `Failed to start provider instance [${this.resolvedMoniker}]`)\n }\n return result\n }\n\n async tryGetInstance(\n this: CreatableProviderFactory<TProvider>,\n params: TProvider['params'],\n options?: GetInstanceOptions,\n ): Promise<TProvider | undefined> {\n try {\n return await this.getInstance(params, options)\n } catch {\n return\n }\n }\n}\n","import type {\n Creatable, CreatableInstance, CreatableParams,\n EventData,\n Labels, WithOptionalLabels,\n} from '@xylabs/sdk-js'\nimport type { Provider, ProviderMoniker } from '@xyo-network/xl1-protocol-lib'\n\nimport type { CreatableProviderContext } from '../model/index.ts'\nimport type { GetInstanceOptions } from './GetInstanceOptions.ts'\nimport type { LabeledCreatableProviderFactory } from './LabeledCreatableProviderFactory.ts'\n\n/** Parameters for CreatableProvider. */\nexport interface CreatableProviderParams<TContext extends CreatableProviderContext = CreatableProviderContext> extends CreatableParams {\n context: TContext\n}\n/** CreatableProviderEventData interface. */\nexport interface CreatableProviderEventData extends EventData {}\n\n/** CreatableProviderInstance type. */\nexport type CreatableProviderInstance<\n TProvider extends Provider<ProviderMoniker> = Provider<ProviderMoniker>,\n TDependencies extends ProviderMoniker[] = ProviderMoniker[],\n TParams extends CreatableProviderParams = CreatableProviderParams,\n TEventData extends CreatableProviderEventData = CreatableProviderEventData>\n = CreatableInstance<TParams, TEventData> & TProvider & {\n dependencies: ProviderMap<TDependencies[number]>\n }\n\n/** ProviderFactoryScope type. */\nexport type ProviderFactoryScope = 'global' | 'context' | 'local'\n\n/** CreatableProviderFactory interface. */\nexport interface CreatableProviderFactory<T extends CreatableProviderInstance = CreatableProviderInstance,\n TDependencies extends ProviderMoniker[] = ProviderMoniker[]>\n extends Omit<CreatableProvider<T>, 'create' | 'createHandler' | 'paramsHandler'> {\n creatableProvider: CreatableProvider<T>\n defaultParams: Omit<T['params'], 'context'>\n\n readonly dependencies: TDependencies\n\n labels?: Labels\n providerName: string\n resolvedMoniker: string\n scope: ProviderFactoryScope\n\n uniqueId: symbol\n\n getInstance(\n this: CreatableProviderFactory<T>,\n params: T['params'],\n options?: GetInstanceOptions): Promise<T>\n\n tryGetInstance(\n this: CreatableProviderFactory<T>,\n params: T['params'],\n options?: GetInstanceOptions): Promise<T | undefined>\n\n}\n\n/** LabeledCreatableProvider interface. */\nexport interface LabeledCreatableProvider<T extends CreatableProviderInstance = CreatableProviderInstance,\n TDependencies extends ProviderMoniker[] = ProviderMoniker[]> extends CreatableProvider<T>, WithOptionalLabels {\n factory(dependencies: TDependencies, params: Omit<T['params'], 'context'>): LabeledCreatableProviderFactory<T>\n}\n\n/** ProviderMap type. */\nexport type ProviderMap<T extends ProviderMoniker = ProviderMoniker> = Partial<Record<T, CreatableProviderInstance<Provider<T>>>>\n\n/** CreatableProvider interface. */\nexport interface CreatableProvider<T extends CreatableProviderInstance = CreatableProviderInstance,\n TDependencies extends ProviderMoniker[] = ProviderMoniker[]> extends Creatable<T> {\n readonly defaultMoniker: ProviderMoniker\n readonly dependencies: TDependencies\n readonly monikers: ProviderMoniker[]\n factory(dependencies: TDependencies, params: Omit<T['params'], 'context'>): CreatableProviderFactory<T>\n}\n\n/**\n * Class annotation to be used to decorate Providers which support\n * an asynchronous creation pattern\n * @returns The decorated Provider requiring it implement the members\n * of the CreatableProvider as statics properties/methods\n */\nexport function creatableProvider<TProvider extends CreatableProviderInstance = CreatableProviderInstance>() {\n return <U extends CreatableProvider<TProvider>>(constructor: U) => {\n // eslint-disable-next-line @typescript-eslint/no-unused-expressions\n constructor\n }\n}\n\n/**\n * Class annotation to be used to decorate Providers which support\n * an asynchronous creation pattern\n * @returns The decorated Provider requiring it implement the members\n * of the CreatableProvider as statics properties/methods\n */\nexport function labeledCreatableProvider<TProvider extends CreatableProviderInstance = CreatableProviderInstance>() {\n return <U extends LabeledCreatableProvider<TProvider>>(constructor: U) => {\n // eslint-disable-next-line @typescript-eslint/no-unused-expressions\n constructor\n }\n}\n","import type { Labels } from '@xylabs/sdk-js'\nimport { isTruthy } from '@xylabs/sdk-js'\nimport type { ProviderMoniker } from '@xyo-network/xl1-protocol-lib'\n\nimport type { CreatableProviderFactory, CreatableProviderInstance } from './CreatableProvider.ts'\nimport type { LabeledCreatableProviderFactory } from './LabeledCreatableProviderFactory.ts'\nimport { providerFactoryDescription } from './ProviderFactory.ts'\n\n/** CreatableProviderRegistry type. */\nexport type CreatableProviderRegistry<TMonikers extends ProviderMoniker[] = ProviderMoniker[]>\n = Record<TMonikers[number], (CreatableProviderFactory | LabeledCreatableProviderFactory)[] | undefined>\n\nconst buildProviderFactory = <TProvider extends CreatableProviderInstance>(\n provider: CreatableProviderFactory<TProvider>,\n defaultParams: Omit<TProvider['params'], 'context'>,\n labels?: Labels,\n): LabeledCreatableProviderFactory<TProvider> => {\n const factory = {\n monikers: provider.monikers,\n uniqueId: Symbol(providerFactoryDescription(provider, labels)),\n // Merge module & supplied labels\n labels: { ...(provider as LabeledCreatableProviderFactory).labels, ...labels },\n creatableProvider: provider.creatableProvider,\n dependencies: provider.dependencies,\n resolvedMoniker: provider.resolvedMoniker,\n providerName: provider.providerName,\n scope: provider.scope,\n defaultParams,\n getInstance: provider.getInstance.bind(provider) as LabeledCreatableProviderFactory<TProvider>['getInstance'],\n tryGetInstance: provider.tryGetInstance?.bind(provider) as LabeledCreatableProviderFactory<TProvider>['tryGetInstance'],\n defaultMoniker: provider.defaultMoniker,\n factory: provider.factory.bind(provider) as LabeledCreatableProviderFactory<TProvider>['factory'],\n } satisfies LabeledCreatableProviderFactory<TProvider>\n return factory\n}\n\n/** registerCreatableProviderFactory constant. */\nexport const registerCreatableProviderFactory = <TProvider extends CreatableProviderInstance>(\n registry: CreatableProviderRegistry,\n factory: CreatableProviderFactory<TProvider> | LabeledCreatableProviderFactory<TProvider>,\n labels?: Labels,\n /** register this as the primary factory for every schema it supports */\n primary: boolean | ProviderMoniker | ProviderMoniker[] = false,\n) => {\n const primaryMonikers\n = primary !== true && isTruthy(primary)\n ? Array.isArray(primary)\n ? primary\n : [primary]\n : []\n\n for (const primaryMoniker of primaryMonikers) {\n if (!factory.monikers.includes(primaryMoniker)) {\n console.warn(`Primary moniker ${primary} not found in factory monikers`)\n }\n }\n\n const isPrimaryForMoniker = (moniker: ProviderMoniker) => {\n switch (typeof primary) {\n case 'boolean': {\n return primary\n }\n case 'string': {\n return moniker === primary\n }\n case 'object': {\n if (Array.isArray(primary)) {\n return primary.includes(moniker)\n }\n }\n }\n throw new Error(`Invalid primary value: ${primary}`)\n }\n\n const factoryClone: LabeledCreatableProviderFactory<TProvider> = buildProviderFactory(factory, factory.defaultParams, labels)\n\n // add this default moniker as the first entry\n registry[factoryClone.defaultMoniker] = [factoryClone, ...(registry[factoryClone.defaultMoniker] ?? [])]\n for (const moniker of factoryClone.monikers) {\n registry[moniker] = isPrimaryForMoniker(moniker) ? [factoryClone, ...(registry[moniker] ?? [])] : [...(registry[moniker] ?? []), factoryClone]\n }\n}\n\n/** registerCreatableProviderFactories constant. */\nexport const registerCreatableProviderFactories = (\n factories: (CreatableProviderFactory | LabeledCreatableProviderFactory)[],\n registry: CreatableProviderRegistry = {},\n primary = false,\n) => {\n for (const factory of factories) {\n registerCreatableProviderFactory(registry, factory, undefined, primary)\n }\n return registry\n}\n","import type { WithOptionalLabels } from '@xylabs/sdk-js'\n\nimport type { CreatableProviderFactory, CreatableProviderInstance } from './CreatableProvider.ts'\n\n/** LabeledCreatableProviderFactory type. */\nexport type LabeledCreatableProviderFactory<T extends CreatableProviderInstance = CreatableProviderInstance> = CreatableProviderFactory<T> & WithOptionalLabels\n\n/** hasLabels constant. */\nexport const hasLabels = (factory: CreatableProviderFactory | LabeledCreatableProviderFactory): factory is LabeledCreatableProviderFactory => {\n return (factory as LabeledCreatableProviderFactory).labels !== undefined\n}\n\n/**\n * Class annotation to be used to decorate Providers which support\n * an asynchronous labeled creation factory pattern\n * @returns The decorated Provider requiring it implement the members\n * of the CreatableProvider as statics properties/methods\n */\nexport function labeledCreatableProviderFactory<TProvider extends CreatableProviderInstance = CreatableProviderInstance>() {\n return <U extends LabeledCreatableProviderFactory<TProvider>>(constructor: U) => {\n // eslint-disable-next-line @typescript-eslint/no-unused-expressions\n constructor\n }\n}\n","import { hasAllLabels, type Labels } from '@xylabs/sdk-js'\nimport { assertEx } from '@xylabs/sdk-js'\nimport type { Provider, ProviderMoniker } from '@xyo-network/xl1-protocol-lib'\n\nimport type { CreatableProviderContext } from '../model/index.ts'\nimport type { CreatableProviderFactory, CreatableProviderInstance } from './CreatableProvider.ts'\nimport { type CreatableProviderRegistry, registerCreatableProviderFactory } from './CreatableProviderRegistry.ts'\nimport type { ProviderFactoryGetInstanceOptions } from './GetInstanceOptions.ts'\nimport { hasLabels, type LabeledCreatableProviderFactory } from './LabeledCreatableProviderFactory.ts'\nimport type { ProviderFactoryLocatorInstance } from './ProviderFactoryLocatorInstance.ts'\n\n/**\n * A class which encapsulates the Service Locator Pattern for Provider Factories\n */\nexport class ProviderFactoryLocator<TContext extends CreatableProviderContext = CreatableProviderContext,\n TMonikers extends ProviderMoniker[] = ProviderMoniker[]> implements ProviderFactoryLocatorInstance<TContext> {\n protected readonly _context: TContext\n protected readonly _registry: CreatableProviderRegistry<TMonikers>\n\n private _frozen = false\n private _parent?: ProviderFactoryLocatorInstance<TContext>\n private _validateDepsOnRegister: boolean\n\n constructor(context: (Omit<TContext, 'locator'> & { locator?: TContext['locator'] }), registry: CreatableProviderRegistry = {}, validateDepsOnRegister = false) {\n this._registry = registry\n this._context = { ...context, locator: this } as unknown as TContext\n this._parent = context.locator as ProviderFactoryLocatorInstance<TContext>\n this._validateDepsOnRegister = validateDepsOnRegister\n }\n\n get context() {\n return this._context\n }\n\n get logger() {\n return this.context.logger\n }\n\n /**\n * The current registry for the module factory\n */\n get registry(): Readonly<CreatableProviderRegistry> {\n return this._registry\n }\n\n protected get validateDepsOnRegister() {\n return this._validateDepsOnRegister\n }\n\n freeze() {\n this._frozen = true\n }\n\n async getInstance<TProvider extends Provider<ProviderMoniker>>(\n moniker: TProvider['moniker'],\n { start = true, labels }: ProviderFactoryGetInstanceOptions = {},\n ) {\n return assertEx(\n await this.tryGetInstance<TProvider>(moniker, { start, labels }),\n () => `No provider instance for the supplied config moniker [${moniker}]${labels ? ` & labels [${JSON.stringify(labels)}]` : ''} could be created`,\n )\n }\n\n has(moniker: TMonikers[number]): boolean {\n return !!this._registry[moniker]\n }\n\n /**\n * Locates a provider factory that matches the supplied moniker and labels\n * @param moniker The config moniker for the provider\n * @param labels The labels for the provider factory\n * @returns A provider factory that matches the supplied moniker and labels or throws if one is not found\n */\n locate<TProvider extends Provider<ProviderMoniker>>(moniker: TProvider['moniker'], labels?: Labels):\n CreatableProviderFactory<CreatableProviderInstance<TProvider>> | LabeledCreatableProviderFactory<CreatableProviderInstance<TProvider>> {\n return assertEx(\n this.tryLocate<TProvider>(moniker, labels),\n\n () => `No module factory for the supplied config moniker [${moniker}]${labels ? ` & labels [${JSON.stringify(labels)}]` : ''} registered`,\n )\n }\n\n merge(locator: ProviderFactoryLocatorInstance): ProviderFactoryLocatorInstance {\n const registry = { ...this.registry }\n for (const moniker in locator.registry) {\n if (registry[moniker]) {\n registry[moniker].push(...(locator.registry[moniker] ?? []))\n } else {\n registry[moniker] = locator.registry[moniker]\n }\n }\n return new ProviderFactoryLocator(this.context, registry)\n }\n\n /**\n * Registers a single module factory (with optional tags) with the locator\n * @param factory The factory to register\n * @param labels The labels for the module factory\n */\n register(factory: CreatableProviderFactory, labels?: Labels, primary: boolean | ProviderMoniker | ProviderMoniker[] = false): this {\n assertEx(!this._frozen, () => 'Cannot register a module factory after the locator has been frozen')\n if (this.validateDepsOnRegister) {\n const missingDeps = factory.dependencies.filter(dep => !this.registered(dep))\n assertEx(missingDeps.length === 0, () => `Cannot register module factory [${factory.uniqueId.description}] due to missing dependencies: ${missingDeps.join(', ')}`)\n }\n registerCreatableProviderFactory(this._registry, factory, labels, primary)\n return this\n }\n\n /**\n * Registers multiple module factories with the locator\n * @param factories The factories to register\n */\n registerMany(factories: CreatableProviderFactory[]): this {\n for (const factory of factories) {\n this.register(factory)\n }\n return this\n }\n\n registered(moniker: ProviderMoniker) {\n return !!this.registry[moniker] || (this._parent?.registered(moniker) ?? false)\n }\n\n async tryGetInstance<TProvider extends Provider<ProviderMoniker>>(\n moniker: TProvider['moniker'],\n { start = true, labels }: ProviderFactoryGetInstanceOptions = {},\n ) {\n const resolvedParams = { context: this.context } as CreatableProviderInstance<TProvider>['params']\n const factory = this.tryLocate<TProvider>(moniker, labels)\n if (factory) {\n if (this.context.singletons[factory.uniqueId]) {\n return this.context.singletons[factory.uniqueId] as CreatableProviderInstance<TProvider>\n }\n this.logger?.info(`Creating provider instance for moniker [${moniker}]${labels ? ` with labels [${JSON.stringify(labels)}]` : ''} using factory [${factory.uniqueId.description}]`)\n const result = await factory.getInstance(resolvedParams, { start })\n this.context.singletons[factory.uniqueId] = result\n return result\n }\n }\n\n /**\n * Tries to locate a module factory that matches the supplied moniker and labels\n * @param moniker The config moniker for the module\n * @param labels The labels for the module factory\n * @returns A module factory that matches the supplied moniker and labels or undefined\n */\n tryLocate<TProvider extends Provider<ProviderMoniker>>(moniker: TProvider['moniker'], labels?: Labels) {\n const result = (labels\n // Find the first factory that has labels and has all the labels provided\n ? (this._registry[moniker]?.filter(hasLabels).find(factory => hasAllLabels(factory?.labels, labels)) ?? this._registry[moniker]?.[0])\n // Otherwise, return the first factory\n : this._registry[moniker]?.[0]) ?? this._parent?.tryLocate<TProvider>(moniker, labels)\n\n return result as CreatableProviderFactory<CreatableProviderInstance<TProvider>>\n | LabeledCreatableProviderFactory<CreatableProviderInstance<TProvider>> | undefined\n }\n\n validateDependencies(recursive = false) {\n if (recursive) {\n this._parent?.validateDependencies()\n }\n for (const moniker in this.registry) {\n for (const factory of this.registry[moniker] ?? []) {\n const missingDeps = factory.dependencies.filter(dep => !this.registered(dep))\n assertEx(missingDeps.length === 0, () => `Module factory [${factory.uniqueId.description}] is missing dependencies: ${missingDeps.join(', ')}`)\n }\n }\n }\n}\n","import type { Config } from '../config/index.ts'\nimport { ProviderFactoryLocator } from '../CreatableProvider/index.ts'\nimport type { CreatableProviderContext } from '../model/index.ts'\n\n/** @deprecated use getTestProviderContext instead */\nexport function getEmptyProviderContext(config: Config): CreatableProviderContext {\n const singletons = {}\n const caches = {}\n const locator = new ProviderFactoryLocator({\n config, singletons, caches, logger: console,\n })\n return locator.context\n}\n\n/** @deprecated Use getEmptyProviderContext instead */\nexport function getEmptyContext(config: Config) {\n // eslint-disable-next-line @typescript-eslint/no-deprecated\n return getEmptyProviderContext(config)\n}\n","import {\n zodAsFactory, zodIsFactory, zodToFactory,\n} from '@xylabs/sdk-js'\nimport type { z } from 'zod'\n\nimport { HostActorConfigZod } from '../config/index.ts'\nimport { BaseConfigContextZod } from '../model/index.ts'\n\n/** HostActorConfigContext constant. */\nexport const HostActorConfigContext = BaseConfigContextZod.extend({ config: HostActorConfigZod })\n\n/** HostActorConfigContext type. */\nexport type HostActorConfigContext = z.infer<typeof HostActorConfigContext>\n\n/** Type guard that checks if a value is a valid HostActorConfigContext. */\nexport const isHostActorConfigContext = zodIsFactory(HostActorConfigContext)\n/** Converts a value to HostActorConfigContext, throwing if invalid. */\nexport const asHostActorConfigContext = zodAsFactory(HostActorConfigContext, 'asHostActorConfigContext')\n/** toHostActorConfigContext constant. */\nexport const toHostActorConfigContext = zodToFactory(HostActorConfigContext, 'toHostActorConfigContext')\n","import type { Address } from '@xylabs/sdk-js'\nimport { isDefined } from '@xylabs/sdk-js'\nimport { PayloadBuilder } from '@xyo-network/sdk-js'\nimport {\n type ChainStakeIntent, ChainStakeIntentSchema, type Intent,\n} from '@xyo-network/xl1-protocol-lib'\n\n/** createDeclarationIntent constant. */\nexport const createDeclarationIntent = (address: Address, intent: Intent, nbf: number, exp?: number): ChainStakeIntent => {\n const expiration = isDefined(exp) ? exp : nbf + 10_000\n const redeclarationIntent = new PayloadBuilder<ChainStakeIntent>({ schema: ChainStakeIntentSchema }).fields({\n from: address, intent, nbf, exp: expiration,\n }).build()\n return redeclarationIntent\n}\n","import { AsObjectFactory } from '@xylabs/sdk-js'\nimport {\n asSchema, isPayloadOfZodType, type Payload,\n} from '@xyo-network/sdk-js'\nimport { z } from 'zod'\n\nimport {\n TypedDataDomainZod, TypedDataTypesZod, TypedDataValueZod,\n} from '../Types.ts'\n\n/** EIP712DataPayloadFieldsZod constant. */\nexport const EIP712DataPayloadFieldsZod = z.object({\n domain: TypedDataDomainZod,\n types: TypedDataTypesZod,\n values: TypedDataValueZod,\n})\n/** EIP712DataPayloadFields type. */\nexport type EIP712DataPayloadFields = z.infer<typeof EIP712DataPayloadFieldsZod>\n\n/** Schema identifier for EIP712DataPayload payloads. */\nexport const EIP712DataPayloadSchema = asSchema('network.xyo.chains.ethereum.eip712.data', true)\n/** Schema type for EIP712DataPayload payloads. */\nexport type EIP712DataPayloadSchema = typeof EIP712DataPayloadSchema\n\n/** EIP712DataPayload type. */\nexport type EIP712DataPayload = Payload<EIP712DataPayloadFields, EIP712DataPayloadSchema>\n\n/** Type guard that checks if a value is a valid EIP712DataPayload. */\nexport const isEIP712DataPayload = isPayloadOfZodType<EIP712DataPayload>(\n EIP712DataPayloadFieldsZod,\n EIP712DataPayloadSchema,\n)\n\n/** Converts a value to EIP712DataPayload, throwing if invalid. */\nexport const asEIP712DataPayload = AsObjectFactory.create(isEIP712DataPayload)\n","// import type { Signer } from 'ethers/providers'\nimport { z } from 'zod'\n\n/**\n * Typed Data Types\n * Re-exposing the types from ethers for convenience and to ensure\n * we can fix in one place if they change\n */\n\n// export type TypedDataDomain = Parameters<Signer['signTypedData']>[0]\n// export type TypedDataTypes = Parameters<Signer['signTypedData']>[1]\n// export type TypedDataValues = Parameters<Signer['signTypedData']>[2]\n\n/** TypedDataDomainZod constant. */\nexport const TypedDataDomainZod = z.object({\n name: z.string().nullable().optional(),\n version: z.string().nullable().optional(),\n chainId: z.union([z.string(), z.number(), z.bigint()]).nullable().optional(),\n verifyingContract: z.string().nullable().optional(),\n salt: z.union([z.string(), z.instanceof(Uint8Array)]).nullable().optional(),\n})\n/** TypedDataDomain type. */\nexport type TypedDataDomain = z.infer<typeof TypedDataDomainZod>\n\n/** TypedDataFieldZod constant. */\nexport const TypedDataFieldZod = z.object({\n name: z.string(),\n type: z.string(),\n})\n/** TypedDataField type. */\nexport type TypedDataField = z.infer<typeof TypedDataFieldZod>\n\n/** TypedDataTypesZod constant. */\nexport const TypedDataTypesZod = z.record(z.string(), z.array(TypedDataFieldZod))\n/** TypedDataTypes type. */\nexport type TypedDataTypes = z.infer<typeof TypedDataTypesZod>\n\n/** TypedDataValueZod constant. */\nexport const TypedDataValueZod = z.record(z.string(), z.any())\n/** TypedDataValues type. */\nexport type TypedDataValues = z.infer<typeof TypedDataValueZod>\n","import { AsObjectFactory, HashZod } from '@xylabs/sdk-js'\nimport {\n asSchema, isPayloadOfZodType, type Payload,\n} from '@xyo-network/sdk-js'\nimport { z } from 'zod'\n\n/** EIP712SignaturePayloadFieldsZod constant. */\nexport const EIP712SignaturePayloadFieldsZod = z.object({\n address: z.string(),\n hash: HashZod,\n signature: z.string(),\n})\n\n/** EIP712SignaturePayloadFields type. */\nexport type EIP712SignaturePayloadFields = z.infer<typeof EIP712SignaturePayloadFieldsZod>\n\n/** Schema identifier for EIP712SignaturePayload payloads. */\nexport const EIP712SignaturePayloadSchema = asSchema('network.xyo.chains.ethereum.eip712.signature', true)\n/** Schema type for EIP712SignaturePayload payloads. */\nexport type EIP712SignaturePayloadSchema = typeof EIP712SignaturePayloadSchema\n\n/** EIP712SignaturePayload type. */\nexport type EIP712SignaturePayload = Payload<EIP712SignaturePayloadFields, EIP712SignaturePayloadSchema>\n\n/** Type guard that checks if a value is a valid EIP712SignaturePayload. */\nexport const isEIP712SignaturePayload = isPayloadOfZodType<EIP712SignaturePayload>(\n EIP712SignaturePayloadFieldsZod,\n EIP712SignaturePayloadSchema,\n)\n\n/** Converts a value to EIP712SignaturePayload, throwing if invalid. */\nexport const asEIP712SignaturePayload = AsObjectFactory.create(isEIP712SignaturePayload)\n","import { PayloadBuilder } from '@xyo-network/sdk-js'\nimport type { Signer } from 'ethers'\n\nimport {\n type EIP712DataPayload, type EIP712SignaturePayload, EIP712SignaturePayloadSchema,\n} from './Payloads/index.ts'\n\n/** signEIP712Message constant. */\nexport const signEIP712Message = async (signer: Signer, data: EIP712DataPayload): Promise<EIP712SignaturePayload> => {\n const {\n domain, types, values,\n } = data\n const signature = await signer.signTypedData(domain, types, values)\n const hash = await PayloadBuilder.hash(data)\n const address = await signer.getAddress()\n return {\n address, hash, schema: EIP712SignaturePayloadSchema, signature,\n }\n}\n","import { asHash, isUndefined } from '@xylabs/sdk-js'\nimport { PayloadBuilder } from '@xyo-network/sdk-js'\nimport { verifyTypedData } from 'ethers'\n\nimport type { EIP712DataPayload, EIP712SignaturePayload } from './Payloads/index.ts'\n\n/** verifyEIP712Message constant. */\nexport const verifyEIP712Message = async (data: EIP712DataPayload, sig: EIP712SignaturePayload): Promise<boolean> => {\n const {\n address, signature, hash,\n } = sig\n const { schema, ...fields } = data\n const signedHash = asHash(hash)\n // If there is no valid hash in the signature, or it doesn't match the calculated hash, return false\n if (isUndefined(signedHash) || signedHash !== await PayloadBuilder.hash(data)) return false\n // Recover the address from the signature\n const recoveredAddress = verifyTypedData(fields.domain, fields.types, fields.values, signature)\n // Verify it matches the expected address\n return recoveredAddress.toLowerCase() === address.toLowerCase()\n}\n","import type { XL1BlockRangeKey, XL1RangeMultipliers } from '@xyo-network/xl1-protocol-lib'\nimport { asAttoXL1 } from '@xyo-network/xl1-protocol-lib'\n\nimport { XL1_NETWORK_STAKING_GENESIS_PERIOD_END_XL1_BLOCK } from './constants.ts'\n\n/** XL1_NETWORK_STAKING_GENESIS_PERIOD_TOTAL_EARNED_REWARDS constant. */\nexport const XL1_NETWORK_STAKING_GENESIS_PERIOD_TOTAL_EARNED_REWARDS = asAttoXL1(1_343_884_111_859_145_740_576_652n)\n/** XL1_NETWORK_STAKING_GENESIS_PERIOD_TOTAL_BONUS_REWARDS constant. */\nexport const XL1_NETWORK_STAKING_GENESIS_PERIOD_TOTAL_BONUS_REWARDS = asAttoXL1(100_000_000_000_000_000_000_000_000n)\n/** XL1_NETWORK_STAKING_GENESIS_PERIOD_TOTAL_REWARDS constant. */\nexport const XL1_NETWORK_STAKING_GENESIS_PERIOD_TOTAL_REWARDS\n = XL1_NETWORK_STAKING_GENESIS_PERIOD_TOTAL_EARNED_REWARDS + XL1_NETWORK_STAKING_GENESIS_PERIOD_TOTAL_BONUS_REWARDS\n\n/** RewardMultipliers constant. */\nexport const RewardMultipliers: XL1RangeMultipliers = {\n [`0|${XL1_NETWORK_STAKING_GENESIS_PERIOD_END_XL1_BLOCK}` as XL1BlockRangeKey]:\n [XL1_NETWORK_STAKING_GENESIS_PERIOD_TOTAL_BONUS_REWARDS, XL1_NETWORK_STAKING_GENESIS_PERIOD_TOTAL_EARNED_REWARDS],\n}\n","import type { Address } from '@xylabs/sdk-js'\nimport { AsObjectFactory } from '@xylabs/sdk-js'\nimport {\n asSchema, isPayloadOfSchemaType, type Payload,\n} from '@xyo-network/sdk-js'\n\n/** Schema identifier for AddressPair payloads. */\nexport const AddressPairSchema = asSchema('network.xyo.address.pair', true)\n/** Schema type for AddressPair payloads. */\nexport type AddressPairSchema = typeof AddressPairSchema\n\n/** AddressFields interface. */\nexport interface AddressFields {\n addresses: [Address, Address]\n}\n\n/** AddressPairPayload type. */\nexport type AddressPairPayload = Payload<AddressFields, AddressPairSchema>\n\n/**\n * Identity function for determining if an object is an AddressPairPayload\n */\nexport const isAddressPairPayload = isPayloadOfSchemaType<AddressPairPayload>(AddressPairSchema)\n/** Converts a value to AddressPairPayload, throwing if invalid. */\nexport const asAddressPairPayload = AsObjectFactory.create(isAddressPairPayload)\n/** Optionally converts a value to AddressPairPayload if valid. */\nexport const asOptionalAddressPairPayload = AsObjectFactory.createOptional(isAddressPairPayload)\n","import {\n type Address, type Hex, hexToBigInt, toAddress,\n} from '@xylabs/sdk-js'\nimport { span } from '@xylabs/sdk-js'\nimport type { Payload } from '@xyo-network/sdk-js'\nimport type { BaseContext } from '@xyo-network/xl1-protocol-lib'\nimport { isTransfer } from '@xyo-network/xl1-protocol-lib'\n\n/** netBalancesForPayloads constant. */\nexport const netBalancesForPayloads = (context: BaseContext, payloads: Payload[]) => {\n return span('netBalancesForPayloads', () => {\n const balances: Record<Address, bigint> = {}\n for (const payload of payloads) {\n if (isTransfer(payload)) {\n const { from } = payload\n for (let [address, amount] of Object.entries(payload.transfers) as [Address, Hex][]) {\n balances[toAddress(address)] = (balances[toAddress(address)] ?? 0n) + hexToBigInt(amount)\n balances[toAddress(from)] = (balances[toAddress(from)] ?? 0n) - hexToBigInt(amount)\n }\n }\n }\n return balances\n }, context.traceProvider)\n}\n","import {\n type Address, type Hex, hexToBigInt, toAddress,\n} from '@xylabs/sdk-js'\nimport { span } from '@xylabs/sdk-js'\nimport type { Payload } from '@xyo-network/sdk-js'\nimport type { BaseContext } from '@xyo-network/xl1-protocol-lib'\nimport { isTransfer } from '@xyo-network/xl1-protocol-lib'\n\n/** netSchemasForPayloads constant. */\nexport const netSchemasForPayloads = (context: BaseContext, payloads: Payload[]) => {\n return span('netSchemasForPayloads', () => {\n const balances: Record<Address, bigint> = {}\n for (const payload of payloads) {\n if (isTransfer(payload)) {\n const { from } = payload\n for (let [address, amount] of Object.entries(payload.transfers) as [Address, Hex][]) {\n balances[toAddress(address)] = (balances[toAddress(address)] ?? 0n) + hexToBigInt(amount)\n balances[toAddress(from)] = (balances[toAddress(from)] ?? 0n) - hexToBigInt(amount)\n }\n }\n }\n return balances\n }, context.traceProvider)\n}\n","import {\n type Address, type Hex, hexToBigInt,\n} from '@xylabs/sdk-js'\nimport { span } from '@xylabs/sdk-js'\nimport type { Payload } from '@xyo-network/sdk-js'\nimport type { BaseContext } from '@xyo-network/xl1-protocol-lib'\nimport { isTransfer } from '@xyo-network/xl1-protocol-lib'\n\n// the net transfer amounts for the specified accounts only\n/** NetTransfersForPayloads helper function. */\nexport function netTransfersForPayloads(context: BaseContext, payloads: Payload[]): Record<Address, Record<Address, bigint>> {\n return span('netTransfersForPayloads', () => {\n const transfers: Record<Address, Record<Address, bigint>> = {}\n for (const payload of payloads) {\n if (isTransfer(payload)) {\n const { from } = payload\n transfers[from] = transfers[from] ?? {}\n for (let [to, amount] of Object.entries(payload.transfers) as [Address, Hex][]) {\n transfers[to] = transfers[to] ?? {}\n transfers[to][from] = (transfers[to][from] ?? 0n) + hexToBigInt(amount)\n transfers[from][to] = (transfers[from][to] ?? 0n) - hexToBigInt(amount)\n }\n }\n }\n return transfers\n }, context.traceProvider)\n}\n","import type {\n StepIdentity,\n XL1BlockRange,\n} from '@xyo-network/xl1-protocol-lib'\nimport { asXL1BlockNumber, StepSizes } from '@xyo-network/xl1-protocol-lib'\n\n/** BlockRangeSteps helper function. */\nexport function blockRangeSteps(range: XL1BlockRange, steps: number[]): StepIdentity[] {\n const result: StepIdentity[] = []\n for (const step of steps) {\n const stepSize = StepSizes[step]\n // we add stepSize twice to get to the start of the next full step\n const startOfFirstStepCandidate = range[0] - (range[0] % stepSize) + stepSize\n const startOfFirstStep = asXL1BlockNumber(\n startOfFirstStepCandidate,\n { name: 'blockRangeSteps' },\n )\n for (let block = startOfFirstStep; block <= range[1]; block = asXL1BlockNumber(block + stepSize, { name: 'blockRangeSteps' })) {\n result.push({ step, block })\n }\n }\n return result\n}\n","import { isDefined, isFalsy } from '@xylabs/sdk-js'\nimport type {\n BlockViewer,\n HydratedBlock, TimeDurations, XL1BlockNumber, XL1BlockRange, XL1BlockRate,\n} from '@xyo-network/xl1-protocol-lib'\nimport { asXL1BlockRange } from '@xyo-network/xl1-protocol-lib'\n\nimport { rateMultipliers, timeDurations } from './timeHelpers.ts'\n\n/** blockRate constant. */\nexport const blockRate = (\n startBlock: HydratedBlock,\n endBlock: HydratedBlock,\n timeUnit?: keyof TimeDurations,\n): XL1BlockRate => {\n const startingBlock = startBlock[0]\n const endingBlock = endBlock[0]\n\n const heightDifference = endingBlock.block - startingBlock.block\n const timeDifference = endingBlock.$epoch - startingBlock.$epoch\n\n if (timeDifference === 0) {\n throw new Error('Time difference must be greater than 0')\n }\n\n const rate = heightDifference / timeDifference\n\n const timeUnitValue = isDefined(timeUnit) ? timeUnit : 'millis'\n const returnedTimeDifference = isDefined(timeUnit) ? timeDurations(timeDifference)[timeUnit] : timeDifference\n const timePerBlock = returnedTimeDifference / heightDifference\n\n return {\n range: asXL1BlockRange([startingBlock.block, endingBlock.block], true),\n span: heightDifference,\n rate: isDefined(timeUnit) ? rate * rateMultipliers[timeUnit] : rate,\n timeUnit: timeUnitValue,\n timeDifference: returnedTimeDifference,\n timePerBlock,\n }\n}\n\n/** getBlockRateBlocks constant. */\nexport const getBlockRateBlocks = async (\n viewer: BlockViewer,\n startBlockHeight: XL1BlockNumber,\n endBlockHeight: XL1BlockNumber,\n): Promise<{ endingBlock: HydratedBlock; startingBlock: HydratedBlock }> => {\n if (endBlockHeight <= startBlockHeight) {\n console.error('startBlockHeight', startBlockHeight)\n console.error('endBlockHeight', endBlockHeight)\n throw new Error('End block height must be greater than start block height')\n }\n\n const startingBlock = await viewer.blockByNumber(startBlockHeight)\n const endingBlock = await viewer.blockByNumber(endBlockHeight)\n\n if (isFalsy(startingBlock) || isFalsy(endingBlock)) {\n throw new Error('Could not retrieve blocks for speed calculation')\n }\n\n return { startingBlock, endingBlock }\n}\n\n/** calculateBlockRate constant. */\nexport const calculateBlockRate = async (\n viewer: BlockViewer,\n range: XL1BlockRange,\n timeUnit?: keyof TimeDurations,\n): Promise<XL1BlockRate> => {\n const [startBlockHeight, endBlockHeight] = range\n const { startingBlock, endingBlock } = await getBlockRateBlocks(\n viewer,\n startBlockHeight,\n endBlockHeight,\n )\n return blockRate(startingBlock, endingBlock, timeUnit)\n}\n","import { assertEx, isDefined } from '@xylabs/sdk-js'\nimport type { SingleTimeConfig, TimeDurations } from '@xyo-network/xl1-protocol-lib'\n\n/** rateMultipliers constant. */\nexport const rateMultipliers: TimeDurations = {\n millis: 1,\n seconds: 1000,\n minutes: 1000 * 60,\n hours: 1000 * 60 * 60,\n days: 1000 * 60 * 60 * 24,\n weeks: 1000 * 60 * 60 * 24 * 7,\n}\n\n/** timeDurations constant. */\nexport const timeDurations = (timeInMs: number): TimeDurations => ({\n millis: timeInMs,\n seconds: timeInMs / 1000,\n minutes: timeInMs / (1000 * 60),\n hours: timeInMs / (1000 * 60 * 60),\n days: timeInMs / (1000 * 60 * 60 * 24),\n weeks: timeInMs / (1000 * 60 * 60 * 24 * 7),\n})\n\n/** getTimeConfigInMilliseconds constant. */\nexport const getTimeConfigInMilliseconds = (timeConfig: SingleTimeConfig): number => {\n const assertedTimeConfig = assertEx(isDefined(timeConfig) ? timeConfig : undefined, () => 'Time configuration must be provided')\n // Convert all time units to milliseconds\n let totalMilliseconds = 0\n\n if ('years' in assertedTimeConfig) {\n totalMilliseconds += assertedTimeConfig.years * 31_536_000_000 // 1 year = 31,536,000,000 milliseconds\n return totalMilliseconds\n }\n\n if ('months' in assertedTimeConfig) {\n totalMilliseconds += assertedTimeConfig.months * 2_592_000_000 // 1 month = 2,592,000,000 milliseconds\n return totalMilliseconds\n }\n\n if ('weeks' in assertedTimeConfig) {\n totalMilliseconds += assertedTimeConfig.weeks * 604_800_000 // 1 week = 604,800,000 milliseconds\n return totalMilliseconds\n }\n\n if ('days' in assertedTimeConfig) {\n totalMilliseconds += assertedTimeConfig.days * 86_400_000 // 1 day = 86,400,000 milliseconds\n return totalMilliseconds\n }\n\n if ('hours' in assertedTimeConfig) {\n totalMilliseconds += assertedTimeConfig.hours * 3_600_000 // 1 hour = 3,600,000 milliseconds\n return totalMilliseconds\n }\n\n if ('minutes' in assertedTimeConfig) {\n totalMilliseconds += assertedTimeConfig.minutes * 60_000 // 1 minute = 60,000 milliseconds\n return totalMilliseconds\n }\n\n return totalMilliseconds\n}\n","import { assertEx } from '@xylabs/sdk-js'\nimport type {\n BlockViewer,\n TimeDurations, XL1BlockNumber, XL1BlockRate,\n} from '@xyo-network/xl1-protocol-lib'\nimport {\n asXL1BlockRange, isValidStep, StepSizes,\n} from '@xyo-network/xl1-protocol-lib'\n\nimport { calculateBlockRate } from './blockRate.ts'\n\n/** stepRate constant. */\nexport const stepRate = async (\n viewer: BlockViewer,\n start: XL1BlockNumber,\n step: typeof StepSizes[number],\n count = 1,\n timeUnit?: keyof TimeDurations,\n): Promise<XL1BlockRate> => {\n const end = start + step * count\n const range = asXL1BlockRange([start, end], true)\n\n return await calculateBlockRate(viewer, range, timeUnit)\n}\n\n/** calculateStepSizeRate constant. */\nexport const calculateStepSizeRate = async (\n viewer: BlockViewer,\n start: XL1BlockNumber,\n stepIndex: number,\n count = 1,\n timeUnit?: keyof TimeDurations,\n) => {\n assertEx(isValidStep(stepIndex), () => `Invalid step index: ${stepIndex}`)\n const step = StepSizes[stepIndex]\n return await stepRate(viewer, start, step, count, timeUnit)\n}\n","import {\n assertEx, isDefined, isDefinedNotNull,\n} from '@xylabs/sdk-js'\nimport type {\n BlockBoundWitness,\n BlockViewer,\n SingleTimeConfig,\n TimeDurations,\n XL1BlockNumber,\n XL1BlockRate,\n} from '@xyo-network/xl1-protocol-lib'\nimport { asXL1BlockNumber, asXL1BlockRange } from '@xyo-network/xl1-protocol-lib'\n\nimport { calculateBlockRate } from './blockRate.ts'\nimport { getTimeConfigInMilliseconds } from './timeHelpers.ts'\n\n/** DEFAULT_TOLERANCE_MS constant. */\nexport const DEFAULT_TOLERANCE_MS = 30_000 // 30 seconds\n/** DEFAULT_MAX_ATTEMPTS constant. */\nexport const DEFAULT_MAX_ATTEMPTS = 10\n\n/** calculateTimeRate constant. */\nexport const calculateTimeRate = async (\n viewer: BlockViewer,\n timeConfig: SingleTimeConfig,\n startBlockNumber?: XL1BlockNumber,\n timeUnit?: keyof TimeDurations,\n // default tolerance of 30 seconds to cut down on iterations\n toleranceMs = DEFAULT_TOLERANCE_MS,\n // maximum recursive attempts to prevent infinite loops\n maxAttempts = DEFAULT_MAX_ATTEMPTS,\n): Promise<XL1BlockRate> => {\n // check the time config has only one key\n assertEx(Object.keys(timeConfig ?? {}).length === 1, () => 'Only one time unit should be specified in timeConfig')\n\n // resolve the starting block\n const startBlock = isDefinedNotNull(startBlockNumber) ? await viewer.blockByNumber(startBlockNumber) : null\n const resolvedStartBlock = isDefinedNotNull(startBlock)\n ? startBlock[0]\n : (await viewer.currentBlock())[0]\n\n const timeInMilliseconds = getTimeConfigInMilliseconds(timeConfig)\n assertEx(timeInMilliseconds > 0, () => 'Time duration must be greater than zero')\n\n // Estimate blocks per milliseconds (bpm) based on average block time\n const blocksPerMillisecondRate = 1 / (12 * 1000) // Approximate average block time of 12 seconds\n\n // Calculate the number of blocks in the given time duration\n const initialBlocksInDuration = Math.floor(blocksPerMillisecondRate * timeInMilliseconds)\n\n // Recursively find the proper end block\n const endBlockNumber = await findEndBlockRecursive(\n viewer,\n resolvedStartBlock,\n timeInMilliseconds,\n initialBlocksInDuration,\n toleranceMs,\n maxAttempts,\n )\n\n return await calculateBlockRate(\n viewer,\n asXL1BlockRange([endBlockNumber, resolvedStartBlock.block], true),\n timeUnit,\n )\n}\n\nconst findEndBlockRecursive = async (\n viewer: BlockViewer,\n startBlock: BlockBoundWitness,\n targetTimeMs: number,\n estimatedBlocksBack: number,\n toleranceMs: number,\n attemptsRemaining: number,\n): Promise<XL1BlockNumber> => {\n console.log(`Attempts remaining: ${attemptsRemaining}, Estimated blocks back: ${estimatedBlocksBack}`)\n assertEx(attemptsRemaining >= 0, () => 'Maximum attempts reached while searching for end block')\n\n const startBlockEpoch = startBlock.$epoch\n const estimatedEndBlockNumber = asXL1BlockNumber(startBlock.block - estimatedBlocksBack, true)\n if (estimatedEndBlockNumber < 0) {\n throw new Error('Estimated end block number is less than zero')\n }\n\n // Fetch the estimated end block\n const endBlock = await viewer.blockByNumber(estimatedEndBlockNumber)\n const resolvedEndBlock = assertEx(\n isDefined(endBlock?.[0]) ? endBlock[0] : undefined,\n () => `Could not retrieve block ${estimatedEndBlockNumber} for time rate calculation`,\n )\n\n const endBlockEpoch = resolvedEndBlock.$epoch\n const actualTimeDifference = startBlockEpoch - endBlockEpoch\n\n // Check if we're within tolerance\n const timeDelta = Math.abs(actualTimeDifference - targetTimeMs)\n if (timeDelta <= toleranceMs) {\n return resolvedEndBlock.block\n }\n\n // Calculate adjustment factor and recursively search\n let adjustedBlocksBack: number\n if (actualTimeDifference < targetTimeMs) {\n // Need to go further back\n const adjustmentFactor = targetTimeMs / actualTimeDifference\n adjustedBlocksBack = Math.floor(estimatedBlocksBack * adjustmentFactor)\n } else {\n // Need to come forward\n const adjustmentFactor = actualTimeDifference / targetTimeMs\n adjustedBlocksBack = Math.floor(estimatedBlocksBack / adjustmentFactor)\n }\n\n return await findEndBlockRecursive(\n viewer,\n startBlock,\n targetTimeMs,\n adjustedBlocksBack,\n toleranceMs,\n attemptsRemaining - 1,\n )\n}\n","import {\n assertEx, type Hash, isDefined, isNull,\n spanRootAsync,\n} from '@xylabs/sdk-js'\nimport type {\n BaseContext, BlockViewer, SignedHydratedBlockWithHashMeta,\n} from '@xyo-network/xl1-protocol-lib'\n\n/**\n * Constructs a bounded, contiguous canonical chain ending at the current head.\n * @param blockViewer The BlockViewer to fetch blocks from\n * @param maxWindowSize The maximum size of the windowed chain\n * @param previousChain An optional previous chain to build upon\n * @returns A promise that resolves to the windowed chain of blocks\n */\nexport async function getWindowedChain(\n context: BaseContext,\n blockViewer: BlockViewer,\n maxWindowSize: number,\n previousChain: SignedHydratedBlockWithHashMeta[] = [],\n):\nPromise<SignedHydratedBlockWithHashMeta[]> {\n return await spanRootAsync('getWindowedChain', async () => {\n const newChain: SignedHydratedBlockWithHashMeta[] = []\n const previousChainByHash = new Map<Hash, SignedHydratedBlockWithHashMeta>(previousChain.map(block => [block[0]._hash, block]))\n const head = await blockViewer.currentBlock()\n let currentBlock: SignedHydratedBlockWithHashMeta | null = head\n console.log('[getWindowedChain] Current Block:', currentBlock?.[0]._hash)\n while (currentBlock !== null && newChain.length < maxWindowSize) {\n const currentBlockNumber = currentBlock[0].block\n const nextBlock = newChain[0]\n if (isDefined(nextBlock)) {\n const nextBlockNumber = nextBlock[0].block\n assertEx(\n currentBlockNumber === nextBlockNumber - 1,\n () => `[getWindowedChain] Non-monotonic block sequence detected: current=${currentBlockNumber}, next=${nextBlockNumber}`,\n )\n }\n assertEx(\n currentBlockNumber <= head[0].block,\n () => `[getWindowedChain] Current block number (${currentBlockNumber}) exceeds head block number (${head[0].block})`,\n )\n newChain.unshift(currentBlock)\n const previousBlockHash: Hash | null = currentBlock[0].previous\n if (isNull(previousBlockHash)) break\n currentBlock = previousChainByHash.get(previousBlockHash) ?? await blockViewer.blockByHash(previousBlockHash)\n }\n return newChain\n }, context)\n}\n","import type { Address } from '@xylabs/sdk-js'\nimport {\n assertEx, exists, toAddress,\n} from '@xylabs/sdk-js'\nimport type {\n BlockViewer, CachingContext, StepIdentity,\n} from '@xyo-network/xl1-protocol-lib'\nimport {\n asTransfer, isTransfer, XYO_STEP_REWARD_ADDRESS,\n} from '@xyo-network/xl1-protocol-lib'\n\nimport { mergeTransfers } from '../../payload/index.ts'\nimport { stepTransferIndex } from '../../step/index.ts'\nimport { stepRewardBlock } from './stepRewardBlock.ts'\n\n/** ChainStepRewardAddress helper function. */\nexport async function chainStepRewardAddress(context: CachingContext, blockViewer: BlockViewer, { block, step }: StepIdentity): Promise<Address> {\n const hydratedBlock = await stepRewardBlock(context, blockViewer, { block, step })\n const [transferIndex, transferCount] = stepTransferIndex(block, step)\n const [blockBw, payloads] = hydratedBlock\n\n const transfersFromPool = payloads.filter(isTransfer).map(p => asTransfer(p)).filter(exists).filter(t => t.from === XYO_STEP_REWARD_ADDRESS)\n const fromEntries = Object.entries(mergeTransfers(transfersFromPool)[XYO_STEP_REWARD_ADDRESS])\n const sortedTransferAmounts = (fromEntries).toSorted(([,a], [,b]) => a > b ? -1 : a < b ? 1 : 0)\n assertEx(\n sortedTransferAmounts.length === transferCount,\n () => `Step Transfers mismatch ${block} (${blockBw._hash}) [${sortedTransferAmounts.length} - ${transferCount}]`,\n )\n return toAddress(sortedTransferAmounts[transferIndex][0])\n}\n","import type { Address } from '@xylabs/sdk-js'\nimport { hexToBigInt, toAddress } from '@xylabs/sdk-js'\nimport type { Transfer } from '@xyo-network/xl1-protocol-lib'\n\n/** MergeTransfers helper function. */\nexport function mergeTransfers(transfers: Transfer[]): Record<Address, Record<Address, bigint>> {\n const result: Record<Address, Record<Address, bigint>> = {}\n for (const transfer of transfers) {\n result[transfer.from] = result[transfer.from] ?? {}\n for (const [to, value] of Object.entries(transfer.transfers)) {\n const typedTo = toAddress(to)\n result[transfer.from][typedTo] = (result[transfer.from][typedTo] ?? 0n) + (hexToBigInt(value))\n }\n }\n return result\n}\n","import { type Address, toAddress } from '@xylabs/sdk-js'\nimport { type StepIdentity, StepSizes } from '@xyo-network/xl1-protocol-lib'\nimport { keccak256 } from 'ethers'\n\n/** CompletedStepRewardAddress helper function. */\nexport function completedStepRewardAddress({ block, step }: StepIdentity): Address {\n const resolvedStepSize = step < StepSizes.length ? StepSizes[step] : step\n const addressKey = new TextEncoder().encode(`${block}|${resolvedStepSize}`)\n return toAddress(keccak256(addressKey).slice(-40), { prefix: false })\n}\n","import { type Address, toAddress } from '@xylabs/sdk-js'\nimport { isDefined } from '@xylabs/sdk-js'\nimport { keccak256 } from 'ethers'\n\n/** DerivedReceiveAddress helper function. */\nexport function derivedReceiveAddress(address: Address, scope?: string): Address {\n const addressKey = new TextEncoder().encode(isDefined(scope) ? `${scope}|${address}` : address)\n return toAddress(keccak256(addressKey).slice(-40), { prefix: false })\n}\n","import type { StepIdentity, XL1BlockRange } from '@xyo-network/xl1-protocol-lib'\nimport { asXL1BlockRange, StepSizes } from '@xyo-network/xl1-protocol-lib'\n\n/** StepBlockRange helper function. */\nexport function stepBlockRange({ block, step }: StepIdentity): XL1BlockRange {\n const stepSize = StepSizes[step]\n const start = block - stepSize\n return asXL1BlockRange([start, start + stepSize - 1], { name: 'stepBlockRange' })\n}\n","import { assertEx } from '@xylabs/sdk-js'\nimport { StepSizes } from '@xyo-network/xl1-protocol-lib'\n\n/** StepTransferIndex helper function. */\nexport function stepTransferIndex(block: number, step: number) {\n let rewardTransferCount = 0\n let rewardTransferIndex = -1\n for (let i = 3; i < StepSizes.length; i++) {\n const stepSize = StepSizes[i]\n if (block % stepSize === 0) {\n if (stepSize === StepSizes[step]) {\n rewardTransferIndex = rewardTransferCount\n }\n rewardTransferCount++\n }\n }\n assertEx(rewardTransferIndex >= 0, () => `Could not find step size for step ${step} at block ${block}`)\n return [rewardTransferIndex, rewardTransferCount]\n}\n","import { assertEx } from '@xylabs/sdk-js'\nimport type {\n BlockViewer,\n CachingContext,\n HydratedBlockWithHashMeta, StepIdentity,\n} from '@xyo-network/xl1-protocol-lib'\nimport { StepSizes } from '@xyo-network/xl1-protocol-lib'\n\n/** StepRewardBlock helper function. */\nexport async function stepRewardBlock(context: CachingContext, blockViewer: BlockViewer, { block, step }: StepIdentity): Promise<HydratedBlockWithHashMeta> {\n assertEx((block % StepSizes[step]) === 0, () => `Block must be the first block of the step [${StepSizes[step]}], got ${block}`)\n return assertEx(await blockViewer.blockByNumber(block), () => `Could not find block for block number ${block}`)\n}\n","import { assertEx, isDefined } from '@xylabs/sdk-js'\nimport type {\n AttoXL1, BlockViewer, CachingContext, StepIdentity, XL1BlockRange, XL1RangeMultipliers,\n} from '@xyo-network/xl1-protocol-lib'\nimport {\n asAttoXL1, asXL1BlockRange, isTransfer,\n XYO_STEP_REWARD_ADDRESS,\n} from '@xyo-network/xl1-protocol-lib'\n\nimport { withContextCacheResponse } from '../../../ChainContextHelpers.ts'\nimport { netTransfersForPayloads } from '../../../payloads/index.ts'\nimport { stepBlockRange, stepTransferIndex } from '../../step/index.ts'\nimport { stepRewardBlock } from './stepRewardBlock.ts'\n\nfunction stepInRange(step: StepIdentity, range: XL1BlockRange): boolean {\n const stepRange = stepBlockRange(step)\n return ((stepRange[0] >= range[0]) && (stepRange[1] <= range[1]))\n}\n\n/** StepRewardTotal helper function. */\nexport async function stepRewardTotal(context: CachingContext, blockViewer: BlockViewer, { block, step }: StepIdentity, multipliers: XL1RangeMultipliers): Promise<AttoXL1> {\n const cacheKey = `${block}|${step}|${isDefined(multipliers)}`\n return await withContextCacheResponse(context, 'stepRewardTotal', cacheKey, async () => {\n const [blockBw, payloads] = await stepRewardBlock(context, blockViewer, { block, step })\n assertEx(blockBw.block === block, () => `Block Mismatch: expected ${block}, got ${blockBw.block}`)\n const [transferIndex] = stepTransferIndex(block, step)\n const stepTransfer = assertEx(\n payloads.find(p => isTransfer(p) && p.from === XYO_STEP_REWARD_ADDRESS),\n () => `No step transfer found for step ${step} at block ${block} (${blockBw._hash})`,\n )\n const rewards = assertEx(\n netTransfersForPayloads(context, [stepTransfer])[XYO_STEP_REWARD_ADDRESS],\n () => `No rewards found for step reward address ${XYO_STEP_REWARD_ADDRESS} at block ${block} (${blockBw._hash})`,\n )\n const sortedTransfers = (Object.entries(rewards)).toSorted(([,a], [,b]) => a > b ? -1 : a < b ? 1 : 0)\n let result = asAttoXL1(sortedTransfers[transferIndex][1] * -1n)\n for (const [rangeKey, [numerator, denominator]] of Object.entries(multipliers)) {\n const rangeParts = rangeKey.split('|').map(Number)\n const range: XL1BlockRange = asXL1BlockRange([rangeParts[0], rangeParts[1]], { name: 'stepRewardTotal' })\n if (stepInRange({ block, step }, range)) {\n result = asAttoXL1(result + result * numerator / denominator)\n }\n }\n return result\n })\n}\n","import type {\n AttoXL1, BlockViewer, CachingContext, StepIdentity, XL1BlockRange,\n XL1RangeMultipliers,\n} from '@xyo-network/xl1-protocol-lib'\nimport { asAttoXL1, asXL1BlockRange } from '@xyo-network/xl1-protocol-lib'\n\nimport { XL1_NETWORK_STAKING_GENESIS_PERIOD_END_XL1_BLOCK } from '../../../constants.ts'\nimport { blockRangeSteps } from '../../block/index.ts'\nimport { stepRewardTotal } from './stepRewardTotal.ts'\n\n/** StepsRewardTotalGenesisPeriod helper function. */\nexport async function stepsRewardTotalGenesisPeriod(context: CachingContext, blockViewer: BlockViewer, multipliers: XL1RangeMultipliers, stepSizes?: number[]): Promise<AttoXL1> {\n const range = asXL1BlockRange([0, XL1_NETWORK_STAKING_GENESIS_PERIOD_END_XL1_BLOCK], { name: 'stepsRewardTotalGenesisPeriod' })\n return await stepsRewardTotalRange(context, blockViewer, range, stepSizes, multipliers)\n}\n\n/** StepsRewardTotalRange helper function. */\nexport async function stepsRewardTotalRange(\n context: CachingContext,\n blockViewer: BlockViewer,\n range: XL1BlockRange,\n stepSizes: number[] = [3, 4, 5, 6],\n multipliers: XL1RangeMultipliers,\n): Promise<AttoXL1> {\n const steps = blockRangeSteps(range, stepSizes)\n return await stepsRewardTotal(context, blockViewer, steps, multipliers)\n}\n\n/** StepsRewardTotal helper function. */\nexport async function stepsRewardTotal(context: CachingContext, blockViewer: BlockViewer, steps: StepIdentity[], multipliers: XL1RangeMultipliers): Promise<AttoXL1> {\n let totalRewards = 0n\n for (const step of steps) {\n const stepTotal = await stepRewardTotal(context, blockViewer, step, multipliers)\n totalRewards += stepTotal\n }\n return asAttoXL1(totalRewards)\n}\n","import { assertEx, isArray } from '@xylabs/sdk-js'\nimport type {\n BlockNumber, BlockViewer, CachingContext, XL1BlockNumber,\n} from '@xyo-network/xl1-protocol-lib'\nimport {\n asBlockNumber, asTimePayload, isTimePayload,\n} from '@xyo-network/xl1-protocol-lib'\n\nimport { withContextCacheResponse } from '../../../ChainContextHelpers.ts'\n\nconst functionName = 'externalBlockNumberFromXL1BlockNumber' as const\n\n/** ExternalBlockNumberFromXL1BlockNumber helper function. */\nexport async function externalBlockNumberFromXL1BlockNumber(\n context: CachingContext,\n blockViewer: BlockViewer,\n xl1BlockNumber: XL1BlockNumber,\n externalTimeName: 'ethereum' | 'epoch',\n externalGenesisTime?: BlockNumber,\n): Promise<BlockNumber> {\n const cacheKey = `${xl1BlockNumber}-${externalTimeName}-${externalGenesisTime ?? 'default'}`\n return await withContextCacheResponse(context, functionName, cacheKey, async () => {\n const [, payloads = []] = await blockViewer.blockByNumber(xl1BlockNumber) ?? []\n assertEx(isArray(payloads))\n const timePayload = asTimePayload(payloads.find(isTimePayload))\n // the default here is the block number we know where the xl1 chain started running (first external staking - 1)\n return asBlockNumber(\n timePayload?.[externalTimeName] ?? externalGenesisTime ?? 23_372_716,\n { name: functionName },\n ) // default is xl1 mainnet genesis time\n })\n}\n","import type {\n BlockRange, BlockViewer, CachingContext, XL1BlockRange,\n} from '@xyo-network/xl1-protocol-lib'\n\nimport { externalBlockNumberFromXL1BlockNumber } from './externalBlockNumberFromXL1BlockNumber.ts'\n\n/** ExternalBlockRangeFromXL1BlockRange helper function. */\nexport async function externalBlockRangeFromXL1BlockRange(\n context: CachingContext,\n blockViewer: BlockViewer,\n xl1BlockRange: XL1BlockRange,\n externalTimeName: 'ethereum' = 'ethereum',\n): Promise<BlockRange> {\n const start = await externalBlockNumberFromXL1BlockNumber(context, blockViewer, xl1BlockRange[0], externalTimeName)\n const end = await externalBlockNumberFromXL1BlockNumber(context, blockViewer, xl1BlockRange[1], externalTimeName)\n return [start, end]\n}\n","import type {\n BlockRange, BlockViewer, CachingContext, StepIdentity,\n} from '@xyo-network/xl1-protocol-lib'\n\nimport { toStepIdentityString } from '../../../block/index.ts'\nimport { withContextCacheResponse } from '../../../ChainContextHelpers.ts'\nimport { stepBlockRange } from '../../step/index.ts'\nimport { externalBlockRangeFromXL1BlockRange } from './externalBlockRangeFromXL1BlockRange.ts'\n\n/** ExternalBlockRangeFromStep helper function. */\nexport async function externalBlockRangeFromStep(\n context: CachingContext,\n blockViewer: BlockViewer,\n stepIdentity: StepIdentity,\n): Promise<BlockRange> {\n const cacheKey = toStepIdentityString(stepIdentity)\n return await withContextCacheResponse(context, 'externalBlockRangeFromStep', cacheKey, async () => {\n const xl1BlockRange = stepBlockRange(stepIdentity)\n return await externalBlockRangeFromXL1BlockRange(context, blockViewer, xl1BlockRange)\n })\n}\n","import type { Hash } from '@xylabs/sdk-js'\nimport { isUndefined } from '@xylabs/sdk-js'\nimport type { Payload, WithHashMeta } from '@xyo-network/sdk-js'\nimport { isAnyPayload, PayloadBuilder } from '@xyo-network/sdk-js'\nimport type { DataLakeViewer } from '@xyo-network/xl1-protocol-lib'\n\n/** AddDataLakePayloadsToPayloads helper function. */\nexport async function addDataLakePayloadsToPayloads<T extends WithHashMeta<Payload>>(\n hashes: Hash[],\n payloads: T[],\n dataLakeViewer?: DataLakeViewer,\n): Promise<[\n /* Updated payloads with hash metadata */\n T[],\n /* Hashes of the newly added payloads */\n Hash[],\n]> {\n if (isUndefined(dataLakeViewer)) return [payloads, []]\n const missingPayloadHashes = hashes.filter(hash => !payloads.some(p => p._hash === hash))\n const payloadsFromDataLake = await PayloadBuilder.addHashMeta(\n await PayloadBuilder.addHashMeta((await dataLakeViewer.get(missingPayloadHashes)).filter(isAnyPayload)),\n )\n return [[...payloads, ...payloadsFromDataLake] as T[], payloadsFromDataLake.map(p => p._hash)]\n}\n","import type { Hash } from '@xylabs/sdk-js'\nimport type { DataLakeViewer, HydratedBoundWitnessWithHashMeta } from '@xyo-network/xl1-protocol-lib'\n\nimport { addDataLakePayloadsToPayloads } from './addDataLakePayloadsToPayloads.ts'\n\n/** AddDataLakePayloads helper function. */\nexport async function addDataLakePayloads<T extends HydratedBoundWitnessWithHashMeta>(\n [boundWitness, payloads]: T,\n dataLakeViewer?: DataLakeViewer,\n): Promise<[T, Hash[]]> {\n const [updatedPayloads, foundHashes] = await addDataLakePayloadsToPayloads(boundWitness.payload_hashes, payloads, dataLakeViewer)\n return [\n [\n boundWitness,\n updatedPayloads,\n ] as T,\n foundHashes]\n}\n","import { isDefined } from '@xylabs/sdk-js'\nimport type { SyncIterableMap } from '@xyo-network/xl1-protocol-lib'\n\n/** MapToMapType helper function. */\nexport function mapToMapType<K extends {}, V extends {}>(map: Map<K, V> | SyncIterableMap<K, V>): SyncIterableMap<K, V> {\n return {\n get: (key: K) => map.get(key),\n has: (key: K) => map.has(key),\n set: (key: K, value: V) => {\n map.set(key, value)\n },\n setMany: (entries: [K, V][]) => {\n for (const [key, value] of entries) {\n map.set(key, value)\n }\n },\n delete: (key: K) => map.delete(key),\n clear: () => map.clear(),\n getMany: (keys: K[]) => {\n const result: V[] = []\n for (const key of keys) {\n const value = map.get(key)\n if (isDefined(value)) {\n result.push(value)\n }\n }\n return result\n },\n [Symbol.iterator]: function* (): Iterator<[K, V]> {\n for (const entry of map) {\n yield entry\n }\n },\n }\n}\n","import type { Hash } from '@xylabs/sdk-js'\nimport { isDefined } from '@xylabs/sdk-js'\nimport type {\n ReadArchivist, ReadWriteArchivist,\n WithStorageMeta,\n} from '@xyo-network/sdk-js'\nimport type { PayloadMap, PayloadMapRead } from '@xyo-network/xl1-protocol-lib'\n\nimport { isReadArchivist, isReadWriteArchivist } from '../block/index.ts'\n\n/** ReadPayloadMapFromStore helper function. */\nexport function readPayloadMapFromStore(store: ReadArchivist | PayloadMapRead): PayloadMapRead {\n if (isReadArchivist(store)) {\n return {\n get: async (hash: Hash) => {\n return (await store.get([hash]))[0]\n },\n getMany: async (hashes: Hash[]) => {\n return (await store.get(hashes))\n },\n has: async (hash: Hash) => {\n return isDefined((await store.get([hash]))[0])\n },\n }\n }\n return store\n}\n\n/** PayloadMapFromStore helper function. */\nexport function payloadMapFromStore(store: ReadWriteArchivist | PayloadMap): PayloadMap {\n if (isReadWriteArchivist(store)) {\n return {\n get: async (hash: Hash) => {\n return (await store.get([hash]))[0]\n },\n getMany: async (hashes: Hash[]) => {\n return (await store.get(hashes))\n },\n has: async (hash: Hash) => {\n return isDefined((await store.get([hash]))[0])\n },\n clear: async () => {\n return await store.clear()\n },\n delete: async (id: Hash) => {\n await store.delete([id])\n return true\n },\n set: async (_id: Hash, data: WithStorageMeta) => {\n await store.insert([data])\n },\n setMany: async (entries: [Hash, WithStorageMeta][]) => {\n await store.insert(entries.map(e => e[1]))\n },\n } satisfies PayloadMap<WithStorageMeta>\n }\n return store\n}\n","import {\n asAttoXL1, XL1_REWARDS_BLOCKS_PER_STEP, XL1_REWARDS_CREATOR_REWARD,\n XL1_REWARDS_MIN_BLOCK_REWARD, XL1_REWARDS_STARTING_REWARD, XL1_REWARDS_STEP_FACTOR_DENOMINATOR,\n XL1_REWARDS_STEP_FACTOR_NUMERATOR, type XL1BlockNumber,\n} from '@xyo-network/xl1-protocol-lib'\n\n/** RewardFromBlockNumber helper function. */\nexport function rewardFromBlockNumber(blockNumber: XL1BlockNumber) {\n if (blockNumber === 0) {\n return XL1_REWARDS_CREATOR_REWARD\n }\n const step = Math.floor((blockNumber + XL1_REWARDS_BLOCKS_PER_STEP) / XL1_REWARDS_BLOCKS_PER_STEP)\n const stepExp = BigInt(step - 1)\n const poweredNumerator = stepExp > 0 ? XL1_REWARDS_STEP_FACTOR_NUMERATOR ** stepExp : 1n\n const poweredDenominator = stepExp > 0 ? XL1_REWARDS_STEP_FACTOR_DENOMINATOR ** stepExp : 1n\n let reward = (XL1_REWARDS_STARTING_REWARD * poweredNumerator) / poweredDenominator\n // eslint-disable-next-line unicorn/prefer-math-min-max\n return asAttoXL1((reward < XL1_REWARDS_MIN_BLOCK_REWARD) ? XL1_REWARDS_MIN_BLOCK_REWARD : reward)\n}\n","import type {\n BlockViewer, CachingContext, StakeEventsViewer, StepIdentity,\n} from '@xyo-network/xl1-protocol-lib'\nimport { XYO_NETWORK_STAKING_ADDRESS } from '@xyo-network/xl1-protocol-lib'\n\nimport { externalBlockRangeFromStep } from '../chain/index.ts'\nimport { weightedStakeForRangeByPosition } from '../stake/index.ts'\n\n/** NetworkStakeStepRewardPositionWeight helper function. */\nexport async function networkStakeStepRewardPositionWeight(\n context: CachingContext,\n blockViewer: BlockViewer,\n stakeEventsViewer: StakeEventsViewer,\n stepContext: StepIdentity,\n position: number,\n): Promise<bigint> {\n const result = await weightedStakeForRangeByPosition(\n context,\n blockViewer,\n stakeEventsViewer,\n await externalBlockRangeFromStep(context, blockViewer, stepContext),\n XYO_NETWORK_STAKING_ADDRESS,\n position,\n )\n return result\n}\n","import type { Address } from '@xylabs/sdk-js'\nimport { isDefined } from '@xylabs/sdk-js'\nimport type { StakeEventsViewer } from '@xyo-network/xl1-protocol-lib'\n\nimport { mergedAddRemoveStakeEventsByStaker } from './mergedAddRemoveStakeEventsByStaker.ts'\n\n/** ActiveStakeAtTimeByAddress helper function. */\nexport async function activeStakeAtTimeByAddress(\n chain: StakeEventsViewer,\n staked: Address,\n time: number,\n staker?: Address,\n): Promise<bigint> {\n const stakeEvents = (await mergedAddRemoveStakeEventsByStaker(chain, [0, time], staked, staker)).toSorted((a, b) => a.time - b.time)\n let result = 0n\n for (const event of stakeEvents) {\n if (event.time > time) break\n if (event.args.staked !== staked) continue\n if (isDefined(staker) && (event.args.staker !== staker)) continue\n if (event.name === 'StakeAdded') {\n result += event.args.amount\n } else if (event.name === 'StakeRemoved') {\n result -= event.args.amount\n }\n }\n return result\n}\n","import type { Address } from '@xylabs/sdk-js'\nimport type { StakeEvent, StakeEventsViewer } from '@xyo-network/xl1-protocol-lib'\n\n/** MergedAddRemoveStakeEventsByStaker helper function. */\nexport async function mergedAddRemoveStakeEventsByStaker(\n chainEvents: StakeEventsViewer,\n range: [number, number],\n staked: Address,\n staker?: Address,\n): Promise<(StakeEvent<'StakeAdded'> | StakeEvent<'StakeRemoved'>)[]> {\n const [addedEvents, removedEvents] = await Promise.all([\n chainEvents.stakeEvents(range, { name: 'StakeAdded', args: { staked, staker } }),\n chainEvents.stakeEvents(range, { name: 'StakeRemoved', args: { staked, staker } }),\n ])\n const result = [...addedEvents, ...removedEvents].toSorted((a, b) => a.time - b.time)\n return result\n}\n","import { isUndefined } from '@xylabs/sdk-js'\nimport type { StakeEventsViewer } from '@xyo-network/xl1-protocol-lib'\n\nimport { mergedAddRemoveStakeEventsByPosition } from './mergedAddRemoveStakeEventsByPosition.ts'\n\n/** ActiveStakeAtTimeByPosition helper function. */\nexport async function activeStakeAtTimeByPosition(\n chainStakeEvents: StakeEventsViewer,\n externalTime: number,\n position?: number,\n): Promise<bigint> {\n const stakeEvents = (await mergedAddRemoveStakeEventsByPosition(chainStakeEvents, [0, externalTime], position)).toSorted((a, b) => a.time - b.time)\n let result = 0n\n for (const event of stakeEvents) {\n if (event.time > externalTime) break\n if (isUndefined(position) || position === Number(event.args.id)) {\n if (event.name === 'StakeAdded') {\n result += event.args.amount\n } else if (event.name === 'StakeRemoved') {\n result -= event.args.amount\n }\n }\n }\n return result\n}\n","import type { StakeEvent, StakeEventsViewer } from '@xyo-network/xl1-protocol-lib'\n\n/** MergedAddRemoveStakeEventsByPosition helper function. */\nexport async function mergedAddRemoveStakeEventsByPosition(\n chainEvents: StakeEventsViewer,\n range: [number, number],\n position?: number,\n): Promise<(StakeEvent<'StakeAdded'> | StakeEvent<'StakeRemoved'>)[]> {\n const [addedEvents, removedEvents] = await Promise.all([\n chainEvents.stakeEvents(range, { name: 'StakeAdded', args: { id: position } }),\n chainEvents.stakeEvents(range, { name: 'StakeRemoved', args: { id: position } }),\n ])\n const result = [...addedEvents, ...removedEvents].toSorted((a, b) => a.time - b.time)\n return result\n}\n","import {\n type Address,\n toAddress,\n} from '@xylabs/sdk-js'\nimport type { StakeEventsViewer } from '@xyo-network/xl1-protocol-lib'\n\nimport { mergedAddRemoveStakeEventsByStaker } from './mergedAddRemoveStakeEventsByStaker.ts'\n\n/** AllStakersForRange helper function. */\nexport async function allStakersForRange(\n chain: StakeEventsViewer,\n externalRange: [number, number],\n staked: Address,\n): Promise<Record<Address, bigint>> {\n const mergedEvents = await mergedAddRemoveStakeEventsByStaker(chain, [0, externalRange[1]], staked)\n const resultWithZeros: Record<Address, bigint> = {}\n for (const event of mergedEvents) {\n const staker = toAddress(event.args.staker)\n resultWithZeros[staker] = resultWithZeros[staker] ?? 0n\n if (event.name === 'StakeAdded') {\n resultWithZeros[staker] += event.args.amount\n } else if (event.name === 'StakeRemoved') {\n resultWithZeros[staker] -= event.args.amount\n }\n }\n const nonZero = Object.entries(resultWithZeros).filter(([, amount]) => amount > 0n).map(([address]) => address)\n const result: Record<Address, bigint> = {}\n for (const address of nonZero) {\n result[toAddress(address)] = resultWithZeros[toAddress(address)]\n }\n return result\n}\n","import { type Address } from '@xylabs/sdk-js'\nimport type {\n BlockViewer, CachingContext, StakeEventsViewer, StepIdentity,\n} from '@xyo-network/xl1-protocol-lib'\n\nimport { externalBlockRangeFromXL1BlockRange } from '../chain/index.ts'\nimport { stepBlockRange } from '../step/index.ts'\nimport { allStakersForRange } from './allStakersForRange.ts'\n\n/** AllStakersForStep helper function. */\nexport async function allStakersForStep(\n context: CachingContext,\n blockViewer: BlockViewer,\n stakeEventsViewer: StakeEventsViewer,\n stepContext: StepIdentity,\n staked: Address,\n): Promise<Record<Address, bigint>> {\n const xl1BlockRange = stepBlockRange(stepContext)\n return await allStakersForRange(\n stakeEventsViewer,\n await externalBlockRangeFromXL1BlockRange(context, blockViewer, xl1BlockRange),\n staked,\n )\n}\n","import type { Address } from '@xylabs/sdk-js'\nimport { isDefined } from '@xylabs/sdk-js'\nimport type {\n BlockRange,\n BlockViewer,\n CachingContext,\n StakeEventsViewer,\n} from '@xyo-network/xl1-protocol-lib'\nimport { asBlockNumber } from '@xyo-network/xl1-protocol-lib'\n\nimport { withContextCacheResponse } from '../../ChainContextHelpers.ts'\nimport { mergedAddRemoveStakeEventsByPosition } from './mergedAddRemoveStakeEventsByPosition.ts'\n\n/** WeightedStakeForRangeByPosition helper function. */\nexport async function weightedStakeForRangeByPosition(\n context: CachingContext,\n blockViewer: BlockViewer,\n stakeEventsViewer: StakeEventsViewer,\n externalRange: BlockRange, // first to last block of step\n staked?: Address,\n positionId?: number,\n): Promise<bigint> {\n const cacheKey = isDefined(positionId) ? `${externalRange[0]}-${externalRange[1]}-${positionId}` : `${externalRange[0]}-${externalRange[1]}-all`\n return await withContextCacheResponse(context, 'weightedStakeForRangeByPosition', cacheKey, async () => {\n let weightedStakeSum = 0n\n if (isDefined(positionId)) {\n const mergedEvents = (await mergedAddRemoveStakeEventsByPosition(\n stakeEventsViewer,\n [0, externalRange[1]],\n positionId,\n )).toSorted((a, b) => a.time - b.time)\n let currentTime = externalRange[0]\n let currentStake = 0n // await activeStakeAtTimeByPosition(chainEvents, pos.staked, currentTime - 1, position)\n\n // if not staking the desired address, return 0n\n if (isDefined(staked) && mergedEvents.at(0)?.args.staked !== staked) {\n return 0n\n }\n\n for (const event of mergedEvents) {\n if (event.time > currentTime) {\n // Add the weighted stake for the period between the range start or previous event and this event\n weightedStakeSum += currentStake * BigInt(event.time - currentTime)\n }\n if (event.name === 'StakeAdded') {\n currentStake += event.args.amount\n } else if (event.name === 'StakeRemoved') {\n currentStake -= event.args.amount\n }\n // seems that sometimes we get multiple remove events, so ensure stake doesn't go negative\n currentStake = currentStake < 0n ? 0n : currentStake\n currentTime = asBlockNumber(event.time, { name: 'weightedStakeForRangeByPosition' })\n if (currentTime > externalRange[1]) {\n break\n }\n }\n if (externalRange[1] > currentTime) {\n // Add the weighted stake for the period between the last event and the end of the range\n weightedStakeSum += currentStake * BigInt(externalRange[1] - currentTime)\n }\n } else {\n const positionCount = await stakeEventsViewer.positionCount([0, externalRange[1]])\n for (let pos = 0; pos < positionCount; pos++) {\n weightedStakeSum += await weightedStakeForRangeByPosition(context, blockViewer, stakeEventsViewer, externalRange, staked, pos)\n }\n }\n return weightedStakeSum\n })\n}\n","import type {\n NextOptions, Payload, ReadArchivist,\n Sequence, WithStorageMeta,\n} from '@xyo-network/sdk-js'\nimport type { SignedBlockBoundWitnessWithHashMeta } from '@xyo-network/xl1-protocol-lib'\nimport { isSignedBlockBoundWitnessWithStorageMeta } from '@xyo-network/xl1-protocol-lib'\n\n// TODO: Use some smart value relative to DEFAULT_BLOCK_SIZE\n// to ensure we're likely to find it in a single request\n// without bringing back too much data\nconst DEFAULT_NEXT_OPTIONS: NextOptions = { limit: 50 }\n\n/**\n * Iterates an archivist to find the most recent block\n * @param chainArchivist The archivist to iterate over for the most recent chain block\n * @param nextOptions The options to use when iterating the archivist\n * @param maxIterations The max number of iterations to perform when finding the most recent block\n * @returns The most recent block found in the archivist or undefined if no blocks are found\n */\nexport const findMostRecentBlock = async (\n chainArchivist: ReadArchivist,\n nextOptions: NextOptions = DEFAULT_NEXT_OPTIONS,\n maxIterations = Number.POSITIVE_INFINITY,\n): Promise<SignedBlockBoundWitnessWithHashMeta | undefined> => {\n let mostRecentBlock: SignedBlockBoundWitnessWithHashMeta | undefined\n let cursor: Sequence | undefined\n let batch: WithStorageMeta<Payload>[]\n let iterations = 0\n do {\n batch = await chainArchivist.next({\n ...nextOptions, order: 'desc', cursor,\n })\n const blocks = batch.filter(isSignedBlockBoundWitnessWithStorageMeta)\n const last = blocks?.at(0)\n if (last) {\n mostRecentBlock = last\n break\n } else {\n cursor = batch.at(-1)?._sequence\n }\n iterations = iterations + 1\n } while (batch.length > 0 && iterations < maxIterations)\n return mostRecentBlock\n}\n","import { assertEx, spanAsync } from '@xylabs/sdk-js'\nimport type {\n ChainContextRead,\n HydratedBlockWithHashMeta, XL1BlockNumber,\n} from '@xyo-network/xl1-protocol-lib'\n\nimport { blockFromBlockNumber, hydrateBlock } from '../../block/index.ts'\nimport { withContextCacheResponse } from '../../ChainContextHelpers.ts'\n\n/** HydratedBlockByNumber helper function. */\nexport async function hydratedBlockByNumber(context: ChainContextRead, blockNumber: XL1BlockNumber): Promise<HydratedBlockWithHashMeta | null> {\n return await spanAsync('hydratedBlockByNumber', async () => {\n if (blockNumber < 0) throw new Error(`Block number ${blockNumber} is less than 0`)\n if (blockNumber > Number.MAX_SAFE_INTEGER) throw new Error(`Block number ${blockNumber} is greater than the maximum safe integer`)\n if (blockNumber % 1 !== 0) throw new Error(`Block number ${blockNumber} is not an integer`)\n const cacheKey = `${blockNumber}`\n return await withContextCacheResponse(context, 'hydratedBlockByNumber', cacheKey, async () => {\n const block = assertEx(\n await blockFromBlockNumber(context, blockNumber),\n () => `Could not find block for block number ${blockNumber}`,\n )\n return await hydrateBlock(context, block._hash)\n }, { max: 20_000 })\n }, { ...context, timeBudgetLimit: 500 })\n}\n","import type { WithHashMeta } from '@xyo-network/sdk-js'\nimport type { AllowedBlockPayload, HydratedTransactionWithHashMeta } from '@xyo-network/xl1-protocol-lib'\nimport { isAllowedBlockPayload } from '@xyo-network/xl1-protocol-lib'\n\nconst ELEVATE_OPCODE = 'elevate'\n\n/** ElevatedPayloads helper function. */\nexport function elevatedPayloads([tx, payloads]: HydratedTransactionWithHashMeta) {\n const opCodes = (tx.script ?? []).filter(operation => operation.startsWith(`${ELEVATE_OPCODE}|`))\n const elevatedPayloads: WithHashMeta<AllowedBlockPayload>[] = []\n for (const opCode of opCodes) {\n const [code, hash] = opCode.split('|')\n if (code === ELEVATE_OPCODE) {\n const elevatedPayload = payloads.find(payload => payload._hash === hash)\n if (isAllowedBlockPayload(elevatedPayload)) {\n elevatedPayloads.push(elevatedPayload)\n }\n }\n }\n if (opCodes.length === elevatedPayloads.length) {\n return elevatedPayloads\n }\n throw new Error('Not all elevated payloads could be found in the transaction payloads')\n}\n","import type { SignedHydratedBlockWithHashMeta } from '@xyo-network/xl1-protocol-lib'\n\n/** ScoreUncle helper function. */\nexport function scoreUncle(finalizedWindowedChain: SignedHydratedBlockWithHashMeta[], blocks: SignedHydratedBlockWithHashMeta[]) {\n // TODO: More than length check\n return blocks.length\n}\n","import type { SignedHydratedBlockWithHashMeta } from '@xyo-network/xl1-protocol-lib'\n\nimport { scoreUncle } from './scoreUncle.ts'\n\n/** FindBestUncle helper function. */\nexport function findBestUncle(finalizedWindowedChain: SignedHydratedBlockWithHashMeta[], uncles: SignedHydratedBlockWithHashMeta[][]) {\n const scores = uncles.map(uncle => ([scoreUncle(finalizedWindowedChain, uncle), uncle] as const)).toSorted((a, b) => b[0] - a[0])\n return scores[0]?.[1] ?? finalizedWindowedChain\n}\n","import {\n assertEx,\n exists, type Hash,\n} from '@xylabs/sdk-js'\nimport type { BaseContext, SignedHydratedBlockWithHashMeta } from '@xyo-network/xl1-protocol-lib'\nimport { isTransactionBoundWitness } from '@xyo-network/xl1-protocol-lib'\n\nfunction blocksToChains(blocks: SignedHydratedBlockWithHashMeta[]) {\n const chains: SignedHydratedBlockWithHashMeta[][] = []\n const map = new Map<Hash, SignedHydratedBlockWithHashMeta>()\n for (const block of blocks) {\n map.set(block[0]._hash, block)\n }\n for (const block of blocks) {\n let uncle: SignedHydratedBlockWithHashMeta[] = [block]\n let previous = block[0].previous ? map.get(block[0].previous) : undefined\n while (previous) {\n if (previous[0].block === (uncle[0][0].block - 1)) {\n uncle.unshift(previous)\n previous = previous[0].previous ? map.get(previous[0].previous) : undefined\n } else {\n // block number sequence is off\n uncle = []\n break\n }\n }\n if (uncle.length > 0) {\n chains.push(uncle)\n }\n }\n return chains\n}\n\nfunction toValidUncle(\n _context: BaseContext,\n finalizedWindowedChain: SignedHydratedBlockWithHashMeta[],\n possibleUncle: SignedHydratedBlockWithHashMeta[],\n) {\n const finalizedWindowStartBlockNumber = finalizedWindowedChain.at(0)?.[0].block ?? -1\n const finalizedHead = assertEx(finalizedWindowedChain.at(-1), () => 'finalizedWindowedChain is empty')\n // prune the chain to match the finalized head\n\n const prunedPossibleUncle = possibleUncle.filter(b => b[0].block > finalizedHead[0].block)\n\n if (prunedPossibleUncle.length === 0) {\n return\n }\n\n if (prunedPossibleUncle[0][0].block !== finalizedHead[0].block + 1) {\n // uncle does not build on finalized head (block number mismatch)\n return\n }\n if (prunedPossibleUncle[0][0].previous !== finalizedHead[0]._hash) {\n // uncle does not build on finalized head (previous hash mismatch)\n return\n }\n const allUncleTransactions = prunedPossibleUncle.flatMap(b => b[1]).filter(isTransactionBoundWitness)\n const allFinalizedTransactions = finalizedWindowedChain.flatMap(b => b[1]).filter(isTransactionBoundWitness)\n const txPossiblyBeforeWindow = allUncleTransactions.find(tx => tx.nbf < finalizedWindowStartBlockNumber)\n if (txPossiblyBeforeWindow) {\n // uncle has a transaction that is valid before the finalized window\n return\n }\n const txExistsInWindow = allUncleTransactions.find(tx => allFinalizedTransactions.find(finalTx => finalTx._hash === tx._hash))\n if (txExistsInWindow) {\n // uncle has a transaction that is already in the finalized window\n return\n }\n return prunedPossibleUncle\n}\n\n/** FindUncles helper function. */\nexport function findUncles(context: BaseContext, finalizedWindowedChain: SignedHydratedBlockWithHashMeta[], blocks: SignedHydratedBlockWithHashMeta[]) {\n return blocksToChains(blocks).map(chain => toValidUncle(context, finalizedWindowedChain, chain)).filter(exists)\n}\n","import type { Hash, JsonValue } from '@xylabs/sdk-js'\nimport { AsObjectFactory } from '@xylabs/sdk-js'\nimport type { Payload, WithStorageMeta } from '@xyo-network/sdk-js'\nimport {\n asSchema, isPayloadOfSchemaType, isStorageMeta,\n} from '@xyo-network/sdk-js'\n\n/** Fields stored by a chain indexing service to track its indexing progress and state */\nexport interface ChainIndexingServiceStateFields<T extends JsonValue = JsonValue> {\n /**\n * The hash of the last block that this service has indexing\n */\n endBlockHash: Hash\n /**\n * The hash of the block that the service started indexing. If undefined, the service is\n * assumed to have started indexing from the genesis block\n */\n startBlockHash?: Hash\n /**\n * The indexed state for the range\n */\n state: T\n}\n/** Schema identifier for chain indexing service state payloads */\nexport const ChainIndexingServiceStateSchema = asSchema('network.xyo.chain.indexing.service.state', true)\n/** Schema type for ChainIndexingServiceState payloads. */\nexport type ChainIndexingServiceStateSchema = typeof ChainIndexingServiceStateSchema\n\n/**\n * The result of a ChainIndexingServiceState\n */\nexport type ChainIndexingServiceState<T extends JsonValue = JsonValue> = Payload<ChainIndexingServiceStateFields<T>, ChainIndexingServiceStateSchema>\n\n/**\n * Identity functions for determining if an object is an ChainIndexingServiceState\n */\nexport const isChainIndexingServiceState = <T extends JsonValue = JsonValue>(payload?: unknown): payload is ChainIndexingServiceState<T> => {\n return isPayloadOfSchemaType<ChainIndexingServiceState<T>>(ChainIndexingServiceStateSchema)(payload)\n}\n/** Type assertion factory for ChainIndexingServiceState payloads */\nexport const asChainIndexingServiceState = AsObjectFactory.create<ChainIndexingServiceState<JsonValue>>(isChainIndexingServiceState)\n\n/** Type guard for ChainIndexingServiceState with storage metadata */\nexport const isChainIndexingServiceStateWithStorageMeta\n = <T extends JsonValue = JsonValue>(value: unknown): value is WithStorageMeta<ChainIndexingServiceState<T>> =>\n isChainIndexingServiceState<T>(value) && isStorageMeta(value)\n\n/** Type assertion factory for ChainIndexingServiceState with storage metadata */\nexport const asChainIndexingServiceStateWithStorageMeta\n = AsObjectFactory.create<WithStorageMeta<ChainIndexingServiceState>>(isChainIndexingServiceStateWithStorageMeta)\n","import {\n type Hex,\n hexToBigInt,\n toHex,\n} from '@xylabs/sdk-js'\nimport { isObject } from '@xylabs/sdk-js'\n\n/** Represents a negative bigint value stored as a hex string */\nexport interface NegativeBigInt {\n negative: Hex\n}\n\n/** Represents a positive bigint value stored as a hex string */\nexport interface PositiveBigInt {\n positive: Hex\n}\n\n/** A signed bigint value represented as either a negative or positive hex string */\nexport type SignedBigInt = NegativeBigInt | PositiveBigInt\n\n/** Type guard that checks if a value is a NegativeBigInt */\nexport const isNegativeBigInt = (value: unknown): value is NegativeBigInt => {\n return isObject(value) && 'negative' in value && typeof value.negative === 'string'\n}\n\n/** Type guard that checks if a value is a PositiveBigInt */\nexport const isPositiveBigInt = (value: unknown): value is PositiveBigInt => {\n return isObject(value) && 'positive' in value && typeof value.positive === 'string'\n}\n\n/** parseSignedBigInt constant. */\nexport const parseSignedBigInt = (value: SignedBigInt): bigint => {\n if (isNegativeBigInt(value)) {\n return -hexToBigInt(value.negative)\n } else if (isPositiveBigInt(value)) {\n return hexToBigInt(value.positive)\n } else {\n throw new Error('Invalid balance type')\n }\n}\n\n/** toSignedBigInt constant. */\nexport const toSignedBigInt = (value: bigint): SignedBigInt => {\n return value < 0n ? { negative: toHex(-value) } : { positive: toHex(value) }\n}\n\n/** toPositiveBigInt constant. */\nexport const toPositiveBigInt = (value: unknown): PositiveBigInt => {\n if (isNegativeBigInt(value)) {\n return { positive: toHex(0n) }\n }\n if (isPositiveBigInt(value)) {\n return { positive: value.positive }\n }\n if (typeof value === 'bigint') {\n return { positive: toHex(value) }\n }\n throw new Error('Invalid value for positive big int')\n}\n","import type { Address, Hash } from '@xylabs/sdk-js'\nimport {\n asHash,\n assertEx, exists, isDefined,\n ZERO_ADDRESS,\n} from '@xylabs/sdk-js'\nimport type { WithHashMeta, WithStorageMeta } from '@xyo-network/sdk-js'\nimport type {\n AccountBalanceConfig,\n AccountBalanceHistoryItem,\n AccountBalanceViewer,\n BlockViewer,\n ChainQualification,\n ChainQualified,\n MapType,\n SignedBlockBoundWitnessWithHashMeta, Transfer, XL1BlockNumber, XL1BlockRange,\n} from '@xyo-network/xl1-protocol-lib'\nimport {\n AccountBalanceViewerMoniker,\n asRange, asXL1BlockNumber, asXL1BlockRange, AttoXL1,\n BlockViewerMoniker,\n isChainQualifiedHeadConfig,\n isChainQualifiedRangeConfig,\n StepSizes,\n TransferSchema,\n} from '@xyo-network/xl1-protocol-lib'\nimport { Semaphore } from 'async-mutex'\n\nimport { deepCalculateFramesFromRange } from '../../block/index.ts'\nimport type { CreatableProviderParams } from '../../CreatableProvider/index.ts'\nimport { AbstractCreatableProvider, creatableProvider } from '../../CreatableProvider/index.ts'\nimport type { BalancesStepSummary, TransfersStepSummary } from '../../summary/index.ts'\nimport {\n balancesSummary,\n transfersStepSummaryFromRange,\n} from '../../summary/index.ts'\n\n/** Parameters for SimpleAccountBalanceViewer. */\nexport interface SimpleAccountBalanceViewerParams extends CreatableProviderParams {\n balancesSummaryMap: MapType<string, WithHashMeta<BalancesStepSummary>>\n transfersSummaryMap: MapType<string, WithHashMeta<TransfersStepSummary>>\n}\n\n/** SimpleAccountBalanceViewer implementation. */\n@creatableProvider()\nexport class SimpleAccountBalanceViewer extends AbstractCreatableProvider<SimpleAccountBalanceViewerParams> implements AccountBalanceViewer {\n static readonly defaultMoniker = AccountBalanceViewerMoniker\n static readonly dependencies = [BlockViewerMoniker]\n static readonly monikers = [AccountBalanceViewerMoniker]\n moniker = SimpleAccountBalanceViewer.defaultMoniker\n\n private _balanceStepSemaphores = StepSizes.map(() => new Semaphore(20))\n private _blockViewer!: BlockViewer\n private _transferStepSemaphores = StepSizes.map(() => new Semaphore(20))\n\n get balancesSummaryMap() {\n return this.params.balancesSummaryMap\n }\n\n get blockViewer() {\n return this._blockViewer\n }\n\n get transfersSummaryMap() {\n return this.params.transfersSummaryMap\n }\n\n static override async paramsHandler(params: Partial<SimpleAccountBalanceViewerParams> = {}) {\n return {\n ...await super.paramsHandler(params),\n balancesSummaryMap: assertEx(params.balancesSummaryMap, () => 'balancesSummaryMap is required'),\n transfersSummaryMap: assertEx(params.transfersSummaryMap, () => 'transfersSummaryMap is required'),\n }\n }\n\n async accountBalance(address: Address, config?: AccountBalanceConfig) {\n const balances = await this.accountBalances([address], config)\n return balances[address] ?? AttoXL1(0n)\n }\n\n async accountBalanceHistories(addresses: Address[], config: AccountBalanceConfig = {}) {\n return (await this.qualifiedAccountBalanceHistories(addresses, config))[0]\n }\n\n async accountBalanceHistory(address: Address, config?: AccountBalanceConfig) {\n return await this.spanAsync('accountBalanceHistory', async () => {\n const range = isChainQualifiedRangeConfig(config) ? config.range : undefined\n const startingRange = asXL1BlockRange(range ?? [0, await this.blockViewer.currentBlockNumber()], true)\n const blockNumbers = await this.distillTransferHistory(address, startingRange)\n const blocks = (await Promise.all(blockNumbers.map(async bn => await this.blockViewer.blockByNumber(bn)))).filter(exists)\n const result: AccountBalanceHistoryItem[] = []\n for (const block of blocks) {\n const transferIndexes = block[0].payload_schemas.map((schema, index) => schema === TransferSchema ? index : undefined).filter(exists)\n const transfers = transferIndexes.map((index) => {\n const hash = block[0].payload_hashes[index]\n return assertEx(\n block[1].find(p => p._hash === hash) as WithStorageMeta<Transfer>,\n () => `Error: Could not find Transfer with hash ${hash} in block ${block[0]._hash}`,\n )\n }).filter(exists).filter(t => ((t.from === address) || (isDefined(t.transfers[address]))))\n if (transfers.length === 0) {\n continue\n }\n const pairs: [SignedBlockBoundWitnessWithHashMeta, WithHashMeta<Transfer>][] = (transfers.map((transfer) => {\n return [block[0], transfer]\n }))\n result.push(...pairs.map(([block, transfer]) => [block,\n null,\n transfer] satisfies AccountBalanceHistoryItem))\n }\n return result\n }, this.context)\n }\n\n async accountBalances(address: Address[], config?: AccountBalanceConfig) {\n const [result] = (await this.qualifiedAccountBalances(address, config ?? {}))\n return result\n }\n\n override async createHandler() {\n await super.createHandler()\n this._blockViewer = await this.locator.getInstance<BlockViewer>(BlockViewerMoniker)\n }\n\n async qualifiedAccountBalanceHistories(\n addresses: Address[],\n config: AccountBalanceConfig,\n ) {\n return await this.spanAsync('qualifiedAccountBalanceHistories', async () => {\n const head = isChainQualifiedHeadConfig(config) ? config.head : await this.blockViewer.currentBlockHash()\n const range = isChainQualifiedRangeConfig(config)\n ? config.range\n : asXL1BlockRange([0,\n assertEx(\n await this.blockViewer.blockByHash(head),\n () => `Error: Could not find block with hash ${head}`,\n )[0].block])\n const qualifiedEntries = await Promise.all(addresses.map(async address => ([\n address,\n await this.qualifiedAccountBalanceHistory(address, range),\n ]))) satisfies [Address, ChainQualified<AccountBalanceHistoryItem[]>][]\n\n const entries = qualifiedEntries.map(([address, [history]]) => {\n return [address, history]\n })\n const qualifiedRange = qualifiedEntries[0][1][1].range\n const qualifiedHeadHash = qualifiedEntries[0][1][1].head\n\n // check for drift\n for (const [_, [__, { range, head }]] of qualifiedEntries) {\n assertEx(\n range[0] === qualifiedRange[0] && range[1] === qualifiedRange[1],\n () => 'Inconsistent ranges in qualifiedAccountBalanceHistories',\n )\n assertEx(\n head === qualifiedHeadHash,\n () => 'Inconsistent head hashes in qualifiedAccountBalanceHistories',\n )\n }\n\n return [Object.fromEntries(entries), { range: qualifiedRange, head: qualifiedHeadHash }] satisfies\n [Record<Address, AccountBalanceHistoryItem[]>, ChainQualification]\n }, this.context)\n }\n\n async qualifiedAccountBalances(\n address: Address[],\n config: AccountBalanceConfig,\n ): Promise<ChainQualified<Record<Address, AttoXL1>>> {\n return await this.spanAsync('qualifiedAccountsBalances', async () => {\n const qualifiedSummary = await balancesSummary(\n this.context,\n this._balanceStepSemaphores,\n this.blockViewer,\n this.balancesSummaryMap,\n config,\n )\n const result: Record<Address, AttoXL1> = {}\n for (const addr of address) {\n const summaryBalance = qualifiedSummary[0][addr] ?? 0n\n result[addr] = AttoXL1(summaryBalance < 0n ? 0n : summaryBalance)\n }\n return [result, qualifiedSummary[1]]\n }, this.context)\n }\n\n override async startHandler() {\n await super.startHandler()\n await Promise.all([\n this.accountBalance(ZERO_ADDRESS),\n this.accountBalanceHistory(ZERO_ADDRESS),\n ])\n }\n\n private async distillTransferHistory(address: Address, range: XL1BlockRange, max: number = 50): Promise<XL1BlockNumber[]> {\n return await this.spanAsync('distillTransferHistory', async () => {\n if ((range[1] - range[0]) <= StepSizes[0] || max <= 1) {\n return Array.from({ length: range[1] - range[0] + 1 }, (_, i) => range[1] - i).slice(0, max).map(n => asXL1BlockNumber(n, true))\n }\n const frames = deepCalculateFramesFromRange(asXL1BlockRange(range, true))\n const transferSummaryPairs = await Promise.all(frames.map(\n async (frame) => {\n return [frame, await transfersStepSummaryFromRange(this.context, this._transferStepSemaphores, this.blockViewer, this.transfersSummaryMap, frame)]\n },\n )) as [XL1BlockRange, WithStorageMeta<TransfersStepSummary>][]\n\n const filteredTransferSummaryPairs = transferSummaryPairs.filter(([_, summary]) => Object.keys(summary.transfers).includes(address))\n\n // sort it latest to earliest\n const sortedTransferSummaryPairs = filteredTransferSummaryPairs.toSorted((a, b) => {\n return b[0][1] - a[0][1]\n })\n\n const resultBlockNumbers: Set<XL1BlockNumber> = new Set()\n for (const [frame] of sortedTransferSummaryPairs) {\n if ((frame[1] - frame[0] + 1) > StepSizes[0]) {\n const values = await this.distillTransferHistory(address, asXL1BlockRange([frame[0], frame[1] - 1], true), max - resultBlockNumbers.size)\n for (const value of values) {\n resultBlockNumbers.add(value)\n }\n resultBlockNumbers.add(frame[1])\n } else {\n for (let i = frame[0]; i <= frame[1]; i++) {\n resultBlockNumbers.add(i)\n }\n }\n if (resultBlockNumbers.size >= max) {\n break\n }\n }\n return [...resultBlockNumbers].toSorted((a, b) => b - a).slice(0, max)\n }, this.context)\n }\n\n private async qualifiedAccountBalanceHistory(\n address: Address,\n headOrRange?: Hash | XL1BlockRange,\n ): Promise<ChainQualified<AccountBalanceHistoryItem[]>> {\n return await this.spanAsync('qualifiedAccountBalanceHistory', async () => {\n const range = asRange(headOrRange)\n const headHash = asHash(headOrRange)\n const [head] = assertEx(isDefined(headHash)\n ? (await this.blockViewer.blockByHash(headHash))\n : (await this.blockViewer.currentBlock()), () => 'Could not resolve head block')\n const startingRange = asXL1BlockRange(range ?? [0, head.block], true)\n const blockNumbers = await this.distillTransferHistory(address, startingRange)\n const blocks = (await Promise.all(blockNumbers.map(async bn => await this.blockViewer.blockByNumber(bn)))).filter(exists)\n const result: AccountBalanceHistoryItem[] = []\n for (const block of blocks) {\n const transferIndexes = block[0].payload_schemas.map((schema, index) => schema === TransferSchema ? index : undefined).filter(exists)\n const transfers = transferIndexes.map((index) => {\n const hash = block[0].payload_hashes[index]\n return assertEx(\n block[1].find(p => p._hash === hash) as WithStorageMeta<Transfer>,\n () => `Error: Could not find Transfer with hash ${hash} in block ${block[0]._hash}`,\n )\n }).filter(exists).filter(t => ((t.from === address) || (isDefined(t.transfers[address]))))\n if (transfers.length === 0) {\n continue\n }\n const pairs: [SignedBlockBoundWitnessWithHashMeta, WithHashMeta<Transfer>][] = (transfers.map((transfer) => {\n return [block[0], transfer]\n }))\n result.push(...pairs.map(([block, transfer]) => [block,\n null,\n transfer] satisfies AccountBalanceHistoryItem))\n }\n return [result, { range: startingRange, head: head._hash }]\n }, this.context)\n }\n}\n","import type { Address } from '@xylabs/sdk-js'\nimport { AsObjectFactory } from '@xylabs/sdk-js'\nimport type { WithStorageMeta } from '@xyo-network/sdk-js'\nimport {\n asSchema, isPayloadOfSchemaType, isStorageMeta,\n} from '@xyo-network/sdk-js'\n\nimport type { SignedBigInt } from '../../SignedBigInt.ts'\nimport type { StepSummary } from './StepSummary.ts'\n\n/** Schema identifier for balances step summary payloads */\nexport const BalancesStepSummarySchema = asSchema('network.xyo.step.summary.balances', true)\n/** Schema type for BalancesStepSummary payloads. */\nexport type BalancesStepSummarySchema = typeof BalancesStepSummarySchema\n\n/** Step summary payload containing net balance changes per address */\nexport type BalancesStepSummary = StepSummary<{\n balances: Record<Address, SignedBigInt>\n}, BalancesStepSummarySchema>\n\n/**\n * Identity function for determining if an object is an BalancesStepSummary\n */\nexport const isBalancesStepSummary = isPayloadOfSchemaType<BalancesStepSummary>(BalancesStepSummarySchema)\n/** Type assertion factory for BalancesStepSummary payloads */\nexport const asBalancesStepSummary = AsObjectFactory.create<BalancesStepSummary>(isBalancesStepSummary)\n\n/**\n * Identity function for determining if an object is an BalancesStepSummary with Storage Meta\n */\nexport const isBalancesStepSummaryWithStorageMeta = (value: unknown): value is WithStorageMeta<BalancesStepSummary> => {\n return isBalancesStepSummary(value) && isStorageMeta(value)\n}\n/** Type assertion factory for BalancesStepSummary with storage metadata */\nexport const asBalancesStepSummaryWithStorageMeta = AsObjectFactory.create<WithStorageMeta<BalancesStepSummary>>(isBalancesStepSummaryWithStorageMeta)\n","import { AsObjectFactory } from '@xylabs/sdk-js'\nimport type { Schema, WithStorageMeta } from '@xyo-network/sdk-js'\nimport {\n asSchema, isPayloadOfSchemaType, isStorageMeta,\n} from '@xyo-network/sdk-js'\n\nimport type { StepSummary } from './StepSummary.ts'\n\n/** Schema identifier for schemas step summary payloads */\nexport const SchemasStepSummarySchema = asSchema('network.xyo.step.summary.schemas', true)\n/** Schema type for sStepSummary payloads. */\nexport type SchemasStepSummarySchema = typeof SchemasStepSummarySchema\n\n/** Step summary payload containing schema occurrence counts */\nexport type SchemasStepSummary = StepSummary<{\n schemas: Record<Schema, number>\n}, SchemasStepSummarySchema>\n\n/**\n * Identity function for determining if an object is an SchemasStepSummary\n */\nexport const isSchemasStepSummary = isPayloadOfSchemaType<SchemasStepSummary>(SchemasStepSummarySchema)\n/** Type assertion factory for SchemasStepSummary payloads */\nexport const asSchemasStepSummary = AsObjectFactory.create<SchemasStepSummary>(isSchemasStepSummary)\n\n/**\n * Identity function for determining if an object is an SchemasStepSummary with Storage Meta\n */\nexport const isSchemasStepSummaryWithStorageMeta = (value: unknown): value is WithStorageMeta<SchemasStepSummary> => {\n return isSchemasStepSummary(value) && isStorageMeta(value)\n}\n/** Type assertion factory for SchemasStepSummary with storage metadata */\nexport const asSchemasStepSummaryWithStorageMeta = AsObjectFactory.create<WithStorageMeta<SchemasStepSummary>>(isSchemasStepSummaryWithStorageMeta)\n","import type { EmptyObject, Hash } from '@xylabs/sdk-js'\nimport {\n asSchema, type Payload, type Schema,\n} from '@xyo-network/sdk-js'\n\n/** Schema identifier for step summary payloads */\nexport const StepSummarySchema = asSchema('network.xyo.step.summary', true)\n/** Schema type for StepSummary payloads. */\nexport type StepSummarySchema = typeof StepSummarySchema\n\n/** Fields common to all step summary payloads */\nexport interface StepSummaryFields {\n hash: Hash // the stepHash - the hash of the last block in the step frame\n stepSize: number // the stepSize in blocks\n}\n\n/** Payload type for a step summary with optional additional fields and schema */\nexport type StepSummary<TAdditionalFields extends EmptyObject | void = void,\n TSchema extends Schema | void = void> = Payload<TAdditionalFields extends void ? StepSummaryFields : TAdditionalFields & StepSummaryFields,\n TSchema extends void ? StepSummarySchema : TSchema>\n","import type { Address } from '@xylabs/sdk-js'\nimport { AsObjectFactory } from '@xylabs/sdk-js'\nimport type { WithStorageMeta } from '@xyo-network/sdk-js'\nimport {\n asSchema, isPayloadOfSchemaType, isStorageMeta,\n} from '@xyo-network/sdk-js'\n\nimport type { SignedBigInt } from '../../SignedBigInt.ts'\nimport type { StepSummary } from './StepSummary.ts'\n\n/** Schema identifier for transfers step summary payloads */\nexport const TransfersStepSummarySchema = asSchema('network.xyo.step.summary.transfer', true)\n/** Schema type for TransfersStepSummary payloads. */\nexport type TransfersStepSummarySchema = typeof TransfersStepSummarySchema\n\n/** Step summary payload containing transfer amounts between address pairs */\nexport type TransfersStepSummary = StepSummary<{\n transfers: Record<Address, Record<Address, SignedBigInt>>\n}, TransfersStepSummarySchema>\n\n/**\n * Identity function for determining if an object is an TransfersStepSummary\n */\nexport const isTransfersStepSummary = isPayloadOfSchemaType<TransfersStepSummary>(TransfersStepSummarySchema)\n/** Type assertion factory for TransfersStepSummary payloads */\nexport const asTransfersStepSummary = AsObjectFactory.create<TransfersStepSummary>(isTransfersStepSummary)\n\n/**\n * Identity function for determining if an object is an TransfersStepSummary with Storage Meta\n */\nexport const isTransfersStepSummaryWithStorageMeta = (value: unknown): value is WithStorageMeta<TransfersStepSummary> => {\n return isTransfersStepSummary(value) && isStorageMeta(value)\n}\n/** Type assertion factory for TransfersStepSummary with storage metadata */\nexport const asTransfersStepSummaryWithStorageMeta\n = AsObjectFactory.create<WithStorageMeta<TransfersStepSummary>>(isTransfersStepSummaryWithStorageMeta)\n","import { type Address, spanRootAsync } from '@xylabs/sdk-js'\nimport { assertEx } from '@xylabs/sdk-js'\nimport { isAnyPayload } from '@xyo-network/sdk-js'\nimport type {\n BlockViewer, CachingContext, MapType, XL1BlockRange,\n} from '@xyo-network/xl1-protocol-lib'\nimport { asXL1BlockNumber, StepSizes } from '@xyo-network/xl1-protocol-lib'\nimport type { Semaphore } from 'async-mutex'\n\nimport { deepCalculateFramesFromRange } from '../../../block/index.ts'\nimport { withContextCacheResponse } from '../../../ChainContextHelpers.ts'\nimport { netBalancesForPayloads } from '../../../payloads/index.ts'\nimport {\n parseSignedBigInt, type SignedBigInt, toSignedBigInt,\n} from '../../../SignedBigInt.ts'\nimport type { BalancesStepSummary } from '../../model/index.ts'\nimport { BalancesStepSummarySchema } from '../../model/index.ts'\n\n/** BalancesStepSummaryFromRange helper function. */\nexport async function balancesStepSummaryFromRange(\n context: CachingContext,\n semaphores: Semaphore[],\n blockViewer: BlockViewer,\n summaryMap: MapType<string, BalancesStepSummary>,\n range: XL1BlockRange,\n): Promise<BalancesStepSummary> {\n const cacheKey = `${range[0]}|${range[1]}`\n return await withContextCacheResponse(context, 'balancesStepSummaryFromRange', cacheKey, async () => {\n return await spanRootAsync('balancesStepSummaryFromRange', async () => {\n // console.log(`balanceStepSummaryFromRange: head=${head}, range=${range[0]}-${range[1]}`)\n const [frameHead] = assertEx(await blockViewer.blockByNumber(range[1]), () => `Block not found for number: ${range[1]}`)\n const frameSize = range[1] - range[0] + 1\n\n const key = `${frameHead._hash}|${frameSize}`\n\n return (frameSize === 1)\n ? await spanRootAsync(`balancesStepSummaryFromRange.frameSize=1[${key}]`, async () => {\n const [,payloads] = assertEx(await blockViewer.blockByNumber(range[0]), () => `Block not found for number: ${range[0]}`)\n const balances: Record<Address, SignedBigInt> = {}\n for (const [address, balance] of Object.entries(netBalancesForPayloads(context, payloads))) {\n balances[address as Address] = toSignedBigInt(balance)\n }\n return {\n schema: BalancesStepSummarySchema, hash: frameHead._hash, stepSize: -1, balances,\n }\n }, { ...context, timeBudgetLimit: 500 })\n : await spanRootAsync(`balancesStepSummaryFromRange.frameSize>1[${key}]`, async () => {\n const step = StepSizes.indexOf(asXL1BlockNumber(frameSize, true))\n assertEx(step !== -1, () => `Invalid step size: ${frameSize}. Must be one of ${StepSizes.join(', ')}`)\n\n const summaryResult = await summaryMap.get(`${frameHead._hash}|${frameSize}`)\n if (isAnyPayload(summaryResult)) {\n return summaryResult as BalancesStepSummary\n } else {\n // We do not have it, so lets build it\n await semaphores[step].acquire()\n try {\n const subRanges = deepCalculateFramesFromRange(range, step - 1)\n const promises = subRanges.map(subRange => balancesStepSummaryFromRange(\n context,\n semaphores,\n blockViewer,\n summaryMap,\n subRange,\n ))\n const subResults = await Promise.all(promises)\n\n // add them all up\n const bigIntBalances: Record<Address, bigint> = {}\n for (const subResult of subResults) {\n for (const [address, balance] of Object.entries(subResult.balances)) {\n bigIntBalances[address as Address] = (bigIntBalances[address as Address] ?? 0n) + parseSignedBigInt(balance)\n }\n }\n\n const balances: Record<Address, SignedBigInt> = {}\n for (const [address, balance] of Object.entries(bigIntBalances)) {\n balances[address as Address] = toSignedBigInt(balance)\n }\n\n const result = {\n schema: BalancesStepSummarySchema, hash: frameHead._hash, stepSize: frameSize, balances,\n }\n\n await summaryMap.set(key, result)\n return result\n } finally {\n semaphores[step].release()\n }\n }\n }, { ...context, timeBudgetLimit: 500 })\n }, { ...context, timeBudgetLimit: 500 })\n }, { max: 100_000 })\n}\n","import type { Address } from '@xylabs/sdk-js'\nimport {\n asAddress, assertEx, spanRootAsync,\n} from '@xylabs/sdk-js'\nimport type {\n BlockViewer,\n CachingContext, ChainQualified, ChainQualifiedConfig,\n MapType,\n} from '@xyo-network/xl1-protocol-lib'\nimport {\n asBlockBoundWitnessWithStorageMeta, asXL1BlockRange, isChainQualifiedHeadConfig,\n isChainQualifiedRangeConfig,\n} from '@xyo-network/xl1-protocol-lib'\nimport type { Semaphore } from 'async-mutex'\n\nimport { deepCalculateFramesFromRange } from '../../../block/index.ts'\nimport { parseSignedBigInt } from '../../../SignedBigInt.ts'\nimport type { BalancesStepSummary } from '../../model/index.ts'\nimport { balancesStepSummaryFromRange } from './balancesStepSummaryFromRange.ts'\n\n/** BalancesSummary helper function. */\nexport async function balancesSummary(\n context: CachingContext,\n semaphores: Semaphore[],\n blockViewer: BlockViewer,\n summaryMap: MapType<string, BalancesStepSummary>,\n config?: ChainQualifiedConfig,\n): Promise<ChainQualified<Record<Address, bigint>>> {\n return await spanRootAsync('balancesSummary', async () => {\n const headHash = isChainQualifiedHeadConfig(config) ? config.head : await blockViewer.currentBlockHash()\n const [head] = assertEx(await blockViewer.blockByHash(headHash), () => `Block not found for hash: ${headHash}`)\n const headBoundWitness = asBlockBoundWitnessWithStorageMeta(head, () => `Found Block not a BlockWithHashMeta: ${headHash}`)\n const range = isChainQualifiedRangeConfig(config) ? config.range : asXL1BlockRange([0, headBoundWitness.block], true)\n const ranges = deepCalculateFramesFromRange(asXL1BlockRange(\n range,\n { name: 'balancesSummary' },\n ))\n const summaries = await Promise.all(ranges.map(range => balancesStepSummaryFromRange(context, semaphores, blockViewer, summaryMap, range)))\n const balances: Record<Address, bigint> = {}\n for (let summary of summaries) {\n for (const [address, balance] of Object.entries(summary.balances)) {\n const validAddress = asAddress(address, () => `Invalid address: ${address}`)\n balances[validAddress] = (balances[validAddress] ?? 0n) + parseSignedBigInt(balance)\n }\n }\n return [balances, { range, head: headHash }]\n }, { ...context, timeBudgetLimit: 500 })\n}\n","import { assertEx } from '@xylabs/sdk-js'\nimport type { Schema, WithHashMeta } from '@xyo-network/sdk-js'\nimport {\n isAnyPayload, isBoundWitness,\n isHashMeta, PayloadBuilder,\n} from '@xyo-network/sdk-js'\nimport type {\n BlockViewer, CachingContext, MapType, XL1BlockRange,\n} from '@xyo-network/xl1-protocol-lib'\nimport { StepSizes } from '@xyo-network/xl1-protocol-lib'\nimport type { Semaphore } from 'async-mutex'\n\nimport { deepCalculateFramesFromRange } from '../../../block/index.ts'\nimport { type SchemasStepSummary, SchemasStepSummarySchema } from '../../model/index.ts'\n\n/** SchemasStepSummaryFromRange helper function. */\nexport async function schemasStepSummaryFromRange(\n context: CachingContext,\n semaphores: Semaphore[],\n blockViewer: BlockViewer,\n summaryMap: MapType<string, WithHashMeta<SchemasStepSummary>>,\n range: XL1BlockRange,\n): Promise<WithHashMeta<SchemasStepSummary>> {\n // console.log(`balanceStepSummaryFromRange: head=${head}, range=${range[0]}-${range[1]}`)\n const [frameHead] = assertEx(await blockViewer.blockByNumber(range[1]), () => `Block not found for number: ${range[1]}`)\n const frameSize = range[1] - range[0] + 1\n\n let result: WithHashMeta<SchemasStepSummary> | undefined = undefined\n\n if (frameSize === 1) {\n const [block, payloads] = assertEx(await blockViewer.blockByNumber(range[0]), () => `Block not found for number: ${range[0]}`)\n const boundWitnesses = [block, ...payloads.filter(x => isBoundWitness(x) && isHashMeta(x))]\n const schemas: Record<Schema, number> = {}\n for (const bw of boundWitnesses) {\n schemas[bw.schema] = (schemas[bw.schema] ?? 0) + 1\n for (const schema of bw.payload_schemas) {\n schemas[schema] = (schemas[schema] ?? 0) + 1\n }\n }\n result = await PayloadBuilder.addHashMeta({\n schema: SchemasStepSummarySchema, hash: frameHead._hash, stepSize: -1, schemas,\n })\n } else {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n const step = (StepSizes as any).indexOf(frameSize)\n assertEx(step !== -1, () => `Invalid step size: ${frameSize}. Must be one of ${StepSizes.join(', ')}`)\n\n const summaryResult = await summaryMap.get(`${frameHead._hash}|${frameSize}`)\n if (isAnyPayload(summaryResult)) {\n result = summaryResult as WithHashMeta<SchemasStepSummary>\n } else {\n // We do not have it, so lets build it\n await semaphores[step].acquire()\n try {\n const subRanges = deepCalculateFramesFromRange(range, step - 1)\n const promises = subRanges.map(subRange => schemasStepSummaryFromRange(\n context,\n semaphores,\n blockViewer,\n summaryMap,\n subRange,\n ))\n const subResults = await Promise.all(promises)\n\n // add them all up\n const schemas: Record<Schema, number> = {}\n for (const subResult of subResults) {\n for (const [schema, count] of Object.entries(subResult.schemas)) {\n const typedSchema = schema as Schema\n schemas[typedSchema] = (schemas[typedSchema] ?? 0) + count\n }\n }\n\n result = await PayloadBuilder.addHashMeta({\n schema: SchemasStepSummarySchema, hash: frameHead._hash, stepSize: frameSize, schemas: schemas,\n })\n\n await summaryMap.set(`${frameHead._hash}|${frameSize}`, result)\n } finally {\n semaphores[step].release()\n }\n }\n }\n // console.log(`balanceStepSummaryFromRange-result: head=${head}, range=${range[0]}-${range[1]}: ${toSafeJsonString(result, 10)}`)\n return await PayloadBuilder.addHashMeta(result)\n}\n","import { assertEx, spanRootAsync } from '@xylabs/sdk-js'\nimport type { Schema, WithHashMeta } from '@xyo-network/sdk-js'\nimport type {\n BlockViewer, CachingContext, ChainQualified, ChainQualifiedConfig,\n MapType,\n} from '@xyo-network/xl1-protocol-lib'\nimport {\n asBlockBoundWitnessWithStorageMeta, asXL1BlockRange, isChainQualifiedHeadConfig,\n isChainQualifiedRangeConfig,\n} from '@xyo-network/xl1-protocol-lib'\nimport type { Semaphore } from 'async-mutex'\n\nimport { deepCalculateFramesFromRange } from '../../../block/index.ts'\nimport type { SchemasStepSummary } from '../../model/index.ts'\nimport { schemasStepSummaryFromRange } from './schemasStepSummaryFromRange.ts'\n\n/** SchemasSummary helper function. */\nexport async function schemasSummary(\n context: CachingContext,\n semaphores: Semaphore[],\n blockViewer: BlockViewer,\n summaryMap: MapType<string, WithHashMeta<SchemasStepSummary>>,\n config?: ChainQualifiedConfig,\n): Promise<ChainQualified<Record<Schema, number>>> {\n return await spanRootAsync('schemasSummary', async () => {\n const headHash = isChainQualifiedHeadConfig(config) ? config.head : await blockViewer.currentBlockHash()\n const [head] = assertEx(await blockViewer.blockByHash(headHash), () => `Block not found for hash: ${headHash}`)\n const headBoundWitness = asBlockBoundWitnessWithStorageMeta(head, () => `Found Block not a BlockWithHashMeta: ${headHash}`)\n const range = isChainQualifiedRangeConfig(config) ? config.range : asXL1BlockRange([0, headBoundWitness.block], true)\n const ranges = deepCalculateFramesFromRange(asXL1BlockRange(\n range,\n { name: 'schemasSummary' },\n ))\n const summaries = await Promise.all(ranges.map(range => schemasStepSummaryFromRange(context, semaphores, blockViewer, summaryMap, range)))\n const results: Record<Schema, number> = {}\n for (let summary of summaries) {\n for (const [schema, count] of Object.entries(summary.schemas)) {\n const typedSchema = schema as Schema\n results[typedSchema] = (results[typedSchema] ?? 0) + count\n }\n }\n return [results, { range, head: headHash }]\n }, context)\n}\n","/* eslint-disable max-statements */\nimport type { Address, Hash } from '@xylabs/sdk-js'\nimport { assertEx, spanRootAsync } from '@xylabs/sdk-js'\nimport { isAnyPayload } from '@xyo-network/sdk-js'\nimport type {\n BlockViewer, CachingContext, MapType, XL1BlockRange,\n} from '@xyo-network/xl1-protocol-lib'\nimport { asXL1BlockNumber, StepSizes } from '@xyo-network/xl1-protocol-lib'\nimport type { Semaphore } from 'async-mutex'\n\nimport { deepCalculateFramesFromRange } from '../../../block/index.ts'\nimport { withContextCacheResponse } from '../../../ChainContextHelpers.ts'\nimport { netTransfersForPayloads } from '../../../payloads/index.ts'\nimport {\n parseSignedBigInt, type SignedBigInt, toSignedBigInt,\n} from '../../../SignedBigInt.ts'\nimport {\n asTransfersStepSummary, type TransfersStepSummary, TransfersStepSummarySchema,\n} from '../../model/index.ts'\n\n/** TransfersSummaryKey helper function. */\nexport function transfersSummaryKey(frameHeadHash: Hash, frameSize: number) {\n return `${frameHeadHash}|${frameSize}`\n}\n\n/** TransfersStepSummaryFromRange helper function. */\nexport async function transfersStepSummaryFromRange(\n context: CachingContext,\n semaphores: Semaphore[],\n blockViewer: BlockViewer,\n summaryMap: MapType<string, TransfersStepSummary>,\n range: XL1BlockRange,\n): Promise<TransfersStepSummary> {\n const cacheKey = `${range[0]}|${range[1]}`\n return await withContextCacheResponse(context, 'transfersStepSummaryFromRange', cacheKey, async () => {\n return await spanRootAsync('transfersStepSummaryFromRange', async () => {\n const [frameHead] = assertEx(await blockViewer.blockByNumber(range[1]), () => `Block not found for number: ${range[1]}`)\n const frameSize = range[1] - range[0] + 1\n\n let result: TransfersStepSummary | undefined\n\n if (frameSize === 1) {\n const [, payloads] = assertEx(await blockViewer.blockByNumber(range[0]), () => `Block not found for number: ${range[0]}`)\n const transfers: Record<Address, Record<Address, SignedBigInt>> = {}\n for (const [from, toMap] of Object.entries(netTransfersForPayloads(context, payloads))) {\n transfers[from as Address] = transfers[from as Address] ?? {}\n for (const [to, amount] of Object.entries(toMap)) {\n transfers[from as Address][to as Address] = toSignedBigInt(amount)\n }\n }\n result = {\n schema: TransfersStepSummarySchema, hash: frameHead._hash, stepSize: -1, transfers,\n }\n } else {\n const step = (StepSizes).indexOf(asXL1BlockNumber(frameSize, true))\n assertEx(step !== -1, () => `Invalid step size: ${frameSize}. Must be one of ${StepSizes.join(', ')}`)\n\n const key = transfersSummaryKey(frameHead._hash, frameSize)\n\n const summaryResult = await summaryMap.get(key)\n if (isAnyPayload(summaryResult)) {\n result = asTransfersStepSummary(summaryResult, { required: true })\n } else {\n await semaphores[step].acquire()\n // We do not have it, so lets build it\n try {\n const subRanges = deepCalculateFramesFromRange(range, step - 1)\n const promises = subRanges.map(subRange => transfersStepSummaryFromRange(\n context,\n semaphores,\n blockViewer,\n summaryMap,\n subRange,\n ))\n const subResults = await Promise.all(promises)\n\n // add them all up\n const bigIntBalances: Record<Address, Record<Address, bigint>> = {}\n for (const subResult of subResults) {\n for (const [from, toMap] of Object.entries(subResult.transfers)) {\n bigIntBalances[from as Address] = bigIntBalances[from as Address] ?? {}\n for (const [to, transfer] of Object.entries(toMap)) {\n bigIntBalances[from as Address][to as Address] = (bigIntBalances[from as Address][to as Address] ?? 0n) + parseSignedBigInt(transfer)\n }\n }\n }\n\n const transfers: Record<Address, Record<Address, SignedBigInt>> = {}\n for (const [from, toMap] of Object.entries(bigIntBalances)) {\n transfers[from as Address] = transfers[from as Address] ?? {}\n for (const [to, transfer] of Object.entries(toMap)) {\n transfers[from as Address][to as Address] = toSignedBigInt(transfer)\n }\n }\n\n result = {\n schema: TransfersStepSummarySchema, hash: frameHead._hash, stepSize: frameSize, transfers,\n }\n\n await summaryMap.set(key, result)\n } finally {\n semaphores[step].release()\n }\n }\n }\n return result\n }, { ...context, timeBudgetLimit: 500 })\n }, { max: 100_000 })\n}\n","import type { Address } from '@xylabs/sdk-js'\nimport {\n asAddress, assertEx, spanRootAsync,\n} from '@xylabs/sdk-js'\nimport type {\n BlockViewer, CachingContext, ChainQualified, ChainQualifiedConfig,\n MapType,\n} from '@xyo-network/xl1-protocol-lib'\nimport {\n asBlockBoundWitnessWithStorageMeta, asXL1BlockRange, isChainQualifiedHeadConfig,\n isChainQualifiedRangeConfig,\n} from '@xyo-network/xl1-protocol-lib'\nimport type { Semaphore } from 'async-mutex'\n\nimport { deepCalculateFramesFromRange } from '../../../block/index.ts'\nimport { parseSignedBigInt } from '../../../SignedBigInt.ts'\nimport type { TransfersStepSummary } from '../../model/index.ts'\nimport { transfersStepSummaryFromRange } from './transfersStepSummaryFromRange.ts'\n\n// the summary of amount of rewards claimed from the step reward pool by addresses\n/** TransfersSummary helper function. */\nexport async function transfersSummary(\n context: CachingContext,\n semaphores: Semaphore[],\n blockViewer: BlockViewer,\n summaryMap: MapType<string, TransfersStepSummary>,\n config?: ChainQualifiedConfig,\n): Promise<ChainQualified<Record<Address, Record<Address, bigint>>>> {\n return await spanRootAsync('transferSummary', async () => {\n const headHash = isChainQualifiedHeadConfig(config) ? config.head : await blockViewer.currentBlockHash()\n const [head] = assertEx(await blockViewer.blockByHash(headHash), () => `Block not found for hash: ${headHash}`)\n const headBoundWitness = asBlockBoundWitnessWithStorageMeta(head, () => `Found Block not a BlockWithHashMeta: ${headHash}`)\n const range = isChainQualifiedRangeConfig(config) ? config.range : asXL1BlockRange([0, headBoundWitness.block], true)\n const ranges = deepCalculateFramesFromRange(asXL1BlockRange(\n range,\n { name: 'transfersSummary' },\n ))\n const summaries = await Promise.all(ranges.map(range => transfersStepSummaryFromRange(context, semaphores, blockViewer, summaryMap, range)))\n const transfers: Record<Address, Record<Address, bigint>> = {}\n for (let summary of summaries) {\n for (const [from, toMap] of Object.entries(summary.transfers)) {\n const validFrom = asAddress(from, () => `Invalid address: ${from}`)\n transfers[validFrom] = transfers[validFrom] ?? {}\n for (const [to, transfer] of Object.entries(toMap)) {\n const validTo = asAddress(to, () => `Invalid address: ${to}`)\n transfers[validFrom][validTo] = (transfers[validFrom][validTo] ?? 0n) + parseSignedBigInt(transfer)\n }\n }\n }\n return [transfers, { range, head: headHash }]\n }, { ...context, timeBudgetLimit: 500 })\n}\n","import type { Hash } from '@xylabs/sdk-js'\nimport {\n assertEx, exists, isUndefined,\n} from '@xylabs/sdk-js'\nimport type {\n Payload, ReadArchivist, WithHashMeta,\n} from '@xyo-network/sdk-js'\nimport {\n asSignedHydratedBlockWithHashMeta, asSignedHydratedBlockWithStorageMeta, asXL1BlockNumber,\n BlockContextRead,\n BlockRate, BlockViewer, BlockViewerMoniker, ChainContextRead,\n ChainId, DataLakeViewer, DataLakeViewerMoniker, FinalizationViewer, FinalizationViewerMoniker, type SignedHydratedBlockWithHashMeta,\n SignedHydratedBlockWithStorageMeta, SingleTimeConfig, TimeDurations, type XL1BlockNumber, XL1BlockRange,\n} from '@xyo-network/xl1-protocol-lib'\n\nimport { hydrateBlock } from '../../block/index.ts'\nimport type { CreatableProviderParams } from '../../CreatableProvider/index.ts'\nimport { AbstractCreatableProvider, creatableProvider } from '../../CreatableProvider/index.ts'\nimport { LruCacheMap } from '../../driver/index.ts'\nimport { ChainStoreRead } from '../../model/index.ts'\nimport {\n addDataLakePayloads,\n addDataLakePayloadsToPayloads,\n calculateBlockRate, calculateStepSizeRate, calculateTimeRate, hydratedBlockByNumber,\n} from '../../primitives/index.ts'\nimport { HydratedCache } from '../../utils/index.ts'\n\n/** Parameters for SimpleBlockViewer. */\nexport interface SimpleBlockViewerParams extends CreatableProviderParams {\n finalizedArchivist: ReadArchivist\n}\n\n/** SimpleBlockViewer implementation. */\n@creatableProvider()\nexport class SimpleBlockViewer extends AbstractCreatableProvider<SimpleBlockViewerParams> implements BlockViewer {\n static readonly defaultMoniker = BlockViewerMoniker\n static readonly dependencies = [FinalizationViewerMoniker]\n static readonly monikers = [BlockViewerMoniker]\n moniker = SimpleBlockViewer.defaultMoniker\n\n protected _store?: ChainStoreRead\n protected dataLakeViewer?: DataLakeViewer\n protected finalizationViewer!: FinalizationViewer\n protected payloadCache = new LruCacheMap<Hash, WithHashMeta<Payload>>({ max: 10_000 })\n protected signedHydratedBlockWithDataLakePayloadsCache = new LruCacheMap<Hash, SignedHydratedBlockWithHashMeta>({ max: 2000, ttl: 1000 * 60 * 60 })\n\n private _signedHydratedBlockCache: HydratedCache<SignedHydratedBlockWithStorageMeta> | undefined\n\n get finalizedArchivist(): ReadArchivist {\n return this.params.finalizedArchivist\n }\n\n protected get hydratedBlockCache(): HydratedCache<SignedHydratedBlockWithStorageMeta> {\n if (this._signedHydratedBlockCache) return this._signedHydratedBlockCache\n const context = this.getBlockContextRead()\n this._signedHydratedBlockCache = new HydratedCache<SignedHydratedBlockWithStorageMeta>(context, async (\n context,\n hash: Hash,\n maxDepth?: number,\n minDepth?: number,\n ) => {\n const result = await hydrateBlock(context, hash, maxDepth, minDepth)\n return asSignedHydratedBlockWithStorageMeta(result, true)\n }, 20_000)\n return this._signedHydratedBlockCache\n }\n\n protected get store() {\n return this._store!\n }\n\n static override async paramsHandler(params: Partial<SimpleBlockViewerParams>) {\n return {\n ...await super.paramsHandler(params),\n finalizedArchivist: assertEx(params.finalizedArchivist, () => 'finalizedArchivist is required'),\n } satisfies SimpleBlockViewerParams\n }\n\n async blockByHash(hash: Hash): Promise<SignedHydratedBlockWithHashMeta | null> {\n return await this.spanAsync('blockByHash', async () => {\n const cachedBlock = this.signedHydratedBlockWithDataLakePayloadsCache.get(hash)\n if (cachedBlock) {\n return cachedBlock\n }\n\n const cache = this.hydratedBlockCache\n const block = await cache.get(hash)\n const [result] = block ? await addDataLakePayloads(block, this.dataLakeViewer) : [null, []]\n if (result) {\n this.signedHydratedBlockWithDataLakePayloadsCache.set(hash, result)\n }\n return result\n }, { ...this.context, timeBudgetLimit: 100 })\n }\n\n async blockByNumber(blockNumber: XL1BlockNumber): Promise<SignedHydratedBlockWithHashMeta | null> {\n return await this.spanAsync('blockByNumber', async () => {\n const chainContext = await this.getChainContextRead()\n if (isUndefined(chainContext.head)) {\n return null\n }\n return await this.blockByNumberWithContext(chainContext, blockNumber)\n }, { ...this.context, timeBudgetLimit: 100 })\n }\n\n async blocksByHash(hash: Hash, limit = 50): Promise<SignedHydratedBlockWithHashMeta[]> {\n return await this.spanAsync('blocksByHash', async () => {\n assertEx(limit > 0, () => 'limit must be greater than 0')\n assertEx(limit <= 100, () => 'limit must be less than 100')\n const blocks: SignedHydratedBlockWithHashMeta[] = []\n let current = await this.blockByHash(hash)\n while (current && blocks.length < limit) {\n blocks.push(current)\n const previousHash = current[0].previous\n if (previousHash === null) break\n current = await this.blockByHash(previousHash)\n }\n return blocks.map(b => asSignedHydratedBlockWithHashMeta(b, true))\n }, { ...this.context, timeBudgetLimit: 300 })\n }\n\n async blocksByNumber(blockNumber: XL1BlockNumber, limit = 50): Promise<SignedHydratedBlockWithHashMeta[]> {\n return await this.spanAsync('blocksByNumber', async () => {\n assertEx(limit > 0, () => 'limit must be greater than 0')\n assertEx(limit <= 100, () => 'limit must be less than 100')\n const chainContext = await this.getChainContextRead()\n if (isUndefined(chainContext.head)) {\n return []\n }\n const blocks: SignedHydratedBlockWithHashMeta[] = []\n let current = await this.blockByNumberWithContext(chainContext, blockNumber)\n while (current && blocks.length < limit) {\n blocks.push(current)\n if (current[0].block === 0) break\n const previousNumber = asXL1BlockNumber(current[0].block - 1, true)\n current = await this.blockByNumberWithContext(chainContext, previousNumber)\n }\n return blocks.map(b => asSignedHydratedBlockWithHashMeta(b, true))\n }, this.context)\n }\n\n chainId(): Promise<ChainId>\n chainId(blockNumber: XL1BlockNumber): Promise<ChainId>\n chainId(blockNumber: 'latest'): Promise<ChainId>\n async chainId(blockNumber: XL1BlockNumber | 'latest' = 'latest'): Promise<ChainId> {\n return await this.spanAsync('chainId', async () => {\n return blockNumber === 'latest' ? (await this.finalizationViewer.headBlock()).chain : assertEx((await this.blockByNumber(blockNumber)), () => `Block not found [${blockNumber}]`)[0].chain\n }, this.context)\n }\n\n override async createHandler() {\n await super.createHandler()\n this.dataLakeViewer = await this.locator.tryGetInstance<DataLakeViewer>(DataLakeViewerMoniker)\n this.finalizationViewer = await this.locator.getInstance<FinalizationViewer>(FinalizationViewerMoniker)\n this._store = { chainMap: this.params.finalizedArchivist }\n }\n\n async currentBlock(): Promise<SignedHydratedBlockWithHashMeta> {\n const [result] = await addDataLakePayloads(await this.finalizationViewer.head(), this.dataLakeViewer)\n return result\n }\n\n async currentBlockHash(): Promise<Hash> {\n return await this.finalizationViewer.headHash()\n }\n\n async currentBlockNumber(): Promise<XL1BlockNumber> {\n return await this.finalizationViewer.headNumber()\n }\n\n async payloadByHash(hash: Hash): Promise<WithHashMeta<Payload> | null> {\n const [payload] = await this.payloadsByHash([hash])\n return payload ?? null\n }\n\n async payloadsByHash(hashes: Hash[]): Promise<WithHashMeta<Payload>[]> {\n let remainingHashes = [...hashes]\n const cachedPayloads = this.payloadCache.getMany(remainingHashes)\n const cachedHashes = new Set(cachedPayloads.map(p => p._hash))\n remainingHashes = remainingHashes.filter(h => !cachedHashes.has(h))\n const finalizedPayloads = remainingHashes.length > 0\n ? await this.finalizedArchivist.get(remainingHashes)\n : []\n const [resultPayloads] = await addDataLakePayloadsToPayloads(hashes, [...cachedPayloads, ...finalizedPayloads.filter(exists)], this.dataLakeViewer)\n resultPayloads.map((payload) => {\n this.payloadCache.set(payload._hash, payload)\n })\n return resultPayloads\n }\n\n async rate(range: XL1BlockRange, timeUnit?: keyof TimeDurations): Promise<BlockRate> {\n return await calculateBlockRate(this, range, timeUnit)\n }\n\n async stepSizeRate(start: XL1BlockNumber, stepIndex: number, count = 1, timeUnit?: keyof TimeDurations): Promise<BlockRate> {\n return await calculateStepSizeRate(this, start, stepIndex, count, timeUnit)\n }\n\n async timeDurationRate(\n timeConfig: SingleTimeConfig,\n startBlockNumber?: XL1BlockNumber,\n timeUnit?: keyof TimeDurations,\n toleranceMs?: number,\n maxAttempts?: number,\n ): Promise<BlockRate> {\n return await calculateTimeRate(this, timeConfig, startBlockNumber, timeUnit, toleranceMs, maxAttempts)\n }\n\n protected getBlockContextRead(): BlockContextRead {\n return {\n ...this.context,\n chainMap: this.store.chainMap,\n }\n }\n\n protected async getChainContextRead(): Promise<ChainContextRead> {\n return {\n ...this.getBlockContextRead(),\n head: (await this.finalizationViewer.head())[0],\n }\n }\n\n private async blockByNumberWithContext(\n chainContext: ChainContextRead,\n blockNumber: XL1BlockNumber,\n ): Promise<SignedHydratedBlockWithHashMeta | null> {\n const block = asSignedHydratedBlockWithHashMeta(await hydratedBlockByNumber(chainContext, blockNumber)) ?? null\n const [result] = block ? await addDataLakePayloads(block, this.dataLakeViewer) : [null, []]\n return result\n }\n}\n","import type { Hash } from '@xylabs/sdk-js'\nimport type { BlockContextRead } from '@xyo-network/xl1-protocol-lib'\nimport { LRUCache } from 'lru-cache'\n\n/** Function type for Hydrate operations. */\nexport type HydrateFunction<T> = (\n context: BlockContextRead,\n hash: Hash,\n) => Promise<T | undefined>\n\n/** HydratedCache implementation. */\nexport class HydratedCache<T extends {}> {\n protected readonly cache: LRUCache<Hash, T>\n protected context: BlockContextRead\n protected readonly hydrateFunction: HydrateFunction<T>\n\n constructor(\n context: BlockContextRead,\n hydrateFunction: HydrateFunction<T>,\n maxCount: number = 2000,\n ttl: number = Number.MAX_SAFE_INTEGER,\n ) {\n this.context = context\n this.hydrateFunction = hydrateFunction\n this.cache = new LRUCache<Hash, T>({ max: maxCount, ttl })\n }\n\n async get(hash: Hash): Promise<T | null> {\n const existing = this.cache.get(hash)\n if (existing !== undefined) return existing\n const block = (await this.hydrateFunction(this.context, hash)) ?? null\n if (block !== null) this.cache.set(hash, block)\n return block\n }\n\n has(hash: Hash): boolean {\n return this.cache.has(hash)\n }\n}\n","import { z } from 'zod'\n\n/** Type guard that checks if a value is a valid ZodError. */\nexport const isZodError = (error: unknown): error is z.ZodError => {\n return error instanceof z.ZodError\n}\n\n/** prettifyZodError constant. */\nexport const prettifyZodError = (error: z.ZodError): string => {\n return z.prettifyError(error)\n}\n","import { Promisable } from '@xylabs/sdk-js'\nimport {\n AttoXL1, BlockRewardViewer, BlockRewardViewerMoniker, XL1BlockNumber,\n} from '@xyo-network/xl1-protocol-lib'\n\nimport {\n AbstractCreatableProvider, creatableProvider, CreatableProviderParams,\n} from '../../CreatableProvider/index.ts'\nimport { rewardFromBlockNumber } from '../../primitives/index.ts'\n\n/** Parameters for SimpleBlockRewardViewer. */\nexport interface SimpleBlockRewardViewerParams extends CreatableProviderParams {}\n\n/** SimpleBlockRewardViewer implementation. */\n@creatableProvider()\nexport class SimpleBlockRewardViewer extends AbstractCreatableProvider<SimpleBlockRewardViewerParams> implements BlockRewardViewer {\n static readonly defaultMoniker = BlockRewardViewerMoniker\n static readonly dependencies = []\n static readonly monikers = [BlockRewardViewerMoniker]\n moniker = SimpleBlockRewardViewer.defaultMoniker\n\n allowedRewardForBlock(block: XL1BlockNumber): Promisable<AttoXL1> {\n return rewardFromBlockNumber(\n block,\n )\n }\n}\n","import { assertEx, Promisable } from '@xylabs/sdk-js'\nimport { PayloadBuilder } from '@xyo-network/sdk-js'\nimport {\n AccountBalanceViewer,\n AccountBalanceViewerMoniker,\n asXL1BlockRange,\n BlockValidationConfig,\n BlockValidationQualification,\n BlockValidationViewer,\n BlockValidationViewerMoniker,\n BlockViewer,\n BlockViewerMoniker,\n ChainContractViewer,\n ChainContractViewerMoniker,\n ChainId,\n HydratedBlockStateValidationFunction,\n HydratedBlockValidationError,\n HydratedBlockValidationFunction,\n isChainQualifiedHeadConfig,\n isHydratedBlock,\n SignedHydratedBlock,\n type SignedHydratedBlockWithHashMeta,\n XL1BlockNumber,\n} from '@xyo-network/xl1-protocol-lib'\n\nimport type { CreatableProviderParams } from '../../CreatableProvider/index.ts'\nimport { AbstractCreatableProvider, creatableProvider } from '../../CreatableProvider/index.ts'\nimport { findUncles, getWindowedChain } from '../../primitives/index.ts'\n\n/** Parameters for SimpleBlockValidationViewer. */\nexport interface SimpleBlockValidationViewerParams extends CreatableProviderParams {\n maxUncleWindowSize?: number\n protocol?: HydratedBlockValidationFunction\n state?: HydratedBlockStateValidationFunction\n}\n\n/** SimpleBlockValidationViewer implementation. */\n@creatableProvider()\nexport class SimpleBlockValidationViewer extends AbstractCreatableProvider<SimpleBlockValidationViewerParams> implements BlockValidationViewer {\n static readonly defaultMoniker = BlockValidationViewerMoniker\n static readonly dependencies = [AccountBalanceViewerMoniker, BlockViewerMoniker, ChainContractViewerMoniker]\n static readonly monikers = [BlockValidationViewerMoniker]\n moniker = SimpleBlockValidationViewer.defaultMoniker\n\n private _accountBalanceViewer!: AccountBalanceViewer\n private _blockViewer!: BlockViewer\n private _chainContractViewer!: ChainContractViewer\n private _uncleWindowedChainCache: SignedHydratedBlockWithHashMeta[] | null = null\n\n protected get blockViewer() {\n return this._blockViewer\n }\n\n protected get chainContractViewer() {\n return this._chainContractViewer\n }\n\n protected get maxUncleWindowSize() {\n return this.params.maxUncleWindowSize!\n }\n\n static override async paramsHandler(params: Partial<SimpleBlockValidationViewerParams>): Promise<SimpleBlockValidationViewerParams> {\n return {\n ...await super.paramsHandler(params),\n protocol: params.protocol,\n state: params.state,\n maxUncleWindowSize: params.maxUncleWindowSize ?? 100,\n } satisfies SimpleBlockValidationViewerParams\n }\n\n override async createHandler() {\n await super.createHandler()\n this._accountBalanceViewer = await this.locator.getInstance<AccountBalanceViewer>(AccountBalanceViewerMoniker)\n this._blockViewer = await this.locator.getInstance<BlockViewer>(BlockViewerMoniker)\n this._chainContractViewer = await this.locator.getInstance<ChainContractViewer>(ChainContractViewerMoniker)\n }\n\n async qualifiedValidateBlock(\n block: SignedHydratedBlockWithHashMeta,\n config?: BlockValidationConfig,\n ): Promise<[HydratedBlockValidationError[] | SignedHydratedBlockWithHashMeta, BlockValidationQualification]> {\n const result = (await this.qualifiedValidateBlocks([block], config))\n return [result[0][0], result[1]]\n }\n\n async qualifiedValidateBlocks(\n blocks: SignedHydratedBlock[],\n config?: BlockValidationConfig,\n ): Promise<[(HydratedBlockValidationError[] | SignedHydratedBlockWithHashMeta)[], BlockValidationQualification]> {\n const { value, state } = config ?? {\n shape: true, links: true, state: true, head: undefined,\n }\n\n const blocksWithMeta = await Promise.all(blocks.map(b => Promise.all([PayloadBuilder.addHashMeta(b[0]), PayloadBuilder.addHashMeta(b[1])])))\n\n const head = isChainQualifiedHeadConfig(config)\n ? assertEx(\n (await this.blockViewer.blockByHash(config.head))?.[0],\n () => `Specified a head that is not in the chain [${config.head}]`,\n )\n : undefined\n\n const headBlock = head ?? (await this.blockViewer.currentBlock())[0]\n\n const validateProtocol = value ? this.doValidateProtocol.bind(this) : undefined\n const validateState = state ? this.doValidateState.bind(this) : undefined\n\n const chainIdAtBlockNumber = (blockNumber: XL1BlockNumber) => this.chainContractViewer.chainIdAtBlockNumber(blockNumber)\n\n const qualification = { head: headBlock._hash, range: asXL1BlockRange([0, headBlock.block], true) }\n const [protocolResults, stateResults] = await Promise.all([\n validateProtocol?.(blocksWithMeta, chainIdAtBlockNumber), validateState?.(blocksWithMeta, chainIdAtBlockNumber),\n ])\n const blockResults = blocksWithMeta.map((r, i) => {\n const errors = []\n if (protocolResults && !isHydratedBlock(protocolResults[i])) {\n errors.push(...(protocolResults[i]))\n }\n if (stateResults && !isHydratedBlock(stateResults[i])) {\n errors.push(...(stateResults[i]))\n }\n return errors.length === 0 ? r : errors\n })\n return [blockResults, qualification]\n }\n\n qualifiedValidateUncle(\n _blocks: SignedHydratedBlock[],\n _config?: BlockValidationConfig,\n ): Promise<[(HydratedBlockValidationError[] | SignedHydratedBlockWithHashMeta)[], BlockValidationQualification]> {\n throw new Error('Method not implemented.')\n }\n\n async validateBlock(block: SignedHydratedBlock, config?: BlockValidationConfig): Promise<HydratedBlockValidationError[] | SignedHydratedBlockWithHashMeta> {\n return (await this.validateBlocks([block], config))[0]\n }\n\n async validateBlocks(\n blocks: SignedHydratedBlock[],\n config?: BlockValidationConfig,\n ): Promise<(HydratedBlockValidationError[] | SignedHydratedBlockWithHashMeta)[]> {\n return (await this.qualifiedValidateBlocks(blocks, config))[0]\n }\n\n async validateUncle(\n blocks: SignedHydratedBlock[],\n config?: BlockValidationConfig,\n ): Promise<(HydratedBlockValidationError[] | SignedHydratedBlockWithHashMeta)[]> {\n return (await this.qualifiedValidateUncle(blocks, config))[0]\n }\n\n private async doValidateProtocol(\n blocks: SignedHydratedBlockWithHashMeta[],\n chainIdAtBlockNumber: (blockNumber: XL1BlockNumber) => Promisable<ChainId>,\n ): Promise<(SignedHydratedBlockWithHashMeta | HydratedBlockValidationError[])[]> {\n return (await Promise.all(blocks.map(async (block) => {\n const errors = await this.params.protocol!(\n this.context,\n block,\n chainIdAtBlockNumber,\n )\n return (errors.length === 0) ? block : errors\n })))\n }\n\n private async doValidateState(\n blocks: SignedHydratedBlockWithHashMeta[],\n chainIdAtBlockNumber: (blockNumber: XL1BlockNumber) => Promisable<ChainId>,\n ): Promise<(SignedHydratedBlockWithHashMeta | HydratedBlockValidationError[])[]> {\n const windowedUncleChain = await this.updateWindowedChainCache()\n\n const uncles = findUncles(this.context, windowedUncleChain, blocks)\n\n if (uncles.length !== 1) {\n this.logger?.warn(JSON.stringify({ uncles, blocks: blocks.length }, null, 2))\n // this.logger?.warn(JSON.stringify(windowedUncleChain, null, 2))\n throw new Error(`No uncles or greater than one uncle found in block validation, which is not supported [${uncles.length}, ${blocks.length}]`)\n }\n return (await Promise.all(uncles[0].map(async (block) => {\n const errors = await this.params.state!(\n {\n ...this.context, chainIdAtBlockNumber, accountBalance: this._accountBalanceViewer,\n },\n block,\n )\n return (errors.length === 0) ? block : errors\n })))\n }\n\n private async updateWindowedChainCache() {\n this._uncleWindowedChainCache = await getWindowedChain(this.context, this.blockViewer, this.maxUncleWindowSize, this._uncleWindowedChainCache ?? [])\n return [...this._uncleWindowedChainCache]\n }\n}\n","import {\n type Address, assertEx,\n type Hash,\n} from '@xylabs/sdk-js'\nimport {\n ChainContractViewer, ChainContractViewerMoniker, ChainId, FinalizationViewer, FinalizationViewerMoniker, XL1BlockNumber,\n} from '@xyo-network/xl1-protocol-lib'\n\nimport { withContextCacheResponse } from '../../ChainContextHelpers.ts'\nimport {\n AbstractCreatableProvider, creatableProvider, CreatableProviderParams,\n} from '../../CreatableProvider/index.ts'\n\n/** Parameters for SimpleChainContractViewer. */\nexport interface SimpleChainContractViewerParams extends CreatableProviderParams {\n forkedAtBlockNumber?: XL1BlockNumber\n forkedAtHash?: Hash\n forkedChainContractViewer?: ChainContractViewer\n forkedChainId?: ChainId\n minWithdrawalBlocks: number\n rewardsContract: Address\n stakingTokenAddress: Address\n}\n\n/**\n * A class that represents a chain stake as backed by an EVM smart contract\n */\n@creatableProvider()\nexport class SimpleChainContractViewer extends AbstractCreatableProvider<SimpleChainContractViewerParams> implements ChainContractViewer {\n static readonly defaultMoniker = ChainContractViewerMoniker\n static readonly dependencies = [FinalizationViewerMoniker]\n static readonly monikers = [ChainContractViewerMoniker]\n override moniker = SimpleChainContractViewer.defaultMoniker\n\n protected _finalizationViewer!: FinalizationViewer\n\n protected get finalizationViewer() {\n return this._finalizationViewer\n }\n\n chainId() {\n return this.finalizationViewer.chainId()\n }\n\n async chainIdAtBlockNumber(blockNumber: XL1BlockNumber) {\n return await withContextCacheResponse(this.context, 'chainIdAtBlockNumber', `${blockNumber}`, async () => {\n let chainId = this.chainId()\n // eslint-disable-next-line unicorn/no-this-assignment, @typescript-eslint/no-this-alias\n let contractViewer: ChainContractViewer = this\n let forkedAtBlockNumber = await contractViewer.forkedAtBlockNumber()\n while (forkedAtBlockNumber !== null && blockNumber <= forkedAtBlockNumber) {\n contractViewer = assertEx(await contractViewer.forkedChainContractViewer())\n forkedAtBlockNumber = await contractViewer.forkedAtBlockNumber()\n chainId = await contractViewer.chainId()\n }\n return chainId\n })\n }\n\n override async createHandler() {\n this._finalizationViewer = await this.locator.getInstance(FinalizationViewerMoniker)\n return await super.createHandler()\n }\n\n forkedAtBlockNumber() {\n return this.params.forkedAtBlockNumber ?? null\n }\n\n forkedAtHash() {\n return this.params.forkedAtHash ?? null\n }\n\n forkedChainContractViewer() {\n return this.params.forkedChainContractViewer ?? null\n }\n\n forkedChainId() {\n return this.params.forkedChainId ?? null\n }\n\n minWithdrawalBlocks() {\n return this.params.minWithdrawalBlocks\n }\n\n rewardsContract() {\n return this.params.rewardsContract\n }\n\n stakingTokenAddress() {\n return this.params.stakingTokenAddress\n }\n}\n","import type {\n XyoClient, XyoGatewayRunner, XyoPermissions,\n} from '@xyo-network/xl1-protocol-lib'\n\n/** SimpleXyoClient implementation. */\nexport class SimpleXyoClient implements XyoClient {\n gateways: Readonly<Partial<Record<string, XyoGatewayRunner>>>\n permissions: XyoPermissions\n\n constructor(gateways: Readonly<Partial<Record<string, XyoGatewayRunner>>>, permissions: XyoPermissions) {\n this.gateways = gateways\n this.permissions = permissions\n }\n}\n","import {\n assertEx, BrandedHash, exists, type Hash,\n Promisable,\n PromisableArray,\n} from '@xylabs/sdk-js'\nimport { isAnyPayload, PayloadZodLoose } from '@xyo-network/sdk-js'\nimport {\n DataLakeData,\n DataLakeRunner,\n DataLakeRunnerMoniker,\n} from '@xyo-network/xl1-protocol-lib'\nimport { AxiosResponse } from 'axios'\nimport z from 'zod'\n\nimport { creatableProvider } from '../../CreatableProvider/index.ts'\nimport { AbstractRestDataLake } from './AbstractRestDataLake.ts'\nimport { RestDataLakeViewerParams } from './RestDataLakeViewer.ts'\n\n/** Parameters for RestDataLakeRunner. */\nexport interface RestDataLakeRunnerParams extends RestDataLakeViewerParams {}\n\n/** RestDataLakeRunner implementation. */\n@creatableProvider()\nexport class RestDataLakeRunner<TParams extends RestDataLakeRunnerParams> extends\n AbstractRestDataLake<TParams> implements DataLakeRunner {\n static readonly defaultMoniker = DataLakeRunnerMoniker\n static readonly dependencies = []\n static readonly monikers = [DataLakeRunnerMoniker]\n moniker = RestDataLakeRunner.defaultMoniker\n\n clear(): Promisable<void> {\n throw new Error('Method not implemented.')\n }\n\n delete(_hashes: BrandedHash[]): PromisableArray<DataLakeData> {\n throw new Error('Method not implemented.')\n }\n\n async insert(items: DataLakeData[]): Promise<DataLakeData[]> {\n const allowedItems = items.map((item) => {\n if (isAnyPayload(item) && this.isAllowed(item)) {\n assertEx(typeof item === 'object' && item !== null, () => 'Data must be an object')\n return item\n }\n return null\n }).filter(exists)\n if (allowedItems.length > 0) {\n const result = await this.axios.post<DataLakeData[], AxiosResponse<Hash[]>>(`${this.params.endpoint}/insert`, allowedItems)\n return z.array(PayloadZodLoose).parse(result.data)\n } else {\n return []\n }\n }\n}\n","import { axiosJsonConfig } from '@xylabs/sdk-js'\nimport {\n exists, type Hash, type PromisableArray,\n} from '@xylabs/sdk-js'\nimport type {\n NextOptions, Schema, Sequence,\n} from '@xyo-network/sdk-js'\nimport { asAnyPayload, isAnyPayload } from '@xyo-network/sdk-js'\nimport type { DataLakeData, DataLakeViewer } from '@xyo-network/xl1-protocol-lib'\nimport { Axios } from 'axios'\n\nimport { AbstractCreatableProvider, type CreatableProviderParams } from '../../CreatableProvider/index.ts'\n\n/** Parameters for AbstractRestDataLake. */\nexport interface AbstractRestDataLakeParams extends\n CreatableProviderParams {\n\n allowedSchemas?: Schema[]\n disallowedSchemas?: Schema[]\n endpoint: string\n}\n\n/** Abstract base class for RestDataLake implementations. */\nexport abstract class AbstractRestDataLake<TParams extends AbstractRestDataLakeParams = AbstractRestDataLakeParams> extends\n AbstractCreatableProvider<TParams> implements Omit<DataLakeViewer, 'moniker'> {\n get allowedSchemas(): Schema[] | undefined {\n return this.params.allowedSchemas\n }\n\n get axios() {\n return new Axios(axiosJsonConfig())\n }\n\n get disallowedSchemas(): Schema[] | undefined {\n return this.params.disallowedSchemas\n }\n\n get endpoint() {\n return this.params.endpoint\n }\n\n async get(hashes: Hash[]): Promise<DataLakeData[]> {\n return (await Promise.all(hashes.map(hash => this.getOne(hash)))).filter(exists)\n }\n\n next(_options?: NextOptions<Sequence> | undefined): PromisableArray<DataLakeData> {\n throw new Error('Method not implemented.')\n }\n\n protected async getOne(hash: Hash): Promise<DataLakeData | undefined> {\n return asAnyPayload((await this.axios.get(`${this.params.endpoint}/get/${hash}`)).data)\n }\n\n protected isAllowed(value: DataLakeData | undefined): boolean {\n if (isAnyPayload(value)) {\n return this.isAllowedSchema(value.schema)\n }\n return false\n }\n\n protected isAllowedSchema(schema: Schema): boolean {\n if (this.allowedSchemas && !this.allowedSchemas.includes(schema)) {\n return false\n }\n if (this.disallowedSchemas && this.disallowedSchemas.includes(schema)) {\n return false\n }\n return true\n }\n}\n","import {\n DataLakeViewer,\n DataLakeViewerMoniker,\n} from '@xyo-network/xl1-protocol-lib'\n\nimport { creatableProvider } from '../../CreatableProvider/index.ts'\nimport { AbstractRestDataLake, AbstractRestDataLakeParams } from './AbstractRestDataLake.ts'\n\n/** Parameters for RestDataLakeViewer. */\nexport interface RestDataLakeViewerParams extends\n AbstractRestDataLakeParams {\n}\n\n/** RestDataLakeViewer implementation. */\n@creatableProvider()\nexport class RestDataLakeViewer<TParams extends RestDataLakeViewerParams = RestDataLakeViewerParams>\n extends AbstractRestDataLake<TParams> implements DataLakeViewer {\n static readonly defaultMoniker = DataLakeViewerMoniker\n static readonly dependencies = []\n static readonly monikers = [DataLakeViewerMoniker]\n moniker = RestDataLakeViewer.defaultMoniker\n}\n","import { exists, type Hash } from '@xylabs/sdk-js'\nimport { isAnyPayload, PayloadBuilder } from '@xyo-network/sdk-js'\nimport {\n DataLakeData,\n DataLakeRunner,\n DataLakeRunnerMoniker, MapType,\n} from '@xyo-network/xl1-protocol-lib'\n\nimport { creatableProvider } from '../../CreatableProvider/index.ts'\nimport { AbstractSimpleDataLake } from './AbstractSimpleDataLake.ts'\nimport { SimpleDataLakeViewerParams } from './SimpleDataLakeViewer.ts'\n\n/** Parameters for SimpleDataLakeRunner. */\nexport interface SimpleDataLakeRunnerParams extends SimpleDataLakeViewerParams<MapType<Hash, DataLakeData>> {}\n\n/** SimpleDataLakeRunner implementation. */\n@creatableProvider()\nexport class SimpleDataLakeRunner<TParams extends SimpleDataLakeRunnerParams> extends\n AbstractSimpleDataLake<TParams> implements DataLakeRunner {\n static readonly defaultMoniker = DataLakeRunnerMoniker\n static readonly dependencies = []\n static readonly monikers = [DataLakeRunnerMoniker]\n moniker = SimpleDataLakeRunner.defaultMoniker\n\n async clear(): Promise<void> {\n await this.map.clear()\n }\n\n async delete(hashes: Hash[]) {\n return (await Promise.all(hashes.map(async (hash) => {\n const payload = await this.map.get(hash)\n return (await this.map.delete(hash)) ? payload : undefined\n }))).filter(exists)\n }\n\n async insert(items: DataLakeData[]) {\n const payloads = items.filter(isAnyPayload).filter(i => this.isAllowed(i))\n const hashPairs = await PayloadBuilder.hashPairs(payloads)\n for (const [payload, hash] of hashPairs) {\n await this.map.set(hash, payload)\n }\n return hashPairs.map(([payload]) => payload)\n }\n}\n","import type { Hash, PromisableArray } from '@xylabs/sdk-js'\nimport type {\n NextOptions, Schema, Sequence,\n} from '@xyo-network/sdk-js'\nimport { isAnyPayload } from '@xyo-network/sdk-js'\nimport type {\n DataLakeData, DataLakeViewer, MapTypeRead,\n} from '@xyo-network/xl1-protocol-lib'\n\nimport { AbstractCreatableProvider, type CreatableProviderParams } from '../../CreatableProvider/index.ts'\n\n/** Parameters for AbstractSimpleDataLake. */\nexport interface AbstractSimpleDataLakeParams<TMap extends\nMapTypeRead<Hash, DataLakeData> = MapTypeRead<Hash, DataLakeData>> extends\n CreatableProviderParams {\n\n allowedSchemas?: Schema[]\n disallowedSchemas?: Schema[]\n map: TMap\n}\n\n/** Abstract base class for SimpleDataLake implementations. */\nexport abstract class AbstractSimpleDataLake<TParams extends AbstractSimpleDataLakeParams = AbstractSimpleDataLakeParams> extends\n AbstractCreatableProvider<TParams> implements Omit<DataLakeViewer, 'moniker'> {\n get allowedSchemas(): Schema[] | undefined {\n return this.params.allowedSchemas\n }\n\n get disallowedSchemas(): Schema[] | undefined {\n return this.params.disallowedSchemas\n }\n\n protected get map(): TParams['map'] {\n return this.params.map\n }\n\n async get(hashes: Hash[]): Promise<DataLakeData[]> {\n const result = await this.map.getMany(hashes)\n return result.filter(data => this.isAllowed(data))\n }\n\n next(_options?: NextOptions<Sequence> | undefined): PromisableArray<DataLakeData> {\n throw new Error('Method not implemented.')\n }\n\n protected isAllowed(value: DataLakeData | undefined): boolean {\n if (isAnyPayload(value)) {\n return this.isAllowedSchema(value.schema)\n }\n return true\n }\n\n protected isAllowedSchema(schema: Schema): boolean {\n if (this.allowedSchemas && !this.allowedSchemas.includes(schema)) {\n return false\n }\n if (this.disallowedSchemas && this.disallowedSchemas.includes(schema)) {\n return false\n }\n return true\n }\n}\n","import type { Hash } from '@xylabs/sdk-js'\nimport {\n DataLakeData,\n DataLakeViewer,\n DataLakeViewerMoniker, MapTypeRead,\n} from '@xyo-network/xl1-protocol-lib'\n\nimport { creatableProvider } from '../../CreatableProvider/index.ts'\nimport { AbstractSimpleDataLake, AbstractSimpleDataLakeParams } from './AbstractSimpleDataLake.ts'\n\n/** Parameters for SimpleDataLakeViewer. */\nexport interface SimpleDataLakeViewerParams<TMap extends MapTypeRead<Hash, DataLakeData> = MapTypeRead<Hash, DataLakeData>> extends\n AbstractSimpleDataLakeParams<TMap> {\n}\n\n/** SimpleDataLakeViewer implementation. */\n@creatableProvider()\nexport class SimpleDataLakeViewer<TParams extends SimpleDataLakeViewerParams = SimpleDataLakeViewerParams>\n extends AbstractSimpleDataLake<TParams> implements DataLakeViewer {\n static readonly defaultMoniker = DataLakeViewerMoniker\n static readonly dependencies = []\n static readonly monikers = [DataLakeViewerMoniker]\n moniker = SimpleDataLakeViewer.defaultMoniker\n}\n","import { type Hash } from '@xylabs/sdk-js'\nimport type { ArchivistInstance } from '@xyo-network/sdk-js'\nimport { type SignedHydratedBlockWithHashMeta } from '@xyo-network/xl1-protocol-lib'\nimport { FinalizationRunner, FinalizationRunnerMoniker } from '@xyo-network/xl1-protocol-lib'\n\nimport {\n AbstractCreatableProvider, creatableProvider, CreatableProviderParams,\n} from '../../CreatableProvider/index.ts'\nimport { ChainStoreWrite } from '../../model/index.ts'\n\n/** Parameters for SimpleFinalizationRunner. */\nexport interface SimpleFinalizationRunnerParams extends CreatableProviderParams {\n finalizedArchivist: ArchivistInstance\n}\n\n/** SimpleFinalizationRunner implementation. */\n@creatableProvider()\nexport class SimpleFinalizationRunner extends AbstractCreatableProvider<SimpleFinalizationRunnerParams> implements FinalizationRunner {\n static readonly defaultMoniker = FinalizationRunnerMoniker\n static readonly dependencies = []\n static readonly monikers = [FinalizationRunnerMoniker]\n moniker = SimpleFinalizationRunner.defaultMoniker\n\n protected _store: ChainStoreWrite | undefined\n\n protected get store() {\n return this._store!\n }\n\n override async createHandler() {\n await super.createHandler()\n this._store = { chainMap: this.params.finalizedArchivist }\n }\n\n async finalizeBlock(block: SignedHydratedBlockWithHashMeta): Promise<Hash> {\n return (await this.finalizeBlocks([block]))[0]\n }\n\n async finalizeBlocks(blocks: SignedHydratedBlockWithHashMeta[]): Promise<Hash[]> {\n const sortedBlocks = blocks.toSorted((a, b) => a[0].block - b[0].block)\n const payloads = sortedBlocks.flatMap(block => [...block[1], block[0]])\n await this.store.chainMap.insert(payloads)\n return sortedBlocks.map(b => b[0]._hash)\n }\n}\n","import {\n assertEx,\n Hash,\n} from '@xylabs/sdk-js'\nimport type { ReadArchivist } from '@xyo-network/sdk-js'\nimport {\n asSignedHydratedBlockWithStorageMeta, BlockContextRead, ChainContextRead, ChainContractViewerMoniker, ChainId, FinalizationViewer,\n FinalizationViewerMoniker, type SignedBlockBoundWitnessWithHashMeta, type SignedHydratedBlockWithHashMeta,\n SignedHydratedBlockWithStorageMeta,\n XL1BlockNumber,\n} from '@xyo-network/xl1-protocol-lib'\n\nimport { hydrateBlock } from '../../block/index.ts'\nimport {\n AbstractCreatableProvider, creatableProvider, CreatableProviderParams,\n} from '../../CreatableProvider/index.ts'\nimport { ChainStoreRead } from '../../model/index.ts'\nimport { findMostRecentBlock } from '../../primitives/index.ts'\nimport { HydratedCache } from '../../utils/index.ts'\n\n/** Parameters for SimpleFinalizationViewer. */\nexport interface SimpleFinalizationViewerParams extends CreatableProviderParams {\n finalizedArchivist: ReadArchivist\n}\n\n/** SimpleFinalizationViewer implementation. */\n@creatableProvider()\nexport class SimpleFinalizationViewer extends AbstractCreatableProvider<SimpleFinalizationViewerParams> implements FinalizationViewer {\n static readonly defaultMoniker = FinalizationViewerMoniker\n static readonly dependencies = [ChainContractViewerMoniker]\n static readonly monikers = [FinalizationViewerMoniker]\n moniker = SimpleFinalizationViewer.defaultMoniker\n\n protected _chainId!: ChainId\n protected _store: ChainStoreRead | undefined\n\n private _signedHydratedBlockCache: HydratedCache<SignedHydratedBlockWithStorageMeta> | undefined\n\n protected get finalizedArchivist() {\n return this.params.finalizedArchivist\n }\n\n protected get hydratedBlockCache(): HydratedCache<SignedHydratedBlockWithStorageMeta> {\n if (this._signedHydratedBlockCache) return this._signedHydratedBlockCache\n const context = this.getBlockContextRead()\n this._signedHydratedBlockCache = new HydratedCache<SignedHydratedBlockWithStorageMeta>(context, async (\n store: ChainStoreRead,\n hash: Hash,\n maxDepth?: number,\n minDepth?: number,\n ) => {\n const result = await hydrateBlock(context, hash, maxDepth, minDepth)\n return asSignedHydratedBlockWithStorageMeta(result, true)\n }, 200)\n return this._signedHydratedBlockCache\n }\n\n protected get store() {\n return this._store!\n }\n\n static override async paramsHandler(params: Partial<SimpleFinalizationViewerParams>) {\n return {\n ...await super.paramsHandler(params),\n finalizedArchivist: assertEx(params.finalizedArchivist, () => 'finalizedArchivist is required'),\n } satisfies SimpleFinalizationViewerParams\n }\n\n chainId() {\n return this._chainId\n }\n\n override async createHandler() {\n await super.createHandler()\n this._chainId = assertEx(this.config.chain.id ?? (await findMostRecentBlock(this.params.finalizedArchivist))?.chain, () => 'chain.id is required if empty archivist')\n this._store = { chainMap: this.params.finalizedArchivist }\n }\n\n async head(): Promise<SignedHydratedBlockWithHashMeta> {\n return await this.spanAsync('head', async () => {\n const currentHead = assertEx(await this.getCurrentHead(), () => 'Could not find most recent block [currentBlock]')\n const cache = this.hydratedBlockCache\n const block = await cache.get(currentHead._hash)\n if (!block) {\n console.log(`Could not find current block with hash ${currentHead!._hash}`)\n }\n return assertEx(block, () => 'Could not find current block')\n }, this.context)\n }\n\n async headBlock(): Promise<SignedBlockBoundWitnessWithHashMeta> {\n return (await this.head())[0]\n }\n\n async headHash(): Promise<Hash> {\n return (await this.headBlock())._hash\n }\n\n async headNumber(): Promise<XL1BlockNumber> {\n return (await this.headBlock()).block\n }\n\n protected getBlockContextRead(): BlockContextRead {\n return {\n ...this.context,\n chainMap: this.store.chainMap,\n }\n }\n\n protected async getChainContextRead(): Promise<ChainContextRead> {\n return {\n ...this.getBlockContextRead(),\n head: (await this.head())[0],\n }\n }\n\n protected async getCurrentHead() {\n const chainArchivist = this.finalizedArchivist\n const result = assertEx(await findMostRecentBlock(chainArchivist), () => 'Could not find most recent block [getCurrentHead]')\n assertEx(result?.chain === this._chainId, () => 'Chain ID does not match head block chain ID')\n return result\n }\n}\n","import type {\n XyoConnection,\n XyoGateway,\n} from '@xyo-network/xl1-protocol-lib'\nimport { XyoConnectionMoniker, XyoGatewayMoniker } from '@xyo-network/xl1-protocol-lib'\n\nimport type { CreatableProviderParams } from '../../CreatableProvider/index.ts'\nimport { AbstractCreatableProvider } from '../../CreatableProvider/index.ts'\n\n/** Parameters for SimpleXyoGateway. */\nexport interface SimpleXyoGatewayParams extends CreatableProviderParams {}\n\n/** SimpleXyoGateway implementation. */\nexport class SimpleXyoGateway extends AbstractCreatableProvider<SimpleXyoGatewayParams> implements XyoGateway {\n static readonly defaultMoniker = XyoGatewayMoniker\n static readonly dependencies = [XyoConnectionMoniker]\n static readonly monikers = [XyoGatewayMoniker]\n moniker = SimpleXyoGateway.defaultMoniker\n\n private _connection!: XyoConnection\n\n get connection(): XyoConnection {\n return this._connection\n }\n\n override async createHandler() {\n await super.createHandler()\n this._connection = await this.locator.getInstance<XyoConnection>(XyoConnectionMoniker)\n }\n}\n","import type {\n Address, Hash, Hex,\n} from '@xylabs/sdk-js'\nimport {\n assertEx, BigIntToJsonZod, isDefined,\n} from '@xylabs/sdk-js'\nimport { type Payload, type WithHashMeta } from '@xyo-network/sdk-js'\nimport { PayloadBuilder } from '@xyo-network/sdk-js'\nimport type {\n AllowedBlockPayload, AttoXL1, ConfirmSubmittedTransactionOptions,\n DataLakeRunner, SignedHydratedTransaction, SignedHydratedTransactionWithHashMeta, TransactionOptions, Transfer, UnsignedHydratedTransaction,\n XyoConnection, XyoGatewayRunner, XyoSigner,\n} from '@xyo-network/xl1-protocol-lib'\nimport {\n asXL1BlockNumber, DataLakeRunnerMoniker, isSignedHydratedTransaction, TransferSchema, XyoConnectionMoniker, XyoGatewayMoniker, XyoGatewayRunnerMoniker, XyoSignerMoniker,\n} from '@xyo-network/xl1-protocol-lib'\n\nimport type { CreatableProviderParams } from '../../CreatableProvider/index.ts'\nimport { AbstractCreatableProvider } from '../../CreatableProvider/index.ts'\nimport {\n buildUnsignedTransaction, confirmSubmittedTransaction, flattenHydratedTransaction,\n} from '../../transaction/index.ts'\n\n/** Parameters for SimpleXyoGatewayRunner. */\nexport interface SimpleXyoGatewayRunnerParams extends CreatableProviderParams {\n\n}\n\n/** SimpleXyoGatewayRunner implementation. */\nexport class SimpleXyoGatewayRunner extends AbstractCreatableProvider<SimpleXyoGatewayRunnerParams> implements XyoGatewayRunner {\n static readonly defaultMoniker = XyoGatewayRunnerMoniker\n static readonly dependencies = [XyoConnectionMoniker, XyoSignerMoniker]\n static readonly monikers = [XyoGatewayRunnerMoniker, XyoGatewayMoniker]\n moniker = SimpleXyoGatewayRunner.defaultMoniker\n\n private _connection!: XyoConnection\n private _dataLakeRunner?: DataLakeRunner\n private _signer!: XyoSigner\n\n get connection(): XyoConnection {\n return this._connection\n }\n\n get dataLakeRunner(): DataLakeRunner | undefined {\n return this._dataLakeRunner\n }\n\n get signer(): XyoSigner {\n return this._signer\n }\n\n async addPayloadsToChain(\n onChain: AllowedBlockPayload[],\n offChain: Payload[],\n options?: TransactionOptions,\n ): Promise<[Hash, SignedHydratedTransactionWithHashMeta]> {\n // Get chain providers\n const viewer = assertEx(this.connection.viewer, () => 'No viewer available on connection')\n\n // Resolve transaction options\n const {\n nbf, exp, chain, fees,\n } = options ?? {}\n const resolvedChainId = isDefined(chain) ? chain : await viewer.chainId()\n const resolvedNbf = asXL1BlockNumber(isDefined(nbf) ? nbf : await viewer.currentBlockNumber(), true)\n const resolvedExp = asXL1BlockNumber(isDefined(exp) ? exp : resolvedNbf + 10, true)\n\n // Build, sign, and broadcast the transaction\n const tx = await buildUnsignedTransaction(resolvedChainId, onChain, offChain, resolvedNbf, resolvedExp, await this.signer.address(), fees)\n return await this.addTransactionToChain(tx, await PayloadBuilder.addHashMeta(offChain))\n }\n\n async addTransactionToChain(\n tx: UnsignedHydratedTransaction | SignedHydratedTransaction,\n offChain: WithHashMeta<Payload>[] = [],\n ): Promise<[Hash, SignedHydratedTransactionWithHashMeta]> {\n const connection = this.connection\n\n const signer = this.signer\n const runner = assertEx(connection.runner, () => 'No runner available on connection')\n\n // Prepare for returning the SignedHydratedTransactionWithHashMeta\n let signedTx: SignedHydratedTransactionWithHashMeta\n\n // If the supplied transaction is already signed\n if (isSignedHydratedTransaction(tx)) {\n // Ensure it has hash meta\n const [bw, payloads] = tx\n const hashedBw = await PayloadBuilder.addHashMeta(bw)\n const hashedPayloads = await PayloadBuilder.addHashMeta(payloads)\n signedTx = [hashedBw, hashedPayloads]\n } else {\n // Otherwise, sign it using our signer\n signedTx = await signer.signTransaction(tx)\n }\n\n await this._dataLakeRunner?.insert([...flattenHydratedTransaction(signedTx), ...offChain])\n\n // Broadcast the transaction\n return [await runner.broadcastTransaction([signedTx[0], signedTx[1]]), signedTx]\n }\n\n async confirmSubmittedTransaction(txHash: Hash, options?: ConfirmSubmittedTransactionOptions): Promise<SignedHydratedTransaction> {\n return await confirmSubmittedTransaction(\n assertEx(this.connection.viewer, () => 'Connection viewer is undefined'),\n txHash,\n options,\n )\n }\n\n override async createHandler() {\n await super.createHandler()\n this._connection = await this.locator.getInstance<XyoConnection>(XyoConnectionMoniker)\n this._signer = await this.locator.getInstance<XyoSigner>(XyoSignerMoniker)\n this._dataLakeRunner = await this.locator.tryGetInstance<DataLakeRunner>(DataLakeRunnerMoniker)\n }\n\n async send(to: Address, amount: AttoXL1, options?: TransactionOptions): Promise<Hash> {\n return await this.sendMany({ [to]: amount }, options)\n }\n\n async sendMany(transfers: Record<Address, AttoXL1>, options?: TransactionOptions): Promise<Hash> {\n const from = await this.signer.address()\n const hexTransfers: Record<Address, Hex> = Object.fromEntries(\n Object.entries(transfers).map(([address, amount]) => ([\n address, BigIntToJsonZod.parse(amount),\n ])),\n )\n const transfer = new PayloadBuilder<Transfer>({ schema: TransferSchema }).fields({\n from,\n transfers: hexTransfers,\n epoch: Date.now(),\n }).build()\n const [hash] = await this.addPayloadsToChain([transfer], [], options)\n return hash\n }\n}\n","import {\n assertEx, exists, type Hash,\n} from '@xylabs/sdk-js'\nimport type { ArchivistInstance } from '@xyo-network/sdk-js'\nimport {\n isPayloadBundle, Payload, PayloadBuilder,\n Sequence,\n WithHashMeta,\n} from '@xyo-network/sdk-js'\nimport {\n BlockValidationViewer,\n BlockValidationViewerMoniker,\n ChainContractViewer,\n ChainContractViewerMoniker,\n DEFAULT_MAX_EXP_AHEAD,\n FinalizationViewer,\n FinalizationViewerMoniker,\n isSignedHydratedBlockWithHashMeta, isSignedHydratedTransactionWithHashMeta, MempoolPruneOptions, MempoolRunner,\n MempoolRunnerMoniker, type MempoolViewer, type SignedHydratedBlock, SignedHydratedBlockWithHashMeta, type SignedHydratedTransaction,\n SignedHydratedTransactionWithHashMeta,\n TransactionValidationViewer,\n TransactionValidationViewerMoniker,\n} from '@xyo-network/xl1-protocol-lib'\nimport { Mutex } from 'async-mutex'\n\nimport { validateTransactionsOpcodes } from '../../block/index.ts'\nimport {\n AbstractCreatableProvider, creatableProvider, CreatableProviderParams,\n} from '../../CreatableProvider/index.ts'\nimport {\n bundledPayloadToHydratedBlock,\n bundledPayloadToHydratedTransaction,\n hydratedBlockToPayloadBundle, hydratedTransactionToPayloadBundle,\n} from '../../model/index.ts'\n\nconst DEFAULT_SYNC_INTERVAL = 30_000\nconst DEFAULT_SYNC_LIMIT = 100\n\n/** Parameters for SimpleMempoolRunner. */\nexport interface SimpleMempoolRunnerParams extends CreatableProviderParams {\n externalMempools?: MempoolViewer[]\n maxExpAhead?: number\n pendingBlocksArchivist: ArchivistInstance\n pendingTransactionsArchivist: ArchivistInstance\n syncInterval?: number\n syncLimit?: number\n}\n\n/** SimpleMempoolRunner implementation. */\n@creatableProvider()\nexport class SimpleMempoolRunner extends AbstractCreatableProvider<SimpleMempoolRunnerParams> implements MempoolRunner {\n static readonly defaultMoniker = MempoolRunnerMoniker\n static readonly dependencies = [FinalizationViewerMoniker, BlockValidationViewerMoniker, TransactionValidationViewerMoniker, ChainContractViewerMoniker]\n static readonly monikers = [MempoolRunnerMoniker]\n moniker = SimpleMempoolRunner.defaultMoniker\n\n protected _blockValidationViewer!: BlockValidationViewer\n protected _chainContractViewer!: ChainContractViewer\n protected _finalizationViewer!: FinalizationViewer\n protected _transactionValidationViewer!: TransactionValidationViewer\n\n private _syncMutex = new Mutex()\n private _syncTimerId: ReturnType<typeof setInterval> | null = null\n\n protected get blockValidationViewer() {\n return this._blockValidationViewer!\n }\n\n protected get chainContractViewer() {\n return this._chainContractViewer!\n }\n\n protected get externalMempools(): MempoolViewer[] {\n return this.params.externalMempools ?? []\n }\n\n protected get finalizationViewer() {\n return this._finalizationViewer!\n }\n\n protected get maxExpAhead() {\n return this.params.maxExpAhead ?? DEFAULT_MAX_EXP_AHEAD\n }\n\n protected get pendingBlocksArchivist() {\n return this.params.pendingBlocksArchivist\n }\n\n protected get pendingTransactionsArchivist() {\n return this.params.pendingTransactionsArchivist\n }\n\n protected get syncInterval(): number {\n return this.params.syncInterval ?? DEFAULT_SYNC_INTERVAL\n }\n\n protected get syncLimit(): number {\n return this.params.syncLimit ?? DEFAULT_SYNC_LIMIT\n }\n\n protected get transactionValidationViewer() {\n return this._transactionValidationViewer!\n }\n\n static override async paramsHandler(params?: Partial<SimpleMempoolRunnerParams>): Promise<SimpleMempoolRunnerParams> {\n return {\n ...await super.paramsHandler(params),\n pendingBlocksArchivist: assertEx(params?.pendingBlocksArchivist, () => 'pendingBlocksArchivist is required'),\n pendingTransactionsArchivist: assertEx(params?.pendingTransactionsArchivist, () => 'pendingTransactionsArchivist is required'),\n }\n }\n\n override async createHandler() {\n await super.createHandler()\n this._blockValidationViewer = await this.locator.getInstance<BlockValidationViewer>(BlockValidationViewerMoniker)\n this._chainContractViewer = await this.locator.getInstance<ChainContractViewer>(ChainContractViewerMoniker)\n this._finalizationViewer = await this.locator.getInstance<FinalizationViewer>(FinalizationViewerMoniker)\n this._transactionValidationViewer = await this.locator.getInstance<TransactionValidationViewer>(TransactionValidationViewerMoniker)\n }\n\n async prunePendingBlocks({\n batchSize = 10, maxPrune = 1000, maxCheck = 1000,\n }: MempoolPruneOptions = {}): Promise<[number, number]> {\n let total = 0\n let pruned = 0\n let cursor: Sequence | undefined\n let batch = await this.pendingBlocksArchivist.next({\n limit: batchSize, cursor, order: 'desc',\n })\n this.logger?.info(`Starting prunePendingBlocks with batchSize=${batchSize}, maxPrune=${maxPrune}, maxCheck=${maxCheck}`)\n while (batch.length > 0 && pruned < maxPrune && total < maxCheck) {\n const blocksAndBundles = await this.simpleBlockValidationCheck(batch)\n const blocks = blocksAndBundles.map(([b]) => b)\n const bundles = blocksAndBundles.map(([_, p]) => p)\n let valid = blocks.map(b => !!b)\n let remainingBlockMap: number[] = []\n let remainingBlocks = blocks.map((b, i) => {\n if (b) {\n remainingBlockMap.push(i)\n return b\n }\n }).filter(exists)\n\n assertEx(\n remainingBlockMap.length === remainingBlocks.length,\n () => `remainingBlockMap length should match remainingBlocks length [${remainingBlockMap.length}/${remainingBlocks.length}]`,\n )\n const validationResults = await Promise.all(remainingBlocks.map(remainingBlock => this.blockValidationViewer.validateBlock(\n remainingBlock,\n { value: true, state: true },\n )))\n for (const [i, r] of validationResults.entries()) {\n const validated = isSignedHydratedBlockWithHashMeta(r)\n if (!validated) {\n this.logger?.info(`Pruning block ${bundles[remainingBlockMap[i]]._hash} during block validation`)\n this.logger?.info(` - validation result: ${r.at(0)?.message}`)\n }\n valid[remainingBlockMap[i]] = validated\n }\n const pruneHashes = bundles.map((p, i) => {\n if (!valid[i]) {\n return p._hash\n }\n }).filter(exists)\n\n pruned += pruneHashes.length\n total += batch.length\n await this.pendingBlocksArchivist.delete(pruneHashes)\n\n cursor = batch.at(-1)?._sequence\n\n batch = cursor\n ? await this.pendingBlocksArchivist.next({\n limit: batchSize, cursor, order: 'desc',\n })\n : []\n }\n this.logger?.info(`prunePendingBlocks completed: pruned=${pruned}, totalChecked=${total}`)\n return [pruned, total]\n }\n\n async prunePendingTransactions({\n batchSize = 10, maxPrune = 1000, maxCheck = 1000,\n }: MempoolPruneOptions = {}): Promise<[number, number]> {\n let total = 0\n let pruned = 0\n let cursor: Sequence | undefined\n let batch = await this.pendingTransactionsArchivist.next({\n limit: batchSize, cursor, order: 'desc',\n })\n this.logger?.info(`Starting prunePendingTransactions with batchSize=${batchSize}, maxPrune=${maxPrune}, maxCheck=${maxCheck}`)\n while (batch.length > 0 && pruned < maxPrune && total < maxCheck) {\n const transactionsAndBundles = await this.simpleTransactionValidationCheck(batch)\n const transactions = transactionsAndBundles.map(([t]) => t)\n const bundles = transactionsAndBundles.map(([_, p]) => p)\n let valid = transactions.map(t => !!t)\n let remainingTransactionMap: number[] = []\n let remainingTransactions = transactions.map((t, i) => {\n if (t) {\n remainingTransactionMap.push(i)\n return t\n }\n }).filter(exists)\n\n assertEx(\n remainingTransactionMap.length === remainingTransactions.length,\n () => `remainingTransactionMap length should match remainingTransactions length [${remainingTransactionMap.length}/${remainingTransactions.length}]`,\n )\n\n const validationResults = await Promise.all(remainingTransactions.map(remainingTransaction => this.transactionValidationViewer.validateTransaction(\n remainingTransaction,\n { value: true, state: true },\n )))\n for (const [i, r] of validationResults.entries()) {\n const validated = isSignedHydratedTransactionWithHashMeta(r)\n if (!validated) {\n this.logger?.info(`Pruning transaction ${bundles[remainingTransactionMap[i]]._hash} during transaction validation`)\n this.logger?.info(` - validation result: ${r.at(0)?.message}`)\n }\n valid[remainingTransactionMap[i]] = validated\n }\n const pruneHashes = bundles.map((p, i) => {\n if (!valid[i]) {\n return p._hash\n }\n }).filter(exists)\n\n pruned += pruneHashes.length\n total += batch.length\n await this.pendingTransactionsArchivist.delete(pruneHashes)\n\n cursor = batch.at(-1)?._sequence\n\n batch = cursor\n ? await this.pendingTransactionsArchivist.next({\n limit: batchSize, cursor, order: 'desc',\n })\n : []\n }\n this.logger?.info(`prunePendingTransactions completed: pruned=${pruned}, totalChecked=${total}`)\n return [pruned, total]\n }\n\n async submitBlocks(blocks: SignedHydratedBlock[]): Promise<Hash[]> {\n const bundles = await Promise.all(blocks.map(async ([bw, payloads]) => {\n return hydratedBlockToPayloadBundle([\n await PayloadBuilder.addHashMeta(bw),\n await PayloadBuilder.addHashMeta(payloads),\n ])\n }))\n const inserted = await this.pendingBlocksArchivist.insert(bundles)\n return inserted.map(p => p._hash)\n }\n\n async submitTransactions(transactions: SignedHydratedTransaction[]): Promise<Hash[]> {\n const headNumber = await this.finalizationViewer.headNumber()\n const maxExp = headNumber + this.maxExpAhead\n\n const validTransactions = transactions.filter(([tx]) => {\n if (tx.exp > maxExp) {\n this.logger?.info(`Rejecting transaction with exp ${tx.exp} exceeding max allowed ${maxExp}`)\n return false\n }\n return true\n })\n\n const bundles = await Promise.all(validTransactions.map(async ([tx, payloads]) => {\n return hydratedTransactionToPayloadBundle([\n await PayloadBuilder.addHashMeta(tx),\n await PayloadBuilder.addHashMeta(payloads),\n ])\n }))\n const inserted = await this.pendingTransactionsArchivist.insert(bundles)\n return inserted.map(p => p._hash)\n }\n\n protected override async startHandler(): Promise<void> {\n await super.startHandler()\n if (this.externalMempools.length > 0) {\n await this.syncFromExternal()\n this._syncTimerId = setInterval(() => {\n void this.syncFromExternal()\n }, this.syncInterval)\n }\n }\n\n protected override async stopHandler(): Promise<void> {\n await super.stopHandler()\n if (this._syncTimerId) {\n clearInterval(this._syncTimerId)\n this._syncTimerId = null\n }\n }\n\n private async simpleBlockValidationCheck(payloads: WithHashMeta<Payload>[]): Promise<[(SignedHydratedBlockWithHashMeta | undefined), WithHashMeta<Payload>][]> {\n const headNumber = await this.finalizationViewer.headNumber()\n const chainId = await this.chainContractViewer.chainId()\n\n const blockBundles: [SignedHydratedBlockWithHashMeta | undefined, WithHashMeta<Payload>][] = await Promise.all(payloads.map(async (p) => {\n return [isPayloadBundle(p) ? await bundledPayloadToHydratedBlock(p) : undefined, p]\n }))\n\n return blockBundles.map(([block, bundle]) => {\n const blockCheckPassed = !!block\n const chainIdPassed = blockCheckPassed ? block[0].chain === chainId : false\n const blockNumberPassed = blockCheckPassed ? block[0].block > headNumber : false\n const typeCheckPassed = blockCheckPassed ? isSignedHydratedBlockWithHashMeta(block) : false\n const validationPassed = blockCheckPassed && chainIdPassed && blockNumberPassed && typeCheckPassed\n const validatedBlock = validationPassed ? block : undefined\n if (!validationPassed) {\n this.logger?.info(`Pruning block bundle ${bundle._hash} during simpleValidationCheck`)\n this.logger?.info(` - chainId match: ${chainIdPassed}`)\n this.logger?.info(` - blockNumber check: ${blockNumberPassed} [${headNumber}|${block?.[0].block}]`)\n this.logger?.info(` - typeCheck: ${typeCheckPassed}`)\n this.logger?.info(` - bundle hash: ${bundle._hash}`)\n }\n return [validatedBlock, bundle]\n })\n }\n\n private async simpleTransactionValidationCheck(payloads: WithHashMeta<Payload>[]): Promise<[(SignedHydratedTransactionWithHashMeta | undefined), WithHashMeta<Payload>][]> {\n const headNumber = await this.finalizationViewer.headNumber()\n const chainId = await this.chainContractViewer.chainId()\n\n const transactionBundles: [SignedHydratedTransactionWithHashMeta | undefined, WithHashMeta<Payload>][] = await Promise.all(payloads.map(async (p) => {\n return [isPayloadBundle(p) ? await bundledPayloadToHydratedTransaction(p) : undefined, p]\n }))\n\n // eslint-disable-next-line complexity\n return await Promise.all(transactionBundles.map(async ([transaction, bundle]) => {\n const transactionCheckPassed = !!transaction\n const chainIdPassed = transactionCheckPassed ? transaction[0].chain === chainId : false\n const expPassed = transactionCheckPassed\n ? transaction[0].exp > headNumber && transaction[0].exp <= headNumber + this.maxExpAhead\n : false\n const typeCheckPassed = transactionCheckPassed ? isSignedHydratedTransactionWithHashMeta(transaction) : false\n let opcodeCheckPassed = false\n try {\n await validateTransactionsOpcodes(transaction ? [transaction] : [])\n opcodeCheckPassed = true\n } catch (e) {\n this.logger?.info(`Opcode validation failed for transaction ${bundle._hash} during simpleValidationCheck`)\n this.logger?.info(` - error: ${(e as Error).message}`)\n }\n const validationPassed = transactionCheckPassed && chainIdPassed && expPassed && typeCheckPassed && opcodeCheckPassed\n const validatedTransaction = validationPassed ? transaction : undefined\n if (!validationPassed) {\n this.logger?.info(`Pruning block bundle ${bundle._hash} during simpleValidationCheck`)\n this.logger?.info(` - chainId match: ${chainIdPassed}`)\n this.logger?.info(` - exp check: ${expPassed}`)\n this.logger?.info(` - opcode check: ${opcodeCheckPassed}`)\n this.logger?.info(` - typeCheck: ${typeCheckPassed}`)\n this.logger?.info(` - bundle hash: ${bundle._hash}`)\n }\n return [validatedTransaction, bundle]\n }))\n }\n\n private async syncBlocksFrom(external: MempoolViewer): Promise<void> {\n const externalBlocks = await external.pendingBlocks({ limit: this.syncLimit })\n if (externalBlocks.length === 0) return\n\n const bundles = externalBlocks.map(block => hydratedBlockToPayloadBundle(block))\n await this.pendingBlocksArchivist.insert(bundles)\n this.logger?.info(`Synced ${externalBlocks.length} blocks from external mempool`)\n }\n\n private async syncFromExternal(): Promise<void> {\n if (this._syncMutex.isLocked()) return\n await this._syncMutex.runExclusive(async () => {\n for (const external of this.externalMempools) {\n try {\n await this.syncTransactionsFrom(external)\n await this.syncBlocksFrom(external)\n } catch (ex) {\n this.logger?.error(`Error syncing from external mempool: ${ex}`)\n }\n }\n })\n }\n\n private async syncTransactionsFrom(external: MempoolViewer): Promise<void> {\n const externalTxs = await external.pendingTransactions({ limit: this.syncLimit })\n if (externalTxs.length === 0) return\n\n const bundles = externalTxs.map(tx => hydratedTransactionToPayloadBundle(tx))\n await this.pendingTransactionsArchivist.insert(bundles)\n this.logger?.info(`Synced ${externalTxs.length} transactions from external mempool`)\n }\n}\n","import {\n exists, isDefined, isHash,\n} from '@xylabs/sdk-js'\nimport type {\n ArchivistInstance,\n HashMeta,\n PayloadBundle, Sequence,\n} from '@xyo-network/sdk-js'\nimport { isHashMeta, isPayloadBundle } from '@xyo-network/sdk-js'\nimport {\n type HydratedTransactionWithHashMeta, type MempoolViewer, MempoolViewerMoniker,\n PendingTransactionsOptions,\n type SignedHydratedBlockWithHashMeta, type SignedHydratedTransactionWithHashMeta,\n WindowedBlockViewer,\n WindowedBlockViewerMoniker,\n} from '@xyo-network/xl1-protocol-lib'\n\nimport {\n AbstractCreatableProvider, creatableProvider, CreatableProviderParams,\n} from '../../CreatableProvider/index.ts'\nimport { bundledPayloadToHydratedBlock, bundledPayloadToHydratedTransaction } from '../../model/index.ts'\n\ntype PayloadBundleWithHashMeta = PayloadBundle & HashMeta\n\ntype HydratedTxWithBundle = {\n bundle: PayloadBundleWithHashMeta\n tx: SignedHydratedTransactionWithHashMeta\n}\n\n/** Default maximum fraction of mempool transactions to return. */\nconst DEFAULT_MEMPOOL_SELECTION_RATIO = 0.66\n\n/** Parameters for SimpleMempoolViewer. */\nexport interface SimpleMempoolViewerParams extends CreatableProviderParams {\n /** External mempool viewers (reserved for future use). */\n externalMempools?: MempoolViewer[]\n /** Maximum fraction (0–1) of mempool inclusion candidates to return. Defaults to 0.66. */\n mempoolSelectionRatio?: number\n pendingBlocksArchivist: ArchivistInstance\n pendingTransactionsArchivist: ArchivistInstance\n}\n\n/** SimpleMempoolViewer implementation. */\n@creatableProvider()\nexport class SimpleMempoolViewer extends AbstractCreatableProvider<SimpleMempoolViewerParams> implements MempoolViewer {\n static readonly defaultMoniker = MempoolViewerMoniker\n static readonly dependencies = [WindowedBlockViewerMoniker]\n static readonly monikers = [MempoolViewerMoniker]\n moniker = SimpleMempoolViewer.defaultMoniker\n\n private _windowedBlockViewer?: WindowedBlockViewer\n\n protected get pendingBlocksArchivist() {\n return this.params.pendingBlocksArchivist\n }\n\n protected get pendingTransactionsArchivist() {\n return this.params.pendingTransactionsArchivist\n }\n\n protected get windowedBlockViewer() {\n return this._windowedBlockViewer!\n }\n\n override async createHandler() {\n await super.createHandler()\n this._windowedBlockViewer = await this.locator.getInstance<WindowedBlockViewer>(WindowedBlockViewerMoniker)\n }\n\n async pendingBlocks({ cursor: providedCursor }: PendingTransactionsOptions = {}): Promise<SignedHydratedBlockWithHashMeta[]> {\n let cursor: Sequence | undefined = undefined\n if (isHash(providedCursor)) {\n const [p] = await this.pendingBlocksArchivist.get([providedCursor])\n if (isDefined(p)) {\n cursor = p._sequence\n }\n }\n const bundles = await this.pendingBlocksArchivist.next({\n order: 'desc', limit: 100, cursor,\n })\n const filteredBundles = bundles.filter(isPayloadBundle).filter(isHashMeta)\n return (await Promise.all(filteredBundles.map(async bundle => await bundledPayloadToHydratedBlock(bundle)))).filter(exists)\n }\n\n async pendingTransactions({\n cursor: providedCursor,\n limit = 100,\n }: PendingTransactionsOptions = {}): Promise<SignedHydratedTransactionWithHashMeta[]> {\n let cursor: Sequence | undefined = undefined\n if (isHash(providedCursor)) {\n const [p] = await this.pendingTransactionsArchivist.get([providedCursor])\n if (isDefined(p)) {\n cursor = p._sequence\n }\n }\n this.logger?.info(`Fetching pending transactions from cursor: ${cursor}`)\n const bundles = (await this.pendingTransactionsArchivist.next({\n order: 'asc', limit: limit * 5, cursor,\n }))\n\n this.logger?.info(`Fetched pending transactions: ${bundles.length} bundles`)\n\n const filteredBundles: PayloadBundleWithHashMeta[] = bundles.filter(isPayloadBundle).filter(isHashMeta)\n // this.logger?.info(`Filtered pending transactions: ${JSON.stringify(filteredBundles, null, 2)} filteredBundles`)\n\n const hydratedWithBundle: HydratedTxWithBundle[] = (await Promise.all(\n filteredBundles.map(async (bundle) => {\n const tx = await bundledPayloadToHydratedTransaction(bundle)\n return isDefined(tx) ? { bundle, tx } : undefined\n }),\n )).filter(exists)\n // this.logger?.info(`Converted pending transactions: ${JSON.stringify(hydratedWithBundle.map(x => x.tx), null, 2)} results`)\n\n const currentBlock = await this.windowedBlockViewer.currentBlock()\n const evaluated = await Promise.all(\n hydratedWithBundle.map(async ({ bundle, tx }) => ({\n bundle, tx, deletable: await this.isDeletable(tx, currentBlock),\n })),\n )\n\n const validTransactions = evaluated.filter(x => !x.deletable)\n const deletionCandidates = evaluated.filter(x => x.deletable)\n this.logger?.info(`Pending transactions: ${validTransactions.length} valid, ${deletionCandidates.length} not deletable`)\n\n // Delete the invalid transactions that should not remain in the mempool.\n await Promise.all(\n deletionCandidates.map(async ({ bundle, tx }) => {\n await this.deleteBundledTransaction(bundle)\n this.logger?.info(`Purged completed/expired bundled transaction: ${bundle._hash}/${tx[0]._hash}`)\n }),\n )\n\n const inclusionCandidates = (await Promise.all(validTransactions.map(x => x.tx).map(async (tx) => {\n // Check if it's a candidate for inclusion (skip deletable check as we've already done that)\n if (await this.isInclusionCandidate(tx, currentBlock, false)) return tx\n }))).filter(exists)\n\n const selectionRatio = this.params.mempoolSelectionRatio ?? DEFAULT_MEMPOOL_SELECTION_RATIO\n const maxByRatio = Math.ceil(inclusionCandidates.length * selectionRatio)\n const effectiveLimit = Math.min(limit, maxByRatio)\n\n const randomInclusionCandidates = deduplicateBySigner(\n inclusionCandidates.filter(() => Math.random() < selectionRatio),\n ).slice(0, effectiveLimit)\n\n // if the random filter resulted in 0 bundles, we fallback to just taking the first bundle to ensure we return something\n const result = randomInclusionCandidates.length > 0 ? randomInclusionCandidates : deduplicateBySigner(inclusionCandidates).slice(0, 1)\n\n this.logger?.info(`Inclusion candidates: ${inclusionCandidates.length}`)\n return result\n }\n\n private async deleteBundledTransaction(bundle: PayloadBundleWithHashMeta): Promise<void> {\n await this.pendingTransactionsArchivist.delete([bundle._hash])\n }\n\n /**\n * Evaluates a transaction to determine if it should be purged from the mempool.\n * @param tx The transaction to evaluate\n * @param currentBlock The current block to use for evaluation\n * @returns True if the transaction should be purged, false otherwise\n */\n private async isDeletable(tx: HydratedTransactionWithHashMeta, currentBlock: SignedHydratedBlockWithHashMeta): Promise<boolean> {\n const currentBlockNumber = currentBlock[0].block\n const nextBlockNumber = currentBlockNumber + 1\n const { exp } = tx[0]\n\n // If it's expired\n if (nextBlockNumber > exp) return true\n\n // If it's already included in a block\n const existingBlock = await this.windowedBlockViewer.blockByTransactionHash(tx[0]._hash)\n if (existingBlock) return true\n\n return false\n }\n\n /**\n * Evaluates a transaction to determine if is valid for inclusion in the next block. A transaction is invalid if:\n * - The transaction is too early/expired\n * - The transaction has already been included in a block\n * @param tx The transaction to evaluate\n * @param currentBlock The current block to use for evaluation\n * @param checkForDeletable Whether to check if the transaction is deletable (default: true)\n * @returns True if the transaction is valid for inclusion in the next block, false otherwise\n */\n private async isInclusionCandidate(\n tx: HydratedTransactionWithHashMeta,\n currentBlock: SignedHydratedBlockWithHashMeta,\n checkForDeletable: boolean = true,\n ): Promise<boolean> {\n const currentBlockNumber = currentBlock[0].block\n const nextBlockNumber = currentBlockNumber + 1\n const { nbf } = tx[0]\n\n // If it's not time yet\n if (nextBlockNumber < nbf) return false\n\n // If it's deletable\n if (checkForDeletable && await this.isDeletable(tx, currentBlock)) return false\n\n return true\n }\n}\n\n/** Remove transactions that share the same signer set, keeping the first occurrence. */\nfunction deduplicateBySigner(txs: SignedHydratedTransactionWithHashMeta[]): SignedHydratedTransactionWithHashMeta[] {\n const seen = new Set<string>()\n return txs.filter((tx) => {\n const key = tx[0].addresses.toSorted().join(',')\n if (seen.has(key)) return false\n seen.add(key)\n return true\n })\n}\n","import { isUndefined } from '@xylabs/sdk-js'\nimport type {\n GatewayName,\n NetworkStatus, XyoNetwork,\n} from '@xyo-network/xl1-protocol-lib'\nimport { isNetworkStatus } from '@xyo-network/xl1-protocol-lib'\nimport axios from 'axios'\n\nimport {\n errorStatus, StatusNetworks, unknownStatus,\n} from './lib/index.ts'\n\n/** SimpleXyoNetwork implementation. */\nexport class SimpleXyoNetwork implements XyoNetwork {\n protected readonly _networkId: GatewayName\n\n constructor(networkId: GatewayName) {\n this._networkId = networkId\n }\n\n async status(): Promise<NetworkStatus> {\n const statusNetwork = StatusNetworks[this._networkId]\n if (isUndefined(statusNetwork)) {\n throw new Error(`Unknown status network ID: ${this._networkId}`)\n }\n\n return await this.makeRequest(statusNetwork.statusUrl)\n }\n\n private async makeRequest(url: string): Promise<NetworkStatus> {\n try {\n const response = await axios.get(url)\n if (isNetworkStatus(response.data)) {\n return response.data\n } else {\n if (response.status === 200) {\n console.error('Unknown network status response:', response.data)\n\n return unknownStatus\n }\n return errorStatus\n }\n } catch (error) {\n console.error('Error fetching network status:', error)\n return errorStatus\n }\n }\n}\n","import type { NetworkStatus } from '@xyo-network/xl1-protocol-lib'\nimport { NetworkStatusSchema } from '@xyo-network/xl1-protocol-lib'\n\n/** unknownStatus constant. */\nexport const unknownStatus: NetworkStatus = {\n description: 'Unknown Network Status',\n schema: NetworkStatusSchema,\n state: 'unknown',\n}\n\n/** errorStatus constant. */\nexport const errorStatus: NetworkStatus = {\n description: 'Error Fetching Network Status',\n schema: NetworkStatusSchema,\n state: 'unknown',\n}\n","import type { GatewayName } from '@xyo-network/xl1-protocol-lib'\n\n/** StatusNetwork type. */\nexport type StatusNetwork = {\n id: GatewayName\n statusUrl: string\n}\n\n/** MainNetworkStats constant. */\nexport const MainNetworkStats: StatusNetwork = {\n id: 'mainnet' as GatewayName,\n statusUrl: 'https://xyo.network/chain-network-status-mainnet.json',\n}\n\n/** SequenceNetworkStats constant. */\nexport const SequenceNetworkStats: StatusNetwork = {\n id: 'sequence' as GatewayName,\n statusUrl: 'https://beta.xyo.network/chain-network-status-sequence.json',\n}\n\n/** LocalNetworkStats constant. */\nexport const LocalNetworkStats: StatusNetwork = {\n id: 'local' as GatewayName,\n statusUrl: 'http://localhost:3002/chain-network-status-local.json',\n}\n\n/** StatusNetworks constant. */\nexport const StatusNetworks: Record<GatewayName, StatusNetwork> = {\n ['mainnet' as GatewayName]: MainNetworkStats,\n ['sequence' as GatewayName]: SequenceNetworkStats,\n ['local' as GatewayName]: LocalNetworkStats,\n}\n","import { assertEx } from '@xylabs/sdk-js'\nimport type {\n CaveatTypes,\n InvokerPermission, PermissionRequest, RequestedPermission, XyoPermissions,\n} from '@xyo-network/xl1-protocol-lib'\n\nimport type { Invoker, PermissionsStore } from './store/index.ts'\n\n/**\n * In-memory implementation of XyoPermissions for testing or ephemeral use cases.\n * Does not persist data beyond the lifetime of the instance.\n * Assumes all permission requests are granted and revocations always succeed.\n */\nexport class SimpleXyoPermissions implements XyoPermissions {\n invoker: Invoker\n private _store: PermissionsStore\n\n constructor(store: PermissionsStore) {\n this._store = store\n this.invoker = store.invoker\n }\n\n get store(): PermissionsStore {\n return assertEx(this._store, () => 'Store must be defined to get permissions')\n }\n\n async getPermissions(): Promise<InvokerPermission[]> {\n return await this.store.getPermissions()\n }\n\n // assumed the permissions are always granted\n async requestPermissions(permissions: PermissionRequest[]): Promise<RequestedPermission[]> {\n await Promise.resolve()\n // Flatten PermissionRequest[] into InvokerPermission[]\n const newPermissions: InvokerPermission[] = []\n const now = Date.now()\n for (const req of permissions) {\n for (const parentCapability in req) {\n newPermissions.push({\n invoker: this.invoker,\n parentCapability,\n caveats: Object.entries(req[parentCapability]).map(([type, value]) => ({ type: type as CaveatTypes, value })),\n date: now,\n })\n }\n }\n\n // Update or add permissions in the store\n const existingPermissions = await this.getPermissions()\n for (const perm of newPermissions) {\n const idx = existingPermissions.findIndex(\n p => p.invoker === perm.invoker && p.parentCapability === perm.parentCapability,\n )\n if (idx === -1) {\n existingPermissions.push(perm)\n } else {\n existingPermissions[idx] = perm\n }\n }\n await this.store.setPermissions(existingPermissions)\n\n // Return the granted permissions in RequestedPermission shape\n return newPermissions.map(({ parentCapability, date }) => ({ parentCapability, date }))\n }\n\n // Assumes the permissions are always revoked\n async revokePermissions(permissions: PermissionRequest): Promise<RequestedPermission[]> {\n const existingPermissions = await this.getPermissions()\n const revoked: RequestedPermission[] = []\n for (const parentCapability in permissions) {\n const idx = existingPermissions.findIndex(\n p => p.invoker === this.invoker && p.parentCapability === parentCapability,\n )\n if (idx !== -1) {\n const removed = existingPermissions.splice(idx, 1)[0]\n revoked.push({ parentCapability: removed.parentCapability, date: removed.date })\n }\n }\n await this.store.setPermissions(existingPermissions)\n return revoked\n }\n}\n","import { assertEx } from '@xylabs/sdk-js'\nimport type { InvokerPermission } from '@xyo-network/xl1-protocol-lib'\n\nimport type { Invoker, PermissionsStore } from './PermissionsStore.ts'\n\n/**\n * In-memory implementation of XyoPermissions for testing or ephemeral use cases.\n * Does not persist data beyond the lifetime of the instance.\n * Assumes all permission requests are granted and revocations always succeed.\n */\nexport class MemoryPermissionsStore implements PermissionsStore {\n private _invoker: Invoker\n private permissions: InvokerPermission[] = []\n\n constructor(invoker: Invoker) {\n this._invoker = invoker\n }\n\n get invoker(): Invoker {\n return assertEx(this._invoker, () => 'Invoker must be defined to get permissions')\n }\n\n async getPermissions(): Promise<InvokerPermission[]> {\n await Promise.resolve()\n return this.permissions\n }\n\n async setPermissions(permissions: InvokerPermission[]): Promise<void> {\n await Promise.resolve()\n this.permissions = permissions\n }\n}\n","import { type Hash } from '@xylabs/sdk-js'\nimport { PayloadBuilder } from '@xyo-network/sdk-js'\nimport {\n MempoolRunner,\n MempoolRunnerMoniker, SignedHydratedTransactionWithStorageMeta,\n XyoRunner, XyoRunnerMoniker,\n} from '@xyo-network/xl1-protocol-lib'\n\nimport type { CreatableProviderParams } from '../../CreatableProvider/index.ts'\nimport { AbstractCreatableProvider, creatableProvider } from '../../CreatableProvider/index.ts'\n\n/** Parameters for SimpleXyoRunner. */\nexport interface SimpleXyoRunnerParams extends CreatableProviderParams {\n}\n\n/** SimpleXyoRunner implementation. */\n@creatableProvider()\nexport class SimpleXyoRunner extends AbstractCreatableProvider<SimpleXyoRunnerParams> implements XyoRunner {\n static readonly defaultMoniker = XyoRunnerMoniker\n static readonly dependencies = [MempoolRunnerMoniker]\n static readonly monikers = [XyoRunnerMoniker]\n moniker = SimpleXyoRunner.defaultMoniker\n\n private _mempoolRunner?: MempoolRunner\n\n get mempool() {\n return this._mempoolRunner!\n }\n\n async broadcastTransaction(transaction: SignedHydratedTransactionWithStorageMeta): Promise<Hash> {\n await this.mempool.submitTransactions([transaction])\n const hash = await PayloadBuilder.hash(transaction[0])\n this.logger?.info(`Broadcasted transaction with hash ${hash}`)\n return hash\n }\n\n override async createHandler() {\n await super.createHandler()\n this._mempoolRunner = await this.locator.getInstance<MempoolRunner>(MempoolRunnerMoniker)\n }\n}\n","import type { Address, Promisable } from '@xylabs/sdk-js'\nimport type { AccountInstance, Payload } from '@xyo-network/sdk-js'\nimport { Account, PayloadBuilder } from '@xyo-network/sdk-js'\nimport type {\n AllowedBlockPayload, ChainId, SignedHydratedTransactionWithHashMeta,\n SignedTransactionBoundWitness, TransactionFeesBigInt,\n UnsignedTransactionBoundWitness,\n XL1BlockNumber, XyoSigner,\n} from '@xyo-network/xl1-protocol-lib'\nimport {\n SignedHydratedTransactionWithHashMetaZod,\n XyoSignerMoniker,\n} from '@xyo-network/xl1-protocol-lib'\n\nimport type { CreatableProviderParams } from '../../CreatableProvider/index.ts'\nimport { AbstractCreatableProvider } from '../../CreatableProvider/index.ts'\nimport { buildTransaction, signTransaction } from '../../transaction/index.ts'\n\n/** Parameters for SimpleXyoSigner. */\nexport interface SimpleXyoSignerParams extends CreatableProviderParams {\n account: AccountInstance\n}\n\n/** SimpleXyoSigner implementation. */\nexport class SimpleXyoSigner extends AbstractCreatableProvider<SimpleXyoSignerParams> implements XyoSigner {\n static readonly defaultMoniker = XyoSignerMoniker\n static readonly dependencies = []\n static readonly monikers = [XyoSignerMoniker]\n moniker = SimpleXyoSigner.defaultMoniker\n\n static override async paramsHandler(params?: Partial<SimpleXyoSignerParams>) {\n let account: AccountInstance\n if (params?.account) {\n account = params.account\n } else {\n const localLogger = params?.logger ?? params?.context?.logger\n localLogger?.warn(`No account provided to SimpleXyoSigner, generating a random account. \n This account will not be persisted and any transactions signed with it may be lost.\n `)\n\n account = await Account.random()\n }\n return { ...await super.paramsHandler(params), account }\n }\n\n address(): Promisable<Address> {\n return this.params.account.address\n }\n\n /** @deprecated - use signTransaction instead */\n async createSignedTransaction(\n chain: ChainId,\n elevatedPayloads: AllowedBlockPayload[],\n additionalPayloads: Payload[],\n nbf: XL1BlockNumber,\n exp: XL1BlockNumber,\n fees: TransactionFeesBigInt,\n from?: Address,\n ): Promise<SignedTransactionBoundWitness> {\n const fromAddress = from ?? await this.address()\n const transaction = await buildTransaction(\n chain,\n elevatedPayloads,\n additionalPayloads,\n this.params.account,\n nbf,\n exp,\n fromAddress,\n fees,\n )\n return transaction[0]\n }\n\n async signTransaction(tx: [UnsignedTransactionBoundWitness, Payload[]]): Promise<SignedHydratedTransactionWithHashMeta> {\n const txBW = await signTransaction(tx[0], this.params.account)\n return SignedHydratedTransactionWithHashMetaZod.parse([await PayloadBuilder.addStorageMeta(txBW), await PayloadBuilder.addStorageMeta(tx[1])])\n }\n}\n","import { isDefined } from '@xylabs/sdk-js'\nimport {\n Position, StakeEvent, StakeEventFilter, StakeEventName, StakeEventsViewer, StakeEventsViewerMoniker,\n} from '@xyo-network/xl1-protocol-lib'\n\nimport {\n AbstractCreatableProvider, creatableProvider, CreatableProviderParams,\n} from '../../CreatableProvider/index.ts'\n\n/** Parameters for SimpleStakeEvents. */\nexport interface SimpleStakeEventsParams extends CreatableProviderParams {\n positions: Position[]\n}\n\n/** SimpleStakeEventsViewer implementation. */\n@creatableProvider()\nexport class SimpleStakeEventsViewer extends AbstractCreatableProvider<SimpleStakeEventsParams> implements StakeEventsViewer {\n static readonly defaultMoniker = StakeEventsViewerMoniker\n static readonly dependencies = []\n static readonly monikers = [StakeEventsViewerMoniker]\n moniker = SimpleStakeEventsViewer.defaultMoniker\n\n protected get positions() {\n return this.params.positions\n }\n\n positionCount(range: [number, number | 'latest']): number {\n return this.positionsFromRange(range).length\n }\n\n stakeEvents<TName extends StakeEventName>(range: [number, number | 'latest'], { name }: StakeEventFilter<TName> = {}): StakeEvent<TName>[] {\n const positions = this.positionsFromRange(range)\n const events = this.eventsFromPositions(positions)\n if (isDefined(name)) {\n return events.filter((event): event is StakeEvent<TName> => event.name === name)\n }\n return events as StakeEvent<TName>[]\n }\n\n protected override async startHandler(): Promise<void> {\n await super.startHandler()\n }\n\n private eventsFromPositions(positions: Position[]): StakeEvent<StakeEventName>[] {\n const events = positions.map((position) => {\n const events: StakeEvent<StakeEventName>[] = [{\n name: 'StakeAdded',\n time: position.addBlock,\n args: {\n staker: position.staker,\n staked: position.staked,\n amount: position.amount,\n id: position.id,\n },\n }]\n if (position.removeBlock !== 0) {\n events.push({\n name: 'StakeRemoved',\n time: position.removeBlock,\n args: {\n staker: position.staker,\n staked: position.staked,\n amount: position.amount,\n id: position.id,\n },\n })\n }\n if (position.withdrawBlock !== 0) {\n events.push({\n name: 'StakeWithdrawn',\n time: position.withdrawBlock,\n args: {\n staker: position.staker,\n staked: position.staked,\n amount: position.amount,\n id: position.id,\n },\n })\n }\n return events\n })\n return events.flat()\n }\n\n private positionsFromRange(range: [number, number | 'latest']): Position[] {\n const startBlock = range[0]\n const endBlock = range[1] === 'latest' ? Number.MAX_SAFE_INTEGER : range[1]\n const filteredPositions = this.positions?.filter((position) => {\n return position.addBlock <= endBlock && (position.removeBlock === 0 || position.removeBlock >= startBlock)\n }) ?? []\n return filteredPositions\n }\n}\n","import { type Address, asAddress } from '@xylabs/sdk-js'\nimport { assertEx } from '@xylabs/sdk-js'\nimport {\n StakeTotalsViewer, StakeTotalsViewerMoniker,\n StakeViewer,\n StakeViewerMoniker,\n} from '@xyo-network/xl1-protocol-lib'\n\nimport {\n AbstractCreatableProvider, creatableProvider, CreatableProviderParams,\n} from '../../CreatableProvider/index.ts'\n\n/** Parameters for SimpleStakeTotalsViewer. */\nexport interface SimpleStakeTotalsViewerParams extends CreatableProviderParams {\n\n}\n\n/** SimpleStakeTotalsViewer implementation. */\n@creatableProvider()\nexport class SimpleStakeTotalsViewer extends AbstractCreatableProvider<SimpleStakeTotalsViewerParams> implements StakeTotalsViewer {\n static readonly defaultMoniker = StakeTotalsViewerMoniker\n static readonly dependencies = [StakeTotalsViewerMoniker]\n static readonly monikers = [StakeTotalsViewerMoniker]\n moniker = SimpleStakeTotalsViewer.defaultMoniker\n\n private _stakeViewer!: StakeViewer\n\n get stakeViewer() {\n return this._stakeViewer\n }\n\n async active(time = Number.MAX_SAFE_INTEGER) {\n let active = 0n\n const positions = await this.stakeViewer.activeStakes()\n for (const position of positions) {\n if (position.removeBlock === 0 || position.removeBlock > time) {\n active += position.amount\n }\n }\n return active\n }\n\n async activeByStaked(staked: Address, time = Number.MAX_SAFE_INTEGER) {\n let active = 0n\n const positions = await this.stakeViewer.activeStakes()\n for (const position of positions) {\n if ((position.removeBlock === 0 || position.removeBlock > time) && asAddress(position.staked) === asAddress(staked)) {\n active += position.amount\n }\n }\n return active\n }\n\n async activeByStaker(staker: Address, time = Number.MAX_SAFE_INTEGER) {\n let active = 0n\n const positions = await this.stakeViewer.activeStakes()\n for (const position of positions) {\n if ((position.removeBlock === 0 || position.removeBlock > time) && asAddress(position.staker) === asAddress(staker)) {\n active += position.amount\n }\n }\n return active\n }\n\n override async createHandler() {\n await super.createHandler()\n this._stakeViewer = assertEx(\n (await this.locateAndCreate<StakeViewer>(StakeViewerMoniker)),\n () => 'Failed to create StakeViewer',\n )\n }\n\n async pending(time = Number.MAX_SAFE_INTEGER): Promise<bigint> {\n let pending = 0n\n const positions = await this.stakeViewer.removedStakes()\n for (const position of positions) {\n if ((position.removeBlock !== 0 && position.removeBlock <= time) && (position.withdrawBlock === 0 || position.withdrawBlock > time)) {\n pending += position.amount\n }\n }\n return pending\n }\n\n async pendingByStaker(staker: Address, time = Number.MAX_SAFE_INTEGER) {\n let pending = 0n\n const positions = await this.stakeViewer.removedStakes()\n for (const position of positions) {\n if ((position.removeBlock !== 0 && position.removeBlock <= time) && (position.withdrawBlock === 0 || position.withdrawBlock > time) && asAddress(position.staker) === asAddress(staker)) {\n pending += position.amount\n }\n }\n return pending\n }\n\n async withdrawn(time = Number.MAX_SAFE_INTEGER): Promise<bigint> {\n let withdrawn = 0n\n const positions = await this.stakeViewer.withdrawnStakes()\n for (const position of positions) {\n if (position.withdrawBlock !== 0 && position.withdrawBlock <= time) {\n withdrawn += position.amount\n }\n }\n return withdrawn\n }\n\n async withdrawnByStaker(staker: Address, time = Number.MAX_SAFE_INTEGER): Promise<bigint> {\n let withdrawn = 0n\n const positions = await this.stakeViewer.withdrawnStakes()\n for (const position of positions) {\n if (position.withdrawBlock !== 0 && position.withdrawBlock <= time && asAddress(position.staker) === asAddress(staker)) {\n withdrawn += position.amount\n }\n }\n return withdrawn\n }\n}\n","import {\n type Address, asAddress, Promisable, toAddress,\n} from '@xylabs/sdk-js'\nimport { assertEx } from '@xylabs/sdk-js'\nimport {\n Position, StakeEventsViewer, StakeEventsViewerMoniker, StakeViewer, StakeViewerMoniker,\n} from '@xyo-network/xl1-protocol-lib'\n\nimport {\n AbstractCreatableProvider, creatableProvider, CreatableProviderParams,\n} from '../../CreatableProvider/index.ts'\n\n/** Parameters for SimpleStakeViewer. */\nexport interface SimpleStakeViewerParams extends CreatableProviderParams {\n chainId?: Address\n minWithdrawalBlocks?: number\n positions: Position[]\n}\n\n/** SimpleStakeViewer implementation. */\n@creatableProvider()\nexport class SimpleStakeViewer extends AbstractCreatableProvider<SimpleStakeViewerParams> implements StakeViewer {\n static readonly defaultMoniker = StakeViewerMoniker\n static readonly dependencies = [StakeEventsViewerMoniker]\n static readonly monikers = [StakeViewerMoniker]\n moniker = SimpleStakeViewer.defaultMoniker\n\n private _chainStakeEventsViewer: StakeEventsViewer | undefined\n\n get stakeEvents() {\n return assertEx(this._chainStakeEventsViewer, () => 'Stake events viewer not set')\n }\n\n protected get positions() {\n return this.params.positions\n }\n\n async active(): Promise<bigint> {\n let active = 0n\n const positions = await this.activeStakes()\n for (const position of positions) {\n if (position.removeBlock === 0) {\n active += position.amount\n }\n }\n return active\n }\n\n async activeByAddressStaked(staked: Address) {\n let active = 0n\n const positions = await this.activeStakes()\n for (const position of positions) {\n if (position.removeBlock === 0 && asAddress(position.staked) === asAddress(staked)) {\n active += position.amount\n }\n }\n return active\n }\n\n async activeByStaker(staker: Address): Promise<bigint> {\n let active = 0n\n const positions = await this.activeStakes()\n for (const position of positions) {\n if (position.removeBlock === 0 && asAddress(position.staker) === asAddress(staker)) {\n active += position.amount\n }\n }\n return active\n }\n\n activeStakes(): Promisable<Position[]> {\n return this.positions.filter(s => (s.withdrawBlock === 0) && (s.removeBlock === 0))\n }\n\n override async createHandler() {\n await super.createHandler()\n this._chainStakeEventsViewer = assertEx(\n (await this.locateAndCreate<StakeEventsViewer>(StakeEventsViewerMoniker)),\n () => 'Failed to create StakeEventsViewer',\n )\n }\n\n minWithdrawalBlocks(): number {\n return this.params.minWithdrawalBlocks ?? 10\n }\n\n async pending() {\n let pending = 0n\n const positions = await this.removedStakes()\n for (const position of positions) {\n if (position.removeBlock !== 0 && position.withdrawBlock === 0) {\n pending += position.amount\n }\n }\n return pending\n }\n\n async pendingByStaker(staker: Address) {\n let pending = 0n\n const positions = await this.removedStakes()\n for (const position of positions) {\n if (position.removeBlock !== 0 && position.withdrawBlock === 0 && asAddress(position.staker) === asAddress(staker)) {\n pending += position.amount\n }\n }\n return pending\n }\n\n removedStakes(): Promisable<Position[]> {\n return this.positions.filter(s => (s.withdrawBlock === 0) && (s.removeBlock !== 0))\n }\n\n rewardsContract(): Address {\n return toAddress(toAddress(1n))\n }\n\n stakeById(id: number): Position {\n return assertEx(this.positions[id], () => new Error(`Stake with id ${id} not found`))\n }\n\n stakeByStaker(staker: Address, slot: number): Position {\n return this.positions.filter(s => asAddress(s.staker) === asAddress(staker))[slot]\n }\n\n stakesByStaked(staked: Address, range: [number, number | undefined] = [0, undefined]): Position[] {\n const endBlock = (range[1] ?? Number.MAX_SAFE_INTEGER)\n return this.positions.filter(s => asAddress(s.staked) === asAddress(staked) && s.addBlock <= endBlock && s.removeBlock <= endBlock)\n }\n\n stakesByStaker(staker: Address, range: [number, number | undefined] = [0, undefined]): Position[] {\n const endBlock = (range[1] ?? Number.MAX_SAFE_INTEGER)\n return this.positions.filter(s => asAddress(s.staker) === asAddress(staker) && s.addBlock <= endBlock && s.removeBlock <= endBlock)\n }\n\n stakingTokenAddress(): Address {\n return toAddress('0x000000000000000000000000000011')\n }\n\n async withdrawn() {\n let withdrawn = 0n\n const positions = await this.withdrawnStakes()\n for (const position of positions) {\n if (position.withdrawBlock !== 0) {\n withdrawn += position.amount\n }\n }\n return withdrawn\n }\n\n async withdrawnByStaker(staker: Address) {\n let withdrawn = 0n\n const positions = await this.withdrawnStakes()\n for (const position of positions) {\n if (position.withdrawBlock !== 0 && asAddress(position.staker) === asAddress(staker)) {\n withdrawn += position.amount\n }\n }\n return withdrawn\n }\n\n withdrawnStakes(): Promisable<Position[]> {\n return this.positions.filter(s => (s.withdrawBlock !== 0))\n }\n}\n","import type { Hash } from '@xylabs/sdk-js'\nimport {\n asHash, assertEx, isDefined,\n} from '@xylabs/sdk-js'\nimport type {\n BlockViewer,\n TimeDomain, TimePayload, TimeSyncViewer,\n} from '@xyo-network/xl1-protocol-lib'\nimport {\n asTimePayload, asXL1BlockNumber, BlockViewerMoniker, TimeSchema,\n TimeSyncViewerMoniker,\n} from '@xyo-network/xl1-protocol-lib'\nimport type { Provider } from 'ethers'\n\nimport type { CreatableProviderParams } from '../../CreatableProvider/index.ts'\nimport { AbstractCreatableProvider, creatableProvider } from '../../CreatableProvider/index.ts'\n\n/** Parameters for SimpleTimeSyncViewer. */\nexport interface SimpleTimeSyncViewerParams extends CreatableProviderParams {\n ethProvider?: Provider\n}\n\n/** SimpleTimeSyncViewer implementation. */\n@creatableProvider()\nexport class SimpleTimeSyncViewer extends AbstractCreatableProvider<SimpleTimeSyncViewerParams> implements TimeSyncViewer {\n static readonly defaultMoniker = TimeSyncViewerMoniker\n static readonly dependencies = [BlockViewerMoniker]\n static readonly monikers = [TimeSyncViewerMoniker]\n moniker = SimpleTimeSyncViewer.defaultMoniker\n\n private _blockViewer?: BlockViewer\n\n protected get blockViewer() {\n return this._blockViewer!\n }\n\n protected get ethProvider() {\n return this.params.ethProvider\n }\n\n async convertTime(fromDomain: TimeDomain, toDomain: TimeDomain, from: number): Promise<number> {\n switch (fromDomain) {\n case 'xl1': {\n const [block, payloads] = assertEx(await this.blockViewer.blockByNumber(asXL1BlockNumber(from, true)), () => 'Block not found')\n const timeSchemaIndex = block.payload_schemas.indexOf(TimeSchema)\n const hash = timeSchemaIndex === -1 ? undefined : block.payload_hashes[timeSchemaIndex]\n const timePayload = asTimePayload(isDefined(hash) ? payloads.find(p => p._hash === hash) : undefined)\n if (timePayload === undefined) return 0\n switch (toDomain) {\n case 'xl1': {\n return timePayload.xl1 ?? 0\n }\n case 'epoch': {\n return timePayload.epoch ?? 0\n }\n case 'ethereum': {\n return timePayload.ethereum ?? 0\n }\n default: {\n throw new Error(`Unsupported to toDomain: ${toDomain}`)\n }\n }\n }\n default: {\n throw new Error(`Unsupported from fromDomain: ${fromDomain}`)\n }\n }\n }\n\n override async createHandler() {\n await super.createHandler()\n this._blockViewer = await this.locator.getInstance<BlockViewer>(BlockViewerMoniker)\n }\n\n async currentTime(domain: TimeDomain): Promise<[string, number]> {\n switch (domain) {\n case 'xl1': {\n return ['xl1', (await this.blockViewer.currentBlock())?.[0].block ?? -1]\n }\n case 'epoch': {\n return ['epoch', Date.now()]\n }\n case 'ethereum': {\n return ['ethereum', (await this.ethProvider?.getBlockNumber()) ?? 0]\n }\n default: {\n throw new Error(`Unknown time domain: ${domain}`)\n }\n }\n }\n\n async currentTimeAndHash(domain: TimeDomain): Promise<[number, Hash | null]> {\n switch (domain) {\n case 'xl1': {\n const [head] = await this.blockViewer.currentBlock()\n return [head.block, head._hash]\n }\n case 'epoch': {\n return [Date.now(), null]\n }\n case 'ethereum': {\n const provider = assertEx(this.ethProvider, () => 'Ethereum provider not configured')\n const blockNumber = (await provider.getBlockNumber()) ?? 0\n const block = await provider.getBlock(blockNumber)\n const blockHash = asHash(assertEx(block?.hash, () => 'Block hash not found'), true)\n return [blockNumber, blockHash]\n }\n default: {\n throw new Error(`Unknown time domain: ${domain}`)\n }\n }\n }\n\n async currentTimePayload(): Promise<TimePayload> {\n const [xl1, xl1Hash] = await this.currentTimeAndHash('xl1')\n const timePayload: TimePayload = {\n schema: TimeSchema,\n // this is for the previous block\n xl1,\n // this is for the previous block\n xl1Hash: assertEx(xl1Hash, () => 'No xl1 hash available from time sync service'),\n epoch: Date.now(),\n }\n if (isDefined(this.ethProvider)) {\n const [ethereum, ethHashOrNull] = await this.currentTimeAndHash('ethereum')\n const ethereumHash = asHash(ethHashOrNull, () => 'No ethereum hash available from time sync service')\n timePayload.ethereum = ethereum\n timePayload.ethereumHash = ethereumHash\n }\n return timePayload\n }\n}\n","import { assertEx } from '@xylabs/sdk-js'\nimport { PayloadBuilder } from '@xyo-network/sdk-js'\nimport {\n AccountBalanceViewer,\n AccountBalanceViewerMoniker,\n asXL1BlockRange,\n BlockViewer,\n BlockViewerMoniker,\n ChainContractViewer,\n ChainContractViewerMoniker,\n ChainId,\n HydratedTransactionStateValidationFunction,\n HydratedTransactionValidationError,\n HydratedTransactionValidationFunction,\n isChainQualifiedHeadConfig,\n isHydratedTransaction,\n SignedHydratedTransaction,\n type SignedHydratedTransactionWithHashMeta,\n TransactionValidationConfig,\n TransactionValidationQualification,\n TransactionValidationViewer,\n TransactionValidationViewerMoniker,\n} from '@xyo-network/xl1-protocol-lib'\n\nimport type { CreatableProviderParams } from '../../CreatableProvider/index.ts'\nimport { AbstractCreatableProvider, creatableProvider } from '../../CreatableProvider/index.ts'\n\n/** Parameters for SimpleTransactionValidationViewer. */\nexport interface SimpleTransactionValidationViewerParams extends CreatableProviderParams {\n maxUncleWindowSize?: number\n protocol?: HydratedTransactionValidationFunction\n state?: HydratedTransactionStateValidationFunction\n}\n\n/** SimpleTransactionValidationViewer implementation. */\n@creatableProvider()\nexport class SimpleTransactionValidationViewer extends\n AbstractCreatableProvider<SimpleTransactionValidationViewerParams> implements TransactionValidationViewer {\n static readonly defaultMoniker = TransactionValidationViewerMoniker\n static readonly dependencies = [AccountBalanceViewerMoniker, ChainContractViewerMoniker, BlockViewerMoniker]\n static readonly monikers = [TransactionValidationViewerMoniker]\n moniker = SimpleTransactionValidationViewer.defaultMoniker\n\n private _accountBalanceViewer!: AccountBalanceViewer\n private _blockViewer!: BlockViewer\n private _chainContractViewer!: ChainContractViewer\n\n protected get blockViewer() {\n return this._blockViewer\n }\n\n protected get chainContractViewer() {\n return this._chainContractViewer\n }\n\n protected get maxUncleWindowSize() {\n return this.params.maxUncleWindowSize!\n }\n\n static override async paramsHandler(params: Partial<SimpleTransactionValidationViewerParams>): Promise<SimpleTransactionValidationViewerParams> {\n return {\n ...await super.paramsHandler(params),\n protocol: params.protocol,\n state: params.state,\n maxUncleWindowSize: params.maxUncleWindowSize ?? 100,\n } satisfies SimpleTransactionValidationViewerParams\n }\n\n override async createHandler() {\n await super.createHandler()\n this._accountBalanceViewer = await this.locator.getInstance<AccountBalanceViewer>(AccountBalanceViewerMoniker)\n this._chainContractViewer = await this.locator.getInstance<ChainContractViewer>(ChainContractViewerMoniker)\n this._blockViewer = await this.locator.getInstance<BlockViewer>(BlockViewerMoniker)\n }\n\n async qualifiedValidateTransaction(\n block: SignedHydratedTransactionWithHashMeta,\n config?: TransactionValidationConfig,\n ): Promise<[HydratedTransactionValidationError[] | SignedHydratedTransactionWithHashMeta, TransactionValidationQualification]> {\n const result = (await this.qualifiedValidateTransactions([block], config))\n return [result[0][0], result[1]]\n }\n\n async qualifiedValidateTransactions(\n transactions: SignedHydratedTransaction[],\n config?: TransactionValidationConfig,\n ): Promise<[(HydratedTransactionValidationError[] | SignedHydratedTransactionWithHashMeta)[], TransactionValidationQualification]> {\n const { value, state } = config ?? {\n shape: true, links: true, state: true, head: undefined,\n }\n\n const transactionsWithMeta = await Promise.all(transactions.map(b => Promise.all([PayloadBuilder.addHashMeta(b[0]), PayloadBuilder.addHashMeta(b[1])])))\n\n const head = isChainQualifiedHeadConfig(config)\n ? assertEx(\n (await this.blockViewer.blockByHash(config.head))?.[0],\n () => `Specified a head that is not in the chain [${config.head}]`,\n )\n : undefined\n\n const headBlock = head ?? (await this.blockViewer.currentBlock())[0]\n\n const validateProtocol = value ? this.doValidateProtocol.bind(this) : undefined\n const validateState = state ? this.doValidateState.bind(this) : undefined\n\n const chainId = headBlock.chain\n\n const qualification = { head: headBlock._hash, range: asXL1BlockRange([0, headBlock.block], true) }\n const [protocolResults, stateResults] = await Promise.all([\n validateProtocol?.(transactionsWithMeta, chainId), validateState?.(transactionsWithMeta, chainId),\n ])\n const blockResults = transactionsWithMeta.map((r, i) => {\n const errors = []\n if (protocolResults && !isHydratedTransaction(protocolResults[i])) {\n errors.push(...(protocolResults[i]))\n }\n if (stateResults && !isHydratedTransaction(stateResults[i])) {\n errors.push(...(stateResults[i]))\n }\n return errors.length === 0 ? r : errors\n })\n return [blockResults, qualification]\n }\n\n qualifiedValidateUncle(\n _transactions: SignedHydratedTransaction[],\n _config?: TransactionValidationConfig,\n ): Promise<[(HydratedTransactionValidationError[] | SignedHydratedTransactionWithHashMeta)[], TransactionValidationQualification]> {\n throw new Error('Method not implemented.')\n }\n\n async validateTransaction(\n block: SignedHydratedTransaction,\n config?: TransactionValidationConfig,\n ): Promise<HydratedTransactionValidationError[] | SignedHydratedTransactionWithHashMeta> {\n return (await this.validateTransactions([block], config))[0]\n }\n\n async validateTransactions(\n transactions: SignedHydratedTransaction[],\n config?: TransactionValidationConfig,\n ): Promise<(HydratedTransactionValidationError[] | SignedHydratedTransactionWithHashMeta)[]> {\n return (await this.qualifiedValidateTransactions(transactions, config))[0]\n }\n\n private async doValidateProtocol(\n transactions: SignedHydratedTransactionWithHashMeta[],\n chainId: ChainId,\n ): Promise<(SignedHydratedTransactionWithHashMeta | HydratedTransactionValidationError[])[]> {\n return (await Promise.all(transactions.map(async (tx) => {\n const errors = await this.params.protocol!(\n { ...this.context, chainId },\n tx,\n )\n return (errors.length === 0) ? tx : errors\n })))\n }\n\n private async doValidateState(\n transactions: SignedHydratedTransactionWithHashMeta[],\n chainId: ChainId,\n ): Promise<(SignedHydratedTransactionWithHashMeta | HydratedTransactionValidationError[])[]> {\n return (await Promise.all(transactions.map(async (tx) => {\n const errors = await this.params.state!(\n {\n ...this.context, chainId, accountBalanceViewer: this._accountBalanceViewer, blockViewer: this.blockViewer,\n },\n tx,\n )\n return (errors.length === 0) ? tx : errors\n })))\n }\n}\n","import {\n assertEx, exists, Hash,\n} from '@xylabs/sdk-js'\nimport { BoundWitnessSchema } from '@xyo-network/sdk-js'\nimport {\n asSignedHydratedTransactionWithHashMeta,\n asSignedTransactionBoundWitness,\n BlockViewer,\n BlockViewerMoniker,\n isTransactionBoundWitnessWithHashMeta,\n SignedHydratedTransactionWithHashMeta, TransactionViewer, TransactionViewerMoniker,\n XL1BlockNumber,\n} from '@xyo-network/xl1-protocol-lib'\n\nimport {\n AbstractCreatableProvider, creatableProvider, CreatableProviderParams,\n} from '../../CreatableProvider/index.ts'\n\n/** Parameters for SimpleTransactionViewer. */\nexport interface SimpleTransactionViewerParams extends CreatableProviderParams {\n\n}\n\n/** SimpleTransactionViewer implementation. */\n@creatableProvider()\nexport class SimpleTransactionViewer extends AbstractCreatableProvider<SimpleTransactionViewerParams> implements TransactionViewer {\n static readonly defaultMoniker = TransactionViewerMoniker\n static readonly dependencies = [BlockViewerMoniker]\n static readonly monikers = [TransactionViewerMoniker]\n moniker = SimpleTransactionViewer.defaultMoniker\n\n private _blockViewer!: BlockViewer\n\n protected get blockViewer() {\n return this._blockViewer\n }\n\n async byBlockHashAndIndex(blockHash: Hash, transactionIndex: number): Promise<SignedHydratedTransactionWithHashMeta | null> {\n return await this.spanAsync('byBlockHashAndIndex', async () => {\n assertEx(transactionIndex >= 0, () => 'transactionIndex must be greater than or equal to 0')\n try {\n const block = await this.blockViewer.blockByHash(blockHash)\n if (!block) return null\n const blockBoundWitnessIndexes = block[0].payload_schemas.map((schema, index) => schema === BoundWitnessSchema ? index : undefined).filter(exists)\n const blockBoundWitnessHashes = new Set(blockBoundWitnessIndexes.map(index => block[0].payload_hashes[index]))\n const blockBoundWitnesses = block[1].filter(payload => blockBoundWitnessHashes.has(payload._hash) || blockBoundWitnessHashes.has(payload._dataHash))\n const blockTransactionBoundWitnesses = blockBoundWitnesses.filter(isTransactionBoundWitnessWithHashMeta)\n const transaction = blockTransactionBoundWitnesses.at(transactionIndex)\n if (!transaction) return null\n return await this.byHash(transaction._hash)\n } catch {\n return null\n }\n }, this.context)\n }\n\n async byBlockNumberAndIndex(blockNumber: XL1BlockNumber, transactionIndex: number): Promise<SignedHydratedTransactionWithHashMeta | null> {\n return await this.spanAsync('byBlockNumberAndIndex', async () => {\n try {\n const block = await this.blockViewer.blockByNumber(blockNumber)\n if (!block) return null\n return await this.byBlockHashAndIndex(block[0]._hash, transactionIndex)\n } catch {\n return null\n }\n }, this.context)\n }\n\n async byHash(transactionHash: Hash): Promise<SignedHydratedTransactionWithHashMeta | null> {\n return await this.spanAsync('byHash', async () => {\n try {\n const transaction = asSignedTransactionBoundWitness(await this.blockViewer.payloadByHash(transactionHash))\n if (transaction) {\n const payloads = await this.blockViewer.payloadsByHash(transaction.payload_hashes)\n return asSignedHydratedTransactionWithHashMeta([transaction, payloads]) ?? null\n }\n return null\n } catch {\n return null\n }\n }, this.context)\n }\n\n override async createHandler(): Promise<void> {\n await super.createHandler()\n this._blockViewer = await this.locator.getInstance<BlockViewer>(BlockViewerMoniker)\n }\n\n async transactionByBlockHashAndIndex(blockHash: Hash, transactionIndex: number = 0): Promise<SignedHydratedTransactionWithHashMeta | null> {\n return await this.byBlockHashAndIndex(blockHash, transactionIndex)\n }\n\n async transactionByBlockNumberAndIndex(blockNumber: XL1BlockNumber, transactionIndex: number = 0): Promise<SignedHydratedTransactionWithHashMeta | null> {\n return await this.byBlockNumberAndIndex(blockNumber, transactionIndex)\n }\n\n async transactionByHash(transactionHash: Hash): Promise<SignedHydratedTransactionWithHashMeta | null> {\n return await this.byHash(transactionHash)\n }\n}\n","import {\n assertEx, exists, type Hash, isNull, type Promisable,\n} from '@xylabs/sdk-js'\nimport type { Payload, WithHashMeta } from '@xyo-network/sdk-js'\nimport type {\n BlockViewer,\n ChainId, HydratedBlockWithHashMeta, SignedHydratedBlockWithHashMeta, SyncMap, WindowedBlockViewer, XL1BlockNumber,\n} from '@xyo-network/xl1-protocol-lib'\nimport {\n asXL1BlockNumber, BlockViewerMoniker, WindowedBlockViewerMoniker,\n} from '@xyo-network/xl1-protocol-lib'\nimport { Mutex } from 'async-mutex'\n\nimport { transactionsFromHydratedBlock } from '../../block/index.ts'\nimport {\n AbstractCreatableProvider, creatableProvider, type CreatableProviderParams,\n} from '../../CreatableProvider/index.ts'\nimport { MemoryMap } from '../../driver/index.ts'\n\n/** Parameters for SimpleWindowedBlockViewer. */\nexport interface SimpleWindowedBlockViewerParams extends CreatableProviderParams {\n blockViewer?: BlockViewer\n maxWindowSize: number\n syncInterval: number\n}\n\n/** SimpleWindowedBlockViewer implementation. */\n@creatableProvider()\nexport class SimpleWindowedBlockViewer extends AbstractCreatableProvider<SimpleWindowedBlockViewerParams> implements WindowedBlockViewer {\n static readonly defaultMoniker = WindowedBlockViewerMoniker\n static readonly dependencies = [BlockViewerMoniker]\n static readonly monikers = [WindowedBlockViewerMoniker]\n moniker = WindowedBlockViewerMoniker\n\n private _blockHashMap!: SyncMap<Hash, SignedHydratedBlockWithHashMeta>\n private _blockNumberMap!: SyncMap<XL1BlockNumber, SignedHydratedBlockWithHashMeta>\n // the external BlockViewer\n private _blockViewer!: BlockViewer\n private _chain: SignedHydratedBlockWithHashMeta[] = []\n private _syncMutex = new Mutex()\n private _timerId: ReturnType<typeof setInterval> | null = null\n private _transactionHashMap!: SyncMap<Hash, SignedHydratedBlockWithHashMeta>\n\n protected get maxWindowSize() {\n return this.params.maxWindowSize\n }\n\n protected get syncInterval() {\n return this.params.syncInterval\n }\n\n static override async paramsHandler(params?: Partial<SimpleWindowedBlockViewerParams>): Promise<SimpleWindowedBlockViewerParams> {\n return {\n ...await super.paramsHandler(params),\n maxWindowSize: params?.maxWindowSize ?? 1000,\n syncInterval: params?.syncInterval ?? 10_000,\n }\n }\n\n blockByHash(hash: Hash) {\n return this._blockHashMap.get(hash) ?? null\n }\n\n blockByNumber(blockNumber: XL1BlockNumber) {\n return this._blockNumberMap.get(blockNumber) ?? null\n }\n\n async blockByTransactionHash(hash: Hash) {\n const [block = null] = await this.blocksByTransactionHashes([hash])\n return block\n }\n\n blocksByHash(hash: Hash, limit?: number) {\n const result: SignedHydratedBlockWithHashMeta[] = []\n let block = this._blockHashMap.get(hash)\n while (block && (limit === undefined || result.length < limit)) {\n result.unshift(block)\n const previousHash = block[0].previous\n block = previousHash ? this._blockHashMap.get(previousHash) : undefined\n }\n return result\n }\n\n blocksByNumber(blockNumber: XL1BlockNumber, limit?: number) {\n const result: SignedHydratedBlockWithHashMeta[] = []\n let block = this._blockNumberMap.get(blockNumber)\n while (block && (limit === undefined || result.length < limit)) {\n result.unshift(block)\n const previousBlockNumber = asXL1BlockNumber(block[0].block - 1, true)\n block = (previousBlockNumber >= 0) ? this._blockNumberMap.get(previousBlockNumber) : undefined\n }\n return result\n }\n\n blocksByTransactionHashes(hashes: Hash[]): Promisable<HydratedBlockWithHashMeta[]> {\n return hashes.map(hash => this._transactionHashMap.get(hash)).filter(exists)\n }\n\n chainId(_blockNumber?: unknown): Promisable<ChainId> {\n throw new Error('Method not implemented.')\n }\n\n override async createHandler() {\n await super.createHandler()\n\n this._blockViewer = assertEx(\n this.params.blockViewer ?? await this.locator.getInstance<BlockViewer>(BlockViewerMoniker),\n () => 'BlockViewer instance is required',\n )\n this._blockHashMap = new MemoryMap<Hash, SignedHydratedBlockWithHashMeta>()\n this._blockNumberMap = new MemoryMap<XL1BlockNumber, SignedHydratedBlockWithHashMeta>()\n this._transactionHashMap = new MemoryMap<Hash, SignedHydratedBlockWithHashMeta>()\n }\n\n currentBlock(): Promisable<SignedHydratedBlockWithHashMeta> {\n return assertEx(this._chain.at(-1))\n }\n\n currentBlockHash(): Promisable<Hash> {\n return assertEx(this._chain.at(-1)?.[0]._hash)\n }\n\n currentBlockNumber(): Promisable<XL1BlockNumber> {\n return assertEx(this._chain.at(-1)?.[0].block)\n }\n\n async payloadByHash(hash: Hash): Promise<WithHashMeta<Payload> | null> {\n const payloads = await this.payloadsByHash([hash])\n return payloads.length > 0 ? payloads[0] : null\n }\n\n payloadsByHash(_hashes: Hash[]): Promisable<WithHashMeta<Payload>[]> {\n throw new Error('Method not implemented.')\n }\n\n override async startHandler() {\n await super.startHandler()\n await this.sync()\n this.stopPoll()\n this.startPoll()\n }\n\n override async stopHandler() {\n await super.stopHandler()\n this.stopPoll()\n }\n\n private addBlock(block: SignedHydratedBlockWithHashMeta) {\n // Add the new block to the end of the window\n this._chain.push(block)\n\n // Index the new block\n this._blockHashMap.set(block[0]._hash, block)\n this._blockNumberMap.set(block[0].block, block)\n for (const tx of transactionsFromHydratedBlock(block)) {\n this._transactionHashMap.set(tx._hash, block)\n }\n\n // Purge only if the window size is exceeded\n while (this._chain.length > this.maxWindowSize) {\n const removedBlock = this._chain.shift()\n if (!removedBlock) break\n\n this._blockHashMap.delete(removedBlock[0]._hash)\n this._blockNumberMap.delete(removedBlock[0].block)\n for (const tx of transactionsFromHydratedBlock(removedBlock)) {\n this._transactionHashMap.delete(tx._hash)\n }\n }\n }\n\n private startPoll() {\n this._timerId = setInterval(() => {\n void this.sync()\n }, this.syncInterval)\n }\n\n private stopPoll() {\n if (this._timerId) {\n clearInterval(this._timerId)\n }\n this._timerId = null\n }\n\n private async sync() {\n if (this._syncMutex.isLocked()) {\n return\n }\n return await this._syncMutex.runExclusive(async () => {\n try {\n let cursor: SignedHydratedBlockWithHashMeta | null = await this._blockViewer.currentBlock()\n const previousHead = this._chain.length > 0 ? await this.currentBlockHash() : null\n const newBlocks: SignedHydratedBlockWithHashMeta[] = []\n while (!isNull(cursor) && cursor[0]._hash !== previousHead && newBlocks.length < this.maxWindowSize) {\n newBlocks.unshift(cursor)\n const previousHash = newBlocks[0][0].previous\n cursor = isNull(previousHash) ? null : await this._blockViewer.blockByHash(previousHash)\n }\n for (const block of newBlocks) {\n this.addBlock(block)\n }\n } catch (ex) {\n console.error('Error during sync:', ex)\n }\n })\n }\n}\n","import type {\n CreatableName, CreatableStatus, CreatableStatusReporter, Logger,\n} from '@xylabs/sdk-js'\n\n/** Status reporter that logs status changes and tracks service status counts */\nexport class LoggerStatusReporter implements CreatableStatusReporter {\n protected logger: Logger\n\n protected statusMap: Record<CreatableName, CreatableStatus> = {}\n\n constructor(logger: Logger) {\n this.logger = logger\n }\n\n report(name: CreatableName, status: CreatableStatus, progress?: number | Error): void {\n this.statusMap[name] = status\n const starting = (Object.entries(this.statusMap).map(([, value]): number => value === 'starting' ? 1 : 0)).reduce((a, b) => a + b, 0)\n const started = (Object.entries(this.statusMap).map(([, value]): number => value === 'started' ? 1 : 0)).reduce((a, b) => a + b, 0)\n this.logger.info(`${started}/${starting + started} ${name} status: ${status}`, { progress })\n }\n}\n","import type { CreatableName, CreatableStatus } from '@xylabs/sdk-js'\n\nimport { LoggerStatusReporter } from './ServiceStatus.ts'\n\n/**\n * Enum-like record for statuses with priority allowing\n * for determination of the aggregated status.\n */\nconst statusPriority: Record<CreatableStatus, number> = {\n error: 0,\n stopped: 1,\n stopping: 2,\n creating: 3,\n created: 4,\n starting: 5,\n started: 6,\n}\n\n/**\n * A sentinel status that represents the initial state\n * before any statuses are reported.\n * It is used to ensure that the monitor has a valid status\n * even when no statuses have been reported yet and to\n * prevent the system from showing an \"error\" state\n * when no statuses are available.\n */\nconst SENTINEL_STATUS: CreatableStatus = 'starting'\n\n/**\n * Given an array of statuses, this function reduces them\n * to the minimum status based on the defined priority.\n * @param statuses An array of statuses to reduce.\n * @returns The minimum status based on priority.\n */\nconst reduceToMinimumStatus = (statuses: CreatableStatus[]): CreatableStatus => {\n let minStatus: CreatableStatus = SENTINEL_STATUS\n let minPriority = Infinity\n\n for (const status of statuses) {\n const priority = statusPriority[status]\n if (priority < minPriority) {\n minPriority = priority\n minStatus = status\n }\n }\n return minStatus\n}\n\n/** Handler for global status transitions with optional from/to filters */\nexport type GlobalTransitionHandler = {\n from?: CreatableStatus\n handler: (from: CreatableStatus, to: CreatableStatus) => void\n to?: CreatableStatus\n}\n/** Handler for named service status transitions with optional from/to filters */\nexport type TransitionHandler = GlobalTransitionHandler & {\n name?: string\n}\n\n/** Monitors runtime service statuses and fires transition callbacks on status changes */\nexport class RuntimeStatusMonitor extends LoggerStatusReporter {\n private globalTransitions: GlobalTransitionHandler[] = []\n private transitions: TransitionHandler[] = []\n\n getGlobalStatus(): CreatableStatus {\n // If no statuses have been reported, return the sentinel status\n if (Object.keys(this.statusMap).length === 0) return SENTINEL_STATUS\n return reduceToMinimumStatus(Object.values(this.statusMap))\n }\n\n getStatus(name: CreatableName): CreatableStatus | undefined {\n return this.statusMap[name]\n }\n\n onGlobalTransition(match: { from?: CreatableStatus; to?: CreatableStatus }, handler: (from: CreatableStatus, to: CreatableStatus) => void) {\n this.globalTransitions.push({ ...match, handler })\n }\n\n /**\n * Register a callback to be called on a specific transition.\n */\n onTransition(match: { from?: CreatableStatus; name: string; to?: CreatableStatus }, handler: (from: CreatableStatus, to: CreatableStatus) => void) {\n this.transitions.push({ ...match, handler })\n }\n\n override report(name: CreatableName, status: CreatableStatus, progress?: number | Error): void {\n // Capture the current status before updating\n const previous = this.statusMap[name]\n const previousGlobal = this.getGlobalStatus()\n\n // Update the status map with the new status\n super.report(name, status, progress)\n\n // If the status hasn't changed, do not run handlers\n if (previous === status) return\n this.runTransitions(this.transitions, previous, status, name)\n\n // If the global status hasn't changed, do not run handlers\n const globalStatus = this.getGlobalStatus()\n if (previousGlobal === globalStatus) return\n this.runTransitions(this.globalTransitions, previousGlobal, globalStatus)\n }\n\n private runTransitions(\n transitions: (TransitionHandler | GlobalTransitionHandler)[],\n prev: CreatableStatus,\n next: CreatableStatus,\n name?: string,\n ) {\n for (const {\n from, to, name: matchName, handler,\n } of transitions as TransitionHandler[]) {\n if ((matchName === undefined || matchName === name)\n && (from === undefined || from === prev)\n && (to === undefined || to === next)) {\n handler(prev, next)\n }\n }\n }\n}\n","import { assertEx } from '@xylabs/sdk-js'\nimport type { ChainContextRead, XL1BlockNumber } from '@xyo-network/xl1-protocol-lib'\nimport { asTimePayload, TimeSchema } from '@xyo-network/xl1-protocol-lib'\n\nimport { hashFromBlockNumber, hydrateBlock } from '../../block/index.ts'\n\n/** Xl1BlockNumberToEthBlockNumber helper function. */\nexport async function xl1BlockNumberToEthBlockNumber(context: ChainContextRead, xl1BlockNumber: XL1BlockNumber): Promise<number> {\n const blockHash = await hashFromBlockNumber(context, xl1BlockNumber)\n const hydratedBlock = await hydrateBlock(context, blockHash)\n const timePayload = asTimePayload(hydratedBlock[1].find(p => p.schema === TimeSchema), { required: true })\n return assertEx(timePayload.ethereum, () => 'No ethereum timestamp found on block')\n}\n","import { HDWallet } from '@xyo-network/sdk-js'\n\nimport { DEFAULT_WALLET_PATH } from './paths.ts'\n\n/**\n * Initializes a wallet to the default XYO path from a mnemonic phrase\n * @param walletPhrase The mnemonic phrase for the wallet\n * @returns A wallet initialized to the default XYO path using the provided phrase\n */\nexport const generateXyoBaseWalletFromPhrase = (walletPhrase: string) => {\n const wallet = HDWallet.fromPhrase(walletPhrase, DEFAULT_WALLET_PATH)\n return wallet\n}\n","/** WALLET_COMPLIANCE constant. */\nexport const WALLET_COMPLIANCE = '44\\'' as const\n\n/** COIN_TYPES constant. */\nexport const COIN_TYPES = { Ethereum: '60\\'' } as const\n\n/** ACCOUNT_TYPE constant. */\nexport const ACCOUNT_TYPE = { GANACHE: '0\\'', XYO: '0\\'' } as const\n\n/** CHANGE_ADDRESS constant. */\nexport const CHANGE_ADDRESS = { META_MASK: '0', XYO: '0' } as const\n\n/** ADDRESS_INDEX constant. */\nexport const ADDRESS_INDEX = { META_MASK: '0', XYO: '0' } as const\n\n/** DEFAULT_WALLET_PATH constant. */\nexport const DEFAULT_WALLET_PATH = `m/${WALLET_COMPLIANCE}/${COIN_TYPES.Ethereum}/${ACCOUNT_TYPE.XYO}/${CHANGE_ADDRESS.XYO}`\n"],"mappings":"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","names":["assertEx","assertEx","assertEx","assertEx","assertEx","assertEx","isTransactionBoundWitnessWithStorageMeta","isDefined","isDefined","isDefined","isDefined","stepSize","result","StepSizes","StepSizes","range","assertEx","toSafeJsonString","zodAsFactory","zodIsFactory","zodToFactory","globalRegistry","z","z","z","z","z","globalRegistry","z","globalRegistry","z","z","globalRegistry","globalRegistry","z","z","globalRegistry","z","globalRegistry","z","globalRegistry","z","z","z","z","globalRegistry","z","isDefined","isUndefined","globalRegistry","z","globalRegistry","z","z","globalRegistry","globalRegistry","z","AddressZod","globalRegistry","z","z","z","globalRegistry","zodIsFactory","zodAsFactory","zodToFactory","z","z","zodAsFactory","zodIsFactory","zodToFactory","globalRegistry","z","z","globalRegistry","zodIsFactory","zodAsFactory","zodToFactory","z","zodAsFactory","zodIsFactory","zodToFactory","zodAsFactory","zodIsFactory","zodToFactory","z","z","zodIsFactory","zodAsFactory","zodToFactory","PayloadBuilder","PayloadBuilder","PayloadBuilder","PayloadBuilder","PayloadBundleSchema","PayloadBuilder","asXL1BlockNumber","PayloadBuilder","assertEx","toHex","asAnyPayload","PayloadBuilder","asXL1BlockNumber","elevatedPayloads","toHex","BoundWitnessBuilder","PayloadBuilder","defaultTransactionFees","delay","isDefined","assertEx","asAnyPayload","isAllowedBlockPayload","elevatedPayloads","hash","PayloadBuilder","asHash","asHash","elevatedPayloads","AttoXL1","AttoXL1","elevatedPayloads","asHash","assertEx","isAllowedBlockPayload","assertEx","PayloadBuilder","assertEx","PayloadBuilder","asXL1BlockNumber","defaultTransactionFees","isAllowedBlockPayload","assertEx","asXL1BlockNumber","defaultTransactionFees","isAllowedBlockPayload","PayloadBuilder","bundle","PayloadBuilder","PayloadBundleSchema","zodIsFactory","zodAsFactory","zodToFactory","AbstractCreatable","assertEx","IdLogger","assertEx","creatableProvider","AbstractCreatable","IdLogger","assertEx","assertEx","assertEx","zodAsFactory","zodIsFactory","zodToFactory","zodIsFactory","zodAsFactory","zodToFactory","isDefined","PayloadBuilder","z","z","z","AsObjectFactory","asSchema","isPayloadOfZodType","z","PayloadBuilder","PayloadBuilder","asHash","isUndefined","PayloadBuilder","AsObjectFactory","asSchema","hexToBigInt","toAddress","span","isTransfer","hexToBigInt","span","isTransfer","asXL1BlockNumber","StepSizes","stepSize","isDefined","assertEx","isDefined","isDefined","assertEx","asXL1BlockRange","StepSizes","asXL1BlockRange","assertEx","StepSizes","assertEx","isDefined","asXL1BlockNumber","asXL1BlockRange","assertEx","asXL1BlockRange","asXL1BlockNumber","isDefined","assertEx","isDefined","assertEx","toAddress","isTransfer","hexToBigInt","toAddress","toAddress","StepSizes","toAddress","isDefined","keccak256","asXL1BlockRange","StepSizes","stepSize","assertEx","StepSizes","stepSize","assertEx","StepSizes","isTransfer","assertEx","toAddress","assertEx","isDefined","asAttoXL1","asXL1BlockRange","isTransfer","XYO_STEP_REWARD_ADDRESS","isDefined","assertEx","isTransfer","XYO_STEP_REWARD_ADDRESS","asAttoXL1","asXL1BlockRange","asAttoXL1","asXL1BlockRange","asXL1BlockRange","asAttoXL1","assertEx","assertEx","isUndefined","PayloadBuilder","isDefined","isDefined","isDefined","asAttoXL1","isDefined","isDefined","isUndefined","isUndefined","toAddress","toAddress","isDefined","asBlockNumber","isDefined","asBlockNumber","assertEx","spanAsync","spanAsync","assertEx","isAllowedBlockPayload","elevatedPayloads","assertEx","exists","isTransactionBoundWitness","AsObjectFactory","asSchema","isPayloadOfSchemaType","hexToBigInt","toHex","isObject","asHash","assertEx","exists","isDefined","asXL1BlockNumber","asXL1BlockRange","AttoXL1","isChainQualifiedHeadConfig","isChainQualifiedRangeConfig","StepSizes","TransferSchema","Semaphore","AsObjectFactory","asSchema","isPayloadOfSchemaType","isStorageMeta","AsObjectFactory","asSchema","isPayloadOfSchemaType","isStorageMeta","asSchema","AsObjectFactory","asSchema","isPayloadOfSchemaType","isStorageMeta","spanRootAsync","assertEx","isAnyPayload","asXL1BlockNumber","StepSizes","spanRootAsync","assertEx","StepSizes","asXL1BlockNumber","isAnyPayload","asAddress","assertEx","spanRootAsync","asBlockBoundWitnessWithStorageMeta","asXL1BlockRange","spanRootAsync","assertEx","asBlockBoundWitnessWithStorageMeta","asXL1BlockRange","range","asAddress","assertEx","isAnyPayload","isHashMeta","PayloadBuilder","StepSizes","assertEx","isHashMeta","PayloadBuilder","StepSizes","isAnyPayload","assertEx","spanRootAsync","asBlockBoundWitnessWithStorageMeta","asXL1BlockRange","isChainQualifiedHeadConfig","isChainQualifiedRangeConfig","spanRootAsync","isChainQualifiedHeadConfig","assertEx","asBlockBoundWitnessWithStorageMeta","isChainQualifiedRangeConfig","asXL1BlockRange","range","assertEx","spanRootAsync","isAnyPayload","asXL1BlockNumber","StepSizes","spanRootAsync","assertEx","StepSizes","asXL1BlockNumber","isAnyPayload","asAddress","assertEx","spanRootAsync","asBlockBoundWitnessWithStorageMeta","asXL1BlockRange","isChainQualifiedHeadConfig","isChainQualifiedRangeConfig","spanRootAsync","isChainQualifiedHeadConfig","assertEx","asBlockBoundWitnessWithStorageMeta","isChainQualifiedRangeConfig","asXL1BlockRange","range","asAddress","StepSizes","Semaphore","assertEx","AttoXL1","isChainQualifiedRangeConfig","asXL1BlockRange","exists","TransferSchema","isDefined","block","isChainQualifiedHeadConfig","range","head","asXL1BlockNumber","asHash","assertEx","exists","isUndefined","asXL1BlockNumber","BlockViewerMoniker","LRUCache","z","context","assertEx","isUndefined","asXL1BlockNumber","exists","BlockViewerMoniker","assertEx","PayloadBuilder","AccountBalanceViewerMoniker","asXL1BlockRange","BlockViewerMoniker","isChainQualifiedHeadConfig","AccountBalanceViewerMoniker","BlockViewerMoniker","PayloadBuilder","isChainQualifiedHeadConfig","assertEx","asXL1BlockRange","assertEx","ChainContractViewerMoniker","FinalizationViewerMoniker","assertEx","FinalizationViewerMoniker","ChainContractViewerMoniker","assertEx","exists","isAnyPayload","z","exists","asAnyPayload","isAnyPayload","exists","asAnyPayload","isAnyPayload","isAnyPayload","assertEx","exists","z","DataLakeViewerMoniker","DataLakeViewerMoniker","exists","isAnyPayload","PayloadBuilder","DataLakeRunnerMoniker","isAnyPayload","isAnyPayload","exists","isAnyPayload","PayloadBuilder","DataLakeRunnerMoniker","DataLakeViewerMoniker","DataLakeViewerMoniker","assertEx","asSignedHydratedBlockWithStorageMeta","ChainContractViewerMoniker","FinalizationViewerMoniker","asSignedHydratedBlockWithStorageMeta","assertEx","FinalizationViewerMoniker","ChainContractViewerMoniker","assertEx","isDefined","PayloadBuilder","asXL1BlockNumber","DataLakeRunnerMoniker","TransferSchema","XyoConnectionMoniker","XyoGatewayMoniker","XyoConnectionMoniker","XyoGatewayMoniker","assertEx","isDefined","asXL1BlockNumber","PayloadBuilder","DataLakeRunnerMoniker","TransferSchema","assertEx","exists","PayloadBuilder","BlockValidationViewerMoniker","ChainContractViewerMoniker","FinalizationViewerMoniker","assertEx","BlockValidationViewerMoniker","ChainContractViewerMoniker","FinalizationViewerMoniker","exists","PayloadBuilder","bundle","exists","isDefined","isHash","isHashMeta","isPayloadBundle","isHash","isDefined","isPayloadBundle","isHashMeta","bundle","exists","isUndefined","isUndefined","assertEx","assertEx","PayloadBuilder","MempoolRunnerMoniker","PayloadBuilder","MempoolRunnerMoniker","Account","PayloadBuilder","XyoSignerMoniker","XyoSignerMoniker","Account","elevatedPayloads","PayloadBuilder","isDefined","isDefined","events","asAddress","assertEx","asAddress","assertEx","asAddress","toAddress","assertEx","StakeEventsViewerMoniker","StakeViewerMoniker","assertEx","asAddress","StakeEventsViewerMoniker","toAddress","StakeViewerMoniker","asHash","assertEx","isDefined","asTimePayload","asXL1BlockNumber","BlockViewerMoniker","assertEx","asXL1BlockNumber","asTimePayload","isDefined","BlockViewerMoniker","asHash","assertEx","PayloadBuilder","AccountBalanceViewerMoniker","asXL1BlockRange","BlockViewerMoniker","ChainContractViewerMoniker","isChainQualifiedHeadConfig","TransactionValidationViewerMoniker","AccountBalanceViewerMoniker","ChainContractViewerMoniker","BlockViewerMoniker","PayloadBuilder","isChainQualifiedHeadConfig","assertEx","asXL1BlockRange","TransactionValidationViewerMoniker","assertEx","exists","BlockViewerMoniker","isTransactionBoundWitnessWithHashMeta","assertEx","exists","isTransactionBoundWitnessWithHashMeta","BlockViewerMoniker","assertEx","exists","isNull","asXL1BlockNumber","BlockViewerMoniker","WindowedBlockViewerMoniker","Mutex","WindowedBlockViewerMoniker","Mutex","asXL1BlockNumber","exists","assertEx","BlockViewerMoniker","isNull","assertEx","asTimePayload","TimeSchema","asTimePayload","TimeSchema","assertEx"]}
1
+ {"version":3,"sources":["../../src/actor/ActorV3.ts","../../src/amount/splitOnDecimal.ts","../../src/amount/splitOnDecimalToString.ts","../../src/amount/ShiftedBigInt.ts","../../src/amount/XL1Amount.ts","../../src/block/hydrate/allHashesPresent.ts","../../src/block/hydrate/blockPayloadsFromHydratedBlock.ts","../../src/block/hydrate/flattenHydratedBlock.ts","../../src/block/hydrate/flattenHydratedBlocks.ts","../../src/block/hydrate/hydrateBlock.ts","../../src/block/hydrate/transactionsFromHydratedBlock.ts","../../src/block/hydrate/tryHydrateBlock.ts","../../src/block/primitives/blockFromBlockNumber.ts","../../src/ChainContextHelpers.ts","../../src/driver/cache/LruCacheMap.ts","../../src/driver/memory/MemoryMap.ts","../../src/block/primitives/frames/calculateFramesFromRange.ts","../../src/block/primitives/frames/deepCalculateFramesFromRange.ts","../../src/block/primitives/hashFromBlockNumber.ts","../../src/block/primitives/model.ts","../../src/block/primitives/toStepIdentityString.ts","../../src/block/primitives/validateTransactionOpcodes.ts","../../src/config/Actor.ts","../../src/validation/lib/isLocalhost.ts","../../src/validation/lib/getUrl.ts","../../src/validation/schema/Address.ts","../../src/validation/schema/Mnemonic.ts","../../src/config/Base.ts","../../src/config/Chain.ts","../../src/config/DataLake/DataLake.ts","../../src/config/DataLake/RestDataLakeConfig.ts","../../src/config/DataLake/DataLakeRemoteConfig.ts","../../src/config/DataLake/RouterDataLakeConfig.ts","../../src/config/Evm.ts","../../src/config/Log.ts","../../src/config/Providers.ts","../../src/config/Provider.ts","../../src/config/Remote.ts","../../src/config/storage/driver/Mongo.ts","../../src/config/storage/Storage.ts","../../src/config/Telemetry.ts","../../src/config/Validation.ts","../../src/config/Actors.ts","../../src/config/Config.ts","../../src/config/HostActor.ts","../../src/config/UsageMeta.ts","../../src/constants.ts","../../src/context/Actor.ts","../../src/model/CreatableProviderContext.zod.ts","../../src/model/PayloadBundle/bundledPayloadToHydratedBlock.ts","../../src/model/PayloadBundle/bundledPayloadToHydratedTransaction.ts","../../src/model/PayloadBundle/hydratedBlockToPayloadBundle.ts","../../src/model/PayloadBundle/hydratedTransactionToPayloadBundle.ts","../../src/transaction/buildRandomTransaction.ts","../../src/createTransferPayload.ts","../../src/transaction/buildTransaction.ts","../../src/transaction/buildUnsignedTransaction.ts","../../src/transaction/confirmSubmittedTransaction.ts","../../src/transaction/hydrateTransaction.ts","../../src/transaction/primitives/transactionBlockByteCount.ts","../../src/transaction/primitives/transactionElevatedPayloads.ts","../../src/transaction/primitives/transactionOperations.ts","../../src/transaction/primitives/transactionRequiredGas.ts","../../src/transaction/script.ts","../../src/transaction/signTransaction.ts","../../src/transaction/TransactionBuilder.ts","../../src/CreatableProvider/AbstractCreatableProvider.ts","../../src/CreatableProvider/ProviderFactory.ts","../../src/CreatableProvider/CreatableProvider.ts","../../src/CreatableProvider/CreatableProviderRegistry.ts","../../src/CreatableProvider/LabeledCreatableProviderFactory.ts","../../src/CreatableProvider/ProviderFactoryLocator.ts","../../src/context/getEmptyProviderContext.ts","../../src/context/HostActor.ts","../../src/createDeclarationPayload.ts","../../src/eip-712/Payloads/EIP712Data.ts","../../src/eip-712/Types.ts","../../src/eip-712/Payloads/EIP712Signature.ts","../../src/eip-712/sign.ts","../../src/eip-712/verify.ts","../../src/multipliers.ts","../../src/payloads/AddressPairPayload.ts","../../src/payloads/netBalancesForPayloads.ts","../../src/payloads/netSchemasForPayloads.ts","../../src/payloads/netTransfersForPayloads.ts","../../src/primitives/block/range/blockRangeSteps.ts","../../src/primitives/block/rate/blockRate.ts","../../src/primitives/block/rate/timeHelpers.ts","../../src/primitives/block/rate/stepRate.ts","../../src/primitives/block/rate/timeRate.ts","../../src/primitives/chain/getWindowedChain.ts","../../src/primitives/chain/step/chainStepRewardAddress.ts","../../src/primitives/payload/mergeTransfers.ts","../../src/primitives/step/completedStepRewardAddress.ts","../../src/primitives/step/derivedReceiveAddress.ts","../../src/primitives/step/stepBlockRange.ts","../../src/primitives/step/stepTransferIndex.ts","../../src/primitives/chain/step/stepRewardBlock.ts","../../src/primitives/chain/step/stepRewardTotal.ts","../../src/primitives/chain/step/stepsRewardTotal.ts","../../src/primitives/chain/time/externalBlockNumberFromXL1BlockNumber.ts","../../src/primitives/chain/time/externalBlockRangeFromXL1BlockRange.ts","../../src/primitives/chain/time/externalBlockRangeFromStep.ts","../../src/primitives/datalake/addDataLakePayloadsToPayloads.ts","../../src/primitives/datalake/addDataLakePayloads.ts","../../src/primitives/mapToMapType.ts","../../src/primitives/readPayloadMapFromStore.ts","../../src/primitives/rewardFromBlockNumber.ts","../../src/primitives/rewards/networkStakeStepRewardPositionWeight.ts","../../src/primitives/stake/activeStakeAtTimeByAddress.ts","../../src/primitives/stake/mergedAddRemoveStakeEventsByStaker.ts","../../src/primitives/stake/activeStakeAtTimeByPosition.ts","../../src/primitives/stake/mergedAddRemoveStakeEventsByPosition.ts","../../src/primitives/stake/allStakersForRange.ts","../../src/primitives/stake/allStakersForStep.ts","../../src/primitives/stake/weightedStakeForRangeByPosition.ts","../../src/primitives/state/findMostRecentBlock.ts","../../src/primitives/state/hydratedBlockByNumber.ts","../../src/primitives/transaction/elevatedPayloads.ts","../../src/primitives/uncle/scoreUncle.ts","../../src/primitives/uncle/findBestUncle.ts","../../src/primitives/uncle/findUncles.ts","../../src/services/StakeIntentService/ChainIndexingServiceStateSchema.ts","../../src/SignedBigInt.ts","../../src/simple/accountBalance/SimpleAccountBalanceViewer.ts","../../src/summary/model/BalancesStepSummary.ts","../../src/summary/model/SchemasStepSummary.ts","../../src/summary/model/StepSummary.ts","../../src/summary/model/TransfersSummary.ts","../../src/summary/primitives/balances/balancesStepSummaryFromRange.ts","../../src/summary/primitives/balances/balancesSummary.ts","../../src/summary/primitives/schemas/schemasStepSummaryFromRange.ts","../../src/summary/primitives/schemas/schemasSummary.ts","../../src/summary/primitives/transfers/transfersStepSummaryFromRange.ts","../../src/summary/primitives/transfers/transfersSummary.ts","../../src/simple/block/SimpleBlockViewer.ts","../../src/utils/HydratedCache.ts","../../src/utils/isZodError.ts","../../src/simple/blockReward/SimpleBlockRewardViewer.ts","../../src/simple/blockValidation/SimpleBlockValidationViewer.ts","../../src/simple/chainContractViewer/SimpleChainContractViewer.ts","../../src/simple/client/SimpleXyoClient.ts","../../src/simple/datalake/RestDataLakeRunner.ts","../../src/simple/datalake/AbstractRestDataLake.ts","../../src/simple/datalake/RestDataLakeViewer.ts","../../src/simple/datalake/SimpleDataLakeRunner.ts","../../src/simple/datalake/AbstractSimpleDataLake.ts","../../src/simple/datalake/SimpleDataLakeViewer.ts","../../src/simple/finalization/SimpleFinalizationRunner.ts","../../src/simple/finalization/SimpleFinalizationViewer.ts","../../src/simple/gateway/SimpleXyoGateway.ts","../../src/simple/gateway/SimpleXyoGatewayRunner.ts","../../src/simple/mempool/SimpleMempoolRunner.ts","../../src/simple/mempool/SimpleMempoolViewer.ts","../../src/simple/network/SimpleXyoNetwork.ts","../../src/simple/network/lib/FailedNetworkStatusPayloads.ts","../../src/simple/network/lib/StatusNetworks.ts","../../src/simple/permissions/SimpleXyoPermissions.ts","../../src/simple/permissions/store/MemoryPermissions.ts","../../src/simple/runner/SimpleXyoRunner.ts","../../src/simple/signer/SimpleXyoSigner.ts","../../src/simple/StakeEventsViewer/SimpleStakeEventsViewer.ts","../../src/simple/StakeTotalsViewer/SimpleStakeTotalsViewer.ts","../../src/simple/StakeViewer/SimpleStakeViewer.ts","../../src/simple/timeSync2/SimpleTimeSyncViewer.ts","../../src/simple/transactionValidation/SimpleTransactionValidationViewer.ts","../../src/simple/TransactionViewer/SimpleTransactionViewer.ts","../../src/simple/windowedBlock/SimpleWindowedBlockViewer.ts","../../src/status/ServiceStatus.ts","../../src/status/RuntimeStatusMonitor.ts","../../src/time/primitives/xl1BlockNumberToEthBlockNumber.ts","../../src/wallet/generateXyoBaseWalletFromPhrase.ts","../../src/wallet/paths.ts"],"sourcesContent":["import type {\n CreatableInstance, CreatableName, CreatableParams, CreatableStatusReporter, EmptyObject,\n Logger,\n} from '@xylabs/sdk-js'\nimport {\n AbstractCreatable,\n assertEx,\n delay, IdLogger,\n} from '@xylabs/sdk-js'\nimport type { AccountInstance } from '@xyo-network/sdk-js'\nimport { Semaphore } from 'async-mutex'\nimport z from 'zod'\n\nimport type { ProviderFactoryLocatorInstance } from '../CreatableProvider/index.ts'\n\nconst CreatableNameZod = z.custom<CreatableName>(val => typeof val === 'string' && val.length > 0)\nconst StatusReporterInstanceZod = z.custom<CreatableStatusReporter>(val => val && typeof val === 'object' && 'report' in val)\nconst AccountInstanceZod = z.custom<AccountInstance>(val => val && typeof val === 'object' && 'address' in val)\n\n/** ActorParamsV3Zod constant. */\nexport const ActorParamsV3Zod = z.object({\n account: AccountInstanceZod,\n locator: z.unknown(),\n name: CreatableNameZod,\n statusReporter: StatusReporterInstanceZod.optional(),\n})\n\n/** ActorParamsV3Zod type. */\nexport type ActorParamsV3Zod = z.infer<typeof ActorParamsV3Zod>\n\n/** ActorParamsV3 type. */\nexport type ActorParamsV3<T extends EmptyObject | void = void> = CreatableParams & {\n account: AccountInstance\n locator: ProviderFactoryLocatorInstance\n} & (T extends void ? EmptyObject : T)\n\n/** ActorInstanceV3 type. */\nexport type ActorInstanceV3<T extends ActorParamsV3 = ActorParamsV3> = CreatableInstance<T>\n\n/** ActorV3 implementation. */\nexport abstract class ActorV3<TParams extends ActorParamsV3 = ActorParamsV3> extends AbstractCreatable<TParams> {\n protected readonly _intervals: Map<string, ReturnType<typeof setInterval>> = new Map()\n protected readonly _semaphores: Map<string, Semaphore> = new Map()\n protected readonly _timeouts: Map<string, ReturnType<typeof setTimeout>> = new Map()\n\n private _logger?: Logger\n\n override get logger() {\n this._logger = new IdLogger(assertEx(this.context.logger, () => `Logger is required in context for actor ${this.name}.`), () => this.name)\n return this._logger\n }\n\n protected get account() {\n return this.params.account\n }\n\n protected get context() {\n return this.locator.context\n }\n\n protected get locator() {\n return this.params.locator\n }\n\n static override async paramsHandler<T extends ActorInstanceV3>(params: Partial<T['params']>) {\n const baseParams = await super.paramsHandler({ ...params, name: params.name ?? 'UnknownActor' })\n const account = assertEx(params.account, () => `params.account is required for actor ${baseParams.name}.`)\n const locator = assertEx(params.locator, () => `params.locator is required for actor ${baseParams.name}.`)\n return {\n ...baseParams, account, locator,\n } satisfies ActorParamsV3\n }\n\n /**\n * The timer runs until the actor is deactivated (or you manually stop it).\n */\n registerTimer(timerName: string, callback: () => Promise<void>, dueTimeMs: number, periodMs: number) {\n if (this.status !== 'starting') {\n this.logger?.warn(\n `Cannot register timer '${timerName}' because actor is not starting.`,\n )\n return\n }\n\n let running = false\n\n this._semaphores.set(timerName, new Semaphore(1))\n\n const timeoutId = setTimeout(() => {\n const intervalId = setInterval(() => {\n const semaphore = this._semaphores.get(timerName)\n if (this.status !== 'started' || !this._intervals.has(timerName) || !semaphore || running) return\n if (semaphore.isLocked()) {\n this.logger?.warn(\n `Skipping timer '${this.name}:${timerName}' execution because previous execution is still running.`,\n )\n return\n }\n semaphore.acquire().then(([, release]) => {\n const startTime = Date.now()\n running = true\n callback()\n .then(() => {\n const duration = Date.now() - startTime\n if (duration > periodMs) {\n this.logger?.warn(\n `Timer '${this.name}:${timerName}' execution took longer (${duration}ms) than the period (${periodMs}ms).`,\n )\n } else if (duration > 5000) {\n this.logger?.warn(\n `Timer '${this.name}:${timerName}' execution took longer (${duration}ms) than 5000ms.`,\n )\n }\n })\n .catch((error) => {\n this.logger?.error(`Error in timer '${this.name}:${timerName}': ${error}`)\n this.logger?.error(error.stack)\n })\n .finally(() => {\n release()\n running = false\n })\n }).catch((error) => {\n this.logger?.error(`Error acquiring semaphore for timer '${this.name}:${timerName}': ${error}`)\n })\n }, periodMs)\n\n // store interval so we can clear it on stop()\n this._intervals.set(timerName, intervalId)\n }, dueTimeMs)\n\n // store timeout so we can clear it on stop() if interval hasn't started yet\n this._timeouts.set(timerName, timeoutId)\n\n this.logger?.log(\n `Timer '${this.name}:${timerName}' registered: first call after ${dueTimeMs}ms, recurring every ${periodMs}ms.`,\n )\n }\n\n /**\n * Called by the Orchestrator when the actor is deactivated.\n * Stop all running timers.\n */\n override async stopHandler() {\n await super.stopHandler()\n this.logger?.log('Stopping all timers...')\n\n // wait for all semaphores to be free and acquire them to prevent new tasks from starting\n await Promise.all(\n [...this._semaphores.values()].map(async (semaphore) => {\n // Wait for any running tasks to complete\n while (semaphore.isLocked()) {\n this.logger?.log('Waiting for running timer task to complete...')\n await delay(500)\n }\n await semaphore.acquire()\n }),\n )\n\n this._semaphores.clear()\n\n for (const [, timeoutRef] of this._timeouts.entries()) {\n clearTimeout(timeoutRef)\n }\n this._timeouts.clear()\n\n for (const [, intervalRef] of this._intervals.entries()) {\n clearInterval(intervalRef)\n }\n this._intervals.clear()\n\n this.logger?.log('Stopped.')\n }\n}\n\n/** Actor implementation. */\nexport abstract class Actor<TParams extends ActorParamsV3 = ActorParamsV3> extends ActorV3<TParams> {}\n","/** Splits a bigint into whole and decimal parts based on the specified number of decimal places */\nexport const splitOnDecimal = (value: bigint, places = 18): [bigint, bigint] => {\n const whole = value / BigInt(10 ** places)\n const decimal = value % BigInt(10 ** places)\n return [whole, decimal]\n}\n","import { splitOnDecimal } from './splitOnDecimal.ts'\n\n/** Formats a bigint as a locale-aware decimal string with configurable precision and character limits */\nexport const splitOnDecimalToString = (\n value: bigint,\n places = 18,\n maxDecimal = places,\n maxCharacters = 9,\n minDecimals = 1,\n locale: Intl.LocalesArgument = 'en-US',\n): string => {\n const [whole, decimal] = splitOnDecimal(value, places)\n const remainderLength = decimal.toString().length\n const precedingZerosInDecimal = places - remainderLength\n if (whole === 0n && precedingZerosInDecimal >= maxDecimal && decimal !== 0n) return '< 0.'.padEnd(maxDecimal + 5, '0') + '1'\n\n const wholeCharacters = whole.toString(10).length\n const calcMaxDecimalCharacters = maxCharacters === -1 ? places : wholeCharacters > maxCharacters ? 0 : maxCharacters - wholeCharacters\n const maxDecimalCharacters = Math.min(maxDecimal, calcMaxDecimalCharacters)\n\n // Format whole number with thousand separators according to locale\n const formattedWhole = new Intl.NumberFormat(locale, {\n maximumFractionDigits: 0,\n useGrouping: true,\n }).format(whole)\n\n // Get decimal separator for the locale\n const decimalSeparator = new Intl.NumberFormat(locale)\n .formatToParts(1.1)\n .find(part => part.type === 'decimal')?.value ?? '.'\n\n // Pad decimal part to correct number of places\n let paddedDecimal = decimal.toString().padStart(places, '0').slice(0, maxDecimalCharacters)\n // remove unneeded trailing zeros (honoring minDecimals)\n while (paddedDecimal.length > minDecimals && paddedDecimal.endsWith('0')) {\n paddedDecimal = paddedDecimal.slice(0, -1)\n }\n\n return `${formattedWhole}${paddedDecimal.length > 0 ? decimalSeparator : ''}${paddedDecimal}`\n}\n","import type { ShiftedBigIntConfig } from '@xyo-network/xl1-protocol-lib'\n\nimport { splitOnDecimalToString } from './splitOnDecimalToString.ts'\n\n/** Represents a bigint with a fixed decimal point shift, supporting locale-aware string formatting */\nexport class ShiftedBigInt {\n static readonly defaultConfig: ShiftedBigIntConfig = {\n places: 18,\n maxDecimal: 18,\n maxCharacters: 9,\n minDecimals: 1,\n locale: 'en-US',\n }\n\n config: ShiftedBigIntConfig\n value: bigint\n\n constructor(\n value: bigint | ShiftedBigInt,\n config: Partial<ShiftedBigIntConfig> = {},\n ) {\n this.value = typeof value === 'bigint' ? value : value.value\n this.config = {\n ...ShiftedBigInt.defaultConfig, ...(typeof value === 'bigint' ? {} : value.config), ...config,\n }\n }\n\n get locale(): Intl.LocalesArgument {\n return this.config.locale ?? 'en-US'\n }\n\n get maxCharacters(): number {\n return this.config.maxCharacters ?? 9\n }\n\n get maxDecimal(): number {\n return this.config.maxDecimal ?? this.places\n }\n\n get minDecimals(): number {\n return this.config.minDecimals ?? 1\n }\n\n get places(): number {\n return this.config.places ?? 18\n }\n\n toFullString(): string {\n return splitOnDecimalToString(\n this.value,\n this.places,\n this.places,\n Infinity,\n this.places,\n this.locale,\n )\n }\n\n toShortString(): string {\n return splitOnDecimalToString(\n this.value,\n this.places,\n this.maxDecimal,\n this.maxCharacters,\n this.minDecimals,\n this.locale,\n )\n }\n\n toString(): string {\n return this.toFullString()\n }\n}\n","/* eslint-disable @typescript-eslint/member-ordering */\nimport { assertEx } from '@xylabs/sdk-js'\nimport type { ShiftedBigIntConfig, XL1AmountInstance } from '@xyo-network/xl1-protocol-lib'\nimport {\n AttoXL1, FemtoXL1, MicroXL1, MilliXL1, NanoXL1, PicoXL1, XL1,\n XL1Places,\n} from '@xyo-network/xl1-protocol-lib'\n\nimport { ShiftedBigInt } from './ShiftedBigInt.ts'\n\nconst MAX_XL1_AMOUNT = 2n ** 256n - 1n\nconst allowedPlaces = Object.values(XL1Places)\n\n/** Represents an XL1 token amount stored in AttoXL1, with conversions to milli, micro, nano, pico, femto, and atto denominations */\nexport class XL1Amount implements XL1AmountInstance {\n value: AttoXL1\n private locale: Intl.LocalesArgument\n\n constructor(value: bigint, locale: Intl.LocalesArgument = 'en-US') {\n this.locale = locale\n this.value = AttoXL1(value > MAX_XL1_AMOUNT ? MAX_XL1_AMOUNT : value < 0n ? 0n : value)\n }\n\n static from(value: bigint, places: bigint = XL1Places.atto) {\n assertEx(allowedPlaces.includes(places), () => `Invalid conversion places (${places} not in ${allowedPlaces})`)\n return new XL1Amount(value * 10n ** BigInt(places))\n }\n\n static fromMilli(value: MilliXL1) {\n return this.from(value, XL1Places.milli)\n }\n\n static fromMicro(value: MicroXL1) {\n return this.from(value, XL1Places.micro)\n }\n\n static fromNano(value: NanoXL1) {\n return this.from(value, XL1Places.nano)\n }\n\n static fromPico(value: PicoXL1) {\n return this.from(value, XL1Places.pico)\n }\n\n static fromFemto(value: FemtoXL1) {\n return this.from(value, XL1Places.femto)\n }\n\n static fromAtto(value: AttoXL1) {\n return this.from(value, XL1Places.atto)\n }\n\n static fromXL1(value: XL1) {\n return this.from(value, XL1Places.xl1)\n }\n\n to(places: number | bigint = XL1Places.atto) {\n return this.value / 10n ** BigInt(places)\n }\n\n get milli() {\n return MilliXL1(this.to(XL1Places.milli))\n }\n\n get micro() {\n return MicroXL1(this.to(XL1Places.micro))\n }\n\n get nano() {\n return NanoXL1(this.to(XL1Places.nano))\n }\n\n get pico() {\n return PicoXL1(this.to(XL1Places.pico))\n }\n\n get femto() {\n return FemtoXL1(this.to(XL1Places.femto))\n }\n\n get atto() {\n return AttoXL1(this.to(XL1Places.atto))\n }\n\n get xl1() {\n return XL1(this.to(XL1Places.xl1))\n }\n\n toString(places: number = Number(XL1Places.atto), config: Partial<ShiftedBigIntConfig> = {}): string {\n assertEx(allowedPlaces.includes(BigInt(places)), () => `Invalid conversion places (${places} not in ${allowedPlaces})`)\n return new ShiftedBigInt(\n this.value,\n {\n places,\n locale: this.locale,\n maxDecimal: places,\n minDecimals: 0,\n maxCharacters: places,\n ...config,\n },\n ).toShortString()\n }\n}\n","import type { Hash } from '@xylabs/sdk-js'\nimport type { Payload, WithHashMeta } from '@xyo-network/sdk-js'\n\n/** AllHashesPresent helper function. */\nexport function allHashesPresent(hashes: Hash[], payloads: WithHashMeta<Payload>[]): boolean {\n const payloadHashes = new Set(payloads.map(p => p._hash))\n return hashes.every(hash => payloadHashes.has(hash))\n}\n","import { assertEx } from '@xylabs/sdk-js'\nimport type { WithStorageMeta } from '@xyo-network/sdk-js'\nimport type { HydratedBlockWithStorageMeta } from '@xyo-network/xl1-protocol-lib'\nimport { isTransactionBoundWitness } from '@xyo-network/xl1-protocol-lib'\n\n/** blockPayloadsFromHydratedBlock constant. */\nexport const blockPayloadsFromHydratedBlock = (block: HydratedBlockWithStorageMeta): WithStorageMeta[] => {\n return block[0].payload_hashes.map(hash => assertEx(\n block[1].find(p => p._hash === hash),\n () => `missing payload ${hash}`,\n )).filter(x => !isTransactionBoundWitness(x))\n}\n","import type { Payload } from '@xyo-network/sdk-js'\nimport { type BlockBoundWitness, toHydratedBlock } from '@xyo-network/xl1-protocol-lib'\n\n/** flattenHydratedBlock constant. */\nexport const flattenHydratedBlock = <B extends BlockBoundWitness, P extends Payload>(hydratedBlock: [B, P[]]): (P | B)[] => {\n const [blk, blkPayloads] = hydratedBlock\n return [...blkPayloads, blk]\n}\n\n/** tryUnflattenHydratedBlock constant. */\nexport const tryUnflattenHydratedBlock = <\n B extends BlockBoundWitness,\n P extends Payload,\n>(flattened: (P | B)[]): [B, P[]] | undefined => {\n // Last element is the block\n const blk = flattened.at(-1) as B\n\n // All previous elements are payloads\n const payloads = flattened.slice(0, -1) as P[]\n\n return toHydratedBlock([blk, payloads])\n}\n\n/** unflattenHydratedBlock constant. */\nexport const unflattenHydratedBlock = <\n B extends BlockBoundWitness,\n P extends Payload,\n>(flattened: (P | B)[]): [B, P[]] => toHydratedBlock(tryUnflattenHydratedBlock(flattened), true) as [B, P[]]\n","import type { HydratedBlock } from '@xyo-network/xl1-protocol-lib'\n\nimport { flattenHydratedBlock } from './flattenHydratedBlock.ts'\n\n/** flattenHydratedBlocks constant. */\nexport const flattenHydratedBlocks = <T extends HydratedBlock>(hydratedBlocks: T[]): (T[0] | T[1][number])[] =>\n hydratedBlocks.flatMap(blk => flattenHydratedBlock(blk))\n","import type { Hash } from '@xylabs/sdk-js'\nimport { assertEx } from '@xylabs/sdk-js'\nimport { asAnyPayload } from '@xyo-network/sdk-js'\nimport type { BlockContextRead, HydratedBlockWithStorageMeta } from '@xyo-network/xl1-protocol-lib'\nimport { asBlockBoundWitnessWithStorageMeta, isTransactionBoundWitnessWithStorageMeta } from '@xyo-network/xl1-protocol-lib'\n\nimport { allHashesPresent } from './allHashesPresent.ts'\n\n/** hydrateBlock constant. */\nexport const hydrateBlock = async (\n context: BlockContextRead,\n hash: Hash,\n maxDepth: number = 1,\n minDepth = maxDepth,\n): Promise<HydratedBlockWithStorageMeta> => {\n assertEx(maxDepth >= 0, () => 'maxDepth must be greater than or equal to 0')\n assertEx(minDepth >= 0, () => 'minDepth must be greater than or equal to 0')\n assertEx(maxDepth >= minDepth, () => 'maxDepth must be greater than or equal to minDepth')\n\n const { chainMap } = context\n\n const [block] = await chainMap.get([hash])\n const bw = assertEx(asBlockBoundWitnessWithStorageMeta(\n assertEx(block, () => `block ${hash} not found`),\n ), () => `hash ${hash} is not a BlockBoundWitness`)\n\n if (maxDepth === 0) return [bw, []]\n const blkPayloads = (await chainMap.get(bw.payload_hashes)).map(p => asAnyPayload(p, true))\n if (minDepth === 1) assertEx(allHashesPresent(bw.payload_hashes, blkPayloads), () => `Unable to find all payloads for block ${hash}`)\n if (maxDepth === 1) return [bw, blkPayloads]\n const transactions = blkPayloads.filter(isTransactionBoundWitnessWithStorageMeta)\n const transactionsPayloadHashes = transactions.flatMap(tx => tx.payload_hashes)\n const transactionsPayloads = (await chainMap.get(transactionsPayloadHashes)).map(p => asAnyPayload(p, true))\n assertEx(allHashesPresent(transactionsPayloadHashes, transactionsPayloads), () => `Unable to find all payloads for transactions in block ${hash}`)\n const allPayloadsHashes = new Set([...blkPayloads, ...transactionsPayloads].flatMap(p => p._hash))\n const allPayloads = (await chainMap.get([...allPayloadsHashes])).map(p => asAnyPayload(p, true))\n const allPayloadsFiltered = allPayloads.filter(p => allPayloadsHashes.has(p._hash))\n if (maxDepth === 2) assertEx(allHashesPresent(\n [...allPayloadsHashes],\n allPayloadsFiltered,\n ), () => `Unable to find all payloads for transactions in block ${hash}`)\n return [bw, allPayloadsFiltered]\n}\n","import type { HydratedBlock, TransactionBoundWitnessWithHashMeta } from '@xyo-network/xl1-protocol-lib'\nimport { isTransactionBoundWitnessWithHashMeta } from '@xyo-network/xl1-protocol-lib'\n\n/** transactionsFromHydratedBlock constant. */\nexport const transactionsFromHydratedBlock = (block: HydratedBlock): TransactionBoundWitnessWithHashMeta[] => {\n return block[1].filter(isTransactionBoundWitnessWithHashMeta)\n}\n","import type { Hash } from '@xylabs/sdk-js'\nimport { assertEx } from '@xylabs/sdk-js'\nimport type { ReadArchivist } from '@xyo-network/sdk-js'\nimport type { HydratedBlock } from '@xyo-network/xl1-protocol-lib'\nimport { isBlockBoundWitnessWithStorageMeta, isTransactionBoundWitnessWithStorageMeta } from '@xyo-network/xl1-protocol-lib'\n\n/** tryHydrateBlock constant. */\nexport const tryHydrateBlock = async (\n archivist: ReadArchivist,\n hash: Hash,\n maxDepth: number = 1,\n): Promise<HydratedBlock | undefined> => {\n assertEx(maxDepth >= 0, () => 'maxDepth must be greater than or equal to 0')\n const bw = (await archivist.get([hash])).find(isBlockBoundWitnessWithStorageMeta)\n if (!bw) return undefined\n if (maxDepth === 0) return [bw, []]\n const blkPayloads = await archivist.get(bw.payload_hashes)\n if (maxDepth === 1) return [bw, blkPayloads]\n const transactions = blkPayloads.filter(isTransactionBoundWitnessWithStorageMeta)\n const transactionsPayloadHashes = transactions.flatMap(tx => tx.payload_hashes)\n const transactionsPayloads = await archivist.get(transactionsPayloadHashes)\n const allPayloadsHashes = new Set([...blkPayloads, ...transactionsPayloads].flatMap(p => p._hash))\n const allPayloads = await archivist.get([...allPayloadsHashes])\n const allPayloadsFiltered = allPayloads.filter(p => allPayloadsHashes.has(p._hash))\n return [bw, allPayloadsFiltered]\n}\n","import {\n asHash, type Hash, isDefined,\n spanAsync,\n} from '@xylabs/sdk-js'\nimport { toSafeJsonString } from '@xylabs/sdk-js'\nimport type { Signed, WithHashMeta } from '@xyo-network/sdk-js'\nimport type {\n BlockBoundWitness, ChainContextRead, XL1BlockNumber,\n} from '@xyo-network/xl1-protocol-lib'\nimport {\n asSignedBlockBoundWitnessWithStorageMeta, SignedBlockBoundWitnessWithHashMetaZod, StepSizes,\n} from '@xyo-network/xl1-protocol-lib'\n\nimport { withContextCacheResponse } from '../../ChainContextHelpers.ts'\n\n/** BlockFromBlockNumber helper function. */\nexport async function blockFromBlockNumber(\n context: ChainContextRead,\n blockNumber: XL1BlockNumber,\n): Promise<WithHashMeta<Signed<BlockBoundWitness>>> {\n return await spanAsync('blockFromBlockNumber', async () => {\n const cacheKey = `${blockNumber}`\n const { chainMap, head } = context\n return await withContextCacheResponse(context, 'blockFromBlockNumber', cacheKey, async () => {\n const [result] = await chainMap.get([head._hash])\n if (!isDefined(result)) {\n throw new Error(`Head block not found for hash: ${head._hash}`)\n }\n let currentBlock = asSignedBlockBoundWitnessWithStorageMeta(\n result,\n () => `Found Payload is not a Signed<BlockBoundWitness>: ${JSON.stringify(result, null, 2)}`,\n )\n if (currentBlock.block < blockNumber) {\n throw new Error(`Block number ${blockNumber} is greater than head ${currentBlock.block}.`)\n }\n while (currentBlock.block > blockNumber) {\n let jumpHash: Hash | null = currentBlock.previous\n let jumpBlockNumber = currentBlock.block - 1\n for (const [step, stepSize] of StepSizes.entries()) {\n const possibleJumpBlockNumber = currentBlock.block - (currentBlock.block % stepSize) - 1\n if (possibleJumpBlockNumber >= blockNumber && possibleJumpBlockNumber <= jumpBlockNumber) {\n jumpBlockNumber = possibleJumpBlockNumber\n jumpHash = asHash(currentBlock.step_hashes?.at(step), () => `Step hash not found for step ${step} in block ${currentBlock.block}`)\n }\n }\n const [newBlock] = await chainMap.get([\n asHash(jumpHash, () => `Jump hash not found for block number [${blockNumber}]: ${jumpBlockNumber} ${toSafeJsonString(currentBlock, 10)}`),\n ])\n if (!isDefined(newBlock)) {\n throw new Error(`Block not found for jump hash: ${jumpHash}`)\n }\n currentBlock = asSignedBlockBoundWitnessWithStorageMeta(\n newBlock,\n () => {\n const result = SignedBlockBoundWitnessWithHashMetaZod.safeParse(newBlock)\n return `Found Payload [jump hash] is not a Signed<BlockBoundWitness>: ${result.error}`\n },\n )\n if (currentBlock.block === blockNumber) {\n break\n }\n if (currentBlock.block < blockNumber) {\n throw new Error(`Block number ${blockNumber} is not a valid step block number for block ${head._hash}.`)\n }\n }\n return currentBlock\n })\n }, { ...context, timeBudgetLimit: 500 })\n}\n","import {\n isDefined, isObject, isUndefined,\n timeBudget,\n} from '@xylabs/sdk-js'\nimport type { CachingContext, MapType } from '@xyo-network/xl1-protocol-lib'\n\nimport { LruCacheMap, MemoryMap } from './driver/index.ts'\n\n/** Retrieves or creates a named cache from the caching context */\nexport function contextCache<TCacheValue>(\n context: CachingContext,\n name: string,\n create?: () => MapType<string, TCacheValue>,\n): MapType<string, TCacheValue> {\n if (!isObject(context.caches)) {\n throw new Error('Context does not have an appropriate caches property')\n }\n if (isUndefined(context.caches[name])) {\n context.caches[name] = create?.() ?? new MemoryMap<string, TCacheValue>()\n }\n return context.caches[name] as MapType<string, TCacheValue>\n}\n\n/** Options for the withContextCacheResponse helper */\nexport interface withContextCacheResponseOptions {\n max?: number\n}\n\n/** Executes a function with LRU caching, returning the cached result if available */\nexport async function withContextCacheResponse<T extends {} | string | number | bigint>(\n context: CachingContext,\n name: string,\n key: string,\n func: () => Promise<T extends {} | string | number | bigint ? T : never>,\n { max = 10_000 }: withContextCacheResponseOptions = {},\n): Promise<T> {\n const cache = contextCache<Promise<T>>(\n context,\n name,\n () => new LruCacheMap<string, Promise<T>>({ max }),\n )\n const { timeBudgetLimit = 0 } = context\n const cacheResult = await cache.get(key)\n if (isDefined(cacheResult)) {\n return cacheResult\n }\n const result = timeBudgetLimit > 0 ? timeBudget(name, context.logger, func, timeBudgetLimit) : func()\n await cache.set(key, result)\n return result\n}\n","import type { SyncMap } from '@xyo-network/xl1-protocol-lib'\nimport { LRUCache } from 'lru-cache'\n\n/** LruCacheMap implementation. */\nexport class LruCacheMap<K extends {}, V extends {} | string | number | bigint, FC = () => void> implements SyncMap<K, V> {\n private lruCache: LRUCache<K, V, FC>\n\n constructor(options?: LRUCache.Options<K, V, FC>) {\n this.lruCache = new LRUCache<K, V, FC>(options ?? { max: 5000 })\n }\n\n clear(): void {\n this.lruCache.clear()\n }\n\n delete(id: K): boolean {\n return this.lruCache.delete(id)\n }\n\n get(id: K): V | undefined {\n return this.lruCache.get(id)\n }\n\n getMany(id: K[]): V[] {\n const results: V[] = []\n for (const key of id) {\n const value = this.lruCache.get(key)\n if (value !== undefined) {\n results.push(value)\n }\n }\n return results\n }\n\n has(id: K): boolean {\n return this.lruCache.has(id)\n }\n\n set(id: K, data: V) {\n this.lruCache.set(id, data)\n }\n\n setMany(entries: [K, V][]): void {\n for (const [key, value] of entries) {\n this.lruCache.set(key, value)\n }\n }\n}\n","import { isDefined } from '@xylabs/sdk-js'\nimport type { SyncMap } from '@xyo-network/xl1-protocol-lib'\n\n/** MemoryMap implementation. */\nexport class MemoryMap<K extends {}, V = {}> implements SyncMap<K, V> {\n private map: Map<K, V>\n\n constructor() {\n this.map = new Map<K, V>()\n }\n\n clear(): void {\n this.map.clear()\n }\n\n delete(id: K): boolean {\n return this.map.delete(id)\n }\n\n get(id: K): V | undefined {\n return this.map.get(id)\n }\n\n getMany(ids: K[]): V[] {\n const results: V[] = []\n for (const id of ids) {\n const data = this.map.get(id)\n if (isDefined(data)) {\n results.push(data)\n }\n }\n return results\n }\n\n has(id: K): boolean {\n return this.map.has(id)\n }\n\n set(id: K, data: V) {\n this.map.set(id, data)\n }\n\n setMany(entries: [K, V][]): void {\n for (const [key, value] of entries) {\n this.map.set(key, value)\n }\n }\n}\n","import type { XL1BlockRange } from '@xyo-network/xl1-protocol-lib'\nimport { asXL1BlockNumber, stepSize } from '@xyo-network/xl1-protocol-lib'\n\n/** CalculateFramesFromRange helper function. */\nexport function calculateFramesFromRange(range: XL1BlockRange, step: number): [\n // ranges of fitted frames\n XL1BlockRange[],\n // ranges of remaining blocks\n XL1BlockRange[]] {\n const size = stepSize(step)\n let start = (Math.trunc(range[0] / size)) * size\n const fitted: XL1BlockRange[] = []\n const remaining: XL1BlockRange[] = []\n\n // if the start is not aligned with the range, add a remaining block\n if (start !== range[0]) {\n start += size\n remaining.push([range[0], asXL1BlockNumber(Math.min(start - 1, range[1]), true)])\n }\n\n for (let i = start; i <= range[1]; i += size) {\n if ((i + size - 1) <= range[1]) {\n fitted.push([asXL1BlockNumber(i, { name: 'calculateFramesFromRange A' }),\n asXL1BlockNumber(Math.min(i + size - 1, range[1]), { name: 'calculateFramesFromRange B' })])\n } else {\n remaining.push([asXL1BlockNumber(i, { name: 'calculateFramesFromRange C' }), range[1]])\n }\n }\n return [fitted, remaining]\n}\n","import type { XL1BlockRange } from '@xyo-network/xl1-protocol-lib'\nimport { StepSizes } from '@xyo-network/xl1-protocol-lib'\n\nimport { calculateFramesFromRange } from './calculateFramesFromRange.ts'\n\n/** DeepCalculateFramesFromRange helper function. */\nexport function deepCalculateFramesFromRange(range: XL1BlockRange, startingStep = StepSizes.length - 1): XL1BlockRange[] {\n const fitted: XL1BlockRange[] = []\n let remaining: XL1BlockRange[] = [range]\n\n for (let step = startingStep; step >= 0; step--) {\n const newRemaining: XL1BlockRange[] = []\n for (const range of remaining) {\n const [newFittedFrames, newRemainingFrames] = calculateFramesFromRange(range, step)\n fitted.push(...newFittedFrames)\n newRemaining.push(...newRemainingFrames)\n }\n remaining = newRemaining\n }\n\n for (const range of remaining) {\n for (let i = range[0]; i <= range[1]; i++) {\n fitted.push([i, i]) // Add individual frames for remaining ranges\n }\n }\n\n return fitted.toSorted((a, b) => a[0] - b[0]) // Sort by start of range\n}\n","import { type Hash } from '@xylabs/sdk-js'\nimport type { ChainContextRead, XL1BlockNumber } from '@xyo-network/xl1-protocol-lib'\n\nimport { blockFromBlockNumber } from './blockFromBlockNumber.ts'\n\n/** HashFromBlockNumber helper function. */\nexport async function hashFromBlockNumber(context: ChainContextRead, blockNumber: XL1BlockNumber): Promise<Hash> {\n return (await blockFromBlockNumber(context, blockNumber))._hash\n}\n","import type {\n ReadArchivist, ReadWriteArchivist, WriteArchivist,\n} from '@xyo-network/sdk-js'\n\n/** Type guard that checks if a value is a valid ReadArchivist. */\nexport function isReadArchivist(value: unknown): value is ReadArchivist {\n return (value as ReadArchivist).get !== undefined && (value as ReadArchivist).next !== undefined\n}\n\n/** Type guard that checks if a value is a valid WriteArchivist. */\nexport function isWriteArchivist(value: unknown): value is WriteArchivist {\n return (value as WriteArchivist).insert !== undefined\n}\n\n/** Type guard that checks if a value is a valid ReadWriteArchivist. */\nexport function isReadWriteArchivist(value: unknown): value is ReadWriteArchivist {\n return isReadArchivist(value) && isWriteArchivist(value)\n}\n","import type { StepIdentity, StepIdentityString } from '@xyo-network/xl1-protocol-lib'\n\n/** Converts a value to StepIdentityString format. */\nexport function toStepIdentityString({ block, step }: StepIdentity): StepIdentityString {\n return `${block}|${step}` as StepIdentityString\n}\n","import {\n assertEx, isHash, toSafeJsonString,\n} from '@xylabs/sdk-js'\nimport {\n type Payload, PayloadBuilder, type WithStorageMeta,\n} from '@xyo-network/sdk-js'\nimport type { HydratedTransaction } from '@xyo-network/xl1-protocol-lib'\nimport { isExecutable } from '@xyo-network/xl1-protocol-lib'\n\n/** Validates TransactionsOpcodes and returns any errors found. */\nexport async function validateTransactionsOpcodes(txs: HydratedTransaction[]) {\n const txElevatedPayloads: WithStorageMeta<Payload>[] = []\n for (const [txBw, txPayloads] of txs) {\n if (isExecutable(txBw)) {\n const operations = txBw.script.map(op => op.split('|'))\n for (let [opCode, ...args] of operations) {\n switch (opCode) {\n case 'elevate': {\n const [hash, ...rest] = args\n const txPayloadsWithStorageMeta = await PayloadBuilder.addStorageMeta(txPayloads)\n assertEx(rest.length === 0, () => `Invalid elevate operation ${opCode} ${args} - Too many Arguments`)\n if (isHash(hash)) {\n assertEx(\n txBw.payload_hashes.includes(hash),\n () => `Invalid elevate operation ${opCode} ${args} - Hash not in payload hashes => ${toSafeJsonString(txBw, 20)}`,\n )\n const txPayload = assertEx(\n txPayloadsWithStorageMeta.find(p => p._hash === hash),\n () => `Invalid elevate operation ${opCode} ${args} - Payload not found`,\n )\n txElevatedPayloads.push(txPayload)\n } else {\n throw new Error(`Invalid elevate operation ${opCode} ${args} - Invalid hash`)\n }\n break\n }\n default: {\n throw new Error(`Invalid opCode ${opCode}`)\n }\n }\n }\n }\n }\n return txElevatedPayloads\n}\n","import {\n zodAsFactory, zodIsFactory, zodToFactory,\n} from '@xylabs/sdk-js'\nimport { globalRegistry, z } from 'zod'\n\nimport { MnemonicStringZod } from '../validation/index.ts'\nimport { BaseConfigZod } from './Base.ts'\n\n/** ActorConfigZod constant. */\nexport const ActorConfigZod = BaseConfigZod.extend({\n name: z.string(),\n mnemonic: MnemonicStringZod.optional().register(globalRegistry, {\n description: 'Mnemonic for the Actor wallet',\n title: 'mnemonic',\n type: 'string',\n }),\n healthCheckPort: z.coerce.number().optional().register(globalRegistry, {\n description: 'Port for the Producer health checks',\n title: 'producer.healthCheckPort',\n type: 'number',\n }),\n})\n\n/** ActorConfig type. */\nexport type ActorConfig = z.infer<typeof ActorConfigZod>\n\n/** Type guard that checks if a value is a valid ActorConfig. */\nexport const isActorConfig = zodIsFactory(ActorConfigZod)\n/** Converts a value to ActorConfig, throwing if invalid. */\nexport const asActorConfig = zodAsFactory(ActorConfigZod, 'asActorConfig')\n/** toActorConfig constant. */\nexport const toActorConfig = zodToFactory(ActorConfigZod, 'toActorConfig')\n","/** Type guard that checks if a value is a valid Localhost. */\nexport const isLocalhost = (hostname: string): boolean => {\n return (\n hostname === 'localhost'\n || hostname === '127.0.0.1'\n || hostname === '::1' // IPv6 localhost\n || hostname.endsWith('.localhost')\n )\n}\n","import { isLocalhost } from './isLocalhost.ts'\n\n/** getUrl constant. */\nexport const getUrl = (host: string, port: number): string => {\n const scheme = isLocalhost(host) ? 'http' : 'https'\n return `${scheme}://${host}:${port}`\n}\n","/** TODO constant. */\nexport const TODO = true\n","import { z } from 'zod'\n\n/**\n * Validates a single string containing a BIP-39 mnemonic.\n *\n * • Trims leading/trailing whitespace.\n * • Collapses any run of whitespace (spaces, tabs, new-lines) to a single space.\n * • Splits on spaces → array of words.\n * • Checks that the word-count is 12, 15, 18, 21, or 24.\n *\n */\nexport const MnemonicStringZod = z\n .string()\n .transform(s => s.trim().replaceAll(/\\s+/g, ' ')) // normalize spacing\n .refine(\n s => [12, 15, 18, 21, 24].includes(s.split(' ').length),\n { message: 'Mnemonic must contain 12, 15, 18, 21, or 24 words.' },\n ).describe('BIP-39 mnemonic string')\n\n/** MnemonicString type. */\nexport type MnemonicString = z.infer<typeof MnemonicStringZod>\n","import { z } from 'zod'\n\nimport { ChainConfigZod } from './Chain.ts'\nimport { DataLakeConfigZod } from './DataLake/index.ts'\nimport { EvmConfigZod } from './Evm.ts'\nimport { LogConfigZod } from './Log.ts'\nimport { ProvidersConfigZod } from './Providers.ts'\nimport { RemoteConfigZod } from './Remote.ts'\nimport { StorageConfigZod } from './storage/index.ts'\nimport { TelemetryConfigZod } from './Telemetry.ts'\nimport { ValidationConfigZod } from './Validation.ts'\n\n/** BaseConfigZod constant. */\nexport const BaseConfigZod = z.object({\n chain: ChainConfigZod.default(ChainConfigZod.parse({})).describe('Configuration for the chain'),\n dataLake: DataLakeConfigZod.optional().describe('Configuration for data lakes'),\n evm: EvmConfigZod.default(EvmConfigZod.parse({})).describe('Configuration for EVM-backed services'),\n log: LogConfigZod.default(LogConfigZod.parse({})).describe('Configuration for logging'),\n providers: ProvidersConfigZod.default(ProvidersConfigZod.parse([])).describe('Configuration for providers'),\n remote: RemoteConfigZod.default(RemoteConfigZod.parse({})).describe('Configuration for remote services'),\n storage: StorageConfigZod.default(StorageConfigZod.parse({})).describe('Configuration for the storage'),\n telemetry: TelemetryConfigZod.default(TelemetryConfigZod.parse({})).describe('Configuration for telemetry'),\n validation: ValidationConfigZod.default(ValidationConfigZod.parse({})).describe('Configuration for validation'),\n})\n\n/** BaseConfig type. */\nexport type BaseConfig = z.infer<typeof BaseConfigZod>\n","import { AddressZod, HexZod } from '@xylabs/sdk-js'\nimport { globalRegistry, z } from 'zod'\n\n/** ChainConfigZod constant. */\nexport const ChainConfigZod = z.object({\n id: HexZod.optional()\n .register(globalRegistry, {\n description:\n 'The unique identifier for the chain. Should be the staking contract address for contract-backed chains.',\n title: 'chain.id',\n type: 'string',\n }),\n genesisRewardAddress: AddressZod.optional()\n .register(globalRegistry, {\n description:\n 'Address to send the initial genesis rewards to, if a new chain is being created.',\n title: 'chain.genesisRewardAddress',\n type: 'Address',\n }),\n})\n\n/** ChainConfig type. */\nexport type ChainConfig = z.infer<typeof ChainConfigZod>\n","import { z } from 'zod'\n\nimport { type RestDataLakeConfig, RestDataLakeConfigZod } from './RestDataLakeConfig.ts'\nimport { type RouterDataLakeConfig, RouterDataLakeConfigZod } from './RouterDataLakeConfig.ts'\n\n/** DataLakeConfig type. */\nexport type DataLakeConfig = RestDataLakeConfig | RouterDataLakeConfig\n\n// z.lazy handles the circular reference between DataLakeConfigZod and RouterDataLakeZod\n/** DataLakeConfigZod constant. */\nexport const DataLakeConfigZod: z.ZodType<DataLakeConfig> = z.lazy(() =>\n z.union([RestDataLakeConfigZod, RouterDataLakeConfigZod])).describe('Configuration for a data lake')\n","import { globalRegistry, z } from 'zod'\n\nimport { DataLakeDriverConfigBaseZod } from './DataLakeRemoteConfig.ts'\n\n/** RestDataLakeConfigZod constant. */\nexport const RestDataLakeConfigZod = DataLakeDriverConfigBaseZod.extend({\n driver: z.literal('rest').register(globalRegistry, {\n description: 'Driver for the REST data lake',\n type: 'string',\n }),\n url: z.string().register(globalRegistry, {\n description: 'URL for the REST data lake',\n type: 'string',\n }),\n}).describe('Configuration for the REST data lake driver')\n\n/** RestDataLakeConfig type. */\nexport type RestDataLakeConfig = z.infer<typeof RestDataLakeConfigZod>\n","import { globalRegistry, z } from 'zod'\n\n/** DataLakeDriverConfigBaseZod constant. */\nexport const DataLakeDriverConfigBaseZod = z.object({\n driver: z.string().register(globalRegistry, {\n description: 'Driver for the data lake',\n type: 'string',\n }),\n}).describe('Base configuration for a data lake driver')\n/** DataLakeDriverConfigBase type. */\nexport type DataLakeDriverConfigBase = z.infer<typeof DataLakeDriverConfigBaseZod>\n","import { globalRegistry, z } from 'zod'\n\nimport type { DataLakeConfig } from './DataLake.ts'\nimport { DataLakeConfigZod } from './DataLake.ts'\n\n/** Configuration for RouterDataLake. */\nexport interface RouterDataLakeConfig {\n children: DataLakeConfig[]\n driver: 'router'\n}\n\n/** RouterDataLakeConfigZod constant. */\nexport const RouterDataLakeConfigZod: z.ZodType<RouterDataLakeConfig> = z.object({\n driver: z.literal('router').register(globalRegistry, {\n description: 'Driver for the router data lake',\n type: 'string',\n }),\n children: z.array(z.lazy(() => DataLakeConfigZod)).register(globalRegistry, {\n description: 'Child data lake drivers',\n type: 'array',\n }),\n}).describe('Configuration for the router data lake driver')\n","import { globalRegistry, z } from 'zod'\n\n/** EvmInfuraConfigZod constant. */\nexport const EvmInfuraConfigZod = z.object({\n projectId: z.string().optional().register(globalRegistry, {\n description: 'Infura project ID',\n title: 'evm.infura.projectId',\n type: 'string',\n }),\n projectSecret: z.string().optional().register(globalRegistry, {\n description: 'Infura project secret',\n title: 'evm.infura.projectSecret',\n type: 'string',\n }),\n})\n\n/** EvmJsonRpcConfigZod constant. */\nexport const EvmJsonRpcConfigZod = z.object({\n url: z.url().optional().register(globalRegistry, {\n description: 'JSON-RPC URL',\n title: 'evm.jsonRpc.url',\n type: 'string',\n }),\n})\n\n/** EvmConfigZod constant. */\nexport const EvmConfigZod = z.object({\n chainId: z.string().optional().register(globalRegistry, {\n description: 'EVM chain ID',\n title: 'evm.chainId',\n type: 'string',\n }),\n infura: EvmInfuraConfigZod.optional().describe('Infura Provider configuration'),\n jsonRpc: EvmJsonRpcConfigZod.optional().describe('JSON-RPC Provider configuration'),\n})\n\n/** EvmConfig type. */\nexport type EvmConfig = z.infer<typeof EvmConfigZod>\n","import type { LogLevelKey } from '@xylabs/sdk-js'\nimport { LogLevel } from '@xylabs/sdk-js'\nimport { globalRegistry, z } from 'zod'\n\nconst LogLevelNames = Object.keys(LogLevel) as [LogLevelKey]\n\n/** LogConfigZod constant. */\nexport const LogConfigZod = z.object({\n logLevel: z.enum(LogLevelNames).default('info').register(globalRegistry, {\n choices: LogLevelNames,\n default: 'info',\n description: 'Desired process verbosity',\n title: 'logLevel',\n type: 'string',\n }),\n silent: z.boolean().default(false).register(globalRegistry, {\n default: false,\n description: 'Whether to run in silent mode',\n title: 'silent',\n type: 'boolean',\n }),\n})\n\n/** LogConfig type. */\nexport type LogConfig = z.infer<typeof LogConfigZod>\n","import z from 'zod'\n\nimport { ProviderConfigZod } from './Provider.ts'\n\n/** ProvidersConfigZod constant. */\nexport const ProvidersConfigZod = z.array(ProviderConfigZod.loose()).describe('Configuration for providers').default([])\n\n/** ProvidersConfig type. */\nexport type ProvidersConfig = z.infer<typeof ProvidersConfigZod>\n","import {\n zodAsFactory, zodIsFactory, zodToFactory,\n} from '@xylabs/sdk-js'\nimport { z } from 'zod'\n\n/** ProviderConfigZod constant. */\nexport const ProviderConfigZod = z.object({\n moniker: z.string(),\n labels: z.array(z.string()).optional(),\n}).describe('Configuration for a Provider')\n\n/** ProviderConfig type. */\nexport type ProviderConfig = z.infer<typeof ProviderConfigZod>\n\n/** Type guard that checks if a value is a valid ProviderConfig. */\nexport const isProviderConfig = zodIsFactory(ProviderConfigZod)\n/** Converts a value to ProviderConfig, throwing if invalid. */\nexport const asProviderConfig = zodAsFactory(ProviderConfigZod, 'asProviderConfig')\n/** toProviderConfig constant. */\nexport const toProviderConfig = zodToFactory(ProviderConfigZod, 'toProviderConfig')\n","import { globalRegistry, z } from 'zod'\n\n/** RpcRemoteConfigBaseZod constant. */\nexport const RpcRemoteConfigBaseZod = z.object({\n protocol: z.string('http').register(globalRegistry, {\n description: 'Protocol for the RPC connection',\n type: 'string',\n }),\n}).describe('Base configuration for the remote RPC')\n\n/** RpcRemoteConfigBase type. */\nexport type RpcRemoteConfigBase = z.infer<typeof RpcRemoteConfigBaseZod>\n\n/** HttpRpcRemoteConfigZod constant. */\nexport const HttpRpcRemoteConfigZod = RpcRemoteConfigBaseZod.extend({\n protocol: z.string('http').register(globalRegistry, {\n description: 'Protocol for the RPC connection',\n type: 'string',\n }).default('http'),\n url: z.string().register(globalRegistry, {\n description: 'URL for the Chain RPC API',\n type: 'string',\n }),\n}).describe('Configuration for the remote RPC using Http')\n\n/** HttpRpcRemoteConfig type. */\nexport type HttpRpcRemoteConfig = z.infer<typeof HttpRpcRemoteConfigZod>\n\n/** PostMessageRpcRemoteConfigZod constant. */\nexport const PostMessageRpcRemoteConfigZod = RpcRemoteConfigBaseZod.extend({\n protocol: z.string().register(globalRegistry, {\n description: 'Protocol for the RPC connection',\n type: 'string',\n }).default('postMessage'),\n networkId: z.string().register(globalRegistry, {\n description: 'Network ID to use for the postMessage RPC connection',\n type: 'string',\n }),\n sessionId: z.string().register(globalRegistry, {\n description: 'Session ID to use for the postMessage RPC connection',\n type: 'string',\n }),\n}).describe('Configuration for the remote RPC using postMessage')\n\n/** PostMessageRpcRemoteConfig type. */\nexport type PostMessageRpcRemoteConfig = z.infer<typeof PostMessageRpcRemoteConfigZod>\n\n/** RpcRemoteConfigZod constant. */\nexport const RpcRemoteConfigZod = z.union([HttpRpcRemoteConfigZod, PostMessageRpcRemoteConfigZod])\n .describe('Configuration for a remote RPC connection, either Http or postMessage')\n\n/** RpcRemoteConfig type. */\nexport type RpcRemoteConfig = z.infer<typeof RpcRemoteConfigZod>\n\n/** RemoteConfigZod constant. */\nexport const RemoteConfigZod = z.object({ rpc: RpcRemoteConfigZod.optional() }).describe('Configuration for remote connections, including RPC')\n\n/** RemoteConfig type. */\nexport type RemoteConfig = z.infer<typeof RemoteConfigZod>\n","import { isDefined, isUndefined } from '@xylabs/sdk-js'\nimport { globalRegistry, z } from 'zod'\n\n/**\n * Checks if the provided MongoDB configuration contains all necessary fields\n * for establishing a connection.\n * @param config MongoDB configuration object\n * @returns True if the configuration contains all necessary fields for\n * establishing a connection\n */\nexport const hasMongoConfig = (config?: MongoConfig): config is Required<MongoConfig> => {\n if (isUndefined(config)) return false\n return (\n isDefined(config.connectionString)\n && isDefined(config.database)\n && isDefined(config.domain)\n && isDefined(config.password)\n && isDefined(config.username)\n )\n}\n\n/** MongoConfigZod constant. */\nexport const MongoConfigZod = z.object({\n // TODO: Create from other arguments\n connectionString: z.string().nonempty().optional().register(globalRegistry, {\n description: 'MongoDB connection string',\n title: 'storage.mongo.connectionString',\n type: 'string',\n }),\n database: z.string().nonempty().optional().register(globalRegistry, {\n description: 'MongoDB database name',\n title: 'storage.mongo.database',\n type: 'string',\n }),\n domain: z.string().nonempty().optional().register(globalRegistry, {\n description: 'MongoDB domain',\n title: 'storage.mongo.domain',\n type: 'string',\n }),\n password: z.string().nonempty().optional().register(globalRegistry, {\n description: 'MongoDB password',\n title: 'storage.mongo.password',\n type: 'string',\n }),\n username: z.string().nonempty().optional().register(globalRegistry, {\n description: 'MongoDB username',\n title: 'storage.mongo.username',\n type: 'string',\n }),\n})\n\n/** MongoConfig type. */\nexport type MongoConfig = z.infer<typeof MongoConfigZod>\n","import { globalRegistry, z } from 'zod'\n\nimport { MongoConfigZod } from './driver/index.ts'\n\n/** StorageConfigZod constant. */\nexport const StorageConfigZod = z.object({\n mongo: MongoConfigZod.optional().describe('Configuration for the MongoD storage driver'),\n root: z.string().optional().register(globalRegistry, {\n description: 'Root directory for local storage',\n title: 'storage.root',\n type: 'string',\n }),\n}).describe('Storage configuration options')\n\n/** StorageConfig type. */\nexport type StorageConfig = z.infer<typeof StorageConfigZod>\n","import { globalRegistry, z } from 'zod'\n\n/** DefaultMetricsScrapePorts constant. */\nexport const DefaultMetricsScrapePorts = {\n api: 9465,\n bridge: 9468,\n mempool: 9466,\n producer: 9464,\n rewardRedemptionApi: 9467,\n}\n\n/** MetricsScrapeConfigZod constant. */\nexport const MetricsScrapeConfigZod = z.object({\n path: z.string().default('/metrics').register(globalRegistry, {\n default: '/metrics',\n description: 'Path for the metrics scrape endpoint',\n title: 'telemetry.metrics.scrape.path',\n type: 'string',\n }),\n port: z.coerce.number().int().positive().optional().register(globalRegistry, {\n description: 'Port for the metrics scrape endpoint',\n title: 'telemetry.metrics.scrape.port',\n type: 'number',\n }),\n}).describe('Metrics scrape configuration')\n\n/** MetricsConfigZod constant. */\nexport const MetricsConfigZod = z.object({ scrape: MetricsScrapeConfigZod }).describe('Metrics configuration options')\n\n/** OpenTelemetryConfigZod constant. */\nexport const OpenTelemetryConfigZod = z.object({\n // OpenTelemetry options\n otlpEndpoint: z.url().optional().register(globalRegistry, {\n description: 'OTLP endpoint for exporting telemetry data',\n title: 'telemetry.otel.otlpEndpoint',\n type: 'string',\n }),\n})\n\n/** TelemetryConfigZod constant. */\nexport const TelemetryConfigZod = z.object({\n // Metrics configuration\n metrics: MetricsConfigZod.optional().describe('Metrics configuration'),\n // OpenTelemetry configuration\n otel: OpenTelemetryConfigZod.optional().describe('OpenTelemetry configuration'),\n}).describe('Telemetry configuration options')\n\n/** TelemetryConfig type. */\nexport type TelemetryConfig = z.infer<typeof TelemetryConfigZod>\n","import { AddressZod, asAddress } from '@xylabs/sdk-js'\nimport { globalRegistry, z } from 'zod'\n\n/** ValidationConfigZod constant. */\nexport const ValidationConfigZod = z.object({\n allowedRewardRedeemers: z.preprocess((val) => {\n if (typeof val === 'string') {\n return val.split(',').map(s => asAddress(s.trim()))\n }\n return val\n }, z.array(AddressZod).optional().register(globalRegistry, {\n description: 'List of allowed reward redeemer addresses, if undefined anyone can participate',\n title: 'allowedRewardRedeemers',\n type: 'array',\n })),\n allowedRewardEscrowAccountSigners: z.preprocess((val) => {\n if (typeof val === 'string') {\n return val.split(',').map(s => asAddress(s.trim()))\n }\n return val\n }, z.array(AddressZod).optional().register(globalRegistry, {\n description: 'List of allowed reward escrow account signer addresses, if undefined anyone can participate',\n title: 'allowedRewardEscrowAccountSigners',\n type: 'array',\n })),\n})\n\n/** ValidationConfig type. */\nexport type ValidationConfig = z.infer<typeof ValidationConfigZod>\n","import z from 'zod'\n\nimport { ActorConfigZod } from './Actor.ts'\n\n/** ActorsConfigZod constant. */\nexport const ActorsConfigZod = z.array(ActorConfigZod.loose()).describe('Actor-specific configurations that override the base configuration when the actor is running').default([])\n\n/** ActorsConfig type. */\nexport type ActorsConfig = z.infer<typeof ActorsConfigZod>\n","import type z from 'zod'\n\nimport { ActorConfigZod } from './Actor.ts'\nimport { ActorsConfigZod } from './Actors.ts'\nimport { BaseConfigZod } from './Base.ts'\nimport type { DeepPartial } from './DeepPartial.ts'\n\n/** ConfigZod constant. */\nexport const ConfigZod = BaseConfigZod.extend({ actors: ActorsConfigZod }).describe('The complete configuration for the protocol, including global settings and actor-specific overrides')\n\n/** Config type. */\nexport type Config = z.infer<typeof ConfigZod>\n\n/** ResolveConfig helper function. */\nexport function resolveConfig(\n config: DeepPartial<Config>,\n) {\n const parsedConfig = ConfigZod.parse(config)\n const { actors, ...rootConfig } = parsedConfig\n parsedConfig.actors = actors.map((actorConfig) => {\n return ActorConfigZod.loose().parse({ ...rootConfig, ...actorConfig })\n })\n return parsedConfig\n}\n","import {\n zodAsFactory, zodIsFactory, zodToFactory,\n} from '@xylabs/sdk-js'\nimport { globalRegistry, z } from 'zod'\n\nimport { ActorConfigZod } from './Actor.ts'\n\n/** HostActorConfigZod constant. */\nexport const HostActorConfigZod = ActorConfigZod.extend({\n host: z.string().default('localhost').register(globalRegistry, {\n default: 'localhost',\n description: 'Host for the Actor',\n title: 'host',\n type: 'string',\n }),\n port: z.coerce.number().default(8080).register(globalRegistry, {\n default: 8080,\n description: 'Port for the Actor',\n title: 'port',\n type: 'number',\n }),\n})\n\n/** HostActorConfig type. */\nexport type HostActorConfig = z.infer<typeof HostActorConfigZod>\n\n/** Type guard that checks if a value is a valid HostActorConfig. */\nexport const isHostActorConfig = zodIsFactory(HostActorConfigZod)\n/** Converts a value to HostActorConfig, throwing if invalid. */\nexport const asHostActorConfig = zodAsFactory(HostActorConfigZod, 'asHostActorConfig')\n/** toHostActorConfig constant. */\nexport const toHostActorConfig = zodToFactory(HostActorConfigZod, 'toHostActorConfig')\n","import { z } from 'zod'\n\nconst DescriptionSchema = z.string()\nconst TitleSchema = z.string()\n\n/** Schema identifier for JSONMeta payloads. */\nexport const JSONSchemaMetaSchema = z\n .object({\n id: z.string().optional(),\n title: TitleSchema.optional(),\n description: DescriptionSchema.optional(),\n deprecated: z.boolean().optional(),\n })\n .catchall(z.unknown()) // allow arbitrary extra keys\n\n/** Schema identifier for GlobalMeta payloads. */\nexport const GlobalMetaSchema = JSONSchemaMetaSchema.extend({})\n\nconst ChoicesSchema = z\n .array(z.union([z.string(), z.number(), z.literal(true), z.undefined()]))\n .readonly()\n\n/** Schema identifier for UsageMeta payloads. */\nexport const UsageMetaSchema = GlobalMetaSchema.extend({\n choices: ChoicesSchema.optional(),\n default: z.unknown().optional(),\n description: DescriptionSchema,\n group: z.string().optional(),\n hidden: z.boolean().optional(),\n title: TitleSchema,\n type: z.union([\n z.literal('array'),\n z.literal('count'),\n z.literal('boolean'),\n z.literal('number'),\n z.literal('string'),\n ]),\n})\n\n/** UsageMeta type. */\nexport type UsageMeta = z.infer<typeof UsageMetaSchema>\n\n/** Type guard that checks if a value is a valid UsageMeta. */\nexport function isUsageMeta(v: unknown): v is UsageMeta {\n return UsageMetaSchema.safeParse(v).success\n}\n","/** XL1_NETWORK_STAKING_GENESIS_PERIOD_END_EPOCH constant. */\nexport const XL1_NETWORK_STAKING_GENESIS_PERIOD_END_EPOCH = 1_760_572_800 as const\n/** XL1_NETWORK_STAKING_GENESIS_PERIOD_END_XL1_BLOCK constant. */\nexport const XL1_NETWORK_STAKING_GENESIS_PERIOD_END_XL1_BLOCK = 107_496 as const\n","import {\n zodAsFactory, zodIsFactory, zodToFactory,\n} from '@xylabs/sdk-js'\nimport type { z } from 'zod'\n\nimport { ActorConfigZod } from '../config/index.ts'\nimport { BaseConfigContextZod } from '../model/index.ts'\n\n/** ActorConfigContext constant. */\nexport const ActorConfigContext = BaseConfigContextZod.extend({ config: ActorConfigZod })\n\n/** ActorConfigContext type. */\nexport type ActorConfigContext = z.infer<typeof ActorConfigContext>\n\n/** Type guard that checks if a value is a valid ActorConfigContext. */\nexport const isActorConfigContext = zodIsFactory(ActorConfigContext)\n/** Converts a value to ActorConfigContext, throwing if invalid. */\nexport const asActorConfigContext = zodAsFactory(ActorConfigContext, 'asActorConfigContext')\n/** toActorConfigContext constant. */\nexport const toActorConfigContext = zodToFactory(ActorConfigContext, 'toActorConfigContext')\n","import {\n zodAsFactory, zodIsFactory, zodToFactory,\n} from '@xylabs/sdk-js'\nimport type { CachingContext } from '@xyo-network/xl1-protocol-lib'\nimport { CachingContextZod } from '@xyo-network/xl1-protocol-lib'\nimport { z } from 'zod'\n\nimport { type BaseConfig, BaseConfigZod } from '../config/index.ts'\nimport type { ProviderFactoryLocatorInstance } from '../CreatableProvider/index.ts'\nimport type { RuntimeStatusMonitor } from '../status/index.ts'\n\n/** RuntimeStatusMonitorZod constant. */\nexport const RuntimeStatusMonitorZod = z.custom<RuntimeStatusMonitor>(val => val && typeof val === 'object')\n\n/** ProviderFactoryLocatorZod constant. */\nexport const ProviderFactoryLocatorZod: z.ZodType<ProviderFactoryLocatorInstance> = z.lazy(() =>\n z.custom<ProviderFactoryLocatorInstance>(val => val && typeof val === 'object' && 'context' in val && 'registry' in val))\n\n/** CreatableProviderContextType type. */\nexport type CreatableProviderContextType = CachingContext & {\n _id?: string\n config: BaseConfig\n locator: ProviderFactoryLocatorInstance\n statusReporter?: RuntimeStatusMonitor\n}\n\n/** BaseConfigContextZod constant. */\nexport const BaseConfigContextZod = CachingContextZod.extend({\n config: BaseConfigZod.loose(),\n locator: ProviderFactoryLocatorZod.optional(),\n})\n/** BaseConfigContext type. */\nexport type BaseConfigContext = z.infer<typeof BaseConfigContextZod>\n\n/** CreatableProviderContextZod constant. */\nexport const CreatableProviderContextZod: z.ZodType<CreatableProviderContextType> = z.lazy(() =>\n BaseConfigContextZod.extend({\n _id: z.string().optional(),\n locator: ProviderFactoryLocatorZod,\n statusReporter: RuntimeStatusMonitorZod.optional(),\n }))\n\n/** Type guard that checks if a value is a valid BaseConfigContext. */\nexport const isBaseConfigContext = zodIsFactory(BaseConfigContextZod)\n/** Converts a value to BaseConfigContext, throwing if invalid. */\nexport const asBaseConfigContext = zodAsFactory(BaseConfigContextZod, 'asBaseConfigContext')\n/** toBaseConfigContext constant. */\nexport const toBaseConfigContext = zodToFactory(BaseConfigContextZod, 'toBaseConfigContext')\n\n/** Type guard that checks if a value is a valid CreatableProviderContext. */\nexport const isCreatableProviderContext = zodIsFactory(CreatableProviderContextZod)\n/** Converts a value to CreatableProviderContext, throwing if invalid. */\nexport const asCreatableProviderContext = zodAsFactory(CreatableProviderContextZod, 'asCreatableProviderContext')\n/** toCreatableProviderContext constant. */\nexport const toCreatableProviderContext = zodToFactory(CreatableProviderContextZod, 'toCreatableProviderContext')\n","import type { PayloadBundle } from '@xyo-network/sdk-js'\nimport { PayloadBuilder } from '@xyo-network/sdk-js'\nimport type { SignedHydratedBlockWithHashMeta } from '@xyo-network/xl1-protocol-lib'\nimport { asSignedBlockBoundWitnessWithHashMeta } from '@xyo-network/xl1-protocol-lib'\n\n/** bundledPayloadToHydratedBlock constant. */\nexport const bundledPayloadToHydratedBlock = async (\n payload: PayloadBundle,\n): Promise<SignedHydratedBlockWithHashMeta | undefined> => {\n const withHashMeta = await PayloadBuilder.addHashMeta(payload.payloads)\n const tx = asSignedBlockBoundWitnessWithHashMeta(withHashMeta.find(p => p._hash === payload.root))\n if (tx) {\n return [tx, withHashMeta.filter(p => p._hash !== payload.root)]\n }\n}\n","import type { PayloadBundle } from '@xyo-network/sdk-js'\nimport { PayloadBuilder } from '@xyo-network/sdk-js'\nimport type { SignedHydratedTransactionWithHashMeta } from '@xyo-network/xl1-protocol-lib'\nimport { asSignedTransactionBoundWitnessWithHashMeta } from '@xyo-network/xl1-protocol-lib'\n\n/** bundledPayloadToHydratedTransaction constant. */\nexport const bundledPayloadToHydratedTransaction = async (\n payload: PayloadBundle,\n): Promise<SignedHydratedTransactionWithHashMeta | undefined> => {\n const withHashMeta = await PayloadBuilder.addHashMeta(payload.payloads)\n const tx = asSignedTransactionBoundWitnessWithHashMeta(withHashMeta.find(p => p._hash === payload.root))\n if (tx) {\n return [tx, withHashMeta.filter(p => p._hash !== payload.root)]\n }\n}\n","import type { Hash } from '@xylabs/sdk-js'\nimport { type PayloadBundle, PayloadBundleSchema } from '@xyo-network/sdk-js'\nimport { PayloadBuilder } from '@xyo-network/sdk-js'\nimport type { SignedHydratedBlockWithHashMeta } from '@xyo-network/xl1-protocol-lib'\n\nimport { flattenHydratedBlock } from '../../block/index.ts'\n\n/** hydratedBlockToPayloadBundle constant. */\nexport const hydratedBlockToPayloadBundle = (transaction: SignedHydratedBlockWithHashMeta): PayloadBundle => {\n const root = transaction[0]._hash\n return bundle(root, transaction)\n}\n\nconst bundle = (root: Hash, transaction: SignedHydratedBlockWithHashMeta) => {\n const payloads = flattenHydratedBlock(transaction).flatMap(p => PayloadBuilder.omitStorageMeta(p))\n return new PayloadBuilder<PayloadBundle>({ schema: PayloadBundleSchema })\n .fields({ payloads, root })\n .build()\n}\n","import type { Hash } from '@xylabs/sdk-js'\nimport { type PayloadBundle, PayloadBundleSchema } from '@xyo-network/sdk-js'\nimport { PayloadBuilder } from '@xyo-network/sdk-js'\nimport type { SignedHydratedTransactionWithHashMeta } from '@xyo-network/xl1-protocol-lib'\n\nimport { flattenHydratedTransaction } from '../../transaction/index.ts'\n\n/** hydratedTransactionToPayloadBundle constant. */\nexport const hydratedTransactionToPayloadBundle = (transaction: SignedHydratedTransactionWithHashMeta): PayloadBundle => {\n const root = transaction[0]._hash\n return bundle(root, transaction)\n}\n\nconst bundle = (root: Hash, transaction: SignedHydratedTransactionWithHashMeta) => {\n const payloads = flattenHydratedTransaction(transaction)\n return new PayloadBuilder<PayloadBundle>({ schema: PayloadBundleSchema })\n .fields({ payloads, root })\n .build()\n}\n","import type { Address } from '@xylabs/sdk-js'\nimport type {\n AccountInstance, Payload, Schema,\n} from '@xyo-network/sdk-js'\nimport { Account } from '@xyo-network/sdk-js'\nimport type {\n AllowedBlockPayload, ChainId,\n SignedHydratedTransactionWithHashMeta,\n Transfer,\n XL1BlockNumber,\n} from '@xyo-network/xl1-protocol-lib'\nimport { asXL1BlockNumber, isAllowedBlockPayload } from '@xyo-network/xl1-protocol-lib'\n\nimport { createTransferPayload } from '../createTransferPayload.ts'\nimport { buildTransaction } from './buildTransaction.ts'\n\n/** buildRandomTransaction constant. */\nexport const buildRandomTransaction = async (\n chain: ChainId,\n payloads?: Payload[],\n account?: AccountInstance,\n nbf: XL1BlockNumber = asXL1BlockNumber(0, true),\n exp: XL1BlockNumber = asXL1BlockNumber(nbf + 1000, true),\n privatePayloadSchemas: Schema[] = [],\n receiverAddress?: Address,\n): Promise<SignedHydratedTransactionWithHashMeta> => {\n const elevatedPayloads: AllowedBlockPayload[] = (payloads ?? []).filter(isAllowedBlockPayload)\n const additionalPayloads: Payload[] = (payloads ?? []).filter(payload => !isAllowedBlockPayload(payload))\n const sender = account ?? await Account.random()\n if (elevatedPayloads?.length === 0) {\n const receiver = receiverAddress ?? (await Account.random()).address\n const transferPayload: Transfer = createTransferPayload(sender.address, { [receiver]: 1n })\n elevatedPayloads.push(transferPayload)\n }\n const hydratedTransaction = await buildTransaction(chain, elevatedPayloads, additionalPayloads, sender, nbf, exp)\n // remove private payloads from hydrated\n return [hydratedTransaction[0], hydratedTransaction[1].filter(p => !privatePayloadSchemas.includes(p.schema))]\n}\n","import type { Address, JsonObject } from '@xylabs/sdk-js'\nimport { toHex } from '@xylabs/sdk-js'\nimport { PayloadBuilder } from '@xyo-network/sdk-js'\nimport type { Transfer } from '@xyo-network/xl1-protocol-lib'\nimport { TransferSchema } from '@xyo-network/xl1-protocol-lib'\n\n/** Creates a TransferPayload instance. */\nexport function createTransferPayload(from: Address, transfers: Record<Address, bigint>, context?: JsonObject): Transfer {\n return new PayloadBuilder<Transfer>({ schema: TransferSchema })\n .fields({\n epoch: Date.now(),\n from,\n transfers: Object.fromEntries(Object.entries(transfers).map(([k, v]) => [k, toHex(v)])),\n context,\n }).build()\n}\n","import type { Address } from '@xylabs/sdk-js'\nimport { assertEx, toHex } from '@xylabs/sdk-js'\nimport type { AccountInstance, Payload } from '@xyo-network/sdk-js'\nimport {\n asAnyPayload, BoundWitnessBuilder, PayloadBuilder,\n} from '@xyo-network/sdk-js'\nimport type {\n AllowedBlockPayload,\n ChainId,\n ExecutableFields,\n FromFields,\n SignedHydratedTransactionWithHashMeta,\n TransactionBoundWitness, TransactionBoundWitnessFields, TransactionFeesBigInt,\n XL1BlockNumber,\n} from '@xyo-network/xl1-protocol-lib'\nimport { defaultTransactionFees } from '@xyo-network/xl1-protocol-lib'\n\n/** Builds a Transaction instance. */\nexport async function buildTransaction(\n chain: ChainId,\n onChainPayloads: AllowedBlockPayload[],\n offChainPayloads: Payload[],\n signer: AccountInstance | AccountInstance[],\n nbf: XL1BlockNumber,\n exp: XL1BlockNumber,\n from?: Address,\n fees: TransactionFeesBigInt = defaultTransactionFees,\n): Promise<SignedHydratedTransactionWithHashMeta> {\n if (from === undefined && Array.isArray(signer)) {\n throw new Error('from is required when signer is an array')\n }\n\n const txBoundWitnessFields: Omit<TransactionBoundWitnessFields, 'from'> = {\n chain,\n fees: {\n base: toHex(fees.base),\n gasLimit: toHex(fees.gasLimit),\n gasPrice: toHex(fees.gasPrice),\n priority: toHex(fees.priority),\n },\n nbf,\n exp,\n }\n\n const elevatedHashes = await PayloadBuilder.hashes(onChainPayloads)\n const script: string[] = []\n for (const elevatedHash of elevatedHashes) {\n script.push(`elevate|${elevatedHash}`)\n }\n\n const fields: TransactionBoundWitnessFields & FromFields & Partial<ExecutableFields> = {\n ...txBoundWitnessFields,\n from: from ?? (Array.isArray(signer) ? assertEx(signer.at(0)?.address) : signer.address),\n }\n\n if (script.length > 0) {\n fields.script = script\n }\n\n const [tx, txPayloads] = await new BoundWitnessBuilder<TransactionBoundWitness>()\n .fields(fields)\n .meta({ $signatures: [] })\n .payloads([...onChainPayloads, ...offChainPayloads])\n .signers(Array.isArray(signer) ? signer : [signer])\n .build()\n\n return [await PayloadBuilder.addHashMeta(tx), await PayloadBuilder.addHashMeta(txPayloads.map(p => asAnyPayload(p, true)))]\n}\n","import type { Address } from '@xylabs/sdk-js'\nimport { toHex } from '@xylabs/sdk-js'\nimport type { Payload } from '@xyo-network/sdk-js'\nimport { BoundWitnessBuilder, PayloadBuilder } from '@xyo-network/sdk-js'\nimport type {\n AllowedBlockPayload, ChainId, ExecutableFields, FromFields, TransactionBoundWitness, TransactionBoundWitnessFields, TransactionFeesBigInt,\n UnsignedHydratedTransaction,\n XL1BlockNumber,\n} from '@xyo-network/xl1-protocol-lib'\nimport { defaultTransactionFees } from '@xyo-network/xl1-protocol-lib'\n\n/** Builds a UnsignedTransaction instance. */\nexport async function buildUnsignedTransaction(\n chain: ChainId,\n onChainPayloads: AllowedBlockPayload[],\n offChainPayloads: Payload[],\n nbf: XL1BlockNumber,\n exp: XL1BlockNumber,\n from: Address,\n fees: TransactionFeesBigInt = defaultTransactionFees,\n): Promise<UnsignedHydratedTransaction> {\n const txBoundWitnessFields: Omit<TransactionBoundWitnessFields, 'from'> = {\n chain,\n fees: {\n base: toHex(fees.base),\n gasLimit: toHex(fees.gasLimit),\n gasPrice: toHex(fees.gasPrice),\n priority: toHex(fees.priority),\n },\n nbf,\n exp,\n }\n\n const elevatedHashes = await PayloadBuilder.hashes(onChainPayloads)\n const script: string[] = []\n for (const elevatedHash of elevatedHashes) {\n script.push(`elevate|${elevatedHash}`)\n }\n\n const fields: TransactionBoundWitnessFields & FromFields & Partial<ExecutableFields> = {\n ...txBoundWitnessFields,\n from,\n }\n\n if (script.length > 0) {\n fields.script = script\n }\n\n const [tx, txPayloads] = await new BoundWitnessBuilder<TransactionBoundWitness>()\n .fields(fields)\n .meta({ $signatures: [] })\n .payloads([...onChainPayloads, ...offChainPayloads])\n .build(false)\n\n return [tx, txPayloads]\n}\n","import type { Hash } from '@xylabs/sdk-js'\nimport { delay, isDefined } from '@xylabs/sdk-js'\nimport type {\n ConfirmSubmittedTransactionOptions, SignedHydratedTransaction,\n XyoViewer,\n} from '@xyo-network/xl1-protocol-lib'\n\nconst DEFAULT_CONFIRMATION_ATTEMPTS = 20\nconst DEFAULT_DELAY_BETWEEN_ATTEMPTS = 1000 // milliseconds\n\n/**\n * Confirms a submitted transaction by checking if it has been included in the blockchain.\n * @param viewer The viewer\n * @param txHash The hash of the transaction to confirm\n * @param options Options for confirmation\n * @returns The confirmed transaction or throws an error if not confirmed\n */\nexport const confirmSubmittedTransaction = async (\n viewer: XyoViewer,\n txHash: Hash,\n options?: ConfirmSubmittedTransactionOptions,\n): Promise<SignedHydratedTransaction> => {\n const { attempts: maxAttempts = DEFAULT_CONFIRMATION_ATTEMPTS, delay: attemptDelay = DEFAULT_DELAY_BETWEEN_ATTEMPTS } = options ?? {}\n options?.logger?.log('🚀 confirming transaction:', txHash, '\\n')\n let attempts = 0\n while (true) {\n const tx = await viewer.transaction.byHash(txHash) ?? undefined\n if (isDefined(tx)) {\n options?.logger?.log('✅ Transaction confirmed:', txHash, '\\n')\n return tx\n } else {\n attempts++\n if (attempts > maxAttempts) {\n options?.logger?.error(`⚠️ Transaction not confirmed after ${maxAttempts} attempts`)\n throw new Error(`Transaction ${txHash} not confirmed after ${maxAttempts} attempts`)\n } else {\n options?.logger?.log(`🔄 Transaction not confirmed yet, attempt ${attempts}. Retrying...`, '\\n')\n await delay(attemptDelay)\n }\n }\n }\n}\n","import type { Hash } from '@xylabs/sdk-js'\nimport { assertEx } from '@xylabs/sdk-js'\nimport type { Payload, WithStorageMeta } from '@xyo-network/sdk-js'\nimport {\n asAnyPayload, hydrateTypedBoundWitness, tryHydrateTypedBoundWitness,\n} from '@xyo-network/sdk-js'\nimport type {\n AllowedBlockPayload, HydratedTransaction, SignedHydratedTransaction,\n SignedHydratedTransactionWithHashMeta,\n SignedHydratedTransactionWithStorageMeta, TransactionBoundWitness,\n} from '@xyo-network/xl1-protocol-lib'\nimport {\n asSignedHydratedTransaction, isAllowedBlockPayload, isSignedTransactionBoundWitnessWithStorageMeta,\n} from '@xyo-network/xl1-protocol-lib'\n\nimport type { ChainStoreRead } from '../model/index.ts'\n\n/** tryHydrateTransaction constant. */\nexport const tryHydrateTransaction = async (\n { chainMap }: ChainStoreRead,\n hash: Hash,\n): Promise<SignedHydratedTransactionWithStorageMeta | undefined> => {\n return (await tryHydrateTypedBoundWitness<TransactionBoundWitness>(\n {\n get(hashes: Hash[]) {\n return chainMap.get(hashes)\n },\n next() {\n throw new Error('Not implemented')\n },\n },\n hash,\n isSignedTransactionBoundWitnessWithStorageMeta,\n )) as SignedHydratedTransactionWithStorageMeta | undefined\n}\n\n/** hydrateTransaction constant. */\nexport const hydrateTransaction = async (\n { chainMap }: ChainStoreRead,\n hash: Hash,\n): Promise<SignedHydratedTransaction> => {\n return await hydrateTypedBoundWitness<TransactionBoundWitness>(\n {\n get(hashes: Hash[]) {\n return chainMap.get(hashes)\n },\n next() {\n throw new Error('Not implemented')\n },\n },\n hash,\n isSignedTransactionBoundWitnessWithStorageMeta,\n ) as SignedHydratedTransaction\n}\n\n/** FlattenHydratedTransaction helper function. */\nexport function flattenHydratedTransaction<T extends HydratedTransaction>(hydratedTransaction: T): (T[0] | T[1][number])[] {\n const [tx, txPayloads] = hydratedTransaction\n return [...txPayloads, tx]\n}\n\n/** tryUnflattenHydratedTransaction constant. */\nexport const tryUnflattenHydratedTransaction = (\n flattened: Payload[],\n): SignedHydratedTransaction | undefined => {\n // Last element is always the transaction bound witness\n const tx = flattened.at(-1)\n\n // Everything else is a payloads\n const txPayloads = flattened.slice(0, -1)\n\n return asSignedHydratedTransaction([tx, txPayloads])\n}\n\n/** unflattenHydratedTransaction constant. */\nexport const unflattenHydratedTransaction = (flattened: Payload[]): SignedHydratedTransaction =>\n asSignedHydratedTransaction(tryUnflattenHydratedTransaction(flattened), true)\n\n/** FlattenHydratedTransactions helper function. */\nexport function flattenHydratedTransactions<T extends HydratedTransaction>(hydratedTransactions: T[]): (T[0] | T[1][number])[] {\n return hydratedTransactions.flatMap(tx => flattenHydratedTransaction(tx))\n}\n\n/** tryHydrateElevatedTransaction constant. */\nexport const tryHydrateElevatedTransaction = async (\n { chainMap }: ChainStoreRead,\n hash: Hash,\n): Promise<SignedHydratedTransactionWithHashMeta | undefined> => {\n const hydratedTransaction = await tryHydrateTransaction({ chainMap }, hash)\n if (!hydratedTransaction) {\n return undefined\n }\n const [transaction, payloads] = hydratedTransaction\n const opCodes = (transaction.script ?? []).filter(operation => operation.startsWith('elevate|'))\n const elevatedPayloads: WithStorageMeta<AllowedBlockPayload>[] = []\n for (const opCode of opCodes) {\n const [code, hash] = opCode.split('|')\n if (code === 'elevated') {\n const elevatedPayload = payloads.find(payload => payload._hash === hash)\n if (isAllowedBlockPayload(elevatedPayload)) {\n elevatedPayloads.push(elevatedPayload)\n }\n }\n }\n if (opCodes.length === elevatedPayloads.length) {\n return [transaction, elevatedPayloads.map(p => asAnyPayload(p, true))]\n }\n return undefined\n}\n\n/** hydrateElevatedTransaction constant. */\nexport const hydrateElevatedTransaction = async (\n context: ChainStoreRead,\n hash: Hash,\n): Promise<SignedHydratedTransactionWithHashMeta> => {\n return assertEx(await tryHydrateElevatedTransaction(context, hash), () => 'Hydration failed')\n}\n","import { PayloadBuilder } from '@xyo-network/sdk-js'\nimport type { HydratedTransaction } from '@xyo-network/xl1-protocol-lib'\n\n/** The number of bytes that a transaction and its payloads will take up in a block */\nexport function transactionBlockByteCount([transaction, payloads]: HydratedTransaction): number {\n const cleanTransaction = PayloadBuilder.omitStorageMeta(transaction)\n const transactionBytes = JSON.stringify(cleanTransaction).length\n const cleanPayloads = PayloadBuilder.omitStorageMeta(payloads)\n return cleanPayloads.reduce((acc: number, payload) => acc + JSON.stringify(payload).length, 0) + transactionBytes\n}\n","import { asHash, type Hash } from '@xylabs/sdk-js'\nimport type { Payload, WithHashMeta } from '@xyo-network/sdk-js'\nimport type { HydratedTransactionWithHashMeta, TransactionBoundWitness } from '@xyo-network/xl1-protocol-lib'\n\nimport { crackOperations } from './transactionOperations.ts'\n\n/** TransactionElevatedPayloadHashes helper function. */\nexport function transactionElevatedPayloadHashes(transaction: TransactionBoundWitness): Hash[] {\n const elevateOperations = crackOperations(transaction.script ?? []).filter(op => op[0] === 'elevate')\n return elevateOperations.map(op => asHash(op[1][0], true))\n}\n\n/** TransactionElevatedPayloads helper function. */\nexport function transactionElevatedPayloads([transaction, payloads]: HydratedTransactionWithHashMeta): WithHashMeta<Payload>[] {\n const hashes = transactionElevatedPayloadHashes(transaction)\n const elevatedPayloads = payloads.filter(payload => hashes.includes(payload._hash))\n return elevatedPayloads\n}\n","/** CrackOperation helper function. */\nexport function crackOperation(operation: string): [string, string[]] {\n const parts = operation.split('|')\n if (parts.length < 2) {\n throw new Error(`Invalid operation format: ${operation}`)\n }\n return [parts[0], parts.slice(1)]\n}\n\n/** CrackOperations helper function. */\nexport function crackOperations(operations: string[]): [string, string[]][] {\n return operations.map(op => crackOperation(op))\n}\n","import type { HydratedTransactionWithHashMeta } from '@xyo-network/xl1-protocol-lib'\nimport { AttoXL1, TransactionGasCosts } from '@xyo-network/xl1-protocol-lib'\n\nimport { transactionBlockByteCount } from './transactionBlockByteCount.ts'\nimport { transactionElevatedPayloads } from './transactionElevatedPayloads.ts'\n\n/** The required gas for the byte storage on the block chain for a transaction */\nexport function transactionBytesRequiredGas([transaction, payloads]: HydratedTransactionWithHashMeta): AttoXL1 {\n const transactionBlockBytes = transactionBlockByteCount([transaction, payloads])\n return AttoXL1(TransactionGasCosts.characterStorage * BigInt(transactionBlockBytes))\n}\n\n/** TransactionRequiredGas helper function. */\nexport function transactionRequiredGas(hydratedTransaction: HydratedTransactionWithHashMeta): AttoXL1 {\n const elevatedPayloads = transactionElevatedPayloads(hydratedTransaction)\n const hashes = elevatedPayloads.length + 1 /* for transaction itself */\n const signatures = hydratedTransaction[0].addresses.length\n return AttoXL1(transactionBytesRequiredGas(hydratedTransaction)\n + TransactionGasCosts.hashValidation * BigInt(hashes)\n + TransactionGasCosts.signatureValidation * BigInt(signatures)\n + TransactionGasCosts.payloadValidation * BigInt(elevatedPayloads.length))\n}\n","import { asHash, type Hash } from '@xylabs/sdk-js'\nimport { assertEx, filterAs } from '@xylabs/sdk-js'\nimport type { WithHashMeta } from '@xyo-network/sdk-js'\nimport { isHashMeta } from '@xyo-network/sdk-js'\nimport type { AllowedBlockPayload, HydratedTransactionWithHashMeta } from '@xyo-network/xl1-protocol-lib'\nimport { isAllowedBlockPayload } from '@xyo-network/xl1-protocol-lib'\n\n/** tryExtractElevatedHashesFromScript constant. */\nexport const tryExtractElevatedHashesFromScript = (strings: string[]): Hash[] => {\n const hashes = strings\n .filter(str => str.startsWith('elevate|'))\n .map(str => str.split('|')[1])\n return filterAs(hashes, h => asHash(h))\n}\n\n/** extractElevatedHashesFromScript constant. */\nexport const extractElevatedHashesFromScript = (strings: string[]): Hash[] => {\n const hashes = strings\n .filter(str => str.startsWith('elevate|'))\n .map(str => str.split('|')[1])\n const filtered = filterAs(hashes, h => asHash(h))\n assertEx(filtered.length === hashes.length, () => 'Invalid elevated hashes')\n return filtered\n}\n\n/** tryExtractElevatedHashes constant. */\nexport const tryExtractElevatedHashes = (tx: HydratedTransactionWithHashMeta): WithHashMeta<AllowedBlockPayload>[] => {\n const [bw, payloads] = tx\n const { script } = bw\n const hashes = script ? tryExtractElevatedHashesFromScript(script) : []\n return payloads\n .filter(p => hashes.includes(p._hash))\n .filter(isAllowedBlockPayload)\n .filter(isHashMeta)\n}\n\n/** extractElevatedHashes constant. */\nexport const extractElevatedHashes = (tx: HydratedTransactionWithHashMeta): WithHashMeta<AllowedBlockPayload>[] => {\n const [bw, payloads] = tx\n const { script } = bw\n const hashes = script ? tryExtractElevatedHashesFromScript(script) : []\n const filtered = payloads\n .filter(p => hashes.includes(p._hash))\n .filter(isAllowedBlockPayload)\n .filter(isHashMeta)\n assertEx(filtered.length === hashes.length, () => 'Invalid elevated hashes')\n return filtered\n}\n","import {\n assertEx, hexFromArrayBuffer, toArrayBuffer,\n} from '@xylabs/sdk-js'\nimport type { AccountInstance, Signed } from '@xyo-network/sdk-js'\nimport { PayloadBuilder } from '@xyo-network/sdk-js'\nimport type { TransactionBoundWitness, UnsignedTransactionBoundWitness } from '@xyo-network/xl1-protocol-lib'\n\n/**\n * Signs an unsigned transaction with the provided account.\n * @param tx The transaction to sign\n * @param account The account to sign the transaction with\n * @returns The signed transaction\n */\nexport async function signTransaction(tx: UnsignedTransactionBoundWitness, account: AccountInstance) {\n assertEx(tx.from === account.address, () => 'Signer address does not match transaction from address')\n // Clone tx to prevent modifying original\n const unsignedTx = structuredClone(tx)\n // Update dynamic fields based on account\n unsignedTx.addresses = [account.address]\n unsignedTx.previous_hashes = [account.previousHash ?? null]\n // Calculate tx hash and sign it\n const hash = await PayloadBuilder.dataHash(unsignedTx)\n const hashBytes = toArrayBuffer(hash)\n const [signature] = await account.sign(hashBytes)\n // Append the signatures to the transaction\n const result: Signed<TransactionBoundWitness> = {\n ...unsignedTx,\n $signatures: [hexFromArrayBuffer(signature)],\n }\n // Return the signed transaction\n return result\n}\n","import type { Hex } from '@xylabs/sdk-js'\nimport { assertEx, Base } from '@xylabs/sdk-js'\nimport type {\n AccountInstance, Payload, PayloadBuilderOptions,\n} from '@xyo-network/sdk-js'\nimport { PayloadBuilder } from '@xyo-network/sdk-js'\nimport type {\n AllowedBlockPayload,\n ChainId,\n TransactionFeesBigInt,\n} from '@xyo-network/xl1-protocol-lib'\nimport {\n asXL1BlockNumber,\n defaultTransactionFees, isAllowedBlockPayload, minTransactionFees, XYO_ZERO_ADDRESS,\n} from '@xyo-network/xl1-protocol-lib'\n\nimport { buildTransaction } from './buildTransaction.ts'\nimport { transactionRequiredGas } from './primitives/index.ts'\n\n/** Builder for constructing Transaction instances. */\nexport class TransactionBuilder<TPayload extends Payload> extends Base<Omit<PayloadBuilderOptions, 'schema'>> {\n private _blockRange?: [number, number]\n private _chain?: Hex\n private _elevatedPayloads: AllowedBlockPayload[] = []\n private _fees: TransactionFeesBigInt | undefined\n private _payloads: TPayload[] = []\n private _signers: AccountInstance[] = []\n\n constructor(options: Omit<PayloadBuilderOptions, 'schema'> = {}) {\n super(options)\n }\n\n async build() {\n const chain = assertEx(this._chain, () => 'Chain must be set before building the transaction')\n const fees = assertEx(this._fees, () => 'Fees must be set before building the transaction')\n const blockRange = assertEx(this._blockRange, () => 'Block range must be set before building the transaction')\n return await buildTransaction(\n chain,\n this._elevatedPayloads,\n this._payloads,\n this._signers,\n asXL1BlockNumber(blockRange[0], true),\n asXL1BlockNumber(blockRange[1], true),\n this._signers[0]?.address,\n fees,\n )\n }\n\n chain(chain: ChainId) {\n this._chain = chain\n return this\n }\n\n async dryRun() {\n return await buildTransaction(\n XYO_ZERO_ADDRESS,\n this._elevatedPayloads,\n this._payloads,\n this._signers,\n asXL1BlockNumber(0, true),\n asXL1BlockNumber(1000, true),\n this._signers[0]?.address,\n defaultTransactionFees,\n )\n }\n\n elevatedPayload(payload?: AllowedBlockPayload) {\n const allowedPayload = isAllowedBlockPayload(payload) ? payload : undefined\n const allowPayloadExists = assertEx(allowedPayload, () => 'Payload must be an AllowedBlockPayload')\n this._elevatedPayloads.push(allowPayloadExists)\n return this\n }\n\n elevatedPayloads(payloads?: AllowedBlockPayload[]) {\n if (payloads)\n for (const payload of payloads) {\n this.elevatedPayload(payload)\n }\n return this\n }\n\n async estimatedMinimumFees(): Promise<TransactionFeesBigInt> {\n const tx = await this.dryRun()\n const requiredGas = transactionRequiredGas(tx)\n return {\n base: minTransactionFees.base,\n // eslint-disable-next-line unicorn/prefer-math-min-max\n gasLimit: requiredGas > minTransactionFees.gasLimit ? requiredGas : minTransactionFees.gasLimit,\n gasPrice: minTransactionFees.gasPrice,\n priority: minTransactionFees.priority,\n }\n }\n\n fees(fees: TransactionFeesBigInt) {\n this._fees = fees\n return this\n }\n\n payload(payload?: TPayload) {\n this._payloads.push(payload as TPayload)\n return this\n }\n\n payloads(payloads?: TPayload[]) {\n if (payloads)\n for (const payload of payloads) {\n if (payload !== null) {\n this.payload(payload)\n }\n }\n return this\n }\n\n range(blockRange: [number, number]) {\n if (blockRange.length !== 2) {\n throw new Error('Block range must be an array of two numbers')\n }\n this._blockRange = blockRange\n return this\n }\n\n async removeElevatedPayload(payload: AllowedBlockPayload) {\n const hash = await PayloadBuilder.hash(payload)\n const existingHashes = await PayloadBuilder.hashes(this._elevatedPayloads)\n\n // no async after this point to prevent changing _elevatedPayloads from other promise\n const existingPayloadIndex = existingHashes.indexOf(hash)\n if (existingPayloadIndex === -1) {\n throw new Error('Payload not found in the transaction')\n }\n this._elevatedPayloads = this._elevatedPayloads.filter((_, index) => index !== existingPayloadIndex)\n return this\n }\n\n async removePayload(payload: TPayload) {\n const hash = await PayloadBuilder.hash(payload)\n const existingHashes = await PayloadBuilder.hashes(this._payloads)\n\n // no async after this point to prevent changing _payloads from other promise\n const existingPayloadIndex = existingHashes.indexOf(hash)\n if (existingPayloadIndex === -1) {\n throw new Error('Payload not found in the transaction')\n }\n this._payloads = this._payloads.filter((_, index) => index !== existingPayloadIndex)\n return this\n }\n\n signer(signer?: AccountInstance) {\n if (signer) {\n this._signers.push(signer)\n }\n return this\n }\n\n signers(signers?: (AccountInstance | null)[]) {\n if (signers)\n for (const signer of signers) {\n if (signer !== null) {\n this.signer(signer)\n }\n }\n return this\n }\n}\n","import type { Logger } from '@xylabs/sdk-js'\nimport {\n AbstractCreatable, assertEx, IdLogger,\n} from '@xylabs/sdk-js'\nimport type { Provider, ProviderMoniker } from '@xyo-network/xl1-protocol-lib'\n\nimport type {\n CreatableProvider,\n CreatableProviderEventData, CreatableProviderInstance, CreatableProviderParams,\n ProviderMap,\n} from './CreatableProvider.ts'\nimport { ProviderFactory } from './ProviderFactory.ts'\n\n/** Abstract base class for CreatableProvider implementations. */\nexport abstract class AbstractCreatableProvider<TParams extends CreatableProviderParams = CreatableProviderParams,\n TEventData extends CreatableProviderEventData = CreatableProviderEventData> extends AbstractCreatable<TParams, TEventData>\n implements Omit<CreatableProviderInstance, 'moniker'> {\n dependencies: ProviderMap = {}\n\n protected _contextCache: TParams['context'] | undefined\n protected _logger: Logger | undefined | null\n\n abstract readonly moniker: ProviderMoniker\n\n override get logger() {\n // we use null as a way to know if it has been initialized to nothing\n if (this._logger === undefined) {\n const providedLogger = this.params.logger ?? this.context.logger\n this._logger = providedLogger ? new IdLogger(providedLogger, () => `${this.moniker} [${this.constructor.name}]`) : null\n }\n return this._logger ?? undefined\n }\n\n override get meter() {\n return this.context.meterProvider?.getMeter(this.name) ?? super.meter\n }\n\n override get tracer() {\n return this.context.traceProvider?.getTracer(this.name) ?? super.tracer\n }\n\n protected get config() {\n return this.context.config!\n }\n\n protected get context() {\n return this.params.context!\n }\n\n protected get locator() {\n return this.context.locator!\n }\n\n static factory<TInstance extends CreatableProviderInstance, TDependencies extends ProviderMoniker[] = ProviderMoniker[]>(\n this: CreatableProvider<TInstance>,\n dependencies: TDependencies,\n params: Omit<TInstance['params'], 'context'>,\n ) {\n const factory = ProviderFactory.withParams<TInstance, TDependencies>(this, dependencies, params)\n return factory\n }\n\n static override async paramsHandler<T extends CreatableProviderInstance>(\n params: Partial<T['params']> = {},\n ) {\n const context = assertEx(params.context, () => new Error('Context is required'))\n const config = assertEx(context.config, () => new Error('Context config is required'))\n const locator = assertEx(context.locator, () => new Error('Context locator is required'))\n return await super.paramsHandler<T>({\n ...params,\n statusReporter: params.statusReporter ?? context.statusReporter,\n context: {\n ...context, config, locator,\n },\n name: params.name ?? (this as unknown as CreatableProvider<T>).defaultMoniker,\n logger: params.logger ?? context.logger,\n })\n }\n\n override async createHandler() {\n await super.createHandler()\n if (this.tracer === undefined) {\n this.logger?.warn('No tracer available in context')\n }\n if (this.meter === undefined) {\n this.logger?.warn('No meter available in context')\n }\n }\n\n async locateAndCreate<TProvider extends Provider<ProviderMoniker>>(moniker: TProvider['moniker']) {\n return await this.locator.getInstance<TProvider>(moniker)\n }\n\n async tryLocateAndCreate<TProvider extends Provider<ProviderMoniker>>(moniker: TProvider['moniker']) {\n return await this.locator.tryGetInstance<TProvider>(moniker)\n }\n}\n","import type { Labels, WithOptionalLabels } from '@xylabs/sdk-js'\nimport { assertEx } from '@xylabs/sdk-js'\nimport type { ProviderMoniker } from '@xyo-network/xl1-protocol-lib'\n\nimport type {\n CreatableProvider, CreatableProviderFactory, CreatableProviderInstance,\n ProviderFactoryScope,\n} from './CreatableProvider.ts'\nimport type { GetInstanceOptions } from './GetInstanceOptions.ts'\n\ndeclare global {\n var xyoServiceSingletons: Record<string, unknown>\n}\n\n/** ProviderFactoryDescription helper function. */\nexport function providerFactoryDescription(factory: CreatableProviderFactory, labels?: Labels) {\n return `${factory.providerName}:${factory.defaultMoniker}:${JSON.stringify(labels ?? (factory as WithOptionalLabels).labels ?? {})}`\n}\n\n/** ProviderFactory implementation. */\nexport class ProviderFactory<TProvider extends CreatableProviderInstance,\n TDependencies extends ProviderMoniker[]> implements CreatableProviderFactory<TProvider> {\n creatableProvider: CreatableProvider<TProvider>\n\n defaultMoniker: CreatableProvider<TProvider>['monikers'][number]\n\n defaultParams: Omit<TProvider['params'], 'context'>\n\n dependencies: TDependencies\n\n labels?: Labels\n\n monikers: CreatableProvider<TProvider>['monikers']\n\n providerName: string\n\n scope: ProviderFactoryScope\n\n private _uniqueId: symbol\n\n constructor(\n creatableProvider: CreatableProvider<TProvider>,\n dependencies: TDependencies,\n params: Omit<TProvider['params'], 'context'>,\n labels: Labels = {},\n scope: ProviderFactoryScope = 'context',\n ) {\n this.creatableProvider = creatableProvider\n this.defaultParams = params\n this.defaultMoniker = creatableProvider.defaultMoniker\n this.dependencies = dependencies\n this.monikers = creatableProvider.monikers\n this.scope = scope\n assertEx(this.monikers.includes(this.defaultMoniker), () => 'defaultMoniker must be in monikers')\n this.labels = Object.assign({}, (creatableProvider as WithOptionalLabels).labels ?? {}, labels ?? {})\n this.providerName = creatableProvider.name\n this._uniqueId = Symbol(providerFactoryDescription(this))\n }\n\n get resolvedMoniker() {\n const labels: Labels = this.labels ?? {}\n const labelString = Object.entries(labels).map(([key, value]) => `${key}=${value}`).join(',')\n return labelString.length === 0 ? `${this.defaultMoniker}` : `${this.defaultMoniker}|${labelString}`\n }\n\n get uniqueId(): symbol {\n return this._uniqueId\n }\n\n static withParams<TInstance extends CreatableProviderInstance, TDependencies extends ProviderMoniker[]>(\n creatableProvider: CreatableProvider<TInstance>,\n dependencies: TDependencies,\n params: Omit<TInstance['params'], 'context'>,\n labels: Labels = {},\n ) {\n return new ProviderFactory<TInstance, TDependencies>(creatableProvider, dependencies, params, labels)\n }\n\n factory<TInstance extends CreatableProviderInstance, TDependencies extends ProviderMoniker[]>(\n this: CreatableProviderFactory<TInstance, TDependencies>,\n dependencies: TDependencies,\n params: Omit<TInstance['params'], 'context'>,\n labels: Labels = {},\n ) {\n return new ProviderFactory<TInstance, TDependencies>(this.creatableProvider, dependencies, params, labels)\n }\n\n async getInstance(this: CreatableProviderFactory<TProvider>, params: TProvider['params'], { start = true }: GetInstanceOptions): Promise<TProvider> {\n let scopeObject: Record<string, unknown> = {}\n switch (this.scope) {\n case 'global': {\n if (globalThis.xyoServiceSingletons === undefined) {\n globalThis.xyoServiceSingletons = {}\n }\n scopeObject = globalThis.xyoServiceSingletons\n break\n }\n case 'context': {\n const context = assertEx(\n params?.context,\n () => 'Context is required for context-scoped providers',\n )\n if (context.singletons === undefined) {\n context.singletons = {}\n }\n scopeObject = context.singletons\n break\n }\n default: {\n scopeObject = {}\n break\n }\n }\n const mergedParams: TProvider['params'] = {\n ...this.defaultParams,\n ...params,\n } as TProvider['params']\n const resultPromise = scopeObject[this.resolvedMoniker] as Promise<TProvider> ?? this.creatableProvider.create<TProvider>(mergedParams)\n scopeObject[this.resolvedMoniker] = resultPromise\n const result = await resultPromise\n if (start) {\n assertEx(await result.start(), () => `Failed to start provider instance [${this.resolvedMoniker}]`)\n }\n return result\n }\n\n async tryGetInstance(\n this: CreatableProviderFactory<TProvider>,\n params: TProvider['params'],\n options?: GetInstanceOptions,\n ): Promise<TProvider | undefined> {\n try {\n return await this.getInstance(params, options)\n } catch {\n return\n }\n }\n}\n","import type {\n Creatable, CreatableInstance, CreatableParams,\n EventData,\n Labels, WithOptionalLabels,\n} from '@xylabs/sdk-js'\nimport type { Provider, ProviderMoniker } from '@xyo-network/xl1-protocol-lib'\n\nimport type { CreatableProviderContext } from '../model/index.ts'\nimport type { GetInstanceOptions } from './GetInstanceOptions.ts'\nimport type { LabeledCreatableProviderFactory } from './LabeledCreatableProviderFactory.ts'\n\n/** Parameters for CreatableProvider. */\nexport interface CreatableProviderParams<TContext extends CreatableProviderContext = CreatableProviderContext> extends CreatableParams {\n context: TContext\n}\n/** CreatableProviderEventData interface. */\nexport interface CreatableProviderEventData extends EventData {}\n\n/** CreatableProviderInstance type. */\nexport type CreatableProviderInstance<\n TProvider extends Provider<ProviderMoniker> = Provider<ProviderMoniker>,\n TDependencies extends ProviderMoniker[] = ProviderMoniker[],\n TParams extends CreatableProviderParams = CreatableProviderParams,\n TEventData extends CreatableProviderEventData = CreatableProviderEventData>\n = CreatableInstance<TParams, TEventData> & TProvider & {\n dependencies: ProviderMap<TDependencies[number]>\n }\n\n/** ProviderFactoryScope type. */\nexport type ProviderFactoryScope = 'global' | 'context' | 'local'\n\n/** CreatableProviderFactory interface. */\nexport interface CreatableProviderFactory<T extends CreatableProviderInstance = CreatableProviderInstance,\n TDependencies extends ProviderMoniker[] = ProviderMoniker[]>\n extends Omit<CreatableProvider<T>, 'create' | 'createHandler' | 'paramsHandler'> {\n creatableProvider: CreatableProvider<T>\n defaultParams: Omit<T['params'], 'context'>\n\n readonly dependencies: TDependencies\n\n labels?: Labels\n providerName: string\n resolvedMoniker: string\n scope: ProviderFactoryScope\n\n uniqueId: symbol\n\n getInstance(\n this: CreatableProviderFactory<T>,\n params: T['params'],\n options?: GetInstanceOptions): Promise<T>\n\n tryGetInstance(\n this: CreatableProviderFactory<T>,\n params: T['params'],\n options?: GetInstanceOptions): Promise<T | undefined>\n\n}\n\n/** LabeledCreatableProvider interface. */\nexport interface LabeledCreatableProvider<T extends CreatableProviderInstance = CreatableProviderInstance,\n TDependencies extends ProviderMoniker[] = ProviderMoniker[]> extends CreatableProvider<T>, WithOptionalLabels {\n factory(dependencies: TDependencies, params: Omit<T['params'], 'context'>): LabeledCreatableProviderFactory<T>\n}\n\n/** ProviderMap type. */\nexport type ProviderMap<T extends ProviderMoniker = ProviderMoniker> = Partial<Record<T, CreatableProviderInstance<Provider<T>>>>\n\n/** CreatableProvider interface. */\nexport interface CreatableProvider<T extends CreatableProviderInstance = CreatableProviderInstance,\n TDependencies extends ProviderMoniker[] = ProviderMoniker[]> extends Creatable<T> {\n readonly defaultMoniker: ProviderMoniker\n readonly dependencies: TDependencies\n readonly monikers: ProviderMoniker[]\n factory(dependencies: TDependencies, params: Omit<T['params'], 'context'>): CreatableProviderFactory<T>\n}\n\n/**\n * Class annotation to be used to decorate Providers which support\n * an asynchronous creation pattern\n * @returns The decorated Provider requiring it implement the members\n * of the CreatableProvider as statics properties/methods\n */\nexport function creatableProvider<TProvider extends CreatableProviderInstance = CreatableProviderInstance>() {\n return <U extends CreatableProvider<TProvider>>(constructor: U) => {\n // eslint-disable-next-line @typescript-eslint/no-unused-expressions\n constructor\n }\n}\n\n/**\n * Class annotation to be used to decorate Providers which support\n * an asynchronous creation pattern\n * @returns The decorated Provider requiring it implement the members\n * of the CreatableProvider as statics properties/methods\n */\nexport function labeledCreatableProvider<TProvider extends CreatableProviderInstance = CreatableProviderInstance>() {\n return <U extends LabeledCreatableProvider<TProvider>>(constructor: U) => {\n // eslint-disable-next-line @typescript-eslint/no-unused-expressions\n constructor\n }\n}\n","import type { Labels } from '@xylabs/sdk-js'\nimport { isTruthy } from '@xylabs/sdk-js'\nimport type { ProviderMoniker } from '@xyo-network/xl1-protocol-lib'\n\nimport type { CreatableProviderFactory, CreatableProviderInstance } from './CreatableProvider.ts'\nimport type { LabeledCreatableProviderFactory } from './LabeledCreatableProviderFactory.ts'\nimport { providerFactoryDescription } from './ProviderFactory.ts'\n\n/** CreatableProviderRegistry type. */\nexport type CreatableProviderRegistry<TMonikers extends ProviderMoniker[] = ProviderMoniker[]>\n = Record<TMonikers[number], (CreatableProviderFactory | LabeledCreatableProviderFactory)[] | undefined>\n\nconst buildProviderFactory = <TProvider extends CreatableProviderInstance>(\n provider: CreatableProviderFactory<TProvider>,\n defaultParams: Omit<TProvider['params'], 'context'>,\n labels?: Labels,\n): LabeledCreatableProviderFactory<TProvider> => {\n const factory = {\n monikers: provider.monikers,\n uniqueId: Symbol(providerFactoryDescription(provider, labels)),\n // Merge module & supplied labels\n labels: { ...(provider as LabeledCreatableProviderFactory).labels, ...labels },\n creatableProvider: provider.creatableProvider,\n dependencies: provider.dependencies,\n resolvedMoniker: provider.resolvedMoniker,\n providerName: provider.providerName,\n scope: provider.scope,\n defaultParams,\n getInstance: provider.getInstance.bind(provider) as LabeledCreatableProviderFactory<TProvider>['getInstance'],\n tryGetInstance: provider.tryGetInstance?.bind(provider) as LabeledCreatableProviderFactory<TProvider>['tryGetInstance'],\n defaultMoniker: provider.defaultMoniker,\n factory: provider.factory.bind(provider) as LabeledCreatableProviderFactory<TProvider>['factory'],\n } satisfies LabeledCreatableProviderFactory<TProvider>\n return factory\n}\n\n/** registerCreatableProviderFactory constant. */\nexport const registerCreatableProviderFactory = <TProvider extends CreatableProviderInstance>(\n registry: CreatableProviderRegistry,\n factory: CreatableProviderFactory<TProvider> | LabeledCreatableProviderFactory<TProvider>,\n labels?: Labels,\n /** register this as the primary factory for every schema it supports */\n primary: boolean | ProviderMoniker | ProviderMoniker[] = false,\n) => {\n const primaryMonikers\n = primary !== true && isTruthy(primary)\n ? Array.isArray(primary)\n ? primary\n : [primary]\n : []\n\n for (const primaryMoniker of primaryMonikers) {\n if (!factory.monikers.includes(primaryMoniker)) {\n console.warn(`Primary moniker ${primary} not found in factory monikers`)\n }\n }\n\n const isPrimaryForMoniker = (moniker: ProviderMoniker) => {\n switch (typeof primary) {\n case 'boolean': {\n return primary\n }\n case 'string': {\n return moniker === primary\n }\n case 'object': {\n if (Array.isArray(primary)) {\n return primary.includes(moniker)\n }\n }\n }\n throw new Error(`Invalid primary value: ${primary}`)\n }\n\n const factoryClone: LabeledCreatableProviderFactory<TProvider> = buildProviderFactory(factory, factory.defaultParams, labels)\n\n // add this default moniker as the first entry\n registry[factoryClone.defaultMoniker] = [factoryClone, ...(registry[factoryClone.defaultMoniker] ?? [])]\n for (const moniker of factoryClone.monikers) {\n registry[moniker] = isPrimaryForMoniker(moniker) ? [factoryClone, ...(registry[moniker] ?? [])] : [...(registry[moniker] ?? []), factoryClone]\n }\n}\n\n/** registerCreatableProviderFactories constant. */\nexport const registerCreatableProviderFactories = (\n factories: (CreatableProviderFactory | LabeledCreatableProviderFactory)[],\n registry: CreatableProviderRegistry = {},\n primary = false,\n) => {\n for (const factory of factories) {\n registerCreatableProviderFactory(registry, factory, undefined, primary)\n }\n return registry\n}\n","import type { WithOptionalLabels } from '@xylabs/sdk-js'\n\nimport type { CreatableProviderFactory, CreatableProviderInstance } from './CreatableProvider.ts'\n\n/** LabeledCreatableProviderFactory type. */\nexport type LabeledCreatableProviderFactory<T extends CreatableProviderInstance = CreatableProviderInstance> = CreatableProviderFactory<T> & WithOptionalLabels\n\n/** hasLabels constant. */\nexport const hasLabels = (factory: CreatableProviderFactory | LabeledCreatableProviderFactory): factory is LabeledCreatableProviderFactory => {\n return (factory as LabeledCreatableProviderFactory).labels !== undefined\n}\n\n/**\n * Class annotation to be used to decorate Providers which support\n * an asynchronous labeled creation factory pattern\n * @returns The decorated Provider requiring it implement the members\n * of the CreatableProvider as statics properties/methods\n */\nexport function labeledCreatableProviderFactory<TProvider extends CreatableProviderInstance = CreatableProviderInstance>() {\n return <U extends LabeledCreatableProviderFactory<TProvider>>(constructor: U) => {\n // eslint-disable-next-line @typescript-eslint/no-unused-expressions\n constructor\n }\n}\n","import { hasAllLabels, type Labels } from '@xylabs/sdk-js'\nimport { assertEx } from '@xylabs/sdk-js'\nimport type { Provider, ProviderMoniker } from '@xyo-network/xl1-protocol-lib'\n\nimport type { CreatableProviderContext } from '../model/index.ts'\nimport type { CreatableProviderFactory, CreatableProviderInstance } from './CreatableProvider.ts'\nimport { type CreatableProviderRegistry, registerCreatableProviderFactory } from './CreatableProviderRegistry.ts'\nimport type { ProviderFactoryGetInstanceOptions } from './GetInstanceOptions.ts'\nimport { hasLabels, type LabeledCreatableProviderFactory } from './LabeledCreatableProviderFactory.ts'\nimport type { ProviderFactoryLocatorInstance } from './ProviderFactoryLocatorInstance.ts'\n\n/**\n * A class which encapsulates the Service Locator Pattern for Provider Factories\n */\nexport class ProviderFactoryLocator<TContext extends CreatableProviderContext = CreatableProviderContext,\n TMonikers extends ProviderMoniker[] = ProviderMoniker[]> implements ProviderFactoryLocatorInstance<TContext> {\n protected readonly _context: TContext\n protected readonly _registry: CreatableProviderRegistry<TMonikers>\n\n private _frozen = false\n private _parent?: ProviderFactoryLocatorInstance<TContext>\n private _validateDepsOnRegister: boolean\n\n constructor(context: (Omit<TContext, 'locator'> & { locator?: TContext['locator'] }), registry: CreatableProviderRegistry = {}, validateDepsOnRegister = false) {\n this._registry = registry\n this._context = { ...context, locator: this } as unknown as TContext\n this._parent = context.locator as ProviderFactoryLocatorInstance<TContext>\n this._validateDepsOnRegister = validateDepsOnRegister\n }\n\n get context() {\n return this._context\n }\n\n get logger() {\n return this.context.logger\n }\n\n /**\n * The current registry for the module factory\n */\n get registry(): Readonly<CreatableProviderRegistry> {\n return this._registry\n }\n\n protected get validateDepsOnRegister() {\n return this._validateDepsOnRegister\n }\n\n freeze() {\n this._frozen = true\n }\n\n async getInstance<TProvider extends Provider<ProviderMoniker>>(\n moniker: TProvider['moniker'],\n { start = true, labels }: ProviderFactoryGetInstanceOptions = {},\n ) {\n return assertEx(\n await this.tryGetInstance<TProvider>(moniker, { start, labels }),\n () => `No provider instance for the supplied config moniker [${moniker}]${labels ? ` & labels [${JSON.stringify(labels)}]` : ''} could be created`,\n )\n }\n\n has(moniker: TMonikers[number]): boolean {\n return !!this._registry[moniker]\n }\n\n /**\n * Locates a provider factory that matches the supplied moniker and labels\n * @param moniker The config moniker for the provider\n * @param labels The labels for the provider factory\n * @returns A provider factory that matches the supplied moniker and labels or throws if one is not found\n */\n locate<TProvider extends Provider<ProviderMoniker>>(moniker: TProvider['moniker'], labels?: Labels):\n CreatableProviderFactory<CreatableProviderInstance<TProvider>> | LabeledCreatableProviderFactory<CreatableProviderInstance<TProvider>> {\n return assertEx(\n this.tryLocate<TProvider>(moniker, labels),\n\n () => `No module factory for the supplied config moniker [${moniker}]${labels ? ` & labels [${JSON.stringify(labels)}]` : ''} registered`,\n )\n }\n\n merge(locator: ProviderFactoryLocatorInstance): ProviderFactoryLocatorInstance {\n const registry = { ...this.registry }\n for (const moniker in locator.registry) {\n if (registry[moniker]) {\n registry[moniker].push(...(locator.registry[moniker] ?? []))\n } else {\n registry[moniker] = locator.registry[moniker]\n }\n }\n return new ProviderFactoryLocator(this.context, registry)\n }\n\n /**\n * Registers a single module factory (with optional tags) with the locator\n * @param factory The factory to register\n * @param labels The labels for the module factory\n */\n register(factory: CreatableProviderFactory, labels?: Labels, primary: boolean | ProviderMoniker | ProviderMoniker[] = false): this {\n assertEx(!this._frozen, () => 'Cannot register a module factory after the locator has been frozen')\n if (this.validateDepsOnRegister) {\n const missingDeps = factory.dependencies.filter(dep => !this.registered(dep))\n assertEx(missingDeps.length === 0, () => `Cannot register module factory [${factory.uniqueId.description}] due to missing dependencies: ${missingDeps.join(', ')}`)\n }\n registerCreatableProviderFactory(this._registry, factory, labels, primary)\n return this\n }\n\n /**\n * Registers multiple module factories with the locator\n * @param factories The factories to register\n */\n registerMany(factories: CreatableProviderFactory[]): this {\n for (const factory of factories) {\n this.register(factory)\n }\n return this\n }\n\n registered(moniker: ProviderMoniker) {\n return !!this.registry[moniker] || (this._parent?.registered(moniker) ?? false)\n }\n\n async tryGetInstance<TProvider extends Provider<ProviderMoniker>>(\n moniker: TProvider['moniker'],\n { start = true, labels }: ProviderFactoryGetInstanceOptions = {},\n ) {\n const resolvedParams = { context: this.context } as CreatableProviderInstance<TProvider>['params']\n const factory = this.tryLocate<TProvider>(moniker, labels)\n if (factory) {\n if (this.context.singletons[factory.uniqueId]) {\n return this.context.singletons[factory.uniqueId] as CreatableProviderInstance<TProvider>\n }\n this.logger?.info(`Creating provider instance for moniker [${moniker}]${labels ? ` with labels [${JSON.stringify(labels)}]` : ''} using factory [${factory.uniqueId.description}]`)\n const result = await factory.getInstance(resolvedParams, { start })\n this.context.singletons[factory.uniqueId] = result\n return result\n }\n }\n\n /**\n * Tries to locate a module factory that matches the supplied moniker and labels\n * @param moniker The config moniker for the module\n * @param labels The labels for the module factory\n * @returns A module factory that matches the supplied moniker and labels or undefined\n */\n tryLocate<TProvider extends Provider<ProviderMoniker>>(moniker: TProvider['moniker'], labels?: Labels) {\n const result = (labels\n // Find the first factory that has labels and has all the labels provided\n ? (this._registry[moniker]?.filter(hasLabels).find(factory => hasAllLabels(factory?.labels, labels)) ?? this._registry[moniker]?.[0])\n // Otherwise, return the first factory\n : this._registry[moniker]?.[0]) ?? this._parent?.tryLocate<TProvider>(moniker, labels)\n\n return result as CreatableProviderFactory<CreatableProviderInstance<TProvider>>\n | LabeledCreatableProviderFactory<CreatableProviderInstance<TProvider>> | undefined\n }\n\n validateDependencies(recursive = false) {\n if (recursive) {\n this._parent?.validateDependencies()\n }\n for (const moniker in this.registry) {\n for (const factory of this.registry[moniker] ?? []) {\n const missingDeps = factory.dependencies.filter(dep => !this.registered(dep))\n assertEx(missingDeps.length === 0, () => `Module factory [${factory.uniqueId.description}] is missing dependencies: ${missingDeps.join(', ')}`)\n }\n }\n }\n}\n","import type { Config } from '../config/index.ts'\nimport { ProviderFactoryLocator } from '../CreatableProvider/index.ts'\nimport type { CreatableProviderContext } from '../model/index.ts'\n\n/** @deprecated use getTestProviderContext instead */\nexport function getEmptyProviderContext(config: Config): CreatableProviderContext {\n const singletons = {}\n const caches = {}\n const locator = new ProviderFactoryLocator({\n config, singletons, caches, logger: console,\n })\n return locator.context\n}\n\n/** @deprecated Use getEmptyProviderContext instead */\nexport function getEmptyContext(config: Config) {\n // eslint-disable-next-line @typescript-eslint/no-deprecated\n return getEmptyProviderContext(config)\n}\n","import {\n zodAsFactory, zodIsFactory, zodToFactory,\n} from '@xylabs/sdk-js'\nimport type { z } from 'zod'\n\nimport { HostActorConfigZod } from '../config/index.ts'\nimport { BaseConfigContextZod } from '../model/index.ts'\n\n/** HostActorConfigContext constant. */\nexport const HostActorConfigContext = BaseConfigContextZod.extend({ config: HostActorConfigZod })\n\n/** HostActorConfigContext type. */\nexport type HostActorConfigContext = z.infer<typeof HostActorConfigContext>\n\n/** Type guard that checks if a value is a valid HostActorConfigContext. */\nexport const isHostActorConfigContext = zodIsFactory(HostActorConfigContext)\n/** Converts a value to HostActorConfigContext, throwing if invalid. */\nexport const asHostActorConfigContext = zodAsFactory(HostActorConfigContext, 'asHostActorConfigContext')\n/** toHostActorConfigContext constant. */\nexport const toHostActorConfigContext = zodToFactory(HostActorConfigContext, 'toHostActorConfigContext')\n","import type { Address } from '@xylabs/sdk-js'\nimport { isDefined } from '@xylabs/sdk-js'\nimport { PayloadBuilder } from '@xyo-network/sdk-js'\nimport {\n type ChainStakeIntent, ChainStakeIntentSchema, type Intent,\n} from '@xyo-network/xl1-protocol-lib'\n\n/** createDeclarationIntent constant. */\nexport const createDeclarationIntent = (address: Address, intent: Intent, nbf: number, exp?: number): ChainStakeIntent => {\n const expiration = isDefined(exp) ? exp : nbf + 10_000\n const redeclarationIntent = new PayloadBuilder<ChainStakeIntent>({ schema: ChainStakeIntentSchema }).fields({\n from: address, intent, nbf, exp: expiration,\n }).build()\n return redeclarationIntent\n}\n","import { AsObjectFactory } from '@xylabs/sdk-js'\nimport {\n asSchema, isPayloadOfZodType, type Payload,\n} from '@xyo-network/sdk-js'\nimport { z } from 'zod'\n\nimport {\n TypedDataDomainZod, TypedDataTypesZod, TypedDataValueZod,\n} from '../Types.ts'\n\n/** EIP712DataPayloadFieldsZod constant. */\nexport const EIP712DataPayloadFieldsZod = z.object({\n domain: TypedDataDomainZod,\n types: TypedDataTypesZod,\n values: TypedDataValueZod,\n})\n/** EIP712DataPayloadFields type. */\nexport type EIP712DataPayloadFields = z.infer<typeof EIP712DataPayloadFieldsZod>\n\n/** Schema identifier for EIP712DataPayload payloads. */\nexport const EIP712DataPayloadSchema = asSchema('network.xyo.chains.ethereum.eip712.data', true)\n/** Schema type for EIP712DataPayload payloads. */\nexport type EIP712DataPayloadSchema = typeof EIP712DataPayloadSchema\n\n/** EIP712DataPayload type. */\nexport type EIP712DataPayload = Payload<EIP712DataPayloadFields, EIP712DataPayloadSchema>\n\n/** Type guard that checks if a value is a valid EIP712DataPayload. */\nexport const isEIP712DataPayload = isPayloadOfZodType<EIP712DataPayload>(\n EIP712DataPayloadFieldsZod,\n EIP712DataPayloadSchema,\n)\n\n/** Converts a value to EIP712DataPayload, throwing if invalid. */\nexport const asEIP712DataPayload = AsObjectFactory.create(isEIP712DataPayload)\n","// import type { Signer } from 'ethers/providers'\nimport { z } from 'zod'\n\n/**\n * Typed Data Types\n * Re-exposing the types from ethers for convenience and to ensure\n * we can fix in one place if they change\n */\n\n// export type TypedDataDomain = Parameters<Signer['signTypedData']>[0]\n// export type TypedDataTypes = Parameters<Signer['signTypedData']>[1]\n// export type TypedDataValues = Parameters<Signer['signTypedData']>[2]\n\n/** TypedDataDomainZod constant. */\nexport const TypedDataDomainZod = z.object({\n name: z.string().nullable().optional(),\n version: z.string().nullable().optional(),\n chainId: z.union([z.string(), z.number(), z.bigint()]).nullable().optional(),\n verifyingContract: z.string().nullable().optional(),\n salt: z.union([z.string(), z.instanceof(Uint8Array)]).nullable().optional(),\n})\n/** TypedDataDomain type. */\nexport type TypedDataDomain = z.infer<typeof TypedDataDomainZod>\n\n/** TypedDataFieldZod constant. */\nexport const TypedDataFieldZod = z.object({\n name: z.string(),\n type: z.string(),\n})\n/** TypedDataField type. */\nexport type TypedDataField = z.infer<typeof TypedDataFieldZod>\n\n/** TypedDataTypesZod constant. */\nexport const TypedDataTypesZod = z.record(z.string(), z.array(TypedDataFieldZod))\n/** TypedDataTypes type. */\nexport type TypedDataTypes = z.infer<typeof TypedDataTypesZod>\n\n/** TypedDataValueZod constant. */\nexport const TypedDataValueZod = z.record(z.string(), z.any())\n/** TypedDataValues type. */\nexport type TypedDataValues = z.infer<typeof TypedDataValueZod>\n","import { AsObjectFactory, HashZod } from '@xylabs/sdk-js'\nimport {\n asSchema, isPayloadOfZodType, type Payload,\n} from '@xyo-network/sdk-js'\nimport { z } from 'zod'\n\n/** EIP712SignaturePayloadFieldsZod constant. */\nexport const EIP712SignaturePayloadFieldsZod = z.object({\n address: z.string(),\n hash: HashZod,\n signature: z.string(),\n})\n\n/** EIP712SignaturePayloadFields type. */\nexport type EIP712SignaturePayloadFields = z.infer<typeof EIP712SignaturePayloadFieldsZod>\n\n/** Schema identifier for EIP712SignaturePayload payloads. */\nexport const EIP712SignaturePayloadSchema = asSchema('network.xyo.chains.ethereum.eip712.signature', true)\n/** Schema type for EIP712SignaturePayload payloads. */\nexport type EIP712SignaturePayloadSchema = typeof EIP712SignaturePayloadSchema\n\n/** EIP712SignaturePayload type. */\nexport type EIP712SignaturePayload = Payload<EIP712SignaturePayloadFields, EIP712SignaturePayloadSchema>\n\n/** Type guard that checks if a value is a valid EIP712SignaturePayload. */\nexport const isEIP712SignaturePayload = isPayloadOfZodType<EIP712SignaturePayload>(\n EIP712SignaturePayloadFieldsZod,\n EIP712SignaturePayloadSchema,\n)\n\n/** Converts a value to EIP712SignaturePayload, throwing if invalid. */\nexport const asEIP712SignaturePayload = AsObjectFactory.create(isEIP712SignaturePayload)\n","import { PayloadBuilder } from '@xyo-network/sdk-js'\nimport type { Signer } from 'ethers'\n\nimport {\n type EIP712DataPayload, type EIP712SignaturePayload, EIP712SignaturePayloadSchema,\n} from './Payloads/index.ts'\n\n/** signEIP712Message constant. */\nexport const signEIP712Message = async (signer: Signer, data: EIP712DataPayload): Promise<EIP712SignaturePayload> => {\n const {\n domain, types, values,\n } = data\n const signature = await signer.signTypedData(domain, types, values)\n const hash = await PayloadBuilder.hash(data)\n const address = await signer.getAddress()\n return {\n address, hash, schema: EIP712SignaturePayloadSchema, signature,\n }\n}\n","import { asHash, isUndefined } from '@xylabs/sdk-js'\nimport { PayloadBuilder } from '@xyo-network/sdk-js'\nimport { verifyTypedData } from 'ethers'\n\nimport type { EIP712DataPayload, EIP712SignaturePayload } from './Payloads/index.ts'\n\n/** verifyEIP712Message constant. */\nexport const verifyEIP712Message = async (data: EIP712DataPayload, sig: EIP712SignaturePayload): Promise<boolean> => {\n const {\n address, signature, hash,\n } = sig\n const { schema, ...fields } = data\n const signedHash = asHash(hash)\n // If there is no valid hash in the signature, or it doesn't match the calculated hash, return false\n if (isUndefined(signedHash) || signedHash !== await PayloadBuilder.hash(data)) return false\n // Recover the address from the signature\n const recoveredAddress = verifyTypedData(fields.domain, fields.types, fields.values, signature)\n // Verify it matches the expected address\n return recoveredAddress.toLowerCase() === address.toLowerCase()\n}\n","import type { XL1BlockRangeKey, XL1RangeMultipliers } from '@xyo-network/xl1-protocol-lib'\nimport { asAttoXL1 } from '@xyo-network/xl1-protocol-lib'\n\nimport { XL1_NETWORK_STAKING_GENESIS_PERIOD_END_XL1_BLOCK } from './constants.ts'\n\n/** XL1_NETWORK_STAKING_GENESIS_PERIOD_TOTAL_EARNED_REWARDS constant. */\nexport const XL1_NETWORK_STAKING_GENESIS_PERIOD_TOTAL_EARNED_REWARDS = asAttoXL1(1_343_884_111_859_145_740_576_652n)\n/** XL1_NETWORK_STAKING_GENESIS_PERIOD_TOTAL_BONUS_REWARDS constant. */\nexport const XL1_NETWORK_STAKING_GENESIS_PERIOD_TOTAL_BONUS_REWARDS = asAttoXL1(100_000_000_000_000_000_000_000_000n)\n/** XL1_NETWORK_STAKING_GENESIS_PERIOD_TOTAL_REWARDS constant. */\nexport const XL1_NETWORK_STAKING_GENESIS_PERIOD_TOTAL_REWARDS\n = XL1_NETWORK_STAKING_GENESIS_PERIOD_TOTAL_EARNED_REWARDS + XL1_NETWORK_STAKING_GENESIS_PERIOD_TOTAL_BONUS_REWARDS\n\n/** RewardMultipliers constant. */\nexport const RewardMultipliers: XL1RangeMultipliers = {\n [`0|${XL1_NETWORK_STAKING_GENESIS_PERIOD_END_XL1_BLOCK}` as XL1BlockRangeKey]:\n [XL1_NETWORK_STAKING_GENESIS_PERIOD_TOTAL_BONUS_REWARDS, XL1_NETWORK_STAKING_GENESIS_PERIOD_TOTAL_EARNED_REWARDS],\n}\n","import type { Address } from '@xylabs/sdk-js'\nimport { AsObjectFactory } from '@xylabs/sdk-js'\nimport {\n asSchema, isPayloadOfSchemaType, type Payload,\n} from '@xyo-network/sdk-js'\n\n/** Schema identifier for AddressPair payloads. */\nexport const AddressPairSchema = asSchema('network.xyo.address.pair', true)\n/** Schema type for AddressPair payloads. */\nexport type AddressPairSchema = typeof AddressPairSchema\n\n/** AddressFields interface. */\nexport interface AddressFields {\n addresses: [Address, Address]\n}\n\n/** AddressPairPayload type. */\nexport type AddressPairPayload = Payload<AddressFields, AddressPairSchema>\n\n/**\n * Identity function for determining if an object is an AddressPairPayload\n */\nexport const isAddressPairPayload = isPayloadOfSchemaType<AddressPairPayload>(AddressPairSchema)\n/** Converts a value to AddressPairPayload, throwing if invalid. */\nexport const asAddressPairPayload = AsObjectFactory.create(isAddressPairPayload)\n/** Optionally converts a value to AddressPairPayload if valid. */\nexport const asOptionalAddressPairPayload = AsObjectFactory.createOptional(isAddressPairPayload)\n","import {\n type Address, type Hex, hexToBigInt, toAddress,\n} from '@xylabs/sdk-js'\nimport { span } from '@xylabs/sdk-js'\nimport type { Payload } from '@xyo-network/sdk-js'\nimport type { BaseContext } from '@xyo-network/xl1-protocol-lib'\nimport { isTransfer } from '@xyo-network/xl1-protocol-lib'\n\n/** netBalancesForPayloads constant. */\nexport const netBalancesForPayloads = (context: BaseContext, payloads: Payload[]) => {\n return span('netBalancesForPayloads', () => {\n const balances: Record<Address, bigint> = {}\n for (const payload of payloads) {\n if (isTransfer(payload)) {\n const { from } = payload\n for (let [address, amount] of Object.entries(payload.transfers) as [Address, Hex][]) {\n balances[toAddress(address)] = (balances[toAddress(address)] ?? 0n) + hexToBigInt(amount)\n balances[toAddress(from)] = (balances[toAddress(from)] ?? 0n) - hexToBigInt(amount)\n }\n }\n }\n return balances\n }, context.traceProvider)\n}\n","import {\n type Address, type Hex, hexToBigInt, toAddress,\n} from '@xylabs/sdk-js'\nimport { span } from '@xylabs/sdk-js'\nimport type { Payload } from '@xyo-network/sdk-js'\nimport type { BaseContext } from '@xyo-network/xl1-protocol-lib'\nimport { isTransfer } from '@xyo-network/xl1-protocol-lib'\n\n/** netSchemasForPayloads constant. */\nexport const netSchemasForPayloads = (context: BaseContext, payloads: Payload[]) => {\n return span('netSchemasForPayloads', () => {\n const balances: Record<Address, bigint> = {}\n for (const payload of payloads) {\n if (isTransfer(payload)) {\n const { from } = payload\n for (let [address, amount] of Object.entries(payload.transfers) as [Address, Hex][]) {\n balances[toAddress(address)] = (balances[toAddress(address)] ?? 0n) + hexToBigInt(amount)\n balances[toAddress(from)] = (balances[toAddress(from)] ?? 0n) - hexToBigInt(amount)\n }\n }\n }\n return balances\n }, context.traceProvider)\n}\n","import {\n type Address, type Hex, hexToBigInt,\n} from '@xylabs/sdk-js'\nimport { span } from '@xylabs/sdk-js'\nimport type { Payload } from '@xyo-network/sdk-js'\nimport type { BaseContext } from '@xyo-network/xl1-protocol-lib'\nimport { isTransfer } from '@xyo-network/xl1-protocol-lib'\n\n// the net transfer amounts for the specified accounts only\n/** NetTransfersForPayloads helper function. */\nexport function netTransfersForPayloads(context: BaseContext, payloads: Payload[]): Record<Address, Record<Address, bigint>> {\n return span('netTransfersForPayloads', () => {\n const transfers: Record<Address, Record<Address, bigint>> = {}\n for (const payload of payloads) {\n if (isTransfer(payload)) {\n const { from } = payload\n transfers[from] = transfers[from] ?? {}\n for (let [to, amount] of Object.entries(payload.transfers) as [Address, Hex][]) {\n transfers[to] = transfers[to] ?? {}\n transfers[to][from] = (transfers[to][from] ?? 0n) + hexToBigInt(amount)\n transfers[from][to] = (transfers[from][to] ?? 0n) - hexToBigInt(amount)\n }\n }\n }\n return transfers\n }, context.traceProvider)\n}\n","import type {\n StepIdentity,\n XL1BlockRange,\n} from '@xyo-network/xl1-protocol-lib'\nimport { asXL1BlockNumber, StepSizes } from '@xyo-network/xl1-protocol-lib'\n\n/** BlockRangeSteps helper function. */\nexport function blockRangeSteps(range: XL1BlockRange, steps: number[]): StepIdentity[] {\n const result: StepIdentity[] = []\n for (const step of steps) {\n const stepSize = StepSizes[step]\n // we add stepSize twice to get to the start of the next full step\n const startOfFirstStepCandidate = range[0] - (range[0] % stepSize) + stepSize\n const startOfFirstStep = asXL1BlockNumber(\n startOfFirstStepCandidate,\n { name: 'blockRangeSteps' },\n )\n for (let block = startOfFirstStep; block <= range[1]; block = asXL1BlockNumber(block + stepSize, { name: 'blockRangeSteps' })) {\n result.push({ step, block })\n }\n }\n return result\n}\n","import { isDefined, isFalsy } from '@xylabs/sdk-js'\nimport type {\n BlockViewer,\n HydratedBlock, TimeDurations, XL1BlockNumber, XL1BlockRange, XL1BlockRate,\n} from '@xyo-network/xl1-protocol-lib'\nimport { asXL1BlockRange } from '@xyo-network/xl1-protocol-lib'\n\nimport { rateMultipliers, timeDurations } from './timeHelpers.ts'\n\n/** blockRate constant. */\nexport const blockRate = (\n startBlock: HydratedBlock,\n endBlock: HydratedBlock,\n timeUnit?: keyof TimeDurations,\n): XL1BlockRate => {\n const startingBlock = startBlock[0]\n const endingBlock = endBlock[0]\n\n const heightDifference = endingBlock.block - startingBlock.block\n const timeDifference = endingBlock.$epoch - startingBlock.$epoch\n\n if (timeDifference === 0) {\n throw new Error('Time difference must be greater than 0')\n }\n\n const rate = heightDifference / timeDifference\n\n const timeUnitValue = isDefined(timeUnit) ? timeUnit : 'millis'\n const returnedTimeDifference = isDefined(timeUnit) ? timeDurations(timeDifference)[timeUnit] : timeDifference\n const timePerBlock = returnedTimeDifference / heightDifference\n\n return {\n range: asXL1BlockRange([startingBlock.block, endingBlock.block], true),\n span: heightDifference,\n rate: isDefined(timeUnit) ? rate * rateMultipliers[timeUnit] : rate,\n timeUnit: timeUnitValue,\n timeDifference: returnedTimeDifference,\n timePerBlock,\n }\n}\n\n/** getBlockRateBlocks constant. */\nexport const getBlockRateBlocks = async (\n viewer: BlockViewer,\n startBlockHeight: XL1BlockNumber,\n endBlockHeight: XL1BlockNumber,\n): Promise<{ endingBlock: HydratedBlock; startingBlock: HydratedBlock }> => {\n if (endBlockHeight <= startBlockHeight) {\n console.error('startBlockHeight', startBlockHeight)\n console.error('endBlockHeight', endBlockHeight)\n throw new Error('End block height must be greater than start block height')\n }\n\n const startingBlock = await viewer.blockByNumber(startBlockHeight)\n const endingBlock = await viewer.blockByNumber(endBlockHeight)\n\n if (isFalsy(startingBlock) || isFalsy(endingBlock)) {\n throw new Error('Could not retrieve blocks for speed calculation')\n }\n\n return { startingBlock, endingBlock }\n}\n\n/** calculateBlockRate constant. */\nexport const calculateBlockRate = async (\n viewer: BlockViewer,\n range: XL1BlockRange,\n timeUnit?: keyof TimeDurations,\n): Promise<XL1BlockRate> => {\n const [startBlockHeight, endBlockHeight] = range\n const { startingBlock, endingBlock } = await getBlockRateBlocks(\n viewer,\n startBlockHeight,\n endBlockHeight,\n )\n return blockRate(startingBlock, endingBlock, timeUnit)\n}\n","import { assertEx, isDefined } from '@xylabs/sdk-js'\nimport type { SingleTimeConfig, TimeDurations } from '@xyo-network/xl1-protocol-lib'\n\n/** rateMultipliers constant. */\nexport const rateMultipliers: TimeDurations = {\n millis: 1,\n seconds: 1000,\n minutes: 1000 * 60,\n hours: 1000 * 60 * 60,\n days: 1000 * 60 * 60 * 24,\n weeks: 1000 * 60 * 60 * 24 * 7,\n}\n\n/** timeDurations constant. */\nexport const timeDurations = (timeInMs: number): TimeDurations => ({\n millis: timeInMs,\n seconds: timeInMs / 1000,\n minutes: timeInMs / (1000 * 60),\n hours: timeInMs / (1000 * 60 * 60),\n days: timeInMs / (1000 * 60 * 60 * 24),\n weeks: timeInMs / (1000 * 60 * 60 * 24 * 7),\n})\n\n/** getTimeConfigInMilliseconds constant. */\nexport const getTimeConfigInMilliseconds = (timeConfig: SingleTimeConfig): number => {\n const assertedTimeConfig = assertEx(isDefined(timeConfig) ? timeConfig : undefined, () => 'Time configuration must be provided')\n // Convert all time units to milliseconds\n let totalMilliseconds = 0\n\n if ('years' in assertedTimeConfig) {\n totalMilliseconds += assertedTimeConfig.years * 31_536_000_000 // 1 year = 31,536,000,000 milliseconds\n return totalMilliseconds\n }\n\n if ('months' in assertedTimeConfig) {\n totalMilliseconds += assertedTimeConfig.months * 2_592_000_000 // 1 month = 2,592,000,000 milliseconds\n return totalMilliseconds\n }\n\n if ('weeks' in assertedTimeConfig) {\n totalMilliseconds += assertedTimeConfig.weeks * 604_800_000 // 1 week = 604,800,000 milliseconds\n return totalMilliseconds\n }\n\n if ('days' in assertedTimeConfig) {\n totalMilliseconds += assertedTimeConfig.days * 86_400_000 // 1 day = 86,400,000 milliseconds\n return totalMilliseconds\n }\n\n if ('hours' in assertedTimeConfig) {\n totalMilliseconds += assertedTimeConfig.hours * 3_600_000 // 1 hour = 3,600,000 milliseconds\n return totalMilliseconds\n }\n\n if ('minutes' in assertedTimeConfig) {\n totalMilliseconds += assertedTimeConfig.minutes * 60_000 // 1 minute = 60,000 milliseconds\n return totalMilliseconds\n }\n\n return totalMilliseconds\n}\n","import { assertEx } from '@xylabs/sdk-js'\nimport type {\n BlockViewer,\n TimeDurations, XL1BlockNumber, XL1BlockRate,\n} from '@xyo-network/xl1-protocol-lib'\nimport {\n asXL1BlockRange, isValidStep, StepSizes,\n} from '@xyo-network/xl1-protocol-lib'\n\nimport { calculateBlockRate } from './blockRate.ts'\n\n/** stepRate constant. */\nexport const stepRate = async (\n viewer: BlockViewer,\n start: XL1BlockNumber,\n step: typeof StepSizes[number],\n count = 1,\n timeUnit?: keyof TimeDurations,\n): Promise<XL1BlockRate> => {\n const end = start + step * count\n const range = asXL1BlockRange([start, end], true)\n\n return await calculateBlockRate(viewer, range, timeUnit)\n}\n\n/** calculateStepSizeRate constant. */\nexport const calculateStepSizeRate = async (\n viewer: BlockViewer,\n start: XL1BlockNumber,\n stepIndex: number,\n count = 1,\n timeUnit?: keyof TimeDurations,\n) => {\n assertEx(isValidStep(stepIndex), () => `Invalid step index: ${stepIndex}`)\n const step = StepSizes[stepIndex]\n return await stepRate(viewer, start, step, count, timeUnit)\n}\n","import {\n assertEx, isDefined, isDefinedNotNull,\n} from '@xylabs/sdk-js'\nimport type {\n BlockBoundWitness,\n BlockViewer,\n SingleTimeConfig,\n TimeDurations,\n XL1BlockNumber,\n XL1BlockRate,\n} from '@xyo-network/xl1-protocol-lib'\nimport { asXL1BlockNumber, asXL1BlockRange } from '@xyo-network/xl1-protocol-lib'\n\nimport { calculateBlockRate } from './blockRate.ts'\nimport { getTimeConfigInMilliseconds } from './timeHelpers.ts'\n\n/** DEFAULT_TOLERANCE_MS constant. */\nexport const DEFAULT_TOLERANCE_MS = 30_000 // 30 seconds\n/** DEFAULT_MAX_ATTEMPTS constant. */\nexport const DEFAULT_MAX_ATTEMPTS = 10\n\n/** calculateTimeRate constant. */\nexport const calculateTimeRate = async (\n viewer: BlockViewer,\n timeConfig: SingleTimeConfig,\n startBlockNumber?: XL1BlockNumber,\n timeUnit?: keyof TimeDurations,\n // default tolerance of 30 seconds to cut down on iterations\n toleranceMs = DEFAULT_TOLERANCE_MS,\n // maximum recursive attempts to prevent infinite loops\n maxAttempts = DEFAULT_MAX_ATTEMPTS,\n): Promise<XL1BlockRate> => {\n // check the time config has only one key\n assertEx(Object.keys(timeConfig ?? {}).length === 1, () => 'Only one time unit should be specified in timeConfig')\n\n // resolve the starting block\n const startBlock = isDefinedNotNull(startBlockNumber) ? await viewer.blockByNumber(startBlockNumber) : null\n const resolvedStartBlock = isDefinedNotNull(startBlock)\n ? startBlock[0]\n : (await viewer.currentBlock())[0]\n\n const timeInMilliseconds = getTimeConfigInMilliseconds(timeConfig)\n assertEx(timeInMilliseconds > 0, () => 'Time duration must be greater than zero')\n\n // Estimate blocks per milliseconds (bpm) based on average block time\n const blocksPerMillisecondRate = 1 / (12 * 1000) // Approximate average block time of 12 seconds\n\n // Calculate the number of blocks in the given time duration\n const initialBlocksInDuration = Math.floor(blocksPerMillisecondRate * timeInMilliseconds)\n\n // Recursively find the proper end block\n const endBlockNumber = await findEndBlockRecursive(\n viewer,\n resolvedStartBlock,\n timeInMilliseconds,\n initialBlocksInDuration,\n toleranceMs,\n maxAttempts,\n )\n\n return await calculateBlockRate(\n viewer,\n asXL1BlockRange([endBlockNumber, resolvedStartBlock.block], true),\n timeUnit,\n )\n}\n\nconst findEndBlockRecursive = async (\n viewer: BlockViewer,\n startBlock: BlockBoundWitness,\n targetTimeMs: number,\n estimatedBlocksBack: number,\n toleranceMs: number,\n attemptsRemaining: number,\n): Promise<XL1BlockNumber> => {\n console.log(`Attempts remaining: ${attemptsRemaining}, Estimated blocks back: ${estimatedBlocksBack}`)\n assertEx(attemptsRemaining >= 0, () => 'Maximum attempts reached while searching for end block')\n\n const startBlockEpoch = startBlock.$epoch\n const estimatedEndBlockNumber = asXL1BlockNumber(startBlock.block - estimatedBlocksBack, true)\n if (estimatedEndBlockNumber < 0) {\n throw new Error('Estimated end block number is less than zero')\n }\n\n // Fetch the estimated end block\n const endBlock = await viewer.blockByNumber(estimatedEndBlockNumber)\n const resolvedEndBlock = assertEx(\n isDefined(endBlock?.[0]) ? endBlock[0] : undefined,\n () => `Could not retrieve block ${estimatedEndBlockNumber} for time rate calculation`,\n )\n\n const endBlockEpoch = resolvedEndBlock.$epoch\n\n // Guard: reject blocks with missing or non-finite $epoch values\n if (!Number.isFinite(startBlockEpoch) || !Number.isFinite(endBlockEpoch)) {\n throw new TypeError('Block has missing or invalid $epoch')\n }\n\n const actualTimeDifference = startBlockEpoch - endBlockEpoch\n\n // Guard: identical timestamps would cause division by zero / Infinity\n if (actualTimeDifference === 0) {\n throw new Error('Start and end blocks have identical timestamps')\n }\n\n // Check if we're within tolerance\n const timeDelta = Math.abs(actualTimeDifference - targetTimeMs)\n if (timeDelta <= toleranceMs) {\n return resolvedEndBlock.block\n }\n\n // Calculate adjustment factor and recursively search\n let adjustedBlocksBack: number\n if (actualTimeDifference < targetTimeMs) {\n // Need to go further back\n const adjustmentFactor = targetTimeMs / actualTimeDifference\n adjustedBlocksBack = Math.floor(estimatedBlocksBack * adjustmentFactor)\n } else {\n // Need to come forward\n const adjustmentFactor = actualTimeDifference / targetTimeMs\n adjustedBlocksBack = Math.floor(estimatedBlocksBack / adjustmentFactor)\n }\n // Ensure we adjust by at least 1 block to cover divide by zero cases and\n // prevent infinite loops\n adjustedBlocksBack = (Number.isFinite(adjustedBlocksBack) && adjustedBlocksBack >= 1) ? adjustedBlocksBack : 1\n\n return await findEndBlockRecursive(\n viewer,\n startBlock,\n targetTimeMs,\n adjustedBlocksBack,\n toleranceMs,\n attemptsRemaining - 1,\n )\n}\n","import {\n assertEx, type Hash, isDefined, isNull,\n spanRootAsync,\n} from '@xylabs/sdk-js'\nimport type {\n BaseContext, BlockViewer, SignedHydratedBlockWithHashMeta,\n} from '@xyo-network/xl1-protocol-lib'\n\n/**\n * Constructs a bounded, contiguous canonical chain ending at the current head.\n * @param blockViewer The BlockViewer to fetch blocks from\n * @param maxWindowSize The maximum size of the windowed chain\n * @param previousChain An optional previous chain to build upon\n * @returns A promise that resolves to the windowed chain of blocks\n */\nexport async function getWindowedChain(\n context: BaseContext,\n blockViewer: BlockViewer,\n maxWindowSize: number,\n previousChain: SignedHydratedBlockWithHashMeta[] = [],\n):\nPromise<SignedHydratedBlockWithHashMeta[]> {\n return await spanRootAsync('getWindowedChain', async () => {\n const newChain: SignedHydratedBlockWithHashMeta[] = []\n const previousChainByHash = new Map<Hash, SignedHydratedBlockWithHashMeta>(previousChain.map(block => [block[0]._hash, block]))\n const head = await blockViewer.currentBlock()\n let currentBlock: SignedHydratedBlockWithHashMeta | null = head\n console.log('[getWindowedChain] Current Block:', currentBlock?.[0]._hash)\n while (currentBlock !== null && newChain.length < maxWindowSize) {\n const currentBlockNumber = currentBlock[0].block\n const nextBlock = newChain[0]\n if (isDefined(nextBlock)) {\n const nextBlockNumber = nextBlock[0].block\n assertEx(\n currentBlockNumber === nextBlockNumber - 1,\n () => `[getWindowedChain] Non-monotonic block sequence detected: current=${currentBlockNumber}, next=${nextBlockNumber}`,\n )\n }\n assertEx(\n currentBlockNumber <= head[0].block,\n () => `[getWindowedChain] Current block number (${currentBlockNumber}) exceeds head block number (${head[0].block})`,\n )\n newChain.unshift(currentBlock)\n const previousBlockHash: Hash | null = currentBlock[0].previous\n if (isNull(previousBlockHash)) break\n currentBlock = previousChainByHash.get(previousBlockHash) ?? await blockViewer.blockByHash(previousBlockHash)\n }\n return newChain\n }, context)\n}\n","import type { Address } from '@xylabs/sdk-js'\nimport {\n assertEx, exists, toAddress,\n} from '@xylabs/sdk-js'\nimport type {\n BlockViewer, CachingContext, StepIdentity,\n} from '@xyo-network/xl1-protocol-lib'\nimport {\n asTransfer, isTransfer, XYO_STEP_REWARD_ADDRESS,\n} from '@xyo-network/xl1-protocol-lib'\n\nimport { mergeTransfers } from '../../payload/index.ts'\nimport { stepTransferIndex } from '../../step/index.ts'\nimport { stepRewardBlock } from './stepRewardBlock.ts'\n\n/** ChainStepRewardAddress helper function. */\nexport async function chainStepRewardAddress(context: CachingContext, blockViewer: BlockViewer, { block, step }: StepIdentity): Promise<Address> {\n const hydratedBlock = await stepRewardBlock(context, blockViewer, { block, step })\n const [transferIndex, transferCount] = stepTransferIndex(block, step)\n const [blockBw, payloads] = hydratedBlock\n\n const transfersFromPool = payloads.filter(isTransfer).map(p => asTransfer(p)).filter(exists).filter(t => t.from === XYO_STEP_REWARD_ADDRESS)\n const fromEntries = Object.entries(mergeTransfers(transfersFromPool)[XYO_STEP_REWARD_ADDRESS])\n const sortedTransferAmounts = (fromEntries).toSorted(([,a], [,b]) => a > b ? -1 : a < b ? 1 : 0)\n assertEx(\n sortedTransferAmounts.length === transferCount,\n () => `Step Transfers mismatch ${block} (${blockBw._hash}) [${sortedTransferAmounts.length} - ${transferCount}]`,\n )\n return toAddress(sortedTransferAmounts[transferIndex][0])\n}\n","import type { Address } from '@xylabs/sdk-js'\nimport { hexToBigInt, toAddress } from '@xylabs/sdk-js'\nimport type { Transfer } from '@xyo-network/xl1-protocol-lib'\n\n/** MergeTransfers helper function. */\nexport function mergeTransfers(transfers: Transfer[]): Record<Address, Record<Address, bigint>> {\n const result: Record<Address, Record<Address, bigint>> = {}\n for (const transfer of transfers) {\n result[transfer.from] = result[transfer.from] ?? {}\n for (const [to, value] of Object.entries(transfer.transfers)) {\n const typedTo = toAddress(to)\n result[transfer.from][typedTo] = (result[transfer.from][typedTo] ?? 0n) + (hexToBigInt(value))\n }\n }\n return result\n}\n","import { type Address, toAddress } from '@xylabs/sdk-js'\nimport { type StepIdentity, StepSizes } from '@xyo-network/xl1-protocol-lib'\nimport { keccak256 } from 'ethers'\n\n/** CompletedStepRewardAddress helper function. */\nexport function completedStepRewardAddress({ block, step }: StepIdentity): Address {\n const resolvedStepSize = step < StepSizes.length ? StepSizes[step] : step\n const addressKey = new TextEncoder().encode(`${block}|${resolvedStepSize}`)\n return toAddress(keccak256(addressKey).slice(-40), { prefix: false })\n}\n","import { type Address, toAddress } from '@xylabs/sdk-js'\nimport { isDefined } from '@xylabs/sdk-js'\nimport { keccak256 } from 'ethers'\n\n/** DerivedReceiveAddress helper function. */\nexport function derivedReceiveAddress(address: Address, scope?: string): Address {\n const addressKey = new TextEncoder().encode(isDefined(scope) ? `${scope}|${address}` : address)\n return toAddress(keccak256(addressKey).slice(-40), { prefix: false })\n}\n","import type { StepIdentity, XL1BlockRange } from '@xyo-network/xl1-protocol-lib'\nimport { asXL1BlockRange, StepSizes } from '@xyo-network/xl1-protocol-lib'\n\n/** StepBlockRange helper function. */\nexport function stepBlockRange({ block, step }: StepIdentity): XL1BlockRange {\n const stepSize = StepSizes[step]\n const start = block - stepSize\n return asXL1BlockRange([start, start + stepSize - 1], { name: 'stepBlockRange' })\n}\n","import { assertEx } from '@xylabs/sdk-js'\nimport { StepSizes } from '@xyo-network/xl1-protocol-lib'\n\n/** StepTransferIndex helper function. */\nexport function stepTransferIndex(block: number, step: number) {\n let rewardTransferCount = 0\n let rewardTransferIndex = -1\n for (let i = 3; i < StepSizes.length; i++) {\n const stepSize = StepSizes[i]\n if (block % stepSize === 0) {\n if (stepSize === StepSizes[step]) {\n rewardTransferIndex = rewardTransferCount\n }\n rewardTransferCount++\n }\n }\n assertEx(rewardTransferIndex >= 0, () => `Could not find step size for step ${step} at block ${block}`)\n return [rewardTransferIndex, rewardTransferCount]\n}\n","import { assertEx } from '@xylabs/sdk-js'\nimport type {\n BlockViewer,\n CachingContext,\n HydratedBlockWithHashMeta, StepIdentity,\n} from '@xyo-network/xl1-protocol-lib'\nimport { StepSizes } from '@xyo-network/xl1-protocol-lib'\n\n/** StepRewardBlock helper function. */\nexport async function stepRewardBlock(context: CachingContext, blockViewer: BlockViewer, { block, step }: StepIdentity): Promise<HydratedBlockWithHashMeta> {\n assertEx((block % StepSizes[step]) === 0, () => `Block must be the first block of the step [${StepSizes[step]}], got ${block}`)\n return assertEx(await blockViewer.blockByNumber(block), () => `Could not find block for block number ${block}`)\n}\n","import { assertEx, isDefined } from '@xylabs/sdk-js'\nimport type {\n AttoXL1, BlockViewer, CachingContext, StepIdentity, XL1BlockRange, XL1RangeMultipliers,\n} from '@xyo-network/xl1-protocol-lib'\nimport {\n asAttoXL1, asXL1BlockRange, isTransfer,\n XYO_STEP_REWARD_ADDRESS,\n} from '@xyo-network/xl1-protocol-lib'\n\nimport { withContextCacheResponse } from '../../../ChainContextHelpers.ts'\nimport { netTransfersForPayloads } from '../../../payloads/index.ts'\nimport { stepBlockRange, stepTransferIndex } from '../../step/index.ts'\nimport { stepRewardBlock } from './stepRewardBlock.ts'\n\nfunction stepInRange(step: StepIdentity, range: XL1BlockRange): boolean {\n const stepRange = stepBlockRange(step)\n return ((stepRange[0] >= range[0]) && (stepRange[1] <= range[1]))\n}\n\n/** StepRewardTotal helper function. */\nexport async function stepRewardTotal(context: CachingContext, blockViewer: BlockViewer, { block, step }: StepIdentity, multipliers: XL1RangeMultipliers): Promise<AttoXL1> {\n const cacheKey = `${block}|${step}|${isDefined(multipliers)}`\n return await withContextCacheResponse(context, 'stepRewardTotal', cacheKey, async () => {\n const [blockBw, payloads] = await stepRewardBlock(context, blockViewer, { block, step })\n assertEx(blockBw.block === block, () => `Block Mismatch: expected ${block}, got ${blockBw.block}`)\n const [transferIndex] = stepTransferIndex(block, step)\n const stepTransfer = assertEx(\n payloads.find(p => isTransfer(p) && p.from === XYO_STEP_REWARD_ADDRESS),\n () => `No step transfer found for step ${step} at block ${block} (${blockBw._hash})`,\n )\n const rewards = assertEx(\n netTransfersForPayloads(context, [stepTransfer])[XYO_STEP_REWARD_ADDRESS],\n () => `No rewards found for step reward address ${XYO_STEP_REWARD_ADDRESS} at block ${block} (${blockBw._hash})`,\n )\n const sortedTransfers = (Object.entries(rewards)).toSorted(([,a], [,b]) => a > b ? -1 : a < b ? 1 : 0)\n let result = asAttoXL1(sortedTransfers[transferIndex][1] * -1n)\n for (const [rangeKey, [numerator, denominator]] of Object.entries(multipliers)) {\n const rangeParts = rangeKey.split('|').map(Number)\n const range: XL1BlockRange = asXL1BlockRange([rangeParts[0], rangeParts[1]], { name: 'stepRewardTotal' })\n if (stepInRange({ block, step }, range)) {\n result = asAttoXL1(result + result * numerator / denominator)\n }\n }\n return result\n })\n}\n","import type {\n AttoXL1, BlockViewer, CachingContext, StepIdentity, XL1BlockRange,\n XL1RangeMultipliers,\n} from '@xyo-network/xl1-protocol-lib'\nimport { asAttoXL1, asXL1BlockRange } from '@xyo-network/xl1-protocol-lib'\n\nimport { XL1_NETWORK_STAKING_GENESIS_PERIOD_END_XL1_BLOCK } from '../../../constants.ts'\nimport { blockRangeSteps } from '../../block/index.ts'\nimport { stepRewardTotal } from './stepRewardTotal.ts'\n\n/** StepsRewardTotalGenesisPeriod helper function. */\nexport async function stepsRewardTotalGenesisPeriod(context: CachingContext, blockViewer: BlockViewer, multipliers: XL1RangeMultipliers, stepSizes?: number[]): Promise<AttoXL1> {\n const range = asXL1BlockRange([0, XL1_NETWORK_STAKING_GENESIS_PERIOD_END_XL1_BLOCK], { name: 'stepsRewardTotalGenesisPeriod' })\n return await stepsRewardTotalRange(context, blockViewer, range, stepSizes, multipliers)\n}\n\n/** StepsRewardTotalRange helper function. */\nexport async function stepsRewardTotalRange(\n context: CachingContext,\n blockViewer: BlockViewer,\n range: XL1BlockRange,\n stepSizes: number[] = [3, 4, 5, 6],\n multipliers: XL1RangeMultipliers,\n): Promise<AttoXL1> {\n const steps = blockRangeSteps(range, stepSizes)\n return await stepsRewardTotal(context, blockViewer, steps, multipliers)\n}\n\n/** StepsRewardTotal helper function. */\nexport async function stepsRewardTotal(context: CachingContext, blockViewer: BlockViewer, steps: StepIdentity[], multipliers: XL1RangeMultipliers): Promise<AttoXL1> {\n let totalRewards = 0n\n for (const step of steps) {\n const stepTotal = await stepRewardTotal(context, blockViewer, step, multipliers)\n totalRewards += stepTotal\n }\n return asAttoXL1(totalRewards)\n}\n","import { assertEx, isArray } from '@xylabs/sdk-js'\nimport type {\n BlockNumber, BlockViewer, CachingContext, XL1BlockNumber,\n} from '@xyo-network/xl1-protocol-lib'\nimport {\n asBlockNumber, asTimePayload, isTimePayload,\n} from '@xyo-network/xl1-protocol-lib'\n\nimport { withContextCacheResponse } from '../../../ChainContextHelpers.ts'\n\nconst functionName = 'externalBlockNumberFromXL1BlockNumber' as const\n\n/** ExternalBlockNumberFromXL1BlockNumber helper function. */\nexport async function externalBlockNumberFromXL1BlockNumber(\n context: CachingContext,\n blockViewer: BlockViewer,\n xl1BlockNumber: XL1BlockNumber,\n externalTimeName: 'ethereum' | 'epoch',\n externalGenesisTime?: BlockNumber,\n): Promise<BlockNumber> {\n const cacheKey = `${xl1BlockNumber}-${externalTimeName}-${externalGenesisTime ?? 'default'}`\n return await withContextCacheResponse(context, functionName, cacheKey, async () => {\n const [, payloads = []] = await blockViewer.blockByNumber(xl1BlockNumber) ?? []\n assertEx(isArray(payloads))\n const timePayload = asTimePayload(payloads.find(isTimePayload))\n // the default here is the block number we know where the xl1 chain started running (first external staking - 1)\n return asBlockNumber(\n timePayload?.[externalTimeName] ?? externalGenesisTime ?? 23_372_716,\n { name: functionName },\n ) // default is xl1 mainnet genesis time\n })\n}\n","import type {\n BlockRange, BlockViewer, CachingContext, XL1BlockRange,\n} from '@xyo-network/xl1-protocol-lib'\n\nimport { externalBlockNumberFromXL1BlockNumber } from './externalBlockNumberFromXL1BlockNumber.ts'\n\n/** ExternalBlockRangeFromXL1BlockRange helper function. */\nexport async function externalBlockRangeFromXL1BlockRange(\n context: CachingContext,\n blockViewer: BlockViewer,\n xl1BlockRange: XL1BlockRange,\n externalTimeName: 'ethereum' = 'ethereum',\n): Promise<BlockRange> {\n const start = await externalBlockNumberFromXL1BlockNumber(context, blockViewer, xl1BlockRange[0], externalTimeName)\n const end = await externalBlockNumberFromXL1BlockNumber(context, blockViewer, xl1BlockRange[1], externalTimeName)\n return [start, end]\n}\n","import type {\n BlockRange, BlockViewer, CachingContext, StepIdentity,\n} from '@xyo-network/xl1-protocol-lib'\n\nimport { toStepIdentityString } from '../../../block/index.ts'\nimport { withContextCacheResponse } from '../../../ChainContextHelpers.ts'\nimport { stepBlockRange } from '../../step/index.ts'\nimport { externalBlockRangeFromXL1BlockRange } from './externalBlockRangeFromXL1BlockRange.ts'\n\n/** ExternalBlockRangeFromStep helper function. */\nexport async function externalBlockRangeFromStep(\n context: CachingContext,\n blockViewer: BlockViewer,\n stepIdentity: StepIdentity,\n): Promise<BlockRange> {\n const cacheKey = toStepIdentityString(stepIdentity)\n return await withContextCacheResponse(context, 'externalBlockRangeFromStep', cacheKey, async () => {\n const xl1BlockRange = stepBlockRange(stepIdentity)\n return await externalBlockRangeFromXL1BlockRange(context, blockViewer, xl1BlockRange)\n })\n}\n","import type { Hash } from '@xylabs/sdk-js'\nimport { isUndefined } from '@xylabs/sdk-js'\nimport type { Payload, WithHashMeta } from '@xyo-network/sdk-js'\nimport { isAnyPayload, PayloadBuilder } from '@xyo-network/sdk-js'\nimport type { DataLakeViewer } from '@xyo-network/xl1-protocol-lib'\n\n/** AddDataLakePayloadsToPayloads helper function. */\nexport async function addDataLakePayloadsToPayloads<T extends WithHashMeta<Payload>>(\n hashes: Hash[],\n payloads: T[],\n dataLakeViewer?: DataLakeViewer,\n): Promise<[\n /* Updated payloads with hash metadata */\n T[],\n /* Hashes of the newly added payloads */\n Hash[],\n]> {\n if (isUndefined(dataLakeViewer)) return [payloads, []]\n const missingPayloadHashes = hashes.filter(hash => !payloads.some(p => p._hash === hash))\n const payloadsFromDataLake = await PayloadBuilder.addHashMeta(\n await PayloadBuilder.addHashMeta((await dataLakeViewer.get(missingPayloadHashes)).filter(isAnyPayload)),\n )\n return [[...payloads, ...payloadsFromDataLake] as T[], payloadsFromDataLake.map(p => p._hash)]\n}\n","import type { Hash } from '@xylabs/sdk-js'\nimport type { DataLakeViewer, HydratedBoundWitnessWithHashMeta } from '@xyo-network/xl1-protocol-lib'\n\nimport { addDataLakePayloadsToPayloads } from './addDataLakePayloadsToPayloads.ts'\n\n/** AddDataLakePayloads helper function. */\nexport async function addDataLakePayloads<T extends HydratedBoundWitnessWithHashMeta>(\n [boundWitness, payloads]: T,\n dataLakeViewer?: DataLakeViewer,\n): Promise<[T, Hash[]]> {\n const [updatedPayloads, foundHashes] = await addDataLakePayloadsToPayloads(boundWitness.payload_hashes, payloads, dataLakeViewer)\n return [\n [\n boundWitness,\n updatedPayloads,\n ] as T,\n foundHashes]\n}\n","import { isDefined } from '@xylabs/sdk-js'\nimport type { SyncIterableMap } from '@xyo-network/xl1-protocol-lib'\n\n/** MapToMapType helper function. */\nexport function mapToMapType<K extends {}, V extends {}>(map: Map<K, V> | SyncIterableMap<K, V>): SyncIterableMap<K, V> {\n return {\n get: (key: K) => map.get(key),\n has: (key: K) => map.has(key),\n set: (key: K, value: V) => {\n map.set(key, value)\n },\n setMany: (entries: [K, V][]) => {\n for (const [key, value] of entries) {\n map.set(key, value)\n }\n },\n delete: (key: K) => map.delete(key),\n clear: () => map.clear(),\n getMany: (keys: K[]) => {\n const result: V[] = []\n for (const key of keys) {\n const value = map.get(key)\n if (isDefined(value)) {\n result.push(value)\n }\n }\n return result\n },\n [Symbol.iterator]: function* (): Iterator<[K, V]> {\n for (const entry of map) {\n yield entry\n }\n },\n }\n}\n","import type { Hash } from '@xylabs/sdk-js'\nimport { isDefined } from '@xylabs/sdk-js'\nimport type {\n ReadArchivist, ReadWriteArchivist,\n WithStorageMeta,\n} from '@xyo-network/sdk-js'\nimport type { PayloadMap, PayloadMapRead } from '@xyo-network/xl1-protocol-lib'\n\nimport { isReadArchivist, isReadWriteArchivist } from '../block/index.ts'\n\n/** ReadPayloadMapFromStore helper function. */\nexport function readPayloadMapFromStore(store: ReadArchivist | PayloadMapRead): PayloadMapRead {\n if (isReadArchivist(store)) {\n return {\n get: async (hash: Hash) => {\n return (await store.get([hash]))[0]\n },\n getMany: async (hashes: Hash[]) => {\n return (await store.get(hashes))\n },\n has: async (hash: Hash) => {\n return isDefined((await store.get([hash]))[0])\n },\n }\n }\n return store\n}\n\n/** PayloadMapFromStore helper function. */\nexport function payloadMapFromStore(store: ReadWriteArchivist | PayloadMap): PayloadMap {\n if (isReadWriteArchivist(store)) {\n return {\n get: async (hash: Hash) => {\n return (await store.get([hash]))[0]\n },\n getMany: async (hashes: Hash[]) => {\n return (await store.get(hashes))\n },\n has: async (hash: Hash) => {\n return isDefined((await store.get([hash]))[0])\n },\n clear: async () => {\n return await store.clear()\n },\n delete: async (id: Hash) => {\n await store.delete([id])\n return true\n },\n set: async (_id: Hash, data: WithStorageMeta) => {\n await store.insert([data])\n },\n setMany: async (entries: [Hash, WithStorageMeta][]) => {\n await store.insert(entries.map(e => e[1]))\n },\n } satisfies PayloadMap<WithStorageMeta>\n }\n return store\n}\n","import {\n asAttoXL1, XL1_REWARDS_BLOCKS_PER_STEP, XL1_REWARDS_CREATOR_REWARD,\n XL1_REWARDS_MIN_BLOCK_REWARD, XL1_REWARDS_STARTING_REWARD, XL1_REWARDS_STEP_FACTOR_DENOMINATOR,\n XL1_REWARDS_STEP_FACTOR_NUMERATOR, type XL1BlockNumber,\n} from '@xyo-network/xl1-protocol-lib'\n\n/** RewardFromBlockNumber helper function. */\nexport function rewardFromBlockNumber(blockNumber: XL1BlockNumber) {\n if (blockNumber === 0) {\n return XL1_REWARDS_CREATOR_REWARD\n }\n const step = Math.floor((blockNumber + XL1_REWARDS_BLOCKS_PER_STEP) / XL1_REWARDS_BLOCKS_PER_STEP)\n const stepExp = BigInt(step - 1)\n const poweredNumerator = stepExp > 0 ? XL1_REWARDS_STEP_FACTOR_NUMERATOR ** stepExp : 1n\n const poweredDenominator = stepExp > 0 ? XL1_REWARDS_STEP_FACTOR_DENOMINATOR ** stepExp : 1n\n let reward = (XL1_REWARDS_STARTING_REWARD * poweredNumerator) / poweredDenominator\n // eslint-disable-next-line unicorn/prefer-math-min-max\n return asAttoXL1((reward < XL1_REWARDS_MIN_BLOCK_REWARD) ? XL1_REWARDS_MIN_BLOCK_REWARD : reward)\n}\n","import type {\n BlockViewer, CachingContext, StakeEventsViewer, StepIdentity,\n} from '@xyo-network/xl1-protocol-lib'\nimport { XYO_NETWORK_STAKING_ADDRESS } from '@xyo-network/xl1-protocol-lib'\n\nimport { externalBlockRangeFromStep } from '../chain/index.ts'\nimport { weightedStakeForRangeByPosition } from '../stake/index.ts'\n\n/** NetworkStakeStepRewardPositionWeight helper function. */\nexport async function networkStakeStepRewardPositionWeight(\n context: CachingContext,\n blockViewer: BlockViewer,\n stakeEventsViewer: StakeEventsViewer,\n stepContext: StepIdentity,\n position: number,\n): Promise<bigint> {\n const result = await weightedStakeForRangeByPosition(\n context,\n blockViewer,\n stakeEventsViewer,\n await externalBlockRangeFromStep(context, blockViewer, stepContext),\n XYO_NETWORK_STAKING_ADDRESS,\n position,\n )\n return result\n}\n","import type { Address } from '@xylabs/sdk-js'\nimport { isDefined } from '@xylabs/sdk-js'\nimport type { StakeEventsViewer } from '@xyo-network/xl1-protocol-lib'\n\nimport { mergedAddRemoveStakeEventsByStaker } from './mergedAddRemoveStakeEventsByStaker.ts'\n\n/** ActiveStakeAtTimeByAddress helper function. */\nexport async function activeStakeAtTimeByAddress(\n chain: StakeEventsViewer,\n staked: Address,\n time: number,\n staker?: Address,\n): Promise<bigint> {\n const stakeEvents = (await mergedAddRemoveStakeEventsByStaker(chain, [0, time], staked, staker)).toSorted((a, b) => a.time - b.time)\n let result = 0n\n for (const event of stakeEvents) {\n if (event.time > time) break\n if (event.args.staked !== staked) continue\n if (isDefined(staker) && (event.args.staker !== staker)) continue\n if (event.name === 'StakeAdded') {\n result += event.args.amount\n } else if (event.name === 'StakeRemoved') {\n result -= event.args.amount\n }\n }\n return result\n}\n","import type { Address } from '@xylabs/sdk-js'\nimport type { StakeEvent, StakeEventsViewer } from '@xyo-network/xl1-protocol-lib'\n\n/** MergedAddRemoveStakeEventsByStaker helper function. */\nexport async function mergedAddRemoveStakeEventsByStaker(\n chainEvents: StakeEventsViewer,\n range: [number, number],\n staked: Address,\n staker?: Address,\n): Promise<(StakeEvent<'StakeAdded'> | StakeEvent<'StakeRemoved'>)[]> {\n const [addedEvents, removedEvents] = await Promise.all([\n chainEvents.stakeEvents(range, { name: 'StakeAdded', args: { staked, staker } }),\n chainEvents.stakeEvents(range, { name: 'StakeRemoved', args: { staked, staker } }),\n ])\n const result = [...addedEvents, ...removedEvents].toSorted((a, b) => a.time - b.time)\n return result\n}\n","import { isUndefined } from '@xylabs/sdk-js'\nimport type { StakeEventsViewer } from '@xyo-network/xl1-protocol-lib'\n\nimport { mergedAddRemoveStakeEventsByPosition } from './mergedAddRemoveStakeEventsByPosition.ts'\n\n/** ActiveStakeAtTimeByPosition helper function. */\nexport async function activeStakeAtTimeByPosition(\n chainStakeEvents: StakeEventsViewer,\n externalTime: number,\n position?: number,\n): Promise<bigint> {\n const stakeEvents = (await mergedAddRemoveStakeEventsByPosition(chainStakeEvents, [0, externalTime], position)).toSorted((a, b) => a.time - b.time)\n let result = 0n\n for (const event of stakeEvents) {\n if (event.time > externalTime) break\n if (isUndefined(position) || position === Number(event.args.id)) {\n if (event.name === 'StakeAdded') {\n result += event.args.amount\n } else if (event.name === 'StakeRemoved') {\n result -= event.args.amount\n }\n }\n }\n return result\n}\n","import type { StakeEvent, StakeEventsViewer } from '@xyo-network/xl1-protocol-lib'\n\n/** MergedAddRemoveStakeEventsByPosition helper function. */\nexport async function mergedAddRemoveStakeEventsByPosition(\n chainEvents: StakeEventsViewer,\n range: [number, number],\n position?: number,\n): Promise<(StakeEvent<'StakeAdded'> | StakeEvent<'StakeRemoved'>)[]> {\n const [addedEvents, removedEvents] = await Promise.all([\n chainEvents.stakeEvents(range, { name: 'StakeAdded', args: { id: position } }),\n chainEvents.stakeEvents(range, { name: 'StakeRemoved', args: { id: position } }),\n ])\n const result = [...addedEvents, ...removedEvents].toSorted((a, b) => a.time - b.time)\n return result\n}\n","import {\n type Address,\n toAddress,\n} from '@xylabs/sdk-js'\nimport type { StakeEventsViewer } from '@xyo-network/xl1-protocol-lib'\n\nimport { mergedAddRemoveStakeEventsByStaker } from './mergedAddRemoveStakeEventsByStaker.ts'\n\n/** AllStakersForRange helper function. */\nexport async function allStakersForRange(\n chain: StakeEventsViewer,\n externalRange: [number, number],\n staked: Address,\n): Promise<Record<Address, bigint>> {\n const mergedEvents = await mergedAddRemoveStakeEventsByStaker(chain, [0, externalRange[1]], staked)\n const resultWithZeros: Record<Address, bigint> = {}\n for (const event of mergedEvents) {\n const staker = toAddress(event.args.staker)\n resultWithZeros[staker] = resultWithZeros[staker] ?? 0n\n if (event.name === 'StakeAdded') {\n resultWithZeros[staker] += event.args.amount\n } else if (event.name === 'StakeRemoved') {\n resultWithZeros[staker] -= event.args.amount\n }\n }\n const nonZero = Object.entries(resultWithZeros).filter(([, amount]) => amount > 0n).map(([address]) => address)\n const result: Record<Address, bigint> = {}\n for (const address of nonZero) {\n result[toAddress(address)] = resultWithZeros[toAddress(address)]\n }\n return result\n}\n","import { type Address } from '@xylabs/sdk-js'\nimport type {\n BlockViewer, CachingContext, StakeEventsViewer, StepIdentity,\n} from '@xyo-network/xl1-protocol-lib'\n\nimport { externalBlockRangeFromXL1BlockRange } from '../chain/index.ts'\nimport { stepBlockRange } from '../step/index.ts'\nimport { allStakersForRange } from './allStakersForRange.ts'\n\n/** AllStakersForStep helper function. */\nexport async function allStakersForStep(\n context: CachingContext,\n blockViewer: BlockViewer,\n stakeEventsViewer: StakeEventsViewer,\n stepContext: StepIdentity,\n staked: Address,\n): Promise<Record<Address, bigint>> {\n const xl1BlockRange = stepBlockRange(stepContext)\n return await allStakersForRange(\n stakeEventsViewer,\n await externalBlockRangeFromXL1BlockRange(context, blockViewer, xl1BlockRange),\n staked,\n )\n}\n","import type { Address } from '@xylabs/sdk-js'\nimport { isDefined } from '@xylabs/sdk-js'\nimport type {\n BlockRange,\n BlockViewer,\n CachingContext,\n StakeEventsViewer,\n} from '@xyo-network/xl1-protocol-lib'\nimport { asBlockNumber } from '@xyo-network/xl1-protocol-lib'\n\nimport { withContextCacheResponse } from '../../ChainContextHelpers.ts'\nimport { mergedAddRemoveStakeEventsByPosition } from './mergedAddRemoveStakeEventsByPosition.ts'\n\n/** WeightedStakeForRangeByPosition helper function. */\nexport async function weightedStakeForRangeByPosition(\n context: CachingContext,\n blockViewer: BlockViewer,\n stakeEventsViewer: StakeEventsViewer,\n externalRange: BlockRange, // first to last block of step\n staked?: Address,\n positionId?: number,\n): Promise<bigint> {\n const cacheKey = isDefined(positionId) ? `${externalRange[0]}-${externalRange[1]}-${positionId}` : `${externalRange[0]}-${externalRange[1]}-all`\n return await withContextCacheResponse(context, 'weightedStakeForRangeByPosition', cacheKey, async () => {\n let weightedStakeSum = 0n\n if (isDefined(positionId)) {\n const mergedEvents = (await mergedAddRemoveStakeEventsByPosition(\n stakeEventsViewer,\n [0, externalRange[1]],\n positionId,\n )).toSorted((a, b) => a.time - b.time)\n let currentTime = externalRange[0]\n let currentStake = 0n // await activeStakeAtTimeByPosition(chainEvents, pos.staked, currentTime - 1, position)\n\n // if not staking the desired address, return 0n\n if (isDefined(staked) && mergedEvents.at(0)?.args.staked !== staked) {\n return 0n\n }\n\n for (const event of mergedEvents) {\n if (event.time > currentTime) {\n // Add the weighted stake for the period between the range start or previous event and this event\n weightedStakeSum += currentStake * BigInt(event.time - currentTime)\n }\n if (event.name === 'StakeAdded') {\n currentStake += event.args.amount\n } else if (event.name === 'StakeRemoved') {\n currentStake -= event.args.amount\n }\n // seems that sometimes we get multiple remove events, so ensure stake doesn't go negative\n currentStake = currentStake < 0n ? 0n : currentStake\n currentTime = asBlockNumber(event.time, { name: 'weightedStakeForRangeByPosition' })\n if (currentTime > externalRange[1]) {\n break\n }\n }\n if (externalRange[1] > currentTime) {\n // Add the weighted stake for the period between the last event and the end of the range\n weightedStakeSum += currentStake * BigInt(externalRange[1] - currentTime)\n }\n } else {\n const positionCount = await stakeEventsViewer.positionCount([0, externalRange[1]])\n for (let pos = 0; pos < positionCount; pos++) {\n weightedStakeSum += await weightedStakeForRangeByPosition(context, blockViewer, stakeEventsViewer, externalRange, staked, pos)\n }\n }\n return weightedStakeSum\n })\n}\n","import type {\n NextOptions, Payload, ReadArchivist,\n Sequence, WithStorageMeta,\n} from '@xyo-network/sdk-js'\nimport type { SignedBlockBoundWitnessWithHashMeta } from '@xyo-network/xl1-protocol-lib'\nimport { isSignedBlockBoundWitnessWithStorageMeta } from '@xyo-network/xl1-protocol-lib'\n\n// TODO: Use some smart value relative to DEFAULT_BLOCK_SIZE\n// to ensure we're likely to find it in a single request\n// without bringing back too much data\nconst DEFAULT_NEXT_OPTIONS: NextOptions = { limit: 50 }\n\n/**\n * Iterates an archivist to find the most recent block\n * @param chainArchivist The archivist to iterate over for the most recent chain block\n * @param nextOptions The options to use when iterating the archivist\n * @param maxIterations The max number of iterations to perform when finding the most recent block\n * @returns The most recent block found in the archivist or undefined if no blocks are found\n */\nexport const findMostRecentBlock = async (\n chainArchivist: ReadArchivist,\n nextOptions: NextOptions = DEFAULT_NEXT_OPTIONS,\n maxIterations = Number.POSITIVE_INFINITY,\n): Promise<SignedBlockBoundWitnessWithHashMeta | undefined> => {\n let mostRecentBlock: SignedBlockBoundWitnessWithHashMeta | undefined\n let cursor: Sequence | undefined\n let batch: WithStorageMeta<Payload>[]\n let iterations = 0\n do {\n batch = await chainArchivist.next({\n ...nextOptions, order: 'desc', cursor,\n })\n const blocks = batch.filter(isSignedBlockBoundWitnessWithStorageMeta)\n const last = blocks?.at(0)\n if (last) {\n mostRecentBlock = last\n break\n } else {\n cursor = batch.at(-1)?._sequence\n }\n iterations = iterations + 1\n } while (batch.length > 0 && iterations < maxIterations)\n return mostRecentBlock\n}\n","import { assertEx, spanAsync } from '@xylabs/sdk-js'\nimport type {\n ChainContextRead,\n HydratedBlockWithHashMeta, XL1BlockNumber,\n} from '@xyo-network/xl1-protocol-lib'\n\nimport { blockFromBlockNumber, hydrateBlock } from '../../block/index.ts'\nimport { withContextCacheResponse } from '../../ChainContextHelpers.ts'\n\n/** HydratedBlockByNumber helper function. */\nexport async function hydratedBlockByNumber(context: ChainContextRead, blockNumber: XL1BlockNumber): Promise<HydratedBlockWithHashMeta | null> {\n return await spanAsync('hydratedBlockByNumber', async () => {\n if (blockNumber < 0) throw new Error(`Block number ${blockNumber} is less than 0`)\n if (blockNumber > Number.MAX_SAFE_INTEGER) throw new Error(`Block number ${blockNumber} is greater than the maximum safe integer`)\n if (blockNumber % 1 !== 0) throw new Error(`Block number ${blockNumber} is not an integer`)\n const cacheKey = `${blockNumber}`\n return await withContextCacheResponse(context, 'hydratedBlockByNumber', cacheKey, async () => {\n const block = assertEx(\n await blockFromBlockNumber(context, blockNumber),\n () => `Could not find block for block number ${blockNumber}`,\n )\n return await hydrateBlock(context, block._hash)\n }, { max: 20_000 })\n }, { ...context, timeBudgetLimit: 500 })\n}\n","import type { WithHashMeta } from '@xyo-network/sdk-js'\nimport type { AllowedBlockPayload, HydratedTransactionWithHashMeta } from '@xyo-network/xl1-protocol-lib'\nimport { isAllowedBlockPayload } from '@xyo-network/xl1-protocol-lib'\n\nconst ELEVATE_OPCODE = 'elevate'\n\n/** ElevatedPayloads helper function. */\nexport function elevatedPayloads([tx, payloads]: HydratedTransactionWithHashMeta) {\n const opCodes = (tx.script ?? []).filter(operation => operation.startsWith(`${ELEVATE_OPCODE}|`))\n const elevatedPayloads: WithHashMeta<AllowedBlockPayload>[] = []\n for (const opCode of opCodes) {\n const [code, hash] = opCode.split('|')\n if (code === ELEVATE_OPCODE) {\n const elevatedPayload = payloads.find(payload => payload._hash === hash)\n if (isAllowedBlockPayload(elevatedPayload)) {\n elevatedPayloads.push(elevatedPayload)\n }\n }\n }\n if (opCodes.length === elevatedPayloads.length) {\n return elevatedPayloads\n }\n throw new Error('Not all elevated payloads could be found in the transaction payloads')\n}\n","import type { SignedHydratedBlockWithHashMeta } from '@xyo-network/xl1-protocol-lib'\n\n/** ScoreUncle helper function. */\nexport function scoreUncle(finalizedWindowedChain: SignedHydratedBlockWithHashMeta[], blocks: SignedHydratedBlockWithHashMeta[]) {\n // TODO: More than length check\n return blocks.length\n}\n","import type { SignedHydratedBlockWithHashMeta } from '@xyo-network/xl1-protocol-lib'\n\nimport { scoreUncle } from './scoreUncle.ts'\n\n/** FindBestUncle helper function. */\nexport function findBestUncle(finalizedWindowedChain: SignedHydratedBlockWithHashMeta[], uncles: SignedHydratedBlockWithHashMeta[][]) {\n const scores = uncles.map(uncle => ([scoreUncle(finalizedWindowedChain, uncle), uncle] as const)).toSorted((a, b) => b[0] - a[0])\n return scores[0]?.[1] ?? finalizedWindowedChain\n}\n","import {\n assertEx,\n exists, type Hash,\n} from '@xylabs/sdk-js'\nimport type { BaseContext, SignedHydratedBlockWithHashMeta } from '@xyo-network/xl1-protocol-lib'\nimport { isTransactionBoundWitness } from '@xyo-network/xl1-protocol-lib'\n\nfunction blocksToChains(blocks: SignedHydratedBlockWithHashMeta[]) {\n const chains: SignedHydratedBlockWithHashMeta[][] = []\n const map = new Map<Hash, SignedHydratedBlockWithHashMeta>()\n for (const block of blocks) {\n map.set(block[0]._hash, block)\n }\n for (const block of blocks) {\n let uncle: SignedHydratedBlockWithHashMeta[] = [block]\n let previous = block[0].previous ? map.get(block[0].previous) : undefined\n while (previous) {\n if (previous[0].block === (uncle[0][0].block - 1)) {\n uncle.unshift(previous)\n previous = previous[0].previous ? map.get(previous[0].previous) : undefined\n } else {\n // block number sequence is off\n uncle = []\n break\n }\n }\n if (uncle.length > 0) {\n chains.push(uncle)\n }\n }\n return chains\n}\n\nfunction toValidUncle(\n _context: BaseContext,\n finalizedWindowedChain: SignedHydratedBlockWithHashMeta[],\n possibleUncle: SignedHydratedBlockWithHashMeta[],\n) {\n const finalizedWindowStartBlockNumber = finalizedWindowedChain.at(0)?.[0].block ?? -1\n const finalizedHead = assertEx(finalizedWindowedChain.at(-1), () => 'finalizedWindowedChain is empty')\n // prune the chain to match the finalized head\n\n const prunedPossibleUncle = possibleUncle.filter(b => b[0].block > finalizedHead[0].block)\n\n if (prunedPossibleUncle.length === 0) {\n return\n }\n\n if (prunedPossibleUncle[0][0].block !== finalizedHead[0].block + 1) {\n // uncle does not build on finalized head (block number mismatch)\n return\n }\n if (prunedPossibleUncle[0][0].previous !== finalizedHead[0]._hash) {\n // uncle does not build on finalized head (previous hash mismatch)\n return\n }\n const allUncleTransactions = prunedPossibleUncle.flatMap(b => b[1]).filter(isTransactionBoundWitness)\n const allFinalizedTransactions = finalizedWindowedChain.flatMap(b => b[1]).filter(isTransactionBoundWitness)\n const txPossiblyBeforeWindow = allUncleTransactions.find(tx => tx.nbf < finalizedWindowStartBlockNumber)\n if (txPossiblyBeforeWindow) {\n // uncle has a transaction that is valid before the finalized window\n return\n }\n const txExistsInWindow = allUncleTransactions.find(tx => allFinalizedTransactions.find(finalTx => finalTx._hash === tx._hash))\n if (txExistsInWindow) {\n // uncle has a transaction that is already in the finalized window\n return\n }\n return prunedPossibleUncle\n}\n\n/** FindUncles helper function. */\nexport function findUncles(context: BaseContext, finalizedWindowedChain: SignedHydratedBlockWithHashMeta[], blocks: SignedHydratedBlockWithHashMeta[]) {\n return blocksToChains(blocks).map(chain => toValidUncle(context, finalizedWindowedChain, chain)).filter(exists)\n}\n","import type { Hash, JsonValue } from '@xylabs/sdk-js'\nimport { AsObjectFactory } from '@xylabs/sdk-js'\nimport type { Payload, WithStorageMeta } from '@xyo-network/sdk-js'\nimport {\n asSchema, isPayloadOfSchemaType, isStorageMeta,\n} from '@xyo-network/sdk-js'\n\n/** Fields stored by a chain indexing service to track its indexing progress and state */\nexport interface ChainIndexingServiceStateFields<T extends JsonValue = JsonValue> {\n /**\n * The hash of the last block that this service has indexing\n */\n endBlockHash: Hash\n /**\n * The hash of the block that the service started indexing. If undefined, the service is\n * assumed to have started indexing from the genesis block\n */\n startBlockHash?: Hash\n /**\n * The indexed state for the range\n */\n state: T\n}\n/** Schema identifier for chain indexing service state payloads */\nexport const ChainIndexingServiceStateSchema = asSchema('network.xyo.chain.indexing.service.state', true)\n/** Schema type for ChainIndexingServiceState payloads. */\nexport type ChainIndexingServiceStateSchema = typeof ChainIndexingServiceStateSchema\n\n/**\n * The result of a ChainIndexingServiceState\n */\nexport type ChainIndexingServiceState<T extends JsonValue = JsonValue> = Payload<ChainIndexingServiceStateFields<T>, ChainIndexingServiceStateSchema>\n\n/**\n * Identity functions for determining if an object is an ChainIndexingServiceState\n */\nexport const isChainIndexingServiceState = <T extends JsonValue = JsonValue>(payload?: unknown): payload is ChainIndexingServiceState<T> => {\n return isPayloadOfSchemaType<ChainIndexingServiceState<T>>(ChainIndexingServiceStateSchema)(payload)\n}\n/** Type assertion factory for ChainIndexingServiceState payloads */\nexport const asChainIndexingServiceState = AsObjectFactory.create<ChainIndexingServiceState<JsonValue>>(isChainIndexingServiceState)\n\n/** Type guard for ChainIndexingServiceState with storage metadata */\nexport const isChainIndexingServiceStateWithStorageMeta\n = <T extends JsonValue = JsonValue>(value: unknown): value is WithStorageMeta<ChainIndexingServiceState<T>> =>\n isChainIndexingServiceState<T>(value) && isStorageMeta(value)\n\n/** Type assertion factory for ChainIndexingServiceState with storage metadata */\nexport const asChainIndexingServiceStateWithStorageMeta\n = AsObjectFactory.create<WithStorageMeta<ChainIndexingServiceState>>(isChainIndexingServiceStateWithStorageMeta)\n","import {\n type Hex,\n hexToBigInt,\n toHex,\n} from '@xylabs/sdk-js'\nimport { isObject } from '@xylabs/sdk-js'\n\n/** Represents a negative bigint value stored as a hex string */\nexport interface NegativeBigInt {\n negative: Hex\n}\n\n/** Represents a positive bigint value stored as a hex string */\nexport interface PositiveBigInt {\n positive: Hex\n}\n\n/** A signed bigint value represented as either a negative or positive hex string */\nexport type SignedBigInt = NegativeBigInt | PositiveBigInt\n\n/** Type guard that checks if a value is a NegativeBigInt */\nexport const isNegativeBigInt = (value: unknown): value is NegativeBigInt => {\n return isObject(value) && 'negative' in value && typeof value.negative === 'string'\n}\n\n/** Type guard that checks if a value is a PositiveBigInt */\nexport const isPositiveBigInt = (value: unknown): value is PositiveBigInt => {\n return isObject(value) && 'positive' in value && typeof value.positive === 'string'\n}\n\n/** parseSignedBigInt constant. */\nexport const parseSignedBigInt = (value: SignedBigInt): bigint => {\n if (isNegativeBigInt(value)) {\n return -hexToBigInt(value.negative)\n } else if (isPositiveBigInt(value)) {\n return hexToBigInt(value.positive)\n } else {\n throw new Error('Invalid balance type')\n }\n}\n\n/** toSignedBigInt constant. */\nexport const toSignedBigInt = (value: bigint): SignedBigInt => {\n return value < 0n ? { negative: toHex(-value) } : { positive: toHex(value) }\n}\n\n/** toPositiveBigInt constant. */\nexport const toPositiveBigInt = (value: unknown): PositiveBigInt => {\n if (isNegativeBigInt(value)) {\n return { positive: toHex(0n) }\n }\n if (isPositiveBigInt(value)) {\n return { positive: value.positive }\n }\n if (typeof value === 'bigint') {\n return { positive: toHex(value) }\n }\n throw new Error('Invalid value for positive big int')\n}\n","import type { Address, Hash } from '@xylabs/sdk-js'\nimport {\n asHash,\n assertEx, exists, isDefined,\n ZERO_ADDRESS,\n} from '@xylabs/sdk-js'\nimport type { WithHashMeta, WithStorageMeta } from '@xyo-network/sdk-js'\nimport type {\n AccountBalanceConfig,\n AccountBalanceHistoryItem,\n AccountBalanceViewer,\n BlockViewer,\n ChainQualification,\n ChainQualified,\n MapType,\n SignedBlockBoundWitnessWithHashMeta, Transfer, XL1BlockNumber, XL1BlockRange,\n} from '@xyo-network/xl1-protocol-lib'\nimport {\n AccountBalanceViewerMoniker,\n asRange, asXL1BlockNumber, asXL1BlockRange, AttoXL1,\n BlockViewerMoniker,\n isChainQualifiedHeadConfig,\n isChainQualifiedRangeConfig,\n StepSizes,\n TransferSchema,\n} from '@xyo-network/xl1-protocol-lib'\nimport { Semaphore } from 'async-mutex'\n\nimport { deepCalculateFramesFromRange } from '../../block/index.ts'\nimport type { CreatableProviderParams } from '../../CreatableProvider/index.ts'\nimport { AbstractCreatableProvider, creatableProvider } from '../../CreatableProvider/index.ts'\nimport type { BalancesStepSummary, TransfersStepSummary } from '../../summary/index.ts'\nimport {\n balancesSummary,\n transfersStepSummaryFromRange,\n} from '../../summary/index.ts'\n\n/** Parameters for SimpleAccountBalanceViewer. */\nexport interface SimpleAccountBalanceViewerParams extends CreatableProviderParams {\n balancesSummaryMap: MapType<string, WithHashMeta<BalancesStepSummary>>\n transfersSummaryMap: MapType<string, WithHashMeta<TransfersStepSummary>>\n}\n\n/** SimpleAccountBalanceViewer implementation. */\n@creatableProvider()\nexport class SimpleAccountBalanceViewer extends AbstractCreatableProvider<SimpleAccountBalanceViewerParams> implements AccountBalanceViewer {\n static readonly defaultMoniker = AccountBalanceViewerMoniker\n static readonly dependencies = [BlockViewerMoniker]\n static readonly monikers = [AccountBalanceViewerMoniker]\n moniker = SimpleAccountBalanceViewer.defaultMoniker\n\n private _balanceStepSemaphores = StepSizes.map(() => new Semaphore(20))\n private _blockViewer!: BlockViewer\n private _transferStepSemaphores = StepSizes.map(() => new Semaphore(20))\n\n get balancesSummaryMap() {\n return this.params.balancesSummaryMap\n }\n\n get blockViewer() {\n return this._blockViewer\n }\n\n get transfersSummaryMap() {\n return this.params.transfersSummaryMap\n }\n\n static override async paramsHandler(params: Partial<SimpleAccountBalanceViewerParams> = {}) {\n return {\n ...await super.paramsHandler(params),\n balancesSummaryMap: assertEx(params.balancesSummaryMap, () => 'balancesSummaryMap is required'),\n transfersSummaryMap: assertEx(params.transfersSummaryMap, () => 'transfersSummaryMap is required'),\n }\n }\n\n async accountBalance(address: Address, config?: AccountBalanceConfig) {\n const balances = await this.accountBalances([address], config)\n return balances[address] ?? AttoXL1(0n)\n }\n\n async accountBalanceHistories(addresses: Address[], config: AccountBalanceConfig = {}) {\n return (await this.qualifiedAccountBalanceHistories(addresses, config))[0]\n }\n\n async accountBalanceHistory(address: Address, config?: AccountBalanceConfig) {\n return await this.spanAsync('accountBalanceHistory', async () => {\n const range = isChainQualifiedRangeConfig(config) ? config.range : undefined\n const startingRange = asXL1BlockRange(range ?? [0, await this.blockViewer.currentBlockNumber()], true)\n const blockNumbers = await this.distillTransferHistory(address, startingRange)\n const blocks = (await Promise.all(blockNumbers.map(async bn => await this.blockViewer.blockByNumber(bn)))).filter(exists)\n const result: AccountBalanceHistoryItem[] = []\n for (const block of blocks) {\n const transferIndexes = block[0].payload_schemas.map((schema, index) => schema === TransferSchema ? index : undefined).filter(exists)\n const transfers = transferIndexes.map((index) => {\n const hash = block[0].payload_hashes[index]\n return assertEx(\n block[1].find(p => p._hash === hash) as WithStorageMeta<Transfer>,\n () => `Error: Could not find Transfer with hash ${hash} in block ${block[0]._hash}`,\n )\n }).filter(exists).filter(t => ((t.from === address) || (isDefined(t.transfers[address]))))\n if (transfers.length === 0) {\n continue\n }\n const pairs: [SignedBlockBoundWitnessWithHashMeta, WithHashMeta<Transfer>][] = (transfers.map((transfer) => {\n return [block[0], transfer]\n }))\n result.push(...pairs.map(([block, transfer]) => [block,\n null,\n transfer] satisfies AccountBalanceHistoryItem))\n }\n return result\n }, this.context)\n }\n\n async accountBalances(address: Address[], config?: AccountBalanceConfig) {\n const [result] = (await this.qualifiedAccountBalances(address, config ?? {}))\n return result\n }\n\n override async createHandler() {\n await super.createHandler()\n this._blockViewer = await this.locator.getInstance<BlockViewer>(BlockViewerMoniker)\n }\n\n async qualifiedAccountBalanceHistories(\n addresses: Address[],\n config: AccountBalanceConfig,\n ) {\n return await this.spanAsync('qualifiedAccountBalanceHistories', async () => {\n const head = isChainQualifiedHeadConfig(config) ? config.head : await this.blockViewer.currentBlockHash()\n const range = isChainQualifiedRangeConfig(config)\n ? config.range\n : asXL1BlockRange([0,\n assertEx(\n await this.blockViewer.blockByHash(head),\n () => `Error: Could not find block with hash ${head}`,\n )[0].block])\n const qualifiedEntries = await Promise.all(addresses.map(async address => ([\n address,\n await this.qualifiedAccountBalanceHistory(address, range),\n ]))) satisfies [Address, ChainQualified<AccountBalanceHistoryItem[]>][]\n\n const entries = qualifiedEntries.map(([address, [history]]) => {\n return [address, history]\n })\n const qualifiedRange = qualifiedEntries[0][1][1].range\n const qualifiedHeadHash = qualifiedEntries[0][1][1].head\n\n // check for drift\n for (const [_, [__, { range, head }]] of qualifiedEntries) {\n assertEx(\n range[0] === qualifiedRange[0] && range[1] === qualifiedRange[1],\n () => 'Inconsistent ranges in qualifiedAccountBalanceHistories',\n )\n assertEx(\n head === qualifiedHeadHash,\n () => 'Inconsistent head hashes in qualifiedAccountBalanceHistories',\n )\n }\n\n return [Object.fromEntries(entries), { range: qualifiedRange, head: qualifiedHeadHash }] satisfies\n [Record<Address, AccountBalanceHistoryItem[]>, ChainQualification]\n }, this.context)\n }\n\n async qualifiedAccountBalances(\n address: Address[],\n config: AccountBalanceConfig,\n ): Promise<ChainQualified<Record<Address, AttoXL1>>> {\n return await this.spanAsync('qualifiedAccountsBalances', async () => {\n const qualifiedSummary = await balancesSummary(\n this.context,\n this._balanceStepSemaphores,\n this.blockViewer,\n this.balancesSummaryMap,\n config,\n )\n const result: Record<Address, AttoXL1> = {}\n for (const addr of address) {\n const summaryBalance = qualifiedSummary[0][addr] ?? 0n\n result[addr] = AttoXL1(summaryBalance < 0n ? 0n : summaryBalance)\n }\n return [result, qualifiedSummary[1]]\n }, this.context)\n }\n\n override async startHandler() {\n await super.startHandler()\n await Promise.all([\n this.accountBalance(ZERO_ADDRESS),\n this.accountBalanceHistory(ZERO_ADDRESS),\n ])\n }\n\n private async distillTransferHistory(address: Address, range: XL1BlockRange, max: number = 50): Promise<XL1BlockNumber[]> {\n return await this.spanAsync('distillTransferHistory', async () => {\n if ((range[1] - range[0]) <= StepSizes[0] || max <= 1) {\n return Array.from({ length: range[1] - range[0] + 1 }, (_, i) => range[1] - i).slice(0, max).map(n => asXL1BlockNumber(n, true))\n }\n const frames = deepCalculateFramesFromRange(asXL1BlockRange(range, true))\n const transferSummaryPairs = await Promise.all(frames.map(\n async (frame) => {\n return [frame, await transfersStepSummaryFromRange(this.context, this._transferStepSemaphores, this.blockViewer, this.transfersSummaryMap, frame)]\n },\n )) as [XL1BlockRange, WithStorageMeta<TransfersStepSummary>][]\n\n const filteredTransferSummaryPairs = transferSummaryPairs.filter(([_, summary]) => Object.keys(summary.transfers).includes(address))\n\n // sort it latest to earliest\n const sortedTransferSummaryPairs = filteredTransferSummaryPairs.toSorted((a, b) => {\n return b[0][1] - a[0][1]\n })\n\n const resultBlockNumbers: Set<XL1BlockNumber> = new Set()\n for (const [frame] of sortedTransferSummaryPairs) {\n if ((frame[1] - frame[0] + 1) > StepSizes[0]) {\n const values = await this.distillTransferHistory(address, asXL1BlockRange([frame[0], frame[1] - 1], true), max - resultBlockNumbers.size)\n for (const value of values) {\n resultBlockNumbers.add(value)\n }\n resultBlockNumbers.add(frame[1])\n } else {\n for (let i = frame[0]; i <= frame[1]; i++) {\n resultBlockNumbers.add(i)\n }\n }\n if (resultBlockNumbers.size >= max) {\n break\n }\n }\n return [...resultBlockNumbers].toSorted((a, b) => b - a).slice(0, max)\n }, this.context)\n }\n\n private async qualifiedAccountBalanceHistory(\n address: Address,\n headOrRange?: Hash | XL1BlockRange,\n ): Promise<ChainQualified<AccountBalanceHistoryItem[]>> {\n return await this.spanAsync('qualifiedAccountBalanceHistory', async () => {\n const range = asRange(headOrRange)\n const headHash = asHash(headOrRange)\n const [head] = assertEx(isDefined(headHash)\n ? (await this.blockViewer.blockByHash(headHash))\n : (await this.blockViewer.currentBlock()), () => 'Could not resolve head block')\n const startingRange = asXL1BlockRange(range ?? [0, head.block], true)\n const blockNumbers = await this.distillTransferHistory(address, startingRange)\n const blocks = (await Promise.all(blockNumbers.map(async bn => await this.blockViewer.blockByNumber(bn)))).filter(exists)\n const result: AccountBalanceHistoryItem[] = []\n for (const block of blocks) {\n const transferIndexes = block[0].payload_schemas.map((schema, index) => schema === TransferSchema ? index : undefined).filter(exists)\n const transfers = transferIndexes.map((index) => {\n const hash = block[0].payload_hashes[index]\n return assertEx(\n block[1].find(p => p._hash === hash) as WithStorageMeta<Transfer>,\n () => `Error: Could not find Transfer with hash ${hash} in block ${block[0]._hash}`,\n )\n }).filter(exists).filter(t => ((t.from === address) || (isDefined(t.transfers[address]))))\n if (transfers.length === 0) {\n continue\n }\n const pairs: [SignedBlockBoundWitnessWithHashMeta, WithHashMeta<Transfer>][] = (transfers.map((transfer) => {\n return [block[0], transfer]\n }))\n result.push(...pairs.map(([block, transfer]) => [block,\n null,\n transfer] satisfies AccountBalanceHistoryItem))\n }\n return [result, { range: startingRange, head: head._hash }]\n }, this.context)\n }\n}\n","import type { Address } from '@xylabs/sdk-js'\nimport { AsObjectFactory } from '@xylabs/sdk-js'\nimport type { WithStorageMeta } from '@xyo-network/sdk-js'\nimport {\n asSchema, isPayloadOfSchemaType, isStorageMeta,\n} from '@xyo-network/sdk-js'\n\nimport type { SignedBigInt } from '../../SignedBigInt.ts'\nimport type { StepSummary } from './StepSummary.ts'\n\n/** Schema identifier for balances step summary payloads */\nexport const BalancesStepSummarySchema = asSchema('network.xyo.step.summary.balances', true)\n/** Schema type for BalancesStepSummary payloads. */\nexport type BalancesStepSummarySchema = typeof BalancesStepSummarySchema\n\n/** Step summary payload containing net balance changes per address */\nexport type BalancesStepSummary = StepSummary<{\n balances: Record<Address, SignedBigInt>\n}, BalancesStepSummarySchema>\n\n/**\n * Identity function for determining if an object is an BalancesStepSummary\n */\nexport const isBalancesStepSummary = isPayloadOfSchemaType<BalancesStepSummary>(BalancesStepSummarySchema)\n/** Type assertion factory for BalancesStepSummary payloads */\nexport const asBalancesStepSummary = AsObjectFactory.create<BalancesStepSummary>(isBalancesStepSummary)\n\n/**\n * Identity function for determining if an object is an BalancesStepSummary with Storage Meta\n */\nexport const isBalancesStepSummaryWithStorageMeta = (value: unknown): value is WithStorageMeta<BalancesStepSummary> => {\n return isBalancesStepSummary(value) && isStorageMeta(value)\n}\n/** Type assertion factory for BalancesStepSummary with storage metadata */\nexport const asBalancesStepSummaryWithStorageMeta = AsObjectFactory.create<WithStorageMeta<BalancesStepSummary>>(isBalancesStepSummaryWithStorageMeta)\n","import { AsObjectFactory } from '@xylabs/sdk-js'\nimport type { Schema, WithStorageMeta } from '@xyo-network/sdk-js'\nimport {\n asSchema, isPayloadOfSchemaType, isStorageMeta,\n} from '@xyo-network/sdk-js'\n\nimport type { StepSummary } from './StepSummary.ts'\n\n/** Schema identifier for schemas step summary payloads */\nexport const SchemasStepSummarySchema = asSchema('network.xyo.step.summary.schemas', true)\n/** Schema type for sStepSummary payloads. */\nexport type SchemasStepSummarySchema = typeof SchemasStepSummarySchema\n\n/** Step summary payload containing schema occurrence counts */\nexport type SchemasStepSummary = StepSummary<{\n schemas: Record<Schema, number>\n}, SchemasStepSummarySchema>\n\n/**\n * Identity function for determining if an object is an SchemasStepSummary\n */\nexport const isSchemasStepSummary = isPayloadOfSchemaType<SchemasStepSummary>(SchemasStepSummarySchema)\n/** Type assertion factory for SchemasStepSummary payloads */\nexport const asSchemasStepSummary = AsObjectFactory.create<SchemasStepSummary>(isSchemasStepSummary)\n\n/**\n * Identity function for determining if an object is an SchemasStepSummary with Storage Meta\n */\nexport const isSchemasStepSummaryWithStorageMeta = (value: unknown): value is WithStorageMeta<SchemasStepSummary> => {\n return isSchemasStepSummary(value) && isStorageMeta(value)\n}\n/** Type assertion factory for SchemasStepSummary with storage metadata */\nexport const asSchemasStepSummaryWithStorageMeta = AsObjectFactory.create<WithStorageMeta<SchemasStepSummary>>(isSchemasStepSummaryWithStorageMeta)\n","import type { EmptyObject, Hash } from '@xylabs/sdk-js'\nimport {\n asSchema, type Payload, type Schema,\n} from '@xyo-network/sdk-js'\n\n/** Schema identifier for step summary payloads */\nexport const StepSummarySchema = asSchema('network.xyo.step.summary', true)\n/** Schema type for StepSummary payloads. */\nexport type StepSummarySchema = typeof StepSummarySchema\n\n/** Fields common to all step summary payloads */\nexport interface StepSummaryFields {\n hash: Hash // the stepHash - the hash of the last block in the step frame\n stepSize: number // the stepSize in blocks\n}\n\n/** Payload type for a step summary with optional additional fields and schema */\nexport type StepSummary<TAdditionalFields extends EmptyObject | void = void,\n TSchema extends Schema | void = void> = Payload<TAdditionalFields extends void ? StepSummaryFields : TAdditionalFields & StepSummaryFields,\n TSchema extends void ? StepSummarySchema : TSchema>\n","import type { Address } from '@xylabs/sdk-js'\nimport { AsObjectFactory } from '@xylabs/sdk-js'\nimport type { WithStorageMeta } from '@xyo-network/sdk-js'\nimport {\n asSchema, isPayloadOfSchemaType, isStorageMeta,\n} from '@xyo-network/sdk-js'\n\nimport type { SignedBigInt } from '../../SignedBigInt.ts'\nimport type { StepSummary } from './StepSummary.ts'\n\n/** Schema identifier for transfers step summary payloads */\nexport const TransfersStepSummarySchema = asSchema('network.xyo.step.summary.transfer', true)\n/** Schema type for TransfersStepSummary payloads. */\nexport type TransfersStepSummarySchema = typeof TransfersStepSummarySchema\n\n/** Step summary payload containing transfer amounts between address pairs */\nexport type TransfersStepSummary = StepSummary<{\n transfers: Record<Address, Record<Address, SignedBigInt>>\n}, TransfersStepSummarySchema>\n\n/**\n * Identity function for determining if an object is an TransfersStepSummary\n */\nexport const isTransfersStepSummary = isPayloadOfSchemaType<TransfersStepSummary>(TransfersStepSummarySchema)\n/** Type assertion factory for TransfersStepSummary payloads */\nexport const asTransfersStepSummary = AsObjectFactory.create<TransfersStepSummary>(isTransfersStepSummary)\n\n/**\n * Identity function for determining if an object is an TransfersStepSummary with Storage Meta\n */\nexport const isTransfersStepSummaryWithStorageMeta = (value: unknown): value is WithStorageMeta<TransfersStepSummary> => {\n return isTransfersStepSummary(value) && isStorageMeta(value)\n}\n/** Type assertion factory for TransfersStepSummary with storage metadata */\nexport const asTransfersStepSummaryWithStorageMeta\n = AsObjectFactory.create<WithStorageMeta<TransfersStepSummary>>(isTransfersStepSummaryWithStorageMeta)\n","import { type Address, spanRootAsync } from '@xylabs/sdk-js'\nimport { assertEx } from '@xylabs/sdk-js'\nimport { isAnyPayload } from '@xyo-network/sdk-js'\nimport type {\n BlockViewer, CachingContext, MapType, XL1BlockRange,\n} from '@xyo-network/xl1-protocol-lib'\nimport { asXL1BlockNumber, StepSizes } from '@xyo-network/xl1-protocol-lib'\nimport type { Semaphore } from 'async-mutex'\n\nimport { deepCalculateFramesFromRange } from '../../../block/index.ts'\nimport { withContextCacheResponse } from '../../../ChainContextHelpers.ts'\nimport { netBalancesForPayloads } from '../../../payloads/index.ts'\nimport {\n parseSignedBigInt, type SignedBigInt, toSignedBigInt,\n} from '../../../SignedBigInt.ts'\nimport type { BalancesStepSummary } from '../../model/index.ts'\nimport { BalancesStepSummarySchema } from '../../model/index.ts'\n\n/** BalancesStepSummaryFromRange helper function. */\nexport async function balancesStepSummaryFromRange(\n context: CachingContext,\n semaphores: Semaphore[],\n blockViewer: BlockViewer,\n summaryMap: MapType<string, BalancesStepSummary>,\n range: XL1BlockRange,\n): Promise<BalancesStepSummary> {\n const cacheKey = `${range[0]}|${range[1]}`\n return await withContextCacheResponse(context, 'balancesStepSummaryFromRange', cacheKey, async () => {\n return await spanRootAsync('balancesStepSummaryFromRange', async () => {\n // console.log(`balanceStepSummaryFromRange: head=${head}, range=${range[0]}-${range[1]}`)\n const [frameHead] = assertEx(await blockViewer.blockByNumber(range[1]), () => `Block not found for number: ${range[1]}`)\n const frameSize = range[1] - range[0] + 1\n\n const key = `${frameHead._hash}|${frameSize}`\n\n return (frameSize === 1)\n ? await spanRootAsync(`balancesStepSummaryFromRange.frameSize=1[${key}]`, async () => {\n const [,payloads] = assertEx(await blockViewer.blockByNumber(range[0]), () => `Block not found for number: ${range[0]}`)\n const balances: Record<Address, SignedBigInt> = {}\n for (const [address, balance] of Object.entries(netBalancesForPayloads(context, payloads))) {\n balances[address as Address] = toSignedBigInt(balance)\n }\n return {\n schema: BalancesStepSummarySchema, hash: frameHead._hash, stepSize: -1, balances,\n }\n }, { ...context, timeBudgetLimit: 500 })\n : await spanRootAsync(`balancesStepSummaryFromRange.frameSize>1[${key}]`, async () => {\n const step = StepSizes.indexOf(asXL1BlockNumber(frameSize, true))\n assertEx(step !== -1, () => `Invalid step size: ${frameSize}. Must be one of ${StepSizes.join(', ')}`)\n\n const summaryResult = await summaryMap.get(`${frameHead._hash}|${frameSize}`)\n if (isAnyPayload(summaryResult)) {\n return summaryResult as BalancesStepSummary\n } else {\n // We do not have it, so lets build it\n await semaphores[step].acquire()\n try {\n const subRanges = deepCalculateFramesFromRange(range, step - 1)\n const promises = subRanges.map(subRange => balancesStepSummaryFromRange(\n context,\n semaphores,\n blockViewer,\n summaryMap,\n subRange,\n ))\n const subResults = await Promise.all(promises)\n\n // add them all up\n const bigIntBalances: Record<Address, bigint> = {}\n for (const subResult of subResults) {\n for (const [address, balance] of Object.entries(subResult.balances)) {\n bigIntBalances[address as Address] = (bigIntBalances[address as Address] ?? 0n) + parseSignedBigInt(balance)\n }\n }\n\n const balances: Record<Address, SignedBigInt> = {}\n for (const [address, balance] of Object.entries(bigIntBalances)) {\n balances[address as Address] = toSignedBigInt(balance)\n }\n\n const result = {\n schema: BalancesStepSummarySchema, hash: frameHead._hash, stepSize: frameSize, balances,\n }\n\n await summaryMap.set(key, result)\n return result\n } finally {\n semaphores[step].release()\n }\n }\n }, { ...context, timeBudgetLimit: 500 })\n }, { ...context, timeBudgetLimit: 500 })\n }, { max: 100_000 })\n}\n","import type { Address } from '@xylabs/sdk-js'\nimport {\n asAddress, assertEx, spanRootAsync,\n} from '@xylabs/sdk-js'\nimport type {\n BlockViewer,\n CachingContext, ChainQualified, ChainQualifiedConfig,\n MapType,\n} from '@xyo-network/xl1-protocol-lib'\nimport {\n asBlockBoundWitnessWithStorageMeta, asXL1BlockRange, isChainQualifiedHeadConfig,\n isChainQualifiedRangeConfig,\n} from '@xyo-network/xl1-protocol-lib'\nimport type { Semaphore } from 'async-mutex'\n\nimport { deepCalculateFramesFromRange } from '../../../block/index.ts'\nimport { parseSignedBigInt } from '../../../SignedBigInt.ts'\nimport type { BalancesStepSummary } from '../../model/index.ts'\nimport { balancesStepSummaryFromRange } from './balancesStepSummaryFromRange.ts'\n\n/** BalancesSummary helper function. */\nexport async function balancesSummary(\n context: CachingContext,\n semaphores: Semaphore[],\n blockViewer: BlockViewer,\n summaryMap: MapType<string, BalancesStepSummary>,\n config?: ChainQualifiedConfig,\n): Promise<ChainQualified<Record<Address, bigint>>> {\n return await spanRootAsync('balancesSummary', async () => {\n const headHash = isChainQualifiedHeadConfig(config) ? config.head : await blockViewer.currentBlockHash()\n const [head] = assertEx(await blockViewer.blockByHash(headHash), () => `Block not found for hash: ${headHash}`)\n const headBoundWitness = asBlockBoundWitnessWithStorageMeta(head, () => `Found Block not a BlockWithHashMeta: ${headHash}`)\n const range = isChainQualifiedRangeConfig(config) ? config.range : asXL1BlockRange([0, headBoundWitness.block], true)\n const ranges = deepCalculateFramesFromRange(asXL1BlockRange(\n range,\n { name: 'balancesSummary' },\n ))\n const summaries = await Promise.all(ranges.map(range => balancesStepSummaryFromRange(context, semaphores, blockViewer, summaryMap, range)))\n const balances: Record<Address, bigint> = {}\n for (let summary of summaries) {\n for (const [address, balance] of Object.entries(summary.balances)) {\n const validAddress = asAddress(address, () => `Invalid address: ${address}`)\n balances[validAddress] = (balances[validAddress] ?? 0n) + parseSignedBigInt(balance)\n }\n }\n return [balances, { range, head: headHash }]\n }, { ...context, timeBudgetLimit: 500 })\n}\n","import { assertEx } from '@xylabs/sdk-js'\nimport type { Schema, WithHashMeta } from '@xyo-network/sdk-js'\nimport {\n isAnyPayload, isBoundWitness,\n isHashMeta, PayloadBuilder,\n} from '@xyo-network/sdk-js'\nimport type {\n BlockViewer, CachingContext, MapType, XL1BlockRange,\n} from '@xyo-network/xl1-protocol-lib'\nimport { StepSizes } from '@xyo-network/xl1-protocol-lib'\nimport type { Semaphore } from 'async-mutex'\n\nimport { deepCalculateFramesFromRange } from '../../../block/index.ts'\nimport { type SchemasStepSummary, SchemasStepSummarySchema } from '../../model/index.ts'\n\n/** SchemasStepSummaryFromRange helper function. */\nexport async function schemasStepSummaryFromRange(\n context: CachingContext,\n semaphores: Semaphore[],\n blockViewer: BlockViewer,\n summaryMap: MapType<string, WithHashMeta<SchemasStepSummary>>,\n range: XL1BlockRange,\n): Promise<WithHashMeta<SchemasStepSummary>> {\n // console.log(`balanceStepSummaryFromRange: head=${head}, range=${range[0]}-${range[1]}`)\n const [frameHead] = assertEx(await blockViewer.blockByNumber(range[1]), () => `Block not found for number: ${range[1]}`)\n const frameSize = range[1] - range[0] + 1\n\n let result: WithHashMeta<SchemasStepSummary> | undefined = undefined\n\n if (frameSize === 1) {\n const [block, payloads] = assertEx(await blockViewer.blockByNumber(range[0]), () => `Block not found for number: ${range[0]}`)\n const boundWitnesses = [block, ...payloads.filter(x => isBoundWitness(x) && isHashMeta(x))]\n const schemas: Record<Schema, number> = {}\n for (const bw of boundWitnesses) {\n schemas[bw.schema] = (schemas[bw.schema] ?? 0) + 1\n for (const schema of bw.payload_schemas) {\n schemas[schema] = (schemas[schema] ?? 0) + 1\n }\n }\n result = await PayloadBuilder.addHashMeta({\n schema: SchemasStepSummarySchema, hash: frameHead._hash, stepSize: -1, schemas,\n })\n } else {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n const step = (StepSizes as any).indexOf(frameSize)\n assertEx(step !== -1, () => `Invalid step size: ${frameSize}. Must be one of ${StepSizes.join(', ')}`)\n\n const summaryResult = await summaryMap.get(`${frameHead._hash}|${frameSize}`)\n if (isAnyPayload(summaryResult)) {\n result = summaryResult as WithHashMeta<SchemasStepSummary>\n } else {\n // We do not have it, so lets build it\n await semaphores[step].acquire()\n try {\n const subRanges = deepCalculateFramesFromRange(range, step - 1)\n const promises = subRanges.map(subRange => schemasStepSummaryFromRange(\n context,\n semaphores,\n blockViewer,\n summaryMap,\n subRange,\n ))\n const subResults = await Promise.all(promises)\n\n // add them all up\n const schemas: Record<Schema, number> = {}\n for (const subResult of subResults) {\n for (const [schema, count] of Object.entries(subResult.schemas)) {\n const typedSchema = schema as Schema\n schemas[typedSchema] = (schemas[typedSchema] ?? 0) + count\n }\n }\n\n result = await PayloadBuilder.addHashMeta({\n schema: SchemasStepSummarySchema, hash: frameHead._hash, stepSize: frameSize, schemas: schemas,\n })\n\n await summaryMap.set(`${frameHead._hash}|${frameSize}`, result)\n } finally {\n semaphores[step].release()\n }\n }\n }\n // console.log(`balanceStepSummaryFromRange-result: head=${head}, range=${range[0]}-${range[1]}: ${toSafeJsonString(result, 10)}`)\n return await PayloadBuilder.addHashMeta(result)\n}\n","import { assertEx, spanRootAsync } from '@xylabs/sdk-js'\nimport type { Schema, WithHashMeta } from '@xyo-network/sdk-js'\nimport type {\n BlockViewer, CachingContext, ChainQualified, ChainQualifiedConfig,\n MapType,\n} from '@xyo-network/xl1-protocol-lib'\nimport {\n asBlockBoundWitnessWithStorageMeta, asXL1BlockRange, isChainQualifiedHeadConfig,\n isChainQualifiedRangeConfig,\n} from '@xyo-network/xl1-protocol-lib'\nimport type { Semaphore } from 'async-mutex'\n\nimport { deepCalculateFramesFromRange } from '../../../block/index.ts'\nimport type { SchemasStepSummary } from '../../model/index.ts'\nimport { schemasStepSummaryFromRange } from './schemasStepSummaryFromRange.ts'\n\n/** SchemasSummary helper function. */\nexport async function schemasSummary(\n context: CachingContext,\n semaphores: Semaphore[],\n blockViewer: BlockViewer,\n summaryMap: MapType<string, WithHashMeta<SchemasStepSummary>>,\n config?: ChainQualifiedConfig,\n): Promise<ChainQualified<Record<Schema, number>>> {\n return await spanRootAsync('schemasSummary', async () => {\n const headHash = isChainQualifiedHeadConfig(config) ? config.head : await blockViewer.currentBlockHash()\n const [head] = assertEx(await blockViewer.blockByHash(headHash), () => `Block not found for hash: ${headHash}`)\n const headBoundWitness = asBlockBoundWitnessWithStorageMeta(head, () => `Found Block not a BlockWithHashMeta: ${headHash}`)\n const range = isChainQualifiedRangeConfig(config) ? config.range : asXL1BlockRange([0, headBoundWitness.block], true)\n const ranges = deepCalculateFramesFromRange(asXL1BlockRange(\n range,\n { name: 'schemasSummary' },\n ))\n const summaries = await Promise.all(ranges.map(range => schemasStepSummaryFromRange(context, semaphores, blockViewer, summaryMap, range)))\n const results: Record<Schema, number> = {}\n for (let summary of summaries) {\n for (const [schema, count] of Object.entries(summary.schemas)) {\n const typedSchema = schema as Schema\n results[typedSchema] = (results[typedSchema] ?? 0) + count\n }\n }\n return [results, { range, head: headHash }]\n }, context)\n}\n","/* eslint-disable max-statements */\nimport type { Address, Hash } from '@xylabs/sdk-js'\nimport { assertEx, spanRootAsync } from '@xylabs/sdk-js'\nimport { isAnyPayload } from '@xyo-network/sdk-js'\nimport type {\n BlockViewer, CachingContext, MapType, XL1BlockRange,\n} from '@xyo-network/xl1-protocol-lib'\nimport { asXL1BlockNumber, StepSizes } from '@xyo-network/xl1-protocol-lib'\nimport type { Semaphore } from 'async-mutex'\n\nimport { deepCalculateFramesFromRange } from '../../../block/index.ts'\nimport { withContextCacheResponse } from '../../../ChainContextHelpers.ts'\nimport { netTransfersForPayloads } from '../../../payloads/index.ts'\nimport {\n parseSignedBigInt, type SignedBigInt, toSignedBigInt,\n} from '../../../SignedBigInt.ts'\nimport {\n asTransfersStepSummary, type TransfersStepSummary, TransfersStepSummarySchema,\n} from '../../model/index.ts'\n\n/** TransfersSummaryKey helper function. */\nexport function transfersSummaryKey(frameHeadHash: Hash, frameSize: number) {\n return `${frameHeadHash}|${frameSize}`\n}\n\n/** TransfersStepSummaryFromRange helper function. */\nexport async function transfersStepSummaryFromRange(\n context: CachingContext,\n semaphores: Semaphore[],\n blockViewer: BlockViewer,\n summaryMap: MapType<string, TransfersStepSummary>,\n range: XL1BlockRange,\n): Promise<TransfersStepSummary> {\n const cacheKey = `${range[0]}|${range[1]}`\n return await withContextCacheResponse(context, 'transfersStepSummaryFromRange', cacheKey, async () => {\n return await spanRootAsync('transfersStepSummaryFromRange', async () => {\n const [frameHead] = assertEx(await blockViewer.blockByNumber(range[1]), () => `Block not found for number: ${range[1]}`)\n const frameSize = range[1] - range[0] + 1\n\n let result: TransfersStepSummary | undefined\n\n if (frameSize === 1) {\n const [, payloads] = assertEx(await blockViewer.blockByNumber(range[0]), () => `Block not found for number: ${range[0]}`)\n const transfers: Record<Address, Record<Address, SignedBigInt>> = {}\n for (const [from, toMap] of Object.entries(netTransfersForPayloads(context, payloads))) {\n transfers[from as Address] = transfers[from as Address] ?? {}\n for (const [to, amount] of Object.entries(toMap)) {\n transfers[from as Address][to as Address] = toSignedBigInt(amount)\n }\n }\n result = {\n schema: TransfersStepSummarySchema, hash: frameHead._hash, stepSize: -1, transfers,\n }\n } else {\n const step = (StepSizes).indexOf(asXL1BlockNumber(frameSize, true))\n assertEx(step !== -1, () => `Invalid step size: ${frameSize}. Must be one of ${StepSizes.join(', ')}`)\n\n const key = transfersSummaryKey(frameHead._hash, frameSize)\n\n const summaryResult = await summaryMap.get(key)\n if (isAnyPayload(summaryResult)) {\n result = asTransfersStepSummary(summaryResult, { required: true })\n } else {\n await semaphores[step].acquire()\n // We do not have it, so lets build it\n try {\n const subRanges = deepCalculateFramesFromRange(range, step - 1)\n const promises = subRanges.map(subRange => transfersStepSummaryFromRange(\n context,\n semaphores,\n blockViewer,\n summaryMap,\n subRange,\n ))\n const subResults = await Promise.all(promises)\n\n // add them all up\n const bigIntBalances: Record<Address, Record<Address, bigint>> = {}\n for (const subResult of subResults) {\n for (const [from, toMap] of Object.entries(subResult.transfers)) {\n bigIntBalances[from as Address] = bigIntBalances[from as Address] ?? {}\n for (const [to, transfer] of Object.entries(toMap)) {\n bigIntBalances[from as Address][to as Address] = (bigIntBalances[from as Address][to as Address] ?? 0n) + parseSignedBigInt(transfer)\n }\n }\n }\n\n const transfers: Record<Address, Record<Address, SignedBigInt>> = {}\n for (const [from, toMap] of Object.entries(bigIntBalances)) {\n transfers[from as Address] = transfers[from as Address] ?? {}\n for (const [to, transfer] of Object.entries(toMap)) {\n transfers[from as Address][to as Address] = toSignedBigInt(transfer)\n }\n }\n\n result = {\n schema: TransfersStepSummarySchema, hash: frameHead._hash, stepSize: frameSize, transfers,\n }\n\n await summaryMap.set(key, result)\n } finally {\n semaphores[step].release()\n }\n }\n }\n return result\n }, { ...context, timeBudgetLimit: 500 })\n }, { max: 100_000 })\n}\n","import type { Address } from '@xylabs/sdk-js'\nimport {\n asAddress, assertEx, spanRootAsync,\n} from '@xylabs/sdk-js'\nimport type {\n BlockViewer, CachingContext, ChainQualified, ChainQualifiedConfig,\n MapType,\n} from '@xyo-network/xl1-protocol-lib'\nimport {\n asBlockBoundWitnessWithStorageMeta, asXL1BlockRange, isChainQualifiedHeadConfig,\n isChainQualifiedRangeConfig,\n} from '@xyo-network/xl1-protocol-lib'\nimport type { Semaphore } from 'async-mutex'\n\nimport { deepCalculateFramesFromRange } from '../../../block/index.ts'\nimport { parseSignedBigInt } from '../../../SignedBigInt.ts'\nimport type { TransfersStepSummary } from '../../model/index.ts'\nimport { transfersStepSummaryFromRange } from './transfersStepSummaryFromRange.ts'\n\n// the summary of amount of rewards claimed from the step reward pool by addresses\n/** TransfersSummary helper function. */\nexport async function transfersSummary(\n context: CachingContext,\n semaphores: Semaphore[],\n blockViewer: BlockViewer,\n summaryMap: MapType<string, TransfersStepSummary>,\n config?: ChainQualifiedConfig,\n): Promise<ChainQualified<Record<Address, Record<Address, bigint>>>> {\n return await spanRootAsync('transferSummary', async () => {\n const headHash = isChainQualifiedHeadConfig(config) ? config.head : await blockViewer.currentBlockHash()\n const [head] = assertEx(await blockViewer.blockByHash(headHash), () => `Block not found for hash: ${headHash}`)\n const headBoundWitness = asBlockBoundWitnessWithStorageMeta(head, () => `Found Block not a BlockWithHashMeta: ${headHash}`)\n const range = isChainQualifiedRangeConfig(config) ? config.range : asXL1BlockRange([0, headBoundWitness.block], true)\n const ranges = deepCalculateFramesFromRange(asXL1BlockRange(\n range,\n { name: 'transfersSummary' },\n ))\n const summaries = await Promise.all(ranges.map(range => transfersStepSummaryFromRange(context, semaphores, blockViewer, summaryMap, range)))\n const transfers: Record<Address, Record<Address, bigint>> = {}\n for (let summary of summaries) {\n for (const [from, toMap] of Object.entries(summary.transfers)) {\n const validFrom = asAddress(from, () => `Invalid address: ${from}`)\n transfers[validFrom] = transfers[validFrom] ?? {}\n for (const [to, transfer] of Object.entries(toMap)) {\n const validTo = asAddress(to, () => `Invalid address: ${to}`)\n transfers[validFrom][validTo] = (transfers[validFrom][validTo] ?? 0n) + parseSignedBigInt(transfer)\n }\n }\n }\n return [transfers, { range, head: headHash }]\n }, { ...context, timeBudgetLimit: 500 })\n}\n","import type { Hash } from '@xylabs/sdk-js'\nimport {\n assertEx, exists, isUndefined,\n} from '@xylabs/sdk-js'\nimport type {\n Payload, ReadArchivist, WithHashMeta,\n} from '@xyo-network/sdk-js'\nimport {\n asSignedHydratedBlockWithHashMeta, asSignedHydratedBlockWithStorageMeta, asXL1BlockNumber,\n BlockContextRead,\n BlockRate, BlockViewer, BlockViewerMoniker, ChainContextRead,\n ChainId, DataLakeViewer, DataLakeViewerMoniker, FinalizationViewer, FinalizationViewerMoniker, type SignedHydratedBlockWithHashMeta,\n SignedHydratedBlockWithStorageMeta, SingleTimeConfig, TimeDurations, type XL1BlockNumber, XL1BlockRange,\n} from '@xyo-network/xl1-protocol-lib'\n\nimport { hydrateBlock } from '../../block/index.ts'\nimport type { CreatableProviderParams } from '../../CreatableProvider/index.ts'\nimport { AbstractCreatableProvider, creatableProvider } from '../../CreatableProvider/index.ts'\nimport { LruCacheMap } from '../../driver/index.ts'\nimport { ChainStoreRead } from '../../model/index.ts'\nimport {\n addDataLakePayloads,\n addDataLakePayloadsToPayloads,\n calculateBlockRate, calculateStepSizeRate, calculateTimeRate, hydratedBlockByNumber,\n} from '../../primitives/index.ts'\nimport { HydratedCache } from '../../utils/index.ts'\n\n/** Parameters for SimpleBlockViewer. */\nexport interface SimpleBlockViewerParams extends CreatableProviderParams {\n finalizedArchivist: ReadArchivist\n}\n\n/** SimpleBlockViewer implementation. */\n@creatableProvider()\nexport class SimpleBlockViewer extends AbstractCreatableProvider<SimpleBlockViewerParams> implements BlockViewer {\n static readonly defaultMoniker = BlockViewerMoniker\n static readonly dependencies = [FinalizationViewerMoniker]\n static readonly monikers = [BlockViewerMoniker]\n moniker = SimpleBlockViewer.defaultMoniker\n\n protected _store?: ChainStoreRead\n protected dataLakeViewer?: DataLakeViewer\n protected finalizationViewer!: FinalizationViewer\n protected payloadCache = new LruCacheMap<Hash, WithHashMeta<Payload>>({ max: 10_000 })\n protected signedHydratedBlockWithDataLakePayloadsCache = new LruCacheMap<Hash, SignedHydratedBlockWithHashMeta>({ max: 2000, ttl: 1000 * 60 * 60 })\n\n private _signedHydratedBlockCache: HydratedCache<SignedHydratedBlockWithStorageMeta> | undefined\n\n get finalizedArchivist(): ReadArchivist {\n return this.params.finalizedArchivist\n }\n\n protected get hydratedBlockCache(): HydratedCache<SignedHydratedBlockWithStorageMeta> {\n if (this._signedHydratedBlockCache) return this._signedHydratedBlockCache\n const context = this.getBlockContextRead()\n this._signedHydratedBlockCache = new HydratedCache<SignedHydratedBlockWithStorageMeta>(context, async (\n context,\n hash: Hash,\n maxDepth?: number,\n minDepth?: number,\n ) => {\n const result = await hydrateBlock(context, hash, maxDepth, minDepth)\n return asSignedHydratedBlockWithStorageMeta(result, true)\n }, 20_000)\n return this._signedHydratedBlockCache\n }\n\n protected get store() {\n return this._store!\n }\n\n static override async paramsHandler(params: Partial<SimpleBlockViewerParams>) {\n return {\n ...await super.paramsHandler(params),\n finalizedArchivist: assertEx(params.finalizedArchivist, () => 'finalizedArchivist is required'),\n } satisfies SimpleBlockViewerParams\n }\n\n async blockByHash(hash: Hash): Promise<SignedHydratedBlockWithHashMeta | null> {\n return await this.spanAsync('blockByHash', async () => {\n const cachedBlock = this.signedHydratedBlockWithDataLakePayloadsCache.get(hash)\n if (cachedBlock) {\n return cachedBlock\n }\n\n const cache = this.hydratedBlockCache\n const block = await cache.get(hash)\n const [result] = block ? await addDataLakePayloads(block, this.dataLakeViewer) : [null, []]\n if (result) {\n this.signedHydratedBlockWithDataLakePayloadsCache.set(hash, result)\n }\n return result\n }, { ...this.context, timeBudgetLimit: 100 })\n }\n\n async blockByNumber(blockNumber: XL1BlockNumber): Promise<SignedHydratedBlockWithHashMeta | null> {\n return await this.spanAsync('blockByNumber', async () => {\n const chainContext = await this.getChainContextRead()\n if (isUndefined(chainContext.head)) {\n return null\n }\n return await this.blockByNumberWithContext(chainContext, blockNumber)\n }, { ...this.context, timeBudgetLimit: 100 })\n }\n\n async blocksByHash(hash: Hash, limit = 50): Promise<SignedHydratedBlockWithHashMeta[]> {\n return await this.spanAsync('blocksByHash', async () => {\n assertEx(limit > 0, () => 'limit must be greater than 0')\n assertEx(limit <= 100, () => 'limit must be less than 100')\n const blocks: SignedHydratedBlockWithHashMeta[] = []\n let current = await this.blockByHash(hash)\n while (current && blocks.length < limit) {\n blocks.push(current)\n const previousHash = current[0].previous\n if (previousHash === null) break\n current = await this.blockByHash(previousHash)\n }\n return blocks.map(b => asSignedHydratedBlockWithHashMeta(b, true))\n }, { ...this.context, timeBudgetLimit: 300 })\n }\n\n async blocksByNumber(blockNumber: XL1BlockNumber, limit = 50): Promise<SignedHydratedBlockWithHashMeta[]> {\n return await this.spanAsync('blocksByNumber', async () => {\n assertEx(limit > 0, () => 'limit must be greater than 0')\n assertEx(limit <= 100, () => 'limit must be less than 100')\n const chainContext = await this.getChainContextRead()\n if (isUndefined(chainContext.head)) {\n return []\n }\n const blocks: SignedHydratedBlockWithHashMeta[] = []\n let current = await this.blockByNumberWithContext(chainContext, blockNumber)\n while (current && blocks.length < limit) {\n blocks.push(current)\n if (current[0].block === 0) break\n const previousNumber = asXL1BlockNumber(current[0].block - 1, true)\n current = await this.blockByNumberWithContext(chainContext, previousNumber)\n }\n return blocks.map(b => asSignedHydratedBlockWithHashMeta(b, true))\n }, this.context)\n }\n\n chainId(): Promise<ChainId>\n chainId(blockNumber: XL1BlockNumber): Promise<ChainId>\n chainId(blockNumber: 'latest'): Promise<ChainId>\n async chainId(blockNumber: XL1BlockNumber | 'latest' = 'latest'): Promise<ChainId> {\n return await this.spanAsync('chainId', async () => {\n return blockNumber === 'latest' ? (await this.finalizationViewer.headBlock()).chain : assertEx((await this.blockByNumber(blockNumber)), () => `Block not found [${blockNumber}]`)[0].chain\n }, this.context)\n }\n\n override async createHandler() {\n await super.createHandler()\n this.dataLakeViewer = await this.locator.tryGetInstance<DataLakeViewer>(DataLakeViewerMoniker)\n this.finalizationViewer = await this.locator.getInstance<FinalizationViewer>(FinalizationViewerMoniker)\n this._store = { chainMap: this.params.finalizedArchivist }\n }\n\n async currentBlock(): Promise<SignedHydratedBlockWithHashMeta> {\n const [result] = await addDataLakePayloads(await this.finalizationViewer.head(), this.dataLakeViewer)\n return result\n }\n\n async currentBlockHash(): Promise<Hash> {\n return await this.finalizationViewer.headHash()\n }\n\n async currentBlockNumber(): Promise<XL1BlockNumber> {\n return await this.finalizationViewer.headNumber()\n }\n\n async payloadByHash(hash: Hash): Promise<WithHashMeta<Payload> | null> {\n const [payload] = await this.payloadsByHash([hash])\n return payload ?? null\n }\n\n async payloadsByHash(hashes: Hash[]): Promise<WithHashMeta<Payload>[]> {\n let remainingHashes = [...hashes]\n const cachedPayloads = this.payloadCache.getMany(remainingHashes)\n const cachedHashes = new Set(cachedPayloads.map(p => p._hash))\n remainingHashes = remainingHashes.filter(h => !cachedHashes.has(h))\n const finalizedPayloads = remainingHashes.length > 0\n ? await this.finalizedArchivist.get(remainingHashes)\n : []\n const [resultPayloads] = await addDataLakePayloadsToPayloads(hashes, [...cachedPayloads, ...finalizedPayloads.filter(exists)], this.dataLakeViewer)\n resultPayloads.map((payload) => {\n this.payloadCache.set(payload._hash, payload)\n })\n return resultPayloads\n }\n\n async rate(range: XL1BlockRange, timeUnit?: keyof TimeDurations): Promise<BlockRate> {\n return await calculateBlockRate(this, range, timeUnit)\n }\n\n async stepSizeRate(start: XL1BlockNumber, stepIndex: number, count = 1, timeUnit?: keyof TimeDurations): Promise<BlockRate> {\n return await calculateStepSizeRate(this, start, stepIndex, count, timeUnit)\n }\n\n async timeDurationRate(\n timeConfig: SingleTimeConfig,\n startBlockNumber?: XL1BlockNumber,\n timeUnit?: keyof TimeDurations,\n toleranceMs?: number,\n maxAttempts?: number,\n ): Promise<BlockRate> {\n return await calculateTimeRate(this, timeConfig, startBlockNumber, timeUnit, toleranceMs, maxAttempts)\n }\n\n protected getBlockContextRead(): BlockContextRead {\n return {\n ...this.context,\n chainMap: this.store.chainMap,\n }\n }\n\n protected async getChainContextRead(): Promise<ChainContextRead> {\n return {\n ...this.getBlockContextRead(),\n head: (await this.finalizationViewer.head())[0],\n }\n }\n\n private async blockByNumberWithContext(\n chainContext: ChainContextRead,\n blockNumber: XL1BlockNumber,\n ): Promise<SignedHydratedBlockWithHashMeta | null> {\n const block = asSignedHydratedBlockWithHashMeta(await hydratedBlockByNumber(chainContext, blockNumber)) ?? null\n const [result] = block ? await addDataLakePayloads(block, this.dataLakeViewer) : [null, []]\n return result\n }\n}\n","import type { Hash } from '@xylabs/sdk-js'\nimport type { BlockContextRead } from '@xyo-network/xl1-protocol-lib'\nimport { LRUCache } from 'lru-cache'\n\n/** Function type for Hydrate operations. */\nexport type HydrateFunction<T> = (\n context: BlockContextRead,\n hash: Hash,\n) => Promise<T | undefined>\n\n/** HydratedCache implementation. */\nexport class HydratedCache<T extends {}> {\n protected readonly cache: LRUCache<Hash, T>\n protected context: BlockContextRead\n protected readonly hydrateFunction: HydrateFunction<T>\n\n constructor(\n context: BlockContextRead,\n hydrateFunction: HydrateFunction<T>,\n maxCount: number = 2000,\n ttl: number = Number.MAX_SAFE_INTEGER,\n ) {\n this.context = context\n this.hydrateFunction = hydrateFunction\n this.cache = new LRUCache<Hash, T>({ max: maxCount, ttl })\n }\n\n async get(hash: Hash): Promise<T | null> {\n const existing = this.cache.get(hash)\n if (existing !== undefined) return existing\n const block = (await this.hydrateFunction(this.context, hash)) ?? null\n if (block !== null) this.cache.set(hash, block)\n return block\n }\n\n has(hash: Hash): boolean {\n return this.cache.has(hash)\n }\n}\n","import { z } from 'zod'\n\n/** Type guard that checks if a value is a valid ZodError. */\nexport const isZodError = (error: unknown): error is z.ZodError => {\n return error instanceof z.ZodError\n}\n\n/** prettifyZodError constant. */\nexport const prettifyZodError = (error: z.ZodError): string => {\n return z.prettifyError(error)\n}\n","import { Promisable } from '@xylabs/sdk-js'\nimport {\n AttoXL1, BlockRewardViewer, BlockRewardViewerMoniker, XL1BlockNumber,\n} from '@xyo-network/xl1-protocol-lib'\n\nimport {\n AbstractCreatableProvider, creatableProvider, CreatableProviderParams,\n} from '../../CreatableProvider/index.ts'\nimport { rewardFromBlockNumber } from '../../primitives/index.ts'\n\n/** Parameters for SimpleBlockRewardViewer. */\nexport interface SimpleBlockRewardViewerParams extends CreatableProviderParams {}\n\n/** SimpleBlockRewardViewer implementation. */\n@creatableProvider()\nexport class SimpleBlockRewardViewer extends AbstractCreatableProvider<SimpleBlockRewardViewerParams> implements BlockRewardViewer {\n static readonly defaultMoniker = BlockRewardViewerMoniker\n static readonly dependencies = []\n static readonly monikers = [BlockRewardViewerMoniker]\n moniker = SimpleBlockRewardViewer.defaultMoniker\n\n allowedRewardForBlock(block: XL1BlockNumber): Promisable<AttoXL1> {\n return rewardFromBlockNumber(\n block,\n )\n }\n}\n","import { assertEx, Promisable } from '@xylabs/sdk-js'\nimport { PayloadBuilder } from '@xyo-network/sdk-js'\nimport {\n AccountBalanceViewer,\n AccountBalanceViewerMoniker,\n asXL1BlockRange,\n BlockValidationConfig,\n BlockValidationQualification,\n BlockValidationViewer,\n BlockValidationViewerMoniker,\n BlockViewer,\n BlockViewerMoniker,\n ChainContractViewer,\n ChainContractViewerMoniker,\n ChainId,\n HydratedBlockStateValidationFunction,\n HydratedBlockValidationError,\n HydratedBlockValidationFunction,\n isChainQualifiedHeadConfig,\n isHydratedBlock,\n SignedHydratedBlock,\n type SignedHydratedBlockWithHashMeta,\n XL1BlockNumber,\n} from '@xyo-network/xl1-protocol-lib'\n\nimport type { CreatableProviderParams } from '../../CreatableProvider/index.ts'\nimport { AbstractCreatableProvider, creatableProvider } from '../../CreatableProvider/index.ts'\nimport { findUncles, getWindowedChain } from '../../primitives/index.ts'\n\n/** Parameters for SimpleBlockValidationViewer. */\nexport interface SimpleBlockValidationViewerParams extends CreatableProviderParams {\n maxUncleWindowSize?: number\n protocol?: HydratedBlockValidationFunction\n state?: HydratedBlockStateValidationFunction\n}\n\n/** SimpleBlockValidationViewer implementation. */\n@creatableProvider()\nexport class SimpleBlockValidationViewer extends AbstractCreatableProvider<SimpleBlockValidationViewerParams> implements BlockValidationViewer {\n static readonly defaultMoniker = BlockValidationViewerMoniker\n static readonly dependencies = [AccountBalanceViewerMoniker, BlockViewerMoniker, ChainContractViewerMoniker]\n static readonly monikers = [BlockValidationViewerMoniker]\n moniker = SimpleBlockValidationViewer.defaultMoniker\n\n private _accountBalanceViewer!: AccountBalanceViewer\n private _blockViewer!: BlockViewer\n private _chainContractViewer!: ChainContractViewer\n private _uncleWindowedChainCache: SignedHydratedBlockWithHashMeta[] | null = null\n\n protected get blockViewer() {\n return this._blockViewer\n }\n\n protected get chainContractViewer() {\n return this._chainContractViewer\n }\n\n protected get maxUncleWindowSize() {\n return this.params.maxUncleWindowSize!\n }\n\n static override async paramsHandler(params: Partial<SimpleBlockValidationViewerParams>): Promise<SimpleBlockValidationViewerParams> {\n return {\n ...await super.paramsHandler(params),\n protocol: params.protocol,\n state: params.state,\n maxUncleWindowSize: params.maxUncleWindowSize ?? 100,\n } satisfies SimpleBlockValidationViewerParams\n }\n\n override async createHandler() {\n await super.createHandler()\n this._accountBalanceViewer = await this.locator.getInstance<AccountBalanceViewer>(AccountBalanceViewerMoniker)\n this._blockViewer = await this.locator.getInstance<BlockViewer>(BlockViewerMoniker)\n this._chainContractViewer = await this.locator.getInstance<ChainContractViewer>(ChainContractViewerMoniker)\n }\n\n async qualifiedValidateBlock(\n block: SignedHydratedBlockWithHashMeta,\n config?: BlockValidationConfig,\n ): Promise<[HydratedBlockValidationError[] | SignedHydratedBlockWithHashMeta, BlockValidationQualification]> {\n const result = (await this.qualifiedValidateBlocks([block], config))\n return [result[0][0], result[1]]\n }\n\n async qualifiedValidateBlocks(\n blocks: SignedHydratedBlock[],\n config?: BlockValidationConfig,\n ): Promise<[(HydratedBlockValidationError[] | SignedHydratedBlockWithHashMeta)[], BlockValidationQualification]> {\n const { value, state } = config ?? {\n shape: true, links: true, state: true, head: undefined,\n }\n\n const blocksWithMeta = await Promise.all(blocks.map(b => Promise.all([PayloadBuilder.addHashMeta(b[0]), PayloadBuilder.addHashMeta(b[1])])))\n\n const head = isChainQualifiedHeadConfig(config)\n ? assertEx(\n (await this.blockViewer.blockByHash(config.head))?.[0],\n () => `Specified a head that is not in the chain [${config.head}]`,\n )\n : undefined\n\n const headBlock = head ?? (await this.blockViewer.currentBlock())[0]\n\n const validateProtocol = value ? this.doValidateProtocol.bind(this) : undefined\n const validateState = state ? this.doValidateState.bind(this) : undefined\n\n const chainIdAtBlockNumber = (blockNumber: XL1BlockNumber) => this.chainContractViewer.chainIdAtBlockNumber(blockNumber)\n\n const qualification = { head: headBlock._hash, range: asXL1BlockRange([0, headBlock.block], true) }\n const [protocolResults, stateResults] = await Promise.all([\n validateProtocol?.(blocksWithMeta, chainIdAtBlockNumber), validateState?.(blocksWithMeta, chainIdAtBlockNumber),\n ])\n const blockResults = blocksWithMeta.map((r, i) => {\n const errors = []\n if (protocolResults && !isHydratedBlock(protocolResults[i])) {\n errors.push(...(protocolResults[i]))\n }\n if (stateResults && !isHydratedBlock(stateResults[i])) {\n errors.push(...(stateResults[i]))\n }\n return errors.length === 0 ? r : errors\n })\n return [blockResults, qualification]\n }\n\n qualifiedValidateUncle(\n _blocks: SignedHydratedBlock[],\n _config?: BlockValidationConfig,\n ): Promise<[(HydratedBlockValidationError[] | SignedHydratedBlockWithHashMeta)[], BlockValidationQualification]> {\n throw new Error('Method not implemented.')\n }\n\n async validateBlock(block: SignedHydratedBlock, config?: BlockValidationConfig): Promise<HydratedBlockValidationError[] | SignedHydratedBlockWithHashMeta> {\n return (await this.validateBlocks([block], config))[0]\n }\n\n async validateBlocks(\n blocks: SignedHydratedBlock[],\n config?: BlockValidationConfig,\n ): Promise<(HydratedBlockValidationError[] | SignedHydratedBlockWithHashMeta)[]> {\n return (await this.qualifiedValidateBlocks(blocks, config))[0]\n }\n\n async validateUncle(\n blocks: SignedHydratedBlock[],\n config?: BlockValidationConfig,\n ): Promise<(HydratedBlockValidationError[] | SignedHydratedBlockWithHashMeta)[]> {\n return (await this.qualifiedValidateUncle(blocks, config))[0]\n }\n\n private async doValidateProtocol(\n blocks: SignedHydratedBlockWithHashMeta[],\n chainIdAtBlockNumber: (blockNumber: XL1BlockNumber) => Promisable<ChainId>,\n ): Promise<(SignedHydratedBlockWithHashMeta | HydratedBlockValidationError[])[]> {\n return (await Promise.all(blocks.map(async (block) => {\n const errors = await this.params.protocol!(\n this.context,\n block,\n chainIdAtBlockNumber,\n )\n return (errors.length === 0) ? block : errors\n })))\n }\n\n private async doValidateState(\n blocks: SignedHydratedBlockWithHashMeta[],\n chainIdAtBlockNumber: (blockNumber: XL1BlockNumber) => Promisable<ChainId>,\n ): Promise<(SignedHydratedBlockWithHashMeta | HydratedBlockValidationError[])[]> {\n const windowedUncleChain = await this.updateWindowedChainCache()\n\n const uncles = findUncles(this.context, windowedUncleChain, blocks)\n\n if (uncles.length !== 1) {\n this.logger?.warn(JSON.stringify({ uncles, blocks: blocks.length }, null, 2))\n // this.logger?.warn(JSON.stringify(windowedUncleChain, null, 2))\n throw new Error(`No uncles or greater than one uncle found in block validation, which is not supported [${uncles.length}, ${blocks.length}]`)\n }\n return (await Promise.all(uncles[0].map(async (block) => {\n const errors = await this.params.state!(\n {\n ...this.context, chainIdAtBlockNumber, accountBalance: this._accountBalanceViewer,\n },\n block,\n )\n return (errors.length === 0) ? block : errors\n })))\n }\n\n private async updateWindowedChainCache() {\n this._uncleWindowedChainCache = await getWindowedChain(this.context, this.blockViewer, this.maxUncleWindowSize, this._uncleWindowedChainCache ?? [])\n return [...this._uncleWindowedChainCache]\n }\n}\n","import {\n type Address, assertEx,\n type Hash,\n} from '@xylabs/sdk-js'\nimport {\n ChainContractViewer, ChainContractViewerMoniker, ChainId, FinalizationViewer, FinalizationViewerMoniker, XL1BlockNumber,\n} from '@xyo-network/xl1-protocol-lib'\n\nimport { withContextCacheResponse } from '../../ChainContextHelpers.ts'\nimport {\n AbstractCreatableProvider, creatableProvider, CreatableProviderParams,\n} from '../../CreatableProvider/index.ts'\n\n/** Parameters for SimpleChainContractViewer. */\nexport interface SimpleChainContractViewerParams extends CreatableProviderParams {\n forkedAtBlockNumber?: XL1BlockNumber\n forkedAtHash?: Hash\n forkedChainContractViewer?: ChainContractViewer\n forkedChainId?: ChainId\n minWithdrawalBlocks: number\n rewardsContract: Address\n stakingTokenAddress: Address\n}\n\n/**\n * A class that represents a chain stake as backed by an EVM smart contract\n */\n@creatableProvider()\nexport class SimpleChainContractViewer extends AbstractCreatableProvider<SimpleChainContractViewerParams> implements ChainContractViewer {\n static readonly defaultMoniker = ChainContractViewerMoniker\n static readonly dependencies = [FinalizationViewerMoniker]\n static readonly monikers = [ChainContractViewerMoniker]\n override moniker = SimpleChainContractViewer.defaultMoniker\n\n protected _finalizationViewer!: FinalizationViewer\n\n protected get finalizationViewer() {\n return this._finalizationViewer\n }\n\n chainId() {\n return this.finalizationViewer.chainId()\n }\n\n async chainIdAtBlockNumber(blockNumber: XL1BlockNumber) {\n return await withContextCacheResponse(this.context, 'chainIdAtBlockNumber', `${blockNumber}`, async () => {\n let chainId = this.chainId()\n // eslint-disable-next-line unicorn/no-this-assignment, @typescript-eslint/no-this-alias\n let contractViewer: ChainContractViewer = this\n let forkedAtBlockNumber = await contractViewer.forkedAtBlockNumber()\n while (forkedAtBlockNumber !== null && blockNumber <= forkedAtBlockNumber) {\n contractViewer = assertEx(await contractViewer.forkedChainContractViewer())\n forkedAtBlockNumber = await contractViewer.forkedAtBlockNumber()\n chainId = await contractViewer.chainId()\n }\n return chainId\n })\n }\n\n override async createHandler() {\n this._finalizationViewer = await this.locator.getInstance(FinalizationViewerMoniker)\n return await super.createHandler()\n }\n\n forkedAtBlockNumber() {\n return this.params.forkedAtBlockNumber ?? null\n }\n\n forkedAtHash() {\n return this.params.forkedAtHash ?? null\n }\n\n forkedChainContractViewer() {\n return this.params.forkedChainContractViewer ?? null\n }\n\n forkedChainId() {\n return this.params.forkedChainId ?? null\n }\n\n minWithdrawalBlocks() {\n return this.params.minWithdrawalBlocks\n }\n\n rewardsContract() {\n return this.params.rewardsContract\n }\n\n stakingTokenAddress() {\n return this.params.stakingTokenAddress\n }\n}\n","import type {\n XyoClient, XyoGatewayRunner, XyoPermissions,\n} from '@xyo-network/xl1-protocol-lib'\n\n/** SimpleXyoClient implementation. */\nexport class SimpleXyoClient implements XyoClient {\n gateways: Readonly<Partial<Record<string, XyoGatewayRunner>>>\n permissions: XyoPermissions\n\n constructor(gateways: Readonly<Partial<Record<string, XyoGatewayRunner>>>, permissions: XyoPermissions) {\n this.gateways = gateways\n this.permissions = permissions\n }\n}\n","import {\n assertEx, BrandedHash, exists, type Hash,\n Promisable,\n PromisableArray,\n} from '@xylabs/sdk-js'\nimport { isAnyPayload, PayloadZodLoose } from '@xyo-network/sdk-js'\nimport {\n DataLakeData,\n DataLakeRunner,\n DataLakeRunnerMoniker,\n} from '@xyo-network/xl1-protocol-lib'\nimport { AxiosResponse } from 'axios'\nimport z from 'zod'\n\nimport { creatableProvider } from '../../CreatableProvider/index.ts'\nimport { AbstractRestDataLake } from './AbstractRestDataLake.ts'\nimport { RestDataLakeViewerParams } from './RestDataLakeViewer.ts'\n\n/** Parameters for RestDataLakeRunner. */\nexport interface RestDataLakeRunnerParams extends RestDataLakeViewerParams {}\n\n/** RestDataLakeRunner implementation. */\n@creatableProvider()\nexport class RestDataLakeRunner<TParams extends RestDataLakeRunnerParams> extends\n AbstractRestDataLake<TParams> implements DataLakeRunner {\n static readonly defaultMoniker = DataLakeRunnerMoniker\n static readonly dependencies = []\n static readonly monikers = [DataLakeRunnerMoniker]\n moniker = RestDataLakeRunner.defaultMoniker\n\n clear(): Promisable<void> {\n throw new Error('Method not implemented.')\n }\n\n delete(_hashes: BrandedHash[]): PromisableArray<DataLakeData> {\n throw new Error('Method not implemented.')\n }\n\n async insert(items: DataLakeData[]): Promise<DataLakeData[]> {\n const allowedItems = items.map((item) => {\n if (isAnyPayload(item) && this.isAllowed(item)) {\n assertEx(typeof item === 'object' && item !== null, () => 'Data must be an object')\n return item\n }\n return null\n }).filter(exists)\n if (allowedItems.length > 0) {\n const result = await this.axios.post<DataLakeData[], AxiosResponse<Hash[]>>(`${this.params.endpoint}/insert`, allowedItems)\n return z.array(PayloadZodLoose).parse(result.data)\n } else {\n return []\n }\n }\n}\n","import { axiosJsonConfig } from '@xylabs/sdk-js'\nimport {\n exists, type Hash, type PromisableArray,\n} from '@xylabs/sdk-js'\nimport type {\n NextOptions, Schema, Sequence,\n} from '@xyo-network/sdk-js'\nimport { asAnyPayload, isAnyPayload } from '@xyo-network/sdk-js'\nimport type { DataLakeData, DataLakeViewer } from '@xyo-network/xl1-protocol-lib'\nimport { Axios } from 'axios'\n\nimport { AbstractCreatableProvider, type CreatableProviderParams } from '../../CreatableProvider/index.ts'\n\n/** Parameters for AbstractRestDataLake. */\nexport interface AbstractRestDataLakeParams extends\n CreatableProviderParams {\n\n allowedSchemas?: Schema[]\n disallowedSchemas?: Schema[]\n endpoint: string\n}\n\n/** Abstract base class for RestDataLake implementations. */\nexport abstract class AbstractRestDataLake<TParams extends AbstractRestDataLakeParams = AbstractRestDataLakeParams> extends\n AbstractCreatableProvider<TParams> implements Omit<DataLakeViewer, 'moniker'> {\n get allowedSchemas(): Schema[] | undefined {\n return this.params.allowedSchemas\n }\n\n get axios() {\n return new Axios(axiosJsonConfig())\n }\n\n get disallowedSchemas(): Schema[] | undefined {\n return this.params.disallowedSchemas\n }\n\n get endpoint() {\n return this.params.endpoint\n }\n\n async get(hashes: Hash[]): Promise<DataLakeData[]> {\n return (await Promise.all(hashes.map(hash => this.getOne(hash)))).filter(exists)\n }\n\n next(_options?: NextOptions<Sequence> | undefined): PromisableArray<DataLakeData> {\n throw new Error('Method not implemented.')\n }\n\n protected async getOne(hash: Hash): Promise<DataLakeData | undefined> {\n return asAnyPayload((await this.axios.get(`${this.params.endpoint}/get/${hash}`)).data)\n }\n\n protected isAllowed(value: DataLakeData | undefined): boolean {\n if (isAnyPayload(value)) {\n return this.isAllowedSchema(value.schema)\n }\n return false\n }\n\n protected isAllowedSchema(schema: Schema): boolean {\n if (this.allowedSchemas && !this.allowedSchemas.includes(schema)) {\n return false\n }\n if (this.disallowedSchemas && this.disallowedSchemas.includes(schema)) {\n return false\n }\n return true\n }\n}\n","import {\n DataLakeViewer,\n DataLakeViewerMoniker,\n} from '@xyo-network/xl1-protocol-lib'\n\nimport { creatableProvider } from '../../CreatableProvider/index.ts'\nimport { AbstractRestDataLake, AbstractRestDataLakeParams } from './AbstractRestDataLake.ts'\n\n/** Parameters for RestDataLakeViewer. */\nexport interface RestDataLakeViewerParams extends\n AbstractRestDataLakeParams {\n}\n\n/** RestDataLakeViewer implementation. */\n@creatableProvider()\nexport class RestDataLakeViewer<TParams extends RestDataLakeViewerParams = RestDataLakeViewerParams>\n extends AbstractRestDataLake<TParams> implements DataLakeViewer {\n static readonly defaultMoniker = DataLakeViewerMoniker\n static readonly dependencies = []\n static readonly monikers = [DataLakeViewerMoniker]\n moniker = RestDataLakeViewer.defaultMoniker\n}\n","import { exists, type Hash } from '@xylabs/sdk-js'\nimport { isAnyPayload, PayloadBuilder } from '@xyo-network/sdk-js'\nimport {\n DataLakeData,\n DataLakeRunner,\n DataLakeRunnerMoniker, MapType,\n} from '@xyo-network/xl1-protocol-lib'\n\nimport { creatableProvider } from '../../CreatableProvider/index.ts'\nimport { AbstractSimpleDataLake } from './AbstractSimpleDataLake.ts'\nimport { SimpleDataLakeViewerParams } from './SimpleDataLakeViewer.ts'\n\n/** Parameters for SimpleDataLakeRunner. */\nexport interface SimpleDataLakeRunnerParams extends SimpleDataLakeViewerParams<MapType<Hash, DataLakeData>> {}\n\n/** SimpleDataLakeRunner implementation. */\n@creatableProvider()\nexport class SimpleDataLakeRunner<TParams extends SimpleDataLakeRunnerParams> extends\n AbstractSimpleDataLake<TParams> implements DataLakeRunner {\n static readonly defaultMoniker = DataLakeRunnerMoniker\n static readonly dependencies = []\n static readonly monikers = [DataLakeRunnerMoniker]\n moniker = SimpleDataLakeRunner.defaultMoniker\n\n async clear(): Promise<void> {\n await this.map.clear()\n }\n\n async delete(hashes: Hash[]) {\n return (await Promise.all(hashes.map(async (hash) => {\n const payload = await this.map.get(hash)\n return (await this.map.delete(hash)) ? payload : undefined\n }))).filter(exists)\n }\n\n async insert(items: DataLakeData[]) {\n const payloads = items.filter(isAnyPayload).filter(i => this.isAllowed(i))\n const hashPairs = await PayloadBuilder.hashPairs(payloads)\n for (const [payload, hash] of hashPairs) {\n await this.map.set(hash, payload)\n }\n return hashPairs.map(([payload]) => payload)\n }\n}\n","import type { Hash, PromisableArray } from '@xylabs/sdk-js'\nimport type {\n NextOptions, Schema, Sequence,\n} from '@xyo-network/sdk-js'\nimport { isAnyPayload } from '@xyo-network/sdk-js'\nimport type {\n DataLakeData, DataLakeViewer, MapTypeRead,\n} from '@xyo-network/xl1-protocol-lib'\n\nimport { AbstractCreatableProvider, type CreatableProviderParams } from '../../CreatableProvider/index.ts'\n\n/** Parameters for AbstractSimpleDataLake. */\nexport interface AbstractSimpleDataLakeParams<TMap extends\nMapTypeRead<Hash, DataLakeData> = MapTypeRead<Hash, DataLakeData>> extends\n CreatableProviderParams {\n\n allowedSchemas?: Schema[]\n disallowedSchemas?: Schema[]\n map: TMap\n}\n\n/** Abstract base class for SimpleDataLake implementations. */\nexport abstract class AbstractSimpleDataLake<TParams extends AbstractSimpleDataLakeParams = AbstractSimpleDataLakeParams> extends\n AbstractCreatableProvider<TParams> implements Omit<DataLakeViewer, 'moniker'> {\n get allowedSchemas(): Schema[] | undefined {\n return this.params.allowedSchemas\n }\n\n get disallowedSchemas(): Schema[] | undefined {\n return this.params.disallowedSchemas\n }\n\n protected get map(): TParams['map'] {\n return this.params.map\n }\n\n async get(hashes: Hash[]): Promise<DataLakeData[]> {\n const result = await this.map.getMany(hashes)\n return result.filter(data => this.isAllowed(data))\n }\n\n next(_options?: NextOptions<Sequence> | undefined): PromisableArray<DataLakeData> {\n throw new Error('Method not implemented.')\n }\n\n protected isAllowed(value: DataLakeData | undefined): boolean {\n if (isAnyPayload(value)) {\n return this.isAllowedSchema(value.schema)\n }\n return true\n }\n\n protected isAllowedSchema(schema: Schema): boolean {\n if (this.allowedSchemas && !this.allowedSchemas.includes(schema)) {\n return false\n }\n if (this.disallowedSchemas && this.disallowedSchemas.includes(schema)) {\n return false\n }\n return true\n }\n}\n","import type { Hash } from '@xylabs/sdk-js'\nimport {\n DataLakeData,\n DataLakeViewer,\n DataLakeViewerMoniker, MapTypeRead,\n} from '@xyo-network/xl1-protocol-lib'\n\nimport { creatableProvider } from '../../CreatableProvider/index.ts'\nimport { AbstractSimpleDataLake, AbstractSimpleDataLakeParams } from './AbstractSimpleDataLake.ts'\n\n/** Parameters for SimpleDataLakeViewer. */\nexport interface SimpleDataLakeViewerParams<TMap extends MapTypeRead<Hash, DataLakeData> = MapTypeRead<Hash, DataLakeData>> extends\n AbstractSimpleDataLakeParams<TMap> {\n}\n\n/** SimpleDataLakeViewer implementation. */\n@creatableProvider()\nexport class SimpleDataLakeViewer<TParams extends SimpleDataLakeViewerParams = SimpleDataLakeViewerParams>\n extends AbstractSimpleDataLake<TParams> implements DataLakeViewer {\n static readonly defaultMoniker = DataLakeViewerMoniker\n static readonly dependencies = []\n static readonly monikers = [DataLakeViewerMoniker]\n moniker = SimpleDataLakeViewer.defaultMoniker\n}\n","import { type Hash } from '@xylabs/sdk-js'\nimport type { ArchivistInstance } from '@xyo-network/sdk-js'\nimport { type SignedHydratedBlockWithHashMeta } from '@xyo-network/xl1-protocol-lib'\nimport { FinalizationRunner, FinalizationRunnerMoniker } from '@xyo-network/xl1-protocol-lib'\n\nimport {\n AbstractCreatableProvider, creatableProvider, CreatableProviderParams,\n} from '../../CreatableProvider/index.ts'\nimport { ChainStoreWrite } from '../../model/index.ts'\n\n/** Parameters for SimpleFinalizationRunner. */\nexport interface SimpleFinalizationRunnerParams extends CreatableProviderParams {\n finalizedArchivist: ArchivistInstance\n}\n\n/** SimpleFinalizationRunner implementation. */\n@creatableProvider()\nexport class SimpleFinalizationRunner extends AbstractCreatableProvider<SimpleFinalizationRunnerParams> implements FinalizationRunner {\n static readonly defaultMoniker = FinalizationRunnerMoniker\n static readonly dependencies = []\n static readonly monikers = [FinalizationRunnerMoniker]\n moniker = SimpleFinalizationRunner.defaultMoniker\n\n protected _store: ChainStoreWrite | undefined\n\n protected get store() {\n return this._store!\n }\n\n override async createHandler() {\n await super.createHandler()\n this._store = { chainMap: this.params.finalizedArchivist }\n }\n\n async finalizeBlock(block: SignedHydratedBlockWithHashMeta): Promise<Hash> {\n return (await this.finalizeBlocks([block]))[0]\n }\n\n async finalizeBlocks(blocks: SignedHydratedBlockWithHashMeta[]): Promise<Hash[]> {\n const sortedBlocks = blocks.toSorted((a, b) => a[0].block - b[0].block)\n const payloads = sortedBlocks.flatMap(block => [...block[1], block[0]])\n await this.store.chainMap.insert(payloads)\n return sortedBlocks.map(b => b[0]._hash)\n }\n}\n","import {\n assertEx,\n Hash,\n} from '@xylabs/sdk-js'\nimport type { ReadArchivist } from '@xyo-network/sdk-js'\nimport {\n asSignedHydratedBlockWithStorageMeta, BlockContextRead, ChainContextRead, ChainContractViewerMoniker, ChainId, FinalizationViewer,\n FinalizationViewerMoniker, type SignedBlockBoundWitnessWithHashMeta, type SignedHydratedBlockWithHashMeta,\n SignedHydratedBlockWithStorageMeta,\n XL1BlockNumber,\n} from '@xyo-network/xl1-protocol-lib'\n\nimport { hydrateBlock } from '../../block/index.ts'\nimport {\n AbstractCreatableProvider, creatableProvider, CreatableProviderParams,\n} from '../../CreatableProvider/index.ts'\nimport { ChainStoreRead } from '../../model/index.ts'\nimport { findMostRecentBlock } from '../../primitives/index.ts'\nimport { HydratedCache } from '../../utils/index.ts'\n\n/** Parameters for SimpleFinalizationViewer. */\nexport interface SimpleFinalizationViewerParams extends CreatableProviderParams {\n finalizedArchivist: ReadArchivist\n}\n\n/** SimpleFinalizationViewer implementation. */\n@creatableProvider()\nexport class SimpleFinalizationViewer extends AbstractCreatableProvider<SimpleFinalizationViewerParams> implements FinalizationViewer {\n static readonly defaultMoniker = FinalizationViewerMoniker\n static readonly dependencies = [ChainContractViewerMoniker]\n static readonly monikers = [FinalizationViewerMoniker]\n moniker = SimpleFinalizationViewer.defaultMoniker\n\n protected _chainId!: ChainId\n protected _store: ChainStoreRead | undefined\n\n private _signedHydratedBlockCache: HydratedCache<SignedHydratedBlockWithStorageMeta> | undefined\n\n protected get finalizedArchivist() {\n return this.params.finalizedArchivist\n }\n\n protected get hydratedBlockCache(): HydratedCache<SignedHydratedBlockWithStorageMeta> {\n if (this._signedHydratedBlockCache) return this._signedHydratedBlockCache\n const context = this.getBlockContextRead()\n this._signedHydratedBlockCache = new HydratedCache<SignedHydratedBlockWithStorageMeta>(context, async (\n store: ChainStoreRead,\n hash: Hash,\n maxDepth?: number,\n minDepth?: number,\n ) => {\n const result = await hydrateBlock(context, hash, maxDepth, minDepth)\n return asSignedHydratedBlockWithStorageMeta(result, true)\n }, 200)\n return this._signedHydratedBlockCache\n }\n\n protected get store() {\n return this._store!\n }\n\n static override async paramsHandler(params: Partial<SimpleFinalizationViewerParams>) {\n return {\n ...await super.paramsHandler(params),\n finalizedArchivist: assertEx(params.finalizedArchivist, () => 'finalizedArchivist is required'),\n } satisfies SimpleFinalizationViewerParams\n }\n\n chainId() {\n return this._chainId\n }\n\n override async createHandler() {\n await super.createHandler()\n this._chainId = assertEx(this.config.chain.id ?? (await findMostRecentBlock(this.params.finalizedArchivist))?.chain, () => 'chain.id is required if empty archivist')\n this._store = { chainMap: this.params.finalizedArchivist }\n }\n\n async head(): Promise<SignedHydratedBlockWithHashMeta> {\n return await this.spanAsync('head', async () => {\n const currentHead = assertEx(await this.getCurrentHead(), () => 'Could not find most recent block [currentBlock]')\n const cache = this.hydratedBlockCache\n const block = await cache.get(currentHead._hash)\n if (!block) {\n console.log(`Could not find current block with hash ${currentHead!._hash}`)\n }\n return assertEx(block, () => 'Could not find current block')\n }, this.context)\n }\n\n async headBlock(): Promise<SignedBlockBoundWitnessWithHashMeta> {\n return (await this.head())[0]\n }\n\n async headHash(): Promise<Hash> {\n return (await this.headBlock())._hash\n }\n\n async headNumber(): Promise<XL1BlockNumber> {\n return (await this.headBlock()).block\n }\n\n protected getBlockContextRead(): BlockContextRead {\n return {\n ...this.context,\n chainMap: this.store.chainMap,\n }\n }\n\n protected async getChainContextRead(): Promise<ChainContextRead> {\n return {\n ...this.getBlockContextRead(),\n head: (await this.head())[0],\n }\n }\n\n protected async getCurrentHead() {\n const chainArchivist = this.finalizedArchivist\n const result = assertEx(await findMostRecentBlock(chainArchivist), () => 'Could not find most recent block [getCurrentHead]')\n assertEx(result?.chain === this._chainId, () => 'Chain ID does not match head block chain ID')\n return result\n }\n}\n","import type {\n XyoConnection,\n XyoGateway,\n} from '@xyo-network/xl1-protocol-lib'\nimport { XyoConnectionMoniker, XyoGatewayMoniker } from '@xyo-network/xl1-protocol-lib'\n\nimport type { CreatableProviderParams } from '../../CreatableProvider/index.ts'\nimport { AbstractCreatableProvider } from '../../CreatableProvider/index.ts'\n\n/** Parameters for SimpleXyoGateway. */\nexport interface SimpleXyoGatewayParams extends CreatableProviderParams {}\n\n/** SimpleXyoGateway implementation. */\nexport class SimpleXyoGateway extends AbstractCreatableProvider<SimpleXyoGatewayParams> implements XyoGateway {\n static readonly defaultMoniker = XyoGatewayMoniker\n static readonly dependencies = [XyoConnectionMoniker]\n static readonly monikers = [XyoGatewayMoniker]\n moniker = SimpleXyoGateway.defaultMoniker\n\n private _connection!: XyoConnection\n\n get connection(): XyoConnection {\n return this._connection\n }\n\n override async createHandler() {\n await super.createHandler()\n this._connection = await this.locator.getInstance<XyoConnection>(XyoConnectionMoniker)\n }\n}\n","import type {\n Address, Hash, Hex,\n} from '@xylabs/sdk-js'\nimport {\n assertEx, BigIntToJsonZod, isDefined,\n} from '@xylabs/sdk-js'\nimport { type Payload, type WithHashMeta } from '@xyo-network/sdk-js'\nimport { PayloadBuilder } from '@xyo-network/sdk-js'\nimport type {\n AllowedBlockPayload, AttoXL1, ConfirmSubmittedTransactionOptions,\n DataLakeRunner, SignedHydratedTransaction, SignedHydratedTransactionWithHashMeta, TransactionOptions, Transfer, UnsignedHydratedTransaction,\n XyoConnection, XyoGatewayRunner, XyoSigner,\n} from '@xyo-network/xl1-protocol-lib'\nimport {\n asXL1BlockNumber, DataLakeRunnerMoniker, isSignedHydratedTransaction, TransferSchema, XyoConnectionMoniker, XyoGatewayMoniker, XyoGatewayRunnerMoniker, XyoSignerMoniker,\n} from '@xyo-network/xl1-protocol-lib'\n\nimport type { CreatableProviderParams } from '../../CreatableProvider/index.ts'\nimport { AbstractCreatableProvider } from '../../CreatableProvider/index.ts'\nimport {\n buildUnsignedTransaction, confirmSubmittedTransaction, flattenHydratedTransaction,\n} from '../../transaction/index.ts'\n\n/** Parameters for SimpleXyoGatewayRunner. */\nexport interface SimpleXyoGatewayRunnerParams extends CreatableProviderParams {\n\n}\n\n/** SimpleXyoGatewayRunner implementation. */\nexport class SimpleXyoGatewayRunner extends AbstractCreatableProvider<SimpleXyoGatewayRunnerParams> implements XyoGatewayRunner {\n static readonly defaultMoniker = XyoGatewayRunnerMoniker\n static readonly dependencies = [XyoConnectionMoniker, XyoSignerMoniker]\n static readonly monikers = [XyoGatewayRunnerMoniker, XyoGatewayMoniker]\n moniker = SimpleXyoGatewayRunner.defaultMoniker\n\n private _connection!: XyoConnection\n private _dataLakeRunner?: DataLakeRunner\n private _signer!: XyoSigner\n\n get connection(): XyoConnection {\n return this._connection\n }\n\n get dataLakeRunner(): DataLakeRunner | undefined {\n return this._dataLakeRunner\n }\n\n get signer(): XyoSigner {\n return this._signer\n }\n\n async addPayloadsToChain(\n onChain: AllowedBlockPayload[],\n offChain: Payload[],\n options?: TransactionOptions,\n ): Promise<[Hash, SignedHydratedTransactionWithHashMeta]> {\n // Get chain providers\n const viewer = assertEx(this.connection.viewer, () => 'No viewer available on connection')\n\n // Resolve transaction options\n const {\n nbf, exp, chain, fees,\n } = options ?? {}\n const resolvedChainId = isDefined(chain) ? chain : await viewer.chainId()\n const resolvedNbf = asXL1BlockNumber(isDefined(nbf) ? nbf : await viewer.currentBlockNumber(), true)\n const resolvedExp = asXL1BlockNumber(isDefined(exp) ? exp : resolvedNbf + 10, true)\n\n // Build, sign, and broadcast the transaction\n const tx = await buildUnsignedTransaction(resolvedChainId, onChain, offChain, resolvedNbf, resolvedExp, await this.signer.address(), fees)\n return await this.addTransactionToChain(tx, await PayloadBuilder.addHashMeta(offChain))\n }\n\n async addTransactionToChain(\n tx: UnsignedHydratedTransaction | SignedHydratedTransaction,\n offChain: WithHashMeta<Payload>[] = [],\n ): Promise<[Hash, SignedHydratedTransactionWithHashMeta]> {\n const connection = this.connection\n\n const signer = this.signer\n const runner = assertEx(connection.runner, () => 'No runner available on connection')\n\n // Prepare for returning the SignedHydratedTransactionWithHashMeta\n let signedTx: SignedHydratedTransactionWithHashMeta\n\n // If the supplied transaction is already signed\n if (isSignedHydratedTransaction(tx)) {\n // Ensure it has hash meta\n const [bw, payloads] = tx\n const hashedBw = await PayloadBuilder.addHashMeta(bw)\n const hashedPayloads = await PayloadBuilder.addHashMeta(payloads)\n signedTx = [hashedBw, hashedPayloads]\n } else {\n // Otherwise, sign it using our signer\n signedTx = await signer.signTransaction(tx)\n }\n\n await this._dataLakeRunner?.insert([...flattenHydratedTransaction(signedTx), ...offChain])\n\n // Broadcast the transaction\n return [await runner.broadcastTransaction([signedTx[0], signedTx[1]]), signedTx]\n }\n\n async confirmSubmittedTransaction(txHash: Hash, options?: ConfirmSubmittedTransactionOptions): Promise<SignedHydratedTransaction> {\n return await confirmSubmittedTransaction(\n assertEx(this.connection.viewer, () => 'Connection viewer is undefined'),\n txHash,\n options,\n )\n }\n\n override async createHandler() {\n await super.createHandler()\n this._connection = await this.locator.getInstance<XyoConnection>(XyoConnectionMoniker)\n this._signer = await this.locator.getInstance<XyoSigner>(XyoSignerMoniker)\n this._dataLakeRunner = await this.locator.tryGetInstance<DataLakeRunner>(DataLakeRunnerMoniker)\n }\n\n async send(to: Address, amount: AttoXL1, options?: TransactionOptions): Promise<Hash> {\n return await this.sendMany({ [to]: amount }, options)\n }\n\n async sendMany(transfers: Record<Address, AttoXL1>, options?: TransactionOptions): Promise<Hash> {\n const from = await this.signer.address()\n const hexTransfers: Record<Address, Hex> = Object.fromEntries(\n Object.entries(transfers).map(([address, amount]) => ([\n address, BigIntToJsonZod.parse(amount),\n ])),\n )\n const transfer = new PayloadBuilder<Transfer>({ schema: TransferSchema }).fields({\n from,\n transfers: hexTransfers,\n epoch: Date.now(),\n }).build()\n const [hash] = await this.addPayloadsToChain([transfer], [], options)\n return hash\n }\n}\n","import {\n assertEx, exists, type Hash,\n} from '@xylabs/sdk-js'\nimport type { ArchivistInstance } from '@xyo-network/sdk-js'\nimport {\n isPayloadBundle, Payload, PayloadBuilder,\n Sequence,\n WithHashMeta,\n} from '@xyo-network/sdk-js'\nimport {\n BlockValidationViewer,\n BlockValidationViewerMoniker,\n ChainContractViewer,\n ChainContractViewerMoniker,\n DEFAULT_MAX_EXP_AHEAD,\n FinalizationViewer,\n FinalizationViewerMoniker,\n isSignedHydratedBlockWithHashMeta, isSignedHydratedTransactionWithHashMeta, MempoolPruneOptions, MempoolRunner,\n MempoolRunnerMoniker, type MempoolViewer, type SignedHydratedBlock, SignedHydratedBlockWithHashMeta, type SignedHydratedTransaction,\n SignedHydratedTransactionWithHashMeta,\n TransactionValidationViewer,\n TransactionValidationViewerMoniker,\n} from '@xyo-network/xl1-protocol-lib'\nimport { Mutex } from 'async-mutex'\n\nimport { validateTransactionsOpcodes } from '../../block/index.ts'\nimport {\n AbstractCreatableProvider, creatableProvider, CreatableProviderParams,\n} from '../../CreatableProvider/index.ts'\nimport {\n bundledPayloadToHydratedBlock,\n bundledPayloadToHydratedTransaction,\n hydratedBlockToPayloadBundle, hydratedTransactionToPayloadBundle,\n} from '../../model/index.ts'\n\nconst DEFAULT_SYNC_INTERVAL = 30_000\nconst DEFAULT_SYNC_LIMIT = 100\n\n/** Parameters for SimpleMempoolRunner. */\nexport interface SimpleMempoolRunnerParams extends CreatableProviderParams {\n externalMempools?: MempoolViewer[]\n maxExpAhead?: number\n pendingBlocksArchivist: ArchivistInstance\n pendingTransactionsArchivist: ArchivistInstance\n syncInterval?: number\n syncLimit?: number\n}\n\n/** SimpleMempoolRunner implementation. */\n@creatableProvider()\nexport class SimpleMempoolRunner extends AbstractCreatableProvider<SimpleMempoolRunnerParams> implements MempoolRunner {\n static readonly defaultMoniker = MempoolRunnerMoniker\n static readonly dependencies = [FinalizationViewerMoniker, BlockValidationViewerMoniker, TransactionValidationViewerMoniker, ChainContractViewerMoniker]\n static readonly monikers = [MempoolRunnerMoniker]\n moniker = SimpleMempoolRunner.defaultMoniker\n\n protected _blockValidationViewer!: BlockValidationViewer\n protected _chainContractViewer!: ChainContractViewer\n protected _finalizationViewer!: FinalizationViewer\n protected _transactionValidationViewer!: TransactionValidationViewer\n\n private _syncMutex = new Mutex()\n private _syncTimerId: ReturnType<typeof setInterval> | null = null\n\n protected get blockValidationViewer() {\n return this._blockValidationViewer!\n }\n\n protected get chainContractViewer() {\n return this._chainContractViewer!\n }\n\n protected get externalMempools(): MempoolViewer[] {\n return this.params.externalMempools ?? []\n }\n\n protected get finalizationViewer() {\n return this._finalizationViewer!\n }\n\n protected get maxExpAhead() {\n return this.params.maxExpAhead ?? DEFAULT_MAX_EXP_AHEAD\n }\n\n protected get pendingBlocksArchivist() {\n return this.params.pendingBlocksArchivist\n }\n\n protected get pendingTransactionsArchivist() {\n return this.params.pendingTransactionsArchivist\n }\n\n protected get syncInterval(): number {\n return this.params.syncInterval ?? DEFAULT_SYNC_INTERVAL\n }\n\n protected get syncLimit(): number {\n return this.params.syncLimit ?? DEFAULT_SYNC_LIMIT\n }\n\n protected get transactionValidationViewer() {\n return this._transactionValidationViewer!\n }\n\n static override async paramsHandler(params?: Partial<SimpleMempoolRunnerParams>): Promise<SimpleMempoolRunnerParams> {\n return {\n ...await super.paramsHandler(params),\n pendingBlocksArchivist: assertEx(params?.pendingBlocksArchivist, () => 'pendingBlocksArchivist is required'),\n pendingTransactionsArchivist: assertEx(params?.pendingTransactionsArchivist, () => 'pendingTransactionsArchivist is required'),\n }\n }\n\n override async createHandler() {\n await super.createHandler()\n this._blockValidationViewer = await this.locator.getInstance<BlockValidationViewer>(BlockValidationViewerMoniker)\n this._chainContractViewer = await this.locator.getInstance<ChainContractViewer>(ChainContractViewerMoniker)\n this._finalizationViewer = await this.locator.getInstance<FinalizationViewer>(FinalizationViewerMoniker)\n this._transactionValidationViewer = await this.locator.getInstance<TransactionValidationViewer>(TransactionValidationViewerMoniker)\n }\n\n async prunePendingBlocks({\n batchSize = 10, maxPrune = 1000, maxCheck = 1000,\n }: MempoolPruneOptions = {}): Promise<[number, number]> {\n let total = 0\n let pruned = 0\n let cursor: Sequence | undefined\n let batch = await this.pendingBlocksArchivist.next({\n limit: batchSize, cursor, order: 'desc',\n })\n this.logger?.info(`Starting prunePendingBlocks with batchSize=${batchSize}, maxPrune=${maxPrune}, maxCheck=${maxCheck}`)\n while (batch.length > 0 && pruned < maxPrune && total < maxCheck) {\n const blocksAndBundles = await this.simpleBlockValidationCheck(batch)\n const blocks = blocksAndBundles.map(([b]) => b)\n const bundles = blocksAndBundles.map(([_, p]) => p)\n let valid = blocks.map(b => !!b)\n let remainingBlockMap: number[] = []\n let remainingBlocks = blocks.map((b, i) => {\n if (b) {\n remainingBlockMap.push(i)\n return b\n }\n }).filter(exists)\n\n assertEx(\n remainingBlockMap.length === remainingBlocks.length,\n () => `remainingBlockMap length should match remainingBlocks length [${remainingBlockMap.length}/${remainingBlocks.length}]`,\n )\n const validationResults = await Promise.all(remainingBlocks.map(remainingBlock => this.blockValidationViewer.validateBlock(\n remainingBlock,\n { value: true, state: true },\n )))\n for (const [i, r] of validationResults.entries()) {\n const validated = isSignedHydratedBlockWithHashMeta(r)\n if (!validated) {\n this.logger?.info(`Pruning block ${bundles[remainingBlockMap[i]]._hash} during block validation`)\n this.logger?.info(` - validation result: ${r.at(0)?.message}`)\n }\n valid[remainingBlockMap[i]] = validated\n }\n const pruneHashes = bundles.map((p, i) => {\n if (!valid[i]) {\n return p._hash\n }\n }).filter(exists)\n\n pruned += pruneHashes.length\n total += batch.length\n await this.pendingBlocksArchivist.delete(pruneHashes)\n\n cursor = batch.at(-1)?._sequence\n\n batch = cursor\n ? await this.pendingBlocksArchivist.next({\n limit: batchSize, cursor, order: 'desc',\n })\n : []\n }\n this.logger?.info(`prunePendingBlocks completed: pruned=${pruned}, totalChecked=${total}`)\n return [pruned, total]\n }\n\n async prunePendingTransactions({\n batchSize = 10, maxPrune = 1000, maxCheck = 1000,\n }: MempoolPruneOptions = {}): Promise<[number, number]> {\n let total = 0\n let pruned = 0\n let cursor: Sequence | undefined\n let batch = await this.pendingTransactionsArchivist.next({\n limit: batchSize, cursor, order: 'desc',\n })\n this.logger?.info(`Starting prunePendingTransactions with batchSize=${batchSize}, maxPrune=${maxPrune}, maxCheck=${maxCheck}`)\n while (batch.length > 0 && pruned < maxPrune && total < maxCheck) {\n const transactionsAndBundles = await this.simpleTransactionValidationCheck(batch)\n const transactions = transactionsAndBundles.map(([t]) => t)\n const bundles = transactionsAndBundles.map(([_, p]) => p)\n let valid = transactions.map(t => !!t)\n let remainingTransactionMap: number[] = []\n let remainingTransactions = transactions.map((t, i) => {\n if (t) {\n remainingTransactionMap.push(i)\n return t\n }\n }).filter(exists)\n\n assertEx(\n remainingTransactionMap.length === remainingTransactions.length,\n () => `remainingTransactionMap length should match remainingTransactions length [${remainingTransactionMap.length}/${remainingTransactions.length}]`,\n )\n\n const validationResults = await Promise.all(remainingTransactions.map(remainingTransaction => this.transactionValidationViewer.validateTransaction(\n remainingTransaction,\n { value: true, state: true },\n )))\n for (const [i, r] of validationResults.entries()) {\n const validated = isSignedHydratedTransactionWithHashMeta(r)\n if (!validated) {\n this.logger?.info(`Pruning transaction ${bundles[remainingTransactionMap[i]]._hash} during transaction validation`)\n this.logger?.info(` - validation result: ${r.at(0)?.message}`)\n }\n valid[remainingTransactionMap[i]] = validated\n }\n const pruneHashes = bundles.map((p, i) => {\n if (!valid[i]) {\n return p._hash\n }\n }).filter(exists)\n\n pruned += pruneHashes.length\n total += batch.length\n await this.pendingTransactionsArchivist.delete(pruneHashes)\n\n cursor = batch.at(-1)?._sequence\n\n batch = cursor\n ? await this.pendingTransactionsArchivist.next({\n limit: batchSize, cursor, order: 'desc',\n })\n : []\n }\n this.logger?.info(`prunePendingTransactions completed: pruned=${pruned}, totalChecked=${total}`)\n return [pruned, total]\n }\n\n async submitBlocks(blocks: SignedHydratedBlock[]): Promise<Hash[]> {\n const bundles = await Promise.all(blocks.map(async ([bw, payloads]) => {\n return hydratedBlockToPayloadBundle([\n await PayloadBuilder.addHashMeta(bw),\n await PayloadBuilder.addHashMeta(payloads),\n ])\n }))\n const inserted = await this.pendingBlocksArchivist.insert(bundles)\n return inserted.map(p => p._hash)\n }\n\n async submitTransactions(transactions: SignedHydratedTransaction[]): Promise<Hash[]> {\n const headNumber = await this.finalizationViewer.headNumber()\n const maxExp = headNumber + this.maxExpAhead\n\n const validTransactions = transactions.filter(([tx]) => {\n if (tx.exp > maxExp) {\n this.logger?.info(`Rejecting transaction with exp ${tx.exp} exceeding max allowed ${maxExp}`)\n return false\n }\n return true\n })\n\n const bundles = await Promise.all(validTransactions.map(async ([tx, payloads]) => {\n return hydratedTransactionToPayloadBundle([\n await PayloadBuilder.addHashMeta(tx),\n await PayloadBuilder.addHashMeta(payloads),\n ])\n }))\n const inserted = await this.pendingTransactionsArchivist.insert(bundles)\n return inserted.map(p => p._hash)\n }\n\n protected override async startHandler(): Promise<void> {\n await super.startHandler()\n if (this.externalMempools.length > 0) {\n await this.syncFromExternal()\n this._syncTimerId = setInterval(() => {\n void this.syncFromExternal()\n }, this.syncInterval)\n }\n }\n\n protected override async stopHandler(): Promise<void> {\n await super.stopHandler()\n if (this._syncTimerId) {\n clearInterval(this._syncTimerId)\n this._syncTimerId = null\n }\n }\n\n private async simpleBlockValidationCheck(payloads: WithHashMeta<Payload>[]): Promise<[(SignedHydratedBlockWithHashMeta | undefined), WithHashMeta<Payload>][]> {\n const headNumber = await this.finalizationViewer.headNumber()\n const chainId = await this.chainContractViewer.chainId()\n\n const blockBundles: [SignedHydratedBlockWithHashMeta | undefined, WithHashMeta<Payload>][] = await Promise.all(payloads.map(async (p) => {\n return [isPayloadBundle(p) ? await bundledPayloadToHydratedBlock(p) : undefined, p]\n }))\n\n return blockBundles.map(([block, bundle]) => {\n const blockCheckPassed = !!block\n const chainIdPassed = blockCheckPassed ? block[0].chain === chainId : false\n const blockNumberPassed = blockCheckPassed ? block[0].block > headNumber : false\n const typeCheckPassed = blockCheckPassed ? isSignedHydratedBlockWithHashMeta(block) : false\n const validationPassed = blockCheckPassed && chainIdPassed && blockNumberPassed && typeCheckPassed\n const validatedBlock = validationPassed ? block : undefined\n if (!validationPassed) {\n this.logger?.info(`Pruning block bundle ${bundle._hash} during simpleValidationCheck`)\n this.logger?.info(` - chainId match: ${chainIdPassed}`)\n this.logger?.info(` - blockNumber check: ${blockNumberPassed} [${headNumber}|${block?.[0].block}]`)\n this.logger?.info(` - typeCheck: ${typeCheckPassed}`)\n this.logger?.info(` - bundle hash: ${bundle._hash}`)\n }\n return [validatedBlock, bundle]\n })\n }\n\n private async simpleTransactionValidationCheck(payloads: WithHashMeta<Payload>[]): Promise<[(SignedHydratedTransactionWithHashMeta | undefined), WithHashMeta<Payload>][]> {\n const headNumber = await this.finalizationViewer.headNumber()\n const chainId = await this.chainContractViewer.chainId()\n\n const transactionBundles: [SignedHydratedTransactionWithHashMeta | undefined, WithHashMeta<Payload>][] = await Promise.all(payloads.map(async (p) => {\n return [isPayloadBundle(p) ? await bundledPayloadToHydratedTransaction(p) : undefined, p]\n }))\n\n // eslint-disable-next-line complexity\n return await Promise.all(transactionBundles.map(async ([transaction, bundle]) => {\n const transactionCheckPassed = !!transaction\n const chainIdPassed = transactionCheckPassed ? transaction[0].chain === chainId : false\n const expPassed = transactionCheckPassed\n ? transaction[0].exp > headNumber && transaction[0].exp <= headNumber + this.maxExpAhead\n : false\n const typeCheckPassed = transactionCheckPassed ? isSignedHydratedTransactionWithHashMeta(transaction) : false\n let opcodeCheckPassed = false\n try {\n await validateTransactionsOpcodes(transaction ? [transaction] : [])\n opcodeCheckPassed = true\n } catch (e) {\n this.logger?.info(`Opcode validation failed for transaction ${bundle._hash} during simpleValidationCheck`)\n this.logger?.info(` - error: ${(e as Error).message}`)\n }\n const validationPassed = transactionCheckPassed && chainIdPassed && expPassed && typeCheckPassed && opcodeCheckPassed\n const validatedTransaction = validationPassed ? transaction : undefined\n if (!validationPassed) {\n this.logger?.info(`Pruning block bundle ${bundle._hash} during simpleValidationCheck`)\n this.logger?.info(` - chainId match: ${chainIdPassed}`)\n this.logger?.info(` - exp check: ${expPassed}`)\n this.logger?.info(` - opcode check: ${opcodeCheckPassed}`)\n this.logger?.info(` - typeCheck: ${typeCheckPassed}`)\n this.logger?.info(` - bundle hash: ${bundle._hash}`)\n }\n return [validatedTransaction, bundle]\n }))\n }\n\n private async syncBlocksFrom(external: MempoolViewer): Promise<void> {\n const externalBlocks = await external.pendingBlocks({ limit: this.syncLimit })\n if (externalBlocks.length === 0) return\n\n const bundles = externalBlocks.map(block => hydratedBlockToPayloadBundle(block))\n await this.pendingBlocksArchivist.insert(bundles)\n this.logger?.info(`Synced ${externalBlocks.length} blocks from external mempool`)\n }\n\n private async syncFromExternal(): Promise<void> {\n if (this._syncMutex.isLocked()) return\n await this._syncMutex.runExclusive(async () => {\n for (const external of this.externalMempools) {\n try {\n await this.syncTransactionsFrom(external)\n await this.syncBlocksFrom(external)\n } catch (ex) {\n this.logger?.error(`Error syncing from external mempool: ${ex}`)\n }\n }\n })\n }\n\n private async syncTransactionsFrom(external: MempoolViewer): Promise<void> {\n const externalTxs = await external.pendingTransactions({ limit: this.syncLimit })\n if (externalTxs.length === 0) return\n\n const bundles = externalTxs.map(tx => hydratedTransactionToPayloadBundle(tx))\n await this.pendingTransactionsArchivist.insert(bundles)\n this.logger?.info(`Synced ${externalTxs.length} transactions from external mempool`)\n }\n}\n","import {\n exists, isDefined, isHash,\n} from '@xylabs/sdk-js'\nimport type {\n ArchivistInstance,\n HashMeta,\n PayloadBundle, Sequence,\n} from '@xyo-network/sdk-js'\nimport { isHashMeta, isPayloadBundle } from '@xyo-network/sdk-js'\nimport {\n type HydratedTransactionWithHashMeta, type MempoolViewer, MempoolViewerMoniker,\n PendingTransactionsOptions,\n type SignedHydratedBlockWithHashMeta, type SignedHydratedTransactionWithHashMeta,\n WindowedBlockViewer,\n WindowedBlockViewerMoniker,\n} from '@xyo-network/xl1-protocol-lib'\n\nimport {\n AbstractCreatableProvider, creatableProvider, CreatableProviderParams,\n} from '../../CreatableProvider/index.ts'\nimport { bundledPayloadToHydratedBlock, bundledPayloadToHydratedTransaction } from '../../model/index.ts'\n\ntype PayloadBundleWithHashMeta = PayloadBundle & HashMeta\n\ntype HydratedTxWithBundle = {\n bundle: PayloadBundleWithHashMeta\n tx: SignedHydratedTransactionWithHashMeta\n}\n\n/** Default maximum fraction of mempool transactions to return. */\nconst DEFAULT_MEMPOOL_SELECTION_RATIO = 0.66\n\n/** Parameters for SimpleMempoolViewer. */\nexport interface SimpleMempoolViewerParams extends CreatableProviderParams {\n /** External mempool viewers (reserved for future use). */\n externalMempools?: MempoolViewer[]\n /** Maximum fraction (0–1) of mempool inclusion candidates to return. Defaults to 0.66. */\n mempoolSelectionRatio?: number\n pendingBlocksArchivist: ArchivistInstance\n pendingTransactionsArchivist: ArchivistInstance\n}\n\n/** SimpleMempoolViewer implementation. */\n@creatableProvider()\nexport class SimpleMempoolViewer extends AbstractCreatableProvider<SimpleMempoolViewerParams> implements MempoolViewer {\n static readonly defaultMoniker = MempoolViewerMoniker\n static readonly dependencies = [WindowedBlockViewerMoniker]\n static readonly monikers = [MempoolViewerMoniker]\n moniker = SimpleMempoolViewer.defaultMoniker\n\n private _windowedBlockViewer?: WindowedBlockViewer\n\n protected get pendingBlocksArchivist() {\n return this.params.pendingBlocksArchivist\n }\n\n protected get pendingTransactionsArchivist() {\n return this.params.pendingTransactionsArchivist\n }\n\n protected get windowedBlockViewer() {\n return this._windowedBlockViewer!\n }\n\n override async createHandler() {\n await super.createHandler()\n this._windowedBlockViewer = await this.locator.getInstance<WindowedBlockViewer>(WindowedBlockViewerMoniker)\n }\n\n async pendingBlocks({ cursor: providedCursor }: PendingTransactionsOptions = {}): Promise<SignedHydratedBlockWithHashMeta[]> {\n let cursor: Sequence | undefined = undefined\n if (isHash(providedCursor)) {\n const [p] = await this.pendingBlocksArchivist.get([providedCursor])\n if (isDefined(p)) {\n cursor = p._sequence\n }\n }\n const bundles = await this.pendingBlocksArchivist.next({\n order: 'desc', limit: 100, cursor,\n })\n const filteredBundles = bundles.filter(isPayloadBundle).filter(isHashMeta)\n return (await Promise.all(filteredBundles.map(async bundle => await bundledPayloadToHydratedBlock(bundle)))).filter(exists)\n }\n\n async pendingTransactions({\n cursor: providedCursor,\n limit = 100,\n }: PendingTransactionsOptions = {}): Promise<SignedHydratedTransactionWithHashMeta[]> {\n let cursor: Sequence | undefined = undefined\n if (isHash(providedCursor)) {\n const [p] = await this.pendingTransactionsArchivist.get([providedCursor])\n if (isDefined(p)) {\n cursor = p._sequence\n }\n }\n this.logger?.info(`Fetching pending transactions from cursor: ${cursor}`)\n const bundles = (await this.pendingTransactionsArchivist.next({\n order: 'asc', limit: limit * 5, cursor,\n }))\n\n this.logger?.info(`Fetched pending transactions: ${bundles.length} bundles`)\n\n const filteredBundles: PayloadBundleWithHashMeta[] = bundles.filter(isPayloadBundle).filter(isHashMeta)\n // this.logger?.info(`Filtered pending transactions: ${JSON.stringify(filteredBundles, null, 2)} filteredBundles`)\n\n const hydratedWithBundle: HydratedTxWithBundle[] = (await Promise.all(\n filteredBundles.map(async (bundle) => {\n const tx = await bundledPayloadToHydratedTransaction(bundle)\n return isDefined(tx) ? { bundle, tx } : undefined\n }),\n )).filter(exists)\n // this.logger?.info(`Converted pending transactions: ${JSON.stringify(hydratedWithBundle.map(x => x.tx), null, 2)} results`)\n\n const currentBlock = await this.windowedBlockViewer.currentBlock()\n const evaluated = await Promise.all(\n hydratedWithBundle.map(async ({ bundle, tx }) => ({\n bundle, tx, deletable: await this.isDeletable(tx, currentBlock),\n })),\n )\n\n const validTransactions = evaluated.filter(x => !x.deletable)\n const deletionCandidates = evaluated.filter(x => x.deletable)\n this.logger?.info(`Pending transactions: ${validTransactions.length} valid, ${deletionCandidates.length} not deletable`)\n\n // Delete the invalid transactions that should not remain in the mempool.\n await Promise.all(\n deletionCandidates.map(async ({ bundle, tx }) => {\n await this.deleteBundledTransaction(bundle)\n this.logger?.info(`Purged completed/expired bundled transaction: ${bundle._hash}/${tx[0]._hash}`)\n }),\n )\n\n const inclusionCandidates = (await Promise.all(validTransactions.map(x => x.tx).map(async (tx) => {\n // Check if it's a candidate for inclusion (skip deletable check as we've already done that)\n if (await this.isInclusionCandidate(tx, currentBlock, false)) return tx\n }))).filter(exists)\n\n const selectionRatio = this.params.mempoolSelectionRatio ?? DEFAULT_MEMPOOL_SELECTION_RATIO\n const maxByRatio = Math.ceil(inclusionCandidates.length * selectionRatio)\n const effectiveLimit = Math.min(limit, maxByRatio)\n\n const randomInclusionCandidates = deduplicateBySigner(\n inclusionCandidates.filter(() => Math.random() < selectionRatio),\n ).slice(0, effectiveLimit)\n\n // if the random filter resulted in 0 bundles, we fallback to just taking the first bundle to ensure we return something\n const result = randomInclusionCandidates.length > 0 ? randomInclusionCandidates : deduplicateBySigner(inclusionCandidates).slice(0, 1)\n\n this.logger?.info(`Inclusion candidates: ${inclusionCandidates.length}`)\n return result\n }\n\n private async deleteBundledTransaction(bundle: PayloadBundleWithHashMeta): Promise<void> {\n await this.pendingTransactionsArchivist.delete([bundle._hash])\n }\n\n /**\n * Evaluates a transaction to determine if it should be purged from the mempool.\n * @param tx The transaction to evaluate\n * @param currentBlock The current block to use for evaluation\n * @returns True if the transaction should be purged, false otherwise\n */\n private async isDeletable(tx: HydratedTransactionWithHashMeta, currentBlock: SignedHydratedBlockWithHashMeta): Promise<boolean> {\n const currentBlockNumber = currentBlock[0].block\n const nextBlockNumber = currentBlockNumber + 1\n const { exp } = tx[0]\n\n // If it's expired\n if (nextBlockNumber > exp) return true\n\n // If it's already included in a block\n const existingBlock = await this.windowedBlockViewer.blockByTransactionHash(tx[0]._hash)\n if (existingBlock) return true\n\n return false\n }\n\n /**\n * Evaluates a transaction to determine if is valid for inclusion in the next block. A transaction is invalid if:\n * - The transaction is too early/expired\n * - The transaction has already been included in a block\n * @param tx The transaction to evaluate\n * @param currentBlock The current block to use for evaluation\n * @param checkForDeletable Whether to check if the transaction is deletable (default: true)\n * @returns True if the transaction is valid for inclusion in the next block, false otherwise\n */\n private async isInclusionCandidate(\n tx: HydratedTransactionWithHashMeta,\n currentBlock: SignedHydratedBlockWithHashMeta,\n checkForDeletable: boolean = true,\n ): Promise<boolean> {\n const currentBlockNumber = currentBlock[0].block\n const nextBlockNumber = currentBlockNumber + 1\n const { nbf } = tx[0]\n\n // If it's not time yet\n if (nextBlockNumber < nbf) return false\n\n // If it's deletable\n if (checkForDeletable && await this.isDeletable(tx, currentBlock)) return false\n\n return true\n }\n}\n\n/** Remove transactions that share the same signer set, keeping the first occurrence. */\nfunction deduplicateBySigner(txs: SignedHydratedTransactionWithHashMeta[]): SignedHydratedTransactionWithHashMeta[] {\n const seen = new Set<string>()\n return txs.filter((tx) => {\n const key = tx[0].addresses.toSorted().join(',')\n if (seen.has(key)) return false\n seen.add(key)\n return true\n })\n}\n","import { isUndefined } from '@xylabs/sdk-js'\nimport type {\n GatewayName,\n NetworkStatus, XyoNetwork,\n} from '@xyo-network/xl1-protocol-lib'\nimport { isNetworkStatus } from '@xyo-network/xl1-protocol-lib'\nimport axios from 'axios'\n\nimport {\n errorStatus, StatusNetworks, unknownStatus,\n} from './lib/index.ts'\n\n/** SimpleXyoNetwork implementation. */\nexport class SimpleXyoNetwork implements XyoNetwork {\n protected readonly _networkId: GatewayName\n\n constructor(networkId: GatewayName) {\n this._networkId = networkId\n }\n\n async status(): Promise<NetworkStatus> {\n const statusNetwork = StatusNetworks[this._networkId]\n if (isUndefined(statusNetwork)) {\n throw new Error(`Unknown status network ID: ${this._networkId}`)\n }\n\n return await this.makeRequest(statusNetwork.statusUrl)\n }\n\n private async makeRequest(url: string): Promise<NetworkStatus> {\n try {\n const response = await axios.get(url)\n if (isNetworkStatus(response.data)) {\n return response.data\n } else {\n if (response.status === 200) {\n console.error('Unknown network status response:', response.data)\n\n return unknownStatus\n }\n return errorStatus\n }\n } catch (error) {\n console.error('Error fetching network status:', error)\n return errorStatus\n }\n }\n}\n","import type { NetworkStatus } from '@xyo-network/xl1-protocol-lib'\nimport { NetworkStatusSchema } from '@xyo-network/xl1-protocol-lib'\n\n/** unknownStatus constant. */\nexport const unknownStatus: NetworkStatus = {\n description: 'Unknown Network Status',\n schema: NetworkStatusSchema,\n state: 'unknown',\n}\n\n/** errorStatus constant. */\nexport const errorStatus: NetworkStatus = {\n description: 'Error Fetching Network Status',\n schema: NetworkStatusSchema,\n state: 'unknown',\n}\n","import type { GatewayName } from '@xyo-network/xl1-protocol-lib'\n\n/** StatusNetwork type. */\nexport type StatusNetwork = {\n id: GatewayName\n statusUrl: string\n}\n\n/** MainNetworkStats constant. */\nexport const MainNetworkStats: StatusNetwork = {\n id: 'mainnet' as GatewayName,\n statusUrl: 'https://xyo.network/chain-network-status-mainnet.json',\n}\n\n/** SequenceNetworkStats constant. */\nexport const SequenceNetworkStats: StatusNetwork = {\n id: 'sequence' as GatewayName,\n statusUrl: 'https://beta.xyo.network/chain-network-status-sequence.json',\n}\n\n/** LocalNetworkStats constant. */\nexport const LocalNetworkStats: StatusNetwork = {\n id: 'local' as GatewayName,\n statusUrl: 'http://localhost:3002/chain-network-status-local.json',\n}\n\n/** StatusNetworks constant. */\nexport const StatusNetworks: Record<GatewayName, StatusNetwork> = {\n ['mainnet' as GatewayName]: MainNetworkStats,\n ['sequence' as GatewayName]: SequenceNetworkStats,\n ['local' as GatewayName]: LocalNetworkStats,\n}\n","import { assertEx } from '@xylabs/sdk-js'\nimport type {\n CaveatTypes,\n InvokerPermission, PermissionRequest, RequestedPermission, XyoPermissions,\n} from '@xyo-network/xl1-protocol-lib'\n\nimport type { Invoker, PermissionsStore } from './store/index.ts'\n\n/**\n * In-memory implementation of XyoPermissions for testing or ephemeral use cases.\n * Does not persist data beyond the lifetime of the instance.\n * Assumes all permission requests are granted and revocations always succeed.\n */\nexport class SimpleXyoPermissions implements XyoPermissions {\n invoker: Invoker\n private _store: PermissionsStore\n\n constructor(store: PermissionsStore) {\n this._store = store\n this.invoker = store.invoker\n }\n\n get store(): PermissionsStore {\n return assertEx(this._store, () => 'Store must be defined to get permissions')\n }\n\n async getPermissions(): Promise<InvokerPermission[]> {\n return await this.store.getPermissions()\n }\n\n // assumed the permissions are always granted\n async requestPermissions(permissions: PermissionRequest[]): Promise<RequestedPermission[]> {\n await Promise.resolve()\n // Flatten PermissionRequest[] into InvokerPermission[]\n const newPermissions: InvokerPermission[] = []\n const now = Date.now()\n for (const req of permissions) {\n for (const parentCapability in req) {\n newPermissions.push({\n invoker: this.invoker,\n parentCapability,\n caveats: Object.entries(req[parentCapability]).map(([type, value]) => ({ type: type as CaveatTypes, value })),\n date: now,\n })\n }\n }\n\n // Update or add permissions in the store\n const existingPermissions = await this.getPermissions()\n for (const perm of newPermissions) {\n const idx = existingPermissions.findIndex(\n p => p.invoker === perm.invoker && p.parentCapability === perm.parentCapability,\n )\n if (idx === -1) {\n existingPermissions.push(perm)\n } else {\n existingPermissions[idx] = perm\n }\n }\n await this.store.setPermissions(existingPermissions)\n\n // Return the granted permissions in RequestedPermission shape\n return newPermissions.map(({ parentCapability, date }) => ({ parentCapability, date }))\n }\n\n // Assumes the permissions are always revoked\n async revokePermissions(permissions: PermissionRequest): Promise<RequestedPermission[]> {\n const existingPermissions = await this.getPermissions()\n const revoked: RequestedPermission[] = []\n for (const parentCapability in permissions) {\n const idx = existingPermissions.findIndex(\n p => p.invoker === this.invoker && p.parentCapability === parentCapability,\n )\n if (idx !== -1) {\n const removed = existingPermissions.splice(idx, 1)[0]\n revoked.push({ parentCapability: removed.parentCapability, date: removed.date })\n }\n }\n await this.store.setPermissions(existingPermissions)\n return revoked\n }\n}\n","import { assertEx } from '@xylabs/sdk-js'\nimport type { InvokerPermission } from '@xyo-network/xl1-protocol-lib'\n\nimport type { Invoker, PermissionsStore } from './PermissionsStore.ts'\n\n/**\n * In-memory implementation of XyoPermissions for testing or ephemeral use cases.\n * Does not persist data beyond the lifetime of the instance.\n * Assumes all permission requests are granted and revocations always succeed.\n */\nexport class MemoryPermissionsStore implements PermissionsStore {\n private _invoker: Invoker\n private permissions: InvokerPermission[] = []\n\n constructor(invoker: Invoker) {\n this._invoker = invoker\n }\n\n get invoker(): Invoker {\n return assertEx(this._invoker, () => 'Invoker must be defined to get permissions')\n }\n\n async getPermissions(): Promise<InvokerPermission[]> {\n await Promise.resolve()\n return this.permissions\n }\n\n async setPermissions(permissions: InvokerPermission[]): Promise<void> {\n await Promise.resolve()\n this.permissions = permissions\n }\n}\n","import { type Hash } from '@xylabs/sdk-js'\nimport { PayloadBuilder } from '@xyo-network/sdk-js'\nimport {\n MempoolRunner,\n MempoolRunnerMoniker, SignedHydratedTransactionWithStorageMeta,\n XyoRunner, XyoRunnerMoniker,\n} from '@xyo-network/xl1-protocol-lib'\n\nimport type { CreatableProviderParams } from '../../CreatableProvider/index.ts'\nimport { AbstractCreatableProvider, creatableProvider } from '../../CreatableProvider/index.ts'\n\n/** Parameters for SimpleXyoRunner. */\nexport interface SimpleXyoRunnerParams extends CreatableProviderParams {\n}\n\n/** SimpleXyoRunner implementation. */\n@creatableProvider()\nexport class SimpleXyoRunner extends AbstractCreatableProvider<SimpleXyoRunnerParams> implements XyoRunner {\n static readonly defaultMoniker = XyoRunnerMoniker\n static readonly dependencies = [MempoolRunnerMoniker]\n static readonly monikers = [XyoRunnerMoniker]\n moniker = SimpleXyoRunner.defaultMoniker\n\n private _mempoolRunner?: MempoolRunner\n\n get mempool() {\n return this._mempoolRunner!\n }\n\n async broadcastTransaction(transaction: SignedHydratedTransactionWithStorageMeta): Promise<Hash> {\n await this.mempool.submitTransactions([transaction])\n const hash = await PayloadBuilder.hash(transaction[0])\n this.logger?.info(`Broadcasted transaction with hash ${hash}`)\n return hash\n }\n\n override async createHandler() {\n await super.createHandler()\n this._mempoolRunner = await this.locator.getInstance<MempoolRunner>(MempoolRunnerMoniker)\n }\n}\n","import type { Address, Promisable } from '@xylabs/sdk-js'\nimport type { AccountInstance, Payload } from '@xyo-network/sdk-js'\nimport { Account, PayloadBuilder } from '@xyo-network/sdk-js'\nimport type {\n AllowedBlockPayload, ChainId, SignedHydratedTransactionWithHashMeta,\n SignedTransactionBoundWitness, TransactionFeesBigInt,\n UnsignedTransactionBoundWitness,\n XL1BlockNumber, XyoSigner,\n} from '@xyo-network/xl1-protocol-lib'\nimport {\n SignedHydratedTransactionWithHashMetaZod,\n XyoSignerMoniker,\n} from '@xyo-network/xl1-protocol-lib'\n\nimport type { CreatableProviderParams } from '../../CreatableProvider/index.ts'\nimport { AbstractCreatableProvider } from '../../CreatableProvider/index.ts'\nimport { buildTransaction, signTransaction } from '../../transaction/index.ts'\n\n/** Parameters for SimpleXyoSigner. */\nexport interface SimpleXyoSignerParams extends CreatableProviderParams {\n account: AccountInstance\n}\n\n/** SimpleXyoSigner implementation. */\nexport class SimpleXyoSigner extends AbstractCreatableProvider<SimpleXyoSignerParams> implements XyoSigner {\n static readonly defaultMoniker = XyoSignerMoniker\n static readonly dependencies = []\n static readonly monikers = [XyoSignerMoniker]\n moniker = SimpleXyoSigner.defaultMoniker\n\n static override async paramsHandler(params?: Partial<SimpleXyoSignerParams>) {\n let account: AccountInstance\n if (params?.account) {\n account = params.account\n } else {\n const localLogger = params?.logger ?? params?.context?.logger\n localLogger?.warn(`No account provided to SimpleXyoSigner, generating a random account. \n This account will not be persisted and any transactions signed with it may be lost.\n `)\n\n account = await Account.random()\n }\n return { ...await super.paramsHandler(params), account }\n }\n\n address(): Promisable<Address> {\n return this.params.account.address\n }\n\n /** @deprecated - use signTransaction instead */\n async createSignedTransaction(\n chain: ChainId,\n elevatedPayloads: AllowedBlockPayload[],\n additionalPayloads: Payload[],\n nbf: XL1BlockNumber,\n exp: XL1BlockNumber,\n fees: TransactionFeesBigInt,\n from?: Address,\n ): Promise<SignedTransactionBoundWitness> {\n const fromAddress = from ?? await this.address()\n const transaction = await buildTransaction(\n chain,\n elevatedPayloads,\n additionalPayloads,\n this.params.account,\n nbf,\n exp,\n fromAddress,\n fees,\n )\n return transaction[0]\n }\n\n async signTransaction(tx: [UnsignedTransactionBoundWitness, Payload[]]): Promise<SignedHydratedTransactionWithHashMeta> {\n const txBW = await signTransaction(tx[0], this.params.account)\n return SignedHydratedTransactionWithHashMetaZod.parse([await PayloadBuilder.addStorageMeta(txBW), await PayloadBuilder.addStorageMeta(tx[1])])\n }\n}\n","import { isDefined } from '@xylabs/sdk-js'\nimport {\n Position, StakeEvent, StakeEventFilter, StakeEventName, StakeEventsViewer, StakeEventsViewerMoniker,\n} from '@xyo-network/xl1-protocol-lib'\n\nimport {\n AbstractCreatableProvider, creatableProvider, CreatableProviderParams,\n} from '../../CreatableProvider/index.ts'\n\n/** Parameters for SimpleStakeEvents. */\nexport interface SimpleStakeEventsParams extends CreatableProviderParams {\n positions: Position[]\n}\n\n/** SimpleStakeEventsViewer implementation. */\n@creatableProvider()\nexport class SimpleStakeEventsViewer extends AbstractCreatableProvider<SimpleStakeEventsParams> implements StakeEventsViewer {\n static readonly defaultMoniker = StakeEventsViewerMoniker\n static readonly dependencies = []\n static readonly monikers = [StakeEventsViewerMoniker]\n moniker = SimpleStakeEventsViewer.defaultMoniker\n\n protected get positions() {\n return this.params.positions\n }\n\n positionCount(range: [number, number | 'latest']): number {\n return this.positionsFromRange(range).length\n }\n\n stakeEvents<TName extends StakeEventName>(range: [number, number | 'latest'], { name }: StakeEventFilter<TName> = {}): StakeEvent<TName>[] {\n const positions = this.positionsFromRange(range)\n const events = this.eventsFromPositions(positions)\n if (isDefined(name)) {\n return events.filter((event): event is StakeEvent<TName> => event.name === name)\n }\n return events as StakeEvent<TName>[]\n }\n\n protected override async startHandler(): Promise<void> {\n await super.startHandler()\n }\n\n private eventsFromPositions(positions: Position[]): StakeEvent<StakeEventName>[] {\n const events = positions.map((position) => {\n const events: StakeEvent<StakeEventName>[] = [{\n name: 'StakeAdded',\n time: position.addBlock,\n args: {\n staker: position.staker,\n staked: position.staked,\n amount: position.amount,\n id: position.id,\n },\n }]\n if (position.removeBlock !== 0) {\n events.push({\n name: 'StakeRemoved',\n time: position.removeBlock,\n args: {\n staker: position.staker,\n staked: position.staked,\n amount: position.amount,\n id: position.id,\n },\n })\n }\n if (position.withdrawBlock !== 0) {\n events.push({\n name: 'StakeWithdrawn',\n time: position.withdrawBlock,\n args: {\n staker: position.staker,\n staked: position.staked,\n amount: position.amount,\n id: position.id,\n },\n })\n }\n return events\n })\n return events.flat()\n }\n\n private positionsFromRange(range: [number, number | 'latest']): Position[] {\n const startBlock = range[0]\n const endBlock = range[1] === 'latest' ? Number.MAX_SAFE_INTEGER : range[1]\n const filteredPositions = this.positions?.filter((position) => {\n return position.addBlock <= endBlock && (position.removeBlock === 0 || position.removeBlock >= startBlock)\n }) ?? []\n return filteredPositions\n }\n}\n","import { type Address, asAddress } from '@xylabs/sdk-js'\nimport { assertEx } from '@xylabs/sdk-js'\nimport {\n StakeTotalsViewer, StakeTotalsViewerMoniker,\n StakeViewer,\n StakeViewerMoniker,\n} from '@xyo-network/xl1-protocol-lib'\n\nimport {\n AbstractCreatableProvider, creatableProvider, CreatableProviderParams,\n} from '../../CreatableProvider/index.ts'\n\n/** Parameters for SimpleStakeTotalsViewer. */\nexport interface SimpleStakeTotalsViewerParams extends CreatableProviderParams {\n\n}\n\n/** SimpleStakeTotalsViewer implementation. */\n@creatableProvider()\nexport class SimpleStakeTotalsViewer extends AbstractCreatableProvider<SimpleStakeTotalsViewerParams> implements StakeTotalsViewer {\n static readonly defaultMoniker = StakeTotalsViewerMoniker\n static readonly dependencies = [StakeTotalsViewerMoniker]\n static readonly monikers = [StakeTotalsViewerMoniker]\n moniker = SimpleStakeTotalsViewer.defaultMoniker\n\n private _stakeViewer!: StakeViewer\n\n get stakeViewer() {\n return this._stakeViewer\n }\n\n async active(time = Number.MAX_SAFE_INTEGER) {\n let active = 0n\n const positions = await this.stakeViewer.activeStakes()\n for (const position of positions) {\n if (position.removeBlock === 0 || position.removeBlock > time) {\n active += position.amount\n }\n }\n return active\n }\n\n async activeByStaked(staked: Address, time = Number.MAX_SAFE_INTEGER) {\n let active = 0n\n const positions = await this.stakeViewer.activeStakes()\n for (const position of positions) {\n if ((position.removeBlock === 0 || position.removeBlock > time) && asAddress(position.staked) === asAddress(staked)) {\n active += position.amount\n }\n }\n return active\n }\n\n async activeByStaker(staker: Address, time = Number.MAX_SAFE_INTEGER) {\n let active = 0n\n const positions = await this.stakeViewer.activeStakes()\n for (const position of positions) {\n if ((position.removeBlock === 0 || position.removeBlock > time) && asAddress(position.staker) === asAddress(staker)) {\n active += position.amount\n }\n }\n return active\n }\n\n override async createHandler() {\n await super.createHandler()\n this._stakeViewer = assertEx(\n (await this.locateAndCreate<StakeViewer>(StakeViewerMoniker)),\n () => 'Failed to create StakeViewer',\n )\n }\n\n async pending(time = Number.MAX_SAFE_INTEGER): Promise<bigint> {\n let pending = 0n\n const positions = await this.stakeViewer.removedStakes()\n for (const position of positions) {\n if ((position.removeBlock !== 0 && position.removeBlock <= time) && (position.withdrawBlock === 0 || position.withdrawBlock > time)) {\n pending += position.amount\n }\n }\n return pending\n }\n\n async pendingByStaker(staker: Address, time = Number.MAX_SAFE_INTEGER) {\n let pending = 0n\n const positions = await this.stakeViewer.removedStakes()\n for (const position of positions) {\n if ((position.removeBlock !== 0 && position.removeBlock <= time) && (position.withdrawBlock === 0 || position.withdrawBlock > time) && asAddress(position.staker) === asAddress(staker)) {\n pending += position.amount\n }\n }\n return pending\n }\n\n async withdrawn(time = Number.MAX_SAFE_INTEGER): Promise<bigint> {\n let withdrawn = 0n\n const positions = await this.stakeViewer.withdrawnStakes()\n for (const position of positions) {\n if (position.withdrawBlock !== 0 && position.withdrawBlock <= time) {\n withdrawn += position.amount\n }\n }\n return withdrawn\n }\n\n async withdrawnByStaker(staker: Address, time = Number.MAX_SAFE_INTEGER): Promise<bigint> {\n let withdrawn = 0n\n const positions = await this.stakeViewer.withdrawnStakes()\n for (const position of positions) {\n if (position.withdrawBlock !== 0 && position.withdrawBlock <= time && asAddress(position.staker) === asAddress(staker)) {\n withdrawn += position.amount\n }\n }\n return withdrawn\n }\n}\n","import {\n type Address, asAddress, Promisable, toAddress,\n} from '@xylabs/sdk-js'\nimport { assertEx } from '@xylabs/sdk-js'\nimport {\n Position, StakeEventsViewer, StakeEventsViewerMoniker, StakeViewer, StakeViewerMoniker,\n} from '@xyo-network/xl1-protocol-lib'\n\nimport {\n AbstractCreatableProvider, creatableProvider, CreatableProviderParams,\n} from '../../CreatableProvider/index.ts'\n\n/** Parameters for SimpleStakeViewer. */\nexport interface SimpleStakeViewerParams extends CreatableProviderParams {\n chainId?: Address\n minWithdrawalBlocks?: number\n positions: Position[]\n}\n\n/** SimpleStakeViewer implementation. */\n@creatableProvider()\nexport class SimpleStakeViewer extends AbstractCreatableProvider<SimpleStakeViewerParams> implements StakeViewer {\n static readonly defaultMoniker = StakeViewerMoniker\n static readonly dependencies = [StakeEventsViewerMoniker]\n static readonly monikers = [StakeViewerMoniker]\n moniker = SimpleStakeViewer.defaultMoniker\n\n private _chainStakeEventsViewer: StakeEventsViewer | undefined\n\n get stakeEvents() {\n return assertEx(this._chainStakeEventsViewer, () => 'Stake events viewer not set')\n }\n\n protected get positions() {\n return this.params.positions\n }\n\n async active(): Promise<bigint> {\n let active = 0n\n const positions = await this.activeStakes()\n for (const position of positions) {\n if (position.removeBlock === 0) {\n active += position.amount\n }\n }\n return active\n }\n\n async activeByAddressStaked(staked: Address) {\n let active = 0n\n const positions = await this.activeStakes()\n for (const position of positions) {\n if (position.removeBlock === 0 && asAddress(position.staked) === asAddress(staked)) {\n active += position.amount\n }\n }\n return active\n }\n\n async activeByStaker(staker: Address): Promise<bigint> {\n let active = 0n\n const positions = await this.activeStakes()\n for (const position of positions) {\n if (position.removeBlock === 0 && asAddress(position.staker) === asAddress(staker)) {\n active += position.amount\n }\n }\n return active\n }\n\n activeStakes(): Promisable<Position[]> {\n return this.positions.filter(s => (s.withdrawBlock === 0) && (s.removeBlock === 0))\n }\n\n override async createHandler() {\n await super.createHandler()\n this._chainStakeEventsViewer = assertEx(\n (await this.locateAndCreate<StakeEventsViewer>(StakeEventsViewerMoniker)),\n () => 'Failed to create StakeEventsViewer',\n )\n }\n\n minWithdrawalBlocks(): number {\n return this.params.minWithdrawalBlocks ?? 10\n }\n\n async pending() {\n let pending = 0n\n const positions = await this.removedStakes()\n for (const position of positions) {\n if (position.removeBlock !== 0 && position.withdrawBlock === 0) {\n pending += position.amount\n }\n }\n return pending\n }\n\n async pendingByStaker(staker: Address) {\n let pending = 0n\n const positions = await this.removedStakes()\n for (const position of positions) {\n if (position.removeBlock !== 0 && position.withdrawBlock === 0 && asAddress(position.staker) === asAddress(staker)) {\n pending += position.amount\n }\n }\n return pending\n }\n\n removedStakes(): Promisable<Position[]> {\n return this.positions.filter(s => (s.withdrawBlock === 0) && (s.removeBlock !== 0))\n }\n\n rewardsContract(): Address {\n return toAddress(toAddress(1n))\n }\n\n stakeById(id: number): Position {\n return assertEx(this.positions[id], () => new Error(`Stake with id ${id} not found`))\n }\n\n stakeByStaker(staker: Address, slot: number): Position {\n return this.positions.filter(s => asAddress(s.staker) === asAddress(staker))[slot]\n }\n\n stakesByStaked(staked: Address, range: [number, number | undefined] = [0, undefined]): Position[] {\n const endBlock = (range[1] ?? Number.MAX_SAFE_INTEGER)\n return this.positions.filter(s => asAddress(s.staked) === asAddress(staked) && s.addBlock <= endBlock && s.removeBlock <= endBlock)\n }\n\n stakesByStaker(staker: Address, range: [number, number | undefined] = [0, undefined]): Position[] {\n const endBlock = (range[1] ?? Number.MAX_SAFE_INTEGER)\n return this.positions.filter(s => asAddress(s.staker) === asAddress(staker) && s.addBlock <= endBlock && s.removeBlock <= endBlock)\n }\n\n stakingTokenAddress(): Address {\n return toAddress('0x000000000000000000000000000011')\n }\n\n async withdrawn() {\n let withdrawn = 0n\n const positions = await this.withdrawnStakes()\n for (const position of positions) {\n if (position.withdrawBlock !== 0) {\n withdrawn += position.amount\n }\n }\n return withdrawn\n }\n\n async withdrawnByStaker(staker: Address) {\n let withdrawn = 0n\n const positions = await this.withdrawnStakes()\n for (const position of positions) {\n if (position.withdrawBlock !== 0 && asAddress(position.staker) === asAddress(staker)) {\n withdrawn += position.amount\n }\n }\n return withdrawn\n }\n\n withdrawnStakes(): Promisable<Position[]> {\n return this.positions.filter(s => (s.withdrawBlock !== 0))\n }\n}\n","import type { Hash } from '@xylabs/sdk-js'\nimport {\n asHash, assertEx, isDefined,\n} from '@xylabs/sdk-js'\nimport type {\n BlockViewer,\n TimeDomain, TimePayload, TimeSyncViewer,\n} from '@xyo-network/xl1-protocol-lib'\nimport {\n asTimePayload, asXL1BlockNumber, BlockViewerMoniker, TimeSchema,\n TimeSyncViewerMoniker,\n} from '@xyo-network/xl1-protocol-lib'\nimport type { Provider } from 'ethers'\n\nimport type { CreatableProviderParams } from '../../CreatableProvider/index.ts'\nimport { AbstractCreatableProvider, creatableProvider } from '../../CreatableProvider/index.ts'\n\n/** Parameters for SimpleTimeSyncViewer. */\nexport interface SimpleTimeSyncViewerParams extends CreatableProviderParams {\n ethProvider?: Provider\n}\n\n/** SimpleTimeSyncViewer implementation. */\n@creatableProvider()\nexport class SimpleTimeSyncViewer extends AbstractCreatableProvider<SimpleTimeSyncViewerParams> implements TimeSyncViewer {\n static readonly defaultMoniker = TimeSyncViewerMoniker\n static readonly dependencies = [BlockViewerMoniker]\n static readonly monikers = [TimeSyncViewerMoniker]\n moniker = SimpleTimeSyncViewer.defaultMoniker\n\n private _blockViewer?: BlockViewer\n\n protected get blockViewer() {\n return this._blockViewer!\n }\n\n protected get ethProvider() {\n return this.params.ethProvider\n }\n\n async convertTime(fromDomain: TimeDomain, toDomain: TimeDomain, from: number): Promise<number> {\n switch (fromDomain) {\n case 'xl1': {\n const [block, payloads] = assertEx(await this.blockViewer.blockByNumber(asXL1BlockNumber(from, true)), () => 'Block not found')\n const timeSchemaIndex = block.payload_schemas.indexOf(TimeSchema)\n const hash = timeSchemaIndex === -1 ? undefined : block.payload_hashes[timeSchemaIndex]\n const timePayload = asTimePayload(isDefined(hash) ? payloads.find(p => p._hash === hash) : undefined)\n if (timePayload === undefined) return 0\n switch (toDomain) {\n case 'xl1': {\n return timePayload.xl1 ?? 0\n }\n case 'epoch': {\n return timePayload.epoch ?? 0\n }\n case 'ethereum': {\n return timePayload.ethereum ?? 0\n }\n default: {\n throw new Error(`Unsupported to toDomain: ${toDomain}`)\n }\n }\n }\n default: {\n throw new Error(`Unsupported from fromDomain: ${fromDomain}`)\n }\n }\n }\n\n override async createHandler() {\n await super.createHandler()\n this._blockViewer = await this.locator.getInstance<BlockViewer>(BlockViewerMoniker)\n }\n\n async currentTime(domain: TimeDomain): Promise<[string, number]> {\n switch (domain) {\n case 'xl1': {\n return ['xl1', (await this.blockViewer.currentBlock())?.[0].block ?? -1]\n }\n case 'epoch': {\n return ['epoch', Date.now()]\n }\n case 'ethereum': {\n return ['ethereum', (await this.ethProvider?.getBlockNumber()) ?? 0]\n }\n default: {\n throw new Error(`Unknown time domain: ${domain}`)\n }\n }\n }\n\n async currentTimeAndHash(domain: TimeDomain): Promise<[number, Hash | null]> {\n switch (domain) {\n case 'xl1': {\n const [head] = await this.blockViewer.currentBlock()\n return [head.block, head._hash]\n }\n case 'epoch': {\n return [Date.now(), null]\n }\n case 'ethereum': {\n const provider = assertEx(this.ethProvider, () => 'Ethereum provider not configured')\n const blockNumber = (await provider.getBlockNumber()) ?? 0\n const block = await provider.getBlock(blockNumber)\n const blockHash = asHash(assertEx(block?.hash, () => 'Block hash not found'), true)\n return [blockNumber, blockHash]\n }\n default: {\n throw new Error(`Unknown time domain: ${domain}`)\n }\n }\n }\n\n async currentTimePayload(): Promise<TimePayload> {\n const [xl1, xl1Hash] = await this.currentTimeAndHash('xl1')\n const timePayload: TimePayload = {\n schema: TimeSchema,\n // this is for the previous block\n xl1,\n // this is for the previous block\n xl1Hash: assertEx(xl1Hash, () => 'No xl1 hash available from time sync service'),\n epoch: Date.now(),\n }\n if (isDefined(this.ethProvider)) {\n const [ethereum, ethHashOrNull] = await this.currentTimeAndHash('ethereum')\n const ethereumHash = asHash(ethHashOrNull, () => 'No ethereum hash available from time sync service')\n timePayload.ethereum = ethereum\n timePayload.ethereumHash = ethereumHash\n }\n return timePayload\n }\n}\n","import { assertEx } from '@xylabs/sdk-js'\nimport { PayloadBuilder } from '@xyo-network/sdk-js'\nimport {\n AccountBalanceViewer,\n AccountBalanceViewerMoniker,\n asXL1BlockRange,\n BlockViewer,\n BlockViewerMoniker,\n ChainContractViewer,\n ChainContractViewerMoniker,\n ChainId,\n HydratedTransactionStateValidationFunction,\n HydratedTransactionValidationError,\n HydratedTransactionValidationFunction,\n isChainQualifiedHeadConfig,\n isHydratedTransaction,\n SignedHydratedTransaction,\n type SignedHydratedTransactionWithHashMeta,\n TransactionValidationConfig,\n TransactionValidationQualification,\n TransactionValidationViewer,\n TransactionValidationViewerMoniker,\n} from '@xyo-network/xl1-protocol-lib'\n\nimport type { CreatableProviderParams } from '../../CreatableProvider/index.ts'\nimport { AbstractCreatableProvider, creatableProvider } from '../../CreatableProvider/index.ts'\n\n/** Parameters for SimpleTransactionValidationViewer. */\nexport interface SimpleTransactionValidationViewerParams extends CreatableProviderParams {\n maxUncleWindowSize?: number\n protocol?: HydratedTransactionValidationFunction\n state?: HydratedTransactionStateValidationFunction\n}\n\n/** SimpleTransactionValidationViewer implementation. */\n@creatableProvider()\nexport class SimpleTransactionValidationViewer extends\n AbstractCreatableProvider<SimpleTransactionValidationViewerParams> implements TransactionValidationViewer {\n static readonly defaultMoniker = TransactionValidationViewerMoniker\n static readonly dependencies = [AccountBalanceViewerMoniker, ChainContractViewerMoniker, BlockViewerMoniker]\n static readonly monikers = [TransactionValidationViewerMoniker]\n moniker = SimpleTransactionValidationViewer.defaultMoniker\n\n private _accountBalanceViewer!: AccountBalanceViewer\n private _blockViewer!: BlockViewer\n private _chainContractViewer!: ChainContractViewer\n\n protected get blockViewer() {\n return this._blockViewer\n }\n\n protected get chainContractViewer() {\n return this._chainContractViewer\n }\n\n protected get maxUncleWindowSize() {\n return this.params.maxUncleWindowSize!\n }\n\n static override async paramsHandler(params: Partial<SimpleTransactionValidationViewerParams>): Promise<SimpleTransactionValidationViewerParams> {\n return {\n ...await super.paramsHandler(params),\n protocol: params.protocol,\n state: params.state,\n maxUncleWindowSize: params.maxUncleWindowSize ?? 100,\n } satisfies SimpleTransactionValidationViewerParams\n }\n\n override async createHandler() {\n await super.createHandler()\n this._accountBalanceViewer = await this.locator.getInstance<AccountBalanceViewer>(AccountBalanceViewerMoniker)\n this._chainContractViewer = await this.locator.getInstance<ChainContractViewer>(ChainContractViewerMoniker)\n this._blockViewer = await this.locator.getInstance<BlockViewer>(BlockViewerMoniker)\n }\n\n async qualifiedValidateTransaction(\n block: SignedHydratedTransactionWithHashMeta,\n config?: TransactionValidationConfig,\n ): Promise<[HydratedTransactionValidationError[] | SignedHydratedTransactionWithHashMeta, TransactionValidationQualification]> {\n const result = (await this.qualifiedValidateTransactions([block], config))\n return [result[0][0], result[1]]\n }\n\n async qualifiedValidateTransactions(\n transactions: SignedHydratedTransaction[],\n config?: TransactionValidationConfig,\n ): Promise<[(HydratedTransactionValidationError[] | SignedHydratedTransactionWithHashMeta)[], TransactionValidationQualification]> {\n const { value, state } = config ?? {\n shape: true, links: true, state: true, head: undefined,\n }\n\n const transactionsWithMeta = await Promise.all(transactions.map(b => Promise.all([PayloadBuilder.addHashMeta(b[0]), PayloadBuilder.addHashMeta(b[1])])))\n\n const head = isChainQualifiedHeadConfig(config)\n ? assertEx(\n (await this.blockViewer.blockByHash(config.head))?.[0],\n () => `Specified a head that is not in the chain [${config.head}]`,\n )\n : undefined\n\n const headBlock = head ?? (await this.blockViewer.currentBlock())[0]\n\n const validateProtocol = value ? this.doValidateProtocol.bind(this) : undefined\n const validateState = state ? this.doValidateState.bind(this) : undefined\n\n const chainId = headBlock.chain\n\n const qualification = { head: headBlock._hash, range: asXL1BlockRange([0, headBlock.block], true) }\n const [protocolResults, stateResults] = await Promise.all([\n validateProtocol?.(transactionsWithMeta, chainId), validateState?.(transactionsWithMeta, chainId),\n ])\n const blockResults = transactionsWithMeta.map((r, i) => {\n const errors = []\n if (protocolResults && !isHydratedTransaction(protocolResults[i])) {\n errors.push(...(protocolResults[i]))\n }\n if (stateResults && !isHydratedTransaction(stateResults[i])) {\n errors.push(...(stateResults[i]))\n }\n return errors.length === 0 ? r : errors\n })\n return [blockResults, qualification]\n }\n\n qualifiedValidateUncle(\n _transactions: SignedHydratedTransaction[],\n _config?: TransactionValidationConfig,\n ): Promise<[(HydratedTransactionValidationError[] | SignedHydratedTransactionWithHashMeta)[], TransactionValidationQualification]> {\n throw new Error('Method not implemented.')\n }\n\n async validateTransaction(\n block: SignedHydratedTransaction,\n config?: TransactionValidationConfig,\n ): Promise<HydratedTransactionValidationError[] | SignedHydratedTransactionWithHashMeta> {\n return (await this.validateTransactions([block], config))[0]\n }\n\n async validateTransactions(\n transactions: SignedHydratedTransaction[],\n config?: TransactionValidationConfig,\n ): Promise<(HydratedTransactionValidationError[] | SignedHydratedTransactionWithHashMeta)[]> {\n return (await this.qualifiedValidateTransactions(transactions, config))[0]\n }\n\n private async doValidateProtocol(\n transactions: SignedHydratedTransactionWithHashMeta[],\n chainId: ChainId,\n ): Promise<(SignedHydratedTransactionWithHashMeta | HydratedTransactionValidationError[])[]> {\n return (await Promise.all(transactions.map(async (tx) => {\n const errors = await this.params.protocol!(\n { ...this.context, chainId },\n tx,\n )\n return (errors.length === 0) ? tx : errors\n })))\n }\n\n private async doValidateState(\n transactions: SignedHydratedTransactionWithHashMeta[],\n chainId: ChainId,\n ): Promise<(SignedHydratedTransactionWithHashMeta | HydratedTransactionValidationError[])[]> {\n return (await Promise.all(transactions.map(async (tx) => {\n const errors = await this.params.state!(\n {\n ...this.context, chainId, accountBalanceViewer: this._accountBalanceViewer, blockViewer: this.blockViewer,\n },\n tx,\n )\n return (errors.length === 0) ? tx : errors\n })))\n }\n}\n","import {\n assertEx, exists, Hash,\n} from '@xylabs/sdk-js'\nimport { BoundWitnessSchema } from '@xyo-network/sdk-js'\nimport {\n asSignedHydratedTransactionWithHashMeta,\n asSignedTransactionBoundWitness,\n BlockViewer,\n BlockViewerMoniker,\n isTransactionBoundWitnessWithHashMeta,\n SignedHydratedTransactionWithHashMeta, TransactionViewer, TransactionViewerMoniker,\n XL1BlockNumber,\n} from '@xyo-network/xl1-protocol-lib'\n\nimport {\n AbstractCreatableProvider, creatableProvider, CreatableProviderParams,\n} from '../../CreatableProvider/index.ts'\n\n/** Parameters for SimpleTransactionViewer. */\nexport interface SimpleTransactionViewerParams extends CreatableProviderParams {\n\n}\n\n/** SimpleTransactionViewer implementation. */\n@creatableProvider()\nexport class SimpleTransactionViewer extends AbstractCreatableProvider<SimpleTransactionViewerParams> implements TransactionViewer {\n static readonly defaultMoniker = TransactionViewerMoniker\n static readonly dependencies = [BlockViewerMoniker]\n static readonly monikers = [TransactionViewerMoniker]\n moniker = SimpleTransactionViewer.defaultMoniker\n\n private _blockViewer!: BlockViewer\n\n protected get blockViewer() {\n return this._blockViewer\n }\n\n async byBlockHashAndIndex(blockHash: Hash, transactionIndex: number): Promise<SignedHydratedTransactionWithHashMeta | null> {\n return await this.spanAsync('byBlockHashAndIndex', async () => {\n assertEx(transactionIndex >= 0, () => 'transactionIndex must be greater than or equal to 0')\n try {\n const block = await this.blockViewer.blockByHash(blockHash)\n if (!block) return null\n const blockBoundWitnessIndexes = block[0].payload_schemas.map((schema, index) => schema === BoundWitnessSchema ? index : undefined).filter(exists)\n const blockBoundWitnessHashes = new Set(blockBoundWitnessIndexes.map(index => block[0].payload_hashes[index]))\n const blockBoundWitnesses = block[1].filter(payload => blockBoundWitnessHashes.has(payload._hash) || blockBoundWitnessHashes.has(payload._dataHash))\n const blockTransactionBoundWitnesses = blockBoundWitnesses.filter(isTransactionBoundWitnessWithHashMeta)\n const transaction = blockTransactionBoundWitnesses.at(transactionIndex)\n if (!transaction) return null\n return await this.byHash(transaction._hash)\n } catch {\n return null\n }\n }, this.context)\n }\n\n async byBlockNumberAndIndex(blockNumber: XL1BlockNumber, transactionIndex: number): Promise<SignedHydratedTransactionWithHashMeta | null> {\n return await this.spanAsync('byBlockNumberAndIndex', async () => {\n try {\n const block = await this.blockViewer.blockByNumber(blockNumber)\n if (!block) return null\n return await this.byBlockHashAndIndex(block[0]._hash, transactionIndex)\n } catch {\n return null\n }\n }, this.context)\n }\n\n async byHash(transactionHash: Hash): Promise<SignedHydratedTransactionWithHashMeta | null> {\n return await this.spanAsync('byHash', async () => {\n try {\n const transaction = asSignedTransactionBoundWitness(await this.blockViewer.payloadByHash(transactionHash))\n if (transaction) {\n const payloads = await this.blockViewer.payloadsByHash(transaction.payload_hashes)\n return asSignedHydratedTransactionWithHashMeta([transaction, payloads]) ?? null\n }\n return null\n } catch {\n return null\n }\n }, this.context)\n }\n\n override async createHandler(): Promise<void> {\n await super.createHandler()\n this._blockViewer = await this.locator.getInstance<BlockViewer>(BlockViewerMoniker)\n }\n\n async transactionByBlockHashAndIndex(blockHash: Hash, transactionIndex: number = 0): Promise<SignedHydratedTransactionWithHashMeta | null> {\n return await this.byBlockHashAndIndex(blockHash, transactionIndex)\n }\n\n async transactionByBlockNumberAndIndex(blockNumber: XL1BlockNumber, transactionIndex: number = 0): Promise<SignedHydratedTransactionWithHashMeta | null> {\n return await this.byBlockNumberAndIndex(blockNumber, transactionIndex)\n }\n\n async transactionByHash(transactionHash: Hash): Promise<SignedHydratedTransactionWithHashMeta | null> {\n return await this.byHash(transactionHash)\n }\n}\n","import {\n assertEx, exists, type Hash, isNull, type Promisable,\n} from '@xylabs/sdk-js'\nimport type { Payload, WithHashMeta } from '@xyo-network/sdk-js'\nimport type {\n BlockViewer,\n ChainId, HydratedBlockWithHashMeta, SignedHydratedBlockWithHashMeta, SyncMap, WindowedBlockViewer, XL1BlockNumber,\n} from '@xyo-network/xl1-protocol-lib'\nimport {\n asXL1BlockNumber, BlockViewerMoniker, WindowedBlockViewerMoniker,\n} from '@xyo-network/xl1-protocol-lib'\nimport { Mutex } from 'async-mutex'\n\nimport { transactionsFromHydratedBlock } from '../../block/index.ts'\nimport {\n AbstractCreatableProvider, creatableProvider, type CreatableProviderParams,\n} from '../../CreatableProvider/index.ts'\nimport { MemoryMap } from '../../driver/index.ts'\n\n/** Parameters for SimpleWindowedBlockViewer. */\nexport interface SimpleWindowedBlockViewerParams extends CreatableProviderParams {\n blockViewer?: BlockViewer\n maxWindowSize: number\n syncInterval: number\n}\n\n/** SimpleWindowedBlockViewer implementation. */\n@creatableProvider()\nexport class SimpleWindowedBlockViewer extends AbstractCreatableProvider<SimpleWindowedBlockViewerParams> implements WindowedBlockViewer {\n static readonly defaultMoniker = WindowedBlockViewerMoniker\n static readonly dependencies = [BlockViewerMoniker]\n static readonly monikers = [WindowedBlockViewerMoniker]\n moniker = WindowedBlockViewerMoniker\n\n private _blockHashMap!: SyncMap<Hash, SignedHydratedBlockWithHashMeta>\n private _blockNumberMap!: SyncMap<XL1BlockNumber, SignedHydratedBlockWithHashMeta>\n // the external BlockViewer\n private _blockViewer!: BlockViewer\n private _chain: SignedHydratedBlockWithHashMeta[] = []\n private _syncMutex = new Mutex()\n private _timerId: ReturnType<typeof setInterval> | null = null\n private _transactionHashMap!: SyncMap<Hash, SignedHydratedBlockWithHashMeta>\n\n protected get maxWindowSize() {\n return this.params.maxWindowSize\n }\n\n protected get syncInterval() {\n return this.params.syncInterval\n }\n\n static override async paramsHandler(params?: Partial<SimpleWindowedBlockViewerParams>): Promise<SimpleWindowedBlockViewerParams> {\n return {\n ...await super.paramsHandler(params),\n maxWindowSize: params?.maxWindowSize ?? 1000,\n syncInterval: params?.syncInterval ?? 10_000,\n }\n }\n\n blockByHash(hash: Hash) {\n return this._blockHashMap.get(hash) ?? null\n }\n\n blockByNumber(blockNumber: XL1BlockNumber) {\n return this._blockNumberMap.get(blockNumber) ?? null\n }\n\n async blockByTransactionHash(hash: Hash) {\n const [block = null] = await this.blocksByTransactionHashes([hash])\n return block\n }\n\n blocksByHash(hash: Hash, limit?: number) {\n const result: SignedHydratedBlockWithHashMeta[] = []\n let block = this._blockHashMap.get(hash)\n while (block && (limit === undefined || result.length < limit)) {\n result.unshift(block)\n const previousHash = block[0].previous\n block = previousHash ? this._blockHashMap.get(previousHash) : undefined\n }\n return result\n }\n\n blocksByNumber(blockNumber: XL1BlockNumber, limit?: number) {\n const result: SignedHydratedBlockWithHashMeta[] = []\n let block = this._blockNumberMap.get(blockNumber)\n while (block && (limit === undefined || result.length < limit)) {\n result.unshift(block)\n const previousBlockNumber = asXL1BlockNumber(block[0].block - 1, true)\n block = (previousBlockNumber >= 0) ? this._blockNumberMap.get(previousBlockNumber) : undefined\n }\n return result\n }\n\n blocksByTransactionHashes(hashes: Hash[]): Promisable<HydratedBlockWithHashMeta[]> {\n return hashes.map(hash => this._transactionHashMap.get(hash)).filter(exists)\n }\n\n chainId(_blockNumber?: unknown): Promisable<ChainId> {\n throw new Error('Method not implemented.')\n }\n\n override async createHandler() {\n await super.createHandler()\n\n this._blockViewer = assertEx(\n this.params.blockViewer ?? await this.locator.getInstance<BlockViewer>(BlockViewerMoniker),\n () => 'BlockViewer instance is required',\n )\n this._blockHashMap = new MemoryMap<Hash, SignedHydratedBlockWithHashMeta>()\n this._blockNumberMap = new MemoryMap<XL1BlockNumber, SignedHydratedBlockWithHashMeta>()\n this._transactionHashMap = new MemoryMap<Hash, SignedHydratedBlockWithHashMeta>()\n }\n\n currentBlock(): Promisable<SignedHydratedBlockWithHashMeta> {\n return assertEx(this._chain.at(-1))\n }\n\n currentBlockHash(): Promisable<Hash> {\n return assertEx(this._chain.at(-1)?.[0]._hash)\n }\n\n currentBlockNumber(): Promisable<XL1BlockNumber> {\n return assertEx(this._chain.at(-1)?.[0].block)\n }\n\n async payloadByHash(hash: Hash): Promise<WithHashMeta<Payload> | null> {\n const payloads = await this.payloadsByHash([hash])\n return payloads.length > 0 ? payloads[0] : null\n }\n\n payloadsByHash(_hashes: Hash[]): Promisable<WithHashMeta<Payload>[]> {\n throw new Error('Method not implemented.')\n }\n\n override async startHandler() {\n await super.startHandler()\n await this.sync()\n this.stopPoll()\n this.startPoll()\n }\n\n override async stopHandler() {\n await super.stopHandler()\n this.stopPoll()\n }\n\n private addBlock(block: SignedHydratedBlockWithHashMeta) {\n // Add the new block to the end of the window\n this._chain.push(block)\n\n // Index the new block\n this._blockHashMap.set(block[0]._hash, block)\n this._blockNumberMap.set(block[0].block, block)\n for (const tx of transactionsFromHydratedBlock(block)) {\n this._transactionHashMap.set(tx._hash, block)\n }\n\n // Purge only if the window size is exceeded\n while (this._chain.length > this.maxWindowSize) {\n const removedBlock = this._chain.shift()\n if (!removedBlock) break\n\n this._blockHashMap.delete(removedBlock[0]._hash)\n this._blockNumberMap.delete(removedBlock[0].block)\n for (const tx of transactionsFromHydratedBlock(removedBlock)) {\n this._transactionHashMap.delete(tx._hash)\n }\n }\n }\n\n private startPoll() {\n this._timerId = setInterval(() => {\n void this.sync()\n }, this.syncInterval)\n }\n\n private stopPoll() {\n if (this._timerId) {\n clearInterval(this._timerId)\n }\n this._timerId = null\n }\n\n private async sync() {\n if (this._syncMutex.isLocked()) {\n return\n }\n return await this._syncMutex.runExclusive(async () => {\n try {\n let cursor: SignedHydratedBlockWithHashMeta | null = await this._blockViewer.currentBlock()\n const previousHead = this._chain.length > 0 ? await this.currentBlockHash() : null\n const newBlocks: SignedHydratedBlockWithHashMeta[] = []\n while (!isNull(cursor) && cursor[0]._hash !== previousHead && newBlocks.length < this.maxWindowSize) {\n newBlocks.unshift(cursor)\n const previousHash = newBlocks[0][0].previous\n cursor = isNull(previousHash) ? null : await this._blockViewer.blockByHash(previousHash)\n }\n for (const block of newBlocks) {\n this.addBlock(block)\n }\n } catch (ex) {\n console.error('Error during sync:', ex)\n }\n })\n }\n}\n","import type {\n CreatableName, CreatableStatus, CreatableStatusReporter, Logger,\n} from '@xylabs/sdk-js'\n\n/** Status reporter that logs status changes and tracks service status counts */\nexport class LoggerStatusReporter implements CreatableStatusReporter {\n protected logger: Logger\n\n protected statusMap: Record<CreatableName, CreatableStatus> = {}\n\n constructor(logger: Logger) {\n this.logger = logger\n }\n\n report(name: CreatableName, status: CreatableStatus, progress?: number | Error): void {\n this.statusMap[name] = status\n const starting = (Object.entries(this.statusMap).map(([, value]): number => value === 'starting' ? 1 : 0)).reduce((a, b) => a + b, 0)\n const started = (Object.entries(this.statusMap).map(([, value]): number => value === 'started' ? 1 : 0)).reduce((a, b) => a + b, 0)\n this.logger.info(`${started}/${starting + started} ${name} status: ${status}`, { progress })\n }\n}\n","import type { CreatableName, CreatableStatus } from '@xylabs/sdk-js'\n\nimport { LoggerStatusReporter } from './ServiceStatus.ts'\n\n/**\n * Enum-like record for statuses with priority allowing\n * for determination of the aggregated status.\n */\nconst statusPriority: Record<CreatableStatus, number> = {\n error: 0,\n stopped: 1,\n stopping: 2,\n creating: 3,\n created: 4,\n starting: 5,\n started: 6,\n}\n\n/**\n * A sentinel status that represents the initial state\n * before any statuses are reported.\n * It is used to ensure that the monitor has a valid status\n * even when no statuses have been reported yet and to\n * prevent the system from showing an \"error\" state\n * when no statuses are available.\n */\nconst SENTINEL_STATUS: CreatableStatus = 'starting'\n\n/**\n * Given an array of statuses, this function reduces them\n * to the minimum status based on the defined priority.\n * @param statuses An array of statuses to reduce.\n * @returns The minimum status based on priority.\n */\nconst reduceToMinimumStatus = (statuses: CreatableStatus[]): CreatableStatus => {\n let minStatus: CreatableStatus = SENTINEL_STATUS\n let minPriority = Infinity\n\n for (const status of statuses) {\n const priority = statusPriority[status]\n if (priority < minPriority) {\n minPriority = priority\n minStatus = status\n }\n }\n return minStatus\n}\n\n/** Handler for global status transitions with optional from/to filters */\nexport type GlobalTransitionHandler = {\n from?: CreatableStatus\n handler: (from: CreatableStatus, to: CreatableStatus) => void\n to?: CreatableStatus\n}\n/** Handler for named service status transitions with optional from/to filters */\nexport type TransitionHandler = GlobalTransitionHandler & {\n name?: string\n}\n\n/** Monitors runtime service statuses and fires transition callbacks on status changes */\nexport class RuntimeStatusMonitor extends LoggerStatusReporter {\n private globalTransitions: GlobalTransitionHandler[] = []\n private transitions: TransitionHandler[] = []\n\n getGlobalStatus(): CreatableStatus {\n // If no statuses have been reported, return the sentinel status\n if (Object.keys(this.statusMap).length === 0) return SENTINEL_STATUS\n return reduceToMinimumStatus(Object.values(this.statusMap))\n }\n\n getStatus(name: CreatableName): CreatableStatus | undefined {\n return this.statusMap[name]\n }\n\n onGlobalTransition(match: { from?: CreatableStatus; to?: CreatableStatus }, handler: (from: CreatableStatus, to: CreatableStatus) => void) {\n this.globalTransitions.push({ ...match, handler })\n }\n\n /**\n * Register a callback to be called on a specific transition.\n */\n onTransition(match: { from?: CreatableStatus; name: string; to?: CreatableStatus }, handler: (from: CreatableStatus, to: CreatableStatus) => void) {\n this.transitions.push({ ...match, handler })\n }\n\n override report(name: CreatableName, status: CreatableStatus, progress?: number | Error): void {\n // Capture the current status before updating\n const previous = this.statusMap[name]\n const previousGlobal = this.getGlobalStatus()\n\n // Update the status map with the new status\n super.report(name, status, progress)\n\n // If the status hasn't changed, do not run handlers\n if (previous === status) return\n this.runTransitions(this.transitions, previous, status, name)\n\n // If the global status hasn't changed, do not run handlers\n const globalStatus = this.getGlobalStatus()\n if (previousGlobal === globalStatus) return\n this.runTransitions(this.globalTransitions, previousGlobal, globalStatus)\n }\n\n private runTransitions(\n transitions: (TransitionHandler | GlobalTransitionHandler)[],\n prev: CreatableStatus,\n next: CreatableStatus,\n name?: string,\n ) {\n for (const {\n from, to, name: matchName, handler,\n } of transitions as TransitionHandler[]) {\n if ((matchName === undefined || matchName === name)\n && (from === undefined || from === prev)\n && (to === undefined || to === next)) {\n handler(prev, next)\n }\n }\n }\n}\n","import { assertEx } from '@xylabs/sdk-js'\nimport type { ChainContextRead, XL1BlockNumber } from '@xyo-network/xl1-protocol-lib'\nimport { asTimePayload, TimeSchema } from '@xyo-network/xl1-protocol-lib'\n\nimport { hashFromBlockNumber, hydrateBlock } from '../../block/index.ts'\n\n/** Xl1BlockNumberToEthBlockNumber helper function. */\nexport async function xl1BlockNumberToEthBlockNumber(context: ChainContextRead, xl1BlockNumber: XL1BlockNumber): Promise<number> {\n const blockHash = await hashFromBlockNumber(context, xl1BlockNumber)\n const hydratedBlock = await hydrateBlock(context, blockHash)\n const timePayload = asTimePayload(hydratedBlock[1].find(p => p.schema === TimeSchema), { required: true })\n return assertEx(timePayload.ethereum, () => 'No ethereum timestamp found on block')\n}\n","import { HDWallet } from '@xyo-network/sdk-js'\n\nimport { DEFAULT_WALLET_PATH } from './paths.ts'\n\n/**\n * Initializes a wallet to the default XYO path from a mnemonic phrase\n * @param walletPhrase The mnemonic phrase for the wallet\n * @returns A wallet initialized to the default XYO path using the provided phrase\n */\nexport const generateXyoBaseWalletFromPhrase = (walletPhrase: string) => {\n const wallet = HDWallet.fromPhrase(walletPhrase, DEFAULT_WALLET_PATH)\n return wallet\n}\n","/** WALLET_COMPLIANCE constant. */\nexport const WALLET_COMPLIANCE = '44\\'' as const\n\n/** COIN_TYPES constant. */\nexport const COIN_TYPES = { Ethereum: '60\\'' } as const\n\n/** ACCOUNT_TYPE constant. */\nexport const ACCOUNT_TYPE = { GANACHE: '0\\'', XYO: '0\\'' } as const\n\n/** CHANGE_ADDRESS constant. */\nexport const CHANGE_ADDRESS = { META_MASK: '0', XYO: '0' } as const\n\n/** ADDRESS_INDEX constant. */\nexport const ADDRESS_INDEX = { META_MASK: '0', XYO: '0' } as const\n\n/** DEFAULT_WALLET_PATH constant. */\nexport const DEFAULT_WALLET_PATH = `m/${WALLET_COMPLIANCE}/${COIN_TYPES.Ethereum}/${ACCOUNT_TYPE.XYO}/${CHANGE_ADDRESS.XYO}`\n"],"mappings":"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","names":["assertEx","assertEx","assertEx","assertEx","assertEx","assertEx","isTransactionBoundWitnessWithStorageMeta","isDefined","isDefined","isDefined","isDefined","stepSize","result","StepSizes","StepSizes","range","assertEx","toSafeJsonString","zodAsFactory","zodIsFactory","zodToFactory","globalRegistry","z","z","z","z","z","globalRegistry","z","globalRegistry","z","z","globalRegistry","globalRegistry","z","z","globalRegistry","z","globalRegistry","z","globalRegistry","z","z","z","z","globalRegistry","z","isDefined","isUndefined","globalRegistry","z","globalRegistry","z","z","globalRegistry","globalRegistry","z","AddressZod","globalRegistry","z","z","z","globalRegistry","zodIsFactory","zodAsFactory","zodToFactory","z","z","zodAsFactory","zodIsFactory","zodToFactory","globalRegistry","z","z","globalRegistry","zodIsFactory","zodAsFactory","zodToFactory","z","zodAsFactory","zodIsFactory","zodToFactory","zodAsFactory","zodIsFactory","zodToFactory","z","z","zodIsFactory","zodAsFactory","zodToFactory","PayloadBuilder","PayloadBuilder","PayloadBuilder","PayloadBuilder","PayloadBundleSchema","PayloadBuilder","asXL1BlockNumber","PayloadBuilder","assertEx","toHex","asAnyPayload","PayloadBuilder","asXL1BlockNumber","elevatedPayloads","toHex","BoundWitnessBuilder","PayloadBuilder","defaultTransactionFees","delay","isDefined","assertEx","asAnyPayload","isAllowedBlockPayload","elevatedPayloads","hash","PayloadBuilder","asHash","asHash","elevatedPayloads","AttoXL1","AttoXL1","elevatedPayloads","asHash","assertEx","isAllowedBlockPayload","assertEx","PayloadBuilder","assertEx","PayloadBuilder","asXL1BlockNumber","defaultTransactionFees","isAllowedBlockPayload","assertEx","asXL1BlockNumber","defaultTransactionFees","isAllowedBlockPayload","PayloadBuilder","bundle","PayloadBuilder","PayloadBundleSchema","zodIsFactory","zodAsFactory","zodToFactory","AbstractCreatable","assertEx","IdLogger","assertEx","creatableProvider","AbstractCreatable","IdLogger","assertEx","assertEx","assertEx","zodAsFactory","zodIsFactory","zodToFactory","zodIsFactory","zodAsFactory","zodToFactory","isDefined","PayloadBuilder","z","z","z","AsObjectFactory","asSchema","isPayloadOfZodType","z","PayloadBuilder","PayloadBuilder","asHash","isUndefined","PayloadBuilder","AsObjectFactory","asSchema","hexToBigInt","toAddress","span","isTransfer","hexToBigInt","span","isTransfer","asXL1BlockNumber","StepSizes","stepSize","isDefined","assertEx","isDefined","isDefined","assertEx","asXL1BlockRange","StepSizes","asXL1BlockRange","assertEx","StepSizes","assertEx","isDefined","asXL1BlockNumber","asXL1BlockRange","assertEx","asXL1BlockRange","asXL1BlockNumber","isDefined","assertEx","isDefined","assertEx","toAddress","isTransfer","hexToBigInt","toAddress","toAddress","StepSizes","toAddress","isDefined","keccak256","asXL1BlockRange","StepSizes","stepSize","assertEx","StepSizes","stepSize","assertEx","StepSizes","isTransfer","assertEx","toAddress","assertEx","isDefined","asAttoXL1","asXL1BlockRange","isTransfer","XYO_STEP_REWARD_ADDRESS","isDefined","assertEx","isTransfer","XYO_STEP_REWARD_ADDRESS","asAttoXL1","asXL1BlockRange","asAttoXL1","asXL1BlockRange","asXL1BlockRange","asAttoXL1","assertEx","assertEx","isUndefined","PayloadBuilder","isDefined","isDefined","isDefined","asAttoXL1","isDefined","isDefined","isUndefined","isUndefined","toAddress","toAddress","isDefined","asBlockNumber","isDefined","asBlockNumber","assertEx","spanAsync","spanAsync","assertEx","isAllowedBlockPayload","elevatedPayloads","assertEx","exists","isTransactionBoundWitness","AsObjectFactory","asSchema","isPayloadOfSchemaType","hexToBigInt","toHex","isObject","asHash","assertEx","exists","isDefined","asXL1BlockNumber","asXL1BlockRange","AttoXL1","isChainQualifiedHeadConfig","isChainQualifiedRangeConfig","StepSizes","TransferSchema","Semaphore","AsObjectFactory","asSchema","isPayloadOfSchemaType","isStorageMeta","AsObjectFactory","asSchema","isPayloadOfSchemaType","isStorageMeta","asSchema","AsObjectFactory","asSchema","isPayloadOfSchemaType","isStorageMeta","spanRootAsync","assertEx","isAnyPayload","asXL1BlockNumber","StepSizes","spanRootAsync","assertEx","StepSizes","asXL1BlockNumber","isAnyPayload","asAddress","assertEx","spanRootAsync","asBlockBoundWitnessWithStorageMeta","asXL1BlockRange","spanRootAsync","assertEx","asBlockBoundWitnessWithStorageMeta","asXL1BlockRange","range","asAddress","assertEx","isAnyPayload","isHashMeta","PayloadBuilder","StepSizes","assertEx","isHashMeta","PayloadBuilder","StepSizes","isAnyPayload","assertEx","spanRootAsync","asBlockBoundWitnessWithStorageMeta","asXL1BlockRange","isChainQualifiedHeadConfig","isChainQualifiedRangeConfig","spanRootAsync","isChainQualifiedHeadConfig","assertEx","asBlockBoundWitnessWithStorageMeta","isChainQualifiedRangeConfig","asXL1BlockRange","range","assertEx","spanRootAsync","isAnyPayload","asXL1BlockNumber","StepSizes","spanRootAsync","assertEx","StepSizes","asXL1BlockNumber","isAnyPayload","asAddress","assertEx","spanRootAsync","asBlockBoundWitnessWithStorageMeta","asXL1BlockRange","isChainQualifiedHeadConfig","isChainQualifiedRangeConfig","spanRootAsync","isChainQualifiedHeadConfig","assertEx","asBlockBoundWitnessWithStorageMeta","isChainQualifiedRangeConfig","asXL1BlockRange","range","asAddress","StepSizes","Semaphore","assertEx","AttoXL1","isChainQualifiedRangeConfig","asXL1BlockRange","exists","TransferSchema","isDefined","block","isChainQualifiedHeadConfig","range","head","asXL1BlockNumber","asHash","assertEx","exists","isUndefined","asXL1BlockNumber","BlockViewerMoniker","LRUCache","z","context","assertEx","isUndefined","asXL1BlockNumber","exists","BlockViewerMoniker","assertEx","PayloadBuilder","AccountBalanceViewerMoniker","asXL1BlockRange","BlockViewerMoniker","isChainQualifiedHeadConfig","AccountBalanceViewerMoniker","BlockViewerMoniker","PayloadBuilder","isChainQualifiedHeadConfig","assertEx","asXL1BlockRange","assertEx","ChainContractViewerMoniker","FinalizationViewerMoniker","assertEx","FinalizationViewerMoniker","ChainContractViewerMoniker","assertEx","exists","isAnyPayload","z","exists","asAnyPayload","isAnyPayload","exists","asAnyPayload","isAnyPayload","isAnyPayload","assertEx","exists","z","DataLakeViewerMoniker","DataLakeViewerMoniker","exists","isAnyPayload","PayloadBuilder","DataLakeRunnerMoniker","isAnyPayload","isAnyPayload","exists","isAnyPayload","PayloadBuilder","DataLakeRunnerMoniker","DataLakeViewerMoniker","DataLakeViewerMoniker","assertEx","asSignedHydratedBlockWithStorageMeta","ChainContractViewerMoniker","FinalizationViewerMoniker","asSignedHydratedBlockWithStorageMeta","assertEx","FinalizationViewerMoniker","ChainContractViewerMoniker","assertEx","isDefined","PayloadBuilder","asXL1BlockNumber","DataLakeRunnerMoniker","TransferSchema","XyoConnectionMoniker","XyoGatewayMoniker","XyoConnectionMoniker","XyoGatewayMoniker","assertEx","isDefined","asXL1BlockNumber","PayloadBuilder","DataLakeRunnerMoniker","TransferSchema","assertEx","exists","PayloadBuilder","BlockValidationViewerMoniker","ChainContractViewerMoniker","FinalizationViewerMoniker","assertEx","BlockValidationViewerMoniker","ChainContractViewerMoniker","FinalizationViewerMoniker","exists","PayloadBuilder","bundle","exists","isDefined","isHash","isHashMeta","isPayloadBundle","isHash","isDefined","isPayloadBundle","isHashMeta","bundle","exists","isUndefined","isUndefined","assertEx","assertEx","PayloadBuilder","MempoolRunnerMoniker","PayloadBuilder","MempoolRunnerMoniker","Account","PayloadBuilder","XyoSignerMoniker","XyoSignerMoniker","Account","elevatedPayloads","PayloadBuilder","isDefined","isDefined","events","asAddress","assertEx","asAddress","assertEx","asAddress","toAddress","assertEx","StakeEventsViewerMoniker","StakeViewerMoniker","assertEx","asAddress","StakeEventsViewerMoniker","toAddress","StakeViewerMoniker","asHash","assertEx","isDefined","asTimePayload","asXL1BlockNumber","BlockViewerMoniker","assertEx","asXL1BlockNumber","asTimePayload","isDefined","BlockViewerMoniker","asHash","assertEx","PayloadBuilder","AccountBalanceViewerMoniker","asXL1BlockRange","BlockViewerMoniker","ChainContractViewerMoniker","isChainQualifiedHeadConfig","TransactionValidationViewerMoniker","AccountBalanceViewerMoniker","ChainContractViewerMoniker","BlockViewerMoniker","PayloadBuilder","isChainQualifiedHeadConfig","assertEx","asXL1BlockRange","TransactionValidationViewerMoniker","assertEx","exists","BlockViewerMoniker","isTransactionBoundWitnessWithHashMeta","assertEx","exists","isTransactionBoundWitnessWithHashMeta","BlockViewerMoniker","assertEx","exists","isNull","asXL1BlockNumber","BlockViewerMoniker","WindowedBlockViewerMoniker","Mutex","WindowedBlockViewerMoniker","Mutex","asXL1BlockNumber","exists","assertEx","BlockViewerMoniker","isNull","assertEx","asTimePayload","TimeSchema","asTimePayload","TimeSchema","assertEx"]}