Source Code
Overview
FRAX Balance | FXTL Balance
0 FRAX | 0 FXTL
FRAX Value
$0.00
Cross-Chain Transactions
Loading...
Loading
Contract Name:
MockFXBFactory
Compiler Version
v0.8.24+commit.e11b9ed9
Optimization Enabled:
No with 200 runs
Other Settings:
london EvmVersion
Contract Source Code (Solidity Standard Json-Input format)
// SPDX-License-Identifier: ISC
pragma solidity ^0.8.23;
import { Timelock2Step } from "frax-std/access-control/v2/Timelock2Step.sol";
import { EnumerableSet } from "@openzeppelin/contracts/utils/structs/EnumerableSet.sol";
/// @notice For fraxtal as no FXB factory exists for the AMO to validate FXB addresses on fraxtal
contract MockFXBFactory is Timelock2Step {
using EnumerableSet for EnumerableSet.AddressSet;
EnumerableSet.AddressSet internal _set;
constructor(address _timelock) Timelock2Step(_timelock) {
_set.add(0x8e9C334afc76106F08E0383907F4Fca9bB10BA3e);
_set.add(0xa71bB8c79dc8FfA90A6Dd711aA9Fbe5114c19cba);
_set.add(0x758094A71a39De49626FE25B86631ED944558653);
}
function add(address fxb) external {
_requireSenderIsTimelock();
_set.add(fxb);
}
function remove(address fxb) external {
_requireSenderIsTimelock();
_set.remove(fxb);
}
/// @notice required for `FxbAMO.createAuctionContract()`
function isFxb(address fxb) external view returns (bool) {
return _set.contains(fxb);
}
/// @dev maintains interface support of real FXBFactory
function fxbs() external view returns (address[] memory) {
return _set.values();
}
}// SPDX-License-Identifier: ISC
pragma solidity >=0.8.0;
// ====================================================================
// | ______ _______ |
// | / _____________ __ __ / ____(_____ ____ _____ ________ |
// | / /_ / ___/ __ `| |/_/ / /_ / / __ \/ __ `/ __ \/ ___/ _ \ |
// | / __/ / / / /_/ _> < / __/ / / / / / /_/ / / / / /__/ __/ |
// | /_/ /_/ \__,_/_/|_| /_/ /_/_/ /_/\__,_/_/ /_/\___/\___/ |
// | |
// ====================================================================
// ========================== Timelock2Step ===========================
// ====================================================================
// Frax Finance: https://github.com/FraxFinance
// Primary Author
// Drake Evans: https://github.com/DrakeEvans
// Reviewers
// Dennis: https://github.com/denett
// ====================================================================
/// @title Timelock2Step
/// @author Drake Evans (Frax Finance) https://github.com/drakeevans
/// @dev Inspired by OpenZeppelin's Ownable2Step contract
/// @notice An abstract contract which contains 2-step transfer and renounce logic for a timelock address
abstract contract Timelock2Step {
/// @notice The pending timelock address
address public pendingTimelockAddress;
/// @notice The current timelock address
address public timelockAddress;
constructor(address _timelockAddress) {
timelockAddress = _timelockAddress;
}
// ============================================================================================
// Functions: External Functions
// ============================================================================================
/// @notice The ```transferTimelock``` function initiates the timelock transfer
/// @dev Must be called by the current timelock
/// @param _newTimelock The address of the nominated (pending) timelock
function transferTimelock(address _newTimelock) external virtual {
_requireSenderIsTimelock();
_transferTimelock(_newTimelock);
}
/// @notice The ```acceptTransferTimelock``` function completes the timelock transfer
/// @dev Must be called by the pending timelock
function acceptTransferTimelock() external virtual {
_requireSenderIsPendingTimelock();
_acceptTransferTimelock();
}
/// @notice The ```renounceTimelock``` function renounces the timelock after setting pending timelock to current timelock
/// @dev Pending timelock must be set to current timelock before renouncing, creating a 2-step renounce process
function renounceTimelock() external virtual {
_requireSenderIsTimelock();
_requireSenderIsPendingTimelock();
_transferTimelock(address(0));
_setTimelock(address(0));
}
// ============================================================================================
// Functions: Internal Actions
// ============================================================================================
/// @notice The ```_transferTimelock``` function initiates the timelock transfer
/// @dev This function is to be implemented by a public function
/// @param _newTimelock The address of the nominated (pending) timelock
function _transferTimelock(address _newTimelock) internal {
pendingTimelockAddress = _newTimelock;
emit TimelockTransferStarted(timelockAddress, _newTimelock);
}
/// @notice The ```_acceptTransferTimelock``` function completes the timelock transfer
/// @dev This function is to be implemented by a public function
function _acceptTransferTimelock() internal {
pendingTimelockAddress = address(0);
_setTimelock(msg.sender);
}
/// @notice The ```_setTimelock``` function sets the timelock address
/// @dev This function is to be implemented by a public function
/// @param _newTimelock The address of the new timelock
function _setTimelock(address _newTimelock) internal {
emit TimelockTransferred(timelockAddress, _newTimelock);
timelockAddress = _newTimelock;
}
// ============================================================================================
// Functions: Internal Checks
// ============================================================================================
/// @notice The ```_isTimelock``` function checks if _address is current timelock address
/// @param _address The address to check against the timelock
/// @return Whether or not msg.sender is current timelock address
function _isTimelock(address _address) internal view returns (bool) {
return _address == timelockAddress;
}
/// @notice The ```_requireIsTimelock``` function reverts if _address is not current timelock address
/// @param _address The address to check against the timelock
function _requireIsTimelock(address _address) internal view {
if (!_isTimelock(_address)) revert AddressIsNotTimelock(timelockAddress, _address);
}
/// @notice The ```_requireSenderIsTimelock``` function reverts if msg.sender is not current timelock address
/// @dev This function is to be implemented by a public function
function _requireSenderIsTimelock() internal view {
_requireIsTimelock(msg.sender);
}
/// @notice The ```_isPendingTimelock``` function checks if the _address is pending timelock address
/// @dev This function is to be implemented by a public function
/// @param _address The address to check against the pending timelock
/// @return Whether or not _address is pending timelock address
function _isPendingTimelock(address _address) internal view returns (bool) {
return _address == pendingTimelockAddress;
}
/// @notice The ```_requireIsPendingTimelock``` function reverts if the _address is not pending timelock address
/// @dev This function is to be implemented by a public function
/// @param _address The address to check against the pending timelock
function _requireIsPendingTimelock(address _address) internal view {
if (!_isPendingTimelock(_address)) revert AddressIsNotPendingTimelock(pendingTimelockAddress, _address);
}
/// @notice The ```_requirePendingTimelock``` function reverts if msg.sender is not pending timelock address
/// @dev This function is to be implemented by a public function
function _requireSenderIsPendingTimelock() internal view {
_requireIsPendingTimelock(msg.sender);
}
// ============================================================================================
// Functions: Events
// ============================================================================================
/// @notice The ```TimelockTransferStarted``` event is emitted when the timelock transfer is initiated
/// @param previousTimelock The address of the previous timelock
/// @param newTimelock The address of the new timelock
event TimelockTransferStarted(address indexed previousTimelock, address indexed newTimelock);
/// @notice The ```TimelockTransferred``` event is emitted when the timelock transfer is completed
/// @param previousTimelock The address of the previous timelock
/// @param newTimelock The address of the new timelock
event TimelockTransferred(address indexed previousTimelock, address indexed newTimelock);
// ============================================================================================
// Functions: Errors
// ============================================================================================
/// @notice Emitted when timelock is transferred
error AddressIsNotTimelock(address timelockAddress, address actualAddress);
/// @notice Emitted when pending timelock is transferred
error AddressIsNotPendingTimelock(address pendingTimelockAddress, address actualAddress);
}// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts (last updated v5.0.0) (utils/structs/EnumerableSet.sol)
// This file was procedurally generated from scripts/generate/templates/EnumerableSet.js.
pragma solidity ^0.8.20;
/**
* @dev Library for managing
* https://en.wikipedia.org/wiki/Set_(abstract_data_type)[sets] of primitive
* types.
*
* Sets have the following properties:
*
* - Elements are added, removed, and checked for existence in constant time
* (O(1)).
* - Elements are enumerated in O(n). No guarantees are made on the ordering.
*
* ```solidity
* contract Example {
* // Add the library methods
* using EnumerableSet for EnumerableSet.AddressSet;
*
* // Declare a set state variable
* EnumerableSet.AddressSet private mySet;
* }
* ```
*
* As of v3.3.0, sets of type `bytes32` (`Bytes32Set`), `address` (`AddressSet`)
* and `uint256` (`UintSet`) are supported.
*
* [WARNING]
* ====
* Trying to delete such a structure from storage will likely result in data corruption, rendering the structure
* unusable.
* See https://github.com/ethereum/solidity/pull/11843[ethereum/solidity#11843] for more info.
*
* In order to clean an EnumerableSet, you can either remove all elements one by one or create a fresh instance using an
* array of EnumerableSet.
* ====
*/
library EnumerableSet {
// To implement this library for multiple types with as little code
// repetition as possible, we write it in terms of a generic Set type with
// bytes32 values.
// The Set implementation uses private functions, and user-facing
// implementations (such as AddressSet) are just wrappers around the
// underlying Set.
// This means that we can only create new EnumerableSets for types that fit
// in bytes32.
struct Set {
// Storage of set values
bytes32[] _values;
// Position is the index of the value in the `values` array plus 1.
// Position 0 is used to mean a value is not in the set.
mapping(bytes32 value => uint256) _positions;
}
/**
* @dev Add a value to a set. O(1).
*
* Returns true if the value was added to the set, that is if it was not
* already present.
*/
function _add(Set storage set, bytes32 value) private returns (bool) {
if (!_contains(set, value)) {
set._values.push(value);
// The value is stored at length-1, but we add 1 to all indexes
// and use 0 as a sentinel value
set._positions[value] = set._values.length;
return true;
} else {
return false;
}
}
/**
* @dev Removes a value from a set. O(1).
*
* Returns true if the value was removed from the set, that is if it was
* present.
*/
function _remove(Set storage set, bytes32 value) private returns (bool) {
// We cache the value's position to prevent multiple reads from the same storage slot
uint256 position = set._positions[value];
if (position != 0) {
// Equivalent to contains(set, value)
// To delete an element from the _values array in O(1), we swap the element to delete with the last one in
// the array, and then remove the last element (sometimes called as 'swap and pop').
// This modifies the order of the array, as noted in {at}.
uint256 valueIndex = position - 1;
uint256 lastIndex = set._values.length - 1;
if (valueIndex != lastIndex) {
bytes32 lastValue = set._values[lastIndex];
// Move the lastValue to the index where the value to delete is
set._values[valueIndex] = lastValue;
// Update the tracked position of the lastValue (that was just moved)
set._positions[lastValue] = position;
}
// Delete the slot where the moved value was stored
set._values.pop();
// Delete the tracked position for the deleted slot
delete set._positions[value];
return true;
} else {
return false;
}
}
/**
* @dev Returns true if the value is in the set. O(1).
*/
function _contains(Set storage set, bytes32 value) private view returns (bool) {
return set._positions[value] != 0;
}
/**
* @dev Returns the number of values on the set. O(1).
*/
function _length(Set storage set) private view returns (uint256) {
return set._values.length;
}
/**
* @dev Returns the value stored at position `index` in the set. O(1).
*
* Note that there are no guarantees on the ordering of values inside the
* array, and it may change when more values are added or removed.
*
* Requirements:
*
* - `index` must be strictly less than {length}.
*/
function _at(Set storage set, uint256 index) private view returns (bytes32) {
return set._values[index];
}
/**
* @dev Return the entire set in an array
*
* WARNING: This operation will copy the entire storage to memory, which can be quite expensive. This is designed
* to mostly be used by view accessors that are queried without any gas fees. Developers should keep in mind that
* this function has an unbounded cost, and using it as part of a state-changing function may render the function
* uncallable if the set grows to a point where copying to memory consumes too much gas to fit in a block.
*/
function _values(Set storage set) private view returns (bytes32[] memory) {
return set._values;
}
// Bytes32Set
struct Bytes32Set {
Set _inner;
}
/**
* @dev Add a value to a set. O(1).
*
* Returns true if the value was added to the set, that is if it was not
* already present.
*/
function add(Bytes32Set storage set, bytes32 value) internal returns (bool) {
return _add(set._inner, value);
}
/**
* @dev Removes a value from a set. O(1).
*
* Returns true if the value was removed from the set, that is if it was
* present.
*/
function remove(Bytes32Set storage set, bytes32 value) internal returns (bool) {
return _remove(set._inner, value);
}
/**
* @dev Returns true if the value is in the set. O(1).
*/
function contains(Bytes32Set storage set, bytes32 value) internal view returns (bool) {
return _contains(set._inner, value);
}
/**
* @dev Returns the number of values in the set. O(1).
*/
function length(Bytes32Set storage set) internal view returns (uint256) {
return _length(set._inner);
}
/**
* @dev Returns the value stored at position `index` in the set. O(1).
*
* Note that there are no guarantees on the ordering of values inside the
* array, and it may change when more values are added or removed.
*
* Requirements:
*
* - `index` must be strictly less than {length}.
*/
function at(Bytes32Set storage set, uint256 index) internal view returns (bytes32) {
return _at(set._inner, index);
}
/**
* @dev Return the entire set in an array
*
* WARNING: This operation will copy the entire storage to memory, which can be quite expensive. This is designed
* to mostly be used by view accessors that are queried without any gas fees. Developers should keep in mind that
* this function has an unbounded cost, and using it as part of a state-changing function may render the function
* uncallable if the set grows to a point where copying to memory consumes too much gas to fit in a block.
*/
function values(Bytes32Set storage set) internal view returns (bytes32[] memory) {
bytes32[] memory store = _values(set._inner);
bytes32[] memory result;
/// @solidity memory-safe-assembly
assembly {
result := store
}
return result;
}
// AddressSet
struct AddressSet {
Set _inner;
}
/**
* @dev Add a value to a set. O(1).
*
* Returns true if the value was added to the set, that is if it was not
* already present.
*/
function add(AddressSet storage set, address value) internal returns (bool) {
return _add(set._inner, bytes32(uint256(uint160(value))));
}
/**
* @dev Removes a value from a set. O(1).
*
* Returns true if the value was removed from the set, that is if it was
* present.
*/
function remove(AddressSet storage set, address value) internal returns (bool) {
return _remove(set._inner, bytes32(uint256(uint160(value))));
}
/**
* @dev Returns true if the value is in the set. O(1).
*/
function contains(AddressSet storage set, address value) internal view returns (bool) {
return _contains(set._inner, bytes32(uint256(uint160(value))));
}
/**
* @dev Returns the number of values in the set. O(1).
*/
function length(AddressSet storage set) internal view returns (uint256) {
return _length(set._inner);
}
/**
* @dev Returns the value stored at position `index` in the set. O(1).
*
* Note that there are no guarantees on the ordering of values inside the
* array, and it may change when more values are added or removed.
*
* Requirements:
*
* - `index` must be strictly less than {length}.
*/
function at(AddressSet storage set, uint256 index) internal view returns (address) {
return address(uint160(uint256(_at(set._inner, index))));
}
/**
* @dev Return the entire set in an array
*
* WARNING: This operation will copy the entire storage to memory, which can be quite expensive. This is designed
* to mostly be used by view accessors that are queried without any gas fees. Developers should keep in mind that
* this function has an unbounded cost, and using it as part of a state-changing function may render the function
* uncallable if the set grows to a point where copying to memory consumes too much gas to fit in a block.
*/
function values(AddressSet storage set) internal view returns (address[] memory) {
bytes32[] memory store = _values(set._inner);
address[] memory result;
/// @solidity memory-safe-assembly
assembly {
result := store
}
return result;
}
// UintSet
struct UintSet {
Set _inner;
}
/**
* @dev Add a value to a set. O(1).
*
* Returns true if the value was added to the set, that is if it was not
* already present.
*/
function add(UintSet storage set, uint256 value) internal returns (bool) {
return _add(set._inner, bytes32(value));
}
/**
* @dev Removes a value from a set. O(1).
*
* Returns true if the value was removed from the set, that is if it was
* present.
*/
function remove(UintSet storage set, uint256 value) internal returns (bool) {
return _remove(set._inner, bytes32(value));
}
/**
* @dev Returns true if the value is in the set. O(1).
*/
function contains(UintSet storage set, uint256 value) internal view returns (bool) {
return _contains(set._inner, bytes32(value));
}
/**
* @dev Returns the number of values in the set. O(1).
*/
function length(UintSet storage set) internal view returns (uint256) {
return _length(set._inner);
}
/**
* @dev Returns the value stored at position `index` in the set. O(1).
*
* Note that there are no guarantees on the ordering of values inside the
* array, and it may change when more values are added or removed.
*
* Requirements:
*
* - `index` must be strictly less than {length}.
*/
function at(UintSet storage set, uint256 index) internal view returns (uint256) {
return uint256(_at(set._inner, index));
}
/**
* @dev Return the entire set in an array
*
* WARNING: This operation will copy the entire storage to memory, which can be quite expensive. This is designed
* to mostly be used by view accessors that are queried without any gas fees. Developers should keep in mind that
* this function has an unbounded cost, and using it as part of a state-changing function may render the function
* uncallable if the set grows to a point where copying to memory consumes too much gas to fit in a block.
*/
function values(UintSet storage set) internal view returns (uint256[] memory) {
bytes32[] memory store = _values(set._inner);
uint256[] memory result;
/// @solidity memory-safe-assembly
assembly {
result := store
}
return result;
}
}{
"remappings": [
"frax-std/=node_modules/frax-standard-solidity/src/",
"frax-bonds/=node_modules/frax-bonds/src/",
"ds-test/=node_modules/ds-test/src/",
"forge-std/=node_modules/forge-std/src/",
"@openzeppelin/=node_modules/@openzeppelin/",
"frax-standard-solidity/=node_modules/frax-standard-solidity/",
"solidity-bytes-utils/=node_modules/solidity-bytes-utils/"
],
"optimizer": {
"enabled": false,
"runs": 200
},
"metadata": {
"useLiteralContent": false,
"bytecodeHash": "none",
"appendCBOR": false
},
"outputSelection": {
"*": {
"*": [
"evm.bytecode",
"evm.deployedBytecode",
"devdoc",
"userdoc",
"metadata",
"abi"
]
}
},
"evmVersion": "london",
"viaIR": true,
"libraries": {}
}Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
Contract ABI
API[{"inputs":[{"internalType":"address","name":"_timelock","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"inputs":[{"internalType":"address","name":"pendingTimelockAddress","type":"address"},{"internalType":"address","name":"actualAddress","type":"address"}],"name":"AddressIsNotPendingTimelock","type":"error"},{"inputs":[{"internalType":"address","name":"timelockAddress","type":"address"},{"internalType":"address","name":"actualAddress","type":"address"}],"name":"AddressIsNotTimelock","type":"error"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousTimelock","type":"address"},{"indexed":true,"internalType":"address","name":"newTimelock","type":"address"}],"name":"TimelockTransferStarted","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousTimelock","type":"address"},{"indexed":true,"internalType":"address","name":"newTimelock","type":"address"}],"name":"TimelockTransferred","type":"event"},{"inputs":[],"name":"acceptTransferTimelock","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"fxb","type":"address"}],"name":"add","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"fxbs","outputs":[{"internalType":"address[]","name":"","type":"address[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"fxb","type":"address"}],"name":"isFxb","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"pendingTimelockAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"fxb","type":"address"}],"name":"remove","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceTimelock","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"timelockAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_newTimelock","type":"address"}],"name":"transferTimelock","outputs":[],"stateMutability":"nonpayable","type":"function"}]Contract Creation Code
60806040523462000037576200001e6200001862000116565b6200013f565b620000286200003d565b610ef4620005af8239610ef490f35b62000043565b60405190565b600080fd5b601f801991011690565b634e487b7160e01b600052604160045260246000fd5b90620000749062000048565b810190811060018060401b038211176200008d57604052565b62000052565b90620000aa620000a26200003d565b928362000068565b565b600080fd5b60018060a01b031690565b620000c790620000b1565b90565b620000d581620000bc565b03620000dd57565b600080fd5b90505190620000f182620000ca565b565b9060208282031262000110576200010d91600001620000e2565b90565b620000ac565b62000139620014a3803803806200012d8162000093565b928339810190620000f3565b90565b90565b6200014a9062000260565b620001766200015a60026200013c565b738e9c334afc76106f08e0383907f4fca9bb10ba3e90620002cf565b50620001a36200018760026200013c565b73a71bb8c79dc8ffa90a6dd711aa9fbe5114c19cba90620002cf565b50620001d0620001b460026200013c565b73758094a71a39de49626fe25b86631ed94455865390620002cf565b50565b60001b90565b90620001ec60018060a01b0391620001d3565b9181191691161790565b90565b620002126200020c6200021892620000b1565b620001f6565b620000b1565b90565b6200022690620001f9565b90565b62000234906200021b565b90565b90565b90620002546200024e6200025c9262000229565b62000237565b8254620001d9565b9055565b6200026d9060016200023a565b565b600090565b6200027f90620001f9565b90565b90565b6200029e62000298620002a492620000b1565b620001f6565b62000282565b90565b90565b620002c3620002bd620002c99262000282565b620001d3565b620002a7565b90565b90565b906200030d6200030662000300620002fa60006200031396620002f16200026f565b50019462000274565b62000285565b620002aa565b91620002cc565b620004a7565b90565b151590565b90565b600052602060002090565b634e487b7160e01b600052603260045260246000fd5b5490565b6200034e816200033f565b8210156200036c57620003636001916200031e565b91020190600090565b62000329565b1b90565b91906008620003969102916200038f6000198462000372565b9262000372565b9181191691161790565b620003ab90620002a7565b90565b60001c90565b620003bf90620003ae565b90565b9190620003dd620003d7620003e693620003a0565b620003b4565b90835462000376565b9055565b90815491680100000000000000008310156200041f5782620004169160016200041d9501815562000343565b90620003c2565b565b62000052565b5490565b906200043590620003a0565b600052602052604060002090565b906200045260001991620001d3565b9181191691161790565b620004756200046f6200047b9262000282565b620001f6565b62000282565b90565b90565b906200049b62000495620004a3926200045c565b6200047e565b825462000443565b9055565b620004b16200026f565b50620004ca620004c38284906200056e565b1562000316565b60001462000518576200050d6200051392620004f5620004ed600085016200031b565b8290620003ea565b6001620005056000850162000425565b930162000429565b62000481565b600190565b5050600090565b90565b620005316200053791620003ae565b6200051f565b90565b62000546905462000522565b90565b90565b620005656200055f6200056b9262000549565b620001f6565b62000282565b90565b620005929160016200058c92620005846200026f565b500162000429565b6200053a565b620005a9620005a260006200054c565b9162000282565b14159056fe60806040526004361015610013575b610445565b61001e6000356100ad565b806306f09560146100a8578063090f3f50146100a357806309c06db31461009e5780630a3b0a4f1461009957806329092d0e14610094578063450140951461008f5780634bc66f321461008a5780634f8b4ae7146100855763f6ccaad40361000e57610412565b6103df565b6103aa565b610367565b610334565b610301565b6102c6565b6101f0565b610145565b60e01c90565b60405190565b600080fd5b600080fd5b60018060a01b031690565b6100d7906100c3565b90565b6100e3816100ce565b036100ea57565b600080fd5b905035906100fc826100da565b565b9060208282031261011857610115916000016100ef565b90565b6100be565b151590565b61012b9061011d565b9052565b919061014390600060208501940190610122565b565b346101755761017161016061015b3660046100fe565b610452565b6101686100b3565b9182918261012f565b0390f35b6100b9565b600091031261018557565b6100be565b1c90565b60018060a01b031690565b6101a99060086101ae930261018a565b61018e565b90565b906101bc9154610199565b90565b6101ca6000806101b1565b90565b6101d6906100ce565b9052565b91906101ee906000602085019401906101cd565b565b346102205761020036600461017a565b61021c61020b6101bf565b6102136100b3565b918291826101da565b0390f35b6100b9565b5190565b60209181520190565b60200190565b610241906100ce565b9052565b9061025281602093610238565b0190565b60200190565b9061027961027361026c84610225565b8093610229565b92610232565b9060005b81811061028a5750505090565b9091926102a361029d6001928651610245565b94610256565b910191909161027d565b6102c3916020820191600081840391015261025c565b90565b346102f6576102d636600461017a565b6102f26102e1610476565b6102e96100b3565b918291826102ad565b0390f35b6100b9565b60000190565b3461032f576103196103143660046100fe565b610494565b6103216100b3565b8061032b816102fb565b0390f35b6100b9565b346103625761034c6103473660046100fe565b6104b2565b6103546100b3565b8061035e816102fb565b0390f35b6100b9565b346103955761037f61037a3660046100fe565b6104d0565b6103876100b3565b80610391816102fb565b0390f35b6100b9565b6103a760016000906101b1565b90565b346103da576103ba36600461017a565b6103d66103c561039a565b6103cd6100b3565b918291826101da565b0390f35b6100b9565b3461040d576103ef36600461017a565b6103f7610511565b6103ff6100b3565b80610409816102fb565b0390f35b6100b9565b346104405761042236600461017a565b61042a610547565b6104326100b3565b8061043c816102fb565b0390f35b6100b9565b600080fd5b600090565b90565b61046e9061045e61044a565b50610469600261044f565b6105c8565b90565b606090565b61047e610471565b5061049161048c600261044f565b610603565b90565b6104af906104a061062c565b6104aa600261044f565b610637565b50565b6104cd906104be61062c565b6104c8600261044f565b610672565b50565b6104e1906104dc61062c565b61072a565b565b90565b90565b6104fd6104f8610502926104e3565b6104e6565b6100c3565b90565b61050e906104e9565b90565b61051961062c565b61052161078b565b61053361052e6000610505565b61072a565b6105456105406000610505565b610796565b565b61054f61078b565b6105576107f7565b565b61056d610568610572926100c3565b6104e6565b6100c3565b90565b61057e90610559565b90565b90565b61059861059361059d926100c3565b6104e6565b610581565b90565b90565b60001b90565b6105bd6105b86105c292610581565b6105a3565b6105a0565b90565b90565b906105fb6105f56105f06105eb6000610600966105e361044a565b500194610575565b610584565b6105a9565b916105c5565b61087a565b90565b61061b600061062092610614610471565b50016105c5565b6109f1565b610628610471565b5090565b61063533610a2d565b565b9061066a61066461065f61065a600061066f9661065261044a565b500194610575565b610584565b6105a9565b916105c5565b610ba9565b90565b906106a561069f61069a61069560006106aa9661068d61044a565b500194610575565b610584565b6105a9565b916105c5565b610d52565b90565b906106be60018060a01b03916105a3565b9181191691161790565b6106d190610559565b90565b6106dd906106c8565b90565b90565b906106f86106f36106ff926106d4565b6106e0565b82546106ad565b9055565b60001c90565b61071561071a91610703565b61018e565b90565b6107279054610709565b90565b6107358160006106e3565b61073f600161071d565b9061077361076d7f162998b90abc2507f3953aa797827b03a14c42dbd9a35f09feaf02e0d592773a936106d4565b916106d4565b9161077c6100b3565b80610786816102fb565b0390a3565b61079433610e5c565b565b6107f5906107a4600161071d565b816107d86107d27f31b6c5a04b069b6ec1b3cef44c4e7c1eadd721349cda9823d0b1877b3551cdc6936106d4565b916106d4565b916107e16100b3565b806107eb816102fb565b0390a360016106e3565b565b61080b6108046000610505565b60006106e3565b61081433610796565b565b61081f906105a0565b90565b9061082c90610816565b600052602052604060002090565b90565b61084961084e91610703565b61083a565b90565b61085b905461083d565b90565b61087261086d610877926104e3565b6104e6565b610581565b90565b6108989160016108939261088c61044a565b5001610822565b610851565b6108ab6108a5600061085e565b91610581565b141590565b606090565b5490565b60209181520190565b600052602060002090565b6108d6906105a0565b9052565b906108e7816020936108cd565b0190565b90565b6108fa6108ff91610703565b6108eb565b90565b61090c90546108ee565b90565b60010190565b9061093261092c610925846108b5565b80936108b9565b926108c2565b9060005b8181106109435750505090565b90919261096361095d60019261095887610902565b6108da565b9461090f565b9101919091610936565b9061097791610915565b90565b601f801991011690565b634e487b7160e01b600052604160045260246000fd5b906109a49061097a565b810190811067ffffffffffffffff8211176109be57604052565b610984565b906109e36109dc926109d36100b3565b9384809261096d565b038361099a565b565b6109ee906109c3565b90565b6000610a06916109ff6108b0565b50016109e5565b90565b916020610a2b929493610a24604082019660008301906101cd565b01906101cd565b565b610a3f610a3982610ea4565b1561011d565b610a465750565b610a50600161071d565b610a71610a5b6100b3565b92839263110f70ad60e21b845260048401610a09565b0390fd5b90565b600052602060002090565b634e487b7160e01b600052603260045260246000fd5b5490565b610aa681610a99565b821015610ac157610ab8600191610a78565b91020190600090565b610a83565b1b90565b91906008610ae6910291610ae060001984610ac6565b92610ac6565b9181191691161790565b610af990610703565b90565b9190610b12610b0d610b1a93610816565b610af0565b908354610aca565b9055565b9081549168010000000000000000831015610b4e5782610b46916001610b4c95018155610a9d565b90610afc565b565b610984565b90610b60600019916105a3565b9181191691161790565b610b7e610b79610b8392610581565b6104e6565b610581565b90565b90565b90610b9e610b99610ba592610b6a565b610b86565b8254610b53565b9055565b610bb161044a565b50610bc6610bc082849061087a565b1561011d565b600014610c0957610bff610c0492610bea610be360008501610a75565b8290610b1e565b6001610bf8600085016108b5565b9301610822565b610b89565b600190565b5050600090565b90565b610c27610c22610c2c92610c10565b6104e6565b610581565b90565b634e487b7160e01b600052601160045260246000fd5b610c54610c5a91939293610581565b92610581565b8203918211610c6557565b610c2f565b610c73816108b5565b821015610c8e57610c856001916108c2565b91020190600090565b610a83565b610ca3906008610ca8930261018a565b6108eb565b90565b90610cb69154610c93565b90565b634e487b7160e01b600052603160045260246000fd5b600090565b610ce691610ce0610ccf565b91610afc565b565b610cf181610a99565b8015610d12576001900390610d0f610d098383610a9d565b90610cd4565b55565b610cb9565b9190610d2d610d28610d3593610b6a565b610b86565b908354610aca565b9055565b600090565b610d5091610d4a610d39565b91610d17565b565b610d5a61044a565b50610d71610d6c600183018490610822565b610851565b9081610d86610d80600061085e565b91610581565b1415600014610e5457610e06926001610e019284610daf600096610da985610c13565b90610c45565b610dcc610dbd8885016108b5565b610dc686610c13565b90610c45565b81610ddf610dd983610581565b91610581565b03610e0b575b505050610dfb610df6868301610a75565b610ce8565b01610822565b610d3e565b600190565b610e4c92610e3e610e2a610e24610e47948c8901610c6a565b90610cab565b93610e3885918c8901610c6a565b90610afc565b91858501610822565b610b89565b388080610de5565b505050600090565b610e6e610e6882610ecc565b1561011d565b610e755750565b610e7f600061071d565b610ea0610e8a6100b3565b92839263be5a953760e01b845260048401610a09565b0390fd5b610eac61044a565b50610ec8610ec2610ebd600161071d565b6100ce565b916100ce565b1490565b610ed461044a565b50610ef0610eea610ee5600061071d565b6100ce565b916100ce565b1490560000000000000000000000001804c8ab1f12e6bbf3894d4083f33e07309d1f38
Deployed Bytecode
0x60806040526004361015610013575b610445565b61001e6000356100ad565b806306f09560146100a8578063090f3f50146100a357806309c06db31461009e5780630a3b0a4f1461009957806329092d0e14610094578063450140951461008f5780634bc66f321461008a5780634f8b4ae7146100855763f6ccaad40361000e57610412565b6103df565b6103aa565b610367565b610334565b610301565b6102c6565b6101f0565b610145565b60e01c90565b60405190565b600080fd5b600080fd5b60018060a01b031690565b6100d7906100c3565b90565b6100e3816100ce565b036100ea57565b600080fd5b905035906100fc826100da565b565b9060208282031261011857610115916000016100ef565b90565b6100be565b151590565b61012b9061011d565b9052565b919061014390600060208501940190610122565b565b346101755761017161016061015b3660046100fe565b610452565b6101686100b3565b9182918261012f565b0390f35b6100b9565b600091031261018557565b6100be565b1c90565b60018060a01b031690565b6101a99060086101ae930261018a565b61018e565b90565b906101bc9154610199565b90565b6101ca6000806101b1565b90565b6101d6906100ce565b9052565b91906101ee906000602085019401906101cd565b565b346102205761020036600461017a565b61021c61020b6101bf565b6102136100b3565b918291826101da565b0390f35b6100b9565b5190565b60209181520190565b60200190565b610241906100ce565b9052565b9061025281602093610238565b0190565b60200190565b9061027961027361026c84610225565b8093610229565b92610232565b9060005b81811061028a5750505090565b9091926102a361029d6001928651610245565b94610256565b910191909161027d565b6102c3916020820191600081840391015261025c565b90565b346102f6576102d636600461017a565b6102f26102e1610476565b6102e96100b3565b918291826102ad565b0390f35b6100b9565b60000190565b3461032f576103196103143660046100fe565b610494565b6103216100b3565b8061032b816102fb565b0390f35b6100b9565b346103625761034c6103473660046100fe565b6104b2565b6103546100b3565b8061035e816102fb565b0390f35b6100b9565b346103955761037f61037a3660046100fe565b6104d0565b6103876100b3565b80610391816102fb565b0390f35b6100b9565b6103a760016000906101b1565b90565b346103da576103ba36600461017a565b6103d66103c561039a565b6103cd6100b3565b918291826101da565b0390f35b6100b9565b3461040d576103ef36600461017a565b6103f7610511565b6103ff6100b3565b80610409816102fb565b0390f35b6100b9565b346104405761042236600461017a565b61042a610547565b6104326100b3565b8061043c816102fb565b0390f35b6100b9565b600080fd5b600090565b90565b61046e9061045e61044a565b50610469600261044f565b6105c8565b90565b606090565b61047e610471565b5061049161048c600261044f565b610603565b90565b6104af906104a061062c565b6104aa600261044f565b610637565b50565b6104cd906104be61062c565b6104c8600261044f565b610672565b50565b6104e1906104dc61062c565b61072a565b565b90565b90565b6104fd6104f8610502926104e3565b6104e6565b6100c3565b90565b61050e906104e9565b90565b61051961062c565b61052161078b565b61053361052e6000610505565b61072a565b6105456105406000610505565b610796565b565b61054f61078b565b6105576107f7565b565b61056d610568610572926100c3565b6104e6565b6100c3565b90565b61057e90610559565b90565b90565b61059861059361059d926100c3565b6104e6565b610581565b90565b90565b60001b90565b6105bd6105b86105c292610581565b6105a3565b6105a0565b90565b90565b906105fb6105f56105f06105eb6000610600966105e361044a565b500194610575565b610584565b6105a9565b916105c5565b61087a565b90565b61061b600061062092610614610471565b50016105c5565b6109f1565b610628610471565b5090565b61063533610a2d565b565b9061066a61066461065f61065a600061066f9661065261044a565b500194610575565b610584565b6105a9565b916105c5565b610ba9565b90565b906106a561069f61069a61069560006106aa9661068d61044a565b500194610575565b610584565b6105a9565b916105c5565b610d52565b90565b906106be60018060a01b03916105a3565b9181191691161790565b6106d190610559565b90565b6106dd906106c8565b90565b90565b906106f86106f36106ff926106d4565b6106e0565b82546106ad565b9055565b60001c90565b61071561071a91610703565b61018e565b90565b6107279054610709565b90565b6107358160006106e3565b61073f600161071d565b9061077361076d7f162998b90abc2507f3953aa797827b03a14c42dbd9a35f09feaf02e0d592773a936106d4565b916106d4565b9161077c6100b3565b80610786816102fb565b0390a3565b61079433610e5c565b565b6107f5906107a4600161071d565b816107d86107d27f31b6c5a04b069b6ec1b3cef44c4e7c1eadd721349cda9823d0b1877b3551cdc6936106d4565b916106d4565b916107e16100b3565b806107eb816102fb565b0390a360016106e3565b565b61080b6108046000610505565b60006106e3565b61081433610796565b565b61081f906105a0565b90565b9061082c90610816565b600052602052604060002090565b90565b61084961084e91610703565b61083a565b90565b61085b905461083d565b90565b61087261086d610877926104e3565b6104e6565b610581565b90565b6108989160016108939261088c61044a565b5001610822565b610851565b6108ab6108a5600061085e565b91610581565b141590565b606090565b5490565b60209181520190565b600052602060002090565b6108d6906105a0565b9052565b906108e7816020936108cd565b0190565b90565b6108fa6108ff91610703565b6108eb565b90565b61090c90546108ee565b90565b60010190565b9061093261092c610925846108b5565b80936108b9565b926108c2565b9060005b8181106109435750505090565b90919261096361095d60019261095887610902565b6108da565b9461090f565b9101919091610936565b9061097791610915565b90565b601f801991011690565b634e487b7160e01b600052604160045260246000fd5b906109a49061097a565b810190811067ffffffffffffffff8211176109be57604052565b610984565b906109e36109dc926109d36100b3565b9384809261096d565b038361099a565b565b6109ee906109c3565b90565b6000610a06916109ff6108b0565b50016109e5565b90565b916020610a2b929493610a24604082019660008301906101cd565b01906101cd565b565b610a3f610a3982610ea4565b1561011d565b610a465750565b610a50600161071d565b610a71610a5b6100b3565b92839263110f70ad60e21b845260048401610a09565b0390fd5b90565b600052602060002090565b634e487b7160e01b600052603260045260246000fd5b5490565b610aa681610a99565b821015610ac157610ab8600191610a78565b91020190600090565b610a83565b1b90565b91906008610ae6910291610ae060001984610ac6565b92610ac6565b9181191691161790565b610af990610703565b90565b9190610b12610b0d610b1a93610816565b610af0565b908354610aca565b9055565b9081549168010000000000000000831015610b4e5782610b46916001610b4c95018155610a9d565b90610afc565b565b610984565b90610b60600019916105a3565b9181191691161790565b610b7e610b79610b8392610581565b6104e6565b610581565b90565b90565b90610b9e610b99610ba592610b6a565b610b86565b8254610b53565b9055565b610bb161044a565b50610bc6610bc082849061087a565b1561011d565b600014610c0957610bff610c0492610bea610be360008501610a75565b8290610b1e565b6001610bf8600085016108b5565b9301610822565b610b89565b600190565b5050600090565b90565b610c27610c22610c2c92610c10565b6104e6565b610581565b90565b634e487b7160e01b600052601160045260246000fd5b610c54610c5a91939293610581565b92610581565b8203918211610c6557565b610c2f565b610c73816108b5565b821015610c8e57610c856001916108c2565b91020190600090565b610a83565b610ca3906008610ca8930261018a565b6108eb565b90565b90610cb69154610c93565b90565b634e487b7160e01b600052603160045260246000fd5b600090565b610ce691610ce0610ccf565b91610afc565b565b610cf181610a99565b8015610d12576001900390610d0f610d098383610a9d565b90610cd4565b55565b610cb9565b9190610d2d610d28610d3593610b6a565b610b86565b908354610aca565b9055565b600090565b610d5091610d4a610d39565b91610d17565b565b610d5a61044a565b50610d71610d6c600183018490610822565b610851565b9081610d86610d80600061085e565b91610581565b1415600014610e5457610e06926001610e019284610daf600096610da985610c13565b90610c45565b610dcc610dbd8885016108b5565b610dc686610c13565b90610c45565b81610ddf610dd983610581565b91610581565b03610e0b575b505050610dfb610df6868301610a75565b610ce8565b01610822565b610d3e565b600190565b610e4c92610e3e610e2a610e24610e47948c8901610c6a565b90610cab565b93610e3885918c8901610c6a565b90610afc565b91858501610822565b610b89565b388080610de5565b505050600090565b610e6e610e6882610ecc565b1561011d565b610e755750565b610e7f600061071d565b610ea0610e8a6100b3565b92839263be5a953760e01b845260048401610a09565b0390fd5b610eac61044a565b50610ec8610ec2610ebd600161071d565b6100ce565b916100ce565b1490565b610ed461044a565b50610ef0610eea610ee5600061071d565b6100ce565b916100ce565b149056
Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)
0000000000000000000000001804c8ab1f12e6bbf3894d4083f33e07309d1f38
-----Decoded View---------------
Arg [0] : _timelock (address): 0x1804c8AB1F12E6bbf3894d4083f33e07309d1f38
-----Encoded View---------------
1 Constructor Arguments found :
Arg [0] : 0000000000000000000000001804c8ab1f12e6bbf3894d4083f33e07309d1f38
Loading...
Loading
Loading...
Loading
Loading...
Loading
Net Worth in USD
$0.00
Net Worth in FRAX
0
Multichain Portfolio | 35 Chains
| Chain | Token | Portfolio % | Price | Amount | Value |
|---|
Loading...
Loading
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.