@xyo-network/chain-sdk 4.0.6 → 4.2.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/browser/modules/ethereum/block/findContractDeploymentBlock.d.ts +25 -0
- package/dist/browser/modules/ethereum/block/findContractDeploymentBlock.d.ts.map +1 -0
- package/dist/browser/modules/ethereum/block/index.d.ts +1 -0
- package/dist/browser/modules/ethereum/block/index.d.ts.map +1 -1
- package/dist/browser/modules/ethereum/drivers/EvmStakeEventZod.d.ts +12 -12
- package/dist/browser/modules/ethereum/drivers/EvmStakeEventsViewer.d.ts +44 -14
- package/dist/browser/modules/ethereum/drivers/EvmStakeEventsViewer.d.ts.map +1 -1
- package/dist/browser/modules/ethereum/drivers/EvmStakeViewer.d.ts +1 -1
- package/dist/browser/modules/ethereum/drivers/EvmStakeViewer.d.ts.map +1 -1
- package/dist/browser/modules/ethereum/index.d.ts +2 -0
- package/dist/browser/modules/ethereum/index.d.ts.map +1 -1
- package/dist/browser/modules/ethereum/indexing/EvmEventIndexModel.d.ts +107 -0
- package/dist/browser/modules/ethereum/indexing/EvmEventIndexModel.d.ts.map +1 -0
- package/dist/browser/modules/ethereum/indexing/EvmEventIndexPaths.d.ts +6 -0
- package/dist/browser/modules/ethereum/indexing/EvmEventIndexPaths.d.ts.map +1 -0
- package/dist/browser/modules/ethereum/indexing/EvmEventIndexPublishRunner.d.ts +9 -0
- package/dist/browser/modules/ethereum/indexing/EvmEventIndexPublishRunner.d.ts.map +1 -0
- package/dist/browser/modules/ethereum/indexing/RestStakeEventsViewer.d.ts +54 -0
- package/dist/browser/modules/ethereum/indexing/RestStakeEventsViewer.d.ts.map +1 -0
- package/dist/browser/modules/ethereum/indexing/index.d.ts +5 -0
- package/dist/browser/modules/ethereum/indexing/index.d.ts.map +1 -0
- package/dist/browser/modules/ethereum/providers/AbstractEvmProvider.d.ts +4 -1
- package/dist/browser/modules/ethereum/providers/AbstractEvmProvider.d.ts.map +1 -1
- package/dist/browser/modules/ethereum/providers/AbstractEvmViewer.d.ts +5 -1
- package/dist/browser/modules/ethereum/providers/AbstractEvmViewer.d.ts.map +1 -1
- package/dist/browser/modules/ethereum/providers/EvmChainContractViewer.d.ts +1 -2
- package/dist/browser/modules/ethereum/providers/EvmChainContractViewer.d.ts.map +1 -1
- package/dist/browser/modules/ethereum/providers/EvmStakeTotalsViewer.d.ts +1 -1
- package/dist/browser/modules/ethereum/providers/EvmStakeTotalsViewer.d.ts.map +1 -1
- package/dist/browser/modules/ethereum/rpc/index.d.ts +4 -0
- package/dist/browser/modules/ethereum/rpc/index.d.ts.map +1 -0
- package/dist/browser/modules/ethereum/rpc/isRpcRangeLimitError.d.ts +15 -0
- package/dist/browser/modules/ethereum/rpc/isRpcRangeLimitError.d.ts.map +1 -0
- package/dist/browser/modules/ethereum/rpc/isRpcRateLimitError.d.ts +1 -1
- package/dist/browser/modules/services/ChainValidator/XyoValidator.d.ts +7 -1
- package/dist/browser/modules/services/ChainValidator/XyoValidator.d.ts.map +1 -1
- package/dist/browser/modules/services/Election/BaseElectionService.d.ts +1 -0
- package/dist/browser/modules/services/Election/BaseElectionService.d.ts.map +1 -1
- package/dist/browser/modules/services/NetworkStakeStepReward/BaseNetworkStakeStepRewardService.d.ts +1 -2
- package/dist/browser/modules/services/NetworkStakeStepReward/BaseNetworkStakeStepRewardService.d.ts.map +1 -1
- package/dist/browser/modules/services/implementation/processPendingBlocks.d.ts +4 -4
- package/dist/browser/modules/services/simple/block/runner/SimpleBlockRunner.d.ts +5 -2
- package/dist/browser/modules/services/simple/block/runner/SimpleBlockRunner.d.ts.map +1 -1
- package/dist/browser/modules/services/simple/block/runner/producerTuning.d.ts +13 -0
- package/dist/browser/modules/services/simple/block/runner/producerTuning.d.ts.map +1 -0
- package/dist/neutral/ethereum.mjs +469 -95
- package/dist/neutral/ethereum.mjs.map +4 -4
- package/dist/neutral/modules/ethereum/block/findContractDeploymentBlock.d.ts +25 -0
- package/dist/neutral/modules/ethereum/block/findContractDeploymentBlock.d.ts.map +1 -0
- package/dist/neutral/modules/ethereum/block/index.d.ts +1 -0
- package/dist/neutral/modules/ethereum/block/index.d.ts.map +1 -1
- package/dist/neutral/modules/ethereum/drivers/EvmStakeEventZod.d.ts +12 -12
- package/dist/neutral/modules/ethereum/drivers/EvmStakeEventsViewer.d.ts +44 -14
- package/dist/neutral/modules/ethereum/drivers/EvmStakeEventsViewer.d.ts.map +1 -1
- package/dist/neutral/modules/ethereum/drivers/EvmStakeViewer.d.ts +1 -1
- package/dist/neutral/modules/ethereum/drivers/EvmStakeViewer.d.ts.map +1 -1
- package/dist/neutral/modules/ethereum/index.d.ts +2 -0
- package/dist/neutral/modules/ethereum/index.d.ts.map +1 -1
- package/dist/neutral/modules/ethereum/indexing/EvmEventIndexModel.d.ts +107 -0
- package/dist/neutral/modules/ethereum/indexing/EvmEventIndexModel.d.ts.map +1 -0
- package/dist/neutral/modules/ethereum/indexing/EvmEventIndexPaths.d.ts +6 -0
- package/dist/neutral/modules/ethereum/indexing/EvmEventIndexPaths.d.ts.map +1 -0
- package/dist/neutral/modules/ethereum/indexing/EvmEventIndexPublishRunner.d.ts +9 -0
- package/dist/neutral/modules/ethereum/indexing/EvmEventIndexPublishRunner.d.ts.map +1 -0
- package/dist/neutral/modules/ethereum/indexing/RestStakeEventsViewer.d.ts +54 -0
- package/dist/neutral/modules/ethereum/indexing/RestStakeEventsViewer.d.ts.map +1 -0
- package/dist/neutral/modules/ethereum/indexing/index.d.ts +5 -0
- package/dist/neutral/modules/ethereum/indexing/index.d.ts.map +1 -0
- package/dist/neutral/modules/ethereum/providers/AbstractEvmProvider.d.ts +4 -1
- package/dist/neutral/modules/ethereum/providers/AbstractEvmProvider.d.ts.map +1 -1
- package/dist/neutral/modules/ethereum/providers/AbstractEvmViewer.d.ts +5 -1
- package/dist/neutral/modules/ethereum/providers/AbstractEvmViewer.d.ts.map +1 -1
- package/dist/neutral/modules/ethereum/providers/EvmChainContractViewer.d.ts +1 -2
- package/dist/neutral/modules/ethereum/providers/EvmChainContractViewer.d.ts.map +1 -1
- package/dist/neutral/modules/ethereum/providers/EvmStakeTotalsViewer.d.ts +1 -1
- package/dist/neutral/modules/ethereum/providers/EvmStakeTotalsViewer.d.ts.map +1 -1
- package/dist/neutral/modules/ethereum/rpc/index.d.ts +4 -0
- package/dist/neutral/modules/ethereum/rpc/index.d.ts.map +1 -0
- package/dist/neutral/modules/ethereum/rpc/isRpcRangeLimitError.d.ts +15 -0
- package/dist/neutral/modules/ethereum/rpc/isRpcRangeLimitError.d.ts.map +1 -0
- package/dist/neutral/modules/ethereum/rpc/isRpcRateLimitError.d.ts +1 -1
- package/dist/neutral/modules/services/ChainValidator/XyoValidator.d.ts +7 -1
- package/dist/neutral/modules/services/ChainValidator/XyoValidator.d.ts.map +1 -1
- package/dist/neutral/modules/services/Election/BaseElectionService.d.ts +1 -0
- package/dist/neutral/modules/services/Election/BaseElectionService.d.ts.map +1 -1
- package/dist/neutral/modules/services/NetworkStakeStepReward/BaseNetworkStakeStepRewardService.d.ts +1 -2
- package/dist/neutral/modules/services/NetworkStakeStepReward/BaseNetworkStakeStepRewardService.d.ts.map +1 -1
- package/dist/neutral/modules/services/implementation/processPendingBlocks.d.ts +4 -4
- package/dist/neutral/modules/services/simple/block/runner/SimpleBlockRunner.d.ts +5 -2
- package/dist/neutral/modules/services/simple/block/runner/SimpleBlockRunner.d.ts.map +1 -1
- package/dist/neutral/modules/services/simple/block/runner/producerTuning.d.ts +13 -0
- package/dist/neutral/modules/services/simple/block/runner/producerTuning.d.ts.map +1 -0
- package/dist/neutral/services.mjs +46 -13
- package/dist/neutral/services.mjs.map +4 -4
- package/dist/node/modules/ethereum/block/findContractDeploymentBlock.d.ts +25 -0
- package/dist/node/modules/ethereum/block/findContractDeploymentBlock.d.ts.map +1 -0
- package/dist/node/modules/ethereum/block/index.d.ts +1 -0
- package/dist/node/modules/ethereum/block/index.d.ts.map +1 -1
- package/dist/node/modules/ethereum/drivers/EvmStakeEventZod.d.ts +12 -12
- package/dist/node/modules/ethereum/drivers/EvmStakeEventsViewer.d.ts +44 -14
- package/dist/node/modules/ethereum/drivers/EvmStakeEventsViewer.d.ts.map +1 -1
- package/dist/node/modules/ethereum/drivers/EvmStakeViewer.d.ts +1 -1
- package/dist/node/modules/ethereum/drivers/EvmStakeViewer.d.ts.map +1 -1
- package/dist/node/modules/ethereum/index.d.ts +2 -0
- package/dist/node/modules/ethereum/index.d.ts.map +1 -1
- package/dist/node/modules/ethereum/indexing/EvmEventIndexModel.d.ts +107 -0
- package/dist/node/modules/ethereum/indexing/EvmEventIndexModel.d.ts.map +1 -0
- package/dist/node/modules/ethereum/indexing/EvmEventIndexPaths.d.ts +6 -0
- package/dist/node/modules/ethereum/indexing/EvmEventIndexPaths.d.ts.map +1 -0
- package/dist/node/modules/ethereum/indexing/EvmEventIndexPublishRunner.d.ts +9 -0
- package/dist/node/modules/ethereum/indexing/EvmEventIndexPublishRunner.d.ts.map +1 -0
- package/dist/node/modules/ethereum/indexing/RestStakeEventsViewer.d.ts +54 -0
- package/dist/node/modules/ethereum/indexing/RestStakeEventsViewer.d.ts.map +1 -0
- package/dist/node/modules/ethereum/indexing/index.d.ts +5 -0
- package/dist/node/modules/ethereum/indexing/index.d.ts.map +1 -0
- package/dist/node/modules/ethereum/providers/AbstractEvmProvider.d.ts +4 -1
- package/dist/node/modules/ethereum/providers/AbstractEvmProvider.d.ts.map +1 -1
- package/dist/node/modules/ethereum/providers/AbstractEvmViewer.d.ts +5 -1
- package/dist/node/modules/ethereum/providers/AbstractEvmViewer.d.ts.map +1 -1
- package/dist/node/modules/ethereum/providers/EvmChainContractViewer.d.ts +1 -2
- package/dist/node/modules/ethereum/providers/EvmChainContractViewer.d.ts.map +1 -1
- package/dist/node/modules/ethereum/providers/EvmStakeTotalsViewer.d.ts +1 -1
- package/dist/node/modules/ethereum/providers/EvmStakeTotalsViewer.d.ts.map +1 -1
- package/dist/node/modules/ethereum/rpc/index.d.ts +4 -0
- package/dist/node/modules/ethereum/rpc/index.d.ts.map +1 -0
- package/dist/node/modules/ethereum/rpc/isRpcRangeLimitError.d.ts +15 -0
- package/dist/node/modules/ethereum/rpc/isRpcRangeLimitError.d.ts.map +1 -0
- package/dist/node/modules/ethereum/rpc/isRpcRateLimitError.d.ts +1 -1
- package/dist/node/modules/services/ChainValidator/XyoValidator.d.ts +7 -1
- package/dist/node/modules/services/ChainValidator/XyoValidator.d.ts.map +1 -1
- package/dist/node/modules/services/Election/BaseElectionService.d.ts +1 -0
- package/dist/node/modules/services/Election/BaseElectionService.d.ts.map +1 -1
- package/dist/node/modules/services/NetworkStakeStepReward/BaseNetworkStakeStepRewardService.d.ts +1 -2
- package/dist/node/modules/services/NetworkStakeStepReward/BaseNetworkStakeStepRewardService.d.ts.map +1 -1
- package/dist/node/modules/services/implementation/processPendingBlocks.d.ts +4 -4
- package/dist/node/modules/services/simple/block/runner/SimpleBlockRunner.d.ts +5 -2
- package/dist/node/modules/services/simple/block/runner/SimpleBlockRunner.d.ts.map +1 -1
- package/dist/node/modules/services/simple/block/runner/producerTuning.d.ts +13 -0
- package/dist/node/modules/services/simple/block/runner/producerTuning.d.ts.map +1 -0
- package/package.json +21 -45
|
@@ -198,6 +198,59 @@ async function estimateBlockNumberAt(provider, targetDate = DEFAULT_ESTIMATE_BLO
|
|
|
198
198
|
return estimateBlockNumberFromHead(head.number, head.timestamp, targetDate, avgBlockTimeSec);
|
|
199
199
|
}
|
|
200
200
|
|
|
201
|
+
// src/modules/ethereum/block/findContractDeploymentBlock.ts
|
|
202
|
+
var deploymentBlockSearches = /* @__PURE__ */ new WeakMap();
|
|
203
|
+
async function findContractDeploymentBlock(provider, address) {
|
|
204
|
+
let byAddress = deploymentBlockSearches.get(provider);
|
|
205
|
+
if (byAddress === void 0) {
|
|
206
|
+
byAddress = /* @__PURE__ */ new Map();
|
|
207
|
+
deploymentBlockSearches.set(provider, byAddress);
|
|
208
|
+
}
|
|
209
|
+
const key = address.toLowerCase();
|
|
210
|
+
const existing = byAddress.get(key);
|
|
211
|
+
if (existing !== void 0) return await existing;
|
|
212
|
+
const search = searchDeploymentBlock(provider, address);
|
|
213
|
+
byAddress.set(key, search);
|
|
214
|
+
const result = await search;
|
|
215
|
+
if (result === void 0) byAddress.delete(key);
|
|
216
|
+
return result;
|
|
217
|
+
}
|
|
218
|
+
function configuredDeploymentBlock(config) {
|
|
219
|
+
const chain = config?.chain;
|
|
220
|
+
const value = chain?.deploymentBlock;
|
|
221
|
+
return typeof value === "number" && Number.isSafeInteger(value) && value >= 0 ? value : void 0;
|
|
222
|
+
}
|
|
223
|
+
async function resolveContractDeploymentBlock(provider, address, logger) {
|
|
224
|
+
const found = await findContractDeploymentBlock(provider, address);
|
|
225
|
+
if (found !== void 0) {
|
|
226
|
+
logger?.log(`Resolved deployment block ${found} for ${address} via getCode search`);
|
|
227
|
+
return found;
|
|
228
|
+
}
|
|
229
|
+
const estimated = await estimateBlockNumberAt(provider);
|
|
230
|
+
logger?.warn(`Could not resolve deployment block for ${address} via getCode search; using date estimate ${estimated}`);
|
|
231
|
+
return estimated;
|
|
232
|
+
}
|
|
233
|
+
async function searchDeploymentBlock(provider, address) {
|
|
234
|
+
try {
|
|
235
|
+
const head = await provider.getBlockNumber();
|
|
236
|
+
if (await provider.getCode(address, head) === "0x") return void 0;
|
|
237
|
+
let lo = 0;
|
|
238
|
+
let hi = head;
|
|
239
|
+
while (lo < hi) {
|
|
240
|
+
const mid = Math.floor((lo + hi) / 2);
|
|
241
|
+
const code = await provider.getCode(address, mid);
|
|
242
|
+
if (code === "0x") {
|
|
243
|
+
lo = mid + 1;
|
|
244
|
+
} else {
|
|
245
|
+
hi = mid;
|
|
246
|
+
}
|
|
247
|
+
}
|
|
248
|
+
return lo;
|
|
249
|
+
} catch {
|
|
250
|
+
return void 0;
|
|
251
|
+
}
|
|
252
|
+
}
|
|
253
|
+
|
|
201
254
|
// src/modules/ethereum/block/rate/blockRate.ts
|
|
202
255
|
import { isDefined, isFalsy } from "@ariestools/sdk";
|
|
203
256
|
import {
|
|
@@ -450,47 +503,66 @@ async function createChain(signer, stakingTokenAddress, initialBlockProducer, re
|
|
|
450
503
|
|
|
451
504
|
// src/modules/ethereum/drivers/EvmStakeEventsViewer.ts
|
|
452
505
|
import {
|
|
453
|
-
assertEx as
|
|
454
|
-
exists,
|
|
506
|
+
assertEx as assertEx10,
|
|
455
507
|
isDefined as isDefined3,
|
|
456
|
-
toAddress as toAddress3
|
|
457
|
-
toEthAddress as toEthAddress8
|
|
508
|
+
toAddress as toAddress3
|
|
458
509
|
} from "@ariestools/sdk";
|
|
459
|
-
import {
|
|
460
|
-
IAddressStakingEvents__factory
|
|
461
|
-
} from "@xyo-network/typechain";
|
|
510
|
+
import { IAddressStakingEvents__factory } from "@xyo-network/typechain";
|
|
462
511
|
import {
|
|
463
512
|
creatableProvider as creatableProvider4,
|
|
513
|
+
EvmChainViewerMoniker as EvmChainViewerMoniker4,
|
|
464
514
|
StakeEventsViewerMoniker
|
|
465
515
|
} from "@xyo-network/xl1-sdk";
|
|
466
516
|
import { asAttoXL1 } from "@xyo-network/xl1-sdk";
|
|
517
|
+
import { EventLog } from "ethers";
|
|
467
518
|
|
|
468
519
|
// src/modules/ethereum/providers/AbstractEvmProvider.ts
|
|
469
|
-
import {
|
|
520
|
+
import {
|
|
521
|
+
assertEx as assertEx6,
|
|
522
|
+
toEthAddress as toEthAddress4
|
|
523
|
+
} from "@ariestools/sdk";
|
|
470
524
|
import { AbstractCreatableProvider } from "@xyo-network/xl1-sdk";
|
|
471
525
|
var AbstractEvmProvider = class extends AbstractCreatableProvider {
|
|
472
526
|
_contract;
|
|
527
|
+
_address;
|
|
528
|
+
get address() {
|
|
529
|
+
return assertEx6(this._address, () => "EVM contract address not initialized");
|
|
530
|
+
}
|
|
473
531
|
get contract() {
|
|
474
532
|
return this._contract;
|
|
475
533
|
}
|
|
476
534
|
async createHandler() {
|
|
477
535
|
await super.createHandler();
|
|
478
|
-
this.
|
|
536
|
+
this._address = this.params.address ?? toEthAddress4(assertEx6(this.config?.chain?.id, () => "EVM provider requires an address param or config.chain.id"));
|
|
537
|
+
this._contract = this.connectContract(this._address);
|
|
479
538
|
}
|
|
480
539
|
};
|
|
481
540
|
|
|
482
541
|
// src/modules/ethereum/providers/AbstractEvmRunner.ts
|
|
483
|
-
import { assertEx as
|
|
542
|
+
import { assertEx as assertEx8 } from "@ariestools/sdk";
|
|
484
543
|
|
|
485
544
|
// src/modules/ethereum/providers/AbstractEvmViewer.ts
|
|
545
|
+
import { assertEx as assertEx7 } from "@ariestools/sdk";
|
|
546
|
+
import { EvmChainViewerMoniker } from "@xyo-network/xl1-sdk";
|
|
486
547
|
var AbstractEvmViewer = class extends AbstractEvmProvider {
|
|
548
|
+
_provider;
|
|
549
|
+
get provider() {
|
|
550
|
+
return assertEx7(this.params.provider ?? this._provider, () => "EVM provider not initialized");
|
|
551
|
+
}
|
|
552
|
+
async createHandler() {
|
|
553
|
+
if (this.params.provider === void 0) {
|
|
554
|
+
const evmChainViewer = await this.locateAndCreate(EvmChainViewerMoniker);
|
|
555
|
+
this._provider = await evmChainViewer.provider();
|
|
556
|
+
}
|
|
557
|
+
await super.createHandler();
|
|
558
|
+
}
|
|
487
559
|
};
|
|
488
560
|
|
|
489
561
|
// src/modules/ethereum/providers/AbstractEvmRunner.ts
|
|
490
562
|
var AbstractEvmRunner = class extends AbstractEvmViewer {
|
|
491
563
|
static async paramsHandler(params) {
|
|
492
|
-
const runner =
|
|
493
|
-
const provider =
|
|
564
|
+
const runner = assertEx8(params?.runner, () => new Error("No runner defined"));
|
|
565
|
+
const provider = assertEx8(runner.provider, () => new Error("Runner must have a provider defined"));
|
|
494
566
|
return { ...await super.paramsHandler({ ...params, provider }), runner };
|
|
495
567
|
}
|
|
496
568
|
};
|
|
@@ -498,7 +570,7 @@ var AbstractEvmRunner = class extends AbstractEvmViewer {
|
|
|
498
570
|
// src/modules/ethereum/providers/EvmChainContractViewer.ts
|
|
499
571
|
import {
|
|
500
572
|
asHash,
|
|
501
|
-
assertEx as
|
|
573
|
+
assertEx as assertEx9,
|
|
502
574
|
toAddress as toAddress2,
|
|
503
575
|
toEthAddress as toEthAddress5,
|
|
504
576
|
toHex
|
|
@@ -507,6 +579,7 @@ import { IStakedXyoChain__factory } from "@xyo-network/typechain";
|
|
|
507
579
|
import {
|
|
508
580
|
ChainContractViewerMoniker,
|
|
509
581
|
creatableProvider,
|
|
582
|
+
EvmChainViewerMoniker as EvmChainViewerMoniker2,
|
|
510
583
|
toXL1BlockNumber,
|
|
511
584
|
withContextCacheResponse
|
|
512
585
|
} from "@xyo-network/xl1-sdk";
|
|
@@ -519,11 +592,8 @@ var EvmChainContractViewer = class extends AbstractEvmViewer {
|
|
|
519
592
|
_minWithdrawalBlocks;
|
|
520
593
|
_rewardsContract;
|
|
521
594
|
_stakingTokenAddress;
|
|
522
|
-
get address() {
|
|
523
|
-
return this.params.address;
|
|
524
|
-
}
|
|
525
595
|
chainId() {
|
|
526
|
-
return toHex(this.
|
|
596
|
+
return toHex(this.address, { prefix: false });
|
|
527
597
|
}
|
|
528
598
|
async chainIdAtBlockNumber(blockNumber) {
|
|
529
599
|
return await withContextCacheResponse(this.context, "chainIdAtBlockNumber", String(blockNumber), async () => {
|
|
@@ -531,7 +601,7 @@ var EvmChainContractViewer = class extends AbstractEvmViewer {
|
|
|
531
601
|
let contractViewer = this;
|
|
532
602
|
let forkedAtBlockNumber = await contractViewer.forkedAtBlockNumber();
|
|
533
603
|
while (forkedAtBlockNumber !== null && blockNumber <= forkedAtBlockNumber) {
|
|
534
|
-
contractViewer =
|
|
604
|
+
contractViewer = assertEx9(await contractViewer.forkedChainContractViewer(), () => "Forked chain contract viewer is undefined");
|
|
535
605
|
forkedAtBlockNumber = await contractViewer.forkedAtBlockNumber();
|
|
536
606
|
chainId = await contractViewer.chainId();
|
|
537
607
|
}
|
|
@@ -556,7 +626,11 @@ var EvmChainContractViewer = class extends AbstractEvmViewer {
|
|
|
556
626
|
async forkedChainContractViewer() {
|
|
557
627
|
this._forkedChainContractViewer = this._forkedChainContractViewer ?? (async () => {
|
|
558
628
|
const address = await this.forkedChainId();
|
|
559
|
-
return EvmChainContractViewer.create({
|
|
629
|
+
return EvmChainContractViewer.create({
|
|
630
|
+
...this.params,
|
|
631
|
+
address: toEthAddress5(address),
|
|
632
|
+
provider: this.provider
|
|
633
|
+
});
|
|
560
634
|
})();
|
|
561
635
|
return await this._forkedChainContractViewer;
|
|
562
636
|
}
|
|
@@ -583,12 +657,12 @@ var EvmChainContractViewer = class extends AbstractEvmViewer {
|
|
|
583
657
|
return await this._stakingTokenAddress;
|
|
584
658
|
}
|
|
585
659
|
connectContract(address) {
|
|
586
|
-
return IStakedXyoChain__factory.connect(address, this.
|
|
660
|
+
return IStakedXyoChain__factory.connect(address, this.provider);
|
|
587
661
|
}
|
|
588
662
|
};
|
|
589
663
|
__publicField(EvmChainContractViewer, "connectionTypes", ["evm-rpc"]);
|
|
590
664
|
__publicField(EvmChainContractViewer, "defaultMoniker", ChainContractViewerMoniker);
|
|
591
|
-
__publicField(EvmChainContractViewer, "dependencies", []);
|
|
665
|
+
__publicField(EvmChainContractViewer, "dependencies", [EvmChainViewerMoniker2]);
|
|
592
666
|
__publicField(EvmChainContractViewer, "monikers", [ChainContractViewerMoniker]);
|
|
593
667
|
__publicField(EvmChainContractViewer, "surface", "node");
|
|
594
668
|
EvmChainContractViewer = __decorateClass([
|
|
@@ -638,6 +712,7 @@ import { toEthAddress as toEthAddress7 } from "@ariestools/sdk";
|
|
|
638
712
|
import { IStakedXyoChain__factory as IStakedXyoChain__factory3 } from "@xyo-network/typechain";
|
|
639
713
|
import {
|
|
640
714
|
creatableProvider as creatableProvider3,
|
|
715
|
+
EvmChainViewerMoniker as EvmChainViewerMoniker3,
|
|
641
716
|
StakeTotalsViewerMoniker
|
|
642
717
|
} from "@xyo-network/xl1-sdk";
|
|
643
718
|
import { getAddress as getAddress2 } from "ethers/address";
|
|
@@ -665,18 +740,68 @@ var EvmStakeTotalsViewer = class extends AbstractEvmViewer {
|
|
|
665
740
|
return await this.contract.withdrawnByStaker(getAddress2(staker));
|
|
666
741
|
}
|
|
667
742
|
connectContract(address) {
|
|
668
|
-
return IStakedXyoChain__factory3.connect(address, this.
|
|
743
|
+
return IStakedXyoChain__factory3.connect(address, this.provider);
|
|
669
744
|
}
|
|
670
745
|
};
|
|
671
746
|
__publicField(EvmStakeTotalsViewer, "connectionTypes", ["evm-rpc"]);
|
|
672
747
|
__publicField(EvmStakeTotalsViewer, "defaultMoniker", StakeTotalsViewerMoniker);
|
|
673
|
-
__publicField(EvmStakeTotalsViewer, "dependencies", []);
|
|
748
|
+
__publicField(EvmStakeTotalsViewer, "dependencies", [EvmChainViewerMoniker3]);
|
|
674
749
|
__publicField(EvmStakeTotalsViewer, "monikers", [StakeTotalsViewerMoniker]);
|
|
675
750
|
__publicField(EvmStakeTotalsViewer, "surface", "node");
|
|
676
751
|
EvmStakeTotalsViewer = __decorateClass([
|
|
677
752
|
creatableProvider3()
|
|
678
753
|
], EvmStakeTotalsViewer);
|
|
679
754
|
|
|
755
|
+
// src/modules/ethereum/rpc/isRpcRangeLimitError.ts
|
|
756
|
+
function collectErrorTexts(error) {
|
|
757
|
+
const seen = /* @__PURE__ */ new Set();
|
|
758
|
+
const queue = [error];
|
|
759
|
+
const texts = [];
|
|
760
|
+
while (queue.length > 0) {
|
|
761
|
+
const current = queue.pop();
|
|
762
|
+
if (current === void 0 || current === null || seen.has(current)) {
|
|
763
|
+
continue;
|
|
764
|
+
}
|
|
765
|
+
seen.add(current);
|
|
766
|
+
if (typeof current === "string") {
|
|
767
|
+
texts.push(current);
|
|
768
|
+
continue;
|
|
769
|
+
}
|
|
770
|
+
if (typeof current !== "object") {
|
|
771
|
+
continue;
|
|
772
|
+
}
|
|
773
|
+
if (Array.isArray(current)) {
|
|
774
|
+
const items = current;
|
|
775
|
+
queue.push(...items);
|
|
776
|
+
continue;
|
|
777
|
+
}
|
|
778
|
+
const record = current;
|
|
779
|
+
for (const key of ["message", "shortMessage", "reason", "error", "info", "data", "value", "body", "payload"]) {
|
|
780
|
+
if (key in record) {
|
|
781
|
+
queue.push(record[key]);
|
|
782
|
+
}
|
|
783
|
+
}
|
|
784
|
+
}
|
|
785
|
+
return texts;
|
|
786
|
+
}
|
|
787
|
+
function matchesRangeLimitText(text) {
|
|
788
|
+
const normalized = text.toLowerCase();
|
|
789
|
+
return /range \d+ exceeds limit/.test(normalized) || /exceeds? (?:the )?max(?:imum)? (?:block )?range/.test(normalized) || normalized.includes("block range is too") || normalized.includes("log response size exceeded") || normalized.includes("query returned more than") || normalized.includes("response size exceeded") || /getlogs (?:is )?limited to/.test(normalized);
|
|
790
|
+
}
|
|
791
|
+
function isRpcRangeLimitError(error) {
|
|
792
|
+
return collectErrorTexts(error).some((text) => matchesRangeLimitText(text));
|
|
793
|
+
}
|
|
794
|
+
function rpcRangeLimitFromError(error) {
|
|
795
|
+
for (const text of collectErrorTexts(error)) {
|
|
796
|
+
const match = /(?:exceeds )?limit(?:ed)? (?:of|to) (\d+)/i.exec(text);
|
|
797
|
+
if (match !== null) {
|
|
798
|
+
const limit = Number(match[1]);
|
|
799
|
+
if (Number.isSafeInteger(limit) && limit > 0) return limit;
|
|
800
|
+
}
|
|
801
|
+
}
|
|
802
|
+
return void 0;
|
|
803
|
+
}
|
|
804
|
+
|
|
680
805
|
// src/modules/ethereum/rpc/withRpcRateLimitBackoff.ts
|
|
681
806
|
import { delay } from "@ariestools/sdk";
|
|
682
807
|
|
|
@@ -725,11 +850,11 @@ function isRpcRateLimitError(error) {
|
|
|
725
850
|
return false;
|
|
726
851
|
}
|
|
727
852
|
function isRateLimitCode(code) {
|
|
728
|
-
return code === 429 || code === -32005 || code === -32016;
|
|
853
|
+
return code === 429 || code === -32005 || code === -32007 || code === -32016;
|
|
729
854
|
}
|
|
730
855
|
function matchesRateLimitText(text) {
|
|
731
856
|
const normalized = text.toLowerCase();
|
|
732
|
-
return normalized.includes("too many requests") || normalized.includes("rate limit") || normalized.includes("rate exceeded") || normalized.includes("call rate limit") || normalized.includes("exceeded the quota");
|
|
857
|
+
return normalized.includes("too many requests") || normalized.includes("rate limit") || normalized.includes("rate exceeded") || normalized.includes("call rate limit") || normalized.includes("request limit") || normalized.includes("exceeded the quota");
|
|
733
858
|
}
|
|
734
859
|
|
|
735
860
|
// src/modules/ethereum/rpc/withRpcRateLimitBackoff.ts
|
|
@@ -819,19 +944,26 @@ var asEvmStakeWithdrawnEvent = zodAsFactory(EvmStakeWithdrawnEventZod, "asEvmSta
|
|
|
819
944
|
var toEvmStakeWithdrawnEvent = zodToFactory(EvmStakeWithdrawnEventZod, "toEvmStakeWithdrawnEvent");
|
|
820
945
|
|
|
821
946
|
// src/modules/ethereum/drivers/EvmStakeEventsViewer.ts
|
|
822
|
-
var
|
|
947
|
+
var DEFAULT_EVENT_QUERY_START_CHUNK_SIZE = 1e5;
|
|
948
|
+
var MIN_EVENT_QUERY_BLOCK_CHUNK_SIZE = 1e3;
|
|
823
949
|
var DEFAULT_EVENT_QUERY_MAX_ATTEMPTS = 8;
|
|
824
950
|
var DEFAULT_EVENT_QUERY_INITIAL_DELAY_MS = 1e3;
|
|
951
|
+
var STAKE_EVENT_NAMES = /* @__PURE__ */ new Set(["StakeAdded", "StakeRemoved", "StakeWithdrawn"]);
|
|
825
952
|
var EvmStakeEventsViewer = class extends AbstractEvmViewer {
|
|
826
953
|
moniker = EvmStakeEventsViewer.defaultMoniker;
|
|
827
|
-
/**
|
|
954
|
+
/**
|
|
955
|
+
* Current adaptive chunk size — shrinks when the provider rejects a range
|
|
956
|
+
* and persists across loads so the tail catch-up reuses the learned limit.
|
|
957
|
+
*/
|
|
958
|
+
adaptiveChunkSize;
|
|
959
|
+
/** Set at start when `params.deploymentBlock` is omitted (getCode binary search, date-estimate fallback). */
|
|
828
960
|
defaultDeploymentBlock = 0;
|
|
829
961
|
eventCache = /* @__PURE__ */ new Map();
|
|
830
962
|
get deploymentBlock() {
|
|
831
|
-
return this.params.deploymentBlock ?? this.defaultDeploymentBlock;
|
|
963
|
+
return this.params.deploymentBlock ?? this.config.chain?.deploymentBlock ?? this.defaultDeploymentBlock;
|
|
832
964
|
}
|
|
833
965
|
get eventQueryBlockChunkSize() {
|
|
834
|
-
return this.
|
|
966
|
+
return this.fixedEventQueryBlockChunkSize ?? this.adaptiveChunkSize ?? DEFAULT_EVENT_QUERY_START_CHUNK_SIZE;
|
|
835
967
|
}
|
|
836
968
|
get eventQueryInitialDelayMs() {
|
|
837
969
|
return this.params.eventQueryInitialDelayMs ?? DEFAULT_EVENT_QUERY_INITIAL_DELAY_MS;
|
|
@@ -839,6 +971,15 @@ var EvmStakeEventsViewer = class extends AbstractEvmViewer {
|
|
|
839
971
|
get eventQueryMaxAttempts() {
|
|
840
972
|
return this.params.eventQueryMaxAttempts ?? DEFAULT_EVENT_QUERY_MAX_ATTEMPTS;
|
|
841
973
|
}
|
|
974
|
+
/**
|
|
975
|
+
* Fixed eth_getLogs range: explicit param (deprecated), else the bound evm-rpc
|
|
976
|
+
* connection profile's `eventQueryBlockChunkSize`. Undefined → adaptive sizing.
|
|
977
|
+
*/
|
|
978
|
+
get fixedEventQueryBlockChunkSize() {
|
|
979
|
+
if (isDefined3(this.params.eventQueryBlockChunkSize)) return this.params.eventQueryBlockChunkSize;
|
|
980
|
+
const bound = this.boundConnection;
|
|
981
|
+
return bound?.config.type === "evm-rpc" ? bound.config.eventQueryBlockChunkSize : void 0;
|
|
982
|
+
}
|
|
842
983
|
async positionCount(range) {
|
|
843
984
|
const events = await this.stakeEvents(range);
|
|
844
985
|
const positionIds = events.map((e) => e.args.id);
|
|
@@ -870,7 +1011,7 @@ var EvmStakeEventsViewer = class extends AbstractEvmViewer {
|
|
|
870
1011
|
return result;
|
|
871
1012
|
}
|
|
872
1013
|
connectContract(address) {
|
|
873
|
-
return IAddressStakingEvents__factory.connect(address, this.
|
|
1014
|
+
return IAddressStakingEvents__factory.connect(address, this.provider);
|
|
874
1015
|
}
|
|
875
1016
|
onEventHandler(staked, staker, id, amount, event, throwOnInvalid = false) {
|
|
876
1017
|
const validatedEventResult = EvmStakeEventZod.safeParse(event);
|
|
@@ -900,14 +1041,14 @@ var EvmStakeEventsViewer = class extends AbstractEvmViewer {
|
|
|
900
1041
|
}
|
|
901
1042
|
async startHandler() {
|
|
902
1043
|
try {
|
|
903
|
-
const provider =
|
|
904
|
-
const historyEndBlock =
|
|
1044
|
+
const provider = assertEx10(this.contract.runner?.provider, () => new Error("Failed to get provider"));
|
|
1045
|
+
const historyEndBlock = assertEx10(await provider.getBlockNumber(), () => new Error("Failed to get currentEthBlock"));
|
|
905
1046
|
if (!isDefined3(this.params.deploymentBlock)) {
|
|
906
|
-
this.defaultDeploymentBlock = await
|
|
1047
|
+
this.defaultDeploymentBlock = configuredDeploymentBlock(this.config) ?? await resolveContractDeploymentBlock(provider, this.address, this.logger);
|
|
907
1048
|
}
|
|
908
1049
|
await this.loadHistoricalEvents(this.deploymentBlock, historyEndBlock);
|
|
909
1050
|
await this.attachLiveListeners();
|
|
910
|
-
const latestBlock =
|
|
1051
|
+
const latestBlock = assertEx10(await provider.getBlockNumber(), () => new Error("Failed to get latestEthBlock"));
|
|
911
1052
|
if (latestBlock > historyEndBlock) {
|
|
912
1053
|
await this.loadHistoricalEvents(historyEndBlock + 1, latestBlock);
|
|
913
1054
|
}
|
|
@@ -927,74 +1068,76 @@ var EvmStakeEventsViewer = class extends AbstractEvmViewer {
|
|
|
927
1068
|
this.onEventHandler(staked, staker, id, amount, event);
|
|
928
1069
|
});
|
|
929
1070
|
}
|
|
1071
|
+
/**
|
|
1072
|
+
* Loads all stake events for the range with a single address-only sweep —
|
|
1073
|
+
* one eth_getLogs pass per chunk covers all three event types (demuxed by
|
|
1074
|
+
* event name client-side) instead of three filtered sweeps over the same
|
|
1075
|
+
* blocks. Chunk size adapts to the provider: on a range/result-limit error
|
|
1076
|
+
* the chunk shrinks (to the advertised limit when the error states one,
|
|
1077
|
+
* halving otherwise) and the window is retried; rate limits retry at the
|
|
1078
|
+
* same size with backoff.
|
|
1079
|
+
*/
|
|
930
1080
|
async loadHistoricalEvents(fromBlock, toBlock) {
|
|
931
1081
|
if (fromBlock > toBlock) {
|
|
932
1082
|
return;
|
|
933
1083
|
}
|
|
934
|
-
|
|
935
|
-
|
|
936
|
-
|
|
937
|
-
|
|
938
|
-
|
|
939
|
-
|
|
940
|
-
|
|
941
|
-
this.logger?.log(
|
|
942
|
-
`Cached ${allStakeEvents.length} stake events from blocks ${fromBlock}-${toBlock} (${chunks.length} chunk(s) of up to ${this.eventQueryBlockChunkSize} blocks)`
|
|
943
|
-
);
|
|
944
|
-
for (const event of allStakeEvents) {
|
|
945
|
-
this.eventCache.set(`${Number(event.args.id)}|${event.name}|${event.args.staker}`, event);
|
|
946
|
-
}
|
|
947
|
-
}
|
|
948
|
-
async stakeEventsNative(range = [0, "latest"], filter) {
|
|
949
|
-
const name = filter?.name;
|
|
950
|
-
if (!isDefined3(name)) {
|
|
951
|
-
throw new Error("Only filtered stake events (by name) are supported");
|
|
952
|
-
}
|
|
953
|
-
const stakedFilter = filter?.args?.staked;
|
|
954
|
-
const stakerFilter = filter?.args?.staker;
|
|
955
|
-
const stakedFilterEth = isDefined3(stakedFilter) ? toEthAddress8(stakedFilter) : void 0;
|
|
956
|
-
const stakerFilterEth = isDefined3(stakerFilter) ? toEthAddress8(stakerFilter) : void 0;
|
|
957
|
-
const ethFilter = this.contract.filters[name](stakedFilterEth, stakerFilterEth);
|
|
958
|
-
const fromBlock = range[0];
|
|
959
|
-
const toBlock = range[1] === "latest" ? assertEx8(await this.contract.runner?.provider?.getBlockNumber(), () => new Error("Failed to resolve latest block")) : range[1];
|
|
960
|
-
if (fromBlock > toBlock) {
|
|
961
|
-
return [];
|
|
962
|
-
}
|
|
963
|
-
const chunkSize = this.eventQueryBlockChunkSize;
|
|
964
|
-
const chunks = blockRangeChunks(fromBlock, toBlock, chunkSize);
|
|
965
|
-
const ethEventGroups = [];
|
|
966
|
-
for (const [chunkFrom, chunkTo] of chunks) {
|
|
1084
|
+
let eventCount = 0;
|
|
1085
|
+
let chunkCount = 0;
|
|
1086
|
+
let cursor = fromBlock;
|
|
1087
|
+
while (cursor <= toBlock) {
|
|
1088
|
+
const chunkSize = this.eventQueryBlockChunkSize;
|
|
1089
|
+
const chunkTo = Math.min(cursor + chunkSize - 1, toBlock);
|
|
1090
|
+
let logs;
|
|
967
1091
|
try {
|
|
968
|
-
|
|
969
|
-
|
|
1092
|
+
logs = await withRpcRateLimitBackoff(
|
|
1093
|
+
// '*' = every event on the contract address; parsed against the ABI
|
|
1094
|
+
() => this.contract.queryFilter("*", cursor, chunkTo),
|
|
970
1095
|
{
|
|
971
1096
|
initialDelayMs: this.eventQueryInitialDelayMs,
|
|
972
1097
|
maxAttempts: this.eventQueryMaxAttempts,
|
|
973
1098
|
onRetry: (_error, attempt, delayMs) => {
|
|
974
1099
|
this.logger?.warn(
|
|
975
|
-
`Rate limited fetching
|
|
1100
|
+
`Rate limited fetching logs for blocks ${cursor}-${chunkTo} (attempt ${attempt}/${this.eventQueryMaxAttempts}); backing off ${delayMs}ms`
|
|
976
1101
|
);
|
|
977
1102
|
}
|
|
978
1103
|
}
|
|
979
|
-
)
|
|
1104
|
+
);
|
|
980
1105
|
} catch (error) {
|
|
1106
|
+
const isFixedSize = isDefined3(this.fixedEventQueryBlockChunkSize);
|
|
1107
|
+
if (!isFixedSize && isRpcRangeLimitError(error) && chunkSize > MIN_EVENT_QUERY_BLOCK_CHUNK_SIZE) {
|
|
1108
|
+
const advertised = rpcRangeLimitFromError(error);
|
|
1109
|
+
const nextSize = Math.max(
|
|
1110
|
+
MIN_EVENT_QUERY_BLOCK_CHUNK_SIZE,
|
|
1111
|
+
Math.min(advertised ?? Number.MAX_SAFE_INTEGER, Math.floor(chunkSize / 2))
|
|
1112
|
+
);
|
|
1113
|
+
this.adaptiveChunkSize = nextSize;
|
|
1114
|
+
this.logger?.log(`eth_getLogs rejected a ${chunkSize}-block range; retrying at ${nextSize}`);
|
|
1115
|
+
continue;
|
|
1116
|
+
}
|
|
981
1117
|
this.logger?.error(
|
|
982
|
-
`eth_getLogs failed for
|
|
1118
|
+
`eth_getLogs failed for blocks ${cursor}-${chunkTo} (from=${fromBlock} to=${toBlock}):`,
|
|
983
1119
|
error
|
|
984
1120
|
);
|
|
985
1121
|
throw error;
|
|
986
1122
|
}
|
|
1123
|
+
chunkCount++;
|
|
1124
|
+
for (const log of logs) {
|
|
1125
|
+
if (log instanceof EventLog && STAKE_EVENT_NAMES.has(log.eventName)) {
|
|
1126
|
+
const [staked, by, id, amount] = log.args;
|
|
1127
|
+
const event = this.onEventHandler(staked, by, id, amount, log, true);
|
|
1128
|
+
if (event !== void 0) eventCount++;
|
|
1129
|
+
}
|
|
1130
|
+
}
|
|
1131
|
+
cursor = chunkTo + 1;
|
|
987
1132
|
}
|
|
988
|
-
|
|
989
|
-
|
|
990
|
-
|
|
991
|
-
return this.onEventHandler(e.args.staked, e.args.by, e.args.id, e.args.amount, e, true);
|
|
992
|
-
}).filter(exists);
|
|
1133
|
+
this.logger?.log(
|
|
1134
|
+
`Cached ${eventCount} stake events from blocks ${fromBlock}-${toBlock} (${chunkCount} chunk(s), final chunk size ${this.eventQueryBlockChunkSize})`
|
|
1135
|
+
);
|
|
993
1136
|
}
|
|
994
1137
|
};
|
|
995
1138
|
__publicField(EvmStakeEventsViewer, "connectionTypes", ["evm-rpc"]);
|
|
996
1139
|
__publicField(EvmStakeEventsViewer, "defaultMoniker", StakeEventsViewerMoniker);
|
|
997
|
-
__publicField(EvmStakeEventsViewer, "dependencies", []);
|
|
1140
|
+
__publicField(EvmStakeEventsViewer, "dependencies", [EvmChainViewerMoniker4]);
|
|
998
1141
|
__publicField(EvmStakeEventsViewer, "monikers", [StakeEventsViewerMoniker]);
|
|
999
1142
|
__publicField(EvmStakeEventsViewer, "surface", "node");
|
|
1000
1143
|
EvmStakeEventsViewer = __decorateClass([
|
|
@@ -1003,14 +1146,14 @@ EvmStakeEventsViewer = __decorateClass([
|
|
|
1003
1146
|
|
|
1004
1147
|
// src/modules/ethereum/drivers/EvmStakeViewer.ts
|
|
1005
1148
|
import {
|
|
1006
|
-
assertEx as
|
|
1007
|
-
isDefined as isDefined4,
|
|
1149
|
+
assertEx as assertEx11,
|
|
1008
1150
|
toAddress as toAddress4,
|
|
1009
|
-
toEthAddress as
|
|
1151
|
+
toEthAddress as toEthAddress8
|
|
1010
1152
|
} from "@ariestools/sdk";
|
|
1011
1153
|
import { IAddressStaking__factory } from "@xyo-network/typechain";
|
|
1012
1154
|
import {
|
|
1013
1155
|
creatableProvider as creatableProvider5,
|
|
1156
|
+
EvmChainViewerMoniker as EvmChainViewerMoniker5,
|
|
1014
1157
|
StakeEventsViewerMoniker as StakeEventsViewerMoniker2,
|
|
1015
1158
|
StakeViewerMoniker
|
|
1016
1159
|
} from "@xyo-network/xl1-sdk";
|
|
@@ -1044,12 +1187,12 @@ var EvmStakeViewer = class extends AbstractEvmViewer {
|
|
|
1044
1187
|
}
|
|
1045
1188
|
async activeByAddressStaked(address) {
|
|
1046
1189
|
return await this._callMutex.runExclusive(async () => {
|
|
1047
|
-
return await this.contract.activeByAddressStaked(
|
|
1190
|
+
return await this.contract.activeByAddressStaked(toEthAddress8(address));
|
|
1048
1191
|
});
|
|
1049
1192
|
}
|
|
1050
1193
|
async activeByStaker(address) {
|
|
1051
1194
|
return await this._callMutex.runExclusive(async () => {
|
|
1052
|
-
return await this.contract.activeByStaker(
|
|
1195
|
+
return await this.contract.activeByStaker(toEthAddress8(address));
|
|
1053
1196
|
});
|
|
1054
1197
|
}
|
|
1055
1198
|
activeStakes() {
|
|
@@ -1058,7 +1201,7 @@ var EvmStakeViewer = class extends AbstractEvmViewer {
|
|
|
1058
1201
|
async createHandler() {
|
|
1059
1202
|
await super.createHandler();
|
|
1060
1203
|
this._stakeEventsViewer = await this.locator.getInstance(StakeEventsViewerMoniker2);
|
|
1061
|
-
this._deploymentBlock =
|
|
1204
|
+
this._deploymentBlock = this.params.deploymentBlock ?? configuredDeploymentBlock(this.config) ?? await resolveContractDeploymentBlock(this.provider, this.address, this.logger);
|
|
1062
1205
|
}
|
|
1063
1206
|
minWithdrawalBlocks() {
|
|
1064
1207
|
return 0;
|
|
@@ -1070,7 +1213,7 @@ var EvmStakeViewer = class extends AbstractEvmViewer {
|
|
|
1070
1213
|
}
|
|
1071
1214
|
async pendingByStaker(staker) {
|
|
1072
1215
|
return await this._callMutex.runExclusive(async () => {
|
|
1073
|
-
return await this.contract.pendingByStaker(
|
|
1216
|
+
return await this.contract.pendingByStaker(toEthAddress8(staker));
|
|
1074
1217
|
});
|
|
1075
1218
|
}
|
|
1076
1219
|
removedStakes() {
|
|
@@ -1095,7 +1238,7 @@ var EvmStakeViewer = class extends AbstractEvmViewer {
|
|
|
1095
1238
|
}
|
|
1096
1239
|
async stakeByStaker(staker, slot) {
|
|
1097
1240
|
return await this._callMutex.runExclusive(async () => {
|
|
1098
|
-
const ethResult = await this.contract.getStake(
|
|
1241
|
+
const ethResult = await this.contract.getStake(toEthAddress8(staker), slot);
|
|
1099
1242
|
const stake = ethStakeToStake(ethResult);
|
|
1100
1243
|
this._stakeCache.set(stake.id, stake);
|
|
1101
1244
|
return stake;
|
|
@@ -1137,14 +1280,14 @@ var EvmStakeViewer = class extends AbstractEvmViewer {
|
|
|
1137
1280
|
}
|
|
1138
1281
|
async withdrawnByStaker(staker) {
|
|
1139
1282
|
return await this._callMutex.runExclusive(async () => {
|
|
1140
|
-
return await this.contract.withdrawnByStaker(
|
|
1283
|
+
return await this.contract.withdrawnByStaker(toEthAddress8(staker));
|
|
1141
1284
|
});
|
|
1142
1285
|
}
|
|
1143
1286
|
withdrawnStakes() {
|
|
1144
1287
|
return this._stakeCache.values().filter((stake) => stake.removeBlock !== 0 && stake.withdrawBlock !== 0).toArray();
|
|
1145
1288
|
}
|
|
1146
1289
|
connectContract(address) {
|
|
1147
|
-
return IAddressStaking__factory.connect(address, this.
|
|
1290
|
+
return IAddressStaking__factory.connect(address, this.provider);
|
|
1148
1291
|
}
|
|
1149
1292
|
async startHandler() {
|
|
1150
1293
|
await this.contract.on(this.contract.getEvent("StakeAdded"), (staked, staker, id, amount, event) => {
|
|
@@ -1159,14 +1302,14 @@ var EvmStakeViewer = class extends AbstractEvmViewer {
|
|
|
1159
1302
|
});
|
|
1160
1303
|
});
|
|
1161
1304
|
await this.contract.on(this.contract.getEvent("StakeRemoved"), (staked, staker, id, amount, event) => {
|
|
1162
|
-
const stake =
|
|
1305
|
+
const stake = assertEx11(this._stakeCache.get(Number(id)));
|
|
1163
1306
|
this._stakeCache.set(Number(id), {
|
|
1164
1307
|
...stake,
|
|
1165
1308
|
removeBlock: event.blockNumber
|
|
1166
1309
|
});
|
|
1167
1310
|
});
|
|
1168
1311
|
await this.contract.on(this.contract.getEvent("StakeWithdrawn"), (staked, staker, id, amount, event) => {
|
|
1169
|
-
const stake =
|
|
1312
|
+
const stake = assertEx11(this._stakeCache.get(Number(id)));
|
|
1170
1313
|
this._stakeCache.set(Number(id), {
|
|
1171
1314
|
...stake,
|
|
1172
1315
|
withdrawBlock: event.blockNumber
|
|
@@ -1199,7 +1342,7 @@ var EvmStakeViewer = class extends AbstractEvmViewer {
|
|
|
1199
1342
|
return;
|
|
1200
1343
|
}
|
|
1201
1344
|
if (event.name === "StakeRemoved") {
|
|
1202
|
-
const stake =
|
|
1345
|
+
const stake = assertEx11(this._stakeCache.get(event.args.id));
|
|
1203
1346
|
this._stakeCache.set(event.args.id, {
|
|
1204
1347
|
...stake,
|
|
1205
1348
|
removeBlock: event.time
|
|
@@ -1207,7 +1350,7 @@ var EvmStakeViewer = class extends AbstractEvmViewer {
|
|
|
1207
1350
|
return;
|
|
1208
1351
|
}
|
|
1209
1352
|
if (event.name === "StakeWithdrawn") {
|
|
1210
|
-
const stake =
|
|
1353
|
+
const stake = assertEx11(this._stakeCache.get(event.args.id));
|
|
1211
1354
|
this._stakeCache.set(event.args.id, {
|
|
1212
1355
|
...stake,
|
|
1213
1356
|
withdrawBlock: event.time
|
|
@@ -1217,7 +1360,7 @@ var EvmStakeViewer = class extends AbstractEvmViewer {
|
|
|
1217
1360
|
};
|
|
1218
1361
|
__publicField(EvmStakeViewer, "connectionTypes", ["evm-rpc"]);
|
|
1219
1362
|
__publicField(EvmStakeViewer, "defaultMoniker", StakeViewerMoniker);
|
|
1220
|
-
__publicField(EvmStakeViewer, "dependencies", []);
|
|
1363
|
+
__publicField(EvmStakeViewer, "dependencies", [EvmChainViewerMoniker5, StakeEventsViewerMoniker2]);
|
|
1221
1364
|
__publicField(EvmStakeViewer, "monikers", [StakeViewerMoniker]);
|
|
1222
1365
|
__publicField(EvmStakeViewer, "surface", "node");
|
|
1223
1366
|
EvmStakeViewer = __decorateClass([
|
|
@@ -1233,19 +1376,234 @@ var getDefaultGasConfig = () => {
|
|
|
1233
1376
|
gasPrice: parseUnits2("100", "gwei")
|
|
1234
1377
|
};
|
|
1235
1378
|
};
|
|
1379
|
+
|
|
1380
|
+
// src/modules/ethereum/indexing/EvmEventIndexModel.ts
|
|
1381
|
+
import {
|
|
1382
|
+
EthAddressZod as EthAddressZod2,
|
|
1383
|
+
HexRegExMinMaxMixedCaseWithPrefix as HexRegExMinMaxMixedCaseWithPrefix2,
|
|
1384
|
+
zodAsFactory as zodAsFactory2
|
|
1385
|
+
} from "@ariestools/sdk";
|
|
1386
|
+
import { z as z2 } from "zod/mini";
|
|
1387
|
+
var EvmHashZod = z2.string().check(z2.regex(HexRegExMinMaxMixedCaseWithPrefix2(32, 32)));
|
|
1388
|
+
var EvmDataZod = z2.string().check(z2.regex(/^0x[\dA-Fa-f]*$/));
|
|
1389
|
+
var EvmEventIndexLogZod = z2.object({
|
|
1390
|
+
address: EthAddressZod2,
|
|
1391
|
+
blockHash: EvmHashZod,
|
|
1392
|
+
blockNumber: z2.number(),
|
|
1393
|
+
data: EvmDataZod,
|
|
1394
|
+
index: z2.number(),
|
|
1395
|
+
topics: z2.array(EvmHashZod),
|
|
1396
|
+
transactionHash: EvmHashZod,
|
|
1397
|
+
transactionIndex: z2.number()
|
|
1398
|
+
});
|
|
1399
|
+
var EvmEventIndexFrameZod = z2.object({
|
|
1400
|
+
fromBlock: z2.number(),
|
|
1401
|
+
logs: z2.array(EvmEventIndexLogZod),
|
|
1402
|
+
toBlock: z2.number()
|
|
1403
|
+
});
|
|
1404
|
+
var EvmEventIndexManifestZod = z2.object({
|
|
1405
|
+
address: EthAddressZod2,
|
|
1406
|
+
chainId: z2.string(),
|
|
1407
|
+
deploymentBlock: z2.number(),
|
|
1408
|
+
frameSize: z2.number(),
|
|
1409
|
+
layout: z2.literal("evm-contract-events-v1")
|
|
1410
|
+
});
|
|
1411
|
+
var EvmEventIndexHeadZod = z2.object({
|
|
1412
|
+
address: EthAddressZod2,
|
|
1413
|
+
block: z2.number(),
|
|
1414
|
+
chainId: z2.string(),
|
|
1415
|
+
hash: EvmHashZod
|
|
1416
|
+
});
|
|
1417
|
+
var asEvmEventIndexFrame = zodAsFactory2(EvmEventIndexFrameZod, "asEvmEventIndexFrame");
|
|
1418
|
+
var asEvmEventIndexHead = zodAsFactory2(EvmEventIndexHeadZod, "asEvmEventIndexHead");
|
|
1419
|
+
var asEvmEventIndexManifest = zodAsFactory2(EvmEventIndexManifestZod, "asEvmEventIndexManifest");
|
|
1420
|
+
|
|
1421
|
+
// src/modules/ethereum/indexing/EvmEventIndexPaths.ts
|
|
1422
|
+
function root(address) {
|
|
1423
|
+
return `evm/events/${address.toLowerCase()}`;
|
|
1424
|
+
}
|
|
1425
|
+
function evmEventIndexFramePath(address, frameIndex) {
|
|
1426
|
+
return `${root(address)}/frames/${frameIndex}.json`;
|
|
1427
|
+
}
|
|
1428
|
+
function evmEventIndexHeadPath(address) {
|
|
1429
|
+
return `${root(address)}/head.json`;
|
|
1430
|
+
}
|
|
1431
|
+
function evmEventIndexManifestPath(address) {
|
|
1432
|
+
return `${root(address)}/manifest.json`;
|
|
1433
|
+
}
|
|
1434
|
+
function evmEventIndexTailPath(address) {
|
|
1435
|
+
return `${root(address)}/tail.json`;
|
|
1436
|
+
}
|
|
1437
|
+
|
|
1438
|
+
// src/modules/ethereum/indexing/EvmEventIndexPublishRunner.ts
|
|
1439
|
+
var EvmEventIndexPublishRunnerMoniker = "EvmEventIndexPublishRunner";
|
|
1440
|
+
|
|
1441
|
+
// src/modules/ethereum/indexing/RestStakeEventsViewer.ts
|
|
1442
|
+
import {
|
|
1443
|
+
assertEx as assertEx12,
|
|
1444
|
+
isDefined as isDefined4,
|
|
1445
|
+
toAddress as toAddress5,
|
|
1446
|
+
toEthAddress as toEthAddress9
|
|
1447
|
+
} from "@ariestools/sdk";
|
|
1448
|
+
import { IAddressStakingEvents__factory as IAddressStakingEvents__factory2 } from "@xyo-network/typechain";
|
|
1449
|
+
import {
|
|
1450
|
+
AbstractCreatableProvider as AbstractCreatableProvider2,
|
|
1451
|
+
asAttoXL1 as asAttoXL13,
|
|
1452
|
+
creatableProvider as creatableProvider6,
|
|
1453
|
+
resolveRestConnectionEndpoint,
|
|
1454
|
+
StakeEventsViewerMoniker as StakeEventsViewerMoniker3
|
|
1455
|
+
} from "@xyo-network/xl1-sdk";
|
|
1456
|
+
import { Interface } from "ethers";
|
|
1457
|
+
var STAKE_EVENT_NAMES2 = /* @__PURE__ */ new Set(["StakeAdded", "StakeRemoved", "StakeWithdrawn"]);
|
|
1458
|
+
var RestStakeEventsViewer = class extends AbstractCreatableProvider2 {
|
|
1459
|
+
moniker = RestStakeEventsViewer.defaultMoniker;
|
|
1460
|
+
completeFrames = /* @__PURE__ */ new Map();
|
|
1461
|
+
contractInterface = new Interface(IAddressStakingEvents__factory2.abi);
|
|
1462
|
+
currentHead;
|
|
1463
|
+
manifestPromise;
|
|
1464
|
+
stakeEventCache = [];
|
|
1465
|
+
syncPromise;
|
|
1466
|
+
tailFrame;
|
|
1467
|
+
get address() {
|
|
1468
|
+
return this.params.address;
|
|
1469
|
+
}
|
|
1470
|
+
get eventIndexBaseUrl() {
|
|
1471
|
+
return this.params.eventIndexBaseUrl;
|
|
1472
|
+
}
|
|
1473
|
+
get fetchFn() {
|
|
1474
|
+
return this.params.fetchFn ?? fetch.bind(globalThis);
|
|
1475
|
+
}
|
|
1476
|
+
static async paramsHandler(params) {
|
|
1477
|
+
const contextConfig = params.context?.config;
|
|
1478
|
+
const address = params.address ?? toEthAddress9(assertEx12(contextConfig?.chain?.id, () => "RestStakeEventsViewer requires an address param or config.chain.id"));
|
|
1479
|
+
const moniker = this.defaultMoniker;
|
|
1480
|
+
const eventIndexBaseUrl = isDefined4(params.eventIndexBaseUrl) && params.eventIndexBaseUrl !== "" ? params.eventIndexBaseUrl : resolveRestConnectionEndpoint(
|
|
1481
|
+
assertEx12(contextConfig, () => "Context config is required to resolve the EVM event index endpoint"),
|
|
1482
|
+
moniker
|
|
1483
|
+
);
|
|
1484
|
+
return {
|
|
1485
|
+
...await super.paramsHandler(params),
|
|
1486
|
+
address,
|
|
1487
|
+
eventIndexBaseUrl: eventIndexBaseUrl.replace(/\/+$/, ""),
|
|
1488
|
+
fetchFn: params.fetchFn
|
|
1489
|
+
};
|
|
1490
|
+
}
|
|
1491
|
+
async positionCount(range) {
|
|
1492
|
+
const events = await this.stakeEvents(range);
|
|
1493
|
+
return Math.max(-1, ...events.map((event) => event.args.id)) + 1;
|
|
1494
|
+
}
|
|
1495
|
+
async stakeEvents(range = [0, "latest"], filter) {
|
|
1496
|
+
await this.sync();
|
|
1497
|
+
return this.stakeEventCache.filter((event) => this.matchesFilter(event, range, filter));
|
|
1498
|
+
}
|
|
1499
|
+
decodeIndexedStakeEvents() {
|
|
1500
|
+
const frames = [...this.completeFrames.entries()].sort(([a], [b]) => a - b).map(([, frame]) => frame);
|
|
1501
|
+
const logs = [...frames, ...this.tailFrame === void 0 ? [] : [this.tailFrame]].flatMap((frame) => frame.logs).sort((a, b) => a.blockNumber - b.blockNumber || a.transactionIndex - b.transactionIndex || a.index - b.index);
|
|
1502
|
+
return logs.flatMap((log) => {
|
|
1503
|
+
const event = this.stakeEventFromLog(log);
|
|
1504
|
+
return event === void 0 ? [] : [event];
|
|
1505
|
+
});
|
|
1506
|
+
}
|
|
1507
|
+
async fetchJson(path) {
|
|
1508
|
+
const response = await this.fetchFn(`${this.eventIndexBaseUrl}/${path}`);
|
|
1509
|
+
assertEx12(response.ok, () => `EVM event index request failed [${response.status}] for ${path}`);
|
|
1510
|
+
return await response.json();
|
|
1511
|
+
}
|
|
1512
|
+
async getManifest() {
|
|
1513
|
+
this.manifestPromise ??= (async () => {
|
|
1514
|
+
const manifest = asEvmEventIndexManifest(await this.fetchJson(evmEventIndexManifestPath(this.address)), true);
|
|
1515
|
+
assertEx12(manifest.address.toLowerCase() === this.address.toLowerCase(), () => "EVM event index manifest address mismatch");
|
|
1516
|
+
return manifest;
|
|
1517
|
+
})();
|
|
1518
|
+
return await this.manifestPromise;
|
|
1519
|
+
}
|
|
1520
|
+
// eslint-disable-next-line complexity
|
|
1521
|
+
matchesFilter(event, range, filter) {
|
|
1522
|
+
if (range[1] !== "latest" && event.time > range[1]) return false;
|
|
1523
|
+
if (event.time < range[0]) return false;
|
|
1524
|
+
if (isDefined4(filter?.name) && event.name !== filter.name) return false;
|
|
1525
|
+
if (isDefined4(filter?.args?.id) && event.args.id !== filter.args.id) return false;
|
|
1526
|
+
if (isDefined4(filter?.args?.staked) && event.args.staked !== filter.args.staked) return false;
|
|
1527
|
+
if (isDefined4(filter?.args?.staker) && event.args.staker !== filter.args.staker) return false;
|
|
1528
|
+
return true;
|
|
1529
|
+
}
|
|
1530
|
+
stakeEventFromLog(log) {
|
|
1531
|
+
const parsed = this.contractInterface.parseLog({ data: log.data, topics: log.topics });
|
|
1532
|
+
if (parsed === null || !STAKE_EVENT_NAMES2.has(parsed.name)) return;
|
|
1533
|
+
const [staked, staker, id, amount] = parsed.args;
|
|
1534
|
+
return {
|
|
1535
|
+
name: parsed.name,
|
|
1536
|
+
args: {
|
|
1537
|
+
amount: asAttoXL13(amount),
|
|
1538
|
+
id: Number(id),
|
|
1539
|
+
staked: toAddress5(staked),
|
|
1540
|
+
staker: toAddress5(staker)
|
|
1541
|
+
},
|
|
1542
|
+
time: log.blockNumber
|
|
1543
|
+
};
|
|
1544
|
+
}
|
|
1545
|
+
async sync() {
|
|
1546
|
+
this.syncPromise ??= this.syncFromHead().finally(() => {
|
|
1547
|
+
this.syncPromise = void 0;
|
|
1548
|
+
});
|
|
1549
|
+
await this.syncPromise;
|
|
1550
|
+
}
|
|
1551
|
+
async syncFromHead() {
|
|
1552
|
+
const manifest = await this.getManifest();
|
|
1553
|
+
const head = asEvmEventIndexHead(await this.fetchJson(evmEventIndexHeadPath(this.address)), true);
|
|
1554
|
+
assertEx12(head.address.toLowerCase() === this.address.toLowerCase(), () => "EVM event index head address mismatch");
|
|
1555
|
+
assertEx12(head.chainId === manifest.chainId, () => "EVM event index chain mismatch");
|
|
1556
|
+
if (this.currentHead?.block === head.block && this.currentHead.hash === head.hash) return;
|
|
1557
|
+
if (this.currentHead !== void 0 && (head.block < this.currentHead.block || head.block === this.currentHead.block && head.hash !== this.currentHead.hash)) {
|
|
1558
|
+
this.completeFrames.clear();
|
|
1559
|
+
this.tailFrame = void 0;
|
|
1560
|
+
}
|
|
1561
|
+
const indexedBlockCount = Math.max(0, head.block - manifest.deploymentBlock + 1);
|
|
1562
|
+
const completeFrameCount = Math.floor(indexedBlockCount / manifest.frameSize);
|
|
1563
|
+
const missingFrameIndexes = Array.from({ length: completeFrameCount }, (_, index) => index).filter((index) => !this.completeFrames.has(index));
|
|
1564
|
+
await Promise.all(missingFrameIndexes.map(async (index) => {
|
|
1565
|
+
const frame = asEvmEventIndexFrame(await this.fetchJson(evmEventIndexFramePath(this.address, index)), true);
|
|
1566
|
+
const expectedFrom = manifest.deploymentBlock + index * manifest.frameSize;
|
|
1567
|
+
assertEx12(frame.fromBlock === expectedFrom, () => `EVM event index frame ${index} starts at the wrong block`);
|
|
1568
|
+
assertEx12(frame.toBlock === expectedFrom + manifest.frameSize - 1, () => `EVM event index frame ${index} is incomplete`);
|
|
1569
|
+
this.completeFrames.set(index, frame);
|
|
1570
|
+
}));
|
|
1571
|
+
const tailStart = manifest.deploymentBlock + completeFrameCount * manifest.frameSize;
|
|
1572
|
+
this.tailFrame = tailStart <= head.block ? asEvmEventIndexFrame(await this.fetchJson(`${evmEventIndexTailPath(this.address)}?head=${head.hash}`), true) : void 0;
|
|
1573
|
+
if (this.tailFrame !== void 0) {
|
|
1574
|
+
assertEx12(this.tailFrame.fromBlock === tailStart, () => "EVM event index tail starts at the wrong block");
|
|
1575
|
+
assertEx12(this.tailFrame.toBlock === head.block, () => "EVM event index tail is stale relative to its head");
|
|
1576
|
+
}
|
|
1577
|
+
this.stakeEventCache = this.decodeIndexedStakeEvents();
|
|
1578
|
+
this.currentHead = head;
|
|
1579
|
+
}
|
|
1580
|
+
};
|
|
1581
|
+
__publicField(RestStakeEventsViewer, "connectionTypes", ["rest"]);
|
|
1582
|
+
__publicField(RestStakeEventsViewer, "defaultMoniker", StakeEventsViewerMoniker3);
|
|
1583
|
+
__publicField(RestStakeEventsViewer, "dependencies", []);
|
|
1584
|
+
__publicField(RestStakeEventsViewer, "monikers", [StakeEventsViewerMoniker3]);
|
|
1585
|
+
__publicField(RestStakeEventsViewer, "surface", "node");
|
|
1586
|
+
RestStakeEventsViewer = __decorateClass([
|
|
1587
|
+
creatableProvider6()
|
|
1588
|
+
], RestStakeEventsViewer);
|
|
1236
1589
|
export {
|
|
1237
1590
|
AbstractEvmProvider,
|
|
1238
1591
|
AbstractEvmRunner,
|
|
1239
1592
|
AbstractEvmViewer,
|
|
1240
1593
|
BaseEthProvider,
|
|
1241
1594
|
DEFAULT_ESTIMATE_BLOCK_DATE,
|
|
1242
|
-
DEFAULT_EVENT_QUERY_BLOCK_CHUNK_SIZE,
|
|
1243
1595
|
DEFAULT_EVENT_QUERY_INITIAL_DELAY_MS,
|
|
1244
1596
|
DEFAULT_EVENT_QUERY_MAX_ATTEMPTS,
|
|
1597
|
+
DEFAULT_EVENT_QUERY_START_CHUNK_SIZE,
|
|
1245
1598
|
DEFAULT_EVM_BLOCK_TIME_SEC,
|
|
1246
1599
|
EthHashRegEx,
|
|
1247
1600
|
EthHashZod,
|
|
1248
1601
|
EvmChainContractViewer,
|
|
1602
|
+
EvmEventIndexFrameZod,
|
|
1603
|
+
EvmEventIndexHeadZod,
|
|
1604
|
+
EvmEventIndexLogZod,
|
|
1605
|
+
EvmEventIndexManifestZod,
|
|
1606
|
+
EvmEventIndexPublishRunnerMoniker,
|
|
1249
1607
|
EvmStakeAddedEventNameZod,
|
|
1250
1608
|
EvmStakeAddedEventZod,
|
|
1251
1609
|
EvmStakeEventArgsZod,
|
|
@@ -1259,6 +1617,11 @@ export {
|
|
|
1259
1617
|
EvmStakeViewer,
|
|
1260
1618
|
EvmStakeWithdrawnEventNameZod,
|
|
1261
1619
|
EvmStakeWithdrawnEventZod,
|
|
1620
|
+
MIN_EVENT_QUERY_BLOCK_CHUNK_SIZE,
|
|
1621
|
+
RestStakeEventsViewer,
|
|
1622
|
+
asEvmEventIndexFrame,
|
|
1623
|
+
asEvmEventIndexHead,
|
|
1624
|
+
asEvmEventIndexManifest,
|
|
1262
1625
|
asEvmStakeAddedEvent,
|
|
1263
1626
|
asEvmStakeEvent,
|
|
1264
1627
|
asEvmStakeRemovedEvent,
|
|
@@ -1266,23 +1629,34 @@ export {
|
|
|
1266
1629
|
blockRangeChunks,
|
|
1267
1630
|
calculateEthBlockRate,
|
|
1268
1631
|
calculateEthTimeRate,
|
|
1632
|
+
configuredDeploymentBlock,
|
|
1269
1633
|
createChain,
|
|
1270
1634
|
createChainContract,
|
|
1271
1635
|
createChainRewardsContract,
|
|
1272
1636
|
estimateBlockNumberAt,
|
|
1273
1637
|
estimateBlockNumberFromHead,
|
|
1274
1638
|
ethBlockRate,
|
|
1639
|
+
evmEventIndexFramePath,
|
|
1640
|
+
evmEventIndexHeadPath,
|
|
1641
|
+
evmEventIndexManifestPath,
|
|
1642
|
+
evmEventIndexTailPath,
|
|
1643
|
+
findContractDeploymentBlock,
|
|
1275
1644
|
getDefaultGasConfig,
|
|
1276
1645
|
getEthBlockRateBlocks,
|
|
1277
1646
|
isEvmStakeAddedEvent,
|
|
1278
1647
|
isEvmStakeEvent,
|
|
1279
1648
|
isEvmStakeRemovedEvent,
|
|
1280
1649
|
isEvmStakeWithdrawnEvent,
|
|
1650
|
+
isRpcRangeLimitError,
|
|
1651
|
+
isRpcRateLimitError,
|
|
1281
1652
|
nextContractAddress,
|
|
1282
1653
|
nextContractAddressForAddress,
|
|
1654
|
+
resolveContractDeploymentBlock,
|
|
1655
|
+
rpcRangeLimitFromError,
|
|
1283
1656
|
toEvmStakeAddedEvent,
|
|
1284
1657
|
toEvmStakeEvent,
|
|
1285
1658
|
toEvmStakeRemovedEvent,
|
|
1286
|
-
toEvmStakeWithdrawnEvent
|
|
1659
|
+
toEvmStakeWithdrawnEvent,
|
|
1660
|
+
withRpcRateLimitBackoff
|
|
1287
1661
|
};
|
|
1288
1662
|
//# sourceMappingURL=ethereum.mjs.map
|