Spend less on fees, more on crypto. Buy crypto easily with MoonPay Balance. 20M+ users trust MoonPay worldwide.
Ready to onboard to Ethereum? With MetaMask Portfolio, you're in control.
Don’t invest unless you’re prepared to lose all the money you invest.
Everyday giveaways up to 100 ETH, Lucky Spins. Deposit BONUS 300% and Cashbacks!
5000+ Slots & Live Casino Games, 50+cryptos. Register with Etherscan and get 760% deposit bonus. Win Big$, withdraw it fast.
Slots, Roulette, Poker & more - Proud sponsors of UFC, Everton & StakeF1 team!
5000+ Slots & Live Casino Games, 50+cryptos. Register with Etherscan and get 760% deposit bonus. Win Big$, withdraw it fast.
Anonymous play on awesome games - sign up now for 25 free jackpot spins - worth $100s!
100s of games, generous bonuses, 20+ years of trusted gaming. Join CryptoWins & start winning today!
Overview
ETH Balance
Eth Value
$0.00Token Holdings
Could not find any matches!
- ERC-20 Tokens (37)0 OxN0xNumber (OxN)$0.00@0.02851 CRECarryToken (CRE)$0.00@0.00231.5 EGGTEgg n Partne... (EGGT)$0.86@0.57550 eETHether.fi ETH (eETH)$0.00@3,917.210 eUSDeUSD (eUSD)$0.00@0.94840 EVERMOONEverMoon (EVERMO...)$0.00@0.00010 KAIJUKAIJUNO8 (KAIJU)$0.00@0.000 USDLLift Dollar (USDL)$0.00@1.0010 USDMMountain Pro... (USDM)$0.00@0.99950 stETHstETH (stETH)$0.00@3,926.553,585 ACX [via www.across.cash]ERC-20: ! ... (ACX ...)4.36728244 BCBitcoin$0.01@0.001966,473,855.5170146 CATCHERC-20: Catc... (CATCH)0.01412218 CDOGEERC-20: Chie... (CDOGE)13,000 CPRCCryptoPawCoin0 DHSDirham1.018364 ETHERC-20: Ethe... (ETH)0 EVERGROWERC-20: Ever... (EVERGR...)45 HDSFERC-20: Hedg... (HDSF)300 XZKERC-20: Myst... (XZK)1.55 Pandora GPTERC-20: Pand... (Pandor...)0 CATERC-20: Simo... (CAT)0.00054217 MishaERC-20: Vita... (Misha)1 HQGERC-20: 环球股 (HQG)10 LPLiquid Protocol$0.67@0.067352,854.91120283 Shiryo-InuShiryo-Inu$0.00@0.009,900 TokenERC-20 TOKEN*[Suspicious]4,999 TokenERC-20 TOKEN*[Suspicious]1 TokenERC-20 TOKEN*[Suspicious]9,000 TokenERC-20 TOKEN*[Suspicious]5,000 TokenERC-20 TOKEN*[Suspicious]241.75 TokenERC-20 TOKEN*[Suspicious]587 TokenERC-20 TOKEN*[Suspicious]3,999.99 TokenERC-20 TOKEN*[Spam]7,600 TokenERC-20 TOKEN*[Spam]1,049 TokenERC-20 TOKEN*[Spam]3,999.99 TokenERC-20 TOKEN*[Spam]NFT Tokens (22)claim rewards on get-steth.orgget-steth.orgERC-1155https://t.ly/wethPOOL wETHERC-1155t.me/shibarmy_botShiba Inu Token AirdropERC-1155claim rewards on stakedeth.orgstakedeth.orgERC-1155Let's Go!🎁ERC-1155Let's Go!🎁ERC-1155ERC-1155 TOKEN*[Suspicious]ERC-1155 TOKEN*[Suspicious]ERC-1155 TOKEN*[Suspicious]ERC-1155 TOKEN*[Suspicious]ERC-1155 TOKEN*[Suspicious]ERC-1155 TOKEN*[Suspicious]ERC-1155 TOKEN*[Suspicious]ERC-1155 TOKEN*[Suspicious]
More Info
Private Name Tags
ContractCreator
Multichain Info
4 addresses found via- Transactions
- Internal Transactions
- Token Transfers (ERC-20)
- NFT Transfers
- Contract
- Events
- Analytics
- Multichain Portfolio
- Cards New
Advanced Filter- Filter by Tx Type:
- Tx
- Internal Tx
- ERC-20
- NFTs
Latest 25 from a total of 688,853 transactions
(More than 25 Pending Txns)Transaction Hash MethodBlockFromTo0x43697ef8f193b47b6f76b051b69d20ba64834a5170779a5267fe2e8cdd58d1f9 Swap Tokens Mult... (pending) 2024-12-12 9:23:16 31 mins ago 1733995396 IN 0 ETH$0.00 (Pending) (Pending) 0x48f6253d3044cdcacf9c1df4ada34df4af6279e62a1dac8b0e977f27c974a76d Swap Tokens Sing... (pending) 2024-12-12 9:21:21 33 mins ago 1733995281 IN 0 ETH$0.00 (Pending) (Pending) 0x248c3b9250a397d246b249b06bcd2e9e45e75dc1fc68efb2ba31b17e96a35b92 Swap Tokens Sing... (pending) 2024-12-12 9:10:39 44 mins ago 1733994639 IN 0 ETH$0.00 (Pending) (Pending) 0xc6c5759da8ddfa90ec93f0cc3cf232418ef602f4cc441ebf79cf2b89b20ba0ed Swap Tokens Sing... (pending) 2024-12-12 8:40:05 1 hr ago 1733992805 IN 0 ETH$0.00 (Pending) (Pending) 0x1bf3029d88033cc5524375ebe04f64c7da9763ac3771698e484e0216975f3d7f Swap Tokens Sing... (pending) 2024-12-12 8:25:15 1 hr ago 1733991915 IN 0.0002 ETH$0.79 (Pending) (Pending) 0x9fc50a027d2f2489c9e27e1db6424722bbebc468089e70cf6a68b5774b4f050f Swap Tokens Sing... (pending) 2024-12-12 8:24:02 1 hr ago 1733991842 IN 0.00005 ETH$0.20 (Pending) (Pending) 0x35341a36c8b11d7e4e04268a49a02829fb60efde1f8eafbeb5778a08cc57aa2c Start Bridge Tok... (pending) 2024-12-10 21:02:41 36 hrs ago 1733864561 IN 0.0008 ETH$3.14 (Pending) (Pending) 0xeb83518ba20c35f54767d4c061fad35c2d6d5e68ed4bdfa344fd3fef6c7c8fed Swap And Start B... (pending) 2024-12-10 6:45:14 2 days ago 1733813114 IN 0 ETH$0.00 (Pending) (Pending) 0xfa38605203cadab53672d7a376bb21604a6166ef3233f4b54a10ec77875aab2d Start Bridge Tok... (pending) 2024-12-10 6:06:52 2 days ago 1733810812 IN 0.0139818059 ETH$54.95 (Pending) (Pending) 0xf4c5d00a0dc9eb99dd06fd6c0ae9f53ba5fe1cc99f40e08fef0dd8f9b966f614 Swap And Start B... (pending) 2024-12-10 6:02:32 2 days ago 1733810552 IN 0 ETH$0.00 (Pending) (Pending) 0x514e4681b6a411cdf18a59b1fc4ea587eec1d5d7c409582db60d911c896ff95f Swap And Start B... (pending) 2024-12-10 6:01:57 2 days ago 1733810517 IN 0 ETH$0.00 (Pending) (Pending) 0x7043f1bdc6a666894fe468950023590a260daa0360ee56767b55e0b580106673 Swap Tokens Sing... (pending) 2024-12-10 6:01:41 2 days ago 1733810501 IN 0 ETH$0.00 (Pending) (Pending) 0xc831269f290eb8fa2d79ac70312524321e98a2dac936c2227d7373a14128e3bd Swap And Start B... (pending) 2024-12-10 6:01:37 2 days ago 1733810497 IN 0 ETH$0.00 (Pending) (Pending) 0xd7f19b778bb8e5a33d7f2ecddb735e5d8d2d4ad0f1f557f4acf72a57e20d0240 Swap Tokens Mult... (pending) 2024-12-10 6:01:37 2 days ago 1733810497 IN 0 ETH$0.00 (Pending) (Pending) 0x171df83189ac703fd2ec684fd3f84bfc4b08d502a6f6092694c65f684f5eeea0 Swap Tokens Mult... (pending) 2024-12-08 20:08:22 3 days ago 1733688502 IN 0 ETH$0.00 (Pending) (Pending) 0x7abcc93b9ea3f04d1f67ffaa6f8d6df4f47929d087eb6468df257e679406de03 Swap And Start B... (pending) 2024-12-08 7:14:52 4 days ago 1733642092 IN 0 ETH$0.00 (Pending) (Pending) 0x484b2e8b37a950a2d67f9e72bd855615e3e6db0a30a9e7502fd2af279e453a06 Swap And Start B... (pending) 2024-12-08 5:15:36 4 days ago 1733634936 IN 0 ETH$0.00 (Pending) (Pending) 0xb5fd15a362bb8760c4465fde18ffe9bf892c55745e030b1a8839675bb1c1e221 Swap And Start B... (pending) 2024-12-08 2:18:51 4 days ago 1733624331 IN 0.0012603783 ETH$4.95 (Pending) (Pending) 0xa77ee6a668d4d50e999d15e61ac7fb8c23d1673bafc0f06f307109da1941ecb2 Swap And Start B... (pending) 2024-12-08 2:18:32 4 days ago 1733624312 IN 0.0008829877 ETH$3.47 (Pending) (Pending) 0x38cc97c396b8ce5adfa9320809825a30530f0609e086a34716adc99947d6c1af Start Bridge Tok... (pending) 2024-12-08 2:14:15 4 days ago 1733624055 IN 0 ETH$0.00 (Pending) (Pending) 0x9e39b4112cd677b989f2452dcbbc6af23533b1b898ff62110ff4e934ce09a46b Start Bridge Tok... (pending) 2024-12-08 2:14:09 4 days ago 1733624049 IN 0 ETH$0.00 (Pending) (Pending) 0xa27e94c923bf4113fe34e9e030e2a9f36e18d3473cddc0fa197288eddb1c496e Swap Tokens Mult... (pending) 2024-12-08 2:14:07 4 days ago 1733624047 IN 0 ETH$0.00 (Pending) (Pending) 0x0b0c50cd5d3d27943a840be217c1a436301b82c39cdd61c96557096bcd9b56f0 Swap And Start B... (pending) 2024-12-08 2:13:52 4 days ago 1733624032 IN 0.0010653767 ETH$4.19 (Pending) (Pending) 0x9749fa875753f64713f018972bb0d35df2870b683108c4866000087d78ca15ea Swap And Start B... (pending) 2024-12-08 2:13:40 4 days ago 1733624020 IN 0 ETH$0.00 (Pending) (Pending) 0x503f826cc049e98b55a8d9e4fcd0a10d146eb156781d7a43e5d6b40b1f2d5d49 Swap Tokens Sing... (pending) 2024-12-07 0:01:41 5 days ago 1733529701 IN 0 ETH$0.00 (Pending) (Pending) Latest 25 internal transactions (View All)
Advanced mode:Parent Transaction Hash Block FromTo21385658 2024-12-12 9:53:59 55 secs ago 1733997239 0 ETH$0.00 21385658 2024-12-12 9:53:59 55 secs ago 1733997239 0.28100346 ETH$1,104.35 21385658 2024-12-12 9:53:59 55 secs ago 1733997239 0.28100346 ETH$1,104.35 21385658 2024-12-12 9:53:59 55 secs ago 1733997239 0.28341246 ETH$1,113.82 21385658 2024-12-12 9:53:59 55 secs ago 1733997239 0.00991967 ETH$38.98 21385658 2024-12-12 9:53:59 55 secs ago 1733997239 0.00991967 ETH$38.98 21385658 2024-12-12 9:53:59 55 secs ago 1733997239 0.01 ETH$39.30 21385657 2024-12-12 9:53:47 1 min ago 1733997227 0.228045 ETH$896.22 21385657 2024-12-12 9:53:47 1 min ago 1733997227 0.228045 ETH$896.22 21385657 2024-12-12 9:53:47 1 min ago 1733997227 0.23 ETH$903.91 21385656 2024-12-12 9:53:35 1 min ago 1733997215 0.03019263 ETH$118.66 21385656 2024-12-12 9:53:35 1 min ago 1733997215 0.03019263 ETH$118.66 21385656 2024-12-12 9:53:35 1 min ago 1733997215 0.03027296 ETH$118.97 21385656 2024-12-12 9:53:35 1 min ago 1733997215 0.03027296 ETH$118.97 21385656 2024-12-12 9:53:35 1 min ago 1733997215 0.03053248 ETH$119.99 21385652 2024-12-12 9:52:47 2 mins ago 1733997167 0.04768198 ETH$187.39 21385652 2024-12-12 9:52:47 2 mins ago 1733997167 0.04768198 ETH$187.39 21385652 2024-12-12 9:52:47 2 mins ago 1733997167 0.0477623 ETH$187.71 21385652 2024-12-12 9:52:47 2 mins ago 1733997167 0.0477623 ETH$187.71 21385652 2024-12-12 9:52:47 2 mins ago 1733997167 0.04817176 ETH$189.32 21385652 2024-12-12 9:52:47 2 mins ago 1733997167 0.009915 ETH$38.97 21385652 2024-12-12 9:52:47 2 mins ago 1733997167 0.009915 ETH$38.97 21385652 2024-12-12 9:52:47 2 mins ago 1733997167 0.01 ETH$39.30 21385649 2024-12-12 9:52:11 2 mins ago 1733997131 0.34818 ETH$1,368.36 21385649 2024-12-12 9:52:11 2 mins ago 1733997131 0.34818 ETH$1,368.36 Loading...LoadingContract Name:LiFiDiamond
Compiler Versionv0.8.17+commit.8df45f5f
Optimization Enabled:Yes with 10000 runs
Other Settings:default evmVersionContract Source Code (Solidity Standard Json-Input format)
// SPDX-License-Identifier: MIT pragma solidity 0.8.17; import { LibDiamond } from "./Libraries/LibDiamond.sol"; import { IDiamondCut } from "./Interfaces/IDiamondCut.sol"; import { LibUtil } from "./Libraries/LibUtil.sol"; contract LiFiDiamond { constructor(address _contractOwner, address _diamondCutFacet) payable { LibDiamond.setContractOwner(_contractOwner); // Add the diamondCut external function from the diamondCutFacet IDiamondCut.FacetCut[] memory cut = new IDiamondCut.FacetCut[](1); bytes4[] memory functionSelectors = new bytes4[](1); functionSelectors[0] = IDiamondCut.diamondCut.selector; cut[0] = IDiamondCut.FacetCut({ facetAddress: _diamondCutFacet, action: IDiamondCut.FacetCutAction.Add, functionSelectors: functionSelectors }); LibDiamond.diamondCut(cut, address(0), ""); } // Find facet for function that is called and execute the // function if a facet is found and return any value. // solhint-disable-next-line no-complex-fallback fallback() external payable { LibDiamond.DiamondStorage storage ds; bytes32 position = LibDiamond.DIAMOND_STORAGE_POSITION; // get diamond storage // solhint-disable-next-line no-inline-assembly assembly { ds.slot := position } // get facet from function selector address facet = ds.selectorToFacetAndPosition[msg.sig].facetAddress; if (facet == address(0)) { revert LibDiamond.FunctionDoesNotExist(); } // Execute external function from facet using delegatecall and return any value. // solhint-disable-next-line no-inline-assembly assembly { // copy function selector and any arguments calldatacopy(0, 0, calldatasize()) // execute function call using the facet let result := delegatecall(gas(), facet, 0, calldatasize(), 0, 0) // get any return value returndatacopy(0, 0, returndatasize()) // return any return value or error back to the caller switch result case 0 { revert(0, returndatasize()) } default { return(0, returndatasize()) } } } // Able to receive ether // solhint-disable-next-line no-empty-blocks receive() external payable {} }
// SPDX-License-Identifier: MIT pragma solidity 0.8.17; error TokenAddressIsZero(); error TokenNotSupported(); error CannotBridgeToSameNetwork(); error ZeroPostSwapBalance(); error NoSwapDataProvided(); error NativeValueWithERC(); error ContractCallNotAllowed(); error NullAddrIsNotAValidSpender(); error NullAddrIsNotAnERC20Token(); error NoTransferToNullAddress(); error NativeAssetTransferFailed(); error InvalidBridgeConfigLength(); error InvalidAmount(); error InvalidContract(); error InvalidConfig(); error UnsupportedChainId(uint256 chainId); error InvalidReceiver(); error InvalidDestinationChain(); error InvalidSendingToken(); error InvalidCaller(); error AlreadyInitialized(); error NotInitialized(); error OnlyContractOwner(); error CannotAuthoriseSelf(); error RecoveryAddressCannotBeZero(); error CannotDepositNativeToken(); error InvalidCallData(); error NativeAssetNotSupported(); error UnAuthorized(); error NoSwapFromZeroBalance(); error InvalidFallbackAddress(); error CumulativeSlippageTooHigh(uint256 minAmount, uint256 receivedAmount); error InsufficientBalance(uint256 required, uint256 balance); error ZeroAmount(); error InvalidFee(); error InformationMismatch(); error NotAContract(); error NotEnoughBalance(uint256 requested, uint256 available);
// SPDX-License-Identifier: MIT pragma solidity 0.8.17; 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); }
// SPDX-License-Identifier: MIT pragma solidity 0.8.17; library LibBytes { // solhint-disable no-inline-assembly // LibBytes specific errors error SliceOverflow(); error SliceOutOfBounds(); error AddressOutOfBounds(); error UintOutOfBounds(); // ------------------------- function concat(bytes memory _preBytes, bytes memory _postBytes) internal pure returns (bytes memory) { bytes memory tempBytes; assembly { // Get a location of some free memory and store it in tempBytes as // Solidity does for memory variables. tempBytes := mload(0x40) // Store the length of the first bytes array at the beginning of // the memory for tempBytes. let length := mload(_preBytes) mstore(tempBytes, length) // Maintain a memory counter for the current write location in the // temp bytes array by adding the 32 bytes for the array length to // the starting location. let mc := add(tempBytes, 0x20) // Stop copying when the memory counter reaches the length of the // first bytes array. let end := add(mc, length) for { // Initialize a copy counter to the start of the _preBytes data, // 32 bytes into its memory. let cc := add(_preBytes, 0x20) } lt(mc, end) { // Increase both counters by 32 bytes each iteration. mc := add(mc, 0x20) cc := add(cc, 0x20) } { // Write the _preBytes data into the tempBytes memory 32 bytes // at a time. mstore(mc, mload(cc)) } // Add the length of _postBytes to the current length of tempBytes // and store it as the new length in the first 32 bytes of the // tempBytes memory. length := mload(_postBytes) mstore(tempBytes, add(length, mload(tempBytes))) // Move the memory counter back from a multiple of 0x20 to the // actual end of the _preBytes data. mc := end // Stop copying when the memory counter reaches the new combined // length of the arrays. end := add(mc, length) for { let cc := add(_postBytes, 0x20) } lt(mc, end) { mc := add(mc, 0x20) cc := add(cc, 0x20) } { mstore(mc, mload(cc)) } // Update the free-memory pointer by padding our last write location // to 32 bytes: add 31 bytes to the end of tempBytes to move to the // next 32 byte block, then round down to the nearest multiple of // 32. If the sum of the length of the two arrays is zero then add // one before rounding down to leave a blank 32 bytes (the length block with 0). mstore( 0x40, and( add(add(end, iszero(add(length, mload(_preBytes)))), 31), not(31) // Round down to the nearest 32 bytes. ) ) } return tempBytes; } function concatStorage(bytes storage _preBytes, bytes memory _postBytes) internal { assembly { // Read the first 32 bytes of _preBytes storage, which is the length // of the array. (We don't need to use the offset into the slot // because arrays use the entire slot.) let fslot := sload(_preBytes.slot) // Arrays of 31 bytes or less have an even value in their slot, // while longer arrays have an odd value. The actual length is // the slot divided by two for odd values, and the lowest order // byte divided by two for even values. // If the slot is even, bitwise and the slot with 255 and divide by // two to get the length. If the slot is odd, bitwise and the slot // with -1 and divide by two. let slength := div(and(fslot, sub(mul(0x100, iszero(and(fslot, 1))), 1)), 2) let mlength := mload(_postBytes) let newlength := add(slength, mlength) // slength can contain both the length and contents of the array // if length < 32 bytes so let's prepare for that // v. http://solidity.readthedocs.io/en/latest/miscellaneous.html#layout-of-state-variables-in-storage switch add(lt(slength, 32), lt(newlength, 32)) case 2 { // Since the new array still fits in the slot, we just need to // update the contents of the slot. // uint256(bytes_storage) = uint256(bytes_storage) + uint256(bytes_memory) + new_length sstore( _preBytes.slot, // all the modifications to the slot are inside this // next block add( // we can just add to the slot contents because the // bytes we want to change are the LSBs fslot, add( mul( div( // load the bytes from memory mload(add(_postBytes, 0x20)), // zero all bytes to the right exp(0x100, sub(32, mlength)) ), // and now shift left the number of bytes to // leave space for the length in the slot exp(0x100, sub(32, newlength)) ), // increase length by the double of the memory // bytes length mul(mlength, 2) ) ) ) } case 1 { // The stored value fits in the slot, but the combined value // will exceed it. // get the keccak hash to get the contents of the array mstore(0x0, _preBytes.slot) let sc := add(keccak256(0x0, 0x20), div(slength, 32)) // save new length sstore(_preBytes.slot, add(mul(newlength, 2), 1)) // The contents of the _postBytes array start 32 bytes into // the structure. Our first read should obtain the `submod` // bytes that can fit into the unused space in the last word // of the stored array. To get this, we read 32 bytes starting // from `submod`, so the data we read overlaps with the array // contents by `submod` bytes. Masking the lowest-order // `submod` bytes allows us to add that value directly to the // stored value. let submod := sub(32, slength) let mc := add(_postBytes, submod) let end := add(_postBytes, mlength) let mask := sub(exp(0x100, submod), 1) sstore( sc, add( and(fslot, 0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00), and(mload(mc), mask) ) ) for { mc := add(mc, 0x20) sc := add(sc, 1) } lt(mc, end) { sc := add(sc, 1) mc := add(mc, 0x20) } { sstore(sc, mload(mc)) } mask := exp(0x100, sub(mc, end)) sstore(sc, mul(div(mload(mc), mask), mask)) } default { // get the keccak hash to get the contents of the array mstore(0x0, _preBytes.slot) // Start copying to the last used word of the stored array. let sc := add(keccak256(0x0, 0x20), div(slength, 32)) // save new length sstore(_preBytes.slot, add(mul(newlength, 2), 1)) // Copy over the first `submod` bytes of the new data as in // case 1 above. let slengthmod := mod(slength, 32) let submod := sub(32, slengthmod) let mc := add(_postBytes, submod) let end := add(_postBytes, mlength) let mask := sub(exp(0x100, submod), 1) sstore(sc, add(sload(sc), and(mload(mc), mask))) for { sc := add(sc, 1) mc := add(mc, 0x20) } lt(mc, end) { sc := add(sc, 1) mc := add(mc, 0x20) } { sstore(sc, mload(mc)) } mask := exp(0x100, sub(mc, end)) sstore(sc, mul(div(mload(mc), mask), mask)) } } } function slice( bytes memory _bytes, uint256 _start, uint256 _length ) internal pure returns (bytes memory) { if (_length + 31 < _length) revert SliceOverflow(); if (_bytes.length < _start + _length) revert SliceOutOfBounds(); bytes memory tempBytes; assembly { switch iszero(_length) case 0 { // Get a location of some free memory and store it in tempBytes as // Solidity does for memory variables. tempBytes := mload(0x40) // The first word of the slice result is potentially a partial // word read from the original array. To read it, we calculate // the length of that partial word and start copying that many // bytes into the array. The first word we copy will start with // data we don't care about, but the last `lengthmod` bytes will // land at the beginning of the contents of the new array. When // we're done copying, we overwrite the full first word with // the actual length of the slice. let lengthmod := and(_length, 31) // The multiplication in the next line is necessary // because when slicing multiples of 32 bytes (lengthmod == 0) // the following copy loop was copying the origin's length // and then ending prematurely not copying everything it should. let mc := add(add(tempBytes, lengthmod), mul(0x20, iszero(lengthmod))) let end := add(mc, _length) for { // The multiplication in the next line has the same exact purpose // as the one above. let cc := add(add(add(_bytes, lengthmod), mul(0x20, iszero(lengthmod))), _start) } lt(mc, end) { mc := add(mc, 0x20) cc := add(cc, 0x20) } { mstore(mc, mload(cc)) } mstore(tempBytes, _length) //update free-memory pointer //allocating the array padded to 32 bytes like the compiler does now mstore(0x40, and(add(mc, 31), not(31))) } //if we want a zero-length slice let's just return a zero-length array default { tempBytes := mload(0x40) //zero out the 32 bytes slice we are about to return //we need to do it because Solidity does not garbage collect mstore(tempBytes, 0) mstore(0x40, add(tempBytes, 0x20)) } } return tempBytes; } function toAddress(bytes memory _bytes, uint256 _start) internal pure returns (address) { if (_bytes.length < _start + 20) { revert AddressOutOfBounds(); } address tempAddress; assembly { tempAddress := div(mload(add(add(_bytes, 0x20), _start)), 0x1000000000000000000000000) } return tempAddress; } function toUint8(bytes memory _bytes, uint256 _start) internal pure returns (uint8) { if (_bytes.length < _start + 1) { revert UintOutOfBounds(); } uint8 tempUint; assembly { tempUint := mload(add(add(_bytes, 0x1), _start)) } return tempUint; } function toUint16(bytes memory _bytes, uint256 _start) internal pure returns (uint16) { if (_bytes.length < _start + 2) { revert UintOutOfBounds(); } uint16 tempUint; assembly { tempUint := mload(add(add(_bytes, 0x2), _start)) } return tempUint; } function toUint32(bytes memory _bytes, uint256 _start) internal pure returns (uint32) { if (_bytes.length < _start + 4) { revert UintOutOfBounds(); } uint32 tempUint; assembly { tempUint := mload(add(add(_bytes, 0x4), _start)) } return tempUint; } function toUint64(bytes memory _bytes, uint256 _start) internal pure returns (uint64) { if (_bytes.length < _start + 8) { revert UintOutOfBounds(); } uint64 tempUint; assembly { tempUint := mload(add(add(_bytes, 0x8), _start)) } return tempUint; } function toUint96(bytes memory _bytes, uint256 _start) internal pure returns (uint96) { if (_bytes.length < _start + 12) { revert UintOutOfBounds(); } uint96 tempUint; assembly { tempUint := mload(add(add(_bytes, 0xc), _start)) } return tempUint; } function toUint128(bytes memory _bytes, uint256 _start) internal pure returns (uint128) { if (_bytes.length < _start + 16) { revert UintOutOfBounds(); } uint128 tempUint; assembly { tempUint := mload(add(add(_bytes, 0x10), _start)) } return tempUint; } function toUint256(bytes memory _bytes, uint256 _start) internal pure returns (uint256) { if (_bytes.length < _start + 32) { revert UintOutOfBounds(); } uint256 tempUint; assembly { tempUint := mload(add(add(_bytes, 0x20), _start)) } return tempUint; } function toBytes32(bytes memory _bytes, uint256 _start) internal pure returns (bytes32) { if (_bytes.length < _start + 32) { revert UintOutOfBounds(); } bytes32 tempBytes32; assembly { tempBytes32 := mload(add(add(_bytes, 0x20), _start)) } return tempBytes32; } function equal(bytes memory _preBytes, bytes memory _postBytes) internal pure returns (bool) { bool success = true; assembly { let length := mload(_preBytes) // if lengths don't match the arrays are not equal switch eq(length, mload(_postBytes)) case 1 { // cb is a circuit breaker in the for loop since there's // no said feature for inline assembly loops // cb = 1 - don't breaker // cb = 0 - break let cb := 1 let mc := add(_preBytes, 0x20) let end := add(mc, length) for { let cc := add(_postBytes, 0x20) // the next line is the loop condition: // while(uint256(mc < end) + cb == 2) } eq(add(lt(mc, end), cb), 2) { mc := add(mc, 0x20) cc := add(cc, 0x20) } { // if any of these checks fails then arrays are not equal if iszero(eq(mload(mc), mload(cc))) { // unsuccess: success := 0 cb := 0 } } } default { // unsuccess: success := 0 } } return success; } function equalStorage(bytes storage _preBytes, bytes memory _postBytes) internal view returns (bool) { bool success = true; assembly { // we know _preBytes_offset is 0 let fslot := sload(_preBytes.slot) // Decode the length of the stored array like in concatStorage(). let slength := div(and(fslot, sub(mul(0x100, iszero(and(fslot, 1))), 1)), 2) let mlength := mload(_postBytes) // if lengths don't match the arrays are not equal switch eq(slength, mlength) case 1 { // slength can contain both the length and contents of the array // if length < 32 bytes so let's prepare for that // v. http://solidity.readthedocs.io/en/latest/miscellaneous.html#layout-of-state-variables-in-storage if iszero(iszero(slength)) { switch lt(slength, 32) case 1 { // blank the last byte which is the length fslot := mul(div(fslot, 0x100), 0x100) if iszero(eq(fslot, mload(add(_postBytes, 0x20)))) { // unsuccess: success := 0 } } default { // cb is a circuit breaker in the for loop since there's // no said feature for inline assembly loops // cb = 1 - don't breaker // cb = 0 - break let cb := 1 // get the keccak hash to get the contents of the array mstore(0x0, _preBytes.slot) let sc := keccak256(0x0, 0x20) let mc := add(_postBytes, 0x20) let end := add(mc, mlength) // the next line is the loop condition: // while(uint256(mc < end) + cb == 2) // solhint-disable-next-line no-empty-blocks for { } eq(add(lt(mc, end), cb), 2) { sc := add(sc, 1) mc := add(mc, 0x20) } { if iszero(eq(sload(sc), mload(mc))) { // unsuccess: success := 0 cb := 0 } } } } } default { // unsuccess: success := 0 } } return success; } }
// SPDX-License-Identifier: MIT pragma solidity 0.8.17; import { IDiamondCut } from "../Interfaces/IDiamondCut.sol"; import { LibUtil } from "../Libraries/LibUtil.sol"; import { OnlyContractOwner } from "../Errors/GenericErrors.sol"; /// Implementation of EIP-2535 Diamond Standard /// https://eips.ethereum.org/EIPS/eip-2535 library LibDiamond { bytes32 internal constant DIAMOND_STORAGE_POSITION = keccak256("diamond.standard.diamond.storage"); // Diamond specific errors error IncorrectFacetCutAction(); error NoSelectorsInFace(); error FunctionAlreadyExists(); error FacetAddressIsZero(); error FacetAddressIsNotZero(); error FacetContainsNoCode(); error FunctionDoesNotExist(); error FunctionIsImmutable(); error InitZeroButCalldataNotEmpty(); error CalldataEmptyButInitNotZero(); error InitReverted(); // ---------------- struct FacetAddressAndPosition { address facetAddress; uint96 functionSelectorPosition; // position in facetFunctionSelectors.functionSelectors array } struct FacetFunctionSelectors { bytes4[] functionSelectors; uint256 facetAddressPosition; // position of facetAddress in facetAddresses array } struct DiamondStorage { // 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 (DiamondStorage storage ds) { bytes32 position = DIAMOND_STORAGE_POSITION; // solhint-disable-next-line no-inline-assembly assembly { ds.slot := position } } event OwnershipTransferred(address indexed previousOwner, address indexed newOwner); function setContractOwner(address _newOwner) internal { DiamondStorage 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 { if (msg.sender != diamondStorage().contractOwner) revert OnlyContractOwner(); } 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; ) { 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 IncorrectFacetCutAction(); } unchecked { ++facetIndex; } } emit DiamondCut(_diamondCut, _init, _calldata); initializeDiamondCut(_init, _calldata); } function addFunctions(address _facetAddress, bytes4[] memory _functionSelectors) internal { if (_functionSelectors.length == 0) { revert NoSelectorsInFace(); } DiamondStorage storage ds = diamondStorage(); if (LibUtil.isZeroAddress(_facetAddress)) { revert FacetAddressIsZero(); } 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; ) { bytes4 selector = _functionSelectors[selectorIndex]; address oldFacetAddress = ds.selectorToFacetAndPosition[selector].facetAddress; if (!LibUtil.isZeroAddress(oldFacetAddress)) { revert FunctionAlreadyExists(); } addFunction(ds, selector, selectorPosition, _facetAddress); unchecked { ++selectorPosition; ++selectorIndex; } } } function replaceFunctions(address _facetAddress, bytes4[] memory _functionSelectors) internal { if (_functionSelectors.length == 0) { revert NoSelectorsInFace(); } DiamondStorage storage ds = diamondStorage(); if (LibUtil.isZeroAddress(_facetAddress)) { revert FacetAddressIsZero(); } 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; ) { bytes4 selector = _functionSelectors[selectorIndex]; address oldFacetAddress = ds.selectorToFacetAndPosition[selector].facetAddress; if (oldFacetAddress == _facetAddress) { revert FunctionAlreadyExists(); } removeFunction(ds, oldFacetAddress, selector); addFunction(ds, selector, selectorPosition, _facetAddress); unchecked { ++selectorPosition; ++selectorIndex; } } } function removeFunctions(address _facetAddress, bytes4[] memory _functionSelectors) internal { if (_functionSelectors.length == 0) { revert NoSelectorsInFace(); } DiamondStorage storage ds = diamondStorage(); // if function does not exist then do nothing and return if (!LibUtil.isZeroAddress(_facetAddress)) { revert FacetAddressIsNotZero(); } for (uint256 selectorIndex; selectorIndex < _functionSelectors.length; ) { bytes4 selector = _functionSelectors[selectorIndex]; address oldFacetAddress = ds.selectorToFacetAndPosition[selector].facetAddress; removeFunction(ds, oldFacetAddress, selector); unchecked { ++selectorIndex; } } } function addFacet(DiamondStorage storage ds, address _facetAddress) internal { enforceHasContractCode(_facetAddress); ds.facetFunctionSelectors[_facetAddress].facetAddressPosition = ds.facetAddresses.length; ds.facetAddresses.push(_facetAddress); } function addFunction( DiamondStorage 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( DiamondStorage storage ds, address _facetAddress, bytes4 _selector ) internal { if (LibUtil.isZeroAddress(_facetAddress)) { revert FunctionDoesNotExist(); } // an immutable function is a function defined directly in a diamond if (_facetAddress == address(this)) { revert FunctionIsImmutable(); } // 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 (LibUtil.isZeroAddress(_init)) { if (_calldata.length != 0) { revert InitZeroButCalldataNotEmpty(); } } else { if (_calldata.length == 0) { revert CalldataEmptyButInitNotZero(); } if (_init != address(this)) { enforceHasContractCode(_init); } // solhint-disable-next-line avoid-low-level-calls (bool success, bytes memory error) = _init.delegatecall(_calldata); if (!success) { if (error.length > 0) { // bubble up the error revert(string(error)); } else { revert InitReverted(); } } } } function enforceHasContractCode(address _contract) internal view { uint256 contractSize; // solhint-disable-next-line no-inline-assembly assembly { contractSize := extcodesize(_contract) } if (contractSize == 0) { revert FacetContainsNoCode(); } } }
// SPDX-License-Identifier: MIT pragma solidity 0.8.17; import "./LibBytes.sol"; library LibUtil { using LibBytes for bytes; function getRevertMsg(bytes memory _res) internal pure returns (string memory) { // If the _res length is less than 68, then the transaction failed silently (without a revert message) if (_res.length < 68) return "Transaction reverted silently"; bytes memory revertData = _res.slice(4, _res.length - 4); // Remove the selector which is the first 4 bytes return abi.decode(revertData, (string)); // All that remains is the revert string } /// @notice Determines whether the given address is the zero address /// @param addr The address to verify /// @return Boolean indicating if the address is the zero address function isZeroAddress(address addr) internal pure returns (bool) { return addr == address(0); } }
{ "remappings": [ "@axelar-network/=node_modules/@axelar-network/", "@connext/=node_modules/@connext/", "@eth-optimism/=node_modules/@hop-protocol/sdk/node_modules/@eth-optimism/", "@openzeppelin/=node_modules/@openzeppelin/", "@uniswap/=node_modules/@uniswap/", "create3-factory/=lib/create3-factory/src/", "ds-test/=lib/ds-test/src/", "eth-gas-reporter/=node_modules/eth-gas-reporter/", "forge-std/=lib/forge-std/src/", "hardhat-deploy/=node_modules/hardhat-deploy/", "hardhat/=node_modules/hardhat/", "lifi/=src/", "solmate/=lib/solmate/src/" ], "optimizer": { "enabled": true, "runs": 10000 }, "metadata": { "bytecodeHash": "ipfs" }, "outputSelection": { "*": { "*": [ "evm.bytecode", "evm.deployedBytecode", "devdoc", "userdoc", "metadata", "abi" ] } }, "evmVersion": "london", "libraries": {} }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
Contract ABI
[{"inputs":[{"internalType":"address","name":"_contractOwner","type":"address"},{"internalType":"address","name":"_diamondCutFacet","type":"address"}],"stateMutability":"payable","type":"constructor"},{"inputs":[],"name":"CalldataEmptyButInitNotZero","type":"error"},{"inputs":[],"name":"FacetAddressIsNotZero","type":"error"},{"inputs":[],"name":"FacetAddressIsZero","type":"error"},{"inputs":[],"name":"FacetContainsNoCode","type":"error"},{"inputs":[],"name":"FunctionAlreadyExists","type":"error"},{"inputs":[],"name":"FunctionDoesNotExist","type":"error"},{"inputs":[],"name":"FunctionIsImmutable","type":"error"},{"inputs":[],"name":"IncorrectFacetCutAction","type":"error"},{"inputs":[],"name":"InitReverted","type":"error"},{"inputs":[],"name":"InitZeroButCalldataNotEmpty","type":"error"},{"inputs":[],"name":"NoSelectorsInFace","type":"error"},{"stateMutability":"payable","type":"fallback"},{"stateMutability":"payable","type":"receive"}]
Contract Creation Code
60806040526040516200243438038062002434833981016040819052620000269162000d95565b6200003c826200015660201b620000d21760201c565b604080516001808252818301909252600091816020015b60408051606080820183526000808352602083015291810191909152815260200190600190039081620000535750506040805160018082528183019092529192506000919060208083019080368337019050509050631f931c1c60e01b81600081518110620000c657620000c662000dcd565b6001600160e01b031990921660209283029190910182015260408051606081019091526001600160a01b038516815290810160008152602001828152508260008151811062000119576200011962000dcd565b60200260200101819052506200014c82600060405180602001604052806000815250620001da60201b6200018c1760201c565b5050505062000fcc565b7fc8fcad8db84d3cc18b4c41d551ea0ee66dd599cde068d998e57d5e09332c132080546001600160a01b031981166001600160a01b0384811691821790935560405160008051602062002414833981519152939092169182907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a3505050565b60005b835181101562000396576000848281518110620001fe57620001fe62000dcd565b60200260200101516020015190506000600281111562000222576200022262000de3565b81600281111562000237576200023762000de3565b0362000295576200028f85838151811062000256576200025662000dcd565b60200260200101516000015186848151811062000277576200027762000dcd565b602002602001015160400151620003e560201b60201c565b6200038c565b6001816002811115620002ac57620002ac62000de3565b0362000304576200028f858381518110620002cb57620002cb62000dcd565b602002602001015160000151868481518110620002ec57620002ec62000dcd565b602002602001015160400151620005c160201b60201c565b60028160028111156200031b576200031b62000de3565b0362000373576200028f8583815181106200033a576200033a62000dcd565b6020026020010151600001518684815181106200035b576200035b62000dcd565b6020026020010151604001516200079560201b60201c565b60405163e548e6b560e01b815260040160405180910390fd5b50600101620001dd565b507f8faa70878671ccd212d20771b795c50af8fd3ff6cf27f4bde57e5d4de0aeb673838383604051620003cc9392919062000e4d565b60405180910390a1620003e0828262000874565b505050565b805160000362000408576040516307bc559560e41b815260040160405180910390fd5b60006000805160206200241483398151915290506200043283620009a460201b6200036d1760201c565b156200045157604051636347641d60e11b815260040160405180910390fd5b6001600160a01b0383166000908152600182016020526040812054906001600160601b03821690036200048a576200048a8285620009b1565b60005b8351811015620005ba576000848281518110620004ae57620004ae62000dcd565b6020908102919091018101516001600160e01b03198116600090815286835260409020549092506001600160a01b031690620004f59082906200036d620009a4821b17901c565b620005135760405163a023275d60e01b815260040160405180910390fd5b6001600160e01b0319821660008181526020878152604080832080546001600160a01b03908116600160a01b6001600160601b038c16021782558c168085526001808c0185529285208054938401815585528385206008840401805463ffffffff60079095166004026101000a948502191660e08a901c94909402939093179092559390925287905281546001600160a01b0319161790555050600191820191016200048d565b5050505050565b8051600003620005e4576040516307bc559560e41b815260040160405180910390fd5b60006000805160206200241483398151915290506200060e83620009a460201b6200036d1760201c565b156200062d57604051636347641d60e11b815260040160405180910390fd5b6001600160a01b0383166000908152600182016020526040812054906001600160601b03821690036200066657620006668285620009b1565b60005b8351811015620005ba5760008482815181106200068a576200068a62000dcd565b6020908102919091018101516001600160e01b031981166000908152918690526040909120549091506001600160a01b039081169087168103620006e15760405163a023275d60e01b815260040160405180910390fd5b620006ee85828462000a04565b6001600160e01b0319821660008181526020878152604080832080546001600160a01b03908116600160a01b6001600160601b038c16021782558c168085526001808c0185529285208054938401815585528385206008840401805463ffffffff60079095166004026101000a948502191660e08a901c94909402939093179092559390925287905281546001600160a01b03191617905550506001918201910162000669565b8051600003620007b8576040516307bc559560e41b815260040160405180910390fd5b6000600080516020620024148339815191529050620007e283620009a460201b6200036d1760201c565b6200080057604051633ce4ef9160e11b815260040160405180910390fd5b60005b82518110156200086e57600083828151811062000824576200082462000dcd565b6020908102919091018101516001600160e01b031981166000908152918590526040909120549091506001600160a01b03166200086384828462000a04565b505060010162000803565b50505050565b6200088a82620009a460201b6200036d1760201c565b15620008b557805115620008b1576040516304c08b4360e51b815260040160405180910390fd5b5050565b8051600003620008d85760405163211002b360e11b815260040160405180910390fd5b6001600160a01b0382163014620008f457620008f48262000d54565b600080836001600160a01b03168360405162000911919062000f54565b600060405180830381855af49150503d80600081146200094e576040519150601f19603f3d011682016040523d82523d6000602084013e62000953565b606091505b5091509150816200086e578051156200098b578060405162461bcd60e51b815260040162000982919062000f72565b60405180910390fd5b60405163c53ebed560e01b815260040160405180910390fd5b6001600160a01b03161590565b620009bc8162000d54565b6002820180546001600160a01b0390921660008181526001948501602090815260408220860185905594840183559182529290200180546001600160a01b0319169091179055565b62000a1a82620009a460201b6200036d1760201c565b1562000a3957604051631535ac5f60e31b815260040160405180910390fd5b306001600160a01b0383160362000a635760405163c3c5ec3760e01b815260040160405180910390fd5b6001600160e01b03198116600090815260208481526040808320546001600160a01b0386168452600180880190935290832054600160a01b9091046001600160601b0316929162000ab49162000f8e565b905080821462000bad576001600160a01b0384166000908152600186016020526040812080548390811062000aed5762000aed62000dcd565b600091825260208083206008830401546001600160a01b038916845260018a019091526040909220805460079092166004026101000a90920460e01b92508291908590811062000b415762000b4162000dcd565b600091825260208083206008830401805463ffffffff60079094166004026101000a938402191660e09590951c929092029390931790556001600160e01b03199290921682528690526040902080546001600160a01b0316600160a01b6001600160601b038516021790555b6001600160a01b0384166000908152600186016020526040902080548062000bd95762000bd962000fb6565b60008281526020808220600860001990940193840401805463ffffffff600460078716026101000a0219169055919092556001600160e01b03198516825286905260408120819055819003620005ba57600285015460009062000c3f9060019062000f8e565b6001600160a01b038616600090815260018089016020526040909120015490915080821462000cf557600087600201838154811062000c825762000c8262000dcd565b6000918252602090912001546002890180546001600160a01b03909216925082918490811062000cb65762000cb662000dcd565b600091825260208083209190910180546001600160a01b0319166001600160a01b03948516179055929091168152600189810190925260409020018190555b8660020180548062000d0b5762000d0b62000fb6565b60008281526020808220830160001990810180546001600160a01b03191690559092019092556001600160a01b0388168252600189810190915260408220015550505050505050565b803b6000819003620008b1576040516271a80360e91b815260040160405180910390fd5b80516001600160a01b038116811462000d9057600080fd5b919050565b6000806040838503121562000da957600080fd5b62000db48362000d78565b915062000dc46020840162000d78565b90509250929050565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052602160045260246000fd5b60005b8381101562000e1657818101518382015260200162000dfc565b50506000910152565b6000815180845262000e3981602086016020860162000df9565b601f01601f19169290920160200192915050565b60006060808301818452808751808352608092508286019150828160051b8701016020808b0160005b8481101562000f2257898403607f19018652815180516001600160a01b0316855283810151898601906003811062000ebe57634e487b7160e01b600052602160045260246000fd5b868601526040918201519186018a905281519081905290840190600090898701905b8083101562000f0c5783516001600160e01b031916825292860192600192909201919086019062000ee0565b5097850197955050509082019060010162000e76565b50506001600160a01b038a1690880152868103604088015262000f46818962000e1f565b9a9950505050505050505050565b6000825162000f6881846020870162000df9565b9190910192915050565b60208152600062000f87602083018462000e1f565b9392505050565b8181038181111562000fb057634e487b7160e01b600052601160045260246000fd5b92915050565b634e487b7160e01b600052603160045260246000fd5b6114388062000fdc6000396000f3fe60806040523661000b57005b600080357fffffffff000000000000000000000000000000000000000000000000000000001681527fc8fcad8db84d3cc18b4c41d551ea0ee66dd599cde068d998e57d5e09332c131c6020819052604090912054819073ffffffffffffffffffffffffffffffffffffffff16806100ae576040517fa9ad62f800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b3660008037600080366000845af43d6000803e8080156100cd573d6000f35b3d6000fd5b7fc8fcad8db84d3cc18b4c41d551ea0ee66dd599cde068d998e57d5e09332c132080547fffffffffffffffffffffffff0000000000000000000000000000000000000000811673ffffffffffffffffffffffffffffffffffffffff8481169182179093556040517fc8fcad8db84d3cc18b4c41d551ea0ee66dd599cde068d998e57d5e09332c131c939092169182907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a3505050565b60005b83518110156103225760008482815181106101ac576101ac611129565b6020026020010151602001519050600060028111156101cd576101cd611158565b8160028111156101df576101df611158565b0361022d576102288583815181106101f9576101f9611129565b60200260200101516000015186848151811061021757610217611129565b602002602001015160400151610387565b610319565b600181600281111561024157610241611158565b0361028a5761022885838151811061025b5761025b611129565b60200260200101516000015186848151811061027957610279611129565b602002602001015160400151610627565b600281600281111561029e5761029e611158565b036102e7576102288583815181106102b8576102b8611129565b6020026020010151600001518684815181106102d6576102d6611129565b6020026020010151604001516108d0565b6040517fe548e6b500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5060010161018f565b507f8faa70878671ccd212d20771b795c50af8fd3ff6cf27f4bde57e5d4de0aeb673838383604051610356939291906111f5565b60405180910390a16103688282610a0c565b505050565b73ffffffffffffffffffffffffffffffffffffffff161590565b80516000036103c2576040517f7bc5595000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b7fc8fcad8db84d3cc18b4c41d551ea0ee66dd599cde068d998e57d5e09332c131c73ffffffffffffffffffffffffffffffffffffffff8316610430576040517fc68ec83a00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff83166000908152600182016020526040812054906bffffffffffffffffffffffff82169003610478576104788285610bad565b60005b835181101561062057600084828151811061049857610498611129565b6020908102919091018101517fffffffff00000000000000000000000000000000000000000000000000000000811660009081529186905260409091205490915073ffffffffffffffffffffffffffffffffffffffff168015610527576040517fa023275d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b7fffffffff000000000000000000000000000000000000000000000000000000008216600081815260208781526040808320805473ffffffffffffffffffffffffffffffffffffffff908116740100000000000000000000000000000000000000006bffffffffffffffffffffffff8c16021782558c168085526001808c0185529285208054938401815585528385206008840401805463ffffffff60079095166004026101000a948502191660e08a901c94909402939093179092559390925287905281547fffffffffffffffffffffffff00000000000000000000000000000000000000001617905550506001918201910161047b565b5050505050565b8051600003610662576040517f7bc5595000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b7fc8fcad8db84d3cc18b4c41d551ea0ee66dd599cde068d998e57d5e09332c131c73ffffffffffffffffffffffffffffffffffffffff83166106d0576040517fc68ec83a00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff83166000908152600182016020526040812054906bffffffffffffffffffffffff82169003610718576107188285610bad565b60005b835181101561062057600084828151811061073857610738611129565b6020908102919091018101517fffffffff00000000000000000000000000000000000000000000000000000000811660009081529186905260409091205490915073ffffffffffffffffffffffffffffffffffffffff90811690871681036107cc576040517fa023275d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6107d7858284610c23565b7fffffffff000000000000000000000000000000000000000000000000000000008216600081815260208781526040808320805473ffffffffffffffffffffffffffffffffffffffff908116740100000000000000000000000000000000000000006bffffffffffffffffffffffff8c16021782558c168085526001808c0185529285208054938401815585528385206008840401805463ffffffff60079095166004026101000a948502191660e08a901c94909402939093179092559390925287905281547fffffffffffffffffffffffff00000000000000000000000000000000000000001617905550506001918201910161071b565b805160000361090b576040517f7bc5595000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b7fc8fcad8db84d3cc18b4c41d551ea0ee66dd599cde068d998e57d5e09332c131c73ffffffffffffffffffffffffffffffffffffffff83161561097a576040517f79c9df2200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60005b8251811015610a0657600083828151811061099a5761099a611129565b6020908102919091018101517fffffffff00000000000000000000000000000000000000000000000000000000811660009081529185905260409091205490915073ffffffffffffffffffffffffffffffffffffffff166109fc848284610c23565b505060010161097d565b50505050565b73ffffffffffffffffffffffffffffffffffffffff8216610a6457805115610a60576040517f9811686000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5050565b8051600003610a9f576040517f4220056600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff82163014610ac557610ac5826110ec565b6000808373ffffffffffffffffffffffffffffffffffffffff1683604051610aed919061135d565b600060405180830381855af49150503d8060008114610b28576040519150601f19603f3d011682016040523d82523d6000602084013e610b2d565b606091505b509150915081610a0657805115610b7b57806040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b729190611379565b60405180910390fd5b6040517fc53ebed500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610bb6816110ec565b60028201805473ffffffffffffffffffffffffffffffffffffffff90921660008181526001948501602090815260408220860185905594840183559182529290200180547fffffffffffffffffffffffff0000000000000000000000000000000000000000169091179055565b73ffffffffffffffffffffffffffffffffffffffff8216610c70576040517fa9ad62f800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b3073ffffffffffffffffffffffffffffffffffffffff831603610cbf576040517fc3c5ec3700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b7fffffffff0000000000000000000000000000000000000000000000000000000081166000908152602084815260408083205473ffffffffffffffffffffffffffffffffffffffff86168452600180880190935290832054740100000000000000000000000000000000000000009091046bffffffffffffffffffffffff169291610d4991611393565b9050808214610e905773ffffffffffffffffffffffffffffffffffffffff841660009081526001860160205260408120805483908110610d8b57610d8b611129565b6000918252602080832060088304015473ffffffffffffffffffffffffffffffffffffffff8916845260018a019091526040909220805460079092166004026101000a90920460e01b925082919085908110610de957610de9611129565b600091825260208083206008830401805463ffffffff60079094166004026101000a938402191660e09590951c929092029390931790557fffffffff0000000000000000000000000000000000000000000000000000000092909216825286905260409020805473ffffffffffffffffffffffffffffffffffffffff16740100000000000000000000000000000000000000006bffffffffffffffffffffffff8516021790555b73ffffffffffffffffffffffffffffffffffffffff841660009081526001860160205260409020805480610ec657610ec66113d3565b6000828152602080822060087fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff90940193840401805463ffffffff600460078716026101000a0219169055919092557fffffffff000000000000000000000000000000000000000000000000000000008516825286905260408120819055819003610620576002850154600090610f5f90600190611393565b73ffffffffffffffffffffffffffffffffffffffff8616600090815260018089016020526040909120015490915080821461104d576000876002018381548110610fab57610fab611129565b60009182526020909120015460028901805473ffffffffffffffffffffffffffffffffffffffff9092169250829184908110610fe957610fe9611129565b600091825260208083209190910180547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff948516179055929091168152600189810190925260409020018190555b86600201805480611060576110606113d3565b6000828152602080822083017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff90810180547fffffffffffffffffffffffff000000000000000000000000000000000000000016905590920190925573ffffffffffffffffffffffffffffffffffffffff88168252600189810190915260408220015550505050505050565b803b6000819003610a60576040517fe350060000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b60005b838110156111a257818101518382015260200161118a565b50506000910152565b600081518084526111c3816020860160208601611187565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b60006060808301818452808751808352608092508286019150828160051b8701016020808b0160005b84811015611320577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff808a8503018652815188850173ffffffffffffffffffffffffffffffffffffffff825116865284820151600381106112a7577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b868601526040918201519186018a905281519081905290840190600090898701905b8083101561130b5783517fffffffff000000000000000000000000000000000000000000000000000000001682529286019260019290920191908601906112c9565b5097850197955050509082019060010161121e565b505073ffffffffffffffffffffffffffffffffffffffff8a1690880152868103604088015261134f81896111ab565b9a9950505050505050505050565b6000825161136f818460208701611187565b9190910192915050565b60208152600061138c60208301846111ab565b9392505050565b818103818111156113cd577f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b92915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fdfea264697066735822122079ce9ceb1cd6ef062c451c557ad0c7eccd83176b8dcea1923408e68785f1a03764736f6c63430008110033c8fcad8db84d3cc18b4c41d551ea0ee66dd599cde068d998e57d5e09332c131c00000000000000000000000011f11121df7256c40339393b0fb045321022ce44000000000000000000000000f7993a8df974ad022647e63402d6315137c58abfDeployed Bytecode
0x60806040523661000b57005b600080357fffffffff000000000000000000000000000000000000000000000000000000001681527fc8fcad8db84d3cc18b4c41d551ea0ee66dd599cde068d998e57d5e09332c131c6020819052604090912054819073ffffffffffffffffffffffffffffffffffffffff16806100ae576040517fa9ad62f800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b3660008037600080366000845af43d6000803e8080156100cd573d6000f35b3d6000fd5b7fc8fcad8db84d3cc18b4c41d551ea0ee66dd599cde068d998e57d5e09332c132080547fffffffffffffffffffffffff0000000000000000000000000000000000000000811673ffffffffffffffffffffffffffffffffffffffff8481169182179093556040517fc8fcad8db84d3cc18b4c41d551ea0ee66dd599cde068d998e57d5e09332c131c939092169182907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a3505050565b60005b83518110156103225760008482815181106101ac576101ac611129565b6020026020010151602001519050600060028111156101cd576101cd611158565b8160028111156101df576101df611158565b0361022d576102288583815181106101f9576101f9611129565b60200260200101516000015186848151811061021757610217611129565b602002602001015160400151610387565b610319565b600181600281111561024157610241611158565b0361028a5761022885838151811061025b5761025b611129565b60200260200101516000015186848151811061027957610279611129565b602002602001015160400151610627565b600281600281111561029e5761029e611158565b036102e7576102288583815181106102b8576102b8611129565b6020026020010151600001518684815181106102d6576102d6611129565b6020026020010151604001516108d0565b6040517fe548e6b500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5060010161018f565b507f8faa70878671ccd212d20771b795c50af8fd3ff6cf27f4bde57e5d4de0aeb673838383604051610356939291906111f5565b60405180910390a16103688282610a0c565b505050565b73ffffffffffffffffffffffffffffffffffffffff161590565b80516000036103c2576040517f7bc5595000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b7fc8fcad8db84d3cc18b4c41d551ea0ee66dd599cde068d998e57d5e09332c131c73ffffffffffffffffffffffffffffffffffffffff8316610430576040517fc68ec83a00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff83166000908152600182016020526040812054906bffffffffffffffffffffffff82169003610478576104788285610bad565b60005b835181101561062057600084828151811061049857610498611129565b6020908102919091018101517fffffffff00000000000000000000000000000000000000000000000000000000811660009081529186905260409091205490915073ffffffffffffffffffffffffffffffffffffffff168015610527576040517fa023275d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b7fffffffff000000000000000000000000000000000000000000000000000000008216600081815260208781526040808320805473ffffffffffffffffffffffffffffffffffffffff908116740100000000000000000000000000000000000000006bffffffffffffffffffffffff8c16021782558c168085526001808c0185529285208054938401815585528385206008840401805463ffffffff60079095166004026101000a948502191660e08a901c94909402939093179092559390925287905281547fffffffffffffffffffffffff00000000000000000000000000000000000000001617905550506001918201910161047b565b5050505050565b8051600003610662576040517f7bc5595000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b7fc8fcad8db84d3cc18b4c41d551ea0ee66dd599cde068d998e57d5e09332c131c73ffffffffffffffffffffffffffffffffffffffff83166106d0576040517fc68ec83a00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff83166000908152600182016020526040812054906bffffffffffffffffffffffff82169003610718576107188285610bad565b60005b835181101561062057600084828151811061073857610738611129565b6020908102919091018101517fffffffff00000000000000000000000000000000000000000000000000000000811660009081529186905260409091205490915073ffffffffffffffffffffffffffffffffffffffff90811690871681036107cc576040517fa023275d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6107d7858284610c23565b7fffffffff000000000000000000000000000000000000000000000000000000008216600081815260208781526040808320805473ffffffffffffffffffffffffffffffffffffffff908116740100000000000000000000000000000000000000006bffffffffffffffffffffffff8c16021782558c168085526001808c0185529285208054938401815585528385206008840401805463ffffffff60079095166004026101000a948502191660e08a901c94909402939093179092559390925287905281547fffffffffffffffffffffffff00000000000000000000000000000000000000001617905550506001918201910161071b565b805160000361090b576040517f7bc5595000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b7fc8fcad8db84d3cc18b4c41d551ea0ee66dd599cde068d998e57d5e09332c131c73ffffffffffffffffffffffffffffffffffffffff83161561097a576040517f79c9df2200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60005b8251811015610a0657600083828151811061099a5761099a611129565b6020908102919091018101517fffffffff00000000000000000000000000000000000000000000000000000000811660009081529185905260409091205490915073ffffffffffffffffffffffffffffffffffffffff166109fc848284610c23565b505060010161097d565b50505050565b73ffffffffffffffffffffffffffffffffffffffff8216610a6457805115610a60576040517f9811686000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5050565b8051600003610a9f576040517f4220056600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff82163014610ac557610ac5826110ec565b6000808373ffffffffffffffffffffffffffffffffffffffff1683604051610aed919061135d565b600060405180830381855af49150503d8060008114610b28576040519150601f19603f3d011682016040523d82523d6000602084013e610b2d565b606091505b509150915081610a0657805115610b7b57806040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b729190611379565b60405180910390fd5b6040517fc53ebed500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610bb6816110ec565b60028201805473ffffffffffffffffffffffffffffffffffffffff90921660008181526001948501602090815260408220860185905594840183559182529290200180547fffffffffffffffffffffffff0000000000000000000000000000000000000000169091179055565b73ffffffffffffffffffffffffffffffffffffffff8216610c70576040517fa9ad62f800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b3073ffffffffffffffffffffffffffffffffffffffff831603610cbf576040517fc3c5ec3700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b7fffffffff0000000000000000000000000000000000000000000000000000000081166000908152602084815260408083205473ffffffffffffffffffffffffffffffffffffffff86168452600180880190935290832054740100000000000000000000000000000000000000009091046bffffffffffffffffffffffff169291610d4991611393565b9050808214610e905773ffffffffffffffffffffffffffffffffffffffff841660009081526001860160205260408120805483908110610d8b57610d8b611129565b6000918252602080832060088304015473ffffffffffffffffffffffffffffffffffffffff8916845260018a019091526040909220805460079092166004026101000a90920460e01b925082919085908110610de957610de9611129565b600091825260208083206008830401805463ffffffff60079094166004026101000a938402191660e09590951c929092029390931790557fffffffff0000000000000000000000000000000000000000000000000000000092909216825286905260409020805473ffffffffffffffffffffffffffffffffffffffff16740100000000000000000000000000000000000000006bffffffffffffffffffffffff8516021790555b73ffffffffffffffffffffffffffffffffffffffff841660009081526001860160205260409020805480610ec657610ec66113d3565b6000828152602080822060087fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff90940193840401805463ffffffff600460078716026101000a0219169055919092557fffffffff000000000000000000000000000000000000000000000000000000008516825286905260408120819055819003610620576002850154600090610f5f90600190611393565b73ffffffffffffffffffffffffffffffffffffffff8616600090815260018089016020526040909120015490915080821461104d576000876002018381548110610fab57610fab611129565b60009182526020909120015460028901805473ffffffffffffffffffffffffffffffffffffffff9092169250829184908110610fe957610fe9611129565b600091825260208083209190910180547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff948516179055929091168152600189810190925260409020018190555b86600201805480611060576110606113d3565b6000828152602080822083017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff90810180547fffffffffffffffffffffffff000000000000000000000000000000000000000016905590920190925573ffffffffffffffffffffffffffffffffffffffff88168252600189810190915260408220015550505050505050565b803b6000819003610a60576040517fe350060000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b60005b838110156111a257818101518382015260200161118a565b50506000910152565b600081518084526111c3816020860160208601611187565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b60006060808301818452808751808352608092508286019150828160051b8701016020808b0160005b84811015611320577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff808a8503018652815188850173ffffffffffffffffffffffffffffffffffffffff825116865284820151600381106112a7577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b868601526040918201519186018a905281519081905290840190600090898701905b8083101561130b5783517fffffffff000000000000000000000000000000000000000000000000000000001682529286019260019290920191908601906112c9565b5097850197955050509082019060010161121e565b505073ffffffffffffffffffffffffffffffffffffffff8a1690880152868103604088015261134f81896111ab565b9a9950505050505050505050565b6000825161136f818460208701611187565b9190910192915050565b60208152600061138c60208301846111ab565b9392505050565b818103818111156113cd577f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b92915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fdfea264697066735822122079ce9ceb1cd6ef062c451c557ad0c7eccd83176b8dcea1923408e68785f1a03764736f6c63430008110033
Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)
00000000000000000000000011f11121df7256c40339393b0fb045321022ce44000000000000000000000000f7993a8df974ad022647e63402d6315137c58abf
-----Decoded View---------------
Arg [0] : _contractOwner (address): 0x11F11121DF7256C40339393b0FB045321022ce44
Arg [1] : _diamondCutFacet (address): 0xf7993A8df974AD022647E63402d6315137c58ABf
-----Encoded View---------------
2 Constructor Arguments found :
Arg [0] : 00000000000000000000000011f11121df7256c40339393b0fb045321022ce44
Arg [1] : 000000000000000000000000f7993a8df974ad022647e63402d6315137c58abfLoading...LoadingLoading...LoadingABI for the implementation contract at 0x6e00e0a7685ca22c288d56d9e7924746b5043ee7, likely using a custom proxy implementation.
Previously recorded to be on 0x090e074bc934c4d8b84e168cb6597e87da0c019b.Learn more about proxy contracts in our Knowledge Base
Loading...LoadingABI for the implementation contract at 0x6e00e0a7685ca22c288d56d9e7924746b5043ee7, likely using a custom proxy implementation.
Previously recorded to be on 0x090e074bc934c4d8b84e168cb6597e87da0c019b.Learn more about proxy contracts in our Knowledge Base
Loading...LoadingLoading...LoadingLoading...LoadingLoading...LoadingLoading...LoadingLoading...LoadingMultichain Portfolio | 30 Chains
Chain Token Portfolio % Price Amount Value LINEA 76.55% $3,930.03 5.3748 $21,122.92 ZKSYNC 23.15% $3,930.03 1.6258 $6,389.27 TAIKO 0.16% $3,930.03 0.011 $43.23 BSC 0.13% $0.000001 30,981,418.502 $34.7 BSC <0.01% $0.001415 951.4263 $1.35 BSC <0.01% <$0.000001 47,335,219.0809 $0.4891 BSC <0.01% $0.000004 31,737.7019 $0.1252 ETH <0.01% $0.575534 1.5 $0.8633 ETH <0.01% $0.067345 10 $0.6734 Loading...Loading[ Download: CSV Export ][ 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.
Address QR Code
My Address - Private Name Tag or Note
My Name Tag:
Private Name Tags (up to 35 characters) can be used for easy identification of addressesPrivate Note:
A private note (up to 500 characters) can be attached to this address.
Please DO NOT store any passwords or private keys here.Compiler specific version warnings:
The compiled contract might be susceptible to VerbatimInvalidDeduplication (low-severity), FullInlinerNonExpressionSplitArgumentEvaluationOrder (low-severity), MissingSideEffectsOnSelectorAccess (low-severity) Solidity Compiler Bugs.
Connect a Wallet
Connecting wallet for read function is optional, useful if you want to call certain functions or simply use your wallet's node.Connect a Wallet
Connecting wallet for read function is optional, useful if you want to call certain functions or simply use your wallet's node.Connect a Wallet
Connecting wallet for read function is optional, useful if you want to call certain functions or simply use your wallet's node.SignIn
Address Cards
To use this feature, please login to your Etherscan account and return to this page.Before You Copy
Transaction Private Note
This website uses cookies to improve your experience. By continuing to use this website, you agree to its Terms and Privacy Policy.