ETH Price: $2,863.65 (-2.64%)
 

More Info

Private Name Tags

Multichain Info

Transaction Hash
Block
From
To
Mint Batch Witho...254227432025-01-23 12:20:33367 days ago1737634833IN
Zora: Zora Universal Minter (Legacy)
0.002331 ETH0.000007220.01704978
Mint Batch Witho...254099762025-01-23 5:14:59367 days ago1737609299IN
Zora: Zora Universal Minter (Legacy)
0.002331 ETH0.000003230.00688294
Mint Batch Witho...253948482025-01-22 20:50:43368 days ago1737579043IN
Zora: Zora Universal Minter (Legacy)
0.001554 ETH0.000003640.00867912
Mint Batch Witho...253750152025-01-22 9:49:37368 days ago1737539377IN
Zora: Zora Universal Minter (Legacy)
0.000777 ETH0.000001550.00572511
Mint Batch Witho...253223912025-01-21 4:35:29370 days ago1737434129IN
Zora: Zora Universal Minter (Legacy)
0.002331 ETH0.000002370.00496597
Mint Batch Witho...253076972025-01-20 20:25:41370 days ago1737404741IN
Zora: Zora Universal Minter (Legacy)
0.000777 ETH0.000003340.00875886
Mint Batch Witho...252906972025-01-20 10:59:01370 days ago1737370741IN
Zora: Zora Universal Minter (Legacy)
0.002331 ETH0.000007740.01738323
Mint Batch Witho...252619872025-01-19 19:02:01371 days ago1737313321IN
Zora: Zora Universal Minter (Legacy)
0.001554 ETH0.000011030.03022303
Mint Batch Witho...251533152025-01-17 6:39:37373 days ago1737095977IN
Zora: Zora Universal Minter (Legacy)
0.002331 ETH0.000002370.00458962
Mint Batch Witho...251500692025-01-17 4:51:25374 days ago1737089485IN
Zora: Zora Universal Minter (Legacy)
0.002331 ETH0.000002180.00565327
Mint Batch Witho...250820972025-01-15 15:05:41375 days ago1736953541IN
Zora: Zora Universal Minter (Legacy)
0.001554 ETH0.000044940.04479177
Mint Batch Witho...250310352025-01-14 10:43:37376 days ago1736851417IN
Zora: Zora Universal Minter (Legacy)
0.000777 ETH0.000002720.01702743
Mint Batch Witho...249529222025-01-12 15:19:51378 days ago1736695191IN
Zora: Zora Universal Minter (Legacy)
0.002331 ETH0.000007540.01600392
Mint Batch Witho...249450252025-01-12 10:56:37378 days ago1736679397IN
Zora: Zora Universal Minter (Legacy)
0.002553 ETH0.000022150.01049627
Mint Batch Witho...248798662025-01-10 22:44:39380 days ago1736549079IN
Zora: Zora Universal Minter (Legacy)
0.002331 ETH0.000006740.01537061
Mint Batch Witho...248725432025-01-10 18:40:33380 days ago1736534433IN
Zora: Zora Universal Minter (Legacy)
0.001554 ETH0.000018690.04164848
Mint Batch Witho...248716762025-01-10 18:11:39380 days ago1736532699IN
Zora: Zora Universal Minter (Legacy)
0.002331 ETH0.000017440.02200368
Mint Batch Witho...248623842025-01-10 13:01:55380 days ago1736514115IN
Zora: Zora Universal Minter (Legacy)
0.001554 ETH0.000009650.02666688
Mint Batch Witho...248277022025-01-09 17:45:51381 days ago1736444751IN
Zora: Zora Universal Minter (Legacy)
0.001554 ETH0.000008890.00929104
Mint Batch Witho...248275682025-01-09 17:41:23381 days ago1736444483IN
Zora: Zora Universal Minter (Legacy)
0.002331 ETH0.000013260.0151087
Mint Batch Witho...247971122025-01-09 0:46:11382 days ago1736383571IN
Zora: Zora Universal Minter (Legacy)
0.002331 ETH0.000005590.01228493
Mint Batch Witho...247699372025-01-08 9:40:21382 days ago1736329221IN
Zora: Zora Universal Minter (Legacy)
0.002331 ETH0.000008170.02318081
Mint Batch Witho...247087952025-01-06 23:42:17384 days ago1736206937IN
Zora: Zora Universal Minter (Legacy)
0.000111 ETH0.000006960.02290072
Mint Batch Witho...247066472025-01-06 22:30:41384 days ago1736202641IN
Zora: Zora Universal Minter (Legacy)
0.000111 ETH0.000010660.02627656
Mint Batch Witho...247013602025-01-06 19:34:27384 days ago1736192067IN
Zora: Zora Universal Minter (Legacy)
0.000111 ETH0.000006090.02631194
View all transactions

Latest 25 internal transactions (View All)

Parent Transaction Hash Block From To
254227432025-01-23 12:20:33367 days ago1737634833
Zora: Zora Universal Minter (Legacy)
0.002331 ETH
254227432025-01-23 12:20:33367 days ago1737634833
Zora: Zora Universal Minter (Legacy)
 Contract Creation0 ETH
254099762025-01-23 5:14:59367 days ago1737609299
Zora: Zora Universal Minter (Legacy)
0.002331 ETH
254099762025-01-23 5:14:59367 days ago1737609299
Zora: Zora Universal Minter (Legacy)
 Contract Creation0 ETH
253948482025-01-22 20:50:43368 days ago1737579043
Zora: Zora Universal Minter (Legacy)
0.001554 ETH
253948482025-01-22 20:50:43368 days ago1737579043
Zora: Zora Universal Minter (Legacy)
 Contract Creation0 ETH
253750152025-01-22 9:49:37368 days ago1737539377
Zora: Zora Universal Minter (Legacy)
0.000777 ETH
253750152025-01-22 9:49:37368 days ago1737539377
Zora: Zora Universal Minter (Legacy)
 Contract Creation0 ETH
253223912025-01-21 4:35:29370 days ago1737434129
Zora: Zora Universal Minter (Legacy)
0.002331 ETH
253223912025-01-21 4:35:29370 days ago1737434129
Zora: Zora Universal Minter (Legacy)
 Contract Creation0 ETH
253076972025-01-20 20:25:41370 days ago1737404741
Zora: Zora Universal Minter (Legacy)
0.000777 ETH
253076972025-01-20 20:25:41370 days ago1737404741
Zora: Zora Universal Minter (Legacy)
 Contract Creation0 ETH
252906972025-01-20 10:59:01370 days ago1737370741
Zora: Zora Universal Minter (Legacy)
0.002331 ETH
252906972025-01-20 10:59:01370 days ago1737370741
Zora: Zora Universal Minter (Legacy)
 Contract Creation0 ETH
252619872025-01-19 19:02:01371 days ago1737313321
Zora: Zora Universal Minter (Legacy)
0.001554 ETH
252619872025-01-19 19:02:01371 days ago1737313321
Zora: Zora Universal Minter (Legacy)
 Contract Creation0 ETH
251533152025-01-17 6:39:37373 days ago1737095977
Zora: Zora Universal Minter (Legacy)
0.002331 ETH
251500692025-01-17 4:51:25374 days ago1737089485
Zora: Zora Universal Minter (Legacy)
0.002331 ETH
250820972025-01-15 15:05:41375 days ago1736953541
Zora: Zora Universal Minter (Legacy)
0.001554 ETH
250820972025-01-15 15:05:41375 days ago1736953541
Zora: Zora Universal Minter (Legacy)
 Contract Creation0 ETH
250310352025-01-14 10:43:37376 days ago1736851417
Zora: Zora Universal Minter (Legacy)
0.000777 ETH
249529222025-01-12 15:19:51378 days ago1736695191
Zora: Zora Universal Minter (Legacy)
0.002331 ETH
249529222025-01-12 15:19:51378 days ago1736695191
Zora: Zora Universal Minter (Legacy)
 Contract Creation0 ETH
249450252025-01-12 10:56:37378 days ago1736679397
Zora: Zora Universal Minter (Legacy)
0.002553 ETH
248798662025-01-10 22:44:39380 days ago1736549079
Zora: Zora Universal Minter (Legacy)
0.002331 ETH
View All Internal Transactions

Cross-Chain Transactions
Loading...
Loading

Contract Source Code Verified (Exact Match)

Contract Name:
ZoraUniversalMinter

Compiler Version
v0.8.19+commit.7dd6d404

Optimization Enabled:
Yes with 50000 runs

Other Settings:
default evmVersion
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.18;
import {IZoraUniversalMinter} from "./IZoraUniversalMinter.sol";
import {IMinterAgent} from "./IMinterAgent.sol";
import {Clones} from "@openzeppelin/contracts/proxy/Clones.sol";
import {IERC1155} from "@openzeppelin/contracts/token/ERC1155/IERC1155.sol";
import {IERC721} from "@openzeppelin/contracts/token/ERC721/IERC721.sol";
import {IERC1155Receiver} from "@openzeppelin/contracts/token/ERC1155/IERC1155Receiver.sol";
import {IERC721Receiver} from "@openzeppelin/contracts/token/ERC721/IERC721Receiver.sol";

/*


             ░░░░░░░░░░░░░░              
        ░░▒▒░░░░░░░░░░░░░░░░░░░░        
      ░░▒▒▒▒░░░░░░░░░░░░░░░░░░░░░░      
    ░░▒▒▒▒░░░░░░░░░░░░░░    ░░░░░░░░    
   ░▓▓▒▒▒▒░░░░░░░░░░░░        ░░░░░░░    
  ░▓▓▓▒▒▒▒░░░░░░░░░░░░        ░░░░░░░░  
  ░▓▓▓▒▒▒▒░░░░░░░░░░░░░░    ░░░░░░░░░░  
  ░▓▓▓▒▒▒▒▒▒░░░░░░░░░░░░░░░░░░░░░░░░░░░  
  ░▓▓▓▓▓▒▒▒▒░░░░░░░░░░░░░░░░░░░░░░░░░░  
   ░▓▓▓▓▒▒▒▒▒▒░░░░░░░░░░░░░░░░░░░░░░░  
    ░░▓▓▓▓▒▒▒▒▒▒░░░░░░░░░░░░░░░░░░░░    
    ░░▓▓▓▓▓▓▒▒▒▒▒▒▒▒░░░░░░░░░▒▒▒▒▒░░    
      ░░▓▓▓▓▓▓▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒░░      
          ░░▓▓▓▓▓▓▓▓▓▓▓▓▒▒░░░          

               OURS TRULY,

*/

/// @title Zora Universal Minter.
/// @notice Mints ERC721 or ERC1155 tokens on behalf of an account on any standard ER721 or ERC1155 contract. Optionally collects fees for Zora and rewards for a finder.
/// @author @tbtstl / @oveddan
contract ZoraUniversalMinter is IZoraUniversalMinter {
    /// @dev Default fee zora collects per token minted
    uint256 constant ZORA_FEE_PER_TOKEN = 0.000222 ether;
    /// @dev Default reward finder collects per token minted
    uint256 constant FINDER_REWARD_PER_TOKEN = 0.000555 ether;
    /// @dev default fee zora collects per token minted when no finder is specified
    uint256 constant ZORA_FEE_PER_TOKEN_WHEN_NO_FINDER = ZORA_FEE_PER_TOKEN + FINDER_REWARD_PER_TOKEN;
    /// @dev Rewards allocated to addresses that can be withdran from later
    mapping(address => uint256) rewardAllocations;
    /// @dev How much has been withdrawn so far by each address
    mapping(address => uint256) withdrawn;

    /// @dev The address of the Protocol's fee recipient
    address public immutable zoraFeeRecipient;
    /// @dev The address of the minter agent implementation, which is cloned for each EOA
    address public immutable agentImpl;

    constructor(address _minterAgentImpl, address _zoraFeeRecipient) {
        zoraFeeRecipient = _zoraFeeRecipient;
        agentImpl = _minterAgentImpl;
    }

    /// Executes mint calls on a series of target ERC721 or ERC1155 contracts, then transfers the minted tokens to the calling account.
    /// Adds a mint fee to the msg.value sent to the contract.
    /// Assumes that the mint function for each target follows the ERC721 or ERC1155 standard for minting - which is that
    /// the a safe transfer is used to transfer tokens - and the corresponding safeTransfer callbacks on the receiving account are called AFTER minting the tokens.
    /// The value sent must include all the values to send to the minting contracts and the fees + reward amount.
    /// This can be determined by calling `fee`, and getting the requiredToSend parameter.
    /// @param _targets Addresses of contracts to call
    /// @param _calldatas Data to pass to the mint functions for each target
    /// @param _values Value to send to each target - must match the value required by the target's mint function.
    /// @param _tokensMinted Total number of tokens minted across all targets, used to calculate fees
    /// @param _finder Optional - address of finder that will receive a portion of the fees
    function mintBatch(
        address[] calldata _targets,
        bytes[] calldata _calldatas,
        uint256[] calldata _values,
        uint256 _tokensMinted,
        address _finder
    ) external payable {
        uint256 totalValue = _uncheckedSum(_values);

        // calculate fees
        (uint256 zoraFee, uint256 finderReward, uint256 totalWithFees) = fee(totalValue, _tokensMinted, _finder);

        emit MintedBatch(_targets, _values, _tokensMinted, _finder, msg.sender, totalWithFees, zoraFee, finderReward);

        // allocate the fees to the mint fee receiver and finder, which can be withdrawn against later.  Validates
        // that proper value has been sent.
        _allocateFeesAndRewards(zoraFee, finderReward, totalWithFees, _finder);

        _mintAll(msg.sender, totalValue, _targets, _calldatas, _values);
    }

    /// @notice Executes mint calls on a series of target ERC721 or ERC1155 contracts, then transfers the minted tokens to the calling account.
    /// Does not add a mint feee
    /// Assumes that the mint function for each target follows the ERC721 or ERC1155 standard for minting - which is that
    /// the a safe transfer is used to transfer tokens - and the corresponding safeTransfer callbacks on the receiving account are called AFTER minting the tokens.
    /// The value sent must equal the total values to send to the minting contracts.
    /// @param _targets Addresses of contracts to call
    /// @param _calldatas Data to pass to the mint functions for each target
    /// @param _values Value to send to each target - must match the value required by the target's mint function.
    function mintBatchWithoutFees(address[] calldata _targets, bytes[] calldata _calldatas, uint256[] calldata _values) external payable {
        uint256 totalValue = _uncheckedSum(_values);

        // make sure that enough value was sent to cover the fees + values needed to be sent to the contracts
        // Cannot realistically overflow
        if (totalValue != msg.value) {
            revert INSUFFICIENT_VALUE(totalValue, msg.value);
        }

        emit MintedBatch(_targets, _values, 0, address(0), msg.sender, 0, 0, 0);

        _mintAll(msg.sender, totalValue, _targets, _calldatas, _values);
    }

    /// Execute a mint call on a series a target ERC721 or ERC1155 contracts, then transfers the minted tokens to the calling account.
    /// Adds a mint fee to the msg.value sent to the contract.
    /// Assumes that the mint function for each target follows the ERC721 or ERC1155 standard for minting - which is that
    /// the a safe transfer is used to transfer tokens - and the corresponding safeTransfer callbacks on the receiving account are called AFTER minting the tokens.
    /// The value sent must include the value to send to the minting contract and the universal minter fee + finder reward amount.
    /// This can be determined by calling `fee`, and getting the requiredToSend parameter.
    /// @param _target Addresses of contract to call
    /// @param _calldata Data to pass to the mint function for the target
    /// @param _value Value to send to the target - must match the value required by the target's mint function.
    /// @param _tokensMinted Total number of tokens minted across all targets, used to calculate fees
    /// @param _finder Optional - address of finder that will receive a portion of the fees
    function mint(address _target, bytes calldata _calldata, uint256 _value, uint256 _tokensMinted, address _finder) external payable {
        IMinterAgent agent = _getOrCloneAgent(msg.sender);

        (uint256 zoraFee, uint256 finderReward, uint256 totalWithFees) = fee(_value, _tokensMinted, _finder);

        emit Minted(_target, _value, _tokensMinted, _finder, msg.sender, totalWithFees, zoraFee, finderReward);

        // allocate the fees to the mint fee receiver and rewards to the finder, which can be withdrawn against later
        _allocateFeesAndRewards(zoraFee, finderReward, totalWithFees, _finder);

        // mint the fokens for each target contract.  These will be transferred to the msg.caller.
        _mint(agent, _target, _calldata, _value);
    }

    /// Withdraws any fees that have been allocated to the caller's address to a specified address.
    /// @param to The address to withdraw to
    function withdraw(address to) external {
        uint256 feeAllocation = rewardAllocations[msg.sender];

        uint256 withdrawnSoFar = withdrawn[msg.sender];

        if (feeAllocation <= withdrawnSoFar) {
            revert NOTHING_TO_WITHDRAW();
        }

        uint256 toWithdraw = feeAllocation - withdrawnSoFar;

        withdrawn[msg.sender] = withdrawnSoFar + toWithdraw;

        _safeSend(toWithdraw, to);
    }

    /// Calculates the fees that will be collected for a given mint, based on the value and tokens minted.
    /// @param _mintValue Total value of the mint
    /// @param _tokensMinted Quantity of tokens minted
    /// @param _finderAddress Address of the finder, if any.  If the finder is the zora fee recipient, then the finder fee is 0.
    /// @return zoraFee The fee that will be allocated to the zora fee recipient
    /// @return finderReward The reward that will be allcoated to the finder
    /// @return requiredToSend The total value that must be sent to the contract, including fees
    function fee(
        uint256 _mintValue,
        uint256 _tokensMinted,
        address _finderAddress
    ) public view returns (uint256 zoraFee, uint256 finderReward, uint256 requiredToSend) {
        if (_finderAddress == address(0) || _finderAddress == zoraFeeRecipient) {
            unchecked {
                zoraFee = ZORA_FEE_PER_TOKEN_WHEN_NO_FINDER * _tokensMinted;
                requiredToSend = zoraFee + _mintValue;
            }
        } else {
            unchecked {
                zoraFee = ZORA_FEE_PER_TOKEN * _tokensMinted;
                finderReward = FINDER_REWARD_PER_TOKEN * _tokensMinted;
                requiredToSend = zoraFee + finderReward + _mintValue;
            }
        }
    }

    /// Has a minter agent execute a transaction on behalf of the calling acccount.  The minter
    /// agent's address will be the same for the calling account as the address that was
    /// used to mint the tokens.  Can be used to recover tokens that may get accidentally locked in
    /// the minter agent's contract address.
    /// @param _target Address of contract to call
    /// @param _calldata Calldata for arguments to call.
    function forwardCallFromAgent(address _target, bytes calldata _calldata, uint256 _additionalValue) external payable {
        IMinterAgent agent = _getOrCloneAgent(msg.sender);

        (bool success, bytes memory result) = agent.forwardCall{value: msg.value}(_target, _calldata, msg.value + _additionalValue);

        if (!success) {
            _handleForwardCallFail(result);
        }
    }

    /// @dev Unwraps a forward call failure to return the original error.  Useful
    /// for debugging failed minting calls.
    function _handleForwardCallFail(bytes memory result) private pure {
        // source: https://yos.io/2022/07/16/bubbling-up-errors-in-solidity/#:~:text=An%20inline%20assembly%20block%20is,object%20is%20returned%20in%20result%20.
        // if no error message, revert with generic error
        if (result.length == 0) {
            revert FORWARD_CALL_FAILED();
        }
        assembly {
            // We use Yul's revert() to bubble up errors from the target contract.
            revert(add(32, result), mload(result))
        }
    }

    /// Gets the deterministic address of the MinterAgent clone that gets created for a given recipient.
    /// @param recipient The account that the agent is cloned on behalf of.
    function agentAddress(address recipient) public view returns (address) {
        return Clones.predictDeterministicAddress(agentImpl, _agentSalt(recipient));
    }

    /// Creates a clone of an agent contract, which mints tokens on behalf of the msg.sender.  If a clone has already been created
    /// for that account, returns it.  Clone address is deterministic based on the recipient's address.
    /// Sends all tokens received as a result of minting to the recipient.
    /// @param callingAccount the account to receive tokens minted by this cloned agent.
    /// @return agent the created agent
    function _getOrCloneAgent(address callingAccount) private returns (IMinterAgent agent) {
        address targetAddress = agentAddress(callingAccount);
        if (targetAddress.code.length > 0) {
            return IMinterAgent(targetAddress);
        }

        address cloneAddress = Clones.cloneDeterministic(agentImpl, _agentSalt(callingAccount));
        agent = IMinterAgent(cloneAddress);
        agent.initialize(address(this), callingAccount);
    }

    /// @dev Unique salt generated from an address for a callingAccount that a MinterAgent is create for.
    function _agentSalt(address callingAccount) private pure returns (bytes32) {
        return bytes32(uint256(uint160(callingAccount)) << 96);
    }

    function _mint(IMinterAgent _agent, address _target, bytes calldata _calldata, uint256 _value) private {
        (bool success, bytes memory result) = _agent.forwardCall{value: _value}(_target, _calldata, _value);

        if (!success) {
            _handleForwardCallFail(result);
        }
    }

    /// @dev Iterates through minting calls and calls them each via a IMinterAgent.
    function _mintAll(
        address callingAccount,
        uint256 totalValueToSend,
        address[] calldata _targets,
        bytes[] calldata _calldatas,
        uint256[] calldata _values
    ) private {
        IMinterAgent _agent = _getOrCloneAgent(callingAccount);

        (bool success, bytes memory result) = _agent.forwardCallBatch{value: totalValueToSend}(_targets, _calldatas, _values);

        if (!success) {
            _handleForwardCallFail(result);
        }
    }

    /// Allocates fees and rewards which can be withdrawn against later.
    /// Validates that the proper value has been sent by the calling account.
    function _allocateFeesAndRewards(uint256 zoraFee, uint256 finderReward, uint256 requiredToBeSent, address finder) private {
        // make sure that the correct amount was sent
        if (requiredToBeSent != msg.value) {
            revert INSUFFICIENT_VALUE(requiredToBeSent, msg.value);
        }

        rewardAllocations[zoraFeeRecipient] += zoraFee;
        if (finderReward > 0) {
            rewardAllocations[finder] += finderReward;
        }
    }

    function _safeSend(uint256 amount, address to) private {
        (bool success, ) = to.call{value: amount}("");

        if (!success) revert FAILED_TO_SEND();
    }

    function _uncheckedSum(uint256[] calldata _values) private pure returns (uint256 totalValue) {
        unchecked {
            for (uint256 i = 0; i < _values.length; i++) {
                totalValue += _values[i];
            }
        }
    }
}

// SPDX-License-Identifier: MIT
pragma solidity ^0.8.18;

/*


             ░░░░░░░░░░░░░░              
        ░░▒▒░░░░░░░░░░░░░░░░░░░░        
      ░░▒▒▒▒░░░░░░░░░░░░░░░░░░░░░░      
    ░░▒▒▒▒░░░░░░░░░░░░░░    ░░░░░░░░    
   ░▓▓▒▒▒▒░░░░░░░░░░░░        ░░░░░░░    
  ░▓▓▓▒▒▒▒░░░░░░░░░░░░        ░░░░░░░░  
  ░▓▓▓▒▒▒▒░░░░░░░░░░░░░░    ░░░░░░░░░░  
  ░▓▓▓▒▒▒▒▒▒░░░░░░░░░░░░░░░░░░░░░░░░░░░  
  ░▓▓▓▓▓▒▒▒▒░░░░░░░░░░░░░░░░░░░░░░░░░░  
   ░▓▓▓▓▒▒▒▒▒▒░░░░░░░░░░░░░░░░░░░░░░░  
    ░░▓▓▓▓▒▒▒▒▒▒░░░░░░░░░░░░░░░░░░░░    
    ░░▓▓▓▓▓▓▒▒▒▒▒▒▒▒░░░░░░░░░▒▒▒▒▒░░    
      ░░▓▓▓▓▓▓▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒░░      
          ░░▓▓▓▓▓▓▓▓▓▓▓▓▒▒░░░          

               OURS TRULY,

*/

/// @title Zora Universal Minter
/// @notice Mints ERC721 or ERC1155 tokens on behalf of an account on any standard ER721 or ERC1155 contract. Optionally collects fees for Zora and rewards for a finder.
/// @author @tbtstl / @oveddan
interface IZoraUniversalMinter {
    error MINT_EXECUTION_FAILED();
    error NOTHING_TO_WITHDRAW();
    error FORWARD_CALL_FAILED();
    error FAILED_TO_SEND();
    error INSUFFICIENT_VALUE(uint256 expectedValue, uint256 actualValue);

    // these are errors from Zora 1155Contracts, including them here will have them included in the abi, and allow them to get unwrapped/parsed by wagmi and can be decoded by viem.sh:
    error UserExceedsMintLimit(address user, uint256 limit, uint256 requestedAmount);
    error WrongValueSent();
    error SaleEnded();
    error SaleHasNotStarted();

    event MintedBatch(
        address[] indexed targets,
        uint256[] values,
        uint256 tokensMinted,
        address finder,
        address indexed minter,
        uint256 indexed totalWithFees,
        uint256 zoraFee,
        uint256 finderFee
    );

    event Minted(
        address indexed target,
        uint256 value,
        uint256 tokensMinted,
        address finder,
        address indexed minter,
        uint256 indexed totalWithFees,
        uint256 zoraFee,
        uint256 finderFee
    );

    enum MintableTypes {
        NONE,
        ERC721,
        ERC1155,
        ERC1155_BATCH
    }

    /// Executes mint calls on a series of target ERC721 or ERC1155 contracts, then transfers the minted tokens to the calling account.
    /// Adds a mint fee to the msg.value sent to the contract.
    /// Assumes that the mint function for each target follows the ERC721 or ERC1155 standard for minting - which is that
    /// the a safe transfer is used to transfer tokens - and the corresponding safeTransfer callbacks on the receiving account are called AFTER minting the tokens.
    /// The value sent must include all the values to send to the minting contracts and the fees + reward amount.
    /// This can be determined by calling `fee`, and getting the requiredToSend parameter.
    /// @param _targets Addresses of contracts to call
    /// @param _calldatas Data to pass to the mint functions for each target
    /// @param _values Value to send to each target - must match the value required by the target's mint function.
    /// @param _tokensMinted Total number of tokens minted across all targets, used to calculate fees
    /// @param _finder Optional - address of finder that will receive a portion of the fees
    function mintBatch(
        address[] calldata _targets,
        bytes[] calldata _calldatas,
        uint256[] calldata _values,
        uint256 _tokensMinted,
        address _finder
    ) external payable;

    /// @notice Executes mint calls on a series of target ERC721 or ERC1155 contracts, then transfers the minted tokens to the calling account.
    /// Does not add a mint feee
    /// Assumes that the mint function for each target follows the ERC721 or ERC1155 standard for minting - which is that
    /// the a safe transfer is used to transfer tokens - and the corresponding safeTransfer callbacks on the receiving account are called AFTER minting the tokens.
    /// The value sent must equal the total values to send to the minting contracts.
    /// @param _targets Addresses of contracts to call
    /// @param _calldatas Data to pass to the mint functions for each target
    /// @param _values Value to send to each target - must match the value required by the target's mint function.
    function mintBatchWithoutFees(address[] calldata _targets, bytes[] calldata _calldatas, uint256[] calldata _values) external payable;

    /// Execute a mint call on a series a target ERC721 or ERC1155 contracts, then transfers the minted tokens to the calling account.
    /// Adds a mint fee to the msg.value sent to the contract.
    /// Assumes that the mint function for each target follows the ERC721 or ERC1155 standard for minting - which is that
    /// the a safe transfer is used to transfer tokens - and the corresponding safeTransfer callbacks on the receiving account are called AFTER minting the tokens.
    /// The value sent must include the value to send to the minting contract and the universal minter fee + finder reward amount.
    /// This can be determined by calling `fee`, and getting the requiredToSend parameter.
    /// @param _target Addresses of contract to call
    /// @param _calldata Data to pass to the mint function for the target
    /// @param _value Value to send to the target - must match the value required by the target's mint function.
    /// @param _tokensMinted Total number of tokens minted across all targets, used to calculate fees
    /// @param _finder Optional - address of finder that will receive a portion of the fees
    function mint(address _target, bytes calldata _calldata, uint256 _value, uint256 _tokensMinted, address _finder) external payable;

    /// Has a minter agent execute a transaction on behalf of the calling acccount.  The minter
    /// agent's address will be the same for the calling account as the address that was
    /// used to mint the tokens.  Can be used to recover tokens that may get accidentally locked in
    /// the minter agent's contract address.
    /// @param _target Address of contract to call
    /// @param _calldata Calldata for arguments to call.
    function forwardCallFromAgent(address _target, bytes calldata _calldata, uint256 _additionalValue) external payable;

    /// Withdraws any fees or rewards that have been allocated to the caller's address.  Fees can be withdrawn to any other specified address.
    /// @param to The address to withdraw to
    function withdraw(address to) external;

    /// Calculates the fees that will be collected for a given mint, based on the value and tokens minted.
    /// @param _mintValue Total value of the mint that is to be sent to external minting contracts
    /// @param _tokensMinted Quantity of tokens minted
    /// @param _finderAddress Address of the finder, if any.  If the finder is the zora fee recipient, then the finder fee is 0.
    /// @return zoraFee The fee that will be sent to the zora fee recipient
    /// @return finderReward The fee that will be sent to the finder
    /// @return requiredToSend The total value that must be sent to the contract, including fees
    function fee(
        uint256 _mintValue,
        uint256 _tokensMinted,
        address _finderAddress
    ) external view returns (uint256 zoraFee, uint256 finderReward, uint256 requiredToSend);

    /// Gets the deterministic address of the MinterAgent clone that gets created for a given recipient.
    /// @param recipient The account that the agent is cloned on behalf of.
    function agentAddress(address recipient) external view returns (address);
}

// SPDX-License-Identifier: MIT
pragma solidity ^0.8.18;

interface IMinterAgent {
    error ALREADY_INITIALIZED();
    error ONLY_OWNER();
    error ARRAY_LENGTH_MISMATCH();

    function initialize(address _owner, address _receiver) external;

    function forwardCall(address _target, bytes calldata _cd, uint256 _value) external payable returns (bool success, bytes memory data);

    function forwardCallBatch(
        address[] calldata _targets,
        bytes[] calldata _calldatas,
        uint256[] calldata _values
    ) external payable returns (bool success, bytes memory data);
}

// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts (last updated v4.8.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 {
            // Cleans the upper 96 bits of the `implementation` word, then packs the first 3 bytes
            // of the `implementation` address with the bytecode before the address.
            mstore(0x00, or(shr(0xe8, shl(0x60, implementation)), 0x3d602d80600a3d3981f3363d3d373d3d3d363d73000000))
            // Packs the remaining 17 bytes of `implementation` with the bytecode after the address.
            mstore(0x20, or(shl(0x78, implementation), 0x5af43d82803e903d91602b57fd5bf3))
            instance := create(0, 0x09, 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 {
            // Cleans the upper 96 bits of the `implementation` word, then packs the first 3 bytes
            // of the `implementation` address with the bytecode before the address.
            mstore(0x00, or(shr(0xe8, shl(0x60, implementation)), 0x3d602d80600a3d3981f3363d3d373d3d3d363d73000000))
            // Packs the remaining 17 bytes of `implementation` with the bytecode after the address.
            mstore(0x20, or(shl(0x78, implementation), 0x5af43d82803e903d91602b57fd5bf3))
            instance := create2(0, 0x09, 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(add(ptr, 0x38), deployer)
            mstore(add(ptr, 0x24), 0x5af43d82803e903d91602b57fd5bf3ff)
            mstore(add(ptr, 0x14), implementation)
            mstore(ptr, 0x3d602d80600a3d3981f3363d3d373d3d3d363d73)
            mstore(add(ptr, 0x58), salt)
            mstore(add(ptr, 0x78), keccak256(add(ptr, 0x0c), 0x37))
            predicted := keccak256(add(ptr, 0x43), 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));
    }
}

// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts (last updated v4.7.0) (token/ERC1155/IERC1155.sol)

pragma solidity ^0.8.0;

import "../../utils/introspection/IERC165.sol";

/**
 * @dev Required interface of an ERC1155 compliant contract, as defined in the
 * https://eips.ethereum.org/EIPS/eip-1155[EIP].
 *
 * _Available since v3.1._
 */
interface IERC1155 is IERC165 {
    /**
     * @dev Emitted when `value` tokens of token type `id` are transferred from `from` to `to` by `operator`.
     */
    event TransferSingle(address indexed operator, address indexed from, address indexed to, uint256 id, uint256 value);

    /**
     * @dev Equivalent to multiple {TransferSingle} events, where `operator`, `from` and `to` are the same for all
     * transfers.
     */
    event TransferBatch(
        address indexed operator,
        address indexed from,
        address indexed to,
        uint256[] ids,
        uint256[] values
    );

    /**
     * @dev Emitted when `account` grants or revokes permission to `operator` to transfer their tokens, according to
     * `approved`.
     */
    event ApprovalForAll(address indexed account, address indexed operator, bool approved);

    /**
     * @dev Emitted when the URI for token type `id` changes to `value`, if it is a non-programmatic URI.
     *
     * If an {URI} event was emitted for `id`, the standard
     * https://eips.ethereum.org/EIPS/eip-1155#metadata-extensions[guarantees] that `value` will equal the value
     * returned by {IERC1155MetadataURI-uri}.
     */
    event URI(string value, uint256 indexed id);

    /**
     * @dev Returns the amount of tokens of token type `id` owned by `account`.
     *
     * Requirements:
     *
     * - `account` cannot be the zero address.
     */
    function balanceOf(address account, uint256 id) external view returns (uint256);

    /**
     * @dev xref:ROOT:erc1155.adoc#batch-operations[Batched] version of {balanceOf}.
     *
     * Requirements:
     *
     * - `accounts` and `ids` must have the same length.
     */
    function balanceOfBatch(address[] calldata accounts, uint256[] calldata ids)
        external
        view
        returns (uint256[] memory);

    /**
     * @dev Grants or revokes permission to `operator` to transfer the caller's tokens, according to `approved`,
     *
     * Emits an {ApprovalForAll} event.
     *
     * Requirements:
     *
     * - `operator` cannot be the caller.
     */
    function setApprovalForAll(address operator, bool approved) external;

    /**
     * @dev Returns true if `operator` is approved to transfer ``account``'s tokens.
     *
     * See {setApprovalForAll}.
     */
    function isApprovedForAll(address account, address operator) external view returns (bool);

    /**
     * @dev Transfers `amount` tokens of token type `id` from `from` to `to`.
     *
     * Emits a {TransferSingle} event.
     *
     * Requirements:
     *
     * - `to` cannot be the zero address.
     * - If the caller is not `from`, it must have been approved to spend ``from``'s tokens via {setApprovalForAll}.
     * - `from` must have a balance of tokens of type `id` of at least `amount`.
     * - If `to` refers to a smart contract, it must implement {IERC1155Receiver-onERC1155Received} and return the
     * acceptance magic value.
     */
    function safeTransferFrom(
        address from,
        address to,
        uint256 id,
        uint256 amount,
        bytes calldata data
    ) external;

    /**
     * @dev xref:ROOT:erc1155.adoc#batch-operations[Batched] version of {safeTransferFrom}.
     *
     * Emits a {TransferBatch} event.
     *
     * Requirements:
     *
     * - `ids` and `amounts` must have the same length.
     * - If `to` refers to a smart contract, it must implement {IERC1155Receiver-onERC1155BatchReceived} and return the
     * acceptance magic value.
     */
    function safeBatchTransferFrom(
        address from,
        address to,
        uint256[] calldata ids,
        uint256[] calldata amounts,
        bytes calldata data
    ) external;
}

// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts (last updated v4.8.0) (token/ERC721/IERC721.sol)

pragma solidity ^0.8.0;

import "../../utils/introspection/IERC165.sol";

/**
 * @dev Required interface of an ERC721 compliant contract.
 */
interface IERC721 is IERC165 {
    /**
     * @dev Emitted when `tokenId` token is transferred from `from` to `to`.
     */
    event Transfer(address indexed from, address indexed to, uint256 indexed tokenId);

    /**
     * @dev Emitted when `owner` enables `approved` to manage the `tokenId` token.
     */
    event Approval(address indexed owner, address indexed approved, uint256 indexed tokenId);

    /**
     * @dev Emitted when `owner` enables or disables (`approved`) `operator` to manage all of its assets.
     */
    event ApprovalForAll(address indexed owner, address indexed operator, bool approved);

    /**
     * @dev Returns the number of tokens in ``owner``'s account.
     */
    function balanceOf(address owner) external view returns (uint256 balance);

    /**
     * @dev Returns the owner of the `tokenId` token.
     *
     * Requirements:
     *
     * - `tokenId` must exist.
     */
    function ownerOf(uint256 tokenId) external view returns (address owner);

    /**
     * @dev Safely transfers `tokenId` token from `from` to `to`.
     *
     * Requirements:
     *
     * - `from` cannot be the zero address.
     * - `to` cannot be the zero address.
     * - `tokenId` token must exist and be owned by `from`.
     * - If the caller is not `from`, it must be approved to move this token by either {approve} or {setApprovalForAll}.
     * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer.
     *
     * Emits a {Transfer} event.
     */
    function safeTransferFrom(
        address from,
        address to,
        uint256 tokenId,
        bytes calldata data
    ) external;

    /**
     * @dev Safely transfers `tokenId` token from `from` to `to`, checking first that contract recipients
     * are aware of the ERC721 protocol to prevent tokens from being forever locked.
     *
     * Requirements:
     *
     * - `from` cannot be the zero address.
     * - `to` cannot be the zero address.
     * - `tokenId` token must exist and be owned by `from`.
     * - If the caller is not `from`, it must have been allowed to move this token by either {approve} or {setApprovalForAll}.
     * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer.
     *
     * Emits a {Transfer} event.
     */
    function safeTransferFrom(
        address from,
        address to,
        uint256 tokenId
    ) external;

    /**
     * @dev Transfers `tokenId` token from `from` to `to`.
     *
     * WARNING: Note that the caller is responsible to confirm that the recipient is capable of receiving ERC721
     * or else they may be permanently lost. Usage of {safeTransferFrom} prevents loss, though the caller must
     * understand this adds an external call which potentially creates a reentrancy vulnerability.
     *
     * Requirements:
     *
     * - `from` cannot be the zero address.
     * - `to` cannot be the zero address.
     * - `tokenId` token must be owned by `from`.
     * - If the caller is not `from`, it must be approved to move this token by either {approve} or {setApprovalForAll}.
     *
     * Emits a {Transfer} event.
     */
    function transferFrom(
        address from,
        address to,
        uint256 tokenId
    ) external;

    /**
     * @dev Gives permission to `to` to transfer `tokenId` token to another account.
     * The approval is cleared when the token is transferred.
     *
     * Only a single account can be approved at a time, so approving the zero address clears previous approvals.
     *
     * Requirements:
     *
     * - The caller must own the token or be an approved operator.
     * - `tokenId` must exist.
     *
     * Emits an {Approval} event.
     */
    function approve(address to, uint256 tokenId) external;

    /**
     * @dev Approve or remove `operator` as an operator for the caller.
     * Operators can call {transferFrom} or {safeTransferFrom} for any token owned by the caller.
     *
     * Requirements:
     *
     * - The `operator` cannot be the caller.
     *
     * Emits an {ApprovalForAll} event.
     */
    function setApprovalForAll(address operator, bool _approved) external;

    /**
     * @dev Returns the account approved for `tokenId` token.
     *
     * Requirements:
     *
     * - `tokenId` must exist.
     */
    function getApproved(uint256 tokenId) external view returns (address operator);

    /**
     * @dev Returns if the `operator` is allowed to manage all of the assets of `owner`.
     *
     * See {setApprovalForAll}
     */
    function isApprovedForAll(address owner, address operator) external view returns (bool);
}

// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts (last updated v4.5.0) (token/ERC1155/IERC1155Receiver.sol)

pragma solidity ^0.8.0;

import "../../utils/introspection/IERC165.sol";

/**
 * @dev _Available since v3.1._
 */
interface IERC1155Receiver is IERC165 {
    /**
     * @dev Handles the receipt of a single ERC1155 token type. This function is
     * called at the end of a `safeTransferFrom` after the balance has been updated.
     *
     * NOTE: To accept the transfer, this must return
     * `bytes4(keccak256("onERC1155Received(address,address,uint256,uint256,bytes)"))`
     * (i.e. 0xf23a6e61, or its own function selector).
     *
     * @param operator The address which initiated the transfer (i.e. msg.sender)
     * @param from The address which previously owned the token
     * @param id The ID of the token being transferred
     * @param value The amount of tokens being transferred
     * @param data Additional data with no specified format
     * @return `bytes4(keccak256("onERC1155Received(address,address,uint256,uint256,bytes)"))` if transfer is allowed
     */
    function onERC1155Received(
        address operator,
        address from,
        uint256 id,
        uint256 value,
        bytes calldata data
    ) external returns (bytes4);

    /**
     * @dev Handles the receipt of a multiple ERC1155 token types. This function
     * is called at the end of a `safeBatchTransferFrom` after the balances have
     * been updated.
     *
     * NOTE: To accept the transfer(s), this must return
     * `bytes4(keccak256("onERC1155BatchReceived(address,address,uint256[],uint256[],bytes)"))`
     * (i.e. 0xbc197c81, or its own function selector).
     *
     * @param operator The address which initiated the batch transfer (i.e. msg.sender)
     * @param from The address which previously owned the token
     * @param ids An array containing ids of each token being transferred (order and length must match values array)
     * @param values An array containing amounts of each token being transferred (order and length must match ids array)
     * @param data Additional data with no specified format
     * @return `bytes4(keccak256("onERC1155BatchReceived(address,address,uint256[],uint256[],bytes)"))` if transfer is allowed
     */
    function onERC1155BatchReceived(
        address operator,
        address from,
        uint256[] calldata ids,
        uint256[] calldata values,
        bytes calldata data
    ) external returns (bytes4);
}

// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts (last updated v4.6.0) (token/ERC721/IERC721Receiver.sol)

pragma solidity ^0.8.0;

/**
 * @title ERC721 token receiver interface
 * @dev Interface for any contract that wants to support safeTransfers
 * from ERC721 asset contracts.
 */
interface IERC721Receiver {
    /**
     * @dev Whenever an {IERC721} `tokenId` token is transferred to this contract via {IERC721-safeTransferFrom}
     * by `operator` from `from`, this function is called.
     *
     * It must return its Solidity selector to confirm the token transfer.
     * If any other value is returned or the interface is not implemented by the recipient, the transfer will be reverted.
     *
     * The selector can be obtained in Solidity with `IERC721Receiver.onERC721Received.selector`.
     */
    function onERC721Received(
        address operator,
        address from,
        uint256 tokenId,
        bytes calldata data
    ) external returns (bytes4);
}

// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts v4.4.1 (utils/introspection/IERC165.sol)

pragma solidity ^0.8.0;

/**
 * @dev Interface of the ERC165 standard, as defined in the
 * https://eips.ethereum.org/EIPS/eip-165[EIP].
 *
 * Implementers can declare support of contract interfaces, which can then be
 * queried by others ({ERC165Checker}).
 *
 * For an implementation, see {ERC165}.
 */
interface IERC165 {
    /**
     * @dev Returns true if this contract implements the interface defined by
     * `interfaceId`. See the corresponding
     * https://eips.ethereum.org/EIPS/eip-165#how-interfaces-are-identified[EIP section]
     * to learn more about how these ids are created.
     *
     * This function call must use less than 30 000 gas.
     */
    function supportsInterface(bytes4 interfaceId) external view returns (bool);
}

Settings
{
  "remappings": [
    "@openzeppelin/=node_modules/@openzeppelin/",
    "@openzeppelin/contracts/=node_modules/@openzeppelin/contracts/",
    "ds-test/=node_modules/ds-test/src/",
    "forge-std/=node_modules/forge-std/src/"
  ],
  "optimizer": {
    "enabled": true,
    "runs": 50000
  },
  "metadata": {
    "useLiteralContent": false,
    "bytecodeHash": "ipfs",
    "appendCBOR": true
  },
  "outputSelection": {
    "*": {
      "*": [
        "evm.bytecode",
        "evm.deployedBytecode",
        "devdoc",
        "userdoc",
        "metadata",
        "abi"
      ]
    }
  },
  "evmVersion": "paris",
  "viaIR": true,
  "libraries": {}
}

Contract Security Audit

Contract ABI

API
[{"inputs":[{"internalType":"address","name":"_minterAgentImpl","type":"address"},{"internalType":"address","name":"_zoraFeeRecipient","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"inputs":[],"name":"FAILED_TO_SEND","type":"error"},{"inputs":[],"name":"FORWARD_CALL_FAILED","type":"error"},{"inputs":[{"internalType":"uint256","name":"expectedValue","type":"uint256"},{"internalType":"uint256","name":"actualValue","type":"uint256"}],"name":"INSUFFICIENT_VALUE","type":"error"},{"inputs":[],"name":"MINT_EXECUTION_FAILED","type":"error"},{"inputs":[],"name":"NOTHING_TO_WITHDRAW","type":"error"},{"inputs":[],"name":"SaleEnded","type":"error"},{"inputs":[],"name":"SaleHasNotStarted","type":"error"},{"inputs":[{"internalType":"address","name":"user","type":"address"},{"internalType":"uint256","name":"limit","type":"uint256"},{"internalType":"uint256","name":"requestedAmount","type":"uint256"}],"name":"UserExceedsMintLimit","type":"error"},{"inputs":[],"name":"WrongValueSent","type":"error"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"target","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"tokensMinted","type":"uint256"},{"indexed":false,"internalType":"address","name":"finder","type":"address"},{"indexed":true,"internalType":"address","name":"minter","type":"address"},{"indexed":true,"internalType":"uint256","name":"totalWithFees","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"zoraFee","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"finderFee","type":"uint256"}],"name":"Minted","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address[]","name":"targets","type":"address[]"},{"indexed":false,"internalType":"uint256[]","name":"values","type":"uint256[]"},{"indexed":false,"internalType":"uint256","name":"tokensMinted","type":"uint256"},{"indexed":false,"internalType":"address","name":"finder","type":"address"},{"indexed":true,"internalType":"address","name":"minter","type":"address"},{"indexed":true,"internalType":"uint256","name":"totalWithFees","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"zoraFee","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"finderFee","type":"uint256"}],"name":"MintedBatch","type":"event"},{"inputs":[{"internalType":"address","name":"recipient","type":"address"}],"name":"agentAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"agentImpl","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_mintValue","type":"uint256"},{"internalType":"uint256","name":"_tokensMinted","type":"uint256"},{"internalType":"address","name":"_finderAddress","type":"address"}],"name":"fee","outputs":[{"internalType":"uint256","name":"zoraFee","type":"uint256"},{"internalType":"uint256","name":"finderReward","type":"uint256"},{"internalType":"uint256","name":"requiredToSend","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_target","type":"address"},{"internalType":"bytes","name":"_calldata","type":"bytes"},{"internalType":"uint256","name":"_additionalValue","type":"uint256"}],"name":"forwardCallFromAgent","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"address","name":"_target","type":"address"},{"internalType":"bytes","name":"_calldata","type":"bytes"},{"internalType":"uint256","name":"_value","type":"uint256"},{"internalType":"uint256","name":"_tokensMinted","type":"uint256"},{"internalType":"address","name":"_finder","type":"address"}],"name":"mint","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"address[]","name":"_targets","type":"address[]"},{"internalType":"bytes[]","name":"_calldatas","type":"bytes[]"},{"internalType":"uint256[]","name":"_values","type":"uint256[]"},{"internalType":"uint256","name":"_tokensMinted","type":"uint256"},{"internalType":"address","name":"_finder","type":"address"}],"name":"mintBatch","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"address[]","name":"_targets","type":"address[]"},{"internalType":"bytes[]","name":"_calldatas","type":"bytes[]"},{"internalType":"uint256[]","name":"_values","type":"uint256[]"}],"name":"mintBatchWithoutFees","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"}],"name":"withdraw","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"zoraFeeRecipient","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"}]

60c03461009c57601f61136c38819003918201601f19168301916001600160401b038311848410176100a157808492604094855283398101031261009c57610052602061004b836100b7565b92016100b7565b60805260a0526040516112a090816100cc823960805181818161074801528181610a9f015261113a015260a0518181816102df015281816108ea01528181610d220152610d800152f35b600080fd5b634e487b7160e01b600052604160045260246000fd5b51906001600160a01b038216820361009c5756fe6080604052600436101561001257600080fd5b6000803560e01c9081632013446e146100aa57508063302deb14146100a557806351cff8d9146100a05780637c1e20681461009b578063842210eb146100965780638f7c79a314610091578063d58b57691461008c578063e84d4420146100875763fdca70991461008257600080fd5b61090e565b61089f565b61076c565b6106fd565b610594565b610452565b610352565b61025b565b60607ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101be576100dc6101c1565b60243567ffffffffffffffff81116101ba576100fc90369060040161022d565b73ffffffffffffffffffffffffffffffffffffffff61011d93929333610cd5565b166044353401938434116101b5578593610166604051968795869485947fc0951d6b00000000000000000000000000000000000000000000000000000000865260048601610c57565b039134905af19081156101b0578290839261018b575b5015610186575080f35b610c9c565b90506101a991503d8084833e6101a18183610b11565b810190610b8c565b908361017c565b610c90565b610a13565b8280fd5b80fd5b6004359073ffffffffffffffffffffffffffffffffffffffff821682036101e457565b600080fd5b6084359073ffffffffffffffffffffffffffffffffffffffff821682036101e457565b359073ffffffffffffffffffffffffffffffffffffffff821682036101e457565b9181601f840112156101e45782359167ffffffffffffffff83116101e457602083818601950101116101e457565b346101e45760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101e45760206103346102976101c1565b60436055917fffffffffffffffffffffffffffffffffffffffff000000000000000000000000604051913060388401526f5af43d82803e903d91602b57fd5bf3ff60248401527f00000000000000000000000000000000000000000000000000000000000000006014840152733d602d80600a3d3981f3363d3d373d3d3d363d73835260601b1660588201526037600c8201206078820152012090565b73ffffffffffffffffffffffffffffffffffffffff60405191168152f35b346101e45760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101e4576103896101c1565b600090338252816020526040822054906001602052604083205491828111156103f7578281039081116101b5578083018093116101b5576103f4926103ee3373ffffffffffffffffffffffffffffffffffffffff166000526001602052604060002090565b556111d7565b80f35b60046040517f6c01d14c000000000000000000000000000000000000000000000000000000008152fd5b9181601f840112156101e45782359167ffffffffffffffff83116101e4576020808501948460051b0101116101e457565b60607ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101e45767ffffffffffffffff6004358181116101e45761049d903690600401610421565b6024929192358281116101e4576104b8903690600401610421565b90926044359081116101e4576104d2903690600401610421565b9390926104df8585611240565b9534870361055c5790817fe36a6f34ea83c6d542aa5154762f4212ebd322e41ecc55b97420d93904a24dcc9761051c836103f49998979695610981565b6040519060a0825261053260a083018a8a6109d6565b9060009b838d6020819601528460408201528460608201528460808201528033940390a433610f1f565b6040517f028ebaf000000000000000000000000000000000000000000000000000000000815260048101889052346024820152604490fd5b60a07ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101e4576105c66101c1565b60243567ffffffffffffffff81116101e4576105e96106b791369060040161022d565b6044939193359060643590826105fd6101e9565b9261067d61060a33610cd5565b94610616818486610a42565b91604051958787526020870152828b73ffffffffffffffffffffffffffffffffffffffff9788871660408201528360608201528460808201527f878da9a7ef8f595dd108643e1793e86cb8b04e90410fb000bb83a070309ff75a60a08a33941692a4611114565b6040518097819682957fc0951d6b00000000000000000000000000000000000000000000000000000000845260009b8c9a60048601610c57565b0393165af19081156101b057829083926106d5575015610186575080f35b90506106eb91503d8084833e6101a18183610b11565b903861017c565b60009103126101e457565b346101e45760007ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101e457602060405173ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000168152f35b60a07ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101e45767ffffffffffffffff6004358181116101e4576107b7903690600401610421565b906024358381116101e4576107d0903690600401610421565b906044359485116101e4576107ec61089d953690600401610421565b94909385610897606435848461084b61085e6108066101e9565b948c7fe36a6f34ea83c6d542aa5154762f4212ebd322e41ecc55b97420d93904a24dcc6108338a83611240565b9961083f89858d610a42565b998a9792989199610981565b936040519260a0845260a08401916109d6565b93602082015273ffffffffffffffffffffffffffffffffffffffff891660408201528560608201528660808201528033940390a4611114565b33610f1f565b005b346101e45760007ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101e457602060405173ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000168152f35b346101e45760607ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101e45760443573ffffffffffffffffffffffffffffffffffffffff811681036101e45761096e606091602435600435610a42565b9060405192835260208301526040820152f35b604051918291829160005b81811061099c5750505003902090565b9193509160019073ffffffffffffffffffffffffffffffffffffffff6109c18661020c565b1681526020809101940191019184939261098c565b90918281527f07ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff83116101e45760209260051b809284830137010190565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b929060009273ffffffffffffffffffffffffffffffffffffffff8091168015918215610a9d575b505015610a7f576602c2ad68fd90000292830190565b8093925065c9e86723e00002926601f8c501d9b00002918284010190565b7f0000000000000000000000000000000000000000000000000000000000000000161490503880610a69565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b67ffffffffffffffff8111610b0c57604052565b610ac9565b90601f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0910116810190811067ffffffffffffffff821117610b0c57604052565b67ffffffffffffffff8111610b0c57601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01660200190565b91906040838203126101e457825180151581036101e45792602090818101519067ffffffffffffffff82116101e4570182601f820112156101e457805190610bd382610b52565b93610be16040519586610b11565b8285528383830101116101e45760005b828110610c05575050906000918301015290565b8181018401518582018501528301610bf1565b601f82602094937fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0938186528686013760008582860101520116010190565b9493929160409273ffffffffffffffffffffffffffffffffffffffff610c8b93168752606060208801526060870191610c18565b930152565b6040513d6000823e3d90fd5b805115610cab57805190602001fd5b60046040517fded9a23b000000000000000000000000000000000000000000000000000000008152fd5b90610d778260436055917fffffffffffffffffffffffffffffffffffffffff000000000000000000000000604051913060388401526f5af43d82803e903d91602b57fd5bf3ff60248401527f00000000000000000000000000000000000000000000000000000000000000006014840152733d602d80600a3d3981f3363d3d373d3d3d363d73835260601b1660588201526037600c8201206078820152012090565b803b610f0557507f00000000000000000000000000000000000000000000000000000000000000006e5af43d82803e903d91602b57fd5bf3600091763d602d80600a3d3981f3363d3d373d3d3d363d7300000062ffffff8260881c1617835260781b1760205273ffffffffffffffffffffffffffffffffffffffff7fffffffffffffffffffffffffffffffffffffffff0000000000000000000000008460601b166037600984f5168015610ea7578093813b156101ba576040517f485cc95500000000000000000000000000000000000000000000000000000000815230600482015273ffffffffffffffffffffffffffffffffffffffff91909116602482015291908290604490829084905af180156101b057610e925750565b80610e9f610ea592610af8565b806106f2565b565b60646040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601760248201527f455243313136373a2063726561746532206661696c65640000000000000000006044820152fd5b73ffffffffffffffffffffffffffffffffffffffff169150565b94610f48979293959691949673ffffffffffffffffffffffffffffffffffffffff988991610cd5565b16966040519889977f8363da720000000000000000000000000000000000000000000000000000000089528060648a01606060048c0152526084890196916000905b8282106110e457505050507ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc9182888703016024890152808652602080870196818360051b82010197846000925b85841061103c575050505050505083600097959387959361100293878096030160448601526109d6565b03925af19081156101b0576000908192611020575b50156101865750565b9061103592503d8091833e6101a18183610b11565b9038611017565b9193959a9b509193959697987fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08282030184528a357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe1843603018112156101e457830186810191903567ffffffffffffffff81116101e45780360383136101e4576110cc88928392600195610c18565b9c0194019401918d9b9a999897969491959395610fd8565b919398995091949596600190826110fa8861020c565b1681526020809101960192018b9998939197969597610f8a565b90929134810361119e575073ffffffffffffffffffffffffffffffffffffffff600091817f0000000000000000000000000000000000000000000000000000000000000000168352826020526040832080549182018092116101b557558361117d575b50505050565b604092168152806020522080549182018092116101b5575538808080611177565b6040517f028ebaf00000000000000000000000000000000000000000000000000000000081526004810191909152346024820152604490fd5b60008080939281935af13d1561123b573d6111f181610b52565b906111ff6040519283610b11565b8152600060203d92013e5b1561121157565b60046040517f381f9583000000000000000000000000000000000000000000000000000000008152fd5b61120a565b6000929183915b81831061125357505050565b9091936001908560051b830135019401919061124756fea2646970667358221220d4079b3fad5b16e0f6aa242478802dffdd80cc4b3982539ebb182e778868a6ca64736f6c634300081300330000000000000000000000003d961f2758a537d6d12cb9335a9fd7d2abbd224000000000000000000000000044928735180f03b334f82617a552dee4631c9bdb

Deployed Bytecode

0x6080604052600436101561001257600080fd5b6000803560e01c9081632013446e146100aa57508063302deb14146100a557806351cff8d9146100a05780637c1e20681461009b578063842210eb146100965780638f7c79a314610091578063d58b57691461008c578063e84d4420146100875763fdca70991461008257600080fd5b61090e565b61089f565b61076c565b6106fd565b610594565b610452565b610352565b61025b565b60607ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101be576100dc6101c1565b60243567ffffffffffffffff81116101ba576100fc90369060040161022d565b73ffffffffffffffffffffffffffffffffffffffff61011d93929333610cd5565b166044353401938434116101b5578593610166604051968795869485947fc0951d6b00000000000000000000000000000000000000000000000000000000865260048601610c57565b039134905af19081156101b0578290839261018b575b5015610186575080f35b610c9c565b90506101a991503d8084833e6101a18183610b11565b810190610b8c565b908361017c565b610c90565b610a13565b8280fd5b80fd5b6004359073ffffffffffffffffffffffffffffffffffffffff821682036101e457565b600080fd5b6084359073ffffffffffffffffffffffffffffffffffffffff821682036101e457565b359073ffffffffffffffffffffffffffffffffffffffff821682036101e457565b9181601f840112156101e45782359167ffffffffffffffff83116101e457602083818601950101116101e457565b346101e45760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101e45760206103346102976101c1565b60436055917fffffffffffffffffffffffffffffffffffffffff000000000000000000000000604051913060388401526f5af43d82803e903d91602b57fd5bf3ff60248401527f0000000000000000000000003d961f2758a537d6d12cb9335a9fd7d2abbd22406014840152733d602d80600a3d3981f3363d3d373d3d3d363d73835260601b1660588201526037600c8201206078820152012090565b73ffffffffffffffffffffffffffffffffffffffff60405191168152f35b346101e45760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101e4576103896101c1565b600090338252816020526040822054906001602052604083205491828111156103f7578281039081116101b5578083018093116101b5576103f4926103ee3373ffffffffffffffffffffffffffffffffffffffff166000526001602052604060002090565b556111d7565b80f35b60046040517f6c01d14c000000000000000000000000000000000000000000000000000000008152fd5b9181601f840112156101e45782359167ffffffffffffffff83116101e4576020808501948460051b0101116101e457565b60607ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101e45767ffffffffffffffff6004358181116101e45761049d903690600401610421565b6024929192358281116101e4576104b8903690600401610421565b90926044359081116101e4576104d2903690600401610421565b9390926104df8585611240565b9534870361055c5790817fe36a6f34ea83c6d542aa5154762f4212ebd322e41ecc55b97420d93904a24dcc9761051c836103f49998979695610981565b6040519060a0825261053260a083018a8a6109d6565b9060009b838d6020819601528460408201528460608201528460808201528033940390a433610f1f565b6040517f028ebaf000000000000000000000000000000000000000000000000000000000815260048101889052346024820152604490fd5b60a07ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101e4576105c66101c1565b60243567ffffffffffffffff81116101e4576105e96106b791369060040161022d565b6044939193359060643590826105fd6101e9565b9261067d61060a33610cd5565b94610616818486610a42565b91604051958787526020870152828b73ffffffffffffffffffffffffffffffffffffffff9788871660408201528360608201528460808201527f878da9a7ef8f595dd108643e1793e86cb8b04e90410fb000bb83a070309ff75a60a08a33941692a4611114565b6040518097819682957fc0951d6b00000000000000000000000000000000000000000000000000000000845260009b8c9a60048601610c57565b0393165af19081156101b057829083926106d5575015610186575080f35b90506106eb91503d8084833e6101a18183610b11565b903861017c565b60009103126101e457565b346101e45760007ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101e457602060405173ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000044928735180f03b334f82617a552dee4631c9bdb168152f35b60a07ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101e45767ffffffffffffffff6004358181116101e4576107b7903690600401610421565b906024358381116101e4576107d0903690600401610421565b906044359485116101e4576107ec61089d953690600401610421565b94909385610897606435848461084b61085e6108066101e9565b948c7fe36a6f34ea83c6d542aa5154762f4212ebd322e41ecc55b97420d93904a24dcc6108338a83611240565b9961083f89858d610a42565b998a9792989199610981565b936040519260a0845260a08401916109d6565b93602082015273ffffffffffffffffffffffffffffffffffffffff891660408201528560608201528660808201528033940390a4611114565b33610f1f565b005b346101e45760007ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101e457602060405173ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000003d961f2758a537d6d12cb9335a9fd7d2abbd2240168152f35b346101e45760607ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101e45760443573ffffffffffffffffffffffffffffffffffffffff811681036101e45761096e606091602435600435610a42565b9060405192835260208301526040820152f35b604051918291829160005b81811061099c5750505003902090565b9193509160019073ffffffffffffffffffffffffffffffffffffffff6109c18661020c565b1681526020809101940191019184939261098c565b90918281527f07ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff83116101e45760209260051b809284830137010190565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b929060009273ffffffffffffffffffffffffffffffffffffffff8091168015918215610a9d575b505015610a7f576602c2ad68fd90000292830190565b8093925065c9e86723e00002926601f8c501d9b00002918284010190565b7f00000000000000000000000044928735180f03b334f82617a552dee4631c9bdb161490503880610a69565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b67ffffffffffffffff8111610b0c57604052565b610ac9565b90601f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0910116810190811067ffffffffffffffff821117610b0c57604052565b67ffffffffffffffff8111610b0c57601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01660200190565b91906040838203126101e457825180151581036101e45792602090818101519067ffffffffffffffff82116101e4570182601f820112156101e457805190610bd382610b52565b93610be16040519586610b11565b8285528383830101116101e45760005b828110610c05575050906000918301015290565b8181018401518582018501528301610bf1565b601f82602094937fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0938186528686013760008582860101520116010190565b9493929160409273ffffffffffffffffffffffffffffffffffffffff610c8b93168752606060208801526060870191610c18565b930152565b6040513d6000823e3d90fd5b805115610cab57805190602001fd5b60046040517fded9a23b000000000000000000000000000000000000000000000000000000008152fd5b90610d778260436055917fffffffffffffffffffffffffffffffffffffffff000000000000000000000000604051913060388401526f5af43d82803e903d91602b57fd5bf3ff60248401527f0000000000000000000000003d961f2758a537d6d12cb9335a9fd7d2abbd22406014840152733d602d80600a3d3981f3363d3d373d3d3d363d73835260601b1660588201526037600c8201206078820152012090565b803b610f0557507f0000000000000000000000003d961f2758a537d6d12cb9335a9fd7d2abbd22406e5af43d82803e903d91602b57fd5bf3600091763d602d80600a3d3981f3363d3d373d3d3d363d7300000062ffffff8260881c1617835260781b1760205273ffffffffffffffffffffffffffffffffffffffff7fffffffffffffffffffffffffffffffffffffffff0000000000000000000000008460601b166037600984f5168015610ea7578093813b156101ba576040517f485cc95500000000000000000000000000000000000000000000000000000000815230600482015273ffffffffffffffffffffffffffffffffffffffff91909116602482015291908290604490829084905af180156101b057610e925750565b80610e9f610ea592610af8565b806106f2565b565b60646040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601760248201527f455243313136373a2063726561746532206661696c65640000000000000000006044820152fd5b73ffffffffffffffffffffffffffffffffffffffff169150565b94610f48979293959691949673ffffffffffffffffffffffffffffffffffffffff988991610cd5565b16966040519889977f8363da720000000000000000000000000000000000000000000000000000000089528060648a01606060048c0152526084890196916000905b8282106110e457505050507ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc9182888703016024890152808652602080870196818360051b82010197846000925b85841061103c575050505050505083600097959387959361100293878096030160448601526109d6565b03925af19081156101b0576000908192611020575b50156101865750565b9061103592503d8091833e6101a18183610b11565b9038611017565b9193959a9b509193959697987fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08282030184528a357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe1843603018112156101e457830186810191903567ffffffffffffffff81116101e45780360383136101e4576110cc88928392600195610c18565b9c0194019401918d9b9a999897969491959395610fd8565b919398995091949596600190826110fa8861020c565b1681526020809101960192018b9998939197969597610f8a565b90929134810361119e575073ffffffffffffffffffffffffffffffffffffffff600091817f00000000000000000000000044928735180f03b334f82617a552dee4631c9bdb168352826020526040832080549182018092116101b557558361117d575b50505050565b604092168152806020522080549182018092116101b5575538808080611177565b6040517f028ebaf00000000000000000000000000000000000000000000000000000000081526004810191909152346024820152604490fd5b60008080939281935af13d1561123b573d6111f181610b52565b906111ff6040519283610b11565b8152600060203d92013e5b1561121157565b60046040517f381f9583000000000000000000000000000000000000000000000000000000008152fd5b61120a565b6000929183915b81831061125357505050565b9091936001908560051b830135019401919061124756fea2646970667358221220d4079b3fad5b16e0f6aa242478802dffdd80cc4b3982539ebb182e778868a6ca64736f6c63430008130033

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

0000000000000000000000003d961f2758a537d6d12cb9335a9fd7d2abbd224000000000000000000000000044928735180f03b334f82617a552dee4631c9bdb

-----Decoded View---------------
Arg [0] : _minterAgentImpl (address): 0x3d961f2758a537D6D12cb9335a9FD7D2ABbd2240
Arg [1] : _zoraFeeRecipient (address): 0x44928735180F03b334F82617A552DEE4631c9Bdb

-----Encoded View---------------
2 Constructor Arguments found :
Arg [0] : 0000000000000000000000003d961f2758a537d6d12cb9335a9fd7d2abbd2240
Arg [1] : 00000000000000000000000044928735180f03b334f82617a552dee4631c9bdb


Block Transaction Difficulty Gas Used Reward
View All Blocks Produced

Block Uncle Number Difficulty Gas Used Reward
View All Uncles
Loading...
Loading
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.