ETH Price: $2,282.44 (-4.68%)

Contract

0x963ddBB35c1AE44e2a159E3b5fb5177E0B32660d

Overview

ETH Balance

0 ETH

ETH Value

$0.00

More Info

Private Name Tags

Multichain Info

No addresses found
Transaction Hash
Block
From
To

There are no matching entries

> 10 Internal Transactions found.

Latest 25 internal transactions (View All)

Parent Transaction Hash Block From To
720847572023-03-21 10:10:551049 days ago1679393455
0x963ddBB3...E0B32660d
0 ETH
720847572023-03-21 10:10:551049 days ago1679393455
0x963ddBB3...E0B32660d
0 ETH
720817952023-03-21 9:58:411049 days ago1679392721
0x963ddBB3...E0B32660d
0 ETH
720817952023-03-21 9:58:411049 days ago1679392721
0x963ddBB3...E0B32660d
0 ETH
720738092023-03-21 9:25:491049 days ago1679390749
0x963ddBB3...E0B32660d
0 ETH
720738092023-03-21 9:25:491049 days ago1679390749
0x963ddBB3...E0B32660d
0 ETH
720724772023-03-21 9:20:231049 days ago1679390423
0x963ddBB3...E0B32660d
0 ETH
720724772023-03-21 9:20:231049 days ago1679390423
0x963ddBB3...E0B32660d
0 ETH
720723352023-03-21 9:19:471049 days ago1679390387
0x963ddBB3...E0B32660d
0 ETH
720723352023-03-21 9:19:471049 days ago1679390387
0x963ddBB3...E0B32660d
0 ETH
720720562023-03-21 9:18:371049 days ago1679390317
0x963ddBB3...E0B32660d
0 ETH
720720562023-03-21 9:18:371049 days ago1679390317
0x963ddBB3...E0B32660d
0 ETH
720708432023-03-21 9:13:401049 days ago1679390020
0x963ddBB3...E0B32660d
0 ETH
720708432023-03-21 9:13:401049 days ago1679390020
0x963ddBB3...E0B32660d
0 ETH
720687602023-03-21 9:05:041049 days ago1679389504
0x963ddBB3...E0B32660d
0 ETH
720644302023-03-21 8:47:241049 days ago1679388444
0x963ddBB3...E0B32660d
0 ETH
720644302023-03-21 8:47:241049 days ago1679388444
0x963ddBB3...E0B32660d
0 ETH
720639112023-03-21 8:45:141049 days ago1679388314
0x963ddBB3...E0B32660d
0 ETH
720639112023-03-21 8:45:141049 days ago1679388314
0x963ddBB3...E0B32660d
0 ETH
720634762023-03-21 8:43:251049 days ago1679388205
0x963ddBB3...E0B32660d
0 ETH
720634762023-03-21 8:43:251049 days ago1679388205
0x963ddBB3...E0B32660d
0 ETH
720608692023-03-21 8:32:491049 days ago1679387569
0x963ddBB3...E0B32660d
0 ETH
720608692023-03-21 8:32:491049 days ago1679387569
0x963ddBB3...E0B32660d
0 ETH
720589292023-03-21 8:24:511049 days ago1679387091
0x963ddBB3...E0B32660d
0 ETH
720589292023-03-21 8:24:511049 days ago1679387091
0x963ddBB3...E0B32660d
0 ETH
View All Internal Transactions

Cross-Chain Transactions
Loading...
Loading

Contract Source Code Verified (Exact Match)

Contract Name:
OracleLib

Compiler Version
v0.8.17+commit.8df45f5f

Optimization Enabled:
Yes with 90000 runs

Other Settings:
default evmVersion
// SPDX-License-Identifier: GPL-3.0-or-later
pragma solidity 0.8.17;

import "../libraries/Errors.sol";

/// Adapted from UniswapV3's Oracle

library OracleLib {
    struct Observation {
        uint32 blockTimestamp;
        uint216 lnImpliedRateCumulative;
        bool initialized;
        // 1 SLOT = 256 bits
    }

    function transform(
        Observation memory last,
        uint32 blockTimestamp,
        uint96 lnImpliedRate
    ) public pure returns (Observation memory) {
        return
            Observation({
                blockTimestamp: blockTimestamp,
                lnImpliedRateCumulative: last.lnImpliedRateCumulative +
                    uint216(lnImpliedRate) *
                    (blockTimestamp - last.blockTimestamp),
                initialized: true
            });
    }

    function initialize(Observation[65535] storage self, uint32 time)
        public
        returns (uint16 cardinality, uint16 cardinalityNext)
    {
        self[0] = Observation({
            blockTimestamp: time,
            lnImpliedRateCumulative: 0,
            initialized: true
        });
        return (1, 1);
    }

    function write(
        Observation[65535] storage self,
        uint16 index,
        uint32 blockTimestamp,
        uint96 lnImpliedRate,
        uint16 cardinality,
        uint16 cardinalityNext
    ) public returns (uint16 indexUpdated, uint16 cardinalityUpdated) {
        Observation memory last = self[index];

        // early return if we've already written an observation this block
        if (last.blockTimestamp == blockTimestamp) return (index, cardinality);

        // if the conditions are right, we can bump the cardinality
        if (cardinalityNext > cardinality && index == (cardinality - 1)) {
            cardinalityUpdated = cardinalityNext;
        } else {
            cardinalityUpdated = cardinality;
        }

        indexUpdated = (index + 1) % cardinalityUpdated;
        self[indexUpdated] = transform(last, blockTimestamp, lnImpliedRate);
    }

    function grow(
        Observation[65535] storage self,
        uint16 current,
        uint16 next
    ) public returns (uint16) {
        if (current == 0) revert Errors.OracleUninitialized();
        // no-op if the passed next value isn't greater than the current next value
        if (next <= current) return current;
        // store in each slot to prevent fresh SSTOREs in swaps
        // this data will not be used because the initialized boolean is still false
        for (uint16 i = current; i != next; ) {
            self[i].blockTimestamp = 1;
            unchecked {
                ++i;
            }
        }
        return next;
    }

    function binarySearch(
        Observation[65535] storage self,
        uint32 target,
        uint16 index,
        uint16 cardinality
    ) public view returns (Observation memory beforeOrAt, Observation memory atOrAfter) {
        uint256 l = (index + 1) % cardinality; // oldest observation
        uint256 r = l + cardinality - 1; // newest observation
        uint256 i;
        while (true) {
            i = (l + r) / 2;

            beforeOrAt = self[i % cardinality];

            // we've landed on an uninitialized observation, keep searching higher (more recently)
            if (!beforeOrAt.initialized) {
                l = i + 1;
                continue;
            }

            atOrAfter = self[(i + 1) % cardinality];

            bool targetAtOrAfter = beforeOrAt.blockTimestamp <= target;

            // check if we've found the answer!
            if (targetAtOrAfter && target <= atOrAfter.blockTimestamp) break;

            if (!targetAtOrAfter) r = i - 1;
            else l = i + 1;
        }
    }

    function getSurroundingObservations(
        Observation[65535] storage self,
        uint32 target,
        uint96 lnImpliedRate,
        uint16 index,
        uint16 cardinality
    ) public view returns (Observation memory beforeOrAt, Observation memory atOrAfter) {
        // optimistically set before to the newest observation
        beforeOrAt = self[index];

        // if the target is chronologically at or after the newest observation, we can early return
        if (beforeOrAt.blockTimestamp <= target) {
            if (beforeOrAt.blockTimestamp == target) {
                // if newest observation equals target, we're in the same block, so we can ignore atOrAfter
                return (beforeOrAt, atOrAfter);
            } else {
                // otherwise, we need to transform
                return (beforeOrAt, transform(beforeOrAt, target, lnImpliedRate));
            }
        }

        // now, set beforeOrAt to the oldest observation
        beforeOrAt = self[(index + 1) % cardinality];
        if (!beforeOrAt.initialized) beforeOrAt = self[0];

        // ensure that the target is chronologically at or after the oldest observation
        if (target < beforeOrAt.blockTimestamp)
            revert Errors.OracleTargetTooOld(target, beforeOrAt.blockTimestamp);

        // if we've reached this point, we have to binary search
        return binarySearch(self, target, index, cardinality);
    }

    function observeSingle(
        Observation[65535] storage self,
        uint32 time,
        uint32 secondsAgo,
        uint96 lnImpliedRate,
        uint16 index,
        uint16 cardinality
    ) public view returns (uint216 lnImpliedRateCumulative) {
        if (secondsAgo == 0) {
            Observation memory last = self[index];
            if (last.blockTimestamp != time) {
                return transform(last, time, lnImpliedRate).lnImpliedRateCumulative;
            }
            return last.lnImpliedRateCumulative;
        }

        uint32 target = time - secondsAgo;

        (Observation memory beforeOrAt, Observation memory atOrAfter) = getSurroundingObservations(
            self,
            target,
            lnImpliedRate,
            index,
            cardinality
        );

        if (target == beforeOrAt.blockTimestamp) {
            // we're at the left boundary
            return beforeOrAt.lnImpliedRateCumulative;
        } else if (target == atOrAfter.blockTimestamp) {
            // we're at the right boundary
            return atOrAfter.lnImpliedRateCumulative;
        } else {
            // we're in the middle
            return (beforeOrAt.lnImpliedRateCumulative +
                uint216(
                    (uint256(
                        atOrAfter.lnImpliedRateCumulative - beforeOrAt.lnImpliedRateCumulative
                    ) * (target - beforeOrAt.blockTimestamp)) /
                        (atOrAfter.blockTimestamp - beforeOrAt.blockTimestamp)
                ));
        }
    }

    function observe(
        Observation[65535] storage self,
        uint32 time,
        uint32[] memory secondsAgos,
        uint96 lnImpliedRate,
        uint16 index,
        uint16 cardinality
    ) public view returns (uint216[] memory lnImpliedRateCumulative) {
        if (cardinality == 0) revert Errors.OracleZeroCardinality();

        lnImpliedRateCumulative = new uint216[](secondsAgos.length);
        for (uint256 i = 0; i < lnImpliedRateCumulative.length; ++i) {
            lnImpliedRateCumulative[i] = observeSingle(
                self,
                time,
                secondsAgos[i],
                lnImpliedRate,
                index,
                cardinality
            );
        }
    }
}

File 2 of 2 : Errors.sol
// SPDX-License-Identifier: GPL-3.0-or-later
pragma solidity 0.8.17;

/// Adapted from UniswapV3's Oracle

library Errors {
    // BulkSeller
    error BulkInsufficientSyForTrade(uint256 currentAmount, uint256 requiredAmount);
    error BulkInsufficientTokenForTrade(uint256 currentAmount, uint256 requiredAmount);
    error BulkInSufficientSyOut(uint256 actualSyOut, uint256 requiredSyOut);
    error BulkInSufficientTokenOut(uint256 actualTokenOut, uint256 requiredTokenOut);
    error BulkInsufficientSyReceived(uint256 actualBalance, uint256 requiredBalance);
    error BulkNotMaintainer();
    error BulkNotAdmin();
    error BulkSellerAlreadyExisted(address token, address SY, address bulk);
    error BulkSellerInvalidToken(address token, address SY);
    error BulkBadRateTokenToSy(uint256 actualRate, uint256 currentRate, uint256 eps);
    error BulkBadRateSyToToken(uint256 actualRate, uint256 currentRate, uint256 eps);

    // APPROX
    error ApproxFail();
    error ApproxParamsInvalid(uint256 guessMin, uint256 guessMax, uint256 eps);
    error ApproxBinarySearchInputInvalid(
        uint256 approxGuessMin,
        uint256 approxGuessMax,
        uint256 minGuessMin,
        uint256 maxGuessMax
    );

    // MARKET + MARKET MATH CORE
    error MarketExpired();
    error MarketZeroAmountsInput();
    error MarketZeroAmountsOutput();
    error MarketZeroLnImpliedRate();
    error MarketInsufficientPtForTrade(int256 currentAmount, int256 requiredAmount);
    error MarketInsufficientPtReceived(uint256 actualBalance, uint256 requiredBalance);
    error MarketInsufficientSyReceived(uint256 actualBalance, uint256 requiredBalance);
    error MarketZeroTotalPtOrTotalAsset(int256 totalPt, int256 totalAsset);
    error MarketExchangeRateBelowOne(int256 exchangeRate);
    error MarketProportionMustNotEqualOne();
    error MarketRateScalarBelowZero(int256 rateScalar);
    error MarketScalarRootBelowZero(int256 scalarRoot);
    error MarketProportionTooHigh(int256 proportion, int256 maxProportion);

    error OracleUninitialized();
    error OracleTargetTooOld(uint32 target, uint32 oldest);
    error OracleZeroCardinality();

    error MarketFactoryExpiredPt();
    error MarketFactoryInvalidPt();
    error MarketFactoryMarketExists();

    error MarketFactoryLnFeeRateRootTooHigh(uint80 lnFeeRateRoot, uint256 maxLnFeeRateRoot);
    error MarketFactoryReserveFeePercentTooHigh(
        uint8 reserveFeePercent,
        uint8 maxReserveFeePercent
    );
    error MarketFactoryZeroTreasury();
    error MarketFactoryInitialAnchorTooLow(int256 initialAnchor, int256 minInitialAnchor);

    // ROUTER
    error RouterInsufficientLpOut(uint256 actualLpOut, uint256 requiredLpOut);
    error RouterInsufficientSyOut(uint256 actualSyOut, uint256 requiredSyOut);
    error RouterInsufficientPtOut(uint256 actualPtOut, uint256 requiredPtOut);
    error RouterInsufficientYtOut(uint256 actualYtOut, uint256 requiredYtOut);
    error RouterInsufficientPYOut(uint256 actualPYOut, uint256 requiredPYOut);
    error RouterInsufficientTokenOut(uint256 actualTokenOut, uint256 requiredTokenOut);
    error RouterExceededLimitSyIn(uint256 actualSyIn, uint256 limitSyIn);
    error RouterExceededLimitPtIn(uint256 actualPtIn, uint256 limitPtIn);
    error RouterExceededLimitYtIn(uint256 actualYtIn, uint256 limitYtIn);
    error RouterInsufficientSyRepay(uint256 actualSyRepay, uint256 requiredSyRepay);
    error RouterInsufficientPtRepay(uint256 actualPtRepay, uint256 requiredPtRepay);
    error RouterNotAllSyUsed(uint256 netSyDesired, uint256 netSyUsed);

    error RouterTimeRangeZero();
    error RouterCallbackNotPendleMarket(address caller);
    error RouterInvalidAction(bytes4 selector);
    error RouterInvalidFacet(address facet);

    error RouterKyberSwapDataZero();

    // YIELD CONTRACT
    error YCExpired();
    error YCNotExpired();
    error YieldContractInsufficientSy(uint256 actualSy, uint256 requiredSy);
    error YCNothingToRedeem();
    error YCPostExpiryDataNotSet();
    error YCNoFloatingSy();

    // YieldFactory
    error YCFactoryInvalidExpiry();
    error YCFactoryYieldContractExisted();
    error YCFactoryZeroExpiryDivisor();
    error YCFactoryZeroTreasury();
    error YCFactoryInterestFeeRateTooHigh(uint256 interestFeeRate, uint256 maxInterestFeeRate);
    error YCFactoryRewardFeeRateTooHigh(uint256 newRewardFeeRate, uint256 maxRewardFeeRate);

    // SY
    error SYInvalidTokenIn(address token);
    error SYInvalidTokenOut(address token);
    error SYZeroDeposit();
    error SYZeroRedeem();
    error SYInsufficientSharesOut(uint256 actualSharesOut, uint256 requiredSharesOut);
    error SYInsufficientTokenOut(uint256 actualTokenOut, uint256 requiredTokenOut);

    // SY-specific
    error SYQiTokenMintFailed(uint256 errCode);
    error SYQiTokenRedeemFailed(uint256 errCode);
    error SYQiTokenRedeemRewardsFailed(uint256 rewardAccruedType0, uint256 rewardAccruedType1);
    error SYQiTokenBorrowRateTooHigh(uint256 borrowRate, uint256 borrowRateMax);

    error SYCurveInvalidPid();
    error SYCurve3crvPoolNotFound();

    error SYApeDepositAmountTooSmall(uint256 amountDeposited);
    error SYBalancerInvalidPid();
    error SYInvalidRewardToken(address token);

    // Liquidity Mining
    error VCInactivePool(address pool);
    error VCPoolAlreadyActive(address pool);
    error VCZeroVePendle(address user);
    error VCExceededMaxWeight(uint256 totalWeight, uint256 maxWeight);
    error VCEpochNotFinalized(uint256 wTime);
    error VCPoolAlreadyAddAndRemoved(address pool);

    error VEInvalidNewExpiry(uint256 newExpiry);
    error VEExceededMaxLockTime();
    error VEInsufficientLockTime();
    error VENotAllowedReduceExpiry();
    error VEZeroAmountLocked();
    error VEPositionNotExpired();
    error VEZeroPosition();
    error VEZeroSlope(uint128 bias, uint128 slope);
    error VEReceiveOldSupply(uint256 msgTime);

    error GCNotPendleMarket(address caller);
    error GCNotVotingController(address caller);

    error InvalidWTime(uint256 wTime);
    error ExpiryInThePast(uint256 expiry);
    error ChainNotSupported(uint256 chainId);

    error FDTotalAmountFundedNotMatch(uint256 actualTotalAmount, uint256 expectedTotalAmount);
    error FDEpochLengthMismatch();
    error FDInvalidPool(address pool);
    error FDPoolAlreadyExists(address pool);
    error FDInvalidNewFinishedEpoch(uint256 oldFinishedEpoch, uint256 newFinishedEpoch);
    error FDInvalidStartEpoch(uint256 startEpoch);
    error FDInvalidWTimeFund(uint256 lastFunded, uint256 wTime);
    error FDFutureFunding(uint256 lastFunded, uint256 currentWTime);

    error BDInvalidEpoch(uint256 epoch, uint256 startTime);

    // Cross-Chain
    error MsgNotFromSendEndpoint(uint16 srcChainId, bytes path);
    error MsgNotFromReceiveEndpoint(address sender);
    error InsufficientFeeToSendMsg(uint256 currentFee, uint256 requiredFee);
    error ApproxDstExecutionGasNotSet();
    error InvalidRetryData();

    // GENERIC MSG
    error ArrayLengthMismatch();
    error ArrayEmpty();
    error ArrayOutOfBounds();
    error ZeroAddress();
    error FailedToSendEther();

    error OnlyLayerZeroEndpoint();
    error OnlyYT();
    error OnlyYCFactory();
    error OnlyWhitelisted();

    // Swap Aggregator
    error SAInsufficientTokenIn(address tokenIn, uint256 amountExpected, uint256 amountActual);
    error UnsupportedSelector(uint256 aggregatorType, bytes4 selector);
}

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

Contract Security Audit

Contract ABI

API
[{"inputs":[{"internalType":"uint32","name":"target","type":"uint32"},{"internalType":"uint32","name":"oldest","type":"uint32"}],"name":"OracleTargetTooOld","type":"error"},{"inputs":[],"name":"OracleUninitialized","type":"error"},{"inputs":[],"name":"OracleZeroCardinality","type":"error"},{"inputs":[{"components":[{"internalType":"uint32","name":"blockTimestamp","type":"uint32"},{"internalType":"uint216","name":"lnImpliedRateCumulative","type":"uint216"},{"internalType":"bool","name":"initialized","type":"bool"}],"internalType":"struct OracleLib.Observation","name":"last","type":"tuple"},{"internalType":"uint32","name":"blockTimestamp","type":"uint32"},{"internalType":"uint96","name":"lnImpliedRate","type":"uint96"}],"name":"transform","outputs":[{"components":[{"internalType":"uint32","name":"blockTimestamp","type":"uint32"},{"internalType":"uint216","name":"lnImpliedRateCumulative","type":"uint216"},{"internalType":"bool","name":"initialized","type":"bool"}],"internalType":"struct OracleLib.Observation","name":"","type":"tuple"}],"stateMutability":"pure","type":"function"}]

6114be61003a600b82828239805160001a60731461002d57634e487b7160e01b600052600060045260246000fd5b30600052607381538281f3fe73000000000000000000000000000000000000000030146080604052600436106100925760003560e01c80635d276259116100655780635d2762591461016d578063b8d236ac1461018e578063ca7dab2c146101a1578063f8500bcc1461020c57600080fd5b80631dd421ce14610097578063335129ad146100c05780634af74b68146100ff578063587cdc061461013a575b600080fd5b6100aa6100a5366004610dce565b61022c565b6040516100b79190610ec8565b60405180910390f35b6100d36100ce366004610f29565b61033e565b6040517affffffffffffffffffffffffffffffffffffffffffffffffffffff90911681526020016100b7565b81801561010b57600080fd5b5061011f61011a366004610f6e565b610502565b6040805161ffff9384168152929091166020830152016100b7565b81801561014657600080fd5b5061015a610155366004610f97565b6106dd565b60405161ffff90911681526020016100b7565b61018061017b366004610fd3565b6107a5565b6040516100b7929190611020565b61018061019c3660046110a6565b6109e4565b8180156101ad57600080fd5b5061011f6101bc366004611104565b6040805160608101825263ffffffff92909216808352600060208401526001929091018290527f010000000000000000000000000000000000000000000000000000000000000017909155908190565b61021f61021a366004611130565b610c69565b6040516100b791906111ed565b60608161ffff1660000361026c576040517f6a86842100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b845167ffffffffffffffff81111561028657610286610d22565b6040519080825280602002602001820160405280156102af578160200160208202803683370190505b50905060005b8151811015610333576102e588888884815181106102d5576102d5611235565b602002602001015188888861033e565b8282815181106102f7576102f7611235565b7affffffffffffffffffffffffffffffffffffffffffffffffffffff9092166020928302919091019091015261032c81611293565b90506102b5565b509695505050505050565b60008463ffffffff16600003610408576000878461ffff1661ffff811061036757610367611235565b60408051606081018252919092015463ffffffff80821680845264010000000083047affffffffffffffffffffffffffffffffffffffffffffffffffffff1660208501527f010000000000000000000000000000000000000000000000000000000000000090920460ff16151593830193909352909250908816146103fd576103f1818887610c69565b602001519150506104f8565b6020015190506104f8565b600061041486886112cb565b90506000806104268a848989896109e4565b91509150816000015163ffffffff168363ffffffff160361044f57506020015191506104f89050565b806000015163ffffffff168363ffffffff1603610474576020015192506104f8915050565b8151815161048291906112cb565b63ffffffff1682600001518461049891906112cb565b63ffffffff16836020015183602001516104b291906112ef565b7affffffffffffffffffffffffffffffffffffffffffffffffffffff166104d99190611323565b6104e39190611369565b82602001516104f2919061137d565b93505050505b9695505050505050565b6000806000888861ffff1661ffff811061051e5761051e611235565b60408051606081018252919092015463ffffffff80821680845264010000000083047affffffffffffffffffffffffffffffffffffffffffffffffffffff1660208501527f010000000000000000000000000000000000000000000000000000000000000090920460ff1615159383019390935290925090881690036105aa57878592509250506106d2565b8461ffff168461ffff161180156105d257506105c76001866113b1565b61ffff168861ffff16145b156105df578391506105e3565b8491505b816105ef8960016113cc565b6105f991906113e7565b9250610606818888610c69565b898461ffff1661ffff811061061d5761061d611235565b825191018054602084015160409094015115157f0100000000000000000000000000000000000000000000000000000000000000027effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7affffffffffffffffffffffffffffffffffffffffffffffffffffff909516640100000000027fff0000000000000000000000000000000000000000000000000000000000000090921663ffffffff909416939093171792909216179055505b965096945050505050565b60008261ffff1660000361071d576040517fdc14e8a100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8261ffff168261ffff161161073357508161079e565b825b8261ffff168161ffff1614610799576001858261ffff1661ffff811061075d5761075d611235565b0180547fffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000001663ffffffff92909216919091179055600101610735565b508190505b9392505050565b6040805160608082018352600080835260208084018290528385018290528451928301855281835282018190529281018390529091836107e68660016113cc565b6107f091906113e7565b61ffff169050600060018561ffff168361080a9190611408565b610814919061141b565b905060005b60026108258385611408565b61082f9190611369565b90508861084061ffff88168361142e565b61ffff811061085157610851611235565b60408051606081018252919092015463ffffffff8116825264010000000081047affffffffffffffffffffffffffffffffffffffffffffffffffffff1660208301527f0100000000000000000000000000000000000000000000000000000000000000900460ff16151591810182905295506108d9576108d2816001611408565b9250610819565b8861ffff87166108ea836001611408565b6108f4919061142e565b61ffff811061090557610905611235565b60408051606081018252919092015463ffffffff808216835264010000000082047affffffffffffffffffffffffffffffffffffffffffffffffffffff1660208401527f010000000000000000000000000000000000000000000000000000000000000090910460ff16151592820192909252865190955089821691161180159081906109a25750846000015163ffffffff168963ffffffff1611155b156109ad57506109d8565b806109c4576109bd60018361141b565b92506109d2565b6109cf826001611408565b93505b50610819565b50505094509492505050565b60408051606081018252600080825260208201819052918101919091526040805160608101825260008082526020820181905291810191909152868461ffff1661ffff8110610a3557610a35611235565b60408051606081018252919092015463ffffffff80821680845264010000000083047affffffffffffffffffffffffffffffffffffffffffffffffffffff1660208501527f010000000000000000000000000000000000000000000000000000000000000090920460ff1615159383019390935290935090871610610ada57815163ffffffff878116911614610c5f5781610ad1838888610c69565b91509150610c5f565b8683610ae78660016113cc565b610af191906113e7565b61ffff1661ffff8110610b0657610b06611235565b60408051606081018252919092015463ffffffff8116825264010000000081047affffffffffffffffffffffffffffffffffffffffffffffffffffff1660208301527f0100000000000000000000000000000000000000000000000000000000000000900460ff1615159181018290529250610bed5760408051606081018252885463ffffffff8116825264010000000081047affffffffffffffffffffffffffffffffffffffffffffffffffffff1660208301527f0100000000000000000000000000000000000000000000000000000000000000900460ff1615159181019190915291505b816000015163ffffffff168663ffffffff161015610c4e5781516040517f9ca3426c00000000000000000000000000000000000000000000000000000000815263ffffffff8089166004830152909116602482015260440160405180910390fd5b610c5a878786866107a5565b915091505b9550959350505050565b604080516060810182526000808252602082018190529181019190915260405180606001604052808463ffffffff168152602001856000015185610cad91906112cb565b610ccb9063ffffffff166bffffffffffffffffffffffff8616611442565b8660200151610cda919061137d565b7affffffffffffffffffffffffffffffffffffffffffffffffffffff1681526001602090910152949350505050565b803563ffffffff81168114610d1d57600080fd5b919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016810167ffffffffffffffff81118282101715610d9857610d98610d22565b604052919050565b80356bffffffffffffffffffffffff81168114610d1d57600080fd5b803561ffff81168114610d1d57600080fd5b60008060008060008060c08789031215610de757600080fd5b863595506020610df8818901610d09565b9550604088013567ffffffffffffffff80821115610e1557600080fd5b818a0191508a601f830112610e2957600080fd5b813581811115610e3b57610e3b610d22565b8060051b9150610e4c848301610d51565b818152918301840191848101908d841115610e6657600080fd5b938501935b83851015610e8b57610e7c85610d09565b82529385019390850190610e6b565b809950505050505050610ea060608801610da0565b9250610eae60808801610dbc565b9150610ebc60a08801610dbc565b90509295509295509295565b6020808252825182820181905260009190848201906040850190845b81811015610f1d5783517affffffffffffffffffffffffffffffffffffffffffffffffffffff1683529284019291840191600101610ee4565b50909695505050505050565b60008060008060008060c08789031215610f4257600080fd5b86359550610f5260208801610d09565b9450610f6060408801610d09565b9350610ea060608801610da0565b60008060008060008060c08789031215610f8757600080fd5b86359550610f5260208801610dbc565b600080600060608486031215610fac57600080fd5b83359250610fbc60208501610dbc565b9150610fca60408501610dbc565b90509250925092565b60008060008060808587031215610fe957600080fd5b84359350610ff960208601610d09565b925061100760408601610dbc565b915061101560608601610dbc565b905092959194509250565b825163ffffffff1681526020808401517affffffffffffffffffffffffffffffffffffffffffffffffffffff169082015260408084015115159082015260c08101825163ffffffff16606083015260208301517affffffffffffffffffffffffffffffffffffffffffffffffffffff1660808301526040830151151560a083015261079e565b600080600080600060a086880312156110be57600080fd5b853594506110ce60208701610d09565b93506110dc60408701610da0565b92506110ea60608701610dbc565b91506110f860808701610dbc565b90509295509295909350565b6000806040838503121561111757600080fd5b8235915061112760208401610d09565b90509250929050565b600080600083850360a081121561114657600080fd5b606081121561115457600080fd5b506040516060810181811067ffffffffffffffff8211171561117857611178610d22565b60405261118485610d09565b815260208501357affffffffffffffffffffffffffffffffffffffffffffffffffffff811681146111b457600080fd5b6020820152604085013580151581146111cc57600080fd5b604082015292506111df60608501610d09565b9150610fca60808501610da0565b815163ffffffff1681526020808301517affffffffffffffffffffffffffffffffffffffffffffffffffffff1690820152604080830151151590820152606081015b92915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82036112c4576112c4611264565b5060010190565b63ffffffff8281168282160390808211156112e8576112e8611264565b5092915050565b7affffffffffffffffffffffffffffffffffffffffffffffffffffff8281168282160390808211156112e8576112e8611264565b808202811582820484141761122f5761122f611264565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b6000826113785761137861133a565b500490565b7affffffffffffffffffffffffffffffffffffffffffffffffffffff8181168382160190808211156112e8576112e8611264565b61ffff8281168282160390808211156112e8576112e8611264565b61ffff8181168382160190808211156112e8576112e8611264565b600061ffff808416806113fc576113fc61133a565b92169190910692915050565b8082018082111561122f5761122f611264565b8181038181111561122f5761122f611264565b60008261143d5761143d61133a565b500690565b7affffffffffffffffffffffffffffffffffffffffffffffffffffff82811682821681810283169291811582850482141761147f5761147f611264565b5050509291505056fea26469706673582212202b17d26fd0fe72532fe132a86b2376a7613a962fb0811c48b13560de75856a4c64736f6c63430008110033

Deployed Bytecode

0x73963ddbb35c1ae44e2a159e3b5fb5177e0b32660d30146080604052600436106100925760003560e01c80635d276259116100655780635d2762591461016d578063b8d236ac1461018e578063ca7dab2c146101a1578063f8500bcc1461020c57600080fd5b80631dd421ce14610097578063335129ad146100c05780634af74b68146100ff578063587cdc061461013a575b600080fd5b6100aa6100a5366004610dce565b61022c565b6040516100b79190610ec8565b60405180910390f35b6100d36100ce366004610f29565b61033e565b6040517affffffffffffffffffffffffffffffffffffffffffffffffffffff90911681526020016100b7565b81801561010b57600080fd5b5061011f61011a366004610f6e565b610502565b6040805161ffff9384168152929091166020830152016100b7565b81801561014657600080fd5b5061015a610155366004610f97565b6106dd565b60405161ffff90911681526020016100b7565b61018061017b366004610fd3565b6107a5565b6040516100b7929190611020565b61018061019c3660046110a6565b6109e4565b8180156101ad57600080fd5b5061011f6101bc366004611104565b6040805160608101825263ffffffff92909216808352600060208401526001929091018290527f010000000000000000000000000000000000000000000000000000000000000017909155908190565b61021f61021a366004611130565b610c69565b6040516100b791906111ed565b60608161ffff1660000361026c576040517f6a86842100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b845167ffffffffffffffff81111561028657610286610d22565b6040519080825280602002602001820160405280156102af578160200160208202803683370190505b50905060005b8151811015610333576102e588888884815181106102d5576102d5611235565b602002602001015188888861033e565b8282815181106102f7576102f7611235565b7affffffffffffffffffffffffffffffffffffffffffffffffffffff9092166020928302919091019091015261032c81611293565b90506102b5565b509695505050505050565b60008463ffffffff16600003610408576000878461ffff1661ffff811061036757610367611235565b60408051606081018252919092015463ffffffff80821680845264010000000083047affffffffffffffffffffffffffffffffffffffffffffffffffffff1660208501527f010000000000000000000000000000000000000000000000000000000000000090920460ff16151593830193909352909250908816146103fd576103f1818887610c69565b602001519150506104f8565b6020015190506104f8565b600061041486886112cb565b90506000806104268a848989896109e4565b91509150816000015163ffffffff168363ffffffff160361044f57506020015191506104f89050565b806000015163ffffffff168363ffffffff1603610474576020015192506104f8915050565b8151815161048291906112cb565b63ffffffff1682600001518461049891906112cb565b63ffffffff16836020015183602001516104b291906112ef565b7affffffffffffffffffffffffffffffffffffffffffffffffffffff166104d99190611323565b6104e39190611369565b82602001516104f2919061137d565b93505050505b9695505050505050565b6000806000888861ffff1661ffff811061051e5761051e611235565b60408051606081018252919092015463ffffffff80821680845264010000000083047affffffffffffffffffffffffffffffffffffffffffffffffffffff1660208501527f010000000000000000000000000000000000000000000000000000000000000090920460ff1615159383019390935290925090881690036105aa57878592509250506106d2565b8461ffff168461ffff161180156105d257506105c76001866113b1565b61ffff168861ffff16145b156105df578391506105e3565b8491505b816105ef8960016113cc565b6105f991906113e7565b9250610606818888610c69565b898461ffff1661ffff811061061d5761061d611235565b825191018054602084015160409094015115157f0100000000000000000000000000000000000000000000000000000000000000027effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7affffffffffffffffffffffffffffffffffffffffffffffffffffff909516640100000000027fff0000000000000000000000000000000000000000000000000000000000000090921663ffffffff909416939093171792909216179055505b965096945050505050565b60008261ffff1660000361071d576040517fdc14e8a100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8261ffff168261ffff161161073357508161079e565b825b8261ffff168161ffff1614610799576001858261ffff1661ffff811061075d5761075d611235565b0180547fffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000001663ffffffff92909216919091179055600101610735565b508190505b9392505050565b6040805160608082018352600080835260208084018290528385018290528451928301855281835282018190529281018390529091836107e68660016113cc565b6107f091906113e7565b61ffff169050600060018561ffff168361080a9190611408565b610814919061141b565b905060005b60026108258385611408565b61082f9190611369565b90508861084061ffff88168361142e565b61ffff811061085157610851611235565b60408051606081018252919092015463ffffffff8116825264010000000081047affffffffffffffffffffffffffffffffffffffffffffffffffffff1660208301527f0100000000000000000000000000000000000000000000000000000000000000900460ff16151591810182905295506108d9576108d2816001611408565b9250610819565b8861ffff87166108ea836001611408565b6108f4919061142e565b61ffff811061090557610905611235565b60408051606081018252919092015463ffffffff808216835264010000000082047affffffffffffffffffffffffffffffffffffffffffffffffffffff1660208401527f010000000000000000000000000000000000000000000000000000000000000090910460ff16151592820192909252865190955089821691161180159081906109a25750846000015163ffffffff168963ffffffff1611155b156109ad57506109d8565b806109c4576109bd60018361141b565b92506109d2565b6109cf826001611408565b93505b50610819565b50505094509492505050565b60408051606081018252600080825260208201819052918101919091526040805160608101825260008082526020820181905291810191909152868461ffff1661ffff8110610a3557610a35611235565b60408051606081018252919092015463ffffffff80821680845264010000000083047affffffffffffffffffffffffffffffffffffffffffffffffffffff1660208501527f010000000000000000000000000000000000000000000000000000000000000090920460ff1615159383019390935290935090871610610ada57815163ffffffff878116911614610c5f5781610ad1838888610c69565b91509150610c5f565b8683610ae78660016113cc565b610af191906113e7565b61ffff1661ffff8110610b0657610b06611235565b60408051606081018252919092015463ffffffff8116825264010000000081047affffffffffffffffffffffffffffffffffffffffffffffffffffff1660208301527f0100000000000000000000000000000000000000000000000000000000000000900460ff1615159181018290529250610bed5760408051606081018252885463ffffffff8116825264010000000081047affffffffffffffffffffffffffffffffffffffffffffffffffffff1660208301527f0100000000000000000000000000000000000000000000000000000000000000900460ff1615159181019190915291505b816000015163ffffffff168663ffffffff161015610c4e5781516040517f9ca3426c00000000000000000000000000000000000000000000000000000000815263ffffffff8089166004830152909116602482015260440160405180910390fd5b610c5a878786866107a5565b915091505b9550959350505050565b604080516060810182526000808252602082018190529181019190915260405180606001604052808463ffffffff168152602001856000015185610cad91906112cb565b610ccb9063ffffffff166bffffffffffffffffffffffff8616611442565b8660200151610cda919061137d565b7affffffffffffffffffffffffffffffffffffffffffffffffffffff1681526001602090910152949350505050565b803563ffffffff81168114610d1d57600080fd5b919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016810167ffffffffffffffff81118282101715610d9857610d98610d22565b604052919050565b80356bffffffffffffffffffffffff81168114610d1d57600080fd5b803561ffff81168114610d1d57600080fd5b60008060008060008060c08789031215610de757600080fd5b863595506020610df8818901610d09565b9550604088013567ffffffffffffffff80821115610e1557600080fd5b818a0191508a601f830112610e2957600080fd5b813581811115610e3b57610e3b610d22565b8060051b9150610e4c848301610d51565b818152918301840191848101908d841115610e6657600080fd5b938501935b83851015610e8b57610e7c85610d09565b82529385019390850190610e6b565b809950505050505050610ea060608801610da0565b9250610eae60808801610dbc565b9150610ebc60a08801610dbc565b90509295509295509295565b6020808252825182820181905260009190848201906040850190845b81811015610f1d5783517affffffffffffffffffffffffffffffffffffffffffffffffffffff1683529284019291840191600101610ee4565b50909695505050505050565b60008060008060008060c08789031215610f4257600080fd5b86359550610f5260208801610d09565b9450610f6060408801610d09565b9350610ea060608801610da0565b60008060008060008060c08789031215610f8757600080fd5b86359550610f5260208801610dbc565b600080600060608486031215610fac57600080fd5b83359250610fbc60208501610dbc565b9150610fca60408501610dbc565b90509250925092565b60008060008060808587031215610fe957600080fd5b84359350610ff960208601610d09565b925061100760408601610dbc565b915061101560608601610dbc565b905092959194509250565b825163ffffffff1681526020808401517affffffffffffffffffffffffffffffffffffffffffffffffffffff169082015260408084015115159082015260c08101825163ffffffff16606083015260208301517affffffffffffffffffffffffffffffffffffffffffffffffffffff1660808301526040830151151560a083015261079e565b600080600080600060a086880312156110be57600080fd5b853594506110ce60208701610d09565b93506110dc60408701610da0565b92506110ea60608701610dbc565b91506110f860808701610dbc565b90509295509295909350565b6000806040838503121561111757600080fd5b8235915061112760208401610d09565b90509250929050565b600080600083850360a081121561114657600080fd5b606081121561115457600080fd5b506040516060810181811067ffffffffffffffff8211171561117857611178610d22565b60405261118485610d09565b815260208501357affffffffffffffffffffffffffffffffffffffffffffffffffffff811681146111b457600080fd5b6020820152604085013580151581146111cc57600080fd5b604082015292506111df60608501610d09565b9150610fca60808501610da0565b815163ffffffff1681526020808301517affffffffffffffffffffffffffffffffffffffffffffffffffffff1690820152604080830151151590820152606081015b92915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82036112c4576112c4611264565b5060010190565b63ffffffff8281168282160390808211156112e8576112e8611264565b5092915050565b7affffffffffffffffffffffffffffffffffffffffffffffffffffff8281168282160390808211156112e8576112e8611264565b808202811582820484141761122f5761122f611264565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b6000826113785761137861133a565b500490565b7affffffffffffffffffffffffffffffffffffffffffffffffffffff8181168382160190808211156112e8576112e8611264565b61ffff8281168282160390808211156112e8576112e8611264565b61ffff8181168382160190808211156112e8576112e8611264565b600061ffff808416806113fc576113fc61133a565b92169190910692915050565b8082018082111561122f5761122f611264565b8181038181111561122f5761122f611264565b60008261143d5761143d61133a565b500690565b7affffffffffffffffffffffffffffffffffffffffffffffffffffff82811682821681810283169291811582850482141761147f5761147f611264565b5050509291505056fea26469706673582212202b17d26fd0fe72532fe132a86b2376a7613a962fb0811c48b13560de75856a4c64736f6c63430008110033

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  ]

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.