@arbitrum/nitro-contracts 2.1.1-beta.0 → 3.0.0-alpha.1

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