Overview
ETH Balance
0 ETH
ETH Value
$0.00More Info
Private Name Tags
ContractCreator
Loading...
Loading
This contract may be a proxy contract. Click on More Options and select Is this a proxy? to confirm and enable the "Read as Proxy" & "Write as Proxy" tabs.
Contract Name:
OptimismBridgeExecutor
Compiler Version
v0.8.10+commit.fc410830
Optimization Enabled:
Yes with 200 runs
Other Settings:
default evmVersion
Contract Source Code (Solidity Standard Json-Input format)
// SPDX-License-Identifier: AGPL-3.0 pragma solidity 0.8.10; import {ICrossDomainMessenger} from '../dependencies/optimism/interfaces/ICrossDomainMessenger.sol'; import {L2BridgeExecutor} from './L2BridgeExecutor.sol'; /** * @title OptimismBridgeExecutor * @author Aave * @notice Implementation of the Optimism Bridge Executor, able to receive cross-chain transactions from Ethereum * @dev Queuing an ActionsSet into this Executor can only be done by the Optimism L2 Cross Domain Messenger and having * the EthereumGovernanceExecutor as xDomainMessageSender */ contract OptimismBridgeExecutor is L2BridgeExecutor { // Address of the Optimism L2 Cross Domain Messenger, in charge of redirecting cross-chain transactions in L2 address public immutable OVM_L2_CROSS_DOMAIN_MESSENGER; /// @inheritdoc L2BridgeExecutor modifier onlyEthereumGovernanceExecutor() override { if ( msg.sender != OVM_L2_CROSS_DOMAIN_MESSENGER || ICrossDomainMessenger(OVM_L2_CROSS_DOMAIN_MESSENGER).xDomainMessageSender() != _ethereumGovernanceExecutor ) revert UnauthorizedEthereumExecutor(); _; } /** * @dev Constructor * * @param ovmL2CrossDomainMessenger The address of the Optimism L2CrossDomainMessenger * @param ethereumGovernanceExecutor The address of the EthereumGovernanceExecutor * @param delay The delay before which an actions set can be executed * @param gracePeriod The time period after a delay during which an actions set can be executed * @param minimumDelay The minimum bound a delay can be set to * @param maximumDelay The maximum bound a delay can be set to * @param guardian The address of the guardian, which can cancel queued proposals (can be zero) */ constructor( address ovmL2CrossDomainMessenger, address ethereumGovernanceExecutor, uint256 delay, uint256 gracePeriod, uint256 minimumDelay, uint256 maximumDelay, address guardian ) L2BridgeExecutor( ethereumGovernanceExecutor, delay, gracePeriod, minimumDelay, maximumDelay, guardian ) { OVM_L2_CROSS_DOMAIN_MESSENGER = ovmL2CrossDomainMessenger; } }
// SPDX-License-Identifier: AGPL-3.0 pragma solidity 0.8.10; import {IExecutorBase} from '../interfaces/IExecutorBase.sol'; /** * @title BridgeExecutorBase * @author Aave * @notice Abstract contract that implements basic executor functionality * @dev It does not implement an external `queue` function. This should instead be done in the inheriting * contract with proper access control */ abstract contract BridgeExecutorBase is IExecutorBase { // Minimum allowed grace period, which reduces the risk of having an actions set expire due to network congestion uint256 constant MINIMUM_GRACE_PERIOD = 10 minutes; // Time between queuing and execution uint256 private _delay; // Time after the execution time during which the actions set can be executed uint256 private _gracePeriod; // Minimum allowed delay uint256 private _minimumDelay; // Maximum allowed delay uint256 private _maximumDelay; // Address with the ability of canceling actions sets address private _guardian; // Number of actions sets uint256 private _actionsSetCounter; // Map of registered actions sets (id => ActionsSet) mapping(uint256 => ActionsSet) private _actionsSets; // Map of queued actions (actionHash => isQueued) mapping(bytes32 => bool) private _queuedActions; /** * @dev Only guardian can call functions marked by this modifier. **/ modifier onlyGuardian() { if (msg.sender != _guardian) revert NotGuardian(); _; } /** * @dev Only this contract can call functions marked by this modifier. **/ modifier onlyThis() { if (msg.sender != address(this)) revert OnlyCallableByThis(); _; } /** * @dev Constructor * * @param delay The delay before which an actions set can be executed * @param gracePeriod The time period after a delay during which an actions set can be executed * @param minimumDelay The minimum bound a delay can be set to * @param maximumDelay The maximum bound a delay can be set to * @param guardian The address of the guardian, which can cancel queued proposals (can be zero) */ constructor( uint256 delay, uint256 gracePeriod, uint256 minimumDelay, uint256 maximumDelay, address guardian ) { if ( gracePeriod < MINIMUM_GRACE_PERIOD || minimumDelay >= maximumDelay || delay < minimumDelay || delay > maximumDelay ) revert InvalidInitParams(); _updateDelay(delay); _updateGracePeriod(gracePeriod); _updateMinimumDelay(minimumDelay); _updateMaximumDelay(maximumDelay); _updateGuardian(guardian); } /// @inheritdoc IExecutorBase function execute(uint256 actionsSetId) external payable override { if (getCurrentState(actionsSetId) != ActionsSetState.Queued) revert OnlyQueuedActions(); ActionsSet storage actionsSet = _actionsSets[actionsSetId]; if (block.timestamp < actionsSet.executionTime) revert TimelockNotFinished(); actionsSet.executed = true; uint256 actionCount = actionsSet.targets.length; bytes[] memory returnedData = new bytes[](actionCount); for (uint256 i = 0; i < actionCount; ) { returnedData[i] = _executeTransaction( actionsSet.targets[i], actionsSet.values[i], actionsSet.signatures[i], actionsSet.calldatas[i], actionsSet.executionTime, actionsSet.withDelegatecalls[i] ); unchecked { ++i; } } emit ActionsSetExecuted(actionsSetId, msg.sender, returnedData); } /// @inheritdoc IExecutorBase function cancel(uint256 actionsSetId) external override onlyGuardian { if (getCurrentState(actionsSetId) != ActionsSetState.Queued) revert OnlyQueuedActions(); ActionsSet storage actionsSet = _actionsSets[actionsSetId]; actionsSet.canceled = true; uint256 targetsLength = actionsSet.targets.length; for (uint256 i = 0; i < targetsLength; ) { _cancelTransaction( actionsSet.targets[i], actionsSet.values[i], actionsSet.signatures[i], actionsSet.calldatas[i], actionsSet.executionTime, actionsSet.withDelegatecalls[i] ); unchecked { ++i; } } emit ActionsSetCanceled(actionsSetId); } /// @inheritdoc IExecutorBase function updateGuardian(address guardian) external override onlyThis { _updateGuardian(guardian); } /// @inheritdoc IExecutorBase function updateDelay(uint256 delay) external override onlyThis { _validateDelay(delay); _updateDelay(delay); } /// @inheritdoc IExecutorBase function updateGracePeriod(uint256 gracePeriod) external override onlyThis { if (gracePeriod < MINIMUM_GRACE_PERIOD) revert GracePeriodTooShort(); _updateGracePeriod(gracePeriod); } /// @inheritdoc IExecutorBase function updateMinimumDelay(uint256 minimumDelay) external override onlyThis { if (minimumDelay >= _maximumDelay) revert MinimumDelayTooLong(); _updateMinimumDelay(minimumDelay); _validateDelay(_delay); } /// @inheritdoc IExecutorBase function updateMaximumDelay(uint256 maximumDelay) external override onlyThis { if (maximumDelay <= _minimumDelay) revert MaximumDelayTooShort(); _updateMaximumDelay(maximumDelay); _validateDelay(_delay); } /// @inheritdoc IExecutorBase function executeDelegateCall(address target, bytes calldata data) external payable override onlyThis returns (bool, bytes memory) { bool success; bytes memory resultData; // solium-disable-next-line security/no-call-value (success, resultData) = target.delegatecall(data); return (success, resultData); } /// @inheritdoc IExecutorBase function receiveFunds() external payable override {} /// @inheritdoc IExecutorBase function getDelay() external view override returns (uint256) { return _delay; } /// @inheritdoc IExecutorBase function getGracePeriod() external view override returns (uint256) { return _gracePeriod; } /// @inheritdoc IExecutorBase function getMinimumDelay() external view override returns (uint256) { return _minimumDelay; } /// @inheritdoc IExecutorBase function getMaximumDelay() external view override returns (uint256) { return _maximumDelay; } /// @inheritdoc IExecutorBase function getGuardian() external view override returns (address) { return _guardian; } /// @inheritdoc IExecutorBase function getActionsSetCount() external view override returns (uint256) { return _actionsSetCounter; } /// @inheritdoc IExecutorBase function getActionsSetById(uint256 actionsSetId) external view override returns (ActionsSet memory) { return _actionsSets[actionsSetId]; } /// @inheritdoc IExecutorBase function getCurrentState(uint256 actionsSetId) public view override returns (ActionsSetState) { if (_actionsSetCounter <= actionsSetId) revert InvalidActionsSetId(); ActionsSet storage actionsSet = _actionsSets[actionsSetId]; if (actionsSet.canceled) { return ActionsSetState.Canceled; } else if (actionsSet.executed) { return ActionsSetState.Executed; } else if (block.timestamp > actionsSet.executionTime + _gracePeriod) { return ActionsSetState.Expired; } else { return ActionsSetState.Queued; } } /// @inheritdoc IExecutorBase function isActionQueued(bytes32 actionHash) public view override returns (bool) { return _queuedActions[actionHash]; } function _updateGuardian(address guardian) internal { emit GuardianUpdate(_guardian, guardian); _guardian = guardian; } function _updateDelay(uint256 delay) internal { emit DelayUpdate(_delay, delay); _delay = delay; } function _updateGracePeriod(uint256 gracePeriod) internal { emit GracePeriodUpdate(_gracePeriod, gracePeriod); _gracePeriod = gracePeriod; } function _updateMinimumDelay(uint256 minimumDelay) internal { emit MinimumDelayUpdate(_minimumDelay, minimumDelay); _minimumDelay = minimumDelay; } function _updateMaximumDelay(uint256 maximumDelay) internal { emit MaximumDelayUpdate(_maximumDelay, maximumDelay); _maximumDelay = maximumDelay; } /** * @notice Queue an ActionsSet * @dev If a signature is empty, calldata is used for the execution, calldata is appended to signature otherwise * @param targets Array of targets to be called by the actions set * @param values Array of values to pass in each call by the actions set * @param signatures Array of function signatures to encode in each call (can be empty) * @param calldatas Array of calldata to pass in each call (can be empty) * @param withDelegatecalls Array of whether to delegatecall for each call **/ function _queue( address[] memory targets, uint256[] memory values, string[] memory signatures, bytes[] memory calldatas, bool[] memory withDelegatecalls ) internal { if (targets.length == 0) revert EmptyTargets(); uint256 targetsLength = targets.length; if ( targetsLength != values.length || targetsLength != signatures.length || targetsLength != calldatas.length || targetsLength != withDelegatecalls.length ) revert InconsistentParamsLength(); uint256 actionsSetId = _actionsSetCounter; uint256 executionTime = block.timestamp + _delay; unchecked { ++_actionsSetCounter; } for (uint256 i = 0; i < targetsLength; ) { bytes32 actionHash = keccak256( abi.encode( targets[i], values[i], signatures[i], calldatas[i], executionTime, withDelegatecalls[i] ) ); if (isActionQueued(actionHash)) revert DuplicateAction(); _queuedActions[actionHash] = true; unchecked { ++i; } } ActionsSet storage actionsSet = _actionsSets[actionsSetId]; actionsSet.targets = targets; actionsSet.values = values; actionsSet.signatures = signatures; actionsSet.calldatas = calldatas; actionsSet.withDelegatecalls = withDelegatecalls; actionsSet.executionTime = executionTime; emit ActionsSetQueued( actionsSetId, targets, values, signatures, calldatas, withDelegatecalls, executionTime ); } function _executeTransaction( address target, uint256 value, string memory signature, bytes memory data, uint256 executionTime, bool withDelegatecall ) internal returns (bytes memory) { if (address(this).balance < value) revert InsufficientBalance(); bytes32 actionHash = keccak256( abi.encode(target, value, signature, data, executionTime, withDelegatecall) ); _queuedActions[actionHash] = false; bytes memory callData; if (bytes(signature).length == 0) { callData = data; } else { callData = abi.encodePacked(bytes4(keccak256(bytes(signature))), data); } bool success; bytes memory resultData; if (withDelegatecall) { (success, resultData) = this.executeDelegateCall{value: value}(target, callData); } else { // solium-disable-next-line security/no-call-value (success, resultData) = target.call{value: value}(callData); } return _verifyCallResult(success, resultData); } function _cancelTransaction( address target, uint256 value, string memory signature, bytes memory data, uint256 executionTime, bool withDelegatecall ) internal { bytes32 actionHash = keccak256( abi.encode(target, value, signature, data, executionTime, withDelegatecall) ); _queuedActions[actionHash] = false; } function _validateDelay(uint256 delay) internal view { if (delay < _minimumDelay) revert DelayShorterThanMin(); if (delay > _maximumDelay) revert DelayLongerThanMax(); } function _verifyCallResult(bool success, bytes memory returnData) private pure returns (bytes memory) { if (success) { return returnData; } else { // Look for revert reason and bubble it up if present if (returnData.length > 0) { // The easiest way to bubble the revert reason is using memory via assembly // solhint-disable-next-line no-inline-assembly assembly { let returndata_size := mload(returnData) revert(add(32, returnData), returndata_size) } } else { revert FailedActionExecution(); } } } }
// SPDX-License-Identifier: AGPL-3.0 pragma solidity 0.8.10; import {IL2BridgeExecutor} from '../interfaces/IL2BridgeExecutor.sol'; import {BridgeExecutorBase} from './BridgeExecutorBase.sol'; /** * @title L2BridgeExecutor * @author Aave * @notice Abstract contract that implements bridge executor functionality for L2 * @dev It does not implement the `onlyEthereumGovernanceExecutor` modifier. This should instead be done in the inheriting * contract with proper configuration and adjustments depending on the L2 */ abstract contract L2BridgeExecutor is BridgeExecutorBase, IL2BridgeExecutor { // Address of the Ethereum Governance Executor, which should be able to queue actions sets address internal _ethereumGovernanceExecutor; /** * @dev Only the Ethereum Governance Executor should be able to call functions marked by this modifier. **/ modifier onlyEthereumGovernanceExecutor() virtual; /** * @dev Constructor * * @param ethereumGovernanceExecutor The address of the EthereumGovernanceExecutor * @param delay The delay before which an actions set can be executed * @param gracePeriod The time period after a delay during which an actions set can be executed * @param minimumDelay The minimum bound a delay can be set to * @param maximumDelay The maximum bound a delay can be set to * @param guardian The address of the guardian, which can cancel queued proposals (can be zero) */ constructor( address ethereumGovernanceExecutor, uint256 delay, uint256 gracePeriod, uint256 minimumDelay, uint256 maximumDelay, address guardian ) BridgeExecutorBase(delay, gracePeriod, minimumDelay, maximumDelay, guardian) { _ethereumGovernanceExecutor = ethereumGovernanceExecutor; } /// @inheritdoc IL2BridgeExecutor function queue( address[] memory targets, uint256[] memory values, string[] memory signatures, bytes[] memory calldatas, bool[] memory withDelegatecalls ) external onlyEthereumGovernanceExecutor { _queue(targets, values, signatures, calldatas, withDelegatecalls); } /// @inheritdoc IL2BridgeExecutor function updateEthereumGovernanceExecutor(address ethereumGovernanceExecutor) external onlyThis { emit EthereumGovernanceExecutorUpdate(_ethereumGovernanceExecutor, ethereumGovernanceExecutor); _ethereumGovernanceExecutor = ethereumGovernanceExecutor; } /// @inheritdoc IL2BridgeExecutor function getEthereumGovernanceExecutor() external view returns (address) { return _ethereumGovernanceExecutor; } }
// SPDX-License-Identifier: MIT pragma solidity >0.5.0 <0.9.0; /** * @title ICrossDomainMessenger */ interface ICrossDomainMessenger { /********** * Events * **********/ event SentMessage( address indexed target, address sender, bytes message, uint256 messageNonce, uint256 gasLimit ); event RelayedMessage(bytes32 indexed msgHash); event FailedRelayedMessage(bytes32 indexed msgHash); /************* * Variables * *************/ function xDomainMessageSender() external view returns (address); /******************** * Public Functions * ********************/ /** * Sends a cross domain message to the target messenger. * @param _target Target contract address. * @param _message Message to send to the target. * @param _gasLimit Gas limit for the provided message. */ function sendMessage( address _target, bytes calldata _message, uint32 _gasLimit ) external; }
// SPDX-License-Identifier: AGPL-3.0 pragma solidity 0.8.10; /** * @title IExecutorBase * @author Aave * @notice Defines the basic interface for the ExecutorBase abstract contract */ interface IExecutorBase { error InvalidInitParams(); error NotGuardian(); error OnlyCallableByThis(); error MinimumDelayTooLong(); error MaximumDelayTooShort(); error GracePeriodTooShort(); error DelayShorterThanMin(); error DelayLongerThanMax(); error OnlyQueuedActions(); error TimelockNotFinished(); error InvalidActionsSetId(); error EmptyTargets(); error InconsistentParamsLength(); error DuplicateAction(); error InsufficientBalance(); error FailedActionExecution(); /** * @notice This enum contains all possible actions set states */ enum ActionsSetState { Queued, Executed, Canceled, Expired } /** * @notice This struct contains the data needed to execute a specified set of actions * @param targets Array of targets to call * @param values Array of values to pass in each call * @param signatures Array of function signatures to encode in each call (can be empty) * @param calldatas Array of calldatas to pass in each call, appended to the signature at the same array index if not empty * @param withDelegateCalls Array of whether to delegatecall for each call * @param executionTime Timestamp starting from which the actions set can be executed * @param executed True if the actions set has been executed, false otherwise * @param canceled True if the actions set has been canceled, false otherwise */ struct ActionsSet { address[] targets; uint256[] values; string[] signatures; bytes[] calldatas; bool[] withDelegatecalls; uint256 executionTime; bool executed; bool canceled; } /** * @dev Emitted when an ActionsSet is queued * @param id Id of the ActionsSet * @param targets Array of targets to be called by the actions set * @param values Array of values to pass in each call by the actions set * @param signatures Array of function signatures to encode in each call by the actions set * @param calldatas Array of calldata to pass in each call by the actions set * @param withDelegatecalls Array of whether to delegatecall for each call of the actions set * @param executionTime The timestamp at which this actions set can be executed **/ event ActionsSetQueued( uint256 indexed id, address[] targets, uint256[] values, string[] signatures, bytes[] calldatas, bool[] withDelegatecalls, uint256 executionTime ); /** * @dev Emitted when an ActionsSet is successfully executed * @param id Id of the ActionsSet * @param initiatorExecution The address that triggered the ActionsSet execution * @param returnedData The returned data from the ActionsSet execution **/ event ActionsSetExecuted( uint256 indexed id, address indexed initiatorExecution, bytes[] returnedData ); /** * @dev Emitted when an ActionsSet is cancelled by the guardian * @param id Id of the ActionsSet **/ event ActionsSetCanceled(uint256 indexed id); /** * @dev Emitted when a new guardian is set * @param oldGuardian The address of the old guardian * @param newGuardian The address of the new guardian **/ event GuardianUpdate(address oldGuardian, address newGuardian); /** * @dev Emitted when the delay (between queueing and execution) is updated * @param oldDelay The value of the old delay * @param newDelay The value of the new delay **/ event DelayUpdate(uint256 oldDelay, uint256 newDelay); /** * @dev Emitted when the grace period (between executionTime and expiration) is updated * @param oldGracePeriod The value of the old grace period * @param newGracePeriod The value of the new grace period **/ event GracePeriodUpdate(uint256 oldGracePeriod, uint256 newGracePeriod); /** * @dev Emitted when the minimum delay (lower bound of delay) is updated * @param oldMinimumDelay The value of the old minimum delay * @param newMinimumDelay The value of the new minimum delay **/ event MinimumDelayUpdate(uint256 oldMinimumDelay, uint256 newMinimumDelay); /** * @dev Emitted when the maximum delay (upper bound of delay)is updated * @param oldMaximumDelay The value of the old maximum delay * @param newMaximumDelay The value of the new maximum delay **/ event MaximumDelayUpdate(uint256 oldMaximumDelay, uint256 newMaximumDelay); /** * @notice Execute the ActionsSet * @param actionsSetId The id of the ActionsSet to execute **/ function execute(uint256 actionsSetId) external payable; /** * @notice Cancel the ActionsSet * @param actionsSetId The id of the ActionsSet to cancel **/ function cancel(uint256 actionsSetId) external; /** * @notice Update guardian * @param guardian The address of the new guardian **/ function updateGuardian(address guardian) external; /** * @notice Update the delay, time between queueing and execution of ActionsSet * @dev It does not affect to actions set that are already queued * @param delay The value of the delay (in seconds) **/ function updateDelay(uint256 delay) external; /** * @notice Update the grace period, the period after the execution time during which an actions set can be executed * @param gracePeriod The value of the grace period (in seconds) **/ function updateGracePeriod(uint256 gracePeriod) external; /** * @notice Update the minimum allowed delay * @param minimumDelay The value of the minimum delay (in seconds) **/ function updateMinimumDelay(uint256 minimumDelay) external; /** * @notice Update the maximum allowed delay * @param maximumDelay The maximum delay (in seconds) **/ function updateMaximumDelay(uint256 maximumDelay) external; /** * @notice Allows to delegatecall a given target with an specific amount of value * @dev This function is external so it allows to specify a defined msg.value for the delegate call, reducing * the risk that a delegatecall gets executed with more value than intended * @return True if the delegate call was successful, false otherwise * @return The bytes returned by the delegate call **/ function executeDelegateCall(address target, bytes calldata data) external payable returns (bool, bytes memory); /** * @notice Allows to receive funds into the executor * @dev Useful for actionsSet that needs funds to gets executed */ function receiveFunds() external payable; /** * @notice Returns the delay (between queuing and execution) * @return The value of the delay (in seconds) **/ function getDelay() external view returns (uint256); /** * @notice Returns the grace period * @return The value of the grace period (in seconds) **/ function getGracePeriod() external view returns (uint256); /** * @notice Returns the minimum delay * @return The value of the minimum delay (in seconds) **/ function getMinimumDelay() external view returns (uint256); /** * @notice Returns the maximum delay * @return The value of the maximum delay (in seconds) **/ function getMaximumDelay() external view returns (uint256); /** * @notice Returns the address of the guardian * @return The address of the guardian **/ function getGuardian() external view returns (address); /** * @notice Returns the total number of actions sets of the executor * @return The number of actions sets **/ function getActionsSetCount() external view returns (uint256); /** * @notice Returns the data of an actions set * @param actionsSetId The id of the ActionsSet * @return The data of the ActionsSet **/ function getActionsSetById(uint256 actionsSetId) external view returns (ActionsSet memory); /** * @notice Returns the current state of an actions set * @param actionsSetId The id of the ActionsSet * @return The current state of theI ActionsSet **/ function getCurrentState(uint256 actionsSetId) external view returns (ActionsSetState); /** * @notice Returns whether an actions set (by actionHash) is queued * @dev actionHash = keccak256(abi.encode(target, value, signature, data, executionTime, withDelegatecall)) * @param actionHash hash of the action to be checked * @return True if the underlying action of actionHash is queued, false otherwise **/ function isActionQueued(bytes32 actionHash) external view returns (bool); }
// SPDX-License-Identifier: AGPL-3.0 pragma solidity 0.8.10; /** * @title IL2BridgeExecutorBase * @author Aave * @notice Defines the basic interface for the L2BridgeExecutor abstract contract */ interface IL2BridgeExecutor { error UnauthorizedEthereumExecutor(); /** * @dev Emitted when the Ethereum Governance Executor is updated * @param oldEthereumGovernanceExecutor The address of the old EthereumGovernanceExecutor * @param newEthereumGovernanceExecutor The address of the new EthereumGovernanceExecutor **/ event EthereumGovernanceExecutorUpdate( address oldEthereumGovernanceExecutor, address newEthereumGovernanceExecutor ); /** * @notice Queue an ActionsSet * @dev If a signature is empty, calldata is used for the execution, calldata is appended to signature otherwise * @param targets Array of targets to be called by the actions set * @param values Array of values to pass in each call by the actions set * @param signatures Array of function signatures to encode in each call by the actions (can be empty) * @param calldatas Array of calldata to pass in each call by the actions set * @param withDelegatecalls Array of whether to delegatecall for each call of the actions set **/ function queue( address[] memory targets, uint256[] memory values, string[] memory signatures, bytes[] memory calldatas, bool[] memory withDelegatecalls ) external; /** * @notice Update the address of the Ethereum Governance Executor * @param ethereumGovernanceExecutor The address of the new EthereumGovernanceExecutor **/ function updateEthereumGovernanceExecutor(address ethereumGovernanceExecutor) external; /** * @notice Returns the address of the Ethereum Governance Executor * @return The address of the EthereumGovernanceExecutor **/ function getEthereumGovernanceExecutor() external view returns (address); }
{ "optimizer": { "enabled": true, "runs": 200 }, "outputSelection": { "*": { "*": [ "evm.bytecode", "evm.deployedBytecode", "devdoc", "userdoc", "metadata", "abi" ] } }, "metadata": { "useLiteralContent": true }, "libraries": {} }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
Contract ABI
API[{"inputs":[{"internalType":"address","name":"ovmL2CrossDomainMessenger","type":"address"},{"internalType":"address","name":"ethereumGovernanceExecutor","type":"address"},{"internalType":"uint256","name":"delay","type":"uint256"},{"internalType":"uint256","name":"gracePeriod","type":"uint256"},{"internalType":"uint256","name":"minimumDelay","type":"uint256"},{"internalType":"uint256","name":"maximumDelay","type":"uint256"},{"internalType":"address","name":"guardian","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"inputs":[],"name":"DelayLongerThanMax","type":"error"},{"inputs":[],"name":"DelayShorterThanMin","type":"error"},{"inputs":[],"name":"DuplicateAction","type":"error"},{"inputs":[],"name":"EmptyTargets","type":"error"},{"inputs":[],"name":"FailedActionExecution","type":"error"},{"inputs":[],"name":"GracePeriodTooShort","type":"error"},{"inputs":[],"name":"InconsistentParamsLength","type":"error"},{"inputs":[],"name":"InsufficientBalance","type":"error"},{"inputs":[],"name":"InvalidActionsSetId","type":"error"},{"inputs":[],"name":"InvalidInitParams","type":"error"},{"inputs":[],"name":"MaximumDelayTooShort","type":"error"},{"inputs":[],"name":"MinimumDelayTooLong","type":"error"},{"inputs":[],"name":"NotGuardian","type":"error"},{"inputs":[],"name":"OnlyCallableByThis","type":"error"},{"inputs":[],"name":"OnlyQueuedActions","type":"error"},{"inputs":[],"name":"TimelockNotFinished","type":"error"},{"inputs":[],"name":"UnauthorizedEthereumExecutor","type":"error"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint256","name":"id","type":"uint256"}],"name":"ActionsSetCanceled","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint256","name":"id","type":"uint256"},{"indexed":true,"internalType":"address","name":"initiatorExecution","type":"address"},{"indexed":false,"internalType":"bytes[]","name":"returnedData","type":"bytes[]"}],"name":"ActionsSetExecuted","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint256","name":"id","type":"uint256"},{"indexed":false,"internalType":"address[]","name":"targets","type":"address[]"},{"indexed":false,"internalType":"uint256[]","name":"values","type":"uint256[]"},{"indexed":false,"internalType":"string[]","name":"signatures","type":"string[]"},{"indexed":false,"internalType":"bytes[]","name":"calldatas","type":"bytes[]"},{"indexed":false,"internalType":"bool[]","name":"withDelegatecalls","type":"bool[]"},{"indexed":false,"internalType":"uint256","name":"executionTime","type":"uint256"}],"name":"ActionsSetQueued","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"oldDelay","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"newDelay","type":"uint256"}],"name":"DelayUpdate","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"oldEthereumGovernanceExecutor","type":"address"},{"indexed":false,"internalType":"address","name":"newEthereumGovernanceExecutor","type":"address"}],"name":"EthereumGovernanceExecutorUpdate","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"oldGracePeriod","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"newGracePeriod","type":"uint256"}],"name":"GracePeriodUpdate","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"oldGuardian","type":"address"},{"indexed":false,"internalType":"address","name":"newGuardian","type":"address"}],"name":"GuardianUpdate","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"oldMaximumDelay","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"newMaximumDelay","type":"uint256"}],"name":"MaximumDelayUpdate","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"oldMinimumDelay","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"newMinimumDelay","type":"uint256"}],"name":"MinimumDelayUpdate","type":"event"},{"inputs":[],"name":"OVM_L2_CROSS_DOMAIN_MESSENGER","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"actionsSetId","type":"uint256"}],"name":"cancel","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"actionsSetId","type":"uint256"}],"name":"execute","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"address","name":"target","type":"address"},{"internalType":"bytes","name":"data","type":"bytes"}],"name":"executeDelegateCall","outputs":[{"internalType":"bool","name":"","type":"bool"},{"internalType":"bytes","name":"","type":"bytes"}],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"uint256","name":"actionsSetId","type":"uint256"}],"name":"getActionsSetById","outputs":[{"components":[{"internalType":"address[]","name":"targets","type":"address[]"},{"internalType":"uint256[]","name":"values","type":"uint256[]"},{"internalType":"string[]","name":"signatures","type":"string[]"},{"internalType":"bytes[]","name":"calldatas","type":"bytes[]"},{"internalType":"bool[]","name":"withDelegatecalls","type":"bool[]"},{"internalType":"uint256","name":"executionTime","type":"uint256"},{"internalType":"bool","name":"executed","type":"bool"},{"internalType":"bool","name":"canceled","type":"bool"}],"internalType":"struct IExecutorBase.ActionsSet","name":"","type":"tuple"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getActionsSetCount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"actionsSetId","type":"uint256"}],"name":"getCurrentState","outputs":[{"internalType":"enum IExecutorBase.ActionsSetState","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getDelay","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getEthereumGovernanceExecutor","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getGracePeriod","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getGuardian","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getMaximumDelay","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getMinimumDelay","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes32","name":"actionHash","type":"bytes32"}],"name":"isActionQueued","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address[]","name":"targets","type":"address[]"},{"internalType":"uint256[]","name":"values","type":"uint256[]"},{"internalType":"string[]","name":"signatures","type":"string[]"},{"internalType":"bytes[]","name":"calldatas","type":"bytes[]"},{"internalType":"bool[]","name":"withDelegatecalls","type":"bool[]"}],"name":"queue","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"receiveFunds","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"uint256","name":"delay","type":"uint256"}],"name":"updateDelay","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"ethereumGovernanceExecutor","type":"address"}],"name":"updateEthereumGovernanceExecutor","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"gracePeriod","type":"uint256"}],"name":"updateGracePeriod","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"guardian","type":"address"}],"name":"updateGuardian","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"maximumDelay","type":"uint256"}],"name":"updateMaximumDelay","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"minimumDelay","type":"uint256"}],"name":"updateMinimumDelay","outputs":[],"stateMutability":"nonpayable","type":"function"}]
Contract Creation Code
60a06040523480156200001157600080fd5b50604051620027ec380380620027ec833981016040819052620000349162000280565b8585858585858484848484610258841080620000505750818310155b806200005b57508285105b806200006657508185115b156200008557604051630a5addd160e21b815260040160405180910390fd5b6200009085620000f6565b6200009b8462000137565b620000a68362000178565b620000b182620001b9565b620000bc81620001fa565b5050600880546001600160a01b0319166001600160a01b039a8b16179055505050509a90931660805250620002f198505050505050505050565b60005460408051918252602082018390527f43de56b886294fc29767e51a88b5c67fd24aefebc5ddf813b1d9b91b1df38444910160405180910390a1600055565b60015460408051918252602082018390527f9953f3a71052edcd4ae7a0f97302839d1dda32ab93c1039207c91c866b094f72910160405180910390a1600155565b60025460408051918252602082018390527fc534cdcbe9b52100810d787afd57e4174322776fcb58872ea706f23e9319fa8d910160405180910390a1600255565b60035460408051918252602082018390527faf46013422363beb5e6f00ab923cffe3574670494c864de2828b9d7c201fdde5910160405180910390a1600355565b600454604080516001600160a01b03928316815291831660208301527f85bd8788d3c4a160f0f6254229589f137d5633a870dcb46f99ffe07b4da1894b910160405180910390a1600480546001600160a01b0319166001600160a01b0392909216919091179055565b80516001600160a01b03811681146200027b57600080fd5b919050565b600080600080600080600060e0888a0312156200029c57600080fd5b620002a78862000263565b9650620002b76020890162000263565b955060408801519450606088015193506080880151925060a08801519150620002e360c0890162000263565b905092959891949750929550565b6080516124d16200031b6000396000818161021e01528181610c300152610c7901526124d16000f3fe6080604052600436106101345760003560e01c8063b3c82e92116100ab578063d9a4cbdf1161006f578063d9a4cbdf14610361578063dbd1838814610381578063e471b02614610396578063e68a5c3d146103b6578063fc525395146103d6578063fe0d94c1146103f657600080fd5b8063b3c82e92146102cb578063b68df16d146102f8578063c3a7688614610319578063cebc9a8214610337578063d89aac391461034c57600080fd5b80635ab98d5a116100fd5780635ab98d5a146101cc57806364d62353146101ec5780636a4df1df1461020c5780638533f33714610258578063a75b87d21461026d578063b1fc87961461028b57600080fd5b80625c33e11461013957806303c276211461013b578063083a73a21461015f57806340e58ee51461017f5780635748c1301461019f575b600080fd5b005b34801561014757600080fd5b506002545b6040519081526020015b60405180910390f35b34801561016b57600080fd5b5061013961017a366004611a8d565b610409565b34801561018b57600080fd5b5061013961019a366004611a8d565b610462565b3480156101ab57600080fd5b506101bf6101ba366004611a8d565b61070d565b6040516101569190611abc565b3480156101d857600080fd5b506101396101e7366004611a8d565b6107a3565b3480156101f857600080fd5b50610139610207366004611a8d565b6107ef565b34801561021857600080fd5b506102407f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b039091168152602001610156565b34801561026457600080fd5b5060055461014c565b34801561027957600080fd5b506004546001600160a01b0316610240565b34801561029757600080fd5b506102bb6102a6366004611a8d565b60009081526007602052604090205460ff1690565b6040519015158152602001610156565b3480156102d757600080fd5b506102eb6102e6366004611a8d565b610821565b6040516101569190611c3b565b61030b610306366004611d1c565b610b94565b604051610156929190611da1565b34801561032557600080fd5b506008546001600160a01b0316610240565b34801561034357600080fd5b5060005461014c565b34801561035857600080fd5b5060035461014c565b34801561036d57600080fd5b5061013961037c3660046120fb565b610c25565b34801561038d57600080fd5b5060015461014c565b3480156103a257600080fd5b506101396103b1366004611a8d565b610d26565b3480156103c257600080fd5b506101396103d13660046121cd565b610d71565b3480156103e257600080fd5b506101396103f13660046121cd565b610dfa565b610139610404366004611a8d565b610e23565b33301461042957604051631dbf5f2360e01b815260040160405180910390fd5b600254811161044b5760405163cb2f2b2360e01b815260040160405180910390fd5b6104548161114b565b61045f60005461118c565b50565b6004546001600160a01b0316331461048d576040516377b6878160e11b815260040160405180910390fd5b60006104988261070d565b60038111156104a9576104a9611aa6565b146104c75760405163050ac78b60e11b815260040160405180910390fd5b60008181526006602081905260408220908101805461ff001916610100179055805490915b818110156106dc576106d483600001828154811061050c5761050c6121f1565b6000918252602090912001546001850180546001600160a01b03909216918490811061053a5761053a6121f1565b906000526020600020015485600201848154811061055a5761055a6121f1565b90600052602060002001805461056f90612207565b80601f016020809104026020016040519081016040528092919081815260200182805461059b90612207565b80156105e85780601f106105bd576101008083540402835291602001916105e8565b820191906000526020600020905b8154815290600101906020018083116105cb57829003601f168201915b5050505050866003018581548110610602576106026121f1565b90600052602060002001805461061790612207565b80601f016020809104026020016040519081016040528092919081815260200182805461064390612207565b80156106905780601f1061066557610100808354040283529160200191610690565b820191906000526020600020905b81548152906001019060200180831161067357829003601f168201915b505050505087600501548860040187815481106106af576106af6121f1565b90600052602060002090602091828204019190069054906101000a900460ff166111d2565b6001016104ec565b5060405183907f0743c673685efcbf3db8591d9e1d98336bc844fe4f4599e6f7efb6d71c02563490600090a2505050565b600081600554116107315760405163e5bc0e7b60e01b815260040160405180910390fd5b600082815260066020819052604090912090810154610100900460ff161561075c5750600292915050565b600681015460ff16156107725750600192915050565b6001548160050154610784919061223c565b4211156107945750600392915050565b50600092915050565b50919050565b3330146107c357604051631dbf5f2360e01b815260040160405180910390fd5b6102588110156107e6576040516301f6f9e560e71b815260040160405180910390fd5b61045f81611224565b33301461080f57604051631dbf5f2360e01b815260040160405180910390fd5b6108188161118c565b61045f81611265565b61086d6040518061010001604052806060815260200160608152602001606081526020016060815260200160608152602001600081526020016000151581526020016000151581525090565b6000828152600660209081526040918290208251815461012093810282018401909452610100810184815290939192849284918401828280156108d957602002820191906000526020600020905b81546001600160a01b031681526001909101906020018083116108bb575b505050505081526020016001820180548060200260200160405190810160405280929190818152602001828054801561093157602002820191906000526020600020905b81548152602001906001019080831161091d575b5050505050815260200160028201805480602002602001604051908101604052809291908181526020016000905b82821015610a0b57838290600052602060002001805461097e90612207565b80601f01602080910402602001604051908101604052809291908181526020018280546109aa90612207565b80156109f75780601f106109cc576101008083540402835291602001916109f7565b820191906000526020600020905b8154815290600101906020018083116109da57829003601f168201915b50505050508152602001906001019061095f565b50505050815260200160038201805480602002602001604051908101604052809291908181526020016000905b82821015610ae4578382906000526020600020018054610a5790612207565b80601f0160208091040260200160405190810160405280929190818152602001828054610a8390612207565b8015610ad05780601f10610aa557610100808354040283529160200191610ad0565b820191906000526020600020905b815481529060010190602001808311610ab357829003601f168201915b505050505081526020019060010190610a38565b50505050815260200160048201805480602002602001604051908101604052809291908181526020018280548015610b5b57602002820191906000526020600020906000905b825461010083900a900460ff161515815260206001928301818104948501949093039092029101808411610b2a5790505b50505091835250506005820154602082015260069091015460ff8082161515604084015261010090910416151560609091015292915050565b60006060333014610bb857604051631dbf5f2360e01b815260040160405180910390fd5b60006060866001600160a01b03168686604051610bd6929190612262565b600060405180830381855af49150503d8060008114610c11576040519150601f19603f3d011682016040523d82523d6000602084013e610c16565b606091505b50909890975095505050505050565b336001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016141580610cf4575060085460408051636e296e4560e01b815290516001600160a01b03928316927f00000000000000000000000000000000000000000000000000000000000000001691636e296e459160048083019260209291908290030181865afa158015610cc4573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ce89190612272565b6001600160a01b031614155b15610d12576040516359e8359960e01b815260040160405180910390fd5b610d1f85858585856112a6565b5050505050565b333014610d4657604051631dbf5f2360e01b815260040160405180910390fd5b6003548110610d68576040516301b1029b60e61b815260040160405180910390fd5b61045481611513565b333014610d9157604051631dbf5f2360e01b815260040160405180910390fd5b600854604080516001600160a01b03928316815291831660208301527f01dd0ca50426f21c1b37ce7f3e95eef45b4a55bc5da80a7b67b2c65a7463caf0910160405180910390a1600880546001600160a01b0319166001600160a01b0392909216919091179055565b333014610e1a57604051631dbf5f2360e01b815260040160405180910390fd5b61045f81611554565b6000610e2e8261070d565b6003811115610e3f57610e3f611aa6565b14610e5d5760405163050ac78b60e11b815260040160405180910390fd5b60008181526006602052604090206005810154421015610e9057604051635192dd5560e01b815260040160405180910390fd5b60068101805460ff19166001179055805460008167ffffffffffffffff811115610ebc57610ebc611dc4565b604051908082528060200260200182016040528015610eef57816020015b6060815260200190600190039081610eda5790505b50905060005b82811015611102576110dd846000018281548110610f1557610f156121f1565b6000918252602090912001546001860180546001600160a01b039092169184908110610f4357610f436121f1565b9060005260206000200154866002018481548110610f6357610f636121f1565b906000526020600020018054610f7890612207565b80601f0160208091040260200160405190810160405280929190818152602001828054610fa490612207565b8015610ff15780601f10610fc657610100808354040283529160200191610ff1565b820191906000526020600020905b815481529060010190602001808311610fd457829003601f168201915b505050505087600301858154811061100b5761100b6121f1565b90600052602060002001805461102090612207565b80601f016020809104026020016040519081016040528092919081815260200182805461104c90612207565b80156110995780601f1061106e57610100808354040283529160200191611099565b820191906000526020600020905b81548152906001019060200180831161107c57829003601f168201915b505050505088600501548960040187815481106110b8576110b86121f1565b90600052602060002090602091828204019190069054906101000a900460ff166115bd565b8282815181106110ef576110ef6121f1565b6020908102919091010152600101610ef5565b50336001600160a01b0316847ff5efc4bb09a12b6c9561a7e7ab02938a72a4351316b473d574fdaaa89c43eb9a8360405161113d919061228f565b60405180910390a350505050565b60035460408051918252602082018390527faf46013422363beb5e6f00ab923cffe3574670494c864de2828b9d7c201fdde5910160405180910390a1600355565b6002548110156111af576040516361759e6560e01b815260040160405180910390fd5b60035481111561045f576040516386dac63560e01b815260040160405180910390fd5b60008686868686866040516020016111ef969594939291906122a2565b60408051601f198184030181529181528151602092830120600090815260079092529020805460ff1916905550505050505050565b60015460408051918252602082018390527f9953f3a71052edcd4ae7a0f97302839d1dda32ab93c1039207c91c866b094f72910160405180910390a1600155565b60005460408051918252602082018390527f43de56b886294fc29767e51a88b5c67fd24aefebc5ddf813b1d9b91b1df38444910160405180910390a1600055565b84516112c557604051636a8e3e9360e11b815260040160405180910390fd5b84518451811415806112d8575083518114155b806112e4575082518114155b806112f0575081518114155b1561130e57604051630d10f63b60e01b815260040160405180910390fd5b6005546000805461131f904261223c565b600580546001019055905060005b83811015611440576000898281518110611349576113496121f1565b6020026020010151898381518110611363576113636121f1565b602002602001015189848151811061137d5761137d6121f1565b6020026020010151898581518110611397576113976121f1565b6020026020010151868a87815181106113b2576113b26121f1565b60200260200101516040516020016113cf969594939291906122a2565b6040516020818303038152906040528051906020012090506114008160009081526007602052604090205460ff1690565b1561141e57604051633b2f04e360e21b815260040160405180910390fd5b6000908152600760205260409020805460ff191660019081179091550161132d565b506000828152600660209081526040909120895190916114649183918c01906117a3565b50875161147a90600183019060208b0190611808565b50865161149090600283019060208a0190611843565b5085516114a6906003830190602089019061189c565b5084516114bc90600483019060208801906118f5565b50818160050181905550827f0325966a4aa089b42f4766ec96f599405102bb309e065f24874aff59082dbc8b8a8a8a8a8a88604051611500969594939291906122f6565b60405180910390a2505050505050505050565b60025460408051918252602082018390527fc534cdcbe9b52100810d787afd57e4174322776fcb58872ea706f23e9319fa8d910160405180910390a1600255565b600454604080516001600160a01b03928316815291831660208301527f85bd8788d3c4a160f0f6254229589f137d5633a870dcb46f99ffe07b4da1894b910160405180910390a1600480546001600160a01b0319166001600160a01b0392909216919091179055565b6060854710156115e057604051631e9acf1760e31b815260040160405180910390fd5b60008787878787876040516020016115fd969594939291906122a2565b60408051601f198184030181529181528151602092830120600081815260079093529120805460ff19169055865190915060609061163c575084611668565b86805190602001208660405160200161165692919061239d565b60405160208183030381529060405290505b6000606085156116ea5760405163b68df16d60e01b8152309063b68df16d908c90611699908f9088906004016123ce565b60006040518083038185885af11580156116b7573d6000803e3d6000fd5b50505050506040513d6000823e601f3d908101601f191682016040526116e091908101906123f2565b909250905061174c565b8a6001600160a01b03168a84604051611703919061247f565b60006040518083038185875af1925050503d8060008114611740576040519150601f19603f3d011682016040523d82523d6000602084013e611745565b606091505b5090925090505b6117568282611765565b9b9a5050505050505050505050565b6060821561177457508061179d565b8151156117845781518083602001fd5b6040516332f63ed360e21b815260040160405180910390fd5b92915050565b8280548282559060005260206000209081019282156117f8579160200282015b828111156117f857825182546001600160a01b0319166001600160a01b039091161782556020909201916001909101906117c3565b50611804929150611991565b5090565b8280548282559060005260206000209081019282156117f8579160200282015b828111156117f8578251825591602001919060010190611828565b828054828255906000526020600020908101928215611890579160200282015b8281111561189057825180516118809184916020909101906119a6565b5091602001919060010190611863565b50611804929150611a19565b8280548282559060005260206000209081019282156118e9579160200282015b828111156118e957825180516118d99184916020909101906119a6565b50916020019190600101906118bc565b50611804929150611a36565b82805482825590600052602060002090601f016020900481019282156117f85791602002820160005b8382111561195b57835183826101000a81548160ff021916908315150217905550926020019260010160208160000104928301926001030261191e565b80156119885782816101000a81549060ff021916905560010160208160000104928301926001030261195b565b50506118049291505b5b808211156118045760008155600101611992565b8280546119b290612207565b90600052602060002090601f0160209004810192826119d457600085556117f8565b82601f106119ed57805160ff19168380011785556117f8565b828001600101855582156117f857918201828111156117f8578251825591602001919060010190611828565b80821115611804576000611a2d8282611a53565b50600101611a19565b80821115611804576000611a4a8282611a53565b50600101611a36565b508054611a5f90612207565b6000825580601f10611a6f575050565b601f01602090049060005260206000209081019061045f9190611991565b600060208284031215611a9f57600080fd5b5035919050565b634e487b7160e01b600052602160045260246000fd5b6020810160048310611ade57634e487b7160e01b600052602160045260246000fd5b91905290565b600081518084526020808501945080840160005b83811015611b1d5781516001600160a01b031687529582019590820190600101611af8565b509495945050505050565b600081518084526020808501945080840160005b83811015611b1d57815187529582019590820190600101611b3c565b60005b83811015611b73578181015183820152602001611b5b565b83811115611b82576000848401525b50505050565b60008151808452611ba0816020860160208601611b58565b601f01601f19169290920160200192915050565b600081518084526020808501808196508360051b8101915082860160005b85811015611bfc578284038952611bea848351611b88565b98850198935090840190600101611bd2565b5091979650505050505050565b600081518084526020808501945080840160005b83811015611b1d578151151587529582019590820190600101611c1d565b6020815260008251610100806020850152611c5a610120850183611ae4565b91506020850151601f1980868503016040870152611c788483611b28565b93506040870151915080868503016060870152611c958483611bb4565b93506060870151915080868503016080870152611cb28483611bb4565b935060808701519150808685030160a087015250611cd08382611c09565b92505060a085015160c085015260c0850151611cf060e086018215159052565b5060e0850151801515858301525090949350505050565b6001600160a01b038116811461045f57600080fd5b600080600060408486031215611d3157600080fd5b8335611d3c81611d07565b9250602084013567ffffffffffffffff80821115611d5957600080fd5b818601915086601f830112611d6d57600080fd5b813581811115611d7c57600080fd5b876020828501011115611d8e57600080fd5b6020830194508093505050509250925092565b8215158152604060208201526000611dbc6040830184611b88565b949350505050565b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f1916810167ffffffffffffffff81118282101715611e0357611e03611dc4565b604052919050565b600067ffffffffffffffff821115611e2557611e25611dc4565b5060051b60200190565b600082601f830112611e4057600080fd5b81356020611e55611e5083611e0b565b611dda565b82815260059290921b84018101918181019086841115611e7457600080fd5b8286015b84811015611e98578035611e8b81611d07565b8352918301918301611e78565b509695505050505050565b600082601f830112611eb457600080fd5b81356020611ec4611e5083611e0b565b82815260059290921b84018101918181019086841115611ee357600080fd5b8286015b84811015611e985780358352918301918301611ee7565b600067ffffffffffffffff821115611f1857611f18611dc4565b50601f01601f191660200190565b6000611f34611e5084611efe565b9050828152838383011115611f4857600080fd5b828260208301376000602084830101529392505050565b600082601f830112611f7057600080fd5b81356020611f80611e5083611e0b565b82815260059290921b84018101918181019086841115611f9f57600080fd5b8286015b84811015611e9857803567ffffffffffffffff811115611fc35760008081fd5b8701603f81018913611fd55760008081fd5b611fe6898683013560408401611f26565b845250918301918301611fa3565b600082601f83011261200557600080fd5b81356020612015611e5083611e0b565b82815260059290921b8401810191818101908684111561203457600080fd5b8286015b84811015611e9857803567ffffffffffffffff8111156120585760008081fd5b8701603f8101891361206a5760008081fd5b61207b898683013560408401611f26565b845250918301918301612038565b801515811461045f57600080fd5b600082601f8301126120a857600080fd5b813560206120b8611e5083611e0b565b82815260059290921b840181019181810190868411156120d757600080fd5b8286015b84811015611e985780356120ee81612089565b83529183019183016120db565b600080600080600060a0868803121561211357600080fd5b853567ffffffffffffffff8082111561212b57600080fd5b61213789838a01611e2f565b9650602088013591508082111561214d57600080fd5b61215989838a01611ea3565b9550604088013591508082111561216f57600080fd5b61217b89838a01611f5f565b9450606088013591508082111561219157600080fd5b61219d89838a01611ff4565b935060808801359150808211156121b357600080fd5b506121c088828901612097565b9150509295509295909350565b6000602082840312156121df57600080fd5b81356121ea81611d07565b9392505050565b634e487b7160e01b600052603260045260246000fd5b600181811c9082168061221b57607f821691505b6020821081141561079d57634e487b7160e01b600052602260045260246000fd5b6000821982111561225d57634e487b7160e01b600052601160045260246000fd5b500190565b8183823760009101908152919050565b60006020828403121561228457600080fd5b81516121ea81611d07565b6020815260006121ea6020830184611bb4565b60018060a01b038716815285602082015260c0604082015260006122c960c0830187611b88565b82810360608401526122db8187611b88565b6080840195909552505090151560a090910152949350505050565b60c0808252875190820181905260009060209060e0840190828b01845b828110156123385781516001600160a01b031684529284019290840190600101612313565b5050508381038285015261234c818a611b28565b91505082810360408401526123618188611bb4565b905082810360608401526123758187611bb4565b905082810360808401526123898186611c09565b9150508260a0830152979650505050505050565b6001600160e01b03198316815281516000906123c0816004850160208701611b58565b919091016004019392505050565b6001600160a01b0383168152604060208201819052600090611dbc90830184611b88565b6000806040838503121561240557600080fd5b825161241081612089565b602084015190925067ffffffffffffffff81111561242d57600080fd5b8301601f8101851361243e57600080fd5b805161244c611e5082611efe565b81815286602083850101111561246157600080fd5b612472826020830160208601611b58565b8093505050509250929050565b60008251612491818460208701611b58565b919091019291505056fea26469706673582212203a6ac9c0481ab3d9520b931410e440829aecdacacf855023a51ad521e9fa6dab64736f6c634300080a003300000000000000000000000042000000000000000000000000000000000000070000000000000000000000003e40d73eb977dc6a537af587d48316fee66e9c8c00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000015180000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000
Deployed Bytecode
0x6080604052600436106101345760003560e01c8063b3c82e92116100ab578063d9a4cbdf1161006f578063d9a4cbdf14610361578063dbd1838814610381578063e471b02614610396578063e68a5c3d146103b6578063fc525395146103d6578063fe0d94c1146103f657600080fd5b8063b3c82e92146102cb578063b68df16d146102f8578063c3a7688614610319578063cebc9a8214610337578063d89aac391461034c57600080fd5b80635ab98d5a116100fd5780635ab98d5a146101cc57806364d62353146101ec5780636a4df1df1461020c5780638533f33714610258578063a75b87d21461026d578063b1fc87961461028b57600080fd5b80625c33e11461013957806303c276211461013b578063083a73a21461015f57806340e58ee51461017f5780635748c1301461019f575b600080fd5b005b34801561014757600080fd5b506002545b6040519081526020015b60405180910390f35b34801561016b57600080fd5b5061013961017a366004611a8d565b610409565b34801561018b57600080fd5b5061013961019a366004611a8d565b610462565b3480156101ab57600080fd5b506101bf6101ba366004611a8d565b61070d565b6040516101569190611abc565b3480156101d857600080fd5b506101396101e7366004611a8d565b6107a3565b3480156101f857600080fd5b50610139610207366004611a8d565b6107ef565b34801561021857600080fd5b506102407f000000000000000000000000420000000000000000000000000000000000000781565b6040516001600160a01b039091168152602001610156565b34801561026457600080fd5b5060055461014c565b34801561027957600080fd5b506004546001600160a01b0316610240565b34801561029757600080fd5b506102bb6102a6366004611a8d565b60009081526007602052604090205460ff1690565b6040519015158152602001610156565b3480156102d757600080fd5b506102eb6102e6366004611a8d565b610821565b6040516101569190611c3b565b61030b610306366004611d1c565b610b94565b604051610156929190611da1565b34801561032557600080fd5b506008546001600160a01b0316610240565b34801561034357600080fd5b5060005461014c565b34801561035857600080fd5b5060035461014c565b34801561036d57600080fd5b5061013961037c3660046120fb565b610c25565b34801561038d57600080fd5b5060015461014c565b3480156103a257600080fd5b506101396103b1366004611a8d565b610d26565b3480156103c257600080fd5b506101396103d13660046121cd565b610d71565b3480156103e257600080fd5b506101396103f13660046121cd565b610dfa565b610139610404366004611a8d565b610e23565b33301461042957604051631dbf5f2360e01b815260040160405180910390fd5b600254811161044b5760405163cb2f2b2360e01b815260040160405180910390fd5b6104548161114b565b61045f60005461118c565b50565b6004546001600160a01b0316331461048d576040516377b6878160e11b815260040160405180910390fd5b60006104988261070d565b60038111156104a9576104a9611aa6565b146104c75760405163050ac78b60e11b815260040160405180910390fd5b60008181526006602081905260408220908101805461ff001916610100179055805490915b818110156106dc576106d483600001828154811061050c5761050c6121f1565b6000918252602090912001546001850180546001600160a01b03909216918490811061053a5761053a6121f1565b906000526020600020015485600201848154811061055a5761055a6121f1565b90600052602060002001805461056f90612207565b80601f016020809104026020016040519081016040528092919081815260200182805461059b90612207565b80156105e85780601f106105bd576101008083540402835291602001916105e8565b820191906000526020600020905b8154815290600101906020018083116105cb57829003601f168201915b5050505050866003018581548110610602576106026121f1565b90600052602060002001805461061790612207565b80601f016020809104026020016040519081016040528092919081815260200182805461064390612207565b80156106905780601f1061066557610100808354040283529160200191610690565b820191906000526020600020905b81548152906001019060200180831161067357829003601f168201915b505050505087600501548860040187815481106106af576106af6121f1565b90600052602060002090602091828204019190069054906101000a900460ff166111d2565b6001016104ec565b5060405183907f0743c673685efcbf3db8591d9e1d98336bc844fe4f4599e6f7efb6d71c02563490600090a2505050565b600081600554116107315760405163e5bc0e7b60e01b815260040160405180910390fd5b600082815260066020819052604090912090810154610100900460ff161561075c5750600292915050565b600681015460ff16156107725750600192915050565b6001548160050154610784919061223c565b4211156107945750600392915050565b50600092915050565b50919050565b3330146107c357604051631dbf5f2360e01b815260040160405180910390fd5b6102588110156107e6576040516301f6f9e560e71b815260040160405180910390fd5b61045f81611224565b33301461080f57604051631dbf5f2360e01b815260040160405180910390fd5b6108188161118c565b61045f81611265565b61086d6040518061010001604052806060815260200160608152602001606081526020016060815260200160608152602001600081526020016000151581526020016000151581525090565b6000828152600660209081526040918290208251815461012093810282018401909452610100810184815290939192849284918401828280156108d957602002820191906000526020600020905b81546001600160a01b031681526001909101906020018083116108bb575b505050505081526020016001820180548060200260200160405190810160405280929190818152602001828054801561093157602002820191906000526020600020905b81548152602001906001019080831161091d575b5050505050815260200160028201805480602002602001604051908101604052809291908181526020016000905b82821015610a0b57838290600052602060002001805461097e90612207565b80601f01602080910402602001604051908101604052809291908181526020018280546109aa90612207565b80156109f75780601f106109cc576101008083540402835291602001916109f7565b820191906000526020600020905b8154815290600101906020018083116109da57829003601f168201915b50505050508152602001906001019061095f565b50505050815260200160038201805480602002602001604051908101604052809291908181526020016000905b82821015610ae4578382906000526020600020018054610a5790612207565b80601f0160208091040260200160405190810160405280929190818152602001828054610a8390612207565b8015610ad05780601f10610aa557610100808354040283529160200191610ad0565b820191906000526020600020905b815481529060010190602001808311610ab357829003601f168201915b505050505081526020019060010190610a38565b50505050815260200160048201805480602002602001604051908101604052809291908181526020018280548015610b5b57602002820191906000526020600020906000905b825461010083900a900460ff161515815260206001928301818104948501949093039092029101808411610b2a5790505b50505091835250506005820154602082015260069091015460ff8082161515604084015261010090910416151560609091015292915050565b60006060333014610bb857604051631dbf5f2360e01b815260040160405180910390fd5b60006060866001600160a01b03168686604051610bd6929190612262565b600060405180830381855af49150503d8060008114610c11576040519150601f19603f3d011682016040523d82523d6000602084013e610c16565b606091505b50909890975095505050505050565b336001600160a01b037f000000000000000000000000420000000000000000000000000000000000000716141580610cf4575060085460408051636e296e4560e01b815290516001600160a01b03928316927f00000000000000000000000042000000000000000000000000000000000000071691636e296e459160048083019260209291908290030181865afa158015610cc4573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ce89190612272565b6001600160a01b031614155b15610d12576040516359e8359960e01b815260040160405180910390fd5b610d1f85858585856112a6565b5050505050565b333014610d4657604051631dbf5f2360e01b815260040160405180910390fd5b6003548110610d68576040516301b1029b60e61b815260040160405180910390fd5b61045481611513565b333014610d9157604051631dbf5f2360e01b815260040160405180910390fd5b600854604080516001600160a01b03928316815291831660208301527f01dd0ca50426f21c1b37ce7f3e95eef45b4a55bc5da80a7b67b2c65a7463caf0910160405180910390a1600880546001600160a01b0319166001600160a01b0392909216919091179055565b333014610e1a57604051631dbf5f2360e01b815260040160405180910390fd5b61045f81611554565b6000610e2e8261070d565b6003811115610e3f57610e3f611aa6565b14610e5d5760405163050ac78b60e11b815260040160405180910390fd5b60008181526006602052604090206005810154421015610e9057604051635192dd5560e01b815260040160405180910390fd5b60068101805460ff19166001179055805460008167ffffffffffffffff811115610ebc57610ebc611dc4565b604051908082528060200260200182016040528015610eef57816020015b6060815260200190600190039081610eda5790505b50905060005b82811015611102576110dd846000018281548110610f1557610f156121f1565b6000918252602090912001546001860180546001600160a01b039092169184908110610f4357610f436121f1565b9060005260206000200154866002018481548110610f6357610f636121f1565b906000526020600020018054610f7890612207565b80601f0160208091040260200160405190810160405280929190818152602001828054610fa490612207565b8015610ff15780601f10610fc657610100808354040283529160200191610ff1565b820191906000526020600020905b815481529060010190602001808311610fd457829003601f168201915b505050505087600301858154811061100b5761100b6121f1565b90600052602060002001805461102090612207565b80601f016020809104026020016040519081016040528092919081815260200182805461104c90612207565b80156110995780601f1061106e57610100808354040283529160200191611099565b820191906000526020600020905b81548152906001019060200180831161107c57829003601f168201915b505050505088600501548960040187815481106110b8576110b86121f1565b90600052602060002090602091828204019190069054906101000a900460ff166115bd565b8282815181106110ef576110ef6121f1565b6020908102919091010152600101610ef5565b50336001600160a01b0316847ff5efc4bb09a12b6c9561a7e7ab02938a72a4351316b473d574fdaaa89c43eb9a8360405161113d919061228f565b60405180910390a350505050565b60035460408051918252602082018390527faf46013422363beb5e6f00ab923cffe3574670494c864de2828b9d7c201fdde5910160405180910390a1600355565b6002548110156111af576040516361759e6560e01b815260040160405180910390fd5b60035481111561045f576040516386dac63560e01b815260040160405180910390fd5b60008686868686866040516020016111ef969594939291906122a2565b60408051601f198184030181529181528151602092830120600090815260079092529020805460ff1916905550505050505050565b60015460408051918252602082018390527f9953f3a71052edcd4ae7a0f97302839d1dda32ab93c1039207c91c866b094f72910160405180910390a1600155565b60005460408051918252602082018390527f43de56b886294fc29767e51a88b5c67fd24aefebc5ddf813b1d9b91b1df38444910160405180910390a1600055565b84516112c557604051636a8e3e9360e11b815260040160405180910390fd5b84518451811415806112d8575083518114155b806112e4575082518114155b806112f0575081518114155b1561130e57604051630d10f63b60e01b815260040160405180910390fd5b6005546000805461131f904261223c565b600580546001019055905060005b83811015611440576000898281518110611349576113496121f1565b6020026020010151898381518110611363576113636121f1565b602002602001015189848151811061137d5761137d6121f1565b6020026020010151898581518110611397576113976121f1565b6020026020010151868a87815181106113b2576113b26121f1565b60200260200101516040516020016113cf969594939291906122a2565b6040516020818303038152906040528051906020012090506114008160009081526007602052604090205460ff1690565b1561141e57604051633b2f04e360e21b815260040160405180910390fd5b6000908152600760205260409020805460ff191660019081179091550161132d565b506000828152600660209081526040909120895190916114649183918c01906117a3565b50875161147a90600183019060208b0190611808565b50865161149090600283019060208a0190611843565b5085516114a6906003830190602089019061189c565b5084516114bc90600483019060208801906118f5565b50818160050181905550827f0325966a4aa089b42f4766ec96f599405102bb309e065f24874aff59082dbc8b8a8a8a8a8a88604051611500969594939291906122f6565b60405180910390a2505050505050505050565b60025460408051918252602082018390527fc534cdcbe9b52100810d787afd57e4174322776fcb58872ea706f23e9319fa8d910160405180910390a1600255565b600454604080516001600160a01b03928316815291831660208301527f85bd8788d3c4a160f0f6254229589f137d5633a870dcb46f99ffe07b4da1894b910160405180910390a1600480546001600160a01b0319166001600160a01b0392909216919091179055565b6060854710156115e057604051631e9acf1760e31b815260040160405180910390fd5b60008787878787876040516020016115fd969594939291906122a2565b60408051601f198184030181529181528151602092830120600081815260079093529120805460ff19169055865190915060609061163c575084611668565b86805190602001208660405160200161165692919061239d565b60405160208183030381529060405290505b6000606085156116ea5760405163b68df16d60e01b8152309063b68df16d908c90611699908f9088906004016123ce565b60006040518083038185885af11580156116b7573d6000803e3d6000fd5b50505050506040513d6000823e601f3d908101601f191682016040526116e091908101906123f2565b909250905061174c565b8a6001600160a01b03168a84604051611703919061247f565b60006040518083038185875af1925050503d8060008114611740576040519150601f19603f3d011682016040523d82523d6000602084013e611745565b606091505b5090925090505b6117568282611765565b9b9a5050505050505050505050565b6060821561177457508061179d565b8151156117845781518083602001fd5b6040516332f63ed360e21b815260040160405180910390fd5b92915050565b8280548282559060005260206000209081019282156117f8579160200282015b828111156117f857825182546001600160a01b0319166001600160a01b039091161782556020909201916001909101906117c3565b50611804929150611991565b5090565b8280548282559060005260206000209081019282156117f8579160200282015b828111156117f8578251825591602001919060010190611828565b828054828255906000526020600020908101928215611890579160200282015b8281111561189057825180516118809184916020909101906119a6565b5091602001919060010190611863565b50611804929150611a19565b8280548282559060005260206000209081019282156118e9579160200282015b828111156118e957825180516118d99184916020909101906119a6565b50916020019190600101906118bc565b50611804929150611a36565b82805482825590600052602060002090601f016020900481019282156117f85791602002820160005b8382111561195b57835183826101000a81548160ff021916908315150217905550926020019260010160208160000104928301926001030261191e565b80156119885782816101000a81549060ff021916905560010160208160000104928301926001030261195b565b50506118049291505b5b808211156118045760008155600101611992565b8280546119b290612207565b90600052602060002090601f0160209004810192826119d457600085556117f8565b82601f106119ed57805160ff19168380011785556117f8565b828001600101855582156117f857918201828111156117f8578251825591602001919060010190611828565b80821115611804576000611a2d8282611a53565b50600101611a19565b80821115611804576000611a4a8282611a53565b50600101611a36565b508054611a5f90612207565b6000825580601f10611a6f575050565b601f01602090049060005260206000209081019061045f9190611991565b600060208284031215611a9f57600080fd5b5035919050565b634e487b7160e01b600052602160045260246000fd5b6020810160048310611ade57634e487b7160e01b600052602160045260246000fd5b91905290565b600081518084526020808501945080840160005b83811015611b1d5781516001600160a01b031687529582019590820190600101611af8565b509495945050505050565b600081518084526020808501945080840160005b83811015611b1d57815187529582019590820190600101611b3c565b60005b83811015611b73578181015183820152602001611b5b565b83811115611b82576000848401525b50505050565b60008151808452611ba0816020860160208601611b58565b601f01601f19169290920160200192915050565b600081518084526020808501808196508360051b8101915082860160005b85811015611bfc578284038952611bea848351611b88565b98850198935090840190600101611bd2565b5091979650505050505050565b600081518084526020808501945080840160005b83811015611b1d578151151587529582019590820190600101611c1d565b6020815260008251610100806020850152611c5a610120850183611ae4565b91506020850151601f1980868503016040870152611c788483611b28565b93506040870151915080868503016060870152611c958483611bb4565b93506060870151915080868503016080870152611cb28483611bb4565b935060808701519150808685030160a087015250611cd08382611c09565b92505060a085015160c085015260c0850151611cf060e086018215159052565b5060e0850151801515858301525090949350505050565b6001600160a01b038116811461045f57600080fd5b600080600060408486031215611d3157600080fd5b8335611d3c81611d07565b9250602084013567ffffffffffffffff80821115611d5957600080fd5b818601915086601f830112611d6d57600080fd5b813581811115611d7c57600080fd5b876020828501011115611d8e57600080fd5b6020830194508093505050509250925092565b8215158152604060208201526000611dbc6040830184611b88565b949350505050565b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f1916810167ffffffffffffffff81118282101715611e0357611e03611dc4565b604052919050565b600067ffffffffffffffff821115611e2557611e25611dc4565b5060051b60200190565b600082601f830112611e4057600080fd5b81356020611e55611e5083611e0b565b611dda565b82815260059290921b84018101918181019086841115611e7457600080fd5b8286015b84811015611e98578035611e8b81611d07565b8352918301918301611e78565b509695505050505050565b600082601f830112611eb457600080fd5b81356020611ec4611e5083611e0b565b82815260059290921b84018101918181019086841115611ee357600080fd5b8286015b84811015611e985780358352918301918301611ee7565b600067ffffffffffffffff821115611f1857611f18611dc4565b50601f01601f191660200190565b6000611f34611e5084611efe565b9050828152838383011115611f4857600080fd5b828260208301376000602084830101529392505050565b600082601f830112611f7057600080fd5b81356020611f80611e5083611e0b565b82815260059290921b84018101918181019086841115611f9f57600080fd5b8286015b84811015611e9857803567ffffffffffffffff811115611fc35760008081fd5b8701603f81018913611fd55760008081fd5b611fe6898683013560408401611f26565b845250918301918301611fa3565b600082601f83011261200557600080fd5b81356020612015611e5083611e0b565b82815260059290921b8401810191818101908684111561203457600080fd5b8286015b84811015611e9857803567ffffffffffffffff8111156120585760008081fd5b8701603f8101891361206a5760008081fd5b61207b898683013560408401611f26565b845250918301918301612038565b801515811461045f57600080fd5b600082601f8301126120a857600080fd5b813560206120b8611e5083611e0b565b82815260059290921b840181019181810190868411156120d757600080fd5b8286015b84811015611e985780356120ee81612089565b83529183019183016120db565b600080600080600060a0868803121561211357600080fd5b853567ffffffffffffffff8082111561212b57600080fd5b61213789838a01611e2f565b9650602088013591508082111561214d57600080fd5b61215989838a01611ea3565b9550604088013591508082111561216f57600080fd5b61217b89838a01611f5f565b9450606088013591508082111561219157600080fd5b61219d89838a01611ff4565b935060808801359150808211156121b357600080fd5b506121c088828901612097565b9150509295509295909350565b6000602082840312156121df57600080fd5b81356121ea81611d07565b9392505050565b634e487b7160e01b600052603260045260246000fd5b600181811c9082168061221b57607f821691505b6020821081141561079d57634e487b7160e01b600052602260045260246000fd5b6000821982111561225d57634e487b7160e01b600052601160045260246000fd5b500190565b8183823760009101908152919050565b60006020828403121561228457600080fd5b81516121ea81611d07565b6020815260006121ea6020830184611bb4565b60018060a01b038716815285602082015260c0604082015260006122c960c0830187611b88565b82810360608401526122db8187611b88565b6080840195909552505090151560a090910152949350505050565b60c0808252875190820181905260009060209060e0840190828b01845b828110156123385781516001600160a01b031684529284019290840190600101612313565b5050508381038285015261234c818a611b28565b91505082810360408401526123618188611bb4565b905082810360608401526123758187611bb4565b905082810360808401526123898186611c09565b9150508260a0830152979650505050505050565b6001600160e01b03198316815281516000906123c0816004850160208701611b58565b919091016004019392505050565b6001600160a01b0383168152604060208201819052600090611dbc90830184611b88565b6000806040838503121561240557600080fd5b825161241081612089565b602084015190925067ffffffffffffffff81111561242d57600080fd5b8301601f8101851361243e57600080fd5b805161244c611e5082611efe565b81815286602083850101111561246157600080fd5b612472826020830160208601611b58565b8093505050509250929050565b60008251612491818460208701611b58565b919091019291505056fea26469706673582212203a6ac9c0481ab3d9520b931410e440829aecdacacf855023a51ad521e9fa6dab64736f6c634300080a0033
Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)
00000000000000000000000042000000000000000000000000000000000000070000000000000000000000003e40d73eb977dc6a537af587d48316fee66e9c8c00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000015180000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000
-----Decoded View---------------
Arg [0] : ovmL2CrossDomainMessenger (address): 0x4200000000000000000000000000000000000007
Arg [1] : ethereumGovernanceExecutor (address): 0x3e40D73EB977Dc6a537aF587D48316feE66E9C8c
Arg [2] : delay (uint256): 0
Arg [3] : gracePeriod (uint256): 86400
Arg [4] : minimumDelay (uint256): 0
Arg [5] : maximumDelay (uint256): 1
Arg [6] : guardian (address): 0x0000000000000000000000000000000000000000
-----Encoded View---------------
7 Constructor Arguments found :
Arg [0] : 0000000000000000000000004200000000000000000000000000000000000007
Arg [1] : 0000000000000000000000003e40d73eb977dc6a537af587d48316fee66e9c8c
Arg [2] : 0000000000000000000000000000000000000000000000000000000000000000
Arg [3] : 0000000000000000000000000000000000000000000000000000000000015180
Arg [4] : 0000000000000000000000000000000000000000000000000000000000000000
Arg [5] : 0000000000000000000000000000000000000000000000000000000000000001
Arg [6] : 0000000000000000000000000000000000000000000000000000000000000000
Loading...
Loading
Loading...
Loading
Multichain Portfolio | 35 Chains
Chain | Token | Portfolio % | Price | Amount | Value |
---|
Loading...
Loading
Loading...
Loading
A contract address hosts a smart contract, which is a set of code stored on the blockchain that runs when predetermined conditions are met. Learn more about addresses in our Knowledge Base.