Contract 0x2d1F66E831659425200D1Edbce257B969D647e60

 
Txn Hash
Method
Block
From
To
Value
0x2d0b3b6f34bb49eb8230e96efc747da85830e2343065c72d4c67ed6e2966e26dTransfer From154768742022-09-05 8:53:5924 days 8 hrs ago0x52920c95636fdaed4494579041f1fda72cff0912 IN  0x2d1f66e831659425200d1edbce257b969d647e600 Ether0.00077535 11.5698745
0x88bc117b10434a1f547525e734026bb13cda8ae50f1c6994f150eeec5e12c7d7Transfer From151530312022-07-16 9:50:0175 days 7 hrs ago0x5a3c20318bcb1a2b80949d1aa9aa4a4fb4e0a153 IN  0x2d1f66e831659425200d1edbce257b969d647e600 Ether0.00072729 10.12904306
0x6436543e4a522273710e46cf4c34b2936bdafc6631efa5c4784935feb02db7f3Transfer From150508722022-06-30 14:40:1591 days 2 hrs ago0x5a3c20318bcb1a2b80949d1aa9aa4a4fb4e0a153 IN  0x2d1f66e831659425200d1edbce257b969d647e600 Ether0.00284529 39.62642387
0x50669be69ba33d374a819df69cee9dadbb496ff9bd099458084ff6a07237876fSet Approval For...150398222022-06-28 13:09:4393 days 3 hrs ago0x5a3c20318bcb1a2b80949d1aa9aa4a4fb4e0a153 IN  0x2d1f66e831659425200d1edbce257b969d647e600 Ether0.00600385 117.60045058
0xe5a885935a896a1690d83bda78c0e31835ee4ba198214717365e3ee3ec9612b4Mint Base150350022022-06-27 15:14:2594 days 1 hr ago0x5a3c20318bcb1a2b80949d1aa9aa4a4fb4e0a153 IN  0x2d1f66e831659425200d1edbce257b969d647e600 Ether0.00947694 59.27723319
0x2061a4a7384f6844a25b748d4f2d47c8b9309039532760170946e5708b7fc136Transfer From149264622022-06-08 11:31:58113 days 5 hrs ago0x5a3c20318bcb1a2b80949d1aa9aa4a4fb4e0a153 IN  0x2d1f66e831659425200d1edbce257b969d647e600 Ether0.00389899 54.29217354
0xeea2b97d885ac6cafd04feb1a39dea42dfe6b74a2bfe1fcee681242aa1b8d9b4Set Token URI148899102022-06-02 8:22:07119 days 8 hrs ago0x5a3c20318bcb1a2b80949d1aa9aa4a4fb4e0a153 IN  0x2d1f66e831659425200d1edbce257b969d647e600 Ether0.0025884 57.19593727
0xd5bce5c2cef8a849f88dfa933d4c6fb2b75eee1728bfa0e427ea61de6ff35944Mint Base148537212022-05-27 10:47:24125 days 6 hrs ago0x5a3c20318bcb1a2b80949d1aa9aa4a4fb4e0a153 IN  0x2d1f66e831659425200d1edbce257b969d647e600 Ether0.00338295 21.15997253
0x5f5296b10bbdd671695df9405356d511ee91b4325f6917b0440624fbecd40266Mint Base148536812022-05-27 10:38:16125 days 6 hrs ago0x5a3c20318bcb1a2b80949d1aa9aa4a4fb4e0a153 IN  0x2d1f66e831659425200d1edbce257b969d647e600 Ether0.00324517 20.29819129
0x1a4c366261f82a65855fbaaf16b1b19355b20223668ac32669ac587c29f35835Transfer From148474472022-05-26 10:28:46126 days 6 hrs ago0x5a3c20318bcb1a2b80949d1aa9aa4a4fb4e0a153 IN  0x2d1f66e831659425200d1edbce257b969d647e600 Ether0.00165869 30.31514117
0x42f1b89d8fb0c444de1d0144a303e9822ae0b4340d9fb459004d117ee71b6d88Transfer From148360292022-05-24 13:31:03128 days 3 hrs agoENS Name stfnlb.eth IN  0x2d1f66e831659425200d1edbce257b969d647e600 Ether0.00235708 35.17247427
0x2f95847f676c1a3b42e79c0ffeb5afd789dca6b09c213988abda7c63fe2a0892Mint Base147298842022-05-07 12:41:03145 days 4 hrs ago0x5a3c20318bcb1a2b80949d1aa9aa4a4fb4e0a153 IN  0x2d1f66e831659425200d1edbce257b969d647e600 Ether0.00436789 27.3206975
0x4a49b436a61ff09b532236cccbb276e96445a954f2581ed01b2ecbc56b94e778Transfer From147161892022-05-05 8:27:56147 days 8 hrs ago0x5a3c20318bcb1a2b80949d1aa9aa4a4fb4e0a153 IN  0x2d1f66e831659425200d1edbce257b969d647e600 Ether0.0023222 32.33590993
0x91c08848250f8d7ccafdbdb4f9102da1592bc5358f77a1adc210915b15f5aedfMint Base147101892022-05-04 9:43:52148 days 7 hrs ago0x5a3c20318bcb1a2b80949d1aa9aa4a4fb4e0a153 IN  0x2d1f66e831659425200d1edbce257b969d647e600 Ether0.00550856 34.45542271
0x88d1da21a4b751ed740b3cd2c42d72f54b18adfa8f9e3d2b9034ab93163cfdecMint Base147101442022-05-04 9:35:13148 days 7 hrs ago0x5a3c20318bcb1a2b80949d1aa9aa4a4fb4e0a153 IN  0x2d1f66e831659425200d1edbce257b969d647e600 Ether0.00526394 32.92537111
0x8cb84729b2a1e866a3031abfba7aca5862f010303fb5265ae8cf14f5de293b57Mint Base147100902022-05-04 9:22:00148 days 7 hrs ago0x5a3c20318bcb1a2b80949d1aa9aa4a4fb4e0a153 IN  0x2d1f66e831659425200d1edbce257b969d647e600 Ether0.00479772 30.00924876
0x781326694334a363e683c8a5f8768238ff139d6fb1544549342d045eb616f8deMint Base146597852022-04-26 11:02:02156 days 6 hrs ago0x5a3c20318bcb1a2b80949d1aa9aa4a4fb4e0a153 IN  0x2d1f66e831659425200d1edbce257b969d647e600 Ether0.00574048 35.90606425
0xde2b3ef215f3e732a1a80745a6031d93a1b8344b0b3e5fa4b2ba9fcc81c73721Transfer From145589572022-04-10 16:22:14172 days 43 mins ago0x5a3c20318bcb1a2b80949d1aa9aa4a4fb4e0a153 IN  0x2d1f66e831659425200d1edbce257b969d647e600 Ether0.00495113 68.94285447
0xc50493c99d3b214f52d04453fc6903c589e8ac77f055d173a733e1024a69213dTransfer From144554682022-03-25 12:36:08188 days 4 hrs ago0x5a3c20318bcb1a2b80949d1aa9aa4a4fb4e0a153 IN  0x2d1f66e831659425200d1edbce257b969d647e600 Ether0.00208131 28.98164363
0xaefc839ab1af341f541c9d5fd5403b8dd5116b89f4c3481a56e21b27ffa180a4Safe Transfer Fr...144419602022-03-23 10:18:03190 days 6 hrs ago0x5a3c20318bcb1a2b80949d1aa9aa4a4fb4e0a153 IN  0x2d1f66e831659425200d1edbce257b969d647e600 Ether0.00130869 17.5256409
0x14aa97260a183b19087fa23b9d34b0ec070590eeb8ee95d243cb09e4a192fbe1Set Approval For...144116442022-03-18 17:03:14195 days 2 mins ago0x5a3c20318bcb1a2b80949d1aa9aa4a4fb4e0a153 IN  0x2d1f66e831659425200d1edbce257b969d647e600 Ether0.00369513 72.25953612
0x77eb9337fd8d006cfce974c255e0aee8d02dcf5471722a3bd79942306d86328aMint Base144109012022-03-18 14:09:40195 days 2 hrs ago0x5a3c20318bcb1a2b80949d1aa9aa4a4fb4e0a153 IN  0x2d1f66e831659425200d1edbce257b969d647e600 Ether0.00814344 50.93632451
0xffb285bdcf2437476e3ecc21b51272f51ec9678263b0e26e7153564f3f6443aeMint Base144108742022-03-18 14:03:36195 days 3 hrs ago0x5a3c20318bcb1a2b80949d1aa9aa4a4fb4e0a153 IN  0x2d1f66e831659425200d1edbce257b969d647e600 Ether0.006047 37.82333948
0xeaab50a9b0ad7e45d3de7538ec62b1b100057f403c53af84b31a244661ead011Mint Base144108242022-03-18 13:53:46195 days 3 hrs ago0x5a3c20318bcb1a2b80949d1aa9aa4a4fb4e0a153 IN  0x2d1f66e831659425200d1edbce257b969d647e600 Ether0.0054166 33.8802672
0x375fd8fad1af5c7d13ecb894c4bd69d4a2c4ccc93fc9936f8e78e388eff2ea00Mint Base144107812022-03-18 13:46:23195 days 3 hrs ago0x5a3c20318bcb1a2b80949d1aa9aa4a4fb4e0a153 IN  0x2d1f66e831659425200d1edbce257b969d647e600 Ether0.00583866 36.52020503
[ Download CSV Export 
View more zero value Internal Transactions in Advanced View mode
Loading

Contract Source Code Verified (Exact Match)

Contract Name:
SurprS

Compiler Version
v0.8.7+commit.e28d00a7

Optimization Enabled:
Yes with 300 runs

Other Settings:
default evmVersion
File 1 of 5 : SurprS.sol
// SPDX-License-Identifier: MIT

pragma solidity ^0.8.0;

/// @title: Surprisingly Series S
/// @author: manifold.xyz

import "./ERC721Creator.sol";

//////////////////////////////////////////////////////////////////////////////////////////////
//                                                                                          //
//                                                                                          //
//                                                                                          //
//     _____ _____ _____ _____ _____ __       _____ _____ _____ _____ _____ _____ _____     //
//    |     |  _  |   | |  |  |   __|  |     | __  |     |   __|   __|   | |   __| __  |    //
//    | | | |     | | | |  |  |   __|  |__   |    -|  |  |__   |__   | | | |   __|    -|    //
//    |_|_|_|__|__|_|___|_____|_____|_____|  |__|__|_____|_____|_____|_|___|_____|__|__|    //
//                                                                                          //
//                ''.. ..┌¡@╨"."⌐^..┌;░φ▒▒Γ░░░∩└^^..,.^┌;░░φφ▒▒▒▒▒Γ░░░"^                    //
//                '~.. '.:░Å░.".┌,,┌:░φ▒╚Γ░","^^..,.┌┌;░φφ▒╠╠╩▒▒▒░Γ░░░¡,,                   //
//               '~.~ ^.:░╙^.^.^.┌┌¡φ▒╚Γ░","^^.,,.┌;░φφ▒▒╩▒▒▒▒▒▒Σ╙░┘└:!!░░,.                //
//              '~.' ^.:░┘.".┌"^┌;░φ╚Γ└^,"^^.^.┌:░░φ▒▒▒▒▒Γ▒▒╙╙└└" -^^^.:░░░░»               //
//              ┐.^...┌░\-.,⌐.^┌¡░▒Γ└^,»^,^..┌;░φ░▒▒▒ΓΓ░#Γ┘"^^' ."┌┌;;░░Γ░░░░⌐              //
//             «░┌.^~.¡⌐",┌=,^:░φ▒░⌐,»⌐.^.┌┌;░φ▒▒▒Γ░░░Γ└⌐^,..,░:;░░φφ░Γ░░░░░"'              //
//             [░░┌,.┌¡M,;[-^:░φ╚░^»⌐^'^┌┌;░░▒╚Γ░░░φ░└'..┌┌┌;░░φ▒▒▒▒ΓΓ░░""^'                //
//             '▒░░;┌┌┌;░░-":░▒╚░,░⌐.^.┌;░░▒╚Γ░└░░░⌐^.^┌┌;░░φ▒▒▒▒▒Γ░░\^'                    //
//              ╚╠▒▒▒▒▄▒░.^┌░▒╩░!└^^┌┌:░░φ╩Γ░\;░░⌐'.,┌:¡░φ▒╠╠╠╩▒▒░░░░==-.                   //
//              !╚╬╬╬╩╙└.^┌¡φ╠░░⌐┌"┌┌;░φ▒╚░└;░░!^.^┌┌;░φ▒╢╬╬╩╙╙░="^,┌┌.┌"░,                 //
//               !Γ╙▒Γ└~",:φ╬░░⌐┌~"┌¡░φ╩Γ└┌[░!⌐.^"┌;░░▄╣╣╩╙└"'..-┌┌┌:;░⌐:░░».               //
//               '"⌠Γ░⌐.^┌░╢╩░⌐┌."┌░░▒╩░;;░∩:^".";░░▒▓▌╨└"'.-┌:;░░∩"┌^-┌░░░:┌               //
//                 φ░┐""':φ▌└⌐┌."┌░░╠╩░!∩░∩⌐^`-^;░½▓▀╙⌐" .::¡░░φΓ└┌┌:;░░░Γ;::~              //
//                 ░░░~┌':▐└:┌.┌┌¡░╠╠░░░¡░⌐"."┌;░▄▓╙⌐".-┌;░░φ▄╨└┌┌;¡░░φ░░;\;"               //
//                 φ░░░┌'¡░┐┌ ".;░╠╬Γ░░¡░⌐".^┌;░╫▀└┌'-⌐;░░▐▓▀┘:┌;¡░░░▒Γ░¡\"'                //
//                 ╚▒░░┌~;░⌐"-^┌░╠╬▒Γ└¡░:".^┌;░╬┘:".░:░░░▓█╙\┌:¡░░φ░Γ░░░"'                  //
//                 ]▒▒░░░≤░┌ ",;φ▓╬░└;░⌐^ "^:░╩└⌐^-⌐;░░╟█▀└:"¡¡░░░▒▒░Γ░"                    //
//                  ╚▒▒▒▒░░\.'^¡╫▌░┐;;░:"".┌░å└⌐`»┌]░φ▓▓╙└".░░░░▒╠╩╚Γ░'                     //
//                  "╚╬╣╬▒░░,^^¡╫░┐ⁿ,░░┐~┌';░└".░:░░▒▓▌░\",\░░φ╙┘!"' "┌~,                   //
//                   "░╙╚▒▒░░\^!╙Γ"ⁿ░φ░░[┌^"⌠⌐-┌;░φ▒╣╣▒░;»;░░░",-»[░░░░░φ░                  //
//                                                                                          //
//                                                                                          //
//////////////////////////////////////////////////////////////////////////////////////////////


contract SurprS is ERC721Creator {
    constructor() ERC721Creator("Surprisingly Series S", "SurprS") {}
}

File 2 of 5 : ERC721Creator.sol
// SPDX-License-Identifier: MIT

pragma solidity ^0.8.0;

/// @author: manifold.xyz

import "@openzeppelin/contracts/proxy/Proxy.sol";
import "@openzeppelin/contracts/utils/Address.sol";
import "@openzeppelin/contracts/utils/StorageSlot.sol";

contract ERC721Creator is Proxy {
    
    constructor(string memory name, string memory symbol) {
        assert(_IMPLEMENTATION_SLOT == bytes32(uint256(keccak256("eip1967.proxy.implementation")) - 1));
        StorageSlot.getAddressSlot(_IMPLEMENTATION_SLOT).value = 0xe4E4003afE3765Aca8149a82fc064C0b125B9e5a;
        Address.functionDelegateCall(
            0xe4E4003afE3765Aca8149a82fc064C0b125B9e5a,
            abi.encodeWithSignature("initialize(string,string)", name, symbol)
        );
    }
        
    /**
     * @dev Storage slot with the address of the current implementation.
     * This is the keccak-256 hash of "eip1967.proxy.implementation" subtracted by 1, and is
     * validated in the constructor.
     */
    bytes32 internal constant _IMPLEMENTATION_SLOT = 0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc;

    /**
     * @dev Returns the current implementation address.
     */
     function implementation() public view returns (address) {
        return _implementation();
    }

    function _implementation() internal override view returns (address) {
        return StorageSlot.getAddressSlot(_IMPLEMENTATION_SLOT).value;
    }    

}

File 3 of 5 : Proxy.sol
// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts (last updated v4.5.0) (proxy/Proxy.sol)

pragma solidity ^0.8.0;

/**
 * @dev This abstract contract provides a fallback function that delegates all calls to another contract using the EVM
 * instruction `delegatecall`. We refer to the second contract as the _implementation_ behind the proxy, and it has to
 * be specified by overriding the virtual {_implementation} function.
 *
 * Additionally, delegation to the implementation can be triggered manually through the {_fallback} function, or to a
 * different contract through the {_delegate} function.
 *
 * The success and return data of the delegated call will be returned back to the caller of the proxy.
 */
abstract contract Proxy {
    /**
     * @dev Delegates the current call to `implementation`.
     *
     * This function does not return to its internal call site, it will return directly to the external caller.
     */
    function _delegate(address implementation) internal virtual {
        assembly {
            // Copy msg.data. We take full control of memory in this inline assembly
            // block because it will not return to Solidity code. We overwrite the
            // Solidity scratch pad at memory position 0.
            calldatacopy(0, 0, calldatasize())

            // Call the implementation.
            // out and outsize are 0 because we don't know the size yet.
            let result := delegatecall(gas(), implementation, 0, calldatasize(), 0, 0)

            // Copy the returned data.
            returndatacopy(0, 0, returndatasize())

            switch result
            // delegatecall returns 0 on error.
            case 0 {
                revert(0, returndatasize())
            }
            default {
                return(0, returndatasize())
            }
        }
    }

    /**
     * @dev This is a virtual function that should be overriden so it returns the address to which the fallback function
     * and {_fallback} should delegate.
     */
    function _implementation() internal view virtual returns (address);

    /**
     * @dev Delegates the current call to the address returned by `_implementation()`.
     *
     * This function does not return to its internall call site, it will return directly to the external caller.
     */
    function _fallback() internal virtual {
        _beforeFallback();
        _delegate(_implementation());
    }

    /**
     * @dev Fallback function that delegates calls to the address returned by `_implementation()`. Will run if no other
     * function in the contract matches the call data.
     */
    fallback() external payable virtual {
        _fallback();
    }

    /**
     * @dev Fallback function that delegates calls to the address returned by `_implementation()`. Will run if call data
     * is empty.
     */
    receive() external payable virtual {
        _fallback();
    }

    /**
     * @dev Hook that is called before falling back to the implementation. Can happen as part of a manual `_fallback`
     * call, or as part of the Solidity `fallback` or `receive` functions.
     *
     * If overriden should call `super._beforeFallback()`.
     */
    function _beforeFallback() internal virtual {}
}

File 4 of 5 : Address.sol
// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts (last updated v4.5.0) (utils/Address.sol)

pragma solidity ^0.8.1;

/**
 * @dev Collection of functions related to the address type
 */
library Address {
    /**
     * @dev Returns true if `account` is a contract.
     *
     * [IMPORTANT]
     * ====
     * It is unsafe to assume that an address for which this function returns
     * false is an externally-owned account (EOA) and not a contract.
     *
     * Among others, `isContract` will return false for the following
     * types of addresses:
     *
     *  - an externally-owned account
     *  - a contract in construction
     *  - an address where a contract will be created
     *  - an address where a contract lived, but was destroyed
     * ====
     *
     * [IMPORTANT]
     * ====
     * You shouldn't rely on `isContract` to protect against flash loan attacks!
     *
     * Preventing calls from contracts is highly discouraged. It breaks composability, breaks support for smart wallets
     * like Gnosis Safe, and does not provide security since it can be circumvented by calling from a contract
     * constructor.
     * ====
     */
    function isContract(address account) internal view returns (bool) {
        // This method relies on extcodesize/address.code.length, which returns 0
        // for contracts in construction, since the code is only stored at the end
        // of the constructor execution.

        return account.code.length > 0;
    }

    /**
     * @dev Replacement for Solidity's `transfer`: sends `amount` wei to
     * `recipient`, forwarding all available gas and reverting on errors.
     *
     * https://eips.ethereum.org/EIPS/eip-1884[EIP1884] increases the gas cost
     * of certain opcodes, possibly making contracts go over the 2300 gas limit
     * imposed by `transfer`, making them unable to receive funds via
     * `transfer`. {sendValue} removes this limitation.
     *
     * https://diligence.consensys.net/posts/2019/09/stop-using-soliditys-transfer-now/[Learn more].
     *
     * IMPORTANT: because control is transferred to `recipient`, care must be
     * taken to not create reentrancy vulnerabilities. Consider using
     * {ReentrancyGuard} or the
     * https://solidity.readthedocs.io/en/v0.5.11/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern].
     */
    function sendValue(address payable recipient, uint256 amount) internal {
        require(address(this).balance >= amount, "Address: insufficient balance");

        (bool success, ) = recipient.call{value: amount}("");
        require(success, "Address: unable to send value, recipient may have reverted");
    }

    /**
     * @dev Performs a Solidity function call using a low level `call`. A
     * plain `call` is an unsafe replacement for a function call: use this
     * function instead.
     *
     * If `target` reverts with a revert reason, it is bubbled up by this
     * function (like regular Solidity function calls).
     *
     * Returns the raw returned data. To convert to the expected return value,
     * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`].
     *
     * Requirements:
     *
     * - `target` must be a contract.
     * - calling `target` with `data` must not revert.
     *
     * _Available since v3.1._
     */
    function functionCall(address target, bytes memory data) internal returns (bytes memory) {
        return functionCall(target, data, "Address: low-level call failed");
    }

    /**
     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with
     * `errorMessage` as a fallback revert reason when `target` reverts.
     *
     * _Available since v3.1._
     */
    function functionCall(
        address target,
        bytes memory data,
        string memory errorMessage
    ) internal returns (bytes memory) {
        return functionCallWithValue(target, data, 0, errorMessage);
    }

    /**
     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],
     * but also transferring `value` wei to `target`.
     *
     * Requirements:
     *
     * - the calling contract must have an ETH balance of at least `value`.
     * - the called Solidity function must be `payable`.
     *
     * _Available since v3.1._
     */
    function functionCallWithValue(
        address target,
        bytes memory data,
        uint256 value
    ) internal returns (bytes memory) {
        return functionCallWithValue(target, data, value, "Address: low-level call with value failed");
    }

    /**
     * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but
     * with `errorMessage` as a fallback revert reason when `target` reverts.
     *
     * _Available since v3.1._
     */
    function functionCallWithValue(
        address target,
        bytes memory data,
        uint256 value,
        string memory errorMessage
    ) internal returns (bytes memory) {
        require(address(this).balance >= value, "Address: insufficient balance for call");
        require(isContract(target), "Address: call to non-contract");

        (bool success, bytes memory returndata) = target.call{value: value}(data);
        return verifyCallResult(success, returndata, errorMessage);
    }

    /**
     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],
     * but performing a static call.
     *
     * _Available since v3.3._
     */
    function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) {
        return functionStaticCall(target, data, "Address: low-level static call failed");
    }

    /**
     * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],
     * but performing a static call.
     *
     * _Available since v3.3._
     */
    function functionStaticCall(
        address target,
        bytes memory data,
        string memory errorMessage
    ) internal view returns (bytes memory) {
        require(isContract(target), "Address: static call to non-contract");

        (bool success, bytes memory returndata) = target.staticcall(data);
        return verifyCallResult(success, returndata, errorMessage);
    }

    /**
     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],
     * but performing a delegate call.
     *
     * _Available since v3.4._
     */
    function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) {
        return functionDelegateCall(target, data, "Address: low-level delegate call failed");
    }

    /**
     * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],
     * but performing a delegate call.
     *
     * _Available since v3.4._
     */
    function functionDelegateCall(
        address target,
        bytes memory data,
        string memory errorMessage
    ) internal returns (bytes memory) {
        require(isContract(target), "Address: delegate call to non-contract");

        (bool success, bytes memory returndata) = target.delegatecall(data);
        return verifyCallResult(success, returndata, errorMessage);
    }

    /**
     * @dev Tool to verifies that a low level call was successful, and revert if it wasn't, either by bubbling the
     * revert reason using the provided one.
     *
     * _Available since v4.3._
     */
    function verifyCallResult(
        bool success,
        bytes memory returndata,
        string memory errorMessage
    ) internal pure returns (bytes memory) {
        if (success) {
            return returndata;
        } else {
            // Look for revert reason and bubble it up if present
            if (returndata.length > 0) {
                // The easiest way to bubble the revert reason is using memory via assembly

                assembly {
                    let returndata_size := mload(returndata)
                    revert(add(32, returndata), returndata_size)
                }
            } else {
                revert(errorMessage);
            }
        }
    }
}

File 5 of 5 : StorageSlot.sol
// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts v4.4.1 (utils/StorageSlot.sol)

pragma solidity ^0.8.0;

/**
 * @dev Library for reading and writing primitive types to specific storage slots.
 *
 * Storage slots are often used to avoid storage conflict when dealing with upgradeable contracts.
 * This library helps with reading and writing to such slots without the need for inline assembly.
 *
 * The functions in this library return Slot structs that contain a `value` member that can be used to read or write.
 *
 * Example usage to set ERC1967 implementation slot:
 * ```
 * contract ERC1967 {
 *     bytes32 internal constant _IMPLEMENTATION_SLOT = 0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc;
 *
 *     function _getImplementation() internal view returns (address) {
 *         return StorageSlot.getAddressSlot(_IMPLEMENTATION_SLOT).value;
 *     }
 *
 *     function _setImplementation(address newImplementation) internal {
 *         require(Address.isContract(newImplementation), "ERC1967: new implementation is not a contract");
 *         StorageSlot.getAddressSlot(_IMPLEMENTATION_SLOT).value = newImplementation;
 *     }
 * }
 * ```
 *
 * _Available since v4.1 for `address`, `bool`, `bytes32`, and `uint256`._
 */
library StorageSlot {
    struct AddressSlot {
        address value;
    }

    struct BooleanSlot {
        bool value;
    }

    struct Bytes32Slot {
        bytes32 value;
    }

    struct Uint256Slot {
        uint256 value;
    }

    /**
     * @dev Returns an `AddressSlot` with member `value` located at `slot`.
     */
    function getAddressSlot(bytes32 slot) internal pure returns (AddressSlot storage r) {
        assembly {
            r.slot := slot
        }
    }

    /**
     * @dev Returns an `BooleanSlot` with member `value` located at `slot`.
     */
    function getBooleanSlot(bytes32 slot) internal pure returns (BooleanSlot storage r) {
        assembly {
            r.slot := slot
        }
    }

    /**
     * @dev Returns an `Bytes32Slot` with member `value` located at `slot`.
     */
    function getBytes32Slot(bytes32 slot) internal pure returns (Bytes32Slot storage r) {
        assembly {
            r.slot := slot
        }
    }

    /**
     * @dev Returns an `Uint256Slot` with member `value` located at `slot`.
     */
    function getUint256Slot(bytes32 slot) internal pure returns (Uint256Slot storage r) {
        assembly {
            r.slot := slot
        }
    }
}

Settings
{
  "optimizer": {
    "enabled": true,
    "runs": 300
  },
  "outputSelection": {
    "*": {
      "*": [
        "evm.bytecode",
        "evm.deployedBytecode",
        "devdoc",
        "userdoc",
        "metadata",
        "abi"
      ]
    }
  },
  "libraries": {}
}

Contract Security Audit

Contract ABI

[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"stateMutability":"payable","type":"fallback"},{"inputs":[],"name":"implementation","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"stateMutability":"payable","type":"receive"}]

608060405234801561001057600080fd5b50604080518082018252601581527f53757270726973696e676c7920536572696573205300000000000000000000006020808301919091528251808401909352600683526553757270725360d01b908301529061008e60017f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbd610342565b6000805160206106e3833981519152146100aa576100aa610397565b73e4e4003afe3765aca8149a82fc064c0b125b9e5a6100e36000805160206106e383398151915260001b61016e60201b6100dd1760201c565b80546001600160a01b0319166001600160a01b03929092169190911790556040516101669073e4e4003afe3765aca8149a82fc064c0b125b9e5a9061012e9085908590602401610314565b60408051601f19818403018152919052602080820180516001600160e01b031663266c45bb60e11b1790526100e0610171821b17901c565b5050506103ad565b90565b606061019683836040518060600160405280602781526020016107036027913961019d565b9392505050565b60606001600160a01b0384163b61020a5760405162461bcd60e51b815260206004820152602660248201527f416464726573733a2064656c65676174652063616c6c20746f206e6f6e2d636f6044820152651b9d1c9858dd60d21b60648201526084015b60405180910390fd5b600080856001600160a01b03168560405161022591906102e5565b600060405180830381855af49150503d8060008114610260576040519150601f19603f3d011682016040523d82523d6000602084013e610265565b606091505b509092509050610276828286610280565b9695505050505050565b6060831561028f575081610196565b82511561029f5782518084602001fd5b8160405162461bcd60e51b81526004016102019190610301565b600081518084526102d1816020860160208601610367565b601f01601f19169290920160200192915050565b600082516102f7818460208701610367565b9190910192915050565b60208152600061019660208301846102b9565b60408152600061032760408301856102b9565b828103602084015261033981856102b9565b95945050505050565b60008282101561036257634e487b7160e01b600052601160045260246000fd5b500390565b60005b8381101561038257818101518382015260200161036a565b83811115610391576000848401525b50505050565b634e487b7160e01b600052600160045260246000fd5b610327806103bc6000396000f3fe6080604052600436106100225760003560e01c80635c60da1b1461003957610031565b366100315761002f61006a565b005b61002f61006a565b34801561004557600080fd5b5061004e6100a5565b6040516001600160a01b03909116815260200160405180910390f35b6100a361009e7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc546001600160a01b031690565b61010c565b565b60006100d87f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc546001600160a01b031690565b905090565b90565b606061010583836040518060600160405280602781526020016102cb60279139610130565b9392505050565b3660008037600080366000845af43d6000803e80801561012b573d6000f35b3d6000fd5b60606001600160a01b0384163b61019d5760405162461bcd60e51b815260206004820152602660248201527f416464726573733a2064656c65676174652063616c6c20746f206e6f6e2d636f6044820152651b9d1c9858dd60d21b60648201526084015b60405180910390fd5b600080856001600160a01b0316856040516101b8919061024b565b600060405180830381855af49150503d80600081146101f3576040519150601f19603f3d011682016040523d82523d6000602084013e6101f8565b606091505b5091509150610208828286610212565b9695505050505050565b60608315610221575081610105565b8251156102315782518084602001fd5b8160405162461bcd60e51b81526004016101949190610267565b6000825161025d81846020870161029a565b9190910192915050565b602081526000825180602084015261028681604085016020870161029a565b601f01601f19169190910160400192915050565b60005b838110156102b557818101518382015260200161029d565b838111156102c4576000848401525b5050505056fe416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c6564a26469706673582212201f03c11ae8bbc2129a7e30d81cca721f94ff58d4e4d02aa28b8abe08ee436fc764736f6c63430008070033360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c6564

Block Transaction Difficulty Gas Used Reward
Block Uncle Number Difficulty Gas Used Reward
Loading
Loading
Make sure to use the "Vote Down" button for any spammy posts, and the "Vote Up" for interesting conversations.

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.