Source Code
Overview
ETH Balance
More Info
ContractCreator
Multichain Info
N/A
Latest 25 internal transactions (View All)
| Parent Transaction Hash | Block | From | To | Amount | ||
|---|---|---|---|---|---|---|
| 24067418 | 20 hrs ago | 0 ETH | ||||
| 24067418 | 20 hrs ago | 0 ETH | ||||
| 24067418 | 20 hrs ago | 0 ETH | ||||
| 24067418 | 20 hrs ago | 0 ETH | ||||
| 24067418 | 20 hrs ago | 0 ETH | ||||
| 24067418 | 20 hrs ago | 0 ETH | ||||
| 24067418 | 20 hrs ago | 0 ETH | ||||
| 24067418 | 20 hrs ago | 0 ETH | ||||
| 24067418 | 20 hrs ago | 0 ETH | ||||
| 24067418 | 20 hrs ago | 0 ETH | ||||
| 24067418 | 20 hrs ago | 0 ETH | ||||
| 24067418 | 20 hrs ago | 0 ETH | ||||
| 24067418 | 20 hrs ago | 0 ETH | ||||
| 24067418 | 20 hrs ago | 0 ETH | ||||
| 24067418 | 20 hrs ago | 0 ETH | ||||
| 24067418 | 20 hrs ago | 0 ETH | ||||
| 24067418 | 20 hrs ago | 0 ETH | ||||
| 24067418 | 20 hrs ago | 0 ETH | ||||
| 24067403 | 20 hrs ago | 0 ETH | ||||
| 24067403 | 20 hrs ago | 0 ETH | ||||
| 24067403 | 20 hrs ago | 0 ETH | ||||
| 24067403 | 20 hrs ago | 0 ETH | ||||
| 24067403 | 20 hrs ago | 0 ETH | ||||
| 24067403 | 20 hrs ago | 0 ETH | ||||
| 24067403 | 20 hrs ago | 0 ETH |
Loading...
Loading
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);
}// 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);
}{
"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"}]Contract Creation Code
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
Loading...
Loading
Loading...
Loading
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.