Source Code
Overview
ETH Balance
0 ETH
Eth Value
$0.00Latest 25 from a total of 715 transactions
| Transaction Hash |
Method
|
Block
|
From
|
|
To
|
||||
|---|---|---|---|---|---|---|---|---|---|
| Update Share Pri... | 23989256 | 27 mins ago | IN | 0 ETH | 0.00000498 | ||||
| Update Share Pri... | 23989221 | 35 mins ago | IN | 0 ETH | 0.00000461 | ||||
| Update Share Pri... | 23989099 | 1 hr ago | IN | 0 ETH | 0.00000495 | ||||
| Update Share Pri... | 23989044 | 1 hr ago | IN | 0 ETH | 0.00000486 | ||||
| Update Share Pri... | 23989011 | 1 hr ago | IN | 0 ETH | 0.00000472 | ||||
| Update Share Pri... | 23988804 | 1 hr ago | IN | 0 ETH | 0.00000471 | ||||
| Update Share Pri... | 23988757 | 2 hrs ago | IN | 0 ETH | 0.000005 | ||||
| Update Share Pri... | 23988664 | 2 hrs ago | IN | 0 ETH | 0.00000517 | ||||
| Update Share Pri... | 23988640 | 2 hrs ago | IN | 0 ETH | 0.00000489 | ||||
| Update Share Pri... | 23988531 | 2 hrs ago | IN | 0 ETH | 0.00000474 | ||||
| Update Share Pri... | 23988460 | 3 hrs ago | IN | 0 ETH | 0.00000482 | ||||
| Update Share Pri... | 23988315 | 3 hrs ago | IN | 0 ETH | 0.00000533 | ||||
| Update Share Pri... | 23988264 | 3 hrs ago | IN | 0 ETH | 0.00000487 | ||||
| Update Share Pri... | 23988184 | 4 hrs ago | IN | 0 ETH | 0.00000537 | ||||
| Update Share Pri... | 23988104 | 4 hrs ago | IN | 0 ETH | 0.0000052 | ||||
| Update Share Pri... | 23987930 | 4 hrs ago | IN | 0 ETH | 0.00000504 | ||||
| Update Share Pri... | 23987930 | 4 hrs ago | IN | 0 ETH | 0.00000504 | ||||
| Update Share Pri... | 23987925 | 4 hrs ago | IN | 0 ETH | 0.00000544 | ||||
| Update Share Pri... | 23987689 | 5 hrs ago | IN | 0 ETH | 0.00000501 | ||||
| Update Share Pri... | 23987688 | 5 hrs ago | IN | 0 ETH | 0.00000524 | ||||
| Update Share Pri... | 23987680 | 5 hrs ago | IN | 0 ETH | 0.00000546 | ||||
| Update Share Pri... | 23987672 | 5 hrs ago | IN | 0 ETH | 0.00000556 | ||||
| Update Share Pri... | 23987466 | 6 hrs ago | IN | 0 ETH | 0.00000551 | ||||
| Update Share Pri... | 23987334 | 6 hrs ago | IN | 0 ETH | 0.00000531 | ||||
| Update Share Pri... | 23987300 | 7 hrs ago | IN | 0 ETH | 0.00000548 |
View more zero value Internal Transactions in Advanced View mode
Advanced mode:
Loading...
Loading
Cross-Chain Transactions
Loading...
Loading
Contract Source Code Verified (Exact Match)
Contract Name:
YoOracle
Compiler Version
v0.8.28+commit.7893614a
Optimization Enabled:
Yes with 1000 runs
Other Settings:
shanghai EvmVersion
Contract Source Code (Solidity Standard Json-Input format)
// SPDX-License-Identifier: MIT
pragma solidity 0.8.28;
import {IYoOracle} from "./interfaces/IYoOracle.sol";
import {Ownable} from "@openzeppelin/contracts/access/Ownable.sol";
import {Ownable2Step} from "@openzeppelin/contracts/access/Ownable2Step.sol";
/**
* @title YoOracle
* @author Yo
* @notice This contract is used to manage the oracle data for the Yo protocol.
* It is used to store the latest price and anchor price for a given vault.
* Every new price is pushed by the updater and is validated against the anchor price and the window seconds.
* For example, we do not allow a price to be pushed that is more than 1% different from the anchor price.
* The anchor price is updated every window seconds (e.g. once every 24 hours).
*/
contract YoOracle is Ownable2Step, IYoOracle {
uint64 public immutable DEFAULT_WINDOW_SECONDS;
uint64 public immutable DEFAULT_MAX_CHANGE_BPS;
uint64 public constant BPS_DENOMINATOR = 1_000_000_000;
address public updater;
mapping(address => AssetOracleData) public oracleData;
constructor(address _updater, uint64 _defaultWindowSeconds, uint64 _defaultMaxChangeBps) Ownable(msg.sender) {
require(_updater != address(0), InvalidConfig());
updater = _updater;
DEFAULT_WINDOW_SECONDS = _defaultWindowSeconds;
DEFAULT_MAX_CHANGE_BPS = _defaultMaxChangeBps;
}
/// @notice Get the latest price for a given vault.
/// @param _vault The address of the vault.
/// @return price The latest price.
/// @return timestamp The timestamp of the latest price.
function getLatestPrice(address _vault) external view returns (uint256 price, uint64 timestamp) {
AssetOracleData storage d = oracleData[_vault];
return (d.latestPrice, d.latestTimestamp);
}
/// @notice Get the anchor price for a given vault.
/// @param _vault The address of the vault.
/// @return price The anchor price.
/// @return timestamp The timestamp of the anchor price.
function getAnchor(address _vault) external view returns (uint256 price, uint64 timestamp) {
AssetOracleData storage d = oracleData[_vault];
return (d.anchorPrice, d.anchorTimestamp);
}
/// @notice Set the updater for the oracle. The updater is the address that can update the share price for a given vault.
/// @param _updater The address of the updater.
function setUpdater(address _updater) external onlyOwner {
require(_updater != address(0), InvalidConfig());
emit UpdaterChanged(updater, _updater);
updater = _updater;
}
/// @notice Set the asset config for a given vault. The config will be used to validate the share price updates.
/// @param _vault The address of the vault.
/// @param _windowSeconds The window seconds.
/// @param _maxChangeBps The max change bps.
function setAssetConfig(address _vault, uint32 _windowSeconds, uint32 _maxChangeBps) external onlyOwner {
AssetOracleData storage d = oracleData[_vault];
d.windowSeconds = _windowSeconds;
d.maxChangeBps = _maxChangeBps;
emit AssetConfigUpdated(_vault, _windowSeconds, _maxChangeBps);
}
/// @notice Update the share price for a given vault. The update will fail if the share price is different than the anchor price by more than the max change bps. The anchor price is updated if the window seconds have passed.
/// @param _vault The address of the vault.
/// @param _sharePrice The new share price.
/// @dev The update will fail if the sender is not the updater.
function updateSharePrice(address _vault, uint256 _sharePrice) external {
require(msg.sender == updater, NotUpdater());
AssetOracleData storage d = oracleData[_vault];
uint64 windowSeconds = d.windowSeconds != 0 ? d.windowSeconds : DEFAULT_WINDOW_SECONDS;
uint64 maxChangeBps = d.maxChangeBps != 0 ? d.maxChangeBps : DEFAULT_MAX_CHANGE_BPS;
uint64 nowTs = uint64(block.timestamp);
// first update
if (d.latestPrice == 0) {
d.latestPrice = _sharePrice;
d.latestTimestamp = nowTs;
d.anchorPrice = _sharePrice;
d.anchorTimestamp = nowTs;
emit SharePriceUpdated(_vault, _sharePrice, nowTs);
return;
}
// this check should never fail
if (d.anchorPrice > 0) {
uint256 ref = d.anchorPrice;
uint256 diff = _sharePrice > ref ? _sharePrice - ref : ref - _sharePrice;
uint256 diffBps = (diff * BPS_DENOMINATOR) / ref;
if (diffBps > maxChangeBps) {
revert PriceChangeTooBig(_vault, _sharePrice, ref, diffBps, maxChangeBps);
}
}
d.latestPrice = _sharePrice;
d.latestTimestamp = nowTs;
// rotate anchor if window passed
if (nowTs - d.anchorTimestamp >= windowSeconds) {
d.anchorPrice = _sharePrice;
d.anchorTimestamp = nowTs;
}
emit SharePriceUpdated(_vault, _sharePrice, nowTs);
}
}// SPDX-License-Identifier: MIT
pragma solidity 0.8.28;
interface IYoOracle {
struct AssetOracleData {
uint256 latestPrice;
uint256 anchorPrice;
uint64 anchorTimestamp;
uint64 latestTimestamp;
uint64 windowSeconds;
uint64 maxChangeBps;
}
error NotUpdater();
error InvalidConfig();
error PriceChangeTooBig(
address vault,
uint256 newPrice,
uint256 anchorPrice,
uint256 diffBps,
uint256 maxChangeBps
);
event UpdaterChanged(address indexed oldUpdater, address indexed newUpdater);
event SharePriceUpdated(address indexed vault, uint256 price, uint64 timestamp);
event AssetConfigUpdated(address indexed vault, uint32 windowSeconds, uint32 maxChangeBps);
function getLatestPrice(address _vault) external view returns (uint256 sharePrice, uint64 timestamp);
}// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts (last updated v5.0.0) (access/Ownable.sol)
pragma solidity ^0.8.20;
import {Context} from "../utils/Context.sol";
/**
* @dev Contract module which provides a basic access control mechanism, where
* there is an account (an owner) that can be granted exclusive access to
* specific functions.
*
* The initial owner is set to the address provided by the deployer. This can
* later be changed with {transferOwnership}.
*
* This module is used through inheritance. It will make available the modifier
* `onlyOwner`, which can be applied to your functions to restrict their use to
* the owner.
*/
abstract contract Ownable is Context {
address private _owner;
/**
* @dev The caller account is not authorized to perform an operation.
*/
error OwnableUnauthorizedAccount(address account);
/**
* @dev The owner is not a valid owner account. (eg. `address(0)`)
*/
error OwnableInvalidOwner(address owner);
event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);
/**
* @dev Initializes the contract setting the address provided by the deployer as the initial owner.
*/
constructor(address initialOwner) {
if (initialOwner == address(0)) {
revert OwnableInvalidOwner(address(0));
}
_transferOwnership(initialOwner);
}
/**
* @dev Throws if called by any account other than the owner.
*/
modifier onlyOwner() {
_checkOwner();
_;
}
/**
* @dev Returns the address of the current owner.
*/
function owner() public view virtual returns (address) {
return _owner;
}
/**
* @dev Throws if the sender is not the owner.
*/
function _checkOwner() internal view virtual {
if (owner() != _msgSender()) {
revert OwnableUnauthorizedAccount(_msgSender());
}
}
/**
* @dev Leaves the contract without owner. It will not be possible to call
* `onlyOwner` functions. Can only be called by the current owner.
*
* NOTE: Renouncing ownership will leave the contract without an owner,
* thereby disabling any functionality that is only available to the owner.
*/
function renounceOwnership() public virtual onlyOwner {
_transferOwnership(address(0));
}
/**
* @dev Transfers ownership of the contract to a new account (`newOwner`).
* Can only be called by the current owner.
*/
function transferOwnership(address newOwner) public virtual onlyOwner {
if (newOwner == address(0)) {
revert OwnableInvalidOwner(address(0));
}
_transferOwnership(newOwner);
}
/**
* @dev Transfers ownership of the contract to a new account (`newOwner`).
* Internal function without access restriction.
*/
function _transferOwnership(address newOwner) internal virtual {
address oldOwner = _owner;
_owner = newOwner;
emit OwnershipTransferred(oldOwner, newOwner);
}
}// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts (last updated v5.1.0) (access/Ownable2Step.sol)
pragma solidity ^0.8.20;
import {Ownable} from "./Ownable.sol";
/**
* @dev Contract module which provides access control mechanism, where
* there is an account (an owner) that can be granted exclusive access to
* specific functions.
*
* This extension of the {Ownable} contract includes a two-step mechanism to transfer
* ownership, where the new owner must call {acceptOwnership} in order to replace the
* old one. This can help prevent common mistakes, such as transfers of ownership to
* incorrect accounts, or to contracts that are unable to interact with the
* permission system.
*
* The initial owner is specified at deployment time in the constructor for `Ownable`. This
* can later be changed with {transferOwnership} and {acceptOwnership}.
*
* This module is used through inheritance. It will make available all functions
* from parent (Ownable).
*/
abstract contract Ownable2Step is Ownable {
address private _pendingOwner;
event OwnershipTransferStarted(address indexed previousOwner, address indexed newOwner);
/**
* @dev Returns the address of the pending owner.
*/
function pendingOwner() public view virtual returns (address) {
return _pendingOwner;
}
/**
* @dev Starts the ownership transfer of the contract to a new account. Replaces the pending transfer if there is one.
* Can only be called by the current owner.
*
* Setting `newOwner` to the zero address is allowed; this can be used to cancel an initiated ownership transfer.
*/
function transferOwnership(address newOwner) public virtual override onlyOwner {
_pendingOwner = newOwner;
emit OwnershipTransferStarted(owner(), newOwner);
}
/**
* @dev Transfers ownership of the contract to a new account (`newOwner`) and deletes any pending owner.
* Internal function without access restriction.
*/
function _transferOwnership(address newOwner) internal virtual override {
delete _pendingOwner;
super._transferOwnership(newOwner);
}
/**
* @dev The new owner accepts the ownership transfer.
*/
function acceptOwnership() public virtual {
address sender = _msgSender();
if (pendingOwner() != sender) {
revert OwnableUnauthorizedAccount(sender);
}
_transferOwnership(sender);
}
}// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts (last updated v5.0.1) (utils/Context.sol)
pragma solidity ^0.8.20;
/**
* @dev Provides information about the current execution context, including the
* sender of the transaction and its data. While these are generally available
* via msg.sender and msg.data, they should not be accessed in such a direct
* manner, since when dealing with meta-transactions the account sending and
* paying for execution may not be the actual sender (as far as an application
* is concerned).
*
* This contract is only required for intermediate, library-like contracts.
*/
abstract contract Context {
function _msgSender() internal view virtual returns (address) {
return msg.sender;
}
function _msgData() internal view virtual returns (bytes calldata) {
return msg.data;
}
function _contextSuffixLength() internal view virtual returns (uint256) {
return 0;
}
}{
"remappings": [
"@openzeppelin/contracts/=node_modules/@openzeppelin/contracts/",
"@openzeppelin/contracts-upgradeable/=node_modules/@openzeppelin/contracts-upgradeable/",
"@solmate/=node_modules/solmate/src/",
"forge-std/=node_modules/forge-std/src/",
"solmate/=node_modules/solmate/"
],
"optimizer": {
"enabled": true,
"runs": 1000
},
"metadata": {
"useLiteralContent": false,
"bytecodeHash": "none",
"appendCBOR": true
},
"outputSelection": {
"*": {
"*": [
"evm.bytecode",
"evm.deployedBytecode",
"devdoc",
"userdoc",
"metadata",
"abi"
]
}
},
"evmVersion": "shanghai",
"viaIR": false
}Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
Contract ABI
API[{"inputs":[{"internalType":"address","name":"_updater","type":"address"},{"internalType":"uint64","name":"_defaultWindowSeconds","type":"uint64"},{"internalType":"uint64","name":"_defaultMaxChangeBps","type":"uint64"}],"stateMutability":"nonpayable","type":"constructor"},{"inputs":[],"name":"InvalidConfig","type":"error"},{"inputs":[],"name":"NotUpdater","type":"error"},{"inputs":[{"internalType":"address","name":"owner","type":"address"}],"name":"OwnableInvalidOwner","type":"error"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"OwnableUnauthorizedAccount","type":"error"},{"inputs":[{"internalType":"address","name":"vault","type":"address"},{"internalType":"uint256","name":"newPrice","type":"uint256"},{"internalType":"uint256","name":"anchorPrice","type":"uint256"},{"internalType":"uint256","name":"diffBps","type":"uint256"},{"internalType":"uint256","name":"maxChangeBps","type":"uint256"}],"name":"PriceChangeTooBig","type":"error"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"vault","type":"address"},{"indexed":false,"internalType":"uint32","name":"windowSeconds","type":"uint32"},{"indexed":false,"internalType":"uint32","name":"maxChangeBps","type":"uint32"}],"name":"AssetConfigUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferStarted","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"vault","type":"address"},{"indexed":false,"internalType":"uint256","name":"price","type":"uint256"},{"indexed":false,"internalType":"uint64","name":"timestamp","type":"uint64"}],"name":"SharePriceUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"oldUpdater","type":"address"},{"indexed":true,"internalType":"address","name":"newUpdater","type":"address"}],"name":"UpdaterChanged","type":"event"},{"inputs":[],"name":"BPS_DENOMINATOR","outputs":[{"internalType":"uint64","name":"","type":"uint64"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"DEFAULT_MAX_CHANGE_BPS","outputs":[{"internalType":"uint64","name":"","type":"uint64"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"DEFAULT_WINDOW_SECONDS","outputs":[{"internalType":"uint64","name":"","type":"uint64"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"acceptOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_vault","type":"address"}],"name":"getAnchor","outputs":[{"internalType":"uint256","name":"price","type":"uint256"},{"internalType":"uint64","name":"timestamp","type":"uint64"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_vault","type":"address"}],"name":"getLatestPrice","outputs":[{"internalType":"uint256","name":"price","type":"uint256"},{"internalType":"uint64","name":"timestamp","type":"uint64"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"oracleData","outputs":[{"internalType":"uint256","name":"latestPrice","type":"uint256"},{"internalType":"uint256","name":"anchorPrice","type":"uint256"},{"internalType":"uint64","name":"anchorTimestamp","type":"uint64"},{"internalType":"uint64","name":"latestTimestamp","type":"uint64"},{"internalType":"uint64","name":"windowSeconds","type":"uint64"},{"internalType":"uint64","name":"maxChangeBps","type":"uint64"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"pendingOwner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_vault","type":"address"},{"internalType":"uint32","name":"_windowSeconds","type":"uint32"},{"internalType":"uint32","name":"_maxChangeBps","type":"uint32"}],"name":"setAssetConfig","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_updater","type":"address"}],"name":"setUpdater","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_vault","type":"address"},{"internalType":"uint256","name":"_sharePrice","type":"uint256"}],"name":"updateSharePrice","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"updater","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"}]Contract Creation Code
60c060405234801561000f575f5ffd5b50604051610cad380380610cad83398101604081905261002e91610142565b338061005357604051631e4fbdf760e01b81525f600482015260240160405180910390fd5b61005c816100bc565b506001600160a01b038316610084576040516306b7c75960e31b815260040160405180910390fd5b600280546001600160a01b0319166001600160a01b0394909416939093179092556001600160401b039081166080521660a05261018f565b600180546001600160a01b03191690556100d5816100d8565b50565b5f80546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b80516001600160401b038116811461013d575f5ffd5b919050565b5f5f5f60608486031215610154575f5ffd5b83516001600160a01b038116811461016a575f5ffd5b925061017860208501610127565b915061018660408501610127565b90509250925092565b60805160a051610aef6101be5f395f81816102db01526105ed01525f8181610288015261058f0152610aef5ff3fe608060405234801561000f575f5ffd5b50600436106100f0575f3560e01c80638f772a5c11610093578063df034cd011610063578063df034cd014610310578063e1a4521814610323578063e30c39781461032e578063f2fde38b1461033f575f5ffd5b80638f772a5c146102835780639d54f419146102c3578063a686c11b146102d6578063a924e881146102fd575f5ffd5b80635ba76f62116100ce5780635ba76f621461020f578063715018a61461024f57806379ba5097146102575780638da5cb5b1461025f575f5ffd5b806316345f18146100f45780634c6f66b81461015f57806350b54fd814610174575b5f5ffd5b61013c6101023660046109c4565b6001600160a01b03165f908152600360205260409020805460029091015490916801000000000000000090910467ffffffffffffffff1690565b6040805192835267ffffffffffffffff9091166020830152015b60405180910390f35b61017261016d3660046109f7565b610352565b005b6101d06101823660046109c4565b60036020525f908152604090208054600182015460029092015490919067ffffffffffffffff80821691680100000000000000008104821691600160801b8204811691600160c01b90041686565b60408051968752602087019590955267ffffffffffffffff938416948601949094529082166060850152811660808401521660a082015260c001610156565b61013c61021d3660046109c4565b6001600160a01b03165f9081526003602052604090206001810154600290910154909167ffffffffffffffff90911690565b610172610407565b61017261041a565b5f546001600160a01b03165b6040516001600160a01b039091168152602001610156565b6102aa7f000000000000000000000000000000000000000000000000000000000000000081565b60405167ffffffffffffffff9091168152602001610156565b6101726102d13660046109c4565b610463565b6102aa7f000000000000000000000000000000000000000000000000000000000000000081565b61017261030b366004610a37565b610513565b60025461026b906001600160a01b031681565b6102aa633b9aca0081565b6001546001600160a01b031661026b565b61017261034d3660046109c4565b610883565b61035a610900565b6001600160a01b0383165f818152600360209081526040918290206002810180546fffffffffffffffffffffffffffffffff1663ffffffff888116600160801b810277ffffffffffffffffffffffffffffffffffffffffffffffff1692909217908816600160c01b81029190911790925584519081529283015292917f148c2b8ef930b2d2198a36d984ac353a6b7e9e4e1e0779fff4464f09f0e24571910160405180910390a250505050565b61040f610900565b6104185f61092c565b565b60015433906001600160a01b031681146104575760405163118cdaa760e01b81526001600160a01b03821660048201526024015b60405180910390fd5b6104608161092c565b50565b61046b610900565b6001600160a01b0381166104ab576040517f35be3ac800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6002546040516001600160a01b038084169216907f662a4a4a892f5f13cf7ee050fdaa045f8641601fdbc843e8a71f418099cacd4e905f90a36002805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b0392909216919091179055565b6002546001600160a01b03163314610557576040517f9a280f3900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001600160a01b0382165f9081526003602052604081206002810154909190600160801b900467ffffffffffffffff1681036105b3577f00000000000000000000000000000000000000000000000000000000000000006105ca565b6002820154600160801b900467ffffffffffffffff165b60028301549091505f90600160c01b900467ffffffffffffffff168103610611577f0000000000000000000000000000000000000000000000000000000000000000610628565b6002830154600160c01b900467ffffffffffffffff165b835490915042905f036106e157848455600284018054600186018790557fffffffffffffffffffffffffffffffff00000000000000000000000000000000166801000000000000000067ffffffffffffffff841690810267ffffffffffffffff19169190911781179091556040805187815260208101929092526001600160a01b038816917f60551cde8ad777c516ddf88d76ba006788da7b927b96c68a5b194da57530026091015b60405180910390a2505050505050565b6001840154156107a75760018401545f818711610707576107028783610a73565b610711565b6107118288610a73565b90505f82610723633b9aca0084610a8c565b61072d9190610aa3565b90508467ffffffffffffffff168111156107a3576040517f7b7d14130000000000000000000000000000000000000000000000000000000081526001600160a01b038a16600482015260248101899052604481018490526064810182905267ffffffffffffffff8616608482015260a40161044e565b5050505b84845560028401805467ffffffffffffffff80841668010000000000000000027fffffffffffffffffffffffffffffffff0000000000000000ffffffffffffffff83168117909355858116926108039290821691161783610ac2565b67ffffffffffffffff1610610839576001840185905560028401805467ffffffffffffffff191667ffffffffffffffff83161790555b6040805186815267ffffffffffffffff831660208201526001600160a01b038816917f60551cde8ad777c516ddf88d76ba006788da7b927b96c68a5b194da57530026091016106d1565b61088b610900565b600180546001600160a01b03831673ffffffffffffffffffffffffffffffffffffffff1990911681179091556108c85f546001600160a01b031690565b6001600160a01b03167f38d16b8cac22d99fc7c124b9cd0de2d3fa1faef420bfe791d8c362d765e2270060405160405180910390a350565b5f546001600160a01b031633146104185760405163118cdaa760e01b815233600482015260240161044e565b6001805473ffffffffffffffffffffffffffffffffffffffff19169055610460815f80546001600160a01b0383811673ffffffffffffffffffffffffffffffffffffffff19831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b80356001600160a01b03811681146109bf575f5ffd5b919050565b5f602082840312156109d4575f5ffd5b6109dd826109a9565b9392505050565b803563ffffffff811681146109bf575f5ffd5b5f5f5f60608486031215610a09575f5ffd5b610a12846109a9565b9250610a20602085016109e4565b9150610a2e604085016109e4565b90509250925092565b5f5f60408385031215610a48575f5ffd5b610a51836109a9565b946020939093013593505050565b634e487b7160e01b5f52601160045260245ffd5b81810381811115610a8657610a86610a5f565b92915050565b8082028115828204841417610a8657610a86610a5f565b5f82610abd57634e487b7160e01b5f52601260045260245ffd5b500490565b67ffffffffffffffff8281168282160390811115610a8657610a86610a5f56fea164736f6c634300081c000a000000000000000000000000f80ea9a0f466d95eca5b5271bf3374d0e8fed1c5000000000000000000000000000000000000000000000000000000000001518000000000000000000000000000000000000000000000000000000000000f4240
Deployed Bytecode
0x608060405234801561000f575f5ffd5b50600436106100f0575f3560e01c80638f772a5c11610093578063df034cd011610063578063df034cd014610310578063e1a4521814610323578063e30c39781461032e578063f2fde38b1461033f575f5ffd5b80638f772a5c146102835780639d54f419146102c3578063a686c11b146102d6578063a924e881146102fd575f5ffd5b80635ba76f62116100ce5780635ba76f621461020f578063715018a61461024f57806379ba5097146102575780638da5cb5b1461025f575f5ffd5b806316345f18146100f45780634c6f66b81461015f57806350b54fd814610174575b5f5ffd5b61013c6101023660046109c4565b6001600160a01b03165f908152600360205260409020805460029091015490916801000000000000000090910467ffffffffffffffff1690565b6040805192835267ffffffffffffffff9091166020830152015b60405180910390f35b61017261016d3660046109f7565b610352565b005b6101d06101823660046109c4565b60036020525f908152604090208054600182015460029092015490919067ffffffffffffffff80821691680100000000000000008104821691600160801b8204811691600160c01b90041686565b60408051968752602087019590955267ffffffffffffffff938416948601949094529082166060850152811660808401521660a082015260c001610156565b61013c61021d3660046109c4565b6001600160a01b03165f9081526003602052604090206001810154600290910154909167ffffffffffffffff90911690565b610172610407565b61017261041a565b5f546001600160a01b03165b6040516001600160a01b039091168152602001610156565b6102aa7f000000000000000000000000000000000000000000000000000000000001518081565b60405167ffffffffffffffff9091168152602001610156565b6101726102d13660046109c4565b610463565b6102aa7f00000000000000000000000000000000000000000000000000000000000f424081565b61017261030b366004610a37565b610513565b60025461026b906001600160a01b031681565b6102aa633b9aca0081565b6001546001600160a01b031661026b565b61017261034d3660046109c4565b610883565b61035a610900565b6001600160a01b0383165f818152600360209081526040918290206002810180546fffffffffffffffffffffffffffffffff1663ffffffff888116600160801b810277ffffffffffffffffffffffffffffffffffffffffffffffff1692909217908816600160c01b81029190911790925584519081529283015292917f148c2b8ef930b2d2198a36d984ac353a6b7e9e4e1e0779fff4464f09f0e24571910160405180910390a250505050565b61040f610900565b6104185f61092c565b565b60015433906001600160a01b031681146104575760405163118cdaa760e01b81526001600160a01b03821660048201526024015b60405180910390fd5b6104608161092c565b50565b61046b610900565b6001600160a01b0381166104ab576040517f35be3ac800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6002546040516001600160a01b038084169216907f662a4a4a892f5f13cf7ee050fdaa045f8641601fdbc843e8a71f418099cacd4e905f90a36002805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b0392909216919091179055565b6002546001600160a01b03163314610557576040517f9a280f3900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001600160a01b0382165f9081526003602052604081206002810154909190600160801b900467ffffffffffffffff1681036105b3577f00000000000000000000000000000000000000000000000000000000000151806105ca565b6002820154600160801b900467ffffffffffffffff165b60028301549091505f90600160c01b900467ffffffffffffffff168103610611577f00000000000000000000000000000000000000000000000000000000000f4240610628565b6002830154600160c01b900467ffffffffffffffff165b835490915042905f036106e157848455600284018054600186018790557fffffffffffffffffffffffffffffffff00000000000000000000000000000000166801000000000000000067ffffffffffffffff841690810267ffffffffffffffff19169190911781179091556040805187815260208101929092526001600160a01b038816917f60551cde8ad777c516ddf88d76ba006788da7b927b96c68a5b194da57530026091015b60405180910390a2505050505050565b6001840154156107a75760018401545f818711610707576107028783610a73565b610711565b6107118288610a73565b90505f82610723633b9aca0084610a8c565b61072d9190610aa3565b90508467ffffffffffffffff168111156107a3576040517f7b7d14130000000000000000000000000000000000000000000000000000000081526001600160a01b038a16600482015260248101899052604481018490526064810182905267ffffffffffffffff8616608482015260a40161044e565b5050505b84845560028401805467ffffffffffffffff80841668010000000000000000027fffffffffffffffffffffffffffffffff0000000000000000ffffffffffffffff83168117909355858116926108039290821691161783610ac2565b67ffffffffffffffff1610610839576001840185905560028401805467ffffffffffffffff191667ffffffffffffffff83161790555b6040805186815267ffffffffffffffff831660208201526001600160a01b038816917f60551cde8ad777c516ddf88d76ba006788da7b927b96c68a5b194da57530026091016106d1565b61088b610900565b600180546001600160a01b03831673ffffffffffffffffffffffffffffffffffffffff1990911681179091556108c85f546001600160a01b031690565b6001600160a01b03167f38d16b8cac22d99fc7c124b9cd0de2d3fa1faef420bfe791d8c362d765e2270060405160405180910390a350565b5f546001600160a01b031633146104185760405163118cdaa760e01b815233600482015260240161044e565b6001805473ffffffffffffffffffffffffffffffffffffffff19169055610460815f80546001600160a01b0383811673ffffffffffffffffffffffffffffffffffffffff19831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b80356001600160a01b03811681146109bf575f5ffd5b919050565b5f602082840312156109d4575f5ffd5b6109dd826109a9565b9392505050565b803563ffffffff811681146109bf575f5ffd5b5f5f5f60608486031215610a09575f5ffd5b610a12846109a9565b9250610a20602085016109e4565b9150610a2e604085016109e4565b90509250925092565b5f5f60408385031215610a48575f5ffd5b610a51836109a9565b946020939093013593505050565b634e487b7160e01b5f52601160045260245ffd5b81810381811115610a8657610a86610a5f565b92915050565b8082028115828204841417610a8657610a86610a5f565b5f82610abd57634e487b7160e01b5f52601260045260245ffd5b500490565b67ffffffffffffffff8281168282160390811115610a8657610a86610a5f56fea164736f6c634300081c000a
Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)
000000000000000000000000f80ea9a0f466d95eca5b5271bf3374d0e8fed1c5000000000000000000000000000000000000000000000000000000000001518000000000000000000000000000000000000000000000000000000000000f4240
-----Decoded View---------------
Arg [0] : _updater (address): 0xF80eA9A0f466D95ECA5b5271Bf3374D0e8fEd1C5
Arg [1] : _defaultWindowSeconds (uint64): 86400
Arg [2] : _defaultMaxChangeBps (uint64): 1000000
-----Encoded View---------------
3 Constructor Arguments found :
Arg [0] : 000000000000000000000000f80ea9a0f466d95eca5b5271bf3374d0e8fed1c5
Arg [1] : 0000000000000000000000000000000000000000000000000000000000015180
Arg [2] : 00000000000000000000000000000000000000000000000000000000000f4240
Loading...
Loading
Loading...
Loading
Multichain Portfolio | 34 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.