@xyo-network/xl1-protocol-sdk 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.
- 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/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/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/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
|
@@ -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,18 +0,0 @@
|
|
|
1
|
-
import type { Address } from '@xylabs/hex'
|
|
2
|
-
import type { Promisable } from '@xylabs/promise'
|
|
3
|
-
|
|
4
|
-
import type { Position } from '../Position.ts'
|
|
5
|
-
|
|
6
|
-
export interface ChainStakeRead {
|
|
7
|
-
active(time?: number): Promisable<bigint>
|
|
8
|
-
activeByAddressStaked(address: string, time?: number): Promisable<bigint>
|
|
9
|
-
activeByStaker(address: string, time?: number): Promisable<bigint>
|
|
10
|
-
pending(time?: number): Promisable<bigint>
|
|
11
|
-
pendingByStaker(staker: string, time?: number): Promisable<bigint>
|
|
12
|
-
stakeById(id: number, time?: number): Promisable<Position>
|
|
13
|
-
stakeByStaker(staker: Address, slot: number, time?: number): Promisable<Position>
|
|
14
|
-
stakesByStaked(staked: Address, range?: [number, number | undefined]): Promisable<Position[]>
|
|
15
|
-
stakesByStaker(staker: Address, range?: [number, number | undefined]): Promisable<Position[]>
|
|
16
|
-
withdrawn(time?: number): Promisable<bigint>
|
|
17
|
-
withdrawnByStaker(staker: string, time?: number): Promisable<bigint>
|
|
18
|
-
}
|