Linea Testnet

Contract

0xAc028838DaF18FAD0F69a1a1e143Eb8a29b04904
Source Code Source Code

Overview

ETH Balance

Linea Sepolia LogoLinea Sepolia LogoLinea Sepolia Logo0 ETH

More Info

Multichain Info

N/A
Transaction Hash
Method
Block
From
To
Amount
Set Config151798242025-07-02 14:42:16213 days ago1751467336IN
0xAc028838...a29b04904
0 ETH0.000033770.271742
Set Config151798232025-07-02 14:42:14213 days ago1751467334IN
0xAc028838...a29b04904
0 ETH0.000033770.271742
Set Config151798222025-07-02 14:42:12213 days ago1751467332IN
0xAc028838...a29b04904
0 ETH0.000033760.271742
Set Config151798212025-07-02 14:42:10213 days ago1751467330IN
0xAc028838...a29b04904
0 ETH0.000033770.271742

Latest 25 internal transactions (View All)

Parent Transaction Hash Block From To Amount
240674182026-01-31 8:52:2520 hrs ago1769849545
0xAc028838...a29b04904
0 ETH
240674182026-01-31 8:52:2520 hrs ago1769849545
0xAc028838...a29b04904
0 ETH
240674182026-01-31 8:52:2520 hrs ago1769849545
0xAc028838...a29b04904
0 ETH
240674182026-01-31 8:52:2520 hrs ago1769849545
0xAc028838...a29b04904
0 ETH
240674182026-01-31 8:52:2520 hrs ago1769849545
0xAc028838...a29b04904
0 ETH
240674182026-01-31 8:52:2520 hrs ago1769849545
0xAc028838...a29b04904
0 ETH
240674182026-01-31 8:52:2520 hrs ago1769849545
0xAc028838...a29b04904
0 ETH
240674182026-01-31 8:52:2520 hrs ago1769849545
0xAc028838...a29b04904
0 ETH
240674182026-01-31 8:52:2520 hrs ago1769849545
0xAc028838...a29b04904
0 ETH
240674182026-01-31 8:52:2520 hrs ago1769849545
0xAc028838...a29b04904
0 ETH
240674182026-01-31 8:52:2520 hrs ago1769849545
0xAc028838...a29b04904
0 ETH
240674182026-01-31 8:52:2520 hrs ago1769849545
0xAc028838...a29b04904
0 ETH
240674182026-01-31 8:52:2520 hrs ago1769849545
0xAc028838...a29b04904
0 ETH
240674182026-01-31 8:52:2520 hrs ago1769849545
0xAc028838...a29b04904
0 ETH
240674182026-01-31 8:52:2520 hrs ago1769849545
0xAc028838...a29b04904
0 ETH
240674182026-01-31 8:52:2520 hrs ago1769849545
0xAc028838...a29b04904
0 ETH
240674182026-01-31 8:52:2520 hrs ago1769849545
0xAc028838...a29b04904
0 ETH
240674182026-01-31 8:52:2520 hrs ago1769849545
0xAc028838...a29b04904
0 ETH
240674032026-01-31 8:51:5520 hrs ago1769849515
0xAc028838...a29b04904
0 ETH
240674032026-01-31 8:51:5520 hrs ago1769849515
0xAc028838...a29b04904
0 ETH
240674032026-01-31 8:51:5520 hrs ago1769849515
0xAc028838...a29b04904
0 ETH
240674032026-01-31 8:51:5520 hrs ago1769849515
0xAc028838...a29b04904
0 ETH
240674032026-01-31 8:51:5520 hrs ago1769849515
0xAc028838...a29b04904
0 ETH
240674032026-01-31 8:51:5520 hrs ago1769849515
0xAc028838...a29b04904
0 ETH
240674032026-01-31 8:51:5520 hrs ago1769849515
0xAc028838...a29b04904
0 ETH
View All Internal Transactions
Loading...
Loading

Contract Source Code Verified (Exact Match)

Contract Name:
MixedPriceOracleV4

Compiler Version
v0.8.28+commit.7893614a

Optimization Enabled:
Yes with 200 runs

Other Settings:
london EvmVersion

Contract Source Code (Solidity Standard Json-Input format)

// Copyright (c) 2025 Merge Layers Inc.
//
// This source code is licensed under the Business Source License 1.1
// (the "License"); you may not use this file except in compliance with the
// License. You may obtain a copy of the License at
//
//     https://github.com/malda-protocol/malda-lending/blob/main/LICENSE-BSL
//
// See the License for the specific language governing permissions and
// limitations under the License.

// SPDX-License-Identifier: BSL-1.1
pragma solidity =0.8.28;

import {IRoles} from "src/interfaces/IRoles.sol";
import {ImTokenMinimal} from "src/interfaces/ImToken.sol";
import {IOracleOperator} from "src/interfaces/IOracleOperator.sol";
import {IDefaultAdapter} from "src/interfaces/IDefaultAdapter.sol";

contract MixedPriceOracleV4 is IOracleOperator {
    uint256 public immutable STALENESS_PERIOD;

    // ----------- STORAGE ------------
    struct PriceConfig {
        address api3Feed;
        address eOracleFeed;
        string toSymbol;
        uint256 underlyingDecimals;
    }

    mapping(string => PriceConfig) public configs;
    mapping(string => uint256) public stalenessPerSymbol;
    mapping(string => uint256) public deltaPerSymbol;

    uint256 public maxPriceDelta = 1.5e3; //1.5%
    uint256 public constant PRICE_DELTA_EXP = 1e5;
    IRoles public immutable roles;

    error MixedPriceOracle_Unauthorized();
    error MixedPriceOracle_ApiV3StalePrice();
    error MixedPriceOracle_eOracleStalePrice();
    error MixedPriceOracle_InvalidPrice();
    error MixedPriceOracle_InvalidRound();
    error MixedPriceOracle_InvalidConfig();
    error MixedPriceOracle_InvalidConfigDecimals();
    error MixedPriceOracle_DeltaTooHigh();
    error MixedPriceOracle_MissingFeed();

    event ConfigSet(string symbol, PriceConfig config);
    event StalenessUpdated(string symbol, uint256 val);
    event PriceDeltaUpdated(uint256 oldVal, uint256 newVal);
    event PriceSymbolDeltaUpdated(uint256 oldVal, uint256 newVal, string symbol);

    constructor(
        string[] memory symbols_,
        PriceConfig[] memory configs_,
        address roles_,
        uint256 stalenessPeriod_
    ) {
        roles = IRoles(roles_);
        for (uint256 i = 0; i < symbols_.length; i++) {
            configs[symbols_[i]] = configs_[i];
        }
        STALENESS_PERIOD = stalenessPeriod_;
    }

    function setStaleness(string memory symbol, uint256 val) external {
        if (!roles.isAllowedFor(msg.sender, roles.GUARDIAN_ORACLE())) {
            revert MixedPriceOracle_Unauthorized();
        }
        stalenessPerSymbol[symbol] = val;
        emit StalenessUpdated(symbol, val);
    }

    function setConfig(string memory symbol, PriceConfig memory config) external {
        if (!roles.isAllowedFor(msg.sender, roles.GUARDIAN_ORACLE())) {
            revert MixedPriceOracle_Unauthorized();
        }
        if (config.api3Feed == address(0) || config.eOracleFeed == address(0)) {
            revert MixedPriceOracle_InvalidConfig();
        }

        configs[symbol] = config;
        emit ConfigSet(symbol, config);
    }

    function setMaxPriceDelta(uint256 _delta) external {
        if (!roles.isAllowedFor(msg.sender, roles.GUARDIAN_ORACLE())) {
            revert MixedPriceOracle_Unauthorized();
        }

        require(_delta <= PRICE_DELTA_EXP, MixedPriceOracle_DeltaTooHigh());

        emit PriceDeltaUpdated(maxPriceDelta, _delta);
        maxPriceDelta = _delta;
    }

    function setSymbolMaxPriceDelta(uint256 _delta, string calldata _symbol) external {
        if (!roles.isAllowedFor(msg.sender, roles.GUARDIAN_ORACLE())) {
            revert MixedPriceOracle_Unauthorized();
        }

        require(_delta <= PRICE_DELTA_EXP, MixedPriceOracle_DeltaTooHigh());

        emit PriceSymbolDeltaUpdated(deltaPerSymbol[_symbol], _delta, _symbol);
        deltaPerSymbol[_symbol] = _delta;
    }
    

    function getPrice(address mToken) public view returns (uint256) {
        string memory symbol = ImTokenMinimal(mToken).symbol();
        return _getPriceUSD(symbol);
    }

    // price is extended for operator usage based on decimals of exchangeRate
    function getUnderlyingPrice(address mToken) external view override returns (uint256) {
        // ImTokenMinimal cast is needed for `.symbol()` call. No need to import a different interface
        string memory symbol = ImTokenMinimal(ImTokenMinimal(mToken).underlying()).symbol();
        PriceConfig memory config = configs[symbol];
        uint256 priceUsd = _getPriceUSD(symbol);
        return priceUsd * 10 ** (18 - config.underlyingDecimals);
    }

    function _getPriceUSD(string memory symbol) internal view returns (uint256) {
        PriceConfig memory config = configs[symbol];
        (uint256 feedPrice, uint256 feedDecimals) = _getLatestPrice(symbol, config);
        uint256 price = feedPrice * 10 ** (18 - feedDecimals);

        if (keccak256(abi.encodePacked(config.toSymbol)) != keccak256(abi.encodePacked("USD"))) {
            price = (price * _getPriceUSD(config.toSymbol)) / 10 ** 18;
        }

        return price;
    }

    function _getLatestPrice(string memory symbol, PriceConfig memory config)
        internal
        view
        returns (uint256, uint256)
    {
        if (config.api3Feed == address(0) || config.eOracleFeed == address(0)) revert MixedPriceOracle_MissingFeed();

        //get both prices
        (,int256 apiV3Price,, uint256 apiV3UpdatedAt,) = IDefaultAdapter(config.api3Feed).latestRoundData();
        (,int256 eOraclePrice,, uint256 eOracleUpdatedAt,) = IDefaultAdapter(config.eOracleFeed).latestRoundData();

        // check if ApiV3 price is up to date
        uint256 _staleness = _getStaleness(symbol);
        bool apiV3Fresh = block.timestamp - apiV3UpdatedAt <= _staleness;

        // check delta
        uint256 delta = _absDiff(apiV3Price, eOraclePrice);
        uint256 deltaBps = (delta * PRICE_DELTA_EXP) / uint256(eOraclePrice < 0 ? -eOraclePrice : eOraclePrice);

        uint256 deltaSymbol = deltaPerSymbol[symbol];
        if (deltaSymbol == 0) {
            deltaSymbol = maxPriceDelta;
        }

        uint256 decimals;
        uint256 uPrice;
        if (!apiV3Fresh || deltaBps > deltaSymbol) {
            require(block.timestamp - eOracleUpdatedAt < _staleness, MixedPriceOracle_eOracleStalePrice());
            decimals = IDefaultAdapter(config.eOracleFeed).decimals();
            uPrice = uint256(eOraclePrice);
        } else {
            require(block.timestamp - apiV3UpdatedAt < _staleness, MixedPriceOracle_ApiV3StalePrice());
            decimals = IDefaultAdapter(config.api3Feed).decimals();
            uPrice = uint256(apiV3Price);
        }

        return (uPrice, decimals);
    }

    function _absDiff(int256 a, int256 b) internal pure returns (uint256) {
        return uint256(a >= b ? a - b : b - a);
    }
    function _getStaleness(string memory symbol) internal view returns (uint256) {
        uint256 _registered = stalenessPerSymbol[symbol];
        return _registered > 0 ? _registered : STALENESS_PERIOD;
    }
}

// Copyright (c) 2025 Merge Layers Inc.
//
// This source code is licensed under the Business Source License 1.1
// (the "License"); you may not use this file except in compliance with the
// License. You may obtain a copy of the License at
//
//     https://github.com/malda-protocol/malda-lending/blob/main/LICENSE-BSL
//
// See the License for the specific language governing permissions and
// limitations under the License.
//
// This file contains code derived from or inspired by Compound V2,
// originally licensed under the BSD 3-Clause License. See LICENSE-COMPOUND-V2
// for original license terms and attributions.

// SPDX-License-Identifier: BSL-1.1
pragma solidity =0.8.28;

/*
 _____ _____ __    ____  _____ 
|     |  _  |  |  |    \|  _  |
| | | |     |  |__|  |  |     |
|_|_|_|__|__|_____|____/|__|__|   
*/

interface IRoles {
    error Roles_InputNotValid();

    /**
     * @notice Returns REBALANCER role
     */
    function REBALANCER() external view returns (bytes32);

    /**
     * @notice Returns REBALANCER_EOA role
     */
    function REBALANCER_EOA() external view returns (bytes32);

    /**
     * @notice Returns GUARDIAN_PAUSE role
     */
    function GUARDIAN_PAUSE() external view returns (bytes32);

    /**
     * @notice Returns GUARDIAN_BRIDGE role
     */
    function GUARDIAN_BRIDGE() external view returns (bytes32);

    /**
     * @notice Returns GUARDIAN_BORROW_CAP role
     */
    function GUARDIAN_BORROW_CAP() external view returns (bytes32);

    /**
     * @notice Returns GUARDIAN_SUPPLY_CAP role
     */
    function GUARDIAN_SUPPLY_CAP() external view returns (bytes32);

    /**
     * @notice Returns GUARDIAN_RESERVE role
     */
    function GUARDIAN_RESERVE() external view returns (bytes32);

    /**
     * @notice Returns PROOF_FORWARDER role
     */
    function PROOF_FORWARDER() external view returns (bytes32);

    /**
     * @notice Returns PROOF_BATCH_FORWARDER role
     */
    function PROOF_BATCH_FORWARDER() external view returns (bytes32);

    /**
     * @notice Returns SEQUENCER role
     */
    function SEQUENCER() external view returns (bytes32);

    /**
     * @notice Returns PAUSE_MANAGER role
     */
    function PAUSE_MANAGER() external view returns (bytes32);

    /**
     * @notice Returns CHAINS_MANAGER role
     */
    function CHAINS_MANAGER() external view returns (bytes32);

    /**
     * @notice Returns GUARDIAN_ORACLE role
     */
    function GUARDIAN_ORACLE() external view returns (bytes32);

    /**
     * @notice Returns allowance status for a contract and a role
     * @param _contract the contract address
     * @param _role the bytes32 role
     */
    function isAllowedFor(address _contract, bytes32 _role) external view returns (bool);
}

File 3 of 5 : ImToken.sol
// Copyright (c) 2025 Merge Layers Inc.
//
// This source code is licensed under the Business Source License 1.1
// (the "License"); you may not use this file except in compliance with the
// License. You may obtain a copy of the License at
//
//     https://github.com/malda-protocol/malda-lending/blob/main/LICENSE-BSL
//
// See the License for the specific language governing permissions and
// limitations under the License.
//
// This file contains code derived from or inspired by Compound V2,
// originally licensed under the BSD 3-Clause License. See LICENSE-COMPOUND-V2
// for original license terms and attributions.

// SPDX-License-Identifier: BSL-1.1
pragma solidity =0.8.28;

/*
 _____ _____ __    ____  _____ 
|     |  _  |  |  |    \|  _  |
| | | |     |  |__|  |  |     |
|_|_|_|__|__|_____|____/|__|__|                          
*/

import {IRoles} from "./IRoles.sol";

interface ImTokenOperationTypes {
    enum OperationType {
        AmountIn,
        AmountInHere,
        AmountOut,
        AmountOutHere,
        Seize,
        Transfer,
        Mint,
        Borrow,
        Repay,
        Redeem,
        Liquidate,
        Rebalancing
    }
}

interface ImTokenDelegator {
    /**
     * @notice Non-standard token able to delegate
     */
    function delegate(address delegatee) external;
}

interface ImTokenMinimal {
    /**
     * @notice EIP-20 token name for this token
     */
    function name() external view returns (string memory);

    /**
     * @notice EIP-20 token symbol for this token
     */
    function symbol() external view returns (string memory);

    /**
     * @notice EIP-20 token decimals for this token
     */
    function decimals() external view returns (uint8);

    /**
     * @notice Returns the value of tokens in existence.
     */
    function totalSupply() external view returns (uint256);

    /**
     * @notice Returns the amount of underlying tokens
     */
    function totalUnderlying() external view returns (uint256);

    /**
     * @notice Returns the value of tokens owned by `account`.
     * @param account The account to check for
     */
    function balanceOf(address account) external view returns (uint256);

    /**
     * @dev Returns the underlying address
     */
    function underlying() external view returns (address);
}

interface ImToken is ImTokenMinimal {
    // ----------- STORAGE ------------
    /**
     * @notice Roles manager
     */
    function rolesOperator() external view returns (IRoles);

    /**
     * @notice Administrator for this contract
     */
    function admin() external view returns (address payable);

    /**
     * @notice Pending administrator for this contract
     */
    function pendingAdmin() external view returns (address payable);

    /**
     * @notice Contract which oversees inter-mToken operations
     */
    function operator() external view returns (address);

    /**
     * @notice Model which tells what the current interest rate should be
     */
    function interestRateModel() external view returns (address);

    /**
     * @notice Fraction of interest currently set aside for reserves
     */
    function reserveFactorMantissa() external view returns (uint256);

    /**
     * @notice Block timestamp that interest was last accrued at
     */
    function accrualBlockTimestamp() external view returns (uint256);

    /**
     * @notice Accumulator of the total earned interest rate since the opening of the market
     */
    function borrowIndex() external view returns (uint256);

    /**
     * @notice Total amount of outstanding borrows of the underlying in this market
     */
    function totalBorrows() external view returns (uint256);

    /**
     * @notice Total amount of reserves of the underlying held in this market
     */
    function totalReserves() external view returns (uint256);

    // ----------- ACTIONS ------------
    /**
     * @notice Transfers `amount` tokens to the `dst` address
     * @param dst The address of the recipient
     * @param amount The number of tokens to transfer
     * @return Whether the transfer was successful or not
     */
    function transfer(address dst, uint256 amount) external returns (bool);

    /**
     * @notice Transfers `amount` tokens from the `src` address to the `dst` address
     * @param src The address from which tokens are transferred
     * @param dst The address to which tokens are transferred
     * @param amount The number of tokens to transfer
     * @return Whether the transfer was successful or not
     */
    function transferFrom(address src, address dst, uint256 amount) external returns (bool);

    /**
     * @notice Approves `spender` to spend `amount` tokens on behalf of the caller
     * @param spender The address authorized to spend tokens
     * @param amount The number of tokens to approve
     * @return Whether the approval was successful or not
     */
    function approve(address spender, uint256 amount) external returns (bool);

    /**
     * @notice Returns the current allowance the `spender` has from the `owner`
     * @param owner The address of the token holder
     * @param spender The address authorized to spend the tokens
     * @return The current remaining number of tokens `spender` can spend
     */
    function allowance(address owner, address spender) external view returns (uint256);

    /**
     * @notice Returns the balance of tokens held by `owner`
     * @param owner The address to query the balance for
     * @return The balance of tokens owned by `owner`
     */
    function balanceOf(address owner) external view returns (uint256);

    /**
     * @notice Returns the underlying asset balance of the `owner`
     * @param owner The address to query the balance of underlying assets for
     * @return The balance of underlying assets owned by `owner`
     */
    function balanceOfUnderlying(address owner) external returns (uint256);

    /**
     * @notice Returns the snapshot of account details for the given `account`
     * @param account The address to query the account snapshot for
     * @return (token balance, borrow balance, exchange rate)
     */
    function getAccountSnapshot(address account) external view returns (uint256, uint256, uint256);

    /**
     * @notice Returns the current borrow rate per block
     * @return The current borrow rate per block, scaled by 1e18
     */
    function borrowRatePerBlock() external view returns (uint256);

    /**
     * @notice Returns the current supply rate per block
     * @return The current supply rate per block, scaled by 1e18
     */
    function supplyRatePerBlock() external view returns (uint256);

    /**
     * @notice Returns the total amount of borrows, accounting for interest
     * @return The total amount of borrows
     */
    function totalBorrowsCurrent() external returns (uint256);

    /**
     * @notice Returns the current borrow balance for `account`, accounting for interest
     * @param account The address to query the borrow balance for
     * @return The current borrow balance
     */
    function borrowBalanceCurrent(address account) external returns (uint256);

    /**
     * @notice Returns the stored borrow balance for `account`, without accruing interest
     * @param account The address to query the stored borrow balance for
     * @return The stored borrow balance
     */
    function borrowBalanceStored(address account) external view returns (uint256);

    /**
     * @notice Returns the current exchange rate, with interest accrued
     * @return The current exchange rate
     */
    function exchangeRateCurrent() external returns (uint256);

    /**
     * @notice Returns the stored exchange rate, without accruing interest
     * @return The stored exchange rate
     */
    function exchangeRateStored() external view returns (uint256);

    /**
     * @notice Returns the total amount of available cash in the contract
     * @return The total amount of cash
     */
    function getCash() external view returns (uint256);

    /**
     * @notice Accrues interest on the contract's outstanding loans
     */
    function accrueInterest() external;

    /**
     * @notice Transfers collateral tokens (this market) to the liquidator.
     * @dev Will fail unless called by another mToken during the process of liquidation.
     *  Its absolutely critical to use msg.sender as the borrowed mToken and not a parameter.
     * @param liquidator The account receiving seized collateral
     * @param borrower The account having collateral seized
     * @param seizeTokens The number of mTokens to seize
     */
    function seize(address liquidator, address borrower, uint256 seizeTokens) external;

    /**
     * @notice Accrues interest and reduces reserves by transferring to admin
     * @param reduceAmount Amount of reduction to reserves
     */
    function reduceReserves(uint256 reduceAmount) external;
}

// Copyright (c) 2025 Merge Layers Inc.
//
// This source code is licensed under the Business Source License 1.1
// (the "License"); you may not use this file except in compliance with the
// License. You may obtain a copy of the License at
//
//     https://github.com/malda-protocol/malda-lending/blob/main/LICENSE-BSL
//
// See the License for the specific language governing permissions and
// limitations under the License.
//
// This file contains code derived from or inspired by Compound V2,
// originally licensed under the BSD 3-Clause License. See LICENSE-COMPOUND-V2
// for original license terms and attributions.

// SPDX-License-Identifier: BSL-1.1
pragma solidity =0.8.28;

/*
 _____ _____ __    ____  _____ 
|     |  _  |  |  |    \|  _  |
| | | |     |  |__|  |  |     |
|_|_|_|__|__|_____|____/|__|__|   
*/

/**
 * @notice Prices are returned in USD
 */
interface IOracleOperator {
    /**
     * @notice Get the price of a mToken asset
     * @param mToken The mToken to get the price of
     * @return The underlying asset price mantissa (scaled by 1e18).
     *  Zero means the price is unavailable.
     */
    function getPrice(address mToken) external view returns (uint256);

    /**
     * @notice Get the underlying price of a mToken asset
     * @param mToken The mToken to get the underlying price of
     * @return The underlying asset price mantissa (scaled by 1e18).
     *  Zero means the price is unavailable.
     */
    function getUnderlyingPrice(address mToken) external view returns (uint256);
}

// Copyright (c) 2025 Merge Layers Inc.
//
// This source code is licensed under the Business Source License 1.1
// (the "License"); you may not use this file except in compliance with the
// License. You may obtain a copy of the License at
//
//     https://github.com/malda-protocol/malda-lending/blob/main/LICENSE-BSL
//
// See the License for the specific language governing permissions and
// limitations under the License.
//
// This file contains code derived from or inspired by Compound V2,
// originally licensed under the BSD 3-Clause License. See LICENSE-COMPOUND-V2
// for original license terms and attributions.

// SPDX-License-Identifier: BSL-1.1
pragma solidity =0.8.28;

/*
 _____ _____ __    ____  _____ 
|     |  _  |  |  |    \|  _  |
| | | |     |  |__|  |  |     |
|_|_|_|__|__|_____|____/|__|__|   
*/

interface IDefaultAdapter {
    struct PriceConfig {
        address defaultFeed; // chainlink & eOracle
        string toSymbol;
        uint256 underlyingDecimals;
    }

    function decimals() external view returns (uint8);

    function latestRoundData()
        external
        view
        returns (uint80 roundId, int256 answer, uint256 startedAt, uint256 updatedAt, uint80 answeredInRound);

    function latestAnswer() external view returns (int256);

    function latestTimestamp() external view returns (uint256);
}

Settings
{
  "remappings": [
    "@openzeppelin/contracts/=lib/openzeppelin-contracts/contracts/",
    "@openzeppelin/contracts-upgradeable/=lib/openzeppelin-contracts-upgradeable/contracts/",
    "risc0/=lib/risc0-ethereum/contracts/src/",
    "forge-std/=lib/forge-std/src/",
    "ds-test/=lib/openzeppelin-contracts-upgradeable/lib/forge-std/lib/ds-test/src/",
    "erc4626-tests/=lib/openzeppelin-contracts-upgradeable/lib/erc4626-tests/",
    "openzeppelin-contracts-upgradeable/=lib/openzeppelin-contracts-upgradeable/",
    "openzeppelin-contracts/=lib/openzeppelin-contracts/",
    "openzeppelin-foundry-upgrades/=lib/openzeppelin-foundry-upgrades/src/",
    "risc0-ethereum/=lib/risc0-ethereum/",
    "solidity-stringutils/=lib/openzeppelin-foundry-upgrades/lib/solidity-stringutils/"
  ],
  "optimizer": {
    "enabled": true,
    "runs": 200
  },
  "metadata": {
    "useLiteralContent": false,
    "bytecodeHash": "ipfs",
    "appendCBOR": true
  },
  "outputSelection": {
    "*": {
      "*": [
        "evm.bytecode",
        "evm.deployedBytecode",
        "devdoc",
        "userdoc",
        "metadata",
        "abi"
      ]
    }
  },
  "evmVersion": "london",
  "viaIR": false,
  "libraries": {}
}

Contract ABI

API
[{"inputs":[{"internalType":"string[]","name":"symbols_","type":"string[]"},{"components":[{"internalType":"address","name":"api3Feed","type":"address"},{"internalType":"address","name":"eOracleFeed","type":"address"},{"internalType":"string","name":"toSymbol","type":"string"},{"internalType":"uint256","name":"underlyingDecimals","type":"uint256"}],"internalType":"struct MixedPriceOracleV4.PriceConfig[]","name":"configs_","type":"tuple[]"},{"internalType":"address","name":"roles_","type":"address"},{"internalType":"uint256","name":"stalenessPeriod_","type":"uint256"}],"stateMutability":"nonpayable","type":"constructor"},{"inputs":[],"name":"MixedPriceOracle_ApiV3StalePrice","type":"error"},{"inputs":[],"name":"MixedPriceOracle_DeltaTooHigh","type":"error"},{"inputs":[],"name":"MixedPriceOracle_InvalidConfig","type":"error"},{"inputs":[],"name":"MixedPriceOracle_InvalidConfigDecimals","type":"error"},{"inputs":[],"name":"MixedPriceOracle_InvalidPrice","type":"error"},{"inputs":[],"name":"MixedPriceOracle_InvalidRound","type":"error"},{"inputs":[],"name":"MixedPriceOracle_MissingFeed","type":"error"},{"inputs":[],"name":"MixedPriceOracle_Unauthorized","type":"error"},{"inputs":[],"name":"MixedPriceOracle_eOracleStalePrice","type":"error"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"string","name":"symbol","type":"string"},{"components":[{"internalType":"address","name":"api3Feed","type":"address"},{"internalType":"address","name":"eOracleFeed","type":"address"},{"internalType":"string","name":"toSymbol","type":"string"},{"internalType":"uint256","name":"underlyingDecimals","type":"uint256"}],"indexed":false,"internalType":"struct MixedPriceOracleV4.PriceConfig","name":"config","type":"tuple"}],"name":"ConfigSet","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"oldVal","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"newVal","type":"uint256"}],"name":"PriceDeltaUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"oldVal","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"newVal","type":"uint256"},{"indexed":false,"internalType":"string","name":"symbol","type":"string"}],"name":"PriceSymbolDeltaUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"string","name":"symbol","type":"string"},{"indexed":false,"internalType":"uint256","name":"val","type":"uint256"}],"name":"StalenessUpdated","type":"event"},{"inputs":[],"name":"PRICE_DELTA_EXP","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"STALENESS_PERIOD","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"string","name":"","type":"string"}],"name":"configs","outputs":[{"internalType":"address","name":"api3Feed","type":"address"},{"internalType":"address","name":"eOracleFeed","type":"address"},{"internalType":"string","name":"toSymbol","type":"string"},{"internalType":"uint256","name":"underlyingDecimals","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"string","name":"","type":"string"}],"name":"deltaPerSymbol","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"mToken","type":"address"}],"name":"getPrice","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"mToken","type":"address"}],"name":"getUnderlyingPrice","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxPriceDelta","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"roles","outputs":[{"internalType":"contract IRoles","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"string","name":"symbol","type":"string"},{"components":[{"internalType":"address","name":"api3Feed","type":"address"},{"internalType":"address","name":"eOracleFeed","type":"address"},{"internalType":"string","name":"toSymbol","type":"string"},{"internalType":"uint256","name":"underlyingDecimals","type":"uint256"}],"internalType":"struct MixedPriceOracleV4.PriceConfig","name":"config","type":"tuple"}],"name":"setConfig","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_delta","type":"uint256"}],"name":"setMaxPriceDelta","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"symbol","type":"string"},{"internalType":"uint256","name":"val","type":"uint256"}],"name":"setStaleness","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_delta","type":"uint256"},{"internalType":"string","name":"_symbol","type":"string"}],"name":"setSymbolMaxPriceDelta","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"","type":"string"}],"name":"stalenessPerSymbol","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"}]

60c06040526105dc60035534801561001657600080fd5b506040516121033803806121038339810160408190526100359161033c565b6001600160a01b03821660a05260005b84518110156100fb5783818151811061006057610060610436565b6020026020010151600086838151811061007c5761007c610436565b6020026020010151604051610091919061044c565b9081526040805160209281900383019020835181546001600160a01b03199081166001600160a01b039283161783559385015160018301805490951691161790925582015160028201906100e590826104f1565b5060609190910151600390910155600101610045565b50608052506105af915050565b634e487b7160e01b600052604160045260246000fd5b604051608081016001600160401b038111828210171561014057610140610108565b60405290565b604051601f8201601f191681016001600160401b038111828210171561016e5761016e610108565b604052919050565b60006001600160401b0382111561018f5761018f610108565b5060051b60200190565b60005b838110156101b457818101518382015260200161019c565b50506000910152565b600082601f8301126101ce57600080fd5b81516001600160401b038111156101e7576101e7610108565b6101fa601f8201601f1916602001610146565b81815284602083860101111561020f57600080fd5b610220826020830160208701610199565b949350505050565b80516001600160a01b038116811461023f57600080fd5b919050565b600082601f83011261025557600080fd5b815161026861026382610176565b610146565b8082825260208201915060208360051b86010192508583111561028a57600080fd5b602085015b838110156103325780516001600160401b038111156102ad57600080fd5b86016080818903601f190112156102c357600080fd5b6102cb61011e565b6102d760208301610228565b81526102e560408301610228565b602082015260608201516001600160401b0381111561030357600080fd5b6103128a6020838601016101bd565b60408301525060809190910151606082015283526020928301920161028f565b5095945050505050565b6000806000806080858703121561035257600080fd5b84516001600160401b0381111561036857600080fd5b8501601f8101871361037957600080fd5b805161038761026382610176565b8082825260208201915060208360051b8501019250898311156103a957600080fd5b602084015b838110156103ea5780516001600160401b038111156103cc57600080fd5b6103db8c6020838901016101bd565b845250602092830192016103ae565b506020890151909750925050506001600160401b0381111561040b57600080fd5b61041787828801610244565b93505061042660408601610228565b6060959095015193969295505050565b634e487b7160e01b600052603260045260246000fd5b6000825161045e818460208701610199565b9190910192915050565b600181811c9082168061047c57607f821691505b60208210810361049c57634e487b7160e01b600052602260045260246000fd5b50919050565b601f8211156104ec57806000526020600020601f840160051c810160208510156104c95750805b601f840160051c820191505b818110156104e957600081556001016104d5565b50505b505050565b81516001600160401b0381111561050a5761050a610108565b61051e816105188454610468565b846104a2565b6020601f821160018114610552576000831561053a5750848201515b600019600385901b1c1916600184901b1784556104e9565b600084815260208120601f198516915b828110156105825787850151825560209485019460019092019101610562565b50848210156105a05786840151600019600387901b60f8161c191681555b50505050600190811b01905550565b60805160a051611af1610612600039600081816101530152818161024f0152818161027f01528181610576015281816105a60152818161071701528181610747015281816108b201526108e201526000818160ee01526111a50152611af16000f3fe608060405234801561001057600080fd5b50600436106100cf5760003560e01c806366ed54441161008c578063c86e868511610066578063c86e8685146101e9578063ec285406146101fc578063fc57d4df1461020f578063ffa890c51461022257600080fd5b806366ed5444146101c35780637a2dc784146101cc578063a49f06ef146101df57600080fd5b80631a48b358146100d457806324c9477a146100e95780632ab77c5714610123578063392f5f641461014e57806341976e091461018d5780635ef7fbad146101a0575b600080fd5b6100e76100e23660046111f2565b61024d565b005b6101107f000000000000000000000000000000000000000000000000000000000000000081565b6040519081526020015b60405180910390f35b61011061013136600461135e565b805160208183018101805160018252928201919093012091525481565b6101757f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b03909116815260200161011a565b61011061019b3660046113b3565b61042f565b6101b36101ae36600461135e565b6104aa565b60405161011a9493929190611420565b61011060035481565b6100e76101da36600461145d565b610574565b610110620186a081565b6100e76101f7366004611476565b610715565b6100e761020a3660046114bb565b6108b0565b61011061021d3660046113b3565b610acf565b61011061023036600461135e565b805160208183018101805160028252928201919093012091525481565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166338dd8c2c337f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316637f3c8ff56040518163ffffffff1660e01b8152600401602060405180830381865afa1580156102db573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906102ff919061158c565b6040516001600160e01b031960e085901b1681526001600160a01b0390921660048301526024820152604401602060405180830381865afa158015610348573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061036c91906115a5565b610389576040516307eb074d60e01b815260040160405180910390fd5b620186a08311156103ad576040516326da615160e01b815260040160405180910390fd5b7f688f976a86dd3074f11d14314186b93f438240953b5863693b990d6cd738dce6600283836040516103e09291906115c7565b908152604051908190036020018120546103ff918690869086906115d7565b60405180910390a1826002838360405161041a9291906115c7565b90815260405190819003602001902055505050565b600080826001600160a01b03166395d89b416040518163ffffffff1660e01b8152600401600060405180830381865afa158015610470573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526104989190810190611614565b90506104a381610cbe565b9392505050565b8051808201602090810180516000825292820191909301209152805460018201546002830180546001600160a01b039384169492909316926104eb90611682565b80601f016020809104026020016040519081016040528092919081815260200182805461051790611682565b80156105645780601f1061053957610100808354040283529160200191610564565b820191906000526020600020905b81548152906001019060200180831161054757829003601f168201915b5050505050908060030154905084565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166338dd8c2c337f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316637f3c8ff56040518163ffffffff1660e01b8152600401602060405180830381865afa158015610602573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610626919061158c565b6040516001600160e01b031960e085901b1681526001600160a01b0390921660048301526024820152604401602060405180830381865afa15801561066f573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061069391906115a5565b6106b0576040516307eb074d60e01b815260040160405180910390fd5b620186a08111156106d4576040516326da615160e01b815260040160405180910390fd5b60035460408051918252602082018390527fb40b5817f6a1d7377b6c8930cdb72b872da18394aaff75ffbe73ffdedca3a2e2910160405180910390a1600355565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166338dd8c2c337f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316637f3c8ff56040518163ffffffff1660e01b8152600401602060405180830381865afa1580156107a3573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906107c7919061158c565b6040516001600160e01b031960e085901b1681526001600160a01b0390921660048301526024820152604401602060405180830381865afa158015610810573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061083491906115a5565b610851576040516307eb074d60e01b815260040160405180910390fd5b8060018360405161086291906116bc565b9081526020016040518091039020819055507e6ebc2a07d9cbde1f5c02f38e4224748a98286f396f9329f8c9bf03b4af1ed582826040516108a49291906116d8565b60405180910390a15050565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166338dd8c2c337f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316637f3c8ff56040518163ffffffff1660e01b8152600401602060405180830381865afa15801561093e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610962919061158c565b6040516001600160e01b031960e085901b1681526001600160a01b0390921660048301526024820152604401602060405180830381865afa1580156109ab573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109cf91906115a5565b6109ec576040516307eb074d60e01b815260040160405180910390fd5b80516001600160a01b03161580610a0e575060208101516001600160a01b0316155b15610a2b576040516204ea5f60e61b815260040160405180910390fd5b80600083604051610a3c91906116bc565b9081526040805160209281900383019020835181546001600160a01b03199081166001600160a01b03928316178355938501516001830180549095169116179092558201516002820190610a909082611749565b50606082015181600301559050507fe1c5d146221bf7b8aca8e1b646f7cb8c9a2f526541c9b73c3d16d19599ae914a82826040516108a4929190611808565b600080826001600160a01b0316636f307dc36040518163ffffffff1660e01b8152600401602060405180830381865afa158015610b10573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b349190611872565b6001600160a01b03166395d89b416040518163ffffffff1660e01b8152600401600060405180830381865afa158015610b71573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052610b999190810190611614565b905060008082604051610bac91906116bc565b90815260408051918290036020908101832060808401835280546001600160a01b039081168552600182015416918401919091526002810180549192840191610bf490611682565b80601f0160208091040260200160405190810160405280929190818152602001828054610c2090611682565b8015610c6d5780601f10610c4257610100808354040283529160200191610c6d565b820191906000526020600020905b815481529060010190602001808311610c5057829003601f168201915b5050505050815260200160038201548152505090506000610c8d83610cbe565b905081606001516012610ca091906118a5565b610cab90600a61199f565b610cb590826119ab565b95945050505050565b600080600083604051610cd191906116bc565b90815260408051918290036020908101832060808401835280546001600160a01b039081168552600182015416918401919091526002810180549192840191610d1990611682565b80601f0160208091040260200160405190810160405280929190818152602001828054610d4590611682565b8015610d925780601f10610d6757610100808354040283529160200191610d92565b820191906000526020600020905b815481529060010190602001808311610d7557829003601f168201915b505050505081526020016003820154815250509050600080610db48584610e6a565b90925090506000610dc68260126118a5565b610dd190600a61199f565b610ddb90846119ab565b604051621554d160ea1b6020820152909150602301604051602081830303815290604052805190602001208460400151604051602001610e1b91906116bc565b6040516020818303038152906040528051906020012014610cb557670de0b6b3a7640000610e4c8560400151610cbe565b610e5690836119ab565b610e6091906119c2565b9695505050505050565b805160009081906001600160a01b03161580610e91575060208301516001600160a01b0316155b15610eaf5760405163a88a8ec360e01b815260040160405180910390fd5b60008084600001516001600160a01b031663feaf968c6040518163ffffffff1660e01b815260040160a060405180830381865afa158015610ef4573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f189190611a03565b5093505092505060008086602001516001600160a01b031663feaf968c6040518163ffffffff1660e01b815260040160a060405180830381865afa158015610f64573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f889190611a03565b509350509250506000610f9a89611177565b9050600081610fa986426118a5565b111590506000610fb987866111cf565b90506000808612610fca5785610fd3565b610fd386611a55565b610fe0620186a0846119ab565b610fea91906119c2565b9050600060028d604051610ffe91906116bc565b90815260200160405180910390205490508060000361101c57506003545b60008085158061102b57508284115b156110cc578661103b89426118a5565b106110595760405163057cd0a160e51b815260040160405180910390fd5b8d602001516001600160a01b031663313ce5676040518163ffffffff1660e01b8152600401602060405180830381865afa15801561109b573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906110bf9190611a71565b60ff169150889050611164565b866110d78b426118a5565b106110f5576040516302fab6f360e31b815260040160405180910390fd5b8d600001516001600160a01b031663313ce5676040518163ffffffff1660e01b8152600401602060405180830381865afa158015611137573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061115b9190611a71565b60ff1691508a90505b9e909d509b505050505050505050505050565b60008060018360405161118a91906116bc565b9081526020016040518091039020549050600081116111c9577f00000000000000000000000000000000000000000000000000000000000000006104a3565b92915050565b6000818312156111e8576111e38383611a94565b6104a3565b6104a38284611a94565b60008060006040848603121561120757600080fd5b83359250602084013567ffffffffffffffff81111561122557600080fd5b8401601f8101861361123657600080fd5b803567ffffffffffffffff81111561124d57600080fd5b86602082840101111561125f57600080fd5b939660209190910195509293505050565b634e487b7160e01b600052604160045260246000fd5b6040516080810167ffffffffffffffff811182821017156112a9576112a9611270565b60405290565b604051601f8201601f1916810167ffffffffffffffff811182821017156112d8576112d8611270565b604052919050565b600067ffffffffffffffff8211156112fa576112fa611270565b50601f01601f191660200190565b600082601f83011261131957600080fd5b813561132c611327826112e0565b6112af565b81815284602083860101111561134157600080fd5b816020850160208301376000918101602001919091529392505050565b60006020828403121561137057600080fd5b813567ffffffffffffffff81111561138757600080fd5b61139384828501611308565b949350505050565b6001600160a01b03811681146113b057600080fd5b50565b6000602082840312156113c557600080fd5b81356104a38161139b565b60005b838110156113eb5781810151838201526020016113d3565b50506000910152565b6000815180845261140c8160208601602086016113d0565b601f01601f19169290920160200192915050565b6001600160a01b0385811682528416602082015260806040820181905260009061144c908301856113f4565b905082606083015295945050505050565b60006020828403121561146f57600080fd5b5035919050565b6000806040838503121561148957600080fd5b823567ffffffffffffffff8111156114a057600080fd5b6114ac85828601611308565b95602094909401359450505050565b600080604083850312156114ce57600080fd5b823567ffffffffffffffff8111156114e557600080fd5b6114f185828601611308565b925050602083013567ffffffffffffffff81111561150e57600080fd5b83016080818603121561152057600080fd5b611528611286565b81356115338161139b565b815260208201356115438161139b565b6020820152604082013567ffffffffffffffff81111561156257600080fd5b61156e87828501611308565b60408301525060609182013591810191909152919491935090915050565b60006020828403121561159e57600080fd5b5051919050565b6000602082840312156115b757600080fd5b815180151581146104a357600080fd5b8183823760009101908152919050565b84815283602082015260606040820152816060820152818360808301376000818301608090810191909152601f909201601f191601019392505050565b60006020828403121561162657600080fd5b815167ffffffffffffffff81111561163d57600080fd5b8201601f8101841361164e57600080fd5b805161165c611327826112e0565b81815285602083850101111561167157600080fd5b610cb58260208301602086016113d0565b600181811c9082168061169657607f821691505b6020821081036116b657634e487b7160e01b600052602260045260246000fd5b50919050565b600082516116ce8184602087016113d0565b9190910192915050565b6040815260006116eb60408301856113f4565b90508260208301529392505050565b601f82111561174457806000526020600020601f840160051c810160208510156117215750805b601f840160051c820191505b81811015611741576000815560010161172d565b50505b505050565b815167ffffffffffffffff81111561176357611763611270565b611777816117718454611682565b846116fa565b6020601f8211600181146117ab57600083156117935750848201515b600019600385901b1c1916600184901b178455611741565b600084815260208120601f198516915b828110156117db57878501518255602094850194600190920191016117bb565b50848210156117f95786840151600019600387901b60f8161c191681555b50505050600190811b01905550565b60408152600061181b60408301856113f4565b828103602084015260018060a01b03845116815260018060a01b03602085015116602082015260408401516080604083015261185a60808301826113f4565b90506060850151606083015280925050509392505050565b60006020828403121561188457600080fd5b81516104a38161139b565b634e487b7160e01b600052601160045260246000fd5b818103818111156111c9576111c961188f565b6001815b60018411156118f3578085048111156118d7576118d761188f565b60018416156118e557908102905b60019390931c9280026118bc565b935093915050565b60008261190a575060016111c9565b81611917575060006111c9565b816001811461192d576002811461193757611953565b60019150506111c9565b60ff8411156119485761194861188f565b50506001821b6111c9565b5060208310610133831016604e8410600b8410161715611976575081810a6111c9565b61198360001984846118b8565b80600019048211156119975761199761188f565b029392505050565b60006104a383836118fb565b80820281158282048414176111c9576111c961188f565b6000826119df57634e487b7160e01b600052601260045260246000fd5b500490565b805169ffffffffffffffffffff811681146119fe57600080fd5b919050565b600080600080600060a08688031215611a1b57600080fd5b611a24866119e4565b60208701516040880151606089015192975090955093509150611a49608087016119e4565b90509295509295909350565b6000600160ff1b8201611a6a57611a6a61188f565b5060000390565b600060208284031215611a8357600080fd5b815160ff811681146104a357600080fd5b8181036000831280158383131683831282161715611ab457611ab461188f565b509291505056fea2646970667358221220258e51352a321c944b1baaefdc309af45d95aa95d6f12695df9f0ea1ea0a095664736f6c634300081c0033000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000a00000000000000000000000003dc52279175ee96b6a60f6870ec4dfa417c916e300000000000000000000000000000000000000000000000000000000000d2f0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000

Deployed Bytecode

0x608060405234801561001057600080fd5b50600436106100cf5760003560e01c806366ed54441161008c578063c86e868511610066578063c86e8685146101e9578063ec285406146101fc578063fc57d4df1461020f578063ffa890c51461022257600080fd5b806366ed5444146101c35780637a2dc784146101cc578063a49f06ef146101df57600080fd5b80631a48b358146100d457806324c9477a146100e95780632ab77c5714610123578063392f5f641461014e57806341976e091461018d5780635ef7fbad146101a0575b600080fd5b6100e76100e23660046111f2565b61024d565b005b6101107f00000000000000000000000000000000000000000000000000000000000d2f0081565b6040519081526020015b60405180910390f35b61011061013136600461135e565b805160208183018101805160018252928201919093012091525481565b6101757f0000000000000000000000003dc52279175ee96b6a60f6870ec4dfa417c916e381565b6040516001600160a01b03909116815260200161011a565b61011061019b3660046113b3565b61042f565b6101b36101ae36600461135e565b6104aa565b60405161011a9493929190611420565b61011060035481565b6100e76101da36600461145d565b610574565b610110620186a081565b6100e76101f7366004611476565b610715565b6100e761020a3660046114bb565b6108b0565b61011061021d3660046113b3565b610acf565b61011061023036600461135e565b805160208183018101805160028252928201919093012091525481565b7f0000000000000000000000003dc52279175ee96b6a60f6870ec4dfa417c916e36001600160a01b03166338dd8c2c337f0000000000000000000000003dc52279175ee96b6a60f6870ec4dfa417c916e36001600160a01b0316637f3c8ff56040518163ffffffff1660e01b8152600401602060405180830381865afa1580156102db573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906102ff919061158c565b6040516001600160e01b031960e085901b1681526001600160a01b0390921660048301526024820152604401602060405180830381865afa158015610348573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061036c91906115a5565b610389576040516307eb074d60e01b815260040160405180910390fd5b620186a08311156103ad576040516326da615160e01b815260040160405180910390fd5b7f688f976a86dd3074f11d14314186b93f438240953b5863693b990d6cd738dce6600283836040516103e09291906115c7565b908152604051908190036020018120546103ff918690869086906115d7565b60405180910390a1826002838360405161041a9291906115c7565b90815260405190819003602001902055505050565b600080826001600160a01b03166395d89b416040518163ffffffff1660e01b8152600401600060405180830381865afa158015610470573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526104989190810190611614565b90506104a381610cbe565b9392505050565b8051808201602090810180516000825292820191909301209152805460018201546002830180546001600160a01b039384169492909316926104eb90611682565b80601f016020809104026020016040519081016040528092919081815260200182805461051790611682565b80156105645780601f1061053957610100808354040283529160200191610564565b820191906000526020600020905b81548152906001019060200180831161054757829003601f168201915b5050505050908060030154905084565b7f0000000000000000000000003dc52279175ee96b6a60f6870ec4dfa417c916e36001600160a01b03166338dd8c2c337f0000000000000000000000003dc52279175ee96b6a60f6870ec4dfa417c916e36001600160a01b0316637f3c8ff56040518163ffffffff1660e01b8152600401602060405180830381865afa158015610602573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610626919061158c565b6040516001600160e01b031960e085901b1681526001600160a01b0390921660048301526024820152604401602060405180830381865afa15801561066f573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061069391906115a5565b6106b0576040516307eb074d60e01b815260040160405180910390fd5b620186a08111156106d4576040516326da615160e01b815260040160405180910390fd5b60035460408051918252602082018390527fb40b5817f6a1d7377b6c8930cdb72b872da18394aaff75ffbe73ffdedca3a2e2910160405180910390a1600355565b7f0000000000000000000000003dc52279175ee96b6a60f6870ec4dfa417c916e36001600160a01b03166338dd8c2c337f0000000000000000000000003dc52279175ee96b6a60f6870ec4dfa417c916e36001600160a01b0316637f3c8ff56040518163ffffffff1660e01b8152600401602060405180830381865afa1580156107a3573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906107c7919061158c565b6040516001600160e01b031960e085901b1681526001600160a01b0390921660048301526024820152604401602060405180830381865afa158015610810573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061083491906115a5565b610851576040516307eb074d60e01b815260040160405180910390fd5b8060018360405161086291906116bc565b9081526020016040518091039020819055507e6ebc2a07d9cbde1f5c02f38e4224748a98286f396f9329f8c9bf03b4af1ed582826040516108a49291906116d8565b60405180910390a15050565b7f0000000000000000000000003dc52279175ee96b6a60f6870ec4dfa417c916e36001600160a01b03166338dd8c2c337f0000000000000000000000003dc52279175ee96b6a60f6870ec4dfa417c916e36001600160a01b0316637f3c8ff56040518163ffffffff1660e01b8152600401602060405180830381865afa15801561093e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610962919061158c565b6040516001600160e01b031960e085901b1681526001600160a01b0390921660048301526024820152604401602060405180830381865afa1580156109ab573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109cf91906115a5565b6109ec576040516307eb074d60e01b815260040160405180910390fd5b80516001600160a01b03161580610a0e575060208101516001600160a01b0316155b15610a2b576040516204ea5f60e61b815260040160405180910390fd5b80600083604051610a3c91906116bc565b9081526040805160209281900383019020835181546001600160a01b03199081166001600160a01b03928316178355938501516001830180549095169116179092558201516002820190610a909082611749565b50606082015181600301559050507fe1c5d146221bf7b8aca8e1b646f7cb8c9a2f526541c9b73c3d16d19599ae914a82826040516108a4929190611808565b600080826001600160a01b0316636f307dc36040518163ffffffff1660e01b8152600401602060405180830381865afa158015610b10573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b349190611872565b6001600160a01b03166395d89b416040518163ffffffff1660e01b8152600401600060405180830381865afa158015610b71573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052610b999190810190611614565b905060008082604051610bac91906116bc565b90815260408051918290036020908101832060808401835280546001600160a01b039081168552600182015416918401919091526002810180549192840191610bf490611682565b80601f0160208091040260200160405190810160405280929190818152602001828054610c2090611682565b8015610c6d5780601f10610c4257610100808354040283529160200191610c6d565b820191906000526020600020905b815481529060010190602001808311610c5057829003601f168201915b5050505050815260200160038201548152505090506000610c8d83610cbe565b905081606001516012610ca091906118a5565b610cab90600a61199f565b610cb590826119ab565b95945050505050565b600080600083604051610cd191906116bc565b90815260408051918290036020908101832060808401835280546001600160a01b039081168552600182015416918401919091526002810180549192840191610d1990611682565b80601f0160208091040260200160405190810160405280929190818152602001828054610d4590611682565b8015610d925780601f10610d6757610100808354040283529160200191610d92565b820191906000526020600020905b815481529060010190602001808311610d7557829003601f168201915b505050505081526020016003820154815250509050600080610db48584610e6a565b90925090506000610dc68260126118a5565b610dd190600a61199f565b610ddb90846119ab565b604051621554d160ea1b6020820152909150602301604051602081830303815290604052805190602001208460400151604051602001610e1b91906116bc565b6040516020818303038152906040528051906020012014610cb557670de0b6b3a7640000610e4c8560400151610cbe565b610e5690836119ab565b610e6091906119c2565b9695505050505050565b805160009081906001600160a01b03161580610e91575060208301516001600160a01b0316155b15610eaf5760405163a88a8ec360e01b815260040160405180910390fd5b60008084600001516001600160a01b031663feaf968c6040518163ffffffff1660e01b815260040160a060405180830381865afa158015610ef4573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f189190611a03565b5093505092505060008086602001516001600160a01b031663feaf968c6040518163ffffffff1660e01b815260040160a060405180830381865afa158015610f64573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f889190611a03565b509350509250506000610f9a89611177565b9050600081610fa986426118a5565b111590506000610fb987866111cf565b90506000808612610fca5785610fd3565b610fd386611a55565b610fe0620186a0846119ab565b610fea91906119c2565b9050600060028d604051610ffe91906116bc565b90815260200160405180910390205490508060000361101c57506003545b60008085158061102b57508284115b156110cc578661103b89426118a5565b106110595760405163057cd0a160e51b815260040160405180910390fd5b8d602001516001600160a01b031663313ce5676040518163ffffffff1660e01b8152600401602060405180830381865afa15801561109b573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906110bf9190611a71565b60ff169150889050611164565b866110d78b426118a5565b106110f5576040516302fab6f360e31b815260040160405180910390fd5b8d600001516001600160a01b031663313ce5676040518163ffffffff1660e01b8152600401602060405180830381865afa158015611137573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061115b9190611a71565b60ff1691508a90505b9e909d509b505050505050505050505050565b60008060018360405161118a91906116bc565b9081526020016040518091039020549050600081116111c9577f00000000000000000000000000000000000000000000000000000000000d2f006104a3565b92915050565b6000818312156111e8576111e38383611a94565b6104a3565b6104a38284611a94565b60008060006040848603121561120757600080fd5b83359250602084013567ffffffffffffffff81111561122557600080fd5b8401601f8101861361123657600080fd5b803567ffffffffffffffff81111561124d57600080fd5b86602082840101111561125f57600080fd5b939660209190910195509293505050565b634e487b7160e01b600052604160045260246000fd5b6040516080810167ffffffffffffffff811182821017156112a9576112a9611270565b60405290565b604051601f8201601f1916810167ffffffffffffffff811182821017156112d8576112d8611270565b604052919050565b600067ffffffffffffffff8211156112fa576112fa611270565b50601f01601f191660200190565b600082601f83011261131957600080fd5b813561132c611327826112e0565b6112af565b81815284602083860101111561134157600080fd5b816020850160208301376000918101602001919091529392505050565b60006020828403121561137057600080fd5b813567ffffffffffffffff81111561138757600080fd5b61139384828501611308565b949350505050565b6001600160a01b03811681146113b057600080fd5b50565b6000602082840312156113c557600080fd5b81356104a38161139b565b60005b838110156113eb5781810151838201526020016113d3565b50506000910152565b6000815180845261140c8160208601602086016113d0565b601f01601f19169290920160200192915050565b6001600160a01b0385811682528416602082015260806040820181905260009061144c908301856113f4565b905082606083015295945050505050565b60006020828403121561146f57600080fd5b5035919050565b6000806040838503121561148957600080fd5b823567ffffffffffffffff8111156114a057600080fd5b6114ac85828601611308565b95602094909401359450505050565b600080604083850312156114ce57600080fd5b823567ffffffffffffffff8111156114e557600080fd5b6114f185828601611308565b925050602083013567ffffffffffffffff81111561150e57600080fd5b83016080818603121561152057600080fd5b611528611286565b81356115338161139b565b815260208201356115438161139b565b6020820152604082013567ffffffffffffffff81111561156257600080fd5b61156e87828501611308565b60408301525060609182013591810191909152919491935090915050565b60006020828403121561159e57600080fd5b5051919050565b6000602082840312156115b757600080fd5b815180151581146104a357600080fd5b8183823760009101908152919050565b84815283602082015260606040820152816060820152818360808301376000818301608090810191909152601f909201601f191601019392505050565b60006020828403121561162657600080fd5b815167ffffffffffffffff81111561163d57600080fd5b8201601f8101841361164e57600080fd5b805161165c611327826112e0565b81815285602083850101111561167157600080fd5b610cb58260208301602086016113d0565b600181811c9082168061169657607f821691505b6020821081036116b657634e487b7160e01b600052602260045260246000fd5b50919050565b600082516116ce8184602087016113d0565b9190910192915050565b6040815260006116eb60408301856113f4565b90508260208301529392505050565b601f82111561174457806000526020600020601f840160051c810160208510156117215750805b601f840160051c820191505b81811015611741576000815560010161172d565b50505b505050565b815167ffffffffffffffff81111561176357611763611270565b611777816117718454611682565b846116fa565b6020601f8211600181146117ab57600083156117935750848201515b600019600385901b1c1916600184901b178455611741565b600084815260208120601f198516915b828110156117db57878501518255602094850194600190920191016117bb565b50848210156117f95786840151600019600387901b60f8161c191681555b50505050600190811b01905550565b60408152600061181b60408301856113f4565b828103602084015260018060a01b03845116815260018060a01b03602085015116602082015260408401516080604083015261185a60808301826113f4565b90506060850151606083015280925050509392505050565b60006020828403121561188457600080fd5b81516104a38161139b565b634e487b7160e01b600052601160045260246000fd5b818103818111156111c9576111c961188f565b6001815b60018411156118f3578085048111156118d7576118d761188f565b60018416156118e557908102905b60019390931c9280026118bc565b935093915050565b60008261190a575060016111c9565b81611917575060006111c9565b816001811461192d576002811461193757611953565b60019150506111c9565b60ff8411156119485761194861188f565b50506001821b6111c9565b5060208310610133831016604e8410600b8410161715611976575081810a6111c9565b61198360001984846118b8565b80600019048211156119975761199761188f565b029392505050565b60006104a383836118fb565b80820281158282048414176111c9576111c961188f565b6000826119df57634e487b7160e01b600052601260045260246000fd5b500490565b805169ffffffffffffffffffff811681146119fe57600080fd5b919050565b600080600080600060a08688031215611a1b57600080fd5b611a24866119e4565b60208701516040880151606089015192975090955093509150611a49608087016119e4565b90509295509295909350565b6000600160ff1b8201611a6a57611a6a61188f565b5060000390565b600060208284031215611a8357600080fd5b815160ff811681146104a357600080fd5b8181036000831280158383131683831282161715611ab457611ab461188f565b509291505056fea2646970667358221220258e51352a321c944b1baaefdc309af45d95aa95d6f12695df9f0ea1ea0a095664736f6c634300081c0033

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

000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000a00000000000000000000000003dc52279175ee96b6a60f6870ec4dfa417c916e300000000000000000000000000000000000000000000000000000000000d2f0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000

-----Decoded View---------------
Arg [0] : symbols_ (string[]):
Arg [1] : configs_ (tuple[]):
Arg [2] : roles_ (address): 0x3dc52279175EE96b6A60f6870ec4DfA417c916E3
Arg [3] : stalenessPeriod_ (uint256): 864000

-----Encoded View---------------
6 Constructor Arguments found :
Arg [0] : 0000000000000000000000000000000000000000000000000000000000000080
Arg [1] : 00000000000000000000000000000000000000000000000000000000000000a0
Arg [2] : 0000000000000000000000003dc52279175ee96b6a60f6870ec4dfa417c916e3
Arg [3] : 00000000000000000000000000000000000000000000000000000000000d2f00
Arg [4] : 0000000000000000000000000000000000000000000000000000000000000000
Arg [5] : 0000000000000000000000000000000000000000000000000000000000000000


Block Transaction Gas Used Reward
view all blocks sequenced

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

Validator Index Block Amount
View All Withdrawals

Transaction Hash Block Value Eth2 PubKey Valid
View All Deposits
0xAc028838DaF18FAD0F69a1a1e143Eb8a29b04904
Loading...
Loading
Loading...
Loading
[ Download: CSV Export  ]
[ 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.