ETH Price: $2,515.60 (+2.17%)

Contract

0x15312b97389a1DC3BcabA7ae58eBbD552e606Ed2
 

Overview

ETH Balance

0 ETH

Eth Value

$0.00

Multichain Info

No addresses found
Transaction Hash
Method
Block
From
To
Create Crowdfund153822422022-08-21 5:58:01741 days ago1661061481IN
Mirror: Factory Contract
0 ETH0.002546513
Create Crowdfund153821662022-08-21 5:41:26741 days ago1661060486IN
Mirror: Factory Contract
0 ETH0.002402433
Create Crowdfund153520582022-08-16 11:20:30746 days ago1660648830IN
Mirror: Factory Contract
0 ETH0.010643258.8712488
Create Crowdfund153131672022-08-10 8:01:15752 days ago1660118475IN
Mirror: Factory Contract
0 ETH0.0154625412.89074979
Create Crowdfund152993382022-08-08 3:58:24754 days ago1659931104IN
Mirror: Factory Contract
0 ETH0.007116258.38388577
Create Crowdfund152919402022-08-07 0:18:53755 days ago1659831533IN
Mirror: Factory Contract
0 ETH0.004152963.46229681
Create Crowdfund152806332022-08-05 6:15:32757 days ago1659680132IN
Mirror: Factory Contract
0 ETH0.010721199.90391593
Create Crowdfund152547582022-08-01 5:34:15761 days ago1659332055IN
Mirror: Factory Contract
0 ETH0.003477874.09698984
Create Crowdfund152348052022-07-29 2:48:30764 days ago1659062910IN
Mirror: Factory Contract
0 ETH0.008478769.98868494
Create Crowdfund152149252022-07-26 0:26:39767 days ago1658795199IN
Mirror: Factory Contract
0 ETH0.0354082348.5561183
Create Crowdfund152033712022-07-24 5:10:04769 days ago1658639404IN
Mirror: Factory Contract
0 ETH0.003804144.48159186
Create Crowdfund151941322022-07-22 18:49:41770 days ago1658515781IN
Mirror: Factory Contract
0 ETH0.0191791222.594592
Create Crowdfund151839462022-07-21 4:59:36772 days ago1658379576IN
Mirror: Factory Contract
0 ETH0.0118805610.97356985
Create Crowdfund151839162022-07-21 4:53:01772 days ago1658379181IN
Mirror: Factory Contract
0 ETH0.0101761211.98763817
Create Crowdfund151456852022-07-15 6:40:50778 days ago1657867250IN
Mirror: Factory Contract
0 ETH0.0096904411.41453452
Create Crowdfund151326982022-07-13 6:26:47780 days ago1657693607IN
Mirror: Factory Contract
0 ETH0.00662547.00354732
Create Crowdfund151271172022-07-12 9:51:21781 days ago1657619481IN
Mirror: Factory Contract
0 ETH0.0166965813.79647821
Create Crowdfund151110752022-07-09 22:29:25783 days ago1657405765IN
Mirror: Factory Contract
0 ETH0.0344690640.60452721
Create Crowdfund150612822022-07-02 5:49:12791 days ago1656740952IN
Mirror: Factory Contract
0 ETH0.006265097.04160534
Create Crowdfund150434372022-06-29 5:19:32794 days ago1656479972IN
Mirror: Factory Contract
0 ETH0.0244074222.54783612
Create Crowdfund150428182022-06-29 2:34:22794 days ago1656470062IN
Mirror: Factory Contract
0 ETH0.0331533529.25616739
Create Crowdfund150314212022-06-26 23:26:35796 days ago1656285995IN
Mirror: Factory Contract
0 ETH0.0210134824.75107128
Create Crowdfund149418362022-06-11 2:30:53812 days ago1654914653IN
Mirror: Factory Contract
0 ETH0.018724122.05168738
Create Crowdfund149394232022-06-10 16:21:05813 days ago1654878065IN
Mirror: Factory Contract
0 ETH0.0629216558.12511284
Create Crowdfund149312902022-06-09 7:10:54814 days ago1654758654IN
Mirror: Factory Contract
0 ETH0.0294805834.72368769
View all transactions

Latest 25 internal transactions (View All)

Advanced mode:
Parent Transaction Hash Block From To
153822422022-08-21 5:58:01741 days ago1661061481
Mirror: Factory Contract
 Contract Creation0 ETH
153821662022-08-21 5:41:26741 days ago1661060486
Mirror: Factory Contract
 Contract Creation0 ETH
153520582022-08-16 11:20:30746 days ago1660648830
Mirror: Factory Contract
 Contract Creation0 ETH
153131672022-08-10 8:01:15752 days ago1660118475
Mirror: Factory Contract
 Contract Creation0 ETH
152993382022-08-08 3:58:24754 days ago1659931104
Mirror: Factory Contract
 Contract Creation0 ETH
152919402022-08-07 0:18:53755 days ago1659831533
Mirror: Factory Contract
 Contract Creation0 ETH
152806332022-08-05 6:15:32757 days ago1659680132
Mirror: Factory Contract
 Contract Creation0 ETH
152547582022-08-01 5:34:15761 days ago1659332055
Mirror: Factory Contract
 Contract Creation0 ETH
152348052022-07-29 2:48:30764 days ago1659062910
Mirror: Factory Contract
 Contract Creation0 ETH
152149252022-07-26 0:26:39767 days ago1658795199
Mirror: Factory Contract
 Contract Creation0 ETH
152033712022-07-24 5:10:04769 days ago1658639404
Mirror: Factory Contract
 Contract Creation0 ETH
151941322022-07-22 18:49:41770 days ago1658515781
Mirror: Factory Contract
 Contract Creation0 ETH
151839462022-07-21 4:59:36772 days ago1658379576
Mirror: Factory Contract
 Contract Creation0 ETH
151839162022-07-21 4:53:01772 days ago1658379181
Mirror: Factory Contract
 Contract Creation0 ETH
151456852022-07-15 6:40:50778 days ago1657867250
Mirror: Factory Contract
 Contract Creation0 ETH
151326982022-07-13 6:26:47780 days ago1657693607
Mirror: Factory Contract
 Contract Creation0 ETH
151271172022-07-12 9:51:21781 days ago1657619481
Mirror: Factory Contract
 Contract Creation0 ETH
151110752022-07-09 22:29:25783 days ago1657405765
Mirror: Factory Contract
 Contract Creation0 ETH
150612822022-07-02 5:49:12791 days ago1656740952
Mirror: Factory Contract
 Contract Creation0 ETH
150434372022-06-29 5:19:32794 days ago1656479972
Mirror: Factory Contract
 Contract Creation0 ETH
150428182022-06-29 2:34:22794 days ago1656470062
Mirror: Factory Contract
 Contract Creation0 ETH
150314212022-06-26 23:26:35796 days ago1656285995
Mirror: Factory Contract
 Contract Creation0 ETH
149418362022-06-11 2:30:53812 days ago1654914653
Mirror: Factory Contract
 Contract Creation0 ETH
149394232022-06-10 16:21:05813 days ago1654878065
Mirror: Factory Contract
 Contract Creation0 ETH
149312902022-06-09 7:10:54814 days ago1654758654
Mirror: Factory Contract
 Contract Creation0 ETH
View All Internal Transactions
Loading...
Loading

Contract Source Code Verified (Exact Match)

Contract Name:
CrowdfundWithPodiumEditionsFactory

Compiler Version
v0.8.6+commit.11564f7e

Optimization Enabled:
Yes with 2000 runs

Other Settings:
default evmVersion
File 1 of 10 : CrowdfundWithPodiumEditionsFactory.sol
// SPDX-License-Identifier: GPL-3.0-or-later
pragma solidity 0.8.6;

import {CrowdfundWithPodiumEditionsProxy} from "./CrowdfundWithPodiumEditionsProxy.sol";
import {CrowdfundWithPodiumEditionsLogic} from "./CrowdfundWithPodiumEditionsLogic.sol";
import {ICrowdfundWithPodiumEditions} from "./interface/ICrowdfundWithPodiumEditions.sol";
import {ITributaryRegistry} from "../../../interface/ITributaryRegistry.sol";
import {Governable} from "../../../lib/Governable.sol";

/**
 * @title CrowdfundWithPodiumEditionsFactory
 * @author MirrorXYZ
 */
contract CrowdfundWithPodiumEditionsFactory is Governable {
    //======== Structs ========

    struct Parameters {
        address payable fundingRecipient;
        uint256 fundingCap;
        uint256 operatorPercent;
        string name;
        string symbol;
        uint256 feePercentage;
        uint256 podiumDuration;
    }

    //======== Events ========

    event CrowdfundDeployed(
        address crowdfundProxy,
        string name,
        string symbol,
        address operator
    );

    //======== Configuration storage =========

    /*
        Updatable via governance
    */

    address public logic;
    address payable public editions;
    address public tributaryRegistry;
    address public treasuryConfig;
    uint256 public minFeePercentage = 250;

    //======== Runtime mutable storage =========

    // Gets set within the block, and then deleted.
    Parameters public parameters;

    //======== Constructor =========

    constructor(
        address owner_,
        address logic_,
        address payable editions_,
        address tributaryRegistry_,
        address treasuryConfig_
    ) Governable(owner_) {
        logic = logic_;
        editions = editions_;
        tributaryRegistry = tributaryRegistry_;
        treasuryConfig = treasuryConfig_;
    }

    //======== Configuration =========

    function setMinimumFeePercentage(uint256 newMinFeePercentage)
        public
        onlyGovernance
    {
        minFeePercentage = newMinFeePercentage;
    }

    function setEditions(address payable newEditions) public onlyGovernance {
        editions = newEditions;
    }

    function setLogic(address newLogic) public onlyGovernance {
        logic = newLogic;
    }

    function setTreasuryConfig(address newTreasuryConfig)
        public
        onlyGovernance
    {
        treasuryConfig = newTreasuryConfig;
    }

    function setTributaryRegistry(address newTributaryRegistry)
        public
        onlyGovernance
    {
        tributaryRegistry = newTributaryRegistry;
    }

    //======== Deploy function =========
    struct TributaryConfig {
        address tributary;
        uint256 feePercentage;
    }

    function createCrowdfund(
        ICrowdfundWithPodiumEditions.EditionTier[] calldata tiers,
        TributaryConfig calldata tributaryConfig,
        string calldata name_,
        string calldata symbol_,
        address payable operator_,
        address payable fundingRecipient_,
        uint256 fundingCap_,
        uint256 operatorPercent_,
        uint256 podiumDuration_
    ) external returns (address crowdfundProxy) {
        require(
            tributaryConfig.feePercentage >= minFeePercentage,
            "fee is too low"
        );

        parameters = Parameters({
            name: name_,
            symbol: symbol_,
            fundingRecipient: fundingRecipient_,
            fundingCap: fundingCap_,
            operatorPercent: operatorPercent_,
            feePercentage: tributaryConfig.feePercentage,
            podiumDuration: podiumDuration_
        });

        crowdfundProxy = address(
            new CrowdfundWithPodiumEditionsProxy{
                salt: keccak256(abi.encode(symbol_, operator_))
            }(treasuryConfig, operator_)
        );

        delete parameters;

        emit CrowdfundDeployed(crowdfundProxy, name_, symbol_, operator_);

        ITributaryRegistry(tributaryRegistry).registerTributary(
            crowdfundProxy,
            tributaryConfig.tributary
        );

        ICrowdfundWithPodiumEditions(editions).createEditions(
            tiers,
            payable(crowdfundProxy),
            crowdfundProxy
        );
    }
}

File 2 of 10 : CrowdfundWithPodiumEditionsProxy.sol
// SPDX-License-Identifier: GPL-3.0-or-later
pragma solidity 0.8.6;

import {CrowdfundWithPodiumEditionsStorage} from "./CrowdfundWithPodiumEditionsStorage.sol";

interface ICrowdfundWithPodiumEditionsFactory {
    function mediaAddress() external returns (address);

    function logic() external returns (address);

    function editions() external returns (address);

    // ERC20 data.
    function parameters()
        external
        returns (
            address payable fundingRecipient,
            uint256 fundingCap,
            uint256 operatorPercent,
            string memory name,
            string memory symbol,
            uint256 feePercentage,
            uint256 podiumDuration
        );
}

/**
 * @title CrowdfundWithPodiumEditionsProxy
 * @author MirrorXYZ
 */
contract CrowdfundWithPodiumEditionsProxy is
    CrowdfundWithPodiumEditionsStorage
{
    constructor(address treasuryConfig_, address payable operator_) {
        logic = ICrowdfundWithPodiumEditionsFactory(msg.sender).logic();
        editions = ICrowdfundWithPodiumEditionsFactory(msg.sender).editions();
        // Crowdfund-specific data.
        (
            fundingRecipient,
            fundingCap,
            operatorPercent,
            name,
            symbol,
            feePercentage,
            podiumDuration
        ) = ICrowdfundWithPodiumEditionsFactory(msg.sender).parameters();

        operator = operator_;
        treasuryConfig = treasuryConfig_;
        // Initialize mutable storage.
        status = Status.FUNDING;
    }

    fallback() external payable {
        address _impl = logic;
        assembly {
            let ptr := mload(0x40)
            calldatacopy(ptr, 0, calldatasize())
            let result := delegatecall(gas(), _impl, ptr, calldatasize(), 0, 0)
            let size := returndatasize()
            returndatacopy(ptr, 0, size)

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

    receive() external payable {}
}

File 3 of 10 : CrowdfundWithPodiumEditionsLogic.sol
// SPDX-License-Identifier: GPL-3.0-or-later
pragma solidity 0.8.6;

import {CrowdfundWithPodiumEditionsStorage} from "./CrowdfundWithPodiumEditionsStorage.sol";
import {ICrowdfundWithPodiumEditions} from "./interface/ICrowdfundWithPodiumEditions.sol";
import {ITreasuryConfig} from "../../../interface/ITreasuryConfig.sol";

/**
 * @title CrowdfundWithPodiumEditionsLogic
 * @author MirrorXYZ
 *
 * Crowdfund the creation of NFTs by issuing ERC20 tokens that
 * can be redeemed for the underlying value of the NFT once sold.
 */
contract CrowdfundWithPodiumEditionsLogic is
    CrowdfundWithPodiumEditionsStorage
{
    // ============ Events ============

    event ReceivedERC721(uint256 tokenId, address sender);
    event Contribution(address contributor, uint256 amount);
    event ContributionForEdition(
        address contributor,
        uint256 amount,
        uint256 editionId,
        uint256 tokenId
    );

    event FundingClosed(uint256 amountRaised, uint256 creatorAllocation);
    event BidAccepted(uint256 amount);
    event Redeemed(address contributor, uint256 amount);
    // ERC20 Events
    event Transfer(address indexed from, address indexed to, uint256 value);
    event Approval(
        address indexed owner,
        address indexed spender,
        uint256 value
    );

    // Podium Events
    event PodiumDurationExtended(uint256 editionId);

    // ============ Modifiers ============

    /**
     * @dev Modifier to check whether the `msg.sender` is the operator.
     * If it is, it will run the function. Otherwise, it will revert.
     */
    modifier onlyOperator() {
        require(msg.sender == operator);
        _;
    }

    modifier nonReentrant() {
        // On the first call to nonReentrant, _notEntered will be true
        require(reentrancy_status != REENTRANCY_ENTERED, "Reentrant call");

        // Any calls to nonReentrant after this point will fail
        reentrancy_status = REENTRANCY_ENTERED;

        _;

        // By storing the original value once again, a refund is triggered (see
        // https://eips.ethereum.org/EIPS/eip-2200)
        reentrancy_status = REENTRANCY_NOT_ENTERED;
    }

    // ============ Crowdfunding Methods ============

    function contributeForPodium(
        address payable backer,
        uint256 editionId,
        uint256 amount
    ) external payable nonReentrant {
        _contribute(backer, editionId, amount, true);
    }

    /**
     * @notice Mints tokens for the sender propotional to the
     *  amount of ETH sent in the transaction.
     * @dev Emits the Contribution event.
     */
    function contribute(
        address payable backer,
        uint256 editionId,
        uint256 amount
    ) external payable nonReentrant {
        _contribute(backer, editionId, amount, false);
    }

    /**
     * @notice Burns the sender's tokens and redeems underlying ETH.
     * @dev Emits the Redeemed event.
     */
    function redeem(uint256 tokenAmount) external nonReentrant {
        // Prevent backers from accidently redeeming when balance is 0.
        require(
            address(this).balance > 0,
            "Crowdfund: No ETH available to redeem"
        );
        // Check
        require(
            balanceOf[msg.sender] >= tokenAmount,
            "Crowdfund: Insufficient balance"
        );
        require(status == Status.TRADING, "Crowdfund: Funding must be trading");
        // Effect
        uint256 redeemable = redeemableFromTokens(tokenAmount);
        _burn(msg.sender, tokenAmount);
        // Safe version of transfer.
        sendValue(payable(msg.sender), redeemable);
        emit Redeemed(msg.sender, redeemable);
    }

    /**
     * @notice Returns the amount of ETH that is redeemable for tokenAmount.
     */
    function redeemableFromTokens(uint256 tokenAmount)
        public
        view
        returns (uint256)
    {
        return (tokenAmount * address(this).balance) / totalSupply;
    }

    function valueToTokens(uint256 value) public pure returns (uint256 tokens) {
        tokens = value * TOKEN_SCALE;
    }

    function tokensToValue(uint256 tokenAmount)
        internal
        pure
        returns (uint256 value)
    {
        value = tokenAmount / TOKEN_SCALE;
    }

    // ============ Operator Methods ============

    /**
     * @notice Transfers all funds to operator, and mints tokens for the operator.
     *  Updates status to TRADING.
     * @dev Emits the FundingClosed event.
     */
    function closeFunding() external onlyOperator nonReentrant {
        require(status == Status.FUNDING, "Crowdfund: Funding must be open");
        // Close funding status, move to tradable.
        status = Status.TRADING;
        // Mint the operator a percent of the total supply.
        uint256 operatorTokens = (operatorPercent * totalSupply) /
            (100 - operatorPercent);
        _mint(operator, operatorTokens);
        // Announce that funding has been closed.
        emit FundingClosed(address(this).balance, operatorTokens);
        // Transfer the fee to the treasury.
        sendValue(
            ITreasuryConfig(treasuryConfig).treasury(),
            computeFee(address(this).balance)
        );
        // Transfer available balance to the fundingRecipient.
        sendValue(fundingRecipient, address(this).balance);
    }

    function computeFee(uint256 amount) public view returns (uint256 fee) {
        fee = (feePercentage * amount) / (100 * 100);
    }

    // ============ Utility Methods ============

    function sendValue(address payable recipient, uint256 amount) internal {
        require(
            address(this).balance >= amount,
            "Address: insufficient balance"
        );

        // solhint-disable-next-line avoid-low-level-calls, avoid-call-value
        (bool success, ) = recipient.call{value: amount}("");
        require(
            success,
            "Address: unable to send value, recipient may have reverted"
        );
    }

    // ============ ERC20 Spec ============

    function _mint(address to, uint256 value) internal {
        totalSupply = totalSupply + value;
        balanceOf[to] = balanceOf[to] + value;
        emit Transfer(address(0), to, value);
    }

    function _burn(address from, uint256 value) internal {
        balanceOf[from] = balanceOf[from] - value;
        totalSupply = totalSupply - value;
        emit Transfer(from, address(0), value);
    }

    function _approve(
        address owner,
        address spender,
        uint256 value
    ) private {
        allowance[owner][spender] = value;
        emit Approval(owner, spender, value);
    }

    function _transfer(
        address from,
        address to,
        uint256 value
    ) private {
        balanceOf[from] = balanceOf[from] - value;
        balanceOf[to] = balanceOf[to] + value;
        emit Transfer(from, to, value);
    }

    function approve(address spender, uint256 value) external returns (bool) {
        _approve(msg.sender, spender, value);
        return true;
    }

    function transfer(address to, uint256 value) external returns (bool) {
        _transfer(msg.sender, to, value);
        return true;
    }

    function transferFrom(
        address from,
        address to,
        uint256 value
    ) external returns (bool) {
        allowance[from][msg.sender] = allowance[from][msg.sender] - value;
        _transfer(from, to, value);
        return true;
    }

    // ============ Tiered Campaigns ============

    function buyEdition(
        uint256 amount,
        uint256 editionId,
        address recipient
    ) internal returns (uint256) {
        // Check that the sender is paying the correct amount.
        require(
            amount >=
                ICrowdfundWithPodiumEditions(editions).editionPrice(editionId),
            "Unable purchase edition with available amount"
        );
        // We don't need to transfer the value to the NFT contract here,
        // since that contract trusts this one to check before minting.
        // I.E. this contract has minting privileges.
        return
            ICrowdfundWithPodiumEditions(editions).buyEdition(
                editionId,
                recipient
            );
    }

    function buyEditionForPodium(
        uint256 amount,
        uint256 editionId,
        address recipient
    ) internal returns (uint256) {
        // Check that the sender is paying the correct amount.
        require(
            amount >=
                ICrowdfundWithPodiumEditions(editions).editionPrice(editionId),
            "Unable purchase edition with available amount"
        );

        if (podiumStartTime == 0) {
            podiumStartTime = block.timestamp;
        }

        uint256 podiumEnds = podiumStartTime + podiumDuration;

        require(podiumEnds >= block.timestamp, "podium closed");

        if (podiumEnds < block.timestamp + PODIUM_TIME_BUFFER) {
            // Extend duration.
            podiumDuration += block.timestamp + PODIUM_TIME_BUFFER - podiumEnds;
            emit PodiumDurationExtended(editionId);
        }

        // We don't need to transfer the value to the NFT contract here,
        // since that contract trusts this one to check before minting.
        // I.E. this contract has minting privileges.
        return
            ICrowdfundWithPodiumEditions(editions).buyEdition(
                editionId,
                recipient
            );
    }

    function _contribute(
        address payable backer,
        uint256 editionId,
        uint256 amount,
        bool forPodium
    ) private {
        require(status == Status.FUNDING, "Crowdfund: Funding must be open");
        require(amount == msg.value, "Crowdfund: Amount is not value sent");
        // This first case is the happy path, so we will keep it efficient.
        // The balance, which includes the current contribution, is less than or equal to cap.
        if (address(this).balance <= fundingCap) {
            // Mint equity for the contributor.
            _mint(backer, valueToTokens(amount));

            // Editions start at 1, so a "0" edition means the user wants to contribute without
            // purchasing a token.
            if (editionId > 0) {
                emit ContributionForEdition(
                    backer,
                    amount,
                    editionId,
                    forPodium
                        ? buyEditionForPodium(amount, editionId, backer)
                        : buyEdition(amount, editionId, backer)
                );
            } else {
                emit Contribution(backer, amount);
            }
        } else {
            // Compute the balance of the crowdfund before the contribution was made.
            uint256 startAmount = address(this).balance - amount;
            // If that amount was already greater than the funding cap, then we should revert immediately.
            require(
                startAmount < fundingCap,
                "Crowdfund: Funding cap already reached"
            );
            // Otherwise, the contribution helped us reach the funding cap. We should
            // take what we can until the funding cap is reached, and refund the rest.
            uint256 eligibleAmount = fundingCap - startAmount;
            // Otherwise, we process the contribution as if it were the minimal amount.
            _mint(backer, valueToTokens(eligibleAmount));

            if (editionId > 0) {
                emit ContributionForEdition(
                    backer,
                    eligibleAmount,
                    editionId,
                    // Attempt to purchase edition with eligible amount.
                    forPodium
                        ? buyEditionForPodium(eligibleAmount, editionId, backer)
                        : buyEdition(eligibleAmount, editionId, backer)
                );
            } else {
                emit Contribution(backer, eligibleAmount);
            }
            // Refund the sender with their contribution (e.g. 2.5 minus the diff - e.g. 1.5 = 1 ETH)
            sendValue(backer, amount - eligibleAmount);
        }
    }
}

File 4 of 10 : ICrowdfundWithPodiumEditions.sol
// SPDX-License-Identifier: GPL-3.0-or-later
pragma solidity 0.8.6;

interface ICrowdfundWithPodiumEditions {
    struct Edition {
        // The maximum number of tokens that can be sold.
        uint256 quantity;
        // The price at which each token will be sold, in ETH.
        uint256 price;
        // The account that will receive sales revenue.
        address payable fundingRecipient;
        // The number of tokens sold so far.
        uint256 numSold;
        bytes32 contentHash;
    }

    struct EditionTier {
        // The maximum number of tokens that can be sold.
        uint256 quantity;
        // The price at which each token will be sold, in ETH.
        uint256 price;
        bytes32 contentHash;
    }

    function buyEdition(uint256 editionId, address recipient)
        external
        payable
        returns (uint256 tokenId);

    function editionPrice(uint256 editionId) external view returns (uint256);

    function createEditions(
        EditionTier[] memory tier,
        // The account that should receive the revenue.
        address payable fundingRecipient,
        address minter
    ) external;

    function contractURI() external view returns (string memory);
}

File 5 of 10 : ITributaryRegistry.sol
// SPDX-License-Identifier: GPL-3.0-or-later
pragma solidity 0.8.6;

interface ITributaryRegistry {
    function addRegistrar(address registrar) external;

    function removeRegistrar(address registrar) external;

    function addSingletonProducer(address producer) external;

    function removeSingletonProducer(address producer) external;

    function registerTributary(address producer, address tributary) external;

    function producerToTributary(address producer)
        external
        returns (address tributary);

    function singletonProducer(address producer) external returns (bool);

    function changeTributary(address producer, address newTributary) external;
}

File 6 of 10 : Governable.sol
// SPDX-License-Identifier: GPL-3.0-or-later
pragma solidity 0.8.6;

import {Ownable} from "../lib/Ownable.sol";
import {IGovernable} from "../lib/interface/IGovernable.sol";

contract Governable is Ownable, IGovernable {
    // ============ Mutable Storage ============

    // Mirror governance contract.
    address public override governor;

    // ============ Modifiers ============

    modifier onlyGovernance() {
        require(isOwner() || isGovernor(), "caller is not governance");
        _;
    }

    modifier onlyGovernor() {
        require(isGovernor(), "caller is not governor");
        _;
    }

    // ============ Constructor ============

    constructor(address owner_) Ownable(owner_) {}

    // ============ Administration ============

    function changeGovernor(address governor_) public override onlyGovernance {
        governor = governor_;
    }

    // ============ Utility Functions ============

    function isGovernor() public view override returns (bool) {
        return msg.sender == governor;
    }
}

File 7 of 10 : CrowdfundWithPodiumEditionsStorage.sol
// SPDX-License-Identifier: GPL-3.0-or-later
pragma solidity 0.8.6;

/**
 * @title CrowdfundWithPodiumEditionsStorage
 * @author MirrorXYZ
 */
contract CrowdfundWithPodiumEditionsStorage {
    // The two states that this contract can exist in. "FUNDING" allows
    // contributors to add funds.
    enum Status {
        FUNDING,
        TRADING
    }

    // ============ Constants ============

    // The factor by which ETH contributions will multiply into crowdfund tokens.
    uint16 internal constant TOKEN_SCALE = 1000;
    uint256 internal constant REENTRANCY_NOT_ENTERED = 1;
    uint256 internal constant REENTRANCY_ENTERED = 2;
    uint16 public constant PODIUM_TIME_BUFFER = 900;
    uint8 public constant decimals = 18;

    // ============ Immutable Storage ============

    // The operator has a special role to change contract status.
    address payable public operator;
    address payable public fundingRecipient;
    address public treasuryConfig;
    // We add a hard cap to prevent raising more funds than deemed reasonable.
    uint256 public fundingCap;
    uint256 public feePercentage;
    // The operator takes some equity in the tokens, represented by this percent.
    uint256 public operatorPercent;
    string public symbol;
    string public name;

    // ============ Mutable Storage ============

    // Represents the current state of the campaign.
    Status public status;
    uint256 internal reentrancy_status;


    // Podium storage
    uint256 public podiumStartTime;
    uint256 public podiumDuration;

    // ============ Mutable ERC20 Attributes ============

    uint256 public totalSupply;
    mapping(address => uint256) public balanceOf;
    mapping(address => mapping(address => uint256)) public allowance;
    mapping(address => uint256) public nonces;

    // ============ Delegation logic ============
    address public logic;

    // ============ Tiered Campaigns ============
    // Address of the editions contract to purchase from.
    address public editions;
}

File 8 of 10 : ITreasuryConfig.sol
// SPDX-License-Identifier: GPL-3.0-or-later
pragma solidity 0.8.6;

interface ITreasuryConfig {
    function treasury() external returns (address payable);

    function distributionModel() external returns (address);
}

File 9 of 10 : Ownable.sol
// SPDX-License-Identifier: GPL-3.0-or-later
pragma solidity 0.8.6;

contract Ownable {
    address public owner;
    address private nextOwner;

    event OwnershipTransferred(
        address indexed previousOwner,
        address indexed newOwner
    );

    // modifiers

    modifier onlyOwner() {
        require(isOwner(), "caller is not the owner.");
        _;
    }

    modifier onlyNextOwner() {
        require(isNextOwner(), "current owner must set caller as next owner.");
        _;
    }

    /**
     * @dev Initialize contract by setting transaction submitter as initial owner.
     */
    constructor(address owner_) {
        owner = owner_;
        emit OwnershipTransferred(address(0), owner);
    }

    /**
     * @dev Initiate ownership transfer by setting nextOwner.
     */
    function transferOwnership(address nextOwner_) external onlyOwner {
        require(nextOwner_ != address(0), "Next owner is the zero address.");

        nextOwner = nextOwner_;
    }

    /**
     * @dev Cancel ownership transfer by deleting nextOwner.
     */
    function cancelOwnershipTransfer() external onlyOwner {
        delete nextOwner;
    }

    /**
     * @dev Accepts ownership transfer by setting owner.
     */
    function acceptOwnership() external onlyNextOwner {
        delete nextOwner;

        owner = msg.sender;

        emit OwnershipTransferred(owner, msg.sender);
    }

    /**
     * @dev Renounce ownership by setting owner to zero address.
     */
    function renounceOwnership() external onlyOwner {
        owner = address(0);

        emit OwnershipTransferred(owner, address(0));
    }

    /**
     * @dev Returns true if the caller is the current owner.
     */
    function isOwner() public view returns (bool) {
        return msg.sender == owner;
    }

    /**
     * @dev Returns true if the caller is the next owner.
     */
    function isNextOwner() public view returns (bool) {
        return msg.sender == nextOwner;
    }
}

File 10 of 10 : IGovernable.sol
// SPDX-License-Identifier: GPL-3.0-or-later
pragma solidity 0.8.6;

interface IGovernable {
    function changeGovernor(address governor_) external;

    function isGovernor() external view returns (bool);

    function governor() external view returns (address);
}

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

Contract Security Audit

Contract ABI

[{"inputs":[{"internalType":"address","name":"owner_","type":"address"},{"internalType":"address","name":"logic_","type":"address"},{"internalType":"address payable","name":"editions_","type":"address"},{"internalType":"address","name":"tributaryRegistry_","type":"address"},{"internalType":"address","name":"treasuryConfig_","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"crowdfundProxy","type":"address"},{"indexed":false,"internalType":"string","name":"name","type":"string"},{"indexed":false,"internalType":"string","name":"symbol","type":"string"},{"indexed":false,"internalType":"address","name":"operator","type":"address"}],"name":"CrowdfundDeployed","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"inputs":[],"name":"acceptOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"cancelOwnershipTransfer","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"governor_","type":"address"}],"name":"changeGovernor","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"components":[{"internalType":"uint256","name":"quantity","type":"uint256"},{"internalType":"uint256","name":"price","type":"uint256"},{"internalType":"bytes32","name":"contentHash","type":"bytes32"}],"internalType":"struct ICrowdfundWithPodiumEditions.EditionTier[]","name":"tiers","type":"tuple[]"},{"components":[{"internalType":"address","name":"tributary","type":"address"},{"internalType":"uint256","name":"feePercentage","type":"uint256"}],"internalType":"struct CrowdfundWithPodiumEditionsFactory.TributaryConfig","name":"tributaryConfig","type":"tuple"},{"internalType":"string","name":"name_","type":"string"},{"internalType":"string","name":"symbol_","type":"string"},{"internalType":"address payable","name":"operator_","type":"address"},{"internalType":"address payable","name":"fundingRecipient_","type":"address"},{"internalType":"uint256","name":"fundingCap_","type":"uint256"},{"internalType":"uint256","name":"operatorPercent_","type":"uint256"},{"internalType":"uint256","name":"podiumDuration_","type":"uint256"}],"name":"createCrowdfund","outputs":[{"internalType":"address","name":"crowdfundProxy","type":"address"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"editions","outputs":[{"internalType":"address payable","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"governor","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"isGovernor","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"isNextOwner","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"isOwner","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"logic","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"minFeePercentage","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"parameters","outputs":[{"internalType":"address payable","name":"fundingRecipient","type":"address"},{"internalType":"uint256","name":"fundingCap","type":"uint256"},{"internalType":"uint256","name":"operatorPercent","type":"uint256"},{"internalType":"string","name":"name","type":"string"},{"internalType":"string","name":"symbol","type":"string"},{"internalType":"uint256","name":"feePercentage","type":"uint256"},{"internalType":"uint256","name":"podiumDuration","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address payable","name":"newEditions","type":"address"}],"name":"setEditions","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newLogic","type":"address"}],"name":"setLogic","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newMinFeePercentage","type":"uint256"}],"name":"setMinimumFeePercentage","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newTreasuryConfig","type":"address"}],"name":"setTreasuryConfig","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newTributaryRegistry","type":"address"}],"name":"setTributaryRegistry","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"nextOwner_","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"treasuryConfig","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tributaryRegistry","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"}]

608060405260fa6007553480156200001657600080fd5b50604051620021e1380380620021e18339810160408190526200003991620000da565b600080546001600160a01b0319166001600160a01b038716908117825560405187928392917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a35050600380546001600160a01b039586166001600160a01b03199182161790915560048054948616948216949094179093556005805492851692841692909217909155600680549190931691161790555062000173565b600080600080600060a08688031215620000f357600080fd5b855162000100816200015a565b602087015190955062000113816200015a565b604087015190945062000126816200015a565b606087015190935062000139816200015a565b60808701519092506200014c816200015a565b809150509295509295909350565b6001600160a01b03811681146200017057600080fd5b50565b61205e80620001836000396000f3fe60806040523480156200001157600080fd5b5060043610620001a15760003560e01c8063c7af335211620000e9578063e011bf8e1162000097578063f1fe1663116200006e578063f1fe1663146200034e578063f2fde38b1462000365578063ff39e710146200037c57600080fd5b8063e011bf8e146200030c578063e4c0aaf41462000323578063ed459df2146200033a57600080fd5b8063d321de7311620000cc578063d321de7314620002cd578063d6811b6f14620002e4578063d7dfa0dd14620002f857600080fd5b8063c7af335214620002a5578063cfd7b0df14620002b957600080fd5b806379ba509711620001535780638da5cb5b116200012a5780638da5cb5b146200025d5780638f32d59b1462000271578063b8ddbcb3146200029157600080fd5b806379ba5097146200021d578063849a3aa3146200022757806389035730146200023e57600080fd5b80632a0b17ee11620001885780632a0b17ee14620001e3578063715018a614620001fc57806371857000146200020657600080fd5b80630c340a2414620001a657806323452b9c14620001d7575b600080fd5b600254620001ba906001600160a01b031681565b6040516001600160a01b0390911681526020015b60405180910390f35b620001e162000393565b005b620001ed60075481565b604051908152602001620001ce565b620001e162000405565b620001e16200021736600462001068565b6200049d565b620001e162000531565b620001ba620002383660046200108f565b620005fb565b62000248620009c1565b604051620001ce97969594939291906200122d565b600054620001ba906001600160a01b031681565b6000546001600160a01b031633145b6040519015158152602001620001ce565b600454620001ba906001600160a01b031681565b6002546001600160a01b0316331462000280565b600654620001ba906001600160a01b031681565b620001e1620002de36600462001068565b62000b16565b600554620001ba906001600160a01b031681565b600354620001ba906001600160a01b031681565b620001e16200031d36600462001068565b62000baa565b620001e16200033436600462001068565b62000c3e565b6001546001600160a01b0316331462000280565b620001e16200035f36600462001068565b62000cd2565b620001e16200037636600462001068565b62000d66565b620001e16200038d36600462001198565b62000e3c565b6000546001600160a01b03163314620003f35760405162461bcd60e51b815260206004820152601860248201527f63616c6c6572206973206e6f7420746865206f776e65722e000000000000000060448201526064015b60405180910390fd5b600180546001600160a01b0319169055565b6000546001600160a01b03163314620004615760405162461bcd60e51b815260206004820152601860248201527f63616c6c6572206973206e6f7420746865206f776e65722e00000000000000006044820152606401620003ea565b600080546001600160a01b031916815560405181907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a3565b6000546001600160a01b0316331480620004c157506002546001600160a01b031633145b6200050f5760405162461bcd60e51b815260206004820152601860248201527f63616c6c6572206973206e6f7420676f7665726e616e636500000000000000006044820152606401620003ea565b600380546001600160a01b0319166001600160a01b0392909216919091179055565b6001546001600160a01b03163314620005b35760405162461bcd60e51b815260206004820152602c60248201527f63757272656e74206f776e6572206d757374207365742063616c6c657220617360448201527f206e657874206f776e65722e00000000000000000000000000000000000000006064820152608401620003ea565b600180546001600160a01b0319908116909155600080543392168217815560405182917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a3565b60006007548b602001351015620006555760405162461bcd60e51b815260206004820152600e60248201527f66656520697320746f6f206c6f770000000000000000000000000000000000006044820152606401620003ea565b6040518060e00160405280866001600160a01b031681526020018581526020018481526020018b8b8080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250505090825250604080516020601f8c018190048102820181019092528a815291810191908b908b908190840183828082843760009201919091525050509082525060208d8101358183015260409182018590528251600880546001600160a01b0319166001600160a01b039092169190911781558382015160095591830151600a55606083015180516200074792600b92019062000eb3565b50608082015180516200076591600484019160209091019062000eb3565b5060a0820151600582015560c090910151600690910155604051620007939089908990899060200162001349565b60405160208183030381529060405280519060200120600660009054906101000a90046001600160a01b031687604051620007ce9062000f42565b6001600160a01b039283168152911660208201526040018190604051809103906000f590508015801562000806573d6000803e3d6000fd5b50600880546001600160a01b031916815560006009819055600a8190559192509062000834600b8262000f50565b6200084460048301600062000f50565b6005820160009055600682016000905550507f5133bb164b64ffa4461bc0c782a5c0e71cdc9d6c6ef5aa9af84f7fd2cd966d8e818b8b8b8b8b604051620008919695949392919062001288565b60405180910390a16005546001600160a01b0316633d2a6f7782620008ba60208f018f62001068565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e085901b1681526001600160a01b03928316600482015291166024820152604401600060405180830381600087803b1580156200091b57600080fd5b505af115801562000930573d6000803e3d6000fd5b50505050600460009054906101000a90046001600160a01b03166001600160a01b03166309fc162a8e8e84856040518563ffffffff1660e01b81526004016200097d9493929190620012da565b600060405180830381600087803b1580156200099857600080fd5b505af1158015620009ad573d6000803e3d6000fd5b505050509c9b505050505050505050505050565b60088054600954600a54600b80546001600160a01b03909416949293919291620009eb9062001378565b80601f016020809104026020016040519081016040528092919081815260200182805462000a199062001378565b801562000a6a5780601f1062000a3e5761010080835404028352916020019162000a6a565b820191906000526020600020905b81548152906001019060200180831162000a4c57829003601f168201915b50505050509080600401805462000a819062001378565b80601f016020809104026020016040519081016040528092919081815260200182805462000aaf9062001378565b801562000b005780601f1062000ad45761010080835404028352916020019162000b00565b820191906000526020600020905b81548152906001019060200180831162000ae257829003601f168201915b5050505050908060050154908060060154905087565b6000546001600160a01b031633148062000b3a57506002546001600160a01b031633145b62000b885760405162461bcd60e51b815260206004820152601860248201527f63616c6c6572206973206e6f7420676f7665726e616e636500000000000000006044820152606401620003ea565b600580546001600160a01b0319166001600160a01b0392909216919091179055565b6000546001600160a01b031633148062000bce57506002546001600160a01b031633145b62000c1c5760405162461bcd60e51b815260206004820152601860248201527f63616c6c6572206973206e6f7420676f7665726e616e636500000000000000006044820152606401620003ea565b600480546001600160a01b0319166001600160a01b0392909216919091179055565b6000546001600160a01b031633148062000c6257506002546001600160a01b031633145b62000cb05760405162461bcd60e51b815260206004820152601860248201527f63616c6c6572206973206e6f7420676f7665726e616e636500000000000000006044820152606401620003ea565b600280546001600160a01b0319166001600160a01b0392909216919091179055565b6000546001600160a01b031633148062000cf657506002546001600160a01b031633145b62000d445760405162461bcd60e51b815260206004820152601860248201527f63616c6c6572206973206e6f7420676f7665726e616e636500000000000000006044820152606401620003ea565b600680546001600160a01b0319166001600160a01b0392909216919091179055565b6000546001600160a01b0316331462000dc25760405162461bcd60e51b815260206004820152601860248201527f63616c6c6572206973206e6f7420746865206f776e65722e00000000000000006044820152606401620003ea565b6001600160a01b03811662000e1a5760405162461bcd60e51b815260206004820152601f60248201527f4e657874206f776e657220697320746865207a65726f20616464726573732e006044820152606401620003ea565b600180546001600160a01b0319166001600160a01b0392909216919091179055565b6000546001600160a01b031633148062000e6057506002546001600160a01b031633145b62000eae5760405162461bcd60e51b815260206004820152601860248201527f63616c6c6572206973206e6f7420676f7665726e616e636500000000000000006044820152606401620003ea565b600755565b82805462000ec19062001378565b90600052602060002090601f01602090048101928262000ee5576000855562000f30565b82601f1062000f0057805160ff191683800117855562000f30565b8280016001018555821562000f30579182015b8281111562000f3057825182559160200191906001019062000f13565b5062000f3e92915062000f92565b5090565b610c4a80620013df83390190565b50805462000f5e9062001378565b6000825580601f1062000f6f575050565b601f01602090049060005260206000209081019062000f8f919062000f92565b50565b5b8082111562000f3e576000815560010162000f93565b803562000fb681620013c8565b919050565b60008083601f84011262000fce57600080fd5b50813567ffffffffffffffff81111562000fe757600080fd5b6020830191508360206060830285010111156200100357600080fd5b9250929050565b60008083601f8401126200101d57600080fd5b50813567ffffffffffffffff8111156200103657600080fd5b6020830191508360208285010111156200100357600080fd5b6000604082840312156200106257600080fd5b50919050565b6000602082840312156200107b57600080fd5b81356200108881620013c8565b9392505050565b6000806000806000806000806000806000806101408d8f031215620010b357600080fd5b67ffffffffffffffff8d351115620010ca57600080fd5b620010d98e8e358f0162000fbb565b909c509a50620010ed8e60208f016200104f565b995067ffffffffffffffff60608e013511156200110957600080fd5b6200111b8e60608f01358f016200100a565b909950975067ffffffffffffffff60808e013511156200113a57600080fd5b6200114c8e60808f01358f016200100a565b90975095506200115f60a08e0162000fa9565b94506200116f60c08e0162000fa9565b935060e08d013592506101008d013591506101208d013590509295989b509295989b509295989b565b600060208284031215620011ab57600080fd5b5035919050565b818352818160208501375060006020828401015260006020601f19601f840116840101905092915050565b6000815180845260005b818110156200120557602081850181015186830182015201620011e7565b8181111562001218576000602083870101525b50601f01601f19169290920160200192915050565b6001600160a01b038816815286602082015285604082015260e0606082015260006200125d60e0830187620011dd565b8281036080840152620012718187620011dd565b60a0840195909552505060c0015295945050505050565b60006001600160a01b03808916835260806020840152620012ae60808401888a620011b2565b8381036040850152620012c3818789620011b2565b925050808416606084015250979650505050505050565b60608082528181018590526000908660808401835b8881101562001321578235825260208084013590830152604080840135908301529183019190830190600101620012ef565b506001600160a01b039687166020860152949095166040909301929092525090949350505050565b6040815260006200135f604083018587620011b2565b90506001600160a01b0383166020830152949350505050565b600181811c908216806200138d57607f821691505b6020821081141562001062577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6001600160a01b038116811462000f8f57600080fdfe60806040523480156200001157600080fd5b5060405162000c4a38038062000c4a8339810160408190526200003491620004c7565b336001600160a01b031663d7dfa0dd6040518163ffffffff1660e01b8152600401602060405180830381600087803b1580156200007057600080fd5b505af115801562000085573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620000ab9190620003f9565b601060006101000a8154816001600160a01b0302191690836001600160a01b03160217905550336001600160a01b031663b8ddbcb36040518163ffffffff1660e01b8152600401602060405180830381600087803b1580156200010d57600080fd5b505af115801562000122573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620001489190620003f9565b601160006101000a8154816001600160a01b0302191690836001600160a01b03160217905550336001600160a01b031663890357306040518163ffffffff1660e01b8152600401600060405180830381600087803b158015620001aa57600080fd5b505af1158015620001bf573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052620001e9919081019062000420565b600b819055600482905582516001906000906003908290600590829060079082906200021d9060069060208e01906200029c565b50508a5162000232919060208d01906200029c565b5050989098559790975580546101009790970a6001600160a01b038181021990981698881602979097179096555050600080546001600160a01b03199081169685169690961790555050600280549093169316929092179055506008805460ff1916905562000572565b828054620002aa9062000506565b90600052602060002090601f016020900481019282620002ce576000855562000319565b82601f10620002e957805160ff191683800117855562000319565b8280016001018555821562000319579182015b8281111562000319578251825591602001919060010190620002fc565b50620003279291506200032b565b5090565b5b808211156200032757600081556001016200032c565b600082601f8301126200035457600080fd5b81516001600160401b038082111562000371576200037162000543565b604051601f8301601f19908116603f011681019082821181831017156200039c576200039c62000543565b81604052838152602092508683858801011115620003b957600080fd5b600091505b83821015620003dd5785820183015181830184015290820190620003be565b83821115620003ef5760008385830101525b9695505050505050565b6000602082840312156200040c57600080fd5b8151620004198162000559565b9392505050565b600080600080600080600060e0888a0312156200043c57600080fd5b8751620004498162000559565b602089015160408a015160608b015192995090975095506001600160401b03808211156200047657600080fd5b620004848b838c0162000342565b955060808a01519150808211156200049b57600080fd5b50620004aa8a828b0162000342565b93505060a0880151915060c0880151905092959891949750929550565b60008060408385031215620004db57600080fd5b8251620004e88162000559565b6020840151909250620004fb8162000559565b809150509250929050565b600181811c908216806200051b57607f821691505b602082108114156200053d57634e487b7160e01b600052602260045260246000fd5b50919050565b634e487b7160e01b600052604160045260246000fd5b6001600160a01b03811681146200056f57600080fd5b50565b6106c880620005826000396000f3fe6080604052600436106101485760003560e01c80637ecebe00116100c0578063cfd7b0df11610074578063dd62ed3e11610059578063dd62ed3e1461040d578063e3b2594f14610445578063f72655ef1461045b5761014f565b8063cfd7b0df146103b3578063d7dfa0dd146103e05761014f565b806395d89b41116100a557806395d89b411461035b578063a001ecdd14610370578063b8ddbcb3146103865761014f565b80637ecebe00146103185780638dc06c7f146103455761014f565b8063200d2ed211610117578063570ca735116100fc578063570ca735146102a857806370a08231146102d55780637b4044a0146103025761014f565b8063200d2ed21461025a578063313ce567146102815761014f565b806306fdde031461019057806318160ddd146101bb57806318a855c7146101df5780631bb534ba146102085761014f565b3661014f57005b60105460405173ffffffffffffffffffffffffffffffffffffffff9091169036600082376000803683855af43d806000843e81801561018c578184f35b8184fd5b34801561019c57600080fd5b506101a5610471565b6040516101b291906105cb565b60405180910390f35b3480156101c757600080fd5b506101d1600c5481565b6040519081526020016101b2565b3480156101eb57600080fd5b506101f561038481565b60405161ffff90911681526020016101b2565b34801561021457600080fd5b506001546102359073ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020016101b2565b34801561026657600080fd5b506008546102749060ff1681565b6040516101b2919061058a565b34801561028d57600080fd5b50610296601281565b60405160ff90911681526020016101b2565b3480156102b457600080fd5b506000546102359073ffffffffffffffffffffffffffffffffffffffff1681565b3480156102e157600080fd5b506101d16102f0366004610535565b600d6020526000908152604090205481565b34801561030e57600080fd5b506101d160055481565b34801561032457600080fd5b506101d1610333366004610535565b600f6020526000908152604090205481565b34801561035157600080fd5b506101d1600b5481565b34801561036757600080fd5b506101a56104ff565b34801561037c57600080fd5b506101d160045481565b34801561039257600080fd5b506011546102359073ffffffffffffffffffffffffffffffffffffffff1681565b3480156103bf57600080fd5b506002546102359073ffffffffffffffffffffffffffffffffffffffff1681565b3480156103ec57600080fd5b506010546102359073ffffffffffffffffffffffffffffffffffffffff1681565b34801561041957600080fd5b506101d1610428366004610557565b600e60209081526000928352604080842090915290825290205481565b34801561045157600080fd5b506101d160035481565b34801561046757600080fd5b506101d1600a5481565b6007805461047e9061063e565b80601f01602080910402602001604051908101604052809291908181526020018280546104aa9061063e565b80156104f75780601f106104cc576101008083540402835291602001916104f7565b820191906000526020600020905b8154815290600101906020018083116104da57829003601f168201915b505050505081565b6006805461047e9061063e565b803573ffffffffffffffffffffffffffffffffffffffff8116811461053057600080fd5b919050565b60006020828403121561054757600080fd5b6105508261050c565b9392505050565b6000806040838503121561056a57600080fd5b6105738361050c565b91506105816020840161050c565b90509250929050565b60208101600283106105c5577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b91905290565b600060208083528351808285015260005b818110156105f8578581018301518582016040015282016105dc565b8181111561060a576000604083870101525b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016929092016040019392505050565b600181811c9082168061065257607f821691505b6020821081141561068c577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b5091905056fea2646970667358221220b229364e7a9918553c008bca2249fc251b0662b166387bb68248fe64daee07b864736f6c63430008060033a26469706673582212208fd396d323db6525448a1ffdbe320dac0c9e202bf72592460bca2ffca9c8106464736f6c634300080600330000000000000000000000002330ee705ffd040bb0cba8cb7734dfe00e7c4b570000000000000000000000005b5746f6f5e2db8bf5e260829ca7a004c876b167000000000000000000000000c4e0f3ec24972c75df7c716922096f4270b7bb4e0000000000000000000000001171b858777120a59a6cc8148edda8982f187cd800000000000000000000000021a93be569666527dae0fdbfbe7715299dec1202

Deployed Bytecode

0x60806040523480156200001157600080fd5b5060043610620001a15760003560e01c8063c7af335211620000e9578063e011bf8e1162000097578063f1fe1663116200006e578063f1fe1663146200034e578063f2fde38b1462000365578063ff39e710146200037c57600080fd5b8063e011bf8e146200030c578063e4c0aaf41462000323578063ed459df2146200033a57600080fd5b8063d321de7311620000cc578063d321de7314620002cd578063d6811b6f14620002e4578063d7dfa0dd14620002f857600080fd5b8063c7af335214620002a5578063cfd7b0df14620002b957600080fd5b806379ba509711620001535780638da5cb5b116200012a5780638da5cb5b146200025d5780638f32d59b1462000271578063b8ddbcb3146200029157600080fd5b806379ba5097146200021d578063849a3aa3146200022757806389035730146200023e57600080fd5b80632a0b17ee11620001885780632a0b17ee14620001e3578063715018a614620001fc57806371857000146200020657600080fd5b80630c340a2414620001a657806323452b9c14620001d7575b600080fd5b600254620001ba906001600160a01b031681565b6040516001600160a01b0390911681526020015b60405180910390f35b620001e162000393565b005b620001ed60075481565b604051908152602001620001ce565b620001e162000405565b620001e16200021736600462001068565b6200049d565b620001e162000531565b620001ba620002383660046200108f565b620005fb565b62000248620009c1565b604051620001ce97969594939291906200122d565b600054620001ba906001600160a01b031681565b6000546001600160a01b031633145b6040519015158152602001620001ce565b600454620001ba906001600160a01b031681565b6002546001600160a01b0316331462000280565b600654620001ba906001600160a01b031681565b620001e1620002de36600462001068565b62000b16565b600554620001ba906001600160a01b031681565b600354620001ba906001600160a01b031681565b620001e16200031d36600462001068565b62000baa565b620001e16200033436600462001068565b62000c3e565b6001546001600160a01b0316331462000280565b620001e16200035f36600462001068565b62000cd2565b620001e16200037636600462001068565b62000d66565b620001e16200038d36600462001198565b62000e3c565b6000546001600160a01b03163314620003f35760405162461bcd60e51b815260206004820152601860248201527f63616c6c6572206973206e6f7420746865206f776e65722e000000000000000060448201526064015b60405180910390fd5b600180546001600160a01b0319169055565b6000546001600160a01b03163314620004615760405162461bcd60e51b815260206004820152601860248201527f63616c6c6572206973206e6f7420746865206f776e65722e00000000000000006044820152606401620003ea565b600080546001600160a01b031916815560405181907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a3565b6000546001600160a01b0316331480620004c157506002546001600160a01b031633145b6200050f5760405162461bcd60e51b815260206004820152601860248201527f63616c6c6572206973206e6f7420676f7665726e616e636500000000000000006044820152606401620003ea565b600380546001600160a01b0319166001600160a01b0392909216919091179055565b6001546001600160a01b03163314620005b35760405162461bcd60e51b815260206004820152602c60248201527f63757272656e74206f776e6572206d757374207365742063616c6c657220617360448201527f206e657874206f776e65722e00000000000000000000000000000000000000006064820152608401620003ea565b600180546001600160a01b0319908116909155600080543392168217815560405182917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a3565b60006007548b602001351015620006555760405162461bcd60e51b815260206004820152600e60248201527f66656520697320746f6f206c6f770000000000000000000000000000000000006044820152606401620003ea565b6040518060e00160405280866001600160a01b031681526020018581526020018481526020018b8b8080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250505090825250604080516020601f8c018190048102820181019092528a815291810191908b908b908190840183828082843760009201919091525050509082525060208d8101358183015260409182018590528251600880546001600160a01b0319166001600160a01b039092169190911781558382015160095591830151600a55606083015180516200074792600b92019062000eb3565b50608082015180516200076591600484019160209091019062000eb3565b5060a0820151600582015560c090910151600690910155604051620007939089908990899060200162001349565b60405160208183030381529060405280519060200120600660009054906101000a90046001600160a01b031687604051620007ce9062000f42565b6001600160a01b039283168152911660208201526040018190604051809103906000f590508015801562000806573d6000803e3d6000fd5b50600880546001600160a01b031916815560006009819055600a8190559192509062000834600b8262000f50565b6200084460048301600062000f50565b6005820160009055600682016000905550507f5133bb164b64ffa4461bc0c782a5c0e71cdc9d6c6ef5aa9af84f7fd2cd966d8e818b8b8b8b8b604051620008919695949392919062001288565b60405180910390a16005546001600160a01b0316633d2a6f7782620008ba60208f018f62001068565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e085901b1681526001600160a01b03928316600482015291166024820152604401600060405180830381600087803b1580156200091b57600080fd5b505af115801562000930573d6000803e3d6000fd5b50505050600460009054906101000a90046001600160a01b03166001600160a01b03166309fc162a8e8e84856040518563ffffffff1660e01b81526004016200097d9493929190620012da565b600060405180830381600087803b1580156200099857600080fd5b505af1158015620009ad573d6000803e3d6000fd5b505050509c9b505050505050505050505050565b60088054600954600a54600b80546001600160a01b03909416949293919291620009eb9062001378565b80601f016020809104026020016040519081016040528092919081815260200182805462000a199062001378565b801562000a6a5780601f1062000a3e5761010080835404028352916020019162000a6a565b820191906000526020600020905b81548152906001019060200180831162000a4c57829003601f168201915b50505050509080600401805462000a819062001378565b80601f016020809104026020016040519081016040528092919081815260200182805462000aaf9062001378565b801562000b005780601f1062000ad45761010080835404028352916020019162000b00565b820191906000526020600020905b81548152906001019060200180831162000ae257829003601f168201915b5050505050908060050154908060060154905087565b6000546001600160a01b031633148062000b3a57506002546001600160a01b031633145b62000b885760405162461bcd60e51b815260206004820152601860248201527f63616c6c6572206973206e6f7420676f7665726e616e636500000000000000006044820152606401620003ea565b600580546001600160a01b0319166001600160a01b0392909216919091179055565b6000546001600160a01b031633148062000bce57506002546001600160a01b031633145b62000c1c5760405162461bcd60e51b815260206004820152601860248201527f63616c6c6572206973206e6f7420676f7665726e616e636500000000000000006044820152606401620003ea565b600480546001600160a01b0319166001600160a01b0392909216919091179055565b6000546001600160a01b031633148062000c6257506002546001600160a01b031633145b62000cb05760405162461bcd60e51b815260206004820152601860248201527f63616c6c6572206973206e6f7420676f7665726e616e636500000000000000006044820152606401620003ea565b600280546001600160a01b0319166001600160a01b0392909216919091179055565b6000546001600160a01b031633148062000cf657506002546001600160a01b031633145b62000d445760405162461bcd60e51b815260206004820152601860248201527f63616c6c6572206973206e6f7420676f7665726e616e636500000000000000006044820152606401620003ea565b600680546001600160a01b0319166001600160a01b0392909216919091179055565b6000546001600160a01b0316331462000dc25760405162461bcd60e51b815260206004820152601860248201527f63616c6c6572206973206e6f7420746865206f776e65722e00000000000000006044820152606401620003ea565b6001600160a01b03811662000e1a5760405162461bcd60e51b815260206004820152601f60248201527f4e657874206f776e657220697320746865207a65726f20616464726573732e006044820152606401620003ea565b600180546001600160a01b0319166001600160a01b0392909216919091179055565b6000546001600160a01b031633148062000e6057506002546001600160a01b031633145b62000eae5760405162461bcd60e51b815260206004820152601860248201527f63616c6c6572206973206e6f7420676f7665726e616e636500000000000000006044820152606401620003ea565b600755565b82805462000ec19062001378565b90600052602060002090601f01602090048101928262000ee5576000855562000f30565b82601f1062000f0057805160ff191683800117855562000f30565b8280016001018555821562000f30579182015b8281111562000f3057825182559160200191906001019062000f13565b5062000f3e92915062000f92565b5090565b610c4a80620013df83390190565b50805462000f5e9062001378565b6000825580601f1062000f6f575050565b601f01602090049060005260206000209081019062000f8f919062000f92565b50565b5b8082111562000f3e576000815560010162000f93565b803562000fb681620013c8565b919050565b60008083601f84011262000fce57600080fd5b50813567ffffffffffffffff81111562000fe757600080fd5b6020830191508360206060830285010111156200100357600080fd5b9250929050565b60008083601f8401126200101d57600080fd5b50813567ffffffffffffffff8111156200103657600080fd5b6020830191508360208285010111156200100357600080fd5b6000604082840312156200106257600080fd5b50919050565b6000602082840312156200107b57600080fd5b81356200108881620013c8565b9392505050565b6000806000806000806000806000806000806101408d8f031215620010b357600080fd5b67ffffffffffffffff8d351115620010ca57600080fd5b620010d98e8e358f0162000fbb565b909c509a50620010ed8e60208f016200104f565b995067ffffffffffffffff60608e013511156200110957600080fd5b6200111b8e60608f01358f016200100a565b909950975067ffffffffffffffff60808e013511156200113a57600080fd5b6200114c8e60808f01358f016200100a565b90975095506200115f60a08e0162000fa9565b94506200116f60c08e0162000fa9565b935060e08d013592506101008d013591506101208d013590509295989b509295989b509295989b565b600060208284031215620011ab57600080fd5b5035919050565b818352818160208501375060006020828401015260006020601f19601f840116840101905092915050565b6000815180845260005b818110156200120557602081850181015186830182015201620011e7565b8181111562001218576000602083870101525b50601f01601f19169290920160200192915050565b6001600160a01b038816815286602082015285604082015260e0606082015260006200125d60e0830187620011dd565b8281036080840152620012718187620011dd565b60a0840195909552505060c0015295945050505050565b60006001600160a01b03808916835260806020840152620012ae60808401888a620011b2565b8381036040850152620012c3818789620011b2565b925050808416606084015250979650505050505050565b60608082528181018590526000908660808401835b8881101562001321578235825260208084013590830152604080840135908301529183019190830190600101620012ef565b506001600160a01b039687166020860152949095166040909301929092525090949350505050565b6040815260006200135f604083018587620011b2565b90506001600160a01b0383166020830152949350505050565b600181811c908216806200138d57607f821691505b6020821081141562001062577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6001600160a01b038116811462000f8f57600080fdfe60806040523480156200001157600080fd5b5060405162000c4a38038062000c4a8339810160408190526200003491620004c7565b336001600160a01b031663d7dfa0dd6040518163ffffffff1660e01b8152600401602060405180830381600087803b1580156200007057600080fd5b505af115801562000085573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620000ab9190620003f9565b601060006101000a8154816001600160a01b0302191690836001600160a01b03160217905550336001600160a01b031663b8ddbcb36040518163ffffffff1660e01b8152600401602060405180830381600087803b1580156200010d57600080fd5b505af115801562000122573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620001489190620003f9565b601160006101000a8154816001600160a01b0302191690836001600160a01b03160217905550336001600160a01b031663890357306040518163ffffffff1660e01b8152600401600060405180830381600087803b158015620001aa57600080fd5b505af1158015620001bf573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052620001e9919081019062000420565b600b819055600482905582516001906000906003908290600590829060079082906200021d9060069060208e01906200029c565b50508a5162000232919060208d01906200029c565b5050989098559790975580546101009790970a6001600160a01b038181021990981698881602979097179096555050600080546001600160a01b03199081169685169690961790555050600280549093169316929092179055506008805460ff1916905562000572565b828054620002aa9062000506565b90600052602060002090601f016020900481019282620002ce576000855562000319565b82601f10620002e957805160ff191683800117855562000319565b8280016001018555821562000319579182015b8281111562000319578251825591602001919060010190620002fc565b50620003279291506200032b565b5090565b5b808211156200032757600081556001016200032c565b600082601f8301126200035457600080fd5b81516001600160401b038082111562000371576200037162000543565b604051601f8301601f19908116603f011681019082821181831017156200039c576200039c62000543565b81604052838152602092508683858801011115620003b957600080fd5b600091505b83821015620003dd5785820183015181830184015290820190620003be565b83821115620003ef5760008385830101525b9695505050505050565b6000602082840312156200040c57600080fd5b8151620004198162000559565b9392505050565b600080600080600080600060e0888a0312156200043c57600080fd5b8751620004498162000559565b602089015160408a015160608b015192995090975095506001600160401b03808211156200047657600080fd5b620004848b838c0162000342565b955060808a01519150808211156200049b57600080fd5b50620004aa8a828b0162000342565b93505060a0880151915060c0880151905092959891949750929550565b60008060408385031215620004db57600080fd5b8251620004e88162000559565b6020840151909250620004fb8162000559565b809150509250929050565b600181811c908216806200051b57607f821691505b602082108114156200053d57634e487b7160e01b600052602260045260246000fd5b50919050565b634e487b7160e01b600052604160045260246000fd5b6001600160a01b03811681146200056f57600080fd5b50565b6106c880620005826000396000f3fe6080604052600436106101485760003560e01c80637ecebe00116100c0578063cfd7b0df11610074578063dd62ed3e11610059578063dd62ed3e1461040d578063e3b2594f14610445578063f72655ef1461045b5761014f565b8063cfd7b0df146103b3578063d7dfa0dd146103e05761014f565b806395d89b41116100a557806395d89b411461035b578063a001ecdd14610370578063b8ddbcb3146103865761014f565b80637ecebe00146103185780638dc06c7f146103455761014f565b8063200d2ed211610117578063570ca735116100fc578063570ca735146102a857806370a08231146102d55780637b4044a0146103025761014f565b8063200d2ed21461025a578063313ce567146102815761014f565b806306fdde031461019057806318160ddd146101bb57806318a855c7146101df5780631bb534ba146102085761014f565b3661014f57005b60105460405173ffffffffffffffffffffffffffffffffffffffff9091169036600082376000803683855af43d806000843e81801561018c578184f35b8184fd5b34801561019c57600080fd5b506101a5610471565b6040516101b291906105cb565b60405180910390f35b3480156101c757600080fd5b506101d1600c5481565b6040519081526020016101b2565b3480156101eb57600080fd5b506101f561038481565b60405161ffff90911681526020016101b2565b34801561021457600080fd5b506001546102359073ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020016101b2565b34801561026657600080fd5b506008546102749060ff1681565b6040516101b2919061058a565b34801561028d57600080fd5b50610296601281565b60405160ff90911681526020016101b2565b3480156102b457600080fd5b506000546102359073ffffffffffffffffffffffffffffffffffffffff1681565b3480156102e157600080fd5b506101d16102f0366004610535565b600d6020526000908152604090205481565b34801561030e57600080fd5b506101d160055481565b34801561032457600080fd5b506101d1610333366004610535565b600f6020526000908152604090205481565b34801561035157600080fd5b506101d1600b5481565b34801561036757600080fd5b506101a56104ff565b34801561037c57600080fd5b506101d160045481565b34801561039257600080fd5b506011546102359073ffffffffffffffffffffffffffffffffffffffff1681565b3480156103bf57600080fd5b506002546102359073ffffffffffffffffffffffffffffffffffffffff1681565b3480156103ec57600080fd5b506010546102359073ffffffffffffffffffffffffffffffffffffffff1681565b34801561041957600080fd5b506101d1610428366004610557565b600e60209081526000928352604080842090915290825290205481565b34801561045157600080fd5b506101d160035481565b34801561046757600080fd5b506101d1600a5481565b6007805461047e9061063e565b80601f01602080910402602001604051908101604052809291908181526020018280546104aa9061063e565b80156104f75780601f106104cc576101008083540402835291602001916104f7565b820191906000526020600020905b8154815290600101906020018083116104da57829003601f168201915b505050505081565b6006805461047e9061063e565b803573ffffffffffffffffffffffffffffffffffffffff8116811461053057600080fd5b919050565b60006020828403121561054757600080fd5b6105508261050c565b9392505050565b6000806040838503121561056a57600080fd5b6105738361050c565b91506105816020840161050c565b90509250929050565b60208101600283106105c5577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b91905290565b600060208083528351808285015260005b818110156105f8578581018301518582016040015282016105dc565b8181111561060a576000604083870101525b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016929092016040019392505050565b600181811c9082168061065257607f821691505b6020821081141561068c577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b5091905056fea2646970667358221220b229364e7a9918553c008bca2249fc251b0662b166387bb68248fe64daee07b864736f6c63430008060033a26469706673582212208fd396d323db6525448a1ffdbe320dac0c9e202bf72592460bca2ffca9c8106464736f6c63430008060033

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

0000000000000000000000002330ee705ffd040bb0cba8cb7734dfe00e7c4b570000000000000000000000005b5746f6f5e2db8bf5e260829ca7a004c876b167000000000000000000000000c4e0f3ec24972c75df7c716922096f4270b7bb4e0000000000000000000000001171b858777120a59a6cc8148edda8982f187cd800000000000000000000000021a93be569666527dae0fdbfbe7715299dec1202

-----Decoded View---------------
Arg [0] : owner_ (address): 0x2330ee705fFD040bB0cbA8CB7734Dfe00E7C4b57
Arg [1] : logic_ (address): 0x5b5746F6f5e2Db8BF5e260829CA7a004c876B167
Arg [2] : editions_ (address): 0xC4E0f3Ec24972C75dF7c716922096F4270b7bB4e
Arg [3] : tributaryRegistry_ (address): 0x1171B858777120a59a6cc8148eDda8982F187Cd8
Arg [4] : treasuryConfig_ (address): 0x21A93bE569666527dAe0FDBFbe7715299dEC1202

-----Encoded View---------------
5 Constructor Arguments found :
Arg [0] : 0000000000000000000000002330ee705ffd040bb0cba8cb7734dfe00e7c4b57
Arg [1] : 0000000000000000000000005b5746f6f5e2db8bf5e260829ca7a004c876b167
Arg [2] : 000000000000000000000000c4e0f3ec24972c75df7c716922096f4270b7bb4e
Arg [3] : 0000000000000000000000001171b858777120a59a6cc8148edda8982f187cd8
Arg [4] : 00000000000000000000000021a93be569666527dae0fdbfbe7715299dec1202


Block Transaction Difficulty Gas Used Reward
View All Blocks Produced

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

Validator Index Block Amount
View All Withdrawals

Transaction Hash Block Value Eth2 PubKey Valid
View All Deposits
Loading...
Loading
[ Download: CSV Export  ]
[ Download: CSV Export  ]

A contract address hosts a smart contract, which is a set of code stored on the blockchain that runs when predetermined conditions are met. Learn more about addresses in our Knowledge Base.