@xyo-network/chain-services 1.16.23 → 1.16.25
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/AccountBalance/BaseAccountBalanceService.d.ts +14 -5
- package/dist/neutral/AccountBalance/BaseAccountBalanceService.d.ts.map +1 -1
- package/dist/neutral/BlockProducer/BaseBlockProducerService.d.ts +15 -6
- package/dist/neutral/BlockProducer/BaseBlockProducerService.d.ts.map +1 -1
- package/dist/neutral/ChainBlockNumberIteration/ChainBlockNumberIterationService.d.ts +16 -1
- package/dist/neutral/ChainBlockNumberIteration/ChainBlockNumberIterationService.d.ts.map +1 -1
- package/dist/neutral/ChainValidator/XyoValidator.d.ts +1 -1
- package/dist/neutral/ChainValidator/XyoValidator.d.ts.map +1 -1
- package/dist/neutral/PendingTransactions/BasePendingTransactions.d.ts.map +1 -1
- package/dist/neutral/PendingTransactions/bundledPayloadToHydratedTransaction.d.ts +2 -2
- package/dist/neutral/PendingTransactions/bundledPayloadToHydratedTransaction.d.ts.map +1 -1
- package/dist/neutral/PendingTransactions/hydratedTransactionToPayloadBundle.d.ts +2 -2
- package/dist/neutral/PendingTransactions/hydratedTransactionToPayloadBundle.d.ts.map +1 -1
- package/dist/neutral/index.d.ts +1 -0
- package/dist/neutral/index.d.ts.map +1 -1
- package/dist/neutral/index.mjs +208 -165
- package/dist/neutral/index.mjs.map +1 -1
- package/package.json +28 -27
- package/src/AccountBalance/BaseAccountBalanceService.ts +42 -22
- package/src/BlockProducer/BaseBlockProducerService.ts +25 -16
- package/src/PendingTransactions/BasePendingTransactions.ts +11 -9
- package/src/PendingTransactions/bundledPayloadToHydratedTransaction.ts +6 -6
- package/src/PendingTransactions/hydratedTransactionToPayloadBundle.ts +3 -3
- package/src/StakeIntent/lib/getBlockSignedStakeDeclarations.ts +2 -2
- package/src/blockViewerFromChainIteratorAndArchivist.ts +11 -11
- package/src/index.ts +1 -0
package/dist/neutral/index.mjs
CHANGED
|
@@ -2,17 +2,18 @@ var __defProp = Object.defineProperty;
|
|
|
2
2
|
var __name = (target, value) => __defProp(target, "name", { value, configurable: true });
|
|
3
3
|
|
|
4
4
|
// src/AccountBalance/accountBalanceServiceFromArchivist.ts
|
|
5
|
-
import { assertEx } from "@xylabs/sdk-js";
|
|
5
|
+
import { assertEx as assertEx2 } from "@xylabs/sdk-js";
|
|
6
6
|
import { findMostRecentBlock } from "@xyo-network/chain-protocol";
|
|
7
7
|
import { StepSizes } from "@xyo-network/xl1-protocol";
|
|
8
8
|
import { LruCacheMap, readPayloadMapFromStore } from "@xyo-network/xl1-protocol-sdk";
|
|
9
9
|
import { Semaphore } from "async-mutex";
|
|
10
10
|
|
|
11
11
|
// src/AccountBalance/BaseAccountBalanceService.ts
|
|
12
|
-
import { creatable as creatable2 } from "@xylabs/sdk-js";
|
|
12
|
+
import { assertEx, creatable as creatable2 } from "@xylabs/sdk-js";
|
|
13
13
|
import { spanRootAsync as spanRootAsync2 } from "@xylabs/telemetry";
|
|
14
14
|
import { AttoXL1 } from "@xyo-network/xl1-protocol";
|
|
15
15
|
import { balancesSummary, SimpleAccountBalanceViewer } from "@xyo-network/xl1-protocol-sdk";
|
|
16
|
+
import z from "zod";
|
|
16
17
|
|
|
17
18
|
// src/BaseService.ts
|
|
18
19
|
import { AbstractCreatable, creatable } from "@xylabs/sdk-js";
|
|
@@ -64,67 +65,6 @@ function creatableService() {
|
|
|
64
65
|
}
|
|
65
66
|
__name(creatableService, "creatableService");
|
|
66
67
|
|
|
67
|
-
// src/blockViewerFromChainIteratorAndArchivist.ts
|
|
68
|
-
import { isDefined } from "@xylabs/sdk-js";
|
|
69
|
-
import { PayloadBuilder } from "@xyo-network/payload-builder";
|
|
70
|
-
import { asBlockBoundWitnessWithStorageMeta } from "@xyo-network/xl1-protocol";
|
|
71
|
-
function blockViewerFromChainIteratorAndArchivist(chainIterator, chainArchivist) {
|
|
72
|
-
const result = {
|
|
73
|
-
blockByHash: /* @__PURE__ */ __name(async function(hash) {
|
|
74
|
-
const [payload] = await chainArchivist.get([
|
|
75
|
-
hash
|
|
76
|
-
]);
|
|
77
|
-
const block = asBlockBoundWitnessWithStorageMeta(payload);
|
|
78
|
-
if (isDefined(block)) {
|
|
79
|
-
const payloads = await chainArchivist.get(block.payload_hashes);
|
|
80
|
-
return [
|
|
81
|
-
block,
|
|
82
|
-
payloads
|
|
83
|
-
];
|
|
84
|
-
}
|
|
85
|
-
return null;
|
|
86
|
-
}, "blockByHash"),
|
|
87
|
-
blockByNumber: /* @__PURE__ */ __name(async function(blockNumber) {
|
|
88
|
-
const payload = await chainIterator.get(blockNumber);
|
|
89
|
-
const block = payload ? await PayloadBuilder.addStorageMeta(payload) : void 0;
|
|
90
|
-
if (isDefined(block)) {
|
|
91
|
-
const payloads = await chainArchivist.get(block.payload_hashes);
|
|
92
|
-
return [
|
|
93
|
-
block,
|
|
94
|
-
payloads
|
|
95
|
-
];
|
|
96
|
-
}
|
|
97
|
-
return null;
|
|
98
|
-
}, "blockByNumber"),
|
|
99
|
-
blocksByHash: /* @__PURE__ */ __name(async function(hash, limit = 10) {
|
|
100
|
-
const results = [];
|
|
101
|
-
for (let i = 0; i < limit; i++) {
|
|
102
|
-
const block = await this.blockByHash(hash);
|
|
103
|
-
if (block) {
|
|
104
|
-
results.push(block);
|
|
105
|
-
} else {
|
|
106
|
-
break;
|
|
107
|
-
}
|
|
108
|
-
}
|
|
109
|
-
return results;
|
|
110
|
-
}, "blocksByHash"),
|
|
111
|
-
currentBlock: /* @__PURE__ */ __name(async function() {
|
|
112
|
-
const head = await chainIterator.head();
|
|
113
|
-
return this.blockByHash(head._hash);
|
|
114
|
-
}, "currentBlock"),
|
|
115
|
-
currentBlockHash: /* @__PURE__ */ __name(async function() {
|
|
116
|
-
const head = await chainIterator.head();
|
|
117
|
-
return head._hash;
|
|
118
|
-
}, "currentBlockHash"),
|
|
119
|
-
currentBlockNumber: /* @__PURE__ */ __name(async function() {
|
|
120
|
-
const head = await chainIterator.head();
|
|
121
|
-
return head.block;
|
|
122
|
-
}, "currentBlockNumber")
|
|
123
|
-
};
|
|
124
|
-
return result;
|
|
125
|
-
}
|
|
126
|
-
__name(blockViewerFromChainIteratorAndArchivist, "blockViewerFromChainIteratorAndArchivist");
|
|
127
|
-
|
|
128
68
|
// src/AccountBalance/BaseAccountBalanceService.ts
|
|
129
69
|
function _ts_decorate2(decorators, target, key, desc) {
|
|
130
70
|
var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
|
|
@@ -133,24 +73,48 @@ function _ts_decorate2(decorators, target, key, desc) {
|
|
|
133
73
|
return c > 3 && r && Object.defineProperty(target, key, r), r;
|
|
134
74
|
}
|
|
135
75
|
__name(_ts_decorate2, "_ts_decorate");
|
|
76
|
+
var BaseAccountBalanceServiceParamsZod = z.object({
|
|
77
|
+
blockViewer: z.object().loose(),
|
|
78
|
+
chainArchivist: z.object().loose(),
|
|
79
|
+
chainIterator: z.object().loose(),
|
|
80
|
+
context: z.object().loose(),
|
|
81
|
+
transferContext: z.object().loose()
|
|
82
|
+
});
|
|
136
83
|
var BaseAccountBalanceService = class extends BaseService {
|
|
137
84
|
static {
|
|
138
85
|
__name(this, "BaseAccountBalanceService");
|
|
139
86
|
}
|
|
140
87
|
accountBalanceViewer;
|
|
141
|
-
blockViewer
|
|
88
|
+
get blockViewer() {
|
|
89
|
+
return assertEx(this.params.blockViewer, () => "BlockViewer has not been initialized yet");
|
|
90
|
+
}
|
|
91
|
+
static async paramsHandler(params) {
|
|
92
|
+
BaseAccountBalanceServiceParamsZod.parse(params);
|
|
93
|
+
assertEx(params?.context?.head, () => "BalanceStepSummaryContext is required in BaseAccountBalanceServiceParams");
|
|
94
|
+
return {
|
|
95
|
+
...await super.paramsHandler(params),
|
|
96
|
+
...params
|
|
97
|
+
};
|
|
98
|
+
}
|
|
142
99
|
async accountBalance(address, headOrRange) {
|
|
143
|
-
const balances = await this.
|
|
100
|
+
const balances = await this.accountsBalances([
|
|
144
101
|
address
|
|
145
102
|
], headOrRange);
|
|
146
103
|
return balances[address] ?? AttoXL1(0n);
|
|
147
104
|
}
|
|
148
|
-
|
|
149
|
-
|
|
105
|
+
accountBalanceHistory(_address, _headOrRange) {
|
|
106
|
+
throw new Error("Method not implemented.");
|
|
150
107
|
}
|
|
151
|
-
async
|
|
108
|
+
async accountsBalances(address, _headOrRange) {
|
|
152
109
|
return await spanRootAsync2("balances", async () => {
|
|
153
|
-
const
|
|
110
|
+
const context = {
|
|
111
|
+
head: this.params.context.head,
|
|
112
|
+
stepSemaphores: this.params.context.stepSemaphores,
|
|
113
|
+
store: this.params.context.store,
|
|
114
|
+
chainId: this.params.context.chainId,
|
|
115
|
+
summaryMap: this.params.context.summaryMap
|
|
116
|
+
};
|
|
117
|
+
const summary = await balancesSummary(context);
|
|
154
118
|
const result = {};
|
|
155
119
|
for (const addr of address) {
|
|
156
120
|
const summaryBalance = summary[addr] ?? 0n;
|
|
@@ -159,15 +123,15 @@ var BaseAccountBalanceService = class extends BaseService {
|
|
|
159
123
|
return result;
|
|
160
124
|
});
|
|
161
125
|
}
|
|
162
|
-
|
|
126
|
+
accountsBalancesHistory(_addresses, _headOrRange) {
|
|
163
127
|
throw new Error("Method not implemented.");
|
|
164
128
|
}
|
|
165
|
-
async
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
|
|
129
|
+
async createHandler() {
|
|
130
|
+
this.accountBalanceViewer = await SimpleAccountBalanceViewer.create({
|
|
131
|
+
context: this.params.context,
|
|
132
|
+
transferContext: this.params.transferContext,
|
|
133
|
+
blockViewer: this.blockViewer
|
|
134
|
+
});
|
|
171
135
|
}
|
|
172
136
|
};
|
|
173
137
|
BaseAccountBalanceService = _ts_decorate2([
|
|
@@ -186,8 +150,8 @@ var accountBalancesServiceFromArchivist = /* @__PURE__ */ __name(async (chainId,
|
|
|
186
150
|
const headFunc = /* @__PURE__ */ __name(async () => {
|
|
187
151
|
const head = await findMostRecentBlock(archivist);
|
|
188
152
|
return [
|
|
189
|
-
|
|
190
|
-
|
|
153
|
+
assertEx2(head?._hash, () => "No head found in chainArchivist"),
|
|
154
|
+
assertEx2(head?.block, () => "No head found in chainArchivist")
|
|
191
155
|
];
|
|
192
156
|
}, "headFunc");
|
|
193
157
|
const service = await BaseAccountBalanceService.create({
|
|
@@ -242,24 +206,25 @@ BaseAccountTransfersService = _ts_decorate3([
|
|
|
242
206
|
], BaseAccountTransfersService);
|
|
243
207
|
|
|
244
208
|
// src/BlockProducer/BaseBlockProducerService.ts
|
|
245
|
-
import { asHash, assertEx as
|
|
209
|
+
import { AddressZod, asHash, assertEx as assertEx4, creatable as creatable4, exists, hexToBigInt, isDefined, toHex } from "@xylabs/sdk-js";
|
|
246
210
|
import { FixedPercentageBlockRewardDiviner, FixedPercentageBlockRewardDivinerConfigSchema } from "@xyo-network/chain-modules";
|
|
247
211
|
import { buildNextBlock, createDeclarationIntent } from "@xyo-network/chain-protocol";
|
|
248
|
-
import { PayloadBuilder as
|
|
212
|
+
import { PayloadBuilder as PayloadBuilder2 } from "@xyo-network/payload-builder";
|
|
249
213
|
import { asBlockBoundWitness, AttoXL1 as AttoXL13, BlockNumberSchema, defaultRewardRatio, TimeSchema, XYO_STEP_REWARD_ADDRESS } from "@xyo-network/xl1-protocol";
|
|
214
|
+
import z2 from "zod";
|
|
250
215
|
|
|
251
216
|
// src/BlockProducer/generateTransactionFeeTransfers.ts
|
|
252
217
|
import { hexFromBigInt } from "@xylabs/sdk-js";
|
|
253
|
-
import { assertEx as
|
|
254
|
-
import { PayloadBuilder
|
|
218
|
+
import { assertEx as assertEx3 } from "@xylabs/sdk-js";
|
|
219
|
+
import { PayloadBuilder } from "@xyo-network/payload-builder";
|
|
255
220
|
import { TransferSchema, XYO_ZERO_ADDRESS } from "@xyo-network/xl1-protocol";
|
|
256
221
|
import { transactionRequiredGas } from "@xyo-network/xl1-protocol-sdk";
|
|
257
222
|
import { HydratedTransactionWrapper } from "@xyo-network/xl1-wrappers";
|
|
258
223
|
async function generateTransactionFeeTransfers(address, transactions) {
|
|
259
224
|
const txs = await Promise.all(transactions.map(async (tx) => {
|
|
260
225
|
return HydratedTransactionWrapper.parse([
|
|
261
|
-
await
|
|
262
|
-
await
|
|
226
|
+
await PayloadBuilder.addStorageMeta(tx[0]),
|
|
227
|
+
await PayloadBuilder.addStorageMeta(tx[1])
|
|
263
228
|
]);
|
|
264
229
|
}));
|
|
265
230
|
const txBaseFeeCosts = {};
|
|
@@ -285,7 +250,7 @@ async function generateTransactionFeeTransfers(address, transactions) {
|
|
|
285
250
|
return payload;
|
|
286
251
|
});
|
|
287
252
|
for (const [from, amount] of Object.entries(txGasCosts)) {
|
|
288
|
-
const fromPayload =
|
|
253
|
+
const fromPayload = assertEx3(payloads.find((p) => p.from === from), () => "from payload not found");
|
|
289
254
|
fromPayload.transfers[address] = hexFromBigInt(amount);
|
|
290
255
|
}
|
|
291
256
|
return payloads;
|
|
@@ -303,6 +268,13 @@ __name(_ts_decorate4, "_ts_decorate");
|
|
|
303
268
|
var DEFAULT_BLOCK_SIZE = 10;
|
|
304
269
|
var XYO_PRODUCER_REDECLARATION_DURATION = 1e4;
|
|
305
270
|
var XYO_PRODUCER_REDECLARATION_WINDOW = 500;
|
|
271
|
+
var BaseBlockProducerServiceParamsZod = z2.object({
|
|
272
|
+
balanceService: z2.object().loose(),
|
|
273
|
+
pendingTransactionsService: z2.object().loose(),
|
|
274
|
+
rejectedTransactionsArchivist: z2.object().loose(),
|
|
275
|
+
rewardAddress: AddressZod,
|
|
276
|
+
time: z2.object().loose()
|
|
277
|
+
});
|
|
306
278
|
var BaseBlockProducerService = class _BaseBlockProducerService extends BaseService {
|
|
307
279
|
static {
|
|
308
280
|
__name(this, "BaseBlockProducerService");
|
|
@@ -332,40 +304,47 @@ var BaseBlockProducerService = class _BaseBlockProducerService extends BaseServi
|
|
|
332
304
|
return this.account.address;
|
|
333
305
|
}
|
|
334
306
|
get account() {
|
|
335
|
-
return
|
|
307
|
+
return assertEx4(this.params.account, () => "account is required");
|
|
336
308
|
}
|
|
337
309
|
get balanceService() {
|
|
338
|
-
return
|
|
310
|
+
return assertEx4(this.params.balanceService, () => "balanceService is required");
|
|
339
311
|
}
|
|
340
312
|
get chainArchivist() {
|
|
341
|
-
return
|
|
313
|
+
return assertEx4(this.params.chainArchivist, () => "chainArchivist is required");
|
|
342
314
|
}
|
|
343
315
|
get chainId() {
|
|
344
|
-
return
|
|
316
|
+
return assertEx4(this.params.chainId, () => "chainId is required");
|
|
345
317
|
}
|
|
346
318
|
get electionService() {
|
|
347
|
-
return
|
|
319
|
+
return assertEx4(this.params.electionService, () => "electionService is required");
|
|
348
320
|
}
|
|
349
321
|
get pendingTransactionsService() {
|
|
350
|
-
return
|
|
322
|
+
return assertEx4(this.params.pendingTransactionsService, () => "Missing pendingTransactionsService");
|
|
351
323
|
}
|
|
352
324
|
get rejectedTransactionsArchivist() {
|
|
353
|
-
return
|
|
325
|
+
return assertEx4(this.params.rejectedTransactionsArchivist, () => "No rejected bundled transactions archivist");
|
|
354
326
|
}
|
|
355
327
|
get rewardAddress() {
|
|
356
|
-
return
|
|
328
|
+
return assertEx4(this.params.rewardAddress, () => "No reward address provided");
|
|
357
329
|
}
|
|
358
330
|
get rewardService() {
|
|
359
|
-
return
|
|
331
|
+
return assertEx4(this.params.rewardService, () => "rewardService is required");
|
|
360
332
|
}
|
|
361
333
|
get stakeIntentService() {
|
|
362
|
-
return
|
|
334
|
+
return assertEx4(this.params.stakeIntentService, () => "No StakeIntentService provided");
|
|
363
335
|
}
|
|
364
336
|
get time() {
|
|
365
|
-
return
|
|
337
|
+
return assertEx4(this.params.time, () => "No TimeSyncViewer provided");
|
|
366
338
|
}
|
|
367
339
|
get validateHydratedBlockState() {
|
|
368
|
-
return
|
|
340
|
+
return assertEx4(this.params.validateHydratedBlockState, () => "validateHydratedBlockState is required");
|
|
341
|
+
}
|
|
342
|
+
static async paramsHandler(params) {
|
|
343
|
+
BaseBlockProducerServiceParamsZod.parse(params);
|
|
344
|
+
return {
|
|
345
|
+
...await super.paramsHandler(params),
|
|
346
|
+
...params
|
|
347
|
+
};
|
|
369
348
|
}
|
|
370
349
|
async next(head) {
|
|
371
350
|
if (head.chain !== this.chainId) return;
|
|
@@ -390,8 +369,8 @@ var BaseBlockProducerService = class _BaseBlockProducerService extends BaseServi
|
|
|
390
369
|
}
|
|
391
370
|
});
|
|
392
371
|
}
|
|
393
|
-
const blockHex =
|
|
394
|
-
const blockId = new
|
|
372
|
+
const blockHex = assertEx4(toHex(block), () => "Failed to convert block to hex");
|
|
373
|
+
const blockId = new PayloadBuilder2({
|
|
395
374
|
schema: BlockNumberSchema
|
|
396
375
|
}).fields({
|
|
397
376
|
block: blockHex
|
|
@@ -419,7 +398,7 @@ var BaseBlockProducerService = class _BaseBlockProducerService extends BaseServi
|
|
|
419
398
|
}
|
|
420
399
|
async proposeNextValidBlock(head, validateBalances = false) {
|
|
421
400
|
return await this.spanAsync("proposeNextValidBlock", async () => {
|
|
422
|
-
const { block: previousBlock } =
|
|
401
|
+
const { block: previousBlock } = assertEx4(asBlockBoundWitness(head), () => "Invalid head block");
|
|
423
402
|
const nextBlock = previousBlock + 1;
|
|
424
403
|
const nextBlockTransactionsStart = Date.now();
|
|
425
404
|
const nextBlockTransactions = await this.pendingTransactionsService.getPendingTransactions(head._hash, _BaseBlockProducerService.DefaultBlockSize);
|
|
@@ -513,7 +492,7 @@ var BaseBlockProducerService = class _BaseBlockProducerService extends BaseServi
|
|
|
513
492
|
*/
|
|
514
493
|
heartbeatRequired(head) {
|
|
515
494
|
const epoch = head.$epoch;
|
|
516
|
-
if (
|
|
495
|
+
if (isDefined(epoch)) {
|
|
517
496
|
const { heartbeatInterval } = this.params.config.producer;
|
|
518
497
|
if (Date.now() - epoch > heartbeatInterval) {
|
|
519
498
|
return true;
|
|
@@ -548,7 +527,7 @@ BaseBlockRewardService = _ts_decorate5([
|
|
|
548
527
|
], BaseBlockRewardService);
|
|
549
528
|
|
|
550
529
|
// src/BlockReward/EvmBlockRewardService.ts
|
|
551
|
-
import { assertEx as
|
|
530
|
+
import { assertEx as assertEx5, creatable as creatable6, toEthAddress } from "@xylabs/sdk-js";
|
|
552
531
|
import { XyoChainRewards__factory as XyoChainRewardsFactory } from "@xyo-network/typechain";
|
|
553
532
|
function _ts_decorate6(decorators, target, key, desc) {
|
|
554
533
|
var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
|
|
@@ -563,13 +542,13 @@ var EvmBlockRewardService = class extends BaseBlockRewardService {
|
|
|
563
542
|
}
|
|
564
543
|
_contractAddress;
|
|
565
544
|
get chainService() {
|
|
566
|
-
return
|
|
545
|
+
return assertEx5(this.params.chainService, () => "chainService is required");
|
|
567
546
|
}
|
|
568
547
|
get contractAddress() {
|
|
569
|
-
return
|
|
548
|
+
return assertEx5(this._contractAddress, () => "contractAddress is required");
|
|
570
549
|
}
|
|
571
550
|
get provider() {
|
|
572
|
-
return
|
|
551
|
+
return assertEx5(this.params.provider, () => "provider is required");
|
|
573
552
|
}
|
|
574
553
|
async createHandler() {
|
|
575
554
|
await super.createHandler();
|
|
@@ -590,7 +569,7 @@ EvmBlockRewardService = _ts_decorate6([
|
|
|
590
569
|
], EvmBlockRewardService);
|
|
591
570
|
|
|
592
571
|
// src/BlockReward/MemoryBlockRewardService.ts
|
|
593
|
-
import { assertEx as
|
|
572
|
+
import { assertEx as assertEx6, creatable as creatable7, toFixedPoint } from "@xylabs/sdk-js";
|
|
594
573
|
import { rewardFromBlockNumber } from "@xyo-network/chain-protocol";
|
|
595
574
|
function _ts_decorate7(decorators, target, key, desc) {
|
|
596
575
|
var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
|
|
@@ -605,22 +584,22 @@ var MemoryBlockRewardService = class extends BaseBlockRewardService {
|
|
|
605
584
|
}
|
|
606
585
|
rewardFromBlockNumber = rewardFromBlockNumber(18);
|
|
607
586
|
get creatorReward() {
|
|
608
|
-
return
|
|
587
|
+
return assertEx6(this.params.creatorReward, () => "creatorReward is required");
|
|
609
588
|
}
|
|
610
589
|
get initialReward() {
|
|
611
|
-
return
|
|
590
|
+
return assertEx6(this.params.initialStepReward, () => "initialStepReward is required");
|
|
612
591
|
}
|
|
613
592
|
get minRewardPerBlock() {
|
|
614
|
-
return
|
|
593
|
+
return assertEx6(this.params.minRewardPerBlock, () => "minRewardPerBlock is required");
|
|
615
594
|
}
|
|
616
595
|
get stepFactorDenominator() {
|
|
617
|
-
return
|
|
596
|
+
return assertEx6(this.params.stepFactorDenominator, () => "stepFactorDenominator is required");
|
|
618
597
|
}
|
|
619
598
|
get stepFactorNumerator() {
|
|
620
|
-
return
|
|
599
|
+
return assertEx6(this.params.stepFactorNumerator, () => "stepFactorNumerator is required");
|
|
621
600
|
}
|
|
622
601
|
get stepSize() {
|
|
623
|
-
return
|
|
602
|
+
return assertEx6(this.params.stepSize, () => "stepSize is required");
|
|
624
603
|
}
|
|
625
604
|
static async paramsHandler(inParams) {
|
|
626
605
|
return {
|
|
@@ -641,10 +620,71 @@ MemoryBlockRewardService = _ts_decorate7([
|
|
|
641
620
|
creatable7()
|
|
642
621
|
], MemoryBlockRewardService);
|
|
643
622
|
|
|
623
|
+
// src/blockViewerFromChainIteratorAndArchivist.ts
|
|
624
|
+
import { isDefined as isDefined2 } from "@xylabs/sdk-js";
|
|
625
|
+
import { PayloadBuilder as PayloadBuilder3 } from "@xyo-network/payload-builder";
|
|
626
|
+
import { asSignedBlockBoundWitness, asSignedBlockBoundWitnessWithStorageMeta } from "@xyo-network/xl1-protocol";
|
|
627
|
+
function blockViewerFromChainIteratorAndArchivist(chainIterator, chainArchivist) {
|
|
628
|
+
const result = {
|
|
629
|
+
blockByHash: /* @__PURE__ */ __name(async function(hash) {
|
|
630
|
+
const [payload] = await chainArchivist.get([
|
|
631
|
+
hash
|
|
632
|
+
]);
|
|
633
|
+
const block = asSignedBlockBoundWitnessWithStorageMeta(payload);
|
|
634
|
+
if (isDefined2(block)) {
|
|
635
|
+
const payloads = await chainArchivist.get(block.payload_hashes);
|
|
636
|
+
return [
|
|
637
|
+
block,
|
|
638
|
+
payloads
|
|
639
|
+
];
|
|
640
|
+
}
|
|
641
|
+
return null;
|
|
642
|
+
}, "blockByHash"),
|
|
643
|
+
blockByNumber: /* @__PURE__ */ __name(async function(blockNumber) {
|
|
644
|
+
const payload = asSignedBlockBoundWitness(await chainIterator.get(blockNumber));
|
|
645
|
+
const block = payload ? await PayloadBuilder3.addHashMeta(payload) : void 0;
|
|
646
|
+
if (isDefined2(block)) {
|
|
647
|
+
const payloads = await chainArchivist.get(block.payload_hashes);
|
|
648
|
+
return [
|
|
649
|
+
block,
|
|
650
|
+
payloads
|
|
651
|
+
];
|
|
652
|
+
}
|
|
653
|
+
return null;
|
|
654
|
+
}, "blockByNumber"),
|
|
655
|
+
blocksByHash: /* @__PURE__ */ __name(async function(hash, limit = 10) {
|
|
656
|
+
const results = [];
|
|
657
|
+
for (let i = 0; i < limit; i++) {
|
|
658
|
+
const block = await this.blockByHash(hash);
|
|
659
|
+
if (block) {
|
|
660
|
+
results.push(block);
|
|
661
|
+
} else {
|
|
662
|
+
break;
|
|
663
|
+
}
|
|
664
|
+
}
|
|
665
|
+
return results;
|
|
666
|
+
}, "blocksByHash"),
|
|
667
|
+
currentBlock: /* @__PURE__ */ __name(async function() {
|
|
668
|
+
const head = await chainIterator.head();
|
|
669
|
+
return this.blockByHash(head._hash);
|
|
670
|
+
}, "currentBlock"),
|
|
671
|
+
currentBlockHash: /* @__PURE__ */ __name(async function() {
|
|
672
|
+
const head = await chainIterator.head();
|
|
673
|
+
return head._hash;
|
|
674
|
+
}, "currentBlockHash"),
|
|
675
|
+
currentBlockNumber: /* @__PURE__ */ __name(async function() {
|
|
676
|
+
const head = await chainIterator.head();
|
|
677
|
+
return head.block;
|
|
678
|
+
}, "currentBlockNumber")
|
|
679
|
+
};
|
|
680
|
+
return result;
|
|
681
|
+
}
|
|
682
|
+
__name(blockViewerFromChainIteratorAndArchivist, "blockViewerFromChainIteratorAndArchivist");
|
|
683
|
+
|
|
644
684
|
// src/ChainBlockNumberIteration/ChainBlockNumberIterationService.ts
|
|
645
|
-
import { assertEx as
|
|
685
|
+
import { assertEx as assertEx7, isDefined as isDefined3, isNull, isUndefined } from "@xylabs/sdk-js";
|
|
646
686
|
import { PayloadBuilder as PayloadBuilder4 } from "@xyo-network/payload-builder";
|
|
647
|
-
import { asBlockBoundWitness as asBlockBoundWitness2, asBlockBoundWitnessWithStorageMeta
|
|
687
|
+
import { asBlockBoundWitness as asBlockBoundWitness2, asBlockBoundWitnessWithStorageMeta, isBlockBoundWitnessWithHashMeta } from "@xyo-network/xl1-protocol";
|
|
648
688
|
import { LRUCache } from "lru-cache";
|
|
649
689
|
var ChainBlockNumberIterationService = class extends BaseService {
|
|
650
690
|
static {
|
|
@@ -655,21 +695,21 @@ var ChainBlockNumberIterationService = class extends BaseService {
|
|
|
655
695
|
});
|
|
656
696
|
_currentHead;
|
|
657
697
|
get chainId() {
|
|
658
|
-
return
|
|
698
|
+
return assertEx7(this._currentHead?.chain ?? this.params?.head?.chain, () => "Current head is not set");
|
|
659
699
|
}
|
|
660
700
|
get chainMap() {
|
|
661
|
-
return
|
|
701
|
+
return assertEx7(this.params.chainMap);
|
|
662
702
|
}
|
|
663
703
|
async get(block) {
|
|
664
704
|
const head = await this.head();
|
|
665
|
-
|
|
705
|
+
assertEx7(head.block >= block, () => `Block requested is newer than the current head [${block}]`);
|
|
666
706
|
const cached = this._blocksByBlockNumber.get(block);
|
|
667
707
|
if (cached) return cached;
|
|
668
708
|
const startingBlock = head;
|
|
669
709
|
const currentBlockHash = await PayloadBuilder4.hash(startingBlock);
|
|
670
710
|
let currentBlock = await this.chainMap.get(currentBlockHash);
|
|
671
711
|
while (isDefined3(currentBlock)) {
|
|
672
|
-
|
|
712
|
+
assertEx7(asBlockBoundWitness2(currentBlock), () => `Expected hash to be a block bound witness [${currentBlock?._hash}]`);
|
|
673
713
|
if (isBlockBoundWitnessWithHashMeta(currentBlock)) {
|
|
674
714
|
this._blocksByBlockNumber.set(currentBlock.block, currentBlock);
|
|
675
715
|
if (currentBlock.block === block) {
|
|
@@ -707,10 +747,10 @@ var ChainBlockNumberIterationService = class extends BaseService {
|
|
|
707
747
|
const { previous } = currentBlock;
|
|
708
748
|
if (isNull(previous)) break;
|
|
709
749
|
const nextBlock = await this.chainMap.get(previous);
|
|
710
|
-
currentBlock =
|
|
750
|
+
currentBlock = asBlockBoundWitnessWithStorageMeta(nextBlock);
|
|
711
751
|
} else {
|
|
712
752
|
const hash = PayloadBuilder4.hash(currentBlock);
|
|
713
|
-
|
|
753
|
+
assertEx7(asBlockBoundWitnessWithStorageMeta(currentBlock), () => `Expected hash to be a block bound witness [${hash}]`);
|
|
714
754
|
}
|
|
715
755
|
}
|
|
716
756
|
return results;
|
|
@@ -727,14 +767,14 @@ var ChainBlockNumberIterationService = class extends BaseService {
|
|
|
727
767
|
async getBoundWitnessAsBlockBoundWitnessWithStorageMeta(head) {
|
|
728
768
|
const hash = await PayloadBuilder4.hash(head);
|
|
729
769
|
const stored = await this.chainMap.get(hash);
|
|
730
|
-
const newHead =
|
|
770
|
+
const newHead = asBlockBoundWitnessWithStorageMeta(stored);
|
|
731
771
|
if (isUndefined(newHead)) throw new Error(`Head block not found in archivist [${hash}]`);
|
|
732
772
|
return newHead;
|
|
733
773
|
}
|
|
734
774
|
};
|
|
735
775
|
|
|
736
776
|
// src/ChainService/Evm/Evm.ts
|
|
737
|
-
import { assertEx as
|
|
777
|
+
import { assertEx as assertEx8, toAddress, toEthAddress as toEthAddress2 } from "@xylabs/sdk-js";
|
|
738
778
|
import { StakedXyoChain__factory as StakedXyoChainFactory } from "@xyo-network/typechain";
|
|
739
779
|
import { getAddress } from "ethers/address";
|
|
740
780
|
var EvmChainService = class extends BaseService {
|
|
@@ -742,16 +782,16 @@ var EvmChainService = class extends BaseService {
|
|
|
742
782
|
__name(this, "EvmChainService");
|
|
743
783
|
}
|
|
744
784
|
get chainId() {
|
|
745
|
-
return
|
|
785
|
+
return assertEx8(this.params.id);
|
|
746
786
|
}
|
|
747
787
|
get contract() {
|
|
748
788
|
if (this.params.contract === void 0) {
|
|
749
789
|
this.params.contract = StakedXyoChainFactory.connect(toEthAddress2(this.chainId), this.params.runner);
|
|
750
790
|
}
|
|
751
|
-
return
|
|
791
|
+
return assertEx8(this.params.contract);
|
|
752
792
|
}
|
|
753
793
|
get runner() {
|
|
754
|
-
return
|
|
794
|
+
return assertEx8(this.params.runner);
|
|
755
795
|
}
|
|
756
796
|
async active() {
|
|
757
797
|
return await this.contract.active();
|
|
@@ -810,7 +850,7 @@ var EvmChainService = class extends BaseService {
|
|
|
810
850
|
};
|
|
811
851
|
|
|
812
852
|
// src/ChainService/Memory/Memory.ts
|
|
813
|
-
import { assertEx as
|
|
853
|
+
import { assertEx as assertEx9, toAddress as toAddress2, ZERO_ADDRESS } from "@xylabs/sdk-js";
|
|
814
854
|
var MemoryChainService = class extends BaseService {
|
|
815
855
|
static {
|
|
816
856
|
__name(this, "MemoryChainService");
|
|
@@ -818,7 +858,7 @@ var MemoryChainService = class extends BaseService {
|
|
|
818
858
|
_chainId;
|
|
819
859
|
_simulatedStake = 1n;
|
|
820
860
|
get chainId() {
|
|
821
|
-
return
|
|
861
|
+
return assertEx9(this._chainId, () => "Chain ID not set");
|
|
822
862
|
}
|
|
823
863
|
async active() {
|
|
824
864
|
return await Promise.resolve(this._simulatedStake);
|
|
@@ -879,7 +919,7 @@ var MemoryChainService = class extends BaseService {
|
|
|
879
919
|
};
|
|
880
920
|
|
|
881
921
|
// src/ChainValidator/XyoValidator.ts
|
|
882
|
-
import { assertEx as
|
|
922
|
+
import { assertEx as assertEx10, creatable as creatable8 } from "@xylabs/sdk-js";
|
|
883
923
|
function _ts_decorate8(decorators, target, key, desc) {
|
|
884
924
|
var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
|
|
885
925
|
if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
|
|
@@ -895,22 +935,22 @@ var XyoValidator = class extends BaseService {
|
|
|
895
935
|
return this.account.address;
|
|
896
936
|
}
|
|
897
937
|
get account() {
|
|
898
|
-
return
|
|
938
|
+
return assertEx10(this.params.account, () => "account is required");
|
|
899
939
|
}
|
|
900
940
|
get chainArchivist() {
|
|
901
|
-
return
|
|
941
|
+
return assertEx10(this.params.chainArchivist, () => "chainArchivist is required");
|
|
902
942
|
}
|
|
903
943
|
get chainInfo() {
|
|
904
|
-
return
|
|
944
|
+
return assertEx10(this.params.chainId, () => "chainInfo is required");
|
|
905
945
|
}
|
|
906
946
|
get electionService() {
|
|
907
|
-
return
|
|
947
|
+
return assertEx10(this.params.electionService, () => "electionService is required");
|
|
908
948
|
}
|
|
909
949
|
get pendingBundledTransactionsArchivist() {
|
|
910
|
-
return
|
|
950
|
+
return assertEx10(this.params.pendingBundledTransactionsArchivist, () => "pendingBundledTransactions is required");
|
|
911
951
|
}
|
|
912
952
|
get rewardService() {
|
|
913
|
-
return
|
|
953
|
+
return assertEx10(this.params.rewardService, () => "rewardService is required");
|
|
914
954
|
}
|
|
915
955
|
validatePendingBlock(_block) {
|
|
916
956
|
return [];
|
|
@@ -929,7 +969,7 @@ XyoValidator = _ts_decorate8([
|
|
|
929
969
|
], XyoValidator);
|
|
930
970
|
|
|
931
971
|
// src/Election/BaseElectionService.ts
|
|
932
|
-
import { assertEx as
|
|
972
|
+
import { assertEx as assertEx11, creatable as creatable9 } from "@xylabs/sdk-js";
|
|
933
973
|
import { hexToLast4BytesInt, shuffleWithSeed } from "@xyo-network/chain-utils";
|
|
934
974
|
function _ts_decorate9(decorators, target, key, desc) {
|
|
935
975
|
var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
|
|
@@ -943,13 +983,13 @@ var BaseElectionService = class extends BaseService {
|
|
|
943
983
|
__name(this, "BaseElectionService");
|
|
944
984
|
}
|
|
945
985
|
get chainIterator() {
|
|
946
|
-
return
|
|
986
|
+
return assertEx11(this.params.chainIterator, () => "No chain iterator");
|
|
947
987
|
}
|
|
948
988
|
get chainStakeViewer() {
|
|
949
|
-
return
|
|
989
|
+
return assertEx11(this.params.chainStakeViewer, () => "No chain stake viewer");
|
|
950
990
|
}
|
|
951
991
|
get stakeIntentService() {
|
|
952
|
-
return
|
|
992
|
+
return assertEx11(this.params.stakeIntentService, () => "No staked intent service");
|
|
953
993
|
}
|
|
954
994
|
async getCreatorCommitteeForNextBlock(current) {
|
|
955
995
|
return await this.spanAsync("getCreatorCommitteeForNextBlock", async () => {
|
|
@@ -1044,23 +1084,23 @@ BaseNetworkStakeStepRewardService = _ts_decorate10([
|
|
|
1044
1084
|
|
|
1045
1085
|
// src/PendingTransactions/BasePendingTransactions.ts
|
|
1046
1086
|
import { ValueType } from "@opentelemetry/api";
|
|
1047
|
-
import { assertEx as
|
|
1087
|
+
import { assertEx as assertEx12, creatable as creatable11, exists as exists2, filterAs, filterAsync, forget, isDefined as isDefined4, isUndefined as isUndefined2 } from "@xylabs/sdk-js";
|
|
1048
1088
|
import { MemoryArchivist } from "@xyo-network/archivist-memory";
|
|
1049
1089
|
import { findMostRecentBlock as findMostRecentBlock2 } from "@xyo-network/chain-protocol";
|
|
1050
|
-
import { asBlockBoundWitnessWithHashMeta, isTransactionBoundWitnessWithStorageMeta } from "@xyo-network/xl1-protocol";
|
|
1090
|
+
import { asBlockBoundWitnessWithHashMeta, asXL1BlockNumber, isTransactionBoundWitnessWithStorageMeta } from "@xyo-network/xl1-protocol";
|
|
1051
1091
|
import { TransactionJsonSchemaValidator, validateTransaction } from "@xyo-network/xl1-validation";
|
|
1052
1092
|
import { Mutex as Mutex2 } from "async-mutex";
|
|
1053
1093
|
|
|
1054
1094
|
// src/PendingTransactions/bundledPayloadToHydratedTransaction.ts
|
|
1055
1095
|
import { PayloadBuilder as PayloadBuilder5 } from "@xyo-network/payload-builder";
|
|
1056
|
-
import {
|
|
1096
|
+
import { asSignedTransactionBoundWitnessWithHashMeta } from "@xyo-network/xl1-protocol";
|
|
1057
1097
|
var bundledPayloadToHydratedTransaction = /* @__PURE__ */ __name(async (payload) => {
|
|
1058
|
-
const
|
|
1059
|
-
const tx =
|
|
1098
|
+
const withHashMeta = await PayloadBuilder5.addHashMeta(payload.payloads);
|
|
1099
|
+
const tx = asSignedTransactionBoundWitnessWithHashMeta(withHashMeta.find((p) => p._hash === payload.root));
|
|
1060
1100
|
if (tx) {
|
|
1061
1101
|
return [
|
|
1062
1102
|
tx,
|
|
1063
|
-
|
|
1103
|
+
withHashMeta.filter((p) => p._hash !== payload.root)
|
|
1064
1104
|
];
|
|
1065
1105
|
}
|
|
1066
1106
|
}, "bundledPayloadToHydratedTransaction");
|
|
@@ -1138,23 +1178,23 @@ var BasePendingTransactionsService = class _BasePendingTransactionsService exten
|
|
|
1138
1178
|
return this.params.additionalPendingTransactionValidators ?? [];
|
|
1139
1179
|
}
|
|
1140
1180
|
get chainArchivist() {
|
|
1141
|
-
return
|
|
1181
|
+
return assertEx12(this.params.chainArchivist, () => "No completed blocks with data archivist");
|
|
1142
1182
|
}
|
|
1143
1183
|
get chainId() {
|
|
1144
|
-
return
|
|
1184
|
+
return assertEx12(this.params.chainId, () => "No chain id");
|
|
1145
1185
|
}
|
|
1146
1186
|
get pendingBundledTransactionsArchivist() {
|
|
1147
|
-
return
|
|
1187
|
+
return assertEx12(this.params.pendingBundledTransactionsArchivist, () => "No pending bundled transactions archivist");
|
|
1148
1188
|
}
|
|
1149
1189
|
get pendingBundledTransactionsLocalArchivist() {
|
|
1150
|
-
return
|
|
1190
|
+
return assertEx12(this._curatedPendingBundledTransactionsArchivist, () => "No pending bundled transactions curated archivist");
|
|
1151
1191
|
}
|
|
1152
1192
|
get pendingTransactionsCount() {
|
|
1153
1193
|
forget(this.countPendingTransactions());
|
|
1154
1194
|
return this._pendingTransactionsCount;
|
|
1155
1195
|
}
|
|
1156
1196
|
get rejectedTransactionsArchivist() {
|
|
1157
|
-
return
|
|
1197
|
+
return assertEx12(this.params.rejectedTransactionsArchivist, () => "No rejected transactions archivist");
|
|
1158
1198
|
}
|
|
1159
1199
|
async createHandler() {
|
|
1160
1200
|
await super.createHandler();
|
|
@@ -1186,7 +1226,7 @@ var BasePendingTransactionsService = class _BasePendingTransactionsService exten
|
|
|
1186
1226
|
return await this._updateCuratedPendingTransactionsArchivistMutex.runExclusive(async () => {
|
|
1187
1227
|
let [lastHead] = filterAs(await this.chainArchivist.get([
|
|
1188
1228
|
head
|
|
1189
|
-
]), asBlockBoundWitnessWithHashMeta);
|
|
1229
|
+
]), (x) => asBlockBoundWitnessWithHashMeta(x));
|
|
1190
1230
|
if (isUndefined2(lastHead)) return [];
|
|
1191
1231
|
await this.pruneCuratedPendingTransactionsArchivist(lastHead._hash);
|
|
1192
1232
|
const foundPendingTransactions = [];
|
|
@@ -1201,7 +1241,7 @@ var BasePendingTransactionsService = class _BasePendingTransactionsService exten
|
|
|
1201
1241
|
cursor = pendingBundledTransactions.at(-1)?._sequence;
|
|
1202
1242
|
const undeletedTransactionBundles = pendingBundledTransactions.filter((tx) => !this._removablePendingTransactionHashes.has(tx.root));
|
|
1203
1243
|
const transactions = (await Promise.all(undeletedTransactionBundles.map((p) => bundledPayloadToHydratedTransaction(p)))).filter(exists2);
|
|
1204
|
-
const activeTransactions = transactions.filter(isTransactionActive(lastHead.block + 1));
|
|
1244
|
+
const activeTransactions = transactions.filter(isTransactionActive(asXL1BlockNumber(lastHead.block + 1, true)));
|
|
1205
1245
|
const txValidationResults = await Promise.all(activeTransactions.map(async (tx) => [
|
|
1206
1246
|
tx,
|
|
1207
1247
|
await validateTransaction(tx, {
|
|
@@ -1292,7 +1332,7 @@ var BasePendingTransactionsService = class _BasePendingTransactionsService exten
|
|
|
1292
1332
|
let cursor;
|
|
1293
1333
|
let [lastHead] = filterAs(await this.chainArchivist.get([
|
|
1294
1334
|
head
|
|
1295
|
-
]), asBlockBoundWitnessWithHashMeta);
|
|
1335
|
+
]), (x) => asBlockBoundWitnessWithHashMeta(x));
|
|
1296
1336
|
while (isDefined4(lastHead)) {
|
|
1297
1337
|
const pendingBundledTransactions = await this.pendingBundledTransactionsLocalArchivist.next({
|
|
1298
1338
|
limit: 100,
|
|
@@ -1307,7 +1347,7 @@ var BasePendingTransactionsService = class _BasePendingTransactionsService exten
|
|
|
1307
1347
|
foundPendingTransactionsToDeleteHashes.push(...deletedTransactionBundles.map((tx) => tx._hash).filter(exists2));
|
|
1308
1348
|
const undeletedTransactionBundles = pendingBundledTransactions.filter((tx) => !this._removablePendingTransactionHashes.has(tx.root));
|
|
1309
1349
|
const transactions = (await Promise.all(undeletedTransactionBundles.map((p) => bundledPayloadToHydratedTransaction(p)))).filter(exists2);
|
|
1310
|
-
const expiredTransactions = transactions.filter(isTransactionExpired(lastHead.block + 1));
|
|
1350
|
+
const expiredTransactions = transactions.filter(isTransactionExpired(asXL1BlockNumber(lastHead.block + 1, true)));
|
|
1311
1351
|
const expiredBundleHashes = expiredTransactions.map((expiredHydratedTx) => (
|
|
1312
1352
|
// Find the corresponding payload bundle hash for the expired transaction
|
|
1313
1353
|
pendingBundledTransactions.find((bundledTx) => bundledTx.root === expiredHydratedTx[0]._hash)?._hash
|
|
@@ -1371,13 +1411,13 @@ BaseSchemasService = _ts_decorate12([
|
|
|
1371
1411
|
|
|
1372
1412
|
// src/StakeIntent/lib/getBlockSignedStakeDeclarations.ts
|
|
1373
1413
|
import { exists as exists3, filterAs as filterAs2 } from "@xylabs/sdk-js";
|
|
1374
|
-
import {
|
|
1414
|
+
import { isBoundWitness } from "@xyo-network/boundwitness-model";
|
|
1375
1415
|
import { payloadSchemasContains } from "@xyo-network/boundwitness-validator";
|
|
1376
1416
|
import { BoundWitnessWrapper } from "@xyo-network/boundwitness-wrapper";
|
|
1377
1417
|
import { asChainStakeIntent, ChainStakeIntentSchema } from "@xyo-network/xl1-protocol";
|
|
1378
1418
|
var getBlockSignedStakeDeclarations = /* @__PURE__ */ __name(async (block, archivist, intent) => {
|
|
1379
1419
|
const blockData = await archivist.get(block.payload_hashes);
|
|
1380
|
-
const bwsFromBlock =
|
|
1420
|
+
const bwsFromBlock = blockData.filter((x) => isBoundWitness(x));
|
|
1381
1421
|
const bwsFromBlockWithDeclarations = bwsFromBlock.filter((bw) => payloadSchemasContains(bw, ChainStakeIntentSchema));
|
|
1382
1422
|
const validBlockBwsWithDeclarations = await filterToValidSignedBoundWitnesses(bwsFromBlockWithDeclarations);
|
|
1383
1423
|
return (await Promise.all(validBlockBwsWithDeclarations.map(async (bw) => {
|
|
@@ -1396,11 +1436,11 @@ var mapBoundWitnessToStakeIntentHashes = /* @__PURE__ */ __name((bw) => {
|
|
|
1396
1436
|
}, "mapBoundWitnessToStakeIntentHashes");
|
|
1397
1437
|
|
|
1398
1438
|
// src/StakeIntent/XyoStakeIntentService.ts
|
|
1399
|
-
import { asAddress, assertEx as
|
|
1439
|
+
import { asAddress, assertEx as assertEx13, creatable as creatable13, filterAs as filterAs3, isUndefined as isUndefined3 } from "@xylabs/sdk-js";
|
|
1400
1440
|
import { analyzeChain, ChainStakeIntentAnalyzer, isChainSummaryStakeIntent } from "@xyo-network/chain-analyze";
|
|
1401
1441
|
import { DEFAULT_FIND_FIRST_MATCHING_NEXT_OPTIONS, findFirstMatching, IntervalMap } from "@xyo-network/chain-utils";
|
|
1402
1442
|
import { PayloadBuilder as PayloadBuilder7 } from "@xyo-network/payload-builder";
|
|
1403
|
-
import { asBlockBoundWitness as asBlockBoundWitness3, asBlockBoundWitnessWithStorageMeta as
|
|
1443
|
+
import { asBlockBoundWitness as asBlockBoundWitness3, asBlockBoundWitnessWithStorageMeta as asBlockBoundWitnessWithStorageMeta2, asChainStakeIntent as asChainStakeIntent2 } from "@xyo-network/xl1-protocol";
|
|
1404
1444
|
import { asChainIndexingServiceStateWithStorageMeta, ChainIndexingServiceStateSchema, isChainIndexingServiceState, readPayloadMapFromStore as readPayloadMapFromStore2, timeBudget } from "@xyo-network/xl1-protocol-sdk";
|
|
1405
1445
|
import { Mutex as Mutex3 } from "async-mutex";
|
|
1406
1446
|
import { LRUCache as LRUCache2 } from "lru-cache";
|
|
@@ -1433,16 +1473,16 @@ var XyoStakeIntentService = class extends BaseService {
|
|
|
1433
1473
|
});
|
|
1434
1474
|
_updateMutex = new Mutex3();
|
|
1435
1475
|
get chainArchivist() {
|
|
1436
|
-
return
|
|
1476
|
+
return assertEx13(this.params.chainArchivist, () => "chainArchivist not set");
|
|
1437
1477
|
}
|
|
1438
1478
|
get chainIterator() {
|
|
1439
|
-
return
|
|
1479
|
+
return assertEx13(this.params.chainIterator, () => "chainIterator not set");
|
|
1440
1480
|
}
|
|
1441
1481
|
get chainStakeViewer() {
|
|
1442
|
-
return
|
|
1482
|
+
return assertEx13(this.params.chainStakeViewer, () => "chainStakeViewer not set");
|
|
1443
1483
|
}
|
|
1444
1484
|
get stakeIntentStateArchivist() {
|
|
1445
|
-
return
|
|
1485
|
+
return assertEx13(this.params.stakeIntentStateArchivist, () => "stakeIntentStateArchivist not set");
|
|
1446
1486
|
}
|
|
1447
1487
|
async createHandler() {
|
|
1448
1488
|
this.chainIterator.on("headUpdated", async () => {
|
|
@@ -1455,13 +1495,13 @@ var XyoStakeIntentService = class extends BaseService {
|
|
|
1455
1495
|
}
|
|
1456
1496
|
async getDeclaredCandidateRanges(address, intent) {
|
|
1457
1497
|
await Promise.resolve();
|
|
1458
|
-
|
|
1498
|
+
assertEx13(intent === "producer", () => `Support not yet added for intent ${intent}`);
|
|
1459
1499
|
const results = this._producers.get(address);
|
|
1460
1500
|
return results ?? [];
|
|
1461
1501
|
}
|
|
1462
1502
|
async getDeclaredCandidatesForBlock(block, intent) {
|
|
1463
1503
|
return await this.spanAsync("getDeclaredCandidatesForBlock", async () => {
|
|
1464
|
-
|
|
1504
|
+
assertEx13(intent === "producer", () => `Support not yet added for intent ${intent}`);
|
|
1465
1505
|
const results = this._producers.findAllContaining(block);
|
|
1466
1506
|
const candidates = [
|
|
1467
1507
|
...results
|
|
@@ -1527,7 +1567,7 @@ var XyoStakeIntentService = class extends BaseService {
|
|
|
1527
1567
|
}
|
|
1528
1568
|
async recoverState(current) {
|
|
1529
1569
|
return await timeBudget("XyoStakeIntentService.recoverState", console, async () => {
|
|
1530
|
-
const currentBlock =
|
|
1570
|
+
const currentBlock = assertEx13(asBlockBoundWitness3((await this.chainArchivist.get([
|
|
1531
1571
|
current
|
|
1532
1572
|
]))?.[0]), () => `Block ${current} not found`);
|
|
1533
1573
|
const currentBlockNum = currentBlock.block;
|
|
@@ -1544,7 +1584,7 @@ var XyoStakeIntentService = class extends BaseService {
|
|
|
1544
1584
|
const indexed = (await this.chainArchivist.get([
|
|
1545
1585
|
state.endBlockHash
|
|
1546
1586
|
]))?.[0];
|
|
1547
|
-
const indexedBlock =
|
|
1587
|
+
const indexedBlock = asBlockBoundWitnessWithStorageMeta2(indexed);
|
|
1548
1588
|
if (indexedBlock) {
|
|
1549
1589
|
const indexedBlockNum = indexedBlock.block;
|
|
1550
1590
|
if (indexedBlockNum <= currentBlockNum) {
|
|
@@ -1671,9 +1711,11 @@ BaseTimeSyncService = _ts_decorate15([
|
|
|
1671
1711
|
], BaseTimeSyncService);
|
|
1672
1712
|
export {
|
|
1673
1713
|
BaseAccountBalanceService,
|
|
1714
|
+
BaseAccountBalanceServiceParamsZod,
|
|
1674
1715
|
BaseAccountTransfersService,
|
|
1675
1716
|
BaseAccountableService,
|
|
1676
1717
|
BaseBlockProducerService,
|
|
1718
|
+
BaseBlockProducerServiceParamsZod,
|
|
1677
1719
|
BaseBlockRewardService,
|
|
1678
1720
|
BaseElectionService,
|
|
1679
1721
|
BaseNetworkStakeStepRewardService,
|
|
@@ -1693,6 +1735,7 @@ export {
|
|
|
1693
1735
|
XyoStakeIntentService,
|
|
1694
1736
|
XyoValidator,
|
|
1695
1737
|
accountBalancesServiceFromArchivist,
|
|
1738
|
+
blockViewerFromChainIteratorAndArchivist,
|
|
1696
1739
|
creatableService,
|
|
1697
1740
|
getBlockSignedStakeDeclarations
|
|
1698
1741
|
};
|