Source Code
Overview
S Balance
S Value
$0.00View more zero value Internal Transactions in Advanced View mode
Advanced mode:
Cross-Chain Transactions
Loading...
Loading
Contract Name:
OracleRouterChainlink
Compiler Version
v0.8.30+commit.73712a01
Optimization Enabled:
Yes with 100000 runs
Other Settings:
cancun EvmVersion
Contract Source Code (Solidity Standard Json-Input format)
// SPDX-License-Identifier: UNLICENSED
pragma solidity ^0.8.30;
import {Initializable} from "../utils/Initializable.sol";
/**
* OracleRouter (Chainlink passthrough, resilient)
*
* - priceUSD(asset) -> USD WAD (1e18) using asset's Chainlink feed
* - exchangeRate(st, base) -> base per st (WAD) using pair feed (or optional price-ratio fallback)
* - snapshot(...) -> captures priceUSD() (and optional pairs) for MEV-resistant RFQ fills
*
* Safety:
* - Per-asset heartbeat (staleness) checks
* - Per-asset deviation caps vs lastGoodPrice (bps); falls back to lastGoodPrice instead of reverting
* - Similar guards for exchangeRate pairs
*
* Notes:
* - Feeds must be configured to return USD (8 decimals typical). If your feed is non-USD quoted,
* add a quote conversion hook or configure the correct USD feed.
* - For pairs: if no dedicated pair feed, you can enable price-ratio fallback.
*/
interface AggregatorV3Interface {
function latestRoundData()
external
view
returns (
uint80 roundId,
int256 answer,
uint256 startedAt,
uint256 updatedAt,
uint80 answeredInRound
);
function decimals() external view returns (uint8);
}
contract OracleRouterChainlink is Initializable {
uint256 private constant WAD = 1e18;
uint256 private constant BPS = 1e4;
// Custom errors
error Unauthorized();
error NotGuardian();
error PriceFeedDisabled();
error AggregatorZeroAddress();
error NegativePrice();
error RoundNotComplete();
error StalePrice();
/*//////////////////////////////////////////////////////////////
ADMIN
//////////////////////////////////////////////////////////////*/
address public owner;
address public guardian;
modifier onlyOwner() {
_onlyOwner();
_;
}
modifier onlyGuardianOrOwner() {
_onlyGuardianOrOwner();
_;
}
function _onlyOwner() internal view {
if (msg.sender != owner) revert Unauthorized();
}
function _onlyGuardianOrOwner() internal view {
if (msg.sender != guardian && msg.sender != owner) revert NotGuardian();
}
event OwnerSet(address indexed o);
event GuardianSet(address indexed g);
function initialize(address _owner) external initializer {
owner = _owner;
guardian = _owner;
emit OwnerSet(_owner);
emit GuardianSet(_owner);
}
function setOwner(address o) external onlyOwner {
owner = o;
emit OwnerSet(o);
}
function setGuardian(address g) external onlyOwner {
guardian = g;
emit GuardianSet(g);
}
/*//////////////////////////////////////////////////////////////
PRICE FEEDS (USD)
//////////////////////////////////////////////////////////////*/
struct Feed {
AggregatorV3Interface agg; // Chainlink aggregator
uint32 heartbeat; // max staleness (seconds)
bool enabled;
uint16 deviationBps; // optional clamp vs lastGood (0 = disabled)
uint256 lastGoodPriceWad; // stored anchor (WAD)
bool fallbackOnStale; // if true, clamp to anchor on staleness when anchor != 0
}
mapping(address => Feed) public priceFeed;
event PriceFeedSet(address indexed asset, address indexed agg, uint32 heartbeat, bool enabled);
event PriceDeviationSet(address indexed asset, uint16 deviationBps);
event PriceAnchorSet(address indexed asset, uint256 lastGoodPriceWad);
event StaleFallbackSet(address indexed asset, bool enabled);
function setPriceFeed(address asset, address agg, uint32 heartbeat, bool enabled)
external
onlyOwner
{
Feed storage f = priceFeed[asset];
f.agg = AggregatorV3Interface(agg);
f.heartbeat = heartbeat;
f.enabled = enabled;
emit PriceFeedSet(asset, agg, heartbeat, enabled);
}
function setPriceDeviation(address asset, uint16 deviationBps) external onlyOwner {
priceFeed[asset].deviationBps = deviationBps;
emit PriceDeviationSet(asset, deviationBps);
}
function setStaleFallback(address asset, bool enabled) external onlyOwner {
priceFeed[asset].fallbackOnStale = enabled;
emit StaleFallbackSet(asset, enabled);
}
// Set anchor from current feed (guardian/owner)
function primeLastGoodPrice(address asset) external onlyGuardianOrOwner {
Feed storage f = priceFeed[asset];
if (!f.enabled) revert PriceFeedDisabled();
uint256 px = _readChainlinkWad(f.agg, f.heartbeat);
f.lastGoodPriceWad = px;
emit PriceAnchorSet(asset, px);
}
// Emergency/manual anchor set
function setLastGoodPrice(address asset, uint256 priceWad) external onlyGuardianOrOwner {
priceFeed[asset].lastGoodPriceWad = priceWad;
emit PriceAnchorSet(asset, priceWad);
}
/*//////////////////////////////////////////////////////////////
CORE: priceUSD / exchangeRate
//////////////////////////////////////////////////////////////*/
event PriceClamped(address indexed asset, uint256 observedWad, uint256 usedWad);
function priceUSD(address asset) public view returns (uint256 pxWad) {
Feed storage f = priceFeed[asset];
if (!f.enabled) revert PriceFeedDisabled();
AggregatorV3Interface agg = f.agg;
if (address(agg) == address(0)) revert AggregatorZeroAddress();
(uint80 roundId, int256 ans,, uint256 updatedAt, uint80 answeredInRound) =
agg.latestRoundData();
if (ans <= 0) revert NegativePrice();
if (answeredInRound < roundId) revert RoundNotComplete();
// scale to 1e18
uint256 u = uint256(ans);
uint8 aggDecimals = agg.decimals();
uint256 px = aggDecimals == 18
? u
: (aggDecimals < 18 ? u * (10 ** (18 - aggDecimals)) : u / (10 ** (aggDecimals - 18)));
// Staleness check with optional fallback to anchor
if (block.timestamp - updatedAt > f.heartbeat) {
uint256 anchorWad = f.lastGoodPriceWad;
if (f.fallbackOnStale && anchorWad != 0) {
return anchorWad;
}
revert StalePrice();
}
uint16 devBps = f.deviationBps;
uint256 anchor = f.lastGoodPriceWad;
if (devBps == 0 || anchor == 0) return px;
uint256 diff = px > anchor ? (px - anchor) : (anchor - px);
if (diff * BPS > anchor * devBps) {
return anchor; // clamp to last good
}
return px;
}
/*//////////////////////////////////////////////////////////////
INTERNAL HELPERS
//////////////////////////////////////////////////////////////*/
function _readChainlinkWad(AggregatorV3Interface agg, uint32 heartbeat)
internal
view
returns (uint256)
{
if (address(agg) == address(0)) revert AggregatorZeroAddress();
(uint80 roundId, int256 ans,, uint256 updatedAt, uint80 answeredInRound) =
agg.latestRoundData();
if (ans <= 0) revert NegativePrice();
if (answeredInRound < roundId) revert RoundNotComplete();
if (block.timestamp - updatedAt > heartbeat) revert StalePrice();
// scale to 1e18
uint256 u = uint256(ans);
uint8 aggDecimals = agg.decimals();
if (aggDecimals == 18) return u;
if (aggDecimals < 18) {
return u * (10 ** (18 - aggDecimals));
} else {
return u / (10 ** (aggDecimals - 18));
}
}
/*//////////////////////////////////////////////////////////////
GUARDIAN CONTROLS
//////////////////////////////////////////////////////////////*/
// Quickly disable a feed (price or ER) if suspected compromise
function disablePrice(address asset) external onlyGuardianOrOwner {
Feed storage f = priceFeed[asset];
f.enabled = false;
emit PriceFeedSet(asset, address(f.agg), f.heartbeat, false);
}
}// SPDX-License-Identifier: UNLICENSED
pragma solidity ^0.8.30;
/**
* Minimal initializer guard for proxy-based deployments.
* Mirrors the common pattern: one-time initialize() replacing constructors.
*/
abstract contract Initializable {
bool private _initialized;
modifier initializer() {
_initializer();
_;
}
function _initializer() internal {
require(!_initialized, "Initializable: already initialized");
_initialized = true;
}
function initialized() public view returns (bool) {
return _initialized;
}
}{
"remappings": [
"@openzeppelin/contracts/=lib/openzeppelin-contracts/contracts/",
"erc4626-tests/=lib/openzeppelin-contracts/lib/erc4626-tests/",
"forge-std/=lib/forge-std/src/",
"halmos-cheatcodes/=lib/openzeppelin-contracts/lib/halmos-cheatcodes/src/",
"openzeppelin-contracts/=lib/openzeppelin-contracts/"
],
"optimizer": {
"enabled": true,
"runs": 100000
},
"metadata": {
"useLiteralContent": false,
"bytecodeHash": "none",
"appendCBOR": false
},
"outputSelection": {
"*": {
"*": [
"evm.bytecode",
"evm.deployedBytecode",
"devdoc",
"userdoc",
"metadata",
"abi"
]
}
},
"evmVersion": "cancun",
"viaIR": true
}Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
Contract ABI
API[{"inputs":[],"name":"AggregatorZeroAddress","type":"error"},{"inputs":[],"name":"NegativePrice","type":"error"},{"inputs":[],"name":"NotGuardian","type":"error"},{"inputs":[],"name":"PriceFeedDisabled","type":"error"},{"inputs":[],"name":"RoundNotComplete","type":"error"},{"inputs":[],"name":"StalePrice","type":"error"},{"inputs":[],"name":"Unauthorized","type":"error"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"g","type":"address"}],"name":"GuardianSet","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"o","type":"address"}],"name":"OwnerSet","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"asset","type":"address"},{"indexed":false,"internalType":"uint256","name":"lastGoodPriceWad","type":"uint256"}],"name":"PriceAnchorSet","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"asset","type":"address"},{"indexed":false,"internalType":"uint256","name":"observedWad","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"usedWad","type":"uint256"}],"name":"PriceClamped","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"asset","type":"address"},{"indexed":false,"internalType":"uint16","name":"deviationBps","type":"uint16"}],"name":"PriceDeviationSet","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"asset","type":"address"},{"indexed":true,"internalType":"address","name":"agg","type":"address"},{"indexed":false,"internalType":"uint32","name":"heartbeat","type":"uint32"},{"indexed":false,"internalType":"bool","name":"enabled","type":"bool"}],"name":"PriceFeedSet","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"asset","type":"address"},{"indexed":false,"internalType":"bool","name":"enabled","type":"bool"}],"name":"StaleFallbackSet","type":"event"},{"inputs":[{"internalType":"address","name":"asset","type":"address"}],"name":"disablePrice","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"guardian","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_owner","type":"address"}],"name":"initialize","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"initialized","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"priceFeed","outputs":[{"internalType":"contract AggregatorV3Interface","name":"agg","type":"address"},{"internalType":"uint32","name":"heartbeat","type":"uint32"},{"internalType":"bool","name":"enabled","type":"bool"},{"internalType":"uint16","name":"deviationBps","type":"uint16"},{"internalType":"uint256","name":"lastGoodPriceWad","type":"uint256"},{"internalType":"bool","name":"fallbackOnStale","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"asset","type":"address"}],"name":"priceUSD","outputs":[{"internalType":"uint256","name":"pxWad","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"asset","type":"address"}],"name":"primeLastGoodPrice","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"g","type":"address"}],"name":"setGuardian","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"asset","type":"address"},{"internalType":"uint256","name":"priceWad","type":"uint256"}],"name":"setLastGoodPrice","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"o","type":"address"}],"name":"setOwner","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"asset","type":"address"},{"internalType":"uint16","name":"deviationBps","type":"uint16"}],"name":"setPriceDeviation","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"asset","type":"address"},{"internalType":"address","name":"agg","type":"address"},{"internalType":"uint32","name":"heartbeat","type":"uint32"},{"internalType":"bool","name":"enabled","type":"bool"}],"name":"setPriceFeed","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"asset","type":"address"},{"internalType":"bool","name":"enabled","type":"bool"}],"name":"setStaleFallback","outputs":[],"stateMutability":"nonpayable","type":"function"}]Contract Creation Code
6080806040523460155761123c908161001a8239f35b5f80fdfe60806040526004361015610011575f80fd5b5f3560e01c806313af403514610a64578063158ef93e14610a255780631fd48b9a146109675780632096631a146108715780633e4a106a146107db578063452a93201461078a57806366d571de146106ae5780638a0dac4a146106095780638da5cb5b146105b6578063903456711461044a578063c4d66de8146102b4578063d70d170f146101ea578063dfc73912146101005763f4d057ff146100b3575f80fd5b346100fc5760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126100fc5760206100f46100ef610b22565b610cef565b604051908152f35b5f80fd5b346100fc5760407ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126100fc57610137610b22565b6024359061ffff8216908183036100fc577f44494b6ff2f5bddfbf2de8bad3e23df5b23bcad6eaef133b3f4c9b6f38055e089173ffffffffffffffffffffffffffffffffffffffff60209261018a610ffc565b1693845f526002835260405f20907fffffffffff0000ffffffffffffffffffffffffffffffffffffffffffffffffff7affff0000000000000000000000000000000000000000000000000083549260c81b169116179055604051908152a2005b346100fc5760407ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126100fc57610221610b22565b602435908115158092036100fc57602073ffffffffffffffffffffffffffffffffffffffff7f7c6c1667a7354fa59fddfe61245b413612254fc1df0d5db611fcf76fb373dae292610270610ffc565b1692835f5260028252600260405f20017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0081541660ff8316179055604051908152a2005b346100fc5760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126100fc576102eb610b22565b5f5460ff81166103c6576001907fffffffffffffffffffffff00000000000000000000000000000000000000000074ffffffffffffffffffffffffffffffffffffffff0073ffffffffffffffffffffffffffffffffffffffff85169460081b16911617175f55807fffffffffffffffffffffffff00000000000000000000000000000000000000006001541617600155807f50146d0e3c60aa1d17a70635b05494f864e86144a2201275021014fbf08bafe25f80a27fe6c09ffe4572dc9ceaa5ddde4ae41befa655d6fdfe8052077af0970f700e942e5f80a2005b60846040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602260248201527f496e697469616c697a61626c653a20616c726561647920696e697469616c697a60448201527f65640000000000000000000000000000000000000000000000000000000000006064820152fd5b346100fc5760807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126100fc57610481610b22565b6024359073ffffffffffffffffffffffffffffffffffffffff82168092036100fc576044359063ffffffff82168083036100fc576064358015158091036100fc5773ffffffffffffffffffffffffffffffffffffffff7f71b00df788cc76317d8d027b8c7c735b1b9b856e1a088689e1990db33852a64a93610501610ffc565b165f8181526002602090815260409182902080547fffffffffffffff0000000000ffffffffffffffffffffffffffffffffffffffff8a167fffffffffffffff000000000000000000000000000000000000000000000000009091161760a09890981b77ffffffff0000000000000000000000000000000000000000169790971760c085901b78ff00000000000000000000000000000000000000000000000016179096558051938452948301919091529290a3005b346100fc575f7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126100fc57602073ffffffffffffffffffffffffffffffffffffffff5f5460081c16604051908152f35b346100fc5760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126100fc5773ffffffffffffffffffffffffffffffffffffffff610655610b22565b61065d610ffc565b16807fffffffffffffffffffffffff000000000000000000000000000000000000000060015416176001557fe6c09ffe4572dc9ceaa5ddde4ae41befa655d6fdfe8052077af0970f700e942e5f80a2005b346100fc5760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126100fc5773ffffffffffffffffffffffffffffffffffffffff6106fa610b22565b610702611047565b16805f52600260205260405f20908154917fffffffffffffff00ffffffffffffffffffffffffffffffffffffffffffffffff831690557f71b00df788cc76317d8d027b8c7c735b1b9b856e1a088689e1990db33852a64a604073ffffffffffffffffffffffffffffffffffffffff81519463ffffffff8160a01c1686525f60208701521693a3005b346100fc575f7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126100fc57602073ffffffffffffffffffffffffffffffffffffffff60015416604051908152f35b346100fc5760407ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126100fc57610812610b22565b7f11a178bb9fc2ed8cab266ee691719245b7d7ce46f0c704e7ae4572528219a5a4602073ffffffffffffffffffffffffffffffffffffffff60243593610856611047565b1692835f526002825280600160405f200155604051908152a2005b346100fc5760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126100fc5773ffffffffffffffffffffffffffffffffffffffff6108bd610b22565b6108c5611047565b16805f52600260205260405f2080549060ff8260c01c161561093f5760016020916109318473ffffffffffffffffffffffffffffffffffffffff63ffffffff7f11a178bb9fc2ed8cab266ee691719245b7d7ce46f0c704e7ae4572528219a5a49760a01c1691166110bb565b9182910155604051908152a2005b7f64bb3412000000000000000000000000000000000000000000000000000000005f5260045ffd5b346100fc5760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126100fc5773ffffffffffffffffffffffffffffffffffffffff6109b3610b22565b165f52600260205260c060405f2080549060ff60026001830154920154169061ffff6040519373ffffffffffffffffffffffffffffffffffffffff8116855263ffffffff8160a01c16602086015260ff81871c161515604086015260c81c1660608401526080830152151560a0820152f35b346100fc575f7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126100fc57602060ff5f54166040519015158152f35b346100fc5760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126100fc5773ffffffffffffffffffffffffffffffffffffffff610ab0610b22565b610ab8610ffc565b5f547fffffffffffffffffffffff0000000000000000000000000000000000000000ff74ffffffffffffffffffffffffffffffffffffffff008360081b169116175f55167f50146d0e3c60aa1d17a70635b05494f864e86144a2201275021014fbf08bafe25f80a2005b6004359073ffffffffffffffffffffffffffffffffffffffff821682036100fc57565b90601f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0910116810190811067ffffffffffffffff821117610b8657604052565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b519069ffffffffffffffffffff821682036100fc57565b908160a09103126100fc57610bde81610bb3565b91602082015191604081015191610bfc608060608401519301610bb3565b90565b908160209103126100fc575160ff811681036100fc5790565b60ff7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffee9116019060ff8211610c4957565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b60ff166012039060ff8211610c4957565b60ff16604d8111610c4957600a0a90565b8115610ca2570490565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b81810292918115918404141715610c4957565b91908203918211610c4957565b73ffffffffffffffffffffffffffffffffffffffff165f52600260205260405f2080549060ff8260c01c161561093f5773ffffffffffffffffffffffffffffffffffffffff8216918215610fd457604051927ffeaf968c00000000000000000000000000000000000000000000000000000000845260a084600481845afa8015610f3f575f905f915f965f92610f9a575b505f831315610f725769ffffffffffffffffffff809116911610610f4a576020600492604051938480927f313ce5670000000000000000000000000000000000000000000000000000000082525afa908115610f3f57610df9925f92610f0e575b5060ff821660128103610ecc57509050935b42610ce2565b63ffffffff8260a01c1610610e815761ffff60019160c81c169101549080158015610e79575b610e745781831115610e6457610e358284610ce2565b905b6127108202918083046127101490151715610c4957610e569083610ccf565b10610e5f575090565b905090565b610e6e8383610ce2565b90610e37565b505090565b508115610e1f565b50905060ff600260018301549201541680610ec3575b610bfc577f19abf40e000000000000000000000000000000000000000000000000000000005f5260045ffd5b50801515610e97565b60121115610ef457610ee8610ee3610eee93610c76565b610c87565b90610ccf565b93610df3565b610f03610ee3610f0993610c18565b90610c98565b610eee565b610f3191925060203d602011610f38575b610f298183610b45565b810190610bff565b905f610de1565b503d610f1f565b6040513d5f823e3d90fd5b7f159c98a0000000000000000000000000000000000000000000000000000000005f5260045ffd5b7f61ca76d2000000000000000000000000000000000000000000000000000000005f5260045ffd5b92505050610fc191945060a03d60a011610fcd575b610fb98183610b45565b810190610bca565b9096939091505f610d80565b503d610faf565b7fa15e78a8000000000000000000000000000000000000000000000000000000005f5260045ffd5b73ffffffffffffffffffffffffffffffffffffffff5f5460081c16330361101f57565b7f82b42900000000000000000000000000000000000000000000000000000000005f5260045ffd5b73ffffffffffffffffffffffffffffffffffffffff6001541633141580611097575b61106f57565b7fef6d0f02000000000000000000000000000000000000000000000000000000005f5260045ffd5b5073ffffffffffffffffffffffffffffffffffffffff5f5460081c16331415611069565b73ffffffffffffffffffffffffffffffffffffffff16908115610fd457604051907ffeaf968c00000000000000000000000000000000000000000000000000000000825260a082600481865afa918215610f3f575f925f935f925f92611211575b505f851315610f725769ffffffffffffffffffff809116911610610f4a5761114963ffffffff9142610ce2565b9116106111e9576020600492604051938480927f313ce5670000000000000000000000000000000000000000000000000000000082525afa918215610f3f575f926111c8575b5060ff8216601281146111c257601211156111b357610ee8610ee3610bfc93610c76565b610f03610ee3610bfc93610c18565b50905090565b6111e291925060203d602011610f3857610f298183610b45565b905f61118f565b7f19abf40e000000000000000000000000000000000000000000000000000000005f5260045ffd5b9250505061122f91925060a03d60a011610fcd57610fb98183610b45565b929493909291505f61111c56
Deployed Bytecode
0x60806040526004361015610011575f80fd5b5f3560e01c806313af403514610a64578063158ef93e14610a255780631fd48b9a146109675780632096631a146108715780633e4a106a146107db578063452a93201461078a57806366d571de146106ae5780638a0dac4a146106095780638da5cb5b146105b6578063903456711461044a578063c4d66de8146102b4578063d70d170f146101ea578063dfc73912146101005763f4d057ff146100b3575f80fd5b346100fc5760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126100fc5760206100f46100ef610b22565b610cef565b604051908152f35b5f80fd5b346100fc5760407ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126100fc57610137610b22565b6024359061ffff8216908183036100fc577f44494b6ff2f5bddfbf2de8bad3e23df5b23bcad6eaef133b3f4c9b6f38055e089173ffffffffffffffffffffffffffffffffffffffff60209261018a610ffc565b1693845f526002835260405f20907fffffffffff0000ffffffffffffffffffffffffffffffffffffffffffffffffff7affff0000000000000000000000000000000000000000000000000083549260c81b169116179055604051908152a2005b346100fc5760407ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126100fc57610221610b22565b602435908115158092036100fc57602073ffffffffffffffffffffffffffffffffffffffff7f7c6c1667a7354fa59fddfe61245b413612254fc1df0d5db611fcf76fb373dae292610270610ffc565b1692835f5260028252600260405f20017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0081541660ff8316179055604051908152a2005b346100fc5760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126100fc576102eb610b22565b5f5460ff81166103c6576001907fffffffffffffffffffffff00000000000000000000000000000000000000000074ffffffffffffffffffffffffffffffffffffffff0073ffffffffffffffffffffffffffffffffffffffff85169460081b16911617175f55807fffffffffffffffffffffffff00000000000000000000000000000000000000006001541617600155807f50146d0e3c60aa1d17a70635b05494f864e86144a2201275021014fbf08bafe25f80a27fe6c09ffe4572dc9ceaa5ddde4ae41befa655d6fdfe8052077af0970f700e942e5f80a2005b60846040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602260248201527f496e697469616c697a61626c653a20616c726561647920696e697469616c697a60448201527f65640000000000000000000000000000000000000000000000000000000000006064820152fd5b346100fc5760807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126100fc57610481610b22565b6024359073ffffffffffffffffffffffffffffffffffffffff82168092036100fc576044359063ffffffff82168083036100fc576064358015158091036100fc5773ffffffffffffffffffffffffffffffffffffffff7f71b00df788cc76317d8d027b8c7c735b1b9b856e1a088689e1990db33852a64a93610501610ffc565b165f8181526002602090815260409182902080547fffffffffffffff0000000000ffffffffffffffffffffffffffffffffffffffff8a167fffffffffffffff000000000000000000000000000000000000000000000000009091161760a09890981b77ffffffff0000000000000000000000000000000000000000169790971760c085901b78ff00000000000000000000000000000000000000000000000016179096558051938452948301919091529290a3005b346100fc575f7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126100fc57602073ffffffffffffffffffffffffffffffffffffffff5f5460081c16604051908152f35b346100fc5760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126100fc5773ffffffffffffffffffffffffffffffffffffffff610655610b22565b61065d610ffc565b16807fffffffffffffffffffffffff000000000000000000000000000000000000000060015416176001557fe6c09ffe4572dc9ceaa5ddde4ae41befa655d6fdfe8052077af0970f700e942e5f80a2005b346100fc5760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126100fc5773ffffffffffffffffffffffffffffffffffffffff6106fa610b22565b610702611047565b16805f52600260205260405f20908154917fffffffffffffff00ffffffffffffffffffffffffffffffffffffffffffffffff831690557f71b00df788cc76317d8d027b8c7c735b1b9b856e1a088689e1990db33852a64a604073ffffffffffffffffffffffffffffffffffffffff81519463ffffffff8160a01c1686525f60208701521693a3005b346100fc575f7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126100fc57602073ffffffffffffffffffffffffffffffffffffffff60015416604051908152f35b346100fc5760407ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126100fc57610812610b22565b7f11a178bb9fc2ed8cab266ee691719245b7d7ce46f0c704e7ae4572528219a5a4602073ffffffffffffffffffffffffffffffffffffffff60243593610856611047565b1692835f526002825280600160405f200155604051908152a2005b346100fc5760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126100fc5773ffffffffffffffffffffffffffffffffffffffff6108bd610b22565b6108c5611047565b16805f52600260205260405f2080549060ff8260c01c161561093f5760016020916109318473ffffffffffffffffffffffffffffffffffffffff63ffffffff7f11a178bb9fc2ed8cab266ee691719245b7d7ce46f0c704e7ae4572528219a5a49760a01c1691166110bb565b9182910155604051908152a2005b7f64bb3412000000000000000000000000000000000000000000000000000000005f5260045ffd5b346100fc5760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126100fc5773ffffffffffffffffffffffffffffffffffffffff6109b3610b22565b165f52600260205260c060405f2080549060ff60026001830154920154169061ffff6040519373ffffffffffffffffffffffffffffffffffffffff8116855263ffffffff8160a01c16602086015260ff81871c161515604086015260c81c1660608401526080830152151560a0820152f35b346100fc575f7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126100fc57602060ff5f54166040519015158152f35b346100fc5760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126100fc5773ffffffffffffffffffffffffffffffffffffffff610ab0610b22565b610ab8610ffc565b5f547fffffffffffffffffffffff0000000000000000000000000000000000000000ff74ffffffffffffffffffffffffffffffffffffffff008360081b169116175f55167f50146d0e3c60aa1d17a70635b05494f864e86144a2201275021014fbf08bafe25f80a2005b6004359073ffffffffffffffffffffffffffffffffffffffff821682036100fc57565b90601f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0910116810190811067ffffffffffffffff821117610b8657604052565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b519069ffffffffffffffffffff821682036100fc57565b908160a09103126100fc57610bde81610bb3565b91602082015191604081015191610bfc608060608401519301610bb3565b90565b908160209103126100fc575160ff811681036100fc5790565b60ff7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffee9116019060ff8211610c4957565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b60ff166012039060ff8211610c4957565b60ff16604d8111610c4957600a0a90565b8115610ca2570490565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b81810292918115918404141715610c4957565b91908203918211610c4957565b73ffffffffffffffffffffffffffffffffffffffff165f52600260205260405f2080549060ff8260c01c161561093f5773ffffffffffffffffffffffffffffffffffffffff8216918215610fd457604051927ffeaf968c00000000000000000000000000000000000000000000000000000000845260a084600481845afa8015610f3f575f905f915f965f92610f9a575b505f831315610f725769ffffffffffffffffffff809116911610610f4a576020600492604051938480927f313ce5670000000000000000000000000000000000000000000000000000000082525afa908115610f3f57610df9925f92610f0e575b5060ff821660128103610ecc57509050935b42610ce2565b63ffffffff8260a01c1610610e815761ffff60019160c81c169101549080158015610e79575b610e745781831115610e6457610e358284610ce2565b905b6127108202918083046127101490151715610c4957610e569083610ccf565b10610e5f575090565b905090565b610e6e8383610ce2565b90610e37565b505090565b508115610e1f565b50905060ff600260018301549201541680610ec3575b610bfc577f19abf40e000000000000000000000000000000000000000000000000000000005f5260045ffd5b50801515610e97565b60121115610ef457610ee8610ee3610eee93610c76565b610c87565b90610ccf565b93610df3565b610f03610ee3610f0993610c18565b90610c98565b610eee565b610f3191925060203d602011610f38575b610f298183610b45565b810190610bff565b905f610de1565b503d610f1f565b6040513d5f823e3d90fd5b7f159c98a0000000000000000000000000000000000000000000000000000000005f5260045ffd5b7f61ca76d2000000000000000000000000000000000000000000000000000000005f5260045ffd5b92505050610fc191945060a03d60a011610fcd575b610fb98183610b45565b810190610bca565b9096939091505f610d80565b503d610faf565b7fa15e78a8000000000000000000000000000000000000000000000000000000005f5260045ffd5b73ffffffffffffffffffffffffffffffffffffffff5f5460081c16330361101f57565b7f82b42900000000000000000000000000000000000000000000000000000000005f5260045ffd5b73ffffffffffffffffffffffffffffffffffffffff6001541633141580611097575b61106f57565b7fef6d0f02000000000000000000000000000000000000000000000000000000005f5260045ffd5b5073ffffffffffffffffffffffffffffffffffffffff5f5460081c16331415611069565b73ffffffffffffffffffffffffffffffffffffffff16908115610fd457604051907ffeaf968c00000000000000000000000000000000000000000000000000000000825260a082600481865afa918215610f3f575f925f935f925f92611211575b505f851315610f725769ffffffffffffffffffff809116911610610f4a5761114963ffffffff9142610ce2565b9116106111e9576020600492604051938480927f313ce5670000000000000000000000000000000000000000000000000000000082525afa918215610f3f575f926111c8575b5060ff8216601281146111c257601211156111b357610ee8610ee3610bfc93610c76565b610f03610ee3610bfc93610c18565b50905090565b6111e291925060203d602011610f3857610f298183610b45565b905f61118f565b7f19abf40e000000000000000000000000000000000000000000000000000000005f5260045ffd5b9250505061122f91925060a03d60a011610fcd57610fb98183610b45565b929493909291505f61111c56
Loading...
Loading
Loading...
Loading
Loading...
Loading
Net Worth in USD
$0.00
Net Worth in S
Multichain Portfolio | 35 Chains
| Chain | Token | Portfolio % | Price | Amount | Value |
|---|
Loading...
Loading
Loading...
Loading
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.