ETH Price: $3,332.07 (+2.58%)
Gas: 0.05 GWei

Contract

0xa2A09f15c2ec6aF1b8f9413c148334b231410bd8

Overview

ETH Balance

Linea Mainnet LogoLinea Mainnet LogoLinea Mainnet Logo0 ETH

ETH Value

$0.00

Token Holdings

Transaction Hash
Method
Block
From
To
Distribute Fees124893662024-11-24 20:13:5161 days ago1732479231IN
SyncSwap: Fee Recipient
0 ETH0.000653190.70231081
Distribute Fees114230392024-10-30 17:56:5086 days ago1730311010IN
SyncSwap: Fee Recipient
0 ETH0.000417320.41629639
Distribute Fees60386252024-06-27 9:19:40211 days ago1719479980IN
SyncSwap: Fee Recipient
0 ETH0.000052750.06
Distribute Fees51037682024-06-02 20:24:13236 days ago1717359853IN
SyncSwap: Fee Recipient
0 ETH0.000055870.07340831
Set Fee Registry49619462024-05-28 20:54:37240 days ago1716929677IN
SyncSwap: Fee Recipient
0 ETH0.000002540.084
Distribute Fees47863072024-05-22 18:31:39247 days ago1716402699IN
SyncSwap: Fee Recipient
0 ETH0.000045670.09200363
Set Fee Registry45809832024-05-15 15:24:03254 days ago1715786643IN
SyncSwap: Fee Recipient
0 ETH0.00000210.06952551
Distribute Fees35136142024-04-08 13:47:29291 days ago1712584049IN
SyncSwap: Fee Recipient
0 ETH0.000032160.1262876
Distribute Fees26019012024-03-01 3:58:45329 days ago1709265525IN
SyncSwap: Fee Recipient
0 ETH0.000574211.52702508
Set Fee Registry22180842024-02-12 9:05:54347 days ago1707728754IN
SyncSwap: Fee Recipient
0 ETH0.00006021.9878836
Distribute Fees16247472024-01-12 11:24:56378 days ago1705058696IN
SyncSwap: Fee Recipient
0 ETH0.00078622.01739248
Distribute Fees13038172023-12-21 4:25:27400 days ago1703132727IN
SyncSwap: Fee Recipient
0 ETH0.001561592.94284846
Distribute Fees9168842023-11-20 14:28:15431 days ago1700490495IN
SyncSwap: Fee Recipient
0 ETH0.000350122.40509032
Distribute Fees9016282023-11-19 4:34:07432 days ago1700368447IN
SyncSwap: Fee Recipient
0 ETH0.000232411.2928215
Distribute Fees6551882023-10-17 18:28:58465 days ago1697567338IN
SyncSwap: Fee Recipient
0 ETH0.000154221.02216727

Latest 25 internal transactions (View All)

Parent Transaction Hash Block From To
149958742025-01-24 20:41:3311 mins ago1737751293
SyncSwap: Fee Recipient
0 ETH
149958742025-01-24 20:41:3311 mins ago1737751293
SyncSwap: Fee Recipient
0 ETH
149954732025-01-24 20:25:1927 mins ago1737750319
SyncSwap: Fee Recipient
0 ETH
149954732025-01-24 20:25:1927 mins ago1737750319
SyncSwap: Fee Recipient
0 ETH
149953082025-01-24 20:18:5834 mins ago1737749938
SyncSwap: Fee Recipient
0 ETH
149953082025-01-24 20:18:5834 mins ago1737749938
SyncSwap: Fee Recipient
0 ETH
149952722025-01-24 20:17:2335 mins ago1737749843
SyncSwap: Fee Recipient
0 ETH
149952722025-01-24 20:17:2335 mins ago1737749843
SyncSwap: Fee Recipient
0 ETH
149950232025-01-24 20:06:5546 mins ago1737749215
SyncSwap: Fee Recipient
0 ETH
149950232025-01-24 20:06:5546 mins ago1737749215
SyncSwap: Fee Recipient
0 ETH
149949282025-01-24 20:02:5750 mins ago1737748977
SyncSwap: Fee Recipient
0 ETH
149949282025-01-24 20:02:5750 mins ago1737748977
SyncSwap: Fee Recipient
0 ETH
149945802025-01-24 19:48:191 hr ago1737748099
SyncSwap: Fee Recipient
0 ETH
149945802025-01-24 19:48:191 hr ago1737748099
SyncSwap: Fee Recipient
0 ETH
149944632025-01-24 19:43:551 hr ago1737747835
SyncSwap: Fee Recipient
0 ETH
149944632025-01-24 19:43:551 hr ago1737747835
SyncSwap: Fee Recipient
0 ETH
149944112025-01-24 19:41:501 hr ago1737747710
SyncSwap: Fee Recipient
0 ETH
149944112025-01-24 19:41:501 hr ago1737747710
SyncSwap: Fee Recipient
0 ETH
149943882025-01-24 19:41:001 hr ago1737747660
SyncSwap: Fee Recipient
0 ETH
149943882025-01-24 19:41:001 hr ago1737747660
SyncSwap: Fee Recipient
0 ETH
149943712025-01-24 19:40:261 hr ago1737747626
SyncSwap: Fee Recipient
0 ETH
149943712025-01-24 19:40:261 hr ago1737747626
SyncSwap: Fee Recipient
0 ETH
149940512025-01-24 19:27:441 hr ago1737746864
SyncSwap: Fee Recipient
0 ETH
149940512025-01-24 19:27:441 hr ago1737746864
SyncSwap: Fee Recipient
0 ETH
149940362025-01-24 19:27:071 hr ago1737746827
SyncSwap: Fee Recipient
0 ETH
View All Internal Transactions
Loading...
Loading

Contract Source Code Verified (Exact Match)

Contract Name:
SyncSwapFeeRecipient

Compiler Version
v0.8.15+commit.e14f2714

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion
File 1 of 8 : SyncSwapFeeRecipient.sol
// SPDX-License-Identifier: AGPL-3.0-or-later

pragma solidity ^0.8.0;

import "../interfaces/token/IERC20.sol";
import "../interfaces/master/IFeeRegistry.sol";
import "../interfaces/master/IFeeRecipient.sol";

import "../libraries/Ownable2Step.sol";
import "../libraries/TransferHelper.sol";

error InvalidFeeSender();

contract SyncSwapFeeRecipient is IFeeRecipient, Ownable2Step {

    uint public epochDuration = 1 days;

    /// @dev The registry for fee senders.
    address public feeRegistry;

    /// @dev The epoch fees of each token.
    mapping(uint => mapping(address => uint)) public fees; // epoch => token => amount

    /// @dev The fees tokens in each epoch.
    mapping(uint => address[]) public feeTokens;

    /// @dev Whether the address is a fee distributor.
    mapping(address => bool) public isFeeDistributor;

    /// @dev The fee distributors.
    address[] public feeDistributors; // for inspection only

    struct FeeTokenData {
        // The start time of a fee token from a sender.
        uint startTime;

        // The accumulated fee amount since start time.
        uint amount;
    }

    /// @dev The fee token data of a sender.
    mapping(address => mapping(address => FeeTokenData)) public feeTokenData; // sender => token => time

    event NotifyFees(address indexed sender, uint16 indexed feeType, address indexed token, uint amount, uint feeRate);
    event AddFeeDistributor(address indexed distributor);
    event RemoveFeeDistributor(address indexed distributor);
    event SetFeeRegistry(address indexed feeRegistry);
    event SetEpochDuration(uint epochDuration);

    constructor(address _feeRegistry) {
        feeRegistry = _feeRegistry;
    }

    function feeTokensLength(uint epoch) external view returns (uint) {
        return feeTokens[epoch].length;
    }

    function feeDistributorsLength() external view returns (uint) {
        return feeDistributors.length;
    }

    function getEpochStart(uint ts) public view returns (uint) {
        return ts - (ts % epochDuration);
    }

    /// @dev Notifies the fee recipient after sent fees.
    function notifyFees(
        uint16 feeType,
        address token,
        uint amount,
        uint feeRate,
        bytes calldata /*data*/
    ) external override {
        if (!IFeeRegistry(feeRegistry).isFeeSender(msg.sender)) {
            revert InvalidFeeSender();
        }

        uint epoch = getEpochStart(block.timestamp);
        uint epochTokenFees = fees[epoch][token];

        // Unchecked to avoid potential overflow, since fees are only for inspection.
        unchecked {
            if (epochTokenFees == 0) {
                // Pushes new tokens to array.
                feeTokens[epoch].push(token);

                // Updates epoch fees for the token.
                fees[epoch][token] = amount;

                // Updates fee token data for sender.
                feeTokenData[msg.sender][token] = FeeTokenData({
                    startTime: block.timestamp,
                    amount: amount
                });
            } else {
                // Updates epoch fees for the token.
                fees[epoch][token] = (epochTokenFees + amount);

                // Updates fee token data for sender.
                feeTokenData[msg.sender][token].amount += amount;
            }
        }

        emit NotifyFees(msg.sender, feeType, token, amount, feeRate);
    }

    /// @dev Distributes fees to the recipient.
    function distributeFees(address to, address[] calldata tokens, uint[] calldata amounts) external {
        require(isFeeDistributor[msg.sender] || msg.sender == owner(), "No perms");
        require(tokens.length == amounts.length, "Wrong length");

        uint n = tokens.length;
        address token; uint amount;

        for (uint i; i < n; ) {
            token = tokens[i];
            amount = amounts[i];

            if (token == address(0)) { // ETH
                if (amount == 0) {
                    amount = address(this).balance;
                }
                TransferHelper.safeTransferETH(to, amount);
            } else {
                if (amount == 0) {
                    amount = IERC20(token).balanceOf(address(this));
                }
                TransferHelper.safeTransfer(token, to, amount);
            }

            unchecked {
                ++i;
            }
        }
    }

    /// @dev Adds a new fee distributor.
    function addFeeDistributor(address distributor) external onlyOwner {
        require(distributor != address(0), "Invalid address");
        require(!isFeeDistributor[distributor], "Already set");
        isFeeDistributor[distributor] = true;
        feeDistributors.push(distributor);
        emit AddFeeDistributor(distributor);
    }

    /// @dev Removes a new fee distributor.
    function removeFeeDistributor(address distributor, bool updateArray) external onlyOwner {
        require(isFeeDistributor[distributor], "Not set");
        delete isFeeDistributor[distributor];
        if (updateArray) {
            uint n = feeDistributors.length;
            for (uint i; i < n; ) {
                if (feeDistributors[i] == distributor) {
                    feeDistributors[i] = feeDistributors[n - 1];
                    feeDistributors[n - 1] = distributor;
                    feeDistributors.pop();
                    break;
                }

                unchecked {
                    ++i;
                }
            }
        }
        emit RemoveFeeDistributor(distributor);
    }

    /// @dev Sets a new fee registry.
    function setFeeRegistry(address _feeRegistry) external onlyOwner {
        require(_feeRegistry != address(0), "Invalid address");
        feeRegistry = _feeRegistry;
        emit SetFeeRegistry(_feeRegistry);
    }

    function setEpochDuration(uint _epochDuration) external onlyOwner {
        require(_epochDuration != 0, "Invalid duration");
        epochDuration = _epochDuration;
        emit SetEpochDuration(_epochDuration);
    }

    function withdrawERC20(address token, address to, uint amount) external onlyOwner {
        if (amount == 0) {
            amount = IERC20(token).balanceOf(address(this));
        }
        TransferHelper.safeTransfer(token, to, amount);
    }

    function withdrawETH(address to, uint amount) external onlyOwner {
        if (amount == 0) {
            amount = address(this).balance;
        }
        TransferHelper.safeTransferETH(to, amount);
    }
}

File 2 of 8 : IFeeRecipient.sol
// SPDX-License-Identifier: AGPL-3.0-or-later

pragma solidity >=0.5.0;

interface IFeeRecipient {
    /// @dev Notifies the fee recipient after sent fees.
    function notifyFees(
        uint16 feeType,
        address token,
        uint amount,
        uint feeRate,
        bytes calldata data
    ) external;
}

File 3 of 8 : IFeeRegistry.sol
// SPDX-License-Identifier: AGPL-3.0-or-later

pragma solidity >=0.5.0;

interface IFeeRegistry {
    function isFeeSender(address sender) external view returns (bool);
}

File 4 of 8 : IERC20.sol
// SPDX-License-Identifier: AGPL-3.0-or-later

pragma solidity >=0.5.0;

import "./IERC20Base.sol";

interface IERC20 is IERC20Base {
    function name() external view returns (string memory);
    function symbol() external view returns (string memory);
    function decimals() external view returns (uint8);
}

File 5 of 8 : IERC20Base.sol
// SPDX-License-Identifier: AGPL-3.0-or-later

pragma solidity >=0.5.0;

interface IERC20Base {
    function totalSupply() external view returns (uint);
    function balanceOf(address owner) external view returns (uint);
    function allowance(address owner, address spender) external view returns (uint);

    function approve(address spender, uint amount) external returns (bool);
    function transfer(address to, uint amount) external returns (bool);
    function transferFrom(address from, address to, uint amount) external returns (bool);
    
    event Approval(address indexed owner, address indexed spender, uint amount);
    event Transfer(address indexed from, address indexed to, uint amount);
}

File 6 of 8 : Ownable.sol
// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts (last updated v4.7.0) (access/Ownable.sol)

pragma solidity ^0.8.0;

/**
 * @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 {
    address private _owner;

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

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

    /**
     * @dev Throws if called by any account other than the owner.
     */
    modifier onlyOwner() {
        _checkOwner();
        _;
    }

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

    /**
     * @dev Throws if the sender is not the owner.
     */
    function _checkOwner() internal view virtual {
        require(owner() == msg.sender, "Ownable: caller is not the owner");
    }

    /**
     * @dev Leaves the contract without owner. It will not be possible to call
     * `onlyOwner` functions. Can only be called by the current owner.
     *
     * NOTE: Renouncing ownership will leave the contract without an owner,
     * thereby disabling 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);
    }
}

File 7 of 8 : Ownable2Step.sol
// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts (last updated v4.8.0) (access/Ownable2Step.sol)

pragma solidity ^0.8.0;

import "./Ownable.sol";

/**
 * @dev Contract module which provides 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} and {acceptOwnership}.
 *
 * This module is used through inheritance. It will make available all functions
 * from parent (Ownable).
 */
abstract contract Ownable2Step is Ownable {
    address private _pendingOwner;

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

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

    /**
     * @dev Starts the ownership transfer of the contract to a new account. Replaces the pending transfer if there is one.
     * Can only be called by the current owner.
     */
    function transferOwnership(address newOwner) public virtual override onlyOwner {
        _pendingOwner = newOwner;
        emit OwnershipTransferStarted(owner(), newOwner);
    }

    /**
     * @dev Transfers ownership of the contract to a new account (`newOwner`) and deletes any pending owner.
     * Internal function without access restriction.
     */
    function _transferOwnership(address newOwner) internal virtual override {
        delete _pendingOwner;
        super._transferOwnership(newOwner);
    }

    /**
     * @dev The new owner accepts the ownership transfer.
     */
    function acceptOwnership() public virtual {
        require(pendingOwner() == msg.sender, "Ownable2Step: caller is not the new owner");
        _transferOwnership(msg.sender);
    }
}

File 8 of 8 : TransferHelper.sol
// SPDX-License-Identifier: AGPL-3.0-or-later

pragma solidity ^0.8.0;

/// @dev The ETH transfer has failed.
error ETHTransferFailed();

/// @dev The ERC20 `transferFrom` has failed.
error TransferFromFailed();

/// @dev The ERC20 `transfer` has failed.
error TransferFailed();

/// @dev The ERC20 `approve` has failed.
error ApproveFailed();

/// @dev Helper methods for interacting with ERC20 tokens and sending ETH that do not consistently return true / false.
library TransferHelper {
    function safeApprove(
        address token,
        address to,
        uint value
    ) internal {
        // bytes4(keccak256(bytes("approve(address,uint256)")));
        // solhint-disable-next-line avoid-low-level-calls
        (bool success, bytes memory data) = token.call(abi.encodeWithSelector(0x095ea7b3, to, value));

        if (!success || (data.length != 0 && !abi.decode(data, (bool)))) {
            revert ApproveFailed();
        }
    }

    function safeTransfer(
        address token,
        address to,
        uint value
    ) internal {
        // bytes4(keccak256(bytes("transfer(address,uint256)")));
        // solhint-disable-next-line avoid-low-level-calls
        (bool success, bytes memory data) = token.call(abi.encodeWithSelector(0xa9059cbb, to, value));

        if (!success || (data.length != 0 && !abi.decode(data, (bool)))) {
            revert TransferFailed();
        }
    }

    function safeTransferFrom(
        address token,
        address from,
        address to,
        uint value
    ) internal {
        // bytes4(keccak256(bytes("transferFrom(address,address,uint256)")));
        // solhint-disable-next-line avoid-low-level-calls
        (bool success, bytes memory data) = token.call(abi.encodeWithSelector(0x23b872dd, from, to, value));

        if (!success || (data.length != 0 && !abi.decode(data, (bool)))) {
            revert TransferFromFailed();
        }
    }

    function safeTransferETH(address to, uint value) internal {
        // solhint-disable-next-line avoid-low-level-calls
        (bool success, ) = to.call{value: value}("");

        if (!success) {
            revert ETHTransferFailed();
        }
    }
}

Settings
{
  "optimizer": {
    "enabled": true,
    "runs": 200,
    "details": {
      "yul": false
    }
  },
  "outputSelection": {
    "*": {
      "*": [
        "evm.bytecode",
        "evm.deployedBytecode",
        "devdoc",
        "userdoc",
        "metadata",
        "abi"
      ]
    }
  },
  "metadata": {
    "useLiteralContent": true
  },
  "libraries": {}
}

Contract Security Audit

Contract ABI

[{"inputs":[{"internalType":"address","name":"_feeRegistry","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"inputs":[],"name":"ETHTransferFailed","type":"error"},{"inputs":[],"name":"InvalidFeeSender","type":"error"},{"inputs":[],"name":"TransferFailed","type":"error"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"distributor","type":"address"}],"name":"AddFeeDistributor","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"sender","type":"address"},{"indexed":true,"internalType":"uint16","name":"feeType","type":"uint16"},{"indexed":true,"internalType":"address","name":"token","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"feeRate","type":"uint256"}],"name":"NotifyFees","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferStarted","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":"distributor","type":"address"}],"name":"RemoveFeeDistributor","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"epochDuration","type":"uint256"}],"name":"SetEpochDuration","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"feeRegistry","type":"address"}],"name":"SetFeeRegistry","type":"event"},{"inputs":[],"name":"acceptOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"distributor","type":"address"}],"name":"addFeeDistributor","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"address[]","name":"tokens","type":"address[]"},{"internalType":"uint256[]","name":"amounts","type":"uint256[]"}],"name":"distributeFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"epochDuration","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"feeDistributors","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"feeDistributorsLength","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"feeRegistry","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"},{"internalType":"address","name":"","type":"address"}],"name":"feeTokenData","outputs":[{"internalType":"uint256","name":"startTime","type":"uint256"},{"internalType":"uint256","name":"amount","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint256","name":"","type":"uint256"}],"name":"feeTokens","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"epoch","type":"uint256"}],"name":"feeTokensLength","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"address","name":"","type":"address"}],"name":"fees","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"ts","type":"uint256"}],"name":"getEpochStart","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"isFeeDistributor","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint16","name":"feeType","type":"uint16"},{"internalType":"address","name":"token","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"uint256","name":"feeRate","type":"uint256"},{"internalType":"bytes","name":"","type":"bytes"}],"name":"notifyFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"pendingOwner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"distributor","type":"address"},{"internalType":"bool","name":"updateArray","type":"bool"}],"name":"removeFeeDistributor","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_epochDuration","type":"uint256"}],"name":"setEpochDuration","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_feeRegistry","type":"address"}],"name":"setFeeRegistry","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","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":"withdrawERC20","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"withdrawETH","outputs":[],"stateMutability":"nonpayable","type":"function"}]

6080604052620151806002553480156200001857600080fd5b506040516200174a3803806200174a8339810160408190526200003b916200011d565b62000046336200006c565b600380546001600160a01b0319166001600160a01b03929092169190911790556200014a565b600180546001600160a01b0319169055620000938162000096602090811b62000c8717901c565b50565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b60006001600160a01b0382165b92915050565b6200010481620000e6565b81146200009357600080fd5b8051620000f381620000f9565b600060208284031215620001345762000134600080fd5b600062000142848462000110565b949350505050565b6115f0806200015a6000396000f3fe608060405234801561001057600080fd5b506004361061014d5760003560e01c806379ba5097116100c3578063acdad7d01161007c578063acdad7d0146102ef578063b3a408b814610302578063b7c6d43714610315578063dfcfa80514610328578063e30c397814610348578063f2fde38b1461035957600080fd5b806379ba50971461025d5780637b364e6c14610265578063843e8218146102a55780638da5cb5b146102b85780639dc0f2e8146102c9578063a6db0aa4146102dc57600080fd5b80634ff0876a116101155780634ff0876a146101e15780635286ad60146101ea5780635397401b146101f2578063641c9eaa146102225780637118c6d714610235578063715018a61461025557600080fd5b80630175e23b1461015257806330024dfe1461017b57806333c373771461019057806344004cc1146101bb5780634782f779146101ce575b600080fd5b610165610160366004610eb4565b61036c565b6040516101729190610ee5565b60405180910390f35b61018e610189366004610eb4565b61038c565b005b61016561019e366004610f18565b600460209081526000928352604080842090915290825290205481565b61018e6101c9366004610f55565b6103fd565b61018e6101dc366004610fa5565b61048d565b61016560025481565b600754610165565b610215610200366004610fd8565b60066020526000908152604090205460ff1681565b6040516101729190611001565b61018e610230366004611061565b6104ae565b6102486102433660046110f1565b610624565b604051610172919061111c565b61018e61065c565b61018e610670565b61029761027336600461112a565b60086020908152600092835260408084209091529082529020805460019091015482565b60405161017292919061114c565b61018e6102b33660046111ce565b6106b2565b6000546001600160a01b0316610248565b61018e6102d7366004611277565b61089d565b61018e6102ea366004610fd8565b610a81565b61018e6102fd366004610fd8565b610b74565b600354610248906001600160a01b031681565b610248610323366004610eb4565b610bec565b610165610336366004610eb4565b60009081526005602052604090205490565b6001546001600160a01b0316610248565b61018e610367366004610fd8565b610c16565b60006002548261037c91906112c0565b61038690836112ea565b92915050565b610394610cd7565b806000036103bd5760405162461bcd60e51b81526004016103b49061132b565b60405180910390fd5b60028190556040517f5bce98672bb5217cce91d9b398e088c3e74809346b9c3348f45cf509038504fc906103f2908390610ee5565b60405180910390a150565b610405610cd7565b8060000361047d576040516370a0823160e01b81526001600160a01b038416906370a082319061043990309060040161111c565b602060405180830381865afa158015610456573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061047a9190611346565b90505b610488838383610d10565b505050565b610495610cd7565b806000036104a05750475b6104aa8282610e03565b5050565b3360009081526006602052604090205460ff16806104d657506000546001600160a01b031633145b6104f25760405162461bcd60e51b81526004016103b490611386565b8281146105115760405162461bcd60e51b81526004016103b4906113b9565b82600080805b8381101561061957878782818110610531576105316113c9565b90506020020160208101906105469190610fd8565b925085858281811061055a5761055a6113c9565b60200291909101359250506001600160a01b03831661058e578160000361057f574791505b6105898983610e03565b610611565b81600003610606576040516370a0823160e01b81526001600160a01b038416906370a08231906105c290309060040161111c565b602060405180830381865afa1580156105df573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906106039190611346565b91505b610611838a84610d10565b600101610517565b505050505050505050565b6005602052816000526040600020818154811061064057600080fd5b6000918252602090912001546001600160a01b03169150829050565b610664610cd7565b61066e6000610e80565b565b336106836001546001600160a01b031690565b6001600160a01b0316146106a95760405162461bcd60e51b81526004016103b4906113df565b61066e33610e80565b60035460405163fe47d6e160e01b81526001600160a01b039091169063fe47d6e1906106e290339060040161111c565b602060405180830381865afa1580156106ff573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906107239190611437565b61074057604051635ae3252d60e11b815260040160405180910390fd5b600061074b4261036c565b60008181526004602090815260408083206001600160a01b038b1684529091528120549192508190036107fc5760008281526005602090815260408083208054600180820183559185528385200180546001600160a01b0319166001600160a01b038d169081179091558685526004845282852081865284528285208b9055825180840184524281528085018c81523387526008865284872092875291909452919093209151825551910155610841565b60008281526004602090815260408083206001600160a01b038b16808552908352818420858b0190553384526008835281842090845290915290206001018054870190555b866001600160a01b03168861ffff16336001600160a01b03167fd9cc3fd2bd703eb089f05b4dc0c28c75957d1775a1a2f72bff0e235a4dd710a6898960405161088b92919061114c565b60405180910390a45050505050505050565b6108a5610cd7565b6001600160a01b03821660009081526006602052604090205460ff166108dd5760405162461bcd60e51b81526004016103b490611476565b6001600160a01b0382166000908152600660205260409020805460ff191690558015610a495760075460005b81811015610a4657836001600160a01b03166007828154811061092e5761092e6113c9565b6000918252602090912001546001600160a01b031603610a3e5760076109556001846112ea565b81548110610965576109656113c9565b600091825260209091200154600780546001600160a01b039092169183908110610991576109916113c9565b600091825260209091200180546001600160a01b0319166001600160a01b03929092169190911790558360076109c86001856112ea565b815481106109d8576109d86113c9565b9060005260206000200160006101000a8154816001600160a01b0302191690836001600160a01b031602179055506007805480610a1757610a17611486565b600082815260209020810160001990810180546001600160a01b0319169055019055610a46565b600101610909565b50505b6040516001600160a01b038316907f26b772cce7966f2cbf620e2f87b81c664ac00ac028b0d245e1138823526a779990600090a25050565b610a89610cd7565b6001600160a01b038116610aaf5760405162461bcd60e51b81526004016103b4906114c2565b6001600160a01b03811660009081526006602052604090205460ff1615610ae85760405162461bcd60e51b81526004016103b4906114f4565b6001600160a01b038116600081815260066020526040808220805460ff1916600190811790915560078054918201815583527fa66cc928b5edb82af9bd49922954155ab7b0942694bea4ce44661d9a8736c6880180546001600160a01b03191684179055517f9bb88b21f52273267cddc0cbdd9f83415b89e652b819d3cfe37ad9ed833bc2499190a250565b610b7c610cd7565b6001600160a01b038116610ba25760405162461bcd60e51b81526004016103b4906114c2565b600380546001600160a01b0319166001600160a01b0383169081179091556040517f38cb9250f3682ece75ce5c2f1477a9f818ace4522e65517be27af55c2862197f90600090a250565b60078181548110610bfc57600080fd5b6000918252602090912001546001600160a01b0316905081565b610c1e610cd7565b600180546001600160a01b0383166001600160a01b03199091168117909155610c4f6000546001600160a01b031690565b6001600160a01b03167f38d16b8cac22d99fc7c124b9cd0de2d3fa1faef420bfe791d8c362d765e2270060405160405180910390a350565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b33610cea6000546001600160a01b031690565b6001600160a01b03161461066e5760405162461bcd60e51b81526004016103b490611536565b600080846001600160a01b031663a9059cbb8585604051602401610d35929190611546565b6040516020818303038152906040529060e01b6020820180516001600160e01b038381831617835250505050604051610d6e91906115a6565b6000604051808303816000865af19150503d8060008114610dab576040519150601f19603f3d011682016040523d82523d6000602084013e610db0565b606091505b5091509150811580610dde5750805115801590610dde575080806020019051810190610ddc9190611437565b155b15610dfc576040516312171d8360e31b815260040160405180910390fd5b5050505050565b6000826001600160a01b031682604051610e1c906115b2565b60006040518083038185875af1925050503d8060008114610e59576040519150601f19603f3d011682016040523d82523d6000602084013e610e5e565b606091505b50509050806104885760405163b12d13eb60e01b815260040160405180910390fd5b600180546001600160a01b0319169055610e9981610c87565b50565b805b8114610e9957600080fd5b803561038681610e9c565b600060208284031215610ec957610ec9600080fd5b6000610ed58484610ea9565b949350505050565b805b82525050565b602081016103868284610edd565b60006001600160a01b038216610386565b610e9e81610ef3565b803561038681610f04565b60008060408385031215610f2e57610f2e600080fd5b6000610f3a8585610ea9565b9250506020610f4b85828601610f0d565b9150509250929050565b600080600060608486031215610f6d57610f6d600080fd5b6000610f798686610f0d565b9350506020610f8a86828701610f0d565b9250506040610f9b86828701610ea9565b9150509250925092565b60008060408385031215610fbb57610fbb600080fd5b6000610fc78585610f0d565b9250506020610f4b85828601610ea9565b600060208284031215610fed57610fed600080fd5b6000610ed58484610f0d565b801515610edf565b602081016103868284610ff9565b60008083601f84011261102457611024600080fd5b50813567ffffffffffffffff81111561103f5761103f600080fd5b60208301915083602082028301111561105a5761105a600080fd5b9250929050565b60008060008060006060868803121561107c5761107c600080fd5b60006110888888610f0d565b955050602086013567ffffffffffffffff8111156110a8576110a8600080fd5b6110b48882890161100f565b9450945050604086013567ffffffffffffffff8111156110d6576110d6600080fd5b6110e28882890161100f565b92509250509295509295909350565b6000806040838503121561110757611107600080fd5b6000610fc78585610ea9565b610edf81610ef3565b602081016103868284611113565b6000806040838503121561114057611140600080fd5b6000610f3a8585610f0d565b6040810161115a8285610edd565b6111676020830184610edd565b9392505050565b61ffff8116610e9e565b80356103868161116e565b60008083601f84011261119857611198600080fd5b50813567ffffffffffffffff8111156111b3576111b3600080fd5b60208301915083600182028301111561105a5761105a600080fd5b60008060008060008060a087890312156111ea576111ea600080fd5b60006111f68989611178565b965050602061120789828a01610f0d565b955050604061121889828a01610ea9565b945050606061122989828a01610ea9565b935050608087013567ffffffffffffffff81111561124957611249600080fd5b61125589828a01611183565b92509250509295509295509295565b801515610e9e565b803561038681611264565b6000806040838503121561128d5761128d600080fd5b60006112998585610f0d565b9250506020610f4b8582860161126c565b634e487b7160e01b600052601260045260246000fd5b6000826112cf576112cf6112aa565b500690565b634e487b7160e01b600052601160045260246000fd5b6000828210156112fc576112fc6112d4565b500390565b601081526000602082016f24b73b30b634b210323ab930ba34b7b760811b815291505b5060200190565b6020808252810161038681611301565b805161038681610e9c565b60006020828403121561135b5761135b600080fd5b6000610ed5848461133b565b60088152600060208201674e6f207065726d7360c01b81529150611324565b6020808252810161038681611367565b600c81526000602082016b0aee4dedcce40d8cadccee8d60a31b81529150611324565b6020808252810161038681611396565b634e487b7160e01b600052603260045260246000fd5b6020808252810161038681602981527f4f776e61626c6532537465703a2063616c6c6572206973206e6f7420746865206020820152683732bb9037bbb732b960b91b604082015260600190565b805161038681611264565b60006020828403121561144c5761144c600080fd5b6000610ed5848461142c565b6007815260006020820166139bdd081cd95d60ca1b81529150611324565b6020808252810161038681611458565b634e487b7160e01b600052603160045260246000fd5b600f81526000602082016e496e76616c6964206164647265737360881b81529150611324565b602080825281016103868161149c565b600b81526000602082016a105b1c9958591e481cd95d60aa1b81529150611324565b60208082528101610386816114d2565b60208082527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657291019081526000611324565b6020808252810161038681611504565b6040810161115a8285611113565b60005b8381101561156f578181015183820152602001611557565b8381111561157e576000848401525b50505050565b600061158e825190565b61159c818560208601611554565b9290920192915050565b60006111678284611584565b60008161038656fea264697066735822122094e8d7a68debfa7973dee226fba77cbf702e6ce566b2a03e5af9863c1870618a64736f6c634300080f00330000000000000000000000008cdf4ec0d5ee197b00467a720660c44480b3ec60

Deployed Bytecode

0x608060405234801561001057600080fd5b506004361061014d5760003560e01c806379ba5097116100c3578063acdad7d01161007c578063acdad7d0146102ef578063b3a408b814610302578063b7c6d43714610315578063dfcfa80514610328578063e30c397814610348578063f2fde38b1461035957600080fd5b806379ba50971461025d5780637b364e6c14610265578063843e8218146102a55780638da5cb5b146102b85780639dc0f2e8146102c9578063a6db0aa4146102dc57600080fd5b80634ff0876a116101155780634ff0876a146101e15780635286ad60146101ea5780635397401b146101f2578063641c9eaa146102225780637118c6d714610235578063715018a61461025557600080fd5b80630175e23b1461015257806330024dfe1461017b57806333c373771461019057806344004cc1146101bb5780634782f779146101ce575b600080fd5b610165610160366004610eb4565b61036c565b6040516101729190610ee5565b60405180910390f35b61018e610189366004610eb4565b61038c565b005b61016561019e366004610f18565b600460209081526000928352604080842090915290825290205481565b61018e6101c9366004610f55565b6103fd565b61018e6101dc366004610fa5565b61048d565b61016560025481565b600754610165565b610215610200366004610fd8565b60066020526000908152604090205460ff1681565b6040516101729190611001565b61018e610230366004611061565b6104ae565b6102486102433660046110f1565b610624565b604051610172919061111c565b61018e61065c565b61018e610670565b61029761027336600461112a565b60086020908152600092835260408084209091529082529020805460019091015482565b60405161017292919061114c565b61018e6102b33660046111ce565b6106b2565b6000546001600160a01b0316610248565b61018e6102d7366004611277565b61089d565b61018e6102ea366004610fd8565b610a81565b61018e6102fd366004610fd8565b610b74565b600354610248906001600160a01b031681565b610248610323366004610eb4565b610bec565b610165610336366004610eb4565b60009081526005602052604090205490565b6001546001600160a01b0316610248565b61018e610367366004610fd8565b610c16565b60006002548261037c91906112c0565b61038690836112ea565b92915050565b610394610cd7565b806000036103bd5760405162461bcd60e51b81526004016103b49061132b565b60405180910390fd5b60028190556040517f5bce98672bb5217cce91d9b398e088c3e74809346b9c3348f45cf509038504fc906103f2908390610ee5565b60405180910390a150565b610405610cd7565b8060000361047d576040516370a0823160e01b81526001600160a01b038416906370a082319061043990309060040161111c565b602060405180830381865afa158015610456573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061047a9190611346565b90505b610488838383610d10565b505050565b610495610cd7565b806000036104a05750475b6104aa8282610e03565b5050565b3360009081526006602052604090205460ff16806104d657506000546001600160a01b031633145b6104f25760405162461bcd60e51b81526004016103b490611386565b8281146105115760405162461bcd60e51b81526004016103b4906113b9565b82600080805b8381101561061957878782818110610531576105316113c9565b90506020020160208101906105469190610fd8565b925085858281811061055a5761055a6113c9565b60200291909101359250506001600160a01b03831661058e578160000361057f574791505b6105898983610e03565b610611565b81600003610606576040516370a0823160e01b81526001600160a01b038416906370a08231906105c290309060040161111c565b602060405180830381865afa1580156105df573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906106039190611346565b91505b610611838a84610d10565b600101610517565b505050505050505050565b6005602052816000526040600020818154811061064057600080fd5b6000918252602090912001546001600160a01b03169150829050565b610664610cd7565b61066e6000610e80565b565b336106836001546001600160a01b031690565b6001600160a01b0316146106a95760405162461bcd60e51b81526004016103b4906113df565b61066e33610e80565b60035460405163fe47d6e160e01b81526001600160a01b039091169063fe47d6e1906106e290339060040161111c565b602060405180830381865afa1580156106ff573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906107239190611437565b61074057604051635ae3252d60e11b815260040160405180910390fd5b600061074b4261036c565b60008181526004602090815260408083206001600160a01b038b1684529091528120549192508190036107fc5760008281526005602090815260408083208054600180820183559185528385200180546001600160a01b0319166001600160a01b038d169081179091558685526004845282852081865284528285208b9055825180840184524281528085018c81523387526008865284872092875291909452919093209151825551910155610841565b60008281526004602090815260408083206001600160a01b038b16808552908352818420858b0190553384526008835281842090845290915290206001018054870190555b866001600160a01b03168861ffff16336001600160a01b03167fd9cc3fd2bd703eb089f05b4dc0c28c75957d1775a1a2f72bff0e235a4dd710a6898960405161088b92919061114c565b60405180910390a45050505050505050565b6108a5610cd7565b6001600160a01b03821660009081526006602052604090205460ff166108dd5760405162461bcd60e51b81526004016103b490611476565b6001600160a01b0382166000908152600660205260409020805460ff191690558015610a495760075460005b81811015610a4657836001600160a01b03166007828154811061092e5761092e6113c9565b6000918252602090912001546001600160a01b031603610a3e5760076109556001846112ea565b81548110610965576109656113c9565b600091825260209091200154600780546001600160a01b039092169183908110610991576109916113c9565b600091825260209091200180546001600160a01b0319166001600160a01b03929092169190911790558360076109c86001856112ea565b815481106109d8576109d86113c9565b9060005260206000200160006101000a8154816001600160a01b0302191690836001600160a01b031602179055506007805480610a1757610a17611486565b600082815260209020810160001990810180546001600160a01b0319169055019055610a46565b600101610909565b50505b6040516001600160a01b038316907f26b772cce7966f2cbf620e2f87b81c664ac00ac028b0d245e1138823526a779990600090a25050565b610a89610cd7565b6001600160a01b038116610aaf5760405162461bcd60e51b81526004016103b4906114c2565b6001600160a01b03811660009081526006602052604090205460ff1615610ae85760405162461bcd60e51b81526004016103b4906114f4565b6001600160a01b038116600081815260066020526040808220805460ff1916600190811790915560078054918201815583527fa66cc928b5edb82af9bd49922954155ab7b0942694bea4ce44661d9a8736c6880180546001600160a01b03191684179055517f9bb88b21f52273267cddc0cbdd9f83415b89e652b819d3cfe37ad9ed833bc2499190a250565b610b7c610cd7565b6001600160a01b038116610ba25760405162461bcd60e51b81526004016103b4906114c2565b600380546001600160a01b0319166001600160a01b0383169081179091556040517f38cb9250f3682ece75ce5c2f1477a9f818ace4522e65517be27af55c2862197f90600090a250565b60078181548110610bfc57600080fd5b6000918252602090912001546001600160a01b0316905081565b610c1e610cd7565b600180546001600160a01b0383166001600160a01b03199091168117909155610c4f6000546001600160a01b031690565b6001600160a01b03167f38d16b8cac22d99fc7c124b9cd0de2d3fa1faef420bfe791d8c362d765e2270060405160405180910390a350565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b33610cea6000546001600160a01b031690565b6001600160a01b03161461066e5760405162461bcd60e51b81526004016103b490611536565b600080846001600160a01b031663a9059cbb8585604051602401610d35929190611546565b6040516020818303038152906040529060e01b6020820180516001600160e01b038381831617835250505050604051610d6e91906115a6565b6000604051808303816000865af19150503d8060008114610dab576040519150601f19603f3d011682016040523d82523d6000602084013e610db0565b606091505b5091509150811580610dde5750805115801590610dde575080806020019051810190610ddc9190611437565b155b15610dfc576040516312171d8360e31b815260040160405180910390fd5b5050505050565b6000826001600160a01b031682604051610e1c906115b2565b60006040518083038185875af1925050503d8060008114610e59576040519150601f19603f3d011682016040523d82523d6000602084013e610e5e565b606091505b50509050806104885760405163b12d13eb60e01b815260040160405180910390fd5b600180546001600160a01b0319169055610e9981610c87565b50565b805b8114610e9957600080fd5b803561038681610e9c565b600060208284031215610ec957610ec9600080fd5b6000610ed58484610ea9565b949350505050565b805b82525050565b602081016103868284610edd565b60006001600160a01b038216610386565b610e9e81610ef3565b803561038681610f04565b60008060408385031215610f2e57610f2e600080fd5b6000610f3a8585610ea9565b9250506020610f4b85828601610f0d565b9150509250929050565b600080600060608486031215610f6d57610f6d600080fd5b6000610f798686610f0d565b9350506020610f8a86828701610f0d565b9250506040610f9b86828701610ea9565b9150509250925092565b60008060408385031215610fbb57610fbb600080fd5b6000610fc78585610f0d565b9250506020610f4b85828601610ea9565b600060208284031215610fed57610fed600080fd5b6000610ed58484610f0d565b801515610edf565b602081016103868284610ff9565b60008083601f84011261102457611024600080fd5b50813567ffffffffffffffff81111561103f5761103f600080fd5b60208301915083602082028301111561105a5761105a600080fd5b9250929050565b60008060008060006060868803121561107c5761107c600080fd5b60006110888888610f0d565b955050602086013567ffffffffffffffff8111156110a8576110a8600080fd5b6110b48882890161100f565b9450945050604086013567ffffffffffffffff8111156110d6576110d6600080fd5b6110e28882890161100f565b92509250509295509295909350565b6000806040838503121561110757611107600080fd5b6000610fc78585610ea9565b610edf81610ef3565b602081016103868284611113565b6000806040838503121561114057611140600080fd5b6000610f3a8585610f0d565b6040810161115a8285610edd565b6111676020830184610edd565b9392505050565b61ffff8116610e9e565b80356103868161116e565b60008083601f84011261119857611198600080fd5b50813567ffffffffffffffff8111156111b3576111b3600080fd5b60208301915083600182028301111561105a5761105a600080fd5b60008060008060008060a087890312156111ea576111ea600080fd5b60006111f68989611178565b965050602061120789828a01610f0d565b955050604061121889828a01610ea9565b945050606061122989828a01610ea9565b935050608087013567ffffffffffffffff81111561124957611249600080fd5b61125589828a01611183565b92509250509295509295509295565b801515610e9e565b803561038681611264565b6000806040838503121561128d5761128d600080fd5b60006112998585610f0d565b9250506020610f4b8582860161126c565b634e487b7160e01b600052601260045260246000fd5b6000826112cf576112cf6112aa565b500690565b634e487b7160e01b600052601160045260246000fd5b6000828210156112fc576112fc6112d4565b500390565b601081526000602082016f24b73b30b634b210323ab930ba34b7b760811b815291505b5060200190565b6020808252810161038681611301565b805161038681610e9c565b60006020828403121561135b5761135b600080fd5b6000610ed5848461133b565b60088152600060208201674e6f207065726d7360c01b81529150611324565b6020808252810161038681611367565b600c81526000602082016b0aee4dedcce40d8cadccee8d60a31b81529150611324565b6020808252810161038681611396565b634e487b7160e01b600052603260045260246000fd5b6020808252810161038681602981527f4f776e61626c6532537465703a2063616c6c6572206973206e6f7420746865206020820152683732bb9037bbb732b960b91b604082015260600190565b805161038681611264565b60006020828403121561144c5761144c600080fd5b6000610ed5848461142c565b6007815260006020820166139bdd081cd95d60ca1b81529150611324565b6020808252810161038681611458565b634e487b7160e01b600052603160045260246000fd5b600f81526000602082016e496e76616c6964206164647265737360881b81529150611324565b602080825281016103868161149c565b600b81526000602082016a105b1c9958591e481cd95d60aa1b81529150611324565b60208082528101610386816114d2565b60208082527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657291019081526000611324565b6020808252810161038681611504565b6040810161115a8285611113565b60005b8381101561156f578181015183820152602001611557565b8381111561157e576000848401525b50505050565b600061158e825190565b61159c818560208601611554565b9290920192915050565b60006111678284611584565b60008161038656fea264697066735822122094e8d7a68debfa7973dee226fba77cbf702e6ce566b2a03e5af9863c1870618a64736f6c634300080f0033

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

0000000000000000000000008cdf4ec0d5ee197b00467a720660c44480b3ec60

-----Decoded View---------------
Arg [0] : _feeRegistry (address): 0x8cDf4Ec0D5ee197B00467A720660C44480B3Ec60

-----Encoded View---------------
1 Constructor Arguments found :
Arg [0] : 0000000000000000000000008cdf4ec0d5ee197b00467a720660c44480b3ec60


Block Transaction Gas Used Reward
view all blocks sequenced

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
[ 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.