ETH Price: $3,393.11 (-1.26%)
Gas: 2 Gwei

Contract

0x76F948E5F13B9A84A81E5681df8682BBf524805E
 

Overview

ETH Balance

0 ETH

Eth Value

$0.00

Token Holdings

Transaction Hash
Method
Block
From
To
Value
0xb425e48d50850092b4ce063146bf4381d35ce5bfeb0ee0dc541e487c837a6d10 Deploy Proxy By ...(pending)2024-06-26 21:32:102 days ago1719437530IN
0x76F948E5...Bf524805E
0 ETH(Pending)(Pending)
0xbc4c759d58cd1bc97d6b4248c92de75780740281359ee8484e607ca617401f4f Deploy Proxy By ...(pending)2024-06-26 15:00:412 days ago1719414041IN
0x76F948E5...Bf524805E
0 ETH(Pending)(Pending)
0x6e7de6f2fe1f6119b37bc28ad58f97507fd91c5374fa1bd045f45f436b657a25 Deploy Proxy By ...(pending)2024-06-26 13:18:032 days ago1719407883IN
0x76F948E5...Bf524805E
0 ETH(Pending)(Pending)
0x28077074dbd06fb3d0149320953ca057aaf48a88a1b78a65531cdfab9799ca4a Deploy Proxy By ...(pending)2024-06-26 11:39:043 days ago1719401944IN
0x76F948E5...Bf524805E
0 ETH(Pending)(Pending)
0xb1d58c28e3a1f81529375327424a8946da7e79b2528d2838803c12df6142fb2a Deploy Proxy By ...(pending)2024-06-26 10:14:313 days ago1719396871IN
0x76F948E5...Bf524805E
0 ETH(Pending)(Pending)
0x0c6406f404716318401690a4a96ee3ccbb2c31c31fb9a59c833b278caa1491b7 Deploy Proxy By ...(pending)2024-06-26 9:10:403 days ago1719393040IN
0x76F948E5...Bf524805E
0 ETH(Pending)(Pending)
0xb1d28a554742eca20d536c8e6b6458b18377e2d35aaaa502cb6a3369a26b7228 Deploy Proxy By ...(pending)2024-06-26 7:12:043 days ago1719385924IN
0x76F948E5...Bf524805E
0 ETH(Pending)(Pending)
0x5745811785a85277e3ab3117075a63a8611dccc5c59d40a78f3dc978069655e1 Deploy Proxy By ...(pending)2024-06-26 4:57:173 days ago1719377837IN
0x76F948E5...Bf524805E
0 ETH(Pending)(Pending)
0x8a730ea5c9dde2aa9d6b38cb6beac43e5e72c418a58e27bbb6e425c4ea54211a Deploy Proxy By ...(pending)2024-06-26 4:22:413 days ago1719375761IN
0x76F948E5...Bf524805E
0 ETH(Pending)(Pending)
0xcff5b57db90083450575825d773a2765b1e0cede328ce014d3e572ea6060257f Deploy Proxy By ...(pending)2024-06-26 3:50:523 days ago1719373852IN
0x76F948E5...Bf524805E
0 ETH(Pending)(Pending)
0x5e13548243f3437be8e85a31e1a0adc8d99a790155e0fbaaa3c70f39e4560b1b Deploy Proxy By ...(pending)2024-06-26 2:58:563 days ago1719370736IN
0x76F948E5...Bf524805E
0 ETH(Pending)(Pending)
0x65ba6ec7a0c5604c447b557a0b19d741456363aaa7a9dcb9b526b48a28ace970 Deploy Proxy By ...(pending)2024-06-23 2:24:526 days ago1719109492IN
0x76F948E5...Bf524805E
0 ETH(Pending)(Pending)
Deploy Proxy By ...201937112024-06-29 0:17:3512 hrs ago1719620255IN
0x76F948E5...Bf524805E
0 ETH0.001495952.19899761
Deploy Proxy By ...201922252024-06-28 19:18:2317 hrs ago1719602303IN
0x76F948E5...Bf524805E
0 ETH0.001791752.63381857
Deploy Proxy By ...201921412024-06-28 19:01:3517 hrs ago1719601295IN
0x76F948E5...Bf524805E
0 ETH0.00228283.45681717
Deploy Proxy By ...201918302024-06-28 17:59:1118 hrs ago1719597551IN
0x76F948E5...Bf524805E
0 ETH0.002321923.51484797
Deploy Proxy By ...201911362024-06-28 15:39:1120 hrs ago1719589151IN
0x76F948E5...Bf524805E
0 ETH0.004515316.83760697
Deploy Proxy By ...201908062024-06-28 14:32:4722 hrs ago1719585167IN
0x76F948E5...Bf524805E
0 ETH0.002374419.07386208
Deploy Proxy By ...201901072024-06-28 12:12:4724 hrs ago1719576767IN
0x76F948E5...Bf524805E
0 ETH0.002812944.38609785
Deploy Proxy By ...201900232024-06-28 11:55:5924 hrs ago1719575759IN
0x76F948E5...Bf524805E
0 ETH0.002940453.97334973
Deploy Proxy By ...201883582024-06-28 6:21:2330 hrs ago1719555683IN
0x76F948E5...Bf524805E
0 ETH0.002268893.43569511
Deploy Proxy By ...201847782024-06-27 18:20:4742 hrs ago1719512447IN
0x76F948E5...Bf524805E
0 ETH0.0075751714.32993154
Deploy Proxy By ...201798932024-06-27 1:59:232 days ago1719453563IN
0x76F948E5...Bf524805E
0 ETH0.003103914.70012794
Deploy Proxy By ...201790572024-06-26 23:11:232 days ago1719443483IN
0x76F948E5...Bf524805E
0 ETH0.002700844.04894848
Deploy Proxy By ...201777392024-06-26 18:45:592 days ago1719427559IN
0x76F948E5...Bf524805E
0 ETH0.004564786.91201912
View all transactions

Latest 25 internal transactions (View All)

Advanced mode:
Parent Transaction Hash Block From To Value
201937112024-06-29 0:17:3512 hrs ago1719620255
0x76F948E5...Bf524805E
 Contract Creation0 ETH
201922252024-06-28 19:18:2317 hrs ago1719602303
0x76F948E5...Bf524805E
 Contract Creation0 ETH
201921412024-06-28 19:01:3517 hrs ago1719601295
0x76F948E5...Bf524805E
 Contract Creation0 ETH
201918302024-06-28 17:59:1118 hrs ago1719597551
0x76F948E5...Bf524805E
 Contract Creation0 ETH
201911362024-06-28 15:39:1120 hrs ago1719589151
0x76F948E5...Bf524805E
 Contract Creation0 ETH
201908062024-06-28 14:32:4722 hrs ago1719585167
0x76F948E5...Bf524805E
 Contract Creation0 ETH
201901072024-06-28 12:12:4724 hrs ago1719576767
0x76F948E5...Bf524805E
 Contract Creation0 ETH
201900232024-06-28 11:55:5924 hrs ago1719575759
0x76F948E5...Bf524805E
 Contract Creation0 ETH
201883582024-06-28 6:21:2330 hrs ago1719555683
0x76F948E5...Bf524805E
 Contract Creation0 ETH
201847782024-06-27 18:20:4742 hrs ago1719512447
0x76F948E5...Bf524805E
 Contract Creation0 ETH
201798932024-06-27 1:59:232 days ago1719453563
0x76F948E5...Bf524805E
 Contract Creation0 ETH
201790572024-06-26 23:11:232 days ago1719443483
0x76F948E5...Bf524805E
 Contract Creation0 ETH
201777392024-06-26 18:45:592 days ago1719427559
0x76F948E5...Bf524805E
 Contract Creation0 ETH
201763782024-06-26 14:11:232 days ago1719411083
0x76F948E5...Bf524805E
 Contract Creation0 ETH
201754602024-06-26 11:07:233 days ago1719400043
0x76F948E5...Bf524805E
 Contract Creation0 ETH
201749692024-06-26 9:28:593 days ago1719394139
0x76F948E5...Bf524805E
 Contract Creation0 ETH
201738802024-06-26 5:49:473 days ago1719380987
0x76F948E5...Bf524805E
 Contract Creation0 ETH
201729962024-06-26 2:52:353 days ago1719370355
0x76F948E5...Bf524805E
 Contract Creation0 ETH
201712802024-06-25 21:07:593 days ago1719349679
0x76F948E5...Bf524805E
 Contract Creation0 ETH
201690152024-06-25 13:32:353 days ago1719322355
0x76F948E5...Bf524805E
 Contract Creation0 ETH
201688892024-06-25 13:07:233 days ago1719320843
0x76F948E5...Bf524805E
 Contract Creation0 ETH
201688782024-06-25 13:05:113 days ago1719320711
0x76F948E5...Bf524805E
 Contract Creation0 ETH
201688652024-06-25 13:02:353 days ago1719320555
0x76F948E5...Bf524805E
 Contract Creation0 ETH
201675642024-06-25 8:40:474 days ago1719304847
0x76F948E5...Bf524805E
 Contract Creation0 ETH
201674782024-06-25 8:23:354 days ago1719303815
0x76F948E5...Bf524805E
 Contract Creation0 ETH
View All Internal Transactions
Loading...
Loading

Contract Source Code Verified (Exact Match)

Contract Name:
TWCloneFactory

Compiler Version
v0.8.12+commit.f00d7308

Optimization Enabled:
Yes with 300 runs

Other Settings:
london EvmVersion
File 1 of 7 : TWCloneFactory.sol
// SPDX-License-Identifier: Apache-2.0
pragma solidity ^0.8.11;

/// @author thirdweb

//   $$\     $$\       $$\                 $$\                         $$\
//   $$ |    $$ |      \__|                $$ |                        $$ |
// $$$$$$\   $$$$$$$\  $$\  $$$$$$\   $$$$$$$ |$$\  $$\  $$\  $$$$$$\  $$$$$$$\
// \_$$  _|  $$  __$$\ $$ |$$  __$$\ $$  __$$ |$$ | $$ | $$ |$$  __$$\ $$  __$$\
//   $$ |    $$ |  $$ |$$ |$$ |  \__|$$ /  $$ |$$ | $$ | $$ |$$$$$$$$ |$$ |  $$ |
//   $$ |$$\ $$ |  $$ |$$ |$$ |      $$ |  $$ |$$ | $$ | $$ |$$   ____|$$ |  $$ |
//   \$$$$  |$$ |  $$ |$$ |$$ |      \$$$$$$$ |\$$$$$\$$$$  |\$$$$$$$\ $$$$$$$  |
//    \____/ \__|  \__|\__|\__|       \_______| \_____\____/  \_______|\_______/

import "./extension/interface/IContractFactory.sol";

import "@openzeppelin/contracts/metatx/ERC2771Context.sol";
import "@openzeppelin/contracts/utils/Multicall.sol";
import "@openzeppelin/contracts/proxy/Clones.sol";

contract TWCloneFactory is Multicall, ERC2771Context, IContractFactory {
    /// @dev Emitted when a proxy is deployed.
    event ProxyDeployed(address indexed implementation, address proxy, address indexed deployer);

    constructor(address _trustedForwarder) ERC2771Context(_trustedForwarder) {}

    /// @dev Deploys a proxy that points to the given implementation.
    function deployProxyByImplementation(
        address _implementation,
        bytes memory _data,
        bytes32 _salt
    ) public override returns (address deployedProxy) {
        bytes32 salthash = keccak256(abi.encodePacked(_msgSender(), _salt));
        deployedProxy = Clones.cloneDeterministic(_implementation, salthash);

        emit ProxyDeployed(_implementation, deployedProxy, _msgSender());

        if (_data.length > 0) {
            // slither-disable-next-line unused-return
            Address.functionCall(deployedProxy, _data);
        }
    }

    function _msgSender() internal view virtual override returns (address sender) {
        return ERC2771Context._msgSender();
    }

    function _msgData() internal view virtual override returns (bytes calldata) {
        return ERC2771Context._msgData();
    }
}

File 2 of 7 : IContractFactory.sol
// SPDX-License-Identifier: Apache-2.0
pragma solidity ^0.8.0;

/// @author thirdweb

interface IContractFactory {
    /**
     *  @notice Deploys a proxy that points to that points to the given implementation.
     *
     *  @param implementation           Address of the implementation to point to.
     *
     *  @param data                     Additional data to pass to the proxy constructor or any other data useful during deployement.
     *  @param salt                     Salt to use for the deterministic address generation.
     */
    function deployProxyByImplementation(
        address implementation,
        bytes memory data,
        bytes32 salt
    ) external returns (address);
}

File 3 of 7 : ERC2771Context.sol
// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts (last updated v4.7.0) (metatx/ERC2771Context.sol)

pragma solidity ^0.8.9;

import "../utils/Context.sol";

/**
 * @dev Context variant with ERC2771 support.
 */
abstract contract ERC2771Context is Context {
    /// @custom:oz-upgrades-unsafe-allow state-variable-immutable
    address private immutable _trustedForwarder;

    /// @custom:oz-upgrades-unsafe-allow constructor
    constructor(address trustedForwarder) {
        _trustedForwarder = trustedForwarder;
    }

    function isTrustedForwarder(address forwarder) public view virtual returns (bool) {
        return forwarder == _trustedForwarder;
    }

    function _msgSender() internal view virtual override returns (address sender) {
        if (isTrustedForwarder(msg.sender)) {
            // The assembly code is more direct than the Solidity version using `abi.decode`.
            /// @solidity memory-safe-assembly
            assembly {
                sender := shr(96, calldataload(sub(calldatasize(), 20)))
            }
        } else {
            return super._msgSender();
        }
    }

    function _msgData() internal view virtual override returns (bytes calldata) {
        if (isTrustedForwarder(msg.sender)) {
            return msg.data[:msg.data.length - 20];
        } else {
            return super._msgData();
        }
    }
}

File 4 of 7 : Clones.sol
// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts (last updated v4.7.0) (proxy/Clones.sol)

pragma solidity ^0.8.0;

/**
 * @dev https://eips.ethereum.org/EIPS/eip-1167[EIP 1167] is a standard for
 * deploying minimal proxy contracts, also known as "clones".
 *
 * > To simply and cheaply clone contract functionality in an immutable way, this standard specifies
 * > a minimal bytecode implementation that delegates all calls to a known, fixed address.
 *
 * The library includes functions to deploy a proxy using either `create` (traditional deployment) or `create2`
 * (salted deterministic deployment). It also includes functions to predict the addresses of clones deployed using the
 * deterministic method.
 *
 * _Available since v3.4._
 */
library Clones {
    /**
     * @dev Deploys and returns the address of a clone that mimics the behaviour of `implementation`.
     *
     * This function uses the create opcode, which should never revert.
     */
    function clone(address implementation) internal returns (address instance) {
        /// @solidity memory-safe-assembly
        assembly {
            let ptr := mload(0x40)
            mstore(ptr, 0x3d602d80600a3d3981f3363d3d373d3d3d363d73000000000000000000000000)
            mstore(add(ptr, 0x14), shl(0x60, implementation))
            mstore(add(ptr, 0x28), 0x5af43d82803e903d91602b57fd5bf30000000000000000000000000000000000)
            instance := create(0, ptr, 0x37)
        }
        require(instance != address(0), "ERC1167: create failed");
    }

    /**
     * @dev Deploys and returns the address of a clone that mimics the behaviour of `implementation`.
     *
     * This function uses the create2 opcode and a `salt` to deterministically deploy
     * the clone. Using the same `implementation` and `salt` multiple time will revert, since
     * the clones cannot be deployed twice at the same address.
     */
    function cloneDeterministic(address implementation, bytes32 salt) internal returns (address instance) {
        /// @solidity memory-safe-assembly
        assembly {
            let ptr := mload(0x40)
            mstore(ptr, 0x3d602d80600a3d3981f3363d3d373d3d3d363d73000000000000000000000000)
            mstore(add(ptr, 0x14), shl(0x60, implementation))
            mstore(add(ptr, 0x28), 0x5af43d82803e903d91602b57fd5bf30000000000000000000000000000000000)
            instance := create2(0, ptr, 0x37, salt)
        }
        require(instance != address(0), "ERC1167: create2 failed");
    }

    /**
     * @dev Computes the address of a clone deployed using {Clones-cloneDeterministic}.
     */
    function predictDeterministicAddress(
        address implementation,
        bytes32 salt,
        address deployer
    ) internal pure returns (address predicted) {
        /// @solidity memory-safe-assembly
        assembly {
            let ptr := mload(0x40)
            mstore(ptr, 0x3d602d80600a3d3981f3363d3d373d3d3d363d73000000000000000000000000)
            mstore(add(ptr, 0x14), shl(0x60, implementation))
            mstore(add(ptr, 0x28), 0x5af43d82803e903d91602b57fd5bf3ff00000000000000000000000000000000)
            mstore(add(ptr, 0x38), shl(0x60, deployer))
            mstore(add(ptr, 0x4c), salt)
            mstore(add(ptr, 0x6c), keccak256(ptr, 0x37))
            predicted := keccak256(add(ptr, 0x37), 0x55)
        }
    }

    /**
     * @dev Computes the address of a clone deployed using {Clones-cloneDeterministic}.
     */
    function predictDeterministicAddress(address implementation, bytes32 salt)
        internal
        view
        returns (address predicted)
    {
        return predictDeterministicAddress(implementation, salt, address(this));
    }
}

File 5 of 7 : Address.sol
// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts (last updated v4.7.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
                /// @solidity memory-safe-assembly
                assembly {
                    let returndata_size := mload(returndata)
                    revert(add(32, returndata), returndata_size)
                }
            } else {
                revert(errorMessage);
            }
        }
    }
}

File 6 of 7 : Context.sol
// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts v4.4.1 (utils/Context.sol)

pragma solidity ^0.8.0;

/**
 * @dev Provides information about the current execution context, including the
 * sender of the transaction and its data. While these are generally available
 * via msg.sender and msg.data, they should not be accessed in such a direct
 * manner, since when dealing with meta-transactions the account sending and
 * paying for execution may not be the actual sender (as far as an application
 * is concerned).
 *
 * This contract is only required for intermediate, library-like contracts.
 */
abstract contract Context {
    function _msgSender() internal view virtual returns (address) {
        return msg.sender;
    }

    function _msgData() internal view virtual returns (bytes calldata) {
        return msg.data;
    }
}

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

pragma solidity ^0.8.0;

import "./Address.sol";

/**
 * @dev Provides a function to batch together multiple calls in a single external call.
 *
 * _Available since v4.1._
 */
abstract contract Multicall {
    /**
     * @dev Receives and executes a batch of function calls on this contract.
     */
    function multicall(bytes[] calldata data) external virtual returns (bytes[] memory results) {
        results = new bytes[](data.length);
        for (uint256 i = 0; i < data.length; i++) {
            results[i] = Address.functionDelegateCall(address(this), data[i]);
        }
        return results;
    }
}

Settings
{
  "optimizer": {
    "enabled": true,
    "runs": 300
  },
  "evmVersion": "london",
  "remappings": [
    ":@chainlink/contracts/src/=node_modules/@chainlink/contracts/src/",
    ":@ds-test/=lib/ds-test/src/",
    ":@openzeppelin/=node_modules/@openzeppelin/",
    ":@std/=lib/forge-std/src/",
    ":contracts/=contracts/",
    ":ds-test/=lib/ds-test/src/",
    ":dynamic-contracts/=lib/dynamic-contracts/src/",
    ":erc721a-upgradeable/=node_modules/erc721a-upgradeable/",
    ":erc721a/=node_modules/erc721a/",
    ":forge-std/=lib/forge-std/src/"
  ],
  "outputSelection": {
    "*": {
      "*": [
        "evm.bytecode",
        "evm.deployedBytecode",
        "devdoc",
        "userdoc",
        "metadata",
        "abi"
      ]
    }
  }
}

Contract Security Audit

Contract ABI

[{"inputs":[{"internalType":"address","name":"_trustedForwarder","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"implementation","type":"address"},{"indexed":false,"internalType":"address","name":"proxy","type":"address"},{"indexed":true,"internalType":"address","name":"deployer","type":"address"}],"name":"ProxyDeployed","type":"event"},{"inputs":[{"internalType":"address","name":"_implementation","type":"address"},{"internalType":"bytes","name":"_data","type":"bytes"},{"internalType":"bytes32","name":"_salt","type":"bytes32"}],"name":"deployProxyByImplementation","outputs":[{"internalType":"address","name":"deployedProxy","type":"address"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"forwarder","type":"address"}],"name":"isTrustedForwarder","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes[]","name":"data","type":"bytes[]"}],"name":"multicall","outputs":[{"internalType":"bytes[]","name":"results","type":"bytes[]"}],"stateMutability":"nonpayable","type":"function"}]

60a060405234801561001057600080fd5b50604051610a64380380610a6483398101604081905261002f91610040565b6001600160a01b0316608052610070565b60006020828403121561005257600080fd5b81516001600160a01b038116811461006957600080fd5b9392505050565b6080516109d361009160003960008181608601526103d001526109d36000f3fe608060405234801561001057600080fd5b50600436106100415760003560e01c806311b804ab14610046578063572b6c0514610076578063ac9650d8146100c6575b600080fd5b6100596100543660046106a1565b6100e6565b6040516001600160a01b0390911681526020015b60405180910390f35b6100b661008436600461076c565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0390811691161490565b604051901515815260200161006d565b6100d96100d4366004610787565b6101ab565b60405161006d9190610858565b6000806100f16102a1565b8360405160200161012092919060609290921b6bffffffffffffffffffffffff19168252601482015260340190565b60405160208183030381529060405280519060200120905061014285826102b0565b915061014c6102a1565b6040516001600160a01b038481168252918216918716907f9e0862c4ebff2150fbbfd3f8547483f55bdec0c34fd977d3fccaa55d6c4ce7849060200160405180910390a38351156101a3576101a1828561035e565b505b509392505050565b60608167ffffffffffffffff8111156101c6576101c661068b565b6040519080825280602002602001820160405280156101f957816020015b60608152602001906001900390816101e45790505b50905060005b82811015610299576102693085858481811061021d5761021d6108ba565b905060200281019061022f91906108d0565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152506103a792505050565b82828151811061027b5761027b6108ba565b602002602001018190525080806102919061091e565b9150506101ff565b505b92915050565b60006102ab6103cc565b905090565b60006040517f3d602d80600a3d3981f3363d3d373d3d3d363d7300000000000000000000000081528360601b60148201526e5af43d82803e903d91602b57fd5bf360881b6028820152826037826000f59150506001600160a01b03811661029b5760405162461bcd60e51b815260206004820152601760248201527f455243313136373a2063726561746532206661696c656400000000000000000060448201526064015b60405180910390fd5b60606103a083836040518060400160405280601e81526020017f416464726573733a206c6f772d6c6576656c2063616c6c206661696c65640000815250610411565b9392505050565b60606103a0838360405180606001604052806027815260200161097760279139610428565b60007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031633141561040c575060131936013560601c90565b503390565b60606104208484600085610505565b949350505050565b60606001600160a01b0384163b6104905760405162461bcd60e51b815260206004820152602660248201527f416464726573733a2064656c65676174652063616c6c20746f206e6f6e2d636f6044820152651b9d1c9858dd60d21b6064820152608401610355565b600080856001600160a01b0316856040516104ab9190610947565b600060405180830381855af49150503d80600081146104e6576040519150601f19603f3d011682016040523d82523d6000602084013e6104eb565b606091505b50915091506104fb828286610636565b9695505050505050565b6060824710156105665760405162461bcd60e51b815260206004820152602660248201527f416464726573733a20696e73756666696369656e742062616c616e636520666f6044820152651c8818d85b1b60d21b6064820152608401610355565b6001600160a01b0385163b6105bd5760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e74726163740000006044820152606401610355565b600080866001600160a01b031685876040516105d99190610947565b60006040518083038185875af1925050503d8060008114610616576040519150601f19603f3d011682016040523d82523d6000602084013e61061b565b606091505b509150915061062b828286610636565b979650505050505050565b606083156106455750816103a0565b8251156106555782518084602001fd5b8160405162461bcd60e51b81526004016103559190610963565b80356001600160a01b038116811461068657600080fd5b919050565b634e487b7160e01b600052604160045260246000fd5b6000806000606084860312156106b657600080fd5b6106bf8461066f565b9250602084013567ffffffffffffffff808211156106dc57600080fd5b818601915086601f8301126106f057600080fd5b8135818111156107025761070261068b565b604051601f8201601f19908116603f0116810190838211818310171561072a5761072a61068b565b8160405282815289602084870101111561074357600080fd5b826020860160208301376000602084830101528096505050505050604084013590509250925092565b60006020828403121561077e57600080fd5b6103a08261066f565b6000806020838503121561079a57600080fd5b823567ffffffffffffffff808211156107b257600080fd5b818501915085601f8301126107c657600080fd5b8135818111156107d557600080fd5b8660208260051b85010111156107ea57600080fd5b60209290920196919550909350505050565b60005b838110156108175781810151838201526020016107ff565b83811115610826576000848401525b50505050565b600081518084526108448160208601602086016107fc565b601f01601f19169290920160200192915050565b6000602080830181845280855180835260408601915060408160051b870101925083870160005b828110156108ad57603f1988860301845261089b85835161082c565b9450928501929085019060010161087f565b5092979650505050505050565b634e487b7160e01b600052603260045260246000fd5b6000808335601e198436030181126108e757600080fd5b83018035915067ffffffffffffffff82111561090257600080fd5b60200191503681900382131561091757600080fd5b9250929050565b600060001982141561094057634e487b7160e01b600052601160045260246000fd5b5060010190565b600082516109598184602087016107fc565b9190910192915050565b6020815260006103a0602083018461082c56fe416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c6564a2646970667358221220a8e1061608e4d1190d43f356f821a8706a35aafa06964cf0e26cc6223baebdea64736f6c634300080c0033000000000000000000000000d04f98c88ce1054c90022ee34d566b9237a1203c

Deployed Bytecode

0x608060405234801561001057600080fd5b50600436106100415760003560e01c806311b804ab14610046578063572b6c0514610076578063ac9650d8146100c6575b600080fd5b6100596100543660046106a1565b6100e6565b6040516001600160a01b0390911681526020015b60405180910390f35b6100b661008436600461076c565b7f000000000000000000000000d04f98c88ce1054c90022ee34d566b9237a1203c6001600160a01b0390811691161490565b604051901515815260200161006d565b6100d96100d4366004610787565b6101ab565b60405161006d9190610858565b6000806100f16102a1565b8360405160200161012092919060609290921b6bffffffffffffffffffffffff19168252601482015260340190565b60405160208183030381529060405280519060200120905061014285826102b0565b915061014c6102a1565b6040516001600160a01b038481168252918216918716907f9e0862c4ebff2150fbbfd3f8547483f55bdec0c34fd977d3fccaa55d6c4ce7849060200160405180910390a38351156101a3576101a1828561035e565b505b509392505050565b60608167ffffffffffffffff8111156101c6576101c661068b565b6040519080825280602002602001820160405280156101f957816020015b60608152602001906001900390816101e45790505b50905060005b82811015610299576102693085858481811061021d5761021d6108ba565b905060200281019061022f91906108d0565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152506103a792505050565b82828151811061027b5761027b6108ba565b602002602001018190525080806102919061091e565b9150506101ff565b505b92915050565b60006102ab6103cc565b905090565b60006040517f3d602d80600a3d3981f3363d3d373d3d3d363d7300000000000000000000000081528360601b60148201526e5af43d82803e903d91602b57fd5bf360881b6028820152826037826000f59150506001600160a01b03811661029b5760405162461bcd60e51b815260206004820152601760248201527f455243313136373a2063726561746532206661696c656400000000000000000060448201526064015b60405180910390fd5b60606103a083836040518060400160405280601e81526020017f416464726573733a206c6f772d6c6576656c2063616c6c206661696c65640000815250610411565b9392505050565b60606103a0838360405180606001604052806027815260200161097760279139610428565b60007f000000000000000000000000d04f98c88ce1054c90022ee34d566b9237a1203c6001600160a01b031633141561040c575060131936013560601c90565b503390565b60606104208484600085610505565b949350505050565b60606001600160a01b0384163b6104905760405162461bcd60e51b815260206004820152602660248201527f416464726573733a2064656c65676174652063616c6c20746f206e6f6e2d636f6044820152651b9d1c9858dd60d21b6064820152608401610355565b600080856001600160a01b0316856040516104ab9190610947565b600060405180830381855af49150503d80600081146104e6576040519150601f19603f3d011682016040523d82523d6000602084013e6104eb565b606091505b50915091506104fb828286610636565b9695505050505050565b6060824710156105665760405162461bcd60e51b815260206004820152602660248201527f416464726573733a20696e73756666696369656e742062616c616e636520666f6044820152651c8818d85b1b60d21b6064820152608401610355565b6001600160a01b0385163b6105bd5760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e74726163740000006044820152606401610355565b600080866001600160a01b031685876040516105d99190610947565b60006040518083038185875af1925050503d8060008114610616576040519150601f19603f3d011682016040523d82523d6000602084013e61061b565b606091505b509150915061062b828286610636565b979650505050505050565b606083156106455750816103a0565b8251156106555782518084602001fd5b8160405162461bcd60e51b81526004016103559190610963565b80356001600160a01b038116811461068657600080fd5b919050565b634e487b7160e01b600052604160045260246000fd5b6000806000606084860312156106b657600080fd5b6106bf8461066f565b9250602084013567ffffffffffffffff808211156106dc57600080fd5b818601915086601f8301126106f057600080fd5b8135818111156107025761070261068b565b604051601f8201601f19908116603f0116810190838211818310171561072a5761072a61068b565b8160405282815289602084870101111561074357600080fd5b826020860160208301376000602084830101528096505050505050604084013590509250925092565b60006020828403121561077e57600080fd5b6103a08261066f565b6000806020838503121561079a57600080fd5b823567ffffffffffffffff808211156107b257600080fd5b818501915085601f8301126107c657600080fd5b8135818111156107d557600080fd5b8660208260051b85010111156107ea57600080fd5b60209290920196919550909350505050565b60005b838110156108175781810151838201526020016107ff565b83811115610826576000848401525b50505050565b600081518084526108448160208601602086016107fc565b601f01601f19169290920160200192915050565b6000602080830181845280855180835260408601915060408160051b870101925083870160005b828110156108ad57603f1988860301845261089b85835161082c565b9450928501929085019060010161087f565b5092979650505050505050565b634e487b7160e01b600052603260045260246000fd5b6000808335601e198436030181126108e757600080fd5b83018035915067ffffffffffffffff82111561090257600080fd5b60200191503681900382131561091757600080fd5b9250929050565b600060001982141561094057634e487b7160e01b600052601160045260246000fd5b5060010190565b600082516109598184602087016107fc565b9190910192915050565b6020815260006103a0602083018461082c56fe416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c6564a2646970667358221220a8e1061608e4d1190d43f356f821a8706a35aafa06964cf0e26cc6223baebdea64736f6c634300080c0033

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

000000000000000000000000d04f98c88ce1054c90022ee34d566b9237a1203c

-----Decoded View---------------
Arg [0] : _trustedForwarder (address): 0xD04F98C88cE1054c90022EE34d566B9237a1203C

-----Encoded View---------------
1 Constructor Arguments found :
Arg [0] : 000000000000000000000000d04f98c88ce1054c90022ee34d566b9237a1203c


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.