@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
|
@@ -0,0 +1,783 @@
|
|
|
1
|
+
// Copyright 2023, Offchain Labs, Inc.
|
|
2
|
+
// For license information, see https://github.com/offchainlabs/bold/blob/main/LICENSE
|
|
3
|
+
// SPDX-License-Identifier: BUSL-1.1
|
|
4
|
+
//
|
|
5
|
+
pragma solidity ^0.8.17;
|
|
6
|
+
|
|
7
|
+
import "../rollup/Assertion.sol";
|
|
8
|
+
import "./libraries/UintUtilsLib.sol";
|
|
9
|
+
import "./IAssertionChain.sol";
|
|
10
|
+
import "./libraries/EdgeChallengeManagerLib.sol";
|
|
11
|
+
import "../libraries/Constants.sol";
|
|
12
|
+
import "../state/Machine.sol";
|
|
13
|
+
|
|
14
|
+
import "@openzeppelin/contracts-upgradeable/proxy/utils/Initializable.sol";
|
|
15
|
+
import "@openzeppelin/contracts/token/ERC20/utils/SafeERC20.sol";
|
|
16
|
+
|
|
17
|
+
/// @title EdgeChallengeManager interface
|
|
18
|
+
interface IEdgeChallengeManager {
|
|
19
|
+
/// @notice Initialize the EdgeChallengeManager. EdgeChallengeManagers are upgradeable
|
|
20
|
+
/// so use the initializer paradigm
|
|
21
|
+
/// @param _assertionChain The assertion chain contract
|
|
22
|
+
/// @param _challengePeriodBlocks The amount of cumulative time an edge must spend unrivaled before it can be confirmed
|
|
23
|
+
/// This should be the censorship period + the cumulative amount of time needed to do any
|
|
24
|
+
/// offchain calculation. We currently estimate around 10 mins for each layer zero edge and 1
|
|
25
|
+
/// one minute for each other edge.
|
|
26
|
+
/// @param _oneStepProofEntry The one step proof logic
|
|
27
|
+
/// @param layerZeroBlockEdgeHeight The end height of layer zero edges of type Block
|
|
28
|
+
/// @param layerZeroBigStepEdgeHeight The end height of layer zero edges of type BigStep
|
|
29
|
+
/// @param layerZeroSmallStepEdgeHeight The end height of layer zero edges of type SmallStep
|
|
30
|
+
/// @param _stakeToken The token that stake will be provided in when creating zero layer block edges
|
|
31
|
+
/// @param _excessStakeReceiver The address that excess stake will be sent to when 2nd+ block edge is created
|
|
32
|
+
/// @param _numBigStepLevel The number of bigstep levels
|
|
33
|
+
/// @param _stakeAmounts The stake amount for each level. (first element is for block level)
|
|
34
|
+
function initialize(
|
|
35
|
+
IAssertionChain _assertionChain,
|
|
36
|
+
uint64 _challengePeriodBlocks,
|
|
37
|
+
IOneStepProofEntry _oneStepProofEntry,
|
|
38
|
+
uint256 layerZeroBlockEdgeHeight,
|
|
39
|
+
uint256 layerZeroBigStepEdgeHeight,
|
|
40
|
+
uint256 layerZeroSmallStepEdgeHeight,
|
|
41
|
+
IERC20 _stakeToken,
|
|
42
|
+
address _excessStakeReceiver,
|
|
43
|
+
uint8 _numBigStepLevel,
|
|
44
|
+
uint256[] calldata _stakeAmounts
|
|
45
|
+
) external;
|
|
46
|
+
|
|
47
|
+
function challengePeriodBlocks() external view returns (uint64);
|
|
48
|
+
|
|
49
|
+
/// @notice The one step proof resolver used to decide between rival SmallStep edges of length 1
|
|
50
|
+
function oneStepProofEntry() external view returns (IOneStepProofEntry);
|
|
51
|
+
|
|
52
|
+
/// @notice Performs necessary checks and creates a new layer zero edge
|
|
53
|
+
/// @param args Edge creation args
|
|
54
|
+
function createLayerZeroEdge(
|
|
55
|
+
CreateEdgeArgs calldata args
|
|
56
|
+
) external returns (bytes32);
|
|
57
|
+
|
|
58
|
+
/// @notice Bisect an edge. This creates two child edges:
|
|
59
|
+
/// lowerChild: has the same start root and height as this edge, but a different end root and height
|
|
60
|
+
/// upperChild: has the same end root and height as this edge, but a different start root and height
|
|
61
|
+
/// The lower child end root and height are equal to the upper child start root and height. This height
|
|
62
|
+
/// is the mandatoryBisectionHeight.
|
|
63
|
+
/// The lower child may already exist, however it's not possible for the upper child to exist as that would
|
|
64
|
+
/// mean that the edge has already been bisected
|
|
65
|
+
/// @param edgeId Edge to bisect
|
|
66
|
+
/// @param bisectionHistoryRoot The new history root to be used in the lower and upper children
|
|
67
|
+
/// @param prefixProof A proof to show that the bisectionHistoryRoot commits to a prefix of the current endHistoryRoot
|
|
68
|
+
/// @return lowerChildId The id of the newly created lower child edge
|
|
69
|
+
/// @return upperChildId The id of the newly created upper child edge
|
|
70
|
+
function bisectEdge(
|
|
71
|
+
bytes32 edgeId,
|
|
72
|
+
bytes32 bisectionHistoryRoot,
|
|
73
|
+
bytes calldata prefixProof
|
|
74
|
+
) external returns (bytes32, bytes32);
|
|
75
|
+
|
|
76
|
+
/// @notice An edge can be confirmed if the total amount of time it and a single chain of its direct ancestors
|
|
77
|
+
/// has spent unrivaled is greater than the challenge period.
|
|
78
|
+
/// @dev Edges inherit time from their parents, so the sum of unrivaled timers is compared against the threshold.
|
|
79
|
+
/// Given that an edge cannot become unrivaled after becoming rivaled, once the threshold is passed
|
|
80
|
+
/// it will always remain passed. The direct ancestors of an edge are linked by parent-child links for edges
|
|
81
|
+
/// of the same level, and claimId-edgeId links for zero layer edges that claim an edge in the level below.
|
|
82
|
+
/// This method also includes the amount of time the assertion being claimed spent without a sibling
|
|
83
|
+
/// @param edgeId The id of the edge to confirm
|
|
84
|
+
function confirmEdgeByTime(
|
|
85
|
+
bytes32 edgeId,
|
|
86
|
+
AssertionStateData calldata claimStateData
|
|
87
|
+
) external;
|
|
88
|
+
|
|
89
|
+
/// @notice Update multiple edges' timer cache by their children. Equivalent to calling updateTimerCacheByChildren for each edge.
|
|
90
|
+
/// May update timer cache above maximum if the last edge's timer cache was below maximumCachedTime.
|
|
91
|
+
/// Revert when the last edge's timer cache is already equal to or above maximumCachedTime.
|
|
92
|
+
/// @param edgeIds The ids of the edges to update
|
|
93
|
+
/// @param maximumCachedTime The maximum amount of cached time allowed on the last edge (β∗)
|
|
94
|
+
function multiUpdateTimeCacheByChildren(
|
|
95
|
+
bytes32[] calldata edgeIds,
|
|
96
|
+
uint256 maximumCachedTime
|
|
97
|
+
) external;
|
|
98
|
+
|
|
99
|
+
/// @notice Update an edge's timer cache by its children.
|
|
100
|
+
/// Sets the edge's timer cache to its timeUnrivaled + (minimum timer cache of its children).
|
|
101
|
+
/// May update timer cache above maximum if the last edge's timer cache was below maximumCachedTime.
|
|
102
|
+
/// Revert when the edge's timer cache is already equal to or above maximumCachedTime.
|
|
103
|
+
/// @param edgeId The id of the edge to update
|
|
104
|
+
/// @param maximumCachedTime The maximum amount of cached time allowed on the edge (β∗)
|
|
105
|
+
function updateTimerCacheByChildren(bytes32 edgeId, uint256 maximumCachedTime) external;
|
|
106
|
+
|
|
107
|
+
/// @notice Given a one step fork edge and an edge with matching claim id,
|
|
108
|
+
/// set the one step fork edge's timer cache to its timeUnrivaled + claiming edge's timer cache.
|
|
109
|
+
/// May update timer cache above maximum if the last edge's timer cache was below maximumCachedTime.
|
|
110
|
+
/// Revert when the edge's timer cache is already equal to or above maximumCachedTime.
|
|
111
|
+
/// @param edgeId The id of the edge to update
|
|
112
|
+
/// @param claimingEdgeId The id of the edge which has a claimId equal to edgeId
|
|
113
|
+
/// @param maximumCachedTime The maximum amount of cached time allowed on the edge (β∗)
|
|
114
|
+
function updateTimerCacheByClaim(
|
|
115
|
+
bytes32 edgeId,
|
|
116
|
+
bytes32 claimingEdgeId,
|
|
117
|
+
uint256 maximumCachedTime
|
|
118
|
+
) external;
|
|
119
|
+
|
|
120
|
+
/// @notice Confirm an edge by executing a one step proof
|
|
121
|
+
/// @dev One step proofs can only be executed against edges that have length one and of type SmallStep
|
|
122
|
+
/// @param edgeId The id of the edge to confirm
|
|
123
|
+
/// @param oneStepData Input data to the one step proof
|
|
124
|
+
/// @param prevConfig Data about the config set in prev
|
|
125
|
+
/// @param beforeHistoryInclusionProof Proof that the state which is the start of the edge is committed to by the startHistoryRoot
|
|
126
|
+
/// @param afterHistoryInclusionProof Proof that the state which is the end of the edge is committed to by the endHistoryRoot
|
|
127
|
+
function confirmEdgeByOneStepProof(
|
|
128
|
+
bytes32 edgeId,
|
|
129
|
+
OneStepData calldata oneStepData,
|
|
130
|
+
ConfigData calldata prevConfig,
|
|
131
|
+
bytes32[] calldata beforeHistoryInclusionProof,
|
|
132
|
+
bytes32[] calldata afterHistoryInclusionProof
|
|
133
|
+
) external;
|
|
134
|
+
|
|
135
|
+
/// @notice When zero layer block edges are created a stake is also provided
|
|
136
|
+
/// The stake on this edge can be refunded if the edge is confirme
|
|
137
|
+
function refundStake(
|
|
138
|
+
bytes32 edgeId
|
|
139
|
+
) external;
|
|
140
|
+
|
|
141
|
+
/// @notice Zero layer edges have to be a fixed height.
|
|
142
|
+
/// This function returns the end height for a given edge type
|
|
143
|
+
function getLayerZeroEndHeight(
|
|
144
|
+
EdgeType eType
|
|
145
|
+
) external view returns (uint256);
|
|
146
|
+
|
|
147
|
+
/// @notice Calculate the unique id of an edge
|
|
148
|
+
/// @param level The level of the edge
|
|
149
|
+
/// @param originId The origin id of the edge
|
|
150
|
+
/// @param startHeight The start height of the edge
|
|
151
|
+
/// @param startHistoryRoot The start history root of the edge
|
|
152
|
+
/// @param endHeight The end height of the edge
|
|
153
|
+
/// @param endHistoryRoot The end history root of the edge
|
|
154
|
+
function calculateEdgeId(
|
|
155
|
+
uint8 level,
|
|
156
|
+
bytes32 originId,
|
|
157
|
+
uint256 startHeight,
|
|
158
|
+
bytes32 startHistoryRoot,
|
|
159
|
+
uint256 endHeight,
|
|
160
|
+
bytes32 endHistoryRoot
|
|
161
|
+
) external pure returns (bytes32);
|
|
162
|
+
|
|
163
|
+
/// @notice Calculate the mutual id of the edge
|
|
164
|
+
/// Edges that are rivals share the same mutual id
|
|
165
|
+
/// @param level The level of the edge
|
|
166
|
+
/// @param originId The origin id of the edge
|
|
167
|
+
/// @param startHeight The start height of the edge
|
|
168
|
+
/// @param startHistoryRoot The start history root of the edge
|
|
169
|
+
/// @param endHeight The end height of the edge
|
|
170
|
+
function calculateMutualId(
|
|
171
|
+
uint8 level,
|
|
172
|
+
bytes32 originId,
|
|
173
|
+
uint256 startHeight,
|
|
174
|
+
bytes32 startHistoryRoot,
|
|
175
|
+
uint256 endHeight
|
|
176
|
+
) external pure returns (bytes32);
|
|
177
|
+
|
|
178
|
+
/// @notice Has the edge already been stored in the manager
|
|
179
|
+
function edgeExists(
|
|
180
|
+
bytes32 edgeId
|
|
181
|
+
) external view returns (bool);
|
|
182
|
+
|
|
183
|
+
/// @notice Get full edge data for an edge
|
|
184
|
+
function getEdge(
|
|
185
|
+
bytes32 edgeId
|
|
186
|
+
) external view returns (ChallengeEdge memory);
|
|
187
|
+
|
|
188
|
+
/// @notice The length of the edge, from start height to end height
|
|
189
|
+
function edgeLength(
|
|
190
|
+
bytes32 edgeId
|
|
191
|
+
) external view returns (uint256);
|
|
192
|
+
|
|
193
|
+
/// @notice Does this edge currently have one or more rivals
|
|
194
|
+
/// Rival edges share the same mutual id
|
|
195
|
+
function hasRival(
|
|
196
|
+
bytes32 edgeId
|
|
197
|
+
) external view returns (bool);
|
|
198
|
+
|
|
199
|
+
/// @notice The confirmed rival of this mutual id
|
|
200
|
+
/// Returns 0 if one does not exist
|
|
201
|
+
function confirmedRival(
|
|
202
|
+
bytes32 mutualId
|
|
203
|
+
) external view returns (bytes32);
|
|
204
|
+
|
|
205
|
+
/// @notice Does the edge have at least one rival, and it has length one
|
|
206
|
+
function hasLengthOneRival(
|
|
207
|
+
bytes32 edgeId
|
|
208
|
+
) external view returns (bool);
|
|
209
|
+
|
|
210
|
+
/// @notice The amount of time this edge has spent without rivals
|
|
211
|
+
/// This value is increasing whilst an edge is unrivaled, once a rival is created
|
|
212
|
+
/// it is fixed. If an edge has rivals from the moment it is created then it will have
|
|
213
|
+
/// a zero time unrivaled
|
|
214
|
+
function timeUnrivaled(
|
|
215
|
+
bytes32 edgeId
|
|
216
|
+
) external view returns (uint256);
|
|
217
|
+
|
|
218
|
+
/// @notice Get the id of the prev assertion that this edge is originates from
|
|
219
|
+
/// @dev Uses the parent chain to traverse upwards SmallStep->BigStep->Block->Assertion
|
|
220
|
+
/// until it gets to the origin assertion
|
|
221
|
+
function getPrevAssertionHash(
|
|
222
|
+
bytes32 edgeId
|
|
223
|
+
) external view returns (bytes32);
|
|
224
|
+
|
|
225
|
+
/// @notice Fetch the raw first rival record for the given mutual id
|
|
226
|
+
/// @dev Returns 0 if there is no edge with the given mutual id
|
|
227
|
+
/// Returns a magic value if there is one edge but it is unrivaled
|
|
228
|
+
/// Returns the id of the second edge created with the mutual id, if > 1 exists
|
|
229
|
+
function firstRival(
|
|
230
|
+
bytes32 mutualId
|
|
231
|
+
) external view returns (bytes32);
|
|
232
|
+
|
|
233
|
+
/// @notice True if an account has made a layer zero edge with the given mutual id.
|
|
234
|
+
/// This is only tracked when the validator whitelist is enabled
|
|
235
|
+
function hasMadeLayerZeroRival(
|
|
236
|
+
address account,
|
|
237
|
+
bytes32 mutualId
|
|
238
|
+
) external view returns (bool);
|
|
239
|
+
}
|
|
240
|
+
|
|
241
|
+
/// @title A challenge manager that uses edge structures to decide between Assertions
|
|
242
|
+
/// @notice When two assertions are created that have the same predecessor the protocol needs to decide which of the two is correct
|
|
243
|
+
/// This challenge manager allows the staker who has created the valid assertion to enforce that it will be confirmed, and all
|
|
244
|
+
/// other rival assertions will be rejected. The challenge is all-vs-all in that all assertions with the same
|
|
245
|
+
/// predecessor will vie for succession against each other. Stakers compete by creating edges that reference the assertion they
|
|
246
|
+
/// believe in. These edges are then bisected, reducing the size of the disagreement with each bisection, and narrowing in on the
|
|
247
|
+
/// exact point of disagreement. Eventually, at step size 1, the step can be proved on-chain directly proving that the related assertion
|
|
248
|
+
/// must be invalid.
|
|
249
|
+
contract EdgeChallengeManager is IEdgeChallengeManager, Initializable {
|
|
250
|
+
using EdgeChallengeManagerLib for EdgeStore;
|
|
251
|
+
using ChallengeEdgeLib for ChallengeEdge;
|
|
252
|
+
using SafeERC20 for IERC20;
|
|
253
|
+
|
|
254
|
+
/// @notice A new edge has been added to the challenge manager
|
|
255
|
+
/// @param edgeId The id of the newly added edge
|
|
256
|
+
/// @param mutualId The mutual id of the added edge - all rivals share the same mutual id
|
|
257
|
+
/// @param originId The origin id of the added edge - origin ids link an edge to the level below
|
|
258
|
+
/// @param hasRival Does the newly added edge have a rival upon creation
|
|
259
|
+
/// @param length The length of the new edge
|
|
260
|
+
/// @param level The level of the new edge
|
|
261
|
+
/// @param isLayerZero Whether the new edge was added at layer zero - has a claim and a staker
|
|
262
|
+
event EdgeAdded(
|
|
263
|
+
bytes32 indexed edgeId,
|
|
264
|
+
bytes32 indexed mutualId,
|
|
265
|
+
bytes32 indexed originId,
|
|
266
|
+
bytes32 claimId,
|
|
267
|
+
uint256 length,
|
|
268
|
+
uint8 level,
|
|
269
|
+
bool hasRival,
|
|
270
|
+
bool isLayerZero
|
|
271
|
+
);
|
|
272
|
+
|
|
273
|
+
/// @notice An edge has been bisected
|
|
274
|
+
/// @param edgeId The id of the edge that was bisected
|
|
275
|
+
/// @param lowerChildId The id of the lower child created during bisection
|
|
276
|
+
/// @param upperChildId The id of the upper child created during bisection
|
|
277
|
+
/// @param lowerChildAlreadyExists When an edge is bisected the lower child may already exist - created by a rival.
|
|
278
|
+
event EdgeBisected(
|
|
279
|
+
bytes32 indexed edgeId,
|
|
280
|
+
bytes32 indexed lowerChildId,
|
|
281
|
+
bytes32 indexed upperChildId,
|
|
282
|
+
bool lowerChildAlreadyExists
|
|
283
|
+
);
|
|
284
|
+
|
|
285
|
+
/// @notice An edge can be confirmed if the cumulative time (in blocks) unrivaled of it and a direct chain of ancestors is greater than a threshold
|
|
286
|
+
/// @param edgeId The edge that was confirmed
|
|
287
|
+
/// @param mutualId The mutual id of the confirmed edge
|
|
288
|
+
/// @param totalTimeUnrivaled The cumulative amount of time (in blocks) this edge spent unrivaled
|
|
289
|
+
event EdgeConfirmedByTime(
|
|
290
|
+
bytes32 indexed edgeId, bytes32 indexed mutualId, uint256 totalTimeUnrivaled
|
|
291
|
+
);
|
|
292
|
+
|
|
293
|
+
/// @notice A SmallStep edge of length 1 can be confirmed via a one step proof
|
|
294
|
+
/// @param edgeId The edge that was confirmed
|
|
295
|
+
/// @param mutualId The mutual id of the confirmed edge
|
|
296
|
+
event EdgeConfirmedByOneStepProof(bytes32 indexed edgeId, bytes32 indexed mutualId);
|
|
297
|
+
|
|
298
|
+
/// @notice An edge's timer cache has been updated
|
|
299
|
+
/// @param edgeId The edge that was updated
|
|
300
|
+
/// @param newValue The new value of its timer cache
|
|
301
|
+
event TimerCacheUpdated(bytes32 indexed edgeId, uint256 newValue);
|
|
302
|
+
|
|
303
|
+
/// @notice A stake has been refunded for a confirmed layer zero block edge
|
|
304
|
+
/// @param edgeId The edge that was confirmed
|
|
305
|
+
/// @param mutualId The mutual id of the confirmed edge
|
|
306
|
+
/// @param stakeToken The ERC20 being refunded
|
|
307
|
+
/// @param stakeAmount The amount of tokens being refunded
|
|
308
|
+
event EdgeRefunded(
|
|
309
|
+
bytes32 indexed edgeId, bytes32 indexed mutualId, address stakeToken, uint256 stakeAmount
|
|
310
|
+
);
|
|
311
|
+
|
|
312
|
+
/// @dev Store for all edges and rival data
|
|
313
|
+
/// All edges, including edges from different challenges, are stored together in the same store
|
|
314
|
+
/// Since edge ids include the origin id, which is unique for each challenge, we can be sure that
|
|
315
|
+
/// edges from different challenges cannot have the same id, and so can be stored in the same store
|
|
316
|
+
EdgeStore internal store;
|
|
317
|
+
|
|
318
|
+
/// @notice When creating a zero layer block edge a stake must be supplied. However since we know that only
|
|
319
|
+
/// one edge in a group of rivals can ever be confirmed, we only need to keep one stake in this contract
|
|
320
|
+
/// to later refund for that edge. Other stakes can immediately be sent to an excess stake receiver.
|
|
321
|
+
/// This excess stake receiver can then choose to refund the gas of participants who aided in the confirmation
|
|
322
|
+
/// of the winning edge
|
|
323
|
+
address public excessStakeReceiver;
|
|
324
|
+
|
|
325
|
+
/// @notice The token to supply stake in
|
|
326
|
+
IERC20 public stakeToken;
|
|
327
|
+
|
|
328
|
+
/// @notice The amount of stake token to be supplied when creating a zero layer block edge at a given level
|
|
329
|
+
uint256[] public stakeAmounts;
|
|
330
|
+
|
|
331
|
+
/// @notice The number of blocks accumulated on an edge before it can be confirmed by time
|
|
332
|
+
uint64 public challengePeriodBlocks;
|
|
333
|
+
|
|
334
|
+
/// @notice The assertion chain about which challenges are created
|
|
335
|
+
IAssertionChain public assertionChain;
|
|
336
|
+
|
|
337
|
+
/// @inheritdoc IEdgeChallengeManager
|
|
338
|
+
IOneStepProofEntry public override oneStepProofEntry;
|
|
339
|
+
|
|
340
|
+
/// @notice The end height of layer zero Block edges
|
|
341
|
+
uint256 public LAYERZERO_BLOCKEDGE_HEIGHT;
|
|
342
|
+
/// @notice The end height of layer zero BigStep edges
|
|
343
|
+
uint256 public LAYERZERO_BIGSTEPEDGE_HEIGHT;
|
|
344
|
+
/// @notice The end height of layer zero SmallStep edges
|
|
345
|
+
uint256 public LAYERZERO_SMALLSTEPEDGE_HEIGHT;
|
|
346
|
+
/// @notice The number of big step levels configured for this challenge manager
|
|
347
|
+
/// There is 1 block level, 1 small step level and N big step levels
|
|
348
|
+
uint8 public NUM_BIGSTEP_LEVEL;
|
|
349
|
+
|
|
350
|
+
constructor() {
|
|
351
|
+
_disableInitializers();
|
|
352
|
+
}
|
|
353
|
+
|
|
354
|
+
/// @inheritdoc IEdgeChallengeManager
|
|
355
|
+
function initialize(
|
|
356
|
+
IAssertionChain _assertionChain,
|
|
357
|
+
uint64 _challengePeriodBlocks,
|
|
358
|
+
IOneStepProofEntry _oneStepProofEntry,
|
|
359
|
+
uint256 layerZeroBlockEdgeHeight,
|
|
360
|
+
uint256 layerZeroBigStepEdgeHeight,
|
|
361
|
+
uint256 layerZeroSmallStepEdgeHeight,
|
|
362
|
+
IERC20 _stakeToken,
|
|
363
|
+
address _excessStakeReceiver,
|
|
364
|
+
uint8 _numBigStepLevel,
|
|
365
|
+
uint256[] calldata _stakeAmounts
|
|
366
|
+
) public initializer {
|
|
367
|
+
if (address(_assertionChain) == address(0)) {
|
|
368
|
+
revert EmptyAssertionChain();
|
|
369
|
+
}
|
|
370
|
+
assertionChain = _assertionChain;
|
|
371
|
+
if (address(_oneStepProofEntry) == address(0)) {
|
|
372
|
+
revert EmptyOneStepProofEntry();
|
|
373
|
+
}
|
|
374
|
+
oneStepProofEntry = _oneStepProofEntry;
|
|
375
|
+
if (_challengePeriodBlocks == 0) {
|
|
376
|
+
revert EmptyChallengePeriod();
|
|
377
|
+
}
|
|
378
|
+
challengePeriodBlocks = _challengePeriodBlocks;
|
|
379
|
+
|
|
380
|
+
stakeToken = _stakeToken;
|
|
381
|
+
if (_excessStakeReceiver == address(0)) {
|
|
382
|
+
revert EmptyStakeReceiver();
|
|
383
|
+
}
|
|
384
|
+
excessStakeReceiver = _excessStakeReceiver;
|
|
385
|
+
|
|
386
|
+
if (!EdgeChallengeManagerLib.isPowerOfTwo(layerZeroBlockEdgeHeight)) {
|
|
387
|
+
revert NotPowerOfTwo(layerZeroBlockEdgeHeight);
|
|
388
|
+
}
|
|
389
|
+
LAYERZERO_BLOCKEDGE_HEIGHT = layerZeroBlockEdgeHeight;
|
|
390
|
+
if (!EdgeChallengeManagerLib.isPowerOfTwo(layerZeroBigStepEdgeHeight)) {
|
|
391
|
+
revert NotPowerOfTwo(layerZeroBigStepEdgeHeight);
|
|
392
|
+
}
|
|
393
|
+
LAYERZERO_BIGSTEPEDGE_HEIGHT = layerZeroBigStepEdgeHeight;
|
|
394
|
+
if (!EdgeChallengeManagerLib.isPowerOfTwo(layerZeroSmallStepEdgeHeight)) {
|
|
395
|
+
revert NotPowerOfTwo(layerZeroSmallStepEdgeHeight);
|
|
396
|
+
}
|
|
397
|
+
LAYERZERO_SMALLSTEPEDGE_HEIGHT = layerZeroSmallStepEdgeHeight;
|
|
398
|
+
|
|
399
|
+
// ensure that there is at least on of each type of level
|
|
400
|
+
if (_numBigStepLevel == 0) {
|
|
401
|
+
revert ZeroBigStepLevels();
|
|
402
|
+
}
|
|
403
|
+
// ensure there's also space for the block level and the small step level
|
|
404
|
+
// in total level parameters
|
|
405
|
+
if (_numBigStepLevel > 253) {
|
|
406
|
+
revert BigStepLevelsTooMany(_numBigStepLevel);
|
|
407
|
+
}
|
|
408
|
+
NUM_BIGSTEP_LEVEL = _numBigStepLevel;
|
|
409
|
+
|
|
410
|
+
if (_numBigStepLevel + 2 != _stakeAmounts.length) {
|
|
411
|
+
revert StakeAmountsMismatch(_stakeAmounts.length, _numBigStepLevel + 2);
|
|
412
|
+
}
|
|
413
|
+
stakeAmounts = _stakeAmounts;
|
|
414
|
+
}
|
|
415
|
+
|
|
416
|
+
/////////////////////////////
|
|
417
|
+
// STATE MUTATING SECTIION //
|
|
418
|
+
/////////////////////////////
|
|
419
|
+
|
|
420
|
+
/// @inheritdoc IEdgeChallengeManager
|
|
421
|
+
function createLayerZeroEdge(
|
|
422
|
+
CreateEdgeArgs calldata args
|
|
423
|
+
) external returns (bytes32) {
|
|
424
|
+
// Check if whitelist is enabled in the Rollup
|
|
425
|
+
// We only enforce whitelist in this function as it may exhaust resources
|
|
426
|
+
bool whitelistEnabled = !assertionChain.validatorWhitelistDisabled();
|
|
427
|
+
|
|
428
|
+
if (whitelistEnabled && !assertionChain.isValidator(msg.sender)) {
|
|
429
|
+
revert NotValidator(msg.sender);
|
|
430
|
+
}
|
|
431
|
+
|
|
432
|
+
EdgeAddedData memory edgeAdded;
|
|
433
|
+
EdgeType eType = ChallengeEdgeLib.levelToType(args.level, NUM_BIGSTEP_LEVEL);
|
|
434
|
+
uint256 expectedEndHeight = getLayerZeroEndHeight(eType);
|
|
435
|
+
AssertionReferenceData memory ard;
|
|
436
|
+
|
|
437
|
+
if (eType == EdgeType.Block) {
|
|
438
|
+
// for block type edges we need to provide some extra assertion data context
|
|
439
|
+
if (args.proof.length == 0) {
|
|
440
|
+
revert EmptyEdgeSpecificProof();
|
|
441
|
+
}
|
|
442
|
+
(
|
|
443
|
+
,
|
|
444
|
+
AssertionStateData memory predecessorStateData,
|
|
445
|
+
AssertionStateData memory claimStateData
|
|
446
|
+
) = abi.decode(args.proof, (bytes32[], AssertionStateData, AssertionStateData));
|
|
447
|
+
|
|
448
|
+
assertionChain.validateAssertionHash(
|
|
449
|
+
args.claimId,
|
|
450
|
+
claimStateData.assertionState,
|
|
451
|
+
claimStateData.prevAssertionHash,
|
|
452
|
+
claimStateData.inboxAcc
|
|
453
|
+
);
|
|
454
|
+
|
|
455
|
+
assertionChain.validateAssertionHash(
|
|
456
|
+
claimStateData.prevAssertionHash,
|
|
457
|
+
predecessorStateData.assertionState,
|
|
458
|
+
predecessorStateData.prevAssertionHash,
|
|
459
|
+
predecessorStateData.inboxAcc
|
|
460
|
+
);
|
|
461
|
+
|
|
462
|
+
if (args.endHistoryRoot != claimStateData.assertionState.endHistoryRoot) {
|
|
463
|
+
revert EndHistoryRootMismatch(
|
|
464
|
+
args.endHistoryRoot, claimStateData.assertionState.endHistoryRoot
|
|
465
|
+
);
|
|
466
|
+
}
|
|
467
|
+
|
|
468
|
+
ard = AssertionReferenceData(
|
|
469
|
+
args.claimId,
|
|
470
|
+
claimStateData.prevAssertionHash,
|
|
471
|
+
assertionChain.isPending(args.claimId),
|
|
472
|
+
assertionChain.getSecondChildCreationBlock(claimStateData.prevAssertionHash) > 0,
|
|
473
|
+
predecessorStateData.assertionState,
|
|
474
|
+
claimStateData.assertionState
|
|
475
|
+
);
|
|
476
|
+
}
|
|
477
|
+
edgeAdded = store.createLayerZeroEdge(
|
|
478
|
+
args, ard, oneStepProofEntry, expectedEndHeight, NUM_BIGSTEP_LEVEL, whitelistEnabled
|
|
479
|
+
);
|
|
480
|
+
|
|
481
|
+
IERC20 st = stakeToken;
|
|
482
|
+
uint256 sa = stakeAmounts[args.level];
|
|
483
|
+
// when a zero layer edge is created it must include stake amount. Each time a zero layer
|
|
484
|
+
// edge is created it forces the honest participants to do some work, so we want to disincentive
|
|
485
|
+
// their creation. The amount should also be enough to pay for the gas costs incurred by the honest
|
|
486
|
+
// participant. This can be arranged out of bound by the excess stake receiver.
|
|
487
|
+
// The contract initializer can disable staking by setting zeros for token or amount, to change
|
|
488
|
+
// this a new challenge manager needs to be deployed and its address updated in the assertion chain
|
|
489
|
+
if (address(st) != address(0) && sa != 0) {
|
|
490
|
+
// since only one edge in a group of rivals can ever be confirmed, we know that we
|
|
491
|
+
// will never need to refund more than one edge. Therefore we can immediately send
|
|
492
|
+
// all stakes provided after the first one to an excess stake receiver.
|
|
493
|
+
address receiver = edgeAdded.hasRival ? excessStakeReceiver : address(this);
|
|
494
|
+
st.safeTransferFrom(msg.sender, receiver, sa);
|
|
495
|
+
}
|
|
496
|
+
|
|
497
|
+
emit EdgeAdded(
|
|
498
|
+
edgeAdded.edgeId,
|
|
499
|
+
edgeAdded.mutualId,
|
|
500
|
+
edgeAdded.originId,
|
|
501
|
+
edgeAdded.claimId,
|
|
502
|
+
edgeAdded.length,
|
|
503
|
+
edgeAdded.level,
|
|
504
|
+
edgeAdded.hasRival,
|
|
505
|
+
edgeAdded.isLayerZero
|
|
506
|
+
);
|
|
507
|
+
return edgeAdded.edgeId;
|
|
508
|
+
}
|
|
509
|
+
|
|
510
|
+
/// @inheritdoc IEdgeChallengeManager
|
|
511
|
+
function bisectEdge(
|
|
512
|
+
bytes32 edgeId,
|
|
513
|
+
bytes32 bisectionHistoryRoot,
|
|
514
|
+
bytes calldata prefixProof
|
|
515
|
+
) external returns (bytes32, bytes32) {
|
|
516
|
+
(
|
|
517
|
+
bytes32 lowerChildId,
|
|
518
|
+
EdgeAddedData memory lowerChildAdded,
|
|
519
|
+
EdgeAddedData memory upperChildAdded
|
|
520
|
+
) = store.bisectEdge(edgeId, bisectionHistoryRoot, prefixProof);
|
|
521
|
+
|
|
522
|
+
bool lowerChildAlreadyExists = lowerChildAdded.edgeId == 0;
|
|
523
|
+
// the lower child might already exist, if it didnt then a new
|
|
524
|
+
// edge was added
|
|
525
|
+
if (!lowerChildAlreadyExists) {
|
|
526
|
+
emit EdgeAdded(
|
|
527
|
+
lowerChildAdded.edgeId,
|
|
528
|
+
lowerChildAdded.mutualId,
|
|
529
|
+
lowerChildAdded.originId,
|
|
530
|
+
lowerChildAdded.claimId,
|
|
531
|
+
lowerChildAdded.length,
|
|
532
|
+
lowerChildAdded.level,
|
|
533
|
+
lowerChildAdded.hasRival,
|
|
534
|
+
lowerChildAdded.isLayerZero
|
|
535
|
+
);
|
|
536
|
+
}
|
|
537
|
+
// upper child is always added
|
|
538
|
+
emit EdgeAdded(
|
|
539
|
+
upperChildAdded.edgeId,
|
|
540
|
+
upperChildAdded.mutualId,
|
|
541
|
+
upperChildAdded.originId,
|
|
542
|
+
upperChildAdded.claimId,
|
|
543
|
+
upperChildAdded.length,
|
|
544
|
+
upperChildAdded.level,
|
|
545
|
+
upperChildAdded.hasRival,
|
|
546
|
+
upperChildAdded.isLayerZero
|
|
547
|
+
);
|
|
548
|
+
|
|
549
|
+
emit EdgeBisected(edgeId, lowerChildId, upperChildAdded.edgeId, lowerChildAlreadyExists);
|
|
550
|
+
|
|
551
|
+
return (lowerChildId, upperChildAdded.edgeId);
|
|
552
|
+
}
|
|
553
|
+
|
|
554
|
+
/// @inheritdoc IEdgeChallengeManager
|
|
555
|
+
function multiUpdateTimeCacheByChildren(
|
|
556
|
+
bytes32[] calldata edgeIds,
|
|
557
|
+
uint256 maximumCachedTime
|
|
558
|
+
) public {
|
|
559
|
+
if (edgeIds.length == 0) revert EmptyArray();
|
|
560
|
+
// revert early if the last edge already has sufficient time
|
|
561
|
+
store.validateCurrentTimer(edgeIds[edgeIds.length - 1], maximumCachedTime);
|
|
562
|
+
for (uint256 i = 0; i < edgeIds.length; i++) {
|
|
563
|
+
updateTimerCacheByChildren(edgeIds[i], type(uint256).max);
|
|
564
|
+
}
|
|
565
|
+
}
|
|
566
|
+
|
|
567
|
+
/// @inheritdoc IEdgeChallengeManager
|
|
568
|
+
function updateTimerCacheByChildren(bytes32 edgeId, uint256 maximumCachedTime) public {
|
|
569
|
+
(bool updated, uint256 newValue) =
|
|
570
|
+
store.updateTimerCacheByChildren(edgeId, maximumCachedTime);
|
|
571
|
+
if (updated) emit TimerCacheUpdated(edgeId, newValue);
|
|
572
|
+
}
|
|
573
|
+
|
|
574
|
+
/// @inheritdoc IEdgeChallengeManager
|
|
575
|
+
function updateTimerCacheByClaim(
|
|
576
|
+
bytes32 edgeId,
|
|
577
|
+
bytes32 claimingEdgeId,
|
|
578
|
+
uint256 maximumCachedTime
|
|
579
|
+
) public {
|
|
580
|
+
(bool updated, uint256 newValue) = store.updateTimerCacheByClaim(
|
|
581
|
+
edgeId, claimingEdgeId, NUM_BIGSTEP_LEVEL, maximumCachedTime
|
|
582
|
+
);
|
|
583
|
+
if (updated) emit TimerCacheUpdated(edgeId, newValue);
|
|
584
|
+
}
|
|
585
|
+
|
|
586
|
+
/// @inheritdoc IEdgeChallengeManager
|
|
587
|
+
function confirmEdgeByTime(bytes32 edgeId, AssertionStateData calldata claimStateData) public {
|
|
588
|
+
ChallengeEdge storage topEdge = store.get(edgeId);
|
|
589
|
+
if (!topEdge.isLayerZero()) {
|
|
590
|
+
revert EdgeNotLayerZero(topEdge.id(), topEdge.staker, topEdge.claimId);
|
|
591
|
+
}
|
|
592
|
+
|
|
593
|
+
uint64 assertionBlocks = 0;
|
|
594
|
+
// if the edge is block level and the assertion being claimed against was the first child of its predecessor
|
|
595
|
+
// then we are able to count the time between the first and second child as time towards
|
|
596
|
+
// the this edge
|
|
597
|
+
bool isBlockLevel =
|
|
598
|
+
ChallengeEdgeLib.levelToType(topEdge.level, NUM_BIGSTEP_LEVEL) == EdgeType.Block;
|
|
599
|
+
if (isBlockLevel && assertionChain.isFirstChild(topEdge.claimId)) {
|
|
600
|
+
assertionChain.validateAssertionHash(
|
|
601
|
+
topEdge.claimId,
|
|
602
|
+
claimStateData.assertionState,
|
|
603
|
+
claimStateData.prevAssertionHash,
|
|
604
|
+
claimStateData.inboxAcc
|
|
605
|
+
);
|
|
606
|
+
assertionBlocks = assertionChain.getSecondChildCreationBlock(
|
|
607
|
+
claimStateData.prevAssertionHash
|
|
608
|
+
) - assertionChain.getFirstChildCreationBlock(claimStateData.prevAssertionHash);
|
|
609
|
+
}
|
|
610
|
+
|
|
611
|
+
uint256 totalTimeUnrivaled =
|
|
612
|
+
store.confirmEdgeByTime(edgeId, assertionBlocks, challengePeriodBlocks);
|
|
613
|
+
|
|
614
|
+
emit EdgeConfirmedByTime(edgeId, store.edges[edgeId].mutualId(), totalTimeUnrivaled);
|
|
615
|
+
}
|
|
616
|
+
|
|
617
|
+
/// @inheritdoc IEdgeChallengeManager
|
|
618
|
+
function confirmEdgeByOneStepProof(
|
|
619
|
+
bytes32 edgeId,
|
|
620
|
+
OneStepData calldata oneStepData,
|
|
621
|
+
ConfigData calldata prevConfig,
|
|
622
|
+
bytes32[] calldata beforeHistoryInclusionProof,
|
|
623
|
+
bytes32[] calldata afterHistoryInclusionProof
|
|
624
|
+
) public {
|
|
625
|
+
bytes32 prevAssertionHash = store.getPrevAssertionHash(edgeId);
|
|
626
|
+
|
|
627
|
+
assertionChain.validateConfig(prevAssertionHash, prevConfig);
|
|
628
|
+
|
|
629
|
+
ExecutionContext memory execCtx = ExecutionContext({
|
|
630
|
+
maxInboxMessagesRead: prevConfig.nextInboxPosition,
|
|
631
|
+
bridge: assertionChain.bridge(),
|
|
632
|
+
initialWasmModuleRoot: prevConfig.wasmModuleRoot
|
|
633
|
+
});
|
|
634
|
+
|
|
635
|
+
store.confirmEdgeByOneStepProof(
|
|
636
|
+
edgeId,
|
|
637
|
+
oneStepProofEntry,
|
|
638
|
+
oneStepData,
|
|
639
|
+
execCtx,
|
|
640
|
+
beforeHistoryInclusionProof,
|
|
641
|
+
afterHistoryInclusionProof,
|
|
642
|
+
NUM_BIGSTEP_LEVEL,
|
|
643
|
+
LAYERZERO_BIGSTEPEDGE_HEIGHT,
|
|
644
|
+
LAYERZERO_SMALLSTEPEDGE_HEIGHT
|
|
645
|
+
);
|
|
646
|
+
|
|
647
|
+
emit EdgeConfirmedByOneStepProof(edgeId, store.edges[edgeId].mutualId());
|
|
648
|
+
}
|
|
649
|
+
|
|
650
|
+
/// @inheritdoc IEdgeChallengeManager
|
|
651
|
+
function refundStake(
|
|
652
|
+
bytes32 edgeId
|
|
653
|
+
) public {
|
|
654
|
+
ChallengeEdge storage edge = store.get(edgeId);
|
|
655
|
+
// setting refunded also do checks that the edge cannot be refunded twice
|
|
656
|
+
edge.setRefunded();
|
|
657
|
+
|
|
658
|
+
IERC20 st = stakeToken;
|
|
659
|
+
uint256 sa = stakeAmounts[edge.level];
|
|
660
|
+
// no need to refund with the token or amount where zero'd out
|
|
661
|
+
if (address(st) != address(0) && sa != 0) {
|
|
662
|
+
st.safeTransfer(edge.staker, sa);
|
|
663
|
+
}
|
|
664
|
+
|
|
665
|
+
emit EdgeRefunded(edgeId, store.edges[edgeId].mutualId(), address(st), sa);
|
|
666
|
+
}
|
|
667
|
+
|
|
668
|
+
///////////////////////
|
|
669
|
+
// VIEW ONLY SECTION //
|
|
670
|
+
///////////////////////
|
|
671
|
+
/// @inheritdoc IEdgeChallengeManager
|
|
672
|
+
function getLayerZeroEndHeight(
|
|
673
|
+
EdgeType eType
|
|
674
|
+
) public view returns (uint256) {
|
|
675
|
+
if (eType == EdgeType.Block) {
|
|
676
|
+
return LAYERZERO_BLOCKEDGE_HEIGHT;
|
|
677
|
+
} else if (eType == EdgeType.BigStep) {
|
|
678
|
+
return LAYERZERO_BIGSTEPEDGE_HEIGHT;
|
|
679
|
+
} else if (eType == EdgeType.SmallStep) {
|
|
680
|
+
return LAYERZERO_SMALLSTEPEDGE_HEIGHT;
|
|
681
|
+
} else {
|
|
682
|
+
revert InvalidEdgeType(eType);
|
|
683
|
+
}
|
|
684
|
+
}
|
|
685
|
+
|
|
686
|
+
/// @inheritdoc IEdgeChallengeManager
|
|
687
|
+
function calculateEdgeId(
|
|
688
|
+
uint8 level,
|
|
689
|
+
bytes32 originId,
|
|
690
|
+
uint256 startHeight,
|
|
691
|
+
bytes32 startHistoryRoot,
|
|
692
|
+
uint256 endHeight,
|
|
693
|
+
bytes32 endHistoryRoot
|
|
694
|
+
) public pure returns (bytes32) {
|
|
695
|
+
return ChallengeEdgeLib.idComponent(
|
|
696
|
+
level, originId, startHeight, startHistoryRoot, endHeight, endHistoryRoot
|
|
697
|
+
);
|
|
698
|
+
}
|
|
699
|
+
|
|
700
|
+
/// @inheritdoc IEdgeChallengeManager
|
|
701
|
+
function calculateMutualId(
|
|
702
|
+
uint8 level,
|
|
703
|
+
bytes32 originId,
|
|
704
|
+
uint256 startHeight,
|
|
705
|
+
bytes32 startHistoryRoot,
|
|
706
|
+
uint256 endHeight
|
|
707
|
+
) public pure returns (bytes32) {
|
|
708
|
+
return ChallengeEdgeLib.mutualIdComponent(
|
|
709
|
+
level, originId, startHeight, startHistoryRoot, endHeight
|
|
710
|
+
);
|
|
711
|
+
}
|
|
712
|
+
|
|
713
|
+
/// @inheritdoc IEdgeChallengeManager
|
|
714
|
+
function edgeExists(
|
|
715
|
+
bytes32 edgeId
|
|
716
|
+
) public view returns (bool) {
|
|
717
|
+
return store.edges[edgeId].exists();
|
|
718
|
+
}
|
|
719
|
+
|
|
720
|
+
/// @inheritdoc IEdgeChallengeManager
|
|
721
|
+
function getEdge(
|
|
722
|
+
bytes32 edgeId
|
|
723
|
+
) public view returns (ChallengeEdge memory) {
|
|
724
|
+
return store.get(edgeId);
|
|
725
|
+
}
|
|
726
|
+
|
|
727
|
+
/// @inheritdoc IEdgeChallengeManager
|
|
728
|
+
function edgeLength(
|
|
729
|
+
bytes32 edgeId
|
|
730
|
+
) public view returns (uint256) {
|
|
731
|
+
return store.get(edgeId).length();
|
|
732
|
+
}
|
|
733
|
+
|
|
734
|
+
/// @inheritdoc IEdgeChallengeManager
|
|
735
|
+
function hasRival(
|
|
736
|
+
bytes32 edgeId
|
|
737
|
+
) public view returns (bool) {
|
|
738
|
+
return store.hasRival(edgeId);
|
|
739
|
+
}
|
|
740
|
+
|
|
741
|
+
/// @inheritdoc IEdgeChallengeManager
|
|
742
|
+
function confirmedRival(
|
|
743
|
+
bytes32 mutualId
|
|
744
|
+
) public view returns (bytes32) {
|
|
745
|
+
return store.confirmedRivals[mutualId];
|
|
746
|
+
}
|
|
747
|
+
|
|
748
|
+
/// @inheritdoc IEdgeChallengeManager
|
|
749
|
+
function hasLengthOneRival(
|
|
750
|
+
bytes32 edgeId
|
|
751
|
+
) public view returns (bool) {
|
|
752
|
+
return store.hasLengthOneRival(edgeId);
|
|
753
|
+
}
|
|
754
|
+
|
|
755
|
+
/// @inheritdoc IEdgeChallengeManager
|
|
756
|
+
function timeUnrivaled(
|
|
757
|
+
bytes32 edgeId
|
|
758
|
+
) public view returns (uint256) {
|
|
759
|
+
return store.timeUnrivaled(edgeId);
|
|
760
|
+
}
|
|
761
|
+
|
|
762
|
+
/// @inheritdoc IEdgeChallengeManager
|
|
763
|
+
function getPrevAssertionHash(
|
|
764
|
+
bytes32 edgeId
|
|
765
|
+
) public view returns (bytes32) {
|
|
766
|
+
return store.getPrevAssertionHash(edgeId);
|
|
767
|
+
}
|
|
768
|
+
|
|
769
|
+
/// @inheritdoc IEdgeChallengeManager
|
|
770
|
+
function firstRival(
|
|
771
|
+
bytes32 mutualId
|
|
772
|
+
) public view returns (bytes32) {
|
|
773
|
+
return store.firstRivals[mutualId];
|
|
774
|
+
}
|
|
775
|
+
|
|
776
|
+
/// @inheritdoc IEdgeChallengeManager
|
|
777
|
+
function hasMadeLayerZeroRival(
|
|
778
|
+
address account,
|
|
779
|
+
bytes32 mutualId
|
|
780
|
+
) external view returns (bool) {
|
|
781
|
+
return store.hasMadeLayerZeroRival[account][mutualId];
|
|
782
|
+
}
|
|
783
|
+
}
|