@xyo-network/chain-sdk 5.0.4 → 5.1.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/browser/index.d.ts +1 -0
- package/dist/browser/index.d.ts.map +1 -1
- package/dist/browser/index.mjs +1 -0
- package/dist/browser/index.mjs.map +2 -2
- package/dist/browser/modules/analyze/ChainHeadSelector.d.ts +40 -0
- package/dist/browser/modules/analyze/ChainHeadSelector.d.ts.map +1 -1
- package/dist/browser/modules/analyze/admission.d.ts +65 -0
- package/dist/browser/modules/analyze/admission.d.ts.map +1 -0
- package/dist/browser/modules/analyze/index.d.ts +1 -0
- package/dist/browser/modules/analyze/index.d.ts.map +1 -1
- package/dist/browser/modules/protocol/block/BuildBlockOptions.d.ts +8 -0
- package/dist/browser/modules/protocol/block/BuildBlockOptions.d.ts.map +1 -1
- package/dist/browser/modules/protocol/block/buildBlock.d.ts.map +1 -1
- package/dist/browser/modules/protocol/block/buildNextBlock.d.ts +2 -1
- package/dist/browser/modules/protocol/block/buildNextBlock.d.ts.map +1 -1
- package/dist/browser/modules/services/implementation/processPendingBlocks.d.ts +9 -1
- package/dist/browser/modules/services/implementation/processPendingBlocks.d.ts.map +1 -1
- package/dist/browser/modules/services/simple/block/runner/SimpleBlockRunner.d.ts +34 -1
- package/dist/browser/modules/services/simple/block/runner/SimpleBlockRunner.d.ts.map +1 -1
- package/dist/browser/modules/services/simple/block/runner/index.d.ts +1 -0
- package/dist/browser/modules/services/simple/block/runner/index.d.ts.map +1 -1
- package/dist/browser/modules/services/simple/block/runner/selectSupersededCandidate.d.ts +22 -0
- package/dist/browser/modules/services/simple/block/runner/selectSupersededCandidate.d.ts.map +1 -0
- package/dist/browser/modules/slashing/detect/DetectedOffense.d.ts +27 -0
- package/dist/browser/modules/slashing/detect/DetectedOffense.d.ts.map +1 -0
- package/dist/browser/modules/slashing/detect/candidatePairs.d.ts +44 -0
- package/dist/browser/modules/slashing/detect/candidatePairs.d.ts.map +1 -0
- package/dist/browser/modules/slashing/detect/index.d.ts +5 -0
- package/dist/browser/modules/slashing/detect/index.d.ts.map +1 -0
- package/dist/browser/modules/slashing/detect/offenseGate.d.ts +18 -0
- package/dist/browser/modules/slashing/detect/offenseGate.d.ts.map +1 -0
- package/dist/browser/modules/slashing/detect/suppression.d.ts +23 -0
- package/dist/browser/modules/slashing/detect/suppression.d.ts.map +1 -0
- package/dist/browser/modules/slashing/eligibility/evaluateProducerEligibility.d.ts +71 -0
- package/dist/browser/modules/slashing/eligibility/evaluateProducerEligibility.d.ts.map +1 -0
- package/dist/browser/modules/slashing/eligibility/index.d.ts +2 -0
- package/dist/browser/modules/slashing/eligibility/index.d.ts.map +1 -0
- package/dist/browser/modules/slashing/index/SlashIndexStore.d.ts +22 -0
- package/dist/browser/modules/slashing/index/SlashIndexStore.d.ts.map +1 -0
- package/dist/browser/modules/slashing/index/foldSlashIndex.d.ts +56 -0
- package/dist/browser/modules/slashing/index/foldSlashIndex.d.ts.map +1 -0
- package/dist/browser/modules/slashing/index/index.d.ts +3 -0
- package/dist/browser/modules/slashing/index/index.d.ts.map +1 -0
- package/dist/browser/modules/slashing/index.d.ts +6 -0
- package/dist/browser/modules/slashing/index.d.ts.map +1 -0
- package/dist/browser/modules/slashing/model/OffenseProcedure.d.ts +28 -0
- package/dist/browser/modules/slashing/model/OffenseProcedure.d.ts.map +1 -0
- package/dist/browser/modules/slashing/model/OffenseVerificationContext.d.ts +88 -0
- package/dist/browser/modules/slashing/model/OffenseVerificationContext.d.ts.map +1 -0
- package/dist/browser/modules/slashing/model/SlashHistoryReader.d.ts +34 -0
- package/dist/browser/modules/slashing/model/SlashHistoryReader.d.ts.map +1 -0
- package/dist/browser/modules/slashing/model/VerificationOutcome.d.ts +39 -0
- package/dist/browser/modules/slashing/model/VerificationOutcome.d.ts.map +1 -0
- package/dist/browser/modules/slashing/model/index.d.ts +6 -0
- package/dist/browser/modules/slashing/model/index.d.ts.map +1 -0
- package/dist/browser/modules/slashing/model/offenseKey.d.ts +42 -0
- package/dist/browser/modules/slashing/model/offenseKey.d.ts.map +1 -0
- package/dist/browser/modules/slashing/verify/index.d.ts +10 -0
- package/dist/browser/modules/slashing/verify/index.d.ts.map +1 -0
- package/dist/browser/modules/slashing/verify/preamble.d.ts +63 -0
- package/dist/browser/modules/slashing/verify/preamble.d.ts.map +1 -0
- package/dist/browser/modules/slashing/verify/verifyEquivocation.d.ts +19 -0
- package/dist/browser/modules/slashing/verify/verifyEquivocation.d.ts.map +1 -0
- package/dist/browser/modules/slashing/verify/verifyFalseAnchor.d.ts +15 -0
- package/dist/browser/modules/slashing/verify/verifyFalseAnchor.d.ts.map +1 -0
- package/dist/browser/modules/slashing/verify/verifyFalseAttestation.d.ts +22 -0
- package/dist/browser/modules/slashing/verify/verifyFalseAttestation.d.ts.map +1 -0
- package/dist/browser/modules/slashing/verify/verifyIneligibleProduction.d.ts +18 -0
- package/dist/browser/modules/slashing/verify/verifyIneligibleProduction.d.ts.map +1 -0
- package/dist/browser/modules/slashing/verify/verifyInvalidBlock.d.ts +18 -0
- package/dist/browser/modules/slashing/verify/verifyInvalidBlock.d.ts.map +1 -0
- package/dist/browser/modules/slashing/verify/verifyInvalidSlashRequest.d.ts +11 -0
- package/dist/browser/modules/slashing/verify/verifyInvalidSlashRequest.d.ts.map +1 -0
- package/dist/browser/modules/slashing/verify/verifyOffense.d.ts +29 -0
- package/dist/browser/modules/slashing/verify/verifyOffense.d.ts.map +1 -0
- package/dist/browser/modules/slashing/verify/verifyRewardOvermint.d.ts +23 -0
- package/dist/browser/modules/slashing/verify/verifyRewardOvermint.d.ts.map +1 -0
- package/dist/browser/modules/validation/elevatedPayload/lib/findElevatingTransaction.d.ts +14 -0
- package/dist/browser/modules/validation/elevatedPayload/lib/findElevatingTransaction.d.ts.map +1 -0
- package/dist/browser/modules/validation/elevatedPayload/lib/index.d.ts +2 -0
- package/dist/browser/modules/validation/elevatedPayload/lib/index.d.ts.map +1 -1
- package/dist/browser/modules/validation/elevatedPayload/lib/validateSlashPayloadInBlock.d.ts +33 -0
- package/dist/browser/modules/validation/elevatedPayload/lib/validateSlashPayloadInBlock.d.ts.map +1 -0
- package/dist/browser/modules/validation/elevatedPayload/payloads/index.d.ts +5 -0
- package/dist/browser/modules/validation/elevatedPayload/payloads/index.d.ts.map +1 -1
- package/dist/browser/modules/validation/elevatedPayload/payloads/validateSlashAdjudicationInBlock.d.ts +14 -0
- package/dist/browser/modules/validation/elevatedPayload/payloads/validateSlashAdjudicationInBlock.d.ts.map +1 -0
- package/dist/browser/modules/validation/elevatedPayload/payloads/validateSlashChallengeInBlock.d.ts +10 -0
- package/dist/browser/modules/validation/elevatedPayload/payloads/validateSlashChallengeInBlock.d.ts.map +1 -0
- package/dist/browser/modules/validation/elevatedPayload/payloads/validateSlashCommitInBlock.d.ts +10 -0
- package/dist/browser/modules/validation/elevatedPayload/payloads/validateSlashCommitInBlock.d.ts.map +1 -0
- package/dist/browser/modules/validation/elevatedPayload/payloads/validateSlashEvidenceInBlock.d.ts +10 -0
- package/dist/browser/modules/validation/elevatedPayload/payloads/validateSlashEvidenceInBlock.d.ts.map +1 -0
- package/dist/browser/modules/validation/elevatedPayload/payloads/validateSlashRequestInBlock.d.ts +14 -0
- package/dist/browser/modules/validation/elevatedPayload/payloads/validateSlashRequestInBlock.d.ts.map +1 -0
- package/dist/browser/modules/validation/elevatedPayload/validatePayloadInBlock.d.ts.map +1 -1
- package/dist/browser/slashing.d.ts +2 -0
- package/dist/browser/slashing.d.ts.map +1 -0
- package/dist/neutral/analyze.mjs +85 -3
- package/dist/neutral/analyze.mjs.map +3 -3
- package/dist/neutral/index.d.ts +1 -0
- package/dist/neutral/index.d.ts.map +1 -1
- package/dist/neutral/index.mjs +1 -0
- package/dist/neutral/index.mjs.map +2 -2
- package/dist/neutral/modules/analyze/ChainHeadSelector.d.ts +40 -0
- package/dist/neutral/modules/analyze/ChainHeadSelector.d.ts.map +1 -1
- package/dist/neutral/modules/analyze/admission.d.ts +65 -0
- package/dist/neutral/modules/analyze/admission.d.ts.map +1 -0
- package/dist/neutral/modules/analyze/index.d.ts +1 -0
- package/dist/neutral/modules/analyze/index.d.ts.map +1 -1
- package/dist/neutral/modules/protocol/block/BuildBlockOptions.d.ts +8 -0
- package/dist/neutral/modules/protocol/block/BuildBlockOptions.d.ts.map +1 -1
- package/dist/neutral/modules/protocol/block/buildBlock.d.ts.map +1 -1
- package/dist/neutral/modules/protocol/block/buildNextBlock.d.ts +2 -1
- package/dist/neutral/modules/protocol/block/buildNextBlock.d.ts.map +1 -1
- package/dist/neutral/modules/services/implementation/processPendingBlocks.d.ts +9 -1
- package/dist/neutral/modules/services/implementation/processPendingBlocks.d.ts.map +1 -1
- package/dist/neutral/modules/services/simple/block/runner/SimpleBlockRunner.d.ts +34 -1
- package/dist/neutral/modules/services/simple/block/runner/SimpleBlockRunner.d.ts.map +1 -1
- package/dist/neutral/modules/services/simple/block/runner/index.d.ts +1 -0
- package/dist/neutral/modules/services/simple/block/runner/index.d.ts.map +1 -1
- package/dist/neutral/modules/services/simple/block/runner/selectSupersededCandidate.d.ts +22 -0
- package/dist/neutral/modules/services/simple/block/runner/selectSupersededCandidate.d.ts.map +1 -0
- package/dist/neutral/modules/slashing/detect/DetectedOffense.d.ts +27 -0
- package/dist/neutral/modules/slashing/detect/DetectedOffense.d.ts.map +1 -0
- package/dist/neutral/modules/slashing/detect/candidatePairs.d.ts +44 -0
- package/dist/neutral/modules/slashing/detect/candidatePairs.d.ts.map +1 -0
- package/dist/neutral/modules/slashing/detect/index.d.ts +5 -0
- package/dist/neutral/modules/slashing/detect/index.d.ts.map +1 -0
- package/dist/neutral/modules/slashing/detect/offenseGate.d.ts +18 -0
- package/dist/neutral/modules/slashing/detect/offenseGate.d.ts.map +1 -0
- package/dist/neutral/modules/slashing/detect/suppression.d.ts +23 -0
- package/dist/neutral/modules/slashing/detect/suppression.d.ts.map +1 -0
- package/dist/neutral/modules/slashing/eligibility/evaluateProducerEligibility.d.ts +71 -0
- package/dist/neutral/modules/slashing/eligibility/evaluateProducerEligibility.d.ts.map +1 -0
- package/dist/neutral/modules/slashing/eligibility/index.d.ts +2 -0
- package/dist/neutral/modules/slashing/eligibility/index.d.ts.map +1 -0
- package/dist/neutral/modules/slashing/index/SlashIndexStore.d.ts +22 -0
- package/dist/neutral/modules/slashing/index/SlashIndexStore.d.ts.map +1 -0
- package/dist/neutral/modules/slashing/index/foldSlashIndex.d.ts +56 -0
- package/dist/neutral/modules/slashing/index/foldSlashIndex.d.ts.map +1 -0
- package/dist/neutral/modules/slashing/index/index.d.ts +3 -0
- package/dist/neutral/modules/slashing/index/index.d.ts.map +1 -0
- package/dist/neutral/modules/slashing/index.d.ts +6 -0
- package/dist/neutral/modules/slashing/index.d.ts.map +1 -0
- package/dist/neutral/modules/slashing/model/OffenseProcedure.d.ts +28 -0
- package/dist/neutral/modules/slashing/model/OffenseProcedure.d.ts.map +1 -0
- package/dist/neutral/modules/slashing/model/OffenseVerificationContext.d.ts +88 -0
- package/dist/neutral/modules/slashing/model/OffenseVerificationContext.d.ts.map +1 -0
- package/dist/neutral/modules/slashing/model/SlashHistoryReader.d.ts +34 -0
- package/dist/neutral/modules/slashing/model/SlashHistoryReader.d.ts.map +1 -0
- package/dist/neutral/modules/slashing/model/VerificationOutcome.d.ts +39 -0
- package/dist/neutral/modules/slashing/model/VerificationOutcome.d.ts.map +1 -0
- package/dist/neutral/modules/slashing/model/index.d.ts +6 -0
- package/dist/neutral/modules/slashing/model/index.d.ts.map +1 -0
- package/dist/neutral/modules/slashing/model/offenseKey.d.ts +42 -0
- package/dist/neutral/modules/slashing/model/offenseKey.d.ts.map +1 -0
- package/dist/neutral/modules/slashing/verify/index.d.ts +10 -0
- package/dist/neutral/modules/slashing/verify/index.d.ts.map +1 -0
- package/dist/neutral/modules/slashing/verify/preamble.d.ts +63 -0
- package/dist/neutral/modules/slashing/verify/preamble.d.ts.map +1 -0
- package/dist/neutral/modules/slashing/verify/verifyEquivocation.d.ts +19 -0
- package/dist/neutral/modules/slashing/verify/verifyEquivocation.d.ts.map +1 -0
- package/dist/neutral/modules/slashing/verify/verifyFalseAnchor.d.ts +15 -0
- package/dist/neutral/modules/slashing/verify/verifyFalseAnchor.d.ts.map +1 -0
- package/dist/neutral/modules/slashing/verify/verifyFalseAttestation.d.ts +22 -0
- package/dist/neutral/modules/slashing/verify/verifyFalseAttestation.d.ts.map +1 -0
- package/dist/neutral/modules/slashing/verify/verifyIneligibleProduction.d.ts +18 -0
- package/dist/neutral/modules/slashing/verify/verifyIneligibleProduction.d.ts.map +1 -0
- package/dist/neutral/modules/slashing/verify/verifyInvalidBlock.d.ts +18 -0
- package/dist/neutral/modules/slashing/verify/verifyInvalidBlock.d.ts.map +1 -0
- package/dist/neutral/modules/slashing/verify/verifyInvalidSlashRequest.d.ts +11 -0
- package/dist/neutral/modules/slashing/verify/verifyInvalidSlashRequest.d.ts.map +1 -0
- package/dist/neutral/modules/slashing/verify/verifyOffense.d.ts +29 -0
- package/dist/neutral/modules/slashing/verify/verifyOffense.d.ts.map +1 -0
- package/dist/neutral/modules/slashing/verify/verifyRewardOvermint.d.ts +23 -0
- package/dist/neutral/modules/slashing/verify/verifyRewardOvermint.d.ts.map +1 -0
- package/dist/neutral/modules/validation/elevatedPayload/lib/findElevatingTransaction.d.ts +14 -0
- package/dist/neutral/modules/validation/elevatedPayload/lib/findElevatingTransaction.d.ts.map +1 -0
- package/dist/neutral/modules/validation/elevatedPayload/lib/index.d.ts +2 -0
- package/dist/neutral/modules/validation/elevatedPayload/lib/index.d.ts.map +1 -1
- package/dist/neutral/modules/validation/elevatedPayload/lib/validateSlashPayloadInBlock.d.ts +33 -0
- package/dist/neutral/modules/validation/elevatedPayload/lib/validateSlashPayloadInBlock.d.ts.map +1 -0
- package/dist/neutral/modules/validation/elevatedPayload/payloads/index.d.ts +5 -0
- package/dist/neutral/modules/validation/elevatedPayload/payloads/index.d.ts.map +1 -1
- package/dist/neutral/modules/validation/elevatedPayload/payloads/validateSlashAdjudicationInBlock.d.ts +14 -0
- package/dist/neutral/modules/validation/elevatedPayload/payloads/validateSlashAdjudicationInBlock.d.ts.map +1 -0
- package/dist/neutral/modules/validation/elevatedPayload/payloads/validateSlashChallengeInBlock.d.ts +10 -0
- package/dist/neutral/modules/validation/elevatedPayload/payloads/validateSlashChallengeInBlock.d.ts.map +1 -0
- package/dist/neutral/modules/validation/elevatedPayload/payloads/validateSlashCommitInBlock.d.ts +10 -0
- package/dist/neutral/modules/validation/elevatedPayload/payloads/validateSlashCommitInBlock.d.ts.map +1 -0
- package/dist/neutral/modules/validation/elevatedPayload/payloads/validateSlashEvidenceInBlock.d.ts +10 -0
- package/dist/neutral/modules/validation/elevatedPayload/payloads/validateSlashEvidenceInBlock.d.ts.map +1 -0
- package/dist/neutral/modules/validation/elevatedPayload/payloads/validateSlashRequestInBlock.d.ts +14 -0
- package/dist/neutral/modules/validation/elevatedPayload/payloads/validateSlashRequestInBlock.d.ts.map +1 -0
- package/dist/neutral/modules/validation/elevatedPayload/validatePayloadInBlock.d.ts.map +1 -1
- package/dist/neutral/protocol.mjs +8 -3
- package/dist/neutral/protocol.mjs.map +2 -2
- package/dist/neutral/services.mjs +77 -7
- package/dist/neutral/services.mjs.map +4 -4
- package/dist/neutral/slashing.d.ts +2 -0
- package/dist/neutral/slashing.d.ts.map +1 -0
- package/dist/neutral/slashing.mjs +824 -0
- package/dist/neutral/slashing.mjs.map +7 -0
- package/dist/neutral/validation.mjs +274 -43
- package/dist/neutral/validation.mjs.map +4 -4
- package/dist/node/index.d.ts +1 -0
- package/dist/node/index.d.ts.map +1 -1
- package/dist/node/index.mjs +1 -0
- package/dist/node/index.mjs.map +2 -2
- package/dist/node/modules/analyze/ChainHeadSelector.d.ts +40 -0
- package/dist/node/modules/analyze/ChainHeadSelector.d.ts.map +1 -1
- package/dist/node/modules/analyze/admission.d.ts +65 -0
- package/dist/node/modules/analyze/admission.d.ts.map +1 -0
- package/dist/node/modules/analyze/index.d.ts +1 -0
- package/dist/node/modules/analyze/index.d.ts.map +1 -1
- package/dist/node/modules/protocol/block/BuildBlockOptions.d.ts +8 -0
- package/dist/node/modules/protocol/block/BuildBlockOptions.d.ts.map +1 -1
- package/dist/node/modules/protocol/block/buildBlock.d.ts.map +1 -1
- package/dist/node/modules/protocol/block/buildNextBlock.d.ts +2 -1
- package/dist/node/modules/protocol/block/buildNextBlock.d.ts.map +1 -1
- package/dist/node/modules/services/implementation/processPendingBlocks.d.ts +9 -1
- package/dist/node/modules/services/implementation/processPendingBlocks.d.ts.map +1 -1
- package/dist/node/modules/services/simple/block/runner/SimpleBlockRunner.d.ts +34 -1
- package/dist/node/modules/services/simple/block/runner/SimpleBlockRunner.d.ts.map +1 -1
- package/dist/node/modules/services/simple/block/runner/index.d.ts +1 -0
- package/dist/node/modules/services/simple/block/runner/index.d.ts.map +1 -1
- package/dist/node/modules/services/simple/block/runner/selectSupersededCandidate.d.ts +22 -0
- package/dist/node/modules/services/simple/block/runner/selectSupersededCandidate.d.ts.map +1 -0
- package/dist/node/modules/slashing/detect/DetectedOffense.d.ts +27 -0
- package/dist/node/modules/slashing/detect/DetectedOffense.d.ts.map +1 -0
- package/dist/node/modules/slashing/detect/candidatePairs.d.ts +44 -0
- package/dist/node/modules/slashing/detect/candidatePairs.d.ts.map +1 -0
- package/dist/node/modules/slashing/detect/index.d.ts +5 -0
- package/dist/node/modules/slashing/detect/index.d.ts.map +1 -0
- package/dist/node/modules/slashing/detect/offenseGate.d.ts +18 -0
- package/dist/node/modules/slashing/detect/offenseGate.d.ts.map +1 -0
- package/dist/node/modules/slashing/detect/suppression.d.ts +23 -0
- package/dist/node/modules/slashing/detect/suppression.d.ts.map +1 -0
- package/dist/node/modules/slashing/eligibility/evaluateProducerEligibility.d.ts +71 -0
- package/dist/node/modules/slashing/eligibility/evaluateProducerEligibility.d.ts.map +1 -0
- package/dist/node/modules/slashing/eligibility/index.d.ts +2 -0
- package/dist/node/modules/slashing/eligibility/index.d.ts.map +1 -0
- package/dist/node/modules/slashing/index/SlashIndexStore.d.ts +22 -0
- package/dist/node/modules/slashing/index/SlashIndexStore.d.ts.map +1 -0
- package/dist/node/modules/slashing/index/foldSlashIndex.d.ts +56 -0
- package/dist/node/modules/slashing/index/foldSlashIndex.d.ts.map +1 -0
- package/dist/node/modules/slashing/index/index.d.ts +3 -0
- package/dist/node/modules/slashing/index/index.d.ts.map +1 -0
- package/dist/node/modules/slashing/index.d.ts +6 -0
- package/dist/node/modules/slashing/index.d.ts.map +1 -0
- package/dist/node/modules/slashing/model/OffenseProcedure.d.ts +28 -0
- package/dist/node/modules/slashing/model/OffenseProcedure.d.ts.map +1 -0
- package/dist/node/modules/slashing/model/OffenseVerificationContext.d.ts +88 -0
- package/dist/node/modules/slashing/model/OffenseVerificationContext.d.ts.map +1 -0
- package/dist/node/modules/slashing/model/SlashHistoryReader.d.ts +34 -0
- package/dist/node/modules/slashing/model/SlashHistoryReader.d.ts.map +1 -0
- package/dist/node/modules/slashing/model/VerificationOutcome.d.ts +39 -0
- package/dist/node/modules/slashing/model/VerificationOutcome.d.ts.map +1 -0
- package/dist/node/modules/slashing/model/index.d.ts +6 -0
- package/dist/node/modules/slashing/model/index.d.ts.map +1 -0
- package/dist/node/modules/slashing/model/offenseKey.d.ts +42 -0
- package/dist/node/modules/slashing/model/offenseKey.d.ts.map +1 -0
- package/dist/node/modules/slashing/verify/index.d.ts +10 -0
- package/dist/node/modules/slashing/verify/index.d.ts.map +1 -0
- package/dist/node/modules/slashing/verify/preamble.d.ts +63 -0
- package/dist/node/modules/slashing/verify/preamble.d.ts.map +1 -0
- package/dist/node/modules/slashing/verify/verifyEquivocation.d.ts +19 -0
- package/dist/node/modules/slashing/verify/verifyEquivocation.d.ts.map +1 -0
- package/dist/node/modules/slashing/verify/verifyFalseAnchor.d.ts +15 -0
- package/dist/node/modules/slashing/verify/verifyFalseAnchor.d.ts.map +1 -0
- package/dist/node/modules/slashing/verify/verifyFalseAttestation.d.ts +22 -0
- package/dist/node/modules/slashing/verify/verifyFalseAttestation.d.ts.map +1 -0
- package/dist/node/modules/slashing/verify/verifyIneligibleProduction.d.ts +18 -0
- package/dist/node/modules/slashing/verify/verifyIneligibleProduction.d.ts.map +1 -0
- package/dist/node/modules/slashing/verify/verifyInvalidBlock.d.ts +18 -0
- package/dist/node/modules/slashing/verify/verifyInvalidBlock.d.ts.map +1 -0
- package/dist/node/modules/slashing/verify/verifyInvalidSlashRequest.d.ts +11 -0
- package/dist/node/modules/slashing/verify/verifyInvalidSlashRequest.d.ts.map +1 -0
- package/dist/node/modules/slashing/verify/verifyOffense.d.ts +29 -0
- package/dist/node/modules/slashing/verify/verifyOffense.d.ts.map +1 -0
- package/dist/node/modules/slashing/verify/verifyRewardOvermint.d.ts +23 -0
- package/dist/node/modules/slashing/verify/verifyRewardOvermint.d.ts.map +1 -0
- package/dist/node/modules/validation/elevatedPayload/lib/findElevatingTransaction.d.ts +14 -0
- package/dist/node/modules/validation/elevatedPayload/lib/findElevatingTransaction.d.ts.map +1 -0
- package/dist/node/modules/validation/elevatedPayload/lib/index.d.ts +2 -0
- package/dist/node/modules/validation/elevatedPayload/lib/index.d.ts.map +1 -1
- package/dist/node/modules/validation/elevatedPayload/lib/validateSlashPayloadInBlock.d.ts +33 -0
- package/dist/node/modules/validation/elevatedPayload/lib/validateSlashPayloadInBlock.d.ts.map +1 -0
- package/dist/node/modules/validation/elevatedPayload/payloads/index.d.ts +5 -0
- package/dist/node/modules/validation/elevatedPayload/payloads/index.d.ts.map +1 -1
- package/dist/node/modules/validation/elevatedPayload/payloads/validateSlashAdjudicationInBlock.d.ts +14 -0
- package/dist/node/modules/validation/elevatedPayload/payloads/validateSlashAdjudicationInBlock.d.ts.map +1 -0
- package/dist/node/modules/validation/elevatedPayload/payloads/validateSlashChallengeInBlock.d.ts +10 -0
- package/dist/node/modules/validation/elevatedPayload/payloads/validateSlashChallengeInBlock.d.ts.map +1 -0
- package/dist/node/modules/validation/elevatedPayload/payloads/validateSlashCommitInBlock.d.ts +10 -0
- package/dist/node/modules/validation/elevatedPayload/payloads/validateSlashCommitInBlock.d.ts.map +1 -0
- package/dist/node/modules/validation/elevatedPayload/payloads/validateSlashEvidenceInBlock.d.ts +10 -0
- package/dist/node/modules/validation/elevatedPayload/payloads/validateSlashEvidenceInBlock.d.ts.map +1 -0
- package/dist/node/modules/validation/elevatedPayload/payloads/validateSlashRequestInBlock.d.ts +14 -0
- package/dist/node/modules/validation/elevatedPayload/payloads/validateSlashRequestInBlock.d.ts.map +1 -0
- package/dist/node/modules/validation/elevatedPayload/validatePayloadInBlock.d.ts.map +1 -1
- package/dist/node/slashing.d.ts +2 -0
- package/dist/node/slashing.d.ts.map +1 -0
- package/package.json +16 -10
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../../src/modules/protocol/block/buildBlock.ts", "../../src/modules/protocol/block/BuildBlockOptions.ts", "../../src/modules/protocol/block/buildGenesisBlock.ts", "../../src/modules/protocol/block/buildNextBlock.ts", "../../src/modules/protocol/block/createGenesisBlock.ts", "../../src/modules/protocol/block/createProducerChainStakeIntentTransaction.ts", "../../src/modules/protocol/block/sort.ts", "../../src/modules/protocol/frameList.ts"],
|
|
4
|
-
"sourcesContent": ["import type { Hex } from '@ariestools/sdk'\nimport { assertEx, isDefined } from '@ariestools/sdk'\nimport type { AnyPayload, WithStorageMeta } from '@xyo-network/sdk'\nimport {\n asAnyPayload, BoundWitnessBuilder, PayloadBuilder,\n} from '@xyo-network/sdk'\nimport type {\n BlockBoundWitness, SignedHydratedBlockWithHashMeta, Transfer,\n} from '@xyo-network/xl1-sdk'\nimport {\n asXL1BlockNumber,\n AttoXL1,\n createTransferPayload,\n isBlockBoundWitness,\n rewardAddressFromStepIdentity,\n StepRewardFractions, StepSizes,\n validateTransactionsOpcodes,\n XL1_PROTOCOL_VERSION, XYO_STEP_REWARD_ADDRESS, XYO_ZERO_ADDRESS,\n} from '@xyo-network/xl1-sdk'\n\nimport {\n type BuildBlockOptions, isBuildGenesisBlockOptions, isBuildNextBlockOptions,\n} from './BuildBlockOptions.ts'\n\n/*\n//this is for testing only to speed up the pace\nexport const StepRewardFractions = [\n [0n, 1n], // 0%\n [1n, 10_000n], // 0.01%\n [2n, 1000n], // 0.2%\n [3n, 100n], // 3%\n [45n, 100n], // 45%\n] as const\n */\n\nfunction calculateCompletedStepReward(step: number, balance: AttoXL1): AttoXL1 {\n return AttoXL1(StepRewardFractions[step][0] * balance / StepRewardFractions[step][1])\n}\n\nexport async function buildBlock(options: BuildBlockOptions): Promise<SignedHydratedBlockWithHashMeta> {\n const previousBlockNumber = isBuildGenesisBlockOptions(options) ? -1 : options.previousBlockNumber\n const blockNumber = asXL1BlockNumber(previousBlockNumber + 1, true)\n const inStepHashes = isBuildNextBlockOptions(options) ? options.previousStepHashes : []\n const previousBlockHash = isBuildNextBlockOptions(options) ? options.previousBlockHash : undefined\n const stepRewardPoolBalance = isBuildNextBlockOptions(options) ? options.stepRewardPoolBalance : AttoXL1(0n)\n const {\n chainId, txs,\n chainStepRewardAddress = XYO_STEP_REWARD_ADDRESS,\n blockPayloads, protocol = XL1_PROTOCOL_VERSION, signers,\n } = options\n const step_hashes: Hex[] = []\n\n for (const [tx] of txs) {\n if (tx.nbf > blockNumber) {\n throw new Error(`Transaction ${await PayloadBuilder.hash(tx)} not valid for block ${blockNumber} - NBF is ${tx.nbf}`)\n }\n if (tx.exp < blockNumber) {\n throw new Error(`Transaction ${await PayloadBuilder.hash(tx)} not valid for block ${blockNumber} - EXP is ${tx.exp}`)\n }\n }\n\n const completedStepRewardTransfers: Transfer[] = []\n\n // update the step hashes\n for (const [i, step] of StepSizes.entries()) {\n if (blockNumber < step) {\n break\n }\n if (blockNumber % step === 0) {\n if (StepRewardFractions[i][0] > 0 && chainStepRewardAddress !== XYO_ZERO_ADDRESS) {\n const completedStepRewardHolderAddress = rewardAddressFromStepIdentity({ block: blockNumber, step })\n const completedStepReward = calculateCompletedStepReward(i, stepRewardPoolBalance)\n completedStepRewardTransfers.push(createTransferPayload(chainStepRewardAddress, { [completedStepRewardHolderAddress]: completedStepReward }))\n }\n step_hashes.push(assertEx(previousBlockHash, () => `Previous block hash is required for step ${step} at block ${blockNumber}`))\n } else {\n if (isDefined(inStepHashes.at(i))) {\n step_hashes.push(inStepHashes[i])\n }\n }\n }\n\n const previous = previousBlockHash ?? null\n const block = blockNumber\n const txElevatedPayloads = await validateTransactionsOpcodes(txs)\n\n const payloads = [\n ...txs.map(([tx]) => tx),\n ...blockPayloads,\n ...txElevatedPayloads,\n ...completedStepRewardTransfers,\n ].map(p => asAnyPayload(p, true))\n\n const boundWitnessBuilder = new BoundWitnessBuilder<BlockBoundWitness, WithStorageMeta<AnyPayload>>()\n const [bw, txPayloads] = await boundWitnessBuilder\n .fields({\n block, chain: chainId, previous, step_hashes, protocol,\n })\n .meta({ $epoch: Date.now(), $signatures: [] })\n .signers(signers)\n .payloads(await PayloadBuilder.addStorageMeta(payloads))\n .build()\n assertEx(isBlockBoundWitness(bw), () => 'Build of BlockBoundWitness failed')\n return [await PayloadBuilder.addStorageMeta(bw), txPayloads]\n}\n", "import type { Address, Hash } from '@ariestools/sdk'\nimport {\n isAddress, isArray, isHash,\n isNumber, isObject,\n} from '@ariestools/sdk'\nimport type { AccountInstance } from '@xyo-network/sdk'\nimport type {\n AllowedBlockPayload, AttoXL1, ChainId, SignedHydratedTransaction,\n XL1BlockNumber,\n} from '@xyo-network/xl1-sdk'\n\nexport interface BaseBuildBlockOptions {\n blockPayloads: AllowedBlockPayload[]\n chainId: ChainId\n chainStepRewardAddress?: Address\n previousBlockNumber?: XL1BlockNumber\n protocol?: number\n signers: AccountInstance[]\n txs: SignedHydratedTransaction[]\n}\n\nexport const isBaseBuildBlockOptions = (value: unknown): value is BaseBuildBlockOptions => {\n if (!isObject(value)) {\n return false\n }\n const typedValue = value as BaseBuildBlockOptions\n if (!isArray(typedValue.blockPayloads) || !isAddress(typedValue.chainId) || !isArray(typedValue.signers) || !isArray(typedValue.txs)) {\n return false\n }\n return true\n}\n\nexport interface BuildGenesisBlockOptions extends BaseBuildBlockOptions {\n previousBlockHash: null\n}\n\nexport const isBuildGenesisBlockOptions = (value: unknown): value is BuildGenesisBlockOptions => {\n if (!isBaseBuildBlockOptions(value)) {\n return false\n }\n const typedValue = value as BuildGenesisBlockOptions\n if (typedValue.previousBlockHash !== null) {\n return false\n }\n if (typedValue.previousBlockNumber !== undefined) {\n return false\n }\n return true\n}\n\nexport interface BuildNextBlockOptions extends BaseBuildBlockOptions {\n previousBlockHash: Hash\n previousBlockNumber: XL1BlockNumber\n previousStepHashes: Hash[]\n stepRewardPoolBalance: AttoXL1\n}\n\nexport const isBuildNextBlockOptions = (value: unknown): value is BuildNextBlockOptions => {\n if (!isBaseBuildBlockOptions(value)) {\n return false\n }\n const typedValue = value as BuildNextBlockOptions\n if (!isHash(typedValue.previousBlockHash)) {\n return false\n }\n if (!isNumber(typedValue.previousBlockNumber)) {\n return false\n }\n if (!isArray(typedValue.previousStepHashes)) {\n return false\n }\n return true\n}\n\nexport type BuildBlockOptions = BuildGenesisBlockOptions | BuildNextBlockOptions\n", "import type { AccountInstance } from '@xyo-network/sdk'\nimport type {\n AllowedBlockPayload, ChainId,\n SignedHydratedBlockWithHashMeta,\n SignedHydratedTransactionWithHashMeta,\n} from '@xyo-network/xl1-sdk'\nimport { XYO_ZERO_ADDRESS } from '@xyo-network/xl1-sdk'\n\nimport { buildBlock } from './buildBlock.ts'\n\nexport async function buildGenesisBlock(\n chainId: ChainId,\n txs: SignedHydratedTransactionWithHashMeta[],\n blockPayloads: AllowedBlockPayload[],\n signers: AccountInstance[],\n chainStepRewardAddress = XYO_ZERO_ADDRESS,\n protocol?: number,\n): Promise<SignedHydratedBlockWithHashMeta> {\n return await buildBlock({\n previousBlockHash: null,\n chainId,\n txs,\n blockPayloads,\n signers,\n chainStepRewardAddress,\n protocol,\n })\n}\n", "import type { AccountInstance, WithHashMeta } from '@xyo-network/sdk'\nimport type {\n AllowedBlockPayload, BlockBoundWitness,\n ChainId,\n SignedHydratedBlockWithHashMeta,\n SignedHydratedTransaction,\n} from '@xyo-network/xl1-sdk'\nimport {\n AttoXL1,\n XYO_STEP_REWARD_ADDRESS,\n} from '@xyo-network/xl1-sdk'\n\nimport { buildBlock } from './buildBlock.ts'\n\nexport async function buildNextBlock(\n previousBlock: WithHashMeta<BlockBoundWitness>,\n txs: SignedHydratedTransaction[],\n blockPayloads: AllowedBlockPayload[],\n signers: AccountInstance[],\n chainStepRewardAddress = XYO_STEP_REWARD_ADDRESS,\n stepRewardPoolBalance: AttoXL1 = AttoXL1(0n),\n protocol?: number,\n chainId?: ChainId,\n): Promise<SignedHydratedBlockWithHashMeta> {\n return await buildBlock({\n chainId: chainId ?? previousBlock.chain,\n previousBlockNumber: previousBlock.block,\n previousStepHashes: previousBlock.step_hashes ?? [],\n previousBlockHash: previousBlock._hash,\n txs,\n blockPayloads,\n signers,\n protocol,\n chainStepRewardAddress,\n stepRewardPoolBalance,\n })\n}\n", "import type { Address } from '@ariestools/sdk'\nimport { toAddress } from '@ariestools/sdk'\nimport type {\n AccountInstance, WithHashMeta, XyoAddress,\n} from '@xyo-network/sdk'\nimport { PayloadBuilder } from '@xyo-network/sdk'\nimport type {\n AllowedBlockPayload, ChainId,\n SignedHydratedBlockWithHashMeta,\n} from '@xyo-network/xl1-sdk'\nimport {\n BlockBoundWitnessSchemaPayload, BlockBoundWitnessWithStorageMetaSchemaPayload,\n ChainStakeIntentPayloadJsonSchemaPayload,\n createTransferPayload,\n HashPayloadJsonSchemaPayload,\n TransactionBoundWitnessSchemaPayload, TransactionBoundWitnessWithStorageMetaSchemaPayload, TransferPayloadJsonSchemaPayload,\n} from '@xyo-network/xl1-sdk'\n\nimport { buildGenesisBlock } from './buildGenesisBlock.ts'\nimport { createProducerChainStakeIntent } from './createProducerChainStakeIntentTransaction.ts'\n\nexport const createGenesisBlock = async (\n initialBlockProducer: AccountInstance,\n nextContractAddress: ChainId,\n genesisBlockRewardAmount: bigint,\n genesisBlockRewardAddress: XyoAddress,\n): Promise<SignedHydratedBlockWithHashMeta> => {\n const blockPayloads: WithHashMeta<AllowedBlockPayload>[] = await PayloadBuilder.addHashMeta([\n TransferPayloadJsonSchemaPayload,\n BlockBoundWitnessSchemaPayload,\n BlockBoundWitnessWithStorageMetaSchemaPayload,\n TransactionBoundWitnessSchemaPayload,\n TransactionBoundWitnessWithStorageMetaSchemaPayload,\n ChainStakeIntentPayloadJsonSchemaPayload,\n HashPayloadJsonSchemaPayload,\n ])\n const intentPayload = await createProducerChainStakeIntent(toAddress(initialBlockProducer.address), 1, 0)\n blockPayloads.push(intentPayload)\n if (genesisBlockRewardAmount > 0n) {\n blockPayloads.push(await PayloadBuilder.addHashMeta(createTransferPayload(\n nextContractAddress as Address,\n { [genesisBlockRewardAddress]: genesisBlockRewardAmount },\n )))\n }\n return await buildGenesisBlock(nextContractAddress, [], blockPayloads, [initialBlockProducer])\n}\n", "import type { Address } from '@ariestools/sdk'\nimport { toAddress } from '@ariestools/sdk'\nimport type { AccountInstance } from '@xyo-network/sdk'\nimport { PayloadBuilder } from '@xyo-network/sdk'\nimport type {\n ChainId,\n ChainStakeIntent,\n HydratedTransactionWithHashMeta,\n XL1BlockNumber,\n} from '@xyo-network/xl1-sdk'\nimport {\n asXL1BlockNumber, buildTransaction,\n ChainStakeIntentSchema, defaultTransactionFees,\n} from '@xyo-network/xl1-sdk'\n\nexport async function createProducerChainStakeIntent(from: Address, exp: number, nbf = 0) {\n const builder = new PayloadBuilder<ChainStakeIntent>({ schema: ChainStakeIntentSchema })\n return await PayloadBuilder.addHashMeta(builder.fields({\n from,\n exp,\n nbf,\n intent: 'producer',\n }).build())\n}\n\nexport async function createProducerChainStakeIntentTransaction(\n chain: ChainId,\n signers: AccountInstance[] = [],\n producer: Address,\n exp: XL1BlockNumber,\n nbf = asXL1BlockNumber(0, true),\n fees = defaultTransactionFees,\n): Promise<HydratedTransactionWithHashMeta> {\n // Create staked intents for all the block producers declaring their intent to produce blocks\n const intent = await createProducerChainStakeIntent(producer, exp, nbf)\n const tx = await buildTransaction(\n chain,\n [intent],\n [],\n signers,\n nbf,\n exp,\n toAddress(signers[0].address),\n fees,\n )\n return tx\n}\n", "import type { BlockBoundWitness } from '@xyo-network/xl1-sdk'\n\nexport type BlockBoundWitnessComparator = (a: BlockBoundWitness, b: BlockBoundWitness) => number\n\nexport const sortBlocksAscending: BlockBoundWitnessComparator = (a, b) => {\n const compared = a.block - b.block\n return compared > 0 ? 1 : compared < 0 ? -1 : 0\n}\n\nexport const sortBlocksDescending: BlockBoundWitnessComparator = (first, second) => sortBlocksAscending(second, first)\n\nexport const sortBlocks = (\n blocks: BlockBoundWitness[],\n compareFn: BlockBoundWitnessComparator = sortBlocksAscending,\n): BlockBoundWitness[] => blocks.toSorted(compareFn)\n\nexport const toSortedBlocks = (\n blocks: BlockBoundWitness[],\n compareFn: BlockBoundWitnessComparator = sortBlocksAscending,\n): BlockBoundWitness[] => sortBlocks([...blocks], compareFn)\n", "import type { Hash } from '@ariestools/sdk'\nimport type { ReadArchivist } from '@xyo-network/sdk'\nimport {\n asBlockBoundWitnessWithStorageMeta, type BlockBoundWitness, StepSizes,\n} from '@xyo-network/xl1-sdk'\n\n// This function is not yet complete and definitely not tested, so do not use!\n\nfunction shouldStopAtBreak(blockToCheck: BlockBoundWitness, breaks: (Hash | null)[], breakIndex: number): boolean {\n const breakHash = breaks[breakIndex]\n if (breakHash === null) return false\n return blockToCheck.step_hashes?.at(breakIndex) === breakHash\n}\n\nfunction hasBreakForBlock(blockToCheck: BlockBoundWitness, breaks: (Hash | null)[]): boolean {\n for (const [i] of breaks.entries()) {\n if (shouldStopAtBreak(blockToCheck, breaks, i)) {\n return true\n }\n }\n return false\n}\n\nasync function collectStepHashes(\n block: BlockBoundWitness,\n stepIndex: number,\n archivist: ReadArchivist,\n breaks: (Hash | null)[],\n): Promise<Hash[]> {\n const stepHashes: Hash[] = []\n let blockToCheck: BlockBoundWitness | undefined = block\n while (blockToCheck) {\n const stepHash: Hash | undefined = blockToCheck.step_hashes?.at(stepIndex)\n if (stepHash === undefined) {\n break\n }\n if (hasBreakForBlock(blockToCheck, breaks)) {\n break\n }\n stepHashes.push(stepHash)\n const archivistResult = await archivist.get([stepHash])\n blockToCheck = asBlockBoundWitnessWithStorageMeta(archivistResult.at(0))\n }\n return stepHashes\n}\n\n// goal is to return an array of arrays of all the step hashes that we should get to have the full history of the block\n// it will leave a gap from the end of the frame list to the head (unless the head just rolled a frame) and gaps between some frames\nexport async function frameList(block: BlockBoundWitness, archivist: ReadArchivist): Promise<Hash[][]> {\n const result: Hash[][] = []\n const stepSizes = [...StepSizes]\n // when to stop for smaller steps, i.e. a large step already has the block\n const breaks: (Hash | null)[] = Array.from({ length: StepSizes.length }, () => null)\n while (stepSizes.length > 0) {\n stepSizes.pop()\n const stepIndex = stepSizes.length\n const stepHashes = await collectStepHashes(block, stepIndex, archivist, breaks)\n result.unshift(stepHashes)\n }\n return result\n}\n"],
|
|
5
|
-
"mappings": ";AACA,SAAS,UAAU,iBAAiB;AAEpC;AAAA,EACE;AAAA,EAAc;AAAA,EAAqB;AAAA,OAC9B;AAIP;AAAA,EACE;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EAAqB;AAAA,EACrB;AAAA,EACA;AAAA,EAAsB;AAAA,EAAyB;AAAA,OAC1C;;;ACjBP;AAAA,EACE;AAAA,EAAW;AAAA,EAAS;AAAA,EACpB;AAAA,EAAU;AAAA,OACL;AAiBA,IAAM,0BAA0B,CAAC,UAAmD;AACzF,MAAI,CAAC,SAAS,KAAK,GAAG;AACpB,WAAO;AAAA,EACT;AACA,QAAM,aAAa;AACnB,MAAI,CAAC,QAAQ,WAAW,aAAa,KAAK,CAAC,UAAU,WAAW,OAAO,KAAK,CAAC,QAAQ,WAAW,OAAO,KAAK,CAAC,QAAQ,WAAW,GAAG,GAAG;AACpI,WAAO;AAAA,EACT;AACA,SAAO;AACT;AAMO,IAAM,6BAA6B,CAAC,UAAsD;AAC/F,MAAI,CAAC,wBAAwB,KAAK,GAAG;AACnC,WAAO;AAAA,EACT;AACA,QAAM,aAAa;AACnB,MAAI,WAAW,sBAAsB,MAAM;AACzC,WAAO;AAAA,EACT;AACA,MAAI,WAAW,wBAAwB,QAAW;AAChD,WAAO;AAAA,EACT;AACA,SAAO;AACT;
|
|
4
|
+
"sourcesContent": ["import type { Hash, Hex } from '@ariestools/sdk'\nimport { assertEx, isDefined } from '@ariestools/sdk'\nimport type { AnyPayload, WithStorageMeta } from '@xyo-network/sdk'\nimport {\n asAnyPayload, BoundWitnessBuilder, PayloadBuilder,\n} from '@xyo-network/sdk'\nimport type {\n BlockBoundWitness, SignedHydratedBlockWithHashMeta, Transfer,\n} from '@xyo-network/xl1-sdk'\nimport {\n asXL1BlockNumber,\n AttoXL1,\n createTransferPayload,\n isBlockBoundWitness,\n rewardAddressFromStepIdentity,\n StepRewardFractions, StepSizes,\n validateTransactionsOpcodes,\n XL1_PROTOCOL_VERSION, XYO_STEP_REWARD_ADDRESS, XYO_ZERO_ADDRESS,\n} from '@xyo-network/xl1-sdk'\n\nimport {\n type BuildBlockOptions, isBuildGenesisBlockOptions, isBuildNextBlockOptions,\n} from './BuildBlockOptions.ts'\n\n/*\n//this is for testing only to speed up the pace\nexport const StepRewardFractions = [\n [0n, 1n], // 0%\n [1n, 10_000n], // 0.01%\n [2n, 1000n], // 0.2%\n [3n, 100n], // 3%\n [45n, 100n], // 45%\n] as const\n */\n\nfunction calculateCompletedStepReward(step: number, balance: AttoXL1): AttoXL1 {\n return AttoXL1(StepRewardFractions[step][0] * balance / StepRewardFractions[step][1])\n}\n\n/**\n * The supersedes entry for the signed fields, empty when nothing is superseded.\n *\n * Spread rather than assigned, because an absent supersedes has to stay absent from the signed\n * fields \u2014 a key present with an undefined value would change the hash of every block ever built.\n */\nfunction supersedesField(options: BuildBlockOptions): { supersedes?: Hash } {\n return isBuildNextBlockOptions(options) && options.supersedes !== undefined\n ? { supersedes: options.supersedes }\n : {}\n}\n\nexport async function buildBlock(options: BuildBlockOptions): Promise<SignedHydratedBlockWithHashMeta> {\n const previousBlockNumber = isBuildGenesisBlockOptions(options) ? -1 : options.previousBlockNumber\n const blockNumber = asXL1BlockNumber(previousBlockNumber + 1, true)\n const inStepHashes = isBuildNextBlockOptions(options) ? options.previousStepHashes : []\n const previousBlockHash = isBuildNextBlockOptions(options) ? options.previousBlockHash : undefined\n const stepRewardPoolBalance = isBuildNextBlockOptions(options) ? options.stepRewardPoolBalance : AttoXL1(0n)\n const {\n chainId, txs,\n chainStepRewardAddress = XYO_STEP_REWARD_ADDRESS,\n blockPayloads, protocol = XL1_PROTOCOL_VERSION, signers,\n } = options\n const step_hashes: Hex[] = []\n\n for (const [tx] of txs) {\n if (tx.nbf > blockNumber) {\n throw new Error(`Transaction ${await PayloadBuilder.hash(tx)} not valid for block ${blockNumber} - NBF is ${tx.nbf}`)\n }\n if (tx.exp < blockNumber) {\n throw new Error(`Transaction ${await PayloadBuilder.hash(tx)} not valid for block ${blockNumber} - EXP is ${tx.exp}`)\n }\n }\n\n const completedStepRewardTransfers: Transfer[] = []\n\n // update the step hashes\n for (const [i, step] of StepSizes.entries()) {\n if (blockNumber < step) {\n break\n }\n if (blockNumber % step === 0) {\n if (StepRewardFractions[i][0] > 0 && chainStepRewardAddress !== XYO_ZERO_ADDRESS) {\n const completedStepRewardHolderAddress = rewardAddressFromStepIdentity({ block: blockNumber, step })\n const completedStepReward = calculateCompletedStepReward(i, stepRewardPoolBalance)\n completedStepRewardTransfers.push(createTransferPayload(chainStepRewardAddress, { [completedStepRewardHolderAddress]: completedStepReward }))\n }\n step_hashes.push(assertEx(previousBlockHash, () => `Previous block hash is required for step ${step} at block ${blockNumber}`))\n } else {\n if (isDefined(inStepHashes.at(i))) {\n step_hashes.push(inStepHashes[i])\n }\n }\n }\n\n const previous = previousBlockHash ?? null\n const block = blockNumber\n const txElevatedPayloads = await validateTransactionsOpcodes(txs)\n\n const payloads = [\n ...txs.map(([tx]) => tx),\n ...blockPayloads,\n ...txElevatedPayloads,\n ...completedStepRewardTransfers,\n ].map(p => asAnyPayload(p, true))\n\n const boundWitnessBuilder = new BoundWitnessBuilder<BlockBoundWitness, WithStorageMeta<AnyPayload>>()\n const [bw, txPayloads] = await boundWitnessBuilder\n .fields({\n block,\n chain: chainId,\n previous,\n step_hashes,\n protocol,\n ...supersedesField(options),\n })\n .meta({ $epoch: Date.now(), $signatures: [] })\n .signers(signers)\n .payloads(await PayloadBuilder.addStorageMeta(payloads))\n .build()\n assertEx(isBlockBoundWitness(bw), () => 'Build of BlockBoundWitness failed')\n return [await PayloadBuilder.addStorageMeta(bw), txPayloads]\n}\n", "import type { Address, Hash } from '@ariestools/sdk'\nimport {\n isAddress, isArray, isHash,\n isNumber, isObject,\n} from '@ariestools/sdk'\nimport type { AccountInstance } from '@xyo-network/sdk'\nimport type {\n AllowedBlockPayload, AttoXL1, ChainId, SignedHydratedTransaction,\n XL1BlockNumber,\n} from '@xyo-network/xl1-sdk'\n\nexport interface BaseBuildBlockOptions {\n blockPayloads: AllowedBlockPayload[]\n chainId: ChainId\n chainStepRewardAddress?: Address\n previousBlockNumber?: XL1BlockNumber\n protocol?: number\n signers: AccountInstance[]\n txs: SignedHydratedTransaction[]\n}\n\nexport const isBaseBuildBlockOptions = (value: unknown): value is BaseBuildBlockOptions => {\n if (!isObject(value)) {\n return false\n }\n const typedValue = value as BaseBuildBlockOptions\n if (!isArray(typedValue.blockPayloads) || !isAddress(typedValue.chainId) || !isArray(typedValue.signers) || !isArray(typedValue.txs)) {\n return false\n }\n return true\n}\n\nexport interface BuildGenesisBlockOptions extends BaseBuildBlockOptions {\n previousBlockHash: null\n}\n\nexport const isBuildGenesisBlockOptions = (value: unknown): value is BuildGenesisBlockOptions => {\n if (!isBaseBuildBlockOptions(value)) {\n return false\n }\n const typedValue = value as BuildGenesisBlockOptions\n if (typedValue.previousBlockHash !== null) {\n return false\n }\n if (typedValue.previousBlockNumber !== undefined) {\n return false\n }\n return true\n}\n\nexport interface BuildNextBlockOptions extends BaseBuildBlockOptions {\n previousBlockHash: Hash\n previousBlockNumber: XL1BlockNumber\n previousStepHashes: Hash[]\n stepRewardPoolBalance: AttoXL1\n /**\n * Hash of this producer's own earlier candidate at the same height and parent, when re-proposing.\n *\n * Signed, so it cannot be added or dropped after the fact. Its whole job is to make honest\n * re-proposal distinguishable from equivocation: two differing candidates at one height are\n * indistinguishable from outside unless the later one says which one it replaces.\n */\n supersedes?: Hash\n}\n\nexport const isBuildNextBlockOptions = (value: unknown): value is BuildNextBlockOptions => {\n if (!isBaseBuildBlockOptions(value)) {\n return false\n }\n const typedValue = value as BuildNextBlockOptions\n if (!isHash(typedValue.previousBlockHash)) {\n return false\n }\n if (!isNumber(typedValue.previousBlockNumber)) {\n return false\n }\n if (!isArray(typedValue.previousStepHashes)) {\n return false\n }\n return true\n}\n\nexport type BuildBlockOptions = BuildGenesisBlockOptions | BuildNextBlockOptions\n", "import type { AccountInstance } from '@xyo-network/sdk'\nimport type {\n AllowedBlockPayload, ChainId,\n SignedHydratedBlockWithHashMeta,\n SignedHydratedTransactionWithHashMeta,\n} from '@xyo-network/xl1-sdk'\nimport { XYO_ZERO_ADDRESS } from '@xyo-network/xl1-sdk'\n\nimport { buildBlock } from './buildBlock.ts'\n\nexport async function buildGenesisBlock(\n chainId: ChainId,\n txs: SignedHydratedTransactionWithHashMeta[],\n blockPayloads: AllowedBlockPayload[],\n signers: AccountInstance[],\n chainStepRewardAddress = XYO_ZERO_ADDRESS,\n protocol?: number,\n): Promise<SignedHydratedBlockWithHashMeta> {\n return await buildBlock({\n previousBlockHash: null,\n chainId,\n txs,\n blockPayloads,\n signers,\n chainStepRewardAddress,\n protocol,\n })\n}\n", "import type { Hash } from '@ariestools/sdk'\nimport type { AccountInstance, WithHashMeta } from '@xyo-network/sdk'\nimport type {\n AllowedBlockPayload, BlockBoundWitness,\n ChainId,\n SignedHydratedBlockWithHashMeta,\n SignedHydratedTransaction,\n} from '@xyo-network/xl1-sdk'\nimport {\n AttoXL1,\n XYO_STEP_REWARD_ADDRESS,\n} from '@xyo-network/xl1-sdk'\n\nimport { buildBlock } from './buildBlock.ts'\n\nexport async function buildNextBlock(\n previousBlock: WithHashMeta<BlockBoundWitness>,\n txs: SignedHydratedTransaction[],\n blockPayloads: AllowedBlockPayload[],\n signers: AccountInstance[],\n chainStepRewardAddress = XYO_STEP_REWARD_ADDRESS,\n stepRewardPoolBalance: AttoXL1 = AttoXL1(0n),\n protocol?: number,\n chainId?: ChainId,\n supersedes?: Hash,\n): Promise<SignedHydratedBlockWithHashMeta> {\n return await buildBlock({\n chainId: chainId ?? previousBlock.chain,\n previousBlockNumber: previousBlock.block,\n previousStepHashes: previousBlock.step_hashes ?? [],\n previousBlockHash: previousBlock._hash,\n txs,\n blockPayloads,\n signers,\n protocol,\n chainStepRewardAddress,\n stepRewardPoolBalance,\n supersedes,\n })\n}\n", "import type { Address } from '@ariestools/sdk'\nimport { toAddress } from '@ariestools/sdk'\nimport type {\n AccountInstance, WithHashMeta, XyoAddress,\n} from '@xyo-network/sdk'\nimport { PayloadBuilder } from '@xyo-network/sdk'\nimport type {\n AllowedBlockPayload, ChainId,\n SignedHydratedBlockWithHashMeta,\n} from '@xyo-network/xl1-sdk'\nimport {\n BlockBoundWitnessSchemaPayload, BlockBoundWitnessWithStorageMetaSchemaPayload,\n ChainStakeIntentPayloadJsonSchemaPayload,\n createTransferPayload,\n HashPayloadJsonSchemaPayload,\n TransactionBoundWitnessSchemaPayload, TransactionBoundWitnessWithStorageMetaSchemaPayload, TransferPayloadJsonSchemaPayload,\n} from '@xyo-network/xl1-sdk'\n\nimport { buildGenesisBlock } from './buildGenesisBlock.ts'\nimport { createProducerChainStakeIntent } from './createProducerChainStakeIntentTransaction.ts'\n\nexport const createGenesisBlock = async (\n initialBlockProducer: AccountInstance,\n nextContractAddress: ChainId,\n genesisBlockRewardAmount: bigint,\n genesisBlockRewardAddress: XyoAddress,\n): Promise<SignedHydratedBlockWithHashMeta> => {\n const blockPayloads: WithHashMeta<AllowedBlockPayload>[] = await PayloadBuilder.addHashMeta([\n TransferPayloadJsonSchemaPayload,\n BlockBoundWitnessSchemaPayload,\n BlockBoundWitnessWithStorageMetaSchemaPayload,\n TransactionBoundWitnessSchemaPayload,\n TransactionBoundWitnessWithStorageMetaSchemaPayload,\n ChainStakeIntentPayloadJsonSchemaPayload,\n HashPayloadJsonSchemaPayload,\n ])\n const intentPayload = await createProducerChainStakeIntent(toAddress(initialBlockProducer.address), 1, 0)\n blockPayloads.push(intentPayload)\n if (genesisBlockRewardAmount > 0n) {\n blockPayloads.push(await PayloadBuilder.addHashMeta(createTransferPayload(\n nextContractAddress as Address,\n { [genesisBlockRewardAddress]: genesisBlockRewardAmount },\n )))\n }\n return await buildGenesisBlock(nextContractAddress, [], blockPayloads, [initialBlockProducer])\n}\n", "import type { Address } from '@ariestools/sdk'\nimport { toAddress } from '@ariestools/sdk'\nimport type { AccountInstance } from '@xyo-network/sdk'\nimport { PayloadBuilder } from '@xyo-network/sdk'\nimport type {\n ChainId,\n ChainStakeIntent,\n HydratedTransactionWithHashMeta,\n XL1BlockNumber,\n} from '@xyo-network/xl1-sdk'\nimport {\n asXL1BlockNumber, buildTransaction,\n ChainStakeIntentSchema, defaultTransactionFees,\n} from '@xyo-network/xl1-sdk'\n\nexport async function createProducerChainStakeIntent(from: Address, exp: number, nbf = 0) {\n const builder = new PayloadBuilder<ChainStakeIntent>({ schema: ChainStakeIntentSchema })\n return await PayloadBuilder.addHashMeta(builder.fields({\n from,\n exp,\n nbf,\n intent: 'producer',\n }).build())\n}\n\nexport async function createProducerChainStakeIntentTransaction(\n chain: ChainId,\n signers: AccountInstance[] = [],\n producer: Address,\n exp: XL1BlockNumber,\n nbf = asXL1BlockNumber(0, true),\n fees = defaultTransactionFees,\n): Promise<HydratedTransactionWithHashMeta> {\n // Create staked intents for all the block producers declaring their intent to produce blocks\n const intent = await createProducerChainStakeIntent(producer, exp, nbf)\n const tx = await buildTransaction(\n chain,\n [intent],\n [],\n signers,\n nbf,\n exp,\n toAddress(signers[0].address),\n fees,\n )\n return tx\n}\n", "import type { BlockBoundWitness } from '@xyo-network/xl1-sdk'\n\nexport type BlockBoundWitnessComparator = (a: BlockBoundWitness, b: BlockBoundWitness) => number\n\nexport const sortBlocksAscending: BlockBoundWitnessComparator = (a, b) => {\n const compared = a.block - b.block\n return compared > 0 ? 1 : compared < 0 ? -1 : 0\n}\n\nexport const sortBlocksDescending: BlockBoundWitnessComparator = (first, second) => sortBlocksAscending(second, first)\n\nexport const sortBlocks = (\n blocks: BlockBoundWitness[],\n compareFn: BlockBoundWitnessComparator = sortBlocksAscending,\n): BlockBoundWitness[] => blocks.toSorted(compareFn)\n\nexport const toSortedBlocks = (\n blocks: BlockBoundWitness[],\n compareFn: BlockBoundWitnessComparator = sortBlocksAscending,\n): BlockBoundWitness[] => sortBlocks([...blocks], compareFn)\n", "import type { Hash } from '@ariestools/sdk'\nimport type { ReadArchivist } from '@xyo-network/sdk'\nimport {\n asBlockBoundWitnessWithStorageMeta, type BlockBoundWitness, StepSizes,\n} from '@xyo-network/xl1-sdk'\n\n// This function is not yet complete and definitely not tested, so do not use!\n\nfunction shouldStopAtBreak(blockToCheck: BlockBoundWitness, breaks: (Hash | null)[], breakIndex: number): boolean {\n const breakHash = breaks[breakIndex]\n if (breakHash === null) return false\n return blockToCheck.step_hashes?.at(breakIndex) === breakHash\n}\n\nfunction hasBreakForBlock(blockToCheck: BlockBoundWitness, breaks: (Hash | null)[]): boolean {\n for (const [i] of breaks.entries()) {\n if (shouldStopAtBreak(blockToCheck, breaks, i)) {\n return true\n }\n }\n return false\n}\n\nasync function collectStepHashes(\n block: BlockBoundWitness,\n stepIndex: number,\n archivist: ReadArchivist,\n breaks: (Hash | null)[],\n): Promise<Hash[]> {\n const stepHashes: Hash[] = []\n let blockToCheck: BlockBoundWitness | undefined = block\n while (blockToCheck) {\n const stepHash: Hash | undefined = blockToCheck.step_hashes?.at(stepIndex)\n if (stepHash === undefined) {\n break\n }\n if (hasBreakForBlock(blockToCheck, breaks)) {\n break\n }\n stepHashes.push(stepHash)\n const archivistResult = await archivist.get([stepHash])\n blockToCheck = asBlockBoundWitnessWithStorageMeta(archivistResult.at(0))\n }\n return stepHashes\n}\n\n// goal is to return an array of arrays of all the step hashes that we should get to have the full history of the block\n// it will leave a gap from the end of the frame list to the head (unless the head just rolled a frame) and gaps between some frames\nexport async function frameList(block: BlockBoundWitness, archivist: ReadArchivist): Promise<Hash[][]> {\n const result: Hash[][] = []\n const stepSizes = [...StepSizes]\n // when to stop for smaller steps, i.e. a large step already has the block\n const breaks: (Hash | null)[] = Array.from({ length: StepSizes.length }, () => null)\n while (stepSizes.length > 0) {\n stepSizes.pop()\n const stepIndex = stepSizes.length\n const stepHashes = await collectStepHashes(block, stepIndex, archivist, breaks)\n result.unshift(stepHashes)\n }\n return result\n}\n"],
|
|
5
|
+
"mappings": "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",
|
|
6
6
|
"names": ["XYO_ZERO_ADDRESS", "XYO_ZERO_ADDRESS", "AttoXL1", "XYO_STEP_REWARD_ADDRESS", "XYO_STEP_REWARD_ADDRESS", "AttoXL1", "toAddress", "PayloadBuilder", "createTransferPayload", "PayloadBuilder", "asXL1BlockNumber", "PayloadBuilder", "toAddress", "createTransferPayload", "StepSizes"]
|
|
7
7
|
}
|
|
@@ -170,7 +170,10 @@ async function processPendingBlocks({
|
|
|
170
170
|
backoffMs,
|
|
171
171
|
minCandidates,
|
|
172
172
|
deadLetterQueueRunner,
|
|
173
|
-
observer
|
|
173
|
+
observer,
|
|
174
|
+
admission,
|
|
175
|
+
eligibility,
|
|
176
|
+
publishAdmissionShadow
|
|
174
177
|
}) {
|
|
175
178
|
const start = Date.now();
|
|
176
179
|
const currentBlock = await blockViewer.currentBlock();
|
|
@@ -182,7 +185,10 @@ async function processPendingBlocks({
|
|
|
182
185
|
windowedFinalizedChain: [currentBlock],
|
|
183
186
|
allowedProducers,
|
|
184
187
|
backoffMs,
|
|
185
|
-
minCandidates
|
|
188
|
+
minCandidates,
|
|
189
|
+
admission,
|
|
190
|
+
eligibility,
|
|
191
|
+
publishAdmissionShadow
|
|
186
192
|
});
|
|
187
193
|
const bestHeadChain = await headSelector.findBestHead();
|
|
188
194
|
if (isDefined(bestHeadChain) && bestHeadChain.length > 0) {
|
|
@@ -291,12 +297,21 @@ BaseNetworkStakeStepRewardService = __decorateClass([
|
|
|
291
297
|
creatableProvider3()
|
|
292
298
|
], BaseNetworkStakeStepRewardService);
|
|
293
299
|
|
|
300
|
+
// src/modules/services/simple/block/runner/selectSupersededCandidate.ts
|
|
301
|
+
import { isDefined as isDefined2 } from "@ariestools/sdk";
|
|
302
|
+
function selectSupersededCandidate(candidates, address, block, previous) {
|
|
303
|
+
const own = candidates.filter((candidate) => candidate.block === block && candidate.previous === previous && candidate.addresses.includes(address));
|
|
304
|
+
if (own.length === 0) return void 0;
|
|
305
|
+
const superseded = new Set(own.map((candidate) => candidate.supersedes).filter(isDefined2));
|
|
306
|
+
return (own.find((candidate) => !superseded.has(candidate._dataHash)) ?? own[0])._dataHash;
|
|
307
|
+
}
|
|
308
|
+
|
|
294
309
|
// src/modules/services/simple/block/runner/SimpleBlockRunner.ts
|
|
295
310
|
import {
|
|
296
311
|
asAddress,
|
|
297
312
|
assertEx as assertEx4,
|
|
298
313
|
hexToBigInt,
|
|
299
|
-
isDefined as
|
|
314
|
+
isDefined as isDefined3,
|
|
300
315
|
toAddress as toAddress2
|
|
301
316
|
} from "@ariestools/sdk";
|
|
302
317
|
import {
|
|
@@ -313,12 +328,14 @@ import {
|
|
|
313
328
|
BlockRewardViewerMoniker,
|
|
314
329
|
BlockRunnerMoniker,
|
|
315
330
|
BlockValidationViewerMoniker,
|
|
331
|
+
ChainParamsViewerMoniker,
|
|
316
332
|
connectArchivist,
|
|
317
333
|
creatableProvider as creatableProvider4,
|
|
318
334
|
createDeclarationIntent as createDeclarationIntent2,
|
|
319
335
|
DeadLetterQueueRunnerMoniker,
|
|
320
336
|
defaultRewardRatio,
|
|
321
337
|
FinalizationViewerMoniker,
|
|
338
|
+
isRuleActiveAt,
|
|
322
339
|
isSignedHydratedBlockWithHashMeta as isSignedHydratedBlockWithHashMeta2,
|
|
323
340
|
isTransferPayload,
|
|
324
341
|
MempoolViewerMoniker,
|
|
@@ -449,7 +466,10 @@ var SimpleBlockRunner = class extends AbstractCreatableProvider4 {
|
|
|
449
466
|
_address;
|
|
450
467
|
_blockRewardViewer;
|
|
451
468
|
_blockValidationViewer;
|
|
469
|
+
_chainParamsViewer;
|
|
452
470
|
_finalizationViewer;
|
|
471
|
+
/** Cache of the last candidate this runner signed; the mempool is the source of truth. */
|
|
472
|
+
_lastSignedCandidate;
|
|
453
473
|
_mempoolViewer;
|
|
454
474
|
_rewardAddress;
|
|
455
475
|
_timeSyncViewer;
|
|
@@ -534,6 +554,7 @@ var SimpleBlockRunner = class extends AbstractCreatableProvider4 {
|
|
|
534
554
|
this._rewardAddress = asAddress(this.params.rewardAddress ?? this.producerTuning.rewardAddress ?? this.account.address, true);
|
|
535
555
|
this._timeSyncViewer = await this.locateAndCreate(TimeSyncViewerMoniker);
|
|
536
556
|
this._deadLetterQueueRunner = await this.locator.tryGetInstance(DeadLetterQueueRunnerMoniker);
|
|
557
|
+
this._chainParamsViewer = await this.locator.tryGetInstance(ChainParamsViewerMoniker);
|
|
537
558
|
}
|
|
538
559
|
async next(head) {
|
|
539
560
|
return await this.proposeNextValidBlock(head);
|
|
@@ -565,7 +586,7 @@ var SimpleBlockRunner = class extends AbstractCreatableProvider4 {
|
|
|
565
586
|
getProducerRedeclaration(head) {
|
|
566
587
|
if ((this.params.disableIntentRedeclaration ?? this.producerTuning.disableIntentRedeclaration) === true) return;
|
|
567
588
|
const currentBlock = head.block;
|
|
568
|
-
if (
|
|
589
|
+
if (isDefined3(this._lastRedeclarationBlock)) {
|
|
569
590
|
const lastDeclarationExpiry = this._lastRedeclarationBlock + SimpleBlockRunner.RedeclarationDuration;
|
|
570
591
|
if (currentBlock < lastDeclarationExpiry) return;
|
|
571
592
|
}
|
|
@@ -707,11 +728,31 @@ var SimpleBlockRunner = class extends AbstractCreatableProvider4 {
|
|
|
707
728
|
*/
|
|
708
729
|
heartbeatRequired(head) {
|
|
709
730
|
const epoch = head.$epoch;
|
|
710
|
-
if (
|
|
731
|
+
if (isDefined3(epoch) && Date.now() - epoch > this.heartbeatInterval) {
|
|
711
732
|
return true;
|
|
712
733
|
}
|
|
713
734
|
return false;
|
|
714
735
|
}
|
|
736
|
+
/**
|
|
737
|
+
* The hash of this producer's own earlier candidate at the same height and parent, if any.
|
|
738
|
+
*
|
|
739
|
+
* The parent is part of the match on purpose. Two candidates at one height built on different
|
|
740
|
+
* parents are not a re-proposal, they are different branches, and linking across them would
|
|
741
|
+
* assert a supersession that never happened.
|
|
742
|
+
*
|
|
743
|
+
* Memory is only a cache. A restart wipes it while the pool still holds the prior candidate, so
|
|
744
|
+
* the pool is consulted whenever memory misses. Following the chain to its tip keeps a third
|
|
745
|
+
* proposal pointing at the second rather than back at the first.
|
|
746
|
+
* @param block The height being proposed
|
|
747
|
+
* @param previous The parent this proposal builds on
|
|
748
|
+
* @returns The prior candidate's signed data hash, or undefined when there is none
|
|
749
|
+
*/
|
|
750
|
+
async previousOwnCandidateHash(block, previous) {
|
|
751
|
+
const cached = this._lastSignedCandidate;
|
|
752
|
+
if (cached?.block === block && cached.previous === previous) return cached.hash;
|
|
753
|
+
const candidates = (await this.mempoolViewer.pendingBlocks()).map(([candidate]) => candidate);
|
|
754
|
+
return selectSupersededCandidate(candidates, this.address, block, previous);
|
|
755
|
+
}
|
|
715
756
|
async rejectExhaustedBlock(block, errors) {
|
|
716
757
|
this.logger?.warn(`Validation of produced block failed: ${errors.at(0)?.message}`);
|
|
717
758
|
if (this._deadLetterQueueRunner) {
|
|
@@ -758,6 +799,27 @@ var SimpleBlockRunner = class extends AbstractCreatableProvider4 {
|
|
|
758
799
|
}
|
|
759
800
|
return matched;
|
|
760
801
|
}
|
|
802
|
+
/**
|
|
803
|
+
* The candidate this proposal supersedes, or undefined when nothing should be stamped.
|
|
804
|
+
*
|
|
805
|
+
* Identity is the signed data hash rather than the storage hash, because that is what an
|
|
806
|
+
* observer recomputes when deciding whether two candidates are the same block — client meta
|
|
807
|
+
* such as `$epoch` must not be able to make one candidate look like two.
|
|
808
|
+
*
|
|
809
|
+
* With no register wired, or with the field unactivated, this never stamps. That is what keeps
|
|
810
|
+
* a producer running this build emission-identical to one running the release before it, which
|
|
811
|
+
* the rollout depends on: stamping before the fleet has upgraded would partition validation.
|
|
812
|
+
* @param head The block being built on
|
|
813
|
+
* @returns The superseded candidate's hash, or undefined
|
|
814
|
+
*/
|
|
815
|
+
async resolveSupersedes(head) {
|
|
816
|
+
const viewer = this._chainParamsViewer;
|
|
817
|
+
if (viewer === void 0) return void 0;
|
|
818
|
+
const params = await viewer.tryCurrentParams();
|
|
819
|
+
const block = head.block + 1;
|
|
820
|
+
if (params === void 0 || !isRuleActiveAt(params, "supersedes-field", block)) return void 0;
|
|
821
|
+
return await this.previousOwnCandidateHash(block, head._hash);
|
|
822
|
+
}
|
|
761
823
|
async runBuildValidateRetryLoop(args) {
|
|
762
824
|
const {
|
|
763
825
|
chainId,
|
|
@@ -768,6 +830,7 @@ var SimpleBlockRunner = class extends AbstractCreatableProvider4 {
|
|
|
768
830
|
stepRewardPoolBalance,
|
|
769
831
|
timePayload
|
|
770
832
|
} = args;
|
|
833
|
+
const supersedes = await this.resolveSupersedes(head);
|
|
771
834
|
const maxAttempts = Math.max(1, initialFundedTransactions.length);
|
|
772
835
|
let candidateTransactions = initialFundedTransactions;
|
|
773
836
|
let candidateTransfers = initialFundedTransfers;
|
|
@@ -784,10 +847,16 @@ var SimpleBlockRunner = class extends AbstractCreatableProvider4 {
|
|
|
784
847
|
XYO_STEP_REWARD_ADDRESS,
|
|
785
848
|
stepRewardPoolBalance,
|
|
786
849
|
void 0,
|
|
787
|
-
chainId
|
|
850
|
+
chainId,
|
|
851
|
+
supersedes
|
|
788
852
|
);
|
|
789
853
|
const validated = await this.blockValidationViewer.validateBlock(lastBlock, { head: head._hash });
|
|
790
854
|
if (isSignedHydratedBlockWithHashMeta2(validated)) {
|
|
855
|
+
this._lastSignedCandidate = {
|
|
856
|
+
block: validated[0].block,
|
|
857
|
+
hash: validated[0]._dataHash,
|
|
858
|
+
previous: head._hash
|
|
859
|
+
};
|
|
791
860
|
return { block: validated, errors: [] };
|
|
792
861
|
}
|
|
793
862
|
lastErrors = validated;
|
|
@@ -846,6 +915,7 @@ export {
|
|
|
846
915
|
XYO_PRODUCER_REDECLARATION_WINDOW,
|
|
847
916
|
XyoValidator,
|
|
848
917
|
createBootstrapHead,
|
|
849
|
-
processPendingBlocks
|
|
918
|
+
processPendingBlocks,
|
|
919
|
+
selectSupersededCandidate
|
|
850
920
|
};
|
|
851
921
|
//# sourceMappingURL=services.mjs.map
|