@xyo-network/xl1-providers 1.26.12 → 1.26.13
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/browser/SimpleXyoViewer.d.ts +18 -18
- package/dist/neutral/SimpleXyoViewer.d.ts +18 -18
- package/dist/node/SimpleXyoViewer.d.ts +18 -18
- package/package.json +29 -15
- package/src/NodeXyoViewer.ts +0 -36
- package/src/SimpleNetworkStakeViewer.ts +0 -69
- package/src/SimpleStepRewards/SimpleStepRewardsByPositionViewer.ts +0 -118
- package/src/SimpleStepRewards/SimpleStepRewardsByStakerViewer.ts +0 -117
- package/src/SimpleStepRewards/SimpleStepRewardsByStepViewer.ts +0 -121
- package/src/SimpleStepRewards/SimpleStepRewardsTotalViewer.ts +0 -61
- package/src/SimpleStepRewards/SimpleStepRewardsViewer.ts +0 -83
- package/src/SimpleStepRewards/index.ts +0 -5
- package/src/SimpleStepRewards/primitives/index.ts +0 -3
- package/src/SimpleStepRewards/primitives/networkStakeStepRewardEarned.ts +0 -39
- package/src/SimpleStepRewards/primitives/networkStakeStepRewardEarnedForPosition.ts +0 -49
- package/src/SimpleStepRewards/primitives/networkStakeStepRewardEarnedForStaker.ts +0 -45
- package/src/SimpleStepViewer.ts +0 -104
- package/src/SimpleXyoConnectionRunner.ts +0 -54
- package/src/SimpleXyoConnectionViewer.ts +0 -47
- package/src/SimpleXyoViewer.ts +0 -473
- package/src/buildLocalGateway.ts +0 -114
- package/src/buildProviderLocator.ts +0 -150
- package/src/buildProviderLocatorV2.ts +0 -113
- package/src/buildSimpleXyoSignerV2.ts +0 -13
- package/src/index.ts +0 -11
- package/src/registerHelpers.ts +0 -80
package/src/SimpleXyoViewer.ts
DELETED
|
@@ -1,473 +0,0 @@
|
|
|
1
|
-
import type { Tracer } from '@opentelemetry/api'
|
|
2
|
-
import type {
|
|
3
|
-
Address,
|
|
4
|
-
Hash, Promisable,
|
|
5
|
-
} from '@xylabs/sdk-js'
|
|
6
|
-
import {
|
|
7
|
-
assertEx,
|
|
8
|
-
toAddress,
|
|
9
|
-
} from '@xylabs/sdk-js'
|
|
10
|
-
import type { Payload, WithHashMeta } from '@xyo-network/sdk-js'
|
|
11
|
-
import type {
|
|
12
|
-
AccountBalanceViewer,
|
|
13
|
-
AttoXL1,
|
|
14
|
-
BlockRate,
|
|
15
|
-
BlockViewer, ChainContractViewer, ChainId,
|
|
16
|
-
ChainQualifiedConfig, Count,
|
|
17
|
-
FinalizationViewer,
|
|
18
|
-
ForkHistory,
|
|
19
|
-
MempoolViewer, NetworkStakeStepRewardsByPositionViewer, NetworkStakeViewer, Position,
|
|
20
|
-
SingleTimeConfig,
|
|
21
|
-
StakeViewer,
|
|
22
|
-
StepIdentity, StepIdentityString,
|
|
23
|
-
StepIndex,
|
|
24
|
-
StepViewer,
|
|
25
|
-
TimeDurations,
|
|
26
|
-
TimeSyncViewer,
|
|
27
|
-
TransactionViewer,
|
|
28
|
-
XL1BlockNumber, XL1BlockRange, XL1RangeMultipliers,
|
|
29
|
-
XyoViewer,
|
|
30
|
-
} from '@xyo-network/xl1-protocol-lib'
|
|
31
|
-
import {
|
|
32
|
-
AccountBalanceViewerMoniker,
|
|
33
|
-
asAttoXL1,
|
|
34
|
-
asXL1BlockRange,
|
|
35
|
-
BlockViewerMoniker,
|
|
36
|
-
ChainContractViewerMoniker,
|
|
37
|
-
FinalizationViewerMoniker,
|
|
38
|
-
MempoolViewerMoniker, NetworkStakeStepRewardsByPositionViewerMoniker,
|
|
39
|
-
NetworkStakeViewerMoniker, StakeViewerMoniker, StepViewerMoniker, TimeSyncViewerMoniker, TransactionViewerMoniker, XYO_NETWORK_STAKING_ADDRESS,
|
|
40
|
-
XYO_ZERO_ADDRESS,
|
|
41
|
-
XyoViewerMoniker,
|
|
42
|
-
} from '@xyo-network/xl1-protocol-lib'
|
|
43
|
-
import {
|
|
44
|
-
AbstractCreatableProvider,
|
|
45
|
-
allStakersForStep,
|
|
46
|
-
blockRangeSteps,
|
|
47
|
-
creatableProvider,
|
|
48
|
-
CreatableProviderParams,
|
|
49
|
-
externalBlockRangeFromStep,
|
|
50
|
-
externalBlockRangeFromXL1BlockRange,
|
|
51
|
-
networkStakeStepRewardPositionWeight,
|
|
52
|
-
stepRewardTotal,
|
|
53
|
-
toStepIdentityString,
|
|
54
|
-
weightedStakeForRangeByPosition,
|
|
55
|
-
withContextCacheResponse,
|
|
56
|
-
} from '@xyo-network/xl1-protocol-sdk'
|
|
57
|
-
|
|
58
|
-
/** Configuration params for SimpleXyoViewer. */
|
|
59
|
-
export interface SimpleXyoViewerParams extends CreatableProviderParams {
|
|
60
|
-
initRewardsCache?: boolean
|
|
61
|
-
rewardMultipliers?: XL1RangeMultipliers
|
|
62
|
-
}
|
|
63
|
-
|
|
64
|
-
/** Full-featured XYO viewer providing access to blocks, transactions, staking, rewards, and account balances. */
|
|
65
|
-
@creatableProvider()
|
|
66
|
-
export class SimpleXyoViewer<TParams extends SimpleXyoViewerParams = SimpleXyoViewerParams> extends AbstractCreatableProvider<TParams> implements XyoViewer {
|
|
67
|
-
static readonly defaultMoniker = XyoViewerMoniker
|
|
68
|
-
|
|
69
|
-
static readonly dependencies = [
|
|
70
|
-
AccountBalanceViewerMoniker,
|
|
71
|
-
BlockViewerMoniker,
|
|
72
|
-
FinalizationViewerMoniker,
|
|
73
|
-
MempoolViewerMoniker,
|
|
74
|
-
NetworkStakeViewerMoniker,
|
|
75
|
-
NetworkStakeStepRewardsByPositionViewerMoniker,
|
|
76
|
-
StakeViewerMoniker,
|
|
77
|
-
StepViewerMoniker,
|
|
78
|
-
TimeSyncViewerMoniker,
|
|
79
|
-
]
|
|
80
|
-
|
|
81
|
-
static readonly monikers = [XyoViewerMoniker]
|
|
82
|
-
moniker = SimpleXyoViewer.defaultMoniker
|
|
83
|
-
|
|
84
|
-
protected _tracer: Tracer | undefined
|
|
85
|
-
|
|
86
|
-
private _accountBalanceViewer?: AccountBalanceViewer
|
|
87
|
-
private _blockViewer?: BlockViewer
|
|
88
|
-
private _chainContractViewer?: ChainContractViewer
|
|
89
|
-
private _chainId!: ChainId
|
|
90
|
-
private _finalizationViewer!: FinalizationViewer
|
|
91
|
-
private _mempoolViewer?: MempoolViewer
|
|
92
|
-
private _networkStakeViewer?: NetworkStakeViewer
|
|
93
|
-
private _networkStepRewardsByPositionViewer?: NetworkStakeStepRewardsByPositionViewer
|
|
94
|
-
private _rewardMultipliers?: XL1RangeMultipliers
|
|
95
|
-
private _stakeViewer?: StakeViewer
|
|
96
|
-
private _stepViewer?: StepViewer
|
|
97
|
-
private _timeSyncViewer?: TimeSyncViewer
|
|
98
|
-
private _transaction?: TransactionViewer
|
|
99
|
-
|
|
100
|
-
get account() {
|
|
101
|
-
return { balance: this._accountBalanceViewer! }
|
|
102
|
-
}
|
|
103
|
-
|
|
104
|
-
get block() {
|
|
105
|
-
return this._blockViewer!
|
|
106
|
-
}
|
|
107
|
-
|
|
108
|
-
get chainContractViewer() {
|
|
109
|
-
return this._chainContractViewer!
|
|
110
|
-
}
|
|
111
|
-
|
|
112
|
-
get finalization() {
|
|
113
|
-
return this._finalizationViewer!
|
|
114
|
-
}
|
|
115
|
-
|
|
116
|
-
get mempool() {
|
|
117
|
-
return this._mempoolViewer!
|
|
118
|
-
}
|
|
119
|
-
|
|
120
|
-
get networkStake() {
|
|
121
|
-
return this._networkStakeViewer!
|
|
122
|
-
}
|
|
123
|
-
|
|
124
|
-
get stake() {
|
|
125
|
-
return this._stakeViewer!
|
|
126
|
-
}
|
|
127
|
-
|
|
128
|
-
get step() {
|
|
129
|
-
return this._stepViewer!
|
|
130
|
-
}
|
|
131
|
-
|
|
132
|
-
get time() {
|
|
133
|
-
return this._timeSyncViewer!
|
|
134
|
-
}
|
|
135
|
-
|
|
136
|
-
get transaction() {
|
|
137
|
-
return this._transaction!
|
|
138
|
-
}
|
|
139
|
-
|
|
140
|
-
protected get finalizationViewer() {
|
|
141
|
-
return this._finalizationViewer
|
|
142
|
-
}
|
|
143
|
-
|
|
144
|
-
protected get initRewardsCache() {
|
|
145
|
-
return this.params.initRewardsCache ?? true
|
|
146
|
-
}
|
|
147
|
-
|
|
148
|
-
protected get networkStepRewardsByPositionViewer() {
|
|
149
|
-
return this._networkStepRewardsByPositionViewer!
|
|
150
|
-
}
|
|
151
|
-
|
|
152
|
-
protected get rewardMultipliers() {
|
|
153
|
-
this._rewardMultipliers = this._rewardMultipliers ?? this.params.rewardMultipliers ?? {}
|
|
154
|
-
return this._rewardMultipliers
|
|
155
|
-
}
|
|
156
|
-
|
|
157
|
-
async accountBalance(address: Address, config: ChainQualifiedConfig = {}) {
|
|
158
|
-
return await this.account.balance.accountBalance(address, config)
|
|
159
|
-
}
|
|
160
|
-
|
|
161
|
-
async accountBalanceHistory(address: Address, config: ChainQualifiedConfig = {}) {
|
|
162
|
-
return await this.account.balance.accountBalanceHistory(address, config)
|
|
163
|
-
}
|
|
164
|
-
|
|
165
|
-
async blockByHash(hash: Hash) {
|
|
166
|
-
return await this.block.blockByHash(hash)
|
|
167
|
-
}
|
|
168
|
-
|
|
169
|
-
async blockByNumber(blockNumber: XL1BlockNumber) {
|
|
170
|
-
return await this.block.blockByNumber(blockNumber)
|
|
171
|
-
}
|
|
172
|
-
|
|
173
|
-
async blocksByHash(hash: Hash, limit: number = 10) {
|
|
174
|
-
return await this.block.blocksByHash(hash, limit)
|
|
175
|
-
}
|
|
176
|
-
|
|
177
|
-
async blocksByNumber(blockNumber: XL1BlockNumber, limit: number = 10) {
|
|
178
|
-
return await this.block.blocksByNumber(blockNumber, limit)
|
|
179
|
-
}
|
|
180
|
-
|
|
181
|
-
async chainId(): Promise<ChainId>
|
|
182
|
-
async chainId(blockNumber: XL1BlockNumber): Promise<ChainId>
|
|
183
|
-
async chainId(blockNumber: 'latest'): Promise<ChainId>
|
|
184
|
-
async chainId(blockNumber: XL1BlockNumber | 'latest' = 'latest'): Promise<ChainId> {
|
|
185
|
-
return await this.spanAsync('SimpleXyoViewer:chainId', async () => {
|
|
186
|
-
const chainId = assertEx(
|
|
187
|
-
blockNumber === 'latest' ? this._chainId : await this.chainContractViewer.chainIdAtBlockNumber(blockNumber),
|
|
188
|
-
() => `Could not find block for chainId at block ${blockNumber}`,
|
|
189
|
-
)
|
|
190
|
-
return chainId
|
|
191
|
-
}, this.context)
|
|
192
|
-
}
|
|
193
|
-
|
|
194
|
-
override async createHandler() {
|
|
195
|
-
await super.createHandler()
|
|
196
|
-
this._accountBalanceViewer = await this.locator.getInstance<AccountBalanceViewer>(AccountBalanceViewerMoniker)
|
|
197
|
-
this._blockViewer = await this.locator.getInstance<BlockViewer>(BlockViewerMoniker)
|
|
198
|
-
this._chainContractViewer = await this.locator.getInstance<ChainContractViewer>(ChainContractViewerMoniker)
|
|
199
|
-
this._finalizationViewer = await this.locator.getInstance<FinalizationViewer>(FinalizationViewerMoniker)
|
|
200
|
-
this._mempoolViewer = await this.locator.getInstance<MempoolViewer>(MempoolViewerMoniker)
|
|
201
|
-
this._networkStakeViewer = await this.locator.getInstance<NetworkStakeViewer>(NetworkStakeViewerMoniker)
|
|
202
|
-
this._networkStepRewardsByPositionViewer
|
|
203
|
-
= await this.locator.getInstance<NetworkStakeStepRewardsByPositionViewer>(NetworkStakeStepRewardsByPositionViewerMoniker)
|
|
204
|
-
this._stakeViewer = await this.locator.getInstance<StakeViewer>(StakeViewerMoniker)
|
|
205
|
-
this._stepViewer = await this.locator.getInstance<StepViewer>(StepViewerMoniker)
|
|
206
|
-
this._timeSyncViewer = await this.locator.getInstance<TimeSyncViewer>(TimeSyncViewerMoniker)
|
|
207
|
-
this._transaction = await this.locator.getInstance<TransactionViewer>(TransactionViewerMoniker)
|
|
208
|
-
this._chainId = await this._chainContractViewer.chainId()
|
|
209
|
-
}
|
|
210
|
-
|
|
211
|
-
async currentBlock() {
|
|
212
|
-
return await this.block.currentBlock()
|
|
213
|
-
}
|
|
214
|
-
|
|
215
|
-
async currentBlockHash() {
|
|
216
|
-
return await this.block.currentBlockHash()
|
|
217
|
-
}
|
|
218
|
-
|
|
219
|
-
async currentBlockNumber() {
|
|
220
|
-
return await this.block.currentBlockNumber()
|
|
221
|
-
}
|
|
222
|
-
|
|
223
|
-
forkHistory(): Promisable<ForkHistory> {
|
|
224
|
-
throw new Error('Method [forkHistory] not implemented.')
|
|
225
|
-
}
|
|
226
|
-
|
|
227
|
-
networkStakeStepRewardAddressHistory(_address: Address): Promise<Record<Address, AttoXL1>> {
|
|
228
|
-
throw new Error('Method [networkStakeStepRewardAddressHistory] not implemented.')
|
|
229
|
-
}
|
|
230
|
-
|
|
231
|
-
networkStakeStepRewardAddressReward(_context: StepIdentity, _address: Address): Promise<Record<Address, AttoXL1>> {
|
|
232
|
-
throw new Error('Method [networkStakeStepRewardAddressReward] not implemented.')
|
|
233
|
-
}
|
|
234
|
-
|
|
235
|
-
networkStakeStepRewardAddressShare(_context: StepIdentity, _address: Address): Promise<[bigint, bigint]> {
|
|
236
|
-
throw new Error('Method [networkStakeStepRewardAddressShare] not implemented.')
|
|
237
|
-
}
|
|
238
|
-
|
|
239
|
-
networkStakeStepRewardClaimedByAddress(_address: Address): Promise<AttoXL1> {
|
|
240
|
-
throw new Error('Method [networkStakeStepRewardClaimedByAddress] not implemented.')
|
|
241
|
-
}
|
|
242
|
-
|
|
243
|
-
async networkStakeStepRewardForPosition(position: number, range: XL1BlockRange): Promise<[AttoXL1, AttoXL1]> {
|
|
244
|
-
const cacheKey = `${position}|${range[0]}-${range[1]}`
|
|
245
|
-
return await withContextCacheResponse(this.context, 'SimpleXyoViewer:networkStakeStepRewardForPosition', cacheKey, async () => {
|
|
246
|
-
const externalRange = await externalBlockRangeFromXL1BlockRange(this.context, this.block, range)
|
|
247
|
-
const positionCount = await this.stake.stakeEvents.positionCount(externalRange)
|
|
248
|
-
if (positionCount === 0) {
|
|
249
|
-
return [asAttoXL1(0n), asAttoXL1(0n)]
|
|
250
|
-
}
|
|
251
|
-
const steps = blockRangeSteps(range, [3, 4, 5, 6, 7])
|
|
252
|
-
const rewards = await Promise.all(steps.map(step => this.networkStakeStepRewardForStepForPosition(step, position)))
|
|
253
|
-
const positionReward = asAttoXL1(rewards.reduce((a, b) => a + b[0], 0n))
|
|
254
|
-
const totalReward = asAttoXL1(rewards.reduce((a, b) => a + b[1], 0n))
|
|
255
|
-
return [positionReward, totalReward]
|
|
256
|
-
})
|
|
257
|
-
}
|
|
258
|
-
|
|
259
|
-
async networkStakeStepRewardForStep(stepContext: StepIdentity): Promise<AttoXL1> {
|
|
260
|
-
return await stepRewardTotal(this.context, this.block, stepContext, this.rewardMultipliers)
|
|
261
|
-
}
|
|
262
|
-
|
|
263
|
-
async networkStakeStepRewardForStepForPosition(stepIdentity: StepIdentity, position: number): Promise<[AttoXL1, AttoXL1]> {
|
|
264
|
-
const stepIdentityString = toStepIdentityString(stepIdentity)
|
|
265
|
-
const cacheKey = `${stepIdentityString}|${position}`
|
|
266
|
-
return await withContextCacheResponse(this.context, 'SimpleXyoViewer:networkStakeStepRewardForStepForPosition', cacheKey, async () => {
|
|
267
|
-
const range = await externalBlockRangeFromStep(this.context, this.block, stepIdentity)
|
|
268
|
-
const stake = await this.stakeById(position)
|
|
269
|
-
const numerator = stake.staked === XYO_NETWORK_STAKING_ADDRESS
|
|
270
|
-
? await weightedStakeForRangeByPosition(this.context, this.block, this.stake.stakeEvents, range, XYO_NETWORK_STAKING_ADDRESS, position)
|
|
271
|
-
: 0n
|
|
272
|
-
|
|
273
|
-
const denominator = await this.stepWeightedDenominator(stepIdentity)
|
|
274
|
-
const totalReward = await this.networkStakeStepRewardForStep(stepIdentity)
|
|
275
|
-
const positionReward = asAttoXL1(denominator > 0n ? totalReward * numerator / denominator : 0n)
|
|
276
|
-
const result: [AttoXL1, AttoXL1] = [positionReward, totalReward]
|
|
277
|
-
return result
|
|
278
|
-
})
|
|
279
|
-
}
|
|
280
|
-
|
|
281
|
-
async networkStakeStepRewardPoolRewards(step: StepIdentity): Promise<Record<Address, AttoXL1>> {
|
|
282
|
-
const stakes = await this.stake.stakesByStaked(XYO_NETWORK_STAKING_ADDRESS)
|
|
283
|
-
const rewards: [Address, [AttoXL1, AttoXL1]][] = []
|
|
284
|
-
for (const stake of stakes) {
|
|
285
|
-
rewards.push([stake.staker, (await this.networkStakeStepRewardForStepForPosition(
|
|
286
|
-
step,
|
|
287
|
-
stake.id,
|
|
288
|
-
))])
|
|
289
|
-
}
|
|
290
|
-
const result: Record<Address, AttoXL1> = {}
|
|
291
|
-
for (const [staker, reward] of rewards) {
|
|
292
|
-
result[staker] = asAttoXL1((result[staker] ?? 0n) + reward[0])
|
|
293
|
-
}
|
|
294
|
-
const filtered = Object.fromEntries(Object.entries(result).filter(([_, v]) => v > 0n))
|
|
295
|
-
return filtered
|
|
296
|
-
}
|
|
297
|
-
|
|
298
|
-
networkStakeStepRewardPoolShares(_context: StepIdentity): Promise<Record<Address, bigint>> {
|
|
299
|
-
throw new Error('Method [networkStakeStepRewardPoolShares] not implemented.')
|
|
300
|
-
}
|
|
301
|
-
|
|
302
|
-
async networkStakeStepRewardPositionWeight(stepContext: StepIdentity, position: number): Promise<bigint> {
|
|
303
|
-
return await networkStakeStepRewardPositionWeight(this.context, this.block, this.stake.stakeEvents, stepContext, position)
|
|
304
|
-
}
|
|
305
|
-
|
|
306
|
-
networkStakeStepRewardPotentialPositionLoss(_context: StepIdentity, _position: number): Promise<AttoXL1> {
|
|
307
|
-
throw new Error('Method [networkStakeStepRewardPotentialPositionLoss] not implemented.')
|
|
308
|
-
}
|
|
309
|
-
|
|
310
|
-
networkStakeStepRewardRandomizer(_context: StepIdentity): Promise<AttoXL1> {
|
|
311
|
-
throw new Error('Method [networkStakeStepRewardRandomizer] not implemented.')
|
|
312
|
-
}
|
|
313
|
-
|
|
314
|
-
async networkStakeStepRewardStakerCount(stepContext: StepIdentity): Promise<number> {
|
|
315
|
-
return Object.keys(await allStakersForStep(
|
|
316
|
-
this.context,
|
|
317
|
-
this.block,
|
|
318
|
-
this.stake.stakeEvents,
|
|
319
|
-
stepContext,
|
|
320
|
-
XYO_NETWORK_STAKING_ADDRESS,
|
|
321
|
-
)).length
|
|
322
|
-
}
|
|
323
|
-
|
|
324
|
-
networkStakeStepRewardUnclaimedByAddress(_address: Address): Promise<AttoXL1> {
|
|
325
|
-
throw new Error('Method [networkStakeStepRewardUnclaimedByAddress] not implemented.')
|
|
326
|
-
}
|
|
327
|
-
|
|
328
|
-
networkStakeStepRewardWeightForAddress(_context: StepIdentity, _address: Address): Promise<AttoXL1> {
|
|
329
|
-
throw new Error('Method [networkStakeStepRewardWeightForAddress] not implemented.')
|
|
330
|
-
}
|
|
331
|
-
|
|
332
|
-
async networkStakeStepRewardsForPosition(position: number, range: XL1BlockRange): Promise<Record<StepIdentityString, [AttoXL1, AttoXL1]>> {
|
|
333
|
-
const steps = blockRangeSteps(range, [3, 4, 5, 6, 7, 8])
|
|
334
|
-
const rewards = await Promise.all(steps.map(async (step) => {
|
|
335
|
-
return [toStepIdentityString(step), await this.networkStakeStepRewardForStepForPosition(step, position)] as [StepIdentityString, [AttoXL1, AttoXL1]]
|
|
336
|
-
}))
|
|
337
|
-
const result: Record<StepIdentityString, [AttoXL1, AttoXL1]> = {}
|
|
338
|
-
for (const [step, reward] of rewards) {
|
|
339
|
-
result[step] = reward
|
|
340
|
-
}
|
|
341
|
-
const filtered = Object.fromEntries(Object.entries(result).filter(([_, v]) => v[0] > 0n))
|
|
342
|
-
return filtered
|
|
343
|
-
}
|
|
344
|
-
|
|
345
|
-
async networkStakeStepRewardsForRange(range: XL1BlockRange): Promise<AttoXL1> {
|
|
346
|
-
return await this.spanAsync('networkStakeStepRewardsForRange', async () => {
|
|
347
|
-
const steps = blockRangeSteps(range, [3, 4, 5, 6, 7, 8])
|
|
348
|
-
const rewards = await Promise.all(steps.map(async (step) => {
|
|
349
|
-
return await this.networkStakeStepRewardForStep(step)
|
|
350
|
-
}))
|
|
351
|
-
return asAttoXL1(rewards.reduce((a, b) => a + b, 0n))
|
|
352
|
-
}, this.context)
|
|
353
|
-
}
|
|
354
|
-
|
|
355
|
-
async networkStakeStepRewardsForStepLevel(stepLevel: number, range: XL1BlockRange): Promise<AttoXL1> {
|
|
356
|
-
const steps = blockRangeSteps(range, [stepLevel])
|
|
357
|
-
const rewards = await Promise.all(steps.map(async (step) => {
|
|
358
|
-
return await this.networkStakeStepRewardForStep(step)
|
|
359
|
-
}))
|
|
360
|
-
return asAttoXL1(rewards.reduce((a, b) => a + b, 0n))
|
|
361
|
-
}
|
|
362
|
-
|
|
363
|
-
payloadByHash(_hash: Hash): Promisable<WithHashMeta<Payload> | null> {
|
|
364
|
-
throw new Error('Method [payloadByHash] not implemented.')
|
|
365
|
-
}
|
|
366
|
-
|
|
367
|
-
payloadsByHash(_hashes: Hash[]): Promisable<WithHashMeta<Payload>[]> {
|
|
368
|
-
throw new Error('Method [payloadsByHash] not implemented.')
|
|
369
|
-
}
|
|
370
|
-
|
|
371
|
-
async rate(range: XL1BlockRange, timeUnit?: keyof TimeDurations): Promise<BlockRate> {
|
|
372
|
-
return await this.block.rate(range, timeUnit)
|
|
373
|
-
}
|
|
374
|
-
|
|
375
|
-
async stakeById(id: number): Promise<Position> {
|
|
376
|
-
return await this.stake.stakeById(id)
|
|
377
|
-
}
|
|
378
|
-
|
|
379
|
-
async stakeByStaker(staker: Address, slot: number): Promise<Position> {
|
|
380
|
-
return await this.stake.stakeByStaker(staker, slot)
|
|
381
|
-
}
|
|
382
|
-
|
|
383
|
-
async stakedByStaker(staker: Address): Promise<Address[]> {
|
|
384
|
-
const result: Set<Address> = new Set()
|
|
385
|
-
let slot = 0
|
|
386
|
-
while (true) {
|
|
387
|
-
try {
|
|
388
|
-
const ethStake = await this.stake.stakeByStaker(staker, slot)
|
|
389
|
-
result.add(toAddress(ethStake.staked))
|
|
390
|
-
slot++
|
|
391
|
-
} catch {
|
|
392
|
-
break
|
|
393
|
-
}
|
|
394
|
-
}
|
|
395
|
-
return [...result]
|
|
396
|
-
}
|
|
397
|
-
|
|
398
|
-
async stakesByStaked(staked: Address): Promise<Position[]> {
|
|
399
|
-
return await this.stake.stakesByStaked(staked)
|
|
400
|
-
}
|
|
401
|
-
|
|
402
|
-
async stakesByStaker(staker: Address): Promise<Position[]> {
|
|
403
|
-
return await this.stake.stakesByStaker(staker)
|
|
404
|
-
}
|
|
405
|
-
|
|
406
|
-
async stepSizeRate(start: XL1BlockNumber, stepSizeIndex: StepIndex, count?: Count, timeUnit?: keyof TimeDurations): Promise<BlockRate> {
|
|
407
|
-
return await this.block.stepSizeRate(start, stepSizeIndex, count, timeUnit)
|
|
408
|
-
}
|
|
409
|
-
|
|
410
|
-
async timeDurationRate(
|
|
411
|
-
timeConfig: SingleTimeConfig,
|
|
412
|
-
startBlock: XL1BlockNumber,
|
|
413
|
-
timeUnit?: keyof TimeDurations,
|
|
414
|
-
toleranceMs?: number,
|
|
415
|
-
maxAttempts?: number,
|
|
416
|
-
): Promise<BlockRate> {
|
|
417
|
-
return await this.block.timeDurationRate(timeConfig, startBlock, timeUnit, toleranceMs, maxAttempts)
|
|
418
|
-
}
|
|
419
|
-
|
|
420
|
-
async transactionByBlockHashAndIndex(blockHash: Hash, transactionIndex: number = 0) {
|
|
421
|
-
return await this.transaction.byBlockHashAndIndex(blockHash, transactionIndex)
|
|
422
|
-
}
|
|
423
|
-
|
|
424
|
-
async transactionByBlockNumberAndIndex(blockNumber: XL1BlockNumber, transactionIndex: number = 0) {
|
|
425
|
-
return await this.transaction.byBlockNumberAndIndex(blockNumber, transactionIndex)
|
|
426
|
-
}
|
|
427
|
-
|
|
428
|
-
async transactionByHash(transactionHash: Hash) {
|
|
429
|
-
return await this.transaction.byHash(transactionHash)
|
|
430
|
-
}
|
|
431
|
-
|
|
432
|
-
protected override async startHandler() {
|
|
433
|
-
try {
|
|
434
|
-
const currentBlockNumber = await this.currentBlockNumber()
|
|
435
|
-
// initialize functions that have slow initial call
|
|
436
|
-
await this.account.balance.accountBalance(XYO_ZERO_ADDRESS)
|
|
437
|
-
if (this.initRewardsCache) {
|
|
438
|
-
const externalRange = await externalBlockRangeFromXL1BlockRange(
|
|
439
|
-
this.context,
|
|
440
|
-
this.block,
|
|
441
|
-
asXL1BlockRange([0, currentBlockNumber], { name: 'startHandler' }),
|
|
442
|
-
)
|
|
443
|
-
const positionCount = await this.stake.stakeEvents.positionCount(externalRange)
|
|
444
|
-
this.logger?.log(`SimpleXyoViewer: Precomputing networkStakeStepRewardForPosition up to position ${positionCount - 1}`)
|
|
445
|
-
const positions = Array.from(
|
|
446
|
-
{ length: positionCount },
|
|
447
|
-
(_, i) => i,
|
|
448
|
-
)
|
|
449
|
-
while (positions.length > 0) {
|
|
450
|
-
const batch = positions.splice(0, 10)
|
|
451
|
-
this.logger?.log(`SimpleXyoViewer: Precomputing networkStakeStepRewardForPosition for positions ${batch.at(0)} - ${batch.at(-1)}`)
|
|
452
|
-
await Promise.all(batch.map(async (_, position) => await this.networkStakeStepRewardForPosition(
|
|
453
|
-
position,
|
|
454
|
-
asXL1BlockRange([0, currentBlockNumber], { name: 'startHandler' }),
|
|
455
|
-
)))
|
|
456
|
-
}
|
|
457
|
-
this.logger?.log(`SimpleXyoViewer: Precomputed networkStakeStepRewardForPosition up to position ${positionCount - 1}`)
|
|
458
|
-
}
|
|
459
|
-
} catch (ex) {
|
|
460
|
-
this.logger?.error(`SimpleXyoViewer: Error during startHandler initialization: ${(ex as Error).message}`)
|
|
461
|
-
this.logger?.error((ex as Error).stack ?? '<No Stack>')
|
|
462
|
-
throw ex
|
|
463
|
-
}
|
|
464
|
-
}
|
|
465
|
-
|
|
466
|
-
protected async stepWeightedDenominator(stepIdentity: StepIdentity, staked?: Address): Promise<bigint> {
|
|
467
|
-
const cacheKey = toStepIdentityString(stepIdentity)
|
|
468
|
-
return await withContextCacheResponse(this.context, 'NodeXyoViewer-networkStakeStepRewardForStepForPosition-denominator', cacheKey, async () => {
|
|
469
|
-
const range = await externalBlockRangeFromStep(this.context, this.block, stepIdentity)
|
|
470
|
-
return await weightedStakeForRangeByPosition(this.context, this.block, this.stake.stakeEvents, range, staked)
|
|
471
|
-
})
|
|
472
|
-
}
|
|
473
|
-
}
|
package/src/buildLocalGateway.ts
DELETED
|
@@ -1,114 +0,0 @@
|
|
|
1
|
-
import type {
|
|
2
|
-
AccountInstance, ArchivistInstance, WithHashMeta,
|
|
3
|
-
} from '@xyo-network/sdk-js'
|
|
4
|
-
import type { MapType } from '@xyo-network/xl1-protocol-lib'
|
|
5
|
-
import type {
|
|
6
|
-
BalancesStepSummary, Config, TransfersStepSummary,
|
|
7
|
-
} from '@xyo-network/xl1-protocol-sdk'
|
|
8
|
-
import {
|
|
9
|
-
ProviderFactoryLocator, SimpleAccountBalanceViewer, SimpleBlockViewer, SimpleFinalizationViewer, SimpleMempoolRunner, SimpleMempoolViewer,
|
|
10
|
-
SimpleTimeSyncViewer, SimpleWindowedBlockViewer, SimpleXyoRunner,
|
|
11
|
-
} from '@xyo-network/xl1-protocol-sdk'
|
|
12
|
-
import type { TransportFactory } from '@xyo-network/xl1-rpc'
|
|
13
|
-
import {
|
|
14
|
-
AccountBalanceViewerRpcSchemas, BlockViewerRpcSchemas,
|
|
15
|
-
JsonRpcAccountBalanceViewer, JsonRpcBlockViewer,
|
|
16
|
-
JsonRpcMempoolRunner, JsonRpcMempoolViewer, JsonRpcNetworkStakeStepRewardsViewer, JsonRpcNetworkStakeViewer, JsonRpcStakeTotalsViewer,
|
|
17
|
-
JsonRpcTimeSyncViewer, JsonRpcXyoRunner, JsonRpcXyoViewer, MempoolRunnerRpcSchemas, MempoolViewerRpcSchemas, NetworkStakeViewerRpcSchemas,
|
|
18
|
-
StakeTotalsViewerRpcSchemas, TimeSyncViewerRpcSchemas, XyoRunnerRpcSchemas, XyoViewerRpcSchemas,
|
|
19
|
-
} from '@xyo-network/xl1-rpc'
|
|
20
|
-
|
|
21
|
-
import { registerGatewayWithLocator } from './registerHelpers.ts'
|
|
22
|
-
import { SimpleNetworkStakeViewer } from './SimpleNetworkStakeViewer.ts'
|
|
23
|
-
import {
|
|
24
|
-
SimpleStepRewardsByPositionViewer, SimpleStepRewardsByStakerViewer, SimpleStepRewardsByStepViewer, SimpleStepRewardsTotalViewer, SimpleStepRewardsViewer,
|
|
25
|
-
} from './SimpleStepRewards/index.ts'
|
|
26
|
-
import { SimpleStepViewer } from './SimpleStepViewer.ts'
|
|
27
|
-
import { SimpleXyoViewer } from './SimpleXyoViewer.ts'
|
|
28
|
-
|
|
29
|
-
/** @deprecated Use locatorsFromConfig instead */
|
|
30
|
-
export function buildEmptyProviderLocator(config: Config) {
|
|
31
|
-
return new ProviderFactoryLocator({
|
|
32
|
-
config, singletons: {}, caches: {},
|
|
33
|
-
})
|
|
34
|
-
}
|
|
35
|
-
|
|
36
|
-
/** @deprecated Use locatorsFromConfig instead */
|
|
37
|
-
export function buildSimpleProviderLocatorV2(config: Config, account?: AccountInstance) {
|
|
38
|
-
// eslint-disable-next-line @typescript-eslint/no-deprecated
|
|
39
|
-
const locator = buildEmptyProviderLocator(config)
|
|
40
|
-
locator.registerMany([
|
|
41
|
-
SimpleNetworkStakeViewer.factory<SimpleNetworkStakeViewer>(SimpleNetworkStakeViewer.dependencies, {}),
|
|
42
|
-
SimpleTimeSyncViewer.factory<SimpleTimeSyncViewer>(SimpleTimeSyncViewer.dependencies, {}),
|
|
43
|
-
SimpleStepViewer.factory<SimpleStepViewer>(SimpleStepViewer.dependencies, {}),
|
|
44
|
-
SimpleStepRewardsViewer.factory<SimpleStepRewardsViewer>(SimpleStepRewardsViewer.dependencies, {}),
|
|
45
|
-
SimpleStepRewardsByPositionViewer.factory<SimpleStepRewardsByPositionViewer>(SimpleStepRewardsByPositionViewer.dependencies, {}),
|
|
46
|
-
SimpleStepRewardsByStakerViewer.factory<SimpleStepRewardsByStakerViewer>(SimpleStepRewardsByStakerViewer.dependencies, {}),
|
|
47
|
-
SimpleStepRewardsByStepViewer.factory<SimpleStepRewardsByStepViewer>(SimpleStepRewardsByStepViewer.dependencies, {}),
|
|
48
|
-
SimpleStepRewardsTotalViewer.factory<SimpleStepRewardsTotalViewer>(SimpleStepRewardsTotalViewer.dependencies, {}),
|
|
49
|
-
SimpleXyoRunner.factory<SimpleXyoRunner>(SimpleXyoRunner.dependencies, {}),
|
|
50
|
-
])
|
|
51
|
-
return registerGatewayWithLocator(locator, account)
|
|
52
|
-
}
|
|
53
|
-
|
|
54
|
-
/** @deprecated Use locatorsFromConfig instead */
|
|
55
|
-
export async function buildJsonRpcProviderLocatorV2(config: Config, transportFactory: TransportFactory, account?: AccountInstance) {
|
|
56
|
-
// eslint-disable-next-line @typescript-eslint/no-deprecated
|
|
57
|
-
const locator = buildEmptyProviderLocator(config)
|
|
58
|
-
locator.registerMany([
|
|
59
|
-
JsonRpcStakeTotalsViewer.factory<JsonRpcStakeTotalsViewer>(
|
|
60
|
-
JsonRpcStakeTotalsViewer.dependencies,
|
|
61
|
-
{ transport: await transportFactory(StakeTotalsViewerRpcSchemas) },
|
|
62
|
-
),
|
|
63
|
-
JsonRpcAccountBalanceViewer.factory<JsonRpcAccountBalanceViewer>(
|
|
64
|
-
JsonRpcAccountBalanceViewer.dependencies,
|
|
65
|
-
{ transport: await transportFactory(AccountBalanceViewerRpcSchemas) },
|
|
66
|
-
),
|
|
67
|
-
JsonRpcBlockViewer.factory<JsonRpcBlockViewer>(JsonRpcBlockViewer.dependencies, { transport: await transportFactory(BlockViewerRpcSchemas) }),
|
|
68
|
-
JsonRpcMempoolRunner.factory<JsonRpcMempoolRunner>(JsonRpcMempoolRunner.dependencies, { transport: await transportFactory(MempoolRunnerRpcSchemas) }),
|
|
69
|
-
JsonRpcMempoolViewer.factory<JsonRpcMempoolViewer>(JsonRpcMempoolViewer.dependencies, { transport: await transportFactory(MempoolViewerRpcSchemas) }),
|
|
70
|
-
JsonRpcNetworkStakeViewer.factory<JsonRpcNetworkStakeViewer>(
|
|
71
|
-
JsonRpcNetworkStakeViewer.dependencies,
|
|
72
|
-
{ transport: await transportFactory(NetworkStakeViewerRpcSchemas) },
|
|
73
|
-
),
|
|
74
|
-
JsonRpcTimeSyncViewer.factory<JsonRpcTimeSyncViewer>(JsonRpcTimeSyncViewer.dependencies, { transport: await transportFactory(TimeSyncViewerRpcSchemas) }),
|
|
75
|
-
JsonRpcNetworkStakeStepRewardsViewer.factory<JsonRpcNetworkStakeStepRewardsViewer>(
|
|
76
|
-
JsonRpcNetworkStakeStepRewardsViewer.dependencies,
|
|
77
|
-
{ transport: await transportFactory(NetworkStakeViewerRpcSchemas) },
|
|
78
|
-
),
|
|
79
|
-
JsonRpcXyoRunner.factory<JsonRpcXyoRunner>(JsonRpcXyoRunner.dependencies, { transport: await transportFactory(XyoRunnerRpcSchemas) }),
|
|
80
|
-
JsonRpcXyoViewer.factory<JsonRpcXyoViewer>(JsonRpcXyoViewer.dependencies, { transport: await transportFactory(XyoViewerRpcSchemas) }),
|
|
81
|
-
])
|
|
82
|
-
return registerGatewayWithLocator(locator, account)
|
|
83
|
-
}
|
|
84
|
-
|
|
85
|
-
/** @deprecated Use locatorsFromConfig instead */
|
|
86
|
-
export interface BuildLocalGatewayParams {
|
|
87
|
-
account?: AccountInstance
|
|
88
|
-
balancesSummaryMap: MapType<string, WithHashMeta<BalancesStepSummary>>
|
|
89
|
-
finalizedArchivist: ArchivistInstance
|
|
90
|
-
pendingBlocksArchivist: ArchivistInstance
|
|
91
|
-
pendingTransactionsArchivist: ArchivistInstance
|
|
92
|
-
transfersSummaryMap: MapType<string, WithHashMeta<TransfersStepSummary>>
|
|
93
|
-
}
|
|
94
|
-
|
|
95
|
-
/** @deprecated Use locatorsFromConfig instead */
|
|
96
|
-
|
|
97
|
-
/** Builds a local gateway provider locator with the given configuration. */
|
|
98
|
-
export function buildLocalGateway(config: Config, params: BuildLocalGatewayParams) {
|
|
99
|
-
const {
|
|
100
|
-
account, pendingTransactionsArchivist, pendingBlocksArchivist, balancesSummaryMap, transfersSummaryMap, finalizedArchivist,
|
|
101
|
-
} = params
|
|
102
|
-
// eslint-disable-next-line @typescript-eslint/no-deprecated
|
|
103
|
-
const locator = buildSimpleProviderLocatorV2(config, account)
|
|
104
|
-
locator.registerMany([
|
|
105
|
-
SimpleMempoolViewer.factory<SimpleMempoolViewer>(SimpleMempoolViewer.dependencies, { pendingTransactionsArchivist, pendingBlocksArchivist }),
|
|
106
|
-
SimpleMempoolRunner.factory<SimpleMempoolRunner>(SimpleMempoolRunner.dependencies, { pendingTransactionsArchivist, pendingBlocksArchivist }),
|
|
107
|
-
SimpleAccountBalanceViewer.factory<SimpleAccountBalanceViewer>(SimpleAccountBalanceViewer.dependencies, { balancesSummaryMap, transfersSummaryMap }),
|
|
108
|
-
SimpleFinalizationViewer.factory<SimpleFinalizationViewer>(SimpleFinalizationViewer.dependencies, { finalizedArchivist }),
|
|
109
|
-
SimpleBlockViewer.factory<SimpleBlockViewer>(SimpleBlockViewer.dependencies, { finalizedArchivist }),
|
|
110
|
-
SimpleWindowedBlockViewer.factory<SimpleWindowedBlockViewer>(SimpleWindowedBlockViewer.dependencies, { maxWindowSize: 10_000, syncInterval: 10_000 }),
|
|
111
|
-
SimpleXyoViewer.factory<SimpleXyoViewer>(SimpleXyoViewer.dependencies, {}),
|
|
112
|
-
])
|
|
113
|
-
return locator
|
|
114
|
-
}
|