@xyo-network/chain-services 1.16.9 → 1.16.10

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (28) hide show
  1. package/dist/neutral/AccountBalance/BaseAccountBalanceService.d.ts +14 -4
  2. package/dist/neutral/AccountBalance/BaseAccountBalanceService.d.ts.map +1 -1
  3. package/dist/neutral/AccountTransfers/index.d.ts +0 -1
  4. package/dist/neutral/AccountTransfers/index.d.ts.map +1 -1
  5. package/dist/neutral/BlockProducer/BaseBlockProducerService.d.ts +2 -6
  6. package/dist/neutral/BlockProducer/BaseBlockProducerService.d.ts.map +1 -1
  7. package/dist/neutral/BlockProducer/spec/BaseBlockProducerService.spec.d.ts.map +1 -1
  8. package/dist/neutral/ChainValidator/XyoValidator.d.ts +2 -6
  9. package/dist/neutral/ChainValidator/XyoValidator.d.ts.map +1 -1
  10. package/dist/neutral/StakeIntent/XyoStakeIntentService.d.ts +1 -3
  11. package/dist/neutral/StakeIntent/XyoStakeIntentService.d.ts.map +1 -1
  12. package/dist/neutral/Time/BaseTimeSyncService.d.ts +7 -10
  13. package/dist/neutral/Time/BaseTimeSyncService.d.ts.map +1 -1
  14. package/dist/neutral/blockViewerFromChainIteratorAndArchivist.d.ts +4 -0
  15. package/dist/neutral/blockViewerFromChainIteratorAndArchivist.d.ts.map +1 -0
  16. package/dist/neutral/index.mjs +187 -232
  17. package/dist/neutral/index.mjs.map +1 -1
  18. package/package.json +25 -25
  19. package/src/AccountBalance/BaseAccountBalanceService.ts +31 -5
  20. package/src/AccountTransfers/index.ts +0 -1
  21. package/src/BlockProducer/BaseBlockProducerService.ts +2 -2
  22. package/src/BlockProducer/spec/BaseBlockProducerService.spec.ts +2 -5
  23. package/src/StakeIntent/XyoStakeIntentService.ts +2 -2
  24. package/src/Time/BaseTimeSyncService.ts +24 -78
  25. package/src/blockViewerFromChainIteratorAndArchivist.ts +61 -0
  26. package/dist/neutral/AccountTransfers/accountTransfersServiceFromArchivist.d.ts +0 -6
  27. package/dist/neutral/AccountTransfers/accountTransfersServiceFromArchivist.d.ts.map +0 -1
  28. package/src/AccountTransfers/accountTransfersServiceFromArchivist.ts +0 -39
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.16.9",
4
+ "version": "1.16.10",
5
5
  "description": "XYO Layer One SDK Services",
6
6
  "homepage": "https://xylabs.com",
7
7
  "bugs": {
@@ -37,53 +37,53 @@
37
37
  ],
38
38
  "dependencies": {
39
39
  "@opentelemetry/api": "~1.9.0",
40
- "@xylabs/array": "~5.0.24",
41
- "@xylabs/assert": "~5.0.24",
42
- "@xylabs/creatable": "~5.0.24",
43
- "@xylabs/decimal-precision": "~5.0.24",
44
- "@xylabs/events": "~5.0.24",
45
- "@xylabs/exists": "~5.0.24",
46
- "@xylabs/forget": "~5.0.24",
47
- "@xylabs/hex": "~5.0.24",
48
- "@xylabs/object": "~5.0.24",
49
- "@xylabs/promise": "~5.0.24",
50
- "@xylabs/telemetry": "~5.0.24",
51
- "@xylabs/typeof": "~5.0.24",
40
+ "@xylabs/array": "~5.0.25",
41
+ "@xylabs/assert": "~5.0.25",
42
+ "@xylabs/creatable": "~5.0.25",
43
+ "@xylabs/decimal-precision": "~5.0.25",
44
+ "@xylabs/events": "~5.0.25",
45
+ "@xylabs/exists": "~5.0.25",
46
+ "@xylabs/forget": "~5.0.25",
47
+ "@xylabs/hex": "~5.0.25",
48
+ "@xylabs/object": "~5.0.25",
49
+ "@xylabs/promise": "~5.0.25",
50
+ "@xylabs/telemetry": "~5.0.25",
51
+ "@xylabs/typeof": "~5.0.25",
52
52
  "@xyo-network/account-model": "~5.1.21",
53
53
  "@xyo-network/archivist-memory": "~5.1.21",
54
54
  "@xyo-network/archivist-model": "~5.1.21",
55
55
  "@xyo-network/boundwitness-model": "~5.1.21",
56
56
  "@xyo-network/boundwitness-validator": "~5.1.21",
57
57
  "@xyo-network/boundwitness-wrapper": "~5.1.21",
58
- "@xyo-network/chain-analyze": "~1.16.9",
59
- "@xyo-network/chain-modules": "~1.16.9",
60
- "@xyo-network/chain-protocol": "~1.16.9",
61
- "@xyo-network/chain-utils": "~1.16.9",
58
+ "@xyo-network/chain-analyze": "~1.16.10",
59
+ "@xyo-network/chain-modules": "~1.16.10",
60
+ "@xyo-network/chain-protocol": "~1.16.10",
61
+ "@xyo-network/chain-utils": "~1.16.10",
62
62
  "@xyo-network/payload-builder": "~5.1.21",
63
63
  "@xyo-network/payload-model": "~5.1.21",
64
64
  "@xyo-network/typechain": "~4.0.10",
65
- "@xyo-network/xl1-protocol": "~1.13.6",
66
- "@xyo-network/xl1-protocol-sdk": "~1.16.9",
67
- "@xyo-network/xl1-validation": "~1.16.9",
68
- "@xyo-network/xl1-wrappers": "~1.16.9",
65
+ "@xyo-network/xl1-protocol": "~1.13.11",
66
+ "@xyo-network/xl1-protocol-sdk": "~1.16.10",
67
+ "@xyo-network/xl1-validation": "~1.16.10",
68
+ "@xyo-network/xl1-wrappers": "~1.16.10",
69
69
  "async-mutex": "~0.5.0",
70
70
  "ethers": "6.15.0",
71
71
  "lru-cache": "~11.2.2"
72
72
  },
73
73
  "devDependencies": {
74
74
  "@types/node": "~24.10.1",
75
- "@xylabs/delay": "~5.0.24",
75
+ "@xylabs/delay": "~5.0.25",
76
76
  "@xylabs/ts-scripts-yarn3": "~7.2.8",
77
77
  "@xylabs/tsconfig": "~7.2.8",
78
- "@xylabs/vitest-extended": "~5.0.24",
78
+ "@xylabs/vitest-extended": "~5.0.25",
79
79
  "@xyo-network/account": "~5.1.21",
80
80
  "@xyo-network/account-model": "~5.1.21",
81
- "@xyo-network/chain-validation": "~1.16.9",
81
+ "@xyo-network/chain-validation": "~1.16.10",
82
82
  "@xyo-network/wallet": "~5.1.21",
83
83
  "eslint": "^9.39.1",
84
84
  "tslib": "~2.8.1",
85
85
  "typescript": "~5.9.3",
86
- "vitest": "~4.0.8",
86
+ "vitest": "~4.0.9",
87
87
  "vitest-mock-extended": "~3.1.0",
88
88
  "web3-types": "~1.10.0"
89
89
  },
@@ -1,31 +1,45 @@
1
1
  import { creatable } from '@xylabs/creatable'
2
2
  import { Address, Hash } from '@xylabs/hex'
3
- import { Promisable } from '@xylabs/promise'
4
3
  import { spanRootAsync } from '@xylabs/telemetry'
4
+ import { ReadArchivist } from '@xyo-network/archivist-model'
5
5
  import { AttoXL1, XL1BlockRange } from '@xyo-network/xl1-protocol'
6
6
  import {
7
7
  AccountBalanceHistoryItem,
8
8
  AccountBalanceService,
9
9
  balancesSummary,
10
10
  BalanceStepSummaryContext,
11
+ BlockViewer,
12
+ EventingChainBlockNumberIteratorService,
13
+ SimpleAccountBalanceViewer,
14
+ TransfersStepSummaryContext,
11
15
  } from '@xyo-network/xl1-protocol-sdk'
12
16
 
13
17
  import { BaseService } from '../BaseService.ts'
18
+ import { blockViewerFromChainIteratorAndArchivist } from '../blockViewerFromChainIteratorAndArchivist.ts'
14
19
  import { BaseServiceParams } from '../model/index.ts'
15
20
 
16
21
  export interface BaseAccountBalanceServiceParams extends BaseServiceParams {
22
+ chainArchivist: ReadArchivist
23
+ chainIterator: EventingChainBlockNumberIteratorService
17
24
  context: BalanceStepSummaryContext
25
+ transferContext: TransfersStepSummaryContext
18
26
  }
19
27
 
20
28
  @creatable()
21
29
  export class BaseAccountBalanceService extends BaseService<BaseAccountBalanceServiceParams> implements AccountBalanceService {
30
+ protected accountBalanceViewer!: AccountBalanceService
31
+ protected blockViewer!: BlockViewer
32
+
22
33
  async accountBalance(address: Address, headOrRange?: XL1BlockRange | Hash): Promise<AttoXL1> {
23
34
  const balances = await this.accountBalances([address], headOrRange)
24
35
  return balances[address] ?? AttoXL1(0n)
25
36
  }
26
37
 
27
- accountBalanceHistory(_address: Address, _headOrRange?: XL1BlockRange | Hash): Promisable<AccountBalanceHistoryItem[]> {
28
- throw new Error('Method not implemented.')
38
+ async accountBalanceHistory(address: Address): Promise<AccountBalanceHistoryItem[]>
39
+ async accountBalanceHistory(address: Address, head: Hash): Promise<AccountBalanceHistoryItem[]>
40
+ async accountBalanceHistory(address: Address, range: XL1BlockRange): Promise<AccountBalanceHistoryItem[]>
41
+ async accountBalanceHistory(address: Address, headOrRange?: Hash | XL1BlockRange): Promise<AccountBalanceHistoryItem[]> {
42
+ return await this.accountBalanceViewer.accountBalanceHistory(address, headOrRange)
29
43
  }
30
44
 
31
45
  async accountBalances(address: Address[], _headOrRange?: XL1BlockRange | Hash): Promise<Partial<Record<Address, AttoXL1>>> {
@@ -42,7 +56,19 @@ export class BaseAccountBalanceService extends BaseService<BaseAccountBalanceSer
42
56
  })
43
57
  }
44
58
 
45
- accountBalancesHistories(_address: Address[], _headOrRange?: XL1BlockRange | Hash): Promisable<Partial<Record<Address, AccountBalanceHistoryItem[]>>> {
46
- throw new Error('Method not implemented.')
59
+ async accountBalancesHistories(addresses: Address[]): Promise<Partial<Record<Address, AccountBalanceHistoryItem[]>>>
60
+ async accountBalancesHistories(addresses: Address[], head: Hash): Promise<Partial<Record<Address, AccountBalanceHistoryItem[]>>>
61
+ async accountBalancesHistories(addresses: Address[], range: XL1BlockRange): Promise<Partial<Record<Address, AccountBalanceHistoryItem[]>>>
62
+ async accountBalancesHistories(addresses: Address[], headOrRange?: Hash | XL1BlockRange): Promise<Partial<Record<Address, AccountBalanceHistoryItem[]>>> {
63
+ return await this.accountBalanceViewer.accountBalancesHistories(addresses, headOrRange)
64
+ }
65
+
66
+ override createHandler() {
67
+ this.blockViewer = blockViewerFromChainIteratorAndArchivist(this.params.chainIterator, this.params.chainArchivist)
68
+ this.accountBalanceViewer = new SimpleAccountBalanceViewer(
69
+ this.params.context,
70
+ this.params.transferContext,
71
+ this.blockViewer,
72
+ )
47
73
  }
48
74
  }
@@ -1,2 +1 @@
1
- export * from './accountTransfersServiceFromArchivist.ts'
2
1
  export * from './BaseAccountTransfersService.ts'
@@ -3,7 +3,7 @@ import { assertEx } from '@xylabs/assert'
3
3
  import { creatable } from '@xylabs/creatable'
4
4
  import { exists } from '@xylabs/exists'
5
5
  import {
6
- Address, Hex, hexToBigInt, toHex,
6
+ Address, asHash, Hex, hexToBigInt, toHex,
7
7
  } from '@xylabs/hex'
8
8
  import { isDefined } from '@xylabs/typeof'
9
9
  import { ArchivistInstance } from '@xyo-network/archivist-model'
@@ -277,7 +277,7 @@ export class BaseBlockProducerService extends BaseService<BaseBlockProducerServi
277
277
 
278
278
  private async generateTimePayload(head: WithStorageMeta<BlockBoundWitness>) {
279
279
  const [ethereum, ethHashOrNull] = await this.time.currentTimeAndHash('ethereum')
280
- const ethereumHash = assertEx(ethHashOrNull, () => 'No ethereum hash available from time sync service')
280
+ const ethereumHash = asHash(ethHashOrNull, () => 'No ethereum hash available from time sync service')
281
281
  const timePayload: TimePayload = {
282
282
  schema: TimeSchema,
283
283
  // note, this is for the previous block
@@ -1,4 +1,3 @@
1
- /* eslint-disable max-statements */
2
1
  import '@xylabs/vitest-extended'
3
2
 
4
3
  import { filterAs } from '@xylabs/array'
@@ -287,10 +286,8 @@ describe('XyoBlockProducer', () => {
287
286
  expect(blockRewardTransfer).toBeDefined()
288
287
  let totalTransfer = 0n
289
288
  for (const value of Object.values(blockRewardTransfer?.transfers ?? {})) {
290
- if (value) {
291
- const bigIntValue = hexToBigInt(value)
292
- totalTransfer += bigIntValue
293
- }
289
+ const bigIntValue = hexToBigInt(value)
290
+ totalTransfer += bigIntValue
294
291
  }
295
292
  expect(totalTransfer).toEqual(3_000_000_000_000_000_000_000n)
296
293
  }
@@ -94,14 +94,14 @@ export class XyoStakeIntentService extends BaseService<XyoStakeIntentServicePara
94
94
 
95
95
  async getDeclaredCandidateRanges(address: Address, intent: Intent): Promise<Readonly<Readonly<[number, number]>[]>> {
96
96
  await Promise.resolve()
97
- assertEx(intent === 'producer', () => `Error: Support not yet added for intent ${intent}`)
97
+ assertEx(intent === 'producer', () => `Support not yet added for intent ${intent}`)
98
98
  const results = this._producers.get(address)
99
99
  return results ?? []
100
100
  }
101
101
 
102
102
  async getDeclaredCandidatesForBlock(block: number, intent: Intent): Promise<Address[]> {
103
103
  return await this.spanAsync('getDeclaredCandidatesForBlock', async () => {
104
- assertEx(intent === 'producer', () => `Error: Support not yet added for intent ${intent}`)
104
+ assertEx(intent === 'producer', () => `Support not yet added for intent ${intent}`)
105
105
  const results = this._producers.findAllContaining(block)
106
106
  const candidates = [...results]
107
107
  const requiredMinimumStake = this.getRequiredMinimumStakeForIntent(intent)
@@ -1,24 +1,16 @@
1
- import { assertEx } from '@xylabs/assert'
2
1
  import { creatable } from '@xylabs/creatable'
3
- import { asHash, Hash } from '@xylabs/hex'
4
2
  import { EmptyObject } from '@xylabs/object'
5
- import { Promisable } from '@xylabs/promise'
6
3
  import { ReadArchivist } from '@xyo-network/archivist-model'
7
- import { PayloadBuilder } from '@xyo-network/payload-builder'
4
+ import { TimeDomain, TimePayload } from '@xyo-network/xl1-protocol'
8
5
  import {
9
- asTimePayload,
10
- TimeDomain, TimePayload, TimeSchema,
11
- } from '@xyo-network/xl1-protocol'
12
- import { EventingChainBlockNumberIteratorService, TimeSyncViewer } from '@xyo-network/xl1-protocol-sdk'
6
+ EventingChainBlockNumberIteratorService, SimpleTimeSyncViewer, TimeSyncViewer,
7
+ } from '@xyo-network/xl1-protocol-sdk'
13
8
  import { Provider } from 'ethers'
14
9
 
15
10
  import { BaseService } from '../BaseService.ts'
11
+ import { blockViewerFromChainIteratorAndArchivist } from '../blockViewerFromChainIteratorAndArchivist.ts'
16
12
  import { BaseServiceParams } from '../model/index.ts'
17
13
 
18
- export interface TimeProvider {
19
- currentTime(): Promise<[string, number]>
20
- }
21
-
22
14
  export interface BaseTimeServiceParams<TConfig extends EmptyObject = EmptyObject> extends BaseServiceParams<TConfig> {
23
15
  chainArchivist: ReadArchivist
24
16
  chainIterator: EventingChainBlockNumberIteratorService
@@ -27,88 +19,42 @@ export interface BaseTimeServiceParams<TConfig extends EmptyObject = EmptyObject
27
19
 
28
20
  @creatable()
29
21
  export class BaseTimeSyncService extends BaseService<BaseTimeServiceParams> implements TimeSyncViewer {
30
- get chainArchivist() {
22
+ protected timeSyncViewer!: TimeSyncViewer
23
+
24
+ protected get chainArchivist() {
31
25
  return this.params.chainArchivist
32
26
  }
33
27
 
34
- get chainIterator() {
28
+ protected get chainIterator() {
35
29
  return this.params.chainIterator
36
30
  }
37
31
 
38
- get ethProvider() {
32
+ protected get ethProvider() {
39
33
  return this.params.ethProvider
40
34
  }
41
35
 
42
36
  async convertTime(fromDomain: TimeDomain, toDomain: TimeDomain, from: number): Promise<number> {
43
- switch (fromDomain) {
44
- case 'xl1': {
45
- const block = assertEx(await this.chainIterator.get(from), () => 'Block not found')
46
- const timeSchemaIndex = block.payload_schemas.indexOf(TimeSchema)
47
- const hash = timeSchemaIndex === -1 ? undefined : block.payload_hashes[timeSchemaIndex]
48
- const [payload] = hash === undefined ? [] : await this.chainArchivist.get([hash])
49
- const timePayload = asTimePayload(payload)
50
- if (timePayload === undefined) return 0
51
- switch (toDomain) {
52
- case 'xl1': {
53
- return timePayload.xl1 ?? 0
54
- }
55
- case 'epoch': {
56
- return timePayload.epoch ?? 0
57
- }
58
- case 'ethereum': {
59
- return timePayload.ethereum ?? 0
60
- }
61
- default: {
62
- throw new Error(`Unsupported to toDomain: ${toDomain}`)
63
- }
64
- }
65
- }
66
- default: {
67
- throw new Error(`Unsupported from fromDomain: ${fromDomain}`)
68
- }
69
- }
37
+ return await this.timeSyncViewer.convertTime(fromDomain, toDomain, from)
38
+ }
39
+
40
+ override async createHandler(): Promise<void> {
41
+ await super.createHandler()
42
+ const blockViewer = blockViewerFromChainIteratorAndArchivist(
43
+ this.chainIterator,
44
+ this.chainArchivist,
45
+ )
46
+ this.timeSyncViewer = new SimpleTimeSyncViewer(blockViewer, this.ethProvider)
70
47
  }
71
48
 
72
49
  async currentTime(domain: TimeDomain): Promise<[string, number]> {
73
- switch (domain) {
74
- case 'xl1': {
75
- return ['xl1', (await this.chainIterator.head()).block]
76
- }
77
- case 'epoch': {
78
- return ['epoch', Date.now()]
79
- }
80
- case 'ethereum': {
81
- return ['ethereum', (await this.ethProvider?.getBlockNumber()) ?? 0]
82
- }
83
- default: {
84
- throw new Error(`Unknown time domain: ${domain}`)
85
- }
86
- }
50
+ return await this.timeSyncViewer.currentTime(domain)
87
51
  }
88
52
 
89
- async currentTimeAndHash(domain: TimeDomain): Promise<[number, Hash | null]> {
90
- switch (domain) {
91
- case 'xl1': {
92
- const head = await this.chainIterator.head()
93
- return [head.block, await PayloadBuilder.hash(head)]
94
- }
95
- case 'epoch': {
96
- return [Date.now(), null]
97
- }
98
- case 'ethereum': {
99
- const provider = assertEx(this.ethProvider, () => 'Ethereum provider not configured')
100
- const blockNumber = (await provider.getBlockNumber()) ?? 0
101
- const block = await provider.getBlock(blockNumber)
102
- const blockHash = asHash(assertEx(block?.hash, () => 'Block hash not found'), true)
103
- return [blockNumber, blockHash]
104
- }
105
- default: {
106
- throw new Error(`Unknown time domain: ${domain}`)
107
- }
108
- }
53
+ async currentTimeAndHash(domain: TimeDomain): Promise<[number, string | null]> {
54
+ return await this.timeSyncViewer.currentTimeAndHash(domain)
109
55
  }
110
56
 
111
- currentTimePayload(): Promisable<TimePayload> {
112
- throw new Error('Method not implemented.')
57
+ async currentTimePayload(): Promise<TimePayload> {
58
+ return await this.timeSyncViewer.currentTimePayload()
113
59
  }
114
60
  }
@@ -0,0 +1,61 @@
1
+ import type { Hash } from '@xylabs/hex'
2
+ import { isDefined } from '@xylabs/typeof'
3
+ import type { ReadArchivist } from '@xyo-network/archivist-model'
4
+ import { PayloadBuilder } from '@xyo-network/payload-builder'
5
+ import type {
6
+ HydratedBlock,
7
+ XL1BlockNumber,
8
+ } from '@xyo-network/xl1-protocol'
9
+ import { asBlockBoundWitnessWithStorageMeta } from '@xyo-network/xl1-protocol'
10
+ import type { BlockViewer, EventingChainBlockNumberIteratorService } from '@xyo-network/xl1-protocol-sdk'
11
+
12
+ export function blockViewerFromChainIteratorAndArchivist(
13
+ chainIterator: EventingChainBlockNumberIteratorService,
14
+ chainArchivist: ReadArchivist,
15
+ ): BlockViewer {
16
+ const result = {
17
+ blockByHash: async function (hash: Hash): Promise<HydratedBlock | null> {
18
+ const [payload] = await chainArchivist.get([hash])
19
+ const block = asBlockBoundWitnessWithStorageMeta(payload)
20
+ if (isDefined(block)) {
21
+ const payloads = await chainArchivist.get(block.payload_hashes)
22
+ return [block, payloads]
23
+ }
24
+ return null
25
+ },
26
+ blockByNumber: async function (blockNumber: XL1BlockNumber): Promise<HydratedBlock | null> {
27
+ const payload = await chainIterator.get(blockNumber)
28
+ const block = payload ? await PayloadBuilder.addStorageMeta(payload) : undefined
29
+ if (isDefined(block)) {
30
+ const payloads = await chainArchivist.get(block.payload_hashes)
31
+ return [block, payloads]
32
+ }
33
+ return null
34
+ },
35
+ blocksByHash: async function (hash: Hash, limit = 10): Promise<HydratedBlock[]> {
36
+ const results: HydratedBlock[] = []
37
+ for (let i = 0; i < limit; i++) {
38
+ const block = await this.blockByHash(hash)
39
+ if (block) {
40
+ results.push(block)
41
+ } else {
42
+ break
43
+ }
44
+ }
45
+ return results
46
+ },
47
+ currentBlock: async function (): Promise<HydratedBlock> {
48
+ const head = await chainIterator.head()
49
+ return this.blockByHash(head._hash) as Promise<HydratedBlock>
50
+ },
51
+ currentBlockHash: async function (): Promise<Hash> {
52
+ const head = await chainIterator.head()
53
+ return head._hash
54
+ },
55
+ currentBlockNumber: async function (): Promise<XL1BlockNumber> {
56
+ const head = await chainIterator.head()
57
+ return head.block
58
+ },
59
+ } satisfies BlockViewer
60
+ return result
61
+ }
@@ -1,6 +0,0 @@
1
- import type { ReadArchivist } from '@xyo-network/archivist-model';
2
- import type { Payload, WithStorageMeta } from '@xyo-network/payload-model';
3
- import type { ChainId } from '@xyo-network/xl1-protocol';
4
- import type { AccountTransfersService } from '@xyo-network/xl1-protocol-sdk';
5
- export declare const accountTransfersServiceFromArchivist: (chainId: ChainId, archivist: ReadArchivist<WithStorageMeta<Payload>>) => Promise<AccountTransfersService>;
6
- //# sourceMappingURL=accountTransfersServiceFromArchivist.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"accountTransfersServiceFromArchivist.d.ts","sourceRoot":"","sources":["../../../src/AccountTransfers/accountTransfersServiceFromArchivist.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,8BAA8B,CAAA;AAEjE,OAAO,KAAK,EAAE,OAAO,EAAE,eAAe,EAAE,MAAM,4BAA4B,CAAA;AAC1E,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,2BAA2B,CAAA;AAExD,OAAO,KAAK,EAAE,uBAAuB,EAAwB,MAAM,+BAA+B,CAAA;AAMlG,eAAO,MAAM,oCAAoC,GAC/C,SAAS,OAAO,EAChB,WAAW,aAAa,CAAC,eAAe,CAAC,OAAO,CAAC,CAAC,KACjD,OAAO,CAAC,uBAAuB,CAsBjC,CAAA"}
@@ -1,39 +0,0 @@
1
- import { assertEx } from '@xylabs/assert'
2
- import type { Hash } from '@xylabs/hex'
3
- import type { ReadArchivist } from '@xyo-network/archivist-model'
4
- import { findMostRecentBlock } from '@xyo-network/chain-protocol'
5
- import type { Payload, WithStorageMeta } from '@xyo-network/payload-model'
6
- import type { ChainId } from '@xyo-network/xl1-protocol'
7
- import { StepSizes } from '@xyo-network/xl1-protocol'
8
- import type { AccountTransfersService, TransfersStepSummary } from '@xyo-network/xl1-protocol-sdk'
9
- import { LruCacheMap, readPayloadMapFromStore } from '@xyo-network/xl1-protocol-sdk'
10
- import { Semaphore } from 'async-mutex'
11
-
12
- import { BaseAccountTransfersService } from './BaseAccountTransfersService.ts'
13
-
14
- export const accountTransfersServiceFromArchivist = async (
15
- chainId: ChainId,
16
- archivist: ReadArchivist<WithStorageMeta<Payload>>,
17
- ): Promise<AccountTransfersService> => {
18
- const summaryMap = new LruCacheMap<string, TransfersStepSummary>({
19
- max: 100_000,
20
- allowStale: true,
21
- noDisposeOnSet: false,
22
- updateAgeOnGet: true,
23
- })
24
- const chainMap = readPayloadMapFromStore<WithStorageMeta<Payload>>(archivist)
25
- const headFunc = async (): Promise<[Hash, number]> => {
26
- const head = await findMostRecentBlock(archivist)
27
- return [assertEx(head?._hash, () => 'No head found in chainArchivist'), assertEx(head?.block, () => 'No head found in chainArchivist')]
28
- }
29
- const service = await BaseAccountTransfersService.create({
30
- context: {
31
- chainId,
32
- store: { chainMap },
33
- stepSemaphores: StepSizes.map(() => new Semaphore(20)),
34
- summaryMap,
35
- head: headFunc,
36
- },
37
- })
38
- return service
39
- }