@xyo-network/chain-services 1.14.4 → 1.15.0
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/accountBalanceServiceFromArchivist.d.ts +0 -2
- package/dist/neutral/AccountBalance/accountBalanceServiceFromArchivist.d.ts.map +1 -1
- package/dist/neutral/AccountTransfers/BaseAccountTransfersService.d.ts +16 -0
- package/dist/neutral/AccountTransfers/BaseAccountTransfersService.d.ts.map +1 -0
- package/dist/neutral/AccountTransfers/accountTransfersServiceFromArchivist.d.ts +5 -0
- package/dist/neutral/AccountTransfers/accountTransfersServiceFromArchivist.d.ts.map +1 -0
- package/dist/neutral/AccountTransfers/index.d.ts +3 -0
- package/dist/neutral/AccountTransfers/index.d.ts.map +1 -0
- package/dist/neutral/BlockProducer/BaseBlockProducerService.d.ts +13 -4
- package/dist/neutral/BlockProducer/BaseBlockProducerService.d.ts.map +1 -1
- package/dist/neutral/NetworkStakeStepReward/BaseNetworkStakeStepRewardService.d.ts +27 -0
- package/dist/neutral/NetworkStakeStepReward/BaseNetworkStakeStepRewardService.d.ts.map +1 -0
- package/dist/neutral/NetworkStakeStepReward/index.d.ts +2 -0
- package/dist/neutral/NetworkStakeStepReward/index.d.ts.map +1 -0
- package/dist/neutral/Time/BaseTimeSyncService.d.ts +9 -2
- package/dist/neutral/Time/BaseTimeSyncService.d.ts.map +1 -1
- package/dist/neutral/index.d.ts +2 -1
- package/dist/neutral/index.d.ts.map +1 -1
- package/dist/neutral/index.mjs +296 -128
- package/dist/neutral/index.mjs.map +1 -1
- package/package.json +12 -12
- package/src/AccountBalance/BaseAccountBalanceService.ts +2 -2
- package/src/AccountBalance/accountBalanceServiceFromArchivist.ts +0 -3
- package/src/AccountTransfers/BaseAccountTransfersService.ts +46 -0
- package/src/AccountTransfers/accountTransfersServiceFromArchivist.ts +48 -0
- package/src/AccountTransfers/index.ts +2 -0
- package/src/BlockProducer/BaseBlockProducerService.ts +44 -24
- package/src/BlockProducer/spec/BaseBlockProducerService.spec.ts +3 -3
- package/src/NetworkStakeStepReward/BaseNetworkStakeStepRewardService.ts +66 -0
- package/src/NetworkStakeStepReward/index.ts +1 -0
- package/src/Time/BaseTimeSyncService.ts +36 -2
- package/src/index.ts +2 -1
- package/dist/neutral/Bridge/BaseBridgeService.d.ts +0 -15
- package/dist/neutral/Bridge/BaseBridgeService.d.ts.map +0 -1
- package/dist/neutral/Bridge/index.d.ts +0 -2
- package/dist/neutral/Bridge/index.d.ts.map +0 -1
- package/src/Bridge/BaseBridgeService.ts +0 -35
- package/src/Bridge/index.ts +0 -1
package/dist/neutral/index.mjs
CHANGED
|
@@ -11,7 +11,7 @@ import { LRUCache } from "lru-cache";
|
|
|
11
11
|
import { creatable as creatable2 } from "@xylabs/creatable";
|
|
12
12
|
import { spanRootAsync as spanRootAsync2 } from "@xylabs/telemetry";
|
|
13
13
|
import { AttoXL1 } from "@xyo-network/xl1-protocol";
|
|
14
|
-
import {
|
|
14
|
+
import { balancesSummary } from "@xyo-network/xl1-protocol-sdk";
|
|
15
15
|
|
|
16
16
|
// src/BaseService.ts
|
|
17
17
|
import { AbstractCreatable, creatable } from "@xylabs/creatable";
|
|
@@ -80,7 +80,7 @@ var BaseAccountBalanceService = class extends BaseService {
|
|
|
80
80
|
}
|
|
81
81
|
async balances(head, address) {
|
|
82
82
|
return await spanRootAsync2("balances", async () => {
|
|
83
|
-
const summary = await
|
|
83
|
+
const summary = await balancesSummary({
|
|
84
84
|
chainArchivist: this.params.chainArchivist,
|
|
85
85
|
summaryRepository: this.params.summaryRepository,
|
|
86
86
|
head
|
|
@@ -133,30 +133,116 @@ var accountBalanceServiceFromArchivist = /* @__PURE__ */ __name(async (archivist
|
|
|
133
133
|
});
|
|
134
134
|
return service;
|
|
135
135
|
}, "accountBalanceServiceFromArchivist");
|
|
136
|
-
|
|
136
|
+
|
|
137
|
+
// src/AccountTransfers/accountTransfersServiceFromArchivist.ts
|
|
138
|
+
import { exists as exists2 } from "@xylabs/exists";
|
|
139
|
+
import { asHash as asHash2, isHash as isHash2 } from "@xylabs/hex";
|
|
140
|
+
import { PayloadBuilder as PayloadBuilder2 } from "@xyo-network/payload-builder";
|
|
141
|
+
import { LRUCache as LRUCache2 } from "lru-cache";
|
|
142
|
+
|
|
143
|
+
// src/AccountTransfers/BaseAccountTransfersService.ts
|
|
144
|
+
import { creatable as creatable3 } from "@xylabs/creatable";
|
|
145
|
+
import { spanRootAsync as spanRootAsync3 } from "@xylabs/telemetry";
|
|
146
|
+
import { AttoXL1 as AttoXL12 } from "@xyo-network/xl1-protocol";
|
|
147
|
+
import { transfersSummary } from "@xyo-network/xl1-protocol-sdk";
|
|
148
|
+
function _ts_decorate3(decorators, target, key, desc) {
|
|
149
|
+
var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
|
|
150
|
+
if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
|
|
151
|
+
else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
|
|
152
|
+
return c > 3 && r && Object.defineProperty(target, key, r), r;
|
|
153
|
+
}
|
|
154
|
+
__name(_ts_decorate3, "_ts_decorate");
|
|
155
|
+
var BaseAccountTransfersService = class extends BaseService {
|
|
156
|
+
static {
|
|
157
|
+
__name(this, "BaseAccountTransfersService");
|
|
158
|
+
}
|
|
159
|
+
async transfer(head, address) {
|
|
160
|
+
return (await this.transfers(head, [
|
|
161
|
+
address
|
|
162
|
+
]))[address] ?? AttoXL12(0n);
|
|
163
|
+
}
|
|
164
|
+
async transfers(head, addresses) {
|
|
165
|
+
return await spanRootAsync3("transfers", async () => {
|
|
166
|
+
const { chainArchivist, summaryRepository, account } = this.params;
|
|
167
|
+
const summary = await transfersSummary({
|
|
168
|
+
chainArchivist,
|
|
169
|
+
summaryRepository,
|
|
170
|
+
head,
|
|
171
|
+
account
|
|
172
|
+
});
|
|
173
|
+
const result = {};
|
|
174
|
+
for (const addr of addresses) {
|
|
175
|
+
const summaryBalance = summary[addr] ?? 0n;
|
|
176
|
+
result[addr] = AttoXL12(summaryBalance);
|
|
177
|
+
}
|
|
178
|
+
return result;
|
|
179
|
+
});
|
|
180
|
+
}
|
|
181
|
+
};
|
|
182
|
+
BaseAccountTransfersService = _ts_decorate3([
|
|
183
|
+
creatable3()
|
|
184
|
+
], BaseAccountTransfersService);
|
|
185
|
+
|
|
186
|
+
// src/AccountTransfers/accountTransfersServiceFromArchivist.ts
|
|
187
|
+
var accountTransferServiceFromArchivist = /* @__PURE__ */ __name(async (archivist, account) => {
|
|
188
|
+
const summaryArchivistCache = new LRUCache2({
|
|
189
|
+
max: 1e5,
|
|
190
|
+
allowStale: true,
|
|
191
|
+
noDisposeOnSet: false,
|
|
192
|
+
updateAgeOnGet: true
|
|
193
|
+
});
|
|
194
|
+
const summaryRepository = {
|
|
195
|
+
get: /* @__PURE__ */ __name((hashes) => {
|
|
196
|
+
const results = hashes.map((hash) => {
|
|
197
|
+
return summaryArchivistCache.get(hash);
|
|
198
|
+
}).filter(exists2);
|
|
199
|
+
return results;
|
|
200
|
+
}, "get"),
|
|
201
|
+
insert: /* @__PURE__ */ __name(async (payloads) => {
|
|
202
|
+
const results = (await PayloadBuilder2.addStorageMeta(payloads)).map((payload) => {
|
|
203
|
+
const hash = asHash2(payload.hash);
|
|
204
|
+
if (isHash2(hash)) {
|
|
205
|
+
summaryArchivistCache.set(hash, payload);
|
|
206
|
+
return payload;
|
|
207
|
+
}
|
|
208
|
+
}).filter(exists2);
|
|
209
|
+
return results;
|
|
210
|
+
}, "insert"),
|
|
211
|
+
next: /* @__PURE__ */ __name(() => {
|
|
212
|
+
throw new Error("Not implemented");
|
|
213
|
+
}, "next")
|
|
214
|
+
};
|
|
215
|
+
const service = await BaseAccountTransfersService.create({
|
|
216
|
+
chainArchivist: archivist,
|
|
217
|
+
account,
|
|
218
|
+
summaryRepository
|
|
219
|
+
});
|
|
220
|
+
return service;
|
|
221
|
+
}, "accountTransferServiceFromArchivist");
|
|
137
222
|
|
|
138
223
|
// src/BlockProducer/BaseBlockProducerService.ts
|
|
139
224
|
import { assertEx as assertEx2 } from "@xylabs/assert";
|
|
140
|
-
import { creatable as
|
|
141
|
-
import { exists as
|
|
225
|
+
import { creatable as creatable4 } from "@xylabs/creatable";
|
|
226
|
+
import { exists as exists3 } from "@xylabs/exists";
|
|
142
227
|
import { hexToBigInt, toHex } from "@xylabs/hex";
|
|
228
|
+
import { isDefined } from "@xylabs/typeof";
|
|
143
229
|
import { FixedPercentageBlockRewardDiviner, FixedPercentageBlockRewardDivinerConfigSchema } from "@xyo-network/chain-modules";
|
|
144
230
|
import { buildNextBlock, createDeclarationIntent } from "@xyo-network/chain-protocol";
|
|
145
|
-
import { PayloadBuilder as
|
|
146
|
-
import { asBlockBoundWitness, AttoXL1 as
|
|
231
|
+
import { PayloadBuilder as PayloadBuilder4 } from "@xyo-network/payload-builder";
|
|
232
|
+
import { asBlockBoundWitness, AttoXL1 as AttoXL13, BlockNumberSchema, defaultRewardRatio, TimeSchema, XYO_STEP_REWARD_ADDRESS } from "@xyo-network/xl1-protocol";
|
|
147
233
|
|
|
148
234
|
// src/BlockProducer/generateTransactionFeeTransfers.ts
|
|
149
235
|
import { assertEx } from "@xylabs/assert";
|
|
150
236
|
import { hexFromBigInt } from "@xylabs/hex";
|
|
151
|
-
import { PayloadBuilder as
|
|
237
|
+
import { PayloadBuilder as PayloadBuilder3 } from "@xyo-network/payload-builder";
|
|
152
238
|
import { TransferSchema, XYO_ZERO_ADDRESS } from "@xyo-network/xl1-protocol";
|
|
153
239
|
import { transactionRequiredGas } from "@xyo-network/xl1-protocol-sdk";
|
|
154
240
|
import { HydratedTransactionWrapper } from "@xyo-network/xl1-wrappers";
|
|
155
241
|
async function generateTransactionFeeTransfers(address, transactions) {
|
|
156
242
|
const txs = await Promise.all(transactions.map(async (tx) => {
|
|
157
243
|
return HydratedTransactionWrapper.parse([
|
|
158
|
-
await
|
|
159
|
-
await
|
|
244
|
+
await PayloadBuilder3.addStorageMeta(tx[0]),
|
|
245
|
+
await PayloadBuilder3.addStorageMeta(tx[1])
|
|
160
246
|
]);
|
|
161
247
|
}));
|
|
162
248
|
const txBaseFeeCosts = {};
|
|
@@ -190,13 +276,13 @@ async function generateTransactionFeeTransfers(address, transactions) {
|
|
|
190
276
|
__name(generateTransactionFeeTransfers, "generateTransactionFeeTransfers");
|
|
191
277
|
|
|
192
278
|
// src/BlockProducer/BaseBlockProducerService.ts
|
|
193
|
-
function
|
|
279
|
+
function _ts_decorate4(decorators, target, key, desc) {
|
|
194
280
|
var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
|
|
195
281
|
if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
|
|
196
282
|
else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
|
|
197
283
|
return c > 3 && r && Object.defineProperty(target, key, r), r;
|
|
198
284
|
}
|
|
199
|
-
__name(
|
|
285
|
+
__name(_ts_decorate4, "_ts_decorate");
|
|
200
286
|
var DEFAULT_BLOCK_SIZE = 10;
|
|
201
287
|
var XYO_PRODUCER_REDECLARATION_DURATION = 1e4;
|
|
202
288
|
var XYO_PRODUCER_REDECLARATION_WINDOW = 500;
|
|
@@ -270,7 +356,7 @@ var BaseBlockProducerService = class _BaseBlockProducerService extends BaseServi
|
|
|
270
356
|
if (!leaders.includes(this.address)) return;
|
|
271
357
|
return this.proposeNextValidBlock(head);
|
|
272
358
|
}
|
|
273
|
-
async
|
|
359
|
+
async getBlockRewardTransfers(block) {
|
|
274
360
|
if (!this._blockRewardDiviner) {
|
|
275
361
|
this._blockRewardDiviner = await FixedPercentageBlockRewardDiviner.create({
|
|
276
362
|
account: "random",
|
|
@@ -283,7 +369,7 @@ var BaseBlockProducerService = class _BaseBlockProducerService extends BaseServi
|
|
|
283
369
|
});
|
|
284
370
|
}
|
|
285
371
|
const blockHex = assertEx2(toHex(block), () => "Failed to convert block to hex");
|
|
286
|
-
const blockId = new
|
|
372
|
+
const blockId = new PayloadBuilder4({
|
|
287
373
|
schema: BlockNumberSchema
|
|
288
374
|
}).fields({
|
|
289
375
|
block: blockHex
|
|
@@ -291,8 +377,7 @@ var BaseBlockProducerService = class _BaseBlockProducerService extends BaseServi
|
|
|
291
377
|
const rewards = await this._blockRewardDiviner.divine([
|
|
292
378
|
blockId
|
|
293
379
|
]);
|
|
294
|
-
|
|
295
|
-
return reward;
|
|
380
|
+
return rewards;
|
|
296
381
|
}
|
|
297
382
|
/**
|
|
298
383
|
* Handles the producer redeclaration logic
|
|
@@ -318,18 +403,21 @@ var BaseBlockProducerService = class _BaseBlockProducerService extends BaseServi
|
|
|
318
403
|
const blockPayloads = [];
|
|
319
404
|
const producerRedeclarationPayload = await this.getProducerRedeclaration(head);
|
|
320
405
|
if (producerRedeclarationPayload) blockPayloads.push(producerRedeclarationPayload);
|
|
321
|
-
if (blockPayloads.length === 0 && nextBlockTransactions.length === 0) return;
|
|
322
|
-
const
|
|
323
|
-
|
|
406
|
+
if (blockPayloads.length === 0 && nextBlockTransactions.length === 0 && !this.heartbeatRequired(head)) return;
|
|
407
|
+
const rewardTransferPayloads = await this.getBlockRewardTransfers(nextBlock);
|
|
408
|
+
blockPayloads.push(...rewardTransferPayloads);
|
|
324
409
|
const transactionTransfers = await generateTransactionFeeTransfers(this.address, nextBlockTransactions);
|
|
325
|
-
const timePayload = await this.generateTimePayload(
|
|
410
|
+
const timePayload = await this.generateTimePayload(head);
|
|
326
411
|
const [fundedNextBlockTransactions, fundedTransfers] = await this.filterByFunded(head, nextBlockTransactions, transactionTransfers, validateBalances);
|
|
327
412
|
blockPayloads.push(...fundedTransfers, timePayload);
|
|
328
413
|
this.logger?.info(`Building block ${head.block + 1}`);
|
|
329
414
|
const startBuild = Date.now();
|
|
415
|
+
const stepRewardPoolBalance = (await this.balanceService.balances(head._hash, [
|
|
416
|
+
XYO_STEP_REWARD_ADDRESS
|
|
417
|
+
]))[XYO_STEP_REWARD_ADDRESS];
|
|
330
418
|
const block = await buildNextBlock(head, fundedNextBlockTransactions, blockPayloads, [
|
|
331
419
|
this.account
|
|
332
|
-
]);
|
|
420
|
+
], XYO_STEP_REWARD_ADDRESS, stepRewardPoolBalance);
|
|
333
421
|
this.logger?.info(`Built block ${block[0].block} in ${Date.now() - startBuild}ms with ${block[1].length} payloads`);
|
|
334
422
|
this.logger?.info(`Validating block ${block[0].block} with ${block[1].length} payloads`);
|
|
335
423
|
const startValidate = Date.now();
|
|
@@ -357,7 +445,7 @@ var BaseBlockProducerService = class _BaseBlockProducerService extends BaseServi
|
|
|
357
445
|
if (validateBalances) {
|
|
358
446
|
const balance = (await this.balanceService.balances(head._hash, [
|
|
359
447
|
transfer.from
|
|
360
|
-
]))[transfer.from] ??
|
|
448
|
+
]))[transfer.from] ?? AttoXL13(0n);
|
|
361
449
|
if (balance >= totalTransferCost) {
|
|
362
450
|
fundedTransfers.push(transfer);
|
|
363
451
|
return tx;
|
|
@@ -366,37 +454,57 @@ var BaseBlockProducerService = class _BaseBlockProducerService extends BaseServi
|
|
|
366
454
|
fundedTransfers.push(transfer);
|
|
367
455
|
return tx;
|
|
368
456
|
}
|
|
369
|
-
}))).filter(
|
|
457
|
+
}))).filter(exists3);
|
|
370
458
|
this.logger?.info(`Filtered ${txs.length} transactions to ${fundedTransactions.length} funded transactions in ${Date.now() - start}ms`);
|
|
371
459
|
return [
|
|
372
460
|
fundedTransactions,
|
|
373
461
|
fundedTransfers
|
|
374
462
|
];
|
|
375
463
|
}
|
|
376
|
-
async generateTimePayload(
|
|
464
|
+
async generateTimePayload(head) {
|
|
465
|
+
const [ethereum, ethHashOrNull] = await this.time.currentTimeAndHash("ethereum");
|
|
466
|
+
const ethereumHash = assertEx2(ethHashOrNull, () => "No ethereum hash available from time sync service");
|
|
377
467
|
const timePayload = {
|
|
378
468
|
schema: TimeSchema,
|
|
379
|
-
|
|
380
|
-
|
|
381
|
-
|
|
469
|
+
// note, this is for the previous block
|
|
470
|
+
xl1: head.block,
|
|
471
|
+
// note, this is for the previous block
|
|
472
|
+
xl1Hash: head._hash,
|
|
473
|
+
ethereum,
|
|
474
|
+
ethereumHash,
|
|
382
475
|
epoch: Date.now()
|
|
383
476
|
};
|
|
384
477
|
return timePayload;
|
|
385
478
|
}
|
|
479
|
+
/**
|
|
480
|
+
* Check if a heartbeat block is required based on network activity.
|
|
481
|
+
* @param head The current head block
|
|
482
|
+
* @returns True if a heartbeat is required, false otherwise
|
|
483
|
+
*/
|
|
484
|
+
heartbeatRequired(head) {
|
|
485
|
+
const epoch = head.$epoch;
|
|
486
|
+
if (isDefined(epoch)) {
|
|
487
|
+
const { heartbeatInterval } = this.params.config.producer;
|
|
488
|
+
if (Date.now() - epoch > heartbeatInterval) {
|
|
489
|
+
return true;
|
|
490
|
+
}
|
|
491
|
+
}
|
|
492
|
+
return false;
|
|
493
|
+
}
|
|
386
494
|
};
|
|
387
|
-
BaseBlockProducerService =
|
|
388
|
-
|
|
495
|
+
BaseBlockProducerService = _ts_decorate4([
|
|
496
|
+
creatable4()
|
|
389
497
|
], BaseBlockProducerService);
|
|
390
498
|
|
|
391
499
|
// src/BlockReward/BaseBlockRewardService.ts
|
|
392
|
-
import { creatable as
|
|
393
|
-
function
|
|
500
|
+
import { creatable as creatable5 } from "@xylabs/creatable";
|
|
501
|
+
function _ts_decorate5(decorators, target, key, desc) {
|
|
394
502
|
var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
|
|
395
503
|
if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
|
|
396
504
|
else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
|
|
397
505
|
return c > 3 && r && Object.defineProperty(target, key, r), r;
|
|
398
506
|
}
|
|
399
|
-
__name(
|
|
507
|
+
__name(_ts_decorate5, "_ts_decorate");
|
|
400
508
|
var BaseBlockRewardService = class extends BaseService {
|
|
401
509
|
static {
|
|
402
510
|
__name(this, "BaseBlockRewardService");
|
|
@@ -405,22 +513,22 @@ var BaseBlockRewardService = class extends BaseService {
|
|
|
405
513
|
throw new Error("getRewardForBlock method must be implemented in derived classes");
|
|
406
514
|
}
|
|
407
515
|
};
|
|
408
|
-
BaseBlockRewardService =
|
|
409
|
-
|
|
516
|
+
BaseBlockRewardService = _ts_decorate5([
|
|
517
|
+
creatable5()
|
|
410
518
|
], BaseBlockRewardService);
|
|
411
519
|
|
|
412
520
|
// src/BlockReward/EvmBlockRewardService.ts
|
|
413
521
|
import { assertEx as assertEx3 } from "@xylabs/assert";
|
|
414
|
-
import { creatable as
|
|
522
|
+
import { creatable as creatable6 } from "@xylabs/creatable";
|
|
415
523
|
import { toEthAddress } from "@xylabs/hex";
|
|
416
524
|
import { XyoChainRewards__factory as XyoChainRewardsFactory } from "@xyo-network/typechain";
|
|
417
|
-
function
|
|
525
|
+
function _ts_decorate6(decorators, target, key, desc) {
|
|
418
526
|
var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
|
|
419
527
|
if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
|
|
420
528
|
else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
|
|
421
529
|
return c > 3 && r && Object.defineProperty(target, key, r), r;
|
|
422
530
|
}
|
|
423
|
-
__name(
|
|
531
|
+
__name(_ts_decorate6, "_ts_decorate");
|
|
424
532
|
var EvmBlockRewardService = class extends BaseBlockRewardService {
|
|
425
533
|
static {
|
|
426
534
|
__name(this, "EvmBlockRewardService");
|
|
@@ -449,22 +557,22 @@ var EvmBlockRewardService = class extends BaseBlockRewardService {
|
|
|
449
557
|
return await contract.calcBlockReward(blockNumber);
|
|
450
558
|
}
|
|
451
559
|
};
|
|
452
|
-
EvmBlockRewardService =
|
|
453
|
-
|
|
560
|
+
EvmBlockRewardService = _ts_decorate6([
|
|
561
|
+
creatable6()
|
|
454
562
|
], EvmBlockRewardService);
|
|
455
563
|
|
|
456
564
|
// src/BlockReward/MemoryBlockRewardService.ts
|
|
457
565
|
import { assertEx as assertEx4 } from "@xylabs/assert";
|
|
458
|
-
import { creatable as
|
|
566
|
+
import { creatable as creatable7 } from "@xylabs/creatable";
|
|
459
567
|
import { toFixedPoint } from "@xylabs/decimal-precision";
|
|
460
568
|
import { rewardFromBlockNumber } from "@xyo-network/chain-protocol";
|
|
461
|
-
function
|
|
569
|
+
function _ts_decorate7(decorators, target, key, desc) {
|
|
462
570
|
var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
|
|
463
571
|
if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
|
|
464
572
|
else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
|
|
465
573
|
return c > 3 && r && Object.defineProperty(target, key, r), r;
|
|
466
574
|
}
|
|
467
|
-
__name(
|
|
575
|
+
__name(_ts_decorate7, "_ts_decorate");
|
|
468
576
|
var MemoryBlockRewardService = class extends BaseBlockRewardService {
|
|
469
577
|
static {
|
|
470
578
|
__name(this, "MemoryBlockRewardService");
|
|
@@ -503,51 +611,21 @@ var MemoryBlockRewardService = class extends BaseBlockRewardService {
|
|
|
503
611
|
return this.rewardFromBlockNumber(blockNumber, this.initialReward, this.stepSize, this.stepFactorNumerator, this.stepFactorDenominator, this.minRewardPerBlock, this.creatorReward);
|
|
504
612
|
}
|
|
505
613
|
};
|
|
506
|
-
MemoryBlockRewardService =
|
|
507
|
-
creatable6()
|
|
508
|
-
], MemoryBlockRewardService);
|
|
509
|
-
|
|
510
|
-
// src/Bridge/BaseBridgeService.ts
|
|
511
|
-
import { creatable as creatable7 } from "@xylabs/creatable";
|
|
512
|
-
function _ts_decorate7(decorators, target, key, desc) {
|
|
513
|
-
var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
|
|
514
|
-
if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
|
|
515
|
-
else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
|
|
516
|
-
return c > 3 && r && Object.defineProperty(target, key, r), r;
|
|
517
|
-
}
|
|
518
|
-
__name(_ts_decorate7, "_ts_decorate");
|
|
519
|
-
var BaseBridgeService = class extends BaseService {
|
|
520
|
-
static {
|
|
521
|
-
__name(this, "BaseBridgeService");
|
|
522
|
-
}
|
|
523
|
-
completedBridgeBack() {
|
|
524
|
-
throw new Error("Method not implemented.");
|
|
525
|
-
}
|
|
526
|
-
completedBridgeRequests() {
|
|
527
|
-
throw new Error("Method not implemented.");
|
|
528
|
-
}
|
|
529
|
-
pendingBridgeBack() {
|
|
530
|
-
throw new Error("Method not implemented.");
|
|
531
|
-
}
|
|
532
|
-
pendingBridgeRequests() {
|
|
533
|
-
throw new Error("Method not implemented.");
|
|
534
|
-
}
|
|
535
|
-
};
|
|
536
|
-
BaseBridgeService = _ts_decorate7([
|
|
614
|
+
MemoryBlockRewardService = _ts_decorate7([
|
|
537
615
|
creatable7()
|
|
538
|
-
],
|
|
616
|
+
], MemoryBlockRewardService);
|
|
539
617
|
|
|
540
618
|
// src/ChainBlockNumberIteration/ChainBlockNumberIterationService.ts
|
|
541
619
|
import { assertEx as assertEx5 } from "@xylabs/assert";
|
|
542
|
-
import { isDefined, isNull } from "@xylabs/typeof";
|
|
543
|
-
import { PayloadBuilder as
|
|
620
|
+
import { isDefined as isDefined2, isNull } from "@xylabs/typeof";
|
|
621
|
+
import { PayloadBuilder as PayloadBuilder5 } from "@xyo-network/payload-builder";
|
|
544
622
|
import { asBlockBoundWitness as asBlockBoundWitness2, isBlockBoundWitness } from "@xyo-network/xl1-protocol";
|
|
545
|
-
import { LRUCache as
|
|
623
|
+
import { LRUCache as LRUCache3 } from "lru-cache";
|
|
546
624
|
var ChainBlockNumberIterationService = class extends BaseService {
|
|
547
625
|
static {
|
|
548
626
|
__name(this, "ChainBlockNumberIterationService");
|
|
549
627
|
}
|
|
550
|
-
_blocksByBlockNumber = new
|
|
628
|
+
_blocksByBlockNumber = new LRUCache3({
|
|
551
629
|
max: 1e4
|
|
552
630
|
});
|
|
553
631
|
get chainArchivist() {
|
|
@@ -562,11 +640,11 @@ var ChainBlockNumberIterationService = class extends BaseService {
|
|
|
562
640
|
const cached = this._blocksByBlockNumber.get(block);
|
|
563
641
|
if (cached) return cached;
|
|
564
642
|
const startingBlock = head;
|
|
565
|
-
const currentBlockHash = await
|
|
643
|
+
const currentBlockHash = await PayloadBuilder5.hash(startingBlock);
|
|
566
644
|
let currentBlock = (await this.chainArchivist.get([
|
|
567
645
|
currentBlockHash
|
|
568
646
|
])).at(0);
|
|
569
|
-
while (
|
|
647
|
+
while (isDefined2(currentBlock)) {
|
|
570
648
|
assertEx5(asBlockBoundWitness2(currentBlock), () => `Expected hash to be a block bound witness [${currentBlock?._hash}]`);
|
|
571
649
|
if (isBlockBoundWitness(currentBlock)) {
|
|
572
650
|
this._blocksByBlockNumber.set(currentBlock.block, currentBlock);
|
|
@@ -594,7 +672,7 @@ var ChainBlockNumberIterationService = class extends BaseService {
|
|
|
594
672
|
// and then communicate via method name and documentation
|
|
595
673
|
async previous(block = void 0, count = 1) {
|
|
596
674
|
const results = [];
|
|
597
|
-
let currentBlock =
|
|
675
|
+
let currentBlock = isDefined2(block) ? await this.get(block) : await this.head();
|
|
598
676
|
while (currentBlock && results.length < count) {
|
|
599
677
|
if (isBlockBoundWitness(currentBlock)) {
|
|
600
678
|
results.push(currentBlock);
|
|
@@ -605,7 +683,7 @@ var ChainBlockNumberIterationService = class extends BaseService {
|
|
|
605
683
|
]);
|
|
606
684
|
currentBlock = asBlockBoundWitness2(nextBlock[0]);
|
|
607
685
|
} else {
|
|
608
|
-
const hash =
|
|
686
|
+
const hash = PayloadBuilder5.hash(currentBlock);
|
|
609
687
|
assertEx5(asBlockBoundWitness2(currentBlock), () => `Expected hash to be a block bound witness [${hash}]`);
|
|
610
688
|
}
|
|
611
689
|
}
|
|
@@ -818,7 +896,7 @@ XyoValidator = _ts_decorate8([
|
|
|
818
896
|
import { assertEx as assertEx8 } from "@xylabs/assert";
|
|
819
897
|
import { creatable as creatable9 } from "@xylabs/creatable";
|
|
820
898
|
import { hexToLast4BytesInt, shuffleWithSeed } from "@xyo-network/chain-utils";
|
|
821
|
-
import { PayloadBuilder as
|
|
899
|
+
import { PayloadBuilder as PayloadBuilder6 } from "@xyo-network/payload-builder";
|
|
822
900
|
function _ts_decorate9(decorators, target, key, desc) {
|
|
823
901
|
var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
|
|
824
902
|
if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
|
|
@@ -843,7 +921,7 @@ var BaseElectionService = class extends BaseService {
|
|
|
843
921
|
return await this.spanAsync("getCreatorCommitteeForNextBlock", async () => {
|
|
844
922
|
const nextBlock = current.block + 1;
|
|
845
923
|
const candidates = await this.stakeIntentService.getDeclaredCandidatesForBlock(nextBlock, "producer");
|
|
846
|
-
const previousBlockHash = await
|
|
924
|
+
const previousBlockHash = await PayloadBuilder6.hash(current);
|
|
847
925
|
return this.generateCreatorCommittee(candidates, previousBlockHash);
|
|
848
926
|
});
|
|
849
927
|
}
|
|
@@ -858,14 +936,68 @@ BaseElectionService = _ts_decorate9([
|
|
|
858
936
|
creatable9()
|
|
859
937
|
], BaseElectionService);
|
|
860
938
|
|
|
939
|
+
// src/NetworkStakeStepReward/BaseNetworkStakeStepRewardService.ts
|
|
940
|
+
import { creatable as creatable10 } from "@xylabs/creatable";
|
|
941
|
+
function _ts_decorate10(decorators, target, key, desc) {
|
|
942
|
+
var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
|
|
943
|
+
if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
|
|
944
|
+
else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
|
|
945
|
+
return c > 3 && r && Object.defineProperty(target, key, r), r;
|
|
946
|
+
}
|
|
947
|
+
__name(_ts_decorate10, "_ts_decorate");
|
|
948
|
+
var BaseNetworkStakeStepRewardService = class extends BaseService {
|
|
949
|
+
static {
|
|
950
|
+
__name(this, "BaseNetworkStakeStepRewardService");
|
|
951
|
+
}
|
|
952
|
+
claimedRewards(address) {
|
|
953
|
+
throw new Error("Method not implemented.");
|
|
954
|
+
}
|
|
955
|
+
networkStakeStepAddressReward(address, step, block) {
|
|
956
|
+
throw new Error("Method not implemented.");
|
|
957
|
+
}
|
|
958
|
+
networkStakeStepPoolRewardShares(step, block) {
|
|
959
|
+
throw new Error("Method not implemented.");
|
|
960
|
+
}
|
|
961
|
+
networkStakeStepPoolRewards(step, block) {
|
|
962
|
+
throw new Error("Method not implemented.");
|
|
963
|
+
}
|
|
964
|
+
networkStakeStepRewardAddressHistory(address) {
|
|
965
|
+
throw new Error("Method not implemented.");
|
|
966
|
+
}
|
|
967
|
+
networkStakeStepRewardAddressShare(address, step, block) {
|
|
968
|
+
throw new Error("Method not implemented.");
|
|
969
|
+
}
|
|
970
|
+
networkStakeStepRewardForStep(step) {
|
|
971
|
+
throw new Error("Method not implemented.");
|
|
972
|
+
}
|
|
973
|
+
networkStakeStepRewardPositionWeight(position, step) {
|
|
974
|
+
throw new Error("Method not implemented.");
|
|
975
|
+
}
|
|
976
|
+
networkStakeStepRewardPotentialPositionLoss(position, step) {
|
|
977
|
+
throw new Error("Method not implemented.");
|
|
978
|
+
}
|
|
979
|
+
networkStakeStepRewardRandomizer(step, block) {
|
|
980
|
+
throw new Error("Method not implemented.");
|
|
981
|
+
}
|
|
982
|
+
networkStakeStepRewardWeightForAddress(address, step) {
|
|
983
|
+
throw new Error("Method not implemented.");
|
|
984
|
+
}
|
|
985
|
+
unclaimedRewards(address) {
|
|
986
|
+
throw new Error("Method not implemented.");
|
|
987
|
+
}
|
|
988
|
+
};
|
|
989
|
+
BaseNetworkStakeStepRewardService = _ts_decorate10([
|
|
990
|
+
creatable10()
|
|
991
|
+
], BaseNetworkStakeStepRewardService);
|
|
992
|
+
|
|
861
993
|
// src/PendingTransactions/BasePendingTransactions.ts
|
|
862
994
|
import { ValueType } from "@opentelemetry/api";
|
|
863
995
|
import { filterAs, filterAsync } from "@xylabs/array";
|
|
864
996
|
import { assertEx as assertEx9 } from "@xylabs/assert";
|
|
865
|
-
import { creatable as
|
|
866
|
-
import { exists as
|
|
997
|
+
import { creatable as creatable11 } from "@xylabs/creatable";
|
|
998
|
+
import { exists as exists4 } from "@xylabs/exists";
|
|
867
999
|
import { forget } from "@xylabs/forget";
|
|
868
|
-
import { isDefined as
|
|
1000
|
+
import { isDefined as isDefined3, isUndefined } from "@xylabs/typeof";
|
|
869
1001
|
import { MemoryArchivist } from "@xyo-network/archivist-memory";
|
|
870
1002
|
import { findMostRecentBlock } from "@xyo-network/chain-protocol";
|
|
871
1003
|
import { asBlockBoundWitnessWithHashStorageMeta, isTransactionBoundWitnessWithStorageMeta } from "@xyo-network/xl1-protocol";
|
|
@@ -873,10 +1005,10 @@ import { TransactionJsonSchemaValidator, validateTransaction } from "@xyo-networ
|
|
|
873
1005
|
import { Mutex as Mutex2 } from "async-mutex";
|
|
874
1006
|
|
|
875
1007
|
// src/PendingTransactions/bundledPayloadToHydratedTransaction.ts
|
|
876
|
-
import { PayloadBuilder as
|
|
1008
|
+
import { PayloadBuilder as PayloadBuilder7 } from "@xyo-network/payload-builder";
|
|
877
1009
|
import { asTransactionBoundWitnessWithStorageMeta } from "@xyo-network/xl1-protocol";
|
|
878
1010
|
var bundledPayloadToHydratedTransaction = /* @__PURE__ */ __name(async (payload) => {
|
|
879
|
-
const withStorageMeta = await
|
|
1011
|
+
const withStorageMeta = await PayloadBuilder7.addStorageMeta(payload.payloads);
|
|
880
1012
|
const tx = asTransactionBoundWitnessWithStorageMeta(withStorageMeta.find((p) => p._hash === payload.root));
|
|
881
1013
|
if (tx) {
|
|
882
1014
|
return [
|
|
@@ -887,7 +1019,7 @@ var bundledPayloadToHydratedTransaction = /* @__PURE__ */ __name(async (payload)
|
|
|
887
1019
|
}, "bundledPayloadToHydratedTransaction");
|
|
888
1020
|
|
|
889
1021
|
// src/PendingTransactions/hydratedTransactionToPayloadBundle.ts
|
|
890
|
-
import { PayloadBuilder as
|
|
1022
|
+
import { PayloadBuilder as PayloadBuilder8 } from "@xyo-network/payload-builder";
|
|
891
1023
|
import { PayloadBundleSchema } from "@xyo-network/payload-model";
|
|
892
1024
|
import { flattenHydratedTransaction } from "@xyo-network/xl1-protocol-sdk";
|
|
893
1025
|
var hydratedTransactionToPayloadBundle = /* @__PURE__ */ __name((transaction) => {
|
|
@@ -895,8 +1027,8 @@ var hydratedTransactionToPayloadBundle = /* @__PURE__ */ __name((transaction) =>
|
|
|
895
1027
|
return bundle(root, transaction);
|
|
896
1028
|
}, "hydratedTransactionToPayloadBundle");
|
|
897
1029
|
var bundle = /* @__PURE__ */ __name((root, transaction) => {
|
|
898
|
-
const payloads = flattenHydratedTransaction(transaction).flatMap((p) =>
|
|
899
|
-
return new
|
|
1030
|
+
const payloads = flattenHydratedTransaction(transaction).flatMap((p) => PayloadBuilder8.omitStorageMeta(p));
|
|
1031
|
+
return new PayloadBuilder8({
|
|
900
1032
|
schema: PayloadBundleSchema
|
|
901
1033
|
}).fields({
|
|
902
1034
|
payloads,
|
|
@@ -905,13 +1037,13 @@ var bundle = /* @__PURE__ */ __name((root, transaction) => {
|
|
|
905
1037
|
}, "bundle");
|
|
906
1038
|
|
|
907
1039
|
// src/PendingTransactions/BasePendingTransactions.ts
|
|
908
|
-
function
|
|
1040
|
+
function _ts_decorate11(decorators, target, key, desc) {
|
|
909
1041
|
var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
|
|
910
1042
|
if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
|
|
911
1043
|
else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
|
|
912
1044
|
return c > 3 && r && Object.defineProperty(target, key, r), r;
|
|
913
1045
|
}
|
|
914
|
-
__name(
|
|
1046
|
+
__name(_ts_decorate11, "_ts_decorate");
|
|
915
1047
|
var BasePendingTransactionsService = class _BasePendingTransactionsService extends BaseService {
|
|
916
1048
|
static {
|
|
917
1049
|
__name(this, "BasePendingTransactionsService");
|
|
@@ -1018,7 +1150,7 @@ var BasePendingTransactionsService = class _BasePendingTransactionsService exten
|
|
|
1018
1150
|
if (pendingBundledTransactions.length === 0) break;
|
|
1019
1151
|
cursor = pendingBundledTransactions.at(-1)?._sequence;
|
|
1020
1152
|
const undeletedTransactionBundles = pendingBundledTransactions.filter((tx) => !this._removablePendingTransactionHashes.has(tx.root));
|
|
1021
|
-
const transactions = (await Promise.all(undeletedTransactionBundles.map((p) => bundledPayloadToHydratedTransaction(p)))).filter(
|
|
1153
|
+
const transactions = (await Promise.all(undeletedTransactionBundles.map((p) => bundledPayloadToHydratedTransaction(p)))).filter(exists4);
|
|
1022
1154
|
const activeTransactions = transactions.filter(isTransactionActive(lastHead.block + 1));
|
|
1023
1155
|
foundPendingTransactions.push(...activeTransactions);
|
|
1024
1156
|
}
|
|
@@ -1035,7 +1167,7 @@ var BasePendingTransactionsService = class _BasePendingTransactionsService exten
|
|
|
1035
1167
|
async cleanupWorker() {
|
|
1036
1168
|
return await this._updateCuratedPendingTransactionsArchivistMutex.runExclusive(async () => {
|
|
1037
1169
|
const lastHead = await findMostRecentBlock(this.chainArchivist);
|
|
1038
|
-
if (
|
|
1170
|
+
if (isDefined3(lastHead)) await this.pruneCuratedPendingTransactionsArchivist(lastHead._hash);
|
|
1039
1171
|
}, _BasePendingTransactionsService.MutexPriority.PurgeTransactions);
|
|
1040
1172
|
}
|
|
1041
1173
|
async countPendingTransactions() {
|
|
@@ -1059,7 +1191,7 @@ var BasePendingTransactionsService = class _BasePendingTransactionsService exten
|
|
|
1059
1191
|
const unprocessedTransactions = await this.filterAlreadyFinalizedTransactions(payloads);
|
|
1060
1192
|
const hydratedUnprocessedTransactions = (await Promise.all(unprocessedTransactions.map(async (tx) => {
|
|
1061
1193
|
return await bundledPayloadToHydratedTransaction(tx);
|
|
1062
|
-
}))).filter(
|
|
1194
|
+
}))).filter(exists4);
|
|
1063
1195
|
const validTransactions = await filterAsync(hydratedUnprocessedTransactions, async (tx) => {
|
|
1064
1196
|
const errors = await validateTransaction(tx, this.chainId, [
|
|
1065
1197
|
TransactionJsonSchemaValidator
|
|
@@ -1095,7 +1227,7 @@ var BasePendingTransactionsService = class _BasePendingTransactionsService exten
|
|
|
1095
1227
|
let [lastHead] = filterAs(await this.chainArchivist.get([
|
|
1096
1228
|
head
|
|
1097
1229
|
]), asBlockBoundWitnessWithHashStorageMeta);
|
|
1098
|
-
while (
|
|
1230
|
+
while (isDefined3(lastHead)) {
|
|
1099
1231
|
const pendingBundledTransactions = await this.pendingBundledTransactionsLocalArchivist.next({
|
|
1100
1232
|
limit: 100,
|
|
1101
1233
|
order: "asc",
|
|
@@ -1106,14 +1238,14 @@ var BasePendingTransactionsService = class _BasePendingTransactionsService exten
|
|
|
1106
1238
|
}
|
|
1107
1239
|
cursor = pendingBundledTransactions.at(-1)?._sequence;
|
|
1108
1240
|
const deletedTransactionBundles = pendingBundledTransactions.filter((tx) => this._removablePendingTransactionHashes.has(tx.root));
|
|
1109
|
-
foundPendingTransactionsToDeleteHashes.push(...deletedTransactionBundles.map((tx) => tx._hash).filter(
|
|
1241
|
+
foundPendingTransactionsToDeleteHashes.push(...deletedTransactionBundles.map((tx) => tx._hash).filter(exists4));
|
|
1110
1242
|
const undeletedTransactionBundles = pendingBundledTransactions.filter((tx) => !this._removablePendingTransactionHashes.has(tx.root));
|
|
1111
|
-
const transactions = (await Promise.all(undeletedTransactionBundles.map((p) => bundledPayloadToHydratedTransaction(p)))).filter(
|
|
1243
|
+
const transactions = (await Promise.all(undeletedTransactionBundles.map((p) => bundledPayloadToHydratedTransaction(p)))).filter(exists4);
|
|
1112
1244
|
const expiredTransactions = transactions.filter(isTransactionExpired(lastHead.block + 1));
|
|
1113
1245
|
const expiredBundleHashes = expiredTransactions.map((expiredHydratedTx) => (
|
|
1114
1246
|
// Find the corresponding payload bundle hash for the expired transaction
|
|
1115
1247
|
pendingBundledTransactions.find((bundledTx) => bundledTx.root === expiredHydratedTx[0]._hash)?._hash
|
|
1116
|
-
)).filter(
|
|
1248
|
+
)).filter(exists4);
|
|
1117
1249
|
foundPendingTransactionsToDeleteHashes.push(...expiredBundleHashes);
|
|
1118
1250
|
}
|
|
1119
1251
|
const deletedHashes = await this.pendingBundledTransactionsLocalArchivist.delete(foundPendingTransactionsToDeleteHashes);
|
|
@@ -1129,15 +1261,15 @@ var BasePendingTransactionsService = class _BasePendingTransactionsService exten
|
|
|
1129
1261
|
});
|
|
1130
1262
|
}
|
|
1131
1263
|
};
|
|
1132
|
-
BasePendingTransactionsService =
|
|
1133
|
-
|
|
1264
|
+
BasePendingTransactionsService = _ts_decorate11([
|
|
1265
|
+
creatable11()
|
|
1134
1266
|
], BasePendingTransactionsService);
|
|
1135
1267
|
var isTransactionExpired = /* @__PURE__ */ __name((block) => ([txBw]) => txBw.exp < block, "isTransactionExpired");
|
|
1136
1268
|
var isTransactionActive = /* @__PURE__ */ __name((block) => ([txBw]) => txBw.nbf <= block && txBw.exp >= block, "isTransactionActive");
|
|
1137
1269
|
|
|
1138
1270
|
// src/StakeIntent/lib/getBlockSignedStakeDeclarations.ts
|
|
1139
1271
|
import { filterAs as filterAs2 } from "@xylabs/array";
|
|
1140
|
-
import { exists as
|
|
1272
|
+
import { exists as exists5 } from "@xylabs/exists";
|
|
1141
1273
|
import { asOptionalBoundWitness } from "@xyo-network/boundwitness-model";
|
|
1142
1274
|
import { payloadSchemasContains } from "@xyo-network/boundwitness-validator";
|
|
1143
1275
|
import { BoundWitnessWrapper } from "@xyo-network/boundwitness-wrapper";
|
|
@@ -1148,7 +1280,7 @@ var getBlockSignedStakeDeclarations = /* @__PURE__ */ __name(async (block, archi
|
|
|
1148
1280
|
const bwsFromBlockWithDeclarations = bwsFromBlock.filter((bw) => payloadSchemasContains(bw, ChainStakeIntentSchema));
|
|
1149
1281
|
const validBlockBwsWithDeclarations = await filterToValidSignedBoundWitnesses(bwsFromBlockWithDeclarations);
|
|
1150
1282
|
return (await Promise.all(validBlockBwsWithDeclarations.map(async (bw) => {
|
|
1151
|
-
const stakeIntentHashes = validBlockBwsWithDeclarations.flatMap(mapBoundWitnessToStakeIntentHashes).filter(
|
|
1283
|
+
const stakeIntentHashes = validBlockBwsWithDeclarations.flatMap(mapBoundWitnessToStakeIntentHashes).filter(exists5);
|
|
1152
1284
|
const payloads = await archivist.get(stakeIntentHashes);
|
|
1153
1285
|
const stakeIntents = filterAs2(payloads, asChainStakeIntent).filter((p) => p.intent === intent).filter((p) => bw.addresses.includes(p.from));
|
|
1154
1286
|
return stakeIntents;
|
|
@@ -1165,22 +1297,22 @@ var mapBoundWitnessToStakeIntentHashes = /* @__PURE__ */ __name((bw) => {
|
|
|
1165
1297
|
// src/StakeIntent/XyoStakeIntentService.ts
|
|
1166
1298
|
import { filterAs as filterAs3 } from "@xylabs/array";
|
|
1167
1299
|
import { assertEx as assertEx10 } from "@xylabs/assert";
|
|
1168
|
-
import { creatable as
|
|
1300
|
+
import { creatable as creatable12 } from "@xylabs/creatable";
|
|
1169
1301
|
import { asAddress } from "@xylabs/hex";
|
|
1170
1302
|
import { isUndefined as isUndefined2 } from "@xylabs/typeof";
|
|
1171
1303
|
import { analyzeChain, ChainStakeIntentAnalyzer, isChainSummaryStakeIntent } from "@xyo-network/chain-analyze";
|
|
1172
1304
|
import { DEFAULT_FIND_FIRST_MATCHING_NEXT_OPTIONS, findFirstMatching, IntervalMap } from "@xyo-network/chain-utils";
|
|
1173
|
-
import { PayloadBuilder as
|
|
1305
|
+
import { PayloadBuilder as PayloadBuilder9 } from "@xyo-network/payload-builder";
|
|
1174
1306
|
import { asBlockBoundWitness as asBlockBoundWitness3, asBlockBoundWitnessWithStorageMeta, asChainIndexingServiceStateWithStorageMeta, asChainStakeIntent as asChainStakeIntent2, ChainIndexingServiceStateSchema, isChainIndexingServiceState } from "@xyo-network/xl1-protocol";
|
|
1175
1307
|
import { Mutex as Mutex3 } from "async-mutex";
|
|
1176
|
-
import { LRUCache as
|
|
1177
|
-
function
|
|
1308
|
+
import { LRUCache as LRUCache4 } from "lru-cache";
|
|
1309
|
+
function _ts_decorate12(decorators, target, key, desc) {
|
|
1178
1310
|
var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
|
|
1179
1311
|
if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
|
|
1180
1312
|
else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
|
|
1181
1313
|
return c > 3 && r && Object.defineProperty(target, key, r), r;
|
|
1182
1314
|
}
|
|
1183
|
-
__name(
|
|
1315
|
+
__name(_ts_decorate12, "_ts_decorate");
|
|
1184
1316
|
var ACTIVE_STAKE_TTL = 1e3 * 60 * 60 * 2;
|
|
1185
1317
|
var NO_ACTIVE_STAKE_TTL = 1e3 * 2;
|
|
1186
1318
|
var STAKE_CACHE_MAX_ENTRIES = 1e4;
|
|
@@ -1198,7 +1330,7 @@ var XyoStakeIntentService = class extends BaseService {
|
|
|
1198
1330
|
// in performance for small sets, and (most importantly) easily
|
|
1199
1331
|
// persisted so we can recover state on restart.
|
|
1200
1332
|
_producers = new IntervalMap();
|
|
1201
|
-
_stakeCache = new
|
|
1333
|
+
_stakeCache = new LRUCache4({
|
|
1202
1334
|
max: STAKE_CACHE_MAX_ENTRIES
|
|
1203
1335
|
});
|
|
1204
1336
|
_updateMutex = new Mutex3();
|
|
@@ -1220,7 +1352,7 @@ var XyoStakeIntentService = class extends BaseService {
|
|
|
1220
1352
|
});
|
|
1221
1353
|
const head = await this.chainIterator.head();
|
|
1222
1354
|
if (isUndefined2(head)) return;
|
|
1223
|
-
const headHash = await
|
|
1355
|
+
const headHash = await PayloadBuilder9.hash(head);
|
|
1224
1356
|
await this.recoverState(headHash);
|
|
1225
1357
|
}
|
|
1226
1358
|
async getDeclaredCandidateRanges(address, intent) {
|
|
@@ -1285,7 +1417,7 @@ var XyoStakeIntentService = class extends BaseService {
|
|
|
1285
1417
|
}
|
|
1286
1418
|
async persistState(current) {
|
|
1287
1419
|
const state = this._producers.serialize();
|
|
1288
|
-
const payload = new
|
|
1420
|
+
const payload = new PayloadBuilder9({
|
|
1289
1421
|
schema: ChainIndexingServiceStateSchema
|
|
1290
1422
|
}).fields({
|
|
1291
1423
|
endBlockHash: current,
|
|
@@ -1337,7 +1469,7 @@ var XyoStakeIntentService = class extends BaseService {
|
|
|
1337
1469
|
return await this.spanAsync("updateIndex", async () => {
|
|
1338
1470
|
const currentHead = await this.chainIterator.head();
|
|
1339
1471
|
if (isUndefined2(currentHead)) return;
|
|
1340
|
-
const currentHeadHash = await
|
|
1472
|
+
const currentHeadHash = await PayloadBuilder9.hash(currentHead);
|
|
1341
1473
|
const result = await analyzeChain(this.chainArchivist, [
|
|
1342
1474
|
new ChainStakeIntentAnalyzer("producer")
|
|
1343
1475
|
], currentHeadHash, this._lastIndexedBlockHash);
|
|
@@ -1359,19 +1491,19 @@ var XyoStakeIntentService = class extends BaseService {
|
|
|
1359
1491
|
});
|
|
1360
1492
|
}
|
|
1361
1493
|
};
|
|
1362
|
-
XyoStakeIntentService =
|
|
1363
|
-
|
|
1494
|
+
XyoStakeIntentService = _ts_decorate12([
|
|
1495
|
+
creatable12()
|
|
1364
1496
|
], XyoStakeIntentService);
|
|
1365
1497
|
|
|
1366
1498
|
// src/StepStake/BaseStepStakeService.ts
|
|
1367
|
-
import { creatable as
|
|
1368
|
-
function
|
|
1499
|
+
import { creatable as creatable13 } from "@xylabs/creatable";
|
|
1500
|
+
function _ts_decorate13(decorators, target, key, desc) {
|
|
1369
1501
|
var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
|
|
1370
1502
|
if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
|
|
1371
1503
|
else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
|
|
1372
1504
|
return c > 3 && r && Object.defineProperty(target, key, r), r;
|
|
1373
1505
|
}
|
|
1374
|
-
__name(
|
|
1506
|
+
__name(_ts_decorate13, "_ts_decorate");
|
|
1375
1507
|
var BaseStepStakeService = class extends BaseService {
|
|
1376
1508
|
static {
|
|
1377
1509
|
__name(this, "BaseStepStakeService");
|
|
@@ -1383,21 +1515,23 @@ var BaseStepStakeService = class extends BaseService {
|
|
|
1383
1515
|
throw new Error("Method not implemented.");
|
|
1384
1516
|
}
|
|
1385
1517
|
};
|
|
1386
|
-
BaseStepStakeService =
|
|
1387
|
-
|
|
1518
|
+
BaseStepStakeService = _ts_decorate13([
|
|
1519
|
+
creatable13()
|
|
1388
1520
|
], BaseStepStakeService);
|
|
1389
1521
|
|
|
1390
1522
|
// src/Time/BaseTimeSyncService.ts
|
|
1391
1523
|
import { assertEx as assertEx11 } from "@xylabs/assert";
|
|
1392
|
-
import { creatable as
|
|
1524
|
+
import { creatable as creatable14 } from "@xylabs/creatable";
|
|
1525
|
+
import { asHash as asHash3 } from "@xylabs/hex";
|
|
1526
|
+
import { PayloadBuilder as PayloadBuilder10 } from "@xyo-network/payload-builder";
|
|
1393
1527
|
import { asTimePayload, TimeSchema as TimeSchema2 } from "@xyo-network/xl1-protocol";
|
|
1394
|
-
function
|
|
1528
|
+
function _ts_decorate14(decorators, target, key, desc) {
|
|
1395
1529
|
var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
|
|
1396
1530
|
if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
|
|
1397
1531
|
else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
|
|
1398
1532
|
return c > 3 && r && Object.defineProperty(target, key, r), r;
|
|
1399
1533
|
}
|
|
1400
|
-
__name(
|
|
1534
|
+
__name(_ts_decorate14, "_ts_decorate");
|
|
1401
1535
|
var BaseTimeSyncService = class extends BaseService {
|
|
1402
1536
|
static {
|
|
1403
1537
|
__name(this, "BaseTimeSyncService");
|
|
@@ -1467,17 +1601,51 @@ var BaseTimeSyncService = class extends BaseService {
|
|
|
1467
1601
|
}
|
|
1468
1602
|
}
|
|
1469
1603
|
}
|
|
1604
|
+
async currentTimeAndHash(domain) {
|
|
1605
|
+
switch (domain) {
|
|
1606
|
+
case "xl1": {
|
|
1607
|
+
const head = await this.chainIterator.head();
|
|
1608
|
+
return [
|
|
1609
|
+
head.block,
|
|
1610
|
+
await PayloadBuilder10.hash(head)
|
|
1611
|
+
];
|
|
1612
|
+
}
|
|
1613
|
+
case "epoch": {
|
|
1614
|
+
return [
|
|
1615
|
+
Date.now(),
|
|
1616
|
+
null
|
|
1617
|
+
];
|
|
1618
|
+
}
|
|
1619
|
+
case "ethereum": {
|
|
1620
|
+
const provider = assertEx11(this.ethProvider, () => "Ethereum provider not configured");
|
|
1621
|
+
const blockNumber = await provider.getBlockNumber() ?? 0;
|
|
1622
|
+
const block = await provider.getBlock(blockNumber);
|
|
1623
|
+
const blockHash = asHash3(assertEx11(block?.hash, () => "Block hash not found"), true);
|
|
1624
|
+
return [
|
|
1625
|
+
blockNumber,
|
|
1626
|
+
blockHash
|
|
1627
|
+
];
|
|
1628
|
+
}
|
|
1629
|
+
default: {
|
|
1630
|
+
throw new Error(`Unknown time domain: ${domain}`);
|
|
1631
|
+
}
|
|
1632
|
+
}
|
|
1633
|
+
}
|
|
1634
|
+
currentTimePayload() {
|
|
1635
|
+
throw new Error("Method not implemented.");
|
|
1636
|
+
}
|
|
1470
1637
|
};
|
|
1471
|
-
BaseTimeSyncService =
|
|
1472
|
-
|
|
1638
|
+
BaseTimeSyncService = _ts_decorate14([
|
|
1639
|
+
creatable14()
|
|
1473
1640
|
], BaseTimeSyncService);
|
|
1474
1641
|
export {
|
|
1475
1642
|
BaseAccountBalanceService,
|
|
1643
|
+
BaseAccountTransfersService,
|
|
1476
1644
|
BaseAccountableService,
|
|
1477
1645
|
BaseBlockProducerService,
|
|
1478
1646
|
BaseBlockRewardService,
|
|
1479
|
-
BaseBridgeService,
|
|
1480
1647
|
BaseElectionService,
|
|
1648
|
+
BaseNetworkStakeStepRewardService,
|
|
1481
1649
|
BasePendingTransactionsService,
|
|
1482
1650
|
BaseService,
|
|
1483
1651
|
BaseStepStakeService,
|
|
@@ -1493,7 +1661,7 @@ export {
|
|
|
1493
1661
|
XyoStakeIntentService,
|
|
1494
1662
|
XyoValidator,
|
|
1495
1663
|
accountBalanceServiceFromArchivist,
|
|
1496
|
-
|
|
1664
|
+
accountTransferServiceFromArchivist,
|
|
1497
1665
|
creatableService,
|
|
1498
1666
|
getBlockSignedStakeDeclarations
|
|
1499
1667
|
};
|