@xyo-network/xl1-protocol-sdk 1.26.12 → 1.26.14
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/config/Actors.d.ts +1 -1
- package/dist/neutral/config/Base.d.ts +1 -1
- package/dist/neutral/config/Config.d.ts +4 -4
- package/dist/neutral/payloads/AddressPairPayload.d.ts +1 -1
- package/dist/neutral/payloads/AddressPairPayload.d.ts.map +1 -1
- package/dist/neutral/primitives/uncle/findBestUncle.d.ts +13 -13
- package/dist/neutral/primitives/uncle/findUncles.d.ts +2 -2
- package/dist/neutral/simple/accountBalance/SimpleAccountBalanceViewer.d.ts +2 -2
- package/dist/neutral/simple/block/SimpleBlockViewer.d.ts +2 -2
- package/dist/neutral/simple/chainContractViewer/SimpleChainContractViewer.d.ts +1 -1
- package/dist/neutral/simple/datalake/SimpleDataLakeRunner.d.ts +1 -1
- package/dist/neutral/simple/finalization/SimpleFinalizationViewer.d.ts +1 -1
- package/dist/neutral/simple/windowedBlock/SimpleWindowedBlockViewer.d.ts +10 -10
- package/dist/neutral/transaction/TransactionBuilder.d.ts +4 -4
- package/dist/neutral/transaction/signTransaction.d.ts +1 -1
- package/package.json +24 -21
- 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,26 +0,0 @@
|
|
|
1
|
-
import type {
|
|
2
|
-
BlockViewer, CachingContext, StakeEventsViewer, StepIdentity,
|
|
3
|
-
} from '@xyo-network/xl1-protocol-lib'
|
|
4
|
-
import { XYO_NETWORK_STAKING_ADDRESS } from '@xyo-network/xl1-protocol-lib'
|
|
5
|
-
|
|
6
|
-
import { externalBlockRangeFromStep } from '../chain/index.ts'
|
|
7
|
-
import { weightedStakeForRangeByPosition } from '../stake/index.ts'
|
|
8
|
-
|
|
9
|
-
/** NetworkStakeStepRewardPositionWeight helper function. */
|
|
10
|
-
export async function networkStakeStepRewardPositionWeight(
|
|
11
|
-
context: CachingContext,
|
|
12
|
-
blockViewer: BlockViewer,
|
|
13
|
-
stakeEventsViewer: StakeEventsViewer,
|
|
14
|
-
stepContext: StepIdentity,
|
|
15
|
-
position: number,
|
|
16
|
-
): Promise<bigint> {
|
|
17
|
-
const result = await weightedStakeForRangeByPosition(
|
|
18
|
-
context,
|
|
19
|
-
blockViewer,
|
|
20
|
-
stakeEventsViewer,
|
|
21
|
-
await externalBlockRangeFromStep(context, blockViewer, stepContext),
|
|
22
|
-
XYO_NETWORK_STAKING_ADDRESS,
|
|
23
|
-
position,
|
|
24
|
-
)
|
|
25
|
-
return result
|
|
26
|
-
}
|
|
@@ -1,27 +0,0 @@
|
|
|
1
|
-
import type { Address } from '@xylabs/sdk-js'
|
|
2
|
-
import { isDefined } from '@xylabs/sdk-js'
|
|
3
|
-
import type { StakeEventsViewer } from '@xyo-network/xl1-protocol-lib'
|
|
4
|
-
|
|
5
|
-
import { mergedAddRemoveStakeEventsByStaker } from './mergedAddRemoveStakeEventsByStaker.ts'
|
|
6
|
-
|
|
7
|
-
/** ActiveStakeAtTimeByAddress helper function. */
|
|
8
|
-
export async function activeStakeAtTimeByAddress(
|
|
9
|
-
chain: StakeEventsViewer,
|
|
10
|
-
staked: Address,
|
|
11
|
-
time: number,
|
|
12
|
-
staker?: Address,
|
|
13
|
-
): Promise<bigint> {
|
|
14
|
-
const stakeEvents = (await mergedAddRemoveStakeEventsByStaker(chain, [0, time], staked, staker)).toSorted((a, b) => a.time - b.time)
|
|
15
|
-
let result = 0n
|
|
16
|
-
for (const event of stakeEvents) {
|
|
17
|
-
if (event.time > time) break
|
|
18
|
-
if (event.args.staked !== staked) continue
|
|
19
|
-
if (isDefined(staker) && (event.args.staker !== staker)) continue
|
|
20
|
-
if (event.name === 'StakeAdded') {
|
|
21
|
-
result += event.args.amount
|
|
22
|
-
} else if (event.name === 'StakeRemoved') {
|
|
23
|
-
result -= event.args.amount
|
|
24
|
-
}
|
|
25
|
-
}
|
|
26
|
-
return result
|
|
27
|
-
}
|
|
@@ -1,25 +0,0 @@
|
|
|
1
|
-
import { isUndefined } from '@xylabs/sdk-js'
|
|
2
|
-
import type { StakeEventsViewer } from '@xyo-network/xl1-protocol-lib'
|
|
3
|
-
|
|
4
|
-
import { mergedAddRemoveStakeEventsByPosition } from './mergedAddRemoveStakeEventsByPosition.ts'
|
|
5
|
-
|
|
6
|
-
/** ActiveStakeAtTimeByPosition helper function. */
|
|
7
|
-
export async function activeStakeAtTimeByPosition(
|
|
8
|
-
chainStakeEvents: StakeEventsViewer,
|
|
9
|
-
externalTime: number,
|
|
10
|
-
position?: number,
|
|
11
|
-
): Promise<bigint> {
|
|
12
|
-
const stakeEvents = (await mergedAddRemoveStakeEventsByPosition(chainStakeEvents, [0, externalTime], position)).toSorted((a, b) => a.time - b.time)
|
|
13
|
-
let result = 0n
|
|
14
|
-
for (const event of stakeEvents) {
|
|
15
|
-
if (event.time > externalTime) break
|
|
16
|
-
if (isUndefined(position) || position === Number(event.args.id)) {
|
|
17
|
-
if (event.name === 'StakeAdded') {
|
|
18
|
-
result += event.args.amount
|
|
19
|
-
} else if (event.name === 'StakeRemoved') {
|
|
20
|
-
result -= event.args.amount
|
|
21
|
-
}
|
|
22
|
-
}
|
|
23
|
-
}
|
|
24
|
-
return result
|
|
25
|
-
}
|
|
@@ -1,32 +0,0 @@
|
|
|
1
|
-
import {
|
|
2
|
-
type Address,
|
|
3
|
-
toAddress,
|
|
4
|
-
} from '@xylabs/sdk-js'
|
|
5
|
-
import type { StakeEventsViewer } from '@xyo-network/xl1-protocol-lib'
|
|
6
|
-
|
|
7
|
-
import { mergedAddRemoveStakeEventsByStaker } from './mergedAddRemoveStakeEventsByStaker.ts'
|
|
8
|
-
|
|
9
|
-
/** AllStakersForRange helper function. */
|
|
10
|
-
export async function allStakersForRange(
|
|
11
|
-
chain: StakeEventsViewer,
|
|
12
|
-
externalRange: [number, number],
|
|
13
|
-
staked: Address,
|
|
14
|
-
): Promise<Record<Address, bigint>> {
|
|
15
|
-
const mergedEvents = await mergedAddRemoveStakeEventsByStaker(chain, [0, externalRange[1]], staked)
|
|
16
|
-
const resultWithZeros: Record<Address, bigint> = {}
|
|
17
|
-
for (const event of mergedEvents) {
|
|
18
|
-
const staker = toAddress(event.args.staker)
|
|
19
|
-
resultWithZeros[staker] = resultWithZeros[staker] ?? 0n
|
|
20
|
-
if (event.name === 'StakeAdded') {
|
|
21
|
-
resultWithZeros[staker] += event.args.amount
|
|
22
|
-
} else if (event.name === 'StakeRemoved') {
|
|
23
|
-
resultWithZeros[staker] -= event.args.amount
|
|
24
|
-
}
|
|
25
|
-
}
|
|
26
|
-
const nonZero = Object.entries(resultWithZeros).filter(([, amount]) => amount > 0n).map(([address]) => address)
|
|
27
|
-
const result: Record<Address, bigint> = {}
|
|
28
|
-
for (const address of nonZero) {
|
|
29
|
-
result[toAddress(address)] = resultWithZeros[toAddress(address)]
|
|
30
|
-
}
|
|
31
|
-
return result
|
|
32
|
-
}
|
|
@@ -1,24 +0,0 @@
|
|
|
1
|
-
import { type Address } from '@xylabs/sdk-js'
|
|
2
|
-
import type {
|
|
3
|
-
BlockViewer, CachingContext, StakeEventsViewer, StepIdentity,
|
|
4
|
-
} from '@xyo-network/xl1-protocol-lib'
|
|
5
|
-
|
|
6
|
-
import { externalBlockRangeFromXL1BlockRange } from '../chain/index.ts'
|
|
7
|
-
import { stepBlockRange } from '../step/index.ts'
|
|
8
|
-
import { allStakersForRange } from './allStakersForRange.ts'
|
|
9
|
-
|
|
10
|
-
/** AllStakersForStep helper function. */
|
|
11
|
-
export async function allStakersForStep(
|
|
12
|
-
context: CachingContext,
|
|
13
|
-
blockViewer: BlockViewer,
|
|
14
|
-
stakeEventsViewer: StakeEventsViewer,
|
|
15
|
-
stepContext: StepIdentity,
|
|
16
|
-
staked: Address,
|
|
17
|
-
): Promise<Record<Address, bigint>> {
|
|
18
|
-
const xl1BlockRange = stepBlockRange(stepContext)
|
|
19
|
-
return await allStakersForRange(
|
|
20
|
-
stakeEventsViewer,
|
|
21
|
-
await externalBlockRangeFromXL1BlockRange(context, blockViewer, xl1BlockRange),
|
|
22
|
-
staked,
|
|
23
|
-
)
|
|
24
|
-
}
|
|
@@ -1,6 +0,0 @@
|
|
|
1
|
-
export * from './activeStakeAtTimeByAddress.ts'
|
|
2
|
-
export * from './activeStakeAtTimeByPosition.ts'
|
|
3
|
-
export * from './allStakersForRange.ts'
|
|
4
|
-
export * from './allStakersForStep.ts'
|
|
5
|
-
export * from './mergedAddRemoveStakeEventsByPosition.ts'
|
|
6
|
-
export * from './weightedStakeForRangeByPosition.ts'
|
|
@@ -1,15 +0,0 @@
|
|
|
1
|
-
import type { StakeEvent, StakeEventsViewer } from '@xyo-network/xl1-protocol-lib'
|
|
2
|
-
|
|
3
|
-
/** MergedAddRemoveStakeEventsByPosition helper function. */
|
|
4
|
-
export async function mergedAddRemoveStakeEventsByPosition(
|
|
5
|
-
chainEvents: StakeEventsViewer,
|
|
6
|
-
range: [number, number],
|
|
7
|
-
position?: number,
|
|
8
|
-
): Promise<(StakeEvent<'StakeAdded'> | StakeEvent<'StakeRemoved'>)[]> {
|
|
9
|
-
const [addedEvents, removedEvents] = await Promise.all([
|
|
10
|
-
chainEvents.stakeEvents(range, { name: 'StakeAdded', args: { id: position } }),
|
|
11
|
-
chainEvents.stakeEvents(range, { name: 'StakeRemoved', args: { id: position } }),
|
|
12
|
-
])
|
|
13
|
-
const result = [...addedEvents, ...removedEvents].toSorted((a, b) => a.time - b.time)
|
|
14
|
-
return result
|
|
15
|
-
}
|
|
@@ -1,17 +0,0 @@
|
|
|
1
|
-
import type { Address } from '@xylabs/sdk-js'
|
|
2
|
-
import type { StakeEvent, StakeEventsViewer } from '@xyo-network/xl1-protocol-lib'
|
|
3
|
-
|
|
4
|
-
/** MergedAddRemoveStakeEventsByStaker helper function. */
|
|
5
|
-
export async function mergedAddRemoveStakeEventsByStaker(
|
|
6
|
-
chainEvents: StakeEventsViewer,
|
|
7
|
-
range: [number, number],
|
|
8
|
-
staked: Address,
|
|
9
|
-
staker?: Address,
|
|
10
|
-
): Promise<(StakeEvent<'StakeAdded'> | StakeEvent<'StakeRemoved'>)[]> {
|
|
11
|
-
const [addedEvents, removedEvents] = await Promise.all([
|
|
12
|
-
chainEvents.stakeEvents(range, { name: 'StakeAdded', args: { staked, staker } }),
|
|
13
|
-
chainEvents.stakeEvents(range, { name: 'StakeRemoved', args: { staked, staker } }),
|
|
14
|
-
])
|
|
15
|
-
const result = [...addedEvents, ...removedEvents].toSorted((a, b) => a.time - b.time)
|
|
16
|
-
return result
|
|
17
|
-
}
|
|
@@ -1,69 +0,0 @@
|
|
|
1
|
-
import type { Address } from '@xylabs/sdk-js'
|
|
2
|
-
import { isDefined } from '@xylabs/sdk-js'
|
|
3
|
-
import type {
|
|
4
|
-
BlockRange,
|
|
5
|
-
BlockViewer,
|
|
6
|
-
CachingContext,
|
|
7
|
-
StakeEventsViewer,
|
|
8
|
-
} from '@xyo-network/xl1-protocol-lib'
|
|
9
|
-
import { asBlockNumber } from '@xyo-network/xl1-protocol-lib'
|
|
10
|
-
|
|
11
|
-
import { withContextCacheResponse } from '../../ChainContextHelpers.ts'
|
|
12
|
-
import { mergedAddRemoveStakeEventsByPosition } from './mergedAddRemoveStakeEventsByPosition.ts'
|
|
13
|
-
|
|
14
|
-
/** WeightedStakeForRangeByPosition helper function. */
|
|
15
|
-
export async function weightedStakeForRangeByPosition(
|
|
16
|
-
context: CachingContext,
|
|
17
|
-
blockViewer: BlockViewer,
|
|
18
|
-
stakeEventsViewer: StakeEventsViewer,
|
|
19
|
-
externalRange: BlockRange, // first to last block of step
|
|
20
|
-
staked?: Address,
|
|
21
|
-
positionId?: number,
|
|
22
|
-
): Promise<bigint> {
|
|
23
|
-
const cacheKey = isDefined(positionId) ? `${externalRange[0]}-${externalRange[1]}-${positionId}` : `${externalRange[0]}-${externalRange[1]}-all`
|
|
24
|
-
return await withContextCacheResponse(context, 'weightedStakeForRangeByPosition', cacheKey, async () => {
|
|
25
|
-
let weightedStakeSum = 0n
|
|
26
|
-
if (isDefined(positionId)) {
|
|
27
|
-
const mergedEvents = (await mergedAddRemoveStakeEventsByPosition(
|
|
28
|
-
stakeEventsViewer,
|
|
29
|
-
[0, externalRange[1]],
|
|
30
|
-
positionId,
|
|
31
|
-
)).toSorted((a, b) => a.time - b.time)
|
|
32
|
-
let currentTime = externalRange[0]
|
|
33
|
-
let currentStake = 0n // await activeStakeAtTimeByPosition(chainEvents, pos.staked, currentTime - 1, position)
|
|
34
|
-
|
|
35
|
-
// if not staking the desired address, return 0n
|
|
36
|
-
if (isDefined(staked) && mergedEvents.at(0)?.args.staked !== staked) {
|
|
37
|
-
return 0n
|
|
38
|
-
}
|
|
39
|
-
|
|
40
|
-
for (const event of mergedEvents) {
|
|
41
|
-
if (event.time > currentTime) {
|
|
42
|
-
// Add the weighted stake for the period between the range start or previous event and this event
|
|
43
|
-
weightedStakeSum += currentStake * BigInt(event.time - currentTime)
|
|
44
|
-
}
|
|
45
|
-
if (event.name === 'StakeAdded') {
|
|
46
|
-
currentStake += event.args.amount
|
|
47
|
-
} else if (event.name === 'StakeRemoved') {
|
|
48
|
-
currentStake -= event.args.amount
|
|
49
|
-
}
|
|
50
|
-
// seems that sometimes we get multiple remove events, so ensure stake doesn't go negative
|
|
51
|
-
currentStake = currentStake < 0n ? 0n : currentStake
|
|
52
|
-
currentTime = asBlockNumber(event.time, { name: 'weightedStakeForRangeByPosition' })
|
|
53
|
-
if (currentTime > externalRange[1]) {
|
|
54
|
-
break
|
|
55
|
-
}
|
|
56
|
-
}
|
|
57
|
-
if (externalRange[1] > currentTime) {
|
|
58
|
-
// Add the weighted stake for the period between the last event and the end of the range
|
|
59
|
-
weightedStakeSum += currentStake * BigInt(externalRange[1] - currentTime)
|
|
60
|
-
}
|
|
61
|
-
} else {
|
|
62
|
-
const positionCount = await stakeEventsViewer.positionCount([0, externalRange[1]])
|
|
63
|
-
for (let pos = 0; pos < positionCount; pos++) {
|
|
64
|
-
weightedStakeSum += await weightedStakeForRangeByPosition(context, blockViewer, stakeEventsViewer, externalRange, staked, pos)
|
|
65
|
-
}
|
|
66
|
-
}
|
|
67
|
-
return weightedStakeSum
|
|
68
|
-
})
|
|
69
|
-
}
|
|
@@ -1,44 +0,0 @@
|
|
|
1
|
-
import type {
|
|
2
|
-
NextOptions, Payload, ReadArchivist,
|
|
3
|
-
Sequence, WithStorageMeta,
|
|
4
|
-
} from '@xyo-network/sdk-js'
|
|
5
|
-
import type { SignedBlockBoundWitnessWithHashMeta } from '@xyo-network/xl1-protocol-lib'
|
|
6
|
-
import { isSignedBlockBoundWitnessWithStorageMeta } from '@xyo-network/xl1-protocol-lib'
|
|
7
|
-
|
|
8
|
-
// TODO: Use some smart value relative to DEFAULT_BLOCK_SIZE
|
|
9
|
-
// to ensure we're likely to find it in a single request
|
|
10
|
-
// without bringing back too much data
|
|
11
|
-
const DEFAULT_NEXT_OPTIONS: NextOptions = { limit: 50 }
|
|
12
|
-
|
|
13
|
-
/**
|
|
14
|
-
* Iterates an archivist to find the most recent block
|
|
15
|
-
* @param chainArchivist The archivist to iterate over for the most recent chain block
|
|
16
|
-
* @param nextOptions The options to use when iterating the archivist
|
|
17
|
-
* @param maxIterations The max number of iterations to perform when finding the most recent block
|
|
18
|
-
* @returns The most recent block found in the archivist or undefined if no blocks are found
|
|
19
|
-
*/
|
|
20
|
-
export const findMostRecentBlock = async (
|
|
21
|
-
chainArchivist: ReadArchivist,
|
|
22
|
-
nextOptions: NextOptions = DEFAULT_NEXT_OPTIONS,
|
|
23
|
-
maxIterations = Number.POSITIVE_INFINITY,
|
|
24
|
-
): Promise<SignedBlockBoundWitnessWithHashMeta | undefined> => {
|
|
25
|
-
let mostRecentBlock: SignedBlockBoundWitnessWithHashMeta | undefined
|
|
26
|
-
let cursor: Sequence | undefined
|
|
27
|
-
let batch: WithStorageMeta<Payload>[]
|
|
28
|
-
let iterations = 0
|
|
29
|
-
do {
|
|
30
|
-
batch = await chainArchivist.next({
|
|
31
|
-
...nextOptions, order: 'desc', cursor,
|
|
32
|
-
})
|
|
33
|
-
const blocks = batch.filter(isSignedBlockBoundWitnessWithStorageMeta)
|
|
34
|
-
const last = blocks?.at(0)
|
|
35
|
-
if (last) {
|
|
36
|
-
mostRecentBlock = last
|
|
37
|
-
break
|
|
38
|
-
} else {
|
|
39
|
-
cursor = batch.at(-1)?._sequence
|
|
40
|
-
}
|
|
41
|
-
iterations = iterations + 1
|
|
42
|
-
} while (batch.length > 0 && iterations < maxIterations)
|
|
43
|
-
return mostRecentBlock
|
|
44
|
-
}
|
|
@@ -1,25 +0,0 @@
|
|
|
1
|
-
import { assertEx, spanAsync } from '@xylabs/sdk-js'
|
|
2
|
-
import type {
|
|
3
|
-
ChainContextRead,
|
|
4
|
-
HydratedBlockWithHashMeta, XL1BlockNumber,
|
|
5
|
-
} from '@xyo-network/xl1-protocol-lib'
|
|
6
|
-
|
|
7
|
-
import { blockFromBlockNumber, hydrateBlock } from '../../block/index.ts'
|
|
8
|
-
import { withContextCacheResponse } from '../../ChainContextHelpers.ts'
|
|
9
|
-
|
|
10
|
-
/** HydratedBlockByNumber helper function. */
|
|
11
|
-
export async function hydratedBlockByNumber(context: ChainContextRead, blockNumber: XL1BlockNumber): Promise<HydratedBlockWithHashMeta | null> {
|
|
12
|
-
return await spanAsync('hydratedBlockByNumber', async () => {
|
|
13
|
-
if (blockNumber < 0) throw new Error(`Block number ${blockNumber} is less than 0`)
|
|
14
|
-
if (blockNumber > Number.MAX_SAFE_INTEGER) throw new Error(`Block number ${blockNumber} is greater than the maximum safe integer`)
|
|
15
|
-
if (blockNumber % 1 !== 0) throw new Error(`Block number ${blockNumber} is not an integer`)
|
|
16
|
-
const cacheKey = `${blockNumber}`
|
|
17
|
-
return await withContextCacheResponse(context, 'hydratedBlockByNumber', cacheKey, async () => {
|
|
18
|
-
const block = assertEx(
|
|
19
|
-
await blockFromBlockNumber(context, blockNumber),
|
|
20
|
-
() => `Could not find block for block number ${blockNumber}`,
|
|
21
|
-
)
|
|
22
|
-
return await hydrateBlock(context, block._hash)
|
|
23
|
-
}, { max: 20_000 })
|
|
24
|
-
}, { ...context, timeBudgetLimit: 500 })
|
|
25
|
-
}
|
|
@@ -1,10 +0,0 @@
|
|
|
1
|
-
import { type Address, toAddress } from '@xylabs/sdk-js'
|
|
2
|
-
import { type StepIdentity, StepSizes } from '@xyo-network/xl1-protocol-lib'
|
|
3
|
-
import { keccak256 } from 'ethers'
|
|
4
|
-
|
|
5
|
-
/** CompletedStepRewardAddress helper function. */
|
|
6
|
-
export function completedStepRewardAddress({ block, step }: StepIdentity): Address {
|
|
7
|
-
const resolvedStepSize = step < StepSizes.length ? StepSizes[step] : step
|
|
8
|
-
const addressKey = new TextEncoder().encode(`${block}|${resolvedStepSize}`)
|
|
9
|
-
return toAddress(keccak256(addressKey).slice(-40), { prefix: false })
|
|
10
|
-
}
|
|
@@ -1,9 +0,0 @@
|
|
|
1
|
-
import { type Address, toAddress } from '@xylabs/sdk-js'
|
|
2
|
-
import { isDefined } from '@xylabs/sdk-js'
|
|
3
|
-
import { keccak256 } from 'ethers'
|
|
4
|
-
|
|
5
|
-
/** DerivedReceiveAddress helper function. */
|
|
6
|
-
export function derivedReceiveAddress(address: Address, scope?: string): Address {
|
|
7
|
-
const addressKey = new TextEncoder().encode(isDefined(scope) ? `${scope}|${address}` : address)
|
|
8
|
-
return toAddress(keccak256(addressKey).slice(-40), { prefix: false })
|
|
9
|
-
}
|
|
@@ -1,9 +0,0 @@
|
|
|
1
|
-
import type { StepIdentity, XL1BlockRange } from '@xyo-network/xl1-protocol-lib'
|
|
2
|
-
import { asXL1BlockRange, StepSizes } from '@xyo-network/xl1-protocol-lib'
|
|
3
|
-
|
|
4
|
-
/** StepBlockRange helper function. */
|
|
5
|
-
export function stepBlockRange({ block, step }: StepIdentity): XL1BlockRange {
|
|
6
|
-
const stepSize = StepSizes[step]
|
|
7
|
-
const start = block - stepSize
|
|
8
|
-
return asXL1BlockRange([start, start + stepSize - 1], { name: 'stepBlockRange' })
|
|
9
|
-
}
|
|
@@ -1,19 +0,0 @@
|
|
|
1
|
-
import { assertEx } from '@xylabs/sdk-js'
|
|
2
|
-
import { StepSizes } from '@xyo-network/xl1-protocol-lib'
|
|
3
|
-
|
|
4
|
-
/** StepTransferIndex helper function. */
|
|
5
|
-
export function stepTransferIndex(block: number, step: number) {
|
|
6
|
-
let rewardTransferCount = 0
|
|
7
|
-
let rewardTransferIndex = -1
|
|
8
|
-
for (let i = 3; i < StepSizes.length; i++) {
|
|
9
|
-
const stepSize = StepSizes[i]
|
|
10
|
-
if (block % stepSize === 0) {
|
|
11
|
-
if (stepSize === StepSizes[step]) {
|
|
12
|
-
rewardTransferIndex = rewardTransferCount
|
|
13
|
-
}
|
|
14
|
-
rewardTransferCount++
|
|
15
|
-
}
|
|
16
|
-
}
|
|
17
|
-
assertEx(rewardTransferIndex >= 0, () => `Could not find step size for step ${step} at block ${block}`)
|
|
18
|
-
return [rewardTransferIndex, rewardTransferCount]
|
|
19
|
-
}
|
|
@@ -1,24 +0,0 @@
|
|
|
1
|
-
import type { WithHashMeta } from '@xyo-network/sdk-js'
|
|
2
|
-
import type { AllowedBlockPayload, HydratedTransactionWithHashMeta } from '@xyo-network/xl1-protocol-lib'
|
|
3
|
-
import { isAllowedBlockPayload } from '@xyo-network/xl1-protocol-lib'
|
|
4
|
-
|
|
5
|
-
const ELEVATE_OPCODE = 'elevate'
|
|
6
|
-
|
|
7
|
-
/** ElevatedPayloads helper function. */
|
|
8
|
-
export function elevatedPayloads([tx, payloads]: HydratedTransactionWithHashMeta) {
|
|
9
|
-
const opCodes = (tx.script ?? []).filter(operation => operation.startsWith(`${ELEVATE_OPCODE}|`))
|
|
10
|
-
const elevatedPayloads: WithHashMeta<AllowedBlockPayload>[] = []
|
|
11
|
-
for (const opCode of opCodes) {
|
|
12
|
-
const [code, hash] = opCode.split('|')
|
|
13
|
-
if (code === ELEVATE_OPCODE) {
|
|
14
|
-
const elevatedPayload = payloads.find(payload => payload._hash === hash)
|
|
15
|
-
if (isAllowedBlockPayload(elevatedPayload)) {
|
|
16
|
-
elevatedPayloads.push(elevatedPayload)
|
|
17
|
-
}
|
|
18
|
-
}
|
|
19
|
-
}
|
|
20
|
-
if (opCodes.length === elevatedPayloads.length) {
|
|
21
|
-
return elevatedPayloads
|
|
22
|
-
}
|
|
23
|
-
throw new Error('Not all elevated payloads could be found in the transaction payloads')
|
|
24
|
-
}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
export * from './elevatedPayloads.ts'
|
|
@@ -1,9 +0,0 @@
|
|
|
1
|
-
import type { SignedHydratedBlockWithHashMeta } from '@xyo-network/xl1-protocol-lib'
|
|
2
|
-
|
|
3
|
-
import { scoreUncle } from './scoreUncle.ts'
|
|
4
|
-
|
|
5
|
-
/** FindBestUncle helper function. */
|
|
6
|
-
export function findBestUncle(finalizedWindowedChain: SignedHydratedBlockWithHashMeta[], uncles: SignedHydratedBlockWithHashMeta[][]) {
|
|
7
|
-
const scores = uncles.map(uncle => ([scoreUncle(finalizedWindowedChain, uncle), uncle] as const)).toSorted((a, b) => b[0] - a[0])
|
|
8
|
-
return scores[0]?.[1] ?? finalizedWindowedChain
|
|
9
|
-
}
|
|
@@ -1,75 +0,0 @@
|
|
|
1
|
-
import {
|
|
2
|
-
assertEx,
|
|
3
|
-
exists, type Hash,
|
|
4
|
-
} from '@xylabs/sdk-js'
|
|
5
|
-
import type { BaseContext, SignedHydratedBlockWithHashMeta } from '@xyo-network/xl1-protocol-lib'
|
|
6
|
-
import { isTransactionBoundWitness } from '@xyo-network/xl1-protocol-lib'
|
|
7
|
-
|
|
8
|
-
function blocksToChains(blocks: SignedHydratedBlockWithHashMeta[]) {
|
|
9
|
-
const chains: SignedHydratedBlockWithHashMeta[][] = []
|
|
10
|
-
const map = new Map<Hash, SignedHydratedBlockWithHashMeta>()
|
|
11
|
-
for (const block of blocks) {
|
|
12
|
-
map.set(block[0]._hash, block)
|
|
13
|
-
}
|
|
14
|
-
for (const block of blocks) {
|
|
15
|
-
let uncle: SignedHydratedBlockWithHashMeta[] = [block]
|
|
16
|
-
let previous = block[0].previous ? map.get(block[0].previous) : undefined
|
|
17
|
-
while (previous) {
|
|
18
|
-
if (previous[0].block === (uncle[0][0].block - 1)) {
|
|
19
|
-
uncle.unshift(previous)
|
|
20
|
-
previous = previous[0].previous ? map.get(previous[0].previous) : undefined
|
|
21
|
-
} else {
|
|
22
|
-
// block number sequence is off
|
|
23
|
-
uncle = []
|
|
24
|
-
break
|
|
25
|
-
}
|
|
26
|
-
}
|
|
27
|
-
if (uncle.length > 0) {
|
|
28
|
-
chains.push(uncle)
|
|
29
|
-
}
|
|
30
|
-
}
|
|
31
|
-
return chains
|
|
32
|
-
}
|
|
33
|
-
|
|
34
|
-
function toValidUncle(
|
|
35
|
-
_context: BaseContext,
|
|
36
|
-
finalizedWindowedChain: SignedHydratedBlockWithHashMeta[],
|
|
37
|
-
possibleUncle: SignedHydratedBlockWithHashMeta[],
|
|
38
|
-
) {
|
|
39
|
-
const finalizedWindowStartBlockNumber = finalizedWindowedChain.at(0)?.[0].block ?? -1
|
|
40
|
-
const finalizedHead = assertEx(finalizedWindowedChain.at(-1), () => 'finalizedWindowedChain is empty')
|
|
41
|
-
// prune the chain to match the finalized head
|
|
42
|
-
|
|
43
|
-
const prunedPossibleUncle = possibleUncle.filter(b => b[0].block > finalizedHead[0].block)
|
|
44
|
-
|
|
45
|
-
if (prunedPossibleUncle.length === 0) {
|
|
46
|
-
return
|
|
47
|
-
}
|
|
48
|
-
|
|
49
|
-
if (prunedPossibleUncle[0][0].block !== finalizedHead[0].block + 1) {
|
|
50
|
-
// uncle does not build on finalized head (block number mismatch)
|
|
51
|
-
return
|
|
52
|
-
}
|
|
53
|
-
if (prunedPossibleUncle[0][0].previous !== finalizedHead[0]._hash) {
|
|
54
|
-
// uncle does not build on finalized head (previous hash mismatch)
|
|
55
|
-
return
|
|
56
|
-
}
|
|
57
|
-
const allUncleTransactions = prunedPossibleUncle.flatMap(b => b[1]).filter(isTransactionBoundWitness)
|
|
58
|
-
const allFinalizedTransactions = finalizedWindowedChain.flatMap(b => b[1]).filter(isTransactionBoundWitness)
|
|
59
|
-
const txPossiblyBeforeWindow = allUncleTransactions.find(tx => tx.nbf < finalizedWindowStartBlockNumber)
|
|
60
|
-
if (txPossiblyBeforeWindow) {
|
|
61
|
-
// uncle has a transaction that is valid before the finalized window
|
|
62
|
-
return
|
|
63
|
-
}
|
|
64
|
-
const txExistsInWindow = allUncleTransactions.find(tx => allFinalizedTransactions.find(finalTx => finalTx._hash === tx._hash))
|
|
65
|
-
if (txExistsInWindow) {
|
|
66
|
-
// uncle has a transaction that is already in the finalized window
|
|
67
|
-
return
|
|
68
|
-
}
|
|
69
|
-
return prunedPossibleUncle
|
|
70
|
-
}
|
|
71
|
-
|
|
72
|
-
/** FindUncles helper function. */
|
|
73
|
-
export function findUncles(context: BaseContext, finalizedWindowedChain: SignedHydratedBlockWithHashMeta[], blocks: SignedHydratedBlockWithHashMeta[]) {
|
|
74
|
-
return blocksToChains(blocks).map(chain => toValidUncle(context, finalizedWindowedChain, chain)).filter(exists)
|
|
75
|
-
}
|
|
@@ -1,7 +0,0 @@
|
|
|
1
|
-
import type { SignedHydratedBlockWithHashMeta } from '@xyo-network/xl1-protocol-lib'
|
|
2
|
-
|
|
3
|
-
/** ScoreUncle helper function. */
|
|
4
|
-
export function scoreUncle(finalizedWindowedChain: SignedHydratedBlockWithHashMeta[], blocks: SignedHydratedBlockWithHashMeta[]) {
|
|
5
|
-
// TODO: More than length check
|
|
6
|
-
return blocks.length
|
|
7
|
-
}
|
|
@@ -1,13 +0,0 @@
|
|
|
1
|
-
import type {
|
|
2
|
-
Address, Hash, Promisable,
|
|
3
|
-
} from '@xylabs/sdk-js'
|
|
4
|
-
import type { AttoXL1 } from '@xyo-network/xl1-protocol-lib'
|
|
5
|
-
|
|
6
|
-
/** Provider interface for querying transfer totals by account at a given chain head */
|
|
7
|
-
export interface AccountTransfersProvider {
|
|
8
|
-
transfer(head: Hash, account: Address): Promisable<AttoXL1>
|
|
9
|
-
transfers(head: Hash, accounts: Address[]): Promisable<Partial<Record<Address, AttoXL1>>>
|
|
10
|
-
}
|
|
11
|
-
|
|
12
|
-
/** Service interface for querying account transfers, extending AccountTransfersProvider */
|
|
13
|
-
export interface AccountTransfersService extends AccountTransfersProvider {}
|
|
@@ -1,11 +0,0 @@
|
|
|
1
|
-
import type {
|
|
2
|
-
Addressable,
|
|
3
|
-
BlockBoundWitness, IterableRepository,
|
|
4
|
-
SignedHydratedBlockWithHashMeta,
|
|
5
|
-
} from '@xyo-network/xl1-protocol-lib'
|
|
6
|
-
|
|
7
|
-
/** Repository type for producing the next block from a block bound witness */
|
|
8
|
-
export type NextBlockProducer = IterableRepository<BlockBoundWitness, SignedHydratedBlockWithHashMeta | undefined>
|
|
9
|
-
|
|
10
|
-
/** Service interface for an addressable block producer */
|
|
11
|
-
export interface BlockProducerService extends Addressable, NextBlockProducer {}
|
|
@@ -1,6 +0,0 @@
|
|
|
1
|
-
import type { ChainContractViewer, ChainStakeViewer } from '@xyo-network/xl1-protocol-lib'
|
|
2
|
-
|
|
3
|
-
import type { BaseChainService } from './BaseChainService.ts'
|
|
4
|
-
|
|
5
|
-
/** @deprecated use ChainContractViewer, StakeTotalsViewer, StakeRunner instead */
|
|
6
|
-
export interface ChainService extends Omit<ChainContractViewer, 'moniker'>, Omit<ChainStakeViewer, 'moniker'>, BaseChainService {}
|
package/src/services/Election.ts
DELETED
|
@@ -1,14 +0,0 @@
|
|
|
1
|
-
import type { Address } from '@xylabs/sdk-js'
|
|
2
|
-
import type { WithHashMeta } from '@xyo-network/sdk-js'
|
|
3
|
-
import type { BlockBoundWitness } from '@xyo-network/xl1-protocol-lib'
|
|
4
|
-
|
|
5
|
-
/** Service for determining the block producer committee for the next block */
|
|
6
|
-
export interface ElectionService {
|
|
7
|
-
|
|
8
|
-
/**
|
|
9
|
-
* Given the current block, get the leader for the next block
|
|
10
|
-
* @param current The previous block
|
|
11
|
-
*/
|
|
12
|
-
getCreatorCommitteeForNextBlock(current: WithHashMeta<BlockBoundWitness>): Promise<Address[]>
|
|
13
|
-
|
|
14
|
-
}
|
package/src/services/Params.ts
DELETED
|
@@ -1,13 +0,0 @@
|
|
|
1
|
-
import type { CreatableParams } from '@xylabs/sdk-js'
|
|
2
|
-
import type { AccountInstance } from '@xyo-network/sdk-js'
|
|
3
|
-
import type { OpenTelemetryProviders } from '@xyo-network/xl1-protocol-lib'
|
|
4
|
-
|
|
5
|
-
/** Base parameters for all services, including creatable params and OpenTelemetry providers */
|
|
6
|
-
export interface BaseServiceParams extends CreatableParams, OpenTelemetryProviders {
|
|
7
|
-
|
|
8
|
-
}
|
|
9
|
-
|
|
10
|
-
/** Service parameters that include an account instance for signing operations */
|
|
11
|
-
export interface BaseAccountableServiceParams extends BaseServiceParams {
|
|
12
|
-
account: AccountInstance
|
|
13
|
-
}
|
|
@@ -1,7 +0,0 @@
|
|
|
1
|
-
import type { Hash } from '@xylabs/sdk-js'
|
|
2
|
-
import type { SignedHydratedTransaction } from '@xyo-network/xl1-protocol-lib'
|
|
3
|
-
|
|
4
|
-
/** Service for retrieving pending transactions from the mempool */
|
|
5
|
-
export interface PendingTransactionsService {
|
|
6
|
-
getPendingTransactions(head: Hash, limit: number, timeout?: number): Promise<SignedHydratedTransaction[]>
|
|
7
|
-
}
|
|
@@ -1,11 +0,0 @@
|
|
|
1
|
-
import type { Hash, Promisable } from '@xylabs/sdk-js'
|
|
2
|
-
import type { Schema } from '@xyo-network/sdk-js'
|
|
3
|
-
|
|
4
|
-
/** Provider interface for querying schema counts at a given chain head */
|
|
5
|
-
export interface SchemasProvider {
|
|
6
|
-
schema(head: Hash, schema: Schema): Promisable<number>
|
|
7
|
-
schemas(head: Hash, schemas: Schema[]): Promisable<Partial<Record<Schema, number>>>
|
|
8
|
-
}
|
|
9
|
-
|
|
10
|
-
/** Service interface for querying schema counts, extending SchemasProvider */
|
|
11
|
-
export interface SchemasService extends SchemasProvider {}
|