@aztec-foundation/l1-artifacts 6.0.0-rc.2 → 6.0.0-rc.4

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 (374) hide show
  1. package/dest/AttesterExitExtLibAbi.d.ts +12 -48
  2. package/dest/AttesterExitExtLibAbi.d.ts.map +1 -1
  3. package/dest/AttesterExitExtLibAbi.js +16 -64
  4. package/dest/AttesterExitExtLibAbi.js.map +1 -1
  5. package/dest/AttesterExitExtLibBytecode.d.ts +1 -1
  6. package/dest/AttesterExitExtLibBytecode.js +1 -1
  7. package/dest/CoinIssuerAbi.d.ts +12 -48
  8. package/dest/CoinIssuerAbi.d.ts.map +1 -1
  9. package/dest/CoinIssuerAbi.js +16 -64
  10. package/dest/CoinIssuerAbi.js.map +1 -1
  11. package/dest/DateGatedRelayerAbi.d.ts +12 -48
  12. package/dest/DateGatedRelayerAbi.d.ts.map +1 -1
  13. package/dest/DateGatedRelayerAbi.js +16 -64
  14. package/dest/DateGatedRelayerAbi.js.map +1 -1
  15. package/dest/EmpireBaseAbi.d.ts +12 -48
  16. package/dest/EmpireBaseAbi.d.ts.map +1 -1
  17. package/dest/EmpireBaseAbi.js +16 -64
  18. package/dest/EmpireBaseAbi.js.map +1 -1
  19. package/dest/EpochProofExtLibAbi.d.ts +12 -48
  20. package/dest/EpochProofExtLibAbi.d.ts.map +1 -1
  21. package/dest/EpochProofExtLibAbi.js +16 -64
  22. package/dest/EpochProofExtLibAbi.js.map +1 -1
  23. package/dest/EpochProofExtLibBytecode.d.ts +1 -1
  24. package/dest/EpochProofExtLibBytecode.d.ts.map +1 -1
  25. package/dest/EpochProofExtLibBytecode.js +1 -1
  26. package/dest/EpochProofExtLibBytecode.js.map +1 -1
  27. package/dest/ErrorsAbi.d.ts +12 -48
  28. package/dest/ErrorsAbi.d.ts.map +1 -1
  29. package/dest/ErrorsAbi.js +16 -64
  30. package/dest/ErrorsAbi.js.map +1 -1
  31. package/dest/EscapeHatchAbi.d.ts +12 -48
  32. package/dest/EscapeHatchAbi.d.ts.map +1 -1
  33. package/dest/EscapeHatchAbi.js +16 -64
  34. package/dest/EscapeHatchAbi.js.map +1 -1
  35. package/dest/EscapeHatchBytecode.d.ts +1 -1
  36. package/dest/EscapeHatchBytecode.js +1 -1
  37. package/dest/EscapeHatchStorage.d.ts +2 -2
  38. package/dest/EscapeHatchStorage.js +2 -2
  39. package/dest/FeeAssetHandlerAbi.d.ts +12 -48
  40. package/dest/FeeAssetHandlerAbi.d.ts.map +1 -1
  41. package/dest/FeeAssetHandlerAbi.js +16 -64
  42. package/dest/FeeAssetHandlerAbi.js.map +1 -1
  43. package/dest/FeeJuicePortalAbi.d.ts +12 -48
  44. package/dest/FeeJuicePortalAbi.d.ts.map +1 -1
  45. package/dest/FeeJuicePortalAbi.js +16 -64
  46. package/dest/FeeJuicePortalAbi.js.map +1 -1
  47. package/dest/FeeJuicePortalBytecode.d.ts +1 -1
  48. package/dest/FeeJuicePortalBytecode.js +1 -1
  49. package/dest/GSEAbi.d.ts +12 -48
  50. package/dest/GSEAbi.d.ts.map +1 -1
  51. package/dest/GSEAbi.js +16 -64
  52. package/dest/GSEAbi.js.map +1 -1
  53. package/dest/GovernanceAbi.d.ts +12 -48
  54. package/dest/GovernanceAbi.d.ts.map +1 -1
  55. package/dest/GovernanceAbi.js +16 -64
  56. package/dest/GovernanceAbi.js.map +1 -1
  57. package/dest/GovernanceProposerAbi.d.ts +12 -48
  58. package/dest/GovernanceProposerAbi.d.ts.map +1 -1
  59. package/dest/GovernanceProposerAbi.js +16 -64
  60. package/dest/GovernanceProposerAbi.js.map +1 -1
  61. package/dest/HonkVerifierAbi.d.ts +12 -48
  62. package/dest/HonkVerifierAbi.d.ts.map +1 -1
  63. package/dest/HonkVerifierAbi.js +16 -64
  64. package/dest/HonkVerifierAbi.js.map +1 -1
  65. package/dest/IERC20Abi.d.ts +12 -48
  66. package/dest/IERC20Abi.d.ts.map +1 -1
  67. package/dest/IERC20Abi.js +16 -64
  68. package/dest/IERC20Abi.js.map +1 -1
  69. package/dest/ISequencerRewardCalculatorAbi.d.ts +2607 -0
  70. package/dest/ISequencerRewardCalculatorAbi.d.ts.map +1 -0
  71. package/dest/ISequencerRewardCalculatorAbi.js +3473 -0
  72. package/dest/ISequencerRewardCalculatorAbi.js.map +1 -0
  73. package/dest/ISequencerRewardCalculatorBytecode.d.ts +9 -0
  74. package/dest/ISequencerRewardCalculatorBytecode.d.ts.map +1 -0
  75. package/dest/ISequencerRewardCalculatorBytecode.js +9 -0
  76. package/dest/ISequencerRewardCalculatorBytecode.js.map +1 -0
  77. package/dest/IVerifierAbi.d.ts +12 -48
  78. package/dest/IVerifierAbi.d.ts.map +1 -1
  79. package/dest/IVerifierAbi.js +16 -64
  80. package/dest/IVerifierAbi.js.map +1 -1
  81. package/dest/InboxAbi.d.ts +12 -48
  82. package/dest/InboxAbi.d.ts.map +1 -1
  83. package/dest/InboxAbi.js +16 -64
  84. package/dest/InboxAbi.js.map +1 -1
  85. package/dest/InboxBytecode.d.ts +1 -1
  86. package/dest/InboxBytecode.js +1 -1
  87. package/dest/MockVerifierAbi.d.ts +12 -48
  88. package/dest/MockVerifierAbi.d.ts.map +1 -1
  89. package/dest/MockVerifierAbi.js +16 -64
  90. package/dest/MockVerifierAbi.js.map +1 -1
  91. package/dest/MockZKPassportVerifierAbi.d.ts +12 -48
  92. package/dest/MockZKPassportVerifierAbi.d.ts.map +1 -1
  93. package/dest/MockZKPassportVerifierAbi.js +16 -64
  94. package/dest/MockZKPassportVerifierAbi.js.map +1 -1
  95. package/dest/MultiAdderAbi.d.ts +12 -48
  96. package/dest/MultiAdderAbi.d.ts.map +1 -1
  97. package/dest/MultiAdderAbi.js +16 -64
  98. package/dest/MultiAdderAbi.js.map +1 -1
  99. package/dest/MultiAdderBytecode.d.ts +1 -1
  100. package/dest/MultiAdderBytecode.js +1 -1
  101. package/dest/NewGovernanceProposerPayloadAbi.d.ts +12 -48
  102. package/dest/NewGovernanceProposerPayloadAbi.d.ts.map +1 -1
  103. package/dest/NewGovernanceProposerPayloadAbi.js +16 -64
  104. package/dest/NewGovernanceProposerPayloadAbi.js.map +1 -1
  105. package/dest/OutboxAbi.d.ts +12 -48
  106. package/dest/OutboxAbi.d.ts.map +1 -1
  107. package/dest/OutboxAbi.js +16 -64
  108. package/dest/OutboxAbi.js.map +1 -1
  109. package/dest/OutboxBytecode.d.ts +1 -1
  110. package/dest/OutboxBytecode.js +1 -1
  111. package/dest/RegisterNewRollupVersionPayloadAbi.d.ts +12 -48
  112. package/dest/RegisterNewRollupVersionPayloadAbi.d.ts.map +1 -1
  113. package/dest/RegisterNewRollupVersionPayloadAbi.js +16 -64
  114. package/dest/RegisterNewRollupVersionPayloadAbi.js.map +1 -1
  115. package/dest/RegisterNewRollupVersionPayloadBytecode.d.ts +1 -1
  116. package/dest/RegisterNewRollupVersionPayloadBytecode.js +1 -1
  117. package/dest/RegistryAbi.d.ts +12 -48
  118. package/dest/RegistryAbi.d.ts.map +1 -1
  119. package/dest/RegistryAbi.js +16 -64
  120. package/dest/RegistryAbi.js.map +1 -1
  121. package/dest/RewardDistributorAbi.d.ts +12 -48
  122. package/dest/RewardDistributorAbi.d.ts.map +1 -1
  123. package/dest/RewardDistributorAbi.js +16 -64
  124. package/dest/RewardDistributorAbi.js.map +1 -1
  125. package/dest/RewardExtLibAbi.d.ts +59 -48
  126. package/dest/RewardExtLibAbi.d.ts.map +1 -1
  127. package/dest/RewardExtLibAbi.js +77 -64
  128. package/dest/RewardExtLibAbi.js.map +1 -1
  129. package/dest/RewardExtLibBytecode.d.ts +1 -1
  130. package/dest/RewardExtLibBytecode.d.ts.map +1 -1
  131. package/dest/RewardExtLibBytecode.js +1 -1
  132. package/dest/RewardExtLibBytecode.js.map +1 -1
  133. package/dest/RollupAbi.d.ts +72 -79
  134. package/dest/RollupAbi.d.ts.map +1 -1
  135. package/dest/RollupAbi.js +93 -104
  136. package/dest/RollupAbi.js.map +1 -1
  137. package/dest/RollupBytecode.d.ts +91 -82
  138. package/dest/RollupBytecode.d.ts.map +1 -1
  139. package/dest/RollupBytecode.js +94 -82
  140. package/dest/RollupBytecode.js.map +1 -1
  141. package/dest/RollupOperationsExtLibAbi.d.ts +12 -48
  142. package/dest/RollupOperationsExtLibAbi.d.ts.map +1 -1
  143. package/dest/RollupOperationsExtLibAbi.js +16 -64
  144. package/dest/RollupOperationsExtLibAbi.js.map +1 -1
  145. package/dest/RollupOperationsExtLibBytecode.d.ts +1 -1
  146. package/dest/RollupOperationsExtLibBytecode.d.ts.map +1 -1
  147. package/dest/RollupOperationsExtLibBytecode.js +1 -1
  148. package/dest/RollupOperationsExtLibBytecode.js.map +1 -1
  149. package/dest/RollupStorage.d.ts +2 -2
  150. package/dest/RollupStorage.js +2 -2
  151. package/dest/SlasherAbi.d.ts +12 -48
  152. package/dest/SlasherAbi.d.ts.map +1 -1
  153. package/dest/SlasherAbi.js +16 -64
  154. package/dest/SlasherAbi.js.map +1 -1
  155. package/dest/SlasherDeploymentExtLibAbi.d.ts +12 -48
  156. package/dest/SlasherDeploymentExtLibAbi.d.ts.map +1 -1
  157. package/dest/SlasherDeploymentExtLibAbi.js +16 -64
  158. package/dest/SlasherDeploymentExtLibAbi.js.map +1 -1
  159. package/dest/SlasherDeploymentExtLibBytecode.d.ts +1 -1
  160. package/dest/SlasherDeploymentExtLibBytecode.d.ts.map +1 -1
  161. package/dest/SlasherDeploymentExtLibBytecode.js +1 -1
  162. package/dest/SlasherDeploymentExtLibBytecode.js.map +1 -1
  163. package/dest/SlashingProposerAbi.d.ts +12 -48
  164. package/dest/SlashingProposerAbi.d.ts.map +1 -1
  165. package/dest/SlashingProposerAbi.js +16 -64
  166. package/dest/SlashingProposerAbi.js.map +1 -1
  167. package/dest/SlashingProposerBytecode.d.ts +1 -1
  168. package/dest/SlashingProposerBytecode.js +1 -1
  169. package/dest/StakingAssetHandlerAbi.d.ts +12 -48
  170. package/dest/StakingAssetHandlerAbi.d.ts.map +1 -1
  171. package/dest/StakingAssetHandlerAbi.js +16 -64
  172. package/dest/StakingAssetHandlerAbi.js.map +1 -1
  173. package/dest/TestERC20Abi.d.ts +12 -48
  174. package/dest/TestERC20Abi.d.ts.map +1 -1
  175. package/dest/TestERC20Abi.js +16 -64
  176. package/dest/TestERC20Abi.js.map +1 -1
  177. package/dest/TokenPortalAbi.d.ts +12 -48
  178. package/dest/TokenPortalAbi.d.ts.map +1 -1
  179. package/dest/TokenPortalAbi.js +16 -64
  180. package/dest/TokenPortalAbi.js.map +1 -1
  181. package/dest/TokenPortalBytecode.d.ts +1 -1
  182. package/dest/TokenPortalBytecode.js +1 -1
  183. package/dest/UniswapPortalAbi.d.ts +12 -48
  184. package/dest/UniswapPortalAbi.d.ts.map +1 -1
  185. package/dest/UniswapPortalAbi.js +16 -64
  186. package/dest/UniswapPortalAbi.js.map +1 -1
  187. package/dest/UniswapPortalBytecode.d.ts +1 -1
  188. package/dest/UniswapPortalBytecode.js +1 -1
  189. package/dest/ValidatorOperationsExtLibAbi.d.ts +12 -48
  190. package/dest/ValidatorOperationsExtLibAbi.d.ts.map +1 -1
  191. package/dest/ValidatorOperationsExtLibAbi.js +16 -64
  192. package/dest/ValidatorOperationsExtLibAbi.js.map +1 -1
  193. package/dest/ValidatorOperationsExtLibBytecode.d.ts +1 -1
  194. package/dest/ValidatorOperationsExtLibBytecode.d.ts.map +1 -1
  195. package/dest/ValidatorOperationsExtLibBytecode.js +1 -1
  196. package/dest/ValidatorOperationsExtLibBytecode.js.map +1 -1
  197. package/dest/ValidatorSelectionLibAbi.d.ts +12 -48
  198. package/dest/ValidatorSelectionLibAbi.d.ts.map +1 -1
  199. package/dest/ValidatorSelectionLibAbi.js +16 -64
  200. package/dest/ValidatorSelectionLibAbi.js.map +1 -1
  201. package/dest/ValidatorSelectionLibBytecode.d.ts +1 -1
  202. package/dest/ValidatorSelectionLibBytecode.js +1 -1
  203. package/dest/checksum.d.ts +1 -1
  204. package/dest/checksum.js +1 -1
  205. package/dest/index.d.ts +2 -0
  206. package/dest/index.d.ts.map +1 -1
  207. package/dest/index.js +2 -0
  208. package/dest/index.js.map +1 -1
  209. package/l1-contracts/cache/solidity-files-cache.json +1 -1
  210. package/l1-contracts/foundry.toml +1 -1
  211. package/l1-contracts/out/AddressSnapshotLib.sol/AddressSnapshotLib.json +1 -1
  212. package/l1-contracts/out/AttestationLib.sol/AttestationLib.json +1 -1
  213. package/l1-contracts/out/AttesterExitExtLib.sol/AttesterExitExtLib.json +1 -1
  214. package/l1-contracts/out/BN254Lib.sol/BN254Lib.json +1 -1
  215. package/l1-contracts/out/Ballot.sol/BallotLib.json +1 -1
  216. package/l1-contracts/out/BlobLib.sol/BlobLib.json +1 -1
  217. package/l1-contracts/out/Bn254LibWrapper.sol/Bn254LibWrapper.json +1 -1
  218. package/l1-contracts/out/CheckpointLog.sol/CompressedTempCheckpointLogLib.json +1 -1
  219. package/l1-contracts/out/CheckpointedUintLib.sol/CheckpointedUintLib.json +1 -1
  220. package/l1-contracts/out/CoinIssuer.sol/CoinIssuer.json +1 -1
  221. package/l1-contracts/out/CompressedTimeMath.sol/CompressedTimeMath.json +1 -1
  222. package/l1-contracts/out/Configuration.sol/CompressedConfigurationLib.json +1 -1
  223. package/l1-contracts/out/ConfigurationLib.sol/ConfigurationLib.json +1 -1
  224. package/l1-contracts/out/ConstantsGen.sol/Constants.json +1 -1
  225. package/l1-contracts/out/CoordinationSignatureLib.sol/CoordinationSignatureLib.json +1 -1
  226. package/l1-contracts/out/DataStructures.sol/DataStructures.json +1 -1
  227. package/l1-contracts/out/DateGatedRelayer.sol/DateGatedRelayer.json +1 -1
  228. package/l1-contracts/out/DeployAztecL1Contracts.s.sol/DeployAztecL1Contracts.json +1 -1
  229. package/l1-contracts/out/DeployRollupForUpgrade.s.sol/DeployRollupForUpgrade.json +1 -1
  230. package/l1-contracts/out/DeployRollupLib.sol/DeployRollupLib.json +1 -1
  231. package/l1-contracts/out/DeploymentConfiguration.sol/DeploymentConfiguration.json +1 -1
  232. package/l1-contracts/out/DeploymentConfiguration.sol/IDeploymentConfiguration.json +1 -1
  233. package/l1-contracts/out/DepositDelegationLib.sol/DepositDelegationLib.json +1 -1
  234. package/l1-contracts/out/EmpireBase.sol/EmpireBase.json +1 -1
  235. package/l1-contracts/out/EpochProofExtLib.sol/EpochProofExtLib.json +1 -1
  236. package/l1-contracts/out/EpochProofLib.sol/EpochProofLib.json +1 -1
  237. package/l1-contracts/out/Errors.sol/Errors.json +1 -1
  238. package/l1-contracts/out/EscapeHatch.sol/EscapeHatch.json +1 -1
  239. package/l1-contracts/out/FeeAssetHandler.sol/FeeAssetHandler.json +1 -1
  240. package/l1-contracts/out/FeeAssetHandler.sol/IFeeAssetHandler.json +1 -1
  241. package/l1-contracts/out/FeeConfig.sol/FeeConfigLib.json +1 -1
  242. package/l1-contracts/out/FeeConfig.sol/PriceLib.json +1 -1
  243. package/l1-contracts/out/FeeJuicePortal.sol/FeeJuicePortal.json +1 -1
  244. package/l1-contracts/out/FeeLib.sol/FeeLib.json +1 -1
  245. package/l1-contracts/out/FeeStructs.sol/FeeHeaderLib.json +1 -1
  246. package/l1-contracts/out/FeeStructs.sol/FeeStructsLib.json +1 -1
  247. package/l1-contracts/out/FieldLib.sol/FieldLib.json +1 -1
  248. package/l1-contracts/out/FlushRewarder.sol/FlushRewarder.json +1 -1
  249. package/l1-contracts/out/GSE.sol/GSE.json +1 -1
  250. package/l1-contracts/out/GSE.sol/GSECore.json +1 -1
  251. package/l1-contracts/out/GSE.sol/IGSE.json +1 -1
  252. package/l1-contracts/out/GSE.sol/IGSECore.json +1 -1
  253. package/l1-contracts/out/GSEPayload.sol/GSEPayload.json +1 -1
  254. package/l1-contracts/out/Governance.sol/Governance.json +1 -1
  255. package/l1-contracts/out/GovernanceProposer.sol/GovernanceProposer.json +1 -1
  256. package/l1-contracts/out/Hash.sol/Hash.json +1 -1
  257. package/l1-contracts/out/HonkVerifier.sol/HonkVerifier.json +1 -1
  258. package/l1-contracts/out/IBn254LibWrapper.sol/IBn254LibWrapper.json +1 -1
  259. package/l1-contracts/out/ICoinIssuer.sol/ICoinIssuer.json +1 -1
  260. package/l1-contracts/out/IDateGatedRelayer.sol/IDateGatedRelayer.json +1 -1
  261. package/l1-contracts/out/IEmpire.sol/IEmperor.json +1 -1
  262. package/l1-contracts/out/IEmpire.sol/IEmpire.json +1 -1
  263. package/l1-contracts/out/IFeeJuicePortal.sol/IFeeJuicePortal.json +1 -1
  264. package/l1-contracts/out/IFlushRewarder.sol/IFlushRewarder.json +1 -1
  265. package/l1-contracts/out/IGovernance.sol/IGovernance.json +1 -1
  266. package/l1-contracts/out/IGovernanceProposer.sol/IGovernanceProposer.json +1 -1
  267. package/l1-contracts/out/IInbox.sol/IInbox.json +1 -1
  268. package/l1-contracts/out/IInstance.sol/IInstance.json +1 -1
  269. package/l1-contracts/out/IMintableERC20.sol/IMintableERC20.json +1 -1
  270. package/l1-contracts/out/IOutbox.sol/IOutbox.json +1 -1
  271. package/l1-contracts/out/IPayload.sol/IPayload.json +1 -1
  272. package/l1-contracts/out/IProposerPayload.sol/IProposerPayload.json +1 -1
  273. package/l1-contracts/out/IRegistry.sol/IHaveVersion.json +1 -1
  274. package/l1-contracts/out/IRegistry.sol/IRegistry.json +1 -1
  275. package/l1-contracts/out/IRewardDistributor.sol/IRewardDistributor.json +1 -1
  276. package/l1-contracts/out/IRollup.sol/IRollup.json +1 -1
  277. package/l1-contracts/out/IRollup.sol/IRollupCore.json +1 -1
  278. package/l1-contracts/out/IRootRegistry.sol/IRootRegistry.json +1 -1
  279. package/l1-contracts/out/ISequencerRewardCalculator.sol/ISequencerRewardCalculator.json +1 -0
  280. package/l1-contracts/out/ISlasher.sol/ISlasher.json +1 -1
  281. package/l1-contracts/out/IStaking.sol/IStaking.json +1 -1
  282. package/l1-contracts/out/IStaking.sol/IStakingCore.json +1 -1
  283. package/l1-contracts/out/IValidatorSelection.sol/IValidatorSelection.json +1 -1
  284. package/l1-contracts/out/IValidatorSelection.sol/IValidatorSelectionCore.json +1 -1
  285. package/l1-contracts/out/IVerifier.sol/IVerifier.json +1 -1
  286. package/l1-contracts/out/Inbox.sol/Inbox.json +1 -1
  287. package/l1-contracts/out/InputsExtractor.sol/InputsExtractor.json +1 -1
  288. package/l1-contracts/out/InvalidateLib.sol/InvalidateLib.json +1 -1
  289. package/l1-contracts/out/MerkleLib.sol/MerkleLib.json +1 -1
  290. package/l1-contracts/out/MockERC20.sol/MockERC20.json +1 -1
  291. package/l1-contracts/out/MockERC721.sol/MockERC721.json +1 -1
  292. package/l1-contracts/out/MockFeeJuicePortal.sol/MockFeeJuicePortal.json +1 -1
  293. package/l1-contracts/out/MockVerifier.sol/MockVerifier.json +1 -1
  294. package/l1-contracts/out/MockZKPassportVerifier.sol/IZKPassportVerifier.json +1 -1
  295. package/l1-contracts/out/MockZKPassportVerifier.sol/MockZKPassportVerifier.json +1 -1
  296. package/l1-contracts/out/MultiAdder.sol/IMultiAdder.json +1 -1
  297. package/l1-contracts/out/MultiAdder.sol/MultiAdder.json +1 -1
  298. package/l1-contracts/out/Outbox.sol/Outbox.json +1 -1
  299. package/l1-contracts/out/OuterCount8.sol/HonkVerifier.json +1 -1
  300. package/l1-contracts/out/Proposal.sol/CompressedProposalLib.json +1 -1
  301. package/l1-contracts/out/ProposalLib.sol/ProposalLib.json +1 -1
  302. package/l1-contracts/out/ProposeLib.sol/ProposeLib.json +1 -1
  303. package/l1-contracts/out/ProposedHeaderLib.sol/ProposedHeaderLib.json +1 -1
  304. package/l1-contracts/out/RegisterNewRollupVersionPayload.sol/RegisterNewRollupVersionPayload.json +1 -1
  305. package/l1-contracts/out/Registry.sol/Registry.json +1 -1
  306. package/l1-contracts/out/RewardBooster.sol/IBooster.json +1 -1
  307. package/l1-contracts/out/RewardBooster.sol/IBoosterCore.json +1 -1
  308. package/l1-contracts/out/RewardBooster.sol/RewardBooster.json +1 -1
  309. package/l1-contracts/out/RewardDistributor.sol/RewardDistributor.json +1 -1
  310. package/l1-contracts/out/RewardExtLib.sol/RewardExtLib.json +1 -1
  311. package/l1-contracts/out/RewardLib.sol/BpsLib.json +1 -1
  312. package/l1-contracts/out/RewardLib.sol/RewardLib.json +1 -1
  313. package/l1-contracts/out/Rollup.sol/Rollup.json +1 -1
  314. package/l1-contracts/out/RollupConfiguration.sol/IRollupConfiguration.json +1 -1
  315. package/l1-contracts/out/RollupConfiguration.sol/RollupConfiguration.json +1 -1
  316. package/l1-contracts/out/RollupCore.sol/RollupCore.json +1 -1
  317. package/l1-contracts/out/RollupOperationsExtLib.sol/RollupOperationsExtLib.json +1 -1
  318. package/l1-contracts/out/STFLib.sol/STFLib.json +1 -1
  319. package/l1-contracts/out/SampleLib.sol/SampleLib.json +1 -1
  320. package/l1-contracts/out/SequencerRewardCalculatorLib.sol/SequencerRewardCalculatorLib.json +1 -0
  321. package/l1-contracts/out/SignatureLib.sol/SignatureLib.json +1 -1
  322. package/l1-contracts/out/SlashPayload.sol/SlashPayload.json +1 -1
  323. package/l1-contracts/out/SlashPayloadCloneable.sol/SlashPayloadCloneable.json +1 -1
  324. package/l1-contracts/out/SlashPayloadLib.sol/SlashPayloadLib.json +1 -1
  325. package/l1-contracts/out/SlashRoundLib.sol/CompressedSlashRoundMath.json +1 -1
  326. package/l1-contracts/out/Slasher.sol/Slasher.json +1 -1
  327. package/l1-contracts/out/SlasherDeploymentExtLib.sol/SlasherDeploymentExtLib.json +1 -1
  328. package/l1-contracts/out/SlashingProposer.sol/SlashingProposer.json +1 -1
  329. package/l1-contracts/out/StakingAssetHandler.sol/IStakingAssetHandler.json +1 -1
  330. package/l1-contracts/out/StakingAssetHandler.sol/StakingAssetHandler.json +1 -1
  331. package/l1-contracts/out/StakingLib.sol/StakingLib.json +1 -1
  332. package/l1-contracts/out/StakingQueue.sol/StakingQueueLib.json +1 -1
  333. package/l1-contracts/out/StakingQueueConfig.sol/StakingQueueConfigLib.json +1 -1
  334. package/l1-contracts/out/StdError.sol/stdError.json +1 -1
  335. package/l1-contracts/out/TestERC20.sol/TestERC20.json +1 -1
  336. package/l1-contracts/out/TestPayloads.sol/CallAssetPayload.json +1 -1
  337. package/l1-contracts/out/TestPayloads.sol/CallRevertingPayload.json +1 -1
  338. package/l1-contracts/out/TestPayloads.sol/EmptyPayload.json +1 -1
  339. package/l1-contracts/out/TestPayloads.sol/FakeRollup.json +1 -1
  340. package/l1-contracts/out/TestPayloads.sol/RevertingCall.json +1 -1
  341. package/l1-contracts/out/TestPayloads.sol/UpgradePayload.json +1 -1
  342. package/l1-contracts/out/TimeLib.sol/TimeLib.json +1 -1
  343. package/l1-contracts/out/Tips.sol/ChainTipsLib.json +1 -1
  344. package/l1-contracts/out/ValidatorOperationsExtLib.sol/ValidatorOperationsExtLib.json +1 -1
  345. package/l1-contracts/out/ValidatorSelectionLib.sol/ValidatorSelectionLib.json +1 -1
  346. package/l1-contracts/out/ZKPassportHelper.sol/ZKPassportHelper.json +1 -1
  347. package/l1-contracts/out/ZKPassportRootVerifier.sol/ZKPassportRootVerifier.json +1 -1
  348. package/l1-contracts/out/ZKPassportSubVerifier.sol/ZKPassportSubVerifier.json +1 -1
  349. package/l1-contracts/out/build-info/4cb7b5442b848dcc.json +1 -0
  350. package/l1-contracts/out/generated/HonkVerifier.sol/HonkVerifier.json +1 -1
  351. package/l1-contracts/out/libraries/Errors.sol/Errors.json +1 -1
  352. package/l1-contracts/out/rollup/BlobLib.sol/BlobLib.json +1 -1
  353. package/l1-contracts/out/src/ZKPassportHelper.sol/ZKPassportHelper.json +1 -1
  354. package/l1-contracts/out/src/ZKPassportRootVerifier.sol/ZKPassportRootVerifier.json +1 -1
  355. package/l1-contracts/out/src/ZKPassportSubVerifier.sol/ZKPassportSubVerifier.json +1 -1
  356. package/l1-contracts/script/deploy/RollupConfiguration.sol +5 -19
  357. package/l1-contracts/scripts/network-defaults.json +1 -2
  358. package/l1-contracts/src/core/Rollup.sol +18 -12
  359. package/l1-contracts/src/core/RollupCore.sol +14 -27
  360. package/l1-contracts/src/core/interfaces/IRollup.sol +7 -11
  361. package/l1-contracts/src/core/interfaces/ISequencerRewardCalculator.sol +39 -0
  362. package/l1-contracts/src/core/interfaces/IValidatorSelection.sol +0 -2
  363. package/l1-contracts/src/core/libraries/Errors.sol +3 -6
  364. package/l1-contracts/src/core/libraries/rollup/BlobLib.sol +16 -6
  365. package/l1-contracts/src/core/libraries/rollup/EpochProofExtLib.sol +2 -7
  366. package/l1-contracts/src/core/libraries/rollup/EpochProofLib.sol +4 -12
  367. package/l1-contracts/src/core/libraries/rollup/RewardExtLib.sol +30 -12
  368. package/l1-contracts/src/core/libraries/rollup/RewardLib.sol +187 -250
  369. package/l1-contracts/src/core/libraries/rollup/SequencerRewardCalculatorLib.sol +110 -0
  370. package/l1-contracts/src/core/libraries/rollup/ValidatorSelectionLib.sol +2 -4
  371. package/package.json +1 -1
  372. package/l1-contracts/out/RewardLib.sol/IATP.json +0 -1
  373. package/l1-contracts/out/RewardLib.sol/IATPStaker.json +0 -1
  374. package/l1-contracts/out/build-info/f88e638ee47a1ead.json +0 -1
@@ -6,12 +6,11 @@ import {RollupConfig, SubmitEpochRootProofArgs} from "@aztec/core/interfaces/IRo
6
6
  import {CompressedFeeHeader, FeeHeaderLib} from "@aztec/core/libraries/compressed-data/fees/FeeStructs.sol";
7
7
  import {Errors} from "@aztec/core/libraries/Errors.sol";
8
8
  import {ProposedHeader} from "@aztec/core/libraries/rollup/ProposedHeaderLib.sol";
9
- import {StakingLib} from "@aztec/core/libraries/rollup/StakingLib.sol";
9
+ import {SequencerRewardCalculatorLib} from "@aztec/core/libraries/rollup/SequencerRewardCalculatorLib.sol";
10
10
  import {STFLib} from "@aztec/core/libraries/rollup/STFLib.sol";
11
11
  import {ValidatorSelectionLib} from "@aztec/core/libraries/rollup/ValidatorSelectionLib.sol";
12
12
  import {Epoch, Timestamp, TimeLib} from "@aztec/core/libraries/TimeLib.sol";
13
13
  import {IBoosterCore} from "@aztec/core/reward-boost/RewardBooster.sol";
14
- import {GSE} from "@aztec/governance/GSE.sol";
15
14
  import {IRewardDistributor} from "@aztec/governance/interfaces/IRewardDistributor.sol";
16
15
  import {IERC20} from "@oz/token/ERC20/IERC20.sol";
17
16
  import {SafeERC20} from "@oz/token/ERC20/utils/SafeERC20.sol";
@@ -21,31 +20,21 @@ import {BitMaps} from "@oz/utils/structs/BitMaps.sol";
21
20
 
22
21
  type Bps is uint32;
23
22
 
24
- /**
25
- * @notice The subset of an Aztec Token Position (ATP) staker contract that the reward computation relies on.
26
- * @dev ATP stakers register themselves as the GSE withdrawer when they deposit, so the withdrawer of an ATP-backed
27
- * validator is the staker, not the ATP. The staker only exposes the ATP it belongs to.
28
- */
29
- interface IATPStaker {
30
- function getATP() external view returns (address);
31
- }
32
-
33
- /**
34
- * @notice The subset of an Aztec Token Position (ATP) contract that the reward computation relies on.
35
- */
36
- interface IATP {
37
- function getRegistry() external view returns (address);
38
- }
39
-
40
23
  library BpsLib {
41
24
  function mul(uint256 _a, Bps _b) internal pure returns (uint256) {
42
25
  return _a * uint256(Bps.unwrap(_b)) / 10_000;
43
26
  }
44
27
  }
45
28
 
29
+ struct ProverRegistration {
30
+ uint248 shares;
31
+ bool fullEpoch; // Set to true when the registration was submitted after the epoch is closed, with a proof of the
32
+ // full epoch. Used for activity score bumping
33
+ }
34
+
46
35
  struct SubEpochRewards {
47
36
  uint256 summedShares;
48
- mapping(address prover => uint256 shares) shares;
37
+ mapping(address prover => ProverRegistration) registrations;
49
38
  }
50
39
 
51
40
  struct EpochRewards {
@@ -54,13 +43,6 @@ struct EpochRewards {
54
43
  mapping(uint256 length => SubEpochRewards) subEpoch;
55
44
  }
56
45
 
57
- uint256 constant MAX_REGISTRY_REWARD_OVERRIDES = 2;
58
-
59
- struct RegistryRewardOverride {
60
- address registry;
61
- uint96 sequencerReward;
62
- }
63
-
64
46
  struct RewardConfig {
65
47
  IRewardDistributor rewardDistributor;
66
48
  Bps sequencerBps;
@@ -82,6 +64,8 @@ struct RewardStorage {
82
64
  mapping(address prover => BitMaps.BitMap claimed) proverClaimed;
83
65
  RewardConfig config;
84
66
  address protocolFeeRecipient;
67
+ // ISequencerRewardCalculator; zero means every checkpoint receives the default sequencer reward.
68
+ address sequencerRewardCalculator;
85
69
  }
86
70
 
87
71
  struct Values {
@@ -90,20 +74,17 @@ struct Values {
90
74
  uint256 protocolFee;
91
75
  uint256 proverFee;
92
76
  uint256 sequencerFee;
77
+ // Default path: every newly proven checkpoint receives this reward.
78
+ uint256 sequencerCheckpointReward;
79
+ // Calculator path: one reward per newly proven checkpoint; empty on the default path.
93
80
  uint256[] sequencerCheckpointRewards;
94
81
  uint256 manaUsed;
95
82
  }
96
83
 
97
- struct SequencerRewardContext {
98
- uint256[] proposerRewards;
99
- uint256 cachedProposers;
100
- GSE gse;
101
- RegistryRewardOverride[MAX_REGISTRY_REWARD_OVERRIDES] registryRewardOverrides;
102
- }
103
-
104
84
  struct Totals {
105
85
  uint256 feesToClaim;
106
86
  uint256 totalProtocolFee;
87
+ uint256 proverRewards;
107
88
  }
108
89
 
109
90
  library RewardLib {
@@ -116,8 +97,6 @@ library RewardLib {
116
97
 
117
98
  bytes32 private constant REWARD_STORAGE_POSITION = keccak256("aztec.reward.storage");
118
99
 
119
- uint256 private constant REGISTRY_PROBE_GAS_LIMIT = 50_000;
120
-
121
100
  /// @notice One-shot writer used during rollup construction. Writes every field of
122
101
  /// {RewardConfig}, including the immutable `rewardDistributor` and `booster`.
123
102
  /// @dev Must only be reachable from the constructor path. Post-deployment updates go through
@@ -130,6 +109,17 @@ library RewardLib {
130
109
  rewardStorage.protocolFeeRecipient = address(bytes20("CUAUHXICALLI"));
131
110
  }
132
111
 
112
+ /// @notice Writes the sequencer reward calculator. The zero address disables it.
113
+ /// @dev No validation: an address that does not implement the calculator fails the response checks and pays the
114
+ /// default, exactly like no calculator.
115
+ /// @param _calculator The new calculator, or zero for none
116
+ /// @return oldCalculator The calculator in effect before this call
117
+ function setSequencerRewardCalculator(address _calculator) internal returns (address oldCalculator) {
118
+ RewardStorage storage rewardStorage = getStorage();
119
+ oldCalculator = rewardStorage.sequencerRewardCalculator;
120
+ rewardStorage.sequencerRewardCalculator = _calculator;
121
+ }
122
+
133
123
  /// @notice Owner-gated post-deployment writer for the protocol fee recipient.
134
124
  /// @param _recipient The new recipient of the protocol fee tranche
135
125
  /// @return oldRecipient The recipient in effect before this call
@@ -182,7 +172,7 @@ library RewardLib {
182
172
 
183
173
  EpochRewards storage e = rewardStorage.epochRewards[_epochs[i]];
184
174
  SubEpochRewards storage se = e.subEpoch[e.longestProvenLength];
185
- uint256 shares = se.shares[_prover];
175
+ uint256 shares = se.registrations[_prover].shares;
186
176
  if (shares > 0) {
187
177
  accumulatedRewards += (shares * e.rewards / se.summedShares);
188
178
  }
@@ -195,13 +185,22 @@ library RewardLib {
195
185
  return accumulatedRewards;
196
186
  }
197
187
 
188
+ /**
189
+ * @notice Records the prover's shares and, if the proof extends the longest proven prefix of the epoch, pays the
190
+ * checkpoint rewards and fees of the newly covered checkpoints.
191
+ * @param _args The epoch proof submission arguments
192
+ * @param _endEpoch The epoch being proven
193
+ * @param _config The rollup's deployment-time configuration
194
+ * @param _fullEpochProof Whether the proof covers the whole epoch, which updates the prover's activity score
195
+ * @param _committee The committee the proof's attestations were verified against, in committee order; empty for
196
+ * escape-hatch epochs and zero-size committees, which skip the sequencer reward calculator
197
+ */
198
198
  function handleRewardsAndFees(
199
199
  SubmitEpochRootProofArgs calldata _args,
200
200
  Epoch _endEpoch,
201
201
  RollupConfig memory _config,
202
202
  bool _fullEpochProof,
203
- address[] memory _committee,
204
- RegistryRewardOverride[MAX_REGISTRY_REWARD_OVERRIDES] memory _registryRewardOverrides
203
+ address[] memory _committee
205
204
  ) internal {
206
205
  RewardStorage storage rewardStorage = getStorage();
207
206
 
@@ -212,7 +211,16 @@ library RewardLib {
212
211
  SubEpochRewards storage $sr = $er.subEpoch[length];
213
212
  address prover = _args.args.proverId;
214
213
 
215
- require($sr.shares[prover] == 0, Errors.Rollup__ProverHaveAlreadySubmitted(prover, _endEpoch));
214
+ ProverRegistration memory previousRegistration = $sr.registrations[prover];
215
+ // There is a point in updating in 2 cases:
216
+ // 1. This is the first time we are submitting, so shares are at 0
217
+ // 2. A prover is submitting the same proof a second time after an epoch closed so they would get their activity
218
+ // score bump. If the second check wasn't there, it would theoretically be possible (but unlikely) to block a
219
+ // prover from increasing their activity score by submitting a proof for the epoch while it is ongoing
220
+ require(
221
+ previousRegistration.shares == 0 || (!previousRegistration.fullEpoch && _fullEpochProof),
222
+ Errors.Rollup__ProverHaveAlreadySubmitted(prover, _endEpoch)
223
+ );
216
224
  // The prover is only marked active if they have provided a full epoch proof
217
225
  uint256 shares = _fullEpochProof
218
226
  ? rewardStorage.config.booster.updateAndGetShares(prover)
@@ -225,77 +233,24 @@ library RewardLib {
225
233
  // back if a misbehaving booster ever crosses this layer.
226
234
  require(shares > 0, Errors.RewardLib__ZeroShares(prover));
227
235
 
228
- $sr.shares[prover] = shares;
229
- $sr.summedShares += shares;
236
+ $sr.registrations[prover] = ProverRegistration({shares: shares.toUint248(), fullEpoch: _fullEpochProof});
237
+ $sr.summedShares = $sr.summedShares - previousRegistration.shares + shares;
230
238
  }
231
239
 
232
- if (length > $er.longestProvenLength) {
240
+ uint256 provenLength = $er.longestProvenLength;
241
+ if (length > provenLength) {
233
242
  Values memory v;
243
+ Totals memory t;
234
244
 
235
- {
236
- uint256 added = length - $er.longestProvenLength;
237
- uint256 checkpointReward = getCheckpointReward();
238
- uint256 defaultSequencerRewardPerCheckpoint = BpsLib.mul(checkpointReward, rewardStorage.config.sequencerBps);
239
-
240
- (uint256 desiredSequencerRewardsTotal, uint256[] memory sequencerCheckpointRewards) = computeDesiredSequencerRewards(
241
- _args,
242
- _endEpoch,
243
- _committee,
244
- _registryRewardOverrides,
245
- $er.longestProvenLength,
246
- defaultSequencerRewardPerCheckpoint
247
- );
248
-
249
- v.sequencerCheckpointRewards = sequencerCheckpointRewards;
250
-
251
- uint256 proverRewardPerCheckpoint = checkpointReward - defaultSequencerRewardPerCheckpoint;
252
- uint256 checkpointRewardsDesired = proverRewardPerCheckpoint * added + desiredSequencerRewardsTotal;
253
- uint256 maximumCheckpointRewards = added * checkpointReward;
254
-
255
- require(
256
- checkpointRewardsDesired <= maximumCheckpointRewards,
257
- Errors.RewardLib__CheckpointRewardsAboveMaximum(checkpointRewardsDesired, maximumCheckpointRewards)
258
- );
259
-
260
- uint256 checkpointRewardsAvailable = 0;
261
-
262
- if (checkpointRewardsDesired > 0) {
263
- // Cache the reward distributor contract
264
- IRewardDistributor distributor = rewardStorage.config.rewardDistributor;
265
-
266
- uint256 amountToClaim = Math.min(checkpointRewardsDesired, distributor.availableTo(address(this)));
267
-
268
- if (amountToClaim > 0) {
269
- distributor.claim(address(this), amountToClaim);
270
- checkpointRewardsAvailable = amountToClaim;
271
- }
272
- }
273
-
274
- uint256 sequencerCheckpointRewardTotal = desiredSequencerRewardsTotal;
275
- if (checkpointRewardsAvailable < checkpointRewardsDesired) {
276
- sequencerCheckpointRewardTotal = 0;
277
- for (uint256 i = $er.longestProvenLength; i < length; i++) {
278
- uint256 index = i - $er.longestProvenLength;
279
- sequencerCheckpointRewards[index] =
280
- Math.mulDiv(v.sequencerCheckpointRewards[index], checkpointRewardsAvailable, checkpointRewardsDesired);
281
- sequencerCheckpointRewardTotal += v.sequencerCheckpointRewards[index];
282
- }
283
- }
284
-
285
- uint256 proverCheckpointRewards = checkpointRewardsAvailable - sequencerCheckpointRewardTotal;
286
- if (proverCheckpointRewards > 0) {
287
- $er.rewards += proverCheckpointRewards.toUint128();
288
- }
289
- }
245
+ t.proverRewards =
246
+ distributeCheckpointRewards(_args, _endEpoch, _committee, provenLength, length - provenLength, v);
290
247
 
291
- Totals memory t;
292
- for (uint256 i = $er.longestProvenLength; i < length; i++) {
248
+ for (uint256 i = provenLength; i < length; i++) {
293
249
  {
294
250
  ProposedHeader calldata header = _args.headers[i - _args.provenCheckpointFees.length];
295
251
  v.fee = header.accumulatedFees;
296
252
  v.sequencer = header.coinbase;
297
253
  }
298
- uint256 index = i - $er.longestProvenLength;
299
254
  CompressedFeeHeader feeHeader = STFLib.getFeeHeader(_args.start + i);
300
255
 
301
256
  v.manaUsed = feeHeader.getManaUsed();
@@ -306,20 +261,24 @@ library RewardLib {
306
261
 
307
262
  // Compute the proving fee in the fee asset
308
263
  v.proverFee = Math.min(v.manaUsed * feeHeader.getProverCost(), v.fee - v.protocolFee);
309
- if (v.proverFee > 0) {
310
- $er.rewards += v.proverFee.toUint128();
311
- }
264
+ t.proverRewards += v.proverFee;
312
265
 
313
266
  v.sequencerFee = v.fee - v.protocolFee - v.proverFee;
314
267
 
315
268
  {
316
- uint256 toSequencer = v.sequencerCheckpointRewards[index] + v.sequencerFee;
269
+ uint256 toSequencer =
270
+ (v.sequencerCheckpointRewards.length > 0
271
+ ? v.sequencerCheckpointRewards[i - provenLength]
272
+ : v.sequencerCheckpointReward) + v.sequencerFee;
317
273
  if (toSequencer > 0) {
318
274
  rewardStorage.sequencerRewards[v.sequencer] += toSequencer;
319
275
  }
320
276
  }
321
277
  }
322
278
 
279
+ if (t.proverRewards > 0) {
280
+ $er.rewards += t.proverRewards.toUint128();
281
+ }
323
282
  $er.longestProvenLength = length.toUint128();
324
283
 
325
284
  if (t.feesToClaim > 0) {
@@ -349,7 +308,11 @@ library RewardLib {
349
308
  }
350
309
 
351
310
  function getHasSubmitted(Epoch _epoch, uint256 _length, address _prover) internal view returns (bool) {
352
- return getStorage().epochRewards[_epoch].subEpoch[_length].shares[_prover] > 0;
311
+ return getStorage().epochRewards[_epoch].subEpoch[_length].registrations[_prover].shares > 0;
312
+ }
313
+
314
+ function getHasSubmittedFullEpoch(Epoch _epoch, uint256 _length, address _prover) internal view returns (bool) {
315
+ return getStorage().epochRewards[_epoch].subEpoch[_length].registrations[_prover].fullEpoch;
353
316
  }
354
317
 
355
318
  function getHasClaimed(address _prover, Epoch _epoch) internal view returns (bool) {
@@ -364,6 +327,10 @@ library RewardLib {
364
327
  return getStorage().protocolFeeRecipient;
365
328
  }
366
329
 
330
+ function getSequencerRewardCalculator() internal view returns (address) {
331
+ return getStorage().sequencerRewardCalculator;
332
+ }
333
+
367
334
  function getSpecificProverRewardsForEpoch(Epoch _epoch, address _prover) internal view returns (uint256) {
368
335
  RewardStorage storage rewardStorage = getStorage();
369
336
 
@@ -376,89 +343,11 @@ library RewardLib {
376
343
 
377
344
  // Only if prover has shares will he get a reward. Also avoid a 0-div
378
345
  // in case of no shares at all.
379
- if (se.shares[_prover] == 0) {
346
+ if (se.registrations[_prover].shares == 0) {
380
347
  return 0;
381
348
  }
382
349
 
383
- return (se.shares[_prover] * er.rewards / se.summedShares);
384
- }
385
-
386
- /**
387
- * @notice Resolves the ATP registry that an attester's withdrawer belongs to.
388
- * @dev ATP-backed validators register their staker contract as the GSE withdrawer. The staker exposes the ATP it
389
- * belongs to, and the ATP exposes the registry it was created from, so the lookup is
390
- * `withdrawer.getATP()` followed by `atp.getRegistry()`. Both hops are probed defensively so that arbitrary
391
- * withdrawer contracts cannot make the reward computation revert or burn unbounded gas.
392
- * @param _withdrawer The withdrawer registered in the GSE for the attester.
393
- * @return responded Whether both hops returned a well-formed address.
394
- * @return registry The registry the withdrawer's ATP belongs to, or zero when the lookup did not resolve.
395
- */
396
- function tryGetRegistry(address _withdrawer) internal view returns (bool responded, address registry) {
397
- (bool atpResponded, address atp) = tryGetAddress(_withdrawer, IATPStaker.getATP.selector);
398
- if (!atpResponded || atp == address(0)) {
399
- return (false, address(0));
400
- }
401
- return tryGetAddress(atp, IATP.getRegistry.selector);
402
- }
403
-
404
- /**
405
- * @notice Probes `_target` with a zero-argument view call that is expected to return a single address.
406
- * @dev Runs with a fixed gas cap and requires exactly 32 bytes of return data holding a clean address, so a
407
- * misbehaving target can only make the probe fail, never revert the caller or consume unbounded gas.
408
- * @param _target The contract to probe. Accounts without code are treated as not responding.
409
- * @param _selector The selector of the zero-argument getter to call.
410
- * @return responded Whether the call succeeded and returned a well-formed address.
411
- * @return result The returned address, or zero when the probe failed.
412
- */
413
- function tryGetAddress(address _target, bytes4 _selector) internal view returns (bool responded, address result) {
414
- if (_target.code.length == 0) {
415
- return (false, address(0));
416
- }
417
-
418
- uint256 selector = uint32(_selector);
419
-
420
- assembly ("memory-safe") {
421
- mstore(0x00, shl(224, selector))
422
- let callSucceeded := staticcall(REGISTRY_PROBE_GAS_LIMIT, _target, 0x00, 0x04, 0x20, 0x20)
423
- let word := mload(0x20)
424
- responded := and(and(callSucceeded, eq(returndatasize(), 0x20)), iszero(shr(160, word)))
425
- result := 0
426
- if responded {
427
- result := and(word, sub(shl(160, 1), 1))
428
- }
429
- }
430
- }
431
-
432
- function validateRegistryRewardOverrides(
433
- RegistryRewardOverride[MAX_REGISTRY_REWARD_OVERRIDES] memory _overrides,
434
- RewardConfig memory _rewardConfig
435
- ) internal pure {
436
- uint256 defaultSequencerReward = BpsLib.mul(_rewardConfig.checkpointReward, _rewardConfig.sequencerBps);
437
-
438
- for (uint256 i = 0; i < MAX_REGISTRY_REWARD_OVERRIDES; i++) {
439
- RegistryRewardOverride memory current = _overrides[i];
440
- if (current.registry == address(0)) {
441
- require(
442
- current.sequencerReward == 0,
443
- Errors.RewardLib__InvalidRegistryRewardOverride(current.registry, current.sequencerReward)
444
- );
445
- continue;
446
- }
447
-
448
- require(
449
- current.sequencerReward <= defaultSequencerReward,
450
- Errors.RewardLib__RegistryRewardOverrideAboveDefault(
451
- current.registry, current.sequencerReward, defaultSequencerReward
452
- )
453
- );
454
-
455
- for (uint256 j = 0; j < i; j++) {
456
- require(
457
- _overrides[j].registry != current.registry,
458
- Errors.RewardLib__DuplicateRegistryRewardOverride(current.registry)
459
- );
460
- }
461
- }
350
+ return (se.registrations[_prover].shares * er.rewards / se.summedShares);
462
351
  }
463
352
 
464
353
  function getStorage() internal pure returns (RewardStorage storage storageStruct) {
@@ -468,86 +357,134 @@ library RewardLib {
468
357
  }
469
358
  }
470
359
 
471
- function computeDesiredSequencerRewards(
360
+ /**
361
+ * @notice Claims the checkpoint rewards of `_added` newly proven checkpoints and splits them between the
362
+ * sequencers and the prover pool.
363
+ *
364
+ * @dev Without an accepted calculator response (no committee, no calculator, or a failed or malformed call) this
365
+ * is the default split, identical to a rollup without a calculator: claim up to `_added * checkpointReward`,
366
+ * give the sequencers `sequencerBps` of what was claimed split evenly per checkpoint (written to
367
+ * `_v.sequencerCheckpointReward`), and give the prover pool the remainder including the rounding dust.
368
+ *
369
+ * With an accepted response, checkpoint `i` is owed `rewards[i]` and the prover share stays
370
+ * `checkpointReward - defaultReward` per checkpoint, so only `Σ rewards + _added * proverShare` is claimed and
371
+ * whatever a below-default reward leaves unpaid stays in the distributor. If the distributor holds less, each
372
+ * sequencer reward is scaled by `available / desired` and the prover pool receives the remainder, which keeps
373
+ * the proportional outcome of the default split. The per-checkpoint rewards are written to
374
+ * `_v.sequencerCheckpointRewards`, which stays empty on the default path.
375
+ *
376
+ * @return proverRewards The checkpoint rewards that go to the prover pool
377
+ */
378
+ function distributeCheckpointRewards(
472
379
  SubmitEpochRootProofArgs calldata _args,
473
380
  Epoch _endEpoch,
474
381
  address[] memory _committee,
475
- RegistryRewardOverride[MAX_REGISTRY_REWARD_OVERRIDES] memory _registryRewardOverrides,
476
- uint256 _from,
477
- uint256 _defaultSequencerRewardPerCheckpoint
478
- ) private view returns (uint256, uint256[] memory) {
479
- uint256[] memory desiredSequencerCheckpointRewards = new uint256[](_args.end - _args.start + 1 - _from);
480
-
481
- if (_committee.length == 0 || !hasRegistryRewardOverrides(_registryRewardOverrides)) {
482
- for (uint256 i = 0; i < desiredSequencerCheckpointRewards.length; i++) {
483
- desiredSequencerCheckpointRewards[i] = _defaultSequencerRewardPerCheckpoint;
484
- }
485
-
486
- return (
487
- _defaultSequencerRewardPerCheckpoint * desiredSequencerCheckpointRewards.length,
488
- desiredSequencerCheckpointRewards
382
+ uint256 _provenLength,
383
+ uint256 _added,
384
+ Values memory _v
385
+ ) private returns (uint256 proverRewards) {
386
+ RewardStorage storage rewardStorage = getStorage();
387
+ uint256 checkpointReward = rewardStorage.config.checkpointReward;
388
+ Bps sequencerBps = rewardStorage.config.sequencerBps;
389
+
390
+ uint256 sequencerTotal;
391
+ uint256 desired;
392
+ // Escape-hatch epochs and zero-size committees have no proposers to pass, so they never reach the calculator.
393
+ if (_committee.length > 0 && rewardStorage.sequencerRewardCalculator != address(0)) {
394
+ uint256 defaultReward = BpsLib.mul(checkpointReward, sequencerBps);
395
+ sequencerTotal = callSequencerRewardCalculator(
396
+ _args, _endEpoch, _committee, _provenLength, _added, defaultReward, checkpointReward, _v
489
397
  );
398
+ desired = (checkpointReward - defaultReward) * _added + sequencerTotal;
490
399
  }
491
400
 
492
- uint256 seed = ValidatorSelectionLib.getSampleSeed(_endEpoch);
493
- uint256 desiredSequencerRewardsTotal = 0;
494
- SequencerRewardContext memory context;
495
- context.proposerRewards = new uint256[](_committee.length);
496
- context.gse = StakingLib.getStorage().gse;
497
- context.registryRewardOverrides = _registryRewardOverrides;
498
- _from -= _args.provenCheckpointFees.length;
499
- for (uint256 i = 0; i < desiredSequencerCheckpointRewards.length; i++) {
500
- uint256 proposerIndex = ValidatorSelectionLib.computeProposerIndex(
501
- _endEpoch, _args.headers[_from + i].slotNumber, seed, _committee.length
502
- );
503
- uint256 proposerMask = uint256(1) << proposerIndex;
504
- if (context.cachedProposers & proposerMask == 0) {
505
- context.proposerRewards[proposerIndex] = getDesiredSequencerRewardForProposer(
506
- _committee[proposerIndex], context, _defaultSequencerRewardPerCheckpoint
507
- );
508
- context.cachedProposers |= proposerMask;
401
+ // An accepted response has one entry per newly proven checkpoint, and `_added` is at least one.
402
+ if (_v.sequencerCheckpointRewards.length > 0) {
403
+ uint256 available = claimCheckpointRewards(desired);
404
+ if (available < desired) {
405
+ uint256[] memory sequencerRewards = _v.sequencerCheckpointRewards;
406
+ sequencerTotal = 0;
407
+ for (uint256 i = 0; i < _added; i++) {
408
+ sequencerRewards[i] = Math.mulDiv(sequencerRewards[i], available, desired);
409
+ sequencerTotal += sequencerRewards[i];
410
+ }
509
411
  }
510
-
511
- uint256 reward = context.proposerRewards[proposerIndex];
512
- desiredSequencerCheckpointRewards[i] = reward;
513
- desiredSequencerRewardsTotal += reward;
412
+ proverRewards = available - sequencerTotal;
413
+ } else {
414
+ uint256 available = claimCheckpointRewards(_added * checkpointReward);
415
+ sequencerTotal = BpsLib.mul(available, sequencerBps);
416
+ _v.sequencerCheckpointReward = sequencerTotal / _added;
417
+ uint256 dust = sequencerTotal - (_v.sequencerCheckpointReward * _added);
418
+ proverRewards = available - sequencerTotal + dust;
514
419
  }
515
-
516
- return (desiredSequencerRewardsTotal, desiredSequencerCheckpointRewards);
517
420
  }
518
421
 
519
- function getDesiredSequencerRewardForProposer(
520
- address _proposer,
521
- SequencerRewardContext memory _context,
522
- uint256 _defaultSequencerRewardPerCheckpoint
523
- ) private view returns (uint256) {
524
- address withdrawer = _context.gse.getWithdrawer(_proposer);
525
- (bool responded, address registry) = tryGetRegistry(withdrawer);
526
- if (!responded || registry == address(0)) {
527
- return _defaultSequencerRewardPerCheckpoint;
528
- }
529
-
530
- for (uint256 i = 0; i < MAX_REGISTRY_REWARD_OVERRIDES; i++) {
531
- RegistryRewardOverride memory current = _context.registryRewardOverrides[i];
532
- if (current.registry == registry) {
533
- return Math.min(_defaultSequencerRewardPerCheckpoint, current.sequencerReward);
422
+ /**
423
+ * @notice Claims up to `_desired` from the reward distributor
424
+ * @return available The amount claimed: `_desired`, or what the distributor holds for this rollup if less
425
+ */
426
+ function claimCheckpointRewards(uint256 _desired) private returns (uint256 available) {
427
+ if (_desired > 0) {
428
+ IRewardDistributor distributor = getStorage().config.rewardDistributor;
429
+ available = Math.min(_desired, distributor.availableTo(address(this)));
430
+ if (available > 0) {
431
+ distributor.claim(address(this), available);
534
432
  }
535
433
  }
536
-
537
- return _defaultSequencerRewardPerCheckpoint;
538
434
  }
539
435
 
540
- function hasRegistryRewardOverrides(RegistryRewardOverride[MAX_REGISTRY_REWARD_OVERRIDES] memory _registryRewardOverrides)
541
- private
542
- pure
543
- returns (bool)
544
- {
545
- for (uint256 i = 0; i < MAX_REGISTRY_REWARD_OVERRIDES; i++) {
546
- if (_registryRewardOverrides[i].registry != address(0)) {
547
- return true;
548
- }
436
+ /**
437
+ * @notice Asks the sequencer reward calculator for the reward of each newly proven checkpoint
438
+ * @dev On an accepted response, writes the rewards to `_v.sequencerCheckpointRewards` and returns their sum. On any
439
+ * failure, leaves `_v.sequencerCheckpointRewards` empty so the caller falls back to the default path.
440
+ * @return total The sum of the accepted rewards, or zero
441
+ */
442
+ function callSequencerRewardCalculator(
443
+ SubmitEpochRootProofArgs calldata _args,
444
+ Epoch _endEpoch,
445
+ address[] memory _committee,
446
+ uint256 _provenLength,
447
+ uint256 _added,
448
+ uint256 _defaultReward,
449
+ uint256 _checkpointReward,
450
+ Values memory _v
451
+ ) private view returns (uint256 total) {
452
+ (bool accepted, uint256[] memory rewards, uint256 sum) = SequencerRewardCalculatorLib.tryGetSequencerRewards(
453
+ getStorage().sequencerRewardCalculator,
454
+ _endEpoch,
455
+ getProposers(_args, _endEpoch, _committee, _provenLength, _added),
456
+ _defaultReward,
457
+ _checkpointReward
458
+ );
459
+ if (accepted) {
460
+ _v.sequencerCheckpointRewards = rewards;
461
+ total = sum;
549
462
  }
463
+ }
550
464
 
551
- return false;
465
+ /**
466
+ * @notice Derives the proposer of each newly proven checkpoint from the committee the proof verified
467
+ * @dev Mirrors the proposer selection at propose time: `computeProposerIndex(epoch, slot, sampleSeed, size)`. The
468
+ * headers of every rewarded checkpoint are present and were bound to the stored header hashes by the proof.
469
+ * @return proposers One committee member per newly proven checkpoint, in checkpoint order
470
+ */
471
+ function getProposers(
472
+ SubmitEpochRootProofArgs calldata _args,
473
+ Epoch _endEpoch,
474
+ address[] memory _committee,
475
+ uint256 _provenLength,
476
+ uint256 _added
477
+ ) private view returns (address[] memory proposers) {
478
+ proposers = new address[](_added);
479
+ uint256 seed = ValidatorSelectionLib.getSampleSeed(_endEpoch);
480
+ uint256 committeeSize = _committee.length;
481
+ uint256 firstHeader = _provenLength - _args.provenCheckpointFees.length;
482
+ for (uint256 i = 0; i < _added; i++) {
483
+ proposers[i] = _committee[
484
+ ValidatorSelectionLib.computeProposerIndex(
485
+ _endEpoch, _args.headers[firstHeader + i].slotNumber, seed, committeeSize
486
+ )
487
+ ];
488
+ }
552
489
  }
553
490
  }