Source Code
Overview
ETH Balance
0 ETH
More Info
ContractCreator
Multichain Info
N/A
Latest 21 from a total of 21 transactions
| Transaction Hash |
Method
|
Block
|
From
|
To
|
Amount
|
||||
|---|---|---|---|---|---|---|---|---|---|
| Execute | 15574637 | 549 days ago | IN | 0 ETH | 0.000154007155 | ||||
| Execute | 15572545 | 549 days ago | IN | 0 ETH | 0.00017607905 | ||||
| Execute | 15401959 | 553 days ago | IN | 0 ETH | 0.000086550284 | ||||
| Execute | 15401953 | 553 days ago | IN | 0 ETH | 0.00009089234 | ||||
| Execute | 14314726 | 578 days ago | IN | 0 ETH | 0.000389248142 | ||||
| Execute | 14314207 | 578 days ago | IN | 0 ETH | 0.000615829233 | ||||
| Execute | 14313693 | 578 days ago | IN | 0 ETH | 0.000787941002 | ||||
| Execute | 14312228 | 578 days ago | IN | 0 ETH | 0.001477608909 | ||||
| Execute | 14282533 | 579 days ago | IN | 0 ETH | 0.000130583424 | ||||
| Execute | 14281855 | 579 days ago | IN | 0 ETH | 0.000146322672 | ||||
| Execute | 10207803 | 673 days ago | IN | 0 ETH | 0.000160476422 | ||||
| Execute | 10091408 | 676 days ago | IN | 0 ETH | 0.000156046036 | ||||
| Execute | 10090907 | 676 days ago | IN | 0 ETH | 0.000172461917 | ||||
| Execute | 10090320 | 676 days ago | IN | 0 ETH | 0.000157643344 | ||||
| Execute | 10088842 | 676 days ago | IN | 0 ETH | 0.000203775815 | ||||
| Execute | 10088337 | 676 days ago | IN | 0 ETH | 0.000202165576 | ||||
| Execute | 9015682 | 701 days ago | IN | 0 ETH | 0.000129629174 | ||||
| Execute | 9014557 | 701 days ago | IN | 0 ETH | 0.000145654282 | ||||
| Execute | 9013164 | 701 days ago | IN | 0 ETH | 0.000161323177 | ||||
| Execute | 9011114 | 701 days ago | IN | 0 ETH | 0.000182168895 | ||||
| Execute | 9010591 | 701 days ago | IN | 0 ETH | 0.000182633416 |
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 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
60a06040523480156200001157600080fd5b50604051620027ec380380620027ec833981016040819052620000349162000280565b8585858585858484848484610258841080620000505750818310155b806200005b57508285105b806200006657508185115b156200008557604051630a5addd160e21b815260040160405180910390fd5b6200009085620000f6565b6200009b8462000137565b620000a68362000178565b620000b182620001b9565b620000bc81620001fa565b5050600880546001600160a01b0319166001600160a01b039a8b16179055505050509a90931660805250620002f198505050505050505050565b60005460408051918252602082018390527f43de56b886294fc29767e51a88b5c67fd24aefebc5ddf813b1d9b91b1df38444910160405180910390a1600055565b60015460408051918252602082018390527f9953f3a71052edcd4ae7a0f97302839d1dda32ab93c1039207c91c866b094f72910160405180910390a1600155565b60025460408051918252602082018390527fc534cdcbe9b52100810d787afd57e4174322776fcb58872ea706f23e9319fa8d910160405180910390a1600255565b60035460408051918252602082018390527faf46013422363beb5e6f00ab923cffe3574670494c864de2828b9d7c201fdde5910160405180910390a1600355565b600454604080516001600160a01b03928316815291831660208301527f85bd8788d3c4a160f0f6254229589f137d5633a870dcb46f99ffe07b4da1894b910160405180910390a1600480546001600160a01b0319166001600160a01b0392909216919091179055565b80516001600160a01b03811681146200027b57600080fd5b919050565b600080600080600080600060e0888a0312156200029c57600080fd5b620002a78862000263565b9650620002b76020890162000263565b955060408801519450606088015193506080880151925060a08801519150620002e360c0890162000263565b905092959891949750929550565b6080516124d16200031b6000396000818161021e01528181610c300152610c7901526124d16000f3fe6080604052600436106101345760003560e01c8063b3c82e92116100ab578063d9a4cbdf1161006f578063d9a4cbdf14610361578063dbd1838814610381578063e471b02614610396578063e68a5c3d146103b6578063fc525395146103d6578063fe0d94c1146103f657600080fd5b8063b3c82e92146102cb578063b68df16d146102f8578063c3a7688614610319578063cebc9a8214610337578063d89aac391461034c57600080fd5b80635ab98d5a116100fd5780635ab98d5a146101cc57806364d62353146101ec5780636a4df1df1461020c5780638533f33714610258578063a75b87d21461026d578063b1fc87961461028b57600080fd5b80625c33e11461013957806303c276211461013b578063083a73a21461015f57806340e58ee51461017f5780635748c1301461019f575b600080fd5b005b34801561014757600080fd5b506002545b6040519081526020015b60405180910390f35b34801561016b57600080fd5b5061013961017a366004611a8d565b610409565b34801561018b57600080fd5b5061013961019a366004611a8d565b610462565b3480156101ab57600080fd5b506101bf6101ba366004611a8d565b61070d565b6040516101569190611abc565b3480156101d857600080fd5b506101396101e7366004611a8d565b6107a3565b3480156101f857600080fd5b50610139610207366004611a8d565b6107ef565b34801561021857600080fd5b506102407f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b039091168152602001610156565b34801561026457600080fd5b5060055461014c565b34801561027957600080fd5b506004546001600160a01b0316610240565b34801561029757600080fd5b506102bb6102a6366004611a8d565b60009081526007602052604090205460ff1690565b6040519015158152602001610156565b3480156102d757600080fd5b506102eb6102e6366004611a8d565b610821565b6040516101569190611c3b565b61030b610306366004611d1c565b610b94565b604051610156929190611da1565b34801561032557600080fd5b506008546001600160a01b0316610240565b34801561034357600080fd5b5060005461014c565b34801561035857600080fd5b5060035461014c565b34801561036d57600080fd5b5061013961037c3660046120fb565b610c25565b34801561038d57600080fd5b5060015461014c565b3480156103a257600080fd5b506101396103b1366004611a8d565b610d26565b3480156103c257600080fd5b506101396103d13660046121cd565b610d71565b3480156103e257600080fd5b506101396103f13660046121cd565b610dfa565b610139610404366004611a8d565b610e23565b33301461042957604051631dbf5f2360e01b815260040160405180910390fd5b600254811161044b5760405163cb2f2b2360e01b815260040160405180910390fd5b6104548161114b565b61045f60005461118c565b50565b6004546001600160a01b0316331461048d576040516377b6878160e11b815260040160405180910390fd5b60006104988261070d565b60038111156104a9576104a9611aa6565b146104c75760405163050ac78b60e11b815260040160405180910390fd5b60008181526006602081905260408220908101805461ff001916610100179055805490915b818110156106dc576106d483600001828154811061050c5761050c6121f1565b6000918252602090912001546001850180546001600160a01b03909216918490811061053a5761053a6121f1565b906000526020600020015485600201848154811061055a5761055a6121f1565b90600052602060002001805461056f90612207565b80601f016020809104026020016040519081016040528092919081815260200182805461059b90612207565b80156105e85780601f106105bd576101008083540402835291602001916105e8565b820191906000526020600020905b8154815290600101906020018083116105cb57829003601f168201915b5050505050866003018581548110610602576106026121f1565b90600052602060002001805461061790612207565b80601f016020809104026020016040519081016040528092919081815260200182805461064390612207565b80156106905780601f1061066557610100808354040283529160200191610690565b820191906000526020600020905b81548152906001019060200180831161067357829003601f168201915b505050505087600501548860040187815481106106af576106af6121f1565b90600052602060002090602091828204019190069054906101000a900460ff166111d2565b6001016104ec565b5060405183907f0743c673685efcbf3db8591d9e1d98336bc844fe4f4599e6f7efb6d71c02563490600090a2505050565b600081600554116107315760405163e5bc0e7b60e01b815260040160405180910390fd5b600082815260066020819052604090912090810154610100900460ff161561075c5750600292915050565b600681015460ff16156107725750600192915050565b6001548160050154610784919061223c565b4211156107945750600392915050565b50600092915050565b50919050565b3330146107c357604051631dbf5f2360e01b815260040160405180910390fd5b6102588110156107e6576040516301f6f9e560e71b815260040160405180910390fd5b61045f81611224565b33301461080f57604051631dbf5f2360e01b815260040160405180910390fd5b6108188161118c565b61045f81611265565b61086d6040518061010001604052806060815260200160608152602001606081526020016060815260200160608152602001600081526020016000151581526020016000151581525090565b6000828152600660209081526040918290208251815461012093810282018401909452610100810184815290939192849284918401828280156108d957602002820191906000526020600020905b81546001600160a01b031681526001909101906020018083116108bb575b505050505081526020016001820180548060200260200160405190810160405280929190818152602001828054801561093157602002820191906000526020600020905b81548152602001906001019080831161091d575b5050505050815260200160028201805480602002602001604051908101604052809291908181526020016000905b82821015610a0b57838290600052602060002001805461097e90612207565b80601f01602080910402602001604051908101604052809291908181526020018280546109aa90612207565b80156109f75780601f106109cc576101008083540402835291602001916109f7565b820191906000526020600020905b8154815290600101906020018083116109da57829003601f168201915b50505050508152602001906001019061095f565b50505050815260200160038201805480602002602001604051908101604052809291908181526020016000905b82821015610ae4578382906000526020600020018054610a5790612207565b80601f0160208091040260200160405190810160405280929190818152602001828054610a8390612207565b8015610ad05780601f10610aa557610100808354040283529160200191610ad0565b820191906000526020600020905b815481529060010190602001808311610ab357829003601f168201915b505050505081526020019060010190610a38565b50505050815260200160048201805480602002602001604051908101604052809291908181526020018280548015610b5b57602002820191906000526020600020906000905b825461010083900a900460ff161515815260206001928301818104948501949093039092029101808411610b2a5790505b50505091835250506005820154602082015260069091015460ff8082161515604084015261010090910416151560609091015292915050565b60006060333014610bb857604051631dbf5f2360e01b815260040160405180910390fd5b60006060866001600160a01b03168686604051610bd6929190612262565b600060405180830381855af49150503d8060008114610c11576040519150601f19603f3d011682016040523d82523d6000602084013e610c16565b606091505b50909890975095505050505050565b336001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016141580610cf4575060085460408051636e296e4560e01b815290516001600160a01b03928316927f00000000000000000000000000000000000000000000000000000000000000001691636e296e459160048083019260209291908290030181865afa158015610cc4573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ce89190612272565b6001600160a01b031614155b15610d12576040516359e8359960e01b815260040160405180910390fd5b610d1f85858585856112a6565b5050505050565b333014610d4657604051631dbf5f2360e01b815260040160405180910390fd5b6003548110610d68576040516301b1029b60e61b815260040160405180910390fd5b61045481611513565b333014610d9157604051631dbf5f2360e01b815260040160405180910390fd5b600854604080516001600160a01b03928316815291831660208301527f01dd0ca50426f21c1b37ce7f3e95eef45b4a55bc5da80a7b67b2c65a7463caf0910160405180910390a1600880546001600160a01b0319166001600160a01b0392909216919091179055565b333014610e1a57604051631dbf5f2360e01b815260040160405180910390fd5b61045f81611554565b6000610e2e8261070d565b6003811115610e3f57610e3f611aa6565b14610e5d5760405163050ac78b60e11b815260040160405180910390fd5b60008181526006602052604090206005810154421015610e9057604051635192dd5560e01b815260040160405180910390fd5b60068101805460ff19166001179055805460008167ffffffffffffffff811115610ebc57610ebc611dc4565b604051908082528060200260200182016040528015610eef57816020015b6060815260200190600190039081610eda5790505b50905060005b82811015611102576110dd846000018281548110610f1557610f156121f1565b6000918252602090912001546001860180546001600160a01b039092169184908110610f4357610f436121f1565b9060005260206000200154866002018481548110610f6357610f636121f1565b906000526020600020018054610f7890612207565b80601f0160208091040260200160405190810160405280929190818152602001828054610fa490612207565b8015610ff15780601f10610fc657610100808354040283529160200191610ff1565b820191906000526020600020905b815481529060010190602001808311610fd457829003601f168201915b505050505087600301858154811061100b5761100b6121f1565b90600052602060002001805461102090612207565b80601f016020809104026020016040519081016040528092919081815260200182805461104c90612207565b80156110995780601f1061106e57610100808354040283529160200191611099565b820191906000526020600020905b81548152906001019060200180831161107c57829003601f168201915b505050505088600501548960040187815481106110b8576110b86121f1565b90600052602060002090602091828204019190069054906101000a900460ff166115bd565b8282815181106110ef576110ef6121f1565b6020908102919091010152600101610ef5565b50336001600160a01b0316847ff5efc4bb09a12b6c9561a7e7ab02938a72a4351316b473d574fdaaa89c43eb9a8360405161113d919061228f565b60405180910390a350505050565b60035460408051918252602082018390527faf46013422363beb5e6f00ab923cffe3574670494c864de2828b9d7c201fdde5910160405180910390a1600355565b6002548110156111af576040516361759e6560e01b815260040160405180910390fd5b60035481111561045f576040516386dac63560e01b815260040160405180910390fd5b60008686868686866040516020016111ef969594939291906122a2565b60408051601f198184030181529181528151602092830120600090815260079092529020805460ff1916905550505050505050565b60015460408051918252602082018390527f9953f3a71052edcd4ae7a0f97302839d1dda32ab93c1039207c91c866b094f72910160405180910390a1600155565b60005460408051918252602082018390527f43de56b886294fc29767e51a88b5c67fd24aefebc5ddf813b1d9b91b1df38444910160405180910390a1600055565b84516112c557604051636a8e3e9360e11b815260040160405180910390fd5b84518451811415806112d8575083518114155b806112e4575082518114155b806112f0575081518114155b1561130e57604051630d10f63b60e01b815260040160405180910390fd5b6005546000805461131f904261223c565b600580546001019055905060005b83811015611440576000898281518110611349576113496121f1565b6020026020010151898381518110611363576113636121f1565b602002602001015189848151811061137d5761137d6121f1565b6020026020010151898581518110611397576113976121f1565b6020026020010151868a87815181106113b2576113b26121f1565b60200260200101516040516020016113cf969594939291906122a2565b6040516020818303038152906040528051906020012090506114008160009081526007602052604090205460ff1690565b1561141e57604051633b2f04e360e21b815260040160405180910390fd5b6000908152600760205260409020805460ff191660019081179091550161132d565b506000828152600660209081526040909120895190916114649183918c01906117a3565b50875161147a90600183019060208b0190611808565b50865161149090600283019060208a0190611843565b5085516114a6906003830190602089019061189c565b5084516114bc90600483019060208801906118f5565b50818160050181905550827f0325966a4aa089b42f4766ec96f599405102bb309e065f24874aff59082dbc8b8a8a8a8a8a88604051611500969594939291906122f6565b60405180910390a2505050505050505050565b60025460408051918252602082018390527fc534cdcbe9b52100810d787afd57e4174322776fcb58872ea706f23e9319fa8d910160405180910390a1600255565b600454604080516001600160a01b03928316815291831660208301527f85bd8788d3c4a160f0f6254229589f137d5633a870dcb46f99ffe07b4da1894b910160405180910390a1600480546001600160a01b0319166001600160a01b0392909216919091179055565b6060854710156115e057604051631e9acf1760e31b815260040160405180910390fd5b60008787878787876040516020016115fd969594939291906122a2565b60408051601f198184030181529181528151602092830120600081815260079093529120805460ff19169055865190915060609061163c575084611668565b86805190602001208660405160200161165692919061239d565b60405160208183030381529060405290505b6000606085156116ea5760405163b68df16d60e01b8152309063b68df16d908c90611699908f9088906004016123ce565b60006040518083038185885af11580156116b7573d6000803e3d6000fd5b50505050506040513d6000823e601f3d908101601f191682016040526116e091908101906123f2565b909250905061174c565b8a6001600160a01b03168a84604051611703919061247f565b60006040518083038185875af1925050503d8060008114611740576040519150601f19603f3d011682016040523d82523d6000602084013e611745565b606091505b5090925090505b6117568282611765565b9b9a5050505050505050505050565b6060821561177457508061179d565b8151156117845781518083602001fd5b6040516332f63ed360e21b815260040160405180910390fd5b92915050565b8280548282559060005260206000209081019282156117f8579160200282015b828111156117f857825182546001600160a01b0319166001600160a01b039091161782556020909201916001909101906117c3565b50611804929150611991565b5090565b8280548282559060005260206000209081019282156117f8579160200282015b828111156117f8578251825591602001919060010190611828565b828054828255906000526020600020908101928215611890579160200282015b8281111561189057825180516118809184916020909101906119a6565b5091602001919060010190611863565b50611804929150611a19565b8280548282559060005260206000209081019282156118e9579160200282015b828111156118e957825180516118d99184916020909101906119a6565b50916020019190600101906118bc565b50611804929150611a36565b82805482825590600052602060002090601f016020900481019282156117f85791602002820160005b8382111561195b57835183826101000a81548160ff021916908315150217905550926020019260010160208160000104928301926001030261191e565b80156119885782816101000a81549060ff021916905560010160208160000104928301926001030261195b565b50506118049291505b5b808211156118045760008155600101611992565b8280546119b290612207565b90600052602060002090601f0160209004810192826119d457600085556117f8565b82601f106119ed57805160ff19168380011785556117f8565b828001600101855582156117f857918201828111156117f8578251825591602001919060010190611828565b80821115611804576000611a2d8282611a53565b50600101611a19565b80821115611804576000611a4a8282611a53565b50600101611a36565b508054611a5f90612207565b6000825580601f10611a6f575050565b601f01602090049060005260206000209081019061045f9190611991565b600060208284031215611a9f57600080fd5b5035919050565b634e487b7160e01b600052602160045260246000fd5b6020810160048310611ade57634e487b7160e01b600052602160045260246000fd5b91905290565b600081518084526020808501945080840160005b83811015611b1d5781516001600160a01b031687529582019590820190600101611af8565b509495945050505050565b600081518084526020808501945080840160005b83811015611b1d57815187529582019590820190600101611b3c565b60005b83811015611b73578181015183820152602001611b5b565b83811115611b82576000848401525b50505050565b60008151808452611ba0816020860160208601611b58565b601f01601f19169290920160200192915050565b600081518084526020808501808196508360051b8101915082860160005b85811015611bfc578284038952611bea848351611b88565b98850198935090840190600101611bd2565b5091979650505050505050565b600081518084526020808501945080840160005b83811015611b1d578151151587529582019590820190600101611c1d565b6020815260008251610100806020850152611c5a610120850183611ae4565b91506020850151601f1980868503016040870152611c788483611b28565b93506040870151915080868503016060870152611c958483611bb4565b93506060870151915080868503016080870152611cb28483611bb4565b935060808701519150808685030160a087015250611cd08382611c09565b92505060a085015160c085015260c0850151611cf060e086018215159052565b5060e0850151801515858301525090949350505050565b6001600160a01b038116811461045f57600080fd5b600080600060408486031215611d3157600080fd5b8335611d3c81611d07565b9250602084013567ffffffffffffffff80821115611d5957600080fd5b818601915086601f830112611d6d57600080fd5b813581811115611d7c57600080fd5b876020828501011115611d8e57600080fd5b6020830194508093505050509250925092565b8215158152604060208201526000611dbc6040830184611b88565b949350505050565b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f1916810167ffffffffffffffff81118282101715611e0357611e03611dc4565b604052919050565b600067ffffffffffffffff821115611e2557611e25611dc4565b5060051b60200190565b600082601f830112611e4057600080fd5b81356020611e55611e5083611e0b565b611dda565b82815260059290921b84018101918181019086841115611e7457600080fd5b8286015b84811015611e98578035611e8b81611d07565b8352918301918301611e78565b509695505050505050565b600082601f830112611eb457600080fd5b81356020611ec4611e5083611e0b565b82815260059290921b84018101918181019086841115611ee357600080fd5b8286015b84811015611e985780358352918301918301611ee7565b600067ffffffffffffffff821115611f1857611f18611dc4565b50601f01601f191660200190565b6000611f34611e5084611efe565b9050828152838383011115611f4857600080fd5b828260208301376000602084830101529392505050565b600082601f830112611f7057600080fd5b81356020611f80611e5083611e0b565b82815260059290921b84018101918181019086841115611f9f57600080fd5b8286015b84811015611e9857803567ffffffffffffffff811115611fc35760008081fd5b8701603f81018913611fd55760008081fd5b611fe6898683013560408401611f26565b845250918301918301611fa3565b600082601f83011261200557600080fd5b81356020612015611e5083611e0b565b82815260059290921b8401810191818101908684111561203457600080fd5b8286015b84811015611e9857803567ffffffffffffffff8111156120585760008081fd5b8701603f8101891361206a5760008081fd5b61207b898683013560408401611f26565b845250918301918301612038565b801515811461045f57600080fd5b600082601f8301126120a857600080fd5b813560206120b8611e5083611e0b565b82815260059290921b840181019181810190868411156120d757600080fd5b8286015b84811015611e985780356120ee81612089565b83529183019183016120db565b600080600080600060a0868803121561211357600080fd5b853567ffffffffffffffff8082111561212b57600080fd5b61213789838a01611e2f565b9650602088013591508082111561214d57600080fd5b61215989838a01611ea3565b9550604088013591508082111561216f57600080fd5b61217b89838a01611f5f565b9450606088013591508082111561219157600080fd5b61219d89838a01611ff4565b935060808801359150808211156121b357600080fd5b506121c088828901612097565b9150509295509295909350565b6000602082840312156121df57600080fd5b81356121ea81611d07565b9392505050565b634e487b7160e01b600052603260045260246000fd5b600181811c9082168061221b57607f821691505b6020821081141561079d57634e487b7160e01b600052602260045260246000fd5b6000821982111561225d57634e487b7160e01b600052601160045260246000fd5b500190565b8183823760009101908152919050565b60006020828403121561228457600080fd5b81516121ea81611d07565b6020815260006121ea6020830184611bb4565b60018060a01b038716815285602082015260c0604082015260006122c960c0830187611b88565b82810360608401526122db8187611b88565b6080840195909552505090151560a090910152949350505050565b60c0808252875190820181905260009060209060e0840190828b01845b828110156123385781516001600160a01b031684529284019290840190600101612313565b5050508381038285015261234c818a611b28565b91505082810360408401526123618188611bb4565b905082810360608401526123758187611bb4565b905082810360808401526123898186611c09565b9150508260a0830152979650505050505050565b6001600160e01b03198316815281516000906123c0816004850160208701611b58565b919091016004019392505050565b6001600160a01b0383168152604060208201819052600090611dbc90830184611b88565b6000806040838503121561240557600080fd5b825161241081612089565b602084015190925067ffffffffffffffff81111561242d57600080fd5b8301601f8101851361243e57600080fd5b805161244c611e5082611efe565b81815286602083850101111561246157600080fd5b612472826020830160208601611b58565b8093505050509250929050565b60008251612491818460208701611b58565b919091019291505056fea26469706673582212203a6ac9c0481ab3d9520b931410e440829aecdacacf855023a51ad521e9fa6dab64736f6c634300080a0033000000000000000000000000420000000000000000000000000000000000000700000000000000000000000032a0e5828b62aab932362a4816ae03b860b65e8300000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000015180000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000
Deployed Bytecode
0x6080604052600436106101345760003560e01c8063b3c82e92116100ab578063d9a4cbdf1161006f578063d9a4cbdf14610361578063dbd1838814610381578063e471b02614610396578063e68a5c3d146103b6578063fc525395146103d6578063fe0d94c1146103f657600080fd5b8063b3c82e92146102cb578063b68df16d146102f8578063c3a7688614610319578063cebc9a8214610337578063d89aac391461034c57600080fd5b80635ab98d5a116100fd5780635ab98d5a146101cc57806364d62353146101ec5780636a4df1df1461020c5780638533f33714610258578063a75b87d21461026d578063b1fc87961461028b57600080fd5b80625c33e11461013957806303c276211461013b578063083a73a21461015f57806340e58ee51461017f5780635748c1301461019f575b600080fd5b005b34801561014757600080fd5b506002545b6040519081526020015b60405180910390f35b34801561016b57600080fd5b5061013961017a366004611a8d565b610409565b34801561018b57600080fd5b5061013961019a366004611a8d565b610462565b3480156101ab57600080fd5b506101bf6101ba366004611a8d565b61070d565b6040516101569190611abc565b3480156101d857600080fd5b506101396101e7366004611a8d565b6107a3565b3480156101f857600080fd5b50610139610207366004611a8d565b6107ef565b34801561021857600080fd5b506102407f000000000000000000000000420000000000000000000000000000000000000781565b6040516001600160a01b039091168152602001610156565b34801561026457600080fd5b5060055461014c565b34801561027957600080fd5b506004546001600160a01b0316610240565b34801561029757600080fd5b506102bb6102a6366004611a8d565b60009081526007602052604090205460ff1690565b6040519015158152602001610156565b3480156102d757600080fd5b506102eb6102e6366004611a8d565b610821565b6040516101569190611c3b565b61030b610306366004611d1c565b610b94565b604051610156929190611da1565b34801561032557600080fd5b506008546001600160a01b0316610240565b34801561034357600080fd5b5060005461014c565b34801561035857600080fd5b5060035461014c565b34801561036d57600080fd5b5061013961037c3660046120fb565b610c25565b34801561038d57600080fd5b5060015461014c565b3480156103a257600080fd5b506101396103b1366004611a8d565b610d26565b3480156103c257600080fd5b506101396103d13660046121cd565b610d71565b3480156103e257600080fd5b506101396103f13660046121cd565b610dfa565b610139610404366004611a8d565b610e23565b33301461042957604051631dbf5f2360e01b815260040160405180910390fd5b600254811161044b5760405163cb2f2b2360e01b815260040160405180910390fd5b6104548161114b565b61045f60005461118c565b50565b6004546001600160a01b0316331461048d576040516377b6878160e11b815260040160405180910390fd5b60006104988261070d565b60038111156104a9576104a9611aa6565b146104c75760405163050ac78b60e11b815260040160405180910390fd5b60008181526006602081905260408220908101805461ff001916610100179055805490915b818110156106dc576106d483600001828154811061050c5761050c6121f1565b6000918252602090912001546001850180546001600160a01b03909216918490811061053a5761053a6121f1565b906000526020600020015485600201848154811061055a5761055a6121f1565b90600052602060002001805461056f90612207565b80601f016020809104026020016040519081016040528092919081815260200182805461059b90612207565b80156105e85780601f106105bd576101008083540402835291602001916105e8565b820191906000526020600020905b8154815290600101906020018083116105cb57829003601f168201915b5050505050866003018581548110610602576106026121f1565b90600052602060002001805461061790612207565b80601f016020809104026020016040519081016040528092919081815260200182805461064390612207565b80156106905780601f1061066557610100808354040283529160200191610690565b820191906000526020600020905b81548152906001019060200180831161067357829003601f168201915b505050505087600501548860040187815481106106af576106af6121f1565b90600052602060002090602091828204019190069054906101000a900460ff166111d2565b6001016104ec565b5060405183907f0743c673685efcbf3db8591d9e1d98336bc844fe4f4599e6f7efb6d71c02563490600090a2505050565b600081600554116107315760405163e5bc0e7b60e01b815260040160405180910390fd5b600082815260066020819052604090912090810154610100900460ff161561075c5750600292915050565b600681015460ff16156107725750600192915050565b6001548160050154610784919061223c565b4211156107945750600392915050565b50600092915050565b50919050565b3330146107c357604051631dbf5f2360e01b815260040160405180910390fd5b6102588110156107e6576040516301f6f9e560e71b815260040160405180910390fd5b61045f81611224565b33301461080f57604051631dbf5f2360e01b815260040160405180910390fd5b6108188161118c565b61045f81611265565b61086d6040518061010001604052806060815260200160608152602001606081526020016060815260200160608152602001600081526020016000151581526020016000151581525090565b6000828152600660209081526040918290208251815461012093810282018401909452610100810184815290939192849284918401828280156108d957602002820191906000526020600020905b81546001600160a01b031681526001909101906020018083116108bb575b505050505081526020016001820180548060200260200160405190810160405280929190818152602001828054801561093157602002820191906000526020600020905b81548152602001906001019080831161091d575b5050505050815260200160028201805480602002602001604051908101604052809291908181526020016000905b82821015610a0b57838290600052602060002001805461097e90612207565b80601f01602080910402602001604051908101604052809291908181526020018280546109aa90612207565b80156109f75780601f106109cc576101008083540402835291602001916109f7565b820191906000526020600020905b8154815290600101906020018083116109da57829003601f168201915b50505050508152602001906001019061095f565b50505050815260200160038201805480602002602001604051908101604052809291908181526020016000905b82821015610ae4578382906000526020600020018054610a5790612207565b80601f0160208091040260200160405190810160405280929190818152602001828054610a8390612207565b8015610ad05780601f10610aa557610100808354040283529160200191610ad0565b820191906000526020600020905b815481529060010190602001808311610ab357829003601f168201915b505050505081526020019060010190610a38565b50505050815260200160048201805480602002602001604051908101604052809291908181526020018280548015610b5b57602002820191906000526020600020906000905b825461010083900a900460ff161515815260206001928301818104948501949093039092029101808411610b2a5790505b50505091835250506005820154602082015260069091015460ff8082161515604084015261010090910416151560609091015292915050565b60006060333014610bb857604051631dbf5f2360e01b815260040160405180910390fd5b60006060866001600160a01b03168686604051610bd6929190612262565b600060405180830381855af49150503d8060008114610c11576040519150601f19603f3d011682016040523d82523d6000602084013e610c16565b606091505b50909890975095505050505050565b336001600160a01b037f000000000000000000000000420000000000000000000000000000000000000716141580610cf4575060085460408051636e296e4560e01b815290516001600160a01b03928316927f00000000000000000000000042000000000000000000000000000000000000071691636e296e459160048083019260209291908290030181865afa158015610cc4573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ce89190612272565b6001600160a01b031614155b15610d12576040516359e8359960e01b815260040160405180910390fd5b610d1f85858585856112a6565b5050505050565b333014610d4657604051631dbf5f2360e01b815260040160405180910390fd5b6003548110610d68576040516301b1029b60e61b815260040160405180910390fd5b61045481611513565b333014610d9157604051631dbf5f2360e01b815260040160405180910390fd5b600854604080516001600160a01b03928316815291831660208301527f01dd0ca50426f21c1b37ce7f3e95eef45b4a55bc5da80a7b67b2c65a7463caf0910160405180910390a1600880546001600160a01b0319166001600160a01b0392909216919091179055565b333014610e1a57604051631dbf5f2360e01b815260040160405180910390fd5b61045f81611554565b6000610e2e8261070d565b6003811115610e3f57610e3f611aa6565b14610e5d5760405163050ac78b60e11b815260040160405180910390fd5b60008181526006602052604090206005810154421015610e9057604051635192dd5560e01b815260040160405180910390fd5b60068101805460ff19166001179055805460008167ffffffffffffffff811115610ebc57610ebc611dc4565b604051908082528060200260200182016040528015610eef57816020015b6060815260200190600190039081610eda5790505b50905060005b82811015611102576110dd846000018281548110610f1557610f156121f1565b6000918252602090912001546001860180546001600160a01b039092169184908110610f4357610f436121f1565b9060005260206000200154866002018481548110610f6357610f636121f1565b906000526020600020018054610f7890612207565b80601f0160208091040260200160405190810160405280929190818152602001828054610fa490612207565b8015610ff15780601f10610fc657610100808354040283529160200191610ff1565b820191906000526020600020905b815481529060010190602001808311610fd457829003601f168201915b505050505087600301858154811061100b5761100b6121f1565b90600052602060002001805461102090612207565b80601f016020809104026020016040519081016040528092919081815260200182805461104c90612207565b80156110995780601f1061106e57610100808354040283529160200191611099565b820191906000526020600020905b81548152906001019060200180831161107c57829003601f168201915b505050505088600501548960040187815481106110b8576110b86121f1565b90600052602060002090602091828204019190069054906101000a900460ff166115bd565b8282815181106110ef576110ef6121f1565b6020908102919091010152600101610ef5565b50336001600160a01b0316847ff5efc4bb09a12b6c9561a7e7ab02938a72a4351316b473d574fdaaa89c43eb9a8360405161113d919061228f565b60405180910390a350505050565b60035460408051918252602082018390527faf46013422363beb5e6f00ab923cffe3574670494c864de2828b9d7c201fdde5910160405180910390a1600355565b6002548110156111af576040516361759e6560e01b815260040160405180910390fd5b60035481111561045f576040516386dac63560e01b815260040160405180910390fd5b60008686868686866040516020016111ef969594939291906122a2565b60408051601f198184030181529181528151602092830120600090815260079092529020805460ff1916905550505050505050565b60015460408051918252602082018390527f9953f3a71052edcd4ae7a0f97302839d1dda32ab93c1039207c91c866b094f72910160405180910390a1600155565b60005460408051918252602082018390527f43de56b886294fc29767e51a88b5c67fd24aefebc5ddf813b1d9b91b1df38444910160405180910390a1600055565b84516112c557604051636a8e3e9360e11b815260040160405180910390fd5b84518451811415806112d8575083518114155b806112e4575082518114155b806112f0575081518114155b1561130e57604051630d10f63b60e01b815260040160405180910390fd5b6005546000805461131f904261223c565b600580546001019055905060005b83811015611440576000898281518110611349576113496121f1565b6020026020010151898381518110611363576113636121f1565b602002602001015189848151811061137d5761137d6121f1565b6020026020010151898581518110611397576113976121f1565b6020026020010151868a87815181106113b2576113b26121f1565b60200260200101516040516020016113cf969594939291906122a2565b6040516020818303038152906040528051906020012090506114008160009081526007602052604090205460ff1690565b1561141e57604051633b2f04e360e21b815260040160405180910390fd5b6000908152600760205260409020805460ff191660019081179091550161132d565b506000828152600660209081526040909120895190916114649183918c01906117a3565b50875161147a90600183019060208b0190611808565b50865161149090600283019060208a0190611843565b5085516114a6906003830190602089019061189c565b5084516114bc90600483019060208801906118f5565b50818160050181905550827f0325966a4aa089b42f4766ec96f599405102bb309e065f24874aff59082dbc8b8a8a8a8a8a88604051611500969594939291906122f6565b60405180910390a2505050505050505050565b60025460408051918252602082018390527fc534cdcbe9b52100810d787afd57e4174322776fcb58872ea706f23e9319fa8d910160405180910390a1600255565b600454604080516001600160a01b03928316815291831660208301527f85bd8788d3c4a160f0f6254229589f137d5633a870dcb46f99ffe07b4da1894b910160405180910390a1600480546001600160a01b0319166001600160a01b0392909216919091179055565b6060854710156115e057604051631e9acf1760e31b815260040160405180910390fd5b60008787878787876040516020016115fd969594939291906122a2565b60408051601f198184030181529181528151602092830120600081815260079093529120805460ff19169055865190915060609061163c575084611668565b86805190602001208660405160200161165692919061239d565b60405160208183030381529060405290505b6000606085156116ea5760405163b68df16d60e01b8152309063b68df16d908c90611699908f9088906004016123ce565b60006040518083038185885af11580156116b7573d6000803e3d6000fd5b50505050506040513d6000823e601f3d908101601f191682016040526116e091908101906123f2565b909250905061174c565b8a6001600160a01b03168a84604051611703919061247f565b60006040518083038185875af1925050503d8060008114611740576040519150601f19603f3d011682016040523d82523d6000602084013e611745565b606091505b5090925090505b6117568282611765565b9b9a5050505050505050505050565b6060821561177457508061179d565b8151156117845781518083602001fd5b6040516332f63ed360e21b815260040160405180910390fd5b92915050565b8280548282559060005260206000209081019282156117f8579160200282015b828111156117f857825182546001600160a01b0319166001600160a01b039091161782556020909201916001909101906117c3565b50611804929150611991565b5090565b8280548282559060005260206000209081019282156117f8579160200282015b828111156117f8578251825591602001919060010190611828565b828054828255906000526020600020908101928215611890579160200282015b8281111561189057825180516118809184916020909101906119a6565b5091602001919060010190611863565b50611804929150611a19565b8280548282559060005260206000209081019282156118e9579160200282015b828111156118e957825180516118d99184916020909101906119a6565b50916020019190600101906118bc565b50611804929150611a36565b82805482825590600052602060002090601f016020900481019282156117f85791602002820160005b8382111561195b57835183826101000a81548160ff021916908315150217905550926020019260010160208160000104928301926001030261191e565b80156119885782816101000a81549060ff021916905560010160208160000104928301926001030261195b565b50506118049291505b5b808211156118045760008155600101611992565b8280546119b290612207565b90600052602060002090601f0160209004810192826119d457600085556117f8565b82601f106119ed57805160ff19168380011785556117f8565b828001600101855582156117f857918201828111156117f8578251825591602001919060010190611828565b80821115611804576000611a2d8282611a53565b50600101611a19565b80821115611804576000611a4a8282611a53565b50600101611a36565b508054611a5f90612207565b6000825580601f10611a6f575050565b601f01602090049060005260206000209081019061045f9190611991565b600060208284031215611a9f57600080fd5b5035919050565b634e487b7160e01b600052602160045260246000fd5b6020810160048310611ade57634e487b7160e01b600052602160045260246000fd5b91905290565b600081518084526020808501945080840160005b83811015611b1d5781516001600160a01b031687529582019590820190600101611af8565b509495945050505050565b600081518084526020808501945080840160005b83811015611b1d57815187529582019590820190600101611b3c565b60005b83811015611b73578181015183820152602001611b5b565b83811115611b82576000848401525b50505050565b60008151808452611ba0816020860160208601611b58565b601f01601f19169290920160200192915050565b600081518084526020808501808196508360051b8101915082860160005b85811015611bfc578284038952611bea848351611b88565b98850198935090840190600101611bd2565b5091979650505050505050565b600081518084526020808501945080840160005b83811015611b1d578151151587529582019590820190600101611c1d565b6020815260008251610100806020850152611c5a610120850183611ae4565b91506020850151601f1980868503016040870152611c788483611b28565b93506040870151915080868503016060870152611c958483611bb4565b93506060870151915080868503016080870152611cb28483611bb4565b935060808701519150808685030160a087015250611cd08382611c09565b92505060a085015160c085015260c0850151611cf060e086018215159052565b5060e0850151801515858301525090949350505050565b6001600160a01b038116811461045f57600080fd5b600080600060408486031215611d3157600080fd5b8335611d3c81611d07565b9250602084013567ffffffffffffffff80821115611d5957600080fd5b818601915086601f830112611d6d57600080fd5b813581811115611d7c57600080fd5b876020828501011115611d8e57600080fd5b6020830194508093505050509250925092565b8215158152604060208201526000611dbc6040830184611b88565b949350505050565b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f1916810167ffffffffffffffff81118282101715611e0357611e03611dc4565b604052919050565b600067ffffffffffffffff821115611e2557611e25611dc4565b5060051b60200190565b600082601f830112611e4057600080fd5b81356020611e55611e5083611e0b565b611dda565b82815260059290921b84018101918181019086841115611e7457600080fd5b8286015b84811015611e98578035611e8b81611d07565b8352918301918301611e78565b509695505050505050565b600082601f830112611eb457600080fd5b81356020611ec4611e5083611e0b565b82815260059290921b84018101918181019086841115611ee357600080fd5b8286015b84811015611e985780358352918301918301611ee7565b600067ffffffffffffffff821115611f1857611f18611dc4565b50601f01601f191660200190565b6000611f34611e5084611efe565b9050828152838383011115611f4857600080fd5b828260208301376000602084830101529392505050565b600082601f830112611f7057600080fd5b81356020611f80611e5083611e0b565b82815260059290921b84018101918181019086841115611f9f57600080fd5b8286015b84811015611e9857803567ffffffffffffffff811115611fc35760008081fd5b8701603f81018913611fd55760008081fd5b611fe6898683013560408401611f26565b845250918301918301611fa3565b600082601f83011261200557600080fd5b81356020612015611e5083611e0b565b82815260059290921b8401810191818101908684111561203457600080fd5b8286015b84811015611e9857803567ffffffffffffffff8111156120585760008081fd5b8701603f8101891361206a5760008081fd5b61207b898683013560408401611f26565b845250918301918301612038565b801515811461045f57600080fd5b600082601f8301126120a857600080fd5b813560206120b8611e5083611e0b565b82815260059290921b840181019181810190868411156120d757600080fd5b8286015b84811015611e985780356120ee81612089565b83529183019183016120db565b600080600080600060a0868803121561211357600080fd5b853567ffffffffffffffff8082111561212b57600080fd5b61213789838a01611e2f565b9650602088013591508082111561214d57600080fd5b61215989838a01611ea3565b9550604088013591508082111561216f57600080fd5b61217b89838a01611f5f565b9450606088013591508082111561219157600080fd5b61219d89838a01611ff4565b935060808801359150808211156121b357600080fd5b506121c088828901612097565b9150509295509295909350565b6000602082840312156121df57600080fd5b81356121ea81611d07565b9392505050565b634e487b7160e01b600052603260045260246000fd5b600181811c9082168061221b57607f821691505b6020821081141561079d57634e487b7160e01b600052602260045260246000fd5b6000821982111561225d57634e487b7160e01b600052601160045260246000fd5b500190565b8183823760009101908152919050565b60006020828403121561228457600080fd5b81516121ea81611d07565b6020815260006121ea6020830184611bb4565b60018060a01b038716815285602082015260c0604082015260006122c960c0830187611b88565b82810360608401526122db8187611b88565b6080840195909552505090151560a090910152949350505050565b60c0808252875190820181905260009060209060e0840190828b01845b828110156123385781516001600160a01b031684529284019290840190600101612313565b5050508381038285015261234c818a611b28565b91505082810360408401526123618188611bb4565b905082810360608401526123758187611bb4565b905082810360808401526123898186611c09565b9150508260a0830152979650505050505050565b6001600160e01b03198316815281516000906123c0816004850160208701611b58565b919091016004019392505050565b6001600160a01b0383168152604060208201819052600090611dbc90830184611b88565b6000806040838503121561240557600080fd5b825161241081612089565b602084015190925067ffffffffffffffff81111561242d57600080fd5b8301601f8101851361243e57600080fd5b805161244c611e5082611efe565b81815286602083850101111561246157600080fd5b612472826020830160208601611b58565b8093505050509250929050565b60008251612491818460208701611b58565b919091019291505056fea26469706673582212203a6ac9c0481ab3d9520b931410e440829aecdacacf855023a51ad521e9fa6dab64736f6c634300080a0033
Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)
000000000000000000000000420000000000000000000000000000000000000700000000000000000000000032a0e5828b62aab932362a4816ae03b860b65e8300000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000015180000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000
-----Decoded View---------------
Arg [0] : ovmL2CrossDomainMessenger (address): 0x4200000000000000000000000000000000000007
Arg [1] : ethereumGovernanceExecutor (address): 0x32A0E5828B62AAb932362a4816ae03b860b65e83
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] : 00000000000000000000000032a0e5828b62aab932362a4816ae03b860b65e83
Arg [2] : 0000000000000000000000000000000000000000000000000000000000000000
Arg [3] : 0000000000000000000000000000000000000000000000000000000000015180
Arg [4] : 0000000000000000000000000000000000000000000000000000000000000000
Arg [5] : 0000000000000000000000000000000000000000000000000000000000000001
Arg [6] : 0000000000000000000000000000000000000000000000000000000000000000
Loading...
Loading
Loading...
Loading
Loading...
Loading
Loading...
Loading
[ Download: CSV Export ]
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.