ETH Price: $3,708.96 (+1.39%)

Contract

0xDbAa7270a260297385187AD8F012a5cf9c0299cE
 

Overview

ETH Balance

0 ETH

Eth Value

$0.00

Multichain Info

No addresses found
Transaction Hash
Method
Block
From
To
Claim Rewards196547762024-04-14 15:49:59230 days ago1713109799IN
0xDbAa7270...f9c0299cE
0 ETH0.000510048.91000609
Transfer196314322024-04-11 9:17:11233 days ago1712827031IN
0xDbAa7270...f9c0299cE
0.0496099 ETH0.0003866618.36462642
Transfer195867082024-04-05 2:57:11240 days ago1712285831IN
0xDbAa7270...f9c0299cE
0.03717923 ETH0.0002860213.58456325
Transfer195593772024-04-01 7:02:35243 days ago1711954955IN
0xDbAa7270...f9c0299cE
0.06870957 ETH0.000411519.54438466
Transfer195311782024-03-28 7:39:35247 days ago1711611575IN
0xDbAa7270...f9c0299cE
0.03993126 ETH0.0004654322.10581624
Transfer194920652024-03-22 18:51:35253 days ago1711133495IN
0xDbAa7270...f9c0299cE
0.09861869 ETH0.0005266825.0147451
Transfer194801232024-03-21 2:37:47255 days ago1710988667IN
0xDbAa7270...f9c0299cE
0.0229884 ETH0.0006685131.75078136
Transfer194674312024-03-19 7:52:47256 days ago1710834767IN
0xDbAa7270...f9c0299cE
0.08886057 ETH0.0006779232.19781554
Transfer194137492024-03-11 18:50:23264 days ago1710183023IN
0xDbAa7270...f9c0299cE
0.04745158 ETH0.0016209976.98852691
Transfer194120962024-03-11 13:16:23264 days ago1710162983IN
0xDbAa7270...f9c0299cE
0.07813562 ETH0.0016055776.2560377
Transfer194090442024-03-11 3:03:11265 days ago1710126191IN
0xDbAa7270...f9c0299cE
0.05675141 ETH0.0009398844.63937217
Transfer193947922024-03-09 3:15:11267 days ago1709954111IN
0xDbAa7270...f9c0299cE
0.06041945 ETH0.0008685241.25040839
Transfer193727922024-03-06 1:16:59270 days ago1709687819IN
0xDbAa7270...f9c0299cE
0.05804271 ETH0.0012602259.85399271
Transfer193570622024-03-03 20:36:23272 days ago1709498183IN
0xDbAa7270...f9c0299cE
0.12181242 ETH0.0014188967.38981801
Transfer193501302024-03-02 21:20:47273 days ago1709414447IN
0xDbAa7270...f9c0299cE
0.14280162 ETH0.0013681864.98151933
Transfer192670162024-02-20 6:04:47284 days ago1708409087IN
0xDbAa7270...f9c0299cE
0.03744578 ETH0.000503223.89952905
Transfer192513082024-02-18 1:02:59287 days ago1708218179IN
0xDbAa7270...f9c0299cE
0.01314532 ETH0.0003186615.13471403
Transfer192253682024-02-14 9:38:47290 days ago1707903527IN
0xDbAa7270...f9c0299cE
0.08076804 ETH0.0005848527.77748321
Transfer192189722024-02-13 12:04:35291 days ago1707825875IN
0xDbAa7270...f9c0299cE
0.08172391 ETH0.0004174919.82871144
Transfer192177902024-02-13 8:05:23291 days ago1707811523IN
0xDbAa7270...f9c0299cE
0.06418028 ETH0.0004875323.15535078
Transfer192025532024-02-11 4:48:59293 days ago1707626939IN
0xDbAa7270...f9c0299cE
0.03743994 ETH0.0004223920.0616301
Transfer191800172024-02-08 0:55:59297 days ago1707353759IN
0xDbAa7270...f9c0299cE
0.04385315 ETH0.0007063633.54866313
Transfer191460392024-02-03 6:26:59301 days ago1706941619IN
0xDbAa7270...f9c0299cE
0.01572767 ETH0.0002998814.24299937
Transfer191084852024-01-29 0:02:47307 days ago1706486567IN
0xDbAa7270...f9c0299cE
0.05009037 ETH0.000184128.7448714

Latest 4 internal transactions

Advanced mode:
Parent Transaction Hash Block From To
196547762024-04-14 15:49:59230 days ago1713109799
0xDbAa7270...f9c0299cE
1.07103015 ETH
196547762024-04-14 15:49:59230 days ago1713109799
0xDbAa7270...f9c0299cE
0.35701005 ETH
194017312024-03-10 2:31:47266 days ago1710037907
0xDbAa7270...f9c0299cE
0.00157429 ETH
190250722024-01-17 7:19:47318 days ago1705475987  Contract Creation0 ETH
Loading...
Loading

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

Contract Name:
FeeRecipient

Compiler Version
v0.8.13+commit.abaa5c0e

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion, GNU AGPLv3 license
/**
 *Submitted for verification at Etherscan.io on 2024-08-31
*/

// SPDX-License-Identifier: AGPL-3.0-only
pragma solidity =0.8.13 >=0.8.0;

// lib/solmate/src/utils/FixedPointMathLib.sol

/// @notice Arithmetic library with operations for fixed-point numbers.
/// @author Solmate (https://github.com/transmissions11/solmate/blob/main/src/utils/FixedPointMathLib.sol)
/// @author Inspired by USM (https://github.com/usmfum/USM/blob/master/contracts/WadMath.sol)
library FixedPointMathLib {
    /*//////////////////////////////////////////////////////////////
                    SIMPLIFIED FIXED POINT OPERATIONS
    //////////////////////////////////////////////////////////////*/

    uint256 internal constant MAX_UINT256 = 2**256 - 1;

    uint256 internal constant WAD = 1e18; // The scalar of ETH and most ERC20s.

    function mulWadDown(uint256 x, uint256 y) internal pure returns (uint256) {
        return mulDivDown(x, y, WAD); // Equivalent to (x * y) / WAD rounded down.
    }

    function mulWadUp(uint256 x, uint256 y) internal pure returns (uint256) {
        return mulDivUp(x, y, WAD); // Equivalent to (x * y) / WAD rounded up.
    }

    function divWadDown(uint256 x, uint256 y) internal pure returns (uint256) {
        return mulDivDown(x, WAD, y); // Equivalent to (x * WAD) / y rounded down.
    }

    function divWadUp(uint256 x, uint256 y) internal pure returns (uint256) {
        return mulDivUp(x, WAD, y); // Equivalent to (x * WAD) / y rounded up.
    }

    /*//////////////////////////////////////////////////////////////
                    LOW LEVEL FIXED POINT OPERATIONS
    //////////////////////////////////////////////////////////////*/

    function mulDivDown(
        uint256 x,
        uint256 y,
        uint256 denominator
    ) internal pure returns (uint256 z) {
        /// @solidity memory-safe-assembly
        assembly {
            // Equivalent to require(denominator != 0 && (y == 0 || x <= type(uint256).max / y))
            if iszero(mul(denominator, iszero(mul(y, gt(x, div(MAX_UINT256, y)))))) {
                revert(0, 0)
            }

            // Divide x * y by the denominator.
            z := div(mul(x, y), denominator)
        }
    }

    function mulDivUp(
        uint256 x,
        uint256 y,
        uint256 denominator
    ) internal pure returns (uint256 z) {
        /// @solidity memory-safe-assembly
        assembly {
            // Equivalent to require(denominator != 0 && (y == 0 || x <= type(uint256).max / y))
            if iszero(mul(denominator, iszero(mul(y, gt(x, div(MAX_UINT256, y)))))) {
                revert(0, 0)
            }

            // If x * y modulo the denominator is strictly greater than 0,
            // 1 is added to round up the division of x * y by the denominator.
            z := add(gt(mod(mul(x, y), denominator), 0), div(mul(x, y), denominator))
        }
    }

    function rpow(
        uint256 x,
        uint256 n,
        uint256 scalar
    ) internal pure returns (uint256 z) {
        /// @solidity memory-safe-assembly
        assembly {
            switch x
            case 0 {
                switch n
                case 0 {
                    // 0 ** 0 = 1
                    z := scalar
                }
                default {
                    // 0 ** n = 0
                    z := 0
                }
            }
            default {
                switch mod(n, 2)
                case 0 {
                    // If n is even, store scalar in z for now.
                    z := scalar
                }
                default {
                    // If n is odd, store x in z for now.
                    z := x
                }

                // Shifting right by 1 is like dividing by 2.
                let half := shr(1, scalar)

                for {
                    // Shift n right by 1 before looping to halve it.
                    n := shr(1, n)
                } n {
                    // Shift n right by 1 each iteration to halve it.
                    n := shr(1, n)
                } {
                    // Revert immediately if x ** 2 would overflow.
                    // Equivalent to iszero(eq(div(xx, x), x)) here.
                    if shr(128, x) {
                        revert(0, 0)
                    }

                    // Store x squared.
                    let xx := mul(x, x)

                    // Round to the nearest number.
                    let xxRound := add(xx, half)

                    // Revert if xx + half overflowed.
                    if lt(xxRound, xx) {
                        revert(0, 0)
                    }

                    // Set x to scaled xxRound.
                    x := div(xxRound, scalar)

                    // If n is even:
                    if mod(n, 2) {
                        // Compute z * x.
                        let zx := mul(z, x)

                        // If z * x overflowed:
                        if iszero(eq(div(zx, x), z)) {
                            // Revert if x is non-zero.
                            if iszero(iszero(x)) {
                                revert(0, 0)
                            }
                        }

                        // Round to the nearest number.
                        let zxRound := add(zx, half)

                        // Revert if zx + half overflowed.
                        if lt(zxRound, zx) {
                            revert(0, 0)
                        }

                        // Return properly scaled zxRound.
                        z := div(zxRound, scalar)
                    }
                }
            }
        }
    }

    /*//////////////////////////////////////////////////////////////
                        GENERAL NUMBER UTILITIES
    //////////////////////////////////////////////////////////////*/

    function sqrt(uint256 x) internal pure returns (uint256 z) {
        /// @solidity memory-safe-assembly
        assembly {
            let y := x // We start y at x, which will help us make our initial estimate.

            z := 181 // The "correct" value is 1, but this saves a multiplication later.

            // This segment is to get a reasonable initial estimate for the Babylonian method. With a bad
            // start, the correct # of bits increases ~linearly each iteration instead of ~quadratically.

            // We check y >= 2^(k + 8) but shift right by k bits
            // each branch to ensure that if x >= 256, then y >= 256.
            if iszero(lt(y, 0x10000000000000000000000000000000000)) {
                y := shr(128, y)
                z := shl(64, z)
            }
            if iszero(lt(y, 0x1000000000000000000)) {
                y := shr(64, y)
                z := shl(32, z)
            }
            if iszero(lt(y, 0x10000000000)) {
                y := shr(32, y)
                z := shl(16, z)
            }
            if iszero(lt(y, 0x1000000)) {
                y := shr(16, y)
                z := shl(8, z)
            }

            // Goal was to get z*z*y within a small factor of x. More iterations could
            // get y in a tighter range. Currently, we will have y in [256, 256*2^16).
            // We ensured y >= 256 so that the relative difference between y and y+1 is small.
            // That's not possible if x < 256 but we can just verify those cases exhaustively.

            // Now, z*z*y <= x < z*z*(y+1), and y <= 2^(16+8), and either y >= 256, or x < 256.
            // Correctness can be checked exhaustively for x < 256, so we assume y >= 256.
            // Then z*sqrt(y) is within sqrt(257)/sqrt(256) of sqrt(x), or about 20bps.

            // For s in the range [1/256, 256], the estimate f(s) = (181/1024) * (s+1) is in the range
            // (1/2.84 * sqrt(s), 2.84 * sqrt(s)), with largest error when s = 1 and when s = 256 or 1/256.

            // Since y is in [256, 256*2^16), let a = y/65536, so that a is in [1/256, 256). Then we can estimate
            // sqrt(y) using sqrt(65536) * 181/1024 * (a + 1) = 181/4 * (y + 65536)/65536 = 181 * (y + 65536)/2^18.

            // There is no overflow risk here since y < 2^136 after the first branch above.
            z := shr(18, mul(z, add(y, 65536))) // A mul() is saved from starting z at 181.

            // Given the worst case multiplicative error of 2.84 above, 7 iterations should be enough.
            z := shr(1, add(z, div(x, z)))
            z := shr(1, add(z, div(x, z)))
            z := shr(1, add(z, div(x, z)))
            z := shr(1, add(z, div(x, z)))
            z := shr(1, add(z, div(x, z)))
            z := shr(1, add(z, div(x, z)))
            z := shr(1, add(z, div(x, z)))

            // If x+1 is a perfect square, the Babylonian method cycles between
            // floor(sqrt(x)) and ceil(sqrt(x)). This statement ensures we return floor.
            // See: https://en.wikipedia.org/wiki/Integer_square_root#Using_only_integer_division
            // Since the ceil is rare, we save gas on the assignment and repeat division in the rare case.
            // If you don't care whether the floor or ceil square root is returned, you can remove this statement.
            z := sub(z, lt(div(x, z), z))
        }
    }

    function unsafeMod(uint256 x, uint256 y) internal pure returns (uint256 z) {
        /// @solidity memory-safe-assembly
        assembly {
            // Mod x by y. Note this will return
            // 0 instead of reverting if y is zero.
            z := mod(x, y)
        }
    }

    function unsafeDiv(uint256 x, uint256 y) internal pure returns (uint256 r) {
        /// @solidity memory-safe-assembly
        assembly {
            // Divide x by y. Note this will return
            // 0 instead of reverting if y is zero.
            r := div(x, y)
        }
    }

    function unsafeDivUp(uint256 x, uint256 y) internal pure returns (uint256 z) {
        /// @solidity memory-safe-assembly
        assembly {
            // Add 1 to x * y if x % y > 0. Note this will
            // return 0 instead of reverting if y is zero.
            z := add(gt(mod(x, y), 0), div(x, y))
        }
    }
}

// src/StakingConstants.sol

/// @notice Contract for shared values between Staking.sol and FeeRecipient.sol.
abstract contract StakingConstants {
    /// @notice Denominator for calculating performance fees, i.e. a `performanceFee` of 10_000 represents 100%.
    uint256 public constant FEE_BASIS = 10_000;
}

// src/interfaces/IStaking.sol

interface IStaking {
    struct DepositData {
        bytes pubkey;
        bytes signature;
        bytes32 deposit_data_root;
    }

    event UserRegistered(address indexed user, address indexed feeRecipient);
    event Deposit(address indexed from, address indexed user, uint256 validators);
    event Staked(address indexed user, bytes[] pubkeys);
    event Refund(address indexed user, uint256 validators);
    event OneTimeFeeSet(uint256);
    event PerformanceFeeSet(uint256);
    event NewTreasury(address indexed oldTreasury, address indexed newTreasury);
    event RefundDelaySet(uint256);

    function depositContract() external view returns (address);

    function treasury() external view returns (address);

    function oneTimeFee() external view returns (uint256);

    function performanceFee() external view returns (uint256);

    function registry(address) external view returns (address);

    function pendingValidators(address) external view returns (uint256);

    function deposit(address user) external payable;
}

// src/lib/SafeTransferLib.sol

/// @notice Gas-efficient safe ETH transfer library that gracefully handles missing return values.
/// @author Copied from Solmate with ERC20 code removed.
/// @author https://github.com/transmissions11/solmate/blob/main/src/utils/SafeTransferLib.sol
library SafeTransferLib {
    /*//////////////////////////////////////////////////////////////
                             ETH OPERATIONS
    //////////////////////////////////////////////////////////////*/

    function safeTransferETH(address to, uint256 amount) internal {
        bool success;

        /// @solidity memory-safe-assembly
        assembly {
            // Transfer the ETH and store if it succeeded or not.
            success := call(gas(), to, amount, 0, 0, 0, 0)
        }

        require(success, "ETH_TRANSFER_FAILED");
    }
}

// src/FeeRecipient.sol

/**
 * @notice Contract set as the `fee_recipient` for all validators belonging to a user. Receives execution layer rewards
 * from block production gas tips and MEV bribes which users can claim via `claimRewards()` function.
 */
contract FeeRecipient is StakingConstants {
    using FixedPointMathLib for uint256;

    IStaking public immutable staking;
    address public immutable user;

    /// @dev Unclaimed rewards that fully belong to user.
    uint256 internal _userRewards;

    event ClaimRewards(uint256 amount);
    event TreasuryClaim(uint256 amount);

    error Unauthorized();
    error NothingToClaim();

    constructor(address user_) {
        staking = IStaking(payable(msg.sender));
        user = user_;
    }

    /// @dev To receive MEV bribes directly transferred to `fee_recipient`.
    receive() external payable {}

    function unclaimedRewards() public view returns (uint256) {
        return address(this).balance - _calcToTreasury(address(this).balance - _userRewards);
    }

    function claimRewards() external onlyUser {
        if (unclaimedRewards() == 0) revert NothingToClaim();

        _treasuryClaim();

        emit ClaimRewards(address(this).balance);
        _userRewards = 0;

        SafeTransferLib.safeTransferETH(user, address(this).balance);
    }

    function treasuryClaim() external onlyTreasury {
        if (_calcToTreasury(address(this).balance - _userRewards) == 0) revert NothingToClaim();
        _treasuryClaim();
    }

    function _treasuryClaim() internal {
        uint256 share = address(this).balance - _userRewards;
        uint256 toTreasury = _calcToTreasury(share);
        if (toTreasury == 0) return; // Do nothing as treasury has nothing to claim.

        emit TreasuryClaim(toTreasury);
        _userRewards += share - toTreasury;

        SafeTransferLib.safeTransferETH(staking.treasury(), toTreasury);
    }

    function _calcToTreasury(uint256 amount_) internal view returns (uint256) {
        return amount_.mulDivDown(staking.performanceFee(), FEE_BASIS);
    }

    modifier onlyUser() {
        if (msg.sender != user) revert Unauthorized();
        _;
    }

    modifier onlyTreasury() {
        if (msg.sender != staking.treasury()) revert Unauthorized();
        _;
    }
}

Contract Security Audit

Contract ABI

[{"inputs":[{"internalType":"address","name":"user_","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"inputs":[],"name":"NothingToClaim","type":"error"},{"inputs":[],"name":"Unauthorized","type":"error"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"ClaimRewards","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"TreasuryClaim","type":"event"},{"inputs":[],"name":"FEE_BASIS","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"claimRewards","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"staking","outputs":[{"internalType":"contract IStaking","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"treasuryClaim","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"unclaimedRewards","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"user","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"stateMutability":"payable","type":"receive"}]

Deployed Bytecode

0x6080604052600436106100595760003560e01c8063372500ab146100655780634cf088d91461007c5780634f8632ba146100cd5780635475a7be146101015780638686ebcc14610116578063f85f91b41461013a57600080fd5b3661006057005b600080fd5b34801561007157600080fd5b5061007a61014f565b005b34801561008857600080fd5b506100b07f000000000000000000000000fb4022e94460ae7bd4d65ecd8214fbf57474049481565b6040516001600160a01b0390911681526020015b60405180910390f35b3480156100d957600080fd5b506100b07f000000000000000000000000b86cc87bd96fbe1b3ccfc47244da60c9689d341281565b34801561010d57600080fd5b5061007a61022a565b34801561012257600080fd5b5061012c61271081565b6040519081526020016100c4565b34801561014657600080fd5b5061012c61031a565b336001600160a01b037f000000000000000000000000b86cc87bd96fbe1b3ccfc47244da60c9689d34121614610197576040516282b42960e81b815260040160405180910390fd5b61019f61031a565b6000036101bf576040516312d37ee560e31b815260040160405180910390fd5b6101c761033c565b6040514781527fbacfa9662d479c707dae707c358323f0c7711ef382007957dc9935e629da36b29060200160405180910390a1600080556102287f000000000000000000000000b86cc87bd96fbe1b3ccfc47244da60c9689d341247610448565b565b7f000000000000000000000000fb4022e94460ae7bd4d65ecd8214fbf5747404946001600160a01b03166361d027b36040518163ffffffff1660e01b8152600401602060405180830381865afa158015610288573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906102ac9190610557565b6001600160a01b0316336001600160a01b0316146102dc576040516282b42960e81b815260040160405180910390fd5b6102f2600054476102ed919061059d565b6104a2565b600003610312576040516312d37ee560e31b815260040160405180910390fd5b61022861033c565b600061032d600054476102ed919061059d565b610337904761059d565b905090565b6000805461034a904761059d565b90506000610357826104a2565b905080600003610365575050565b6040518181527fb9197c6b8e21274bd1e2d9c956a88af5cfee510f630fab3f046300f88b4223619060200160405180910390a16103a2818361059d565b6000808282546103b291906105b4565b925050819055506104447f000000000000000000000000fb4022e94460ae7bd4d65ecd8214fbf5747404946001600160a01b03166361d027b36040518163ffffffff1660e01b8152600401602060405180830381865afa15801561041a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061043e9190610557565b82610448565b5050565b600080600080600085875af190508061049d5760405162461bcd60e51b815260206004820152601360248201527211551217d514905394d1915497d19052531151606a1b604482015260640160405180910390fd5b505050565b60006105337f000000000000000000000000fb4022e94460ae7bd4d65ecd8214fbf5747404946001600160a01b031663877887826040518163ffffffff1660e01b8152600401602060405180830381865afa158015610505573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061052991906105cc565b8390612710610539565b92915050565b600082600019048411830215820261055057600080fd5b5091020490565b60006020828403121561056957600080fd5b81516001600160a01b038116811461058057600080fd5b9392505050565b634e487b7160e01b600052601160045260246000fd5b6000828210156105af576105af610587565b500390565b600082198211156105c7576105c7610587565b500190565b6000602082840312156105de57600080fd5b505191905056fea2646970667358221220cf8c68186eb03b0415c4e1a451bafa8213a95358dfe1202ce8aa3ce23100036364736f6c634300080d0033

Deployed Bytecode Sourcemap

12920:2103:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;13730:295;;;;;;;;;;;;;:::i;:::-;;13013:33;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;194:32:1;;;176:51;;164:2;149:18;13013:33:0;;;;;;;;13053:29;;;;;;;;;;;;;;;14033:180;;;;;;;;;;;;;:::i;10638:42::-;;;;;;;;;;;;10674:6;10638:42;;;;;592:25:1;;;580:2;565:18;10638:42:0;446:177:1;13561:161:0;;;;;;;;;;;;;:::i;13730:295::-;14837:10;-1:-1:-1;;;;;14851:4:0;14837:18;;14833:45;;14864:14;;-1:-1:-1;;;14864:14:0;;;;;;;;;;;14833:45;13787:18:::1;:16;:18::i;:::-;13809:1;13787:23:::0;13783:52:::1;;13819:16;;-1:-1:-1::0;;;13819:16:0::1;;;;;;;;;;;13783:52;13848:16;:14;:16::i;:::-;13882:35;::::0;13895:21:::1;592:25:1::0;;13882:35:0::1;::::0;580:2:1;565:18;13882:35:0::1;;;;;;;13943:1;13928:16:::0;;13957:60:::1;13989:4;13995:21;13957:31;:60::i;:::-;13730:295::o:0;14033:180::-;14959:7;-1:-1:-1;;;;;14959:16:0;;:18;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;14945:32:0;:10;-1:-1:-1;;;;;14945:32:0;;14941:59;;14986:14;;-1:-1:-1;;;14986:14:0;;;;;;;;;;;14941:59;14095:53:::1;14135:12;;14111:21;:36;;;;:::i;:::-;14095:15;:53::i;:::-;14152:1;14095:58:::0;14091:87:::1;;14162:16;;-1:-1:-1::0;;;14162:16:0::1;;;;;;;;;;;14091:87;14189:16;:14;:16::i;13561:161::-:0;13610:7;13661:53;13701:12;;13677:21;:36;;;;:::i;13661:53::-;13637:77;;:21;:77;:::i;:::-;13630:84;;13561:161;:::o;14221:410::-;14267:13;14307:12;;14283:36;;:21;:36;:::i;:::-;14267:52;;14330:18;14351:22;14367:5;14351:15;:22::i;:::-;14330:43;;14388:10;14402:1;14388:15;14384:28;;14405:7;;14221:410::o;14384:28::-;14477:25;;592::1;;;14477::0;;580:2:1;565:18;14477:25:0;;;;;;;14529:18;14537:10;14529:5;:18;:::i;:::-;14513:12;;:34;;;;;;;:::i;:::-;;;;;;;;14560:63;14592:7;-1:-1:-1;;;;;14592:16:0;;:18;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;14612:10;14560:31;:63::i;:::-;14256:375;;14221:410::o;12303:349::-;12376:12;12580:1;12577;12574;12571;12563:6;12559:2;12552:5;12547:35;12536:46;;12613:7;12605:39;;;;-1:-1:-1;;;12605:39:0;;1520:2:1;12605:39:0;;;1502:21:1;1559:2;1539:18;;;1532:30;-1:-1:-1;;;1578:18:1;;;1571:49;1637:18;;12605:39:0;;;;;;;;12365:287;12303:349;;:::o;14639:155::-;14704:7;14731:55;14750:7;-1:-1:-1;;;;;14750:22:0;;:24;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;14731:7;;10674:6;14731:18;:55::i;:::-;14724:62;14639:155;-1:-1:-1;;14639:155:0:o;1657:541::-;1777:9;2029:1;-1:-1:-1;;2012:19:0;2009:1;2006:26;2003:1;1999:34;1992:42;1979:11;1975:60;1965:118;;2066:1;2063;2056:12;1965:118;-1:-1:-1;2157:9:0;;2153:27;;1657:541::o;628:290:1:-;698:6;751:2;739:9;730:7;726:23;722:32;719:52;;;767:1;764;757:12;719:52;793:16;;-1:-1:-1;;;;;838:31:1;;828:42;;818:70;;884:1;881;874:12;818:70;907:5;628:290;-1:-1:-1;;;628:290:1:o;923:127::-;984:10;979:3;975:20;972:1;965:31;1015:4;1012:1;1005:15;1039:4;1036:1;1029:15;1055:125;1095:4;1123:1;1120;1117:8;1114:34;;;1128:18;;:::i;:::-;-1:-1:-1;1165:9:1;;1055:125::o;1185:128::-;1225:3;1256:1;1252:6;1249:1;1246:13;1243:39;;;1262:18;;:::i;:::-;-1:-1:-1;1298:9:1;;1185:128::o;1666:184::-;1736:6;1789:2;1777:9;1768:7;1764:23;1760:32;1757:52;;;1805:1;1802;1795:12;1757:52;-1:-1:-1;1828:16:1;;1666:184;-1:-1:-1;1666:184:1:o

Swarm Source

ipfs://cf8c68186eb03b0415c4e1a451bafa8213a95358dfe1202ce8aa3ce231000363

 Latest 1 block produced

Block Transaction Difficulty Gas Used Reward
194017312024-03-10 2:31:47266 days ago17100379072000.00 TH26,351,609 (87.84%)
0.030778938469232674 ETH

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