MON Price: $0.021819 (-1.57%)

Contract

0xe5e5bE029793A4481287Be2BFc37e2D38316c422

Overview

MON Balance

Monad Chain LogoMonad Chain LogoMonad Chain Logo0 MON

MON Value

$0.00

More Info

Private Name Tags

Multichain Info

No addresses found
Transaction Hash
Method
Block
From
To

There are no matching entries

Please try again later

View more zero value Internal Transactions in Advanced View mode

Advanced mode:
Loading...
Loading

Contract Source Code Verified (Exact Match)

Contract Name:
ZAMM

Compiler Version
v0.8.30+commit.73712a01

Optimization Enabled:
Yes with 200 runs

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

/**
 * @title ZAMM - Simplified CPMM for PAMM prediction markets
 * @notice A minimal constant product AMM that supports ERC6909 tokens
 */
contract ZAMM {
    struct PoolKey {
        uint256 id0;
        uint256 id1;
        address token0;
        address token1;
        uint256 feeOrHook;
    }

    struct Pool {
        uint112 reserve0;
        uint112 reserve1;
        uint32 blockTimestampLast;
        uint256 price0CumulativeLast;
        uint256 price1CumulativeLast;
        uint256 kLast;
        uint256 supply;
    }

    mapping(uint256 => Pool) public pools;
    mapping(uint256 => mapping(address => uint256)) public liquidityOf;

    // Transient balance storage for atomic operations
    mapping(address => mapping(uint256 => uint256)) private _transientBalances;
    mapping(address => mapping(uint256 => address)) private _transientFrom;

    event Mint(uint256 indexed poolId, address indexed to, uint256 liquidity);
    event Burn(uint256 indexed poolId, address indexed to, uint256 amount0, uint256 amount1);
    event Swap(uint256 indexed poolId, address indexed to, uint256 amountIn, uint256 amountOut, bool zeroForOne);

    error InsufficientLiquidity();
    error InsufficientInput();
    error InvalidPool();
    error Expired();
    error InsufficientAmount();
    error TransferFailed();

    function getPoolId(PoolKey calldata key) public pure returns (uint256) {
        return uint256(keccak256(abi.encode(key.id0, key.id1, key.token0, key.token1, key.feeOrHook)));
    }

    function deposit(address token, uint256 id, uint256 amount) external payable {
        // Transfer tokens from caller to this contract
        IERC6909(token).transferFrom(msg.sender, address(this), id, amount);

        // Store in transient balance
        _transientBalances[token][id] += amount;
        _transientFrom[token][id] = msg.sender;
    }

    function recoverTransientBalance(address token, uint256 id, address to) external returns (uint256 amount) {
        amount = _transientBalances[token][id];
        if (amount > 0) {
            _transientBalances[token][id] = 0;
            IERC6909(token).transfer(to, id, amount);
        }
    }

    function addLiquidity(
        PoolKey calldata poolKey,
        uint256 amount0Desired,
        uint256 amount1Desired,
        uint256 amount0Min,
        uint256 amount1Min,
        address to,
        uint256 deadline
    ) external payable returns (uint256 amount0, uint256 amount1, uint256 liquidity) {
        require(block.timestamp <= deadline, Expired());

        uint256 poolId = getPoolId(poolKey);
        Pool storage pool = pools[poolId];

        // Consume from transient balances
        uint256 bal0 = _transientBalances[poolKey.token0][poolKey.id0];
        uint256 bal1 = _transientBalances[poolKey.token1][poolKey.id1];

        require(bal0 >= amount0Desired && bal1 >= amount1Desired, InsufficientAmount());

        if (pool.supply == 0) {
            // First liquidity provision
            amount0 = amount0Desired;
            amount1 = amount1Desired;
            liquidity = _sqrt(amount0 * amount1);
            require(liquidity > 0, InsufficientLiquidity());
        } else {
            // Calculate optimal amounts
            uint256 optimal1 = (amount0Desired * pool.reserve1) / pool.reserve0;
            if (optimal1 <= amount1Desired) {
                require(optimal1 >= amount1Min, InsufficientAmount());
                amount0 = amount0Desired;
                amount1 = optimal1;
            } else {
                uint256 optimal0 = (amount1Desired * pool.reserve0) / pool.reserve1;
                require(optimal0 <= amount0Desired && optimal0 >= amount0Min, InsufficientAmount());
                amount0 = optimal0;
                amount1 = amount1Desired;
            }
            liquidity = _min(
                (amount0 * pool.supply) / pool.reserve0,
                (amount1 * pool.supply) / pool.reserve1
            );
        }

        // Consume transient balances
        _transientBalances[poolKey.token0][poolKey.id0] = bal0 - amount0;
        _transientBalances[poolKey.token1][poolKey.id1] = bal1 - amount1;

        // Update pool state
        pool.reserve0 = uint112(uint256(pool.reserve0) + amount0);
        pool.reserve1 = uint112(uint256(pool.reserve1) + amount1);
        pool.supply += liquidity;
        pool.kLast = uint256(pool.reserve0) * uint256(pool.reserve1);
        pool.blockTimestampLast = uint32(block.timestamp);

        liquidityOf[poolId][to] += liquidity;

        emit Mint(poolId, to, liquidity);
    }

    function swapExactOut(
        PoolKey calldata poolKey,
        uint256 amountOut,
        uint256 amountInMax,
        bool zeroForOne,
        address to,
        uint256 deadline
    ) external payable returns (uint256 amountIn) {
        require(block.timestamp <= deadline, Expired());

        uint256 poolId = getPoolId(poolKey);
        Pool storage pool = pools[poolId];

        require(pool.supply > 0, InvalidPool());

        uint256 reserveIn;
        uint256 reserveOut;
        uint256 idIn;
        uint256 idOut;
        address tokenIn;
        address tokenOut;

        if (zeroForOne) {
            reserveIn = pool.reserve0;
            reserveOut = pool.reserve1;
            idIn = poolKey.id0;
            idOut = poolKey.id1;
            tokenIn = poolKey.token0;
            tokenOut = poolKey.token1;
        } else {
            reserveIn = pool.reserve1;
            reserveOut = pool.reserve0;
            idIn = poolKey.id1;
            idOut = poolKey.id0;
            tokenIn = poolKey.token1;
            tokenOut = poolKey.token0;
        }

        require(amountOut < reserveOut, InsufficientLiquidity());

        // Calculate amountIn with fee
        uint256 feeBps = poolKey.feeOrHook;
        uint256 numerator = reserveIn * amountOut * 10000;
        uint256 denominator = (reserveOut - amountOut) * (10000 - feeBps);
        amountIn = (numerator / denominator) + 1;

        require(amountIn <= amountInMax, InsufficientInput());

        // Consume from transient balance
        uint256 bal = _transientBalances[tokenIn][idIn];
        require(bal >= amountIn, InsufficientAmount());
        _transientBalances[tokenIn][idIn] = bal - amountIn;

        // Update reserves
        if (zeroForOne) {
            pool.reserve0 = uint112(reserveIn + amountIn);
            pool.reserve1 = uint112(reserveOut - amountOut);
        } else {
            pool.reserve1 = uint112(reserveIn + amountIn);
            pool.reserve0 = uint112(reserveOut - amountOut);
        }
        pool.kLast = uint256(pool.reserve0) * uint256(pool.reserve1);
        pool.blockTimestampLast = uint32(block.timestamp);

        // Transfer output
        IERC6909(tokenOut).transfer(to, idOut, amountOut);

        emit Swap(poolId, to, amountIn, amountOut, zeroForOne);
    }

    function _sqrt(uint256 y) internal pure returns (uint256 z) {
        if (y > 3) {
            z = y;
            uint256 x = y / 2 + 1;
            while (x < z) {
                z = x;
                x = (y / x + x) / 2;
            }
        } else if (y != 0) {
            z = 1;
        }
    }

    function _min(uint256 a, uint256 b) internal pure returns (uint256) {
        return a < b ? a : b;
    }
}

interface IERC6909 {
    function transfer(address receiver, uint256 id, uint256 amount) external returns (bool);
    function transferFrom(address sender, address receiver, uint256 id, uint256 amount) external returns (bool);
    function balanceOf(address owner, uint256 id) external view returns (uint256);
}

Settings
{
  "remappings": [
    "forge-std/=lib/forge-std/src/"
  ],
  "optimizer": {
    "enabled": true,
    "runs": 200
  },
  "metadata": {
    "useLiteralContent": false,
    "bytecodeHash": "none",
    "appendCBOR": false
  },
  "outputSelection": {
    "*": {
      "*": [
        "evm.bytecode",
        "evm.deployedBytecode",
        "abi"
      ]
    }
  },
  "evmVersion": "cancun",
  "viaIR": true
}

Contract Security Audit

Contract ABI

API
[{"inputs":[],"name":"Expired","type":"error"},{"inputs":[],"name":"InsufficientAmount","type":"error"},{"inputs":[],"name":"InsufficientInput","type":"error"},{"inputs":[],"name":"InsufficientLiquidity","type":"error"},{"inputs":[],"name":"InvalidPool","type":"error"},{"inputs":[],"name":"TransferFailed","type":"error"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint256","name":"poolId","type":"uint256"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount0","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"amount1","type":"uint256"}],"name":"Burn","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint256","name":"poolId","type":"uint256"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"liquidity","type":"uint256"}],"name":"Mint","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint256","name":"poolId","type":"uint256"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"amountIn","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"amountOut","type":"uint256"},{"indexed":false,"internalType":"bool","name":"zeroForOne","type":"bool"}],"name":"Swap","type":"event"},{"inputs":[{"components":[{"internalType":"uint256","name":"id0","type":"uint256"},{"internalType":"uint256","name":"id1","type":"uint256"},{"internalType":"address","name":"token0","type":"address"},{"internalType":"address","name":"token1","type":"address"},{"internalType":"uint256","name":"feeOrHook","type":"uint256"}],"internalType":"struct ZAMM.PoolKey","name":"poolKey","type":"tuple"},{"internalType":"uint256","name":"amount0Desired","type":"uint256"},{"internalType":"uint256","name":"amount1Desired","type":"uint256"},{"internalType":"uint256","name":"amount0Min","type":"uint256"},{"internalType":"uint256","name":"amount1Min","type":"uint256"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"deadline","type":"uint256"}],"name":"addLiquidity","outputs":[{"internalType":"uint256","name":"amount0","type":"uint256"},{"internalType":"uint256","name":"amount1","type":"uint256"},{"internalType":"uint256","name":"liquidity","type":"uint256"}],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"address","name":"token","type":"address"},{"internalType":"uint256","name":"id","type":"uint256"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"deposit","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"components":[{"internalType":"uint256","name":"id0","type":"uint256"},{"internalType":"uint256","name":"id1","type":"uint256"},{"internalType":"address","name":"token0","type":"address"},{"internalType":"address","name":"token1","type":"address"},{"internalType":"uint256","name":"feeOrHook","type":"uint256"}],"internalType":"struct ZAMM.PoolKey","name":"key","type":"tuple"}],"name":"getPoolId","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"pure","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"address","name":"","type":"address"}],"name":"liquidityOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"pools","outputs":[{"internalType":"uint112","name":"reserve0","type":"uint112"},{"internalType":"uint112","name":"reserve1","type":"uint112"},{"internalType":"uint32","name":"blockTimestampLast","type":"uint32"},{"internalType":"uint256","name":"price0CumulativeLast","type":"uint256"},{"internalType":"uint256","name":"price1CumulativeLast","type":"uint256"},{"internalType":"uint256","name":"kLast","type":"uint256"},{"internalType":"uint256","name":"supply","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"token","type":"address"},{"internalType":"uint256","name":"id","type":"uint256"},{"internalType":"address","name":"to","type":"address"}],"name":"recoverTransientBalance","outputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"components":[{"internalType":"uint256","name":"id0","type":"uint256"},{"internalType":"uint256","name":"id1","type":"uint256"},{"internalType":"address","name":"token0","type":"address"},{"internalType":"address","name":"token1","type":"address"},{"internalType":"uint256","name":"feeOrHook","type":"uint256"}],"internalType":"struct ZAMM.PoolKey","name":"poolKey","type":"tuple"},{"internalType":"uint256","name":"amountOut","type":"uint256"},{"internalType":"uint256","name":"amountInMax","type":"uint256"},{"internalType":"bool","name":"zeroForOne","type":"bool"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"deadline","type":"uint256"}],"name":"swapExactOut","outputs":[{"internalType":"uint256","name":"amountIn","type":"uint256"}],"stateMutability":"payable","type":"function"}]

60808060405234601557610b47908161001a8239f35b5f80fdfe6080806040526004361015610012575f80fd5b5f3560e01c9081630efe6a8b146108fe575080630f79fca5146108af57806338c3f8db146105c15780633b50aaf21461059e578063a647fc2a1461049c578063ac4afa38146104245763c42957a814610069575f80fd5b366003190161016081126104205760a01361042057610124356001600160a01b0381169060c4359060a4359083900361042057610144354211610411576100ae610ade565b90815f525f60205260405f209360018060a01b036100ca610a53565b165f52600260205260405f209260043593845f5260205260405f20549560018060a01b036100f6610a3d565b165f52600260205260405f209060243591825f5260205260405f2054918589101580610407575b156103aa576004820190815480155f14610319575061013e87998098610a69565b975f60038a111561030a5750888060011c600181018091116102f657905b8a82106102d75750505b88156102c85787610269956101ae926101818d60609f610a7c565b906001600160a01b03610192610a53565b165f52600260205260405f20905f5260205260405f2055610a7c565b906001600160a01b036101bf610a3d565b165f52600260205260405f20905f5260205260405f20556001600160701b03806101ec8a82865416610a30565b16166001600160701b031983541617825561021f6001600160701b036102188882865460701c16610a30565b1683610aa7565b61022a878254610a30565b905561024681546001600160701b03808260701c169116610a69565b600382015580546001600160e01b03164260e01b6001600160e01b031916179055565b805f52600160205260405f20825f5260205260405f2061028a858254610a30565b90557f4e3883c75cc9c752bb1db2e406a822e4a75067ae77ad9a0a4d179f2709b9e1f66020604051868152a360405192835260208301526040820152f35b63bb55fd2760e01b5f5260045ffd5b9099506102ed8a6102e88184610a89565b610a30565b60011c9061015c565b634e487b7160e01b5f52601160045260245ffd5b98156101665760019850610166565b9399979683546001600160701b038160701c169161034b6001600160701b036103428584610a69565b93168093610a89565b9b808d116103b95750610104358c106103aa579b8c9b9961018160609e610269996103936101ae978f9761038c610387915b6103878688610a69565b610a89565b9389610a69565b808210156103a357505b9d610a7c565b905061039d565b632ca2f52b60e11b5f5260045ffd5b9b506103c983610387848f610a69565b90811115806103fb575b156103aa579b8c9b9961018160609e610269996103936101ae978f9761038c6103879161037d565b5060e4358110156103d3565b508783101561011d565b630407b05b60e31b5f5260045ffd5b5f80fd5b34610420576020366003190112610420576004355f525f60205260e060405f2080549060018101549060028101546004600383015492015492604051946001600160701b03811686526001600160701b038160701c166020870152861c60408601526060850152608084015260a083015260c0820152f35b34610420576060366003190112610420576104b56109cc565b60243590604435906001600160a01b03821682036104205760018060a01b031691825f52600260205260405f20815f5260205260405f205491826104ff575b602083604051908152f35b5f8481526002602090815260408083208584528252808320839055516304ade6db60e11b81526001600160a01b03939093166004840152602483019390935260448201849052909384916064918391905af191821561059357602092610566575b806104f4565b61058590833d851161058c575b61057d81836109e2565b810190610a18565b5082610560565b503d610573565b6040513d5f823e3d90fd5b346104205760a03660031901126104205760206105b9610ade565b604051908152f35b366003190161014081126104205760a0136104205760a43560e43590811515918281036104205761010435916001600160a01b038316918284036104205761012435421161041157610611610ade565b91825f525f60205260405f20916004830154156108a157801561086f5782546001600160701b038082169160701c16936004359060243590610651610a53565b9961065a610a3d565b935b888810156102c85761066e8887610a69565b61271081029080820461271014901517156102f65761068d898b610a7c565b90608435612710039161271083116102f6576106b2926106ac91610a69565b90610a89565b9b60018d01809d116102f65760c4358d116108605760018060a01b031692835f52600260205260405f20825f5260205260405f2054998d8b106103aa57898e819960209b5f986107ac9f9761070a856107719a610a7c565b918b5260028f5260408b20908b528e5260408a205588146108225791610757936001600160701b0380610741610750958297610a30565b16168419875416178655610a7c565b1682610aa7565b61024681546001600160701b03808260701c169116610a69565b6040516304ade6db60e11b81526001600160a01b03909116600482015260248101929092526044820193909352948592839182906064820190565b03926001600160a01b03165af1908115610593576020967fdace89c50ea322ac562ed27e157745225c0f0601f5f48a21e14d21fb5737fa0793606093610807575b5060405191878352888301526040820152a3604051908152f35b61081d90893d8b1161058c5761057d81836109e2565b6107ed565b916001600160701b03936108458561083e61084a958297610a30565b1687610aa7565b610a7c565b16166001600160701b0319825416178155610757565b63f8b3bb6160e01b5f5260045ffd5b82546001600160701b03808260701c169116936024359060043590610892610a3d565b9961089b610a53565b9361065c565b62820f3560e61b5f5260045ffd5b34610420576040366003190112610420576024356001600160a01b0381168103610420576004355f52600160205260405f209060018060a01b03165f52602052602060405f2054604051908152f35b6060366003190112610420576109126109cc565b90602435916044359060018060a01b031691637f4c824d60e11b81523360048201523060248201528360448201528160648201526020816084815f875af18015610593576109af575b50815f52600260205260405f20835f5260205261097d60405f20918254610a30565b90555f52600360205260405f20905f5260205260405f20336bffffffffffffffffffffffff60a01b8254161790555f80f35b6109c79060203d60201161058c5761057d81836109e2565b61095b565b600435906001600160a01b038216820361042057565b90601f8019910116810190811067ffffffffffffffff821117610a0457604052565b634e487b7160e01b5f52604160045260245ffd5b90816020910312610420575180151581036104205790565b919082018092116102f657565b6064356001600160a01b03811681036104205790565b6044356001600160a01b03811681036104205790565b818102929181159184041417156102f657565b919082039182116102f657565b8115610a93570490565b634e487b7160e01b5f52601260045260245ffd5b80546dffffffffffffffffffffffffffff60701b191660709290921b6dffffffffffffffffffffffffffff60701b16919091179055565b6044356001600160a01b0381169081810361042057506064356001600160a01b038116908181036104205750604051906020820192600435845260243560408401526060830152608082015260843560a082015260a08152610b4160c0826109e2565b5190209056

Deployed Bytecode

0x6080806040526004361015610012575f80fd5b5f3560e01c9081630efe6a8b146108fe575080630f79fca5146108af57806338c3f8db146105c15780633b50aaf21461059e578063a647fc2a1461049c578063ac4afa38146104245763c42957a814610069575f80fd5b366003190161016081126104205760a01361042057610124356001600160a01b0381169060c4359060a4359083900361042057610144354211610411576100ae610ade565b90815f525f60205260405f209360018060a01b036100ca610a53565b165f52600260205260405f209260043593845f5260205260405f20549560018060a01b036100f6610a3d565b165f52600260205260405f209060243591825f5260205260405f2054918589101580610407575b156103aa576004820190815480155f14610319575061013e87998098610a69565b975f60038a111561030a5750888060011c600181018091116102f657905b8a82106102d75750505b88156102c85787610269956101ae926101818d60609f610a7c565b906001600160a01b03610192610a53565b165f52600260205260405f20905f5260205260405f2055610a7c565b906001600160a01b036101bf610a3d565b165f52600260205260405f20905f5260205260405f20556001600160701b03806101ec8a82865416610a30565b16166001600160701b031983541617825561021f6001600160701b036102188882865460701c16610a30565b1683610aa7565b61022a878254610a30565b905561024681546001600160701b03808260701c169116610a69565b600382015580546001600160e01b03164260e01b6001600160e01b031916179055565b805f52600160205260405f20825f5260205260405f2061028a858254610a30565b90557f4e3883c75cc9c752bb1db2e406a822e4a75067ae77ad9a0a4d179f2709b9e1f66020604051868152a360405192835260208301526040820152f35b63bb55fd2760e01b5f5260045ffd5b9099506102ed8a6102e88184610a89565b610a30565b60011c9061015c565b634e487b7160e01b5f52601160045260245ffd5b98156101665760019850610166565b9399979683546001600160701b038160701c169161034b6001600160701b036103428584610a69565b93168093610a89565b9b808d116103b95750610104358c106103aa579b8c9b9961018160609e610269996103936101ae978f9761038c610387915b6103878688610a69565b610a89565b9389610a69565b808210156103a357505b9d610a7c565b905061039d565b632ca2f52b60e11b5f5260045ffd5b9b506103c983610387848f610a69565b90811115806103fb575b156103aa579b8c9b9961018160609e610269996103936101ae978f9761038c6103879161037d565b5060e4358110156103d3565b508783101561011d565b630407b05b60e31b5f5260045ffd5b5f80fd5b34610420576020366003190112610420576004355f525f60205260e060405f2080549060018101549060028101546004600383015492015492604051946001600160701b03811686526001600160701b038160701c166020870152861c60408601526060850152608084015260a083015260c0820152f35b34610420576060366003190112610420576104b56109cc565b60243590604435906001600160a01b03821682036104205760018060a01b031691825f52600260205260405f20815f5260205260405f205491826104ff575b602083604051908152f35b5f8481526002602090815260408083208584528252808320839055516304ade6db60e11b81526001600160a01b03939093166004840152602483019390935260448201849052909384916064918391905af191821561059357602092610566575b806104f4565b61058590833d851161058c575b61057d81836109e2565b810190610a18565b5082610560565b503d610573565b6040513d5f823e3d90fd5b346104205760a03660031901126104205760206105b9610ade565b604051908152f35b366003190161014081126104205760a0136104205760a43560e43590811515918281036104205761010435916001600160a01b038316918284036104205761012435421161041157610611610ade565b91825f525f60205260405f20916004830154156108a157801561086f5782546001600160701b038082169160701c16936004359060243590610651610a53565b9961065a610a3d565b935b888810156102c85761066e8887610a69565b61271081029080820461271014901517156102f65761068d898b610a7c565b90608435612710039161271083116102f6576106b2926106ac91610a69565b90610a89565b9b60018d01809d116102f65760c4358d116108605760018060a01b031692835f52600260205260405f20825f5260205260405f2054998d8b106103aa57898e819960209b5f986107ac9f9761070a856107719a610a7c565b918b5260028f5260408b20908b528e5260408a205588146108225791610757936001600160701b0380610741610750958297610a30565b16168419875416178655610a7c565b1682610aa7565b61024681546001600160701b03808260701c169116610a69565b6040516304ade6db60e11b81526001600160a01b03909116600482015260248101929092526044820193909352948592839182906064820190565b03926001600160a01b03165af1908115610593576020967fdace89c50ea322ac562ed27e157745225c0f0601f5f48a21e14d21fb5737fa0793606093610807575b5060405191878352888301526040820152a3604051908152f35b61081d90893d8b1161058c5761057d81836109e2565b6107ed565b916001600160701b03936108458561083e61084a958297610a30565b1687610aa7565b610a7c565b16166001600160701b0319825416178155610757565b63f8b3bb6160e01b5f5260045ffd5b82546001600160701b03808260701c169116936024359060043590610892610a3d565b9961089b610a53565b9361065c565b62820f3560e61b5f5260045ffd5b34610420576040366003190112610420576024356001600160a01b0381168103610420576004355f52600160205260405f209060018060a01b03165f52602052602060405f2054604051908152f35b6060366003190112610420576109126109cc565b90602435916044359060018060a01b031691637f4c824d60e11b81523360048201523060248201528360448201528160648201526020816084815f875af18015610593576109af575b50815f52600260205260405f20835f5260205261097d60405f20918254610a30565b90555f52600360205260405f20905f5260205260405f20336bffffffffffffffffffffffff60a01b8254161790555f80f35b6109c79060203d60201161058c5761057d81836109e2565b61095b565b600435906001600160a01b038216820361042057565b90601f8019910116810190811067ffffffffffffffff821117610a0457604052565b634e487b7160e01b5f52604160045260245ffd5b90816020910312610420575180151581036104205790565b919082018092116102f657565b6064356001600160a01b03811681036104205790565b6044356001600160a01b03811681036104205790565b818102929181159184041417156102f657565b919082039182116102f657565b8115610a93570490565b634e487b7160e01b5f52601260045260245ffd5b80546dffffffffffffffffffffffffffff60701b191660709290921b6dffffffffffffffffffffffffffff60701b16919091179055565b6044356001600160a01b0381169081810361042057506064356001600160a01b038116908181036104205750604051906020820192600435845260243560408401526060830152608082015260843560a082015260a08152610b4160c0826109e2565b5190209056

Deployed Bytecode Sourcemap

198:7172:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;198:7172:0;;;;;;;-1:-1:-1;198:7172:0;;;;-1:-1:-1;;;;;198:7172:0;;;;;;;;;;;;;;;;2563:15;:27;198:7172;;2630:18;;:::i;:::-;198:7172;;;;;;;;;;;;;;;;2779:14;;:::i;:::-;198:7172;;;2760:18;198:7172;;;;;;;;;;;;;;;;;;;;;;;;2851:14;;:::i;:::-;198:7172;;;2760:18;198:7172;;;;;;2867:11;198:7172;;;;;;;;;;;2898:22;;;;;:48;;;198:7172;;;;;2984:11;;198:7172;;;2984:16;;2980:1052;2984:16;;;3057:24;3151:17;3057:24;3095;;3151:17;;:::i;:::-;3145:24;198:7172;7033:1;7029:5;;7033:1;;;7050:5;;198:7172;;;;;;;;;;;7104:89;7111:5;;;;;;7025:226;;;3133:36;3191:13;198:7172;;2980:1052;4496:49;2980:1052;4204:14;2980:1052;4130:14;2980:1052;2851:14;2980:1052;4130:14;:::i;:::-;198:7172;-1:-1:-1;;;;;4099:14:0;;:::i;:::-;198:7172;;;2760:18;198:7172;;;;;;;;;;;;;;4204:14;:::i;:::-;198:7172;-1:-1:-1;;;;;4173:14:0;;:::i;:::-;198:7172;;;2760:18;198:7172;;;;;;;;;;;;;;-1:-1:-1;;;;;198:7172:0;4282:32;198:7172;;;;;4282:32;:::i;:::-;198:7172;;-1:-1:-1;;;;;198:7172:0;;;;;;;4325:57;-1:-1:-1;;;;;4349:32:0;198:7172;;;;;;;4349:32;:::i;:::-;198:7172;4325:57;;:::i;:::-;4392:24;198:7172;;;4392:24;:::i;:::-;198:7172;;4439:47;198:7172;;-1:-1:-1;;;;;198:7172:0;;;;;;;4439:47;:::i;:::-;4426:10;;;198:7172;;;-1:-1:-1;;;;;198:7172:0;2563:15;198:7172;;-1:-1:-1;;;;;;198:7172:0;;;;;4496:49;198:7172;;;;;;;;;;-1:-1:-1;198:7172:0;;;;-1:-1:-1;198:7172:0;4556:36;198:7172;;;4556:36;:::i;:::-;198:7172;;4608:27;198:7172;;;;;;4608:27;198:7172;;;;;;;;;;;;;;;;;;;;;;;7104:89;7136:5;;;7164:9;7136:5;7164;;;;:::i;:::-;:9;:::i;:::-;198:7172;;7104:89;;;198:7172;;;;;;;;;2867:11;198:7172;;7025:226;7213:6;7209:42;7025:226;7209:42;198:7172;;-1:-1:-1;7025:226:0;;2980:1052;198:7172;;;;;;-1:-1:-1;;;;;198:7172:0;;;;3322:30;3321:48;-1:-1:-1;;;;;3322:30:0;;;;:::i;:::-;198:7172;;3321:48;;;:::i;:::-;3387:26;;;;;;198:7172;;;3441:22;;198:7172;;3546:18;;;3383:481;4130:14;2851;3383:481;4496:49;3383:481;3968:39;4204:14;3383:481;;;3911:39;3969:21;3383:481;;3912:21;;;;:::i;:::-;3911:39;:::i;:::-;3969:21;;;:::i;3968:39::-;7348:5;;;;;;:13;;2980:1052;4130:14;:::i;7348:13::-;;;;;198:7172;;;;;;;;;3383:481;3623:30;;3622:48;3623:30;;;;;:::i;3622:48::-;3696:26;;;;:52;;;3383:481;198:7172;;;3825:24;;;3383:481;4130:14;2851;3383:481;4496:49;3383:481;3968:39;4204:14;3383:481;;;3911:39;3969:21;3383:481;;;3696:52;198:7172;;;3726:22;;;3696:52;;2898:48;2924:22;;;;;2898:48;;198:7172;;;;;;;;;;;;;;;;;;;-1:-1:-1;;198:7172:0;;;;;;;;;;;;;;;;;598:37;198:7172;598:37;;198:7172;598:37;;;;198:7172;;598:37;;;198:7172;598:37;;198:7172;;;;;-1:-1:-1;;;;;198:7172:0;;;;-1:-1:-1;;;;;198:7172:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;198:7172:0;;;;;;:::i;:::-;;;;;;;-1:-1:-1;;;;;198:7172:0;;;;;;;;;;;;;;;;2059:18;198:7172;;;;;;;;;;;;;;2102:10;;2098:128;;198:7172;;;;;;;;;2098:128;198:7172;;;;2059:18;198:7172;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;2175:40:0;;-1:-1:-1;;;;;198:7172:0;;;;;2175:40;;198:7172;;;;;;;;;;;;;;;;;;;;;;;2175:40;;;;;;;198:7172;2175:40;;;2098:128;;;;2175:40;;;;;;;;;;;;;;:::i;:::-;;;;;:::i;:::-;;;;;;;;;;;198:7172;;;;;;;;;;;;;;;-1:-1:-1;;198:7172:0;;;;;;;:::i;:::-;;;;;;;;;-1:-1:-1;;198:7172:0;;;;;;;-1:-1:-1;198:7172:0;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;198:7172:0;;;;;;;;;;4899:15;:27;198:7172;;4966:18;;:::i;:::-;198:7172;;;;;;;;;;5046:11;198:7172;5046:11;;198:7172;5046:15;198:7172;;5240:486;;;;198:7172;;-1:-1:-1;;;;;198:7172:0;;;;;;;;;;;5389:11;198:7172;5424:14;;;:::i;:::-;5463;;;:::i;:::-;5240:486;;5744:22;;;198:7172;;;5906:21;;;;:::i;:::-;5930:5;198:7172;;;;;;5930:5;198:7172;;;;;;;5968:22;;;;:::i;:::-;198:7172;5859:17;198:7172;5930:5;198:7172;;5930:5;198:7172;;;;6032:23;5967:43;;;;:::i;:::-;6032:23;;:::i;:::-;198:7172;;;;;;;;;;;6079:23;;198:7172;;;;;;;;;;;;6191:18;198:7172;;;;;;;;;;;;;;6242:15;;;;198:7172;;6326:14;;;;198:7172;6326:14;198:7172;6326:14;6828:49;6326:14;;;;6741:49;6326:14;;:::i;:::-;198:7172;;;6191:18;198:7172;;;;;;;;;;;;;;6378:284;;;;6432:20;6467:47;6432:20;-1:-1:-1;;;;;6432:20:0;;6491:22;6432:20;;;;:::i;:::-;198:7172;;;;;;;;;;6491:22;:::i;:::-;198:7172;6467:47;;:::i;:::-;6684;198:7172;;-1:-1:-1;;;;;198:7172:0;;;;;;;6684:47;:::i;6741:49::-;198:7172;;-1:-1:-1;;;6828:49:0;;-1:-1:-1;;;;;198:7172:0;;;;6828:49;;198:7172;;;;;;;;;;;;;;;;;;;;;;;;;;;6828:49;;;-1:-1:-1;;;;;198:7172:0;6828:49;;;;;;;198:7172;6828:49;6893;6828;198:7172;6828:49;;;6378:284;198:7172;;;;;;;;;;;;;;;6893:49;198:7172;;;;;;6828:49;;;;;;;;;;;;;:::i;:::-;;;6378:284;6569:20;-1:-1:-1;;;;;6569:20:0;6545:45;6569:20;;6628:22;6569:20;;;;:::i;:::-;198:7172;6545:45;;:::i;:::-;6628:22;:::i;:::-;198:7172;;-1:-1:-1;;;;;198:7172:0;;;;;;;6378:284;;198:7172;;;;;;;;;5240:486;198:7172;;-1:-1:-1;;;;;198:7172:0;;;;;;;;5594:11;198:7172;;;;5662:14;;;:::i;:::-;5701;;;:::i;:::-;5240:486;;;198:7172;;;;;;;;;;;;;;;-1:-1:-1;;198:7172:0;;;;;;-1:-1:-1;;;;;198:7172:0;;;;;;;;;;;;;;;;641:66;198:7172;;;;;;-1:-1:-1;198:7172:0;;;;;-1:-1:-1;198:7172:0;;;;;;;;;;;-1:-1:-1;;198:7172:0;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;1718:67;;1747:10;198:7172;1718:67;;198:7172;1767:4;198:7172;;;;;;;;;;;;;;;1718:67;;;198:7172;1718:67;;;;;;;;;198:7172;;;;;1834:18;198:7172;;;;;;;;;;1834:39;198:7172;;;;;;1834:39;:::i;:::-;198:7172;;;;1883:14;198:7172;;;;;;;;;;;;;1747:10;198:7172;;;;;;;;;;;;1718:67;;;198:7172;1718:67;198:7172;1718:67;;;;;;;:::i;:::-;;;198:7172;;;;-1:-1:-1;;;;;198:7172:0;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;-1:-1:-1;198:7172:0;;;;;-1:-1:-1;198:7172:0;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;:::o;:::-;5662:14;198:7172;-1:-1:-1;;;;;198:7172:0;;;;;;;:::o;:::-;5701:14;198:7172;-1:-1:-1;;;;;198:7172:0;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;:::o;:::-;;;;;;;:::o;:::-;;;;;;;;;;;;;;;-1:-1:-1;;;;198:7172:0;;;;;;-1:-1:-1;;;198:7172:0;;;;;;;:::o;1387:182::-;1522:10;198:7172;-1:-1:-1;;;;;198:7172:0;;;;;;;;-1:-1:-1;1534:10:0;198:7172;-1:-1:-1;;;;;198:7172:0;;;;;;;;;1522:10;198:7172;1493:67;1513:7;1493:67;;198:7172;;;;;1513:7;198:7172;1522:10;198:7172;;;1534:10;198:7172;;;1546:13;198:7172;;;1546:13;198:7172;;;;;;1493:67;;;;;;:::i;:::-;198:7172;1483:78;;1387:182;:::o

Block Transaction 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

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.