MON Price: $0.018902 (+6.21%)

Contract

0xb70abfFBfBE28196722C879aeB940aAe334a2f87

Overview

MON Balance

Monad Chain LogoMonad Chain LogoMonad Chain Logo0 MON

MON Value

$0.00

More Info

Private Name Tags

Multichain Info

No addresses found
Transaction Hash
Method
Block
From
To
Update Max Devia...431764512025-12-20 1:45:3537 days ago1766195135IN
0xb70abfFB...e334a2f87
0 MON0.00712772112.23
Update Validated...431760522025-12-20 1:42:5537 days ago1766194975IN
0xb70abfFB...e334a2f87
0 MON0.04983749104.555
Update Max Devia...431759252025-12-20 1:42:0437 days ago1766194924IN
0xb70abfFB...e334a2f87
0 MON0.01032538114.95

Latest 25 internal transactions (View All)

Advanced mode:
Parent Transaction Hash Block From To
513006342026-01-26 19:37:302 hrs ago1769456250
0xb70abfFB...e334a2f87
0 MON
513006342026-01-26 19:37:302 hrs ago1769456250
0xb70abfFB...e334a2f87
0 MON
513006342026-01-26 19:37:302 hrs ago1769456250
0xb70abfFB...e334a2f87
0 MON
512799852026-01-26 17:19:534 hrs ago1769447993
0xb70abfFB...e334a2f87
0 MON
512799852026-01-26 17:19:534 hrs ago1769447993
0xb70abfFB...e334a2f87
0 MON
512799852026-01-26 17:19:534 hrs ago1769447993
0xb70abfFB...e334a2f87
0 MON
512797862026-01-26 17:18:334 hrs ago1769447913
0xb70abfFB...e334a2f87
0 MON
512797862026-01-26 17:18:334 hrs ago1769447913
0xb70abfFB...e334a2f87
0 MON
512797862026-01-26 17:18:334 hrs ago1769447913
0xb70abfFB...e334a2f87
0 MON
512797072026-01-26 17:18:024 hrs ago1769447882
0xb70abfFB...e334a2f87
0 MON
512797072026-01-26 17:18:024 hrs ago1769447882
0xb70abfFB...e334a2f87
0 MON
512797072026-01-26 17:18:024 hrs ago1769447882
0xb70abfFB...e334a2f87
0 MON
512795782026-01-26 17:17:104 hrs ago1769447830
0xb70abfFB...e334a2f87
0 MON
512795782026-01-26 17:17:104 hrs ago1769447830
0xb70abfFB...e334a2f87
0 MON
512795782026-01-26 17:17:104 hrs ago1769447830
0xb70abfFB...e334a2f87
0 MON
512790482026-01-26 17:13:384 hrs ago1769447618
0xb70abfFB...e334a2f87
0 MON
512790482026-01-26 17:13:384 hrs ago1769447618
0xb70abfFB...e334a2f87
0 MON
512790482026-01-26 17:13:384 hrs ago1769447618
0xb70abfFB...e334a2f87
0 MON
512788872026-01-26 17:12:344 hrs ago1769447554
0xb70abfFB...e334a2f87
0 MON
512788872026-01-26 17:12:344 hrs ago1769447554
0xb70abfFB...e334a2f87
0 MON
512788872026-01-26 17:12:344 hrs ago1769447554
0xb70abfFB...e334a2f87
0 MON
512787492026-01-26 17:11:394 hrs ago1769447499
0xb70abfFB...e334a2f87
0 MON
512787492026-01-26 17:11:394 hrs ago1769447499
0xb70abfFB...e334a2f87
0 MON
512787492026-01-26 17:11:394 hrs ago1769447499
0xb70abfFB...e334a2f87
0 MON
512786732026-01-26 17:11:084 hrs ago1769447468
0xb70abfFB...e334a2f87
0 MON
View All Internal Transactions
Loading...
Loading

Contract Source Code Verified (Exact Match)

Contract Name:
SharesOracleAggregator

Compiler Version
v0.8.10+commit.fc410830

Optimization Enabled:
Yes with 100000 runs

Other Settings:
berlin EvmVersion
// SPDX-License-Identifier: MIT
pragma solidity 0.8.10;

import {AggregatorInterface} from "@aave/core-v3/contracts/dependencies/chainlink/AggregatorInterface.sol";
import {IERC4626} from "./interfaces/IERC4626.sol";
import {ISharesOracleAggregator} from "./interfaces/ISharesOracleAggregator.sol";
import {IERC20Metadata} from "./interfaces/IERC20Metadata.sol";

/**
 * @title IAggregatorWithDecimals
 * @author Neverland
 * @notice Extended Chainlink aggregator interface with decimals and round data functions
 */
interface IAggregatorWithDecimals is AggregatorInterface {
    /**
     * @notice Returns the number of decimals used by the aggregator
     * @return The number of decimals
     */
    function decimals() external view returns (uint8);

    /**
     * @notice Returns data for the latest round
     * @return roundId The round ID
     * @return answer The price answer
     * @return startedAt Timestamp of when the round started
     * @return updatedAt Timestamp of when the round was updated
     * @return answeredInRound The round ID in which the answer was computed
     */
    function latestRoundData()
        external
        view
        returns (uint80 roundId, int256 answer, uint256 startedAt, uint256 updatedAt, uint80 answeredInRound);

    /**
     * @notice Returns data for a specific round
     * @param requestedRoundId The round ID to retrieve
     * @return roundId The round ID
     * @return answer The price answer
     * @return startedAt Timestamp of when the round started
     * @return updatedAt Timestamp of when the round was updated
     * @return answeredInRound The round ID in which the answer was computed
     */
    function getRoundData(uint80 requestedRoundId)
        external
        view
        returns (uint80 roundId, int256 answer, uint256 startedAt, uint256 updatedAt, uint80 answeredInRound);
}

/**
 * @title SharesOracleAggregator
 * @author Neverland
 * @notice Oracle aggregator that converts base asset price to shares price using ERC4626's convertToAssets
 * @dev Implements ISharesOracleAggregator and provides Chainlink-compatible oracle interface for ERC4626 vault shares
 */
contract SharesOracleAggregator is ISharesOracleAggregator {
    /*//////////////////////////////////////////////////////////////
                                CONSTANTS
    //////////////////////////////////////////////////////////////*/

    /// @dev Target decimals for price output (Chainlink standard)
    uint256 private constant TARGET_DECIMALS = 8;

    /// @dev Maximum allowed decimals to prevent overflow (10^77 < 2^256)
    uint8 private constant MAX_DECIMALS = 77;

    /*//////////////////////////////////////////////////////////////
                            IMMUTABLE STATE
    //////////////////////////////////////////////////////////////*/

    /// @notice The base asset price oracle (e.g., MON/USD)
    IAggregatorWithDecimals public immutable baseAggregator;

    /// @notice The ERC4626 shares contract (e.g., shMON)
    IERC4626 public immutable sharesContract;

    /// @notice Maximum staleness allowed for price data in seconds
    uint256 public immutable maxDelay;

    /// @notice Minimum time between validated price updates
    uint256 public immutable minValidationInterval;

    /// @notice Number of decimals used by the base aggregator
    uint8 public immutable baseDecimals;

    /// @notice Number of decimals used by the shares contract
    uint8 public immutable sharesDecimals;

    /// @notice Number of decimals used by the underlying asset
    uint8 public immutable assetDecimals;

    /// @dev Precision units for one full share (10 ** sharesDecimals)
    uint256 private immutable SHARE_UNIT;

    /// @dev Precision units for one underlying asset (10 ** assetDecimals)
    uint256 private immutable ASSET_UNIT;

    /*//////////////////////////////////////////////////////////////
                            MUTABLE STATE
    //////////////////////////////////////////////////////////////*/

    /// @notice Maximum allowed price deviation in basis points (e.g., 500 = 5%)
    uint256 public maxDeviationBps;

    /// @notice Contract owner for admin functions
    address public owner;

    /// @notice Pending owner for two-step transfer
    address public pendingOwner;

    /// @notice Human-readable description for the aggregator
    string public description;

    /// @dev Last validated price for deviation check
    int256 private _lastValidatedPrice;

    /// @dev Last validation timestamp
    uint256 private _lastValidationTime;

    /*//////////////////////////////////////////////////////////////
                              CONSTRUCTOR
    //////////////////////////////////////////////////////////////*/

    /**
     * @notice Constructor
     * @param _baseAggregator Address of the base asset price oracle
     * @param _sharesContract Address of the ERC4626 shares contract
     * @param _maxDelay Maximum allowed staleness in seconds (0 = no staleness check)
     * @param _maxDeviationBps Maximum allowed price deviation in basis points
     * @param _minValidationInterval Minimum time between validation updates (seconds)
     * @param _description Human-readable description for the aggregator
     */
    constructor(
        address _baseAggregator,
        address _sharesContract,
        uint256 _maxDelay,
        uint256 _maxDeviationBps,
        uint256 _minValidationInterval,
        string memory _description
    ) {
        if (_baseAggregator == address(0)) {
            revert ISharesOracleAggregator.BaseAggregatorZeroAddress();
        }
        if (_sharesContract == address(0)) revert ISharesOracleAggregator.SharesContractZeroAddress();

        baseAggregator = IAggregatorWithDecimals(_baseAggregator);
        sharesContract = IERC4626(_sharesContract);
        maxDelay = _maxDelay;
        maxDeviationBps = _maxDeviationBps;
        minValidationInterval = _minValidationInterval;
        owner = msg.sender;

        baseDecimals = baseAggregator.decimals();
        if (baseDecimals > MAX_DECIMALS) revert ISharesOracleAggregator.InvalidDecimals();

        sharesDecimals = sharesContract.decimals();
        if (sharesDecimals > MAX_DECIMALS) revert ISharesOracleAggregator.InvalidDecimals();
        SHARE_UNIT = 10 ** sharesDecimals;

        address asset = sharesContract.asset();
        if (asset == address(0)) revert ISharesOracleAggregator.AssetZeroAddress();
        assetDecimals = IERC20Metadata(asset).decimals();
        if (assetDecimals > MAX_DECIMALS) revert ISharesOracleAggregator.InvalidDecimals();
        ASSET_UNIT = 10 ** assetDecimals;
        description = _description;
    }

    /*//////////////////////////////////////////////////////////////
                            CHAINLINK INTERFACE
    //////////////////////////////////////////////////////////////*/

    /// @inheritdoc ISharesOracleAggregator
    function latestAnswer() external view returns (int256) {
        (uint80 roundId, int256 basePrice,, uint256 baseTimestamp, uint80 answeredInRound) =
            baseAggregator.latestRoundData();
        _validateRound(basePrice, baseTimestamp, roundId, answeredInRound);
        return _computeSharesPrice(basePrice);
    }

    /// @inheritdoc ISharesOracleAggregator
    function latestTimestamp() external view returns (uint256) {
        (uint80 roundId, int256 answer,, uint256 baseTimestamp, uint80 answeredInRound) =
            baseAggregator.latestRoundData();
        _validateRound(answer, baseTimestamp, roundId, answeredInRound);
        return baseTimestamp;
    }

    /// @inheritdoc ISharesOracleAggregator
    function latestRound() external view returns (uint256) {
        return baseAggregator.latestRound();
    }

    /// @inheritdoc ISharesOracleAggregator
    /// @dev Returns 0 for invalid/stale rounds. Downstream consumers must treat 0 as "price unavailable"
    function getAnswer(uint256 roundId) external view returns (int256) {
        try baseAggregator.getRoundData(uint80(roundId)) returns (
            uint80 rId, int256 basePrice, uint256, /* startedAt */ uint256 timestamp, uint80 answeredInRound
        ) {
            if (basePrice <= 0) return 0;
            if (timestamp == 0) return 0;
            if (answeredInRound < rId) return 0; // Round incomplete
            if (!_isFresh(timestamp)) return 0;
            return _computeSharesPrice(basePrice);
        } catch {
            return 0;
        }
    }

    /// @inheritdoc ISharesOracleAggregator
    /// @dev Returns 0 for invalid/stale rounds. Downstream consumers must treat 0 as "timestamp unavailable"
    function getTimestamp(uint256 roundId) external view returns (uint256) {
        try baseAggregator.getTimestamp(roundId) returns (uint256 timestamp) {
            if (timestamp == 0) return 0; // Explicitly check for invalid timestamp
            if (!_isFresh(timestamp)) return 0;
            return timestamp;
        } catch {
            return 0;
        }
    }

    /// @inheritdoc ISharesOracleAggregator
    function decimals() external pure returns (uint8) {
        return uint8(TARGET_DECIMALS);
    }

    /// @inheritdoc ISharesOracleAggregator
    function version() external pure returns (uint256) {
        return 1;
    }

    /// @inheritdoc ISharesOracleAggregator
    function latestRoundData()
        external
        view
        returns (uint80 roundId, int256 answer, uint256 startedAt, uint256 updatedAt, uint80 answeredInRound)
    {
        (roundId, answer, startedAt, updatedAt, answeredInRound) = baseAggregator.latestRoundData();
        _validateRound(answer, updatedAt, roundId, answeredInRound);
        answer = _computeSharesPrice(answer);
    }

    /// @inheritdoc ISharesOracleAggregator
    /// @dev WARNING: Historical rounds return price using CURRENT convertToAssets ratio,
    ///      not the historical ratio. This is inherent to the design - ERC4626 vaults
    ///      don't store historical conversion rates. Use latestRoundData() for accurate pricing.
    function getRoundData(uint80 requestedRoundId)
        external
        view
        returns (uint80 roundId, int256 answer, uint256 startedAt, uint256 updatedAt, uint80 answeredInRound)
    {
        (roundId, answer, startedAt, updatedAt, answeredInRound) = baseAggregator.getRoundData(requestedRoundId);
        _validateRound(answer, updatedAt, roundId, answeredInRound);
        answer = _computeSharesPrice(answer);
    }

    /*//////////////////////////////////////////////////////////////
                            INTERNAL FUNCTIONS
    //////////////////////////////////////////////////////////////*/

    /**
     * @notice Validates round data according to Chainlink best practices
     * @param answer The price answer from the oracle
     * @param updatedAt Timestamp when the price was last updated
     * @param roundId The round ID
     * @param answeredInRound The round in which the answer was computed
     * @dev Reverts if: price <= 0, round incomplete (answeredInRound < roundId),
     *      updatedAt == 0, or data is stale per maxDelay
     */
    function _validateRound(int256 answer, uint256 updatedAt, uint80 roundId, uint80 answeredInRound) internal view {
        if (answer <= 0) revert ISharesOracleAggregator.InvalidBasePrice();
        if (answeredInRound < roundId) revert ISharesOracleAggregator.StaleRound();
        if (updatedAt == 0) revert ISharesOracleAggregator.StaleRound();
        if (!_isFresh(updatedAt)) {
            revert ISharesOracleAggregator.PriceTooOld(block.timestamp, updatedAt, updatedAt + maxDelay);
        }
    }

    /**
     * @notice Checks if price data is fresh without reverting
     * @param updatedAt Timestamp when the price was last updated
     * @return True if fresh or maxDelay is 0, false otherwise
     */
    function _isFresh(uint256 updatedAt) internal view returns (bool) {
        if (updatedAt == 0) return false;
        if (maxDelay == 0) return true;
        return updatedAt + maxDelay >= block.timestamp;
    }

    /**
     * @notice Computes the raw shares price without clamping
     * @param basePrice The base asset price from the oracle
     * @return The computed shares price in TARGET_DECIMALS precision (before clamping)
     * @dev Formula: shares_price = base_price * convertToAssets(1 share) / 10^assetDecimals
     */
    function _computeSharesPriceRaw(int256 basePrice) internal view returns (int256) {
        // Get conversion rate: how many assets for 1 full share
        uint256 assets = sharesContract.convertToAssets(SHARE_UNIT);
        if (assets == 0) revert ISharesOracleAggregator.InvalidSharesConversion();

        // shares_price = asset_price * assets / ASSET_UNIT
        int256 sharesPrice = (basePrice * int256(assets)) / int256(ASSET_UNIT);

        // Scale to target decimals (8)
        if (baseDecimals > TARGET_DECIMALS) {
            uint256 diff = baseDecimals - TARGET_DECIMALS;
            sharesPrice /= int256(10 ** diff);
        } else if (baseDecimals < TARGET_DECIMALS) {
            uint256 diff = TARGET_DECIMALS - baseDecimals;
            sharesPrice *= int256(10 ** diff);
        }

        return sharesPrice;
    }

    /**
     * @notice Computes the shares price from the base asset price with clamping
     * @param basePrice The base asset price from the oracle
     * @return The computed shares price in TARGET_DECIMALS precision (after clamping if needed)
     */
    function _computeSharesPrice(int256 basePrice) internal view returns (int256) {
        int256 sharesPrice = _computeSharesPriceRaw(basePrice);

        // Check deviation from last validated price and clamp if needed
        if (_lastValidatedPrice > 0 && maxDeviationBps > 0) {
            uint256 deviation = _calculateDeviation(_lastValidatedPrice, sharesPrice);
            if (deviation > maxDeviationBps) {
                // Instead of reverting, clamp to max allowed deviation
                // This prevents DoS while still limiting price manipulation
                int256 maxAllowedChange = (_lastValidatedPrice * int256(maxDeviationBps)) / 10000;

                if (sharesPrice > _lastValidatedPrice) {
                    // Price increased - clamp to upper bound
                    sharesPrice = _lastValidatedPrice + maxAllowedChange;
                } else {
                    // Price decreased - clamp to lower bound
                    sharesPrice = _lastValidatedPrice - maxAllowedChange;
                }
            }
        }

        return sharesPrice;
    }

    /**
     * @notice Calculates price deviation in basis points
     * @param oldPrice Previous price
     * @param newPrice New price
     * @return Deviation in basis points (10000 = 100%)
     */
    function _calculateDeviation(int256 oldPrice, int256 newPrice) internal pure returns (uint256) {
        if (oldPrice == 0) return 0;

        int256 diff = newPrice > oldPrice ? newPrice - oldPrice : oldPrice - newPrice;
        return uint256((diff * 10000) / oldPrice);
    }

    /*//////////////////////////////////////////////////////////////
                            ADMIN FUNCTIONS
    //////////////////////////////////////////////////////////////*/

    /// @inheritdoc ISharesOracleAggregator
    function updateValidatedPrice() external {
        if (msg.sender != owner) revert ISharesOracleAggregator.Unauthorized();
        if (block.timestamp < _lastValidationTime + minValidationInterval) {
            revert ISharesOracleAggregator.ValidationUpdateTooSoon();
        }

        // Get current price (this will revert if deviation is too high from old validated price)
        // So we temporarily disable the check by setting maxDeviationBps to max
        uint256 tempMaxDev = maxDeviationBps;
        maxDeviationBps = type(uint256).max;

        (, int256 answer,,,) = this.latestRoundData();

        // Restore max deviation
        maxDeviationBps = tempMaxDev;

        _lastValidatedPrice = answer;
        _lastValidationTime = block.timestamp;

        emit ISharesOracleAggregator.ValidatedPriceUpdated(answer, block.timestamp);
    }

    /// @inheritdoc ISharesOracleAggregator
    function updateMaxDeviation(uint256 newMaxDeviationBps) external {
        if (msg.sender != owner) revert ISharesOracleAggregator.Unauthorized();

        uint256 oldDeviation = maxDeviationBps;
        maxDeviationBps = newMaxDeviationBps;

        emit ISharesOracleAggregator.MaxDeviationUpdated(oldDeviation, newMaxDeviationBps);
    }

    /*//////////////////////////////////////////////////////////////
                            VIEW FUNCTIONS
    //////////////////////////////////////////////////////////////*/

    /// @inheritdoc ISharesOracleAggregator
    function lastValidatedPrice() external view returns (int256) {
        return _lastValidatedPrice;
    }

    /// @inheritdoc ISharesOracleAggregator
    function isCurrentlyClamping() external view returns (bool isClamped, int256 actualPrice, int256 clampedPrice) {
        // Get base price
        (uint80 roundId, int256 basePrice,, uint256 baseTimestamp, uint80 answeredInRound) =
            baseAggregator.latestRoundData();
        _validateRound(basePrice, baseTimestamp, roundId, answeredInRound);

        // Compute actual shares price (before clamping logic)
        actualPrice = _computeSharesPriceRaw(basePrice);

        // Check if clamping would occur
        if (_lastValidatedPrice > 0 && maxDeviationBps > 0) {
            uint256 deviation = _calculateDeviation(_lastValidatedPrice, actualPrice);
            if (deviation > maxDeviationBps) {
                isClamped = true;

                // Compute clamped price
                int256 maxAllowedChange = (_lastValidatedPrice * int256(maxDeviationBps)) / 10000;
                if (actualPrice > _lastValidatedPrice) {
                    clampedPrice = _lastValidatedPrice + maxAllowedChange;
                } else {
                    clampedPrice = _lastValidatedPrice - maxAllowedChange;
                }
            } else {
                isClamped = false;
                clampedPrice = actualPrice;
            }
        } else {
            isClamped = false;
            clampedPrice = actualPrice;
        }
    }

    /*//////////////////////////////////////////////////////////////
                              OWNERSHIP
    //////////////////////////////////////////////////////////////*/

    /// @inheritdoc ISharesOracleAggregator
    function transferOwnership(address newOwner) external {
        if (msg.sender != owner) revert ISharesOracleAggregator.Unauthorized();
        if (newOwner == address(0)) revert ISharesOracleAggregator.BaseAggregatorZeroAddress();

        pendingOwner = newOwner;
        emit ISharesOracleAggregator.OwnershipTransferStarted(owner, newOwner);
    }

    /// @inheritdoc ISharesOracleAggregator
    function acceptOwnership() external {
        if (msg.sender != pendingOwner) revert ISharesOracleAggregator.Unauthorized();

        address previousOwner = owner;
        owner = pendingOwner;
        pendingOwner = address(0);
        emit ISharesOracleAggregator.OwnershipTransferred(previousOwner, owner);
    }
}

// SPDX-License-Identifier: MIT
// Chainlink Contracts v0.8
pragma solidity ^0.8.0;

interface AggregatorInterface {
  function latestAnswer() external view returns (int256);

  function latestTimestamp() external view returns (uint256);

  function latestRound() external view returns (uint256);

  function getAnswer(uint256 roundId) external view returns (int256);

  function getTimestamp(uint256 roundId) external view returns (uint256);

  event AnswerUpdated(int256 indexed current, uint256 indexed roundId, uint256 updatedAt);

  event NewRound(uint256 indexed roundId, address indexed startedBy, uint256 startedAt);
}

// SPDX-License-Identifier: MIT
pragma solidity 0.8.10;

interface IERC20Metadata {
    function name() external view returns (string memory);
    function symbol() external view returns (string memory);
    function decimals() external view returns (uint8);
}

// SPDX-License-Identifier: MIT
pragma solidity 0.8.10;

/**
 * @title IERC4626
 * @author Aave
 * @notice Minimal ERC4626 Tokenized Vault Standard interface
 * @dev Subset of EIP-4626 focusing on share-to-asset conversion
 */
interface IERC4626 {
    /**
     * @notice Returns the amount of assets that would be exchanged for the amount of shares provided
     * @param shares The amount of shares to convert
     * @return The amount of underlying assets equivalent to the shares
     */
    function convertToAssets(uint256 shares) external view returns (uint256);

    /**
     * @notice Returns the number of decimals used by the vault shares
     * @return The number of decimals for the share token
     */
    function decimals() external view returns (uint8);

    /**
     * @notice Returns the address of the underlying asset token
     * @return The address of the asset
     */
    function asset() external view returns (address);
}

// SPDX-License-Identifier: MIT
pragma solidity 0.8.10;

/**
 * @title ISharesOracleAggregator
 * @author Neverland
 * @notice Interface for SharesOracleAggregator that provides Chainlink-compatible oracle for ERC4626 vault shares
 * @dev Converts base asset prices to vault share prices using ERC4626's convertToAssets function
 * @dev Formula: shares_price = base_price * convertToAssets(1 share) / 10^assetDecimals
 */
interface ISharesOracleAggregator {
    /*//////////////////////////////////////////////////////////////
                                 ERRORS
    //////////////////////////////////////////////////////////////*/

    /// @notice Thrown when base aggregator address is zero
    error BaseAggregatorZeroAddress();

    /// @notice Thrown when shares contract address is zero
    error SharesContractZeroAddress();

    /// @notice Thrown when base price is invalid (zero or negative)
    error InvalidBasePrice();

    /// @notice Thrown when convertToAssets returns zero
    error InvalidSharesConversion();

    /// @notice Thrown when the ERC4626 asset address is zero
    error AssetZeroAddress();

    /// @notice Thrown when decimals exceed maximum allowed value (77)
    error InvalidDecimals();

    /**
     * @notice Thrown when price data is too old
     * @param currentTime Current block timestamp
     * @param updatedAt Timestamp when price was last updated
     * @param expiresAt Timestamp when price expires
     */
    error PriceTooOld(uint256 currentTime, uint256 updatedAt, uint256 expiresAt);

    /// @notice Thrown when oracle round is incomplete (answeredInRound < roundId or updatedAt == 0)
    error StaleRound();

    /**
     * @notice Thrown when price deviation exceeds maximum allowed
     * @param oldPrice Previous validated price
     * @param newPrice New computed price
     * @param deviation Actual deviation in basis points
     * @param maxDeviation Maximum allowed deviation in basis points
     */
    error PriceDeviationExceeded(int256 oldPrice, int256 newPrice, uint256 deviation, uint256 maxDeviation);

    /// @notice Thrown when trying to update validated price too soon
    error ValidationUpdateTooSoon();

    /// @notice Thrown when caller is not authorized
    error Unauthorized();

    /*//////////////////////////////////////////////////////////////
                                 EVENTS
    //////////////////////////////////////////////////////////////*/

    /**
     * @notice Emitted when validated price is updated
     * @param price New validated price
     * @param timestamp Update timestamp
     */
    event ValidatedPriceUpdated(int256 price, uint256 timestamp);

    /**
     * @notice Emitted when max deviation is updated
     * @param oldDeviation Previous max deviation in bps
     * @param newDeviation New max deviation in bps
     */
    event MaxDeviationUpdated(uint256 oldDeviation, uint256 newDeviation);

    /**
     * @notice Emitted when ownership transfer is initiated
     * @param previousOwner Current owner
     * @param newOwner Pending new owner
     */
    event OwnershipTransferStarted(address indexed previousOwner, address indexed newOwner);

    /**
     * @notice Emitted when ownership transfer is completed
     * @param previousOwner Previous owner
     * @param newOwner New owner
     */
    event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);

    /*//////////////////////////////////////////////////////////////
                            CHAINLINK INTERFACE
    //////////////////////////////////////////////////////////////*/

    /**
     * @notice Returns the latest shares price
     * @return The latest price in 8 decimal precision (Chainlink standard)
     */
    function latestAnswer() external view returns (int256);

    /**
     * @notice Returns the timestamp of the latest price update
     * @return The timestamp of the latest update
     */
    function latestTimestamp() external view returns (uint256);

    /**
     * @notice Returns the latest round ID from the base aggregator
     * @return The latest round ID
     */
    function latestRound() external view returns (uint256);

    /**
     * @notice Returns the shares price for a specific round
     * @param roundId The round ID to query
     * @return The price for the specified round, or 0 if unavailable/stale
     * @dev IMPORTANT: A return value of 0 means "price unavailable/invalid"
     *      Downstream consumers MUST NOT treat 0 as a valid price
     *      This function performs round completeness checks (answeredInRound, timestamp)
     */
    function getAnswer(uint256 roundId) external view returns (int256);

    /**
     * @notice Returns the timestamp for a specific round
     * @param roundId The round ID to query
     * @return The timestamp for the specified round, or 0 if unavailable/stale
     * @dev IMPORTANT: A return value of 0 means "timestamp unavailable/invalid"
     *      Downstream consumers MUST NOT treat 0 as a valid timestamp
     */
    function getTimestamp(uint256 roundId) external view returns (uint256);

    /**
     * @notice Returns the number of decimals used by this aggregator
     * @return The number of decimals (always 8 for Chainlink compatibility)
     */
    function decimals() external pure returns (uint8);

    /**
     * @notice Returns a description of this aggregator
     * @return A string describing the aggregator
     */
    function description() external view returns (string memory);

    /**
     * @notice Returns the version of this aggregator
     * @return The version number
     */
    function version() external pure returns (uint256);

    /**
     * @notice Returns the latest round data with shares price
     * @return roundId The round ID from base aggregator
     * @return answer The computed shares price
     * @return startedAt Timestamp when the round started
     * @return updatedAt Timestamp when the round was updated
     * @return answeredInRound The round ID in which the answer was computed
     */
    function latestRoundData()
        external
        view
        returns (uint80 roundId, int256 answer, uint256 startedAt, uint256 updatedAt, uint80 answeredInRound);

    /**
     * @notice Returns round data for a specific round with shares price
     * @param requestedRoundId The round ID to retrieve
     * @return roundId The round ID from base aggregator
     * @return answer The computed shares price for this round
     * @return startedAt Timestamp when the round started
     * @return updatedAt Timestamp when the round was updated
     * @return answeredInRound The round ID in which the answer was computed
     * @dev WARNING: Historical rounds use CURRENT convertToAssets ratio, not historical
     *      ERC4626 vaults do not store historical conversion rates
     *      For accurate pricing, use latestRoundData() only
     *      This is a known limitation, not a bug
     */
    function getRoundData(uint80 requestedRoundId)
        external
        view
        returns (uint80 roundId, int256 answer, uint256 startedAt, uint256 updatedAt, uint80 answeredInRound);

    /*//////////////////////////////////////////////////////////////
                            ADMIN FUNCTIONS
    //////////////////////////////////////////////////////////////*/

    /**
     * @notice Updates the validated price reference (admin only)
     * @dev Can only be called after minValidationInterval has passed
     */
    function updateValidatedPrice() external;

    /**
     * @notice Updates the maximum allowed deviation (admin only)
     * @param newMaxDeviationBps New maximum deviation in basis points
     */
    function updateMaxDeviation(uint256 newMaxDeviationBps) external;

    /*//////////////////////////////////////////////////////////////
                            VIEW FUNCTIONS
    //////////////////////////////////////////////////////////////*/

    /**
     * @notice Returns the current validated price reference
     * @return The last validated price
     */
    function lastValidatedPrice() external view returns (int256);

    /**
     * @notice Returns the maximum allowed deviation
     * @return The max deviation in basis points
     */
    function maxDeviationBps() external view returns (uint256);

    /**
     * @notice Returns the current owner address
     * @return The owner address
     */
    function owner() external view returns (address);

    /**
     * @notice Returns the pending owner address (during two-step transfer)
     * @return The pending owner address
     */
    function pendingOwner() external view returns (address);

    /**
     * @notice Checks if current price is being clamped due to deviation
     * @return isClamped True if current price would be clamped
     * @return actualPrice The actual computed price (before clamping)
     * @return clampedPrice The price that would be returned (after clamping)
     */
    function isCurrentlyClamping() external view returns (bool isClamped, int256 actualPrice, int256 clampedPrice);

    /*//////////////////////////////////////////////////////////////
                            OWNERSHIP
    //////////////////////////////////////////////////////////////*/

    /**
     * @notice Initiates ownership transfer (two-step process)
     * @param newOwner Address of the new owner
     */
    function transferOwnership(address newOwner) external;

    /**
     * @notice Accepts ownership transfer (called by pending owner)
     */
    function acceptOwnership() external;
}

Settings
{
  "optimizer": {
    "enabled": true,
    "runs": 100000
  },
  "evmVersion": "berlin",
  "outputSelection": {
    "*": {
      "*": [
        "evm.bytecode",
        "evm.deployedBytecode",
        "devdoc",
        "userdoc",
        "metadata",
        "abi"
      ]
    }
  },
  "metadata": {
    "useLiteralContent": true
  }
}

Contract Security Audit

Contract ABI

API
[{"inputs":[{"internalType":"address","name":"_baseAggregator","type":"address"},{"internalType":"address","name":"_sharesContract","type":"address"},{"internalType":"uint256","name":"_maxDelay","type":"uint256"},{"internalType":"uint256","name":"_maxDeviationBps","type":"uint256"},{"internalType":"uint256","name":"_minValidationInterval","type":"uint256"},{"internalType":"string","name":"_description","type":"string"}],"stateMutability":"nonpayable","type":"constructor"},{"inputs":[],"name":"AssetZeroAddress","type":"error"},{"inputs":[],"name":"BaseAggregatorZeroAddress","type":"error"},{"inputs":[],"name":"InvalidBasePrice","type":"error"},{"inputs":[],"name":"InvalidDecimals","type":"error"},{"inputs":[],"name":"InvalidSharesConversion","type":"error"},{"inputs":[{"internalType":"int256","name":"oldPrice","type":"int256"},{"internalType":"int256","name":"newPrice","type":"int256"},{"internalType":"uint256","name":"deviation","type":"uint256"},{"internalType":"uint256","name":"maxDeviation","type":"uint256"}],"name":"PriceDeviationExceeded","type":"error"},{"inputs":[{"internalType":"uint256","name":"currentTime","type":"uint256"},{"internalType":"uint256","name":"updatedAt","type":"uint256"},{"internalType":"uint256","name":"expiresAt","type":"uint256"}],"name":"PriceTooOld","type":"error"},{"inputs":[],"name":"SharesContractZeroAddress","type":"error"},{"inputs":[],"name":"StaleRound","type":"error"},{"inputs":[],"name":"Unauthorized","type":"error"},{"inputs":[],"name":"ValidationUpdateTooSoon","type":"error"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"oldDeviation","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"newDeviation","type":"uint256"}],"name":"MaxDeviationUpdated","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":false,"internalType":"int256","name":"price","type":"int256"},{"indexed":false,"internalType":"uint256","name":"timestamp","type":"uint256"}],"name":"ValidatedPriceUpdated","type":"event"},{"inputs":[],"name":"acceptOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"assetDecimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"baseAggregator","outputs":[{"internalType":"contract IAggregatorWithDecimals","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"baseDecimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"description","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"roundId","type":"uint256"}],"name":"getAnswer","outputs":[{"internalType":"int256","name":"","type":"int256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint80","name":"requestedRoundId","type":"uint80"}],"name":"getRoundData","outputs":[{"internalType":"uint80","name":"roundId","type":"uint80"},{"internalType":"int256","name":"answer","type":"int256"},{"internalType":"uint256","name":"startedAt","type":"uint256"},{"internalType":"uint256","name":"updatedAt","type":"uint256"},{"internalType":"uint80","name":"answeredInRound","type":"uint80"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"roundId","type":"uint256"}],"name":"getTimestamp","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"isCurrentlyClamping","outputs":[{"internalType":"bool","name":"isClamped","type":"bool"},{"internalType":"int256","name":"actualPrice","type":"int256"},{"internalType":"int256","name":"clampedPrice","type":"int256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"lastValidatedPrice","outputs":[{"internalType":"int256","name":"","type":"int256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"latestAnswer","outputs":[{"internalType":"int256","name":"","type":"int256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"latestRound","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"latestRoundData","outputs":[{"internalType":"uint80","name":"roundId","type":"uint80"},{"internalType":"int256","name":"answer","type":"int256"},{"internalType":"uint256","name":"startedAt","type":"uint256"},{"internalType":"uint256","name":"updatedAt","type":"uint256"},{"internalType":"uint80","name":"answeredInRound","type":"uint80"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"latestTimestamp","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxDelay","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxDeviationBps","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"minValidationInterval","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"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":"sharesContract","outputs":[{"internalType":"contract IERC4626","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sharesDecimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newMaxDeviationBps","type":"uint256"}],"name":"updateMaxDeviation","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"updateValidatedPrice","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"version","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"pure","type":"function"}]

6101a06040523480156200001257600080fd5b506040516200230d3803806200230d833981016040819052620000359162000428565b6001600160a01b0386166200005d5760405163bf1c16e960e01b815260040160405180910390fd5b6001600160a01b03851662000085576040516319ece6e360e21b815260040160405180910390fd5b6001600160a01b03808716608081905290861660a05260c0859052600084905560e0839052600180546001600160a01b031916331790556040805163313ce56760e01b8152905163313ce567916004808201926020929091908290030181865afa158015620000f8573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200011e919062000549565b60ff16610100819052604d10156200014957604051630692acc560e51b815260040160405180910390fd5b60a0516001600160a01b031663313ce5676040518163ffffffff1660e01b8152600401602060405180830381865afa1580156200018a573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620001b0919062000549565b60ff16610120819052604d1015620001db57604051630692acc560e51b815260040160405180910390fd5b61012051620001ec90600a6200068a565b6101608181525050600060a0516001600160a01b03166338d52e0f6040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000237573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200025d91906200069b565b90506001600160a01b03811662000287576040516302a7314f60e41b815260040160405180910390fd5b806001600160a01b031663313ce5676040518163ffffffff1660e01b8152600401602060405180830381865afa158015620002c6573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620002ec919062000549565b60ff16610140819052604d10156200031757604051630692acc560e51b815260040160405180910390fd5b610140516200032890600a6200068a565b610180528151620003419060039060208501906200034f565b5050505050505050620006f6565b8280546200035d90620006b9565b90600052602060002090601f016020900481019282620003815760008555620003cc565b82601f106200039c57805160ff1916838001178555620003cc565b82800160010185558215620003cc579182015b82811115620003cc578251825591602001919060010190620003af565b50620003da929150620003de565b5090565b5b80821115620003da5760008155600101620003df565b80516001600160a01b03811681146200040d57600080fd5b919050565b634e487b7160e01b600052604160045260246000fd5b60008060008060008060c087890312156200044257600080fd5b6200044d87620003f5565b955060206200045e818901620003f5565b604089015160608a015160808b015160a08c0151939950919750955093506001600160401b03808211156200049257600080fd5b818a0191508a601f830112620004a757600080fd5b815181811115620004bc57620004bc62000412565b604051601f8201601f19908116603f01168101908382118183101715620004e757620004e762000412565b816040528281528d868487010111156200050057600080fd5b600093505b8284101562000524578484018601518185018701529285019262000505565b82841115620005365760008684830101525b8096505050505050509295509295509295565b6000602082840312156200055c57600080fd5b815160ff811681146200056e57600080fd5b9392505050565b634e487b7160e01b600052601160045260246000fd5b600181815b80851115620005cc578160001904821115620005b057620005b062000575565b80851615620005be57918102915b93841c939080029062000590565b509250929050565b600082620005e55750600162000684565b81620005f45750600062000684565b81600181146200060d5760028114620006185762000638565b600191505062000684565b60ff8411156200062c576200062c62000575565b50506001821b62000684565b5060208310610133831016604e8410600b84101617156200065d575081810a62000684565b6200066983836200058b565b806000190482111562000680576200068062000575565b0290505b92915050565b60006200056e60ff841683620005d4565b600060208284031215620006ae57600080fd5b6200056e82620003f5565b600181811c90821680620006ce57607f821691505b60208210811415620006f057634e487b7160e01b600052602260045260246000fd5b50919050565b60805160a05160c05160e0516101005161012051610140516101605161018051611b2f620007de60003960006113fd01526000611315015260006103c2015260006101cd01526000818161022c0152818161143601528181611469015281816114b101526114e2015260008181610304015261055501526000818161042e015281816111720152818161128f01526112c0015260008181610290015261135501526000818161039b015281816106b0015281816107680152818161096501528181610a6901528181610b3d01528181610c9301528181610d6c0152610fe40152611b2f6000f3fe608060405234801561001057600080fd5b50600436106101ae5760003560e01c80638205bf6a116100ee578063b9692bd211610097578063e30c397811610071578063e30c397814610409578063ed49d2f814610429578063f2fde38b14610450578063feaf968c1461046357600080fd5b8063b9692bd214610396578063c2d41601146103bd578063d5c84a38146103e457600080fd5b80639a6fc8f5116100c85780639a6fc8f514610326578063b5ab58dc14610370578063b633620c1461038357600080fd5b80638205bf6a146102d75780638da5cb5b146102df578063952684ae146102ff57600080fd5b80633ee7a7011161015b578063668a0f0211610135578063668a0f02146102665780637284e4161461026e57806379ba5097146102835780637bc1ed631461028b57600080fd5b80633ee7a7011461024e57806350d25bcd1461025757806354fd4d501461025f57600080fd5b80632dd67a421161018c5780632dd67a421461020e578063313ce5671461022057806333f761781461022757600080fd5b806302651a29146101b3578063149aa916146101c85780632a9477d614610206575b600080fd5b6101c66101c136600461157d565b61046b565b005b6101ef7f000000000000000000000000000000000000000000000000000000000000000081565b60405160ff90911681526020015b60405180910390f35b6101c6610502565b6004545b6040519081526020016101fd565b60086101ef565b6101ef7f000000000000000000000000000000000000000000000000000000000000000081565b61021260005481565b6102126106a6565b6001610212565b610212610764565b6102766107fa565b6040516101fd9190611596565b6101c6610888565b6102b27f000000000000000000000000000000000000000000000000000000000000000081565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020016101fd565b61021261095b565b6001546102b29073ffffffffffffffffffffffffffffffffffffffff1681565b6102127f000000000000000000000000000000000000000000000000000000000000000081565b610339610334366004611624565b610a0f565b6040805169ffffffffffffffffffff968716815260208101959095528401929092526060830152909116608082015260a0016101fd565b61021261037e36600461157d565b610b00565b61021261039136600461157d565b610c61565b6102b27f000000000000000000000000000000000000000000000000000000000000000081565b6101ef7f000000000000000000000000000000000000000000000000000000000000000081565b6103ec610d5f565b6040805193151584526020840192909252908201526060016101fd565b6002546102b29073ffffffffffffffffffffffffffffffffffffffff1681565b6102127f000000000000000000000000000000000000000000000000000000000000000081565b6101c661045e366004611641565b610ec5565b610339610fda565b60015473ffffffffffffffffffffffffffffffffffffffff1633146104bc576040517f82b4290000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600080549082905560408051828152602081018490527fea7b0359048504e79474eaaa05294b49265fc4e7b0a0c3737aaa22412e90f16e91015b60405180910390a15050565b60015473ffffffffffffffffffffffffffffffffffffffff163314610553576040517f82b4290000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b7f000000000000000000000000000000000000000000000000000000000000000060055461058191906116a6565b4210156105ba576040517f3370678500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000805490507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff60008190555060003073ffffffffffffffffffffffffffffffffffffffff1663feaf968c6040518163ffffffff1660e01b815260040160a060405180830381865afa158015610634573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061065891906116be565b505050600084905560048190554260058190556040805183815260208101929092529193507f74cce8dc025f18877bd0df5b69d8d22c4cfb4d2c93c991288734263b6410af369250016104f6565b60008060008060007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663feaf968c6040518163ffffffff1660e01b815260040160a060405180830381865afa158015610719573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061073d91906116be565b9450945050935093506107528383868461109b565b61075b836111e4565b94505050505090565b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663668a0f026040518163ffffffff1660e01b8152600401602060405180830381865afa1580156107d1573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906107f59190611716565b905090565b600380546108079061172f565b80601f01602080910402602001604051908101604052809291908181526020018280546108339061172f565b80156108805780601f1061085557610100808354040283529160200191610880565b820191906000526020600020905b81548152906001019060200180831161086357829003601f168201915b505050505081565b60025473ffffffffffffffffffffffffffffffffffffffff1633146108d9576040517f82b4290000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60018054600280547fffffffffffffffffffffffff000000000000000000000000000000000000000080841673ffffffffffffffffffffffffffffffffffffffff8381169182179096559116909155604051929091169182907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a350565b60008060008060007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663feaf968c6040518163ffffffff1660e01b815260040160a060405180830381865afa1580156109ce573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109f291906116be565b945094505093509350610a078383868461109b565b509392505050565b6040517f9a6fc8f500000000000000000000000000000000000000000000000000000000815269ffffffffffffffffffff82166004820152600090819081908190819073ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001690639a6fc8f59060240160a060405180830381865afa158015610ab0573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ad491906116be565b939850919650945092509050610aec8483878461109b565b610af5846111e4565b935091939590929450565b6040517f9a6fc8f500000000000000000000000000000000000000000000000000000000815269ffffffffffffffffffff821660048201526000907f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1690639a6fc8f59060240160a060405180830381865afa925050508015610bd3575060408051601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0168201909252610bd0918101906116be565b60015b610bdf57506000919050565b60008413610bf4575060009695505050505050565b81610c06575060009695505050505050565b8469ffffffffffffffffffff168169ffffffffffffffffffff161015610c33575060009695505050505050565b610c3c8261127e565b610c4d575060009695505050505050565b610c56846111e4565b979650505050505050565b6040517fb633620c000000000000000000000000000000000000000000000000000000008152600481018290526000907f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff169063b633620c90602401602060405180830381865afa925050508015610d29575060408051601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0168201909252610d2691810190611716565b60015b610d3557506000919050565b80610d435750600092915050565b610d4c8161127e565b610d595750600092915050565b92915050565b60008060008060008060007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663feaf968c6040518163ffffffff1660e01b815260040160a060405180830381865afa158015610dd5573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610df991906116be565b945094505093509350610e0e8383868461109b565b610e17836112ed565b95506000600454138015610e2c575060008054115b15610eb4576000610e3f6004548861152b565b9050600054811115610ea657600197506000612710600054600454610e649190611783565b610e6e919061183f565b9050600454881315610e8f5780600454610e8891906118ce565b9650610ea0565b80600454610e9d9190611942565b96505b50610eae565b600097508695505b50610ebc565b600096508594505b50505050909192565b60015473ffffffffffffffffffffffffffffffffffffffff163314610f16576040517f82b4290000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff8116610f63576040517fbf1c16e900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600280547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff838116918217909255600154604051919216907f38d16b8cac22d99fc7c124b9cd0de2d3fa1faef420bfe791d8c362d765e2270090600090a350565b60008060008060007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663feaf968c6040518163ffffffff1660e01b815260040160a060405180830381865afa15801561104d573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061107191906116be565b9398509196509450925090506110898483878461109b565b611092846111e4565b93509091929394565b600084136110d5576040517fb2c4287100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8169ffffffffffffffffffff168169ffffffffffffffffffff161015611127576040517f04d2887100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8261115e576040517f04d2887100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6111678361127e565b6111de5742836111977f0000000000000000000000000000000000000000000000000000000000000000826116a6565b6040517f4253334a00000000000000000000000000000000000000000000000000000000815260048101939093526024830191909152604482015260640160405180910390fd5b50505050565b6000806111f0836112ed565b90506000600454138015611205575060008054115b15610d595760006112186004548361152b565b90506000548111156112775760006127106000546004546112399190611783565b611243919061183f565b9050600454831315611264578060045461125d91906118ce565b9250611275565b806004546112729190611942565b92505b505b5092915050565b60008161128d57506000919050565b7f00000000000000000000000000000000000000000000000000000000000000006112ba57506001919050565b426112e57f0000000000000000000000000000000000000000000000000000000000000000846116a6565b101592915050565b6040517f07a2d13a0000000000000000000000000000000000000000000000000000000081527f00000000000000000000000000000000000000000000000000000000000000006004820152600090819073ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000000016906307a2d13a90602401602060405180830381865afa15801561139c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906113c09190611716565b9050806113f9576040517f22d125db00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60007f00000000000000000000000000000000000000000000000000000000000000006114268386611783565b611430919061183f565b905060087f000000000000000000000000000000000000000000000000000000000000000060ff1611156114ad57600061148e600860ff7f0000000000000000000000000000000000000000000000000000000000000000166119b6565b905061149b81600a611aed565b6114a5908361183f565b915050611524565b60087f000000000000000000000000000000000000000000000000000000000000000060ff16101561152457600061150960ff7f00000000000000000000000000000000000000000000000000000000000000001660086119b6565b905061151681600a611aed565b6115209083611783565b9150505b9392505050565b60008261153a57506000610d59565b60008383136115525761154d8385611942565b61155c565b61155c8484611942565b90508361156b82612710611783565b611575919061183f565b949350505050565b60006020828403121561158f57600080fd5b5035919050565b600060208083528351808285015260005b818110156115c3578581018301518582016040015282016115a7565b818111156115d5576000604083870101525b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016929092016040019392505050565b69ffffffffffffffffffff8116811461162157600080fd5b50565b60006020828403121561163657600080fd5b813561152481611609565b60006020828403121561165357600080fd5b813573ffffffffffffffffffffffffffffffffffffffff8116811461152457600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600082198211156116b9576116b9611677565b500190565b600080600080600060a086880312156116d657600080fd5b85516116e181611609565b80955050602086015193506040860151925060608601519150608086015161170881611609565b809150509295509295909350565b60006020828403121561172857600080fd5b5051919050565b600181811c9082168061174357607f821691505b6020821081141561177d577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b50919050565b60007f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6000841360008413858304851182821616156117c4576117c4611677565b7f800000000000000000000000000000000000000000000000000000000000000060008712868205881281841616156117ff576117ff611677565b6000871292508782058712848416161561181b5761181b611677565b8785058712818416161561183157611831611677565b505050929093029392505050565b600082611875577f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff83147f8000000000000000000000000000000000000000000000000000000000000000831416156118c9576118c9611677565b500590565b6000808212827f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0384138115161561190857611908611677565b827f800000000000000000000000000000000000000000000000000000000000000003841281161561193c5761193c611677565b50500190565b6000808312837f80000000000000000000000000000000000000000000000000000000000000000183128115161561197c5761197c611677565b837f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0183138116156119b0576119b0611677565b50500390565b6000828210156119c8576119c8611677565b500390565b600181815b80851115611a2657817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff04821115611a0c57611a0c611677565b80851615611a1957918102915b93841c93908002906119d2565b509250929050565b600082611a3d57506001610d59565b81611a4a57506000610d59565b8160018114611a605760028114611a6a57611a86565b6001915050610d59565b60ff841115611a7b57611a7b611677565b50506001821b610d59565b5060208310610133831016604e8410600b8410161715611aa9575081810a610d59565b611ab383836119cd565b807fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff04821115611ae557611ae5611677565b029392505050565b60006115248383611a2e56fea2646970667358221220fe21e34613d81358bcc6b485cd61b5f2390e9f56e780a39c53960e916b482a9164736f6c634300080a003300000000000000000000000063bb491346fcc8695244d811f0c3501e6c2e8d250000000000000000000000009c82eb49b51f7dc61e22ff347931ca32adc6cd9000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c0000000000000000000000000000000000000000000000000000000000000000c6c6f415a4e44202f205553440000000000000000000000000000000000000000

Deployed Bytecode

0x608060405234801561001057600080fd5b50600436106101ae5760003560e01c80638205bf6a116100ee578063b9692bd211610097578063e30c397811610071578063e30c397814610409578063ed49d2f814610429578063f2fde38b14610450578063feaf968c1461046357600080fd5b8063b9692bd214610396578063c2d41601146103bd578063d5c84a38146103e457600080fd5b80639a6fc8f5116100c85780639a6fc8f514610326578063b5ab58dc14610370578063b633620c1461038357600080fd5b80638205bf6a146102d75780638da5cb5b146102df578063952684ae146102ff57600080fd5b80633ee7a7011161015b578063668a0f0211610135578063668a0f02146102665780637284e4161461026e57806379ba5097146102835780637bc1ed631461028b57600080fd5b80633ee7a7011461024e57806350d25bcd1461025757806354fd4d501461025f57600080fd5b80632dd67a421161018c5780632dd67a421461020e578063313ce5671461022057806333f761781461022757600080fd5b806302651a29146101b3578063149aa916146101c85780632a9477d614610206575b600080fd5b6101c66101c136600461157d565b61046b565b005b6101ef7f000000000000000000000000000000000000000000000000000000000000001281565b60405160ff90911681526020015b60405180910390f35b6101c6610502565b6004545b6040519081526020016101fd565b60086101ef565b6101ef7f000000000000000000000000000000000000000000000000000000000000000881565b61021260005481565b6102126106a6565b6001610212565b610212610764565b6102766107fa565b6040516101fd9190611596565b6101c6610888565b6102b27f0000000000000000000000009c82eb49b51f7dc61e22ff347931ca32adc6cd9081565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020016101fd565b61021261095b565b6001546102b29073ffffffffffffffffffffffffffffffffffffffff1681565b6102127f000000000000000000000000000000000000000000000000000000000000000081565b610339610334366004611624565b610a0f565b6040805169ffffffffffffffffffff968716815260208101959095528401929092526060830152909116608082015260a0016101fd565b61021261037e36600461157d565b610b00565b61021261039136600461157d565b610c61565b6102b27f00000000000000000000000063bb491346fcc8695244d811f0c3501e6c2e8d2581565b6101ef7f000000000000000000000000000000000000000000000000000000000000001281565b6103ec610d5f565b6040805193151584526020840192909252908201526060016101fd565b6002546102b29073ffffffffffffffffffffffffffffffffffffffff1681565b6102127f000000000000000000000000000000000000000000000000000000000000000081565b6101c661045e366004611641565b610ec5565b610339610fda565b60015473ffffffffffffffffffffffffffffffffffffffff1633146104bc576040517f82b4290000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600080549082905560408051828152602081018490527fea7b0359048504e79474eaaa05294b49265fc4e7b0a0c3737aaa22412e90f16e91015b60405180910390a15050565b60015473ffffffffffffffffffffffffffffffffffffffff163314610553576040517f82b4290000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b7f000000000000000000000000000000000000000000000000000000000000000060055461058191906116a6565b4210156105ba576040517f3370678500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000805490507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff60008190555060003073ffffffffffffffffffffffffffffffffffffffff1663feaf968c6040518163ffffffff1660e01b815260040160a060405180830381865afa158015610634573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061065891906116be565b505050600084905560048190554260058190556040805183815260208101929092529193507f74cce8dc025f18877bd0df5b69d8d22c4cfb4d2c93c991288734263b6410af369250016104f6565b60008060008060007f00000000000000000000000063bb491346fcc8695244d811f0c3501e6c2e8d2573ffffffffffffffffffffffffffffffffffffffff1663feaf968c6040518163ffffffff1660e01b815260040160a060405180830381865afa158015610719573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061073d91906116be565b9450945050935093506107528383868461109b565b61075b836111e4565b94505050505090565b60007f00000000000000000000000063bb491346fcc8695244d811f0c3501e6c2e8d2573ffffffffffffffffffffffffffffffffffffffff1663668a0f026040518163ffffffff1660e01b8152600401602060405180830381865afa1580156107d1573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906107f59190611716565b905090565b600380546108079061172f565b80601f01602080910402602001604051908101604052809291908181526020018280546108339061172f565b80156108805780601f1061085557610100808354040283529160200191610880565b820191906000526020600020905b81548152906001019060200180831161086357829003601f168201915b505050505081565b60025473ffffffffffffffffffffffffffffffffffffffff1633146108d9576040517f82b4290000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60018054600280547fffffffffffffffffffffffff000000000000000000000000000000000000000080841673ffffffffffffffffffffffffffffffffffffffff8381169182179096559116909155604051929091169182907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a350565b60008060008060007f00000000000000000000000063bb491346fcc8695244d811f0c3501e6c2e8d2573ffffffffffffffffffffffffffffffffffffffff1663feaf968c6040518163ffffffff1660e01b815260040160a060405180830381865afa1580156109ce573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109f291906116be565b945094505093509350610a078383868461109b565b509392505050565b6040517f9a6fc8f500000000000000000000000000000000000000000000000000000000815269ffffffffffffffffffff82166004820152600090819081908190819073ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000063bb491346fcc8695244d811f0c3501e6c2e8d251690639a6fc8f59060240160a060405180830381865afa158015610ab0573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ad491906116be565b939850919650945092509050610aec8483878461109b565b610af5846111e4565b935091939590929450565b6040517f9a6fc8f500000000000000000000000000000000000000000000000000000000815269ffffffffffffffffffff821660048201526000907f00000000000000000000000063bb491346fcc8695244d811f0c3501e6c2e8d2573ffffffffffffffffffffffffffffffffffffffff1690639a6fc8f59060240160a060405180830381865afa925050508015610bd3575060408051601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0168201909252610bd0918101906116be565b60015b610bdf57506000919050565b60008413610bf4575060009695505050505050565b81610c06575060009695505050505050565b8469ffffffffffffffffffff168169ffffffffffffffffffff161015610c33575060009695505050505050565b610c3c8261127e565b610c4d575060009695505050505050565b610c56846111e4565b979650505050505050565b6040517fb633620c000000000000000000000000000000000000000000000000000000008152600481018290526000907f00000000000000000000000063bb491346fcc8695244d811f0c3501e6c2e8d2573ffffffffffffffffffffffffffffffffffffffff169063b633620c90602401602060405180830381865afa925050508015610d29575060408051601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0168201909252610d2691810190611716565b60015b610d3557506000919050565b80610d435750600092915050565b610d4c8161127e565b610d595750600092915050565b92915050565b60008060008060008060007f00000000000000000000000063bb491346fcc8695244d811f0c3501e6c2e8d2573ffffffffffffffffffffffffffffffffffffffff1663feaf968c6040518163ffffffff1660e01b815260040160a060405180830381865afa158015610dd5573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610df991906116be565b945094505093509350610e0e8383868461109b565b610e17836112ed565b95506000600454138015610e2c575060008054115b15610eb4576000610e3f6004548861152b565b9050600054811115610ea657600197506000612710600054600454610e649190611783565b610e6e919061183f565b9050600454881315610e8f5780600454610e8891906118ce565b9650610ea0565b80600454610e9d9190611942565b96505b50610eae565b600097508695505b50610ebc565b600096508594505b50505050909192565b60015473ffffffffffffffffffffffffffffffffffffffff163314610f16576040517f82b4290000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff8116610f63576040517fbf1c16e900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600280547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff838116918217909255600154604051919216907f38d16b8cac22d99fc7c124b9cd0de2d3fa1faef420bfe791d8c362d765e2270090600090a350565b60008060008060007f00000000000000000000000063bb491346fcc8695244d811f0c3501e6c2e8d2573ffffffffffffffffffffffffffffffffffffffff1663feaf968c6040518163ffffffff1660e01b815260040160a060405180830381865afa15801561104d573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061107191906116be565b9398509196509450925090506110898483878461109b565b611092846111e4565b93509091929394565b600084136110d5576040517fb2c4287100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8169ffffffffffffffffffff168169ffffffffffffffffffff161015611127576040517f04d2887100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8261115e576040517f04d2887100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6111678361127e565b6111de5742836111977f0000000000000000000000000000000000000000000000000000000000000000826116a6565b6040517f4253334a00000000000000000000000000000000000000000000000000000000815260048101939093526024830191909152604482015260640160405180910390fd5b50505050565b6000806111f0836112ed565b90506000600454138015611205575060008054115b15610d595760006112186004548361152b565b90506000548111156112775760006127106000546004546112399190611783565b611243919061183f565b9050600454831315611264578060045461125d91906118ce565b9250611275565b806004546112729190611942565b92505b505b5092915050565b60008161128d57506000919050565b7f00000000000000000000000000000000000000000000000000000000000000006112ba57506001919050565b426112e57f0000000000000000000000000000000000000000000000000000000000000000846116a6565b101592915050565b6040517f07a2d13a0000000000000000000000000000000000000000000000000000000081527f0000000000000000000000000000000000000000000000000de0b6b3a76400006004820152600090819073ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000009c82eb49b51f7dc61e22ff347931ca32adc6cd9016906307a2d13a90602401602060405180830381865afa15801561139c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906113c09190611716565b9050806113f9576040517f22d125db00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60007f0000000000000000000000000000000000000000000000000de0b6b3a76400006114268386611783565b611430919061183f565b905060087f000000000000000000000000000000000000000000000000000000000000000860ff1611156114ad57600061148e600860ff7f0000000000000000000000000000000000000000000000000000000000000008166119b6565b905061149b81600a611aed565b6114a5908361183f565b915050611524565b60087f000000000000000000000000000000000000000000000000000000000000000860ff16101561152457600061150960ff7f00000000000000000000000000000000000000000000000000000000000000081660086119b6565b905061151681600a611aed565b6115209083611783565b9150505b9392505050565b60008261153a57506000610d59565b60008383136115525761154d8385611942565b61155c565b61155c8484611942565b90508361156b82612710611783565b611575919061183f565b949350505050565b60006020828403121561158f57600080fd5b5035919050565b600060208083528351808285015260005b818110156115c3578581018301518582016040015282016115a7565b818111156115d5576000604083870101525b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016929092016040019392505050565b69ffffffffffffffffffff8116811461162157600080fd5b50565b60006020828403121561163657600080fd5b813561152481611609565b60006020828403121561165357600080fd5b813573ffffffffffffffffffffffffffffffffffffffff8116811461152457600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600082198211156116b9576116b9611677565b500190565b600080600080600060a086880312156116d657600080fd5b85516116e181611609565b80955050602086015193506040860151925060608601519150608086015161170881611609565b809150509295509295909350565b60006020828403121561172857600080fd5b5051919050565b600181811c9082168061174357607f821691505b6020821081141561177d577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b50919050565b60007f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6000841360008413858304851182821616156117c4576117c4611677565b7f800000000000000000000000000000000000000000000000000000000000000060008712868205881281841616156117ff576117ff611677565b6000871292508782058712848416161561181b5761181b611677565b8785058712818416161561183157611831611677565b505050929093029392505050565b600082611875577f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff83147f8000000000000000000000000000000000000000000000000000000000000000831416156118c9576118c9611677565b500590565b6000808212827f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0384138115161561190857611908611677565b827f800000000000000000000000000000000000000000000000000000000000000003841281161561193c5761193c611677565b50500190565b6000808312837f80000000000000000000000000000000000000000000000000000000000000000183128115161561197c5761197c611677565b837f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0183138116156119b0576119b0611677565b50500390565b6000828210156119c8576119c8611677565b500390565b600181815b80851115611a2657817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff04821115611a0c57611a0c611677565b80851615611a1957918102915b93841c93908002906119d2565b509250929050565b600082611a3d57506001610d59565b81611a4a57506000610d59565b8160018114611a605760028114611a6a57611a86565b6001915050610d59565b60ff841115611a7b57611a7b611677565b50506001821b610d59565b5060208310610133831016604e8410600b8410161715611aa9575081810a610d59565b611ab383836119cd565b807fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff04821115611ae557611ae5611677565b029392505050565b60006115248383611a2e56fea2646970667358221220fe21e34613d81358bcc6b485cd61b5f2390e9f56e780a39c53960e916b482a9164736f6c634300080a0033

Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)

00000000000000000000000063bb491346fcc8695244d811f0c3501e6c2e8d250000000000000000000000009c82eb49b51f7dc61e22ff347931ca32adc6cd9000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c0000000000000000000000000000000000000000000000000000000000000000c6c6f415a4e44202f205553440000000000000000000000000000000000000000

-----Decoded View---------------
Arg [0] : _baseAggregator (address): 0x63Bb491346fCC8695244D811F0c3501E6C2e8d25
Arg [1] : _sharesContract (address): 0x9c82eB49B51F7Dc61e22Ff347931CA32aDc6cd90
Arg [2] : _maxDelay (uint256): 0
Arg [3] : _maxDeviationBps (uint256): 0
Arg [4] : _minValidationInterval (uint256): 0
Arg [5] : _description (string): loAZND / USD

-----Encoded View---------------
8 Constructor Arguments found :
Arg [0] : 00000000000000000000000063bb491346fcc8695244d811f0c3501e6c2e8d25
Arg [1] : 0000000000000000000000009c82eb49b51f7dc61e22ff347931ca32adc6cd90
Arg [2] : 0000000000000000000000000000000000000000000000000000000000000000
Arg [3] : 0000000000000000000000000000000000000000000000000000000000000000
Arg [4] : 0000000000000000000000000000000000000000000000000000000000000000
Arg [5] : 00000000000000000000000000000000000000000000000000000000000000c0
Arg [6] : 000000000000000000000000000000000000000000000000000000000000000c
Arg [7] : 6c6f415a4e44202f205553440000000000000000000000000000000000000000


Block Transaction Gas Used Reward
view all blocks produced

Block Uncle Number Difficulty Gas Used Reward
View All Uncles
Loading...
Loading
Loading...
Loading
Loading...
Loading

Validator Index Block Amount
View All Withdrawals

Transaction Hash Block Value Eth2 PubKey Valid
View All Deposits
[ 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.