@arbitrum/nitro-contracts 2.1.0 → 3.0.0-alpha.0
Sign up to get free protection for your applications and to get access to all the features.
- 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
|
}
|