@arbitrum/nitro-contracts 2.1.0 → 3.0.0-alpha.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/build/contracts/@openzeppelin/contracts/access/Ownable.sol/Ownable.dbg.json +1 -1
- package/build/contracts/@openzeppelin/contracts/interfaces/draft-IERC1822.sol/IERC1822Proxiable.dbg.json +1 -1
- package/build/contracts/@openzeppelin/contracts/proxy/ERC1967/ERC1967Proxy.sol/ERC1967Proxy.dbg.json +1 -1
- package/build/contracts/@openzeppelin/contracts/proxy/ERC1967/ERC1967Proxy.sol/ERC1967Proxy.json +2 -2
- package/build/contracts/@openzeppelin/contracts/proxy/ERC1967/ERC1967Upgrade.sol/ERC1967Upgrade.dbg.json +1 -1
- package/build/contracts/@openzeppelin/contracts/proxy/Proxy.sol/Proxy.dbg.json +1 -1
- package/build/contracts/@openzeppelin/contracts/proxy/beacon/IBeacon.sol/IBeacon.dbg.json +1 -1
- package/build/contracts/@openzeppelin/contracts/proxy/beacon/UpgradeableBeacon.sol/UpgradeableBeacon.dbg.json +1 -1
- package/build/contracts/@openzeppelin/contracts/proxy/beacon/UpgradeableBeacon.sol/UpgradeableBeacon.json +2 -2
- package/build/contracts/@openzeppelin/contracts/proxy/transparent/ProxyAdmin.sol/ProxyAdmin.dbg.json +1 -1
- package/build/contracts/@openzeppelin/contracts/proxy/transparent/ProxyAdmin.sol/ProxyAdmin.json +2 -2
- package/build/contracts/@openzeppelin/contracts/proxy/transparent/TransparentUpgradeableProxy.sol/TransparentUpgradeableProxy.dbg.json +1 -1
- package/build/contracts/@openzeppelin/contracts/proxy/transparent/TransparentUpgradeableProxy.sol/TransparentUpgradeableProxy.json +2 -2
- package/build/contracts/@openzeppelin/contracts/proxy/utils/UUPSUpgradeable.sol/UUPSUpgradeable.dbg.json +1 -1
- package/build/contracts/@openzeppelin/contracts/security/ReentrancyGuard.sol/ReentrancyGuard.dbg.json +1 -1
- package/build/contracts/@openzeppelin/contracts/token/ERC20/ERC20.sol/ERC20.dbg.json +1 -1
- package/build/contracts/@openzeppelin/contracts/token/ERC20/ERC20.sol/ERC20.json +2 -2
- package/build/contracts/@openzeppelin/contracts/token/ERC20/IERC20.sol/IERC20.dbg.json +1 -1
- package/build/contracts/@openzeppelin/contracts/token/ERC20/extensions/IERC20Metadata.sol/IERC20Metadata.dbg.json +1 -1
- package/build/contracts/@openzeppelin/contracts/token/ERC20/extensions/draft-IERC20Permit.sol/IERC20Permit.dbg.json +4 -0
- package/build/contracts/@openzeppelin/contracts/token/ERC20/extensions/draft-IERC20Permit.sol/IERC20Permit.json +86 -0
- package/build/contracts/@openzeppelin/contracts/token/ERC20/utils/SafeERC20.sol/SafeERC20.dbg.json +1 -1
- package/build/contracts/@openzeppelin/contracts/token/ERC20/utils/SafeERC20.sol/SafeERC20.json +2 -2
- package/build/contracts/@openzeppelin/contracts/utils/Address.sol/Address.dbg.json +1 -1
- package/build/contracts/@openzeppelin/contracts/utils/Address.sol/Address.json +2 -2
- package/build/contracts/@openzeppelin/contracts/utils/Context.sol/Context.dbg.json +1 -1
- package/build/contracts/@openzeppelin/contracts/utils/Create2.sol/Create2.dbg.json +4 -0
- package/build/contracts/@openzeppelin/contracts/utils/Create2.sol/Create2.json +10 -0
- package/build/contracts/@openzeppelin/contracts/utils/StorageSlot.sol/StorageSlot.dbg.json +1 -1
- package/build/contracts/@openzeppelin/contracts/utils/StorageSlot.sol/StorageSlot.json +2 -2
- package/build/contracts/@openzeppelin/contracts/utils/Strings.sol/Strings.dbg.json +1 -1
- package/build/contracts/@openzeppelin/contracts/utils/Strings.sol/Strings.json +2 -2
- package/build/contracts/@openzeppelin/contracts-upgradeable/access/AccessControlUpgradeable.sol/AccessControlUpgradeable.dbg.json +1 -1
- package/build/contracts/@openzeppelin/contracts-upgradeable/access/AccessControlUpgradeable.sol/AccessControlUpgradeable.json +13 -0
- package/build/contracts/@openzeppelin/contracts-upgradeable/access/IAccessControlUpgradeable.sol/IAccessControlUpgradeable.dbg.json +1 -1
- package/build/contracts/@openzeppelin/contracts-upgradeable/access/OwnableUpgradeable.sol/OwnableUpgradeable.dbg.json +1 -1
- package/build/contracts/@openzeppelin/contracts-upgradeable/access/OwnableUpgradeable.sol/OwnableUpgradeable.json +13 -0
- package/build/contracts/@openzeppelin/contracts-upgradeable/proxy/utils/Initializable.sol/Initializable.dbg.json +1 -1
- package/build/contracts/@openzeppelin/contracts-upgradeable/proxy/utils/Initializable.sol/Initializable.json +15 -1
- package/build/contracts/@openzeppelin/contracts-upgradeable/security/PausableUpgradeable.sol/PausableUpgradeable.dbg.json +1 -1
- package/build/contracts/@openzeppelin/contracts-upgradeable/security/PausableUpgradeable.sol/PausableUpgradeable.json +13 -0
- package/build/contracts/@openzeppelin/contracts-upgradeable/utils/AddressUpgradeable.sol/AddressUpgradeable.dbg.json +1 -1
- package/build/contracts/@openzeppelin/contracts-upgradeable/utils/AddressUpgradeable.sol/AddressUpgradeable.json +2 -2
- package/build/contracts/@openzeppelin/contracts-upgradeable/utils/ContextUpgradeable.sol/ContextUpgradeable.dbg.json +1 -1
- package/build/contracts/@openzeppelin/contracts-upgradeable/utils/ContextUpgradeable.sol/ContextUpgradeable.json +15 -1
- package/build/contracts/@openzeppelin/contracts-upgradeable/utils/Create2Upgradeable.sol/Create2Upgradeable.dbg.json +4 -0
- package/build/contracts/@openzeppelin/contracts-upgradeable/utils/Create2Upgradeable.sol/Create2Upgradeable.json +10 -0
- package/build/contracts/@openzeppelin/contracts-upgradeable/utils/StorageSlotUpgradeable.sol/StorageSlotUpgradeable.dbg.json +1 -1
- package/build/contracts/@openzeppelin/contracts-upgradeable/utils/StorageSlotUpgradeable.sol/StorageSlotUpgradeable.json +2 -2
- package/build/contracts/@openzeppelin/contracts-upgradeable/utils/StringsUpgradeable.sol/StringsUpgradeable.dbg.json +1 -1
- package/build/contracts/@openzeppelin/contracts-upgradeable/utils/StringsUpgradeable.sol/StringsUpgradeable.json +2 -2
- package/build/contracts/@openzeppelin/contracts-upgradeable/utils/introspection/ERC165Upgradeable.sol/ERC165Upgradeable.dbg.json +1 -1
- package/build/contracts/@openzeppelin/contracts-upgradeable/utils/introspection/ERC165Upgradeable.sol/ERC165Upgradeable.json +13 -0
- package/build/contracts/@openzeppelin/contracts-upgradeable/utils/introspection/IERC165Upgradeable.sol/IERC165Upgradeable.dbg.json +1 -1
- package/build/contracts/@openzeppelin/contracts-upgradeable/utils/structs/EnumerableSetUpgradeable.sol/EnumerableSetUpgradeable.dbg.json +4 -0
- package/build/contracts/@openzeppelin/contracts-upgradeable/utils/structs/EnumerableSetUpgradeable.sol/EnumerableSetUpgradeable.json +10 -0
- package/build/contracts/src/assertionStakingPool/AbsBoldStakingPool.sol/AbsBoldStakingPool.dbg.json +4 -0
- package/build/contracts/{@openzeppelin/contracts-upgradeable/token/ERC20/IERC20Upgradeable.sol/IERC20Upgradeable.json → src/assertionStakingPool/AbsBoldStakingPool.sol/AbsBoldStakingPool.json} +41 -95
- package/build/contracts/src/assertionStakingPool/AssertionStakingPool.sol/AssertionStakingPool.dbg.json +4 -0
- package/build/contracts/src/assertionStakingPool/AssertionStakingPool.sol/AssertionStakingPool.json +340 -0
- package/build/contracts/src/assertionStakingPool/AssertionStakingPoolCreator.sol/AssertionStakingPoolCreator.dbg.json +4 -0
- package/build/contracts/src/assertionStakingPool/AssertionStakingPoolCreator.sol/AssertionStakingPoolCreator.json +89 -0
- package/build/contracts/src/assertionStakingPool/EdgeStakingPool.sol/EdgeStakingPool.dbg.json +4 -0
- package/build/contracts/src/assertionStakingPool/EdgeStakingPool.sol/EdgeStakingPool.json +248 -0
- package/build/contracts/src/assertionStakingPool/EdgeStakingPoolCreator.sol/EdgeStakingPoolCreator.dbg.json +4 -0
- package/build/contracts/src/assertionStakingPool/EdgeStakingPoolCreator.sol/EdgeStakingPoolCreator.json +83 -0
- package/build/contracts/src/assertionStakingPool/StakingPoolCreatorUtils.sol/StakingPoolCreatorUtils.dbg.json +4 -0
- package/build/contracts/src/assertionStakingPool/StakingPoolCreatorUtils.sol/StakingPoolCreatorUtils.json +16 -0
- package/build/contracts/src/assertionStakingPool/interfaces/IAbsBoldStakingPool.sol/IAbsBoldStakingPool.dbg.json +4 -0
- package/build/contracts/src/assertionStakingPool/interfaces/IAbsBoldStakingPool.sol/IAbsBoldStakingPool.json +140 -0
- package/build/contracts/src/assertionStakingPool/interfaces/IAssertionStakingPool.sol/IAssertionStakingPool.dbg.json +4 -0
- package/build/contracts/src/assertionStakingPool/interfaces/IAssertionStakingPool.sol/IAssertionStakingPool.json +324 -0
- package/build/contracts/src/assertionStakingPool/interfaces/IAssertionStakingPoolCreator.sol/IAssertionStakingPoolCreator.dbg.json +4 -0
- package/build/contracts/src/assertionStakingPool/interfaces/IAssertionStakingPoolCreator.sol/IAssertionStakingPoolCreator.json +84 -0
- package/build/contracts/src/assertionStakingPool/interfaces/IEdgeStakingPool.sol/IEdgeStakingPool.dbg.json +4 -0
- package/build/contracts/src/assertionStakingPool/interfaces/IEdgeStakingPool.sol/IEdgeStakingPool.json +232 -0
- package/build/contracts/src/assertionStakingPool/interfaces/IEdgeStakingPoolCreator.sol/IEdgeStakingPoolCreator.dbg.json +4 -0
- package/build/contracts/src/assertionStakingPool/interfaces/IEdgeStakingPoolCreator.sol/IEdgeStakingPoolCreator.json +78 -0
- package/build/contracts/src/bridge/AbsBridge.sol/AbsBridge.dbg.json +1 -1
- package/build/contracts/src/bridge/AbsBridge.sol/AbsBridge.json +13 -0
- package/build/contracts/src/bridge/AbsInbox.sol/AbsInbox.dbg.json +1 -1
- package/build/contracts/src/bridge/AbsInbox.sol/AbsInbox.json +20 -7
- package/build/contracts/src/bridge/AbsOutbox.sol/AbsOutbox.dbg.json +1 -1
- package/build/contracts/src/bridge/Bridge.sol/Bridge.dbg.json +1 -1
- package/build/contracts/src/bridge/Bridge.sol/Bridge.json +15 -2
- package/build/contracts/src/bridge/DelayBuffer.sol/DelayBuffer.dbg.json +4 -0
- package/build/contracts/src/bridge/DelayBuffer.sol/DelayBuffer.json +24 -0
- package/build/contracts/src/bridge/ERC20Bridge.sol/ERC20Bridge.dbg.json +1 -1
- package/build/contracts/src/bridge/ERC20Bridge.sol/ERC20Bridge.json +15 -2
- package/build/contracts/src/bridge/ERC20Inbox.sol/ERC20Inbox.dbg.json +1 -1
- package/build/contracts/src/bridge/ERC20Inbox.sol/ERC20Inbox.json +22 -9
- package/build/contracts/src/bridge/ERC20Outbox.sol/ERC20Outbox.dbg.json +1 -1
- package/build/contracts/src/bridge/ERC20Outbox.sol/ERC20Outbox.json +2 -2
- package/build/contracts/src/bridge/GasRefunder.sol/GasRefunder.dbg.json +1 -1
- package/build/contracts/src/bridge/GasRefunder.sol/GasRefunder.json +2 -2
- package/build/contracts/src/bridge/IBridge.sol/IBridge.dbg.json +1 -1
- package/build/contracts/src/bridge/IDelayedMessageProvider.sol/IDelayedMessageProvider.dbg.json +1 -1
- package/build/contracts/src/bridge/IERC20Bridge.sol/IERC20Bridge.dbg.json +1 -1
- package/build/contracts/src/bridge/IERC20Inbox.sol/IERC20Inbox.dbg.json +1 -1
- package/build/contracts/src/bridge/IERC20Inbox.sol/IERC20Inbox.json +1 -1
- package/build/contracts/src/bridge/IEthBridge.sol/IEthBridge.dbg.json +1 -1
- package/build/contracts/src/bridge/IInbox.sol/IInbox.dbg.json +1 -1
- package/build/contracts/src/bridge/IInbox.sol/IInbox.json +1 -1
- package/build/contracts/src/bridge/IInboxBase.sol/IInboxBase.dbg.json +1 -1
- package/build/contracts/src/bridge/IInboxBase.sol/IInboxBase.json +1 -1
- package/build/contracts/src/bridge/IOutbox.sol/IOutbox.dbg.json +1 -1
- package/build/contracts/src/bridge/IOwnable.sol/IOwnable.dbg.json +1 -1
- package/build/contracts/src/bridge/ISequencerInbox.sol/ISequencerInbox.dbg.json +1 -1
- package/build/contracts/src/bridge/ISequencerInbox.sol/ISequencerInbox.json +441 -0
- package/build/contracts/src/bridge/Inbox.sol/Inbox.dbg.json +1 -1
- package/build/contracts/src/bridge/Inbox.sol/Inbox.json +22 -4
- package/build/contracts/src/bridge/Messages.sol/Messages.dbg.json +1 -1
- package/build/contracts/src/bridge/Messages.sol/Messages.json +2 -2
- package/build/contracts/src/bridge/Outbox.sol/Outbox.dbg.json +1 -1
- package/build/contracts/src/bridge/Outbox.sol/Outbox.json +2 -2
- package/build/contracts/src/bridge/SequencerInbox.sol/SequencerInbox.dbg.json +1 -1
- package/build/contracts/src/bridge/SequencerInbox.sol/SequencerInbox.json +564 -7
- package/build/contracts/src/chain/CacheManager.sol/CacheManager.dbg.json +1 -1
- package/build/contracts/src/chain/CacheManager.sol/CacheManager.json +15 -2
- package/build/contracts/src/challengeV2/EdgeChallengeManager.sol/EdgeChallengeManager.dbg.json +4 -0
- package/build/contracts/src/challengeV2/EdgeChallengeManager.sol/EdgeChallengeManager.json +1631 -0
- package/build/contracts/src/challengeV2/EdgeChallengeManager.sol/IEdgeChallengeManager.dbg.json +4 -0
- package/build/contracts/src/challengeV2/EdgeChallengeManager.sol/IEdgeChallengeManager.json +762 -0
- package/build/contracts/src/challengeV2/IAssertionChain.sol/IAssertionChain.dbg.json +4 -0
- package/build/contracts/src/challengeV2/IAssertionChain.sol/IAssertionChain.json +247 -0
- package/build/contracts/src/challengeV2/libraries/ArrayUtilsLib.sol/ArrayUtilsLib.dbg.json +4 -0
- package/build/contracts/src/challengeV2/libraries/ArrayUtilsLib.sol/ArrayUtilsLib.json +10 -0
- package/build/contracts/src/challengeV2/libraries/ChallengeEdgeLib.sol/ChallengeEdgeLib.dbg.json +4 -0
- package/build/contracts/src/challengeV2/libraries/ChallengeEdgeLib.sol/ChallengeEdgeLib.json +10 -0
- package/build/contracts/src/challengeV2/libraries/EdgeChallengeManagerLib.sol/EdgeChallengeManagerLib.dbg.json +4 -0
- package/build/contracts/src/challengeV2/libraries/EdgeChallengeManagerLib.sol/EdgeChallengeManagerLib.json +24 -0
- package/build/contracts/src/challengeV2/libraries/MerkleTreeAccumulatorLib.sol/MerkleTreeAccumulatorLib.dbg.json +4 -0
- package/build/contracts/src/challengeV2/libraries/MerkleTreeAccumulatorLib.sol/MerkleTreeAccumulatorLib.json +24 -0
- package/build/contracts/src/challengeV2/libraries/UintUtilsLib.sol/UintUtilsLib.dbg.json +4 -0
- package/build/contracts/src/challengeV2/libraries/UintUtilsLib.sol/UintUtilsLib.json +10 -0
- package/build/contracts/src/libraries/AddressAliasHelper.sol/AddressAliasHelper.dbg.json +1 -1
- package/build/contracts/src/libraries/AddressAliasHelper.sol/AddressAliasHelper.json +2 -2
- package/build/contracts/src/libraries/AdminFallbackProxy.sol/AdminFallbackProxy.dbg.json +1 -1
- package/build/contracts/src/libraries/AdminFallbackProxy.sol/AdminFallbackProxy.json +2 -2
- package/build/contracts/src/libraries/AdminFallbackProxy.sol/DoubleLogicERC1967Upgrade.dbg.json +1 -1
- package/build/contracts/src/libraries/ArbitrumChecker.sol/ArbitrumChecker.dbg.json +1 -1
- package/build/contracts/src/libraries/ArbitrumChecker.sol/ArbitrumChecker.json +2 -2
- package/build/contracts/src/libraries/CryptographyPrimitives.sol/CryptographyPrimitives.dbg.json +1 -1
- package/build/contracts/src/libraries/CryptographyPrimitives.sol/CryptographyPrimitives.json +2 -2
- package/build/contracts/src/libraries/DecimalsConverterHelper.sol/DecimalsConverterHelper.dbg.json +1 -1
- package/build/contracts/src/libraries/DecimalsConverterHelper.sol/DecimalsConverterHelper.json +2 -2
- package/build/contracts/src/libraries/DelegateCallAware.sol/DelegateCallAware.dbg.json +1 -1
- package/build/contracts/src/libraries/DoubleLogicUUPSUpgradeable.sol/DoubleLogicUUPSUpgradeable.dbg.json +1 -1
- package/build/contracts/src/libraries/GasRefundEnabled.sol/GasRefundEnabled.dbg.json +1 -1
- package/build/contracts/src/libraries/IGasRefunder.sol/IGasRefunder.dbg.json +1 -1
- package/build/contracts/src/libraries/IReader4844.sol/IReader4844.dbg.json +1 -1
- package/build/contracts/src/libraries/MerkleLib.sol/MerkleLib.dbg.json +1 -1
- package/build/contracts/src/libraries/MerkleLib.sol/MerkleLib.json +2 -2
- package/build/contracts/src/libraries/UUPSNotUpgradeable.sol/UUPSNotUpgradeable.dbg.json +1 -1
- package/build/contracts/src/mocks/Benchmarks.sol/Benchmarks.dbg.json +1 -1
- package/build/contracts/src/mocks/Benchmarks.sol/Benchmarks.json +2 -2
- package/build/contracts/src/mocks/BridgeStub.sol/BridgeStub.dbg.json +1 -1
- package/build/contracts/src/mocks/BridgeStub.sol/BridgeStub.json +8 -8
- package/build/contracts/src/mocks/BridgeUnproxied.sol/BridgeUnproxied.dbg.json +1 -1
- package/build/contracts/src/mocks/BridgeUnproxied.sol/BridgeUnproxied.json +28 -2
- package/build/contracts/src/mocks/InboxStub.sol/InboxStub.dbg.json +1 -1
- package/build/contracts/src/mocks/InboxStub.sol/InboxStub.json +2 -2
- package/build/contracts/src/mocks/MerkleTreeAccess.sol/MerkleTreeAccess.dbg.json +4 -0
- package/build/contracts/src/mocks/MerkleTreeAccess.sol/MerkleTreeAccess.json +227 -0
- package/build/contracts/src/mocks/MockRollupEventInbox.sol/MockRollupEventInbox.dbg.json +4 -0
- package/build/contracts/src/mocks/MockRollupEventInbox.sol/MockRollupEventInbox.json +133 -0
- package/build/contracts/src/mocks/MultiCallTest.sol/MultiCallTest.dbg.json +1 -1
- package/build/contracts/src/mocks/MultiCallTest.sol/MultiCallTest.json +2 -2
- package/build/contracts/src/mocks/PendingBlkTimeAndNrAdvanceCheck.sol/PendingBlkTimeAndNrAdvanceCheck.dbg.json +1 -1
- package/build/contracts/src/mocks/PendingBlkTimeAndNrAdvanceCheck.sol/PendingBlkTimeAndNrAdvanceCheck.json +2 -2
- package/build/contracts/src/mocks/Program.sol/ProgramTest.dbg.json +1 -1
- package/build/contracts/src/mocks/Program.sol/ProgramTest.json +2 -2
- package/build/contracts/src/mocks/ProxyAdminForBinding.sol/ProxyAdminForBinding.dbg.json +1 -1
- package/build/contracts/src/mocks/ProxyAdminForBinding.sol/ProxyAdminForBinding.json +2 -2
- package/build/contracts/src/mocks/SdkStorage.sol/SdkStorage.dbg.json +1 -1
- package/build/contracts/src/mocks/SdkStorage.sol/SdkStorage.json +2 -2
- package/build/contracts/src/mocks/SequencerInboxBlobMock.sol/SequencerInboxBlobMock.dbg.json +4 -0
- package/build/contracts/src/mocks/SequencerInboxBlobMock.sol/SequencerInboxBlobMock.json +1632 -0
- package/build/contracts/src/mocks/SequencerInboxStub.sol/SequencerInboxStub.dbg.json +1 -1
- package/build/contracts/src/mocks/SequencerInboxStub.sol/SequencerInboxStub.json +564 -7
- package/build/contracts/src/mocks/Simple.sol/Simple.dbg.json +1 -1
- package/build/contracts/src/mocks/Simple.sol/Simple.json +2 -2
- package/build/contracts/src/mocks/SimpleCacheManager.sol/SimpleCacheManager.dbg.json +1 -1
- package/build/contracts/src/mocks/SimpleCacheManager.sol/SimpleCacheManager.json +2 -2
- package/build/contracts/src/mocks/SimpleOneStepProofEntry.sol/SimpleOneStepProofEntry.dbg.json +4 -0
- package/build/contracts/src/mocks/SimpleOneStepProofEntry.sol/SimpleOneStepProofEntry.json +142 -0
- package/build/contracts/src/mocks/SimpleProxy.sol/SimpleProxy.dbg.json +1 -1
- package/build/contracts/src/mocks/SimpleProxy.sol/SimpleProxy.json +2 -2
- package/build/contracts/src/mocks/TestWETH9.sol/IWETH9.dbg.json +4 -0
- package/build/contracts/src/mocks/TestWETH9.sol/IWETH9.json +31 -0
- package/build/contracts/src/mocks/TestWETH9.sol/TestWETH9.dbg.json +4 -0
- package/build/contracts/src/mocks/TestWETH9.sol/TestWETH9.json +317 -0
- package/build/contracts/src/mocks/UpgradeExecutorMock.sol/UpgradeExecutorMock.dbg.json +1 -1
- package/build/contracts/src/mocks/UpgradeExecutorMock.sol/UpgradeExecutorMock.json +15 -2
- package/build/contracts/src/node-interface/NodeInterface.sol/NodeInterface.dbg.json +1 -1
- package/build/contracts/src/node-interface/NodeInterfaceDebug.sol/NodeInterfaceDebug.dbg.json +1 -1
- package/build/contracts/src/osp/HashProofHelper.sol/HashProofHelper.dbg.json +1 -1
- package/build/contracts/src/osp/HashProofHelper.sol/HashProofHelper.json +2 -2
- package/build/contracts/src/osp/IOneStepProofEntry.sol/IOneStepProofEntry.dbg.json +1 -1
- package/build/contracts/src/osp/IOneStepProofEntry.sol/IOneStepProofEntry.json +33 -9
- package/build/contracts/src/osp/IOneStepProofEntry.sol/OneStepProofEntryLib.dbg.json +1 -1
- package/build/contracts/src/osp/IOneStepProofEntry.sol/OneStepProofEntryLib.json +2 -2
- package/build/contracts/src/osp/IOneStepProver.sol/IOneStepProver.dbg.json +1 -1
- package/build/contracts/src/osp/IOneStepProver.sol/IOneStepProver.json +5 -0
- package/build/contracts/src/osp/OneStepProofEntry.sol/OneStepProofEntry.dbg.json +1 -1
- package/build/contracts/src/osp/OneStepProofEntry.sol/OneStepProofEntry.json +35 -11
- package/build/contracts/src/osp/OneStepProver0.sol/OneStepProver0.dbg.json +1 -1
- package/build/contracts/src/osp/OneStepProver0.sol/OneStepProver0.json +7 -2
- package/build/contracts/src/osp/OneStepProverHostIo.sol/OneStepProverHostIo.dbg.json +1 -1
- package/build/contracts/src/osp/OneStepProverHostIo.sol/OneStepProverHostIo.json +7 -2
- package/build/contracts/src/osp/OneStepProverMath.sol/OneStepProverMath.dbg.json +1 -1
- package/build/contracts/src/osp/OneStepProverMath.sol/OneStepProverMath.json +7 -2
- package/build/contracts/src/osp/OneStepProverMemory.sol/OneStepProverMemory.dbg.json +1 -1
- package/build/contracts/src/osp/OneStepProverMemory.sol/OneStepProverMemory.json +7 -2
- package/build/contracts/src/precompiles/ArbAddressTable.sol/ArbAddressTable.dbg.json +1 -1
- package/build/contracts/src/precompiles/ArbAggregator.sol/ArbAggregator.dbg.json +1 -1
- package/build/contracts/src/precompiles/ArbBLS.sol/ArbBLS.dbg.json +1 -1
- package/build/contracts/src/precompiles/ArbDebug.sol/ArbDebug.dbg.json +1 -1
- package/build/contracts/src/precompiles/ArbFunctionTable.sol/ArbFunctionTable.dbg.json +1 -1
- package/build/contracts/src/precompiles/ArbGasInfo.sol/ArbGasInfo.dbg.json +1 -1
- package/build/contracts/src/precompiles/ArbInfo.sol/ArbInfo.dbg.json +1 -1
- package/build/contracts/src/precompiles/ArbOwner.sol/ArbOwner.dbg.json +1 -1
- package/build/contracts/src/precompiles/ArbOwnerPublic.sol/ArbOwnerPublic.dbg.json +1 -1
- package/build/contracts/src/precompiles/ArbRetryableTx.sol/ArbRetryableTx.dbg.json +1 -1
- package/build/contracts/src/precompiles/ArbStatistics.sol/ArbStatistics.dbg.json +1 -1
- package/build/contracts/src/precompiles/ArbSys.sol/ArbSys.dbg.json +1 -1
- package/build/contracts/src/precompiles/ArbWasm.sol/ArbWasm.dbg.json +1 -1
- package/build/contracts/src/precompiles/ArbWasmCache.sol/ArbWasmCache.dbg.json +1 -1
- package/build/contracts/src/precompiles/ArbosActs.sol/ArbosActs.dbg.json +1 -1
- package/build/contracts/src/precompiles/ArbosTest.sol/ArbosTest.dbg.json +1 -1
- package/build/contracts/src/rollup/AbsRollupEventInbox.sol/AbsRollupEventInbox.dbg.json +1 -1
- package/build/contracts/src/rollup/Assertion.sol/AssertionNodeLib.dbg.json +4 -0
- package/build/contracts/src/rollup/{Node.sol/NodeLib.json → Assertion.sol/AssertionNodeLib.json} +4 -4
- package/build/contracts/src/rollup/AssertionState.sol/AssertionStateLib.dbg.json +4 -0
- package/build/contracts/src/{challenge/ChallengeLib.sol/ChallengeLib.json → rollup/AssertionState.sol/AssertionStateLib.json} +4 -4
- package/build/contracts/src/rollup/BOLDUpgradeAction.sol/BOLDUpgradeAction.dbg.json +4 -0
- package/build/contracts/src/rollup/BOLDUpgradeAction.sol/BOLDUpgradeAction.json +807 -0
- package/build/contracts/src/rollup/BOLDUpgradeAction.sol/ConstantArrayStorage.dbg.json +4 -0
- package/build/contracts/src/rollup/BOLDUpgradeAction.sol/ConstantArrayStorage.json +35 -0
- package/build/contracts/src/rollup/BOLDUpgradeAction.sol/IOldRollup.dbg.json +4 -0
- package/build/contracts/src/rollup/BOLDUpgradeAction.sol/IOldRollup.json +361 -0
- package/build/contracts/src/rollup/BOLDUpgradeAction.sol/IOldRollupAdmin.dbg.json +4 -0
- package/build/contracts/src/rollup/BOLDUpgradeAction.sol/IOldRollupAdmin.json +38 -0
- package/build/contracts/src/rollup/BOLDUpgradeAction.sol/ISeqInboxPostUpgradeInit.dbg.json +4 -0
- package/build/contracts/src/rollup/BOLDUpgradeAction.sol/ISeqInboxPostUpgradeInit.json +41 -0
- package/build/contracts/src/rollup/BOLDUpgradeAction.sol/RollupReader.dbg.json +4 -0
- package/build/contracts/src/rollup/BOLDUpgradeAction.sol/RollupReader.json +385 -0
- package/build/contracts/src/rollup/BOLDUpgradeAction.sol/StateHashPreImageLookup.dbg.json +4 -0
- package/build/contracts/src/rollup/BOLDUpgradeAction.sol/StateHashPreImageLookup.json +203 -0
- package/build/contracts/src/rollup/BridgeCreator.sol/BridgeCreator.dbg.json +1 -1
- package/build/contracts/src/rollup/BridgeCreator.sol/BridgeCreator.json +62 -10
- package/build/contracts/src/rollup/DeployHelper.sol/DeployHelper.dbg.json +1 -1
- package/build/contracts/src/rollup/DeployHelper.sol/DeployHelper.json +2 -2
- package/build/contracts/src/rollup/ERC20RollupEventInbox.sol/ERC20RollupEventInbox.dbg.json +1 -1
- package/build/contracts/src/rollup/ERC20RollupEventInbox.sol/ERC20RollupEventInbox.json +2 -2
- package/build/contracts/src/rollup/FactoryDeployerHelper.sol/FactoryDeployerHelper.dbg.json +1 -1
- package/build/contracts/src/rollup/FactoryDeployerHelper.sol/FactoryDeployerHelper.json +2 -2
- package/build/contracts/src/rollup/FactoryDeployerHelper.sol/IDeployHelper.dbg.json +1 -1
- package/build/contracts/src/rollup/FactoryDeployerHelper.sol/IERC20.dbg.json +1 -1
- package/build/contracts/src/rollup/FactoryDeployerHelper.sol/IERC20Bridge.dbg.json +1 -1
- package/build/contracts/src/rollup/FactoryDeployerHelper.sol/IInboxBase.dbg.json +1 -1
- package/build/contracts/src/rollup/IRollupAdmin.sol/IRollupAdmin.dbg.json +1 -1
- package/build/contracts/src/rollup/IRollupAdmin.sol/IRollupAdmin.json +473 -99
- package/build/contracts/src/rollup/IRollupCore.sol/IRollupCore.dbg.json +1 -1
- package/build/contracts/src/rollup/IRollupCore.sol/IRollupCore.json +315 -221
- package/build/contracts/src/rollup/IRollupEventInbox.sol/IRollupEventInbox.dbg.json +1 -1
- package/build/contracts/src/rollup/IRollupLogic.sol/IRollupUser.dbg.json +1 -1
- package/build/contracts/src/rollup/IRollupLogic.sol/IRollupUser.json +678 -499
- package/build/contracts/src/rollup/RollupAdminLogic.sol/RollupAdminLogic.dbg.json +1 -1
- package/build/contracts/src/rollup/RollupAdminLogic.sol/RollupAdminLogic.json +806 -435
- package/build/contracts/src/rollup/RollupCore.sol/RollupCore.dbg.json +1 -1
- package/build/contracts/src/rollup/RollupCore.sol/RollupCore.json +323 -235
- package/build/contracts/src/rollup/RollupCreator.sol/RollupCreator.dbg.json +1 -1
- package/build/contracts/src/rollup/RollupCreator.sol/RollupCreator.json +98 -36
- package/build/contracts/src/rollup/RollupEventInbox.sol/RollupEventInbox.dbg.json +1 -1
- package/build/contracts/src/rollup/RollupEventInbox.sol/RollupEventInbox.json +2 -2
- package/build/contracts/src/rollup/RollupLib.sol/RollupLib.dbg.json +1 -1
- package/build/contracts/src/rollup/RollupLib.sol/RollupLib.json +2 -2
- package/build/contracts/src/rollup/RollupProxy.sol/RollupProxy.dbg.json +1 -1
- package/build/contracts/src/rollup/RollupProxy.sol/RollupProxy.json +97 -16
- package/build/contracts/src/rollup/RollupUserLogic.sol/RollupUserLogic.dbg.json +1 -1
- package/build/contracts/src/rollup/RollupUserLogic.sol/RollupUserLogic.json +924 -535
- package/build/contracts/src/rollup/ValidatorWallet.sol/ValidatorWallet.dbg.json +1 -1
- package/build/contracts/src/rollup/ValidatorWallet.sol/ValidatorWallet.json +15 -43
- package/build/contracts/src/rollup/ValidatorWalletCreator.sol/ValidatorWalletCreator.dbg.json +1 -1
- package/build/contracts/src/rollup/ValidatorWalletCreator.sol/ValidatorWalletCreator.json +2 -2
- package/build/contracts/src/state/Deserialize.sol/Deserialize.dbg.json +1 -1
- package/build/contracts/src/state/Deserialize.sol/Deserialize.json +2 -2
- package/build/contracts/src/state/GlobalState.sol/GlobalStateLib.dbg.json +1 -1
- package/build/contracts/src/state/GlobalState.sol/GlobalStateLib.json +2 -2
- package/build/contracts/src/state/Instructions.sol/Instructions.dbg.json +1 -1
- package/build/contracts/src/state/Instructions.sol/Instructions.json +2 -2
- package/build/contracts/src/state/Machine.sol/MachineLib.dbg.json +1 -1
- package/build/contracts/src/state/Machine.sol/MachineLib.json +2 -2
- package/build/contracts/src/state/MerkleProof.sol/MerkleProofLib.dbg.json +1 -1
- package/build/contracts/src/state/MerkleProof.sol/MerkleProofLib.json +2 -2
- package/build/contracts/src/state/Module.sol/ModuleLib.dbg.json +1 -1
- package/build/contracts/src/state/Module.sol/ModuleLib.json +2 -2
- package/build/contracts/src/state/ModuleMemory.sol/ModuleMemoryLib.dbg.json +1 -1
- package/build/contracts/src/state/ModuleMemory.sol/ModuleMemoryLib.json +2 -2
- package/build/contracts/src/state/ModuleMemoryCompact.sol/ModuleMemoryCompactLib.dbg.json +1 -1
- package/build/contracts/src/state/ModuleMemoryCompact.sol/ModuleMemoryCompactLib.json +2 -2
- package/build/contracts/src/state/MultiStack.sol/MultiStackLib.dbg.json +1 -1
- package/build/contracts/src/state/MultiStack.sol/MultiStackLib.json +2 -2
- package/build/contracts/src/state/PcArray.sol/PcArrayLib.dbg.json +1 -1
- package/build/contracts/src/state/PcArray.sol/PcArrayLib.json +2 -2
- package/build/contracts/src/state/StackFrame.sol/StackFrameLib.dbg.json +1 -1
- package/build/contracts/src/state/StackFrame.sol/StackFrameLib.json +2 -2
- package/build/contracts/src/state/Value.sol/ValueLib.dbg.json +1 -1
- package/build/contracts/src/state/Value.sol/ValueLib.json +2 -2
- package/build/contracts/src/state/ValueArray.sol/ValueArrayLib.dbg.json +1 -1
- package/build/contracts/src/state/ValueArray.sol/ValueArrayLib.json +2 -2
- package/build/contracts/src/state/ValueStack.sol/ValueStackLib.dbg.json +1 -1
- package/build/contracts/src/state/ValueStack.sol/ValueStackLib.json +2 -2
- package/build/contracts/src/test-helpers/BridgeTester.sol/BridgeTester.dbg.json +1 -1
- package/build/contracts/src/test-helpers/BridgeTester.sol/BridgeTester.json +15 -2
- package/build/contracts/src/test-helpers/CryptographyPrimitivesTester.sol/CryptographyPrimitivesTester.dbg.json +1 -1
- package/build/contracts/src/test-helpers/CryptographyPrimitivesTester.sol/CryptographyPrimitivesTester.json +2 -2
- package/build/contracts/src/test-helpers/EthVault.sol/EthVault.dbg.json +1 -1
- package/build/contracts/src/test-helpers/EthVault.sol/EthVault.json +2 -2
- package/build/contracts/src/test-helpers/MessageTester.sol/MessageTester.dbg.json +1 -1
- package/build/contracts/src/test-helpers/MessageTester.sol/MessageTester.json +2 -2
- package/build/contracts/src/test-helpers/OutboxWithoutOptTester.sol/OutboxWithoutOptTester.dbg.json +1 -1
- package/build/contracts/src/test-helpers/OutboxWithoutOptTester.sol/OutboxWithoutOptTester.json +2 -2
- package/build/contracts/src/test-helpers/RollupMock.sol/RollupMock.dbg.json +1 -1
- package/build/contracts/src/test-helpers/RollupMock.sol/RollupMock.json +2 -15
- package/build/contracts/src/test-helpers/TestToken.sol/TestToken.dbg.json +1 -1
- package/build/contracts/src/test-helpers/TestToken.sol/TestToken.json +2 -2
- package/build/contracts/src/test-helpers/ValueArrayTester.sol/ValueArrayTester.dbg.json +1 -1
- package/build/contracts/src/test-helpers/ValueArrayTester.sol/ValueArrayTester.json +2 -2
- package/out/yul/Reader4844.yul/Reader4844.json +1 -1
- package/package.json +15 -5
- package/src/assertionStakingPool/AbsBoldStakingPool.sol +66 -0
- package/src/assertionStakingPool/AssertionStakingPool.sol +70 -0
- package/src/assertionStakingPool/AssertionStakingPoolCreator.sol +35 -0
- package/src/assertionStakingPool/EdgeStakingPool.sol +57 -0
- package/src/assertionStakingPool/EdgeStakingPoolCreator.sol +34 -0
- package/src/assertionStakingPool/StakingPoolCreatorUtils.sol +25 -0
- package/src/assertionStakingPool/interfaces/IAbsBoldStakingPool.sol +41 -0
- package/src/assertionStakingPool/interfaces/IAssertionStakingPool.sol +36 -0
- package/src/assertionStakingPool/interfaces/IAssertionStakingPoolCreator.sol +31 -0
- package/src/assertionStakingPool/interfaces/IEdgeStakingPool.sol +27 -0
- package/src/assertionStakingPool/interfaces/IEdgeStakingPoolCreator.sol +28 -0
- package/src/bridge/AbsBridge.sol +38 -48
- package/src/bridge/AbsInbox.sol +88 -97
- package/src/bridge/AbsOutbox.sol +23 -37
- package/src/bridge/Bridge.sol +6 -4
- package/src/bridge/DelayBuffer.sol +123 -0
- package/src/bridge/DelayBufferTypes.sol +38 -0
- package/src/bridge/ERC20Bridge.sol +8 -4
- package/src/bridge/ERC20Inbox.sol +46 -53
- package/src/bridge/ERC20Outbox.sol +7 -3
- package/src/bridge/GasRefunder.sol +38 -24
- package/src/bridge/IBridge.sol +30 -21
- package/src/bridge/IERC20Bridge.sol +1 -1
- package/src/bridge/IERC20Inbox.sol +4 -2
- package/src/bridge/IEthBridge.sol +4 -2
- package/src/bridge/IInbox.sol +4 -2
- package/src/bridge/IInboxBase.sol +17 -13
- package/src/bridge/IOutbox.sol +13 -8
- package/src/bridge/ISequencerInbox.sol +118 -13
- package/src/bridge/Inbox.sol +131 -151
- package/src/bridge/Messages.sol +48 -18
- package/src/bridge/Outbox.sol +6 -2
- package/src/bridge/SequencerInbox.sol +339 -274
- package/src/chain/CacheManager.sol +49 -18
- package/src/challengeV2/EdgeChallengeManager.sol +783 -0
- package/src/challengeV2/IAssertionChain.sol +39 -0
- package/src/challengeV2/libraries/ArrayUtilsLib.sol +61 -0
- package/src/challengeV2/libraries/ChallengeEdgeLib.sol +333 -0
- package/src/challengeV2/libraries/ChallengeErrors.sol +108 -0
- package/src/challengeV2/libraries/EdgeChallengeManagerLib.sol +930 -0
- package/src/challengeV2/libraries/Enums.sol +26 -0
- package/src/challengeV2/libraries/MerkleTreeAccumulatorLib.sol +390 -0
- package/src/challengeV2/libraries/UintUtilsLib.sol +74 -0
- package/src/libraries/AddressAliasHelper.sol +6 -2
- package/src/libraries/AdminFallbackProxy.sol +8 -4
- package/src/libraries/ArbitrumChecker.sol +3 -4
- package/src/libraries/CryptographyPrimitives.sol +39 -46
- package/src/libraries/DecimalsConverterHelper.sol +2 -4
- package/src/libraries/DoubleLogicUUPSUpgradeable.sol +10 -7
- package/src/libraries/Error.sol +18 -3
- package/src/libraries/GasRefundEnabled.sol +3 -4
- package/src/libraries/MerkleLib.sol +6 -5
- package/src/libraries/UUPSNotUpgradeable.sol +2 -4
- package/src/mocks/BridgeStub.sol +50 -48
- package/src/mocks/BridgeUnproxied.sol +2 -0
- package/src/mocks/InboxStub.sol +22 -17
- package/src/mocks/MerkleTreeAccess.sol +72 -0
- package/src/mocks/MockRollupEventInbox.sol +59 -0
- package/src/mocks/MultiCallTest.sol +3 -1
- package/src/mocks/PendingBlkTimeAndNrAdvanceCheck.sol +3 -1
- package/src/mocks/Program.sol +9 -7
- package/src/mocks/SequencerInboxBlobMock.sol +38 -0
- package/src/mocks/SequencerInboxStub.sol +9 -12
- package/src/mocks/Simple.sol +13 -25
- package/src/mocks/SimpleCacheManager.sol +10 -3
- package/src/mocks/SimpleOneStepProofEntry.sol +60 -0
- package/src/mocks/SimpleProxy.sol +3 -1
- package/src/mocks/TestWETH9.sol +30 -0
- package/src/mocks/UpgradeExecutorMock.sol +10 -17
- package/src/node-interface/NodeInterface.sol +23 -22
- package/src/node-interface/NodeInterfaceDebug.sol +5 -3
- package/src/osp/HashProofHelper.sol +9 -10
- package/src/osp/IOneStepProofEntry.sol +14 -9
- package/src/osp/IOneStepProver.sol +1 -0
- package/src/osp/OneStepProofEntry.sol +63 -54
- package/src/osp/OneStepProver0.sol +14 -27
- package/src/osp/OneStepProverHostIo.sol +31 -58
- package/src/osp/OneStepProverMath.sol +15 -23
- package/src/osp/OneStepProverMemory.sol +9 -23
- package/src/precompiles/ArbAddressTable.sol +19 -9
- package/src/precompiles/ArbAggregator.sol +12 -4
- package/src/precompiles/ArbBLS.sol +1 -3
- package/src/precompiles/ArbDebug.sol +5 -11
- package/src/precompiles/ArbFunctionTable.sol +7 -10
- package/src/precompiles/ArbGasInfo.sol +9 -43
- package/src/precompiles/ArbInfo.sol +6 -2
- package/src/precompiles/ArbOwner.sol +101 -34
- package/src/precompiles/ArbOwnerPublic.sol +6 -2
- package/src/precompiles/ArbRetryableTx.sol +15 -5
- package/src/precompiles/ArbStatistics.sol +1 -8
- package/src/precompiles/ArbSys.sol +16 -18
- package/src/precompiles/ArbWasm.sol +24 -14
- package/src/precompiles/ArbWasmCache.sol +15 -5
- package/src/precompiles/ArbosTest.sol +3 -1
- package/src/rollup/AbsRollupEventInbox.sol +15 -16
- package/src/rollup/Assertion.sol +100 -0
- package/src/rollup/AssertionState.sol +29 -0
- package/src/rollup/BOLDUpgradeAction.sol +631 -0
- package/src/rollup/BridgeCreator.sol +42 -15
- package/src/rollup/Config.sol +15 -7
- package/src/rollup/DeployHelper.sol +12 -31
- package/src/rollup/ERC20RollupEventInbox.sol +8 -9
- package/src/rollup/FactoryDeployerHelper.sol +8 -10
- package/src/rollup/IRollupAdmin.sol +127 -45
- package/src/rollup/IRollupCore.sol +64 -84
- package/src/rollup/IRollupEventInbox.sol +3 -1
- package/src/rollup/IRollupLogic.sol +35 -72
- package/src/rollup/RollupAdminLogic.sol +224 -203
- package/src/rollup/RollupCore.sol +407 -428
- package/src/rollup/RollupCreator.sol +88 -75
- package/src/rollup/RollupEventInbox.sol +7 -7
- package/src/rollup/RollupLib.sol +50 -86
- package/src/rollup/RollupProxy.sol +8 -12
- package/src/rollup/RollupUserLogic.sol +279 -644
- package/src/rollup/ValidatorUtils.sol +0 -242
- package/src/rollup/ValidatorWallet.sol +22 -38
- package/src/rollup/ValidatorWalletCreator.sol +8 -8
- package/src/state/Deserialize.sol +74 -96
- package/src/state/GlobalState.sol +74 -20
- package/src/state/Instructions.sol +4 -3
- package/src/state/Machine.sol +18 -19
- package/src/state/Module.sol +14 -13
- package/src/state/ModuleMemory.sol +6 -25
- package/src/state/ModuleMemoryCompact.sol +3 -1
- package/src/state/MultiStack.sol +16 -20
- package/src/state/PcArray.sol +7 -7
- package/src/state/StackFrame.sol +21 -14
- package/src/state/Value.sol +18 -6
- package/src/state/ValueArray.sol +7 -7
- package/src/state/ValueStack.sol +9 -3
- package/src/test-helpers/BridgeTester.sol +32 -42
- package/src/test-helpers/CryptographyPrimitivesTester.sol +12 -13
- package/src/test-helpers/EthVault.sol +4 -2
- package/src/test-helpers/InterfaceCompatibilityTester.sol +1 -1
- package/src/test-helpers/MessageTester.sol +3 -10
- package/src/test-helpers/OutboxWithoutOptTester.sol +12 -19
- package/src/test-helpers/RollupMock.sol +3 -7
- package/src/test-helpers/TestToken.sol +4 -2
- package/build/contracts/@openzeppelin/contracts-upgradeable/token/ERC20/IERC20Upgradeable.sol/IERC20Upgradeable.dbg.json +0 -4
- package/build/contracts/src/challenge/ChallengeLib.sol/ChallengeLib.dbg.json +0 -4
- package/build/contracts/src/challenge/ChallengeManager.sol/ChallengeManager.dbg.json +0 -4
- package/build/contracts/src/challenge/ChallengeManager.sol/ChallengeManager.json +0 -746
- package/build/contracts/src/challenge/IChallengeManager.sol/IChallengeManager.dbg.json +0 -4
- package/build/contracts/src/challenge/IChallengeManager.sol/IChallengeManager.json +0 -441
- package/build/contracts/src/challenge/IChallengeResultReceiver.sol/IChallengeResultReceiver.dbg.json +0 -4
- package/build/contracts/src/challenge/IChallengeResultReceiver.sol/IChallengeResultReceiver.json +0 -34
- package/build/contracts/src/mocks/MockResultReceiver.sol/MockResultReceiver.dbg.json +0 -4
- package/build/contracts/src/mocks/MockResultReceiver.sol/MockResultReceiver.json +0 -188
- package/build/contracts/src/mocks/SingleExecutionChallenge.sol/SingleExecutionChallenge.dbg.json +0 -4
- package/build/contracts/src/mocks/SingleExecutionChallenge.sol/SingleExecutionChallenge.json +0 -797
- package/build/contracts/src/mocks/TimedOutChallengeManager.sol/TimedOutChallengeManager.dbg.json +0 -4
- package/build/contracts/src/mocks/TimedOutChallengeManager.sol/TimedOutChallengeManager.json +0 -746
- package/build/contracts/src/rollup/IRollupLogic.sol/IRollupUserAbs.dbg.json +0 -4
- package/build/contracts/src/rollup/IRollupLogic.sol/IRollupUserAbs.json +0 -1332
- package/build/contracts/src/rollup/IRollupLogic.sol/IRollupUserERC20.dbg.json +0 -4
- package/build/contracts/src/rollup/IRollupLogic.sol/IRollupUserERC20.json +0 -1466
- package/build/contracts/src/rollup/Node.sol/NodeLib.dbg.json +0 -4
- package/build/contracts/src/rollup/RollupUserLogic.sol/AbsRollupUserLogic.dbg.json +0 -4
- package/build/contracts/src/rollup/RollupUserLogic.sol/AbsRollupUserLogic.json +0 -1614
- package/build/contracts/src/rollup/RollupUserLogic.sol/ERC20RollupUserLogic.dbg.json +0 -4
- package/build/contracts/src/rollup/RollupUserLogic.sol/ERC20RollupUserLogic.json +0 -1748
- package/build/contracts/src/rollup/ValidatorUtils.sol/ValidatorUtils.dbg.json +0 -4
- package/build/contracts/src/rollup/ValidatorUtils.sol/ValidatorUtils.json +0 -379
- package/src/challenge/ChallengeLib.sol +0 -88
- package/src/challenge/ChallengeManager.sol +0 -375
- package/src/challenge/IChallengeManager.sol +0 -86
- package/src/challenge/IChallengeResultReceiver.sol +0 -13
- package/src/mocks/MockResultReceiver.sol +0 -59
- package/src/mocks/SingleExecutionChallenge.sol +0 -41
- package/src/mocks/TimedOutChallengeManager.sol +0 -13
- package/src/rollup/Node.sol +0 -113
|
@@ -5,139 +5,173 @@
|
|
|
5
5
|
pragma solidity ^0.8.0;
|
|
6
6
|
|
|
7
7
|
import "@openzeppelin/contracts-upgradeable/security/PausableUpgradeable.sol";
|
|
8
|
+
import "@openzeppelin/contracts-upgradeable/utils/structs/EnumerableSetUpgradeable.sol";
|
|
8
9
|
|
|
9
|
-
import "./
|
|
10
|
+
import "./Assertion.sol";
|
|
10
11
|
import "./RollupLib.sol";
|
|
11
12
|
import "./IRollupEventInbox.sol";
|
|
12
13
|
import "./IRollupCore.sol";
|
|
13
14
|
|
|
14
|
-
import "../
|
|
15
|
+
import "../state/Machine.sol";
|
|
15
16
|
|
|
16
17
|
import "../bridge/ISequencerInbox.sol";
|
|
17
18
|
import "../bridge/IBridge.sol";
|
|
18
19
|
import "../bridge/IOutbox.sol";
|
|
19
|
-
|
|
20
|
-
import "../precompiles/ArbSys.sol";
|
|
21
|
-
|
|
20
|
+
import "../challengeV2/EdgeChallengeManager.sol";
|
|
22
21
|
import "../libraries/ArbitrumChecker.sol";
|
|
23
|
-
import {NO_CHAL_INDEX} from "../libraries/Constants.sol";
|
|
24
22
|
|
|
25
23
|
abstract contract RollupCore is IRollupCore, PausableUpgradeable {
|
|
26
|
-
using
|
|
24
|
+
using AssertionNodeLib for AssertionNode;
|
|
27
25
|
using GlobalStateLib for GlobalState;
|
|
26
|
+
using EnumerableSetUpgradeable for EnumerableSetUpgradeable.AddressSet;
|
|
28
27
|
|
|
29
28
|
// Rollup Config
|
|
30
|
-
uint64 public confirmPeriodBlocks;
|
|
31
|
-
uint64 public extraChallengeTimeBlocks;
|
|
32
29
|
uint256 public chainId;
|
|
30
|
+
|
|
31
|
+
// These 4 config should be stored into the prev and not used directly
|
|
32
|
+
// An assertion can be confirmed after confirmPeriodBlocks when it is unchallenged
|
|
33
|
+
uint64 public confirmPeriodBlocks;
|
|
34
|
+
// The validator whitelist can be dropped permissionlessly once the last confirmed assertion or its first child is at least validatorAfkBlocks old
|
|
35
|
+
uint64 public validatorAfkBlocks;
|
|
36
|
+
|
|
37
|
+
// ------------------------------
|
|
38
|
+
// STAKING
|
|
39
|
+
// ------------------------------
|
|
40
|
+
|
|
41
|
+
// Overall
|
|
42
|
+
// ------------------------------
|
|
43
|
+
// In order to create a new assertion the validator creating it must be staked. Only one stake
|
|
44
|
+
// is needed per consistent lineage of assertions, so additional stakes must be placed when
|
|
45
|
+
// lineages diverge.
|
|
46
|
+
// As an example, for the following chain only one stake would be locked up in the C assertion
|
|
47
|
+
// A -- B -- C
|
|
48
|
+
// However for the following chain 2 stakes would be locked up, in C and in D
|
|
49
|
+
// A -- B -- C
|
|
50
|
+
// \-- D
|
|
51
|
+
// Since we know that only one assertion chain can be correct, we only need one stake available
|
|
52
|
+
// to be refunded at any one time, and any more than one stake can be immediately confiscated.
|
|
53
|
+
// So in the above situation although 2 stakes are not available to be withdrawn as they are locked
|
|
54
|
+
// by C and D, only 1 stake needs to remain in the contract since one of the stakes will eventually
|
|
55
|
+
// be confiscated anyway.
|
|
56
|
+
// In practice, what we do here is increase the withdrawable amount of an escrow address that is
|
|
57
|
+
// expected to be controlled by the rollup owner, whenever the lineage forks.
|
|
58
|
+
|
|
59
|
+
// Moving stake
|
|
60
|
+
// ------------------------------
|
|
61
|
+
// Since we only need one stake per lineage we can lock the stake of the validator that last extended that
|
|
62
|
+
// lineage. All other stakes within that lineage are then free to be moved to other lineages, or be withdrawn.
|
|
63
|
+
// Additionally, it's inconsistent for a validator to stake on two different lineages, and as a validator
|
|
64
|
+
// should only need to have one stake in the system at any one time.
|
|
65
|
+
// In order to create a new assertion a validator needs to have free stake. Since stake is freed from an assertion
|
|
66
|
+
// when another assertion builds on it, we know that if the assertion that was last staked on by a validator
|
|
67
|
+
// has children, then that validator has free stake. Likewise, if the last staked assertion does not have children
|
|
68
|
+
// but it is the parent of the assertion the validator is trying to create, then we know that by the time the assertion
|
|
69
|
+
// is created it will have children, so we can allow this condition as well.
|
|
70
|
+
|
|
71
|
+
// Updating stake amount
|
|
72
|
+
// ------------------------------
|
|
73
|
+
// The stake required to create an assertion can be updated by the rollup owner. A required stake value is stored on each
|
|
74
|
+
// assertion, and shows how much stake is required to create the next assertion. Since we only store the last
|
|
75
|
+
// assertion made by a validator, we don't know if it has previously staked on lower/higher amounts and
|
|
76
|
+
// therefore offer partial withdrawals due to this difference. Instead we enforce that either all of the
|
|
77
|
+
// validators stake is locked, or none of it.
|
|
33
78
|
uint256 public baseStake;
|
|
79
|
+
|
|
34
80
|
bytes32 public wasmModuleRoot;
|
|
81
|
+
// When there is a challenge, we trust the challenge manager to determine the winner
|
|
82
|
+
IEdgeChallengeManager public challengeManager;
|
|
83
|
+
|
|
84
|
+
// If an assertion was challenged we leave an additional period after it could have completed
|
|
85
|
+
// so that the result of a challenge is observable widely before it causes an assertion to be confirmed
|
|
86
|
+
uint64 public challengeGracePeriodBlocks;
|
|
35
87
|
|
|
36
88
|
IInboxBase public inbox;
|
|
37
89
|
IBridge public bridge;
|
|
38
90
|
IOutbox public outbox;
|
|
39
|
-
ISequencerInbox public sequencerInbox;
|
|
40
91
|
IRollupEventInbox public rollupEventInbox;
|
|
41
|
-
IChallengeManager public override challengeManager;
|
|
42
92
|
|
|
43
|
-
// misc useful contracts when interacting with the rollup
|
|
44
|
-
address public validatorUtils;
|
|
45
93
|
address public validatorWalletCreator;
|
|
46
94
|
|
|
47
|
-
//
|
|
95
|
+
// only 1 child can be confirmed, the excess/loser stake will be sent to this address
|
|
48
96
|
address public loserStakeEscrow;
|
|
49
97
|
address public stakeToken;
|
|
50
98
|
uint256 public minimumAssertionPeriod;
|
|
51
99
|
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
// Stakers become Zombies after losing a challenge
|
|
55
|
-
struct Zombie {
|
|
56
|
-
address stakerAddress;
|
|
57
|
-
uint64 latestStakedNode;
|
|
58
|
-
}
|
|
100
|
+
EnumerableSetUpgradeable.AddressSet internal validators;
|
|
59
101
|
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
uint64 private _latestNodeCreated;
|
|
63
|
-
uint64 private _lastStakeBlock;
|
|
64
|
-
mapping(uint64 => Node) private _nodes;
|
|
65
|
-
mapping(uint64 => mapping(address => bool)) private _nodeStakers;
|
|
102
|
+
bytes32 private _latestConfirmed;
|
|
103
|
+
mapping(bytes32 => AssertionNode) private _assertions;
|
|
66
104
|
|
|
67
105
|
address[] private _stakerList;
|
|
68
106
|
mapping(address => Staker) public _stakerMap;
|
|
69
107
|
|
|
70
|
-
Zombie[] private _zombies;
|
|
71
|
-
|
|
72
108
|
mapping(address => uint256) private _withdrawableFunds;
|
|
73
109
|
uint256 public totalWithdrawableFunds;
|
|
74
110
|
uint256 public rollupDeploymentBlock;
|
|
75
111
|
|
|
76
|
-
// The node number of the initial node
|
|
77
|
-
uint64 internal constant GENESIS_NODE = 0;
|
|
78
|
-
|
|
79
112
|
bool public validatorWhitelistDisabled;
|
|
80
113
|
address public anyTrustFastConfirmer;
|
|
81
114
|
|
|
82
115
|
// If the chain this RollupCore is deployed on is an Arbitrum chain.
|
|
83
116
|
bool internal immutable _hostChainIsArbitrum = ArbitrumChecker.runningOnArbitrum();
|
|
84
117
|
// If the chain RollupCore is deployed on, this will contain the ArbSys.blockNumber() at each node's creation.
|
|
85
|
-
mapping(
|
|
118
|
+
mapping(bytes32 => uint256) internal _assertionCreatedAtArbSysBlock;
|
|
119
|
+
|
|
120
|
+
function sequencerInbox() public view virtual returns (ISequencerInbox) {
|
|
121
|
+
return ISequencerInbox(bridge.sequencerInbox());
|
|
122
|
+
}
|
|
86
123
|
|
|
87
124
|
/**
|
|
88
|
-
* @notice Get a storage reference to the
|
|
89
|
-
* @
|
|
90
|
-
* @
|
|
125
|
+
* @notice Get a storage reference to the Assertion for the given assertion hash
|
|
126
|
+
* @dev The assertion may not exists
|
|
127
|
+
* @param assertionHash Id of the assertion
|
|
128
|
+
* @return Assertion struct
|
|
91
129
|
*/
|
|
92
|
-
function
|
|
93
|
-
|
|
130
|
+
function getAssertionStorage(
|
|
131
|
+
bytes32 assertionHash
|
|
132
|
+
) internal view returns (AssertionNode storage) {
|
|
133
|
+
require(assertionHash != bytes32(0), "ASSERTION_ID_CANNOT_BE_ZERO");
|
|
134
|
+
return _assertions[assertionHash];
|
|
94
135
|
}
|
|
95
136
|
|
|
96
137
|
/**
|
|
97
|
-
* @notice Get the
|
|
138
|
+
* @notice Get the Assertion for the given index.
|
|
98
139
|
*/
|
|
99
|
-
function
|
|
100
|
-
|
|
140
|
+
function getAssertion(
|
|
141
|
+
bytes32 assertionHash
|
|
142
|
+
) public view override returns (AssertionNode memory) {
|
|
143
|
+
return getAssertionStorage(assertionHash);
|
|
101
144
|
}
|
|
102
145
|
|
|
103
146
|
/**
|
|
104
|
-
* @notice Returns the block in which the given
|
|
105
|
-
* Unlike the
|
|
147
|
+
* @notice Returns the block in which the given assertion was created for looking up its creation event.
|
|
148
|
+
* Unlike the assertion's createdAtBlock field, this will be the ArbSys blockNumber if the host chain is an Arbitrum chain.
|
|
106
149
|
* That means that the block number returned for this is usable for event queries.
|
|
107
|
-
* This function will revert if the given
|
|
150
|
+
* This function will revert if the given assertion hash does not exist.
|
|
108
151
|
* @dev This function is meant for internal use only and has no stability guarantees.
|
|
109
152
|
*/
|
|
110
|
-
function
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
override
|
|
114
|
-
returns (uint256)
|
|
115
|
-
{
|
|
153
|
+
function getAssertionCreationBlockForLogLookup(
|
|
154
|
+
bytes32 assertionHash
|
|
155
|
+
) external view override returns (uint256) {
|
|
116
156
|
if (_hostChainIsArbitrum) {
|
|
117
|
-
uint256 blockNum =
|
|
118
|
-
require(blockNum > 0, "
|
|
157
|
+
uint256 blockNum = _assertionCreatedAtArbSysBlock[assertionHash];
|
|
158
|
+
require(blockNum > 0, "NO_ASSERTION");
|
|
119
159
|
return blockNum;
|
|
120
160
|
} else {
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
return
|
|
161
|
+
AssertionNode storage assertion = getAssertionStorage(assertionHash);
|
|
162
|
+
assertion.requireExists();
|
|
163
|
+
return assertion.createdAtBlock;
|
|
124
164
|
}
|
|
125
165
|
}
|
|
126
166
|
|
|
127
|
-
/**
|
|
128
|
-
* @notice Check if the specified node has been staked on by the provided staker.
|
|
129
|
-
* Only accurate at the latest confirmed node and afterwards.
|
|
130
|
-
*/
|
|
131
|
-
function nodeHasStaker(uint64 nodeNum, address staker) public view override returns (bool) {
|
|
132
|
-
return _nodeStakers[nodeNum][staker];
|
|
133
|
-
}
|
|
134
|
-
|
|
135
167
|
/**
|
|
136
168
|
* @notice Get the address of the staker at the given index
|
|
137
169
|
* @param stakerNum Index of the staker
|
|
138
170
|
* @return Address of the staker
|
|
139
171
|
*/
|
|
140
|
-
function getStakerAddress(
|
|
172
|
+
function getStakerAddress(
|
|
173
|
+
uint64 stakerNum
|
|
174
|
+
) external view override returns (address) {
|
|
141
175
|
return _stakerList[stakerNum];
|
|
142
176
|
}
|
|
143
177
|
|
|
@@ -146,45 +180,43 @@ abstract contract RollupCore is IRollupCore, PausableUpgradeable {
|
|
|
146
180
|
* @param staker Staker address to check
|
|
147
181
|
* @return True or False for whether the staker was staked
|
|
148
182
|
*/
|
|
149
|
-
function isStaked(
|
|
183
|
+
function isStaked(
|
|
184
|
+
address staker
|
|
185
|
+
) public view override returns (bool) {
|
|
150
186
|
return _stakerMap[staker].isStaked;
|
|
151
187
|
}
|
|
152
188
|
|
|
153
189
|
/**
|
|
154
|
-
* @notice
|
|
155
|
-
* which includes if the staker is staked on a descendent of the latest confirmed node.
|
|
156
|
-
* @param staker Staker address to check
|
|
157
|
-
* @return True or False for whether the staker was staked
|
|
158
|
-
*/
|
|
159
|
-
function isStakedOnLatestConfirmed(address staker) public view returns (bool) {
|
|
160
|
-
return _stakerMap[staker].isStaked && nodeHasStaker(_latestConfirmed, staker);
|
|
161
|
-
}
|
|
162
|
-
|
|
163
|
-
/**
|
|
164
|
-
* @notice Get the latest staked node of the given staker
|
|
190
|
+
* @notice Get the latest staked assertion of the given staker
|
|
165
191
|
* @param staker Staker address to lookup
|
|
166
|
-
* @return Latest
|
|
192
|
+
* @return Latest assertion staked of the staker
|
|
167
193
|
*/
|
|
168
|
-
function
|
|
169
|
-
|
|
194
|
+
function latestStakedAssertion(
|
|
195
|
+
address staker
|
|
196
|
+
) public view override returns (bytes32) {
|
|
197
|
+
return _stakerMap[staker].latestStakedAssertion;
|
|
170
198
|
}
|
|
171
199
|
|
|
172
200
|
/**
|
|
173
|
-
* @notice Get the
|
|
201
|
+
* @notice Get the amount staked of the given staker
|
|
174
202
|
* @param staker Staker address to lookup
|
|
175
|
-
* @return
|
|
203
|
+
* @return Amount staked of the staker
|
|
176
204
|
*/
|
|
177
|
-
function
|
|
178
|
-
|
|
205
|
+
function amountStaked(
|
|
206
|
+
address staker
|
|
207
|
+
) public view override returns (uint256) {
|
|
208
|
+
return _stakerMap[staker].amountStaked;
|
|
179
209
|
}
|
|
180
210
|
|
|
181
211
|
/**
|
|
182
|
-
* @notice Get the
|
|
212
|
+
* @notice Get the withdrawal address of the given staker
|
|
183
213
|
* @param staker Staker address to lookup
|
|
184
|
-
* @return
|
|
214
|
+
* @return Withdrawal address of the staker
|
|
185
215
|
*/
|
|
186
|
-
function
|
|
187
|
-
|
|
216
|
+
function withdrawalAddress(
|
|
217
|
+
address staker
|
|
218
|
+
) public view override returns (address) {
|
|
219
|
+
return _stakerMap[staker].withdrawalAddress;
|
|
188
220
|
}
|
|
189
221
|
|
|
190
222
|
/**
|
|
@@ -192,197 +224,99 @@ abstract contract RollupCore is IRollupCore, PausableUpgradeable {
|
|
|
192
224
|
* @param staker Staker address to retrieve
|
|
193
225
|
* @return A structure with information about the requested staker
|
|
194
226
|
*/
|
|
195
|
-
function getStaker(
|
|
227
|
+
function getStaker(
|
|
228
|
+
address staker
|
|
229
|
+
) external view override returns (Staker memory) {
|
|
196
230
|
return _stakerMap[staker];
|
|
197
231
|
}
|
|
198
232
|
|
|
199
|
-
/**
|
|
200
|
-
* @notice Get the original staker address of the zombie at the given index
|
|
201
|
-
* @param zombieNum Index of the zombie to lookup
|
|
202
|
-
* @return Original staker address of the zombie
|
|
203
|
-
*/
|
|
204
|
-
function zombieAddress(uint256 zombieNum) public view override returns (address) {
|
|
205
|
-
return _zombies[zombieNum].stakerAddress;
|
|
206
|
-
}
|
|
207
|
-
|
|
208
|
-
/**
|
|
209
|
-
* @notice Get Latest node that the given zombie at the given index is staked on
|
|
210
|
-
* @param zombieNum Index of the zombie to lookup
|
|
211
|
-
* @return Latest node that the given zombie is staked on
|
|
212
|
-
*/
|
|
213
|
-
function zombieLatestStakedNode(uint256 zombieNum) public view override returns (uint64) {
|
|
214
|
-
return _zombies[zombieNum].latestStakedNode;
|
|
215
|
-
}
|
|
216
|
-
|
|
217
|
-
/**
|
|
218
|
-
* @notice Retrieves stored information about a requested zombie
|
|
219
|
-
* @param zombieNum Index of the zombie to lookup
|
|
220
|
-
* @return A structure with information about the requested staker
|
|
221
|
-
*/
|
|
222
|
-
function getZombieStorage(uint256 zombieNum) internal view returns (Zombie storage) {
|
|
223
|
-
return _zombies[zombieNum];
|
|
224
|
-
}
|
|
225
|
-
|
|
226
|
-
/// @return Current number of un-removed zombies
|
|
227
|
-
function zombieCount() public view override returns (uint256) {
|
|
228
|
-
return _zombies.length;
|
|
229
|
-
}
|
|
230
|
-
|
|
231
|
-
function isZombie(address staker) public view override returns (bool) {
|
|
232
|
-
for (uint256 i = 0; i < _zombies.length; i++) {
|
|
233
|
-
if (staker == _zombies[i].stakerAddress) {
|
|
234
|
-
return true;
|
|
235
|
-
}
|
|
236
|
-
}
|
|
237
|
-
return false;
|
|
238
|
-
}
|
|
239
|
-
|
|
240
233
|
/**
|
|
241
234
|
* @notice Get the amount of funds withdrawable by the given address
|
|
242
235
|
* @param user Address to check the funds of
|
|
243
236
|
* @return Amount of funds withdrawable by user
|
|
244
237
|
*/
|
|
245
|
-
function withdrawableFunds(
|
|
238
|
+
function withdrawableFunds(
|
|
239
|
+
address user
|
|
240
|
+
) external view override returns (uint256) {
|
|
246
241
|
return _withdrawableFunds[user];
|
|
247
242
|
}
|
|
248
243
|
|
|
249
|
-
|
|
250
|
-
|
|
251
|
-
* @dev If all nodes have been resolved, this will be latestNodeCreated + 1
|
|
252
|
-
*/
|
|
253
|
-
function firstUnresolvedNode() public view override returns (uint64) {
|
|
254
|
-
return _firstUnresolvedNode;
|
|
255
|
-
}
|
|
256
|
-
|
|
257
|
-
/// @return Index of the latest confirmed node
|
|
258
|
-
function latestConfirmed() public view override returns (uint64) {
|
|
244
|
+
/// @return Index of the latest confirmed assertion
|
|
245
|
+
function latestConfirmed() public view override returns (bytes32) {
|
|
259
246
|
return _latestConfirmed;
|
|
260
247
|
}
|
|
261
248
|
|
|
262
|
-
/// @return Index of the latest rollup node created
|
|
263
|
-
function latestNodeCreated() public view override returns (uint64) {
|
|
264
|
-
return _latestNodeCreated;
|
|
265
|
-
}
|
|
266
|
-
|
|
267
|
-
/// @return Ethereum block that the most recent stake was created
|
|
268
|
-
function lastStakeBlock() external view override returns (uint64) {
|
|
269
|
-
return _lastStakeBlock;
|
|
270
|
-
}
|
|
271
|
-
|
|
272
249
|
/// @return Number of active stakers currently staked
|
|
273
250
|
function stakerCount() public view override returns (uint64) {
|
|
274
251
|
return uint64(_stakerList.length);
|
|
275
252
|
}
|
|
276
253
|
|
|
277
254
|
/**
|
|
278
|
-
* @notice Initialize the core with an initial
|
|
279
|
-
* @param
|
|
255
|
+
* @notice Initialize the core with an initial assertion
|
|
256
|
+
* @param initialAssertion Initial assertion to start the chain with
|
|
280
257
|
*/
|
|
281
|
-
function initializeCore(
|
|
258
|
+
function initializeCore(
|
|
259
|
+
AssertionNode memory initialAssertion,
|
|
260
|
+
bytes32 assertionHash
|
|
261
|
+
) internal {
|
|
282
262
|
__Pausable_init();
|
|
283
|
-
|
|
284
|
-
|
|
285
|
-
|
|
286
|
-
_nodeCreatedAtArbSysBlock[GENESIS_NODE] = ArbSys(address(100)).arbBlockNumber();
|
|
287
|
-
}
|
|
263
|
+
initialAssertion.status = AssertionStatus.Confirmed;
|
|
264
|
+
_assertions[assertionHash] = initialAssertion;
|
|
265
|
+
_latestConfirmed = assertionHash;
|
|
288
266
|
}
|
|
289
267
|
|
|
290
268
|
/**
|
|
291
|
-
* @
|
|
292
|
-
*
|
|
269
|
+
* @dev This function will validate the parentAssertionHash, confirmState and inboxAcc against the assertionHash
|
|
270
|
+
* and check if the assertionHash is currently pending. If all checks pass, the assertion will be confirmed.
|
|
293
271
|
*/
|
|
294
|
-
function
|
|
295
|
-
|
|
296
|
-
|
|
297
|
-
|
|
298
|
-
|
|
299
|
-
|
|
300
|
-
|
|
272
|
+
function confirmAssertionInternal(
|
|
273
|
+
bytes32 assertionHash,
|
|
274
|
+
bytes32 parentAssertionHash,
|
|
275
|
+
AssertionState calldata confirmState,
|
|
276
|
+
bytes32 inboxAcc
|
|
277
|
+
) internal {
|
|
278
|
+
AssertionNode storage assertion = getAssertionStorage(assertionHash);
|
|
279
|
+
// Check that assertion is pending, this also checks that assertion exists
|
|
280
|
+
require(assertion.status == AssertionStatus.Pending, "NOT_PENDING");
|
|
301
281
|
|
|
302
|
-
|
|
303
|
-
|
|
304
|
-
|
|
305
|
-
|
|
282
|
+
// Authenticate data against assertionHash pre-image
|
|
283
|
+
require(
|
|
284
|
+
assertionHash
|
|
285
|
+
== RollupLib.assertionHash({
|
|
286
|
+
parentAssertionHash: parentAssertionHash,
|
|
287
|
+
afterState: confirmState,
|
|
288
|
+
inboxAcc: inboxAcc
|
|
289
|
+
}),
|
|
290
|
+
"CONFIRM_DATA"
|
|
291
|
+
);
|
|
306
292
|
|
|
307
|
-
|
|
308
|
-
|
|
309
|
-
bytes32 blockHash,
|
|
310
|
-
bytes32 sendRoot
|
|
311
|
-
) internal {
|
|
312
|
-
Node storage node = getNodeStorage(nodeNum);
|
|
313
|
-
// Authenticate data against node's confirm data pre-image
|
|
314
|
-
require(node.confirmData == RollupLib.confirmHash(blockHash, sendRoot), "CONFIRM_DATA");
|
|
293
|
+
bytes32 blockHash = confirmState.globalState.getBlockHash();
|
|
294
|
+
bytes32 sendRoot = confirmState.globalState.getSendRoot();
|
|
315
295
|
|
|
316
296
|
// trusted external call to outbox
|
|
317
297
|
outbox.updateSendRoot(sendRoot, blockHash);
|
|
318
298
|
|
|
319
|
-
_latestConfirmed =
|
|
320
|
-
|
|
299
|
+
_latestConfirmed = assertionHash;
|
|
300
|
+
assertion.status = AssertionStatus.Confirmed;
|
|
321
301
|
|
|
322
|
-
emit
|
|
302
|
+
emit AssertionConfirmed(assertionHash, blockHash, sendRoot);
|
|
323
303
|
}
|
|
324
304
|
|
|
325
305
|
/**
|
|
326
|
-
* @notice Create a new stake at latest confirmed
|
|
306
|
+
* @notice Create a new stake at latest confirmed assertion
|
|
327
307
|
* @param stakerAddress Address of the new staker
|
|
328
308
|
* @param depositAmount Stake amount of the new staker
|
|
329
309
|
*/
|
|
330
|
-
function createNewStake(
|
|
310
|
+
function createNewStake(
|
|
311
|
+
address stakerAddress,
|
|
312
|
+
uint256 depositAmount,
|
|
313
|
+
address _withdrawalAddress
|
|
314
|
+
) internal {
|
|
331
315
|
uint64 stakerIndex = uint64(_stakerList.length);
|
|
332
316
|
_stakerList.push(stakerAddress);
|
|
333
|
-
_stakerMap[stakerAddress] =
|
|
334
|
-
depositAmount,
|
|
335
|
-
|
|
336
|
-
_latestConfirmed,
|
|
337
|
-
NO_CHAL_INDEX, // new staker is not in challenge
|
|
338
|
-
true
|
|
339
|
-
);
|
|
340
|
-
_nodeStakers[_latestConfirmed][stakerAddress] = true;
|
|
341
|
-
_lastStakeBlock = uint64(block.number);
|
|
342
|
-
emit UserStakeUpdated(stakerAddress, 0, depositAmount);
|
|
343
|
-
}
|
|
344
|
-
|
|
345
|
-
/**
|
|
346
|
-
* @notice Check to see whether the two stakers are in the same challenge
|
|
347
|
-
* @param stakerAddress1 Address of the first staker
|
|
348
|
-
* @param stakerAddress2 Address of the second staker
|
|
349
|
-
* @return Address of the challenge that the two stakers are in
|
|
350
|
-
*/
|
|
351
|
-
function inChallenge(address stakerAddress1, address stakerAddress2)
|
|
352
|
-
internal
|
|
353
|
-
view
|
|
354
|
-
returns (uint64)
|
|
355
|
-
{
|
|
356
|
-
Staker storage staker1 = _stakerMap[stakerAddress1];
|
|
357
|
-
Staker storage staker2 = _stakerMap[stakerAddress2];
|
|
358
|
-
uint64 challenge = staker1.currentChallenge;
|
|
359
|
-
require(challenge != NO_CHAL_INDEX, "NO_CHAL");
|
|
360
|
-
require(challenge == staker2.currentChallenge, "DIFF_IN_CHAL");
|
|
361
|
-
return challenge;
|
|
362
|
-
}
|
|
363
|
-
|
|
364
|
-
/**
|
|
365
|
-
* @notice Make the given staker as not being in a challenge
|
|
366
|
-
* @param stakerAddress Address of the staker to remove from a challenge
|
|
367
|
-
*/
|
|
368
|
-
function clearChallenge(address stakerAddress) internal {
|
|
369
|
-
Staker storage staker = _stakerMap[stakerAddress];
|
|
370
|
-
staker.currentChallenge = NO_CHAL_INDEX;
|
|
371
|
-
}
|
|
372
|
-
|
|
373
|
-
/**
|
|
374
|
-
* @notice Mark both the given stakers as engaged in the challenge
|
|
375
|
-
* @param staker1 Address of the first staker
|
|
376
|
-
* @param staker2 Address of the second staker
|
|
377
|
-
* @param challenge Address of the challenge both stakers are now in
|
|
378
|
-
*/
|
|
379
|
-
function challengeStarted(
|
|
380
|
-
address staker1,
|
|
381
|
-
address staker2,
|
|
382
|
-
uint64 challenge
|
|
383
|
-
) internal {
|
|
384
|
-
_stakerMap[staker1].currentChallenge = challenge;
|
|
385
|
-
_stakerMap[staker2].currentChallenge = challenge;
|
|
317
|
+
_stakerMap[stakerAddress] =
|
|
318
|
+
Staker(depositAmount, _latestConfirmed, stakerIndex, true, _withdrawalAddress);
|
|
319
|
+
emit UserStakeUpdated(stakerAddress, _withdrawalAddress, 0, depositAmount);
|
|
386
320
|
}
|
|
387
321
|
|
|
388
322
|
/**
|
|
@@ -395,7 +329,7 @@ abstract contract RollupCore is IRollupCore, PausableUpgradeable {
|
|
|
395
329
|
uint256 initialStaked = staker.amountStaked;
|
|
396
330
|
uint256 finalStaked = initialStaked + amountAdded;
|
|
397
331
|
staker.amountStaked = finalStaked;
|
|
398
|
-
emit UserStakeUpdated(stakerAddress, initialStaked, finalStaked);
|
|
332
|
+
emit UserStakeUpdated(stakerAddress, staker.withdrawalAddress, initialStaked, finalStaked);
|
|
399
333
|
}
|
|
400
334
|
|
|
401
335
|
/**
|
|
@@ -406,109 +340,30 @@ abstract contract RollupCore is IRollupCore, PausableUpgradeable {
|
|
|
406
340
|
*/
|
|
407
341
|
function reduceStakeTo(address stakerAddress, uint256 target) internal returns (uint256) {
|
|
408
342
|
Staker storage staker = _stakerMap[stakerAddress];
|
|
343
|
+
address _withdrawalAddress = staker.withdrawalAddress;
|
|
409
344
|
uint256 current = staker.amountStaked;
|
|
410
345
|
require(target <= current, "TOO_LITTLE_STAKE");
|
|
411
346
|
uint256 amountWithdrawn = current - target;
|
|
412
347
|
staker.amountStaked = target;
|
|
413
|
-
increaseWithdrawableFunds(
|
|
414
|
-
emit UserStakeUpdated(stakerAddress, current, target);
|
|
348
|
+
increaseWithdrawableFunds(_withdrawalAddress, amountWithdrawn);
|
|
349
|
+
emit UserStakeUpdated(stakerAddress, _withdrawalAddress, current, target);
|
|
415
350
|
return amountWithdrawn;
|
|
416
351
|
}
|
|
417
352
|
|
|
418
|
-
/**
|
|
419
|
-
* @notice Remove the given staker and turn them into a zombie
|
|
420
|
-
* @param stakerAddress Address of the staker to remove
|
|
421
|
-
*/
|
|
422
|
-
function turnIntoZombie(address stakerAddress) internal {
|
|
423
|
-
Staker storage staker = _stakerMap[stakerAddress];
|
|
424
|
-
_zombies.push(Zombie(stakerAddress, staker.latestStakedNode));
|
|
425
|
-
deleteStaker(stakerAddress);
|
|
426
|
-
}
|
|
427
|
-
|
|
428
|
-
/**
|
|
429
|
-
* @notice Update the latest staked node of the zombie at the given index
|
|
430
|
-
* @param zombieNum Index of the zombie to move
|
|
431
|
-
* @param latest New latest node the zombie is staked on
|
|
432
|
-
*/
|
|
433
|
-
function zombieUpdateLatestStakedNode(uint256 zombieNum, uint64 latest) internal {
|
|
434
|
-
_zombies[zombieNum].latestStakedNode = latest;
|
|
435
|
-
}
|
|
436
|
-
|
|
437
|
-
/**
|
|
438
|
-
* @notice Remove the zombie at the given index
|
|
439
|
-
* @param zombieNum Index of the zombie to remove
|
|
440
|
-
*/
|
|
441
|
-
function removeZombie(uint256 zombieNum) internal {
|
|
442
|
-
_zombies[zombieNum] = _zombies[_zombies.length - 1];
|
|
443
|
-
_zombies.pop();
|
|
444
|
-
}
|
|
445
|
-
|
|
446
|
-
/**
|
|
447
|
-
* @notice Mark the given staker as staked on this node
|
|
448
|
-
* @param staker Address of the staker to mark
|
|
449
|
-
*/
|
|
450
|
-
function addStaker(uint64 nodeNum, address staker) internal {
|
|
451
|
-
require(!_nodeStakers[nodeNum][staker], "ALREADY_STAKED");
|
|
452
|
-
_nodeStakers[nodeNum][staker] = true;
|
|
453
|
-
Node storage node = getNodeStorage(nodeNum);
|
|
454
|
-
require(node.deadlineBlock != 0, "NO_NODE");
|
|
455
|
-
|
|
456
|
-
uint64 prevCount = node.stakerCount;
|
|
457
|
-
node.stakerCount = prevCount + 1;
|
|
458
|
-
|
|
459
|
-
if (nodeNum > GENESIS_NODE) {
|
|
460
|
-
Node storage parent = getNodeStorage(node.prevNum);
|
|
461
|
-
parent.childStakerCount++;
|
|
462
|
-
if (prevCount == 0) {
|
|
463
|
-
parent.newChildConfirmDeadline(uint64(block.number) + confirmPeriodBlocks);
|
|
464
|
-
}
|
|
465
|
-
}
|
|
466
|
-
}
|
|
467
|
-
|
|
468
|
-
/**
|
|
469
|
-
* @notice Remove the given staker from this node
|
|
470
|
-
* @param staker Address of the staker to remove
|
|
471
|
-
*/
|
|
472
|
-
function removeStaker(uint64 nodeNum, address staker) internal {
|
|
473
|
-
require(_nodeStakers[nodeNum][staker], "NOT_STAKED");
|
|
474
|
-
_nodeStakers[nodeNum][staker] = false;
|
|
475
|
-
|
|
476
|
-
Node storage node = getNodeStorage(nodeNum);
|
|
477
|
-
node.stakerCount--;
|
|
478
|
-
|
|
479
|
-
if (nodeNum > GENESIS_NODE) {
|
|
480
|
-
getNodeStorage(node.prevNum).childStakerCount--;
|
|
481
|
-
}
|
|
482
|
-
}
|
|
483
|
-
|
|
484
353
|
/**
|
|
485
354
|
* @notice Remove the given staker and return their stake
|
|
486
|
-
* This should
|
|
355
|
+
* This should only be called when the staker is inactive
|
|
487
356
|
* @param stakerAddress Address of the staker withdrawing their stake
|
|
488
357
|
*/
|
|
489
|
-
function withdrawStaker(
|
|
358
|
+
function withdrawStaker(
|
|
359
|
+
address stakerAddress
|
|
360
|
+
) internal {
|
|
490
361
|
Staker storage staker = _stakerMap[stakerAddress];
|
|
491
|
-
|
|
492
|
-
if (nodeHasStaker(latestConfirmedNum, stakerAddress)) {
|
|
493
|
-
// Withdrawing a staker whose latest staked node isn't resolved should be impossible
|
|
494
|
-
assert(staker.latestStakedNode == latestConfirmedNum);
|
|
495
|
-
removeStaker(latestConfirmedNum, stakerAddress);
|
|
496
|
-
}
|
|
362
|
+
address _withdrawalAddress = staker.withdrawalAddress;
|
|
497
363
|
uint256 initialStaked = staker.amountStaked;
|
|
498
|
-
increaseWithdrawableFunds(
|
|
364
|
+
increaseWithdrawableFunds(_withdrawalAddress, initialStaked);
|
|
499
365
|
deleteStaker(stakerAddress);
|
|
500
|
-
emit UserStakeUpdated(stakerAddress, initialStaked, 0);
|
|
501
|
-
}
|
|
502
|
-
|
|
503
|
-
/**
|
|
504
|
-
* @notice Advance the given staker to the given node
|
|
505
|
-
* @param stakerAddress Address of the staker adding their stake
|
|
506
|
-
* @param nodeNum Index of the node to stake on
|
|
507
|
-
*/
|
|
508
|
-
function stakeOnNode(address stakerAddress, uint64 nodeNum) internal {
|
|
509
|
-
Staker storage staker = _stakerMap[stakerAddress];
|
|
510
|
-
addStaker(nodeNum, stakerAddress);
|
|
511
|
-
staker.latestStakedNode = nodeNum;
|
|
366
|
+
emit UserStakeUpdated(stakerAddress, _withdrawalAddress, initialStaked, 0);
|
|
512
367
|
}
|
|
513
368
|
|
|
514
369
|
/**
|
|
@@ -516,7 +371,9 @@ abstract contract RollupCore is IRollupCore, PausableUpgradeable {
|
|
|
516
371
|
* @param account Address of the account to remove funds from
|
|
517
372
|
* @return Amount of funds removed from account
|
|
518
373
|
*/
|
|
519
|
-
function withdrawFunds(
|
|
374
|
+
function withdrawFunds(
|
|
375
|
+
address account
|
|
376
|
+
) internal returns (uint256) {
|
|
520
377
|
uint256 amount = _withdrawableFunds[account];
|
|
521
378
|
_withdrawableFunds[account] = 0;
|
|
522
379
|
totalWithdrawableFunds -= amount;
|
|
@@ -540,7 +397,9 @@ abstract contract RollupCore is IRollupCore, PausableUpgradeable {
|
|
|
540
397
|
* @notice Remove the given staker
|
|
541
398
|
* @param stakerAddress Address of the staker to remove
|
|
542
399
|
*/
|
|
543
|
-
function deleteStaker(
|
|
400
|
+
function deleteStaker(
|
|
401
|
+
address stakerAddress
|
|
402
|
+
) private {
|
|
544
403
|
Staker storage staker = _stakerMap[stakerAddress];
|
|
545
404
|
require(staker.isStaked, "NOT_STAKED");
|
|
546
405
|
uint64 stakerIndex = staker.index;
|
|
@@ -550,130 +409,250 @@ abstract contract RollupCore is IRollupCore, PausableUpgradeable {
|
|
|
550
409
|
delete _stakerMap[stakerAddress];
|
|
551
410
|
}
|
|
552
411
|
|
|
553
|
-
|
|
554
|
-
|
|
555
|
-
|
|
556
|
-
bytes32
|
|
557
|
-
|
|
558
|
-
|
|
559
|
-
|
|
560
|
-
|
|
561
|
-
|
|
562
|
-
}
|
|
412
|
+
function createNewAssertion(
|
|
413
|
+
AssertionInputs calldata assertion,
|
|
414
|
+
bytes32 prevAssertionHash,
|
|
415
|
+
bytes32 expectedAssertionHash
|
|
416
|
+
) internal returns (bytes32 newAssertionHash, bool overflowAssertion) {
|
|
417
|
+
// Validate the config hash
|
|
418
|
+
RollupLib.validateConfigHash(
|
|
419
|
+
assertion.beforeStateData.configData, getAssertionStorage(prevAssertionHash).configHash
|
|
420
|
+
);
|
|
563
421
|
|
|
564
|
-
|
|
565
|
-
|
|
566
|
-
|
|
567
|
-
uint256 prevNodeInboxMaxCount,
|
|
568
|
-
bytes32 expectedNodeHash
|
|
569
|
-
) internal returns (bytes32 newNodeHash) {
|
|
422
|
+
// reading inbox messages always terminates in either a finished or errored state
|
|
423
|
+
// although the challenge protocol that any invalid terminal state will be proven incorrect
|
|
424
|
+
// we can do a quick sanity check here
|
|
570
425
|
require(
|
|
571
|
-
assertion.afterState.machineStatus == MachineStatus.FINISHED
|
|
572
|
-
assertion.afterState.machineStatus == MachineStatus.ERRORED,
|
|
426
|
+
assertion.afterState.machineStatus == MachineStatus.FINISHED
|
|
427
|
+
|| assertion.afterState.machineStatus == MachineStatus.ERRORED,
|
|
573
428
|
"BAD_AFTER_STATUS"
|
|
574
429
|
);
|
|
575
430
|
|
|
576
|
-
|
|
577
|
-
|
|
578
|
-
|
|
579
|
-
|
|
580
|
-
|
|
431
|
+
// validate the provided before state is correct by checking that it's part of the prev assertion hash
|
|
432
|
+
require(
|
|
433
|
+
RollupLib.assertionHash(
|
|
434
|
+
assertion.beforeStateData.prevPrevAssertionHash,
|
|
435
|
+
assertion.beforeState,
|
|
436
|
+
assertion.beforeStateData.sequencerBatchAcc
|
|
437
|
+
) == prevAssertionHash,
|
|
438
|
+
"INVALID_BEFORE_STATE"
|
|
439
|
+
);
|
|
581
440
|
|
|
582
|
-
|
|
583
|
-
|
|
584
|
-
|
|
585
|
-
|
|
586
|
-
|
|
441
|
+
// The rollup cannot advance from an errored state
|
|
442
|
+
// If it reaches an errored state it must be corrected by an administrator
|
|
443
|
+
// This will involve updating the wasm root and creating an alternative assertion
|
|
444
|
+
// that consumes the correct number of inbox messages, and correctly transitions to the
|
|
445
|
+
// FINISHED state so that normal progress can continue
|
|
446
|
+
require(assertion.beforeState.machineStatus == MachineStatus.FINISHED, "BAD_PREV_STATUS");
|
|
447
|
+
|
|
448
|
+
AssertionNode storage prevAssertion = getAssertionStorage(prevAssertionHash);
|
|
449
|
+
// Required inbox position through which the next assertion (the one after this new assertion) must consume
|
|
450
|
+
uint256 nextInboxPosition;
|
|
451
|
+
bytes32 sequencerBatchAcc;
|
|
452
|
+
{
|
|
453
|
+
// This new assertion consumes the messages from prevInboxPosition to afterInboxPosition
|
|
454
|
+
GlobalState calldata afterGS = assertion.afterState.globalState;
|
|
455
|
+
GlobalState calldata beforeGS = assertion.beforeState.globalState;
|
|
456
|
+
|
|
457
|
+
// there are 3 kinds of assertions that can be made. Assertions must be made when they fill the maximum number
|
|
458
|
+
// of blocks, or when they process all messages up to prev.nextInboxPosition. When they fill the max
|
|
459
|
+
// blocks, but dont manage to process all messages, we call this an "overflow" assertion.
|
|
460
|
+
// 1. ERRORED assertion
|
|
461
|
+
// The machine finished in an ERRORED state. This can happen with processing any
|
|
462
|
+
// messages, or moving the position in the message.
|
|
463
|
+
// 2. FINISHED assertion that did not overflow
|
|
464
|
+
// The machine finished as normal, and fully processed all the messages up to prev.nextInboxPosition.
|
|
465
|
+
// In this case the inbox position must equal prev.nextInboxPosition and position in message must be 0
|
|
466
|
+
// 3. FINISHED assertion that did overflow
|
|
467
|
+
// The machine finished as normal, but didn't process all messages in the inbox.
|
|
468
|
+
// The inbox can be anywhere between the previous assertion's position and the nextInboxPosition, exclusive.
|
|
469
|
+
|
|
470
|
+
// All types of assertion must have inbox position in the range prev.inboxPosition <= x <= prev.nextInboxPosition
|
|
471
|
+
require(afterGS.comparePositions(beforeGS) >= 0, "INBOX_BACKWARDS");
|
|
472
|
+
int256 afterStateCmpMaxInbox = afterGS.comparePositionsAgainstStartOfBatch(
|
|
473
|
+
assertion.beforeStateData.configData.nextInboxPosition
|
|
587
474
|
);
|
|
475
|
+
require(afterStateCmpMaxInbox <= 0, "INBOX_TOO_FAR");
|
|
588
476
|
|
|
589
|
-
// Ensure that the assertion doesn't read past the end of the current inbox
|
|
590
|
-
uint64 afterInboxCount = assertion.afterState.globalState.getInboxPosition();
|
|
591
|
-
uint64 prevInboxPosition = assertion.beforeState.globalState.getInboxPosition();
|
|
592
|
-
require(afterInboxCount >= prevInboxPosition, "INBOX_BACKWARDS");
|
|
593
|
-
if (afterInboxCount == prevInboxPosition) {
|
|
594
|
-
require(
|
|
595
|
-
assertion.afterState.globalState.getPositionInMessage() >=
|
|
596
|
-
assertion.beforeState.globalState.getPositionInMessage(),
|
|
597
|
-
"INBOX_POS_IN_MSG_BACKWARDS"
|
|
598
|
-
);
|
|
599
|
-
}
|
|
600
|
-
// See validator/assertion.go ExecutionState RequiredBatches() for reasoning
|
|
601
477
|
if (
|
|
602
|
-
assertion.afterState.machineStatus
|
|
603
|
-
|
|
478
|
+
assertion.afterState.machineStatus != MachineStatus.ERRORED
|
|
479
|
+
&& afterStateCmpMaxInbox < 0
|
|
604
480
|
) {
|
|
605
|
-
//
|
|
606
|
-
|
|
607
|
-
|
|
608
|
-
|
|
609
|
-
// This gives replay protection against the state of the inbox
|
|
610
|
-
if (afterInboxCount > 0) {
|
|
611
|
-
memoryFrame.sequencerBatchAcc = bridge.sequencerInboxAccs(afterInboxCount - 1);
|
|
481
|
+
// If we didn't reach the target next inbox position, this is an overflow assertion.
|
|
482
|
+
overflowAssertion = true;
|
|
483
|
+
// This shouldn't be necessary, but might as well constrain the assertion to be non-empty
|
|
484
|
+
require(afterGS.comparePositions(beforeGS) > 0, "OVERFLOW_STANDSTILL");
|
|
612
485
|
}
|
|
613
|
-
|
|
614
|
-
|
|
615
|
-
|
|
616
|
-
|
|
486
|
+
// Inbox position at the time of this assertion being created
|
|
487
|
+
uint256 currentInboxPosition = bridge.sequencerMessageCount();
|
|
488
|
+
// Cannot read more messages than currently exist in the inbox
|
|
489
|
+
require(
|
|
490
|
+
afterGS.comparePositionsAgainstStartOfBatch(currentInboxPosition) <= 0,
|
|
491
|
+
"INBOX_PAST_END"
|
|
492
|
+
);
|
|
617
493
|
|
|
618
|
-
|
|
494
|
+
// under normal circumstances prev.nextInboxPosition is guaranteed to exist
|
|
495
|
+
// because we populate it from bridge.sequencerMessageCount(). However, when
|
|
496
|
+
// the inbox message count doesnt change we artificially increase it by 1 as explained below
|
|
497
|
+
// in this case we need to ensure when the assertion is made the inbox messages are available
|
|
498
|
+
// to ensure that a valid assertion can actually be made.
|
|
499
|
+
require(
|
|
500
|
+
assertion.beforeStateData.configData.nextInboxPosition <= currentInboxPosition,
|
|
501
|
+
"INBOX_NOT_POPULATED"
|
|
502
|
+
);
|
|
619
503
|
|
|
620
|
-
|
|
621
|
-
|
|
622
|
-
if (
|
|
623
|
-
|
|
624
|
-
|
|
504
|
+
// The next assertion must consume all the messages that are currently found in the inbox
|
|
505
|
+
uint256 afterInboxPosition = afterGS.getInboxPosition();
|
|
506
|
+
if (afterInboxPosition == currentInboxPosition) {
|
|
507
|
+
// No new messages have been added to the inbox since the last assertion
|
|
508
|
+
// In this case if we set the next inbox position to the current one we would be insisting that
|
|
509
|
+
// the next assertion process no messages. So instead we increment the next inbox position to current
|
|
510
|
+
// plus one, so that the next assertion will process exactly one message.
|
|
511
|
+
// Thus, no assertion can be empty (except the genesis assertion, which is created
|
|
512
|
+
// via a different codepath).
|
|
513
|
+
nextInboxPosition = currentInboxPosition + 1;
|
|
625
514
|
} else {
|
|
626
|
-
|
|
515
|
+
nextInboxPosition = currentInboxPosition;
|
|
627
516
|
}
|
|
628
517
|
|
|
629
|
-
|
|
630
|
-
|
|
631
|
-
|
|
632
|
-
|
|
633
|
-
memoryFrame.sequencerBatchAcc,
|
|
634
|
-
wasmModuleRoot
|
|
635
|
-
);
|
|
636
|
-
require(
|
|
637
|
-
newNodeHash == expectedNodeHash || expectedNodeHash == bytes32(0),
|
|
638
|
-
"UNEXPECTED_NODE_HASH"
|
|
639
|
-
);
|
|
518
|
+
// only the genesis assertion processes no messages, and that assertion is created
|
|
519
|
+
// when we initialize this contract. Therefore, all assertions created here should have a non
|
|
520
|
+
// zero inbox position.
|
|
521
|
+
require(afterInboxPosition != 0, "EMPTY_INBOX_COUNT");
|
|
640
522
|
|
|
641
|
-
|
|
642
|
-
|
|
643
|
-
|
|
644
|
-
|
|
645
|
-
block.number,
|
|
646
|
-
wasmModuleRoot
|
|
647
|
-
),
|
|
648
|
-
RollupLib.confirmHash(assertion),
|
|
649
|
-
prevNodeNum,
|
|
650
|
-
memoryFrame.deadlineBlock,
|
|
651
|
-
newNodeHash
|
|
652
|
-
);
|
|
523
|
+
// Fetch the inbox accumulator for this message count. Fetching this and checking against it
|
|
524
|
+
// allows the assertion creator to ensure they're creating an assertion against the expected
|
|
525
|
+
// inbox messages
|
|
526
|
+
sequencerBatchAcc = bridge.sequencerInboxAccs(afterInboxPosition - 1);
|
|
653
527
|
}
|
|
654
528
|
|
|
655
|
-
|
|
656
|
-
|
|
529
|
+
newAssertionHash =
|
|
530
|
+
RollupLib.assertionHash(prevAssertionHash, assertion.afterState, sequencerBatchAcc);
|
|
531
|
+
|
|
532
|
+
// allow an assertion creator to ensure that they're creating their assertion against the expected state
|
|
533
|
+
require(
|
|
534
|
+
newAssertionHash == expectedAssertionHash || expectedAssertionHash == bytes32(0),
|
|
535
|
+
"UNEXPECTED_ASSERTION_HASH"
|
|
536
|
+
);
|
|
657
537
|
|
|
658
|
-
|
|
659
|
-
|
|
660
|
-
|
|
661
|
-
|
|
538
|
+
// the assertion hash is unique - it's only possible to have one correct assertion hash
|
|
539
|
+
// per assertion. Therefore we can check if this assertion has already been made, and if so
|
|
540
|
+
// we can revert
|
|
541
|
+
require(
|
|
542
|
+
getAssertionStorage(newAssertionHash).status == AssertionStatus.NoAssertion,
|
|
543
|
+
"ASSERTION_SEEN"
|
|
544
|
+
);
|
|
662
545
|
|
|
663
|
-
|
|
664
|
-
|
|
546
|
+
// state updates
|
|
547
|
+
AssertionNode memory newAssertion = AssertionNodeLib.createAssertion(
|
|
548
|
+
prevAssertion.firstChildBlock == 0, // assumes block 0 is impossible
|
|
549
|
+
RollupLib.configHash({
|
|
550
|
+
wasmModuleRoot: wasmModuleRoot,
|
|
551
|
+
requiredStake: baseStake,
|
|
552
|
+
challengeManager: address(challengeManager),
|
|
553
|
+
confirmPeriodBlocks: confirmPeriodBlocks,
|
|
554
|
+
nextInboxPosition: uint64(nextInboxPosition)
|
|
555
|
+
})
|
|
556
|
+
);
|
|
665
557
|
|
|
666
|
-
|
|
667
|
-
|
|
668
|
-
|
|
669
|
-
|
|
670
|
-
|
|
558
|
+
// Fetch a storage reference to prevAssertion since we copied our other one into memory
|
|
559
|
+
// and we don't have enough stack available to keep to keep the previous storage reference around
|
|
560
|
+
prevAssertion.childCreated();
|
|
561
|
+
_assertions[newAssertionHash] = newAssertion;
|
|
562
|
+
|
|
563
|
+
emit AssertionCreated(
|
|
564
|
+
newAssertionHash,
|
|
565
|
+
prevAssertionHash,
|
|
671
566
|
assertion,
|
|
672
|
-
|
|
567
|
+
sequencerBatchAcc,
|
|
568
|
+
nextInboxPosition,
|
|
673
569
|
wasmModuleRoot,
|
|
674
|
-
|
|
570
|
+
baseStake,
|
|
571
|
+
address(challengeManager),
|
|
572
|
+
confirmPeriodBlocks
|
|
675
573
|
);
|
|
574
|
+
if (_hostChainIsArbitrum) {
|
|
575
|
+
_assertionCreatedAtArbSysBlock[newAssertionHash] = ArbSys(address(100)).arbBlockNumber();
|
|
576
|
+
}
|
|
577
|
+
}
|
|
676
578
|
|
|
677
|
-
|
|
579
|
+
function genesisAssertionHash() external pure returns (bytes32) {
|
|
580
|
+
GlobalState memory emptyGlobalState;
|
|
581
|
+
AssertionState memory emptyAssertionState =
|
|
582
|
+
AssertionState(emptyGlobalState, MachineStatus.FINISHED, bytes32(0));
|
|
583
|
+
bytes32 parentAssertionHash = bytes32(0);
|
|
584
|
+
bytes32 inboxAcc = bytes32(0);
|
|
585
|
+
return RollupLib.assertionHash({
|
|
586
|
+
parentAssertionHash: parentAssertionHash,
|
|
587
|
+
afterState: emptyAssertionState,
|
|
588
|
+
inboxAcc: inboxAcc
|
|
589
|
+
});
|
|
590
|
+
}
|
|
591
|
+
|
|
592
|
+
function getFirstChildCreationBlock(
|
|
593
|
+
bytes32 assertionHash
|
|
594
|
+
) external view returns (uint64) {
|
|
595
|
+
return getAssertionStorage(assertionHash).firstChildBlock;
|
|
596
|
+
}
|
|
597
|
+
|
|
598
|
+
function getSecondChildCreationBlock(
|
|
599
|
+
bytes32 assertionHash
|
|
600
|
+
) external view returns (uint64) {
|
|
601
|
+
return getAssertionStorage(assertionHash).secondChildBlock;
|
|
602
|
+
}
|
|
603
|
+
|
|
604
|
+
function validateAssertionHash(
|
|
605
|
+
bytes32 assertionHash,
|
|
606
|
+
AssertionState calldata state,
|
|
607
|
+
bytes32 prevAssertionHash,
|
|
608
|
+
bytes32 inboxAcc
|
|
609
|
+
) external pure {
|
|
610
|
+
require(
|
|
611
|
+
assertionHash == RollupLib.assertionHash(prevAssertionHash, state, inboxAcc),
|
|
612
|
+
"INVALID_ASSERTION_HASH"
|
|
613
|
+
);
|
|
614
|
+
}
|
|
615
|
+
|
|
616
|
+
function validateConfig(bytes32 assertionHash, ConfigData calldata configData) external view {
|
|
617
|
+
RollupLib.validateConfigHash(configData, getAssertionStorage(assertionHash).configHash);
|
|
618
|
+
}
|
|
619
|
+
|
|
620
|
+
function isFirstChild(
|
|
621
|
+
bytes32 assertionHash
|
|
622
|
+
) external view returns (bool) {
|
|
623
|
+
return getAssertionStorage(assertionHash).isFirstChild;
|
|
624
|
+
}
|
|
625
|
+
|
|
626
|
+
function isPending(
|
|
627
|
+
bytes32 assertionHash
|
|
628
|
+
) external view returns (bool) {
|
|
629
|
+
return getAssertionStorage(assertionHash).status == AssertionStatus.Pending;
|
|
630
|
+
}
|
|
631
|
+
|
|
632
|
+
function getValidators() external view returns (address[] memory) {
|
|
633
|
+
return validators.values();
|
|
634
|
+
}
|
|
635
|
+
|
|
636
|
+
function isValidator(
|
|
637
|
+
address validator
|
|
638
|
+
) external view returns (bool) {
|
|
639
|
+
return validators.contains(validator);
|
|
640
|
+
}
|
|
641
|
+
|
|
642
|
+
/**
|
|
643
|
+
* @notice Verify that the given staker is not active
|
|
644
|
+
* @param stakerAddress Address to check
|
|
645
|
+
*/
|
|
646
|
+
function requireInactiveStaker(
|
|
647
|
+
address stakerAddress
|
|
648
|
+
) internal view {
|
|
649
|
+
require(isStaked(stakerAddress), "NOT_STAKED");
|
|
650
|
+
// A staker is inactive if
|
|
651
|
+
// a) their last staked assertion is the latest confirmed assertion
|
|
652
|
+
// b) their last staked assertion have a child
|
|
653
|
+
bytes32 lastestAssertion = latestStakedAssertion(stakerAddress);
|
|
654
|
+
bool isLatestConfirmed = lastestAssertion == latestConfirmed();
|
|
655
|
+
bool haveChild = getAssertionStorage(lastestAssertion).firstChildBlock > 0;
|
|
656
|
+
require(isLatestConfirmed || haveChild, "STAKE_ACTIVE");
|
|
678
657
|
}
|
|
679
658
|
}
|