Overview
S Balance
S Value
$0.00More Info
Private Name Tags
ContractCreator
Latest 5 internal transactions
Parent Transaction Hash | Block | From | To | |||
---|---|---|---|---|---|---|
11476245 | 25 hrs ago | Contract Creation | 0 S | |||
11476240 | 25 hrs ago | Contract Creation | 0 S | |||
11476231 | 25 hrs ago | Contract Creation | 0 S | |||
11476227 | 25 hrs ago | Contract Creation | 0 S | |||
11476223 | 25 hrs ago | Contract Creation | 0 S |
Loading...
Loading
Contract Source Code Verified (Exact Match)
Contract Name:
EulerIRMAdaptiveCurveFactory
Compiler Version
v0.8.24+commit.e11b9ed9
Optimization Enabled:
Yes with 20000 runs
Other Settings:
cancun EvmVersion
Contract Source Code (Solidity Standard Json-Input format)
// SPDX-License-Identifier: GPL-2.0-or-later pragma solidity ^0.8.0; import {BaseFactory} from "../BaseFactory/BaseFactory.sol"; import {IRMAdaptiveCurve} from "../IRM/IRMAdaptiveCurve.sol"; /// @title EulerIRMAdaptiveCurveFactory /// @custom:security-contact [email protected] /// @author Euler Labs (https://www.eulerlabs.com/) /// @notice A minimal factory for Adaptive Curve IRMs. contract EulerIRMAdaptiveCurveFactory is BaseFactory { /// @notice Deploy IRMAdaptiveCurve using the Factory. /// @param _TARGET_UTILIZATION The utilization rate targeted by the interest rate model. /// @param _INITIAL_RATE_AT_TARGET The initial interest rate at target utilization. /// @param _MIN_RATE_AT_TARGET The minimum interest rate at target utilization that the model can adjust to. /// @param _MAX_RATE_AT_TARGET The maximum interest rate at target utilization that the model can adjust to. /// @param _CURVE_STEEPNESS The slope of interest rate above target. The line below target has inverse slope. /// @param _ADJUSTMENT_SPEED The speed at which the rate at target utilization is adjusted up or down. /// @return The deployment address. function deploy( int256 _TARGET_UTILIZATION, int256 _INITIAL_RATE_AT_TARGET, int256 _MIN_RATE_AT_TARGET, int256 _MAX_RATE_AT_TARGET, int256 _CURVE_STEEPNESS, int256 _ADJUSTMENT_SPEED ) external returns (address) { // Deploy IRM. IRMAdaptiveCurve irm = new IRMAdaptiveCurve( _TARGET_UTILIZATION, _INITIAL_RATE_AT_TARGET, _MIN_RATE_AT_TARGET, _MAX_RATE_AT_TARGET, _CURVE_STEEPNESS, _ADJUSTMENT_SPEED ); // Store the deployment and return the address. deploymentInfo[address(irm)] = DeploymentInfo(msg.sender, uint96(block.timestamp)); deployments.push(address(irm)); emit ContractDeployed(address(irm), msg.sender, block.timestamp); return address(irm); } }
// SPDX-License-Identifier: GPL-2.0-or-later pragma solidity ^0.8.0; import {IFactory} from "./interfaces/IFactory.sol"; /// @title BaseFactory /// @custom:security-contact [email protected] /// @author Euler Labs (https://www.eulerlabs.com/) /// @notice A minimal factory for deploying various contracts. abstract contract BaseFactory is IFactory { /// @notice Contracts deployed by the factory. mapping(address => DeploymentInfo) internal deploymentInfo; /// @notice An array of addresses of all the contracts deployed by the factory address[] public deployments; /// @inheritdoc IFactory function getDeploymentInfo(address contractAddress) external view returns (address deployer, uint96 deployedAt) { DeploymentInfo memory info = deploymentInfo[contractAddress]; return (info.deployer, info.deployedAt); } /// @inheritdoc IFactory function isValidDeployment(address contractAddress) external view returns (bool) { return deploymentInfo[contractAddress].deployedAt != 0; } /// @inheritdoc IFactory function getDeploymentsListLength() external view returns (uint256) { return deployments.length; } /// @inheritdoc IFactory function getDeploymentsListSlice(uint256 start, uint256 end) external view returns (address[] memory list) { if (end == type(uint256).max) end = deployments.length; if (end < start || end > deployments.length) revert Factory_BadQuery(); list = new address[](end - start); for (uint256 i; i < end - start; ++i) { list[i] = deployments[start + i]; } } }
// SPDX-License-Identifier: MIT // Copyright (c) 2023 Morpho Association pragma solidity ^0.8.0; import {IIRM} from "evk/InterestRateModels/IIRM.sol"; import {ExpLib} from "./lib/ExpLib.sol"; /// @title IRMAdaptiveCurve /// @custom:contact [email protected] /// @author Euler Labs (https://www.eulerlabs.com/). /// @author Adapted from Morpho Labs (https://github.com/morpho-org/morpho-blue-irm/). /// @notice A Linear Kink IRM that adjusts the rate at target utilization based on time spent above/below it. /// @dev This implementation intentionally leaves variables names, units and ExpLib unchanged from original. /// Returned rates are extended to RAY per second to be compatible with the EVK. contract IRMAdaptiveCurve is IIRM { /// @dev Unit for internal precision. int256 internal constant WAD = 1e18; /// @dev Unit for internal precision. int256 internal constant YEAR = int256(365.2425 days); /// @notice The name of the IRM. string public constant name = "IRMAdaptiveCurve"; /// @notice The utilization rate targeted by the model. /// @dev In WAD units. int256 public immutable TARGET_UTILIZATION; /// @notice The initial interest rate at target utilization. /// @dev In WAD per second units. /// When the IRM is initialized for a vault this is the rate at target utilization that is assigned. int256 public immutable INITIAL_RATE_AT_TARGET; /// @notice The minimum interest rate at target utilization that the model can adjust to. /// @dev In WAD per second units. int256 public immutable MIN_RATE_AT_TARGET; /// @notice The maximum interest rate at target utilization that the model can adjust to. /// @dev In WAD per second units. int256 public immutable MAX_RATE_AT_TARGET; /// @notice The steepness of the interest rate line. /// @dev In WAD units. int256 public immutable CURVE_STEEPNESS; /// @notice The speed at which the rate at target is adjusted up or down. /// @dev In WAD per second units. /// For example, with `2e18 / 24 hours` the model will 2x `rateAtTarget` if the vault is fully utilized for a day. int256 public immutable ADJUSTMENT_SPEED; /// @notice Internal cached state of the interest rate model. struct IRState { /// @dev The current rate at target utilization. uint144 rateAtTarget; /// @dev The previous utilization rate of the vault. int64 lastUtilization; /// @dev The timestamp of the last update to the model. uint48 lastUpdate; } /// @notice Get the internal cached state of a vault's irm. mapping(address => IRState) internal irState; error InvalidParams(); /// @notice Deploy IRMAdaptiveCurve. /// @param _TARGET_UTILIZATION The utilization rate targeted by the interest rate model. /// @param _INITIAL_RATE_AT_TARGET The initial interest rate at target utilization. /// @param _MIN_RATE_AT_TARGET The minimum interest rate at target utilization that the model can adjust to. /// @param _MAX_RATE_AT_TARGET The maximum interest rate at target utilization that the model can adjust to. /// @param _CURVE_STEEPNESS The steepness of the interest rate line. /// @param _ADJUSTMENT_SPEED The speed at which the rate at target utilization is adjusted up or down. constructor( int256 _TARGET_UTILIZATION, int256 _INITIAL_RATE_AT_TARGET, int256 _MIN_RATE_AT_TARGET, int256 _MAX_RATE_AT_TARGET, int256 _CURVE_STEEPNESS, int256 _ADJUSTMENT_SPEED ) { // Validate parameters. if (_TARGET_UTILIZATION <= 0 || _TARGET_UTILIZATION > 1e18) { revert InvalidParams(); } if (_INITIAL_RATE_AT_TARGET < _MIN_RATE_AT_TARGET || _INITIAL_RATE_AT_TARGET > _MAX_RATE_AT_TARGET) { revert InvalidParams(); } if (_MIN_RATE_AT_TARGET < 0.001e18 / YEAR || _MIN_RATE_AT_TARGET > 10e18 / YEAR) { revert InvalidParams(); } if (_MAX_RATE_AT_TARGET < 0.001e18 / YEAR || _MAX_RATE_AT_TARGET > 10e18 / YEAR) { revert InvalidParams(); } if (_CURVE_STEEPNESS < 1.01e18 || _CURVE_STEEPNESS > 100e18) { revert InvalidParams(); } if (_ADJUSTMENT_SPEED < 2e18 / YEAR || _ADJUSTMENT_SPEED > 1000e18 / YEAR) { revert InvalidParams(); } TARGET_UTILIZATION = _TARGET_UTILIZATION; INITIAL_RATE_AT_TARGET = _INITIAL_RATE_AT_TARGET; MIN_RATE_AT_TARGET = _MIN_RATE_AT_TARGET; MAX_RATE_AT_TARGET = _MAX_RATE_AT_TARGET; CURVE_STEEPNESS = _CURVE_STEEPNESS; ADJUSTMENT_SPEED = _ADJUSTMENT_SPEED; } /// @inheritdoc IIRM function computeInterestRate(address vault, uint256 cash, uint256 borrows) external returns (uint256) { if (msg.sender != vault) revert E_IRMUpdateUnauthorized(); // Do not update state until the first borrow. if (borrows == 0 && irState[vault].lastUpdate == 0) { return uint256(_curve(INITIAL_RATE_AT_TARGET, _calcErr(0))) * 1e9; } int256 utilization = _calcUtilization(cash, borrows); (uint256 rate, uint256 rateAtTarget) = computeInterestRateInternal(vault, utilization); irState[vault] = IRState(uint144(rateAtTarget), int64(utilization), uint48(block.timestamp)); return rate * 1e9; // Extend rate to RAY/sec for EVK. } /// @inheritdoc IIRM function computeInterestRateView(address vault, uint256 cash, uint256 borrows) external view returns (uint256) { int256 utilization = _calcUtilization(cash, borrows); (uint256 rate,) = computeInterestRateInternal(vault, utilization); return rate * 1e9; // Extend rate to RAY/sec for EVK. } /// @notice Perform computation of the new rate at target without mutating state. /// @param vault Address of the vault to compute the new interest rate for. /// @param cash Amount of assets held directly by the vault. /// @param borrows Amount of assets lent out to borrowers by the vault. /// @return The new rate at target utilization in RAY units. function computeRateAtTargetView(address vault, uint256 cash, uint256 borrows) external view returns (uint256) { int256 utilization = _calcUtilization(cash, borrows); (, uint256 rateAtTarget) = computeInterestRateInternal(vault, utilization); return rateAtTarget * 1e9; // Extend rate to RAY/sec for EVK. } /// @notice Get the timestamp of the last update for a vault. /// @param vault Address of the vault to get the last update timestamp for. /// @return The last update timestamp. function getLastUpdateTimestamp(address vault) external view returns (uint256) { return irState[vault].lastUpdate; } /// @notice Compute the new interest rate and rate at target utilization of a vault. /// @param vault Address of the vault to compute the new interest rate for. /// @return The new interest rate at current utilization. /// @return The new interest rate at target utilization. function computeInterestRateInternal(address vault, int256 utilization) internal view returns (uint256, uint256) { // Calculate normalized distance using previous utilization for curve shifting int256 lastUtilization = irState[vault].lastUpdate == 0 ? utilization : int256(irState[vault].lastUtilization); int256 errOld = _calcErr(lastUtilization); // Calculate normalized distance using current utilization for position on curve int256 errNew = _calcErr(utilization); IRState memory state = irState[vault]; int256 startRateAtTarget = int256(uint256(state.rateAtTarget)); int256 endRateAtTarget; if (startRateAtTarget == 0) { // First interaction. endRateAtTarget = INITIAL_RATE_AT_TARGET; } else { // Use errOld for curve shifting int256 speed = ADJUSTMENT_SPEED * errOld / WAD; // Calculate the adaptation parameter. int256 elapsed = int256(block.timestamp - state.lastUpdate); int256 linearAdaptation = speed * elapsed; if (linearAdaptation == 0) { endRateAtTarget = startRateAtTarget; } else { endRateAtTarget = _newRateAtTarget(startRateAtTarget, linearAdaptation); } } // Use errNew for position on curve to get current interest rate return (uint256(_curve(endRateAtTarget, errNew)), uint256(endRateAtTarget)); } /// @notice Calculate the interest rate according to the linear kink model. /// @param rateAtTarget The current interest rate at target utilization. /// @param err The distance between the current utilization and the target utilization, normalized to `[-1, +1]`. /// @dev rate = ((1-1/C)*err + 1) * rateAtTarget if err < 0 /// (C-1)*err + 1) * rateAtTarget else. /// @return The new interest rate at current utilization. function _curve(int256 rateAtTarget, int256 err) internal view returns (int256) { // Non negative because 1 - 1/C >= 0, C - 1 >= 0. int256 coeff = err < 0 ? WAD - WAD * WAD / CURVE_STEEPNESS : CURVE_STEEPNESS - WAD; // Non negative if rateAtTarget >= 0 because if err < 0, coeff <= 1. return ((coeff * err / WAD) + WAD) * rateAtTarget / WAD; } /// @notice Calculate the new interest rate at target utilization by applying an adaptation. /// @param startRateAtTarget The current interest rate at target utilization. /// @param linearAdaptation The adaptation parameter, used as a power of `e`. /// @dev Applies exponential growth/decay to the current interest rate at target utilization. /// Formula: `rateAtTarget = startRateAtTarget * e^linearAdaptation` bounded to min and max. /// @return The new interest rate at target utilization. function _newRateAtTarget(int256 startRateAtTarget, int256 linearAdaptation) internal view returns (int256) { int256 rateAtTarget = startRateAtTarget * ExpLib.wExp(linearAdaptation) / WAD; if (rateAtTarget < MIN_RATE_AT_TARGET) return MIN_RATE_AT_TARGET; if (rateAtTarget > MAX_RATE_AT_TARGET) return MAX_RATE_AT_TARGET; return rateAtTarget; } /// @notice Calculate the normalized distance between the utilization and target utilization. /// @param utilization The utilization rate. /// @return The normalized distance between the utilization and target utilization. function _calcErr(int256 utilization) internal view returns (int256) { int256 errNormFactor = utilization > TARGET_UTILIZATION ? WAD - TARGET_UTILIZATION : TARGET_UTILIZATION; return (utilization - TARGET_UTILIZATION) * WAD / errNormFactor; } /// @notice Calculate the utilization rate, given cash and borrows from the vault. /// @param cash Amount of assets held directly by the vault. /// @param borrows Amount of assets lent out to borrowers by the vault. /// @return The utilization rate in WAD. function _calcUtilization(uint256 cash, uint256 borrows) internal pure returns (int256) { int256 totalAssets = int256(cash + borrows); if (totalAssets == 0) return 0; return int256(borrows) * WAD / totalAssets; } }
// SPDX-License-Identifier: GPL-2.0-or-later pragma solidity >=0.8.0; /// @title IFactory /// @custom:security-contact [email protected] /// @author Euler Labs (https://www.eulerlabs.com/) /// @notice A minimal factory interface for deploying contracts. interface IFactory { struct DeploymentInfo { /// @notice The sender of the deployment call. address deployer; /// @notice The timestamp when the contract was deployed. uint96 deployedAt; } /// @notice An instance of a contract was deployed. /// @param deployedContract The deployment address of the contract. /// @param deployer The sender of the deployment call. /// @param deployedAt The deployment timestamp of the contract. event ContractDeployed(address indexed deployedContract, address indexed deployer, uint256 deployedAt); /// @notice Error thrown when the query is incorrect. error Factory_BadQuery(); /// @notice Contracts deployed by the factory. function getDeploymentInfo(address contractAddress) external view returns (address deployer, uint96 deployedAt); /// @notice Checks if the deployment at the given address is valid. /// @param contractAddress The address of the contract to check. /// @return True if the deployment is valid, false otherwise. function isValidDeployment(address contractAddress) external view returns (bool); /// @notice Returns the number of contracts deployed by the factory. /// @return The number of deployed contracts. function getDeploymentsListLength() external view returns (uint256); /// @notice Returns a slice of the list of deployments. /// @param start The starting index of the slice. /// @param end The ending index of the slice (exclusive). /// @return list An array of addresses of the deployed contracts in the specified range. function getDeploymentsListSlice(uint256 start, uint256 end) external view returns (address[] memory list); }
// SPDX-License-Identifier: GPL-2.0-or-later pragma solidity >=0.8.0; /// @title IIRM /// @custom:security-contact [email protected] /// @author Euler Labs (https://www.eulerlabs.com/) /// @notice Interface of the interest rate model contracts used by EVault interface IIRM { error E_IRMUpdateUnauthorized(); /// @notice Perform potentially state mutating computation of the new interest rate /// @param vault Address of the vault to compute the new interest rate for /// @param cash Amount of assets held directly by the vault /// @param borrows Amount of assets lent out to borrowers by the vault /// @return Then new interest rate in second percent yield (SPY), scaled by 1e27 function computeInterestRate(address vault, uint256 cash, uint256 borrows) external returns (uint256); /// @notice Perform computation of the new interest rate without mutating state /// @param vault Address of the vault to compute the new interest rate for /// @param cash Amount of assets held directly by the vault /// @param borrows Amount of assets lent out to borrowers by the vault /// @return Then new interest rate in second percent yield (SPY), scaled by 1e27 function computeInterestRateView(address vault, uint256 cash, uint256 borrows) external view returns (uint256); }
// SPDX-License-Identifier: MIT // Copyright (c) 2023 Morpho Association pragma solidity ^0.8.0; /// @title ExpLib /// @custom:contact [email protected] /// @author Adapted from Morpho Labs /// (https://github.com/morpho-org/morpho-blue-irm/blob/a824ce06a53f45f12d0ffedb51abd756896b29fa/src/adaptive-curve-irm/libraries/ExpLib.sol) /// @notice Library to approximate the exponential function. library ExpLib { int256 internal constant WAD = 1e18; /// @dev ln(2). int256 internal constant LN_2_INT = 0.693147180559945309e18; /// @dev ln(1e-18). int256 internal constant LN_WEI_INT = -41.446531673892822312e18; /// @dev Above this bound, `wExp` is clipped to avoid overflowing when multiplied with 1e18. /// @dev This upper bound corresponds to: ln(type(int256).max / 1e36) (scaled by WAD, floored). int256 internal constant WEXP_UPPER_BOUND = 93.859467695000404319e18; /// @dev The value of wExp(`WEXP_UPPER_BOUND`). int256 internal constant WEXP_UPPER_VALUE = 57716089161558943949701069502944508345128.422502756744429568e18; /// @dev Returns an approximation of exp. function wExp(int256 x) internal pure returns (int256) { unchecked { // If x < ln(1e-18) then exp(x) < 1e-18 so it is rounded to zero. if (x < LN_WEI_INT) return 0; // `wExp` is clipped to avoid overflowing when multiplied with 1e18. if (x >= WEXP_UPPER_BOUND) return WEXP_UPPER_VALUE; // Decompose x as x = q * ln(2) + r with q an integer and -ln(2)/2 <= r <= ln(2)/2. // q = x / ln(2) rounded half toward zero. int256 roundingAdjustment = (x < 0) ? -(LN_2_INT / 2) : (LN_2_INT / 2); // Safe unchecked because x is bounded. int256 q = (x + roundingAdjustment) / LN_2_INT; // Safe unchecked because |q * ln(2) - x| <= ln(2)/2. int256 r = x - q * LN_2_INT; // Compute e^r with a 2nd-order Taylor polynomial. // Safe unchecked because |r| < 1e18. int256 expR = WAD + r + (r * r) / WAD / 2; // Return e^x = 2^q * e^r. if (q >= 0) return expR << uint256(q); else return expR >> uint256(-q); } } }
{ "remappings": [ "lib/euler-price-oracle:@openzeppelin/contracts/=lib/euler-price-oracle/lib/openzeppelin-contracts/contracts/", "lib/euler-earn:@openzeppelin/=lib/euler-earn/lib/openzeppelin-contracts/", "lib/euler-earn:@openzeppelin-upgradeable/=lib/euler-earn/lib/openzeppelin-contracts-upgradeable/contracts/", "lib/euler-earn:ethereum-vault-connector/=lib/euler-earn/lib/ethereum-vault-connector/src/", "lib/layerzero-devtools/packages/oft-evm/contracts:@openzeppelin/contracts-upgradeable/=lib/openzeppelin-contracts/contracts/", "lib/layerzero-devtools/packages/oft-evm-upgradeable/contracts:@openzeppelin/contracts-upgradeable/=lib/openzeppelin-contracts-upgradeable/contracts/", "lib/layerzero-devtools/packages/oapp-evm-upgradeable/contracts:@openzeppelin/contracts-upgradeable/=lib/openzeppelin-contracts-upgradeable/contracts/", "@layerzerolabs/oft-evm/=lib/layerzero-devtools/packages/oft-evm/", "@layerzerolabs/oapp-evm/=lib/layerzero-devtools/packages/oapp-evm/", "@layerzerolabs/oapp-evm-upgradeable/=lib/layerzero-devtools/packages/oapp-evm-upgradeable/", "@layerzerolabs/lz-evm-protocol-v2/=lib/layerzero-v2/packages/layerzero-v2/evm/protocol/", "@layerzerolabs/lz-evm-messagelib-v2/=lib/layerzero-v2/packages/layerzero-v2/evm/messagelib/", "@layerzerolabs/lz-evm-oapp-v2/=lib/layerzero-v2/packages/layerzero-v2/evm/oapp/", "openzeppelin-contracts/=lib/openzeppelin-contracts/contracts/", "openzeppelin-contracts-upgradeable/=lib/openzeppelin-contracts-upgradeable/contracts/", "ethereum-vault-connector/=lib/ethereum-vault-connector/src/", "evc/=lib/ethereum-vault-connector/src/", "evk/=lib/euler-vault-kit/src/", "evk-test/=lib/euler-vault-kit/test/", "euler-price-oracle/=lib/euler-price-oracle/src/", "euler-price-oracle-test/=lib/euler-price-oracle/test/", "fee-flow/=lib/fee-flow/src/", "reward-streams/=lib/reward-streams/src/", "@openzeppelin/=lib/openzeppelin-contracts/contracts/", "euler-earn/=lib/euler-earn/src/", "layerzero/oft-evm/=lib/layerzero-devtools/packages/oft-evm/contracts/", "layerzero/oft-evm-upgradeable/=lib/layerzero-devtools/packages/oft-evm-upgradeable/contracts/", "solidity-bytes-utils/=lib/solidity-bytes-utils/", "@openzeppelin-upgradeable/=lib/euler-earn/lib/openzeppelin-contracts-upgradeable/contracts/", "@openzeppelin/contracts-upgradeable/=lib/openzeppelin-contracts-upgradeable/contracts/", "@openzeppelin/contracts/=lib/openzeppelin-contracts/contracts/", "@pendle/core-v2/=lib/euler-price-oracle/lib/pendle-core-v2-public/contracts/", "@pyth/=lib/euler-price-oracle/lib/pyth-sdk-solidity/", "@redstone/evm-connector/=lib/euler-price-oracle/lib/redstone-oracles-monorepo/packages/evm-connector/contracts/", "@solady/=lib/euler-price-oracle/lib/solady/src/", "@uniswap/v3-core/=lib/euler-price-oracle/lib/v3-core/", "@uniswap/v3-periphery/=lib/euler-price-oracle/lib/v3-periphery/", "ERC4626/=lib/euler-earn/lib/properties/lib/ERC4626/contracts/", "crytic-properties/=lib/euler-earn/lib/properties/contracts/", "ds-test/=lib/ethereum-vault-connector/lib/forge-std/lib/ds-test/src/", "erc4626-tests/=lib/openzeppelin-contracts-upgradeable/lib/erc4626-tests/", "euler-vault-kit/=lib/euler-vault-kit/", "forge-gas-snapshot/=lib/euler-vault-kit/lib/permit2/lib/forge-gas-snapshot/src/", "forge-std/=lib/forge-std/src/", "halmos-cheatcodes/=lib/openzeppelin-contracts-upgradeable/lib/halmos-cheatcodes/src/", "layerzero-devtools/=lib/layerzero-devtools/packages/toolbox-foundry/src/", "layerzero-v2/=lib/layerzero-v2/", "openzeppelin/=lib/ethereum-vault-connector/lib/openzeppelin-contracts/contracts/", "pendle-core-v2-public/=lib/euler-price-oracle/lib/pendle-core-v2-public/contracts/", "permit2/=lib/euler-vault-kit/lib/permit2/", "properties/=lib/euler-earn/lib/properties/contracts/", "pyth-sdk-solidity/=lib/euler-price-oracle/lib/pyth-sdk-solidity/", "redstone-oracles-monorepo/=lib/euler-price-oracle/lib/", "solady/=lib/euler-price-oracle/lib/solady/src/", "solmate/=lib/fee-flow/lib/solmate/src/", "v3-core/=lib/euler-price-oracle/lib/v3-core/contracts/", "v3-periphery/=lib/euler-price-oracle/lib/v3-periphery/contracts/" ], "optimizer": { "enabled": true, "runs": 20000 }, "metadata": { "useLiteralContent": false, "bytecodeHash": "ipfs", "appendCBOR": true }, "outputSelection": { "*": { "*": [ "evm.bytecode", "evm.deployedBytecode", "devdoc", "userdoc", "metadata", "abi" ] } }, "evmVersion": "cancun", "viaIR": false, "libraries": {} }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
Contract ABI
API[{"inputs":[],"name":"Factory_BadQuery","type":"error"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"deployedContract","type":"address"},{"indexed":true,"internalType":"address","name":"deployer","type":"address"},{"indexed":false,"internalType":"uint256","name":"deployedAt","type":"uint256"}],"name":"ContractDeployed","type":"event"},{"inputs":[{"internalType":"int256","name":"_TARGET_UTILIZATION","type":"int256"},{"internalType":"int256","name":"_INITIAL_RATE_AT_TARGET","type":"int256"},{"internalType":"int256","name":"_MIN_RATE_AT_TARGET","type":"int256"},{"internalType":"int256","name":"_MAX_RATE_AT_TARGET","type":"int256"},{"internalType":"int256","name":"_CURVE_STEEPNESS","type":"int256"},{"internalType":"int256","name":"_ADJUSTMENT_SPEED","type":"int256"}],"name":"deploy","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"deployments","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"contractAddress","type":"address"}],"name":"getDeploymentInfo","outputs":[{"internalType":"address","name":"deployer","type":"address"},{"internalType":"uint96","name":"deployedAt","type":"uint96"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getDeploymentsListLength","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"start","type":"uint256"},{"internalType":"uint256","name":"end","type":"uint256"}],"name":"getDeploymentsListSlice","outputs":[{"internalType":"address[]","name":"list","type":"address[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"contractAddress","type":"address"}],"name":"isValidDeployment","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"}]
Contract Creation Code
608060405234801561000f575f80fd5b506117c48061001d5f395ff3fe608060405234801561000f575f80fd5b506004361061006f575f3560e01c80636ee0787a1161004d5780636ee0787a1461016e578063dd1faaef146101db578063e536913d146101ee575f80fd5b806306609bbe146100735780633fc756f8146100b05780636aebd5831461015d575b5f80fd5b610086610081366004610512565b61020e565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020015b60405180910390f35b6101246100be366004610529565b73ffffffffffffffffffffffffffffffffffffffff9081165f9081526020818152604091829020825180840190935254928316808352740100000000000000000000000000000000000000009093046bffffffffffffffffffffffff1691018190529091565b6040805173ffffffffffffffffffffffffffffffffffffffff90931683526bffffffffffffffffffffffff9091166020830152016100a7565b6001546040519081526020016100a7565b6101cb61017c366004610529565b73ffffffffffffffffffffffffffffffffffffffff165f908152602081905260409020547401000000000000000000000000000000000000000090046bffffffffffffffffffffffff16151590565b60405190151581526020016100a7565b6100866101e9366004610563565b610243565b6102016101fc3660046105a2565b6103a5565b6040516100a791906105c2565b6001818154811061021d575f80fd5b5f9182526020909120015473ffffffffffffffffffffffffffffffffffffffff16905081565b5f8087878787878760405161025790610505565b958652602086019490945260408501929092526060840152608083015260a082015260c001604051809103905ff080158015610295573d5f803e3d5ffd5b50604080518082018252338082526bffffffffffffffffffffffff42818116602080860191825273ffffffffffffffffffffffffffffffffffffffff8089165f8181529283905288832097519351909516740100000000000000000000000000000000000000000292169190911790945560018054808201825594527fb10e2d527612073b26eecdfd717e6a320cf44b4afac2b0732d9fcbe2b7fa0cf690930180547fffffffffffffffffffffffff000000000000000000000000000000000000000016821790559251939450927fac4ce915ef22753b636e57aac5ae5fdd9d13d782ae5bf6dbcda15e29f95386c1916103929190815260200190565b60405180910390a3979650505050505050565b60607fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82036103d45760015491505b828210806103e3575060015482115b1561041a576040517f4e32a13200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6104248383610648565b67ffffffffffffffff81111561043c5761043c610661565b604051908082528060200260200182016040528015610465578160200160208202803683370190505b5090505f5b6104748484610648565b8110156104fe576001610487828661068e565b81548110610497576104976106a1565b905f5260205f20015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff168282815181106104d1576104d16106a1565b73ffffffffffffffffffffffffffffffffffffffff9092166020928302919091019091015260010161046a565b5092915050565b6110c0806106cf83390190565b5f60208284031215610522575f80fd5b5035919050565b5f60208284031215610539575f80fd5b813573ffffffffffffffffffffffffffffffffffffffff8116811461055c575f80fd5b9392505050565b5f805f805f8060c08789031215610578575f80fd5b505084359660208601359650604086013595606081013595506080810135945060a0013592509050565b5f80604083850312156105b3575f80fd5b50508035926020909101359150565b602080825282518282018190525f9190848201906040850190845b8181101561060f57835173ffffffffffffffffffffffffffffffffffffffff16835292840192918401916001016105dd565b50909695505050505050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b8181038181111561065b5761065b61061b565b92915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b8082018082111561065b5761065b61061b565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffdfe61014060405234801562000011575f80fd5b50604051620010c0380380620010c0833981016040819052620000349162000208565b5f861315806200004b5750670de0b6b3a764000086135b156200006a57604051635435b28960e11b815260040160405180910390fd5b838512806200007857508285135b156200009757604051635435b28960e11b815260040160405180910390fd5b620000ae6301e1855866038d7ea4c680006200024f565b841280620000d25750620000cf6301e18558678ac7230489e800006200024f565b84135b15620000f157604051635435b28960e11b815260040160405180910390fd5b620001086301e1855866038d7ea4c680006200024f565b8312806200012c5750620001296301e18558678ac7230489e800006200024f565b83135b156200014b57604051635435b28960e11b815260040160405180910390fd5b670e043da6172500008212806200016a575068056bc75e2d6310000082135b156200018957604051635435b28960e11b815260040160405180910390fd5b620001a16301e18558671bc16d674ec800006200024f565b811280620001c65750620001c36301e18558683635c9adc5dea000006200024f565b81135b15620001e557604051635435b28960e11b815260040160405180910390fd5b60809590955260a09390935260c09190915260e052610100526101205262000295565b5f805f805f8060c087890312156200021e575f80fd5b865195506020870151945060408701519350606087015192506080870151915060a087015190509295509295509295565b5f826200026a57634e487b7160e01b5f52601260045260245ffd5b600160ff1b82145f19841416156200029057634e487b7160e01b5f52601160045260245ffd5b500590565b60805160a05160c05160e0516101005161012051610d89620003375f395f81816101f8015261070d01525f81816102800152818161088001526108ab01525f81816101d1015281816109ab01526109d301525f818160cd0152818161095a015261098201525f8181610259015281816103b301526106d901525f818161021f015281816107a2015281816107c9015281816107f201526108300152610d895ff3fe608060405234801561000f575f80fd5b50600436106100c4575f3560e01c806358f5cbad1161007d578063bca02c1311610058578063bca02c1314610241578063d91042b514610254578063fc4c2d541461027b575f80fd5b806358f5cbad146101cc5780635a92fa85146101f35780639a1a14d91461021a575f80fd5b80631a351d62116100ad5780631a351d621461014b5780632e34c872146101a65780634395b4fb146101b9575f80fd5b8063019ec38b146100c857806306fdde0314610102575b5f80fd5b6100ef7f000000000000000000000000000000000000000000000000000000000000000081565b6040519081526020015b60405180910390f35b61013e6040518060400160405280601081526020017f49524d416461707469766543757276650000000000000000000000000000000081525081565b6040516100f99190610aea565b6100ef610159366004610b7c565b73ffffffffffffffffffffffffffffffffffffffff165f908152602081905260409020547a010000000000000000000000000000000000000000000000000000900465ffffffffffff1690565b6100ef6101b4366004610b95565b6102a2565b6100ef6101c7366004610b95565b6102d8565b6100ef7f000000000000000000000000000000000000000000000000000000000000000081565b6100ef7f000000000000000000000000000000000000000000000000000000000000000081565b6100ef7f000000000000000000000000000000000000000000000000000000000000000081565b6100ef61024f366004610b95565b610303565b6100ef7f000000000000000000000000000000000000000000000000000000000000000081565b6100ef7f000000000000000000000000000000000000000000000000000000000000000081565b5f806102ae8484610541565b90505f6102bb8683610586565b5090506102cc81633b9aca00610bf2565b925050505b9392505050565b5f806102e48484610541565b90505f6102f18683610586565b91506102cc905081633b9aca00610bf2565b5f3373ffffffffffffffffffffffffffffffffffffffff851614610353576040517f35a4399400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b811580156103a9575073ffffffffffffffffffffffffffffffffffffffff84165f908152602081905260409020547a010000000000000000000000000000000000000000000000000000900465ffffffffffff16155b156103f5576103e07f00000000000000000000000000000000000000000000000000000000000000006103db5f61079e565b610869565b6103ee90633b9aca00610bf2565b90506102d1565b5f6104008484610541565b90505f8061040e8784610586565b9150915060405180606001604052808271ffffffffffffffffffffffffffffffffffff1681526020018460070b81526020014265ffffffffffff168152505f808973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f820151815f015f6101000a81548171ffffffffffffffffffffffffffffffffffff021916908371ffffffffffffffffffffffffffffffffffff1602179055506020820151815f0160126101000a81548167ffffffffffffffff021916908360070b67ffffffffffffffff1602179055506040820151815f01601a6101000a81548165ffffffffffff021916908365ffffffffffff16021790555090505081633b9aca006105369190610bf2565b979650505050505050565b5f8061054d8385610c09565b9050805f0361055f575f915050610580565b80610572670de0b6b3a764000085610c1c565b61057c9190610c67565b9150505b92915050565b73ffffffffffffffffffffffffffffffffffffffff82165f90815260208190526040812054819081907a010000000000000000000000000000000000000000000000000000900465ffffffffffff161561061d5773ffffffffffffffffffffffffffffffffffffffff85165f908152602081905260409020547201000000000000000000000000000000000000900460070b61061f565b835b90505f61062b8261079e565b90505f6106378661079e565b73ffffffffffffffffffffffffffffffffffffffff88165f908152602081815260408083208151606081018352905471ffffffffffffffffffffffffffffffffffff81168083527201000000000000000000000000000000000000820460070b948301949094527a010000000000000000000000000000000000000000000000000000900465ffffffffffff1691810191909152929350908181036106fd57507f0000000000000000000000000000000000000000000000000000000000000000610785565b5f670de0b6b3a7640000610731877f0000000000000000000000000000000000000000000000000000000000000000610c1c565b61073b9190610c67565b90505f846040015165ffffffffffff16426107569190610cf3565b90505f6107638284610c1c565b9050805f0361077457849350610781565b61077e858261092e565b93505b5050505b61078f8185610869565b9a909950975050505050505050565b5f807f000000000000000000000000000000000000000000000000000000000000000083136107ed577f000000000000000000000000000000000000000000000000000000000000000061081f565b61081f7f0000000000000000000000000000000000000000000000000000000000000000670de0b6b3a7640000610d06565b905080670de0b6b3a76400006108557f000000000000000000000000000000000000000000000000000000000000000086610d06565b61085f9190610c1c565b6102d19190610c67565b5f805f83126108a9576108a4670de0b6b3a76400007f0000000000000000000000000000000000000000000000000000000000000000610d06565b6108f8565b7f00000000000000000000000000000000000000000000000000000000000000006108dc670de0b6b3a764000080610c1c565b6108e69190610c67565b6108f890670de0b6b3a7640000610d06565b9050670de0b6b3a76400008481806109108786610c1c565b61091a9190610c67565b6109249190610d2c565b6105729190610c1c565b5f80670de0b6b3a7640000610942846109fa565b61094c9086610c1c565b6109569190610c67565b90507f00000000000000000000000000000000000000000000000000000000000000008112156109a9577f0000000000000000000000000000000000000000000000000000000000000000915050610580565b7f00000000000000000000000000000000000000000000000000000000000000008113156102d1577f0000000000000000000000000000000000000000000000000000000000000000915050610580565b5f7ffffffffffffffffffffffffffffffffffffffffffffffffdc0d0570925a462d8821215610a2a57505f919050565b6805168fd0946fc0415f8212610a5a5750780931d81650c7d88b8000000000000000000000000000000000919050565b5f808312610a70576704cf46d8192b672e610a92565b7ffffffffffffffffffffffffffffffffffffffffffffffffffb30b927e6d498d25b905067099e8db03256ce5d83820181900590810284035f6002670de0b6b3a7640000838002050582670de0b6b3a7640000010190505f8312610ad95790911b949350505050565b825f0381901d945050505050919050565b5f602080835283518060208501525f5b81811015610b1657858101830151858201604001528201610afa565b505f6040828601015260407fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f8301168501019250505092915050565b803573ffffffffffffffffffffffffffffffffffffffff81168114610b77575f80fd5b919050565b5f60208284031215610b8c575f80fd5b6102d182610b54565b5f805f60608486031215610ba7575f80fd5b610bb084610b54565b95602085013595506040909401359392505050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b808202811582820484141761058057610580610bc5565b8082018082111561058057610580610bc5565b8082025f82127f800000000000000000000000000000000000000000000000000000000000000084141615610c5357610c53610bc5565b818105831482151761058057610580610bc5565b5f82610c9a577f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff83147f800000000000000000000000000000000000000000000000000000000000000083141615610cee57610cee610bc5565b500590565b8181038181111561058057610580610bc5565b8181035f831280158383131683831282161715610d2557610d25610bc5565b5092915050565b8082018281125f831280158216821582161715610d4b57610d4b610bc5565b50509291505056fea26469706673582212205ab84ff6cf39d2aeb60240d99cbcc9d2d9b0330de02a90a6933d6d20f71f490b64736f6c63430008180033a26469706673582212205b1778f66092619e1dbc878c1e5abb4f38b20faff52ecc04a931597f0f3fd2d764736f6c63430008180033
Deployed Bytecode
0x608060405234801561000f575f80fd5b506004361061006f575f3560e01c80636ee0787a1161004d5780636ee0787a1461016e578063dd1faaef146101db578063e536913d146101ee575f80fd5b806306609bbe146100735780633fc756f8146100b05780636aebd5831461015d575b5f80fd5b610086610081366004610512565b61020e565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020015b60405180910390f35b6101246100be366004610529565b73ffffffffffffffffffffffffffffffffffffffff9081165f9081526020818152604091829020825180840190935254928316808352740100000000000000000000000000000000000000009093046bffffffffffffffffffffffff1691018190529091565b6040805173ffffffffffffffffffffffffffffffffffffffff90931683526bffffffffffffffffffffffff9091166020830152016100a7565b6001546040519081526020016100a7565b6101cb61017c366004610529565b73ffffffffffffffffffffffffffffffffffffffff165f908152602081905260409020547401000000000000000000000000000000000000000090046bffffffffffffffffffffffff16151590565b60405190151581526020016100a7565b6100866101e9366004610563565b610243565b6102016101fc3660046105a2565b6103a5565b6040516100a791906105c2565b6001818154811061021d575f80fd5b5f9182526020909120015473ffffffffffffffffffffffffffffffffffffffff16905081565b5f8087878787878760405161025790610505565b958652602086019490945260408501929092526060840152608083015260a082015260c001604051809103905ff080158015610295573d5f803e3d5ffd5b50604080518082018252338082526bffffffffffffffffffffffff42818116602080860191825273ffffffffffffffffffffffffffffffffffffffff8089165f8181529283905288832097519351909516740100000000000000000000000000000000000000000292169190911790945560018054808201825594527fb10e2d527612073b26eecdfd717e6a320cf44b4afac2b0732d9fcbe2b7fa0cf690930180547fffffffffffffffffffffffff000000000000000000000000000000000000000016821790559251939450927fac4ce915ef22753b636e57aac5ae5fdd9d13d782ae5bf6dbcda15e29f95386c1916103929190815260200190565b60405180910390a3979650505050505050565b60607fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82036103d45760015491505b828210806103e3575060015482115b1561041a576040517f4e32a13200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6104248383610648565b67ffffffffffffffff81111561043c5761043c610661565b604051908082528060200260200182016040528015610465578160200160208202803683370190505b5090505f5b6104748484610648565b8110156104fe576001610487828661068e565b81548110610497576104976106a1565b905f5260205f20015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff168282815181106104d1576104d16106a1565b73ffffffffffffffffffffffffffffffffffffffff9092166020928302919091019091015260010161046a565b5092915050565b6110c0806106cf83390190565b5f60208284031215610522575f80fd5b5035919050565b5f60208284031215610539575f80fd5b813573ffffffffffffffffffffffffffffffffffffffff8116811461055c575f80fd5b9392505050565b5f805f805f8060c08789031215610578575f80fd5b505084359660208601359650604086013595606081013595506080810135945060a0013592509050565b5f80604083850312156105b3575f80fd5b50508035926020909101359150565b602080825282518282018190525f9190848201906040850190845b8181101561060f57835173ffffffffffffffffffffffffffffffffffffffff16835292840192918401916001016105dd565b50909695505050505050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b8181038181111561065b5761065b61061b565b92915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b8082018082111561065b5761065b61061b565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffdfe61014060405234801562000011575f80fd5b50604051620010c0380380620010c0833981016040819052620000349162000208565b5f861315806200004b5750670de0b6b3a764000086135b156200006a57604051635435b28960e11b815260040160405180910390fd5b838512806200007857508285135b156200009757604051635435b28960e11b815260040160405180910390fd5b620000ae6301e1855866038d7ea4c680006200024f565b841280620000d25750620000cf6301e18558678ac7230489e800006200024f565b84135b15620000f157604051635435b28960e11b815260040160405180910390fd5b620001086301e1855866038d7ea4c680006200024f565b8312806200012c5750620001296301e18558678ac7230489e800006200024f565b83135b156200014b57604051635435b28960e11b815260040160405180910390fd5b670e043da6172500008212806200016a575068056bc75e2d6310000082135b156200018957604051635435b28960e11b815260040160405180910390fd5b620001a16301e18558671bc16d674ec800006200024f565b811280620001c65750620001c36301e18558683635c9adc5dea000006200024f565b81135b15620001e557604051635435b28960e11b815260040160405180910390fd5b60809590955260a09390935260c09190915260e052610100526101205262000295565b5f805f805f8060c087890312156200021e575f80fd5b865195506020870151945060408701519350606087015192506080870151915060a087015190509295509295509295565b5f826200026a57634e487b7160e01b5f52601260045260245ffd5b600160ff1b82145f19841416156200029057634e487b7160e01b5f52601160045260245ffd5b500590565b60805160a05160c05160e0516101005161012051610d89620003375f395f81816101f8015261070d01525f81816102800152818161088001526108ab01525f81816101d1015281816109ab01526109d301525f818160cd0152818161095a015261098201525f8181610259015281816103b301526106d901525f818161021f015281816107a2015281816107c9015281816107f201526108300152610d895ff3fe608060405234801561000f575f80fd5b50600436106100c4575f3560e01c806358f5cbad1161007d578063bca02c1311610058578063bca02c1314610241578063d91042b514610254578063fc4c2d541461027b575f80fd5b806358f5cbad146101cc5780635a92fa85146101f35780639a1a14d91461021a575f80fd5b80631a351d62116100ad5780631a351d621461014b5780632e34c872146101a65780634395b4fb146101b9575f80fd5b8063019ec38b146100c857806306fdde0314610102575b5f80fd5b6100ef7f000000000000000000000000000000000000000000000000000000000000000081565b6040519081526020015b60405180910390f35b61013e6040518060400160405280601081526020017f49524d416461707469766543757276650000000000000000000000000000000081525081565b6040516100f99190610aea565b6100ef610159366004610b7c565b73ffffffffffffffffffffffffffffffffffffffff165f908152602081905260409020547a010000000000000000000000000000000000000000000000000000900465ffffffffffff1690565b6100ef6101b4366004610b95565b6102a2565b6100ef6101c7366004610b95565b6102d8565b6100ef7f000000000000000000000000000000000000000000000000000000000000000081565b6100ef7f000000000000000000000000000000000000000000000000000000000000000081565b6100ef7f000000000000000000000000000000000000000000000000000000000000000081565b6100ef61024f366004610b95565b610303565b6100ef7f000000000000000000000000000000000000000000000000000000000000000081565b6100ef7f000000000000000000000000000000000000000000000000000000000000000081565b5f806102ae8484610541565b90505f6102bb8683610586565b5090506102cc81633b9aca00610bf2565b925050505b9392505050565b5f806102e48484610541565b90505f6102f18683610586565b91506102cc905081633b9aca00610bf2565b5f3373ffffffffffffffffffffffffffffffffffffffff851614610353576040517f35a4399400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b811580156103a9575073ffffffffffffffffffffffffffffffffffffffff84165f908152602081905260409020547a010000000000000000000000000000000000000000000000000000900465ffffffffffff16155b156103f5576103e07f00000000000000000000000000000000000000000000000000000000000000006103db5f61079e565b610869565b6103ee90633b9aca00610bf2565b90506102d1565b5f6104008484610541565b90505f8061040e8784610586565b9150915060405180606001604052808271ffffffffffffffffffffffffffffffffffff1681526020018460070b81526020014265ffffffffffff168152505f808973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f820151815f015f6101000a81548171ffffffffffffffffffffffffffffffffffff021916908371ffffffffffffffffffffffffffffffffffff1602179055506020820151815f0160126101000a81548167ffffffffffffffff021916908360070b67ffffffffffffffff1602179055506040820151815f01601a6101000a81548165ffffffffffff021916908365ffffffffffff16021790555090505081633b9aca006105369190610bf2565b979650505050505050565b5f8061054d8385610c09565b9050805f0361055f575f915050610580565b80610572670de0b6b3a764000085610c1c565b61057c9190610c67565b9150505b92915050565b73ffffffffffffffffffffffffffffffffffffffff82165f90815260208190526040812054819081907a010000000000000000000000000000000000000000000000000000900465ffffffffffff161561061d5773ffffffffffffffffffffffffffffffffffffffff85165f908152602081905260409020547201000000000000000000000000000000000000900460070b61061f565b835b90505f61062b8261079e565b90505f6106378661079e565b73ffffffffffffffffffffffffffffffffffffffff88165f908152602081815260408083208151606081018352905471ffffffffffffffffffffffffffffffffffff81168083527201000000000000000000000000000000000000820460070b948301949094527a010000000000000000000000000000000000000000000000000000900465ffffffffffff1691810191909152929350908181036106fd57507f0000000000000000000000000000000000000000000000000000000000000000610785565b5f670de0b6b3a7640000610731877f0000000000000000000000000000000000000000000000000000000000000000610c1c565b61073b9190610c67565b90505f846040015165ffffffffffff16426107569190610cf3565b90505f6107638284610c1c565b9050805f0361077457849350610781565b61077e858261092e565b93505b5050505b61078f8185610869565b9a909950975050505050505050565b5f807f000000000000000000000000000000000000000000000000000000000000000083136107ed577f000000000000000000000000000000000000000000000000000000000000000061081f565b61081f7f0000000000000000000000000000000000000000000000000000000000000000670de0b6b3a7640000610d06565b905080670de0b6b3a76400006108557f000000000000000000000000000000000000000000000000000000000000000086610d06565b61085f9190610c1c565b6102d19190610c67565b5f805f83126108a9576108a4670de0b6b3a76400007f0000000000000000000000000000000000000000000000000000000000000000610d06565b6108f8565b7f00000000000000000000000000000000000000000000000000000000000000006108dc670de0b6b3a764000080610c1c565b6108e69190610c67565b6108f890670de0b6b3a7640000610d06565b9050670de0b6b3a76400008481806109108786610c1c565b61091a9190610c67565b6109249190610d2c565b6105729190610c1c565b5f80670de0b6b3a7640000610942846109fa565b61094c9086610c1c565b6109569190610c67565b90507f00000000000000000000000000000000000000000000000000000000000000008112156109a9577f0000000000000000000000000000000000000000000000000000000000000000915050610580565b7f00000000000000000000000000000000000000000000000000000000000000008113156102d1577f0000000000000000000000000000000000000000000000000000000000000000915050610580565b5f7ffffffffffffffffffffffffffffffffffffffffffffffffdc0d0570925a462d8821215610a2a57505f919050565b6805168fd0946fc0415f8212610a5a5750780931d81650c7d88b8000000000000000000000000000000000919050565b5f808312610a70576704cf46d8192b672e610a92565b7ffffffffffffffffffffffffffffffffffffffffffffffffffb30b927e6d498d25b905067099e8db03256ce5d83820181900590810284035f6002670de0b6b3a7640000838002050582670de0b6b3a7640000010190505f8312610ad95790911b949350505050565b825f0381901d945050505050919050565b5f602080835283518060208501525f5b81811015610b1657858101830151858201604001528201610afa565b505f6040828601015260407fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f8301168501019250505092915050565b803573ffffffffffffffffffffffffffffffffffffffff81168114610b77575f80fd5b919050565b5f60208284031215610b8c575f80fd5b6102d182610b54565b5f805f60608486031215610ba7575f80fd5b610bb084610b54565b95602085013595506040909401359392505050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b808202811582820484141761058057610580610bc5565b8082018082111561058057610580610bc5565b8082025f82127f800000000000000000000000000000000000000000000000000000000000000084141615610c5357610c53610bc5565b818105831482151761058057610580610bc5565b5f82610c9a577f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff83147f800000000000000000000000000000000000000000000000000000000000000083141615610cee57610cee610bc5565b500590565b8181038181111561058057610580610bc5565b8181035f831280158383131683831282161715610d2557610d25610bc5565b5092915050565b8082018281125f831280158216821582161715610d4b57610d4b610bc5565b50509291505056fea26469706673582212205ab84ff6cf39d2aeb60240d99cbcc9d2d9b0330de02a90a6933d6d20f71f490b64736f6c63430008180033a26469706673582212205b1778f66092619e1dbc878c1e5abb4f38b20faff52ecc04a931597f0f3fd2d764736f6c63430008180033
Loading...
Loading
Loading...
Loading
Multichain Portfolio | 31 Chains
Chain | Token | Portfolio % | Price | Amount | Value |
---|
[ 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.