ETH Price: $2,699.18 (+2.36%)
Gas: 0.04 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:5181 days ago1732479231IN
SyncSwap: Fee Recipient
0 ETH0.000653190.70231081
Distribute Fees114230392024-10-30 17:56:50106 days ago1730311010IN
SyncSwap: Fee Recipient
0 ETH0.000417320.41629639
Distribute Fees60386252024-06-27 9:19:40232 days ago1719479980IN
SyncSwap: Fee Recipient
0 ETH0.000052750.06
Distribute Fees51037682024-06-02 20:24:13256 days ago1717359853IN
SyncSwap: Fee Recipient
0 ETH0.000055870.07340831
Set Fee Registry49619462024-05-28 20:54:37261 days ago1716929677IN
SyncSwap: Fee Recipient
0 ETH0.000002540.084
Distribute Fees47863072024-05-22 18:31:39267 days ago1716402699IN
SyncSwap: Fee Recipient
0 ETH0.000045670.09200363
Set Fee Registry45809832024-05-15 15:24:03274 days ago1715786643IN
SyncSwap: Fee Recipient
0 ETH0.00000210.06952551
Distribute Fees35136142024-04-08 13:47:29312 days ago1712584049IN
SyncSwap: Fee Recipient
0 ETH0.000032160.1262876
Distribute Fees26019012024-03-01 3:58:45350 days ago1709265525IN
SyncSwap: Fee Recipient
0 ETH0.000574211.52702508
Set Fee Registry22180842024-02-12 9:05:54368 days ago1707728754IN
SyncSwap: Fee Recipient
0 ETH0.00006021.9878836
Distribute Fees16247472024-01-12 11:24:56399 days ago1705058696IN
SyncSwap: Fee Recipient
0 ETH0.00078622.01739248
Distribute Fees13038172023-12-21 4:25:27421 days ago1703132727IN
SyncSwap: Fee Recipient
0 ETH0.001561592.94284846
Distribute Fees9168842023-11-20 14:28:15451 days ago1700490495IN
SyncSwap: Fee Recipient
0 ETH0.000350122.40509032
Distribute Fees9016282023-11-19 4:34:07453 days ago1700368447IN
SyncSwap: Fee Recipient
0 ETH0.000232411.2928215
Distribute Fees6551882023-10-17 18:28:58485 days ago1697567338IN
SyncSwap: Fee Recipient
0 ETH0.000154221.02216727

Latest 25 internal transactions (View All)

Parent Transaction Hash Block From To
158173532025-02-14 14:18:158 mins ago1739542695
SyncSwap: Fee Recipient
0 ETH
158173532025-02-14 14:18:158 mins ago1739542695
SyncSwap: Fee Recipient
0 ETH
158172802025-02-14 14:15:4310 mins ago1739542543
SyncSwap: Fee Recipient
0 ETH
158172802025-02-14 14:15:4310 mins ago1739542543
SyncSwap: Fee Recipient
0 ETH
158172022025-02-14 14:12:5813 mins ago1739542378
SyncSwap: Fee Recipient
0 ETH
158172022025-02-14 14:12:5813 mins ago1739542378
SyncSwap: Fee Recipient
0 ETH
158171032025-02-14 14:09:2216 mins ago1739542162
SyncSwap: Fee Recipient
0 ETH
158171032025-02-14 14:09:2216 mins ago1739542162
SyncSwap: Fee Recipient
0 ETH
158170782025-02-14 14:08:2717 mins ago1739542107
SyncSwap: Fee Recipient
0 ETH
158170782025-02-14 14:08:2717 mins ago1739542107
SyncSwap: Fee Recipient
0 ETH
158169722025-02-14 14:04:4621 mins ago1739541886
SyncSwap: Fee Recipient
0 ETH
158169722025-02-14 14:04:4621 mins ago1739541886
SyncSwap: Fee Recipient
0 ETH
158167962025-02-14 13:58:3527 mins ago1739541515
SyncSwap: Fee Recipient
0 ETH
158167962025-02-14 13:58:3527 mins ago1739541515
SyncSwap: Fee Recipient
0 ETH
158165072025-02-14 13:47:5438 mins ago1739540874
SyncSwap: Fee Recipient
0 ETH
158165072025-02-14 13:47:5438 mins ago1739540874
SyncSwap: Fee Recipient
0 ETH
158165012025-02-14 13:47:4138 mins ago1739540861
SyncSwap: Fee Recipient
0 ETH
158165012025-02-14 13:47:4138 mins ago1739540861
SyncSwap: Fee Recipient
0 ETH
158164652025-02-14 13:46:2439 mins ago1739540784
SyncSwap: Fee Recipient
0 ETH
158164652025-02-14 13:46:2439 mins ago1739540784
SyncSwap: Fee Recipient
0 ETH
158162002025-02-14 13:37:0549 mins ago1739540225
SyncSwap: Fee Recipient
0 ETH
158162002025-02-14 13:37:0549 mins ago1739540225
SyncSwap: Fee Recipient
0 ETH
158160952025-02-14 13:33:2452 mins ago1739540004
SyncSwap: Fee Recipient
0 ETH
158160952025-02-14 13:33:2452 mins ago1739540004
SyncSwap: Fee Recipient
0 ETH
158158072025-02-14 13:23:091 hr ago1739539389
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.