Overview
S Balance
0 S
S Value
$0.00More Info
Private Name Tags
ContractCreator
Latest 5 internal transactions
Parent Transaction Hash | Block | From | To | |||
---|---|---|---|---|---|---|
5336083 | 5 days ago | Contract Creation | 0 S | |||
5336081 | 5 days ago | Contract Creation | 0 S | |||
5336077 | 5 days ago | Contract Creation | 0 S | |||
5336074 | 5 days ago | Contract Creation | 0 S | |||
5336072 | 5 days 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(); int256 utilization = _calcUtilization(cash, borrows); // If this is the first call then use the current utilization instead of the lastUtilization from storage. int256 lastUtilization = irState[vault].lastUpdate == 0 ? utilization : irState[vault].lastUtilization; (uint256 rate, uint256 rateAtTarget) = computeInterestRateInternal(vault, lastUtilization); 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 the normalized distance between current utilization and target utilization. // `err` is normalized to [-1, +1] where -1 is 0% util, 0 is at target and +1 is 100% util. int256 errNormFactor = utilization > TARGET_UTILIZATION ? WAD - TARGET_UTILIZATION : TARGET_UTILIZATION; int256 err = (utilization - TARGET_UTILIZATION) * WAD / errNormFactor; IRState memory state = irState[vault]; int256 startRateAtTarget = int256(uint256(state.rateAtTarget)); int256 endRateAtTarget; if (startRateAtTarget == 0) { // First interaction. endRateAtTarget = INITIAL_RATE_AT_TARGET; } else { // The speed is assumed constant between two updates, but it is in fact not constant because of interest. // So the rate is always underestimated. int256 speed = ADJUSTMENT_SPEED * err / 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); } } return (uint256(_curve(endRateAtTarget, err)), 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 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/native-token-transfers/evm:openzeppelin-contracts/contracts/=lib/native-token-transfers/evm/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/", "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/", "native-token-transfers/=lib/native-token-transfers/evm/src/", "@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/", "solidity-bytes-utils/=lib/native-token-transfers/evm/lib/solidity-bytes-utils/contracts/", "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/", "wormhole-solidity-sdk/=lib/native-token-transfers/evm/lib/wormhole-solidity-sdk/src/" ], "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
[{"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
608060405234801561000f575f80fd5b5061170a8061001d5f395ff3fe608060405234801561000f575f80fd5b506004361061006f575f3560e01c80636ee0787a1161004d5780636ee0787a1461016e578063dd1faaef146101db578063e536913d146101ee575f80fd5b806306609bbe146100735780633fc756f8146100b05780636aebd5831461015d575b5f80fd5b610086610081366004610512565b61020e565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020015b60405180910390f35b6101246100be366004610529565b73ffffffffffffffffffffffffffffffffffffffff9081165f9081526020818152604091829020825180840190935254928316808352740100000000000000000000000000000000000000009093046bffffffffffffffffffffffff1691018190529091565b6040805173ffffffffffffffffffffffffffffffffffffffff90931683526bffffffffffffffffffffffff9091166020830152016100a7565b6001546040519081526020016100a7565b6101cb61017c366004610529565b73ffffffffffffffffffffffffffffffffffffffff165f908152602081905260409020547401000000000000000000000000000000000000000090046bffffffffffffffffffffffff16151590565b60405190151581526020016100a7565b6100866101e9366004610563565b610243565b6102016101fc3660046105a2565b6103a5565b6040516100a791906105c2565b6001818154811061021d575f80fd5b5f9182526020909120015473ffffffffffffffffffffffffffffffffffffffff16905081565b5f8087878787878760405161025790610505565b958652602086019490945260408501929092526060840152608083015260a082015260c001604051809103905ff080158015610295573d5f803e3d5ffd5b50604080518082018252338082526bffffffffffffffffffffffff42818116602080860191825273ffffffffffffffffffffffffffffffffffffffff8089165f8181529283905288832097519351909516740100000000000000000000000000000000000000000292169190911790945560018054808201825594527fb10e2d527612073b26eecdfd717e6a320cf44b4afac2b0732d9fcbe2b7fa0cf690930180547fffffffffffffffffffffffff000000000000000000000000000000000000000016821790559251939450927fac4ce915ef22753b636e57aac5ae5fdd9d13d782ae5bf6dbcda15e29f95386c1916103929190815260200190565b60405180910390a3979650505050505050565b60607fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82036103d45760015491505b828210806103e3575060015482115b1561041a576040517f4e32a13200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6104248383610648565b67ffffffffffffffff81111561043c5761043c610661565b604051908082528060200260200182016040528015610465578160200160208202803683370190505b5090505f5b6104748484610648565b8110156104fe576001610487828661068e565b81548110610497576104976106a1565b905f5260205f20015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff168282815181106104d1576104d16106a1565b73ffffffffffffffffffffffffffffffffffffffff9092166020928302919091019091015260010161046a565b5092915050565b611006806106cf83390190565b5f60208284031215610522575f80fd5b5035919050565b5f60208284031215610539575f80fd5b813573ffffffffffffffffffffffffffffffffffffffff8116811461055c575f80fd5b9392505050565b5f805f805f8060c08789031215610578575f80fd5b505084359660208601359650604086013595606081013595506080810135945060a0013592509050565b5f80604083850312156105b3575f80fd5b50508035926020909101359150565b602080825282518282018190525f9190848201906040850190845b8181101561060f57835173ffffffffffffffffffffffffffffffffffffffff16835292840192918401916001016105dd565b50909695505050505050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b8181038181111561065b5761065b61061b565b92915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b8082018082111561065b5761065b61061b565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffdfe61014060405234801562000011575f80fd5b506040516200100638038062001006833981016040819052620000349162000208565b5f861315806200004b5750670de0b6b3a764000086135b156200006a57604051635435b28960e11b815260040160405180910390fd5b838512806200007857508285135b156200009757604051635435b28960e11b815260040160405180910390fd5b620000ae6301e1855866038d7ea4c680006200024f565b841280620000d25750620000cf6301e18558678ac7230489e800006200024f565b84135b15620000f157604051635435b28960e11b815260040160405180910390fd5b620001086301e1855866038d7ea4c680006200024f565b8312806200012c5750620001296301e18558678ac7230489e800006200024f565b83135b156200014b57604051635435b28960e11b815260040160405180910390fd5b670e043da6172500008212806200016a575068056bc75e2d6310000082135b156200018957604051635435b28960e11b815260040160405180910390fd5b620001a16301e18558671bc16d674ec800006200024f565b811280620001c65750620001c36301e18558683635c9adc5dea000006200024f565b81135b15620001e557604051635435b28960e11b815260040160405180910390fd5b60809590955260a09390935260c09190915260e052610100526101205262000295565b5f805f805f8060c087890312156200021e575f80fd5b865195506020870151945060408701519350606087015192506080870151915060a087015190509295509295509295565b5f826200026a57634e487b7160e01b5f52601260045260245ffd5b600160ff1b82145f19841416156200029057634e487b7160e01b5f52601160045260245ffd5b500590565b60805160a05160c05160e0516101005161012051610cd6620003305f395f81816101f8015261071f01525f81816102800152818161089901526108c401525f81816101d10152818161082c015261085401525f818160cd015281816107db015261080301525f818161025901526106eb01525f818161021f01528181610581015281816105a8015281816105d101526106100152610cd65ff3fe608060405234801561000f575f80fd5b50600436106100c4575f3560e01c806358f5cbad1161007d578063bca02c1311610058578063bca02c1314610241578063d91042b514610254578063fc4c2d541461027b575f80fd5b806358f5cbad146101cc5780635a92fa85146101f35780639a1a14d91461021a575f80fd5b80631a351d62116100ad5780631a351d621461014b5780632e34c872146101a65780634395b4fb146101b9575f80fd5b8063019ec38b146100c857806306fdde0314610102575b5f80fd5b6100ef7f000000000000000000000000000000000000000000000000000000000000000081565b6040519081526020015b60405180910390f35b61013e6040518060400160405280601081526020017f49524d416461707469766543757276650000000000000000000000000000000081525081565b6040516100f99190610a37565b6100ef610159366004610ac9565b73ffffffffffffffffffffffffffffffffffffffff165f908152602081905260409020547a010000000000000000000000000000000000000000000000000000900465ffffffffffff1690565b6100ef6101b4366004610ae2565b6102a2565b6100ef6101c7366004610ae2565b6102d6565b6100ef7f000000000000000000000000000000000000000000000000000000000000000081565b6100ef7f000000000000000000000000000000000000000000000000000000000000000081565b6100ef7f000000000000000000000000000000000000000000000000000000000000000081565b6100ef61024f366004610ae2565b610301565b6100ef7f000000000000000000000000000000000000000000000000000000000000000081565b6100ef7f000000000000000000000000000000000000000000000000000000000000000081565b5f806102ae8484610537565b90505f6102bb868361057c565b5090506102cc81633b9aca00610b3f565b9695505050505050565b5f806102e28484610537565b90505f6102ef868361057c565b91506102cc905081633b9aca00610b3f565b5f3373ffffffffffffffffffffffffffffffffffffffff851614610351576040517f35a4399400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f61035c8484610537565b73ffffffffffffffffffffffffffffffffffffffff86165f90815260208190526040812054919250907a010000000000000000000000000000000000000000000000000000900465ffffffffffff16156103f35773ffffffffffffffffffffffffffffffffffffffff86165f908152602081905260409020547201000000000000000000000000000000000000900460070b6103f5565b815b90505f80610403888461057c565b9150915060405180606001604052808271ffffffffffffffffffffffffffffffffffff1681526020018560070b81526020014265ffffffffffff168152505f808a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f820151815f015f6101000a81548171ffffffffffffffffffffffffffffffffffff021916908371ffffffffffffffffffffffffffffffffffff1602179055506020820151815f0160126101000a81548167ffffffffffffffff021916908360070b67ffffffffffffffff1602179055506040820151815f01601a6101000a81548165ffffffffffff021916908365ffffffffffff16021790555090505081633b9aca0061052b9190610b3f565b98975050505050505050565b5f806105438385610b56565b9050805f03610555575f915050610576565b80610568670de0b6b3a764000085610b69565b6105729190610bb4565b9150505b92915050565b5f805f7f000000000000000000000000000000000000000000000000000000000000000084136105cc577f00000000000000000000000000000000000000000000000000000000000000006105fe565b6105fe7f0000000000000000000000000000000000000000000000000000000000000000670de0b6b3a7640000610c40565b90505f81670de0b6b3a76400006106357f000000000000000000000000000000000000000000000000000000000000000088610c40565b61063f9190610b69565b6106499190610bb4565b73ffffffffffffffffffffffffffffffffffffffff87165f908152602081815260408083208151606081018352905471ffffffffffffffffffffffffffffffffffff81168083527201000000000000000000000000000000000000820460070b948301949094527a010000000000000000000000000000000000000000000000000000900465ffffffffffff16918101919091529293509081810361070f57507f0000000000000000000000000000000000000000000000000000000000000000610797565b5f670de0b6b3a7640000610743867f0000000000000000000000000000000000000000000000000000000000000000610b69565b61074d9190610bb4565b90505f846040015165ffffffffffff16426107689190610c66565b90505f6107758284610b69565b9050805f0361078657849350610793565b61079085826107af565b93505b5050505b6107a18185610882565b999098509650505050505050565b5f80670de0b6b3a76400006107c384610947565b6107cd9086610b69565b6107d79190610bb4565b90507f000000000000000000000000000000000000000000000000000000000000000081121561082a577f0000000000000000000000000000000000000000000000000000000000000000915050610576565b7f000000000000000000000000000000000000000000000000000000000000000081131561087b577f0000000000000000000000000000000000000000000000000000000000000000915050610576565b9392505050565b5f805f83126108c2576108bd670de0b6b3a76400007f0000000000000000000000000000000000000000000000000000000000000000610c40565b610911565b7f00000000000000000000000000000000000000000000000000000000000000006108f5670de0b6b3a764000080610b69565b6108ff9190610bb4565b61091190670de0b6b3a7640000610c40565b9050670de0b6b3a76400008481806109298786610b69565b6109339190610bb4565b61093d9190610c79565b6105689190610b69565b5f7ffffffffffffffffffffffffffffffffffffffffffffffffdc0d0570925a462d882121561097757505f919050565b6805168fd0946fc0415f82126109a75750780931d81650c7d88b8000000000000000000000000000000000919050565b5f8083126109bd576704cf46d8192b672e6109df565b7ffffffffffffffffffffffffffffffffffffffffffffffffffb30b927e6d498d25b905067099e8db03256ce5d83820181900590810284035f6002670de0b6b3a7640000838002050582670de0b6b3a7640000010190505f8312610a265790911b949350505050565b825f0381901d945050505050919050565b5f602080835283518060208501525f5b81811015610a6357858101830151858201604001528201610a47565b505f6040828601015260407fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f8301168501019250505092915050565b803573ffffffffffffffffffffffffffffffffffffffff81168114610ac4575f80fd5b919050565b5f60208284031215610ad9575f80fd5b61087b82610aa1565b5f805f60608486031215610af4575f80fd5b610afd84610aa1565b95602085013595506040909401359392505050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b808202811582820484141761057657610576610b12565b8082018082111561057657610576610b12565b8082025f82127f800000000000000000000000000000000000000000000000000000000000000084141615610ba057610ba0610b12565b818105831482151761057657610576610b12565b5f82610be7577f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff83147f800000000000000000000000000000000000000000000000000000000000000083141615610c3b57610c3b610b12565b500590565b8181035f831280158383131683831282161715610c5f57610c5f610b12565b5092915050565b8181038181111561057657610576610b12565b8082018281125f831280158216821582161715610c9857610c98610b12565b50509291505056fea2646970667358221220d696b8f30d5c053df29fcbaacf0a7de17f31f03a74de50888f88f6a29d3d9edb64736f6c63430008180033a2646970667358221220d749660cd9dc832bce416b3fe9294e4a88d0b56181588702ed0936daad62345a64736f6c63430008180033
Deployed Bytecode
0x608060405234801561000f575f80fd5b506004361061006f575f3560e01c80636ee0787a1161004d5780636ee0787a1461016e578063dd1faaef146101db578063e536913d146101ee575f80fd5b806306609bbe146100735780633fc756f8146100b05780636aebd5831461015d575b5f80fd5b610086610081366004610512565b61020e565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020015b60405180910390f35b6101246100be366004610529565b73ffffffffffffffffffffffffffffffffffffffff9081165f9081526020818152604091829020825180840190935254928316808352740100000000000000000000000000000000000000009093046bffffffffffffffffffffffff1691018190529091565b6040805173ffffffffffffffffffffffffffffffffffffffff90931683526bffffffffffffffffffffffff9091166020830152016100a7565b6001546040519081526020016100a7565b6101cb61017c366004610529565b73ffffffffffffffffffffffffffffffffffffffff165f908152602081905260409020547401000000000000000000000000000000000000000090046bffffffffffffffffffffffff16151590565b60405190151581526020016100a7565b6100866101e9366004610563565b610243565b6102016101fc3660046105a2565b6103a5565b6040516100a791906105c2565b6001818154811061021d575f80fd5b5f9182526020909120015473ffffffffffffffffffffffffffffffffffffffff16905081565b5f8087878787878760405161025790610505565b958652602086019490945260408501929092526060840152608083015260a082015260c001604051809103905ff080158015610295573d5f803e3d5ffd5b50604080518082018252338082526bffffffffffffffffffffffff42818116602080860191825273ffffffffffffffffffffffffffffffffffffffff8089165f8181529283905288832097519351909516740100000000000000000000000000000000000000000292169190911790945560018054808201825594527fb10e2d527612073b26eecdfd717e6a320cf44b4afac2b0732d9fcbe2b7fa0cf690930180547fffffffffffffffffffffffff000000000000000000000000000000000000000016821790559251939450927fac4ce915ef22753b636e57aac5ae5fdd9d13d782ae5bf6dbcda15e29f95386c1916103929190815260200190565b60405180910390a3979650505050505050565b60607fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82036103d45760015491505b828210806103e3575060015482115b1561041a576040517f4e32a13200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6104248383610648565b67ffffffffffffffff81111561043c5761043c610661565b604051908082528060200260200182016040528015610465578160200160208202803683370190505b5090505f5b6104748484610648565b8110156104fe576001610487828661068e565b81548110610497576104976106a1565b905f5260205f20015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff168282815181106104d1576104d16106a1565b73ffffffffffffffffffffffffffffffffffffffff9092166020928302919091019091015260010161046a565b5092915050565b611006806106cf83390190565b5f60208284031215610522575f80fd5b5035919050565b5f60208284031215610539575f80fd5b813573ffffffffffffffffffffffffffffffffffffffff8116811461055c575f80fd5b9392505050565b5f805f805f8060c08789031215610578575f80fd5b505084359660208601359650604086013595606081013595506080810135945060a0013592509050565b5f80604083850312156105b3575f80fd5b50508035926020909101359150565b602080825282518282018190525f9190848201906040850190845b8181101561060f57835173ffffffffffffffffffffffffffffffffffffffff16835292840192918401916001016105dd565b50909695505050505050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b8181038181111561065b5761065b61061b565b92915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b8082018082111561065b5761065b61061b565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffdfe61014060405234801562000011575f80fd5b506040516200100638038062001006833981016040819052620000349162000208565b5f861315806200004b5750670de0b6b3a764000086135b156200006a57604051635435b28960e11b815260040160405180910390fd5b838512806200007857508285135b156200009757604051635435b28960e11b815260040160405180910390fd5b620000ae6301e1855866038d7ea4c680006200024f565b841280620000d25750620000cf6301e18558678ac7230489e800006200024f565b84135b15620000f157604051635435b28960e11b815260040160405180910390fd5b620001086301e1855866038d7ea4c680006200024f565b8312806200012c5750620001296301e18558678ac7230489e800006200024f565b83135b156200014b57604051635435b28960e11b815260040160405180910390fd5b670e043da6172500008212806200016a575068056bc75e2d6310000082135b156200018957604051635435b28960e11b815260040160405180910390fd5b620001a16301e18558671bc16d674ec800006200024f565b811280620001c65750620001c36301e18558683635c9adc5dea000006200024f565b81135b15620001e557604051635435b28960e11b815260040160405180910390fd5b60809590955260a09390935260c09190915260e052610100526101205262000295565b5f805f805f8060c087890312156200021e575f80fd5b865195506020870151945060408701519350606087015192506080870151915060a087015190509295509295509295565b5f826200026a57634e487b7160e01b5f52601260045260245ffd5b600160ff1b82145f19841416156200029057634e487b7160e01b5f52601160045260245ffd5b500590565b60805160a05160c05160e0516101005161012051610cd6620003305f395f81816101f8015261071f01525f81816102800152818161089901526108c401525f81816101d10152818161082c015261085401525f818160cd015281816107db015261080301525f818161025901526106eb01525f818161021f01528181610581015281816105a8015281816105d101526106100152610cd65ff3fe608060405234801561000f575f80fd5b50600436106100c4575f3560e01c806358f5cbad1161007d578063bca02c1311610058578063bca02c1314610241578063d91042b514610254578063fc4c2d541461027b575f80fd5b806358f5cbad146101cc5780635a92fa85146101f35780639a1a14d91461021a575f80fd5b80631a351d62116100ad5780631a351d621461014b5780632e34c872146101a65780634395b4fb146101b9575f80fd5b8063019ec38b146100c857806306fdde0314610102575b5f80fd5b6100ef7f000000000000000000000000000000000000000000000000000000000000000081565b6040519081526020015b60405180910390f35b61013e6040518060400160405280601081526020017f49524d416461707469766543757276650000000000000000000000000000000081525081565b6040516100f99190610a37565b6100ef610159366004610ac9565b73ffffffffffffffffffffffffffffffffffffffff165f908152602081905260409020547a010000000000000000000000000000000000000000000000000000900465ffffffffffff1690565b6100ef6101b4366004610ae2565b6102a2565b6100ef6101c7366004610ae2565b6102d6565b6100ef7f000000000000000000000000000000000000000000000000000000000000000081565b6100ef7f000000000000000000000000000000000000000000000000000000000000000081565b6100ef7f000000000000000000000000000000000000000000000000000000000000000081565b6100ef61024f366004610ae2565b610301565b6100ef7f000000000000000000000000000000000000000000000000000000000000000081565b6100ef7f000000000000000000000000000000000000000000000000000000000000000081565b5f806102ae8484610537565b90505f6102bb868361057c565b5090506102cc81633b9aca00610b3f565b9695505050505050565b5f806102e28484610537565b90505f6102ef868361057c565b91506102cc905081633b9aca00610b3f565b5f3373ffffffffffffffffffffffffffffffffffffffff851614610351576040517f35a4399400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f61035c8484610537565b73ffffffffffffffffffffffffffffffffffffffff86165f90815260208190526040812054919250907a010000000000000000000000000000000000000000000000000000900465ffffffffffff16156103f35773ffffffffffffffffffffffffffffffffffffffff86165f908152602081905260409020547201000000000000000000000000000000000000900460070b6103f5565b815b90505f80610403888461057c565b9150915060405180606001604052808271ffffffffffffffffffffffffffffffffffff1681526020018560070b81526020014265ffffffffffff168152505f808a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f820151815f015f6101000a81548171ffffffffffffffffffffffffffffffffffff021916908371ffffffffffffffffffffffffffffffffffff1602179055506020820151815f0160126101000a81548167ffffffffffffffff021916908360070b67ffffffffffffffff1602179055506040820151815f01601a6101000a81548165ffffffffffff021916908365ffffffffffff16021790555090505081633b9aca0061052b9190610b3f565b98975050505050505050565b5f806105438385610b56565b9050805f03610555575f915050610576565b80610568670de0b6b3a764000085610b69565b6105729190610bb4565b9150505b92915050565b5f805f7f000000000000000000000000000000000000000000000000000000000000000084136105cc577f00000000000000000000000000000000000000000000000000000000000000006105fe565b6105fe7f0000000000000000000000000000000000000000000000000000000000000000670de0b6b3a7640000610c40565b90505f81670de0b6b3a76400006106357f000000000000000000000000000000000000000000000000000000000000000088610c40565b61063f9190610b69565b6106499190610bb4565b73ffffffffffffffffffffffffffffffffffffffff87165f908152602081815260408083208151606081018352905471ffffffffffffffffffffffffffffffffffff81168083527201000000000000000000000000000000000000820460070b948301949094527a010000000000000000000000000000000000000000000000000000900465ffffffffffff16918101919091529293509081810361070f57507f0000000000000000000000000000000000000000000000000000000000000000610797565b5f670de0b6b3a7640000610743867f0000000000000000000000000000000000000000000000000000000000000000610b69565b61074d9190610bb4565b90505f846040015165ffffffffffff16426107689190610c66565b90505f6107758284610b69565b9050805f0361078657849350610793565b61079085826107af565b93505b5050505b6107a18185610882565b999098509650505050505050565b5f80670de0b6b3a76400006107c384610947565b6107cd9086610b69565b6107d79190610bb4565b90507f000000000000000000000000000000000000000000000000000000000000000081121561082a577f0000000000000000000000000000000000000000000000000000000000000000915050610576565b7f000000000000000000000000000000000000000000000000000000000000000081131561087b577f0000000000000000000000000000000000000000000000000000000000000000915050610576565b9392505050565b5f805f83126108c2576108bd670de0b6b3a76400007f0000000000000000000000000000000000000000000000000000000000000000610c40565b610911565b7f00000000000000000000000000000000000000000000000000000000000000006108f5670de0b6b3a764000080610b69565b6108ff9190610bb4565b61091190670de0b6b3a7640000610c40565b9050670de0b6b3a76400008481806109298786610b69565b6109339190610bb4565b61093d9190610c79565b6105689190610b69565b5f7ffffffffffffffffffffffffffffffffffffffffffffffffdc0d0570925a462d882121561097757505f919050565b6805168fd0946fc0415f82126109a75750780931d81650c7d88b8000000000000000000000000000000000919050565b5f8083126109bd576704cf46d8192b672e6109df565b7ffffffffffffffffffffffffffffffffffffffffffffffffffb30b927e6d498d25b905067099e8db03256ce5d83820181900590810284035f6002670de0b6b3a7640000838002050582670de0b6b3a7640000010190505f8312610a265790911b949350505050565b825f0381901d945050505050919050565b5f602080835283518060208501525f5b81811015610a6357858101830151858201604001528201610a47565b505f6040828601015260407fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f8301168501019250505092915050565b803573ffffffffffffffffffffffffffffffffffffffff81168114610ac4575f80fd5b919050565b5f60208284031215610ad9575f80fd5b61087b82610aa1565b5f805f60608486031215610af4575f80fd5b610afd84610aa1565b95602085013595506040909401359392505050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b808202811582820484141761057657610576610b12565b8082018082111561057657610576610b12565b8082025f82127f800000000000000000000000000000000000000000000000000000000000000084141615610ba057610ba0610b12565b818105831482151761057657610576610b12565b5f82610be7577f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff83147f800000000000000000000000000000000000000000000000000000000000000083141615610c3b57610c3b610b12565b500590565b8181035f831280158383131683831282161715610c5f57610c5f610b12565b5092915050565b8181038181111561057657610576610b12565b8082018281125f831280158216821582161715610c9857610c98610b12565b50509291505056fea2646970667358221220d696b8f30d5c053df29fcbaacf0a7de17f31f03a74de50888f88f6a29d3d9edb64736f6c63430008180033a2646970667358221220d749660cd9dc832bce416b3fe9294e4a88d0b56181588702ed0936daad62345a64736f6c63430008180033
Loading...
Loading
Loading...
Loading
Multichain Portfolio | 30 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.