@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
@@ -0,0 +1,233 @@
1
+ // Copyright 2023, Offchain Labs, Inc.
2
+ // For license information, see https://github.com/offchainlabs/bold/blob/main/LICENSE
3
+ // SPDX-License-Identifier: BUSL-1.1
4
+ //
5
+ pragma solidity ^0.8.0;
6
+
7
+ import "./IAssertionChain.sol";
8
+ import "./libraries/Structs.sol";
9
+ import "@openzeppelin/contracts/token/ERC20/IERC20.sol";
10
+
11
+ /// @title EdgeChallengeManager interface
12
+ interface IEdgeChallengeManager {
13
+ /// @notice Initialize the EdgeChallengeManager. EdgeChallengeManagers are upgradeable
14
+ /// so use the initializer paradigm
15
+ /// @param _assertionChain The assertion chain contract
16
+ /// @param _challengePeriodBlocks The amount of cumulative time an edge must spend unrivaled before it can be confirmed
17
+ /// This should be the censorship period + the cumulative amount of time needed to do any
18
+ /// offchain calculation. We currently estimate around 10 mins for each layer zero edge and 1
19
+ /// one minute for each other edge.
20
+ /// @param _oneStepProofEntry The one step proof logic
21
+ /// @param layerZeroBlockEdgeHeight The end height of layer zero edges of type Block
22
+ /// @param layerZeroBigStepEdgeHeight The end height of layer zero edges of type BigStep
23
+ /// @param layerZeroSmallStepEdgeHeight The end height of layer zero edges of type SmallStep
24
+ /// @param _stakeToken The token that stake will be provided in when creating zero layer block edges
25
+ /// @param _excessStakeReceiver The address that excess stake will be sent to when 2nd+ block edge is created
26
+ /// @param _numBigStepLevel The number of bigstep levels
27
+ /// @param _stakeAmounts The stake amount for each level. (first element is for block level)
28
+ function initialize(
29
+ IAssertionChain _assertionChain,
30
+ uint64 _challengePeriodBlocks,
31
+ IOneStepProofEntry _oneStepProofEntry,
32
+ uint256 layerZeroBlockEdgeHeight,
33
+ uint256 layerZeroBigStepEdgeHeight,
34
+ uint256 layerZeroSmallStepEdgeHeight,
35
+ IERC20 _stakeToken,
36
+ address _excessStakeReceiver,
37
+ uint8 _numBigStepLevel,
38
+ uint256[] calldata _stakeAmounts
39
+ ) external;
40
+
41
+ function challengePeriodBlocks() external view returns (uint64);
42
+
43
+ /// @notice The one step proof resolver used to decide between rival SmallStep edges of length 1
44
+ function oneStepProofEntry() external view returns (IOneStepProofEntry);
45
+
46
+ /// @notice Performs necessary checks and creates a new layer zero edge
47
+ /// @param args Edge creation args
48
+ function createLayerZeroEdge(
49
+ CreateEdgeArgs calldata args
50
+ ) external returns (bytes32);
51
+
52
+ /// @notice Bisect an edge. This creates two child edges:
53
+ /// lowerChild: has the same start root and height as this edge, but a different end root and height
54
+ /// upperChild: has the same end root and height as this edge, but a different start root and height
55
+ /// The lower child end root and height are equal to the upper child start root and height. This height
56
+ /// is the mandatoryBisectionHeight.
57
+ /// The lower child may already exist, however it's not possible for the upper child to exist as that would
58
+ /// mean that the edge has already been bisected
59
+ /// @param edgeId Edge to bisect
60
+ /// @param bisectionHistoryRoot The new history root to be used in the lower and upper children
61
+ /// @param prefixProof A proof to show that the bisectionHistoryRoot commits to a prefix of the current endHistoryRoot
62
+ /// @return lowerChildId The id of the newly created lower child edge
63
+ /// @return upperChildId The id of the newly created upper child edge
64
+ function bisectEdge(
65
+ bytes32 edgeId,
66
+ bytes32 bisectionHistoryRoot,
67
+ bytes calldata prefixProof
68
+ ) external returns (bytes32, bytes32);
69
+
70
+ /// @notice An edge can be confirmed if the total amount of time it and a single chain of its direct ancestors
71
+ /// has spent unrivaled is greater than the challenge period.
72
+ /// @dev Edges inherit time from their parents, so the sum of unrivaled timers is compared against the threshold.
73
+ /// Given that an edge cannot become unrivaled after becoming rivaled, once the threshold is passed
74
+ /// it will always remain passed. The direct ancestors of an edge are linked by parent-child links for edges
75
+ /// of the same level, and claimId-edgeId links for zero layer edges that claim an edge in the level below.
76
+ /// This method also includes the amount of time the assertion being claimed spent without a sibling
77
+ /// @param edgeId The id of the edge to confirm
78
+ function confirmEdgeByTime(
79
+ bytes32 edgeId,
80
+ AssertionStateData calldata claimStateData
81
+ ) external;
82
+
83
+ /// @notice Update multiple edges' timer cache by their children. Equivalent to calling updateTimerCacheByChildren for each edge.
84
+ /// May update timer cache above maximum if the last edge's timer cache was below maximumCachedTime.
85
+ /// Revert when the last edge's timer cache is already equal to or above maximumCachedTime.
86
+ /// @param edgeIds The ids of the edges to update
87
+ /// @param maximumCachedTime The maximum amount of cached time allowed on the last edge (β∗)
88
+ function multiUpdateTimeCacheByChildren(
89
+ bytes32[] calldata edgeIds,
90
+ uint256 maximumCachedTime
91
+ ) external;
92
+
93
+ /// @notice Update an edge's timer cache by its children.
94
+ /// Sets the edge's timer cache to its timeUnrivaled + (minimum timer cache of its children).
95
+ /// May update timer cache above maximum if the last edge's timer cache was below maximumCachedTime.
96
+ /// Revert when the edge's timer cache is already equal to or above maximumCachedTime.
97
+ /// @param edgeId The id of the edge to update
98
+ /// @param maximumCachedTime The maximum amount of cached time allowed on the edge (β∗)
99
+ function updateTimerCacheByChildren(bytes32 edgeId, uint256 maximumCachedTime) external;
100
+
101
+ /// @notice Given a one step fork edge and an edge with matching claim id,
102
+ /// set the one step fork edge's timer cache to its timeUnrivaled + claiming edge's timer cache.
103
+ /// May update timer cache above maximum if the last edge's timer cache was below maximumCachedTime.
104
+ /// Revert when the edge's timer cache is already equal to or above maximumCachedTime.
105
+ /// @param edgeId The id of the edge to update
106
+ /// @param claimingEdgeId The id of the edge which has a claimId equal to edgeId
107
+ /// @param maximumCachedTime The maximum amount of cached time allowed on the edge (β∗)
108
+ function updateTimerCacheByClaim(
109
+ bytes32 edgeId,
110
+ bytes32 claimingEdgeId,
111
+ uint256 maximumCachedTime
112
+ ) external;
113
+
114
+ /// @notice Confirm an edge by executing a one step proof
115
+ /// @dev One step proofs can only be executed against edges that have length one and of type SmallStep
116
+ /// @param edgeId The id of the edge to confirm
117
+ /// @param oneStepData Input data to the one step proof
118
+ /// @param prevConfig Data about the config set in prev
119
+ /// @param beforeHistoryInclusionProof Proof that the state which is the start of the edge is committed to by the startHistoryRoot
120
+ /// @param afterHistoryInclusionProof Proof that the state which is the end of the edge is committed to by the endHistoryRoot
121
+ function confirmEdgeByOneStepProof(
122
+ bytes32 edgeId,
123
+ OneStepData calldata oneStepData,
124
+ ConfigData calldata prevConfig,
125
+ bytes32[] calldata beforeHistoryInclusionProof,
126
+ bytes32[] calldata afterHistoryInclusionProof
127
+ ) external;
128
+
129
+ /// @notice When zero layer block edges are created a stake is also provided
130
+ /// The stake on this edge can be refunded if the edge is confirme
131
+ function refundStake(
132
+ bytes32 edgeId
133
+ ) external;
134
+
135
+ /// @notice Zero layer edges have to be a fixed height.
136
+ /// This function returns the end height for a given edge type
137
+ function getLayerZeroEndHeight(
138
+ EdgeType eType
139
+ ) external view returns (uint256);
140
+
141
+ /// @notice Calculate the unique id of an edge
142
+ /// @param level The level of the edge
143
+ /// @param originId The origin id of the edge
144
+ /// @param startHeight The start height of the edge
145
+ /// @param startHistoryRoot The start history root of the edge
146
+ /// @param endHeight The end height of the edge
147
+ /// @param endHistoryRoot The end history root of the edge
148
+ function calculateEdgeId(
149
+ uint8 level,
150
+ bytes32 originId,
151
+ uint256 startHeight,
152
+ bytes32 startHistoryRoot,
153
+ uint256 endHeight,
154
+ bytes32 endHistoryRoot
155
+ ) external pure returns (bytes32);
156
+
157
+ /// @notice Calculate the mutual id of the edge
158
+ /// Edges that are rivals share the same mutual id
159
+ /// @param level The level of the edge
160
+ /// @param originId The origin id of the edge
161
+ /// @param startHeight The start height of the edge
162
+ /// @param startHistoryRoot The start history root of the edge
163
+ /// @param endHeight The end height of the edge
164
+ function calculateMutualId(
165
+ uint8 level,
166
+ bytes32 originId,
167
+ uint256 startHeight,
168
+ bytes32 startHistoryRoot,
169
+ uint256 endHeight
170
+ ) external pure returns (bytes32);
171
+
172
+ /// @notice Has the edge already been stored in the manager
173
+ function edgeExists(
174
+ bytes32 edgeId
175
+ ) external view returns (bool);
176
+
177
+ /// @notice Get full edge data for an edge
178
+ function getEdge(
179
+ bytes32 edgeId
180
+ ) external view returns (ChallengeEdge memory);
181
+
182
+ /// @notice The length of the edge, from start height to end height
183
+ function edgeLength(
184
+ bytes32 edgeId
185
+ ) external view returns (uint256);
186
+
187
+ /// @notice Does this edge currently have one or more rivals
188
+ /// Rival edges share the same mutual id
189
+ function hasRival(
190
+ bytes32 edgeId
191
+ ) external view returns (bool);
192
+
193
+ /// @notice The confirmed rival of this mutual id
194
+ /// Returns 0 if one does not exist
195
+ function confirmedRival(
196
+ bytes32 mutualId
197
+ ) external view returns (bytes32);
198
+
199
+ /// @notice Does the edge have at least one rival, and it has length one
200
+ function hasLengthOneRival(
201
+ bytes32 edgeId
202
+ ) external view returns (bool);
203
+
204
+ /// @notice The amount of time this edge has spent without rivals
205
+ /// This value is increasing whilst an edge is unrivaled, once a rival is created
206
+ /// it is fixed. If an edge has rivals from the moment it is created then it will have
207
+ /// a zero time unrivaled
208
+ function timeUnrivaled(
209
+ bytes32 edgeId
210
+ ) external view returns (uint256);
211
+
212
+ /// @notice Get the id of the prev assertion that this edge is originates from
213
+ /// @dev Uses the parent chain to traverse upwards SmallStep->BigStep->Block->Assertion
214
+ /// until it gets to the origin assertion
215
+ function getPrevAssertionHash(
216
+ bytes32 edgeId
217
+ ) external view returns (bytes32);
218
+
219
+ /// @notice Fetch the raw first rival record for the given mutual id
220
+ /// @dev Returns 0 if there is no edge with the given mutual id
221
+ /// Returns a magic value if there is one edge but it is unrivaled
222
+ /// Returns the id of the second edge created with the mutual id, if > 1 exists
223
+ function firstRival(
224
+ bytes32 mutualId
225
+ ) external view returns (bytes32);
226
+
227
+ /// @notice True if an account has made a layer zero edge with the given mutual id.
228
+ /// This is only tracked when the validator whitelist is enabled
229
+ function hasMadeLayerZeroRival(
230
+ address account,
231
+ bytes32 mutualId
232
+ ) external view returns (bool);
233
+ }
@@ -0,0 +1,61 @@
1
+ // Copyright 2023, Offchain Labs, Inc.
2
+ // For license information, see https://github.com/offchainlabs/bold/blob/main/LICENSE
3
+ // SPDX-License-Identifier: BUSL-1.1
4
+ //
5
+ pragma solidity ^0.8.17;
6
+
7
+ /// @title Array utils library
8
+ /// @notice Utils for working with bytes32 arrays
9
+ library ArrayUtilsLib {
10
+ /// @notice Append an item to the end of an array
11
+ /// @param arr The array to append to
12
+ /// @param newItem The item to append
13
+ function append(
14
+ bytes32[] memory arr,
15
+ bytes32 newItem
16
+ ) internal pure returns (bytes32[] memory) {
17
+ bytes32[] memory clone = new bytes32[](arr.length + 1);
18
+ for (uint256 i = 0; i < arr.length; i++) {
19
+ clone[i] = arr[i];
20
+ }
21
+ clone[clone.length - 1] = newItem;
22
+ return clone;
23
+ }
24
+
25
+ /// @notice Get a slice of an existing array
26
+ /// @dev End index exlusive so slice(arr, 0, 5) gets the first 5 elements of arr
27
+ /// @param arr Array to slice
28
+ /// @param startIndex The start index of the slice in the original array - inclusive
29
+ /// @param endIndex The end index of the slice in the original array - exlusive
30
+ function slice(
31
+ bytes32[] memory arr,
32
+ uint256 startIndex,
33
+ uint256 endIndex
34
+ ) internal pure returns (bytes32[] memory) {
35
+ require(startIndex < endIndex, "Start not less than end");
36
+ require(endIndex <= arr.length, "End not less or equal than length");
37
+
38
+ bytes32[] memory newArr = new bytes32[](endIndex - startIndex);
39
+ for (uint256 i = startIndex; i < endIndex; i++) {
40
+ newArr[i - startIndex] = arr[i];
41
+ }
42
+ return newArr;
43
+ }
44
+
45
+ /// @notice Concatenated to arrays
46
+ /// @param arr1 First array
47
+ /// @param arr1 Second array
48
+ function concat(
49
+ bytes32[] memory arr1,
50
+ bytes32[] memory arr2
51
+ ) internal pure returns (bytes32[] memory) {
52
+ bytes32[] memory full = new bytes32[](arr1.length + arr2.length);
53
+ for (uint256 i = 0; i < arr1.length; i++) {
54
+ full[i] = arr1[i];
55
+ }
56
+ for (uint256 i = 0; i < arr2.length; i++) {
57
+ full[arr1.length + i] = arr2[i];
58
+ }
59
+ return full;
60
+ }
61
+ }
@@ -0,0 +1,277 @@
1
+ // Copyright 2023, Offchain Labs, Inc.
2
+ // For license information, see https://github.com/offchainlabs/bold/blob/main/LICENSE
3
+ // SPDX-License-Identifier: BUSL-1.1
4
+ //
5
+ pragma solidity ^0.8.17;
6
+
7
+ import "./Enums.sol";
8
+ import "./ChallengeErrors.sol";
9
+ import "./Structs.sol";
10
+
11
+ library ChallengeEdgeLib {
12
+ /// @notice Common checks to do when adding an edge
13
+ function newEdgeChecks(
14
+ bytes32 originId,
15
+ bytes32 startHistoryRoot,
16
+ uint256 startHeight,
17
+ bytes32 endHistoryRoot,
18
+ uint256 endHeight
19
+ ) internal pure {
20
+ if (originId == 0) {
21
+ revert EmptyOriginId();
22
+ }
23
+ if (endHeight <= startHeight) {
24
+ revert InvalidHeights(startHeight, endHeight);
25
+ }
26
+ if (startHistoryRoot == 0) {
27
+ revert EmptyStartRoot();
28
+ }
29
+ if (endHistoryRoot == 0) {
30
+ revert EmptyEndRoot();
31
+ }
32
+ }
33
+
34
+ /// @notice Create a new layer zero edge. These edges make claims about length one edges in the level
35
+ /// below. Creating a layer zero edge also requires placing a mini stake, so information
36
+ /// about that staker is also stored on this edge.
37
+ function newLayerZeroEdge(
38
+ bytes32 originId,
39
+ bytes32 startHistoryRoot,
40
+ uint256 startHeight,
41
+ bytes32 endHistoryRoot,
42
+ uint256 endHeight,
43
+ bytes32 claimId,
44
+ address staker,
45
+ uint8 level
46
+ ) internal view returns (ChallengeEdge memory) {
47
+ if (staker == address(0)) {
48
+ revert EmptyStaker();
49
+ }
50
+ if (claimId == 0) {
51
+ revert EmptyClaimId();
52
+ }
53
+
54
+ newEdgeChecks(originId, startHistoryRoot, startHeight, endHistoryRoot, endHeight);
55
+
56
+ return ChallengeEdge({
57
+ originId: originId,
58
+ startHeight: startHeight,
59
+ startHistoryRoot: startHistoryRoot,
60
+ endHeight: endHeight,
61
+ endHistoryRoot: endHistoryRoot,
62
+ lowerChildId: 0,
63
+ upperChildId: 0,
64
+ createdAtBlock: uint64(block.number),
65
+ claimId: claimId,
66
+ staker: staker,
67
+ status: EdgeStatus.Pending,
68
+ level: level,
69
+ refunded: false,
70
+ confirmedAtBlock: 0,
71
+ totalTimeUnrivaledCache: 0
72
+ });
73
+ }
74
+
75
+ /// @notice Creates a new child edge. All edges except layer zero edges are child edges.
76
+ /// These are edges that are created by bisection, and have parents rather than claims.
77
+ function newChildEdge(
78
+ bytes32 originId,
79
+ bytes32 startHistoryRoot,
80
+ uint256 startHeight,
81
+ bytes32 endHistoryRoot,
82
+ uint256 endHeight,
83
+ uint8 level
84
+ ) internal view returns (ChallengeEdge memory) {
85
+ newEdgeChecks(originId, startHistoryRoot, startHeight, endHistoryRoot, endHeight);
86
+
87
+ return ChallengeEdge({
88
+ originId: originId,
89
+ startHeight: startHeight,
90
+ startHistoryRoot: startHistoryRoot,
91
+ endHeight: endHeight,
92
+ endHistoryRoot: endHistoryRoot,
93
+ lowerChildId: 0,
94
+ upperChildId: 0,
95
+ createdAtBlock: uint64(block.number),
96
+ claimId: 0,
97
+ staker: address(0),
98
+ status: EdgeStatus.Pending,
99
+ level: level,
100
+ refunded: false,
101
+ confirmedAtBlock: 0,
102
+ totalTimeUnrivaledCache: 0
103
+ });
104
+ }
105
+
106
+ /// @notice The "mutualId" of an edge. A mutual id is a hash of all the data that is shared by rivals.
107
+ /// Rivals have the same start height, start history root and end height. They also have the same origin id and level.
108
+ /// The difference between rivals is that they have a different endHistoryRoot, so that information
109
+ /// is not included in this hash.
110
+ function mutualIdComponent(
111
+ uint8 level,
112
+ bytes32 originId,
113
+ uint256 startHeight,
114
+ bytes32 startHistoryRoot,
115
+ uint256 endHeight
116
+ ) internal pure returns (bytes32) {
117
+ return
118
+ keccak256(abi.encodePacked(level, originId, startHeight, startHistoryRoot, endHeight));
119
+ }
120
+
121
+ /// @notice The "mutualId" of an edge. A mutual id is a hash of all the data that is shared by rivals.
122
+ /// Rivals have the same start height, start history root and end height. They also have the same origin id and level.
123
+ /// The difference between rivals is that they have a different endHistoryRoot, so that information
124
+ /// is not included in this hash.
125
+ function mutualId(
126
+ ChallengeEdge storage ce
127
+ ) internal view returns (bytes32) {
128
+ return mutualIdComponent(
129
+ ce.level, ce.originId, ce.startHeight, ce.startHistoryRoot, ce.endHeight
130
+ );
131
+ }
132
+
133
+ function mutualIdMem(
134
+ ChallengeEdge memory ce
135
+ ) internal pure returns (bytes32) {
136
+ return mutualIdComponent(
137
+ ce.level, ce.originId, ce.startHeight, ce.startHistoryRoot, ce.endHeight
138
+ );
139
+ }
140
+
141
+ /// @notice The id of an edge. Edges are uniquely identified by their id, and commit to the same information
142
+ function idComponent(
143
+ uint8 level,
144
+ bytes32 originId,
145
+ uint256 startHeight,
146
+ bytes32 startHistoryRoot,
147
+ uint256 endHeight,
148
+ bytes32 endHistoryRoot
149
+ ) internal pure returns (bytes32) {
150
+ return keccak256(
151
+ abi.encodePacked(
152
+ mutualIdComponent(level, originId, startHeight, startHistoryRoot, endHeight),
153
+ endHistoryRoot
154
+ )
155
+ );
156
+ }
157
+
158
+ /// @notice The id of an edge. Edges are uniquely identified by their id, and commit to the same information
159
+ /// @dev This separate idMem method is to be explicit about when ChallengeEdges are copied into memory. It is
160
+ /// possible to pass a storage edge to this method and the id be computed correctly, but that would load
161
+ /// the whole struct into memory, so we're explicit here that this should be used for edges already in memory.
162
+ function idMem(
163
+ ChallengeEdge memory edge
164
+ ) internal pure returns (bytes32) {
165
+ return idComponent(
166
+ edge.level,
167
+ edge.originId,
168
+ edge.startHeight,
169
+ edge.startHistoryRoot,
170
+ edge.endHeight,
171
+ edge.endHistoryRoot
172
+ );
173
+ }
174
+
175
+ /// @notice The id of an edge. Edges are uniquely identified by their id, and commit to the same information
176
+ function id(
177
+ ChallengeEdge storage edge
178
+ ) internal view returns (bytes32) {
179
+ return idComponent(
180
+ edge.level,
181
+ edge.originId,
182
+ edge.startHeight,
183
+ edge.startHistoryRoot,
184
+ edge.endHeight,
185
+ edge.endHistoryRoot
186
+ );
187
+ }
188
+
189
+ /// @notice Does this edge exist in storage
190
+ function exists(
191
+ ChallengeEdge storage edge
192
+ ) internal view returns (bool) {
193
+ // All edges have a createdAtBlock number
194
+ return edge.createdAtBlock != 0;
195
+ }
196
+
197
+ /// @notice The length of this edge - difference between the start and end heights
198
+ function length(
199
+ ChallengeEdge storage edge
200
+ ) internal view returns (uint256) {
201
+ uint256 len = edge.endHeight - edge.startHeight;
202
+ // It's impossible for a zero length edge to exist
203
+ if (len == 0) {
204
+ revert EdgeNotExists(ChallengeEdgeLib.id(edge));
205
+ }
206
+ return len;
207
+ }
208
+
209
+ /// @notice Set the children of an edge
210
+ /// @dev Children can only be set once
211
+ function setChildren(
212
+ ChallengeEdge storage edge,
213
+ bytes32 lowerChildId,
214
+ bytes32 upperChildId
215
+ ) internal {
216
+ if (edge.lowerChildId != 0 || edge.upperChildId != 0) {
217
+ revert ChildrenAlreadySet(
218
+ ChallengeEdgeLib.id(edge), edge.lowerChildId, edge.upperChildId
219
+ );
220
+ }
221
+ edge.lowerChildId = lowerChildId;
222
+ edge.upperChildId = upperChildId;
223
+ }
224
+
225
+ /// @notice Set the status of an edge to Confirmed
226
+ /// @dev Only Pending edges can be confirmed
227
+ function setConfirmed(
228
+ ChallengeEdge storage edge
229
+ ) internal {
230
+ if (edge.status != EdgeStatus.Pending) {
231
+ revert EdgeNotPending(ChallengeEdgeLib.id(edge), edge.status);
232
+ }
233
+ edge.status = EdgeStatus.Confirmed;
234
+ edge.confirmedAtBlock = uint64(block.number);
235
+ }
236
+
237
+ /// @notice Is the edge a layer zero edge.
238
+ function isLayerZero(
239
+ ChallengeEdge storage edge
240
+ ) internal view returns (bool) {
241
+ return edge.claimId != 0 && edge.staker != address(0);
242
+ }
243
+
244
+ /// @notice Set the refunded flag of an edge
245
+ /// @dev Checks internally that edge is confirmed, layer zero edge and hasnt been refunded already
246
+ function setRefunded(
247
+ ChallengeEdge storage edge
248
+ ) internal {
249
+ if (edge.status != EdgeStatus.Confirmed) {
250
+ revert EdgeNotConfirmed(ChallengeEdgeLib.id(edge), edge.status);
251
+ }
252
+ if (!isLayerZero(edge)) {
253
+ revert EdgeNotLayerZero(ChallengeEdgeLib.id(edge), edge.staker, edge.claimId);
254
+ }
255
+ if (edge.refunded == true) {
256
+ revert EdgeAlreadyRefunded(ChallengeEdgeLib.id(edge));
257
+ }
258
+
259
+ edge.refunded = true;
260
+ }
261
+
262
+ /// @notice Returns the edge type for a given level, given the total number of big step levels
263
+ function levelToType(
264
+ uint8 level,
265
+ uint8 numBigStepLevels
266
+ ) internal pure returns (EdgeType eType) {
267
+ if (level == 0) {
268
+ return EdgeType.Block;
269
+ } else if (level <= numBigStepLevels) {
270
+ return EdgeType.BigStep;
271
+ } else if (level == numBigStepLevels + 1) {
272
+ return EdgeType.SmallStep;
273
+ } else {
274
+ revert LevelTooHigh(level, numBigStepLevels);
275
+ }
276
+ }
277
+ }
@@ -0,0 +1,108 @@
1
+ // Copyright 2023, Offchain Labs, Inc.
2
+ // For license information, see https://github.com/offchainlabs/bold/blob/main/LICENSE
3
+ // SPDX-License-Identifier: BUSL-1.1
4
+ //
5
+ pragma solidity ^0.8.17;
6
+
7
+ import "./Enums.sol";
8
+
9
+ /// @dev The edge is not currently stored
10
+ error EdgeNotExists(bytes32 edgeId);
11
+ /// @dev The edge has already been stored
12
+ error EdgeAlreadyExists(bytes32 edgeId);
13
+ /// @dev The provided assertion hash was empty
14
+ error AssertionHashEmpty();
15
+ /// @dev The assertion hashes are not the same, but should have been
16
+ error AssertionHashMismatch(bytes32 h1, bytes32 h2);
17
+ /// @dev The assertion is not currently pending
18
+ error AssertionNotPending();
19
+ /// @dev The assertion has no sibling
20
+ error AssertionNoSibling();
21
+ /// @dev The edge type specific proof data is empty
22
+ error EmptyEdgeSpecificProof();
23
+ /// @dev The start machine status is empty
24
+ error EmptyStartMachineStatus();
25
+ /// @dev The end machine status is empty
26
+ error EmptyEndMachineStatus();
27
+ /// @dev The claim edge is not pending
28
+ error ClaimEdgeNotPending();
29
+ /// @dev The claim edge does not have a length one rival
30
+ error ClaimEdgeNotLengthOneRival(bytes32 claimId);
31
+ /// @dev The claim edge has an invalid level
32
+ error ClaimEdgeInvalidLevel(uint8 argLevel, uint8 claimLevel);
33
+ /// @dev The val is not a power of two
34
+ error NotPowerOfTwo(uint256 val);
35
+ /// @dev The height has an unexpected value
36
+ error InvalidEndHeight(uint256 actualHeight, uint256 expectedHeight);
37
+ /// @dev The prefix proof is empty
38
+ error EmptyPrefixProof();
39
+ /// @dev The edge is not of type SmallStep
40
+ error EdgeTypeNotSmallStep(uint8 level);
41
+ /// @dev The first rival record is empty
42
+ error EmptyFirstRival();
43
+ /// @dev The difference between two heights is less than 2
44
+ error HeightDiffLtTwo(uint256 h1, uint256 h2);
45
+ /// @dev The edge is not pending
46
+ error EdgeNotPending(bytes32 edgeId, EdgeStatus status);
47
+ /// @dev The edge is unrivaled
48
+ error EdgeUnrivaled(bytes32 edgeId);
49
+ /// @dev The edge is not confirmed
50
+ error EdgeNotConfirmed(bytes32 edgeId, EdgeStatus);
51
+ /// @dev The edge level is unexpected
52
+ error EdgeLevelInvalid(bytes32 edgeId1, bytes32 edgeId2, uint8 level1, uint8 level2);
53
+ /// @dev The claim id on the claimingEdge does not match the provided edge id
54
+ error EdgeClaimMismatch(bytes32 edgeId, bytes32 claimingEdgeId);
55
+ /// @dev The origin id is not equal to the mutual id
56
+ error OriginIdMutualIdMismatch(bytes32 mutualId, bytes32 originId);
57
+ /// @dev The total number of blocks is not above the threshold
58
+ error InsufficientConfirmationBlocks(uint256 totalBlocks, uint256 thresholdBlocks);
59
+ /// @dev The edge is not of length one
60
+ error EdgeNotLengthOne(uint256 length);
61
+ /// @dev No origin id supplied when creating an edge
62
+ error EmptyOriginId();
63
+ /// @dev Invalid heights supplied when creating an edge
64
+ error InvalidHeights(uint256 start, uint256 end);
65
+ /// @dev No start root supplied when creating an edge
66
+ error EmptyStartRoot();
67
+ /// @dev No end root supplied when creating an edge
68
+ error EmptyEndRoot();
69
+ /// @dev No staker supplied when creating a layer zero edge
70
+ error EmptyStaker();
71
+ /// @dev No claim id supplied when creating a layer zero edge
72
+ error EmptyClaimId();
73
+ /// @dev Children already set on edge
74
+ error ChildrenAlreadySet(bytes32 edgeId, bytes32 lowerChildId, bytes32 upperChildId);
75
+ /// @dev Edge is not a layer zero edge
76
+ error EdgeNotLayerZero(bytes32 edgeId, address staker, bytes32 claimId);
77
+ /// @dev The edge staker has already been refunded
78
+ error EdgeAlreadyRefunded(bytes32 edgeId);
79
+ /// @dev No assertion chain address supplied
80
+ error EmptyAssertionChain();
81
+ /// @dev No one step proof entry address supplied
82
+ error EmptyOneStepProofEntry();
83
+ /// @dev No challenge period supplied
84
+ error EmptyChallengePeriod();
85
+ /// @dev No stake receiver address supplied
86
+ error EmptyStakeReceiver();
87
+ /// @dev Stake amounts does not match number of levels
88
+ error StakeAmountsMismatch(uint256 stakeLevels, uint256 numLevels);
89
+ /// @dev A rival edge is already confirmed
90
+ error RivalEdgeConfirmed(bytes32 edgeId, bytes32 confirmedRivalId);
91
+ /// @dev Thrown when big step levels is set to 0
92
+ error ZeroBigStepLevels();
93
+ /// @dev Thrown when there are too many big step levels requested
94
+ error BigStepLevelsTooMany(uint8 levels);
95
+ /// @dev Thrown when the level does not correspond to a valid type
96
+ error LevelTooHigh(uint8 level, uint8 numBigStepLevels);
97
+ /// @dev Thrown for unrecognised edge types
98
+ error InvalidEdgeType(EdgeType edgeType);
99
+ /// @dev Thrown when endHistoryRoot not matching the assertion
100
+ error EndHistoryRootMismatch(bytes32 endHistoryRoot, bytes32 assertionEndRoot);
101
+ /// @dev Thrown when the validator whitelist is enabled and the account attempting to create a layer zero edge is not whitelisted
102
+ error NotValidator(address account);
103
+ /// @dev Thrown when an account has already created a rivalling layer zero edge
104
+ error AccountHasMadeLayerZeroRival(address account, bytes32 mutualId);
105
+ /// @dev Thrown when the cached time is already sufficient
106
+ error CachedTimeSufficient(uint256 actual, uint256 expected);
107
+ /// @dev Thrown when the input is an empty array
108
+ error EmptyArray();