ETH Price: $2,964.67 (-1.22%)

Contract

0x4300c0D3c0D3c0D3c0D3c0D3C0D3c0d3c0D30004
Transaction Hash
Block
From
To
Withdraw Fees369716052026-01-06 17:19:2422 days ago1767719964IN
0x4300c0D3...3c0D30004
0 ETH0.000041111.00000025
Transfer Setter367771582026-01-04 11:18:3724 days ago1767525517IN
0x4300c0D3...3c0D30004
0 ETH00.00010025
Transfer Allocat...367770942026-01-04 11:17:3324 days ago1767525453IN
0x4300c0D3...3c0D30004
0 ETH00.00010025
Withdraw Fees367768932026-01-04 11:14:1224 days ago1767525252IN
0x4300c0D3...3c0D30004
0 ETH00.00010025
Transfer Allocat...361188502025-12-27 20:26:4932 days ago1766867209IN
0x4300c0D3...3c0D30004
0 ETH0.000070361.00000025
Transfer Allocat...361185432025-12-27 20:21:4232 days ago1766866902IN
0x4300c0D3...3c0D30004
0 ETH00
Withdraw Fees354191842025-12-19 18:05:4340 days ago1766167543IN
0x4300c0D3...3c0D30004
0 ETH0.000050411.00000032
Withdraw Fees347295492025-12-11 18:31:4848 days ago1765477908IN
0x4300c0D3...3c0D30004
0 ETH0.000050411.00000025
Withdraw Fees298964012025-10-16 19:59:20104 days ago1760644760IN
0x4300c0D3...3c0D30004
0 ETH0.000050411.00000028
Withdraw Fees275533312025-09-19 17:08:10131 days ago1758301690IN
0x4300c0D3...3c0D30004
0 ETH0.000050411.00000199
Withdraw Fees238335192025-08-07 15:51:18174 days ago1754581878IN
0x4300c0D3...3c0D30004
0 ETH0.000050411.00000034
Withdraw Fees215079732025-07-11 17:52:12201 days ago1752256332IN
0x4300c0D3...3c0D30004
0 ETH0.000050421.0000197
Withdraw Fees190956122025-06-13 19:46:11229 days ago1749843971IN
0x4300c0D3...3c0D30004
0 ETH0.000050461.0010015
Withdraw Fees165879932025-05-15 19:12:32258 days ago1747336352IN
0x4300c0D3...3c0D30004
0 ETH0.000064111.00019931
Transfer Allocat...18337452024-11-26 0:48:24429 days ago1732582104IN
0x4300c0D3...3c0D30004
0 ETH0.000001930.00000025

Latest 25 internal transactions (View All)

Advanced mode:
Parent Transaction Hash Block From To
388963352026-01-28 23:58:143 hrs ago1769644694
0x4300c0D3...3c0D30004
0.33459196 ETH
388099352026-01-27 23:58:1427 hrs ago1769558294
0x4300c0D3...3c0D30004
0.14771614 ETH
387858642026-01-27 17:17:0333 hrs ago1769534223
0x4300c0D3...3c0D30004
3.34032024 ETH
387858642026-01-27 17:17:0333 hrs ago1769534223
0x4300c0D3...3c0D30004
0.21291965 ETH
387235352026-01-26 23:58:142 days ago1769471894
0x4300c0D3...3c0D30004
0.45804518 ETH
386371352026-01-25 23:58:143 days ago1769385494
0x4300c0D3...3c0D30004
0.42569189 ETH
385507352026-01-24 23:58:144 days ago1769299094
0x4300c0D3...3c0D30004
0.11361873 ETH
384643352026-01-23 23:58:145 days ago1769212694
0x4300c0D3...3c0D30004
0.46620361 ETH
383779352026-01-22 23:58:146 days ago1769126294
0x4300c0D3...3c0D30004
0.69177162 ETH
382915352026-01-21 23:58:147 days ago1769039894
0x4300c0D3...3c0D30004
0.76491711 ETH
382051352026-01-20 23:58:148 days ago1768953494
0x4300c0D3...3c0D30004
0.20715241 ETH
381859632026-01-20 18:38:428 days ago1768934322
0x4300c0D3...3c0D30004
3.40008404 ETH
381859632026-01-20 18:38:428 days ago1768934322
0x4300c0D3...3c0D30004
0.41108715 ETH
381187352026-01-19 23:58:149 days ago1768867094
0x4300c0D3...3c0D30004
0.43134549 ETH
380323352026-01-18 23:58:1410 days ago1768780694
0x4300c0D3...3c0D30004
0.11918905 ETH
379459352026-01-17 23:58:1411 days ago1768694294
0x4300c0D3...3c0D30004
0.04679025 ETH
378595352026-01-16 23:58:1412 days ago1768607894
0x4300c0D3...3c0D30004
0.20028947 ETH
377731352026-01-15 23:58:1413 days ago1768521494
0x4300c0D3...3c0D30004
0.36545821 ETH
376867352026-01-14 23:58:1414 days ago1768435094
0x4300c0D3...3c0D30004
0.5236672 ETH
376003352026-01-13 23:58:1415 days ago1768348694
0x4300c0D3...3c0D30004
0.72637964 ETH
375139352026-01-12 23:58:1416 days ago1768262294
0x4300c0D3...3c0D30004
0.32804005 ETH
374275352026-01-11 23:58:1417 days ago1768175894
0x4300c0D3...3c0D30004
0.19728948 ETH
373411352026-01-10 23:58:1418 days ago1768089494
0x4300c0D3...3c0D30004
0.03917589 ETH
372547352026-01-09 23:58:1419 days ago1768003094
0x4300c0D3...3c0D30004
0.0113721 ETH
372452852026-01-09 21:20:4419 days ago1767993644
0x4300c0D3...3c0D30004
1.70792021 ETH
View All Internal Transactions

Cross-Chain Transactions
Loading...
Loading

Contract Source Code Verified (Genesis Bytecode Match Only)

Contract Name:
NetFeeSplitter

Compiler Version
v0.8.26+commit.8a97fa7a

Optimization Enabled:
Yes with 999999 runs

Other Settings:
cancun EvmVersion, MIT license
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.26;

import {INetFeeSplitter} from '../interfaces/FeeSplitter/INetFeeSplitter.sol';

/// @title NetFeeSplitter
/// @notice Splits net fees between multiple recipients. Recipients are managed by setters. Setters can transfer the entire allocation or a portion of it to other recipients.
contract NetFeeSplitter is INetFeeSplitter {
    uint256 internal constant TOTAL_ALLOCATION = 10_000;
    uint256 private constant MAGNITUDE = 1e30;

    uint256 private _index;
    mapping(address recipient => uint256 index) private _indexOf;
    mapping(address recipient => uint256 _earned) private _earned;

    mapping(address recipient => Recipient) public recipients;

    constructor(address[] memory initialRecipients, Recipient[] memory recipientData) {
        uint256 totalAllocation;
        uint256 length = initialRecipients.length;
        if (initialRecipients.length != recipientData.length) revert InvalidRecipients();
        for (uint256 i = 0; i < length; i++) {
            address recipient = initialRecipients[i];
            bool duplicateRecipient = false;
            assembly {
                duplicateRecipient := tload(recipient)
                tstore(recipient, 1)
            }
            if (duplicateRecipient) revert DuplicateRecipient();
            if (recipientData[i].setter == address(0)) revert SetterZero();
            if (recipient == address(0)) revert RecipientZero();
            if (recipientData[i].allocation == 0) revert AllocationZero();
            recipients[recipient] = recipientData[i];
            totalAllocation += recipientData[i].allocation;
        }
        if (totalAllocation != TOTAL_ALLOCATION) revert InvalidTotalAllocation();
    }

    /// @dev Keep track of incoming fees
    receive() external payable {
        _index += (msg.value * MAGNITUDE) / TOTAL_ALLOCATION;
    }

    /// @inheritdoc INetFeeSplitter
    function transferAllocation(address oldRecipient, address newRecipient, uint256 allocation) external {
        if (setterOf(newRecipient) == address(0)) revert SetterZero();
        _transfer(oldRecipient, newRecipient, allocation);
    }

    /// @inheritdoc INetFeeSplitter
    function transferAllocationAndSetSetter(
        address oldRecipient,
        address newRecipient,
        address newSetter,
        uint256 allocation
    ) external {
        if (setterOf(newRecipient) != address(0)) revert SetterAlreadySet();
        if (newSetter == address(0)) revert SetterZero();
        recipients[newRecipient] = Recipient(newSetter, 0);
        emit SetterTransferred(newRecipient, address(0), newSetter);
        _transfer(oldRecipient, newRecipient, allocation);
    }

    /// @inheritdoc INetFeeSplitter
    function transferSetter(address recipient, address newSetter) external {
        if (newSetter == address(0)) revert SetterZero();
        address currentSetter = setterOf(recipient);
        if (currentSetter != msg.sender) revert Unauthorized();
        recipients[recipient].setter = newSetter;
        emit SetterTransferred(recipient, currentSetter, newSetter);
    }

    /// @inheritdoc INetFeeSplitter
    function withdrawFees(address to) external returns (uint256 amount) {
        _updateFees(msg.sender);
        amount = _earned[msg.sender];
        if (amount != 0) {
            _earned[msg.sender] = 0;
            (bool success,) = to.call{value: amount}('');
            if (!success) revert WithdrawalFailed();
        }
        emit Withdrawn(msg.sender, to, amount);
    }

    /// @inheritdoc INetFeeSplitter
    function earnedFees(address account) external view returns (uint256) {
        return _earned[account] + _calculateFees(account);
    }

    /// @inheritdoc INetFeeSplitter
    function balanceOf(address recipient) public view returns (uint256) {
        return recipients[recipient].allocation;
    }

    /// @inheritdoc INetFeeSplitter
    function setterOf(address recipient) public view returns (address) {
        return recipients[recipient].setter;
    }

    function _transfer(address oldRecipient, address newRecipient, uint256 allocation) private {
        if (setterOf(oldRecipient) != msg.sender) revert Unauthorized();
        if (newRecipient == address(0)) revert RecipientZero();
        if (allocation == 0) revert AllocationZero();
        if (balanceOf(oldRecipient) < allocation) revert InsufficientAllocation();
        _updateFees(oldRecipient);
        _updateFees(newRecipient);

        recipients[oldRecipient].allocation -= allocation;
        recipients[newRecipient].allocation += allocation;
        emit AllocationTransferred(msg.sender, oldRecipient, newRecipient, allocation);
    }

    function _updateFees(address account) private {
        _earned[account] += _calculateFees(account);
        _indexOf[account] = _index;
    }

    function _calculateFees(address account) private view returns (uint256) {
        return (recipients[account].allocation * (_index - _indexOf[account])) / MAGNITUDE;
    }
}

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

interface INetFeeSplitter {
    /// @notice Recipient data for an individual recipient
    /// @custom:field setter The setter address managing the recipient
    /// @custom:field allocation The allocation of the recipient
    struct Recipient {
        address setter;
        uint256 allocation;
    }

    /// @notice Emitted when a recipient's allocation is transferred
    /// @param setter The setter address managing the recipient
    /// @param from The previous recipient address
    /// @param to The new recipient address
    /// @param allocation The allocation transferred
    event AllocationTransferred(address indexed setter, address indexed from, address indexed to, uint256 allocation);

    /// @notice Emitted when a recipient's setter is transferred
    /// @param recipient The recipient address
    /// @param previousSetter The previous setter address
    /// @param newSetter The new setter address
    event SetterTransferred(address indexed recipient, address indexed previousSetter, address indexed newSetter);

    /// @notice Emitted when fees are withdrawn by recipient
    /// @param recipient The recipient address
    /// @param to The address the fees were withdrawn to
    /// @param amount The amount of fees withdrawn
    event Withdrawn(address indexed recipient, address indexed to, uint256 amount);

    /// @notice Thrown when the recipients array is not the same length as the recipientData array
    error InvalidRecipients();

    /// @notice Thrown when a duplicate recipient is added
    error DuplicateRecipient();

    /// @notice Thrown when an setter address is zero
    error SetterZero();

    /// @notice Thrown when a recipient already has a setter
    error SetterAlreadySet();

    /// @notice Thrown when a recipient address is zero
    error RecipientZero();

    /// @notice Thrown when a recipient allocation is zero or zero allocation is transferred
    error AllocationZero();

    /// @notice Thrown when the total allocation is not the same as the sum of the recipient balances
    error InvalidTotalAllocation();

    /// @notice Thrown when the caller is not the setter
    error Unauthorized();

    /// @notice Thrown when there is insufficient allocation to perform a transfer
    error InsufficientAllocation();

    /// @notice Thrown when a withdrawal fails
    error WithdrawalFailed();

    /// @notice Transfers a allocation from one recipient to another
    /// @param oldRecipient The recipient address to transfer from
    /// @param newRecipient The recipient address to transfer to
    /// @param allocation The allocation to transfer
    /// @dev reverts if the recipient doesn't have a setter
    function transferAllocation(address oldRecipient, address newRecipient, uint256 allocation) external;

    /// @notice Transfers the allocation of a recipient to another recipient and sets the setter of the recipient
    /// @param oldRecipient The recipient address to transfer from
    /// @param newRecipient The recipient address to transfer to
    /// @param newSetter The new setter address for the recipient
    /// @param allocation The allocation to transfer
    /// @dev reverts if the recipient already has a setter
    function transferAllocationAndSetSetter(
        address oldRecipient,
        address newRecipient,
        address newSetter,
        uint256 allocation
    ) external;

    /// @notice Transfers the setter of a recipient to a new setter
    /// @param recipient The recipient address
    /// @param newSetter The new setter address
    function transferSetter(address recipient, address newSetter) external;

    /// @notice Withdraws the fees earned by a recipient
    /// @param to The address to withdraw the fees to
    /// @return amount The amount of fees withdrawn
    function withdrawFees(address to) external returns (uint256 amount);

    /// @notice Calculates the fees earned by a recipient
    /// @param account The recipient address
    /// @return amount The amount of fees earned
    function earnedFees(address account) external view returns (uint256);

    /// @notice Gets the allocation of a recipient
    /// @param recipient The recipient address
    /// @return allocation The allocation of the recipient
    function balanceOf(address recipient) external view returns (uint256);

    /// @notice Gets the setter of a recipient
    /// @param recipient The recipient address
    /// @return setter The setter of the recipient
    function setterOf(address recipient) external view returns (address);
}

Settings
{
  "remappings": [
    "@openzeppelin/contracts/=lib/openzeppelin-contracts/contracts/",
    "@openzeppelin/contracts-upgradeable/=lib/openzeppelin-contracts-upgradeable/contracts/",
    "@eth-optimism-bedrock/=lib/optimism/packages/contracts-bedrock/",
    "forge-std/=lib/forge-std/src/",
    "@openzeppelin/contracts/=lib/openzeppelin-contracts/contracts/",
    "@openzeppelin/contracts-upgradeable/=lib/openzeppelin-contracts-upgradeable/contracts/",
    "@eth-optimism-bedrock/=lib/optimism/packages/contracts-bedrock/",
    "automate/=lib/optimism/packages/contracts-bedrock/lib/automate/contracts/",
    "ds-test/=lib/openzeppelin-contracts-upgradeable/lib/forge-std/lib/ds-test/src/",
    "erc4626-tests/=lib/openzeppelin-contracts-upgradeable/lib/erc4626-tests/",
    "forge-gas-snapshot/=lib/forge-gas-snapshot/src/",
    "forge-std/=lib/forge-std/src/",
    "kontrol-cheatcodes/=lib/optimism/packages/contracts-bedrock/lib/kontrol-cheatcodes/src/",
    "lib-keccak/=lib/optimism/packages/contracts-bedrock/lib/lib-keccak/contracts/",
    "openzeppelin-contracts-upgradeable/=lib/openzeppelin-contracts-upgradeable/",
    "openzeppelin-contracts-v5/=lib/optimism/packages/contracts-bedrock/lib/openzeppelin-contracts-v5/",
    "openzeppelin-contracts/=lib/openzeppelin-contracts/",
    "optimism/=lib/optimism/",
    "prb-test/=lib/optimism/packages/contracts-bedrock/lib/automate/lib/prb-test/src/",
    "safe-contracts/=lib/optimism/packages/contracts-bedrock/lib/safe-contracts/contracts/",
    "solady/=lib/optimism/packages/contracts-bedrock/lib/solady/",
    "solmate/=lib/optimism/packages/contracts-bedrock/lib/solmate/src/"
  ],
  "optimizer": {
    "enabled": true,
    "runs": 999999
  },
  "metadata": {
    "useLiteralContent": false,
    "bytecodeHash": "ipfs",
    "appendCBOR": true
  },
  "outputSelection": {
    "*": {
      "*": [
        "evm.bytecode",
        "evm.deployedBytecode",
        "abi"
      ]
    }
  },
  "evmVersion": "cancun",
  "viaIR": false,
  "libraries": {}
}

Contract Security Audit

Contract ABI

API
[{"inputs":[{"internalType":"address[]","name":"initialRecipients","type":"address[]"},{"components":[{"internalType":"address","name":"setter","type":"address"},{"internalType":"uint256","name":"allocation","type":"uint256"}],"internalType":"struct INetFeeSplitter.Recipient[]","name":"recipientData","type":"tuple[]"}],"stateMutability":"nonpayable","type":"constructor"},{"inputs":[],"name":"AllocationZero","type":"error"},{"inputs":[],"name":"DuplicateRecipient","type":"error"},{"inputs":[],"name":"InsufficientAllocation","type":"error"},{"inputs":[],"name":"InvalidRecipients","type":"error"},{"inputs":[],"name":"InvalidTotalAllocation","type":"error"},{"inputs":[],"name":"RecipientZero","type":"error"},{"inputs":[],"name":"SetterAlreadySet","type":"error"},{"inputs":[],"name":"SetterZero","type":"error"},{"inputs":[],"name":"Unauthorized","type":"error"},{"inputs":[],"name":"WithdrawalFailed","type":"error"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"setter","type":"address"},{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"allocation","type":"uint256"}],"name":"AllocationTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"recipient","type":"address"},{"indexed":true,"internalType":"address","name":"previousSetter","type":"address"},{"indexed":true,"internalType":"address","name":"newSetter","type":"address"}],"name":"SetterTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"recipient","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"Withdrawn","type":"event"},{"inputs":[{"internalType":"address","name":"recipient","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"earnedFees","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"recipient","type":"address"}],"name":"recipients","outputs":[{"internalType":"address","name":"setter","type":"address"},{"internalType":"uint256","name":"allocation","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"recipient","type":"address"}],"name":"setterOf","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"oldRecipient","type":"address"},{"internalType":"address","name":"newRecipient","type":"address"},{"internalType":"uint256","name":"allocation","type":"uint256"}],"name":"transferAllocation","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"oldRecipient","type":"address"},{"internalType":"address","name":"newRecipient","type":"address"},{"internalType":"address","name":"newSetter","type":"address"},{"internalType":"uint256","name":"allocation","type":"uint256"}],"name":"transferAllocationAndSetSetter","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"recipient","type":"address"},{"internalType":"address","name":"newSetter","type":"address"}],"name":"transferSetter","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"}],"name":"withdrawFees","outputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]

60806040526004361061007c575f3560e01c8063c13886a41161004c578063c13886a4146101c0578063c6743555146101df578063eb820312146101fe578063feb7219d14610275575f80fd5b8063024e2c06146100c0578063164e68de146100e1578063396cb5971461011357806370a082311461017c575f80fd5b366100bc5761271061009b6c0c9f2c9cd04674edea4000000034610a1e565b6100a59190610a35565b5f808282546100b49190610a6d565b925050819055005b5f80fd5b3480156100cb575f80fd5b506100df6100da366004610aa8565b610294565b005b3480156100ec575f80fd5b506101006100fb366004610ae2565b610301565b6040519081526020015b60405180910390f35b34801561011e575f80fd5b5061015761012d366004610ae2565b73ffffffffffffffffffffffffffffffffffffffff9081165f908152600360205260409020541690565b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200161010a565b348015610187575f80fd5b50610100610196366004610ae2565b73ffffffffffffffffffffffffffffffffffffffff165f9081526003602052604090206001015490565b3480156101cb575f80fd5b506100df6101da366004610b02565b610418565b3480156101ea575f80fd5b506100df6101f9366004610b33565b610548565b348015610209575f80fd5b50610249610218366004610ae2565b60036020525f90815260409020805460019091015473ffffffffffffffffffffffffffffffffffffffff9091169082565b6040805173ffffffffffffffffffffffffffffffffffffffff909316835260208301919091520161010a565b348015610280575f80fd5b5061010061028f366004610ae2565b61069f565b73ffffffffffffffffffffffffffffffffffffffff8281165f90815260036020526040902054166102f1576040517fe1d0a22f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6102fc8383836106de565b505050565b5f61030b3361090b565b50335f9081526002602052604090205480156103c657335f908152600260205260408082208290555173ffffffffffffffffffffffffffffffffffffffff84169083908381818185875af1925050503d805f8114610384576040519150601f19603f3d011682016040523d82523d5f602084013e610389565b606091505b50509050806103c4576040517f27fcd9d100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b505b60405181815273ffffffffffffffffffffffffffffffffffffffff83169033907fd1c19fbcd4551a5edfb66d43d2e337c04837afda3482b42bdf569a8fccdae5fb9060200160405180910390a3919050565b73ffffffffffffffffffffffffffffffffffffffff8116610465576040517fe1d0a22f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff8281165f90815260036020526040902054163381146104c5576040517f82b4290000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff8381165f8181526003602052604080822080547fffffffffffffffffffffffff00000000000000000000000000000000000000001687861690811790915590519093851692917ff0476b1621059e9b7a94b31f4699ab07974f87c8e31db4cb9ad1f9892eb9b16991a4505050565b73ffffffffffffffffffffffffffffffffffffffff8381165f9081526003602052604090205416156105a6576040517f5e26355e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff82166105f3576040517fe1d0a22f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60408051808201825273ffffffffffffffffffffffffffffffffffffffff8481168083525f60208085018281528985168084526003909252868320955186547fffffffffffffffffffffffff0000000000000000000000000000000000000000169516949094178555925160019094019390935592517ff0476b1621059e9b7a94b31f4699ab07974f87c8e31db4cb9ad1f9892eb9b169908390a46106998484836106de565b50505050565b5f6106a982610976565b73ffffffffffffffffffffffffffffffffffffffff83165f908152600260205260409020546106d89190610a6d565b92915050565b73ffffffffffffffffffffffffffffffffffffffff8381165f9081526003602052604090205416331461073d576040517f82b4290000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff821661078a576040517f3d9eb1db00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b805f036107c3576040517f65c555f200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b806107f28473ffffffffffffffffffffffffffffffffffffffff165f9081526003602052604090206001015490565b101561082a576040517fdf2d477400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6108338361090b565b61083c8261090b565b73ffffffffffffffffffffffffffffffffffffffff83165f9081526003602052604081206001018054839290610873908490610b7b565b909155505073ffffffffffffffffffffffffffffffffffffffff82165f90815260036020526040812060010180548392906108af908490610a6d565b909155505060405181815273ffffffffffffffffffffffffffffffffffffffff808416919085169033907f4c6e7131fb69f3c2cc88b05b76a7aa4809429fefa284dda9cf14884d25e3742b9060200160405180910390a4505050565b61091481610976565b73ffffffffffffffffffffffffffffffffffffffff82165f9081526002602052604081208054909190610948908490610a6d565b90915550505f805473ffffffffffffffffffffffffffffffffffffffff909216815260016020526040902055565b73ffffffffffffffffffffffffffffffffffffffff81165f9081526001602052604081205481546c0c9f2c9cd04674edea40000000916109b591610b7b565b73ffffffffffffffffffffffffffffffffffffffff84165f908152600360205260409020600101546109e79190610a1e565b6106d89190610a35565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b80820281158282048414176106d8576106d86109f1565b5f82610a68577f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b500490565b808201808211156106d8576106d86109f1565b803573ffffffffffffffffffffffffffffffffffffffff81168114610aa3575f80fd5b919050565b5f805f60608486031215610aba575f80fd5b610ac384610a80565b9250610ad160208501610a80565b929592945050506040919091013590565b5f60208284031215610af2575f80fd5b610afb82610a80565b9392505050565b5f8060408385031215610b13575f80fd5b610b1c83610a80565b9150610b2a60208401610a80565b90509250929050565b5f805f8060808587031215610b46575f80fd5b610b4f85610a80565b9350610b5d60208601610a80565b9250610b6b60408601610a80565b9396929550929360600135925050565b818103818111156106d8576106d86109f156fea2646970667358221220c1357c5e0ed53d24a71012d61b9364dfacf3e395902c1817336223c5b44a0ad564736f6c634300081a0033

Deployed Bytecode

0x60806040526004361061007c575f3560e01c8063c13886a41161004c578063c13886a4146101c0578063c6743555146101df578063eb820312146101fe578063feb7219d14610275575f80fd5b8063024e2c06146100c0578063164e68de146100e1578063396cb5971461011357806370a082311461017c575f80fd5b366100bc5761271061009b6c0c9f2c9cd04674edea4000000034610a1e565b6100a59190610a35565b5f808282546100b49190610a6d565b925050819055005b5f80fd5b3480156100cb575f80fd5b506100df6100da366004610aa8565b610294565b005b3480156100ec575f80fd5b506101006100fb366004610ae2565b610301565b6040519081526020015b60405180910390f35b34801561011e575f80fd5b5061015761012d366004610ae2565b73ffffffffffffffffffffffffffffffffffffffff9081165f908152600360205260409020541690565b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200161010a565b348015610187575f80fd5b50610100610196366004610ae2565b73ffffffffffffffffffffffffffffffffffffffff165f9081526003602052604090206001015490565b3480156101cb575f80fd5b506100df6101da366004610b02565b610418565b3480156101ea575f80fd5b506100df6101f9366004610b33565b610548565b348015610209575f80fd5b50610249610218366004610ae2565b60036020525f90815260409020805460019091015473ffffffffffffffffffffffffffffffffffffffff9091169082565b6040805173ffffffffffffffffffffffffffffffffffffffff909316835260208301919091520161010a565b348015610280575f80fd5b5061010061028f366004610ae2565b61069f565b73ffffffffffffffffffffffffffffffffffffffff8281165f90815260036020526040902054166102f1576040517fe1d0a22f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6102fc8383836106de565b505050565b5f61030b3361090b565b50335f9081526002602052604090205480156103c657335f908152600260205260408082208290555173ffffffffffffffffffffffffffffffffffffffff84169083908381818185875af1925050503d805f8114610384576040519150601f19603f3d011682016040523d82523d5f602084013e610389565b606091505b50509050806103c4576040517f27fcd9d100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b505b60405181815273ffffffffffffffffffffffffffffffffffffffff83169033907fd1c19fbcd4551a5edfb66d43d2e337c04837afda3482b42bdf569a8fccdae5fb9060200160405180910390a3919050565b73ffffffffffffffffffffffffffffffffffffffff8116610465576040517fe1d0a22f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff8281165f90815260036020526040902054163381146104c5576040517f82b4290000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff8381165f8181526003602052604080822080547fffffffffffffffffffffffff00000000000000000000000000000000000000001687861690811790915590519093851692917ff0476b1621059e9b7a94b31f4699ab07974f87c8e31db4cb9ad1f9892eb9b16991a4505050565b73ffffffffffffffffffffffffffffffffffffffff8381165f9081526003602052604090205416156105a6576040517f5e26355e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff82166105f3576040517fe1d0a22f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60408051808201825273ffffffffffffffffffffffffffffffffffffffff8481168083525f60208085018281528985168084526003909252868320955186547fffffffffffffffffffffffff0000000000000000000000000000000000000000169516949094178555925160019094019390935592517ff0476b1621059e9b7a94b31f4699ab07974f87c8e31db4cb9ad1f9892eb9b169908390a46106998484836106de565b50505050565b5f6106a982610976565b73ffffffffffffffffffffffffffffffffffffffff83165f908152600260205260409020546106d89190610a6d565b92915050565b73ffffffffffffffffffffffffffffffffffffffff8381165f9081526003602052604090205416331461073d576040517f82b4290000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff821661078a576040517f3d9eb1db00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b805f036107c3576040517f65c555f200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b806107f28473ffffffffffffffffffffffffffffffffffffffff165f9081526003602052604090206001015490565b101561082a576040517fdf2d477400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6108338361090b565b61083c8261090b565b73ffffffffffffffffffffffffffffffffffffffff83165f9081526003602052604081206001018054839290610873908490610b7b565b909155505073ffffffffffffffffffffffffffffffffffffffff82165f90815260036020526040812060010180548392906108af908490610a6d565b909155505060405181815273ffffffffffffffffffffffffffffffffffffffff808416919085169033907f4c6e7131fb69f3c2cc88b05b76a7aa4809429fefa284dda9cf14884d25e3742b9060200160405180910390a4505050565b61091481610976565b73ffffffffffffffffffffffffffffffffffffffff82165f9081526002602052604081208054909190610948908490610a6d565b90915550505f805473ffffffffffffffffffffffffffffffffffffffff909216815260016020526040902055565b73ffffffffffffffffffffffffffffffffffffffff81165f9081526001602052604081205481546c0c9f2c9cd04674edea40000000916109b591610b7b565b73ffffffffffffffffffffffffffffffffffffffff84165f908152600360205260409020600101546109e79190610a1e565b6106d89190610a35565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b80820281158282048414176106d8576106d86109f1565b5f82610a68577f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b500490565b808201808211156106d8576106d86109f1565b803573ffffffffffffffffffffffffffffffffffffffff81168114610aa3575f80fd5b919050565b5f805f60608486031215610aba575f80fd5b610ac384610a80565b9250610ad160208501610a80565b929592945050506040919091013590565b5f60208284031215610af2575f80fd5b610afb82610a80565b9392505050565b5f8060408385031215610b13575f80fd5b610b1c83610a80565b9150610b2a60208401610a80565b90509250929050565b5f805f8060808587031215610b46575f80fd5b610b4f85610a80565b9350610b5d60208601610a80565b9250610b6b60408601610a80565b9396929550929360600135925050565b818103818111156106d8576106d86109f156fea2646970667358221220c1357c5e0ed53d24a71012d61b9364dfacf3e395902c1817336223c5b44a0ad564736f6c634300081a0033

Deployed Bytecode Sourcemap

339:4691:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;433:6;1839:21;482:4;1839:9;:21;:::i;:::-;1838:42;;;;:::i;:::-;1828:6;;:52;;;;;;;:::i;:::-;;;;;;;;339:4691;;;;1929:238;;;;;;;;;;-1:-1:-1;1929:238:0;;;;;:::i;:::-;;:::i;:::-;;3165:379;;;;;;;;;;-1:-1:-1;3165:379:0;;;;;:::i;:::-;;:::i;:::-;;;1702:25:2;;;1690:2;1675:18;3165:379:0;;;;;;;;3929:119;;;;;;;;;;-1:-1:-1;3929:119:0;;;;;:::i;:::-;4013:21;;;;3987:7;4013:21;;;:10;:21;;;;;:28;;;3929:119;;;;1914:42:2;1902:55;;;1884:74;;1872:2;1857:18;3929:119:0;1738:226:2;3763:124:0;;;;;;;;;;-1:-1:-1;3763:124:0;;;;;:::i;:::-;3848:21;;3822:7;3848:21;;;:10;:21;;;;;:32;;;;3763:124;2751:372;;;;;;;;;;-1:-1:-1;2751:372:0;;;;;:::i;:::-;;:::i;2209:500::-;;;;;;;;;;-1:-1:-1;2209:500:0;;;;;:::i;:::-;;:::i;655:57::-;;;;;;;;;;-1:-1:-1;655:57:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2892:42:2;2880:55;;;2862:74;;2967:2;2952:18;;2945:34;;;;2835:18;655:57:0;2688:297:2;3586:135:0;;;;;;;;;;-1:-1:-1;3586:135:0;;;;;:::i;:::-;;:::i;1929:238::-;4013:21;;;;2078:1;4013:21;;;:10;:21;;;;;:28;;2040:61;;2089:12;;;;;;;;;;;;;;2040:61;2111:49;2121:12;2135;2149:10;2111:9;:49::i;:::-;1929:238;;;:::o;3165:379::-;3217:14;3243:23;3255:10;3243:11;:23::i;:::-;-1:-1:-1;3293:10:0;3285:19;;;;:7;:19;;;;;;3318:11;;3314:176;;3353:10;3367:1;3345:19;;;:7;:19;;;;;;:23;;;3400:26;3345:19;3400:7;;;3415:6;;3367:1;3400:26;3367:1;3400:26;3415:6;3400:7;:26;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3382:44;;;3445:7;3440:39;;3461:18;;;;;;;;;;;;;;3440:39;3331:159;3314:176;3504:33;;1702:25:2;;;3504:33:0;;;;3514:10;;3504:33;;1690:2:2;1675:18;3504:33:0;;;;;;;3165:379;;;:::o;2751:372::-;2836:23;;;2832:48;;2868:12;;;;;;;;;;;;;;2832:48;4013:21;;;;2890;4013;;;:10;:21;;;;;:28;;2964:10;2947:27;;2943:54;;2983:14;;;;;;;;;;;;;;2943:54;3007:21;;;;;;;;:10;:21;;;;;;:40;;;;;;;;;;;;;3062:54;;3007:40;;3062:54;;;3007:21;3062:54;;;2822:301;2751:372;;:::o;2209:500::-;4013:21;;;;2427:1;4013:21;;;:10;:21;;;;;:28;;2393:36;2389:67;;2438:18;;;;;;;;;;;;;;2389:67;2470:23;;;2466:48;;2502:12;;;;;;;;;;;;;;2466:48;2551:23;;;;;;;;;;;;;;;-1:-1:-1;2551:23:0;;;;;;;2524:24;;;;;;:10;:24;;;;;;:50;;;;;;;;;;;;;;;;-1:-1:-1;2524:50:0;;;;;;;2589:54;;;;-1:-1:-1;;2589:54:0;2653:49;2663:12;2677;2691:10;2653:9;:49::i;:::-;2209:500;;;;:::o;3586:135::-;3646:7;3691:23;3706:7;3691:14;:23::i;:::-;3672:16;;;;;;;:7;:16;;;;;;:42;;;;:::i;:::-;3665:49;3586:135;-1:-1:-1;;3586:135:0:o;4054:649::-;4013:21;;;;3987:7;4013:21;;;:10;:21;;;;;:28;;4185:10;4159:36;4155:63;;4204:14;;;;;;;;;;;;;;4155:63;4232:26;;;4228:54;;4267:15;;;;;;;;;;;;;;4228:54;4296:10;4310:1;4296:15;4292:44;;4320:16;;;;;;;;;;;;;;4292:44;4376:10;4350:23;4360:12;3848:21;;3822:7;3848:21;;;:10;:21;;;;;:32;;;;3763:124;4350:23;:36;4346:73;;;4395:24;;;;;;;;;;;;;;4346:73;4429:25;4441:12;4429:11;:25::i;:::-;4464;4476:12;4464:11;:25::i;:::-;4500:24;;;;;;;:10;:24;;;;;:35;;:49;;4539:10;;4500:24;:49;;4539:10;;4500:49;:::i;:::-;;;;-1:-1:-1;;4559:24:0;;;;;;;:10;:24;;;;;:35;;:49;;4598:10;;4559:24;:49;;4598:10;;4559:49;:::i;:::-;;;;-1:-1:-1;;4623:73:0;;1702:25:2;;;4623:73:0;;;;;;;;;4645:10;;4623:73;;1690:2:2;1675:18;4623:73:0;;;;;;;4054:649;;;:::o;4709:142::-;4785:23;4800:7;4785:14;:23::i;:::-;4765:16;;;;;;;:7;:16;;;;;:43;;:16;;;:43;;;;;:::i;:::-;;;;-1:-1:-1;;4838:6:0;;;4818:17;;;;;;:8;:17;;;;;:26;4709:142::o;4857:171::-;4990:17;;;4920:7;4990:17;;;:8;:17;;;;;;4981:6;;482:4;;4981:26;;;:::i;:::-;4947:19;;;;;;;:10;:19;;;;;:30;;;:61;;;;:::i;:::-;4946:75;;;;:::i;14:184:2:-;66:77;63:1;56:88;163:4;160:1;153:15;187:4;184:1;177:15;203:168;276:9;;;307;;324:15;;;318:22;;304:37;294:71;;345:18;;:::i;376:274::-;416:1;442;432:189;;477:77;474:1;467:88;578:4;575:1;568:15;606:4;603:1;596:15;432:189;-1:-1:-1;635:9:2;;376:274::o;655:125::-;720:9;;;741:10;;;738:36;;;754:18;;:::i;785:196::-;853:20;;913:42;902:54;;892:65;;882:93;;971:1;968;961:12;882:93;785:196;;;:::o;986:374::-;1063:6;1071;1079;1132:2;1120:9;1111:7;1107:23;1103:32;1100:52;;;1148:1;1145;1138:12;1100:52;1171:29;1190:9;1171:29;:::i;:::-;1161:39;;1219:38;1253:2;1242:9;1238:18;1219:38;:::i;:::-;986:374;;1209:48;;-1:-1:-1;;;1326:2:2;1311:18;;;;1298:32;;986:374::o;1365:186::-;1424:6;1477:2;1465:9;1456:7;1452:23;1448:32;1445:52;;;1493:1;1490;1483:12;1445:52;1516:29;1535:9;1516:29;:::i;:::-;1506:39;1365:186;-1:-1:-1;;;1365:186:2:o;1969:260::-;2037:6;2045;2098:2;2086:9;2077:7;2073:23;2069:32;2066:52;;;2114:1;2111;2104:12;2066:52;2137:29;2156:9;2137:29;:::i;:::-;2127:39;;2185:38;2219:2;2208:9;2204:18;2185:38;:::i;:::-;2175:48;;1969:260;;;;;:::o;2234:449::-;2320:6;2328;2336;2344;2397:3;2385:9;2376:7;2372:23;2368:33;2365:53;;;2414:1;2411;2404:12;2365:53;2437:29;2456:9;2437:29;:::i;:::-;2427:39;;2485:38;2519:2;2508:9;2504:18;2485:38;:::i;:::-;2475:48;;2542:38;2576:2;2565:9;2561:18;2542:38;:::i;:::-;2234:449;;;;-1:-1:-1;2532:48:2;;2649:2;2634:18;2621:32;;-1:-1:-1;;2234:449:2:o;3200:128::-;3267:9;;;3288:11;;;3285:37;;;3302:18;;:::i

Swarm Source

ipfs://c1357c5e0ed53d24a71012d61b9364dfacf3e395902c1817336223c5b44a0ad5

Block Transaction Difficulty Gas Used Reward
View All Blocks Produced

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

Validator Index Block Amount
View All Withdrawals

Transaction Hash Block Value Eth2 PubKey Valid
View All Deposits
Loading...
Loading
[ Download: CSV Export  ]
[ 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.