@arbitrum/nitro-contracts 2.1.0 → 3.0.0-alpha.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (503) hide show
  1. package/build/contracts/@openzeppelin/contracts/access/Ownable.sol/Ownable.dbg.json +1 -1
  2. package/build/contracts/@openzeppelin/contracts/interfaces/draft-IERC1822.sol/IERC1822Proxiable.dbg.json +1 -1
  3. package/build/contracts/@openzeppelin/contracts/proxy/ERC1967/ERC1967Proxy.sol/ERC1967Proxy.dbg.json +1 -1
  4. package/build/contracts/@openzeppelin/contracts/proxy/ERC1967/ERC1967Proxy.sol/ERC1967Proxy.json +2 -2
  5. package/build/contracts/@openzeppelin/contracts/proxy/ERC1967/ERC1967Upgrade.sol/ERC1967Upgrade.dbg.json +1 -1
  6. package/build/contracts/@openzeppelin/contracts/proxy/Proxy.sol/Proxy.dbg.json +1 -1
  7. package/build/contracts/@openzeppelin/contracts/proxy/beacon/IBeacon.sol/IBeacon.dbg.json +1 -1
  8. package/build/contracts/@openzeppelin/contracts/proxy/beacon/UpgradeableBeacon.sol/UpgradeableBeacon.dbg.json +1 -1
  9. package/build/contracts/@openzeppelin/contracts/proxy/beacon/UpgradeableBeacon.sol/UpgradeableBeacon.json +2 -2
  10. package/build/contracts/@openzeppelin/contracts/proxy/transparent/ProxyAdmin.sol/ProxyAdmin.dbg.json +1 -1
  11. package/build/contracts/@openzeppelin/contracts/proxy/transparent/ProxyAdmin.sol/ProxyAdmin.json +2 -2
  12. package/build/contracts/@openzeppelin/contracts/proxy/transparent/TransparentUpgradeableProxy.sol/TransparentUpgradeableProxy.dbg.json +1 -1
  13. package/build/contracts/@openzeppelin/contracts/proxy/transparent/TransparentUpgradeableProxy.sol/TransparentUpgradeableProxy.json +2 -2
  14. package/build/contracts/@openzeppelin/contracts/proxy/utils/UUPSUpgradeable.sol/UUPSUpgradeable.dbg.json +1 -1
  15. package/build/contracts/@openzeppelin/contracts/security/ReentrancyGuard.sol/ReentrancyGuard.dbg.json +1 -1
  16. package/build/contracts/@openzeppelin/contracts/token/ERC20/ERC20.sol/ERC20.dbg.json +1 -1
  17. package/build/contracts/@openzeppelin/contracts/token/ERC20/ERC20.sol/ERC20.json +2 -2
  18. package/build/contracts/@openzeppelin/contracts/token/ERC20/IERC20.sol/IERC20.dbg.json +1 -1
  19. package/build/contracts/@openzeppelin/contracts/token/ERC20/extensions/IERC20Metadata.sol/IERC20Metadata.dbg.json +1 -1
  20. package/build/contracts/@openzeppelin/contracts/token/ERC20/extensions/draft-IERC20Permit.sol/IERC20Permit.dbg.json +4 -0
  21. package/build/contracts/@openzeppelin/contracts/token/ERC20/extensions/draft-IERC20Permit.sol/IERC20Permit.json +86 -0
  22. package/build/contracts/@openzeppelin/contracts/token/ERC20/utils/SafeERC20.sol/SafeERC20.dbg.json +1 -1
  23. package/build/contracts/@openzeppelin/contracts/token/ERC20/utils/SafeERC20.sol/SafeERC20.json +2 -2
  24. package/build/contracts/@openzeppelin/contracts/utils/Address.sol/Address.dbg.json +1 -1
  25. package/build/contracts/@openzeppelin/contracts/utils/Address.sol/Address.json +2 -2
  26. package/build/contracts/@openzeppelin/contracts/utils/Context.sol/Context.dbg.json +1 -1
  27. package/build/contracts/@openzeppelin/contracts/utils/Create2.sol/Create2.dbg.json +4 -0
  28. package/build/contracts/@openzeppelin/contracts/utils/Create2.sol/Create2.json +10 -0
  29. package/build/contracts/@openzeppelin/contracts/utils/StorageSlot.sol/StorageSlot.dbg.json +1 -1
  30. package/build/contracts/@openzeppelin/contracts/utils/StorageSlot.sol/StorageSlot.json +2 -2
  31. package/build/contracts/@openzeppelin/contracts/utils/Strings.sol/Strings.dbg.json +1 -1
  32. package/build/contracts/@openzeppelin/contracts/utils/Strings.sol/Strings.json +2 -2
  33. package/build/contracts/@openzeppelin/contracts-upgradeable/access/AccessControlUpgradeable.sol/AccessControlUpgradeable.dbg.json +1 -1
  34. package/build/contracts/@openzeppelin/contracts-upgradeable/access/AccessControlUpgradeable.sol/AccessControlUpgradeable.json +13 -0
  35. package/build/contracts/@openzeppelin/contracts-upgradeable/access/IAccessControlUpgradeable.sol/IAccessControlUpgradeable.dbg.json +1 -1
  36. package/build/contracts/@openzeppelin/contracts-upgradeable/access/OwnableUpgradeable.sol/OwnableUpgradeable.dbg.json +1 -1
  37. package/build/contracts/@openzeppelin/contracts-upgradeable/access/OwnableUpgradeable.sol/OwnableUpgradeable.json +13 -0
  38. package/build/contracts/@openzeppelin/contracts-upgradeable/proxy/utils/Initializable.sol/Initializable.dbg.json +1 -1
  39. package/build/contracts/@openzeppelin/contracts-upgradeable/proxy/utils/Initializable.sol/Initializable.json +15 -1
  40. package/build/contracts/@openzeppelin/contracts-upgradeable/security/PausableUpgradeable.sol/PausableUpgradeable.dbg.json +1 -1
  41. package/build/contracts/@openzeppelin/contracts-upgradeable/security/PausableUpgradeable.sol/PausableUpgradeable.json +13 -0
  42. package/build/contracts/@openzeppelin/contracts-upgradeable/utils/AddressUpgradeable.sol/AddressUpgradeable.dbg.json +1 -1
  43. package/build/contracts/@openzeppelin/contracts-upgradeable/utils/AddressUpgradeable.sol/AddressUpgradeable.json +2 -2
  44. package/build/contracts/@openzeppelin/contracts-upgradeable/utils/ContextUpgradeable.sol/ContextUpgradeable.dbg.json +1 -1
  45. package/build/contracts/@openzeppelin/contracts-upgradeable/utils/ContextUpgradeable.sol/ContextUpgradeable.json +15 -1
  46. package/build/contracts/@openzeppelin/contracts-upgradeable/utils/Create2Upgradeable.sol/Create2Upgradeable.dbg.json +4 -0
  47. package/build/contracts/@openzeppelin/contracts-upgradeable/utils/Create2Upgradeable.sol/Create2Upgradeable.json +10 -0
  48. package/build/contracts/@openzeppelin/contracts-upgradeable/utils/StorageSlotUpgradeable.sol/StorageSlotUpgradeable.dbg.json +1 -1
  49. package/build/contracts/@openzeppelin/contracts-upgradeable/utils/StorageSlotUpgradeable.sol/StorageSlotUpgradeable.json +2 -2
  50. package/build/contracts/@openzeppelin/contracts-upgradeable/utils/StringsUpgradeable.sol/StringsUpgradeable.dbg.json +1 -1
  51. package/build/contracts/@openzeppelin/contracts-upgradeable/utils/StringsUpgradeable.sol/StringsUpgradeable.json +2 -2
  52. package/build/contracts/@openzeppelin/contracts-upgradeable/utils/introspection/ERC165Upgradeable.sol/ERC165Upgradeable.dbg.json +1 -1
  53. package/build/contracts/@openzeppelin/contracts-upgradeable/utils/introspection/ERC165Upgradeable.sol/ERC165Upgradeable.json +13 -0
  54. package/build/contracts/@openzeppelin/contracts-upgradeable/utils/introspection/IERC165Upgradeable.sol/IERC165Upgradeable.dbg.json +1 -1
  55. package/build/contracts/@openzeppelin/contracts-upgradeable/utils/structs/EnumerableSetUpgradeable.sol/EnumerableSetUpgradeable.dbg.json +4 -0
  56. package/build/contracts/@openzeppelin/contracts-upgradeable/utils/structs/EnumerableSetUpgradeable.sol/EnumerableSetUpgradeable.json +10 -0
  57. package/build/contracts/src/assertionStakingPool/AbsBoldStakingPool.sol/AbsBoldStakingPool.dbg.json +4 -0
  58. package/build/contracts/{@openzeppelin/contracts-upgradeable/token/ERC20/IERC20Upgradeable.sol/IERC20Upgradeable.json → src/assertionStakingPool/AbsBoldStakingPool.sol/AbsBoldStakingPool.json} +41 -95
  59. package/build/contracts/src/assertionStakingPool/AssertionStakingPool.sol/AssertionStakingPool.dbg.json +4 -0
  60. package/build/contracts/src/assertionStakingPool/AssertionStakingPool.sol/AssertionStakingPool.json +340 -0
  61. package/build/contracts/src/assertionStakingPool/AssertionStakingPoolCreator.sol/AssertionStakingPoolCreator.dbg.json +4 -0
  62. package/build/contracts/src/assertionStakingPool/AssertionStakingPoolCreator.sol/AssertionStakingPoolCreator.json +89 -0
  63. package/build/contracts/src/assertionStakingPool/EdgeStakingPool.sol/EdgeStakingPool.dbg.json +4 -0
  64. package/build/contracts/src/assertionStakingPool/EdgeStakingPool.sol/EdgeStakingPool.json +248 -0
  65. package/build/contracts/src/assertionStakingPool/EdgeStakingPoolCreator.sol/EdgeStakingPoolCreator.dbg.json +4 -0
  66. package/build/contracts/src/assertionStakingPool/EdgeStakingPoolCreator.sol/EdgeStakingPoolCreator.json +83 -0
  67. package/build/contracts/src/assertionStakingPool/StakingPoolCreatorUtils.sol/StakingPoolCreatorUtils.dbg.json +4 -0
  68. package/build/contracts/src/assertionStakingPool/StakingPoolCreatorUtils.sol/StakingPoolCreatorUtils.json +16 -0
  69. package/build/contracts/src/assertionStakingPool/interfaces/IAbsBoldStakingPool.sol/IAbsBoldStakingPool.dbg.json +4 -0
  70. package/build/contracts/src/assertionStakingPool/interfaces/IAbsBoldStakingPool.sol/IAbsBoldStakingPool.json +140 -0
  71. package/build/contracts/src/assertionStakingPool/interfaces/IAssertionStakingPool.sol/IAssertionStakingPool.dbg.json +4 -0
  72. package/build/contracts/src/assertionStakingPool/interfaces/IAssertionStakingPool.sol/IAssertionStakingPool.json +324 -0
  73. package/build/contracts/src/assertionStakingPool/interfaces/IAssertionStakingPoolCreator.sol/IAssertionStakingPoolCreator.dbg.json +4 -0
  74. package/build/contracts/src/assertionStakingPool/interfaces/IAssertionStakingPoolCreator.sol/IAssertionStakingPoolCreator.json +84 -0
  75. package/build/contracts/src/assertionStakingPool/interfaces/IEdgeStakingPool.sol/IEdgeStakingPool.dbg.json +4 -0
  76. package/build/contracts/src/assertionStakingPool/interfaces/IEdgeStakingPool.sol/IEdgeStakingPool.json +232 -0
  77. package/build/contracts/src/assertionStakingPool/interfaces/IEdgeStakingPoolCreator.sol/IEdgeStakingPoolCreator.dbg.json +4 -0
  78. package/build/contracts/src/assertionStakingPool/interfaces/IEdgeStakingPoolCreator.sol/IEdgeStakingPoolCreator.json +78 -0
  79. package/build/contracts/src/bridge/AbsBridge.sol/AbsBridge.dbg.json +1 -1
  80. package/build/contracts/src/bridge/AbsBridge.sol/AbsBridge.json +13 -0
  81. package/build/contracts/src/bridge/AbsInbox.sol/AbsInbox.dbg.json +1 -1
  82. package/build/contracts/src/bridge/AbsInbox.sol/AbsInbox.json +20 -7
  83. package/build/contracts/src/bridge/AbsOutbox.sol/AbsOutbox.dbg.json +1 -1
  84. package/build/contracts/src/bridge/Bridge.sol/Bridge.dbg.json +1 -1
  85. package/build/contracts/src/bridge/Bridge.sol/Bridge.json +15 -2
  86. package/build/contracts/src/bridge/DelayBuffer.sol/DelayBuffer.dbg.json +4 -0
  87. package/build/contracts/src/bridge/DelayBuffer.sol/DelayBuffer.json +24 -0
  88. package/build/contracts/src/bridge/ERC20Bridge.sol/ERC20Bridge.dbg.json +1 -1
  89. package/build/contracts/src/bridge/ERC20Bridge.sol/ERC20Bridge.json +15 -2
  90. package/build/contracts/src/bridge/ERC20Inbox.sol/ERC20Inbox.dbg.json +1 -1
  91. package/build/contracts/src/bridge/ERC20Inbox.sol/ERC20Inbox.json +22 -9
  92. package/build/contracts/src/bridge/ERC20Outbox.sol/ERC20Outbox.dbg.json +1 -1
  93. package/build/contracts/src/bridge/ERC20Outbox.sol/ERC20Outbox.json +2 -2
  94. package/build/contracts/src/bridge/GasRefunder.sol/GasRefunder.dbg.json +1 -1
  95. package/build/contracts/src/bridge/GasRefunder.sol/GasRefunder.json +2 -2
  96. package/build/contracts/src/bridge/IBridge.sol/IBridge.dbg.json +1 -1
  97. package/build/contracts/src/bridge/IDelayedMessageProvider.sol/IDelayedMessageProvider.dbg.json +1 -1
  98. package/build/contracts/src/bridge/IERC20Bridge.sol/IERC20Bridge.dbg.json +1 -1
  99. package/build/contracts/src/bridge/IERC20Inbox.sol/IERC20Inbox.dbg.json +1 -1
  100. package/build/contracts/src/bridge/IERC20Inbox.sol/IERC20Inbox.json +1 -1
  101. package/build/contracts/src/bridge/IEthBridge.sol/IEthBridge.dbg.json +1 -1
  102. package/build/contracts/src/bridge/IInbox.sol/IInbox.dbg.json +1 -1
  103. package/build/contracts/src/bridge/IInbox.sol/IInbox.json +1 -1
  104. package/build/contracts/src/bridge/IInboxBase.sol/IInboxBase.dbg.json +1 -1
  105. package/build/contracts/src/bridge/IInboxBase.sol/IInboxBase.json +1 -1
  106. package/build/contracts/src/bridge/IOutbox.sol/IOutbox.dbg.json +1 -1
  107. package/build/contracts/src/bridge/IOwnable.sol/IOwnable.dbg.json +1 -1
  108. package/build/contracts/src/bridge/ISequencerInbox.sol/ISequencerInbox.dbg.json +1 -1
  109. package/build/contracts/src/bridge/ISequencerInbox.sol/ISequencerInbox.json +441 -0
  110. package/build/contracts/src/bridge/Inbox.sol/Inbox.dbg.json +1 -1
  111. package/build/contracts/src/bridge/Inbox.sol/Inbox.json +22 -4
  112. package/build/contracts/src/bridge/Messages.sol/Messages.dbg.json +1 -1
  113. package/build/contracts/src/bridge/Messages.sol/Messages.json +2 -2
  114. package/build/contracts/src/bridge/Outbox.sol/Outbox.dbg.json +1 -1
  115. package/build/contracts/src/bridge/Outbox.sol/Outbox.json +2 -2
  116. package/build/contracts/src/bridge/SequencerInbox.sol/SequencerInbox.dbg.json +1 -1
  117. package/build/contracts/src/bridge/SequencerInbox.sol/SequencerInbox.json +564 -7
  118. package/build/contracts/src/chain/CacheManager.sol/CacheManager.dbg.json +1 -1
  119. package/build/contracts/src/chain/CacheManager.sol/CacheManager.json +15 -2
  120. package/build/contracts/src/challengeV2/EdgeChallengeManager.sol/EdgeChallengeManager.dbg.json +4 -0
  121. package/build/contracts/src/challengeV2/EdgeChallengeManager.sol/EdgeChallengeManager.json +1631 -0
  122. package/build/contracts/src/challengeV2/EdgeChallengeManager.sol/IEdgeChallengeManager.dbg.json +4 -0
  123. package/build/contracts/src/challengeV2/EdgeChallengeManager.sol/IEdgeChallengeManager.json +762 -0
  124. package/build/contracts/src/challengeV2/IAssertionChain.sol/IAssertionChain.dbg.json +4 -0
  125. package/build/contracts/src/challengeV2/IAssertionChain.sol/IAssertionChain.json +247 -0
  126. package/build/contracts/src/challengeV2/libraries/ArrayUtilsLib.sol/ArrayUtilsLib.dbg.json +4 -0
  127. package/build/contracts/src/challengeV2/libraries/ArrayUtilsLib.sol/ArrayUtilsLib.json +10 -0
  128. package/build/contracts/src/challengeV2/libraries/ChallengeEdgeLib.sol/ChallengeEdgeLib.dbg.json +4 -0
  129. package/build/contracts/src/challengeV2/libraries/ChallengeEdgeLib.sol/ChallengeEdgeLib.json +10 -0
  130. package/build/contracts/src/challengeV2/libraries/EdgeChallengeManagerLib.sol/EdgeChallengeManagerLib.dbg.json +4 -0
  131. package/build/contracts/src/challengeV2/libraries/EdgeChallengeManagerLib.sol/EdgeChallengeManagerLib.json +24 -0
  132. package/build/contracts/src/challengeV2/libraries/MerkleTreeAccumulatorLib.sol/MerkleTreeAccumulatorLib.dbg.json +4 -0
  133. package/build/contracts/src/challengeV2/libraries/MerkleTreeAccumulatorLib.sol/MerkleTreeAccumulatorLib.json +24 -0
  134. package/build/contracts/src/challengeV2/libraries/UintUtilsLib.sol/UintUtilsLib.dbg.json +4 -0
  135. package/build/contracts/src/challengeV2/libraries/UintUtilsLib.sol/UintUtilsLib.json +10 -0
  136. package/build/contracts/src/libraries/AddressAliasHelper.sol/AddressAliasHelper.dbg.json +1 -1
  137. package/build/contracts/src/libraries/AddressAliasHelper.sol/AddressAliasHelper.json +2 -2
  138. package/build/contracts/src/libraries/AdminFallbackProxy.sol/AdminFallbackProxy.dbg.json +1 -1
  139. package/build/contracts/src/libraries/AdminFallbackProxy.sol/AdminFallbackProxy.json +2 -2
  140. package/build/contracts/src/libraries/AdminFallbackProxy.sol/DoubleLogicERC1967Upgrade.dbg.json +1 -1
  141. package/build/contracts/src/libraries/ArbitrumChecker.sol/ArbitrumChecker.dbg.json +1 -1
  142. package/build/contracts/src/libraries/ArbitrumChecker.sol/ArbitrumChecker.json +2 -2
  143. package/build/contracts/src/libraries/CryptographyPrimitives.sol/CryptographyPrimitives.dbg.json +1 -1
  144. package/build/contracts/src/libraries/CryptographyPrimitives.sol/CryptographyPrimitives.json +2 -2
  145. package/build/contracts/src/libraries/DecimalsConverterHelper.sol/DecimalsConverterHelper.dbg.json +1 -1
  146. package/build/contracts/src/libraries/DecimalsConverterHelper.sol/DecimalsConverterHelper.json +2 -2
  147. package/build/contracts/src/libraries/DelegateCallAware.sol/DelegateCallAware.dbg.json +1 -1
  148. package/build/contracts/src/libraries/DoubleLogicUUPSUpgradeable.sol/DoubleLogicUUPSUpgradeable.dbg.json +1 -1
  149. package/build/contracts/src/libraries/GasRefundEnabled.sol/GasRefundEnabled.dbg.json +1 -1
  150. package/build/contracts/src/libraries/IGasRefunder.sol/IGasRefunder.dbg.json +1 -1
  151. package/build/contracts/src/libraries/IReader4844.sol/IReader4844.dbg.json +1 -1
  152. package/build/contracts/src/libraries/MerkleLib.sol/MerkleLib.dbg.json +1 -1
  153. package/build/contracts/src/libraries/MerkleLib.sol/MerkleLib.json +2 -2
  154. package/build/contracts/src/libraries/UUPSNotUpgradeable.sol/UUPSNotUpgradeable.dbg.json +1 -1
  155. package/build/contracts/src/mocks/Benchmarks.sol/Benchmarks.dbg.json +1 -1
  156. package/build/contracts/src/mocks/Benchmarks.sol/Benchmarks.json +2 -2
  157. package/build/contracts/src/mocks/BridgeStub.sol/BridgeStub.dbg.json +1 -1
  158. package/build/contracts/src/mocks/BridgeStub.sol/BridgeStub.json +8 -8
  159. package/build/contracts/src/mocks/BridgeUnproxied.sol/BridgeUnproxied.dbg.json +1 -1
  160. package/build/contracts/src/mocks/BridgeUnproxied.sol/BridgeUnproxied.json +28 -2
  161. package/build/contracts/src/mocks/InboxStub.sol/InboxStub.dbg.json +1 -1
  162. package/build/contracts/src/mocks/InboxStub.sol/InboxStub.json +2 -2
  163. package/build/contracts/src/mocks/MerkleTreeAccess.sol/MerkleTreeAccess.dbg.json +4 -0
  164. package/build/contracts/src/mocks/MerkleTreeAccess.sol/MerkleTreeAccess.json +227 -0
  165. package/build/contracts/src/mocks/MockRollupEventInbox.sol/MockRollupEventInbox.dbg.json +4 -0
  166. package/build/contracts/src/mocks/MockRollupEventInbox.sol/MockRollupEventInbox.json +133 -0
  167. package/build/contracts/src/mocks/MultiCallTest.sol/MultiCallTest.dbg.json +1 -1
  168. package/build/contracts/src/mocks/MultiCallTest.sol/MultiCallTest.json +2 -2
  169. package/build/contracts/src/mocks/PendingBlkTimeAndNrAdvanceCheck.sol/PendingBlkTimeAndNrAdvanceCheck.dbg.json +1 -1
  170. package/build/contracts/src/mocks/PendingBlkTimeAndNrAdvanceCheck.sol/PendingBlkTimeAndNrAdvanceCheck.json +2 -2
  171. package/build/contracts/src/mocks/Program.sol/ProgramTest.dbg.json +1 -1
  172. package/build/contracts/src/mocks/Program.sol/ProgramTest.json +2 -2
  173. package/build/contracts/src/mocks/ProxyAdminForBinding.sol/ProxyAdminForBinding.dbg.json +1 -1
  174. package/build/contracts/src/mocks/ProxyAdminForBinding.sol/ProxyAdminForBinding.json +2 -2
  175. package/build/contracts/src/mocks/SdkStorage.sol/SdkStorage.dbg.json +1 -1
  176. package/build/contracts/src/mocks/SdkStorage.sol/SdkStorage.json +2 -2
  177. package/build/contracts/src/mocks/SequencerInboxBlobMock.sol/SequencerInboxBlobMock.dbg.json +4 -0
  178. package/build/contracts/src/mocks/SequencerInboxBlobMock.sol/SequencerInboxBlobMock.json +1632 -0
  179. package/build/contracts/src/mocks/SequencerInboxStub.sol/SequencerInboxStub.dbg.json +1 -1
  180. package/build/contracts/src/mocks/SequencerInboxStub.sol/SequencerInboxStub.json +564 -7
  181. package/build/contracts/src/mocks/Simple.sol/Simple.dbg.json +1 -1
  182. package/build/contracts/src/mocks/Simple.sol/Simple.json +2 -2
  183. package/build/contracts/src/mocks/SimpleCacheManager.sol/SimpleCacheManager.dbg.json +1 -1
  184. package/build/contracts/src/mocks/SimpleCacheManager.sol/SimpleCacheManager.json +2 -2
  185. package/build/contracts/src/mocks/SimpleOneStepProofEntry.sol/SimpleOneStepProofEntry.dbg.json +4 -0
  186. package/build/contracts/src/mocks/SimpleOneStepProofEntry.sol/SimpleOneStepProofEntry.json +142 -0
  187. package/build/contracts/src/mocks/SimpleProxy.sol/SimpleProxy.dbg.json +1 -1
  188. package/build/contracts/src/mocks/SimpleProxy.sol/SimpleProxy.json +2 -2
  189. package/build/contracts/src/mocks/TestWETH9.sol/IWETH9.dbg.json +4 -0
  190. package/build/contracts/src/mocks/TestWETH9.sol/IWETH9.json +31 -0
  191. package/build/contracts/src/mocks/TestWETH9.sol/TestWETH9.dbg.json +4 -0
  192. package/build/contracts/src/mocks/TestWETH9.sol/TestWETH9.json +317 -0
  193. package/build/contracts/src/mocks/UpgradeExecutorMock.sol/UpgradeExecutorMock.dbg.json +1 -1
  194. package/build/contracts/src/mocks/UpgradeExecutorMock.sol/UpgradeExecutorMock.json +15 -2
  195. package/build/contracts/src/node-interface/NodeInterface.sol/NodeInterface.dbg.json +1 -1
  196. package/build/contracts/src/node-interface/NodeInterfaceDebug.sol/NodeInterfaceDebug.dbg.json +1 -1
  197. package/build/contracts/src/osp/HashProofHelper.sol/HashProofHelper.dbg.json +1 -1
  198. package/build/contracts/src/osp/HashProofHelper.sol/HashProofHelper.json +2 -2
  199. package/build/contracts/src/osp/IOneStepProofEntry.sol/IOneStepProofEntry.dbg.json +1 -1
  200. package/build/contracts/src/osp/IOneStepProofEntry.sol/IOneStepProofEntry.json +33 -9
  201. package/build/contracts/src/osp/IOneStepProofEntry.sol/OneStepProofEntryLib.dbg.json +1 -1
  202. package/build/contracts/src/osp/IOneStepProofEntry.sol/OneStepProofEntryLib.json +2 -2
  203. package/build/contracts/src/osp/IOneStepProver.sol/IOneStepProver.dbg.json +1 -1
  204. package/build/contracts/src/osp/IOneStepProver.sol/IOneStepProver.json +5 -0
  205. package/build/contracts/src/osp/OneStepProofEntry.sol/OneStepProofEntry.dbg.json +1 -1
  206. package/build/contracts/src/osp/OneStepProofEntry.sol/OneStepProofEntry.json +35 -11
  207. package/build/contracts/src/osp/OneStepProver0.sol/OneStepProver0.dbg.json +1 -1
  208. package/build/contracts/src/osp/OneStepProver0.sol/OneStepProver0.json +7 -2
  209. package/build/contracts/src/osp/OneStepProverHostIo.sol/OneStepProverHostIo.dbg.json +1 -1
  210. package/build/contracts/src/osp/OneStepProverHostIo.sol/OneStepProverHostIo.json +7 -2
  211. package/build/contracts/src/osp/OneStepProverMath.sol/OneStepProverMath.dbg.json +1 -1
  212. package/build/contracts/src/osp/OneStepProverMath.sol/OneStepProverMath.json +7 -2
  213. package/build/contracts/src/osp/OneStepProverMemory.sol/OneStepProverMemory.dbg.json +1 -1
  214. package/build/contracts/src/osp/OneStepProverMemory.sol/OneStepProverMemory.json +7 -2
  215. package/build/contracts/src/precompiles/ArbAddressTable.sol/ArbAddressTable.dbg.json +1 -1
  216. package/build/contracts/src/precompiles/ArbAggregator.sol/ArbAggregator.dbg.json +1 -1
  217. package/build/contracts/src/precompiles/ArbBLS.sol/ArbBLS.dbg.json +1 -1
  218. package/build/contracts/src/precompiles/ArbDebug.sol/ArbDebug.dbg.json +1 -1
  219. package/build/contracts/src/precompiles/ArbFunctionTable.sol/ArbFunctionTable.dbg.json +1 -1
  220. package/build/contracts/src/precompiles/ArbGasInfo.sol/ArbGasInfo.dbg.json +1 -1
  221. package/build/contracts/src/precompiles/ArbInfo.sol/ArbInfo.dbg.json +1 -1
  222. package/build/contracts/src/precompiles/ArbOwner.sol/ArbOwner.dbg.json +1 -1
  223. package/build/contracts/src/precompiles/ArbOwnerPublic.sol/ArbOwnerPublic.dbg.json +1 -1
  224. package/build/contracts/src/precompiles/ArbRetryableTx.sol/ArbRetryableTx.dbg.json +1 -1
  225. package/build/contracts/src/precompiles/ArbStatistics.sol/ArbStatistics.dbg.json +1 -1
  226. package/build/contracts/src/precompiles/ArbSys.sol/ArbSys.dbg.json +1 -1
  227. package/build/contracts/src/precompiles/ArbWasm.sol/ArbWasm.dbg.json +1 -1
  228. package/build/contracts/src/precompiles/ArbWasmCache.sol/ArbWasmCache.dbg.json +1 -1
  229. package/build/contracts/src/precompiles/ArbosActs.sol/ArbosActs.dbg.json +1 -1
  230. package/build/contracts/src/precompiles/ArbosTest.sol/ArbosTest.dbg.json +1 -1
  231. package/build/contracts/src/rollup/AbsRollupEventInbox.sol/AbsRollupEventInbox.dbg.json +1 -1
  232. package/build/contracts/src/rollup/Assertion.sol/AssertionNodeLib.dbg.json +4 -0
  233. package/build/contracts/src/rollup/{Node.sol/NodeLib.json → Assertion.sol/AssertionNodeLib.json} +4 -4
  234. package/build/contracts/src/rollup/AssertionState.sol/AssertionStateLib.dbg.json +4 -0
  235. package/build/contracts/src/{challenge/ChallengeLib.sol/ChallengeLib.json → rollup/AssertionState.sol/AssertionStateLib.json} +4 -4
  236. package/build/contracts/src/rollup/BOLDUpgradeAction.sol/BOLDUpgradeAction.dbg.json +4 -0
  237. package/build/contracts/src/rollup/BOLDUpgradeAction.sol/BOLDUpgradeAction.json +807 -0
  238. package/build/contracts/src/rollup/BOLDUpgradeAction.sol/ConstantArrayStorage.dbg.json +4 -0
  239. package/build/contracts/src/rollup/BOLDUpgradeAction.sol/ConstantArrayStorage.json +35 -0
  240. package/build/contracts/src/rollup/BOLDUpgradeAction.sol/IOldRollup.dbg.json +4 -0
  241. package/build/contracts/src/rollup/BOLDUpgradeAction.sol/IOldRollup.json +361 -0
  242. package/build/contracts/src/rollup/BOLDUpgradeAction.sol/IOldRollupAdmin.dbg.json +4 -0
  243. package/build/contracts/src/rollup/BOLDUpgradeAction.sol/IOldRollupAdmin.json +38 -0
  244. package/build/contracts/src/rollup/BOLDUpgradeAction.sol/ISeqInboxPostUpgradeInit.dbg.json +4 -0
  245. package/build/contracts/src/rollup/BOLDUpgradeAction.sol/ISeqInboxPostUpgradeInit.json +41 -0
  246. package/build/contracts/src/rollup/BOLDUpgradeAction.sol/RollupReader.dbg.json +4 -0
  247. package/build/contracts/src/rollup/BOLDUpgradeAction.sol/RollupReader.json +385 -0
  248. package/build/contracts/src/rollup/BOLDUpgradeAction.sol/StateHashPreImageLookup.dbg.json +4 -0
  249. package/build/contracts/src/rollup/BOLDUpgradeAction.sol/StateHashPreImageLookup.json +203 -0
  250. package/build/contracts/src/rollup/BridgeCreator.sol/BridgeCreator.dbg.json +1 -1
  251. package/build/contracts/src/rollup/BridgeCreator.sol/BridgeCreator.json +62 -10
  252. package/build/contracts/src/rollup/DeployHelper.sol/DeployHelper.dbg.json +1 -1
  253. package/build/contracts/src/rollup/DeployHelper.sol/DeployHelper.json +2 -2
  254. package/build/contracts/src/rollup/ERC20RollupEventInbox.sol/ERC20RollupEventInbox.dbg.json +1 -1
  255. package/build/contracts/src/rollup/ERC20RollupEventInbox.sol/ERC20RollupEventInbox.json +2 -2
  256. package/build/contracts/src/rollup/FactoryDeployerHelper.sol/FactoryDeployerHelper.dbg.json +1 -1
  257. package/build/contracts/src/rollup/FactoryDeployerHelper.sol/FactoryDeployerHelper.json +2 -2
  258. package/build/contracts/src/rollup/FactoryDeployerHelper.sol/IDeployHelper.dbg.json +1 -1
  259. package/build/contracts/src/rollup/FactoryDeployerHelper.sol/IERC20.dbg.json +1 -1
  260. package/build/contracts/src/rollup/FactoryDeployerHelper.sol/IERC20Bridge.dbg.json +1 -1
  261. package/build/contracts/src/rollup/FactoryDeployerHelper.sol/IInboxBase.dbg.json +1 -1
  262. package/build/contracts/src/rollup/IRollupAdmin.sol/IRollupAdmin.dbg.json +1 -1
  263. package/build/contracts/src/rollup/IRollupAdmin.sol/IRollupAdmin.json +473 -99
  264. package/build/contracts/src/rollup/IRollupCore.sol/IRollupCore.dbg.json +1 -1
  265. package/build/contracts/src/rollup/IRollupCore.sol/IRollupCore.json +315 -221
  266. package/build/contracts/src/rollup/IRollupEventInbox.sol/IRollupEventInbox.dbg.json +1 -1
  267. package/build/contracts/src/rollup/IRollupLogic.sol/IRollupUser.dbg.json +1 -1
  268. package/build/contracts/src/rollup/IRollupLogic.sol/IRollupUser.json +678 -499
  269. package/build/contracts/src/rollup/RollupAdminLogic.sol/RollupAdminLogic.dbg.json +1 -1
  270. package/build/contracts/src/rollup/RollupAdminLogic.sol/RollupAdminLogic.json +806 -435
  271. package/build/contracts/src/rollup/RollupCore.sol/RollupCore.dbg.json +1 -1
  272. package/build/contracts/src/rollup/RollupCore.sol/RollupCore.json +323 -235
  273. package/build/contracts/src/rollup/RollupCreator.sol/RollupCreator.dbg.json +1 -1
  274. package/build/contracts/src/rollup/RollupCreator.sol/RollupCreator.json +98 -36
  275. package/build/contracts/src/rollup/RollupEventInbox.sol/RollupEventInbox.dbg.json +1 -1
  276. package/build/contracts/src/rollup/RollupEventInbox.sol/RollupEventInbox.json +2 -2
  277. package/build/contracts/src/rollup/RollupLib.sol/RollupLib.dbg.json +1 -1
  278. package/build/contracts/src/rollup/RollupLib.sol/RollupLib.json +2 -2
  279. package/build/contracts/src/rollup/RollupProxy.sol/RollupProxy.dbg.json +1 -1
  280. package/build/contracts/src/rollup/RollupProxy.sol/RollupProxy.json +97 -16
  281. package/build/contracts/src/rollup/RollupUserLogic.sol/RollupUserLogic.dbg.json +1 -1
  282. package/build/contracts/src/rollup/RollupUserLogic.sol/RollupUserLogic.json +924 -535
  283. package/build/contracts/src/rollup/ValidatorWallet.sol/ValidatorWallet.dbg.json +1 -1
  284. package/build/contracts/src/rollup/ValidatorWallet.sol/ValidatorWallet.json +15 -43
  285. package/build/contracts/src/rollup/ValidatorWalletCreator.sol/ValidatorWalletCreator.dbg.json +1 -1
  286. package/build/contracts/src/rollup/ValidatorWalletCreator.sol/ValidatorWalletCreator.json +2 -2
  287. package/build/contracts/src/state/Deserialize.sol/Deserialize.dbg.json +1 -1
  288. package/build/contracts/src/state/Deserialize.sol/Deserialize.json +2 -2
  289. package/build/contracts/src/state/GlobalState.sol/GlobalStateLib.dbg.json +1 -1
  290. package/build/contracts/src/state/GlobalState.sol/GlobalStateLib.json +2 -2
  291. package/build/contracts/src/state/Instructions.sol/Instructions.dbg.json +1 -1
  292. package/build/contracts/src/state/Instructions.sol/Instructions.json +2 -2
  293. package/build/contracts/src/state/Machine.sol/MachineLib.dbg.json +1 -1
  294. package/build/contracts/src/state/Machine.sol/MachineLib.json +2 -2
  295. package/build/contracts/src/state/MerkleProof.sol/MerkleProofLib.dbg.json +1 -1
  296. package/build/contracts/src/state/MerkleProof.sol/MerkleProofLib.json +2 -2
  297. package/build/contracts/src/state/Module.sol/ModuleLib.dbg.json +1 -1
  298. package/build/contracts/src/state/Module.sol/ModuleLib.json +2 -2
  299. package/build/contracts/src/state/ModuleMemory.sol/ModuleMemoryLib.dbg.json +1 -1
  300. package/build/contracts/src/state/ModuleMemory.sol/ModuleMemoryLib.json +2 -2
  301. package/build/contracts/src/state/ModuleMemoryCompact.sol/ModuleMemoryCompactLib.dbg.json +1 -1
  302. package/build/contracts/src/state/ModuleMemoryCompact.sol/ModuleMemoryCompactLib.json +2 -2
  303. package/build/contracts/src/state/MultiStack.sol/MultiStackLib.dbg.json +1 -1
  304. package/build/contracts/src/state/MultiStack.sol/MultiStackLib.json +2 -2
  305. package/build/contracts/src/state/PcArray.sol/PcArrayLib.dbg.json +1 -1
  306. package/build/contracts/src/state/PcArray.sol/PcArrayLib.json +2 -2
  307. package/build/contracts/src/state/StackFrame.sol/StackFrameLib.dbg.json +1 -1
  308. package/build/contracts/src/state/StackFrame.sol/StackFrameLib.json +2 -2
  309. package/build/contracts/src/state/Value.sol/ValueLib.dbg.json +1 -1
  310. package/build/contracts/src/state/Value.sol/ValueLib.json +2 -2
  311. package/build/contracts/src/state/ValueArray.sol/ValueArrayLib.dbg.json +1 -1
  312. package/build/contracts/src/state/ValueArray.sol/ValueArrayLib.json +2 -2
  313. package/build/contracts/src/state/ValueStack.sol/ValueStackLib.dbg.json +1 -1
  314. package/build/contracts/src/state/ValueStack.sol/ValueStackLib.json +2 -2
  315. package/build/contracts/src/test-helpers/BridgeTester.sol/BridgeTester.dbg.json +1 -1
  316. package/build/contracts/src/test-helpers/BridgeTester.sol/BridgeTester.json +15 -2
  317. package/build/contracts/src/test-helpers/CryptographyPrimitivesTester.sol/CryptographyPrimitivesTester.dbg.json +1 -1
  318. package/build/contracts/src/test-helpers/CryptographyPrimitivesTester.sol/CryptographyPrimitivesTester.json +2 -2
  319. package/build/contracts/src/test-helpers/EthVault.sol/EthVault.dbg.json +1 -1
  320. package/build/contracts/src/test-helpers/EthVault.sol/EthVault.json +2 -2
  321. package/build/contracts/src/test-helpers/MessageTester.sol/MessageTester.dbg.json +1 -1
  322. package/build/contracts/src/test-helpers/MessageTester.sol/MessageTester.json +2 -2
  323. package/build/contracts/src/test-helpers/OutboxWithoutOptTester.sol/OutboxWithoutOptTester.dbg.json +1 -1
  324. package/build/contracts/src/test-helpers/OutboxWithoutOptTester.sol/OutboxWithoutOptTester.json +2 -2
  325. package/build/contracts/src/test-helpers/RollupMock.sol/RollupMock.dbg.json +1 -1
  326. package/build/contracts/src/test-helpers/RollupMock.sol/RollupMock.json +2 -15
  327. package/build/contracts/src/test-helpers/TestToken.sol/TestToken.dbg.json +1 -1
  328. package/build/contracts/src/test-helpers/TestToken.sol/TestToken.json +2 -2
  329. package/build/contracts/src/test-helpers/ValueArrayTester.sol/ValueArrayTester.dbg.json +1 -1
  330. package/build/contracts/src/test-helpers/ValueArrayTester.sol/ValueArrayTester.json +2 -2
  331. package/out/yul/Reader4844.yul/Reader4844.json +1 -1
  332. package/package.json +15 -5
  333. package/src/assertionStakingPool/AbsBoldStakingPool.sol +66 -0
  334. package/src/assertionStakingPool/AssertionStakingPool.sol +70 -0
  335. package/src/assertionStakingPool/AssertionStakingPoolCreator.sol +35 -0
  336. package/src/assertionStakingPool/EdgeStakingPool.sol +57 -0
  337. package/src/assertionStakingPool/EdgeStakingPoolCreator.sol +34 -0
  338. package/src/assertionStakingPool/StakingPoolCreatorUtils.sol +25 -0
  339. package/src/assertionStakingPool/interfaces/IAbsBoldStakingPool.sol +41 -0
  340. package/src/assertionStakingPool/interfaces/IAssertionStakingPool.sol +36 -0
  341. package/src/assertionStakingPool/interfaces/IAssertionStakingPoolCreator.sol +31 -0
  342. package/src/assertionStakingPool/interfaces/IEdgeStakingPool.sol +27 -0
  343. package/src/assertionStakingPool/interfaces/IEdgeStakingPoolCreator.sol +28 -0
  344. package/src/bridge/AbsBridge.sol +38 -48
  345. package/src/bridge/AbsInbox.sol +88 -97
  346. package/src/bridge/AbsOutbox.sol +23 -37
  347. package/src/bridge/Bridge.sol +6 -4
  348. package/src/bridge/DelayBuffer.sol +123 -0
  349. package/src/bridge/DelayBufferTypes.sol +38 -0
  350. package/src/bridge/ERC20Bridge.sol +8 -4
  351. package/src/bridge/ERC20Inbox.sol +46 -53
  352. package/src/bridge/ERC20Outbox.sol +7 -3
  353. package/src/bridge/GasRefunder.sol +38 -24
  354. package/src/bridge/IBridge.sol +30 -21
  355. package/src/bridge/IERC20Bridge.sol +1 -1
  356. package/src/bridge/IERC20Inbox.sol +4 -2
  357. package/src/bridge/IEthBridge.sol +4 -2
  358. package/src/bridge/IInbox.sol +4 -2
  359. package/src/bridge/IInboxBase.sol +17 -13
  360. package/src/bridge/IOutbox.sol +13 -8
  361. package/src/bridge/ISequencerInbox.sol +118 -13
  362. package/src/bridge/Inbox.sol +131 -151
  363. package/src/bridge/Messages.sol +48 -18
  364. package/src/bridge/Outbox.sol +6 -2
  365. package/src/bridge/SequencerInbox.sol +339 -274
  366. package/src/chain/CacheManager.sol +49 -18
  367. package/src/challengeV2/EdgeChallengeManager.sol +783 -0
  368. package/src/challengeV2/IAssertionChain.sol +39 -0
  369. package/src/challengeV2/libraries/ArrayUtilsLib.sol +61 -0
  370. package/src/challengeV2/libraries/ChallengeEdgeLib.sol +333 -0
  371. package/src/challengeV2/libraries/ChallengeErrors.sol +108 -0
  372. package/src/challengeV2/libraries/EdgeChallengeManagerLib.sol +930 -0
  373. package/src/challengeV2/libraries/Enums.sol +26 -0
  374. package/src/challengeV2/libraries/MerkleTreeAccumulatorLib.sol +390 -0
  375. package/src/challengeV2/libraries/UintUtilsLib.sol +74 -0
  376. package/src/libraries/AddressAliasHelper.sol +6 -2
  377. package/src/libraries/AdminFallbackProxy.sol +8 -4
  378. package/src/libraries/ArbitrumChecker.sol +3 -4
  379. package/src/libraries/CryptographyPrimitives.sol +39 -46
  380. package/src/libraries/DecimalsConverterHelper.sol +2 -4
  381. package/src/libraries/DoubleLogicUUPSUpgradeable.sol +10 -7
  382. package/src/libraries/Error.sol +18 -3
  383. package/src/libraries/GasRefundEnabled.sol +3 -4
  384. package/src/libraries/MerkleLib.sol +6 -5
  385. package/src/libraries/UUPSNotUpgradeable.sol +2 -4
  386. package/src/mocks/BridgeStub.sol +50 -48
  387. package/src/mocks/BridgeUnproxied.sol +2 -0
  388. package/src/mocks/InboxStub.sol +22 -17
  389. package/src/mocks/MerkleTreeAccess.sol +72 -0
  390. package/src/mocks/MockRollupEventInbox.sol +59 -0
  391. package/src/mocks/MultiCallTest.sol +3 -1
  392. package/src/mocks/PendingBlkTimeAndNrAdvanceCheck.sol +3 -1
  393. package/src/mocks/Program.sol +9 -7
  394. package/src/mocks/SequencerInboxBlobMock.sol +38 -0
  395. package/src/mocks/SequencerInboxStub.sol +9 -12
  396. package/src/mocks/Simple.sol +13 -25
  397. package/src/mocks/SimpleCacheManager.sol +10 -3
  398. package/src/mocks/SimpleOneStepProofEntry.sol +60 -0
  399. package/src/mocks/SimpleProxy.sol +3 -1
  400. package/src/mocks/TestWETH9.sol +30 -0
  401. package/src/mocks/UpgradeExecutorMock.sol +10 -17
  402. package/src/node-interface/NodeInterface.sol +23 -22
  403. package/src/node-interface/NodeInterfaceDebug.sol +5 -3
  404. package/src/osp/HashProofHelper.sol +9 -10
  405. package/src/osp/IOneStepProofEntry.sol +14 -9
  406. package/src/osp/IOneStepProver.sol +1 -0
  407. package/src/osp/OneStepProofEntry.sol +63 -54
  408. package/src/osp/OneStepProver0.sol +14 -27
  409. package/src/osp/OneStepProverHostIo.sol +31 -58
  410. package/src/osp/OneStepProverMath.sol +15 -23
  411. package/src/osp/OneStepProverMemory.sol +9 -23
  412. package/src/precompiles/ArbAddressTable.sol +19 -9
  413. package/src/precompiles/ArbAggregator.sol +12 -4
  414. package/src/precompiles/ArbBLS.sol +1 -3
  415. package/src/precompiles/ArbDebug.sol +5 -11
  416. package/src/precompiles/ArbFunctionTable.sol +7 -10
  417. package/src/precompiles/ArbGasInfo.sol +9 -43
  418. package/src/precompiles/ArbInfo.sol +6 -2
  419. package/src/precompiles/ArbOwner.sol +101 -34
  420. package/src/precompiles/ArbOwnerPublic.sol +6 -2
  421. package/src/precompiles/ArbRetryableTx.sol +15 -5
  422. package/src/precompiles/ArbStatistics.sol +1 -8
  423. package/src/precompiles/ArbSys.sol +16 -18
  424. package/src/precompiles/ArbWasm.sol +24 -14
  425. package/src/precompiles/ArbWasmCache.sol +15 -5
  426. package/src/precompiles/ArbosTest.sol +3 -1
  427. package/src/rollup/AbsRollupEventInbox.sol +15 -16
  428. package/src/rollup/Assertion.sol +100 -0
  429. package/src/rollup/AssertionState.sol +29 -0
  430. package/src/rollup/BOLDUpgradeAction.sol +631 -0
  431. package/src/rollup/BridgeCreator.sol +42 -15
  432. package/src/rollup/Config.sol +15 -7
  433. package/src/rollup/DeployHelper.sol +12 -31
  434. package/src/rollup/ERC20RollupEventInbox.sol +8 -9
  435. package/src/rollup/FactoryDeployerHelper.sol +8 -10
  436. package/src/rollup/IRollupAdmin.sol +127 -45
  437. package/src/rollup/IRollupCore.sol +64 -84
  438. package/src/rollup/IRollupEventInbox.sol +3 -1
  439. package/src/rollup/IRollupLogic.sol +35 -72
  440. package/src/rollup/RollupAdminLogic.sol +224 -203
  441. package/src/rollup/RollupCore.sol +407 -428
  442. package/src/rollup/RollupCreator.sol +88 -75
  443. package/src/rollup/RollupEventInbox.sol +7 -7
  444. package/src/rollup/RollupLib.sol +50 -86
  445. package/src/rollup/RollupProxy.sol +8 -12
  446. package/src/rollup/RollupUserLogic.sol +279 -644
  447. package/src/rollup/ValidatorUtils.sol +0 -242
  448. package/src/rollup/ValidatorWallet.sol +22 -38
  449. package/src/rollup/ValidatorWalletCreator.sol +8 -8
  450. package/src/state/Deserialize.sol +74 -96
  451. package/src/state/GlobalState.sol +74 -20
  452. package/src/state/Instructions.sol +4 -3
  453. package/src/state/Machine.sol +18 -19
  454. package/src/state/Module.sol +14 -13
  455. package/src/state/ModuleMemory.sol +6 -25
  456. package/src/state/ModuleMemoryCompact.sol +3 -1
  457. package/src/state/MultiStack.sol +16 -20
  458. package/src/state/PcArray.sol +7 -7
  459. package/src/state/StackFrame.sol +21 -14
  460. package/src/state/Value.sol +18 -6
  461. package/src/state/ValueArray.sol +7 -7
  462. package/src/state/ValueStack.sol +9 -3
  463. package/src/test-helpers/BridgeTester.sol +32 -42
  464. package/src/test-helpers/CryptographyPrimitivesTester.sol +12 -13
  465. package/src/test-helpers/EthVault.sol +4 -2
  466. package/src/test-helpers/InterfaceCompatibilityTester.sol +1 -1
  467. package/src/test-helpers/MessageTester.sol +3 -10
  468. package/src/test-helpers/OutboxWithoutOptTester.sol +12 -19
  469. package/src/test-helpers/RollupMock.sol +3 -7
  470. package/src/test-helpers/TestToken.sol +4 -2
  471. package/build/contracts/@openzeppelin/contracts-upgradeable/token/ERC20/IERC20Upgradeable.sol/IERC20Upgradeable.dbg.json +0 -4
  472. package/build/contracts/src/challenge/ChallengeLib.sol/ChallengeLib.dbg.json +0 -4
  473. package/build/contracts/src/challenge/ChallengeManager.sol/ChallengeManager.dbg.json +0 -4
  474. package/build/contracts/src/challenge/ChallengeManager.sol/ChallengeManager.json +0 -746
  475. package/build/contracts/src/challenge/IChallengeManager.sol/IChallengeManager.dbg.json +0 -4
  476. package/build/contracts/src/challenge/IChallengeManager.sol/IChallengeManager.json +0 -441
  477. package/build/contracts/src/challenge/IChallengeResultReceiver.sol/IChallengeResultReceiver.dbg.json +0 -4
  478. package/build/contracts/src/challenge/IChallengeResultReceiver.sol/IChallengeResultReceiver.json +0 -34
  479. package/build/contracts/src/mocks/MockResultReceiver.sol/MockResultReceiver.dbg.json +0 -4
  480. package/build/contracts/src/mocks/MockResultReceiver.sol/MockResultReceiver.json +0 -188
  481. package/build/contracts/src/mocks/SingleExecutionChallenge.sol/SingleExecutionChallenge.dbg.json +0 -4
  482. package/build/contracts/src/mocks/SingleExecutionChallenge.sol/SingleExecutionChallenge.json +0 -797
  483. package/build/contracts/src/mocks/TimedOutChallengeManager.sol/TimedOutChallengeManager.dbg.json +0 -4
  484. package/build/contracts/src/mocks/TimedOutChallengeManager.sol/TimedOutChallengeManager.json +0 -746
  485. package/build/contracts/src/rollup/IRollupLogic.sol/IRollupUserAbs.dbg.json +0 -4
  486. package/build/contracts/src/rollup/IRollupLogic.sol/IRollupUserAbs.json +0 -1332
  487. package/build/contracts/src/rollup/IRollupLogic.sol/IRollupUserERC20.dbg.json +0 -4
  488. package/build/contracts/src/rollup/IRollupLogic.sol/IRollupUserERC20.json +0 -1466
  489. package/build/contracts/src/rollup/Node.sol/NodeLib.dbg.json +0 -4
  490. package/build/contracts/src/rollup/RollupUserLogic.sol/AbsRollupUserLogic.dbg.json +0 -4
  491. package/build/contracts/src/rollup/RollupUserLogic.sol/AbsRollupUserLogic.json +0 -1614
  492. package/build/contracts/src/rollup/RollupUserLogic.sol/ERC20RollupUserLogic.dbg.json +0 -4
  493. package/build/contracts/src/rollup/RollupUserLogic.sol/ERC20RollupUserLogic.json +0 -1748
  494. package/build/contracts/src/rollup/ValidatorUtils.sol/ValidatorUtils.dbg.json +0 -4
  495. package/build/contracts/src/rollup/ValidatorUtils.sol/ValidatorUtils.json +0 -379
  496. package/src/challenge/ChallengeLib.sol +0 -88
  497. package/src/challenge/ChallengeManager.sol +0 -375
  498. package/src/challenge/IChallengeManager.sol +0 -86
  499. package/src/challenge/IChallengeResultReceiver.sol +0 -13
  500. package/src/mocks/MockResultReceiver.sol +0 -59
  501. package/src/mocks/SingleExecutionChallenge.sol +0 -41
  502. package/src/mocks/TimedOutChallengeManager.sol +0 -13
  503. package/src/rollup/Node.sol +0 -113
@@ -7,13 +7,11 @@ pragma solidity ^0.8.0;
7
7
  import {
8
8
  AlreadyInit,
9
9
  HadZeroInit,
10
- BadPostUpgradeInit,
11
10
  NotOrigin,
12
11
  DataTooLarge,
13
12
  DelayedBackwards,
14
13
  DelayedTooFar,
15
14
  ForceIncludeBlockTooSoon,
16
- ForceIncludeTimeTooSoon,
17
15
  IncorrectMessagePreimage,
18
16
  NotBatchPoster,
19
17
  BadSequencerNumber,
@@ -29,7 +27,13 @@ import {
29
27
  InvalidHeaderFlag,
30
28
  NativeTokenMismatch,
31
29
  BadMaxTimeVariation,
32
- Deprecated
30
+ Deprecated,
31
+ NotDelayBufferable,
32
+ InvalidDelayedAccPreimage,
33
+ DelayProofRequired,
34
+ BadBufferConfig,
35
+ ExtraGasNotUint64,
36
+ KeysetTooLarge
33
37
  } from "../libraries/Error.sol";
34
38
  import "./IBridge.sol";
35
39
  import "./IInboxBase.sol";
@@ -40,12 +44,12 @@ import "../precompiles/ArbGasInfo.sol";
40
44
  import "../precompiles/ArbSys.sol";
41
45
  import "../libraries/IReader4844.sol";
42
46
 
43
- import {L1MessageType_batchPostingReport} from "../libraries/MessageTypes.sol";
44
47
  import "../libraries/DelegateCallAware.sol";
45
48
  import {IGasRefunder} from "../libraries/IGasRefunder.sol";
46
49
  import {GasRefundEnabled} from "../libraries/GasRefundEnabled.sol";
47
50
  import "../libraries/ArbitrumChecker.sol";
48
51
  import {IERC20Bridge} from "./IERC20Bridge.sol";
52
+ import "./DelayBuffer.sol";
49
53
 
50
54
  /**
51
55
  * @title Accepts batches from the sequencer and adds them to the rollup inbox.
@@ -124,11 +128,18 @@ contract SequencerInbox is DelegateCallAware, GasRefundEnabled, ISequencerInbox
124
128
  bool internal immutable hostChainIsArbitrum = ArbitrumChecker.runningOnArbitrum();
125
129
  // True if the chain this SequencerInbox is deployed on uses custom fee token
126
130
  bool public immutable isUsingFeeToken;
131
+ // True if the SequencerInbox is delay bufferable
132
+ bool public immutable isDelayBufferable;
133
+
134
+ using DelayBuffer for BufferData;
135
+
136
+ BufferData public buffer;
127
137
 
128
138
  constructor(
129
139
  uint256 _maxDataSize,
130
140
  IReader4844 reader4844_,
131
- bool _isUsingFeeToken
141
+ bool _isUsingFeeToken,
142
+ bool _isDelayBufferable
132
143
  ) {
133
144
  maxDataSize = _maxDataSize;
134
145
  if (hostChainIsArbitrum) {
@@ -138,47 +149,31 @@ contract SequencerInbox is DelegateCallAware, GasRefundEnabled, ISequencerInbox
138
149
  }
139
150
  reader4844 = reader4844_;
140
151
  isUsingFeeToken = _isUsingFeeToken;
152
+ isDelayBufferable = _isDelayBufferable;
141
153
  }
142
154
 
143
155
  function _chainIdChanged() internal view returns (bool) {
144
156
  return deployTimeChainId != block.chainid;
145
157
  }
146
158
 
147
- function postUpgradeInit() external onlyDelegated onlyProxyOwner {
148
- // Assuming we would not upgrade from a version that have MaxTimeVariation all set to zero
159
+ function postUpgradeInit(
160
+ BufferConfig memory bufferConfig_
161
+ ) external onlyDelegated onlyProxyOwner {
162
+ if (!isDelayBufferable) revert NotDelayBufferable();
163
+
164
+ // Assuming we would not upgrade from a version that does not have the buffer initialized
149
165
  // If that is the case, postUpgradeInit do not need to be called
150
- if (
151
- __LEGACY_MAX_TIME_VARIATION.delayBlocks == 0 &&
152
- __LEGACY_MAX_TIME_VARIATION.futureBlocks == 0 &&
153
- __LEGACY_MAX_TIME_VARIATION.delaySeconds == 0 &&
154
- __LEGACY_MAX_TIME_VARIATION.futureSeconds == 0
155
- ) {
166
+ if (buffer.bufferBlocks != 0) {
156
167
  revert AlreadyInit();
157
168
  }
158
169
 
159
- if (
160
- __LEGACY_MAX_TIME_VARIATION.delayBlocks > type(uint64).max ||
161
- __LEGACY_MAX_TIME_VARIATION.futureBlocks > type(uint64).max ||
162
- __LEGACY_MAX_TIME_VARIATION.delaySeconds > type(uint64).max ||
163
- __LEGACY_MAX_TIME_VARIATION.futureSeconds > type(uint64).max
164
- ) {
165
- revert BadPostUpgradeInit();
166
- }
167
-
168
- delayBlocks = uint64(__LEGACY_MAX_TIME_VARIATION.delayBlocks);
169
- futureBlocks = uint64(__LEGACY_MAX_TIME_VARIATION.futureBlocks);
170
- delaySeconds = uint64(__LEGACY_MAX_TIME_VARIATION.delaySeconds);
171
- futureSeconds = uint64(__LEGACY_MAX_TIME_VARIATION.futureSeconds);
172
-
173
- __LEGACY_MAX_TIME_VARIATION.delayBlocks = 0;
174
- __LEGACY_MAX_TIME_VARIATION.futureBlocks = 0;
175
- __LEGACY_MAX_TIME_VARIATION.delaySeconds = 0;
176
- __LEGACY_MAX_TIME_VARIATION.futureSeconds = 0;
170
+ _setBufferConfig(bufferConfig_);
177
171
  }
178
172
 
179
173
  function initialize(
180
174
  IBridge bridge_,
181
- ISequencerInbox.MaxTimeVariation calldata maxTimeVariation_
175
+ ISequencerInbox.MaxTimeVariation calldata maxTimeVariation_,
176
+ BufferConfig memory bufferConfig_
182
177
  ) external onlyDelegated {
183
178
  if (bridge != IBridge(address(0))) revert AlreadyInit();
184
179
  if (bridge_ == IBridge(address(0))) revert HadZeroInit();
@@ -199,12 +194,17 @@ contract SequencerInbox is DelegateCallAware, GasRefundEnabled, ISequencerInbox
199
194
  rollup = bridge_.rollup();
200
195
 
201
196
  _setMaxTimeVariation(maxTimeVariation_);
197
+
198
+ if (isDelayBufferable) {
199
+ _setBufferConfig(bufferConfig_);
200
+ }
202
201
  }
203
202
 
204
203
  /// @notice Allows the rollup owner to sync the rollup address
205
204
  function updateRollupAddress() external {
206
- if (msg.sender != IOwnable(rollup).owner())
205
+ if (msg.sender != IOwnable(rollup).owner()) {
207
206
  revert NotOwner(msg.sender, IOwnable(rollup).owner());
207
+ }
208
208
  IOwnable newRollup = bridge.rollup();
209
209
  if (rollup == newRollup) revert RollupNotChanged();
210
210
  rollup = newRollup;
@@ -212,12 +212,8 @@ contract SequencerInbox is DelegateCallAware, GasRefundEnabled, ISequencerInbox
212
212
 
213
213
  function getTimeBounds() internal view virtual returns (IBridge.TimeBounds memory) {
214
214
  IBridge.TimeBounds memory bounds;
215
- (
216
- uint64 delayBlocks_,
217
- uint64 futureBlocks_,
218
- uint64 delaySeconds_,
219
- uint64 futureSeconds_
220
- ) = maxTimeVariationInternal();
215
+ (uint64 delayBlocks_, uint64 futureBlocks_, uint64 delaySeconds_, uint64 futureSeconds_) =
216
+ maxTimeVariationInternal();
221
217
  if (block.timestamp > delaySeconds_) {
222
218
  bounds.minTimestamp = uint64(block.timestamp) - delaySeconds_;
223
219
  }
@@ -238,22 +234,9 @@ contract SequencerInbox is DelegateCallAware, GasRefundEnabled, ISequencerInbox
238
234
  futureSeconds = 1;
239
235
  }
240
236
 
241
- function maxTimeVariation()
242
- external
243
- view
244
- returns (
245
- uint256,
246
- uint256,
247
- uint256,
248
- uint256
249
- )
250
- {
251
- (
252
- uint64 delayBlocks_,
253
- uint64 futureBlocks_,
254
- uint64 delaySeconds_,
255
- uint64 futureSeconds_
256
- ) = maxTimeVariationInternal();
237
+ function maxTimeVariation() external view returns (uint256, uint256, uint256, uint256) {
238
+ (uint64 delayBlocks_, uint64 futureBlocks_, uint64 delaySeconds_, uint64 futureSeconds_) =
239
+ maxTimeVariationInternal();
257
240
 
258
241
  return (
259
242
  uint256(delayBlocks_),
@@ -263,16 +246,7 @@ contract SequencerInbox is DelegateCallAware, GasRefundEnabled, ISequencerInbox
263
246
  );
264
247
  }
265
248
 
266
- function maxTimeVariationInternal()
267
- internal
268
- view
269
- returns (
270
- uint64,
271
- uint64,
272
- uint64,
273
- uint64
274
- )
275
- {
249
+ function maxTimeVariationInternal() internal view returns (uint64, uint64, uint64, uint64) {
276
250
  if (_chainIdChanged()) {
277
251
  return (1, 1, 1, 1);
278
252
  } else {
@@ -299,9 +273,16 @@ contract SequencerInbox is DelegateCallAware, GasRefundEnabled, ISequencerInbox
299
273
  baseFeeL1,
300
274
  messageDataHash
301
275
  );
276
+
277
+ uint256 delayBlocks_ = delayBlocks;
278
+
279
+ if (isDelayBufferable) {
280
+ // proactively apply any pending delay buffer updates before the force included message l1BlockAndTime
281
+ buffer.update(l1BlockAndTime[0]);
282
+ delayBlocks_ = delayBufferableBlocks(buffer.bufferBlocks);
283
+ }
302
284
  // Can only force-include after the Sequencer-only window has expired.
303
- if (l1BlockAndTime[0] + delayBlocks >= block.number) revert ForceIncludeBlockTooSoon();
304
- if (l1BlockAndTime[1] + delaySeconds >= block.timestamp) revert ForceIncludeTimeTooSoon();
285
+ if (l1BlockAndTime[0] + delayBlocks_ >= block.number) revert ForceIncludeBlockTooSoon();
305
286
 
306
287
  // Verify that message hash represents the last message sequence of delayed message to be included
307
288
  bytes32 prevDelayedAcc = 0;
@@ -309,28 +290,19 @@ contract SequencerInbox is DelegateCallAware, GasRefundEnabled, ISequencerInbox
309
290
  prevDelayedAcc = bridge.delayedInboxAccs(_totalDelayedMessagesRead - 2);
310
291
  }
311
292
  if (
312
- bridge.delayedInboxAccs(_totalDelayedMessagesRead - 1) !=
313
- Messages.accumulateInboxMessage(prevDelayedAcc, messageHash)
293
+ bridge.delayedInboxAccs(_totalDelayedMessagesRead - 1)
294
+ != Messages.accumulateInboxMessage(prevDelayedAcc, messageHash)
314
295
  ) revert IncorrectMessagePreimage();
315
296
 
316
- (bytes32 dataHash, IBridge.TimeBounds memory timeBounds) = formEmptyDataHash(
317
- _totalDelayedMessagesRead
318
- );
297
+ (bytes32 dataHash, IBridge.TimeBounds memory timeBounds) =
298
+ formEmptyDataHash(_totalDelayedMessagesRead);
319
299
  uint256 __totalDelayedMessagesRead = _totalDelayedMessagesRead;
320
300
  uint256 prevSeqMsgCount = bridge.sequencerReportedSubMessageCount();
321
301
  uint256 newSeqMsgCount = prevSeqMsgCount; // force inclusion should not modify sequencer message count
322
- (
323
- uint256 seqMessageIndex,
324
- bytes32 beforeAcc,
325
- bytes32 delayedAcc,
326
- bytes32 afterAcc
327
- ) = addSequencerL2BatchImpl(
328
- dataHash,
329
- __totalDelayedMessagesRead,
330
- 0,
331
- prevSeqMsgCount,
332
- newSeqMsgCount
333
- );
302
+ (uint256 seqMessageIndex, bytes32 beforeAcc, bytes32 delayedAcc, bytes32 afterAcc) =
303
+ addSequencerL2BatchImpl(
304
+ dataHash, __totalDelayedMessagesRead, 0, prevSeqMsgCount, newSeqMsgCount
305
+ );
334
306
  emit SequencerBatchDelivered(
335
307
  seqMessageIndex,
336
308
  beforeAcc,
@@ -342,7 +314,7 @@ contract SequencerInbox is DelegateCallAware, GasRefundEnabled, ISequencerInbox
342
314
  );
343
315
  }
344
316
 
345
- /// @dev Deprecated, kept for abi generation and will be removed in the future
317
+ /// @inheritdoc ISequencerInbox
346
318
  function addSequencerL2BatchFromOrigin(
347
319
  uint256,
348
320
  bytes calldata,
@@ -352,6 +324,7 @@ contract SequencerInbox is DelegateCallAware, GasRefundEnabled, ISequencerInbox
352
324
  revert Deprecated();
353
325
  }
354
326
 
327
+ /// @inheritdoc ISequencerInbox
355
328
  function addSequencerL2BatchFromOrigin(
356
329
  uint256 sequenceNumber,
357
330
  bytes calldata data,
@@ -363,47 +336,14 @@ contract SequencerInbox is DelegateCallAware, GasRefundEnabled, ISequencerInbox
363
336
  // solhint-disable-next-line avoid-tx-origin
364
337
  if (msg.sender != tx.origin) revert NotOrigin();
365
338
  if (!isBatchPoster[msg.sender]) revert NotBatchPoster();
366
- (bytes32 dataHash, IBridge.TimeBounds memory timeBounds) = formCallDataHash(
367
- data,
368
- afterDelayedMessagesRead
369
- );
370
- // Reformat the stack to prevent "Stack too deep"
371
- uint256 sequenceNumber_ = sequenceNumber;
372
- IBridge.TimeBounds memory timeBounds_ = timeBounds;
373
- bytes32 dataHash_ = dataHash;
374
- uint256 dataLength = data.length;
375
- uint256 afterDelayedMessagesRead_ = afterDelayedMessagesRead;
376
- uint256 prevMessageCount_ = prevMessageCount;
377
- uint256 newMessageCount_ = newMessageCount;
378
- (
379
- uint256 seqMessageIndex,
380
- bytes32 beforeAcc,
381
- bytes32 delayedAcc,
382
- bytes32 afterAcc
383
- ) = addSequencerL2BatchImpl(
384
- dataHash_,
385
- afterDelayedMessagesRead_,
386
- dataLength,
387
- prevMessageCount_,
388
- newMessageCount_
389
- );
390
-
391
- // ~uint256(0) is type(uint256).max, but ever so slightly cheaper
392
- if (seqMessageIndex != sequenceNumber_ && sequenceNumber_ != ~uint256(0)) {
393
- revert BadSequencerNumber(seqMessageIndex, sequenceNumber_);
394
- }
339
+ if (isDelayProofRequired(afterDelayedMessagesRead)) revert DelayProofRequired();
395
340
 
396
- emit SequencerBatchDelivered(
397
- seqMessageIndex,
398
- beforeAcc,
399
- afterAcc,
400
- delayedAcc,
401
- totalDelayedMessagesRead,
402
- timeBounds_,
403
- IBridge.BatchDataLocation.TxInput
341
+ addSequencerL2BatchFromCalldataImpl(
342
+ sequenceNumber, data, afterDelayedMessagesRead, prevMessageCount, newMessageCount, true
404
343
  );
405
344
  }
406
345
 
346
+ /// @inheritdoc ISequencerInbox
407
347
  function addSequencerL2BatchFromBlobs(
408
348
  uint256 sequenceNumber,
409
349
  uint256 afterDelayedMessagesRead,
@@ -412,37 +352,76 @@ contract SequencerInbox is DelegateCallAware, GasRefundEnabled, ISequencerInbox
412
352
  uint256 newMessageCount
413
353
  ) external refundsGas(gasRefunder, reader4844) {
414
354
  if (!isBatchPoster[msg.sender]) revert NotBatchPoster();
415
- (
416
- bytes32 dataHash,
417
- IBridge.TimeBounds memory timeBounds,
418
- uint256 blobGas
419
- ) = formBlobDataHash(afterDelayedMessagesRead);
355
+ if (isDelayProofRequired(afterDelayedMessagesRead)) revert DelayProofRequired();
356
+
357
+ addSequencerL2BatchFromBlobsImpl(
358
+ sequenceNumber, afterDelayedMessagesRead, prevMessageCount, newMessageCount
359
+ );
360
+ }
361
+
362
+ /// @inheritdoc ISequencerInbox
363
+ function addSequencerL2BatchFromBlobsDelayProof(
364
+ uint256 sequenceNumber,
365
+ uint256 afterDelayedMessagesRead,
366
+ IGasRefunder gasRefunder,
367
+ uint256 prevMessageCount,
368
+ uint256 newMessageCount,
369
+ DelayProof calldata delayProof
370
+ ) external refundsGas(gasRefunder, reader4844) {
371
+ if (!isBatchPoster[msg.sender]) revert NotBatchPoster();
372
+ if (!isDelayBufferable) revert NotDelayBufferable();
373
+
374
+ delayProofImpl(afterDelayedMessagesRead, delayProof);
375
+ addSequencerL2BatchFromBlobsImpl(
376
+ sequenceNumber, afterDelayedMessagesRead, prevMessageCount, newMessageCount
377
+ );
378
+ }
379
+
380
+ /// @inheritdoc ISequencerInbox
381
+ function addSequencerL2BatchFromOriginDelayProof(
382
+ uint256 sequenceNumber,
383
+ bytes calldata data,
384
+ uint256 afterDelayedMessagesRead,
385
+ IGasRefunder gasRefunder,
386
+ uint256 prevMessageCount,
387
+ uint256 newMessageCount,
388
+ DelayProof calldata delayProof
389
+ ) external refundsGas(gasRefunder, IReader4844(address(0))) {
390
+ // solhint-disable-next-line avoid-tx-origin
391
+ if (msg.sender != tx.origin) revert NotOrigin();
392
+ if (!isBatchPoster[msg.sender]) revert NotBatchPoster();
393
+ if (!isDelayBufferable) revert NotDelayBufferable();
394
+
395
+ delayProofImpl(afterDelayedMessagesRead, delayProof);
396
+ addSequencerL2BatchFromCalldataImpl(
397
+ sequenceNumber, data, afterDelayedMessagesRead, prevMessageCount, newMessageCount, true
398
+ );
399
+ }
400
+
401
+ function addSequencerL2BatchFromBlobsImpl(
402
+ uint256 sequenceNumber,
403
+ uint256 afterDelayedMessagesRead,
404
+ uint256 prevMessageCount,
405
+ uint256 newMessageCount
406
+ ) internal {
407
+ (bytes32 dataHash, IBridge.TimeBounds memory timeBounds, uint256 blobGas) =
408
+ formBlobDataHash(afterDelayedMessagesRead);
420
409
 
421
410
  // we use addSequencerL2BatchImpl for submitting the message
422
411
  // normally this would also submit a batch spending report but that is skipped if we pass
423
412
  // an empty call data size, then we submit a separate batch spending report later
424
- (
425
- uint256 seqMessageIndex,
426
- bytes32 beforeAcc,
427
- bytes32 delayedAcc,
428
- bytes32 afterAcc
429
- ) = addSequencerL2BatchImpl(
430
- dataHash,
431
- afterDelayedMessagesRead,
432
- 0,
433
- prevMessageCount,
434
- newMessageCount
435
- );
436
-
437
- uint256 _sequenceNumber = sequenceNumber; // stack workaround
413
+ (uint256 seqMessageIndex, bytes32 beforeAcc, bytes32 delayedAcc, bytes32 afterAcc) =
414
+ addSequencerL2BatchImpl(
415
+ dataHash, afterDelayedMessagesRead, 0, prevMessageCount, newMessageCount
416
+ );
438
417
 
439
418
  // ~uint256(0) is type(uint256).max, but ever so slightly cheaper
440
- if (seqMessageIndex != _sequenceNumber && _sequenceNumber != ~uint256(0)) {
441
- revert BadSequencerNumber(seqMessageIndex, _sequenceNumber);
419
+ if (seqMessageIndex != sequenceNumber && sequenceNumber != ~uint256(0)) {
420
+ revert BadSequencerNumber(seqMessageIndex, sequenceNumber);
442
421
  }
443
422
 
444
423
  emit SequencerBatchDelivered(
445
- _sequenceNumber,
424
+ sequenceNumber,
446
425
  beforeAcc,
447
426
  afterAcc,
448
427
  delayedAcc,
@@ -465,6 +444,48 @@ contract SequencerInbox is DelegateCallAware, GasRefundEnabled, ISequencerInbox
465
444
  }
466
445
  }
467
446
 
447
+ function addSequencerL2BatchFromCalldataImpl(
448
+ uint256 sequenceNumber,
449
+ bytes calldata data,
450
+ uint256 afterDelayedMessagesRead,
451
+ uint256 prevMessageCount,
452
+ uint256 newMessageCount,
453
+ bool isFromOrigin
454
+ ) internal {
455
+ (bytes32 dataHash, IBridge.TimeBounds memory timeBounds) =
456
+ formCallDataHash(data, afterDelayedMessagesRead);
457
+ (uint256 seqMessageIndex, bytes32 beforeAcc, bytes32 delayedAcc, bytes32 afterAcc) =
458
+ addSequencerL2BatchImpl(
459
+ dataHash,
460
+ afterDelayedMessagesRead,
461
+ isFromOrigin ? data.length : 0,
462
+ prevMessageCount,
463
+ newMessageCount
464
+ );
465
+
466
+ // ~uint256(0) is type(uint256).max, but ever so slightly cheaper
467
+ if (seqMessageIndex != sequenceNumber && sequenceNumber != ~uint256(0)) {
468
+ revert BadSequencerNumber(seqMessageIndex, sequenceNumber);
469
+ }
470
+
471
+ emit SequencerBatchDelivered(
472
+ seqMessageIndex,
473
+ beforeAcc,
474
+ afterAcc,
475
+ delayedAcc,
476
+ totalDelayedMessagesRead,
477
+ timeBounds,
478
+ isFromOrigin
479
+ ? IBridge.BatchDataLocation.TxInput
480
+ : IBridge.BatchDataLocation.SeparateBatchEvent
481
+ );
482
+
483
+ if (!isFromOrigin) {
484
+ emit SequencerBatchData(seqMessageIndex, data);
485
+ }
486
+ }
487
+
488
+ /// @inheritdoc ISequencerInbox
468
489
  function addSequencerL2Batch(
469
490
  uint256 sequenceNumber,
470
491
  bytes calldata data,
@@ -474,55 +495,66 @@ contract SequencerInbox is DelegateCallAware, GasRefundEnabled, ISequencerInbox
474
495
  uint256 newMessageCount
475
496
  ) external override refundsGas(gasRefunder, IReader4844(address(0))) {
476
497
  if (!isBatchPoster[msg.sender] && msg.sender != address(rollup)) revert NotBatchPoster();
477
- (bytes32 dataHash, IBridge.TimeBounds memory timeBounds) = formCallDataHash(
478
- data,
479
- afterDelayedMessagesRead
498
+ if (isDelayProofRequired(afterDelayedMessagesRead)) revert DelayProofRequired();
499
+
500
+ addSequencerL2BatchFromCalldataImpl(
501
+ sequenceNumber, data, afterDelayedMessagesRead, prevMessageCount, newMessageCount, false
480
502
  );
481
- uint256 seqMessageIndex;
482
- {
483
- // Reformat the stack to prevent "Stack too deep"
484
- uint256 sequenceNumber_ = sequenceNumber;
485
- IBridge.TimeBounds memory timeBounds_ = timeBounds;
486
- bytes32 dataHash_ = dataHash;
487
- uint256 afterDelayedMessagesRead_ = afterDelayedMessagesRead;
488
- uint256 prevMessageCount_ = prevMessageCount;
489
- uint256 newMessageCount_ = newMessageCount;
490
- // we set the calldata length posted to 0 here since the caller isn't the origin
491
- // of the tx, so they might have not paid tx input cost for the calldata
492
- bytes32 beforeAcc;
493
- bytes32 delayedAcc;
494
- bytes32 afterAcc;
495
- (seqMessageIndex, beforeAcc, delayedAcc, afterAcc) = addSequencerL2BatchImpl(
496
- dataHash_,
497
- afterDelayedMessagesRead_,
498
- 0,
499
- prevMessageCount_,
500
- newMessageCount_
501
- );
502
-
503
- // ~uint256(0) is type(uint256).max, but ever so slightly cheaper
504
- if (seqMessageIndex != sequenceNumber_ && sequenceNumber_ != ~uint256(0)) {
505
- revert BadSequencerNumber(seqMessageIndex, sequenceNumber_);
506
- }
503
+ }
507
504
 
508
- emit SequencerBatchDelivered(
509
- seqMessageIndex,
510
- beforeAcc,
511
- afterAcc,
512
- delayedAcc,
513
- totalDelayedMessagesRead,
514
- timeBounds_,
515
- IBridge.BatchDataLocation.SeparateBatchEvent
516
- );
505
+ /// @inheritdoc ISequencerInbox
506
+ function addSequencerL2BatchDelayProof(
507
+ uint256 sequenceNumber,
508
+ bytes calldata data,
509
+ uint256 afterDelayedMessagesRead,
510
+ IGasRefunder gasRefunder,
511
+ uint256 prevMessageCount,
512
+ uint256 newMessageCount,
513
+ DelayProof calldata delayProof
514
+ ) external refundsGas(gasRefunder, IReader4844(address(0))) {
515
+ if (!isBatchPoster[msg.sender] && msg.sender != address(rollup)) revert NotBatchPoster();
516
+ if (!isDelayBufferable) revert NotDelayBufferable();
517
+
518
+ delayProofImpl(afterDelayedMessagesRead, delayProof);
519
+ addSequencerL2BatchFromCalldataImpl(
520
+ sequenceNumber, data, afterDelayedMessagesRead, prevMessageCount, newMessageCount, false
521
+ );
522
+ }
523
+
524
+ function delayProofImpl(
525
+ uint256 afterDelayedMessagesRead,
526
+ DelayProof memory delayProof
527
+ ) internal {
528
+ // buffer update depends on new delayed messages. if none are read, no buffer update is proccessed
529
+ if (afterDelayedMessagesRead > totalDelayedMessagesRead) {
530
+ if (buffer.isUpdatable()) {
531
+ // delayedAcc of the 1st new delayed message
532
+ bytes32 delayedAcc = bridge.delayedInboxAccs(totalDelayedMessagesRead);
533
+ // validate delayProof against the delayed accumulator
534
+ if (
535
+ !Messages.isValidDelayedAccPreimage(
536
+ delayedAcc, delayProof.beforeDelayedAcc, delayProof.delayedMessage
537
+ )
538
+ ) {
539
+ revert InvalidDelayedAccPreimage();
540
+ }
541
+ buffer.update(delayProof.delayedMessage.blockNumber);
542
+ }
517
543
  }
518
- emit SequencerBatchData(seqMessageIndex, data);
519
544
  }
520
545
 
521
- function packHeader(uint256 afterDelayedMessagesRead)
522
- internal
523
- view
524
- returns (bytes memory, IBridge.TimeBounds memory)
525
- {
546
+ function isDelayProofRequired(
547
+ uint256 afterDelayedMessagesRead
548
+ ) internal view returns (bool) {
549
+ // if no new delayed messages are read, no buffer updates can be applied, so no proof required
550
+ // if the buffer is synced, the buffer cannot be depleted, so no proof is required
551
+ return isDelayBufferable && afterDelayedMessagesRead > totalDelayedMessagesRead
552
+ && !buffer.isSynced();
553
+ }
554
+
555
+ function packHeader(
556
+ uint256 afterDelayedMessagesRead
557
+ ) internal view returns (bytes memory, IBridge.TimeBounds memory) {
526
558
  IBridge.TimeBounds memory timeBounds = getTimeBounds();
527
559
  bytes memory header = abi.encodePacked(
528
560
  timeBounds.minTimestamp,
@@ -540,14 +572,11 @@ contract SequencerInbox is DelegateCallAware, GasRefundEnabled, ISequencerInbox
540
572
  /// @param afterDelayedMessagesRead The delayed messages count read up to
541
573
  /// @return The data hash
542
574
  /// @return The timebounds within which the message should be processed
543
- function formEmptyDataHash(uint256 afterDelayedMessagesRead)
544
- internal
545
- view
546
- returns (bytes32, IBridge.TimeBounds memory)
547
- {
548
- (bytes memory header, IBridge.TimeBounds memory timeBounds) = packHeader(
549
- afterDelayedMessagesRead
550
- );
575
+ function formEmptyDataHash(
576
+ uint256 afterDelayedMessagesRead
577
+ ) internal view returns (bytes32, IBridge.TimeBounds memory) {
578
+ (bytes memory header, IBridge.TimeBounds memory timeBounds) =
579
+ packHeader(afterDelayedMessagesRead);
551
580
  return (keccak256(header), timeBounds);
552
581
  }
553
582
 
@@ -556,12 +585,12 @@ contract SequencerInbox is DelegateCallAware, GasRefundEnabled, ISequencerInbox
556
585
  /// therefore we restrict which flags can be provided as a header in this field
557
586
  /// This also safe guards unused flags for future use, as we know they would have been disallowed up until this point
558
587
  /// @param headerByte The first byte in the calldata
559
- function isValidCallDataFlag(bytes1 headerByte) internal pure returns (bool) {
560
- return
561
- headerByte == BROTLI_MESSAGE_HEADER_FLAG ||
562
- headerByte == DAS_MESSAGE_HEADER_FLAG ||
563
- (headerByte == (DAS_MESSAGE_HEADER_FLAG | TREE_DAS_MESSAGE_HEADER_FLAG)) ||
564
- headerByte == ZERO_HEAVY_MESSAGE_HEADER_FLAG;
588
+ function isValidCallDataFlag(
589
+ bytes1 headerByte
590
+ ) internal pure returns (bool) {
591
+ return headerByte == BROTLI_MESSAGE_HEADER_FLAG || headerByte == DAS_MESSAGE_HEADER_FLAG
592
+ || (headerByte == (DAS_MESSAGE_HEADER_FLAG | TREE_DAS_MESSAGE_HEADER_FLAG))
593
+ || headerByte == ZERO_HEAVY_MESSAGE_HEADER_FLAG;
565
594
  }
566
595
 
567
596
  /// @dev Form a hash of the data taken from the calldata
@@ -569,17 +598,15 @@ contract SequencerInbox is DelegateCallAware, GasRefundEnabled, ISequencerInbox
569
598
  /// @param afterDelayedMessagesRead The delayed messages count read up to
570
599
  /// @return The data hash
571
600
  /// @return The timebounds within which the message should be processed
572
- function formCallDataHash(bytes calldata data, uint256 afterDelayedMessagesRead)
573
- internal
574
- view
575
- returns (bytes32, IBridge.TimeBounds memory)
576
- {
601
+ function formCallDataHash(
602
+ bytes calldata data,
603
+ uint256 afterDelayedMessagesRead
604
+ ) internal view returns (bytes32, IBridge.TimeBounds memory) {
577
605
  uint256 fullDataLen = HEADER_LENGTH + data.length;
578
606
  if (fullDataLen > maxDataSize) revert DataTooLarge(fullDataLen, maxDataSize);
579
607
 
580
- (bytes memory header, IBridge.TimeBounds memory timeBounds) = packHeader(
581
- afterDelayedMessagesRead
582
- );
608
+ (bytes memory header, IBridge.TimeBounds memory timeBounds) =
609
+ packHeader(afterDelayedMessagesRead);
583
610
 
584
611
  // the batch poster is allowed to submit an empty batch, they can use this to progress the
585
612
  // delayed inbox without providing extra batch data
@@ -606,21 +633,14 @@ contract SequencerInbox is DelegateCallAware, GasRefundEnabled, ISequencerInbox
606
633
  /// @return The data hash
607
634
  /// @return The timebounds within which the message should be processed
608
635
  /// @return The normalized amount of gas used for blob posting
609
- function formBlobDataHash(uint256 afterDelayedMessagesRead)
610
- internal
611
- view
612
- returns (
613
- bytes32,
614
- IBridge.TimeBounds memory,
615
- uint256
616
- )
617
- {
636
+ function formBlobDataHash(
637
+ uint256 afterDelayedMessagesRead
638
+ ) internal view virtual returns (bytes32, IBridge.TimeBounds memory, uint256) {
618
639
  bytes32[] memory dataHashes = reader4844.getDataHashes();
619
640
  if (dataHashes.length == 0) revert MissingDataHashes();
620
641
 
621
- (bytes memory header, IBridge.TimeBounds memory timeBounds) = packHeader(
622
- afterDelayedMessagesRead
623
- );
642
+ (bytes memory header, IBridge.TimeBounds memory timeBounds) =
643
+ packHeader(afterDelayedMessagesRead);
624
644
 
625
645
  uint256 blobCost = reader4844.getBlobBaseFee() * GAS_PER_BLOB * dataHashes.length;
626
646
  return (
@@ -653,20 +673,12 @@ contract SequencerInbox is DelegateCallAware, GasRefundEnabled, ISequencerInbox
653
673
  uint256 l1Fees = ArbGasInfo(address(0x6c)).getCurrentTxL1GasFees();
654
674
  extraGas += l1Fees / block.basefee;
655
675
  }
656
- require(extraGas <= type(uint64).max, "EXTRA_GAS_NOT_UINT64");
676
+ if (extraGas > type(uint64).max) revert ExtraGasNotUint64();
657
677
  bytes memory spendingReportMsg = abi.encodePacked(
658
- block.timestamp,
659
- batchPoster,
660
- dataHash,
661
- seqMessageIndex,
662
- gasPrice,
663
- uint64(extraGas)
678
+ block.timestamp, batchPoster, dataHash, seqMessageIndex, gasPrice, uint64(extraGas)
664
679
  );
665
680
 
666
- uint256 msgNum = bridge.submitBatchSpendingReport(
667
- batchPoster,
668
- keccak256(spendingReportMsg)
669
- );
681
+ uint256 msgNum = bridge.submitBatchSpendingReport(batchPoster, keccak256(spendingReportMsg));
670
682
  // this is the same event used by Inbox.sol after including a message to the delayed message accumulator
671
683
  emit InboxMessageDelivered(msgNum, spendingReportMsg);
672
684
  }
@@ -679,21 +691,13 @@ contract SequencerInbox is DelegateCallAware, GasRefundEnabled, ISequencerInbox
679
691
  uint256 newMessageCount
680
692
  )
681
693
  internal
682
- returns (
683
- uint256 seqMessageIndex,
684
- bytes32 beforeAcc,
685
- bytes32 delayedAcc,
686
- bytes32 acc
687
- )
694
+ returns (uint256 seqMessageIndex, bytes32 beforeAcc, bytes32 delayedAcc, bytes32 acc)
688
695
  {
689
696
  if (afterDelayedMessagesRead < totalDelayedMessagesRead) revert DelayedBackwards();
690
697
  if (afterDelayedMessagesRead > bridge.delayedMessageCount()) revert DelayedTooFar();
691
698
 
692
699
  (seqMessageIndex, beforeAcc, delayedAcc, acc) = bridge.enqueueSequencerMessage(
693
- dataHash,
694
- afterDelayedMessagesRead,
695
- prevMessageCount,
696
- newMessageCount
700
+ dataHash, afterDelayedMessagesRead, prevMessageCount, newMessageCount
697
701
  );
698
702
 
699
703
  totalDelayedMessagesRead = afterDelayedMessagesRead;
@@ -704,7 +708,9 @@ contract SequencerInbox is DelegateCallAware, GasRefundEnabled, ISequencerInbox
704
708
  }
705
709
  }
706
710
 
707
- function inboxAccs(uint256 index) external view returns (bytes32) {
711
+ function inboxAccs(
712
+ uint256 index
713
+ ) external view returns (bytes32) {
708
714
  return bridge.sequencerInboxAccs(index);
709
715
  }
710
716
 
@@ -712,14 +718,55 @@ contract SequencerInbox is DelegateCallAware, GasRefundEnabled, ISequencerInbox
712
718
  return bridge.sequencerMessageCount();
713
719
  }
714
720
 
715
- function _setMaxTimeVariation(ISequencerInbox.MaxTimeVariation memory maxTimeVariation_)
716
- internal
717
- {
721
+ /// @inheritdoc ISequencerInbox
722
+ function forceInclusionDeadline(
723
+ uint64 blockNumber
724
+ ) external view returns (uint64) {
725
+ uint64 _delayBlocks = delayBlocks;
726
+ if (isDelayBufferable) {
727
+ uint64 _buffer = buffer.calcPendingBuffer(blockNumber);
728
+ _delayBlocks = delayBufferableBlocks(_buffer);
729
+ }
730
+ return blockNumber + _delayBlocks;
731
+ }
732
+
733
+ /// @notice Calculates the buffer dependent delay blocks
734
+ function delayBufferableBlocks(
735
+ uint64 _buffer
736
+ ) internal view returns (uint64) {
737
+ return _buffer < delayBlocks ? _buffer : delayBlocks;
738
+ }
739
+
740
+ function _setBufferConfig(
741
+ BufferConfig memory bufferConfig_
742
+ ) internal {
743
+ if (!isDelayBufferable) revert NotDelayBufferable();
744
+ if (!DelayBuffer.isValidBufferConfig(bufferConfig_)) revert BadBufferConfig();
745
+
746
+ if (buffer.bufferBlocks == 0 || buffer.bufferBlocks > bufferConfig_.max) {
747
+ buffer.bufferBlocks = bufferConfig_.max;
748
+ }
749
+ if (buffer.bufferBlocks < bufferConfig_.threshold) {
750
+ buffer.bufferBlocks = bufferConfig_.threshold;
751
+ }
752
+ buffer.max = bufferConfig_.max;
753
+ buffer.threshold = bufferConfig_.threshold;
754
+ buffer.replenishRateInBasis = bufferConfig_.replenishRateInBasis;
755
+
756
+ // if all delayed messages are read, the buffer is considered synced
757
+ if (bridge.delayedMessageCount() == totalDelayedMessagesRead) {
758
+ buffer.update(uint64(block.number));
759
+ }
760
+ }
761
+
762
+ function _setMaxTimeVariation(
763
+ ISequencerInbox.MaxTimeVariation memory maxTimeVariation_
764
+ ) internal {
718
765
  if (
719
- maxTimeVariation_.delayBlocks > type(uint64).max ||
720
- maxTimeVariation_.futureBlocks > type(uint64).max ||
721
- maxTimeVariation_.delaySeconds > type(uint64).max ||
722
- maxTimeVariation_.futureSeconds > type(uint64).max
766
+ maxTimeVariation_.delayBlocks > type(uint64).max
767
+ || maxTimeVariation_.futureBlocks > type(uint64).max
768
+ || maxTimeVariation_.delaySeconds > type(uint64).max
769
+ || maxTimeVariation_.futureSeconds > type(uint64).max
723
770
  ) {
724
771
  revert BadMaxTimeVariation();
725
772
  }
@@ -730,44 +777,47 @@ contract SequencerInbox is DelegateCallAware, GasRefundEnabled, ISequencerInbox
730
777
  }
731
778
 
732
779
  /// @inheritdoc ISequencerInbox
733
- function setMaxTimeVariation(ISequencerInbox.MaxTimeVariation memory maxTimeVariation_)
734
- external
735
- onlyRollupOwner
736
- {
780
+ function setMaxTimeVariation(
781
+ ISequencerInbox.MaxTimeVariation memory maxTimeVariation_
782
+ ) external onlyRollupOwner {
737
783
  _setMaxTimeVariation(maxTimeVariation_);
784
+ emit MaxTimeVariationSet(maxTimeVariation_);
738
785
  emit OwnerFunctionCalled(0);
739
786
  }
740
787
 
741
788
  /// @inheritdoc ISequencerInbox
742
- function setIsBatchPoster(address addr, bool isBatchPoster_)
743
- external
744
- onlyRollupOwnerOrBatchPosterManager
745
- {
789
+ function setIsBatchPoster(
790
+ address addr,
791
+ bool isBatchPoster_
792
+ ) external onlyRollupOwnerOrBatchPosterManager {
746
793
  isBatchPoster[addr] = isBatchPoster_;
794
+ emit BatchPosterSet(addr, isBatchPoster_);
747
795
  emit OwnerFunctionCalled(1);
748
796
  }
749
797
 
750
798
  /// @inheritdoc ISequencerInbox
751
- function setValidKeyset(bytes calldata keysetBytes) external onlyRollupOwner {
799
+ function setValidKeyset(
800
+ bytes calldata keysetBytes
801
+ ) external onlyRollupOwner {
752
802
  uint256 ksWord = uint256(keccak256(bytes.concat(hex"fe", keccak256(keysetBytes))));
753
803
  bytes32 ksHash = bytes32(ksWord ^ (1 << 255));
754
- require(keysetBytes.length < 64 * 1024, "keyset is too large");
804
+ if (keysetBytes.length >= 64 * 1024) revert KeysetTooLarge();
755
805
 
756
806
  if (dasKeySetInfo[ksHash].isValidKeyset) revert AlreadyValidDASKeyset(ksHash);
757
807
  uint256 creationBlock = block.number;
758
808
  if (hostChainIsArbitrum) {
759
809
  creationBlock = ArbSys(address(100)).arbBlockNumber();
760
810
  }
761
- dasKeySetInfo[ksHash] = DasKeySetInfo({
762
- isValidKeyset: true,
763
- creationBlock: uint64(creationBlock)
764
- });
811
+ dasKeySetInfo[ksHash] =
812
+ DasKeySetInfo({isValidKeyset: true, creationBlock: uint64(creationBlock)});
765
813
  emit SetValidKeyset(ksHash, keysetBytes);
766
814
  emit OwnerFunctionCalled(2);
767
815
  }
768
816
 
769
817
  /// @inheritdoc ISequencerInbox
770
- function invalidateKeysetHash(bytes32 ksHash) external onlyRollupOwner {
818
+ function invalidateKeysetHash(
819
+ bytes32 ksHash
820
+ ) external onlyRollupOwner {
771
821
  if (!dasKeySetInfo[ksHash].isValidKeyset) revert NoSuchKeyset(ksHash);
772
822
  // we don't delete the block creation value since its used to fetch the SetValidKeyset
773
823
  // event efficiently. The event provides the hash preimage of the key.
@@ -778,26 +828,41 @@ contract SequencerInbox is DelegateCallAware, GasRefundEnabled, ISequencerInbox
778
828
  }
779
829
 
780
830
  /// @inheritdoc ISequencerInbox
781
- function setIsSequencer(address addr, bool isSequencer_)
782
- external
783
- onlyRollupOwnerOrBatchPosterManager
784
- {
831
+ function setIsSequencer(
832
+ address addr,
833
+ bool isSequencer_
834
+ ) external onlyRollupOwnerOrBatchPosterManager {
785
835
  isSequencer[addr] = isSequencer_;
786
- emit OwnerFunctionCalled(4); // Owner in this context can also be batch poster manager
836
+ emit SequencerSet(addr, isSequencer_);
837
+ emit OwnerFunctionCalled(4);
787
838
  }
788
839
 
789
840
  /// @inheritdoc ISequencerInbox
790
- function setBatchPosterManager(address newBatchPosterManager) external onlyRollupOwner {
841
+ function setBatchPosterManager(
842
+ address newBatchPosterManager
843
+ ) external onlyRollupOwner {
791
844
  batchPosterManager = newBatchPosterManager;
845
+ emit BatchPosterManagerSet(newBatchPosterManager);
792
846
  emit OwnerFunctionCalled(5);
793
847
  }
794
848
 
795
- function isValidKeysetHash(bytes32 ksHash) external view returns (bool) {
849
+ function setBufferConfig(
850
+ BufferConfig memory bufferConfig_
851
+ ) external onlyRollupOwner {
852
+ _setBufferConfig(bufferConfig_);
853
+ emit BufferConfigSet(bufferConfig_);
854
+ }
855
+
856
+ function isValidKeysetHash(
857
+ bytes32 ksHash
858
+ ) external view returns (bool) {
796
859
  return dasKeySetInfo[ksHash].isValidKeyset;
797
860
  }
798
861
 
799
862
  /// @inheritdoc ISequencerInbox
800
- function getKeysetCreationBlock(bytes32 ksHash) external view returns (uint256) {
863
+ function getKeysetCreationBlock(
864
+ bytes32 ksHash
865
+ ) external view returns (uint256) {
801
866
  DasKeySetInfo memory ksInfo = dasKeySetInfo[ksHash];
802
867
  if (ksInfo.creationBlock == 0) revert NoSuchKeyset(ksHash);
803
868
  return uint256(ksInfo.creationBlock);