@arbitrum/nitro-contracts 3.0.0-alpha.0 → 3.0.0-alpha.2
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/LICENSE.md +1 -1
- 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/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/transparent/ProxyAdmin.sol/ProxyAdmin.dbg.json +1 -1
- package/build/contracts/@openzeppelin/contracts/proxy/transparent/TransparentUpgradeableProxy.sol/TransparentUpgradeableProxy.dbg.json +1 -1
- 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/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 +1 -1
- package/build/contracts/@openzeppelin/contracts/token/ERC20/utils/SafeERC20.sol/SafeERC20.dbg.json +1 -1
- package/build/contracts/@openzeppelin/contracts/utils/Address.sol/Address.dbg.json +1 -1
- package/build/contracts/@openzeppelin/contracts/utils/Context.sol/Context.dbg.json +1 -1
- package/build/contracts/@openzeppelin/contracts/utils/Create2.sol/Create2.dbg.json +1 -1
- package/build/contracts/@openzeppelin/contracts/utils/StorageSlot.sol/StorageSlot.dbg.json +1 -1
- package/build/contracts/@openzeppelin/contracts/utils/Strings.sol/Strings.dbg.json +1 -1
- package/build/contracts/@openzeppelin/contracts-upgradeable/access/AccessControlUpgradeable.sol/AccessControlUpgradeable.dbg.json +1 -1
- 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/proxy/utils/Initializable.sol/Initializable.dbg.json +1 -1
- package/build/contracts/@openzeppelin/contracts-upgradeable/security/PausableUpgradeable.sol/PausableUpgradeable.dbg.json +1 -1
- package/build/contracts/@openzeppelin/contracts-upgradeable/utils/AddressUpgradeable.sol/AddressUpgradeable.dbg.json +1 -1
- package/build/contracts/@openzeppelin/contracts-upgradeable/utils/ContextUpgradeable.sol/ContextUpgradeable.dbg.json +1 -1
- package/build/contracts/@openzeppelin/contracts-upgradeable/utils/Create2Upgradeable.sol/Create2Upgradeable.dbg.json +1 -1
- package/build/contracts/@openzeppelin/contracts-upgradeable/utils/StorageSlotUpgradeable.sol/StorageSlotUpgradeable.dbg.json +1 -1
- package/build/contracts/@openzeppelin/contracts-upgradeable/utils/StringsUpgradeable.sol/StringsUpgradeable.dbg.json +1 -1
- package/build/contracts/@openzeppelin/contracts-upgradeable/utils/introspection/ERC165Upgradeable.sol/ERC165Upgradeable.dbg.json +1 -1
- 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 +1 -1
- package/build/contracts/src/assertionStakingPool/AbsBoldStakingPool.sol/AbsBoldStakingPool.dbg.json +1 -1
- package/build/contracts/src/assertionStakingPool/AssertionStakingPool.sol/AssertionStakingPool.dbg.json +1 -1
- package/build/contracts/src/assertionStakingPool/AssertionStakingPool.sol/AssertionStakingPool.json +2 -2
- package/build/contracts/src/assertionStakingPool/AssertionStakingPoolCreator.sol/AssertionStakingPoolCreator.dbg.json +1 -1
- package/build/contracts/src/assertionStakingPool/AssertionStakingPoolCreator.sol/AssertionStakingPoolCreator.json +2 -2
- package/build/contracts/src/assertionStakingPool/EdgeStakingPool.sol/EdgeStakingPool.dbg.json +1 -1
- package/build/contracts/src/assertionStakingPool/EdgeStakingPool.sol/EdgeStakingPool.json +2 -2
- package/build/contracts/src/assertionStakingPool/EdgeStakingPoolCreator.sol/EdgeStakingPoolCreator.dbg.json +1 -1
- package/build/contracts/src/assertionStakingPool/EdgeStakingPoolCreator.sol/EdgeStakingPoolCreator.json +2 -2
- package/build/contracts/src/assertionStakingPool/StakingPoolCreatorUtils.sol/StakingPoolCreatorUtils.dbg.json +1 -1
- package/build/contracts/src/assertionStakingPool/interfaces/IAbsBoldStakingPool.sol/IAbsBoldStakingPool.dbg.json +1 -1
- package/build/contracts/src/assertionStakingPool/interfaces/IAssertionStakingPool.sol/IAssertionStakingPool.dbg.json +1 -1
- package/build/contracts/src/assertionStakingPool/interfaces/IAssertionStakingPoolCreator.sol/IAssertionStakingPoolCreator.dbg.json +1 -1
- package/build/contracts/src/assertionStakingPool/interfaces/IEdgeStakingPool.sol/IEdgeStakingPool.dbg.json +1 -1
- package/build/contracts/src/assertionStakingPool/interfaces/IEdgeStakingPoolCreator.sol/IEdgeStakingPoolCreator.dbg.json +1 -1
- package/build/contracts/src/bridge/AbsBridge.sol/AbsBridge.dbg.json +1 -1
- package/build/contracts/src/bridge/AbsInbox.sol/AbsInbox.dbg.json +1 -1
- package/build/contracts/src/bridge/AbsInbox.sol/AbsInbox.json +7 -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 +2 -2
- package/build/contracts/src/bridge/DelayBuffer.sol/DelayBuffer.dbg.json +1 -1
- package/build/contracts/src/bridge/ERC20Bridge.sol/ERC20Bridge.dbg.json +1 -1
- package/build/contracts/src/bridge/ERC20Bridge.sol/ERC20Bridge.json +2 -2
- package/build/contracts/src/bridge/ERC20Inbox.sol/ERC20Inbox.dbg.json +1 -1
- package/build/contracts/src/bridge/ERC20Inbox.sol/ERC20Inbox.json +9 -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/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/Inbox.sol/Inbox.dbg.json +1 -1
- package/build/contracts/src/bridge/Inbox.sol/Inbox.json +9 -9
- package/build/contracts/src/bridge/Messages.sol/Messages.dbg.json +1 -1
- 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 +5 -5
- package/build/contracts/src/chain/CacheManager.sol/CacheManager.dbg.json +1 -1
- package/build/contracts/src/chain/CacheManager.sol/CacheManager.json +2 -2
- package/build/contracts/src/challengeV2/EdgeChallengeManager.sol/EdgeChallengeManager.dbg.json +1 -1
- package/build/contracts/src/challengeV2/EdgeChallengeManager.sol/EdgeChallengeManager.json +2 -2
- package/build/contracts/src/challengeV2/IAssertionChain.sol/IAssertionChain.dbg.json +1 -1
- package/build/contracts/src/challengeV2/IEdgeChallengeManager.sol/IEdgeChallengeManager.dbg.json +4 -0
- package/build/contracts/src/challengeV2/{EdgeChallengeManager.sol → IEdgeChallengeManager.sol}/IEdgeChallengeManager.json +33 -1
- package/build/contracts/src/challengeV2/libraries/ArrayUtilsLib.sol/ArrayUtilsLib.dbg.json +1 -1
- package/build/contracts/src/challengeV2/libraries/ChallengeEdgeLib.sol/ChallengeEdgeLib.dbg.json +1 -1
- package/build/contracts/src/challengeV2/libraries/ChallengeEdgeLib.sol/ChallengeEdgeLib.json +2 -2
- package/build/contracts/src/challengeV2/libraries/EdgeChallengeManagerLib.sol/EdgeChallengeManagerLib.dbg.json +1 -1
- package/build/contracts/src/challengeV2/libraries/EdgeChallengeManagerLib.sol/EdgeChallengeManagerLib.json +2 -2
- package/build/contracts/src/challengeV2/libraries/MerkleTreeAccumulatorLib.sol/MerkleTreeAccumulatorLib.dbg.json +1 -1
- package/build/contracts/src/challengeV2/libraries/MerkleTreeAccumulatorLib.sol/MerkleTreeAccumulatorLib.json +2 -2
- package/build/contracts/src/challengeV2/libraries/UintUtilsLib.sol/UintUtilsLib.dbg.json +1 -1
- package/build/contracts/src/libraries/AddressAliasHelper.sol/AddressAliasHelper.dbg.json +1 -1
- package/build/contracts/src/libraries/AdminFallbackProxy.sol/AdminFallbackProxy.dbg.json +1 -1
- 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/CallerChecker.sol/CallerChecker.dbg.json +4 -0
- package/build/contracts/src/libraries/CallerChecker.sol/CallerChecker.json +10 -0
- package/build/contracts/src/libraries/CryptographyPrimitives.sol/CryptographyPrimitives.dbg.json +1 -1
- package/build/contracts/src/libraries/DecimalsConverterHelper.sol/DecimalsConverterHelper.dbg.json +1 -1
- 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/BridgeStub.sol/BridgeStub.dbg.json +1 -1
- package/build/contracts/src/mocks/BridgeStub.sol/BridgeStub.json +2 -2
- package/build/contracts/src/mocks/BridgeUnproxied.sol/BridgeUnproxied.dbg.json +1 -1
- package/build/contracts/src/mocks/BridgeUnproxied.sol/BridgeUnproxied.json +2 -2
- package/build/contracts/src/mocks/CreateTest.sol/CreateTest.dbg.json +4 -0
- package/build/contracts/src/mocks/CreateTest.sol/CreateTest.json +15 -0
- package/build/contracts/src/mocks/HostioTest.sol/HostioTest.dbg.json +4 -0
- package/build/contracts/src/mocks/HostioTest.sol/HostioTest.json +513 -0
- 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 +1 -1
- package/build/contracts/src/mocks/MerkleTreeAccess.sol/MerkleTreeAccess.json +2 -2
- package/build/contracts/src/mocks/MockRollupEventInbox.sol/MockRollupEventInbox.dbg.json +1 -1
- package/build/contracts/src/mocks/MockRollupEventInbox.sol/MockRollupEventInbox.json +2 -2
- package/build/contracts/src/mocks/MultiCallTest.sol/MultiCallTest.dbg.json +1 -1
- 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/SdkStorage.sol/SdkStorage.dbg.json +1 -1
- package/build/contracts/src/mocks/SequencerInboxBlobMock.sol/SequencerInboxBlobMock.dbg.json +1 -1
- package/build/contracts/src/mocks/SequencerInboxBlobMock.sol/SequencerInboxBlobMock.json +5 -5
- package/build/contracts/src/mocks/SequencerInboxStub.sol/SequencerInboxStub.dbg.json +1 -1
- package/build/contracts/src/mocks/SequencerInboxStub.sol/SequencerInboxStub.json +5 -5
- 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/SimpleOneStepProofEntry.sol/SimpleOneStepProofEntry.dbg.json +1 -1
- package/build/contracts/src/mocks/SimpleOneStepProofEntry.sol/SimpleOneStepProofEntry.json +2 -2
- package/build/contracts/src/mocks/SimpleProxy.sol/SimpleProxy.dbg.json +1 -1
- package/build/contracts/src/mocks/TestWETH9.sol/IWETH9.dbg.json +1 -1
- package/build/contracts/src/mocks/TestWETH9.sol/TestWETH9.dbg.json +1 -1
- package/build/contracts/src/mocks/UpgradeExecutorMock.sol/UpgradeExecutorMock.dbg.json +1 -1
- 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/IOneStepProofEntry.sol/IOneStepProofEntry.dbg.json +1 -1
- package/build/contracts/src/osp/IOneStepProofEntry.sol/OneStepProofEntryLib.dbg.json +1 -1
- package/build/contracts/src/osp/IOneStepProver.sol/IOneStepProver.dbg.json +1 -1
- package/build/contracts/src/osp/OneStepProofEntry.sol/OneStepProofEntry.dbg.json +1 -1
- package/build/contracts/src/osp/OneStepProver0.sol/OneStepProver0.dbg.json +1 -1
- package/build/contracts/src/osp/OneStepProverHostIo.sol/OneStepProverHostIo.dbg.json +1 -1
- package/build/contracts/src/osp/OneStepProverMath.sol/OneStepProverMath.dbg.json +1 -1
- package/build/contracts/src/osp/OneStepProverMemory.sol/OneStepProverMemory.dbg.json +1 -1
- 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/ArbWasm.sol/ArbWasm.json +4 -4
- 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 +1 -1
- package/build/contracts/src/rollup/AssertionState.sol/AssertionStateLib.dbg.json +1 -1
- package/build/contracts/src/rollup/BOLDUpgradeAction.sol/BOLDUpgradeAction.dbg.json +1 -1
- package/build/contracts/src/rollup/BOLDUpgradeAction.sol/BOLDUpgradeAction.json +2 -2
- package/build/contracts/src/rollup/BOLDUpgradeAction.sol/ConstantArrayStorage.dbg.json +1 -1
- package/build/contracts/src/rollup/BOLDUpgradeAction.sol/ConstantArrayStorage.json +2 -2
- package/build/contracts/src/rollup/BOLDUpgradeAction.sol/IOldRollup.dbg.json +1 -1
- package/build/contracts/src/rollup/BOLDUpgradeAction.sol/IOldRollupAdmin.dbg.json +1 -1
- package/build/contracts/src/rollup/BOLDUpgradeAction.sol/ISeqInboxPostUpgradeInit.dbg.json +1 -1
- package/build/contracts/src/rollup/BOLDUpgradeAction.sol/RollupReader.dbg.json +1 -1
- package/build/contracts/src/rollup/BOLDUpgradeAction.sol/RollupReader.json +2 -2
- package/build/contracts/src/rollup/BOLDUpgradeAction.sol/StateHashPreImageLookup.dbg.json +1 -1
- package/build/contracts/src/rollup/BOLDUpgradeAction.sol/StateHashPreImageLookup.json +2 -2
- package/build/contracts/src/rollup/BridgeCreator.sol/BridgeCreator.dbg.json +1 -1
- package/build/contracts/src/rollup/BridgeCreator.sol/BridgeCreator.json +2 -2
- 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/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/IRollupCore.sol/IRollupCore.dbg.json +1 -1
- 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/RollupAdminLogic.sol/RollupAdminLogic.dbg.json +1 -1
- package/build/contracts/src/rollup/RollupAdminLogic.sol/RollupAdminLogic.json +2 -2
- package/build/contracts/src/rollup/RollupCore.sol/RollupCore.dbg.json +1 -1
- package/build/contracts/src/rollup/RollupCreator.sol/RollupCreator.dbg.json +1 -1
- package/build/contracts/src/rollup/RollupCreator.sol/RollupCreator.json +2 -2
- 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 +2 -2
- package/build/contracts/src/rollup/RollupUserLogic.sol/RollupUserLogic.dbg.json +1 -1
- package/build/contracts/src/rollup/RollupUserLogic.sol/RollupUserLogic.json +2 -2
- package/build/contracts/src/rollup/ValidatorWallet.sol/ValidatorWallet.dbg.json +1 -1
- package/build/contracts/src/rollup/ValidatorWallet.sol/ValidatorWallet.json +2 -2
- 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/GlobalState.sol/GlobalStateLib.dbg.json +1 -1
- package/build/contracts/src/state/Instructions.sol/Instructions.dbg.json +1 -1
- package/build/contracts/src/state/Machine.sol/MachineLib.dbg.json +1 -1
- package/build/contracts/src/state/MerkleProof.sol/MerkleProofLib.dbg.json +1 -1
- package/build/contracts/src/state/Module.sol/ModuleLib.dbg.json +1 -1
- package/build/contracts/src/state/ModuleMemory.sol/ModuleMemoryLib.dbg.json +1 -1
- package/build/contracts/src/state/ModuleMemoryCompact.sol/ModuleMemoryCompactLib.dbg.json +1 -1
- package/build/contracts/src/state/MultiStack.sol/MultiStackLib.dbg.json +1 -1
- package/build/contracts/src/state/PcArray.sol/PcArrayLib.dbg.json +1 -1
- package/build/contracts/src/state/StackFrame.sol/StackFrameLib.dbg.json +1 -1
- package/build/contracts/src/state/Value.sol/ValueLib.dbg.json +1 -1
- package/build/contracts/src/state/ValueArray.sol/ValueArrayLib.dbg.json +1 -1
- package/build/contracts/src/state/ValueStack.sol/ValueStackLib.dbg.json +1 -1
- package/build/contracts/src/test-helpers/BridgeTester.sol/BridgeTester.dbg.json +1 -1
- package/build/contracts/src/test-helpers/BridgeTester.sol/BridgeTester.json +2 -2
- package/build/contracts/src/test-helpers/CryptographyPrimitivesTester.sol/CryptographyPrimitivesTester.dbg.json +1 -1
- package/build/contracts/src/test-helpers/EthVault.sol/EthVault.dbg.json +1 -1
- package/build/contracts/src/test-helpers/MessageTester.sol/MessageTester.dbg.json +1 -1
- 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/TestToken.sol/TestToken.dbg.json +1 -1
- package/build/contracts/src/test-helpers/ValueArrayTester.sol/ValueArrayTester.dbg.json +1 -1
- package/out/yul/Reader4844.yul/Reader4844.json +1 -1
- package/package.json +1 -1
- package/src/assertionStakingPool/EdgeStakingPool.sol +3 -4
- package/src/assertionStakingPool/interfaces/IEdgeStakingPool.sol +1 -1
- package/src/bridge/AbsInbox.sol +10 -4
- package/src/bridge/IInboxBase.sol +6 -2
- package/src/bridge/Inbox.sol +3 -0
- package/src/bridge/SequencerInbox.sol +10 -11
- package/src/challengeV2/EdgeChallengeManager.sol +1 -225
- package/src/challengeV2/IAssertionChain.sol +1 -1
- package/src/challengeV2/IEdgeChallengeManager.sol +239 -0
- package/src/challengeV2/libraries/ChallengeEdgeLib.sol +1 -57
- package/src/challengeV2/libraries/EdgeChallengeManagerLib.sol +2 -113
- package/src/challengeV2/libraries/Structs.sol +176 -0
- package/src/libraries/CallerChecker.sol +18 -0
- package/src/libraries/Error.sol +3 -0
- package/src/libraries/GasRefundEnabled.sol +2 -2
- package/src/mocks/CreateTest.sol +44 -0
- package/src/mocks/HostioTest.sol +200 -0
- package/src/mocks/SimpleOneStepProofEntry.sol +1 -1
- package/src/precompiles/ArbSys.sol +2 -1
- package/src/precompiles/ArbWasm.sol +1 -1
- package/src/rollup/Config.sol +1 -1
- package/src/rollup/IRollupCore.sol +1 -1
- package/src/rollup/RollupCore.sol +1 -1
- package/src/rollup/RollupLib.sol +1 -1
- package/src/rollup/RollupUserLogic.sol +1 -0
- package/build/contracts/src/challengeV2/EdgeChallengeManager.sol/IEdgeChallengeManager.dbg.json +0 -4
|
@@ -0,0 +1,239 @@
|
|
|
1
|
+
// Copyright 2023, Offchain Labs, Inc.
|
|
2
|
+
// For license information, see https://github.com/offchainlabs/bold/blob/main/LICENSE
|
|
3
|
+
// SPDX-License-Identifier: BUSL-1.1
|
|
4
|
+
//
|
|
5
|
+
pragma solidity ^0.8.0;
|
|
6
|
+
|
|
7
|
+
import "./IAssertionChain.sol";
|
|
8
|
+
import "./libraries/Structs.sol";
|
|
9
|
+
import "@openzeppelin/contracts/token/ERC20/IERC20.sol";
|
|
10
|
+
|
|
11
|
+
/// @title EdgeChallengeManager interface
|
|
12
|
+
interface IEdgeChallengeManager {
|
|
13
|
+
/// @notice Initialize the EdgeChallengeManager. EdgeChallengeManagers are upgradeable
|
|
14
|
+
/// so use the initializer paradigm
|
|
15
|
+
/// @param _assertionChain The assertion chain contract
|
|
16
|
+
/// @param _challengePeriodBlocks The amount of cumulative time an edge must spend unrivaled before it can be confirmed
|
|
17
|
+
/// This should be the censorship period + the cumulative amount of time needed to do any
|
|
18
|
+
/// offchain calculation. We currently estimate around 10 mins for each layer zero edge and 1
|
|
19
|
+
/// one minute for each other edge.
|
|
20
|
+
/// @param _oneStepProofEntry The one step proof logic
|
|
21
|
+
/// @param layerZeroBlockEdgeHeight The end height of layer zero edges of type Block
|
|
22
|
+
/// @param layerZeroBigStepEdgeHeight The end height of layer zero edges of type BigStep
|
|
23
|
+
/// @param layerZeroSmallStepEdgeHeight The end height of layer zero edges of type SmallStep
|
|
24
|
+
/// @param _stakeToken The token that stake will be provided in when creating zero layer block edges
|
|
25
|
+
/// @param _excessStakeReceiver The address that excess stake will be sent to when 2nd+ block edge is created
|
|
26
|
+
/// @param _numBigStepLevel The number of bigstep levels
|
|
27
|
+
/// @param _stakeAmounts The stake amount for each level. (first element is for block level)
|
|
28
|
+
function initialize(
|
|
29
|
+
IAssertionChain _assertionChain,
|
|
30
|
+
uint64 _challengePeriodBlocks,
|
|
31
|
+
IOneStepProofEntry _oneStepProofEntry,
|
|
32
|
+
uint256 layerZeroBlockEdgeHeight,
|
|
33
|
+
uint256 layerZeroBigStepEdgeHeight,
|
|
34
|
+
uint256 layerZeroSmallStepEdgeHeight,
|
|
35
|
+
IERC20 _stakeToken,
|
|
36
|
+
address _excessStakeReceiver,
|
|
37
|
+
uint8 _numBigStepLevel,
|
|
38
|
+
uint256[] calldata _stakeAmounts
|
|
39
|
+
) external;
|
|
40
|
+
|
|
41
|
+
function stakeToken() external view returns (IERC20);
|
|
42
|
+
|
|
43
|
+
function stakeAmounts(
|
|
44
|
+
uint256
|
|
45
|
+
) external view returns (uint256);
|
|
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
|
+
}
|
|
@@ -6,63 +6,7 @@ pragma solidity ^0.8.17;
|
|
|
6
6
|
|
|
7
7
|
import "./Enums.sol";
|
|
8
8
|
import "./ChallengeErrors.sol";
|
|
9
|
-
|
|
10
|
-
/// @notice An edge committing to a range of states. These edges will be bisected, slowly
|
|
11
|
-
/// reducing them in length until they reach length one. At that point new edges of a different
|
|
12
|
-
/// level will be added that claim the result of this edge, or a one step proof will be calculated
|
|
13
|
-
/// if the edge level is already of type SmallStep.
|
|
14
|
-
struct ChallengeEdge {
|
|
15
|
-
/// @notice The origin id is a link from the edge to an edge or assertion at a lower level.
|
|
16
|
-
/// Intuitively all edges with the same origin id agree on the information committed to in the origin id
|
|
17
|
-
/// For a SmallStep edge the origin id is the 'mutual' id of the length one BigStep edge being claimed by the zero layer ancestors of this edge
|
|
18
|
-
/// For a BigStep edge the origin id is the 'mutual' id of the length one Block edge being claimed by the zero layer ancestors of this edge
|
|
19
|
-
/// For a Block edge the origin id is the assertion hash of the assertion that is the root of the challenge - all edges in this challenge agree
|
|
20
|
-
/// that that assertion hash is valid.
|
|
21
|
-
/// The purpose of the origin id is to ensure that only edges that agree on a common start position
|
|
22
|
-
/// are being compared against one another.
|
|
23
|
-
bytes32 originId;
|
|
24
|
-
/// @notice A root of all the states in the history up to the startHeight
|
|
25
|
-
bytes32 startHistoryRoot;
|
|
26
|
-
/// @notice The height of the start history root
|
|
27
|
-
uint256 startHeight;
|
|
28
|
-
/// @notice A root of all the states in the history up to the endHeight. Since endHeight > startHeight, the startHistoryRoot must
|
|
29
|
-
/// commit to a prefix of the states committed to by the endHistoryRoot
|
|
30
|
-
bytes32 endHistoryRoot;
|
|
31
|
-
/// @notice The height of the end history root
|
|
32
|
-
uint256 endHeight;
|
|
33
|
-
/// @notice Edges can be bisected into two children. If this edge has been bisected the id of the
|
|
34
|
-
/// lower child is populated here, until that time this value is 0. The lower child has startHistoryRoot and startHeight
|
|
35
|
-
/// equal to this edge, but endHistoryRoot and endHeight equal to some prefix of the endHistoryRoot of this edge
|
|
36
|
-
bytes32 lowerChildId;
|
|
37
|
-
/// @notice Edges can be bisected into two children. If this edge has been bisected the id of the
|
|
38
|
-
/// upper child is populated here, until that time this value is 0. The upper child has startHistoryRoot and startHeight
|
|
39
|
-
/// equal to some prefix of the endHistoryRoot of this edge, and endHistoryRoot and endHeight equal to this edge
|
|
40
|
-
bytes32 upperChildId;
|
|
41
|
-
/// @notice The edge or assertion in the upper level that this edge claims to be true.
|
|
42
|
-
/// Only populated on zero layer edges
|
|
43
|
-
bytes32 claimId;
|
|
44
|
-
/// @notice The entity that supplied a mini-stake accompanying this edge
|
|
45
|
-
/// Only populated on zero layer edges
|
|
46
|
-
address staker;
|
|
47
|
-
/// @notice The block number when this edge was created
|
|
48
|
-
uint64 createdAtBlock;
|
|
49
|
-
/// @notice The block number at which this edge was confirmed
|
|
50
|
-
/// Zero if not confirmed
|
|
51
|
-
uint64 confirmedAtBlock;
|
|
52
|
-
/// @notice Current status of this edge. All edges are created Pending, and may be updated to Confirmed
|
|
53
|
-
/// Once Confirmed they cannot transition back to Pending
|
|
54
|
-
EdgeStatus status;
|
|
55
|
-
/// @notice The level of this edge.
|
|
56
|
-
/// Level 0 is type Block
|
|
57
|
-
/// Last level (defined by NUM_BIGSTEP_LEVEL + 1) is type SmallStep
|
|
58
|
-
/// All levels in between are of type BigStep
|
|
59
|
-
uint8 level;
|
|
60
|
-
/// @notice Set to true when the staker has been refunded. Can only be set to true if the status is Confirmed
|
|
61
|
-
/// and the staker is non zero.
|
|
62
|
-
bool refunded;
|
|
63
|
-
/// @notice TODO
|
|
64
|
-
uint64 totalTimeUnrivaledCache;
|
|
65
|
-
}
|
|
9
|
+
import "./Structs.sol";
|
|
66
10
|
|
|
67
11
|
library ChallengeEdgeLib {
|
|
68
12
|
/// @notice Common checks to do when adding an edge
|
|
@@ -8,124 +8,13 @@ import "./UintUtilsLib.sol";
|
|
|
8
8
|
import "./MerkleTreeAccumulatorLib.sol";
|
|
9
9
|
import "./ChallengeEdgeLib.sol";
|
|
10
10
|
import "../../osp/IOneStepProofEntry.sol";
|
|
11
|
-
import "../../rollup/AssertionState.sol";
|
|
12
11
|
import "../../libraries/Constants.sol";
|
|
13
12
|
import "./ChallengeErrors.sol";
|
|
14
|
-
|
|
15
|
-
/// @notice An execution state and proof to show that it's valid
|
|
16
|
-
struct AssertionStateData {
|
|
17
|
-
/// @notice An execution state
|
|
18
|
-
AssertionState assertionState;
|
|
19
|
-
/// @notice assertion Hash of the prev assertion
|
|
20
|
-
bytes32 prevAssertionHash;
|
|
21
|
-
/// @notice Inbox accumulator of the assertion
|
|
22
|
-
bytes32 inboxAcc;
|
|
23
|
-
}
|
|
24
|
-
|
|
25
|
-
/// @notice Data for creating a layer zero edge
|
|
26
|
-
struct CreateEdgeArgs {
|
|
27
|
-
/// @notice The level of edge to be created. Challenges are decomposed into multiple levels.
|
|
28
|
-
/// The first (level 0) being of type Block, followed by n (set by NUM_BIGSTEP_LEVEL) levels of type BigStep, and finally
|
|
29
|
-
/// followed by a single level of type SmallStep. Each level is bisected until an edge
|
|
30
|
-
/// of length one is reached before proceeding to the next level. The first edge in each level (the layer zero edge)
|
|
31
|
-
/// makes a claim about an assertion or assertion in the lower level.
|
|
32
|
-
/// Finally in the last level, a SmallStep edge is added that claims a lower level length one BigStep edge, and these
|
|
33
|
-
/// SmallStep edges are bisected until they reach length one. A length one small step edge
|
|
34
|
-
/// can then be directly executed using a one-step proof.
|
|
35
|
-
uint8 level;
|
|
36
|
-
/// @notice The end history root of the edge to be created
|
|
37
|
-
bytes32 endHistoryRoot;
|
|
38
|
-
/// @notice The end height of the edge to be created.
|
|
39
|
-
/// @dev End height is deterministic for different levels but supplying it here gives the
|
|
40
|
-
/// caller a bit of extra security that they are supplying data for the correct level of edge
|
|
41
|
-
uint256 endHeight;
|
|
42
|
-
/// @notice The edge, or assertion, that is being claimed correct by the newly created edge.
|
|
43
|
-
bytes32 claimId;
|
|
44
|
-
/// @notice Proof that the start history root commits to a prefix of the states that
|
|
45
|
-
/// end history root commits to
|
|
46
|
-
bytes prefixProof;
|
|
47
|
-
/// @notice Edge type specific data
|
|
48
|
-
/// For Block type edges this is the abi encoding of:
|
|
49
|
-
/// bytes32[]: Inclusion proof - proof to show that the end state is the last state in the end history root
|
|
50
|
-
/// AssertionStateData: the before state of the edge
|
|
51
|
-
/// AssertionStateData: the after state of the edge
|
|
52
|
-
/// bytes32 predecessorId: id of the prev assertion
|
|
53
|
-
/// bytes32 inboxAcc: the inbox accumulator of the assertion
|
|
54
|
-
/// For BigStep and SmallStep edges this is the abi encoding of:
|
|
55
|
-
/// bytes32: Start state - first state the edge commits to
|
|
56
|
-
/// bytes32: End state - last state the edge commits to
|
|
57
|
-
/// bytes32[]: Claim start inclusion proof - proof to show the start state is the first state in the claim edge
|
|
58
|
-
/// bytes32[]: Claim end inclusion proof - proof to show the end state is the last state in the claim edge
|
|
59
|
-
/// bytes32[]: Inclusion proof - proof to show that the end state is the last state in the end history root
|
|
60
|
-
bytes proof;
|
|
61
|
-
}
|
|
62
|
-
|
|
63
|
-
/// @notice Data parsed raw proof data
|
|
64
|
-
struct ProofData {
|
|
65
|
-
/// @notice The first state being committed to by an edge
|
|
66
|
-
bytes32 startState;
|
|
67
|
-
/// @notice The last state being committed to by an edge
|
|
68
|
-
bytes32 endState;
|
|
69
|
-
/// @notice A proof that the end state is included in the edge
|
|
70
|
-
bytes32[] inclusionProof;
|
|
71
|
-
}
|
|
72
|
-
|
|
73
|
-
/// @notice Stores all edges and their rival status
|
|
74
|
-
struct EdgeStore {
|
|
75
|
-
/// @notice A mapping of edge id to edges. Edges are never deleted, only created, and potentially confirmed.
|
|
76
|
-
mapping(bytes32 => ChallengeEdge) edges;
|
|
77
|
-
/// @notice A mapping of mutualId to edge id. Rivals share the same mutual id, and here we
|
|
78
|
-
/// store the edge id of the second edge that was created with the same mutual id - the first rival
|
|
79
|
-
/// When only one edge exists for a specific mutual id then a special magic string hash is stored instead
|
|
80
|
-
/// of the first rival id, to signify that a single edge does exist with this mutual id
|
|
81
|
-
mapping(bytes32 => bytes32) firstRivals;
|
|
82
|
-
/// @notice A mapping of mutualId to the edge id of the confirmed rival with that mutualId
|
|
83
|
-
/// @dev Each group of rivals (edges sharing mutual id) can only have at most one confirmed edge
|
|
84
|
-
mapping(bytes32 => bytes32) confirmedRivals;
|
|
85
|
-
/// @notice A mapping of account -> mutualId -> bool indicating if the account has created a layer zero edge with a mutual id
|
|
86
|
-
mapping(address => mapping(bytes32 => bool)) hasMadeLayerZeroRival;
|
|
87
|
-
}
|
|
88
|
-
|
|
89
|
-
/// @notice Input data to a one step proof
|
|
90
|
-
struct OneStepData {
|
|
91
|
-
/// @notice The hash of the state that's being executed from
|
|
92
|
-
bytes32 beforeHash;
|
|
93
|
-
/// @notice Proof data to accompany the execution context
|
|
94
|
-
bytes proof;
|
|
95
|
-
}
|
|
96
|
-
|
|
97
|
-
/// @notice Data about a recently added edge
|
|
98
|
-
struct EdgeAddedData {
|
|
99
|
-
bytes32 edgeId;
|
|
100
|
-
bytes32 mutualId;
|
|
101
|
-
bytes32 originId;
|
|
102
|
-
bytes32 claimId;
|
|
103
|
-
uint256 length;
|
|
104
|
-
uint8 level;
|
|
105
|
-
bool hasRival;
|
|
106
|
-
bool isLayerZero;
|
|
107
|
-
}
|
|
108
|
-
|
|
109
|
-
/// @notice Data about an assertion that is being claimed by an edge
|
|
110
|
-
/// @dev This extra information that is needed in order to verify that a block edge can be created
|
|
111
|
-
struct AssertionReferenceData {
|
|
112
|
-
/// @notice The id of the assertion - will be used in a sanity check
|
|
113
|
-
bytes32 assertionHash;
|
|
114
|
-
/// @notice The predecessor of the assertion
|
|
115
|
-
bytes32 predecessorId;
|
|
116
|
-
/// @notice Is the assertion pending
|
|
117
|
-
bool isPending;
|
|
118
|
-
/// @notice Does the assertion have a sibling
|
|
119
|
-
bool hasSibling;
|
|
120
|
-
/// @notice The execution state of the predecessor assertion
|
|
121
|
-
AssertionState startState;
|
|
122
|
-
/// @notice The execution state of the assertion being claimed
|
|
123
|
-
AssertionState endState;
|
|
124
|
-
}
|
|
125
|
-
|
|
13
|
+
import "./Structs.sol";
|
|
126
14
|
/// @title Core functionality for the Edge Challenge Manager
|
|
127
15
|
/// @notice The edge manager library allows edges to be added and bisected, and keeps track of the amount
|
|
128
16
|
/// of time an edge remained unrivaled.
|
|
17
|
+
|
|
129
18
|
library EdgeChallengeManagerLib {
|
|
130
19
|
using ChallengeEdgeLib for ChallengeEdge;
|
|
131
20
|
using GlobalStateLib for GlobalState;
|
|
@@ -0,0 +1,176 @@
|
|
|
1
|
+
// Copyright 2023, Offchain Labs, Inc.
|
|
2
|
+
// For license information, see https://github.com/offchainlabs/bold/blob/main/LICENSE
|
|
3
|
+
// SPDX-License-Identifier: BUSL-1.1
|
|
4
|
+
//
|
|
5
|
+
pragma solidity ^0.8.0;
|
|
6
|
+
|
|
7
|
+
import "./Enums.sol";
|
|
8
|
+
import "../../rollup/AssertionState.sol";
|
|
9
|
+
|
|
10
|
+
/// @notice An execution state and proof to show that it's valid
|
|
11
|
+
struct AssertionStateData {
|
|
12
|
+
/// @notice An execution state
|
|
13
|
+
AssertionState assertionState;
|
|
14
|
+
/// @notice assertion Hash of the prev assertion
|
|
15
|
+
bytes32 prevAssertionHash;
|
|
16
|
+
/// @notice Inbox accumulator of the assertion
|
|
17
|
+
bytes32 inboxAcc;
|
|
18
|
+
}
|
|
19
|
+
|
|
20
|
+
/// @notice Data for creating a layer zero edge
|
|
21
|
+
struct CreateEdgeArgs {
|
|
22
|
+
/// @notice The level of edge to be created. Challenges are decomposed into multiple levels.
|
|
23
|
+
/// The first (level 0) being of type Block, followed by n (set by NUM_BIGSTEP_LEVEL) levels of type BigStep, and finally
|
|
24
|
+
/// followed by a single level of type SmallStep. Each level is bisected until an edge
|
|
25
|
+
/// of length one is reached before proceeding to the next level. The first edge in each level (the layer zero edge)
|
|
26
|
+
/// makes a claim about an assertion or assertion in the lower level.
|
|
27
|
+
/// Finally in the last level, a SmallStep edge is added that claims a lower level length one BigStep edge, and these
|
|
28
|
+
/// SmallStep edges are bisected until they reach length one. A length one small step edge
|
|
29
|
+
/// can then be directly executed using a one-step proof.
|
|
30
|
+
uint8 level;
|
|
31
|
+
/// @notice The end history root of the edge to be created
|
|
32
|
+
bytes32 endHistoryRoot;
|
|
33
|
+
/// @notice The end height of the edge to be created.
|
|
34
|
+
/// @dev End height is deterministic for different levels but supplying it here gives the
|
|
35
|
+
/// caller a bit of extra security that they are supplying data for the correct level of edge
|
|
36
|
+
uint256 endHeight;
|
|
37
|
+
/// @notice The edge, or assertion, that is being claimed correct by the newly created edge.
|
|
38
|
+
bytes32 claimId;
|
|
39
|
+
/// @notice Proof that the start history root commits to a prefix of the states that
|
|
40
|
+
/// end history root commits to
|
|
41
|
+
bytes prefixProof;
|
|
42
|
+
/// @notice Edge type specific data
|
|
43
|
+
/// For Block type edges this is the abi encoding of:
|
|
44
|
+
/// bytes32[]: Inclusion proof - proof to show that the end state is the last state in the end history root
|
|
45
|
+
/// AssertionStateData: the before state of the edge
|
|
46
|
+
/// AssertionStateData: the after state of the edge
|
|
47
|
+
/// bytes32 predecessorId: id of the prev assertion
|
|
48
|
+
/// bytes32 inboxAcc: the inbox accumulator of the assertion
|
|
49
|
+
/// For BigStep and SmallStep edges this is the abi encoding of:
|
|
50
|
+
/// bytes32: Start state - first state the edge commits to
|
|
51
|
+
/// bytes32: End state - last state the edge commits to
|
|
52
|
+
/// bytes32[]: Claim start inclusion proof - proof to show the start state is the first state in the claim edge
|
|
53
|
+
/// bytes32[]: Claim end inclusion proof - proof to show the end state is the last state in the claim edge
|
|
54
|
+
/// bytes32[]: Inclusion proof - proof to show that the end state is the last state in the end history root
|
|
55
|
+
bytes proof;
|
|
56
|
+
}
|
|
57
|
+
|
|
58
|
+
/// @notice Data parsed raw proof data
|
|
59
|
+
struct ProofData {
|
|
60
|
+
/// @notice The first state being committed to by an edge
|
|
61
|
+
bytes32 startState;
|
|
62
|
+
/// @notice The last state being committed to by an edge
|
|
63
|
+
bytes32 endState;
|
|
64
|
+
/// @notice A proof that the end state is included in the edge
|
|
65
|
+
bytes32[] inclusionProof;
|
|
66
|
+
}
|
|
67
|
+
|
|
68
|
+
/// @notice Stores all edges and their rival status
|
|
69
|
+
struct EdgeStore {
|
|
70
|
+
/// @notice A mapping of edge id to edges. Edges are never deleted, only created, and potentially confirmed.
|
|
71
|
+
mapping(bytes32 => ChallengeEdge) edges;
|
|
72
|
+
/// @notice A mapping of mutualId to edge id. Rivals share the same mutual id, and here we
|
|
73
|
+
/// store the edge id of the second edge that was created with the same mutual id - the first rival
|
|
74
|
+
/// When only one edge exists for a specific mutual id then a special magic string hash is stored instead
|
|
75
|
+
/// of the first rival id, to signify that a single edge does exist with this mutual id
|
|
76
|
+
mapping(bytes32 => bytes32) firstRivals;
|
|
77
|
+
/// @notice A mapping of mutualId to the edge id of the confirmed rival with that mutualId
|
|
78
|
+
/// @dev Each group of rivals (edges sharing mutual id) can only have at most one confirmed edge
|
|
79
|
+
mapping(bytes32 => bytes32) confirmedRivals;
|
|
80
|
+
/// @notice A mapping of account -> mutualId -> bool indicating if the account has created a layer zero edge with a mutual id
|
|
81
|
+
mapping(address => mapping(bytes32 => bool)) hasMadeLayerZeroRival;
|
|
82
|
+
}
|
|
83
|
+
|
|
84
|
+
/// @notice Input data to a one step proof
|
|
85
|
+
struct OneStepData {
|
|
86
|
+
/// @notice The hash of the state that's being executed from
|
|
87
|
+
bytes32 beforeHash;
|
|
88
|
+
/// @notice Proof data to accompany the execution context
|
|
89
|
+
bytes proof;
|
|
90
|
+
}
|
|
91
|
+
|
|
92
|
+
/// @notice Data about a recently added edge
|
|
93
|
+
struct EdgeAddedData {
|
|
94
|
+
bytes32 edgeId;
|
|
95
|
+
bytes32 mutualId;
|
|
96
|
+
bytes32 originId;
|
|
97
|
+
bytes32 claimId;
|
|
98
|
+
uint256 length;
|
|
99
|
+
uint8 level;
|
|
100
|
+
bool hasRival;
|
|
101
|
+
bool isLayerZero;
|
|
102
|
+
}
|
|
103
|
+
|
|
104
|
+
/// @notice Data about an assertion that is being claimed by an edge
|
|
105
|
+
/// @dev This extra information that is needed in order to verify that a block edge can be created
|
|
106
|
+
struct AssertionReferenceData {
|
|
107
|
+
/// @notice The id of the assertion - will be used in a sanity check
|
|
108
|
+
bytes32 assertionHash;
|
|
109
|
+
/// @notice The predecessor of the assertion
|
|
110
|
+
bytes32 predecessorId;
|
|
111
|
+
/// @notice Is the assertion pending
|
|
112
|
+
bool isPending;
|
|
113
|
+
/// @notice Does the assertion have a sibling
|
|
114
|
+
bool hasSibling;
|
|
115
|
+
/// @notice The execution state of the predecessor assertion
|
|
116
|
+
AssertionState startState;
|
|
117
|
+
/// @notice The execution state of the assertion being claimed
|
|
118
|
+
AssertionState endState;
|
|
119
|
+
}
|
|
120
|
+
|
|
121
|
+
/// @notice An edge committing to a range of states. These edges will be bisected, slowly
|
|
122
|
+
/// reducing them in length until they reach length one. At that point new edges of a different
|
|
123
|
+
/// level will be added that claim the result of this edge, or a one step proof will be calculated
|
|
124
|
+
/// if the edge level is already of type SmallStep.
|
|
125
|
+
struct ChallengeEdge {
|
|
126
|
+
/// @notice The origin id is a link from the edge to an edge or assertion at a lower level.
|
|
127
|
+
/// Intuitively all edges with the same origin id agree on the information committed to in the origin id
|
|
128
|
+
/// For a SmallStep edge the origin id is the 'mutual' id of the length one BigStep edge being claimed by the zero layer ancestors of this edge
|
|
129
|
+
/// For a BigStep edge the origin id is the 'mutual' id of the length one Block edge being claimed by the zero layer ancestors of this edge
|
|
130
|
+
/// For a Block edge the origin id is the assertion hash of the assertion that is the root of the challenge - all edges in this challenge agree
|
|
131
|
+
/// that that assertion hash is valid.
|
|
132
|
+
/// The purpose of the origin id is to ensure that only edges that agree on a common start position
|
|
133
|
+
/// are being compared against one another.
|
|
134
|
+
bytes32 originId;
|
|
135
|
+
/// @notice A root of all the states in the history up to the startHeight
|
|
136
|
+
bytes32 startHistoryRoot;
|
|
137
|
+
/// @notice The height of the start history root
|
|
138
|
+
uint256 startHeight;
|
|
139
|
+
/// @notice A root of all the states in the history up to the endHeight. Since endHeight > startHeight, the startHistoryRoot must
|
|
140
|
+
/// commit to a prefix of the states committed to by the endHistoryRoot
|
|
141
|
+
bytes32 endHistoryRoot;
|
|
142
|
+
/// @notice The height of the end history root
|
|
143
|
+
uint256 endHeight;
|
|
144
|
+
/// @notice Edges can be bisected into two children. If this edge has been bisected the id of the
|
|
145
|
+
/// lower child is populated here, until that time this value is 0. The lower child has startHistoryRoot and startHeight
|
|
146
|
+
/// equal to this edge, but endHistoryRoot and endHeight equal to some prefix of the endHistoryRoot of this edge
|
|
147
|
+
bytes32 lowerChildId;
|
|
148
|
+
/// @notice Edges can be bisected into two children. If this edge has been bisected the id of the
|
|
149
|
+
/// upper child is populated here, until that time this value is 0. The upper child has startHistoryRoot and startHeight
|
|
150
|
+
/// equal to some prefix of the endHistoryRoot of this edge, and endHistoryRoot and endHeight equal to this edge
|
|
151
|
+
bytes32 upperChildId;
|
|
152
|
+
/// @notice The edge or assertion in the upper level that this edge claims to be true.
|
|
153
|
+
/// Only populated on zero layer edges
|
|
154
|
+
bytes32 claimId;
|
|
155
|
+
/// @notice The entity that supplied a mini-stake accompanying this edge
|
|
156
|
+
/// Only populated on zero layer edges
|
|
157
|
+
address staker;
|
|
158
|
+
/// @notice The block number when this edge was created
|
|
159
|
+
uint64 createdAtBlock;
|
|
160
|
+
/// @notice The block number at which this edge was confirmed
|
|
161
|
+
/// Zero if not confirmed
|
|
162
|
+
uint64 confirmedAtBlock;
|
|
163
|
+
/// @notice Current status of this edge. All edges are created Pending, and may be updated to Confirmed
|
|
164
|
+
/// Once Confirmed they cannot transition back to Pending
|
|
165
|
+
EdgeStatus status;
|
|
166
|
+
/// @notice The level of this edge.
|
|
167
|
+
/// Level 0 is type Block
|
|
168
|
+
/// Last level (defined by NUM_BIGSTEP_LEVEL + 1) is type SmallStep
|
|
169
|
+
/// All levels in between are of type BigStep
|
|
170
|
+
uint8 level;
|
|
171
|
+
/// @notice Set to true when the staker has been refunded. Can only be set to true if the status is Confirmed
|
|
172
|
+
/// and the staker is non zero.
|
|
173
|
+
bool refunded;
|
|
174
|
+
/// @notice TODO
|
|
175
|
+
uint64 totalTimeUnrivaledCache;
|
|
176
|
+
}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
// Copyright 2021-2024, Offchain Labs, Inc.
|
|
2
|
+
// For license information, see https://github.com/OffchainLabs/nitro-contracts/blob/main/LICENSE
|
|
3
|
+
// SPDX-License-Identifier: BUSL-1.1
|
|
4
|
+
|
|
5
|
+
pragma solidity ^0.8.0;
|
|
6
|
+
|
|
7
|
+
library CallerChecker {
|
|
8
|
+
/**
|
|
9
|
+
* @notice A EIP-7702 safe check to ensure the caller is the origin and is codeless
|
|
10
|
+
* @return bool true if the caller is the origin and is codeless, false otherwise
|
|
11
|
+
* @dev If the caller is the origin and is codeless, then msg.data is guaranteed to be same as tx.data
|
|
12
|
+
* It also mean the caller would not be able to call a contract multiple times with the same transaction
|
|
13
|
+
*/
|
|
14
|
+
function isCallerCodelessOrigin() internal view returns (bool) {
|
|
15
|
+
// solhint-disable-next-line avoid-tx-origin
|
|
16
|
+
return msg.sender == tx.origin && msg.sender.code.length == 0;
|
|
17
|
+
}
|
|
18
|
+
}
|
package/src/libraries/Error.sol
CHANGED
|
@@ -13,6 +13,9 @@ error HadZeroInit();
|
|
|
13
13
|
/// @dev Thrown when post upgrade init validation fails
|
|
14
14
|
error BadPostUpgradeInit();
|
|
15
15
|
|
|
16
|
+
/// @dev Thrown when the caller is not a codeless origin
|
|
17
|
+
error NotCodelessOrigin();
|
|
18
|
+
|
|
16
19
|
/// @dev Thrown when non owner tries to access an only-owner function
|
|
17
20
|
/// @param sender The msg.sender who is not the owner
|
|
18
21
|
/// @param owner The owner address
|
|
@@ -7,6 +7,7 @@ pragma solidity ^0.8.0;
|
|
|
7
7
|
|
|
8
8
|
import "./IReader4844.sol";
|
|
9
9
|
import "./IGasRefunder.sol";
|
|
10
|
+
import "../libraries/CallerChecker.sol";
|
|
10
11
|
|
|
11
12
|
abstract contract GasRefundEnabled {
|
|
12
13
|
uint256 internal immutable gasPerBlob = 2 ** 17;
|
|
@@ -24,8 +25,7 @@ abstract contract GasRefundEnabled {
|
|
|
24
25
|
startGasLeft += calldataWords * 6 + (calldataWords ** 2) / 512;
|
|
25
26
|
// if triggered in a contract call, the spender may be overrefunded by appending dummy data to the call
|
|
26
27
|
// so we check if it is a top level call, which would mean the sender paid calldata as part of tx.input
|
|
27
|
-
|
|
28
|
-
if (msg.sender != tx.origin) {
|
|
28
|
+
if (!CallerChecker.isCallerCodelessOrigin()) {
|
|
29
29
|
// We can't be sure if this calldata came from the top level tx,
|
|
30
30
|
// so to be safe we tell the gas refunder there was no calldata.
|
|
31
31
|
calldataSize = 0;
|