@xyo-network/chain-services 1.1.6 → 1.1.7
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/index.mjs +5 -5
- package/dist/neutral/index.mjs.map +1 -1
- package/dist/types/AccountBalance/XyoChainAccountBalanceService.d.ts +1 -1
- package/dist/types/AccountBalance/XyoChainAccountBalanceService.d.ts.map +1 -1
- package/dist/types/BaseService.d.ts +1 -1
- package/dist/types/BaseService.d.ts.map +1 -1
- package/dist/types/BlockProducer/XyoBlockProducer.d.ts +6 -6
- package/dist/types/BlockProducer/XyoBlockProducer.d.ts.map +1 -1
- package/dist/types/BlockReward/EvmBlockRewardService.d.ts +1 -1
- package/dist/types/BlockReward/EvmBlockRewardService.d.ts.map +1 -1
- package/dist/types/BlockReward/XyoBlockRewardService.d.ts +1 -1
- package/dist/types/BlockReward/XyoBlockRewardService.d.ts.map +1 -1
- package/dist/types/ChainIndexService.d.ts +1 -1
- package/dist/types/ChainIndexService.d.ts.map +1 -1
- package/dist/types/ChainValidator/XyoValidator.d.ts +4 -4
- package/dist/types/ChainValidator/XyoValidator.d.ts.map +1 -1
- package/dist/types/ChainValidator/model/Validator.d.ts +1 -1
- package/dist/types/ChainValidator/model/Validator.d.ts.map +1 -1
- package/dist/types/CreatableService.d.ts +1 -1
- package/dist/types/CreatableService.d.ts.map +1 -1
- package/dist/types/Election/XyoElectionService.d.ts +5 -5
- package/dist/types/Election/XyoElectionService.d.ts.map +1 -1
- package/dist/types/PendingTransactions/PendingTransactions.d.ts +1 -1
- package/dist/types/PendingTransactions/PendingTransactions.d.ts.map +1 -1
- package/dist/types/StakeIntent/XyoStakeIntentService.d.ts +3 -3
- package/dist/types/StakeIntent/XyoStakeIntentService.d.ts.map +1 -1
- package/dist/types/StakeIntent/lib/getBlockSignedStakeDeclarations.d.ts +1 -1
- package/dist/types/StakeIntent/lib/getBlockSignedStakeDeclarations.d.ts.map +1 -1
- package/dist/types/Staker/Evm/Evm.d.ts +1 -1
- package/dist/types/Staker/Evm/Evm.d.ts.map +1 -1
- package/dist/types/XyoChainBlockNumberIterator.d.ts +1 -1
- package/dist/types/XyoChainBlockNumberIterator.d.ts.map +1 -1
- package/package.json +7 -7
- package/src/AccountBalance/XyoChainAccountBalanceService.ts +4 -4
- package/src/BaseService.ts +1 -1
- package/src/BlockProducer/XyoBlockProducer.ts +7 -7
- package/src/BlockReward/EvmBlockRewardService.ts +2 -2
- package/src/BlockReward/XyoBlockRewardService.ts +1 -1
- package/src/ChainIndexService.ts +1 -1
- package/src/ChainValidator/XyoValidator.ts +2 -2
- package/src/ChainValidator/model/Validator.ts +1 -1
- package/src/CreatableService.ts +1 -1
- package/src/Election/XyoElectionService.ts +2 -2
- package/src/PendingTransactions/PendingTransactions.ts +3 -3
- package/src/StakeIntent/XyoStakeIntentService.ts +7 -7
- package/src/StakeIntent/lib/getBlockSignedStakeDeclarations.ts +2 -2
- package/src/Staker/Evm/Evm.ts +1 -1
- package/src/XyoChainBlockNumberIterator.ts +4 -4
package/dist/neutral/index.mjs
CHANGED
|
@@ -253,10 +253,10 @@ var BaseEthProvider = class {
|
|
|
253
253
|
// src/BlockProducer/XyoBlockProducer.ts
|
|
254
254
|
import { assertEx as assertEx2 } from "@xylabs/assert";
|
|
255
255
|
import { toHex } from "@xylabs/hex";
|
|
256
|
-
import { asBlockBoundWitness, BlockNumberSchema, ChainStakeIntentSchema } from "@xyo-network/chain-model";
|
|
257
256
|
import { FixedPercentageBlockRewardDiviner, FixedPercentageBlockRewardDivinerConfigSchema } from "@xyo-network/chain-modules";
|
|
258
257
|
import { buildBlock } from "@xyo-network/chain-protocol";
|
|
259
258
|
import { PayloadBuilder } from "@xyo-network/payload-builder";
|
|
259
|
+
import { asBlockBoundWitness, BlockNumberSchema, ChainStakeIntentSchema } from "@xyo-network/xl1-model";
|
|
260
260
|
function _ts_decorate2(decorators, target, key, desc) {
|
|
261
261
|
var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
|
|
262
262
|
if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
|
|
@@ -393,8 +393,8 @@ XyoBlockProducer = _ts_decorate2([
|
|
|
393
393
|
|
|
394
394
|
// src/BlockReward/EvmBlockRewardService.ts
|
|
395
395
|
import { assertEx as assertEx3 } from "@xylabs/assert";
|
|
396
|
-
import { toEthAddress } from "@xyo-network/chain-model";
|
|
397
396
|
import { XyoChainRewards__factory as XyoChainRewardsFactory } from "@xyo-network/typechain";
|
|
397
|
+
import { toEthAddress } from "@xyo-network/xl1-model";
|
|
398
398
|
function _ts_decorate3(decorators, target, key, desc) {
|
|
399
399
|
var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
|
|
400
400
|
if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
|
|
@@ -605,8 +605,8 @@ import { filterAs } from "@xylabs/array";
|
|
|
605
605
|
import { assertEx as assertEx7 } from "@xylabs/assert";
|
|
606
606
|
import { exists } from "@xylabs/exists";
|
|
607
607
|
import { MemoryArchivist } from "@xyo-network/archivist-memory";
|
|
608
|
-
import { asOptionalTransactionBoundWitnessWithStorageMeta } from "@xyo-network/chain-model";
|
|
609
608
|
import { hydrateBlock, hydrateTransaction } from "@xyo-network/chain-protocol";
|
|
609
|
+
import { asOptionalTransactionBoundWitnessWithStorageMeta } from "@xyo-network/xl1-model";
|
|
610
610
|
import { Mutex as Mutex2 } from "async-mutex";
|
|
611
611
|
function _ts_decorate7(decorators, target, key, desc) {
|
|
612
612
|
var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
|
|
@@ -726,10 +726,10 @@ XyoPendingTransactionsService = _ts_decorate7([
|
|
|
726
726
|
import { filterAs as filterAs2 } from "@xylabs/array";
|
|
727
727
|
import { assertEx as assertEx8 } from "@xylabs/assert";
|
|
728
728
|
import { asAddress } from "@xylabs/hex";
|
|
729
|
-
import { asOptionalBlockBoundWitness, asOptionalBlockBoundWitnessWithStorageMeta, asOptionalChainIndexingServiceStateWithStorageMeta, asOptionalChainStakeIntent, ChainIndexingServiceStateSchema, isChainIndexingServiceState } from "@xyo-network/chain-model";
|
|
730
729
|
import { analyzeChain as analyzeChain2, ChainStakeIntentAnalyzer, isChainSummaryStakeIntent } from "@xyo-network/chain-protocol";
|
|
731
730
|
import { DEFAULT_FIND_FIRST_MATCHING_NEXT_OPTIONS, findFirstMatching, IntervalMap } from "@xyo-network/chain-utils";
|
|
732
731
|
import { PayloadBuilder as PayloadBuilder4 } from "@xyo-network/payload-builder";
|
|
732
|
+
import { asOptionalBlockBoundWitness, asOptionalBlockBoundWitnessWithStorageMeta, asOptionalChainIndexingServiceStateWithStorageMeta, asOptionalChainStakeIntent, ChainIndexingServiceStateSchema, isChainIndexingServiceState } from "@xyo-network/xl1-model";
|
|
733
733
|
import { Mutex as Mutex3 } from "async-mutex";
|
|
734
734
|
import { LRUCache } from "lru-cache";
|
|
735
735
|
function _ts_decorate8(decorators, target, key, desc) {
|
|
@@ -1013,9 +1013,9 @@ var EvmChainService = class extends Base {
|
|
|
1013
1013
|
|
|
1014
1014
|
// src/XyoChainBlockNumberIterator.ts
|
|
1015
1015
|
import { assertEx as assertEx9 } from "@xylabs/assert";
|
|
1016
|
-
import { asBlockBoundWitness as asBlockBoundWitness2, asOptionalBlockBoundWitness as asOptionalBlockBoundWitness2, isBlockBoundWitness } from "@xyo-network/chain-model";
|
|
1017
1016
|
import { BaseEmitter as BaseEmitter2 } from "@xyo-network/module-event-emitter";
|
|
1018
1017
|
import { PayloadBuilder as PayloadBuilder5 } from "@xyo-network/payload-builder";
|
|
1018
|
+
import { asBlockBoundWitness as asBlockBoundWitness2, asOptionalBlockBoundWitness as asOptionalBlockBoundWitness2, isBlockBoundWitness } from "@xyo-network/xl1-model";
|
|
1019
1019
|
import { LRUCache as LRUCache2 } from "lru-cache";
|
|
1020
1020
|
var XyoChainBlockNumberIterator = class _XyoChainBlockNumberIterator extends BaseEmitter2 {
|
|
1021
1021
|
static {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/AccountBalance/XyoChainAccountBalanceService.ts","../../src/BaseService.ts","../../src/CreatableService.ts","../../src/BaseEthProvider.ts","../../src/BlockProducer/XyoBlockProducer.ts","../../src/BlockReward/EvmBlockRewardService.ts","../../src/BlockReward/XyoBlockRewardService.ts","../../src/ChainValidator/XyoValidator.ts","../../src/Election/XyoElectionService.ts","../../src/PendingTransactions/PendingTransactions.ts","../../src/StakeIntent/XyoStakeIntentService.ts","../../src/Staker/Evm/Evm.ts","../../src/XyoChainBlockNumberIterator.ts"],"sourcesContent":["import { assertEx } from '@xylabs/assert'\nimport {\n Address, Hash, Hex,\n} from '@xylabs/hex'\nimport {\n AccountBalanceService, BaseServiceParams,\n ChainServiceCollection,\n} from '@xyo-network/chain-model'\nimport {\n analyzeChain, BalanceAnalyzer, isChainSummaryBalances,\n} from '@xyo-network/chain-protocol'\n\nimport { BaseService } from '../BaseService.ts'\nimport { creatableService } from '../CreatableService.ts'\n\nexport type ChainAccountBalanceServiceParams = BaseServiceParams<Partial<Pick<ChainServiceCollection, 'chainArchivist'>>>\n\n@creatableService()\nexport class XyoChainAccountBalanceService extends BaseService<ChainAccountBalanceServiceParams> implements AccountBalanceService {\n private _balances: Record<Address, Hex> = {}\n private _previousHead: Hash | null = null\n\n protected get chainArchivist() {\n return assertEx(this.params.chainArchivist, () => 'chainArchivist is required')\n }\n\n getBalance(address: Address): Hex {\n return this._balances[address] ?? '0'\n }\n\n getBalances(): Record<Address, Hex> {\n return this._balances\n }\n\n async sync(head: Hash): Promise<void> {\n const analysis = await analyzeChain(\n this.chainArchivist,\n [new BalanceAnalyzer()],\n head,\n this._previousHead,\n -1n,\n this.tracer,\n )\n this._balances = assertEx(analysis.find(isChainSummaryBalances)?.balances, () => 'Failed to sync balances')\n }\n}\n","import type { Promisable } from '@xylabs/promise'\nimport type { BaseAccountableServiceParams, BaseServiceParams } from '@xyo-network/chain-model'\nimport { span, spanAsync } from '@xyo-network/chain-utils'\nimport { BaseEmitter } from '@xyo-network/module-event-emitter'\nimport { Mutex } from 'async-mutex'\n\nimport type { CreatableService } from './CreatableService.ts'\n\ndeclare global {\n var xyoServiceSingletons: Record<string, unknown>\n}\n\nexport class BaseService<TParams extends BaseServiceParams = BaseServiceParams> extends BaseEmitter<TParams> {\n private static singletonInitMutex = new Mutex()\n\n static get singletons() {\n return globalThis['xyoServiceSingletons'] ?? (globalThis['xyoServiceSingletons'] = {})\n }\n\n get meter() {\n return this.params.meterProvider?.getMeter(this.name)\n }\n\n get name() {\n return this.constructor.name\n }\n\n get tracer() {\n return this.params.traceProvider?.getTracer(this.name)\n }\n\n static async create<TService extends BaseService<TParams>, TParams extends BaseServiceParams = TService['params']>(\n this: CreatableService<TService>,\n params: TParams,\n ): Promise<TService> {\n const result = new this(params)\n if (result.name === 'BaseService') throw new Error('Cannot create BaseService')\n await result.createHandler()\n return result\n }\n\n static initSingleton<TService extends BaseService<TParams>, TParams extends BaseServiceParams>(params: TParams) {\n if (this.singletons[this.name]) throw new Error(`Singleton already initialized for ${this.name}`)\n return this.singletonInitMutex.runExclusive(async () => {\n return await this.create(params) as TService\n })\n }\n\n createHandler(): Promisable<void> {\n return\n }\n\n span<T>(name: string, fn: () => T): T {\n return span(`${this.name}:${name}`, fn, this.tracer)\n }\n\n async spanAsync<T>(name: string, fn: () => Promise<T>, timeout?: number): Promise<T> {\n return await spanAsync(`${this.name}:${name}`, fn, this.tracer, timeout)\n }\n}\n\nexport abstract class BaseAccountableService<\n TParams extends BaseAccountableServiceParams = BaseAccountableServiceParams,\n> extends BaseService<TParams> {}\n","import type { Promisable } from '@xylabs/promise'\nimport type { Service } from '@xyo-network/chain-model'\n\nimport type { BaseService } from './BaseService.ts'\n\nexport interface CreatableService<T extends BaseService = BaseService> extends Service {\n new (params: T['params']): T\n create<T extends BaseService>(this: CreatableService<T>, params: T['params']): Promisable<T>\n}\n\nexport function creatableService<T extends BaseService = BaseService>() {\n return <U extends CreatableService<T>>(constructor: U) => {\n // eslint-disable-next-line @typescript-eslint/no-unused-expressions\n constructor\n }\n}\n","import type {\n Address, BlockAPI,\n BlockNumberOrTag,\n CompileResultAPI,\n EthExecutionAPI,\n FeeHistoryResultAPI,\n Filter,\n FilterResultsAPI,\n HexString, HexString8Bytes,\n HexString32Bytes,\n HexString256Bytes,\n HexStringBytes,\n SignedTransactionInfoAPI,\n SyncingStatusAPI,\n TransactionCallAPI,\n TransactionInfoAPI,\n TransactionReceiptAPI,\n TransactionWithSenderAPI,\n Uint,\n Uint256,\n} from 'web3-types'\n\nexport class BaseEthProvider implements EthExecutionAPI {\n eth_accounts(): Address[] {\n throw new Error('Method not implemented.')\n }\n\n eth_blockNumber(): Uint {\n throw new Error('Method not implemented.')\n }\n\n eth_call(_transaction: TransactionCallAPI, _blockNumber: BlockNumberOrTag): HexStringBytes {\n throw new Error('Method not implemented.')\n }\n\n eth_clearSubscriptions(_keepSyncing?: boolean): void {\n throw new Error('Method not implemented.')\n }\n\n eth_coinbase(): Address {\n throw new Error('Method not implemented.')\n }\n\n eth_compileLLL(_code: string): HexStringBytes {\n throw new Error('Method not implemented.')\n }\n\n eth_compileSerpent(_code: string): HexStringBytes {\n throw new Error('Method not implemented.')\n }\n\n eth_compileSolidity(_code: string): CompileResultAPI {\n throw new Error('Method not implemented.')\n }\n\n eth_estimateGas(_transaction: Partial<TransactionWithSenderAPI>, _blockNumber: BlockNumberOrTag): Uint {\n throw new Error('Method not implemented.')\n }\n\n eth_feeHistory(_blockCount: Uint, _newestBlock: BlockNumberOrTag, _rewardPercentiles: number[]): FeeHistoryResultAPI {\n throw new Error('Method not implemented.')\n }\n\n eth_gasPrice(): Uint {\n throw new Error('Method not implemented.')\n }\n\n eth_getBalance(_address: Address, _blockNumber: BlockNumberOrTag): Uint {\n throw new Error('Method not implemented.')\n }\n\n eth_getBlockByHash(_blockHash: HexString32Bytes, _hydrated: boolean): BlockAPI {\n throw new Error('Method not implemented.')\n }\n\n eth_getBlockByNumber(_blockNumber: BlockNumberOrTag, _hydrated: boolean): BlockAPI {\n throw new Error('Method not implemented.')\n }\n\n eth_getBlockTransactionCountByHash(_blockHash: HexString32Bytes): Uint {\n throw new Error('Method not implemented.')\n }\n\n eth_getBlockTransactionCountByNumber(_blockNumber: BlockNumberOrTag): Uint {\n throw new Error('Method not implemented.')\n }\n\n eth_getCode(_address: Address, _blockNumber: BlockNumberOrTag): HexStringBytes {\n throw new Error('Method not implemented.')\n }\n\n eth_getCompilers(): string[] {\n throw new Error('Method not implemented.')\n }\n\n eth_getFilterChanges(_filterIdentifier: Uint): FilterResultsAPI {\n throw new Error('Method not implemented.')\n }\n\n eth_getFilterLogs(_filterIdentifier: Uint): FilterResultsAPI {\n throw new Error('Method not implemented.')\n }\n\n eth_getLogs(_filter: Filter): FilterResultsAPI {\n throw new Error('Method not implemented.')\n }\n\n eth_getStorageAt(_address: Address, _storageSlot: Uint256, _blockNumber: BlockNumberOrTag): HexStringBytes {\n throw new Error('Method not implemented.')\n }\n\n eth_getTransactionByBlockHashAndIndex(_blockHash: HexString32Bytes, _transactionIndex: Uint): TransactionInfoAPI | undefined {\n throw new Error('Method not implemented.')\n }\n\n eth_getTransactionByBlockNumberAndIndex(_blockNumber: BlockNumberOrTag, _transactionIndex: Uint): TransactionInfoAPI | undefined {\n throw new Error('Method not implemented.')\n }\n\n eth_getTransactionByHash(_transactionHash: HexString32Bytes): TransactionInfoAPI | undefined {\n throw new Error('Method not implemented.')\n }\n\n eth_getTransactionCount(_address: Address, _blockNumber: BlockNumberOrTag): Uint {\n throw new Error('Method not implemented.')\n }\n\n eth_getTransactionReceipt(_transactionHash: HexString32Bytes): TransactionReceiptAPI | undefined {\n throw new Error('Method not implemented.')\n }\n\n eth_getUncleByBlockHashAndIndex(_blockHash: HexString32Bytes, _uncleIndex: Uint): BlockAPI {\n throw new Error('Method not implemented.')\n }\n\n eth_getUncleByBlockNumberAndIndex(_blockNumber: BlockNumberOrTag, _uncleIndex: Uint): BlockAPI {\n throw new Error('Method not implemented.')\n }\n\n eth_getUncleCountByBlockHash(_blockHash: HexString32Bytes): Uint {\n throw new Error('Method not implemented.')\n }\n\n eth_getUncleCountByBlockNumber(_blockNumber: BlockNumberOrTag): Uint {\n throw new Error('Method not implemented.')\n }\n\n eth_getWork(): [HexString32Bytes, HexString32Bytes, HexString32Bytes] {\n throw new Error('Method not implemented.')\n }\n\n eth_hashrate(): Uint {\n throw new Error('Method not implemented.')\n }\n\n eth_maxPriorityFeePerGas(): Uint {\n throw new Error('Method not implemented.')\n }\n\n eth_mining(): boolean {\n throw new Error('Method not implemented.')\n }\n\n eth_newBlockFilter(): Uint {\n throw new Error('Method not implemented.')\n }\n\n eth_newFilter(_filter: Filter): Uint {\n throw new Error('Method not implemented.')\n }\n\n eth_newPendingTransactionFilter(): Uint {\n throw new Error('Method not implemented.')\n }\n\n eth_protocolVersion(): string {\n throw new Error('Method not implemented.')\n }\n\n eth_sendRawTransaction(_transaction: HexStringBytes): HexString32Bytes {\n throw new Error('Method not implemented.')\n }\n\n eth_sendTransaction(_transaction: TransactionWithSenderAPI | Partial<TransactionWithSenderAPI>): HexString32Bytes {\n throw new Error('Method not implemented.')\n }\n\n eth_sign(_address: Address, _message: HexStringBytes): HexString256Bytes {\n throw new Error('Method not implemented.')\n }\n\n eth_signTransaction(_transaction: TransactionWithSenderAPI | Partial<TransactionWithSenderAPI>): HexStringBytes | SignedTransactionInfoAPI {\n throw new Error('Method not implemented.')\n }\n\n eth_submitHashrate(_hashRate: HexString32Bytes, _id: HexString32Bytes): boolean {\n throw new Error('Method not implemented.')\n }\n\n eth_submitWork(_nonce: HexString8Bytes, _hash: HexString32Bytes, _digest: HexString32Bytes): boolean {\n throw new Error('Method not implemented.')\n }\n\n eth_subscribe(..._params: ['newHeads'] | ['newPendingTransactions'] | ['syncing'] | ['logs', { address?: HexString; topics?: HexString[] }]): HexString {\n throw new Error('Method not implemented.')\n }\n\n eth_syncing(): SyncingStatusAPI {\n throw new Error('Method not implemented.')\n }\n\n eth_uninstallFilter(_filterIdentifier: Uint): boolean {\n throw new Error('Method not implemented.')\n }\n\n eth_unsubscribe(_subscriptionId: HexString): HexString {\n throw new Error('Method not implemented.')\n }\n}\n","import { assertEx } from '@xylabs/assert'\nimport { Address, toHex } from '@xylabs/hex'\nimport {\n asBlockBoundWitness,\n BlockBoundWitness, BlockNumber, BlockNumberSchema, BlockProducer, ChainStakeIntent, ChainStakeIntentSchema, HydratedBlock,\n StakeIntentService,\n Transfer,\n XyoBlockProducerParams,\n} from '@xyo-network/chain-model'\nimport {\n BlockRewardDiviner, FixedPercentageBlockRewardDiviner, FixedPercentageBlockRewardDivinerConfigSchema,\n} from '@xyo-network/chain-modules'\nimport {\n AllowedBlockPayload,\n buildBlock,\n} from '@xyo-network/chain-protocol'\nimport { PayloadBuilder } from '@xyo-network/payload-builder'\nimport { WithStorageMeta } from '@xyo-network/payload-model'\n\nimport { BaseService } from '../BaseService.ts'\nimport { creatableService } from '../CreatableService.ts'\n\n/**\n * The default block size for a block\n */\nexport const DEFAULT_BLOCK_SIZE = 10\n\n// /**\n// * The amount of time for which a producer will restake their intent\n// */\nexport const XYO_PRODUCER_RESTAKE_DURATION = 10_000\n\n/**\n * The number of blocks within which a producer will redeclare\n * their intent to produce blocks\n */\nexport const XYO_PRODUCER_RESTAKE_WINDOW = 500n\n\n// TODO: Pull getPendingTransactions into service\n\n@creatableService()\nexport class XyoBlockProducer extends BaseService<XyoBlockProducerParams> implements BlockProducer {\n protected _blockRewardDiviner: BlockRewardDiviner | undefined\n\n static get DefaultBlockSize(): number {\n return DEFAULT_BLOCK_SIZE\n }\n\n get address() {\n return this.account.address\n }\n\n protected get account() {\n return assertEx(this.params.account, () => 'account is required')\n }\n\n protected get chainFinalizedArchivist() {\n return assertEx(this.params.chainFinalizedArchivist, () => 'chainFinalizedArchivist is required')\n }\n\n protected get chainInfo() {\n return assertEx(this.params.chainInformation, () => 'chainInfo is required')\n }\n\n protected get electionService() {\n return assertEx(this.params.electionService, () => 'electionService is required')\n }\n\n protected get pendingTransactions() {\n return assertEx(this.params.pendingTransactions, () => 'pendingTransactions is required')\n }\n\n protected get pendingTransactionsService() {\n return assertEx(this.params.pendingTransactionsService, () => 'Missing pendingTransactionsService')\n }\n\n protected get rewardAddress(): Address {\n return assertEx(this.params.rewardAddress, () => 'No reward address provided')\n }\n\n protected get rewardService() {\n return assertEx(this.params.rewardService, () => 'rewardService is required')\n }\n\n protected get stakeIntentService(): StakeIntentService {\n return assertEx(this.params.stakeIntentService, () => 'No StakeIntentService provided')\n }\n\n protected get validateHydratedBlockState() {\n return assertEx(this.params.validateHydratedBlockState, () => 'validateHydratedBlockState is required')\n }\n\n async next(head: WithStorageMeta<BlockBoundWitness>): Promise<HydratedBlock | undefined> {\n // If the block is for another chain, ignore\n if (head.chain !== this.chainInfo.id) return\n const leaders = await this.electionService.getCreatorCommitteeForNextBlock(head)\n // TODO: Should we propose block if creator committee is empty?\n // TODO: Handle the case where we're not the 1st leader but they're not responding\n // at a higher level than here as that's a network issue\n if (leaders?.[0] !== this.address) return\n return this.proposeNextValidBlock(head)\n }\n\n protected async getBlockRewardTransfer(block: number): Promise<Transfer | undefined> {\n if (!this._blockRewardDiviner) {\n // TODO: Adjust to allow for genesis block reward vs. normal block reward\n this._blockRewardDiviner = await FixedPercentageBlockRewardDiviner.create({\n account: 'random',\n blockRewardService: this.rewardService,\n config: {\n rewardAddress: this.rewardAddress,\n rewardPercentageRatio: 0,\n schema: FixedPercentageBlockRewardDivinerConfigSchema,\n },\n })\n }\n const blockHex = assertEx(toHex(block), () => 'Failed to convert block to hex')\n const blockId = new PayloadBuilder<BlockNumber>({ schema: BlockNumberSchema }).fields({ block: blockHex }).build()\n const rewards = await this._blockRewardDiviner.divine([blockId])\n const [reward] = rewards\n return reward\n }\n\n /**\n * Handles the producer redeclaration logic\n * @param head The current head block\n * @returns\n */\n protected async getProducerRedeclaration(head: WithStorageMeta<BlockBoundWitness>): Promise<ChainStakeIntent | undefined> {\n const redeclareIntent = process.env.XYO_PRODUCER_REDECLARE_INTENT\n if (!redeclareIntent) return\n // Decide if we need to redeclare\n const ranges = await this.stakeIntentService.getDeclaredCandidateRanges(this.address, 'producer')\n // TODO: This doesn't handle the case where the producer had declared a range for the future\n // but we're in a range that's not the future\n // Sort in ascending order based on ending range to get range with highest ending block\n const lastRange = ranges.toSorted((a, b) => a[1] > b[1] ? 1 : -1).at(-1)\n if (!lastRange) return\n const [, currentDeclarationEnd] = lastRange\n const currentBlock = head.block\n const timeToProducerExpiration = currentDeclarationEnd - currentBlock\n if (timeToProducerExpiration > XYO_PRODUCER_RESTAKE_WINDOW) return\n // Create redeclaration\n const intent = new PayloadBuilder<ChainStakeIntent>({ schema: ChainStakeIntentSchema }).fields({\n from: this.address,\n intent: 'producer',\n nbf: currentBlock,\n exp: currentBlock + XYO_PRODUCER_RESTAKE_DURATION,\n }).build()\n return intent\n }\n\n protected async proposeNextValidBlock(head: WithStorageMeta<BlockBoundWitness>): Promise<HydratedBlock | undefined> {\n return await this.spanAsync('proposeNextValidBlock', async () => {\n // Calculate the next block components\n const { block: previousBlock } = assertEx(asBlockBoundWitness(head), () => 'Invalid head block')\n const nextBlock = previousBlock + 1\n const nextBlockTransactions = await this.pendingTransactionsService.getPendingTransactions(head._hash, XyoBlockProducer.DefaultBlockSize)\n\n const blockPayloads: AllowedBlockPayload[] = []\n\n // Calculate the optional producer redeclaration and add it if necessary\n const producerRedeclarationPayload = await this.getProducerRedeclaration(head)\n if (producerRedeclarationPayload) blockPayloads.push(producerRedeclarationPayload)\n\n // If there are no transactions and no payloads, we don't need to create a block\n if (blockPayloads.length === 0 && nextBlockTransactions.length === 0) return\n\n // Calculate the optional block reward transfer and add if necessary\n const rewardTransferPayload = await this.getBlockRewardTransfer(nextBlock)\n if (rewardTransferPayload) blockPayloads.push(rewardTransferPayload)\n\n // Build the block\n const block = await buildBlock(head, nextBlockTransactions, blockPayloads, [this.account])\n console.log('buildBlock', block)\n const errors = await this.validateHydratedBlockState(block, this.chainInfo.id, this.chainFinalizedArchivist)\n if (errors.length > 0) {\n this.logger?.error('Validation of produced block failed', errors)\n } else {\n return block\n }\n })\n }\n}\n","import { assertEx } from '@xylabs/assert'\nimport {\n BaseAccountableServiceParams, BlockRewardService, ChainService,\n toEthAddress,\n} from '@xyo-network/chain-model'\nimport { XyoChainRewards__factory as XyoChainRewardsFactory } from '@xyo-network/typechain'\nimport { Provider } from 'ethers/providers'\n\nimport { BaseService } from '../BaseService.ts'\nimport { creatableService } from '../CreatableService.ts'\n\nexport interface EvmBlockRewardServiceParams extends BaseAccountableServiceParams {\n chainService?: ChainService\n provider?: Provider\n}\n\n@creatableService<EvmBlockRewardService>()\nexport class EvmBlockRewardService extends BaseService<EvmBlockRewardServiceParams> implements BlockRewardService {\n protected _contractAddress: string | undefined\n\n protected get chainService() {\n return assertEx(this.params.chainService, () => 'chainService is required')\n }\n\n protected get contractAddress() {\n return assertEx(this._contractAddress, () => 'contractAddress is required')\n }\n\n protected get provider() {\n return assertEx(this.params.provider, () => 'provider is required')\n }\n\n override async createHandler() {\n await super.createHandler()\n this._contractAddress = await this.chainService.rewardsContract()\n }\n\n async getRewardForBlock(blockNumber: bigint): Promise<bigint> {\n const contract = XyoChainRewardsFactory.connect(toEthAddress(this.contractAddress), this.provider)\n return await contract.calcBlockReward(blockNumber)\n }\n}\n","import { assertEx } from '@xylabs/assert'\nimport { toFixedPoint } from '@xylabs/decimal-precision'\nimport { Promisable } from '@xylabs/promise'\nimport { BaseServiceParams, BlockRewardService } from '@xyo-network/chain-model'\nimport { rewardFromBlockNumber } from '@xyo-network/chain-protocol'\n\nimport { BaseService } from '../BaseService.ts'\nimport { creatableService } from '../CreatableService.ts'\n\nexport interface XyoBlockRewardServiceParams extends BaseServiceParams {\n creatorReward?: bigint\n initialStepReward?: bigint\n minRewardPerBlock?: bigint\n stepFactorDenominator?: bigint\n stepFactorNumerator?: bigint\n stepSize?: bigint\n}\n\n@creatableService()\nexport class XyoBlockRewardService extends BaseService<XyoBlockRewardServiceParams> implements BlockRewardService {\n protected readonly rewardFromBlockNumber = rewardFromBlockNumber(18)\n\n constructor(\n {\n creatorReward = toFixedPoint(20_000_000_000n),\n initialStepReward = toFixedPoint(3000n),\n minRewardPerBlock = toFixedPoint(30n),\n stepFactorDenominator = 100n,\n stepFactorNumerator = 90n,\n stepSize = 1_000_000n,\n }: Partial<XyoBlockRewardServiceParams> = {},\n ) {\n super({\n initialStepReward, minRewardPerBlock, stepSize, stepFactorDenominator, stepFactorNumerator, creatorReward,\n })\n }\n\n get creatorReward() {\n return assertEx(this.params.creatorReward, () => 'creatorReward is required')\n }\n\n get initialReward() {\n return assertEx(this.params.initialStepReward, () => 'initialStepReward is required')\n }\n\n get minRewardPerBlock() {\n return assertEx(this.params.minRewardPerBlock, () => 'minRewardPerBlock is required')\n }\n\n get stepFactorDenominator() {\n return assertEx(this.params.stepFactorDenominator, () => 'stepFactorDenominator is required')\n }\n\n get stepFactorNumerator() {\n return assertEx(this.params.stepFactorNumerator, () => 'stepFactorNumerator is required')\n }\n\n get stepSize() {\n return assertEx(this.params.stepSize, () => 'stepSize is required')\n }\n\n getRewardForBlock(blockNumber: bigint): Promisable<bigint> {\n return this.rewardFromBlockNumber(\n blockNumber,\n this.initialReward,\n this.stepSize,\n this.stepFactorNumerator,\n this.stepFactorDenominator,\n this.minRewardPerBlock,\n this.creatorReward,\n )\n }\n}\n","import { assertEx } from '@xylabs/assert'\nimport { Promisable } from '@xylabs/promise'\nimport {\n BlockBoundWitness,\n HydratedTransaction,\n HydratedTransactionWithStorageMeta,\n XyoValidatorParams,\n} from '@xyo-network/chain-model'\nimport { PayloadBuilder } from '@xyo-network/payload-builder'\n\nimport { BaseService } from '../BaseService.ts'\nimport { creatableService } from '../CreatableService.ts'\nimport { Validator } from './model/index.ts'\n\nconst addStorageMeta = async ([tx, payloads]: HydratedTransaction): Promise<HydratedTransactionWithStorageMeta> => {\n return [await PayloadBuilder.addStorageMeta(tx), await PayloadBuilder.addStorageMeta(payloads)]\n}\n\n@creatableService()\nexport class XyoValidator<TParams extends XyoValidatorParams = XyoValidatorParams> extends BaseService<TParams> implements Validator {\n get address() {\n return this.account.address\n }\n\n protected get account() {\n return assertEx(this.params.account, () => 'account is required')\n }\n\n protected get chainFinalizedArchivist() {\n return assertEx(this.params.chainFinalizedArchivist, () => 'chainFinalizedArchivist is required')\n }\n\n protected get chainInfo() {\n return assertEx(this.params.chainInformation, () => 'chainInfo is required')\n }\n\n protected get electionService() {\n return assertEx(this.params.electionService, () => 'electionService is required')\n }\n\n protected get pendingTransactions() {\n return assertEx(this.params.pendingTransactions, () => 'pendingTransactions is required')\n }\n\n protected get rewardService() {\n return assertEx(this.params.rewardService, () => 'rewardService is required')\n }\n\n validatePendingBlock(_block: BlockBoundWitness): Promisable<Error[]> {\n return [] // await validateBlockProtocol(block, this.chainInfo)\n }\n\n // TODO: Move to validator and inherit this class from validator\n async validatePendingTransaction(hydratedTransaction: HydratedTransaction): Promise<boolean> {\n const [tx] = await addStorageMeta(hydratedTransaction)\n // Ensure not confirmed already (replay attack)\n if ((await this.chainFinalizedArchivist.get([tx._hash])).length > 0) return false\n // TODO: Ensure transaction is valid (double spend, has voucher, has required stake, etc.)\n // TODO: Ensure validator stake is valid\n return await Promise.resolve(true)\n }\n}\n","import { assertEx } from '@xylabs/assert'\nimport { Address, Hash } from '@xylabs/hex'\nimport type { XyoElectionServicesParams } from '@xyo-network/chain-model'\nimport { BlockBoundWitness, ElectionService } from '@xyo-network/chain-model'\nimport { hexToLast4BytesInt, shuffleWithSeed } from '@xyo-network/chain-utils'\nimport { PayloadBuilder } from '@xyo-network/payload-builder'\n\nimport { BaseService } from '../BaseService.ts'\nimport { creatableService } from '../CreatableService.ts'\n\n@creatableService()\nexport class XyoElectionService extends BaseService<XyoElectionServicesParams> implements ElectionService {\n constructor(params: XyoElectionServicesParams) {\n super(params)\n }\n\n get chainIterator() {\n return assertEx(this.params.chainIterator, () => 'No chain iterator')\n }\n\n get chainStakeViewer() {\n return assertEx(this.params.chainStakeViewer, () => 'No chain stake viewer')\n }\n\n get stakeIntentService() {\n return assertEx(this.params.stakeIntentService, () => 'No staked intent service')\n }\n\n async getCreatorCommitteeForNextBlock(current: BlockBoundWitness): Promise<Address[]> {\n return await this.spanAsync('getCreatorCommitteeForNextBlock', async () => {\n const nextBlock = current.block + 1\n const candidates = await this.stakeIntentService.getDeclaredCandidatesForBlock(nextBlock, 'producer')\n const previousBlockHash = await PayloadBuilder.hash(current)\n return this.generateCreatorCommittee(candidates, previousBlockHash)\n })\n }\n\n protected generateCreatorCommittee(candidates: Address[], previousBlockHash: Hash, maxSize = 3): Address[] {\n const creators = new Set<Address>(candidates)\n const seed = hexToLast4BytesInt(previousBlockHash)\n const creatorArray = shuffleWithSeed(creators, seed)\n return creatorArray.slice(0, maxSize)\n }\n}\n","import { filterAs } from '@xylabs/array'\nimport { assertEx } from '@xylabs/assert'\nimport { exists } from '@xylabs/exists'\nimport { Hash } from '@xylabs/hex'\nimport { MemoryArchivist } from '@xyo-network/archivist-memory'\nimport { ArchivistInstance } from '@xyo-network/archivist-model'\nimport {\n asOptionalTransactionBoundWitnessWithStorageMeta,\n BaseServiceParams,\n EventingChainBlockNumberIterator,\n HydratedTransaction,\n PendingTransactionsService,\n TransactionBoundWitness,\n} from '@xyo-network/chain-model'\nimport { hydrateBlock, hydrateTransaction } from '@xyo-network/chain-protocol'\nimport { Sequence, WithStorageMeta } from '@xyo-network/payload-model'\nimport { Mutex } from 'async-mutex'\n\nimport { BaseService } from '../BaseService.ts'\nimport { creatableService } from '../CreatableService.ts'\n\nexport interface XyoPendingTransactionsServiceParams extends BaseServiceParams {\n chainArchivist?: ArchivistInstance\n chainIterator?: EventingChainBlockNumberIterator\n pendingTransactionsArchivist?: ArchivistInstance\n}\n\n@creatableService()\nexport class XyoPendingTransactionsService extends BaseService<XyoPendingTransactionsServiceParams> implements PendingTransactionsService {\n private static readonly MutexPriority = {\n /**\n * Priority for inserting new transactions\n */\n InsertNewTransactions: 5,\n /**\n * Priority for reading pending transactions\n */\n ReadTransactions: 3,\n /**\n * Priority for removing finalized transactions\n */\n RemoveFinalizedTransactions: 1,\n }\n\n // used to remember the last block's transactions that was removed due to it being in the chain\n private _cleanedToBlock: Hash | undefined\n\n // a local archivist that has only the transactions in it (used as queue)\n private _pendingTransactionsLocalArchivist: MemoryArchivist | undefined\n private _pendingTransactionsLocalArchivistCursor: Sequence | undefined\n\n private _updatePendingTransactionsLocalArchivistMutex = new Mutex()\n\n private get chainArchivist() {\n return assertEx(this.params.chainArchivist, () => 'No completed blocks with data archivist')\n }\n\n private get chainIterator() {\n return assertEx(this.params.chainIterator, () => 'No chainIterator')\n }\n\n private get pendingTransactionsArchivist() {\n return assertEx(this.params.pendingTransactionsArchivist, () => 'No pending transactions archivist')\n }\n\n private get pendingTransactionsLocalArchivist() {\n return assertEx(this._pendingTransactionsLocalArchivist, () => 'No pending transactions curate archivist')\n }\n\n override async createHandler() {\n await super.createHandler()\n this._pendingTransactionsLocalArchivist = await MemoryArchivist.create({ account: 'random' })\n // await this.updatePendingTransactionsLocalArchivist(1_000_000)\n // On new head, remove already included transactions\n // this.chainIterator.on('headUpdated', async () => {\n // const head = await this.chainIterator.head()\n // const headHash = await PayloadBuilder.hash(head)\n // await this.removeAlreadyIncludedTransactions(headHash)\n // })\n // On new pending transactions, insert them into the curated archivist\n this.pendingTransactionsArchivist.on('inserted', async ({ payloads }) => {\n await this._updatePendingTransactionsLocalArchivistMutex.runExclusive(async () => {\n // Check that the transactions are not already in the chain archivist\n const hashes = filterAs(payloads, asOptionalTransactionBoundWitnessWithStorageMeta).map(payload => payload._hash)\n const existingChainTransactions = await this.chainArchivist.get(hashes)\n const existingChainTransactionHashes = new Set(existingChainTransactions.map(item => item._hash))\n const nonExistingTransactions = payloads.filter(item => !existingChainTransactionHashes.has(item._hash))\n await this.pendingTransactionsLocalArchivist.insert(nonExistingTransactions)\n }, XyoPendingTransactionsService.MutexPriority.InsertNewTransactions)\n })\n // On new finalized blocks, remove the transactions from the curated archivist\n this.chainArchivist.on('inserted', async ({ payloads }) => {\n await this._updatePendingTransactionsLocalArchivistMutex.runExclusive(async () => {\n await this.pendingTransactionsLocalArchivist.delete(payloads.map(payload => payload._hash))\n }, XyoPendingTransactionsService.MutexPriority.RemoveFinalizedTransactions)\n })\n }\n\n async getPendingTransactions(head: Hash, limit: number, timeout = 1_000_000): Promise<HydratedTransaction[]> {\n return await this.spanAsync('getPendingTransactions', async () => {\n // await this.updatePendingTransactionsLocalArchivist()\n // await this.removeAlreadyIncludedTransactions(head)\n return await this._updatePendingTransactionsLocalArchivistMutex.runExclusive(async () => {\n const foundPendingTransactions: WithStorageMeta<TransactionBoundWitness>[] = []\n let cursor: Sequence | undefined\n while (foundPendingTransactions.length < limit) {\n const payloads = await this.pendingTransactionsLocalArchivist.next({\n limit: 100, order: 'asc', cursor,\n })\n if (payloads.length === 0) break\n cursor = payloads.at(-1)?._sequence\n const transactions = payloads.map(payload => asOptionalTransactionBoundWitnessWithStorageMeta(payload)).filter(exists)\n foundPendingTransactions.push(...transactions)\n }\n const hydratedTransactions = await Promise.all(foundPendingTransactions.map(async (tx) => {\n return assertEx(await hydrateTransaction(this.pendingTransactionsLocalArchivist, tx._hash), () => `Failed to hydrate transaction [${tx._hash}]`)\n }))\n return hydratedTransactions\n }, XyoPendingTransactionsService.MutexPriority.ReadTransactions)\n }, timeout)\n }\n\n private async removeAlreadyIncludedTransactions(head?: Hash, timeout = 1_000_000) {\n return await this.spanAsync('removeAlreadyIncludedTransactions', async () => {\n let headPtr: Hash | null = head ?? null\n while (headPtr !== null) {\n const [block, payloads] = assertEx(await hydrateBlock(this.chainArchivist, headPtr), () => `Failed to find head [${head}]`)\n if (block._hash === this._cleanedToBlock) break\n await this.pendingTransactionsLocalArchivist.delete(\n payloads.map(payload => asOptionalTransactionBoundWitnessWithStorageMeta(payload)?._hash).filter(exists),\n )\n this._cleanedToBlock = block._hash\n headPtr = block?.previous\n }\n }, timeout)\n }\n\n private async updatePendingTransactionsLocalArchivist(timeout = 1_000_000) {\n return await this.spanAsync('updatePendingTransactionsLocalArchivist', async () => {\n if (this._updatePendingTransactionsLocalArchivistMutex.isLocked()) {\n console.warn('updatePendingTransactionsLocalArchivist busy - skipping')\n return\n }\n return await this._updatePendingTransactionsLocalArchivistMutex.runExclusive(async () => {\n // const localWithDataArchivist = this.pendingTransactionsArchivist\n // sync from remote\n // await this.spanAsync('sync from remote [pending]', async () => {\n // this._pendingTransactionsLocalAllDataArchivistCursor = await synchronizeArchivists(\n // this.externalPendingTransactionsWithDataArchivist,\n // localWithDataArchivist,\n // this._pendingTransactionsLocalAllDataArchivistCursor,\n // )\n // }, timeout / 2)\n // // extract transactions only [from localWithDataArchivist]\n // await this.spanAsync('sync from local [pending]', async () => {\n // this._pendingTransactionsLocalArchivistCursor = await synchronizeArchivists(\n // localWithDataArchivist,\n // this.pendingTransactionsLocalArchivist,\n // this._pendingTransactionsLocalArchivistCursor,\n // isTransactionBoundWitness,\n // isTransactionBoundWitness,\n // )\n // }, timeout / 10)\n await Promise.resolve()\n })\n }, timeout)\n }\n}\n","import { filterAs } from '@xylabs/array'\nimport { assertEx } from '@xylabs/assert'\nimport {\n Address, asAddress, Hash,\n} from '@xylabs/hex'\nimport { ArchivistNextOptions } from '@xyo-network/archivist-model'\nimport type { Intent, XyoStakeIntentServiceParams } from '@xyo-network/chain-model'\nimport {\n asOptionalBlockBoundWitness, asOptionalBlockBoundWitnessWithStorageMeta,\n asOptionalChainIndexingServiceStateWithStorageMeta, asOptionalChainStakeIntent, ChainIndexingServiceState, ChainIndexingServiceStateSchema, ChainStakeViewer,\n isChainIndexingServiceState,\n StakeIntentService,\n} from '@xyo-network/chain-model'\nimport {\n analyzeChain, ChainStakeIntentAnalyzer,\n isChainSummaryStakeIntent,\n} from '@xyo-network/chain-protocol'\nimport {\n DEFAULT_FIND_FIRST_MATCHING_NEXT_OPTIONS,\n findFirstMatching, IntervalMap,\n SerializedIntervalMap,\n} from '@xyo-network/chain-utils'\nimport { PayloadBuilder } from '@xyo-network/payload-builder'\nimport { Payload, WithStorageMeta } from '@xyo-network/payload-model'\nimport { Mutex } from 'async-mutex'\nimport { LRUCache } from 'lru-cache'\n\nimport { BaseService } from '../BaseService.ts'\nimport { creatableService } from '../CreatableService.ts'\n\n/**\n * The number of blocks to periodically persist state\n */\nconst STATE_PERSISTENCE_INTERVAL = 60n\n\nconst ACTIVE_STAKE_TTL = 1000 * 60 * 60 * 2 // 2 hours in milliseconds\nconst NO_ACTIVE_STAKE_TTL = 1000 * 2 // 2 seconds in milliseconds\nconst STAKE_CACHE_MAX_ENTRIES = 10_000\n\n@creatableService()\nexport class XyoStakeIntentService extends BaseService<XyoStakeIntentServiceParams> implements StakeIntentService {\n // TODO: Use hash instead of block number to handle chain reorgs\n protected _lastIndexedBlockHash: Hash | undefined = undefined\n // TODO: Interval tree per declaration (bank, validator, etc.)\n // NOTE: Ideally move to DataIntervalTree to handle declared\n // ranges as it enables range queries in O(min(n, k * log n)) time,\n // where k is the number of intervals in the output list time\n // Currently using set based because it's simpler, equivalent\n // in performance for small sets, and (most importantly) easily\n // persisted so we can recover state on restart.\n protected _producers: IntervalMap<Address> = new IntervalMap()\n protected _stakeCache = new LRUCache<Address, bigint>({ max: STAKE_CACHE_MAX_ENTRIES })\n protected _updateMutex = new Mutex()\n\n constructor(params: XyoStakeIntentServiceParams) {\n super(params)\n this.chainIterator.on('headUpdated', async () => {\n await this.updateIndex()\n })\n }\n\n protected get chainArchivist() {\n return assertEx(this.params.chainArchivist, () => 'chainArchivist not set')\n }\n\n protected get chainIterator() {\n return assertEx(this.params.chainIterator, () => 'chainIterator not set')\n }\n\n protected get chainStakeViewer() {\n return assertEx(this.params.chainStakeViewer, () => 'chainStakeViewer not set')\n }\n\n protected get stakeIntentStateArchivist() {\n return assertEx(this.params.stakeIntentStateArchivist, () => 'stakeIntentStateArchivist not set')\n }\n\n override async createHandler(): Promise<void> {\n const head = await this.chainIterator.head()\n const headHash = await PayloadBuilder.hash(head)\n if (head?.block === undefined) return\n await this.recoverState(headHash)\n await this.updateIndex(true)\n }\n\n async getDeclaredCandidateRanges(address: Address, intent: Intent): Promise<Readonly<Readonly<[number, number]>[]>> {\n await Promise.resolve()\n assertEx(intent === 'producer', () => `Error: Support not yet added for intent ${intent}`)\n const results = this._producers.get(address)\n return results ?? []\n }\n\n async getDeclaredCandidatesForBlock(block: number, intent: Intent): Promise<Address[]> {\n return await this.spanAsync('getDeclaredCandidatesForBlock', async () => {\n assertEx(intent === 'producer', () => `Error: Support not yet added for intent ${intent}`)\n const results = this._producers.findAllContaining(block)\n const candidates = [...results]\n const validCandidates = await this.filterToValidStake(candidates, this.chainStakeViewer)\n return validCandidates\n })\n }\n\n async isStakedForBlock(block: number, intent: Intent, address: Address): Promise<boolean> {\n const candidates = await this.getDeclaredCandidatesForBlock(block, intent)\n return candidates.includes(address)\n }\n\n private async filterToValidStake(\n candidates: Address[],\n chainStakeViewer: ChainStakeViewer,\n requiredMinimumStake: bigint = 1n,\n ): Promise<Address[]> {\n type CandidateStake = { candidate: Address; stake: bigint }\n\n // Find the stake for each candidate\n const candidatesWithStake: CandidateStake[] = await Promise.all(\n candidates.map(async (candidate) => {\n // Check if the stake is already cached\n const stake = this._stakeCache.get(candidate)\n if (stake === undefined) {\n // Fetch from chainStakeViewer if not cached\n const activeStake = await chainStakeViewer.activeByAddressStaked(`${candidate}`)\n if (activeStake > 0n) {\n // Store result in cache\n this._stakeCache.set(candidate, activeStake, { ttl: ACTIVE_STAKE_TTL })\n } else {\n this._stakeCache.set(candidate, activeStake, { ttl: NO_ACTIVE_STAKE_TTL })\n }\n return { candidate, stake: activeStake }\n } else {\n return { candidate, stake }\n }\n }),\n )\n\n // Filter out candidates whose stake is greater than or equal to the required minimum\n return candidatesWithStake\n .filter(({ stake }) => stake >= requiredMinimumStake)\n .map(({ candidate }) => candidate)\n }\n\n private async persistState(current: Hash): Promise<void> {\n const state = this._producers.serialize()\n const payload = new PayloadBuilder<ChainIndexingServiceState<SerializedIntervalMap>>({ schema: ChainIndexingServiceStateSchema })\n .fields({ endBlockHash: current, state })\n .build()\n await this.stakeIntentStateArchivist.insert([payload])\n }\n\n private async recoverState(current: Hash): Promise<void> {\n const currentBlock = assertEx(asOptionalBlockBoundWitness((await this.chainArchivist.get([current]))?.[0]), () => `Block ${current} not found`)\n const currentBlockNum = currentBlock.block\n // Find last state before current head (in case of rollback, we indexed past it on an uncle chain, etc.)\n const opts: ArchivistNextOptions = { ...DEFAULT_FIND_FIRST_MATCHING_NEXT_OPTIONS }\n while (true) {\n const predicate = (p: WithStorageMeta<Payload>) => {\n const state = asOptionalChainIndexingServiceStateWithStorageMeta(p)\n return state ? true : false\n }\n const state = await findFirstMatching(this.stakeIntentStateArchivist, predicate, opts)\n if (isChainIndexingServiceState<SerializedIntervalMap>(state)) {\n const indexed = (await this.chainArchivist.get([state.endBlockHash]))?.[0]\n const indexedBlock = asOptionalBlockBoundWitnessWithStorageMeta(indexed)\n if (indexedBlock) {\n const indexedBlockNum = indexedBlock.block\n if (indexedBlockNum <= currentBlockNum) {\n const data = state.state as SerializedIntervalMap\n this._producers = new IntervalMap(data)\n this._lastIndexedBlockHash = indexedBlock._hash\n break\n }\n }\n } else {\n // No state found, start from genesis\n break\n }\n opts.open = true\n }\n }\n\n private async updateIndex(displayProgress = false): Promise<void> {\n if (this._updateMutex.isLocked()) {\n return\n }\n await this._updateMutex.runExclusive(async () => {\n return await this.spanAsync('updateIndex', async () => {\n const currentHead = await this.chainIterator.head()\n const currentHeadHash = await PayloadBuilder.hash(currentHead)\n const result = await analyzeChain(this.chainArchivist, [new ChainStakeIntentAnalyzer('producer')], currentHeadHash, this._lastIndexedBlockHash)\n const signedDeclarations = filterAs(result.find(isChainSummaryStakeIntent)?.intents ?? [], asOptionalChainStakeIntent)\n if (currentHead.block === undefined) return\n const currentHeadBlockNum = currentHead.block\n if (displayProgress) this.logger?.info(`Updating index through 0x${currentHeadBlockNum}`)\n for (const signedDeclaration of signedDeclarations) {\n const { exp, nbf } = signedDeclaration\n const start = nbf\n const stop = exp\n const address = asAddress(signedDeclaration?.from)\n if (start !== undefined && stop !== undefined && address !== undefined) {\n this._producers.insert(address, start, stop)\n }\n }\n /*\n if (index % STATE_PERSISTENCE_INTERVAL === 0n) {\n if (displayProgress) this.logger?.info(`Persisting state at block ${index}`)\n await this.persistState(await PayloadBuilder.hash(block))\n }\n */\n this._lastIndexedBlockHash = currentHeadHash\n })\n })\n }\n}\n","import { Base } from '@xylabs/base'\nimport type { Address } from '@xylabs/hex'\nimport { toAddress } from '@xylabs/hex'\nimport type { Promisable } from '@xylabs/promise'\nimport type { BaseServiceParams, ChainService } from '@xyo-network/chain-model'\nimport type { StakedXyoChain } from '@xyo-network/typechain'\nimport { StakedXyoChain__factory as StakedXyoChainFactory } from '@xyo-network/typechain'\nimport { getAddress } from 'ethers/address'\nimport type { ContractRunner } from 'ethers/providers'\n\nexport interface EvmChainServiceParams extends BaseServiceParams {\n contract: StakedXyoChain\n id: Address\n runner: ContractRunner\n}\n\n/**\n * A class that represents a chain stake as backed by an EVM smart contract\n */\nexport class EvmChainService extends Base<EvmChainServiceParams> implements ChainService {\n private _contract: StakedXyoChain\n\n protected constructor(params: EvmChainServiceParams) {\n super(params)\n this._contract = params.contract\n }\n\n get id(): Address {\n return this.params.id\n }\n\n get runner(): ContractRunner {\n return this.params.runner\n }\n\n static create({\n id, runner, logger, traceProvider, meterProvider,\n }: Omit<EvmChainServiceParams, 'contract'>): Promisable<EvmChainService> {\n const contractAddress = getAddress(id)\n const contract: StakedXyoChain = StakedXyoChainFactory.connect(contractAddress, runner)\n return new this({\n id, contract, runner, logger, traceProvider, meterProvider,\n })\n }\n\n async active(): Promise<bigint> {\n return await this._contract.active()\n }\n\n async activeByAddressStaked(address: string): Promise<bigint> {\n return await this._contract.activeByAddressStaked(getAddress(address))\n }\n\n async activeByStaker(address: string): Promise<bigint> {\n return await this._contract.activeByStaker(getAddress(address))\n }\n\n async addStake(staked: string, amount: bigint): Promise<boolean> {\n const result = await this._contract.addStake(getAddress(staked), amount)\n await result.wait()\n return true\n }\n\n async chainId(): Promise<Address> {\n return toAddress(await this._contract.chainId())\n }\n\n async forkedAtBlockNumber(): Promise<bigint> {\n return await this._contract.forkedAtBlockNumber()\n }\n\n async forkedAtHash(): Promise<bigint> {\n return await this._contract.forkedAtHash()\n }\n\n async forkedChainId(): Promise<Address> {\n return toAddress(await this._contract.forkedChainId())\n }\n\n async minWithdrawalBlocks(): Promise<bigint> {\n return await this._contract.minWithdrawalBlocks()\n }\n\n async pending(): Promise<bigint> {\n return await this._contract.pending()\n }\n\n async pendingByStaker(staker: string): Promise<bigint> {\n return await this._contract.pendingByStaker(getAddress(staker))\n }\n\n async removeStake(slot: bigint): Promise<boolean> {\n const result = await this._contract.removeStake(slot)\n await result.wait()\n return true\n }\n\n async rewardsContract(): Promise<string> {\n return await this._contract.rewardsContract()\n }\n\n async stakingTokenAddress(): Promise<string> {\n return await this._contract.stakingTokenAddress()\n }\n\n async withdrawStake(slot: bigint): Promise<boolean> {\n const result = await this._contract.withdrawStake(slot)\n await result.wait()\n return true\n }\n\n async withdrawn(): Promise<bigint> {\n return await this._contract.withdrawn()\n }\n\n async withdrawnByStaker(staker: string): Promise<bigint> {\n return await this._contract.withdrawnByStaker(getAddress(staker))\n }\n}\n","import { assertEx } from '@xylabs/assert'\nimport type { BaseParams } from '@xylabs/base'\nimport type { ArchivistInstance } from '@xyo-network/archivist-model'\nimport type {\n BlockBoundWitness, ChainIdentification,\n ChainIteratorEventData,\n EventingChainBlockNumberIterator,\n XyoChainIteratorParams,\n} from '@xyo-network/chain-model'\nimport {\n asBlockBoundWitness, asOptionalBlockBoundWitness,\n isBlockBoundWitness,\n} from '@xyo-network/chain-model'\nimport { BaseEmitter } from '@xyo-network/module-event-emitter'\nimport { PayloadBuilder } from '@xyo-network/payload-builder'\nimport { LRUCache } from 'lru-cache'\n\nexport class XyoChainBlockNumberIterator extends BaseEmitter<BaseParams, ChainIteratorEventData> implements EventingChainBlockNumberIterator {\n protected _blocksByBlockNumber = new LRUCache<number, BlockBoundWitness>({ max: 10_000 })\n protected _chainArchivist: ArchivistInstance\n protected _chainInformation: ChainIdentification\n protected _head: BlockBoundWitness\n\n protected constructor(params: XyoChainIteratorParams) {\n super({})\n const { chainArchivist: archivist, head } = params\n this._chainArchivist = archivist\n this._head = head\n this._chainInformation = { id: head.chain }\n }\n\n get archivist(): ArchivistInstance { return this._chainArchivist }\n\n get chainIdentification(): ChainIdentification { return this._chainInformation }\n\n static async create(params: XyoChainIteratorParams): Promise<XyoChainBlockNumberIterator> {\n await Promise.resolve()\n return new XyoChainBlockNumberIterator(params)\n }\n\n async get(block: number): Promise<BlockBoundWitness> {\n // Bail early if the block requested is newer than the current head\n assertEx(this._head.block >= block, () => `Block requested is newer than the current head [${block}]`)\n const cached = this._blocksByBlockNumber.get(block)\n if (cached) return cached\n // Start at the current head and traverse backwards until the requested block is found\n const startingBlock = this._head\n const currentBlockHash = await PayloadBuilder.hash(startingBlock)\n let [currentBlock] = await this._chainArchivist.get([currentBlockHash])\n while (currentBlock) {\n assertEx(asBlockBoundWitness(currentBlock), () => `Expected hash to be a block bound witness [${currentBlock._hash}]`)\n if (isBlockBoundWitness(currentBlock)) {\n this._blocksByBlockNumber.set(currentBlock.block, currentBlock)\n if (currentBlock.block === block) {\n return currentBlock\n }\n const { previous } = currentBlock\n if (!previous) break\n [currentBlock] = await this._chainArchivist.get([previous])\n }\n }\n throw new Error(`Block not found: ${block}`)\n }\n\n async head(): Promise<BlockBoundWitness> {\n return await Promise.resolve(this._head)\n }\n\n async next(block: number): Promise<BlockBoundWitness | undefined> {\n const currentBlock = block\n const nextBlockNumber = currentBlock + 1\n return await this.get(nextBlockNumber)\n }\n\n // TODO: Decide on inclusive/exclusive (probably need inclusive to account for chain head)\n // and then communicate via method name and documentation\n async previous(block: number | undefined = undefined, count: number = 1): Promise<BlockBoundWitness[]> {\n const results: BlockBoundWitness[] = []\n let currentBlock: BlockBoundWitness | undefined = block ? (await this.get(block)) : this._head\n while (currentBlock && results.length < count) {\n if (isBlockBoundWitness(currentBlock)) {\n results.push(currentBlock)\n const { previous } = currentBlock\n if (!previous) break\n const nextBlock = await this._chainArchivist.get([previous])\n currentBlock = asOptionalBlockBoundWitness(nextBlock[0])\n } else {\n const hash = PayloadBuilder.hash(currentBlock)\n assertEx(asBlockBoundWitness(currentBlock), () => `Expected hash to be a block bound witness [${hash}]`)\n }\n }\n return results\n }\n\n async updateHead(head: BlockBoundWitness): Promise<void> {\n // Async to allow for re-indexing, etc.\n await Promise.resolve()\n this._head = head\n void this.emit('headUpdated', { blocks: [head] })\n }\n}\n"],"mappings":"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","names":["assertEx","analyzeChain","BalanceAnalyzer","isChainSummaryBalances","span","spanAsync","BaseEmitter","Mutex","BaseService","BaseEmitter","singletonInitMutex","Mutex","singletons","globalThis","meter","params","meterProvider","getMeter","name","constructor","tracer","traceProvider","getTracer","create","result","Error","createHandler","initSingleton","runExclusive","span","fn","spanAsync","timeout","BaseAccountableService","creatableService","constructor","XyoChainAccountBalanceService","BaseService","_balances","_previousHead","chainArchivist","assertEx","params","getBalance","address","getBalances","sync","head","analysis","analyzeChain","BalanceAnalyzer","tracer","find","isChainSummaryBalances","balances","BaseEthProvider","eth_accounts","Error","eth_blockNumber","eth_call","_transaction","_blockNumber","eth_clearSubscriptions","_keepSyncing","eth_coinbase","eth_compileLLL","_code","eth_compileSerpent","eth_compileSolidity","eth_estimateGas","eth_feeHistory","_blockCount","_newestBlock","_rewardPercentiles","eth_gasPrice","eth_getBalance","_address","eth_getBlockByHash","_blockHash","_hydrated","eth_getBlockByNumber","eth_getBlockTransactionCountByHash","eth_getBlockTransactionCountByNumber","eth_getCode","eth_getCompilers","eth_getFilterChanges","_filterIdentifier","eth_getFilterLogs","eth_getLogs","_filter","eth_getStorageAt","_storageSlot","eth_getTransactionByBlockHashAndIndex","_transactionIndex","eth_getTransactionByBlockNumberAndIndex","eth_getTransactionByHash","_transactionHash","eth_getTransactionCount","eth_getTransactionReceipt","eth_getUncleByBlockHashAndIndex","_uncleIndex","eth_getUncleByBlockNumberAndIndex","eth_getUncleCountByBlockHash","eth_getUncleCountByBlockNumber","eth_getWork","eth_hashrate","eth_maxPriorityFeePerGas","eth_mining","eth_newBlockFilter","eth_newFilter","eth_newPendingTransactionFilter","eth_protocolVersion","eth_sendRawTransaction","eth_sendTransaction","eth_sign","_message","eth_signTransaction","eth_submitHashrate","_hashRate","_id","eth_submitWork","_nonce","_hash","_digest","eth_subscribe","_params","eth_syncing","eth_uninstallFilter","eth_unsubscribe","_subscriptionId","assertEx","toHex","asBlockBoundWitness","BlockNumberSchema","ChainStakeIntentSchema","FixedPercentageBlockRewardDiviner","FixedPercentageBlockRewardDivinerConfigSchema","buildBlock","PayloadBuilder","DEFAULT_BLOCK_SIZE","XYO_PRODUCER_RESTAKE_DURATION","XYO_PRODUCER_RESTAKE_WINDOW","XyoBlockProducer","BaseService","_blockRewardDiviner","DefaultBlockSize","address","account","assertEx","params","chainFinalizedArchivist","chainInfo","chainInformation","electionService","pendingTransactions","pendingTransactionsService","rewardAddress","rewardService","stakeIntentService","validateHydratedBlockState","next","head","chain","id","leaders","getCreatorCommitteeForNextBlock","proposeNextValidBlock","getBlockRewardTransfer","block","FixedPercentageBlockRewardDiviner","create","blockRewardService","config","rewardPercentageRatio","schema","FixedPercentageBlockRewardDivinerConfigSchema","blockHex","toHex","blockId","PayloadBuilder","BlockNumberSchema","fields","build","rewards","divine","reward","getProducerRedeclaration","redeclareIntent","process","env","XYO_PRODUCER_REDECLARE_INTENT","ranges","getDeclaredCandidateRanges","lastRange","toSorted","a","b","at","currentDeclarationEnd","currentBlock","timeToProducerExpiration","intent","ChainStakeIntentSchema","from","nbf","exp","spanAsync","previousBlock","asBlockBoundWitness","nextBlock","nextBlockTransactions","getPendingTransactions","_hash","blockPayloads","producerRedeclarationPayload","push","length","rewardTransferPayload","buildBlock","console","log","errors","logger","error","assertEx","toEthAddress","XyoChainRewards__factory","XyoChainRewardsFactory","EvmBlockRewardService","BaseService","_contractAddress","chainService","assertEx","params","contractAddress","provider","createHandler","rewardsContract","getRewardForBlock","blockNumber","contract","XyoChainRewardsFactory","connect","toEthAddress","calcBlockReward","assertEx","toFixedPoint","rewardFromBlockNumber","XyoBlockRewardService","BaseService","rewardFromBlockNumber","constructor","creatorReward","toFixedPoint","initialStepReward","minRewardPerBlock","stepFactorDenominator","stepFactorNumerator","stepSize","assertEx","params","initialReward","getRewardForBlock","blockNumber","assertEx","PayloadBuilder","addStorageMeta","tx","payloads","PayloadBuilder","XyoValidator","BaseService","address","account","assertEx","params","chainFinalizedArchivist","chainInfo","chainInformation","electionService","pendingTransactions","rewardService","validatePendingBlock","_block","validatePendingTransaction","hydratedTransaction","get","_hash","length","Promise","resolve","assertEx","hexToLast4BytesInt","shuffleWithSeed","PayloadBuilder","XyoElectionService","BaseService","constructor","params","chainIterator","assertEx","chainStakeViewer","stakeIntentService","getCreatorCommitteeForNextBlock","current","spanAsync","nextBlock","block","candidates","getDeclaredCandidatesForBlock","previousBlockHash","PayloadBuilder","hash","generateCreatorCommittee","maxSize","creators","Set","seed","hexToLast4BytesInt","creatorArray","shuffleWithSeed","slice","filterAs","assertEx","exists","MemoryArchivist","asOptionalTransactionBoundWitnessWithStorageMeta","hydrateBlock","hydrateTransaction","Mutex","XyoPendingTransactionsService","BaseService","MutexPriority","InsertNewTransactions","ReadTransactions","RemoveFinalizedTransactions","_cleanedToBlock","_pendingTransactionsLocalArchivist","_pendingTransactionsLocalArchivistCursor","_updatePendingTransactionsLocalArchivistMutex","Mutex","chainArchivist","assertEx","params","chainIterator","pendingTransactionsArchivist","pendingTransactionsLocalArchivist","createHandler","MemoryArchivist","create","account","on","payloads","runExclusive","hashes","filterAs","asOptionalTransactionBoundWitnessWithStorageMeta","map","payload","_hash","existingChainTransactions","get","existingChainTransactionHashes","Set","item","nonExistingTransactions","filter","has","insert","delete","getPendingTransactions","head","limit","timeout","spanAsync","foundPendingTransactions","cursor","length","next","order","at","_sequence","transactions","exists","push","hydratedTransactions","Promise","all","tx","hydrateTransaction","removeAlreadyIncludedTransactions","headPtr","block","hydrateBlock","previous","updatePendingTransactionsLocalArchivist","isLocked","console","warn","resolve","filterAs","assertEx","asAddress","asOptionalBlockBoundWitness","asOptionalBlockBoundWitnessWithStorageMeta","asOptionalChainIndexingServiceStateWithStorageMeta","asOptionalChainStakeIntent","ChainIndexingServiceStateSchema","isChainIndexingServiceState","analyzeChain","ChainStakeIntentAnalyzer","isChainSummaryStakeIntent","DEFAULT_FIND_FIRST_MATCHING_NEXT_OPTIONS","findFirstMatching","IntervalMap","PayloadBuilder","Mutex","LRUCache","ACTIVE_STAKE_TTL","NO_ACTIVE_STAKE_TTL","STAKE_CACHE_MAX_ENTRIES","XyoStakeIntentService","BaseService","_lastIndexedBlockHash","undefined","_producers","IntervalMap","_stakeCache","LRUCache","max","_updateMutex","Mutex","constructor","params","chainIterator","on","updateIndex","chainArchivist","assertEx","chainStakeViewer","stakeIntentStateArchivist","createHandler","head","headHash","PayloadBuilder","hash","block","recoverState","getDeclaredCandidateRanges","address","intent","Promise","resolve","results","get","getDeclaredCandidatesForBlock","spanAsync","findAllContaining","candidates","validCandidates","filterToValidStake","isStakedForBlock","includes","requiredMinimumStake","candidatesWithStake","all","map","candidate","stake","activeStake","activeByAddressStaked","set","ttl","filter","persistState","current","state","serialize","payload","schema","ChainIndexingServiceStateSchema","fields","endBlockHash","build","insert","currentBlock","asOptionalBlockBoundWitness","currentBlockNum","opts","DEFAULT_FIND_FIRST_MATCHING_NEXT_OPTIONS","predicate","p","asOptionalChainIndexingServiceStateWithStorageMeta","findFirstMatching","isChainIndexingServiceState","indexed","indexedBlock","asOptionalBlockBoundWitnessWithStorageMeta","indexedBlockNum","data","_hash","open","displayProgress","isLocked","runExclusive","currentHead","currentHeadHash","result","analyzeChain","ChainStakeIntentAnalyzer","signedDeclarations","filterAs","find","isChainSummaryStakeIntent","intents","asOptionalChainStakeIntent","currentHeadBlockNum","logger","info","signedDeclaration","exp","nbf","start","stop","asAddress","from","Base","toAddress","StakedXyoChain__factory","StakedXyoChainFactory","getAddress","EvmChainService","Base","_contract","params","contract","id","runner","create","logger","traceProvider","meterProvider","contractAddress","getAddress","StakedXyoChainFactory","connect","active","activeByAddressStaked","address","activeByStaker","addStake","staked","amount","result","wait","chainId","toAddress","forkedAtBlockNumber","forkedAtHash","forkedChainId","minWithdrawalBlocks","pending","pendingByStaker","staker","removeStake","slot","rewardsContract","stakingTokenAddress","withdrawStake","withdrawn","withdrawnByStaker","assertEx","asBlockBoundWitness","asOptionalBlockBoundWitness","isBlockBoundWitness","BaseEmitter","PayloadBuilder","LRUCache","XyoChainBlockNumberIterator","BaseEmitter","_blocksByBlockNumber","LRUCache","max","_chainArchivist","_chainInformation","_head","params","chainArchivist","archivist","head","id","chain","chainIdentification","create","Promise","resolve","get","block","assertEx","cached","startingBlock","currentBlockHash","PayloadBuilder","hash","currentBlock","asBlockBoundWitness","_hash","isBlockBoundWitness","set","previous","Error","next","nextBlockNumber","undefined","count","results","length","push","nextBlock","asOptionalBlockBoundWitness","updateHead","emit","blocks"]}
|
|
1
|
+
{"version":3,"sources":["../../src/AccountBalance/XyoChainAccountBalanceService.ts","../../src/BaseService.ts","../../src/CreatableService.ts","../../src/BaseEthProvider.ts","../../src/BlockProducer/XyoBlockProducer.ts","../../src/BlockReward/EvmBlockRewardService.ts","../../src/BlockReward/XyoBlockRewardService.ts","../../src/ChainValidator/XyoValidator.ts","../../src/Election/XyoElectionService.ts","../../src/PendingTransactions/PendingTransactions.ts","../../src/StakeIntent/XyoStakeIntentService.ts","../../src/Staker/Evm/Evm.ts","../../src/XyoChainBlockNumberIterator.ts"],"sourcesContent":["import { assertEx } from '@xylabs/assert'\nimport {\n Address, Hash, Hex,\n} from '@xylabs/hex'\nimport {\n analyzeChain, BalanceAnalyzer, isChainSummaryBalances,\n} from '@xyo-network/chain-protocol'\nimport {\n AccountBalanceService, BaseServiceParams,\n ChainServiceCollection,\n} from '@xyo-network/xl1-model'\n\nimport { BaseService } from '../BaseService.ts'\nimport { creatableService } from '../CreatableService.ts'\n\nexport type ChainAccountBalanceServiceParams = BaseServiceParams<Partial<Pick<ChainServiceCollection, 'chainArchivist'>>>\n\n@creatableService()\nexport class XyoChainAccountBalanceService extends BaseService<ChainAccountBalanceServiceParams> implements AccountBalanceService {\n private _balances: Record<Address, Hex> = {}\n private _previousHead: Hash | null = null\n\n protected get chainArchivist() {\n return assertEx(this.params.chainArchivist, () => 'chainArchivist is required')\n }\n\n getBalance(address: Address): Hex {\n return this._balances[address] ?? '0'\n }\n\n getBalances(): Record<Address, Hex> {\n return this._balances\n }\n\n async sync(head: Hash): Promise<void> {\n const analysis = await analyzeChain(\n this.chainArchivist,\n [new BalanceAnalyzer()],\n head,\n this._previousHead,\n -1n,\n this.tracer,\n )\n this._balances = assertEx(analysis.find(isChainSummaryBalances)?.balances, () => 'Failed to sync balances')\n }\n}\n","import type { Promisable } from '@xylabs/promise'\nimport { span, spanAsync } from '@xyo-network/chain-utils'\nimport { BaseEmitter } from '@xyo-network/module-event-emitter'\nimport type { BaseAccountableServiceParams, BaseServiceParams } from '@xyo-network/xl1-model'\nimport { Mutex } from 'async-mutex'\n\nimport type { CreatableService } from './CreatableService.ts'\n\ndeclare global {\n var xyoServiceSingletons: Record<string, unknown>\n}\n\nexport class BaseService<TParams extends BaseServiceParams = BaseServiceParams> extends BaseEmitter<TParams> {\n private static singletonInitMutex = new Mutex()\n\n static get singletons() {\n return globalThis['xyoServiceSingletons'] ?? (globalThis['xyoServiceSingletons'] = {})\n }\n\n get meter() {\n return this.params.meterProvider?.getMeter(this.name)\n }\n\n get name() {\n return this.constructor.name\n }\n\n get tracer() {\n return this.params.traceProvider?.getTracer(this.name)\n }\n\n static async create<TService extends BaseService<TParams>, TParams extends BaseServiceParams = TService['params']>(\n this: CreatableService<TService>,\n params: TParams,\n ): Promise<TService> {\n const result = new this(params)\n if (result.name === 'BaseService') throw new Error('Cannot create BaseService')\n await result.createHandler()\n return result\n }\n\n static initSingleton<TService extends BaseService<TParams>, TParams extends BaseServiceParams>(params: TParams) {\n if (this.singletons[this.name]) throw new Error(`Singleton already initialized for ${this.name}`)\n return this.singletonInitMutex.runExclusive(async () => {\n return await this.create(params) as TService\n })\n }\n\n createHandler(): Promisable<void> {\n return\n }\n\n span<T>(name: string, fn: () => T): T {\n return span(`${this.name}:${name}`, fn, this.tracer)\n }\n\n async spanAsync<T>(name: string, fn: () => Promise<T>, timeout?: number): Promise<T> {\n return await spanAsync(`${this.name}:${name}`, fn, this.tracer, timeout)\n }\n}\n\nexport abstract class BaseAccountableService<\n TParams extends BaseAccountableServiceParams = BaseAccountableServiceParams,\n> extends BaseService<TParams> {}\n","import type { Promisable } from '@xylabs/promise'\nimport type { Service } from '@xyo-network/xl1-model'\n\nimport type { BaseService } from './BaseService.ts'\n\nexport interface CreatableService<T extends BaseService = BaseService> extends Service {\n new (params: T['params']): T\n create<T extends BaseService>(this: CreatableService<T>, params: T['params']): Promisable<T>\n}\n\nexport function creatableService<T extends BaseService = BaseService>() {\n return <U extends CreatableService<T>>(constructor: U) => {\n // eslint-disable-next-line @typescript-eslint/no-unused-expressions\n constructor\n }\n}\n","import type {\n Address, BlockAPI,\n BlockNumberOrTag,\n CompileResultAPI,\n EthExecutionAPI,\n FeeHistoryResultAPI,\n Filter,\n FilterResultsAPI,\n HexString, HexString8Bytes,\n HexString32Bytes,\n HexString256Bytes,\n HexStringBytes,\n SignedTransactionInfoAPI,\n SyncingStatusAPI,\n TransactionCallAPI,\n TransactionInfoAPI,\n TransactionReceiptAPI,\n TransactionWithSenderAPI,\n Uint,\n Uint256,\n} from 'web3-types'\n\nexport class BaseEthProvider implements EthExecutionAPI {\n eth_accounts(): Address[] {\n throw new Error('Method not implemented.')\n }\n\n eth_blockNumber(): Uint {\n throw new Error('Method not implemented.')\n }\n\n eth_call(_transaction: TransactionCallAPI, _blockNumber: BlockNumberOrTag): HexStringBytes {\n throw new Error('Method not implemented.')\n }\n\n eth_clearSubscriptions(_keepSyncing?: boolean): void {\n throw new Error('Method not implemented.')\n }\n\n eth_coinbase(): Address {\n throw new Error('Method not implemented.')\n }\n\n eth_compileLLL(_code: string): HexStringBytes {\n throw new Error('Method not implemented.')\n }\n\n eth_compileSerpent(_code: string): HexStringBytes {\n throw new Error('Method not implemented.')\n }\n\n eth_compileSolidity(_code: string): CompileResultAPI {\n throw new Error('Method not implemented.')\n }\n\n eth_estimateGas(_transaction: Partial<TransactionWithSenderAPI>, _blockNumber: BlockNumberOrTag): Uint {\n throw new Error('Method not implemented.')\n }\n\n eth_feeHistory(_blockCount: Uint, _newestBlock: BlockNumberOrTag, _rewardPercentiles: number[]): FeeHistoryResultAPI {\n throw new Error('Method not implemented.')\n }\n\n eth_gasPrice(): Uint {\n throw new Error('Method not implemented.')\n }\n\n eth_getBalance(_address: Address, _blockNumber: BlockNumberOrTag): Uint {\n throw new Error('Method not implemented.')\n }\n\n eth_getBlockByHash(_blockHash: HexString32Bytes, _hydrated: boolean): BlockAPI {\n throw new Error('Method not implemented.')\n }\n\n eth_getBlockByNumber(_blockNumber: BlockNumberOrTag, _hydrated: boolean): BlockAPI {\n throw new Error('Method not implemented.')\n }\n\n eth_getBlockTransactionCountByHash(_blockHash: HexString32Bytes): Uint {\n throw new Error('Method not implemented.')\n }\n\n eth_getBlockTransactionCountByNumber(_blockNumber: BlockNumberOrTag): Uint {\n throw new Error('Method not implemented.')\n }\n\n eth_getCode(_address: Address, _blockNumber: BlockNumberOrTag): HexStringBytes {\n throw new Error('Method not implemented.')\n }\n\n eth_getCompilers(): string[] {\n throw new Error('Method not implemented.')\n }\n\n eth_getFilterChanges(_filterIdentifier: Uint): FilterResultsAPI {\n throw new Error('Method not implemented.')\n }\n\n eth_getFilterLogs(_filterIdentifier: Uint): FilterResultsAPI {\n throw new Error('Method not implemented.')\n }\n\n eth_getLogs(_filter: Filter): FilterResultsAPI {\n throw new Error('Method not implemented.')\n }\n\n eth_getStorageAt(_address: Address, _storageSlot: Uint256, _blockNumber: BlockNumberOrTag): HexStringBytes {\n throw new Error('Method not implemented.')\n }\n\n eth_getTransactionByBlockHashAndIndex(_blockHash: HexString32Bytes, _transactionIndex: Uint): TransactionInfoAPI | undefined {\n throw new Error('Method not implemented.')\n }\n\n eth_getTransactionByBlockNumberAndIndex(_blockNumber: BlockNumberOrTag, _transactionIndex: Uint): TransactionInfoAPI | undefined {\n throw new Error('Method not implemented.')\n }\n\n eth_getTransactionByHash(_transactionHash: HexString32Bytes): TransactionInfoAPI | undefined {\n throw new Error('Method not implemented.')\n }\n\n eth_getTransactionCount(_address: Address, _blockNumber: BlockNumberOrTag): Uint {\n throw new Error('Method not implemented.')\n }\n\n eth_getTransactionReceipt(_transactionHash: HexString32Bytes): TransactionReceiptAPI | undefined {\n throw new Error('Method not implemented.')\n }\n\n eth_getUncleByBlockHashAndIndex(_blockHash: HexString32Bytes, _uncleIndex: Uint): BlockAPI {\n throw new Error('Method not implemented.')\n }\n\n eth_getUncleByBlockNumberAndIndex(_blockNumber: BlockNumberOrTag, _uncleIndex: Uint): BlockAPI {\n throw new Error('Method not implemented.')\n }\n\n eth_getUncleCountByBlockHash(_blockHash: HexString32Bytes): Uint {\n throw new Error('Method not implemented.')\n }\n\n eth_getUncleCountByBlockNumber(_blockNumber: BlockNumberOrTag): Uint {\n throw new Error('Method not implemented.')\n }\n\n eth_getWork(): [HexString32Bytes, HexString32Bytes, HexString32Bytes] {\n throw new Error('Method not implemented.')\n }\n\n eth_hashrate(): Uint {\n throw new Error('Method not implemented.')\n }\n\n eth_maxPriorityFeePerGas(): Uint {\n throw new Error('Method not implemented.')\n }\n\n eth_mining(): boolean {\n throw new Error('Method not implemented.')\n }\n\n eth_newBlockFilter(): Uint {\n throw new Error('Method not implemented.')\n }\n\n eth_newFilter(_filter: Filter): Uint {\n throw new Error('Method not implemented.')\n }\n\n eth_newPendingTransactionFilter(): Uint {\n throw new Error('Method not implemented.')\n }\n\n eth_protocolVersion(): string {\n throw new Error('Method not implemented.')\n }\n\n eth_sendRawTransaction(_transaction: HexStringBytes): HexString32Bytes {\n throw new Error('Method not implemented.')\n }\n\n eth_sendTransaction(_transaction: TransactionWithSenderAPI | Partial<TransactionWithSenderAPI>): HexString32Bytes {\n throw new Error('Method not implemented.')\n }\n\n eth_sign(_address: Address, _message: HexStringBytes): HexString256Bytes {\n throw new Error('Method not implemented.')\n }\n\n eth_signTransaction(_transaction: TransactionWithSenderAPI | Partial<TransactionWithSenderAPI>): HexStringBytes | SignedTransactionInfoAPI {\n throw new Error('Method not implemented.')\n }\n\n eth_submitHashrate(_hashRate: HexString32Bytes, _id: HexString32Bytes): boolean {\n throw new Error('Method not implemented.')\n }\n\n eth_submitWork(_nonce: HexString8Bytes, _hash: HexString32Bytes, _digest: HexString32Bytes): boolean {\n throw new Error('Method not implemented.')\n }\n\n eth_subscribe(..._params: ['newHeads'] | ['newPendingTransactions'] | ['syncing'] | ['logs', { address?: HexString; topics?: HexString[] }]): HexString {\n throw new Error('Method not implemented.')\n }\n\n eth_syncing(): SyncingStatusAPI {\n throw new Error('Method not implemented.')\n }\n\n eth_uninstallFilter(_filterIdentifier: Uint): boolean {\n throw new Error('Method not implemented.')\n }\n\n eth_unsubscribe(_subscriptionId: HexString): HexString {\n throw new Error('Method not implemented.')\n }\n}\n","import { assertEx } from '@xylabs/assert'\nimport { Address, toHex } from '@xylabs/hex'\nimport {\n BlockRewardDiviner, FixedPercentageBlockRewardDiviner, FixedPercentageBlockRewardDivinerConfigSchema,\n} from '@xyo-network/chain-modules'\nimport {\n AllowedBlockPayload,\n buildBlock,\n} from '@xyo-network/chain-protocol'\nimport { PayloadBuilder } from '@xyo-network/payload-builder'\nimport { WithStorageMeta } from '@xyo-network/payload-model'\nimport {\n asBlockBoundWitness,\n BlockBoundWitness, BlockNumber, BlockNumberSchema, BlockProducer, ChainStakeIntent, ChainStakeIntentSchema, HydratedBlock,\n StakeIntentService,\n Transfer,\n XyoBlockProducerParams,\n} from '@xyo-network/xl1-model'\n\nimport { BaseService } from '../BaseService.ts'\nimport { creatableService } from '../CreatableService.ts'\n\n/**\n * The default block size for a block\n */\nexport const DEFAULT_BLOCK_SIZE = 10\n\n// /**\n// * The amount of time for which a producer will restake their intent\n// */\nexport const XYO_PRODUCER_RESTAKE_DURATION = 10_000\n\n/**\n * The number of blocks within which a producer will redeclare\n * their intent to produce blocks\n */\nexport const XYO_PRODUCER_RESTAKE_WINDOW = 500n\n\n// TODO: Pull getPendingTransactions into service\n\n@creatableService()\nexport class XyoBlockProducer extends BaseService<XyoBlockProducerParams> implements BlockProducer {\n protected _blockRewardDiviner: BlockRewardDiviner | undefined\n\n static get DefaultBlockSize(): number {\n return DEFAULT_BLOCK_SIZE\n }\n\n get address() {\n return this.account.address\n }\n\n protected get account() {\n return assertEx(this.params.account, () => 'account is required')\n }\n\n protected get chainFinalizedArchivist() {\n return assertEx(this.params.chainFinalizedArchivist, () => 'chainFinalizedArchivist is required')\n }\n\n protected get chainInfo() {\n return assertEx(this.params.chainInformation, () => 'chainInfo is required')\n }\n\n protected get electionService() {\n return assertEx(this.params.electionService, () => 'electionService is required')\n }\n\n protected get pendingTransactions() {\n return assertEx(this.params.pendingTransactions, () => 'pendingTransactions is required')\n }\n\n protected get pendingTransactionsService() {\n return assertEx(this.params.pendingTransactionsService, () => 'Missing pendingTransactionsService')\n }\n\n protected get rewardAddress(): Address {\n return assertEx(this.params.rewardAddress, () => 'No reward address provided')\n }\n\n protected get rewardService() {\n return assertEx(this.params.rewardService, () => 'rewardService is required')\n }\n\n protected get stakeIntentService(): StakeIntentService {\n return assertEx(this.params.stakeIntentService, () => 'No StakeIntentService provided')\n }\n\n protected get validateHydratedBlockState() {\n return assertEx(this.params.validateHydratedBlockState, () => 'validateHydratedBlockState is required')\n }\n\n async next(head: WithStorageMeta<BlockBoundWitness>): Promise<HydratedBlock | undefined> {\n // If the block is for another chain, ignore\n if (head.chain !== this.chainInfo.id) return\n const leaders = await this.electionService.getCreatorCommitteeForNextBlock(head)\n // TODO: Should we propose block if creator committee is empty?\n // TODO: Handle the case where we're not the 1st leader but they're not responding\n // at a higher level than here as that's a network issue\n if (leaders?.[0] !== this.address) return\n return this.proposeNextValidBlock(head)\n }\n\n protected async getBlockRewardTransfer(block: number): Promise<Transfer | undefined> {\n if (!this._blockRewardDiviner) {\n // TODO: Adjust to allow for genesis block reward vs. normal block reward\n this._blockRewardDiviner = await FixedPercentageBlockRewardDiviner.create({\n account: 'random',\n blockRewardService: this.rewardService,\n config: {\n rewardAddress: this.rewardAddress,\n rewardPercentageRatio: 0,\n schema: FixedPercentageBlockRewardDivinerConfigSchema,\n },\n })\n }\n const blockHex = assertEx(toHex(block), () => 'Failed to convert block to hex')\n const blockId = new PayloadBuilder<BlockNumber>({ schema: BlockNumberSchema }).fields({ block: blockHex }).build()\n const rewards = await this._blockRewardDiviner.divine([blockId])\n const [reward] = rewards\n return reward\n }\n\n /**\n * Handles the producer redeclaration logic\n * @param head The current head block\n * @returns\n */\n protected async getProducerRedeclaration(head: WithStorageMeta<BlockBoundWitness>): Promise<ChainStakeIntent | undefined> {\n const redeclareIntent = process.env.XYO_PRODUCER_REDECLARE_INTENT\n if (!redeclareIntent) return\n // Decide if we need to redeclare\n const ranges = await this.stakeIntentService.getDeclaredCandidateRanges(this.address, 'producer')\n // TODO: This doesn't handle the case where the producer had declared a range for the future\n // but we're in a range that's not the future\n // Sort in ascending order based on ending range to get range with highest ending block\n const lastRange = ranges.toSorted((a, b) => a[1] > b[1] ? 1 : -1).at(-1)\n if (!lastRange) return\n const [, currentDeclarationEnd] = lastRange\n const currentBlock = head.block\n const timeToProducerExpiration = currentDeclarationEnd - currentBlock\n if (timeToProducerExpiration > XYO_PRODUCER_RESTAKE_WINDOW) return\n // Create redeclaration\n const intent = new PayloadBuilder<ChainStakeIntent>({ schema: ChainStakeIntentSchema }).fields({\n from: this.address,\n intent: 'producer',\n nbf: currentBlock,\n exp: currentBlock + XYO_PRODUCER_RESTAKE_DURATION,\n }).build()\n return intent\n }\n\n protected async proposeNextValidBlock(head: WithStorageMeta<BlockBoundWitness>): Promise<HydratedBlock | undefined> {\n return await this.spanAsync('proposeNextValidBlock', async () => {\n // Calculate the next block components\n const { block: previousBlock } = assertEx(asBlockBoundWitness(head), () => 'Invalid head block')\n const nextBlock = previousBlock + 1\n const nextBlockTransactions = await this.pendingTransactionsService.getPendingTransactions(head._hash, XyoBlockProducer.DefaultBlockSize)\n\n const blockPayloads: AllowedBlockPayload[] = []\n\n // Calculate the optional producer redeclaration and add it if necessary\n const producerRedeclarationPayload = await this.getProducerRedeclaration(head)\n if (producerRedeclarationPayload) blockPayloads.push(producerRedeclarationPayload)\n\n // If there are no transactions and no payloads, we don't need to create a block\n if (blockPayloads.length === 0 && nextBlockTransactions.length === 0) return\n\n // Calculate the optional block reward transfer and add if necessary\n const rewardTransferPayload = await this.getBlockRewardTransfer(nextBlock)\n if (rewardTransferPayload) blockPayloads.push(rewardTransferPayload)\n\n // Build the block\n const block = await buildBlock(head, nextBlockTransactions, blockPayloads, [this.account])\n console.log('buildBlock', block)\n const errors = await this.validateHydratedBlockState(block, this.chainInfo.id, this.chainFinalizedArchivist)\n if (errors.length > 0) {\n this.logger?.error('Validation of produced block failed', errors)\n } else {\n return block\n }\n })\n }\n}\n","import { assertEx } from '@xylabs/assert'\nimport { XyoChainRewards__factory as XyoChainRewardsFactory } from '@xyo-network/typechain'\nimport {\n BaseAccountableServiceParams, BlockRewardService, ChainService,\n toEthAddress,\n} from '@xyo-network/xl1-model'\nimport { Provider } from 'ethers/providers'\n\nimport { BaseService } from '../BaseService.ts'\nimport { creatableService } from '../CreatableService.ts'\n\nexport interface EvmBlockRewardServiceParams extends BaseAccountableServiceParams {\n chainService?: ChainService\n provider?: Provider\n}\n\n@creatableService<EvmBlockRewardService>()\nexport class EvmBlockRewardService extends BaseService<EvmBlockRewardServiceParams> implements BlockRewardService {\n protected _contractAddress: string | undefined\n\n protected get chainService() {\n return assertEx(this.params.chainService, () => 'chainService is required')\n }\n\n protected get contractAddress() {\n return assertEx(this._contractAddress, () => 'contractAddress is required')\n }\n\n protected get provider() {\n return assertEx(this.params.provider, () => 'provider is required')\n }\n\n override async createHandler() {\n await super.createHandler()\n this._contractAddress = await this.chainService.rewardsContract()\n }\n\n async getRewardForBlock(blockNumber: bigint): Promise<bigint> {\n const contract = XyoChainRewardsFactory.connect(toEthAddress(this.contractAddress), this.provider)\n return await contract.calcBlockReward(blockNumber)\n }\n}\n","import { assertEx } from '@xylabs/assert'\nimport { toFixedPoint } from '@xylabs/decimal-precision'\nimport { Promisable } from '@xylabs/promise'\nimport { rewardFromBlockNumber } from '@xyo-network/chain-protocol'\nimport { BaseServiceParams, BlockRewardService } from '@xyo-network/xl1-model'\n\nimport { BaseService } from '../BaseService.ts'\nimport { creatableService } from '../CreatableService.ts'\n\nexport interface XyoBlockRewardServiceParams extends BaseServiceParams {\n creatorReward?: bigint\n initialStepReward?: bigint\n minRewardPerBlock?: bigint\n stepFactorDenominator?: bigint\n stepFactorNumerator?: bigint\n stepSize?: bigint\n}\n\n@creatableService()\nexport class XyoBlockRewardService extends BaseService<XyoBlockRewardServiceParams> implements BlockRewardService {\n protected readonly rewardFromBlockNumber = rewardFromBlockNumber(18)\n\n constructor(\n {\n creatorReward = toFixedPoint(20_000_000_000n),\n initialStepReward = toFixedPoint(3000n),\n minRewardPerBlock = toFixedPoint(30n),\n stepFactorDenominator = 100n,\n stepFactorNumerator = 90n,\n stepSize = 1_000_000n,\n }: Partial<XyoBlockRewardServiceParams> = {},\n ) {\n super({\n initialStepReward, minRewardPerBlock, stepSize, stepFactorDenominator, stepFactorNumerator, creatorReward,\n })\n }\n\n get creatorReward() {\n return assertEx(this.params.creatorReward, () => 'creatorReward is required')\n }\n\n get initialReward() {\n return assertEx(this.params.initialStepReward, () => 'initialStepReward is required')\n }\n\n get minRewardPerBlock() {\n return assertEx(this.params.minRewardPerBlock, () => 'minRewardPerBlock is required')\n }\n\n get stepFactorDenominator() {\n return assertEx(this.params.stepFactorDenominator, () => 'stepFactorDenominator is required')\n }\n\n get stepFactorNumerator() {\n return assertEx(this.params.stepFactorNumerator, () => 'stepFactorNumerator is required')\n }\n\n get stepSize() {\n return assertEx(this.params.stepSize, () => 'stepSize is required')\n }\n\n getRewardForBlock(blockNumber: bigint): Promisable<bigint> {\n return this.rewardFromBlockNumber(\n blockNumber,\n this.initialReward,\n this.stepSize,\n this.stepFactorNumerator,\n this.stepFactorDenominator,\n this.minRewardPerBlock,\n this.creatorReward,\n )\n }\n}\n","import { assertEx } from '@xylabs/assert'\nimport { Promisable } from '@xylabs/promise'\nimport { PayloadBuilder } from '@xyo-network/payload-builder'\nimport {\n BlockBoundWitness,\n HydratedTransaction,\n HydratedTransactionWithStorageMeta,\n XyoValidatorParams,\n} from '@xyo-network/xl1-model'\n\nimport { BaseService } from '../BaseService.ts'\nimport { creatableService } from '../CreatableService.ts'\nimport { Validator } from './model/index.ts'\n\nconst addStorageMeta = async ([tx, payloads]: HydratedTransaction): Promise<HydratedTransactionWithStorageMeta> => {\n return [await PayloadBuilder.addStorageMeta(tx), await PayloadBuilder.addStorageMeta(payloads)]\n}\n\n@creatableService()\nexport class XyoValidator<TParams extends XyoValidatorParams = XyoValidatorParams> extends BaseService<TParams> implements Validator {\n get address() {\n return this.account.address\n }\n\n protected get account() {\n return assertEx(this.params.account, () => 'account is required')\n }\n\n protected get chainFinalizedArchivist() {\n return assertEx(this.params.chainFinalizedArchivist, () => 'chainFinalizedArchivist is required')\n }\n\n protected get chainInfo() {\n return assertEx(this.params.chainInformation, () => 'chainInfo is required')\n }\n\n protected get electionService() {\n return assertEx(this.params.electionService, () => 'electionService is required')\n }\n\n protected get pendingTransactions() {\n return assertEx(this.params.pendingTransactions, () => 'pendingTransactions is required')\n }\n\n protected get rewardService() {\n return assertEx(this.params.rewardService, () => 'rewardService is required')\n }\n\n validatePendingBlock(_block: BlockBoundWitness): Promisable<Error[]> {\n return [] // await validateBlockProtocol(block, this.chainInfo)\n }\n\n // TODO: Move to validator and inherit this class from validator\n async validatePendingTransaction(hydratedTransaction: HydratedTransaction): Promise<boolean> {\n const [tx] = await addStorageMeta(hydratedTransaction)\n // Ensure not confirmed already (replay attack)\n if ((await this.chainFinalizedArchivist.get([tx._hash])).length > 0) return false\n // TODO: Ensure transaction is valid (double spend, has voucher, has required stake, etc.)\n // TODO: Ensure validator stake is valid\n return await Promise.resolve(true)\n }\n}\n","import { assertEx } from '@xylabs/assert'\nimport { Address, Hash } from '@xylabs/hex'\nimport { hexToLast4BytesInt, shuffleWithSeed } from '@xyo-network/chain-utils'\nimport { PayloadBuilder } from '@xyo-network/payload-builder'\nimport type { XyoElectionServicesParams } from '@xyo-network/xl1-model'\nimport { BlockBoundWitness, ElectionService } from '@xyo-network/xl1-model'\n\nimport { BaseService } from '../BaseService.ts'\nimport { creatableService } from '../CreatableService.ts'\n\n@creatableService()\nexport class XyoElectionService extends BaseService<XyoElectionServicesParams> implements ElectionService {\n constructor(params: XyoElectionServicesParams) {\n super(params)\n }\n\n get chainIterator() {\n return assertEx(this.params.chainIterator, () => 'No chain iterator')\n }\n\n get chainStakeViewer() {\n return assertEx(this.params.chainStakeViewer, () => 'No chain stake viewer')\n }\n\n get stakeIntentService() {\n return assertEx(this.params.stakeIntentService, () => 'No staked intent service')\n }\n\n async getCreatorCommitteeForNextBlock(current: BlockBoundWitness): Promise<Address[]> {\n return await this.spanAsync('getCreatorCommitteeForNextBlock', async () => {\n const nextBlock = current.block + 1\n const candidates = await this.stakeIntentService.getDeclaredCandidatesForBlock(nextBlock, 'producer')\n const previousBlockHash = await PayloadBuilder.hash(current)\n return this.generateCreatorCommittee(candidates, previousBlockHash)\n })\n }\n\n protected generateCreatorCommittee(candidates: Address[], previousBlockHash: Hash, maxSize = 3): Address[] {\n const creators = new Set<Address>(candidates)\n const seed = hexToLast4BytesInt(previousBlockHash)\n const creatorArray = shuffleWithSeed(creators, seed)\n return creatorArray.slice(0, maxSize)\n }\n}\n","import { filterAs } from '@xylabs/array'\nimport { assertEx } from '@xylabs/assert'\nimport { exists } from '@xylabs/exists'\nimport { Hash } from '@xylabs/hex'\nimport { MemoryArchivist } from '@xyo-network/archivist-memory'\nimport { ArchivistInstance } from '@xyo-network/archivist-model'\nimport { hydrateBlock, hydrateTransaction } from '@xyo-network/chain-protocol'\nimport { Sequence, WithStorageMeta } from '@xyo-network/payload-model'\nimport {\n asOptionalTransactionBoundWitnessWithStorageMeta,\n BaseServiceParams,\n EventingChainBlockNumberIterator,\n HydratedTransaction,\n PendingTransactionsService,\n TransactionBoundWitness,\n} from '@xyo-network/xl1-model'\nimport { Mutex } from 'async-mutex'\n\nimport { BaseService } from '../BaseService.ts'\nimport { creatableService } from '../CreatableService.ts'\n\nexport interface XyoPendingTransactionsServiceParams extends BaseServiceParams {\n chainArchivist?: ArchivistInstance\n chainIterator?: EventingChainBlockNumberIterator\n pendingTransactionsArchivist?: ArchivistInstance\n}\n\n@creatableService()\nexport class XyoPendingTransactionsService extends BaseService<XyoPendingTransactionsServiceParams> implements PendingTransactionsService {\n private static readonly MutexPriority = {\n /**\n * Priority for inserting new transactions\n */\n InsertNewTransactions: 5,\n /**\n * Priority for reading pending transactions\n */\n ReadTransactions: 3,\n /**\n * Priority for removing finalized transactions\n */\n RemoveFinalizedTransactions: 1,\n }\n\n // used to remember the last block's transactions that was removed due to it being in the chain\n private _cleanedToBlock: Hash | undefined\n\n // a local archivist that has only the transactions in it (used as queue)\n private _pendingTransactionsLocalArchivist: MemoryArchivist | undefined\n private _pendingTransactionsLocalArchivistCursor: Sequence | undefined\n\n private _updatePendingTransactionsLocalArchivistMutex = new Mutex()\n\n private get chainArchivist() {\n return assertEx(this.params.chainArchivist, () => 'No completed blocks with data archivist')\n }\n\n private get chainIterator() {\n return assertEx(this.params.chainIterator, () => 'No chainIterator')\n }\n\n private get pendingTransactionsArchivist() {\n return assertEx(this.params.pendingTransactionsArchivist, () => 'No pending transactions archivist')\n }\n\n private get pendingTransactionsLocalArchivist() {\n return assertEx(this._pendingTransactionsLocalArchivist, () => 'No pending transactions curate archivist')\n }\n\n override async createHandler() {\n await super.createHandler()\n this._pendingTransactionsLocalArchivist = await MemoryArchivist.create({ account: 'random' })\n // await this.updatePendingTransactionsLocalArchivist(1_000_000)\n // On new head, remove already included transactions\n // this.chainIterator.on('headUpdated', async () => {\n // const head = await this.chainIterator.head()\n // const headHash = await PayloadBuilder.hash(head)\n // await this.removeAlreadyIncludedTransactions(headHash)\n // })\n // On new pending transactions, insert them into the curated archivist\n this.pendingTransactionsArchivist.on('inserted', async ({ payloads }) => {\n await this._updatePendingTransactionsLocalArchivistMutex.runExclusive(async () => {\n // Check that the transactions are not already in the chain archivist\n const hashes = filterAs(payloads, asOptionalTransactionBoundWitnessWithStorageMeta).map(payload => payload._hash)\n const existingChainTransactions = await this.chainArchivist.get(hashes)\n const existingChainTransactionHashes = new Set(existingChainTransactions.map(item => item._hash))\n const nonExistingTransactions = payloads.filter(item => !existingChainTransactionHashes.has(item._hash))\n await this.pendingTransactionsLocalArchivist.insert(nonExistingTransactions)\n }, XyoPendingTransactionsService.MutexPriority.InsertNewTransactions)\n })\n // On new finalized blocks, remove the transactions from the curated archivist\n this.chainArchivist.on('inserted', async ({ payloads }) => {\n await this._updatePendingTransactionsLocalArchivistMutex.runExclusive(async () => {\n await this.pendingTransactionsLocalArchivist.delete(payloads.map(payload => payload._hash))\n }, XyoPendingTransactionsService.MutexPriority.RemoveFinalizedTransactions)\n })\n }\n\n async getPendingTransactions(head: Hash, limit: number, timeout = 1_000_000): Promise<HydratedTransaction[]> {\n return await this.spanAsync('getPendingTransactions', async () => {\n // await this.updatePendingTransactionsLocalArchivist()\n // await this.removeAlreadyIncludedTransactions(head)\n return await this._updatePendingTransactionsLocalArchivistMutex.runExclusive(async () => {\n const foundPendingTransactions: WithStorageMeta<TransactionBoundWitness>[] = []\n let cursor: Sequence | undefined\n while (foundPendingTransactions.length < limit) {\n const payloads = await this.pendingTransactionsLocalArchivist.next({\n limit: 100, order: 'asc', cursor,\n })\n if (payloads.length === 0) break\n cursor = payloads.at(-1)?._sequence\n const transactions = payloads.map(payload => asOptionalTransactionBoundWitnessWithStorageMeta(payload)).filter(exists)\n foundPendingTransactions.push(...transactions)\n }\n const hydratedTransactions = await Promise.all(foundPendingTransactions.map(async (tx) => {\n return assertEx(await hydrateTransaction(this.pendingTransactionsLocalArchivist, tx._hash), () => `Failed to hydrate transaction [${tx._hash}]`)\n }))\n return hydratedTransactions\n }, XyoPendingTransactionsService.MutexPriority.ReadTransactions)\n }, timeout)\n }\n\n private async removeAlreadyIncludedTransactions(head?: Hash, timeout = 1_000_000) {\n return await this.spanAsync('removeAlreadyIncludedTransactions', async () => {\n let headPtr: Hash | null = head ?? null\n while (headPtr !== null) {\n const [block, payloads] = assertEx(await hydrateBlock(this.chainArchivist, headPtr), () => `Failed to find head [${head}]`)\n if (block._hash === this._cleanedToBlock) break\n await this.pendingTransactionsLocalArchivist.delete(\n payloads.map(payload => asOptionalTransactionBoundWitnessWithStorageMeta(payload)?._hash).filter(exists),\n )\n this._cleanedToBlock = block._hash\n headPtr = block?.previous\n }\n }, timeout)\n }\n\n private async updatePendingTransactionsLocalArchivist(timeout = 1_000_000) {\n return await this.spanAsync('updatePendingTransactionsLocalArchivist', async () => {\n if (this._updatePendingTransactionsLocalArchivistMutex.isLocked()) {\n console.warn('updatePendingTransactionsLocalArchivist busy - skipping')\n return\n }\n return await this._updatePendingTransactionsLocalArchivistMutex.runExclusive(async () => {\n // const localWithDataArchivist = this.pendingTransactionsArchivist\n // sync from remote\n // await this.spanAsync('sync from remote [pending]', async () => {\n // this._pendingTransactionsLocalAllDataArchivistCursor = await synchronizeArchivists(\n // this.externalPendingTransactionsWithDataArchivist,\n // localWithDataArchivist,\n // this._pendingTransactionsLocalAllDataArchivistCursor,\n // )\n // }, timeout / 2)\n // // extract transactions only [from localWithDataArchivist]\n // await this.spanAsync('sync from local [pending]', async () => {\n // this._pendingTransactionsLocalArchivistCursor = await synchronizeArchivists(\n // localWithDataArchivist,\n // this.pendingTransactionsLocalArchivist,\n // this._pendingTransactionsLocalArchivistCursor,\n // isTransactionBoundWitness,\n // isTransactionBoundWitness,\n // )\n // }, timeout / 10)\n await Promise.resolve()\n })\n }, timeout)\n }\n}\n","import { filterAs } from '@xylabs/array'\nimport { assertEx } from '@xylabs/assert'\nimport {\n Address, asAddress, Hash,\n} from '@xylabs/hex'\nimport { ArchivistNextOptions } from '@xyo-network/archivist-model'\nimport {\n analyzeChain, ChainStakeIntentAnalyzer,\n isChainSummaryStakeIntent,\n} from '@xyo-network/chain-protocol'\nimport {\n DEFAULT_FIND_FIRST_MATCHING_NEXT_OPTIONS,\n findFirstMatching, IntervalMap,\n SerializedIntervalMap,\n} from '@xyo-network/chain-utils'\nimport { PayloadBuilder } from '@xyo-network/payload-builder'\nimport { Payload, WithStorageMeta } from '@xyo-network/payload-model'\nimport type { Intent, XyoStakeIntentServiceParams } from '@xyo-network/xl1-model'\nimport {\n asOptionalBlockBoundWitness, asOptionalBlockBoundWitnessWithStorageMeta,\n asOptionalChainIndexingServiceStateWithStorageMeta, asOptionalChainStakeIntent, ChainIndexingServiceState, ChainIndexingServiceStateSchema, ChainStakeViewer,\n isChainIndexingServiceState,\n StakeIntentService,\n} from '@xyo-network/xl1-model'\nimport { Mutex } from 'async-mutex'\nimport { LRUCache } from 'lru-cache'\n\nimport { BaseService } from '../BaseService.ts'\nimport { creatableService } from '../CreatableService.ts'\n\n/**\n * The number of blocks to periodically persist state\n */\nconst STATE_PERSISTENCE_INTERVAL = 60n\n\nconst ACTIVE_STAKE_TTL = 1000 * 60 * 60 * 2 // 2 hours in milliseconds\nconst NO_ACTIVE_STAKE_TTL = 1000 * 2 // 2 seconds in milliseconds\nconst STAKE_CACHE_MAX_ENTRIES = 10_000\n\n@creatableService()\nexport class XyoStakeIntentService extends BaseService<XyoStakeIntentServiceParams> implements StakeIntentService {\n // TODO: Use hash instead of block number to handle chain reorgs\n protected _lastIndexedBlockHash: Hash | undefined = undefined\n // TODO: Interval tree per declaration (bank, validator, etc.)\n // NOTE: Ideally move to DataIntervalTree to handle declared\n // ranges as it enables range queries in O(min(n, k * log n)) time,\n // where k is the number of intervals in the output list time\n // Currently using set based because it's simpler, equivalent\n // in performance for small sets, and (most importantly) easily\n // persisted so we can recover state on restart.\n protected _producers: IntervalMap<Address> = new IntervalMap()\n protected _stakeCache = new LRUCache<Address, bigint>({ max: STAKE_CACHE_MAX_ENTRIES })\n protected _updateMutex = new Mutex()\n\n constructor(params: XyoStakeIntentServiceParams) {\n super(params)\n this.chainIterator.on('headUpdated', async () => {\n await this.updateIndex()\n })\n }\n\n protected get chainArchivist() {\n return assertEx(this.params.chainArchivist, () => 'chainArchivist not set')\n }\n\n protected get chainIterator() {\n return assertEx(this.params.chainIterator, () => 'chainIterator not set')\n }\n\n protected get chainStakeViewer() {\n return assertEx(this.params.chainStakeViewer, () => 'chainStakeViewer not set')\n }\n\n protected get stakeIntentStateArchivist() {\n return assertEx(this.params.stakeIntentStateArchivist, () => 'stakeIntentStateArchivist not set')\n }\n\n override async createHandler(): Promise<void> {\n const head = await this.chainIterator.head()\n const headHash = await PayloadBuilder.hash(head)\n if (head?.block === undefined) return\n await this.recoverState(headHash)\n await this.updateIndex(true)\n }\n\n async getDeclaredCandidateRanges(address: Address, intent: Intent): Promise<Readonly<Readonly<[number, number]>[]>> {\n await Promise.resolve()\n assertEx(intent === 'producer', () => `Error: Support not yet added for intent ${intent}`)\n const results = this._producers.get(address)\n return results ?? []\n }\n\n async getDeclaredCandidatesForBlock(block: number, intent: Intent): Promise<Address[]> {\n return await this.spanAsync('getDeclaredCandidatesForBlock', async () => {\n assertEx(intent === 'producer', () => `Error: Support not yet added for intent ${intent}`)\n const results = this._producers.findAllContaining(block)\n const candidates = [...results]\n const validCandidates = await this.filterToValidStake(candidates, this.chainStakeViewer)\n return validCandidates\n })\n }\n\n async isStakedForBlock(block: number, intent: Intent, address: Address): Promise<boolean> {\n const candidates = await this.getDeclaredCandidatesForBlock(block, intent)\n return candidates.includes(address)\n }\n\n private async filterToValidStake(\n candidates: Address[],\n chainStakeViewer: ChainStakeViewer,\n requiredMinimumStake: bigint = 1n,\n ): Promise<Address[]> {\n type CandidateStake = { candidate: Address; stake: bigint }\n\n // Find the stake for each candidate\n const candidatesWithStake: CandidateStake[] = await Promise.all(\n candidates.map(async (candidate) => {\n // Check if the stake is already cached\n const stake = this._stakeCache.get(candidate)\n if (stake === undefined) {\n // Fetch from chainStakeViewer if not cached\n const activeStake = await chainStakeViewer.activeByAddressStaked(`${candidate}`)\n if (activeStake > 0n) {\n // Store result in cache\n this._stakeCache.set(candidate, activeStake, { ttl: ACTIVE_STAKE_TTL })\n } else {\n this._stakeCache.set(candidate, activeStake, { ttl: NO_ACTIVE_STAKE_TTL })\n }\n return { candidate, stake: activeStake }\n } else {\n return { candidate, stake }\n }\n }),\n )\n\n // Filter out candidates whose stake is greater than or equal to the required minimum\n return candidatesWithStake\n .filter(({ stake }) => stake >= requiredMinimumStake)\n .map(({ candidate }) => candidate)\n }\n\n private async persistState(current: Hash): Promise<void> {\n const state = this._producers.serialize()\n const payload = new PayloadBuilder<ChainIndexingServiceState<SerializedIntervalMap>>({ schema: ChainIndexingServiceStateSchema })\n .fields({ endBlockHash: current, state })\n .build()\n await this.stakeIntentStateArchivist.insert([payload])\n }\n\n private async recoverState(current: Hash): Promise<void> {\n const currentBlock = assertEx(asOptionalBlockBoundWitness((await this.chainArchivist.get([current]))?.[0]), () => `Block ${current} not found`)\n const currentBlockNum = currentBlock.block\n // Find last state before current head (in case of rollback, we indexed past it on an uncle chain, etc.)\n const opts: ArchivistNextOptions = { ...DEFAULT_FIND_FIRST_MATCHING_NEXT_OPTIONS }\n while (true) {\n const predicate = (p: WithStorageMeta<Payload>) => {\n const state = asOptionalChainIndexingServiceStateWithStorageMeta(p)\n return state ? true : false\n }\n const state = await findFirstMatching(this.stakeIntentStateArchivist, predicate, opts)\n if (isChainIndexingServiceState<SerializedIntervalMap>(state)) {\n const indexed = (await this.chainArchivist.get([state.endBlockHash]))?.[0]\n const indexedBlock = asOptionalBlockBoundWitnessWithStorageMeta(indexed)\n if (indexedBlock) {\n const indexedBlockNum = indexedBlock.block\n if (indexedBlockNum <= currentBlockNum) {\n const data = state.state as SerializedIntervalMap\n this._producers = new IntervalMap(data)\n this._lastIndexedBlockHash = indexedBlock._hash\n break\n }\n }\n } else {\n // No state found, start from genesis\n break\n }\n opts.open = true\n }\n }\n\n private async updateIndex(displayProgress = false): Promise<void> {\n if (this._updateMutex.isLocked()) {\n return\n }\n await this._updateMutex.runExclusive(async () => {\n return await this.spanAsync('updateIndex', async () => {\n const currentHead = await this.chainIterator.head()\n const currentHeadHash = await PayloadBuilder.hash(currentHead)\n const result = await analyzeChain(this.chainArchivist, [new ChainStakeIntentAnalyzer('producer')], currentHeadHash, this._lastIndexedBlockHash)\n const signedDeclarations = filterAs(result.find(isChainSummaryStakeIntent)?.intents ?? [], asOptionalChainStakeIntent)\n if (currentHead.block === undefined) return\n const currentHeadBlockNum = currentHead.block\n if (displayProgress) this.logger?.info(`Updating index through 0x${currentHeadBlockNum}`)\n for (const signedDeclaration of signedDeclarations) {\n const { exp, nbf } = signedDeclaration\n const start = nbf\n const stop = exp\n const address = asAddress(signedDeclaration?.from)\n if (start !== undefined && stop !== undefined && address !== undefined) {\n this._producers.insert(address, start, stop)\n }\n }\n /*\n if (index % STATE_PERSISTENCE_INTERVAL === 0n) {\n if (displayProgress) this.logger?.info(`Persisting state at block ${index}`)\n await this.persistState(await PayloadBuilder.hash(block))\n }\n */\n this._lastIndexedBlockHash = currentHeadHash\n })\n })\n }\n}\n","import { Base } from '@xylabs/base'\nimport type { Address } from '@xylabs/hex'\nimport { toAddress } from '@xylabs/hex'\nimport type { Promisable } from '@xylabs/promise'\nimport type { StakedXyoChain } from '@xyo-network/typechain'\nimport { StakedXyoChain__factory as StakedXyoChainFactory } from '@xyo-network/typechain'\nimport type { BaseServiceParams, ChainService } from '@xyo-network/xl1-model'\nimport { getAddress } from 'ethers/address'\nimport type { ContractRunner } from 'ethers/providers'\n\nexport interface EvmChainServiceParams extends BaseServiceParams {\n contract: StakedXyoChain\n id: Address\n runner: ContractRunner\n}\n\n/**\n * A class that represents a chain stake as backed by an EVM smart contract\n */\nexport class EvmChainService extends Base<EvmChainServiceParams> implements ChainService {\n private _contract: StakedXyoChain\n\n protected constructor(params: EvmChainServiceParams) {\n super(params)\n this._contract = params.contract\n }\n\n get id(): Address {\n return this.params.id\n }\n\n get runner(): ContractRunner {\n return this.params.runner\n }\n\n static create({\n id, runner, logger, traceProvider, meterProvider,\n }: Omit<EvmChainServiceParams, 'contract'>): Promisable<EvmChainService> {\n const contractAddress = getAddress(id)\n const contract: StakedXyoChain = StakedXyoChainFactory.connect(contractAddress, runner)\n return new this({\n id, contract, runner, logger, traceProvider, meterProvider,\n })\n }\n\n async active(): Promise<bigint> {\n return await this._contract.active()\n }\n\n async activeByAddressStaked(address: string): Promise<bigint> {\n return await this._contract.activeByAddressStaked(getAddress(address))\n }\n\n async activeByStaker(address: string): Promise<bigint> {\n return await this._contract.activeByStaker(getAddress(address))\n }\n\n async addStake(staked: string, amount: bigint): Promise<boolean> {\n const result = await this._contract.addStake(getAddress(staked), amount)\n await result.wait()\n return true\n }\n\n async chainId(): Promise<Address> {\n return toAddress(await this._contract.chainId())\n }\n\n async forkedAtBlockNumber(): Promise<bigint> {\n return await this._contract.forkedAtBlockNumber()\n }\n\n async forkedAtHash(): Promise<bigint> {\n return await this._contract.forkedAtHash()\n }\n\n async forkedChainId(): Promise<Address> {\n return toAddress(await this._contract.forkedChainId())\n }\n\n async minWithdrawalBlocks(): Promise<bigint> {\n return await this._contract.minWithdrawalBlocks()\n }\n\n async pending(): Promise<bigint> {\n return await this._contract.pending()\n }\n\n async pendingByStaker(staker: string): Promise<bigint> {\n return await this._contract.pendingByStaker(getAddress(staker))\n }\n\n async removeStake(slot: bigint): Promise<boolean> {\n const result = await this._contract.removeStake(slot)\n await result.wait()\n return true\n }\n\n async rewardsContract(): Promise<string> {\n return await this._contract.rewardsContract()\n }\n\n async stakingTokenAddress(): Promise<string> {\n return await this._contract.stakingTokenAddress()\n }\n\n async withdrawStake(slot: bigint): Promise<boolean> {\n const result = await this._contract.withdrawStake(slot)\n await result.wait()\n return true\n }\n\n async withdrawn(): Promise<bigint> {\n return await this._contract.withdrawn()\n }\n\n async withdrawnByStaker(staker: string): Promise<bigint> {\n return await this._contract.withdrawnByStaker(getAddress(staker))\n }\n}\n","import { assertEx } from '@xylabs/assert'\nimport type { BaseParams } from '@xylabs/base'\nimport type { ArchivistInstance } from '@xyo-network/archivist-model'\nimport { BaseEmitter } from '@xyo-network/module-event-emitter'\nimport { PayloadBuilder } from '@xyo-network/payload-builder'\nimport type {\n BlockBoundWitness, ChainIdentification,\n ChainIteratorEventData,\n EventingChainBlockNumberIterator,\n XyoChainIteratorParams,\n} from '@xyo-network/xl1-model'\nimport {\n asBlockBoundWitness, asOptionalBlockBoundWitness,\n isBlockBoundWitness,\n} from '@xyo-network/xl1-model'\nimport { LRUCache } from 'lru-cache'\n\nexport class XyoChainBlockNumberIterator extends BaseEmitter<BaseParams, ChainIteratorEventData> implements EventingChainBlockNumberIterator {\n protected _blocksByBlockNumber = new LRUCache<number, BlockBoundWitness>({ max: 10_000 })\n protected _chainArchivist: ArchivistInstance\n protected _chainInformation: ChainIdentification\n protected _head: BlockBoundWitness\n\n protected constructor(params: XyoChainIteratorParams) {\n super({})\n const { chainArchivist: archivist, head } = params\n this._chainArchivist = archivist\n this._head = head\n this._chainInformation = { id: head.chain }\n }\n\n get archivist(): ArchivistInstance { return this._chainArchivist }\n\n get chainIdentification(): ChainIdentification { return this._chainInformation }\n\n static async create(params: XyoChainIteratorParams): Promise<XyoChainBlockNumberIterator> {\n await Promise.resolve()\n return new XyoChainBlockNumberIterator(params)\n }\n\n async get(block: number): Promise<BlockBoundWitness> {\n // Bail early if the block requested is newer than the current head\n assertEx(this._head.block >= block, () => `Block requested is newer than the current head [${block}]`)\n const cached = this._blocksByBlockNumber.get(block)\n if (cached) return cached\n // Start at the current head and traverse backwards until the requested block is found\n const startingBlock = this._head\n const currentBlockHash = await PayloadBuilder.hash(startingBlock)\n let [currentBlock] = await this._chainArchivist.get([currentBlockHash])\n while (currentBlock) {\n assertEx(asBlockBoundWitness(currentBlock), () => `Expected hash to be a block bound witness [${currentBlock._hash}]`)\n if (isBlockBoundWitness(currentBlock)) {\n this._blocksByBlockNumber.set(currentBlock.block, currentBlock)\n if (currentBlock.block === block) {\n return currentBlock\n }\n const { previous } = currentBlock\n if (!previous) break\n [currentBlock] = await this._chainArchivist.get([previous])\n }\n }\n throw new Error(`Block not found: ${block}`)\n }\n\n async head(): Promise<BlockBoundWitness> {\n return await Promise.resolve(this._head)\n }\n\n async next(block: number): Promise<BlockBoundWitness | undefined> {\n const currentBlock = block\n const nextBlockNumber = currentBlock + 1\n return await this.get(nextBlockNumber)\n }\n\n // TODO: Decide on inclusive/exclusive (probably need inclusive to account for chain head)\n // and then communicate via method name and documentation\n async previous(block: number | undefined = undefined, count: number = 1): Promise<BlockBoundWitness[]> {\n const results: BlockBoundWitness[] = []\n let currentBlock: BlockBoundWitness | undefined = block ? (await this.get(block)) : this._head\n while (currentBlock && results.length < count) {\n if (isBlockBoundWitness(currentBlock)) {\n results.push(currentBlock)\n const { previous } = currentBlock\n if (!previous) break\n const nextBlock = await this._chainArchivist.get([previous])\n currentBlock = asOptionalBlockBoundWitness(nextBlock[0])\n } else {\n const hash = PayloadBuilder.hash(currentBlock)\n assertEx(asBlockBoundWitness(currentBlock), () => `Expected hash to be a block bound witness [${hash}]`)\n }\n }\n return results\n }\n\n async updateHead(head: BlockBoundWitness): Promise<void> {\n // Async to allow for re-indexing, etc.\n await Promise.resolve()\n this._head = head\n void this.emit('headUpdated', { blocks: [head] })\n }\n}\n"],"mappings":"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","names":["assertEx","analyzeChain","BalanceAnalyzer","isChainSummaryBalances","span","spanAsync","BaseEmitter","Mutex","BaseService","BaseEmitter","singletonInitMutex","Mutex","singletons","globalThis","meter","params","meterProvider","getMeter","name","constructor","tracer","traceProvider","getTracer","create","result","Error","createHandler","initSingleton","runExclusive","span","fn","spanAsync","timeout","BaseAccountableService","creatableService","constructor","XyoChainAccountBalanceService","BaseService","_balances","_previousHead","chainArchivist","assertEx","params","getBalance","address","getBalances","sync","head","analysis","analyzeChain","BalanceAnalyzer","tracer","find","isChainSummaryBalances","balances","BaseEthProvider","eth_accounts","Error","eth_blockNumber","eth_call","_transaction","_blockNumber","eth_clearSubscriptions","_keepSyncing","eth_coinbase","eth_compileLLL","_code","eth_compileSerpent","eth_compileSolidity","eth_estimateGas","eth_feeHistory","_blockCount","_newestBlock","_rewardPercentiles","eth_gasPrice","eth_getBalance","_address","eth_getBlockByHash","_blockHash","_hydrated","eth_getBlockByNumber","eth_getBlockTransactionCountByHash","eth_getBlockTransactionCountByNumber","eth_getCode","eth_getCompilers","eth_getFilterChanges","_filterIdentifier","eth_getFilterLogs","eth_getLogs","_filter","eth_getStorageAt","_storageSlot","eth_getTransactionByBlockHashAndIndex","_transactionIndex","eth_getTransactionByBlockNumberAndIndex","eth_getTransactionByHash","_transactionHash","eth_getTransactionCount","eth_getTransactionReceipt","eth_getUncleByBlockHashAndIndex","_uncleIndex","eth_getUncleByBlockNumberAndIndex","eth_getUncleCountByBlockHash","eth_getUncleCountByBlockNumber","eth_getWork","eth_hashrate","eth_maxPriorityFeePerGas","eth_mining","eth_newBlockFilter","eth_newFilter","eth_newPendingTransactionFilter","eth_protocolVersion","eth_sendRawTransaction","eth_sendTransaction","eth_sign","_message","eth_signTransaction","eth_submitHashrate","_hashRate","_id","eth_submitWork","_nonce","_hash","_digest","eth_subscribe","_params","eth_syncing","eth_uninstallFilter","eth_unsubscribe","_subscriptionId","assertEx","toHex","FixedPercentageBlockRewardDiviner","FixedPercentageBlockRewardDivinerConfigSchema","buildBlock","PayloadBuilder","asBlockBoundWitness","BlockNumberSchema","ChainStakeIntentSchema","DEFAULT_BLOCK_SIZE","XYO_PRODUCER_RESTAKE_DURATION","XYO_PRODUCER_RESTAKE_WINDOW","XyoBlockProducer","BaseService","_blockRewardDiviner","DefaultBlockSize","address","account","assertEx","params","chainFinalizedArchivist","chainInfo","chainInformation","electionService","pendingTransactions","pendingTransactionsService","rewardAddress","rewardService","stakeIntentService","validateHydratedBlockState","next","head","chain","id","leaders","getCreatorCommitteeForNextBlock","proposeNextValidBlock","getBlockRewardTransfer","block","FixedPercentageBlockRewardDiviner","create","blockRewardService","config","rewardPercentageRatio","schema","FixedPercentageBlockRewardDivinerConfigSchema","blockHex","toHex","blockId","PayloadBuilder","BlockNumberSchema","fields","build","rewards","divine","reward","getProducerRedeclaration","redeclareIntent","process","env","XYO_PRODUCER_REDECLARE_INTENT","ranges","getDeclaredCandidateRanges","lastRange","toSorted","a","b","at","currentDeclarationEnd","currentBlock","timeToProducerExpiration","intent","ChainStakeIntentSchema","from","nbf","exp","spanAsync","previousBlock","asBlockBoundWitness","nextBlock","nextBlockTransactions","getPendingTransactions","_hash","blockPayloads","producerRedeclarationPayload","push","length","rewardTransferPayload","buildBlock","console","log","errors","logger","error","assertEx","XyoChainRewards__factory","XyoChainRewardsFactory","toEthAddress","EvmBlockRewardService","BaseService","_contractAddress","chainService","assertEx","params","contractAddress","provider","createHandler","rewardsContract","getRewardForBlock","blockNumber","contract","XyoChainRewardsFactory","connect","toEthAddress","calcBlockReward","assertEx","toFixedPoint","rewardFromBlockNumber","XyoBlockRewardService","BaseService","rewardFromBlockNumber","constructor","creatorReward","toFixedPoint","initialStepReward","minRewardPerBlock","stepFactorDenominator","stepFactorNumerator","stepSize","assertEx","params","initialReward","getRewardForBlock","blockNumber","assertEx","PayloadBuilder","addStorageMeta","tx","payloads","PayloadBuilder","XyoValidator","BaseService","address","account","assertEx","params","chainFinalizedArchivist","chainInfo","chainInformation","electionService","pendingTransactions","rewardService","validatePendingBlock","_block","validatePendingTransaction","hydratedTransaction","get","_hash","length","Promise","resolve","assertEx","hexToLast4BytesInt","shuffleWithSeed","PayloadBuilder","XyoElectionService","BaseService","constructor","params","chainIterator","assertEx","chainStakeViewer","stakeIntentService","getCreatorCommitteeForNextBlock","current","spanAsync","nextBlock","block","candidates","getDeclaredCandidatesForBlock","previousBlockHash","PayloadBuilder","hash","generateCreatorCommittee","maxSize","creators","Set","seed","hexToLast4BytesInt","creatorArray","shuffleWithSeed","slice","filterAs","assertEx","exists","MemoryArchivist","hydrateBlock","hydrateTransaction","asOptionalTransactionBoundWitnessWithStorageMeta","Mutex","XyoPendingTransactionsService","BaseService","MutexPriority","InsertNewTransactions","ReadTransactions","RemoveFinalizedTransactions","_cleanedToBlock","_pendingTransactionsLocalArchivist","_pendingTransactionsLocalArchivistCursor","_updatePendingTransactionsLocalArchivistMutex","Mutex","chainArchivist","assertEx","params","chainIterator","pendingTransactionsArchivist","pendingTransactionsLocalArchivist","createHandler","MemoryArchivist","create","account","on","payloads","runExclusive","hashes","filterAs","asOptionalTransactionBoundWitnessWithStorageMeta","map","payload","_hash","existingChainTransactions","get","existingChainTransactionHashes","Set","item","nonExistingTransactions","filter","has","insert","delete","getPendingTransactions","head","limit","timeout","spanAsync","foundPendingTransactions","cursor","length","next","order","at","_sequence","transactions","exists","push","hydratedTransactions","Promise","all","tx","hydrateTransaction","removeAlreadyIncludedTransactions","headPtr","block","hydrateBlock","previous","updatePendingTransactionsLocalArchivist","isLocked","console","warn","resolve","filterAs","assertEx","asAddress","analyzeChain","ChainStakeIntentAnalyzer","isChainSummaryStakeIntent","DEFAULT_FIND_FIRST_MATCHING_NEXT_OPTIONS","findFirstMatching","IntervalMap","PayloadBuilder","asOptionalBlockBoundWitness","asOptionalBlockBoundWitnessWithStorageMeta","asOptionalChainIndexingServiceStateWithStorageMeta","asOptionalChainStakeIntent","ChainIndexingServiceStateSchema","isChainIndexingServiceState","Mutex","LRUCache","ACTIVE_STAKE_TTL","NO_ACTIVE_STAKE_TTL","STAKE_CACHE_MAX_ENTRIES","XyoStakeIntentService","BaseService","_lastIndexedBlockHash","undefined","_producers","IntervalMap","_stakeCache","LRUCache","max","_updateMutex","Mutex","constructor","params","chainIterator","on","updateIndex","chainArchivist","assertEx","chainStakeViewer","stakeIntentStateArchivist","createHandler","head","headHash","PayloadBuilder","hash","block","recoverState","getDeclaredCandidateRanges","address","intent","Promise","resolve","results","get","getDeclaredCandidatesForBlock","spanAsync","findAllContaining","candidates","validCandidates","filterToValidStake","isStakedForBlock","includes","requiredMinimumStake","candidatesWithStake","all","map","candidate","stake","activeStake","activeByAddressStaked","set","ttl","filter","persistState","current","state","serialize","payload","schema","ChainIndexingServiceStateSchema","fields","endBlockHash","build","insert","currentBlock","asOptionalBlockBoundWitness","currentBlockNum","opts","DEFAULT_FIND_FIRST_MATCHING_NEXT_OPTIONS","predicate","p","asOptionalChainIndexingServiceStateWithStorageMeta","findFirstMatching","isChainIndexingServiceState","indexed","indexedBlock","asOptionalBlockBoundWitnessWithStorageMeta","indexedBlockNum","data","_hash","open","displayProgress","isLocked","runExclusive","currentHead","currentHeadHash","result","analyzeChain","ChainStakeIntentAnalyzer","signedDeclarations","filterAs","find","isChainSummaryStakeIntent","intents","asOptionalChainStakeIntent","currentHeadBlockNum","logger","info","signedDeclaration","exp","nbf","start","stop","asAddress","from","Base","toAddress","StakedXyoChain__factory","StakedXyoChainFactory","getAddress","EvmChainService","Base","_contract","params","contract","id","runner","create","logger","traceProvider","meterProvider","contractAddress","getAddress","StakedXyoChainFactory","connect","active","activeByAddressStaked","address","activeByStaker","addStake","staked","amount","result","wait","chainId","toAddress","forkedAtBlockNumber","forkedAtHash","forkedChainId","minWithdrawalBlocks","pending","pendingByStaker","staker","removeStake","slot","rewardsContract","stakingTokenAddress","withdrawStake","withdrawn","withdrawnByStaker","assertEx","BaseEmitter","PayloadBuilder","asBlockBoundWitness","asOptionalBlockBoundWitness","isBlockBoundWitness","LRUCache","XyoChainBlockNumberIterator","BaseEmitter","_blocksByBlockNumber","LRUCache","max","_chainArchivist","_chainInformation","_head","params","chainArchivist","archivist","head","id","chain","chainIdentification","create","Promise","resolve","get","block","assertEx","cached","startingBlock","currentBlockHash","PayloadBuilder","hash","currentBlock","asBlockBoundWitness","_hash","isBlockBoundWitness","set","previous","Error","next","nextBlockNumber","undefined","count","results","length","push","nextBlock","asOptionalBlockBoundWitness","updateHead","emit","blocks"]}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { Address, Hash, Hex } from '@xylabs/hex';
|
|
2
|
-
import { AccountBalanceService, BaseServiceParams, ChainServiceCollection } from '@xyo-network/
|
|
2
|
+
import { AccountBalanceService, BaseServiceParams, ChainServiceCollection } from '@xyo-network/xl1-model';
|
|
3
3
|
import { BaseService } from '../BaseService.ts';
|
|
4
4
|
export type ChainAccountBalanceServiceParams = BaseServiceParams<Partial<Pick<ChainServiceCollection, 'chainArchivist'>>>;
|
|
5
5
|
export declare class XyoChainAccountBalanceService extends BaseService<ChainAccountBalanceServiceParams> implements AccountBalanceService {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"XyoChainAccountBalanceService.d.ts","sourceRoot":"","sources":["../../../src/AccountBalance/XyoChainAccountBalanceService.ts"],"names":[],"mappings":"AACA,OAAO,EACL,OAAO,EAAE,IAAI,EAAE,GAAG,EACnB,MAAM,aAAa,CAAA;
|
|
1
|
+
{"version":3,"file":"XyoChainAccountBalanceService.d.ts","sourceRoot":"","sources":["../../../src/AccountBalance/XyoChainAccountBalanceService.ts"],"names":[],"mappings":"AACA,OAAO,EACL,OAAO,EAAE,IAAI,EAAE,GAAG,EACnB,MAAM,aAAa,CAAA;AAIpB,OAAO,EACL,qBAAqB,EAAE,iBAAiB,EACxC,sBAAsB,EACvB,MAAM,wBAAwB,CAAA;AAE/B,OAAO,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAA;AAG/C,MAAM,MAAM,gCAAgC,GAAG,iBAAiB,CAAC,OAAO,CAAC,IAAI,CAAC,sBAAsB,EAAE,gBAAgB,CAAC,CAAC,CAAC,CAAA;AAEzH,qBACa,6BAA8B,SAAQ,WAAW,CAAC,gCAAgC,CAAE,YAAW,qBAAqB;IAC/H,OAAO,CAAC,SAAS,CAA2B;IAC5C,OAAO,CAAC,aAAa,CAAoB;IAEzC,SAAS,KAAK,cAAc;;;;;;;;;;6LAE3B;IAED,UAAU,CAAC,OAAO,EAAE,OAAO,GAAG,GAAG;IAIjC,WAAW,IAAI,MAAM,CAAC,OAAO,EAAE,GAAG,CAAC;IAI7B,IAAI,CAAC,IAAI,EAAE,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC;CAWtC"}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import type { Promisable } from '@xylabs/promise';
|
|
2
|
-
import type { BaseAccountableServiceParams, BaseServiceParams } from '@xyo-network/chain-model';
|
|
3
2
|
import { BaseEmitter } from '@xyo-network/module-event-emitter';
|
|
3
|
+
import type { BaseAccountableServiceParams, BaseServiceParams } from '@xyo-network/xl1-model';
|
|
4
4
|
import type { CreatableService } from './CreatableService.ts';
|
|
5
5
|
declare global {
|
|
6
6
|
var xyoServiceSingletons: Record<string, unknown>;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"BaseService.d.ts","sourceRoot":"","sources":["../../src/BaseService.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAA;
|
|
1
|
+
{"version":3,"file":"BaseService.d.ts","sourceRoot":"","sources":["../../src/BaseService.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAA;AAEjD,OAAO,EAAE,WAAW,EAAE,MAAM,mCAAmC,CAAA;AAC/D,OAAO,KAAK,EAAE,4BAA4B,EAAE,iBAAiB,EAAE,MAAM,wBAAwB,CAAA;AAG7F,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,uBAAuB,CAAA;AAE7D,OAAO,CAAC,MAAM,CAAC;IACb,IAAI,oBAAoB,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;CAClD;AAED,qBAAa,WAAW,CAAC,OAAO,SAAS,iBAAiB,GAAG,iBAAiB,CAAE,SAAQ,WAAW,CAAC,OAAO,CAAC;IAC1G,OAAO,CAAC,MAAM,CAAC,kBAAkB,CAAc;IAE/C,MAAM,KAAK,UAAU,4BAEpB;IAED,IAAI,KAAK,mDAER;IAED,IAAI,IAAI,WAEP;IAED,IAAI,MAAM,oDAET;WAEY,MAAM,CAAC,QAAQ,SAAS,WAAW,CAAC,OAAO,CAAC,EAAE,OAAO,SAAS,iBAAiB,GAAG,QAAQ,CAAC,QAAQ,CAAC,EAC/G,IAAI,EAAE,gBAAgB,CAAC,QAAQ,CAAC,EAChC,MAAM,EAAE,OAAO,GACd,OAAO,CAAC,QAAQ,CAAC;IAOpB,MAAM,CAAC,aAAa,CAAC,QAAQ,SAAS,WAAW,CAAC,OAAO,CAAC,EAAE,OAAO,SAAS,iBAAiB,EAAE,MAAM,EAAE,OAAO;IAO9G,aAAa,IAAI,UAAU,CAAC,IAAI,CAAC;IAIjC,IAAI,CAAC,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,CAAC,GAAG,CAAC;IAI/B,SAAS,CAAC,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,OAAO,CAAC,CAAC,CAAC,EAAE,OAAO,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,CAAC,CAAC;CAGrF;AAED,8BAAsB,sBAAsB,CAC1C,OAAO,SAAS,4BAA4B,GAAG,4BAA4B,CAC3E,SAAQ,WAAW,CAAC,OAAO,CAAC;CAAG"}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { Address } from '@xylabs/hex';
|
|
2
|
-
import { BlockBoundWitness, BlockProducer, ChainStakeIntent, HydratedBlock, StakeIntentService, Transfer, XyoBlockProducerParams } from '@xyo-network/chain-model';
|
|
3
2
|
import { BlockRewardDiviner } from '@xyo-network/chain-modules';
|
|
4
3
|
import { WithStorageMeta } from '@xyo-network/payload-model';
|
|
4
|
+
import { BlockBoundWitness, BlockProducer, ChainStakeIntent, HydratedBlock, StakeIntentService, Transfer, XyoBlockProducerParams } from '@xyo-network/xl1-model';
|
|
5
5
|
import { BaseService } from '../BaseService.ts';
|
|
6
6
|
/**
|
|
7
7
|
* The default block size for a block
|
|
@@ -19,8 +19,8 @@ export declare class XyoBlockProducer extends BaseService<XyoBlockProducerParams
|
|
|
19
19
|
get address(): Lowercase<string>;
|
|
20
20
|
protected get account(): import("@xyo-network/account-model").AccountInstance;
|
|
21
21
|
protected get chainFinalizedArchivist(): import("@xyo-network/archivist-model").ReadArchivist<import("@xyo-network/payload-model").Payload, Lowercase<string>>;
|
|
22
|
-
protected get chainInfo(): import("@xyo-network/
|
|
23
|
-
protected get electionService(): import("@xyo-network/
|
|
22
|
+
protected get chainInfo(): import("@xyo-network/xl1-model").ChainInformation;
|
|
23
|
+
protected get electionService(): import("@xyo-network/xl1-model").ElectionService;
|
|
24
24
|
protected get pendingTransactions(): import("@xyo-network/archivist-model").ArchivistInstance<import("@xylabs/base").BaseParamsFields & {
|
|
25
25
|
account?: import("@xyo-network/account-model").AccountInstance | "random";
|
|
26
26
|
addToResolvers?: boolean;
|
|
@@ -32,11 +32,11 @@ export declare class XyoBlockProducer extends BaseService<XyoBlockProducerParams
|
|
|
32
32
|
privateChildren?: import("@xyo-network/module-model").ModuleInstance[];
|
|
33
33
|
publicChildren?: import("@xyo-network/module-model").ModuleInstance[];
|
|
34
34
|
} & import("@xyo-network/archivist-model").ArchivistParamFields & object, import("@xyo-network/archivist-model").ArchivistModuleEventData, import("@xyo-network/payload-model").Payload>;
|
|
35
|
-
protected get pendingTransactionsService(): import("@xyo-network/
|
|
35
|
+
protected get pendingTransactionsService(): import("@xyo-network/xl1-model").PendingTransactionsService;
|
|
36
36
|
protected get rewardAddress(): Address;
|
|
37
|
-
protected get rewardService(): import("@xyo-network/
|
|
37
|
+
protected get rewardService(): import("@xyo-network/xl1-model").BlockRewardService;
|
|
38
38
|
protected get stakeIntentService(): StakeIntentService;
|
|
39
|
-
protected get validateHydratedBlockState(): import("@xyo-network/
|
|
39
|
+
protected get validateHydratedBlockState(): import("@xyo-network/xl1-model").HydratedBlockStateValidatorFunction;
|
|
40
40
|
next(head: WithStorageMeta<BlockBoundWitness>): Promise<HydratedBlock | undefined>;
|
|
41
41
|
protected getBlockRewardTransfer(block: number): Promise<Transfer | undefined>;
|
|
42
42
|
/**
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"XyoBlockProducer.d.ts","sourceRoot":"","sources":["../../../src/BlockProducer/XyoBlockProducer.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,OAAO,EAAS,MAAM,aAAa,CAAA;AAC5C,OAAO,EAEL,iBAAiB,EAAkC,aAAa,EAAE,gBAAgB,EAA0B,aAAa,EACzH,kBAAkB,EAClB,QAAQ,EACR,sBAAsB,EACvB,MAAM,
|
|
1
|
+
{"version":3,"file":"XyoBlockProducer.d.ts","sourceRoot":"","sources":["../../../src/BlockProducer/XyoBlockProducer.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,OAAO,EAAS,MAAM,aAAa,CAAA;AAC5C,OAAO,EACL,kBAAkB,EACnB,MAAM,4BAA4B,CAAA;AAMnC,OAAO,EAAE,eAAe,EAAE,MAAM,4BAA4B,CAAA;AAC5D,OAAO,EAEL,iBAAiB,EAAkC,aAAa,EAAE,gBAAgB,EAA0B,aAAa,EACzH,kBAAkB,EAClB,QAAQ,EACR,sBAAsB,EACvB,MAAM,wBAAwB,CAAA;AAE/B,OAAO,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAA;AAG/C;;GAEG;AACH,eAAO,MAAM,kBAAkB,KAAK,CAAA;AAKpC,eAAO,MAAM,6BAA6B,QAAS,CAAA;AAEnD;;;GAGG;AACH,eAAO,MAAM,2BAA2B,OAAO,CAAA;AAI/C,qBACa,gBAAiB,SAAQ,WAAW,CAAC,sBAAsB,CAAE,YAAW,aAAa;IAChG,SAAS,CAAC,mBAAmB,EAAE,kBAAkB,GAAG,SAAS,CAAA;IAE7D,MAAM,KAAK,gBAAgB,IAAI,MAAM,CAEpC;IAED,IAAI,OAAO,sBAEV;IAED,SAAS,KAAK,OAAO,yDAEpB;IAED,SAAS,KAAK,uBAAuB,0HAEpC;IAED,SAAS,KAAK,SAAS,sDAEtB;IAED,SAAS,KAAK,eAAe,qDAE5B;IAED,SAAS,KAAK,mBAAmB;;;;;;;;;;6LAEhC;IAED,SAAS,KAAK,0BAA0B,gEAEvC;IAED,SAAS,KAAK,aAAa,IAAI,OAAO,CAErC;IAED,SAAS,KAAK,aAAa,wDAE1B;IAED,SAAS,KAAK,kBAAkB,IAAI,kBAAkB,CAErD;IAED,SAAS,KAAK,0BAA0B,yEAEvC;IAEK,IAAI,CAAC,IAAI,EAAE,eAAe,CAAC,iBAAiB,CAAC,GAAG,OAAO,CAAC,aAAa,GAAG,SAAS,CAAC;cAWxE,sBAAsB,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,QAAQ,GAAG,SAAS,CAAC;IAoBpF;;;;OAIG;cACa,wBAAwB,CAAC,IAAI,EAAE,eAAe,CAAC,iBAAiB,CAAC,GAAG,OAAO,CAAC,gBAAgB,GAAG,SAAS,CAAC;cAwBzG,qBAAqB,CAAC,IAAI,EAAE,eAAe,CAAC,iBAAiB,CAAC,GAAG,OAAO,CAAC,aAAa,GAAG,SAAS,CAAC;CA+BpH"}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { BaseAccountableServiceParams, BlockRewardService, ChainService } from '@xyo-network/
|
|
1
|
+
import { BaseAccountableServiceParams, BlockRewardService, ChainService } from '@xyo-network/xl1-model';
|
|
2
2
|
import { Provider } from 'ethers/providers';
|
|
3
3
|
import { BaseService } from '../BaseService.ts';
|
|
4
4
|
export interface EvmBlockRewardServiceParams extends BaseAccountableServiceParams {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"EvmBlockRewardService.d.ts","sourceRoot":"","sources":["../../../src/BlockReward/EvmBlockRewardService.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"EvmBlockRewardService.d.ts","sourceRoot":"","sources":["../../../src/BlockReward/EvmBlockRewardService.ts"],"names":[],"mappings":"AAEA,OAAO,EACL,4BAA4B,EAAE,kBAAkB,EAAE,YAAY,EAE/D,MAAM,wBAAwB,CAAA;AAC/B,OAAO,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAA;AAE3C,OAAO,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAA;AAG/C,MAAM,WAAW,2BAA4B,SAAQ,4BAA4B;IAC/E,YAAY,CAAC,EAAE,YAAY,CAAA;IAC3B,QAAQ,CAAC,EAAE,QAAQ,CAAA;CACpB;AAED,qBACa,qBAAsB,SAAQ,WAAW,CAAC,2BAA2B,CAAE,YAAW,kBAAkB;IAC/G,SAAS,CAAC,gBAAgB,EAAE,MAAM,GAAG,SAAS,CAAA;IAE9C,SAAS,KAAK,YAAY,iBAEzB;IAED,SAAS,KAAK,eAAe,WAE5B;IAED,SAAS,KAAK,QAAQ,aAErB;IAEc,aAAa;IAKtB,iBAAiB,CAAC,WAAW,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;CAI9D"}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { Promisable } from '@xylabs/promise';
|
|
2
|
-
import { BaseServiceParams, BlockRewardService } from '@xyo-network/
|
|
2
|
+
import { BaseServiceParams, BlockRewardService } from '@xyo-network/xl1-model';
|
|
3
3
|
import { BaseService } from '../BaseService.ts';
|
|
4
4
|
export interface XyoBlockRewardServiceParams extends BaseServiceParams {
|
|
5
5
|
creatorReward?: bigint;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"XyoBlockRewardService.d.ts","sourceRoot":"","sources":["../../../src/BlockReward/XyoBlockRewardService.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAA;
|
|
1
|
+
{"version":3,"file":"XyoBlockRewardService.d.ts","sourceRoot":"","sources":["../../../src/BlockReward/XyoBlockRewardService.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAA;AAE5C,OAAO,EAAE,iBAAiB,EAAE,kBAAkB,EAAE,MAAM,wBAAwB,CAAA;AAE9E,OAAO,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAA;AAG/C,MAAM,WAAW,2BAA4B,SAAQ,iBAAiB;IACpE,aAAa,CAAC,EAAE,MAAM,CAAA;IACtB,iBAAiB,CAAC,EAAE,MAAM,CAAA;IAC1B,iBAAiB,CAAC,EAAE,MAAM,CAAA;IAC1B,qBAAqB,CAAC,EAAE,MAAM,CAAA;IAC9B,mBAAmB,CAAC,EAAE,MAAM,CAAA;IAC5B,QAAQ,CAAC,EAAE,MAAM,CAAA;CAClB;AAED,qBACa,qBAAsB,SAAQ,WAAW,CAAC,2BAA2B,CAAE,YAAW,kBAAkB;IAC/G,SAAS,CAAC,QAAQ,CAAC,qBAAqB,kMAA4B;gBAGlE,EACE,aAA6C,EAC7C,iBAAuC,EACvC,iBAAqC,EACrC,qBAA4B,EAC5B,mBAAyB,EACzB,QAAqB,GACtB,GAAE,OAAO,CAAC,2BAA2B,CAAM;IAO9C,IAAI,aAAa,WAEhB;IAED,IAAI,aAAa,WAEhB;IAED,IAAI,iBAAiB,WAEpB;IAED,IAAI,qBAAqB,WAExB;IAED,IAAI,mBAAmB,WAEtB;IAED,IAAI,QAAQ,WAEX;IAED,iBAAiB,CAAC,WAAW,EAAE,MAAM,GAAG,UAAU,CAAC,MAAM,CAAC;CAW3D"}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { Hash, Hex } from '@xylabs/hex';
|
|
2
2
|
import { Promisable } from '@xylabs/promise';
|
|
3
3
|
import { ArchivistInstance } from '@xyo-network/archivist-model';
|
|
4
|
-
import { BaseServiceParams, HydratedBlock, Service } from '@xyo-network/
|
|
4
|
+
import { BaseServiceParams, HydratedBlock, Service } from '@xyo-network/xl1-model';
|
|
5
5
|
import { BaseService } from './BaseService.ts';
|
|
6
6
|
export interface XyoChainIndexServiceParams extends BaseServiceParams {
|
|
7
7
|
archivist?: ArchivistInstance;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ChainIndexService.d.ts","sourceRoot":"","sources":["../../src/ChainIndexService.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,IAAI,EAAE,GAAG,EAAE,MAAM,aAAa,CAAA;AACvC,OAAO,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAA;AAE5C,OAAO,EAAE,iBAAiB,EAAE,MAAM,8BAA8B,CAAA;AAChE,OAAO,EACL,iBAAiB,EAAE,aAAa,EAAE,OAAO,EAC1C,MAAM,
|
|
1
|
+
{"version":3,"file":"ChainIndexService.d.ts","sourceRoot":"","sources":["../../src/ChainIndexService.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,IAAI,EAAE,GAAG,EAAE,MAAM,aAAa,CAAA;AACvC,OAAO,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAA;AAE5C,OAAO,EAAE,iBAAiB,EAAE,MAAM,8BAA8B,CAAA;AAChE,OAAO,EACL,iBAAiB,EAAE,aAAa,EAAE,OAAO,EAC1C,MAAM,wBAAwB,CAAA;AAE/B,OAAO,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAA;AAG9C,MAAM,WAAW,0BAA2B,SAAQ,iBAAiB;IACnE,SAAS,CAAC,EAAE,iBAAiB,CAAA;CAC9B;AAED,MAAM,WAAW,iBAAkB,SAAQ,OAAO;IAChD,GAAG,CAAC,KAAK,EAAE,MAAM,GAAG,UAAU,CAAC,aAAa,GAAG,SAAS,CAAC,CAAA;IACzD,UAAU,CAAC,IAAI,EAAE,IAAI,GAAG,IAAI,GAAG,UAAU,CAAC,IAAI,CAAC,CAAA;CAChD;AAED,qBACa,oBAAqB,SAAQ,WAAW,CAAC,0BAA0B,CAAE,YAAW,iBAAiB;IAC5G,OAAO,CAAC,KAAK,CAAoB;IACjC,OAAO,CAAC,kBAAkB,CAA+B;IAEzD,SAAS,KAAK,iBAAiB;;;;;;;;;;yMAE9B;IAED,SAAS,KAAK,iBAAiB;;;;;;;;;;6LAE9B;IAEc,aAAa;IAI5B,GAAG,CAAC,KAAK,EAAE,MAAM,GAAG,GAAG,GAAG,UAAU,CAAC,aAAa,GAAG,SAAS,CAAC;IAK/D,UAAU,CAAC,KAAK,EAAE,IAAI,GAAG,IAAI,GAAG,UAAU,CAAC,IAAI,CAAC;CAGjD"}
|
|
@@ -1,13 +1,13 @@
|
|
|
1
1
|
import { Promisable } from '@xylabs/promise';
|
|
2
|
-
import { BlockBoundWitness, HydratedTransaction, XyoValidatorParams } from '@xyo-network/
|
|
2
|
+
import { BlockBoundWitness, HydratedTransaction, XyoValidatorParams } from '@xyo-network/xl1-model';
|
|
3
3
|
import { BaseService } from '../BaseService.ts';
|
|
4
4
|
import { Validator } from './model/index.ts';
|
|
5
5
|
export declare class XyoValidator<TParams extends XyoValidatorParams = XyoValidatorParams> extends BaseService<TParams> implements Validator {
|
|
6
6
|
get address(): Lowercase<string>;
|
|
7
7
|
protected get account(): import("@xyo-network/account-model").AccountInstance;
|
|
8
8
|
protected get chainFinalizedArchivist(): import("@xyo-network/archivist-model").ReadArchivist<import("@xyo-network/payload-model").Payload, Lowercase<string>>;
|
|
9
|
-
protected get chainInfo(): import("@xyo-network/
|
|
10
|
-
protected get electionService(): import("@xyo-network/
|
|
9
|
+
protected get chainInfo(): import("@xyo-network/xl1-model").ChainInformation;
|
|
10
|
+
protected get electionService(): import("@xyo-network/xl1-model").ElectionService;
|
|
11
11
|
protected get pendingTransactions(): import("@xyo-network/archivist-model").ArchivistInstance<import("@xylabs/base").BaseParamsFields & {
|
|
12
12
|
account?: import("@xyo-network/account-model").AccountInstance | "random";
|
|
13
13
|
addToResolvers?: boolean;
|
|
@@ -19,7 +19,7 @@ export declare class XyoValidator<TParams extends XyoValidatorParams = XyoValida
|
|
|
19
19
|
privateChildren?: import("@xyo-network/module-model").ModuleInstance[];
|
|
20
20
|
publicChildren?: import("@xyo-network/module-model").ModuleInstance[];
|
|
21
21
|
} & import("@xyo-network/archivist-model").ArchivistParamFields & object, import("@xyo-network/archivist-model").ArchivistModuleEventData, import("@xyo-network/payload-model").Payload>;
|
|
22
|
-
protected get rewardService(): import("@xyo-network/
|
|
22
|
+
protected get rewardService(): import("@xyo-network/xl1-model").BlockRewardService;
|
|
23
23
|
validatePendingBlock(_block: BlockBoundWitness): Promisable<Error[]>;
|
|
24
24
|
validatePendingTransaction(hydratedTransaction: HydratedTransaction): Promise<boolean>;
|
|
25
25
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"XyoValidator.d.ts","sourceRoot":"","sources":["../../../src/ChainValidator/XyoValidator.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAA;
|
|
1
|
+
{"version":3,"file":"XyoValidator.d.ts","sourceRoot":"","sources":["../../../src/ChainValidator/XyoValidator.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAA;AAE5C,OAAO,EACL,iBAAiB,EACjB,mBAAmB,EAEnB,kBAAkB,EACnB,MAAM,wBAAwB,CAAA;AAE/B,OAAO,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAA;AAE/C,OAAO,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAA;AAM5C,qBACa,YAAY,CAAC,OAAO,SAAS,kBAAkB,GAAG,kBAAkB,CAAE,SAAQ,WAAW,CAAC,OAAO,CAAE,YAAW,SAAS;IAClI,IAAI,OAAO,sBAEV;IAED,SAAS,KAAK,OAAO,yDAEpB;IAED,SAAS,KAAK,uBAAuB,0HAEpC;IAED,SAAS,KAAK,SAAS,sDAEtB;IAED,SAAS,KAAK,eAAe,qDAE5B;IAED,SAAS,KAAK,mBAAmB;;;;;;;;;;6LAEhC;IAED,SAAS,KAAK,aAAa,wDAE1B;IAED,oBAAoB,CAAC,MAAM,EAAE,iBAAiB,GAAG,UAAU,CAAC,KAAK,EAAE,CAAC;IAK9D,0BAA0B,CAAC,mBAAmB,EAAE,mBAAmB,GAAG,OAAO,CAAC,OAAO,CAAC;CAQ7F"}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import type { Promisable } from '@xylabs/promise';
|
|
2
|
-
import type { BlockBoundWitness, HydratedTransaction } from '@xyo-network/
|
|
2
|
+
import type { BlockBoundWitness, HydratedTransaction } from '@xyo-network/xl1-model';
|
|
3
3
|
export interface Validator {
|
|
4
4
|
validatePendingBlock(block: BlockBoundWitness): Promisable<Error[]>;
|
|
5
5
|
validatePendingTransaction(tx: HydratedTransaction): Promise<boolean>;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Validator.d.ts","sourceRoot":"","sources":["../../../../src/ChainValidator/model/Validator.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAA;AACjD,OAAO,KAAK,EAAE,iBAAiB,EAAE,mBAAmB,EAAE,MAAM,
|
|
1
|
+
{"version":3,"file":"Validator.d.ts","sourceRoot":"","sources":["../../../../src/ChainValidator/model/Validator.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAA;AACjD,OAAO,KAAK,EAAE,iBAAiB,EAAE,mBAAmB,EAAE,MAAM,wBAAwB,CAAA;AAEpF,MAAM,WAAW,SAAS;IACxB,oBAAoB,CAAC,KAAK,EAAE,iBAAiB,GAAG,UAAU,CAAC,KAAK,EAAE,CAAC,CAAA;IACnE,0BAA0B,CAAC,EAAE,EAAE,mBAAmB,GAAG,OAAO,CAAC,OAAO,CAAC,CAAA;CACtE"}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import type { Promisable } from '@xylabs/promise';
|
|
2
|
-
import type { Service } from '@xyo-network/
|
|
2
|
+
import type { Service } from '@xyo-network/xl1-model';
|
|
3
3
|
import type { BaseService } from './BaseService.ts';
|
|
4
4
|
export interface CreatableService<T extends BaseService = BaseService> extends Service {
|
|
5
5
|
new (params: T['params']): T;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"CreatableService.d.ts","sourceRoot":"","sources":["../../src/CreatableService.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAA;AACjD,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,
|
|
1
|
+
{"version":3,"file":"CreatableService.d.ts","sourceRoot":"","sources":["../../src/CreatableService.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAA;AACjD,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,wBAAwB,CAAA;AAErD,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAA;AAEnD,MAAM,WAAW,gBAAgB,CAAC,CAAC,SAAS,WAAW,GAAG,WAAW,CAAE,SAAQ,OAAO;IACpF,KAAK,MAAM,EAAE,CAAC,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAA;IAC5B,MAAM,CAAC,CAAC,SAAS,WAAW,EAAE,IAAI,EAAE,gBAAgB,CAAC,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,CAAC,QAAQ,CAAC,GAAG,UAAU,CAAC,CAAC,CAAC,CAAA;CAC7F;AAED,wBAAgB,gBAAgB,CAAC,CAAC,SAAS,WAAW,GAAG,WAAW,MAC1D,CAAC,SAAS,gBAAgB,CAAC,CAAC,CAAC,EAAE,aAAa,CAAC,UAItD"}
|
|
@@ -1,12 +1,12 @@
|
|
|
1
1
|
import { Address, Hash } from '@xylabs/hex';
|
|
2
|
-
import type { XyoElectionServicesParams } from '@xyo-network/
|
|
3
|
-
import { BlockBoundWitness, ElectionService } from '@xyo-network/
|
|
2
|
+
import type { XyoElectionServicesParams } from '@xyo-network/xl1-model';
|
|
3
|
+
import { BlockBoundWitness, ElectionService } from '@xyo-network/xl1-model';
|
|
4
4
|
import { BaseService } from '../BaseService.ts';
|
|
5
5
|
export declare class XyoElectionService extends BaseService<XyoElectionServicesParams> implements ElectionService {
|
|
6
6
|
constructor(params: XyoElectionServicesParams);
|
|
7
|
-
get chainIterator(): import("@xyo-network/
|
|
8
|
-
get chainStakeViewer(): import("@xyo-network/
|
|
9
|
-
get stakeIntentService(): import("@xyo-network/
|
|
7
|
+
get chainIterator(): import("@xyo-network/xl1-model").ChainBlockNumberIterator;
|
|
8
|
+
get chainStakeViewer(): import("@xyo-network/xl1-model").ChainStakeViewer;
|
|
9
|
+
get stakeIntentService(): import("@xyo-network/xl1-model").StakeIntentService;
|
|
10
10
|
getCreatorCommitteeForNextBlock(current: BlockBoundWitness): Promise<Address[]>;
|
|
11
11
|
protected generateCreatorCommittee(candidates: Address[], previousBlockHash: Hash, maxSize?: number): Address[];
|
|
12
12
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"XyoElectionService.d.ts","sourceRoot":"","sources":["../../../src/Election/XyoElectionService.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,aAAa,CAAA;
|
|
1
|
+
{"version":3,"file":"XyoElectionService.d.ts","sourceRoot":"","sources":["../../../src/Election/XyoElectionService.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,aAAa,CAAA;AAG3C,OAAO,KAAK,EAAE,yBAAyB,EAAE,MAAM,wBAAwB,CAAA;AACvE,OAAO,EAAE,iBAAiB,EAAE,eAAe,EAAE,MAAM,wBAAwB,CAAA;AAE3E,OAAO,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAA;AAG/C,qBACa,kBAAmB,SAAQ,WAAW,CAAC,yBAAyB,CAAE,YAAW,eAAe;gBAC3F,MAAM,EAAE,yBAAyB;IAI7C,IAAI,aAAa,8DAEhB;IAED,IAAI,gBAAgB,sDAEnB;IAED,IAAI,kBAAkB,wDAErB;IAEK,+BAA+B,CAAC,OAAO,EAAE,iBAAiB,GAAG,OAAO,CAAC,OAAO,EAAE,CAAC;IASrF,SAAS,CAAC,wBAAwB,CAAC,UAAU,EAAE,OAAO,EAAE,EAAE,iBAAiB,EAAE,IAAI,EAAE,OAAO,SAAI,GAAG,OAAO,EAAE;CAM3G"}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { Hash } from '@xylabs/hex';
|
|
2
2
|
import { ArchivistInstance } from '@xyo-network/archivist-model';
|
|
3
|
-
import { BaseServiceParams, EventingChainBlockNumberIterator, HydratedTransaction, PendingTransactionsService } from '@xyo-network/
|
|
3
|
+
import { BaseServiceParams, EventingChainBlockNumberIterator, HydratedTransaction, PendingTransactionsService } from '@xyo-network/xl1-model';
|
|
4
4
|
import { BaseService } from '../BaseService.ts';
|
|
5
5
|
export interface XyoPendingTransactionsServiceParams extends BaseServiceParams {
|
|
6
6
|
chainArchivist?: ArchivistInstance;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"PendingTransactions.d.ts","sourceRoot":"","sources":["../../../src/PendingTransactions/PendingTransactions.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,IAAI,EAAE,MAAM,aAAa,CAAA;AAElC,OAAO,EAAE,iBAAiB,EAAE,MAAM,8BAA8B,CAAA;
|
|
1
|
+
{"version":3,"file":"PendingTransactions.d.ts","sourceRoot":"","sources":["../../../src/PendingTransactions/PendingTransactions.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,IAAI,EAAE,MAAM,aAAa,CAAA;AAElC,OAAO,EAAE,iBAAiB,EAAE,MAAM,8BAA8B,CAAA;AAGhE,OAAO,EAEL,iBAAiB,EACjB,gCAAgC,EAChC,mBAAmB,EACnB,0BAA0B,EAE3B,MAAM,wBAAwB,CAAA;AAG/B,OAAO,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAA;AAG/C,MAAM,WAAW,mCAAoC,SAAQ,iBAAiB;IAC5E,cAAc,CAAC,EAAE,iBAAiB,CAAA;IAClC,aAAa,CAAC,EAAE,gCAAgC,CAAA;IAChD,4BAA4B,CAAC,EAAE,iBAAiB,CAAA;CACjD;AAED,qBACa,6BAA8B,SAAQ,WAAW,CAAC,mCAAmC,CAAE,YAAW,0BAA0B;IACvI,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,aAAa,CAapC;IAGD,OAAO,CAAC,eAAe,CAAkB;IAGzC,OAAO,CAAC,kCAAkC,CAA6B;IACvE,OAAO,CAAC,wCAAwC,CAAsB;IAEtE,OAAO,CAAC,6CAA6C,CAAc;IAEnE,OAAO,KAAK,cAAc,GAEzB;IAED,OAAO,KAAK,aAAa,GAExB;IAED,OAAO,KAAK,4BAA4B,GAEvC;IAED,OAAO,KAAK,iCAAiC,GAE5C;IAEc,aAAa;IA6BtB,sBAAsB,CAAC,IAAI,EAAE,IAAI,EAAE,KAAK,EAAE,MAAM,EAAE,OAAO,SAAY,GAAG,OAAO,CAAC,mBAAmB,EAAE,CAAC;YAwB9F,iCAAiC;YAejC,uCAAuC;CA8BtD"}
|
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
import { Address, Hash } from '@xylabs/hex';
|
|
2
|
-
import type { Intent, XyoStakeIntentServiceParams } from '@xyo-network/chain-model';
|
|
3
|
-
import { ChainStakeViewer, StakeIntentService } from '@xyo-network/chain-model';
|
|
4
2
|
import { IntervalMap } from '@xyo-network/chain-utils';
|
|
5
3
|
import { Payload } from '@xyo-network/payload-model';
|
|
4
|
+
import type { Intent, XyoStakeIntentServiceParams } from '@xyo-network/xl1-model';
|
|
5
|
+
import { ChainStakeViewer, StakeIntentService } from '@xyo-network/xl1-model';
|
|
6
6
|
import { Mutex } from 'async-mutex';
|
|
7
7
|
import { LRUCache } from 'lru-cache';
|
|
8
8
|
import { BaseService } from '../BaseService.ts';
|
|
@@ -23,7 +23,7 @@ export declare class XyoStakeIntentService extends BaseService<XyoStakeIntentSer
|
|
|
23
23
|
privateChildren?: import("@xyo-network/module-model").ModuleInstance[];
|
|
24
24
|
publicChildren?: import("@xyo-network/module-model").ModuleInstance[];
|
|
25
25
|
} & import("@xyo-network/archivist-model").ArchivistParamFields & object, import("@xyo-network/archivist-model").ArchivistModuleEventData, Payload>;
|
|
26
|
-
protected get chainIterator(): import("@xyo-network/
|
|
26
|
+
protected get chainIterator(): import("@xyo-network/xl1-model").EventingChainBlockNumberIterator;
|
|
27
27
|
protected get chainStakeViewer(): ChainStakeViewer;
|
|
28
28
|
protected get stakeIntentStateArchivist(): import("@xyo-network/archivist-model").ArchivistInstance<import("@xylabs/base").BaseParamsFields & {
|
|
29
29
|
account?: import("@xyo-network/account-model").AccountInstance | "random";
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"XyoStakeIntentService.d.ts","sourceRoot":"","sources":["../../../src/StakeIntent/XyoStakeIntentService.ts"],"names":[],"mappings":"AAEA,OAAO,EACL,OAAO,EAAa,IAAI,EACzB,MAAM,aAAa,CAAA;
|
|
1
|
+
{"version":3,"file":"XyoStakeIntentService.d.ts","sourceRoot":"","sources":["../../../src/StakeIntent/XyoStakeIntentService.ts"],"names":[],"mappings":"AAEA,OAAO,EACL,OAAO,EAAa,IAAI,EACzB,MAAM,aAAa,CAAA;AAMpB,OAAO,EAEc,WAAW,EAE/B,MAAM,0BAA0B,CAAA;AAEjC,OAAO,EAAE,OAAO,EAAmB,MAAM,4BAA4B,CAAA;AACrE,OAAO,KAAK,EAAE,MAAM,EAAE,2BAA2B,EAAE,MAAM,wBAAwB,CAAA;AACjF,OAAO,EAEuI,gBAAgB,EAE5J,kBAAkB,EACnB,MAAM,wBAAwB,CAAA;AAC/B,OAAO,EAAE,KAAK,EAAE,MAAM,aAAa,CAAA;AACnC,OAAO,EAAE,QAAQ,EAAE,MAAM,WAAW,CAAA;AAEpC,OAAO,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAA;AAY/C,qBACa,qBAAsB,SAAQ,WAAW,CAAC,2BAA2B,CAAE,YAAW,kBAAkB;IAE/G,SAAS,CAAC,qBAAqB,EAAE,IAAI,GAAG,SAAS,CAAY;IAQ7D,SAAS,CAAC,UAAU,EAAE,WAAW,CAAC,OAAO,CAAC,CAAoB;IAC9D,SAAS,CAAC,WAAW,+CAAkE;IACvF,SAAS,CAAC,YAAY,QAAc;gBAExB,MAAM,EAAE,2BAA2B;IAO/C,SAAS,KAAK,cAAc;;;;;;;;;;wJAE3B;IAED,SAAS,KAAK,aAAa,sEAE1B;IAED,SAAS,KAAK,gBAAgB,qBAE7B;IAED,SAAS,KAAK,yBAAyB;;;;;;;;;;wJAEtC;IAEc,aAAa,IAAI,OAAO,CAAC,IAAI,CAAC;IAQvC,0BAA0B,CAAC,OAAO,EAAE,OAAO,EAAE,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC;IAO7G,6BAA6B,CAAC,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,EAAE,CAAC;IAUhF,gBAAgB,CAAC,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,OAAO,GAAG,OAAO,CAAC,OAAO,CAAC;YAK3E,kBAAkB;YAkClB,YAAY;YAQZ,YAAY;YA+BZ,WAAW;CAgC1B"}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
1
|
import type { ArchivistInstance } from '@xyo-network/archivist-model';
|
|
2
|
-
import type { BlockBoundWitness, ChainStakeIntent, Intent } from '@xyo-network/
|
|
2
|
+
import type { BlockBoundWitness, ChainStakeIntent, Intent } from '@xyo-network/xl1-model';
|
|
3
3
|
export declare const getBlockSignedStakeDeclarations: (block: BlockBoundWitness, archivist: ArchivistInstance, intent: Intent) => Promise<ChainStakeIntent[]>;
|
|
4
4
|
//# sourceMappingURL=getBlockSignedStakeDeclarations.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"getBlockSignedStakeDeclarations.d.ts","sourceRoot":"","sources":["../../../../src/StakeIntent/lib/getBlockSignedStakeDeclarations.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,8BAA8B,CAAA;AAKrE,OAAO,KAAK,EACV,iBAAiB,EAAE,gBAAgB,EAAE,MAAM,EAC5C,MAAM,
|
|
1
|
+
{"version":3,"file":"getBlockSignedStakeDeclarations.d.ts","sourceRoot":"","sources":["../../../../src/StakeIntent/lib/getBlockSignedStakeDeclarations.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,8BAA8B,CAAA;AAKrE,OAAO,KAAK,EACV,iBAAiB,EAAE,gBAAgB,EAAE,MAAM,EAC5C,MAAM,wBAAwB,CAAA;AAK/B,eAAO,MAAM,+BAA+B,GAAU,OAAO,iBAAiB,EAAE,WAAW,iBAAiB,EAAE,QAAQ,MAAM,KAAG,OAAO,CAAC,gBAAgB,EAAE,CAyBxJ,CAAA"}
|
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
import { Base } from '@xylabs/base';
|
|
2
2
|
import type { Address } from '@xylabs/hex';
|
|
3
3
|
import type { Promisable } from '@xylabs/promise';
|
|
4
|
-
import type { BaseServiceParams, ChainService } from '@xyo-network/chain-model';
|
|
5
4
|
import type { StakedXyoChain } from '@xyo-network/typechain';
|
|
5
|
+
import type { BaseServiceParams, ChainService } from '@xyo-network/xl1-model';
|
|
6
6
|
import type { ContractRunner } from 'ethers/providers';
|
|
7
7
|
export interface EvmChainServiceParams extends BaseServiceParams {
|
|
8
8
|
contract: StakedXyoChain;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Evm.d.ts","sourceRoot":"","sources":["../../../../src/Staker/Evm/Evm.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,MAAM,cAAc,CAAA;AACnC,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,aAAa,CAAA;AAE1C,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAA;AACjD,OAAO,KAAK,EAAE,
|
|
1
|
+
{"version":3,"file":"Evm.d.ts","sourceRoot":"","sources":["../../../../src/Staker/Evm/Evm.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,MAAM,cAAc,CAAA;AACnC,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,aAAa,CAAA;AAE1C,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAA;AACjD,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,wBAAwB,CAAA;AAE5D,OAAO,KAAK,EAAE,iBAAiB,EAAE,YAAY,EAAE,MAAM,wBAAwB,CAAA;AAE7E,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAA;AAEtD,MAAM,WAAW,qBAAsB,SAAQ,iBAAiB;IAC9D,QAAQ,EAAE,cAAc,CAAA;IACxB,EAAE,EAAE,OAAO,CAAA;IACX,MAAM,EAAE,cAAc,CAAA;CACvB;AAED;;GAEG;AACH,qBAAa,eAAgB,SAAQ,IAAI,CAAC,qBAAqB,CAAE,YAAW,YAAY;IACtF,OAAO,CAAC,SAAS,CAAgB;IAEjC,SAAS,aAAa,MAAM,EAAE,qBAAqB;IAKnD,IAAI,EAAE,IAAI,OAAO,CAEhB;IAED,IAAI,MAAM,IAAI,cAAc,CAE3B;IAED,MAAM,CAAC,MAAM,CAAC,EACZ,EAAE,EAAE,MAAM,EAAE,MAAM,EAAE,aAAa,EAAE,aAAa,GACjD,EAAE,IAAI,CAAC,qBAAqB,EAAE,UAAU,CAAC,GAAG,UAAU,CAAC,eAAe,CAAC;IAQlE,MAAM,IAAI,OAAO,CAAC,MAAM,CAAC;IAIzB,qBAAqB,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;IAIvD,cAAc,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;IAIhD,QAAQ,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;IAM1D,OAAO,IAAI,OAAO,CAAC,OAAO,CAAC;IAI3B,mBAAmB,IAAI,OAAO,CAAC,MAAM,CAAC;IAItC,YAAY,IAAI,OAAO,CAAC,MAAM,CAAC;IAI/B,aAAa,IAAI,OAAO,CAAC,OAAO,CAAC;IAIjC,mBAAmB,IAAI,OAAO,CAAC,MAAM,CAAC;IAItC,OAAO,IAAI,OAAO,CAAC,MAAM,CAAC;IAI1B,eAAe,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;IAIhD,WAAW,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;IAM3C,eAAe,IAAI,OAAO,CAAC,MAAM,CAAC;IAIlC,mBAAmB,IAAI,OAAO,CAAC,MAAM,CAAC;IAItC,aAAa,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;IAM7C,SAAS,IAAI,OAAO,CAAC,MAAM,CAAC;IAI5B,iBAAiB,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;CAGzD"}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import type { BaseParams } from '@xylabs/base';
|
|
2
2
|
import type { ArchivistInstance } from '@xyo-network/archivist-model';
|
|
3
|
-
import type { BlockBoundWitness, ChainIdentification, ChainIteratorEventData, EventingChainBlockNumberIterator, XyoChainIteratorParams } from '@xyo-network/chain-model';
|
|
4
3
|
import { BaseEmitter } from '@xyo-network/module-event-emitter';
|
|
4
|
+
import type { BlockBoundWitness, ChainIdentification, ChainIteratorEventData, EventingChainBlockNumberIterator, XyoChainIteratorParams } from '@xyo-network/xl1-model';
|
|
5
5
|
import { LRUCache } from 'lru-cache';
|
|
6
6
|
export declare class XyoChainBlockNumberIterator extends BaseEmitter<BaseParams, ChainIteratorEventData> implements EventingChainBlockNumberIterator {
|
|
7
7
|
protected _blocksByBlockNumber: LRUCache<number, BlockBoundWitness, unknown>;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"XyoChainBlockNumberIterator.d.ts","sourceRoot":"","sources":["../../src/XyoChainBlockNumberIterator.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,cAAc,CAAA;AAC9C,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,8BAA8B,CAAA;AACrE,OAAO,KAAK,EACV,iBAAiB,EAAE,mBAAmB,EACtC,sBAAsB,EACtB,gCAAgC,EAChC,sBAAsB,EACvB,MAAM,
|
|
1
|
+
{"version":3,"file":"XyoChainBlockNumberIterator.d.ts","sourceRoot":"","sources":["../../src/XyoChainBlockNumberIterator.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,cAAc,CAAA;AAC9C,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,8BAA8B,CAAA;AACrE,OAAO,EAAE,WAAW,EAAE,MAAM,mCAAmC,CAAA;AAE/D,OAAO,KAAK,EACV,iBAAiB,EAAE,mBAAmB,EACtC,sBAAsB,EACtB,gCAAgC,EAChC,sBAAsB,EACvB,MAAM,wBAAwB,CAAA;AAK/B,OAAO,EAAE,QAAQ,EAAE,MAAM,WAAW,CAAA;AAEpC,qBAAa,2BAA4B,SAAQ,WAAW,CAAC,UAAU,EAAE,sBAAsB,CAAE,YAAW,gCAAgC;IAC1I,SAAS,CAAC,oBAAoB,+CAA2D;IACzF,SAAS,CAAC,eAAe,EAAE,iBAAiB,CAAA;IAC5C,SAAS,CAAC,iBAAiB,EAAE,mBAAmB,CAAA;IAChD,SAAS,CAAC,KAAK,EAAE,iBAAiB,CAAA;IAElC,SAAS,aAAa,MAAM,EAAE,sBAAsB;IAQpD,IAAI,SAAS,IAAI,iBAAiB,CAAgC;IAElE,IAAI,mBAAmB,IAAI,mBAAmB,CAAkC;WAEnE,MAAM,CAAC,MAAM,EAAE,sBAAsB,GAAG,OAAO,CAAC,2BAA2B,CAAC;IAKnF,GAAG,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,iBAAiB,CAAC;IAwB9C,IAAI,IAAI,OAAO,CAAC,iBAAiB,CAAC;IAIlC,IAAI,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,iBAAiB,GAAG,SAAS,CAAC;IAQ3D,QAAQ,CAAC,KAAK,GAAE,MAAM,GAAG,SAAqB,EAAE,KAAK,GAAE,MAAU,GAAG,OAAO,CAAC,iBAAiB,EAAE,CAAC;IAkBhG,UAAU,CAAC,IAAI,EAAE,iBAAiB,GAAG,OAAO,CAAC,IAAI,CAAC;CAMzD"}
|
package/package.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"$schema": "http://json.schemastore.org/package.json",
|
|
3
3
|
"name": "@xyo-network/chain-services",
|
|
4
|
-
"version": "1.1.
|
|
4
|
+
"version": "1.1.7",
|
|
5
5
|
"description": "XYO Layer One SDK Services",
|
|
6
6
|
"homepage": "https://xylabs.com",
|
|
7
7
|
"bugs": {
|
|
@@ -43,14 +43,14 @@
|
|
|
43
43
|
"@xylabs/promise": "^4.8.0",
|
|
44
44
|
"@xyo-network/archivist-memory": "^3.12.0",
|
|
45
45
|
"@xyo-network/archivist-model": "^3.12.0",
|
|
46
|
-
"@xyo-network/chain-
|
|
47
|
-
"@xyo-network/chain-
|
|
48
|
-
"@xyo-network/chain-
|
|
49
|
-
"@xyo-network/chain-utils": "^1.1.6",
|
|
46
|
+
"@xyo-network/chain-modules": "^1.1.7",
|
|
47
|
+
"@xyo-network/chain-protocol": "^1.1.7",
|
|
48
|
+
"@xyo-network/chain-utils": "^1.1.7",
|
|
50
49
|
"@xyo-network/module-event-emitter": "^3.12.0",
|
|
51
50
|
"@xyo-network/payload-builder": "^3.12.0",
|
|
52
51
|
"@xyo-network/payload-model": "^3.12.0",
|
|
53
52
|
"@xyo-network/typechain": "^3.5.1",
|
|
53
|
+
"@xyo-network/xl1-model": "^1.1.7",
|
|
54
54
|
"async-mutex": "^0.5.0",
|
|
55
55
|
"ethers": "6.13.6",
|
|
56
56
|
"lru-cache": "^11.1.0",
|
|
@@ -64,8 +64,8 @@
|
|
|
64
64
|
"@xylabs/vitest-extended": "^4.8.0",
|
|
65
65
|
"@xyo-network/account": "^3.12.0",
|
|
66
66
|
"@xyo-network/account-model": "^3.12.0",
|
|
67
|
-
"@xyo-network/chain-ethereum": "^1.1.
|
|
68
|
-
"@xyo-network/chain-validation": "^1.1.
|
|
67
|
+
"@xyo-network/chain-ethereum": "^1.1.7",
|
|
68
|
+
"@xyo-network/chain-validation": "^1.1.7",
|
|
69
69
|
"typescript": "^5.8.3",
|
|
70
70
|
"vitest": "^3.1.1",
|
|
71
71
|
"vitest-mock-extended": "^3.1.0"
|
|
@@ -2,13 +2,13 @@ import { assertEx } from '@xylabs/assert'
|
|
|
2
2
|
import {
|
|
3
3
|
Address, Hash, Hex,
|
|
4
4
|
} from '@xylabs/hex'
|
|
5
|
-
import {
|
|
6
|
-
AccountBalanceService, BaseServiceParams,
|
|
7
|
-
ChainServiceCollection,
|
|
8
|
-
} from '@xyo-network/chain-model'
|
|
9
5
|
import {
|
|
10
6
|
analyzeChain, BalanceAnalyzer, isChainSummaryBalances,
|
|
11
7
|
} from '@xyo-network/chain-protocol'
|
|
8
|
+
import {
|
|
9
|
+
AccountBalanceService, BaseServiceParams,
|
|
10
|
+
ChainServiceCollection,
|
|
11
|
+
} from '@xyo-network/xl1-model'
|
|
12
12
|
|
|
13
13
|
import { BaseService } from '../BaseService.ts'
|
|
14
14
|
import { creatableService } from '../CreatableService.ts'
|
package/src/BaseService.ts
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import type { Promisable } from '@xylabs/promise'
|
|
2
|
-
import type { BaseAccountableServiceParams, BaseServiceParams } from '@xyo-network/chain-model'
|
|
3
2
|
import { span, spanAsync } from '@xyo-network/chain-utils'
|
|
4
3
|
import { BaseEmitter } from '@xyo-network/module-event-emitter'
|
|
4
|
+
import type { BaseAccountableServiceParams, BaseServiceParams } from '@xyo-network/xl1-model'
|
|
5
5
|
import { Mutex } from 'async-mutex'
|
|
6
6
|
|
|
7
7
|
import type { CreatableService } from './CreatableService.ts'
|
|
@@ -1,12 +1,5 @@
|
|
|
1
1
|
import { assertEx } from '@xylabs/assert'
|
|
2
2
|
import { Address, toHex } from '@xylabs/hex'
|
|
3
|
-
import {
|
|
4
|
-
asBlockBoundWitness,
|
|
5
|
-
BlockBoundWitness, BlockNumber, BlockNumberSchema, BlockProducer, ChainStakeIntent, ChainStakeIntentSchema, HydratedBlock,
|
|
6
|
-
StakeIntentService,
|
|
7
|
-
Transfer,
|
|
8
|
-
XyoBlockProducerParams,
|
|
9
|
-
} from '@xyo-network/chain-model'
|
|
10
3
|
import {
|
|
11
4
|
BlockRewardDiviner, FixedPercentageBlockRewardDiviner, FixedPercentageBlockRewardDivinerConfigSchema,
|
|
12
5
|
} from '@xyo-network/chain-modules'
|
|
@@ -16,6 +9,13 @@ import {
|
|
|
16
9
|
} from '@xyo-network/chain-protocol'
|
|
17
10
|
import { PayloadBuilder } from '@xyo-network/payload-builder'
|
|
18
11
|
import { WithStorageMeta } from '@xyo-network/payload-model'
|
|
12
|
+
import {
|
|
13
|
+
asBlockBoundWitness,
|
|
14
|
+
BlockBoundWitness, BlockNumber, BlockNumberSchema, BlockProducer, ChainStakeIntent, ChainStakeIntentSchema, HydratedBlock,
|
|
15
|
+
StakeIntentService,
|
|
16
|
+
Transfer,
|
|
17
|
+
XyoBlockProducerParams,
|
|
18
|
+
} from '@xyo-network/xl1-model'
|
|
19
19
|
|
|
20
20
|
import { BaseService } from '../BaseService.ts'
|
|
21
21
|
import { creatableService } from '../CreatableService.ts'
|
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
import { assertEx } from '@xylabs/assert'
|
|
2
|
+
import { XyoChainRewards__factory as XyoChainRewardsFactory } from '@xyo-network/typechain'
|
|
2
3
|
import {
|
|
3
4
|
BaseAccountableServiceParams, BlockRewardService, ChainService,
|
|
4
5
|
toEthAddress,
|
|
5
|
-
} from '@xyo-network/
|
|
6
|
-
import { XyoChainRewards__factory as XyoChainRewardsFactory } from '@xyo-network/typechain'
|
|
6
|
+
} from '@xyo-network/xl1-model'
|
|
7
7
|
import { Provider } from 'ethers/providers'
|
|
8
8
|
|
|
9
9
|
import { BaseService } from '../BaseService.ts'
|
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
import { assertEx } from '@xylabs/assert'
|
|
2
2
|
import { toFixedPoint } from '@xylabs/decimal-precision'
|
|
3
3
|
import { Promisable } from '@xylabs/promise'
|
|
4
|
-
import { BaseServiceParams, BlockRewardService } from '@xyo-network/chain-model'
|
|
5
4
|
import { rewardFromBlockNumber } from '@xyo-network/chain-protocol'
|
|
5
|
+
import { BaseServiceParams, BlockRewardService } from '@xyo-network/xl1-model'
|
|
6
6
|
|
|
7
7
|
import { BaseService } from '../BaseService.ts'
|
|
8
8
|
import { creatableService } from '../CreatableService.ts'
|
package/src/ChainIndexService.ts
CHANGED
|
@@ -5,7 +5,7 @@ import { MemoryArchivist } from '@xyo-network/archivist-memory'
|
|
|
5
5
|
import { ArchivistInstance } from '@xyo-network/archivist-model'
|
|
6
6
|
import {
|
|
7
7
|
BaseServiceParams, HydratedBlock, Service,
|
|
8
|
-
} from '@xyo-network/
|
|
8
|
+
} from '@xyo-network/xl1-model'
|
|
9
9
|
|
|
10
10
|
import { BaseService } from './BaseService.ts'
|
|
11
11
|
import { creatableService } from './CreatableService.ts'
|
|
@@ -1,12 +1,12 @@
|
|
|
1
1
|
import { assertEx } from '@xylabs/assert'
|
|
2
2
|
import { Promisable } from '@xylabs/promise'
|
|
3
|
+
import { PayloadBuilder } from '@xyo-network/payload-builder'
|
|
3
4
|
import {
|
|
4
5
|
BlockBoundWitness,
|
|
5
6
|
HydratedTransaction,
|
|
6
7
|
HydratedTransactionWithStorageMeta,
|
|
7
8
|
XyoValidatorParams,
|
|
8
|
-
} from '@xyo-network/
|
|
9
|
-
import { PayloadBuilder } from '@xyo-network/payload-builder'
|
|
9
|
+
} from '@xyo-network/xl1-model'
|
|
10
10
|
|
|
11
11
|
import { BaseService } from '../BaseService.ts'
|
|
12
12
|
import { creatableService } from '../CreatableService.ts'
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import type { Promisable } from '@xylabs/promise'
|
|
2
|
-
import type { BlockBoundWitness, HydratedTransaction } from '@xyo-network/
|
|
2
|
+
import type { BlockBoundWitness, HydratedTransaction } from '@xyo-network/xl1-model'
|
|
3
3
|
|
|
4
4
|
export interface Validator {
|
|
5
5
|
validatePendingBlock(block: BlockBoundWitness): Promisable<Error[]>
|
package/src/CreatableService.ts
CHANGED
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
import { assertEx } from '@xylabs/assert'
|
|
2
2
|
import { Address, Hash } from '@xylabs/hex'
|
|
3
|
-
import type { XyoElectionServicesParams } from '@xyo-network/chain-model'
|
|
4
|
-
import { BlockBoundWitness, ElectionService } from '@xyo-network/chain-model'
|
|
5
3
|
import { hexToLast4BytesInt, shuffleWithSeed } from '@xyo-network/chain-utils'
|
|
6
4
|
import { PayloadBuilder } from '@xyo-network/payload-builder'
|
|
5
|
+
import type { XyoElectionServicesParams } from '@xyo-network/xl1-model'
|
|
6
|
+
import { BlockBoundWitness, ElectionService } from '@xyo-network/xl1-model'
|
|
7
7
|
|
|
8
8
|
import { BaseService } from '../BaseService.ts'
|
|
9
9
|
import { creatableService } from '../CreatableService.ts'
|
|
@@ -4,6 +4,8 @@ import { exists } from '@xylabs/exists'
|
|
|
4
4
|
import { Hash } from '@xylabs/hex'
|
|
5
5
|
import { MemoryArchivist } from '@xyo-network/archivist-memory'
|
|
6
6
|
import { ArchivistInstance } from '@xyo-network/archivist-model'
|
|
7
|
+
import { hydrateBlock, hydrateTransaction } from '@xyo-network/chain-protocol'
|
|
8
|
+
import { Sequence, WithStorageMeta } from '@xyo-network/payload-model'
|
|
7
9
|
import {
|
|
8
10
|
asOptionalTransactionBoundWitnessWithStorageMeta,
|
|
9
11
|
BaseServiceParams,
|
|
@@ -11,9 +13,7 @@ import {
|
|
|
11
13
|
HydratedTransaction,
|
|
12
14
|
PendingTransactionsService,
|
|
13
15
|
TransactionBoundWitness,
|
|
14
|
-
} from '@xyo-network/
|
|
15
|
-
import { hydrateBlock, hydrateTransaction } from '@xyo-network/chain-protocol'
|
|
16
|
-
import { Sequence, WithStorageMeta } from '@xyo-network/payload-model'
|
|
16
|
+
} from '@xyo-network/xl1-model'
|
|
17
17
|
import { Mutex } from 'async-mutex'
|
|
18
18
|
|
|
19
19
|
import { BaseService } from '../BaseService.ts'
|
|
@@ -4,13 +4,6 @@ import {
|
|
|
4
4
|
Address, asAddress, Hash,
|
|
5
5
|
} from '@xylabs/hex'
|
|
6
6
|
import { ArchivistNextOptions } from '@xyo-network/archivist-model'
|
|
7
|
-
import type { Intent, XyoStakeIntentServiceParams } from '@xyo-network/chain-model'
|
|
8
|
-
import {
|
|
9
|
-
asOptionalBlockBoundWitness, asOptionalBlockBoundWitnessWithStorageMeta,
|
|
10
|
-
asOptionalChainIndexingServiceStateWithStorageMeta, asOptionalChainStakeIntent, ChainIndexingServiceState, ChainIndexingServiceStateSchema, ChainStakeViewer,
|
|
11
|
-
isChainIndexingServiceState,
|
|
12
|
-
StakeIntentService,
|
|
13
|
-
} from '@xyo-network/chain-model'
|
|
14
7
|
import {
|
|
15
8
|
analyzeChain, ChainStakeIntentAnalyzer,
|
|
16
9
|
isChainSummaryStakeIntent,
|
|
@@ -22,6 +15,13 @@ import {
|
|
|
22
15
|
} from '@xyo-network/chain-utils'
|
|
23
16
|
import { PayloadBuilder } from '@xyo-network/payload-builder'
|
|
24
17
|
import { Payload, WithStorageMeta } from '@xyo-network/payload-model'
|
|
18
|
+
import type { Intent, XyoStakeIntentServiceParams } from '@xyo-network/xl1-model'
|
|
19
|
+
import {
|
|
20
|
+
asOptionalBlockBoundWitness, asOptionalBlockBoundWitnessWithStorageMeta,
|
|
21
|
+
asOptionalChainIndexingServiceStateWithStorageMeta, asOptionalChainStakeIntent, ChainIndexingServiceState, ChainIndexingServiceStateSchema, ChainStakeViewer,
|
|
22
|
+
isChainIndexingServiceState,
|
|
23
|
+
StakeIntentService,
|
|
24
|
+
} from '@xyo-network/xl1-model'
|
|
25
25
|
import { Mutex } from 'async-mutex'
|
|
26
26
|
import { LRUCache } from 'lru-cache'
|
|
27
27
|
|
|
@@ -8,10 +8,10 @@ import { payloadSchemasContains } from '@xyo-network/boundwitness-validator'
|
|
|
8
8
|
import { BoundWitnessWrapper } from '@xyo-network/boundwitness-wrapper'
|
|
9
9
|
import type {
|
|
10
10
|
BlockBoundWitness, ChainStakeIntent, Intent,
|
|
11
|
-
} from '@xyo-network/
|
|
11
|
+
} from '@xyo-network/xl1-model'
|
|
12
12
|
import {
|
|
13
13
|
asElevated, asOptionalChainStakeIntent, ChainStakeIntentSchema,
|
|
14
|
-
} from '@xyo-network/
|
|
14
|
+
} from '@xyo-network/xl1-model'
|
|
15
15
|
|
|
16
16
|
export const getBlockSignedStakeDeclarations = async (block: BlockBoundWitness, archivist: ArchivistInstance, intent: Intent): Promise<ChainStakeIntent[]> => {
|
|
17
17
|
// Get payloads in block
|
package/src/Staker/Evm/Evm.ts
CHANGED
|
@@ -2,9 +2,9 @@ import { Base } from '@xylabs/base'
|
|
|
2
2
|
import type { Address } from '@xylabs/hex'
|
|
3
3
|
import { toAddress } from '@xylabs/hex'
|
|
4
4
|
import type { Promisable } from '@xylabs/promise'
|
|
5
|
-
import type { BaseServiceParams, ChainService } from '@xyo-network/chain-model'
|
|
6
5
|
import type { StakedXyoChain } from '@xyo-network/typechain'
|
|
7
6
|
import { StakedXyoChain__factory as StakedXyoChainFactory } from '@xyo-network/typechain'
|
|
7
|
+
import type { BaseServiceParams, ChainService } from '@xyo-network/xl1-model'
|
|
8
8
|
import { getAddress } from 'ethers/address'
|
|
9
9
|
import type { ContractRunner } from 'ethers/providers'
|
|
10
10
|
|
|
@@ -1,18 +1,18 @@
|
|
|
1
1
|
import { assertEx } from '@xylabs/assert'
|
|
2
2
|
import type { BaseParams } from '@xylabs/base'
|
|
3
3
|
import type { ArchivistInstance } from '@xyo-network/archivist-model'
|
|
4
|
+
import { BaseEmitter } from '@xyo-network/module-event-emitter'
|
|
5
|
+
import { PayloadBuilder } from '@xyo-network/payload-builder'
|
|
4
6
|
import type {
|
|
5
7
|
BlockBoundWitness, ChainIdentification,
|
|
6
8
|
ChainIteratorEventData,
|
|
7
9
|
EventingChainBlockNumberIterator,
|
|
8
10
|
XyoChainIteratorParams,
|
|
9
|
-
} from '@xyo-network/
|
|
11
|
+
} from '@xyo-network/xl1-model'
|
|
10
12
|
import {
|
|
11
13
|
asBlockBoundWitness, asOptionalBlockBoundWitness,
|
|
12
14
|
isBlockBoundWitness,
|
|
13
|
-
} from '@xyo-network/
|
|
14
|
-
import { BaseEmitter } from '@xyo-network/module-event-emitter'
|
|
15
|
-
import { PayloadBuilder } from '@xyo-network/payload-builder'
|
|
15
|
+
} from '@xyo-network/xl1-model'
|
|
16
16
|
import { LRUCache } from 'lru-cache'
|
|
17
17
|
|
|
18
18
|
export class XyoChainBlockNumberIterator extends BaseEmitter<BaseParams, ChainIteratorEventData> implements EventingChainBlockNumberIterator {
|