@xyo-network/xl1-protocol-sdk 1.26.11 → 1.26.13
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/package.json +29 -16
- package/src/ChainContextHelpers.ts +0 -50
- package/src/CreatableProvider/AbstractCreatableProvider.ts +0 -97
- package/src/CreatableProvider/CreatableProvider.ts +0 -102
- package/src/CreatableProvider/CreatableProviderRegistry.ts +0 -94
- package/src/CreatableProvider/GetInstanceOptions.ts +0 -11
- package/src/CreatableProvider/LabeledCreatableProviderFactory.ts +0 -24
- package/src/CreatableProvider/ProviderFactory.ts +0 -138
- package/src/CreatableProvider/ProviderFactoryLocator.ts +0 -170
- package/src/CreatableProvider/ProviderFactoryLocatorInstance.ts +0 -70
- package/src/CreatableProvider/index.ts +0 -8
- package/src/SignedBigInt.ts +0 -59
- package/src/_internal/context/getTestProviderContext.ts +0 -13
- package/src/_internal/context/index.ts +0 -1
- package/src/_internal/index.ts +0 -2
- package/src/actor/ActorV3.ts +0 -177
- package/src/actor/index.ts +0 -1
- package/src/amount/ShiftedBigInt.ts +0 -73
- package/src/amount/XL1Amount.ts +0 -103
- package/src/amount/index.ts +0 -4
- package/src/amount/splitOnDecimal.ts +0 -6
- package/src/amount/splitOnDecimalToString.ts +0 -40
- package/src/block/hydrate/allHashesPresent.ts +0 -8
- package/src/block/hydrate/blockPayloadsFromHydratedBlock.ts +0 -12
- package/src/block/hydrate/flattenHydratedBlock.ts +0 -28
- package/src/block/hydrate/flattenHydratedBlocks.ts +0 -7
- package/src/block/hydrate/hydrateBlock.ts +0 -43
- package/src/block/hydrate/index.ts +0 -7
- package/src/block/hydrate/transactionsFromHydratedBlock.ts +0 -7
- package/src/block/hydrate/tryHydrateBlock.ts +0 -26
- package/src/block/index.ts +0 -2
- package/src/block/primitives/blockFromBlockNumber.ts +0 -69
- package/src/block/primitives/frames/calculateFramesFromRange.ts +0 -30
- package/src/block/primitives/frames/deepCalculateFramesFromRange.ts +0 -28
- package/src/block/primitives/frames/index.ts +0 -2
- package/src/block/primitives/hashFromBlockNumber.ts +0 -9
- package/src/block/primitives/index.ts +0 -7
- package/src/block/primitives/model.ts +0 -18
- package/src/block/primitives/payloads/ChainWindow.ts +0 -7
- package/src/block/primitives/payloads/index.ts +0 -1
- package/src/block/primitives/toStepIdentityString.ts +0 -6
- package/src/block/primitives/validateTransactionOpcodes.ts +0 -45
- package/src/config/Actor.ts +0 -32
- package/src/config/Actors.ts +0 -9
- package/src/config/Base.ts +0 -27
- package/src/config/Chain.ts +0 -23
- package/src/config/Config.ts +0 -24
- package/src/config/DataLake/DataLake.ts +0 -12
- package/src/config/DataLake/DataLakeRemoteConfig.ts +0 -11
- package/src/config/DataLake/RestDataLakeConfig.ts +0 -18
- package/src/config/DataLake/RouterDataLakeConfig.ts +0 -22
- package/src/config/DataLake/index.ts +0 -4
- package/src/config/DeepPartial.ts +0 -4
- package/src/config/Evm.ts +0 -38
- package/src/config/HostActor.ts +0 -32
- package/src/config/Log.ts +0 -25
- package/src/config/Provider.ts +0 -20
- package/src/config/Providers.ts +0 -9
- package/src/config/Remote.ts +0 -59
- package/src/config/Telemetry.ts +0 -49
- package/src/config/UsageMeta.ts +0 -46
- package/src/config/Validation.ts +0 -29
- package/src/config/index.ts +0 -12
- package/src/config/storage/Storage.ts +0 -16
- package/src/config/storage/driver/Mongo.ts +0 -53
- package/src/config/storage/driver/index.ts +0 -1
- package/src/config/storage/index.ts +0 -2
- package/src/constants.ts +0 -4
- package/src/context/Actor.ts +0 -20
- package/src/context/HostActor.ts +0 -20
- package/src/context/getEmptyProviderContext.ts +0 -19
- package/src/context/index.ts +0 -3
- package/src/createDeclarationPayload.ts +0 -15
- package/src/createTransferPayload.ts +0 -16
- package/src/driver/cache/LruCacheMap.ts +0 -48
- package/src/driver/cache/index.ts +0 -1
- package/src/driver/index.ts +0 -2
- package/src/driver/memory/MemoryMap.ts +0 -48
- package/src/driver/memory/index.ts +0 -1
- package/src/eip-712/Payloads/EIP712Data.ts +0 -35
- package/src/eip-712/Payloads/EIP712Signature.ts +0 -32
- package/src/eip-712/Payloads/index.ts +0 -2
- package/src/eip-712/Types.ts +0 -41
- package/src/eip-712/index.ts +0 -4
- package/src/eip-712/sign.ts +0 -19
- package/src/eip-712/spec/fixtures.ts +0 -27
- package/src/eip-712/verify.ts +0 -20
- package/src/getFileConfig.ts +0 -36
- package/src/index.ts +0 -27
- package/src/instances/Address.ts +0 -16
- package/src/instances/BoundWitness.ts +0 -13
- package/src/instances/Data.ts +0 -4
- package/src/instances/Fees.ts +0 -9
- package/src/instances/HydratedBoundWitness.ts +0 -16
- package/src/instances/Object.ts +0 -6
- package/src/instances/Payload.ts +0 -7
- package/src/instances/Signature.ts +0 -12
- package/src/instances/block/BlockFields.ts +0 -18
- package/src/instances/block/HydratedBlock.ts +0 -10
- package/src/instances/block/index.ts +0 -1
- package/src/instances/index.ts +0 -10
- package/src/instances/modifiers/BlockWindowInstance.ts +0 -8
- package/src/instances/modifiers/BlockWindowState.ts +0 -6
- package/src/instances/modifiers/Signed.ts +0 -9
- package/src/instances/modifiers/Validatable.ts +0 -6
- package/src/instances/modifiers/index.ts +0 -4
- package/src/instances/transaction/HydratedTransaction.ts +0 -9
- package/src/instances/transaction/TransactionFields.ts +0 -22
- package/src/instances/transaction/index.ts +0 -1
- package/src/isInternetAvailable.ts +0 -11
- package/src/model/ChainFork/ChainForkStatic.ts +0 -9
- package/src/model/ChainFork/index.ts +0 -1
- package/src/model/ChainIdentity.ts +0 -6
- package/src/model/ChainStore.ts +0 -16
- package/src/model/CreatableProviderContext.ts +0 -6
- package/src/model/CreatableProviderContext.zod.ts +0 -55
- package/src/model/PayloadBundle/bundledPayloadToHydratedBlock.ts +0 -15
- package/src/model/PayloadBundle/bundledPayloadToHydratedTransaction.ts +0 -15
- package/src/model/PayloadBundle/hydratedBlockToPayloadBundle.ts +0 -19
- package/src/model/PayloadBundle/hydratedTransactionToPayloadBundle.ts +0 -19
- package/src/model/PayloadBundle/index.ts +0 -4
- package/src/model/index.ts +0 -6
- package/src/multipliers.ts +0 -18
- package/src/payloads/AddressPairPayload.ts +0 -27
- package/src/payloads/index.ts +0 -4
- package/src/payloads/netBalancesForPayloads.ts +0 -24
- package/src/payloads/netSchemasForPayloads.ts +0 -24
- package/src/payloads/netTransfersForPayloads.ts +0 -27
- package/src/primitives/block/index.ts +0 -2
- package/src/primitives/block/range/blockRangeSteps.ts +0 -23
- package/src/primitives/block/range/index.ts +0 -1
- package/src/primitives/block/rate/blockRate.ts +0 -77
- package/src/primitives/block/rate/index.ts +0 -4
- package/src/primitives/block/rate/stepRate.ts +0 -37
- package/src/primitives/block/rate/timeHelpers.ts +0 -61
- package/src/primitives/block/rate/timeRate.ts +0 -121
- package/src/primitives/chain/getWindowedChain.ts +0 -50
- package/src/primitives/chain/index.ts +0 -3
- package/src/primitives/chain/step/chainStepRewardAddress.ts +0 -30
- package/src/primitives/chain/step/index.ts +0 -4
- package/src/primitives/chain/step/stepRewardBlock.ts +0 -13
- package/src/primitives/chain/step/stepRewardTotal.ts +0 -46
- package/src/primitives/chain/step/stepsRewardTotal.ts +0 -37
- package/src/primitives/chain/time/externalBlockNumberFromXL1BlockNumber.ts +0 -32
- package/src/primitives/chain/time/externalBlockRangeFromStep.ts +0 -21
- package/src/primitives/chain/time/externalBlockRangeFromXL1BlockRange.ts +0 -17
- package/src/primitives/chain/time/index.ts +0 -3
- package/src/primitives/datalake/addDataLakePayloads.ts +0 -18
- package/src/primitives/datalake/addDataLakePayloadsToPayloads.ts +0 -24
- package/src/primitives/datalake/index.ts +0 -2
- package/src/primitives/index.ts +0 -13
- package/src/primitives/mapToMapType.ts +0 -35
- package/src/primitives/payload/index.ts +0 -1
- package/src/primitives/payload/mergeTransfers.ts +0 -16
- package/src/primitives/readPayloadMapFromStore.ts +0 -58
- package/src/primitives/rewardFromBlockNumber.ts +0 -19
- package/src/primitives/rewards/index.ts +0 -1
- package/src/primitives/rewards/networkStakeStepRewardPositionWeight.ts +0 -26
- package/src/primitives/stake/activeStakeAtTimeByAddress.ts +0 -27
- package/src/primitives/stake/activeStakeAtTimeByPosition.ts +0 -25
- package/src/primitives/stake/allStakersForRange.ts +0 -32
- package/src/primitives/stake/allStakersForStep.ts +0 -24
- package/src/primitives/stake/index.ts +0 -6
- package/src/primitives/stake/mergedAddRemoveStakeEventsByPosition.ts +0 -15
- package/src/primitives/stake/mergedAddRemoveStakeEventsByStaker.ts +0 -17
- package/src/primitives/stake/weightedStakeForRangeByPosition.ts +0 -69
- package/src/primitives/state/findMostRecentBlock.ts +0 -44
- package/src/primitives/state/hydratedBlockByNumber.ts +0 -25
- package/src/primitives/state/index.ts +0 -2
- package/src/primitives/step/completedStepRewardAddress.ts +0 -10
- package/src/primitives/step/derivedReceiveAddress.ts +0 -9
- package/src/primitives/step/index.ts +0 -4
- package/src/primitives/step/stepBlockRange.ts +0 -9
- package/src/primitives/step/stepTransferIndex.ts +0 -19
- package/src/primitives/transaction/elevatedPayloads.ts +0 -24
- package/src/primitives/transaction/index.ts +0 -1
- package/src/primitives/uncle/findBestUncle.ts +0 -9
- package/src/primitives/uncle/findUncles.ts +0 -75
- package/src/primitives/uncle/index.ts +0 -3
- package/src/primitives/uncle/scoreUncle.ts +0 -7
- package/src/services/AccountTransfersService.ts +0 -13
- package/src/services/BlockProducerService.ts +0 -11
- package/src/services/Chain/BaseChainService.ts +0 -4
- package/src/services/Chain/ChainHeadService.ts +0 -8
- package/src/services/Chain/ChainService.ts +0 -6
- package/src/services/Chain/index.ts +0 -3
- package/src/services/Election.ts +0 -14
- package/src/services/NetworkStakeService.ts +0 -4
- package/src/services/Params.ts +0 -13
- package/src/services/PendingTransactionsService.ts +0 -7
- package/src/services/SchemasService.ts +0 -11
- package/src/services/StakeIntentService/ChainIndexingServiceStateSchema.ts +0 -50
- package/src/services/StakeIntentService/StakeIntentService.ts +0 -35
- package/src/services/StakeIntentService/index.ts +0 -2
- package/src/services/index.ts +0 -8
- package/src/simple/StakeEventsViewer/SimpleStakeEventsViewer.ts +0 -93
- package/src/simple/StakeEventsViewer/index.ts +0 -1
- package/src/simple/StakeTotalsViewer/SimpleStakeTotalsViewer.ts +0 -116
- package/src/simple/StakeTotalsViewer/index.ts +0 -1
- package/src/simple/StakeViewer/SimpleStakeViewer.ts +0 -164
- package/src/simple/StakeViewer/index.ts +0 -1
- package/src/simple/TransactionViewer/SimpleTransactionViewer.ts +0 -100
- package/src/simple/TransactionViewer/index.ts +0 -1
- package/src/simple/accountBalance/SimpleAccountBalanceViewer.ts +0 -271
- package/src/simple/accountBalance/index.ts +0 -1
- package/src/simple/block/SimpleBlockViewer.ts +0 -231
- package/src/simple/block/index.ts +0 -1
- package/src/simple/blockInvalidation/SimpleBlockInvalidationViewer.ts +0 -197
- package/src/simple/blockInvalidation/index.ts +0 -1
- package/src/simple/blockReward/SimpleBlockRewardViewer.ts +0 -27
- package/src/simple/blockReward/index.ts +0 -1
- package/src/simple/blockValidation/SimpleBlockValidationViewer.ts +0 -194
- package/src/simple/blockValidation/index.ts +0 -1
- package/src/simple/chainContractViewer/SimpleChainContractViewer.ts +0 -92
- package/src/simple/chainContractViewer/index.ts +0 -1
- package/src/simple/client/SimpleXyoClient.ts +0 -14
- package/src/simple/client/index.ts +0 -1
- package/src/simple/datalake/AbstractRestDataLake.ts +0 -70
- package/src/simple/datalake/AbstractSimpleDataLake.ts +0 -62
- package/src/simple/datalake/RestDataLakeRunner.ts +0 -54
- package/src/simple/datalake/RestDataLakeViewer.ts +0 -22
- package/src/simple/datalake/SimpleDataLakeRunner.ts +0 -44
- package/src/simple/datalake/SimpleDataLakeViewer.ts +0 -24
- package/src/simple/datalake/index.ts +0 -4
- package/src/simple/finalization/SimpleFinalizationRunner.ts +0 -45
- package/src/simple/finalization/SimpleFinalizationViewer.ts +0 -123
- package/src/simple/finalization/index.ts +0 -2
- package/src/simple/gateway/SimpleXyoGateway.ts +0 -30
- package/src/simple/gateway/SimpleXyoGatewayRunner.ts +0 -137
- package/src/simple/gateway/index.ts +0 -2
- package/src/simple/index.ts +0 -22
- package/src/simple/mempool/SimpleMempoolRunner.ts +0 -390
- package/src/simple/mempool/SimpleMempoolViewer.ts +0 -215
- package/src/simple/mempool/index.ts +0 -2
- package/src/simple/network/SimpleXyoNetwork.ts +0 -48
- package/src/simple/network/index.ts +0 -1
- package/src/simple/network/lib/FailedNetworkStatusPayloads.ts +0 -16
- package/src/simple/network/lib/StatusNetworks.ts +0 -32
- package/src/simple/network/lib/index.ts +0 -2
- package/src/simple/permissions/SimpleXyoPermissions.ts +0 -82
- package/src/simple/permissions/index.ts +0 -2
- package/src/simple/permissions/store/MemoryPermissions.ts +0 -32
- package/src/simple/permissions/store/PermissionsStore.ts +0 -17
- package/src/simple/permissions/store/index.ts +0 -2
- package/src/simple/runner/SimpleXyoRunner.ts +0 -41
- package/src/simple/runner/index.ts +0 -1
- package/src/simple/signer/SimpleXyoSigner.ts +0 -78
- package/src/simple/signer/index.ts +0 -1
- package/src/simple/timeSync2/SimpleTimeSyncViewer.ts +0 -132
- package/src/simple/timeSync2/index.ts +0 -1
- package/src/simple/transactionInvalidation/SimpleTransactionInvalidationViewer.ts +0 -197
- package/src/simple/transactionInvalidation/index.ts +0 -1
- package/src/simple/transactionValidation/SimpleTransactionValidationViewer.ts +0 -173
- package/src/simple/transactionValidation/index.ts +0 -1
- package/src/simple/windowedBlock/SimpleWindowedBlockViewer.ts +0 -207
- package/src/simple/windowedBlock/index.ts +0 -1
- package/src/status/RuntimeStatusMonitor.ts +0 -120
- package/src/status/ServiceStatus.ts +0 -21
- package/src/status/index.ts +0 -2
- package/src/summary/index.ts +0 -2
- package/src/summary/model/BalancesStepSummary.ts +0 -35
- package/src/summary/model/SchemasStepSummary.ts +0 -33
- package/src/summary/model/StepSummary.ts +0 -20
- package/src/summary/model/TransfersSummary.ts +0 -36
- package/src/summary/model/index.ts +0 -4
- package/src/summary/primitives/balances/balancesStepSummaryFromRange.ts +0 -94
- package/src/summary/primitives/balances/balancesSummary.ts +0 -48
- package/src/summary/primitives/balances/index.ts +0 -2
- package/src/summary/primitives/index.ts +0 -3
- package/src/summary/primitives/schemas/index.ts +0 -2
- package/src/summary/primitives/schemas/schemasStepSummaryFromRange.ts +0 -86
- package/src/summary/primitives/schemas/schemasSummary.ts +0 -44
- package/src/summary/primitives/transfers/index.ts +0 -2
- package/src/summary/primitives/transfers/transfersStepSummaryFromRange.ts +0 -109
- package/src/summary/primitives/transfers/transfersSummary.ts +0 -52
- package/src/test/BuildBlockOptions.ts +0 -81
- package/src/test/buildBlock.ts +0 -105
- package/src/test/buildGenesisBlock.ts +0 -29
- package/src/test/buildNextBlock.ts +0 -37
- package/src/test/buildRandomChain.ts +0 -92
- package/src/test/buildRandomGenesisBlock.ts +0 -47
- package/src/test/createGenesisBlock.ts +0 -41
- package/src/test/createProducerChainStakeIntentTransaction.ts +0 -48
- package/src/test/getSimpleBlockViewerLocator.ts +0 -41
- package/src/test/getTestProviderContext.ts +0 -8
- package/src/test/index.ts +0 -2
- package/src/time/index.ts +0 -1
- package/src/time/primitives/index.ts +0 -1
- package/src/time/primitives/xl1BlockNumberToEthBlockNumber.ts +0 -13
- package/src/transaction/TransactionBuilder.ts +0 -164
- package/src/transaction/buildRandomTransaction.ts +0 -38
- package/src/transaction/buildTransaction.ts +0 -68
- package/src/transaction/buildUnsignedTransaction.ts +0 -56
- package/src/transaction/confirmSubmittedTransaction.ts +0 -42
- package/src/transaction/hydrateTransaction.ts +0 -117
- package/src/transaction/index.ts +0 -9
- package/src/transaction/primitives/index.ts +0 -4
- package/src/transaction/primitives/transactionBlockByteCount.ts +0 -10
- package/src/transaction/primitives/transactionElevatedPayloads.ts +0 -18
- package/src/transaction/primitives/transactionOperations.ts +0 -13
- package/src/transaction/primitives/transactionRequiredGas.ts +0 -22
- package/src/transaction/script.ts +0 -48
- package/src/transaction/signTransaction.ts +0 -32
- package/src/utils/HydratedCache.ts +0 -39
- package/src/utils/index.ts +0 -2
- package/src/utils/isZodError.ts +0 -11
- package/src/validation/index.ts +0 -2
- package/src/validation/lib/getUrl.ts +0 -7
- package/src/validation/lib/index.ts +0 -2
- package/src/validation/lib/isLocalhost.ts +0 -9
- package/src/validation/schema/Address.ts +0 -2
- package/src/validation/schema/Mnemonic.ts +0 -21
- package/src/validation/schema/index.ts +0 -2
- package/src/wallet/generateXyoBaseWalletFromPhrase.ts +0 -13
- package/src/wallet/index.ts +0 -2
- package/src/wallet/paths.ts +0 -17
|
@@ -1,231 +0,0 @@
|
|
|
1
|
-
import type { Hash } from '@xylabs/sdk-js'
|
|
2
|
-
import {
|
|
3
|
-
assertEx, exists, isUndefined,
|
|
4
|
-
} from '@xylabs/sdk-js'
|
|
5
|
-
import type {
|
|
6
|
-
Payload, ReadArchivist, WithHashMeta,
|
|
7
|
-
} from '@xyo-network/sdk-js'
|
|
8
|
-
import {
|
|
9
|
-
asSignedHydratedBlockWithHashMeta, asSignedHydratedBlockWithStorageMeta, asXL1BlockNumber,
|
|
10
|
-
BlockContextRead,
|
|
11
|
-
BlockRate, BlockViewer, BlockViewerMoniker, ChainContextRead,
|
|
12
|
-
ChainId, DataLakeViewer, DataLakeViewerMoniker, FinalizationViewer, FinalizationViewerMoniker, type SignedHydratedBlockWithHashMeta,
|
|
13
|
-
SignedHydratedBlockWithStorageMeta, SingleTimeConfig, TimeDurations, type XL1BlockNumber, XL1BlockRange,
|
|
14
|
-
} from '@xyo-network/xl1-protocol-lib'
|
|
15
|
-
|
|
16
|
-
import { hydrateBlock } from '../../block/index.ts'
|
|
17
|
-
import type { CreatableProviderParams } from '../../CreatableProvider/index.ts'
|
|
18
|
-
import { AbstractCreatableProvider, creatableProvider } from '../../CreatableProvider/index.ts'
|
|
19
|
-
import { LruCacheMap } from '../../driver/index.ts'
|
|
20
|
-
import { ChainStoreRead } from '../../model/index.ts'
|
|
21
|
-
import {
|
|
22
|
-
addDataLakePayloads,
|
|
23
|
-
addDataLakePayloadsToPayloads,
|
|
24
|
-
calculateBlockRate, calculateStepSizeRate, calculateTimeRate, hydratedBlockByNumber,
|
|
25
|
-
} from '../../primitives/index.ts'
|
|
26
|
-
import { HydratedCache } from '../../utils/index.ts'
|
|
27
|
-
|
|
28
|
-
/** Parameters for SimpleBlockViewer. */
|
|
29
|
-
export interface SimpleBlockViewerParams extends CreatableProviderParams {
|
|
30
|
-
finalizedArchivist: ReadArchivist
|
|
31
|
-
}
|
|
32
|
-
|
|
33
|
-
/** SimpleBlockViewer implementation. */
|
|
34
|
-
@creatableProvider()
|
|
35
|
-
export class SimpleBlockViewer extends AbstractCreatableProvider<SimpleBlockViewerParams> implements BlockViewer {
|
|
36
|
-
static readonly defaultMoniker = BlockViewerMoniker
|
|
37
|
-
static readonly dependencies = [FinalizationViewerMoniker]
|
|
38
|
-
static readonly monikers = [BlockViewerMoniker]
|
|
39
|
-
moniker = SimpleBlockViewer.defaultMoniker
|
|
40
|
-
|
|
41
|
-
protected _store?: ChainStoreRead
|
|
42
|
-
protected dataLakeViewer?: DataLakeViewer
|
|
43
|
-
protected finalizationViewer!: FinalizationViewer
|
|
44
|
-
protected payloadCache = new LruCacheMap<Hash, WithHashMeta<Payload>>({ max: 10_000 })
|
|
45
|
-
protected signedHydratedBlockWithDataLakePayloadsCache = new LruCacheMap<Hash, SignedHydratedBlockWithHashMeta>({ max: 2000, ttl: 1000 * 60 * 60 })
|
|
46
|
-
|
|
47
|
-
private _signedHydratedBlockCache: HydratedCache<SignedHydratedBlockWithStorageMeta> | undefined
|
|
48
|
-
|
|
49
|
-
get finalizedArchivist(): ReadArchivist {
|
|
50
|
-
return this.params.finalizedArchivist
|
|
51
|
-
}
|
|
52
|
-
|
|
53
|
-
protected get hydratedBlockCache(): HydratedCache<SignedHydratedBlockWithStorageMeta> {
|
|
54
|
-
if (this._signedHydratedBlockCache) return this._signedHydratedBlockCache
|
|
55
|
-
const context = this.getBlockContextRead()
|
|
56
|
-
this._signedHydratedBlockCache = new HydratedCache<SignedHydratedBlockWithStorageMeta>(context, async (
|
|
57
|
-
context,
|
|
58
|
-
hash: Hash,
|
|
59
|
-
maxDepth?: number,
|
|
60
|
-
minDepth?: number,
|
|
61
|
-
) => {
|
|
62
|
-
const result = await hydrateBlock(context, hash, maxDepth, minDepth)
|
|
63
|
-
return asSignedHydratedBlockWithStorageMeta(result, true)
|
|
64
|
-
}, 20_000)
|
|
65
|
-
return this._signedHydratedBlockCache
|
|
66
|
-
}
|
|
67
|
-
|
|
68
|
-
protected get store() {
|
|
69
|
-
return this._store!
|
|
70
|
-
}
|
|
71
|
-
|
|
72
|
-
static override async paramsHandler(params: Partial<SimpleBlockViewerParams>) {
|
|
73
|
-
return {
|
|
74
|
-
...await super.paramsHandler(params),
|
|
75
|
-
finalizedArchivist: assertEx(params.finalizedArchivist, () => 'finalizedArchivist is required'),
|
|
76
|
-
} satisfies SimpleBlockViewerParams
|
|
77
|
-
}
|
|
78
|
-
|
|
79
|
-
async blockByHash(hash: Hash): Promise<SignedHydratedBlockWithHashMeta | null> {
|
|
80
|
-
return await this.spanAsync('blockByHash', async () => {
|
|
81
|
-
const cachedBlock = this.signedHydratedBlockWithDataLakePayloadsCache.get(hash)
|
|
82
|
-
if (cachedBlock) {
|
|
83
|
-
return cachedBlock
|
|
84
|
-
}
|
|
85
|
-
|
|
86
|
-
const cache = this.hydratedBlockCache
|
|
87
|
-
const block = await cache.get(hash)
|
|
88
|
-
const [result] = block ? await addDataLakePayloads(block, this.dataLakeViewer) : [null, []]
|
|
89
|
-
if (result) {
|
|
90
|
-
this.signedHydratedBlockWithDataLakePayloadsCache.set(hash, result)
|
|
91
|
-
}
|
|
92
|
-
return result
|
|
93
|
-
}, { ...this.context, timeBudgetLimit: 100 })
|
|
94
|
-
}
|
|
95
|
-
|
|
96
|
-
async blockByNumber(blockNumber: XL1BlockNumber): Promise<SignedHydratedBlockWithHashMeta | null> {
|
|
97
|
-
return await this.spanAsync('blockByNumber', async () => {
|
|
98
|
-
const chainContext = await this.getChainContextRead()
|
|
99
|
-
if (isUndefined(chainContext.head)) {
|
|
100
|
-
return null
|
|
101
|
-
}
|
|
102
|
-
return await this.blockByNumberWithContext(chainContext, blockNumber)
|
|
103
|
-
}, { ...this.context, timeBudgetLimit: 100 })
|
|
104
|
-
}
|
|
105
|
-
|
|
106
|
-
async blocksByHash(hash: Hash, limit = 50): Promise<SignedHydratedBlockWithHashMeta[]> {
|
|
107
|
-
return await this.spanAsync('blocksByHash', async () => {
|
|
108
|
-
assertEx(limit > 0, () => 'limit must be greater than 0')
|
|
109
|
-
assertEx(limit <= 100, () => 'limit must be less than 100')
|
|
110
|
-
const blocks: SignedHydratedBlockWithHashMeta[] = []
|
|
111
|
-
let current = await this.blockByHash(hash)
|
|
112
|
-
while (current && blocks.length < limit) {
|
|
113
|
-
blocks.push(current)
|
|
114
|
-
const previousHash = current[0].previous
|
|
115
|
-
if (previousHash === null) break
|
|
116
|
-
current = await this.blockByHash(previousHash)
|
|
117
|
-
}
|
|
118
|
-
return blocks.map(b => asSignedHydratedBlockWithHashMeta(b, true))
|
|
119
|
-
}, { ...this.context, timeBudgetLimit: 300 })
|
|
120
|
-
}
|
|
121
|
-
|
|
122
|
-
async blocksByNumber(blockNumber: XL1BlockNumber, limit = 50): Promise<SignedHydratedBlockWithHashMeta[]> {
|
|
123
|
-
return await this.spanAsync('blocksByNumber', async () => {
|
|
124
|
-
assertEx(limit > 0, () => 'limit must be greater than 0')
|
|
125
|
-
assertEx(limit <= 100, () => 'limit must be less than 100')
|
|
126
|
-
const chainContext = await this.getChainContextRead()
|
|
127
|
-
if (isUndefined(chainContext.head)) {
|
|
128
|
-
return []
|
|
129
|
-
}
|
|
130
|
-
const blocks: SignedHydratedBlockWithHashMeta[] = []
|
|
131
|
-
let current = await this.blockByNumberWithContext(chainContext, blockNumber)
|
|
132
|
-
while (current && blocks.length < limit) {
|
|
133
|
-
blocks.push(current)
|
|
134
|
-
if (current[0].block === 0) break
|
|
135
|
-
const previousNumber = asXL1BlockNumber(current[0].block - 1, true)
|
|
136
|
-
current = await this.blockByNumberWithContext(chainContext, previousNumber)
|
|
137
|
-
}
|
|
138
|
-
return blocks.map(b => asSignedHydratedBlockWithHashMeta(b, true))
|
|
139
|
-
}, this.context)
|
|
140
|
-
}
|
|
141
|
-
|
|
142
|
-
chainId(): Promise<ChainId>
|
|
143
|
-
chainId(blockNumber: XL1BlockNumber): Promise<ChainId>
|
|
144
|
-
chainId(blockNumber: 'latest'): Promise<ChainId>
|
|
145
|
-
async chainId(blockNumber: XL1BlockNumber | 'latest' = 'latest'): Promise<ChainId> {
|
|
146
|
-
return await this.spanAsync('chainId', async () => {
|
|
147
|
-
return blockNumber === 'latest' ? (await this.finalizationViewer.headBlock()).chain : assertEx((await this.blockByNumber(blockNumber)), () => `Block not found [${blockNumber}]`)[0].chain
|
|
148
|
-
}, this.context)
|
|
149
|
-
}
|
|
150
|
-
|
|
151
|
-
override async createHandler() {
|
|
152
|
-
await super.createHandler()
|
|
153
|
-
this.dataLakeViewer = await this.locator.tryGetInstance<DataLakeViewer>(DataLakeViewerMoniker)
|
|
154
|
-
this.finalizationViewer = await this.locator.getInstance<FinalizationViewer>(FinalizationViewerMoniker)
|
|
155
|
-
this._store = { chainMap: this.params.finalizedArchivist }
|
|
156
|
-
}
|
|
157
|
-
|
|
158
|
-
async currentBlock(): Promise<SignedHydratedBlockWithHashMeta> {
|
|
159
|
-
const [result] = await addDataLakePayloads(await this.finalizationViewer.head(), this.dataLakeViewer)
|
|
160
|
-
return result
|
|
161
|
-
}
|
|
162
|
-
|
|
163
|
-
async currentBlockHash(): Promise<Hash> {
|
|
164
|
-
return await this.finalizationViewer.headHash()
|
|
165
|
-
}
|
|
166
|
-
|
|
167
|
-
async currentBlockNumber(): Promise<XL1BlockNumber> {
|
|
168
|
-
return await this.finalizationViewer.headNumber()
|
|
169
|
-
}
|
|
170
|
-
|
|
171
|
-
async payloadByHash(hash: Hash): Promise<WithHashMeta<Payload> | null> {
|
|
172
|
-
const [payload] = await this.payloadsByHash([hash])
|
|
173
|
-
return payload ?? null
|
|
174
|
-
}
|
|
175
|
-
|
|
176
|
-
async payloadsByHash(hashes: Hash[]): Promise<WithHashMeta<Payload>[]> {
|
|
177
|
-
let remainingHashes = [...hashes]
|
|
178
|
-
const cachedPayloads = this.payloadCache.getMany(remainingHashes)
|
|
179
|
-
const cachedHashes = new Set(cachedPayloads.map(p => p._hash))
|
|
180
|
-
remainingHashes = remainingHashes.filter(h => !cachedHashes.has(h))
|
|
181
|
-
const finalizedPayloads = remainingHashes.length > 0
|
|
182
|
-
? await this.finalizedArchivist.get(remainingHashes)
|
|
183
|
-
: []
|
|
184
|
-
const [resultPayloads] = await addDataLakePayloadsToPayloads(hashes, [...cachedPayloads, ...finalizedPayloads.filter(exists)], this.dataLakeViewer)
|
|
185
|
-
resultPayloads.map((payload) => {
|
|
186
|
-
this.payloadCache.set(payload._hash, payload)
|
|
187
|
-
})
|
|
188
|
-
return resultPayloads
|
|
189
|
-
}
|
|
190
|
-
|
|
191
|
-
async rate(range: XL1BlockRange, timeUnit?: keyof TimeDurations): Promise<BlockRate> {
|
|
192
|
-
return await calculateBlockRate(this, range, timeUnit)
|
|
193
|
-
}
|
|
194
|
-
|
|
195
|
-
async stepSizeRate(start: XL1BlockNumber, stepIndex: number, count = 1, timeUnit?: keyof TimeDurations): Promise<BlockRate> {
|
|
196
|
-
return await calculateStepSizeRate(this, start, stepIndex, count, timeUnit)
|
|
197
|
-
}
|
|
198
|
-
|
|
199
|
-
async timeDurationRate(
|
|
200
|
-
timeConfig: SingleTimeConfig,
|
|
201
|
-
startBlockNumber?: XL1BlockNumber,
|
|
202
|
-
timeUnit?: keyof TimeDurations,
|
|
203
|
-
toleranceMs?: number,
|
|
204
|
-
maxAttempts?: number,
|
|
205
|
-
): Promise<BlockRate> {
|
|
206
|
-
return await calculateTimeRate(this, timeConfig, startBlockNumber, timeUnit, toleranceMs, maxAttempts)
|
|
207
|
-
}
|
|
208
|
-
|
|
209
|
-
protected getBlockContextRead(): BlockContextRead {
|
|
210
|
-
return {
|
|
211
|
-
...this.context,
|
|
212
|
-
chainMap: this.store.chainMap,
|
|
213
|
-
}
|
|
214
|
-
}
|
|
215
|
-
|
|
216
|
-
protected async getChainContextRead(): Promise<ChainContextRead> {
|
|
217
|
-
return {
|
|
218
|
-
...this.getBlockContextRead(),
|
|
219
|
-
head: (await this.finalizationViewer.head())[0],
|
|
220
|
-
}
|
|
221
|
-
}
|
|
222
|
-
|
|
223
|
-
private async blockByNumberWithContext(
|
|
224
|
-
chainContext: ChainContextRead,
|
|
225
|
-
blockNumber: XL1BlockNumber,
|
|
226
|
-
): Promise<SignedHydratedBlockWithHashMeta | null> {
|
|
227
|
-
const block = asSignedHydratedBlockWithHashMeta(await hydratedBlockByNumber(chainContext, blockNumber)) ?? null
|
|
228
|
-
const [result] = block ? await addDataLakePayloads(block, this.dataLakeViewer) : [null, []]
|
|
229
|
-
return result
|
|
230
|
-
}
|
|
231
|
-
}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
export * from './SimpleBlockViewer.ts'
|
|
@@ -1,197 +0,0 @@
|
|
|
1
|
-
import { assertEx, Promisable } from '@xylabs/sdk-js'
|
|
2
|
-
import { PayloadBuilder } from '@xyo-network/sdk-js'
|
|
3
|
-
import {
|
|
4
|
-
AccountBalanceViewer,
|
|
5
|
-
AccountBalanceViewerMoniker,
|
|
6
|
-
asXL1BlockRange,
|
|
7
|
-
BlockInvalidationConfig,
|
|
8
|
-
BlockInvalidationQualification,
|
|
9
|
-
BlockInvalidationViewer,
|
|
10
|
-
BlockInvalidationViewerMoniker,
|
|
11
|
-
BlockViewer,
|
|
12
|
-
BlockViewerMoniker,
|
|
13
|
-
ChainContractViewer,
|
|
14
|
-
ChainContractViewerMoniker,
|
|
15
|
-
ChainId,
|
|
16
|
-
HydratedBlockStateValidationFunction,
|
|
17
|
-
HydratedBlockValidationError,
|
|
18
|
-
HydratedBlockValidationFunction,
|
|
19
|
-
isChainQualifiedHeadConfig,
|
|
20
|
-
isHydratedBlock,
|
|
21
|
-
SignedHydratedBlock,
|
|
22
|
-
type SignedHydratedBlockWithHashMeta,
|
|
23
|
-
XL1BlockNumber,
|
|
24
|
-
} from '@xyo-network/xl1-protocol-lib'
|
|
25
|
-
|
|
26
|
-
import type { CreatableProviderParams } from '../../CreatableProvider/index.ts'
|
|
27
|
-
import { AbstractCreatableProvider, creatableProvider } from '../../CreatableProvider/index.ts'
|
|
28
|
-
import { findUncles, getWindowedChain } from '../../primitives/index.ts'
|
|
29
|
-
|
|
30
|
-
/** Parameters for SimpleBlockInvalidationViewer. */
|
|
31
|
-
export interface SimpleBlockInvalidationViewerParams extends CreatableProviderParams {
|
|
32
|
-
maxUncleWindowSize?: number
|
|
33
|
-
state?: HydratedBlockStateValidationFunction
|
|
34
|
-
value?: HydratedBlockValidationFunction
|
|
35
|
-
}
|
|
36
|
-
|
|
37
|
-
/** SimpleBlockInvalidationViewer implementation. */
|
|
38
|
-
@creatableProvider()
|
|
39
|
-
export class SimpleBlockInvalidationViewer extends AbstractCreatableProvider<SimpleBlockInvalidationViewerParams> implements BlockInvalidationViewer {
|
|
40
|
-
static readonly defaultMoniker = BlockInvalidationViewerMoniker
|
|
41
|
-
static readonly dependencies = [AccountBalanceViewerMoniker, BlockViewerMoniker, ChainContractViewerMoniker]
|
|
42
|
-
static readonly monikers = [BlockInvalidationViewerMoniker]
|
|
43
|
-
moniker = SimpleBlockInvalidationViewer.defaultMoniker
|
|
44
|
-
|
|
45
|
-
private _accountBalanceViewer!: AccountBalanceViewer
|
|
46
|
-
private _blockViewer!: BlockViewer
|
|
47
|
-
private _chainContractViewer!: ChainContractViewer
|
|
48
|
-
private _uncleWindowedChainCache: SignedHydratedBlockWithHashMeta[] | null = null
|
|
49
|
-
|
|
50
|
-
protected get blockViewer() {
|
|
51
|
-
return this._blockViewer
|
|
52
|
-
}
|
|
53
|
-
|
|
54
|
-
protected get chainContractViewer() {
|
|
55
|
-
return this._chainContractViewer
|
|
56
|
-
}
|
|
57
|
-
|
|
58
|
-
protected get maxUncleWindowSize() {
|
|
59
|
-
return this.params.maxUncleWindowSize!
|
|
60
|
-
}
|
|
61
|
-
|
|
62
|
-
static override async paramsHandler(params: Partial<SimpleBlockInvalidationViewerParams>): Promise<SimpleBlockInvalidationViewerParams> {
|
|
63
|
-
return {
|
|
64
|
-
...await super.paramsHandler(params),
|
|
65
|
-
value: params.value,
|
|
66
|
-
state: params.state,
|
|
67
|
-
maxUncleWindowSize: params.maxUncleWindowSize ?? 100,
|
|
68
|
-
} satisfies SimpleBlockInvalidationViewerParams
|
|
69
|
-
}
|
|
70
|
-
|
|
71
|
-
override async createHandler() {
|
|
72
|
-
await super.createHandler()
|
|
73
|
-
this._accountBalanceViewer = await this.locator.getInstance<AccountBalanceViewer>(AccountBalanceViewerMoniker)
|
|
74
|
-
this._blockViewer = await this.locator.getInstance<BlockViewer>(BlockViewerMoniker)
|
|
75
|
-
this._chainContractViewer = await this.locator.getInstance<ChainContractViewer>(ChainContractViewerMoniker)
|
|
76
|
-
}
|
|
77
|
-
|
|
78
|
-
async invalidateBlock(
|
|
79
|
-
block: SignedHydratedBlock,
|
|
80
|
-
config?: BlockInvalidationConfig,
|
|
81
|
-
): Promise<HydratedBlockValidationError[] | SignedHydratedBlockWithHashMeta> {
|
|
82
|
-
return (await this.invalidateBlocks([block], config))[0]
|
|
83
|
-
}
|
|
84
|
-
|
|
85
|
-
async invalidateBlocks(
|
|
86
|
-
blocks: SignedHydratedBlock[],
|
|
87
|
-
config?: BlockInvalidationConfig,
|
|
88
|
-
): Promise<(HydratedBlockValidationError[] | SignedHydratedBlockWithHashMeta)[]> {
|
|
89
|
-
return (await this.qualifiedInvalidateBlocks(blocks, config))[0]
|
|
90
|
-
}
|
|
91
|
-
|
|
92
|
-
async invalidateUncle(
|
|
93
|
-
blocks: SignedHydratedBlock[],
|
|
94
|
-
config?: BlockInvalidationConfig,
|
|
95
|
-
): Promise<(HydratedBlockValidationError[] | SignedHydratedBlockWithHashMeta)[]> {
|
|
96
|
-
return (await this.qualifiedInvalidateUncle(blocks, config))[0]
|
|
97
|
-
}
|
|
98
|
-
|
|
99
|
-
async qualifiedInvalidateBlock(
|
|
100
|
-
block: SignedHydratedBlockWithHashMeta,
|
|
101
|
-
config?: BlockInvalidationConfig,
|
|
102
|
-
): Promise<[HydratedBlockValidationError[] | SignedHydratedBlockWithHashMeta, BlockInvalidationQualification]> {
|
|
103
|
-
const result = (await this.qualifiedInvalidateBlocks([block], config))
|
|
104
|
-
return [result[0][0], result[1]]
|
|
105
|
-
}
|
|
106
|
-
|
|
107
|
-
async qualifiedInvalidateBlocks(
|
|
108
|
-
blocks: SignedHydratedBlock[],
|
|
109
|
-
config?: BlockInvalidationConfig,
|
|
110
|
-
): Promise<[(HydratedBlockValidationError[] | SignedHydratedBlockWithHashMeta)[], BlockInvalidationQualification]> {
|
|
111
|
-
const { value, state } = config ?? {
|
|
112
|
-
shape: true, links: true, state: true, head: undefined,
|
|
113
|
-
}
|
|
114
|
-
|
|
115
|
-
const blocksWithMeta = await Promise.all(blocks.map(b => Promise.all([PayloadBuilder.addHashMeta(b[0]), PayloadBuilder.addHashMeta(b[1])])))
|
|
116
|
-
|
|
117
|
-
const head = isChainQualifiedHeadConfig(config)
|
|
118
|
-
? assertEx(
|
|
119
|
-
(await this.blockViewer.blockByHash(config.head))?.[0],
|
|
120
|
-
() => `Specified a head that is not in the chain [${config.head}]`,
|
|
121
|
-
)
|
|
122
|
-
: undefined
|
|
123
|
-
|
|
124
|
-
const headBlock = head ?? (await this.blockViewer.currentBlock())[0]
|
|
125
|
-
|
|
126
|
-
const validateProtocol = value ? this.doInvalidateProtocol.bind(this) : undefined
|
|
127
|
-
const validateState = state ? this.doInvalidateState.bind(this) : undefined
|
|
128
|
-
|
|
129
|
-
const chainIdAtBlockNumber = (blockNumber: XL1BlockNumber) => this.chainContractViewer.chainIdAtBlockNumber(blockNumber)
|
|
130
|
-
|
|
131
|
-
const qualification = { head: headBlock._hash, range: asXL1BlockRange([0, headBlock.block], true) }
|
|
132
|
-
const [protocolResults, stateResults] = await Promise.all([
|
|
133
|
-
validateProtocol?.(blocksWithMeta, chainIdAtBlockNumber), validateState?.(blocksWithMeta, chainIdAtBlockNumber),
|
|
134
|
-
])
|
|
135
|
-
const blockResults = blocksWithMeta.map((r, i) => {
|
|
136
|
-
const errors = []
|
|
137
|
-
if (protocolResults && !isHydratedBlock(protocolResults[i])) {
|
|
138
|
-
errors.push(...(protocolResults[i]))
|
|
139
|
-
}
|
|
140
|
-
if (stateResults && !isHydratedBlock(stateResults[i])) {
|
|
141
|
-
errors.push(...(stateResults[i]))
|
|
142
|
-
}
|
|
143
|
-
return errors.length === 0 ? r : errors
|
|
144
|
-
})
|
|
145
|
-
return [blockResults, qualification]
|
|
146
|
-
}
|
|
147
|
-
|
|
148
|
-
qualifiedInvalidateUncle(
|
|
149
|
-
_blocks: SignedHydratedBlock[],
|
|
150
|
-
_config?: BlockInvalidationConfig,
|
|
151
|
-
): Promise<[(HydratedBlockValidationError[] | SignedHydratedBlockWithHashMeta)[], BlockInvalidationQualification]> {
|
|
152
|
-
throw new Error('Method not implemented.')
|
|
153
|
-
}
|
|
154
|
-
|
|
155
|
-
private async doInvalidateProtocol(
|
|
156
|
-
blocks: SignedHydratedBlockWithHashMeta[],
|
|
157
|
-
chainIdAtBlockNumber: (blockNumber: XL1BlockNumber) => Promisable<ChainId>,
|
|
158
|
-
): Promise<(SignedHydratedBlockWithHashMeta | HydratedBlockValidationError[])[]> {
|
|
159
|
-
return (await Promise.all(blocks.map(async (block) => {
|
|
160
|
-
const errors = await this.params.value!(
|
|
161
|
-
this.context,
|
|
162
|
-
block,
|
|
163
|
-
chainIdAtBlockNumber,
|
|
164
|
-
)
|
|
165
|
-
return (errors.length === 0) ? block : errors
|
|
166
|
-
})))
|
|
167
|
-
}
|
|
168
|
-
|
|
169
|
-
private async doInvalidateState(
|
|
170
|
-
blocks: SignedHydratedBlockWithHashMeta[],
|
|
171
|
-
chainIdAtBlockNumber: (blockNumber: XL1BlockNumber) => Promisable<ChainId>,
|
|
172
|
-
): Promise<(SignedHydratedBlockWithHashMeta | HydratedBlockValidationError[])[]> {
|
|
173
|
-
const windowedUncleChain = await this.updateWindowedChainCache()
|
|
174
|
-
|
|
175
|
-
const uncles = findUncles(this.context, windowedUncleChain, blocks)
|
|
176
|
-
|
|
177
|
-
if (uncles.length !== 1) {
|
|
178
|
-
this.logger?.warn(JSON.stringify({ uncles, blocks }, null, 2))
|
|
179
|
-
this.logger?.warn(JSON.stringify(windowedUncleChain, null, 2))
|
|
180
|
-
throw new Error(`No uncles or greater than one uncle found in block validation, which is not supported [${uncles.length}, ${blocks.length}]`)
|
|
181
|
-
}
|
|
182
|
-
return (await Promise.all(uncles[0].map(async (block) => {
|
|
183
|
-
const errors = await this.params.state!(
|
|
184
|
-
{
|
|
185
|
-
...this.context, chainIdAtBlockNumber, accountBalance: this._accountBalanceViewer,
|
|
186
|
-
},
|
|
187
|
-
block,
|
|
188
|
-
)
|
|
189
|
-
return (errors.length === 0) ? block : errors
|
|
190
|
-
})))
|
|
191
|
-
}
|
|
192
|
-
|
|
193
|
-
private async updateWindowedChainCache() {
|
|
194
|
-
this._uncleWindowedChainCache = await getWindowedChain(this.context, this.blockViewer, this.maxUncleWindowSize, this._uncleWindowedChainCache ?? [])
|
|
195
|
-
return [...this._uncleWindowedChainCache]
|
|
196
|
-
}
|
|
197
|
-
}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
export * from './SimpleBlockInvalidationViewer.ts'
|
|
@@ -1,27 +0,0 @@
|
|
|
1
|
-
import { Promisable } from '@xylabs/sdk-js'
|
|
2
|
-
import {
|
|
3
|
-
AttoXL1, BlockRewardViewer, BlockRewardViewerMoniker, XL1BlockNumber,
|
|
4
|
-
} from '@xyo-network/xl1-protocol-lib'
|
|
5
|
-
|
|
6
|
-
import {
|
|
7
|
-
AbstractCreatableProvider, creatableProvider, CreatableProviderParams,
|
|
8
|
-
} from '../../CreatableProvider/index.ts'
|
|
9
|
-
import { rewardFromBlockNumber } from '../../primitives/index.ts'
|
|
10
|
-
|
|
11
|
-
/** Parameters for SimpleBlockRewardViewer. */
|
|
12
|
-
export interface SimpleBlockRewardViewerParams extends CreatableProviderParams {}
|
|
13
|
-
|
|
14
|
-
/** SimpleBlockRewardViewer implementation. */
|
|
15
|
-
@creatableProvider()
|
|
16
|
-
export class SimpleBlockRewardViewer extends AbstractCreatableProvider<SimpleBlockRewardViewerParams> implements BlockRewardViewer {
|
|
17
|
-
static readonly defaultMoniker = BlockRewardViewerMoniker
|
|
18
|
-
static readonly dependencies = []
|
|
19
|
-
static readonly monikers = [BlockRewardViewerMoniker]
|
|
20
|
-
moniker = SimpleBlockRewardViewer.defaultMoniker
|
|
21
|
-
|
|
22
|
-
allowedRewardForBlock(block: XL1BlockNumber): Promisable<AttoXL1> {
|
|
23
|
-
return rewardFromBlockNumber(
|
|
24
|
-
block,
|
|
25
|
-
)
|
|
26
|
-
}
|
|
27
|
-
}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
export * from './SimpleBlockRewardViewer.ts'
|
|
@@ -1,194 +0,0 @@
|
|
|
1
|
-
import { assertEx, Promisable } from '@xylabs/sdk-js'
|
|
2
|
-
import { PayloadBuilder } from '@xyo-network/sdk-js'
|
|
3
|
-
import {
|
|
4
|
-
AccountBalanceViewer,
|
|
5
|
-
AccountBalanceViewerMoniker,
|
|
6
|
-
asXL1BlockRange,
|
|
7
|
-
BlockValidationConfig,
|
|
8
|
-
BlockValidationQualification,
|
|
9
|
-
BlockValidationViewer,
|
|
10
|
-
BlockValidationViewerMoniker,
|
|
11
|
-
BlockViewer,
|
|
12
|
-
BlockViewerMoniker,
|
|
13
|
-
ChainContractViewer,
|
|
14
|
-
ChainContractViewerMoniker,
|
|
15
|
-
ChainId,
|
|
16
|
-
HydratedBlockStateValidationFunction,
|
|
17
|
-
HydratedBlockValidationError,
|
|
18
|
-
HydratedBlockValidationFunction,
|
|
19
|
-
isChainQualifiedHeadConfig,
|
|
20
|
-
isHydratedBlock,
|
|
21
|
-
SignedHydratedBlock,
|
|
22
|
-
type SignedHydratedBlockWithHashMeta,
|
|
23
|
-
XL1BlockNumber,
|
|
24
|
-
} from '@xyo-network/xl1-protocol-lib'
|
|
25
|
-
|
|
26
|
-
import type { CreatableProviderParams } from '../../CreatableProvider/index.ts'
|
|
27
|
-
import { AbstractCreatableProvider, creatableProvider } from '../../CreatableProvider/index.ts'
|
|
28
|
-
import { findUncles, getWindowedChain } from '../../primitives/index.ts'
|
|
29
|
-
|
|
30
|
-
/** Parameters for SimpleBlockValidationViewer. */
|
|
31
|
-
export interface SimpleBlockValidationViewerParams extends CreatableProviderParams {
|
|
32
|
-
maxUncleWindowSize?: number
|
|
33
|
-
protocol?: HydratedBlockValidationFunction
|
|
34
|
-
state?: HydratedBlockStateValidationFunction
|
|
35
|
-
}
|
|
36
|
-
|
|
37
|
-
/** SimpleBlockValidationViewer implementation. */
|
|
38
|
-
@creatableProvider()
|
|
39
|
-
export class SimpleBlockValidationViewer extends AbstractCreatableProvider<SimpleBlockValidationViewerParams> implements BlockValidationViewer {
|
|
40
|
-
static readonly defaultMoniker = BlockValidationViewerMoniker
|
|
41
|
-
static readonly dependencies = [AccountBalanceViewerMoniker, BlockViewerMoniker, ChainContractViewerMoniker]
|
|
42
|
-
static readonly monikers = [BlockValidationViewerMoniker]
|
|
43
|
-
moniker = SimpleBlockValidationViewer.defaultMoniker
|
|
44
|
-
|
|
45
|
-
private _accountBalanceViewer!: AccountBalanceViewer
|
|
46
|
-
private _blockViewer!: BlockViewer
|
|
47
|
-
private _chainContractViewer!: ChainContractViewer
|
|
48
|
-
private _uncleWindowedChainCache: SignedHydratedBlockWithHashMeta[] | null = null
|
|
49
|
-
|
|
50
|
-
protected get blockViewer() {
|
|
51
|
-
return this._blockViewer
|
|
52
|
-
}
|
|
53
|
-
|
|
54
|
-
protected get chainContractViewer() {
|
|
55
|
-
return this._chainContractViewer
|
|
56
|
-
}
|
|
57
|
-
|
|
58
|
-
protected get maxUncleWindowSize() {
|
|
59
|
-
return this.params.maxUncleWindowSize!
|
|
60
|
-
}
|
|
61
|
-
|
|
62
|
-
static override async paramsHandler(params: Partial<SimpleBlockValidationViewerParams>): Promise<SimpleBlockValidationViewerParams> {
|
|
63
|
-
return {
|
|
64
|
-
...await super.paramsHandler(params),
|
|
65
|
-
protocol: params.protocol,
|
|
66
|
-
state: params.state,
|
|
67
|
-
maxUncleWindowSize: params.maxUncleWindowSize ?? 100,
|
|
68
|
-
} satisfies SimpleBlockValidationViewerParams
|
|
69
|
-
}
|
|
70
|
-
|
|
71
|
-
override async createHandler() {
|
|
72
|
-
await super.createHandler()
|
|
73
|
-
this._accountBalanceViewer = await this.locator.getInstance<AccountBalanceViewer>(AccountBalanceViewerMoniker)
|
|
74
|
-
this._blockViewer = await this.locator.getInstance<BlockViewer>(BlockViewerMoniker)
|
|
75
|
-
this._chainContractViewer = await this.locator.getInstance<ChainContractViewer>(ChainContractViewerMoniker)
|
|
76
|
-
}
|
|
77
|
-
|
|
78
|
-
async qualifiedValidateBlock(
|
|
79
|
-
block: SignedHydratedBlockWithHashMeta,
|
|
80
|
-
config?: BlockValidationConfig,
|
|
81
|
-
): Promise<[HydratedBlockValidationError[] | SignedHydratedBlockWithHashMeta, BlockValidationQualification]> {
|
|
82
|
-
const result = (await this.qualifiedValidateBlocks([block], config))
|
|
83
|
-
return [result[0][0], result[1]]
|
|
84
|
-
}
|
|
85
|
-
|
|
86
|
-
async qualifiedValidateBlocks(
|
|
87
|
-
blocks: SignedHydratedBlock[],
|
|
88
|
-
config?: BlockValidationConfig,
|
|
89
|
-
): Promise<[(HydratedBlockValidationError[] | SignedHydratedBlockWithHashMeta)[], BlockValidationQualification]> {
|
|
90
|
-
const { value, state } = config ?? {
|
|
91
|
-
shape: true, links: true, state: true, head: undefined,
|
|
92
|
-
}
|
|
93
|
-
|
|
94
|
-
const blocksWithMeta = await Promise.all(blocks.map(b => Promise.all([PayloadBuilder.addHashMeta(b[0]), PayloadBuilder.addHashMeta(b[1])])))
|
|
95
|
-
|
|
96
|
-
const head = isChainQualifiedHeadConfig(config)
|
|
97
|
-
? assertEx(
|
|
98
|
-
(await this.blockViewer.blockByHash(config.head))?.[0],
|
|
99
|
-
() => `Specified a head that is not in the chain [${config.head}]`,
|
|
100
|
-
)
|
|
101
|
-
: undefined
|
|
102
|
-
|
|
103
|
-
const headBlock = head ?? (await this.blockViewer.currentBlock())[0]
|
|
104
|
-
|
|
105
|
-
const validateProtocol = value ? this.doValidateProtocol.bind(this) : undefined
|
|
106
|
-
const validateState = state ? this.doValidateState.bind(this) : undefined
|
|
107
|
-
|
|
108
|
-
const chainIdAtBlockNumber = (blockNumber: XL1BlockNumber) => this.chainContractViewer.chainIdAtBlockNumber(blockNumber)
|
|
109
|
-
|
|
110
|
-
const qualification = { head: headBlock._hash, range: asXL1BlockRange([0, headBlock.block], true) }
|
|
111
|
-
const [protocolResults, stateResults] = await Promise.all([
|
|
112
|
-
validateProtocol?.(blocksWithMeta, chainIdAtBlockNumber), validateState?.(blocksWithMeta, chainIdAtBlockNumber),
|
|
113
|
-
])
|
|
114
|
-
const blockResults = blocksWithMeta.map((r, i) => {
|
|
115
|
-
const errors = []
|
|
116
|
-
if (protocolResults && !isHydratedBlock(protocolResults[i])) {
|
|
117
|
-
errors.push(...(protocolResults[i]))
|
|
118
|
-
}
|
|
119
|
-
if (stateResults && !isHydratedBlock(stateResults[i])) {
|
|
120
|
-
errors.push(...(stateResults[i]))
|
|
121
|
-
}
|
|
122
|
-
return errors.length === 0 ? r : errors
|
|
123
|
-
})
|
|
124
|
-
return [blockResults, qualification]
|
|
125
|
-
}
|
|
126
|
-
|
|
127
|
-
qualifiedValidateUncle(
|
|
128
|
-
_blocks: SignedHydratedBlock[],
|
|
129
|
-
_config?: BlockValidationConfig,
|
|
130
|
-
): Promise<[(HydratedBlockValidationError[] | SignedHydratedBlockWithHashMeta)[], BlockValidationQualification]> {
|
|
131
|
-
throw new Error('Method not implemented.')
|
|
132
|
-
}
|
|
133
|
-
|
|
134
|
-
async validateBlock(block: SignedHydratedBlock, config?: BlockValidationConfig): Promise<HydratedBlockValidationError[] | SignedHydratedBlockWithHashMeta> {
|
|
135
|
-
return (await this.validateBlocks([block], config))[0]
|
|
136
|
-
}
|
|
137
|
-
|
|
138
|
-
async validateBlocks(
|
|
139
|
-
blocks: SignedHydratedBlock[],
|
|
140
|
-
config?: BlockValidationConfig,
|
|
141
|
-
): Promise<(HydratedBlockValidationError[] | SignedHydratedBlockWithHashMeta)[]> {
|
|
142
|
-
return (await this.qualifiedValidateBlocks(blocks, config))[0]
|
|
143
|
-
}
|
|
144
|
-
|
|
145
|
-
async validateUncle(
|
|
146
|
-
blocks: SignedHydratedBlock[],
|
|
147
|
-
config?: BlockValidationConfig,
|
|
148
|
-
): Promise<(HydratedBlockValidationError[] | SignedHydratedBlockWithHashMeta)[]> {
|
|
149
|
-
return (await this.qualifiedValidateUncle(blocks, config))[0]
|
|
150
|
-
}
|
|
151
|
-
|
|
152
|
-
private async doValidateProtocol(
|
|
153
|
-
blocks: SignedHydratedBlockWithHashMeta[],
|
|
154
|
-
chainIdAtBlockNumber: (blockNumber: XL1BlockNumber) => Promisable<ChainId>,
|
|
155
|
-
): Promise<(SignedHydratedBlockWithHashMeta | HydratedBlockValidationError[])[]> {
|
|
156
|
-
return (await Promise.all(blocks.map(async (block) => {
|
|
157
|
-
const errors = await this.params.protocol!(
|
|
158
|
-
this.context,
|
|
159
|
-
block,
|
|
160
|
-
chainIdAtBlockNumber,
|
|
161
|
-
)
|
|
162
|
-
return (errors.length === 0) ? block : errors
|
|
163
|
-
})))
|
|
164
|
-
}
|
|
165
|
-
|
|
166
|
-
private async doValidateState(
|
|
167
|
-
blocks: SignedHydratedBlockWithHashMeta[],
|
|
168
|
-
chainIdAtBlockNumber: (blockNumber: XL1BlockNumber) => Promisable<ChainId>,
|
|
169
|
-
): Promise<(SignedHydratedBlockWithHashMeta | HydratedBlockValidationError[])[]> {
|
|
170
|
-
const windowedUncleChain = await this.updateWindowedChainCache()
|
|
171
|
-
|
|
172
|
-
const uncles = findUncles(this.context, windowedUncleChain, blocks)
|
|
173
|
-
|
|
174
|
-
if (uncles.length !== 1) {
|
|
175
|
-
this.logger?.warn(JSON.stringify({ uncles, blocks }, null, 2))
|
|
176
|
-
this.logger?.warn(JSON.stringify(windowedUncleChain, null, 2))
|
|
177
|
-
throw new Error(`No uncles or greater than one uncle found in block validation, which is not supported [${uncles.length}, ${blocks.length}]`)
|
|
178
|
-
}
|
|
179
|
-
return (await Promise.all(uncles[0].map(async (block) => {
|
|
180
|
-
const errors = await this.params.state!(
|
|
181
|
-
{
|
|
182
|
-
...this.context, chainIdAtBlockNumber, accountBalance: this._accountBalanceViewer,
|
|
183
|
-
},
|
|
184
|
-
block,
|
|
185
|
-
)
|
|
186
|
-
return (errors.length === 0) ? block : errors
|
|
187
|
-
})))
|
|
188
|
-
}
|
|
189
|
-
|
|
190
|
-
private async updateWindowedChainCache() {
|
|
191
|
-
this._uncleWindowedChainCache = await getWindowedChain(this.context, this.blockViewer, this.maxUncleWindowSize, this._uncleWindowedChainCache ?? [])
|
|
192
|
-
return [...this._uncleWindowedChainCache]
|
|
193
|
-
}
|
|
194
|
-
}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
export * from './SimpleBlockValidationViewer.ts'
|