Feature Tip: Add private address tag to any address under My Name Tag !
Overview
ETH Balance
0 ETH
Eth Value
$0.00More Info
Private Name Tags
ContractCreator
Latest 25 from a total of 239 transactions
Transaction Hash |
Method
|
Block
|
From
|
To
|
|||||
---|---|---|---|---|---|---|---|---|---|
Exit_target Repa... | 14308461 | 1136 days ago | IN | 0 ETH | 0.02201804 | ||||
Exit_target Repa... | 14286604 | 1139 days ago | IN | 0 ETH | 0.00485151 | ||||
Exit_target Repa... | 14282573 | 1140 days ago | IN | 0 ETH | 0.02756921 | ||||
Join | 14269937 | 1141 days ago | IN | 0 ETH | 0.00482881 | ||||
Join | 14269747 | 1141 days ago | IN | 0 ETH | 0.00813364 | ||||
Exit_target Repa... | 14268539 | 1142 days ago | IN | 0 ETH | 0.00504033 | ||||
Join | 14267166 | 1142 days ago | IN | 0 ETH | 0.01019277 | ||||
Exit_target Repa... | 14266957 | 1142 days ago | IN | 0 ETH | 0.02052256 | ||||
Trigger Liquidat... | 14266625 | 1142 days ago | IN | 0 ETH | 0.07344297 | ||||
Trigger Liquidat... | 14266595 | 1142 days ago | IN | 0 ETH | 0.0594094 | ||||
Trigger Liquidat... | 14266445 | 1142 days ago | IN | 0 ETH | 0.03489055 | ||||
Trigger Liquidat... | 14266426 | 1142 days ago | IN | 0 ETH | 0.05457813 | ||||
Trigger Liquidat... | 14266426 | 1142 days ago | IN | 0 ETH | 0.04416882 | ||||
Join | 14264909 | 1142 days ago | IN | 0 ETH | 0.00475878 | ||||
Exit_target Repa... | 14263315 | 1142 days ago | IN | 0 ETH | 0.01889991 | ||||
Trigger Liquidat... | 14254165 | 1144 days ago | IN | 0 ETH | 0.02395347 | ||||
Trigger Liquidat... | 14253556 | 1144 days ago | IN | 0 ETH | 0.02234434 | ||||
Join | 14237276 | 1147 days ago | IN | 0 ETH | 0.00549573 | ||||
Join | 14191392 | 1154 days ago | IN | 0 ETH | 0.00404188 | ||||
Join | 14190674 | 1154 days ago | IN | 0 ETH | 0.00303786 | ||||
Join | 14188158 | 1154 days ago | IN | 0 ETH | 0.00366251 | ||||
Exit_Eth_target ... | 14183710 | 1155 days ago | IN | 0 ETH | 0.00777418 | ||||
Join_Eth | 14182427 | 1155 days ago | IN | 0 ETH | 0.01626592 | ||||
Exit_target Repa... | 14153139 | 1160 days ago | IN | 0 ETH | 0.03905472 | ||||
Exit_target Repa... | 14153111 | 1160 days ago | IN | 0 ETH | 0.04771269 |
Latest 16 internal transactions
Advanced mode:
Parent Transaction Hash | Method | Block |
From
|
To
|
|||
---|---|---|---|---|---|---|---|
- | 14183710 | 1155 days ago | 15.02293527 ETH | ||||
- | 14183710 | 1155 days ago | 15.02293527 ETH | ||||
- | 14085274 | 1170 days ago | 12 ETH | ||||
- | 14085274 | 1170 days ago | 12 ETH | ||||
- | 14068786 | 1173 days ago | 4.3 ETH | ||||
- | 14068786 | 1173 days ago | 4.3 ETH | ||||
- | 14067501 | 1173 days ago | 0.5 ETH | ||||
- | 14060420 | 1174 days ago | 3 ETH | ||||
- | 14060420 | 1174 days ago | 3 ETH | ||||
- | 14050102 | 1175 days ago | 14.98321594 ETH | ||||
- | 14050102 | 1175 days ago | 14.98321594 ETH | ||||
- | 14048159 | 1176 days ago | 0.8 ETH | ||||
- | 13817200 | 1211 days ago | 3.8 ETH | ||||
- | 13817200 | 1211 days ago | 3.8 ETH | ||||
- | 13721569 | 1227 days ago | 3 ETH | ||||
- | 13640970 | 1239 days ago | 3.8 ETH |
Loading...
Loading
Contract Name:
CDPManager01
Compiler Version
v0.7.6+commit.7338295f
Optimization Enabled:
Yes with 200 runs
Other Settings:
default evmVersion
Contract Source Code (Solidity Standard Json-Input format)
// SPDX-License-Identifier: bsl-1.1 /* Copyright 2020 Unit Protocol: Artem Zakharov ([email protected]). */ pragma solidity 0.7.6; import './BaseCDPManager.sol'; import '../interfaces/IOracleRegistry.sol'; import '../interfaces/IOracleUsd.sol'; import '../interfaces/IWETH.sol'; import '../interfaces/IVault.sol'; import '../interfaces/ICDPRegistry.sol'; import '../interfaces/vault-managers/parameters/IVaultManagerParameters.sol'; import '../interfaces/IVaultParameters.sol'; import '../interfaces/IToken.sol'; import '../helpers/ReentrancyGuard.sol'; import '../helpers/SafeMath.sol'; /** * @title CDPManager01 **/ contract CDPManager01 is BaseCDPManager { using SafeMath for uint; address payable public immutable WETH; /** * @param _vaultManagerParameters The address of the contract with Vault manager parameters * @param _oracleRegistry The address of the oracle registry * @param _cdpRegistry The address of the CDP registry * @param _vaultManagerBorrowFeeParameters The address of the vault manager borrow fee parameters **/ constructor(address _vaultManagerParameters, address _oracleRegistry, address _cdpRegistry, address _vaultManagerBorrowFeeParameters) BaseCDPManager(_vaultManagerParameters, _oracleRegistry, _cdpRegistry, _vaultManagerBorrowFeeParameters) { WETH = IVault(IVaultParameters(IVaultManagerParameters(_vaultManagerParameters).vaultParameters()).vault()).weth(); } // only accept ETH via fallback from the WETH contract receive() external payable { require(msg.sender == WETH, "Unit Protocol: RESTRICTED"); } /** * @notice Depositing tokens must be pre-approved to Vault address * @notice Borrow fee in USDP tokens must be pre-approved to CDP manager address * @notice position actually considered as spawned only when debt > 0 * @dev Deposits collateral and/or borrows USDP * @param asset The address of the collateral * @param assetAmount The amount of the collateral to deposit * @param usdpAmount The amount of USDP token to borrow **/ function join(address asset, uint assetAmount, uint usdpAmount) public nonReentrant checkpoint(asset, msg.sender) { require(usdpAmount != 0 || assetAmount != 0, "Unit Protocol: USELESS_TX"); require(IToken(asset).decimals() <= 18, "Unit Protocol: NOT_SUPPORTED_DECIMALS"); if (usdpAmount == 0) { vault.depositMain(asset, msg.sender, assetAmount); } else { _ensureOracle(asset); bool spawned = vault.debts(asset, msg.sender) != 0; if (!spawned) { // spawn a position vault.spawn(asset, msg.sender, oracleRegistry.oracleTypeByAsset(asset)); } if (assetAmount != 0) { vault.depositMain(asset, msg.sender, assetAmount); } // mint USDP to owner vault.borrow(asset, msg.sender, usdpAmount); _chargeBorrowFee(asset, msg.sender, usdpAmount); // check collateralization _ensurePositionCollateralization(asset, msg.sender); } // fire an event emit Join(asset, msg.sender, assetAmount, usdpAmount); } /** * @dev Deposits ETH and/or borrows USDP * @param usdpAmount The amount of USDP token to borrow **/ function join_Eth(uint usdpAmount) external payable { if (msg.value != 0) { IWETH(WETH).deposit{value: msg.value}(); require(IWETH(WETH).transfer(msg.sender, msg.value), "Unit Protocol: WETH_TRANSFER_FAILED"); } join(WETH, msg.value, usdpAmount); } /** * @notice Tx sender must have a sufficient USDP balance to pay the debt * @dev Withdraws collateral and repays specified amount of debt * @param asset The address of the collateral * @param assetAmount The amount of the collateral to withdraw * @param usdpAmount The amount of USDP to repay **/ function exit(address asset, uint assetAmount, uint usdpAmount) public nonReentrant checkpoint(asset, msg.sender) returns (uint) { // check usefulness of tx require(assetAmount != 0 || usdpAmount != 0, "Unit Protocol: USELESS_TX"); uint debt = vault.debts(asset, msg.sender); // catch full repayment if (usdpAmount > debt) { usdpAmount = debt; } if (assetAmount == 0) { _repay(asset, msg.sender, usdpAmount); } else { if (debt == usdpAmount) { vault.withdrawMain(asset, msg.sender, assetAmount); if (usdpAmount != 0) { _repay(asset, msg.sender, usdpAmount); } } else { _ensureOracle(asset); // withdraw collateral to the owner address vault.withdrawMain(asset, msg.sender, assetAmount); if (usdpAmount != 0) { _repay(asset, msg.sender, usdpAmount); } vault.update(asset, msg.sender); _ensurePositionCollateralization(asset, msg.sender); } } // fire an event emit Exit(asset, msg.sender, assetAmount, usdpAmount); return usdpAmount; } /** * @notice Repayment is the sum of the principal and interest * @dev Withdraws collateral and repays specified amount of debt * @param asset The address of the collateral * @param assetAmount The amount of the collateral to withdraw * @param repayment The target repayment amount **/ function exit_targetRepayment(address asset, uint assetAmount, uint repayment) external returns (uint) { uint usdpAmount = _calcPrincipal(asset, msg.sender, repayment); return exit(asset, assetAmount, usdpAmount); } /** * @notice Withdraws WETH and converts to ETH * @param ethAmount ETH amount to withdraw * @param usdpAmount The amount of USDP token to repay **/ function exit_Eth(uint ethAmount, uint usdpAmount) public returns (uint) { usdpAmount = exit(WETH, ethAmount, usdpAmount); require(IWETH(WETH).transferFrom(msg.sender, address(this), ethAmount), "Unit Protocol: WETH_TRANSFER_FROM_FAILED"); IWETH(WETH).withdraw(ethAmount); (bool success, ) = msg.sender.call{value:ethAmount}(""); require(success, "Unit Protocol: ETH_TRANSFER_FAILED"); return usdpAmount; } /** * @notice Repayment is the sum of the principal and interest * @notice Withdraws WETH and converts to ETH * @param ethAmount ETH amount to withdraw * @param repayment The target repayment amount **/ function exit_Eth_targetRepayment(uint ethAmount, uint repayment) external returns (uint) { uint usdpAmount = _calcPrincipal(WETH, msg.sender, repayment); return exit_Eth(ethAmount, usdpAmount); } function _ensurePositionCollateralization(address asset, address owner) internal view { // collateral value of the position in USD uint usdValue_q112 = getCollateralUsdValue_q112(asset, owner); // USD limit of the position uint usdLimit = usdValue_q112 * vaultManagerParameters.initialCollateralRatio(asset) / Q112 / 100; // revert if collateralization is not enough require(vault.getTotalDebt(asset, owner) <= usdLimit, "Unit Protocol: UNDERCOLLATERALIZED"); } // Liquidation Trigger /** * @dev Triggers liquidation of a position * @param asset The address of the collateral token of a position * @param owner The owner of the position **/ function triggerLiquidation(address asset, address owner) external nonReentrant { _ensureOracle(asset); // USD value of the collateral uint usdValue_q112 = getCollateralUsdValue_q112(asset, owner); // reverts if a position is not liquidatable require(_isLiquidatablePosition(asset, owner, usdValue_q112), "Unit Protocol: SAFE_POSITION"); uint liquidationDiscount_q112 = usdValue_q112.mul( vaultManagerParameters.liquidationDiscount(asset) ).div(DENOMINATOR_1E5); uint initialLiquidationPrice = usdValue_q112.sub(liquidationDiscount_q112).div(Q112); // sends liquidation command to the Vault vault.triggerLiquidation(asset, owner, initialLiquidationPrice); // fire an liquidation event emit LiquidationTriggered(asset, owner); } function getCollateralUsdValue_q112(address asset, address owner) public view returns (uint) { return IOracleUsd(oracleRegistry.oracleByAsset(asset)).assetToUsd(asset, vault.collaterals(asset, owner)); } function _ensureOracle(address asset) internal view { uint oracleType = oracleRegistry.oracleTypeByAsset(asset); require(oracleType != 0, "Unit Protocol: INVALID_ORACLE_TYPE"); address oracle = oracleRegistry.oracleByType(oracleType); require(oracle != address(0), "Unit Protocol: DISABLED_ORACLE"); } /** * @dev Determines whether a position is liquidatable * @param asset The address of the collateral * @param owner The owner of the position * @return boolean value, whether a position is liquidatable **/ function isLiquidatablePosition( address asset, address owner ) public view returns (bool) { uint usdValue_q112 = getCollateralUsdValue_q112(asset, owner); return _isLiquidatablePosition(asset, owner, usdValue_q112); } /** * @dev Calculates current utilization ratio * @param asset The address of the collateral * @param owner The owner of the position * @return utilization ratio **/ function utilizationRatio( address asset, address owner ) public view returns (uint) { uint debt = vault.getTotalDebt(asset, owner); if (debt == 0) return 0; uint usdValue_q112 = getCollateralUsdValue_q112(asset, owner); return debt.mul(100).mul(Q112).div(usdValue_q112); } }
// SPDX-License-Identifier: bsl-1.1 /* Copyright 2021 Unit Protocol: Artem Zakharov ([email protected]). */ pragma solidity 0.7.6; import "../interfaces/IVault.sol"; import '../interfaces/IVaultParameters.sol'; import "../interfaces/IOracleRegistry.sol"; import "../interfaces/ICDPRegistry.sol"; import '../interfaces/IToken.sol'; import "../interfaces/vault-managers/parameters/IVaultManagerParameters.sol"; import "../interfaces/vault-managers/parameters/IVaultManagerBorrowFeeParameters.sol"; import "../helpers/ReentrancyGuard.sol"; import '../helpers/TransferHelper.sol'; import "../helpers/SafeMath.sol"; import "@openzeppelin/contracts/token/ERC20/IERC20.sol"; /** * @title BaseCDPManager * @dev all common logic should be moved here in future **/ abstract contract BaseCDPManager is ReentrancyGuard { using SafeMath for uint; IVault public immutable vault; IVaultManagerParameters public immutable vaultManagerParameters; IOracleRegistry public immutable oracleRegistry; ICDPRegistry public immutable cdpRegistry; IVaultManagerBorrowFeeParameters public immutable vaultManagerBorrowFeeParameters; IERC20 public immutable usdp; uint public constant Q112 = 2 ** 112; uint public constant DENOMINATOR_1E5 = 1e5; /** * @dev Trigger when joins are happened **/ event Join(address indexed asset, address indexed owner, uint main, uint usdp); /** * @dev Trigger when exits are happened **/ event Exit(address indexed asset, address indexed owner, uint main, uint usdp); /** * @dev Trigger when liquidations are initiated **/ event LiquidationTriggered(address indexed asset, address indexed owner); modifier checkpoint(address asset, address owner) { _; cdpRegistry.checkpoint(asset, owner); } /** * @param _vaultManagerParameters The address of the contract with Vault manager parameters * @param _oracleRegistry The address of the oracle registry * @param _cdpRegistry The address of the CDP registry * @param _vaultManagerBorrowFeeParameters The address of the vault manager borrow fee parameters **/ constructor(address _vaultManagerParameters, address _oracleRegistry, address _cdpRegistry, address _vaultManagerBorrowFeeParameters) { require( _vaultManagerParameters != address(0) && _oracleRegistry != address(0) && _cdpRegistry != address(0) && _vaultManagerBorrowFeeParameters != address(0), "Unit Protocol: INVALID_ARGS" ); vaultManagerParameters = IVaultManagerParameters(_vaultManagerParameters); IVault vaultLocal = IVault(IVaultParameters(IVaultManagerParameters(_vaultManagerParameters).vaultParameters()).vault()); vault = vaultLocal; oracleRegistry = IOracleRegistry(_oracleRegistry); cdpRegistry = ICDPRegistry(_cdpRegistry); vaultManagerBorrowFeeParameters = IVaultManagerBorrowFeeParameters(_vaultManagerBorrowFeeParameters); usdp = IERC20(vaultLocal.usdp()); } /** * @notice Charge borrow fee if needed */ function _chargeBorrowFee(address asset, address user, uint usdpAmount) internal { uint borrowFee = vaultManagerBorrowFeeParameters.calcBorrowFeeAmount(asset, usdpAmount); if (borrowFee == 0) { // very small amount case return; } // to fail with concrete reason, not with TRANSFER_FROM_FAILED from safeTransferFrom require(usdp.allowance(user, address(this)) >= borrowFee, "Unit Protocol: BORROW_FEE_NOT_APPROVED"); TransferHelper.safeTransferFrom( address(usdp), user, vaultManagerBorrowFeeParameters.feeReceiver(), borrowFee ); } // decreases debt function _repay(address asset, address owner, uint usdpAmount) internal { uint fee = vault.calculateFee(asset, owner, usdpAmount); vault.chargeFee(vault.usdp(), owner, fee); // burn USDP from the owner's balance uint debtAfter = vault.repay(asset, owner, usdpAmount); if (debtAfter == 0) { // clear unused storage vault.destroy(asset, owner); } } /** * @dev Calculates liquidation price * @param asset The address of the collateral * @param owner The owner of the position * @return Q112-encoded liquidation price **/ function liquidationPrice_q112( address asset, address owner ) external view returns (uint) { uint debt = vault.getTotalDebt(asset, owner); if (debt == 0) return uint(-1); uint collateralLiqPrice = debt.mul(100).mul(Q112).div(vaultManagerParameters.liquidationRatio(asset)); require(IToken(asset).decimals() <= 18, "Unit Protocol: NOT_SUPPORTED_DECIMALS"); return collateralLiqPrice / vault.collaterals(asset, owner) / 10 ** (18 - IToken(asset).decimals()); } function _calcPrincipal(address asset, address owner, uint repayment) internal view returns (uint) { uint fee = vault.stabilityFee(asset, owner) * (block.timestamp - vault.lastUpdate(asset, owner)) / 365 days; return repayment * DENOMINATOR_1E5 / (DENOMINATOR_1E5 + fee); } /** * @dev Determines whether a position is liquidatable * @param asset The address of the collateral * @param owner The owner of the position * @param usdValue_q112 Q112-encoded USD value of the collateral * @return boolean value, whether a position is liquidatable **/ function _isLiquidatablePosition( address asset, address owner, uint usdValue_q112 ) internal view returns (bool) { uint debt = vault.getTotalDebt(asset, owner); // position is collateralized if there is no debt if (debt == 0) return false; return debt.mul(100).mul(Q112).div(usdValue_q112) >= vaultManagerParameters.liquidationRatio(asset); } }
// SPDX-License-Identifier: bsl-1.1 /* Copyright 2020 Unit Protocol: Artem Zakharov ([email protected]). */ pragma solidity ^0.7.6; pragma abicoder v2; interface IOracleRegistry { struct Oracle { uint oracleType; address oracleAddress; } function WETH ( ) external view returns ( address ); function getKeydonixOracleTypes ( ) external view returns ( uint256[] memory ); function getOracles ( ) external view returns ( Oracle[] memory foundOracles ); function keydonixOracleTypes ( uint256 ) external view returns ( uint256 ); function maxOracleType ( ) external view returns ( uint256 ); function oracleByAsset ( address asset ) external view returns ( address ); function oracleByType ( uint256 ) external view returns ( address ); function oracleTypeByAsset ( address ) external view returns ( uint256 ); function oracleTypeByOracle ( address ) external view returns ( uint256 ); function setKeydonixOracleTypes ( uint256[] memory _keydonixOracleTypes ) external; function setOracle ( uint256 oracleType, address oracle ) external; function setOracleTypeForAsset ( address asset, uint256 oracleType ) external; function setOracleTypeForAssets ( address[] memory assets, uint256 oracleType ) external; function unsetOracle ( uint256 oracleType ) external; function unsetOracleForAsset ( address asset ) external; function unsetOracleForAssets ( address[] memory assets ) external; function vaultParameters ( ) external view returns ( address ); }
// SPDX-License-Identifier: bsl-1.1 /* Copyright 2020 Unit Protocol: Artem Zakharov ([email protected]). */ pragma solidity ^0.7.6; interface IOracleUsd { // returns Q112-encoded value // returned value 10**18 * 2**112 is $1 function assetToUsd(address asset, uint amount) external view returns (uint); }
// SPDX-License-Identifier: bsl-1.1 /* Copyright 2020 Unit Protocol: Artem Zakharov ([email protected]). */ pragma solidity ^0.7.6; interface IWETH { function deposit() external payable; function transfer(address to, uint value) external returns (bool); function transferFrom(address from, address to, uint value) external returns (bool); function withdraw(uint) external; }
// SPDX-License-Identifier: bsl-1.1 /* Copyright 2020 Unit Protocol: Artem Zakharov ([email protected]). */ pragma solidity ^0.7.6; interface IVault { function DENOMINATOR_1E2 ( ) external view returns ( uint256 ); function DENOMINATOR_1E5 ( ) external view returns ( uint256 ); function borrow ( address asset, address user, uint256 amount ) external returns ( uint256 ); function calculateFee ( address asset, address user, uint256 amount ) external view returns ( uint256 ); function changeOracleType ( address asset, address user, uint256 newOracleType ) external; function chargeFee ( address asset, address user, uint256 amount ) external; function col ( ) external view returns ( address ); function colToken ( address, address ) external view returns ( uint256 ); function collaterals ( address, address ) external view returns ( uint256 ); function debts ( address, address ) external view returns ( uint256 ); function depositCol ( address asset, address user, uint256 amount ) external; function depositEth ( address user ) external payable; function depositMain ( address asset, address user, uint256 amount ) external; function destroy ( address asset, address user ) external; function getTotalDebt ( address asset, address user ) external view returns ( uint256 ); function lastUpdate ( address, address ) external view returns ( uint256 ); function liquidate ( address asset, address positionOwner, uint256 mainAssetToLiquidator, uint256 colToLiquidator, uint256 mainAssetToPositionOwner, uint256 colToPositionOwner, uint256 repayment, uint256 penalty, address liquidator ) external; function liquidationBlock ( address, address ) external view returns ( uint256 ); function liquidationFee ( address, address ) external view returns ( uint256 ); function liquidationPrice ( address, address ) external view returns ( uint256 ); function oracleType ( address, address ) external view returns ( uint256 ); function repay ( address asset, address user, uint256 amount ) external returns ( uint256 ); function spawn ( address asset, address user, uint256 _oracleType ) external; function stabilityFee ( address, address ) external view returns ( uint256 ); function tokenDebts ( address ) external view returns ( uint256 ); function triggerLiquidation ( address asset, address positionOwner, uint256 initialPrice ) external; function update ( address asset, address user ) external; function usdp ( ) external view returns ( address ); function vaultParameters ( ) external view returns ( address ); function weth ( ) external view returns ( address payable ); function withdrawCol ( address asset, address user, uint256 amount ) external; function withdrawEth ( address user, uint256 amount ) external; function withdrawMain ( address asset, address user, uint256 amount ) external; }
// SPDX-License-Identifier: bsl-1.1 /* Copyright 2020 Unit Protocol: Artem Zakharov ([email protected]). */ pragma solidity ^0.7.6; pragma experimental ABIEncoderV2; interface ICDPRegistry { struct CDP { address asset; address owner; } function batchCheckpoint ( address[] calldata assets, address[] calldata owners ) external; function batchCheckpointForAsset ( address asset, address[] calldata owners ) external; function checkpoint ( address asset, address owner ) external; function cr ( ) external view returns ( address ); function getAllCdps ( ) external view returns ( CDP[] memory r ); function getCdpsByCollateral ( address asset ) external view returns ( CDP[] memory cdps ); function getCdpsByOwner ( address owner ) external view returns ( CDP[] memory r ); function getCdpsCount ( ) external view returns ( uint256 totalCdpCount ); function getCdpsCountForCollateral ( address asset ) external view returns ( uint256 ); function isAlive ( address asset, address owner ) external view returns ( bool ); function isListed ( address asset, address owner ) external view returns ( bool ); function vault ( ) external view returns ( address ); }
// SPDX-License-Identifier: bsl-1.1 /* Copyright 2020 Unit Protocol: Artem Zakharov ([email protected]). */ pragma solidity ^0.7.6; interface IVaultManagerParameters { function devaluationPeriod ( address ) external view returns ( uint256 ); function initialCollateralRatio ( address ) external view returns ( uint256 ); function liquidationDiscount ( address ) external view returns ( uint256 ); function liquidationRatio ( address ) external view returns ( uint256 ); function maxColPercent ( address ) external view returns ( uint256 ); function minColPercent ( address ) external view returns ( uint256 ); function setColPartRange ( address asset, uint256 min, uint256 max ) external; function setCollateral ( address asset, uint256 stabilityFeeValue, uint256 liquidationFeeValue, uint256 initialCollateralRatioValue, uint256 liquidationRatioValue, uint256 liquidationDiscountValue, uint256 devaluationPeriodValue, uint256 usdpLimit, uint256[] calldata oracles, uint256 minColP, uint256 maxColP ) external; function setDevaluationPeriod ( address asset, uint256 newValue ) external; function setInitialCollateralRatio ( address asset, uint256 newValue ) external; function setLiquidationDiscount ( address asset, uint256 newValue ) external; function setLiquidationRatio ( address asset, uint256 newValue ) external; function vaultParameters ( ) external view returns ( address ); }
// SPDX-License-Identifier: bsl-1.1 /* Copyright 2020 Unit Protocol: Artem Zakharov ([email protected]). */ pragma solidity ^0.7.6; interface IVaultParameters { function canModifyVault ( address ) external view returns ( bool ); function foundation ( ) external view returns ( address ); function isManager ( address ) external view returns ( bool ); function isOracleTypeEnabled ( uint256, address ) external view returns ( bool ); function liquidationFee ( address ) external view returns ( uint256 ); function setCollateral ( address asset, uint256 stabilityFeeValue, uint256 liquidationFeeValue, uint256 usdpLimit, uint256[] calldata oracles ) external; function setFoundation ( address newFoundation ) external; function setLiquidationFee ( address asset, uint256 newValue ) external; function setManager ( address who, bool permit ) external; function setOracleType ( uint256 _type, address asset, bool enabled ) external; function setStabilityFee ( address asset, uint256 newValue ) external; function setTokenDebtLimit ( address asset, uint256 limit ) external; function setVaultAccess ( address who, bool permit ) external; function stabilityFee ( address ) external view returns ( uint256 ); function tokenDebtLimit ( address ) external view returns ( uint256 ); function vault ( ) external view returns ( address ); function vaultParameters ( ) external view returns ( address ); }
// SPDX-License-Identifier: bsl-1.1 /* Copyright 2020 Unit Protocol: Artem Zakharov ([email protected]). */ pragma solidity ^0.7.6; interface IToken { function decimals() external view returns (uint8); }
// SPDX-License-Identifier: MIT pragma solidity 0.7.6; /** * @dev Contract module that helps prevent reentrant calls to a function. * * Inheriting from `ReentrancyGuard` will make the {nonReentrant} modifier * available, which can be applied to functions to make sure there are no nested * (reentrant) calls to them. * * Note that because there is a single `nonReentrant` guard, functions marked as * `nonReentrant` may not call one another. This can be worked around by making * those functions `private`, and then adding `external` `nonReentrant` entry * points to them. * * TIP: If you would like to learn more about reentrancy and alternative ways * to protect against it, check out our blog post * https://blog.openzeppelin.com/reentrancy-after-istanbul/[Reentrancy After Istanbul]. */ contract ReentrancyGuard { // Booleans are more expensive than uint256 or any type that takes up a full // word because each write operation emits an extra SLOAD to first read the // slot's contents, replace the bits taken up by the boolean, and then write // back. This is the compiler's defense against contract upgrades and // pointer aliasing, and it cannot be disabled. // The values being non-zero value makes deployment a bit more expensive, // but in exchange the refund on every call to nonReentrant will be lower in // amount. Since refunds are capped to a percentage of the total // transaction's gas, it is best to keep them low in cases like this one, to // increase the likelihood of the full refund coming into effect. uint256 private constant _NOT_ENTERED = 1; uint256 private constant _ENTERED = 2; uint256 private _status; constructor () { _status = _NOT_ENTERED; } /** * @dev Prevents a contract from calling itself, directly or indirectly. * Calling a `nonReentrant` function from another `nonReentrant` * function is not supported. It is possible to prevent this from happening * by making the `nonReentrant` function external, and make it call a * `private` function that does the actual work. */ modifier nonReentrant() { // On the first call to nonReentrant, _notEntered will be true require(_status != _ENTERED, "ReentrancyGuard: reentrant call"); // Any calls to nonReentrant after this point will fail _status = _ENTERED; _; // By storing the original value once again, a refund is triggered (see // https://eips.ethereum.org/EIPS/eip-2200) _status = _NOT_ENTERED; } }
// SPDX-License-Identifier: bsl-1.1 /* Copyright 2020 Unit Protocol: Artem Zakharov ([email protected]). */ pragma solidity 0.7.6; /** * @title SafeMath * @dev Math operations with safety checks that throw on error */ library SafeMath { /** * @dev Multiplies two numbers, throws on overflow. */ function mul(uint256 a, uint256 b) internal pure returns (uint256 c) { if (a == 0) { return 0; } c = a * b; assert(c / a == b); return c; } /** * @dev Integer division of two numbers, truncating the quotient. */ function div(uint256 a, uint256 b) internal pure returns (uint256) { require(b != 0, "SafeMath: division by zero"); return a / b; } /** * @dev Subtracts two numbers, throws on overflow (i.e. if subtrahend is greater than minuend). */ function sub(uint256 a, uint256 b) internal pure returns (uint256) { assert(b <= a); return a - b; } /** * @dev Adds two numbers, throws on overflow. */ function add(uint256 a, uint256 b) internal pure returns (uint256 c) { c = a + b; assert(c >= a); return c; } }
// SPDX-License-Identifier: bsl-1.1 /* Copyright 2021 Unit Protocol: Artem Zakharov ([email protected]). */ pragma solidity ^0.7.6; interface IVaultManagerBorrowFeeParameters { /** * @notice 1 = 100% = 10000 basis points **/ function BASIS_POINTS_IN_1() external view returns (uint); /** * @notice Borrow fee receiver **/ function feeReceiver() external view returns (address); /** * @notice Sets the borrow fee receiver. Only manager is able to call this function * @param newFeeReceiver The address of fee receiver **/ function setFeeReceiver(address newFeeReceiver) external; /** * @notice Sets the base borrow fee in basis points (1bp = 0.01% = 0.0001). Only manager is able to call this function * @param newBaseBorrowFeeBasisPoints The borrow fee in basis points **/ function setBaseBorrowFee(uint16 newBaseBorrowFeeBasisPoints) external; /** * @notice Sets the borrow fee for a particular collateral in basis points (1bp = 0.01% = 0.0001). Only manager is able to call this function * @param asset The address of the main collateral token * @param newEnabled Is custom fee enabled for asset * @param newFeeBasisPoints The borrow fee in basis points **/ function setAssetBorrowFee(address asset, bool newEnabled, uint16 newFeeBasisPoints) external; /** * @notice Returns borrow fee for particular collateral in basis points (1bp = 0.01% = 0.0001) * @param asset The address of the main collateral token * @return feeBasisPoints The borrow fee in basis points **/ function getBorrowFee(address asset) external view returns (uint16 feeBasisPoints); /** * @notice Returns borrow fee for usdp amount for particular collateral * @param asset The address of the main collateral token * @return The borrow fee **/ function calcBorrowFeeAmount(address asset, uint usdpAmount) external view returns (uint); }
// SPDX-License-Identifier: GPL-3.0-or-later /* Copyright 2020 Unit Protocol: Artem Zakharov ([email protected]). */ pragma solidity 0.7.6; // helper methods for interacting with ERC20 tokens and sending ETH that do not consistently return true/false library TransferHelper { function safeApprove(address token, address to, uint value) internal { // bytes4(keccak256(bytes('approve(address,uint256)'))); (bool success, bytes memory data) = token.call(abi.encodeWithSelector(0x095ea7b3, to, value)); require(success && (data.length == 0 || abi.decode(data, (bool))), 'TransferHelper: APPROVE_FAILED'); } function safeTransfer(address token, address to, uint value) internal { // bytes4(keccak256(bytes('transfer(address,uint256)'))); (bool success, bytes memory data) = token.call(abi.encodeWithSelector(0xa9059cbb, to, value)); require(success && (data.length == 0 || abi.decode(data, (bool))), 'TransferHelper: TRANSFER_FAILED'); } function safeTransferFrom(address token, address from, address to, uint value) internal { // bytes4(keccak256(bytes('transferFrom(address,address,uint256)'))); (bool success, bytes memory data) = token.call(abi.encodeWithSelector(0x23b872dd, from, to, value)); require(success && (data.length == 0 || abi.decode(data, (bool))), 'TransferHelper: TRANSFER_FROM_FAILED'); } function safeTransferETH(address to, uint value) internal { (bool success,) = to.call{value:value}(new bytes(0)); require(success, 'TransferHelper: ETH_TRANSFER_FAILED'); } }
// SPDX-License-Identifier: MIT pragma solidity >=0.6.0 <0.8.0; /** * @dev Interface of the ERC20 standard as defined in the EIP. */ interface IERC20 { /** * @dev Returns the amount of tokens in existence. */ function totalSupply() external view returns (uint256); /** * @dev Returns the amount of tokens owned by `account`. */ function balanceOf(address account) external view returns (uint256); /** * @dev Moves `amount` tokens from the caller's account to `recipient`. * * Returns a boolean value indicating whether the operation succeeded. * * Emits a {Transfer} event. */ function transfer(address recipient, uint256 amount) external returns (bool); /** * @dev Returns the remaining number of tokens that `spender` will be * allowed to spend on behalf of `owner` through {transferFrom}. This is * zero by default. * * This value changes when {approve} or {transferFrom} are called. */ function allowance(address owner, address spender) external view returns (uint256); /** * @dev Sets `amount` as the allowance of `spender` over the caller's tokens. * * Returns a boolean value indicating whether the operation succeeded. * * IMPORTANT: Beware that changing an allowance with this method brings the risk * that someone may use both the old and the new allowance by unfortunate * transaction ordering. One possible solution to mitigate this race * condition is to first reduce the spender's allowance to 0 and set the * desired value afterwards: * https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729 * * Emits an {Approval} event. */ function approve(address spender, uint256 amount) external returns (bool); /** * @dev Moves `amount` tokens from `sender` to `recipient` using the * allowance mechanism. `amount` is then deducted from the caller's * allowance. * * Returns a boolean value indicating whether the operation succeeded. * * Emits a {Transfer} event. */ function transferFrom(address sender, address recipient, uint256 amount) external returns (bool); /** * @dev Emitted when `value` tokens are moved from one account (`from`) to * another (`to`). * * Note that `value` may be zero. */ event Transfer(address indexed from, address indexed to, uint256 value); /** * @dev Emitted when the allowance of a `spender` for an `owner` is set by * a call to {approve}. `value` is the new allowance. */ event Approval(address indexed owner, address indexed spender, uint256 value); }
{ "optimizer": { "enabled": true, "runs": 200 }, "outputSelection": { "*": { "*": [ "evm.bytecode", "evm.deployedBytecode", "devdoc", "userdoc", "metadata", "abi" ] } }, "libraries": {} }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
Contract ABI
API[{"inputs":[{"internalType":"address","name":"_vaultManagerParameters","type":"address"},{"internalType":"address","name":"_oracleRegistry","type":"address"},{"internalType":"address","name":"_cdpRegistry","type":"address"},{"internalType":"address","name":"_vaultManagerBorrowFeeParameters","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"asset","type":"address"},{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":false,"internalType":"uint256","name":"main","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"usdp","type":"uint256"}],"name":"Exit","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"asset","type":"address"},{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":false,"internalType":"uint256","name":"main","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"usdp","type":"uint256"}],"name":"Join","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"asset","type":"address"},{"indexed":true,"internalType":"address","name":"owner","type":"address"}],"name":"LiquidationTriggered","type":"event"},{"inputs":[],"name":"DENOMINATOR_1E5","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"Q112","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"WETH","outputs":[{"internalType":"address payable","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"cdpRegistry","outputs":[{"internalType":"contract ICDPRegistry","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"asset","type":"address"},{"internalType":"uint256","name":"assetAmount","type":"uint256"},{"internalType":"uint256","name":"usdpAmount","type":"uint256"}],"name":"exit","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"ethAmount","type":"uint256"},{"internalType":"uint256","name":"usdpAmount","type":"uint256"}],"name":"exit_Eth","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"ethAmount","type":"uint256"},{"internalType":"uint256","name":"repayment","type":"uint256"}],"name":"exit_Eth_targetRepayment","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"asset","type":"address"},{"internalType":"uint256","name":"assetAmount","type":"uint256"},{"internalType":"uint256","name":"repayment","type":"uint256"}],"name":"exit_targetRepayment","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"asset","type":"address"},{"internalType":"address","name":"owner","type":"address"}],"name":"getCollateralUsdValue_q112","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"asset","type":"address"},{"internalType":"address","name":"owner","type":"address"}],"name":"isLiquidatablePosition","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"asset","type":"address"},{"internalType":"uint256","name":"assetAmount","type":"uint256"},{"internalType":"uint256","name":"usdpAmount","type":"uint256"}],"name":"join","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"usdpAmount","type":"uint256"}],"name":"join_Eth","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"address","name":"asset","type":"address"},{"internalType":"address","name":"owner","type":"address"}],"name":"liquidationPrice_q112","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"oracleRegistry","outputs":[{"internalType":"contract IOracleRegistry","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"asset","type":"address"},{"internalType":"address","name":"owner","type":"address"}],"name":"triggerLiquidation","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"usdp","outputs":[{"internalType":"contract IERC20","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"asset","type":"address"},{"internalType":"address","name":"owner","type":"address"}],"name":"utilizationRatio","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"vault","outputs":[{"internalType":"contract IVault","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"vaultManagerBorrowFeeParameters","outputs":[{"internalType":"contract IVaultManagerBorrowFeeParameters","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"vaultManagerParameters","outputs":[{"internalType":"contract IVaultManagerParameters","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"stateMutability":"payable","type":"receive"}]
Contract Creation Code
6101606040523480156200001257600080fd5b50604051620031cf380380620031cf833981810160405260808110156200003857600080fd5b50805160208201516040830151606090930151600160005591929091838383836001600160a01b038416158015906200007957506001600160a01b03831615155b80156200008e57506001600160a01b03821615155b8015620000a357506001600160a01b03811615155b620000f5576040805162461bcd60e51b815260206004820152601b60248201527f556e69742050726f746f636f6c3a20494e56414c49445f415247530000000000604482015290519081900360640190fd5b836001600160a01b031660a0816001600160a01b031660601b815250506000846001600160a01b031663aca345ee6040518163ffffffff1660e01b815260040160206040518083038186803b1580156200014e57600080fd5b505afa15801562000163573d6000803e3d6000fd5b505050506040513d60208110156200017a57600080fd5b50516040805163fbfa77cf60e01b815290516001600160a01b039092169163fbfa77cf91600480820192602092909190829003018186803b158015620001bf57600080fd5b505afa158015620001d4573d6000803e3d6000fd5b505050506040513d6020811015620001eb57600080fd5b50516001600160601b0319606082811b821660805286811b821660c05285811b821660e05284901b166101005260408051631d3981db60e21b815290519192506001600160a01b038316916374e6076c91600480820192602092909190829003018186803b1580156200025d57600080fd5b505afa15801562000272573d6000803e3d6000fd5b505050506040513d60208110156200028957600080fd5b505160601b6001600160601b03191661012052505060408051635651a2f760e11b815290516001600160a01b038916945063aca345ee935060048083019350602092829003018186803b158015620002e057600080fd5b505afa158015620002f5573d6000803e3d6000fd5b505050506040513d60208110156200030c57600080fd5b50516040805163fbfa77cf60e01b815290516001600160a01b039092169163fbfa77cf91600480820192602092909190829003018186803b1580156200035157600080fd5b505afa15801562000366573d6000803e3d6000fd5b505050506040513d60208110156200037d57600080fd5b505160408051633fc8cef360e01b815290516001600160a01b0390921691633fc8cef391600480820192602092909190829003018186803b158015620003c257600080fd5b505afa158015620003d7573d6000803e3d6000fd5b505050506040513d6020811015620003ee57600080fd5b50516001600160601b031960609190911b16610140525050505060805160601c60a05160601c60c05160601c60e05160601c6101005160601c6101205160601c6101405160601c612c826200054d600039806101335280610a725280610b075280610bbc5280610d745280610dc25280611b4a5280611ba05280611c52525080610cff5280612876528061292a52508061086052806127a0528061294c525080610d5052806111d65280611aa15250806108a85280610cdb52806117df528061240f52806124e85250806105d25280610d9852806113595280611ecb52806125f152508061051152806107cd52806109755280610bf25280610eda5280610f79528061103552806110e85280611411528061165a528061173152806117ae52806118ec528061198d5280611d5f5280611e105280611f8e5280612066528061213752806121c652806122b2528061236d528061269f5250612c826000f3fe6080604052600436106101235760003560e01c8063a3d84b5b116100a0578063bbdc953111610064578063bbdc95311461040e578063d4796d121461044d578063ea36380a14610488578063eb70d358146104c7578063fbfa77cf146104f7576101a7565b8063a3d84b5b14610360578063ab2a2a821461039f578063ad5c4648146103b4578063b7ebdc0c146103c9578063ba96208a146103de576101a7565b80633bf7a83e116100e75780633bf7a83e146102d15780634265607c146102e65780634bb93ab11461032157806374e6076c14610336578063971182c61461034b576101a7565b806312dc1dcc146101ac57806313084e15146101f9578063134a02dd1461022a578063252d040e1461027957806325df9058146102b4576101a7565b366101a757336001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016146101a5576040805162461bcd60e51b815260206004820152601960248201527f556e69742050726f746f636f6c3a205245535452494354454400000000000000604482015290519081900360640190fd5b005b600080fd5b3480156101b857600080fd5b506101e7600480360360408110156101cf57600080fd5b506001600160a01b038135811691602001351661050c565b60408051918252519081900360200190f35b34801561020557600080fd5b5061020e61085e565b604080516001600160a01b039092168252519081900360200190f35b34801561023657600080fd5b506102656004803603604081101561024d57600080fd5b506001600160a01b0381358116916020013516610882565b604080519115158252519081900360200190f35b34801561028557600080fd5b506101e76004803603604081101561029c57600080fd5b506001600160a01b03813581169160200135166108a4565b6101a5600480360360208110156102ca57600080fd5b5035610a6a565b3480156102dd57600080fd5b506101e7610be5565b3480156102f257600080fd5b506101e76004803603604081101561030957600080fd5b506001600160a01b0381358116916020013516610bed565b34801561032d57600080fd5b5061020e610cd9565b34801561034257600080fd5b5061020e610cfd565b34801561035757600080fd5b506101e7610d21565b34801561036c57600080fd5b506101e76004803603606081101561038357600080fd5b506001600160a01b038135169060208101359060400135610d28565b3480156103ab57600080fd5b5061020e610d4e565b3480156103c057600080fd5b5061020e610d72565b3480156103d557600080fd5b5061020e610d96565b3480156103ea57600080fd5b506101e76004803603604081101561040157600080fd5b5080359060200135610dba565b34801561041a57600080fd5b506101e76004803603606081101561043157600080fd5b506001600160a01b038135169060208101359060400135610df4565b34801561045957600080fd5b506101a56004803603604081101561047057600080fd5b506001600160a01b038135811691602001351661127b565b34801561049457600080fd5b506101a5600480360360608110156104ab57600080fd5b506001600160a01b0381351690602081013590604001356114f3565b3480156104d357600080fd5b506101e7600480360360408110156104ea57600080fd5b5080359060200135611b43565b34801561050357600080fd5b5061020e611d5d565b6000807f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663d6446d4385856040518363ffffffff1660e01b815260040180836001600160a01b03168152602001826001600160a01b031681526020019250505060206040518083038186803b15801561058d57600080fd5b505afa1580156105a1573d6000803e3d6000fd5b505050506040513d60208110156105b757600080fd5b50519050806105cb57600019915050610858565b60006106887f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316633bffbbe2876040518263ffffffff1660e01b815260040180826001600160a01b0316815260200191505060206040518083038186803b15801561063d57600080fd5b505afa158015610651573d6000803e3d6000fd5b505050506040513d602081101561066757600080fd5b5051610682600160701b61067c866064611d81565b90611d81565b90611da6565b90506012856001600160a01b031663313ce5676040518163ffffffff1660e01b815260040160206040518083038186803b1580156106c557600080fd5b505afa1580156106d9573d6000803e3d6000fd5b505050506040513d60208110156106ef57600080fd5b505160ff1611156107315760405162461bcd60e51b8152600401808060200182810382526025815260200180612c286025913960400191505060405180910390fd5b846001600160a01b031663313ce5676040518163ffffffff1660e01b815260040160206040518083038186803b15801561076a57600080fd5b505afa15801561077e573d6000803e3d6000fd5b505050506040513d602081101561079457600080fd5b50516040805163728f08cf60e11b81526001600160a01b0388811660048301528781166024830152915160129390930360ff16600a0a927f00000000000000000000000000000000000000000000000000000000000000009092169163e51e119e91604480820192602092909190829003018186803b15801561081657600080fd5b505afa15801561082a573d6000803e3d6000fd5b505050506040513d602081101561084057600080fd5b5051828161084a57fe5b048161085257fe5b04925050505b92915050565b7f000000000000000000000000000000000000000000000000000000000000000081565b60008061088f84846108a4565b905061089c848483611e0b565b949350505050565b60007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166338163032846040518263ffffffff1660e01b815260040180826001600160a01b0316815260200191505060206040518083038186803b15801561091357600080fd5b505afa158015610927573d6000803e3d6000fd5b505050506040513d602081101561093d57600080fd5b50516040805163728f08cf60e11b81526001600160a01b03868116600483015285811660248301529151928216926310e556989287927f00000000000000000000000000000000000000000000000000000000000000009091169163e51e119e91604480820192602092909190829003018186803b1580156109be57600080fd5b505afa1580156109d2573d6000803e3d6000fd5b505050506040513d60208110156109e857600080fd5b5051604080516001600160e01b031960e086901b1681526001600160a01b0390931660048401526024830191909152516044808301926020929190829003018186803b158015610a3757600080fd5b505afa158015610a4b573d6000803e3d6000fd5b505050506040513d6020811015610a6157600080fd5b50519392505050565b3415610bb7577f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663d0e30db0346040518263ffffffff1660e01b81526004016000604051808303818588803b158015610acb57600080fd5b505af1158015610adf573d6000803e3d6000fd5b50506040805163a9059cbb60e01b815233600482015234602482015290516001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016945063a9059cbb9350604480830193506020928290030181600087803b158015610b5057600080fd5b505af1158015610b64573d6000803e3d6000fd5b505050506040513d6020811015610b7a57600080fd5b5051610bb75760405162461bcd60e51b8152600401808060200182810382526023815260200180612b556023913960400191505060405180910390fd5b610be27f000000000000000000000000000000000000000000000000000000000000000034836114f3565b50565b600160701b81565b6000807f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663d6446d4385856040518363ffffffff1660e01b815260040180836001600160a01b03168152602001826001600160a01b031681526020019250505060206040518083038186803b158015610c6e57600080fd5b505afa158015610c82573d6000803e3d6000fd5b505050506040513d6020811015610c9857600080fd5b5051905080610cab576000915050610858565b6000610cb785856108a4565b9050610cd081610682600160701b61067c866064611d81565b95945050505050565b7f000000000000000000000000000000000000000000000000000000000000000081565b7f000000000000000000000000000000000000000000000000000000000000000081565b620186a081565b600080610d36853385611f84565b9050610d43858583610df4565b9150505b9392505050565b7f000000000000000000000000000000000000000000000000000000000000000081565b7f000000000000000000000000000000000000000000000000000000000000000081565b7f000000000000000000000000000000000000000000000000000000000000000081565b600080610de87f00000000000000000000000000000000000000000000000000000000000000003385611f84565b905061089c8482611b43565b600060026000541415610e4e576040805162461bcd60e51b815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c00604482015290519081900360640190fd5b6002600055833384151580610e6257508315155b610eaf576040805162461bcd60e51b81526020600482015260196024820152780aadcd2e840a0e4dee8dec6ded87440aaa68a988aa6a6bea8b603b1b604482015290519081900360640190fd5b60408051634ac1c33d60e01b81526001600160a01b03888116600483015233602483015291516000927f00000000000000000000000000000000000000000000000000000000000000001691634ac1c33d916044808301926020929190829003018186803b158015610f2057600080fd5b505afa158015610f34573d6000803e3d6000fd5b505050506040513d6020811015610f4a57600080fd5b5051905080851115610f5a578094505b85610f6f57610f6a873387612103565b611188565b8481141561102a577f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316638d7cad888833896040518463ffffffff1660e01b815260040180846001600160a01b03168152602001836001600160a01b031681526020018281526020019350505050600060405180830381600087803b158015610fff57600080fd5b505af1158015611013573d6000803e3d6000fd5b5050505084600014610f6a57610f6a873387612103565b6110338761240b565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316638d7cad888833896040518463ffffffff1660e01b815260040180846001600160a01b03168152602001836001600160a01b031681526020018281526020019350505050600060405180830381600087803b1580156110bb57600080fd5b505af11580156110cf573d6000803e3d6000fd5b50505050846000146110e6576110e6873387612103565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663c640752d88336040518363ffffffff1660e01b815260040180836001600160a01b03168152602001826001600160a01b0316815260200192505050600060405180830381600087803b15801561116657600080fd5b505af115801561117a573d6000803e3d6000fd5b5050505061118887336125d8565b6040805187815260208101879052815133926001600160a01b038b16927fa702ae6024e8b4c2b0eb162b1453dacb93cf6922f5a2d7236faed898c21148f8929081900390910190a3849350507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663bb55b7fc83836040518363ffffffff1660e01b815260040180836001600160a01b03168152602001826001600160a01b0316815260200192505050600060405180830381600087803b15801561125457600080fd5b505af1158015611268573d6000803e3d6000fd5b5050600160005550929695505050505050565b600260005414156112d3576040805162461bcd60e51b815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c00604482015290519081900360640190fd5b60026000556112e18261240b565b60006112ed83836108a4565b90506112fa838383611e0b565b61134b576040805162461bcd60e51b815260206004820152601c60248201527f556e69742050726f746f636f6c3a20534146455f504f534954494f4e00000000604482015290519081900360640190fd5b60006113f7620186a06106827f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166315a04ea2886040518263ffffffff1660e01b815260040180826001600160a01b0316815260200191505060206040518083038186803b1580156113c457600080fd5b505afa1580156113d8573d6000803e3d6000fd5b505050506040513d60208110156113ee57600080fd5b50518590611d81565b9050600061140d600160701b610682858561278a565b90507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663742a326e8686846040518463ffffffff1660e01b815260040180846001600160a01b03168152602001836001600160a01b031681526020018281526020019350505050600060405180830381600087803b15801561149757600080fd5b505af11580156114ab573d6000803e3d6000fd5b50506040516001600160a01b038088169350881691507f5b79a897d30813a62a1f95ba180d3320d3701d96605708b81105e00719a069e490600090a350506001600055505050565b6002600054141561154b576040805162461bcd60e51b815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c00604482015290519081900360640190fd5b600260005582338215158061155f57508315155b6115ac576040805162461bcd60e51b81526020600482015260196024820152780aadcd2e840a0e4dee8dec6ded87440aaa68a988aa6a6bea8b603b1b604482015290519081900360640190fd5b6012856001600160a01b031663313ce5676040518163ffffffff1660e01b815260040160206040518083038186803b1580156115e757600080fd5b505afa1580156115fb573d6000803e3d6000fd5b505050506040513d602081101561161157600080fd5b505160ff1611156116535760405162461bcd60e51b8152600401808060200182810382526025815260200180612c286025913960400191505060405180910390fd5b826116fd577f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663ee18359e8633876040518463ffffffff1660e01b815260040180846001600160a01b03168152602001836001600160a01b031681526020018281526020019350505050600060405180830381600087803b1580156116e057600080fd5b505af11580156116f4573d6000803e3d6000fd5b50505050611a57565b6117068561240b565b60408051634ac1c33d60e01b81526001600160a01b03878116600483015233602483015291516000927f00000000000000000000000000000000000000000000000000000000000000001691634ac1c33d916044808301926020929190829003018186803b15801561177757600080fd5b505afa15801561178b573d6000803e3d6000fd5b505050506040513d60208110156117a157600080fd5b505115159050806118e4577f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663c6d894f087337f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663fbcd55318b6040518263ffffffff1660e01b815260040180826001600160a01b0316815260200191505060206040518083038186803b15801561184a57600080fd5b505afa15801561185e573d6000803e3d6000fd5b505050506040513d602081101561187457600080fd5b5051604080516001600160e01b031960e087901b1681526001600160a01b03948516600482015292909316602483015260448201529051606480830192600092919082900301818387803b1580156118cb57600080fd5b505af11580156118df573d6000803e3d6000fd5b505050505b841561198b577f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663ee18359e8733886040518463ffffffff1660e01b815260040180846001600160a01b03168152602001836001600160a01b031681526020018281526020019350505050600060405180830381600087803b15801561197257600080fd5b505af1158015611986573d6000803e3d6000fd5b505050505b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316635224372c8733876040518463ffffffff1660e01b815260040180846001600160a01b03168152602001836001600160a01b031681526020018281526020019350505050602060405180830381600087803b158015611a1357600080fd5b505af1158015611a27573d6000803e3d6000fd5b505050506040513d6020811015611a3d57600080fd5b50611a4b905086338661279c565b611a5586336125d8565b505b6040805185815260208101859052815133926001600160a01b038916927f6423b6056e64b3b29cb2d342362b47c26fa8d6877da27ea152354060df19b9bc929081900390910190a37f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663bb55b7fc83836040518363ffffffff1660e01b815260040180836001600160a01b03168152602001826001600160a01b0316815260200192505050600060405180830381600087803b158015611b1f57600080fd5b505af1158015611b33573d6000803e3d6000fd5b5050600160005550505050505050565b6000611b707f00000000000000000000000000000000000000000000000000000000000000008484610df4565b604080516323b872dd60e01b81523360048201523060248201526044810186905290519193506001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016916323b872dd916064808201926020929091908290030181600087803b158015611be957600080fd5b505af1158015611bfd573d6000803e3d6000fd5b505050506040513d6020811015611c1357600080fd5b5051611c505760405162461bcd60e51b8152600401808060200182810382526028815260200180612b2d6028913960400191505060405180910390fd5b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316632e1a7d4d846040518263ffffffff1660e01b815260040180828152602001915050600060405180830381600087803b158015611cb657600080fd5b505af1158015611cca573d6000803e3d6000fd5b50506040516000925033915085908381818185875af1925050503d8060008114611d10576040519150601f19603f3d011682016040523d82523d6000602084013e611d15565b606091505b5050905080611d555760405162461bcd60e51b8152600401808060200182810382526022815260200180612bc06022913960400191505060405180910390fd5b509092915050565b7f000000000000000000000000000000000000000000000000000000000000000081565b600082611d9057506000610858565b5081810281838281611d9e57fe5b041461085857fe5b600081611dfa576040805162461bcd60e51b815260206004820152601a60248201527f536166654d6174683a206469766973696f6e206279207a65726f000000000000604482015290519081900360640190fd5b818381611e0357fe5b049392505050565b6000807f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663d6446d4386866040518363ffffffff1660e01b815260040180836001600160a01b03168152602001826001600160a01b031681526020019250505060206040518083038186803b158015611e8c57600080fd5b505afa158015611ea0573d6000803e3d6000fd5b505050506040513d6020811015611eb657600080fd5b5051905080611ec9576000915050610d47565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316633bffbbe2866040518263ffffffff1660e01b815260040180826001600160a01b0316815260200191505060206040518083038186803b158015611f3657600080fd5b505afa158015611f4a573d6000803e3d6000fd5b505050506040513d6020811015611f6057600080fd5b5051611f7984610682600160701b61067c866064611d81565b101595945050505050565b6000806301e133807f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166388ad7a6187876040518363ffffffff1660e01b815260040180836001600160a01b03168152602001826001600160a01b031681526020019250505060206040518083038186803b15801561200a57600080fd5b505afa15801561201e573d6000803e3d6000fd5b505050506040513d602081101561203457600080fd5b505160408051636a5c9edf60e11b81526001600160a01b038981166004830152888116602483015291514293909303927f00000000000000000000000000000000000000000000000000000000000000009092169163d4b93dbe91604480820192602092909190829003018186803b1580156120af57600080fd5b505afa1580156120c3573d6000803e3d6000fd5b505050506040513d60208110156120d957600080fd5b505102816120e357fe5b04905080620186a001620186a08402816120f957fe5b0495945050505050565b60408051633e543e5b60e11b81526001600160a01b03858116600483015284811660248301526044820184905291516000927f00000000000000000000000000000000000000000000000000000000000000001691637ca87cb6916064808301926020929190829003018186803b15801561217d57600080fd5b505afa158015612191573d6000803e3d6000fd5b505050506040513d60208110156121a757600080fd5b505160408051631d3981db60e21b815290519192506001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001691633d1aa9639183916374e6076c91600480820192602092909190829003018186803b15801561221557600080fd5b505afa158015612229573d6000803e3d6000fd5b505050506040513d602081101561223f57600080fd5b5051604080516001600160e01b031960e085901b1681526001600160a01b03928316600482015291871660248301526044820185905251606480830192600092919082900301818387803b15801561229657600080fd5b505af11580156122aa573d6000803e3d6000fd5b5050505060007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316631da649cf8686866040518463ffffffff1660e01b815260040180846001600160a01b03168152602001836001600160a01b031681526020018281526020019350505050602060405180830381600087803b15801561233857600080fd5b505af115801561234c573d6000803e3d6000fd5b505050506040513d602081101561236257600080fd5b5051905080612404577f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166362b40f9f86866040518363ffffffff1660e01b815260040180836001600160a01b03168152602001826001600160a01b0316815260200192505050600060405180830381600087803b1580156123eb57600080fd5b505af11580156123ff573d6000803e3d6000fd5b505050505b5050505050565b60007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663fbcd5531836040518263ffffffff1660e01b815260040180826001600160a01b0316815260200191505060206040518083038186803b15801561247a57600080fd5b505afa15801561248e573d6000803e3d6000fd5b505050506040513d60208110156124a457600080fd5b50519050806124e45760405162461bcd60e51b8152600401808060200182810382526022815260200180612b9e6022913960400191505060405180910390fd5b60007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663c5807dc6836040518263ffffffff1660e01b81526004018082815260200191505060206040518083038186803b15801561254a57600080fd5b505afa15801561255e573d6000803e3d6000fd5b505050506040513d602081101561257457600080fd5b505190506001600160a01b0381166125d3576040805162461bcd60e51b815260206004820152601e60248201527f556e69742050726f746f636f6c3a2044495341424c45445f4f5241434c450000604482015290519081900360640190fd5b505050565b60006125e483836108a4565b905060006064600160701b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663b85c4496876040518263ffffffff1660e01b815260040180826001600160a01b0316815260200191505060206040518083038186803b15801561265c57600080fd5b505afa158015612670573d6000803e3d6000fd5b505050506040513d602081101561268657600080fd5b505184028161269157fe5b048161269957fe5b049050807f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663d6446d4386866040518363ffffffff1660e01b815260040180836001600160a01b03168152602001826001600160a01b031681526020019250505060206040518083038186803b15801561271b57600080fd5b505afa15801561272f573d6000803e3d6000fd5b505050506040513d602081101561274557600080fd5b505111156127845760405162461bcd60e51b8152600401808060200182810382526022815260200180612c066022913960400191505060405180910390fd5b50505050565b60008282111561279657fe5b50900390565b60007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663fbbac96285846040518363ffffffff1660e01b815260040180836001600160a01b031681526020018281526020019250505060206040518083038186803b15801561281357600080fd5b505afa158015612827573d6000803e3d6000fd5b505050506040513d602081101561283d57600080fd5b505190508061284c57506125d3565b60408051636eb1769f60e11b81526001600160a01b038581166004830152306024830152915183927f0000000000000000000000000000000000000000000000000000000000000000169163dd62ed3e916044808301926020929190829003018186803b1580156128bc57600080fd5b505afa1580156128d0573d6000803e3d6000fd5b505050506040513d60208110156128e657600080fd5b505110156129255760405162461bcd60e51b8152600401808060200182810382526026815260200180612b786026913960400191505060405180910390fd5b6127847f0000000000000000000000000000000000000000000000000000000000000000847f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663b3f006746040518163ffffffff1660e01b815260040160206040518083038186803b1580156129a357600080fd5b505afa1580156129b7573d6000803e3d6000fd5b505050506040513d60208110156129cd57600080fd5b505184604080516001600160a01b0385811660248301528481166044830152606480830185905283518084039091018152608490920183526020820180516001600160e01b03166323b872dd60e01b178152925182516000948594938a169392918291908083835b60208310612a545780518252601f199092019160209182019101612a35565b6001836020036101000a0380198251168184511680821785525050505050509050019150506000604051808303816000865af19150503d8060008114612ab6576040519150601f19603f3d011682016040523d82523d6000602084013e612abb565b606091505b5091509150818015612ae9575080511580612ae95750808060200190516020811015612ae657600080fd5b50515b612b245760405162461bcd60e51b8152600401808060200182810382526024815260200180612be26024913960400191505060405180910390fd5b50505050505056fe556e69742050726f746f636f6c3a20574554485f5452414e534645525f46524f4d5f4641494c4544556e69742050726f746f636f6c3a20574554485f5452414e534645525f4641494c4544556e69742050726f746f636f6c3a20424f52524f575f4645455f4e4f545f415050524f564544556e69742050726f746f636f6c3a20494e56414c49445f4f5241434c455f54595045556e69742050726f746f636f6c3a204554485f5452414e534645525f4641494c45445472616e7366657248656c7065723a205452414e534645525f46524f4d5f4641494c4544556e69742050726f746f636f6c3a20554e444552434f4c4c41544552414c495a4544556e69742050726f746f636f6c3a204e4f545f535550504f525445445f444543494d414c53a26469706673582212207596838e2861aa3db0716c0f308b063fb06d5138d265e79d866326aa20a869bb64736f6c63430007060033000000000000000000000000203153522b9eaef4ae17c6e99851ee7b2f7d312e00000000000000000000000075fbfe26b21fd3ea008af0c764949f8214150c8f0000000000000000000000001a5ff58bc3246eb233fea20d32b79b5f01ec650c000000000000000000000000cba7154bfbf898d9ab0cf0e259abab6ccbfb4894
Deployed Bytecode
0x6080604052600436106101235760003560e01c8063a3d84b5b116100a0578063bbdc953111610064578063bbdc95311461040e578063d4796d121461044d578063ea36380a14610488578063eb70d358146104c7578063fbfa77cf146104f7576101a7565b8063a3d84b5b14610360578063ab2a2a821461039f578063ad5c4648146103b4578063b7ebdc0c146103c9578063ba96208a146103de576101a7565b80633bf7a83e116100e75780633bf7a83e146102d15780634265607c146102e65780634bb93ab11461032157806374e6076c14610336578063971182c61461034b576101a7565b806312dc1dcc146101ac57806313084e15146101f9578063134a02dd1461022a578063252d040e1461027957806325df9058146102b4576101a7565b366101a757336001600160a01b037f000000000000000000000000c02aaa39b223fe8d0a0e5c4f27ead9083c756cc216146101a5576040805162461bcd60e51b815260206004820152601960248201527f556e69742050726f746f636f6c3a205245535452494354454400000000000000604482015290519081900360640190fd5b005b600080fd5b3480156101b857600080fd5b506101e7600480360360408110156101cf57600080fd5b506001600160a01b038135811691602001351661050c565b60408051918252519081900360200190f35b34801561020557600080fd5b5061020e61085e565b604080516001600160a01b039092168252519081900360200190f35b34801561023657600080fd5b506102656004803603604081101561024d57600080fd5b506001600160a01b0381358116916020013516610882565b604080519115158252519081900360200190f35b34801561028557600080fd5b506101e76004803603604081101561029c57600080fd5b506001600160a01b03813581169160200135166108a4565b6101a5600480360360208110156102ca57600080fd5b5035610a6a565b3480156102dd57600080fd5b506101e7610be5565b3480156102f257600080fd5b506101e76004803603604081101561030957600080fd5b506001600160a01b0381358116916020013516610bed565b34801561032d57600080fd5b5061020e610cd9565b34801561034257600080fd5b5061020e610cfd565b34801561035757600080fd5b506101e7610d21565b34801561036c57600080fd5b506101e76004803603606081101561038357600080fd5b506001600160a01b038135169060208101359060400135610d28565b3480156103ab57600080fd5b5061020e610d4e565b3480156103c057600080fd5b5061020e610d72565b3480156103d557600080fd5b5061020e610d96565b3480156103ea57600080fd5b506101e76004803603604081101561040157600080fd5b5080359060200135610dba565b34801561041a57600080fd5b506101e76004803603606081101561043157600080fd5b506001600160a01b038135169060208101359060400135610df4565b34801561045957600080fd5b506101a56004803603604081101561047057600080fd5b506001600160a01b038135811691602001351661127b565b34801561049457600080fd5b506101a5600480360360608110156104ab57600080fd5b506001600160a01b0381351690602081013590604001356114f3565b3480156104d357600080fd5b506101e7600480360360408110156104ea57600080fd5b5080359060200135611b43565b34801561050357600080fd5b5061020e611d5d565b6000807f000000000000000000000000b1cff81b9305166ff1efc49a129ad2afcd7bcf196001600160a01b031663d6446d4385856040518363ffffffff1660e01b815260040180836001600160a01b03168152602001826001600160a01b031681526020019250505060206040518083038186803b15801561058d57600080fd5b505afa1580156105a1573d6000803e3d6000fd5b505050506040513d60208110156105b757600080fd5b50519050806105cb57600019915050610858565b60006106887f000000000000000000000000203153522b9eaef4ae17c6e99851ee7b2f7d312e6001600160a01b0316633bffbbe2876040518263ffffffff1660e01b815260040180826001600160a01b0316815260200191505060206040518083038186803b15801561063d57600080fd5b505afa158015610651573d6000803e3d6000fd5b505050506040513d602081101561066757600080fd5b5051610682600160701b61067c866064611d81565b90611d81565b90611da6565b90506012856001600160a01b031663313ce5676040518163ffffffff1660e01b815260040160206040518083038186803b1580156106c557600080fd5b505afa1580156106d9573d6000803e3d6000fd5b505050506040513d60208110156106ef57600080fd5b505160ff1611156107315760405162461bcd60e51b8152600401808060200182810382526025815260200180612c286025913960400191505060405180910390fd5b846001600160a01b031663313ce5676040518163ffffffff1660e01b815260040160206040518083038186803b15801561076a57600080fd5b505afa15801561077e573d6000803e3d6000fd5b505050506040513d602081101561079457600080fd5b50516040805163728f08cf60e11b81526001600160a01b0388811660048301528781166024830152915160129390930360ff16600a0a927f000000000000000000000000b1cff81b9305166ff1efc49a129ad2afcd7bcf199092169163e51e119e91604480820192602092909190829003018186803b15801561081657600080fd5b505afa15801561082a573d6000803e3d6000fd5b505050506040513d602081101561084057600080fd5b5051828161084a57fe5b048161085257fe5b04925050505b92915050565b7f000000000000000000000000cba7154bfbf898d9ab0cf0e259abab6ccbfb489481565b60008061088f84846108a4565b905061089c848483611e0b565b949350505050565b60007f00000000000000000000000075fbfe26b21fd3ea008af0c764949f8214150c8f6001600160a01b03166338163032846040518263ffffffff1660e01b815260040180826001600160a01b0316815260200191505060206040518083038186803b15801561091357600080fd5b505afa158015610927573d6000803e3d6000fd5b505050506040513d602081101561093d57600080fd5b50516040805163728f08cf60e11b81526001600160a01b03868116600483015285811660248301529151928216926310e556989287927f000000000000000000000000b1cff81b9305166ff1efc49a129ad2afcd7bcf199091169163e51e119e91604480820192602092909190829003018186803b1580156109be57600080fd5b505afa1580156109d2573d6000803e3d6000fd5b505050506040513d60208110156109e857600080fd5b5051604080516001600160e01b031960e086901b1681526001600160a01b0390931660048401526024830191909152516044808301926020929190829003018186803b158015610a3757600080fd5b505afa158015610a4b573d6000803e3d6000fd5b505050506040513d6020811015610a6157600080fd5b50519392505050565b3415610bb7577f000000000000000000000000c02aaa39b223fe8d0a0e5c4f27ead9083c756cc26001600160a01b031663d0e30db0346040518263ffffffff1660e01b81526004016000604051808303818588803b158015610acb57600080fd5b505af1158015610adf573d6000803e3d6000fd5b50506040805163a9059cbb60e01b815233600482015234602482015290516001600160a01b037f000000000000000000000000c02aaa39b223fe8d0a0e5c4f27ead9083c756cc216945063a9059cbb9350604480830193506020928290030181600087803b158015610b5057600080fd5b505af1158015610b64573d6000803e3d6000fd5b505050506040513d6020811015610b7a57600080fd5b5051610bb75760405162461bcd60e51b8152600401808060200182810382526023815260200180612b556023913960400191505060405180910390fd5b610be27f000000000000000000000000c02aaa39b223fe8d0a0e5c4f27ead9083c756cc234836114f3565b50565b600160701b81565b6000807f000000000000000000000000b1cff81b9305166ff1efc49a129ad2afcd7bcf196001600160a01b031663d6446d4385856040518363ffffffff1660e01b815260040180836001600160a01b03168152602001826001600160a01b031681526020019250505060206040518083038186803b158015610c6e57600080fd5b505afa158015610c82573d6000803e3d6000fd5b505050506040513d6020811015610c9857600080fd5b5051905080610cab576000915050610858565b6000610cb785856108a4565b9050610cd081610682600160701b61067c866064611d81565b95945050505050565b7f00000000000000000000000075fbfe26b21fd3ea008af0c764949f8214150c8f81565b7f0000000000000000000000001456688345527be1f37e9e627da0837d6f08c92581565b620186a081565b600080610d36853385611f84565b9050610d43858583610df4565b9150505b9392505050565b7f0000000000000000000000001a5ff58bc3246eb233fea20d32b79b5f01ec650c81565b7f000000000000000000000000c02aaa39b223fe8d0a0e5c4f27ead9083c756cc281565b7f000000000000000000000000203153522b9eaef4ae17c6e99851ee7b2f7d312e81565b600080610de87f000000000000000000000000c02aaa39b223fe8d0a0e5c4f27ead9083c756cc23385611f84565b905061089c8482611b43565b600060026000541415610e4e576040805162461bcd60e51b815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c00604482015290519081900360640190fd5b6002600055833384151580610e6257508315155b610eaf576040805162461bcd60e51b81526020600482015260196024820152780aadcd2e840a0e4dee8dec6ded87440aaa68a988aa6a6bea8b603b1b604482015290519081900360640190fd5b60408051634ac1c33d60e01b81526001600160a01b03888116600483015233602483015291516000927f000000000000000000000000b1cff81b9305166ff1efc49a129ad2afcd7bcf191691634ac1c33d916044808301926020929190829003018186803b158015610f2057600080fd5b505afa158015610f34573d6000803e3d6000fd5b505050506040513d6020811015610f4a57600080fd5b5051905080851115610f5a578094505b85610f6f57610f6a873387612103565b611188565b8481141561102a577f000000000000000000000000b1cff81b9305166ff1efc49a129ad2afcd7bcf196001600160a01b0316638d7cad888833896040518463ffffffff1660e01b815260040180846001600160a01b03168152602001836001600160a01b031681526020018281526020019350505050600060405180830381600087803b158015610fff57600080fd5b505af1158015611013573d6000803e3d6000fd5b5050505084600014610f6a57610f6a873387612103565b6110338761240b565b7f000000000000000000000000b1cff81b9305166ff1efc49a129ad2afcd7bcf196001600160a01b0316638d7cad888833896040518463ffffffff1660e01b815260040180846001600160a01b03168152602001836001600160a01b031681526020018281526020019350505050600060405180830381600087803b1580156110bb57600080fd5b505af11580156110cf573d6000803e3d6000fd5b50505050846000146110e6576110e6873387612103565b7f000000000000000000000000b1cff81b9305166ff1efc49a129ad2afcd7bcf196001600160a01b031663c640752d88336040518363ffffffff1660e01b815260040180836001600160a01b03168152602001826001600160a01b0316815260200192505050600060405180830381600087803b15801561116657600080fd5b505af115801561117a573d6000803e3d6000fd5b5050505061118887336125d8565b6040805187815260208101879052815133926001600160a01b038b16927fa702ae6024e8b4c2b0eb162b1453dacb93cf6922f5a2d7236faed898c21148f8929081900390910190a3849350507f0000000000000000000000001a5ff58bc3246eb233fea20d32b79b5f01ec650c6001600160a01b031663bb55b7fc83836040518363ffffffff1660e01b815260040180836001600160a01b03168152602001826001600160a01b0316815260200192505050600060405180830381600087803b15801561125457600080fd5b505af1158015611268573d6000803e3d6000fd5b5050600160005550929695505050505050565b600260005414156112d3576040805162461bcd60e51b815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c00604482015290519081900360640190fd5b60026000556112e18261240b565b60006112ed83836108a4565b90506112fa838383611e0b565b61134b576040805162461bcd60e51b815260206004820152601c60248201527f556e69742050726f746f636f6c3a20534146455f504f534954494f4e00000000604482015290519081900360640190fd5b60006113f7620186a06106827f000000000000000000000000203153522b9eaef4ae17c6e99851ee7b2f7d312e6001600160a01b03166315a04ea2886040518263ffffffff1660e01b815260040180826001600160a01b0316815260200191505060206040518083038186803b1580156113c457600080fd5b505afa1580156113d8573d6000803e3d6000fd5b505050506040513d60208110156113ee57600080fd5b50518590611d81565b9050600061140d600160701b610682858561278a565b90507f000000000000000000000000b1cff81b9305166ff1efc49a129ad2afcd7bcf196001600160a01b031663742a326e8686846040518463ffffffff1660e01b815260040180846001600160a01b03168152602001836001600160a01b031681526020018281526020019350505050600060405180830381600087803b15801561149757600080fd5b505af11580156114ab573d6000803e3d6000fd5b50506040516001600160a01b038088169350881691507f5b79a897d30813a62a1f95ba180d3320d3701d96605708b81105e00719a069e490600090a350506001600055505050565b6002600054141561154b576040805162461bcd60e51b815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c00604482015290519081900360640190fd5b600260005582338215158061155f57508315155b6115ac576040805162461bcd60e51b81526020600482015260196024820152780aadcd2e840a0e4dee8dec6ded87440aaa68a988aa6a6bea8b603b1b604482015290519081900360640190fd5b6012856001600160a01b031663313ce5676040518163ffffffff1660e01b815260040160206040518083038186803b1580156115e757600080fd5b505afa1580156115fb573d6000803e3d6000fd5b505050506040513d602081101561161157600080fd5b505160ff1611156116535760405162461bcd60e51b8152600401808060200182810382526025815260200180612c286025913960400191505060405180910390fd5b826116fd577f000000000000000000000000b1cff81b9305166ff1efc49a129ad2afcd7bcf196001600160a01b031663ee18359e8633876040518463ffffffff1660e01b815260040180846001600160a01b03168152602001836001600160a01b031681526020018281526020019350505050600060405180830381600087803b1580156116e057600080fd5b505af11580156116f4573d6000803e3d6000fd5b50505050611a57565b6117068561240b565b60408051634ac1c33d60e01b81526001600160a01b03878116600483015233602483015291516000927f000000000000000000000000b1cff81b9305166ff1efc49a129ad2afcd7bcf191691634ac1c33d916044808301926020929190829003018186803b15801561177757600080fd5b505afa15801561178b573d6000803e3d6000fd5b505050506040513d60208110156117a157600080fd5b505115159050806118e4577f000000000000000000000000b1cff81b9305166ff1efc49a129ad2afcd7bcf196001600160a01b031663c6d894f087337f00000000000000000000000075fbfe26b21fd3ea008af0c764949f8214150c8f6001600160a01b031663fbcd55318b6040518263ffffffff1660e01b815260040180826001600160a01b0316815260200191505060206040518083038186803b15801561184a57600080fd5b505afa15801561185e573d6000803e3d6000fd5b505050506040513d602081101561187457600080fd5b5051604080516001600160e01b031960e087901b1681526001600160a01b03948516600482015292909316602483015260448201529051606480830192600092919082900301818387803b1580156118cb57600080fd5b505af11580156118df573d6000803e3d6000fd5b505050505b841561198b577f000000000000000000000000b1cff81b9305166ff1efc49a129ad2afcd7bcf196001600160a01b031663ee18359e8733886040518463ffffffff1660e01b815260040180846001600160a01b03168152602001836001600160a01b031681526020018281526020019350505050600060405180830381600087803b15801561197257600080fd5b505af1158015611986573d6000803e3d6000fd5b505050505b7f000000000000000000000000b1cff81b9305166ff1efc49a129ad2afcd7bcf196001600160a01b0316635224372c8733876040518463ffffffff1660e01b815260040180846001600160a01b03168152602001836001600160a01b031681526020018281526020019350505050602060405180830381600087803b158015611a1357600080fd5b505af1158015611a27573d6000803e3d6000fd5b505050506040513d6020811015611a3d57600080fd5b50611a4b905086338661279c565b611a5586336125d8565b505b6040805185815260208101859052815133926001600160a01b038916927f6423b6056e64b3b29cb2d342362b47c26fa8d6877da27ea152354060df19b9bc929081900390910190a37f0000000000000000000000001a5ff58bc3246eb233fea20d32b79b5f01ec650c6001600160a01b031663bb55b7fc83836040518363ffffffff1660e01b815260040180836001600160a01b03168152602001826001600160a01b0316815260200192505050600060405180830381600087803b158015611b1f57600080fd5b505af1158015611b33573d6000803e3d6000fd5b5050600160005550505050505050565b6000611b707f000000000000000000000000c02aaa39b223fe8d0a0e5c4f27ead9083c756cc28484610df4565b604080516323b872dd60e01b81523360048201523060248201526044810186905290519193506001600160a01b037f000000000000000000000000c02aaa39b223fe8d0a0e5c4f27ead9083c756cc216916323b872dd916064808201926020929091908290030181600087803b158015611be957600080fd5b505af1158015611bfd573d6000803e3d6000fd5b505050506040513d6020811015611c1357600080fd5b5051611c505760405162461bcd60e51b8152600401808060200182810382526028815260200180612b2d6028913960400191505060405180910390fd5b7f000000000000000000000000c02aaa39b223fe8d0a0e5c4f27ead9083c756cc26001600160a01b0316632e1a7d4d846040518263ffffffff1660e01b815260040180828152602001915050600060405180830381600087803b158015611cb657600080fd5b505af1158015611cca573d6000803e3d6000fd5b50506040516000925033915085908381818185875af1925050503d8060008114611d10576040519150601f19603f3d011682016040523d82523d6000602084013e611d15565b606091505b5050905080611d555760405162461bcd60e51b8152600401808060200182810382526022815260200180612bc06022913960400191505060405180910390fd5b509092915050565b7f000000000000000000000000b1cff81b9305166ff1efc49a129ad2afcd7bcf1981565b600082611d9057506000610858565b5081810281838281611d9e57fe5b041461085857fe5b600081611dfa576040805162461bcd60e51b815260206004820152601a60248201527f536166654d6174683a206469766973696f6e206279207a65726f000000000000604482015290519081900360640190fd5b818381611e0357fe5b049392505050565b6000807f000000000000000000000000b1cff81b9305166ff1efc49a129ad2afcd7bcf196001600160a01b031663d6446d4386866040518363ffffffff1660e01b815260040180836001600160a01b03168152602001826001600160a01b031681526020019250505060206040518083038186803b158015611e8c57600080fd5b505afa158015611ea0573d6000803e3d6000fd5b505050506040513d6020811015611eb657600080fd5b5051905080611ec9576000915050610d47565b7f000000000000000000000000203153522b9eaef4ae17c6e99851ee7b2f7d312e6001600160a01b0316633bffbbe2866040518263ffffffff1660e01b815260040180826001600160a01b0316815260200191505060206040518083038186803b158015611f3657600080fd5b505afa158015611f4a573d6000803e3d6000fd5b505050506040513d6020811015611f6057600080fd5b5051611f7984610682600160701b61067c866064611d81565b101595945050505050565b6000806301e133807f000000000000000000000000b1cff81b9305166ff1efc49a129ad2afcd7bcf196001600160a01b03166388ad7a6187876040518363ffffffff1660e01b815260040180836001600160a01b03168152602001826001600160a01b031681526020019250505060206040518083038186803b15801561200a57600080fd5b505afa15801561201e573d6000803e3d6000fd5b505050506040513d602081101561203457600080fd5b505160408051636a5c9edf60e11b81526001600160a01b038981166004830152888116602483015291514293909303927f000000000000000000000000b1cff81b9305166ff1efc49a129ad2afcd7bcf199092169163d4b93dbe91604480820192602092909190829003018186803b1580156120af57600080fd5b505afa1580156120c3573d6000803e3d6000fd5b505050506040513d60208110156120d957600080fd5b505102816120e357fe5b04905080620186a001620186a08402816120f957fe5b0495945050505050565b60408051633e543e5b60e11b81526001600160a01b03858116600483015284811660248301526044820184905291516000927f000000000000000000000000b1cff81b9305166ff1efc49a129ad2afcd7bcf191691637ca87cb6916064808301926020929190829003018186803b15801561217d57600080fd5b505afa158015612191573d6000803e3d6000fd5b505050506040513d60208110156121a757600080fd5b505160408051631d3981db60e21b815290519192506001600160a01b037f000000000000000000000000b1cff81b9305166ff1efc49a129ad2afcd7bcf191691633d1aa9639183916374e6076c91600480820192602092909190829003018186803b15801561221557600080fd5b505afa158015612229573d6000803e3d6000fd5b505050506040513d602081101561223f57600080fd5b5051604080516001600160e01b031960e085901b1681526001600160a01b03928316600482015291871660248301526044820185905251606480830192600092919082900301818387803b15801561229657600080fd5b505af11580156122aa573d6000803e3d6000fd5b5050505060007f000000000000000000000000b1cff81b9305166ff1efc49a129ad2afcd7bcf196001600160a01b0316631da649cf8686866040518463ffffffff1660e01b815260040180846001600160a01b03168152602001836001600160a01b031681526020018281526020019350505050602060405180830381600087803b15801561233857600080fd5b505af115801561234c573d6000803e3d6000fd5b505050506040513d602081101561236257600080fd5b5051905080612404577f000000000000000000000000b1cff81b9305166ff1efc49a129ad2afcd7bcf196001600160a01b03166362b40f9f86866040518363ffffffff1660e01b815260040180836001600160a01b03168152602001826001600160a01b0316815260200192505050600060405180830381600087803b1580156123eb57600080fd5b505af11580156123ff573d6000803e3d6000fd5b505050505b5050505050565b60007f00000000000000000000000075fbfe26b21fd3ea008af0c764949f8214150c8f6001600160a01b031663fbcd5531836040518263ffffffff1660e01b815260040180826001600160a01b0316815260200191505060206040518083038186803b15801561247a57600080fd5b505afa15801561248e573d6000803e3d6000fd5b505050506040513d60208110156124a457600080fd5b50519050806124e45760405162461bcd60e51b8152600401808060200182810382526022815260200180612b9e6022913960400191505060405180910390fd5b60007f00000000000000000000000075fbfe26b21fd3ea008af0c764949f8214150c8f6001600160a01b031663c5807dc6836040518263ffffffff1660e01b81526004018082815260200191505060206040518083038186803b15801561254a57600080fd5b505afa15801561255e573d6000803e3d6000fd5b505050506040513d602081101561257457600080fd5b505190506001600160a01b0381166125d3576040805162461bcd60e51b815260206004820152601e60248201527f556e69742050726f746f636f6c3a2044495341424c45445f4f5241434c450000604482015290519081900360640190fd5b505050565b60006125e483836108a4565b905060006064600160701b7f000000000000000000000000203153522b9eaef4ae17c6e99851ee7b2f7d312e6001600160a01b031663b85c4496876040518263ffffffff1660e01b815260040180826001600160a01b0316815260200191505060206040518083038186803b15801561265c57600080fd5b505afa158015612670573d6000803e3d6000fd5b505050506040513d602081101561268657600080fd5b505184028161269157fe5b048161269957fe5b049050807f000000000000000000000000b1cff81b9305166ff1efc49a129ad2afcd7bcf196001600160a01b031663d6446d4386866040518363ffffffff1660e01b815260040180836001600160a01b03168152602001826001600160a01b031681526020019250505060206040518083038186803b15801561271b57600080fd5b505afa15801561272f573d6000803e3d6000fd5b505050506040513d602081101561274557600080fd5b505111156127845760405162461bcd60e51b8152600401808060200182810382526022815260200180612c066022913960400191505060405180910390fd5b50505050565b60008282111561279657fe5b50900390565b60007f000000000000000000000000cba7154bfbf898d9ab0cf0e259abab6ccbfb48946001600160a01b031663fbbac96285846040518363ffffffff1660e01b815260040180836001600160a01b031681526020018281526020019250505060206040518083038186803b15801561281357600080fd5b505afa158015612827573d6000803e3d6000fd5b505050506040513d602081101561283d57600080fd5b505190508061284c57506125d3565b60408051636eb1769f60e11b81526001600160a01b038581166004830152306024830152915183927f0000000000000000000000001456688345527be1f37e9e627da0837d6f08c925169163dd62ed3e916044808301926020929190829003018186803b1580156128bc57600080fd5b505afa1580156128d0573d6000803e3d6000fd5b505050506040513d60208110156128e657600080fd5b505110156129255760405162461bcd60e51b8152600401808060200182810382526026815260200180612b786026913960400191505060405180910390fd5b6127847f0000000000000000000000001456688345527be1f37e9e627da0837d6f08c925847f000000000000000000000000cba7154bfbf898d9ab0cf0e259abab6ccbfb48946001600160a01b031663b3f006746040518163ffffffff1660e01b815260040160206040518083038186803b1580156129a357600080fd5b505afa1580156129b7573d6000803e3d6000fd5b505050506040513d60208110156129cd57600080fd5b505184604080516001600160a01b0385811660248301528481166044830152606480830185905283518084039091018152608490920183526020820180516001600160e01b03166323b872dd60e01b178152925182516000948594938a169392918291908083835b60208310612a545780518252601f199092019160209182019101612a35565b6001836020036101000a0380198251168184511680821785525050505050509050019150506000604051808303816000865af19150503d8060008114612ab6576040519150601f19603f3d011682016040523d82523d6000602084013e612abb565b606091505b5091509150818015612ae9575080511580612ae95750808060200190516020811015612ae657600080fd5b50515b612b245760405162461bcd60e51b8152600401808060200182810382526024815260200180612be26024913960400191505060405180910390fd5b50505050505056fe556e69742050726f746f636f6c3a20574554485f5452414e534645525f46524f4d5f4641494c4544556e69742050726f746f636f6c3a20574554485f5452414e534645525f4641494c4544556e69742050726f746f636f6c3a20424f52524f575f4645455f4e4f545f415050524f564544556e69742050726f746f636f6c3a20494e56414c49445f4f5241434c455f54595045556e69742050726f746f636f6c3a204554485f5452414e534645525f4641494c45445472616e7366657248656c7065723a205452414e534645525f46524f4d5f4641494c4544556e69742050726f746f636f6c3a20554e444552434f4c4c41544552414c495a4544556e69742050726f746f636f6c3a204e4f545f535550504f525445445f444543494d414c53a26469706673582212207596838e2861aa3db0716c0f308b063fb06d5138d265e79d866326aa20a869bb64736f6c63430007060033
Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)
000000000000000000000000203153522b9eaef4ae17c6e99851ee7b2f7d312e00000000000000000000000075fbfe26b21fd3ea008af0c764949f8214150c8f0000000000000000000000001a5ff58bc3246eb233fea20d32b79b5f01ec650c000000000000000000000000cba7154bfbf898d9ab0cf0e259abab6ccbfb4894
-----Decoded View---------------
Arg [0] : _vaultManagerParameters (address): 0x203153522B9EAef4aE17c6e99851EE7b2F7D312E
Arg [1] : _oracleRegistry (address): 0x75fBFe26B21fd3EA008af0C764949f8214150C8f
Arg [2] : _cdpRegistry (address): 0x1a5Ff58BC3246Eb233fEA20D32b79B5F01eC650c
Arg [3] : _vaultManagerBorrowFeeParameters (address): 0xCbA7154bfBF898d9AB0cf0e259ABAB6CcbfB4894
-----Encoded View---------------
4 Constructor Arguments found :
Arg [0] : 000000000000000000000000203153522b9eaef4ae17c6e99851ee7b2f7d312e
Arg [1] : 00000000000000000000000075fbfe26b21fd3ea008af0c764949f8214150c8f
Arg [2] : 0000000000000000000000001a5ff58bc3246eb233fea20d32b79b5f01ec650c
Arg [3] : 000000000000000000000000cba7154bfbf898d9ab0cf0e259abab6ccbfb4894
Loading...
Loading
Loading...
Loading
Multichain Portfolio | 34 Chains
Chain | Token | Portfolio % | Price | Amount | Value |
---|
Loading...
Loading
Loading...
Loading
Loading...
Loading
[ Download: CSV Export ]
[ Download: CSV Export ]
A contract address hosts a smart contract, which is a set of code stored on the blockchain that runs when predetermined conditions are met. Learn more about addresses in our Knowledge Base.