@arbitrum/nitro-contracts 2.1.0 → 2.1.1
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/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/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/utils/cryptography/ECDSA.sol/ECDSA.dbg.json +4 -0
- package/build/contracts/@openzeppelin/contracts/utils/cryptography/ECDSA.sol/ECDSA.json +10 -0
- package/build/contracts/@openzeppelin/contracts-upgradeable/access/AccessControlEnumerableUpgradeable.sol/AccessControlEnumerableUpgradeable.dbg.json +4 -0
- package/build/contracts/@openzeppelin/contracts-upgradeable/access/AccessControlEnumerableUpgradeable.sol/AccessControlEnumerableUpgradeable.json +258 -0
- package/build/contracts/@openzeppelin/contracts-upgradeable/access/AccessControlUpgradeable.sol/AccessControlUpgradeable.dbg.json +1 -1
- package/build/contracts/@openzeppelin/contracts-upgradeable/access/IAccessControlEnumerableUpgradeable.sol/IAccessControlEnumerableUpgradeable.dbg.json +4 -0
- package/build/contracts/@openzeppelin/contracts-upgradeable/access/IAccessControlEnumerableUpgradeable.sol/IAccessControlEnumerableUpgradeable.json +226 -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/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/token/ERC20/ERC20Upgradeable.sol/ERC20Upgradeable.dbg.json +4 -0
- package/build/contracts/@openzeppelin/contracts-upgradeable/token/ERC20/ERC20Upgradeable.sol/ERC20Upgradeable.json +281 -0
- package/build/contracts/@openzeppelin/contracts-upgradeable/token/ERC20/IERC20Upgradeable.sol/IERC20Upgradeable.dbg.json +1 -1
- package/build/contracts/@openzeppelin/contracts-upgradeable/token/ERC20/extensions/ERC20BurnableUpgradeable.sol/ERC20BurnableUpgradeable.dbg.json +4 -0
- package/build/contracts/@openzeppelin/contracts-upgradeable/token/ERC20/extensions/ERC20BurnableUpgradeable.sol/ERC20BurnableUpgradeable.json +312 -0
- package/build/contracts/@openzeppelin/contracts-upgradeable/token/ERC20/extensions/IERC20MetadataUpgradeable.sol/IERC20MetadataUpgradeable.dbg.json +4 -0
- package/build/contracts/@openzeppelin/contracts-upgradeable/token/ERC20/extensions/IERC20MetadataUpgradeable.sol/IERC20MetadataUpgradeable.json +233 -0
- 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/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/cryptography/ECDSAUpgradeable.sol/ECDSAUpgradeable.dbg.json +4 -0
- package/build/contracts/@openzeppelin/contracts-upgradeable/utils/cryptography/ECDSAUpgradeable.sol/ECDSAUpgradeable.json +10 -0
- package/build/contracts/@openzeppelin/contracts-upgradeable/utils/cryptography/draft-EIP712Upgradeable.sol/EIP712Upgradeable.dbg.json +4 -0
- package/build/contracts/@openzeppelin/contracts-upgradeable/utils/cryptography/draft-EIP712Upgradeable.sol/EIP712Upgradeable.json +10 -0
- 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 +4 -0
- package/build/contracts/@openzeppelin/contracts-upgradeable/utils/structs/EnumerableSetUpgradeable.sol/EnumerableSetUpgradeable.json +10 -0
- 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/AbsOutbox.sol/AbsOutbox.dbg.json +1 -1
- package/build/contracts/src/bridge/Bridge.sol/Bridge.dbg.json +1 -1
- package/build/contracts/src/bridge/ERC20Bridge.sol/ERC20Bridge.dbg.json +1 -1
- package/build/contracts/src/bridge/ERC20Inbox.sol/ERC20Inbox.dbg.json +1 -1
- package/build/contracts/src/bridge/ERC20Outbox.sol/ERC20Outbox.dbg.json +1 -1
- 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/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/Inbox.sol/Inbox.dbg.json +1 -1
- package/build/contracts/src/bridge/Inbox.sol/Inbox.json +2 -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/SequencerInbox.sol/SequencerInbox.dbg.json +1 -1
- package/build/contracts/src/bridge/SequencerInbox.sol/SequencerInbox.json +2 -2
- 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/challenge/ChallengeLib.sol/ChallengeLib.dbg.json +1 -1
- package/build/contracts/src/challenge/ChallengeManager.sol/ChallengeManager.dbg.json +1 -1
- package/build/contracts/src/challenge/IChallengeManager.sol/IChallengeManager.dbg.json +1 -1
- package/build/contracts/src/challenge/IChallengeResultReceiver.sol/IChallengeResultReceiver.dbg.json +1 -1
- package/build/contracts/src/express-lane-auction/Balance.sol/BalanceLib.dbg.json +4 -0
- package/build/contracts/src/express-lane-auction/Balance.sol/BalanceLib.json +10 -0
- package/build/contracts/src/express-lane-auction/Burner.sol/Burner.dbg.json +4 -0
- package/build/contracts/src/express-lane-auction/Burner.sol/Burner.json +47 -0
- package/build/contracts/src/express-lane-auction/ELCRound.sol/LatestELCRoundsLib.dbg.json +4 -0
- package/build/contracts/src/express-lane-auction/ELCRound.sol/LatestELCRoundsLib.json +10 -0
- package/build/contracts/src/express-lane-auction/ExpressLaneAuction.sol/ExpressLaneAuction.dbg.json +4 -0
- package/build/contracts/src/express-lane-auction/ExpressLaneAuction.sol/ExpressLaneAuction.json +1588 -0
- package/build/contracts/src/express-lane-auction/IExpressLaneAuction.sol/IExpressLaneAuction.dbg.json +4 -0
- package/build/contracts/src/express-lane-auction/IExpressLaneAuction.sol/IExpressLaneAuction.json +1296 -0
- package/build/contracts/src/express-lane-auction/RoundTimingInfo.sol/RoundTimingInfoLib.dbg.json +4 -0
- package/build/contracts/src/express-lane-auction/RoundTimingInfo.sol/RoundTimingInfoLib.json +10 -0
- 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/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/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/BridgeUnproxied.sol/BridgeUnproxied.dbg.json +1 -1
- package/build/contracts/src/mocks/BridgeUnproxied.sol/BridgeUnproxied.json +15 -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/MockResultReceiver.sol/MockResultReceiver.dbg.json +1 -1
- 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/SequencerInboxStub.sol/SequencerInboxStub.dbg.json +1 -1
- package/build/contracts/src/mocks/SequencerInboxStub.sol/SequencerInboxStub.json +2 -2
- 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/SimpleProxy.sol/SimpleProxy.dbg.json +1 -1
- package/build/contracts/src/mocks/SingleExecutionChallenge.sol/SingleExecutionChallenge.dbg.json +1 -1
- package/build/contracts/src/mocks/TimedOutChallengeManager.sol/TimedOutChallengeManager.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/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/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/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/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/RollupProxy.sol/RollupProxy.dbg.json +1 -1
- package/build/contracts/src/rollup/RollupUserLogic.sol/AbsRollupUserLogic.dbg.json +1 -1
- package/build/contracts/src/rollup/RollupUserLogic.sol/ERC20RollupUserLogic.dbg.json +1 -1
- package/build/contracts/src/rollup/RollupUserLogic.sol/ERC20RollupUserLogic.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/ValidatorUtils.sol/ValidatorUtils.dbg.json +1 -1
- package/build/contracts/src/rollup/ValidatorWallet.sol/ValidatorWallet.dbg.json +1 -1
- package/build/contracts/src/rollup/ValidatorWalletCreator.sol/ValidatorWalletCreator.dbg.json +1 -1
- 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/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/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 +5 -2
- package/src/express-lane-auction/Balance.sol +142 -0
- package/src/express-lane-auction/Burner.sol +25 -0
- package/src/express-lane-auction/ELCRound.sol +73 -0
- package/src/express-lane-auction/Errors.sol +31 -0
- package/src/express-lane-auction/ExpressLaneAuction.sol +565 -0
- package/src/express-lane-auction/IExpressLaneAuction.sol +421 -0
- package/src/express-lane-auction/RoundTimingInfo.sol +115 -0
- package/src/mocks/BridgeUnproxied.sol +2 -0
- package/src/mocks/CreateTest.sol +42 -0
- package/src/mocks/HostioTest.sol +196 -0
- package/src/precompiles/ArbSys.sol +2 -1
- package/src/precompiles/ArbWasm.sol +1 -1
- package/src/rollup/RollupCreator.sol +4 -4
|
@@ -0,0 +1,421 @@
|
|
|
1
|
+
// SPDX-License-Identifier: BUSL-1.1
|
|
2
|
+
pragma solidity ^0.8.0;
|
|
3
|
+
|
|
4
|
+
import {IERC20} from "@openzeppelin/contracts/token/ERC20/utils/SafeERC20.sol";
|
|
5
|
+
import {RoundTimingInfo} from "./RoundTimingInfo.sol";
|
|
6
|
+
import {ELCRound} from "./ELCRound.sol";
|
|
7
|
+
import {
|
|
8
|
+
IAccessControlEnumerableUpgradeable
|
|
9
|
+
} from "@openzeppelin/contracts-upgradeable/access/IAccessControlEnumerableUpgradeable.sol";
|
|
10
|
+
import {
|
|
11
|
+
IERC165Upgradeable
|
|
12
|
+
} from "@openzeppelin/contracts-upgradeable/utils/introspection/IERC165Upgradeable.sol";
|
|
13
|
+
|
|
14
|
+
/// @notice A bid to control the express lane for a specific round
|
|
15
|
+
struct Bid {
|
|
16
|
+
/// @notice The address to be set as the express lane controller if this bid wins the auction round
|
|
17
|
+
address expressLaneController;
|
|
18
|
+
/// @notice The maximum amount the bidder is willing to pay if they win the round
|
|
19
|
+
/// The auction is a second price auction, so the winner may end up paying less than this amount
|
|
20
|
+
/// however this is the maximum amount up to which they may have to pay
|
|
21
|
+
uint256 amount;
|
|
22
|
+
/// @notice Authentication of this bid by the bidder.
|
|
23
|
+
/// The bidder signs over a hash of the following
|
|
24
|
+
/// keccak256("\x19Ethereum Signed Message:\n144" ++ keccak256("TIMEBOOST_BID") ++ chainId ++ auctionContractAddress ++ auctionRound ++ bidAmount ++ expressLaneController)
|
|
25
|
+
bytes signature;
|
|
26
|
+
}
|
|
27
|
+
|
|
28
|
+
/// @notice Sets a transferor for an express lane controller
|
|
29
|
+
/// The transferor is an address that will have the right to transfer express lane controller rights
|
|
30
|
+
/// on behalf an express lane controller.
|
|
31
|
+
struct Transferor {
|
|
32
|
+
/// @notice The address of the transferor
|
|
33
|
+
address addr;
|
|
34
|
+
/// @notice The express lane controller can choose to fix the transferor until a future round number
|
|
35
|
+
/// This gives them ability to guarantee to other parties that they will not change transferor during an ongoing round
|
|
36
|
+
/// The express lane controller can ignore this feature by setting this value to 0.
|
|
37
|
+
uint64 fixedUntilRound;
|
|
38
|
+
}
|
|
39
|
+
|
|
40
|
+
/// @notice The arguments used to initialize an express lane auction
|
|
41
|
+
struct InitArgs {
|
|
42
|
+
/// @notice The address who can resolve auctions
|
|
43
|
+
address _auctioneer;
|
|
44
|
+
/// @notice The ERC20 token that bids will be made in
|
|
45
|
+
/// It is assumed that this token does NOT have fee-on-transfer, rebasing,
|
|
46
|
+
/// transfer hooks or otherwise non-standard ERC20 logic.
|
|
47
|
+
address _biddingToken;
|
|
48
|
+
/// @notice The address to which auction winners will pay the bid
|
|
49
|
+
address _beneficiary;
|
|
50
|
+
/// @notice Round timing components: offset, auction closing, round duration, reserve submission
|
|
51
|
+
RoundTimingInfo _roundTimingInfo;
|
|
52
|
+
/// @notice The minimum reserve price, also used to set the initial reserve price
|
|
53
|
+
uint256 _minReservePrice;
|
|
54
|
+
/// @notice Can update the auctioneer address
|
|
55
|
+
address _auctioneerAdmin;
|
|
56
|
+
/// @notice The address given the rights to change the min reserve price
|
|
57
|
+
address _minReservePriceSetter;
|
|
58
|
+
/// @notice The address given the rights to change the reserve price
|
|
59
|
+
address _reservePriceSetter;
|
|
60
|
+
/// @notice Can update the reserve price setter address
|
|
61
|
+
address _reservePriceSetterAdmin;
|
|
62
|
+
/// @notice The address given the rights to change the beneficiary address
|
|
63
|
+
address _beneficiarySetter;
|
|
64
|
+
/// @notice _roundTimingSetter The address given the rights to update the round timing info
|
|
65
|
+
address _roundTimingSetter;
|
|
66
|
+
/// @notice The admin that can manage all the admin roles in the contract
|
|
67
|
+
address _masterAdmin;
|
|
68
|
+
}
|
|
69
|
+
|
|
70
|
+
interface IExpressLaneAuction is IAccessControlEnumerableUpgradeable, IERC165Upgradeable {
|
|
71
|
+
/// @notice An account has deposited funds to be used for bidding in the auction
|
|
72
|
+
/// @param account The account that deposited funds
|
|
73
|
+
/// @param amount The amount deposited by that account
|
|
74
|
+
event Deposit(address indexed account, uint256 amount);
|
|
75
|
+
|
|
76
|
+
/// @notice An account has initiated a withdrawal of funds from the auction
|
|
77
|
+
/// @param account The account withdrawing the funds
|
|
78
|
+
/// @param withdrawalAmount The amount beind withdrawn
|
|
79
|
+
/// @param roundWithdrawable The round the funds will become withdrawable in
|
|
80
|
+
event WithdrawalInitiated(
|
|
81
|
+
address indexed account,
|
|
82
|
+
uint256 withdrawalAmount,
|
|
83
|
+
uint256 roundWithdrawable
|
|
84
|
+
);
|
|
85
|
+
|
|
86
|
+
/// @notice An account has finalized a withdrawal
|
|
87
|
+
/// @param account The account that finalized the withdrawal
|
|
88
|
+
/// @param withdrawalAmount The amount that was withdrawn
|
|
89
|
+
event WithdrawalFinalized(address indexed account, uint256 withdrawalAmount);
|
|
90
|
+
|
|
91
|
+
/// @notice An auction was resolved and a new express lane controller was set
|
|
92
|
+
/// @param isMultiBidAuction Whether there was more than one bid in the auction
|
|
93
|
+
/// @param round The round for which the rights were being auctioned
|
|
94
|
+
/// @param firstPriceBidder The bidder who won the auction
|
|
95
|
+
/// @param firstPriceExpressLaneController The address that will have express lane control in the specified round
|
|
96
|
+
/// @param firstPriceAmount The price in the winning bid
|
|
97
|
+
/// @param price The price paid by the winning bidder
|
|
98
|
+
/// @param roundStartTimestamp The time at which the round will start
|
|
99
|
+
/// @param roundEndTimestamp The time at which the round will end
|
|
100
|
+
event AuctionResolved(
|
|
101
|
+
bool indexed isMultiBidAuction,
|
|
102
|
+
uint64 round,
|
|
103
|
+
address indexed firstPriceBidder,
|
|
104
|
+
address indexed firstPriceExpressLaneController,
|
|
105
|
+
uint256 firstPriceAmount,
|
|
106
|
+
uint256 price,
|
|
107
|
+
uint64 roundStartTimestamp,
|
|
108
|
+
uint64 roundEndTimestamp
|
|
109
|
+
);
|
|
110
|
+
|
|
111
|
+
/// @notice A new express lane controller was set
|
|
112
|
+
/// @param round The round which the express lane controller will control
|
|
113
|
+
/// @param previousExpressLaneController The previous express lane controller
|
|
114
|
+
/// @param newExpressLaneController The new express lane controller
|
|
115
|
+
/// @param transferor The address that transferored the controller rights. The transferor if set, otherwise the express lane controller
|
|
116
|
+
/// @param startTimestamp The timestamp at which the new express lane controller takes over
|
|
117
|
+
/// @param endTimestamp The timestamp at which the new express lane controller's rights are expected to cease. They can cease earlier if
|
|
118
|
+
/// if they are transfered before the end of the round
|
|
119
|
+
event SetExpressLaneController(
|
|
120
|
+
uint64 round,
|
|
121
|
+
address indexed previousExpressLaneController,
|
|
122
|
+
address indexed newExpressLaneController,
|
|
123
|
+
address indexed transferor,
|
|
124
|
+
uint64 startTimestamp,
|
|
125
|
+
uint64 endTimestamp
|
|
126
|
+
);
|
|
127
|
+
|
|
128
|
+
/// @notice A new transferor has been set for
|
|
129
|
+
/// @param expressLaneController The express lane controller that has a transferor
|
|
130
|
+
/// @param transferor The transferor chosen
|
|
131
|
+
/// @param fixedUntilRound The round until which this transferor is fixed for this controller
|
|
132
|
+
event SetTransferor(
|
|
133
|
+
address indexed expressLaneController,
|
|
134
|
+
address indexed transferor,
|
|
135
|
+
uint64 fixedUntilRound
|
|
136
|
+
);
|
|
137
|
+
|
|
138
|
+
/// @notice The minimum reserve price was set
|
|
139
|
+
/// @param oldPrice The previous minimum reserve price
|
|
140
|
+
/// @param newPrice The new minimum reserve price
|
|
141
|
+
event SetMinReservePrice(uint256 oldPrice, uint256 newPrice);
|
|
142
|
+
|
|
143
|
+
/// @notice A new reserve price was set
|
|
144
|
+
/// @param oldReservePrice Previous reserve price
|
|
145
|
+
/// @param newReservePrice New reserve price
|
|
146
|
+
event SetReservePrice(uint256 oldReservePrice, uint256 newReservePrice);
|
|
147
|
+
|
|
148
|
+
/// @notice A new beneficiary was set
|
|
149
|
+
/// @param oldBeneficiary The previous beneficiary
|
|
150
|
+
/// @param newBeneficiary The new beneficiary
|
|
151
|
+
event SetBeneficiary(address oldBeneficiary, address newBeneficiary);
|
|
152
|
+
|
|
153
|
+
/// @notice A new round timing info has been set
|
|
154
|
+
/// @param currentRound The round during which the timing info was set
|
|
155
|
+
/// @param offsetTimestamp The new offset timestamp
|
|
156
|
+
/// @param roundDurationSeconds The new round duration seconds
|
|
157
|
+
/// @param auctionClosingSeconds The new auction closing seconds
|
|
158
|
+
/// @param reserveSubmissionSeconds The new reserve submission seconds
|
|
159
|
+
event SetRoundTimingInfo(
|
|
160
|
+
uint64 currentRound,
|
|
161
|
+
int64 offsetTimestamp,
|
|
162
|
+
uint64 roundDurationSeconds,
|
|
163
|
+
uint64 auctionClosingSeconds,
|
|
164
|
+
uint64 reserveSubmissionSeconds
|
|
165
|
+
);
|
|
166
|
+
|
|
167
|
+
/// @notice The role given to the address that can resolve auctions
|
|
168
|
+
function AUCTIONEER_ROLE() external returns (bytes32);
|
|
169
|
+
|
|
170
|
+
/// @notice The role that administers AUCTIONEER_ROLE
|
|
171
|
+
function AUCTIONEER_ADMIN_ROLE() external returns (bytes32);
|
|
172
|
+
|
|
173
|
+
/// @notice The role given to the address that can set the minimum reserve
|
|
174
|
+
function MIN_RESERVE_SETTER_ROLE() external returns (bytes32);
|
|
175
|
+
|
|
176
|
+
/// @notice The role given to the address that can set the reserve
|
|
177
|
+
function RESERVE_SETTER_ROLE() external returns (bytes32);
|
|
178
|
+
|
|
179
|
+
/// @notice The role that administers the RESERVE_SETTER_ROLE
|
|
180
|
+
function RESERVE_SETTER_ADMIN_ROLE() external returns (bytes32);
|
|
181
|
+
|
|
182
|
+
/// @notice The role given to the address that can set the beneficiary
|
|
183
|
+
function BENEFICIARY_SETTER_ROLE() external returns (bytes32);
|
|
184
|
+
|
|
185
|
+
/// @notice The role given to addresses that can set round timing info
|
|
186
|
+
function ROUND_TIMING_SETTER_ROLE() external returns (bytes32);
|
|
187
|
+
|
|
188
|
+
/// @notice The beneficiary who receives the funds that are paid by the auction winners
|
|
189
|
+
function beneficiary() external returns (address);
|
|
190
|
+
|
|
191
|
+
/// @notice The ERC20 token that can be used for bidding
|
|
192
|
+
/// It is assumed that the this token does NOT have fee-on-transfer, rebasing,
|
|
193
|
+
/// transfer hooks or otherwise non-standard ERC20 logic.
|
|
194
|
+
function biddingToken() external returns (IERC20);
|
|
195
|
+
|
|
196
|
+
/// @notice The reserve price for the auctions. The reserve price setter can update this value
|
|
197
|
+
/// to ensure that controlling rights are auctioned off at a reasonable value
|
|
198
|
+
function reservePrice() external returns (uint256);
|
|
199
|
+
|
|
200
|
+
/// @notice The minimum amount the reserve can be set to. This ensures that reserve prices cannot be
|
|
201
|
+
/// set too low
|
|
202
|
+
function minReservePrice() external returns (uint256);
|
|
203
|
+
|
|
204
|
+
/// @notice Returns the currently unflushed balance of the beneficiary
|
|
205
|
+
/// Anyone can call flushBalance to transfer this balance from the auction to the beneficiary
|
|
206
|
+
/// This is a gas optimisation to avoid making a transfer every time an auction is resolved
|
|
207
|
+
function beneficiaryBalance() external returns (uint256);
|
|
208
|
+
|
|
209
|
+
/// @notice Express lane controllers can optionally set a transferor address that has the rights
|
|
210
|
+
/// to transfer their controller rights. This function returns the transferor if one has been set
|
|
211
|
+
/// Returns the transferor for the supplied controller, and the round until which this
|
|
212
|
+
/// transferor is fixed if set.
|
|
213
|
+
function transferorOf(address expressLaneController)
|
|
214
|
+
external
|
|
215
|
+
returns (address addr, uint64 fixedUntil);
|
|
216
|
+
|
|
217
|
+
/// @notice Initialize the auction
|
|
218
|
+
/// @param args Initialization parameters
|
|
219
|
+
function initialize(InitArgs memory args) external;
|
|
220
|
+
|
|
221
|
+
/// @notice Round timing components: offset, auction closing, round duration and reserve submission
|
|
222
|
+
function roundTimingInfo()
|
|
223
|
+
external
|
|
224
|
+
view
|
|
225
|
+
returns (
|
|
226
|
+
int64 offsetTimestamp,
|
|
227
|
+
uint64 roundDurationSeconds,
|
|
228
|
+
uint64 auctionClosingSeconds,
|
|
229
|
+
uint64 reserveSubmissionSeconds
|
|
230
|
+
);
|
|
231
|
+
|
|
232
|
+
/// @notice The current auction round that we're in
|
|
233
|
+
/// Bidding for control of the next round occurs in the current round
|
|
234
|
+
function currentRound() external view returns (uint64);
|
|
235
|
+
|
|
236
|
+
/// @notice Is the current auction round closed for bidding
|
|
237
|
+
/// After the round has closed the auctioneer can resolve it with the highest bids
|
|
238
|
+
/// Note. This can change unexpectedly if a round timing info is updated
|
|
239
|
+
function isAuctionRoundClosed() external view returns (bool);
|
|
240
|
+
|
|
241
|
+
/// @notice The auction reserve cannot be updated during the blackout period
|
|
242
|
+
/// This starts ReserveSubmissionSeconds before the round closes and ends when the round is resolved, or the round ends
|
|
243
|
+
/// Note. This can change unexpectedly if a round timing info is updated
|
|
244
|
+
function isReserveBlackout() external view returns (bool);
|
|
245
|
+
|
|
246
|
+
/// @notice Gets the start and end timestamps for a given round
|
|
247
|
+
/// This only returns the start and end timestamps given the current round timing info, which can be updated
|
|
248
|
+
/// Historical round timestamp can be found by checking the logs for round timing info updates, or by looking
|
|
249
|
+
/// at the timing info emitted in events from resolved auctions
|
|
250
|
+
/// Since it is possible to set a negative offset, the start and end time may also be negative
|
|
251
|
+
/// In this case requesting roundTimestamps will revert.
|
|
252
|
+
/// @param round The round to find the timestamps for
|
|
253
|
+
/// @return start The start of the round in seconds, inclusive
|
|
254
|
+
/// @return end The end of the round in seconds, inclusive
|
|
255
|
+
function roundTimestamps(uint64 round) external view returns (uint64 start, uint64 end);
|
|
256
|
+
|
|
257
|
+
/// @notice Update the beneficiary to a new address
|
|
258
|
+
/// Setting the beneficiary does not flush any pending balance, so anyone calling this function should consider
|
|
259
|
+
/// whether they want to flush before calling set.
|
|
260
|
+
/// It is expected that the DAO will have the rights to set beneficiary, and since they execute calls via
|
|
261
|
+
/// action contract they can atomically call flush and set beneficiary together.
|
|
262
|
+
/// @param newBeneficiary The new beneficiary
|
|
263
|
+
function setBeneficiary(address newBeneficiary) external;
|
|
264
|
+
|
|
265
|
+
/// @notice Set the minimum reserve. The reserve cannot be set below this value
|
|
266
|
+
/// Having a minimum reserve ensures that the reserve setter doesn't set the reserve too low
|
|
267
|
+
/// If the new minimum reserve is greater than the current reserve then the reserve will also be set,
|
|
268
|
+
/// this will happen regardless of whether we are in a reserve blackout period or not.
|
|
269
|
+
/// The min reserve setter is therefore trusted to either give bidders plenty of notice that they may change the min
|
|
270
|
+
/// reserve, or do so outside of the blackout window. It is expected that the min reserve setter will be controlled by
|
|
271
|
+
/// Arbitrum DAO who can only make changes via timelocks, thereby providing the notice to bidders.
|
|
272
|
+
/// If the new minimum reserve is set to a very high value eg max(uint) then the auction will never be able to resolve
|
|
273
|
+
/// the min reserve setter is therefore trusted not to do this as it would DOS the auction. Note that even if this occurs
|
|
274
|
+
/// bidders will not lose their funds and will still be able to withdraw them.
|
|
275
|
+
/// @param newMinReservePrice The new minimum reserve
|
|
276
|
+
function setMinReservePrice(uint256 newMinReservePrice) external;
|
|
277
|
+
|
|
278
|
+
/// @notice Set the auction reserve price. Must be greater than or equal the minimum reserve.
|
|
279
|
+
/// A reserve price setter is given the ability to change the reserve price to ensure that express lane control rights
|
|
280
|
+
/// are not sold off too cheaply. They are trusted to set realistic values for this.
|
|
281
|
+
/// However they can only change this value when not in the blackout period, which occurs before at the auction close
|
|
282
|
+
/// This ensures that bidders will have plenty of time to observe the reserve before the auction closes, and that
|
|
283
|
+
/// the reserve cannot be changed at the last second. One exception to this is if the minimum reserve changes, see the setMinReservePrice
|
|
284
|
+
/// documentation for more details.
|
|
285
|
+
/// If the new reserve is set to a very high value eg max(uint) then the auction will never be able to resolve
|
|
286
|
+
/// the reserve setter is therefore trusted not to do this as it would DOS the auction. Note that even if this occurs
|
|
287
|
+
/// bidders will not lose their funds and will still be able to withdraw them.
|
|
288
|
+
/// Note to reserve price setter, setting reserve price is dependent on the time into the round, which can change if the round timing info is updated
|
|
289
|
+
/// @param newReservePrice The price to set the reserve to
|
|
290
|
+
function setReservePrice(uint256 newReservePrice) external;
|
|
291
|
+
|
|
292
|
+
/// @notice Sets new round timing info. When setting a new round timing info the current round and the start
|
|
293
|
+
/// timestamp of the next round cannot change. The caller can ensure this by dynamically calculating
|
|
294
|
+
/// the correct offset which will produce this for the specified round duration seconds in the new timing info.
|
|
295
|
+
/// Changing timing info affects the current ongoing auction, given that the round may already have been resolved
|
|
296
|
+
/// this could result in bidders paying for a round that is longer or shorter than they expected. To that end
|
|
297
|
+
/// the round timing setter is trusted not to set this function too often, and any observers who depend upon this timing info
|
|
298
|
+
/// (eg bidders, auctioneer, reserve price setter etc) should be able to see when this is going to happen.
|
|
299
|
+
/// On Arbitrum One the expected round timing setter is the Arbitrum DAO, that can only
|
|
300
|
+
/// make changes by passing proposals through timelocks, therefore providing the notice to bidders.
|
|
301
|
+
/// Since the next round of the new info must be the same as the next round of the current info, it follows
|
|
302
|
+
/// that the update can only be made within min(roundDuration, newRoundDuration) of the end of the round, making
|
|
303
|
+
/// an update outside of this will cause a revert.
|
|
304
|
+
/// If necessary negative offsets can be set in order to achieve the next round number, given that
|
|
305
|
+
/// the maximum round duration is 1 day it should be possible to have many thousands of years worth of
|
|
306
|
+
/// rounds before it is not longer possible (due to int underflow) to change from 1 second to 1 day duration
|
|
307
|
+
/// @param newRoundTimingInfo The new timing info to set
|
|
308
|
+
function setRoundTimingInfo(RoundTimingInfo calldata newRoundTimingInfo) external;
|
|
309
|
+
|
|
310
|
+
/// @notice Get the current balance of specified account.
|
|
311
|
+
/// If a withdrawal is initiated this balance will reduce in current round + 2
|
|
312
|
+
/// @param account The specified account
|
|
313
|
+
function balanceOf(address account) external view returns (uint256);
|
|
314
|
+
|
|
315
|
+
/// @notice Get what the balance will be at some future round
|
|
316
|
+
/// Since withdrawals are scheduled for future rounds it is possible to see that a balance
|
|
317
|
+
/// will reduce at some future round, this method provides a way to query that.
|
|
318
|
+
/// Specifically this will return 0 if the withdrawal round has been set, and is < the supplied round
|
|
319
|
+
/// Will revert if a round from the past is supplied
|
|
320
|
+
/// @param account The specified account
|
|
321
|
+
/// @param round The round to query the balance at
|
|
322
|
+
function balanceOfAtRound(address account, uint64 round) external view returns (uint256);
|
|
323
|
+
|
|
324
|
+
/// @notice The amount of balance that can currently be withdrawn via the finalize method
|
|
325
|
+
/// This balance only increases current round + 2 after a withdrawal is initiated
|
|
326
|
+
/// @param account The account the check the withdrawable balance for
|
|
327
|
+
function withdrawableBalance(address account) external view returns (uint256);
|
|
328
|
+
|
|
329
|
+
/// @notice The amount of balance that can currently be withdrawn via the finalize method
|
|
330
|
+
/// Since withdrawals are scheduled for future rounds it is possible to see that a withdrawal balance
|
|
331
|
+
/// will increase at some future round, this method provides a way to query that.
|
|
332
|
+
/// Specifically this will return 0 unless the withdrawal round has been set, and is >= the supplied round
|
|
333
|
+
/// Will revert if a round from the past is supplied
|
|
334
|
+
/// This balance only increases current round + 2 after a withdrawal is initiated
|
|
335
|
+
/// @param account The account the check the withdrawable balance for
|
|
336
|
+
/// @param round The round to query the withdrawable balance at
|
|
337
|
+
function withdrawableBalanceAtRound(address account, uint64 round)
|
|
338
|
+
external
|
|
339
|
+
view
|
|
340
|
+
returns (uint256);
|
|
341
|
+
|
|
342
|
+
/// @notice Deposit an amount of ERC20 token to the auction to make bids with
|
|
343
|
+
/// Deposits must be submitted prior to bidding.
|
|
344
|
+
/// When withdrawing the full balance must be withdrawn. This is done via a two step process
|
|
345
|
+
/// of initialization and finalization, which takes at least 2 rounds to complete.
|
|
346
|
+
/// The round timing info offset timestamp is the start of the zeroth round, so if deposits
|
|
347
|
+
/// are made before that time they will need to wait until 2 rounds after that offset has occurred
|
|
348
|
+
/// @dev Deposits are submitted first so that the auctioneer can be sure that the accepted bids can actually be paid
|
|
349
|
+
/// @param amount The amount to deposit.
|
|
350
|
+
function deposit(uint256 amount) external;
|
|
351
|
+
|
|
352
|
+
/// @notice Initiate a withdrawal of the full account balance of the message sender
|
|
353
|
+
/// Once funds have been deposited they can only be retrieved by initiating + finalizing a withdrawal
|
|
354
|
+
/// There is a delay between initializing and finalizing a withdrawal so that the auctioneer can be sure
|
|
355
|
+
/// that value cannot be removed before an auction is resolved. The timeline is as follows:
|
|
356
|
+
/// 1. Initiate a withdrawal at some time in round r
|
|
357
|
+
/// 2. During round r the balance is still available and can be used in an auction
|
|
358
|
+
/// 3. During round r+1 the auctioneer should consider any accounts that have been initiated for withdrawal as having zero balance
|
|
359
|
+
/// However if a bid is submitted the balance will be available for use
|
|
360
|
+
/// 4. During round r+2 the bidder can finalize a withdrawal and remove their funds
|
|
361
|
+
/// A bidder may have only one withdrawal being processed at any one time, and that withdrawal will be for the full balance
|
|
362
|
+
function initiateWithdrawal() external;
|
|
363
|
+
|
|
364
|
+
/// @notice Finalizes a withdrawal and transfers the funds to the msg.sender
|
|
365
|
+
/// Withdrawals can only be finalized 2 rounds after being initiated
|
|
366
|
+
function finalizeWithdrawal() external;
|
|
367
|
+
|
|
368
|
+
/// @notice Can be called by anyone to transfer any beneficiary balance from the auction contract to the beneficiary
|
|
369
|
+
/// This is not done separately so that it does not need to be done during auction resolution, thus saving some gas costs there
|
|
370
|
+
function flushBeneficiaryBalance() external;
|
|
371
|
+
|
|
372
|
+
/// @notice The domain separator used in the 712 signing hash
|
|
373
|
+
function domainSeparator() external view returns (bytes32);
|
|
374
|
+
|
|
375
|
+
/// @notice Get the 712 hash of a bid used for signing
|
|
376
|
+
/// @param round The round the bid is for the control of
|
|
377
|
+
/// @param expressLaneController The address that will be the express lane controller if the bid wins
|
|
378
|
+
/// @param amount The amount being bid
|
|
379
|
+
function getBidHash(
|
|
380
|
+
uint64 round,
|
|
381
|
+
address expressLaneController,
|
|
382
|
+
uint256 amount
|
|
383
|
+
) external view returns (bytes32);
|
|
384
|
+
|
|
385
|
+
/// @notice Resolve the auction with just a single bid. The auctioneer is trusted to call this only when there are
|
|
386
|
+
/// less than two bids higher than the reserve price for an auction round.
|
|
387
|
+
/// In this case the highest bidder will pay the reserve price for the round
|
|
388
|
+
/// @dev We do not enforce it, but the following accounts or their sybils, are trusted not to send bids to the auctioneer
|
|
389
|
+
/// Auctioneer, beneficiary, beneficiary setter, reserve price setter, min reserve price setter, role admin, round timing info setter
|
|
390
|
+
/// @param firstPriceBid The highest price bid. Must have a price higher than the reserve. Price paid is the reserve
|
|
391
|
+
function resolveSingleBidAuction(Bid calldata firstPriceBid) external;
|
|
392
|
+
|
|
393
|
+
/// @notice Resolves the auction round with the two highest bids for that round
|
|
394
|
+
/// The highest price bidder pays the price of the second highest bid
|
|
395
|
+
/// Both bids must be higher than the reserve
|
|
396
|
+
/// @dev We do not enforce it, but the following accounts or their sybils, are trusted not to send bids to the auctioneer
|
|
397
|
+
/// Auctioneer, beneficiary, beneficiary setter, reserve price setter, min reserve price setter, role admin, round timing info setter
|
|
398
|
+
/// @param firstPriceBid The highest price bid
|
|
399
|
+
/// @param secondPriceBid The second highest price bid
|
|
400
|
+
function resolveMultiBidAuction(Bid calldata firstPriceBid, Bid calldata secondPriceBid)
|
|
401
|
+
external;
|
|
402
|
+
|
|
403
|
+
/// @notice Sets a transferor for an express lane controller
|
|
404
|
+
/// The transferor is an address that will have the right to transfer express lane controller rights
|
|
405
|
+
/// on behalf an express lane controller.
|
|
406
|
+
/// @param transferor The transferor to set
|
|
407
|
+
function setTransferor(Transferor calldata transferor) external;
|
|
408
|
+
|
|
409
|
+
/// @notice Express lane controllers are allowed to transfer their express lane rights for the current or future
|
|
410
|
+
/// round to another address. They may use this for reselling their rights after purchasing them
|
|
411
|
+
/// Again, the priviledged accounts mentioned in resolve documentation are trusted not to try to receive rights via this message.
|
|
412
|
+
/// Although they cannot stop someone transferring the rights to them, they should not use the controller rights if that does occur
|
|
413
|
+
/// @param round The round to transfer rights for
|
|
414
|
+
/// @param newExpressLaneController The new express lane controller to transfer the rights to
|
|
415
|
+
function transferExpressLaneController(uint64 round, address newExpressLaneController) external;
|
|
416
|
+
|
|
417
|
+
/// @notice The last two auction rounds that were resolved
|
|
418
|
+
/// @return The most recent resolved auction round
|
|
419
|
+
/// @return The second most recent resolved auction round
|
|
420
|
+
function resolvedRounds() external view returns (ELCRound memory, ELCRound memory);
|
|
421
|
+
}
|
|
@@ -0,0 +1,115 @@
|
|
|
1
|
+
// SPDX-License-Identifier: BUSL-1.1
|
|
2
|
+
pragma solidity ^0.8.0;
|
|
3
|
+
|
|
4
|
+
import {NegativeRoundStart} from "./Errors.sol";
|
|
5
|
+
|
|
6
|
+
/// @notice Information about the timings of auction round. All timings measured in seconds
|
|
7
|
+
/// Bids can be submitted to the offchain autonomous auctioneer until the auction round closes
|
|
8
|
+
/// after which the auctioneer can submit the two highest bids to the auction contract to resolve the auction
|
|
9
|
+
struct RoundTimingInfo {
|
|
10
|
+
/// @notice The timestamp when round 0 starts
|
|
11
|
+
/// We allow this to be negative so that later when setting new round timing info
|
|
12
|
+
/// we can use offsets very far in the past. This combined with the maxium that we allow
|
|
13
|
+
/// on round duration ensures that we can always set a new round duration within the possible range
|
|
14
|
+
int64 offsetTimestamp;
|
|
15
|
+
/// @notice The total duration (in seconds) of the round. Always less than 86400 and greater than 0
|
|
16
|
+
uint64 roundDurationSeconds;
|
|
17
|
+
/// @notice The number of seconds before the end of the round that the auction round closes. Cannot be 0
|
|
18
|
+
uint64 auctionClosingSeconds;
|
|
19
|
+
/// @notice A reserve setter account has the rights to set a reserve for a round,
|
|
20
|
+
/// however they cannot do this within a reserve blackout period.
|
|
21
|
+
/// The blackout period starts at RoundDuration - AuctionClosingSeconds - ReserveSubmissionSeconds,
|
|
22
|
+
/// and ends when the auction round is resolved, or the round ends.
|
|
23
|
+
uint64 reserveSubmissionSeconds;
|
|
24
|
+
}
|
|
25
|
+
|
|
26
|
+
library RoundTimingInfoLib {
|
|
27
|
+
/// @dev Using signed offset involves a lot of casting when comparing the to the block timestamp
|
|
28
|
+
/// so we provide a helper method here
|
|
29
|
+
function blockTimestampBeforeOffset(int64 offsetTimestamp) private view returns (bool) {
|
|
30
|
+
return int64(uint64(block.timestamp)) < offsetTimestamp;
|
|
31
|
+
}
|
|
32
|
+
|
|
33
|
+
/// @dev Using signed offset involves a lot of casting when comparing the to the block timestamp
|
|
34
|
+
/// so we provide a helper method here
|
|
35
|
+
/// Notice! this helper method should not be used before checking that the offset is less than the timestamp
|
|
36
|
+
function unsignedSinceTimestamp(int64 offsetTimestamp) private view returns (uint64) {
|
|
37
|
+
return uint64(int64(uint64(block.timestamp)) - offsetTimestamp);
|
|
38
|
+
}
|
|
39
|
+
|
|
40
|
+
/// @notice The current round, given the current timestamp, the offset and the round duration
|
|
41
|
+
function currentRound(RoundTimingInfo memory info) internal view returns (uint64) {
|
|
42
|
+
if (blockTimestampBeforeOffset(info.offsetTimestamp)) {
|
|
43
|
+
return 0;
|
|
44
|
+
}
|
|
45
|
+
|
|
46
|
+
return (unsignedSinceTimestamp(info.offsetTimestamp)) / info.roundDurationSeconds;
|
|
47
|
+
}
|
|
48
|
+
|
|
49
|
+
/// @notice Has the current auction round closed
|
|
50
|
+
function isAuctionRoundClosed(RoundTimingInfo memory info) internal view returns (bool) {
|
|
51
|
+
if (blockTimestampBeforeOffset(info.offsetTimestamp)) {
|
|
52
|
+
return false;
|
|
53
|
+
}
|
|
54
|
+
|
|
55
|
+
uint64 timeSinceOffset = unsignedSinceTimestamp(info.offsetTimestamp);
|
|
56
|
+
uint64 timeInRound = timeSinceOffset % info.roundDurationSeconds;
|
|
57
|
+
// round closes at AuctionClosedSeconds before the end of the round
|
|
58
|
+
return timeInRound >= info.roundDurationSeconds - info.auctionClosingSeconds;
|
|
59
|
+
}
|
|
60
|
+
|
|
61
|
+
/// @notice The reserve cannot be set during the blackout period
|
|
62
|
+
/// This period runs from ReserveSubmissionSeconds before the auction closes and ends when the round resolves, or when the round ends.
|
|
63
|
+
/// @param info Round timing info
|
|
64
|
+
/// @param latestResolvedRound The last auction round number that was resolved
|
|
65
|
+
function isReserveBlackout(RoundTimingInfo memory info, uint64 latestResolvedRound)
|
|
66
|
+
internal
|
|
67
|
+
view
|
|
68
|
+
returns (bool)
|
|
69
|
+
{
|
|
70
|
+
if (blockTimestampBeforeOffset(info.offsetTimestamp)) {
|
|
71
|
+
// no rounds have started, can't be in blackout
|
|
72
|
+
return false;
|
|
73
|
+
}
|
|
74
|
+
|
|
75
|
+
// if we're in round r, we are selling the rights for r+1
|
|
76
|
+
// if the latest round is r+1 that means we've already resolved the auction in r
|
|
77
|
+
// so we are no longer in the blackout period
|
|
78
|
+
uint64 curRound = currentRound(info);
|
|
79
|
+
if (latestResolvedRound >= curRound + 1) {
|
|
80
|
+
return false;
|
|
81
|
+
}
|
|
82
|
+
|
|
83
|
+
// the round in question hasnt been resolved
|
|
84
|
+
// therefore if we're within ReserveSubmissionSeconds of the auction close then we're in blackout
|
|
85
|
+
// otherwise we're not
|
|
86
|
+
uint64 timeSinceOffset = unsignedSinceTimestamp(info.offsetTimestamp);
|
|
87
|
+
uint64 timeInRound = timeSinceOffset % info.roundDurationSeconds;
|
|
88
|
+
return
|
|
89
|
+
timeInRound >=
|
|
90
|
+
(info.roundDurationSeconds -
|
|
91
|
+
info.auctionClosingSeconds -
|
|
92
|
+
info.reserveSubmissionSeconds);
|
|
93
|
+
}
|
|
94
|
+
|
|
95
|
+
/// @notice Gets the start and end timestamps (seconds) of a specified round
|
|
96
|
+
/// Since it is possible to set a negative offset, the start and end time may also be negative
|
|
97
|
+
/// In this case requesting roundTimestamps will revert.
|
|
98
|
+
/// @param info Round timing info
|
|
99
|
+
/// @param round The specified round
|
|
100
|
+
/// @return The timestamp at which the round starts
|
|
101
|
+
/// @return The timestamp at which the round ends
|
|
102
|
+
function roundTimestamps(RoundTimingInfo memory info, uint64 round)
|
|
103
|
+
internal
|
|
104
|
+
pure
|
|
105
|
+
returns (uint64, uint64)
|
|
106
|
+
{
|
|
107
|
+
int64 intRoundStart = info.offsetTimestamp + int64(info.roundDurationSeconds * round);
|
|
108
|
+
if (intRoundStart < 0) {
|
|
109
|
+
revert NegativeRoundStart(intRoundStart);
|
|
110
|
+
}
|
|
111
|
+
uint64 roundStart = uint64(intRoundStart);
|
|
112
|
+
uint64 roundEnd = roundStart + info.roundDurationSeconds - 1;
|
|
113
|
+
return (roundStart, roundEnd);
|
|
114
|
+
}
|
|
115
|
+
}
|
|
@@ -10,6 +10,8 @@ import {BadSequencerMessageNumber} from "../libraries/Error.sol";
|
|
|
10
10
|
import "../bridge/Bridge.sol";
|
|
11
11
|
|
|
12
12
|
contract BridgeUnproxied is Bridge {
|
|
13
|
+
uint256 public DUMMYVAR = 0; // This is a dummy variable to disambiguous with the Bridge contract
|
|
14
|
+
|
|
13
15
|
constructor() {
|
|
14
16
|
_activeOutbox = EMPTY_ACTIVEOUTBOX;
|
|
15
17
|
rollup = IOwnable(msg.sender);
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
// Copyright 2024, Offchain Labs, Inc.
|
|
2
|
+
// For license information, see https://github.com/nitro/blob/master/LICENSE
|
|
3
|
+
// SPDX-License-Identifier: BUSL-1.1
|
|
4
|
+
|
|
5
|
+
pragma solidity ^0.8.0;
|
|
6
|
+
|
|
7
|
+
/*
|
|
8
|
+
* This contract is the solidity equivalent of the stylus create test contract.
|
|
9
|
+
*/
|
|
10
|
+
contract CreateTest {
|
|
11
|
+
// solhint-disable no-complex-fallback
|
|
12
|
+
// solhint-disable reason-string
|
|
13
|
+
// solhint-disable avoid-low-level-calls
|
|
14
|
+
// solhint-disable-next-line prettier/prettier
|
|
15
|
+
fallback(bytes calldata input) external returns (bytes memory) {
|
|
16
|
+
uint8 kind = uint8(input[0]);
|
|
17
|
+
input = input[1:];
|
|
18
|
+
|
|
19
|
+
bytes32 endowment = bytes32(input[:32]);
|
|
20
|
+
input = input[32:];
|
|
21
|
+
|
|
22
|
+
address addr;
|
|
23
|
+
|
|
24
|
+
if (kind == 2) {
|
|
25
|
+
bytes32 salt = bytes32(input[:32]);
|
|
26
|
+
input = input[32:];
|
|
27
|
+
bytes memory code = input;
|
|
28
|
+
assembly {
|
|
29
|
+
addr := create2(endowment, add(code, 32), mload(code), salt)
|
|
30
|
+
}
|
|
31
|
+
} else {
|
|
32
|
+
bytes memory code = input;
|
|
33
|
+
assembly {
|
|
34
|
+
addr := create(endowment, add(code, 32), mload(code))
|
|
35
|
+
}
|
|
36
|
+
}
|
|
37
|
+
if (addr == address(0)) {
|
|
38
|
+
revert("failed to create");
|
|
39
|
+
}
|
|
40
|
+
return addr.code;
|
|
41
|
+
}
|
|
42
|
+
}
|