Feature Tip: Add private address tag to any address under My Name Tag !
Overview
ETH Balance
0 ETH
Eth Value
$0.00View more zero value Internal Transactions in Advanced View mode
Advanced mode:
Loading...
Loading
Cross-Chain Transactions
Loading...
Loading
Contract Name:
ERC4626Oracle
Compiler Version
v0.8.17+commit.8df45f5f
Optimization Enabled:
Yes with 200 runs
Other Settings:
default evmVersion
Contract Source Code (Solidity Standard Json-Input format)
// SPDX-License-Identifier: MIT
pragma solidity 0.8.17;
import {IERC4626} from "@openzeppelin/contracts/interfaces/IERC4626.sol";
import {AggregatorV3Interface} from "../interfaces/chainlink/AggregatorV3Interface.sol";
import {OracleErrors} from "../libraries/Errors.sol";
contract ERC4626Oracle is AggregatorV3Interface {
IERC4626 public immutable token;
uint8 public immutable tokenDecimals;
AggregatorV3Interface public immutable assetOracle;
uint256 public immutable version = 3;
string private _description;
constructor(string memory description_, address _assetOracle, address _token) {
if (_assetOracle == address(0) || _token == address(0)) {
revert OracleErrors.CANNOT_SET_TO_ADDRESS_ZERO();
}
if (bytes(description_).length == 0) {
revert OracleErrors.CANNOT_SET_TO_EMPTY_STRING();
}
_description = description_;
assetOracle = AggregatorV3Interface(_assetOracle);
token = IERC4626(_token);
tokenDecimals = token.decimals();
}
/**
* @notice Get price of one token expressed in asset.
*/
function latestRoundData() external view override returns (uint80, int256, uint256, uint256, uint80) {
(uint80 roundId, int256 assetPrice, uint256 startedAt, uint256 updatedAt, uint80 answeredInRound) =
assetOracle.latestRoundData();
if (assetPrice < 0) {
revert OracleErrors.ORACLE_DATA_CANNOT_BE_LESS_THAN_ZERO();
}
return (
roundId,
int256(token.convertToAssets(10 ** tokenDecimals)) * assetPrice / int256(10 ** tokenDecimals),
startedAt,
updatedAt,
answeredInRound
);
}
/**
* @notice Get price of one token expressed in asset.
* @dev This function might not be supported by all oracles such as USK/USD KIBTAggregator, hence the use of try catch.
*/
function getRoundData(uint80 _roundId) external view override returns (uint80, int256, uint256, uint256, uint80) {
try assetOracle.getRoundData(_roundId) returns (
uint80 roundId, int256 assetPrice, uint256 startedAt, uint256 updatedAt, uint80 answeredInRound
) {
if (assetPrice < 0) {
revert OracleErrors.ORACLE_DATA_CANNOT_BE_LESS_THAN_ZERO();
}
return (
roundId,
int256(token.convertToAssets(10 ** tokenDecimals)) * assetPrice / int256(10 ** tokenDecimals),
startedAt,
updatedAt,
answeredInRound
);
} catch {
revert OracleErrors.GET_ROUND_DATA_NOT_SUPPORTED();
}
}
/**
* @notice Get description of oracle.
*/
function description() external view override returns (string memory) {
return _description;
}
/**
* Returns the decimals that answers are formatted in. This should the the same as the oracle of the 4626 asset
*/
function decimals() external view returns (uint8) {
return assetOracle.decimals();
}
}// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts (last updated v4.9.0) (interfaces/IERC4626.sol)
pragma solidity ^0.8.0;
import "../token/ERC20/IERC20.sol";
import "../token/ERC20/extensions/IERC20Metadata.sol";
/**
* @dev Interface of the ERC4626 "Tokenized Vault Standard", as defined in
* https://eips.ethereum.org/EIPS/eip-4626[ERC-4626].
*
* _Available since v4.7._
*/
interface IERC4626 is IERC20, IERC20Metadata {
event Deposit(address indexed sender, address indexed owner, uint256 assets, uint256 shares);
event Withdraw(
address indexed sender,
address indexed receiver,
address indexed owner,
uint256 assets,
uint256 shares
);
/**
* @dev Returns the address of the underlying token used for the Vault for accounting, depositing, and withdrawing.
*
* - MUST be an ERC-20 token contract.
* - MUST NOT revert.
*/
function asset() external view returns (address assetTokenAddress);
/**
* @dev Returns the total amount of the underlying asset that is “managed” by Vault.
*
* - SHOULD include any compounding that occurs from yield.
* - MUST be inclusive of any fees that are charged against assets in the Vault.
* - MUST NOT revert.
*/
function totalAssets() external view returns (uint256 totalManagedAssets);
/**
* @dev Returns the amount of shares that the Vault would exchange for the amount of assets provided, in an ideal
* scenario where all the conditions are met.
*
* - MUST NOT be inclusive of any fees that are charged against assets in the Vault.
* - MUST NOT show any variations depending on the caller.
* - MUST NOT reflect slippage or other on-chain conditions, when performing the actual exchange.
* - MUST NOT revert.
*
* NOTE: This calculation MAY NOT reflect the “per-user” price-per-share, and instead should reflect the
* “average-user’s” price-per-share, meaning what the average user should expect to see when exchanging to and
* from.
*/
function convertToShares(uint256 assets) external view returns (uint256 shares);
/**
* @dev Returns the amount of assets that the Vault would exchange for the amount of shares provided, in an ideal
* scenario where all the conditions are met.
*
* - MUST NOT be inclusive of any fees that are charged against assets in the Vault.
* - MUST NOT show any variations depending on the caller.
* - MUST NOT reflect slippage or other on-chain conditions, when performing the actual exchange.
* - MUST NOT revert.
*
* NOTE: This calculation MAY NOT reflect the “per-user” price-per-share, and instead should reflect the
* “average-user’s” price-per-share, meaning what the average user should expect to see when exchanging to and
* from.
*/
function convertToAssets(uint256 shares) external view returns (uint256 assets);
/**
* @dev Returns the maximum amount of the underlying asset that can be deposited into the Vault for the receiver,
* through a deposit call.
*
* - MUST return a limited value if receiver is subject to some deposit limit.
* - MUST return 2 ** 256 - 1 if there is no limit on the maximum amount of assets that may be deposited.
* - MUST NOT revert.
*/
function maxDeposit(address receiver) external view returns (uint256 maxAssets);
/**
* @dev Allows an on-chain or off-chain user to simulate the effects of their deposit at the current block, given
* current on-chain conditions.
*
* - MUST return as close to and no more than the exact amount of Vault shares that would be minted in a deposit
* call in the same transaction. I.e. deposit should return the same or more shares as previewDeposit if called
* in the same transaction.
* - MUST NOT account for deposit limits like those returned from maxDeposit and should always act as though the
* deposit would be accepted, regardless if the user has enough tokens approved, etc.
* - MUST be inclusive of deposit fees. Integrators should be aware of the existence of deposit fees.
* - MUST NOT revert.
*
* NOTE: any unfavorable discrepancy between convertToShares and previewDeposit SHOULD be considered slippage in
* share price or some other type of condition, meaning the depositor will lose assets by depositing.
*/
function previewDeposit(uint256 assets) external view returns (uint256 shares);
/**
* @dev Mints shares Vault shares to receiver by depositing exactly amount of underlying tokens.
*
* - MUST emit the Deposit event.
* - MAY support an additional flow in which the underlying tokens are owned by the Vault contract before the
* deposit execution, and are accounted for during deposit.
* - MUST revert if all of assets cannot be deposited (due to deposit limit being reached, slippage, the user not
* approving enough underlying tokens to the Vault contract, etc).
*
* NOTE: most implementations will require pre-approval of the Vault with the Vault’s underlying asset token.
*/
function deposit(uint256 assets, address receiver) external returns (uint256 shares);
/**
* @dev Returns the maximum amount of the Vault shares that can be minted for the receiver, through a mint call.
* - MUST return a limited value if receiver is subject to some mint limit.
* - MUST return 2 ** 256 - 1 if there is no limit on the maximum amount of shares that may be minted.
* - MUST NOT revert.
*/
function maxMint(address receiver) external view returns (uint256 maxShares);
/**
* @dev Allows an on-chain or off-chain user to simulate the effects of their mint at the current block, given
* current on-chain conditions.
*
* - MUST return as close to and no fewer than the exact amount of assets that would be deposited in a mint call
* in the same transaction. I.e. mint should return the same or fewer assets as previewMint if called in the
* same transaction.
* - MUST NOT account for mint limits like those returned from maxMint and should always act as though the mint
* would be accepted, regardless if the user has enough tokens approved, etc.
* - MUST be inclusive of deposit fees. Integrators should be aware of the existence of deposit fees.
* - MUST NOT revert.
*
* NOTE: any unfavorable discrepancy between convertToAssets and previewMint SHOULD be considered slippage in
* share price or some other type of condition, meaning the depositor will lose assets by minting.
*/
function previewMint(uint256 shares) external view returns (uint256 assets);
/**
* @dev Mints exactly shares Vault shares to receiver by depositing amount of underlying tokens.
*
* - MUST emit the Deposit event.
* - MAY support an additional flow in which the underlying tokens are owned by the Vault contract before the mint
* execution, and are accounted for during mint.
* - MUST revert if all of shares cannot be minted (due to deposit limit being reached, slippage, the user not
* approving enough underlying tokens to the Vault contract, etc).
*
* NOTE: most implementations will require pre-approval of the Vault with the Vault’s underlying asset token.
*/
function mint(uint256 shares, address receiver) external returns (uint256 assets);
/**
* @dev Returns the maximum amount of the underlying asset that can be withdrawn from the owner balance in the
* Vault, through a withdraw call.
*
* - MUST return a limited value if owner is subject to some withdrawal limit or timelock.
* - MUST NOT revert.
*/
function maxWithdraw(address owner) external view returns (uint256 maxAssets);
/**
* @dev Allows an on-chain or off-chain user to simulate the effects of their withdrawal at the current block,
* given current on-chain conditions.
*
* - MUST return as close to and no fewer than the exact amount of Vault shares that would be burned in a withdraw
* call in the same transaction. I.e. withdraw should return the same or fewer shares as previewWithdraw if
* called
* in the same transaction.
* - MUST NOT account for withdrawal limits like those returned from maxWithdraw and should always act as though
* the withdrawal would be accepted, regardless if the user has enough shares, etc.
* - MUST be inclusive of withdrawal fees. Integrators should be aware of the existence of withdrawal fees.
* - MUST NOT revert.
*
* NOTE: any unfavorable discrepancy between convertToShares and previewWithdraw SHOULD be considered slippage in
* share price or some other type of condition, meaning the depositor will lose assets by depositing.
*/
function previewWithdraw(uint256 assets) external view returns (uint256 shares);
/**
* @dev Burns shares from owner and sends exactly assets of underlying tokens to receiver.
*
* - MUST emit the Withdraw event.
* - MAY support an additional flow in which the underlying tokens are owned by the Vault contract before the
* withdraw execution, and are accounted for during withdraw.
* - MUST revert if all of assets cannot be withdrawn (due to withdrawal limit being reached, slippage, the owner
* not having enough shares, etc).
*
* Note that some implementations will require pre-requesting to the Vault before a withdrawal may be performed.
* Those methods should be performed separately.
*/
function withdraw(uint256 assets, address receiver, address owner) external returns (uint256 shares);
/**
* @dev Returns the maximum amount of Vault shares that can be redeemed from the owner balance in the Vault,
* through a redeem call.
*
* - MUST return a limited value if owner is subject to some withdrawal limit or timelock.
* - MUST return balanceOf(owner) if owner is not subject to any withdrawal limit or timelock.
* - MUST NOT revert.
*/
function maxRedeem(address owner) external view returns (uint256 maxShares);
/**
* @dev Allows an on-chain or off-chain user to simulate the effects of their redeemption at the current block,
* given current on-chain conditions.
*
* - MUST return as close to and no more than the exact amount of assets that would be withdrawn in a redeem call
* in the same transaction. I.e. redeem should return the same or more assets as previewRedeem if called in the
* same transaction.
* - MUST NOT account for redemption limits like those returned from maxRedeem and should always act as though the
* redemption would be accepted, regardless if the user has enough shares, etc.
* - MUST be inclusive of withdrawal fees. Integrators should be aware of the existence of withdrawal fees.
* - MUST NOT revert.
*
* NOTE: any unfavorable discrepancy between convertToAssets and previewRedeem SHOULD be considered slippage in
* share price or some other type of condition, meaning the depositor will lose assets by redeeming.
*/
function previewRedeem(uint256 shares) external view returns (uint256 assets);
/**
* @dev Burns exactly shares from owner and sends assets of underlying tokens to receiver.
*
* - MUST emit the Withdraw event.
* - MAY support an additional flow in which the underlying tokens are owned by the Vault contract before the
* redeem execution, and are accounted for during redeem.
* - MUST revert if all of shares cannot be redeemed (due to withdrawal limit being reached, slippage, the owner
* not having enough shares, etc).
*
* NOTE: some implementations will require pre-requesting to the Vault before a withdrawal may be performed.
* Those methods should be performed separately.
*/
function redeem(uint256 shares, address receiver, address owner) external returns (uint256 assets);
}// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts v4.4.1 (token/ERC20/extensions/IERC20Metadata.sol)
pragma solidity ^0.8.0;
import "../IERC20.sol";
/**
* @dev Interface for the optional metadata functions from the ERC20 standard.
*
* _Available since v4.1._
*/
interface IERC20Metadata is IERC20 {
/**
* @dev Returns the name of the token.
*/
function name() external view returns (string memory);
/**
* @dev Returns the symbol of the token.
*/
function symbol() external view returns (string memory);
/**
* @dev Returns the decimals places of the token.
*/
function decimals() external view returns (uint8);
}// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts (last updated v4.9.0) (token/ERC20/IERC20.sol)
pragma solidity ^0.8.0;
/**
* @dev Interface of the ERC20 standard as defined in the EIP.
*/
interface IERC20 {
/**
* @dev Emitted when `value` tokens are moved from one account (`from`) to
* another (`to`).
*
* Note that `value` may be zero.
*/
event Transfer(address indexed from, address indexed to, uint256 value);
/**
* @dev Emitted when the allowance of a `spender` for an `owner` is set by
* a call to {approve}. `value` is the new allowance.
*/
event Approval(address indexed owner, address indexed spender, uint256 value);
/**
* @dev Returns the amount of tokens in existence.
*/
function totalSupply() external view returns (uint256);
/**
* @dev Returns the amount of tokens owned by `account`.
*/
function balanceOf(address account) external view returns (uint256);
/**
* @dev Moves `amount` tokens from the caller's account to `to`.
*
* Returns a boolean value indicating whether the operation succeeded.
*
* Emits a {Transfer} event.
*/
function transfer(address to, uint256 amount) external returns (bool);
/**
* @dev Returns the remaining number of tokens that `spender` will be
* allowed to spend on behalf of `owner` through {transferFrom}. This is
* zero by default.
*
* This value changes when {approve} or {transferFrom} are called.
*/
function allowance(address owner, address spender) external view returns (uint256);
/**
* @dev Sets `amount` as the allowance of `spender` over the caller's tokens.
*
* Returns a boolean value indicating whether the operation succeeded.
*
* IMPORTANT: Beware that changing an allowance with this method brings the risk
* that someone may use both the old and the new allowance by unfortunate
* transaction ordering. One possible solution to mitigate this race
* condition is to first reduce the spender's allowance to 0 and set the
* desired value afterwards:
* https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729
*
* Emits an {Approval} event.
*/
function approve(address spender, uint256 amount) external returns (bool);
/**
* @dev Moves `amount` tokens from `from` to `to` using the
* allowance mechanism. `amount` is then deducted from the caller's
* allowance.
*
* Returns a boolean value indicating whether the operation succeeded.
*
* Emits a {Transfer} event.
*/
function transferFrom(address from, address to, uint256 amount) external returns (bool);
}// SPDX-License-Identifier: UNLICENSED
pragma solidity ^0.8.0;
interface AggregatorV3Interface {
function decimals() external view returns (uint8);
function description() external view returns (string memory);
function version() external view returns (uint256);
function getRoundData(uint80 _roundId)
external
view
returns (uint80 roundId, int256 answer, uint256 startedAt, uint256 updatedAt, uint80 answeredInRound);
function latestRoundData()
external
view
returns (uint80 roundId, int256 answer, uint256 startedAt, uint256 updatedAt, uint80 answeredInRound);
}// SPDX-License-Identifier: MIT
pragma solidity 0.8.17;
/**
* @title Errors library
* @author MIMO
* @notice Defines the error messages emtted by the different contracts of the MIMO protocol
*/
library KUMA_PROTOCOL_ERRORS {
error CANNOT_SET_TO_ADDRESS_ZERO();
error CANNOT_SET_TO_ZERO();
error ERC20_TRANSFER_FROM_THE_ZERO_ADDRESS();
error ERC20_TRANSER_TO_THE_ZERO_ADDRESS();
error ERC20_TRANSFER_AMOUNT_EXCEEDS_BALANCE();
error ERC20_MINT_TO_THE_ZERO_ADDRESS();
error ERC20_BURN_FROM_THE_ZERO_ADDRESS();
error ERC20_BURN_AMOUNT_EXCEEDS_BALANCE();
error START_TIME_NOT_REACHED();
error EPOCH_LENGTH_CANNOT_BE_ZERO();
error EPOCH_LENGTH_TOO_HIGH(uint256 epochLength, uint256 maxEpochLength);
error EPOCH_LENGTH_TOO_LOW(uint256 epochLength, uint256 minEpochLength);
error ERROR_YIELD_LT_RAY();
error ACCESS_CONTROL_ACCOUNT_IS_MISSING_ROLE(address account, bytes32 role);
error BLACKLISTABLE_CALLER_IS_NOT_BLACKLISTER();
error BLACKLISTABLE_ACCOUNT_IS_BLACKLISTED(address account);
error NEW_YIELD_TOO_HIGH();
error WRONG_RISK_CATEGORY();
error WRONG_RISK_CONFIG();
error INVALID_RISK_CATEGORY();
error INVALID_TOKEN_ID();
error ERC721_CALLER_IS_NOT_TOKEN_OWNER_OR_APPROVED();
error ERC721_APPROVAL_TO_CURRENT_OWNER();
error ERC721_APPROVE_CALLER_IS_NOT_TOKEN_OWNER_OR_APPROVED_FOR_ALL();
error ERC721_INVALID_TOKEN_ID();
error ERC721_CALLER_IS_NOT_TOKEN_OWNER();
error CALLER_NOT_KUMASWAP();
error CALLER_NOT_MIMO_BOND_TOKEN();
error BOND_NOT_AVAILABLE_FOR_CLAIM();
error CANNOT_SELL_MATURED_BOND();
error NO_EXPIRED_BOND_IN_RESERVE();
error MAX_COUPONS_REACHED();
error COUPON_TOO_LOW();
error CALLER_IS_NOT_MIB_TOKEN();
error CALLER_NOT_FEE_COLLECTOR();
error PAYEE_ALREADY_EXISTS();
error PAYEE_DOES_NOT_EXIST();
error PAYEES_AND_SHARES_MISMATCHED(uint256 payeeLength, uint256 shareLength);
error NO_PAYEES();
error NO_AVAILABLE_INCOME();
error SHARE_CANNOT_BE_ZERO();
error DEPRECATION_MODE_ENABLED();
error DEPRECATION_MODE_ALREADY_INITIALIZED();
error DEPRECATION_MODE_NOT_INITIALIZED();
error DEPRECATION_MODE_NOT_ENABLED();
error ELAPSED_TIME_SINCE_DEPRECATION_MODE_INITIALIZATION_TOO_SHORT(uint256 elapsed, uint256 minElapsedTime);
error AMOUNT_CANNOT_BE_ZERO();
error BOND_RESERVE_NOT_EMPTY();
error BUYER_CANNOT_BE_ADDRESS_ZERO();
error RISK_CATEGORY_MISMATCH();
error EXPIRED_BONDS_MUST_BE_BOUGHT_FIRST();
error BOND_NOT_MATURED();
error CANNOT_TRANSFER_TO_SELF();
error BOND_ALREADY_EXPIRED();
error ORACLE_ANSWER_IS_STALE();
}
library MCAG_ERRORS {
error CANNOT_SET_TO_ADDRESS_ZERO();
error ERC721_APPROVAL_TO_CURRENT_OWNER();
error ERC721_APPROVE_CALLER_IS_NOT_TOKEN_OWNER_OR_APPROVED_FOR_ALL();
error ERC721_INVALID_TOKEN_ID();
error ERC721_CALLER_IS_NOT_TOKEN_OWNER();
error ACCESS_CONTROL_ACCOUNT_IS_MISSING_ROLE(address account, bytes32 role);
error BLACKLIST_CALLER_IS_NOT_BLACKLISTER();
error BLACKLIST_ACCOUNT_IS_NOT_BLACKLISTED(address account);
error BLACKLIST_ACCOUNT_IS_BLACKLISTED(address account);
error TRANSMITTED_ANSWER_TOO_HIGH(int256 answer, int256 maxAnswer);
error TRANSMITTED_ANSWER_TOO_LOW(int256 answer, int256 minAnswer);
error TOKEN_IS_NOT_TRANSFERABLE();
error KYC_DATA_OWNER_MISMATCH(address to, address owner);
error RATE_TOO_VOLATILE(uint256 absoluteRateChange, uint256 volatilityThreshold);
error INVALID_VOLATILITY_THRESHOLD();
error TERMS_AND_CONDITIONS_URL_DOES_NOT_EXIST(uint256 tncId);
error TERM_TOO_LOW(uint256 term, uint256 minTerm);
error RISK_CATEGORY_MISMATCH(bytes4 currency, bytes4 country, uint64 term, bytes32 riskCategory);
error MATURITY_LESS_THAN_ISSUANCE(uint64 maturity, uint64 issuance);
error INVALID_RISK_CATEGORY();
error EMPTY_CUSIP_AND_ISIN();
error INVALID_MAX_COUPON();
error INVALID_COUPON(uint256 coupon, uint256 minCoupon, uint256 maxCoupon);
}
/**
* @title Oracle Errors library
* @author MIMO
* @notice Defines the error messages eimtted by the oracles used by the MIMO protocol
*/
library OracleErrors {
error CANNOT_SET_TO_ADDRESS_ZERO();
error CANNOT_SET_TO_EMPTY_STRING();
error ORACLE_DATA_CANNOT_BE_LESS_THAN_ZERO();
error GET_ROUND_DATA_NOT_SUPPORTED();
}{
"optimizer": {
"enabled": true,
"runs": 200
},
"outputSelection": {
"*": {
"*": [
"evm.bytecode",
"evm.deployedBytecode",
"devdoc",
"userdoc",
"metadata",
"abi"
]
}
},
"metadata": {
"useLiteralContent": true
},
"libraries": {}
}Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
Contract ABI
API[{"inputs":[{"internalType":"string","name":"description_","type":"string"},{"internalType":"address","name":"_assetOracle","type":"address"},{"internalType":"address","name":"_token","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"inputs":[],"name":"CANNOT_SET_TO_ADDRESS_ZERO","type":"error"},{"inputs":[],"name":"CANNOT_SET_TO_EMPTY_STRING","type":"error"},{"inputs":[],"name":"GET_ROUND_DATA_NOT_SUPPORTED","type":"error"},{"inputs":[],"name":"ORACLE_DATA_CANNOT_BE_LESS_THAN_ZERO","type":"error"},{"inputs":[],"name":"assetOracle","outputs":[{"internalType":"contract AggregatorV3Interface","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"description","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint80","name":"_roundId","type":"uint80"}],"name":"getRoundData","outputs":[{"internalType":"uint80","name":"","type":"uint80"},{"internalType":"int256","name":"","type":"int256"},{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint80","name":"","type":"uint80"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"latestRoundData","outputs":[{"internalType":"uint80","name":"","type":"uint80"},{"internalType":"int256","name":"","type":"int256"},{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint80","name":"","type":"uint80"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"token","outputs":[{"internalType":"contract IERC4626","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tokenDecimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"version","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"}]Contract Creation Code
610100604052600360e0523480156200001757600080fd5b5060405162000e0a38038062000e0a8339810160408190526200003a9162000163565b6001600160a01b03821615806200005857506001600160a01b038116155b156200007757604051636a8403ad60e01b815260040160405180910390fd5b82516000036200009a5760405163060a788d60e11b815260040160405180910390fd5b6000620000a88482620002ec565b506001600160a01b0380831660c052811660808190526040805163313ce56760e01b8152905163313ce567916004808201926020929091908290030181865afa158015620000fa573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620001209190620003b8565b60ff1660a05250620003e4915050565b634e487b7160e01b600052604160045260246000fd5b80516001600160a01b03811681146200015e57600080fd5b919050565b6000806000606084860312156200017957600080fd5b83516001600160401b03808211156200019157600080fd5b818601915086601f830112620001a657600080fd5b815181811115620001bb57620001bb62000130565b604051601f8201601f19908116603f01168101908382118183101715620001e657620001e662000130565b816040528281526020935089848487010111156200020357600080fd5b600091505b8282101562000227578482018401518183018501529083019062000208565b60008484830101528097505050506200024281870162000146565b93505050620002546040850162000146565b90509250925092565b600181811c908216806200027257607f821691505b6020821081036200029357634e487b7160e01b600052602260045260246000fd5b50919050565b601f821115620002e757600081815260208120601f850160051c81016020861015620002c25750805b601f850160051c820191505b81811015620002e357828155600101620002ce565b5050505b505050565b81516001600160401b0381111562000308576200030862000130565b62000320816200031984546200025d565b8462000299565b602080601f8311600181146200035857600084156200033f5750858301515b600019600386901b1c1916600185901b178555620002e3565b600085815260208120601f198616915b82811015620003895788860151825594840194600190910190840162000368565b5085821015620003a85787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b600060208284031215620003cb57600080fd5b815160ff81168114620003dd57600080fd5b9392505050565b60805160a05160c05160e0516109af6200045b60003960006101170152600081816092015281816101d90152818161032401526104ee01526000818160f0015281816103cc01528181610427015281816105a001526105fb0152600081816101ab015281816103fd01526105d101526109af6000f3fe608060405234801561001057600080fd5b50600436106100885760003560e01c80637284e4161161005b5780637284e416146101475780639a6fc8f51461015c578063fc0c546a146101a6578063feaf968c146101cd57600080fd5b80631d4d3a5d1461008d578063313ce567146100d15780633b97e856146100eb57806354fd4d5014610112575b600080fd5b6100b47f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b0390911681526020015b60405180910390f35b6100d96101d5565b60405160ff90911681526020016100c8565b6100d97f000000000000000000000000000000000000000000000000000000000000000081565b6101397f000000000000000000000000000000000000000000000000000000000000000081565b6040519081526020016100c8565b61014f61025e565b6040516100c891906106a7565b61016f61016a366004610710565b6102f0565b6040805169ffffffffffffffffffff968716815260208101959095528401929092526060830152909116608082015260a0016100c8565b6100b47f000000000000000000000000000000000000000000000000000000000000000081565b61016f6104dd565b60007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663313ce5676040518163ffffffff1660e01b8152600401602060405180830381865afa158015610235573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906102599190610734565b905090565b60606000805461026d90610757565b80601f016020809104026020016040519081016040528092919081815260200182805461029990610757565b80156102e65780601f106102bb576101008083540402835291602001916102e6565b820191906000526020600020905b8154815290600101906020018083116102c957829003601f168201915b5050505050905090565b604051639a6fc8f560e01b815269ffffffffffffffffffff8216600482015260009081908190819081906001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001690639a6fc8f59060240160a060405180830381865afa925050508015610387575060408051601f3d908101601f1916820190925261038491810190610791565b60015b6103a45760405163f12dcf5b60e01b815260040160405180910390fd5b60008412156103c657604051631add22e360e21b815260040160405180910390fd5b846103f27f0000000000000000000000000000000000000000000000000000000000000000600a6108e5565b856001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000166307a2d13a61044d7f0000000000000000000000000000000000000000000000000000000000000000600a6108e5565b6040518263ffffffff1660e01b815260040161046b91815260200190565b602060405180830381865afa158015610488573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906104ac91906108f4565b6104b6919061090d565b6104c0919061093d565b909a509850919650945092506104d4915050565b91939590929450565b6000806000806000806000806000807f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663feaf968c6040518163ffffffff1660e01b815260040160a060405180830381865afa15801561054a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061056e9190610791565b94509450945094509450600084121561059a57604051631add22e360e21b815260040160405180910390fd5b846105c67f0000000000000000000000000000000000000000000000000000000000000000600a6108e5565b856001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000166307a2d13a6106217f0000000000000000000000000000000000000000000000000000000000000000600a6108e5565b6040518263ffffffff1660e01b815260040161063f91815260200190565b602060405180830381865afa15801561065c573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061068091906108f4565b61068a919061090d565b610694919061093d565b909b909a50929850909650945092505050565b600060208083528351808285015260005b818110156106d4578581018301518582016040015282016106b8565b506000604082860101526040601f19601f8301168501019250505092915050565b69ffffffffffffffffffff8116811461070d57600080fd5b50565b60006020828403121561072257600080fd5b813561072d816106f5565b9392505050565b60006020828403121561074657600080fd5b815160ff8116811461072d57600080fd5b600181811c9082168061076b57607f821691505b60208210810361078b57634e487b7160e01b600052602260045260246000fd5b50919050565b600080600080600060a086880312156107a957600080fd5b85516107b4816106f5565b8095505060208601519350604086015192506060860151915060808601516107db816106f5565b809150509295509295909350565b634e487b7160e01b600052601160045260246000fd5b600181815b8085111561083a578160001904821115610820576108206107e9565b8085161561082d57918102915b93841c9390800290610804565b509250929050565b600082610851575060016108df565b8161085e575060006108df565b8160018114610874576002811461087e5761089a565b60019150506108df565b60ff84111561088f5761088f6107e9565b50506001821b6108df565b5060208310610133831016604e8410600b84101617156108bd575081810a6108df565b6108c783836107ff565b80600019048211156108db576108db6107e9565b0290505b92915050565b600061072d60ff841683610842565b60006020828403121561090657600080fd5b5051919050565b80820260008212600160ff1b84141615610929576109296107e9565b81810583148215176108df576108df6107e9565b60008261095a57634e487b7160e01b600052601260045260246000fd5b600160ff1b821460001984141615610974576109746107e9565b50059056fea26469706673582212209c20c40890e635f20e4a068dbe1877099f23806ce92a67ee95b6d4f8c367055764736f6c634300081100330000000000000000000000000000000000000000000000000000000000000060000000000000000000000000dc888b8c76ef26852b6f6c0008d6e2f29a96cb50000000000000000000000000af4ce7cd4f8891ecf1799878c3e9a35b8be57e09000000000000000000000000000000000000000000000000000000000000000a7755534b202f2055534400000000000000000000000000000000000000000000
Deployed Bytecode
0x608060405234801561001057600080fd5b50600436106100885760003560e01c80637284e4161161005b5780637284e416146101475780639a6fc8f51461015c578063fc0c546a146101a6578063feaf968c146101cd57600080fd5b80631d4d3a5d1461008d578063313ce567146100d15780633b97e856146100eb57806354fd4d5014610112575b600080fd5b6100b47f000000000000000000000000dc888b8c76ef26852b6f6c0008d6e2f29a96cb5081565b6040516001600160a01b0390911681526020015b60405180910390f35b6100d96101d5565b60405160ff90911681526020016100c8565b6100d97f000000000000000000000000000000000000000000000000000000000000001281565b6101397f000000000000000000000000000000000000000000000000000000000000000381565b6040519081526020016100c8565b61014f61025e565b6040516100c891906106a7565b61016f61016a366004610710565b6102f0565b6040805169ffffffffffffffffffff968716815260208101959095528401929092526060830152909116608082015260a0016100c8565b6100b47f000000000000000000000000af4ce7cd4f8891ecf1799878c3e9a35b8be57e0981565b61016f6104dd565b60007f000000000000000000000000dc888b8c76ef26852b6f6c0008d6e2f29a96cb506001600160a01b031663313ce5676040518163ffffffff1660e01b8152600401602060405180830381865afa158015610235573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906102599190610734565b905090565b60606000805461026d90610757565b80601f016020809104026020016040519081016040528092919081815260200182805461029990610757565b80156102e65780601f106102bb576101008083540402835291602001916102e6565b820191906000526020600020905b8154815290600101906020018083116102c957829003601f168201915b5050505050905090565b604051639a6fc8f560e01b815269ffffffffffffffffffff8216600482015260009081908190819081906001600160a01b037f000000000000000000000000dc888b8c76ef26852b6f6c0008d6e2f29a96cb501690639a6fc8f59060240160a060405180830381865afa925050508015610387575060408051601f3d908101601f1916820190925261038491810190610791565b60015b6103a45760405163f12dcf5b60e01b815260040160405180910390fd5b60008412156103c657604051631add22e360e21b815260040160405180910390fd5b846103f27f0000000000000000000000000000000000000000000000000000000000000012600a6108e5565b856001600160a01b037f000000000000000000000000af4ce7cd4f8891ecf1799878c3e9a35b8be57e09166307a2d13a61044d7f0000000000000000000000000000000000000000000000000000000000000012600a6108e5565b6040518263ffffffff1660e01b815260040161046b91815260200190565b602060405180830381865afa158015610488573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906104ac91906108f4565b6104b6919061090d565b6104c0919061093d565b909a509850919650945092506104d4915050565b91939590929450565b6000806000806000806000806000807f000000000000000000000000dc888b8c76ef26852b6f6c0008d6e2f29a96cb506001600160a01b031663feaf968c6040518163ffffffff1660e01b815260040160a060405180830381865afa15801561054a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061056e9190610791565b94509450945094509450600084121561059a57604051631add22e360e21b815260040160405180910390fd5b846105c67f0000000000000000000000000000000000000000000000000000000000000012600a6108e5565b856001600160a01b037f000000000000000000000000af4ce7cd4f8891ecf1799878c3e9a35b8be57e09166307a2d13a6106217f0000000000000000000000000000000000000000000000000000000000000012600a6108e5565b6040518263ffffffff1660e01b815260040161063f91815260200190565b602060405180830381865afa15801561065c573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061068091906108f4565b61068a919061090d565b610694919061093d565b909b909a50929850909650945092505050565b600060208083528351808285015260005b818110156106d4578581018301518582016040015282016106b8565b506000604082860101526040601f19601f8301168501019250505092915050565b69ffffffffffffffffffff8116811461070d57600080fd5b50565b60006020828403121561072257600080fd5b813561072d816106f5565b9392505050565b60006020828403121561074657600080fd5b815160ff8116811461072d57600080fd5b600181811c9082168061076b57607f821691505b60208210810361078b57634e487b7160e01b600052602260045260246000fd5b50919050565b600080600080600060a086880312156107a957600080fd5b85516107b4816106f5565b8095505060208601519350604086015192506060860151915060808601516107db816106f5565b809150509295509295909350565b634e487b7160e01b600052601160045260246000fd5b600181815b8085111561083a578160001904821115610820576108206107e9565b8085161561082d57918102915b93841c9390800290610804565b509250929050565b600082610851575060016108df565b8161085e575060006108df565b8160018114610874576002811461087e5761089a565b60019150506108df565b60ff84111561088f5761088f6107e9565b50506001821b6108df565b5060208310610133831016604e8410600b84101617156108bd575081810a6108df565b6108c783836107ff565b80600019048211156108db576108db6107e9565b0290505b92915050565b600061072d60ff841683610842565b60006020828403121561090657600080fd5b5051919050565b80820260008212600160ff1b84141615610929576109296107e9565b81810583148215176108df576108df6107e9565b60008261095a57634e487b7160e01b600052601260045260246000fd5b600160ff1b821460001984141615610974576109746107e9565b50059056fea26469706673582212209c20c40890e635f20e4a068dbe1877099f23806ce92a67ee95b6d4f8c367055764736f6c63430008110033
Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)
0000000000000000000000000000000000000000000000000000000000000060000000000000000000000000dc888b8c76ef26852b6f6c0008d6e2f29a96cb50000000000000000000000000af4ce7cd4f8891ecf1799878c3e9a35b8be57e09000000000000000000000000000000000000000000000000000000000000000a7755534b202f2055534400000000000000000000000000000000000000000000
-----Decoded View---------------
Arg [0] : description_ (string): wUSK / USD
Arg [1] : _assetOracle (address): 0xdc888B8c76eF26852B6f6c0008D6E2f29A96Cb50
Arg [2] : _token (address): 0xaF4ce7CD4F8891ecf1799878c3e9A35b8BE57E09
-----Encoded View---------------
5 Constructor Arguments found :
Arg [0] : 0000000000000000000000000000000000000000000000000000000000000060
Arg [1] : 000000000000000000000000dc888b8c76ef26852b6f6c0008d6e2f29a96cb50
Arg [2] : 000000000000000000000000af4ce7cd4f8891ecf1799878c3e9a35b8be57e09
Arg [3] : 000000000000000000000000000000000000000000000000000000000000000a
Arg [4] : 7755534b202f2055534400000000000000000000000000000000000000000000
Loading...
Loading
Loading...
Loading
Multichain Portfolio | 34 Chains
| Chain | Token | Portfolio % | Price | Amount | Value |
|---|
Loading...
Loading
Loading...
Loading
Loading...
Loading
A contract address hosts a smart contract, which is a set of code stored on the blockchain that runs when predetermined conditions are met. Learn more about addresses in our Knowledge Base.