@xyo-network/chain-services 1.16.26 → 1.17.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/neutral/AccountBalance/accountBalanceServiceFromArchivist.d.ts +1 -1
- package/dist/neutral/AccountBalance/accountBalanceServiceFromArchivist.d.ts.map +1 -1
- package/dist/neutral/AccountBalance/index.d.ts +0 -1
- package/dist/neutral/AccountBalance/index.d.ts.map +1 -1
- package/dist/neutral/BaseService.d.ts +0 -3
- package/dist/neutral/BaseService.d.ts.map +1 -1
- package/dist/neutral/BlockReward/EvmBlockRewardViewer.d.ts +17 -0
- package/dist/neutral/BlockReward/EvmBlockRewardViewer.d.ts.map +1 -0
- package/dist/neutral/BlockReward/index.d.ts +1 -3
- package/dist/neutral/BlockReward/index.d.ts.map +1 -1
- package/dist/neutral/ChainBlockNumberIteration/ChainBlockNumberIterationService.d.ts +23 -11
- package/dist/neutral/ChainBlockNumberIteration/ChainBlockNumberIterationService.d.ts.map +1 -1
- package/dist/neutral/ChainService/Evm/Evm.d.ts +6 -5
- package/dist/neutral/ChainService/Evm/Evm.d.ts.map +1 -1
- package/dist/neutral/ChainService/Memory/Memory.d.ts +6 -4
- package/dist/neutral/ChainService/Memory/Memory.d.ts.map +1 -1
- package/dist/neutral/ChainValidator/XyoValidator.d.ts +4 -18
- package/dist/neutral/ChainValidator/XyoValidator.d.ts.map +1 -1
- package/dist/neutral/Election/BaseElectionService.d.ts +3 -3
- package/dist/neutral/Election/BaseElectionService.d.ts.map +1 -1
- package/dist/neutral/PendingTransactions/BasePendingTransactions.d.ts +9 -9
- package/dist/neutral/PendingTransactions/BasePendingTransactions.d.ts.map +1 -1
- package/dist/neutral/StakeIntent/XyoStakeIntentService.d.ts +7 -6
- package/dist/neutral/StakeIntent/XyoStakeIntentService.d.ts.map +1 -1
- package/dist/neutral/Time/BaseTimeSyncService.d.ts +3 -6
- package/dist/neutral/Time/BaseTimeSyncService.d.ts.map +1 -1
- package/dist/neutral/blockViewerFromChainIteratorAndArchivist.d.ts.map +1 -1
- package/dist/neutral/implementation/accountBalance.d.ts +7 -0
- package/dist/neutral/implementation/accountBalance.d.ts.map +1 -0
- package/dist/neutral/implementation/blockViewer.d.ts +7 -0
- package/dist/neutral/implementation/blockViewer.d.ts.map +1 -0
- package/dist/neutral/implementation/chain/evm.d.ts +7 -0
- package/dist/neutral/implementation/chain/evm.d.ts.map +1 -0
- package/dist/neutral/implementation/chain/index.d.ts +7 -0
- package/dist/neutral/implementation/chain/index.d.ts.map +1 -0
- package/dist/neutral/implementation/evm/index.d.ts +2 -0
- package/dist/neutral/implementation/evm/index.d.ts.map +1 -0
- package/dist/neutral/implementation/evm/initChainId.d.ts +4 -0
- package/dist/neutral/implementation/evm/initChainId.d.ts.map +1 -0
- package/dist/neutral/implementation/evm/initEvmProvider.d.ts +11 -0
- package/dist/neutral/implementation/evm/initEvmProvider.d.ts.map +1 -0
- package/dist/neutral/implementation/evm/initInfuraProvider.d.ts +6 -0
- package/dist/neutral/implementation/evm/initInfuraProvider.d.ts.map +1 -0
- package/dist/neutral/implementation/evm/initJsonRpcProvider.d.ts +6 -0
- package/dist/neutral/implementation/evm/initJsonRpcProvider.d.ts.map +1 -0
- package/dist/neutral/implementation/head/createBootstrapHead.d.ts +5 -0
- package/dist/neutral/implementation/head/createBootstrapHead.d.ts.map +1 -0
- package/dist/neutral/implementation/head/createForkedHead/config/getBridgeDestinationDetails.d.ts +8 -0
- package/dist/neutral/implementation/head/createForkedHead/config/getBridgeDestinationDetails.d.ts.map +1 -0
- package/dist/neutral/implementation/head/createForkedHead/config/getBridgeSourceDetails.d.ts +9 -0
- package/dist/neutral/implementation/head/createForkedHead/config/getBridgeSourceDetails.d.ts.map +1 -0
- package/dist/neutral/implementation/head/createForkedHead/config/getForkDetails.d.ts +4 -0
- package/dist/neutral/implementation/head/createForkedHead/config/getForkDetails.d.ts.map +1 -0
- package/dist/neutral/implementation/head/createForkedHead/config/index.d.ts +4 -0
- package/dist/neutral/implementation/head/createForkedHead/config/index.d.ts.map +1 -0
- package/dist/neutral/implementation/head/createForkedHead/createForkedHead.d.ts +5 -0
- package/dist/neutral/implementation/head/createForkedHead/createForkedHead.d.ts.map +1 -0
- package/dist/neutral/implementation/head/createForkedHead/getBridgeDestinationObservation.d.ts +11 -0
- package/dist/neutral/implementation/head/createForkedHead/getBridgeDestinationObservation.d.ts.map +1 -0
- package/dist/neutral/implementation/head/createForkedHead/getBridgeIntent.d.ts +11 -0
- package/dist/neutral/implementation/head/createForkedHead/getBridgeIntent.d.ts.map +1 -0
- package/dist/neutral/implementation/head/createForkedHead/getBridgeSourceObservation.d.ts +11 -0
- package/dist/neutral/implementation/head/createForkedHead/getBridgeSourceObservation.d.ts.map +1 -0
- package/dist/neutral/implementation/head/createForkedHead/getFirstBlockForNewChain.d.ts +13 -0
- package/dist/neutral/implementation/head/createForkedHead/getFirstBlockForNewChain.d.ts.map +1 -0
- package/dist/neutral/implementation/head/createForkedHead/index.d.ts +2 -0
- package/dist/neutral/implementation/head/createForkedHead/index.d.ts.map +1 -0
- package/dist/neutral/implementation/head/getForkFromBlock.d.ts +12 -0
- package/dist/neutral/implementation/head/getForkFromBlock.d.ts.map +1 -0
- package/dist/neutral/implementation/head/head.d.ts +11 -0
- package/dist/neutral/implementation/head/head.d.ts.map +1 -0
- package/dist/neutral/implementation/head/index.d.ts +2 -0
- package/dist/neutral/implementation/head/index.d.ts.map +1 -0
- package/dist/neutral/implementation/head/submitNewChain.d.ts +10 -0
- package/dist/neutral/implementation/head/submitNewChain.d.ts.map +1 -0
- package/dist/neutral/implementation/index.d.ts +13 -0
- package/dist/neutral/implementation/index.d.ts.map +1 -0
- package/dist/neutral/implementation/mempoolRunner.d.ts +7 -0
- package/dist/neutral/implementation/mempoolRunner.d.ts.map +1 -0
- package/dist/neutral/implementation/mempoolViewer.d.ts +7 -0
- package/dist/neutral/implementation/mempoolViewer.d.ts.map +1 -0
- package/dist/neutral/implementation/pendingTransactions.d.ts +9 -0
- package/dist/neutral/implementation/pendingTransactions.d.ts.map +1 -0
- package/dist/neutral/implementation/producer.d.ts +5 -0
- package/dist/neutral/implementation/producer.d.ts.map +1 -0
- package/dist/neutral/implementation/reward.d.ts +14 -0
- package/dist/neutral/implementation/reward.d.ts.map +1 -0
- package/dist/neutral/implementation/time.d.ts +6 -0
- package/dist/neutral/implementation/time.d.ts.map +1 -0
- package/dist/neutral/implementation/validator.d.ts +5 -0
- package/dist/neutral/implementation/validator.d.ts.map +1 -0
- package/dist/neutral/index.d.ts +2 -2
- package/dist/neutral/index.d.ts.map +1 -1
- package/dist/neutral/index.mjs +1623 -1150
- package/dist/neutral/index.mjs.map +1 -1
- package/dist/neutral/simple/block/index.d.ts +2 -0
- package/dist/neutral/simple/block/index.d.ts.map +1 -0
- package/dist/neutral/simple/block/runner/SimpleBlockRunner.d.ts +117 -0
- package/dist/neutral/simple/block/runner/SimpleBlockRunner.d.ts.map +1 -0
- package/dist/neutral/simple/block/runner/generateTransactionFeeTransfers.d.ts.map +1 -0
- package/dist/neutral/simple/block/runner/index.d.ts +2 -0
- package/dist/neutral/simple/block/runner/index.d.ts.map +1 -0
- package/dist/neutral/simple/block/runner/spec/SimpleBlockRewardViewer.d.ts +2 -0
- package/dist/neutral/simple/block/runner/spec/SimpleBlockRewardViewer.d.ts.map +1 -0
- package/dist/neutral/simple/index.d.ts +2 -0
- package/dist/neutral/simple/index.d.ts.map +1 -0
- package/package.json +30 -27
- package/src/AccountBalance/accountBalanceServiceFromArchivist.ts +38 -10
- package/src/AccountBalance/index.ts +0 -1
- package/src/BaseService.ts +0 -13
- package/src/BlockReward/EvmBlockRewardViewer.ts +50 -0
- package/src/BlockReward/index.ts +1 -3
- package/src/ChainBlockNumberIteration/ChainBlockNumberIterationService.ts +74 -6
- package/src/ChainService/Evm/Evm.ts +39 -36
- package/src/ChainService/Memory/Memory.ts +14 -7
- package/src/ChainValidator/XyoValidator.ts +29 -34
- package/src/Election/BaseElectionService.ts +5 -4
- package/src/NetworkStakeStepReward/BaseNetworkStakeStepRewardService.ts +18 -18
- package/src/PendingTransactions/BasePendingTransactions.ts +15 -9
- package/src/Schemas/BaseSchemasService.ts +1 -1
- package/src/StakeIntent/XyoStakeIntentService.ts +24 -18
- package/src/StepStake/BaseStepStakeService.ts +2 -2
- package/src/Time/BaseTimeSyncService.ts +6 -16
- package/src/blockViewerFromChainIteratorAndArchivist.ts +20 -1
- package/src/implementation/accountBalance.ts +29 -0
- package/src/implementation/blockViewer.ts +29 -0
- package/src/implementation/chain/evm.ts +39 -0
- package/src/implementation/chain/index.ts +46 -0
- package/src/implementation/evm/index.ts +1 -0
- package/src/implementation/evm/initChainId.ts +20 -0
- package/src/implementation/evm/initEvmProvider.ts +24 -0
- package/src/implementation/evm/initInfuraProvider.ts +26 -0
- package/src/implementation/evm/initJsonRpcProvider.ts +20 -0
- package/src/implementation/head/createBootstrapHead.ts +31 -0
- package/src/implementation/head/createForkedHead/config/getBridgeDestinationDetails.ts +27 -0
- package/src/implementation/head/createForkedHead/config/getBridgeSourceDetails.ts +19 -0
- package/src/implementation/head/createForkedHead/config/getForkDetails.ts +10 -0
- package/src/implementation/head/createForkedHead/config/index.ts +3 -0
- package/src/implementation/head/createForkedHead/createForkedHead.ts +29 -0
- package/src/implementation/head/createForkedHead/getBridgeDestinationObservation.ts +42 -0
- package/src/implementation/head/createForkedHead/getBridgeIntent.ts +51 -0
- package/src/implementation/head/createForkedHead/getBridgeSourceObservation.ts +46 -0
- package/src/implementation/head/createForkedHead/getFirstBlockForNewChain.ts +41 -0
- package/src/implementation/head/createForkedHead/index.ts +1 -0
- package/src/implementation/head/getForkFromBlock.ts +43 -0
- package/src/implementation/head/head.ts +49 -0
- package/src/implementation/head/index.ts +1 -0
- package/src/implementation/head/submitNewChain.ts +27 -0
- package/src/implementation/index.ts +12 -0
- package/src/implementation/mempoolRunner.ts +29 -0
- package/src/implementation/mempoolViewer.ts +29 -0
- package/src/implementation/pendingTransactions.ts +36 -0
- package/src/implementation/producer.ts +16 -0
- package/src/implementation/reward.ts +53 -0
- package/src/implementation/time.ts +26 -0
- package/src/implementation/validator.ts +15 -0
- package/src/index.ts +2 -2
- package/src/simple/block/index.ts +1 -0
- package/src/{BlockProducer/BaseBlockProducerService.ts → simple/block/runner/SimpleBlockRunner.ts} +111 -74
- package/src/simple/block/runner/index.ts +1 -0
- package/src/simple/block/runner/spec/SimpleBlockRewardViewer.ts +413 -0
- package/src/simple/index.ts +1 -0
- package/dist/neutral/AccountBalance/BaseAccountBalanceService.d.ts +0 -36
- package/dist/neutral/AccountBalance/BaseAccountBalanceService.d.ts.map +0 -1
- package/dist/neutral/AccountTransfers/BaseAccountTransfersService.d.ts +0 -13
- package/dist/neutral/AccountTransfers/BaseAccountTransfersService.d.ts.map +0 -1
- package/dist/neutral/AccountTransfers/index.d.ts +0 -2
- package/dist/neutral/AccountTransfers/index.d.ts.map +0 -1
- package/dist/neutral/BlockProducer/BaseBlockProducerService.d.ts +0 -85
- package/dist/neutral/BlockProducer/BaseBlockProducerService.d.ts.map +0 -1
- package/dist/neutral/BlockProducer/generateTransactionFeeTransfers.d.ts.map +0 -1
- package/dist/neutral/BlockProducer/index.d.ts +0 -2
- package/dist/neutral/BlockProducer/index.d.ts.map +0 -1
- package/dist/neutral/BlockReward/BaseBlockRewardService.d.ts +0 -10
- package/dist/neutral/BlockReward/BaseBlockRewardService.d.ts.map +0 -1
- package/dist/neutral/BlockReward/EvmBlockRewardService.d.ts +0 -18
- package/dist/neutral/BlockReward/EvmBlockRewardService.d.ts.map +0 -1
- package/dist/neutral/BlockReward/MemoryBlockRewardService.d.ts +0 -23
- package/dist/neutral/BlockReward/MemoryBlockRewardService.d.ts.map +0 -1
- package/src/AccountBalance/BaseAccountBalanceService.ts +0 -100
- package/src/AccountTransfers/BaseAccountTransfersService.ts +0 -36
- package/src/AccountTransfers/index.ts +0 -1
- package/src/BlockProducer/index.ts +0 -1
- package/src/BlockReward/BaseBlockRewardService.ts +0 -17
- package/src/BlockReward/EvmBlockRewardService.ts +0 -49
- package/src/BlockReward/MemoryBlockRewardService.ts +0 -72
- /package/dist/neutral/{BlockProducer → simple/block/runner}/generateTransactionFeeTransfers.d.ts +0 -0
- /package/src/{BlockProducer → simple/block/runner}/generateTransactionFeeTransfers.ts +0 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/simple/block/index.ts"],"names":[],"mappings":"AAAA,cAAc,mBAAmB,CAAA"}
|
|
@@ -0,0 +1,117 @@
|
|
|
1
|
+
import { AbstractCreatable, Address, CreatableParams, Hex, Promisable } from '@xylabs/sdk-js';
|
|
2
|
+
import { AccountInstance } from '@xyo-network/account-model';
|
|
3
|
+
import { ArchivistInstance } from '@xyo-network/archivist-model';
|
|
4
|
+
import { BlockRewardDiviner } from '@xyo-network/chain-modules';
|
|
5
|
+
import { WithHashMeta } from '@xyo-network/payload-model';
|
|
6
|
+
import { BlockBoundWitness, ChainId, ChainStakeIntent, SignedBlockBoundWitnessWithHashMeta, SignedHydratedBlockWithHashMeta, Transfer } from '@xyo-network/xl1-protocol';
|
|
7
|
+
import { AccountBalanceViewer, BlockRewardViewer, BlockRunner, Config, HydratedBlockStateValidationFunction, MempoolRunner, MempoolViewer, TimeSyncViewer } from '@xyo-network/xl1-protocol-sdk';
|
|
8
|
+
import z from 'zod';
|
|
9
|
+
/**
|
|
10
|
+
* The default block size for a block
|
|
11
|
+
*/
|
|
12
|
+
export declare const DEFAULT_BLOCK_SIZE = 10;
|
|
13
|
+
/**
|
|
14
|
+
* The amount of time for which a producer will restake their intent
|
|
15
|
+
*/
|
|
16
|
+
export declare const XYO_PRODUCER_REDECLARATION_DURATION = 10000;
|
|
17
|
+
/**
|
|
18
|
+
* The number of blocks within which a producer will redeclare
|
|
19
|
+
* their intent to produce blocks
|
|
20
|
+
*/
|
|
21
|
+
export declare const XYO_PRODUCER_REDECLARATION_WINDOW = 500;
|
|
22
|
+
export declare const SimpleBlockRunnerParamsZod: z.ZodObject<{
|
|
23
|
+
balanceViewer: z.ZodObject<{}, z.z.core.$loose>;
|
|
24
|
+
blockRewardViewer: z.ZodObject<{}, z.z.core.$loose>;
|
|
25
|
+
chainId: z.ZodString;
|
|
26
|
+
config: z.ZodObject<{}, z.z.core.$loose>;
|
|
27
|
+
mempoolViewer: z.ZodObject<{}, z.z.core.$loose>;
|
|
28
|
+
mempoolRunner: z.ZodObject<{}, z.z.core.$loose>;
|
|
29
|
+
rejectedTransactionsArchivist: z.ZodOptional<z.ZodObject<{}, z.z.core.$loose>>;
|
|
30
|
+
rewardAddress: z.ZodPipe<z.ZodString, z.ZodTransform<Address, string>>;
|
|
31
|
+
time: z.ZodObject<{}, z.z.core.$loose>;
|
|
32
|
+
validateHydratedBlockState: z.ZodOptional<z.ZodFunction<z.z.core.$ZodFunctionArgs, z.z.core.$ZodFunctionOut>>;
|
|
33
|
+
}, z.z.core.$strip>;
|
|
34
|
+
export type SimpleBlockRunnerParams = CreatableParams & {
|
|
35
|
+
account: AccountInstance;
|
|
36
|
+
balanceViewer: AccountBalanceViewer;
|
|
37
|
+
blockRewardViewer: BlockRewardViewer;
|
|
38
|
+
chainId: ChainId;
|
|
39
|
+
config: Config;
|
|
40
|
+
mempoolRunner: MempoolRunner;
|
|
41
|
+
mempoolViewer: MempoolViewer;
|
|
42
|
+
rejectedTransactionsArchivist?: ArchivistInstance;
|
|
43
|
+
rewardAddress: Address;
|
|
44
|
+
time: TimeSyncViewer;
|
|
45
|
+
validateHydratedBlockState?: HydratedBlockStateValidationFunction;
|
|
46
|
+
};
|
|
47
|
+
export declare class SimpleBlockRunner extends AbstractCreatable<SimpleBlockRunnerParams> implements BlockRunner {
|
|
48
|
+
protected _blockRewardDiviner: BlockRewardDiviner | undefined;
|
|
49
|
+
protected _lastRedeclarationBlock: number | undefined;
|
|
50
|
+
protected _rejectedTransactionsArchivist: ArchivistInstance | undefined;
|
|
51
|
+
/**
|
|
52
|
+
* The default block size for a block
|
|
53
|
+
*/
|
|
54
|
+
static get DefaultBlockSize(): number;
|
|
55
|
+
/**
|
|
56
|
+
* The amount of time for which the producer will redeclare
|
|
57
|
+
* their intent to continue producing blocks
|
|
58
|
+
*/
|
|
59
|
+
static get RedeclarationDuration(): number;
|
|
60
|
+
/**
|
|
61
|
+
* The number of blocks within which the producer will redeclare
|
|
62
|
+
* their intent to continue producing blocks
|
|
63
|
+
*/
|
|
64
|
+
static get RedeclarationWindow(): number;
|
|
65
|
+
get address(): Address;
|
|
66
|
+
protected get account(): AccountInstance;
|
|
67
|
+
protected get balanceViewer(): AccountBalanceViewer;
|
|
68
|
+
protected get blockRewardViewer(): BlockRewardViewer;
|
|
69
|
+
protected get chainId(): Hex;
|
|
70
|
+
protected get mempoolRunner(): MempoolRunner;
|
|
71
|
+
protected get mempoolViewer(): MempoolViewer;
|
|
72
|
+
protected get rejectedTransactionsArchivist(): ArchivistInstance<import("@xyo-network/archivist-model").ArchivistParams<import("@xyo-network/module-model").AnyConfigSchema<import("@xyo-network/archivist-model").ArchivistConfig>>, import("@xyo-network/archivist-model").ArchivistModuleEventData, import("@xyo-network/payload-model").Payload>;
|
|
73
|
+
protected get rewardAddress(): Address;
|
|
74
|
+
protected get time(): TimeSyncViewer;
|
|
75
|
+
static paramsHandler(params?: Partial<SimpleBlockRunnerParams> | undefined): Promise<SimpleBlockRunnerParams>;
|
|
76
|
+
next(head: WithHashMeta<BlockBoundWitness>): Promise<SignedHydratedBlockWithHashMeta | undefined>;
|
|
77
|
+
produceNextBlock(head: SignedBlockBoundWitnessWithHashMeta, force: true): Promise<SignedHydratedBlockWithHashMeta>;
|
|
78
|
+
produceNextBlock(head: SignedBlockBoundWitnessWithHashMeta, force?: false): Promise<SignedHydratedBlockWithHashMeta | undefined>;
|
|
79
|
+
protected getBlockRewardTransfers(block: number): Promise<Transfer[]>;
|
|
80
|
+
/**
|
|
81
|
+
* Handles the producer redeclaration logic
|
|
82
|
+
* @param head The current head block
|
|
83
|
+
* @returns chain stake intent for the producer redeclaration, or undefined if no redeclaration is needed
|
|
84
|
+
*/
|
|
85
|
+
protected getProducerRedeclaration(head: WithHashMeta<BlockBoundWitness>): Promisable<ChainStakeIntent | undefined>;
|
|
86
|
+
protected proposeNextValidBlock(head: WithHashMeta<BlockBoundWitness>, validateBalances?: boolean, force?: boolean): Promise<[{
|
|
87
|
+
schema: "network.xyo.boundwitness";
|
|
88
|
+
addresses: Address[];
|
|
89
|
+
payload_hashes: import("@xylabs/sdk-js").Hash[];
|
|
90
|
+
payload_schemas: string[];
|
|
91
|
+
previous_hashes: (import("@xylabs/sdk-js").Hash | null)[];
|
|
92
|
+
$signatures: Hex[];
|
|
93
|
+
block: import("@xyo-network/xl1-protocol").XL1BlockNumber;
|
|
94
|
+
chain: Hex;
|
|
95
|
+
previous: import("@xylabs/sdk-js").Hash | null;
|
|
96
|
+
$epoch: number;
|
|
97
|
+
_hash: import("@xylabs/sdk-js").Hash;
|
|
98
|
+
_dataHash: import("@xylabs/sdk-js").Hash;
|
|
99
|
+
$destination?: Address | undefined;
|
|
100
|
+
$sourceQuery?: import("@xylabs/sdk-js").Hash | undefined;
|
|
101
|
+
protocol?: number | undefined;
|
|
102
|
+
step_hashes?: import("@xylabs/sdk-js").Hash[] | undefined;
|
|
103
|
+
}, {
|
|
104
|
+
schema: string;
|
|
105
|
+
_hash: import("@xylabs/sdk-js").Hash;
|
|
106
|
+
_dataHash: import("@xylabs/sdk-js").Hash;
|
|
107
|
+
}[]] | undefined>;
|
|
108
|
+
private filterByFunded;
|
|
109
|
+
private generateTimePayload;
|
|
110
|
+
/**
|
|
111
|
+
* Check if a heartbeat block is required based on network activity.
|
|
112
|
+
* @param head The current head block
|
|
113
|
+
* @returns True if a heartbeat is required, false otherwise
|
|
114
|
+
*/
|
|
115
|
+
private heartbeatRequired;
|
|
116
|
+
}
|
|
117
|
+
//# sourceMappingURL=SimpleBlockRunner.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"SimpleBlockRunner.d.ts","sourceRoot":"","sources":["../../../../../src/simple/block/runner/SimpleBlockRunner.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"generateTransactionFeeTransfers.d.ts","sourceRoot":"","sources":["../../../../../src/simple/block/runner/generateTransactionFeeTransfers.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,OAAO,EAAiB,MAAM,gBAAgB,CAAA;AAG5D,OAAO,KAAK,EACV,yBAAyB,EACzB,QAAQ,EAET,MAAM,2BAA2B,CAAA;AAKlC,wBAAsB,+BAA+B,CAAC,OAAO,EAAE,OAAO,EAAE,YAAY,EAAE,yBAAyB,EAAE,GAAG,OAAO,CAAC,QAAQ,EAAE,CAAC,CA0CtI"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../../src/simple/block/runner/index.ts"],"names":[],"mappings":"AAAA,cAAc,wBAAwB,CAAA"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"SimpleBlockRewardViewer.d.ts","sourceRoot":"","sources":["../../../../../../src/simple/block/runner/spec/SimpleBlockRewardViewer.ts"],"names":[],"mappings":"AAAA,OAAO,yBAAyB,CAAA"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/simple/index.ts"],"names":[],"mappings":"AAAA,cAAc,kBAAkB,CAAA"}
|
package/package.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"$schema": "http://json.schemastore.org/package.json",
|
|
3
3
|
"name": "@xyo-network/chain-services",
|
|
4
|
-
"version": "1.
|
|
4
|
+
"version": "1.17.1",
|
|
5
5
|
"description": "XYO Layer One SDK Services",
|
|
6
6
|
"homepage": "https://xylabs.com",
|
|
7
7
|
"bugs": {
|
|
@@ -40,44 +40,47 @@
|
|
|
40
40
|
],
|
|
41
41
|
"dependencies": {
|
|
42
42
|
"@opentelemetry/api": "~1.9.0",
|
|
43
|
-
"@xylabs/sdk-js": "~5.0.
|
|
44
|
-
"@xylabs/telemetry": "~5.0.
|
|
45
|
-
"@xyo-network/account-model": "~5.2.
|
|
46
|
-
"@xyo-network/archivist-memory": "~5.2.
|
|
47
|
-
"@xyo-network/archivist-model": "~5.2.
|
|
48
|
-
"@xyo-network/boundwitness-model": "~5.2.
|
|
49
|
-
"@xyo-network/boundwitness-validator": "~5.2.
|
|
50
|
-
"@xyo-network/boundwitness-wrapper": "~5.2.
|
|
51
|
-
"@xyo-network/chain-analyze": "~1.
|
|
52
|
-
"@xyo-network/chain-modules": "~1.
|
|
53
|
-
"@xyo-network/chain-protocol": "~1.
|
|
54
|
-
"@xyo-network/chain-utils": "~1.
|
|
55
|
-
"@xyo-network/payload-builder": "~5.2.
|
|
56
|
-
"@xyo-network/payload-model": "~5.2.
|
|
43
|
+
"@xylabs/sdk-js": "~5.0.48",
|
|
44
|
+
"@xylabs/telemetry": "~5.0.48",
|
|
45
|
+
"@xyo-network/account-model": "~5.2.13",
|
|
46
|
+
"@xyo-network/archivist-memory": "~5.2.13",
|
|
47
|
+
"@xyo-network/archivist-model": "~5.2.13",
|
|
48
|
+
"@xyo-network/boundwitness-model": "~5.2.13",
|
|
49
|
+
"@xyo-network/boundwitness-validator": "~5.2.13",
|
|
50
|
+
"@xyo-network/boundwitness-wrapper": "~5.2.13",
|
|
51
|
+
"@xyo-network/chain-analyze": "~1.17.1",
|
|
52
|
+
"@xyo-network/chain-modules": "~1.17.1",
|
|
53
|
+
"@xyo-network/chain-protocol": "~1.17.1",
|
|
54
|
+
"@xyo-network/chain-utils": "~1.17.1",
|
|
55
|
+
"@xyo-network/payload-builder": "~5.2.13",
|
|
56
|
+
"@xyo-network/payload-model": "~5.2.13",
|
|
57
57
|
"@xyo-network/typechain": "~4.0.10",
|
|
58
|
-
"@xyo-network/xl1-protocol": "~1.14.
|
|
59
|
-
"@xyo-network/xl1-protocol-sdk": "~1.
|
|
60
|
-
"@xyo-network/xl1-
|
|
61
|
-
"@xyo-network/xl1-
|
|
58
|
+
"@xyo-network/xl1-protocol": "~1.14.16",
|
|
59
|
+
"@xyo-network/xl1-protocol-sdk": "~1.17.1",
|
|
60
|
+
"@xyo-network/xl1-rpc": "~1.17.1",
|
|
61
|
+
"@xyo-network/xl1-validation": "~1.17.1",
|
|
62
|
+
"@xyo-network/xl1-wrappers": "~1.17.1",
|
|
62
63
|
"async-mutex": "~0.5.0",
|
|
63
64
|
"ethers": "6.15.0",
|
|
64
|
-
"lru-cache": "~11.2.
|
|
65
|
+
"lru-cache": "~11.2.4",
|
|
65
66
|
"zod": "~4.1.13"
|
|
66
67
|
},
|
|
67
68
|
"devDependencies": {
|
|
68
69
|
"@types/node": "~24.10.1",
|
|
69
|
-
"@xylabs/sdk-js": "~5.0.
|
|
70
|
+
"@xylabs/sdk-js": "~5.0.48",
|
|
70
71
|
"@xylabs/ts-scripts-yarn3": "~7.2.8",
|
|
71
72
|
"@xylabs/tsconfig": "~7.2.8",
|
|
72
|
-
"@xylabs/vitest-extended": "~5.0.
|
|
73
|
-
"@xyo-network/account": "~5.2.
|
|
74
|
-
"@xyo-network/account-model": "~5.2.
|
|
75
|
-
"@xyo-network/chain-validation": "~1.
|
|
76
|
-
"@xyo-network/wallet": "~5.2.
|
|
73
|
+
"@xylabs/vitest-extended": "~5.0.48",
|
|
74
|
+
"@xyo-network/account": "~5.2.13",
|
|
75
|
+
"@xyo-network/account-model": "~5.2.13",
|
|
76
|
+
"@xyo-network/chain-validation": "~1.17.1",
|
|
77
|
+
"@xyo-network/wallet": "~5.2.13",
|
|
78
|
+
"@xyo-network/wallet-model": "~5.2.13",
|
|
79
|
+
"cosmiconfig": "^9.0.0",
|
|
77
80
|
"eslint": "^9.39.1",
|
|
78
81
|
"tslib": "~2.8.1",
|
|
79
82
|
"typescript": "~5.9.3",
|
|
80
|
-
"vitest": "~4.0.
|
|
83
|
+
"vitest": "~4.0.15",
|
|
81
84
|
"vitest-mock-extended": "~3.1.0",
|
|
82
85
|
"web3-types": "~1.10.0"
|
|
83
86
|
},
|
|
@@ -1,18 +1,21 @@
|
|
|
1
1
|
import type { Hash } from '@xylabs/sdk-js'
|
|
2
2
|
import { assertEx } from '@xylabs/sdk-js'
|
|
3
3
|
import type { ReadArchivist } from '@xyo-network/archivist-model'
|
|
4
|
-
import { findMostRecentBlock } from '@xyo-network/chain-protocol'
|
|
5
4
|
import type { Payload, WithStorageMeta } from '@xyo-network/payload-model'
|
|
6
5
|
import type { ChainId } from '@xyo-network/xl1-protocol'
|
|
7
6
|
import { StepSizes } from '@xyo-network/xl1-protocol'
|
|
8
|
-
import type {
|
|
9
|
-
|
|
7
|
+
import type {
|
|
8
|
+
AccountBalanceViewer, BalancesStepSummary, SimpleAccountBalanceViewerParams, SimpleBlockViewerParams, TransfersStepSummary,
|
|
9
|
+
} from '@xyo-network/xl1-protocol-sdk'
|
|
10
|
+
import {
|
|
11
|
+
findMostRecentBlock, LruCacheMap, readPayloadMapFromStore,
|
|
12
|
+
SimpleAccountBalanceViewer,
|
|
13
|
+
SimpleBlockViewer,
|
|
14
|
+
} from '@xyo-network/xl1-protocol-sdk'
|
|
10
15
|
import { Semaphore } from 'async-mutex'
|
|
11
16
|
|
|
12
|
-
import { BaseAccountBalanceService } from './BaseAccountBalanceService.ts'
|
|
13
|
-
|
|
14
17
|
// this is intended to only be used for testing
|
|
15
|
-
export const
|
|
18
|
+
export const accountBalancesViewerFromArchivist = async (
|
|
16
19
|
chainId: ChainId,
|
|
17
20
|
archivist: ReadArchivist<WithStorageMeta<Payload>>,
|
|
18
21
|
): Promise<AccountBalanceViewer> => {
|
|
@@ -22,12 +25,21 @@ export const accountBalancesServiceFromArchivist = async (
|
|
|
22
25
|
noDisposeOnSet: false,
|
|
23
26
|
updateAgeOnGet: true,
|
|
24
27
|
})
|
|
28
|
+
|
|
29
|
+
const transferSummaryMap = new LruCacheMap<string, TransfersStepSummary>({
|
|
30
|
+
max: 100_000,
|
|
31
|
+
allowStale: true,
|
|
32
|
+
noDisposeOnSet: false,
|
|
33
|
+
updateAgeOnGet: true,
|
|
34
|
+
})
|
|
35
|
+
|
|
25
36
|
const chainMap = readPayloadMapFromStore<WithStorageMeta<Payload>>(archivist)
|
|
26
37
|
const headFunc = async (): Promise<[Hash, number]> => {
|
|
27
|
-
const head = await findMostRecentBlock(archivist)
|
|
28
|
-
return [
|
|
38
|
+
const head = assertEx(await findMostRecentBlock(archivist), () => 'No blocks found in chainArchivist')
|
|
39
|
+
return [head._hash, head.block]
|
|
29
40
|
}
|
|
30
|
-
|
|
41
|
+
|
|
42
|
+
const service = await SimpleAccountBalanceViewer.create({
|
|
31
43
|
context: {
|
|
32
44
|
chainId,
|
|
33
45
|
store: { chainMap },
|
|
@@ -35,6 +47,22 @@ export const accountBalancesServiceFromArchivist = async (
|
|
|
35
47
|
summaryMap,
|
|
36
48
|
head: headFunc,
|
|
37
49
|
},
|
|
38
|
-
|
|
50
|
+
transfersSummaryContext: {
|
|
51
|
+
chainId,
|
|
52
|
+
store: { chainMap },
|
|
53
|
+
stepSemaphores: StepSizes.map(() => new Semaphore(20)),
|
|
54
|
+
summaryMap: transferSummaryMap,
|
|
55
|
+
head: headFunc,
|
|
56
|
+
|
|
57
|
+
},
|
|
58
|
+
blockViewer: await SimpleBlockViewer.create({
|
|
59
|
+
context: {
|
|
60
|
+
chainId,
|
|
61
|
+
head: headFunc,
|
|
62
|
+
store: { chainMap },
|
|
63
|
+
},
|
|
64
|
+
finalizedArchivist: archivist,
|
|
65
|
+
} satisfies SimpleBlockViewerParams),
|
|
66
|
+
} satisfies SimpleAccountBalanceViewerParams)
|
|
39
67
|
return service
|
|
40
68
|
}
|
package/src/BaseService.ts
CHANGED
|
@@ -1,6 +1,5 @@
|
|
|
1
1
|
import type { EventData, Promisable } from '@xylabs/sdk-js'
|
|
2
2
|
import { AbstractCreatable, creatable } from '@xylabs/sdk-js'
|
|
3
|
-
import { spanRoot, spanRootAsync } from '@xylabs/telemetry'
|
|
4
3
|
import { Mutex } from 'async-mutex'
|
|
5
4
|
|
|
6
5
|
import type { BaseAccountableServiceParams, BaseServiceParams } from './model/index.ts'
|
|
@@ -24,18 +23,6 @@ export class BaseService<TParams extends BaseServiceParams = BaseServiceParams,
|
|
|
24
23
|
return await this.create(params) as TService
|
|
25
24
|
})
|
|
26
25
|
}
|
|
27
|
-
|
|
28
|
-
paramsHandler(params?: Partial<TParams>): TParams {
|
|
29
|
-
return params as TParams
|
|
30
|
-
}
|
|
31
|
-
|
|
32
|
-
span<T>(name: string, fn: () => T): T {
|
|
33
|
-
return spanRoot(name, fn, this.tracer)
|
|
34
|
-
}
|
|
35
|
-
|
|
36
|
-
async spanAsync<T>(name: string, fn: () => Promise<T>): Promise<T> {
|
|
37
|
-
return await spanRootAsync(name, fn, this.tracer)
|
|
38
|
-
}
|
|
39
26
|
}
|
|
40
27
|
|
|
41
28
|
export abstract class BaseAccountableService<
|
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
import {
|
|
2
|
+
AbstractCreatable,
|
|
3
|
+
assertEx, creatable, CreatableParams, toEthAddress,
|
|
4
|
+
} from '@xylabs/sdk-js'
|
|
5
|
+
import { XyoChainRewards__factory as XyoChainRewardsFactory } from '@xyo-network/typechain'
|
|
6
|
+
import {
|
|
7
|
+
asAttoXL1, AttoXL1, XL1BlockNumber,
|
|
8
|
+
} from '@xyo-network/xl1-protocol'
|
|
9
|
+
import {
|
|
10
|
+
BlockRewardViewer,
|
|
11
|
+
ChainContractViewer,
|
|
12
|
+
} from '@xyo-network/xl1-protocol-sdk'
|
|
13
|
+
import { Provider } from 'ethers/providers'
|
|
14
|
+
|
|
15
|
+
export interface EvmBlockRewardViewerParams extends CreatableParams {
|
|
16
|
+
chainContractViewer: ChainContractViewer
|
|
17
|
+
provider: Provider
|
|
18
|
+
}
|
|
19
|
+
|
|
20
|
+
@creatable()
|
|
21
|
+
export class EvmBlockRewardViewer extends AbstractCreatable<EvmBlockRewardViewerParams> implements BlockRewardViewer {
|
|
22
|
+
protected _contractAddress: string | undefined
|
|
23
|
+
|
|
24
|
+
protected get chainContractViewer() {
|
|
25
|
+
return assertEx(this.params.chainContractViewer, () => 'chainContractViewer is required')
|
|
26
|
+
}
|
|
27
|
+
|
|
28
|
+
protected get contractAddress() {
|
|
29
|
+
return assertEx(this._contractAddress, () => 'contractAddress is required')
|
|
30
|
+
}
|
|
31
|
+
|
|
32
|
+
protected get provider() {
|
|
33
|
+
return assertEx(this.params.provider, () => 'provider is required')
|
|
34
|
+
}
|
|
35
|
+
|
|
36
|
+
async allowedRewardForBlock(blockNumber: XL1BlockNumber): Promise<AttoXL1> {
|
|
37
|
+
const contract = XyoChainRewardsFactory.connect(toEthAddress(this.contractAddress), this.provider)
|
|
38
|
+
return asAttoXL1(await contract.calcBlockReward(blockNumber))
|
|
39
|
+
}
|
|
40
|
+
|
|
41
|
+
override async createHandler() {
|
|
42
|
+
await super.createHandler()
|
|
43
|
+
try {
|
|
44
|
+
this._contractAddress = await this.chainContractViewer.rewardsContract()
|
|
45
|
+
} catch (ex) {
|
|
46
|
+
const error = ex as Error
|
|
47
|
+
throw new Error(`Failed to get rewards contract address: ${error.message}`)
|
|
48
|
+
}
|
|
49
|
+
}
|
|
50
|
+
}
|
package/src/BlockReward/index.ts
CHANGED
|
@@ -1,24 +1,34 @@
|
|
|
1
|
-
import type {
|
|
1
|
+
import type {
|
|
2
|
+
Hash, Hex, Promisable,
|
|
3
|
+
} from '@xylabs/sdk-js'
|
|
2
4
|
import {
|
|
3
5
|
assertEx,
|
|
4
6
|
isDefined, isNull, isUndefined,
|
|
5
7
|
} from '@xylabs/sdk-js'
|
|
6
8
|
import { PayloadBuilder } from '@xyo-network/payload-builder'
|
|
7
|
-
import type {
|
|
8
|
-
|
|
9
|
+
import type {
|
|
10
|
+
Payload, WithHashMeta, WithStorageMeta,
|
|
11
|
+
} from '@xyo-network/payload-model'
|
|
12
|
+
import type {
|
|
13
|
+
BlockBoundWitness, SignedHydratedBlockWithHashMeta, XL1BlockNumber,
|
|
14
|
+
} from '@xyo-network/xl1-protocol'
|
|
9
15
|
import {
|
|
10
|
-
asBlockBoundWitness, asBlockBoundWitnessWithStorageMeta, isBlockBoundWitnessWithHashMeta,
|
|
16
|
+
asBlockBoundWitness, asBlockBoundWitnessWithStorageMeta, asSignedHydratedBlockWithHashMeta, asXL1BlockNumber, isBlockBoundWitnessWithHashMeta,
|
|
11
17
|
} from '@xyo-network/xl1-protocol'
|
|
12
18
|
import type {
|
|
13
|
-
|
|
19
|
+
BlockViewer,
|
|
20
|
+
ChainIteratorServiceEventData,
|
|
21
|
+
ChainStoreRead,
|
|
22
|
+
PayloadMapRead,
|
|
14
23
|
} from '@xyo-network/xl1-protocol-sdk'
|
|
24
|
+
import { hydrateBlock } from '@xyo-network/xl1-protocol-sdk'
|
|
15
25
|
import { LRUCache } from 'lru-cache'
|
|
16
26
|
|
|
17
27
|
import { BaseService } from '../BaseService.ts'
|
|
18
28
|
import type { XyoChainIteratorParams } from './model/index.ts'
|
|
19
29
|
|
|
20
30
|
export class ChainBlockNumberIterationService extends BaseService<XyoChainIteratorParams, ChainIteratorServiceEventData>
|
|
21
|
-
implements
|
|
31
|
+
implements BlockViewer {
|
|
22
32
|
protected _blocksByBlockNumber = new LRUCache<number, WithStorageMeta<BlockBoundWitness>>({ max: 10_000 })
|
|
23
33
|
protected _currentHead: WithStorageMeta<BlockBoundWitness> | undefined
|
|
24
34
|
|
|
@@ -26,6 +36,56 @@ export class ChainBlockNumberIterationService extends BaseService<XyoChainIterat
|
|
|
26
36
|
|
|
27
37
|
get chainMap(): PayloadMapRead<WithStorageMeta<Payload>> { return assertEx(this.params.chainMap) }
|
|
28
38
|
|
|
39
|
+
get chainStoreRead() {
|
|
40
|
+
return { chainMap: this.chainMap } satisfies ChainStoreRead
|
|
41
|
+
}
|
|
42
|
+
|
|
43
|
+
async blockByHash(hash: Hash): Promise<SignedHydratedBlockWithHashMeta | null> {
|
|
44
|
+
return asSignedHydratedBlockWithHashMeta(await hydrateBlock(this.chainStoreRead, hash)) ?? null
|
|
45
|
+
}
|
|
46
|
+
|
|
47
|
+
async blockByNumber(block: XL1BlockNumber): Promise<SignedHydratedBlockWithHashMeta | null> {
|
|
48
|
+
return asSignedHydratedBlockWithHashMeta(await this.get(block)) ?? null
|
|
49
|
+
}
|
|
50
|
+
|
|
51
|
+
async blocksByHash(hash: Hash, limit: number = 100): Promise<SignedHydratedBlockWithHashMeta[]> {
|
|
52
|
+
const results: SignedHydratedBlockWithHashMeta[] = []
|
|
53
|
+
let currentBlock = await this.blockByHash(hash)
|
|
54
|
+
while (currentBlock !== null && (isUndefined(limit) || results.length < limit)) {
|
|
55
|
+
results.push(currentBlock)
|
|
56
|
+
const previousHash = currentBlock[0].previous
|
|
57
|
+
if (isNull(previousHash)) break
|
|
58
|
+
currentBlock = await this.blockByHash(previousHash)
|
|
59
|
+
}
|
|
60
|
+
return results
|
|
61
|
+
}
|
|
62
|
+
|
|
63
|
+
async blocksByNumber(blockNumber: XL1BlockNumber, limit: number = 100): Promise<SignedHydratedBlockWithHashMeta[]> {
|
|
64
|
+
const results: SignedHydratedBlockWithHashMeta[] = []
|
|
65
|
+
let currentBlock = await this.blockByNumber(blockNumber)
|
|
66
|
+
while (currentBlock !== null && (isUndefined(limit) || results.length < limit)) {
|
|
67
|
+
results.push(currentBlock)
|
|
68
|
+
if (currentBlock[0].block === 0) break
|
|
69
|
+
const previousNumber = asXL1BlockNumber(currentBlock[0].block - 1, true)
|
|
70
|
+
currentBlock = await this.blockByNumber(previousNumber)
|
|
71
|
+
}
|
|
72
|
+
return results
|
|
73
|
+
}
|
|
74
|
+
|
|
75
|
+
async currentBlock(): Promise<SignedHydratedBlockWithHashMeta> {
|
|
76
|
+
return assertEx(await this.blockByHash(await this.currentBlockHash()), () => 'Current block not found')
|
|
77
|
+
}
|
|
78
|
+
|
|
79
|
+
async currentBlockHash(): Promise<Hash> {
|
|
80
|
+
const head = assertEx(await this.head(), () => 'Head is not set')
|
|
81
|
+
return head._hash
|
|
82
|
+
}
|
|
83
|
+
|
|
84
|
+
async currentBlockNumber(): Promise<XL1BlockNumber> {
|
|
85
|
+
const head = assertEx(await this.head(), () => 'Head is not set')
|
|
86
|
+
return head.block
|
|
87
|
+
}
|
|
88
|
+
|
|
29
89
|
async get(block: number): Promise<WithStorageMeta<BlockBoundWitness>> {
|
|
30
90
|
const head = await this.head()
|
|
31
91
|
// if(isUndefined(head)) return undefined
|
|
@@ -68,6 +128,14 @@ export class ChainBlockNumberIterationService extends BaseService<XyoChainIterat
|
|
|
68
128
|
return await this.get(nextBlockNumber)
|
|
69
129
|
}
|
|
70
130
|
|
|
131
|
+
payloadByHash(_hash: Hash): Promisable<WithHashMeta<Payload> | null> {
|
|
132
|
+
throw new Error('Method [payloadByHash] not implemented.')
|
|
133
|
+
}
|
|
134
|
+
|
|
135
|
+
payloadsByHash(_hashes: Hash[]): Promisable<WithHashMeta<Payload>[]> {
|
|
136
|
+
throw new Error('Method [payloadsByHash] not implemented.')
|
|
137
|
+
}
|
|
138
|
+
|
|
71
139
|
// TODO: Decide on inclusive/exclusive (probably need inclusive to account for chain head)
|
|
72
140
|
// and then communicate via method name and documentation
|
|
73
141
|
async previous(block: number | undefined = undefined, count: number = 1): Promise<WithStorageMeta<BlockBoundWitness>[]> {
|