@xyo-network/xl1-protocol-sdk 1.23.21 → 1.24.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/neutral/CreatableProvider/AbstractCreatableProvider.d.ts +0 -364
- package/dist/neutral/CreatableProvider/AbstractCreatableProvider.d.ts.map +1 -1
- package/dist/neutral/CreatableProvider/CreatableProviderContext.zod.d.ts +508 -2
- package/dist/neutral/CreatableProvider/CreatableProviderContext.zod.d.ts.map +1 -1
- package/dist/neutral/actor/ActorV3.d.ts +2 -0
- package/dist/neutral/actor/ActorV3.d.ts.map +1 -1
- package/dist/neutral/actor/index.d.ts +0 -3
- package/dist/neutral/actor/index.d.ts.map +1 -1
- package/dist/neutral/config/Config.d.ts +200 -1160
- package/dist/neutral/config/Config.d.ts.map +1 -1
- package/dist/neutral/config/index.d.ts +1 -1
- package/dist/neutral/config/index.d.ts.map +1 -1
- package/dist/neutral/index.mjs +1667 -2260
- package/dist/neutral/index.mjs.map +1 -1
- package/dist/neutral/test/index.mjs +60 -370
- package/dist/neutral/test/index.mjs.map +1 -1
- package/package.json +4 -3
- package/src/CreatableProvider/CreatableProviderContext.zod.ts +18 -5
- package/src/actor/ActorV3.ts +2 -0
- package/src/actor/index.ts +0 -3
- package/src/config/Config.ts +9 -40
- package/src/config/index.ts +1 -1
- package/dist/neutral/actor/Actor.d.ts +0 -477
- package/dist/neutral/actor/Actor.d.ts.map +0 -1
- package/dist/neutral/actor/ActorContext.d.ts +0 -8
- package/dist/neutral/actor/ActorContext.d.ts.map +0 -1
- package/dist/neutral/actor/ActorV2.d.ts +0 -470
- package/dist/neutral/actor/ActorV2.d.ts.map +0 -1
- package/dist/neutral/config/actors/Api.d.ts +0 -76
- package/dist/neutral/config/actors/Api.d.ts.map +0 -1
- package/dist/neutral/config/actors/Bridge.d.ts +0 -124
- package/dist/neutral/config/actors/Bridge.d.ts.map +0 -1
- package/dist/neutral/config/actors/Mempool.d.ts +0 -76
- package/dist/neutral/config/actors/Mempool.d.ts.map +0 -1
- package/dist/neutral/config/actors/Producer.d.ts +0 -84
- package/dist/neutral/config/actors/Producer.d.ts.map +0 -1
- package/dist/neutral/config/actors/RewardRedemption.d.ts +0 -75
- package/dist/neutral/config/actors/RewardRedemption.d.ts.map +0 -1
- package/dist/neutral/config/actors/index.d.ts +0 -7
- package/dist/neutral/config/actors/index.d.ts.map +0 -1
- package/src/actor/Actor.ts +0 -216
- package/src/actor/ActorContext.ts +0 -9
- package/src/actor/ActorV2.ts +0 -171
- package/src/config/actors/Api.ts +0 -33
- package/src/config/actors/Bridge.ts +0 -136
- package/src/config/actors/Mempool.ts +0 -43
- package/src/config/actors/Producer.ts +0 -61
- package/src/config/actors/RewardRedemption.ts +0 -26
- package/src/config/actors/index.ts +0 -6
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../src/test/getSimpleBlockViewerLocator.ts","../../../src/CreatableProvider/AbstractCreatableProvider.ts","../../../src/CreatableProvider/ProviderFactory.ts","../../../src/CreatableProvider/CreatableProvider.ts","../../../src/config/actors/Api.ts","../../../src/validation/schema/Mnemonic.ts","../../../src/config/Base.ts","../../../src/config/Chain.ts","../../../src/config/Evm.ts","../../../src/config/Log.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/Bridge.ts","../../../src/config/actors/Mempool.ts","../../../src/config/actors/Producer.ts","../../../src/config/actors/RewardRedemption.ts","../../../src/config/Config.ts","../../../src/CreatableProvider/CreatableProviderRegistry.ts","../../../src/CreatableProvider/LabeledCreatableProviderFactory.ts","../../../src/CreatableProvider/ProviderFactoryLocator.ts","../../../src/_internal/context/getTestProviderContext.ts","../../../src/block/hydrate/allHashesPresent.ts","../../../src/block/hydrate/flattenHydratedBlock.ts","../../../src/block/hydrate/flattenHydratedBlocks.ts","../../../src/block/hydrate/hydrateBlock.ts","../../../src/block/primitives/blockFromBlockNumber.ts","../../../src/model/Context/ChainContextHelpers.ts","../../../src/driver/cache/LruCacheMap.ts","../../../src/driver/memory/MemoryMap.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/step/completedStepRewardAddress.ts","../../../src/primitives/readPayloadMapFromStore.ts","../../../src/primitives/state/findMostRecentBlock.ts","../../../src/primitives/state/hydratedBlockByNumber.ts","../../../src/primitives/timeBudget.ts","../../../src/transaction/buildRandomTransaction.ts","../../../src/createTransferPayload.ts","../../../src/transaction/buildTransaction.ts","../../../src/block/primitives/model.ts","../../../src/simple/block/SimpleBlockViewer.ts","../../../src/utils/HydratedCache.ts","../../../src/simple/chainContractViewer/SimpleChainContractViewer.ts","../../../src/simple/finalization/SimpleFinalizationViewer.ts","../../../src/test/buildRandomChain.ts","../../../src/test/buildNextBlock.ts","../../../src/test/buildBlock.ts","../../../src/test/BuildBlockOptions.ts","../../../src/test/buildRandomGenesisBlock.ts","../../../src/test/buildGenesisBlock.ts","../../../src/test/createGenesisBlock.ts","../../../src/test/createProducerChainStakeIntentTransaction.ts","../../../src/test/getTestProviderContext.ts"],"sourcesContent":["import type { Address } from '@xylabs/sdk-js'\nimport { Account } from '@xyo-network/account'\nimport type { ArchivistInstance } from '@xyo-network/archivist-model'\nimport { type ChainId, XYO_ZERO_ADDRESS } from '@xyo-network/xl1-protocol'\n\nimport { getTestProviderContext } from '../_internal/index.ts'\nimport type { Config } from '../config/index.ts'\nimport { ConfigZod } from '../config/index.ts'\nimport {\n SimpleBlockViewer, SimpleChainContractViewer, SimpleFinalizationViewer,\n} from '../simple/index.ts'\nimport { buildRandomChainArchivist } from './buildRandomChain.ts'\n\nexport interface TestSimpleBlockViewerLocatorParams {\n chainId?: ChainId\n config?: Config\n finalizedArchivist?: ArchivistInstance\n minWithdrawalBlocks?: number\n rewardsContract?: Address\n stakingTokenAddress?: Address\n}\n\nexport async function getTestSimpleBlockViewerLocator({\n chainId: chainIdIn, minWithdrawalBlocks = 10,\n config = ConfigZod.parse({}),\n finalizedArchivist: finalizedArchivistIn,\n rewardsContract = XYO_ZERO_ADDRESS, stakingTokenAddress = XYO_ZERO_ADDRESS,\n}: TestSimpleBlockViewerLocatorParams) {\n const chainId = chainIdIn ?? (await Account.random()).address as ChainId\n const finalizedArchivist = finalizedArchivistIn ?? await buildRandomChainArchivist()\n const context = getTestProviderContext(config)\n context.locator.registerMany([\n SimpleChainContractViewer.factory<SimpleChainContractViewer>(SimpleChainContractViewer.dependencies, {\n chainId,\n minWithdrawalBlocks,\n rewardsContract,\n stakingTokenAddress,\n }),\n SimpleFinalizationViewer.factory<SimpleFinalizationViewer>(SimpleFinalizationViewer.dependencies, { finalizedArchivist }),\n SimpleBlockViewer.factory<SimpleBlockViewer>(SimpleBlockViewer.dependencies, { finalizedArchivist }),\n ])\n return context.locator\n}\n","import { AbstractCreatable, assertEx } from '@xylabs/sdk-js'\nimport type { Provider, ProviderMoniker } from '@xyo-network/xl1-protocol'\n\nimport type {\n CreatableProvider,\n CreatableProviderEventData, CreatableProviderInstance, CreatableProviderParams,\n ProviderMap,\n} from './CreatableProvider.ts'\nimport { ProviderFactory } from './ProviderFactory.ts'\n\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\n abstract readonly moniker: ProviderMoniker\n\n override get logger() {\n return this.context.logger ?? super.logger\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 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'\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\nexport function providerFactoryDescription(factory: CreatableProviderFactory, labels?: Labels) {\n return `${factory.providerName}:${factory.defaultMoniker}:${JSON.stringify(labels ?? (factory as WithOptionalLabels).labels ?? {})}`\n}\n\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 { EventData } from '@xylabs/events'\nimport type {\n Creatable, CreatableInstance, CreatableParams,\n Labels, WithOptionalLabels,\n} from '@xylabs/sdk-js'\nimport type { Provider, ProviderMoniker } from '@xyo-network/xl1-protocol'\n\nimport type { CreatableProviderContext } from './CreatableProviderContext.ts'\nimport type { GetInstanceOptions } from './GetInstanceOptions.ts'\nimport type { LabeledCreatableProviderFactory } from './LabeledCreatableProviderFactory.ts'\n\nexport interface CreatableProviderParams<TContext extends CreatableProviderContext = CreatableProviderContext> extends CreatableParams {\n context: TContext\n}\nexport interface CreatableProviderEventData extends EventData {}\n\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\nexport type ProviderFactoryScope = 'global' | 'context' | 'local'\n\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\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\nexport type ProviderMap<T extends ProviderMoniker = ProviderMoniker> = Partial<Record<T, CreatableProviderInstance<Provider<T>>>>\n\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 { globalRegistry, z } from 'zod'\n\nimport { MnemonicStringZod } from '../../validation/index.ts'\nimport { BaseConfigZod } from '../Base.ts'\n\nexport const ApiConfigZod = BaseConfigZod.extend(z.object({\n host: z.string().default('localhost').register(globalRegistry, {\n default: 'localhost',\n description: 'Host for the API',\n title: 'api.host',\n type: 'string',\n }),\n initRewardsCache: z.union([z.number(), z.string(), z.boolean()]).transform(\n v => v !== '0' && v !== 'false' && v !== false && v != 0,\n ).default(true).register(globalRegistry, {\n description: 'Whether to initialize the rewards cache on startup',\n title: 'api.initRewardsCache',\n type: 'boolean',\n }),\n mnemonic: MnemonicStringZod.optional().register(globalRegistry, {\n description: 'Mnemonic for the API wallet',\n title: 'api.mnemonic',\n type: 'string',\n }),\n port: z.coerce.number().default(8080).register(globalRegistry, {\n default: 8080,\n description: 'Port for the API',\n title: 'api.port',\n type: 'number',\n }),\n}).shape)\n\nexport type ApiConfig = z.infer<typeof ApiConfigZod>\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\nexport type MnemonicString = z.infer<typeof MnemonicStringZod>\n","import { z } from 'zod'\n\nimport { ChainConfigZod } from './Chain.ts'\nimport { EvmConfigZod } from './Evm.ts'\nimport { LogConfigZod } from './Log.ts'\nimport { RemoteConfigZod } from './Remote.ts'\nimport { StorageConfigZod } from './storage/index.ts'\nimport { TelemetryConfigZod } from './Telemetry.ts'\nimport { ValidationConfigZod } from './Validation.ts'\n\nexport const BaseConfigZod = z.object({\n chain: ChainConfigZod.default(ChainConfigZod.parse({})).describe('Configuration for the chain'),\n evm: EvmConfigZod.default(EvmConfigZod.parse({})).describe('Configuration for EVM-backed services'),\n log: LogConfigZod.default(LogConfigZod.parse({})).describe('Configuration for logging'),\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\nexport type BaseConfig = z.infer<typeof BaseConfigZod>\n","import { AddressZod, HexZod } from '@xylabs/sdk-js'\nimport { globalRegistry, z } from 'zod'\n\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\nexport type ChainConfig = z.infer<typeof ChainConfigZod>\n","import { globalRegistry, z } from 'zod'\n\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\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\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\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\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\nexport type LogConfig = z.infer<typeof LogConfigZod>\n","import { globalRegistry, z } from 'zod'\n\nexport const RemoteConfigZod = z.object({\n rpc: z.object({\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 service').optional(),\n})\n\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\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\nexport type MongoConfig = z.infer<typeof MongoConfigZod>\n","import { globalRegistry, z } from 'zod'\n\nimport { MongoConfigZod } from './driver/index.ts'\n\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\nexport type StorageConfig = z.infer<typeof StorageConfigZod>\n","import { globalRegistry, z } from 'zod'\n\nexport const DefaultMetricsScrapePorts = {\n api: 9465,\n bridge: 9468,\n mempool: 9466,\n producer: 9464,\n rewardRedemptionApi: 9467,\n}\n\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\nexport const MetricsConfigZod = z.object({ scrape: MetricsScrapeConfigZod }).describe('Metrics configuration options')\n\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\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\nexport type TelemetryConfig = z.infer<typeof TelemetryConfigZod>\n","import { AddressZod, asAddress } from '@xylabs/sdk-js'\nimport { globalRegistry, z } from 'zod'\n\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\nexport type ValidationConfig = z.infer<typeof ValidationConfigZod>\n","import {\n AddressZod, HexZod, toAddress, toHex,\n} from '@xylabs/sdk-js'\nimport type { ChainId } from '@xyo-network/xl1-protocol'\nimport { AttoXL1ConvertFactor, XL1 } from '@xyo-network/xl1-protocol'\nimport { globalRegistry, z } from 'zod'\n\nimport { MnemonicStringZod } from '../../validation/index.ts'\nimport { BaseConfigZod } from '../Base.ts'\n\nconst DEFAULT_FIXED_FEE = toHex(XL1(1n) * AttoXL1ConvertFactor.xl1)\nconst DEFAULT_HARDHAT_BRIDGE_CONTRACT = toAddress('2279B7A0a67DB372996a5FaB50D91eAA73d2eBe6')\nconst DEFAULT_HARDHAT_CHAIN_ID: ChainId = toHex('7A69')\nconst DEFAULT_HARDHAT_REMOTE_CHAIN_WALLET_PRIVATE_KEY = toHex('0xac0974bec39a17e36ba4a6b4d238ff944bacb478cbed5efcae784d7bf4f2ff80')\nconst DEFAULT_HARDHAT_TOKEN_CONTRACT = toAddress('5FbDB2315678afecb367f032d93F642f64180aa3')\nconst DEFAULT_MAX_BRIDGE_AMOUNT = toHex(XL1(100_000n) * AttoXL1ConvertFactor.xl1)\nconst DEFAULT_MIN_BRIDGE_AMOUNT = toHex(XL1(10n) * AttoXL1ConvertFactor.xl1)\n\nexport const BasisPointsZod = z.coerce.number().int().nonnegative().max(10_000)\nexport type BasisPoints = z.infer<typeof BasisPointsZod>\n\nexport const BridgeConfigZod = BaseConfigZod.extend(z.object({\n escrowAddress: AddressZod.optional().register(globalRegistry, {\n description: 'Address to which bridge escrow will be sent',\n title: 'bridge.escrowAddress',\n type: 'string',\n }),\n feesAddress: AddressZod.optional().register(globalRegistry, {\n description: 'Address to which bridge fees will be sent',\n title: 'bridge.feesAddress',\n type: 'string',\n }),\n feeFixed: HexZod.default(DEFAULT_FIXED_FEE).register(globalRegistry, {\n default: DEFAULT_FIXED_FEE,\n description: 'Fixed fee (in AttoXL1) applied to bridge transfers',\n title: 'bridge.feeFixed',\n type: 'bigint',\n }),\n feeRateBasisPoints: BasisPointsZod.default(500).register(globalRegistry, {\n default: 500,\n description: 'Variable rate fee (in basis points where 1 bps = 0.01%) applied to bridge transfers',\n title: 'bridge.feeRateBasisPoints',\n type: 'number',\n }),\n host: z.string().default('localhost').register(globalRegistry, {\n default: 'localhost',\n description: 'Host for the Bridge',\n title: 'bridge.host',\n type: 'string',\n }),\n maxBridgeAmount: HexZod.default(DEFAULT_MAX_BRIDGE_AMOUNT).register(globalRegistry, {\n default: DEFAULT_MAX_BRIDGE_AMOUNT,\n description: 'Maximum amount allowed for a bridge transfer',\n title: 'bridge.maxBridgeAmount',\n type: 'string',\n }),\n minBridgeAmount: HexZod.default(DEFAULT_MIN_BRIDGE_AMOUNT).register(globalRegistry, {\n default: DEFAULT_MIN_BRIDGE_AMOUNT,\n description: 'Minimum amount required for a bridge transfer',\n title: 'bridge.minBridgeAmount',\n type: 'string',\n }),\n mnemonic: MnemonicStringZod.optional().register(globalRegistry, {\n description: 'Mnemonic for the Bridge wallet',\n title: 'bridge.mnemonic',\n type: 'string',\n }),\n port: z.coerce.number().int().positive().default(8081).register(globalRegistry, {\n default: 8081,\n description: 'Port for the Bridge',\n title: 'bridge.port',\n type: 'number',\n }),\n redisHost: z.string().default('localhost').register(globalRegistry, {\n default: 'localhost',\n description: 'Host for the Bridge Redis instance',\n title: 'bridge.redisHost',\n type: 'string',\n }),\n redisPort: z.coerce.number().int().positive().default(6379).register(globalRegistry, {\n default: 6379,\n description: 'Port for the Bridge Redis instance',\n title: 'bridge.redisPort',\n type: 'number',\n }),\n remoteBridgeContractAddress: AddressZod.default(DEFAULT_HARDHAT_BRIDGE_CONTRACT).register(globalRegistry, {\n default: DEFAULT_HARDHAT_BRIDGE_CONTRACT,\n description: 'Hex representation of remote token address used for bridging',\n title: 'bridge.remoteBridgeContractAddress',\n type: 'string',\n }),\n remoteChainId: HexZod.default(DEFAULT_HARDHAT_CHAIN_ID).register(globalRegistry, {\n default: DEFAULT_HARDHAT_CHAIN_ID,\n description: 'Remote chain ID',\n title: 'bridge.remoteChainId',\n type: 'string',\n }),\n remoteTokenAddress: HexZod.default(DEFAULT_HARDHAT_TOKEN_CONTRACT).register(globalRegistry, {\n default: DEFAULT_HARDHAT_TOKEN_CONTRACT,\n description: 'Hex representation of remote token address used for bridging',\n title: 'bridge.remoteTokenAddress',\n type: 'string',\n }),\n remoteChainWalletPrivateKey: HexZod.default(DEFAULT_HARDHAT_REMOTE_CHAIN_WALLET_PRIVATE_KEY).register(globalRegistry, {\n description: 'Private key for the wallet to use for the remote chain wallet',\n title: 'bridge.remoteChainWalletPrivateKey',\n type: 'string',\n }),\n xl1ChainId: HexZod.optional().register(globalRegistry, {\n description: 'XL1 chain id used for bridging',\n title: 'bridge.xl1ChainId',\n type: 'string',\n }),\n xl1TokenAddress: HexZod.optional().register(globalRegistry, {\n description: 'XL1 token address used for bridging',\n title: 'bridge.xl1TokenAddress',\n type: 'string',\n }),\n}).shape)\n\nexport type BridgeConfig = z.infer<typeof BridgeConfigZod>\n\nexport const BridgeSettingsZod = BridgeConfigZod.pick({\n feeFixed: true,\n feeRateBasisPoints: true,\n feesAddress: true,\n escrowAddress: true,\n maxBridgeAmount: true,\n minBridgeAmount: true,\n remoteChainId: true,\n remoteTokenAddress: true,\n xl1TokenAddress: true,\n xl1ChainId: true,\n}).required()\n\nexport type BridgeSettings = z.infer<typeof BridgeSettingsZod>\n","import { globalRegistry, z } from 'zod'\n\nimport { MnemonicStringZod } from '../../validation/index.ts'\nimport { BaseConfigZod } from '../Base.ts'\n\nexport const MempoolConfigZod = BaseConfigZod.extend(z.object({\n enabled: z.union([z.string(), z.boolean()]).default('false').transform((val, ctx) => {\n if (typeof val === 'boolean') return val\n const normalized = val.toLowerCase().trim()\n if (['true', '1', 'yes', 'on'].includes(normalized)) return true\n if (['false', '0', 'no', 'off'].includes(normalized)) return false\n ctx.addIssue({\n code: 'invalid_type',\n expected: 'boolean',\n message: `Invalid boolean value: \"${val}\". Use true/false, 1/0, yes/no.`,\n })\n return z.NEVER\n }).register(globalRegistry, {\n default: 'false',\n description: 'Enable the Mempool',\n title: 'mempool.enabled',\n type: 'boolean',\n }),\n host: z.string().default('localhost').register(globalRegistry, {\n default: 'localhost',\n description: 'Host for the Mempool',\n title: 'mempool.host',\n type: 'string',\n }),\n mnemonic: MnemonicStringZod.optional().register(globalRegistry, {\n description: 'Mnemonic for the Mempool wallet',\n title: 'mempool.mnemonic',\n type: 'string',\n }),\n port: z.coerce.number().default(8083).register(globalRegistry, {\n default: 8083,\n description: 'Port for the Mempool',\n title: 'mempool.port',\n type: 'number',\n }),\n}).shape)\n\nexport type MempoolConfig = z.infer<typeof MempoolConfigZod>\n","import { AddressZod, asAddress } from '@xylabs/sdk-js'\nimport { globalRegistry, z } from 'zod'\n\nimport { MnemonicStringZod } from '../../validation/index.ts'\nimport { BaseConfigZod } from '../Base.ts'\n\nexport const ProducerConfigZod = BaseConfigZod.extend(z.object({\n allowlist: 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 producer addresses, if undefined anyone can participate',\n title: 'allowlist',\n type: 'array',\n })),\n\n disableIntentRedeclaration: z.boolean().optional().register(globalRegistry, {\n description: 'Should the producer skip redeclaring their intent to continue producing blocks',\n title: 'producer.disableIntentRedeclaration',\n type: 'boolean',\n }),\n // TODO: Port schema\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 heartbeatInterval: z.coerce.number().default(3_600_000).register(globalRegistry, {\n description: 'The number of milliseconds between heartbeats if no blocks are produced',\n title: 'producer.heartbeatInterval',\n type: 'number',\n }),\n // TODO: BigInt schema\n minStake: z.coerce.number().default(1).register(globalRegistry, {\n description: 'Minimum stake required to be a Producer',\n title: 'producer.minStake',\n type: 'number',\n }),\n mnemonic: MnemonicStringZod.optional().register(globalRegistry, {\n description: 'Mnemonic for the Producer wallet',\n title: 'producer.mnemonic',\n type: 'string',\n }),\n // TODO: Port schema\n port: z.coerce.number().default(8081).register(globalRegistry, {\n default: 8081,\n description: 'Port for the Producer',\n title: 'producer.port',\n type: 'number',\n }),\n // TODO: Address schema\n rewardAddress: z.string().optional().register(globalRegistry, {\n description: 'Address to receive block rewards',\n title: 'producer.rewardAddress',\n type: 'string',\n }),\n}).shape)\n\nexport type ProducerConfig = z.infer<typeof ProducerConfigZod>\n","import { globalRegistry, z } from 'zod'\n\nimport { MnemonicStringZod } from '../../validation/index.ts'\nimport { BaseConfigZod } from '../Base.ts'\n\nexport const RewardRedemptionConfigZod = BaseConfigZod.extend(z.object({\n host: z.string().default('localhost').register(globalRegistry, {\n default: 'localhost',\n description: 'Host for the Redemption API',\n title: 'rewardRedemptionApi.host',\n type: 'string',\n }),\n mnemonic: MnemonicStringZod.optional().register(globalRegistry, {\n description: 'Mnemonic for the Redemption API wallet',\n title: 'rewardRedemptionApi.mnemonic',\n type: 'string',\n }),\n port: z.coerce.number().default(8082).register(globalRegistry, {\n default: 8082,\n description: 'Port for the Redemption API',\n title: 'rewardRedemptionApi.port',\n type: 'number',\n }),\n}).shape)\n\nexport type RewardRedemptionConfig = z.infer<typeof RewardRedemptionConfigZod>\n","import { deepMerge } from '@xylabs/sdk-js'\nimport { globalRegistry, z } from 'zod'\n\nimport {\n ApiConfigZod, BridgeConfigZod, MempoolConfigZod, ProducerConfigZod, RewardRedemptionConfigZod,\n} from './actors/index.ts'\nimport type { BaseConfig } from './Base.ts'\nimport { BaseConfigZod } from './Base.ts'\n\nexport const ActorsConfigZod = z.object({\n api: ApiConfigZod.default(ApiConfigZod.parse({})).register(globalRegistry, {\n description: 'Configuration for the api Actor',\n type: 'object',\n }),\n bridge: BridgeConfigZod.default(BridgeConfigZod.parse({})).register(globalRegistry, {\n description: 'Configuration for the bridge Actor',\n type: 'object',\n }),\n mempool: MempoolConfigZod.default(MempoolConfigZod.parse({})).register(globalRegistry, {\n description: 'Configuration for the mempool Actor',\n type: 'object',\n }),\n producer: ProducerConfigZod.default(ProducerConfigZod.parse({})).register(globalRegistry, {\n description: 'Configuration for the producer Actor',\n type: 'object',\n }),\n rewardRedemption: RewardRedemptionConfigZod.default(RewardRedemptionConfigZod.parse({})).register(globalRegistry, {\n description: 'Configuration for the rewardRedemption Actor',\n type: 'object',\n }),\n}).describe('Actor-specific configurations that override the base configuration when the actor is running').default({\n api: ApiConfigZod.parse({}),\n bridge: BridgeConfigZod.parse({}),\n mempool: MempoolConfigZod.parse({}),\n producer: ProducerConfigZod.parse({}),\n rewardRedemption: RewardRedemptionConfigZod.parse({}),\n})\n\nexport type ActorsConfig = z.infer<typeof ActorsConfigZod>\n\nexport const ConfigZod = BaseConfigZod.extend(z.object({ actors: ActorsConfigZod.default(ActorsConfigZod.parse({})) })\n .describe('Actor-specific configurations that override the base configuration when the actor is running').shape)\n\nexport type Config = z.infer<typeof ConfigZod>\nexport type ActorName = keyof ActorsConfig\n\nexport function resolveConfig<T extends ActorName>(\n config: Config,\n actor: ActorName,\n) {\n const parsedConfig = ConfigZod.parse(config)\n if (parsedConfig.actors?.[actor] === undefined) {\n return BaseConfigZod.parse(config) as BaseConfig & Partial<ActorsConfig[T]>\n }\n return deepMerge(BaseConfigZod.parse(config), parsedConfig.actors[actor]) as ActorsConfig[T]\n}\n\n/** @deprecated Use ConfigZod.parse({}) instead */\nexport const getDefaultConfig = (): Config => ConfigZod.parse({})\n","import type { Labels } from '@xylabs/sdk-js'\nimport { isTruthy } from '@xylabs/sdk-js'\nimport type { ProviderMoniker } from '@xyo-network/xl1-protocol'\n\nimport type { CreatableProviderFactory, CreatableProviderInstance } from './CreatableProvider.ts'\nimport type { LabeledCreatableProviderFactory } from './LabeledCreatableProviderFactory.ts'\nimport { providerFactoryDescription } from './ProviderFactory.ts'\n\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\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\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\nexport type LabeledCreatableProviderFactory<T extends CreatableProviderInstance = CreatableProviderInstance> = CreatableProviderFactory<T> & WithOptionalLabels\n\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'\n\nimport type { CreatableProviderFactory, CreatableProviderInstance } from './CreatableProvider.ts'\nimport type { CreatableProviderContext } from './CreatableProviderContext.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\n constructor(context: TContext | (Omit<TContext, 'locator'> & { locator?: TContext['locator'] }), registry: CreatableProviderRegistry = {}) {\n this._registry = registry\n this._context = { ...context, locator: this } as unknown as TContext\n this._parent = context.locator as ProviderFactoryLocatorInstance<TContext>\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 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 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 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","import type { Config } from '../../config/index.ts'\nimport { type CreatableProviderContext, ProviderFactoryLocator } from '../../CreatableProvider/index.ts'\n\n// This file should not be exported from the package\nexport function getTestProviderContext(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","import type { Hash } from '@xylabs/sdk-js'\nimport type { Payload, WithHashMeta } from '@xyo-network/payload-model'\n\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 type { Payload } from '@xyo-network/payload-model'\nimport { type BlockBoundWitness, toHydratedBlock } from '@xyo-network/xl1-protocol'\n\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\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\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'\n\nimport { flattenHydratedBlock } from './flattenHydratedBlock.ts'\n\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 type { BlockContextRead, HydratedBlockWithStorageMeta } from '@xyo-network/xl1-protocol'\nimport { asBlockBoundWitnessWithStorageMeta, isTransactionBoundWitnessWithStorageMeta } from '@xyo-network/xl1-protocol'\n\nimport { allHashesPresent } from './allHashesPresent.ts'\n\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 bw = assertEx(asBlockBoundWitnessWithStorageMeta(\n assertEx(await chainMap.get(hash), () => `block ${hash} not found`),\n ), () => `hash ${hash} is not a BlockBoundWitness`)\n\n if (maxDepth === 0) return [bw, []]\n const blkPayloads = await chainMap.getMany(bw.payload_hashes)\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.getMany(transactionsPayloadHashes)\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.getMany([...allPayloadsHashes])\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 {\n asHash, type Hash, isDefined,\n} from '@xylabs/sdk-js'\nimport { toSafeJsonString } from '@xylabs/sdk-js'\nimport type { Signed } from '@xyo-network/boundwitness-model'\nimport type { WithHashMeta } from '@xyo-network/payload-model'\nimport type {\n BlockBoundWitness, ChainContextRead, XL1BlockNumber,\n} from '@xyo-network/xl1-protocol'\nimport {\n asSignedBlockBoundWitnessWithStorageMeta, SignedBlockBoundWitnessWithHashMetaZod, StepSizes,\n} from '@xyo-network/xl1-protocol'\n\nimport { withContextCacheResponse } from '../../model/index.ts'\n\nexport async function blockFromBlockNumber(\n context: ChainContextRead,\n blockNumber: XL1BlockNumber,\n): Promise<WithHashMeta<Signed<BlockBoundWitness>>> {\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}\n","import {\n isDefined, isObject, isUndefined,\n} from '@xylabs/sdk-js'\nimport type { CachingContext, MapType } from '@xyo-network/xl1-protocol'\n\nimport { LruCacheMap, MemoryMap } from '../../driver/index.ts'\nimport { timeBudget } from '../../primitives/index.ts'\n\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\nexport interface withContextCacheResponseOptions {\n max?: number\n}\n\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'\nimport { LRUCache } from 'lru-cache'\n\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'\n\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 { isDefined, isFalsy } from '@xylabs/sdk-js'\nimport type {\n BlockViewer,\n HydratedBlock, TimeDurations, XL1BlockNumber, XL1BlockRange, XL1BlockRate,\n} from '@xyo-network/xl1-protocol'\nimport { asXL1BlockRange } from '@xyo-network/xl1-protocol'\n\nimport { rateMultipliers, timeDurations } from './timeHelpers.ts'\n\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 const rate = heightDifference / timeDifference\n\n return {\n range: asXL1BlockRange([startingBlock.block, endingBlock.block], true),\n span: heightDifference,\n rate: isDefined(timeUnit) ? rate * rateMultipliers[timeUnit] : rate,\n rateUnit: isDefined(timeUnit) ? timeUnit : 'millis',\n timeDifference: isDefined(timeUnit) ? timeDurations(timeDifference)[timeUnit] : timeDifference,\n }\n}\n\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\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'\n\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\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\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'\nimport {\n asXL1BlockRange, isValidStep, StepSizes,\n} from '@xyo-network/xl1-protocol'\n\nimport { calculateBlockRate } from './blockRate.ts'\n\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\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'\nimport { asXL1BlockNumber, asXL1BlockRange } from '@xyo-network/xl1-protocol'\n\nimport { calculateBlockRate } from './blockRate.ts'\nimport { getTimeConfigInMilliseconds } from './timeHelpers.ts'\n\nexport const DEFAULT_TOLERANCE_MS = 30_000 // 30 seconds\nexport const DEFAULT_MAX_ATTEMPTS = 10\n\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 { type Address, toAddress } from '@xylabs/sdk-js'\nimport { type StepIdentity, StepSizes } from '@xyo-network/xl1-protocol'\nimport { keccak256 } from 'ethers'\n\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 { Hash } from '@xylabs/sdk-js'\nimport { isDefined } from '@xylabs/sdk-js'\nimport type { ReadArchivist, ReadWriteArchivist } from '@xyo-network/archivist-model'\nimport type { Payload, WithStorageMeta } from '@xyo-network/payload-model'\nimport type { PayloadMap, PayloadMapRead } from '@xyo-network/xl1-protocol'\n\nimport { isReadArchivist, isReadWriteArchivist } from '../block/index.ts'\n\nexport function readPayloadMapFromStore<T extends Payload>(store: ReadArchivist<T> | PayloadMapRead<WithStorageMeta<T>>): PayloadMapRead<WithStorageMeta<T>> {\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\nexport function payloadMapFromStore<T extends Payload>(store: ReadWriteArchivist<T> | PayloadMap<WithStorageMeta<T>>): PayloadMap<WithStorageMeta<T>> {\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: T) => {\n await store.insert([data])\n },\n setMany: async (entries: [Hash, T][]) => {\n await store.insert(entries.map(e => e[1]))\n },\n } satisfies PayloadMap<WithStorageMeta<T>>\n }\n return store\n}\n","import type { NextOptions, ReadArchivist } from '@xyo-network/archivist-model'\nimport type {\n Payload, Sequence, WithStorageMeta,\n} from '@xyo-network/payload-model'\nimport type { SignedBlockBoundWitnessWithHashMeta } from '@xyo-network/xl1-protocol'\nimport { isSignedBlockBoundWitnessWithStorageMeta } from '@xyo-network/xl1-protocol'\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 } from '@xylabs/sdk-js'\nimport type {\n ChainContextRead,\n HydratedBlockWithHashMeta, XL1BlockNumber,\n} from '@xyo-network/xl1-protocol'\n\nimport { blockFromBlockNumber, hydrateBlock } from '../../block/index.ts'\nimport { withContextCacheResponse } from '../../model/index.ts'\n\nexport async function hydratedBlockByNumber(context: ChainContextRead, blockNumber: XL1BlockNumber): Promise<HydratedBlockWithHashMeta | null> {\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 })\n}\n","import { type Logger } from '@xylabs/sdk-js'\n\nexport async function timeBudget<TResult>(\n name: string,\n logger: Logger | undefined,\n func: () => Promise<TResult>,\n budget: number,\n status = false,\n): Promise<TResult> {\n const start = Date.now()\n const timer = status\n ? setInterval(() => {\n const duration = Date.now() - start\n if ((budget > 0) && (duration > budget)) {\n logger?.warn(`Function [${name}] execution is exceeding budget: ${duration}ms > ${budget}ms`)\n }\n }, Math.max(100, budget))\n : undefined\n\n const result = await func()\n const duration = Date.now() - start\n\n if (!timer && (budget > 0) && (duration > budget)) {\n logger?.warn(`Function [${name}] execution exceeded budget: ${duration}ms > ${budget}ms`)\n }\n if (timer) {\n clearInterval(timer)\n }\n return result\n}\n","import type { Address } from '@xylabs/sdk-js'\nimport { Account } from '@xyo-network/account'\nimport type { AccountInstance } from '@xyo-network/account-model'\nimport type { Payload, Schema } from '@xyo-network/payload-model'\nimport type {\n AllowedBlockPayload, ChainId,\n SignedHydratedTransactionWithHashMeta,\n Transfer,\n XL1BlockNumber,\n} from '@xyo-network/xl1-protocol'\nimport { asXL1BlockNumber, isAllowedBlockPayload } from '@xyo-network/xl1-protocol'\n\nimport { createTransferPayload } from '../createTransferPayload.ts'\nimport { buildTransaction } from './buildTransaction.ts'\n\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/payload-builder'\nimport type { Transfer } from '@xyo-network/xl1-protocol'\nimport { TransferSchema } from '@xyo-network/xl1-protocol'\n\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 } from '@xyo-network/account-model'\nimport { BoundWitnessBuilder } from '@xyo-network/boundwitness-builder'\nimport { PayloadBuilder } from '@xyo-network/payload-builder'\nimport type { Payload } from '@xyo-network/payload-model'\nimport type {\n AllowedBlockPayload,\n ChainId,\n ExecutableFields,\n FromFields,\n SignedHydratedTransactionWithHashMeta,\n TransactionBoundWitness, TransactionBoundWitnessFields, TransactionFeesBigInt,\n XL1BlockNumber,\n} from '@xyo-network/xl1-protocol'\nimport { defaultTransactionFees } from '@xyo-network/xl1-protocol'\n\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)]\n}\n","import type {\n ReadArchivist, ReadWriteArchivist, WriteArchivist,\n} from '@xyo-network/archivist-model'\n\nexport function isReadArchivist(value: unknown): value is ReadArchivist {\n return (value as ReadArchivist).get !== undefined && (value as ReadArchivist).next !== undefined\n}\n\nexport function isWriteArchivist(value: unknown): value is WriteArchivist {\n return (value as WriteArchivist).insert !== undefined\n}\n\nexport function isReadWriteArchivist(value: unknown): value is ReadWriteArchivist {\n return isReadArchivist(value) && isWriteArchivist(value)\n}\n","import type { Hash } from '@xylabs/sdk-js'\nimport {\n assertEx, exists, isDefined, isUndefined,\n} from '@xylabs/sdk-js'\nimport type { ReadArchivist } from '@xyo-network/archivist-model'\nimport type { Payload, WithStorageMeta } from '@xyo-network/payload-model'\nimport {\n asSignedHydratedBlockWithHashMeta, asSignedHydratedBlockWithStorageMeta, asXL1BlockNumber,\n BlockContextRead,\n BlockRate, BlockViewer, BlockViewerMoniker, ChainContextRead, ChainContractViewer, ChainContractViewerMoniker,\n ChainId, FinalizationViewer, FinalizationViewerMoniker, PayloadMap, type SignedHydratedBlockWithHashMeta,\n SignedHydratedBlockWithStorageMeta, SingleTimeConfig, TimeDurations, type XL1BlockNumber, XL1BlockRange,\n} from '@xyo-network/xl1-protocol'\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 calculateBlockRate, calculateStepSizeRate, calculateTimeRate, hydratedBlockByNumber, readPayloadMapFromStore,\n} from '../../primitives/index.ts'\nimport { HydratedCache } from '../../utils/index.ts'\n\nexport interface SimpleBlockViewerParams extends CreatableProviderParams {\n chainContractViewer?: ChainContractViewer\n finalizedArchivist: ReadArchivist\n}\n\n@creatableProvider()\nexport class SimpleBlockViewer extends AbstractCreatableProvider<SimpleBlockViewerParams> implements BlockViewer {\n static readonly defaultMoniker = BlockViewerMoniker\n static readonly dependencies = [FinalizationViewerMoniker, ChainContractViewerMoniker]\n static readonly monikers = [BlockViewerMoniker]\n moniker = SimpleBlockViewer.defaultMoniker\n\n protected _store: ChainStoreRead | undefined\n protected chainContractViewer!: ChainContractViewer\n protected finalizationViewer!: FinalizationViewer\n\n private _payloadCache: PayloadMap<WithStorageMeta<Payload>> | undefined\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 }, 200)\n return this._signedHydratedBlockCache\n }\n\n protected get payloadCache(): PayloadMap<WithStorageMeta<Payload>> {\n if (this._payloadCache) return this._payloadCache\n this._payloadCache = new LruCacheMap<Hash, WithStorageMeta<Payload>>({ max: 10_000 })\n return this._payloadCache\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 cache = this.hydratedBlockCache\n return await cache.get(hash)\n }, this.context)\n }\n\n async blockByNumber(blockNumber: XL1BlockNumber): Promise<SignedHydratedBlockWithHashMeta | null> {\n return await this.spanAsync('blockByNumber', async () => {\n const [head] = await this.currentBlock()\n if (isUndefined(head)) {\n return null\n }\n return asSignedHydratedBlockWithHashMeta(await hydratedBlockByNumber(await this.getChainContextRead(), blockNumber)) ?? null\n }, this.context)\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)\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 blocks: SignedHydratedBlockWithHashMeta[] = []\n let current = await this.blockByNumber(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.blockByNumber(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.chainContractViewer.chainId() : await this.chainContractViewer.chainIdAtBlockNumber(blockNumber)\n }, this.context)\n }\n\n override async createHandler() {\n await super.createHandler()\n this.chainContractViewer = this.params.chainContractViewer ?? assertEx(\n await this.locateAndCreate<ChainContractViewer>(ChainContractViewerMoniker),\n () => 'chainContractViewer is required',\n )\n this.finalizationViewer = await this.locator.getInstance<FinalizationViewer>(FinalizationViewerMoniker)\n this._store = { chainMap: readPayloadMapFromStore(this.params.finalizedArchivist) }\n }\n\n async currentBlock(): Promise<SignedHydratedBlockWithHashMeta> {\n return await this.finalizationViewer.head()\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<WithStorageMeta<Payload> | null> {\n const cachedPayload = await this.payloadCache.get(hash)\n if (cachedPayload) {\n return cachedPayload\n } else {\n const [result] = await this.finalizedArchivist.get([hash])\n if (isDefined(result)) {\n await this.payloadCache.set(hash, result)\n }\n return result ?? null\n }\n }\n\n async payloadsByHash(hashes: Hash[]): Promise<WithStorageMeta<Payload>[]> {\n let remainingHashes = [...hashes]\n const cachedPayloads = await this.payloadCache.getMany(remainingHashes)\n const cachedHashes = new Set(cachedPayloads.map(p => p._hash))\n remainingHashes = remainingHashes.filter(h => !cachedHashes.has(h))\n const remainingPayloads = remainingHashes.length > 0\n ? await this.finalizedArchivist.get(remainingHashes)\n : []\n return [...cachedPayloads, ...remainingPayloads.filter(exists)]\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","import type { Hash } from '@xylabs/sdk-js'\nimport type { BlockContextRead } from '@xyo-network/xl1-protocol'\nimport { LRUCache } from 'lru-cache'\n\nexport type HydrateFunction<T> = (\n context: BlockContextRead,\n hash: Hash,\n) => Promise<T | undefined>\n\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 maxSize: number = 200,\n ) {\n this.context = context\n this.hydrateFunction = hydrateFunction\n this.cache = new LRUCache<Hash, T>({ max: maxSize })\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 {\n type Address, assertEx,\n type Hash,\n} from '@xylabs/sdk-js'\nimport {\n ChainContractViewer, ChainContractViewerMoniker, ChainId, XL1BlockNumber,\n} from '@xyo-network/xl1-protocol'\n\nimport {\n AbstractCreatableProvider, creatableProvider, CreatableProviderParams,\n} from '../../CreatableProvider/index.ts'\nimport { withContextCacheResponse } from '../../model/index.ts'\n\nexport interface SimpleChainContractViewerParams extends CreatableProviderParams {\n chainId: ChainId\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 = []\n static readonly monikers = [ChainContractViewerMoniker]\n override moniker = SimpleChainContractViewer.defaultMoniker\n\n chainId() {\n return this.params.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 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 {\n assertEx,\n Hash,\n} from '@xylabs/sdk-js'\nimport type { ReadArchivist } from '@xyo-network/archivist-model'\nimport {\n asSignedHydratedBlockWithStorageMeta, BlockContextRead, ChainContextRead, ChainContractViewer, ChainContractViewerMoniker, ChainId, FinalizationViewer,\n FinalizationViewerMoniker, type SignedBlockBoundWitnessWithHashMeta, type SignedHydratedBlockWithHashMeta,\n SignedHydratedBlockWithStorageMeta,\n XL1BlockNumber,\n} from '@xyo-network/xl1-protocol'\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, readPayloadMapFromStore } from '../../primitives/index.ts'\nimport { HydratedCache } from '../../utils/index.ts'\n\nexport interface SimpleFinalizationViewerParams extends CreatableProviderParams {\n finalizedArchivist: ReadArchivist\n}\n\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 _chainContractViewer!: ChainContractViewer\n protected _chainId!: ChainId\n protected _store: ChainStoreRead | undefined\n\n private _signedHydratedBlockCache: HydratedCache<SignedHydratedBlockWithStorageMeta> | undefined\n\n protected get chainContractViewer() {\n return this._chainContractViewer\n }\n\n protected get chainId() {\n return this._chainId\n }\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 override async createHandler() {\n await super.createHandler()\n this._chainContractViewer = await this.locateAndCreate<ChainContractViewer>(ChainContractViewerMoniker)\n this._chainId = await this.chainContractViewer.chainId()\n this._store = { chainMap: readPayloadMapFromStore(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 { Address } from '@xylabs/sdk-js'\nimport { asAddress, assertEx } from '@xylabs/sdk-js'\nimport { Account } from '@xyo-network/account'\nimport type { AccountInstance } from '@xyo-network/account-model'\nimport { MemoryArchivist } from '@xyo-network/archivist-memory'\nimport type { Id } from '@xyo-network/id-payload-plugin'\nimport { IdSchema } from '@xyo-network/id-payload-plugin'\nimport { PayloadBuilder } from '@xyo-network/payload-builder'\nimport { asSchema } from '@xyo-network/payload-model'\nimport {\n asXL1BlockNumber,\n type ChainId, type SignedHydratedBlockWithHashMeta, type SignedHydratedTransactionWithHashMeta,\n} from '@xyo-network/xl1-protocol'\n\nimport { flattenHydratedBlocks } from '../block/index.ts'\nimport { buildRandomTransaction } from '../transaction/index.ts'\nimport { buildNextBlock } from './buildNextBlock.ts'\nimport { TestChainId } from './buildRandomGenesisBlock.ts'\nimport { createGenesisBlock } from './createGenesisBlock.ts'\n\nexport const TestGenesisBlockRewardAddress = assertEx(asAddress('fa7f0bb865a4bfff3d5e2c726d3e063297014da9'))\n\n/**\n * Creates a chain of blocks\n * @param blockProducer The producer for the chain blocks\n * @param count The number of blocks to build\n * @param previousBlock The previous block from which to build the chain (if none supplied will create genesis block)\n * @returns A chain of blocks\n */\nexport const buildRandomChain = async (\n blockProducer: AccountInstance,\n count: number = 10,\n previousBlock?: SignedHydratedBlockWithHashMeta,\n chainId?: ChainId,\n transactionAccount?: AccountInstance,\n receiverAddresses?: Address[],\n): Promise<SignedHydratedBlockWithHashMeta[]> => {\n const chainIdToUse = chainId ?? TestChainId\n const blocks: SignedHydratedBlockWithHashMeta[] = []\n let remaining = count\n let lastBlock: SignedHydratedBlockWithHashMeta | undefined = previousBlock\n const transactionAccountToUse = transactionAccount ?? await Account.random()\n if (!lastBlock) {\n const block = await createGenesisBlock(\n blockProducer,\n chainIdToUse,\n 1_000_000_000n * (10n ** 18n),\n transactionAccountToUse.address,\n )\n blocks.push(block)\n remaining = remaining - 1\n lastBlock = block\n }\n const resolvedReceiverAddresses = receiverAddresses ?? [((await Account.random()).address)]\n let saltCounter = 0\n while (remaining > 0) {\n saltCounter += 1\n const payloads = [new PayloadBuilder<Id>({ schema: IdSchema }).fields({ salt: `${Date.now()}-${saltCounter}` }).build()]\n saltCounter += 1\n const additionalPrivatePayloads = (remaining % 2 === 0)\n ? [new PayloadBuilder({ schema: asSchema('network.xyo.private', true) }).fields({ salt: `${Date.now()}-${saltCounter}` }).build()]\n : []\n const txs: SignedHydratedTransactionWithHashMeta[] = []\n for (const receiverAddress of resolvedReceiverAddresses) {\n txs.push(await buildRandomTransaction(\n chainIdToUse,\n [...payloads, ...additionalPrivatePayloads],\n transactionAccountToUse,\n asXL1BlockNumber(Math.max(count - remaining - 1000, 0), true),\n asXL1BlockNumber(count - remaining + 1000, true),\n [asSchema('network.xyo.private', true)],\n receiverAddress,\n ))\n }\n const previousBlock = assertEx(lastBlock?.[0], () => new Error('No last block'))\n const block = await buildNextBlock(previousBlock, txs, [], [blockProducer], transactionAccountToUse.address)\n blocks.push(block)\n remaining = remaining - 1\n lastBlock = block\n }\n return blocks\n}\n\nexport async function buildRandomChainArchivist(count = 20) {\n const producerAccount = await Account.random()\n const blocks = await buildRandomChain(producerAccount, count)\n const archivist = await MemoryArchivist.create()\n const payloads = flattenHydratedBlocks(blocks)\n await archivist.insert(payloads)\n return archivist\n}\n","import type { AccountInstance } from '@xyo-network/account-model'\nimport type {\n AllowedBlockPayload, BlockBoundWitnessWithHashMeta, ChainId,\n SignedHydratedBlockWithHashMeta,\n SignedHydratedTransaction,\n} from '@xyo-network/xl1-protocol'\nimport {\n AttoXL1,\n XYO_STEP_REWARD_ADDRESS,\n} from '@xyo-network/xl1-protocol'\n\nimport { buildBlock } from './buildBlock.ts'\n\nexport async function buildNextBlock(\n previousBlock: BlockBoundWitnessWithHashMeta,\n txs: SignedHydratedTransaction[],\n blockPayloads: AllowedBlockPayload[],\n signers: AccountInstance[],\n chainStepRewardAddress = XYO_STEP_REWARD_ADDRESS,\n stepRewardPoolBalance: AttoXL1 = AttoXL1(0n),\n protocol?: number,\n chainId?: ChainId,\n): Promise<SignedHydratedBlockWithHashMeta> {\n return await buildBlock({\n chainId: chainId ?? previousBlock.chain,\n previousBlockNumber: previousBlock.block,\n previousStepHashes: previousBlock.step_hashes ?? [],\n previousBlockHash: previousBlock._hash,\n txs,\n blockPayloads,\n signers,\n protocol,\n chainStepRewardAddress,\n stepRewardPoolBalance,\n })\n}\n","/* eslint-disable complexity */\n/* eslint-disable max-statements */\nimport type { Hex } from '@xylabs/sdk-js'\nimport {\n assertEx, isDefined, isHash, toSafeJsonString,\n} from '@xylabs/sdk-js'\nimport { BoundWitnessBuilder } from '@xyo-network/boundwitness-builder'\nimport { PayloadBuilder } from '@xyo-network/payload-builder'\nimport type { Payload, WithStorageMeta } from '@xyo-network/payload-model'\nimport type {\n BlockBoundWitness, SignedHydratedBlockWithHashMeta, Transfer,\n} from '@xyo-network/xl1-protocol'\nimport {\n asXL1BlockNumber, AttoXL1, isBlockBoundWitness, isExecutable, StepRewardFractions,\n StepSizes,\n XL1_PROTOCOL_VERSION,\n XYO_STEP_REWARD_ADDRESS,\n XYO_ZERO_ADDRESS,\n} from '@xyo-network/xl1-protocol'\n\nimport { createTransferPayload } from '../createTransferPayload.ts'\nimport { completedStepRewardAddress } from '../primitives/index.ts'\nimport {\n type BuildBlockOptions, isBuildGenesisBlockOptions, isBuildNextBlockOptions,\n} from './BuildBlockOptions.ts'\n\n/*\n//this is for testing only to speed up the pace\nexport const StepRewardFractions = [\n [0n, 1n], // 0%\n [1n, 10_000n], // 0.01%\n [2n, 1000n], // 0.2%\n [3n, 100n], // 3%\n [45n, 100n], // 45%\n] as const\n */\n\nfunction calculateCompletedStepReward(step: number, balance: AttoXL1): AttoXL1 {\n return AttoXL1(StepRewardFractions[step][0] * balance / StepRewardFractions[step][1])\n}\n\nexport async function buildBlock(options: BuildBlockOptions): Promise<SignedHydratedBlockWithHashMeta> {\n const previousBlockNumber = isBuildGenesisBlockOptions(options) ? -1 : options.previousBlockNumber\n const blockNumber = asXL1BlockNumber(previousBlockNumber + 1, true)\n const inStepHashes = isBuildNextBlockOptions(options) ? options.previousStepHashes : []\n const previousBlockHash = isBuildNextBlockOptions(options) ? options.previousBlockHash : undefined\n const stepRewardPoolBalance = isBuildNextBlockOptions(options) ? options.stepRewardPoolBalance : AttoXL1(0n)\n const {\n chainId, txs,\n chainStepRewardAddress = XYO_STEP_REWARD_ADDRESS,\n blockPayloads, protocol = XL1_PROTOCOL_VERSION, signers,\n } = options\n const step_hashes: Hex[] = []\n\n for (const [tx] of txs) {\n if (tx.nbf > blockNumber) {\n throw new Error(`Transaction ${await PayloadBuilder.hash(tx)} not valid for block ${blockNumber} - NBF is ${tx.nbf}`)\n }\n if (tx.exp < blockNumber) {\n throw new Error(`Transaction ${await PayloadBuilder.hash(tx)} not valid for block ${blockNumber} - EXP is ${tx.exp}`)\n }\n }\n\n const completedStepRewardTransfers: Transfer[] = []\n\n // update the step hashes\n for (const [i, step] of StepSizes.entries()) {\n if (blockNumber < step) {\n break\n }\n if (blockNumber % step === 0) {\n if (StepRewardFractions[i][0] > 0 && chainStepRewardAddress !== XYO_ZERO_ADDRESS) {\n const completedStepRewardHolderAddress = completedStepRewardAddress({ block: blockNumber, step })\n const completedStepReward = calculateCompletedStepReward(i, stepRewardPoolBalance)\n completedStepRewardTransfers.push(createTransferPayload(chainStepRewardAddress, { [completedStepRewardHolderAddress]: completedStepReward }))\n }\n step_hashes.push(assertEx(previousBlockHash, () => `Previous block hash is required for step ${step} at block ${blockNumber}`))\n } else {\n if (isDefined(inStepHashes.at(i))) {\n step_hashes.push(inStepHashes[i])\n }\n }\n }\n\n const previous = previousBlockHash ?? null\n const block = blockNumber\n const txElevatedPayloads: WithStorageMeta<Payload>[] = []\n\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\n const payloads: Payload[] = [\n ...txs.map(([tx]) => tx),\n ...blockPayloads,\n ...txElevatedPayloads,\n ...completedStepRewardTransfers,\n ]\n\n const [bw, txPayloads] = await new BoundWitnessBuilder<BlockBoundWitness, WithStorageMeta<Payload>>()\n .fields({\n block, chain: chainId, previous, step_hashes, protocol,\n })\n .meta({ $epoch: Date.now(), $signatures: [] })\n .signers(signers)\n .payloads(await PayloadBuilder.addStorageMeta(payloads))\n .build()\n assertEx(isBlockBoundWitness(bw), () => 'Build of BlockBoundWitness failed')\n return [await PayloadBuilder.addStorageMeta(bw), txPayloads]\n}\n","import type { Address, Hash } from '@xylabs/sdk-js'\nimport {\n isAddress, isArray, isHash,\n isNumber, isObject,\n} from '@xylabs/sdk-js'\nimport type { AccountInstance } from '@xyo-network/account-model'\nimport type {\n AllowedBlockPayload, AttoXL1, ChainId, SignedHydratedTransaction, XL1BlockNumber,\n} from '@xyo-network/xl1-protocol'\n\nexport interface BaseBuildBlockOptions {\n blockPayloads: AllowedBlockPayload[]\n chainId: ChainId\n chainStepRewardAddress?: Address\n previousBlockNumber?: XL1BlockNumber\n protocol?: number\n signers: AccountInstance[]\n txs: SignedHydratedTransaction[]\n}\n\nexport const isBaseBuildBlockOptions = (value: unknown): value is BaseBuildBlockOptions => {\n if (!isObject(value)) {\n return false\n }\n const typedValue = value as BaseBuildBlockOptions\n if (!isArray(typedValue.blockPayloads) || !isAddress(typedValue.chainId) || !isArray(typedValue.signers) || !isArray(typedValue.txs)) {\n return false\n }\n return true\n}\n\nexport interface BuildGenesisBlockOptions extends BaseBuildBlockOptions {\n previousBlockHash: null\n}\n\nexport const isBuildGenesisBlockOptions = (value: unknown): value is BuildGenesisBlockOptions => {\n if (!isBaseBuildBlockOptions(value)) {\n return false\n }\n const typedValue = value as BuildGenesisBlockOptions\n if (typedValue.previousBlockHash !== null) {\n return false\n }\n if (typedValue.previousBlockNumber !== undefined) {\n return false\n }\n return true\n}\n\nexport interface BuildNextBlockOptions extends BaseBuildBlockOptions {\n previousBlockHash: Hash\n previousBlockNumber: XL1BlockNumber\n previousStepHashes: Hash[]\n stepRewardPoolBalance: AttoXL1\n}\n\nexport const isBuildNextBlockOptions = (value: unknown): value is BuildNextBlockOptions => {\n if (!isBaseBuildBlockOptions(value)) {\n return false\n }\n const typedValue = value as BuildNextBlockOptions\n if (!isHash(typedValue.previousBlockHash)) {\n return false\n }\n if (!isNumber(typedValue.previousBlockNumber)) {\n return false\n }\n if (!isArray(typedValue.previousStepHashes)) {\n return false\n }\n return true\n}\n\nexport type BuildBlockOptions = BuildGenesisBlockOptions | BuildNextBlockOptions\n","import { asAddress, assertEx } from '@xylabs/sdk-js'\nimport { Account } from '@xyo-network/account'\nimport type { AccountInstance } from '@xyo-network/account-model'\nimport type { Id } from '@xyo-network/id-payload-plugin'\nimport { IdSchema } from '@xyo-network/id-payload-plugin'\nimport { PayloadBuilder } from '@xyo-network/payload-builder'\nimport { asSchema } from '@xyo-network/payload-model'\nimport {\n asXL1BlockNumber, type ChainId, type HydratedBlockWithHashMeta,\n} from '@xyo-network/xl1-protocol'\n\nimport { buildRandomTransaction } from '../transaction/index.ts'\nimport { buildGenesisBlock } from './buildGenesisBlock.ts'\n\nexport const TestChainId = assertEx(asAddress('c5fe2e6F6841Cbab12d8C0618Be2DF8C6156cC44')) as ChainId\n\n/**\n * Creates a random block\n * @param chainId The chain id for the block\n * @param blockProducer The producer for the blocks\n * @param transactionAccount The account to use for the transaction\n * @returns A block\n */\nexport const buildRandomGenesisBlock = async (\n chainId: ChainId = TestChainId,\n blockProducer?: AccountInstance,\n transactionAccount?: AccountInstance,\n): Promise<HydratedBlockWithHashMeta> => {\n const producer = blockProducer ?? (await Account.random())\n const txAccount = transactionAccount ?? await Account.random()\n const additionalPayload = new PayloadBuilder<Id>({ schema: IdSchema }).fields({ salt: `${Date.now()}` }).build()\n const additionalPrivatePayload = new PayloadBuilder({ schema: asSchema('network.xyo.private', true) }).fields({ salt: `${Date.now()}` }).build()\n const txs = [await buildRandomTransaction(\n chainId,\n [additionalPayload, additionalPrivatePayload],\n txAccount,\n asXL1BlockNumber(0, true),\n asXL1BlockNumber(1000, true),\n [asSchema('network.xyo.private', true)],\n )]\n const block = await buildGenesisBlock(chainId, txs, [], [producer])\n const payloads = [\n ...block[1],\n await PayloadBuilder.addHashMeta(additionalPayload),\n ]\n return [block[0], payloads]\n}\n","import type { AccountInstance } from '@xyo-network/account-model'\nimport type {\n AllowedBlockPayload, ChainId,\n SignedHydratedBlockWithHashMeta,\n SignedHydratedTransactionWithHashMeta,\n} from '@xyo-network/xl1-protocol'\nimport { XYO_ZERO_ADDRESS } from '@xyo-network/xl1-protocol'\n\nimport { buildBlock } from './buildBlock.ts'\n\nexport async function buildGenesisBlock(\n chainId: ChainId,\n txs: SignedHydratedTransactionWithHashMeta[],\n blockPayloads: AllowedBlockPayload[],\n signers: AccountInstance[],\n chainStepRewardAddress = XYO_ZERO_ADDRESS,\n protocol?: number,\n): Promise<SignedHydratedBlockWithHashMeta> {\n return await buildBlock({\n previousBlockHash: null,\n chainId,\n txs,\n blockPayloads,\n signers,\n chainStepRewardAddress,\n protocol,\n })\n}\n","import type { Address } from '@xylabs/sdk-js'\nimport type { AccountInstance } from '@xyo-network/account-model'\nimport { PayloadBuilder } from '@xyo-network/payload-builder'\nimport type { WithHashMeta } from '@xyo-network/payload-model'\nimport type {\n AllowedBlockPayload, ChainId, SignedHydratedBlockWithHashMeta,\n} from '@xyo-network/xl1-protocol'\nimport {\n BlockBoundWitnessSchemaPayload, BlockBoundWitnessWithStorageMetaSchemaPayload,\n ChainStakeIntentPayloadJsonSchemaPayload, HashPayloadJsonSchemaPayload, TransactionBoundWitnessSchemaPayload, TransactionBoundWitnessWithStorageMetaSchemaPayload, TransferPayloadJsonSchemaPayload,\n} from '@xyo-network/xl1-schema'\n\nimport { createTransferPayload } from '../createTransferPayload.ts'\nimport { buildGenesisBlock } from './buildGenesisBlock.ts'\nimport { createProducerChainStakeIntent } from './createProducerChainStakeIntentTransaction.ts'\n\nexport const createGenesisBlock = async (\n initialBlockProducer: AccountInstance,\n nextContractAddress: ChainId,\n genesisBlockRewardAmount: bigint,\n genesisBlockRewardAddress: Address,\n): Promise<SignedHydratedBlockWithHashMeta> => {\n const blockPayloads: WithHashMeta<AllowedBlockPayload>[] = await PayloadBuilder.addHashMeta([\n TransferPayloadJsonSchemaPayload,\n BlockBoundWitnessSchemaPayload,\n BlockBoundWitnessWithStorageMetaSchemaPayload,\n TransactionBoundWitnessSchemaPayload,\n TransactionBoundWitnessWithStorageMetaSchemaPayload,\n ChainStakeIntentPayloadJsonSchemaPayload,\n HashPayloadJsonSchemaPayload,\n ])\n const intentPayload = await createProducerChainStakeIntent(initialBlockProducer.address, 1, 0)\n blockPayloads.push(intentPayload)\n if (genesisBlockRewardAmount > 0n) {\n blockPayloads.push(await PayloadBuilder.addHashMeta(createTransferPayload(\n nextContractAddress as Address,\n { [genesisBlockRewardAddress]: genesisBlockRewardAmount },\n )))\n }\n return await buildGenesisBlock(nextContractAddress, [], blockPayloads, [initialBlockProducer])\n}\n","import type { Address } from '@xylabs/sdk-js'\nimport type { AccountInstance } from '@xyo-network/account-model'\nimport { PayloadBuilder } from '@xyo-network/payload-builder'\nimport type {\n ChainId, ChainStakeIntent,\n HydratedTransactionWithHashMeta,\n XL1BlockNumber,\n} from '@xyo-network/xl1-protocol'\nimport {\n asXL1BlockNumber, ChainStakeIntentSchema,\n defaultTransactionFees,\n} from '@xyo-network/xl1-protocol'\n\nimport { buildTransaction } from '../transaction/index.ts'\n\nexport async function createProducerChainStakeIntent(from: Address, exp: number, nbf = 0) {\n return await PayloadBuilder.addHashMeta(new PayloadBuilder<ChainStakeIntent>({ schema: ChainStakeIntentSchema }).fields({\n from,\n exp,\n nbf,\n intent: 'producer',\n }).build())\n}\n\nexport async function createProducerChainStakeIntentTransaction(\n chain: ChainId,\n signers: AccountInstance[] = [],\n producer: Address,\n exp: XL1BlockNumber,\n nbf = asXL1BlockNumber(0, true),\n fees = defaultTransactionFees,\n): Promise<HydratedTransactionWithHashMeta> {\n // Create staked intents for all the block producers declaring their intent to produce blocks\n const intent = await createProducerChainStakeIntent(producer, exp, nbf)\n const tx = await buildTransaction(\n chain,\n [intent],\n [],\n signers,\n nbf,\n exp,\n signers[0].address,\n fees,\n )\n return tx\n}\n","import { getTestProviderContext as getTestProviderContextInternal } from '../_internal/index.ts'\nimport type { Config } from '../config/index.ts'\nimport { type CreatableProviderContext } from '../CreatableProvider/index.ts'\n\nexport function getTestProviderContext(config: Config): CreatableProviderContext {\n return getTestProviderContextInternal(config)\n}\n"],"mappings":"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","names":["Account","XYO_ZERO_ADDRESS","assertEx","creatableProvider","assertEx","globalRegistry","z","z","z","globalRegistry","z","globalRegistry","z","globalRegistry","z","globalRegistry","z","z","globalRegistry","globalRegistry","z","z","globalRegistry","globalRegistry","z","z","globalRegistry","AddressZod","globalRegistry","z","z","z","globalRegistry","AddressZod","HexZod","globalRegistry","z","z","AddressZod","globalRegistry","HexZod","globalRegistry","z","z","globalRegistry","AddressZod","asAddress","globalRegistry","z","z","asAddress","AddressZod","globalRegistry","globalRegistry","z","z","globalRegistry","globalRegistry","z","z","globalRegistry","assertEx","assertEx","assertEx","assertEx","isDefined","StepSizes","isDefined","isUndefined","isDefined","isDefined","assertEx","isDefined","isDefined","assertEx","asXL1BlockRange","asXL1BlockRange","assertEx","assertEx","isDefined","asXL1BlockRange","assertEx","asXL1BlockRange","isDefined","toAddress","StepSizes","isDefined","isDefined","assertEx","assertEx","duration","isUndefined","isDefined","asXL1BlockNumber","toHex","assertEx","toHex","PayloadBuilder","asXL1BlockNumber","isDefined","StepSizes","result","assertEx","isDefined","isUndefined","asXL1BlockNumber","LRUCache","context","assertEx","isUndefined","asXL1BlockNumber","isDefined","assertEx","ChainContractViewerMoniker","assertEx","ChainContractViewerMoniker","assertEx","asSignedHydratedBlockWithStorageMeta","ChainContractViewerMoniker","FinalizationViewerMoniker","asSignedHydratedBlockWithStorageMeta","assertEx","ChainContractViewerMoniker","FinalizationViewerMoniker","asAddress","assertEx","Account","IdSchema","PayloadBuilder","asSchema","asXL1BlockNumber","AttoXL1","XYO_STEP_REWARD_ADDRESS","assertEx","isDefined","isHash","toSafeJsonString","BoundWitnessBuilder","PayloadBuilder","asXL1BlockNumber","StepSizes","isObject","asXL1BlockNumber","PayloadBuilder","StepSizes","assertEx","isDefined","txPayloads","isHash","toSafeJsonString","BoundWitnessBuilder","XYO_STEP_REWARD_ADDRESS","AttoXL1","asAddress","assertEx","Account","PayloadBuilder","asXL1BlockNumber","XYO_ZERO_ADDRESS","XYO_ZERO_ADDRESS","assertEx","asAddress","PayloadBuilder","PayloadBuilder","asXL1BlockNumber","defaultTransactionFees","PayloadBuilder","PayloadBuilder","assertEx","asAddress","Account","PayloadBuilder","IdSchema","asSchema","asXL1BlockNumber","previousBlock","XYO_ZERO_ADDRESS","Account","getTestProviderContext"]}
|
|
1
|
+
{"version":3,"sources":["../../../src/test/getSimpleBlockViewerLocator.ts","../../../src/CreatableProvider/AbstractCreatableProvider.ts","../../../src/CreatableProvider/ProviderFactory.ts","../../../src/CreatableProvider/CreatableProvider.ts","../../../src/config/Base.ts","../../../src/config/Chain.ts","../../../src/config/Evm.ts","../../../src/config/Log.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/Config.ts","../../../src/CreatableProvider/CreatableProviderRegistry.ts","../../../src/CreatableProvider/LabeledCreatableProviderFactory.ts","../../../src/CreatableProvider/ProviderFactoryLocator.ts","../../../src/_internal/context/getTestProviderContext.ts","../../../src/block/hydrate/allHashesPresent.ts","../../../src/block/hydrate/flattenHydratedBlock.ts","../../../src/block/hydrate/flattenHydratedBlocks.ts","../../../src/block/hydrate/hydrateBlock.ts","../../../src/block/primitives/blockFromBlockNumber.ts","../../../src/model/Context/ChainContextHelpers.ts","../../../src/driver/cache/LruCacheMap.ts","../../../src/driver/memory/MemoryMap.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/step/completedStepRewardAddress.ts","../../../src/primitives/readPayloadMapFromStore.ts","../../../src/primitives/state/findMostRecentBlock.ts","../../../src/primitives/state/hydratedBlockByNumber.ts","../../../src/primitives/timeBudget.ts","../../../src/transaction/buildRandomTransaction.ts","../../../src/createTransferPayload.ts","../../../src/transaction/buildTransaction.ts","../../../src/block/primitives/model.ts","../../../src/simple/block/SimpleBlockViewer.ts","../../../src/utils/HydratedCache.ts","../../../src/simple/chainContractViewer/SimpleChainContractViewer.ts","../../../src/simple/finalization/SimpleFinalizationViewer.ts","../../../src/test/buildRandomChain.ts","../../../src/test/buildNextBlock.ts","../../../src/test/buildBlock.ts","../../../src/test/BuildBlockOptions.ts","../../../src/test/buildRandomGenesisBlock.ts","../../../src/test/buildGenesisBlock.ts","../../../src/test/createGenesisBlock.ts","../../../src/test/createProducerChainStakeIntentTransaction.ts","../../../src/test/getTestProviderContext.ts"],"sourcesContent":["import type { Address } from '@xylabs/sdk-js'\nimport { Account } from '@xyo-network/account'\nimport type { ArchivistInstance } from '@xyo-network/archivist-model'\nimport { type ChainId, XYO_ZERO_ADDRESS } from '@xyo-network/xl1-protocol'\n\nimport { getTestProviderContext } from '../_internal/index.ts'\nimport type { Config } from '../config/index.ts'\nimport { ConfigZod } from '../config/index.ts'\nimport {\n SimpleBlockViewer, SimpleChainContractViewer, SimpleFinalizationViewer,\n} from '../simple/index.ts'\nimport { buildRandomChainArchivist } from './buildRandomChain.ts'\n\nexport interface TestSimpleBlockViewerLocatorParams {\n chainId?: ChainId\n config?: Config\n finalizedArchivist?: ArchivistInstance\n minWithdrawalBlocks?: number\n rewardsContract?: Address\n stakingTokenAddress?: Address\n}\n\nexport async function getTestSimpleBlockViewerLocator({\n chainId: chainIdIn, minWithdrawalBlocks = 10,\n config = ConfigZod.parse({}),\n finalizedArchivist: finalizedArchivistIn,\n rewardsContract = XYO_ZERO_ADDRESS, stakingTokenAddress = XYO_ZERO_ADDRESS,\n}: TestSimpleBlockViewerLocatorParams) {\n const chainId = chainIdIn ?? (await Account.random()).address as ChainId\n const finalizedArchivist = finalizedArchivistIn ?? await buildRandomChainArchivist()\n const context = getTestProviderContext(config)\n context.locator.registerMany([\n SimpleChainContractViewer.factory<SimpleChainContractViewer>(SimpleChainContractViewer.dependencies, {\n chainId,\n minWithdrawalBlocks,\n rewardsContract,\n stakingTokenAddress,\n }),\n SimpleFinalizationViewer.factory<SimpleFinalizationViewer>(SimpleFinalizationViewer.dependencies, { finalizedArchivist }),\n SimpleBlockViewer.factory<SimpleBlockViewer>(SimpleBlockViewer.dependencies, { finalizedArchivist }),\n ])\n return context.locator\n}\n","import { AbstractCreatable, assertEx } from '@xylabs/sdk-js'\nimport type { Provider, ProviderMoniker } from '@xyo-network/xl1-protocol'\n\nimport type {\n CreatableProvider,\n CreatableProviderEventData, CreatableProviderInstance, CreatableProviderParams,\n ProviderMap,\n} from './CreatableProvider.ts'\nimport { ProviderFactory } from './ProviderFactory.ts'\n\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\n abstract readonly moniker: ProviderMoniker\n\n override get logger() {\n return this.context.logger ?? super.logger\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 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'\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\nexport function providerFactoryDescription(factory: CreatableProviderFactory, labels?: Labels) {\n return `${factory.providerName}:${factory.defaultMoniker}:${JSON.stringify(labels ?? (factory as WithOptionalLabels).labels ?? {})}`\n}\n\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 { EventData } from '@xylabs/events'\nimport type {\n Creatable, CreatableInstance, CreatableParams,\n Labels, WithOptionalLabels,\n} from '@xylabs/sdk-js'\nimport type { Provider, ProviderMoniker } from '@xyo-network/xl1-protocol'\n\nimport type { CreatableProviderContext } from './CreatableProviderContext.ts'\nimport type { GetInstanceOptions } from './GetInstanceOptions.ts'\nimport type { LabeledCreatableProviderFactory } from './LabeledCreatableProviderFactory.ts'\n\nexport interface CreatableProviderParams<TContext extends CreatableProviderContext = CreatableProviderContext> extends CreatableParams {\n context: TContext\n}\nexport interface CreatableProviderEventData extends EventData {}\n\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\nexport type ProviderFactoryScope = 'global' | 'context' | 'local'\n\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\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\nexport type ProviderMap<T extends ProviderMoniker = ProviderMoniker> = Partial<Record<T, CreatableProviderInstance<Provider<T>>>>\n\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 { z } from 'zod'\n\nimport { ChainConfigZod } from './Chain.ts'\nimport { EvmConfigZod } from './Evm.ts'\nimport { LogConfigZod } from './Log.ts'\nimport { RemoteConfigZod } from './Remote.ts'\nimport { StorageConfigZod } from './storage/index.ts'\nimport { TelemetryConfigZod } from './Telemetry.ts'\nimport { ValidationConfigZod } from './Validation.ts'\n\nexport const BaseConfigZod = z.object({\n chain: ChainConfigZod.default(ChainConfigZod.parse({})).describe('Configuration for the chain'),\n evm: EvmConfigZod.default(EvmConfigZod.parse({})).describe('Configuration for EVM-backed services'),\n log: LogConfigZod.default(LogConfigZod.parse({})).describe('Configuration for logging'),\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\nexport type BaseConfig = z.infer<typeof BaseConfigZod>\n","import { AddressZod, HexZod } from '@xylabs/sdk-js'\nimport { globalRegistry, z } from 'zod'\n\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\nexport type ChainConfig = z.infer<typeof ChainConfigZod>\n","import { globalRegistry, z } from 'zod'\n\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\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\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\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\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\nexport type LogConfig = z.infer<typeof LogConfigZod>\n","import { globalRegistry, z } from 'zod'\n\nexport const RemoteConfigZod = z.object({\n rpc: z.object({\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 service').optional(),\n})\n\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\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\nexport type MongoConfig = z.infer<typeof MongoConfigZod>\n","import { globalRegistry, z } from 'zod'\n\nimport { MongoConfigZod } from './driver/index.ts'\n\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\nexport type StorageConfig = z.infer<typeof StorageConfigZod>\n","import { globalRegistry, z } from 'zod'\n\nexport const DefaultMetricsScrapePorts = {\n api: 9465,\n bridge: 9468,\n mempool: 9466,\n producer: 9464,\n rewardRedemptionApi: 9467,\n}\n\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\nexport const MetricsConfigZod = z.object({ scrape: MetricsScrapeConfigZod }).describe('Metrics configuration options')\n\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\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\nexport type TelemetryConfig = z.infer<typeof TelemetryConfigZod>\n","import { AddressZod, asAddress } from '@xylabs/sdk-js'\nimport { globalRegistry, z } from 'zod'\n\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\nexport type ValidationConfig = z.infer<typeof ValidationConfigZod>\n","import { deepMerge } from '@xylabs/sdk-js'\nimport z from 'zod'\n\nimport { BaseConfigZod } from './Base.ts'\n\nexport const ActorsConfigZod = z.array(BaseConfigZod.loose()).describe('Actor-specific configurations that override the base configuration when the actor is running').default([])\n\nexport type ActorsConfig = z.infer<typeof ActorsConfigZod>\n\nexport const ConfigZod = BaseConfigZod.extend(z.object({ actors: ActorsConfigZod })\n .describe('Actor-specific configurations that override the base configuration when the actor is running').shape)\n\nexport type Config = z.infer<typeof ConfigZod>\nexport type ActorName = keyof ActorsConfig\n\nexport function resolveConfig(\n config: Config,\n) {\n const parsedConfig = ConfigZod.parse(config)\n const { actors, ...rootConfig } = parsedConfig\n parsedConfig.actors = actors.map((actorConfig) => {\n return BaseConfigZod.loose().parse(deepMerge(rootConfig, actorConfig))\n })\n return parsedConfig\n}\n\n/** @deprecated Use ConfigZod.parse({}) instead */\nexport const getDefaultConfig = (): Config => ConfigZod.parse({})\n","import type { Labels } from '@xylabs/sdk-js'\nimport { isTruthy } from '@xylabs/sdk-js'\nimport type { ProviderMoniker } from '@xyo-network/xl1-protocol'\n\nimport type { CreatableProviderFactory, CreatableProviderInstance } from './CreatableProvider.ts'\nimport type { LabeledCreatableProviderFactory } from './LabeledCreatableProviderFactory.ts'\nimport { providerFactoryDescription } from './ProviderFactory.ts'\n\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\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\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\nexport type LabeledCreatableProviderFactory<T extends CreatableProviderInstance = CreatableProviderInstance> = CreatableProviderFactory<T> & WithOptionalLabels\n\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'\n\nimport type { CreatableProviderFactory, CreatableProviderInstance } from './CreatableProvider.ts'\nimport type { CreatableProviderContext } from './CreatableProviderContext.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\n constructor(context: TContext | (Omit<TContext, 'locator'> & { locator?: TContext['locator'] }), registry: CreatableProviderRegistry = {}) {\n this._registry = registry\n this._context = { ...context, locator: this } as unknown as TContext\n this._parent = context.locator as ProviderFactoryLocatorInstance<TContext>\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 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 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 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","import type { Config } from '../../config/index.ts'\nimport { type CreatableProviderContext, ProviderFactoryLocator } from '../../CreatableProvider/index.ts'\n\n// This file should not be exported from the package\nexport function getTestProviderContext(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","import type { Hash } from '@xylabs/sdk-js'\nimport type { Payload, WithHashMeta } from '@xyo-network/payload-model'\n\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 type { Payload } from '@xyo-network/payload-model'\nimport { type BlockBoundWitness, toHydratedBlock } from '@xyo-network/xl1-protocol'\n\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\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\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'\n\nimport { flattenHydratedBlock } from './flattenHydratedBlock.ts'\n\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 type { BlockContextRead, HydratedBlockWithStorageMeta } from '@xyo-network/xl1-protocol'\nimport { asBlockBoundWitnessWithStorageMeta, isTransactionBoundWitnessWithStorageMeta } from '@xyo-network/xl1-protocol'\n\nimport { allHashesPresent } from './allHashesPresent.ts'\n\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 bw = assertEx(asBlockBoundWitnessWithStorageMeta(\n assertEx(await chainMap.get(hash), () => `block ${hash} not found`),\n ), () => `hash ${hash} is not a BlockBoundWitness`)\n\n if (maxDepth === 0) return [bw, []]\n const blkPayloads = await chainMap.getMany(bw.payload_hashes)\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.getMany(transactionsPayloadHashes)\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.getMany([...allPayloadsHashes])\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 {\n asHash, type Hash, isDefined,\n} from '@xylabs/sdk-js'\nimport { toSafeJsonString } from '@xylabs/sdk-js'\nimport type { Signed } from '@xyo-network/boundwitness-model'\nimport type { WithHashMeta } from '@xyo-network/payload-model'\nimport type {\n BlockBoundWitness, ChainContextRead, XL1BlockNumber,\n} from '@xyo-network/xl1-protocol'\nimport {\n asSignedBlockBoundWitnessWithStorageMeta, SignedBlockBoundWitnessWithHashMetaZod, StepSizes,\n} from '@xyo-network/xl1-protocol'\n\nimport { withContextCacheResponse } from '../../model/index.ts'\n\nexport async function blockFromBlockNumber(\n context: ChainContextRead,\n blockNumber: XL1BlockNumber,\n): Promise<WithHashMeta<Signed<BlockBoundWitness>>> {\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}\n","import {\n isDefined, isObject, isUndefined,\n} from '@xylabs/sdk-js'\nimport type { CachingContext, MapType } from '@xyo-network/xl1-protocol'\n\nimport { LruCacheMap, MemoryMap } from '../../driver/index.ts'\nimport { timeBudget } from '../../primitives/index.ts'\n\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\nexport interface withContextCacheResponseOptions {\n max?: number\n}\n\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'\nimport { LRUCache } from 'lru-cache'\n\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'\n\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 { isDefined, isFalsy } from '@xylabs/sdk-js'\nimport type {\n BlockViewer,\n HydratedBlock, TimeDurations, XL1BlockNumber, XL1BlockRange, XL1BlockRate,\n} from '@xyo-network/xl1-protocol'\nimport { asXL1BlockRange } from '@xyo-network/xl1-protocol'\n\nimport { rateMultipliers, timeDurations } from './timeHelpers.ts'\n\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 const rate = heightDifference / timeDifference\n\n return {\n range: asXL1BlockRange([startingBlock.block, endingBlock.block], true),\n span: heightDifference,\n rate: isDefined(timeUnit) ? rate * rateMultipliers[timeUnit] : rate,\n rateUnit: isDefined(timeUnit) ? timeUnit : 'millis',\n timeDifference: isDefined(timeUnit) ? timeDurations(timeDifference)[timeUnit] : timeDifference,\n }\n}\n\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\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'\n\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\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\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'\nimport {\n asXL1BlockRange, isValidStep, StepSizes,\n} from '@xyo-network/xl1-protocol'\n\nimport { calculateBlockRate } from './blockRate.ts'\n\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\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'\nimport { asXL1BlockNumber, asXL1BlockRange } from '@xyo-network/xl1-protocol'\n\nimport { calculateBlockRate } from './blockRate.ts'\nimport { getTimeConfigInMilliseconds } from './timeHelpers.ts'\n\nexport const DEFAULT_TOLERANCE_MS = 30_000 // 30 seconds\nexport const DEFAULT_MAX_ATTEMPTS = 10\n\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 { type Address, toAddress } from '@xylabs/sdk-js'\nimport { type StepIdentity, StepSizes } from '@xyo-network/xl1-protocol'\nimport { keccak256 } from 'ethers'\n\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 { Hash } from '@xylabs/sdk-js'\nimport { isDefined } from '@xylabs/sdk-js'\nimport type { ReadArchivist, ReadWriteArchivist } from '@xyo-network/archivist-model'\nimport type { Payload, WithStorageMeta } from '@xyo-network/payload-model'\nimport type { PayloadMap, PayloadMapRead } from '@xyo-network/xl1-protocol'\n\nimport { isReadArchivist, isReadWriteArchivist } from '../block/index.ts'\n\nexport function readPayloadMapFromStore<T extends Payload>(store: ReadArchivist<T> | PayloadMapRead<WithStorageMeta<T>>): PayloadMapRead<WithStorageMeta<T>> {\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\nexport function payloadMapFromStore<T extends Payload>(store: ReadWriteArchivist<T> | PayloadMap<WithStorageMeta<T>>): PayloadMap<WithStorageMeta<T>> {\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: T) => {\n await store.insert([data])\n },\n setMany: async (entries: [Hash, T][]) => {\n await store.insert(entries.map(e => e[1]))\n },\n } satisfies PayloadMap<WithStorageMeta<T>>\n }\n return store\n}\n","import type { NextOptions, ReadArchivist } from '@xyo-network/archivist-model'\nimport type {\n Payload, Sequence, WithStorageMeta,\n} from '@xyo-network/payload-model'\nimport type { SignedBlockBoundWitnessWithHashMeta } from '@xyo-network/xl1-protocol'\nimport { isSignedBlockBoundWitnessWithStorageMeta } from '@xyo-network/xl1-protocol'\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 } from '@xylabs/sdk-js'\nimport type {\n ChainContextRead,\n HydratedBlockWithHashMeta, XL1BlockNumber,\n} from '@xyo-network/xl1-protocol'\n\nimport { blockFromBlockNumber, hydrateBlock } from '../../block/index.ts'\nimport { withContextCacheResponse } from '../../model/index.ts'\n\nexport async function hydratedBlockByNumber(context: ChainContextRead, blockNumber: XL1BlockNumber): Promise<HydratedBlockWithHashMeta | null> {\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 })\n}\n","import { type Logger } from '@xylabs/sdk-js'\n\nexport async function timeBudget<TResult>(\n name: string,\n logger: Logger | undefined,\n func: () => Promise<TResult>,\n budget: number,\n status = false,\n): Promise<TResult> {\n const start = Date.now()\n const timer = status\n ? setInterval(() => {\n const duration = Date.now() - start\n if ((budget > 0) && (duration > budget)) {\n logger?.warn(`Function [${name}] execution is exceeding budget: ${duration}ms > ${budget}ms`)\n }\n }, Math.max(100, budget))\n : undefined\n\n const result = await func()\n const duration = Date.now() - start\n\n if (!timer && (budget > 0) && (duration > budget)) {\n logger?.warn(`Function [${name}] execution exceeded budget: ${duration}ms > ${budget}ms`)\n }\n if (timer) {\n clearInterval(timer)\n }\n return result\n}\n","import type { Address } from '@xylabs/sdk-js'\nimport { Account } from '@xyo-network/account'\nimport type { AccountInstance } from '@xyo-network/account-model'\nimport type { Payload, Schema } from '@xyo-network/payload-model'\nimport type {\n AllowedBlockPayload, ChainId,\n SignedHydratedTransactionWithHashMeta,\n Transfer,\n XL1BlockNumber,\n} from '@xyo-network/xl1-protocol'\nimport { asXL1BlockNumber, isAllowedBlockPayload } from '@xyo-network/xl1-protocol'\n\nimport { createTransferPayload } from '../createTransferPayload.ts'\nimport { buildTransaction } from './buildTransaction.ts'\n\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/payload-builder'\nimport type { Transfer } from '@xyo-network/xl1-protocol'\nimport { TransferSchema } from '@xyo-network/xl1-protocol'\n\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 } from '@xyo-network/account-model'\nimport { BoundWitnessBuilder } from '@xyo-network/boundwitness-builder'\nimport { PayloadBuilder } from '@xyo-network/payload-builder'\nimport type { Payload } from '@xyo-network/payload-model'\nimport type {\n AllowedBlockPayload,\n ChainId,\n ExecutableFields,\n FromFields,\n SignedHydratedTransactionWithHashMeta,\n TransactionBoundWitness, TransactionBoundWitnessFields, TransactionFeesBigInt,\n XL1BlockNumber,\n} from '@xyo-network/xl1-protocol'\nimport { defaultTransactionFees } from '@xyo-network/xl1-protocol'\n\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)]\n}\n","import type {\n ReadArchivist, ReadWriteArchivist, WriteArchivist,\n} from '@xyo-network/archivist-model'\n\nexport function isReadArchivist(value: unknown): value is ReadArchivist {\n return (value as ReadArchivist).get !== undefined && (value as ReadArchivist).next !== undefined\n}\n\nexport function isWriteArchivist(value: unknown): value is WriteArchivist {\n return (value as WriteArchivist).insert !== undefined\n}\n\nexport function isReadWriteArchivist(value: unknown): value is ReadWriteArchivist {\n return isReadArchivist(value) && isWriteArchivist(value)\n}\n","import type { Hash } from '@xylabs/sdk-js'\nimport {\n assertEx, exists, isDefined, isUndefined,\n} from '@xylabs/sdk-js'\nimport type { ReadArchivist } from '@xyo-network/archivist-model'\nimport type { Payload, WithStorageMeta } from '@xyo-network/payload-model'\nimport {\n asSignedHydratedBlockWithHashMeta, asSignedHydratedBlockWithStorageMeta, asXL1BlockNumber,\n BlockContextRead,\n BlockRate, BlockViewer, BlockViewerMoniker, ChainContextRead, ChainContractViewer, ChainContractViewerMoniker,\n ChainId, FinalizationViewer, FinalizationViewerMoniker, PayloadMap, type SignedHydratedBlockWithHashMeta,\n SignedHydratedBlockWithStorageMeta, SingleTimeConfig, TimeDurations, type XL1BlockNumber, XL1BlockRange,\n} from '@xyo-network/xl1-protocol'\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 calculateBlockRate, calculateStepSizeRate, calculateTimeRate, hydratedBlockByNumber, readPayloadMapFromStore,\n} from '../../primitives/index.ts'\nimport { HydratedCache } from '../../utils/index.ts'\n\nexport interface SimpleBlockViewerParams extends CreatableProviderParams {\n chainContractViewer?: ChainContractViewer\n finalizedArchivist: ReadArchivist\n}\n\n@creatableProvider()\nexport class SimpleBlockViewer extends AbstractCreatableProvider<SimpleBlockViewerParams> implements BlockViewer {\n static readonly defaultMoniker = BlockViewerMoniker\n static readonly dependencies = [FinalizationViewerMoniker, ChainContractViewerMoniker]\n static readonly monikers = [BlockViewerMoniker]\n moniker = SimpleBlockViewer.defaultMoniker\n\n protected _store: ChainStoreRead | undefined\n protected chainContractViewer!: ChainContractViewer\n protected finalizationViewer!: FinalizationViewer\n\n private _payloadCache: PayloadMap<WithStorageMeta<Payload>> | undefined\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 }, 200)\n return this._signedHydratedBlockCache\n }\n\n protected get payloadCache(): PayloadMap<WithStorageMeta<Payload>> {\n if (this._payloadCache) return this._payloadCache\n this._payloadCache = new LruCacheMap<Hash, WithStorageMeta<Payload>>({ max: 10_000 })\n return this._payloadCache\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 cache = this.hydratedBlockCache\n return await cache.get(hash)\n }, this.context)\n }\n\n async blockByNumber(blockNumber: XL1BlockNumber): Promise<SignedHydratedBlockWithHashMeta | null> {\n return await this.spanAsync('blockByNumber', async () => {\n const [head] = await this.currentBlock()\n if (isUndefined(head)) {\n return null\n }\n return asSignedHydratedBlockWithHashMeta(await hydratedBlockByNumber(await this.getChainContextRead(), blockNumber)) ?? null\n }, this.context)\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)\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 blocks: SignedHydratedBlockWithHashMeta[] = []\n let current = await this.blockByNumber(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.blockByNumber(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.chainContractViewer.chainId() : await this.chainContractViewer.chainIdAtBlockNumber(blockNumber)\n }, this.context)\n }\n\n override async createHandler() {\n await super.createHandler()\n this.chainContractViewer = this.params.chainContractViewer ?? assertEx(\n await this.locateAndCreate<ChainContractViewer>(ChainContractViewerMoniker),\n () => 'chainContractViewer is required',\n )\n this.finalizationViewer = await this.locator.getInstance<FinalizationViewer>(FinalizationViewerMoniker)\n this._store = { chainMap: readPayloadMapFromStore(this.params.finalizedArchivist) }\n }\n\n async currentBlock(): Promise<SignedHydratedBlockWithHashMeta> {\n return await this.finalizationViewer.head()\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<WithStorageMeta<Payload> | null> {\n const cachedPayload = await this.payloadCache.get(hash)\n if (cachedPayload) {\n return cachedPayload\n } else {\n const [result] = await this.finalizedArchivist.get([hash])\n if (isDefined(result)) {\n await this.payloadCache.set(hash, result)\n }\n return result ?? null\n }\n }\n\n async payloadsByHash(hashes: Hash[]): Promise<WithStorageMeta<Payload>[]> {\n let remainingHashes = [...hashes]\n const cachedPayloads = await this.payloadCache.getMany(remainingHashes)\n const cachedHashes = new Set(cachedPayloads.map(p => p._hash))\n remainingHashes = remainingHashes.filter(h => !cachedHashes.has(h))\n const remainingPayloads = remainingHashes.length > 0\n ? await this.finalizedArchivist.get(remainingHashes)\n : []\n return [...cachedPayloads, ...remainingPayloads.filter(exists)]\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","import type { Hash } from '@xylabs/sdk-js'\nimport type { BlockContextRead } from '@xyo-network/xl1-protocol'\nimport { LRUCache } from 'lru-cache'\n\nexport type HydrateFunction<T> = (\n context: BlockContextRead,\n hash: Hash,\n) => Promise<T | undefined>\n\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 maxSize: number = 200,\n ) {\n this.context = context\n this.hydrateFunction = hydrateFunction\n this.cache = new LRUCache<Hash, T>({ max: maxSize })\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 {\n type Address, assertEx,\n type Hash,\n} from '@xylabs/sdk-js'\nimport {\n ChainContractViewer, ChainContractViewerMoniker, ChainId, XL1BlockNumber,\n} from '@xyo-network/xl1-protocol'\n\nimport {\n AbstractCreatableProvider, creatableProvider, CreatableProviderParams,\n} from '../../CreatableProvider/index.ts'\nimport { withContextCacheResponse } from '../../model/index.ts'\n\nexport interface SimpleChainContractViewerParams extends CreatableProviderParams {\n chainId: ChainId\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 = []\n static readonly monikers = [ChainContractViewerMoniker]\n override moniker = SimpleChainContractViewer.defaultMoniker\n\n chainId() {\n return this.params.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 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 {\n assertEx,\n Hash,\n} from '@xylabs/sdk-js'\nimport type { ReadArchivist } from '@xyo-network/archivist-model'\nimport {\n asSignedHydratedBlockWithStorageMeta, BlockContextRead, ChainContextRead, ChainContractViewer, ChainContractViewerMoniker, ChainId, FinalizationViewer,\n FinalizationViewerMoniker, type SignedBlockBoundWitnessWithHashMeta, type SignedHydratedBlockWithHashMeta,\n SignedHydratedBlockWithStorageMeta,\n XL1BlockNumber,\n} from '@xyo-network/xl1-protocol'\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, readPayloadMapFromStore } from '../../primitives/index.ts'\nimport { HydratedCache } from '../../utils/index.ts'\n\nexport interface SimpleFinalizationViewerParams extends CreatableProviderParams {\n finalizedArchivist: ReadArchivist\n}\n\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 _chainContractViewer!: ChainContractViewer\n protected _chainId!: ChainId\n protected _store: ChainStoreRead | undefined\n\n private _signedHydratedBlockCache: HydratedCache<SignedHydratedBlockWithStorageMeta> | undefined\n\n protected get chainContractViewer() {\n return this._chainContractViewer\n }\n\n protected get chainId() {\n return this._chainId\n }\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 override async createHandler() {\n await super.createHandler()\n this._chainContractViewer = await this.locateAndCreate<ChainContractViewer>(ChainContractViewerMoniker)\n this._chainId = await this.chainContractViewer.chainId()\n this._store = { chainMap: readPayloadMapFromStore(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 { Address } from '@xylabs/sdk-js'\nimport { asAddress, assertEx } from '@xylabs/sdk-js'\nimport { Account } from '@xyo-network/account'\nimport type { AccountInstance } from '@xyo-network/account-model'\nimport { MemoryArchivist } from '@xyo-network/archivist-memory'\nimport type { Id } from '@xyo-network/id-payload-plugin'\nimport { IdSchema } from '@xyo-network/id-payload-plugin'\nimport { PayloadBuilder } from '@xyo-network/payload-builder'\nimport { asSchema } from '@xyo-network/payload-model'\nimport {\n asXL1BlockNumber,\n type ChainId, type SignedHydratedBlockWithHashMeta, type SignedHydratedTransactionWithHashMeta,\n} from '@xyo-network/xl1-protocol'\n\nimport { flattenHydratedBlocks } from '../block/index.ts'\nimport { buildRandomTransaction } from '../transaction/index.ts'\nimport { buildNextBlock } from './buildNextBlock.ts'\nimport { TestChainId } from './buildRandomGenesisBlock.ts'\nimport { createGenesisBlock } from './createGenesisBlock.ts'\n\nexport const TestGenesisBlockRewardAddress = assertEx(asAddress('fa7f0bb865a4bfff3d5e2c726d3e063297014da9'))\n\n/**\n * Creates a chain of blocks\n * @param blockProducer The producer for the chain blocks\n * @param count The number of blocks to build\n * @param previousBlock The previous block from which to build the chain (if none supplied will create genesis block)\n * @returns A chain of blocks\n */\nexport const buildRandomChain = async (\n blockProducer: AccountInstance,\n count: number = 10,\n previousBlock?: SignedHydratedBlockWithHashMeta,\n chainId?: ChainId,\n transactionAccount?: AccountInstance,\n receiverAddresses?: Address[],\n): Promise<SignedHydratedBlockWithHashMeta[]> => {\n const chainIdToUse = chainId ?? TestChainId\n const blocks: SignedHydratedBlockWithHashMeta[] = []\n let remaining = count\n let lastBlock: SignedHydratedBlockWithHashMeta | undefined = previousBlock\n const transactionAccountToUse = transactionAccount ?? await Account.random()\n if (!lastBlock) {\n const block = await createGenesisBlock(\n blockProducer,\n chainIdToUse,\n 1_000_000_000n * (10n ** 18n),\n transactionAccountToUse.address,\n )\n blocks.push(block)\n remaining = remaining - 1\n lastBlock = block\n }\n const resolvedReceiverAddresses = receiverAddresses ?? [((await Account.random()).address)]\n let saltCounter = 0\n while (remaining > 0) {\n saltCounter += 1\n const payloads = [new PayloadBuilder<Id>({ schema: IdSchema }).fields({ salt: `${Date.now()}-${saltCounter}` }).build()]\n saltCounter += 1\n const additionalPrivatePayloads = (remaining % 2 === 0)\n ? [new PayloadBuilder({ schema: asSchema('network.xyo.private', true) }).fields({ salt: `${Date.now()}-${saltCounter}` }).build()]\n : []\n const txs: SignedHydratedTransactionWithHashMeta[] = []\n for (const receiverAddress of resolvedReceiverAddresses) {\n txs.push(await buildRandomTransaction(\n chainIdToUse,\n [...payloads, ...additionalPrivatePayloads],\n transactionAccountToUse,\n asXL1BlockNumber(Math.max(count - remaining - 1000, 0), true),\n asXL1BlockNumber(count - remaining + 1000, true),\n [asSchema('network.xyo.private', true)],\n receiverAddress,\n ))\n }\n const previousBlock = assertEx(lastBlock?.[0], () => new Error('No last block'))\n const block = await buildNextBlock(previousBlock, txs, [], [blockProducer], transactionAccountToUse.address)\n blocks.push(block)\n remaining = remaining - 1\n lastBlock = block\n }\n return blocks\n}\n\nexport async function buildRandomChainArchivist(count = 20) {\n const producerAccount = await Account.random()\n const blocks = await buildRandomChain(producerAccount, count)\n const archivist = await MemoryArchivist.create()\n const payloads = flattenHydratedBlocks(blocks)\n await archivist.insert(payloads)\n return archivist\n}\n","import type { AccountInstance } from '@xyo-network/account-model'\nimport type {\n AllowedBlockPayload, BlockBoundWitnessWithHashMeta, ChainId,\n SignedHydratedBlockWithHashMeta,\n SignedHydratedTransaction,\n} from '@xyo-network/xl1-protocol'\nimport {\n AttoXL1,\n XYO_STEP_REWARD_ADDRESS,\n} from '@xyo-network/xl1-protocol'\n\nimport { buildBlock } from './buildBlock.ts'\n\nexport async function buildNextBlock(\n previousBlock: BlockBoundWitnessWithHashMeta,\n txs: SignedHydratedTransaction[],\n blockPayloads: AllowedBlockPayload[],\n signers: AccountInstance[],\n chainStepRewardAddress = XYO_STEP_REWARD_ADDRESS,\n stepRewardPoolBalance: AttoXL1 = AttoXL1(0n),\n protocol?: number,\n chainId?: ChainId,\n): Promise<SignedHydratedBlockWithHashMeta> {\n return await buildBlock({\n chainId: chainId ?? previousBlock.chain,\n previousBlockNumber: previousBlock.block,\n previousStepHashes: previousBlock.step_hashes ?? [],\n previousBlockHash: previousBlock._hash,\n txs,\n blockPayloads,\n signers,\n protocol,\n chainStepRewardAddress,\n stepRewardPoolBalance,\n })\n}\n","/* eslint-disable complexity */\n/* eslint-disable max-statements */\nimport type { Hex } from '@xylabs/sdk-js'\nimport {\n assertEx, isDefined, isHash, toSafeJsonString,\n} from '@xylabs/sdk-js'\nimport { BoundWitnessBuilder } from '@xyo-network/boundwitness-builder'\nimport { PayloadBuilder } from '@xyo-network/payload-builder'\nimport type { Payload, WithStorageMeta } from '@xyo-network/payload-model'\nimport type {\n BlockBoundWitness, SignedHydratedBlockWithHashMeta, Transfer,\n} from '@xyo-network/xl1-protocol'\nimport {\n asXL1BlockNumber, AttoXL1, isBlockBoundWitness, isExecutable, StepRewardFractions,\n StepSizes,\n XL1_PROTOCOL_VERSION,\n XYO_STEP_REWARD_ADDRESS,\n XYO_ZERO_ADDRESS,\n} from '@xyo-network/xl1-protocol'\n\nimport { createTransferPayload } from '../createTransferPayload.ts'\nimport { completedStepRewardAddress } from '../primitives/index.ts'\nimport {\n type BuildBlockOptions, isBuildGenesisBlockOptions, isBuildNextBlockOptions,\n} from './BuildBlockOptions.ts'\n\n/*\n//this is for testing only to speed up the pace\nexport const StepRewardFractions = [\n [0n, 1n], // 0%\n [1n, 10_000n], // 0.01%\n [2n, 1000n], // 0.2%\n [3n, 100n], // 3%\n [45n, 100n], // 45%\n] as const\n */\n\nfunction calculateCompletedStepReward(step: number, balance: AttoXL1): AttoXL1 {\n return AttoXL1(StepRewardFractions[step][0] * balance / StepRewardFractions[step][1])\n}\n\nexport async function buildBlock(options: BuildBlockOptions): Promise<SignedHydratedBlockWithHashMeta> {\n const previousBlockNumber = isBuildGenesisBlockOptions(options) ? -1 : options.previousBlockNumber\n const blockNumber = asXL1BlockNumber(previousBlockNumber + 1, true)\n const inStepHashes = isBuildNextBlockOptions(options) ? options.previousStepHashes : []\n const previousBlockHash = isBuildNextBlockOptions(options) ? options.previousBlockHash : undefined\n const stepRewardPoolBalance = isBuildNextBlockOptions(options) ? options.stepRewardPoolBalance : AttoXL1(0n)\n const {\n chainId, txs,\n chainStepRewardAddress = XYO_STEP_REWARD_ADDRESS,\n blockPayloads, protocol = XL1_PROTOCOL_VERSION, signers,\n } = options\n const step_hashes: Hex[] = []\n\n for (const [tx] of txs) {\n if (tx.nbf > blockNumber) {\n throw new Error(`Transaction ${await PayloadBuilder.hash(tx)} not valid for block ${blockNumber} - NBF is ${tx.nbf}`)\n }\n if (tx.exp < blockNumber) {\n throw new Error(`Transaction ${await PayloadBuilder.hash(tx)} not valid for block ${blockNumber} - EXP is ${tx.exp}`)\n }\n }\n\n const completedStepRewardTransfers: Transfer[] = []\n\n // update the step hashes\n for (const [i, step] of StepSizes.entries()) {\n if (blockNumber < step) {\n break\n }\n if (blockNumber % step === 0) {\n if (StepRewardFractions[i][0] > 0 && chainStepRewardAddress !== XYO_ZERO_ADDRESS) {\n const completedStepRewardHolderAddress = completedStepRewardAddress({ block: blockNumber, step })\n const completedStepReward = calculateCompletedStepReward(i, stepRewardPoolBalance)\n completedStepRewardTransfers.push(createTransferPayload(chainStepRewardAddress, { [completedStepRewardHolderAddress]: completedStepReward }))\n }\n step_hashes.push(assertEx(previousBlockHash, () => `Previous block hash is required for step ${step} at block ${blockNumber}`))\n } else {\n if (isDefined(inStepHashes.at(i))) {\n step_hashes.push(inStepHashes[i])\n }\n }\n }\n\n const previous = previousBlockHash ?? null\n const block = blockNumber\n const txElevatedPayloads: WithStorageMeta<Payload>[] = []\n\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\n const payloads: Payload[] = [\n ...txs.map(([tx]) => tx),\n ...blockPayloads,\n ...txElevatedPayloads,\n ...completedStepRewardTransfers,\n ]\n\n const [bw, txPayloads] = await new BoundWitnessBuilder<BlockBoundWitness, WithStorageMeta<Payload>>()\n .fields({\n block, chain: chainId, previous, step_hashes, protocol,\n })\n .meta({ $epoch: Date.now(), $signatures: [] })\n .signers(signers)\n .payloads(await PayloadBuilder.addStorageMeta(payloads))\n .build()\n assertEx(isBlockBoundWitness(bw), () => 'Build of BlockBoundWitness failed')\n return [await PayloadBuilder.addStorageMeta(bw), txPayloads]\n}\n","import type { Address, Hash } from '@xylabs/sdk-js'\nimport {\n isAddress, isArray, isHash,\n isNumber, isObject,\n} from '@xylabs/sdk-js'\nimport type { AccountInstance } from '@xyo-network/account-model'\nimport type {\n AllowedBlockPayload, AttoXL1, ChainId, SignedHydratedTransaction, XL1BlockNumber,\n} from '@xyo-network/xl1-protocol'\n\nexport interface BaseBuildBlockOptions {\n blockPayloads: AllowedBlockPayload[]\n chainId: ChainId\n chainStepRewardAddress?: Address\n previousBlockNumber?: XL1BlockNumber\n protocol?: number\n signers: AccountInstance[]\n txs: SignedHydratedTransaction[]\n}\n\nexport const isBaseBuildBlockOptions = (value: unknown): value is BaseBuildBlockOptions => {\n if (!isObject(value)) {\n return false\n }\n const typedValue = value as BaseBuildBlockOptions\n if (!isArray(typedValue.blockPayloads) || !isAddress(typedValue.chainId) || !isArray(typedValue.signers) || !isArray(typedValue.txs)) {\n return false\n }\n return true\n}\n\nexport interface BuildGenesisBlockOptions extends BaseBuildBlockOptions {\n previousBlockHash: null\n}\n\nexport const isBuildGenesisBlockOptions = (value: unknown): value is BuildGenesisBlockOptions => {\n if (!isBaseBuildBlockOptions(value)) {\n return false\n }\n const typedValue = value as BuildGenesisBlockOptions\n if (typedValue.previousBlockHash !== null) {\n return false\n }\n if (typedValue.previousBlockNumber !== undefined) {\n return false\n }\n return true\n}\n\nexport interface BuildNextBlockOptions extends BaseBuildBlockOptions {\n previousBlockHash: Hash\n previousBlockNumber: XL1BlockNumber\n previousStepHashes: Hash[]\n stepRewardPoolBalance: AttoXL1\n}\n\nexport const isBuildNextBlockOptions = (value: unknown): value is BuildNextBlockOptions => {\n if (!isBaseBuildBlockOptions(value)) {\n return false\n }\n const typedValue = value as BuildNextBlockOptions\n if (!isHash(typedValue.previousBlockHash)) {\n return false\n }\n if (!isNumber(typedValue.previousBlockNumber)) {\n return false\n }\n if (!isArray(typedValue.previousStepHashes)) {\n return false\n }\n return true\n}\n\nexport type BuildBlockOptions = BuildGenesisBlockOptions | BuildNextBlockOptions\n","import { asAddress, assertEx } from '@xylabs/sdk-js'\nimport { Account } from '@xyo-network/account'\nimport type { AccountInstance } from '@xyo-network/account-model'\nimport type { Id } from '@xyo-network/id-payload-plugin'\nimport { IdSchema } from '@xyo-network/id-payload-plugin'\nimport { PayloadBuilder } from '@xyo-network/payload-builder'\nimport { asSchema } from '@xyo-network/payload-model'\nimport {\n asXL1BlockNumber, type ChainId, type HydratedBlockWithHashMeta,\n} from '@xyo-network/xl1-protocol'\n\nimport { buildRandomTransaction } from '../transaction/index.ts'\nimport { buildGenesisBlock } from './buildGenesisBlock.ts'\n\nexport const TestChainId = assertEx(asAddress('c5fe2e6F6841Cbab12d8C0618Be2DF8C6156cC44')) as ChainId\n\n/**\n * Creates a random block\n * @param chainId The chain id for the block\n * @param blockProducer The producer for the blocks\n * @param transactionAccount The account to use for the transaction\n * @returns A block\n */\nexport const buildRandomGenesisBlock = async (\n chainId: ChainId = TestChainId,\n blockProducer?: AccountInstance,\n transactionAccount?: AccountInstance,\n): Promise<HydratedBlockWithHashMeta> => {\n const producer = blockProducer ?? (await Account.random())\n const txAccount = transactionAccount ?? await Account.random()\n const additionalPayload = new PayloadBuilder<Id>({ schema: IdSchema }).fields({ salt: `${Date.now()}` }).build()\n const additionalPrivatePayload = new PayloadBuilder({ schema: asSchema('network.xyo.private', true) }).fields({ salt: `${Date.now()}` }).build()\n const txs = [await buildRandomTransaction(\n chainId,\n [additionalPayload, additionalPrivatePayload],\n txAccount,\n asXL1BlockNumber(0, true),\n asXL1BlockNumber(1000, true),\n [asSchema('network.xyo.private', true)],\n )]\n const block = await buildGenesisBlock(chainId, txs, [], [producer])\n const payloads = [\n ...block[1],\n await PayloadBuilder.addHashMeta(additionalPayload),\n ]\n return [block[0], payloads]\n}\n","import type { AccountInstance } from '@xyo-network/account-model'\nimport type {\n AllowedBlockPayload, ChainId,\n SignedHydratedBlockWithHashMeta,\n SignedHydratedTransactionWithHashMeta,\n} from '@xyo-network/xl1-protocol'\nimport { XYO_ZERO_ADDRESS } from '@xyo-network/xl1-protocol'\n\nimport { buildBlock } from './buildBlock.ts'\n\nexport async function buildGenesisBlock(\n chainId: ChainId,\n txs: SignedHydratedTransactionWithHashMeta[],\n blockPayloads: AllowedBlockPayload[],\n signers: AccountInstance[],\n chainStepRewardAddress = XYO_ZERO_ADDRESS,\n protocol?: number,\n): Promise<SignedHydratedBlockWithHashMeta> {\n return await buildBlock({\n previousBlockHash: null,\n chainId,\n txs,\n blockPayloads,\n signers,\n chainStepRewardAddress,\n protocol,\n })\n}\n","import type { Address } from '@xylabs/sdk-js'\nimport type { AccountInstance } from '@xyo-network/account-model'\nimport { PayloadBuilder } from '@xyo-network/payload-builder'\nimport type { WithHashMeta } from '@xyo-network/payload-model'\nimport type {\n AllowedBlockPayload, ChainId, SignedHydratedBlockWithHashMeta,\n} from '@xyo-network/xl1-protocol'\nimport {\n BlockBoundWitnessSchemaPayload, BlockBoundWitnessWithStorageMetaSchemaPayload,\n ChainStakeIntentPayloadJsonSchemaPayload, HashPayloadJsonSchemaPayload, TransactionBoundWitnessSchemaPayload, TransactionBoundWitnessWithStorageMetaSchemaPayload, TransferPayloadJsonSchemaPayload,\n} from '@xyo-network/xl1-schema'\n\nimport { createTransferPayload } from '../createTransferPayload.ts'\nimport { buildGenesisBlock } from './buildGenesisBlock.ts'\nimport { createProducerChainStakeIntent } from './createProducerChainStakeIntentTransaction.ts'\n\nexport const createGenesisBlock = async (\n initialBlockProducer: AccountInstance,\n nextContractAddress: ChainId,\n genesisBlockRewardAmount: bigint,\n genesisBlockRewardAddress: Address,\n): Promise<SignedHydratedBlockWithHashMeta> => {\n const blockPayloads: WithHashMeta<AllowedBlockPayload>[] = await PayloadBuilder.addHashMeta([\n TransferPayloadJsonSchemaPayload,\n BlockBoundWitnessSchemaPayload,\n BlockBoundWitnessWithStorageMetaSchemaPayload,\n TransactionBoundWitnessSchemaPayload,\n TransactionBoundWitnessWithStorageMetaSchemaPayload,\n ChainStakeIntentPayloadJsonSchemaPayload,\n HashPayloadJsonSchemaPayload,\n ])\n const intentPayload = await createProducerChainStakeIntent(initialBlockProducer.address, 1, 0)\n blockPayloads.push(intentPayload)\n if (genesisBlockRewardAmount > 0n) {\n blockPayloads.push(await PayloadBuilder.addHashMeta(createTransferPayload(\n nextContractAddress as Address,\n { [genesisBlockRewardAddress]: genesisBlockRewardAmount },\n )))\n }\n return await buildGenesisBlock(nextContractAddress, [], blockPayloads, [initialBlockProducer])\n}\n","import type { Address } from '@xylabs/sdk-js'\nimport type { AccountInstance } from '@xyo-network/account-model'\nimport { PayloadBuilder } from '@xyo-network/payload-builder'\nimport type {\n ChainId, ChainStakeIntent,\n HydratedTransactionWithHashMeta,\n XL1BlockNumber,\n} from '@xyo-network/xl1-protocol'\nimport {\n asXL1BlockNumber, ChainStakeIntentSchema,\n defaultTransactionFees,\n} from '@xyo-network/xl1-protocol'\n\nimport { buildTransaction } from '../transaction/index.ts'\n\nexport async function createProducerChainStakeIntent(from: Address, exp: number, nbf = 0) {\n return await PayloadBuilder.addHashMeta(new PayloadBuilder<ChainStakeIntent>({ schema: ChainStakeIntentSchema }).fields({\n from,\n exp,\n nbf,\n intent: 'producer',\n }).build())\n}\n\nexport async function createProducerChainStakeIntentTransaction(\n chain: ChainId,\n signers: AccountInstance[] = [],\n producer: Address,\n exp: XL1BlockNumber,\n nbf = asXL1BlockNumber(0, true),\n fees = defaultTransactionFees,\n): Promise<HydratedTransactionWithHashMeta> {\n // Create staked intents for all the block producers declaring their intent to produce blocks\n const intent = await createProducerChainStakeIntent(producer, exp, nbf)\n const tx = await buildTransaction(\n chain,\n [intent],\n [],\n signers,\n nbf,\n exp,\n signers[0].address,\n fees,\n )\n return tx\n}\n","import { getTestProviderContext as getTestProviderContextInternal } from '../_internal/index.ts'\nimport type { Config } from '../config/index.ts'\nimport { type CreatableProviderContext } from '../CreatableProvider/index.ts'\n\nexport function getTestProviderContext(config: Config): CreatableProviderContext {\n return getTestProviderContextInternal(config)\n}\n"],"mappings":"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","names":["Account","XYO_ZERO_ADDRESS","assertEx","creatableProvider","assertEx","z","globalRegistry","z","globalRegistry","z","globalRegistry","z","globalRegistry","z","z","globalRegistry","globalRegistry","z","z","globalRegistry","globalRegistry","z","z","globalRegistry","AddressZod","globalRegistry","z","z","z","z","assertEx","assertEx","assertEx","assertEx","isDefined","StepSizes","isDefined","isUndefined","isDefined","isDefined","assertEx","isDefined","isDefined","assertEx","asXL1BlockRange","asXL1BlockRange","assertEx","assertEx","isDefined","asXL1BlockRange","assertEx","asXL1BlockRange","isDefined","StepSizes","isDefined","isDefined","assertEx","assertEx","duration","isUndefined","isDefined","asXL1BlockNumber","assertEx","toHex","PayloadBuilder","asXL1BlockNumber","isDefined","StepSizes","result","assertEx","isDefined","isUndefined","asXL1BlockNumber","LRUCache","context","assertEx","isUndefined","asXL1BlockNumber","isDefined","assertEx","ChainContractViewerMoniker","assertEx","ChainContractViewerMoniker","assertEx","asSignedHydratedBlockWithStorageMeta","ChainContractViewerMoniker","FinalizationViewerMoniker","asSignedHydratedBlockWithStorageMeta","assertEx","ChainContractViewerMoniker","FinalizationViewerMoniker","asAddress","assertEx","Account","IdSchema","PayloadBuilder","asSchema","asXL1BlockNumber","AttoXL1","XYO_STEP_REWARD_ADDRESS","assertEx","isDefined","isHash","toSafeJsonString","BoundWitnessBuilder","PayloadBuilder","asXL1BlockNumber","StepSizes","isObject","asXL1BlockNumber","PayloadBuilder","StepSizes","assertEx","isDefined","txPayloads","isHash","toSafeJsonString","BoundWitnessBuilder","XYO_STEP_REWARD_ADDRESS","AttoXL1","asAddress","assertEx","Account","PayloadBuilder","asXL1BlockNumber","XYO_ZERO_ADDRESS","XYO_ZERO_ADDRESS","assertEx","asAddress","PayloadBuilder","PayloadBuilder","asXL1BlockNumber","defaultTransactionFees","PayloadBuilder","PayloadBuilder","assertEx","asAddress","Account","PayloadBuilder","IdSchema","asSchema","asXL1BlockNumber","previousBlock","XYO_ZERO_ADDRESS","Account","getTestProviderContext"]}
|