GLMR Price: $0.017779 (-6.67%)

Contract

0xfcBe3F5123d7620138459771B75088D953B9f555

Overview

GLMR Balance

Moonbeam Chain LogoMoonbeam Chain LogoMoonbeam Chain Logo0 GLMR

GLMR Value

$0.00

More Info

Private Name Tags

Multichain Info

No addresses found
Transaction Hash
Block
From
To
Create30042482023-02-22 16:06:061073 days ago1677081966IN
0xfcBe3F51...953B9f555
0 GLMR0.25140585101.5
Create26383932023-01-01 21:50:481125 days ago1672609848IN
0xfcBe3F51...953B9f555
0 GLMR0.2513888101.5
Set OA26148452022-12-29 13:55:061129 days ago1672322106IN
0xfcBe3F51...953B9f555
0 GLMR0.0047354100
Set OA26148432022-12-29 13:54:421129 days ago1672322082IN
0xfcBe3F51...953B9f555
0 GLMR0.0047378100
Set OA26148402022-12-29 13:54:061129 days ago1672322046IN
0xfcBe3F51...953B9f555
0 GLMR0.0047366100
Set OA26148382022-12-29 13:53:421129 days ago1672322022IN
0xfcBe3F51...953B9f555
0 GLMR0.004739100
Set OA26148362022-12-29 13:53:121129 days ago1672321992IN
0xfcBe3F51...953B9f555
0 GLMR0.004739100
Set OA26148342022-12-29 13:52:481129 days ago1672321968IN
0xfcBe3F51...953B9f555
0 GLMR0.0047378100
Set OA26148322022-12-29 13:52:241129 days ago1672321944IN
0xfcBe3F51...953B9f555
0 GLMR0.0047402100
Set OA26148302022-12-29 13:52:001129 days ago1672321920IN
0xfcBe3F51...953B9f555
0 GLMR0.004733100
Set OA26148282022-12-29 13:51:361129 days ago1672321896IN
0xfcBe3F51...953B9f555
0 GLMR0.004739100
Set Repository26078082022-12-28 14:01:361130 days ago1672236096IN
0xfcBe3F51...953B9f555
0 GLMR0.0068489100

View more zero value Internal Transactions in Advanced View mode

Cross-Chain Transactions
Loading...
Loading

Contract Source Code Verified (Exact Match)

Contract Name:
CollectionFactory

Compiler Version
v0.8.7+commit.e28d00a7

Optimization Enabled:
Yes with 1 runs

Other Settings:
default evmVersion
// SPDX-License-Identifier: MIT
// omnisea-contracts v1.1

pragma solidity ^0.8.7;

import "../interfaces/ICollectionsRepository.sol";
import "../interfaces/IOmniApp.sol";
import "../interfaces/IOmnichainRouter.sol";
import "../interfaces/IOmniseaPointsRepository.sol";
import { CreateParams } from "../structs/erc721/ERC721Structs.sol";
import "@openzeppelin/contracts/access/Ownable.sol";

/**
 * @title CollectionFactory
 * @author Omnisea
 * @custom:version 1.0
 * @notice CollectionFactory is ERC721 collection creation service.
 *         Contract is responsible for validating and executing the function that creates ERC721 collection.
 *         Enables delegation of cross-chain collection creation via Omnichain Router which abstracts underlying cross-chain messaging.
 *         messaging protocols such as LayerZero and Axelar Network.
 *         With the TokenFactory contract, it is designed to avoid burn & mint mechanism to keep NFT's non-fungibility,
 *         on-chain history, and references to contracts. It supports cross-chain actions instead of ERC721 "transfer",
 *         and allows simultaneous actions from many chains, without requiring the NFT presence on the same chain as
 *         the user performing the action (e.g. mint).
 */
contract CollectionFactory is IOmniApp, Ownable {
    event OmReceived(string srcChain, address srcOA);

    address public repository;
    string public chainName;
    mapping(string => address) public remoteChainToOA;
    ICollectionsRepository private _collectionsRepository;
    IOmnichainRouter public omnichainRouter;
    IOmniseaPointsRepository public pointsRepository;
    address private _redirectionsBudgetManager;

    /**
     * @notice Sets the contract owner, router, and indicates source chain name for mappings.
     *
     * @param _router A contract that handles cross-chain messaging used to extend ERC721 with omnichain capabilities.
     */
    constructor(IOmnichainRouter _router) {
        chainName = "Moonbeam";
        omnichainRouter = _router;
        _redirectionsBudgetManager = address(0x61104fBe07ecc735D8d84422c7f045f8d29DBf15);
    }

    /**
     * @notice Sets the Collection Repository responsible for creating ERC721 contract and storing reference.
     *
     * @param repo The CollectionsRepository contract address.
     */
    function setRepository(address repo) external onlyOwner {
        _collectionsRepository = ICollectionsRepository(repo);
        repository = repo;
    }

    function setRouter(IOmnichainRouter _router) external onlyOwner {
        omnichainRouter = _router;
    }

    function setRedirectionsBudgetManager(address _newManager) external onlyOwner {
        _redirectionsBudgetManager = _newManager;
    }

    function setChainName(string memory _chainName) external onlyOwner {
        chainName = _chainName;
    }

    function setPointsRepository(IOmniseaPointsRepository _pointsRepository) external onlyOwner {
        pointsRepository = _pointsRepository;
    }

    /**
     * @notice Handles the ERC721 collection creation logic.
     *         Validates data and delegates contract creation to repository.
     *         Delegates task to the Omnichain Router based on the varying chainName and dstChainName.
     *
     * @param params See CreateParams struct in ERC721Structs.sol.
     */
    function create(CreateParams calldata params) public payable {
        require(bytes(params.name).length >= 2);

        if (params.points > 0) {
            require(address(pointsRepository) != address(0), "!pointsRepository");
            pointsRepository.subtract(msg.sender, params.points);
        }

        if (keccak256(bytes(params.dstChainName)) == keccak256(bytes(chainName))) {
            _collectionsRepository.create(params, msg.sender);
            return;
        }

        require(isOA(params.dstChainName, remoteChainToOA[params.dstChainName]), "!OA");

        omnichainRouter.send{value : msg.value}(
            params.dstChainName,
            remoteChainToOA[params.dstChainName],
            abi.encode(params, msg.sender),
            params.gas,
            msg.sender,
            params.redirectFee
        );
    }

    /**
     * @notice Handles the incoming ERC721 collection creation task from other chains received from Omnichain Router.
     *         Validates User Application.

     * @param _payload Encoded CreateParams data.
     * @param srcOA Address of the remote OA.
     * @param srcChain Name of the remote OA chain.
     */
    function omReceive(bytes calldata _payload, address srcOA, string memory srcChain) external override {
        emit OmReceived(srcChain, srcOA);
        require(isOA(srcChain, srcOA), "!OA");
        (CreateParams memory params, address creator) = abi.decode(_payload, (CreateParams, address));
        _collectionsRepository.create(
            params,
            creator
        );
    }

    /**
     * @notice Sets the remote Omnichain Applications ("OA") addresses to meet omReceive() validation.
     *
     * @param remoteChainName Name of the remote chain.
     * @param remoteOA Address of the remote OA.
     */
    function setOA(string calldata remoteChainName, address remoteOA) external onlyOwner {
        remoteChainToOA[remoteChainName] = remoteOA;
    }

    /**
     * @notice Checks the presence of the selected remote User Application ("OA").
     *
     * @param remoteChainName Name of the remote chain.
     * @param remoteOA Address of the remote OA.
     */
    function isOA(string memory remoteChainName, address remoteOA) public view returns (bool) {
        return remoteOA != address(0) && remoteChainToOA[remoteChainName] == remoteOA;
    }

    function withdrawOARedirectFees() external onlyOwner {
        omnichainRouter.withdrawOARedirectFees(_redirectionsBudgetManager);
    }

    receive() external payable {}
}

// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts v4.4.1 (access/Ownable.sol)

pragma solidity ^0.8.0;

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

/**
 * @dev Contract module which provides a basic access control mechanism, where
 * there is an account (an owner) that can be granted exclusive access to
 * specific functions.
 *
 * By default, the owner account will be the one that deploys the contract. This
 * can later be changed with {transferOwnership}.
 *
 * This module is used through inheritance. It will make available the modifier
 * `onlyOwner`, which can be applied to your functions to restrict their use to
 * the owner.
 */
abstract contract Ownable is Context {
    address private _owner;

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

    /**
     * @dev Initializes the contract setting the deployer as the initial owner.
     */
    constructor() {
        _transferOwnership(_msgSender());
    }

    /**
     * @dev Returns the address of the current owner.
     */
    function owner() public view virtual returns (address) {
        return _owner;
    }

    /**
     * @dev Throws if called by any account other than the owner.
     */
    modifier onlyOwner() {
        require(owner() == _msgSender(), "Ownable: caller is not the owner");
        _;
    }

    /**
     * @dev Leaves the contract without owner. It will not be possible to call
     * `onlyOwner` functions anymore. Can only be called by the current owner.
     *
     * NOTE: Renouncing ownership will leave the contract without an owner,
     * thereby removing any functionality that is only available to the owner.
     */
    function renounceOwnership() public virtual onlyOwner {
        _transferOwnership(address(0));
    }

    /**
     * @dev Transfers ownership of the contract to a new account (`newOwner`).
     * Can only be called by the current owner.
     */
    function transferOwnership(address newOwner) public virtual onlyOwner {
        require(newOwner != address(0), "Ownable: new owner is the zero address");
        _transferOwnership(newOwner);
    }

    /**
     * @dev Transfers ownership of the contract to a new account (`newOwner`).
     * Internal function without access restriction.
     */
    function _transferOwnership(address newOwner) internal virtual {
        address oldOwner = _owner;
        _owner = newOwner;
        emit OwnershipTransferred(oldOwner, newOwner);
    }
}

// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts v4.4.1 (token/ERC20/IERC20.sol)

pragma solidity ^0.8.0;

/**
 * @dev Interface of the ERC20 standard as defined in the EIP.
 */
interface IERC20 {
    /**
     * @dev Returns the amount of tokens in existence.
     */
    function totalSupply() external view returns (uint256);

    /**
     * @dev Returns the amount of tokens owned by `account`.
     */
    function balanceOf(address account) external view returns (uint256);

    /**
     * @dev Moves `amount` tokens from the caller's account to `recipient`.
     *
     * Returns a boolean value indicating whether the operation succeeded.
     *
     * Emits a {Transfer} event.
     */
    function transfer(address recipient, uint256 amount) external returns (bool);

    /**
     * @dev Returns the remaining number of tokens that `spender` will be
     * allowed to spend on behalf of `owner` through {transferFrom}. This is
     * zero by default.
     *
     * This value changes when {approve} or {transferFrom} are called.
     */
    function allowance(address owner, address spender) external view returns (uint256);

    /**
     * @dev Sets `amount` as the allowance of `spender` over the caller's tokens.
     *
     * Returns a boolean value indicating whether the operation succeeded.
     *
     * IMPORTANT: Beware that changing an allowance with this method brings the risk
     * that someone may use both the old and the new allowance by unfortunate
     * transaction ordering. One possible solution to mitigate this race
     * condition is to first reduce the spender's allowance to 0 and set the
     * desired value afterwards:
     * https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729
     *
     * Emits an {Approval} event.
     */
    function approve(address spender, uint256 amount) external returns (bool);

    /**
     * @dev Moves `amount` tokens from `sender` to `recipient` using the
     * allowance mechanism. `amount` is then deducted from the caller's
     * allowance.
     *
     * Returns a boolean value indicating whether the operation succeeded.
     *
     * Emits a {Transfer} event.
     */
    function transferFrom(
        address sender,
        address recipient,
        uint256 amount
    ) external returns (bool);

    /**
     * @dev Emitted when `value` tokens are moved from one account (`from`) to
     * another (`to`).
     *
     * Note that `value` may be zero.
     */
    event Transfer(address indexed from, address indexed to, uint256 value);

    /**
     * @dev Emitted when the allowance of a `spender` for an `owner` is set by
     * a call to {approve}. `value` is the new allowance.
     */
    event Approval(address indexed owner, address indexed spender, uint256 value);
}

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

pragma solidity ^0.8.0;

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

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

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

import {CreateParams} from "../structs/erc721/ERC721Structs.sol";

interface ICollectionsRepository {
    /**
     * @notice Creates ERC721 collection contract and stores the reference to it with relation to a creator.
     *
     * @param params See CreateParams struct in ERC721Structs.sol.
     * @param creator The address of the collection creator.
     */
    function create(CreateParams calldata params, address creator) external;
}

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

interface IOmniApp {
    /**
     * @notice Handles the incoming tasks from other chains received from Omnichain Router.
     *
     * @param _payload Encoded MintParams data.
     * @param srcOA Address of the remote OA.
     * @param srcChain Name of the remote OA chain.
     */
    function omReceive(bytes calldata _payload, address srcOA, string memory srcChain) external;
}

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

interface IOmnichainRouter {
    /**
     * @notice Delegates the cross-chain task to the Omnichain Router.
     *
     * @param dstChainName Name of the remote chain.
     * @param dstUA Address of the remote User Application ("UA").
     * @param fnData Encoded payload with a data for a target function execution.
     * @param gas Cross-chain task (tx) execution gas limit
     * @param user Address of the user initiating the cross-chain task (for gas refund)
     * @param redirectFee Fee required to cover transaction fee on the redirectChain, if involved. OmnichainRouter-specific.
     *        Involved during cross-chain multi-protocol routing. For example, Optimism (LayerZero) to Moonbeam (Axelar).
     */
    function send(string memory dstChainName, address dstUA, bytes memory fnData, uint gas, address user, uint256 redirectFee) external payable;

    /**
     * @notice Router on source chain receives redirect fee on payable send() function call. This fee is accounted to srcUARedirectBudget.
     *         here, msg.sender is that srcUA. srcUA contract should implement this function and point the address below which manages redirection budget.
     *
     * @param redirectionBudgetManager Address pointed by the srcUA (msg.sender) executing this function.
     *        Responsible for funding srcUA redirection budget.
     */
    function withdrawOARedirectFees(address redirectionBudgetManager) external;
}

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

interface IOmniseaPointsRepository {
    function add(address _receiver, uint256 _quantity) external;
    function subtract(address _receiver, uint256 _quantity) external;
}

File 9 of 9 : ERC721Structs.sol
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.7;

import "@openzeppelin/contracts/token/ERC20/IERC20.sol";

/**
     * @notice Parameters for ERC721 collection creation.
     *
     * @param dstChainName Name of the destination chain.
     * @param name Name of the collection.
     * @param uri URI to collection's metadata.
     * @param fileURI URI of the file linked with the collection.
     * @param price Price for a single ERC721 mint.
     * @param assetName Mapping name of the ERC20 being a currency for the minting price.
     * @param from Minting start date.
     * @param to Minting end date.
     * @param tokensURI CID of the NFTs metadata directory.
     * @param maxSupply Collection's max supply. Unlimited if 0.
     * @param isZeroIndexed First token ID.
     * @param gas Cross-chain task (tx) execution gas limit
     * @param redirectFee Fee required to cover transaction fee on the redirectChain, if involved. OmnichainRouter-specific.
     *        Involved during cross-chain multi-protocol routing. For example, Optimism (LayerZero) to Moonbeam (Axelar).
     */
struct CreateParams {
    string dstChainName;
    string name;
    string uri;
    uint256 price;
    string assetName;
    uint256 from;
    uint256 to;
    string tokensURI;
    uint256 maxSupply;
    bool isZeroIndexed;
    uint256 points;
    uint gas;
    uint256 redirectFee;
}

/**
     * @notice Parameters for ERC721 mint.
     *
     * @param dstChainName Name of the destination (NFT's) chain.
     * @param coll Address of the collection.
     * @param mintPrice Price for the ERC721 mint. Used during cross-chain mint for locking purpose. Validated on the dstChain.
     * @param assetName Mapping name of the ERC20 being a currency for the minting price.
     * @param creator Address of the creator.
     * @param gas Cross-chain task (tx) execution gas limit
     * @param redirectFee Fee required to cover transaction fee on the redirectChain, if involved. OmnichainRouter-specific.
     *        Involved during cross-chain multi-protocol routing. For example, Optimism (LayerZero) to Moonbeam (Axelar).
     */
struct MintParams {
    string dstChainName;
    address coll;
    uint256 mintPrice;
    string assetName;
    uint256 quantity;
    address creator;
    bytes32[] merkleProof;
    uint256 gas;
    uint256 redirectFee;
}

/**
  * @notice Asset supported for omnichain minting.
  *
  * @param dstChainName Name of the destination (NFT's) chain.
  * @param coll Address of the collection.
*/
struct Asset {
    IERC20 token;
    uint256 decimals;
}

struct Allowlist {
    uint256 maxPerAddress;
    uint256 maxPerAddressPublic;
    uint256 publicFrom;
    uint256 price;
    bytes32 merkleRoot;
    bool isEnabled;
}

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

Contract Security Audit

Contract ABI

API
[{"inputs":[{"internalType":"contract IOmnichainRouter","name":"_router","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"string","name":"srcChain","type":"string"},{"indexed":false,"internalType":"address","name":"srcOA","type":"address"}],"name":"OmReceived","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":"chainName","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"components":[{"internalType":"string","name":"dstChainName","type":"string"},{"internalType":"string","name":"name","type":"string"},{"internalType":"string","name":"uri","type":"string"},{"internalType":"uint256","name":"price","type":"uint256"},{"internalType":"string","name":"assetName","type":"string"},{"internalType":"uint256","name":"from","type":"uint256"},{"internalType":"uint256","name":"to","type":"uint256"},{"internalType":"string","name":"tokensURI","type":"string"},{"internalType":"uint256","name":"maxSupply","type":"uint256"},{"internalType":"bool","name":"isZeroIndexed","type":"bool"},{"internalType":"uint256","name":"points","type":"uint256"},{"internalType":"uint256","name":"gas","type":"uint256"},{"internalType":"uint256","name":"redirectFee","type":"uint256"}],"internalType":"struct CreateParams","name":"params","type":"tuple"}],"name":"create","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"string","name":"remoteChainName","type":"string"},{"internalType":"address","name":"remoteOA","type":"address"}],"name":"isOA","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes","name":"_payload","type":"bytes"},{"internalType":"address","name":"srcOA","type":"address"},{"internalType":"string","name":"srcChain","type":"string"}],"name":"omReceive","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"omnichainRouter","outputs":[{"internalType":"contract IOmnichainRouter","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"pointsRepository","outputs":[{"internalType":"contract IOmniseaPointsRepository","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"string","name":"","type":"string"}],"name":"remoteChainToOA","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"repository","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"string","name":"_chainName","type":"string"}],"name":"setChainName","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"remoteChainName","type":"string"},{"internalType":"address","name":"remoteOA","type":"address"}],"name":"setOA","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"contract IOmniseaPointsRepository","name":"_pointsRepository","type":"address"}],"name":"setPointsRepository","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_newManager","type":"address"}],"name":"setRedirectionsBudgetManager","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"repo","type":"address"}],"name":"setRepository","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"contract IOmnichainRouter","name":"_router","type":"address"}],"name":"setRouter","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"withdrawOARedirectFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]

60806040523480156200001157600080fd5b50604051620018ab380380620018ab8339810160408190526200003491620001aa565b6200003f33620000b4565b604080518082019091526008808252674d6f6f6e6265616d60c01b6020909201918252620000709160029162000104565b50600580546001600160a01b039092166001600160a01b0319928316179055600780549091167361104fbe07ecc735d8d84422c7f045f8d29dbf1517905562000219565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b8280546200011290620001dc565b90600052602060002090601f01602090048101928262000136576000855562000181565b82601f106200015157805160ff191683800117855562000181565b8280016001018555821562000181579182015b828111156200018157825182559160200191906001019062000164565b506200018f92915062000193565b5090565b5b808211156200018f576000815560010162000194565b600060208284031215620001bd57600080fd5b81516001600160a01b0381168114620001d557600080fd5b9392505050565b600181811c90821680620001f157607f821691505b602082108114156200021357634e487b7160e01b600052602260045260246000fd5b50919050565b61168280620002296000396000f3fe6080604052600436106100dd5760003560e01c80631c93b03a146100e95780633fe0a987146101145780635801a99214610129578063715018a61461013e5780638da5cb5b146101535780638f52a69c1461017557806397e98d27146101a5578063a8704a1e146101c5578063b60a82ab14610206578063c0c41f2214610226578063c0d7865514610246578063cbd7847d14610266578063e5ca0e1d14610286578063e9176c60146102a6578063eaa32e3c146102c6578063f117c727146102e6578063f2fde38b14610306578063ffd6ca541461032657600080fd5b366100e457005b600080fd5b3480156100f557600080fd5b506100fe610346565b60405161010b9190611216565b60405180910390f35b610127610122366004610ed8565b6103d4565b005b34801561013557600080fd5b506101276106c3565b34801561014a57600080fd5b5061012761075a565b34801561015f57600080fd5b50610168610795565b60405161010b91906111ad565b34801561018157600080fd5b50610195610190366004610e87565b6107a4565b604051901515815260200161010b565b3480156101b157600080fd5b50600554610168906001600160a01b031681565b3480156101d157600080fd5b506101686101e0366004610e4b565b80516020818301810180516003825292820191909301209152546001600160a01b031681565b34801561021257600080fd5b50600654610168906001600160a01b031681565b34801561023257600080fd5b50610127610241366004610e4b565b6107f5565b34801561025257600080fd5b50610127610261366004610d5b565b61083b565b34801561027257600080fd5b50610127610281366004610d78565b61088c565b34801561029257600080fd5b506101276102a1366004610d5b565b61096b565b3480156102b257600080fd5b50600154610168906001600160a01b031681565b3480156102d257600080fd5b506101276102e1366004610d5b565b6109bc565b3480156102f257600080fd5b50610127610301366004610d5b565b610a17565b34801561031257600080fd5b50610127610321366004610d5b565b610a68565b34801561033257600080fd5b50610127610341366004610df5565b610b08565b60028054610353906115e6565b80601f016020809104026020016040519081016040528092919081815260200182805461037f906115e6565b80156103cc5780601f106103a1576101008083540402835291602001916103cc565b820191906000526020600020905b8154815290600101906020018083116103af57829003601f168201915b505050505081565b60026103e36020830183611506565b905010156103f057600080fd5b610140810135156104b5576006546001600160a01b031661044c5760405162461bcd60e51b815260206004820152601160248201527021706f696e74735265706f7369746f727960781b60448201526064015b60405180910390fd5b600654604051633463588d60e11b815233600482015261014083013560248201526001600160a01b03909116906368c6b11a90604401600060405180830381600087803b15801561049c57600080fd5b505af11580156104b0573d6000803e3d6000fd5b505050505b60026040516104c491906110f5565b6040519081900390206104d78280611506565b6040516104e59291906110e5565b60405180910390201415610559576004805460405163dd59af5960e01b81526001600160a01b039091169163dd59af59916105249185913391016112a5565b600060405180830381600087803b15801561053e57600080fd5b505af1158015610552573d6000803e3d6000fd5b5050505050565b6105d56105668280611506565b8080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250600392506105a9915085905080611506565b6040516105b79291906110e5565b908152604051908190036020019020546001600160a01b03166107a4565b6105f15760405162461bcd60e51b815260040161044390611253565b6005546001600160a01b0316633626b3753461060d8480611506565b60036106198780611506565b6040516106279291906110e5565b90815260405160209181900382018120546001600160a01b0316916106509189913391016112a5565b604051602081830303815290604052876101600135338961018001356040518963ffffffff1660e01b815260040161068e97969594939291906111c1565b6000604051808303818588803b1580156106a757600080fd5b505af11580156106bb573d6000803e3d6000fd5b505050505050565b336106cc610795565b6001600160a01b0316146106f25760405162461bcd60e51b815260040161044390611270565b6005546007546040516342288df960e11b81526001600160a01b03928316926384511bf292610726929116906004016111ad565b600060405180830381600087803b15801561074057600080fd5b505af1158015610754573d6000803e3d6000fd5b50505050565b33610763610795565b6001600160a01b0316146107895760405162461bcd60e51b815260040161044390611270565b6107936000610b7e565b565b6000546001600160a01b031690565b60006001600160a01b038216158015906107ee5750816001600160a01b03166003846040516107d39190611191565b908152604051908190036020019020546001600160a01b0316145b9392505050565b336107fe610795565b6001600160a01b0316146108245760405162461bcd60e51b815260040161044390611270565b8051610837906002906020840190610bce565b5050565b33610844610795565b6001600160a01b03161461086a5760405162461bcd60e51b815260040161044390611270565b600580546001600160a01b0319166001600160a01b0392909216919091179055565b7f60cf18cff3490451c0453096daa47405f97c75e9449e175a7aff997f04f6b04f81836040516108bd929190611229565b60405180910390a16108cf81836107a4565b6108eb5760405162461bcd60e51b815260040161044390611253565b6000806108fa85870187610f13565b6004805460405163dd59af5960e01b81529395509193506001600160a01b039091169163dd59af59916109319186918691016113f1565b600060405180830381600087803b15801561094b57600080fd5b505af115801561095f573d6000803e3d6000fd5b50505050505050505050565b33610974610795565b6001600160a01b03161461099a5760405162461bcd60e51b815260040161044390611270565b600680546001600160a01b0319166001600160a01b0392909216919091179055565b336109c5610795565b6001600160a01b0316146109eb5760405162461bcd60e51b815260040161044390611270565b600480546001600160a01b039092166001600160a01b0319928316811790915560018054909216179055565b33610a20610795565b6001600160a01b031614610a465760405162461bcd60e51b815260040161044390611270565b600780546001600160a01b0319166001600160a01b0392909216919091179055565b33610a71610795565b6001600160a01b031614610a975760405162461bcd60e51b815260040161044390611270565b6001600160a01b038116610afc5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610443565b610b0581610b7e565b50565b33610b11610795565b6001600160a01b031614610b375760405162461bcd60e51b815260040161044390611270565b8060038484604051610b4a9291906110e5565b90815260405190819003602001902080546001600160a01b03929092166001600160a01b0319909216919091179055505050565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b828054610bda906115e6565b90600052602060002090601f016020900481019282610bfc5760008555610c42565b82601f10610c1557805160ff1916838001178555610c42565b82800160010185558215610c42579182015b82811115610c42578251825591602001919060010190610c27565b50610c4e929150610c52565b5090565b5b80821115610c4e5760008155600101610c53565b8035610c7281611637565b919050565b80358015158114610c7257600080fd5b60008083601f840112610c9957600080fd5b5081356001600160401b03811115610cb057600080fd5b602083019150836020828501011115610cc857600080fd5b9250929050565b600082601f830112610ce057600080fd5b81356001600160401b0380821115610cfa57610cfa611621565b604051601f8301601f19908116603f01168101908282118183101715610d2257610d22611621565b81604052838152866020858801011115610d3b57600080fd5b836020870160208301376000602085830101528094505050505092915050565b600060208284031215610d6d57600080fd5b81356107ee81611637565b60008060008060608587031215610d8e57600080fd5b84356001600160401b0380821115610da557600080fd5b610db188838901610c87565b909650945060208701359150610dc682611637565b90925060408601359080821115610ddc57600080fd5b50610de987828801610ccf565b91505092959194509250565b600080600060408486031215610e0a57600080fd5b83356001600160401b03811115610e2057600080fd5b610e2c86828701610c87565b9094509250506020840135610e4081611637565b809150509250925092565b600060208284031215610e5d57600080fd5b81356001600160401b03811115610e7357600080fd5b610e7f84828501610ccf565b949350505050565b60008060408385031215610e9a57600080fd5b82356001600160401b03811115610eb057600080fd5b610ebc85828601610ccf565b9250506020830135610ecd81611637565b809150509250929050565b600060208284031215610eea57600080fd5b81356001600160401b03811115610f0057600080fd5b82016101a081850312156107ee57600080fd5b60008060408385031215610f2657600080fd5b82356001600160401b0380821115610f3d57600080fd5b908401906101a08287031215610f5257600080fd5b610f5a61154c565b823582811115610f6957600080fd5b610f7588828601610ccf565b825250602083013582811115610f8a57600080fd5b610f9688828601610ccf565b602083015250604083013582811115610fae57600080fd5b610fba88828601610ccf565b60408301525060608301356060820152608083013582811115610fdc57600080fd5b610fe888828601610ccf565b60808301525060a083013560a082015260c083013560c082015260e08301358281111561101457600080fd5b61102088828601610ccf565b60e08301525061010083810135908201526101209150611041828401610c77565b91810191909152610140828101359082015261016080830135908201526101809182013591810191909152915061107a60208401610c67565b90509250929050565b6001600160a01b03169052565b600081518084526110a88160208601602086016115ba565b601f01601f19169290920160200192915050565b81835281816020850137506000828201602090810191909152601f909101601f19169091010190565b8183823760009101908152919050565b600080835481600182811c91508083168061111157607f831692505b602080841082141561113157634e487b7160e01b86526022600452602486fd5b818015611145576001811461115657611183565b60ff19861689528489019650611183565b60008a81526020902060005b8681101561117b5781548b820152908501908301611162565b505084890196505b509498975050505050505050565b600082516111a38184602087016115ba565b9190910192915050565b6001600160a01b0391909116815260200190565b60c0815260006111d560c08301898b6110bc565b6001600160a01b03888116602085015283820360408501526111f78289611090565b60608501979097529490941660808301525060a0015250949350505050565b6020815260006107ee6020830184611090565b60408152600061123c6040830185611090565b905060018060a01b03831660208301529392505050565b602080825260039082015262214f4160e81b604082015260600190565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b6040815260006112b58485611575565b6101a08060408601526112cd6101e0860183856110bc565b92506112dc6020880188611575565b9250603f19808786030160608801526112f68585846110bc565b945061130560408a018a611575565b945091508087860301608088015261131e8585846110bc565b9450606089013560a088015261133760808a018a611575565b94509150808786030160c08801526113508585846110bc565b945060a089013560e0880152610100935060c08901358488015261137760e08a018a611575565b92506101208289880301818a01526113908785846110bc565b96506101409350858b0135848a01526113aa818c01610c77565b95505050506101606113bf8188018515159052565b908801356101808781019190915290880135918601919091528601356101c08501525090506107ee6020830184611083565b60408152600083516101a08060408501526114106101e0850183611090565b91506020860151603f198086850301606087015261142e8483611090565b9350604088015191508086850301608087015261144b8483611090565b9350606088015160a087015260808801519150808685030160c08701526114728483611090565b935060a088015160e087015260c08801519150610100828188015260e089015192506101208288870301818901526114aa8685611090565b9550818a0151935061014092508383890152808a0151935050506101606114d48188018415159052565b90880151610180878101919091529088015192860192909252508501516101c084015290506107ee6020830184611083565b6000808335601e1984360301811261151d57600080fd5b8301803591506001600160401b0382111561153757600080fd5b602001915036819003821315610cc857600080fd5b6040516101a081016001600160401b038111828210171561156f5761156f611621565b60405290565b6000808335601e1984360301811261158c57600080fd5b83016020810192503590506001600160401b038111156115ab57600080fd5b803603831315610cc857600080fd5b60005b838110156115d55781810151838201526020016115bd565b838111156107545750506000910152565b600181811c908216806115fa57607f821691505b6020821081141561161b57634e487b7160e01b600052602260045260246000fd5b50919050565b634e487b7160e01b600052604160045260246000fd5b6001600160a01b0381168114610b0557600080fdfea264697066735822122064a61c0549d0acd9a50fe6a6806850fbcee916a71a7977c51cae9d3dc33fe6a264736f6c6343000807003300000000000000000000000089557e29812f1967dd40e087a9f8ba0073b5dd8a

Deployed Bytecode

0x6080604052600436106100dd5760003560e01c80631c93b03a146100e95780633fe0a987146101145780635801a99214610129578063715018a61461013e5780638da5cb5b146101535780638f52a69c1461017557806397e98d27146101a5578063a8704a1e146101c5578063b60a82ab14610206578063c0c41f2214610226578063c0d7865514610246578063cbd7847d14610266578063e5ca0e1d14610286578063e9176c60146102a6578063eaa32e3c146102c6578063f117c727146102e6578063f2fde38b14610306578063ffd6ca541461032657600080fd5b366100e457005b600080fd5b3480156100f557600080fd5b506100fe610346565b60405161010b9190611216565b60405180910390f35b610127610122366004610ed8565b6103d4565b005b34801561013557600080fd5b506101276106c3565b34801561014a57600080fd5b5061012761075a565b34801561015f57600080fd5b50610168610795565b60405161010b91906111ad565b34801561018157600080fd5b50610195610190366004610e87565b6107a4565b604051901515815260200161010b565b3480156101b157600080fd5b50600554610168906001600160a01b031681565b3480156101d157600080fd5b506101686101e0366004610e4b565b80516020818301810180516003825292820191909301209152546001600160a01b031681565b34801561021257600080fd5b50600654610168906001600160a01b031681565b34801561023257600080fd5b50610127610241366004610e4b565b6107f5565b34801561025257600080fd5b50610127610261366004610d5b565b61083b565b34801561027257600080fd5b50610127610281366004610d78565b61088c565b34801561029257600080fd5b506101276102a1366004610d5b565b61096b565b3480156102b257600080fd5b50600154610168906001600160a01b031681565b3480156102d257600080fd5b506101276102e1366004610d5b565b6109bc565b3480156102f257600080fd5b50610127610301366004610d5b565b610a17565b34801561031257600080fd5b50610127610321366004610d5b565b610a68565b34801561033257600080fd5b50610127610341366004610df5565b610b08565b60028054610353906115e6565b80601f016020809104026020016040519081016040528092919081815260200182805461037f906115e6565b80156103cc5780601f106103a1576101008083540402835291602001916103cc565b820191906000526020600020905b8154815290600101906020018083116103af57829003601f168201915b505050505081565b60026103e36020830183611506565b905010156103f057600080fd5b610140810135156104b5576006546001600160a01b031661044c5760405162461bcd60e51b815260206004820152601160248201527021706f696e74735265706f7369746f727960781b60448201526064015b60405180910390fd5b600654604051633463588d60e11b815233600482015261014083013560248201526001600160a01b03909116906368c6b11a90604401600060405180830381600087803b15801561049c57600080fd5b505af11580156104b0573d6000803e3d6000fd5b505050505b60026040516104c491906110f5565b6040519081900390206104d78280611506565b6040516104e59291906110e5565b60405180910390201415610559576004805460405163dd59af5960e01b81526001600160a01b039091169163dd59af59916105249185913391016112a5565b600060405180830381600087803b15801561053e57600080fd5b505af1158015610552573d6000803e3d6000fd5b5050505050565b6105d56105668280611506565b8080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250600392506105a9915085905080611506565b6040516105b79291906110e5565b908152604051908190036020019020546001600160a01b03166107a4565b6105f15760405162461bcd60e51b815260040161044390611253565b6005546001600160a01b0316633626b3753461060d8480611506565b60036106198780611506565b6040516106279291906110e5565b90815260405160209181900382018120546001600160a01b0316916106509189913391016112a5565b604051602081830303815290604052876101600135338961018001356040518963ffffffff1660e01b815260040161068e97969594939291906111c1565b6000604051808303818588803b1580156106a757600080fd5b505af11580156106bb573d6000803e3d6000fd5b505050505050565b336106cc610795565b6001600160a01b0316146106f25760405162461bcd60e51b815260040161044390611270565b6005546007546040516342288df960e11b81526001600160a01b03928316926384511bf292610726929116906004016111ad565b600060405180830381600087803b15801561074057600080fd5b505af1158015610754573d6000803e3d6000fd5b50505050565b33610763610795565b6001600160a01b0316146107895760405162461bcd60e51b815260040161044390611270565b6107936000610b7e565b565b6000546001600160a01b031690565b60006001600160a01b038216158015906107ee5750816001600160a01b03166003846040516107d39190611191565b908152604051908190036020019020546001600160a01b0316145b9392505050565b336107fe610795565b6001600160a01b0316146108245760405162461bcd60e51b815260040161044390611270565b8051610837906002906020840190610bce565b5050565b33610844610795565b6001600160a01b03161461086a5760405162461bcd60e51b815260040161044390611270565b600580546001600160a01b0319166001600160a01b0392909216919091179055565b7f60cf18cff3490451c0453096daa47405f97c75e9449e175a7aff997f04f6b04f81836040516108bd929190611229565b60405180910390a16108cf81836107a4565b6108eb5760405162461bcd60e51b815260040161044390611253565b6000806108fa85870187610f13565b6004805460405163dd59af5960e01b81529395509193506001600160a01b039091169163dd59af59916109319186918691016113f1565b600060405180830381600087803b15801561094b57600080fd5b505af115801561095f573d6000803e3d6000fd5b50505050505050505050565b33610974610795565b6001600160a01b03161461099a5760405162461bcd60e51b815260040161044390611270565b600680546001600160a01b0319166001600160a01b0392909216919091179055565b336109c5610795565b6001600160a01b0316146109eb5760405162461bcd60e51b815260040161044390611270565b600480546001600160a01b039092166001600160a01b0319928316811790915560018054909216179055565b33610a20610795565b6001600160a01b031614610a465760405162461bcd60e51b815260040161044390611270565b600780546001600160a01b0319166001600160a01b0392909216919091179055565b33610a71610795565b6001600160a01b031614610a975760405162461bcd60e51b815260040161044390611270565b6001600160a01b038116610afc5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610443565b610b0581610b7e565b50565b33610b11610795565b6001600160a01b031614610b375760405162461bcd60e51b815260040161044390611270565b8060038484604051610b4a9291906110e5565b90815260405190819003602001902080546001600160a01b03929092166001600160a01b0319909216919091179055505050565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b828054610bda906115e6565b90600052602060002090601f016020900481019282610bfc5760008555610c42565b82601f10610c1557805160ff1916838001178555610c42565b82800160010185558215610c42579182015b82811115610c42578251825591602001919060010190610c27565b50610c4e929150610c52565b5090565b5b80821115610c4e5760008155600101610c53565b8035610c7281611637565b919050565b80358015158114610c7257600080fd5b60008083601f840112610c9957600080fd5b5081356001600160401b03811115610cb057600080fd5b602083019150836020828501011115610cc857600080fd5b9250929050565b600082601f830112610ce057600080fd5b81356001600160401b0380821115610cfa57610cfa611621565b604051601f8301601f19908116603f01168101908282118183101715610d2257610d22611621565b81604052838152866020858801011115610d3b57600080fd5b836020870160208301376000602085830101528094505050505092915050565b600060208284031215610d6d57600080fd5b81356107ee81611637565b60008060008060608587031215610d8e57600080fd5b84356001600160401b0380821115610da557600080fd5b610db188838901610c87565b909650945060208701359150610dc682611637565b90925060408601359080821115610ddc57600080fd5b50610de987828801610ccf565b91505092959194509250565b600080600060408486031215610e0a57600080fd5b83356001600160401b03811115610e2057600080fd5b610e2c86828701610c87565b9094509250506020840135610e4081611637565b809150509250925092565b600060208284031215610e5d57600080fd5b81356001600160401b03811115610e7357600080fd5b610e7f84828501610ccf565b949350505050565b60008060408385031215610e9a57600080fd5b82356001600160401b03811115610eb057600080fd5b610ebc85828601610ccf565b9250506020830135610ecd81611637565b809150509250929050565b600060208284031215610eea57600080fd5b81356001600160401b03811115610f0057600080fd5b82016101a081850312156107ee57600080fd5b60008060408385031215610f2657600080fd5b82356001600160401b0380821115610f3d57600080fd5b908401906101a08287031215610f5257600080fd5b610f5a61154c565b823582811115610f6957600080fd5b610f7588828601610ccf565b825250602083013582811115610f8a57600080fd5b610f9688828601610ccf565b602083015250604083013582811115610fae57600080fd5b610fba88828601610ccf565b60408301525060608301356060820152608083013582811115610fdc57600080fd5b610fe888828601610ccf565b60808301525060a083013560a082015260c083013560c082015260e08301358281111561101457600080fd5b61102088828601610ccf565b60e08301525061010083810135908201526101209150611041828401610c77565b91810191909152610140828101359082015261016080830135908201526101809182013591810191909152915061107a60208401610c67565b90509250929050565b6001600160a01b03169052565b600081518084526110a88160208601602086016115ba565b601f01601f19169290920160200192915050565b81835281816020850137506000828201602090810191909152601f909101601f19169091010190565b8183823760009101908152919050565b600080835481600182811c91508083168061111157607f831692505b602080841082141561113157634e487b7160e01b86526022600452602486fd5b818015611145576001811461115657611183565b60ff19861689528489019650611183565b60008a81526020902060005b8681101561117b5781548b820152908501908301611162565b505084890196505b509498975050505050505050565b600082516111a38184602087016115ba565b9190910192915050565b6001600160a01b0391909116815260200190565b60c0815260006111d560c08301898b6110bc565b6001600160a01b03888116602085015283820360408501526111f78289611090565b60608501979097529490941660808301525060a0015250949350505050565b6020815260006107ee6020830184611090565b60408152600061123c6040830185611090565b905060018060a01b03831660208301529392505050565b602080825260039082015262214f4160e81b604082015260600190565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b6040815260006112b58485611575565b6101a08060408601526112cd6101e0860183856110bc565b92506112dc6020880188611575565b9250603f19808786030160608801526112f68585846110bc565b945061130560408a018a611575565b945091508087860301608088015261131e8585846110bc565b9450606089013560a088015261133760808a018a611575565b94509150808786030160c08801526113508585846110bc565b945060a089013560e0880152610100935060c08901358488015261137760e08a018a611575565b92506101208289880301818a01526113908785846110bc565b96506101409350858b0135848a01526113aa818c01610c77565b95505050506101606113bf8188018515159052565b908801356101808781019190915290880135918601919091528601356101c08501525090506107ee6020830184611083565b60408152600083516101a08060408501526114106101e0850183611090565b91506020860151603f198086850301606087015261142e8483611090565b9350604088015191508086850301608087015261144b8483611090565b9350606088015160a087015260808801519150808685030160c08701526114728483611090565b935060a088015160e087015260c08801519150610100828188015260e089015192506101208288870301818901526114aa8685611090565b9550818a0151935061014092508383890152808a0151935050506101606114d48188018415159052565b90880151610180878101919091529088015192860192909252508501516101c084015290506107ee6020830184611083565b6000808335601e1984360301811261151d57600080fd5b8301803591506001600160401b0382111561153757600080fd5b602001915036819003821315610cc857600080fd5b6040516101a081016001600160401b038111828210171561156f5761156f611621565b60405290565b6000808335601e1984360301811261158c57600080fd5b83016020810192503590506001600160401b038111156115ab57600080fd5b803603831315610cc857600080fd5b60005b838110156115d55781810151838201526020016115bd565b838111156107545750506000910152565b600181811c908216806115fa57607f821691505b6020821081141561161b57634e487b7160e01b600052602260045260246000fd5b50919050565b634e487b7160e01b600052604160045260246000fd5b6001600160a01b0381168114610b0557600080fdfea264697066735822122064a61c0549d0acd9a50fe6a6806850fbcee916a71a7977c51cae9d3dc33fe6a264736f6c63430008070033

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

00000000000000000000000089557e29812f1967dd40e087a9f8ba0073b5dd8a

-----Decoded View---------------
Arg [0] : _router (address): 0x89557E29812f1967dd40E087A9f8BA0073B5DD8A

-----Encoded View---------------
1 Constructor Arguments found :
Arg [0] : 00000000000000000000000089557e29812f1967dd40e087a9f8ba0073b5dd8a


Block Transaction Gas Used Reward
view all blocks collator

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

Validator Index Block Amount
View All Withdrawals

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

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.