Contract 0x76f948e5f13b9a84a81e5681df8682bbf524805e

Txn Hash Method
Block
From
To
Value [Txn Fee]
0x7d74a77b6e6c722023d7f4b42d42cf7e2ea14dacb36ab92020096d55849b3e13Deploy Proxy By ...37683642024-03-01 20:19:4025 mins ago0x8a6d78de2bb6ae70383122efd489e64ab2dfd3da IN  0x76f948e5f13b9a84a81e5681df8682bbf524805e0 ETH0.000285241392
0x2d280c182fafc707d6569920bcb29aa97ae4d987feb21c3aa20a5c9a2f8595ceDeploy Proxy By ...37680572024-03-01 20:04:1841 mins ago0x66b318da9ea636c6acf9b2900c7eac8cea58f5f7 IN  0x76f948e5f13b9a84a81e5681df8682bbf524805e0 ETH0.0002853036
0x065643241a5946cde35c24ed565653a5b60545d05039db034e7c5fad4e7b0bbdDeploy Proxy By ...37677802024-03-01 19:50:2755 mins ago0x21b61baa46322667fb67083c443bab2720835f2c IN  0x76f948e5f13b9a84a81e5681df8682bbf524805e0 ETH0.000295204176
0xf4146169a16b0363f3fd3b328f7750bf014fcb5923c5f0f28149220b0002b2d4Deploy Proxy By ...37676702024-03-01 19:44:551 hr ago0x98620abe1b53780c43410cda2533fff9cfced277 IN  0x76f948e5f13b9a84a81e5681df8682bbf524805e0 ETH0.000285282864
0x2fffa1e376b65125cd28e3eb9ab8f5e17a90b45dbe321ede2d255ec1bbecd9e9Deploy Proxy By ...37676302024-03-01 19:42:551 hr 2 mins ago0xf2e6f08799669f25101cd8cbbcec00935cd2d32b IN  0x76f948e5f13b9a84a81e5681df8682bbf524805e0 ETH0.0003108888
0x344ee6662d20259b96fb68452a45f1e15c5d423415c2fd07a495c6f44fea18e2Deploy Proxy By ...37671732024-03-01 19:20:021 hr 25 mins ago0x3a6601d001e866060d8006b96ed4bf0ae067b9cb IN  0x76f948e5f13b9a84a81e5681df8682bbf524805e0 ETH0.00029520936
0x3ccd6648d96e811c296cd4464e837b5c4326dc0791faf61702bfec7b4d7388ffDeploy Proxy By ...37670612024-03-01 19:14:261 hr 31 mins ago0x3a6601d001e866060d8006b96ed4bf0ae067b9cb IN  0x76f948e5f13b9a84a81e5681df8682bbf524805e0 ETH0.000295193808
0xb824eb40d6212a258d3db0e83ca33fa11f1cf52357379b840b9b17cd50b3ada5Deploy Proxy By ...37666022024-03-01 18:51:271 hr 54 mins ago0xa74a5c961146147d64d5373cd966381651e77364 IN  0x76f948e5f13b9a84a81e5681df8682bbf524805e0 ETH0.000285339888
0xea77c0cd7462f2cad38e232bab7d6642e68050ec10be0d019618c67e3b8a9a5aDeploy Proxy By ...37653282024-03-01 17:47:452 hrs 57 mins ago0x075d51d4714d8d952efa06c381853fc6487fa1a4 IN  0x76f948e5f13b9a84a81e5681df8682bbf524805e0 ETH0.000276586704
0x262a9af319ef7b7a4b4eb9d26c8febce48bc5b7ac3bd746f37f9302b06b9f15fDeploy Proxy By ...37645812024-03-01 17:10:233 hrs 35 mins ago0x020e4ccffd0ec28e450a3343ac19246cf2b3784b IN  0x76f948e5f13b9a84a81e5681df8682bbf524805e0 ETH0.000285298416
0xe0625f4687d46e6a28f78657d6391467ba16d244ed5ae43549ad75f723abc9baDeploy Proxy By ...37641032024-03-01 16:46:273 hrs 59 mins ago0xd52a931d985ab36bcdee250086e2929325f9a3fd IN  0x76f948e5f13b9a84a81e5681df8682bbf524805e0 ETH0.00031966272
0x63c998018ebb60413377cb8e66683ebc53455485f4c1255a312a732c8de4bfc7Deploy Proxy By ...37640742024-03-01 16:45:004 hrs ago0xac3740e05cddfe3e501963d99f98da71ec3bbbf5 IN  0x76f948e5f13b9a84a81e5681df8682bbf524805e0 ETH0.00035311496
0xa3c4df1209f54ece4733765d92a7af2eedbe70af42cd4834ca6b9d482ac09dd0Deploy Proxy By ...37639112024-03-01 16:36:444 hrs 8 mins ago0x4e77708507c46c1641ea9db623507ea167f4ee13 IN  0x76f948e5f13b9a84a81e5681df8682bbf524805e0 ETH0.000319652352
0xde3d5ca6623124c2a783e76b5f99d654656a3918de121e91b621a41c129c04b7Deploy Proxy By ...37638972024-03-01 16:36:024 hrs 9 mins ago0xd4a4c8f212ba4e5f8224b17bc97ca176b8fb8c1e IN  0x76f948e5f13b9a84a81e5681df8682bbf524805e0 ETH0.000285293232
0xeed698b05fa329123e1e8bca96314eca67334bd2f397176a87c8b2c37b5848b3Deploy Proxy By ...37638742024-03-01 16:34:534 hrs 10 mins ago0x8501304484ea2ce3ed6be71cad1d2da18c384501 IN  0x76f948e5f13b9a84a81e5681df8682bbf524805e0 ETH0.000276565968
0xf30610f65b31ac618eae56990036d45c707533b883f593d9b7f7019d6a16709eDeploy Proxy By ...37638192024-03-01 16:32:084 hrs 13 mins ago0xd4a4c8f212ba4e5f8224b17bc97ca176b8fb8c1e IN  0x76f948e5f13b9a84a81e5681df8682bbf524805e0 ETH0.00028527768
0xb04f854208546ce7d631f1daeae31267fff725e2688ebe306c672b671138ee4dDeploy Proxy By ...37638062024-03-01 16:31:294 hrs 14 mins ago0xd52a931d985ab36bcdee250086e2929325f9a3fd IN  0x76f948e5f13b9a84a81e5681df8682bbf524805e0 ETH0.000285324336
0x9d333dee4ee0d194810f27e9b93bca55f038a16407c94ba1502b7072210b753fDeploy Proxy By ...37637662024-03-01 16:29:294 hrs 16 mins ago0xd4a4c8f212ba4e5f8224b17bc97ca176b8fb8c1e IN  0x76f948e5f13b9a84a81e5681df8682bbf524805e0 ETH0.000285267312
0x67cefc2aa4403e4f01593d2aa7083d12db9ade03b98f3cec510cc5a6fbdab28dDeploy Proxy By ...37633832024-03-01 16:10:204 hrs 35 mins ago0x2dc3cb6448868d7aa2a4274d94e118b55a9eb5f8 IN  0x76f948e5f13b9a84a81e5681df8682bbf524805e0 ETH0.000285298416
0x822f874f751cacdd22236af4d0cffdc0742be2ff0b82c399f98ab4e0d5530b10Deploy Proxy By ...37633092024-03-01 16:06:374 hrs 38 mins ago0x7eda5ebc9eb47de38f19c82b2427f113b6363004 IN  0x76f948e5f13b9a84a81e5681df8682bbf524805e0 ETH0.000285298416
0xa256aca415ff4df387300349586b1a6e899544eb8de239071d0187afb0482871Deploy Proxy By ...37632852024-03-01 16:05:254 hrs 40 mins ago0x7eda5ebc9eb47de38f19c82b2427f113b6363004 IN  0x76f948e5f13b9a84a81e5681df8682bbf524805e0 ETH0.000319678272
0x48b3abe29c054b1d482bc285490d11f2d77ab958183451635453099d4c8694e7Deploy Proxy By ...37632242024-03-01 16:02:224 hrs 43 mins ago0x9bd1a18eec0d2e8ee11685fbe948720aa83634d8 IN  0x76f948e5f13b9a84a81e5681df8682bbf524805e0 ETH0.00031966272
0x2fdf1bf4c86d282441a5b52ac2a8858861c1bf4428cb4d7295cdc799d75a8cd5Deploy Proxy By ...37631272024-03-01 15:57:314 hrs 48 mins ago0x9bd1a18eec0d2e8ee11685fbe948720aa83634d8 IN  0x76f948e5f13b9a84a81e5681df8682bbf524805e0 ETH0.000285272496
0xc6d99a8ee1937b9831e015082b9b2bd852e7862209963353a11e501bc5c80fd0Deploy Proxy By ...37627832024-03-01 15:40:195 hrs 5 mins ago0x7ff6da3958903d2266697d38366c0495dfcc6d98 IN  0x76f948e5f13b9a84a81e5681df8682bbf524805e0 ETH0.000285282864
0xf3c36cf1df956725950126f520e49bf47b4dc9e1c713c27aa85c3e62fcb5c54bDeploy Proxy By ...37627082024-03-01 15:36:345 hrs 8 mins ago0x988b2a936bd84b2c78a0ec234821a87aa64e6aa6 IN  0x76f948e5f13b9a84a81e5681df8682bbf524805e0 ETH0.00028527768
[ Download CSV Export 
Latest 25 internal transaction
Parent Txn Hash Block From To Value
0x7d74a77b6e6c722023d7f4b42d42cf7e2ea14dacb36ab92020096d55849b3e1337683642024-03-01 20:19:4025 mins ago 0x76f948e5f13b9a84a81e5681df8682bbf524805e  Contract Creation0 ETH
0x2d280c182fafc707d6569920bcb29aa97ae4d987feb21c3aa20a5c9a2f8595ce37680572024-03-01 20:04:1841 mins ago 0x76f948e5f13b9a84a81e5681df8682bbf524805e  Contract Creation0 ETH
0x065643241a5946cde35c24ed565653a5b60545d05039db034e7c5fad4e7b0bbd37677802024-03-01 19:50:2755 mins ago 0x76f948e5f13b9a84a81e5681df8682bbf524805e  Contract Creation0 ETH
0xf4146169a16b0363f3fd3b328f7750bf014fcb5923c5f0f28149220b0002b2d437676702024-03-01 19:44:551 hr ago 0x76f948e5f13b9a84a81e5681df8682bbf524805e  Contract Creation0 ETH
0x2fffa1e376b65125cd28e3eb9ab8f5e17a90b45dbe321ede2d255ec1bbecd9e937676302024-03-01 19:42:551 hr 2 mins ago 0x76f948e5f13b9a84a81e5681df8682bbf524805e  Contract Creation0 ETH
0x344ee6662d20259b96fb68452a45f1e15c5d423415c2fd07a495c6f44fea18e237671732024-03-01 19:20:021 hr 25 mins ago 0x76f948e5f13b9a84a81e5681df8682bbf524805e  Contract Creation0 ETH
0x3ccd6648d96e811c296cd4464e837b5c4326dc0791faf61702bfec7b4d7388ff37670612024-03-01 19:14:261 hr 31 mins ago 0x76f948e5f13b9a84a81e5681df8682bbf524805e  Contract Creation0 ETH
0xb824eb40d6212a258d3db0e83ca33fa11f1cf52357379b840b9b17cd50b3ada537666022024-03-01 18:51:271 hr 54 mins ago 0x76f948e5f13b9a84a81e5681df8682bbf524805e  Contract Creation0 ETH
0xea77c0cd7462f2cad38e232bab7d6642e68050ec10be0d019618c67e3b8a9a5a37653282024-03-01 17:47:452 hrs 57 mins ago 0x76f948e5f13b9a84a81e5681df8682bbf524805e  Contract Creation0 ETH
0x262a9af319ef7b7a4b4eb9d26c8febce48bc5b7ac3bd746f37f9302b06b9f15f37645812024-03-01 17:10:233 hrs 35 mins ago 0x76f948e5f13b9a84a81e5681df8682bbf524805e  Contract Creation0 ETH
0xe0625f4687d46e6a28f78657d6391467ba16d244ed5ae43549ad75f723abc9ba37641032024-03-01 16:46:273 hrs 59 mins ago 0x76f948e5f13b9a84a81e5681df8682bbf524805e  Contract Creation0 ETH
0x63c998018ebb60413377cb8e66683ebc53455485f4c1255a312a732c8de4bfc737640742024-03-01 16:45:004 hrs ago 0x76f948e5f13b9a84a81e5681df8682bbf524805e  Contract Creation0 ETH
0xa3c4df1209f54ece4733765d92a7af2eedbe70af42cd4834ca6b9d482ac09dd037639112024-03-01 16:36:444 hrs 8 mins ago 0x76f948e5f13b9a84a81e5681df8682bbf524805e  Contract Creation0 ETH
0xde3d5ca6623124c2a783e76b5f99d654656a3918de121e91b621a41c129c04b737638972024-03-01 16:36:024 hrs 9 mins ago 0x76f948e5f13b9a84a81e5681df8682bbf524805e  Contract Creation0 ETH
0xeed698b05fa329123e1e8bca96314eca67334bd2f397176a87c8b2c37b5848b337638742024-03-01 16:34:534 hrs 10 mins ago 0x76f948e5f13b9a84a81e5681df8682bbf524805e  Contract Creation0 ETH
0xf30610f65b31ac618eae56990036d45c707533b883f593d9b7f7019d6a16709e37638192024-03-01 16:32:084 hrs 13 mins ago 0x76f948e5f13b9a84a81e5681df8682bbf524805e  Contract Creation0 ETH
0xb04f854208546ce7d631f1daeae31267fff725e2688ebe306c672b671138ee4d37638062024-03-01 16:31:294 hrs 14 mins ago 0x76f948e5f13b9a84a81e5681df8682bbf524805e  Contract Creation0 ETH
0x9d333dee4ee0d194810f27e9b93bca55f038a16407c94ba1502b7072210b753f37637662024-03-01 16:29:294 hrs 16 mins ago 0x76f948e5f13b9a84a81e5681df8682bbf524805e  Contract Creation0 ETH
0x67cefc2aa4403e4f01593d2aa7083d12db9ade03b98f3cec510cc5a6fbdab28d37633832024-03-01 16:10:204 hrs 35 mins ago 0x76f948e5f13b9a84a81e5681df8682bbf524805e  Contract Creation0 ETH
0x822f874f751cacdd22236af4d0cffdc0742be2ff0b82c399f98ab4e0d5530b1037633092024-03-01 16:06:374 hrs 38 mins ago 0x76f948e5f13b9a84a81e5681df8682bbf524805e  Contract Creation0 ETH
0xa256aca415ff4df387300349586b1a6e899544eb8de239071d0187afb048287137632852024-03-01 16:05:254 hrs 40 mins ago 0x76f948e5f13b9a84a81e5681df8682bbf524805e  Contract Creation0 ETH
0x48b3abe29c054b1d482bc285490d11f2d77ab958183451635453099d4c8694e737632242024-03-01 16:02:224 hrs 43 mins ago 0x76f948e5f13b9a84a81e5681df8682bbf524805e  Contract Creation0 ETH
0x2fdf1bf4c86d282441a5b52ac2a8858861c1bf4428cb4d7295cdc799d75a8cd537631272024-03-01 15:57:314 hrs 48 mins ago 0x76f948e5f13b9a84a81e5681df8682bbf524805e  Contract Creation0 ETH
0xc6d99a8ee1937b9831e015082b9b2bd852e7862209963353a11e501bc5c80fd037627832024-03-01 15:40:195 hrs 5 mins ago 0x76f948e5f13b9a84a81e5681df8682bbf524805e  Contract Creation0 ETH
0xf3c36cf1df956725950126f520e49bf47b4dc9e1c713c27aa85c3e62fcb5c54b37627082024-03-01 15:36:345 hrs 8 mins ago 0x76f948e5f13b9a84a81e5681df8682bbf524805e  Contract Creation0 ETH
[ Download CSV Export 
Index Block
Loading
This contract may be a proxy contract. Click on More Options and select Is this a proxy? to confirm and enable the "Read as Proxy" & "Write as Proxy" tabs.

Contract 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 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 Gas Used Reward
Age Block Fee Address BC Fee Address Voting Power Jailed Incoming
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.