@xyo-network/xl1-protocol-sdk 1.16.8 → 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.
- package/dist/neutral/block/primitives/frames/calculateFramesFromRange.d.ts.map +1 -1
- package/dist/neutral/block/primitives/transfers/transfersSummary.d.ts.map +1 -1
- package/dist/neutral/config/Config.d.ts +3 -15
- package/dist/neutral/config/Config.d.ts.map +1 -1
- package/dist/neutral/config/Producer.d.ts +1 -5
- package/dist/neutral/config/Producer.d.ts.map +1 -1
- package/dist/neutral/config/Validation.d.ts +2 -10
- package/dist/neutral/config/Validation.d.ts.map +1 -1
- package/dist/neutral/index.mjs +278 -48
- package/dist/neutral/index.mjs.map +1 -1
- package/dist/neutral/model/ChainContext/ChainStakeContext.d.ts +4 -5
- package/dist/neutral/model/ChainContext/ChainStakeContext.d.ts.map +1 -1
- package/dist/neutral/model/index.d.ts +0 -2
- package/dist/neutral/model/index.d.ts.map +1 -1
- package/dist/neutral/payloads/netBalancesForPayloads.d.ts +2 -4
- package/dist/neutral/payloads/netBalancesForPayloads.d.ts.map +1 -1
- package/dist/neutral/primitives/summary/balances/balancesSummary.d.ts.map +1 -1
- package/dist/neutral/primitives/summary/transfers/transfersSummary.d.ts.map +1 -1
- package/dist/neutral/services/AccountBalanceService.d.ts +1 -2
- package/dist/neutral/services/AccountBalanceService.d.ts.map +1 -1
- package/dist/neutral/services/AccountTransfersService.d.ts +1 -2
- package/dist/neutral/services/AccountTransfersService.d.ts.map +1 -1
- package/dist/neutral/services/BlockProducerService.d.ts +1 -2
- package/dist/neutral/services/BlockProducerService.d.ts.map +1 -1
- package/dist/neutral/services/BlockRewardService.d.ts +1 -2
- package/dist/neutral/services/BlockRewardService.d.ts.map +1 -1
- package/dist/neutral/services/Chain/BaseChainService.d.ts +1 -2
- package/dist/neutral/services/Chain/BaseChainService.d.ts.map +1 -1
- package/dist/neutral/services/Election.d.ts +1 -2
- package/dist/neutral/services/Election.d.ts.map +1 -1
- package/dist/neutral/services/NetworkStakeService.d.ts +1 -2
- package/dist/neutral/services/NetworkStakeService.d.ts.map +1 -1
- package/dist/neutral/services/PendingTransactionsService.d.ts +1 -2
- package/dist/neutral/services/PendingTransactionsService.d.ts.map +1 -1
- package/dist/neutral/services/StakeIntentService/StakeIntentService.d.ts +1 -2
- package/dist/neutral/services/StakeIntentService/StakeIntentService.d.ts.map +1 -1
- package/dist/neutral/services/index.d.ts +0 -3
- package/dist/neutral/services/index.d.ts.map +1 -1
- package/dist/neutral/simple/accountBalance/SimpleAccountBalanceViewer.d.ts +17 -0
- package/dist/neutral/simple/accountBalance/SimpleAccountBalanceViewer.d.ts.map +1 -0
- package/dist/neutral/simple/accountBalance/index.d.ts +2 -0
- package/dist/neutral/simple/accountBalance/index.d.ts.map +1 -0
- package/dist/neutral/simple/gateway/SimpleXyoGatewayRunner.d.ts.map +1 -1
- package/dist/neutral/simple/index.d.ts +2 -0
- package/dist/neutral/simple/index.d.ts.map +1 -1
- package/dist/neutral/simple/timesync/SimpleTimeSyncViewer.d.ts +15 -0
- package/dist/neutral/simple/timesync/SimpleTimeSyncViewer.d.ts.map +1 -0
- package/dist/neutral/simple/timesync/index.d.ts +2 -0
- package/dist/neutral/simple/timesync/index.d.ts.map +1 -0
- package/dist/neutral/viewers/AccountBalance.d.ts +4 -8
- package/dist/neutral/viewers/AccountBalance.d.ts.map +1 -1
- package/dist/neutral/viewers/Block.d.ts +5 -3
- package/dist/neutral/viewers/Block.d.ts.map +1 -1
- package/dist/neutral/viewers/Stake.d.ts +21 -1
- package/dist/neutral/viewers/Stake.d.ts.map +1 -1
- package/dist/neutral/{model → viewers}/StakeEvents.d.ts +1 -1
- package/dist/neutral/viewers/StakeEvents.d.ts.map +1 -0
- package/dist/neutral/viewers/TimeSync.d.ts +1 -2
- package/dist/neutral/viewers/TimeSync.d.ts.map +1 -1
- package/dist/neutral/viewers/index.d.ts +1 -0
- package/dist/neutral/viewers/index.d.ts.map +1 -1
- package/package.json +17 -16
- package/src/block/primitives/blockFromBlockNumber.ts +1 -1
- package/src/block/primitives/frames/calculateFramesFromRange.ts +3 -2
- package/src/block/primitives/transfers/transfersSummary.ts +4 -1
- package/src/model/ChainContext/ChainStakeContext.ts +6 -5
- package/src/model/index.ts +0 -2
- package/src/primitives/step/stepBlockRange.ts +1 -1
- package/src/primitives/step/stepTransferIndex.ts +1 -1
- package/src/primitives/summary/balances/balancesSummary.ts +4 -1
- package/src/primitives/summary/transfers/transfersSummary.ts +4 -1
- package/src/services/AccountBalanceService.ts +1 -2
- package/src/services/AccountTransfersService.ts +1 -3
- package/src/services/BlockProducerService.ts +1 -3
- package/src/services/BlockRewardService.ts +1 -3
- package/src/services/Chain/BaseChainService.ts +1 -3
- package/src/services/Election.ts +1 -3
- package/src/services/NetworkStakeService.ts +1 -2
- package/src/services/PendingTransactionsService.ts +1 -3
- package/src/services/StakeIntentService/StakeIntentService.ts +1 -3
- package/src/services/index.ts +0 -3
- package/src/simple/accountBalance/SimpleAccountBalanceViewer.ts +124 -0
- package/src/simple/accountBalance/index.ts +1 -0
- package/src/simple/gateway/SimpleXyoGatewayRunner.ts +1 -2
- package/src/simple/index.ts +2 -0
- package/src/simple/timesync/SimpleTimeSyncViewer.ts +94 -0
- package/src/simple/timesync/index.ts +1 -0
- package/src/viewers/AccountBalance.ts +4 -8
- package/src/viewers/Block.ts +5 -3
- package/src/viewers/Stake.ts +24 -2
- package/src/{model → viewers}/StakeEvents.ts +1 -1
- package/src/viewers/TimeSync.ts +1 -2
- package/src/viewers/index.ts +1 -0
- package/dist/neutral/model/ChainStake/ChainStakeRead.d.ts +0 -17
- package/dist/neutral/model/ChainStake/ChainStakeRead.d.ts.map +0 -1
- package/dist/neutral/model/ChainStake/ChainStakeStatic.d.ts +0 -7
- package/dist/neutral/model/ChainStake/ChainStakeStatic.d.ts.map +0 -1
- package/dist/neutral/model/ChainStake/ChainStakeWrite.d.ts +0 -6
- package/dist/neutral/model/ChainStake/ChainStakeWrite.d.ts.map +0 -1
- package/dist/neutral/model/ChainStake/index.d.ts +0 -4
- package/dist/neutral/model/ChainStake/index.d.ts.map +0 -1
- package/dist/neutral/model/StakeEvents.d.ts.map +0 -1
- package/dist/neutral/services/Service.d.ts +0 -5
- package/dist/neutral/services/Service.d.ts.map +0 -1
- package/dist/neutral/services/StepStakeService.d.ts +0 -5
- package/dist/neutral/services/StepStakeService.d.ts.map +0 -1
- package/dist/neutral/services/TimeSyncService.d.ts +0 -5
- package/dist/neutral/services/TimeSyncService.d.ts.map +0 -1
- package/src/model/ChainStake/ChainStakeRead.ts +0 -18
- package/src/model/ChainStake/ChainStakeStatic.ts +0 -7
- package/src/model/ChainStake/ChainStakeWrite.ts +0 -5
- package/src/model/ChainStake/index.ts +0 -3
- package/src/services/Service.ts +0 -5
- package/src/services/StepStakeService.ts +0 -4
- package/src/services/TimeSyncService.ts +0 -4
|
@@ -1,14 +1,15 @@
|
|
|
1
|
+
import type {
|
|
2
|
+
StakeEventsViewer, StakeRunner, StakeViewer,
|
|
3
|
+
} from '../../viewers/index.ts'
|
|
1
4
|
import type { ChainIdentity } from '../ChainIdentity.ts'
|
|
2
|
-
import type { ChainStakeRead, ChainStakeWrite } from '../ChainStake/index.ts'
|
|
3
|
-
import type { StakeEventsRead } from '../StakeEvents.ts'
|
|
4
5
|
|
|
5
6
|
export interface ChainStakeContextWrite extends ChainIdentity {
|
|
6
|
-
stake:
|
|
7
|
+
stake: StakeRunner
|
|
7
8
|
}
|
|
8
9
|
|
|
9
10
|
export interface ChainStakeContextRead extends ChainIdentity {
|
|
10
|
-
events:
|
|
11
|
-
stake:
|
|
11
|
+
events: StakeEventsViewer
|
|
12
|
+
stake: StakeViewer
|
|
12
13
|
}
|
|
13
14
|
|
|
14
15
|
export type ChainStakeContext = ChainStakeContextRead & ChainStakeContextWrite
|
package/src/model/index.ts
CHANGED
|
@@ -1,10 +1,8 @@
|
|
|
1
1
|
export * from './ChainContext/index.ts'
|
|
2
2
|
export * from './ChainFork/index.ts'
|
|
3
3
|
export * from './ChainIdentity.ts'
|
|
4
|
-
export * from './ChainStake/index.ts'
|
|
5
4
|
export * from './ChainStore.ts'
|
|
6
5
|
export * from './PayloadMap.ts'
|
|
7
6
|
export * from './Position.ts'
|
|
8
7
|
export * from './RecordKeyType.ts'
|
|
9
|
-
export * from './StakeEvents.ts'
|
|
10
8
|
export * from './summary.ts'
|
|
@@ -4,5 +4,5 @@ import { asXL1BlockRange, StepSizes } from '@xyo-network/xl1-protocol'
|
|
|
4
4
|
export function stepBlockRange({ block, step }: StepIdentity): XL1BlockRange {
|
|
5
5
|
const stepSize = StepSizes[step]
|
|
6
6
|
const start = block - stepSize
|
|
7
|
-
return asXL1BlockRange([start, start + stepSize - 1],
|
|
7
|
+
return asXL1BlockRange([start, start + stepSize - 1], { name: 'stepBlockRange' })
|
|
8
8
|
}
|
|
@@ -13,6 +13,6 @@ export function stepTransferIndex(block: number, step: number) {
|
|
|
13
13
|
rewardTransferCount++
|
|
14
14
|
}
|
|
15
15
|
}
|
|
16
|
-
assertEx(rewardTransferIndex >= 0, () => `
|
|
16
|
+
assertEx(rewardTransferIndex >= 0, () => `Could not find step size for step ${step} at block ${block}`)
|
|
17
17
|
return [rewardTransferIndex, rewardTransferCount]
|
|
18
18
|
}
|
|
@@ -19,7 +19,10 @@ export async function balancesSummary(
|
|
|
19
19
|
const headResult = await context.store.chainMap.get(headHash)
|
|
20
20
|
const headBoundWitness = asBlockBoundWitnessWithStorageMeta(headResult, () => `Head block not found for hash: ${headHash}`, { required: true })
|
|
21
21
|
const rangeStart = asXL1BlockNumber(isDefined(context.windowSize) ? Math.max(headBoundWitness.block - context.windowSize + 1, 0) : 0)
|
|
22
|
-
const ranges = deepCalculateFramesFromRange(asXL1BlockRange(
|
|
22
|
+
const ranges = deepCalculateFramesFromRange(asXL1BlockRange(
|
|
23
|
+
[rangeStart, headBoundWitness.block],
|
|
24
|
+
{ name: 'balancesSummary' },
|
|
25
|
+
))
|
|
23
26
|
const summaries = await Promise.all(ranges.map(range => balancesStepSummaryFromRange(context, range)))
|
|
24
27
|
const balances: Partial<Record<Address, bigint>> = {}
|
|
25
28
|
for (let summary of summaries) {
|
|
@@ -20,7 +20,10 @@ export async function transfersSummary(
|
|
|
20
20
|
const headResult = await context.store.chainMap.get(headHash)
|
|
21
21
|
const headBoundWitness = asBlockBoundWitnessWithStorageMeta(headResult, () => `Head block not found for hash: ${headHash}`, { required: true })
|
|
22
22
|
const rangeStart = asXL1BlockNumber(isDefined(context.windowSize) ? Math.max(headBoundWitness.block - context.windowSize + 1, 0) : 0)
|
|
23
|
-
const ranges = deepCalculateFramesFromRange(asXL1BlockRange(
|
|
23
|
+
const ranges = deepCalculateFramesFromRange(asXL1BlockRange(
|
|
24
|
+
[rangeStart, headBoundWitness.block],
|
|
25
|
+
{ name: 'transfersSummary' },
|
|
26
|
+
))
|
|
24
27
|
const summaries = await Promise.all(ranges.map(range => transfersStepSummaryFromRange(context, range)))
|
|
25
28
|
const transfers: Partial<Record<Address, Partial<Record<Address, bigint>>>> = {}
|
|
26
29
|
for (let summary of summaries) {
|
|
@@ -1,5 +1,4 @@
|
|
|
1
1
|
import type { AccountBalancesViewerMethods, AccountBalanceViewerMethods } from '../viewers/index.ts'
|
|
2
|
-
import type { ServiceInterface } from './Service.ts'
|
|
3
2
|
|
|
4
|
-
export interface AccountBalanceService extends AccountBalancesViewerMethods, AccountBalanceViewerMethods
|
|
3
|
+
export interface AccountBalanceService extends AccountBalancesViewerMethods, AccountBalanceViewerMethods {
|
|
5
4
|
}
|
|
@@ -2,11 +2,9 @@ import type { Address, Hash } from '@xylabs/hex'
|
|
|
2
2
|
import type { Promisable } from '@xylabs/promise'
|
|
3
3
|
import type { AttoXL1 } from '@xyo-network/xl1-protocol'
|
|
4
4
|
|
|
5
|
-
import type { ServiceInterface } from './Service.ts'
|
|
6
|
-
|
|
7
5
|
export interface AccountTransfersProvider {
|
|
8
6
|
transfer(head: Hash, account: Address): Promisable<AttoXL1>
|
|
9
7
|
transfers(head: Hash, accounts: Address[]): Promisable<Partial<Record<Address, AttoXL1>>>
|
|
10
8
|
}
|
|
11
9
|
|
|
12
|
-
export interface AccountTransfersService extends AccountTransfersProvider
|
|
10
|
+
export interface AccountTransfersService extends AccountTransfersProvider {}
|
|
@@ -3,8 +3,6 @@ import type {
|
|
|
3
3
|
BlockBoundWitness, HydratedBlock, IterableRepository,
|
|
4
4
|
} from '@xyo-network/xl1-protocol'
|
|
5
5
|
|
|
6
|
-
import type { ServiceInterface } from './Service.ts'
|
|
7
|
-
|
|
8
6
|
export type NextBlockProducer = IterableRepository<BlockBoundWitness, HydratedBlock | undefined>
|
|
9
7
|
|
|
10
|
-
export interface BlockProducerService extends Addressable, NextBlockProducer
|
|
8
|
+
export interface BlockProducerService extends Addressable, NextBlockProducer {}
|
|
@@ -1,8 +1,6 @@
|
|
|
1
1
|
import type { Promisable } from '@xylabs/promise'
|
|
2
2
|
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
export interface BlockRewardService extends ServiceInterface {
|
|
3
|
+
export interface BlockRewardService {
|
|
6
4
|
// The amount of xl1 to send to the producer from the block reward
|
|
7
5
|
getRewardForBlock(block: bigint): Promisable<bigint>
|
|
8
6
|
}
|
package/src/services/Election.ts
CHANGED
|
@@ -2,9 +2,7 @@ import type { Address } from '@xylabs/hex'
|
|
|
2
2
|
import type { WithHashMeta } from '@xyo-network/payload-model'
|
|
3
3
|
import type { BlockBoundWitness } from '@xyo-network/xl1-protocol'
|
|
4
4
|
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
export interface ElectionService extends ServiceInterface {
|
|
5
|
+
export interface ElectionService {
|
|
8
6
|
|
|
9
7
|
/**
|
|
10
8
|
* Given the current block, get the leader for the next block
|
|
@@ -1,4 +1,3 @@
|
|
|
1
1
|
import type { NetworkStakeStepRewardViewer } from '../viewers/index.ts'
|
|
2
|
-
import type { ServiceInterface } from './Service.ts'
|
|
3
2
|
|
|
4
|
-
export interface NetworkStakeStepRewardService extends NetworkStakeStepRewardViewer
|
|
3
|
+
export interface NetworkStakeStepRewardService extends NetworkStakeStepRewardViewer {}
|
|
@@ -1,8 +1,6 @@
|
|
|
1
1
|
import type { Hash } from '@xylabs/hex'
|
|
2
2
|
import type { SignedHydratedTransaction } from '@xyo-network/xl1-protocol'
|
|
3
3
|
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
export interface PendingTransactionsService extends ServiceInterface {
|
|
4
|
+
export interface PendingTransactionsService {
|
|
7
5
|
getPendingTransactions(head: Hash, limit: number, timeout?: number): Promise<SignedHydratedTransaction[]>
|
|
8
6
|
}
|
|
@@ -1,9 +1,7 @@
|
|
|
1
1
|
import type { Address } from '@xylabs/hex'
|
|
2
2
|
import type { Intent } from '@xyo-network/xl1-protocol'
|
|
3
3
|
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
export interface StakeIntentService extends ServiceInterface {
|
|
4
|
+
export interface StakeIntentService {
|
|
7
5
|
|
|
8
6
|
/**
|
|
9
7
|
* Gets the declared ranges for an address based on historical on-chain data
|
package/src/services/index.ts
CHANGED
|
@@ -8,7 +8,4 @@ export * from './ChainIterator/index.ts'
|
|
|
8
8
|
export * from './Election.ts'
|
|
9
9
|
export * from './NetworkStakeService.ts'
|
|
10
10
|
export * from './PendingTransactionsService.ts'
|
|
11
|
-
export * from './Service.ts'
|
|
12
11
|
export * from './StakeIntentService/index.ts'
|
|
13
|
-
export * from './StepStakeService.ts'
|
|
14
|
-
export * from './TimeSyncService.ts'
|
|
@@ -0,0 +1,124 @@
|
|
|
1
|
+
import { assertEx } from '@xylabs/assert'
|
|
2
|
+
import { exists } from '@xylabs/exists'
|
|
3
|
+
import type { Address, Hash } from '@xylabs/hex'
|
|
4
|
+
import { spanRootAsync } from '@xylabs/telemetry'
|
|
5
|
+
import { isDefined } from '@xylabs/typeof'
|
|
6
|
+
import type { Signed } from '@xyo-network/boundwitness-model'
|
|
7
|
+
import type { WithStorageMeta } from '@xyo-network/payload-model'
|
|
8
|
+
import type {
|
|
9
|
+
BlockBoundWitness, Transfer, XL1BlockNumber, XL1BlockRange,
|
|
10
|
+
} from '@xyo-network/xl1-protocol'
|
|
11
|
+
import {
|
|
12
|
+
asRange, asXL1BlockNumber, asXL1BlockRange, AttoXL1,
|
|
13
|
+
StepSizes,
|
|
14
|
+
TransferSchema,
|
|
15
|
+
} from '@xyo-network/xl1-protocol'
|
|
16
|
+
|
|
17
|
+
import { deepCalculateFramesFromRange, transfersStepSummaryFromRange } from '../../block/index.ts'
|
|
18
|
+
import type { BalanceStepSummaryContext, TransfersStepSummaryContext } from '../../model/index.ts'
|
|
19
|
+
import type { TransfersStepSummary } from '../../payloads/index.ts'
|
|
20
|
+
import { balancesSummary } from '../../primitives/index.ts'
|
|
21
|
+
import type {
|
|
22
|
+
AccountBalanceHistoryItem, AccountBalanceViewer, BlockViewer,
|
|
23
|
+
} from '../../viewers/index.ts'
|
|
24
|
+
|
|
25
|
+
export class SimpleAccountBalanceViewer implements AccountBalanceViewer {
|
|
26
|
+
protected readonly blockViewer: BlockViewer
|
|
27
|
+
protected readonly context: BalanceStepSummaryContext
|
|
28
|
+
protected readonly transferContext: TransfersStepSummaryContext
|
|
29
|
+
|
|
30
|
+
constructor(context: BalanceStepSummaryContext, transferContext: TransfersStepSummaryContext, blockViewer: BlockViewer) {
|
|
31
|
+
this.context = context
|
|
32
|
+
this.transferContext = transferContext
|
|
33
|
+
this.blockViewer = blockViewer
|
|
34
|
+
}
|
|
35
|
+
|
|
36
|
+
async accountBalance(address: Address, headOrRange?: XL1BlockRange | Hash): Promise<AttoXL1> {
|
|
37
|
+
const balances = await this.accountBalances([address], headOrRange)
|
|
38
|
+
return balances[address] ?? AttoXL1(0n)
|
|
39
|
+
}
|
|
40
|
+
|
|
41
|
+
async accountBalanceHistory(address: Address, headOrRange?: XL1BlockRange | Hash): Promise<AccountBalanceHistoryItem[]> {
|
|
42
|
+
const range = asRange(headOrRange)
|
|
43
|
+
const startingRange = asXL1BlockRange(range ?? [0, await this.blockViewer.currentBlockNumber()], true)
|
|
44
|
+
const blockNumbers = await this.distillTransferHistory(address, startingRange)
|
|
45
|
+
const blocks = (await Promise.all(blockNumbers.map(async bn => await this.blockViewer.blockByNumber(bn)))).filter(exists)
|
|
46
|
+
const result: AccountBalanceHistoryItem[] = []
|
|
47
|
+
for (const block of blocks) {
|
|
48
|
+
const transferIndexes = block[0].payload_schemas.map((schema, index) => schema === TransferSchema ? index : undefined).filter(exists)
|
|
49
|
+
const transfers = transferIndexes.map((index) => {
|
|
50
|
+
const hash = block[0].payload_hashes[index]
|
|
51
|
+
return assertEx(
|
|
52
|
+
block[1].find(p => p._hash === hash) as WithStorageMeta<Transfer>,
|
|
53
|
+
() => `Error: Could not find Transfer with hash ${hash} in block ${block[0]._hash}`,
|
|
54
|
+
)
|
|
55
|
+
}).filter(exists).filter(t => ((t.from === address) || (isDefined(t.transfers[address]))))
|
|
56
|
+
if (transfers.length === 0) {
|
|
57
|
+
continue
|
|
58
|
+
}
|
|
59
|
+
const pairs: [WithStorageMeta<Signed<BlockBoundWitness>>, WithStorageMeta<Transfer>][] = (transfers.map((transfer) => {
|
|
60
|
+
return [block[0], transfer]
|
|
61
|
+
}))
|
|
62
|
+
result.push(...pairs.map(([block, transfer]) => [block,
|
|
63
|
+
null,
|
|
64
|
+
transfer] satisfies AccountBalanceHistoryItem))
|
|
65
|
+
}
|
|
66
|
+
return result
|
|
67
|
+
}
|
|
68
|
+
|
|
69
|
+
async accountBalances(address: Address[], _headOrRange?: XL1BlockRange | Hash): Promise<Partial<Record<Address, AttoXL1>>> {
|
|
70
|
+
return await spanRootAsync('balances', async () => {
|
|
71
|
+
const summary = await balancesSummary(
|
|
72
|
+
this.context,
|
|
73
|
+
)
|
|
74
|
+
const result: Record<Address, AttoXL1> = {}
|
|
75
|
+
for (const addr of address) {
|
|
76
|
+
const summaryBalance = summary[addr] ?? 0n
|
|
77
|
+
result[addr] = AttoXL1(summaryBalance < 0n ? 0n : summaryBalance)
|
|
78
|
+
}
|
|
79
|
+
return result
|
|
80
|
+
})
|
|
81
|
+
}
|
|
82
|
+
|
|
83
|
+
accountBalancesHistories(_addresses: Address[], _rangeOrHash?: XL1BlockRange | Hash): Promise<Partial<Record<Address, AccountBalanceHistoryItem[]>>> {
|
|
84
|
+
throw new Error('Method not implemented.')
|
|
85
|
+
}
|
|
86
|
+
|
|
87
|
+
private async distillTransferHistory(address: Address, range: XL1BlockRange, max: number = 50): Promise<XL1BlockNumber[]> {
|
|
88
|
+
if ((range[1] - range[0]) <= StepSizes[0] || max <= 1) {
|
|
89
|
+
return Array.from({ length: range[1] - range[0] + 1 }, (_, i) => range[1] - i).slice(0, max).map(n => asXL1BlockNumber(n, true))
|
|
90
|
+
}
|
|
91
|
+
const frames = deepCalculateFramesFromRange(asXL1BlockRange(range, true))
|
|
92
|
+
const transferSummaryPairs = await Promise.all(frames.map(
|
|
93
|
+
async (frame) => {
|
|
94
|
+
return [frame, await transfersStepSummaryFromRange(this.transferContext, frame)]
|
|
95
|
+
},
|
|
96
|
+
)) as [XL1BlockRange, WithStorageMeta<TransfersStepSummary>][]
|
|
97
|
+
|
|
98
|
+
const filteredTransferSummaryPairs = transferSummaryPairs.filter(([_, summary]) => Object.keys(summary.transfers).includes(address))
|
|
99
|
+
|
|
100
|
+
// sort it latest to earliest
|
|
101
|
+
const sortedTransferSummaryPairs = filteredTransferSummaryPairs.toSorted((a, b) => {
|
|
102
|
+
return b[0][1] - a[0][1]
|
|
103
|
+
})
|
|
104
|
+
|
|
105
|
+
const resultBlockNumbers: Set<XL1BlockNumber> = new Set()
|
|
106
|
+
for (const [frame] of sortedTransferSummaryPairs) {
|
|
107
|
+
if ((frame[1] - frame[0] + 1) > StepSizes[0]) {
|
|
108
|
+
const values = await this.distillTransferHistory(address, asXL1BlockRange([frame[0], frame[1] - 1], true), max - resultBlockNumbers.size)
|
|
109
|
+
for (const value of values) {
|
|
110
|
+
resultBlockNumbers.add(value)
|
|
111
|
+
}
|
|
112
|
+
resultBlockNumbers.add(frame[1])
|
|
113
|
+
} else {
|
|
114
|
+
for (let i = frame[0]; i <= frame[1]; i++) {
|
|
115
|
+
resultBlockNumbers.add(i)
|
|
116
|
+
}
|
|
117
|
+
}
|
|
118
|
+
if (resultBlockNumbers.size >= max) {
|
|
119
|
+
break
|
|
120
|
+
}
|
|
121
|
+
}
|
|
122
|
+
return [...resultBlockNumbers].toSorted((a, b) => b - a).slice(0, max)
|
|
123
|
+
}
|
|
124
|
+
}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export * from './SimpleAccountBalanceViewer.ts'
|
|
@@ -81,8 +81,7 @@ export class SimpleXyoGatewayRunner implements XyoGatewayRunner {
|
|
|
81
81
|
const signedTx = await signer.signTransaction(tx)
|
|
82
82
|
await this.addPayloadsToDataLakes(signedTx[1])
|
|
83
83
|
return [await runner.broadcastTransaction(
|
|
84
|
-
[
|
|
85
|
-
await PayloadBuilder.addStorageMeta(signedTx[1])],
|
|
84
|
+
[signedTx[0], signedTx[1]],
|
|
86
85
|
), signedTx]
|
|
87
86
|
}
|
|
88
87
|
|
package/src/simple/index.ts
CHANGED
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
export * from './accountBalance/index.ts'
|
|
1
2
|
export * from './client/index.ts'
|
|
2
3
|
export * from './datalake/index.ts'
|
|
3
4
|
export * from './gateway/index.ts'
|
|
@@ -5,3 +6,4 @@ export * from './network/index.ts'
|
|
|
5
6
|
export * from './permissions/index.ts'
|
|
6
7
|
export * from './runner/index.ts'
|
|
7
8
|
export * from './signer/index.ts'
|
|
9
|
+
export * from './timesync/index.ts'
|
|
@@ -0,0 +1,94 @@
|
|
|
1
|
+
import { assertEx } from '@xylabs/assert'
|
|
2
|
+
import type { Hash } from '@xylabs/hex'
|
|
3
|
+
import { asHash } from '@xylabs/hex'
|
|
4
|
+
import type { Promisable } from '@xylabs/promise'
|
|
5
|
+
import { isDefined } from '@xylabs/typeof'
|
|
6
|
+
import type { TimeDomain, TimePayload } from '@xyo-network/xl1-protocol'
|
|
7
|
+
import {
|
|
8
|
+
asTimePayload, asXL1BlockNumber, TimeSchema,
|
|
9
|
+
} from '@xyo-network/xl1-protocol'
|
|
10
|
+
import type { Provider } from 'ethers'
|
|
11
|
+
|
|
12
|
+
import type { BlockViewer, TimeSyncViewer } from '../../viewers/index.ts'
|
|
13
|
+
|
|
14
|
+
export class SimpleTimeSyncViewer implements TimeSyncViewer {
|
|
15
|
+
protected readonly blockViewer: BlockViewer
|
|
16
|
+
protected readonly ethProvider?: Provider
|
|
17
|
+
|
|
18
|
+
constructor(blockViewer: BlockViewer, ethProvider?: Provider) {
|
|
19
|
+
this.blockViewer = blockViewer
|
|
20
|
+
this.ethProvider = ethProvider
|
|
21
|
+
}
|
|
22
|
+
|
|
23
|
+
async convertTime(fromDomain: TimeDomain, toDomain: TimeDomain, from: number): Promise<number> {
|
|
24
|
+
switch (fromDomain) {
|
|
25
|
+
case 'xl1': {
|
|
26
|
+
const [block, payloads] = assertEx(await this.blockViewer.blockByNumber(asXL1BlockNumber(from, true)), () => 'Block not found')
|
|
27
|
+
const timeSchemaIndex = block.payload_schemas.indexOf(TimeSchema)
|
|
28
|
+
const hash = timeSchemaIndex === -1 ? undefined : block.payload_hashes[timeSchemaIndex]
|
|
29
|
+
const timePayload = asTimePayload(isDefined(hash) ? payloads.find(p => p._hash === hash) : undefined)
|
|
30
|
+
if (timePayload === undefined) return 0
|
|
31
|
+
switch (toDomain) {
|
|
32
|
+
case 'xl1': {
|
|
33
|
+
return timePayload.xl1 ?? 0
|
|
34
|
+
}
|
|
35
|
+
case 'epoch': {
|
|
36
|
+
return timePayload.epoch ?? 0
|
|
37
|
+
}
|
|
38
|
+
case 'ethereum': {
|
|
39
|
+
return timePayload.ethereum ?? 0
|
|
40
|
+
}
|
|
41
|
+
default: {
|
|
42
|
+
throw new Error(`Unsupported to toDomain: ${toDomain}`)
|
|
43
|
+
}
|
|
44
|
+
}
|
|
45
|
+
}
|
|
46
|
+
default: {
|
|
47
|
+
throw new Error(`Unsupported from fromDomain: ${fromDomain}`)
|
|
48
|
+
}
|
|
49
|
+
}
|
|
50
|
+
}
|
|
51
|
+
|
|
52
|
+
async currentTime(domain: TimeDomain): Promise<[string, number]> {
|
|
53
|
+
switch (domain) {
|
|
54
|
+
case 'xl1': {
|
|
55
|
+
return ['xl1', (await this.blockViewer.currentBlock())?.[0].block ?? -1]
|
|
56
|
+
}
|
|
57
|
+
case 'epoch': {
|
|
58
|
+
return ['epoch', Date.now()]
|
|
59
|
+
}
|
|
60
|
+
case 'ethereum': {
|
|
61
|
+
return ['ethereum', (await this.ethProvider?.getBlockNumber()) ?? 0]
|
|
62
|
+
}
|
|
63
|
+
default: {
|
|
64
|
+
throw new Error(`Unknown time domain: ${domain}`)
|
|
65
|
+
}
|
|
66
|
+
}
|
|
67
|
+
}
|
|
68
|
+
|
|
69
|
+
async currentTimeAndHash(domain: TimeDomain): Promise<[number, Hash | null]> {
|
|
70
|
+
switch (domain) {
|
|
71
|
+
case 'xl1': {
|
|
72
|
+
const [head] = await this.blockViewer.currentBlock()
|
|
73
|
+
return [head.block, head._hash]
|
|
74
|
+
}
|
|
75
|
+
case 'epoch': {
|
|
76
|
+
return [Date.now(), null]
|
|
77
|
+
}
|
|
78
|
+
case 'ethereum': {
|
|
79
|
+
const provider = assertEx(this.ethProvider, () => 'Ethereum provider not configured')
|
|
80
|
+
const blockNumber = (await provider.getBlockNumber()) ?? 0
|
|
81
|
+
const block = await provider.getBlock(blockNumber)
|
|
82
|
+
const blockHash = asHash(assertEx(block?.hash, () => 'Block hash not found'), true)
|
|
83
|
+
return [blockNumber, blockHash]
|
|
84
|
+
}
|
|
85
|
+
default: {
|
|
86
|
+
throw new Error(`Unknown time domain: ${domain}`)
|
|
87
|
+
}
|
|
88
|
+
}
|
|
89
|
+
}
|
|
90
|
+
|
|
91
|
+
currentTimePayload(): Promisable<TimePayload> {
|
|
92
|
+
throw new Error('Method not implemented.')
|
|
93
|
+
}
|
|
94
|
+
}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export * from './SimpleTimeSyncViewer.ts'
|
|
@@ -15,17 +15,13 @@ export type AccountBalanceHistoryItem = [
|
|
|
15
15
|
]
|
|
16
16
|
|
|
17
17
|
export interface AccountBalancesViewerMethods {
|
|
18
|
-
accountBalances(address: Address[],
|
|
19
|
-
|
|
20
|
-
accountBalancesHistories(address: Address[], head?: Hash): Promisable<Partial<Record<Address, AccountBalanceHistoryItem[]>>>
|
|
21
|
-
accountBalancesHistories(address: Address[], range?: XL1BlockRange): Promisable<Partial<Record<Address, AccountBalanceHistoryItem[]>>>
|
|
18
|
+
accountBalances(address: Address[], headOrRange?: Hash | XL1BlockRange): Promisable<Partial<Record<Address, AttoXL1>>>
|
|
19
|
+
accountBalancesHistories(address: Address[], headOrRange?: Hash | XL1BlockRange): Promisable<Partial<Record<Address, AccountBalanceHistoryItem[]>>>
|
|
22
20
|
}
|
|
23
21
|
|
|
24
22
|
export interface AccountBalanceViewerMethods {
|
|
25
|
-
accountBalance(address: Address,
|
|
26
|
-
|
|
27
|
-
accountBalanceHistory(address: Address, head?: Hash): Promisable<AccountBalanceHistoryItem[]>
|
|
28
|
-
accountBalanceHistory(address: Address, range?: XL1BlockRange): Promisable<AccountBalanceHistoryItem[]>
|
|
23
|
+
accountBalance(address: Address, headOrRange?: Hash | XL1BlockRange): Promisable<AttoXL1>
|
|
24
|
+
accountBalanceHistory(address: Address, headOrRange?: Hash | XL1BlockRange): Promisable<AccountBalanceHistoryItem[]>
|
|
29
25
|
}
|
|
30
26
|
|
|
31
27
|
export interface AccountBalanceViewer extends AccountBalanceViewerMethods {}
|
package/src/viewers/Block.ts
CHANGED
|
@@ -1,13 +1,15 @@
|
|
|
1
1
|
import type { Hash } from '@xylabs/hex'
|
|
2
2
|
import type { Promisable } from '@xylabs/promise'
|
|
3
|
-
import type { HydratedBlock } from '@xyo-network/xl1-protocol'
|
|
3
|
+
import type { HydratedBlock, XL1BlockNumber } from '@xyo-network/xl1-protocol'
|
|
4
4
|
|
|
5
5
|
export interface BlockViewierMethods {
|
|
6
6
|
blockByHash(hash: Hash): Promisable<HydratedBlock | null>
|
|
7
|
-
blockByNumber(
|
|
7
|
+
blockByNumber(block: XL1BlockNumber): Promisable<HydratedBlock | null>
|
|
8
8
|
blocksByHash(hash: Hash, limit?: number): Promisable<HydratedBlock[]>
|
|
9
9
|
|
|
10
10
|
currentBlock(): Promisable<HydratedBlock>
|
|
11
11
|
currentBlockHash(): Promisable<Hash>
|
|
12
|
-
currentBlockNumber(): Promisable<
|
|
12
|
+
currentBlockNumber(): Promisable<XL1BlockNumber>
|
|
13
13
|
}
|
|
14
|
+
|
|
15
|
+
export interface BlockViewer extends BlockViewierMethods {}
|
package/src/viewers/Stake.ts
CHANGED
|
@@ -2,12 +2,34 @@ import type { Address } from '@xylabs/hex'
|
|
|
2
2
|
import type { Promisable } from '@xylabs/promise'
|
|
3
3
|
|
|
4
4
|
import type { Position } from '../model/index.ts'
|
|
5
|
+
import type { StakeEventsViewer } from './StakeEvents.ts'
|
|
6
|
+
|
|
7
|
+
export interface StakeViewerProperties {
|
|
8
|
+
minWithdrawalBlocks: number
|
|
9
|
+
rewardsContract: Address
|
|
10
|
+
stakingTokenAddress: Address
|
|
11
|
+
}
|
|
5
12
|
|
|
6
13
|
export interface StakeViewerMethods {
|
|
7
14
|
stakeById(id: number): Promisable<Position>
|
|
8
15
|
stakeByStaker(staker: Address, slot: number): Promisable<Position>
|
|
9
|
-
/* @deprecated use stakesByStaker */
|
|
10
|
-
stakedByStaker(staker: Address): Promisable<Address[]>
|
|
11
16
|
stakesByStaked(staked: Address): Promisable<Position[]>
|
|
12
17
|
stakesByStaker(staker: Address): Promisable<Position[]>
|
|
13
18
|
}
|
|
19
|
+
|
|
20
|
+
export interface StakeViewer extends StakeViewerMethods, StakeViewerProperties {
|
|
21
|
+
active(time?: number): Promisable<bigint>
|
|
22
|
+
activeByAddressStaked(address: string, time?: number): Promisable<bigint>
|
|
23
|
+
activeByStaker(address: string, time?: number): Promisable<bigint>
|
|
24
|
+
pending(time?: number): Promisable<bigint>
|
|
25
|
+
pendingByStaker(staker: string, time?: number): Promisable<bigint>
|
|
26
|
+
withdrawn(time?: number): Promisable<bigint>
|
|
27
|
+
withdrawnByStaker(staker: string, time?: number): Promisable<bigint>
|
|
28
|
+
}
|
|
29
|
+
|
|
30
|
+
export interface StakeRunner extends StakeViewer {
|
|
31
|
+
events: StakeEventsViewer
|
|
32
|
+
addStake(staked: string, amount: bigint): Promise<boolean>
|
|
33
|
+
removeStake(slot: bigint): Promise<boolean>
|
|
34
|
+
withdrawStake(slot: bigint): Promise<boolean>
|
|
35
|
+
}
|
|
@@ -33,7 +33,7 @@ export interface StakeEvent<TName extends StakeEventName = StakeEventName> exten
|
|
|
33
33
|
args: StakeEventArgs
|
|
34
34
|
}
|
|
35
35
|
|
|
36
|
-
export interface
|
|
36
|
+
export interface StakeEventsViewer {
|
|
37
37
|
positionCount(range: [number, number | 'latest']): Promisable<number>
|
|
38
38
|
stakeEvents<TName extends StakeEventName>(range: [number, number | 'latest'], filter?: StakeEventFilter<TName>): Promisable<StakeEvent<TName>[]>
|
|
39
39
|
}
|
package/src/viewers/TimeSync.ts
CHANGED
|
@@ -1,4 +1,3 @@
|
|
|
1
|
-
import type { Hash } from '@xylabs/hex'
|
|
2
1
|
import type { Promisable } from '@xylabs/promise'
|
|
3
2
|
import type { TimeDomain, TimePayload } from '@xyo-network/xl1-protocol'
|
|
4
3
|
|
|
@@ -10,7 +9,7 @@ export interface TimeSyncViewerMethods {
|
|
|
10
9
|
currentTime(domain: TimeDomain): Promisable<[string, number]>
|
|
11
10
|
|
|
12
11
|
/** Get the current time for a given domain */
|
|
13
|
-
currentTimeAndHash(domain: TimeDomain): Promisable<[number,
|
|
12
|
+
currentTimeAndHash(domain: TimeDomain): Promisable<[number, string | null]>
|
|
14
13
|
|
|
15
14
|
/** Create a TimePayload with the current time from all configured domains */
|
|
16
15
|
currentTimePayload(): Promisable<TimePayload>
|
package/src/viewers/index.ts
CHANGED
|
@@ -5,6 +5,7 @@ export * from './ChainContract.ts'
|
|
|
5
5
|
export * from './Fork.ts'
|
|
6
6
|
export * from './NetworkStakeStepReward.ts'
|
|
7
7
|
export * from './Stake.ts'
|
|
8
|
+
export * from './StakeEvents.ts'
|
|
8
9
|
export * from './StakeTotals.ts'
|
|
9
10
|
export * from './StepStake.ts'
|
|
10
11
|
export * from './TimeSync.ts'
|
|
@@ -1,17 +0,0 @@
|
|
|
1
|
-
import type { Address } from '@xylabs/hex';
|
|
2
|
-
import type { Promisable } from '@xylabs/promise';
|
|
3
|
-
import type { Position } from '../Position.ts';
|
|
4
|
-
export interface ChainStakeRead {
|
|
5
|
-
active(time?: number): Promisable<bigint>;
|
|
6
|
-
activeByAddressStaked(address: string, time?: number): Promisable<bigint>;
|
|
7
|
-
activeByStaker(address: string, time?: number): Promisable<bigint>;
|
|
8
|
-
pending(time?: number): Promisable<bigint>;
|
|
9
|
-
pendingByStaker(staker: string, time?: number): Promisable<bigint>;
|
|
10
|
-
stakeById(id: number, time?: number): Promisable<Position>;
|
|
11
|
-
stakeByStaker(staker: Address, slot: number, time?: number): Promisable<Position>;
|
|
12
|
-
stakesByStaked(staked: Address, range?: [number, number | undefined]): Promisable<Position[]>;
|
|
13
|
-
stakesByStaker(staker: Address, range?: [number, number | undefined]): Promisable<Position[]>;
|
|
14
|
-
withdrawn(time?: number): Promisable<bigint>;
|
|
15
|
-
withdrawnByStaker(staker: string, time?: number): Promisable<bigint>;
|
|
16
|
-
}
|
|
17
|
-
//# sourceMappingURL=ChainStakeRead.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"ChainStakeRead.d.ts","sourceRoot":"","sources":["../../../../src/model/ChainStake/ChainStakeRead.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,aAAa,CAAA;AAC1C,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAA;AAEjD,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,gBAAgB,CAAA;AAE9C,MAAM,WAAW,cAAc;IAC7B,MAAM,CAAC,IAAI,CAAC,EAAE,MAAM,GAAG,UAAU,CAAC,MAAM,CAAC,CAAA;IACzC,qBAAqB,CAAC,OAAO,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,MAAM,GAAG,UAAU,CAAC,MAAM,CAAC,CAAA;IACzE,cAAc,CAAC,OAAO,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,MAAM,GAAG,UAAU,CAAC,MAAM,CAAC,CAAA;IAClE,OAAO,CAAC,IAAI,CAAC,EAAE,MAAM,GAAG,UAAU,CAAC,MAAM,CAAC,CAAA;IAC1C,eAAe,CAAC,MAAM,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,MAAM,GAAG,UAAU,CAAC,MAAM,CAAC,CAAA;IAClE,SAAS,CAAC,EAAE,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,MAAM,GAAG,UAAU,CAAC,QAAQ,CAAC,CAAA;IAC1D,aAAa,CAAC,MAAM,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,MAAM,GAAG,UAAU,CAAC,QAAQ,CAAC,CAAA;IACjF,cAAc,CAAC,MAAM,EAAE,OAAO,EAAE,KAAK,CAAC,EAAE,CAAC,MAAM,EAAE,MAAM,GAAG,SAAS,CAAC,GAAG,UAAU,CAAC,QAAQ,EAAE,CAAC,CAAA;IAC7F,cAAc,CAAC,MAAM,EAAE,OAAO,EAAE,KAAK,CAAC,EAAE,CAAC,MAAM,EAAE,MAAM,GAAG,SAAS,CAAC,GAAG,UAAU,CAAC,QAAQ,EAAE,CAAC,CAAA;IAC7F,SAAS,CAAC,IAAI,CAAC,EAAE,MAAM,GAAG,UAAU,CAAC,MAAM,CAAC,CAAA;IAC5C,iBAAiB,CAAC,MAAM,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,MAAM,GAAG,UAAU,CAAC,MAAM,CAAC,CAAA;CACrE"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"ChainStakeStatic.d.ts","sourceRoot":"","sources":["../../../../src/model/ChainStake/ChainStakeStatic.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,aAAa,CAAA;AAE1C,MAAM,WAAW,gBAAgB;IAC/B,mBAAmB,EAAE,MAAM,CAAA;IAC3B,eAAe,EAAE,OAAO,CAAA;IACxB,mBAAmB,EAAE,OAAO,CAAA;CAC7B"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"ChainStakeWrite.d.ts","sourceRoot":"","sources":["../../../../src/model/ChainStake/ChainStakeWrite.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,eAAe;IAC9B,QAAQ,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,CAAA;IAC1D,WAAW,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,CAAA;IAC3C,aAAa,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,CAAA;CAC9C"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/model/ChainStake/index.ts"],"names":[],"mappings":"AAAA,cAAc,qBAAqB,CAAA;AACnC,cAAc,uBAAuB,CAAA;AACrC,cAAc,sBAAsB,CAAA"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"StakeEvents.d.ts","sourceRoot":"","sources":["../../../src/model/StakeEvents.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,aAAa,CAAA;AAC1C,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,gBAAgB,CAAA;AAChD,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAA;AAEjD,eAAO,MAAM,eAAe,2DAA4D,CAAA;AACxF,MAAM,MAAM,cAAc,GAAG,OAAO,eAAe,CAAC,MAAM,CAAC,CAAA;AAE3D,MAAM,WAAW,aAAa,CAAC,KAAK,SAAS,MAAM,GAAG,MAAM,EAAE,KAAK,SAAS,UAAU,GAAG,EAAE;IACzF,IAAI,EAAE,KAAK,CAAA;IACX,IAAI,EAAE,KAAK,CAAA;IACX,IAAI,EAAE,MAAM,CAAA;CACb;AAED,MAAM,WAAW,WAAW,CAAC,KAAK,SAAS,MAAM,GAAG,MAAM;IACxD,IAAI,CAAC,EAAE,KAAK,CAAA;IACZ,IAAI,CAAC,EAAE,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;CACxB;AAED,MAAM,WAAW,cAAc;IAC7B,MAAM,EAAE,MAAM,CAAA;IACd,EAAE,EAAE,MAAM,CAAA;IACV,MAAM,EAAE,OAAO,CAAA;IACf,MAAM,EAAE,OAAO,CAAA;CAChB;AAED,MAAM,MAAM,oBAAoB,GAAG,OAAO,CAAC,IAAI,CAAC,cAAc,EAAE,QAAQ,GAAG,QAAQ,GAAG,IAAI,CAAC,CAAC,CAAA;AAE5F,MAAM,WAAW,gBAAgB,CAAC,KAAK,SAAS,cAAc,GAAG,cAAc,CAAE,SAAQ,WAAW,CAAC,KAAK,CAAC;IACzG,IAAI,CAAC,EAAE,oBAAoB,CAAA;CAC5B;AAED,MAAM,WAAW,UAAU,CAAC,KAAK,SAAS,cAAc,GAAG,cAAc,CAAE,SAAQ,aAAa,CAAC,KAAK,CAAC;IACrG,IAAI,EAAE,cAAc,CAAA;CACrB;AAED,MAAM,WAAW,eAAe;IAC9B,aAAa,CAAC,KAAK,EAAE,CAAC,MAAM,EAAE,MAAM,GAAG,QAAQ,CAAC,GAAG,UAAU,CAAC,MAAM,CAAC,CAAA;IACrE,WAAW,CAAC,KAAK,SAAS,cAAc,EAAE,KAAK,EAAE,CAAC,MAAM,EAAE,MAAM,GAAG,QAAQ,CAAC,EAAE,MAAM,CAAC,EAAE,gBAAgB,CAAC,KAAK,CAAC,GAAG,UAAU,CAAC,UAAU,CAAC,KAAK,CAAC,EAAE,CAAC,CAAA;CACjJ"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"Service.d.ts","sourceRoot":"","sources":["../../../src/services/Service.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,aAAa,CAAA;AAEvC,MAAM,WAAW,gBAAgB;IAC/B,IAAI,CAAC,IAAI,EAAE,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAA;CAChC"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"StepStakeService.d.ts","sourceRoot":"","sources":["../../../src/services/StepStakeService.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,qBAAqB,CAAA;AAC1D,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,cAAc,CAAA;AAEpD,MAAM,WAAW,gBAAiB,SAAQ,gBAAgB,EAAE,eAAe;CAAG"}
|