Source Code
Overview
S Balance
S Value
$0.00View more zero value Internal Transactions in Advanced View mode
Advanced mode:
Cross-Chain Transactions
Loading...
Loading
This contract contains unverified libraries: CompoundLibrary
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:
DiamondCutFacet
Compiler Version
v0.8.26+commit.8a97fa7a
Optimization Enabled:
Yes with 200 runs
Other Settings:
cancun EvmVersion
Contract Source Code (Solidity Standard Json-Input format)
// SPDX-License-Identifier: MIT pragma solidity ^0.8.0; /******************************************************************************\ * Author: Nick Mudge <[email protected]> (https://twitter.com/mudgen) * EIP-2535 Diamonds: https://eips.ethereum.org/EIPS/eip-2535 /******************************************************************************/ import "./IDiamond.sol"; import "./DiamondStorage.sol"; // Remember to add the loupe functions from DiamondLoupeFacet to the diamond. // The loupe functions are required by the EIP2535 Diamonds standard contract DiamondCutFacet is IDiamondCut { /// @notice Add/replace/remove any number of functions and optionally execute /// a function with delegatecall /// @param _diamondCut Contains the facet addresses and function selectors /// @param _init The address of the contract or facet to execute _calldata /// @param _calldata A function call, including function selector and arguments /// _calldata is executed with delegatecall on _init function diamondCut( FacetCut[] calldata _diamondCut, address _init, bytes calldata _calldata ) external override { DiamondStorage.enforceIsContractOwner(); DiamondStorage.diamondCut(_diamondCut, _init, _calldata); } }
// SPDX-License-Identifier: MIT pragma solidity ^0.8.0; /******************************************************************************\ * Author: Nick Mudge <[email protected]> (https://twitter.com/mudgen) * EIP-2535 Diamonds: https://eips.ethereum.org/EIPS/eip-2535 * * Implementation of a diamond. /******************************************************************************/ import "@openzeppelin/contracts/utils/introspection/IERC165.sol"; import "@openzeppelin/contracts/access/Ownable.sol"; interface IDiamondCut { enum FacetCutAction {Add, Replace, Remove} // Add=0, Replace=1, Remove=2 struct FacetCut { address facetAddress; FacetCutAction action; bytes4[] functionSelectors; } /// @notice Add/replace/remove any number of functions and optionally execute /// a function with delegatecall /// @param _diamondCut Contains the facet addresses and function selectors /// @param _init The address of the contract or facet to execute _calldata /// @param _calldata A function call, including function selector and arguments /// _calldata is executed with delegatecall on _init function diamondCut( FacetCut[] calldata _diamondCut, address _init, bytes calldata _calldata ) external; event DiamondCut(FacetCut[] _diamondCut, address _init, bytes _calldata); } interface IDiamondLoupe { /// These functions are expected to be called frequently /// by tools. struct Facet { address facetAddress; bytes4[] functionSelectors; } /// @notice Gets all facet addresses and their four byte function selectors. /// @return facets_ Facet function facets() external view returns (Facet[] memory facets_); /// @notice Gets all the function selectors supported by a specific facet. /// @param _facet The facet address. /// @return facetFunctionSelectors_ function facetFunctionSelectors(address _facet) external view returns (bytes4[] memory facetFunctionSelectors_); /// @notice Get all the facet addresses used by a diamond. /// @return facetAddresses_ function facetAddresses() external view returns (address[] memory facetAddresses_); /// @notice Gets the facet that supports the given selector. /// @dev If facet is not found return address(0). /// @param _functionSelector The function selector. /// @return facetAddress_ The facet address. function facetAddress(bytes4 _functionSelector) external view returns (address facetAddress_); } interface IERC173 { /// @dev This emits when ownership of a contract changes. event OwnershipTransferred(address indexed previousOwner, address indexed newOwner); /// @notice Get the address of the owner /// @return owner_ The address of the owner. function owner() external view returns (address owner_); /// @notice Set the address of the new owner of the contract /// @dev Set _newOwner to address(0) to renounce any ownership. /// @param _newOwner The address of the new owner of the contract function transferOwnership(address _newOwner) external; }
// SPDX-License-Identifier: MIT pragma solidity ^0.8.0; /******************************************************************************\ * Author: Nick Mudge <[email protected]> (https://twitter.com/mudgen) * EIP-2535 Diamonds: https://eips.ethereum.org/EIPS/eip-2535 * * Implementation of a diamond storage layout. /******************************************************************************/ library DiamondStorage { bytes32 constant DIAMOND_STORAGE_POSITION = keccak256("diamond.standard.diamond.storage"); struct FacetAddressAndPosition { address facetAddress; uint96 functionSelectorPosition; // position in facetFunctionSelectors.functionSelectors array } struct FacetFunctionSelectors { bytes4[] functionSelectors; uint256 facetAddressPosition; // position of facetAddress in facetAddresses array } struct DiamondStorageStruct { // maps function selector to the facet address and // the position of the selector in the facetFunctionSelectors.selectors array mapping(bytes4 => FacetAddressAndPosition) selectorToFacetAndPosition; // maps facet addresses to function selectors mapping(address => FacetFunctionSelectors) facetFunctionSelectors; // facet addresses address[] facetAddresses; // Used to query if a contract implements an interface. // Used to implement ERC-165. mapping(bytes4 => bool) supportedInterfaces; // owner of the contract address contractOwner; } function diamondStorage() internal pure returns (DiamondStorageStruct storage ds) { bytes32 position = DIAMOND_STORAGE_POSITION; assembly { ds.slot := position } } event OwnershipTransferred(address indexed previousOwner, address indexed newOwner); function setContractOwner(address _newOwner) internal { DiamondStorageStruct storage ds = diamondStorage(); address previousOwner = ds.contractOwner; ds.contractOwner = _newOwner; emit OwnershipTransferred(previousOwner, _newOwner); } function contractOwner() internal view returns (address contractOwner_) { contractOwner_ = diamondStorage().contractOwner; } function enforceIsContractOwner() internal view { require(msg.sender == diamondStorage().contractOwner, "DiamondStorage: Must be contract owner"); } event DiamondCut(IDiamondCut.FacetCut[] _diamondCut, address _init, bytes _calldata); // Internal function version of diamondCut function diamondCut( IDiamondCut.FacetCut[] memory _diamondCut, address _init, bytes memory _calldata ) internal { for (uint256 facetIndex; facetIndex < _diamondCut.length; facetIndex++) { IDiamondCut.FacetCutAction action = _diamondCut[facetIndex].action; if (action == IDiamondCut.FacetCutAction.Add) { addFunctions(_diamondCut[facetIndex].facetAddress, _diamondCut[facetIndex].functionSelectors); } else if (action == IDiamondCut.FacetCutAction.Replace) { replaceFunctions(_diamondCut[facetIndex].facetAddress, _diamondCut[facetIndex].functionSelectors); } else if (action == IDiamondCut.FacetCutAction.Remove) { removeFunctions(_diamondCut[facetIndex].facetAddress, _diamondCut[facetIndex].functionSelectors); } else { revert("DiamondCutFacet: Incorrect FacetCutAction"); } } emit DiamondCut(_diamondCut, _init, _calldata); initializeDiamondCut(_init, _calldata); } function addFunctions(address _facetAddress, bytes4[] memory _functionSelectors) internal { require(_functionSelectors.length > 0, "DiamondCutFacet: No selectors in facet to cut"); DiamondStorageStruct storage ds = diamondStorage(); require(_facetAddress != address(0), "DiamondCutFacet: Add facet can't be address(0)"); uint96 selectorPosition = uint96(ds.facetFunctionSelectors[_facetAddress].functionSelectors.length); // add new facet address if it does not exist if (selectorPosition == 0) { addFacet(ds, _facetAddress); } for (uint256 selectorIndex; selectorIndex < _functionSelectors.length; selectorIndex++) { bytes4 selector = _functionSelectors[selectorIndex]; address oldFacetAddress = ds.selectorToFacetAndPosition[selector].facetAddress; require(oldFacetAddress == address(0), "DiamondCutFacet: Can't add function that already exists"); addFunction(ds, selector, selectorPosition, _facetAddress); selectorPosition++; } } function replaceFunctions(address _facetAddress, bytes4[] memory _functionSelectors) internal { require(_functionSelectors.length > 0, "DiamondCutFacet: No selectors in facet to cut"); DiamondStorageStruct storage ds = diamondStorage(); require(_facetAddress != address(0), "DiamondCutFacet: Add facet can't be address(0)"); uint96 selectorPosition = uint96(ds.facetFunctionSelectors[_facetAddress].functionSelectors.length); // add new facet address if it does not exist if (selectorPosition == 0) { addFacet(ds, _facetAddress); } for (uint256 selectorIndex; selectorIndex < _functionSelectors.length; selectorIndex++) { bytes4 selector = _functionSelectors[selectorIndex]; address oldFacetAddress = ds.selectorToFacetAndPosition[selector].facetAddress; require(oldFacetAddress != _facetAddress, "DiamondCutFacet: Can't replace function with same function"); removeFunction(ds, oldFacetAddress, selector); addFunction(ds, selector, selectorPosition, _facetAddress); selectorPosition++; } } function removeFunctions(address _facetAddress, bytes4[] memory _functionSelectors) internal { require(_functionSelectors.length > 0, "DiamondCutFacet: No selectors in facet to cut"); DiamondStorageStruct storage ds = diamondStorage(); // if function does not exist then do nothing and return require(_facetAddress == address(0), "DiamondCutFacet: Remove facet address must be address(0)"); for (uint256 selectorIndex; selectorIndex < _functionSelectors.length; selectorIndex++) { bytes4 selector = _functionSelectors[selectorIndex]; address oldFacetAddress = ds.selectorToFacetAndPosition[selector].facetAddress; removeFunction(ds, oldFacetAddress, selector); } } function addFacet(DiamondStorageStruct storage ds, address _facetAddress) internal { enforceHasContractCode(_facetAddress, "DiamondCutFacet: New facet has no code"); ds.facetFunctionSelectors[_facetAddress].facetAddressPosition = ds.facetAddresses.length; ds.facetAddresses.push(_facetAddress); } function addFunction(DiamondStorageStruct storage ds, bytes4 _selector, uint96 _selectorPosition, address _facetAddress) internal { ds.selectorToFacetAndPosition[_selector].functionSelectorPosition = _selectorPosition; ds.facetFunctionSelectors[_facetAddress].functionSelectors.push(_selector); ds.selectorToFacetAndPosition[_selector].facetAddress = _facetAddress; } function removeFunction(DiamondStorageStruct storage ds, address _facetAddress, bytes4 _selector) internal { require(_facetAddress != address(0), "DiamondCutFacet: Can't remove function that doesn't exist"); // an immutable function is a function defined directly in a diamond require(_facetAddress != address(this), "DiamondCutFacet: Can't remove immutable function"); // replace selector with last selector, then delete last selector uint256 selectorPosition = ds.selectorToFacetAndPosition[_selector].functionSelectorPosition; uint256 lastSelectorPosition = ds.facetFunctionSelectors[_facetAddress].functionSelectors.length - 1; // if not the same then replace _selector with lastSelector if (selectorPosition != lastSelectorPosition) { bytes4 lastSelector = ds.facetFunctionSelectors[_facetAddress].functionSelectors[lastSelectorPosition]; ds.facetFunctionSelectors[_facetAddress].functionSelectors[selectorPosition] = lastSelector; ds.selectorToFacetAndPosition[lastSelector].functionSelectorPosition = uint96(selectorPosition); } // delete the last selector ds.facetFunctionSelectors[_facetAddress].functionSelectors.pop(); delete ds.selectorToFacetAndPosition[_selector]; // if no more selectors for facet address then delete the facet address if (lastSelectorPosition == 0) { // replace facet address with last facet address and delete last facet address uint256 lastFacetAddressPosition = ds.facetAddresses.length - 1; uint256 facetAddressPosition = ds.facetFunctionSelectors[_facetAddress].facetAddressPosition; if (facetAddressPosition != lastFacetAddressPosition) { address lastFacetAddress = ds.facetAddresses[lastFacetAddressPosition]; ds.facetAddresses[facetAddressPosition] = lastFacetAddress; ds.facetFunctionSelectors[lastFacetAddress].facetAddressPosition = facetAddressPosition; } ds.facetAddresses.pop(); delete ds.facetFunctionSelectors[_facetAddress].facetAddressPosition; } } function initializeDiamondCut(address _init, bytes memory _calldata) internal { if (_init == address(0)) { require(_calldata.length == 0, "DiamondCutFacet: _init is address(0) but_calldata is not empty"); } else { require(_calldata.length > 0, "DiamondCutFacet: _calldata is empty but _init is not address(0)"); if (_init != address(this)) { enforceHasContractCode(_init, "DiamondCutFacet: _init address has no code"); } (bool success, bytes memory error) = _init.delegatecall(_calldata); if (!success) { if (error.length > 0) { // bubble up the error revert(string(error)); } else { revert("DiamondCutFacet: _init function reverted"); } } } } function enforceHasContractCode(address _contract, string memory _errorMessage) internal view { uint256 contractSize; assembly { contractSize := extcodesize(_contract) } require(contractSize > 0, _errorMessage); } } // Import necessary interface import "./IDiamond.sol";
// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts (last updated v5.1.0) (utils/introspection/IERC165.sol)
pragma solidity >=0.4.16;
/**
* @dev Interface of the ERC-165 standard, as defined in the
* https://eips.ethereum.org/EIPS/eip-165[ERC].
*
* Implementers can declare support of contract interfaces, which can then be
* queried by others ({ERC165Checker}).
*
* For an implementation, see {ERC165}.
*/
interface IERC165 {
/**
* @dev Returns true if this contract implements the interface defined by
* `interfaceId`. See the corresponding
* https://eips.ethereum.org/EIPS/eip-165#how-interfaces-are-identified[ERC section]
* to learn more about how these ids are created.
*
* This function call must use less than 30 000 gas.
*/
function supportsInterface(bytes4 interfaceId) external view returns (bool);
}// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts (last updated v5.0.0) (access/Ownable.sol)
pragma solidity ^0.8.20;
import {Context} from "../utils/Context.sol";
/**
* @dev Contract module which provides a basic access control mechanism, where
* there is an account (an owner) that can be granted exclusive access to
* specific functions.
*
* The initial owner is set to the address provided by the deployer. This can
* later be changed with {transferOwnership}.
*
* This module is used through inheritance. It will make available the modifier
* `onlyOwner`, which can be applied to your functions to restrict their use to
* the owner.
*/
abstract contract Ownable is Context {
address private _owner;
/**
* @dev The caller account is not authorized to perform an operation.
*/
error OwnableUnauthorizedAccount(address account);
/**
* @dev The owner is not a valid owner account. (eg. `address(0)`)
*/
error OwnableInvalidOwner(address owner);
event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);
/**
* @dev Initializes the contract setting the address provided by the deployer as the initial owner.
*/
constructor(address initialOwner) {
if (initialOwner == address(0)) {
revert OwnableInvalidOwner(address(0));
}
_transferOwnership(initialOwner);
}
/**
* @dev Throws if called by any account other than the owner.
*/
modifier onlyOwner() {
_checkOwner();
_;
}
/**
* @dev Returns the address of the current owner.
*/
function owner() public view virtual returns (address) {
return _owner;
}
/**
* @dev Throws if the sender is not the owner.
*/
function _checkOwner() internal view virtual {
if (owner() != _msgSender()) {
revert OwnableUnauthorizedAccount(_msgSender());
}
}
/**
* @dev Leaves the contract without owner. It will not be possible to call
* `onlyOwner` functions. Can only be called by the current owner.
*
* NOTE: Renouncing ownership will leave the contract without an owner,
* thereby disabling any functionality that is only available to the owner.
*/
function renounceOwnership() public virtual onlyOwner {
_transferOwnership(address(0));
}
/**
* @dev Transfers ownership of the contract to a new account (`newOwner`).
* Can only be called by the current owner.
*/
function transferOwnership(address newOwner) public virtual onlyOwner {
if (newOwner == address(0)) {
revert OwnableInvalidOwner(address(0));
}
_transferOwnership(newOwner);
}
/**
* @dev Transfers ownership of the contract to a new account (`newOwner`).
* Internal function without access restriction.
*/
function _transferOwnership(address newOwner) internal virtual {
address oldOwner = _owner;
_owner = newOwner;
emit OwnershipTransferred(oldOwner, newOwner);
}
}// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts (last updated v5.0.1) (utils/Context.sol)
pragma solidity ^0.8.20;
/**
* @dev Provides information about the current execution context, including the
* sender of the transaction and its data. While these are generally available
* via msg.sender and msg.data, they should not be accessed in such a direct
* manner, since when dealing with meta-transactions the account sending and
* paying for execution may not be the actual sender (as far as an application
* is concerned).
*
* This contract is only required for intermediate, library-like contracts.
*/
abstract contract Context {
function _msgSender() internal view virtual returns (address) {
return msg.sender;
}
function _msgData() internal view virtual returns (bytes calldata) {
return msg.data;
}
function _contextSuffixLength() internal view virtual returns (uint256) {
return 0;
}
}{
"remappings": [
"@openzeppelin/contracts-upgradeable/=lib/openzeppelin-contracts-upgradeable/contracts/",
"@openzeppelin/contracts/=lib/openzeppelin-contracts/contracts/",
"ds-test/=lib/openzeppelin-contracts-upgradeable/lib/forge-std/lib/ds-test/src/",
"erc4626-tests/=lib/openzeppelin-contracts-upgradeable/lib/erc4626-tests/",
"forge-std/=lib/forge-std/src/",
"halmos-cheatcodes/=lib/openzeppelin-contracts-upgradeable/lib/halmos-cheatcodes/src/",
"openzeppelin-contracts-upgradeable/=lib/openzeppelin-contracts-upgradeable/",
"openzeppelin-contracts/=lib/openzeppelin-contracts/"
],
"optimizer": {
"enabled": true,
"runs": 200
},
"metadata": {
"useLiteralContent": false,
"bytecodeHash": "ipfs",
"appendCBOR": true
},
"outputSelection": {
"*": {
"*": [
"evm.bytecode",
"evm.deployedBytecode",
"devdoc",
"userdoc",
"metadata",
"abi"
]
}
},
"evmVersion": "cancun",
"viaIR": true,
"libraries": {
"src/strategies/00_libraries/CompoundLibrary.sol": {
"CompoundLibrary": "0x16fe3BeB16788F4aac3da7A1F0C58634fAd18D93"
},
"src/strategies/00_libraries/RewardProcessingLibrary.sol": {
"RewardProcessingLibrary": "0x880d4Aa8bC45Dc3136Ad3A7808131915f54D48D0"
},
"src/strategies/00_libraries/dex_logic/UniversalRouterLogic.sol": {
"UniversalRouterLogic": "0xee8E96540c42b99B872B920c14AD9422a9De37e7"
}
}
}Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
Contract ABI
API[{"anonymous":false,"inputs":[{"components":[{"internalType":"address","name":"facetAddress","type":"address"},{"internalType":"enum IDiamondCut.FacetCutAction","name":"action","type":"uint8"},{"internalType":"bytes4[]","name":"functionSelectors","type":"bytes4[]"}],"indexed":false,"internalType":"struct IDiamondCut.FacetCut[]","name":"_diamondCut","type":"tuple[]"},{"indexed":false,"internalType":"address","name":"_init","type":"address"},{"indexed":false,"internalType":"bytes","name":"_calldata","type":"bytes"}],"name":"DiamondCut","type":"event"},{"anonymous":false,"inputs":[{"components":[{"internalType":"address","name":"facetAddress","type":"address"},{"internalType":"enum IDiamondCut.FacetCutAction","name":"action","type":"uint8"},{"internalType":"bytes4[]","name":"functionSelectors","type":"bytes4[]"}],"indexed":false,"internalType":"struct IDiamondCut.FacetCut[]","name":"_diamondCut","type":"tuple[]"},{"indexed":false,"internalType":"address","name":"_init","type":"address"},{"indexed":false,"internalType":"bytes","name":"_calldata","type":"bytes"}],"name":"DiamondCut","type":"event"},{"inputs":[{"components":[{"internalType":"address","name":"facetAddress","type":"address"},{"internalType":"enum IDiamondCut.FacetCutAction","name":"action","type":"uint8"},{"internalType":"bytes4[]","name":"functionSelectors","type":"bytes4[]"}],"internalType":"struct IDiamondCut.FacetCut[]","name":"_diamondCut","type":"tuple[]"},{"internalType":"address","name":"_init","type":"address"},{"internalType":"bytes","name":"_calldata","type":"bytes"}],"name":"diamondCut","outputs":[],"stateMutability":"nonpayable","type":"function"}]Contract Creation Code
608080604052346015576111ef908161001a8239f35b5f80fdfe6080806040526004361015610012575f80fd5b5f3560e01c631f931c1c14610025575f80fd5b346109da5760603660031901126109da5760043567ffffffffffffffff81116109da57366023820112156109da5780600401359167ffffffffffffffff83116109da5760248360051b8301013681116109da576024356001600160a01b038116918282036109da576044359067ffffffffffffffff82116109da57366023830112156109da5781600401359467ffffffffffffffff86116109da5736602487850101116109da577fc8fcad8db84d3cc18b4c41d551ea0ee66dd599cde068d998e57d5e09332c1320546001600160a01b031633036109f25750602061011361010e899499610a69565b610a43565b809381520190819660248101925b8284106108de57505050505f602061013b61010e87610a81565b958087528060248389019a018a37860101525f945b81518610156105d55760206101658784610a9d565b51015160038110156105c157806102e157506001600160a01b036101898784610a9d565b5151169460406101998885610a9d565b510151946101a986511515610ae9565b6101b4871515610b4b565b6001600160a01b0387165f9081525f8051602061119a83398151915260205260409020546001600160601b03169485156102d3575b5f955b87518710156102ba576001600160e01b0319610208888a610a9d565b51165f8181525f8051602061115a83398151915260205260409020546001600160a01b031661024f57816102428b60019461024794611074565b610bae565b9601956101ec565b60405162461bcd60e51b815260206004820152603760248201527f4469616d6f6e6443757446616365743a2043616e2774206164642066756e637460448201527f696f6e207468617420616c7265616479206578697374730000000000000000006064820152608490fd5b50945094509450946001909691965b0194959095610150565b6102dc88610fb4565b6101e9565b9496946001810361045857506001600160a01b036102ff8784610a9d565b51511696604061030f8885610a9d565b5101519461031f86511515610ae9565b61032a891515610b4b565b6001600160a01b0389165f9081525f8051602061119a83398151915260205260409020546001600160601b031694851561044a575b5f955b8751871015610438576001600160e01b031961037e888a610a9d565b51165f8181525f8051602061115a83398151915260205260409020546001600160a01b0316918c83146103cd576102428d82846103c06103c596600198610c15565b611074565b960195610362565b60405162461bcd60e51b815260206004820152603a60248201527f4469616d6f6e6443757446616365743a2043616e2774207265706c616365206660448201527f756e6374696f6e20776974682073616d652066756e6374696f6e0000000000006064820152608490fd5b509450945094919650946001906102c9565b6104538a610fb4565b61035f565b94969294919390929160020361056a576001600160a01b0361047a8786610a9d565b51511694604061048a8887610a9d565b5101519561049a87511515610ae9565b6104ff575f5b86518110156104ef576001906104e96001600160e01b03196104c2838b610a9d565b5116805f525f8051602061115a833981519152602052838060a01b0360405f205416610c15565b016104a0565b50929560019194979295506102c9565b60405162461bcd60e51b815260206004820152603860248201527f4469616d6f6e6443757446616365743a2052656d6f766520666163657420616460448201527f6472657373206d757374206265206164647265737328302900000000000000006064820152608490fd5b60405162461bcd60e51b815260206004820152602960248201527f4469616d6f6e6443757446616365743a20496e636f727265637420466163657460448201526821baba20b1ba34b7b760b91b6064820152608490fd5b634e487b7160e01b5f52602160045260245ffd5b9086916040519160608301906060845251809152608083019060808160051b85010192915f905b828210610848575050505090806106427f8faa70878671ccd212d20771b795c50af8fd3ff6cf27f4bde57e5d4de0aeb67393876020840152828103604084015288610ac5565b0390a1826106bf575050505161065457005b60405162461bcd60e51b815260206004820152603e60248201527f4469616d6f6e6443757446616365743a205f696e69742069732061646472657360448201527f73283029206275745f63616c6c64617461206973206e6f7420656d70747900006064820152608490fd5b8351156107dd575f9384933003610788575b51915af43d15610780573d906106e961010e83610a81565b9182523d5f602084013e5b156106fb57005b80511561072a5760405162461bcd60e51b815260206004820152908190610726906024830190610ac5565b0390fd5b60405162461bcd60e51b815260206004820152602860248201527f4469616d6f6e6443757446616365743a205f696e69742066756e6374696f6e206044820152671c995d995c9d195960c21b6064820152608490fd5b6060906106f4565b6107d86107956060610a43565b602a81527f4469616d6f6e6443757446616365743a205f696e6974206164647265737320686020820152696173206e6f20636f646560b01b60408201528461112c565b6106d1565b60405162461bcd60e51b815260206004820152603f60248201527f4469616d6f6e6443757446616365743a205f63616c6c6461746120697320656d60448201527f70747920627574205f696e6974206973206e6f742061646472657373283029006064820152608490fd5b858503607f19018152835180516001600160a01b0316865260208101519495939492939192606083019160038210156105c157604060809160209384870152015193606060408201528451809452019201905f905b8082106108bb575050506020806001929601920192019092916105fc565b82516001600160e01b03191684526020938401939092019160019091019061089d565b839994993567ffffffffffffffff81116109da578201606060231982360301126109da57604051906060820182811067ffffffffffffffff8211176109de5760405260248101356001600160a01b03811681036109da578252604481013560038110156109da576020830152606481013567ffffffffffffffff81116109da57602491010136601f820112156109da57803561097c61010e82610a69565b9160208084848152019260051b820101903682116109da57602001915b8183106109b9575050506040820152815293989360209384019301610121565b82356001600160e01b0319811681036109da57815260209283019201610999565b5f80fd5b634e487b7160e01b5f52604160045260245ffd5b62461bcd60e51b815260206004820152602660248201527f4469616d6f6e6453746f726167653a204d75737420626520636f6e74726163746044820152651037bbb732b960d11b6064820152608490fd5b6040519190601f01601f1916820167ffffffffffffffff8111838210176109de57604052565b67ffffffffffffffff81116109de5760051b60200190565b67ffffffffffffffff81116109de57601f01601f191660200190565b8051821015610ab15760209160051b010190565b634e487b7160e01b5f52603260045260245ffd5b805180835260209291819084018484015e5f828201840152601f01601f1916010190565b15610af057565b60405162461bcd60e51b815260206004820152602d60248201527f4469616d6f6e6443757446616365743a204e6f2073656c6563746f727320696e60448201526c08199858d95d081d1bc818dd5d609a1b6064820152608490fd5b15610b5257565b60405162461bcd60e51b815260206004820152602e60248201527f4469616d6f6e6443757446616365743a204164642066616365742063616e277460448201526d206265206164647265737328302960901b6064820152608490fd5b6001600160601b03166001600160601b038114610bcb5760010190565b634e487b7160e01b5f52601160045260245ffd5b9190918054831015610ab1575f52601c60205f208360031c019260021b1690565b8054821015610ab1575f5260205f2001905f90565b6001600160a01b0316908115610f4957308214610eeb5763ffffffff60e01b16805f525f8051602061115a83398151915260205260405f205460a01c90825f525f8051602061119a83398151915260205260405f2054915f198301928311610bcb57828103610e2e575b50825f525f8051602061119a83398151915260205260405f2080548015610d90575f190190610cae8282610bdf565b63ffffffff82549160031b1b19169055555f525f8051602061115a8339815191526020525f604081205515610ce05750565b5f8051602061117a833981519152545f198101908111610bcb57815f525f8051602061119a833981519152602052600160405f20015490808203610da4575b50505f8051602061117a833981519152548015610d90575f1901610d50815f8051602061117a833981519152610c00565b81549060018060a01b039060031b1b191690555f8051602061117a833981519152555f525f8051602061119a8339815191526020525f6001604082200155565b634e487b7160e01b5f52603160045260245ffd5b610dbb905f8051602061117a833981519152610c00565b905460039190911b1c6001600160a01b0316610e0c81610de8845f8051602061117a833981519152610c00565b81546001600160a01b0393841660039290921b91821b9390911b1916919091179055565b5f525f8051602061119a833981519152602052600160405f2001555f80610d1f565b610ee590845f525f8051602061119a833981519152602052610e538460405f20610bdf565b90549060031b1c60e01b855f525f8051602061119a833981519152602052610e9f81610e828460405f20610bdf565b90919063ffffffff83549160031b9260e01c831b921b1916179055565b6001600160e01b0319165f9081525f8051602061115a8339815191526020526040902080546001600160a01b031660a09290921b6001600160a01b031916919091179055565b5f610c7f565b60405162461bcd60e51b815260206004820152603060248201527f4469616d6f6e6443757446616365743a2043616e27742072656d6f766520696d60448201526f36baba30b1363290333ab731ba34b7b760811b6064820152608490fd5b60405162461bcd60e51b815260206004820152603960248201527f4469616d6f6e6443757446616365743a2043616e27742072656d6f766520667560448201527f6e6374696f6e207468617420646f65736e2774206578697374000000000000006064820152608490fd5b611000610fc16060610a43565b602681527f4469616d6f6e6443757446616365743a204e657720666163657420686173206e6020820152656f20636f646560d01b60408201528261112c565b5f8051602061117a833981519152546001600160a01b0382165f9081525f8051602061119a8339815191526020526040902060010181905590600160401b8210156109de57610de882600161107294015f8051602061117a833981519152555f8051602061117a833981519152610c00565b565b6001600160e01b031981165f8181525f8051602061115a8339815191526020526040902080546001600160a01b031660a09490941b6001600160a01b03191693909317909255916001600160a01b03165f8181525f8051602061119a833981519152602052604090208054919390600160401b8310156109de5782610e8291600161110195018155610bdf565b5f525f8051602061115a83398151915260205260405f20906001600160601b0360a01b825416179055565b3b156111355750565b60405162461bcd60e51b815260206004820152908190610726906024830190610ac556fec8fcad8db84d3cc18b4c41d551ea0ee66dd599cde068d998e57d5e09332c131cc8fcad8db84d3cc18b4c41d551ea0ee66dd599cde068d998e57d5e09332c131ec8fcad8db84d3cc18b4c41d551ea0ee66dd599cde068d998e57d5e09332c131da2646970667358221220bfb6961cf74f57c47291353f25c0df290502f6764ac72c33700ea33b8b888c9064736f6c634300081a0033
Deployed Bytecode
0x6080806040526004361015610012575f80fd5b5f3560e01c631f931c1c14610025575f80fd5b346109da5760603660031901126109da5760043567ffffffffffffffff81116109da57366023820112156109da5780600401359167ffffffffffffffff83116109da5760248360051b8301013681116109da576024356001600160a01b038116918282036109da576044359067ffffffffffffffff82116109da57366023830112156109da5781600401359467ffffffffffffffff86116109da5736602487850101116109da577fc8fcad8db84d3cc18b4c41d551ea0ee66dd599cde068d998e57d5e09332c1320546001600160a01b031633036109f25750602061011361010e899499610a69565b610a43565b809381520190819660248101925b8284106108de57505050505f602061013b61010e87610a81565b958087528060248389019a018a37860101525f945b81518610156105d55760206101658784610a9d565b51015160038110156105c157806102e157506001600160a01b036101898784610a9d565b5151169460406101998885610a9d565b510151946101a986511515610ae9565b6101b4871515610b4b565b6001600160a01b0387165f9081525f8051602061119a83398151915260205260409020546001600160601b03169485156102d3575b5f955b87518710156102ba576001600160e01b0319610208888a610a9d565b51165f8181525f8051602061115a83398151915260205260409020546001600160a01b031661024f57816102428b60019461024794611074565b610bae565b9601956101ec565b60405162461bcd60e51b815260206004820152603760248201527f4469616d6f6e6443757446616365743a2043616e2774206164642066756e637460448201527f696f6e207468617420616c7265616479206578697374730000000000000000006064820152608490fd5b50945094509450946001909691965b0194959095610150565b6102dc88610fb4565b6101e9565b9496946001810361045857506001600160a01b036102ff8784610a9d565b51511696604061030f8885610a9d565b5101519461031f86511515610ae9565b61032a891515610b4b565b6001600160a01b0389165f9081525f8051602061119a83398151915260205260409020546001600160601b031694851561044a575b5f955b8751871015610438576001600160e01b031961037e888a610a9d565b51165f8181525f8051602061115a83398151915260205260409020546001600160a01b0316918c83146103cd576102428d82846103c06103c596600198610c15565b611074565b960195610362565b60405162461bcd60e51b815260206004820152603a60248201527f4469616d6f6e6443757446616365743a2043616e2774207265706c616365206660448201527f756e6374696f6e20776974682073616d652066756e6374696f6e0000000000006064820152608490fd5b509450945094919650946001906102c9565b6104538a610fb4565b61035f565b94969294919390929160020361056a576001600160a01b0361047a8786610a9d565b51511694604061048a8887610a9d565b5101519561049a87511515610ae9565b6104ff575f5b86518110156104ef576001906104e96001600160e01b03196104c2838b610a9d565b5116805f525f8051602061115a833981519152602052838060a01b0360405f205416610c15565b016104a0565b50929560019194979295506102c9565b60405162461bcd60e51b815260206004820152603860248201527f4469616d6f6e6443757446616365743a2052656d6f766520666163657420616460448201527f6472657373206d757374206265206164647265737328302900000000000000006064820152608490fd5b60405162461bcd60e51b815260206004820152602960248201527f4469616d6f6e6443757446616365743a20496e636f727265637420466163657460448201526821baba20b1ba34b7b760b91b6064820152608490fd5b634e487b7160e01b5f52602160045260245ffd5b9086916040519160608301906060845251809152608083019060808160051b85010192915f905b828210610848575050505090806106427f8faa70878671ccd212d20771b795c50af8fd3ff6cf27f4bde57e5d4de0aeb67393876020840152828103604084015288610ac5565b0390a1826106bf575050505161065457005b60405162461bcd60e51b815260206004820152603e60248201527f4469616d6f6e6443757446616365743a205f696e69742069732061646472657360448201527f73283029206275745f63616c6c64617461206973206e6f7420656d70747900006064820152608490fd5b8351156107dd575f9384933003610788575b51915af43d15610780573d906106e961010e83610a81565b9182523d5f602084013e5b156106fb57005b80511561072a5760405162461bcd60e51b815260206004820152908190610726906024830190610ac5565b0390fd5b60405162461bcd60e51b815260206004820152602860248201527f4469616d6f6e6443757446616365743a205f696e69742066756e6374696f6e206044820152671c995d995c9d195960c21b6064820152608490fd5b6060906106f4565b6107d86107956060610a43565b602a81527f4469616d6f6e6443757446616365743a205f696e6974206164647265737320686020820152696173206e6f20636f646560b01b60408201528461112c565b6106d1565b60405162461bcd60e51b815260206004820152603f60248201527f4469616d6f6e6443757446616365743a205f63616c6c6461746120697320656d60448201527f70747920627574205f696e6974206973206e6f742061646472657373283029006064820152608490fd5b858503607f19018152835180516001600160a01b0316865260208101519495939492939192606083019160038210156105c157604060809160209384870152015193606060408201528451809452019201905f905b8082106108bb575050506020806001929601920192019092916105fc565b82516001600160e01b03191684526020938401939092019160019091019061089d565b839994993567ffffffffffffffff81116109da578201606060231982360301126109da57604051906060820182811067ffffffffffffffff8211176109de5760405260248101356001600160a01b03811681036109da578252604481013560038110156109da576020830152606481013567ffffffffffffffff81116109da57602491010136601f820112156109da57803561097c61010e82610a69565b9160208084848152019260051b820101903682116109da57602001915b8183106109b9575050506040820152815293989360209384019301610121565b82356001600160e01b0319811681036109da57815260209283019201610999565b5f80fd5b634e487b7160e01b5f52604160045260245ffd5b62461bcd60e51b815260206004820152602660248201527f4469616d6f6e6453746f726167653a204d75737420626520636f6e74726163746044820152651037bbb732b960d11b6064820152608490fd5b6040519190601f01601f1916820167ffffffffffffffff8111838210176109de57604052565b67ffffffffffffffff81116109de5760051b60200190565b67ffffffffffffffff81116109de57601f01601f191660200190565b8051821015610ab15760209160051b010190565b634e487b7160e01b5f52603260045260245ffd5b805180835260209291819084018484015e5f828201840152601f01601f1916010190565b15610af057565b60405162461bcd60e51b815260206004820152602d60248201527f4469616d6f6e6443757446616365743a204e6f2073656c6563746f727320696e60448201526c08199858d95d081d1bc818dd5d609a1b6064820152608490fd5b15610b5257565b60405162461bcd60e51b815260206004820152602e60248201527f4469616d6f6e6443757446616365743a204164642066616365742063616e277460448201526d206265206164647265737328302960901b6064820152608490fd5b6001600160601b03166001600160601b038114610bcb5760010190565b634e487b7160e01b5f52601160045260245ffd5b9190918054831015610ab1575f52601c60205f208360031c019260021b1690565b8054821015610ab1575f5260205f2001905f90565b6001600160a01b0316908115610f4957308214610eeb5763ffffffff60e01b16805f525f8051602061115a83398151915260205260405f205460a01c90825f525f8051602061119a83398151915260205260405f2054915f198301928311610bcb57828103610e2e575b50825f525f8051602061119a83398151915260205260405f2080548015610d90575f190190610cae8282610bdf565b63ffffffff82549160031b1b19169055555f525f8051602061115a8339815191526020525f604081205515610ce05750565b5f8051602061117a833981519152545f198101908111610bcb57815f525f8051602061119a833981519152602052600160405f20015490808203610da4575b50505f8051602061117a833981519152548015610d90575f1901610d50815f8051602061117a833981519152610c00565b81549060018060a01b039060031b1b191690555f8051602061117a833981519152555f525f8051602061119a8339815191526020525f6001604082200155565b634e487b7160e01b5f52603160045260245ffd5b610dbb905f8051602061117a833981519152610c00565b905460039190911b1c6001600160a01b0316610e0c81610de8845f8051602061117a833981519152610c00565b81546001600160a01b0393841660039290921b91821b9390911b1916919091179055565b5f525f8051602061119a833981519152602052600160405f2001555f80610d1f565b610ee590845f525f8051602061119a833981519152602052610e538460405f20610bdf565b90549060031b1c60e01b855f525f8051602061119a833981519152602052610e9f81610e828460405f20610bdf565b90919063ffffffff83549160031b9260e01c831b921b1916179055565b6001600160e01b0319165f9081525f8051602061115a8339815191526020526040902080546001600160a01b031660a09290921b6001600160a01b031916919091179055565b5f610c7f565b60405162461bcd60e51b815260206004820152603060248201527f4469616d6f6e6443757446616365743a2043616e27742072656d6f766520696d60448201526f36baba30b1363290333ab731ba34b7b760811b6064820152608490fd5b60405162461bcd60e51b815260206004820152603960248201527f4469616d6f6e6443757446616365743a2043616e27742072656d6f766520667560448201527f6e6374696f6e207468617420646f65736e2774206578697374000000000000006064820152608490fd5b611000610fc16060610a43565b602681527f4469616d6f6e6443757446616365743a204e657720666163657420686173206e6020820152656f20636f646560d01b60408201528261112c565b5f8051602061117a833981519152546001600160a01b0382165f9081525f8051602061119a8339815191526020526040902060010181905590600160401b8210156109de57610de882600161107294015f8051602061117a833981519152555f8051602061117a833981519152610c00565b565b6001600160e01b031981165f8181525f8051602061115a8339815191526020526040902080546001600160a01b031660a09490941b6001600160a01b03191693909317909255916001600160a01b03165f8181525f8051602061119a833981519152602052604090208054919390600160401b8310156109de5782610e8291600161110195018155610bdf565b5f525f8051602061115a83398151915260205260405f20906001600160601b0360a01b825416179055565b3b156111355750565b60405162461bcd60e51b815260206004820152908190610726906024830190610ac556fec8fcad8db84d3cc18b4c41d551ea0ee66dd599cde068d998e57d5e09332c131cc8fcad8db84d3cc18b4c41d551ea0ee66dd599cde068d998e57d5e09332c131ec8fcad8db84d3cc18b4c41d551ea0ee66dd599cde068d998e57d5e09332c131da2646970667358221220bfb6961cf74f57c47291353f25c0df290502f6764ac72c33700ea33b8b888c9064736f6c634300081a0033
Loading...
Loading
Loading...
Loading
Loading...
Loading
Net Worth in USD
$0.12
Net Worth in S
Token Allocations
LINK
100.00%
Multichain Portfolio | 35 Chains
| Chain | Token | Portfolio % | Price | Amount | Value |
|---|---|---|---|---|---|
| POL | 100.00% | $11.95 | 0.01 | $0.1195 |
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.