@xyo-network/chain-services 1.17.7 → 1.18.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 +3 -3
- package/dist/neutral/AccountBalance/accountBalanceServiceFromArchivist.d.ts.map +1 -1
- package/dist/neutral/BaseService.d.ts +2 -2
- package/dist/neutral/BaseService.d.ts.map +1 -1
- package/dist/neutral/ChainService/Evm/Evm.d.ts +3 -4
- package/dist/neutral/ChainService/Evm/Evm.d.ts.map +1 -1
- package/dist/neutral/ChainService/Memory/Memory.d.ts +3 -4
- package/dist/neutral/ChainService/Memory/Memory.d.ts.map +1 -1
- package/dist/neutral/ChainValidator/XyoValidator.d.ts +4 -2
- package/dist/neutral/ChainValidator/XyoValidator.d.ts.map +1 -1
- package/dist/neutral/PendingTransactions/BasePendingTransactions.d.ts +0 -1
- package/dist/neutral/PendingTransactions/BasePendingTransactions.d.ts.map +1 -1
- package/dist/neutral/Schemas/BaseSchemasService.d.ts +1 -1
- package/dist/neutral/Schemas/BaseSchemasService.d.ts.map +1 -1
- package/dist/neutral/StakeIntent/XyoStakeIntentService.d.ts +5 -3
- package/dist/neutral/StakeIntent/XyoStakeIntentService.d.ts.map +1 -1
- package/dist/neutral/blockViewerFromChainIteratorAndArchivist.d.ts.map +1 -1
- package/dist/neutral/implementation/chain/evm.d.ts +2 -2
- package/dist/neutral/implementation/chain/evm.d.ts.map +1 -1
- package/dist/neutral/implementation/chain/index.d.ts +2 -3
- package/dist/neutral/implementation/chain/index.d.ts.map +1 -1
- package/dist/neutral/implementation/head/createBootstrapHead.d.ts +3 -3
- package/dist/neutral/implementation/head/createBootstrapHead.d.ts.map +1 -1
- package/dist/neutral/implementation/head/index.d.ts +1 -1
- package/dist/neutral/implementation/head/index.d.ts.map +1 -1
- package/dist/neutral/implementation/index.d.ts +0 -9
- package/dist/neutral/implementation/index.d.ts.map +1 -1
- package/dist/neutral/index.d.ts +0 -2
- package/dist/neutral/index.d.ts.map +1 -1
- package/dist/neutral/index.mjs +378 -997
- package/dist/neutral/index.mjs.map +1 -1
- package/dist/neutral/model/Params.d.ts +3 -4
- package/dist/neutral/model/Params.d.ts.map +1 -1
- package/dist/neutral/simple/block/runner/SimpleBlockRunner.d.ts +25 -33
- package/dist/neutral/simple/block/runner/SimpleBlockRunner.d.ts.map +1 -1
- package/package.json +15 -17
- package/src/AccountBalance/accountBalanceServiceFromArchivist.ts +10 -16
- package/src/BaseService.ts +3 -2
- package/src/ChainService/Evm/Evm.ts +24 -37
- package/src/ChainService/Memory/Memory.ts +6 -12
- package/src/ChainValidator/XyoValidator.ts +11 -4
- package/src/PendingTransactions/BasePendingTransactions.ts +2 -6
- package/src/Schemas/BaseSchemasService.ts +2 -2
- package/src/StakeIntent/XyoStakeIntentService.ts +12 -8
- package/src/blockViewerFromChainIteratorAndArchivist.ts +9 -0
- package/src/implementation/chain/evm.ts +5 -5
- package/src/implementation/chain/index.ts +12 -14
- package/src/implementation/head/createBootstrapHead.ts +13 -8
- package/src/implementation/head/index.ts +1 -1
- package/src/implementation/index.ts +0 -9
- package/src/index.ts +0 -2
- package/src/model/Params.ts +4 -4
- package/src/simple/block/runner/SimpleBlockRunner.ts +122 -122
- package/dist/neutral/ChainBlockNumberIteration/ChainBlockNumberIterationService.d.ts +0 -50
- package/dist/neutral/ChainBlockNumberIteration/ChainBlockNumberIterationService.d.ts.map +0 -1
- package/dist/neutral/ChainBlockNumberIteration/index.d.ts +0 -3
- package/dist/neutral/ChainBlockNumberIteration/index.d.ts.map +0 -1
- package/dist/neutral/ChainBlockNumberIteration/model/BlockNumberIteration.d.ts +0 -7
- package/dist/neutral/ChainBlockNumberIteration/model/BlockNumberIteration.d.ts.map +0 -1
- package/dist/neutral/ChainBlockNumberIteration/model/Params.d.ts +0 -9
- package/dist/neutral/ChainBlockNumberIteration/model/Params.d.ts.map +0 -1
- package/dist/neutral/ChainBlockNumberIteration/model/index.d.ts +0 -3
- package/dist/neutral/ChainBlockNumberIteration/model/index.d.ts.map +0 -1
- package/dist/neutral/Time/BaseTimeSyncService.d.ts +0 -24
- package/dist/neutral/Time/BaseTimeSyncService.d.ts.map +0 -1
- package/dist/neutral/Time/index.d.ts +0 -2
- package/dist/neutral/Time/index.d.ts.map +0 -1
- package/dist/neutral/implementation/accountBalance.d.ts +0 -7
- package/dist/neutral/implementation/accountBalance.d.ts.map +0 -1
- package/dist/neutral/implementation/blockViewer.d.ts +0 -7
- package/dist/neutral/implementation/blockViewer.d.ts.map +0 -1
- package/dist/neutral/implementation/head/createForkedHead/config/getBridgeDestinationDetails.d.ts +0 -8
- package/dist/neutral/implementation/head/createForkedHead/config/getBridgeDestinationDetails.d.ts.map +0 -1
- package/dist/neutral/implementation/head/createForkedHead/config/getBridgeSourceDetails.d.ts +0 -9
- package/dist/neutral/implementation/head/createForkedHead/config/getBridgeSourceDetails.d.ts.map +0 -1
- package/dist/neutral/implementation/head/createForkedHead/config/getForkDetails.d.ts +0 -4
- package/dist/neutral/implementation/head/createForkedHead/config/getForkDetails.d.ts.map +0 -1
- package/dist/neutral/implementation/head/createForkedHead/config/index.d.ts +0 -4
- package/dist/neutral/implementation/head/createForkedHead/config/index.d.ts.map +0 -1
- package/dist/neutral/implementation/head/createForkedHead/createForkedHead.d.ts +0 -5
- package/dist/neutral/implementation/head/createForkedHead/createForkedHead.d.ts.map +0 -1
- package/dist/neutral/implementation/head/createForkedHead/getBridgeDestinationObservation.d.ts +0 -11
- package/dist/neutral/implementation/head/createForkedHead/getBridgeDestinationObservation.d.ts.map +0 -1
- package/dist/neutral/implementation/head/createForkedHead/getBridgeIntent.d.ts +0 -11
- package/dist/neutral/implementation/head/createForkedHead/getBridgeIntent.d.ts.map +0 -1
- package/dist/neutral/implementation/head/createForkedHead/getBridgeSourceObservation.d.ts +0 -11
- package/dist/neutral/implementation/head/createForkedHead/getBridgeSourceObservation.d.ts.map +0 -1
- package/dist/neutral/implementation/head/createForkedHead/getFirstBlockForNewChain.d.ts +0 -13
- package/dist/neutral/implementation/head/createForkedHead/getFirstBlockForNewChain.d.ts.map +0 -1
- package/dist/neutral/implementation/head/createForkedHead/index.d.ts +0 -2
- package/dist/neutral/implementation/head/createForkedHead/index.d.ts.map +0 -1
- package/dist/neutral/implementation/head/getForkFromBlock.d.ts +0 -12
- package/dist/neutral/implementation/head/getForkFromBlock.d.ts.map +0 -1
- package/dist/neutral/implementation/head/head.d.ts +0 -11
- package/dist/neutral/implementation/head/head.d.ts.map +0 -1
- package/dist/neutral/implementation/head/submitNewChain.d.ts +0 -10
- package/dist/neutral/implementation/head/submitNewChain.d.ts.map +0 -1
- package/dist/neutral/implementation/mempoolRunner.d.ts +0 -7
- package/dist/neutral/implementation/mempoolRunner.d.ts.map +0 -1
- package/dist/neutral/implementation/mempoolViewer.d.ts +0 -7
- package/dist/neutral/implementation/mempoolViewer.d.ts.map +0 -1
- package/dist/neutral/implementation/pendingTransactions.d.ts +0 -9
- package/dist/neutral/implementation/pendingTransactions.d.ts.map +0 -1
- package/dist/neutral/implementation/producer.d.ts +0 -5
- package/dist/neutral/implementation/producer.d.ts.map +0 -1
- package/dist/neutral/implementation/reward.d.ts +0 -14
- package/dist/neutral/implementation/reward.d.ts.map +0 -1
- package/dist/neutral/implementation/time.d.ts +0 -6
- package/dist/neutral/implementation/time.d.ts.map +0 -1
- package/dist/neutral/implementation/validator.d.ts +0 -5
- package/dist/neutral/implementation/validator.d.ts.map +0 -1
- package/dist/neutral/simple/block/runner/spec/SimpleBlockRunner.d.ts +0 -2
- package/dist/neutral/simple/block/runner/spec/SimpleBlockRunner.d.ts.map +0 -1
- package/src/ChainBlockNumberIteration/ChainBlockNumberIterationService.ts +0 -176
- package/src/ChainBlockNumberIteration/index.ts +0 -2
- package/src/ChainBlockNumberIteration/model/BlockNumberIteration.ts +0 -7
- package/src/ChainBlockNumberIteration/model/Params.ts +0 -10
- package/src/ChainBlockNumberIteration/model/index.ts +0 -2
- package/src/Time/BaseTimeSyncService.ts +0 -54
- package/src/Time/index.ts +0 -1
- package/src/implementation/accountBalance.ts +0 -29
- package/src/implementation/blockViewer.ts +0 -29
- package/src/implementation/head/createForkedHead/config/getBridgeDestinationDetails.ts +0 -27
- package/src/implementation/head/createForkedHead/config/getBridgeSourceDetails.ts +0 -19
- package/src/implementation/head/createForkedHead/config/getForkDetails.ts +0 -10
- package/src/implementation/head/createForkedHead/config/index.ts +0 -3
- package/src/implementation/head/createForkedHead/createForkedHead.ts +0 -29
- package/src/implementation/head/createForkedHead/getBridgeDestinationObservation.ts +0 -42
- package/src/implementation/head/createForkedHead/getBridgeIntent.ts +0 -51
- package/src/implementation/head/createForkedHead/getBridgeSourceObservation.ts +0 -46
- package/src/implementation/head/createForkedHead/getFirstBlockForNewChain.ts +0 -41
- package/src/implementation/head/createForkedHead/index.ts +0 -1
- package/src/implementation/head/getForkFromBlock.ts +0 -43
- package/src/implementation/head/head.ts +0 -49
- package/src/implementation/head/submitNewChain.ts +0 -27
- package/src/implementation/mempoolRunner.ts +0 -29
- package/src/implementation/mempoolViewer.ts +0 -29
- package/src/implementation/pendingTransactions.ts +0 -36
- package/src/implementation/producer.ts +0 -16
- package/src/implementation/reward.ts +0 -53
- package/src/implementation/time.ts +0 -26
- package/src/implementation/validator.ts +0 -15
- package/src/simple/block/runner/spec/SimpleBlockRunner.ts +0 -418
package/dist/neutral/index.mjs
CHANGED
|
@@ -4,9 +4,9 @@ var __name = (target, value) => __defProp(target, "name", { value, configurable:
|
|
|
4
4
|
// src/AccountBalance/accountBalanceServiceFromArchivist.ts
|
|
5
5
|
import { assertEx } from "@xylabs/sdk-js";
|
|
6
6
|
import { StepSizes } from "@xyo-network/xl1-protocol";
|
|
7
|
-
import { findMostRecentBlock, LruCacheMap,
|
|
7
|
+
import { findMostRecentBlock, LruCacheMap, payloadMapFromStore, SimpleAccountBalanceViewer } from "@xyo-network/xl1-protocol-sdk";
|
|
8
8
|
import { Semaphore } from "async-mutex";
|
|
9
|
-
var accountBalancesViewerFromArchivist = /* @__PURE__ */ __name(async (chainId, archivist) => {
|
|
9
|
+
var accountBalancesViewerFromArchivist = /* @__PURE__ */ __name(async (context, chainId, archivist) => {
|
|
10
10
|
const summaryMap = new LruCacheMap({
|
|
11
11
|
max: 1e5,
|
|
12
12
|
allowStale: true,
|
|
@@ -19,7 +19,7 @@ var accountBalancesViewerFromArchivist = /* @__PURE__ */ __name(async (chainId,
|
|
|
19
19
|
noDisposeOnSet: false,
|
|
20
20
|
updateAgeOnGet: true
|
|
21
21
|
});
|
|
22
|
-
const chainMap =
|
|
22
|
+
const chainMap = payloadMapFromStore(archivist);
|
|
23
23
|
const headFunc = /* @__PURE__ */ __name(async () => {
|
|
24
24
|
const head = assertEx(await findMostRecentBlock(archivist), () => "No blocks found in chainArchivist");
|
|
25
25
|
return [
|
|
@@ -28,14 +28,16 @@ var accountBalancesViewerFromArchivist = /* @__PURE__ */ __name(async (chainId,
|
|
|
28
28
|
];
|
|
29
29
|
}, "headFunc");
|
|
30
30
|
const service = await SimpleAccountBalanceViewer.create({
|
|
31
|
-
context
|
|
31
|
+
context,
|
|
32
|
+
balanceSummaryContext: {
|
|
32
33
|
chainId,
|
|
33
34
|
store: {
|
|
34
35
|
chainMap
|
|
35
36
|
},
|
|
36
37
|
stepSemaphores: StepSizes.map(() => new Semaphore(20)),
|
|
37
38
|
summaryMap,
|
|
38
|
-
head: headFunc
|
|
39
|
+
head: headFunc,
|
|
40
|
+
singletons: context.singletons
|
|
39
41
|
},
|
|
40
42
|
transfersSummaryContext: {
|
|
41
43
|
chainId,
|
|
@@ -44,24 +46,16 @@ var accountBalancesViewerFromArchivist = /* @__PURE__ */ __name(async (chainId,
|
|
|
44
46
|
},
|
|
45
47
|
stepSemaphores: StepSizes.map(() => new Semaphore(20)),
|
|
46
48
|
summaryMap: transferSummaryMap,
|
|
47
|
-
head: headFunc
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
context: {
|
|
51
|
-
chainId,
|
|
52
|
-
head: headFunc,
|
|
53
|
-
store: {
|
|
54
|
-
chainMap
|
|
55
|
-
}
|
|
56
|
-
},
|
|
57
|
-
finalizedArchivist: archivist
|
|
58
|
-
})
|
|
49
|
+
head: headFunc,
|
|
50
|
+
singletons: context.singletons
|
|
51
|
+
}
|
|
59
52
|
});
|
|
60
53
|
return service;
|
|
61
54
|
}, "accountBalancesViewerFromArchivist");
|
|
62
55
|
|
|
63
56
|
// src/BaseService.ts
|
|
64
|
-
import {
|
|
57
|
+
import { creatable } from "@xylabs/sdk-js";
|
|
58
|
+
import { AbstractCreatableProvider } from "@xyo-network/xl1-protocol-sdk";
|
|
65
59
|
import { Mutex } from "async-mutex";
|
|
66
60
|
function _ts_decorate(decorators, target, key, desc) {
|
|
67
61
|
var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
|
|
@@ -70,7 +64,7 @@ function _ts_decorate(decorators, target, key, desc) {
|
|
|
70
64
|
return c > 3 && r && Object.defineProperty(target, key, r), r;
|
|
71
65
|
}
|
|
72
66
|
__name(_ts_decorate, "_ts_decorate");
|
|
73
|
-
var BaseService = class extends
|
|
67
|
+
var BaseService = class extends AbstractCreatableProvider {
|
|
74
68
|
static {
|
|
75
69
|
__name(this, "BaseService");
|
|
76
70
|
}
|
|
@@ -101,7 +95,7 @@ function creatableService() {
|
|
|
101
95
|
__name(creatableService, "creatableService");
|
|
102
96
|
|
|
103
97
|
// src/BlockReward/EvmBlockRewardViewer.ts
|
|
104
|
-
import { AbstractCreatable
|
|
98
|
+
import { AbstractCreatable, assertEx as assertEx2, creatable as creatable2, toEthAddress } from "@xylabs/sdk-js";
|
|
105
99
|
import { XyoChainRewards__factory as XyoChainRewardsFactory } from "@xyo-network/typechain";
|
|
106
100
|
import { asAttoXL1 } from "@xyo-network/xl1-protocol";
|
|
107
101
|
import { BlockRewardViewerMoniker } from "@xyo-network/xl1-protocol-sdk";
|
|
@@ -112,7 +106,7 @@ function _ts_decorate2(decorators, target, key, desc) {
|
|
|
112
106
|
return c > 3 && r && Object.defineProperty(target, key, r), r;
|
|
113
107
|
}
|
|
114
108
|
__name(_ts_decorate2, "_ts_decorate");
|
|
115
|
-
var EvmBlockRewardViewer = class _EvmBlockRewardViewer extends
|
|
109
|
+
var EvmBlockRewardViewer = class _EvmBlockRewardViewer extends AbstractCreatable {
|
|
116
110
|
static {
|
|
117
111
|
__name(this, "EvmBlockRewardViewer");
|
|
118
112
|
}
|
|
@@ -206,6 +200,13 @@ function blockViewerFromChainIteratorAndArchivist(chainIterator, chainArchivist)
|
|
|
206
200
|
}
|
|
207
201
|
return results;
|
|
208
202
|
}, "blocksByNumber"),
|
|
203
|
+
chainId: /* @__PURE__ */ __name(async function(blockNumber = "latest") {
|
|
204
|
+
const block = blockNumber === "latest" ? await this.currentBlock() : await this.blockByNumber(blockNumber);
|
|
205
|
+
if (!block) {
|
|
206
|
+
throw new Error(`Block not found for block number: ${blockNumber}`);
|
|
207
|
+
}
|
|
208
|
+
return block[0].chain;
|
|
209
|
+
}, "chainId"),
|
|
209
210
|
currentBlock: /* @__PURE__ */ __name(async function() {
|
|
210
211
|
const head = await chainIterator.head();
|
|
211
212
|
return this.blockByHash(head._hash);
|
|
@@ -230,211 +231,56 @@ function blockViewerFromChainIteratorAndArchivist(chainIterator, chainArchivist)
|
|
|
230
231
|
}
|
|
231
232
|
__name(blockViewerFromChainIteratorAndArchivist, "blockViewerFromChainIteratorAndArchivist");
|
|
232
233
|
|
|
233
|
-
// src/ChainBlockNumberIteration/ChainBlockNumberIterationService.ts
|
|
234
|
-
import { assertEx as assertEx3, isDefined as isDefined2, isNull, isUndefined } from "@xylabs/sdk-js";
|
|
235
|
-
import { PayloadBuilder as PayloadBuilder2 } from "@xyo-network/payload-builder";
|
|
236
|
-
import { asBlockBoundWitness, asBlockBoundWitnessWithStorageMeta, asSignedHydratedBlockWithHashMeta, asXL1BlockNumber, isBlockBoundWitnessWithHashMeta } from "@xyo-network/xl1-protocol";
|
|
237
|
-
import { BlockViewerMoniker as BlockViewerMoniker2, hydrateBlock } from "@xyo-network/xl1-protocol-sdk";
|
|
238
|
-
import { LRUCache } from "lru-cache";
|
|
239
|
-
var ChainBlockNumberIterationService = class _ChainBlockNumberIterationService extends BaseService {
|
|
240
|
-
static {
|
|
241
|
-
__name(this, "ChainBlockNumberIterationService");
|
|
242
|
-
}
|
|
243
|
-
static defaultMoniker = BlockViewerMoniker2;
|
|
244
|
-
static monikers = [
|
|
245
|
-
BlockViewerMoniker2
|
|
246
|
-
];
|
|
247
|
-
moniker = _ChainBlockNumberIterationService.defaultMoniker;
|
|
248
|
-
_blocksByBlockNumber = new LRUCache({
|
|
249
|
-
max: 1e4
|
|
250
|
-
});
|
|
251
|
-
_currentHead;
|
|
252
|
-
get chainId() {
|
|
253
|
-
return assertEx3(this._currentHead?.chain ?? this.params?.head?.chain, () => "Current head is not set");
|
|
254
|
-
}
|
|
255
|
-
get chainMap() {
|
|
256
|
-
return assertEx3(this.params.chainMap);
|
|
257
|
-
}
|
|
258
|
-
get chainStoreRead() {
|
|
259
|
-
return {
|
|
260
|
-
chainMap: this.chainMap
|
|
261
|
-
};
|
|
262
|
-
}
|
|
263
|
-
async blockByHash(hash) {
|
|
264
|
-
return asSignedHydratedBlockWithHashMeta(await hydrateBlock(this.chainStoreRead, hash)) ?? null;
|
|
265
|
-
}
|
|
266
|
-
async blockByNumber(block) {
|
|
267
|
-
return asSignedHydratedBlockWithHashMeta(await this.get(block)) ?? null;
|
|
268
|
-
}
|
|
269
|
-
async blocksByHash(hash, limit = 100) {
|
|
270
|
-
const results = [];
|
|
271
|
-
let currentBlock = await this.blockByHash(hash);
|
|
272
|
-
while (currentBlock !== null && (isUndefined(limit) || results.length < limit)) {
|
|
273
|
-
results.push(currentBlock);
|
|
274
|
-
const previousHash = currentBlock[0].previous;
|
|
275
|
-
if (isNull(previousHash)) break;
|
|
276
|
-
currentBlock = await this.blockByHash(previousHash);
|
|
277
|
-
}
|
|
278
|
-
return results;
|
|
279
|
-
}
|
|
280
|
-
async blocksByNumber(blockNumber, limit = 100) {
|
|
281
|
-
const results = [];
|
|
282
|
-
let currentBlock = await this.blockByNumber(blockNumber);
|
|
283
|
-
while (currentBlock !== null && (isUndefined(limit) || results.length < limit)) {
|
|
284
|
-
results.push(currentBlock);
|
|
285
|
-
if (currentBlock[0].block === 0) break;
|
|
286
|
-
const previousNumber = asXL1BlockNumber(currentBlock[0].block - 1, true);
|
|
287
|
-
currentBlock = await this.blockByNumber(previousNumber);
|
|
288
|
-
}
|
|
289
|
-
return results;
|
|
290
|
-
}
|
|
291
|
-
async currentBlock() {
|
|
292
|
-
return assertEx3(await this.blockByHash(await this.currentBlockHash()), () => "Current block not found");
|
|
293
|
-
}
|
|
294
|
-
async currentBlockHash() {
|
|
295
|
-
const head = assertEx3(await this.head(), () => "Head is not set");
|
|
296
|
-
return head._hash;
|
|
297
|
-
}
|
|
298
|
-
async currentBlockNumber() {
|
|
299
|
-
const head = assertEx3(await this.head(), () => "Head is not set");
|
|
300
|
-
return head.block;
|
|
301
|
-
}
|
|
302
|
-
async get(block) {
|
|
303
|
-
const head = await this.head();
|
|
304
|
-
assertEx3(head.block >= block, () => `Block requested is newer than the current head [${block}]`);
|
|
305
|
-
const cached = this._blocksByBlockNumber.get(block);
|
|
306
|
-
if (cached) return cached;
|
|
307
|
-
const startingBlock = head;
|
|
308
|
-
const currentBlockHash = await PayloadBuilder2.hash(startingBlock);
|
|
309
|
-
let currentBlock = await this.chainMap.get(currentBlockHash);
|
|
310
|
-
while (isDefined2(currentBlock)) {
|
|
311
|
-
assertEx3(asBlockBoundWitness(currentBlock), () => `Expected hash to be a block bound witness [${currentBlock?._hash}]`);
|
|
312
|
-
if (isBlockBoundWitnessWithHashMeta(currentBlock)) {
|
|
313
|
-
this._blocksByBlockNumber.set(currentBlock.block, currentBlock);
|
|
314
|
-
if (currentBlock.block === block) {
|
|
315
|
-
return currentBlock;
|
|
316
|
-
}
|
|
317
|
-
const { previous } = currentBlock;
|
|
318
|
-
if (isNull(previous)) break;
|
|
319
|
-
currentBlock = await this.chainMap.get(previous);
|
|
320
|
-
}
|
|
321
|
-
}
|
|
322
|
-
throw new Error(`Block not found: ${block}`);
|
|
323
|
-
}
|
|
324
|
-
async head() {
|
|
325
|
-
if (isDefined2(this._currentHead)) return this._currentHead;
|
|
326
|
-
if (isDefined2(this.params.head)) {
|
|
327
|
-
const newHead = await this.getBoundWitnessAsBlockBoundWitnessWithStorageMeta(this.params.head);
|
|
328
|
-
this._currentHead = newHead;
|
|
329
|
-
return newHead;
|
|
330
|
-
}
|
|
331
|
-
throw new Error("Head is not set");
|
|
332
|
-
}
|
|
333
|
-
async next(block) {
|
|
334
|
-
const currentBlock = block;
|
|
335
|
-
const nextBlockNumber = currentBlock + 1;
|
|
336
|
-
return await this.get(nextBlockNumber);
|
|
337
|
-
}
|
|
338
|
-
payloadByHash(_hash) {
|
|
339
|
-
throw new Error("Method [payloadByHash] not implemented.");
|
|
340
|
-
}
|
|
341
|
-
payloadsByHash(_hashes) {
|
|
342
|
-
throw new Error("Method [payloadsByHash] not implemented.");
|
|
343
|
-
}
|
|
344
|
-
// TODO: Decide on inclusive/exclusive (probably need inclusive to account for chain head)
|
|
345
|
-
// and then communicate via method name and documentation
|
|
346
|
-
async previous(block = void 0, count = 1) {
|
|
347
|
-
const results = [];
|
|
348
|
-
let currentBlock = isDefined2(block) ? await this.get(block) : await this.head();
|
|
349
|
-
while (isDefined2(currentBlock) && results.length < count) {
|
|
350
|
-
if (isBlockBoundWitnessWithHashMeta(currentBlock)) {
|
|
351
|
-
results.push(currentBlock);
|
|
352
|
-
const { previous } = currentBlock;
|
|
353
|
-
if (isNull(previous)) break;
|
|
354
|
-
const nextBlock = await this.chainMap.get(previous);
|
|
355
|
-
currentBlock = asBlockBoundWitnessWithStorageMeta(nextBlock);
|
|
356
|
-
} else {
|
|
357
|
-
const hash = PayloadBuilder2.hash(currentBlock);
|
|
358
|
-
assertEx3(asBlockBoundWitnessWithStorageMeta(currentBlock), () => `Expected hash to be a block bound witness [${hash}]`);
|
|
359
|
-
}
|
|
360
|
-
}
|
|
361
|
-
return results;
|
|
362
|
-
}
|
|
363
|
-
async updateHead(head) {
|
|
364
|
-
const newHead = await this.getBoundWitnessAsBlockBoundWitnessWithStorageMeta(head);
|
|
365
|
-
this._currentHead = newHead;
|
|
366
|
-
void this.emit("headUpdated", {
|
|
367
|
-
blocks: [
|
|
368
|
-
newHead
|
|
369
|
-
]
|
|
370
|
-
});
|
|
371
|
-
}
|
|
372
|
-
async getBoundWitnessAsBlockBoundWitnessWithStorageMeta(head) {
|
|
373
|
-
const hash = await PayloadBuilder2.hash(head);
|
|
374
|
-
const stored = await this.chainMap.get(hash);
|
|
375
|
-
const newHead = asBlockBoundWitnessWithStorageMeta(stored);
|
|
376
|
-
if (isUndefined(newHead)) throw new Error(`Head block not found in archivist [${hash}]`);
|
|
377
|
-
return newHead;
|
|
378
|
-
}
|
|
379
|
-
};
|
|
380
|
-
|
|
381
234
|
// src/ChainService/Evm/Evm.ts
|
|
382
|
-
import {
|
|
383
|
-
import { StakedXyoChain__factory as StakedXyoChainFactory } from "@xyo-network/typechain";
|
|
235
|
+
import { toAddress, toEthAddress as toEthAddress2 } from "@xylabs/sdk-js";
|
|
384
236
|
import { ChainContractViewerMoniker } from "@xyo-network/xl1-protocol-sdk";
|
|
385
237
|
import { getAddress } from "ethers/address";
|
|
386
|
-
var
|
|
238
|
+
var EvmChainViewer = class _EvmChainViewer extends BaseService {
|
|
387
239
|
static {
|
|
388
|
-
__name(this, "
|
|
240
|
+
__name(this, "EvmChainViewer");
|
|
389
241
|
}
|
|
390
242
|
static defaultMoniker = ChainContractViewerMoniker;
|
|
391
243
|
static monikers = [
|
|
392
244
|
ChainContractViewerMoniker
|
|
393
245
|
];
|
|
394
|
-
moniker =
|
|
246
|
+
moniker = _EvmChainViewer.defaultMoniker;
|
|
247
|
+
get contract() {
|
|
248
|
+
return this.params.contract;
|
|
249
|
+
}
|
|
395
250
|
async active() {
|
|
396
|
-
return await
|
|
251
|
+
return await this.contract.active();
|
|
397
252
|
}
|
|
398
253
|
async activeByStaked(staked) {
|
|
399
|
-
return await
|
|
254
|
+
return await this.contract.activeByAddressStaked(getAddress(toEthAddress2(staked)));
|
|
400
255
|
}
|
|
401
256
|
async activeByStaker(address) {
|
|
402
|
-
return await
|
|
257
|
+
return await this.contract.activeByStaker(getAddress(toEthAddress2(address)));
|
|
403
258
|
}
|
|
404
259
|
async addStake(staked, amount) {
|
|
405
|
-
const result = await
|
|
260
|
+
const result = await this.contract.addStake(getAddress(toEthAddress2(staked)), amount);
|
|
406
261
|
await result.wait();
|
|
407
262
|
return true;
|
|
408
263
|
}
|
|
409
|
-
chainId() {
|
|
410
|
-
return assertEx4(this.params.id);
|
|
411
|
-
}
|
|
412
|
-
async contract() {
|
|
413
|
-
if (this.params.contract === void 0) {
|
|
414
|
-
this.params.contract = StakedXyoChainFactory.connect(toEthAddress2(await this.chainId()), this.params.runner);
|
|
415
|
-
}
|
|
416
|
-
return assertEx4(this.params.contract);
|
|
417
|
-
}
|
|
418
264
|
async forkedAtBlockNumber() {
|
|
419
|
-
return await
|
|
265
|
+
return await this.contract.forkedAtBlockNumber();
|
|
420
266
|
}
|
|
421
267
|
async forkedAtHash() {
|
|
422
|
-
return await
|
|
268
|
+
return await this.contract.forkedAtHash();
|
|
423
269
|
}
|
|
424
270
|
async forkedChainId() {
|
|
425
|
-
return toAddress(await
|
|
271
|
+
return toAddress(await this.contract.forkedChainId());
|
|
426
272
|
}
|
|
427
273
|
async minWithdrawalBlocks() {
|
|
428
|
-
return await
|
|
274
|
+
return await this.contract.minWithdrawalBlocks();
|
|
429
275
|
}
|
|
430
276
|
async pending() {
|
|
431
|
-
return await
|
|
277
|
+
return await this.contract.pending();
|
|
432
278
|
}
|
|
433
279
|
async pendingByStaker(staker) {
|
|
434
|
-
return await
|
|
280
|
+
return await this.contract.pendingByStaker(getAddress(toEthAddress2(staker)));
|
|
435
281
|
}
|
|
436
282
|
async removeStake(slot) {
|
|
437
|
-
const result = await
|
|
283
|
+
const result = await this.contract.removeStake(slot);
|
|
438
284
|
await result.wait();
|
|
439
285
|
return true;
|
|
440
286
|
}
|
|
@@ -442,36 +288,36 @@ var EvmChainService = class _EvmChainService extends BaseService {
|
|
|
442
288
|
throw new Error("Method not implemented.");
|
|
443
289
|
}
|
|
444
290
|
async rewardsContract() {
|
|
445
|
-
return await
|
|
291
|
+
return await this.contract.rewardsContract();
|
|
446
292
|
}
|
|
447
293
|
async stakingTokenAddress() {
|
|
448
|
-
return await
|
|
294
|
+
return await this.contract.stakingTokenAddress();
|
|
449
295
|
}
|
|
450
296
|
async withdrawStake(slot) {
|
|
451
|
-
const result = await
|
|
297
|
+
const result = await this.contract.withdrawStake(slot);
|
|
452
298
|
await result.wait();
|
|
453
299
|
return true;
|
|
454
300
|
}
|
|
455
301
|
async withdrawn() {
|
|
456
|
-
return await
|
|
302
|
+
return await this.contract.withdrawn();
|
|
457
303
|
}
|
|
458
304
|
async withdrawnByStaker(staker) {
|
|
459
|
-
return await
|
|
305
|
+
return await this.contract.withdrawnByStaker(getAddress(staker));
|
|
460
306
|
}
|
|
461
307
|
};
|
|
462
308
|
|
|
463
309
|
// src/ChainService/Memory/Memory.ts
|
|
464
|
-
import {
|
|
310
|
+
import { toAddress as toAddress2, ZERO_ADDRESS } from "@xylabs/sdk-js";
|
|
465
311
|
import { ChainContractViewerMoniker as ChainContractViewerMoniker2 } from "@xyo-network/xl1-protocol-sdk";
|
|
466
|
-
var
|
|
312
|
+
var MemoryChainViewer = class _MemoryChainViewer extends BaseService {
|
|
467
313
|
static {
|
|
468
|
-
__name(this, "
|
|
314
|
+
__name(this, "MemoryChainViewer");
|
|
469
315
|
}
|
|
470
316
|
static defaultMoniker = ChainContractViewerMoniker2;
|
|
471
317
|
static monikers = [
|
|
472
318
|
ChainContractViewerMoniker2
|
|
473
319
|
];
|
|
474
|
-
moniker =
|
|
320
|
+
moniker = _MemoryChainViewer.defaultMoniker;
|
|
475
321
|
_chainId;
|
|
476
322
|
_simulatedStake = 1n;
|
|
477
323
|
async active() {
|
|
@@ -486,11 +332,8 @@ var MemoryChainService = class _MemoryChainService extends BaseService {
|
|
|
486
332
|
async addStake(_staked, _amount) {
|
|
487
333
|
return await Promise.resolve(true);
|
|
488
334
|
}
|
|
489
|
-
chainId() {
|
|
490
|
-
return assertEx5(this._chainId, () => "Chain ID not set");
|
|
491
|
-
}
|
|
492
335
|
createHandler() {
|
|
493
|
-
const { minStake = 1 } = this.params.config.producer ?? {};
|
|
336
|
+
const { minStake = 1 } = this.params.context.config.producer ?? {};
|
|
494
337
|
this._simulatedStake = BigInt(minStake);
|
|
495
338
|
}
|
|
496
339
|
async forkedAtBlockNumber() {
|
|
@@ -539,7 +382,8 @@ var MemoryChainService = class _MemoryChainService extends BaseService {
|
|
|
539
382
|
};
|
|
540
383
|
|
|
541
384
|
// src/ChainValidator/XyoValidator.ts
|
|
542
|
-
import {
|
|
385
|
+
import { creatable as creatable3 } from "@xylabs/sdk-js";
|
|
386
|
+
import { BlockViewerMoniker as BlockViewerMoniker2 } from "@xyo-network/xl1-protocol-sdk";
|
|
543
387
|
function _ts_decorate3(decorators, target, key, desc) {
|
|
544
388
|
var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
|
|
545
389
|
if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
|
|
@@ -551,6 +395,7 @@ var XyoValidator = class extends BaseService {
|
|
|
551
395
|
static {
|
|
552
396
|
__name(this, "XyoValidator");
|
|
553
397
|
}
|
|
398
|
+
_blockViewer;
|
|
554
399
|
// get address() {
|
|
555
400
|
// return this.account.address
|
|
556
401
|
// }
|
|
@@ -558,7 +403,7 @@ var XyoValidator = class extends BaseService {
|
|
|
558
403
|
// return assertEx(this.params.account, () => 'account is required')
|
|
559
404
|
// }
|
|
560
405
|
get blockViewer() {
|
|
561
|
-
return
|
|
406
|
+
return this._blockViewer;
|
|
562
407
|
}
|
|
563
408
|
// protected get chainInfo() {
|
|
564
409
|
// return assertEx(this.params.chainId, () => 'chainInfo is required')
|
|
@@ -572,6 +417,9 @@ var XyoValidator = class extends BaseService {
|
|
|
572
417
|
// protected get blockRewardService() {
|
|
573
418
|
// return assertEx(this.params.blockRewardService, () => 'blockRewardService is required')
|
|
574
419
|
// }
|
|
420
|
+
async createHandler() {
|
|
421
|
+
this._blockViewer = await this.locator.getInstance(BlockViewerMoniker2);
|
|
422
|
+
}
|
|
575
423
|
validatePendingBlock(_block) {
|
|
576
424
|
return [];
|
|
577
425
|
}
|
|
@@ -587,7 +435,7 @@ XyoValidator = _ts_decorate3([
|
|
|
587
435
|
], XyoValidator);
|
|
588
436
|
|
|
589
437
|
// src/Election/BaseElectionService.ts
|
|
590
|
-
import { assertEx as
|
|
438
|
+
import { assertEx as assertEx3, creatable as creatable4 } from "@xylabs/sdk-js";
|
|
591
439
|
import { hexToLast4BytesInt, shuffleWithSeed } from "@xyo-network/chain-utils";
|
|
592
440
|
function _ts_decorate4(decorators, target, key, desc) {
|
|
593
441
|
var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
|
|
@@ -601,13 +449,13 @@ var BaseElectionService = class extends BaseService {
|
|
|
601
449
|
__name(this, "BaseElectionService");
|
|
602
450
|
}
|
|
603
451
|
get blockViewer() {
|
|
604
|
-
return
|
|
452
|
+
return assertEx3(this.params.blockViewer, () => "No block viewer");
|
|
605
453
|
}
|
|
606
454
|
get chainStakeViewer() {
|
|
607
|
-
return
|
|
455
|
+
return assertEx3(this.params.chainStakeViewer, () => "No chain stake viewer");
|
|
608
456
|
}
|
|
609
457
|
get stakeIntentService() {
|
|
610
|
-
return
|
|
458
|
+
return assertEx3(this.params.stakeIntentService, () => "No staked intent service");
|
|
611
459
|
}
|
|
612
460
|
async getCreatorCommitteeForNextBlock(current) {
|
|
613
461
|
return await this.spanAsync("getCreatorCommitteeForNextBlock", async () => {
|
|
@@ -628,67 +476,27 @@ BaseElectionService = _ts_decorate4([
|
|
|
628
476
|
creatable4()
|
|
629
477
|
], BaseElectionService);
|
|
630
478
|
|
|
631
|
-
// src/implementation/accountBalance.ts
|
|
632
|
-
import { isDefined as isDefined3 } from "@xylabs/sdk-js";
|
|
633
|
-
import { AccountBalanceViewerRpcSchemas, HttpRpcTransport, JsonRpcAccountBalanceViewer } from "@xyo-network/xl1-rpc";
|
|
634
|
-
var balanceServiceSingleton;
|
|
635
|
-
var initAccountBalanceService = /* @__PURE__ */ __name((params) => {
|
|
636
|
-
const { config, logger } = params;
|
|
637
|
-
if (balanceServiceSingleton) return balanceServiceSingleton;
|
|
638
|
-
const endpoint = config.services?.accountBalanceViewerEndpoint ?? config.services?.apiEndpoint;
|
|
639
|
-
if (isDefined3(endpoint)) {
|
|
640
|
-
const transport = new HttpRpcTransport(endpoint, {
|
|
641
|
-
...AccountBalanceViewerRpcSchemas
|
|
642
|
-
});
|
|
643
|
-
const viewer = new JsonRpcAccountBalanceViewer(transport);
|
|
644
|
-
logger?.log("Using AccountBalanceViewer RPC service at", endpoint);
|
|
645
|
-
return viewer;
|
|
646
|
-
} else {
|
|
647
|
-
throw new Error("No AccountBalanceViewer endpoint configured");
|
|
648
|
-
}
|
|
649
|
-
}, "initAccountBalanceService");
|
|
650
|
-
|
|
651
|
-
// src/implementation/blockViewer.ts
|
|
652
|
-
import { isDefined as isDefined4 } from "@xylabs/sdk-js";
|
|
653
|
-
import { BlockViewerRpcSchemas, HttpRpcTransport as HttpRpcTransport2, JsonRpcBlockViewer } from "@xyo-network/xl1-rpc";
|
|
654
|
-
var blockViewerSingleton;
|
|
655
|
-
var initBlockViewer = /* @__PURE__ */ __name((params) => {
|
|
656
|
-
const { config, logger } = params;
|
|
657
|
-
if (blockViewerSingleton) return blockViewerSingleton;
|
|
658
|
-
const endpoint = config.services?.apiEndpoint;
|
|
659
|
-
if (isDefined4(endpoint)) {
|
|
660
|
-
const transport = new HttpRpcTransport2(endpoint, {
|
|
661
|
-
...BlockViewerRpcSchemas
|
|
662
|
-
});
|
|
663
|
-
const viewer = new JsonRpcBlockViewer(transport);
|
|
664
|
-
logger?.log("Using BlockViewer RPC service at", endpoint);
|
|
665
|
-
return viewer;
|
|
666
|
-
} else {
|
|
667
|
-
throw new Error("No BlockViewer endpoint configured");
|
|
668
|
-
}
|
|
669
|
-
}, "initBlockViewer");
|
|
670
|
-
|
|
671
479
|
// src/implementation/chain/index.ts
|
|
672
|
-
import { assertEx as
|
|
480
|
+
import { assertEx as assertEx9 } from "@xylabs/sdk-js";
|
|
673
481
|
|
|
674
482
|
// src/implementation/chain/evm.ts
|
|
675
|
-
import { asAddress, assertEx as
|
|
483
|
+
import { asAddress, assertEx as assertEx8, isDefined as isDefined5, ZERO_ADDRESS as ZERO_ADDRESS2 } from "@xylabs/sdk-js";
|
|
676
484
|
import { Wallet } from "ethers/wallet";
|
|
677
485
|
|
|
678
486
|
// src/implementation/evm/initEvmProvider.ts
|
|
679
|
-
import { assertEx as
|
|
487
|
+
import { assertEx as assertEx7 } from "@xylabs/sdk-js";
|
|
680
488
|
|
|
681
489
|
// src/implementation/evm/initInfuraProvider.ts
|
|
682
|
-
import { assertEx as
|
|
490
|
+
import { assertEx as assertEx5, isDefined as isDefined3 } from "@xylabs/sdk-js";
|
|
683
491
|
import { InfuraProvider } from "ethers/providers";
|
|
684
492
|
|
|
685
493
|
// src/implementation/evm/initChainId.ts
|
|
686
|
-
import { assertEx as
|
|
494
|
+
import { assertEx as assertEx4, hexFrom, isDefined as isDefined2, isHex } from "@xylabs/sdk-js";
|
|
687
495
|
var canUseChainId = /* @__PURE__ */ __name((config) => {
|
|
688
|
-
return
|
|
496
|
+
return isDefined2(config.evm.chainId);
|
|
689
497
|
}, "canUseChainId");
|
|
690
498
|
var getChainId = /* @__PURE__ */ __name((config) => {
|
|
691
|
-
const chainId =
|
|
499
|
+
const chainId = assertEx4(config.evm.chainId, () => "Missing config.evm.chainId");
|
|
692
500
|
if (isHex(chainId, {
|
|
693
501
|
prefix: true
|
|
694
502
|
})) {
|
|
@@ -710,11 +518,11 @@ var initInfuraProvider = /* @__PURE__ */ __name((config) => {
|
|
|
710
518
|
return instance;
|
|
711
519
|
}, "initInfuraProvider");
|
|
712
520
|
var canUseInfuraProvider = /* @__PURE__ */ __name((config) => {
|
|
713
|
-
return canUseChainId(config) &&
|
|
521
|
+
return canUseChainId(config) && isDefined3(config.evm?.infura?.projectId) && isDefined3(config.evm?.infura?.projectSecret);
|
|
714
522
|
}, "canUseInfuraProvider");
|
|
715
523
|
var getInfuraProviderConfig = /* @__PURE__ */ __name((config) => {
|
|
716
|
-
const projectId =
|
|
717
|
-
const projectSecret =
|
|
524
|
+
const projectId = assertEx5(config.evm?.infura?.projectId, () => "Missing config.evm.infura.projectId");
|
|
525
|
+
const projectSecret = assertEx5(config.evm?.infura?.projectSecret, () => "Missing config.evm.infura.projectSecret");
|
|
718
526
|
return [
|
|
719
527
|
getChainId(config),
|
|
720
528
|
projectId,
|
|
@@ -723,17 +531,17 @@ var getInfuraProviderConfig = /* @__PURE__ */ __name((config) => {
|
|
|
723
531
|
}, "getInfuraProviderConfig");
|
|
724
532
|
|
|
725
533
|
// src/implementation/evm/initJsonRpcProvider.ts
|
|
726
|
-
import { assertEx as
|
|
534
|
+
import { assertEx as assertEx6, isDefined as isDefined4 } from "@xylabs/sdk-js";
|
|
727
535
|
import { JsonRpcProvider } from "ethers/providers";
|
|
728
536
|
var initJsonRpcProvider = /* @__PURE__ */ __name((config) => {
|
|
729
537
|
const providerConfig = getJsonRpcProviderConfig(config);
|
|
730
538
|
return Promise.resolve(new JsonRpcProvider(...providerConfig));
|
|
731
539
|
}, "initJsonRpcProvider");
|
|
732
540
|
var canUseJsonRpcProvider = /* @__PURE__ */ __name((config) => {
|
|
733
|
-
return canUseChainId(config) &&
|
|
541
|
+
return canUseChainId(config) && isDefined4(config.evm.jsonRpc?.url);
|
|
734
542
|
}, "canUseJsonRpcProvider");
|
|
735
543
|
var getJsonRpcProviderConfig = /* @__PURE__ */ __name((config) => {
|
|
736
|
-
const jsonRpcUrl =
|
|
544
|
+
const jsonRpcUrl = assertEx6(config.evm.jsonRpc?.url, () => "Missing config.evm.jsonRpc.url");
|
|
737
545
|
return [
|
|
738
546
|
jsonRpcUrl,
|
|
739
547
|
getChainId(config)
|
|
@@ -749,7 +557,7 @@ var initEvmProvider = /* @__PURE__ */ __name(async ({ config }) => {
|
|
|
749
557
|
} else if (canUseJsonRpcProvider(config)) {
|
|
750
558
|
provider = initJsonRpcProvider(config);
|
|
751
559
|
}
|
|
752
|
-
return
|
|
560
|
+
return assertEx7(await provider, () => "No provider available");
|
|
753
561
|
}, "initEvmProvider");
|
|
754
562
|
var canUseEvmProvider = /* @__PURE__ */ __name(({ config }) => {
|
|
755
563
|
return canUseInfuraProvider(config) || canUseJsonRpcProvider(config);
|
|
@@ -759,20 +567,20 @@ var canUseEvmProvider = /* @__PURE__ */ __name(({ config }) => {
|
|
|
759
567
|
var chainStakeServiceSingleton;
|
|
760
568
|
var canUseEvmContractChainService = /* @__PURE__ */ __name((config) => {
|
|
761
569
|
const { id } = config.chain;
|
|
762
|
-
return
|
|
570
|
+
return isDefined5(id) && id !== ZERO_ADDRESS2 && canUseEvmProvider({
|
|
763
571
|
config
|
|
764
572
|
});
|
|
765
573
|
}, "canUseEvmContractChainService");
|
|
766
|
-
var initEvmContractChainService = /* @__PURE__ */ __name(async ({ account, config, traceProvider, meterProvider, logger }) => {
|
|
574
|
+
var initEvmContractChainService = /* @__PURE__ */ __name(async ({ account, context: { config }, traceProvider, meterProvider, logger }) => {
|
|
767
575
|
if (chainStakeServiceSingleton) return chainStakeServiceSingleton;
|
|
768
|
-
const emvStakingContractAddress =
|
|
769
|
-
const id =
|
|
770
|
-
const provider2 =
|
|
576
|
+
const emvStakingContractAddress = assertEx8(config.chain.id, () => "config.chain.id is required");
|
|
577
|
+
const id = assertEx8(asAddress(emvStakingContractAddress), () => "config.chain.id is not a valid address");
|
|
578
|
+
const provider2 = assertEx8(await initEvmProvider({
|
|
771
579
|
config
|
|
772
580
|
}));
|
|
773
|
-
const privateKey =
|
|
581
|
+
const privateKey = assertEx8(account.private?.hex, () => "Account does not have a private key");
|
|
774
582
|
const runner = new Wallet(privateKey, provider2);
|
|
775
|
-
chainStakeServiceSingleton =
|
|
583
|
+
chainStakeServiceSingleton = EvmChainViewer.create({
|
|
776
584
|
id,
|
|
777
585
|
runner,
|
|
778
586
|
traceProvider,
|
|
@@ -786,27 +594,28 @@ var initEvmContractChainService = /* @__PURE__ */ __name(async ({ account, confi
|
|
|
786
594
|
|
|
787
595
|
// src/implementation/chain/index.ts
|
|
788
596
|
var chainStakeServiceSingleton2;
|
|
789
|
-
var initChainService = /* @__PURE__ */ __name(({ account,
|
|
597
|
+
var initChainService = /* @__PURE__ */ __name(({ account, context }) => {
|
|
598
|
+
const { logger } = context;
|
|
790
599
|
logger?.log("ChainService: Initializing...");
|
|
791
600
|
const result = init({
|
|
792
|
-
|
|
601
|
+
context,
|
|
793
602
|
name: "ChainService",
|
|
794
603
|
account
|
|
795
604
|
});
|
|
796
605
|
logger?.log("ChainService: Initialized");
|
|
797
606
|
return result;
|
|
798
607
|
}, "initChainService");
|
|
799
|
-
var initMemoryChainService = /* @__PURE__ */ __name(async ({
|
|
800
|
-
const result = await
|
|
801
|
-
|
|
608
|
+
var initMemoryChainService = /* @__PURE__ */ __name(async ({ context }) => {
|
|
609
|
+
const result = await MemoryChainViewer.create({
|
|
610
|
+
context,
|
|
802
611
|
name: "MemoryChainService"
|
|
803
612
|
});
|
|
804
|
-
|
|
613
|
+
assertEx9(await result.start(), () => "Failed to start MemoryChainService");
|
|
805
614
|
return result;
|
|
806
615
|
}, "initMemoryChainService");
|
|
807
616
|
var init = /* @__PURE__ */ __name(async (params) => {
|
|
808
617
|
if (chainStakeServiceSingleton2) return chainStakeServiceSingleton2;
|
|
809
|
-
const { config } = params;
|
|
618
|
+
const { config } = params.context;
|
|
810
619
|
chainStakeServiceSingleton2 = canUseEvmContractChainService(config) ? await initEvmContractChainService({
|
|
811
620
|
...params,
|
|
812
621
|
name: "ChainStakeService"
|
|
@@ -814,16 +623,12 @@ var init = /* @__PURE__ */ __name(async (params) => {
|
|
|
814
623
|
return chainStakeServiceSingleton2;
|
|
815
624
|
}, "init");
|
|
816
625
|
|
|
817
|
-
// src/implementation/head/head.ts
|
|
818
|
-
import { assertEx as assertEx14, isDefined as isDefined10 } from "@xylabs/sdk-js";
|
|
819
|
-
import { findMostRecentBlock as findMostRecentBlock2 } from "@xyo-network/xl1-protocol-sdk";
|
|
820
|
-
|
|
821
626
|
// src/implementation/head/createBootstrapHead.ts
|
|
822
|
-
import { buildNextBlock,
|
|
823
|
-
|
|
824
|
-
|
|
627
|
+
import { buildNextBlock, createGenesisBlock } from "@xyo-network/chain-protocol";
|
|
628
|
+
import { createDeclarationIntent } from "@xyo-network/xl1-protocol-sdk";
|
|
629
|
+
var createBootstrapHead = /* @__PURE__ */ __name(async (account, chainId, genesisBlockRewardAmount, genesisBlockRewardAddress) => {
|
|
825
630
|
const chain = [];
|
|
826
|
-
const genesisBlock = await createGenesisBlock(account, chainId,
|
|
631
|
+
const genesisBlock = await createGenesisBlock(account, chainId, genesisBlockRewardAmount, genesisBlockRewardAddress);
|
|
827
632
|
chain.push(genesisBlock);
|
|
828
633
|
const producerDeclarationPayload = createDeclarationIntent(account.address, "producer", genesisBlock[0].block, genesisBlock[0].block + 1e4);
|
|
829
634
|
const producerDeclarationBlock = await buildNextBlock(genesisBlock[0], [], [
|
|
@@ -835,279 +640,98 @@ var createBootstrapHead = /* @__PURE__ */ __name(async (account, chainService) =
|
|
|
835
640
|
return chain;
|
|
836
641
|
}, "createBootstrapHead");
|
|
837
642
|
|
|
838
|
-
// src/
|
|
839
|
-
import {
|
|
840
|
-
import {
|
|
841
|
-
|
|
842
|
-
|
|
843
|
-
|
|
844
|
-
|
|
845
|
-
|
|
846
|
-
|
|
847
|
-
|
|
848
|
-
|
|
849
|
-
|
|
850
|
-
|
|
851
|
-
}, "getForkBlockReward");
|
|
852
|
-
var getForkBlockRewardHex = /* @__PURE__ */ __name(() => {
|
|
853
|
-
return toHex(getForkBlockReward());
|
|
854
|
-
}, "getForkBlockRewardHex");
|
|
855
|
-
|
|
856
|
-
// src/implementation/head/createForkedHead/config/getBridgeDestinationDetails.ts
|
|
857
|
-
var ethChainId = toHex2("0x1");
|
|
858
|
-
var bridgeableTokenContract = toHex2("0xf72aE3E0DA743033AbD7A407557D684c1aE66aed");
|
|
859
|
-
var bridgeDestAddress = toHex2("0x0e65b65B10C791942665030402c35023d88B14dA");
|
|
860
|
-
var destConfirmation = toHex2("0x950861b10523b52cdbb4a9ee52ed26601db555d2652bfec21c709e5e70d5b7d3");
|
|
861
|
-
var getBridgeDestChainId = /* @__PURE__ */ __name(() => ethChainId, "getBridgeDestChainId");
|
|
862
|
-
var getBridgeDestToken = /* @__PURE__ */ __name(() => bridgeableTokenContract, "getBridgeDestToken");
|
|
863
|
-
var getBridgeDestAddress = /* @__PURE__ */ __name(() => bridgeDestAddress, "getBridgeDestAddress");
|
|
864
|
-
var getBridgeDestAmount = /* @__PURE__ */ __name(() => getForkBlockRewardHex(), "getBridgeDestAmount");
|
|
865
|
-
var getBridgeDestConfirmation = /* @__PURE__ */ __name(() => destConfirmation, "getBridgeDestConfirmation");
|
|
866
|
-
var getBridgeDestinationDetails = /* @__PURE__ */ __name(() => {
|
|
867
|
-
return {
|
|
868
|
-
dest: getBridgeDestChainId(),
|
|
869
|
-
destToken: getBridgeDestToken(),
|
|
870
|
-
destAddress: getBridgeDestAddress(),
|
|
871
|
-
destAmount: getBridgeDestAmount()
|
|
872
|
-
};
|
|
873
|
-
}, "getBridgeDestinationDetails");
|
|
874
|
-
|
|
875
|
-
// src/implementation/head/createForkedHead/config/getBridgeSourceDetails.ts
|
|
876
|
-
var getBridgeSrcChainId = /* @__PURE__ */ __name((chainService) => chainService.chainId(), "getBridgeSrcChainId");
|
|
877
|
-
var getBridgeSrcAddress = /* @__PURE__ */ __name((account) => account.address, "getBridgeSrcAddress");
|
|
878
|
-
var getBridgeSrcToken = /* @__PURE__ */ __name((chainService) => chainService.chainId(), "getBridgeSrcToken");
|
|
879
|
-
var getBridgeSrcAmount = /* @__PURE__ */ __name(() => getForkBlockRewardHex(), "getBridgeSrcAmount");
|
|
880
|
-
var getBridgeSourceDetails = /* @__PURE__ */ __name(async (account, chainService) => {
|
|
881
|
-
return {
|
|
882
|
-
src: await getBridgeSrcChainId(chainService),
|
|
883
|
-
srcAddress: getBridgeSrcAddress(account),
|
|
884
|
-
srcToken: await getBridgeSrcToken(chainService),
|
|
885
|
-
srcAmount: getBridgeSrcAmount()
|
|
886
|
-
};
|
|
887
|
-
}, "getBridgeSourceDetails");
|
|
888
|
-
|
|
889
|
-
// src/implementation/head/createForkedHead/getBridgeDestinationObservation.ts
|
|
890
|
-
var getBridgeDestinationObservation = /* @__PURE__ */ __name(async (previousBlock, account, chainService) => {
|
|
891
|
-
const bridgeDestinationObservationFields = {
|
|
892
|
-
...await getBridgeSourceDetails(account, chainService),
|
|
893
|
-
...getBridgeDestinationDetails(),
|
|
894
|
-
destConfirmation: getBridgeDestConfirmation()
|
|
895
|
-
};
|
|
896
|
-
const bridgeDestinationObservation = new PayloadBuilder3({
|
|
897
|
-
schema: BridgeDestinationObservationSchema
|
|
898
|
-
}).fields(bridgeDestinationObservationFields).build();
|
|
899
|
-
return await buildNextBlock2(previousBlock[0], [], [
|
|
900
|
-
bridgeDestinationObservation
|
|
901
|
-
], [
|
|
902
|
-
account
|
|
903
|
-
]);
|
|
904
|
-
}, "getBridgeDestinationObservation");
|
|
905
|
-
|
|
906
|
-
// src/implementation/head/createForkedHead/getBridgeIntent.ts
|
|
907
|
-
import { buildNextBlock as buildNextBlock3, createTransferPayload } from "@xyo-network/chain-protocol";
|
|
908
|
-
import { PayloadBuilder as PayloadBuilder4 } from "@xyo-network/payload-builder";
|
|
909
|
-
import { BridgeIntentSchema, XYO_BRIDGE_ADDRESS } from "@xyo-network/xl1-protocol";
|
|
910
|
-
var getBridgeIntent = /* @__PURE__ */ __name(async (previousBlock, account, chainService) => {
|
|
911
|
-
const transferPayload = createTransferPayload(account.address, {
|
|
912
|
-
[XYO_BRIDGE_ADDRESS]: getForkBlockReward()
|
|
913
|
-
});
|
|
914
|
-
const nonce = `${Date.now()}`;
|
|
915
|
-
const bridgeIntentFields = {
|
|
916
|
-
...await getBridgeSourceDetails(account, chainService),
|
|
917
|
-
...getBridgeDestinationDetails(),
|
|
918
|
-
nonce
|
|
919
|
-
};
|
|
920
|
-
const bridgeIntent = new PayloadBuilder4({
|
|
921
|
-
schema: BridgeIntentSchema
|
|
922
|
-
}).fields(bridgeIntentFields).build();
|
|
923
|
-
return await buildNextBlock3(previousBlock[0], [], [
|
|
924
|
-
bridgeIntent,
|
|
925
|
-
transferPayload
|
|
926
|
-
], [
|
|
927
|
-
account
|
|
928
|
-
]);
|
|
929
|
-
}, "getBridgeIntent");
|
|
930
|
-
|
|
931
|
-
// src/implementation/head/createForkedHead/getBridgeSourceObservation.ts
|
|
932
|
-
import { buildNextBlock as buildNextBlock4 } from "@xyo-network/chain-protocol";
|
|
933
|
-
import { PayloadBuilder as PayloadBuilder5 } from "@xyo-network/payload-builder";
|
|
934
|
-
import { BridgeSourceObservationSchema } from "@xyo-network/xl1-protocol";
|
|
935
|
-
var getBridgeSourceObservation = /* @__PURE__ */ __name(async (previousBlock, account, chainService) => {
|
|
936
|
-
const srcTxHash = previousBlock[0]._hash;
|
|
937
|
-
const bridgeSourceObservationFields = {
|
|
938
|
-
...await getBridgeSourceDetails(account, chainService),
|
|
939
|
-
...getBridgeDestinationDetails(),
|
|
940
|
-
// Observation
|
|
941
|
-
srcConfirmation: srcTxHash
|
|
942
|
-
};
|
|
943
|
-
const bridgeSourceObservation = new PayloadBuilder5({
|
|
944
|
-
schema: BridgeSourceObservationSchema
|
|
945
|
-
}).fields(bridgeSourceObservationFields).build();
|
|
946
|
-
return await buildNextBlock4(previousBlock[0], [], [
|
|
947
|
-
bridgeSourceObservation
|
|
948
|
-
], [
|
|
949
|
-
account
|
|
950
|
-
]);
|
|
951
|
-
}, "getBridgeSourceObservation");
|
|
952
|
-
|
|
953
|
-
// src/implementation/head/createForkedHead/getFirstBlockForNewChain.ts
|
|
954
|
-
import { buildBlock } from "@xyo-network/chain-protocol";
|
|
955
|
-
import { AttoXL1, XYO_STEP_REWARD_ADDRESS } from "@xyo-network/xl1-protocol";
|
|
956
|
-
var getFirstBlockForNewChain = /* @__PURE__ */ __name(async (forkBlock, account, chainService) => {
|
|
957
|
-
const { _hash: previousBlockHash, block: previousBlockNumber, step_hashes: previousStepHashes = [], protocol } = forkBlock;
|
|
958
|
-
const chainId = await chainService.chainId();
|
|
959
|
-
const options = {
|
|
960
|
-
blockPayloads: [],
|
|
961
|
-
chainId,
|
|
962
|
-
previousBlockHash,
|
|
963
|
-
previousBlockNumber,
|
|
964
|
-
previousStepHashes,
|
|
965
|
-
signers: [
|
|
966
|
-
account
|
|
967
|
-
],
|
|
968
|
-
txs: [],
|
|
969
|
-
protocol,
|
|
970
|
-
chainStepRewardAddress: XYO_STEP_REWARD_ADDRESS,
|
|
971
|
-
stepRewardPoolBalance: AttoXL1(0n)
|
|
972
|
-
};
|
|
973
|
-
return await buildBlock(options);
|
|
974
|
-
}, "getFirstBlockForNewChain");
|
|
975
|
-
|
|
976
|
-
// src/implementation/head/createForkedHead/createForkedHead.ts
|
|
977
|
-
var createForkedHead = /* @__PURE__ */ __name(async (forkFromBlock, account, chainService) => {
|
|
978
|
-
const chain = [];
|
|
979
|
-
const firstBlockForNewChain = await getFirstBlockForNewChain(forkFromBlock, account, chainService);
|
|
980
|
-
chain.push(firstBlockForNewChain);
|
|
981
|
-
const bridgeIntent = await getBridgeIntent(firstBlockForNewChain, account, chainService);
|
|
982
|
-
chain.push(bridgeIntent);
|
|
983
|
-
const bridgeSourceObservation = await getBridgeSourceObservation(bridgeIntent, account, chainService);
|
|
984
|
-
chain.push(bridgeSourceObservation);
|
|
985
|
-
const bridgeDestinationObservation = await getBridgeDestinationObservation(bridgeSourceObservation, account, chainService);
|
|
986
|
-
chain.push(bridgeDestinationObservation);
|
|
987
|
-
return chain;
|
|
988
|
-
}, "createForkedHead");
|
|
989
|
-
|
|
990
|
-
// src/implementation/head/getForkFromBlock.ts
|
|
991
|
-
import { asHash, hexFromBigInt, isDefined as isDefined9 } from "@xylabs/sdk-js";
|
|
992
|
-
import { isSignedBlockBoundWitnessWithHashMeta } from "@xyo-network/xl1-protocol";
|
|
993
|
-
var getForkFromBlock = /* @__PURE__ */ __name(async (head, chainService, chainArchivist) => {
|
|
994
|
-
if (head.chain !== await chainService.chainId()) {
|
|
995
|
-
const forkedAtBigInt = await chainService.forkedAtHash();
|
|
996
|
-
const forkedAtHex = hexFromBigInt(forkedAtBigInt);
|
|
997
|
-
const forkedAtHash = asHash(forkedAtHex);
|
|
998
|
-
if (isDefined9(forkedAtHash)) {
|
|
999
|
-
const [forkedAtBlock] = await chainArchivist.get([
|
|
1000
|
-
forkedAtHash
|
|
1001
|
-
]);
|
|
1002
|
-
const forkedChainId = await chainService.forkedChainId();
|
|
1003
|
-
const forkedAtBlockNumber = Number(await chainService.forkedAtBlockNumber());
|
|
1004
|
-
if (isSignedBlockBoundWitnessWithHashMeta(forkedAtBlock) && forkedAtBlock.chain === forkedChainId && forkedAtBlock.block === forkedAtBlockNumber) {
|
|
1005
|
-
return forkedAtBlock;
|
|
1006
|
-
}
|
|
1007
|
-
}
|
|
643
|
+
// src/NetworkStakeStepReward/BaseNetworkStakeStepRewardService.ts
|
|
644
|
+
import { creatable as creatable5 } from "@xylabs/sdk-js";
|
|
645
|
+
import { NetworkStakeStepRewardViewerMoniker } from "@xyo-network/xl1-protocol-sdk";
|
|
646
|
+
function _ts_decorate5(decorators, target, key, desc) {
|
|
647
|
+
var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
|
|
648
|
+
if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
|
|
649
|
+
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;
|
|
650
|
+
return c > 3 && r && Object.defineProperty(target, key, r), r;
|
|
651
|
+
}
|
|
652
|
+
__name(_ts_decorate5, "_ts_decorate");
|
|
653
|
+
var BaseNetworkStakeStepRewardService = class _BaseNetworkStakeStepRewardService extends BaseService {
|
|
654
|
+
static {
|
|
655
|
+
__name(this, "BaseNetworkStakeStepRewardService");
|
|
1008
656
|
}
|
|
1009
|
-
|
|
1010
|
-
|
|
1011
|
-
|
|
1012
|
-
|
|
1013
|
-
|
|
1014
|
-
|
|
1015
|
-
|
|
1016
|
-
const [bw] = block;
|
|
1017
|
-
await chainSubmissionsArchivistWrite.insert(flattenHydratedBlock(block));
|
|
1018
|
-
while (true) {
|
|
1019
|
-
const result = await chainArchivist.get([
|
|
1020
|
-
bw._hash
|
|
1021
|
-
]);
|
|
1022
|
-
if (result.length > 0) break;
|
|
1023
|
-
await delay(1e3);
|
|
1024
|
-
}
|
|
657
|
+
static defaultMoniker = NetworkStakeStepRewardViewerMoniker;
|
|
658
|
+
static monikers = [
|
|
659
|
+
NetworkStakeStepRewardViewerMoniker
|
|
660
|
+
];
|
|
661
|
+
moniker = _BaseNetworkStakeStepRewardService.defaultMoniker;
|
|
662
|
+
networkStakeStepRewardAddressHistory(_address) {
|
|
663
|
+
throw new Error("Method [networkStakeStepRewardAddressHistory] not implemented.");
|
|
1025
664
|
}
|
|
1026
|
-
|
|
1027
|
-
|
|
1028
|
-
// src/implementation/head/head.ts
|
|
1029
|
-
var headSingleton;
|
|
1030
|
-
var initHead = /* @__PURE__ */ __name(async (params) => {
|
|
1031
|
-
const { account, chainArchivist, chainSubmissionsArchivistWrite, chainService } = params;
|
|
1032
|
-
if (headSingleton) return headSingleton;
|
|
1033
|
-
let head = await findMostRecentBlock2(chainArchivist);
|
|
1034
|
-
if (head) {
|
|
1035
|
-
const forkFromBlock = await getForkFromBlock(head, chainService, chainArchivist);
|
|
1036
|
-
if (isDefined10(forkFromBlock)) {
|
|
1037
|
-
const chain = await createForkedHead(forkFromBlock, account, chainService);
|
|
1038
|
-
await submitNewChain(chain, chainArchivist, chainSubmissionsArchivistWrite);
|
|
1039
|
-
const newBlock = assertEx14(chain.at(-1), () => new Error("Failed to get new head after forking"));
|
|
1040
|
-
head = newBlock[0];
|
|
1041
|
-
}
|
|
1042
|
-
} else {
|
|
1043
|
-
const chain = await createBootstrapHead(account, chainService);
|
|
1044
|
-
await submitNewChain(chain, chainArchivist, chainSubmissionsArchivistWrite);
|
|
1045
|
-
const newBlock = assertEx14(chain.at(-1), () => new Error("Failed to get new head after genesis"));
|
|
1046
|
-
head = newBlock[0];
|
|
1047
|
-
}
|
|
1048
|
-
headSingleton = head;
|
|
1049
|
-
return headSingleton;
|
|
1050
|
-
}, "initHead");
|
|
1051
|
-
|
|
1052
|
-
// src/implementation/mempoolRunner.ts
|
|
1053
|
-
import { isDefined as isDefined11 } from "@xylabs/sdk-js";
|
|
1054
|
-
import { HttpRpcTransport as HttpRpcTransport3, JsonRpcMempoolRunner, MempoolRunnerRpcSchemas } from "@xyo-network/xl1-rpc";
|
|
1055
|
-
var mempoolRunnerSingleton;
|
|
1056
|
-
var initMempoolRunner = /* @__PURE__ */ __name((params) => {
|
|
1057
|
-
const { config, logger } = params;
|
|
1058
|
-
if (mempoolRunnerSingleton) return mempoolRunnerSingleton;
|
|
1059
|
-
const endpoint = config.services?.apiEndpoint;
|
|
1060
|
-
if (isDefined11(endpoint)) {
|
|
1061
|
-
const transport = new HttpRpcTransport3(endpoint, {
|
|
1062
|
-
...MempoolRunnerRpcSchemas
|
|
1063
|
-
});
|
|
1064
|
-
const runner = new JsonRpcMempoolRunner(transport);
|
|
1065
|
-
logger?.log("Using mempoolRunner RPC service at", endpoint);
|
|
1066
|
-
return runner;
|
|
1067
|
-
} else {
|
|
1068
|
-
throw new Error("No MempoolRunner endpoint configured");
|
|
665
|
+
networkStakeStepRewardAddressReward(_context, _address) {
|
|
666
|
+
throw new Error("Method [networkStakeStepRewardAddressReward] not implemented.");
|
|
1069
667
|
}
|
|
1070
|
-
|
|
1071
|
-
|
|
1072
|
-
// src/implementation/mempoolViewer.ts
|
|
1073
|
-
import { isDefined as isDefined12 } from "@xylabs/sdk-js";
|
|
1074
|
-
import { HttpRpcTransport as HttpRpcTransport4, JsonRpcMempoolViewer, MempoolViewerRpcSchemas } from "@xyo-network/xl1-rpc";
|
|
1075
|
-
var mempoolViewerSingleton;
|
|
1076
|
-
var initMempoolViewer = /* @__PURE__ */ __name((params) => {
|
|
1077
|
-
const { config, logger } = params;
|
|
1078
|
-
if (mempoolViewerSingleton) return mempoolViewerSingleton;
|
|
1079
|
-
const endpoint = config.services?.apiEndpoint;
|
|
1080
|
-
if (isDefined12(endpoint)) {
|
|
1081
|
-
const transport = new HttpRpcTransport4(endpoint, {
|
|
1082
|
-
...MempoolViewerRpcSchemas
|
|
1083
|
-
});
|
|
1084
|
-
const viewer = new JsonRpcMempoolViewer(transport);
|
|
1085
|
-
logger?.log("Using MempoolViewer RPC service at", endpoint);
|
|
1086
|
-
return viewer;
|
|
1087
|
-
} else {
|
|
1088
|
-
throw new Error("No MempoolViewer endpoint configured");
|
|
668
|
+
networkStakeStepRewardAddressShare(_context, _address) {
|
|
669
|
+
throw new Error("Method [networkStakeStepRewardAddressShare] not implemented.");
|
|
1089
670
|
}
|
|
1090
|
-
|
|
1091
|
-
|
|
1092
|
-
|
|
1093
|
-
|
|
1094
|
-
|
|
1095
|
-
|
|
671
|
+
networkStakeStepRewardClaimedByAddress(_address) {
|
|
672
|
+
throw new Error("Method [networkStakeStepRewardClaimedByAddress] not implemented.");
|
|
673
|
+
}
|
|
674
|
+
networkStakeStepRewardForPosition(_position, _range) {
|
|
675
|
+
throw new Error("Method [networkStakeStepRewardForPosition] not implemented.");
|
|
676
|
+
}
|
|
677
|
+
networkStakeStepRewardForStep(_context) {
|
|
678
|
+
throw new Error("Method [networkStakeStepRewardForStep] not implemented.");
|
|
679
|
+
}
|
|
680
|
+
networkStakeStepRewardForStepForPosition(_context, _position) {
|
|
681
|
+
throw new Error("Method [networkStakeStepRewardForStepForPosition] not implemented.");
|
|
682
|
+
}
|
|
683
|
+
networkStakeStepRewardPoolRewards(_context) {
|
|
684
|
+
throw new Error("Method [networkStakeStepRewardPoolRewards] not implemented.");
|
|
685
|
+
}
|
|
686
|
+
networkStakeStepRewardPoolShares(_context) {
|
|
687
|
+
throw new Error("Method [networkStakeStepRewardPoolShares] not implemented.");
|
|
688
|
+
}
|
|
689
|
+
networkStakeStepRewardPositionWeight(_context, _position) {
|
|
690
|
+
throw new Error("Method [networkStakeStepRewardPositionWeight] not implemented.");
|
|
691
|
+
}
|
|
692
|
+
networkStakeStepRewardPotentialPositionLoss(_context, _position) {
|
|
693
|
+
throw new Error("Method [networkStakeStepRewardPotentialPositionLoss] not implemented.");
|
|
694
|
+
}
|
|
695
|
+
networkStakeStepRewardRandomizer(_context) {
|
|
696
|
+
throw new Error("Method [networkStakeStepRewardRandomizer] not implemented.");
|
|
697
|
+
}
|
|
698
|
+
networkStakeStepRewardStakerCount(_context) {
|
|
699
|
+
throw new Error("Method [networkStakeStepRewardStakerCount] not implemented.");
|
|
700
|
+
}
|
|
701
|
+
networkStakeStepRewardUnclaimedByAddress(_address) {
|
|
702
|
+
throw new Error("Method [networkStakeStepRewardUnclaimedByAddress] not implemented.");
|
|
703
|
+
}
|
|
704
|
+
networkStakeStepRewardWeightForAddress(_context, _address) {
|
|
705
|
+
throw new Error("Method [networkStakeStepRewardWeightForAddress] not implemented.");
|
|
706
|
+
}
|
|
707
|
+
networkStakeStepRewardsForPosition(_position, _range) {
|
|
708
|
+
throw new Error("Method [networkStakeStepRewardsForPosition] not implemented.");
|
|
709
|
+
}
|
|
710
|
+
networkStakeStepRewardsForRange(_range) {
|
|
711
|
+
throw new Error("Method [networkStakeStepRewardsForRange] not implemented.");
|
|
712
|
+
}
|
|
713
|
+
networkStakeStepRewardsForStepLevel(_stepLevel, _range) {
|
|
714
|
+
throw new Error("Method [networkStakeStepRewardsForStepLevel] not implemented.");
|
|
715
|
+
}
|
|
716
|
+
};
|
|
717
|
+
BaseNetworkStakeStepRewardService = _ts_decorate5([
|
|
718
|
+
creatable5()
|
|
719
|
+
], BaseNetworkStakeStepRewardService);
|
|
1096
720
|
|
|
1097
721
|
// src/PendingTransactions/BasePendingTransactions.ts
|
|
1098
722
|
import { ValueType } from "@opentelemetry/api";
|
|
1099
|
-
import { assertEx as
|
|
723
|
+
import { assertEx as assertEx10, creatable as creatable6, exists, filterAs, filterAsync, forget, isDefined as isDefined6, isUndefined } from "@xylabs/sdk-js";
|
|
1100
724
|
import { MemoryArchivist } from "@xyo-network/archivist-memory";
|
|
1101
|
-
import { asBlockBoundWitnessWithHashMeta, asXL1BlockNumber
|
|
1102
|
-
import { findMostRecentBlock as
|
|
725
|
+
import { asBlockBoundWitnessWithHashMeta, asXL1BlockNumber, isTransactionBoundWitnessWithStorageMeta } from "@xyo-network/xl1-protocol";
|
|
726
|
+
import { findMostRecentBlock as findMostRecentBlock2, MempoolViewerMoniker } from "@xyo-network/xl1-protocol-sdk";
|
|
1103
727
|
import { TransactionJsonSchemaValidator, validateTransaction } from "@xyo-network/xl1-validation";
|
|
1104
728
|
import { Mutex as Mutex2 } from "async-mutex";
|
|
1105
729
|
|
|
1106
730
|
// src/PendingTransactions/bundledPayloadToHydratedTransaction.ts
|
|
1107
|
-
import { PayloadBuilder as
|
|
731
|
+
import { PayloadBuilder as PayloadBuilder2 } from "@xyo-network/payload-builder";
|
|
1108
732
|
import { asSignedTransactionBoundWitnessWithHashMeta } from "@xyo-network/xl1-protocol";
|
|
1109
733
|
var bundledPayloadToHydratedTransaction = /* @__PURE__ */ __name(async (payload) => {
|
|
1110
|
-
const withHashMeta = await
|
|
734
|
+
const withHashMeta = await PayloadBuilder2.addHashMeta(payload.payloads);
|
|
1111
735
|
const tx = asSignedTransactionBoundWitnessWithHashMeta(withHashMeta.find((p) => p._hash === payload.root));
|
|
1112
736
|
if (tx) {
|
|
1113
737
|
return [
|
|
@@ -1118,7 +742,7 @@ var bundledPayloadToHydratedTransaction = /* @__PURE__ */ __name(async (payload)
|
|
|
1118
742
|
}, "bundledPayloadToHydratedTransaction");
|
|
1119
743
|
|
|
1120
744
|
// src/PendingTransactions/hydratedTransactionToPayloadBundle.ts
|
|
1121
|
-
import { PayloadBuilder as
|
|
745
|
+
import { PayloadBuilder as PayloadBuilder3 } from "@xyo-network/payload-builder";
|
|
1122
746
|
import { PayloadBundleSchema } from "@xyo-network/payload-model";
|
|
1123
747
|
import { flattenHydratedTransaction } from "@xyo-network/xl1-protocol-sdk";
|
|
1124
748
|
var hydratedTransactionToPayloadBundle = /* @__PURE__ */ __name((transaction) => {
|
|
@@ -1126,8 +750,8 @@ var hydratedTransactionToPayloadBundle = /* @__PURE__ */ __name((transaction) =>
|
|
|
1126
750
|
return bundle(root, transaction);
|
|
1127
751
|
}, "hydratedTransactionToPayloadBundle");
|
|
1128
752
|
var bundle = /* @__PURE__ */ __name((root, transaction) => {
|
|
1129
|
-
const payloads = flattenHydratedTransaction(transaction).flatMap((p) =>
|
|
1130
|
-
return new
|
|
753
|
+
const payloads = flattenHydratedTransaction(transaction).flatMap((p) => PayloadBuilder3.omitStorageMeta(p));
|
|
754
|
+
return new PayloadBuilder3({
|
|
1131
755
|
schema: PayloadBundleSchema
|
|
1132
756
|
}).fields({
|
|
1133
757
|
payloads,
|
|
@@ -1136,13 +760,13 @@ var bundle = /* @__PURE__ */ __name((root, transaction) => {
|
|
|
1136
760
|
}, "bundle");
|
|
1137
761
|
|
|
1138
762
|
// src/PendingTransactions/BasePendingTransactions.ts
|
|
1139
|
-
function
|
|
763
|
+
function _ts_decorate6(decorators, target, key, desc) {
|
|
1140
764
|
var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
|
|
1141
765
|
if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
|
|
1142
766
|
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;
|
|
1143
767
|
return c > 3 && r && Object.defineProperty(target, key, r), r;
|
|
1144
768
|
}
|
|
1145
|
-
__name(
|
|
769
|
+
__name(_ts_decorate6, "_ts_decorate");
|
|
1146
770
|
var BasePendingTransactionsService = class _BasePendingTransactionsService extends BaseService {
|
|
1147
771
|
static {
|
|
1148
772
|
__name(this, "BasePendingTransactionsService");
|
|
@@ -1195,23 +819,20 @@ var BasePendingTransactionsService = class _BasePendingTransactionsService exten
|
|
|
1195
819
|
return this.params.additionalPendingTransactionValidators ?? [];
|
|
1196
820
|
}
|
|
1197
821
|
get chainArchivist() {
|
|
1198
|
-
return
|
|
1199
|
-
}
|
|
1200
|
-
get chainId() {
|
|
1201
|
-
return assertEx15(this.params.chainId, () => "No chain id");
|
|
822
|
+
return assertEx10(this.params.chainArchivist, () => "No completed blocks with data archivist");
|
|
1202
823
|
}
|
|
1203
824
|
get pendingBundledTransactionsArchivist() {
|
|
1204
|
-
return
|
|
825
|
+
return assertEx10(this.params.pendingBundledTransactionsArchivist, () => "No pending bundled transactions archivist");
|
|
1205
826
|
}
|
|
1206
827
|
get pendingBundledTransactionsLocalArchivist() {
|
|
1207
|
-
return
|
|
828
|
+
return assertEx10(this._curatedPendingBundledTransactionsArchivist, () => "No pending bundled transactions curated archivist");
|
|
1208
829
|
}
|
|
1209
830
|
get pendingTransactionsCount() {
|
|
1210
831
|
forget(this.countPendingTransactions());
|
|
1211
832
|
return this._pendingTransactionsCount;
|
|
1212
833
|
}
|
|
1213
834
|
get rejectedTransactionsArchivist() {
|
|
1214
|
-
return
|
|
835
|
+
return assertEx10(this.params.rejectedTransactionsArchivist, () => "No rejected transactions archivist");
|
|
1215
836
|
}
|
|
1216
837
|
async createHandler() {
|
|
1217
838
|
await super.createHandler();
|
|
@@ -1247,7 +868,7 @@ var BasePendingTransactionsService = class _BasePendingTransactionsService exten
|
|
|
1247
868
|
let lastHead = filterAs(await this.chainArchivist.next({
|
|
1248
869
|
limit: 100
|
|
1249
870
|
}), (x) => asBlockBoundWitnessWithHashMeta(x)).at(-1);
|
|
1250
|
-
if (
|
|
871
|
+
if (isUndefined(lastHead)) return [];
|
|
1251
872
|
await this.pruneCuratedPendingTransactionsArchivist(lastHead._hash);
|
|
1252
873
|
const foundPendingTransactions = [];
|
|
1253
874
|
let cursor;
|
|
@@ -1261,11 +882,11 @@ var BasePendingTransactionsService = class _BasePendingTransactionsService exten
|
|
|
1261
882
|
cursor = pendingBundledTransactions.at(-1)?._sequence;
|
|
1262
883
|
const undeletedTransactionBundles = pendingBundledTransactions.filter((tx) => !this._removablePendingTransactionHashes.has(tx.root));
|
|
1263
884
|
const transactions = (await Promise.all(undeletedTransactionBundles.map((p) => bundledPayloadToHydratedTransaction(p)))).filter(exists);
|
|
1264
|
-
const activeTransactions = transactions.filter(isTransactionActive(
|
|
885
|
+
const activeTransactions = transactions.filter(isTransactionActive(asXL1BlockNumber(lastHead.block + 1, true)));
|
|
1265
886
|
const txValidationResults = await Promise.all(activeTransactions.map(async (tx) => [
|
|
1266
887
|
tx,
|
|
1267
888
|
await validateTransaction(tx, {
|
|
1268
|
-
chainId: this.chainId
|
|
889
|
+
chainId: this.params.chainId
|
|
1269
890
|
}, this.additionalPendingTransactionValidators)
|
|
1270
891
|
]));
|
|
1271
892
|
const validTransactions = txValidationResults.filter(([, errors]) => errors.length === 0).map(([tx]) => tx);
|
|
@@ -1290,8 +911,8 @@ var BasePendingTransactionsService = class _BasePendingTransactionsService exten
|
|
|
1290
911
|
}
|
|
1291
912
|
async cleanupWorker() {
|
|
1292
913
|
return await this._updateCuratedPendingTransactionsArchivistMutex.runExclusive(async () => {
|
|
1293
|
-
const lastHead = await
|
|
1294
|
-
if (
|
|
914
|
+
const lastHead = await findMostRecentBlock2(this.chainArchivist);
|
|
915
|
+
if (isDefined6(lastHead)) await this.pruneCuratedPendingTransactionsArchivist(lastHead._hash);
|
|
1295
916
|
}, _BasePendingTransactionsService.MutexPriority.PurgeTransactions);
|
|
1296
917
|
}
|
|
1297
918
|
async countPendingTransactions() {
|
|
@@ -1318,7 +939,7 @@ var BasePendingTransactionsService = class _BasePendingTransactionsService exten
|
|
|
1318
939
|
}))).filter(exists);
|
|
1319
940
|
const validTransactions = await filterAsync(hydratedUnprocessedTransactions, async (tx) => {
|
|
1320
941
|
const errors = await validateTransaction(tx, {
|
|
1321
|
-
chainId: this.chainId
|
|
942
|
+
chainId: this.params.chainId
|
|
1322
943
|
}, [
|
|
1323
944
|
TransactionJsonSchemaValidator
|
|
1324
945
|
]);
|
|
@@ -1353,7 +974,7 @@ var BasePendingTransactionsService = class _BasePendingTransactionsService exten
|
|
|
1353
974
|
let [lastHead] = filterAs(await this.chainArchivist.get([
|
|
1354
975
|
head
|
|
1355
976
|
]), (x) => asBlockBoundWitnessWithHashMeta(x));
|
|
1356
|
-
while (
|
|
977
|
+
while (isDefined6(lastHead)) {
|
|
1357
978
|
const pendingBundledTransactions = await this.pendingBundledTransactionsLocalArchivist.next({
|
|
1358
979
|
limit: 100,
|
|
1359
980
|
order: "asc",
|
|
@@ -1367,7 +988,7 @@ var BasePendingTransactionsService = class _BasePendingTransactionsService exten
|
|
|
1367
988
|
foundPendingTransactionsToDeleteHashes.push(...deletedTransactionBundles.map((tx) => tx._hash).filter(exists));
|
|
1368
989
|
const undeletedTransactionBundles = pendingBundledTransactions.filter((tx) => !this._removablePendingTransactionHashes.has(tx.root));
|
|
1369
990
|
const transactions = (await Promise.all(undeletedTransactionBundles.map((p) => bundledPayloadToHydratedTransaction(p)))).filter(exists);
|
|
1370
|
-
const expiredTransactions = transactions.filter(isTransactionExpired(
|
|
991
|
+
const expiredTransactions = transactions.filter(isTransactionExpired(asXL1BlockNumber(lastHead.block + 1, true)));
|
|
1371
992
|
const expiredBundleHashes = expiredTransactions.map((expiredHydratedTx) => (
|
|
1372
993
|
// Find the corresponding payload bundle hash for the expired transaction
|
|
1373
994
|
pendingBundledTransactions.find((bundledTx) => bundledTx.root === expiredHydratedTx[0]._hash)?._hash
|
|
@@ -1387,56 +1008,68 @@ var BasePendingTransactionsService = class _BasePendingTransactionsService exten
|
|
|
1387
1008
|
});
|
|
1388
1009
|
}
|
|
1389
1010
|
};
|
|
1390
|
-
BasePendingTransactionsService =
|
|
1391
|
-
|
|
1011
|
+
BasePendingTransactionsService = _ts_decorate6([
|
|
1012
|
+
creatable6()
|
|
1392
1013
|
], BasePendingTransactionsService);
|
|
1393
1014
|
var isTransactionExpired = /* @__PURE__ */ __name((block) => ([txBw]) => txBw.exp < block, "isTransactionExpired");
|
|
1394
1015
|
var isTransactionActive = /* @__PURE__ */ __name((block) => ([txBw]) => txBw.nbf <= block && txBw.exp >= block, "isTransactionActive");
|
|
1395
1016
|
|
|
1396
|
-
// src/
|
|
1397
|
-
|
|
1398
|
-
|
|
1399
|
-
|
|
1400
|
-
|
|
1401
|
-
|
|
1402
|
-
|
|
1403
|
-
|
|
1404
|
-
|
|
1405
|
-
|
|
1406
|
-
|
|
1407
|
-
|
|
1408
|
-
|
|
1409
|
-
|
|
1410
|
-
|
|
1411
|
-
|
|
1412
|
-
|
|
1413
|
-
|
|
1414
|
-
}
|
|
1415
|
-
|
|
1416
|
-
|
|
1417
|
-
|
|
1017
|
+
// src/Schemas/BaseSchemasService.ts
|
|
1018
|
+
import { creatable as creatable7, spanRootAsync } from "@xylabs/sdk-js";
|
|
1019
|
+
import { schemasSummary } from "@xyo-network/xl1-protocol-sdk";
|
|
1020
|
+
function _ts_decorate7(decorators, target, key, desc) {
|
|
1021
|
+
var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
|
|
1022
|
+
if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
|
|
1023
|
+
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;
|
|
1024
|
+
return c > 3 && r && Object.defineProperty(target, key, r), r;
|
|
1025
|
+
}
|
|
1026
|
+
__name(_ts_decorate7, "_ts_decorate");
|
|
1027
|
+
var BaseSchemasService = class extends BaseService {
|
|
1028
|
+
static {
|
|
1029
|
+
__name(this, "BaseSchemasService");
|
|
1030
|
+
}
|
|
1031
|
+
async schema(head, schema) {
|
|
1032
|
+
return (await this.schemas(head, [
|
|
1033
|
+
schema
|
|
1034
|
+
]))[schema] ?? 0;
|
|
1035
|
+
}
|
|
1036
|
+
async schemas(head, schemas) {
|
|
1037
|
+
return await spanRootAsync("transfers", async () => {
|
|
1038
|
+
const [summary] = await schemasSummary(this.params.schemasStepSummaryContext);
|
|
1039
|
+
const result = {};
|
|
1040
|
+
for (const schema of schemas) {
|
|
1041
|
+
const count = summary[schema] ?? 0;
|
|
1042
|
+
result[schema] = count;
|
|
1043
|
+
}
|
|
1044
|
+
return result;
|
|
1045
|
+
});
|
|
1046
|
+
}
|
|
1047
|
+
};
|
|
1048
|
+
BaseSchemasService = _ts_decorate7([
|
|
1049
|
+
creatable7()
|
|
1050
|
+
], BaseSchemasService);
|
|
1418
1051
|
|
|
1419
1052
|
// src/simple/block/runner/SimpleBlockRunner.ts
|
|
1420
|
-
import {
|
|
1053
|
+
import { assertEx as assertEx12, exists as exists2, hexToBigInt, isDefined as isDefined7 } from "@xylabs/sdk-js";
|
|
1421
1054
|
import { MemoryArchivist as MemoryArchivist2 } from "@xyo-network/archivist-memory";
|
|
1422
1055
|
import { FixedPercentageBlockRewardDiviner, FixedPercentageBlockRewardDivinerConfigSchema } from "@xyo-network/chain-modules";
|
|
1423
|
-
import { buildNextBlock as
|
|
1424
|
-
import { PayloadBuilder as
|
|
1425
|
-
import { asBlockBoundWitness
|
|
1426
|
-
import
|
|
1056
|
+
import { buildNextBlock as buildNextBlock2 } from "@xyo-network/chain-protocol";
|
|
1057
|
+
import { PayloadBuilder as PayloadBuilder5 } from "@xyo-network/payload-builder";
|
|
1058
|
+
import { asBlockBoundWitness, AttoXL1, BlockNumberSchema, defaultRewardRatio, XYO_STEP_REWARD_ADDRESS } from "@xyo-network/xl1-protocol";
|
|
1059
|
+
import { AbstractCreatableProvider as AbstractCreatableProvider2, AccountBalanceViewerMoniker, BlockRewardViewerMoniker as BlockRewardViewerMoniker2, BlockRunnerMoniker, BlockValidationViewerMoniker, creatableProvider, createDeclarationIntent as createDeclarationIntent2, MempoolRunnerMoniker, MempoolViewerMoniker as MempoolViewerMoniker2, TimeSyncViewerMoniker } from "@xyo-network/xl1-protocol-sdk";
|
|
1427
1060
|
|
|
1428
1061
|
// src/simple/block/runner/generateTransactionFeeTransfers.ts
|
|
1429
|
-
import { hexFromBigInt
|
|
1430
|
-
import { assertEx as
|
|
1431
|
-
import { PayloadBuilder as
|
|
1062
|
+
import { hexFromBigInt } from "@xylabs/sdk-js";
|
|
1063
|
+
import { assertEx as assertEx11 } from "@xylabs/sdk-js";
|
|
1064
|
+
import { PayloadBuilder as PayloadBuilder4 } from "@xyo-network/payload-builder";
|
|
1432
1065
|
import { TransferSchema, XYO_ZERO_ADDRESS } from "@xyo-network/xl1-protocol";
|
|
1433
1066
|
import { transactionRequiredGas } from "@xyo-network/xl1-protocol-sdk";
|
|
1434
1067
|
import { HydratedTransactionWrapper } from "@xyo-network/xl1-wrappers";
|
|
1435
1068
|
async function generateTransactionFeeTransfers(address, transactions) {
|
|
1436
1069
|
const txs = await Promise.all(transactions.map(async (tx) => {
|
|
1437
1070
|
return HydratedTransactionWrapper.parse([
|
|
1438
|
-
await
|
|
1439
|
-
await
|
|
1071
|
+
await PayloadBuilder4.addStorageMeta(tx[0]),
|
|
1072
|
+
await PayloadBuilder4.addStorageMeta(tx[1])
|
|
1440
1073
|
]);
|
|
1441
1074
|
}));
|
|
1442
1075
|
const txBaseFeeCosts = {};
|
|
@@ -1456,49 +1089,51 @@ async function generateTransactionFeeTransfers(address, transactions) {
|
|
|
1456
1089
|
from,
|
|
1457
1090
|
transfers: {
|
|
1458
1091
|
// burn the base fee
|
|
1459
|
-
[XYO_ZERO_ADDRESS]:
|
|
1092
|
+
[XYO_ZERO_ADDRESS]: hexFromBigInt(amount)
|
|
1460
1093
|
}
|
|
1461
1094
|
};
|
|
1462
1095
|
return payload;
|
|
1463
1096
|
});
|
|
1464
1097
|
for (const [from, amount] of Object.entries(txGasCosts)) {
|
|
1465
|
-
const fromPayload =
|
|
1466
|
-
fromPayload.transfers[address] =
|
|
1098
|
+
const fromPayload = assertEx11(payloads.find((p) => p.from === from), () => "from payload not found");
|
|
1099
|
+
fromPayload.transfers[address] = hexFromBigInt(amount);
|
|
1467
1100
|
}
|
|
1468
1101
|
return payloads;
|
|
1469
1102
|
}
|
|
1470
1103
|
__name(generateTransactionFeeTransfers, "generateTransactionFeeTransfers");
|
|
1471
1104
|
|
|
1472
1105
|
// src/simple/block/runner/SimpleBlockRunner.ts
|
|
1473
|
-
function
|
|
1106
|
+
function _ts_decorate8(decorators, target, key, desc) {
|
|
1474
1107
|
var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
|
|
1475
1108
|
if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
|
|
1476
1109
|
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;
|
|
1477
1110
|
return c > 3 && r && Object.defineProperty(target, key, r), r;
|
|
1478
1111
|
}
|
|
1479
|
-
__name(
|
|
1112
|
+
__name(_ts_decorate8, "_ts_decorate");
|
|
1480
1113
|
var DEFAULT_BLOCK_SIZE = 10;
|
|
1481
1114
|
var XYO_PRODUCER_REDECLARATION_DURATION = 1e4;
|
|
1482
1115
|
var XYO_PRODUCER_REDECLARATION_WINDOW = 500;
|
|
1483
|
-
var
|
|
1484
|
-
balanceViewer: z.object().loose(),
|
|
1485
|
-
blockRewardViewer: z.object().loose(),
|
|
1486
|
-
chainId: z.string(),
|
|
1487
|
-
config: z.object().loose(),
|
|
1488
|
-
mempoolViewer: z.object().loose(),
|
|
1489
|
-
mempoolRunner: z.object().loose(),
|
|
1490
|
-
rejectedTransactionsArchivist: z.object().loose().optional(),
|
|
1491
|
-
rewardAddress: AddressZod,
|
|
1492
|
-
time: z.object().loose(),
|
|
1493
|
-
validateHydratedBlockState: z.function().optional()
|
|
1494
|
-
});
|
|
1495
|
-
var SimpleBlockRunner = class _SimpleBlockRunner extends AbstractCreatable3 {
|
|
1116
|
+
var SimpleBlockRunner = class _SimpleBlockRunner extends AbstractCreatableProvider2 {
|
|
1496
1117
|
static {
|
|
1497
1118
|
__name(this, "SimpleBlockRunner");
|
|
1498
1119
|
}
|
|
1120
|
+
static defaultMoniker = BlockRunnerMoniker;
|
|
1121
|
+
static monikers = [
|
|
1122
|
+
BlockRunnerMoniker
|
|
1123
|
+
];
|
|
1124
|
+
moniker = _SimpleBlockRunner.defaultMoniker;
|
|
1499
1125
|
_blockRewardDiviner;
|
|
1500
1126
|
_lastRedeclarationBlock;
|
|
1501
1127
|
_rejectedTransactionsArchivist;
|
|
1128
|
+
_account;
|
|
1129
|
+
_accountBalanceViewer;
|
|
1130
|
+
_address;
|
|
1131
|
+
_blockRewardViewer;
|
|
1132
|
+
_blockValidationViewer;
|
|
1133
|
+
_mempoolRunner;
|
|
1134
|
+
_mempoolViewer;
|
|
1135
|
+
_rewardAddress;
|
|
1136
|
+
_timeSyncViewer;
|
|
1502
1137
|
/**
|
|
1503
1138
|
* The default block size for a block
|
|
1504
1139
|
*/
|
|
@@ -1519,29 +1154,29 @@ var SimpleBlockRunner = class _SimpleBlockRunner extends AbstractCreatable3 {
|
|
|
1519
1154
|
static get RedeclarationWindow() {
|
|
1520
1155
|
return XYO_PRODUCER_REDECLARATION_WINDOW;
|
|
1521
1156
|
}
|
|
1522
|
-
get address() {
|
|
1523
|
-
return this.account.address;
|
|
1524
|
-
}
|
|
1525
1157
|
get account() {
|
|
1526
|
-
return
|
|
1158
|
+
return this._account;
|
|
1527
1159
|
}
|
|
1528
|
-
get
|
|
1529
|
-
return
|
|
1160
|
+
get accountBalanceViewer() {
|
|
1161
|
+
return this._accountBalanceViewer;
|
|
1162
|
+
}
|
|
1163
|
+
get address() {
|
|
1164
|
+
return this._address;
|
|
1530
1165
|
}
|
|
1531
1166
|
get blockRewardViewer() {
|
|
1532
|
-
return
|
|
1167
|
+
return this._blockRewardViewer;
|
|
1533
1168
|
}
|
|
1534
|
-
get
|
|
1535
|
-
return
|
|
1169
|
+
get blockValidationViewer() {
|
|
1170
|
+
return this._blockValidationViewer;
|
|
1536
1171
|
}
|
|
1537
1172
|
// protected get electionService() {
|
|
1538
1173
|
// return assertEx(this.params.electionService, () => 'electionService is required')
|
|
1539
1174
|
// }
|
|
1540
1175
|
get mempoolRunner() {
|
|
1541
|
-
return
|
|
1176
|
+
return this._mempoolRunner;
|
|
1542
1177
|
}
|
|
1543
1178
|
get mempoolViewer() {
|
|
1544
|
-
return
|
|
1179
|
+
return this._mempoolViewer;
|
|
1545
1180
|
}
|
|
1546
1181
|
// protected get pendingTransactionsService() {
|
|
1547
1182
|
// return assertEx(this.params.pendingTransactionsService, () => 'Missing pendingTransactionsService')
|
|
@@ -1550,34 +1185,35 @@ var SimpleBlockRunner = class _SimpleBlockRunner extends AbstractCreatable3 {
|
|
|
1550
1185
|
return this._rejectedTransactionsArchivist;
|
|
1551
1186
|
}
|
|
1552
1187
|
get rewardAddress() {
|
|
1553
|
-
return
|
|
1188
|
+
return assertEx12(this.params.rewardAddress, () => "No reward address provided");
|
|
1554
1189
|
}
|
|
1555
1190
|
// protected get stakeIntentService(): StakeIntentService {
|
|
1556
1191
|
// return assertEx(this.params.stakeIntentService, () => 'No StakeIntentService provided')
|
|
1557
1192
|
// }
|
|
1558
|
-
get
|
|
1559
|
-
return
|
|
1193
|
+
get timeSyncViewer() {
|
|
1194
|
+
return this._timeSyncViewer;
|
|
1560
1195
|
}
|
|
1561
1196
|
// protected get validateHydratedBlockState() {
|
|
1562
1197
|
// return assertEx(this.params.validateHydratedBlockState, () => 'validateHydratedBlockState is required')
|
|
1563
1198
|
// }
|
|
1564
|
-
|
|
1565
|
-
|
|
1566
|
-
|
|
1567
|
-
|
|
1568
|
-
|
|
1569
|
-
|
|
1570
|
-
|
|
1571
|
-
|
|
1199
|
+
async createHandler() {
|
|
1200
|
+
this._rejectedTransactionsArchivist = this.params.rejectedTransactionsArchivist ?? await MemoryArchivist2.create();
|
|
1201
|
+
this._account = assertEx12(this.params.account, () => "Account is required");
|
|
1202
|
+
this._rewardAddress = assertEx12(this.params.rewardAddress, () => "No reward address provided");
|
|
1203
|
+
this._address = this.account.address;
|
|
1204
|
+
this._accountBalanceViewer = await this.locateAndCreate(AccountBalanceViewerMoniker);
|
|
1205
|
+
this._blockRewardViewer = await this.locateAndCreate(BlockRewardViewerMoniker2);
|
|
1206
|
+
this._blockValidationViewer = await this.locator.getInstance(BlockValidationViewerMoniker);
|
|
1207
|
+
this._mempoolRunner = await this.locateAndCreate(MempoolRunnerMoniker);
|
|
1208
|
+
this._mempoolViewer = await this.locateAndCreate(MempoolViewerMoniker2);
|
|
1209
|
+
this._timeSyncViewer = await this.locateAndCreate(TimeSyncViewerMoniker);
|
|
1572
1210
|
}
|
|
1573
1211
|
async next(head) {
|
|
1574
|
-
if (head.chain !== this.chainId) return;
|
|
1575
1212
|
return await this.proposeNextValidBlock(head);
|
|
1576
1213
|
}
|
|
1577
1214
|
async produceNextBlock(head, force) {
|
|
1578
|
-
assertEx17(head.chain === this.chainId, () => "Block chain ID does not match");
|
|
1579
1215
|
const result = await this.proposeNextValidBlock(head);
|
|
1580
|
-
return force ?
|
|
1216
|
+
return force ? assertEx12(result, () => "Failed to produce next block") : result;
|
|
1581
1217
|
}
|
|
1582
1218
|
async getBlockRewardTransfers(block) {
|
|
1583
1219
|
if (!this._blockRewardDiviner) {
|
|
@@ -1591,7 +1227,7 @@ var SimpleBlockRunner = class _SimpleBlockRunner extends AbstractCreatable3 {
|
|
|
1591
1227
|
}
|
|
1592
1228
|
});
|
|
1593
1229
|
}
|
|
1594
|
-
const blockId = new
|
|
1230
|
+
const blockId = new PayloadBuilder5({
|
|
1595
1231
|
schema: BlockNumberSchema
|
|
1596
1232
|
}).fields({
|
|
1597
1233
|
block
|
|
@@ -1607,50 +1243,61 @@ var SimpleBlockRunner = class _SimpleBlockRunner extends AbstractCreatable3 {
|
|
|
1607
1243
|
* @returns chain stake intent for the producer redeclaration, or undefined if no redeclaration is needed
|
|
1608
1244
|
*/
|
|
1609
1245
|
getProducerRedeclaration(head) {
|
|
1610
|
-
if (this.params.config.producer.disableIntentRedeclaration) return;
|
|
1246
|
+
if (this.params.context.config.producer.disableIntentRedeclaration) return;
|
|
1611
1247
|
const currentBlock = head.block;
|
|
1612
1248
|
return createDeclarationIntent2(this.address, "producer", currentBlock, currentBlock + _SimpleBlockRunner.RedeclarationDuration);
|
|
1613
1249
|
}
|
|
1614
1250
|
async proposeNextValidBlock(head, validateBalances = false, force = false) {
|
|
1615
1251
|
return await this.spanAsync("proposeNextValidBlock", async () => {
|
|
1616
|
-
|
|
1617
|
-
|
|
1618
|
-
|
|
1619
|
-
|
|
1620
|
-
|
|
1621
|
-
|
|
1622
|
-
|
|
1623
|
-
|
|
1624
|
-
|
|
1625
|
-
|
|
1626
|
-
|
|
1627
|
-
|
|
1628
|
-
|
|
1629
|
-
|
|
1630
|
-
|
|
1631
|
-
|
|
1632
|
-
|
|
1633
|
-
|
|
1634
|
-
|
|
1635
|
-
|
|
1636
|
-
|
|
1637
|
-
|
|
1252
|
+
try {
|
|
1253
|
+
const { block: previousBlock } = assertEx12(asBlockBoundWitness(head), () => "Invalid head block");
|
|
1254
|
+
const nextBlock = previousBlock + 1;
|
|
1255
|
+
const nextBlockTransactions = await this.mempoolViewer.pendingTransactions({
|
|
1256
|
+
limit: _SimpleBlockRunner.DefaultBlockSize
|
|
1257
|
+
});
|
|
1258
|
+
this.logger?.info(`Pending Tx Count ${nextBlockTransactions.length}`);
|
|
1259
|
+
const blockPayloads = [];
|
|
1260
|
+
const producerRedeclarationPayload = await this.getProducerRedeclaration(head);
|
|
1261
|
+
if (producerRedeclarationPayload) blockPayloads.push(producerRedeclarationPayload);
|
|
1262
|
+
if (nextBlockTransactions.length === 0 && !this.heartbeatRequired(head) && !force) return;
|
|
1263
|
+
const rewardTransferPayloads = await this.getBlockRewardTransfers(nextBlock);
|
|
1264
|
+
blockPayloads.push(...rewardTransferPayloads);
|
|
1265
|
+
const transactionTransfers = await generateTransactionFeeTransfers(this.address, nextBlockTransactions);
|
|
1266
|
+
const timeStart = Date.now();
|
|
1267
|
+
const timePayload = await this.generateTimePayload(head);
|
|
1268
|
+
const timeDuration = Date.now() - timeStart;
|
|
1269
|
+
if (timeDuration > 100) {
|
|
1270
|
+
this.logger?.warn(`[Slow] Generated time payload in ${timeDuration}ms`);
|
|
1271
|
+
}
|
|
1272
|
+
const [fundedNextBlockTransactions, fundedTransfers] = await this.filterByFunded(head, nextBlockTransactions, transactionTransfers, validateBalances);
|
|
1273
|
+
blockPayloads.push(...fundedTransfers, timePayload);
|
|
1274
|
+
this.logger?.info(`Building block ${head.block + 1}`);
|
|
1275
|
+
const startBuild = Date.now();
|
|
1276
|
+
const stepRewardPoolBalance = (await this.accountBalanceViewer.accountBalances([
|
|
1277
|
+
XYO_STEP_REWARD_ADDRESS
|
|
1278
|
+
]))[XYO_STEP_REWARD_ADDRESS];
|
|
1279
|
+
const block = await buildNextBlock2(head, fundedNextBlockTransactions, blockPayloads, [
|
|
1280
|
+
this.account
|
|
1281
|
+
], XYO_STEP_REWARD_ADDRESS, stepRewardPoolBalance);
|
|
1282
|
+
this.logger?.info(`Built block ${block[0].block} in ${Date.now() - startBuild}ms with ${block[1].length} payloads`);
|
|
1283
|
+
this.logger?.info(`Validating block ${block[0].block} with ${block[1].length} payloads`);
|
|
1284
|
+
const startValidate = Date.now();
|
|
1285
|
+
const errors = await this.blockValidationViewer.validateBlock(block);
|
|
1286
|
+
this.logger?.info(`Validated block ${block[0].block} in ${Date.now() - startValidate}ms with ${block[1].length} payloads`);
|
|
1287
|
+
if (errors.length > 0) {
|
|
1288
|
+
this.logger?.warn(`Validation of produced block failed: ${errors.at(0)?.message}`);
|
|
1289
|
+
const rejectedTransactions = block[1];
|
|
1290
|
+
await this.rejectedTransactionsArchivist.insert(rejectedTransactions);
|
|
1291
|
+
} else {
|
|
1292
|
+
await this.mempoolRunner.submitBlocks([
|
|
1293
|
+
block
|
|
1294
|
+
]);
|
|
1295
|
+
return block;
|
|
1296
|
+
}
|
|
1297
|
+
} catch (error) {
|
|
1298
|
+
this.logger?.error(`Error proposing next valid block: ${error.message}`);
|
|
1299
|
+
throw error;
|
|
1638
1300
|
}
|
|
1639
|
-
const [fundedNextBlockTransactions, fundedTransfers] = await this.filterByFunded(head, nextBlockTransactions, transactionTransfers, validateBalances);
|
|
1640
|
-
blockPayloads.push(...fundedTransfers, timePayload);
|
|
1641
|
-
this.logger?.info(`Building block ${head.block + 1}`);
|
|
1642
|
-
const startBuild = Date.now();
|
|
1643
|
-
const stepRewardPoolBalance = (await this.balanceViewer.accountBalances([
|
|
1644
|
-
XYO_STEP_REWARD_ADDRESS2
|
|
1645
|
-
]))[XYO_STEP_REWARD_ADDRESS2];
|
|
1646
|
-
const block = await buildNextBlock5(head, fundedNextBlockTransactions, blockPayloads, [
|
|
1647
|
-
this.account
|
|
1648
|
-
], XYO_STEP_REWARD_ADDRESS2, stepRewardPoolBalance);
|
|
1649
|
-
this.logger?.info(`Built block ${block[0].block} in ${Date.now() - startBuild}ms with ${block[1].length} payloads`);
|
|
1650
|
-
await this.mempoolRunner.submitBlocks([
|
|
1651
|
-
block
|
|
1652
|
-
]);
|
|
1653
|
-
return block;
|
|
1654
1301
|
});
|
|
1655
1302
|
}
|
|
1656
1303
|
// remove unfunded transactions and block transfers
|
|
@@ -1661,9 +1308,9 @@ var SimpleBlockRunner = class _SimpleBlockRunner extends AbstractCreatable3 {
|
|
|
1661
1308
|
if (!transfer) return;
|
|
1662
1309
|
const totalTransferCost = Object.values(transfer?.transfers).reduce((acc, t) => acc + hexToBigInt(t ?? "00"), 0n);
|
|
1663
1310
|
if (validateBalances) {
|
|
1664
|
-
const balance = (await this.
|
|
1311
|
+
const balance = (await this.accountBalanceViewer.accountBalances([
|
|
1665
1312
|
transfer.from
|
|
1666
|
-
]))[transfer.from] ??
|
|
1313
|
+
]))[transfer.from] ?? AttoXL1(0n);
|
|
1667
1314
|
if (balance >= totalTransferCost) {
|
|
1668
1315
|
fundedTransfers.push(transfer);
|
|
1669
1316
|
return tx;
|
|
@@ -1679,19 +1326,7 @@ var SimpleBlockRunner = class _SimpleBlockRunner extends AbstractCreatable3 {
|
|
|
1679
1326
|
];
|
|
1680
1327
|
}
|
|
1681
1328
|
async generateTimePayload(head) {
|
|
1682
|
-
|
|
1683
|
-
const ethereumHash = asHash2(ethHashOrNull, () => "No ethereum hash available from time sync service");
|
|
1684
|
-
const timePayload = {
|
|
1685
|
-
schema: TimeSchema,
|
|
1686
|
-
// this is for the previous block
|
|
1687
|
-
xl1: head.block,
|
|
1688
|
-
// this is for the previous block
|
|
1689
|
-
xl1Hash: head._hash,
|
|
1690
|
-
ethereum,
|
|
1691
|
-
ethereumHash,
|
|
1692
|
-
epoch: Date.now()
|
|
1693
|
-
};
|
|
1694
|
-
return timePayload;
|
|
1329
|
+
return await this.timeSyncViewer.currentTimePayload();
|
|
1695
1330
|
}
|
|
1696
1331
|
/**
|
|
1697
1332
|
* Check if a heartbeat block is required based on network activity.
|
|
@@ -1700,8 +1335,8 @@ var SimpleBlockRunner = class _SimpleBlockRunner extends AbstractCreatable3 {
|
|
|
1700
1335
|
*/
|
|
1701
1336
|
heartbeatRequired(head) {
|
|
1702
1337
|
const epoch = head.$epoch;
|
|
1703
|
-
if (
|
|
1704
|
-
const { heartbeatInterval } = this.params.config.producer;
|
|
1338
|
+
if (isDefined7(epoch)) {
|
|
1339
|
+
const { heartbeatInterval } = this.params.context.config.producer;
|
|
1705
1340
|
if (Date.now() - epoch > heartbeatInterval) {
|
|
1706
1341
|
return true;
|
|
1707
1342
|
}
|
|
@@ -1709,252 +1344,10 @@ var SimpleBlockRunner = class _SimpleBlockRunner extends AbstractCreatable3 {
|
|
|
1709
1344
|
return false;
|
|
1710
1345
|
}
|
|
1711
1346
|
};
|
|
1712
|
-
SimpleBlockRunner =
|
|
1713
|
-
|
|
1347
|
+
SimpleBlockRunner = _ts_decorate8([
|
|
1348
|
+
creatableProvider()
|
|
1714
1349
|
], SimpleBlockRunner);
|
|
1715
1350
|
|
|
1716
|
-
// src/implementation/producer.ts
|
|
1717
|
-
var serviceSingleton2;
|
|
1718
|
-
var initBlockProducer = /* @__PURE__ */ __name(async (params) => {
|
|
1719
|
-
if (serviceSingleton2) return serviceSingleton2;
|
|
1720
|
-
return await timeBudget2("initBlockProducer", params.logger, async () => {
|
|
1721
|
-
serviceSingleton2 = await SimpleBlockRunner.create(params);
|
|
1722
|
-
return serviceSingleton2;
|
|
1723
|
-
}, 2e3, true);
|
|
1724
|
-
}, "initBlockProducer");
|
|
1725
|
-
|
|
1726
|
-
// src/implementation/reward.ts
|
|
1727
|
-
import { assertEx as assertEx18 } from "@xylabs/sdk-js";
|
|
1728
|
-
import { SimpleBlockRewardViewer, timeBudget as timeBudget3 } from "@xyo-network/xl1-protocol-sdk";
|
|
1729
|
-
var rewardServiceSingleton;
|
|
1730
|
-
var initBlockRewardViewer = /* @__PURE__ */ __name((params) => {
|
|
1731
|
-
if (rewardServiceSingleton) return rewardServiceSingleton;
|
|
1732
|
-
return timeBudget3("initBlockRewardViewer", params.logger, () => {
|
|
1733
|
-
const { config } = params;
|
|
1734
|
-
rewardServiceSingleton = canUseEvmBlockRewardViewer({
|
|
1735
|
-
config
|
|
1736
|
-
}) ? initEvmBlockRewardViewer(params) : initXyoBlockRewardViewer(params);
|
|
1737
|
-
return rewardServiceSingleton;
|
|
1738
|
-
}, 2e3, true);
|
|
1739
|
-
}, "initBlockRewardViewer");
|
|
1740
|
-
var initXyoBlockRewardViewer = /* @__PURE__ */ __name((params) => {
|
|
1741
|
-
if (rewardServiceSingleton) return rewardServiceSingleton;
|
|
1742
|
-
return timeBudget3("initXyoBlockRewardViewer", params.logger, () => {
|
|
1743
|
-
rewardServiceSingleton = SimpleBlockRewardViewer.create(params);
|
|
1744
|
-
return rewardServiceSingleton;
|
|
1745
|
-
}, 2e3, true);
|
|
1746
|
-
}, "initXyoBlockRewardViewer");
|
|
1747
|
-
var canUseEvmBlockRewardViewer = /* @__PURE__ */ __name((params) => canUseEvmProvider({
|
|
1748
|
-
config: params.config
|
|
1749
|
-
}), "canUseEvmBlockRewardViewer");
|
|
1750
|
-
var initEvmBlockRewardViewer = /* @__PURE__ */ __name(async (params) => {
|
|
1751
|
-
if (rewardServiceSingleton) return rewardServiceSingleton;
|
|
1752
|
-
return await timeBudget3("initEvmBlockRewardViewer", params.logger, async () => {
|
|
1753
|
-
const provider2 = assertEx18(await initEvmProvider(params));
|
|
1754
|
-
const evmBlockRewardViewerParams = {
|
|
1755
|
-
...params,
|
|
1756
|
-
provider: provider2
|
|
1757
|
-
};
|
|
1758
|
-
rewardServiceSingleton = EvmBlockRewardViewer.create(evmBlockRewardViewerParams);
|
|
1759
|
-
return rewardServiceSingleton;
|
|
1760
|
-
}, 2e3, true);
|
|
1761
|
-
}, "initEvmBlockRewardViewer");
|
|
1762
|
-
|
|
1763
|
-
// src/implementation/time.ts
|
|
1764
|
-
import { timeBudget as timeBudget4 } from "@xyo-network/xl1-protocol-sdk";
|
|
1765
|
-
|
|
1766
|
-
// src/Time/BaseTimeSyncService.ts
|
|
1767
|
-
import { creatable as creatable7 } from "@xylabs/sdk-js";
|
|
1768
|
-
import { SimpleTimeSyncViewer, TimeSyncViewerMoniker } from "@xyo-network/xl1-protocol-sdk";
|
|
1769
|
-
function _ts_decorate7(decorators, target, key, desc) {
|
|
1770
|
-
var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
|
|
1771
|
-
if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
|
|
1772
|
-
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;
|
|
1773
|
-
return c > 3 && r && Object.defineProperty(target, key, r), r;
|
|
1774
|
-
}
|
|
1775
|
-
__name(_ts_decorate7, "_ts_decorate");
|
|
1776
|
-
var BaseTimeSyncService = class _BaseTimeSyncService extends BaseService {
|
|
1777
|
-
static {
|
|
1778
|
-
__name(this, "BaseTimeSyncService");
|
|
1779
|
-
}
|
|
1780
|
-
static defaultMoniker = TimeSyncViewerMoniker;
|
|
1781
|
-
static monikers = [
|
|
1782
|
-
TimeSyncViewerMoniker
|
|
1783
|
-
];
|
|
1784
|
-
moniker = _BaseTimeSyncService.defaultMoniker;
|
|
1785
|
-
timeSyncViewer;
|
|
1786
|
-
get blockViewer() {
|
|
1787
|
-
return this.params.blockViewer;
|
|
1788
|
-
}
|
|
1789
|
-
get ethProvider() {
|
|
1790
|
-
return this.params.ethProvider;
|
|
1791
|
-
}
|
|
1792
|
-
async convertTime(fromDomain, toDomain, from) {
|
|
1793
|
-
return await this.timeSyncViewer.convertTime(fromDomain, toDomain, from);
|
|
1794
|
-
}
|
|
1795
|
-
async createHandler() {
|
|
1796
|
-
await super.createHandler();
|
|
1797
|
-
this.timeSyncViewer = await SimpleTimeSyncViewer.create({
|
|
1798
|
-
blockViewer: this.blockViewer,
|
|
1799
|
-
ethProvider: this.ethProvider
|
|
1800
|
-
});
|
|
1801
|
-
}
|
|
1802
|
-
async currentTime(domain) {
|
|
1803
|
-
return await this.timeSyncViewer.currentTime(domain);
|
|
1804
|
-
}
|
|
1805
|
-
async currentTimeAndHash(domain) {
|
|
1806
|
-
return await this.timeSyncViewer.currentTimeAndHash(domain);
|
|
1807
|
-
}
|
|
1808
|
-
async currentTimePayload() {
|
|
1809
|
-
return await this.timeSyncViewer.currentTimePayload();
|
|
1810
|
-
}
|
|
1811
|
-
};
|
|
1812
|
-
BaseTimeSyncService = _ts_decorate7([
|
|
1813
|
-
creatable7()
|
|
1814
|
-
], BaseTimeSyncService);
|
|
1815
|
-
|
|
1816
|
-
// src/implementation/time.ts
|
|
1817
|
-
var timeSyncServiceSingleton;
|
|
1818
|
-
var initTimeService = /* @__PURE__ */ __name(async ({ blockViewer, config, logger, meterProvider, traceProvider }) => {
|
|
1819
|
-
if (timeSyncServiceSingleton) return timeSyncServiceSingleton;
|
|
1820
|
-
return await timeBudget4("initTimeService", logger, async () => {
|
|
1821
|
-
const ethProvider = canUseEvmProvider({
|
|
1822
|
-
config
|
|
1823
|
-
}) ? await initEvmProvider({
|
|
1824
|
-
config
|
|
1825
|
-
}) : void 0;
|
|
1826
|
-
timeSyncServiceSingleton = BaseTimeSyncService.create({
|
|
1827
|
-
blockViewer,
|
|
1828
|
-
ethProvider,
|
|
1829
|
-
logger,
|
|
1830
|
-
meterProvider,
|
|
1831
|
-
traceProvider
|
|
1832
|
-
});
|
|
1833
|
-
return await timeSyncServiceSingleton;
|
|
1834
|
-
}, 2e3, true);
|
|
1835
|
-
}, "initTimeService");
|
|
1836
|
-
|
|
1837
|
-
// src/implementation/validator.ts
|
|
1838
|
-
var serviceSingleton3;
|
|
1839
|
-
var initValidator = /* @__PURE__ */ __name((params) => {
|
|
1840
|
-
if (serviceSingleton3) return serviceSingleton3;
|
|
1841
|
-
serviceSingleton3 = initBlockProducer(params);
|
|
1842
|
-
return serviceSingleton3;
|
|
1843
|
-
}, "initValidator");
|
|
1844
|
-
|
|
1845
|
-
// src/NetworkStakeStepReward/BaseNetworkStakeStepRewardService.ts
|
|
1846
|
-
import { creatable as creatable8 } from "@xylabs/sdk-js";
|
|
1847
|
-
import { NetworkStakeStepRewardViewerMoniker } from "@xyo-network/xl1-protocol-sdk";
|
|
1848
|
-
function _ts_decorate8(decorators, target, key, desc) {
|
|
1849
|
-
var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
|
|
1850
|
-
if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
|
|
1851
|
-
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;
|
|
1852
|
-
return c > 3 && r && Object.defineProperty(target, key, r), r;
|
|
1853
|
-
}
|
|
1854
|
-
__name(_ts_decorate8, "_ts_decorate");
|
|
1855
|
-
var BaseNetworkStakeStepRewardService = class _BaseNetworkStakeStepRewardService extends BaseService {
|
|
1856
|
-
static {
|
|
1857
|
-
__name(this, "BaseNetworkStakeStepRewardService");
|
|
1858
|
-
}
|
|
1859
|
-
static defaultMoniker = NetworkStakeStepRewardViewerMoniker;
|
|
1860
|
-
static monikers = [
|
|
1861
|
-
NetworkStakeStepRewardViewerMoniker
|
|
1862
|
-
];
|
|
1863
|
-
moniker = _BaseNetworkStakeStepRewardService.defaultMoniker;
|
|
1864
|
-
networkStakeStepRewardAddressHistory(_address) {
|
|
1865
|
-
throw new Error("Method [networkStakeStepRewardAddressHistory] not implemented.");
|
|
1866
|
-
}
|
|
1867
|
-
networkStakeStepRewardAddressReward(_context, _address) {
|
|
1868
|
-
throw new Error("Method [networkStakeStepRewardAddressReward] not implemented.");
|
|
1869
|
-
}
|
|
1870
|
-
networkStakeStepRewardAddressShare(_context, _address) {
|
|
1871
|
-
throw new Error("Method [networkStakeStepRewardAddressShare] not implemented.");
|
|
1872
|
-
}
|
|
1873
|
-
networkStakeStepRewardClaimedByAddress(_address) {
|
|
1874
|
-
throw new Error("Method [networkStakeStepRewardClaimedByAddress] not implemented.");
|
|
1875
|
-
}
|
|
1876
|
-
networkStakeStepRewardForPosition(_position, _range) {
|
|
1877
|
-
throw new Error("Method [networkStakeStepRewardForPosition] not implemented.");
|
|
1878
|
-
}
|
|
1879
|
-
networkStakeStepRewardForStep(_context) {
|
|
1880
|
-
throw new Error("Method [networkStakeStepRewardForStep] not implemented.");
|
|
1881
|
-
}
|
|
1882
|
-
networkStakeStepRewardForStepForPosition(_context, _position) {
|
|
1883
|
-
throw new Error("Method [networkStakeStepRewardForStepForPosition] not implemented.");
|
|
1884
|
-
}
|
|
1885
|
-
networkStakeStepRewardPoolRewards(_context) {
|
|
1886
|
-
throw new Error("Method [networkStakeStepRewardPoolRewards] not implemented.");
|
|
1887
|
-
}
|
|
1888
|
-
networkStakeStepRewardPoolShares(_context) {
|
|
1889
|
-
throw new Error("Method [networkStakeStepRewardPoolShares] not implemented.");
|
|
1890
|
-
}
|
|
1891
|
-
networkStakeStepRewardPositionWeight(_context, _position) {
|
|
1892
|
-
throw new Error("Method [networkStakeStepRewardPositionWeight] not implemented.");
|
|
1893
|
-
}
|
|
1894
|
-
networkStakeStepRewardPotentialPositionLoss(_context, _position) {
|
|
1895
|
-
throw new Error("Method [networkStakeStepRewardPotentialPositionLoss] not implemented.");
|
|
1896
|
-
}
|
|
1897
|
-
networkStakeStepRewardRandomizer(_context) {
|
|
1898
|
-
throw new Error("Method [networkStakeStepRewardRandomizer] not implemented.");
|
|
1899
|
-
}
|
|
1900
|
-
networkStakeStepRewardStakerCount(_context) {
|
|
1901
|
-
throw new Error("Method [networkStakeStepRewardStakerCount] not implemented.");
|
|
1902
|
-
}
|
|
1903
|
-
networkStakeStepRewardUnclaimedByAddress(_address) {
|
|
1904
|
-
throw new Error("Method [networkStakeStepRewardUnclaimedByAddress] not implemented.");
|
|
1905
|
-
}
|
|
1906
|
-
networkStakeStepRewardWeightForAddress(_context, _address) {
|
|
1907
|
-
throw new Error("Method [networkStakeStepRewardWeightForAddress] not implemented.");
|
|
1908
|
-
}
|
|
1909
|
-
networkStakeStepRewardsForPosition(_position, _range) {
|
|
1910
|
-
throw new Error("Method [networkStakeStepRewardsForPosition] not implemented.");
|
|
1911
|
-
}
|
|
1912
|
-
networkStakeStepRewardsForRange(_range) {
|
|
1913
|
-
throw new Error("Method [networkStakeStepRewardsForRange] not implemented.");
|
|
1914
|
-
}
|
|
1915
|
-
networkStakeStepRewardsForStepLevel(_stepLevel, _range) {
|
|
1916
|
-
throw new Error("Method [networkStakeStepRewardsForStepLevel] not implemented.");
|
|
1917
|
-
}
|
|
1918
|
-
};
|
|
1919
|
-
BaseNetworkStakeStepRewardService = _ts_decorate8([
|
|
1920
|
-
creatable8()
|
|
1921
|
-
], BaseNetworkStakeStepRewardService);
|
|
1922
|
-
|
|
1923
|
-
// src/Schemas/BaseSchemasService.ts
|
|
1924
|
-
import { creatable as creatable9, spanRootAsync } from "@xylabs/sdk-js";
|
|
1925
|
-
import { schemasSummary } from "@xyo-network/xl1-protocol-sdk";
|
|
1926
|
-
function _ts_decorate9(decorators, target, key, desc) {
|
|
1927
|
-
var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
|
|
1928
|
-
if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
|
|
1929
|
-
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;
|
|
1930
|
-
return c > 3 && r && Object.defineProperty(target, key, r), r;
|
|
1931
|
-
}
|
|
1932
|
-
__name(_ts_decorate9, "_ts_decorate");
|
|
1933
|
-
var BaseSchemasService = class extends BaseService {
|
|
1934
|
-
static {
|
|
1935
|
-
__name(this, "BaseSchemasService");
|
|
1936
|
-
}
|
|
1937
|
-
async schema(head, schema) {
|
|
1938
|
-
return (await this.schemas(head, [
|
|
1939
|
-
schema
|
|
1940
|
-
]))[schema] ?? 0;
|
|
1941
|
-
}
|
|
1942
|
-
async schemas(head, schemas) {
|
|
1943
|
-
return await spanRootAsync("transfers", async () => {
|
|
1944
|
-
const [summary] = await schemasSummary(this.params.context);
|
|
1945
|
-
const result = {};
|
|
1946
|
-
for (const schema of schemas) {
|
|
1947
|
-
const count = summary[schema] ?? 0;
|
|
1948
|
-
result[schema] = count;
|
|
1949
|
-
}
|
|
1950
|
-
return result;
|
|
1951
|
-
});
|
|
1952
|
-
}
|
|
1953
|
-
};
|
|
1954
|
-
BaseSchemasService = _ts_decorate9([
|
|
1955
|
-
creatable9()
|
|
1956
|
-
], BaseSchemasService);
|
|
1957
|
-
|
|
1958
1351
|
// src/StakeIntent/lib/getBlockSignedStakeDeclarations.ts
|
|
1959
1352
|
import { exists as exists3, filterAs as filterAs2 } from "@xylabs/sdk-js";
|
|
1960
1353
|
import { isBoundWitness } from "@xyo-network/boundwitness-model";
|
|
@@ -1982,21 +1375,21 @@ var mapBoundWitnessToStakeIntentHashes = /* @__PURE__ */ __name((bw) => {
|
|
|
1982
1375
|
}, "mapBoundWitnessToStakeIntentHashes");
|
|
1983
1376
|
|
|
1984
1377
|
// src/StakeIntent/XyoStakeIntentService.ts
|
|
1985
|
-
import { asAddress as asAddress2, assertEx as
|
|
1378
|
+
import { asAddress as asAddress2, assertEx as assertEx13, creatable as creatable8, filterAs as filterAs3, isUndefined as isUndefined2 } from "@xylabs/sdk-js";
|
|
1986
1379
|
import { analyzeChain, ChainStakeIntentAnalyzer, isChainSummaryStakeIntent } from "@xyo-network/chain-analyze";
|
|
1987
1380
|
import { DEFAULT_FIND_FIRST_MATCHING_NEXT_OPTIONS, findFirstMatching, IntervalMap } from "@xyo-network/chain-utils";
|
|
1988
|
-
import { PayloadBuilder as
|
|
1989
|
-
import { asBlockBoundWitness as
|
|
1990
|
-
import { asChainIndexingServiceStateWithStorageMeta, ChainIndexingServiceStateSchema, isChainIndexingServiceState, readPayloadMapFromStore
|
|
1381
|
+
import { PayloadBuilder as PayloadBuilder6 } from "@xyo-network/payload-builder";
|
|
1382
|
+
import { asBlockBoundWitness as asBlockBoundWitness2, asBlockBoundWitnessWithStorageMeta, asChainStakeIntent as asChainStakeIntent2 } from "@xyo-network/xl1-protocol";
|
|
1383
|
+
import { asChainIndexingServiceStateWithStorageMeta, BlockViewerMoniker as BlockViewerMoniker3, ChainIndexingServiceStateSchema, ChainStakeViewerMoniker, isChainIndexingServiceState, readPayloadMapFromStore, timeBudget } from "@xyo-network/xl1-protocol-sdk";
|
|
1991
1384
|
import { Mutex as Mutex3 } from "async-mutex";
|
|
1992
|
-
import { LRUCache
|
|
1993
|
-
function
|
|
1385
|
+
import { LRUCache } from "lru-cache";
|
|
1386
|
+
function _ts_decorate9(decorators, target, key, desc) {
|
|
1994
1387
|
var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
|
|
1995
1388
|
if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
|
|
1996
1389
|
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;
|
|
1997
1390
|
return c > 3 && r && Object.defineProperty(target, key, r), r;
|
|
1998
1391
|
}
|
|
1999
|
-
__name(
|
|
1392
|
+
__name(_ts_decorate9, "_ts_decorate");
|
|
2000
1393
|
var ACTIVE_STAKE_TTL = 1e3 * 60 * 60 * 2;
|
|
2001
1394
|
var NO_ACTIVE_STAKE_TTL = 1e3 * 2;
|
|
2002
1395
|
var STAKE_CACHE_MAX_ENTRIES = 1e4;
|
|
@@ -2014,45 +1407,47 @@ var XyoStakeIntentService = class extends BaseService {
|
|
|
2014
1407
|
// in performance for small sets, and (most importantly) easily
|
|
2015
1408
|
// persisted so we can recover state on restart.
|
|
2016
1409
|
_producers = new IntervalMap();
|
|
2017
|
-
_stakeCache = new
|
|
1410
|
+
_stakeCache = new LRUCache({
|
|
2018
1411
|
max: STAKE_CACHE_MAX_ENTRIES
|
|
2019
1412
|
});
|
|
2020
1413
|
_updateMutex = new Mutex3();
|
|
1414
|
+
_blockViewer;
|
|
1415
|
+
_chainStakeViewer;
|
|
2021
1416
|
get blockViewer() {
|
|
2022
|
-
return this.
|
|
1417
|
+
return this._blockViewer;
|
|
2023
1418
|
}
|
|
2024
1419
|
get chainArchivist() {
|
|
2025
|
-
return
|
|
1420
|
+
return assertEx13(this.params.chainArchivist, () => "chainArchivist not set");
|
|
2026
1421
|
}
|
|
2027
1422
|
get chainStakeViewer() {
|
|
2028
|
-
return
|
|
1423
|
+
return this._chainStakeViewer;
|
|
2029
1424
|
}
|
|
2030
1425
|
get stakeIntentStateArchivist() {
|
|
2031
|
-
return
|
|
1426
|
+
return assertEx13(this.params.stakeIntentStateArchivist, () => "stakeIntentStateArchivist not set");
|
|
2032
1427
|
}
|
|
2033
1428
|
static async paramsHandler(params) {
|
|
2034
1429
|
return {
|
|
2035
1430
|
...await super.paramsHandler(params),
|
|
2036
|
-
|
|
2037
|
-
|
|
2038
|
-
chainStakeViewer: assertEx19(params?.chainStakeViewer, () => "chainStakeViewer is required"),
|
|
2039
|
-
stakeIntentStateArchivist: assertEx19(params?.stakeIntentStateArchivist, () => "stakeIntentStateArchivist is required")
|
|
1431
|
+
chainArchivist: assertEx13(params?.chainArchivist, () => "chainArchivist is required"),
|
|
1432
|
+
stakeIntentStateArchivist: assertEx13(params?.stakeIntentStateArchivist, () => "stakeIntentStateArchivist is required")
|
|
2040
1433
|
};
|
|
2041
1434
|
}
|
|
2042
1435
|
async createHandler() {
|
|
1436
|
+
this._blockViewer = await this.locator.getInstance(BlockViewerMoniker3);
|
|
1437
|
+
this._chainStakeViewer = await this.locator.getInstance(ChainStakeViewerMoniker);
|
|
2043
1438
|
const head = await this.blockViewer.currentBlock();
|
|
2044
|
-
if (
|
|
1439
|
+
if (isUndefined2(head)) return;
|
|
2045
1440
|
await this.recoverState(head[0]._hash);
|
|
2046
1441
|
}
|
|
2047
1442
|
async getDeclaredCandidateRanges(address, intent) {
|
|
2048
1443
|
await Promise.resolve();
|
|
2049
|
-
|
|
1444
|
+
assertEx13(intent === "producer", () => `Support not yet added for intent ${intent}`);
|
|
2050
1445
|
const results = this._producers.get(address);
|
|
2051
1446
|
return results ?? [];
|
|
2052
1447
|
}
|
|
2053
1448
|
async getDeclaredCandidatesForBlock(block, intent) {
|
|
2054
1449
|
return await this.spanAsync("getDeclaredCandidatesForBlock", async () => {
|
|
2055
|
-
|
|
1450
|
+
assertEx13(intent === "producer", () => `Support not yet added for intent ${intent}`);
|
|
2056
1451
|
const results = this._producers.findAllContaining(block);
|
|
2057
1452
|
const candidates = [
|
|
2058
1453
|
...results
|
|
@@ -2065,7 +1460,7 @@ var XyoStakeIntentService = class extends BaseService {
|
|
|
2065
1460
|
getRequiredMinimumStakeForIntent(intent) {
|
|
2066
1461
|
switch (intent) {
|
|
2067
1462
|
case "producer": {
|
|
2068
|
-
const { minStake } = this.params.config.producer;
|
|
1463
|
+
const { minStake } = this.params.context.config.producer;
|
|
2069
1464
|
return BigInt(minStake);
|
|
2070
1465
|
}
|
|
2071
1466
|
}
|
|
@@ -2106,7 +1501,7 @@ var XyoStakeIntentService = class extends BaseService {
|
|
|
2106
1501
|
}
|
|
2107
1502
|
async persistState(current) {
|
|
2108
1503
|
const state = this._producers.serialize();
|
|
2109
|
-
const payload = new
|
|
1504
|
+
const payload = new PayloadBuilder6({
|
|
2110
1505
|
schema: ChainIndexingServiceStateSchema
|
|
2111
1506
|
}).fields({
|
|
2112
1507
|
endBlockHash: current,
|
|
@@ -2117,8 +1512,8 @@ var XyoStakeIntentService = class extends BaseService {
|
|
|
2117
1512
|
]);
|
|
2118
1513
|
}
|
|
2119
1514
|
async recoverState(current) {
|
|
2120
|
-
return await
|
|
2121
|
-
const currentBlock =
|
|
1515
|
+
return await timeBudget("XyoStakeIntentService.recoverState", console, async () => {
|
|
1516
|
+
const currentBlock = assertEx13(asBlockBoundWitness2((await this.chainArchivist.get([
|
|
2122
1517
|
current
|
|
2123
1518
|
]))?.[0]), () => `Block ${current} not found`);
|
|
2124
1519
|
const currentBlockNum = currentBlock.block;
|
|
@@ -2135,7 +1530,7 @@ var XyoStakeIntentService = class extends BaseService {
|
|
|
2135
1530
|
const indexed = (await this.chainArchivist.get([
|
|
2136
1531
|
state.endBlockHash
|
|
2137
1532
|
]))?.[0];
|
|
2138
|
-
const indexedBlock =
|
|
1533
|
+
const indexedBlock = asBlockBoundWitnessWithStorageMeta(indexed);
|
|
2139
1534
|
if (indexedBlock) {
|
|
2140
1535
|
const indexedBlockNum = indexedBlock.block;
|
|
2141
1536
|
if (indexedBlockNum <= currentBlockNum) {
|
|
@@ -2159,10 +1554,10 @@ var XyoStakeIntentService = class extends BaseService {
|
|
|
2159
1554
|
await this._updateMutex.runExclusive(async () => {
|
|
2160
1555
|
return await this.spanAsync("updateIndex", async () => {
|
|
2161
1556
|
const currentHead = (await this.blockViewer.currentBlock())[0];
|
|
2162
|
-
if (
|
|
2163
|
-
return await
|
|
1557
|
+
if (isUndefined2(currentHead)) return;
|
|
1558
|
+
return await timeBudget("XyoStakeIntentService.updateIndex", console, async () => {
|
|
2164
1559
|
const currentHeadHash = currentHead._hash;
|
|
2165
|
-
const chainMap =
|
|
1560
|
+
const chainMap = readPayloadMapFromStore(this.chainArchivist);
|
|
2166
1561
|
const result = await analyzeChain({
|
|
2167
1562
|
chainMap
|
|
2168
1563
|
}, [
|
|
@@ -2187,20 +1582,20 @@ var XyoStakeIntentService = class extends BaseService {
|
|
|
2187
1582
|
});
|
|
2188
1583
|
}
|
|
2189
1584
|
};
|
|
2190
|
-
XyoStakeIntentService =
|
|
2191
|
-
|
|
1585
|
+
XyoStakeIntentService = _ts_decorate9([
|
|
1586
|
+
creatable8()
|
|
2192
1587
|
], XyoStakeIntentService);
|
|
2193
1588
|
|
|
2194
1589
|
// src/StepStake/BaseStepStakeService.ts
|
|
2195
|
-
import { creatable as
|
|
1590
|
+
import { creatable as creatable9 } from "@xylabs/sdk-js";
|
|
2196
1591
|
import { StepStakeViewerMoniker } from "@xyo-network/xl1-protocol-sdk";
|
|
2197
|
-
function
|
|
1592
|
+
function _ts_decorate10(decorators, target, key, desc) {
|
|
2198
1593
|
var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
|
|
2199
1594
|
if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
|
|
2200
1595
|
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;
|
|
2201
1596
|
return c > 3 && r && Object.defineProperty(target, key, r), r;
|
|
2202
1597
|
}
|
|
2203
|
-
__name(
|
|
1598
|
+
__name(_ts_decorate10, "_ts_decorate");
|
|
2204
1599
|
var BaseStepStakeService = class _BaseStepStakeService extends BaseService {
|
|
2205
1600
|
static {
|
|
2206
1601
|
__name(this, "BaseStepStakeService");
|
|
@@ -2217,8 +1612,8 @@ var BaseStepStakeService = class _BaseStepStakeService extends BaseService {
|
|
|
2217
1612
|
throw new Error("Method [stepStakeForAddress] not implemented.");
|
|
2218
1613
|
}
|
|
2219
1614
|
};
|
|
2220
|
-
BaseStepStakeService =
|
|
2221
|
-
|
|
1615
|
+
BaseStepStakeService = _ts_decorate10([
|
|
1616
|
+
creatable9()
|
|
2222
1617
|
], BaseStepStakeService);
|
|
2223
1618
|
export {
|
|
2224
1619
|
BaseAccountableService,
|
|
@@ -2228,14 +1623,11 @@ export {
|
|
|
2228
1623
|
BaseSchemasService,
|
|
2229
1624
|
BaseService,
|
|
2230
1625
|
BaseStepStakeService,
|
|
2231
|
-
BaseTimeSyncService,
|
|
2232
|
-
ChainBlockNumberIterationService,
|
|
2233
1626
|
DEFAULT_BLOCK_SIZE,
|
|
2234
1627
|
EvmBlockRewardViewer,
|
|
2235
|
-
|
|
2236
|
-
|
|
1628
|
+
EvmChainViewer,
|
|
1629
|
+
MemoryChainViewer,
|
|
2237
1630
|
SimpleBlockRunner,
|
|
2238
|
-
SimpleBlockRunnerParamsZod,
|
|
2239
1631
|
XYO_PRODUCER_REDECLARATION_DURATION,
|
|
2240
1632
|
XYO_PRODUCER_REDECLARATION_WINDOW,
|
|
2241
1633
|
XyoStakeIntentService,
|
|
@@ -2244,21 +1636,10 @@ export {
|
|
|
2244
1636
|
blockViewerFromChainIteratorAndArchivist,
|
|
2245
1637
|
canUseEvmProvider,
|
|
2246
1638
|
creatableService,
|
|
1639
|
+
createBootstrapHead,
|
|
2247
1640
|
getBlockSignedStakeDeclarations,
|
|
2248
|
-
initAccountBalanceService,
|
|
2249
|
-
initBlockProducer,
|
|
2250
|
-
initBlockRewardViewer,
|
|
2251
|
-
initBlockViewer,
|
|
2252
1641
|
initChainService,
|
|
2253
|
-
initEvmBlockRewardViewer,
|
|
2254
1642
|
initEvmProvider,
|
|
2255
|
-
|
|
2256
|
-
initMemoryChainService,
|
|
2257
|
-
initMempoolRunner,
|
|
2258
|
-
initMempoolViewer,
|
|
2259
|
-
initPendingTransactions,
|
|
2260
|
-
initTimeService,
|
|
2261
|
-
initValidator,
|
|
2262
|
-
initXyoBlockRewardViewer
|
|
1643
|
+
initMemoryChainService
|
|
2263
1644
|
};
|
|
2264
1645
|
//# sourceMappingURL=index.mjs.map
|