@xyo-network/xl1-protocol-sdk 1.14.3 → 1.15.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/neutral/block/hydrate/allHashesPresent.d.ts +4 -0
- package/dist/neutral/block/hydrate/allHashesPresent.d.ts.map +1 -0
- package/dist/neutral/block/hydrate/blockPayloadsFromHydratedBlock.d.ts +4 -0
- package/dist/neutral/block/hydrate/blockPayloadsFromHydratedBlock.d.ts.map +1 -0
- package/dist/neutral/block/hydrate/flattenHydratedBlock.d.ts +4 -0
- package/dist/neutral/block/hydrate/flattenHydratedBlock.d.ts.map +1 -0
- package/dist/neutral/block/hydrate/flattenHydratedBlocks.d.ts +4 -0
- package/dist/neutral/block/hydrate/flattenHydratedBlocks.d.ts.map +1 -0
- package/dist/neutral/block/hydrate/hydrateBlock.d.ts +5 -0
- package/dist/neutral/block/hydrate/hydrateBlock.d.ts.map +1 -0
- package/dist/neutral/block/hydrate/index.d.ts +8 -0
- package/dist/neutral/block/hydrate/index.d.ts.map +1 -0
- package/dist/neutral/block/hydrate/transactionsFromHydratedBlock.d.ts +4 -0
- package/dist/neutral/block/hydrate/transactionsFromHydratedBlock.d.ts.map +1 -0
- package/dist/neutral/block/hydrate/tryHydrateBlock.d.ts +5 -0
- package/dist/neutral/block/hydrate/tryHydrateBlock.d.ts.map +1 -0
- package/dist/neutral/block/index.d.ts +1 -1
- package/dist/neutral/block/index.d.ts.map +1 -1
- package/dist/neutral/block/primitives/balances/balancesStepSummaryFromRange.d.ts +6 -0
- package/dist/neutral/block/primitives/balances/balancesStepSummaryFromRange.d.ts.map +1 -0
- package/dist/neutral/block/primitives/balances/balancesSummary.d.ts +4 -0
- package/dist/neutral/block/primitives/balances/balancesSummary.d.ts.map +1 -0
- package/dist/neutral/block/primitives/balances/index.d.ts +3 -0
- package/dist/neutral/block/primitives/balances/index.d.ts.map +1 -0
- package/dist/neutral/block/primitives/blockFromBlockNumber.d.ts +5 -0
- package/dist/neutral/block/primitives/blockFromBlockNumber.d.ts.map +1 -0
- package/dist/neutral/block/primitives/hashFromBlockNumber.d.ts.map +1 -1
- package/dist/neutral/block/primitives/index.d.ts +4 -3
- package/dist/neutral/block/primitives/index.d.ts.map +1 -1
- package/dist/neutral/block/primitives/model.d.ts +5 -2
- package/dist/neutral/block/primitives/model.d.ts.map +1 -1
- package/dist/neutral/block/primitives/{payloads.d.ts → payloads/BalancesStepSummary.d.ts} +5 -16
- package/dist/neutral/block/primitives/payloads/BalancesStepSummary.d.ts.map +1 -0
- package/dist/neutral/block/primitives/payloads/ChainWindow.d.ts +6 -0
- package/dist/neutral/block/primitives/payloads/ChainWindow.d.ts.map +1 -0
- package/dist/neutral/block/primitives/payloads/StepSummary.d.ts +11 -0
- package/dist/neutral/block/primitives/payloads/StepSummary.d.ts.map +1 -0
- package/dist/neutral/block/primitives/payloads/TransfersSummary.d.ts +21 -0
- package/dist/neutral/block/primitives/payloads/TransfersSummary.d.ts.map +1 -0
- package/dist/neutral/block/primitives/payloads/index.d.ts +5 -0
- package/dist/neutral/block/primitives/payloads/index.d.ts.map +1 -0
- package/dist/neutral/block/primitives/transfers/index.d.ts +3 -0
- package/dist/neutral/block/primitives/transfers/index.d.ts.map +1 -0
- package/dist/neutral/block/primitives/transfers/transfersStepSummaryFromRange.d.ts +6 -0
- package/dist/neutral/block/primitives/transfers/transfersStepSummaryFromRange.d.ts.map +1 -0
- package/dist/neutral/block/primitives/transfers/transfersSummary.d.ts +4 -0
- package/dist/neutral/block/primitives/transfers/transfersSummary.d.ts.map +1 -0
- package/dist/neutral/config/Config.d.ts +10 -0
- package/dist/neutral/config/Config.d.ts.map +1 -1
- package/dist/neutral/config/Producer.d.ts +10 -0
- package/dist/neutral/config/Producer.d.ts.map +1 -1
- package/dist/neutral/index.d.ts +2 -0
- package/dist/neutral/index.d.ts.map +1 -1
- package/dist/neutral/index.mjs +509 -88
- package/dist/neutral/index.mjs.map +1 -1
- package/dist/neutral/payload/index.d.ts +1 -0
- package/dist/neutral/payload/index.d.ts.map +1 -1
- package/dist/neutral/payload/netTransfersForPayloads.d.ts +4 -0
- package/dist/neutral/payload/netTransfersForPayloads.d.ts.map +1 -0
- package/dist/neutral/steps/index.d.ts +2 -0
- package/dist/neutral/steps/index.d.ts.map +1 -0
- package/dist/neutral/steps/primitives/addressStakeWeight.d.ts +4 -0
- package/dist/neutral/steps/primitives/addressStakeWeight.d.ts.map +1 -0
- package/dist/neutral/steps/primitives/claimedRewards.d.ts +3 -0
- package/dist/neutral/steps/primitives/claimedRewards.d.ts.map +1 -0
- package/dist/neutral/steps/primitives/index.d.ts +17 -0
- package/dist/neutral/steps/primitives/index.d.ts.map +1 -0
- package/dist/neutral/steps/primitives/networkStakeStepAddressReward.d.ts +4 -0
- package/dist/neutral/steps/primitives/networkStakeStepAddressReward.d.ts.map +1 -0
- package/dist/neutral/steps/primitives/networkStakeStepPoolRewardShares.d.ts +4 -0
- package/dist/neutral/steps/primitives/networkStakeStepPoolRewardShares.d.ts.map +1 -0
- package/dist/neutral/steps/primitives/networkStakeStepPoolRewards.d.ts +4 -0
- package/dist/neutral/steps/primitives/networkStakeStepPoolRewards.d.ts.map +1 -0
- package/dist/neutral/steps/primitives/networkStakeStepRewardAddressHistory.d.ts +4 -0
- package/dist/neutral/steps/primitives/networkStakeStepRewardAddressHistory.d.ts.map +1 -0
- package/dist/neutral/steps/primitives/networkStakeStepRewardAddressShare.d.ts +4 -0
- package/dist/neutral/steps/primitives/networkStakeStepRewardAddressShare.d.ts.map +1 -0
- package/dist/neutral/steps/primitives/networkStakeStepRewardForStep.d.ts +3 -0
- package/dist/neutral/steps/primitives/networkStakeStepRewardForStep.d.ts.map +1 -0
- package/dist/neutral/steps/primitives/networkStakeStepRewardPositionWeight.d.ts +3 -0
- package/dist/neutral/steps/primitives/networkStakeStepRewardPositionWeight.d.ts.map +1 -0
- package/dist/neutral/steps/primitives/networkStakeStepRewardPotentialPositionLoss.d.ts +3 -0
- package/dist/neutral/steps/primitives/networkStakeStepRewardPotentialPositionLoss.d.ts.map +1 -0
- package/dist/neutral/steps/primitives/networkStakeStepRewardRandomizer.d.ts +3 -0
- package/dist/neutral/steps/primitives/networkStakeStepRewardRandomizer.d.ts.map +1 -0
- package/dist/neutral/steps/primitives/networkStakeStepRewardWeightForAddress.d.ts +4 -0
- package/dist/neutral/steps/primitives/networkStakeStepRewardWeightForAddress.d.ts.map +1 -0
- package/dist/neutral/steps/primitives/stakersAsOfBlock.d.ts +4 -0
- package/dist/neutral/steps/primitives/stakersAsOfBlock.d.ts.map +1 -0
- package/dist/neutral/steps/primitives/startingStakes.d.ts +4 -0
- package/dist/neutral/steps/primitives/startingStakes.d.ts.map +1 -0
- package/dist/neutral/steps/primitives/totalStakeWeight.d.ts +4 -0
- package/dist/neutral/steps/primitives/totalStakeWeight.d.ts.map +1 -0
- package/dist/neutral/steps/primitives/unclaimedRewards.d.ts +4 -0
- package/dist/neutral/steps/primitives/unclaimedRewards.d.ts.map +1 -0
- package/dist/neutral/time/index.d.ts +2 -0
- package/dist/neutral/time/index.d.ts.map +1 -0
- package/dist/neutral/time/primitives/index.d.ts +2 -0
- package/dist/neutral/time/primitives/index.d.ts.map +1 -0
- package/dist/neutral/time/primitives/xl1BlockNumberToEthBlockNumber.d.ts +3 -0
- package/dist/neutral/time/primitives/xl1BlockNumberToEthBlockNumber.d.ts.map +1 -0
- package/package.json +6 -5
- package/src/block/hydrate/allHashesPresent.ts +7 -0
- package/src/block/hydrate/blockPayloadsFromHydratedBlock.ts +11 -0
- package/src/block/hydrate/flattenHydratedBlock.ts +7 -0
- package/src/block/hydrate/flattenHydratedBlocks.ts +7 -0
- package/src/block/hydrate/hydrateBlock.ts +38 -0
- package/src/block/hydrate/index.ts +7 -0
- package/src/block/hydrate/transactionsFromHydratedBlock.ts +8 -0
- package/src/block/hydrate/tryHydrateBlock.ts +25 -0
- package/src/block/index.ts +1 -1
- package/src/block/primitives/{balanceStepSummaryFromRange.ts → balances/balancesStepSummaryFromRange.ts} +10 -10
- package/src/block/primitives/{balanceSummary.ts → balances/balancesSummary.ts} +6 -6
- package/src/block/primitives/balances/index.ts +2 -0
- package/src/block/primitives/blockFromBlockNumber.ts +33 -0
- package/src/block/primitives/hashFromBlockNumber.ts +3 -26
- package/src/block/primitives/index.ts +4 -3
- package/src/block/primitives/model.ts +7 -2
- package/src/block/primitives/{payloads.ts → payloads/BalancesStepSummary.ts} +4 -23
- package/src/block/primitives/payloads/ChainWindow.ts +6 -0
- package/src/block/primitives/payloads/StepSummary.ts +15 -0
- package/src/block/primitives/payloads/TransfersSummary.ts +30 -0
- package/src/block/primitives/payloads/index.ts +4 -0
- package/src/block/primitives/transfers/index.ts +2 -0
- package/src/block/primitives/transfers/transfersStepSummaryFromRange.ts +79 -0
- package/src/block/primitives/transfers/transfersSummary.ts +31 -0
- package/src/config/Producer.ts +17 -0
- package/src/index.ts +2 -0
- package/src/payload/index.ts +1 -0
- package/src/payload/netTransfersForPayloads.ts +30 -0
- package/src/steps/index.ts +1 -0
- package/src/steps/primitives/addressStakeWeight.ts +51 -0
- package/src/steps/primitives/claimedRewards.ts +5 -0
- package/src/steps/primitives/index.ts +16 -0
- package/src/steps/primitives/networkStakeStepAddressReward.ts +6 -0
- package/src/steps/primitives/networkStakeStepPoolRewardShares.ts +6 -0
- package/src/steps/primitives/networkStakeStepPoolRewards.ts +6 -0
- package/src/steps/primitives/networkStakeStepRewardAddressHistory.ts +6 -0
- package/src/steps/primitives/networkStakeStepRewardAddressShare.ts +6 -0
- package/src/steps/primitives/networkStakeStepRewardForStep.ts +5 -0
- package/src/steps/primitives/networkStakeStepRewardPositionWeight.ts +5 -0
- package/src/steps/primitives/networkStakeStepRewardPotentialPositionLoss.ts +5 -0
- package/src/steps/primitives/networkStakeStepRewardRandomizer.ts +5 -0
- package/src/steps/primitives/networkStakeStepRewardWeightForAddress.ts +6 -0
- package/src/steps/primitives/stakersAsOfBlock.ts +18 -0
- package/src/steps/primitives/startingStakes.ts +30 -0
- package/src/steps/primitives/totalStakeWeight.ts +35 -0
- package/src/steps/primitives/unclaimedRewards.ts +6 -0
- package/src/time/index.ts +1 -0
- package/src/time/primitives/index.ts +1 -0
- package/src/time/primitives/xl1BlockNumberToEthBlockNumber.ts +13 -0
- package/dist/neutral/block/hydrateBlock.d.ts +0 -12
- package/dist/neutral/block/hydrateBlock.d.ts.map +0 -1
- package/dist/neutral/block/primitives/balanceStepSummaryFromRange.d.ts +0 -6
- package/dist/neutral/block/primitives/balanceStepSummaryFromRange.d.ts.map +0 -1
- package/dist/neutral/block/primitives/balanceSummary.d.ts +0 -4
- package/dist/neutral/block/primitives/balanceSummary.d.ts.map +0 -1
- package/dist/neutral/block/primitives/payloads.d.ts.map +0 -1
- package/src/block/hydrateBlock.ts +0 -84
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/steps/primitives/index.ts"],"names":[],"mappings":"AAAA,cAAc,yBAAyB,CAAA;AACvC,cAAc,qBAAqB,CAAA;AACnC,cAAc,oCAAoC,CAAA;AAClD,cAAc,kCAAkC,CAAA;AAChD,cAAc,uCAAuC,CAAA;AACrD,cAAc,2CAA2C,CAAA;AACzD,cAAc,yCAAyC,CAAA;AACvD,cAAc,oCAAoC,CAAA;AAClD,cAAc,2CAA2C,CAAA;AACzD,cAAc,kDAAkD,CAAA;AAChE,cAAc,uCAAuC,CAAA;AACrD,cAAc,6CAA6C,CAAA;AAC3D,cAAc,uBAAuB,CAAA;AACrC,cAAc,qBAAqB,CAAA;AACnC,cAAc,uBAAuB,CAAA;AACrC,cAAc,uBAAuB,CAAA"}
|
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
import type { Address } from '@xylabs/hex';
|
|
2
|
+
import type { Promisable } from '@xylabs/promise';
|
|
3
|
+
export declare function networkStakeStepAddressReward(address: Address, step: number, block: number): Promisable<Record<Address, bigint>>;
|
|
4
|
+
//# sourceMappingURL=networkStakeStepAddressReward.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"networkStakeStepAddressReward.d.ts","sourceRoot":"","sources":["../../../../src/steps/primitives/networkStakeStepAddressReward.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,aAAa,CAAA;AAC1C,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAA;AAEjD,wBAAgB,6BAA6B,CAAC,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,UAAU,CAAC,MAAM,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC,CAEhI"}
|
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
import type { Address } from '@xylabs/hex';
|
|
2
|
+
import type { Promisable } from '@xylabs/promise';
|
|
3
|
+
export declare function networkStakeStepPoolRewardShares(step: number, block: number): Promisable<Record<Address, bigint>>;
|
|
4
|
+
//# sourceMappingURL=networkStakeStepPoolRewardShares.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"networkStakeStepPoolRewardShares.d.ts","sourceRoot":"","sources":["../../../../src/steps/primitives/networkStakeStepPoolRewardShares.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,aAAa,CAAA;AAC1C,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAA;AAEjD,wBAAgB,gCAAgC,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,UAAU,CAAC,MAAM,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC,CAEjH"}
|
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
import type { Address } from '@xylabs/hex';
|
|
2
|
+
import type { Promisable } from '@xylabs/promise';
|
|
3
|
+
export declare function networkStakeStepPoolRewards(step: number, block: number): Promisable<Record<Address, bigint>>;
|
|
4
|
+
//# sourceMappingURL=networkStakeStepPoolRewards.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"networkStakeStepPoolRewards.d.ts","sourceRoot":"","sources":["../../../../src/steps/primitives/networkStakeStepPoolRewards.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,aAAa,CAAA;AAC1C,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAA;AAEjD,wBAAgB,2BAA2B,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,UAAU,CAAC,MAAM,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC,CAE5G"}
|
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
import type { Address } from '@xylabs/hex';
|
|
2
|
+
import type { Promisable } from '@xylabs/promise';
|
|
3
|
+
export declare function networkStakeStepRewardAddressHistory(address: Address): Promisable<Record<Address, bigint>>;
|
|
4
|
+
//# sourceMappingURL=networkStakeStepRewardAddressHistory.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"networkStakeStepRewardAddressHistory.d.ts","sourceRoot":"","sources":["../../../../src/steps/primitives/networkStakeStepRewardAddressHistory.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,aAAa,CAAA;AAC1C,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAA;AAEjD,wBAAgB,oCAAoC,CAAC,OAAO,EAAE,OAAO,GAAG,UAAU,CAAC,MAAM,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC,CAE1G"}
|
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
import type { Address } from '@xylabs/hex';
|
|
2
|
+
import type { Promisable } from '@xylabs/promise';
|
|
3
|
+
export declare function networkStakeStepRewardAddressShare(address: Address, step: number, block: number): Promisable<[bigint, bigint]>;
|
|
4
|
+
//# sourceMappingURL=networkStakeStepRewardAddressShare.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"networkStakeStepRewardAddressShare.d.ts","sourceRoot":"","sources":["../../../../src/steps/primitives/networkStakeStepRewardAddressShare.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,aAAa,CAAA;AAC1C,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAA;AAEjD,wBAAgB,kCAAkC,CAAC,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,UAAU,CAAC,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,CAE9H"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"networkStakeStepRewardForStep.d.ts","sourceRoot":"","sources":["../../../../src/steps/primitives/networkStakeStepRewardForStep.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAA;AAEjD,wBAAgB,6BAA6B,CAAC,IAAI,EAAE,MAAM,GAAG,UAAU,CAAC,MAAM,CAAC,CAE9E"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"networkStakeStepRewardPositionWeight.d.ts","sourceRoot":"","sources":["../../../../src/steps/primitives/networkStakeStepRewardPositionWeight.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAA;AAEjD,wBAAgB,oCAAoC,CAAC,QAAQ,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,UAAU,CAAC,MAAM,CAAC,CAEvG"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"networkStakeStepRewardPotentialPositionLoss.d.ts","sourceRoot":"","sources":["../../../../src/steps/primitives/networkStakeStepRewardPotentialPositionLoss.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAA;AAEjD,wBAAgB,2CAA2C,CAAC,QAAQ,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,UAAU,CAAC,MAAM,CAAC,CAE9G"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"networkStakeStepRewardRandomizer.d.ts","sourceRoot":"","sources":["../../../../src/steps/primitives/networkStakeStepRewardRandomizer.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAA;AAEjD,wBAAgB,gCAAgC,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,UAAU,CAAC,MAAM,CAAC,CAEhG"}
|
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
import type { Address } from '@xylabs/hex';
|
|
2
|
+
import type { Promisable } from '@xylabs/promise';
|
|
3
|
+
export declare function networkStakeStepRewardWeightForAddress(address: Address, step: number): Promisable<bigint>;
|
|
4
|
+
//# sourceMappingURL=networkStakeStepRewardWeightForAddress.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"networkStakeStepRewardWeightForAddress.d.ts","sourceRoot":"","sources":["../../../../src/steps/primitives/networkStakeStepRewardWeightForAddress.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,aAAa,CAAA;AAC1C,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAA;AAEjD,wBAAgB,sCAAsC,CAAC,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,GAAG,UAAU,CAAC,MAAM,CAAC,CAEzG"}
|
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
import { type Address } from '@xylabs/hex';
|
|
2
|
+
import type { AddressStakingV2 } from '@xyo-network/typechain';
|
|
3
|
+
export declare function stakersAsOfBlock(stakeContract: AddressStakingV2, staked: Address, ethBlock: number): Promise<Address[]>;
|
|
4
|
+
//# sourceMappingURL=stakersAsOfBlock.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"stakersAsOfBlock.d.ts","sourceRoot":"","sources":["../../../../src/steps/primitives/stakersAsOfBlock.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,OAAO,EAAa,MAAM,aAAa,CAAA;AACrD,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,wBAAwB,CAAA;AAM9D,wBAAsB,gBAAgB,CAAC,aAAa,EAAE,gBAAgB,EAAE,MAAM,EAAE,OAAO,EAAE,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,EAAE,CAAC,CAU7H"}
|
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
import { type Address } from '@xylabs/hex';
|
|
2
|
+
import type { AddressStakingV2 } from '@xyo-network/typechain';
|
|
3
|
+
export declare function startingStakes(stakeContract: AddressStakingV2, staked: Address, ethBlock: number): Promise<Record<Address, bigint>>;
|
|
4
|
+
//# sourceMappingURL=startingStakes.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"startingStakes.d.ts","sourceRoot":"","sources":["../../../../src/steps/primitives/startingStakes.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,OAAO,EAAa,MAAM,aAAa,CAAA;AACrD,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,wBAAwB,CAAA;AAG9D,wBAAsB,cAAc,CAAC,aAAa,EAAE,gBAAgB,EAAE,MAAM,EAAE,OAAO,EAAE,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC,CAyBzI"}
|
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
import { type Address } from '@xylabs/hex';
|
|
2
|
+
import type { AddressStakingV2 } from '@xyo-network/typechain';
|
|
3
|
+
export declare function totalStakeWeight(stakeContract: AddressStakingV2, staked: Address, startEthBlock: number, endEthBlock: number): Promise<bigint>;
|
|
4
|
+
//# sourceMappingURL=totalStakeWeight.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"totalStakeWeight.d.ts","sourceRoot":"","sources":["../../../../src/steps/primitives/totalStakeWeight.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,OAAO,EAAa,MAAM,aAAa,CAAA;AACrD,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,wBAAwB,CAAA;AAK9D,wBAAsB,gBAAgB,CAAC,aAAa,EAAE,gBAAgB,EAAE,MAAM,EAAE,OAAO,EAAE,aAAa,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CA4BpJ"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"unclaimedRewards.d.ts","sourceRoot":"","sources":["../../../../src/steps/primitives/unclaimedRewards.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,aAAa,CAAA;AAC1C,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAA;AAEjD,wBAAgB,gBAAgB,CAAC,OAAO,EAAE,OAAO,GAAG,UAAU,CAAC,MAAM,CAAC,CAErE"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/time/index.ts"],"names":[],"mappings":"AAAA,cAAc,uBAAuB,CAAA"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/time/primitives/index.ts"],"names":[],"mappings":"AAAA,cAAc,qCAAqC,CAAA"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"xl1BlockNumberToEthBlockNumber.d.ts","sourceRoot":"","sources":["../../../../src/time/primitives/xl1BlockNumberToEthBlockNumber.ts"],"names":[],"mappings":"AAGA,OAAO,EACL,KAAK,YAAY,EAClB,MAAM,sBAAsB,CAAA;AAE7B,wBAAsB,8BAA8B,CAAC,OAAO,EAAE,YAAY,EAAE,cAAc,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAKnH"}
|
package/package.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"$schema": "http://json.schemastore.org/package.json",
|
|
3
3
|
"name": "@xyo-network/xl1-protocol-sdk",
|
|
4
|
-
"version": "1.
|
|
4
|
+
"version": "1.15.0",
|
|
5
5
|
"description": "XYO Layer One SDK Protocol",
|
|
6
6
|
"homepage": "https://xylabs.com",
|
|
7
7
|
"bugs": {
|
|
@@ -52,18 +52,19 @@
|
|
|
52
52
|
"@xyo-network/boundwitness-model": "~5.1.2",
|
|
53
53
|
"@xyo-network/payload-builder": "~5.1.2",
|
|
54
54
|
"@xyo-network/payload-model": "~5.1.2",
|
|
55
|
+
"@xyo-network/typechain": "^4.0.8",
|
|
55
56
|
"@xyo-network/wallet": "~5.1.2",
|
|
56
57
|
"@xyo-network/wallet-model": "~5.1.2",
|
|
57
|
-
"@xyo-network/xl1-protocol": "~1.12.
|
|
58
|
-
"zod": "~4.1.
|
|
58
|
+
"@xyo-network/xl1-protocol": "~1.12.32",
|
|
59
|
+
"zod": "~4.1.8"
|
|
59
60
|
},
|
|
60
61
|
"devDependencies": {
|
|
61
|
-
"@types/node": "~24.
|
|
62
|
+
"@types/node": "~24.4.0",
|
|
62
63
|
"@xylabs/ts-scripts-yarn3": "~7.1.7",
|
|
63
64
|
"@xylabs/tsconfig": "~7.1.7",
|
|
64
65
|
"@xyo-network/account": "~5.1.2",
|
|
65
66
|
"@xyo-network/boundwitness-validator": "~5.1.2",
|
|
66
|
-
"eslint": "^9.
|
|
67
|
+
"eslint": "^9.35.0",
|
|
67
68
|
"typescript": "~5.9.2",
|
|
68
69
|
"vitest": "~3.2.4"
|
|
69
70
|
},
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
import type { Hash } from '@xylabs/hex'
|
|
2
|
+
import type { Payload, WithStorageMeta } from '@xyo-network/payload-model'
|
|
3
|
+
|
|
4
|
+
export function allHashesPresent(hashes: Hash[], payloads: WithStorageMeta<Payload>[]): boolean {
|
|
5
|
+
const payloadHashes = new Set(payloads.map(p => p._hash))
|
|
6
|
+
return hashes.every(hash => payloadHashes.has(hash))
|
|
7
|
+
}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import { assertEx } from '@xylabs/assert'
|
|
2
|
+
import type { Payload, WithStorageMeta } from '@xyo-network/payload-model'
|
|
3
|
+
import type { HydratedBlock } from '@xyo-network/xl1-protocol'
|
|
4
|
+
import { isTransactionBoundWitnessWithStorageMeta } from '@xyo-network/xl1-protocol'
|
|
5
|
+
|
|
6
|
+
export const blockPayloadsFromHydratedBlock = (block: HydratedBlock): WithStorageMeta<Payload>[] => {
|
|
7
|
+
return block[0].payload_hashes.map(hash => assertEx(
|
|
8
|
+
block[1].find(p => p._hash === hash),
|
|
9
|
+
() => `missing payload ${hash}`,
|
|
10
|
+
)).filter(x => !isTransactionBoundWitnessWithStorageMeta(x))
|
|
11
|
+
}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
import type { Payload, WithStorageMeta } from '@xyo-network/payload-model'
|
|
2
|
+
import type { HydratedBlock } from '@xyo-network/xl1-protocol'
|
|
3
|
+
|
|
4
|
+
export const flattenHydratedBlock = (hydratedBlock: HydratedBlock): WithStorageMeta<Payload>[] => {
|
|
5
|
+
const [blk, blkPayloads] = hydratedBlock
|
|
6
|
+
return [...blkPayloads, blk]
|
|
7
|
+
}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
import type { Payload, WithStorageMeta } from '@xyo-network/payload-model'
|
|
2
|
+
import type { HydratedBlock } from '@xyo-network/xl1-protocol'
|
|
3
|
+
|
|
4
|
+
import { flattenHydratedBlock } from './flattenHydratedBlock.ts'
|
|
5
|
+
|
|
6
|
+
export const flattenHydratedBlocks = (hydratedBlocks: HydratedBlock[]): WithStorageMeta<Payload>[] =>
|
|
7
|
+
hydratedBlocks.flatMap(blk => flattenHydratedBlock(blk))
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
import { assertEx } from '@xylabs/assert'
|
|
2
|
+
import type { Hash } from '@xylabs/hex'
|
|
3
|
+
import type { ReadArchivist } from '@xyo-network/archivist-model'
|
|
4
|
+
import type { HydratedBlock } from '@xyo-network/xl1-protocol'
|
|
5
|
+
import { isBlockBoundWitnessWithStorageMeta, isTransactionBoundWitnessWithStorageMeta } from '@xyo-network/xl1-protocol'
|
|
6
|
+
|
|
7
|
+
import { allHashesPresent } from './allHashesPresent.ts'
|
|
8
|
+
|
|
9
|
+
export const hydrateBlock = async (
|
|
10
|
+
archivist: ReadArchivist,
|
|
11
|
+
hash: Hash,
|
|
12
|
+
maxDepth: number = 1,
|
|
13
|
+
minDepth = maxDepth,
|
|
14
|
+
): Promise<HydratedBlock> => {
|
|
15
|
+
assertEx(maxDepth >= 0, () => 'maxDepth must be greater than or equal to 0')
|
|
16
|
+
assertEx(minDepth >= 0, () => 'minDepth must be greater than or equal to 0')
|
|
17
|
+
assertEx(maxDepth >= minDepth, () => 'maxDepth must be greater than or equal to minDepth')
|
|
18
|
+
const bw = assertEx(
|
|
19
|
+
(await archivist.get([hash])).find(isBlockBoundWitnessWithStorageMeta),
|
|
20
|
+
() => `block ${hash} not found`,
|
|
21
|
+
)
|
|
22
|
+
if (maxDepth === 0) return [bw, []]
|
|
23
|
+
const blkPayloads = await archivist.get(bw.payload_hashes)
|
|
24
|
+
if (minDepth === 1) assertEx(allHashesPresent(bw.payload_hashes, blkPayloads), () => `Unable to find all payloads for block ${hash}`)
|
|
25
|
+
if (maxDepth === 1) return [bw, blkPayloads]
|
|
26
|
+
const transactions = blkPayloads.filter(isTransactionBoundWitnessWithStorageMeta)
|
|
27
|
+
const transactionsPayloadHashes = transactions.flatMap(tx => tx.payload_hashes)
|
|
28
|
+
const transactionsPayloads = await archivist.get(transactionsPayloadHashes)
|
|
29
|
+
assertEx(allHashesPresent(transactionsPayloadHashes, transactionsPayloads), () => `Unable to find all payloads for transactions in block ${hash}`)
|
|
30
|
+
const allPayloadsHashes = new Set([...blkPayloads, ...transactionsPayloads].flatMap(p => p._hash))
|
|
31
|
+
const allPayloads = await archivist.get([...allPayloadsHashes])
|
|
32
|
+
const allPayloadsFiltered = allPayloads.filter(p => allPayloadsHashes.has(p._hash))
|
|
33
|
+
if (maxDepth === 2) assertEx(allHashesPresent(
|
|
34
|
+
[...allPayloadsHashes],
|
|
35
|
+
allPayloadsFiltered,
|
|
36
|
+
), () => `Unable to find all payloads for transactions in block ${hash}`)
|
|
37
|
+
return [bw, allPayloadsFiltered]
|
|
38
|
+
}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
export * from './allHashesPresent.ts'
|
|
2
|
+
export * from './blockPayloadsFromHydratedBlock.ts'
|
|
3
|
+
export * from './flattenHydratedBlock.ts'
|
|
4
|
+
export * from './flattenHydratedBlocks.ts'
|
|
5
|
+
export * from './hydrateBlock.ts'
|
|
6
|
+
export * from './transactionsFromHydratedBlock.ts'
|
|
7
|
+
export * from './tryHydrateBlock.ts'
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import { filterAs } from '@xylabs/array'
|
|
2
|
+
import type { WithStorageMeta } from '@xyo-network/payload-model'
|
|
3
|
+
import type { HydratedBlock, TransactionBoundWitness } from '@xyo-network/xl1-protocol'
|
|
4
|
+
import { asTransactionBoundWitnessWithStorageMeta } from '@xyo-network/xl1-protocol'
|
|
5
|
+
|
|
6
|
+
export const transactionsFromHydratedBlock = (block: HydratedBlock): WithStorageMeta<TransactionBoundWitness>[] => {
|
|
7
|
+
return filterAs(block[1], asTransactionBoundWitnessWithStorageMeta)
|
|
8
|
+
}
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
import { assertEx } from '@xylabs/assert'
|
|
2
|
+
import type { Hash } from '@xylabs/hex'
|
|
3
|
+
import type { ReadArchivist } from '@xyo-network/archivist-model'
|
|
4
|
+
import type { HydratedBlock } from '@xyo-network/xl1-protocol'
|
|
5
|
+
import { isBlockBoundWitnessWithStorageMeta, isTransactionBoundWitnessWithStorageMeta } from '@xyo-network/xl1-protocol'
|
|
6
|
+
|
|
7
|
+
export const tryHydrateBlock = async (
|
|
8
|
+
archivist: ReadArchivist,
|
|
9
|
+
hash: Hash,
|
|
10
|
+
maxDepth: number = 1,
|
|
11
|
+
): Promise<HydratedBlock | undefined> => {
|
|
12
|
+
assertEx(maxDepth >= 0, () => 'maxDepth must be greater than or equal to 0')
|
|
13
|
+
const bw = (await archivist.get([hash])).find(isBlockBoundWitnessWithStorageMeta)
|
|
14
|
+
if (!bw) return undefined
|
|
15
|
+
if (maxDepth === 0) return [bw, []]
|
|
16
|
+
const blkPayloads = await archivist.get(bw.payload_hashes)
|
|
17
|
+
if (maxDepth === 1) return [bw, blkPayloads]
|
|
18
|
+
const transactions = blkPayloads.filter(isTransactionBoundWitnessWithStorageMeta)
|
|
19
|
+
const transactionsPayloadHashes = transactions.flatMap(tx => tx.payload_hashes)
|
|
20
|
+
const transactionsPayloads = await archivist.get(transactionsPayloadHashes)
|
|
21
|
+
const allPayloadsHashes = new Set([...blkPayloads, ...transactionsPayloads].flatMap(p => p._hash))
|
|
22
|
+
const allPayloads = await archivist.get([...allPayloadsHashes])
|
|
23
|
+
const allPayloadsFiltered = allPayloads.filter(p => allPayloadsHashes.has(p._hash))
|
|
24
|
+
return [bw, allPayloadsFiltered]
|
|
25
|
+
}
|
package/src/block/index.ts
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
export * from './
|
|
1
|
+
export * from './hydrate/index.ts'
|
|
2
2
|
export * from './primitives/index.ts'
|
|
@@ -5,18 +5,18 @@ import type { WithStorageMeta } from '@xyo-network/payload-model'
|
|
|
5
5
|
import { isAnyPayload } from '@xyo-network/payload-model'
|
|
6
6
|
import { StepSizes } from '@xyo-network/xl1-protocol'
|
|
7
7
|
|
|
8
|
-
import { netBalancesForPayloads } from '
|
|
8
|
+
import { netBalancesForPayloads } from '../../../payload/index.ts'
|
|
9
9
|
import {
|
|
10
10
|
parseSignedBigInt, type SignedBigInt, toSignedBigInt,
|
|
11
|
-
} from '
|
|
12
|
-
import { hydrateBlock } from '
|
|
13
|
-
import type { BlockNumberRange } from '
|
|
14
|
-
import { deepCalculateFramesFromRange } from '
|
|
15
|
-
import { hashFromBlockNumber } from '
|
|
16
|
-
import type { BalanceStepSummaryContext } from '
|
|
17
|
-
import { type BalancesStepSummary, BalancesStepSummarySchema } from '
|
|
11
|
+
} from '../../../SignedBigInt.ts'
|
|
12
|
+
import { hydrateBlock } from '../../hydrate/index.ts'
|
|
13
|
+
import type { BlockNumberRange } from '../frames/index.ts'
|
|
14
|
+
import { deepCalculateFramesFromRange } from '../frames/index.ts'
|
|
15
|
+
import { hashFromBlockNumber } from '../hashFromBlockNumber.ts'
|
|
16
|
+
import type { BalanceStepSummaryContext } from '../model.ts'
|
|
17
|
+
import { type BalancesStepSummary, BalancesStepSummarySchema } from '../payloads/index.ts'
|
|
18
18
|
|
|
19
|
-
export async function
|
|
19
|
+
export async function balancesStepSummaryFromRange(
|
|
20
20
|
context: BalanceStepSummaryContext,
|
|
21
21
|
range: BlockNumberRange,
|
|
22
22
|
): Promise<WithStorageMeta<BalancesStepSummary>> {
|
|
@@ -47,7 +47,7 @@ export async function balanceStepSummaryFromRange(
|
|
|
47
47
|
} else {
|
|
48
48
|
// We do not have it, so lets build it
|
|
49
49
|
const subRanges = deepCalculateFramesFromRange(range, step - 1)
|
|
50
|
-
const promises = subRanges.map(subRange =>
|
|
50
|
+
const promises = subRanges.map(subRange => balancesStepSummaryFromRange(
|
|
51
51
|
context,
|
|
52
52
|
subRange,
|
|
53
53
|
))
|
|
@@ -4,12 +4,12 @@ import { spanRootAsync } from '@xylabs/telemetry'
|
|
|
4
4
|
import { isDefined } from '@xylabs/typeof'
|
|
5
5
|
import { asBlockBoundWitnessWithStorageMeta } from '@xyo-network/xl1-protocol'
|
|
6
6
|
|
|
7
|
-
import { parseSignedBigInt } from '
|
|
8
|
-
import {
|
|
9
|
-
import {
|
|
10
|
-
import
|
|
7
|
+
import { parseSignedBigInt } from '../../../SignedBigInt.ts'
|
|
8
|
+
import { deepCalculateFramesFromRange } from '../frames/index.ts'
|
|
9
|
+
import type { BalanceStepSummaryContext } from '../model.ts'
|
|
10
|
+
import { balancesStepSummaryFromRange } from './balancesStepSummaryFromRange.ts'
|
|
11
11
|
|
|
12
|
-
export async function
|
|
12
|
+
export async function balancesSummary(
|
|
13
13
|
context: BalanceStepSummaryContext,
|
|
14
14
|
): Promise<Partial<Record<Address, bigint>>> {
|
|
15
15
|
return await spanRootAsync('balanceSummary', async () => {
|
|
@@ -17,7 +17,7 @@ export async function balanceSummary(
|
|
|
17
17
|
const headBoundWitness = asBlockBoundWitnessWithStorageMeta(headResult.at(0), () => `Head block not found for hash: ${context.head}`, { required: true })
|
|
18
18
|
const rangeStart = isDefined(context.windowSize) ? Math.max(headBoundWitness.block - context.windowSize + 1, 0) : 0
|
|
19
19
|
const ranges = deepCalculateFramesFromRange([rangeStart, headBoundWitness.block])
|
|
20
|
-
const summaries = await Promise.all(ranges.map(range =>
|
|
20
|
+
const summaries = await Promise.all(ranges.map(range => balancesStepSummaryFromRange(context, range)))
|
|
21
21
|
const balances: Partial<Record<Address, bigint>> = {}
|
|
22
22
|
for (let summary of summaries) {
|
|
23
23
|
for (const [address, balance] of Object.entries(summary.balances)) {
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
import { asHash, type Hash } from '@xylabs/hex'
|
|
2
|
+
import { toSafeJsonString } from '@xylabs/object'
|
|
3
|
+
import type { WithStorageMeta } from '@xyo-network/payload-model'
|
|
4
|
+
import type { BlockBoundWitness } from '@xyo-network/xl1-protocol'
|
|
5
|
+
import { asBlockBoundWitnessWithStorageMeta, StepSizes } from '@xyo-network/xl1-protocol'
|
|
6
|
+
|
|
7
|
+
import type { ChainContext } from './model.ts'
|
|
8
|
+
|
|
9
|
+
export async function blockFromBlockNumber(context: ChainContext, blockNumber: number): Promise<WithStorageMeta<BlockBoundWitness>> {
|
|
10
|
+
const result = await context.chainArchivist.get([context.head])
|
|
11
|
+
let currentBlock = asBlockBoundWitnessWithStorageMeta(result.at(0), () => `Head block not found for hash: ${context.head}`, { required: true })
|
|
12
|
+
while (currentBlock.block > blockNumber) {
|
|
13
|
+
let jumpHash: Hash | null = currentBlock.previous
|
|
14
|
+
let jumpBlockNumber = currentBlock.block - 1
|
|
15
|
+
for (const [step, stepSize] of StepSizes.entries()) {
|
|
16
|
+
const possibleJumpBlockNumber = currentBlock.block - stepSize
|
|
17
|
+
if (possibleJumpBlockNumber >= blockNumber && possibleJumpBlockNumber <= jumpBlockNumber) {
|
|
18
|
+
jumpBlockNumber = possibleJumpBlockNumber
|
|
19
|
+
jumpHash = asHash(currentBlock.step_hashes.at(step), () => `Step hash not found for step ${step} in block ${currentBlock.block}`)
|
|
20
|
+
}
|
|
21
|
+
}
|
|
22
|
+
const [newBlock] = await context.chainArchivist.get([
|
|
23
|
+
asHash(jumpHash, () => `Jump hash not found for block number [${blockNumber}]: ${jumpBlockNumber} ${toSafeJsonString(currentBlock, 10)}`)])
|
|
24
|
+
currentBlock = asBlockBoundWitnessWithStorageMeta(newBlock, () => `Block not found for hash: ${jumpHash}`, { required: true })
|
|
25
|
+
if (currentBlock.block === blockNumber) {
|
|
26
|
+
break
|
|
27
|
+
}
|
|
28
|
+
if (currentBlock.block < blockNumber) {
|
|
29
|
+
throw new Error(`Block number ${blockNumber} is not a valid step block number for block ${context.head}.`)
|
|
30
|
+
}
|
|
31
|
+
}
|
|
32
|
+
return currentBlock
|
|
33
|
+
}
|
|
@@ -1,31 +1,8 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import { toSafeJsonString } from '@xylabs/object'
|
|
3
|
-
import { asBlockBoundWitnessWithStorageMeta, StepSizes } from '@xyo-network/xl1-protocol'
|
|
1
|
+
import { type Hash } from '@xylabs/hex'
|
|
4
2
|
|
|
3
|
+
import { blockFromBlockNumber } from './blockFromBlockNumber.ts'
|
|
5
4
|
import type { ChainContext } from './model.ts'
|
|
6
5
|
|
|
7
6
|
export async function hashFromBlockNumber(context: ChainContext, blockNumber: number): Promise<Hash> {
|
|
8
|
-
|
|
9
|
-
let currentBlock = asBlockBoundWitnessWithStorageMeta(result.at(0), () => `Head block not found for hash: ${context.head}`, { required: true })
|
|
10
|
-
while (currentBlock.block > blockNumber) {
|
|
11
|
-
let jumpHash: Hash | null = currentBlock.previous
|
|
12
|
-
let jumpBlockNumber = currentBlock.block - 1
|
|
13
|
-
for (const [step, stepSize] of StepSizes.entries()) {
|
|
14
|
-
const possibleJumpBlockNumber = currentBlock.block - stepSize
|
|
15
|
-
if (possibleJumpBlockNumber >= blockNumber && possibleJumpBlockNumber <= jumpBlockNumber) {
|
|
16
|
-
jumpBlockNumber = possibleJumpBlockNumber
|
|
17
|
-
jumpHash = asHash(currentBlock.step_hashes.at(step), () => `Step hash not found for step ${step} in block ${currentBlock.block}`)
|
|
18
|
-
}
|
|
19
|
-
}
|
|
20
|
-
const [newBlock] = await context.chainArchivist.get([
|
|
21
|
-
asHash(jumpHash, () => `Jump hash not found for block number [${blockNumber}]: ${jumpBlockNumber} ${toSafeJsonString(currentBlock, 10)}`)])
|
|
22
|
-
currentBlock = asBlockBoundWitnessWithStorageMeta(newBlock, () => `Block not found for hash: ${jumpHash}`, { required: true })
|
|
23
|
-
if (currentBlock.block === blockNumber) {
|
|
24
|
-
break
|
|
25
|
-
}
|
|
26
|
-
if (currentBlock.block < blockNumber) {
|
|
27
|
-
throw new Error(`Block number ${blockNumber} is not a valid step block number for block ${context.head}.`)
|
|
28
|
-
}
|
|
29
|
-
}
|
|
30
|
-
return currentBlock._hash
|
|
7
|
+
return (await blockFromBlockNumber(context, blockNumber))._hash
|
|
31
8
|
}
|
|
@@ -1,6 +1,7 @@
|
|
|
1
|
-
export * from './
|
|
2
|
-
export * from './
|
|
1
|
+
export * from './balances/index.ts'
|
|
2
|
+
export * from './blockFromBlockNumber.ts'
|
|
3
3
|
export * from './frames/index.ts'
|
|
4
4
|
export * from './hashFromBlockNumber.ts'
|
|
5
5
|
export * from './model.ts'
|
|
6
|
-
export * from './payloads.ts'
|
|
6
|
+
export * from './payloads/index.ts'
|
|
7
|
+
export * from './transfers/index.ts'
|
|
@@ -1,9 +1,9 @@
|
|
|
1
|
-
import type { Hash } from '@xylabs/hex'
|
|
1
|
+
import type { Address, Hash } from '@xylabs/hex'
|
|
2
2
|
import type { ReadArchivist } from '@xyo-network/archivist-model'
|
|
3
3
|
import type { Payload } from '@xyo-network/payload-model'
|
|
4
4
|
import type { PayloadRepository } from '@xyo-network/xl1-protocol'
|
|
5
5
|
|
|
6
|
-
import type { BalancesStepSummary } from './payloads.ts'
|
|
6
|
+
import type { BalancesStepSummary, TransfersStepSummary } from './payloads/index.ts'
|
|
7
7
|
|
|
8
8
|
export interface ChainContext {
|
|
9
9
|
chainArchivist: ReadArchivist
|
|
@@ -16,3 +16,8 @@ export interface ChainSummaryContext<T extends Payload> extends ChainContext {
|
|
|
16
16
|
}
|
|
17
17
|
|
|
18
18
|
export interface BalanceStepSummaryContext extends ChainSummaryContext<BalancesStepSummary> {}
|
|
19
|
+
|
|
20
|
+
export interface TransfersStepSummaryContext extends ChainSummaryContext<TransfersStepSummary> {
|
|
21
|
+
/* The address that the transfers to/from are being summarized */
|
|
22
|
+
account: Address
|
|
23
|
+
}
|
|
@@ -1,29 +1,10 @@
|
|
|
1
|
-
import type { Address
|
|
2
|
-
import type { EmptyObject } from '@xylabs/object'
|
|
1
|
+
import type { Address } from '@xylabs/hex'
|
|
3
2
|
import { AsObjectFactory } from '@xylabs/object'
|
|
4
|
-
import type {
|
|
5
|
-
Payload, Schema, WithStorageMeta,
|
|
6
|
-
} from '@xyo-network/payload-model'
|
|
3
|
+
import type { Schema, WithStorageMeta } from '@xyo-network/payload-model'
|
|
7
4
|
import { isPayloadOfSchemaType, isStorageMeta } from '@xyo-network/payload-model'
|
|
8
5
|
|
|
9
|
-
import type { SignedBigInt } from '
|
|
10
|
-
|
|
11
|
-
export const StepSummarySchema: Schema = 'network.xyo.step.summary'
|
|
12
|
-
export type StepSummarySchema = typeof StepSummarySchema
|
|
13
|
-
|
|
14
|
-
export interface StepSummaryFields {
|
|
15
|
-
hash: Hash // the stepHash - the hash of the last block in the step frame
|
|
16
|
-
stepSize: number // the stepSize in blocks
|
|
17
|
-
}
|
|
18
|
-
|
|
19
|
-
export interface ChainWindow {
|
|
20
|
-
depth: number // number of blocks the window covers, including the head
|
|
21
|
-
head: Hash // the head of the chain
|
|
22
|
-
}
|
|
23
|
-
|
|
24
|
-
export type StepSummary<TAdditionalFields extends EmptyObject | void = void,
|
|
25
|
-
TSchema extends Schema | void = void> = Payload<TAdditionalFields extends void ? StepSummaryFields : TAdditionalFields & StepSummaryFields,
|
|
26
|
-
TSchema extends void ? StepSummarySchema : TSchema>
|
|
6
|
+
import type { SignedBigInt } from '../../../SignedBigInt.ts'
|
|
7
|
+
import type { StepSummary } from './StepSummary.ts'
|
|
27
8
|
|
|
28
9
|
export const BalancesStepSummarySchema: Schema = 'network.xyo.step.summary.balances'
|
|
29
10
|
export type BalancesStepSummarySchema = typeof BalancesStepSummarySchema
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
import type { Hash } from '@xylabs/hex'
|
|
2
|
+
import type { EmptyObject } from '@xylabs/object'
|
|
3
|
+
import type { Payload, Schema } from '@xyo-network/payload-model'
|
|
4
|
+
|
|
5
|
+
export const StepSummarySchema: Schema = 'network.xyo.step.summary'
|
|
6
|
+
export type StepSummarySchema = typeof StepSummarySchema
|
|
7
|
+
|
|
8
|
+
export interface StepSummaryFields {
|
|
9
|
+
hash: Hash // the stepHash - the hash of the last block in the step frame
|
|
10
|
+
stepSize: number // the stepSize in blocks
|
|
11
|
+
}
|
|
12
|
+
|
|
13
|
+
export type StepSummary<TAdditionalFields extends EmptyObject | void = void,
|
|
14
|
+
TSchema extends Schema | void = void> = Payload<TAdditionalFields extends void ? StepSummaryFields : TAdditionalFields & StepSummaryFields,
|
|
15
|
+
TSchema extends void ? StepSummarySchema : TSchema>
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
import type { Address } from '@xylabs/hex'
|
|
2
|
+
import { AsObjectFactory } from '@xylabs/object'
|
|
3
|
+
import type { Schema, WithStorageMeta } from '@xyo-network/payload-model'
|
|
4
|
+
import { isPayloadOfSchemaType, isStorageMeta } from '@xyo-network/payload-model'
|
|
5
|
+
|
|
6
|
+
import type { SignedBigInt } from '../../../SignedBigInt.ts'
|
|
7
|
+
import type { StepSummary } from './StepSummary.ts'
|
|
8
|
+
|
|
9
|
+
export const TransfersStepSummarySchema: Schema = 'network.xyo.step.summary.transfer'
|
|
10
|
+
export type TransfersStepSummarySchema = typeof TransfersStepSummarySchema
|
|
11
|
+
|
|
12
|
+
export type TransfersStepSummary = StepSummary<{
|
|
13
|
+
account: Address
|
|
14
|
+
transfers: Record<Address, SignedBigInt>
|
|
15
|
+
}, TransfersStepSummarySchema>
|
|
16
|
+
|
|
17
|
+
/**
|
|
18
|
+
* Identity function for determining if an object is an TransfersStepSummary
|
|
19
|
+
*/
|
|
20
|
+
export const isTransfersStepSummary = isPayloadOfSchemaType<TransfersStepSummary>(TransfersStepSummarySchema)
|
|
21
|
+
export const asTransfersStepSummary = AsObjectFactory.create<TransfersStepSummary>(isTransfersStepSummary)
|
|
22
|
+
|
|
23
|
+
/**
|
|
24
|
+
* Identity function for determining if an object is an TransfersStepSummary with Storage Meta
|
|
25
|
+
*/
|
|
26
|
+
export const isTransfersStepSummaryWithStorageMeta = (value: unknown): value is WithStorageMeta<TransfersStepSummary> => {
|
|
27
|
+
return isTransfersStepSummary(value) && isStorageMeta(value)
|
|
28
|
+
}
|
|
29
|
+
export const asTransfersStepSummaryWithStorageMeta
|
|
30
|
+
= AsObjectFactory.create<WithStorageMeta<TransfersStepSummary>>(isTransfersStepSummaryWithStorageMeta)
|