ETH Price: $1,975.69 (+0.68%)
 

More Info

Private Name Tags

TokenTracker

Multichain Info

No addresses found
Age:24H
Reset Filter

Transaction Hash
Method
Block
From
To

There are no matching entries

Please try again later

Age:24H
Reset Filter

Advanced mode:
Parent Transaction Hash Method Block
From
To

There are no matching entries

Update your filters to view other transactions

View All Internal Transactions
Loading...
Loading
Loading...
Loading
Cross-Chain Transactions

Block Transaction Difficulty Gas Used Reward
View All Blocks Produced

Validator Index Block Amount
View All Withdrawals

Transaction Hash Block Value Eth2 PubKey Valid
View All Deposits
Loading...
Loading

Contract Source Code Verified (Exact Match)

Contract Name:
MirrorTreasury

Compiler Version
v0.8.6+commit.11564f7e

Optimization Enabled:
Yes with 2000 runs

Other Settings:
default evmVersion
// SPDX-License-Identifier: GPL-3.0-or-later
pragma solidity 0.8.6;

import {IDistributionLogic} from "../distribution/interface/IDistributionLogic.sol";
import {ITributaryRegistry} from "../interface/ITributaryRegistry.sol";
import {ITreasuryConfig} from "../interface/ITreasuryConfig.sol";
import {IMirrorTreasury} from "../interface/IMirrorTreasury.sol";
import {Governable} from "../lib/Governable.sol";

interface IERC20 {
    function transfer(address to, uint256 value) external returns (bool);
}

contract MirrorTreasury is IMirrorTreasury, Governable {
    // ============ Treasury Configuration ============

    // Used to pull the active distribution model.
    address public treasuryConfig;

    // ============ Tributary Registry ============

    // Used to find tributary addresses associated with Economic Producers.
    address public tributaryRegistry;

    // ============ Structs ============

    // Allows governance to execute generic functions.
    struct Call {
        // The target of the transaction.
        address target;
        // The value passed into the transaction.
        uint96 value;
        // Any data passed with the call.
        bytes data;
    }

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

    // Emitted when the treasury transfers ETH.
    event Transfer(address indexed from, address indexed to, uint256 value);
    // Emitted when the treasury transfers an ERC20 token.
    event ERC20Transfer(
        address indexed token,
        address indexed from,
        address indexed to,
        uint256 amount
    );

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

    // NOTE: Once deployed, tributaryRegistry and treasuryConfig should be set.
    constructor(address owner_) Governable(owner_) {}

    // ============ Treasury Contributions ============

    /**
     * A safe, public function for making contributions to the treasury.
     * If a tributary is registered for the contributor, then governance
     * tokens will be allocated according to the active distribution model.
     */
    function contribute(uint256 amount) public payable override {
        require(msg.value == amount, "msg.value != amount");
        _allocateGovernance(msg.sender, amount);
    }

    // Allows directly contributing with a specify treasury, but the sender
    // must be registered as a "singleton producer" - e.g. auctions house.
    function contributeWithTributary(address tributary)
        public
        payable
        override
    {
        // Here we don't revert, but instead just don't allocate goverance
        // if the call isn't registered as an economic producer.
        if (
            ITributaryRegistry(tributaryRegistry).singletonProducer(msg.sender)
        ) {
            _allocateGovernanceToTributary(tributary, msg.value);
        }
    }

    /**
     * Allows receiving ETH, and can mint treasury governance tokens in
     * exchange. Uses a registry to specify which addresses are allowed
     * to receive gov tokens in exchange for contributing ETH.
     */
    receive() external payable {
        _allocateGovernance(msg.sender, msg.value);
    }

    // ============ Treasury Configuration ============

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

    // ============ Tributary Registry Configuration ============

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

    // ============ Funds Administration ============

    function transferFunds(address payable to, uint256 value)
        external
        override
        onlyGovernance
    {
        _sendFunds(to, value);
        emit Transfer(address(this), to, value);
    }

    function transferERC20(
        address token,
        address to,
        uint256 amount
    ) external override onlyGovernance {
        IERC20(token).transfer(to, amount);
        emit ERC20Transfer(token, address(this), to, amount);
    }

    // ============ Generic Call Execution ============

    function executeGeneric(Call memory call) public onlyGovernance {
        (bool ok, ) = call.target.call{value: uint256(call.value)}(call.data);

        require(ok, "execute transaction failed");
    }

    // ============ Private Utils ============

    function _sendFunds(address payable recipient, uint256 amount) private {
        require(
            address(this).balance >= amount,
            "Insufficient balance for send"
        );

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

    function _allocateGovernance(address producer, uint256 amount) private {
        // Get the tributary that was registered for the given producer.
        address tributary = ITributaryRegistry(tributaryRegistry)
            .producerToTributary(producer);

        _allocateGovernanceToTributary(tributary, amount);
    }

    function _allocateGovernanceToTributary(address tributary, uint256 amount)
        private
    {
        // If there is a registered tributary to mint Mirror tokens for,
        // then, here, we go and mint those tokens! Else, just accept ETH, no sweat.
        if (tributary != address(0)) {
            address distributionModel = ITreasuryConfig(treasuryConfig)
                .distributionModel();

            IDistributionLogic(distributionModel).distribute(tributary, amount);
        }
    }
}

// SPDX-License-Identifier: GPL-3.0-or-later
pragma solidity 0.8.6;

interface IDistributionLogic {
    function version() external returns (uint256);

    function distribute(address tributary, uint256 contribution) external;

    function claim(address claimant) external;

    function claimable(address claimant) external view returns (uint256);

    function increaseAwards(address member, uint256 amount) external;
}

// 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;
}

// 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);
}

// SPDX-License-Identifier: GPL-3.0-or-later
pragma solidity 0.8.6;

interface IMirrorTreasury {
    function transferFunds(address payable to, uint256 value) external;

    function transferERC20(
        address token,
        address to,
        uint256 value
    ) external;

    function contributeWithTributary(address tributary) external payable;

    function contribute(uint256 amount) external payable;
}

// 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;
    }
}

// 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;
    }
}

// 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

API
[{"inputs":[{"internalType":"address","name":"owner_","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"token","type":"address"},{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"ERC20Transfer","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"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","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":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"contribute","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"address","name":"tributary","type":"address"}],"name":"contributeWithTributary","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"components":[{"internalType":"address","name":"target","type":"address"},{"internalType":"uint96","name":"value","type":"uint96"},{"internalType":"bytes","name":"data","type":"bytes"}],"internalType":"struct MirrorTreasury.Call","name":"call","type":"tuple"}],"name":"executeGeneric","outputs":[],"stateMutability":"nonpayable","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":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"treasuryConfig_","type":"address"}],"name":"setTreasuryConfig","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"tributaryRegistry_","type":"address"}],"name":"setTributaryRegistry","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"token","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferERC20","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address payable","name":"to","type":"address"},{"internalType":"uint256","name":"value","type":"uint256"}],"name":"transferFunds","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"},{"stateMutability":"payable","type":"receive"}]

608060405234801561001057600080fd5b5060405161135e38038061135e83398101604081905261002f91610081565b600080546001600160a01b0319166001600160a01b038316908117825560405183928392917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a35050506100b1565b60006020828403121561009357600080fd5b81516001600160a01b03811681146100aa57600080fd5b9392505050565b61129e806100c06000396000f3fe6080604052600436106101485760003560e01c8063c1cbbca7116100c0578063e4c0aaf411610074578063ed459df211610059578063ed459df21461034c578063f1fe16631461036c578063f2fde38b1461038c57600080fd5b8063e4c0aaf414610319578063e75cb3021461033957600080fd5b8063cfd7b0df116100a5578063cfd7b0df146102b9578063d321de73146102d9578063d6811b6f146102f957600080fd5b8063c1cbbca714610286578063c7af33521461029957600080fd5b806379ba5097116101175780638f32d59b116100fc5780638f32d59b1461021a578063990dc9db146102465780639db5dbe41461026657600080fd5b806379ba5097146101e55780638da5cb5b146101fa57600080fd5b806303f411191461015e5780630c340a241461017e57806323452b9c146101bb578063715018a6146101d057600080fd5b366101595761015733346103ac565b005b600080fd5b34801561016a57600080fd5b5061015761017936600461107e565b61045b565b34801561018a57600080fd5b5060025461019e906001600160a01b031681565b6040516001600160a01b0390911681526020015b60405180910390f35b3480156101c757600080fd5b5061015761059b565b3480156101dc57600080fd5b50610157610614565b3480156101f157600080fd5b506101576106b7565b34801561020657600080fd5b5060005461019e906001600160a01b031681565b34801561022657600080fd5b506000546001600160a01b031633145b60405190151581526020016101b2565b34801561025257600080fd5b50610157610261366004610fef565b61078c565b34801561027257600080fd5b5061015761028136600461101b565b610849565b610157610294366004611176565b6109b0565b3480156102a557600080fd5b506002546001600160a01b03163314610236565b3480156102c557600080fd5b5060035461019e906001600160a01b031681565b3480156102e557600080fd5b506101576102f4366004610fae565b610a0c565b34801561030557600080fd5b5060045461019e906001600160a01b031681565b34801561032557600080fd5b50610157610334366004610fae565b610aaa565b610157610347366004610fae565b610b48565b34801561035857600080fd5b506001546001600160a01b03163314610236565b34801561037857600080fd5b50610157610387366004610fae565b610bee565b34801561039857600080fd5b506101576103a7366004610fae565b610c8c565b600480546040517fa57518560000000000000000000000000000000000000000000000000000000081526001600160a01b03858116938201939093526000929091169063a575185690602401602060405180830381600087803b15801561041257600080fd5b505af1158015610426573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061044a9190610fd2565b90506104568183610d6b565b505050565b6000546001600160a01b031633148061047e57506002546001600160a01b031633145b6104cf5760405162461bcd60e51b815260206004820152601860248201527f63616c6c6572206973206e6f7420676f7665726e616e6365000000000000000060448201526064015b60405180910390fd5b600081600001516001600160a01b031682602001516bffffffffffffffffffffffff168360400151604051610504919061118f565b60006040518083038185875af1925050503d8060008114610541576040519150601f19603f3d011682016040523d82523d6000602084013e610546565b606091505b50509050806105975760405162461bcd60e51b815260206004820152601a60248201527f65786563757465207472616e73616374696f6e206661696c656400000000000060448201526064016104c6565b5050565b6000546001600160a01b031633146105f55760405162461bcd60e51b815260206004820152601860248201527f63616c6c6572206973206e6f7420746865206f776e65722e000000000000000060448201526064016104c6565b6001805473ffffffffffffffffffffffffffffffffffffffff19169055565b6000546001600160a01b0316331461066e5760405162461bcd60e51b815260206004820152601860248201527f63616c6c6572206973206e6f7420746865206f776e65722e000000000000000060448201526064016104c6565b6000805473ffffffffffffffffffffffffffffffffffffffff1916815560405181907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a3565b6001546001600160a01b031633146107375760405162461bcd60e51b815260206004820152602c60248201527f63757272656e74206f776e6572206d757374207365742063616c6c657220617360448201527f206e657874206f776e65722e000000000000000000000000000000000000000060648201526084016104c6565b6001805473ffffffffffffffffffffffffffffffffffffffff19908116909155600080543392168217815560405182917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a3565b6000546001600160a01b03163314806107af57506002546001600160a01b031633145b6107fb5760405162461bcd60e51b815260206004820152601860248201527f63616c6c6572206973206e6f7420676f7665726e616e6365000000000000000060448201526064016104c6565b6108058282610e95565b6040518181526001600160a01b0383169030907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a35050565b6000546001600160a01b031633148061086c57506002546001600160a01b031633145b6108b85760405162461bcd60e51b815260206004820152601860248201527f63616c6c6572206973206e6f7420676f7665726e616e6365000000000000000060448201526064016104c6565b6040517fa9059cbb0000000000000000000000000000000000000000000000000000000081526001600160a01b0383811660048301526024820183905284169063a9059cbb90604401602060405180830381600087803b15801561091b57600080fd5b505af115801561092f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610953919061105c565b50816001600160a01b0316306001600160a01b0316846001600160a01b03167f16e1b64802081839623a4bec223b20b6ee097d9edd8fcef3d4ceb3a94271306e846040516109a391815260200190565b60405180910390a4505050565b8034146109ff5760405162461bcd60e51b815260206004820152601360248201527f6d73672e76616c756520213d20616d6f756e740000000000000000000000000060448201526064016104c6565b610a0933826103ac565b50565b6000546001600160a01b0316331480610a2f57506002546001600160a01b031633145b610a7b5760405162461bcd60e51b815260206004820152601860248201527f63616c6c6572206973206e6f7420676f7665726e616e6365000000000000000060448201526064016104c6565b6004805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b0392909216919091179055565b6000546001600160a01b0316331480610acd57506002546001600160a01b031633145b610b195760405162461bcd60e51b815260206004820152601860248201527f63616c6c6572206973206e6f7420676f7665726e616e6365000000000000000060448201526064016104c6565b6002805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b0392909216919091179055565b600480546040517fad0a44a100000000000000000000000000000000000000000000000000000000815233928101929092526001600160a01b03169063ad0a44a190602401602060405180830381600087803b158015610ba757600080fd5b505af1158015610bbb573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610bdf919061105c565b15610a0957610a098134610d6b565b6000546001600160a01b0316331480610c1157506002546001600160a01b031633145b610c5d5760405162461bcd60e51b815260206004820152601860248201527f63616c6c6572206973206e6f7420676f7665726e616e6365000000000000000060448201526064016104c6565b6003805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b0392909216919091179055565b6000546001600160a01b03163314610ce65760405162461bcd60e51b815260206004820152601860248201527f63616c6c6572206973206e6f7420746865206f776e65722e000000000000000060448201526064016104c6565b6001600160a01b038116610d3c5760405162461bcd60e51b815260206004820152601f60248201527f4e657874206f776e657220697320746865207a65726f20616464726573732e0060448201526064016104c6565b6001805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b0392909216919091179055565b6001600160a01b0382161561059757600354604080517f3174044800000000000000000000000000000000000000000000000000000000815290516000926001600160a01b031691633174044891600480830192602092919082900301818787803b158015610dd957600080fd5b505af1158015610ded573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e119190610fd2565b6040517ffb9321080000000000000000000000000000000000000000000000000000000081526001600160a01b038581166004830152602482018590529192509082169063fb93210890604401600060405180830381600087803b158015610e7857600080fd5b505af1158015610e8c573d6000803e3d6000fd5b50505050505050565b80471015610ee55760405162461bcd60e51b815260206004820152601d60248201527f496e73756666696369656e742062616c616e636520666f722073656e6400000060448201526064016104c6565b6000826001600160a01b03168260405160006040518083038185875af1925050503d8060008114610f32576040519150601f19603f3d011682016040523d82523d6000602084013e610f37565b606091505b50509050806104565760405162461bcd60e51b815260206004820152603160248201527f556e61626c6520746f2073656e642076616c75653a20726563697069656e742060448201527f6d6179206861766520726576657274656400000000000000000000000000000060648201526084016104c6565b600060208284031215610fc057600080fd5b8135610fcb81611253565b9392505050565b600060208284031215610fe457600080fd5b8151610fcb81611253565b6000806040838503121561100257600080fd5b823561100d81611253565b946020939093013593505050565b60008060006060848603121561103057600080fd5b833561103b81611253565b9250602084013561104b81611253565b929592945050506040919091013590565b60006020828403121561106e57600080fd5b81518015158114610fcb57600080fd5b6000602080838503121561109157600080fd5b823567ffffffffffffffff808211156110a957600080fd5b90840190606082870312156110bd57600080fd5b6110c56111ca565b82356110d081611253565b8152828401356bffffffffffffffffffffffff811681146110f057600080fd5b8185015260408301358281111561110657600080fd5b80840193505086601f84011261111b57600080fd5b82358281111561112d5761112d611224565b61113f85601f19601f840116016111f3565b9250808352878582860101111561115557600080fd5b80858501868501376000908301909401939093526040830152509392505050565b60006020828403121561118857600080fd5b5035919050565b6000825160005b818110156111b05760208186018101518583015201611196565b818111156111bf576000828501525b509190910192915050565b6040516060810167ffffffffffffffff811182821017156111ed576111ed611224565b60405290565b604051601f8201601f1916810167ffffffffffffffff8111828210171561121c5761121c611224565b604052919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6001600160a01b0381168114610a0957600080fdfea26469706673582212207f68092614ab73a35f04d9e9a58f6d3ded23fabc603aba3f1de5fc1cc61c3eef64736f6c634300080600330000000000000000000000002330ee705ffd040bb0cba8cb7734dfe00e7c4b57

Deployed Bytecode

0x6080604052600436106101485760003560e01c8063c1cbbca7116100c0578063e4c0aaf411610074578063ed459df211610059578063ed459df21461034c578063f1fe16631461036c578063f2fde38b1461038c57600080fd5b8063e4c0aaf414610319578063e75cb3021461033957600080fd5b8063cfd7b0df116100a5578063cfd7b0df146102b9578063d321de73146102d9578063d6811b6f146102f957600080fd5b8063c1cbbca714610286578063c7af33521461029957600080fd5b806379ba5097116101175780638f32d59b116100fc5780638f32d59b1461021a578063990dc9db146102465780639db5dbe41461026657600080fd5b806379ba5097146101e55780638da5cb5b146101fa57600080fd5b806303f411191461015e5780630c340a241461017e57806323452b9c146101bb578063715018a6146101d057600080fd5b366101595761015733346103ac565b005b600080fd5b34801561016a57600080fd5b5061015761017936600461107e565b61045b565b34801561018a57600080fd5b5060025461019e906001600160a01b031681565b6040516001600160a01b0390911681526020015b60405180910390f35b3480156101c757600080fd5b5061015761059b565b3480156101dc57600080fd5b50610157610614565b3480156101f157600080fd5b506101576106b7565b34801561020657600080fd5b5060005461019e906001600160a01b031681565b34801561022657600080fd5b506000546001600160a01b031633145b60405190151581526020016101b2565b34801561025257600080fd5b50610157610261366004610fef565b61078c565b34801561027257600080fd5b5061015761028136600461101b565b610849565b610157610294366004611176565b6109b0565b3480156102a557600080fd5b506002546001600160a01b03163314610236565b3480156102c557600080fd5b5060035461019e906001600160a01b031681565b3480156102e557600080fd5b506101576102f4366004610fae565b610a0c565b34801561030557600080fd5b5060045461019e906001600160a01b031681565b34801561032557600080fd5b50610157610334366004610fae565b610aaa565b610157610347366004610fae565b610b48565b34801561035857600080fd5b506001546001600160a01b03163314610236565b34801561037857600080fd5b50610157610387366004610fae565b610bee565b34801561039857600080fd5b506101576103a7366004610fae565b610c8c565b600480546040517fa57518560000000000000000000000000000000000000000000000000000000081526001600160a01b03858116938201939093526000929091169063a575185690602401602060405180830381600087803b15801561041257600080fd5b505af1158015610426573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061044a9190610fd2565b90506104568183610d6b565b505050565b6000546001600160a01b031633148061047e57506002546001600160a01b031633145b6104cf5760405162461bcd60e51b815260206004820152601860248201527f63616c6c6572206973206e6f7420676f7665726e616e6365000000000000000060448201526064015b60405180910390fd5b600081600001516001600160a01b031682602001516bffffffffffffffffffffffff168360400151604051610504919061118f565b60006040518083038185875af1925050503d8060008114610541576040519150601f19603f3d011682016040523d82523d6000602084013e610546565b606091505b50509050806105975760405162461bcd60e51b815260206004820152601a60248201527f65786563757465207472616e73616374696f6e206661696c656400000000000060448201526064016104c6565b5050565b6000546001600160a01b031633146105f55760405162461bcd60e51b815260206004820152601860248201527f63616c6c6572206973206e6f7420746865206f776e65722e000000000000000060448201526064016104c6565b6001805473ffffffffffffffffffffffffffffffffffffffff19169055565b6000546001600160a01b0316331461066e5760405162461bcd60e51b815260206004820152601860248201527f63616c6c6572206973206e6f7420746865206f776e65722e000000000000000060448201526064016104c6565b6000805473ffffffffffffffffffffffffffffffffffffffff1916815560405181907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a3565b6001546001600160a01b031633146107375760405162461bcd60e51b815260206004820152602c60248201527f63757272656e74206f776e6572206d757374207365742063616c6c657220617360448201527f206e657874206f776e65722e000000000000000000000000000000000000000060648201526084016104c6565b6001805473ffffffffffffffffffffffffffffffffffffffff19908116909155600080543392168217815560405182917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a3565b6000546001600160a01b03163314806107af57506002546001600160a01b031633145b6107fb5760405162461bcd60e51b815260206004820152601860248201527f63616c6c6572206973206e6f7420676f7665726e616e6365000000000000000060448201526064016104c6565b6108058282610e95565b6040518181526001600160a01b0383169030907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a35050565b6000546001600160a01b031633148061086c57506002546001600160a01b031633145b6108b85760405162461bcd60e51b815260206004820152601860248201527f63616c6c6572206973206e6f7420676f7665726e616e6365000000000000000060448201526064016104c6565b6040517fa9059cbb0000000000000000000000000000000000000000000000000000000081526001600160a01b0383811660048301526024820183905284169063a9059cbb90604401602060405180830381600087803b15801561091b57600080fd5b505af115801561092f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610953919061105c565b50816001600160a01b0316306001600160a01b0316846001600160a01b03167f16e1b64802081839623a4bec223b20b6ee097d9edd8fcef3d4ceb3a94271306e846040516109a391815260200190565b60405180910390a4505050565b8034146109ff5760405162461bcd60e51b815260206004820152601360248201527f6d73672e76616c756520213d20616d6f756e740000000000000000000000000060448201526064016104c6565b610a0933826103ac565b50565b6000546001600160a01b0316331480610a2f57506002546001600160a01b031633145b610a7b5760405162461bcd60e51b815260206004820152601860248201527f63616c6c6572206973206e6f7420676f7665726e616e6365000000000000000060448201526064016104c6565b6004805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b0392909216919091179055565b6000546001600160a01b0316331480610acd57506002546001600160a01b031633145b610b195760405162461bcd60e51b815260206004820152601860248201527f63616c6c6572206973206e6f7420676f7665726e616e6365000000000000000060448201526064016104c6565b6002805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b0392909216919091179055565b600480546040517fad0a44a100000000000000000000000000000000000000000000000000000000815233928101929092526001600160a01b03169063ad0a44a190602401602060405180830381600087803b158015610ba757600080fd5b505af1158015610bbb573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610bdf919061105c565b15610a0957610a098134610d6b565b6000546001600160a01b0316331480610c1157506002546001600160a01b031633145b610c5d5760405162461bcd60e51b815260206004820152601860248201527f63616c6c6572206973206e6f7420676f7665726e616e6365000000000000000060448201526064016104c6565b6003805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b0392909216919091179055565b6000546001600160a01b03163314610ce65760405162461bcd60e51b815260206004820152601860248201527f63616c6c6572206973206e6f7420746865206f776e65722e000000000000000060448201526064016104c6565b6001600160a01b038116610d3c5760405162461bcd60e51b815260206004820152601f60248201527f4e657874206f776e657220697320746865207a65726f20616464726573732e0060448201526064016104c6565b6001805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b0392909216919091179055565b6001600160a01b0382161561059757600354604080517f3174044800000000000000000000000000000000000000000000000000000000815290516000926001600160a01b031691633174044891600480830192602092919082900301818787803b158015610dd957600080fd5b505af1158015610ded573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e119190610fd2565b6040517ffb9321080000000000000000000000000000000000000000000000000000000081526001600160a01b038581166004830152602482018590529192509082169063fb93210890604401600060405180830381600087803b158015610e7857600080fd5b505af1158015610e8c573d6000803e3d6000fd5b50505050505050565b80471015610ee55760405162461bcd60e51b815260206004820152601d60248201527f496e73756666696369656e742062616c616e636520666f722073656e6400000060448201526064016104c6565b6000826001600160a01b03168260405160006040518083038185875af1925050503d8060008114610f32576040519150601f19603f3d011682016040523d82523d6000602084013e610f37565b606091505b50509050806104565760405162461bcd60e51b815260206004820152603160248201527f556e61626c6520746f2073656e642076616c75653a20726563697069656e742060448201527f6d6179206861766520726576657274656400000000000000000000000000000060648201526084016104c6565b600060208284031215610fc057600080fd5b8135610fcb81611253565b9392505050565b600060208284031215610fe457600080fd5b8151610fcb81611253565b6000806040838503121561100257600080fd5b823561100d81611253565b946020939093013593505050565b60008060006060848603121561103057600080fd5b833561103b81611253565b9250602084013561104b81611253565b929592945050506040919091013590565b60006020828403121561106e57600080fd5b81518015158114610fcb57600080fd5b6000602080838503121561109157600080fd5b823567ffffffffffffffff808211156110a957600080fd5b90840190606082870312156110bd57600080fd5b6110c56111ca565b82356110d081611253565b8152828401356bffffffffffffffffffffffff811681146110f057600080fd5b8185015260408301358281111561110657600080fd5b80840193505086601f84011261111b57600080fd5b82358281111561112d5761112d611224565b61113f85601f19601f840116016111f3565b9250808352878582860101111561115557600080fd5b80858501868501376000908301909401939093526040830152509392505050565b60006020828403121561118857600080fd5b5035919050565b6000825160005b818110156111b05760208186018101518583015201611196565b818111156111bf576000828501525b509190910192915050565b6040516060810167ffffffffffffffff811182821017156111ed576111ed611224565b60405290565b604051601f8201601f1916810167ffffffffffffffff8111828210171561121c5761121c611224565b604052919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6001600160a01b0381168114610a0957600080fdfea26469706673582212207f68092614ab73a35f04d9e9a58f6d3ded23fabc603aba3f1de5fc1cc61c3eef64736f6c63430008060033

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

0000000000000000000000002330ee705ffd040bb0cba8cb7734dfe00e7c4b57

-----Decoded View---------------
Arg [0] : owner_ (address): 0x2330ee705fFD040bB0cbA8CB7734Dfe00E7C4b57

-----Encoded View---------------
1 Constructor Arguments found :
Arg [0] : 0000000000000000000000002330ee705ffd040bb0cba8cb7734dfe00e7c4b57


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

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.