ETH Price: $3,486.00 (+5.30%)

Contract

0x2AC62cFf912c2890927cbafcDBD87C036b23E403
 

Overview

ETH Balance

0 ETH

Eth Value

$0.00
Transaction Hash
Method
Block
From
To
Set Approval For...210695912024-10-29 6:46:1129 days ago1730184371IN
0x2AC62cFf...36b23E403
0 ETH0.000438.40078583
Set Approval For...190771732024-01-24 14:44:35307 days ago1706107475IN
0x2AC62cFf...36b23E403
0 ETH0.0011886423.18401584
Safe Transfer Fr...183668282023-10-17 1:30:23407 days ago1697506223IN
0x2AC62cFf...36b23E403
0 ETH0.000284625.8352815
Safe Transfer Fr...183665142023-10-17 0:27:11407 days ago1697502431IN
0x2AC62cFf...36b23E403
0 ETH0.000328446.73381876
Set Approval For...174551312023-06-11 6:35:47535 days ago1686465347IN
0x2AC62cFf...36b23E403
0 ETH0.0010021819.57927655
Set Approval For...173509902023-05-27 14:29:23549 days ago1685197763IN
0x2AC62cFf...36b23E403
0 ETH0.0011645922.7148589
Set Approval For...173455322023-05-26 20:05:47550 days ago1685131547IN
0x2AC62cFf...36b23E403
0 ETH0.0020880540.72658849
Set Approval For...171542162023-04-29 20:49:23577 days ago1682801363IN
0x2AC62cFf...36b23E403
0 ETH0.0018377235.84399616
Transfer From171398582023-04-27 20:22:23579 days ago1682626943IN
0x2AC62cFf...36b23E403
0 ETH0.0020144840
Transfer From171398192023-04-27 20:14:35579 days ago1682626475IN
0x2AC62cFf...36b23E403
0 ETH0.0026984840
Set Approval For...170811502023-04-19 14:10:11587 days ago1681913411IN
0x2AC62cFf...36b23E403
0 ETH0.0046767591.21809193
Transfer From169800132023-04-05 3:42:47602 days ago1680666167IN
0x2AC62cFf...36b23E403
0 ETH0.0018704137.13948206
Transfer From169471752023-03-31 12:26:35607 days ago1680265595IN
0x2AC62cFf...36b23E403
0 ETH0.0012137924.10136812
Transfer From169364692023-03-30 0:21:59608 days ago1680135719IN
0x2AC62cFf...36b23E403
0 ETH0.0013305226.4192112
Transfer From169357612023-03-29 21:59:23608 days ago1680127163IN
0x2AC62cFf...36b23E403
0 ETH0.0015108630
Transfer From168752312023-03-21 9:50:11617 days ago1679392211IN
0x2AC62cFf...36b23E403
0 ETH0.0008314216.50895812
Transfer From168309902023-03-15 4:39:59623 days ago1678855199IN
0x2AC62cFf...36b23E403
0 ETH0.000981719.49768622
Transfer From167709922023-03-06 18:07:47631 days ago1678126067IN
0x2AC62cFf...36b23E403
0 ETH0.0029647147.31277363
Set Approval For...167706162023-03-06 16:51:59631 days ago1678121519IN
0x2AC62cFf...36b23E403
0 ETH0.0009529732.52698599
Safe Transfer Fr...167106112023-02-26 6:25:11640 days ago1677392711IN
0x2AC62cFf...36b23E403
0 ETH0.0012523217.58617418
Set Approval For...167035172023-02-25 6:26:23641 days ago1677306383IN
0x2AC62cFf...36b23E403
0 ETH0.0010641720.79026255
Set Approval For...167025522023-02-25 3:11:23641 days ago1677294683IN
0x2AC62cFf...36b23E403
0 ETH0.0011704522.866651
Set Approval For...166303422023-02-14 23:43:47651 days ago1676418227IN
0x2AC62cFf...36b23E403
0 ETH0.0020868240.76938151
Set Approval For...165969632023-02-10 7:48:11656 days ago1676015291IN
0x2AC62cFf...36b23E403
0 ETH0.0009093817.7372171
Set Approval For...165861852023-02-08 19:40:23657 days ago1675885223IN
0x2AC62cFf...36b23E403
0 ETH0.0021734242.46141342
View all transactions

Latest 3 internal transactions

Advanced mode:
Parent Transaction Hash Block From To
160078262022-11-20 1:04:47738 days ago1668906287
0x2AC62cFf...36b23E403
0.1102 ETH
160078262022-11-20 1:04:47738 days ago1668906287
0x2AC62cFf...36b23E403
0.2204 ETH
160078262022-11-20 1:04:47738 days ago1668906287
0x2AC62cFf...36b23E403
0.2204 ETH
Loading...
Loading

Contract Source Code Verified (Exact Match)

Contract Name:
DeadLinkzProxy

Compiler Version
v0.8.17+commit.8df45f5f

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion
File 1 of 15 : DeadLinkzProxy.sol
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.17;

import {UpgradeableProxyOwnable} from "@solidstate-solidity/proxy/upgradeable/UpgradeableProxyOwnable.sol";
import {OwnableStorage} from "@solidstate-solidity/access/ownable/OwnableStorage.sol";

contract DeadLinkzProxy is UpgradeableProxyOwnable {
    constructor(address implementation) {
        _setImplementation(implementation);
        OwnableStorage.layout().owner = msg.sender;
    }

    /**
     * @dev suppress compiler warning
     */
    receive() external payable {}
}

File 2 of 15 : IOwnableInternal.sol
// SPDX-License-Identifier: MIT

pragma solidity ^0.8.8;

import { IERC173Internal } from '../../interfaces/IERC173Internal.sol';

interface IOwnableInternal is IERC173Internal {
    error Ownable__NotOwner();
    error Ownable__NotTransitiveOwner();
}

File 3 of 15 : OwnableInternal.sol
// SPDX-License-Identifier: MIT

pragma solidity ^0.8.8;

import { IERC173 } from '../../interfaces/IERC173.sol';
import { AddressUtils } from '../../utils/AddressUtils.sol';
import { IOwnableInternal } from './IOwnableInternal.sol';
import { OwnableStorage } from './OwnableStorage.sol';

abstract contract OwnableInternal is IOwnableInternal {
    using AddressUtils for address;
    using OwnableStorage for OwnableStorage.Layout;

    modifier onlyOwner() {
        if (msg.sender != _owner()) revert Ownable__NotOwner();
        _;
    }

    modifier onlyTransitiveOwner() {
        if (msg.sender != _transitiveOwner())
            revert Ownable__NotTransitiveOwner();
        _;
    }

    function _owner() internal view virtual returns (address) {
        return OwnableStorage.layout().owner;
    }

    function _transitiveOwner() internal view virtual returns (address) {
        address owner = _owner();

        while (owner.isContract()) {
            try IERC173(owner).owner() returns (address transitiveOwner) {
                owner = transitiveOwner;
            } catch {
                return owner;
            }
        }

        return owner;
    }

    function _transferOwnership(address account) internal virtual {
        OwnableStorage.layout().setOwner(account);
        emit OwnershipTransferred(msg.sender, account);
    }
}

File 4 of 15 : OwnableStorage.sol
// SPDX-License-Identifier: MIT

pragma solidity ^0.8.8;

library OwnableStorage {
    struct Layout {
        address owner;
    }

    bytes32 internal constant STORAGE_SLOT =
        keccak256('solidstate.contracts.storage.Ownable');

    function layout() internal pure returns (Layout storage l) {
        bytes32 slot = STORAGE_SLOT;
        assembly {
            l.slot := slot
        }
    }

    function setOwner(Layout storage l, address owner) internal {
        l.owner = owner;
    }
}

File 5 of 15 : IERC173.sol
// SPDX-License-Identifier: MIT

pragma solidity ^0.8.8;

import { IERC173Internal } from './IERC173Internal.sol';

/**
 * @title Contract ownership standard interface
 * @dev see https://eips.ethereum.org/EIPS/eip-173
 */
interface IERC173 is IERC173Internal {
    /**
     * @notice get the ERC173 contract owner
     * @return conrtact owner
     */
    function owner() external view returns (address);

    /**
     * @notice transfer contract ownership to new account
     * @param account address of new owner
     */
    function transferOwnership(address account) external;
}

File 6 of 15 : IERC173Internal.sol
// SPDX-License-Identifier: MIT

pragma solidity ^0.8.8;

/**
 * @title Partial ERC173 interface needed by internal functions
 */
interface IERC173Internal {
    event OwnershipTransferred(
        address indexed previousOwner,
        address indexed newOwner
    );
}

File 7 of 15 : IProxy.sol
// SPDX-License-Identifier: MIT

pragma solidity ^0.8.8;

interface IProxy {
    error Proxy__ImplementationIsNotContract();

    fallback() external payable;
}

File 8 of 15 : Proxy.sol
// SPDX-License-Identifier: MIT

pragma solidity ^0.8.8;

import { AddressUtils } from '../utils/AddressUtils.sol';
import { IProxy } from './IProxy.sol';

/**
 * @title Base proxy contract
 */
abstract contract Proxy is IProxy {
    using AddressUtils for address;

    /**
     * @notice delegate all calls to implementation contract
     * @dev reverts if implementation address contains no code, for compatibility with metamorphic contracts
     * @dev memory location in use by assembly may be unsafe in other contexts
     */
    fallback() external payable virtual {
        address implementation = _getImplementation();

        if (!implementation.isContract())
            revert Proxy__ImplementationIsNotContract();

        assembly {
            calldatacopy(0, 0, calldatasize())
            let result := delegatecall(
                gas(),
                implementation,
                0,
                calldatasize(),
                0,
                0
            )
            returndatacopy(0, 0, returndatasize())

            switch result
            case 0 {
                revert(0, returndatasize())
            }
            default {
                return(0, returndatasize())
            }
        }
    }

    /**
     * @notice get logic implementation address
     * @return implementation address
     */
    function _getImplementation() internal virtual returns (address);
}

File 9 of 15 : IUpgradeableProxy.sol
// SPDX-License-Identifier: MIT

pragma solidity ^0.8.8;

import { IProxy } from '../IProxy.sol';

interface IUpgradeableProxy is IProxy {}

File 10 of 15 : IUpgradeableProxyOwnable.sol
// SPDX-License-Identifier: MIT

pragma solidity ^0.8.8;

import { IUpgradeableProxy } from './IUpgradeableProxy.sol';

interface IUpgradeableProxyOwnable is IUpgradeableProxy {
    /**
     * TODO: add to IUpgradeableProxy or remove from here
     */
    function setImplementation(address implementation) external;
}

File 11 of 15 : UpgradeableProxy.sol
// SPDX-License-Identifier: MIT

pragma solidity ^0.8.8;

import { Proxy } from '../Proxy.sol';
import { IUpgradeableProxy } from './IUpgradeableProxy.sol';
import { UpgradeableProxyStorage } from './UpgradeableProxyStorage.sol';

/**
 * @title Proxy with upgradeable implementation
 */
abstract contract UpgradeableProxy is IUpgradeableProxy, Proxy {
    using UpgradeableProxyStorage for UpgradeableProxyStorage.Layout;

    /**
     * @inheritdoc Proxy
     */
    function _getImplementation() internal view override returns (address) {
        // inline storage layout retrieval uses less gas
        UpgradeableProxyStorage.Layout storage l;
        bytes32 slot = UpgradeableProxyStorage.STORAGE_SLOT;
        assembly {
            l.slot := slot
        }

        return l.implementation;
    }

    /**
     * @notice set logic implementation address
     * @param implementation implementation address
     */
    function _setImplementation(address implementation) internal {
        UpgradeableProxyStorage.layout().setImplementation(implementation);
    }
}

File 12 of 15 : UpgradeableProxyOwnable.sol
// SPDX-License-Identifier: MIT

pragma solidity ^0.8.8;

import { OwnableInternal } from '../../access/ownable/OwnableInternal.sol';
import { IUpgradeableProxyOwnable } from './IUpgradeableProxyOwnable.sol';
import { UpgradeableProxy } from './UpgradeableProxy.sol';

/**
 * @title Proxy with upgradeable implementation controlled by ERC171 owner
 */
abstract contract UpgradeableProxyOwnable is
    IUpgradeableProxyOwnable,
    UpgradeableProxy,
    OwnableInternal
{
    /**
     * @notice set logic implementation address
     * @param implementation implementation address
     */
    function setImplementation(address implementation) external onlyOwner {
        _setImplementation(implementation);
    }
}

File 13 of 15 : UpgradeableProxyStorage.sol
// SPDX-License-Identifier: MIT

pragma solidity ^0.8.8;

library UpgradeableProxyStorage {
    struct Layout {
        address implementation;
    }

    bytes32 internal constant STORAGE_SLOT =
        keccak256('solidstate.contracts.storage.UpgradeableProxy');

    function layout() internal pure returns (Layout storage l) {
        bytes32 slot = STORAGE_SLOT;
        assembly {
            l.slot := slot
        }
    }

    function setImplementation(Layout storage l, address implementation)
        internal
    {
        l.implementation = implementation;
    }
}

File 14 of 15 : AddressUtils.sol
// SPDX-License-Identifier: MIT

pragma solidity ^0.8.8;

import { UintUtils } from './UintUtils.sol';

library AddressUtils {
    using UintUtils for uint256;

    error AddressUtils__InsufficientBalance();
    error AddressUtils__NotContract();
    error AddressUtils__SendValueFailed();

    function toString(address account) internal pure returns (string memory) {
        return uint256(uint160(account)).toHexString(20);
    }

    function isContract(address account) internal view returns (bool) {
        uint256 size;
        assembly {
            size := extcodesize(account)
        }
        return size > 0;
    }

    function sendValue(address payable account, uint256 amount) internal {
        (bool success, ) = account.call{ value: amount }('');
        if (!success) revert AddressUtils__SendValueFailed();
    }

    function functionCall(address target, bytes memory data)
        internal
        returns (bytes memory)
    {
        return
            functionCall(target, data, 'AddressUtils: failed low-level call');
    }

    function functionCall(
        address target,
        bytes memory data,
        string memory error
    ) internal returns (bytes memory) {
        return _functionCallWithValue(target, data, 0, error);
    }

    function functionCallWithValue(
        address target,
        bytes memory data,
        uint256 value
    ) internal returns (bytes memory) {
        return
            functionCallWithValue(
                target,
                data,
                value,
                'AddressUtils: failed low-level call with value'
            );
    }

    function functionCallWithValue(
        address target,
        bytes memory data,
        uint256 value,
        string memory error
    ) internal returns (bytes memory) {
        if (value > address(this).balance)
            revert AddressUtils__InsufficientBalance();
        return _functionCallWithValue(target, data, value, error);
    }

    function _functionCallWithValue(
        address target,
        bytes memory data,
        uint256 value,
        string memory error
    ) private returns (bytes memory) {
        if (!isContract(target)) revert AddressUtils__NotContract();

        (bool success, bytes memory returnData) = target.call{ value: value }(
            data
        );

        if (success) {
            return returnData;
        } else if (returnData.length > 0) {
            assembly {
                let returnData_size := mload(returnData)
                revert(add(32, returnData), returnData_size)
            }
        } else {
            revert(error);
        }
    }
}

File 15 of 15 : UintUtils.sol
// SPDX-License-Identifier: MIT

pragma solidity ^0.8.8;

/**
 * @title utility functions for uint256 operations
 * @dev derived from https://github.com/OpenZeppelin/openzeppelin-contracts/ (MIT license)
 */
library UintUtils {
    error UintUtils__InsufficientHexLength();

    bytes16 private constant HEX_SYMBOLS = '0123456789abcdef';

    function add(uint256 a, int256 b) internal pure returns (uint256) {
        return b < 0 ? sub(a, -b) : a + uint256(b);
    }

    function sub(uint256 a, int256 b) internal pure returns (uint256) {
        return b < 0 ? add(a, -b) : a - uint256(b);
    }

    function toString(uint256 value) internal pure returns (string memory) {
        if (value == 0) {
            return '0';
        }

        uint256 temp = value;
        uint256 digits;

        while (temp != 0) {
            digits++;
            temp /= 10;
        }

        bytes memory buffer = new bytes(digits);

        while (value != 0) {
            digits -= 1;
            buffer[digits] = bytes1(uint8(48 + uint256(value % 10)));
            value /= 10;
        }

        return string(buffer);
    }

    function toHexString(uint256 value) internal pure returns (string memory) {
        if (value == 0) {
            return '0x00';
        }

        uint256 length = 0;

        for (uint256 temp = value; temp != 0; temp >>= 8) {
            unchecked {
                length++;
            }
        }

        return toHexString(value, length);
    }

    function toHexString(uint256 value, uint256 length)
        internal
        pure
        returns (string memory)
    {
        bytes memory buffer = new bytes(2 * length + 2);
        buffer[0] = '0';
        buffer[1] = 'x';

        unchecked {
            for (uint256 i = 2 * length + 1; i > 1; --i) {
                buffer[i] = HEX_SYMBOLS[value & 0xf];
                value >>= 4;
            }
        }

        if (value != 0) revert UintUtils__InsufficientHexLength();

        return string(buffer);
    }
}

Settings
{
  "remappings": [
    "@erc721a-upgradable/=lib/ERC721A-Upgradeable/contracts/",
    "@solady/=lib/solady/src/",
    "@solidstate-solidity/=lib/solidstate-solidity/contracts/",
    "@std/=lib/forge-std/src/",
    "ERC721A-Upgradeable/=lib/ERC721A-Upgradeable/contracts/",
    "ds-test/=lib/forge-std/lib/ds-test/src/",
    "forge-std/=lib/forge-std/src/",
    "solady/=lib/solady/src/",
    "solidstate-solidity/=lib/solidstate-solidity/contracts/",
    "solmate/=lib/solady/lib/solmate/src/"
  ],
  "optimizer": {
    "enabled": true,
    "runs": 200
  },
  "metadata": {
    "bytecodeHash": "ipfs"
  },
  "outputSelection": {
    "*": {
      "*": [
        "evm.bytecode",
        "evm.deployedBytecode",
        "devdoc",
        "userdoc",
        "metadata",
        "abi"
      ]
    }
  },
  "evmVersion": "london",
  "libraries": {}
}

Contract Security Audit

Contract ABI

[{"inputs":[{"internalType":"address","name":"implementation","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"inputs":[],"name":"Ownable__NotOwner","type":"error"},{"inputs":[],"name":"Ownable__NotTransitiveOwner","type":"error"},{"inputs":[],"name":"Proxy__ImplementationIsNotContract","type":"error"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"stateMutability":"payable","type":"fallback"},{"inputs":[{"internalType":"address","name":"implementation","type":"address"}],"name":"setImplementation","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]

608060405234801561001057600080fd5b5060405161034038038061034083398101604081905261002f916100ff565b6100388161006f565b3361004b61009a60201b61010c1760201c565b80546001600160a01b0319166001600160a01b03929092169190911790555061012f565b610097816100856100be60201b6101301760201c565b6100e260201b6101541790919060201c565b50565b7f8a22373512790c48b83a1fe2efdd2888d4a917bcdc24d0adf63e60f67168046090565b7ff7f483ff1916e63c14790f9c8bd1f715e1ffa6a089843b606bbc96607229b80490565b81546001600160a01b0319166001600160a01b0391909116179055565b60006020828403121561011157600080fd5b81516001600160a01b038116811461012857600080fd5b9392505050565b6102028061013e6000396000f3fe6080604052600436106100225760003560e01c8063d784d426146100ac57610029565b3661002957005b600061005c7ff7f483ff1916e63c14790f9c8bd1f715e1ffa6a089843b606bbc96607229b804546001600160a01b031690565b90506001600160a01b0381163b610086576040516321f27f0d60e21b815260040160405180910390fd5b3660008037600080366000845af43d6000803e8080156100a5573d6000f35b3d6000fd5b005b3480156100b857600080fd5b506100aa6100c736600461019c565b6100cf610171565b6001600160a01b0316336001600160a01b03161461010057604051632f7a8ee160e01b815260040160405180910390fd5b6101098161018a565b50565b7f8a22373512790c48b83a1fe2efdd2888d4a917bcdc24d0adf63e60f67168046090565b7ff7f483ff1916e63c14790f9c8bd1f715e1ffa6a089843b606bbc96607229b80490565b81546001600160a01b0319166001600160a01b0391909116179055565b600061017b61010c565b546001600160a01b0316919050565b61010981610196610130565b90610154565b6000602082840312156101ae57600080fd5b81356001600160a01b03811681146101c557600080fd5b939250505056fea2646970667358221220498a1516dccf00d43816d29acf003ac7bde58d65cd3c147a2e63b6d65407bfbe64736f6c634300081100330000000000000000000000000c6e6bb5d22d9c27f7375f50c4d1b4e14bd9411f

Deployed Bytecode

0x6080604052600436106100225760003560e01c8063d784d426146100ac57610029565b3661002957005b600061005c7ff7f483ff1916e63c14790f9c8bd1f715e1ffa6a089843b606bbc96607229b804546001600160a01b031690565b90506001600160a01b0381163b610086576040516321f27f0d60e21b815260040160405180910390fd5b3660008037600080366000845af43d6000803e8080156100a5573d6000f35b3d6000fd5b005b3480156100b857600080fd5b506100aa6100c736600461019c565b6100cf610171565b6001600160a01b0316336001600160a01b03161461010057604051632f7a8ee160e01b815260040160405180910390fd5b6101098161018a565b50565b7f8a22373512790c48b83a1fe2efdd2888d4a917bcdc24d0adf63e60f67168046090565b7ff7f483ff1916e63c14790f9c8bd1f715e1ffa6a089843b606bbc96607229b80490565b81546001600160a01b0319166001600160a01b0391909116179055565b600061017b61010c565b546001600160a01b0316919050565b61010981610196610130565b90610154565b6000602082840312156101ae57600080fd5b81356001600160a01b03811681146101c557600080fd5b939250505056fea2646970667358221220498a1516dccf00d43816d29acf003ac7bde58d65cd3c147a2e63b6d65407bfbe64736f6c63430008110033

Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)

0000000000000000000000000c6e6bb5d22d9c27f7375f50c4d1b4e14bd9411f

-----Decoded View---------------
Arg [0] : implementation (address): 0x0C6E6Bb5d22d9c27F7375F50C4d1b4E14bd9411f

-----Encoded View---------------
1 Constructor Arguments found :
Arg [0] : 0000000000000000000000000c6e6bb5d22d9c27f7375f50c4d1b4e14bd9411f


Block Transaction Difficulty Gas Used Reward
View All Blocks Produced

Block Uncle Number Difficulty Gas Used Reward
View All Uncles
Loading...
Loading
Loading...
Loading

Validator Index Block Amount
View All Withdrawals

Transaction Hash Block Value Eth2 PubKey Valid
View All Deposits
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.