ETH Price: $3,434.31 (-2.32%)

Contract

0x42DEd95dc5d5A56502B25FaC1Ec71629D713D76c
 

Overview

ETH Balance

3.260634072589430696 ETH

Eth Value

$11,198.02 (@ $3,434.31/ETH)

Multichain Info

No addresses found
Transaction Hash
Method
Block
From
To
Release183738822023-10-18 1:11:35429 days ago1697591495IN
0x42DEd95d...9D713D76c
0 ETH0.000384536.13888281
Release169658892023-04-03 3:37:23627 days ago1680493043IN
0x42DEd95d...9D713D76c
0 ETH0.0008991119.74375813
Release165268372023-01-31 12:34:35689 days ago1675168475IN
0x42DEd95d...9D713D76c
0 ETH0.0010423716.64096846
Release164602822023-01-22 5:33:47698 days ago1674365627IN
0x42DEd95d...9D713D76c
0 ETH0.0009763815.58755215
Release164232892023-01-17 1:40:11703 days ago1673919611IN
0x42DEd95d...9D713D76c
0 ETH0.0007651616.80236833
Release163874332023-01-12 1:27:11708 days ago1673486831IN
0x42DEd95d...9D713D76c
0 ETH0.0015421324.61938177
Release163540572023-01-07 9:37:47713 days ago1673084267IN
0x42DEd95d...9D713D76c
0 ETH0.00088914.19251718
Release163334482023-01-04 12:32:47716 days ago1672835567IN
0x42DEd95d...9D713D76c
0 ETH0.0010687617.06233065
Release163170542023-01-02 5:39:23718 days ago1672637963IN
0x42DEd95d...9D713D76c
0 ETH0.0008445913.48351943
Release163158272023-01-02 1:33:11718 days ago1672623191IN
0x42DEd95d...9D713D76c
0 ETH0.0011575618.47999987
Release163094502023-01-01 4:12:59719 days ago1672546379IN
0x42DEd95d...9D713D76c
0 ETH0.0008613913.75172008
Release163082122023-01-01 0:04:35719 days ago1672531475IN
0x42DEd95d...9D713D76c
0 ETH0.0007943412.68127249
Release163013522022-12-31 1:05:47720 days ago1672448747IN
0x42DEd95d...9D713D76c
0 ETH0.0005905518.96767095
Release163013512022-12-31 1:05:35720 days ago1672448735IN
0x42DEd95d...9D713D76c
0 ETH0.0012290319.62093043
Release163007892022-12-30 23:13:11720 days ago1672441991IN
0x42DEd95d...9D713D76c
0 ETH0.0015846425.29804683
Release162936652022-12-29 23:21:35721 days ago1672356095IN
0x42DEd95d...9D713D76c
0 ETH0.0015717725.09745548
Release162888562022-12-29 7:14:35722 days ago1672298075IN
0x42DEd95d...9D713D76c
0 ETH0.0008272313.20640007
Release162882962022-12-29 5:21:35722 days ago1672291295IN
0x42DEd95d...9D713D76c
0 ETH0.0009077914.49250685
Release162880322022-12-29 4:28:35722 days ago1672288115IN
0x42DEd95d...9D713D76c
0 ETH0.001025416.37013568
Release162874352022-12-29 2:28:47722 days ago1672280927IN
0x42DEd95d...9D713D76c
0 ETH0.0009207914.7
Release162869652022-12-29 0:53:59722 days ago1672275239IN
0x42DEd95d...9D713D76c
0 ETH0.0008477813.53449135
Release162844812022-12-28 16:35:11723 days ago1672245311IN
0x42DEd95d...9D713D76c
0 ETH0.0010606916.93352847
Release162836172022-12-28 13:41:59723 days ago1672234919IN
0x42DEd95d...9D713D76c
0 ETH0.0009379314.97373783
Release162828252022-12-28 11:03:11723 days ago1672225391IN
0x42DEd95d...9D713D76c
0 ETH0.0007671812.24771588
Release162826182022-12-28 10:21:23723 days ago1672222883IN
0x42DEd95d...9D713D76c
0 ETH0.0006018211.98138807
View all transactions

Latest 25 internal transactions (View All)

Advanced mode:
Parent Transaction Hash Block
From
To
183738822023-10-18 1:11:35429 days ago1697591495
0x42DEd95d...9D713D76c
1.06734645 ETH
170493122023-04-15 1:52:59615 days ago1681523579
0x42DEd95d...9D713D76c
0.005 ETH
169658892023-04-03 3:37:23627 days ago1680493043
0x42DEd95d...9D713D76c
0.00709419 ETH
169568462023-04-01 21:03:47628 days ago1680383027
0x42DEd95d...9D713D76c
0.0002 ETH
168876732023-03-23 3:47:35638 days ago1679543255
0x42DEd95d...9D713D76c
0.0005 ETH
168858362023-03-22 21:34:47638 days ago1679520887
0x42DEd95d...9D713D76c
0.00225 ETH
168550172023-03-18 13:44:23643 days ago1679147063
0x42DEd95d...9D713D76c
0.00064 ETH
168516702023-03-18 2:26:35643 days ago1679106395
0x42DEd95d...9D713D76c
0.0006 ETH
168385232023-03-16 6:05:59645 days ago1678946759
0x42DEd95d...9D713D76c
0.00059 ETH
168376992023-03-16 3:19:35645 days ago1678936775
0x42DEd95d...9D713D76c
0.00058999 ETH
168310022023-03-15 4:42:23646 days ago1678855343
0x42DEd95d...9D713D76c
0.0005775 ETH
168310022023-03-15 4:42:23646 days ago1678855343
0x42DEd95d...9D713D76c
0.000714 ETH
168310022023-03-15 4:42:23646 days ago1678855343
0x42DEd95d...9D713D76c
0.0005775 ETH
168226882023-03-14 0:39:59647 days ago1678754399
0x42DEd95d...9D713D76c
0.0007 ETH
168206662023-03-13 17:51:47648 days ago1678729907
0x42DEd95d...9D713D76c
0.00779 ETH
168189012023-03-13 11:53:59648 days ago1678708439
0x42DEd95d...9D713D76c
0.00055 ETH
168170822023-03-13 5:47:23648 days ago1678686443
0x42DEd95d...9D713D76c
0.00144 ETH
168131832023-03-12 16:38:11649 days ago1678639091
0x42DEd95d...9D713D76c
0.00198 ETH
168123902023-03-12 13:58:11649 days ago1678629491
0x42DEd95d...9D713D76c
0.00073 ETH
168116062023-03-12 11:19:47649 days ago1678619987
0x42DEd95d...9D713D76c
0.0008 ETH
168112892023-03-12 10:15:47649 days ago1678616147
0x42DEd95d...9D713D76c
0.00078 ETH
168066082023-03-11 18:26:11650 days ago1678559171
0x42DEd95d...9D713D76c
0.00148 ETH
168066052023-03-11 18:25:35650 days ago1678559135
0x42DEd95d...9D713D76c
0.0009 ETH
168065562023-03-11 18:15:47650 days ago1678558547
0x42DEd95d...9D713D76c
0.00074 ETH
168051632023-03-11 13:33:11650 days ago1678541591
0x42DEd95d...9D713D76c
0.00059 ETH
View All Internal Transactions
Loading...
Loading

Contract Source Code Verified (Exact Match)

Contract Name:
Splitter

Compiler Version
v0.8.17+commit.8df45f5f

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion
File 1 of 7 : Splitter.sol
// SPDX-License-Identifier: MIT 

pragma solidity ^0.8.17;

import "@openzeppelin/contracts/finance/PaymentSplitter.sol";

contract Splitter is PaymentSplitter {

    constructor (
        address[] memory payees,
        uint256[] memory shares
    ) PaymentSplitter(payees, shares) {}
    
}

File 2 of 7 : PaymentSplitter.sol
// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts (last updated v4.8.0) (finance/PaymentSplitter.sol)

pragma solidity ^0.8.0;

import "../token/ERC20/utils/SafeERC20.sol";
import "../utils/Address.sol";
import "../utils/Context.sol";

/**
 * @title PaymentSplitter
 * @dev This contract allows to split Ether payments among a group of accounts. The sender does not need to be aware
 * that the Ether will be split in this way, since it is handled transparently by the contract.
 *
 * The split can be in equal parts or in any other arbitrary proportion. The way this is specified is by assigning each
 * account to a number of shares. Of all the Ether that this contract receives, each account will then be able to claim
 * an amount proportional to the percentage of total shares they were assigned. The distribution of shares is set at the
 * time of contract deployment and can't be updated thereafter.
 *
 * `PaymentSplitter` follows a _pull payment_ model. This means that payments are not automatically forwarded to the
 * accounts but kept in this contract, and the actual transfer is triggered as a separate step by calling the {release}
 * function.
 *
 * NOTE: This contract assumes that ERC20 tokens will behave similarly to native tokens (Ether). Rebasing tokens, and
 * tokens that apply fees during transfers, are likely to not be supported as expected. If in doubt, we encourage you
 * to run tests before sending real value to this contract.
 */
contract PaymentSplitter is Context {
    event PayeeAdded(address account, uint256 shares);
    event PaymentReleased(address to, uint256 amount);
    event ERC20PaymentReleased(IERC20 indexed token, address to, uint256 amount);
    event PaymentReceived(address from, uint256 amount);

    uint256 private _totalShares;
    uint256 private _totalReleased;

    mapping(address => uint256) private _shares;
    mapping(address => uint256) private _released;
    address[] private _payees;

    mapping(IERC20 => uint256) private _erc20TotalReleased;
    mapping(IERC20 => mapping(address => uint256)) private _erc20Released;

    /**
     * @dev Creates an instance of `PaymentSplitter` where each account in `payees` is assigned the number of shares at
     * the matching position in the `shares` array.
     *
     * All addresses in `payees` must be non-zero. Both arrays must have the same non-zero length, and there must be no
     * duplicates in `payees`.
     */
    constructor(address[] memory payees, uint256[] memory shares_) payable {
        require(payees.length == shares_.length, "PaymentSplitter: payees and shares length mismatch");
        require(payees.length > 0, "PaymentSplitter: no payees");

        for (uint256 i = 0; i < payees.length; i++) {
            _addPayee(payees[i], shares_[i]);
        }
    }

    /**
     * @dev The Ether received will be logged with {PaymentReceived} events. Note that these events are not fully
     * reliable: it's possible for a contract to receive Ether without triggering this function. This only affects the
     * reliability of the events, and not the actual splitting of Ether.
     *
     * To learn more about this see the Solidity documentation for
     * https://solidity.readthedocs.io/en/latest/contracts.html#fallback-function[fallback
     * functions].
     */
    receive() external payable virtual {
        emit PaymentReceived(_msgSender(), msg.value);
    }

    /**
     * @dev Getter for the total shares held by payees.
     */
    function totalShares() public view returns (uint256) {
        return _totalShares;
    }

    /**
     * @dev Getter for the total amount of Ether already released.
     */
    function totalReleased() public view returns (uint256) {
        return _totalReleased;
    }

    /**
     * @dev Getter for the total amount of `token` already released. `token` should be the address of an IERC20
     * contract.
     */
    function totalReleased(IERC20 token) public view returns (uint256) {
        return _erc20TotalReleased[token];
    }

    /**
     * @dev Getter for the amount of shares held by an account.
     */
    function shares(address account) public view returns (uint256) {
        return _shares[account];
    }

    /**
     * @dev Getter for the amount of Ether already released to a payee.
     */
    function released(address account) public view returns (uint256) {
        return _released[account];
    }

    /**
     * @dev Getter for the amount of `token` tokens already released to a payee. `token` should be the address of an
     * IERC20 contract.
     */
    function released(IERC20 token, address account) public view returns (uint256) {
        return _erc20Released[token][account];
    }

    /**
     * @dev Getter for the address of the payee number `index`.
     */
    function payee(uint256 index) public view returns (address) {
        return _payees[index];
    }

    /**
     * @dev Getter for the amount of payee's releasable Ether.
     */
    function releasable(address account) public view returns (uint256) {
        uint256 totalReceived = address(this).balance + totalReleased();
        return _pendingPayment(account, totalReceived, released(account));
    }

    /**
     * @dev Getter for the amount of payee's releasable `token` tokens. `token` should be the address of an
     * IERC20 contract.
     */
    function releasable(IERC20 token, address account) public view returns (uint256) {
        uint256 totalReceived = token.balanceOf(address(this)) + totalReleased(token);
        return _pendingPayment(account, totalReceived, released(token, account));
    }

    /**
     * @dev Triggers a transfer to `account` of the amount of Ether they are owed, according to their percentage of the
     * total shares and their previous withdrawals.
     */
    function release(address payable account) public virtual {
        require(_shares[account] > 0, "PaymentSplitter: account has no shares");

        uint256 payment = releasable(account);

        require(payment != 0, "PaymentSplitter: account is not due payment");

        // _totalReleased is the sum of all values in _released.
        // If "_totalReleased += payment" does not overflow, then "_released[account] += payment" cannot overflow.
        _totalReleased += payment;
        unchecked {
            _released[account] += payment;
        }

        Address.sendValue(account, payment);
        emit PaymentReleased(account, payment);
    }

    /**
     * @dev Triggers a transfer to `account` of the amount of `token` tokens they are owed, according to their
     * percentage of the total shares and their previous withdrawals. `token` must be the address of an IERC20
     * contract.
     */
    function release(IERC20 token, address account) public virtual {
        require(_shares[account] > 0, "PaymentSplitter: account has no shares");

        uint256 payment = releasable(token, account);

        require(payment != 0, "PaymentSplitter: account is not due payment");

        // _erc20TotalReleased[token] is the sum of all values in _erc20Released[token].
        // If "_erc20TotalReleased[token] += payment" does not overflow, then "_erc20Released[token][account] += payment"
        // cannot overflow.
        _erc20TotalReleased[token] += payment;
        unchecked {
            _erc20Released[token][account] += payment;
        }

        SafeERC20.safeTransfer(token, account, payment);
        emit ERC20PaymentReleased(token, account, payment);
    }

    /**
     * @dev internal logic for computing the pending payment of an `account` given the token historical balances and
     * already released amounts.
     */
    function _pendingPayment(
        address account,
        uint256 totalReceived,
        uint256 alreadyReleased
    ) private view returns (uint256) {
        return (totalReceived * _shares[account]) / _totalShares - alreadyReleased;
    }

    /**
     * @dev Add a new payee to the contract.
     * @param account The address of the payee to add.
     * @param shares_ The number of shares owned by the payee.
     */
    function _addPayee(address account, uint256 shares_) private {
        require(account != address(0), "PaymentSplitter: account is the zero address");
        require(shares_ > 0, "PaymentSplitter: shares are 0");
        require(_shares[account] == 0, "PaymentSplitter: account already has shares");

        _payees.push(account);
        _shares[account] = shares_;
        _totalShares = _totalShares + shares_;
        emit PayeeAdded(account, shares_);
    }
}

File 3 of 7 : draft-IERC20Permit.sol
// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts v4.4.1 (token/ERC20/extensions/draft-IERC20Permit.sol)

pragma solidity ^0.8.0;

/**
 * @dev Interface of the ERC20 Permit extension allowing approvals to be made via signatures, as defined in
 * https://eips.ethereum.org/EIPS/eip-2612[EIP-2612].
 *
 * Adds the {permit} method, which can be used to change an account's ERC20 allowance (see {IERC20-allowance}) by
 * presenting a message signed by the account. By not relying on {IERC20-approve}, the token holder account doesn't
 * need to send a transaction, and thus is not required to hold Ether at all.
 */
interface IERC20Permit {
    /**
     * @dev Sets `value` as the allowance of `spender` over ``owner``'s tokens,
     * given ``owner``'s signed approval.
     *
     * IMPORTANT: The same issues {IERC20-approve} has related to transaction
     * ordering also apply here.
     *
     * Emits an {Approval} event.
     *
     * Requirements:
     *
     * - `spender` cannot be the zero address.
     * - `deadline` must be a timestamp in the future.
     * - `v`, `r` and `s` must be a valid `secp256k1` signature from `owner`
     * over the EIP712-formatted function arguments.
     * - the signature must use ``owner``'s current nonce (see {nonces}).
     *
     * For more information on the signature format, see the
     * https://eips.ethereum.org/EIPS/eip-2612#specification[relevant EIP
     * section].
     */
    function permit(
        address owner,
        address spender,
        uint256 value,
        uint256 deadline,
        uint8 v,
        bytes32 r,
        bytes32 s
    ) external;

    /**
     * @dev Returns the current nonce for `owner`. This value must be
     * included whenever a signature is generated for {permit}.
     *
     * Every successful call to {permit} increases ``owner``'s nonce by one. This
     * prevents a signature from being used multiple times.
     */
    function nonces(address owner) external view returns (uint256);

    /**
     * @dev Returns the domain separator used in the encoding of the signature for {permit}, as defined by {EIP712}.
     */
    // solhint-disable-next-line func-name-mixedcase
    function DOMAIN_SEPARATOR() external view returns (bytes32);
}

File 4 of 7 : IERC20.sol
// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts (last updated v4.6.0) (token/ERC20/IERC20.sol)

pragma solidity ^0.8.0;

/**
 * @dev Interface of the ERC20 standard as defined in the EIP.
 */
interface IERC20 {
    /**
     * @dev Emitted when `value` tokens are moved from one account (`from`) to
     * another (`to`).
     *
     * Note that `value` may be zero.
     */
    event Transfer(address indexed from, address indexed to, uint256 value);

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

    /**
     * @dev Returns the amount of tokens in existence.
     */
    function totalSupply() external view returns (uint256);

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

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

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

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

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

File 5 of 7 : SafeERC20.sol
// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts (last updated v4.8.0) (token/ERC20/utils/SafeERC20.sol)

pragma solidity ^0.8.0;

import "../IERC20.sol";
import "../extensions/draft-IERC20Permit.sol";
import "../../../utils/Address.sol";

/**
 * @title SafeERC20
 * @dev Wrappers around ERC20 operations that throw on failure (when the token
 * contract returns false). Tokens that return no value (and instead revert or
 * throw on failure) are also supported, non-reverting calls are assumed to be
 * successful.
 * To use this library you can add a `using SafeERC20 for IERC20;` statement to your contract,
 * which allows you to call the safe operations as `token.safeTransfer(...)`, etc.
 */
library SafeERC20 {
    using Address for address;

    function safeTransfer(
        IERC20 token,
        address to,
        uint256 value
    ) internal {
        _callOptionalReturn(token, abi.encodeWithSelector(token.transfer.selector, to, value));
    }

    function safeTransferFrom(
        IERC20 token,
        address from,
        address to,
        uint256 value
    ) internal {
        _callOptionalReturn(token, abi.encodeWithSelector(token.transferFrom.selector, from, to, value));
    }

    /**
     * @dev Deprecated. This function has issues similar to the ones found in
     * {IERC20-approve}, and its usage is discouraged.
     *
     * Whenever possible, use {safeIncreaseAllowance} and
     * {safeDecreaseAllowance} instead.
     */
    function safeApprove(
        IERC20 token,
        address spender,
        uint256 value
    ) internal {
        // safeApprove should only be called when setting an initial allowance,
        // or when resetting it to zero. To increase and decrease it, use
        // 'safeIncreaseAllowance' and 'safeDecreaseAllowance'
        require(
            (value == 0) || (token.allowance(address(this), spender) == 0),
            "SafeERC20: approve from non-zero to non-zero allowance"
        );
        _callOptionalReturn(token, abi.encodeWithSelector(token.approve.selector, spender, value));
    }

    function safeIncreaseAllowance(
        IERC20 token,
        address spender,
        uint256 value
    ) internal {
        uint256 newAllowance = token.allowance(address(this), spender) + value;
        _callOptionalReturn(token, abi.encodeWithSelector(token.approve.selector, spender, newAllowance));
    }

    function safeDecreaseAllowance(
        IERC20 token,
        address spender,
        uint256 value
    ) internal {
        unchecked {
            uint256 oldAllowance = token.allowance(address(this), spender);
            require(oldAllowance >= value, "SafeERC20: decreased allowance below zero");
            uint256 newAllowance = oldAllowance - value;
            _callOptionalReturn(token, abi.encodeWithSelector(token.approve.selector, spender, newAllowance));
        }
    }

    function safePermit(
        IERC20Permit token,
        address owner,
        address spender,
        uint256 value,
        uint256 deadline,
        uint8 v,
        bytes32 r,
        bytes32 s
    ) internal {
        uint256 nonceBefore = token.nonces(owner);
        token.permit(owner, spender, value, deadline, v, r, s);
        uint256 nonceAfter = token.nonces(owner);
        require(nonceAfter == nonceBefore + 1, "SafeERC20: permit did not succeed");
    }

    /**
     * @dev Imitates a Solidity high-level call (i.e. a regular function call to a contract), relaxing the requirement
     * on the return value: the return value is optional (but if data is returned, it must not be false).
     * @param token The token targeted by the call.
     * @param data The call data (encoded using abi.encode or one of its variants).
     */
    function _callOptionalReturn(IERC20 token, bytes memory data) private {
        // We need to perform a low level call here, to bypass Solidity's return data size checking mechanism, since
        // we're implementing it ourselves. We use {Address-functionCall} to perform this call, which verifies that
        // the target address contains contract code and also asserts for success in the low-level call.

        bytes memory returndata = address(token).functionCall(data, "SafeERC20: low-level call failed");
        if (returndata.length > 0) {
            // Return data is optional
            require(abi.decode(returndata, (bool)), "SafeERC20: ERC20 operation did not succeed");
        }
    }
}

File 6 of 7 : Address.sol
// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts (last updated v4.8.0) (utils/Address.sol)

pragma solidity ^0.8.1;

/**
 * @dev Collection of functions related to the address type
 */
library Address {
    /**
     * @dev Returns true if `account` is a contract.
     *
     * [IMPORTANT]
     * ====
     * It is unsafe to assume that an address for which this function returns
     * false is an externally-owned account (EOA) and not a contract.
     *
     * Among others, `isContract` will return false for the following
     * types of addresses:
     *
     *  - an externally-owned account
     *  - a contract in construction
     *  - an address where a contract will be created
     *  - an address where a contract lived, but was destroyed
     * ====
     *
     * [IMPORTANT]
     * ====
     * You shouldn't rely on `isContract` to protect against flash loan attacks!
     *
     * Preventing calls from contracts is highly discouraged. It breaks composability, breaks support for smart wallets
     * like Gnosis Safe, and does not provide security since it can be circumvented by calling from a contract
     * constructor.
     * ====
     */
    function isContract(address account) internal view returns (bool) {
        // This method relies on extcodesize/address.code.length, which returns 0
        // for contracts in construction, since the code is only stored at the end
        // of the constructor execution.

        return account.code.length > 0;
    }

    /**
     * @dev Replacement for Solidity's `transfer`: sends `amount` wei to
     * `recipient`, forwarding all available gas and reverting on errors.
     *
     * https://eips.ethereum.org/EIPS/eip-1884[EIP1884] increases the gas cost
     * of certain opcodes, possibly making contracts go over the 2300 gas limit
     * imposed by `transfer`, making them unable to receive funds via
     * `transfer`. {sendValue} removes this limitation.
     *
     * https://diligence.consensys.net/posts/2019/09/stop-using-soliditys-transfer-now/[Learn more].
     *
     * IMPORTANT: because control is transferred to `recipient`, care must be
     * taken to not create reentrancy vulnerabilities. Consider using
     * {ReentrancyGuard} or the
     * https://solidity.readthedocs.io/en/v0.5.11/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern].
     */
    function sendValue(address payable recipient, uint256 amount) internal {
        require(address(this).balance >= amount, "Address: insufficient balance");

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

    /**
     * @dev Performs a Solidity function call using a low level `call`. A
     * plain `call` is an unsafe replacement for a function call: use this
     * function instead.
     *
     * If `target` reverts with a revert reason, it is bubbled up by this
     * function (like regular Solidity function calls).
     *
     * Returns the raw returned data. To convert to the expected return value,
     * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`].
     *
     * Requirements:
     *
     * - `target` must be a contract.
     * - calling `target` with `data` must not revert.
     *
     * _Available since v3.1._
     */
    function functionCall(address target, bytes memory data) internal returns (bytes memory) {
        return functionCallWithValue(target, data, 0, "Address: low-level call failed");
    }

    /**
     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with
     * `errorMessage` as a fallback revert reason when `target` reverts.
     *
     * _Available since v3.1._
     */
    function functionCall(
        address target,
        bytes memory data,
        string memory errorMessage
    ) internal returns (bytes memory) {
        return functionCallWithValue(target, data, 0, errorMessage);
    }

    /**
     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],
     * but also transferring `value` wei to `target`.
     *
     * Requirements:
     *
     * - the calling contract must have an ETH balance of at least `value`.
     * - the called Solidity function must be `payable`.
     *
     * _Available since v3.1._
     */
    function functionCallWithValue(
        address target,
        bytes memory data,
        uint256 value
    ) internal returns (bytes memory) {
        return functionCallWithValue(target, data, value, "Address: low-level call with value failed");
    }

    /**
     * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but
     * with `errorMessage` as a fallback revert reason when `target` reverts.
     *
     * _Available since v3.1._
     */
    function functionCallWithValue(
        address target,
        bytes memory data,
        uint256 value,
        string memory errorMessage
    ) internal returns (bytes memory) {
        require(address(this).balance >= value, "Address: insufficient balance for call");
        (bool success, bytes memory returndata) = target.call{value: value}(data);
        return verifyCallResultFromTarget(target, success, returndata, errorMessage);
    }

    /**
     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],
     * but performing a static call.
     *
     * _Available since v3.3._
     */
    function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) {
        return functionStaticCall(target, data, "Address: low-level static call failed");
    }

    /**
     * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],
     * but performing a static call.
     *
     * _Available since v3.3._
     */
    function functionStaticCall(
        address target,
        bytes memory data,
        string memory errorMessage
    ) internal view returns (bytes memory) {
        (bool success, bytes memory returndata) = target.staticcall(data);
        return verifyCallResultFromTarget(target, success, returndata, errorMessage);
    }

    /**
     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],
     * but performing a delegate call.
     *
     * _Available since v3.4._
     */
    function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) {
        return functionDelegateCall(target, data, "Address: low-level delegate call failed");
    }

    /**
     * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],
     * but performing a delegate call.
     *
     * _Available since v3.4._
     */
    function functionDelegateCall(
        address target,
        bytes memory data,
        string memory errorMessage
    ) internal returns (bytes memory) {
        (bool success, bytes memory returndata) = target.delegatecall(data);
        return verifyCallResultFromTarget(target, success, returndata, errorMessage);
    }

    /**
     * @dev Tool to verify that a low level call to smart-contract was successful, and revert (either by bubbling
     * the revert reason or using the provided one) in case of unsuccessful call or if target was not a contract.
     *
     * _Available since v4.8._
     */
    function verifyCallResultFromTarget(
        address target,
        bool success,
        bytes memory returndata,
        string memory errorMessage
    ) internal view returns (bytes memory) {
        if (success) {
            if (returndata.length == 0) {
                // only check isContract if the call was successful and the return data is empty
                // otherwise we already know that it was a contract
                require(isContract(target), "Address: call to non-contract");
            }
            return returndata;
        } else {
            _revert(returndata, errorMessage);
        }
    }

    /**
     * @dev Tool to verify that a low level call was successful, and revert if it wasn't, either by bubbling the
     * revert reason or using the provided one.
     *
     * _Available since v4.3._
     */
    function verifyCallResult(
        bool success,
        bytes memory returndata,
        string memory errorMessage
    ) internal pure returns (bytes memory) {
        if (success) {
            return returndata;
        } else {
            _revert(returndata, errorMessage);
        }
    }

    function _revert(bytes memory returndata, string memory errorMessage) private pure {
        // Look for revert reason and bubble it up if present
        if (returndata.length > 0) {
            // The easiest way to bubble the revert reason is using memory via assembly
            /// @solidity memory-safe-assembly
            assembly {
                let returndata_size := mload(returndata)
                revert(add(32, returndata), returndata_size)
            }
        } else {
            revert(errorMessage);
        }
    }
}

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

pragma solidity ^0.8.0;

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

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

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

Contract Security Audit

Contract ABI

[{"inputs":[{"internalType":"address[]","name":"payees","type":"address[]"},{"internalType":"uint256[]","name":"shares","type":"uint256[]"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"contract IERC20","name":"token","type":"address"},{"indexed":false,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"ERC20PaymentReleased","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"account","type":"address"},{"indexed":false,"internalType":"uint256","name":"shares","type":"uint256"}],"name":"PayeeAdded","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"from","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"PaymentReceived","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"PaymentReleased","type":"event"},{"inputs":[{"internalType":"uint256","name":"index","type":"uint256"}],"name":"payee","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"releasable","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"contract IERC20","name":"token","type":"address"},{"internalType":"address","name":"account","type":"address"}],"name":"releasable","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address payable","name":"account","type":"address"}],"name":"release","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"contract IERC20","name":"token","type":"address"},{"internalType":"address","name":"account","type":"address"}],"name":"release","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"contract IERC20","name":"token","type":"address"},{"internalType":"address","name":"account","type":"address"}],"name":"released","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"released","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"shares","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"contract IERC20","name":"token","type":"address"}],"name":"totalReleased","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalReleased","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalShares","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"stateMutability":"payable","type":"receive"}]

60806040523480156200001157600080fd5b50604051620011a8380380620011a8833981016040819052620000349162000440565b81818051825114620000a85760405162461bcd60e51b815260206004820152603260248201527f5061796d656e7453706c69747465723a2070617965657320616e6420736861726044820152710cae640d8cadccee8d040dad2e6dac2e8c6d60731b60648201526084015b60405180910390fd5b6000825111620000fb5760405162461bcd60e51b815260206004820152601a60248201527f5061796d656e7453706c69747465723a206e6f2070617965657300000000000060448201526064016200009f565b60005b82518110156200016757620001528382815181106200012157620001216200051e565b60200260200101518383815181106200013e576200013e6200051e565b60200260200101516200017260201b60201c565b806200015e816200054a565b915050620000fe565b505050505062000582565b6001600160a01b038216620001df5760405162461bcd60e51b815260206004820152602c60248201527f5061796d656e7453706c69747465723a206163636f756e74206973207468652060448201526b7a65726f206164647265737360a01b60648201526084016200009f565b60008111620002315760405162461bcd60e51b815260206004820152601d60248201527f5061796d656e7453706c69747465723a2073686172657320617265203000000060448201526064016200009f565b6001600160a01b03821660009081526002602052604090205415620002ad5760405162461bcd60e51b815260206004820152602b60248201527f5061796d656e7453706c69747465723a206163636f756e7420616c726561647960448201526a206861732073686172657360a81b60648201526084016200009f565b60048054600181019091557f8a35acfbc15ff81a39ae7d344fd709f28e8600b4aa8c65c6b64bfe7fe36bd19b0180546001600160a01b0319166001600160a01b0384169081179091556000908152600260205260408120829055546200031590829062000566565b600055604080516001600160a01b0384168152602081018390527f40c340f65e17194d14ddddb073d3c9f888e3cb52b5aae0c6c7706b4fbc905fac910160405180910390a15050565b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f191681016001600160401b03811182821017156200039f576200039f6200035e565b604052919050565b60006001600160401b03821115620003c357620003c36200035e565b5060051b60200190565b600082601f830112620003df57600080fd5b81516020620003f8620003f283620003a7565b62000374565b82815260059290921b840181019181810190868411156200041857600080fd5b8286015b848110156200043557805183529183019183016200041c565b509695505050505050565b600080604083850312156200045457600080fd5b82516001600160401b03808211156200046c57600080fd5b818501915085601f8301126200048157600080fd5b8151602062000494620003f283620003a7565b82815260059290921b84018101918181019089841115620004b457600080fd5b948201945b83861015620004eb5785516001600160a01b0381168114620004db5760008081fd5b82529482019490820190620004b9565b918801519196509093505050808211156200050557600080fd5b506200051485828601620003cd565b9150509250929050565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052601160045260246000fd5b6000600182016200055f576200055f62000534565b5060010190565b808201808211156200057c576200057c62000534565b92915050565b610c1680620005926000396000f3fe6080604052600436106100a05760003560e01c80639852595c116100645780639852595c146101ac578063a3f8eace146101e2578063c45ac05014610202578063ce7c2ac214610222578063d79779b214610258578063e33b7de31461028e57600080fd5b806319165587146100ee5780633a98ef3914610110578063406072a91461013457806348b75044146101545780638b83209b1461017457600080fd5b366100e9577f6ef95f06320e7a25a04a175ca677b7052bdd97131872c2192525a629f51be77033604080516001600160a01b0390921682523460208301520160405180910390a1005b600080fd5b3480156100fa57600080fd5b5061010e6101093660046109a7565b6102a3565b005b34801561011c57600080fd5b506000545b6040519081526020015b60405180910390f35b34801561014057600080fd5b5061012161014f3660046109c4565b610393565b34801561016057600080fd5b5061010e61016f3660046109c4565b6103c0565b34801561018057600080fd5b5061019461018f3660046109fd565b6104d1565b6040516001600160a01b03909116815260200161012b565b3480156101b857600080fd5b506101216101c73660046109a7565b6001600160a01b031660009081526003602052604090205490565b3480156101ee57600080fd5b506101216101fd3660046109a7565b610501565b34801561020e57600080fd5b5061012161021d3660046109c4565b610549565b34801561022e57600080fd5b5061012161023d3660046109a7565b6001600160a01b031660009081526002602052604090205490565b34801561026457600080fd5b506101216102733660046109a7565b6001600160a01b031660009081526005602052604090205490565b34801561029a57600080fd5b50600154610121565b6001600160a01b0381166000908152600260205260409020546102e15760405162461bcd60e51b81526004016102d890610a16565b60405180910390fd5b60006102ec82610501565b90508060000361030e5760405162461bcd60e51b81526004016102d890610a5c565b80600160008282546103209190610abd565b90915550506001600160a01b038216600090815260036020526040902080548201905561034d82826105ef565b604080516001600160a01b0384168152602081018390527fdf20fd1e76bc69d672e4814fafb2c449bba3a5369d8359adf9e05e6fde87b056910160405180910390a15050565b6001600160a01b038083166000908152600660209081526040808320938516835292905220545b92915050565b6001600160a01b0381166000908152600260205260409020546103f55760405162461bcd60e51b81526004016102d890610a16565b60006104018383610549565b9050806000036104235760405162461bcd60e51b81526004016102d890610a5c565b6001600160a01b0383166000908152600560205260408120805483929061044b908490610abd565b90915550506001600160a01b03808416600090815260066020908152604080832093861683529290522080548201905561048683838361070d565b604080516001600160a01b038481168252602082018490528516917f3be5b7a71e84ed12875d241991c70855ac5817d847039e17a9d895c1ceb0f18a910160405180910390a2505050565b6000600482815481106104e6576104e6610ad0565b6000918252602090912001546001600160a01b031692915050565b60008061050d60015490565b6105179047610abd565b9050610542838261053d866001600160a01b031660009081526003602052604090205490565b61075f565b9392505050565b6001600160a01b03821660009081526005602052604081205481906040516370a0823160e01b81523060048201526001600160a01b038616906370a0823190602401602060405180830381865afa1580156105a8573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906105cc9190610ae6565b6105d69190610abd565b90506105e7838261053d8787610393565b949350505050565b8047101561063f5760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a20696e73756666696369656e742062616c616e636500000060448201526064016102d8565b6000826001600160a01b03168260405160006040518083038185875af1925050503d806000811461068c576040519150601f19603f3d011682016040523d82523d6000602084013e610691565b606091505b50509050806107085760405162461bcd60e51b815260206004820152603a60248201527f416464726573733a20756e61626c6520746f2073656e642076616c75652c207260448201527f6563697069656e74206d6179206861766520726576657274656400000000000060648201526084016102d8565b505050565b604080516001600160a01b038416602482015260448082018490528251808303909101815260649091019091526020810180516001600160e01b031663a9059cbb60e01b17905261070890849061079a565b600080546001600160a01b0385168252600260205260408220548391906107869086610aff565b6107909190610b16565b6105e79190610b38565b60006107ef826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b031661086c9092919063ffffffff16565b805190915015610708578080602001905181019061080d9190610b4b565b6107085760405162461bcd60e51b815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e6044820152691bdd081cdd58d8d9595960b21b60648201526084016102d8565b60606105e7848460008585600080866001600160a01b031685876040516108939190610b91565b60006040518083038185875af1925050503d80600081146108d0576040519150601f19603f3d011682016040523d82523d6000602084013e6108d5565b606091505b50915091506108e6878383876108f1565b979650505050505050565b60608315610960578251600003610959576001600160a01b0385163b6109595760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e747261637400000060448201526064016102d8565b50816105e7565b6105e783838151156109755781518083602001fd5b8060405162461bcd60e51b81526004016102d89190610bad565b6001600160a01b03811681146109a457600080fd5b50565b6000602082840312156109b957600080fd5b81356105428161098f565b600080604083850312156109d757600080fd5b82356109e28161098f565b915060208301356109f28161098f565b809150509250929050565b600060208284031215610a0f57600080fd5b5035919050565b60208082526026908201527f5061796d656e7453706c69747465723a206163636f756e7420686173206e6f2060408201526573686172657360d01b606082015260800190565b6020808252602b908201527f5061796d656e7453706c69747465723a206163636f756e74206973206e6f742060408201526a191d59481c185e5b595b9d60aa1b606082015260800190565b634e487b7160e01b600052601160045260246000fd5b808201808211156103ba576103ba610aa7565b634e487b7160e01b600052603260045260246000fd5b600060208284031215610af857600080fd5b5051919050565b80820281158282048414176103ba576103ba610aa7565b600082610b3357634e487b7160e01b600052601260045260246000fd5b500490565b818103818111156103ba576103ba610aa7565b600060208284031215610b5d57600080fd5b8151801515811461054257600080fd5b60005b83811015610b88578181015183820152602001610b70565b50506000910152565b60008251610ba3818460208701610b6d565b9190910192915050565b6020815260008251806020840152610bcc816040850160208701610b6d565b601f01601f1916919091016040019291505056fea2646970667358221220504c1f0d5de46de0dfa5c3116a8e841e20639ee101b0c285acd4f3dfb6817bdc64736f6c634300081100330000000000000000000000000000000000000000000000000000000000000040000000000000000000000000000000000000000000000000000000000000052000000000000000000000000000000000000000000000000000000000000000260000000000000000000000007beed30332656ca4220cb2ce8e4508fb18013e8d0000000000000000000000002115a7d5c909b73a58eb51887673eb3d4af048100000000000000000000000001130da71e56b9d61c574886c47ba5f7ccec735e9000000000000000000000000c9fc50776086d22915d2c745d380f2ddb596afcc000000000000000000000000474c5d1e2ae6beedd415e9969dbc61532cad1d590000000000000000000000005e8dfe47fa66c7a4e8106bd36c50f7d574f1d612000000000000000000000000c2de074232657001f3de6289e5b3fa19f0f9a876000000000000000000000000eb1094b4ea565f3007b12e9b0ef8c4425b41326d0000000000000000000000008f3a83a3356d2666d89d027544bbaffa12139e3c000000000000000000000000628f19ba9c79790e6bb7238bdfb0b512ed2ffe240000000000000000000000008bff6c42fa5507926c6fbaa12cb82bc090f98189000000000000000000000000f097ab883dbfb864671ed7251af91f9d079141550000000000000000000000004bf43e9f769a2723a0151cf0db48fbbd47a3fbbb0000000000000000000000000c0d137edafc3b9024dd6bf427dd2f078b80cb090000000000000000000000007ba019379e2a54689922d8a3519b32994dbe667e000000000000000000000000820c00e609fc01ec31816c782276f7f7fe460774000000000000000000000000867369540f3cfa32b41e3b06415388cd3d088caa0000000000000000000000004397a3a473f5b468c13a5e8aff8c15693ce2bdba0000000000000000000000004401abce4ed6e66dab5a14c6c69d758185031d800000000000000000000000000177e1c464aa127bb244f1ae1e0c9f99fc5ef138000000000000000000000000ae51d3052a04b266be82e964caf46f7045087aef000000000000000000000000d80090c6c6e45ee8ae141215ead4cb63baa9882c00000000000000000000000038b136d3d8608f8d668a18898cf9c4acb01321e0000000000000000000000000325e0a8fcad252f98b15e4b93a27d1389381f613000000000000000000000000c9330e55dec2e8b15ed837e3fa3de584daa36562000000000000000000000000969bebaee31128012356db1a39427b253fc8db6a0000000000000000000000004d343d345641edc92674d6bfb707ecb76363e27900000000000000000000000069d3a18579c901c4b79a2bb32a4ada181c4a9354000000000000000000000000939b08a0e7bf6a13782e143627b0e121cf3f02a80000000000000000000000009154da29a2ef2fb3b248461ffe0842ca83d24ac80000000000000000000000005db860fa93b8f0e4356bbfe5208c1d0d5164e39b000000000000000000000000854fb5e2e490f22c7e0b8ea0ad4cc8758ea34bc90000000000000000000000007c96403dc66bdf4e4e1b809d0da9450a29947cfe0000000000000000000000007e68c1adf83a1967aeafcd0bbdd9f7c83f2374940000000000000000000000008dbcfbb2b77c1bfb9a17d4b96ccd89a7d313cc1e0000000000000000000000008ccfefe9ca15bf258d27acec3718af16d4f6b03f00000000000000000000000053eb2d4878ed674c31cc63d47b914a77349fe93400000000000000000000000024b70b0df34393c3dc53ffd749526ee94edf933f0000000000000000000000000000000000000000000000000000000000000026000000000000000000000000000000000000000000000000000000000000065900000000000000000000000000000000000000000000000000000000000009c400000000000000000000000000000000000000000000000000000000000005dc000000000000000000000000000000000000000000000000000000000000007d000000000000000000000000000000000000000000000000000000000000007d000000000000000000000000000000000000000000000000000000000000007d000000000000000000000000000000000000000000000000000000000000007d000000000000000000000000000000000000000000000000000000000000007d000000000000000000000000000000000000000000000000000000000000007d000000000000000000000000000000000000000000000000000000000000007d000000000000000000000000000000000000000000000000000000000000007d000000000000000000000000000000000000000000000000000000000000007d000000000000000000000000000000000000000000000000000000000000007d000000000000000000000000000000000000000000000000000000000000007d000000000000000000000000000000000000000000000000000000000000007d000000000000000000000000000000000000000000000000000000000000007d000000000000000000000000000000000000000000000000000000000000007d000000000000000000000000000000000000000000000000000000000000007d000000000000000000000000000000000000000000000000000000000000007d000000000000000000000000000000000000000000000000000000000000007d000000000000000000000000000000000000000000000000000000000000007d000000000000000000000000000000000000000000000000000000000000007d000000000000000000000000000000000000000000000000000000000000007d000000000000000000000000000000000000000000000000000000000000007d000000000000000000000000000000000000000000000000000000000000007d000000000000000000000000000000000000000000000000000000000000007d000000000000000000000000000000000000000000000000000000000000007d000000000000000000000000000000000000000000000000000000000000007d000000000000000000000000000000000000000000000000000000000000007d000000000000000000000000000000000000000000000000000000000000007d000000000000000000000000000000000000000000000000000000000000007d000000000000000000000000000000000000000000000000000000000000007d000000000000000000000000000000000000000000000000000000000000007d000000000000000000000000000000000000000000000000000000000000007d000000000000000000000000000000000000000000000000000000000000007d000000000000000000000000000000000000000000000000000000000000007d000000000000000000000000000000000000000000000000000000000000007d000000000000000000000000000000000000000000000000000000000000007d

Deployed Bytecode

0x6080604052600436106100a05760003560e01c80639852595c116100645780639852595c146101ac578063a3f8eace146101e2578063c45ac05014610202578063ce7c2ac214610222578063d79779b214610258578063e33b7de31461028e57600080fd5b806319165587146100ee5780633a98ef3914610110578063406072a91461013457806348b75044146101545780638b83209b1461017457600080fd5b366100e9577f6ef95f06320e7a25a04a175ca677b7052bdd97131872c2192525a629f51be77033604080516001600160a01b0390921682523460208301520160405180910390a1005b600080fd5b3480156100fa57600080fd5b5061010e6101093660046109a7565b6102a3565b005b34801561011c57600080fd5b506000545b6040519081526020015b60405180910390f35b34801561014057600080fd5b5061012161014f3660046109c4565b610393565b34801561016057600080fd5b5061010e61016f3660046109c4565b6103c0565b34801561018057600080fd5b5061019461018f3660046109fd565b6104d1565b6040516001600160a01b03909116815260200161012b565b3480156101b857600080fd5b506101216101c73660046109a7565b6001600160a01b031660009081526003602052604090205490565b3480156101ee57600080fd5b506101216101fd3660046109a7565b610501565b34801561020e57600080fd5b5061012161021d3660046109c4565b610549565b34801561022e57600080fd5b5061012161023d3660046109a7565b6001600160a01b031660009081526002602052604090205490565b34801561026457600080fd5b506101216102733660046109a7565b6001600160a01b031660009081526005602052604090205490565b34801561029a57600080fd5b50600154610121565b6001600160a01b0381166000908152600260205260409020546102e15760405162461bcd60e51b81526004016102d890610a16565b60405180910390fd5b60006102ec82610501565b90508060000361030e5760405162461bcd60e51b81526004016102d890610a5c565b80600160008282546103209190610abd565b90915550506001600160a01b038216600090815260036020526040902080548201905561034d82826105ef565b604080516001600160a01b0384168152602081018390527fdf20fd1e76bc69d672e4814fafb2c449bba3a5369d8359adf9e05e6fde87b056910160405180910390a15050565b6001600160a01b038083166000908152600660209081526040808320938516835292905220545b92915050565b6001600160a01b0381166000908152600260205260409020546103f55760405162461bcd60e51b81526004016102d890610a16565b60006104018383610549565b9050806000036104235760405162461bcd60e51b81526004016102d890610a5c565b6001600160a01b0383166000908152600560205260408120805483929061044b908490610abd565b90915550506001600160a01b03808416600090815260066020908152604080832093861683529290522080548201905561048683838361070d565b604080516001600160a01b038481168252602082018490528516917f3be5b7a71e84ed12875d241991c70855ac5817d847039e17a9d895c1ceb0f18a910160405180910390a2505050565b6000600482815481106104e6576104e6610ad0565b6000918252602090912001546001600160a01b031692915050565b60008061050d60015490565b6105179047610abd565b9050610542838261053d866001600160a01b031660009081526003602052604090205490565b61075f565b9392505050565b6001600160a01b03821660009081526005602052604081205481906040516370a0823160e01b81523060048201526001600160a01b038616906370a0823190602401602060405180830381865afa1580156105a8573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906105cc9190610ae6565b6105d69190610abd565b90506105e7838261053d8787610393565b949350505050565b8047101561063f5760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a20696e73756666696369656e742062616c616e636500000060448201526064016102d8565b6000826001600160a01b03168260405160006040518083038185875af1925050503d806000811461068c576040519150601f19603f3d011682016040523d82523d6000602084013e610691565b606091505b50509050806107085760405162461bcd60e51b815260206004820152603a60248201527f416464726573733a20756e61626c6520746f2073656e642076616c75652c207260448201527f6563697069656e74206d6179206861766520726576657274656400000000000060648201526084016102d8565b505050565b604080516001600160a01b038416602482015260448082018490528251808303909101815260649091019091526020810180516001600160e01b031663a9059cbb60e01b17905261070890849061079a565b600080546001600160a01b0385168252600260205260408220548391906107869086610aff565b6107909190610b16565b6105e79190610b38565b60006107ef826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b031661086c9092919063ffffffff16565b805190915015610708578080602001905181019061080d9190610b4b565b6107085760405162461bcd60e51b815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e6044820152691bdd081cdd58d8d9595960b21b60648201526084016102d8565b60606105e7848460008585600080866001600160a01b031685876040516108939190610b91565b60006040518083038185875af1925050503d80600081146108d0576040519150601f19603f3d011682016040523d82523d6000602084013e6108d5565b606091505b50915091506108e6878383876108f1565b979650505050505050565b60608315610960578251600003610959576001600160a01b0385163b6109595760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e747261637400000060448201526064016102d8565b50816105e7565b6105e783838151156109755781518083602001fd5b8060405162461bcd60e51b81526004016102d89190610bad565b6001600160a01b03811681146109a457600080fd5b50565b6000602082840312156109b957600080fd5b81356105428161098f565b600080604083850312156109d757600080fd5b82356109e28161098f565b915060208301356109f28161098f565b809150509250929050565b600060208284031215610a0f57600080fd5b5035919050565b60208082526026908201527f5061796d656e7453706c69747465723a206163636f756e7420686173206e6f2060408201526573686172657360d01b606082015260800190565b6020808252602b908201527f5061796d656e7453706c69747465723a206163636f756e74206973206e6f742060408201526a191d59481c185e5b595b9d60aa1b606082015260800190565b634e487b7160e01b600052601160045260246000fd5b808201808211156103ba576103ba610aa7565b634e487b7160e01b600052603260045260246000fd5b600060208284031215610af857600080fd5b5051919050565b80820281158282048414176103ba576103ba610aa7565b600082610b3357634e487b7160e01b600052601260045260246000fd5b500490565b818103818111156103ba576103ba610aa7565b600060208284031215610b5d57600080fd5b8151801515811461054257600080fd5b60005b83811015610b88578181015183820152602001610b70565b50506000910152565b60008251610ba3818460208701610b6d565b9190910192915050565b6020815260008251806020840152610bcc816040850160208701610b6d565b601f01601f1916919091016040019291505056fea2646970667358221220504c1f0d5de46de0dfa5c3116a8e841e20639ee101b0c285acd4f3dfb6817bdc64736f6c63430008110033

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

0000000000000000000000000000000000000000000000000000000000000040000000000000000000000000000000000000000000000000000000000000052000000000000000000000000000000000000000000000000000000000000000260000000000000000000000007beed30332656ca4220cb2ce8e4508fb18013e8d0000000000000000000000002115a7d5c909b73a58eb51887673eb3d4af048100000000000000000000000001130da71e56b9d61c574886c47ba5f7ccec735e9000000000000000000000000c9fc50776086d22915d2c745d380f2ddb596afcc000000000000000000000000474c5d1e2ae6beedd415e9969dbc61532cad1d590000000000000000000000005e8dfe47fa66c7a4e8106bd36c50f7d574f1d612000000000000000000000000c2de074232657001f3de6289e5b3fa19f0f9a876000000000000000000000000eb1094b4ea565f3007b12e9b0ef8c4425b41326d0000000000000000000000008f3a83a3356d2666d89d027544bbaffa12139e3c000000000000000000000000628f19ba9c79790e6bb7238bdfb0b512ed2ffe240000000000000000000000008bff6c42fa5507926c6fbaa12cb82bc090f98189000000000000000000000000f097ab883dbfb864671ed7251af91f9d079141550000000000000000000000004bf43e9f769a2723a0151cf0db48fbbd47a3fbbb0000000000000000000000000c0d137edafc3b9024dd6bf427dd2f078b80cb090000000000000000000000007ba019379e2a54689922d8a3519b32994dbe667e000000000000000000000000820c00e609fc01ec31816c782276f7f7fe460774000000000000000000000000867369540f3cfa32b41e3b06415388cd3d088caa0000000000000000000000004397a3a473f5b468c13a5e8aff8c15693ce2bdba0000000000000000000000004401abce4ed6e66dab5a14c6c69d758185031d800000000000000000000000000177e1c464aa127bb244f1ae1e0c9f99fc5ef138000000000000000000000000ae51d3052a04b266be82e964caf46f7045087aef000000000000000000000000d80090c6c6e45ee8ae141215ead4cb63baa9882c00000000000000000000000038b136d3d8608f8d668a18898cf9c4acb01321e0000000000000000000000000325e0a8fcad252f98b15e4b93a27d1389381f613000000000000000000000000c9330e55dec2e8b15ed837e3fa3de584daa36562000000000000000000000000969bebaee31128012356db1a39427b253fc8db6a0000000000000000000000004d343d345641edc92674d6bfb707ecb76363e27900000000000000000000000069d3a18579c901c4b79a2bb32a4ada181c4a9354000000000000000000000000939b08a0e7bf6a13782e143627b0e121cf3f02a80000000000000000000000009154da29a2ef2fb3b248461ffe0842ca83d24ac80000000000000000000000005db860fa93b8f0e4356bbfe5208c1d0d5164e39b000000000000000000000000854fb5e2e490f22c7e0b8ea0ad4cc8758ea34bc90000000000000000000000007c96403dc66bdf4e4e1b809d0da9450a29947cfe0000000000000000000000007e68c1adf83a1967aeafcd0bbdd9f7c83f2374940000000000000000000000008dbcfbb2b77c1bfb9a17d4b96ccd89a7d313cc1e0000000000000000000000008ccfefe9ca15bf258d27acec3718af16d4f6b03f00000000000000000000000053eb2d4878ed674c31cc63d47b914a77349fe93400000000000000000000000024b70b0df34393c3dc53ffd749526ee94edf933f0000000000000000000000000000000000000000000000000000000000000026000000000000000000000000000000000000000000000000000000000000065900000000000000000000000000000000000000000000000000000000000009c400000000000000000000000000000000000000000000000000000000000005dc000000000000000000000000000000000000000000000000000000000000007d000000000000000000000000000000000000000000000000000000000000007d000000000000000000000000000000000000000000000000000000000000007d000000000000000000000000000000000000000000000000000000000000007d000000000000000000000000000000000000000000000000000000000000007d000000000000000000000000000000000000000000000000000000000000007d000000000000000000000000000000000000000000000000000000000000007d000000000000000000000000000000000000000000000000000000000000007d000000000000000000000000000000000000000000000000000000000000007d000000000000000000000000000000000000000000000000000000000000007d000000000000000000000000000000000000000000000000000000000000007d000000000000000000000000000000000000000000000000000000000000007d000000000000000000000000000000000000000000000000000000000000007d000000000000000000000000000000000000000000000000000000000000007d000000000000000000000000000000000000000000000000000000000000007d000000000000000000000000000000000000000000000000000000000000007d000000000000000000000000000000000000000000000000000000000000007d000000000000000000000000000000000000000000000000000000000000007d000000000000000000000000000000000000000000000000000000000000007d000000000000000000000000000000000000000000000000000000000000007d000000000000000000000000000000000000000000000000000000000000007d000000000000000000000000000000000000000000000000000000000000007d000000000000000000000000000000000000000000000000000000000000007d000000000000000000000000000000000000000000000000000000000000007d000000000000000000000000000000000000000000000000000000000000007d000000000000000000000000000000000000000000000000000000000000007d000000000000000000000000000000000000000000000000000000000000007d000000000000000000000000000000000000000000000000000000000000007d000000000000000000000000000000000000000000000000000000000000007d000000000000000000000000000000000000000000000000000000000000007d000000000000000000000000000000000000000000000000000000000000007d000000000000000000000000000000000000000000000000000000000000007d000000000000000000000000000000000000000000000000000000000000007d000000000000000000000000000000000000000000000000000000000000007d000000000000000000000000000000000000000000000000000000000000007d

-----Decoded View---------------
Arg [0] : payees (address[]): 0x7bEED30332656CA4220CB2ce8E4508fb18013E8d,0x2115a7D5C909B73a58Eb51887673eB3d4af04810,0x1130DA71e56B9d61c574886c47BA5f7cCeC735e9,0xc9FC50776086D22915d2C745d380f2ddB596Afcc,0x474c5D1e2Ae6bEEdD415e9969dBC61532CAd1D59,0x5e8dfE47FA66c7a4e8106BD36c50f7D574f1D612,0xc2de074232657001F3de6289E5b3fa19F0f9a876,0xeb1094b4EA565F3007b12E9B0eF8C4425b41326d,0x8F3a83a3356d2666D89d027544BbaFfa12139E3c,0x628f19BA9c79790E6Bb7238Bdfb0b512eD2fFE24,0x8Bff6c42fa5507926C6fBaa12Cb82BC090F98189,0xF097aB883dBfb864671eD7251AF91f9d07914155,0x4bF43e9F769A2723A0151cf0dB48fbbd47a3fbbb,0x0C0d137EdAfc3B9024DD6bF427DD2f078b80cB09,0x7bA019379E2A54689922d8A3519B32994dbe667e,0x820C00E609FC01eC31816C782276f7F7fE460774,0x867369540F3cfA32b41E3B06415388CD3d088cAa,0x4397A3a473F5B468C13A5E8AFF8C15693ce2bdbA,0x4401ABCE4Ed6e66DAb5a14C6C69d758185031d80,0x0177e1c464aa127Bb244f1AE1e0c9F99fc5eF138,0xae51d3052a04B266BE82E964CAF46f7045087aeF,0xD80090C6C6E45ee8Ae141215eaD4CB63Baa9882c,0x38B136D3d8608f8d668A18898Cf9C4acb01321e0,0x325E0A8FcAd252f98B15E4B93A27D1389381f613,0xC9330E55dEc2E8B15ed837e3fa3De584Daa36562,0x969Bebaee31128012356db1a39427B253fC8db6a,0x4D343d345641EdC92674d6bFB707eCb76363e279,0x69d3A18579c901C4B79A2bB32A4aDA181C4a9354,0x939b08a0E7bF6a13782e143627B0E121Cf3F02A8,0x9154da29A2Ef2fB3b248461fFE0842CA83d24AC8,0x5dB860FA93B8F0E4356BBFE5208C1D0d5164e39b,0x854fb5E2E490f22c7e0b8eA0aD4cc8758EA34Bc9,0x7C96403dC66bdf4E4E1b809D0da9450A29947cfe,0x7E68C1aDF83A1967aeAFcD0bbDD9f7c83f237494,0x8dbcFBB2b77C1bfB9A17D4b96CCD89A7d313Cc1e,0x8CcfEFe9cA15bF258d27AcEC3718aF16d4f6b03F,0x53Eb2d4878Ed674C31cC63D47b914A77349FE934,0x24b70B0DF34393c3Dc53FFd749526ee94EDF933f
Arg [1] : shares (uint256[]): 1625,2500,1500,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125

-----Encoded View---------------
80 Constructor Arguments found :
Arg [0] : 0000000000000000000000000000000000000000000000000000000000000040
Arg [1] : 0000000000000000000000000000000000000000000000000000000000000520
Arg [2] : 0000000000000000000000000000000000000000000000000000000000000026
Arg [3] : 0000000000000000000000007beed30332656ca4220cb2ce8e4508fb18013e8d
Arg [4] : 0000000000000000000000002115a7d5c909b73a58eb51887673eb3d4af04810
Arg [5] : 0000000000000000000000001130da71e56b9d61c574886c47ba5f7ccec735e9
Arg [6] : 000000000000000000000000c9fc50776086d22915d2c745d380f2ddb596afcc
Arg [7] : 000000000000000000000000474c5d1e2ae6beedd415e9969dbc61532cad1d59
Arg [8] : 0000000000000000000000005e8dfe47fa66c7a4e8106bd36c50f7d574f1d612
Arg [9] : 000000000000000000000000c2de074232657001f3de6289e5b3fa19f0f9a876
Arg [10] : 000000000000000000000000eb1094b4ea565f3007b12e9b0ef8c4425b41326d
Arg [11] : 0000000000000000000000008f3a83a3356d2666d89d027544bbaffa12139e3c
Arg [12] : 000000000000000000000000628f19ba9c79790e6bb7238bdfb0b512ed2ffe24
Arg [13] : 0000000000000000000000008bff6c42fa5507926c6fbaa12cb82bc090f98189
Arg [14] : 000000000000000000000000f097ab883dbfb864671ed7251af91f9d07914155
Arg [15] : 0000000000000000000000004bf43e9f769a2723a0151cf0db48fbbd47a3fbbb
Arg [16] : 0000000000000000000000000c0d137edafc3b9024dd6bf427dd2f078b80cb09
Arg [17] : 0000000000000000000000007ba019379e2a54689922d8a3519b32994dbe667e
Arg [18] : 000000000000000000000000820c00e609fc01ec31816c782276f7f7fe460774
Arg [19] : 000000000000000000000000867369540f3cfa32b41e3b06415388cd3d088caa
Arg [20] : 0000000000000000000000004397a3a473f5b468c13a5e8aff8c15693ce2bdba
Arg [21] : 0000000000000000000000004401abce4ed6e66dab5a14c6c69d758185031d80
Arg [22] : 0000000000000000000000000177e1c464aa127bb244f1ae1e0c9f99fc5ef138
Arg [23] : 000000000000000000000000ae51d3052a04b266be82e964caf46f7045087aef
Arg [24] : 000000000000000000000000d80090c6c6e45ee8ae141215ead4cb63baa9882c
Arg [25] : 00000000000000000000000038b136d3d8608f8d668a18898cf9c4acb01321e0
Arg [26] : 000000000000000000000000325e0a8fcad252f98b15e4b93a27d1389381f613
Arg [27] : 000000000000000000000000c9330e55dec2e8b15ed837e3fa3de584daa36562
Arg [28] : 000000000000000000000000969bebaee31128012356db1a39427b253fc8db6a
Arg [29] : 0000000000000000000000004d343d345641edc92674d6bfb707ecb76363e279
Arg [30] : 00000000000000000000000069d3a18579c901c4b79a2bb32a4ada181c4a9354
Arg [31] : 000000000000000000000000939b08a0e7bf6a13782e143627b0e121cf3f02a8
Arg [32] : 0000000000000000000000009154da29a2ef2fb3b248461ffe0842ca83d24ac8
Arg [33] : 0000000000000000000000005db860fa93b8f0e4356bbfe5208c1d0d5164e39b
Arg [34] : 000000000000000000000000854fb5e2e490f22c7e0b8ea0ad4cc8758ea34bc9
Arg [35] : 0000000000000000000000007c96403dc66bdf4e4e1b809d0da9450a29947cfe
Arg [36] : 0000000000000000000000007e68c1adf83a1967aeafcd0bbdd9f7c83f237494
Arg [37] : 0000000000000000000000008dbcfbb2b77c1bfb9a17d4b96ccd89a7d313cc1e
Arg [38] : 0000000000000000000000008ccfefe9ca15bf258d27acec3718af16d4f6b03f
Arg [39] : 00000000000000000000000053eb2d4878ed674c31cc63d47b914a77349fe934
Arg [40] : 00000000000000000000000024b70b0df34393c3dc53ffd749526ee94edf933f
Arg [41] : 0000000000000000000000000000000000000000000000000000000000000026
Arg [42] : 0000000000000000000000000000000000000000000000000000000000000659
Arg [43] : 00000000000000000000000000000000000000000000000000000000000009c4
Arg [44] : 00000000000000000000000000000000000000000000000000000000000005dc
Arg [45] : 000000000000000000000000000000000000000000000000000000000000007d
Arg [46] : 000000000000000000000000000000000000000000000000000000000000007d
Arg [47] : 000000000000000000000000000000000000000000000000000000000000007d
Arg [48] : 000000000000000000000000000000000000000000000000000000000000007d
Arg [49] : 000000000000000000000000000000000000000000000000000000000000007d
Arg [50] : 000000000000000000000000000000000000000000000000000000000000007d
Arg [51] : 000000000000000000000000000000000000000000000000000000000000007d
Arg [52] : 000000000000000000000000000000000000000000000000000000000000007d
Arg [53] : 000000000000000000000000000000000000000000000000000000000000007d
Arg [54] : 000000000000000000000000000000000000000000000000000000000000007d
Arg [55] : 000000000000000000000000000000000000000000000000000000000000007d
Arg [56] : 000000000000000000000000000000000000000000000000000000000000007d
Arg [57] : 000000000000000000000000000000000000000000000000000000000000007d
Arg [58] : 000000000000000000000000000000000000000000000000000000000000007d
Arg [59] : 000000000000000000000000000000000000000000000000000000000000007d
Arg [60] : 000000000000000000000000000000000000000000000000000000000000007d
Arg [61] : 000000000000000000000000000000000000000000000000000000000000007d
Arg [62] : 000000000000000000000000000000000000000000000000000000000000007d
Arg [63] : 000000000000000000000000000000000000000000000000000000000000007d
Arg [64] : 000000000000000000000000000000000000000000000000000000000000007d
Arg [65] : 000000000000000000000000000000000000000000000000000000000000007d
Arg [66] : 000000000000000000000000000000000000000000000000000000000000007d
Arg [67] : 000000000000000000000000000000000000000000000000000000000000007d
Arg [68] : 000000000000000000000000000000000000000000000000000000000000007d
Arg [69] : 000000000000000000000000000000000000000000000000000000000000007d
Arg [70] : 000000000000000000000000000000000000000000000000000000000000007d
Arg [71] : 000000000000000000000000000000000000000000000000000000000000007d
Arg [72] : 000000000000000000000000000000000000000000000000000000000000007d
Arg [73] : 000000000000000000000000000000000000000000000000000000000000007d
Arg [74] : 000000000000000000000000000000000000000000000000000000000000007d
Arg [75] : 000000000000000000000000000000000000000000000000000000000000007d
Arg [76] : 000000000000000000000000000000000000000000000000000000000000007d
Arg [77] : 000000000000000000000000000000000000000000000000000000000000007d
Arg [78] : 000000000000000000000000000000000000000000000000000000000000007d
Arg [79] : 000000000000000000000000000000000000000000000000000000000000007d


Block Transaction Difficulty Gas Used Reward
View All Blocks Produced

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

Validator Index Block Amount
View All Withdrawals

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

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