Source Code
Overview
ETH Balance
0 ETH
ETH Value
$0.00| Transaction Hash |
|
Block
|
From
|
To
|
|||||
|---|---|---|---|---|---|---|---|---|---|
Latest 25 internal transactions (View All)
| Parent Transaction Hash | Block | From | To | |||
|---|---|---|---|---|---|---|
| 72084757 | 1049 days ago | 0 ETH | ||||
| 72084757 | 1049 days ago | 0 ETH | ||||
| 72081795 | 1049 days ago | 0 ETH | ||||
| 72081795 | 1049 days ago | 0 ETH | ||||
| 72073809 | 1049 days ago | 0 ETH | ||||
| 72073809 | 1049 days ago | 0 ETH | ||||
| 72072477 | 1049 days ago | 0 ETH | ||||
| 72072477 | 1049 days ago | 0 ETH | ||||
| 72072335 | 1049 days ago | 0 ETH | ||||
| 72072335 | 1049 days ago | 0 ETH | ||||
| 72072056 | 1049 days ago | 0 ETH | ||||
| 72072056 | 1049 days ago | 0 ETH | ||||
| 72070843 | 1049 days ago | 0 ETH | ||||
| 72070843 | 1049 days ago | 0 ETH | ||||
| 72068760 | 1049 days ago | 0 ETH | ||||
| 72064430 | 1049 days ago | 0 ETH | ||||
| 72064430 | 1049 days ago | 0 ETH | ||||
| 72063911 | 1049 days ago | 0 ETH | ||||
| 72063911 | 1049 days ago | 0 ETH | ||||
| 72063476 | 1049 days ago | 0 ETH | ||||
| 72063476 | 1049 days ago | 0 ETH | ||||
| 72060869 | 1049 days ago | 0 ETH | ||||
| 72060869 | 1049 days ago | 0 ETH | ||||
| 72058929 | 1049 days ago | 0 ETH | ||||
| 72058929 | 1049 days ago | 0 ETH |
Cross-Chain Transactions
Loading...
Loading
Contract Name:
OracleLib
Compiler Version
v0.8.17+commit.8df45f5f
Optimization Enabled:
Yes with 90000 runs
Other Settings:
default evmVersion
Contract Source Code (Solidity Standard Json-Input format)
// 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
);
}
}
}// 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);
}{
"optimizer": {
"enabled": true,
"runs": 90000
},
"outputSelection": {
"*": {
"*": [
"evm.bytecode",
"evm.deployedBytecode",
"devdoc",
"userdoc",
"metadata",
"abi"
]
}
},
"libraries": {}
}Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
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"}]Contract Creation Code
6114be61003a600b82828239805160001a60731461002d57634e487b7160e01b600052600060045260246000fd5b30600052607381538281f3fe73000000000000000000000000000000000000000030146080604052600436106100925760003560e01c80635d276259116100655780635d2762591461016d578063b8d236ac1461018e578063ca7dab2c146101a1578063f8500bcc1461020c57600080fd5b80631dd421ce14610097578063335129ad146100c05780634af74b68146100ff578063587cdc061461013a575b600080fd5b6100aa6100a5366004610dce565b61022c565b6040516100b79190610ec8565b60405180910390f35b6100d36100ce366004610f29565b61033e565b6040517affffffffffffffffffffffffffffffffffffffffffffffffffffff90911681526020016100b7565b81801561010b57600080fd5b5061011f61011a366004610f6e565b610502565b6040805161ffff9384168152929091166020830152016100b7565b81801561014657600080fd5b5061015a610155366004610f97565b6106dd565b60405161ffff90911681526020016100b7565b61018061017b366004610fd3565b6107a5565b6040516100b7929190611020565b61018061019c3660046110a6565b6109e4565b8180156101ad57600080fd5b5061011f6101bc366004611104565b6040805160608101825263ffffffff92909216808352600060208401526001929091018290527f010000000000000000000000000000000000000000000000000000000000000017909155908190565b61021f61021a366004611130565b610c69565b6040516100b791906111ed565b60608161ffff1660000361026c576040517f6a86842100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b845167ffffffffffffffff81111561028657610286610d22565b6040519080825280602002602001820160405280156102af578160200160208202803683370190505b50905060005b8151811015610333576102e588888884815181106102d5576102d5611235565b602002602001015188888861033e565b8282815181106102f7576102f7611235565b7affffffffffffffffffffffffffffffffffffffffffffffffffffff9092166020928302919091019091015261032c81611293565b90506102b5565b509695505050505050565b60008463ffffffff16600003610408576000878461ffff1661ffff811061036757610367611235565b60408051606081018252919092015463ffffffff80821680845264010000000083047affffffffffffffffffffffffffffffffffffffffffffffffffffff1660208501527f010000000000000000000000000000000000000000000000000000000000000090920460ff16151593830193909352909250908816146103fd576103f1818887610c69565b602001519150506104f8565b6020015190506104f8565b600061041486886112cb565b90506000806104268a848989896109e4565b91509150816000015163ffffffff168363ffffffff160361044f57506020015191506104f89050565b806000015163ffffffff168363ffffffff1603610474576020015192506104f8915050565b8151815161048291906112cb565b63ffffffff1682600001518461049891906112cb565b63ffffffff16836020015183602001516104b291906112ef565b7affffffffffffffffffffffffffffffffffffffffffffffffffffff166104d99190611323565b6104e39190611369565b82602001516104f2919061137d565b93505050505b9695505050505050565b6000806000888861ffff1661ffff811061051e5761051e611235565b60408051606081018252919092015463ffffffff80821680845264010000000083047affffffffffffffffffffffffffffffffffffffffffffffffffffff1660208501527f010000000000000000000000000000000000000000000000000000000000000090920460ff1615159383019390935290925090881690036105aa57878592509250506106d2565b8461ffff168461ffff161180156105d257506105c76001866113b1565b61ffff168861ffff16145b156105df578391506105e3565b8491505b816105ef8960016113cc565b6105f991906113e7565b9250610606818888610c69565b898461ffff1661ffff811061061d5761061d611235565b825191018054602084015160409094015115157f0100000000000000000000000000000000000000000000000000000000000000027effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7affffffffffffffffffffffffffffffffffffffffffffffffffffff909516640100000000027fff0000000000000000000000000000000000000000000000000000000000000090921663ffffffff909416939093171792909216179055505b965096945050505050565b60008261ffff1660000361071d576040517fdc14e8a100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8261ffff168261ffff161161073357508161079e565b825b8261ffff168161ffff1614610799576001858261ffff1661ffff811061075d5761075d611235565b0180547fffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000001663ffffffff92909216919091179055600101610735565b508190505b9392505050565b6040805160608082018352600080835260208084018290528385018290528451928301855281835282018190529281018390529091836107e68660016113cc565b6107f091906113e7565b61ffff169050600060018561ffff168361080a9190611408565b610814919061141b565b905060005b60026108258385611408565b61082f9190611369565b90508861084061ffff88168361142e565b61ffff811061085157610851611235565b60408051606081018252919092015463ffffffff8116825264010000000081047affffffffffffffffffffffffffffffffffffffffffffffffffffff1660208301527f0100000000000000000000000000000000000000000000000000000000000000900460ff16151591810182905295506108d9576108d2816001611408565b9250610819565b8861ffff87166108ea836001611408565b6108f4919061142e565b61ffff811061090557610905611235565b60408051606081018252919092015463ffffffff808216835264010000000082047affffffffffffffffffffffffffffffffffffffffffffffffffffff1660208401527f010000000000000000000000000000000000000000000000000000000000000090910460ff16151592820192909252865190955089821691161180159081906109a25750846000015163ffffffff168963ffffffff1611155b156109ad57506109d8565b806109c4576109bd60018361141b565b92506109d2565b6109cf826001611408565b93505b50610819565b50505094509492505050565b60408051606081018252600080825260208201819052918101919091526040805160608101825260008082526020820181905291810191909152868461ffff1661ffff8110610a3557610a35611235565b60408051606081018252919092015463ffffffff80821680845264010000000083047affffffffffffffffffffffffffffffffffffffffffffffffffffff1660208501527f010000000000000000000000000000000000000000000000000000000000000090920460ff1615159383019390935290935090871610610ada57815163ffffffff878116911614610c5f5781610ad1838888610c69565b91509150610c5f565b8683610ae78660016113cc565b610af191906113e7565b61ffff1661ffff8110610b0657610b06611235565b60408051606081018252919092015463ffffffff8116825264010000000081047affffffffffffffffffffffffffffffffffffffffffffffffffffff1660208301527f0100000000000000000000000000000000000000000000000000000000000000900460ff1615159181018290529250610bed5760408051606081018252885463ffffffff8116825264010000000081047affffffffffffffffffffffffffffffffffffffffffffffffffffff1660208301527f0100000000000000000000000000000000000000000000000000000000000000900460ff1615159181019190915291505b816000015163ffffffff168663ffffffff161015610c4e5781516040517f9ca3426c00000000000000000000000000000000000000000000000000000000815263ffffffff8089166004830152909116602482015260440160405180910390fd5b610c5a878786866107a5565b915091505b9550959350505050565b604080516060810182526000808252602082018190529181019190915260405180606001604052808463ffffffff168152602001856000015185610cad91906112cb565b610ccb9063ffffffff166bffffffffffffffffffffffff8616611442565b8660200151610cda919061137d565b7affffffffffffffffffffffffffffffffffffffffffffffffffffff1681526001602090910152949350505050565b803563ffffffff81168114610d1d57600080fd5b919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016810167ffffffffffffffff81118282101715610d9857610d98610d22565b604052919050565b80356bffffffffffffffffffffffff81168114610d1d57600080fd5b803561ffff81168114610d1d57600080fd5b60008060008060008060c08789031215610de757600080fd5b863595506020610df8818901610d09565b9550604088013567ffffffffffffffff80821115610e1557600080fd5b818a0191508a601f830112610e2957600080fd5b813581811115610e3b57610e3b610d22565b8060051b9150610e4c848301610d51565b818152918301840191848101908d841115610e6657600080fd5b938501935b83851015610e8b57610e7c85610d09565b82529385019390850190610e6b565b809950505050505050610ea060608801610da0565b9250610eae60808801610dbc565b9150610ebc60a08801610dbc565b90509295509295509295565b6020808252825182820181905260009190848201906040850190845b81811015610f1d5783517affffffffffffffffffffffffffffffffffffffffffffffffffffff1683529284019291840191600101610ee4565b50909695505050505050565b60008060008060008060c08789031215610f4257600080fd5b86359550610f5260208801610d09565b9450610f6060408801610d09565b9350610ea060608801610da0565b60008060008060008060c08789031215610f8757600080fd5b86359550610f5260208801610dbc565b600080600060608486031215610fac57600080fd5b83359250610fbc60208501610dbc565b9150610fca60408501610dbc565b90509250925092565b60008060008060808587031215610fe957600080fd5b84359350610ff960208601610d09565b925061100760408601610dbc565b915061101560608601610dbc565b905092959194509250565b825163ffffffff1681526020808401517affffffffffffffffffffffffffffffffffffffffffffffffffffff169082015260408084015115159082015260c08101825163ffffffff16606083015260208301517affffffffffffffffffffffffffffffffffffffffffffffffffffff1660808301526040830151151560a083015261079e565b600080600080600060a086880312156110be57600080fd5b853594506110ce60208701610d09565b93506110dc60408701610da0565b92506110ea60608701610dbc565b91506110f860808701610dbc565b90509295509295909350565b6000806040838503121561111757600080fd5b8235915061112760208401610d09565b90509250929050565b600080600083850360a081121561114657600080fd5b606081121561115457600080fd5b506040516060810181811067ffffffffffffffff8211171561117857611178610d22565b60405261118485610d09565b815260208501357affffffffffffffffffffffffffffffffffffffffffffffffffffff811681146111b457600080fd5b6020820152604085013580151581146111cc57600080fd5b604082015292506111df60608501610d09565b9150610fca60808501610da0565b815163ffffffff1681526020808301517affffffffffffffffffffffffffffffffffffffffffffffffffffff1690820152604080830151151590820152606081015b92915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82036112c4576112c4611264565b5060010190565b63ffffffff8281168282160390808211156112e8576112e8611264565b5092915050565b7affffffffffffffffffffffffffffffffffffffffffffffffffffff8281168282160390808211156112e8576112e8611264565b808202811582820484141761122f5761122f611264565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b6000826113785761137861133a565b500490565b7affffffffffffffffffffffffffffffffffffffffffffffffffffff8181168382160190808211156112e8576112e8611264565b61ffff8281168282160390808211156112e8576112e8611264565b61ffff8181168382160190808211156112e8576112e8611264565b600061ffff808416806113fc576113fc61133a565b92169190910692915050565b8082018082111561122f5761122f611264565b8181038181111561122f5761122f611264565b60008261143d5761143d61133a565b500690565b7affffffffffffffffffffffffffffffffffffffffffffffffffffff82811682821681810283169291811582850482141761147f5761147f611264565b5050509291505056fea26469706673582212202b17d26fd0fe72532fe132a86b2376a7613a962fb0811c48b13560de75856a4c64736f6c63430008110033
Deployed Bytecode
0x73963ddbb35c1ae44e2a159e3b5fb5177e0b32660d30146080604052600436106100925760003560e01c80635d276259116100655780635d2762591461016d578063b8d236ac1461018e578063ca7dab2c146101a1578063f8500bcc1461020c57600080fd5b80631dd421ce14610097578063335129ad146100c05780634af74b68146100ff578063587cdc061461013a575b600080fd5b6100aa6100a5366004610dce565b61022c565b6040516100b79190610ec8565b60405180910390f35b6100d36100ce366004610f29565b61033e565b6040517affffffffffffffffffffffffffffffffffffffffffffffffffffff90911681526020016100b7565b81801561010b57600080fd5b5061011f61011a366004610f6e565b610502565b6040805161ffff9384168152929091166020830152016100b7565b81801561014657600080fd5b5061015a610155366004610f97565b6106dd565b60405161ffff90911681526020016100b7565b61018061017b366004610fd3565b6107a5565b6040516100b7929190611020565b61018061019c3660046110a6565b6109e4565b8180156101ad57600080fd5b5061011f6101bc366004611104565b6040805160608101825263ffffffff92909216808352600060208401526001929091018290527f010000000000000000000000000000000000000000000000000000000000000017909155908190565b61021f61021a366004611130565b610c69565b6040516100b791906111ed565b60608161ffff1660000361026c576040517f6a86842100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b845167ffffffffffffffff81111561028657610286610d22565b6040519080825280602002602001820160405280156102af578160200160208202803683370190505b50905060005b8151811015610333576102e588888884815181106102d5576102d5611235565b602002602001015188888861033e565b8282815181106102f7576102f7611235565b7affffffffffffffffffffffffffffffffffffffffffffffffffffff9092166020928302919091019091015261032c81611293565b90506102b5565b509695505050505050565b60008463ffffffff16600003610408576000878461ffff1661ffff811061036757610367611235565b60408051606081018252919092015463ffffffff80821680845264010000000083047affffffffffffffffffffffffffffffffffffffffffffffffffffff1660208501527f010000000000000000000000000000000000000000000000000000000000000090920460ff16151593830193909352909250908816146103fd576103f1818887610c69565b602001519150506104f8565b6020015190506104f8565b600061041486886112cb565b90506000806104268a848989896109e4565b91509150816000015163ffffffff168363ffffffff160361044f57506020015191506104f89050565b806000015163ffffffff168363ffffffff1603610474576020015192506104f8915050565b8151815161048291906112cb565b63ffffffff1682600001518461049891906112cb565b63ffffffff16836020015183602001516104b291906112ef565b7affffffffffffffffffffffffffffffffffffffffffffffffffffff166104d99190611323565b6104e39190611369565b82602001516104f2919061137d565b93505050505b9695505050505050565b6000806000888861ffff1661ffff811061051e5761051e611235565b60408051606081018252919092015463ffffffff80821680845264010000000083047affffffffffffffffffffffffffffffffffffffffffffffffffffff1660208501527f010000000000000000000000000000000000000000000000000000000000000090920460ff1615159383019390935290925090881690036105aa57878592509250506106d2565b8461ffff168461ffff161180156105d257506105c76001866113b1565b61ffff168861ffff16145b156105df578391506105e3565b8491505b816105ef8960016113cc565b6105f991906113e7565b9250610606818888610c69565b898461ffff1661ffff811061061d5761061d611235565b825191018054602084015160409094015115157f0100000000000000000000000000000000000000000000000000000000000000027effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7affffffffffffffffffffffffffffffffffffffffffffffffffffff909516640100000000027fff0000000000000000000000000000000000000000000000000000000000000090921663ffffffff909416939093171792909216179055505b965096945050505050565b60008261ffff1660000361071d576040517fdc14e8a100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8261ffff168261ffff161161073357508161079e565b825b8261ffff168161ffff1614610799576001858261ffff1661ffff811061075d5761075d611235565b0180547fffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000001663ffffffff92909216919091179055600101610735565b508190505b9392505050565b6040805160608082018352600080835260208084018290528385018290528451928301855281835282018190529281018390529091836107e68660016113cc565b6107f091906113e7565b61ffff169050600060018561ffff168361080a9190611408565b610814919061141b565b905060005b60026108258385611408565b61082f9190611369565b90508861084061ffff88168361142e565b61ffff811061085157610851611235565b60408051606081018252919092015463ffffffff8116825264010000000081047affffffffffffffffffffffffffffffffffffffffffffffffffffff1660208301527f0100000000000000000000000000000000000000000000000000000000000000900460ff16151591810182905295506108d9576108d2816001611408565b9250610819565b8861ffff87166108ea836001611408565b6108f4919061142e565b61ffff811061090557610905611235565b60408051606081018252919092015463ffffffff808216835264010000000082047affffffffffffffffffffffffffffffffffffffffffffffffffffff1660208401527f010000000000000000000000000000000000000000000000000000000000000090910460ff16151592820192909252865190955089821691161180159081906109a25750846000015163ffffffff168963ffffffff1611155b156109ad57506109d8565b806109c4576109bd60018361141b565b92506109d2565b6109cf826001611408565b93505b50610819565b50505094509492505050565b60408051606081018252600080825260208201819052918101919091526040805160608101825260008082526020820181905291810191909152868461ffff1661ffff8110610a3557610a35611235565b60408051606081018252919092015463ffffffff80821680845264010000000083047affffffffffffffffffffffffffffffffffffffffffffffffffffff1660208501527f010000000000000000000000000000000000000000000000000000000000000090920460ff1615159383019390935290935090871610610ada57815163ffffffff878116911614610c5f5781610ad1838888610c69565b91509150610c5f565b8683610ae78660016113cc565b610af191906113e7565b61ffff1661ffff8110610b0657610b06611235565b60408051606081018252919092015463ffffffff8116825264010000000081047affffffffffffffffffffffffffffffffffffffffffffffffffffff1660208301527f0100000000000000000000000000000000000000000000000000000000000000900460ff1615159181018290529250610bed5760408051606081018252885463ffffffff8116825264010000000081047affffffffffffffffffffffffffffffffffffffffffffffffffffff1660208301527f0100000000000000000000000000000000000000000000000000000000000000900460ff1615159181019190915291505b816000015163ffffffff168663ffffffff161015610c4e5781516040517f9ca3426c00000000000000000000000000000000000000000000000000000000815263ffffffff8089166004830152909116602482015260440160405180910390fd5b610c5a878786866107a5565b915091505b9550959350505050565b604080516060810182526000808252602082018190529181019190915260405180606001604052808463ffffffff168152602001856000015185610cad91906112cb565b610ccb9063ffffffff166bffffffffffffffffffffffff8616611442565b8660200151610cda919061137d565b7affffffffffffffffffffffffffffffffffffffffffffffffffffff1681526001602090910152949350505050565b803563ffffffff81168114610d1d57600080fd5b919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016810167ffffffffffffffff81118282101715610d9857610d98610d22565b604052919050565b80356bffffffffffffffffffffffff81168114610d1d57600080fd5b803561ffff81168114610d1d57600080fd5b60008060008060008060c08789031215610de757600080fd5b863595506020610df8818901610d09565b9550604088013567ffffffffffffffff80821115610e1557600080fd5b818a0191508a601f830112610e2957600080fd5b813581811115610e3b57610e3b610d22565b8060051b9150610e4c848301610d51565b818152918301840191848101908d841115610e6657600080fd5b938501935b83851015610e8b57610e7c85610d09565b82529385019390850190610e6b565b809950505050505050610ea060608801610da0565b9250610eae60808801610dbc565b9150610ebc60a08801610dbc565b90509295509295509295565b6020808252825182820181905260009190848201906040850190845b81811015610f1d5783517affffffffffffffffffffffffffffffffffffffffffffffffffffff1683529284019291840191600101610ee4565b50909695505050505050565b60008060008060008060c08789031215610f4257600080fd5b86359550610f5260208801610d09565b9450610f6060408801610d09565b9350610ea060608801610da0565b60008060008060008060c08789031215610f8757600080fd5b86359550610f5260208801610dbc565b600080600060608486031215610fac57600080fd5b83359250610fbc60208501610dbc565b9150610fca60408501610dbc565b90509250925092565b60008060008060808587031215610fe957600080fd5b84359350610ff960208601610d09565b925061100760408601610dbc565b915061101560608601610dbc565b905092959194509250565b825163ffffffff1681526020808401517affffffffffffffffffffffffffffffffffffffffffffffffffffff169082015260408084015115159082015260c08101825163ffffffff16606083015260208301517affffffffffffffffffffffffffffffffffffffffffffffffffffff1660808301526040830151151560a083015261079e565b600080600080600060a086880312156110be57600080fd5b853594506110ce60208701610d09565b93506110dc60408701610da0565b92506110ea60608701610dbc565b91506110f860808701610dbc565b90509295509295909350565b6000806040838503121561111757600080fd5b8235915061112760208401610d09565b90509250929050565b600080600083850360a081121561114657600080fd5b606081121561115457600080fd5b506040516060810181811067ffffffffffffffff8211171561117857611178610d22565b60405261118485610d09565b815260208501357affffffffffffffffffffffffffffffffffffffffffffffffffffff811681146111b457600080fd5b6020820152604085013580151581146111cc57600080fd5b604082015292506111df60608501610d09565b9150610fca60808501610da0565b815163ffffffff1681526020808301517affffffffffffffffffffffffffffffffffffffffffffffffffffff1690820152604080830151151590820152606081015b92915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82036112c4576112c4611264565b5060010190565b63ffffffff8281168282160390808211156112e8576112e8611264565b5092915050565b7affffffffffffffffffffffffffffffffffffffffffffffffffffff8281168282160390808211156112e8576112e8611264565b808202811582820484141761122f5761122f611264565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b6000826113785761137861133a565b500490565b7affffffffffffffffffffffffffffffffffffffffffffffffffffff8181168382160190808211156112e8576112e8611264565b61ffff8281168282160390808211156112e8576112e8611264565b61ffff8181168382160190808211156112e8576112e8611264565b600061ffff808416806113fc576113fc61133a565b92169190910692915050565b8082018082111561122f5761122f611264565b8181038181111561122f5761122f611264565b60008261143d5761143d61133a565b500690565b7affffffffffffffffffffffffffffffffffffffffffffffffffffff82811682821681810283169291811582850482141761147f5761147f611264565b5050509291505056fea26469706673582212202b17d26fd0fe72532fe132a86b2376a7613a962fb0811c48b13560de75856a4c64736f6c63430008110033
Loading...
Loading
Loading...
Loading
Loading...
Loading
Net Worth in USD
$0.00
Net Worth in ETH
0
Multichain Portfolio | 35 Chains
| Chain | Token | Portfolio % | Price | Amount | Value |
|---|
Loading...
Loading
Loading...
Loading
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.