@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
3
  "sources": ["../../src/modules/protocol/block/buildBlock.ts", "../../src/modules/protocol/block/BuildBlockOptions.ts", "../../src/modules/protocol/block/buildGenesisBlock.ts", "../../src/modules/protocol/block/buildNextBlock.ts", "../../src/modules/protocol/block/createGenesisBlock.ts", "../../src/modules/protocol/block/createProducerChainStakeIntentTransaction.ts", "../../src/modules/protocol/block/sort.ts", "../../src/modules/protocol/frameList.ts"],
4
- "sourcesContent": ["import type { Hex } from '@ariestools/sdk'\nimport { assertEx, isDefined } from '@ariestools/sdk'\nimport type { AnyPayload, WithStorageMeta } from '@xyo-network/sdk'\nimport {\n asAnyPayload, BoundWitnessBuilder, PayloadBuilder,\n} from '@xyo-network/sdk'\nimport type {\n BlockBoundWitness, SignedHydratedBlockWithHashMeta, Transfer,\n} from '@xyo-network/xl1-sdk'\nimport {\n asXL1BlockNumber,\n AttoXL1,\n createTransferPayload,\n isBlockBoundWitness,\n rewardAddressFromStepIdentity,\n StepRewardFractions, StepSizes,\n validateTransactionsOpcodes,\n XL1_PROTOCOL_VERSION, XYO_STEP_REWARD_ADDRESS, XYO_ZERO_ADDRESS,\n} from '@xyo-network/xl1-sdk'\n\nimport {\n type BuildBlockOptions, isBuildGenesisBlockOptions, isBuildNextBlockOptions,\n} from './BuildBlockOptions.ts'\n\n/*\n//this is for testing only to speed up the pace\nexport const StepRewardFractions = [\n [0n, 1n], // 0%\n [1n, 10_000n], // 0.01%\n [2n, 1000n], // 0.2%\n [3n, 100n], // 3%\n [45n, 100n], // 45%\n] as const\n */\n\nfunction calculateCompletedStepReward(step: number, balance: AttoXL1): AttoXL1 {\n return AttoXL1(StepRewardFractions[step][0] * balance / StepRewardFractions[step][1])\n}\n\nexport async function buildBlock(options: BuildBlockOptions): Promise<SignedHydratedBlockWithHashMeta> {\n const previousBlockNumber = isBuildGenesisBlockOptions(options) ? -1 : options.previousBlockNumber\n const blockNumber = asXL1BlockNumber(previousBlockNumber + 1, true)\n const inStepHashes = isBuildNextBlockOptions(options) ? options.previousStepHashes : []\n const previousBlockHash = isBuildNextBlockOptions(options) ? options.previousBlockHash : undefined\n const stepRewardPoolBalance = isBuildNextBlockOptions(options) ? options.stepRewardPoolBalance : AttoXL1(0n)\n const {\n chainId, txs,\n chainStepRewardAddress = XYO_STEP_REWARD_ADDRESS,\n blockPayloads, protocol = XL1_PROTOCOL_VERSION, signers,\n } = options\n const step_hashes: Hex[] = []\n\n for (const [tx] of txs) {\n if (tx.nbf > blockNumber) {\n throw new Error(`Transaction ${await PayloadBuilder.hash(tx)} not valid for block ${blockNumber} - NBF is ${tx.nbf}`)\n }\n if (tx.exp < blockNumber) {\n throw new Error(`Transaction ${await PayloadBuilder.hash(tx)} not valid for block ${blockNumber} - EXP is ${tx.exp}`)\n }\n }\n\n const completedStepRewardTransfers: Transfer[] = []\n\n // update the step hashes\n for (const [i, step] of StepSizes.entries()) {\n if (blockNumber < step) {\n break\n }\n if (blockNumber % step === 0) {\n if (StepRewardFractions[i][0] > 0 && chainStepRewardAddress !== XYO_ZERO_ADDRESS) {\n const completedStepRewardHolderAddress = rewardAddressFromStepIdentity({ block: blockNumber, step })\n const completedStepReward = calculateCompletedStepReward(i, stepRewardPoolBalance)\n completedStepRewardTransfers.push(createTransferPayload(chainStepRewardAddress, { [completedStepRewardHolderAddress]: completedStepReward }))\n }\n step_hashes.push(assertEx(previousBlockHash, () => `Previous block hash is required for step ${step} at block ${blockNumber}`))\n } else {\n if (isDefined(inStepHashes.at(i))) {\n step_hashes.push(inStepHashes[i])\n }\n }\n }\n\n const previous = previousBlockHash ?? null\n const block = blockNumber\n const txElevatedPayloads = await validateTransactionsOpcodes(txs)\n\n const payloads = [\n ...txs.map(([tx]) => tx),\n ...blockPayloads,\n ...txElevatedPayloads,\n ...completedStepRewardTransfers,\n ].map(p => asAnyPayload(p, true))\n\n const boundWitnessBuilder = new BoundWitnessBuilder<BlockBoundWitness, WithStorageMeta<AnyPayload>>()\n const [bw, txPayloads] = await boundWitnessBuilder\n .fields({\n block, chain: chainId, previous, step_hashes, protocol,\n })\n .meta({ $epoch: Date.now(), $signatures: [] })\n .signers(signers)\n .payloads(await PayloadBuilder.addStorageMeta(payloads))\n .build()\n assertEx(isBlockBoundWitness(bw), () => 'Build of BlockBoundWitness failed')\n return [await PayloadBuilder.addStorageMeta(bw), txPayloads]\n}\n", "import type { Address, Hash } from '@ariestools/sdk'\nimport {\n isAddress, isArray, isHash,\n isNumber, isObject,\n} from '@ariestools/sdk'\nimport type { AccountInstance } from '@xyo-network/sdk'\nimport type {\n AllowedBlockPayload, AttoXL1, ChainId, SignedHydratedTransaction,\n XL1BlockNumber,\n} from '@xyo-network/xl1-sdk'\n\nexport interface BaseBuildBlockOptions {\n blockPayloads: AllowedBlockPayload[]\n chainId: ChainId\n chainStepRewardAddress?: Address\n previousBlockNumber?: XL1BlockNumber\n protocol?: number\n signers: AccountInstance[]\n txs: SignedHydratedTransaction[]\n}\n\nexport const isBaseBuildBlockOptions = (value: unknown): value is BaseBuildBlockOptions => {\n if (!isObject(value)) {\n return false\n }\n const typedValue = value as BaseBuildBlockOptions\n if (!isArray(typedValue.blockPayloads) || !isAddress(typedValue.chainId) || !isArray(typedValue.signers) || !isArray(typedValue.txs)) {\n return false\n }\n return true\n}\n\nexport interface BuildGenesisBlockOptions extends BaseBuildBlockOptions {\n previousBlockHash: null\n}\n\nexport const isBuildGenesisBlockOptions = (value: unknown): value is BuildGenesisBlockOptions => {\n if (!isBaseBuildBlockOptions(value)) {\n return false\n }\n const typedValue = value as BuildGenesisBlockOptions\n if (typedValue.previousBlockHash !== null) {\n return false\n }\n if (typedValue.previousBlockNumber !== undefined) {\n return false\n }\n return true\n}\n\nexport interface BuildNextBlockOptions extends BaseBuildBlockOptions {\n previousBlockHash: Hash\n previousBlockNumber: XL1BlockNumber\n previousStepHashes: Hash[]\n stepRewardPoolBalance: AttoXL1\n}\n\nexport const isBuildNextBlockOptions = (value: unknown): value is BuildNextBlockOptions => {\n if (!isBaseBuildBlockOptions(value)) {\n return false\n }\n const typedValue = value as BuildNextBlockOptions\n if (!isHash(typedValue.previousBlockHash)) {\n return false\n }\n if (!isNumber(typedValue.previousBlockNumber)) {\n return false\n }\n if (!isArray(typedValue.previousStepHashes)) {\n return false\n }\n return true\n}\n\nexport type BuildBlockOptions = BuildGenesisBlockOptions | BuildNextBlockOptions\n", "import type { AccountInstance } from '@xyo-network/sdk'\nimport type {\n AllowedBlockPayload, ChainId,\n SignedHydratedBlockWithHashMeta,\n SignedHydratedTransactionWithHashMeta,\n} from '@xyo-network/xl1-sdk'\nimport { XYO_ZERO_ADDRESS } from '@xyo-network/xl1-sdk'\n\nimport { buildBlock } from './buildBlock.ts'\n\nexport async function buildGenesisBlock(\n chainId: ChainId,\n txs: SignedHydratedTransactionWithHashMeta[],\n blockPayloads: AllowedBlockPayload[],\n signers: AccountInstance[],\n chainStepRewardAddress = XYO_ZERO_ADDRESS,\n protocol?: number,\n): Promise<SignedHydratedBlockWithHashMeta> {\n return await buildBlock({\n previousBlockHash: null,\n chainId,\n txs,\n blockPayloads,\n signers,\n chainStepRewardAddress,\n protocol,\n })\n}\n", "import type { AccountInstance, WithHashMeta } from '@xyo-network/sdk'\nimport type {\n AllowedBlockPayload, BlockBoundWitness,\n ChainId,\n SignedHydratedBlockWithHashMeta,\n SignedHydratedTransaction,\n} from '@xyo-network/xl1-sdk'\nimport {\n AttoXL1,\n XYO_STEP_REWARD_ADDRESS,\n} from '@xyo-network/xl1-sdk'\n\nimport { buildBlock } from './buildBlock.ts'\n\nexport async function buildNextBlock(\n previousBlock: WithHashMeta<BlockBoundWitness>,\n txs: SignedHydratedTransaction[],\n blockPayloads: AllowedBlockPayload[],\n signers: AccountInstance[],\n chainStepRewardAddress = XYO_STEP_REWARD_ADDRESS,\n stepRewardPoolBalance: AttoXL1 = AttoXL1(0n),\n protocol?: number,\n chainId?: ChainId,\n): Promise<SignedHydratedBlockWithHashMeta> {\n return await buildBlock({\n chainId: chainId ?? previousBlock.chain,\n previousBlockNumber: previousBlock.block,\n previousStepHashes: previousBlock.step_hashes ?? [],\n previousBlockHash: previousBlock._hash,\n txs,\n blockPayloads,\n signers,\n protocol,\n chainStepRewardAddress,\n stepRewardPoolBalance,\n })\n}\n", "import type { Address } from '@ariestools/sdk'\nimport { toAddress } from '@ariestools/sdk'\nimport type {\n AccountInstance, WithHashMeta, XyoAddress,\n} from '@xyo-network/sdk'\nimport { PayloadBuilder } from '@xyo-network/sdk'\nimport type {\n AllowedBlockPayload, ChainId,\n SignedHydratedBlockWithHashMeta,\n} from '@xyo-network/xl1-sdk'\nimport {\n BlockBoundWitnessSchemaPayload, BlockBoundWitnessWithStorageMetaSchemaPayload,\n ChainStakeIntentPayloadJsonSchemaPayload,\n createTransferPayload,\n HashPayloadJsonSchemaPayload,\n TransactionBoundWitnessSchemaPayload, TransactionBoundWitnessWithStorageMetaSchemaPayload, TransferPayloadJsonSchemaPayload,\n} from '@xyo-network/xl1-sdk'\n\nimport { buildGenesisBlock } from './buildGenesisBlock.ts'\nimport { createProducerChainStakeIntent } from './createProducerChainStakeIntentTransaction.ts'\n\nexport const createGenesisBlock = async (\n initialBlockProducer: AccountInstance,\n nextContractAddress: ChainId,\n genesisBlockRewardAmount: bigint,\n genesisBlockRewardAddress: XyoAddress,\n): Promise<SignedHydratedBlockWithHashMeta> => {\n const blockPayloads: WithHashMeta<AllowedBlockPayload>[] = await PayloadBuilder.addHashMeta([\n TransferPayloadJsonSchemaPayload,\n BlockBoundWitnessSchemaPayload,\n BlockBoundWitnessWithStorageMetaSchemaPayload,\n TransactionBoundWitnessSchemaPayload,\n TransactionBoundWitnessWithStorageMetaSchemaPayload,\n ChainStakeIntentPayloadJsonSchemaPayload,\n HashPayloadJsonSchemaPayload,\n ])\n const intentPayload = await createProducerChainStakeIntent(toAddress(initialBlockProducer.address), 1, 0)\n blockPayloads.push(intentPayload)\n if (genesisBlockRewardAmount > 0n) {\n blockPayloads.push(await PayloadBuilder.addHashMeta(createTransferPayload(\n nextContractAddress as Address,\n { [genesisBlockRewardAddress]: genesisBlockRewardAmount },\n )))\n }\n return await buildGenesisBlock(nextContractAddress, [], blockPayloads, [initialBlockProducer])\n}\n", "import type { Address } from '@ariestools/sdk'\nimport { toAddress } from '@ariestools/sdk'\nimport type { AccountInstance } from '@xyo-network/sdk'\nimport { PayloadBuilder } from '@xyo-network/sdk'\nimport type {\n ChainId,\n ChainStakeIntent,\n HydratedTransactionWithHashMeta,\n XL1BlockNumber,\n} from '@xyo-network/xl1-sdk'\nimport {\n asXL1BlockNumber, buildTransaction,\n ChainStakeIntentSchema, defaultTransactionFees,\n} from '@xyo-network/xl1-sdk'\n\nexport async function createProducerChainStakeIntent(from: Address, exp: number, nbf = 0) {\n const builder = new PayloadBuilder<ChainStakeIntent>({ schema: ChainStakeIntentSchema })\n return await PayloadBuilder.addHashMeta(builder.fields({\n from,\n exp,\n nbf,\n intent: 'producer',\n }).build())\n}\n\nexport async function createProducerChainStakeIntentTransaction(\n chain: ChainId,\n signers: AccountInstance[] = [],\n producer: Address,\n exp: XL1BlockNumber,\n nbf = asXL1BlockNumber(0, true),\n fees = defaultTransactionFees,\n): Promise<HydratedTransactionWithHashMeta> {\n // Create staked intents for all the block producers declaring their intent to produce blocks\n const intent = await createProducerChainStakeIntent(producer, exp, nbf)\n const tx = await buildTransaction(\n chain,\n [intent],\n [],\n signers,\n nbf,\n exp,\n toAddress(signers[0].address),\n fees,\n )\n return tx\n}\n", "import type { BlockBoundWitness } from '@xyo-network/xl1-sdk'\n\nexport type BlockBoundWitnessComparator = (a: BlockBoundWitness, b: BlockBoundWitness) => number\n\nexport const sortBlocksAscending: BlockBoundWitnessComparator = (a, b) => {\n const compared = a.block - b.block\n return compared > 0 ? 1 : compared < 0 ? -1 : 0\n}\n\nexport const sortBlocksDescending: BlockBoundWitnessComparator = (first, second) => sortBlocksAscending(second, first)\n\nexport const sortBlocks = (\n blocks: BlockBoundWitness[],\n compareFn: BlockBoundWitnessComparator = sortBlocksAscending,\n): BlockBoundWitness[] => blocks.toSorted(compareFn)\n\nexport const toSortedBlocks = (\n blocks: BlockBoundWitness[],\n compareFn: BlockBoundWitnessComparator = sortBlocksAscending,\n): BlockBoundWitness[] => sortBlocks([...blocks], compareFn)\n", "import type { Hash } from '@ariestools/sdk'\nimport type { ReadArchivist } from '@xyo-network/sdk'\nimport {\n asBlockBoundWitnessWithStorageMeta, type BlockBoundWitness, StepSizes,\n} from '@xyo-network/xl1-sdk'\n\n// This function is not yet complete and definitely not tested, so do not use!\n\nfunction shouldStopAtBreak(blockToCheck: BlockBoundWitness, breaks: (Hash | null)[], breakIndex: number): boolean {\n const breakHash = breaks[breakIndex]\n if (breakHash === null) return false\n return blockToCheck.step_hashes?.at(breakIndex) === breakHash\n}\n\nfunction hasBreakForBlock(blockToCheck: BlockBoundWitness, breaks: (Hash | null)[]): boolean {\n for (const [i] of breaks.entries()) {\n if (shouldStopAtBreak(blockToCheck, breaks, i)) {\n return true\n }\n }\n return false\n}\n\nasync function collectStepHashes(\n block: BlockBoundWitness,\n stepIndex: number,\n archivist: ReadArchivist,\n breaks: (Hash | null)[],\n): Promise<Hash[]> {\n const stepHashes: Hash[] = []\n let blockToCheck: BlockBoundWitness | undefined = block\n while (blockToCheck) {\n const stepHash: Hash | undefined = blockToCheck.step_hashes?.at(stepIndex)\n if (stepHash === undefined) {\n break\n }\n if (hasBreakForBlock(blockToCheck, breaks)) {\n break\n }\n stepHashes.push(stepHash)\n const archivistResult = await archivist.get([stepHash])\n blockToCheck = asBlockBoundWitnessWithStorageMeta(archivistResult.at(0))\n }\n return stepHashes\n}\n\n// goal is to return an array of arrays of all the step hashes that we should get to have the full history of the block\n// it will leave a gap from the end of the frame list to the head (unless the head just rolled a frame) and gaps between some frames\nexport async function frameList(block: BlockBoundWitness, archivist: ReadArchivist): Promise<Hash[][]> {\n const result: Hash[][] = []\n const stepSizes = [...StepSizes]\n // when to stop for smaller steps, i.e. a large step already has the block\n const breaks: (Hash | null)[] = Array.from({ length: StepSizes.length }, () => null)\n while (stepSizes.length > 0) {\n stepSizes.pop()\n const stepIndex = stepSizes.length\n const stepHashes = await collectStepHashes(block, stepIndex, archivist, breaks)\n result.unshift(stepHashes)\n }\n return result\n}\n"],
5
- "mappings": ";AACA,SAAS,UAAU,iBAAiB;AAEpC;AAAA,EACE;AAAA,EAAc;AAAA,EAAqB;AAAA,OAC9B;AAIP;AAAA,EACE;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EAAqB;AAAA,EACrB;AAAA,EACA;AAAA,EAAsB;AAAA,EAAyB;AAAA,OAC1C;;;ACjBP;AAAA,EACE;AAAA,EAAW;AAAA,EAAS;AAAA,EACpB;AAAA,EAAU;AAAA,OACL;AAiBA,IAAM,0BAA0B,CAAC,UAAmD;AACzF,MAAI,CAAC,SAAS,KAAK,GAAG;AACpB,WAAO;AAAA,EACT;AACA,QAAM,aAAa;AACnB,MAAI,CAAC,QAAQ,WAAW,aAAa,KAAK,CAAC,UAAU,WAAW,OAAO,KAAK,CAAC,QAAQ,WAAW,OAAO,KAAK,CAAC,QAAQ,WAAW,GAAG,GAAG;AACpI,WAAO;AAAA,EACT;AACA,SAAO;AACT;AAMO,IAAM,6BAA6B,CAAC,UAAsD;AAC/F,MAAI,CAAC,wBAAwB,KAAK,GAAG;AACnC,WAAO;AAAA,EACT;AACA,QAAM,aAAa;AACnB,MAAI,WAAW,sBAAsB,MAAM;AACzC,WAAO;AAAA,EACT;AACA,MAAI,WAAW,wBAAwB,QAAW;AAChD,WAAO;AAAA,EACT;AACA,SAAO;AACT;AASO,IAAM,0BAA0B,CAAC,UAAmD;AACzF,MAAI,CAAC,wBAAwB,KAAK,GAAG;AACnC,WAAO;AAAA,EACT;AACA,QAAM,aAAa;AACnB,MAAI,CAAC,OAAO,WAAW,iBAAiB,GAAG;AACzC,WAAO;AAAA,EACT;AACA,MAAI,CAAC,SAAS,WAAW,mBAAmB,GAAG;AAC7C,WAAO;AAAA,EACT;AACA,MAAI,CAAC,QAAQ,WAAW,kBAAkB,GAAG;AAC3C,WAAO;AAAA,EACT;AACA,SAAO;AACT;;;ADrCA,SAAS,6BAA6B,MAAc,SAA2B;AAC7E,SAAO,QAAQ,oBAAoB,IAAI,EAAE,CAAC,IAAI,UAAU,oBAAoB,IAAI,EAAE,CAAC,CAAC;AACtF;AAEA,eAAsB,WAAW,SAAsE;AACrG,QAAM,sBAAsB,2BAA2B,OAAO,IAAI,KAAK,QAAQ;AAC/E,QAAM,cAAc,iBAAiB,sBAAsB,GAAG,IAAI;AAClE,QAAM,eAAe,wBAAwB,OAAO,IAAI,QAAQ,qBAAqB,CAAC;AACtF,QAAM,oBAAoB,wBAAwB,OAAO,IAAI,QAAQ,oBAAoB;AACzF,QAAM,wBAAwB,wBAAwB,OAAO,IAAI,QAAQ,wBAAwB,QAAQ,EAAE;AAC3G,QAAM;AAAA,IACJ;AAAA,IAAS;AAAA,IACT,yBAAyB;AAAA,IACzB;AAAA,IAAe,WAAW;AAAA,IAAsB;AAAA,EAClD,IAAI;AACJ,QAAM,cAAqB,CAAC;AAE5B,aAAW,CAAC,EAAE,KAAK,KAAK;AACtB,QAAI,GAAG,MAAM,aAAa;AACxB,YAAM,IAAI,MAAM,eAAe,MAAM,eAAe,KAAK,EAAE,CAAC,wBAAwB,WAAW,aAAa,GAAG,GAAG,EAAE;AAAA,IACtH;AACA,QAAI,GAAG,MAAM,aAAa;AACxB,YAAM,IAAI,MAAM,eAAe,MAAM,eAAe,KAAK,EAAE,CAAC,wBAAwB,WAAW,aAAa,GAAG,GAAG,EAAE;AAAA,IACtH;AAAA,EACF;AAEA,QAAM,+BAA2C,CAAC;AAGlD,aAAW,CAAC,GAAG,IAAI,KAAK,UAAU,QAAQ,GAAG;AAC3C,QAAI,cAAc,MAAM;AACtB;AAAA,IACF;AACA,QAAI,cAAc,SAAS,GAAG;AAC5B,UAAI,oBAAoB,CAAC,EAAE,CAAC,IAAI,KAAK,2BAA2B,kBAAkB;AAChF,cAAM,mCAAmC,8BAA8B,EAAE,OAAO,aAAa,KAAK,CAAC;AACnG,cAAM,sBAAsB,6BAA6B,GAAG,qBAAqB;AACjF,qCAA6B,KAAK,sBAAsB,wBAAwB,EAAE,CAAC,gCAAgC,GAAG,oBAAoB,CAAC,CAAC;AAAA,MAC9I;AACA,kBAAY,KAAK,SAAS,mBAAmB,MAAM,4CAA4C,IAAI,aAAa,WAAW,EAAE,CAAC;AAAA,IAChI,OAAO;AACL,UAAI,UAAU,aAAa,GAAG,CAAC,CAAC,GAAG;AACjC,oBAAY,KAAK,aAAa,CAAC,CAAC;AAAA,MAClC;AAAA,IACF;AAAA,EACF;AAEA,QAAM,WAAW,qBAAqB;AACtC,QAAM,QAAQ;AACd,QAAM,qBAAqB,MAAM,4BAA4B,GAAG;AAEhE,QAAM,WAAW;AAAA,IACf,GAAG,IAAI,IAAI,CAAC,CAAC,EAAE,MAAM,EAAE;AAAA,IACvB,GAAG;AAAA,IACH,GAAG;AAAA,IACH,GAAG;AAAA,EACL,EAAE,IAAI,OAAK,aAAa,GAAG,IAAI,CAAC;AAEhC,QAAM,sBAAsB,IAAI,oBAAoE;AACpG,QAAM,CAAC,IAAI,UAAU,IAAI,MAAM,oBAC5B,OAAO;AAAA,IACN;AAAA,IAAO,OAAO;AAAA,IAAS;AAAA,IAAU;AAAA,IAAa;AAAA,EAChD,CAAC,EACA,KAAK,EAAE,QAAQ,KAAK,IAAI,GAAG,aAAa,CAAC,EAAE,CAAC,EAC5C,QAAQ,OAAO,EACf,SAAS,MAAM,eAAe,eAAe,QAAQ,CAAC,EACtD,MAAM;AACT,WAAS,oBAAoB,EAAE,GAAG,MAAM,mCAAmC;AAC3E,SAAO,CAAC,MAAM,eAAe,eAAe,EAAE,GAAG,UAAU;AAC7D;;;AElGA,SAAS,oBAAAA,yBAAwB;AAIjC,eAAsB,kBACpB,SACA,KACA,eACA,SACA,yBAAyBC,mBACzB,UAC0C;AAC1C,SAAO,MAAM,WAAW;AAAA,IACtB,mBAAmB;AAAA,IACnB;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EACF,CAAC;AACH;;;ACpBA;AAAA,EACE,WAAAC;AAAA,EACA,2BAAAC;AAAA,OACK;AAIP,eAAsB,eACpB,eACA,KACA,eACA,SACA,yBAAyBC,0BACzB,wBAAiCC,SAAQ,EAAE,GAC3C,UACA,SAC0C;AAC1C,SAAO,MAAM,WAAW;AAAA,IACtB,SAAS,WAAW,cAAc;AAAA,IAClC,qBAAqB,cAAc;AAAA,IACnC,oBAAoB,cAAc,eAAe,CAAC;AAAA,IAClD,mBAAmB,cAAc;AAAA,IACjC;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EACF,CAAC;AACH;;;ACnCA,SAAS,aAAAC,kBAAiB;AAI1B,SAAS,kBAAAC,uBAAsB;AAK/B;AAAA,EACE;AAAA,EAAgC;AAAA,EAChC;AAAA,EACA,yBAAAC;AAAA,EACA;AAAA,EACA;AAAA,EAAsC;AAAA,EAAqD;AAAA,OACtF;;;ACfP,SAAS,iBAAiB;AAE1B,SAAS,kBAAAC,uBAAsB;AAO/B;AAAA,EACE,oBAAAC;AAAA,EAAkB;AAAA,EAClB;AAAA,EAAwB;AAAA,OACnB;AAEP,eAAsB,+BAA+B,MAAe,KAAa,MAAM,GAAG;AACxF,QAAM,UAAU,IAAID,gBAAiC,EAAE,QAAQ,uBAAuB,CAAC;AACvF,SAAO,MAAMA,gBAAe,YAAY,QAAQ,OAAO;AAAA,IACrD;AAAA,IACA;AAAA,IACA;AAAA,IACA,QAAQ;AAAA,EACV,CAAC,EAAE,MAAM,CAAC;AACZ;AAEA,eAAsB,0CACpB,OACA,UAA6B,CAAC,GAC9B,UACA,KACA,MAAMC,kBAAiB,GAAG,IAAI,GAC9B,OAAO,wBACmC;AAE1C,QAAM,SAAS,MAAM,+BAA+B,UAAU,KAAK,GAAG;AACtE,QAAM,KAAK,MAAM;AAAA,IACf;AAAA,IACA,CAAC,MAAM;AAAA,IACP,CAAC;AAAA,IACD;AAAA,IACA;AAAA,IACA;AAAA,IACA,UAAU,QAAQ,CAAC,EAAE,OAAO;AAAA,IAC5B;AAAA,EACF;AACA,SAAO;AACT;;;ADzBO,IAAM,qBAAqB,OAChC,sBACA,qBACA,0BACA,8BAC6C;AAC7C,QAAM,gBAAqD,MAAMC,gBAAe,YAAY;AAAA,IAC1F;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EACF,CAAC;AACD,QAAM,gBAAgB,MAAM,+BAA+BC,WAAU,qBAAqB,OAAO,GAAG,GAAG,CAAC;AACxG,gBAAc,KAAK,aAAa;AAChC,MAAI,2BAA2B,IAAI;AACjC,kBAAc,KAAK,MAAMD,gBAAe,YAAYE;AAAA,MAClD;AAAA,MACA,EAAE,CAAC,yBAAyB,GAAG,yBAAyB;AAAA,IAC1D,CAAC,CAAC;AAAA,EACJ;AACA,SAAO,MAAM,kBAAkB,qBAAqB,CAAC,GAAG,eAAe,CAAC,oBAAoB,CAAC;AAC/F;;;AEzCO,IAAM,sBAAmD,CAAC,GAAG,MAAM;AACxE,QAAM,WAAW,EAAE,QAAQ,EAAE;AAC7B,SAAO,WAAW,IAAI,IAAI,WAAW,IAAI,KAAK;AAChD;AAEO,IAAM,uBAAoD,CAAC,OAAO,WAAW,oBAAoB,QAAQ,KAAK;AAE9G,IAAM,aAAa,CACxB,QACA,YAAyC,wBACjB,OAAO,SAAS,SAAS;AAE5C,IAAM,iBAAiB,CAC5B,QACA,YAAyC,wBACjB,WAAW,CAAC,GAAG,MAAM,GAAG,SAAS;;;ACjB3D;AAAA,EACE;AAAA,EAA4D,aAAAC;AAAA,OACvD;AAIP,SAAS,kBAAkB,cAAiC,QAAyB,YAA6B;AAChH,QAAM,YAAY,OAAO,UAAU;AACnC,MAAI,cAAc,KAAM,QAAO;AAC/B,SAAO,aAAa,aAAa,GAAG,UAAU,MAAM;AACtD;AAEA,SAAS,iBAAiB,cAAiC,QAAkC;AAC3F,aAAW,CAAC,CAAC,KAAK,OAAO,QAAQ,GAAG;AAClC,QAAI,kBAAkB,cAAc,QAAQ,CAAC,GAAG;AAC9C,aAAO;AAAA,IACT;AAAA,EACF;AACA,SAAO;AACT;AAEA,eAAe,kBACb,OACA,WACA,WACA,QACiB;AACjB,QAAM,aAAqB,CAAC;AAC5B,MAAI,eAA8C;AAClD,SAAO,cAAc;AACnB,UAAM,WAA6B,aAAa,aAAa,GAAG,SAAS;AACzE,QAAI,aAAa,QAAW;AAC1B;AAAA,IACF;AACA,QAAI,iBAAiB,cAAc,MAAM,GAAG;AAC1C;AAAA,IACF;AACA,eAAW,KAAK,QAAQ;AACxB,UAAM,kBAAkB,MAAM,UAAU,IAAI,CAAC,QAAQ,CAAC;AACtD,mBAAe,mCAAmC,gBAAgB,GAAG,CAAC,CAAC;AAAA,EACzE;AACA,SAAO;AACT;AAIA,eAAsB,UAAU,OAA0B,WAA6C;AACrG,QAAM,SAAmB,CAAC;AAC1B,QAAM,YAAY,CAAC,GAAGA,UAAS;AAE/B,QAAM,SAA0B,MAAM,KAAK,EAAE,QAAQA,WAAU,OAAO,GAAG,MAAM,IAAI;AACnF,SAAO,UAAU,SAAS,GAAG;AAC3B,cAAU,IAAI;AACd,UAAM,YAAY,UAAU;AAC5B,UAAM,aAAa,MAAM,kBAAkB,OAAO,WAAW,WAAW,MAAM;AAC9E,WAAO,QAAQ,UAAU;AAAA,EAC3B;AACA,SAAO;AACT;",
4
+ "sourcesContent": ["import type { Hash, Hex } from '@ariestools/sdk'\nimport { assertEx, isDefined } from '@ariestools/sdk'\nimport type { AnyPayload, WithStorageMeta } from '@xyo-network/sdk'\nimport {\n asAnyPayload, BoundWitnessBuilder, PayloadBuilder,\n} from '@xyo-network/sdk'\nimport type {\n BlockBoundWitness, SignedHydratedBlockWithHashMeta, Transfer,\n} from '@xyo-network/xl1-sdk'\nimport {\n asXL1BlockNumber,\n AttoXL1,\n createTransferPayload,\n isBlockBoundWitness,\n rewardAddressFromStepIdentity,\n StepRewardFractions, StepSizes,\n validateTransactionsOpcodes,\n XL1_PROTOCOL_VERSION, XYO_STEP_REWARD_ADDRESS, XYO_ZERO_ADDRESS,\n} from '@xyo-network/xl1-sdk'\n\nimport {\n type BuildBlockOptions, isBuildGenesisBlockOptions, isBuildNextBlockOptions,\n} from './BuildBlockOptions.ts'\n\n/*\n//this is for testing only to speed up the pace\nexport const StepRewardFractions = [\n [0n, 1n], // 0%\n [1n, 10_000n], // 0.01%\n [2n, 1000n], // 0.2%\n [3n, 100n], // 3%\n [45n, 100n], // 45%\n] as const\n */\n\nfunction calculateCompletedStepReward(step: number, balance: AttoXL1): AttoXL1 {\n return AttoXL1(StepRewardFractions[step][0] * balance / StepRewardFractions[step][1])\n}\n\n/**\n * The supersedes entry for the signed fields, empty when nothing is superseded.\n *\n * Spread rather than assigned, because an absent supersedes has to stay absent from the signed\n * fields \u2014 a key present with an undefined value would change the hash of every block ever built.\n */\nfunction supersedesField(options: BuildBlockOptions): { supersedes?: Hash } {\n return isBuildNextBlockOptions(options) && options.supersedes !== undefined\n ? { supersedes: options.supersedes }\n : {}\n}\n\nexport async function buildBlock(options: BuildBlockOptions): Promise<SignedHydratedBlockWithHashMeta> {\n const previousBlockNumber = isBuildGenesisBlockOptions(options) ? -1 : options.previousBlockNumber\n const blockNumber = asXL1BlockNumber(previousBlockNumber + 1, true)\n const inStepHashes = isBuildNextBlockOptions(options) ? options.previousStepHashes : []\n const previousBlockHash = isBuildNextBlockOptions(options) ? options.previousBlockHash : undefined\n const stepRewardPoolBalance = isBuildNextBlockOptions(options) ? options.stepRewardPoolBalance : AttoXL1(0n)\n const {\n chainId, txs,\n chainStepRewardAddress = XYO_STEP_REWARD_ADDRESS,\n blockPayloads, protocol = XL1_PROTOCOL_VERSION, signers,\n } = options\n const step_hashes: Hex[] = []\n\n for (const [tx] of txs) {\n if (tx.nbf > blockNumber) {\n throw new Error(`Transaction ${await PayloadBuilder.hash(tx)} not valid for block ${blockNumber} - NBF is ${tx.nbf}`)\n }\n if (tx.exp < blockNumber) {\n throw new Error(`Transaction ${await PayloadBuilder.hash(tx)} not valid for block ${blockNumber} - EXP is ${tx.exp}`)\n }\n }\n\n const completedStepRewardTransfers: Transfer[] = []\n\n // update the step hashes\n for (const [i, step] of StepSizes.entries()) {\n if (blockNumber < step) {\n break\n }\n if (blockNumber % step === 0) {\n if (StepRewardFractions[i][0] > 0 && chainStepRewardAddress !== XYO_ZERO_ADDRESS) {\n const completedStepRewardHolderAddress = rewardAddressFromStepIdentity({ block: blockNumber, step })\n const completedStepReward = calculateCompletedStepReward(i, stepRewardPoolBalance)\n completedStepRewardTransfers.push(createTransferPayload(chainStepRewardAddress, { [completedStepRewardHolderAddress]: completedStepReward }))\n }\n step_hashes.push(assertEx(previousBlockHash, () => `Previous block hash is required for step ${step} at block ${blockNumber}`))\n } else {\n if (isDefined(inStepHashes.at(i))) {\n step_hashes.push(inStepHashes[i])\n }\n }\n }\n\n const previous = previousBlockHash ?? null\n const block = blockNumber\n const txElevatedPayloads = await validateTransactionsOpcodes(txs)\n\n const payloads = [\n ...txs.map(([tx]) => tx),\n ...blockPayloads,\n ...txElevatedPayloads,\n ...completedStepRewardTransfers,\n ].map(p => asAnyPayload(p, true))\n\n const boundWitnessBuilder = new BoundWitnessBuilder<BlockBoundWitness, WithStorageMeta<AnyPayload>>()\n const [bw, txPayloads] = await boundWitnessBuilder\n .fields({\n block,\n chain: chainId,\n previous,\n step_hashes,\n protocol,\n ...supersedesField(options),\n })\n .meta({ $epoch: Date.now(), $signatures: [] })\n .signers(signers)\n .payloads(await PayloadBuilder.addStorageMeta(payloads))\n .build()\n assertEx(isBlockBoundWitness(bw), () => 'Build of BlockBoundWitness failed')\n return [await PayloadBuilder.addStorageMeta(bw), txPayloads]\n}\n", "import type { Address, Hash } from '@ariestools/sdk'\nimport {\n isAddress, isArray, isHash,\n isNumber, isObject,\n} from '@ariestools/sdk'\nimport type { AccountInstance } from '@xyo-network/sdk'\nimport type {\n AllowedBlockPayload, AttoXL1, ChainId, SignedHydratedTransaction,\n XL1BlockNumber,\n} from '@xyo-network/xl1-sdk'\n\nexport interface BaseBuildBlockOptions {\n blockPayloads: AllowedBlockPayload[]\n chainId: ChainId\n chainStepRewardAddress?: Address\n previousBlockNumber?: XL1BlockNumber\n protocol?: number\n signers: AccountInstance[]\n txs: SignedHydratedTransaction[]\n}\n\nexport const isBaseBuildBlockOptions = (value: unknown): value is BaseBuildBlockOptions => {\n if (!isObject(value)) {\n return false\n }\n const typedValue = value as BaseBuildBlockOptions\n if (!isArray(typedValue.blockPayloads) || !isAddress(typedValue.chainId) || !isArray(typedValue.signers) || !isArray(typedValue.txs)) {\n return false\n }\n return true\n}\n\nexport interface BuildGenesisBlockOptions extends BaseBuildBlockOptions {\n previousBlockHash: null\n}\n\nexport const isBuildGenesisBlockOptions = (value: unknown): value is BuildGenesisBlockOptions => {\n if (!isBaseBuildBlockOptions(value)) {\n return false\n }\n const typedValue = value as BuildGenesisBlockOptions\n if (typedValue.previousBlockHash !== null) {\n return false\n }\n if (typedValue.previousBlockNumber !== undefined) {\n return false\n }\n return true\n}\n\nexport interface BuildNextBlockOptions extends BaseBuildBlockOptions {\n previousBlockHash: Hash\n previousBlockNumber: XL1BlockNumber\n previousStepHashes: Hash[]\n stepRewardPoolBalance: AttoXL1\n /**\n * Hash of this producer's own earlier candidate at the same height and parent, when re-proposing.\n *\n * Signed, so it cannot be added or dropped after the fact. Its whole job is to make honest\n * re-proposal distinguishable from equivocation: two differing candidates at one height are\n * indistinguishable from outside unless the later one says which one it replaces.\n */\n supersedes?: Hash\n}\n\nexport const isBuildNextBlockOptions = (value: unknown): value is BuildNextBlockOptions => {\n if (!isBaseBuildBlockOptions(value)) {\n return false\n }\n const typedValue = value as BuildNextBlockOptions\n if (!isHash(typedValue.previousBlockHash)) {\n return false\n }\n if (!isNumber(typedValue.previousBlockNumber)) {\n return false\n }\n if (!isArray(typedValue.previousStepHashes)) {\n return false\n }\n return true\n}\n\nexport type BuildBlockOptions = BuildGenesisBlockOptions | BuildNextBlockOptions\n", "import type { AccountInstance } from '@xyo-network/sdk'\nimport type {\n AllowedBlockPayload, ChainId,\n SignedHydratedBlockWithHashMeta,\n SignedHydratedTransactionWithHashMeta,\n} from '@xyo-network/xl1-sdk'\nimport { XYO_ZERO_ADDRESS } from '@xyo-network/xl1-sdk'\n\nimport { buildBlock } from './buildBlock.ts'\n\nexport async function buildGenesisBlock(\n chainId: ChainId,\n txs: SignedHydratedTransactionWithHashMeta[],\n blockPayloads: AllowedBlockPayload[],\n signers: AccountInstance[],\n chainStepRewardAddress = XYO_ZERO_ADDRESS,\n protocol?: number,\n): Promise<SignedHydratedBlockWithHashMeta> {\n return await buildBlock({\n previousBlockHash: null,\n chainId,\n txs,\n blockPayloads,\n signers,\n chainStepRewardAddress,\n protocol,\n })\n}\n", "import type { Hash } from '@ariestools/sdk'\nimport type { AccountInstance, WithHashMeta } from '@xyo-network/sdk'\nimport type {\n AllowedBlockPayload, BlockBoundWitness,\n ChainId,\n SignedHydratedBlockWithHashMeta,\n SignedHydratedTransaction,\n} from '@xyo-network/xl1-sdk'\nimport {\n AttoXL1,\n XYO_STEP_REWARD_ADDRESS,\n} from '@xyo-network/xl1-sdk'\n\nimport { buildBlock } from './buildBlock.ts'\n\nexport async function buildNextBlock(\n previousBlock: WithHashMeta<BlockBoundWitness>,\n txs: SignedHydratedTransaction[],\n blockPayloads: AllowedBlockPayload[],\n signers: AccountInstance[],\n chainStepRewardAddress = XYO_STEP_REWARD_ADDRESS,\n stepRewardPoolBalance: AttoXL1 = AttoXL1(0n),\n protocol?: number,\n chainId?: ChainId,\n supersedes?: Hash,\n): Promise<SignedHydratedBlockWithHashMeta> {\n return await buildBlock({\n chainId: chainId ?? previousBlock.chain,\n previousBlockNumber: previousBlock.block,\n previousStepHashes: previousBlock.step_hashes ?? [],\n previousBlockHash: previousBlock._hash,\n txs,\n blockPayloads,\n signers,\n protocol,\n chainStepRewardAddress,\n stepRewardPoolBalance,\n supersedes,\n })\n}\n", "import type { Address } from '@ariestools/sdk'\nimport { toAddress } from '@ariestools/sdk'\nimport type {\n AccountInstance, WithHashMeta, XyoAddress,\n} from '@xyo-network/sdk'\nimport { PayloadBuilder } from '@xyo-network/sdk'\nimport type {\n AllowedBlockPayload, ChainId,\n SignedHydratedBlockWithHashMeta,\n} from '@xyo-network/xl1-sdk'\nimport {\n BlockBoundWitnessSchemaPayload, BlockBoundWitnessWithStorageMetaSchemaPayload,\n ChainStakeIntentPayloadJsonSchemaPayload,\n createTransferPayload,\n HashPayloadJsonSchemaPayload,\n TransactionBoundWitnessSchemaPayload, TransactionBoundWitnessWithStorageMetaSchemaPayload, TransferPayloadJsonSchemaPayload,\n} from '@xyo-network/xl1-sdk'\n\nimport { buildGenesisBlock } from './buildGenesisBlock.ts'\nimport { createProducerChainStakeIntent } from './createProducerChainStakeIntentTransaction.ts'\n\nexport const createGenesisBlock = async (\n initialBlockProducer: AccountInstance,\n nextContractAddress: ChainId,\n genesisBlockRewardAmount: bigint,\n genesisBlockRewardAddress: XyoAddress,\n): Promise<SignedHydratedBlockWithHashMeta> => {\n const blockPayloads: WithHashMeta<AllowedBlockPayload>[] = await PayloadBuilder.addHashMeta([\n TransferPayloadJsonSchemaPayload,\n BlockBoundWitnessSchemaPayload,\n BlockBoundWitnessWithStorageMetaSchemaPayload,\n TransactionBoundWitnessSchemaPayload,\n TransactionBoundWitnessWithStorageMetaSchemaPayload,\n ChainStakeIntentPayloadJsonSchemaPayload,\n HashPayloadJsonSchemaPayload,\n ])\n const intentPayload = await createProducerChainStakeIntent(toAddress(initialBlockProducer.address), 1, 0)\n blockPayloads.push(intentPayload)\n if (genesisBlockRewardAmount > 0n) {\n blockPayloads.push(await PayloadBuilder.addHashMeta(createTransferPayload(\n nextContractAddress as Address,\n { [genesisBlockRewardAddress]: genesisBlockRewardAmount },\n )))\n }\n return await buildGenesisBlock(nextContractAddress, [], blockPayloads, [initialBlockProducer])\n}\n", "import type { Address } from '@ariestools/sdk'\nimport { toAddress } from '@ariestools/sdk'\nimport type { AccountInstance } from '@xyo-network/sdk'\nimport { PayloadBuilder } from '@xyo-network/sdk'\nimport type {\n ChainId,\n ChainStakeIntent,\n HydratedTransactionWithHashMeta,\n XL1BlockNumber,\n} from '@xyo-network/xl1-sdk'\nimport {\n asXL1BlockNumber, buildTransaction,\n ChainStakeIntentSchema, defaultTransactionFees,\n} from '@xyo-network/xl1-sdk'\n\nexport async function createProducerChainStakeIntent(from: Address, exp: number, nbf = 0) {\n const builder = new PayloadBuilder<ChainStakeIntent>({ schema: ChainStakeIntentSchema })\n return await PayloadBuilder.addHashMeta(builder.fields({\n from,\n exp,\n nbf,\n intent: 'producer',\n }).build())\n}\n\nexport async function createProducerChainStakeIntentTransaction(\n chain: ChainId,\n signers: AccountInstance[] = [],\n producer: Address,\n exp: XL1BlockNumber,\n nbf = asXL1BlockNumber(0, true),\n fees = defaultTransactionFees,\n): Promise<HydratedTransactionWithHashMeta> {\n // Create staked intents for all the block producers declaring their intent to produce blocks\n const intent = await createProducerChainStakeIntent(producer, exp, nbf)\n const tx = await buildTransaction(\n chain,\n [intent],\n [],\n signers,\n nbf,\n exp,\n toAddress(signers[0].address),\n fees,\n )\n return tx\n}\n", "import type { BlockBoundWitness } from '@xyo-network/xl1-sdk'\n\nexport type BlockBoundWitnessComparator = (a: BlockBoundWitness, b: BlockBoundWitness) => number\n\nexport const sortBlocksAscending: BlockBoundWitnessComparator = (a, b) => {\n const compared = a.block - b.block\n return compared > 0 ? 1 : compared < 0 ? -1 : 0\n}\n\nexport const sortBlocksDescending: BlockBoundWitnessComparator = (first, second) => sortBlocksAscending(second, first)\n\nexport const sortBlocks = (\n blocks: BlockBoundWitness[],\n compareFn: BlockBoundWitnessComparator = sortBlocksAscending,\n): BlockBoundWitness[] => blocks.toSorted(compareFn)\n\nexport const toSortedBlocks = (\n blocks: BlockBoundWitness[],\n compareFn: BlockBoundWitnessComparator = sortBlocksAscending,\n): BlockBoundWitness[] => sortBlocks([...blocks], compareFn)\n", "import type { Hash } from '@ariestools/sdk'\nimport type { ReadArchivist } from '@xyo-network/sdk'\nimport {\n asBlockBoundWitnessWithStorageMeta, type BlockBoundWitness, StepSizes,\n} from '@xyo-network/xl1-sdk'\n\n// This function is not yet complete and definitely not tested, so do not use!\n\nfunction shouldStopAtBreak(blockToCheck: BlockBoundWitness, breaks: (Hash | null)[], breakIndex: number): boolean {\n const breakHash = breaks[breakIndex]\n if (breakHash === null) return false\n return blockToCheck.step_hashes?.at(breakIndex) === breakHash\n}\n\nfunction hasBreakForBlock(blockToCheck: BlockBoundWitness, breaks: (Hash | null)[]): boolean {\n for (const [i] of breaks.entries()) {\n if (shouldStopAtBreak(blockToCheck, breaks, i)) {\n return true\n }\n }\n return false\n}\n\nasync function collectStepHashes(\n block: BlockBoundWitness,\n stepIndex: number,\n archivist: ReadArchivist,\n breaks: (Hash | null)[],\n): Promise<Hash[]> {\n const stepHashes: Hash[] = []\n let blockToCheck: BlockBoundWitness | undefined = block\n while (blockToCheck) {\n const stepHash: Hash | undefined = blockToCheck.step_hashes?.at(stepIndex)\n if (stepHash === undefined) {\n break\n }\n if (hasBreakForBlock(blockToCheck, breaks)) {\n break\n }\n stepHashes.push(stepHash)\n const archivistResult = await archivist.get([stepHash])\n blockToCheck = asBlockBoundWitnessWithStorageMeta(archivistResult.at(0))\n }\n return stepHashes\n}\n\n// goal is to return an array of arrays of all the step hashes that we should get to have the full history of the block\n// it will leave a gap from the end of the frame list to the head (unless the head just rolled a frame) and gaps between some frames\nexport async function frameList(block: BlockBoundWitness, archivist: ReadArchivist): Promise<Hash[][]> {\n const result: Hash[][] = []\n const stepSizes = [...StepSizes]\n // when to stop for smaller steps, i.e. a large step already has the block\n const breaks: (Hash | null)[] = Array.from({ length: StepSizes.length }, () => null)\n while (stepSizes.length > 0) {\n stepSizes.pop()\n const stepIndex = stepSizes.length\n const stepHashes = await collectStepHashes(block, stepIndex, archivist, breaks)\n result.unshift(stepHashes)\n }\n return result\n}\n"],
5
+ "mappings": "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",
6
6
  "names": ["XYO_ZERO_ADDRESS", "XYO_ZERO_ADDRESS", "AttoXL1", "XYO_STEP_REWARD_ADDRESS", "XYO_STEP_REWARD_ADDRESS", "AttoXL1", "toAddress", "PayloadBuilder", "createTransferPayload", "PayloadBuilder", "asXL1BlockNumber", "PayloadBuilder", "toAddress", "createTransferPayload", "StepSizes"]
7
7
  }
@@ -170,7 +170,10 @@ async function processPendingBlocks({
170
170
  backoffMs,
171
171
  minCandidates,
172
172
  deadLetterQueueRunner,
173
- observer
173
+ observer,
174
+ admission,
175
+ eligibility,
176
+ publishAdmissionShadow
174
177
  }) {
175
178
  const start = Date.now();
176
179
  const currentBlock = await blockViewer.currentBlock();
@@ -182,7 +185,10 @@ async function processPendingBlocks({
182
185
  windowedFinalizedChain: [currentBlock],
183
186
  allowedProducers,
184
187
  backoffMs,
185
- minCandidates
188
+ minCandidates,
189
+ admission,
190
+ eligibility,
191
+ publishAdmissionShadow
186
192
  });
187
193
  const bestHeadChain = await headSelector.findBestHead();
188
194
  if (isDefined(bestHeadChain) && bestHeadChain.length > 0) {
@@ -291,12 +297,21 @@ BaseNetworkStakeStepRewardService = __decorateClass([
291
297
  creatableProvider3()
292
298
  ], BaseNetworkStakeStepRewardService);
293
299
 
300
+ // src/modules/services/simple/block/runner/selectSupersededCandidate.ts
301
+ import { isDefined as isDefined2 } from "@ariestools/sdk";
302
+ function selectSupersededCandidate(candidates, address, block, previous) {
303
+ const own = candidates.filter((candidate) => candidate.block === block && candidate.previous === previous && candidate.addresses.includes(address));
304
+ if (own.length === 0) return void 0;
305
+ const superseded = new Set(own.map((candidate) => candidate.supersedes).filter(isDefined2));
306
+ return (own.find((candidate) => !superseded.has(candidate._dataHash)) ?? own[0])._dataHash;
307
+ }
308
+
294
309
  // src/modules/services/simple/block/runner/SimpleBlockRunner.ts
295
310
  import {
296
311
  asAddress,
297
312
  assertEx as assertEx4,
298
313
  hexToBigInt,
299
- isDefined as isDefined2,
314
+ isDefined as isDefined3,
300
315
  toAddress as toAddress2
301
316
  } from "@ariestools/sdk";
302
317
  import {
@@ -313,12 +328,14 @@ import {
313
328
  BlockRewardViewerMoniker,
314
329
  BlockRunnerMoniker,
315
330
  BlockValidationViewerMoniker,
331
+ ChainParamsViewerMoniker,
316
332
  connectArchivist,
317
333
  creatableProvider as creatableProvider4,
318
334
  createDeclarationIntent as createDeclarationIntent2,
319
335
  DeadLetterQueueRunnerMoniker,
320
336
  defaultRewardRatio,
321
337
  FinalizationViewerMoniker,
338
+ isRuleActiveAt,
322
339
  isSignedHydratedBlockWithHashMeta as isSignedHydratedBlockWithHashMeta2,
323
340
  isTransferPayload,
324
341
  MempoolViewerMoniker,
@@ -449,7 +466,10 @@ var SimpleBlockRunner = class extends AbstractCreatableProvider4 {
449
466
  _address;
450
467
  _blockRewardViewer;
451
468
  _blockValidationViewer;
469
+ _chainParamsViewer;
452
470
  _finalizationViewer;
471
+ /** Cache of the last candidate this runner signed; the mempool is the source of truth. */
472
+ _lastSignedCandidate;
453
473
  _mempoolViewer;
454
474
  _rewardAddress;
455
475
  _timeSyncViewer;
@@ -534,6 +554,7 @@ var SimpleBlockRunner = class extends AbstractCreatableProvider4 {
534
554
  this._rewardAddress = asAddress(this.params.rewardAddress ?? this.producerTuning.rewardAddress ?? this.account.address, true);
535
555
  this._timeSyncViewer = await this.locateAndCreate(TimeSyncViewerMoniker);
536
556
  this._deadLetterQueueRunner = await this.locator.tryGetInstance(DeadLetterQueueRunnerMoniker);
557
+ this._chainParamsViewer = await this.locator.tryGetInstance(ChainParamsViewerMoniker);
537
558
  }
538
559
  async next(head) {
539
560
  return await this.proposeNextValidBlock(head);
@@ -565,7 +586,7 @@ var SimpleBlockRunner = class extends AbstractCreatableProvider4 {
565
586
  getProducerRedeclaration(head) {
566
587
  if ((this.params.disableIntentRedeclaration ?? this.producerTuning.disableIntentRedeclaration) === true) return;
567
588
  const currentBlock = head.block;
568
- if (isDefined2(this._lastRedeclarationBlock)) {
589
+ if (isDefined3(this._lastRedeclarationBlock)) {
569
590
  const lastDeclarationExpiry = this._lastRedeclarationBlock + SimpleBlockRunner.RedeclarationDuration;
570
591
  if (currentBlock < lastDeclarationExpiry) return;
571
592
  }
@@ -707,11 +728,31 @@ var SimpleBlockRunner = class extends AbstractCreatableProvider4 {
707
728
  */
708
729
  heartbeatRequired(head) {
709
730
  const epoch = head.$epoch;
710
- if (isDefined2(epoch) && Date.now() - epoch > this.heartbeatInterval) {
731
+ if (isDefined3(epoch) && Date.now() - epoch > this.heartbeatInterval) {
711
732
  return true;
712
733
  }
713
734
  return false;
714
735
  }
736
+ /**
737
+ * The hash of this producer's own earlier candidate at the same height and parent, if any.
738
+ *
739
+ * The parent is part of the match on purpose. Two candidates at one height built on different
740
+ * parents are not a re-proposal, they are different branches, and linking across them would
741
+ * assert a supersession that never happened.
742
+ *
743
+ * Memory is only a cache. A restart wipes it while the pool still holds the prior candidate, so
744
+ * the pool is consulted whenever memory misses. Following the chain to its tip keeps a third
745
+ * proposal pointing at the second rather than back at the first.
746
+ * @param block The height being proposed
747
+ * @param previous The parent this proposal builds on
748
+ * @returns The prior candidate's signed data hash, or undefined when there is none
749
+ */
750
+ async previousOwnCandidateHash(block, previous) {
751
+ const cached = this._lastSignedCandidate;
752
+ if (cached?.block === block && cached.previous === previous) return cached.hash;
753
+ const candidates = (await this.mempoolViewer.pendingBlocks()).map(([candidate]) => candidate);
754
+ return selectSupersededCandidate(candidates, this.address, block, previous);
755
+ }
715
756
  async rejectExhaustedBlock(block, errors) {
716
757
  this.logger?.warn(`Validation of produced block failed: ${errors.at(0)?.message}`);
717
758
  if (this._deadLetterQueueRunner) {
@@ -758,6 +799,27 @@ var SimpleBlockRunner = class extends AbstractCreatableProvider4 {
758
799
  }
759
800
  return matched;
760
801
  }
802
+ /**
803
+ * The candidate this proposal supersedes, or undefined when nothing should be stamped.
804
+ *
805
+ * Identity is the signed data hash rather than the storage hash, because that is what an
806
+ * observer recomputes when deciding whether two candidates are the same block — client meta
807
+ * such as `$epoch` must not be able to make one candidate look like two.
808
+ *
809
+ * With no register wired, or with the field unactivated, this never stamps. That is what keeps
810
+ * a producer running this build emission-identical to one running the release before it, which
811
+ * the rollout depends on: stamping before the fleet has upgraded would partition validation.
812
+ * @param head The block being built on
813
+ * @returns The superseded candidate's hash, or undefined
814
+ */
815
+ async resolveSupersedes(head) {
816
+ const viewer = this._chainParamsViewer;
817
+ if (viewer === void 0) return void 0;
818
+ const params = await viewer.tryCurrentParams();
819
+ const block = head.block + 1;
820
+ if (params === void 0 || !isRuleActiveAt(params, "supersedes-field", block)) return void 0;
821
+ return await this.previousOwnCandidateHash(block, head._hash);
822
+ }
761
823
  async runBuildValidateRetryLoop(args) {
762
824
  const {
763
825
  chainId,
@@ -768,6 +830,7 @@ var SimpleBlockRunner = class extends AbstractCreatableProvider4 {
768
830
  stepRewardPoolBalance,
769
831
  timePayload
770
832
  } = args;
833
+ const supersedes = await this.resolveSupersedes(head);
771
834
  const maxAttempts = Math.max(1, initialFundedTransactions.length);
772
835
  let candidateTransactions = initialFundedTransactions;
773
836
  let candidateTransfers = initialFundedTransfers;
@@ -784,10 +847,16 @@ var SimpleBlockRunner = class extends AbstractCreatableProvider4 {
784
847
  XYO_STEP_REWARD_ADDRESS,
785
848
  stepRewardPoolBalance,
786
849
  void 0,
787
- chainId
850
+ chainId,
851
+ supersedes
788
852
  );
789
853
  const validated = await this.blockValidationViewer.validateBlock(lastBlock, { head: head._hash });
790
854
  if (isSignedHydratedBlockWithHashMeta2(validated)) {
855
+ this._lastSignedCandidate = {
856
+ block: validated[0].block,
857
+ hash: validated[0]._dataHash,
858
+ previous: head._hash
859
+ };
791
860
  return { block: validated, errors: [] };
792
861
  }
793
862
  lastErrors = validated;
@@ -846,6 +915,7 @@ export {
846
915
  XYO_PRODUCER_REDECLARATION_WINDOW,
847
916
  XyoValidator,
848
917
  createBootstrapHead,
849
- processPendingBlocks
918
+ processPendingBlocks,
919
+ selectSupersededCandidate
850
920
  };
851
921
  //# sourceMappingURL=services.mjs.map