Overview
ETH Balance
0 ETH
Eth Value
$0.00More Info
Private Name Tags
ContractCreator
View more zero value Internal Transactions in Advanced View mode
Advanced mode:
Loading...
Loading
Contract Source Code Verified (Exact Match)
Contract Name:
OracleLib
Compiler Version
v0.8.24+commit.e11b9ed9
Optimization Enabled:
Yes with 1000000 runs
Other Settings:
paris EvmVersion
Contract Source Code (Solidity Standard Json-Input format)
// SPDX-License-Identifier: GPL-3.0-or-later pragma solidity ^0.8.0; 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); } } }
// SPDX-License-Identifier: GPL-3.0-or-later pragma solidity ^0.8.0; 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 MarketFactoryOverriddenFeeTooHigh(uint80 overriddenFee, uint256 marketLnFeeRateRoot); error MarketFactoryReserveFeePercentTooHigh(uint8 reserveFeePercent, uint8 maxReserveFeePercent); error MarketFactoryZeroTreasury(); error MarketFactoryInitialAnchorTooLow(int256 initialAnchor, int256 minInitialAnchor); error MFNotPendleMarket(address addr); // 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 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(); error SimulationResults(bool success, bytes res); // 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); error SYStargateRedeemCapExceeded(uint256 amountLpDesired, uint256 amountLpRedeemable); error SYBalancerReentrancy(); error NotFromTrustedRemote(uint16 srcChainId, bytes path); error ApxETHNotEnoughBuffer(); // 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 InvalidMerkleProof(); error OnlyLayerZeroEndpoint(); error OnlyYT(); error OnlyYCFactory(); error OnlyWhitelisted(); // Swap Aggregator error SAInsufficientTokenIn(address tokenIn, uint256 amountExpected, uint256 amountActual); error UnsupportedSelector(uint256 aggregatorType, bytes4 selector); }
{ "optimizer": { "enabled": true, "runs": 1000000 }, "viaIR": true, "evmVersion": "paris", "outputSelection": { "*": { "*": [ "evm.bytecode", "evm.deployedBytecode", "devdoc", "userdoc", "metadata", "abi" ] } }, "libraries": {} }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"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"}]
Contract Creation Code
6080806040523461001c5761105690816100228239308160080152f35b600080fdfe604060808152307f0000000000000000000000000000000000000000000000000000000000000000149060048036101561003857600080fd5b600092833560e01c9081631dd421ce146104e4578163335129ad146104635781634af74b68146103e9578163587cdc061461038e5781635d27625914610334578163b8d236ac14610239578163ca7dab2c146101af575063f8500bcc1461009e57600080fd5b7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc360160a081126101a3576060136101ab576100d861071d565b63ffffffff913582811681036101a75781526024357affffffffffffffffffffffffffffffffffffffffffffffffffffff811681036101a757602082015260443580151581036101a7578382015260643591821682036101a357608435936bffffffffffffffffffffffff851685036101a0575060609361019e9261015c92610f92565b915180926040809163ffffffff81511684527affffffffffffffffffffffffffffffffffffffffffffffffffffff602082015116602085015201511515910152565bf35b80fd5b8380fd5b8480fd5b8280fd5b8491506101a057827ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101a0577f01000000000000000000000000000000000000000000000000000000000000009060018461020c6106f2565b63ffffffff61021961071d565b911693848252602082015201521790355580516001815260016020820152f35b50509160a07ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101a05761026e6106f2565b90604435906bffffffffffffffffffffffff821682036101a057506102af60c09461019e936102f39361029f610827565b916102a86107e3565b9335610eb0565b9190935180946040809163ffffffff81511684527affffffffffffffffffffffffffffffffffffffffffffffffffffff602082015116602085015201511515910152565b805163ffffffff16606084015260208101517affffffffffffffffffffffffffffffffffffffffffffffffffffff16608084015260400151151560a0830152565b50509160807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101a0575061019e6102f36102af60c0946103766106f2565b61037e610816565b90610387610827565b9235610d4c565b838584926101a05760607ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101a0575061ffff6103e16020936103d2610805565b6103da610816565b9135610c7b565b915191168152f35b8491506101a05760c07ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101a0575061045090610427610805565b61042f61070a565b6104376107c8565b906104406107e3565b926104496107f4565b9435610b15565b825161ffff928316815291166020820152f35b50509160c07ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101a057507affffffffffffffffffffffffffffffffffffffffffffffffffffff6103e16020936104bb6106f2565b6104c361070a565b6104cb6107c8565b906104d46107e3565b926104dd6107f4565b9435610946565b82858560c07ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126106ee5782359061051c6106f2565b6044359267ffffffffffffffff84116101a757366023850112156101a757838601359161055061054b846107b0565b61076c565b948593808752602460208098019160051b830101913683116106ea57602401905b8282106106ca575050506105836107c8565b9261058c6107e3565b946105956107f4565b9861ffff8a16156106a357508151966105bc6105b361054b8a6107b0565b98808a526107b0565b907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0818a019201368337895b895181101561064657808a7affffffffffffffffffffffffffffffffffffffffffffffffffffff61063c8f946106366001968f8f8f8f8f61062e8863ffffffff92610838565b511691610946565b93610838565b91169052016105e8565b509190898983519485948186019282875251809352850193925b82811061066f57505050500390f35b83517affffffffffffffffffffffffffffffffffffffffffffffffffffff1685528695509381019392810192600101610660565b90517f6a868421000000000000000000000000000000000000000000000000000000008152fd5b813563ffffffff811681036106e6578152908701908701610571565b8980fd5b8880fd5b5080fd5b6024359063ffffffff8216820361070557565b600080fd5b6044359063ffffffff8216820361070557565b604051906060820182811067ffffffffffffffff82111761073d57604052565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f604051930116820182811067ffffffffffffffff82111761073d57604052565b67ffffffffffffffff811161073d5760051b60200190565b606435906bffffffffffffffffffffffff8216820361070557565b6084359061ffff8216820361070557565b60a4359061ffff8216820361070557565b6024359061ffff8216820361070557565b6044359061ffff8216820361070557565b6064359061ffff8216820361070557565b805182101561084c5760209160051b010190565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b61ffff82101561084c570190600090565b9061089561071d565b915463ffffffff811683527affffffffffffffffffffffffffffffffffffffffffffffffffffff8160201c16602084015260f81c15156040830152565b63ffffffff91821690821603919082116108e857565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b9190917affffffffffffffffffffffffffffffffffffffffffffffffffffff808094169116019182116108e857565b92949193909463ffffffff9485811615610a9557610969906109709596976108d2565b8095610eb0565b919092808451168183169081146000146109ac5750505050602001517affffffffffffffffffffffffffffffffffffffffffffffffffffff1690565b81849593945116146000146109e257505050602001517affffffffffffffffffffffffffffffffffffffffffffffffffffff1690565b7affffffffffffffffffffffffffffffffffffffffffffffffffffff939192939182602085015116938484602084015116038481116108e857610a2d858592169782845116906108d2565b16958681029681880414901517156108e8578280610a50935116915116906108d2565b168015610a6657610a6393041690610917565b90565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b50915093610acb610ac57affffffffffffffffffffffffffffffffffffffffffffffffffffff966020969561087b565b5061088c565b928084511690821603610ae057505001511690565b610ae992610f92565b01511690565b90600161ffff809316019182116108e857565b9061ffff809116918215610a6657160690565b919593929490610b28610ac5828561087b565b9163ffffffff9485845116868a1614610c6f5761ffff8082169081818516119182610c27575b5050610b859493610b7f93610b729a93610b7793600014610c1d5750998a91610aef565b610b02565b988993610f92565b9261087b565b929092610bee57815160208084015160409094015193901b7effffffffffffffffffffffffffffffffffffffffffffffffffffff000000001691161790151560f81b7fff0000000000000000000000000000000000000000000000000000000000000016179055565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052600060045260246000fd5b9050998a91610aef565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff91949a939695925001908382116108e8579198939491939284811691161483610b7f610b4e565b91975090955050505050565b9061ffff91828216918215610cee5783851692831115610ce6575b8284821603610ca6575050505090565b80610cb285928461087b565b5090600191827fffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000008254161790550116610c96565b935050505090565b60046040517fdc14e8a1000000000000000000000000000000000000000000000000000000008152fd5b610d2061071d565b90600082526000602083015260006040830152565b919082018092116108e857565b8115610a66570690565b9391610b7290610d5a610d18565b50610d63610d18565b50610d738561ffff938493610aef565b16931691610d818385610d35565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff948582019182116108e8575b610db88282610d35565b91600192831c92610dd5610ac5610dcf8987610d42565b8b61087b565b90604082015115610e9a57840190818511610e4357610e00610ac5610dfa8a85610d42565b8c61087b565b9063ffffffff918282511692808a168094119384159182610e8c575b5050610e7e57505015610e71575050858201918211610e4357610db891905b909150610dae565b602460007f4e487b710000000000000000000000000000000000000000000000000000000081526011600452fd5b909150610db89250610e3b565b995099505050505050915050565b835116101590503880610e1c565b919250508201809211610e4357610db891610e3b565b9493929194610ebd610d18565b50610ec6610d18565b610ed3610ac5858461087b565b9063ffffffff918281511698838616998a811115610f735750505050610f08610ac5610f0287610b7288610aef565b8461087b565b604081015115610f64575b511695868110610f2d5750610f29949550610d4c565b9091565b60449087604051917f9ca3426c00000000000000000000000000000000000000000000000000000000835260048301526024820152fd5b50610f6e8261088c565b610f13565b93509550955096915014600014610f8a5750509190565b82610a639395505b9091610fe690610fa0610d18565b507affffffffffffffffffffffffffffffffffffffffffffffffffffff926bffffffffffffffffffffffff8460208301511692169063ffffffff938480925116876108d2565b169084828202169181830414901517156108e85761100391610917565b9061100c61071d565b93168352166020820152600160408201529056fea2646970667358221220c9b08349016bbf041415e42d6dc6eff71a3f2129bead43784c9adba3997895fc64736f6c63430008180033
Deployed Bytecode
0x604060808152307f00000000000000000000000083d6fa7f8904299f4a9499fe83b6ae3f21ffba57149060048036101561003857600080fd5b600092833560e01c9081631dd421ce146104e4578163335129ad146104635781634af74b68146103e9578163587cdc061461038e5781635d27625914610334578163b8d236ac14610239578163ca7dab2c146101af575063f8500bcc1461009e57600080fd5b7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc360160a081126101a3576060136101ab576100d861071d565b63ffffffff913582811681036101a75781526024357affffffffffffffffffffffffffffffffffffffffffffffffffffff811681036101a757602082015260443580151581036101a7578382015260643591821682036101a357608435936bffffffffffffffffffffffff851685036101a0575060609361019e9261015c92610f92565b915180926040809163ffffffff81511684527affffffffffffffffffffffffffffffffffffffffffffffffffffff602082015116602085015201511515910152565bf35b80fd5b8380fd5b8480fd5b8280fd5b8491506101a057827ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101a0577f01000000000000000000000000000000000000000000000000000000000000009060018461020c6106f2565b63ffffffff61021961071d565b911693848252602082015201521790355580516001815260016020820152f35b50509160a07ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101a05761026e6106f2565b90604435906bffffffffffffffffffffffff821682036101a057506102af60c09461019e936102f39361029f610827565b916102a86107e3565b9335610eb0565b9190935180946040809163ffffffff81511684527affffffffffffffffffffffffffffffffffffffffffffffffffffff602082015116602085015201511515910152565b805163ffffffff16606084015260208101517affffffffffffffffffffffffffffffffffffffffffffffffffffff16608084015260400151151560a0830152565b50509160807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101a0575061019e6102f36102af60c0946103766106f2565b61037e610816565b90610387610827565b9235610d4c565b838584926101a05760607ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101a0575061ffff6103e16020936103d2610805565b6103da610816565b9135610c7b565b915191168152f35b8491506101a05760c07ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101a0575061045090610427610805565b61042f61070a565b6104376107c8565b906104406107e3565b926104496107f4565b9435610b15565b825161ffff928316815291166020820152f35b50509160c07ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101a057507affffffffffffffffffffffffffffffffffffffffffffffffffffff6103e16020936104bb6106f2565b6104c361070a565b6104cb6107c8565b906104d46107e3565b926104dd6107f4565b9435610946565b82858560c07ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126106ee5782359061051c6106f2565b6044359267ffffffffffffffff84116101a757366023850112156101a757838601359161055061054b846107b0565b61076c565b948593808752602460208098019160051b830101913683116106ea57602401905b8282106106ca575050506105836107c8565b9261058c6107e3565b946105956107f4565b9861ffff8a16156106a357508151966105bc6105b361054b8a6107b0565b98808a526107b0565b907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0818a019201368337895b895181101561064657808a7affffffffffffffffffffffffffffffffffffffffffffffffffffff61063c8f946106366001968f8f8f8f8f61062e8863ffffffff92610838565b511691610946565b93610838565b91169052016105e8565b509190898983519485948186019282875251809352850193925b82811061066f57505050500390f35b83517affffffffffffffffffffffffffffffffffffffffffffffffffffff1685528695509381019392810192600101610660565b90517f6a868421000000000000000000000000000000000000000000000000000000008152fd5b813563ffffffff811681036106e6578152908701908701610571565b8980fd5b8880fd5b5080fd5b6024359063ffffffff8216820361070557565b600080fd5b6044359063ffffffff8216820361070557565b604051906060820182811067ffffffffffffffff82111761073d57604052565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f604051930116820182811067ffffffffffffffff82111761073d57604052565b67ffffffffffffffff811161073d5760051b60200190565b606435906bffffffffffffffffffffffff8216820361070557565b6084359061ffff8216820361070557565b60a4359061ffff8216820361070557565b6024359061ffff8216820361070557565b6044359061ffff8216820361070557565b6064359061ffff8216820361070557565b805182101561084c5760209160051b010190565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b61ffff82101561084c570190600090565b9061089561071d565b915463ffffffff811683527affffffffffffffffffffffffffffffffffffffffffffffffffffff8160201c16602084015260f81c15156040830152565b63ffffffff91821690821603919082116108e857565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b9190917affffffffffffffffffffffffffffffffffffffffffffffffffffff808094169116019182116108e857565b92949193909463ffffffff9485811615610a9557610969906109709596976108d2565b8095610eb0565b919092808451168183169081146000146109ac5750505050602001517affffffffffffffffffffffffffffffffffffffffffffffffffffff1690565b81849593945116146000146109e257505050602001517affffffffffffffffffffffffffffffffffffffffffffffffffffff1690565b7affffffffffffffffffffffffffffffffffffffffffffffffffffff939192939182602085015116938484602084015116038481116108e857610a2d858592169782845116906108d2565b16958681029681880414901517156108e8578280610a50935116915116906108d2565b168015610a6657610a6393041690610917565b90565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b50915093610acb610ac57affffffffffffffffffffffffffffffffffffffffffffffffffffff966020969561087b565b5061088c565b928084511690821603610ae057505001511690565b610ae992610f92565b01511690565b90600161ffff809316019182116108e857565b9061ffff809116918215610a6657160690565b919593929490610b28610ac5828561087b565b9163ffffffff9485845116868a1614610c6f5761ffff8082169081818516119182610c27575b5050610b859493610b7f93610b729a93610b7793600014610c1d5750998a91610aef565b610b02565b988993610f92565b9261087b565b929092610bee57815160208084015160409094015193901b7effffffffffffffffffffffffffffffffffffffffffffffffffffff000000001691161790151560f81b7fff0000000000000000000000000000000000000000000000000000000000000016179055565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052600060045260246000fd5b9050998a91610aef565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff91949a939695925001908382116108e8579198939491939284811691161483610b7f610b4e565b91975090955050505050565b9061ffff91828216918215610cee5783851692831115610ce6575b8284821603610ca6575050505090565b80610cb285928461087b565b5090600191827fffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000008254161790550116610c96565b935050505090565b60046040517fdc14e8a1000000000000000000000000000000000000000000000000000000008152fd5b610d2061071d565b90600082526000602083015260006040830152565b919082018092116108e857565b8115610a66570690565b9391610b7290610d5a610d18565b50610d63610d18565b50610d738561ffff938493610aef565b16931691610d818385610d35565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff948582019182116108e8575b610db88282610d35565b91600192831c92610dd5610ac5610dcf8987610d42565b8b61087b565b90604082015115610e9a57840190818511610e4357610e00610ac5610dfa8a85610d42565b8c61087b565b9063ffffffff918282511692808a168094119384159182610e8c575b5050610e7e57505015610e71575050858201918211610e4357610db891905b909150610dae565b602460007f4e487b710000000000000000000000000000000000000000000000000000000081526011600452fd5b909150610db89250610e3b565b995099505050505050915050565b835116101590503880610e1c565b919250508201809211610e4357610db891610e3b565b9493929194610ebd610d18565b50610ec6610d18565b610ed3610ac5858461087b565b9063ffffffff918281511698838616998a811115610f735750505050610f08610ac5610f0287610b7288610aef565b8461087b565b604081015115610f64575b511695868110610f2d5750610f29949550610d4c565b9091565b60449087604051917f9ca3426c00000000000000000000000000000000000000000000000000000000835260048301526024820152fd5b50610f6e8261088c565b610f13565b93509550955096915014600014610f8a5750509190565b82610a639395505b9091610fe690610fa0610d18565b507affffffffffffffffffffffffffffffffffffffffffffffffffffff926bffffffffffffffffffffffff8460208301511692169063ffffffff938480925116876108d2565b169084828202169181830414901517156108e85761100391610917565b9061100c61071d565b93168352166020820152600160408201529056fea2646970667358221220c9b08349016bbf041415e42d6dc6eff71a3f2129bead43784c9adba3997895fc64736f6c63430008180033
Loading...
Loading
Loading...
Loading
Multichain Portfolio | 30 Chains
Chain | Token | Portfolio % | Price | Amount | Value |
---|
Loading...
Loading
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.