@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.
Files changed (305) hide show
  1. package/dist/browser/index.d.ts +1 -0
  2. package/dist/browser/index.d.ts.map +1 -1
  3. package/dist/browser/index.mjs +1 -0
  4. package/dist/browser/index.mjs.map +2 -2
  5. package/dist/browser/modules/analyze/ChainHeadSelector.d.ts +40 -0
  6. package/dist/browser/modules/analyze/ChainHeadSelector.d.ts.map +1 -1
  7. package/dist/browser/modules/analyze/admission.d.ts +65 -0
  8. package/dist/browser/modules/analyze/admission.d.ts.map +1 -0
  9. package/dist/browser/modules/analyze/index.d.ts +1 -0
  10. package/dist/browser/modules/analyze/index.d.ts.map +1 -1
  11. package/dist/browser/modules/protocol/block/BuildBlockOptions.d.ts +8 -0
  12. package/dist/browser/modules/protocol/block/BuildBlockOptions.d.ts.map +1 -1
  13. package/dist/browser/modules/protocol/block/buildBlock.d.ts.map +1 -1
  14. package/dist/browser/modules/protocol/block/buildNextBlock.d.ts +2 -1
  15. package/dist/browser/modules/protocol/block/buildNextBlock.d.ts.map +1 -1
  16. package/dist/browser/modules/services/implementation/processPendingBlocks.d.ts +9 -1
  17. package/dist/browser/modules/services/implementation/processPendingBlocks.d.ts.map +1 -1
  18. package/dist/browser/modules/services/simple/block/runner/SimpleBlockRunner.d.ts +34 -1
  19. package/dist/browser/modules/services/simple/block/runner/SimpleBlockRunner.d.ts.map +1 -1
  20. package/dist/browser/modules/services/simple/block/runner/index.d.ts +1 -0
  21. package/dist/browser/modules/services/simple/block/runner/index.d.ts.map +1 -1
  22. package/dist/browser/modules/services/simple/block/runner/selectSupersededCandidate.d.ts +22 -0
  23. package/dist/browser/modules/services/simple/block/runner/selectSupersededCandidate.d.ts.map +1 -0
  24. package/dist/browser/modules/slashing/detect/DetectedOffense.d.ts +27 -0
  25. package/dist/browser/modules/slashing/detect/DetectedOffense.d.ts.map +1 -0
  26. package/dist/browser/modules/slashing/detect/candidatePairs.d.ts +44 -0
  27. package/dist/browser/modules/slashing/detect/candidatePairs.d.ts.map +1 -0
  28. package/dist/browser/modules/slashing/detect/index.d.ts +5 -0
  29. package/dist/browser/modules/slashing/detect/index.d.ts.map +1 -0
  30. package/dist/browser/modules/slashing/detect/offenseGate.d.ts +18 -0
  31. package/dist/browser/modules/slashing/detect/offenseGate.d.ts.map +1 -0
  32. package/dist/browser/modules/slashing/detect/suppression.d.ts +23 -0
  33. package/dist/browser/modules/slashing/detect/suppression.d.ts.map +1 -0
  34. package/dist/browser/modules/slashing/eligibility/evaluateProducerEligibility.d.ts +71 -0
  35. package/dist/browser/modules/slashing/eligibility/evaluateProducerEligibility.d.ts.map +1 -0
  36. package/dist/browser/modules/slashing/eligibility/index.d.ts +2 -0
  37. package/dist/browser/modules/slashing/eligibility/index.d.ts.map +1 -0
  38. package/dist/browser/modules/slashing/index/SlashIndexStore.d.ts +22 -0
  39. package/dist/browser/modules/slashing/index/SlashIndexStore.d.ts.map +1 -0
  40. package/dist/browser/modules/slashing/index/foldSlashIndex.d.ts +56 -0
  41. package/dist/browser/modules/slashing/index/foldSlashIndex.d.ts.map +1 -0
  42. package/dist/browser/modules/slashing/index/index.d.ts +3 -0
  43. package/dist/browser/modules/slashing/index/index.d.ts.map +1 -0
  44. package/dist/browser/modules/slashing/index.d.ts +6 -0
  45. package/dist/browser/modules/slashing/index.d.ts.map +1 -0
  46. package/dist/browser/modules/slashing/model/OffenseProcedure.d.ts +28 -0
  47. package/dist/browser/modules/slashing/model/OffenseProcedure.d.ts.map +1 -0
  48. package/dist/browser/modules/slashing/model/OffenseVerificationContext.d.ts +88 -0
  49. package/dist/browser/modules/slashing/model/OffenseVerificationContext.d.ts.map +1 -0
  50. package/dist/browser/modules/slashing/model/SlashHistoryReader.d.ts +34 -0
  51. package/dist/browser/modules/slashing/model/SlashHistoryReader.d.ts.map +1 -0
  52. package/dist/browser/modules/slashing/model/VerificationOutcome.d.ts +39 -0
  53. package/dist/browser/modules/slashing/model/VerificationOutcome.d.ts.map +1 -0
  54. package/dist/browser/modules/slashing/model/index.d.ts +6 -0
  55. package/dist/browser/modules/slashing/model/index.d.ts.map +1 -0
  56. package/dist/browser/modules/slashing/model/offenseKey.d.ts +42 -0
  57. package/dist/browser/modules/slashing/model/offenseKey.d.ts.map +1 -0
  58. package/dist/browser/modules/slashing/verify/index.d.ts +10 -0
  59. package/dist/browser/modules/slashing/verify/index.d.ts.map +1 -0
  60. package/dist/browser/modules/slashing/verify/preamble.d.ts +63 -0
  61. package/dist/browser/modules/slashing/verify/preamble.d.ts.map +1 -0
  62. package/dist/browser/modules/slashing/verify/verifyEquivocation.d.ts +19 -0
  63. package/dist/browser/modules/slashing/verify/verifyEquivocation.d.ts.map +1 -0
  64. package/dist/browser/modules/slashing/verify/verifyFalseAnchor.d.ts +15 -0
  65. package/dist/browser/modules/slashing/verify/verifyFalseAnchor.d.ts.map +1 -0
  66. package/dist/browser/modules/slashing/verify/verifyFalseAttestation.d.ts +22 -0
  67. package/dist/browser/modules/slashing/verify/verifyFalseAttestation.d.ts.map +1 -0
  68. package/dist/browser/modules/slashing/verify/verifyIneligibleProduction.d.ts +18 -0
  69. package/dist/browser/modules/slashing/verify/verifyIneligibleProduction.d.ts.map +1 -0
  70. package/dist/browser/modules/slashing/verify/verifyInvalidBlock.d.ts +18 -0
  71. package/dist/browser/modules/slashing/verify/verifyInvalidBlock.d.ts.map +1 -0
  72. package/dist/browser/modules/slashing/verify/verifyInvalidSlashRequest.d.ts +11 -0
  73. package/dist/browser/modules/slashing/verify/verifyInvalidSlashRequest.d.ts.map +1 -0
  74. package/dist/browser/modules/slashing/verify/verifyOffense.d.ts +29 -0
  75. package/dist/browser/modules/slashing/verify/verifyOffense.d.ts.map +1 -0
  76. package/dist/browser/modules/slashing/verify/verifyRewardOvermint.d.ts +23 -0
  77. package/dist/browser/modules/slashing/verify/verifyRewardOvermint.d.ts.map +1 -0
  78. package/dist/browser/modules/validation/elevatedPayload/lib/findElevatingTransaction.d.ts +14 -0
  79. package/dist/browser/modules/validation/elevatedPayload/lib/findElevatingTransaction.d.ts.map +1 -0
  80. package/dist/browser/modules/validation/elevatedPayload/lib/index.d.ts +2 -0
  81. package/dist/browser/modules/validation/elevatedPayload/lib/index.d.ts.map +1 -1
  82. package/dist/browser/modules/validation/elevatedPayload/lib/validateSlashPayloadInBlock.d.ts +33 -0
  83. package/dist/browser/modules/validation/elevatedPayload/lib/validateSlashPayloadInBlock.d.ts.map +1 -0
  84. package/dist/browser/modules/validation/elevatedPayload/payloads/index.d.ts +5 -0
  85. package/dist/browser/modules/validation/elevatedPayload/payloads/index.d.ts.map +1 -1
  86. package/dist/browser/modules/validation/elevatedPayload/payloads/validateSlashAdjudicationInBlock.d.ts +14 -0
  87. package/dist/browser/modules/validation/elevatedPayload/payloads/validateSlashAdjudicationInBlock.d.ts.map +1 -0
  88. package/dist/browser/modules/validation/elevatedPayload/payloads/validateSlashChallengeInBlock.d.ts +10 -0
  89. package/dist/browser/modules/validation/elevatedPayload/payloads/validateSlashChallengeInBlock.d.ts.map +1 -0
  90. package/dist/browser/modules/validation/elevatedPayload/payloads/validateSlashCommitInBlock.d.ts +10 -0
  91. package/dist/browser/modules/validation/elevatedPayload/payloads/validateSlashCommitInBlock.d.ts.map +1 -0
  92. package/dist/browser/modules/validation/elevatedPayload/payloads/validateSlashEvidenceInBlock.d.ts +10 -0
  93. package/dist/browser/modules/validation/elevatedPayload/payloads/validateSlashEvidenceInBlock.d.ts.map +1 -0
  94. package/dist/browser/modules/validation/elevatedPayload/payloads/validateSlashRequestInBlock.d.ts +14 -0
  95. package/dist/browser/modules/validation/elevatedPayload/payloads/validateSlashRequestInBlock.d.ts.map +1 -0
  96. package/dist/browser/modules/validation/elevatedPayload/validatePayloadInBlock.d.ts.map +1 -1
  97. package/dist/browser/slashing.d.ts +2 -0
  98. package/dist/browser/slashing.d.ts.map +1 -0
  99. package/dist/neutral/analyze.mjs +85 -3
  100. package/dist/neutral/analyze.mjs.map +3 -3
  101. package/dist/neutral/index.d.ts +1 -0
  102. package/dist/neutral/index.d.ts.map +1 -1
  103. package/dist/neutral/index.mjs +1 -0
  104. package/dist/neutral/index.mjs.map +2 -2
  105. package/dist/neutral/modules/analyze/ChainHeadSelector.d.ts +40 -0
  106. package/dist/neutral/modules/analyze/ChainHeadSelector.d.ts.map +1 -1
  107. package/dist/neutral/modules/analyze/admission.d.ts +65 -0
  108. package/dist/neutral/modules/analyze/admission.d.ts.map +1 -0
  109. package/dist/neutral/modules/analyze/index.d.ts +1 -0
  110. package/dist/neutral/modules/analyze/index.d.ts.map +1 -1
  111. package/dist/neutral/modules/protocol/block/BuildBlockOptions.d.ts +8 -0
  112. package/dist/neutral/modules/protocol/block/BuildBlockOptions.d.ts.map +1 -1
  113. package/dist/neutral/modules/protocol/block/buildBlock.d.ts.map +1 -1
  114. package/dist/neutral/modules/protocol/block/buildNextBlock.d.ts +2 -1
  115. package/dist/neutral/modules/protocol/block/buildNextBlock.d.ts.map +1 -1
  116. package/dist/neutral/modules/services/implementation/processPendingBlocks.d.ts +9 -1
  117. package/dist/neutral/modules/services/implementation/processPendingBlocks.d.ts.map +1 -1
  118. package/dist/neutral/modules/services/simple/block/runner/SimpleBlockRunner.d.ts +34 -1
  119. package/dist/neutral/modules/services/simple/block/runner/SimpleBlockRunner.d.ts.map +1 -1
  120. package/dist/neutral/modules/services/simple/block/runner/index.d.ts +1 -0
  121. package/dist/neutral/modules/services/simple/block/runner/index.d.ts.map +1 -1
  122. package/dist/neutral/modules/services/simple/block/runner/selectSupersededCandidate.d.ts +22 -0
  123. package/dist/neutral/modules/services/simple/block/runner/selectSupersededCandidate.d.ts.map +1 -0
  124. package/dist/neutral/modules/slashing/detect/DetectedOffense.d.ts +27 -0
  125. package/dist/neutral/modules/slashing/detect/DetectedOffense.d.ts.map +1 -0
  126. package/dist/neutral/modules/slashing/detect/candidatePairs.d.ts +44 -0
  127. package/dist/neutral/modules/slashing/detect/candidatePairs.d.ts.map +1 -0
  128. package/dist/neutral/modules/slashing/detect/index.d.ts +5 -0
  129. package/dist/neutral/modules/slashing/detect/index.d.ts.map +1 -0
  130. package/dist/neutral/modules/slashing/detect/offenseGate.d.ts +18 -0
  131. package/dist/neutral/modules/slashing/detect/offenseGate.d.ts.map +1 -0
  132. package/dist/neutral/modules/slashing/detect/suppression.d.ts +23 -0
  133. package/dist/neutral/modules/slashing/detect/suppression.d.ts.map +1 -0
  134. package/dist/neutral/modules/slashing/eligibility/evaluateProducerEligibility.d.ts +71 -0
  135. package/dist/neutral/modules/slashing/eligibility/evaluateProducerEligibility.d.ts.map +1 -0
  136. package/dist/neutral/modules/slashing/eligibility/index.d.ts +2 -0
  137. package/dist/neutral/modules/slashing/eligibility/index.d.ts.map +1 -0
  138. package/dist/neutral/modules/slashing/index/SlashIndexStore.d.ts +22 -0
  139. package/dist/neutral/modules/slashing/index/SlashIndexStore.d.ts.map +1 -0
  140. package/dist/neutral/modules/slashing/index/foldSlashIndex.d.ts +56 -0
  141. package/dist/neutral/modules/slashing/index/foldSlashIndex.d.ts.map +1 -0
  142. package/dist/neutral/modules/slashing/index/index.d.ts +3 -0
  143. package/dist/neutral/modules/slashing/index/index.d.ts.map +1 -0
  144. package/dist/neutral/modules/slashing/index.d.ts +6 -0
  145. package/dist/neutral/modules/slashing/index.d.ts.map +1 -0
  146. package/dist/neutral/modules/slashing/model/OffenseProcedure.d.ts +28 -0
  147. package/dist/neutral/modules/slashing/model/OffenseProcedure.d.ts.map +1 -0
  148. package/dist/neutral/modules/slashing/model/OffenseVerificationContext.d.ts +88 -0
  149. package/dist/neutral/modules/slashing/model/OffenseVerificationContext.d.ts.map +1 -0
  150. package/dist/neutral/modules/slashing/model/SlashHistoryReader.d.ts +34 -0
  151. package/dist/neutral/modules/slashing/model/SlashHistoryReader.d.ts.map +1 -0
  152. package/dist/neutral/modules/slashing/model/VerificationOutcome.d.ts +39 -0
  153. package/dist/neutral/modules/slashing/model/VerificationOutcome.d.ts.map +1 -0
  154. package/dist/neutral/modules/slashing/model/index.d.ts +6 -0
  155. package/dist/neutral/modules/slashing/model/index.d.ts.map +1 -0
  156. package/dist/neutral/modules/slashing/model/offenseKey.d.ts +42 -0
  157. package/dist/neutral/modules/slashing/model/offenseKey.d.ts.map +1 -0
  158. package/dist/neutral/modules/slashing/verify/index.d.ts +10 -0
  159. package/dist/neutral/modules/slashing/verify/index.d.ts.map +1 -0
  160. package/dist/neutral/modules/slashing/verify/preamble.d.ts +63 -0
  161. package/dist/neutral/modules/slashing/verify/preamble.d.ts.map +1 -0
  162. package/dist/neutral/modules/slashing/verify/verifyEquivocation.d.ts +19 -0
  163. package/dist/neutral/modules/slashing/verify/verifyEquivocation.d.ts.map +1 -0
  164. package/dist/neutral/modules/slashing/verify/verifyFalseAnchor.d.ts +15 -0
  165. package/dist/neutral/modules/slashing/verify/verifyFalseAnchor.d.ts.map +1 -0
  166. package/dist/neutral/modules/slashing/verify/verifyFalseAttestation.d.ts +22 -0
  167. package/dist/neutral/modules/slashing/verify/verifyFalseAttestation.d.ts.map +1 -0
  168. package/dist/neutral/modules/slashing/verify/verifyIneligibleProduction.d.ts +18 -0
  169. package/dist/neutral/modules/slashing/verify/verifyIneligibleProduction.d.ts.map +1 -0
  170. package/dist/neutral/modules/slashing/verify/verifyInvalidBlock.d.ts +18 -0
  171. package/dist/neutral/modules/slashing/verify/verifyInvalidBlock.d.ts.map +1 -0
  172. package/dist/neutral/modules/slashing/verify/verifyInvalidSlashRequest.d.ts +11 -0
  173. package/dist/neutral/modules/slashing/verify/verifyInvalidSlashRequest.d.ts.map +1 -0
  174. package/dist/neutral/modules/slashing/verify/verifyOffense.d.ts +29 -0
  175. package/dist/neutral/modules/slashing/verify/verifyOffense.d.ts.map +1 -0
  176. package/dist/neutral/modules/slashing/verify/verifyRewardOvermint.d.ts +23 -0
  177. package/dist/neutral/modules/slashing/verify/verifyRewardOvermint.d.ts.map +1 -0
  178. package/dist/neutral/modules/validation/elevatedPayload/lib/findElevatingTransaction.d.ts +14 -0
  179. package/dist/neutral/modules/validation/elevatedPayload/lib/findElevatingTransaction.d.ts.map +1 -0
  180. package/dist/neutral/modules/validation/elevatedPayload/lib/index.d.ts +2 -0
  181. package/dist/neutral/modules/validation/elevatedPayload/lib/index.d.ts.map +1 -1
  182. package/dist/neutral/modules/validation/elevatedPayload/lib/validateSlashPayloadInBlock.d.ts +33 -0
  183. package/dist/neutral/modules/validation/elevatedPayload/lib/validateSlashPayloadInBlock.d.ts.map +1 -0
  184. package/dist/neutral/modules/validation/elevatedPayload/payloads/index.d.ts +5 -0
  185. package/dist/neutral/modules/validation/elevatedPayload/payloads/index.d.ts.map +1 -1
  186. package/dist/neutral/modules/validation/elevatedPayload/payloads/validateSlashAdjudicationInBlock.d.ts +14 -0
  187. package/dist/neutral/modules/validation/elevatedPayload/payloads/validateSlashAdjudicationInBlock.d.ts.map +1 -0
  188. package/dist/neutral/modules/validation/elevatedPayload/payloads/validateSlashChallengeInBlock.d.ts +10 -0
  189. package/dist/neutral/modules/validation/elevatedPayload/payloads/validateSlashChallengeInBlock.d.ts.map +1 -0
  190. package/dist/neutral/modules/validation/elevatedPayload/payloads/validateSlashCommitInBlock.d.ts +10 -0
  191. package/dist/neutral/modules/validation/elevatedPayload/payloads/validateSlashCommitInBlock.d.ts.map +1 -0
  192. package/dist/neutral/modules/validation/elevatedPayload/payloads/validateSlashEvidenceInBlock.d.ts +10 -0
  193. package/dist/neutral/modules/validation/elevatedPayload/payloads/validateSlashEvidenceInBlock.d.ts.map +1 -0
  194. package/dist/neutral/modules/validation/elevatedPayload/payloads/validateSlashRequestInBlock.d.ts +14 -0
  195. package/dist/neutral/modules/validation/elevatedPayload/payloads/validateSlashRequestInBlock.d.ts.map +1 -0
  196. package/dist/neutral/modules/validation/elevatedPayload/validatePayloadInBlock.d.ts.map +1 -1
  197. package/dist/neutral/protocol.mjs +8 -3
  198. package/dist/neutral/protocol.mjs.map +2 -2
  199. package/dist/neutral/services.mjs +77 -7
  200. package/dist/neutral/services.mjs.map +4 -4
  201. package/dist/neutral/slashing.d.ts +2 -0
  202. package/dist/neutral/slashing.d.ts.map +1 -0
  203. package/dist/neutral/slashing.mjs +824 -0
  204. package/dist/neutral/slashing.mjs.map +7 -0
  205. package/dist/neutral/validation.mjs +274 -43
  206. package/dist/neutral/validation.mjs.map +4 -4
  207. package/dist/node/index.d.ts +1 -0
  208. package/dist/node/index.d.ts.map +1 -1
  209. package/dist/node/index.mjs +1 -0
  210. package/dist/node/index.mjs.map +2 -2
  211. package/dist/node/modules/analyze/ChainHeadSelector.d.ts +40 -0
  212. package/dist/node/modules/analyze/ChainHeadSelector.d.ts.map +1 -1
  213. package/dist/node/modules/analyze/admission.d.ts +65 -0
  214. package/dist/node/modules/analyze/admission.d.ts.map +1 -0
  215. package/dist/node/modules/analyze/index.d.ts +1 -0
  216. package/dist/node/modules/analyze/index.d.ts.map +1 -1
  217. package/dist/node/modules/protocol/block/BuildBlockOptions.d.ts +8 -0
  218. package/dist/node/modules/protocol/block/BuildBlockOptions.d.ts.map +1 -1
  219. package/dist/node/modules/protocol/block/buildBlock.d.ts.map +1 -1
  220. package/dist/node/modules/protocol/block/buildNextBlock.d.ts +2 -1
  221. package/dist/node/modules/protocol/block/buildNextBlock.d.ts.map +1 -1
  222. package/dist/node/modules/services/implementation/processPendingBlocks.d.ts +9 -1
  223. package/dist/node/modules/services/implementation/processPendingBlocks.d.ts.map +1 -1
  224. package/dist/node/modules/services/simple/block/runner/SimpleBlockRunner.d.ts +34 -1
  225. package/dist/node/modules/services/simple/block/runner/SimpleBlockRunner.d.ts.map +1 -1
  226. package/dist/node/modules/services/simple/block/runner/index.d.ts +1 -0
  227. package/dist/node/modules/services/simple/block/runner/index.d.ts.map +1 -1
  228. package/dist/node/modules/services/simple/block/runner/selectSupersededCandidate.d.ts +22 -0
  229. package/dist/node/modules/services/simple/block/runner/selectSupersededCandidate.d.ts.map +1 -0
  230. package/dist/node/modules/slashing/detect/DetectedOffense.d.ts +27 -0
  231. package/dist/node/modules/slashing/detect/DetectedOffense.d.ts.map +1 -0
  232. package/dist/node/modules/slashing/detect/candidatePairs.d.ts +44 -0
  233. package/dist/node/modules/slashing/detect/candidatePairs.d.ts.map +1 -0
  234. package/dist/node/modules/slashing/detect/index.d.ts +5 -0
  235. package/dist/node/modules/slashing/detect/index.d.ts.map +1 -0
  236. package/dist/node/modules/slashing/detect/offenseGate.d.ts +18 -0
  237. package/dist/node/modules/slashing/detect/offenseGate.d.ts.map +1 -0
  238. package/dist/node/modules/slashing/detect/suppression.d.ts +23 -0
  239. package/dist/node/modules/slashing/detect/suppression.d.ts.map +1 -0
  240. package/dist/node/modules/slashing/eligibility/evaluateProducerEligibility.d.ts +71 -0
  241. package/dist/node/modules/slashing/eligibility/evaluateProducerEligibility.d.ts.map +1 -0
  242. package/dist/node/modules/slashing/eligibility/index.d.ts +2 -0
  243. package/dist/node/modules/slashing/eligibility/index.d.ts.map +1 -0
  244. package/dist/node/modules/slashing/index/SlashIndexStore.d.ts +22 -0
  245. package/dist/node/modules/slashing/index/SlashIndexStore.d.ts.map +1 -0
  246. package/dist/node/modules/slashing/index/foldSlashIndex.d.ts +56 -0
  247. package/dist/node/modules/slashing/index/foldSlashIndex.d.ts.map +1 -0
  248. package/dist/node/modules/slashing/index/index.d.ts +3 -0
  249. package/dist/node/modules/slashing/index/index.d.ts.map +1 -0
  250. package/dist/node/modules/slashing/index.d.ts +6 -0
  251. package/dist/node/modules/slashing/index.d.ts.map +1 -0
  252. package/dist/node/modules/slashing/model/OffenseProcedure.d.ts +28 -0
  253. package/dist/node/modules/slashing/model/OffenseProcedure.d.ts.map +1 -0
  254. package/dist/node/modules/slashing/model/OffenseVerificationContext.d.ts +88 -0
  255. package/dist/node/modules/slashing/model/OffenseVerificationContext.d.ts.map +1 -0
  256. package/dist/node/modules/slashing/model/SlashHistoryReader.d.ts +34 -0
  257. package/dist/node/modules/slashing/model/SlashHistoryReader.d.ts.map +1 -0
  258. package/dist/node/modules/slashing/model/VerificationOutcome.d.ts +39 -0
  259. package/dist/node/modules/slashing/model/VerificationOutcome.d.ts.map +1 -0
  260. package/dist/node/modules/slashing/model/index.d.ts +6 -0
  261. package/dist/node/modules/slashing/model/index.d.ts.map +1 -0
  262. package/dist/node/modules/slashing/model/offenseKey.d.ts +42 -0
  263. package/dist/node/modules/slashing/model/offenseKey.d.ts.map +1 -0
  264. package/dist/node/modules/slashing/verify/index.d.ts +10 -0
  265. package/dist/node/modules/slashing/verify/index.d.ts.map +1 -0
  266. package/dist/node/modules/slashing/verify/preamble.d.ts +63 -0
  267. package/dist/node/modules/slashing/verify/preamble.d.ts.map +1 -0
  268. package/dist/node/modules/slashing/verify/verifyEquivocation.d.ts +19 -0
  269. package/dist/node/modules/slashing/verify/verifyEquivocation.d.ts.map +1 -0
  270. package/dist/node/modules/slashing/verify/verifyFalseAnchor.d.ts +15 -0
  271. package/dist/node/modules/slashing/verify/verifyFalseAnchor.d.ts.map +1 -0
  272. package/dist/node/modules/slashing/verify/verifyFalseAttestation.d.ts +22 -0
  273. package/dist/node/modules/slashing/verify/verifyFalseAttestation.d.ts.map +1 -0
  274. package/dist/node/modules/slashing/verify/verifyIneligibleProduction.d.ts +18 -0
  275. package/dist/node/modules/slashing/verify/verifyIneligibleProduction.d.ts.map +1 -0
  276. package/dist/node/modules/slashing/verify/verifyInvalidBlock.d.ts +18 -0
  277. package/dist/node/modules/slashing/verify/verifyInvalidBlock.d.ts.map +1 -0
  278. package/dist/node/modules/slashing/verify/verifyInvalidSlashRequest.d.ts +11 -0
  279. package/dist/node/modules/slashing/verify/verifyInvalidSlashRequest.d.ts.map +1 -0
  280. package/dist/node/modules/slashing/verify/verifyOffense.d.ts +29 -0
  281. package/dist/node/modules/slashing/verify/verifyOffense.d.ts.map +1 -0
  282. package/dist/node/modules/slashing/verify/verifyRewardOvermint.d.ts +23 -0
  283. package/dist/node/modules/slashing/verify/verifyRewardOvermint.d.ts.map +1 -0
  284. package/dist/node/modules/validation/elevatedPayload/lib/findElevatingTransaction.d.ts +14 -0
  285. package/dist/node/modules/validation/elevatedPayload/lib/findElevatingTransaction.d.ts.map +1 -0
  286. package/dist/node/modules/validation/elevatedPayload/lib/index.d.ts +2 -0
  287. package/dist/node/modules/validation/elevatedPayload/lib/index.d.ts.map +1 -1
  288. package/dist/node/modules/validation/elevatedPayload/lib/validateSlashPayloadInBlock.d.ts +33 -0
  289. package/dist/node/modules/validation/elevatedPayload/lib/validateSlashPayloadInBlock.d.ts.map +1 -0
  290. package/dist/node/modules/validation/elevatedPayload/payloads/index.d.ts +5 -0
  291. package/dist/node/modules/validation/elevatedPayload/payloads/index.d.ts.map +1 -1
  292. package/dist/node/modules/validation/elevatedPayload/payloads/validateSlashAdjudicationInBlock.d.ts +14 -0
  293. package/dist/node/modules/validation/elevatedPayload/payloads/validateSlashAdjudicationInBlock.d.ts.map +1 -0
  294. package/dist/node/modules/validation/elevatedPayload/payloads/validateSlashChallengeInBlock.d.ts +10 -0
  295. package/dist/node/modules/validation/elevatedPayload/payloads/validateSlashChallengeInBlock.d.ts.map +1 -0
  296. package/dist/node/modules/validation/elevatedPayload/payloads/validateSlashCommitInBlock.d.ts +10 -0
  297. package/dist/node/modules/validation/elevatedPayload/payloads/validateSlashCommitInBlock.d.ts.map +1 -0
  298. package/dist/node/modules/validation/elevatedPayload/payloads/validateSlashEvidenceInBlock.d.ts +10 -0
  299. package/dist/node/modules/validation/elevatedPayload/payloads/validateSlashEvidenceInBlock.d.ts.map +1 -0
  300. package/dist/node/modules/validation/elevatedPayload/payloads/validateSlashRequestInBlock.d.ts +14 -0
  301. package/dist/node/modules/validation/elevatedPayload/payloads/validateSlashRequestInBlock.d.ts.map +1 -0
  302. package/dist/node/modules/validation/elevatedPayload/validatePayloadInBlock.d.ts.map +1 -1
  303. package/dist/node/slashing.d.ts +2 -0
  304. package/dist/node/slashing.d.ts.map +1 -0
  305. package/package.json +16 -10
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
- "sources": ["../../src/modules/validation/block/validateBlock.ts", "../../src/modules/validation/block/validators/AllowedPayloadSchemas.ts", "../../src/modules/validation/block/validators/BoundWitness.ts", "../../src/modules/validation/block/validators/Fields.ts", "../../src/modules/validation/block/validators/JsonSchema.ts", "../../src/modules/validation/block/validators/PreviousHash.ts", "../../src/modules/validation/hydratedBlock/validateHydratedBlock.ts", "../../src/modules/validation/hydratedBlock/validators/Payloads.ts", "../../src/modules/validation/elevatedPayload/validatePayloadInBlock.ts", "../../src/modules/validation/elevatedPayload/lib/isElevatedFromBlock.ts", "../../src/modules/validation/elevatedPayload/lib/validateElevatedFromBlock.ts", "../../src/modules/validation/elevatedPayload/lib/validateElevatedFromTransaction.ts", "../../src/modules/validation/elevatedPayload/lib/validateTransactionInBlock.ts", "../../src/modules/validation/elevatedPayload/lib/validateTypedPayloadInBlock.ts", "../../src/modules/validation/elevatedPayload/payloads/validateBridgeDestinationObservationInBlock.ts", "../../src/modules/validation/elevatedPayload/payloads/validateBridgeIntentInBlock.ts", "../../src/modules/validation/elevatedPayload/payloads/validateBridgeSourceObservationInBlock.ts", "../../src/modules/validation/elevatedPayload/payloads/validateChainStakeIntentInBlock.ts", "../../src/modules/validation/elevatedPayload/payloads/validateHashInBlock.ts", "../../src/modules/validation/elevatedPayload/payloads/validateSchemaInBlock.ts", "../../src/modules/validation/elevatedPayload/payloads/validateTimeInBlock.ts", "../../src/modules/validation/elevatedPayload/payloads/validateTransferInBlock.ts", "../../src/modules/validation/hydratedBlock/validators/TransactionTransfersInBlock.ts", "../../src/modules/validation/hydratedBlockState/validateHydratedBlockState.ts", "../../src/modules/validation/hydratedBlockState/validators/RequiredBalance.ts", "../../src/modules/validation/hydratedTransactionState/validateHydratedTransactionState.ts", "../../src/modules/validation/hydratedTransactionState/validators/RequiredBalance.ts"],
4
- "sourcesContent": ["import { ZERO_HASH } from '@ariestools/sdk'\nimport type { WithStorageMeta } from '@xyo-network/sdk'\nimport type {\n BaseContext,\n BlockBoundWitness, BlockValidatorFunction, ChainId,\n} from '@xyo-network/xl1-sdk'\nimport { BlockValidationError } from '@xyo-network/xl1-sdk'\n\nimport {\n BlockAllowedPayloadSchemasValidator,\n BlockBoundWitnessValidator,\n BlockFieldsValidator, BlockPreviousHashValidator,\n} from './validators/index.ts'\n\nexport const validateBlock = async (\n context: BaseContext,\n block: BlockBoundWitness,\n chainId?: ChainId,\n additionalValidators: BlockValidatorFunction[] = [],\n): Promise<BlockValidationError[]> => {\n const errors: BlockValidationError[] = []\n try {\n const validators: BlockValidatorFunction[] = [\n BlockBoundWitnessValidator,\n BlockFieldsValidator,\n BlockPreviousHashValidator,\n BlockAllowedPayloadSchemasValidator,\n ...additionalValidators,\n ]\n for (const validator of validators) {\n errors.push(...(await Promise.resolve(validator(context, block, chainId))))\n }\n } catch (ex) {\n errors.push(new BlockValidationError((block as WithStorageMeta<BlockBoundWitness>)?._hash ?? ZERO_HASH, block, 'validation excepted', ex))\n }\n return errors\n}\n", "import { ZERO_HASH } from '@ariestools/sdk'\nimport type { WithStorageMeta } from '@xyo-network/sdk'\nimport type { BlockBoundWitness, BlockValidatorFunction } from '@xyo-network/xl1-sdk'\nimport {\n BlockValidationError,\n isAllowedBlockPayloadSchema,\n} from '@xyo-network/xl1-sdk'\n\nexport const BlockAllowedPayloadSchemasValidator: BlockValidatorFunction = (\n context,\n block,\n) => {\n const errors: BlockValidationError[] = []\n try {\n for (const schema of block.payload_schemas) {\n if (!isAllowedBlockPayloadSchema(schema)) {\n errors.push(new BlockValidationError(\n (block as WithStorageMeta<BlockBoundWitness>)?._hash ?? ZERO_HASH,\n block,\n `payload schema not allowed in block: ${String(schema)}`,\n ))\n }\n }\n } catch (ex) {\n errors.push(new BlockValidationError(\n (block as WithStorageMeta<BlockBoundWitness>)?._hash ?? ZERO_HASH,\n block,\n `validation excepted: ${String(ex)}`,\n ex,\n ))\n }\n return errors\n}\n", "import { ZERO_HASH } from '@ariestools/sdk'\nimport type { WithStorageMeta } from '@xyo-network/sdk'\nimport { BoundWitnessValidator } from '@xyo-network/sdk'\nimport type { BlockBoundWitness, BlockValidatorFunction } from '@xyo-network/xl1-sdk'\nimport { BlockValidationError } from '@xyo-network/xl1-sdk'\n\nconst error = (block: BlockBoundWitness, message: string): BlockValidationError =>\n new BlockValidationError((block as WithStorageMeta<BlockBoundWitness>)?._hash ?? ZERO_HASH, block, message)\n\n// Friendly pre-check for the same wallet/producer bug surfaced on the\n// transaction side: signatures emitted under `signatures` instead of\n// `$signatures`. Mirrors TransactionBoundWitnessValidator.\nconst checkSignaturesShape = (block: BlockBoundWitness): BlockValidationError[] => {\n const bw = block as unknown as Record<string, unknown>\n if (bw.$signatures === undefined) {\n return Array.isArray(bw.signatures)\n ? [error(block, 'BoundWitness has `signatures` but expected `$signatures` (signatures must be in the meta-prefixed `$signatures` key)')]\n : [error(block, 'BoundWitness is missing `$signatures`')]\n }\n return []\n}\n\n/**\n * Validates the block's BoundWitness wholistically by delegating to\n * `BoundWitnessValidator.validate()`. Mirrors TransactionBoundWitnessValidator\n * for blocks. Covers signatures (length parity + per-address elliptic-curve\n * verification against the BW data hash), addresses uniqueness,\n * payload_hashes/payload_schemas length parity, schemas, and top-level\n * schema check.\n */\nexport const BlockBoundWitnessValidator: BlockValidatorFunction = async (\n _context,\n block,\n) => {\n try {\n const shapeErrors = checkSignaturesShape(block)\n if (shapeErrors.length > 0) return shapeErrors\n const bwValidator = new BoundWitnessValidator(block)\n const bwErrors = await bwValidator.validate()\n return bwErrors.map(e => error(block, `BoundWitness validation: ${e.message}`))\n } catch (ex) {\n return [error(block, `Failed BlockBoundWitnessValidator: ${String(ex)}`)]\n }\n}\n", "import type { Hash } from '@ariestools/sdk'\nimport { isDefined, ZERO_HASH } from '@ariestools/sdk'\nimport type { WithStorageMeta } from '@xyo-network/sdk'\nimport { BoundWitnessSchema } from '@xyo-network/sdk'\nimport type {\n BaseContext,\n BlockBoundWitness, BlockValidatorFunction, ChainId,\n} from '@xyo-network/xl1-sdk'\nimport { BlockValidationError } from '@xyo-network/xl1-sdk'\n\nexport const BlockFieldsValidator: BlockValidatorFunction = (\n context: BaseContext,\n block: BlockBoundWitness,\n chainId?: ChainId,\n) => {\n const errors: BlockValidationError[] = []\n try {\n if (isDefined(chainId) && block.chain !== chainId.toLowerCase()) {\n errors.push(new BlockValidationError((block as WithStorageMeta<BlockBoundWitness>)?._hash ?? ZERO_HASH, block, 'Invalid chain id'))\n }\n\n // get transaction hashes\n const txHashes: Hash[] = []\n for (let i = 0; i < block.payload_hashes.length; i++) {\n if (block.payload_schemas[i] === BoundWitnessSchema) {\n txHashes.push(block.payload_hashes[i])\n }\n }\n\n // check if transaction hashes are unique\n const uniqueTxHashes = new Set(txHashes)\n if (uniqueTxHashes.size < txHashes.length) {\n errors.push(new BlockValidationError(\n (block as WithStorageMeta<BlockBoundWitness>)?._hash ?? ZERO_HASH,\n block,\n `Duplicate Transaction Hashes: ${txHashes.join(', ')}`,\n ))\n }\n } catch (ex) {\n errors.push(new BlockValidationError(\n (block as WithStorageMeta<BlockBoundWitness>)?._hash ?? ZERO_HASH,\n block,\n `validation excepted: ${String(ex)}`,\n ex,\n ))\n }\n return errors\n}\n", "import { ZERO_HASH } from '@ariestools/sdk'\nimport type { WithStorageMeta } from '@xyo-network/sdk'\nimport type {\n BaseContext, BlockBoundWitness, BlockValidatorFunction,\n} from '@xyo-network/xl1-sdk'\nimport { BlockBoundWitnessWithStorageMetaJsonSchema, BlockValidationError } from '@xyo-network/xl1-sdk'\nimport type { AnySchema } from 'ajv'\nimport { Ajv } from 'ajv'\n\nexport const BlockJsonSchemaValidator = (jsonSchema: AnySchema = BlockBoundWitnessWithStorageMetaJsonSchema): BlockValidatorFunction => {\n const ajv = new Ajv({ allErrors: true, strict: true })\n const validate = ajv.compile(jsonSchema)\n return async (\n context: BaseContext,\n block: BlockBoundWitness,\n ) => {\n const errors: BlockValidationError[] = []\n try {\n await validate(block)\n if ((validate.errors ?? []).length > 0) {\n const error = new BlockValidationError(\n (block as WithStorageMeta<BlockBoundWitness>)?._hash ?? ZERO_HASH,\n block,\n `failed JSON schema validation: ${ajv.errorsText(validate.errors, { separator: '\\n' })}`,\n )\n error.cause = validate.errors\n errors.push(error)\n }\n } catch (ex) {\n const error = new BlockValidationError(\n (block as WithStorageMeta<BlockBoundWitness>)?._hash ?? ZERO_HASH,\n block,\n `validation excepted: ${String(ex)}`,\n )\n error.cause = ex\n errors.push(error)\n }\n return errors\n }\n}\n", "import { isHash, ZERO_HASH } from '@ariestools/sdk'\nimport type { WithStorageMeta } from '@xyo-network/sdk'\nimport type { BlockBoundWitness, BlockValidatorFunction } from '@xyo-network/xl1-sdk'\nimport { BlockValidationError } from '@xyo-network/xl1-sdk'\n\nexport const BlockPreviousHashValidator: BlockValidatorFunction = (\n context,\n block,\n) => {\n const errors: BlockValidationError[] = []\n try {\n const blockNumber = block.block\n if (blockNumber > 0n) {\n // if this is not the first block, validate previous hashes\n if (!isHash(block.previous)) {\n errors.push(new BlockValidationError((block as WithStorageMeta<BlockBoundWitness>)?._hash ?? ZERO_HASH, block, 'previous hash is missing or invalid'))\n }\n } else if (blockNumber === 0) {\n // if this is the first block, validate previous hashes\n if (block.previous !== null) {\n errors.push(new BlockValidationError((block as WithStorageMeta<BlockBoundWitness>)?._hash ?? ZERO_HASH, block, 'previous hash should not be set'))\n }\n } else {\n // we have a negative block number\n errors.push(new BlockValidationError((block as WithStorageMeta<BlockBoundWitness>)?._hash ?? ZERO_HASH, block, 'invalid block number'))\n }\n } catch (ex) {\n const error = new BlockValidationError(\n (block as WithStorageMeta<BlockBoundWitness>)?._hash ?? ZERO_HASH,\n block,\n `Failed BlockPreviousHashValidator: ${String(ex)}`,\n )\n error.cause = ex\n errors.push(error)\n }\n return errors\n}\n", "import type { Promisable } from '@ariestools/sdk'\nimport { ZERO_HASH } from '@ariestools/sdk'\nimport type {\n BaseContext,\n BlockValidatorFunction, ChainId, HydratedBlockValidationFunction, HydratedBlockWithHashMeta,\n XL1BlockNumber,\n} from '@xyo-network/xl1-sdk'\nimport { BoundWitnessReferencesValidator, HydratedBlockValidationError } from '@xyo-network/xl1-sdk'\n\nimport { validateBlock } from '../block/index.ts'\nimport { PayloadsInBlockValidator } from './validators/index.ts'\n\nexport const validateHydratedBlock = async (\n context: BaseContext,\n hydratedBlock: HydratedBlockWithHashMeta,\n chainIdAtBlockNumber?: (blockNumber: XL1BlockNumber) => Promisable<ChainId>,\n additionalValidators: HydratedBlockValidationFunction[] = [],\n additionalBlockValidators: BlockValidatorFunction[] = [],\n) => {\n const errors: HydratedBlockValidationError[] = []\n try {\n const validateBlockErrors = await validateBlock(\n context,\n hydratedBlock[0],\n chainIdAtBlockNumber ? await chainIdAtBlockNumber(hydratedBlock[0].block) : undefined,\n additionalBlockValidators,\n )\n for (const validateBlockError of validateBlockErrors) {\n errors.push(new HydratedBlockValidationError(hydratedBlock[0]._hash, hydratedBlock, `validateBlock error: ${validateBlockError}`, validateBlockError))\n }\n const bwRefErrors = await BoundWitnessReferencesValidator()(hydratedBlock)\n for (const bwRefError of bwRefErrors) {\n errors.push(new HydratedBlockValidationError(hydratedBlock[0]._hash, hydratedBlock, `boundwitness reference error: ${bwRefError}`, bwRefError))\n }\n const validators: HydratedBlockValidationFunction[] = [\n PayloadsInBlockValidator,\n ...additionalValidators,\n ]\n for (const validator of validators) {\n errors.push(...(await Promise.resolve(validator(context, hydratedBlock, chainIdAtBlockNumber))))\n }\n } catch (ex) {\n errors.push(new HydratedBlockValidationError(\n hydratedBlock?.[0]?._hash ?? ZERO_HASH,\n hydratedBlock,\n `Failed validateHydratedBlock: ${String(ex)}`,\n ex,\n ))\n }\n return errors\n}\n", "import { ZERO_HASH } from '@ariestools/sdk'\nimport type { Payload, WithHashMeta } from '@xyo-network/sdk'\nimport type { HydratedBlockValidationFunction } from '@xyo-network/xl1-sdk'\nimport { HydratedBlockValidationError } from '@xyo-network/xl1-sdk'\n\nimport { validatePayloadInBlock } from '../../elevatedPayload/index.ts'\n\nexport const PayloadsInBlockValidator: HydratedBlockValidationFunction = async (\n context,\n [block, payloads],\n) => {\n const errors: HydratedBlockValidationError[] = []\n try {\n const payloadMap: Partial<Record<string, WithHashMeta<Payload>>> = {}\n for (const payload of payloads) {\n const propertyKey = String(payload._hash)\n payloadMap[propertyKey] = payload\n }\n\n const remainingPayloads = { ...payloadMap }\n\n for (let i = 0; i < block.payload_hashes.length; i++) {\n const propertyKey = String(block.payload_hashes[i])\n const schema = block.payload_schemas[i]\n const payload = payloadMap[propertyKey]\n if (payload) {\n const payloadInBlockErrors = await validatePayloadInBlock(context, payload, [block, payloads])\n for (const payloadInBlockError of payloadInBlockErrors) {\n errors.push(new HydratedBlockValidationError(\n block?._hash ?? ZERO_HASH,\n [block, payloads],\n `validatePayloadInBlock error: ${payloadInBlockError}`,\n payloadInBlockError,\n ))\n }\n delete remainingPayloads[propertyKey]\n } else {\n errors.push(new HydratedBlockValidationError(block?._hash ?? ZERO_HASH, [block, payloads], `missing payload ${propertyKey} ${schema}`))\n }\n }\n\n if (Object.keys(remainingPayloads).length > 0) {\n errors.push(new HydratedBlockValidationError(block?._hash ?? ZERO_HASH, [block, payloads], `extra payloads ${Object.keys(payloadMap).join(', ')}`))\n }\n } catch (ex) {\n errors.push(new HydratedBlockValidationError(\n block?._hash ?? ZERO_HASH,\n [block, payloads],\n `Failed PayloadsInBlockValidator: ${String(ex)}`,\n ex,\n ))\n }\n\n return errors\n}\n", "import { ZERO_HASH } from '@ariestools/sdk'\nimport type { Schema } from '@xyo-network/sdk'\nimport { BoundWitnessSchema, SchemaSchema } from '@xyo-network/sdk'\nimport type { InBlockPayloadValidationFunction } from '@xyo-network/xl1-sdk'\nimport {\n BridgeDestinationObservationSchema, BridgeIntentSchema, BridgeSourceObservationSchema, ChainStakeIntentSchema, HashSchema, InBlockPayloadValidationError,\n TimeSchema, TransferSchema,\n} from '@xyo-network/xl1-sdk'\n\nimport { validateTransactionInBlock } from './lib/index.ts'\nimport {\n validateBridgeDestinationObservationInBlock, validateBridgeIntentInBlock, validateBridgeSourceObservationInBlock, validateChainStakeIntentInBlock,\n validateHashInBlock, validateSchemaInBlock, validateTimeInBlock, validateTransferInBlock,\n} from './payloads/index.ts'\n\nconst payloadValidators: Partial<Record<Schema, InBlockPayloadValidationFunction>> = {\n [BoundWitnessSchema]: validateTransactionInBlock,\n [BridgeDestinationObservationSchema]: validateBridgeDestinationObservationInBlock,\n [BridgeIntentSchema]: validateBridgeIntentInBlock,\n [BridgeSourceObservationSchema]: validateBridgeSourceObservationInBlock,\n [ChainStakeIntentSchema]: validateChainStakeIntentInBlock,\n [HashSchema]: validateHashInBlock,\n [SchemaSchema]: validateSchemaInBlock,\n [TimeSchema]: validateTimeInBlock,\n [TransferSchema]: validateTransferInBlock,\n}\n\nexport const validatePayloadInBlock: InBlockPayloadValidationFunction = async (\n context,\n payload,\n block,\n): Promise<InBlockPayloadValidationError[]> => {\n const errors: InBlockPayloadValidationError[] = []\n try {\n const validator = payloadValidators[payload.schema]\n if (validator) {\n errors.push(...(await validator(context, payload, block)))\n } else {\n errors.push(new InBlockPayloadValidationError((block?.[0])?._hash ?? ZERO_HASH, block, payload, `Unsupported payload schema: ${payload.schema}`))\n }\n } catch (ex) {\n const error = new InBlockPayloadValidationError(\n (block?.[0])?._hash ?? ZERO_HASH,\n block,\n payload,\n `validation excepted: ${String(ex)}`,\n ex,\n )\n errors.push(error)\n }\n return errors\n}\n", "import type { Payload, WithHashMeta } from '@xyo-network/sdk'\nimport { type HydratedBlock, isTransactionBoundWitness } from '@xyo-network/xl1-sdk'\n\nexport const isElevatedFromBlock = (payload: WithHashMeta<Payload>, [, payloads]: HydratedBlock): boolean => {\n const txs = payloads.filter(p => isTransactionBoundWitness(p))\n for (const tx of txs) {\n if (tx.payload_hashes.includes(payload._hash)) {\n return false\n }\n }\n return true\n}\n", "import type { InBlockPayloadValidationFunction } from '@xyo-network/xl1-sdk'\nimport { InBlockPayloadValidationError, transactionsFromHydratedBlock } from '@xyo-network/xl1-sdk'\n\nexport const validateElevatedFromBlock: InBlockPayloadValidationFunction = (\n context,\n payload,\n block,\n) => {\n const errors: InBlockPayloadValidationError[] = []\n try {\n const txs = transactionsFromHydratedBlock(block)\n const allTxPayloadHashes = new Set(txs.flatMap(tx => tx.payload_hashes))\n if (allTxPayloadHashes.has(payload._hash)) {\n errors.push(new InBlockPayloadValidationError(\n block[0]?._hash,\n block,\n payload,\n `Transaction may not include block payload hash [${payload.schema}]: ${payload._hash}`,\n ))\n }\n } catch (ex) {\n errors.push(new InBlockPayloadValidationError(block[0]?._hash, block, payload, `validation excepted: ${String(ex)}`, ex))\n }\n return errors\n}\n", "import type { InBlockPayloadValidationFunction } from '@xyo-network/xl1-sdk'\nimport { InBlockPayloadValidationError, transactionsFromHydratedBlock } from '@xyo-network/xl1-sdk'\n\nexport const validateElevatedFromTransaction: InBlockPayloadValidationFunction = (\n context,\n payload,\n block,\n) => {\n const errors: InBlockPayloadValidationError[] = []\n try {\n const txs = transactionsFromHydratedBlock(block)\n if (txs.length > 0) {\n const hashes = txs.flatMap(tx => tx.payload_hashes)\n if (!hashes.includes(payload._hash)) {\n errors.push(new InBlockPayloadValidationError(payload._hash, block, payload, 'Transaction does not include payload'))\n }\n } else {\n errors.push(new InBlockPayloadValidationError(payload._hash, block, payload, 'No Transactions in block'))\n }\n } catch (ex) {\n errors.push(new InBlockPayloadValidationError(\n payload._hash,\n block,\n payload,\n `Failed validateElevatedFromTransaction: ${String(ex)}`,\n ex,\n ))\n }\n return errors\n}\n", "import { ZERO_HASH } from '@ariestools/sdk'\nimport { isHashMeta } from '@xyo-network/sdk'\nimport type { InBlockPayloadValidationFunction } from '@xyo-network/xl1-sdk'\nimport {\n BoundWitnessSignaturesValidator, InBlockPayloadValidationError, isTransactionBoundWitness, validateTransaction,\n} from '@xyo-network/xl1-sdk'\n\nexport const validateTransactionInBlock: InBlockPayloadValidationFunction = async (\n context,\n payload,\n block,\n): Promise<InBlockPayloadValidationError[]> => {\n const errors: InBlockPayloadValidationError[] = []\n try {\n if (isTransactionBoundWitness(payload) && isHashMeta(payload)) {\n const txErrors = await validateTransaction({ ...context, chainId: block[0].chain }, [payload, block[1]])\n for (const txError of txErrors) {\n errors.push(new InBlockPayloadValidationError(\n payload._hash,\n block,\n payload,\n `TransactionValidation error: ${txError}`,\n txError,\n ))\n }\n const txSignatureErrors = await BoundWitnessSignaturesValidator(payload)\n for (const txSignatureError of txSignatureErrors) {\n errors.push(new InBlockPayloadValidationError(\n payload._hash,\n block,\n payload,\n `BoundWitnessSignaturesValidator error: ${txSignatureError}`,\n txSignatureError,\n ))\n }\n } else {\n errors.push(new InBlockPayloadValidationError(payload._hash, block, payload, 'Payload failed isTransactionBoundWitness or isHashMeta'))\n }\n } catch (ex) {\n errors.push(new InBlockPayloadValidationError(payload._hash ?? ZERO_HASH, block, payload, `validation excepted: ${String(ex)}`, ex))\n }\n return errors\n}\n", "import type { IdentityFunction } from '@ariestools/sdk'\nimport type { Payload } from '@xyo-network/sdk'\nimport { isHashMeta } from '@xyo-network/sdk'\nimport type { HydratedBlockWithHashMeta, InBlockPayloadValidationFunctionContext } from '@xyo-network/xl1-sdk'\n\nimport { isElevatedFromBlock } from './isElevatedFromBlock.ts'\nimport { validateElevatedFromBlock } from './validateElevatedFromBlock.ts'\nimport { validateElevatedFromTransaction } from './validateElevatedFromTransaction.ts'\n\nexport const validateTypedPayloadInBlock = async <T extends Payload>(\n context: InBlockPayloadValidationFunctionContext,\n payload: Payload,\n block: HydratedBlockWithHashMeta,\n identityFunction: IdentityFunction<T>,\n): Promise<Error[]> => {\n const errors: Error[] = []\n try {\n if (identityFunction(payload) && isHashMeta(payload)) {\n if (isElevatedFromBlock(payload, block)) {\n errors.push(...(await validateElevatedFromBlock(context, payload, block)))\n } else {\n errors.push(...(await validateElevatedFromTransaction(context, payload, block)))\n }\n } else {\n errors.push(new Error('Payload failed identityFunction or isElevated or isStorageMeta'))\n }\n } catch (ex) {\n errors.push(new Error(`Failed validateTypedPayloadInBlock: ${String(ex)}`))\n }\n return errors\n}\n//\n", "import { ZERO_HASH } from '@ariestools/sdk'\nimport type { InBlockPayloadValidationFunction } from '@xyo-network/xl1-sdk'\nimport { InBlockPayloadValidationError, isBridgeDestinationObservation } from '@xyo-network/xl1-sdk'\n\nimport { validateTypedPayloadInBlock } from '../lib/index.ts'\n\nexport const validateBridgeDestinationObservationInBlock: InBlockPayloadValidationFunction = async (\n context,\n payload,\n block,\n) => {\n const errors: InBlockPayloadValidationError[] = []\n try {\n const typedErrors = await validateTypedPayloadInBlock(context, payload, block, isBridgeDestinationObservation)\n for (const typedError of typedErrors) {\n errors.push(new InBlockPayloadValidationError(payload._hash, block, payload, `validateTypedPayloadInBlock error: ${typedError}`, typedError))\n }\n } catch (ex) {\n errors.push(new InBlockPayloadValidationError(\n (block?.[0])?._hash ?? ZERO_HASH,\n block,\n payload,\n `Failed validateBridgeObservationInBlock: ${String(ex)}`,\n ex,\n ))\n }\n return errors\n}\n", "import { ZERO_HASH } from '@ariestools/sdk'\nimport type { InBlockPayloadValidationFunction } from '@xyo-network/xl1-sdk'\nimport { InBlockPayloadValidationError, isBridgeIntent } from '@xyo-network/xl1-sdk'\n\nimport { validateTypedPayloadInBlock } from '../lib/index.ts'\n\nexport const validateBridgeIntentInBlock: InBlockPayloadValidationFunction = async (\n context,\n payload,\n block,\n) => {\n const errors: InBlockPayloadValidationError[] = []\n try {\n const typedErrors = await validateTypedPayloadInBlock(context, payload, block, isBridgeIntent)\n for (const typedError of typedErrors) {\n errors.push(new InBlockPayloadValidationError(payload._hash, block, payload, `validateTypedPayloadInBlock error: ${typedError}`, typedError))\n }\n } catch (ex) {\n errors.push(new InBlockPayloadValidationError(\n (block?.[0])?._hash ?? ZERO_HASH,\n block,\n payload,\n `Failed validateBridgeIntentInBlock: ${String(ex)}`,\n ex,\n ))\n }\n return errors\n}\n", "import { ZERO_HASH } from '@ariestools/sdk'\nimport type { InBlockPayloadValidationFunction } from '@xyo-network/xl1-sdk'\nimport { InBlockPayloadValidationError, isBridgeSourceObservation } from '@xyo-network/xl1-sdk'\n\nimport { validateTypedPayloadInBlock } from '../lib/index.ts'\n\nexport const validateBridgeSourceObservationInBlock: InBlockPayloadValidationFunction = async (\n context,\n payload,\n block,\n) => {\n const errors: InBlockPayloadValidationError[] = []\n try {\n const typedErrors = await validateTypedPayloadInBlock(context, payload, block, isBridgeSourceObservation)\n for (const typedError of typedErrors) {\n errors.push(new InBlockPayloadValidationError(payload._hash, block, payload, `validateTypedPayloadInBlock error: ${typedError}`, typedError))\n }\n } catch (ex) {\n errors.push(new InBlockPayloadValidationError(\n (block?.[0])?._hash ?? ZERO_HASH,\n block,\n payload,\n `Failed validateBridgeObservationInBlock: ${String(ex)}`,\n ex,\n ))\n }\n return errors\n}\n", "import { ZERO_HASH } from '@ariestools/sdk'\nimport type { InBlockPayloadValidationFunction } from '@xyo-network/xl1-sdk'\nimport { InBlockPayloadValidationError, isChainStakeIntent } from '@xyo-network/xl1-sdk'\n\nimport { validateTypedPayloadInBlock } from '../lib/index.ts'\n\nexport const validateChainStakeIntentInBlock: InBlockPayloadValidationFunction = async (\n context,\n payload,\n block,\n) => {\n const errors: InBlockPayloadValidationError[] = []\n try {\n const typedErrors = await validateTypedPayloadInBlock(context, payload, block, isChainStakeIntent)\n for (const typedError of typedErrors) {\n errors.push(new InBlockPayloadValidationError(payload._hash, block, payload, `validateTypedPayloadInBlock error: ${typedError}`, typedError))\n }\n } catch (ex) {\n errors.push(new InBlockPayloadValidationError(\n block[0]?._hash ?? ZERO_HASH,\n block,\n payload,\n `validation excepted: ${String(ex)}`,\n ex,\n ))\n }\n return errors\n}\n", "import { ZERO_HASH } from '@ariestools/sdk'\nimport type { InBlockPayloadValidationFunction } from '@xyo-network/xl1-sdk'\nimport { InBlockPayloadValidationError, isHashPayload } from '@xyo-network/xl1-sdk'\n\nimport { validateTypedPayloadInBlock } from '../lib/index.ts'\n\nexport const validateHashInBlock: InBlockPayloadValidationFunction = async (\n context,\n payload,\n block,\n) => {\n const errors: (InBlockPayloadValidationError)[] = []\n try {\n const typedErrors = await validateTypedPayloadInBlock(context, payload, block, isHashPayload)\n for (const typedError of typedErrors) {\n errors.push(new InBlockPayloadValidationError(payload._hash, block, payload, `validateTypedPayloadInBlock error: ${typedError}`, typedError))\n }\n } catch (ex) {\n errors.push(new InBlockPayloadValidationError(\n (block?.[0])?._hash ?? ZERO_HASH,\n block,\n payload,\n `validation excepted: ${String(ex)}`,\n ex,\n ))\n }\n return errors\n}\n", "import { ZERO_HASH } from '@ariestools/sdk'\nimport { isSchemaPayload } from '@xyo-network/sdk'\nimport type { InBlockPayloadValidationFunction } from '@xyo-network/xl1-sdk'\nimport { InBlockPayloadValidationError } from '@xyo-network/xl1-sdk'\n\nimport { validateTypedPayloadInBlock } from '../lib/index.ts'\n\nexport const validateSchemaInBlock: InBlockPayloadValidationFunction = async (\n context,\n payload,\n block,\n) => {\n const errors: InBlockPayloadValidationError[] = []\n try {\n const typedErrors = await validateTypedPayloadInBlock(context, payload, block, isSchemaPayload)\n for (const typedError of typedErrors) {\n errors.push(new InBlockPayloadValidationError(payload._hash, block, payload, `validateTypedPayloadInBlock error: ${typedError}`, typedError))\n }\n } catch (ex) {\n errors.push(new InBlockPayloadValidationError(\n (block?.[0])?._hash ?? ZERO_HASH,\n block,\n payload,\n `Failed validateSchemaInBlock: ${String(ex)}`,\n ex,\n ))\n }\n return errors\n}\n", "import { ZERO_HASH } from '@ariestools/sdk'\nimport type { InBlockPayloadValidationFunction } from '@xyo-network/xl1-sdk'\nimport { InBlockPayloadValidationError, isTimePayload } from '@xyo-network/xl1-sdk'\n\nimport { validateTypedPayloadInBlock } from '../lib/index.ts'\n\nexport const validateTimeInBlock: InBlockPayloadValidationFunction = async (\n context,\n payload,\n block,\n) => {\n const errors: InBlockPayloadValidationError[] = []\n try {\n const typedErrors = await validateTypedPayloadInBlock(context, payload, block, isTimePayload)\n for (const typedError of typedErrors) {\n errors.push(new InBlockPayloadValidationError(payload._hash, block, payload, `validateTypedPayloadInBlock error: ${typedError}`, typedError))\n }\n } catch (ex) {\n errors.push(new InBlockPayloadValidationError(\n (block?.[0])?._hash ?? ZERO_HASH,\n block,\n payload,\n `Failed validateTimeInBlock: ${String(ex)}`,\n ex,\n ))\n }\n return errors\n}\n", "import { ZERO_HASH } from '@ariestools/sdk'\nimport type { InBlockPayloadValidationFunction } from '@xyo-network/xl1-sdk'\nimport { InBlockPayloadValidationError, isTransferPayload } from '@xyo-network/xl1-sdk'\n\nimport { validateTypedPayloadInBlock } from '../lib/index.ts'\n\nexport const validateTransferInBlock: InBlockPayloadValidationFunction = async (\n context,\n payload,\n block,\n) => {\n const errors: InBlockPayloadValidationError[] = []\n try {\n const typedErrors = await validateTypedPayloadInBlock(context, payload, block, isTransferPayload)\n for (const typedError of typedErrors) {\n errors.push(new InBlockPayloadValidationError(payload._hash, block, payload, `validateTypedPayloadInBlock error: ${typedError}`, typedError))\n }\n } catch (ex) {\n errors.push(new InBlockPayloadValidationError(\n (block?.[0])?._hash ?? ZERO_HASH,\n block,\n payload,\n `Failed validateTransferInBlock: ${String(ex)}`,\n ex,\n ))\n }\n return errors\n}\n", "import { ZERO_HASH } from '@ariestools/sdk'\nimport { isHashMeta } from '@xyo-network/sdk'\nimport type { HydratedBlockValidationFunction, HydratedTransactionValidationFunction } from '@xyo-network/xl1-sdk'\nimport { HydratedBlockValidationError, isTransactionBoundWitness } from '@xyo-network/xl1-sdk'\n\n/**\n * Builds a block-level validator that runs `transfersValidator` against every transaction\n * in the block, mapping any transaction errors to block errors. This is how the\n * reward-redemption signing gate (a `TransactionTransfersValidator`) is enforced during\n * block validation \u2014 pass the result as an `additionalValidators` entry to\n * `validateHydratedBlock`.\n */\nexport function TransactionTransfersInBlockValidatorFactory(\n transfersValidator: HydratedTransactionValidationFunction,\n): HydratedBlockValidationFunction {\n return async (context, hydratedBlock) => {\n const [block, payloads] = hydratedBlock\n const errors: HydratedBlockValidationError[] = []\n try {\n for (const payload of payloads) {\n if (isTransactionBoundWitness(payload) && isHashMeta(payload)) {\n const txErrors = await transfersValidator({ ...context, chainId: block.chain }, [payload, payloads])\n for (const txError of txErrors) {\n errors.push(new HydratedBlockValidationError(payload._hash, hydratedBlock, `transfer authorization error: ${txError}`, txError))\n }\n }\n }\n } catch (ex) {\n errors.push(new HydratedBlockValidationError(\n block?._hash ?? ZERO_HASH,\n hydratedBlock,\n `Failed TransactionTransfersInBlockValidator: ${String(ex)}`,\n ex,\n ))\n }\n return errors\n }\n}\n", "import { spanRootAsync, ZERO_HASH } from '@ariestools/sdk'\nimport type { ChainId, HydratedBlockStateValidationFunction } from '@xyo-network/xl1-sdk'\nimport { HydratedBlockStateValidationError } from '@xyo-network/xl1-sdk'\n\nimport { validateHydratedBlock } from '../hydratedBlock/index.ts'\nimport { RequiredBalanceBlockStateValidator } from './validators/index.ts'\n\nexport const validateHydratedBlockState: HydratedBlockStateValidationFunction = async (\n context,\n hydratedBlock,\n additionalValidators = [],\n) => {\n return await spanRootAsync('validateHydratedBlockState', async () => {\n const errors: HydratedBlockStateValidationError[] = []\n let chainId: ChainId | undefined\n try {\n chainId = await context.chainIdAtBlockNumber(hydratedBlock[0].block)\n const validateHydratedBlockErrors = await validateHydratedBlock(context, hydratedBlock, context.chainIdAtBlockNumber)\n for (const validateHydratedBlockError of validateHydratedBlockErrors) {\n errors.push(new HydratedBlockStateValidationError(\n hydratedBlock[0]._hash,\n chainId,\n hydratedBlock,\n `validateBlock error: ${validateHydratedBlockError}`,\n validateHydratedBlockError,\n ))\n }\n const validators: HydratedBlockStateValidationFunction[] = [\n RequiredBalanceBlockStateValidator,\n ...additionalValidators,\n ]\n for (const validator of validators) {\n errors.push(...(await Promise.resolve(validator(context, hydratedBlock))))\n }\n } catch (ex) {\n errors.push(new HydratedBlockStateValidationError(\n hydratedBlock?.[0]?._hash ?? ZERO_HASH,\n chainId ?? '00' as ChainId,\n hydratedBlock,\n `Failed validateHydratedBlockState: ${String(ex)}`,\n ex,\n ))\n }\n return errors\n }, context)\n}\n", "import type { Address, Hash } from '@ariestools/sdk'\nimport { spanRootAsync, ZERO_HASH } from '@ariestools/sdk'\nimport type { ChainId, HydratedBlockStateValidationFunction } from '@xyo-network/xl1-sdk'\nimport {\n AttoXL1, HydratedBlockStateValidationError,\n isSignedTransactionBoundWitnessWithHashMeta,\n netBalancesForPayloads, XYO_ZERO_ADDRESS,\n} from '@xyo-network/xl1-sdk'\n\nfunction offendingTransactionHashesForAddress(block: Parameters<HydratedBlockStateValidationFunction>[1], address: Address): Hash[] {\n const hashes: Hash[] = []\n for (const payload of block[1]) {\n if (isSignedTransactionBoundWitnessWithHashMeta(payload) && payload.from === address) {\n hashes.push(payload._hash)\n }\n }\n return hashes\n}\n\nexport const RequiredBalanceBlockStateValidator: HydratedBlockStateValidationFunction = async (\n context,\n block,\n) => {\n return await spanRootAsync('RequiredBalanceBlockStateValidator', async () => {\n const errors: HydratedBlockStateValidationError[] = []\n let chainId = '00' as ChainId\n try {\n // TODO: Filter by non-producer elevated payloads\n // to allow for transfers from ZERO address\n const netBalances = netBalancesForPayloads({ singletons: {} }, (block[1]))\n const netBalanceAddresses = Object.keys(netBalances) as Address[]\n const requiredBalances: Record<string, bigint> = {}\n for (const address of netBalanceAddresses) {\n const propertyKey = String(address)\n const netBalance = (netBalances as Record<string, bigint>)[propertyKey]\n if (netBalance < 0n) {\n requiredBalances[propertyKey] = -netBalance\n }\n }\n const previous = block[0].previous\n if (previous === null) return [new HydratedBlockStateValidationError(\n block?.[0]?._hash ?? ZERO_HASH,\n '00' as ChainId,\n block,\n 'Insufficient funds because first block',\n )]\n chainId = await context.chainIdAtBlockNumber(block[0].block)\n await spanRootAsync('RequiredBalanceBlockStateValidator|balancesLoop', async () => {\n for (const [address, reqBalance] of Object.entries(requiredBalances)) {\n const propertyKey = String(address)\n const result = await context.accountBalance.accountBalances([address as Address], { head: previous })\n const balance = (result as Record<string, bigint>)[propertyKey] ?? AttoXL1(0n)\n if (address !== XYO_ZERO_ADDRESS && reqBalance > balance) {\n const offendingTransactionHashes = offendingTransactionHashesForAddress(block, address as Address)\n errors.push(new HydratedBlockStateValidationError(\n block?.[0]?._hash ?? ZERO_HASH,\n chainId,\n block,\n `insufficient balance for ${address} ${balance} < ${reqBalance}`,\n undefined,\n offendingTransactionHashes.length > 0 ? offendingTransactionHashes : undefined,\n ))\n }\n }\n }, context)\n } catch (ex) {\n errors.push(new HydratedBlockStateValidationError(\n block?.[0]?._hash ?? ZERO_HASH,\n chainId,\n block,\n `Failed RequiredBalanceBlockStateValidator: ${String(ex)}`,\n ex,\n ))\n }\n return errors\n }, context)\n}\n", "import { spanRootAsync, ZERO_HASH } from '@ariestools/sdk'\nimport type { HydratedTransactionStateValidationFunction } from '@xyo-network/xl1-sdk'\nimport { HydratedTransactionValidationError } from '@xyo-network/xl1-sdk'\n\nimport { RequiredBalanceTransactionStateValidator } from './validators/index.ts'\n\nexport const validateHydratedTransactionState: HydratedTransactionStateValidationFunction = async (\n context,\n tx,\n) => {\n return await spanRootAsync('validateHydratedTransactionState', async () => {\n const errors: HydratedTransactionValidationError[] = []\n try {\n const validators: HydratedTransactionStateValidationFunction[] = [\n RequiredBalanceTransactionStateValidator,\n ]\n for (const validator of validators) {\n errors.push(...(await Promise.resolve(validator(context, tx))))\n }\n } catch (ex) {\n errors.push(new HydratedTransactionValidationError(\n tx?.[0]?._hash ?? ZERO_HASH,\n tx,\n `Failed validateHydratedTransactionState: ${String(ex)}`,\n ex,\n ))\n }\n return errors\n }, context)\n}\n", "import type { Address } from '@ariestools/sdk'\nimport { spanRootAsync, ZERO_HASH } from '@ariestools/sdk'\nimport type { HydratedTransactionStateValidationFunction } from '@xyo-network/xl1-sdk'\nimport {\n AttoXL1,\n HydratedTransactionValidationError,\n HydratedTransactionWrapper,\n netBalancesForPayloads,\n transactionRequiredGas,\n XYO_ZERO_ADDRESS,\n} from '@xyo-network/xl1-sdk'\n\ntype ValidatorContext = Parameters<HydratedTransactionStateValidationFunction>[0]\ntype ValidatorTx = Parameters<HydratedTransactionStateValidationFunction>[1]\n\n/**\n * For each address with a negative net balance, look up the actual on-chain\n * balance at the current head and emit an `insufficient balance` error if it\n * can't cover the required amount.\n */\nasync function balanceShortfallErrors(\n context: ValidatorContext,\n tx: ValidatorTx,\n requiredBalances: Record<string, bigint>,\n): Promise<HydratedTransactionValidationError[]> {\n const errors: HydratedTransactionValidationError[] = []\n const requiredAddresses = Object.keys(requiredBalances)\n if (requiredAddresses.length === 0) return errors\n const [headBlock] = await context.blockViewer.currentBlock()\n const balances = await context.accountBalanceViewer.accountBalances(\n requiredAddresses as Address[],\n { head: headBlock._hash },\n )\n const balancesByKey = balances as Record<string, bigint>\n for (const address of requiredAddresses) {\n const propertyKey = String(address)\n const reqBalance = requiredBalances[propertyKey]\n const balance = balancesByKey[propertyKey] ?? AttoXL1(0n)\n if (address !== XYO_ZERO_ADDRESS && reqBalance > balance) {\n errors.push(new HydratedTransactionValidationError(\n tx?.[0]?._hash ?? ZERO_HASH,\n tx,\n `insufficient balance for ${address} ${balance} < ${reqBalance}`,\n ))\n }\n }\n return errors\n}\n\nexport const RequiredBalanceTransactionStateValidator: HydratedTransactionStateValidationFunction = async (\n context,\n tx,\n) => {\n return await spanRootAsync('RequiredBalanceTransactionStateValidator', async () => {\n const errors: HydratedTransactionValidationError[] = []\n try {\n const netBalances = netBalancesForPayloads({ singletons: {} }, tx[1]) as Record<string, bigint>\n\n const wrapper = await HydratedTransactionWrapper.parse(tx)\n const from = wrapper.boundWitness.from as Address\n const gasRequired = transactionRequiredGas(tx)\n // Declared gas limit must cover the gas the tx will actually consume.\n // Without this check a tx could pass admission with `gasLimit < required`\n // and either fail at execution or get unfairly under-charged for the\n // resources it actually uses. Reported alongside any balance shortfall\n // so the caller sees every reason the tx was rejected.\n if (wrapper.fees.gasLimit < gasRequired) {\n errors.push(new HydratedTransactionValidationError(\n tx?.[0]?._hash ?? ZERO_HASH,\n tx,\n `fees.gasLimit ${wrapper.fees.gasLimit} < required gas ${gasRequired}`,\n ))\n }\n // Charge the MAX fee budget at admission \u2014 same rule the block validator\n // (`BlockCumulativeBalanceValidator`) uses post-submit: `base + priority\n // + gasLimit`. Using `gasRequired \u00D7 gasPrice` here (the expected cost)\n // is strictly weaker than the block validator and lets txs whose\n // declared `gasLimit` exceeds the sender's balance through admission.\n // They then fail block validation with \"Cumulative outflow ... exceeds\n // available balance\" and the chain wedges (producer self-mutes for\n // ~150s after a successful-looking submit). Tracked in the\n // api-local-mongodb-beta repro: 783 stuck pending txs of this exact\n // shape, all with gasLimit \u2248 23.6 XL1 against \u2248 12 XL1 balance.\n const baseCost = wrapper.fees.base\n const priorityCost = wrapper.fees.priority\n const maxGasCost = wrapper.fees.gasLimit\n const fromKey = String(from)\n netBalances[fromKey] = (netBalances[fromKey] ?? 0n) - baseCost - priorityCost - maxGasCost\n\n const requiredBalances: Record<string, bigint> = {}\n for (const [address, net] of Object.entries(netBalances)) {\n const propertyKey = String(address)\n if (net < 0n) requiredBalances[propertyKey] = -net\n }\n\n errors.push(...(await balanceShortfallErrors(context, tx, requiredBalances)))\n } catch (ex) {\n errors.push(new HydratedTransactionValidationError(\n tx?.[0]?._hash ?? ZERO_HASH,\n tx,\n `Failed RequiredBalanceTransactionStateValidator: ${String(ex)}`,\n ex,\n ))\n }\n return errors\n }, context)\n}\n"],
5
- "mappings": "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",
6
- "names": ["ZERO_HASH", "BlockValidationError", "ZERO_HASH", "BlockValidationError", "ZERO_HASH", "BlockValidationError", "ZERO_HASH", "BlockValidationError", "error", "ZERO_HASH", "BlockValidationError", "error", "BlockValidationError", "ZERO_HASH", "ZERO_HASH", "HydratedBlockValidationError", "ZERO_HASH", "ZERO_HASH", "BoundWitnessSchema", "InBlockPayloadValidationError", "InBlockPayloadValidationError", "transactionsFromHydratedBlock", "ZERO_HASH", "InBlockPayloadValidationError", "isTransactionBoundWitness", "isHashMeta", "isHashMeta", "ZERO_HASH", "InBlockPayloadValidationError", "InBlockPayloadValidationError", "ZERO_HASH", "ZERO_HASH", "InBlockPayloadValidationError", "InBlockPayloadValidationError", "ZERO_HASH", "ZERO_HASH", "InBlockPayloadValidationError", "InBlockPayloadValidationError", "ZERO_HASH", "ZERO_HASH", "InBlockPayloadValidationError", "InBlockPayloadValidationError", "ZERO_HASH", "ZERO_HASH", "InBlockPayloadValidationError", "InBlockPayloadValidationError", "ZERO_HASH", "ZERO_HASH", "InBlockPayloadValidationError", "InBlockPayloadValidationError", "ZERO_HASH", "ZERO_HASH", "InBlockPayloadValidationError", "InBlockPayloadValidationError", "ZERO_HASH", "ZERO_HASH", "InBlockPayloadValidationError", "InBlockPayloadValidationError", "ZERO_HASH", "BoundWitnessSchema", "InBlockPayloadValidationError", "ZERO_HASH", "error", "ZERO_HASH", "ZERO_HASH", "isHashMeta", "HydratedBlockValidationError", "isTransactionBoundWitness", "HydratedBlockValidationError", "ZERO_HASH", "spanRootAsync", "ZERO_HASH", "HydratedBlockStateValidationError", "ZERO_HASH", "spanRootAsync", "HydratedBlockStateValidationError", "ZERO_HASH", "spanRootAsync", "ZERO_HASH", "HydratedTransactionValidationError", "spanRootAsync", "ZERO_HASH", "AttoXL1", "netBalancesForPayloads", "XYO_ZERO_ADDRESS", "spanRootAsync", "HydratedTransactionValidationError", "ZERO_HASH"]
3
+ "sources": ["../../src/modules/validation/block/validateBlock.ts", "../../src/modules/validation/block/validators/AllowedPayloadSchemas.ts", "../../src/modules/validation/block/validators/BoundWitness.ts", "../../src/modules/validation/block/validators/Fields.ts", "../../src/modules/validation/block/validators/JsonSchema.ts", "../../src/modules/validation/block/validators/PreviousHash.ts", "../../src/modules/validation/hydratedBlock/validateHydratedBlock.ts", "../../src/modules/validation/hydratedBlock/validators/Payloads.ts", "../../src/modules/validation/elevatedPayload/validatePayloadInBlock.ts", "../../src/modules/validation/elevatedPayload/lib/findElevatingTransaction.ts", "../../src/modules/validation/elevatedPayload/lib/isElevatedFromBlock.ts", "../../src/modules/validation/elevatedPayload/lib/validateElevatedFromBlock.ts", "../../src/modules/validation/elevatedPayload/lib/validateElevatedFromTransaction.ts", "../../src/modules/validation/elevatedPayload/lib/validateSlashPayloadInBlock.ts", "../../src/modules/validation/elevatedPayload/lib/validateTransactionInBlock.ts", "../../src/modules/validation/elevatedPayload/lib/validateTypedPayloadInBlock.ts", "../../src/modules/validation/elevatedPayload/payloads/validateBridgeDestinationObservationInBlock.ts", "../../src/modules/validation/elevatedPayload/payloads/validateBridgeIntentInBlock.ts", "../../src/modules/validation/elevatedPayload/payloads/validateBridgeSourceObservationInBlock.ts", "../../src/modules/validation/elevatedPayload/payloads/validateChainStakeIntentInBlock.ts", "../../src/modules/validation/elevatedPayload/payloads/validateHashInBlock.ts", "../../src/modules/validation/elevatedPayload/payloads/validateSchemaInBlock.ts", "../../src/modules/validation/elevatedPayload/payloads/validateSlashAdjudicationInBlock.ts", "../../src/modules/validation/elevatedPayload/payloads/validateSlashChallengeInBlock.ts", "../../src/modules/validation/elevatedPayload/payloads/validateSlashCommitInBlock.ts", "../../src/modules/validation/elevatedPayload/payloads/validateSlashEvidenceInBlock.ts", "../../src/modules/validation/elevatedPayload/payloads/validateSlashRequestInBlock.ts", "../../src/modules/validation/elevatedPayload/payloads/validateTimeInBlock.ts", "../../src/modules/validation/elevatedPayload/payloads/validateTransferInBlock.ts", "../../src/modules/validation/hydratedBlock/validators/TransactionTransfersInBlock.ts", "../../src/modules/validation/hydratedBlockState/validateHydratedBlockState.ts", "../../src/modules/validation/hydratedBlockState/validators/RequiredBalance.ts", "../../src/modules/validation/hydratedTransactionState/validateHydratedTransactionState.ts", "../../src/modules/validation/hydratedTransactionState/validators/RequiredBalance.ts"],
4
+ "sourcesContent": ["import { ZERO_HASH } from '@ariestools/sdk'\nimport type { WithStorageMeta } from '@xyo-network/sdk'\nimport type {\n BaseContext,\n BlockBoundWitness, BlockValidatorFunction, ChainId,\n} from '@xyo-network/xl1-sdk'\nimport { BlockValidationError } from '@xyo-network/xl1-sdk'\n\nimport {\n BlockAllowedPayloadSchemasValidator,\n BlockBoundWitnessValidator,\n BlockFieldsValidator, BlockPreviousHashValidator,\n} from './validators/index.ts'\n\nexport const validateBlock = async (\n context: BaseContext,\n block: BlockBoundWitness,\n chainId?: ChainId,\n additionalValidators: BlockValidatorFunction[] = [],\n): Promise<BlockValidationError[]> => {\n const errors: BlockValidationError[] = []\n try {\n const validators: BlockValidatorFunction[] = [\n BlockBoundWitnessValidator,\n BlockFieldsValidator,\n BlockPreviousHashValidator,\n BlockAllowedPayloadSchemasValidator,\n ...additionalValidators,\n ]\n for (const validator of validators) {\n errors.push(...(await Promise.resolve(validator(context, block, chainId))))\n }\n } catch (ex) {\n errors.push(new BlockValidationError((block as WithStorageMeta<BlockBoundWitness>)?._hash ?? ZERO_HASH, block, 'validation excepted', ex))\n }\n return errors\n}\n", "import { ZERO_HASH } from '@ariestools/sdk'\nimport type { WithStorageMeta } from '@xyo-network/sdk'\nimport type { BlockBoundWitness, BlockValidatorFunction } from '@xyo-network/xl1-sdk'\nimport {\n BlockValidationError,\n isAllowedBlockPayloadSchema,\n} from '@xyo-network/xl1-sdk'\n\nexport const BlockAllowedPayloadSchemasValidator: BlockValidatorFunction = (\n context,\n block,\n) => {\n const errors: BlockValidationError[] = []\n try {\n for (const schema of block.payload_schemas) {\n if (!isAllowedBlockPayloadSchema(schema)) {\n errors.push(new BlockValidationError(\n (block as WithStorageMeta<BlockBoundWitness>)?._hash ?? ZERO_HASH,\n block,\n `payload schema not allowed in block: ${String(schema)}`,\n ))\n }\n }\n } catch (ex) {\n errors.push(new BlockValidationError(\n (block as WithStorageMeta<BlockBoundWitness>)?._hash ?? ZERO_HASH,\n block,\n `validation excepted: ${String(ex)}`,\n ex,\n ))\n }\n return errors\n}\n", "import { ZERO_HASH } from '@ariestools/sdk'\nimport type { WithStorageMeta } from '@xyo-network/sdk'\nimport { BoundWitnessValidator } from '@xyo-network/sdk'\nimport type { BlockBoundWitness, BlockValidatorFunction } from '@xyo-network/xl1-sdk'\nimport { BlockValidationError } from '@xyo-network/xl1-sdk'\n\nconst error = (block: BlockBoundWitness, message: string): BlockValidationError =>\n new BlockValidationError((block as WithStorageMeta<BlockBoundWitness>)?._hash ?? ZERO_HASH, block, message)\n\n// Friendly pre-check for the same wallet/producer bug surfaced on the\n// transaction side: signatures emitted under `signatures` instead of\n// `$signatures`. Mirrors TransactionBoundWitnessValidator.\nconst checkSignaturesShape = (block: BlockBoundWitness): BlockValidationError[] => {\n const bw = block as unknown as Record<string, unknown>\n if (bw.$signatures === undefined) {\n return Array.isArray(bw.signatures)\n ? [error(block, 'BoundWitness has `signatures` but expected `$signatures` (signatures must be in the meta-prefixed `$signatures` key)')]\n : [error(block, 'BoundWitness is missing `$signatures`')]\n }\n return []\n}\n\n/**\n * Validates the block's BoundWitness wholistically by delegating to\n * `BoundWitnessValidator.validate()`. Mirrors TransactionBoundWitnessValidator\n * for blocks. Covers signatures (length parity + per-address elliptic-curve\n * verification against the BW data hash), addresses uniqueness,\n * payload_hashes/payload_schemas length parity, schemas, and top-level\n * schema check.\n */\nexport const BlockBoundWitnessValidator: BlockValidatorFunction = async (\n _context,\n block,\n) => {\n try {\n const shapeErrors = checkSignaturesShape(block)\n if (shapeErrors.length > 0) return shapeErrors\n const bwValidator = new BoundWitnessValidator(block)\n const bwErrors = await bwValidator.validate()\n return bwErrors.map(e => error(block, `BoundWitness validation: ${e.message}`))\n } catch (ex) {\n return [error(block, `Failed BlockBoundWitnessValidator: ${String(ex)}`)]\n }\n}\n", "import type { Hash } from '@ariestools/sdk'\nimport { isDefined, ZERO_HASH } from '@ariestools/sdk'\nimport type { WithStorageMeta } from '@xyo-network/sdk'\nimport { BoundWitnessSchema } from '@xyo-network/sdk'\nimport type {\n BaseContext,\n BlockBoundWitness, BlockValidatorFunction, ChainId,\n} from '@xyo-network/xl1-sdk'\nimport { BlockValidationError } from '@xyo-network/xl1-sdk'\n\nexport const BlockFieldsValidator: BlockValidatorFunction = (\n context: BaseContext,\n block: BlockBoundWitness,\n chainId?: ChainId,\n) => {\n const errors: BlockValidationError[] = []\n try {\n if (isDefined(chainId) && block.chain !== chainId.toLowerCase()) {\n errors.push(new BlockValidationError((block as WithStorageMeta<BlockBoundWitness>)?._hash ?? ZERO_HASH, block, 'Invalid chain id'))\n }\n\n // get transaction hashes\n const txHashes: Hash[] = []\n for (let i = 0; i < block.payload_hashes.length; i++) {\n if (block.payload_schemas[i] === BoundWitnessSchema) {\n txHashes.push(block.payload_hashes[i])\n }\n }\n\n // check if transaction hashes are unique\n const uniqueTxHashes = new Set(txHashes)\n if (uniqueTxHashes.size < txHashes.length) {\n errors.push(new BlockValidationError(\n (block as WithStorageMeta<BlockBoundWitness>)?._hash ?? ZERO_HASH,\n block,\n `Duplicate Transaction Hashes: ${txHashes.join(', ')}`,\n ))\n }\n } catch (ex) {\n errors.push(new BlockValidationError(\n (block as WithStorageMeta<BlockBoundWitness>)?._hash ?? ZERO_HASH,\n block,\n `validation excepted: ${String(ex)}`,\n ex,\n ))\n }\n return errors\n}\n", "import { ZERO_HASH } from '@ariestools/sdk'\nimport type { WithStorageMeta } from '@xyo-network/sdk'\nimport type {\n BaseContext, BlockBoundWitness, BlockValidatorFunction,\n} from '@xyo-network/xl1-sdk'\nimport { BlockBoundWitnessWithStorageMetaJsonSchema, BlockValidationError } from '@xyo-network/xl1-sdk'\nimport type { AnySchema } from 'ajv'\nimport { Ajv } from 'ajv'\n\nexport const BlockJsonSchemaValidator = (jsonSchema: AnySchema = BlockBoundWitnessWithStorageMetaJsonSchema): BlockValidatorFunction => {\n const ajv = new Ajv({ allErrors: true, strict: true })\n const validate = ajv.compile(jsonSchema)\n return async (\n context: BaseContext,\n block: BlockBoundWitness,\n ) => {\n const errors: BlockValidationError[] = []\n try {\n await validate(block)\n if ((validate.errors ?? []).length > 0) {\n const error = new BlockValidationError(\n (block as WithStorageMeta<BlockBoundWitness>)?._hash ?? ZERO_HASH,\n block,\n `failed JSON schema validation: ${ajv.errorsText(validate.errors, { separator: '\\n' })}`,\n )\n error.cause = validate.errors\n errors.push(error)\n }\n } catch (ex) {\n const error = new BlockValidationError(\n (block as WithStorageMeta<BlockBoundWitness>)?._hash ?? ZERO_HASH,\n block,\n `validation excepted: ${String(ex)}`,\n )\n error.cause = ex\n errors.push(error)\n }\n return errors\n }\n}\n", "import { isHash, ZERO_HASH } from '@ariestools/sdk'\nimport type { WithStorageMeta } from '@xyo-network/sdk'\nimport type { BlockBoundWitness, BlockValidatorFunction } from '@xyo-network/xl1-sdk'\nimport { BlockValidationError } from '@xyo-network/xl1-sdk'\n\nexport const BlockPreviousHashValidator: BlockValidatorFunction = (\n context,\n block,\n) => {\n const errors: BlockValidationError[] = []\n try {\n const blockNumber = block.block\n if (blockNumber > 0n) {\n // if this is not the first block, validate previous hashes\n if (!isHash(block.previous)) {\n errors.push(new BlockValidationError((block as WithStorageMeta<BlockBoundWitness>)?._hash ?? ZERO_HASH, block, 'previous hash is missing or invalid'))\n }\n } else if (blockNumber === 0) {\n // if this is the first block, validate previous hashes\n if (block.previous !== null) {\n errors.push(new BlockValidationError((block as WithStorageMeta<BlockBoundWitness>)?._hash ?? ZERO_HASH, block, 'previous hash should not be set'))\n }\n } else {\n // we have a negative block number\n errors.push(new BlockValidationError((block as WithStorageMeta<BlockBoundWitness>)?._hash ?? ZERO_HASH, block, 'invalid block number'))\n }\n } catch (ex) {\n const error = new BlockValidationError(\n (block as WithStorageMeta<BlockBoundWitness>)?._hash ?? ZERO_HASH,\n block,\n `Failed BlockPreviousHashValidator: ${String(ex)}`,\n )\n error.cause = ex\n errors.push(error)\n }\n return errors\n}\n", "import type { Promisable } from '@ariestools/sdk'\nimport { ZERO_HASH } from '@ariestools/sdk'\nimport type {\n BaseContext,\n BlockValidatorFunction, ChainId, HydratedBlockValidationFunction, HydratedBlockWithHashMeta,\n XL1BlockNumber,\n} from '@xyo-network/xl1-sdk'\nimport { BoundWitnessReferencesValidator, HydratedBlockValidationError } from '@xyo-network/xl1-sdk'\n\nimport { validateBlock } from '../block/index.ts'\nimport { PayloadsInBlockValidator } from './validators/index.ts'\n\nexport const validateHydratedBlock = async (\n context: BaseContext,\n hydratedBlock: HydratedBlockWithHashMeta,\n chainIdAtBlockNumber?: (blockNumber: XL1BlockNumber) => Promisable<ChainId>,\n additionalValidators: HydratedBlockValidationFunction[] = [],\n additionalBlockValidators: BlockValidatorFunction[] = [],\n) => {\n const errors: HydratedBlockValidationError[] = []\n try {\n const validateBlockErrors = await validateBlock(\n context,\n hydratedBlock[0],\n chainIdAtBlockNumber ? await chainIdAtBlockNumber(hydratedBlock[0].block) : undefined,\n additionalBlockValidators,\n )\n for (const validateBlockError of validateBlockErrors) {\n errors.push(new HydratedBlockValidationError(hydratedBlock[0]._hash, hydratedBlock, `validateBlock error: ${validateBlockError}`, validateBlockError))\n }\n const bwRefErrors = await BoundWitnessReferencesValidator()(hydratedBlock)\n for (const bwRefError of bwRefErrors) {\n errors.push(new HydratedBlockValidationError(hydratedBlock[0]._hash, hydratedBlock, `boundwitness reference error: ${bwRefError}`, bwRefError))\n }\n const validators: HydratedBlockValidationFunction[] = [\n PayloadsInBlockValidator,\n ...additionalValidators,\n ]\n for (const validator of validators) {\n errors.push(...(await Promise.resolve(validator(context, hydratedBlock, chainIdAtBlockNumber))))\n }\n } catch (ex) {\n errors.push(new HydratedBlockValidationError(\n hydratedBlock?.[0]?._hash ?? ZERO_HASH,\n hydratedBlock,\n `Failed validateHydratedBlock: ${String(ex)}`,\n ex,\n ))\n }\n return errors\n}\n", "import { ZERO_HASH } from '@ariestools/sdk'\nimport type { Payload, WithHashMeta } from '@xyo-network/sdk'\nimport type { HydratedBlockValidationFunction } from '@xyo-network/xl1-sdk'\nimport { HydratedBlockValidationError } from '@xyo-network/xl1-sdk'\n\nimport { validatePayloadInBlock } from '../../elevatedPayload/index.ts'\n\nexport const PayloadsInBlockValidator: HydratedBlockValidationFunction = async (\n context,\n [block, payloads],\n) => {\n const errors: HydratedBlockValidationError[] = []\n try {\n const payloadMap: Partial<Record<string, WithHashMeta<Payload>>> = {}\n for (const payload of payloads) {\n const propertyKey = String(payload._hash)\n payloadMap[propertyKey] = payload\n }\n\n const remainingPayloads = { ...payloadMap }\n\n for (let i = 0; i < block.payload_hashes.length; i++) {\n const propertyKey = String(block.payload_hashes[i])\n const schema = block.payload_schemas[i]\n const payload = payloadMap[propertyKey]\n if (payload) {\n const payloadInBlockErrors = await validatePayloadInBlock(context, payload, [block, payloads])\n for (const payloadInBlockError of payloadInBlockErrors) {\n errors.push(new HydratedBlockValidationError(\n block?._hash ?? ZERO_HASH,\n [block, payloads],\n `validatePayloadInBlock error: ${payloadInBlockError}`,\n payloadInBlockError,\n ))\n }\n delete remainingPayloads[propertyKey]\n } else {\n errors.push(new HydratedBlockValidationError(block?._hash ?? ZERO_HASH, [block, payloads], `missing payload ${propertyKey} ${schema}`))\n }\n }\n\n if (Object.keys(remainingPayloads).length > 0) {\n errors.push(new HydratedBlockValidationError(block?._hash ?? ZERO_HASH, [block, payloads], `extra payloads ${Object.keys(payloadMap).join(', ')}`))\n }\n } catch (ex) {\n errors.push(new HydratedBlockValidationError(\n block?._hash ?? ZERO_HASH,\n [block, payloads],\n `Failed PayloadsInBlockValidator: ${String(ex)}`,\n ex,\n ))\n }\n\n return errors\n}\n", "import { ZERO_HASH } from '@ariestools/sdk'\nimport type { Schema } from '@xyo-network/sdk'\nimport { BoundWitnessSchema, SchemaSchema } from '@xyo-network/sdk'\nimport type { InBlockPayloadValidationFunction } from '@xyo-network/xl1-sdk'\nimport {\n BridgeDestinationObservationSchema, BridgeIntentSchema, BridgeSourceObservationSchema, ChainStakeIntentSchema, HashSchema, InBlockPayloadValidationError,\n SlashAdjudicationSchema, SlashChallengeSchema, SlashCommitSchema, SlashEvidenceSchema, SlashRequestSchema,\n TimeSchema, TransferSchema,\n} from '@xyo-network/xl1-sdk'\n\nimport { validateTransactionInBlock } from './lib/index.ts'\nimport {\n validateBridgeDestinationObservationInBlock, validateBridgeIntentInBlock, validateBridgeSourceObservationInBlock, validateChainStakeIntentInBlock,\n validateHashInBlock, validateSchemaInBlock,\n validateSlashAdjudicationInBlock, validateSlashChallengeInBlock, validateSlashCommitInBlock,\n validateSlashEvidenceInBlock, validateSlashRequestInBlock,\n validateTimeInBlock, validateTransferInBlock,\n} from './payloads/index.ts'\n\nconst payloadValidators: Partial<Record<Schema, InBlockPayloadValidationFunction>> = {\n [BoundWitnessSchema]: validateTransactionInBlock,\n [BridgeDestinationObservationSchema]: validateBridgeDestinationObservationInBlock,\n [BridgeIntentSchema]: validateBridgeIntentInBlock,\n [BridgeSourceObservationSchema]: validateBridgeSourceObservationInBlock,\n [ChainStakeIntentSchema]: validateChainStakeIntentInBlock,\n [HashSchema]: validateHashInBlock,\n [SchemaSchema]: validateSchemaInBlock,\n [SlashAdjudicationSchema]: validateSlashAdjudicationInBlock,\n [SlashChallengeSchema]: validateSlashChallengeInBlock,\n [SlashCommitSchema]: validateSlashCommitInBlock,\n [SlashEvidenceSchema]: validateSlashEvidenceInBlock,\n [SlashRequestSchema]: validateSlashRequestInBlock,\n [TimeSchema]: validateTimeInBlock,\n [TransferSchema]: validateTransferInBlock,\n}\n\nexport const validatePayloadInBlock: InBlockPayloadValidationFunction = async (\n context,\n payload,\n block,\n): Promise<InBlockPayloadValidationError[]> => {\n const errors: InBlockPayloadValidationError[] = []\n try {\n const validator = payloadValidators[payload.schema]\n if (validator) {\n errors.push(...(await validator(context, payload, block)))\n } else {\n errors.push(new InBlockPayloadValidationError((block?.[0])?._hash ?? ZERO_HASH, block, payload, `Unsupported payload schema: ${payload.schema}`))\n }\n } catch (ex) {\n const error = new InBlockPayloadValidationError(\n (block?.[0])?._hash ?? ZERO_HASH,\n block,\n payload,\n `validation excepted: ${String(ex)}`,\n ex,\n )\n errors.push(error)\n }\n return errors\n}\n", "import type { Payload, WithHashMeta } from '@xyo-network/sdk'\nimport type { HydratedBlockWithHashMeta, TransactionBoundWitnessWithHashMeta } from '@xyo-network/xl1-sdk'\nimport { isTransactionBoundWitnessWithHashMeta } from '@xyo-network/xl1-sdk'\n\n/**\n * The transaction in this block that elevated the payload, when one did.\n *\n * A payload can also ride directly in the block, elevated by the block signer rather than by a\n * transaction. Callers that need a signer to bind against must be able to tell the two apart,\n * because those two paths attribute the payload to entirely different addresses.\n * @param payload The payload being validated\n * @param block The hydrated block carrying it\n * @returns The elevating transaction, or undefined when the payload rode directly\n */\nexport function findElevatingTransaction(\n payload: WithHashMeta<Payload>,\n [, payloads]: HydratedBlockWithHashMeta,\n): TransactionBoundWitnessWithHashMeta | undefined {\n return payloads\n .filter(candidate => isTransactionBoundWitnessWithHashMeta(candidate))\n .find(tx => tx.payload_hashes.includes(payload._hash))\n}\n", "import type { Payload, WithHashMeta } from '@xyo-network/sdk'\nimport { type HydratedBlock, isTransactionBoundWitness } from '@xyo-network/xl1-sdk'\n\nexport const isElevatedFromBlock = (payload: WithHashMeta<Payload>, [, payloads]: HydratedBlock): boolean => {\n const txs = payloads.filter(p => isTransactionBoundWitness(p))\n for (const tx of txs) {\n if (tx.payload_hashes.includes(payload._hash)) {\n return false\n }\n }\n return true\n}\n", "import type { InBlockPayloadValidationFunction } from '@xyo-network/xl1-sdk'\nimport { InBlockPayloadValidationError, transactionsFromHydratedBlock } from '@xyo-network/xl1-sdk'\n\nexport const validateElevatedFromBlock: InBlockPayloadValidationFunction = (\n context,\n payload,\n block,\n) => {\n const errors: InBlockPayloadValidationError[] = []\n try {\n const txs = transactionsFromHydratedBlock(block)\n const allTxPayloadHashes = new Set(txs.flatMap(tx => tx.payload_hashes))\n if (allTxPayloadHashes.has(payload._hash)) {\n errors.push(new InBlockPayloadValidationError(\n block[0]?._hash,\n block,\n payload,\n `Transaction may not include block payload hash [${payload.schema}]: ${payload._hash}`,\n ))\n }\n } catch (ex) {\n errors.push(new InBlockPayloadValidationError(block[0]?._hash, block, payload, `validation excepted: ${String(ex)}`, ex))\n }\n return errors\n}\n", "import type { InBlockPayloadValidationFunction } from '@xyo-network/xl1-sdk'\nimport { InBlockPayloadValidationError, transactionsFromHydratedBlock } from '@xyo-network/xl1-sdk'\n\nexport const validateElevatedFromTransaction: InBlockPayloadValidationFunction = (\n context,\n payload,\n block,\n) => {\n const errors: InBlockPayloadValidationError[] = []\n try {\n const txs = transactionsFromHydratedBlock(block)\n if (txs.length > 0) {\n const hashes = txs.flatMap(tx => tx.payload_hashes)\n if (!hashes.includes(payload._hash)) {\n errors.push(new InBlockPayloadValidationError(payload._hash, block, payload, 'Transaction does not include payload'))\n }\n } else {\n errors.push(new InBlockPayloadValidationError(payload._hash, block, payload, 'No Transactions in block'))\n }\n } catch (ex) {\n errors.push(new InBlockPayloadValidationError(\n payload._hash,\n block,\n payload,\n `Failed validateElevatedFromTransaction: ${String(ex)}`,\n ex,\n ))\n }\n return errors\n}\n", "import type { IdentityFunction } from '@ariestools/sdk'\nimport type { Payload, XyoAddress } from '@xyo-network/sdk'\nimport { isHashMeta } from '@xyo-network/sdk'\nimport type {\n HydratedBlockWithHashMeta, InBlockPayloadValidationFunctionContext, InBlockRuleParams,\n TransactionBoundWitnessWithHashMeta,\n} from '@xyo-network/xl1-sdk'\nimport { requireRuleActive, resolveRuleParams } from '@xyo-network/xl1-sdk'\n\nimport { findElevatingTransaction } from './findElevatingTransaction.ts'\n\n/** What the shared slash-payload checks concluded, plus the rules the caller still needs. */\nexport interface SlashPayloadGateResult {\n /** Reasons the payload is not admissible; empty when the shared checks passed. */\n errors: Error[]\n /** The rules in force at the carrying height, when they resolved. */\n params?: InBlockRuleParams\n /** The transaction that elevated the payload, once binding has confirmed it. */\n transaction?: TransactionBoundWitnessWithHashMeta\n}\n\n/**\n * The checks every slash payload shares: the activation gate, then signer binding.\n *\n * Every slash payload is transaction-elevation-only. A payload riding directly in the block would\n * bind to the block signer instead of a transaction sender, and nothing in the design says what\n * that would mean \u2014 so that path is refused rather than guessed at. Binding `from` to the\n * elevating transaction's sender gets self-signing discipline transitively, since the transaction\n * validator has already tied `tx.from` to a verified bound-witness signer.\n *\n * The resolved rules come back so a caller can ask its own questions of them without resolving\n * the register a second time, and so the gate stays the only place that decides admissibility.\n * @param context The validation context, which may carry no register at all\n * @param payload The payload being validated\n * @param block The hydrated block carrying it\n * @param identityFunction Guard establishing the payload is the type expected\n * @param fromOf Reads the address the payload claims to be from\n * @param subject What is being gated, named for the error message\n * @returns The shared verdict and the rules in force\n */\nexport async function validateSlashPayloadInBlock<T extends Payload>(\n context: InBlockPayloadValidationFunctionContext,\n payload: Payload,\n block: HydratedBlockWithHashMeta,\n identityFunction: IdentityFunction<T>,\n fromOf: (payload: T) => XyoAddress,\n subject: string,\n): Promise<SlashPayloadGateResult> {\n const height = block[0].block\n const params = await resolveRuleParams(context, height)\n const gateError = requireRuleActive(params, 'slash-payloads', height, subject)\n if (gateError !== undefined) return { errors: [new Error(gateError)], params }\n\n if (!identityFunction(payload) || !isHashMeta(payload)) {\n return { errors: [new Error(`${subject} failed its identity check`)], params }\n }\n\n const transaction = findElevatingTransaction(payload, block)\n if (transaction === undefined) {\n return { errors: [new Error(`${subject} must be elevated from a transaction`)], params }\n }\n if (fromOf(payload) !== transaction.from) {\n return { errors: [new Error(`${subject} from must equal elevating transaction from`)], params }\n }\n\n return {\n errors: [], params, transaction,\n }\n}\n", "import { ZERO_HASH } from '@ariestools/sdk'\nimport { isHashMeta } from '@xyo-network/sdk'\nimport type { InBlockPayloadValidationFunction } from '@xyo-network/xl1-sdk'\nimport {\n BoundWitnessSignaturesValidator, InBlockPayloadValidationError, isTransactionBoundWitness, validateTransaction,\n} from '@xyo-network/xl1-sdk'\n\nexport const validateTransactionInBlock: InBlockPayloadValidationFunction = async (\n context,\n payload,\n block,\n): Promise<InBlockPayloadValidationError[]> => {\n const errors: InBlockPayloadValidationError[] = []\n try {\n if (isTransactionBoundWitness(payload) && isHashMeta(payload)) {\n const txErrors = await validateTransaction({ ...context, chainId: block[0].chain }, [payload, block[1]])\n for (const txError of txErrors) {\n errors.push(new InBlockPayloadValidationError(\n payload._hash,\n block,\n payload,\n `TransactionValidation error: ${txError}`,\n txError,\n ))\n }\n const txSignatureErrors = await BoundWitnessSignaturesValidator(payload)\n for (const txSignatureError of txSignatureErrors) {\n errors.push(new InBlockPayloadValidationError(\n payload._hash,\n block,\n payload,\n `BoundWitnessSignaturesValidator error: ${txSignatureError}`,\n txSignatureError,\n ))\n }\n } else {\n errors.push(new InBlockPayloadValidationError(payload._hash, block, payload, 'Payload failed isTransactionBoundWitness or isHashMeta'))\n }\n } catch (ex) {\n errors.push(new InBlockPayloadValidationError(payload._hash ?? ZERO_HASH, block, payload, `validation excepted: ${String(ex)}`, ex))\n }\n return errors\n}\n", "import type { IdentityFunction } from '@ariestools/sdk'\nimport type { Payload } from '@xyo-network/sdk'\nimport { isHashMeta } from '@xyo-network/sdk'\nimport type { HydratedBlockWithHashMeta, InBlockPayloadValidationFunctionContext } from '@xyo-network/xl1-sdk'\n\nimport { isElevatedFromBlock } from './isElevatedFromBlock.ts'\nimport { validateElevatedFromBlock } from './validateElevatedFromBlock.ts'\nimport { validateElevatedFromTransaction } from './validateElevatedFromTransaction.ts'\n\nexport const validateTypedPayloadInBlock = async <T extends Payload>(\n context: InBlockPayloadValidationFunctionContext,\n payload: Payload,\n block: HydratedBlockWithHashMeta,\n identityFunction: IdentityFunction<T>,\n): Promise<Error[]> => {\n const errors: Error[] = []\n try {\n if (identityFunction(payload) && isHashMeta(payload)) {\n if (isElevatedFromBlock(payload, block)) {\n errors.push(...(await validateElevatedFromBlock(context, payload, block)))\n } else {\n errors.push(...(await validateElevatedFromTransaction(context, payload, block)))\n }\n } else {\n errors.push(new Error('Payload failed identityFunction or isElevated or isStorageMeta'))\n }\n } catch (ex) {\n errors.push(new Error(`Failed validateTypedPayloadInBlock: ${String(ex)}`))\n }\n return errors\n}\n//\n", "import { ZERO_HASH } from '@ariestools/sdk'\nimport type { InBlockPayloadValidationFunction } from '@xyo-network/xl1-sdk'\nimport { InBlockPayloadValidationError, isBridgeDestinationObservation } from '@xyo-network/xl1-sdk'\n\nimport { validateTypedPayloadInBlock } from '../lib/index.ts'\n\nexport const validateBridgeDestinationObservationInBlock: InBlockPayloadValidationFunction = async (\n context,\n payload,\n block,\n) => {\n const errors: InBlockPayloadValidationError[] = []\n try {\n const typedErrors = await validateTypedPayloadInBlock(context, payload, block, isBridgeDestinationObservation)\n for (const typedError of typedErrors) {\n errors.push(new InBlockPayloadValidationError(payload._hash, block, payload, `validateTypedPayloadInBlock error: ${typedError}`, typedError))\n }\n } catch (ex) {\n errors.push(new InBlockPayloadValidationError(\n (block?.[0])?._hash ?? ZERO_HASH,\n block,\n payload,\n `Failed validateBridgeObservationInBlock: ${String(ex)}`,\n ex,\n ))\n }\n return errors\n}\n", "import { ZERO_HASH } from '@ariestools/sdk'\nimport type { InBlockPayloadValidationFunction } from '@xyo-network/xl1-sdk'\nimport { InBlockPayloadValidationError, isBridgeIntent } from '@xyo-network/xl1-sdk'\n\nimport { validateTypedPayloadInBlock } from '../lib/index.ts'\n\nexport const validateBridgeIntentInBlock: InBlockPayloadValidationFunction = async (\n context,\n payload,\n block,\n) => {\n const errors: InBlockPayloadValidationError[] = []\n try {\n const typedErrors = await validateTypedPayloadInBlock(context, payload, block, isBridgeIntent)\n for (const typedError of typedErrors) {\n errors.push(new InBlockPayloadValidationError(payload._hash, block, payload, `validateTypedPayloadInBlock error: ${typedError}`, typedError))\n }\n } catch (ex) {\n errors.push(new InBlockPayloadValidationError(\n (block?.[0])?._hash ?? ZERO_HASH,\n block,\n payload,\n `Failed validateBridgeIntentInBlock: ${String(ex)}`,\n ex,\n ))\n }\n return errors\n}\n", "import { ZERO_HASH } from '@ariestools/sdk'\nimport type { InBlockPayloadValidationFunction } from '@xyo-network/xl1-sdk'\nimport { InBlockPayloadValidationError, isBridgeSourceObservation } from '@xyo-network/xl1-sdk'\n\nimport { validateTypedPayloadInBlock } from '../lib/index.ts'\n\nexport const validateBridgeSourceObservationInBlock: InBlockPayloadValidationFunction = async (\n context,\n payload,\n block,\n) => {\n const errors: InBlockPayloadValidationError[] = []\n try {\n const typedErrors = await validateTypedPayloadInBlock(context, payload, block, isBridgeSourceObservation)\n for (const typedError of typedErrors) {\n errors.push(new InBlockPayloadValidationError(payload._hash, block, payload, `validateTypedPayloadInBlock error: ${typedError}`, typedError))\n }\n } catch (ex) {\n errors.push(new InBlockPayloadValidationError(\n (block?.[0])?._hash ?? ZERO_HASH,\n block,\n payload,\n `Failed validateBridgeObservationInBlock: ${String(ex)}`,\n ex,\n ))\n }\n return errors\n}\n", "import { ZERO_HASH } from '@ariestools/sdk'\nimport type { InBlockPayloadValidationFunction } from '@xyo-network/xl1-sdk'\nimport { InBlockPayloadValidationError, isChainStakeIntent } from '@xyo-network/xl1-sdk'\n\nimport { validateTypedPayloadInBlock } from '../lib/index.ts'\n\nexport const validateChainStakeIntentInBlock: InBlockPayloadValidationFunction = async (\n context,\n payload,\n block,\n) => {\n const errors: InBlockPayloadValidationError[] = []\n try {\n const typedErrors = await validateTypedPayloadInBlock(context, payload, block, isChainStakeIntent)\n for (const typedError of typedErrors) {\n errors.push(new InBlockPayloadValidationError(payload._hash, block, payload, `validateTypedPayloadInBlock error: ${typedError}`, typedError))\n }\n } catch (ex) {\n errors.push(new InBlockPayloadValidationError(\n block[0]?._hash ?? ZERO_HASH,\n block,\n payload,\n `validation excepted: ${String(ex)}`,\n ex,\n ))\n }\n return errors\n}\n", "import { ZERO_HASH } from '@ariestools/sdk'\nimport type { InBlockPayloadValidationFunction } from '@xyo-network/xl1-sdk'\nimport { InBlockPayloadValidationError, isHashPayload } from '@xyo-network/xl1-sdk'\n\nimport { validateTypedPayloadInBlock } from '../lib/index.ts'\n\nexport const validateHashInBlock: InBlockPayloadValidationFunction = async (\n context,\n payload,\n block,\n) => {\n const errors: (InBlockPayloadValidationError)[] = []\n try {\n const typedErrors = await validateTypedPayloadInBlock(context, payload, block, isHashPayload)\n for (const typedError of typedErrors) {\n errors.push(new InBlockPayloadValidationError(payload._hash, block, payload, `validateTypedPayloadInBlock error: ${typedError}`, typedError))\n }\n } catch (ex) {\n errors.push(new InBlockPayloadValidationError(\n (block?.[0])?._hash ?? ZERO_HASH,\n block,\n payload,\n `validation excepted: ${String(ex)}`,\n ex,\n ))\n }\n return errors\n}\n", "import { ZERO_HASH } from '@ariestools/sdk'\nimport { isSchemaPayload } from '@xyo-network/sdk'\nimport type { InBlockPayloadValidationFunction } from '@xyo-network/xl1-sdk'\nimport { InBlockPayloadValidationError } from '@xyo-network/xl1-sdk'\n\nimport { validateTypedPayloadInBlock } from '../lib/index.ts'\n\nexport const validateSchemaInBlock: InBlockPayloadValidationFunction = async (\n context,\n payload,\n block,\n) => {\n const errors: InBlockPayloadValidationError[] = []\n try {\n const typedErrors = await validateTypedPayloadInBlock(context, payload, block, isSchemaPayload)\n for (const typedError of typedErrors) {\n errors.push(new InBlockPayloadValidationError(payload._hash, block, payload, `validateTypedPayloadInBlock error: ${typedError}`, typedError))\n }\n } catch (ex) {\n errors.push(new InBlockPayloadValidationError(\n (block?.[0])?._hash ?? ZERO_HASH,\n block,\n payload,\n `Failed validateSchemaInBlock: ${String(ex)}`,\n ex,\n ))\n }\n return errors\n}\n", "import { ZERO_HASH } from '@ariestools/sdk'\nimport type { InBlockPayloadValidationFunction } from '@xyo-network/xl1-sdk'\nimport { InBlockPayloadValidationError, isSlashAdjudication } from '@xyo-network/xl1-sdk'\n\nimport { validateSlashPayloadInBlock } from '../lib/index.ts'\n\n/**\n * Validates a slash adjudication carried in a block.\n *\n * Only the arbiter named by the register may close a report, and that binding survives well past\n * the point where reporting itself opens up \u2014 an adjudication from anyone else is not a minority\n * opinion, it is a forged verdict.\n *\n * Whether a confirmed adjudication names its claimant is an arbiter duty checked when the\n * adjudication is recomputed, not a question of block validity. A block carrying a sloppy but\n * genuine verdict is still a valid block.\n */\nexport const validateSlashAdjudicationInBlock: InBlockPayloadValidationFunction = async (\n context,\n payload,\n block,\n) => {\n const errors: InBlockPayloadValidationError[] = []\n try {\n const { errors: sharedErrors, params } = await validateSlashPayloadInBlock(context, payload, block, isSlashAdjudication, adjudication => adjudication.from, 'slash adjudication')\n for (const sharedError of sharedErrors) {\n errors.push(new InBlockPayloadValidationError(payload._hash, block, payload, sharedError.message, sharedError))\n }\n if (sharedErrors.length === 0 && isSlashAdjudication(payload)\n && (params?.arbiter === undefined || payload.from !== params.arbiter)) {\n errors.push(new InBlockPayloadValidationError(payload._hash, block, payload, 'slash adjudication from must equal the register arbiter'))\n }\n } catch (ex) {\n errors.push(new InBlockPayloadValidationError(\n block[0]?._hash ?? ZERO_HASH,\n block,\n payload,\n `validation excepted: ${String(ex)}`,\n ex,\n ))\n }\n return errors\n}\n", "import { ZERO_HASH } from '@ariestools/sdk'\nimport type { InBlockPayloadValidationFunction } from '@xyo-network/xl1-sdk'\nimport { InBlockPayloadValidationError, isSlashChallenge } from '@xyo-network/xl1-sdk'\n\nimport { validateSlashPayloadInBlock } from '../lib/index.ts'\n\n/**\n * Validates a slash challenge carried in a block.\n *\n * Anyone may challenge and no bond is required, because a challenge can only exculpate. A\n * frivolous one fails to change the verdict and costs its filer the fee; there is no version of it\n * that harms the accused, so there is nothing here to deter.\n */\nexport const validateSlashChallengeInBlock: InBlockPayloadValidationFunction = async (\n context,\n payload,\n block,\n) => {\n const errors: InBlockPayloadValidationError[] = []\n try {\n const { errors: sharedErrors } = await validateSlashPayloadInBlock(context, payload, block, isSlashChallenge, subject => subject.from, 'slash challenge')\n for (const sharedError of sharedErrors) {\n errors.push(new InBlockPayloadValidationError(payload._hash, block, payload, sharedError.message, sharedError))\n }\n } catch (ex) {\n errors.push(new InBlockPayloadValidationError(\n block[0]?._hash ?? ZERO_HASH,\n block,\n payload,\n `validation excepted: ${String(ex)}`,\n ex,\n ))\n }\n return errors\n}\n", "import { ZERO_HASH } from '@ariestools/sdk'\nimport type { Payload, WithHashMeta } from '@xyo-network/sdk'\nimport type {\n InBlockPayloadValidationFunction, InBlockRuleParams, SlashCommit,\n TransactionBoundWitnessWithHashMeta,\n} from '@xyo-network/xl1-sdk'\nimport {\n derivedReceiveAddress, InBlockPayloadValidationError, isRuleActiveAt, isSlashCommit, isTransferPayload,\n} from '@xyo-network/xl1-sdk'\n\nimport { validateSlashPayloadInBlock } from '../lib/index.ts'\n\n/** Reads a register amount, which is carried as an unprefixed hex string. */\nfunction toAmount(value: string): bigint {\n return BigInt(value.startsWith('0x') ? value : `0x${value}`)\n}\n\n/**\n * Whether a commitment has to escrow a deposit at this height.\n *\n * The deposit is what a reporter stands to lose for filing garbage, so it is only required while\n * nothing else is playing that role. Once bad reports are themselves an adjudicable offense, the\n * counter-slash is the deterrent and charging a deposit on top would just tax honest reporters.\n */\nfunction isDepositRequired(params: InBlockRuleParams, height: number): boolean {\n return isRuleActiveAt(params, 'eligibility-admission', height)\n && !isRuleActiveAt(params, 'invalid-slash-request.adjudicable', height)\n}\n\n/** Total escrowed to the reporter's deposit address by transfers in the same transaction. */\nfunction depositedInTransaction(\n commit: SlashCommit,\n transaction: TransactionBoundWitnessWithHashMeta,\n payloads: WithHashMeta<Payload>[],\n): bigint {\n const target = derivedReceiveAddress(commit.from, 'slash-deposit')\n const inTransaction = new Set(transaction.payload_hashes)\n return payloads\n .filter(candidate => inTransaction.has(candidate._hash))\n .filter(candidate => isTransferPayload(candidate))\n .reduce((total, transfer) => total + toAmount(transfer.transfers[target] ?? '0x0'), 0n)\n}\n\n/**\n * Validates a slash commitment carried in a block.\n *\n * A commitment reserves a report before its evidence is public, which is what stops a reporter's\n * work from being lifted from the mempool and re-filed under someone else's name. The commitment\n * itself is opaque here by design \u2014 checking what it hides is the reveal's job.\n */\nexport const validateSlashCommitInBlock: InBlockPayloadValidationFunction = async (\n context,\n payload,\n block,\n) => {\n const errors: InBlockPayloadValidationError[] = []\n try {\n const {\n errors: sharedErrors, params, transaction,\n } = await validateSlashPayloadInBlock(context, payload, block, isSlashCommit, commit => commit.from, 'slash commit')\n for (const sharedError of sharedErrors) {\n errors.push(new InBlockPayloadValidationError(payload._hash, block, payload, sharedError.message, sharedError))\n }\n if (sharedErrors.length > 0 || params === undefined || transaction === undefined || !isSlashCommit(payload)) {\n return errors\n }\n\n const height = block[0].block\n if (isDepositRequired(params, height)) {\n const required = toAmount(params.reporterDepositAtto ?? '0x0')\n const deposited = depositedInTransaction(payload, transaction, block[1])\n if (deposited < required) {\n errors.push(new InBlockPayloadValidationError(\n payload._hash,\n block,\n payload,\n `slash commit escrows ${deposited} but the register requires ${required}`,\n ))\n }\n }\n } catch (ex) {\n errors.push(new InBlockPayloadValidationError(\n block[0]?._hash ?? ZERO_HASH,\n block,\n payload,\n `validation excepted: ${String(ex)}`,\n ex,\n ))\n }\n return errors\n}\n", "import { ZERO_HASH } from '@ariestools/sdk'\nimport type { InBlockPayloadValidationFunction } from '@xyo-network/xl1-sdk'\nimport { InBlockPayloadValidationError, isSlashEvidence } from '@xyo-network/xl1-sdk'\n\nimport { validateSlashPayloadInBlock } from '../lib/index.ts'\n\n/**\n * Validates a slash evidence carried in a block.\n *\n * A container carries artifacts and asserts nothing about them, so past the activation gate and\n * signer binding there is nothing left to check. No size ceiling is imposed: character storage is\n * already priced by gas, so an oversized container costs its sender what it costs the chain.\n */\nexport const validateSlashEvidenceInBlock: InBlockPayloadValidationFunction = async (\n context,\n payload,\n block,\n) => {\n const errors: InBlockPayloadValidationError[] = []\n try {\n const { errors: sharedErrors } = await validateSlashPayloadInBlock(context, payload, block, isSlashEvidence, subject => subject.from, 'slash evidence')\n for (const sharedError of sharedErrors) {\n errors.push(new InBlockPayloadValidationError(payload._hash, block, payload, sharedError.message, sharedError))\n }\n } catch (ex) {\n errors.push(new InBlockPayloadValidationError(\n block[0]?._hash ?? ZERO_HASH,\n block,\n payload,\n `validation excepted: ${String(ex)}`,\n ex,\n ))\n }\n return errors\n}\n", "import { ZERO_HASH } from '@ariestools/sdk'\nimport type { Payload, WithHashMeta } from '@xyo-network/sdk'\nimport { PayloadBuilder } from '@xyo-network/sdk'\nimport type {\n InBlockPayloadValidationFunction, InBlockPayloadValidationFunctionContext, InBlockRuleParams,\n SlashRequest, TransactionBoundWitnessWithHashMeta, XL1BlockNumber,\n} from '@xyo-network/xl1-sdk'\nimport {\n InBlockPayloadValidationError, isRuleObservedAt, isSlashEvidence, isSlashRequest, reportableRuleId,\n} from '@xyo-network/xl1-sdk'\n\nimport { validateSlashPayloadInBlock } from '../lib/index.ts'\n\n/**\n * The artifact hashes actually carried by evidence containers in the same transaction.\n *\n * Identity is recomputed from each artifact rather than read from any claim about it. A container\n * that names a hash it does not carry proves nothing, and letting the claim stand in for the\n * artifact is exactly how a fabricated report would pass.\n */\nasync function carriedArtifactHashes(\n transaction: TransactionBoundWitnessWithHashMeta,\n payloads: WithHashMeta<Payload>[],\n): Promise<Set<string>> {\n const inTransaction = new Set(transaction.payload_hashes)\n const artifacts = payloads\n .filter(candidate => inTransaction.has(candidate._hash))\n .filter(candidate => isSlashEvidence(candidate))\n // the container types its artifacts loosely; they are payload-shaped by construction\n .flatMap(container => container.artifacts as unknown as Payload[])\n return new Set(await Promise.all(artifacts.map(artifact => PayloadBuilder.dataHash(artifact))))\n}\n\n/**\n * Why a request's evidence cannot be resolved, empty when all of it can.\n *\n * Evidence either rides along in the same transaction or was finalized earlier. When the second\n * case cannot be checked at all, this fails closed: a node that cannot verify a requirement must\n * not certify the block. That does mean a misconfigured node rejects blocks its peers accept, so\n * the resolver has to be wired before the activation height, never after.\n */\nasync function evidenceResolutionErrors(\n context: InBlockPayloadValidationFunctionContext,\n request: SlashRequest,\n carried: Set<string>,\n height: XL1BlockNumber,\n): Promise<string[]> {\n const missing = request.evidence.filter(hash => !carried.has(hash))\n if (missing.length === 0) return []\n const resolver = context.hasFinalizedEvidenceArtifact\n if (resolver === undefined) {\n return ['evidence resolver unavailable: cannot certify a block whose evidence it cannot check']\n }\n const resolved = await Promise.all(missing.map(async hash => ({ found: await resolver(hash, height), hash })))\n return resolved.filter(({ found }) => !found).map(({ hash }) => `unresolvable evidence artifact ${hash}`)\n}\n\n/**\n * Whether the offense a request names was reportable at the height the offense happened.\n *\n * Resolved through the shared rule vocabulary rather than a raw activation read so that a\n * recorded deactivation closes this gate too. Emission already honors rollbacks; if admission\n * did not, third parties could keep filing against a rule the register has switched off.\n */\nfunction isOffenseReportable(params: InBlockRuleParams, request: SlashRequest): boolean {\n return isRuleObservedAt(params, reportableRuleId(request.offense), request.block)\n}\n\n/**\n * Validates a slash request carried in a block.\n *\n * A request is a recordable transaction, not a verdict, so this checks that it is well-formed and\n * that its evidence exists \u2014 never whether the accusation is true. An unverifiable request is\n * still a valid request; deciding it is the arbiter's job.\n *\n * The reportable gate is asked of the height the offense happened at, not the height the report\n * lands at. Comparing against the carrying height would make a rule retroactive and turn conduct\n * that was legal when it occurred into an offense.\n */\nexport const validateSlashRequestInBlock: InBlockPayloadValidationFunction = async (\n context,\n payload,\n block,\n) => {\n const errors: InBlockPayloadValidationError[] = []\n const fail = (message: string) =>\n errors.push(new InBlockPayloadValidationError(payload._hash, block, payload, message))\n try {\n const {\n errors: sharedErrors, params, transaction,\n } = await validateSlashPayloadInBlock(context, payload, block, isSlashRequest, request => request.from, 'slash request')\n for (const sharedError of sharedErrors) {\n errors.push(new InBlockPayloadValidationError(payload._hash, block, payload, sharedError.message, sharedError))\n }\n if (sharedErrors.length > 0 || params === undefined || transaction === undefined || !isSlashRequest(payload)) {\n return errors\n }\n\n if (!isOffenseReportable(params, payload)) {\n fail(`offense '${payload.offense}' was not reportable at block ${payload.block}`)\n }\n\n const carried = await carriedArtifactHashes(transaction, block[1])\n for (const problem of await evidenceResolutionErrors(context, payload, carried, block[0].block)) {\n fail(problem)\n }\n } catch (ex) {\n errors.push(new InBlockPayloadValidationError(\n block[0]?._hash ?? ZERO_HASH,\n block,\n payload,\n `validation excepted: ${String(ex)}`,\n ex,\n ))\n }\n return errors\n}\n", "import { ZERO_HASH } from '@ariestools/sdk'\nimport type { InBlockPayloadValidationFunction } from '@xyo-network/xl1-sdk'\nimport { InBlockPayloadValidationError, isTimePayload } from '@xyo-network/xl1-sdk'\n\nimport { validateTypedPayloadInBlock } from '../lib/index.ts'\n\nexport const validateTimeInBlock: InBlockPayloadValidationFunction = async (\n context,\n payload,\n block,\n) => {\n const errors: InBlockPayloadValidationError[] = []\n try {\n const typedErrors = await validateTypedPayloadInBlock(context, payload, block, isTimePayload)\n for (const typedError of typedErrors) {\n errors.push(new InBlockPayloadValidationError(payload._hash, block, payload, `validateTypedPayloadInBlock error: ${typedError}`, typedError))\n }\n } catch (ex) {\n errors.push(new InBlockPayloadValidationError(\n (block?.[0])?._hash ?? ZERO_HASH,\n block,\n payload,\n `Failed validateTimeInBlock: ${String(ex)}`,\n ex,\n ))\n }\n return errors\n}\n", "import { ZERO_HASH } from '@ariestools/sdk'\nimport type { InBlockPayloadValidationFunction } from '@xyo-network/xl1-sdk'\nimport { InBlockPayloadValidationError, isTransferPayload } from '@xyo-network/xl1-sdk'\n\nimport { validateTypedPayloadInBlock } from '../lib/index.ts'\n\nexport const validateTransferInBlock: InBlockPayloadValidationFunction = async (\n context,\n payload,\n block,\n) => {\n const errors: InBlockPayloadValidationError[] = []\n try {\n const typedErrors = await validateTypedPayloadInBlock(context, payload, block, isTransferPayload)\n for (const typedError of typedErrors) {\n errors.push(new InBlockPayloadValidationError(payload._hash, block, payload, `validateTypedPayloadInBlock error: ${typedError}`, typedError))\n }\n } catch (ex) {\n errors.push(new InBlockPayloadValidationError(\n (block?.[0])?._hash ?? ZERO_HASH,\n block,\n payload,\n `Failed validateTransferInBlock: ${String(ex)}`,\n ex,\n ))\n }\n return errors\n}\n", "import { ZERO_HASH } from '@ariestools/sdk'\nimport { isHashMeta } from '@xyo-network/sdk'\nimport type { HydratedBlockValidationFunction, HydratedTransactionValidationFunction } from '@xyo-network/xl1-sdk'\nimport { HydratedBlockValidationError, isTransactionBoundWitness } from '@xyo-network/xl1-sdk'\n\n/**\n * Builds a block-level validator that runs `transfersValidator` against every transaction\n * in the block, mapping any transaction errors to block errors. This is how the\n * reward-redemption signing gate (a `TransactionTransfersValidator`) is enforced during\n * block validation \u2014 pass the result as an `additionalValidators` entry to\n * `validateHydratedBlock`.\n */\nexport function TransactionTransfersInBlockValidatorFactory(\n transfersValidator: HydratedTransactionValidationFunction,\n): HydratedBlockValidationFunction {\n return async (context, hydratedBlock) => {\n const [block, payloads] = hydratedBlock\n const errors: HydratedBlockValidationError[] = []\n try {\n for (const payload of payloads) {\n if (isTransactionBoundWitness(payload) && isHashMeta(payload)) {\n const txErrors = await transfersValidator({ ...context, chainId: block.chain }, [payload, payloads])\n for (const txError of txErrors) {\n errors.push(new HydratedBlockValidationError(payload._hash, hydratedBlock, `transfer authorization error: ${txError}`, txError))\n }\n }\n }\n } catch (ex) {\n errors.push(new HydratedBlockValidationError(\n block?._hash ?? ZERO_HASH,\n hydratedBlock,\n `Failed TransactionTransfersInBlockValidator: ${String(ex)}`,\n ex,\n ))\n }\n return errors\n }\n}\n", "import { spanRootAsync, ZERO_HASH } from '@ariestools/sdk'\nimport type { ChainId, HydratedBlockStateValidationFunction } from '@xyo-network/xl1-sdk'\nimport { HydratedBlockStateValidationError } from '@xyo-network/xl1-sdk'\n\nimport { validateHydratedBlock } from '../hydratedBlock/index.ts'\nimport { RequiredBalanceBlockStateValidator } from './validators/index.ts'\n\nexport const validateHydratedBlockState: HydratedBlockStateValidationFunction = async (\n context,\n hydratedBlock,\n additionalValidators = [],\n) => {\n return await spanRootAsync('validateHydratedBlockState', async () => {\n const errors: HydratedBlockStateValidationError[] = []\n let chainId: ChainId | undefined\n try {\n chainId = await context.chainIdAtBlockNumber(hydratedBlock[0].block)\n const validateHydratedBlockErrors = await validateHydratedBlock(context, hydratedBlock, context.chainIdAtBlockNumber)\n for (const validateHydratedBlockError of validateHydratedBlockErrors) {\n errors.push(new HydratedBlockStateValidationError(\n hydratedBlock[0]._hash,\n chainId,\n hydratedBlock,\n `validateBlock error: ${validateHydratedBlockError}`,\n validateHydratedBlockError,\n ))\n }\n const validators: HydratedBlockStateValidationFunction[] = [\n RequiredBalanceBlockStateValidator,\n ...additionalValidators,\n ]\n for (const validator of validators) {\n errors.push(...(await Promise.resolve(validator(context, hydratedBlock))))\n }\n } catch (ex) {\n errors.push(new HydratedBlockStateValidationError(\n hydratedBlock?.[0]?._hash ?? ZERO_HASH,\n chainId ?? '00' as ChainId,\n hydratedBlock,\n `Failed validateHydratedBlockState: ${String(ex)}`,\n ex,\n ))\n }\n return errors\n }, context)\n}\n", "import type { Address, Hash } from '@ariestools/sdk'\nimport { spanRootAsync, ZERO_HASH } from '@ariestools/sdk'\nimport type { ChainId, HydratedBlockStateValidationFunction } from '@xyo-network/xl1-sdk'\nimport {\n AttoXL1, HydratedBlockStateValidationError,\n isSignedTransactionBoundWitnessWithHashMeta,\n netBalancesForPayloads, XYO_ZERO_ADDRESS,\n} from '@xyo-network/xl1-sdk'\n\nfunction offendingTransactionHashesForAddress(block: Parameters<HydratedBlockStateValidationFunction>[1], address: Address): Hash[] {\n const hashes: Hash[] = []\n for (const payload of block[1]) {\n if (isSignedTransactionBoundWitnessWithHashMeta(payload) && payload.from === address) {\n hashes.push(payload._hash)\n }\n }\n return hashes\n}\n\nexport const RequiredBalanceBlockStateValidator: HydratedBlockStateValidationFunction = async (\n context,\n block,\n) => {\n return await spanRootAsync('RequiredBalanceBlockStateValidator', async () => {\n const errors: HydratedBlockStateValidationError[] = []\n let chainId = '00' as ChainId\n try {\n // TODO: Filter by non-producer elevated payloads\n // to allow for transfers from ZERO address\n const netBalances = netBalancesForPayloads({ singletons: {} }, (block[1]))\n const netBalanceAddresses = Object.keys(netBalances) as Address[]\n const requiredBalances: Record<string, bigint> = {}\n for (const address of netBalanceAddresses) {\n const propertyKey = String(address)\n const netBalance = (netBalances as Record<string, bigint>)[propertyKey]\n if (netBalance < 0n) {\n requiredBalances[propertyKey] = -netBalance\n }\n }\n const previous = block[0].previous\n if (previous === null) return [new HydratedBlockStateValidationError(\n block?.[0]?._hash ?? ZERO_HASH,\n '00' as ChainId,\n block,\n 'Insufficient funds because first block',\n )]\n chainId = await context.chainIdAtBlockNumber(block[0].block)\n await spanRootAsync('RequiredBalanceBlockStateValidator|balancesLoop', async () => {\n for (const [address, reqBalance] of Object.entries(requiredBalances)) {\n const propertyKey = String(address)\n const result = await context.accountBalance.accountBalances([address as Address], { head: previous })\n const balance = (result as Record<string, bigint>)[propertyKey] ?? AttoXL1(0n)\n if (address !== XYO_ZERO_ADDRESS && reqBalance > balance) {\n const offendingTransactionHashes = offendingTransactionHashesForAddress(block, address as Address)\n errors.push(new HydratedBlockStateValidationError(\n block?.[0]?._hash ?? ZERO_HASH,\n chainId,\n block,\n `insufficient balance for ${address} ${balance} < ${reqBalance}`,\n undefined,\n offendingTransactionHashes.length > 0 ? offendingTransactionHashes : undefined,\n ))\n }\n }\n }, context)\n } catch (ex) {\n errors.push(new HydratedBlockStateValidationError(\n block?.[0]?._hash ?? ZERO_HASH,\n chainId,\n block,\n `Failed RequiredBalanceBlockStateValidator: ${String(ex)}`,\n ex,\n ))\n }\n return errors\n }, context)\n}\n", "import { spanRootAsync, ZERO_HASH } from '@ariestools/sdk'\nimport type { HydratedTransactionStateValidationFunction } from '@xyo-network/xl1-sdk'\nimport { HydratedTransactionValidationError } from '@xyo-network/xl1-sdk'\n\nimport { RequiredBalanceTransactionStateValidator } from './validators/index.ts'\n\nexport const validateHydratedTransactionState: HydratedTransactionStateValidationFunction = async (\n context,\n tx,\n) => {\n return await spanRootAsync('validateHydratedTransactionState', async () => {\n const errors: HydratedTransactionValidationError[] = []\n try {\n const validators: HydratedTransactionStateValidationFunction[] = [\n RequiredBalanceTransactionStateValidator,\n ]\n for (const validator of validators) {\n errors.push(...(await Promise.resolve(validator(context, tx))))\n }\n } catch (ex) {\n errors.push(new HydratedTransactionValidationError(\n tx?.[0]?._hash ?? ZERO_HASH,\n tx,\n `Failed validateHydratedTransactionState: ${String(ex)}`,\n ex,\n ))\n }\n return errors\n }, context)\n}\n", "import type { Address } from '@ariestools/sdk'\nimport { spanRootAsync, ZERO_HASH } from '@ariestools/sdk'\nimport type { HydratedTransactionStateValidationFunction } from '@xyo-network/xl1-sdk'\nimport {\n AttoXL1,\n HydratedTransactionValidationError,\n HydratedTransactionWrapper,\n netBalancesForPayloads,\n transactionRequiredGas,\n XYO_ZERO_ADDRESS,\n} from '@xyo-network/xl1-sdk'\n\ntype ValidatorContext = Parameters<HydratedTransactionStateValidationFunction>[0]\ntype ValidatorTx = Parameters<HydratedTransactionStateValidationFunction>[1]\n\n/**\n * For each address with a negative net balance, look up the actual on-chain\n * balance at the current head and emit an `insufficient balance` error if it\n * can't cover the required amount.\n */\nasync function balanceShortfallErrors(\n context: ValidatorContext,\n tx: ValidatorTx,\n requiredBalances: Record<string, bigint>,\n): Promise<HydratedTransactionValidationError[]> {\n const errors: HydratedTransactionValidationError[] = []\n const requiredAddresses = Object.keys(requiredBalances)\n if (requiredAddresses.length === 0) return errors\n const [headBlock] = await context.blockViewer.currentBlock()\n const balances = await context.accountBalanceViewer.accountBalances(\n requiredAddresses as Address[],\n { head: headBlock._hash },\n )\n const balancesByKey = balances as Record<string, bigint>\n for (const address of requiredAddresses) {\n const propertyKey = String(address)\n const reqBalance = requiredBalances[propertyKey]\n const balance = balancesByKey[propertyKey] ?? AttoXL1(0n)\n if (address !== XYO_ZERO_ADDRESS && reqBalance > balance) {\n errors.push(new HydratedTransactionValidationError(\n tx?.[0]?._hash ?? ZERO_HASH,\n tx,\n `insufficient balance for ${address} ${balance} < ${reqBalance}`,\n ))\n }\n }\n return errors\n}\n\nexport const RequiredBalanceTransactionStateValidator: HydratedTransactionStateValidationFunction = async (\n context,\n tx,\n) => {\n return await spanRootAsync('RequiredBalanceTransactionStateValidator', async () => {\n const errors: HydratedTransactionValidationError[] = []\n try {\n const netBalances = netBalancesForPayloads({ singletons: {} }, tx[1]) as Record<string, bigint>\n\n const wrapper = await HydratedTransactionWrapper.parse(tx)\n const from = wrapper.boundWitness.from as Address\n const gasRequired = transactionRequiredGas(tx)\n // Declared gas limit must cover the gas the tx will actually consume.\n // Without this check a tx could pass admission with `gasLimit < required`\n // and either fail at execution or get unfairly under-charged for the\n // resources it actually uses. Reported alongside any balance shortfall\n // so the caller sees every reason the tx was rejected.\n if (wrapper.fees.gasLimit < gasRequired) {\n errors.push(new HydratedTransactionValidationError(\n tx?.[0]?._hash ?? ZERO_HASH,\n tx,\n `fees.gasLimit ${wrapper.fees.gasLimit} < required gas ${gasRequired}`,\n ))\n }\n // Charge the MAX fee budget at admission \u2014 same rule the block validator\n // (`BlockCumulativeBalanceValidator`) uses post-submit: `base + priority\n // + gasLimit`. Using `gasRequired \u00D7 gasPrice` here (the expected cost)\n // is strictly weaker than the block validator and lets txs whose\n // declared `gasLimit` exceeds the sender's balance through admission.\n // They then fail block validation with \"Cumulative outflow ... exceeds\n // available balance\" and the chain wedges (producer self-mutes for\n // ~150s after a successful-looking submit). Tracked in the\n // api-local-mongodb-beta repro: 783 stuck pending txs of this exact\n // shape, all with gasLimit \u2248 23.6 XL1 against \u2248 12 XL1 balance.\n const baseCost = wrapper.fees.base\n const priorityCost = wrapper.fees.priority\n const maxGasCost = wrapper.fees.gasLimit\n const fromKey = String(from)\n netBalances[fromKey] = (netBalances[fromKey] ?? 0n) - baseCost - priorityCost - maxGasCost\n\n const requiredBalances: Record<string, bigint> = {}\n for (const [address, net] of Object.entries(netBalances)) {\n const propertyKey = String(address)\n if (net < 0n) requiredBalances[propertyKey] = -net\n }\n\n errors.push(...(await balanceShortfallErrors(context, tx, requiredBalances)))\n } catch (ex) {\n errors.push(new HydratedTransactionValidationError(\n tx?.[0]?._hash ?? ZERO_HASH,\n tx,\n `Failed RequiredBalanceTransactionStateValidator: ${String(ex)}`,\n ex,\n ))\n }\n return errors\n }, context)\n}\n"],
5
+ "mappings": "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",
6
+ "names": ["ZERO_HASH", "BlockValidationError", "ZERO_HASH", "BlockValidationError", "ZERO_HASH", "BlockValidationError", "ZERO_HASH", "BlockValidationError", "error", "ZERO_HASH", "BlockValidationError", "error", "BlockValidationError", "ZERO_HASH", "ZERO_HASH", "HydratedBlockValidationError", "ZERO_HASH", "ZERO_HASH", "BoundWitnessSchema", "InBlockPayloadValidationError", "InBlockPayloadValidationError", "transactionsFromHydratedBlock", "ZERO_HASH", "isHashMeta", "InBlockPayloadValidationError", "isTransactionBoundWitness", "isHashMeta", "isHashMeta", "ZERO_HASH", "InBlockPayloadValidationError", "InBlockPayloadValidationError", "ZERO_HASH", "ZERO_HASH", "InBlockPayloadValidationError", "InBlockPayloadValidationError", "ZERO_HASH", "ZERO_HASH", "InBlockPayloadValidationError", "InBlockPayloadValidationError", "ZERO_HASH", "ZERO_HASH", "InBlockPayloadValidationError", "InBlockPayloadValidationError", "ZERO_HASH", "ZERO_HASH", "InBlockPayloadValidationError", "InBlockPayloadValidationError", "ZERO_HASH", "ZERO_HASH", "InBlockPayloadValidationError", "InBlockPayloadValidationError", "ZERO_HASH", "ZERO_HASH", "InBlockPayloadValidationError", "InBlockPayloadValidationError", "ZERO_HASH", "ZERO_HASH", "InBlockPayloadValidationError", "InBlockPayloadValidationError", "ZERO_HASH", "ZERO_HASH", "InBlockPayloadValidationError", "InBlockPayloadValidationError", "ZERO_HASH", "ZERO_HASH", "InBlockPayloadValidationError", "InBlockPayloadValidationError", "ZERO_HASH", "ZERO_HASH", "InBlockPayloadValidationError", "isSlashEvidence", "isSlashEvidence", "InBlockPayloadValidationError", "ZERO_HASH", "ZERO_HASH", "InBlockPayloadValidationError", "InBlockPayloadValidationError", "ZERO_HASH", "ZERO_HASH", "InBlockPayloadValidationError", "isTransferPayload", "isTransferPayload", "InBlockPayloadValidationError", "ZERO_HASH", "BoundWitnessSchema", "InBlockPayloadValidationError", "ZERO_HASH", "error", "ZERO_HASH", "ZERO_HASH", "isHashMeta", "HydratedBlockValidationError", "isTransactionBoundWitness", "HydratedBlockValidationError", "ZERO_HASH", "spanRootAsync", "ZERO_HASH", "HydratedBlockStateValidationError", "ZERO_HASH", "spanRootAsync", "HydratedBlockStateValidationError", "ZERO_HASH", "spanRootAsync", "ZERO_HASH", "HydratedTransactionValidationError", "spanRootAsync", "ZERO_HASH", "AttoXL1", "netBalancesForPayloads", "XYO_ZERO_ADDRESS", "spanRootAsync", "HydratedTransactionValidationError", "ZERO_HASH"]
7
7
  }
@@ -3,6 +3,7 @@ export * from './modules/ethereum/index.js';
3
3
  export * from './modules/modules/index.js';
4
4
  export * from './modules/protocol/index.js';
5
5
  export * from './modules/services/index.js';
6
+ export * from './modules/slashing/index.js';
6
7
  export * from './modules/telemetry/index-node.js';
7
8
  export * from './modules/utils/index.js';
8
9
  export * from './modules/validation/index.js';
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAGA,cAAc,UAAU,CAAA;AACxB,cAAc,WAAW,CAAA;AACzB,cAAc,UAAU,CAAA;AACxB,cAAc,WAAW,CAAA;AACzB,cAAc,WAAW,CAAA;AACzB,cAAc,YAAY,CAAA;AAC1B,cAAc,QAAQ,CAAA;AACtB,cAAc,aAAa,CAAA;AAC3B,cAAc,WAAW,CAAA"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAGA,cAAc,UAAU,CAAA;AACxB,cAAc,WAAW,CAAA;AACzB,cAAc,UAAU,CAAA;AACxB,cAAc,WAAW,CAAA;AACzB,cAAc,WAAW,CAAA;AACzB,cAAc,WAAW,CAAA;AACzB,cAAc,YAAY,CAAA;AAC1B,cAAc,QAAQ,CAAA;AACtB,cAAc,aAAa,CAAA;AAC3B,cAAc,WAAW,CAAA"}
@@ -4,6 +4,7 @@ export * from "#ethereum";
4
4
  export * from "#modules";
5
5
  export * from "#protocol";
6
6
  export * from "#services";
7
+ export * from "#slashing";
7
8
  export * from "#telemetry";
8
9
  export * from "#utils";
9
10
  export * from "#validation";
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../src/index.ts"],
4
- "sourcesContent": ["// Generated by xy monolith layout sync (package-sync-layout) \u2014 do not edit by hand.\n/* eslint-disable @typescript-eslint/ban-ts-comment -- conditional package imports */\n// @ts-nocheck\nexport * from '#analyze'\nexport * from '#ethereum'\nexport * from '#modules'\nexport * from '#protocol'\nexport * from '#services'\nexport * from '#telemetry'\nexport * from '#utils'\nexport * from '#validation'\nexport * from '#wrappers'\n"],
5
- "mappings": ";AAGA,cAAc;AACd,cAAc;AACd,cAAc;AACd,cAAc;AACd,cAAc;AACd,cAAc;AACd,cAAc;AACd,cAAc;AACd,cAAc;",
4
+ "sourcesContent": ["// Generated by xy monolith layout sync (package-sync-layout) \u2014 do not edit by hand.\n/* eslint-disable @typescript-eslint/ban-ts-comment -- conditional package imports */\n// @ts-nocheck\nexport * from '#analyze'\nexport * from '#ethereum'\nexport * from '#modules'\nexport * from '#protocol'\nexport * from '#services'\nexport * from '#slashing'\nexport * from '#telemetry'\nexport * from '#utils'\nexport * from '#validation'\nexport * from '#wrappers'\n"],
5
+ "mappings": ";AAGA,cAAc;AACd,cAAc;AACd,cAAc;AACd,cAAc;AACd,cAAc;AACd,cAAc;AACd,cAAc;AACd,cAAc;AACd,cAAc;AACd,cAAc;",
6
6
  "names": []
7
7
  }
@@ -1,8 +1,13 @@
1
1
  import type { Address } from '@ariestools/sdk';
2
2
  import type { BaseContext, MempoolViewer, SignedHydratedBlockWithHashMeta } from '@xyo-network/xl1-sdk';
3
+ import type { AdmissionAssessment, AdmissionMode, AdmissionShadowReport, ProducerEligibilityEvaluator } from './admission.js';
3
4
  import type { ChainFinalizerParams } from './ChainFinalizer.js';
4
5
  import { ChainFinalizer } from './ChainFinalizer.js';
5
6
  export interface ChainHeadSelectorParams extends ChainFinalizerParams {
7
+ /**
8
+ * How candidates are admitted. Defaults to `allowlist`, which is how the chain runs today.
9
+ */
10
+ admission?: AdmissionMode;
6
11
  /**
7
12
  * List of allowed producer addresses, if undefined anyone can participate
8
13
  */
@@ -14,14 +19,22 @@ export interface ChainHeadSelectorParams extends ChainFinalizerParams {
14
19
  */
15
20
  backoffMs?: number;
16
21
  context: BaseContext;
22
+ /**
23
+ * Computes whether a candidate's producer had standing. Absent means the question is never
24
+ * asked, which is what keeps a node with no stake readers running exactly as it does today.
25
+ */
26
+ eligibility?: ProducerEligibilityEvaluator;
17
27
  mempoolViewer: MempoolViewer;
18
28
  /**
19
29
  * Minimum number of uncle candidates required before accepting one.
20
30
  * When undefined, findBestUncle applies DEFAULT_MIN_CANDIDATES from the protocol SDK.
21
31
  */
22
32
  minCandidates?: number;
33
+ /** Where to publish what the two gates concluded, in shadow posture. */
34
+ publishAdmissionShadow?: (report: AdmissionShadowReport) => Promise<void>;
23
35
  }
24
36
  export declare class ChainHeadSelector extends ChainFinalizer<ChainHeadSelectorParams> {
37
+ protected admission: AdmissionMode;
25
38
  protected allowedProducers?: Address[];
26
39
  protected backoffMs?: number;
27
40
  protected minCandidates?: number;
@@ -37,5 +50,32 @@ export declare class ChainHeadSelector extends ChainFinalizer<ChainHeadSelectorP
37
50
  };
38
51
  protected get mempoolViewer(): MempoolViewer;
39
52
  findBestHead(): Promise<SignedHydratedBlockWithHashMeta[]>;
53
+ /**
54
+ * Applies the configured admission posture.
55
+ *
56
+ * In `shadow` the allow-list still decides — participation is computed and published beside it,
57
+ * and changes nothing. That is the entire value of the posture: the network keeps behaving
58
+ * exactly as it did while everyone gets to see what the new rule would have done.
59
+ *
60
+ * In `enforce` participation gates, but only when it reached a conclusion. A candidate whose
61
+ * standing cannot be established is admitted, not rejected — otherwise a finalizer that lost
62
+ * its stake reader would quietly stop accepting anyone's blocks and stall the chain.
63
+ *
64
+ * Assessments publish in both postures. The audit trail must not disappear at the moment
65
+ * admission starts gating — enforce is when it matters most.
66
+ */
67
+ protected admit(all: SignedHydratedBlockWithHashMeta[], allowed: SignedHydratedBlockWithHashMeta[]): Promise<SignedHydratedBlockWithHashMeta[]>;
68
+ /**
69
+ * Runs both gates over every candidate.
70
+ *
71
+ * An evaluator that throws yields an unresolvable assessment rather than an exception: this
72
+ * sits on the head-selection path, and a flaky stake reader must never be able to stop the
73
+ * chain from finalizing.
74
+ */
75
+ protected assess(all: SignedHydratedBlockWithHashMeta[]): Promise<AdmissionAssessment[]>;
76
+ /** Whether the configured allow-list admits a candidate. An empty list admits everyone. */
77
+ protected isAllowed(candidate: SignedHydratedBlockWithHashMeta): boolean;
78
+ /** Publishes what the two gates concluded, swallowing failures. */
79
+ protected publishShadow(assessments: AdmissionAssessment[]): Promise<void>;
40
80
  }
41
81
  //# sourceMappingURL=ChainHeadSelector.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"ChainHeadSelector.d.ts","sourceRoot":"","sources":["../../../../src/modules/analyze/ChainHeadSelector.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,iBAAiB,CAAA;AAI9C,OAAO,KAAK,EACV,WAAW,EAAE,aAAa,EAAE,+BAA+B,EAC5D,MAAM,sBAAsB,CAAA;AAK7B,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,qBAAqB,CAAA;AAC/D,OAAO,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAA;AAEpD,MAAM,WAAW,uBAAwB,SAAQ,oBAAoB;IACnE;;OAEG;IACH,gBAAgB,CAAC,EAAE,OAAO,EAAE,CAAA;IAC5B;;;;OAIG;IACH,SAAS,CAAC,EAAE,MAAM,CAAA;IAClB,OAAO,EAAE,WAAW,CAAA;IACpB,aAAa,EAAE,aAAa,CAAA;IAC5B;;;OAGG;IACH,aAAa,CAAC,EAAE,MAAM,CAAA;CACvB;AAED,qBAAa,iBAAkB,SAAQ,cAAc,CAAC,uBAAuB,CAAC;IAC5E,SAAS,CAAC,gBAAgB,CAAC,EAAE,OAAO,EAAE,CAAA;IACtC,SAAS,CAAC,SAAS,CAAC,EAAE,MAAM,CAAA;IAC5B,SAAS,CAAC,aAAa,CAAC,EAAE,MAAM,CAAA;IAChC,OAAO,CAAC,mBAAmB,CAAa;gBAE5B,MAAM,EAAE,uBAAuB;IAO3C,SAAS,KAAK,OAAO;;;;;;;MAEpB;IAED,SAAS,KAAK,aAAa,kBAE1B;IAEK,YAAY,IAAI,OAAO,CAAC,+BAA+B,EAAE,CAAC;CAgBjE"}
1
+ {"version":3,"file":"ChainHeadSelector.d.ts","sourceRoot":"","sources":["../../../../src/modules/analyze/ChainHeadSelector.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,iBAAiB,CAAA;AAI9C,OAAO,KAAK,EACV,WAAW,EAAE,aAAa,EAAE,+BAA+B,EAC5D,MAAM,sBAAsB,CAAA;AAK7B,OAAO,KAAK,EACV,mBAAmB,EAAE,aAAa,EAAE,qBAAqB,EAAE,4BAA4B,EACxF,MAAM,gBAAgB,CAAA;AAEvB,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,qBAAqB,CAAA;AAC/D,OAAO,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAA;AAEpD,MAAM,WAAW,uBAAwB,SAAQ,oBAAoB;IACnE;;OAEG;IACH,SAAS,CAAC,EAAE,aAAa,CAAA;IACzB;;OAEG;IACH,gBAAgB,CAAC,EAAE,OAAO,EAAE,CAAA;IAC5B;;;;OAIG;IACH,SAAS,CAAC,EAAE,MAAM,CAAA;IAClB,OAAO,EAAE,WAAW,CAAA;IACpB;;;OAGG;IACH,WAAW,CAAC,EAAE,4BAA4B,CAAA;IAC1C,aAAa,EAAE,aAAa,CAAA;IAC5B;;;OAGG;IACH,aAAa,CAAC,EAAE,MAAM,CAAA;IACtB,wEAAwE;IACxE,sBAAsB,CAAC,EAAE,CAAC,MAAM,EAAE,qBAAqB,KAAK,OAAO,CAAC,IAAI,CAAC,CAAA;CAC1E;AAED,qBAAa,iBAAkB,SAAQ,cAAc,CAAC,uBAAuB,CAAC;IAC5E,SAAS,CAAC,SAAS,EAAE,aAAa,CAAA;IAClC,SAAS,CAAC,gBAAgB,CAAC,EAAE,OAAO,EAAE,CAAA;IACtC,SAAS,CAAC,SAAS,CAAC,EAAE,MAAM,CAAA;IAC5B,SAAS,CAAC,aAAa,CAAC,EAAE,MAAM,CAAA;IAChC,OAAO,CAAC,mBAAmB,CAAa;gBAE5B,MAAM,EAAE,uBAAuB;IAQ3C,SAAS,KAAK,OAAO;;;;;;;MAEpB;IAED,SAAS,KAAK,aAAa,kBAE1B;IAEK,YAAY,IAAI,OAAO,CAAC,+BAA+B,EAAE,CAAC;IAahE;;;;;;;;;;;;;OAaG;cACa,KAAK,CACnB,GAAG,EAAE,+BAA+B,EAAE,EACtC,OAAO,EAAE,+BAA+B,EAAE,GACzC,OAAO,CAAC,+BAA+B,EAAE,CAAC;IAW7C;;;;;;OAMG;cACa,MAAM,CAAC,GAAG,EAAE,+BAA+B,EAAE,GAAG,OAAO,CAAC,mBAAmB,EAAE,CAAC;IAmB9F,2FAA2F;IAC3F,SAAS,CAAC,SAAS,CAAC,SAAS,EAAE,+BAA+B,GAAG,OAAO;IAOxE,mEAAmE;cACnD,aAAa,CAAC,WAAW,EAAE,mBAAmB,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC;CAcjF"}
@@ -0,0 +1,65 @@
1
+ import type { Promisable } from '@ariestools/sdk';
2
+ import type { XyoAddress } from '@xyo-network/sdk';
3
+ import type { SignedHydratedBlockWithHashMeta } from '@xyo-network/xl1-sdk';
4
+ import type { EligibilityEvaluation } from '../slashing/index.js';
5
+ /**
6
+ * How a finalizer decides which candidates it will consider.
7
+ *
8
+ * Three postures, and moving between them is a configuration change rather than a different
9
+ * build. That constraint is deliberate: a network that had to be redeployed to step back from
10
+ * enforcement would, in the moment it most needed to step back, be unable to.
11
+ *
12
+ * - `allowlist` — only the named producers, which is how the chain runs today
13
+ * - `shadow` — the same gate, plus participation computed and published for every candidate
14
+ * - `enforce` — participation itself gates
15
+ */
16
+ export declare const AdmissionModes: readonly ["allowlist", "shadow", "enforce"];
17
+ /** How a finalizer decides which candidates it will consider. */
18
+ export type AdmissionMode = typeof AdmissionModes[number];
19
+ /** Evaluates whether a candidate's producer had standing to produce it. */
20
+ export type ProducerEligibilityEvaluator = (candidate: SignedHydratedBlockWithHashMeta) => Promisable<EligibilityEvaluation>;
21
+ /** What both gates concluded about one candidate. */
22
+ export interface AdmissionAssessment {
23
+ /** Whether the allow-list admits it. */
24
+ admittedByAllowList: boolean;
25
+ /** The candidate's height. */
26
+ block: number;
27
+ /** The candidate's signed identity. */
28
+ dataHash: string;
29
+ /** What the participation predicate concluded. */
30
+ eligibility: EligibilityEvaluation;
31
+ /** The producer. */
32
+ producer: XyoAddress;
33
+ }
34
+ /**
35
+ * What the two gates said about a round of candidates, and where they disagreed.
36
+ *
37
+ * Published rather than logged, because the whole purpose of the shadow posture is that anyone —
38
+ * not just the operator holding the terminal — can see what enforcement would have done before it
39
+ * does it. An operator convinced by their own logs has convinced nobody.
40
+ */
41
+ export interface AdmissionShadowReport {
42
+ /** Every candidate considered this round. */
43
+ assessments: AdmissionAssessment[];
44
+ /** Only those where the two gates disagreed. */
45
+ divergent: AdmissionAssessment[];
46
+ /** The finalized height this round was selected against. */
47
+ head: number;
48
+ }
49
+ /** Moniker the admission shadow publisher resolves under. */
50
+ export declare const AdmissionShadowPublishRunnerMoniker = "AdmissionShadowPublishRunner";
51
+ /**
52
+ * Publishes what both admission gates concluded.
53
+ *
54
+ * An interface rather than a class here because the finalizer must not depend on the launcher
55
+ * that supplies the implementation — the actor states what it needs, and orchestration decides
56
+ * what satisfies it.
57
+ */
58
+ export interface AdmissionShadowPublishRunner {
59
+ publish(report: AdmissionShadowReport): Promisable<void>;
60
+ }
61
+ /** Whether a resolved provider can actually publish shadow reports. */
62
+ export declare function isAdmissionShadowPublishRunner(value: unknown): value is AdmissionShadowPublishRunner;
63
+ /** Whether the two gates reached different conclusions about a candidate. */
64
+ export declare function isDivergent(assessment: AdmissionAssessment): boolean;
65
+ //# sourceMappingURL=admission.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"admission.d.ts","sourceRoot":"","sources":["../../../../src/modules/analyze/admission.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAA;AACjD,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAA;AAClD,OAAO,KAAK,EAAE,+BAA+B,EAAE,MAAM,sBAAsB,CAAA;AAE3E,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,WAAW,CAAA;AAEtD;;;;;;;;;;GAUG;AACH,eAAO,MAAM,cAAc,6CAA8C,CAAA;AAEzE,iEAAiE;AACjE,MAAM,MAAM,aAAa,GAAG,OAAO,cAAc,CAAC,MAAM,CAAC,CAAA;AAEzD,2EAA2E;AAC3E,MAAM,MAAM,4BAA4B,GACpC,CAAC,SAAS,EAAE,+BAA+B,KAAK,UAAU,CAAC,qBAAqB,CAAC,CAAA;AAErF,qDAAqD;AACrD,MAAM,WAAW,mBAAmB;IAClC,wCAAwC;IACxC,mBAAmB,EAAE,OAAO,CAAA;IAC5B,8BAA8B;IAC9B,KAAK,EAAE,MAAM,CAAA;IACb,uCAAuC;IACvC,QAAQ,EAAE,MAAM,CAAA;IAChB,kDAAkD;IAClD,WAAW,EAAE,qBAAqB,CAAA;IAClC,oBAAoB;IACpB,QAAQ,EAAE,UAAU,CAAA;CACrB;AAED;;;;;;GAMG;AACH,MAAM,WAAW,qBAAqB;IACpC,6CAA6C;IAC7C,WAAW,EAAE,mBAAmB,EAAE,CAAA;IAClC,gDAAgD;IAChD,SAAS,EAAE,mBAAmB,EAAE,CAAA;IAChC,4DAA4D;IAC5D,IAAI,EAAE,MAAM,CAAA;CACb;AAED,6DAA6D;AAC7D,eAAO,MAAM,mCAAmC,iCAAiC,CAAA;AAEjF;;;;;;GAMG;AACH,MAAM,WAAW,4BAA4B;IAC3C,OAAO,CAAC,MAAM,EAAE,qBAAqB,GAAG,UAAU,CAAC,IAAI,CAAC,CAAA;CACzD;AAED,uEAAuE;AACvE,wBAAgB,8BAA8B,CAAC,KAAK,EAAE,OAAO,GAAG,KAAK,IAAI,4BAA4B,CAEpG;AAED,6EAA6E;AAC7E,wBAAgB,WAAW,CAAC,UAAU,EAAE,mBAAmB,GAAG,OAAO,CAIpE"}
@@ -1,3 +1,4 @@
1
+ export * from './admission.js';
1
2
  export * from './analyzeChain.js';
2
3
  export * from './BalanceAnalyzer/index.js';
3
4
  export * from './ChainFinalizer.js';
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/modules/analyze/index.ts"],"names":[],"mappings":"AAAA,cAAc,mBAAmB,CAAA;AACjC,cAAc,4BAA4B,CAAA;AAC1C,cAAc,qBAAqB,CAAA;AACnC,cAAc,wBAAwB,CAAA;AACtC,cAAc,qBAAqB,CAAA;AACnC,cAAc,6BAA6B,CAAA"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/modules/analyze/index.ts"],"names":[],"mappings":"AAAA,cAAc,gBAAgB,CAAA;AAC9B,cAAc,mBAAmB,CAAA;AACjC,cAAc,4BAA4B,CAAA;AAC1C,cAAc,qBAAqB,CAAA;AACnC,cAAc,wBAAwB,CAAA;AACtC,cAAc,qBAAqB,CAAA;AACnC,cAAc,6BAA6B,CAAA"}
@@ -20,6 +20,14 @@ export interface BuildNextBlockOptions extends BaseBuildBlockOptions {
20
20
  previousBlockNumber: XL1BlockNumber;
21
21
  previousStepHashes: Hash[];
22
22
  stepRewardPoolBalance: AttoXL1;
23
+ /**
24
+ * Hash of this producer's own earlier candidate at the same height and parent, when re-proposing.
25
+ *
26
+ * Signed, so it cannot be added or dropped after the fact. Its whole job is to make honest
27
+ * re-proposal distinguishable from equivocation: two differing candidates at one height are
28
+ * indistinguishable from outside unless the later one says which one it replaces.
29
+ */
30
+ supersedes?: Hash;
23
31
  }
24
32
  export declare const isBuildNextBlockOptions: (value: unknown) => value is BuildNextBlockOptions;
25
33
  export type BuildBlockOptions = BuildGenesisBlockOptions | BuildNextBlockOptions;