@arbitrum/nitro-contracts 1.2.0 → 2.0.0-beta.0
Sign up to get free protection for your applications and to get access to all the features.
- package/build/contracts/@openzeppelin/contracts/access/Ownable.sol/Ownable.dbg.json +1 -1
- package/build/contracts/@openzeppelin/contracts/interfaces/draft-IERC1822.sol/IERC1822Proxiable.dbg.json +1 -1
- package/build/contracts/@openzeppelin/contracts/proxy/ERC1967/ERC1967Proxy.sol/ERC1967Proxy.dbg.json +1 -1
- package/build/contracts/@openzeppelin/contracts/proxy/ERC1967/ERC1967Proxy.sol/ERC1967Proxy.json +2 -2
- package/build/contracts/@openzeppelin/contracts/proxy/ERC1967/ERC1967Upgrade.sol/ERC1967Upgrade.dbg.json +1 -1
- package/build/contracts/@openzeppelin/contracts/proxy/Proxy.sol/Proxy.dbg.json +1 -1
- package/build/contracts/@openzeppelin/contracts/proxy/beacon/IBeacon.sol/IBeacon.dbg.json +1 -1
- package/build/contracts/@openzeppelin/contracts/proxy/beacon/UpgradeableBeacon.sol/UpgradeableBeacon.dbg.json +1 -1
- package/build/contracts/@openzeppelin/contracts/proxy/beacon/UpgradeableBeacon.sol/UpgradeableBeacon.json +2 -2
- package/build/contracts/@openzeppelin/contracts/proxy/transparent/ProxyAdmin.sol/ProxyAdmin.dbg.json +1 -1
- package/build/contracts/@openzeppelin/contracts/proxy/transparent/ProxyAdmin.sol/ProxyAdmin.json +2 -2
- package/build/contracts/@openzeppelin/contracts/proxy/transparent/TransparentUpgradeableProxy.sol/TransparentUpgradeableProxy.dbg.json +1 -1
- package/build/contracts/@openzeppelin/contracts/proxy/transparent/TransparentUpgradeableProxy.sol/TransparentUpgradeableProxy.json +2 -2
- package/build/contracts/@openzeppelin/contracts/proxy/utils/UUPSUpgradeable.sol/UUPSUpgradeable.dbg.json +1 -1
- package/build/contracts/@openzeppelin/contracts/security/ReentrancyGuard.sol/ReentrancyGuard.dbg.json +1 -1
- package/build/contracts/@openzeppelin/contracts/token/ERC20/ERC20.sol/ERC20.dbg.json +1 -1
- package/build/contracts/@openzeppelin/contracts/token/ERC20/ERC20.sol/ERC20.json +2 -2
- package/build/contracts/@openzeppelin/contracts/token/ERC20/IERC20.sol/IERC20.dbg.json +1 -1
- package/build/contracts/@openzeppelin/contracts/token/ERC20/extensions/IERC20Metadata.sol/IERC20Metadata.dbg.json +1 -1
- package/build/contracts/@openzeppelin/contracts/token/ERC20/extensions/draft-IERC20Permit.sol/IERC20Permit.dbg.json +4 -0
- package/build/contracts/@openzeppelin/contracts/token/ERC20/extensions/draft-IERC20Permit.sol/IERC20Permit.json +86 -0
- package/build/contracts/@openzeppelin/contracts/token/ERC20/utils/SafeERC20.sol/SafeERC20.dbg.json +1 -1
- package/build/contracts/@openzeppelin/contracts/token/ERC20/utils/SafeERC20.sol/SafeERC20.json +2 -2
- package/build/contracts/@openzeppelin/contracts/utils/Address.sol/Address.dbg.json +1 -1
- package/build/contracts/@openzeppelin/contracts/utils/Address.sol/Address.json +2 -2
- package/build/contracts/@openzeppelin/contracts/utils/Context.sol/Context.dbg.json +1 -1
- package/build/contracts/@openzeppelin/contracts/utils/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 +4 -0
- package/build/contracts/@openzeppelin/contracts/utils/Strings.sol/Strings.json +10 -0
- 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/token/ERC20/IERC20Upgradeable.sol/IERC20Upgradeable.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/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/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/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 +13 -0
- 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/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 +15 -2
- 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/IEthBridge.sol/IEthBridge.dbg.json +1 -1
- package/build/contracts/src/bridge/IInbox.sol/IInbox.dbg.json +1 -1
- package/build/contracts/src/bridge/IInboxBase.sol/IInboxBase.dbg.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 +16 -16
- package/build/contracts/src/bridge/Inbox.sol/Inbox.dbg.json +1 -1
- package/build/contracts/src/bridge/Inbox.sol/Inbox.json +15 -2
- 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 +23 -18
- package/build/contracts/src/chain/CacheManager.sol/CacheManager.dbg.json +4 -0
- package/build/contracts/src/chain/CacheManager.sol/CacheManager.json +490 -0
- package/build/contracts/src/challenge/ChallengeLib.sol/ChallengeLib.dbg.json +1 -1
- package/build/contracts/src/challenge/ChallengeLib.sol/ChallengeLib.json +2 -2
- package/build/contracts/src/challenge/ChallengeManager.sol/ChallengeManager.dbg.json +1 -1
- package/build/contracts/src/challenge/ChallengeManager.sol/ChallengeManager.json +50 -2
- package/build/contracts/src/challenge/IChallengeManager.sol/IChallengeManager.dbg.json +1 -1
- package/build/contracts/src/challenge/IChallengeManager.sol/IChallengeManager.json +55 -0
- package/build/contracts/src/challenge/IChallengeResultReceiver.sol/IChallengeResultReceiver.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/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/CryptographyPrimitives.sol/CryptographyPrimitives.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 +4 -0
- package/build/contracts/src/mocks/Benchmarks.sol/Benchmarks.json +46 -0
- 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 +15 -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/MockResultReceiver.sol/MockResultReceiver.dbg.json +1 -1
- package/build/contracts/src/mocks/MockResultReceiver.sol/MockResultReceiver.json +2 -2
- package/build/contracts/src/mocks/MultiCallTest.sol/MultiCallTest.dbg.json +4 -0
- package/build/contracts/src/mocks/MultiCallTest.sol/MultiCallTest.json +71 -0
- package/build/contracts/src/mocks/PendingBlkTimeAndNrAdvanceCheck.sol/PendingBlkTimeAndNrAdvanceCheck.dbg.json +4 -0
- package/build/contracts/src/mocks/PendingBlkTimeAndNrAdvanceCheck.sol/PendingBlkTimeAndNrAdvanceCheck.json +36 -0
- package/build/contracts/src/mocks/Program.sol/ProgramTest.dbg.json +4 -0
- package/build/contracts/src/mocks/Program.sol/ProgramTest.json +142 -0
- 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 +4 -0
- package/build/contracts/src/mocks/SdkStorage.sol/SdkStorage.json +25 -0
- package/build/contracts/src/mocks/SequencerInboxStub.sol/SequencerInboxStub.dbg.json +1 -1
- package/build/contracts/src/mocks/SequencerInboxStub.sol/SequencerInboxStub.json +31 -26
- 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 +4 -0
- package/build/contracts/src/mocks/SimpleCacheManager.sol/SimpleCacheManager.json +37 -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/SingleExecutionChallenge.sol/SingleExecutionChallenge.dbg.json +1 -1
- package/build/contracts/src/mocks/SingleExecutionChallenge.sol/SingleExecutionChallenge.json +50 -2
- package/build/contracts/src/mocks/TimedOutChallengeManager.sol/TimedOutChallengeManager.dbg.json +1 -1
- package/build/contracts/src/mocks/TimedOutChallengeManager.sol/TimedOutChallengeManager.json +50 -2
- 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/IOneStepProofEntry.sol/IOneStepProofEntry.dbg.json +1 -1
- package/build/contracts/src/osp/IOneStepProofEntry.sol/IOneStepProofEntry.json +48 -0
- 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 +88 -0
- package/build/contracts/src/osp/OneStepProofEntry.sol/OneStepProofEntry.dbg.json +1 -1
- package/build/contracts/src/osp/OneStepProofEntry.sol/OneStepProofEntry.json +50 -2
- package/build/contracts/src/osp/OneStepProver0.sol/OneStepProver0.dbg.json +1 -1
- package/build/contracts/src/osp/OneStepProver0.sol/OneStepProver0.json +90 -2
- package/build/contracts/src/osp/OneStepProverHostIo.sol/OneStepProverHostIo.dbg.json +1 -1
- package/build/contracts/src/osp/OneStepProverHostIo.sol/OneStepProverHostIo.json +90 -2
- package/build/contracts/src/osp/OneStepProverMath.sol/OneStepProverMath.dbg.json +1 -1
- package/build/contracts/src/osp/OneStepProverMath.sol/OneStepProverMath.json +90 -2
- package/build/contracts/src/osp/OneStepProverMemory.sol/OneStepProverMemory.dbg.json +1 -1
- package/build/contracts/src/osp/OneStepProverMemory.sol/OneStepProverMemory.json +90 -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/ArbDebug.sol/ArbDebug.json +7 -0
- 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/ArbOwner.sol/ArbOwner.json +161 -0
- 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 +4 -0
- package/build/contracts/src/precompiles/ArbWasm.sol/ArbWasm.json +453 -0
- package/build/contracts/src/precompiles/ArbWasmCache.sol/ArbWasmCache.dbg.json +4 -0
- package/build/contracts/src/precompiles/ArbWasmCache.sol/ArbWasmCache.json +113 -0
- 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/BridgeCreator.sol/BridgeCreator.dbg.json +1 -1
- package/build/contracts/src/rollup/BridgeCreator.sol/BridgeCreator.json +10 -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/IRollupAdmin.sol/IRollupAdmin.dbg.json +1 -1
- package/build/contracts/src/rollup/IRollupAdmin.sol/IRollupAdmin.json +8 -8
- 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/IRollupLogic.sol/IRollupUserAbs.dbg.json +1 -1
- package/build/contracts/src/rollup/IRollupLogic.sol/IRollupUserERC20.dbg.json +1 -1
- package/build/contracts/src/rollup/Node.sol/NodeLib.dbg.json +1 -1
- package/build/contracts/src/rollup/Node.sol/NodeLib.json +2 -2
- package/build/contracts/src/rollup/RollupAdminLogic.sol/RollupAdminLogic.dbg.json +1 -1
- package/build/contracts/src/rollup/RollupAdminLogic.sol/RollupAdminLogic.json +23 -10
- package/build/contracts/src/rollup/RollupCore.sol/RollupCore.dbg.json +1 -1
- package/build/contracts/src/rollup/RollupCore.sol/RollupCore.json +13 -0
- package/build/contracts/src/rollup/RollupCreator.sol/RollupCreator.dbg.json +1 -1
- package/build/contracts/src/rollup/RollupCreator.sol/RollupCreator.json +10 -10
- 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 +10 -10
- package/build/contracts/src/rollup/RollupUserLogic.sol/AbsRollupUserLogic.dbg.json +1 -1
- package/build/contracts/src/rollup/RollupUserLogic.sol/AbsRollupUserLogic.json +13 -0
- package/build/contracts/src/rollup/RollupUserLogic.sol/ERC20RollupUserLogic.dbg.json +1 -1
- package/build/contracts/src/rollup/RollupUserLogic.sol/ERC20RollupUserLogic.json +15 -2
- package/build/contracts/src/rollup/RollupUserLogic.sol/RollupUserLogic.dbg.json +1 -1
- package/build/contracts/src/rollup/RollupUserLogic.sol/RollupUserLogic.json +15 -2
- package/build/contracts/src/rollup/ValidatorUtils.sol/ValidatorUtils.dbg.json +1 -1
- package/build/contracts/src/rollup/ValidatorUtils.sol/ValidatorUtils.json +2 -2
- package/build/contracts/src/rollup/ValidatorWallet.sol/ValidatorWallet.dbg.json +1 -1
- package/build/contracts/src/rollup/ValidatorWallet.sol/ValidatorWallet.json +15 -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/Deserialize.sol/Deserialize.json +2 -2
- 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/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/MultiStack.sol/MultiStackLib.dbg.json +4 -0
- package/build/contracts/src/state/MultiStack.sol/MultiStackLib.json +10 -0
- 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/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/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/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/package.json +14 -7
- package/src/bridge/ISequencerInbox.sol +4 -4
- package/src/bridge/SequencerInbox.sol +38 -30
- package/src/chain/CacheManager.sol +283 -0
- package/src/challenge/ChallengeLib.sol +0 -45
- package/src/challenge/ChallengeManager.sol +24 -9
- package/src/challenge/IChallengeManager.sol +13 -0
- package/src/libraries/Error.sol +3 -9
- package/src/mocks/Benchmarks.sol +52 -0
- package/src/mocks/MultiCallTest.sol +117 -0
- package/src/mocks/PendingBlkTimeAndNrAdvanceCheck.sol +29 -0
- package/src/mocks/Program.sol +126 -0
- package/src/mocks/SdkStorage.sol +176 -0
- package/src/mocks/SequencerInboxStub.sol +4 -4
- package/src/mocks/SimpleCacheManager.sol +22 -0
- package/src/osp/IOneStepProofEntry.sol +10 -0
- package/src/osp/OneStepProofEntry.sol +81 -7
- package/src/osp/OneStepProver0.sol +64 -20
- package/src/osp/OneStepProverHostIo.sol +201 -2
- package/src/osp/OneStepProverMemory.sol +4 -33
- package/src/precompiles/ArbDebug.sol +2 -0
- package/src/precompiles/ArbOwner.sol +51 -9
- package/src/precompiles/ArbWasm.sol +119 -0
- package/src/precompiles/ArbWasmCache.sol +33 -0
- package/src/state/Deserialize.sol +88 -47
- package/src/state/Instructions.sol +38 -3
- package/src/state/Machine.sol +92 -15
- package/src/state/MerkleProof.sol +22 -4
- package/src/state/Module.sol +3 -1
- package/src/state/ModuleMemory.sol +54 -0
- package/src/state/MultiStack.sol +58 -0
- package/src/state/StackFrame.sol +6 -1
- package/src/state/Value.sol +13 -1
- package/src/state/ValueStack.sol +6 -1
@@ -1,4 +1,4 @@
|
|
1
|
-
// Copyright 2021-
|
1
|
+
// Copyright 2021-2024, Offchain Labs, Inc.
|
2
2
|
// For license information, see https://github.com/OffchainLabs/nitro-contracts/blob/main/LICENSE
|
3
3
|
// SPDX-License-Identifier: BUSL-1.1
|
4
4
|
|
@@ -6,6 +6,8 @@ pragma solidity ^0.8.0;
|
|
6
6
|
|
7
7
|
import "../state/Value.sol";
|
8
8
|
import "../state/Machine.sol";
|
9
|
+
import "../state/MerkleProof.sol";
|
10
|
+
import "../state/MultiStack.sol";
|
9
11
|
import "../state/Deserialize.sol";
|
10
12
|
import "../state/ModuleMemory.sol";
|
11
13
|
import "./IOneStepProver.sol";
|
@@ -14,10 +16,13 @@ import "../bridge/IBridge.sol";
|
|
14
16
|
|
15
17
|
contract OneStepProverHostIo is IOneStepProver {
|
16
18
|
using GlobalStateLib for GlobalState;
|
19
|
+
using MachineLib for Machine;
|
17
20
|
using MerkleProofLib for MerkleProof;
|
18
21
|
using ModuleMemoryLib for ModuleMemory;
|
22
|
+
using MultiStackLib for MultiStack;
|
19
23
|
using ValueLib for Value;
|
20
24
|
using ValueStackLib for ValueStack;
|
25
|
+
using StackFrameLib for StackFrameWindow;
|
21
26
|
|
22
27
|
uint256 private constant LEAF_SIZE = 32;
|
23
28
|
uint256 private constant INBOX_NUM = 2;
|
@@ -52,7 +57,7 @@ contract OneStepProverHostIo is IOneStepProver {
|
|
52
57
|
mach.status = MachineStatus.ERRORED;
|
53
58
|
return;
|
54
59
|
}
|
55
|
-
if (
|
60
|
+
if (!mod.moduleMemory.isValidLeaf(ptr)) {
|
56
61
|
mach.status = MachineStatus.ERRORED;
|
57
62
|
return;
|
58
63
|
}
|
@@ -380,6 +385,103 @@ contract OneStepProverHostIo is IOneStepProver {
|
|
380
385
|
mach.status = MachineStatus.FINISHED;
|
381
386
|
}
|
382
387
|
|
388
|
+
function isPowerOfTwo(uint256 value) internal pure returns (bool) {
|
389
|
+
return value != 0 && (value & (value - 1) == 0);
|
390
|
+
}
|
391
|
+
|
392
|
+
function proveLastLeaf(
|
393
|
+
Machine memory mach,
|
394
|
+
uint256 offset,
|
395
|
+
bytes calldata proof
|
396
|
+
)
|
397
|
+
internal
|
398
|
+
pure
|
399
|
+
returns (
|
400
|
+
uint256 leaf,
|
401
|
+
MerkleProof memory leafProof,
|
402
|
+
MerkleProof memory zeroProof
|
403
|
+
)
|
404
|
+
{
|
405
|
+
string memory prefix = "Module merkle tree:";
|
406
|
+
bytes32 root = mach.modulesRoot;
|
407
|
+
|
408
|
+
{
|
409
|
+
Module memory leafModule;
|
410
|
+
uint32 leaf32;
|
411
|
+
(leafModule, offset) = Deserialize.module(proof, offset);
|
412
|
+
(leaf32, offset) = Deserialize.u32(proof, offset);
|
413
|
+
(leafProof, offset) = Deserialize.merkleProof(proof, offset);
|
414
|
+
leaf = uint256(leaf32);
|
415
|
+
|
416
|
+
bytes32 compRoot = leafProof.computeRootFromModule(leaf, leafModule);
|
417
|
+
require(compRoot == root, "WRONG_ROOT_FOR_LEAF");
|
418
|
+
}
|
419
|
+
|
420
|
+
// if tree is unbalanced, check that the next leaf is 0
|
421
|
+
bool balanced = isPowerOfTwo(leaf + 1);
|
422
|
+
if (balanced) {
|
423
|
+
require(1 << leafProof.counterparts.length == leaf + 1, "WRONG_LEAF");
|
424
|
+
} else {
|
425
|
+
(zeroProof, offset) = Deserialize.merkleProof(proof, offset);
|
426
|
+
bytes32 compRoot = zeroProof.computeRootUnsafe(leaf + 1, 0, prefix);
|
427
|
+
require(compRoot == root, "WRONG_ROOT_FOR_ZERO");
|
428
|
+
}
|
429
|
+
|
430
|
+
return (leaf, leafProof, zeroProof);
|
431
|
+
}
|
432
|
+
|
433
|
+
function executeLinkModule(
|
434
|
+
ExecutionContext calldata,
|
435
|
+
Machine memory mach,
|
436
|
+
Module memory mod,
|
437
|
+
Instruction calldata,
|
438
|
+
bytes calldata proof
|
439
|
+
) internal pure {
|
440
|
+
string memory prefix = "Module merkle tree:";
|
441
|
+
bytes32 root = mach.modulesRoot;
|
442
|
+
|
443
|
+
uint256 pointer = mach.valueStack.pop().assumeI32();
|
444
|
+
if (!mod.moduleMemory.isValidLeaf(pointer)) {
|
445
|
+
mach.status = MachineStatus.ERRORED;
|
446
|
+
return;
|
447
|
+
}
|
448
|
+
(bytes32 userMod, uint256 offset, ) = mod.moduleMemory.proveLeaf(
|
449
|
+
pointer / LEAF_SIZE,
|
450
|
+
proof,
|
451
|
+
0
|
452
|
+
);
|
453
|
+
|
454
|
+
(uint256 leaf, , MerkleProof memory zeroProof) = proveLastLeaf(mach, offset, proof);
|
455
|
+
|
456
|
+
bool balanced = isPowerOfTwo(leaf + 1);
|
457
|
+
if (balanced) {
|
458
|
+
mach.modulesRoot = MerkleProofLib.growToNewRoot(root, leaf + 1, userMod, 0, prefix);
|
459
|
+
} else {
|
460
|
+
mach.modulesRoot = zeroProof.computeRootUnsafe(leaf + 1, userMod, prefix);
|
461
|
+
}
|
462
|
+
|
463
|
+
mach.valueStack.push(ValueLib.newI32(uint32(leaf + 1)));
|
464
|
+
}
|
465
|
+
|
466
|
+
function executeUnlinkModule(
|
467
|
+
ExecutionContext calldata,
|
468
|
+
Machine memory mach,
|
469
|
+
Module memory,
|
470
|
+
Instruction calldata,
|
471
|
+
bytes calldata proof
|
472
|
+
) internal pure {
|
473
|
+
string memory prefix = "Module merkle tree:";
|
474
|
+
|
475
|
+
(uint256 leaf, MerkleProof memory leafProof, ) = proveLastLeaf(mach, 0, proof);
|
476
|
+
|
477
|
+
bool shrink = isPowerOfTwo(leaf);
|
478
|
+
if (shrink) {
|
479
|
+
mach.modulesRoot = leafProof.counterparts[leafProof.counterparts.length - 1];
|
480
|
+
} else {
|
481
|
+
mach.modulesRoot = leafProof.computeRootUnsafe(leaf, 0, prefix);
|
482
|
+
}
|
483
|
+
}
|
484
|
+
|
383
485
|
function executeGlobalStateAccess(
|
384
486
|
ExecutionContext calldata,
|
385
487
|
Machine memory mach,
|
@@ -410,6 +512,93 @@ contract OneStepProverHostIo is IOneStepProver {
|
|
410
512
|
mach.globalStateHash = state.hash();
|
411
513
|
}
|
412
514
|
|
515
|
+
function executeNewCoThread(
|
516
|
+
ExecutionContext calldata,
|
517
|
+
Machine memory mach,
|
518
|
+
Module memory,
|
519
|
+
Instruction calldata,
|
520
|
+
bytes calldata
|
521
|
+
) internal pure {
|
522
|
+
if (mach.recoveryPc != MachineLib.NO_RECOVERY_PC) {
|
523
|
+
// cannot create new cothread from inside cothread
|
524
|
+
mach.status = MachineStatus.ERRORED;
|
525
|
+
return;
|
526
|
+
}
|
527
|
+
mach.frameMultiStack.pushNew();
|
528
|
+
mach.valueMultiStack.pushNew();
|
529
|
+
}
|
530
|
+
|
531
|
+
function provePopCothread(MultiStack memory multi, bytes calldata proof) internal pure {
|
532
|
+
uint256 proofOffset = 0;
|
533
|
+
bytes32 newInactiveCoThread;
|
534
|
+
bytes32 newRemaining;
|
535
|
+
(newInactiveCoThread, proofOffset) = Deserialize.b32(proof, proofOffset);
|
536
|
+
(newRemaining, proofOffset) = Deserialize.b32(proof, proofOffset);
|
537
|
+
if (newInactiveCoThread == MultiStackLib.NO_STACK_HASH) {
|
538
|
+
require(newRemaining == bytes32(0), "WRONG_COTHREAD_EMPTY");
|
539
|
+
require(multi.remainingHash == bytes32(0), "WRONG_COTHREAD_EMPTY");
|
540
|
+
} else {
|
541
|
+
require(
|
542
|
+
keccak256(abi.encodePacked("cothread:", newInactiveCoThread, newRemaining)) ==
|
543
|
+
multi.remainingHash,
|
544
|
+
"WRONG_COTHREAD_POP"
|
545
|
+
);
|
546
|
+
}
|
547
|
+
multi.remainingHash = newRemaining;
|
548
|
+
multi.inactiveStackHash = newInactiveCoThread;
|
549
|
+
}
|
550
|
+
|
551
|
+
function executePopCoThread(
|
552
|
+
ExecutionContext calldata,
|
553
|
+
Machine memory mach,
|
554
|
+
Module memory,
|
555
|
+
Instruction calldata,
|
556
|
+
bytes calldata proof
|
557
|
+
) internal pure {
|
558
|
+
if (mach.recoveryPc != MachineLib.NO_RECOVERY_PC) {
|
559
|
+
// cannot pop cothread from inside cothread
|
560
|
+
mach.status = MachineStatus.ERRORED;
|
561
|
+
return;
|
562
|
+
}
|
563
|
+
if (mach.frameMultiStack.inactiveStackHash == MultiStackLib.NO_STACK_HASH) {
|
564
|
+
// cannot pop cothread if there isn't one
|
565
|
+
mach.status = MachineStatus.ERRORED;
|
566
|
+
return;
|
567
|
+
}
|
568
|
+
provePopCothread(mach.valueMultiStack, proof);
|
569
|
+
provePopCothread(mach.frameMultiStack, proof[64:]);
|
570
|
+
}
|
571
|
+
|
572
|
+
function executeSwitchCoThread(
|
573
|
+
ExecutionContext calldata,
|
574
|
+
Machine memory mach,
|
575
|
+
Module memory,
|
576
|
+
Instruction calldata inst,
|
577
|
+
bytes calldata
|
578
|
+
) internal pure {
|
579
|
+
if (mach.frameMultiStack.inactiveStackHash == MultiStackLib.NO_STACK_HASH) {
|
580
|
+
// cannot switch cothread if there isn't one
|
581
|
+
mach.status = MachineStatus.ERRORED;
|
582
|
+
return;
|
583
|
+
}
|
584
|
+
if (inst.argumentData == 0) {
|
585
|
+
if (mach.recoveryPc == MachineLib.NO_RECOVERY_PC) {
|
586
|
+
// switching to main thread, from main thread
|
587
|
+
mach.status = MachineStatus.ERRORED;
|
588
|
+
return;
|
589
|
+
}
|
590
|
+
mach.recoveryPc = MachineLib.NO_RECOVERY_PC;
|
591
|
+
} else {
|
592
|
+
if (mach.recoveryPc != MachineLib.NO_RECOVERY_PC) {
|
593
|
+
// switching from cothread to cothread
|
594
|
+
mach.status = MachineStatus.ERRORED;
|
595
|
+
return;
|
596
|
+
}
|
597
|
+
mach.setRecoveryFromPc(uint32(inst.argumentData));
|
598
|
+
}
|
599
|
+
mach.switchCoThreadStacks();
|
600
|
+
}
|
601
|
+
|
413
602
|
function executeOneStep(
|
414
603
|
ExecutionContext calldata execCtx,
|
415
604
|
Machine calldata startMach,
|
@@ -441,6 +630,16 @@ contract OneStepProverHostIo is IOneStepProver {
|
|
441
630
|
impl = executeReadInboxMessage;
|
442
631
|
} else if (opcode == Instructions.HALT_AND_SET_FINISHED) {
|
443
632
|
impl = executeHaltAndSetFinished;
|
633
|
+
} else if (opcode == Instructions.LINK_MODULE) {
|
634
|
+
impl = executeLinkModule;
|
635
|
+
} else if (opcode == Instructions.UNLINK_MODULE) {
|
636
|
+
impl = executeUnlinkModule;
|
637
|
+
} else if (opcode == Instructions.NEW_COTHREAD) {
|
638
|
+
impl = executeNewCoThread;
|
639
|
+
} else if (opcode == Instructions.POP_COTHREAD) {
|
640
|
+
impl = executePopCoThread;
|
641
|
+
} else if (opcode == Instructions.SWITCH_COTHREAD) {
|
642
|
+
impl = executeSwitchCoThread;
|
444
643
|
} else {
|
445
644
|
revert("INVALID_MEMORY_OPCODE");
|
446
645
|
}
|
@@ -19,13 +19,6 @@ contract OneStepProverMemory is IOneStepProver {
|
|
19
19
|
uint256 private constant LEAF_SIZE = 32;
|
20
20
|
uint64 private constant PAGE_SIZE = 65536;
|
21
21
|
|
22
|
-
function pullLeafByte(bytes32 leaf, uint256 idx) internal pure returns (uint8) {
|
23
|
-
require(idx < LEAF_SIZE, "BAD_PULL_LEAF_BYTE_IDX");
|
24
|
-
// Take into account that we are casting the leaf to a big-endian integer
|
25
|
-
uint256 leafShift = (LEAF_SIZE - 1 - idx) * 8;
|
26
|
-
return uint8(uint256(leaf) >> leafShift);
|
27
|
-
}
|
28
|
-
|
29
22
|
function setLeafByte(
|
30
23
|
bytes32 oldLeaf,
|
31
24
|
uint256 idx,
|
@@ -109,35 +102,13 @@ contract OneStepProverMemory is IOneStepProver {
|
|
109
102
|
revert("INVALID_MEMORY_LOAD_OPCODE");
|
110
103
|
}
|
111
104
|
|
112
|
-
|
113
|
-
uint256
|
114
|
-
if (
|
105
|
+
uint256 index = inst.argumentData + mach.valueStack.pop().assumeI32();
|
106
|
+
(bool err, uint256 value, ) = mod.moduleMemory.load(index, readBytes, proof, 0);
|
107
|
+
if (err) {
|
115
108
|
mach.status = MachineStatus.ERRORED;
|
116
109
|
return;
|
117
110
|
}
|
118
|
-
|
119
|
-
uint256 proofOffset = 0;
|
120
|
-
uint256 lastProvedLeafIdx = ~uint256(0);
|
121
|
-
bytes32 lastProvedLeafContents;
|
122
|
-
uint64 readValue;
|
123
|
-
for (uint256 i = 0; i < readBytes; i++) {
|
124
|
-
uint256 idx = startIdx + i;
|
125
|
-
uint256 leafIdx = idx / LEAF_SIZE;
|
126
|
-
if (leafIdx != lastProvedLeafIdx) {
|
127
|
-
// This hits the stack size if we phrase it as mod.moduleMemory.proveLeaf(...)
|
128
|
-
(lastProvedLeafContents, proofOffset, ) = ModuleMemoryLib.proveLeaf(
|
129
|
-
mod.moduleMemory,
|
130
|
-
leafIdx,
|
131
|
-
proof,
|
132
|
-
proofOffset
|
133
|
-
);
|
134
|
-
lastProvedLeafIdx = leafIdx;
|
135
|
-
}
|
136
|
-
uint256 indexWithinLeaf = idx % LEAF_SIZE;
|
137
|
-
readValue |=
|
138
|
-
uint64(pullLeafByte(lastProvedLeafContents, indexWithinLeaf)) <<
|
139
|
-
uint64(i * 8);
|
140
|
-
}
|
111
|
+
uint64 readValue = uint64(value);
|
141
112
|
|
142
113
|
if (signed) {
|
143
114
|
// Go down to the original uint size, change to signed, go up to correct size, convert back to unsigned
|
@@ -1,16 +1,18 @@
|
|
1
|
-
// Copyright 2021-
|
1
|
+
// Copyright 2021-2024, Offchain Labs, Inc.
|
2
2
|
// For license information, see https://github.com/OffchainLabs/nitro-contracts/blob/main/LICENSE
|
3
3
|
// SPDX-License-Identifier: BUSL-1.1
|
4
4
|
|
5
5
|
pragma solidity >=0.4.21 <0.9.0;
|
6
6
|
|
7
|
-
|
8
|
-
|
9
|
-
|
10
|
-
|
11
|
-
|
12
|
-
|
13
|
-
|
7
|
+
/**
|
8
|
+
* @title Provides owners with tools for managing the rollup.
|
9
|
+
* @notice Calls by non-owners will always revert.
|
10
|
+
* Most of Arbitrum Classic's owner methods have been removed since they no longer make sense in Nitro:
|
11
|
+
* - What were once chain parameters are now parts of ArbOS's state, and those that remain are set at genesis.
|
12
|
+
* - ArbOS upgrades happen with the rest of the system rather than being independent
|
13
|
+
* - Exemptions to address aliasing are no longer offered. Exemptions were intended to support backward compatibility for contracts deployed before aliasing was introduced, but no exemptions were ever requested.
|
14
|
+
* Precompiled contract that exists in every Arbitrum chain at 0x0000000000000000000000000000000000000070.
|
15
|
+
**/
|
14
16
|
interface ArbOwner {
|
15
17
|
/// @notice Add account as a chain owner
|
16
18
|
function addChainOwner(address newOwner) external;
|
@@ -90,9 +92,49 @@ interface ArbOwner {
|
|
90
92
|
/// @notice Releases surplus funds from L1PricerFundsPoolAddress for use
|
91
93
|
function releaseL1PricerSurplusFunds(uint256 maxWeiToRelease) external returns (uint256);
|
92
94
|
|
95
|
+
/// @notice Sets the amount of ink 1 gas buys
|
96
|
+
/// @param price the conversion rate (must fit in a uint24)
|
97
|
+
function setInkPrice(uint32 price) external;
|
98
|
+
|
99
|
+
/// @notice Sets the maximum depth (in wasm words) a wasm stack may grow
|
100
|
+
function setWasmMaxStackDepth(uint32 depth) external;
|
101
|
+
|
102
|
+
/// @notice Sets the number of free wasm pages a tx gets
|
103
|
+
function setWasmFreePages(uint16 pages) external;
|
104
|
+
|
105
|
+
/// @notice Sets the base cost of each additional wasm page
|
106
|
+
function setWasmPageGas(uint16 gas) external;
|
107
|
+
|
108
|
+
/// @notice Sets the maximum number of pages a wasm may allocate
|
109
|
+
function setWasmPageLimit(uint16 limit) external;
|
110
|
+
|
111
|
+
/// @notice Sets the minimum costs to invoke a program
|
112
|
+
/// @param gas amount of gas paid in increments of 256 when not the program is not cached
|
113
|
+
/// @param cached amount of gas paid in increments of 64 when the program is cached
|
114
|
+
function setWasmMinInitGas(uint8 gas, uint16 cached) external;
|
115
|
+
|
116
|
+
/// @notice Sets the linear adjustment made to program init costs.
|
117
|
+
/// @param percent the adjustment (100% = no adjustment).
|
118
|
+
function setWasmInitCostScalar(uint64 percent) external;
|
119
|
+
|
120
|
+
/// @notice Sets the number of days after which programs deactivate
|
121
|
+
function setWasmExpiryDays(uint16 _days) external;
|
122
|
+
|
123
|
+
/// @notice Sets the age a program must be to perform a keepalive
|
124
|
+
function setWasmKeepaliveDays(uint16 _days) external;
|
125
|
+
|
126
|
+
/// @notice Sets the number of extra programs ArbOS caches during a given block
|
127
|
+
function setWasmBlockCacheSize(uint16 count) external;
|
128
|
+
|
129
|
+
/// @notice Adds account as a wasm cache manager
|
130
|
+
function addWasmCacheManager(address manager) external;
|
131
|
+
|
132
|
+
/// @notice Removes account from the list of wasm cache managers
|
133
|
+
function removeWasmCacheManager(address manager) external;
|
134
|
+
|
93
135
|
/// @notice Sets serialized chain config in ArbOS state
|
94
136
|
function setChainConfig(string calldata chainConfig) external;
|
95
137
|
|
96
|
-
|
138
|
+
/// Emitted when a successful call is made to this precompile
|
97
139
|
event OwnerActs(bytes4 indexed method, address indexed owner, bytes data);
|
98
140
|
}
|
@@ -0,0 +1,119 @@
|
|
1
|
+
// Copyright 2022-2024, Offchain Labs, Inc.
|
2
|
+
// For license information, see https://github.com/OffchainLabs/nitro/blob/master/LICENSE
|
3
|
+
// SPDX-License-Identifier: BUSL-1.1
|
4
|
+
|
5
|
+
pragma solidity >=0.4.21 <0.9.0;
|
6
|
+
|
7
|
+
/**
|
8
|
+
* @title Methods for managing user programs
|
9
|
+
* @notice Precompiled contract that exists in every Arbitrum chain at 0x0000000000000000000000000000000000000071.
|
10
|
+
*/
|
11
|
+
interface ArbWasm {
|
12
|
+
/// @notice Activate a wasm program
|
13
|
+
/// @param program the program to activate
|
14
|
+
/// @return version the stylus version the program was activated against
|
15
|
+
/// @return dataFee the data fee paid to store the activated program
|
16
|
+
function activateProgram(address program)
|
17
|
+
external
|
18
|
+
payable
|
19
|
+
returns (uint16 version, uint256 dataFee);
|
20
|
+
|
21
|
+
/// @notice Gets the latest stylus version
|
22
|
+
/// @return version the stylus version
|
23
|
+
function stylusVersion() external view returns (uint16 version);
|
24
|
+
|
25
|
+
/// @notice Gets the stylus version the program with codehash was most recently activated against
|
26
|
+
/// @return version the program version (reverts for EVM contracts)
|
27
|
+
function codehashVersion(bytes32 codehash) external view returns (uint16 version);
|
28
|
+
|
29
|
+
/// @notice Extends a program's expiration date.
|
30
|
+
/// Reverts if too soon or if the program is not up to date.
|
31
|
+
function codehashKeepalive(bytes32 codehash) external payable;
|
32
|
+
|
33
|
+
/// @notice Gets a program's asm size.
|
34
|
+
/// Reverts if program is not active.
|
35
|
+
/// @return size the size in bytes
|
36
|
+
function codehashAsmSize(bytes32 codehash) external view returns (uint32 size);
|
37
|
+
|
38
|
+
/// @notice Gets the stylus version the program was most recently activated against
|
39
|
+
/// @return version the program version (reverts for EVM contracts)
|
40
|
+
function programVersion(address program) external view returns (uint16 version);
|
41
|
+
|
42
|
+
/// @notice Gets the cost to invoke the program
|
43
|
+
/// @return gas the amount of gas
|
44
|
+
/// @return gasWhenCached the amount of gas if the program was recently used
|
45
|
+
function programInitGas(address program)
|
46
|
+
external
|
47
|
+
view
|
48
|
+
returns (uint64 gas, uint64 gasWhenCached);
|
49
|
+
|
50
|
+
/// @notice Gets the memory footprint of the program at the given address in pages
|
51
|
+
/// @return footprint the memory footprint of program in pages (reverts for EVM contracts)
|
52
|
+
function programMemoryFootprint(address program) external view returns (uint16 footprint);
|
53
|
+
|
54
|
+
/// @notice Gets the amount of time remaining until the program expires
|
55
|
+
/// @return _secs the time left in seconds (reverts for EVM contracts)
|
56
|
+
function programTimeLeft(address program) external view returns (uint64 _secs);
|
57
|
+
|
58
|
+
/// @notice Gets the conversion rate between gas and ink
|
59
|
+
/// @return price the amount of ink 1 gas buys
|
60
|
+
function inkPrice() external view returns (uint32 price);
|
61
|
+
|
62
|
+
/// @notice Gets the wasm stack size limit
|
63
|
+
/// @return depth the maximum depth (in wasm words) a wasm stack may grow
|
64
|
+
function maxStackDepth() external view returns (uint32 depth);
|
65
|
+
|
66
|
+
/// @notice Gets the number of free wasm pages a program gets
|
67
|
+
/// @return pages the number of wasm pages (2^16 bytes)
|
68
|
+
function freePages() external view returns (uint16 pages);
|
69
|
+
|
70
|
+
/// @notice Gets the base cost of each additional wasm page (2^16 bytes)
|
71
|
+
/// @return gas base amount of gas needed to grow another wasm page
|
72
|
+
function pageGas() external view returns (uint16 gas);
|
73
|
+
|
74
|
+
/// @notice Gets the ramp that drives exponential memory costs
|
75
|
+
/// @return ramp bits representing the floating point value
|
76
|
+
function pageRamp() external view returns (uint64 ramp);
|
77
|
+
|
78
|
+
/// @notice Gets the maximum number of pages a wasm may allocate
|
79
|
+
/// @return limit the number of pages
|
80
|
+
function pageLimit() external view returns (uint16 limit);
|
81
|
+
|
82
|
+
/// @notice Gets the minimum costs to invoke a program
|
83
|
+
/// @return gas amount of gas in increments of 256 when not cached
|
84
|
+
/// @return cached amount of gas in increments of 64 when cached
|
85
|
+
function minInitGas() external view returns (uint8 gas, uint8 cached);
|
86
|
+
|
87
|
+
/// @notice Gets the linear adjustment made to program init costs.
|
88
|
+
/// @return percent the adjustment (100% = no adjustment).
|
89
|
+
function initCostScalar() external view returns (uint64 percent);
|
90
|
+
|
91
|
+
/// @notice Gets the number of days after which programs deactivate
|
92
|
+
/// @return _days the number of days
|
93
|
+
function expiryDays() external view returns (uint16 _days);
|
94
|
+
|
95
|
+
/// @notice Gets the age a program must be to perform a keepalive
|
96
|
+
/// @return _days the number of days
|
97
|
+
function keepaliveDays() external view returns (uint16 _days);
|
98
|
+
|
99
|
+
/// @notice Gets the number of extra programs ArbOS caches during a given block.
|
100
|
+
/// @return count the number of same-block programs.
|
101
|
+
function blockCacheSize() external view returns (uint16 count);
|
102
|
+
|
103
|
+
event ProgramActivated(
|
104
|
+
bytes32 indexed codehash,
|
105
|
+
bytes32 moduleHash,
|
106
|
+
address program,
|
107
|
+
uint256 dataFee,
|
108
|
+
uint16 version
|
109
|
+
);
|
110
|
+
event ProgramLifetimeExtended(bytes32 indexed codehash, uint256 dataFee);
|
111
|
+
|
112
|
+
error ProgramNotWasm();
|
113
|
+
error ProgramNotActivated();
|
114
|
+
error ProgramNeedsUpgrade(uint16 version, uint16 stylusVersion);
|
115
|
+
error ProgramExpired(uint64 ageInSeconds);
|
116
|
+
error ProgramUpToDate();
|
117
|
+
error ProgramKeepaliveTooSoon(uint64 ageInSeconds);
|
118
|
+
error ProgramInsufficientValue(uint256 have, uint256 want);
|
119
|
+
}
|
@@ -0,0 +1,33 @@
|
|
1
|
+
// Copyright 2022-2024, Offchain Labs, Inc.
|
2
|
+
// For license information, see https://github.com/OffchainLabs/nitro/blob/master/LICENSE
|
3
|
+
// SPDX-License-Identifier: BUSL-1.1
|
4
|
+
|
5
|
+
pragma solidity >=0.4.21 <0.9.0;
|
6
|
+
|
7
|
+
/**
|
8
|
+
* @title Methods for managing Stylus caches
|
9
|
+
* @notice Precompiled contract that exists in every Arbitrum chain at 0x0000000000000000000000000000000000000072.
|
10
|
+
*/
|
11
|
+
interface ArbWasmCache {
|
12
|
+
/// @notice See if the user is a cache manager.
|
13
|
+
function isCacheManager(address manager) external view returns (bool);
|
14
|
+
|
15
|
+
/// @notice Retrieve all address managers.
|
16
|
+
/// @return managers the list of managers.
|
17
|
+
function allCacheManagers() external view returns (address[] memory managers);
|
18
|
+
|
19
|
+
/// @notice Caches all programs with the given codehash.
|
20
|
+
/// @notice Reverts if the programs have expired.
|
21
|
+
/// @notice Caller must be a cache manager or chain owner.
|
22
|
+
/// @notice If you're looking for how to bid for position, interact with the chain's cache manager contract.
|
23
|
+
function cacheCodehash(bytes32 codehash) external;
|
24
|
+
|
25
|
+
/// @notice Evicts all programs with the given codehash.
|
26
|
+
/// @notice Caller must be a cache manager or chain owner.
|
27
|
+
function evictCodehash(bytes32 codehash) external;
|
28
|
+
|
29
|
+
/// @notice Gets whether a program is cached. Note that the program may be expired.
|
30
|
+
function codehashIsCached(bytes32 codehash) external view returns (bool);
|
31
|
+
|
32
|
+
event UpdateProgramCache(address indexed manager, bytes32 indexed codehash, bool cached);
|
33
|
+
}
|