ETH Price: $2,373.50 (-0.70%)

Contract

0x4283bC437ce840CC83C048F0b69f41A46aa881CA
 

Overview

ETH Balance

0 ETH

Eth Value

$0.00

Token Holdings

Multichain Info

No addresses found
Transaction Hash
Method
Block
From
To
0x60806040171178452023-04-24 18:11:35500 days ago1682359895IN
 Contract Creation
0 ETH0.063633560.06815503

Latest 25 internal transactions (View All)

Advanced mode:
Parent Transaction Hash Block From To
179599902023-08-21 2:00:47382 days ago1692583247
0x4283bC43...46aa881CA
0.0002625 ETH
179599902023-08-21 2:00:47382 days ago1692583247
0x4283bC43...46aa881CA
0.00017479 ETH
179599902023-08-21 2:00:47382 days ago1692583247
0x4283bC43...46aa881CA
0.00002919 ETH
179599902023-08-21 2:00:47382 days ago1692583247
0x4283bC43...46aa881CA
0.00002919 ETH
179599902023-08-21 2:00:47382 days ago1692583247
0x4283bC43...46aa881CA
0.00002919 ETH
179599902023-08-21 2:00:47382 days ago1692583247
0x4283bC43...46aa881CA
0.00002919 ETH
179599902023-08-21 2:00:47382 days ago1692583247
0x4283bC43...46aa881CA
0.00002919 ETH
179599902023-08-21 2:00:47382 days ago1692583247
0x4283bC43...46aa881CA
0.00002919 ETH
179599902023-08-21 2:00:47382 days ago1692583247
0x4283bC43...46aa881CA
0.00002919 ETH
179599902023-08-21 2:00:47382 days ago1692583247
0x4283bC43...46aa881CA
0.00002919 ETH
179599902023-08-21 2:00:47382 days ago1692583247
0x4283bC43...46aa881CA
0.00002919 ETH
179599902023-08-21 2:00:47382 days ago1692583247
0x4283bC43...46aa881CA
0.0007 ETH
179472952023-08-19 7:20:23384 days ago1692429623
0x4283bC43...46aa881CA
0.0002625 ETH
179472952023-08-19 7:20:23384 days ago1692429623
0x4283bC43...46aa881CA
0.00017479 ETH
179472952023-08-19 7:20:23384 days ago1692429623
0x4283bC43...46aa881CA
0.00002919 ETH
179472952023-08-19 7:20:23384 days ago1692429623
0x4283bC43...46aa881CA
0.00002919 ETH
179472952023-08-19 7:20:23384 days ago1692429623
0x4283bC43...46aa881CA
0.00002919 ETH
179472952023-08-19 7:20:23384 days ago1692429623
0x4283bC43...46aa881CA
0.00002919 ETH
179472952023-08-19 7:20:23384 days ago1692429623
0x4283bC43...46aa881CA
0.00002919 ETH
179472952023-08-19 7:20:23384 days ago1692429623
0x4283bC43...46aa881CA
0.00002919 ETH
179472952023-08-19 7:20:23384 days ago1692429623
0x4283bC43...46aa881CA
0.00002919 ETH
179472952023-08-19 7:20:23384 days ago1692429623
0x4283bC43...46aa881CA
0.00002919 ETH
179472952023-08-19 7:20:23384 days ago1692429623
0x4283bC43...46aa881CA
0.00002919 ETH
179472952023-08-19 7:20:23384 days ago1692429623
0x4283bC43...46aa881CA
0.0007 ETH
178672192023-08-08 2:26:47395 days ago1691461607
0x4283bC43...46aa881CA
0.00027543 ETH
View All Internal Transactions
Loading...
Loading

Similar Match Source Code
This contract matches the deployed Bytecode of the Source Code for Contract 0xdc8a58EA...E1349bd84
The constructor portion of the code might be different and could alter the actual behaviour of the contract

Contract Name:
PaymentSplitter

Compiler Version
v0.8.17+commit.8df45f5f

Optimization Enabled:
Yes with 800 runs

Other Settings:
default evmVersion
File 1 of 2 : PaymentSplitter.sol
// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts (last updated v4.8.0) (finance/PaymentSplitter.sol)

pragma solidity 0.8.17;

import "./SplitterAddress.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.
 *
 */
contract PaymentSplitter {
    event PayeeAdded(address indexed account, uint256 shares);
    event PaymentReleased(address indexed to, uint256 amount);
    event PaymentReceived(address indexed from, uint256 amount);
    event Log(string message);

    uint256 private _totalShares;
    uint256 private _totalReleased;

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

    /**
     * @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");

        uint256 limit = payees.length;

        for (uint256 i = 0; i < limit ;) {
            _addPayee(payees[i], shares_[i]);
        unchecked {
            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 {
        uint256 limit = _payees.length;

        for(uint256 i = 0; i < limit;){
            try this.release(payable(_payees[i])) {
            } catch {
                emit Log("PaymentSplitter : external call failed");
            }

        unchecked {
            i++;
        }
        }

        emit PaymentReceived(msg.sender, 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 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 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 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 {
        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;
    }

        SplitterAddress.sendValue(account, payment);
        emit PaymentReleased(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 2 of 2 : SplitterAddress.sol
// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts (last updated v4.8.0) (utils/Address.sol)

pragma solidity 0.8.17;

/**
 * @dev Collection of functions related to the address type
 */
library SplitterAddress {
    /**
     * @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
     *
     * Furthermore, `isContract` will also return true if the target contract within
     * the same transaction is already scheduled for destruction by `SELFDESTRUCT`,
     * which only has an effect at the end of a transaction.
     * ====
     *
     * [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.
     * ====
     */

    /**
     * @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://consensys.net/diligence/blog/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");
    }
}

Settings
{
  "optimizer": {
    "enabled": true,
    "runs": 800
  },
  "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":"payable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"string","name":"message","type":"string"}],"name":"Log","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"account","type":"address"},{"indexed":false,"internalType":"uint256","name":"shares","type":"uint256"}],"name":"PayeeAdded","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"PaymentReceived","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"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":"address payable","name":"account","type":"address"}],"name":"release","outputs":[],"stateMutability":"nonpayable","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":[],"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"}]

Deployed Bytecode

0x6080604052600436106100745760003560e01c80639852595c1161004e5780639852595c14610274578063a3f8eace146102aa578063ce7c2ac2146102ca578063e33b7de31461030057600080fd5b806319165587146101f65780633a98ef39146102185780638b83209b1461023c57600080fd5b366101f15760045460005b818110156101b957306001600160a01b03166319165587600483815481106100a9576100a9610687565b60009182526020909120015460405160e083901b7fffffffff000000000000000000000000000000000000000000000000000000001681526001600160a01b039091166004820152602401600060405180830381600087803b15801561010e57600080fd5b505af192505050801561011f575060015b6101b1577fcf34ef537ac33ee1ac626ca1587a0a7e8e51561e5514f8cb36afa1c5102b3bab6040516101a89060208082526026908201527f5061796d656e7453706c6974746572203a2065787465726e616c2063616c6c2060408201527f6661696c65640000000000000000000000000000000000000000000000000000606082015260800190565b60405180910390a15b60010161007f565b5060405134815233907f6ef95f06320e7a25a04a175ca677b7052bdd97131872c2192525a629f51be7709060200160405180910390a2005b600080fd5b34801561020257600080fd5b506102166102113660046106b5565b610315565b005b34801561022457600080fd5b506000545b6040519081526020015b60405180910390f35b34801561024857600080fd5b5061025c6102573660046106d2565b6104ae565b6040516001600160a01b039091168152602001610233565b34801561028057600080fd5b5061022961028f3660046106b5565b6001600160a01b031660009081526003602052604090205490565b3480156102b657600080fd5b506102296102c53660046106b5565b6104de565b3480156102d657600080fd5b506102296102e53660046106b5565b6001600160a01b031660009081526002602052604090205490565b34801561030c57600080fd5b50600154610229565b6001600160a01b0381166000908152600260205260409020546103a55760405162461bcd60e51b815260206004820152602660248201527f5061796d656e7453706c69747465723a206163636f756e7420686173206e6f2060448201527f736861726573000000000000000000000000000000000000000000000000000060648201526084015b60405180910390fd5b60006103b0826104de565b9050806000036104285760405162461bcd60e51b815260206004820152602b60248201527f5061796d656e7453706c69747465723a206163636f756e74206973206e6f742060448201527f647565207061796d656e74000000000000000000000000000000000000000000606482015260840161039c565b806001600082825461043a9190610701565b90915550506001600160a01b03821660009081526003602052604090208054820190556104678282610526565b816001600160a01b03167fdf20fd1e76bc69d672e4814fafb2c449bba3a5369d8359adf9e05e6fde87b056826040516104a291815260200190565b60405180910390a25050565b6000600482815481106104c3576104c3610687565b6000918252602090912001546001600160a01b031692915050565b6000806104ea60015490565b6104f49047610701565b905061051f838261051a866001600160a01b031660009081526003602052604090205490565b610644565b9392505050565b804710156105765760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a20696e73756666696369656e742062616c616e6365000000604482015260640161039c565b6000826001600160a01b03168260405160006040518083038185875af1925050503d80600081146105c3576040519150601f19603f3d011682016040523d82523d6000602084013e6105c8565b606091505b505090508061063f5760405162461bcd60e51b815260206004820152603a60248201527f416464726573733a20756e61626c6520746f2073656e642076616c75652c207260448201527f6563697069656e74206d61792068617665207265766572746564000000000000606482015260840161039c565b505050565b600080546001600160a01b03851682526002602052604082205483919061066b908661071a565b6106759190610731565b61067f9190610753565b949350505050565b634e487b7160e01b600052603260045260246000fd5b6001600160a01b03811681146106b257600080fd5b50565b6000602082840312156106c757600080fd5b813561051f8161069d565b6000602082840312156106e457600080fd5b5035919050565b634e487b7160e01b600052601160045260246000fd5b80820180821115610714576107146106eb565b92915050565b8082028115828204841417610714576107146106eb565b60008261074e57634e487b7160e01b600052601260045260246000fd5b500490565b81810381811115610714576107146106eb56fea264697066735822122083294f4d28ab91621394405e4903071c8f52770a24540f26db399ec3721c377164736f6c63430008110033

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.