Overview
S Balance
0 S
S Value
-More Info
Private Name Tags
ContractCreator
Loading...
Loading
Contract Name:
VaultUtils
Compiler Version
v0.6.12+commit.27d51765
Contract Source Code (Solidity)
/** *Submitted for verification at SonicScan.org on 2024-12-19 */ // SPDX-License-Identifier: MIT pragma solidity 0.6.12; /** * @dev Wrappers over Solidity's arithmetic operations with added overflow * checks. * * Arithmetic operations in Solidity wrap on overflow. This can easily result * in bugs, because programmers usually assume that an overflow raises an * error, which is the standard behavior in high level programming languages. * `SafeMath` restores this intuition by reverting the transaction when an * operation overflows. * * Using this library instead of the unchecked operations eliminates an entire * class of bugs, so it's recommended to use it always. */ library SafeMath { /** * @dev Returns the addition of two unsigned integers, reverting on * overflow. * * Counterpart to Solidity's `+` operator. * * Requirements: * * - Addition cannot overflow. */ function add(uint256 a, uint256 b) internal pure returns (uint256) { uint256 c = a + b; require(c >= a, "SafeMath: addition overflow"); return c; } /** * @dev Returns the subtraction of two unsigned integers, reverting on * overflow (when the result is negative). * * Counterpart to Solidity's `-` operator. * * Requirements: * * - Subtraction cannot overflow. */ function sub(uint256 a, uint256 b) internal pure returns (uint256) { return sub(a, b, "SafeMath: subtraction overflow"); } /** * @dev Returns the subtraction of two unsigned integers, reverting with custom message on * overflow (when the result is negative). * * Counterpart to Solidity's `-` operator. * * Requirements: * * - Subtraction cannot overflow. */ function sub(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) { require(b <= a, errorMessage); uint256 c = a - b; return c; } /** * @dev Returns the multiplication of two unsigned integers, reverting on * overflow. * * Counterpart to Solidity's `*` operator. * * Requirements: * * - Multiplication cannot overflow. */ function mul(uint256 a, uint256 b) internal pure returns (uint256) { // Gas optimization: this is cheaper than requiring 'a' not being zero, but the // benefit is lost if 'b' is also tested. // See: https://github.com/OpenZeppelin/openzeppelin-contracts/pull/522 if (a == 0) { return 0; } uint256 c = a * b; require(c / a == b, "SafeMath: multiplication overflow"); return c; } /** * @dev Returns the integer division of two unsigned integers. Reverts on * division by zero. The result is rounded towards zero. * * Counterpart to Solidity's `/` operator. Note: this function uses a * `revert` opcode (which leaves remaining gas untouched) while Solidity * uses an invalid opcode to revert (consuming all remaining gas). * * Requirements: * * - The divisor cannot be zero. */ function div(uint256 a, uint256 b) internal pure returns (uint256) { return div(a, b, "SafeMath: division by zero"); } /** * @dev Returns the integer division of two unsigned integers. Reverts with custom message on * division by zero. The result is rounded towards zero. * * Counterpart to Solidity's `/` operator. Note: this function uses a * `revert` opcode (which leaves remaining gas untouched) while Solidity * uses an invalid opcode to revert (consuming all remaining gas). * * Requirements: * * - The divisor cannot be zero. */ function div(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) { require(b > 0, errorMessage); uint256 c = a / b; // assert(a == b * c + a % b); // There is no case in which this doesn't hold return c; } /** * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo), * Reverts when dividing by zero. * * Counterpart to Solidity's `%` operator. This function uses a `revert` * opcode (which leaves remaining gas untouched) while Solidity uses an * invalid opcode to revert (consuming all remaining gas). * * Requirements: * * - The divisor cannot be zero. */ function mod(uint256 a, uint256 b) internal pure returns (uint256) { return mod(a, b, "SafeMath: modulo by zero"); } /** * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo), * Reverts with custom message when dividing by zero. * * Counterpart to Solidity's `%` operator. This function uses a `revert` * opcode (which leaves remaining gas untouched) while Solidity uses an * invalid opcode to revert (consuming all remaining gas). * * Requirements: * * - The divisor cannot be zero. */ function mod(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) { require(b != 0, errorMessage); return a % b; } } pragma solidity 0.6.12; /** * @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); } pragma solidity 0.6.12; contract Governable { address public gov; constructor() public { gov = msg.sender; } modifier onlyGov() { require(msg.sender == gov, "Governable: forbidden"); _; } function setGov(address _gov) external onlyGov { gov = _gov; } } pragma solidity 0.6.12; interface IVaultUtils { function updateCumulativeFundingRate(address _collateralToken, address _indexToken) external returns (bool); function validateIncreasePosition(address _account, address _collateralToken, address _indexToken, uint256 _sizeDelta, bool _isLong) external view; function validateDecreasePosition(address _account, address _collateralToken, address _indexToken, uint256 _collateralDelta, uint256 _sizeDelta, bool _isLong, address _receiver) external view; function validateLiquidation(address _account, address _collateralToken, address _indexToken, bool _isLong, bool _raise) external view returns (uint256, uint256); function getEntryFundingRate(address _collateralToken, address _indexToken, bool _isLong) external view returns (uint256); function getPositionFee(address _account, address _collateralToken, address _indexToken, bool _isLong, uint256 _sizeDelta) external view returns (uint256); function getFundingFee(address _account, address _collateralToken, address _indexToken, bool _isLong, uint256 _size, uint256 _entryFundingRate) external view returns (uint256); function getBuyUsdgFeeBasisPoints(address _token, uint256 _usdgAmount) external view returns (uint256); function getSellUsdgFeeBasisPoints(address _token, uint256 _usdgAmount) external view returns (uint256); function getSwapFeeBasisPoints(address _tokenIn, address _tokenOut, uint256 _usdgAmount) external view returns (uint256); function getFeeBasisPoints(address _token, uint256 _usdgDelta, uint256 _feeBasisPoints, uint256 _taxBasisPoints, bool _increment) external view returns (uint256); } pragma solidity 0.6.12; interface IVault { function isInitialized() external view returns (bool); function isSwapEnabled() external view returns (bool); function isLeverageEnabled() external view returns (bool); function setVaultUtils(IVaultUtils _vaultUtils) external; function setError(uint256 _errorCode, string calldata _error) external; function router() external view returns (address); function usdg() external view returns (address); function gov() external view returns (address); function whitelistedTokenCount() external view returns (uint256); function maxLeverage() external view returns (uint256); function minProfitTime() external view returns (uint256); function hasDynamicFees() external view returns (bool); function fundingInterval() external view returns (uint256); function totalTokenWeights() external view returns (uint256); function getTargetUsdgAmount(address _token) external view returns (uint256); function inManagerMode() external view returns (bool); function inPrivateLiquidationMode() external view returns (bool); function maxGasPrice() external view returns (uint256); function approvedRouters(address _account, address _router) external view returns (bool); function isLiquidator(address _account) external view returns (bool); function isManager(address _account) external view returns (bool); function minProfitBasisPoints(address _token) external view returns (uint256); function tokenBalances(address _token) external view returns (uint256); function lastFundingTimes(address _token) external view returns (uint256); function setMaxLeverage(uint256 _maxLeverage) external; function setInManagerMode(bool _inManagerMode) external; function setManager(address _manager, bool _isManager) external; function setIsSwapEnabled(bool _isSwapEnabled) external; function setIsLeverageEnabled(bool _isLeverageEnabled) external; function setMaxGasPrice(uint256 _maxGasPrice) external; function setUsdgAmount(address _token, uint256 _amount) external; function setBufferAmount(address _token, uint256 _amount) external; function setMaxGlobalShortSize(address _token, uint256 _amount) external; function setInPrivateLiquidationMode(bool _inPrivateLiquidationMode) external; function setLiquidator(address _liquidator, bool _isActive) external; function setFundingRate(uint256 _fundingInterval, uint256 _fundingRateFactor, uint256 _stableFundingRateFactor) external; function setFees( uint256 _taxBasisPoints, uint256 _stableTaxBasisPoints, uint256 _mintBurnFeeBasisPoints, uint256 _swapFeeBasisPoints, uint256 _stableSwapFeeBasisPoints, uint256 _marginFeeBasisPoints, uint256 _liquidationFeeUsd, uint256 _minProfitTime, bool _hasDynamicFees ) external; function setTokenConfig( address _token, uint256 _tokenDecimals, uint256 _redemptionBps, uint256 _minProfitBps, uint256 _maxUsdgAmount, bool _isStable, bool _isShortable ) external; function setPriceFeed(address _priceFeed) external; function withdrawFees(address _token, address _receiver) external returns (uint256); function directPoolDeposit(address _token) external; function buyUSDG(address _token, address _receiver) external returns (uint256); function sellUSDG(address _token, address _receiver) external returns (uint256); function swap(address _tokenIn, address _tokenOut, address _receiver) external returns (uint256); function increasePosition(address _account, address _collateralToken, address _indexToken, uint256 _sizeDelta, bool _isLong) external; function decreasePosition(address _account, address _collateralToken, address _indexToken, uint256 _collateralDelta, uint256 _sizeDelta, bool _isLong, address _receiver) external returns (uint256); function validateLiquidation(address _account, address _collateralToken, address _indexToken, bool _isLong, bool _raise) external view returns (uint256, uint256); function liquidatePosition(address _account, address _collateralToken, address _indexToken, bool _isLong, address _feeReceiver) external; function tokenToUsdMin(address _token, uint256 _tokenAmount) external view returns (uint256); function priceFeed() external view returns (address); function fundingRateFactor() external view returns (uint256); function stableFundingRateFactor() external view returns (uint256); function cumulativeFundingRates(address _token) external view returns (uint256); function getNextFundingRate(address _token) external view returns (uint256); function getFeeBasisPoints(address _token, uint256 _usdgDelta, uint256 _feeBasisPoints, uint256 _taxBasisPoints, bool _increment) external view returns (uint256); function liquidationFeeUsd() external view returns (uint256); function taxBasisPoints() external view returns (uint256); function stableTaxBasisPoints() external view returns (uint256); function mintBurnFeeBasisPoints() external view returns (uint256); function swapFeeBasisPoints() external view returns (uint256); function stableSwapFeeBasisPoints() external view returns (uint256); function marginFeeBasisPoints() external view returns (uint256); function allWhitelistedTokensLength() external view returns (uint256); function allWhitelistedTokens(uint256) external view returns (address); function whitelistedTokens(address _token) external view returns (bool); function stableTokens(address _token) external view returns (bool); function shortableTokens(address _token) external view returns (bool); function feeReserves(address _token) external view returns (uint256); function globalShortSizes(address _token) external view returns (uint256); function globalShortAveragePrices(address _token) external view returns (uint256); function maxGlobalShortSizes(address _token) external view returns (uint256); function tokenDecimals(address _token) external view returns (uint256); function tokenWeights(address _token) external view returns (uint256); function guaranteedUsd(address _token) external view returns (uint256); function poolAmounts(address _token) external view returns (uint256); function bufferAmounts(address _token) external view returns (uint256); function reservedAmounts(address _token) external view returns (uint256); function usdgAmounts(address _token) external view returns (uint256); function maxUsdgAmounts(address _token) external view returns (uint256); function getRedemptionAmount(address _token, uint256 _usdgAmount) external view returns (uint256); function getMaxPrice(address _token) external view returns (uint256); function getMinPrice(address _token) external view returns (uint256); function getDelta(address _indexToken, uint256 _size, uint256 _averagePrice, bool _isLong, uint256 _lastIncreasedTime) external view returns (bool, uint256); function getPosition(address _account, address _collateralToken, address _indexToken, bool _isLong) external view returns (uint256, uint256, uint256, uint256, uint256, uint256, bool, uint256); } pragma solidity 0.6.12; contract VaultUtils is IVaultUtils, Governable { using SafeMath for uint256; struct Position { uint256 size; uint256 collateral; uint256 averagePrice; uint256 entryFundingRate; uint256 reserveAmount; int256 realisedPnl; uint256 lastIncreasedTime; } IVault public vault; uint256 public constant BASIS_POINTS_DIVISOR = 10000; uint256 public constant FUNDING_RATE_PRECISION = 1000000; constructor(IVault _vault) public { vault = _vault; } function updateCumulativeFundingRate(address /* _collateralToken */, address /* _indexToken */) public override returns (bool) { return true; } function validateIncreasePosition(address /* _account */, address /* _collateralToken */, address /* _indexToken */, uint256 /* _sizeDelta */, bool /* _isLong */) external override view { // no additional validations } function validateDecreasePosition(address /* _account */, address /* _collateralToken */, address /* _indexToken */ , uint256 /* _collateralDelta */, uint256 /* _sizeDelta */, bool /* _isLong */, address /* _receiver */) external override view { // no additional validations } function getPosition(address _account, address _collateralToken, address _indexToken, bool _isLong) internal view returns (Position memory) { IVault _vault = vault; Position memory position; { (uint256 size, uint256 collateral, uint256 averagePrice, uint256 entryFundingRate, /* reserveAmount */, /* realisedPnl */, /* hasProfit */, uint256 lastIncreasedTime) = _vault.getPosition(_account, _collateralToken, _indexToken, _isLong); position.size = size; position.collateral = collateral; position.averagePrice = averagePrice; position.entryFundingRate = entryFundingRate; position.lastIncreasedTime = lastIncreasedTime; } return position; } function validateLiquidation(address _account, address _collateralToken, address _indexToken, bool _isLong, bool _raise) public view override returns (uint256, uint256) { Position memory position = getPosition(_account, _collateralToken, _indexToken, _isLong); IVault _vault = vault; (bool hasProfit, uint256 delta) = _vault.getDelta(_indexToken, position.size, position.averagePrice, _isLong, position.lastIncreasedTime); uint256 marginFees = getFundingFee(_account, _collateralToken, _indexToken, _isLong, position.size, position.entryFundingRate); marginFees = marginFees.add(getPositionFee(_account, _collateralToken, _indexToken, _isLong, position.size)); if (!hasProfit && position.collateral < delta) { if (_raise) { revert("Vault: losses exceed collateral"); } return (1, marginFees); } uint256 remainingCollateral = position.collateral; if (!hasProfit) { remainingCollateral = position.collateral.sub(delta); } if (remainingCollateral < marginFees) { if (_raise) { revert("Vault: fees exceed collateral"); } // cap the fees to the remainingCollateral return (1, remainingCollateral); } if (remainingCollateral < marginFees.add(_vault.liquidationFeeUsd())) { if (_raise) { revert("Vault: liquidation fees exceed collateral"); } return (1, marginFees); } if (remainingCollateral.mul(_vault.maxLeverage()) < position.size.mul(BASIS_POINTS_DIVISOR)) { if (_raise) { revert("Vault: maxLeverage exceeded"); } return (2, marginFees); } return (0, marginFees); } function getEntryFundingRate(address _collateralToken, address /* _indexToken */, bool /* _isLong */) public override view returns (uint256) { return vault.cumulativeFundingRates(_collateralToken); } function getPositionFee(address /* _account */, address /* _collateralToken */, address /* _indexToken */, bool /* _isLong */, uint256 _sizeDelta) public override view returns (uint256) { if (_sizeDelta == 0) { return 0; } uint256 afterFeeUsd = _sizeDelta.mul(BASIS_POINTS_DIVISOR.sub(vault.marginFeeBasisPoints())).div(BASIS_POINTS_DIVISOR); return _sizeDelta.sub(afterFeeUsd); } function getFundingFee(address /* _account */, address _collateralToken, address /* _indexToken */, bool /* _isLong */, uint256 _size, uint256 _entryFundingRate) public override view returns (uint256) { if (_size == 0) { return 0; } uint256 fundingRate = vault.cumulativeFundingRates(_collateralToken).sub(_entryFundingRate); if (fundingRate == 0) { return 0; } return _size.mul(fundingRate).div(FUNDING_RATE_PRECISION); } function getBuyUsdgFeeBasisPoints(address _token, uint256 _usdgAmount) public override view returns (uint256) { return getFeeBasisPoints(_token, _usdgAmount, vault.mintBurnFeeBasisPoints(), vault.taxBasisPoints(), true); } function getSellUsdgFeeBasisPoints(address _token, uint256 _usdgAmount) public override view returns (uint256) { return getFeeBasisPoints(_token, _usdgAmount, vault.mintBurnFeeBasisPoints(), vault.taxBasisPoints(), false); } function getSwapFeeBasisPoints(address _tokenIn, address _tokenOut, uint256 _usdgAmount) public override view returns (uint256) { bool isStableSwap = vault.stableTokens(_tokenIn) && vault.stableTokens(_tokenOut); uint256 baseBps = isStableSwap ? vault.stableSwapFeeBasisPoints() : vault.swapFeeBasisPoints(); uint256 taxBps = isStableSwap ? vault.stableTaxBasisPoints() : vault.taxBasisPoints(); uint256 feesBasisPoints0 = getFeeBasisPoints(_tokenIn, _usdgAmount, baseBps, taxBps, true); uint256 feesBasisPoints1 = getFeeBasisPoints(_tokenOut, _usdgAmount, baseBps, taxBps, false); // use the higher of the two fee basis points return feesBasisPoints0 > feesBasisPoints1 ? feesBasisPoints0 : feesBasisPoints1; } // cases to consider // 1. initialAmount is far from targetAmount, action increases balance slightly => high rebate // 2. initialAmount is far from targetAmount, action increases balance largely => high rebate // 3. initialAmount is close to targetAmount, action increases balance slightly => low rebate // 4. initialAmount is far from targetAmount, action reduces balance slightly => high tax // 5. initialAmount is far from targetAmount, action reduces balance largely => high tax // 6. initialAmount is close to targetAmount, action reduces balance largely => low tax // 7. initialAmount is above targetAmount, nextAmount is below targetAmount and vice versa // 8. a large swap should have similar fees as the same trade split into multiple smaller swaps function getFeeBasisPoints(address _token, uint256 _usdgDelta, uint256 _feeBasisPoints, uint256 _taxBasisPoints, bool _increment) public override view returns (uint256) { if (!vault.hasDynamicFees()) { return _feeBasisPoints; } uint256 initialAmount = vault.usdgAmounts(_token); uint256 nextAmount = initialAmount.add(_usdgDelta); if (!_increment) { nextAmount = _usdgDelta > initialAmount ? 0 : initialAmount.sub(_usdgDelta); } uint256 targetAmount = vault.getTargetUsdgAmount(_token); if (targetAmount == 0) { return _feeBasisPoints; } uint256 initialDiff = initialAmount > targetAmount ? initialAmount.sub(targetAmount) : targetAmount.sub(initialAmount); uint256 nextDiff = nextAmount > targetAmount ? nextAmount.sub(targetAmount) : targetAmount.sub(nextAmount); // action improves relative asset balance if (nextDiff < initialDiff) { uint256 rebateBps = _taxBasisPoints.mul(initialDiff).div(targetAmount); return rebateBps > _feeBasisPoints ? 0 : _feeBasisPoints.sub(rebateBps); } uint256 averageDiff = initialDiff.add(nextDiff).div(2); if (averageDiff > targetAmount) { averageDiff = targetAmount; } uint256 taxBps = _taxBasisPoints.mul(averageDiff).div(targetAmount); return _feeBasisPoints.add(taxBps); } }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"inputs":[{"internalType":"contract IVault","name":"_vault","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"inputs":[],"name":"BASIS_POINTS_DIVISOR","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"FUNDING_RATE_PRECISION","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_token","type":"address"},{"internalType":"uint256","name":"_usdgAmount","type":"uint256"}],"name":"getBuyUsdgFeeBasisPoints","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_collateralToken","type":"address"},{"internalType":"address","name":"","type":"address"},{"internalType":"bool","name":"","type":"bool"}],"name":"getEntryFundingRate","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_token","type":"address"},{"internalType":"uint256","name":"_usdgDelta","type":"uint256"},{"internalType":"uint256","name":"_feeBasisPoints","type":"uint256"},{"internalType":"uint256","name":"_taxBasisPoints","type":"uint256"},{"internalType":"bool","name":"_increment","type":"bool"}],"name":"getFeeBasisPoints","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"},{"internalType":"address","name":"_collateralToken","type":"address"},{"internalType":"address","name":"","type":"address"},{"internalType":"bool","name":"","type":"bool"},{"internalType":"uint256","name":"_size","type":"uint256"},{"internalType":"uint256","name":"_entryFundingRate","type":"uint256"}],"name":"getFundingFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"},{"internalType":"address","name":"","type":"address"},{"internalType":"address","name":"","type":"address"},{"internalType":"bool","name":"","type":"bool"},{"internalType":"uint256","name":"_sizeDelta","type":"uint256"}],"name":"getPositionFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_token","type":"address"},{"internalType":"uint256","name":"_usdgAmount","type":"uint256"}],"name":"getSellUsdgFeeBasisPoints","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_tokenIn","type":"address"},{"internalType":"address","name":"_tokenOut","type":"address"},{"internalType":"uint256","name":"_usdgAmount","type":"uint256"}],"name":"getSwapFeeBasisPoints","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"gov","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_gov","type":"address"}],"name":"setGov","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"},{"internalType":"address","name":"","type":"address"}],"name":"updateCumulativeFundingRate","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"},{"internalType":"address","name":"","type":"address"},{"internalType":"address","name":"","type":"address"},{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"bool","name":"","type":"bool"},{"internalType":"address","name":"","type":"address"}],"name":"validateDecreasePosition","outputs":[],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"},{"internalType":"address","name":"","type":"address"},{"internalType":"address","name":"","type":"address"},{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"bool","name":"","type":"bool"}],"name":"validateIncreasePosition","outputs":[],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_account","type":"address"},{"internalType":"address","name":"_collateralToken","type":"address"},{"internalType":"address","name":"_indexToken","type":"address"},{"internalType":"bool","name":"_isLong","type":"bool"},{"internalType":"bool","name":"_raise","type":"bool"}],"name":"validateLiquidation","outputs":[{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"vault","outputs":[{"internalType":"contract IVault","name":"","type":"address"}],"stateMutability":"view","type":"function"}]
Contract Creation Code
608060405234801561001057600080fd5b506040516116e13803806116e18339818101604052602081101561003357600080fd5b5051600080546001600160a01b03199081163317909155600180546001600160a01b039093169290911691909117905561166f806100726000396000f3fe608060405234801561001057600080fd5b50600436106100d05760003560e01c8063126082cf146100d557806312d43a51146100ef5780634adeddc6146101135780636be6026b1461013f57806381d11a23146101475780639d5c28fa1461019d578063b1cc53ab146101e1578063c7e074c314610219578063cfad57a214610259578063d54d5a9f1461027f578063da133816146102de578063da76524c14610314578063eb0835bf1461035e578063fbfa77cf1461038a578063fbfded6d14610392578063fdaf6ac3146103d4575b600080fd5b6100dd610418565b60408051918252519081900360200190f35b6100f761041e565b604080516001600160a01b039092168252519081900360200190f35b6100dd6004803603604081101561012957600080fd5b506001600160a01b03813516906020013561042d565b6100dd61052f565b61019b600480360360e081101561015d57600080fd5b506001600160a01b0381358116916020810135821691604082013581169160608101359160808201359160a081013515159160c09091013516610536565b005b61019b600480360360a08110156101b357600080fd5b506001600160a01b03813581169160208101358216916040820135169060608101359060800135151561053f565b6100dd600480360360608110156101f757600080fd5b506001600160a01b038135811691602081013590911690604001351515610546565b6100dd600480360360a081101561022f57600080fd5b506001600160a01b03813516906020810135906040810135906060810135906080013515156105cb565b61019b6004803603602081101561026f57600080fd5b50356001600160a01b031661085f565b6102c5600480360360a081101561029557600080fd5b506001600160a01b03813581169160208101358216916040820135169060608101351515906080013515156108d8565b6040805192835260208301919091528051918290030190f35b6100dd600480360360608110156102f457600080fd5b506001600160a01b03813581169160208101359091169060400135610ca0565b6100dd600480360360c081101561032a57600080fd5b506001600160a01b038135811691602081013582169160408201351690606081013515159060808101359060a00135610fe4565b6100dd6004803603604081101561037457600080fd5b506001600160a01b0381351690602001356110aa565b6100f76111a3565b6103c0600480360360408110156103a857600080fd5b506001600160a01b03813581169160200135166111b2565b604080519115158252519081900360200190f35b6100dd600480360360a08110156103ea57600080fd5b506001600160a01b0381358116916020810135821691604082013516906060810135151590608001356111ba565b61271081565b6000546001600160a01b031681565b60006105268383600160009054906101000a90046001600160a01b03166001600160a01b0316634d47b3046040518163ffffffff1660e01b815260040160206040518083038186803b15801561048257600080fd5b505afa158015610496573d6000803e3d6000fd5b505050506040513d60208110156104ac57600080fd5b505160015460408051637a210a2b60e01b815290516001600160a01b0390921691637a210a2b91600480820192602092909190829003018186803b1580156104f357600080fd5b505afa158015610507573d6000803e3d6000fd5b505050506040513d602081101561051d57600080fd5b505160016105cb565b90505b92915050565b620f424081565b50505050505050565b5050505050565b6001546040805163c65bc7b160e01b81526001600160a01b0386811660048301529151600093929092169163c65bc7b191602480820192602092909190829003018186803b15801561059757600080fd5b505afa1580156105ab573d6000803e3d6000fd5b505050506040513d60208110156105c157600080fd5b5051949350505050565b60015460408051639f392eb360e01b815290516000926001600160a01b031691639f392eb3916004808301926020929190829003018186803b15801561061057600080fd5b505afa158015610624573d6000803e3d6000fd5b505050506040513d602081101561063a57600080fd5b5051610647575082610856565b60015460408051631aa4ace560e01b81526001600160a01b03898116600483015291516000939290921691631aa4ace591602480820192602092909190829003018186803b15801561069857600080fd5b505afa1580156106ac573d6000803e3d6000fd5b505050506040513d60208110156106c257600080fd5b5051905060006106d28288611278565b9050836106f5578187116106ef576106ea82886112d0565b6106f2565b60005b90505b60015460408051633a05dcc160e01b81526001600160a01b038b8116600483015291516000939290921691633a05dcc191602480820192602092909190829003018186803b15801561074657600080fd5b505afa15801561075a573d6000803e3d6000fd5b505050506040513d602081101561077057600080fd5b505190508061078457869350505050610856565b600081841161079c5761079782856112d0565b6107a6565b6107a684836112d0565b905060008284116107c0576107bb83856112d0565b6107ca565b6107ca84846112d0565b9050818110156108125760006107ea846107e48b86611312565b9061136b565b9050898111610802576107fd8a826112d0565b610805565b60005b9650505050505050610856565b600061082360026107e48585611278565b9050838111156108305750825b6000610840856107e48c85611312565b905061084c8b82611278565b9750505050505050505b95945050505050565b6000546001600160a01b031633146108b6576040805162461bcd60e51b815260206004820152601560248201527423b7bb32b93730b136329d103337b93134b23232b760591b604482015290519081900360640190fd5b600080546001600160a01b0319166001600160a01b0392909216919091179055565b6000806108e36115b2565b6108ef888888886113aa565b600154815160408084015160c08501518251635c07eaab60e01b81526001600160a01b038d81166004830152602482019590955260448101929092528a1515606483015260848201528151949550919092169260009283928592635c07eaab9260a480840193919291829003018186803b15801561096c57600080fd5b505afa158015610980573d6000803e3d6000fd5b505050506040513d604081101561099657600080fd5b508051602090910151855160608701519294509092506000916109c1918e918e918e918e9190610fe4565b90506109de6109d78d8d8d8d8a600001516111ba565b8290611278565b9050821580156109f15750818560200151105b15610a59578715610a49576040805162461bcd60e51b815260206004820152601f60248201527f5661756c743a206c6f737365732065786365656420636f6c6c61746572616c00604482015290519081900360640190fd5b600196509450610c969350505050565b602085015183610a75576020860151610a7290846112d0565b90505b81811015610ae1578815610ad0576040805162461bcd60e51b815260206004820152601d60248201527f5661756c743a20666565732065786365656420636f6c6c61746572616c000000604482015290519081900360640190fd5b600197509550610c96945050505050565b610b50856001600160a01b031663174d26946040518163ffffffff1660e01b815260040160206040518083038186803b158015610b1d57600080fd5b505afa158015610b31573d6000803e3d6000fd5b505050506040513d6020811015610b4757600080fd5b50518390611278565b811015610ba5578815610b945760405162461bcd60e51b81526004018080602001828103825260298152602001806115f06029913960400191505060405180910390fd5b50600196509450610c969350505050565b8551610bb390612710611312565b610c22866001600160a01b031663ae3302c26040518163ffffffff1660e01b815260040160206040518083038186803b158015610bef57600080fd5b505afa158015610c03573d6000803e3d6000fd5b505050506040513d6020811015610c1957600080fd5b50518390611312565b1015610c8a578815610c79576040805162461bcd60e51b815260206004820152601b60248201527a15985d5b1d0e881b585e13195d995c9859d948195e18d959591959602a1b604482015290519081900360640190fd5b50600296509450610c969350505050565b50600096509450505050505b9550959350505050565b600154604080516342b60b0360e01b81526001600160a01b0386811660048301529151600093849316916342b60b03916024808301926020929190829003018186803b158015610cef57600080fd5b505afa158015610d03573d6000803e3d6000fd5b505050506040513d6020811015610d1957600080fd5b50518015610d9c5750600154604080516342b60b0360e01b81526001600160a01b038781166004830152915191909216916342b60b03916024808301926020929190829003018186803b158015610d6f57600080fd5b505afa158015610d83573d6000803e3d6000fd5b505050506040513d6020811015610d9957600080fd5b50515b9050600081610e2457600160009054906101000a90046001600160a01b03166001600160a01b031663a22f23926040518163ffffffff1660e01b815260040160206040518083038186803b158015610df357600080fd5b505afa158015610e07573d6000803e3d6000fd5b505050506040513d6020811015610e1d57600080fd5b5051610e9f565b600160009054906101000a90046001600160a01b03166001600160a01b031663df73a2676040518163ffffffff1660e01b815260040160206040518083038186803b158015610e7257600080fd5b505afa158015610e86573d6000803e3d6000fd5b505050506040513d6020811015610e9c57600080fd5b50515b9050600082610f2757600160009054906101000a90046001600160a01b03166001600160a01b0316637a210a2b6040518163ffffffff1660e01b815260040160206040518083038186803b158015610ef657600080fd5b505afa158015610f0a573d6000803e3d6000fd5b505050506040513d6020811015610f2057600080fd5b5051610fa2565b600160009054906101000a90046001600160a01b03166001600160a01b03166310eb56c26040518163ffffffff1660e01b815260040160206040518083038186803b158015610f7557600080fd5b505afa158015610f89573d6000803e3d6000fd5b505050506040513d6020811015610f9f57600080fd5b50515b90506000610fb48887858560016105cb565b90506000610fc68888868660006105cb565b9050808211610fd55780610fd7565b815b9998505050505050505050565b600082610ff3575060006110a0565b6001546040805163c65bc7b160e01b81526001600160a01b038981166004830152915160009361107a93879391169163c65bc7b191602480820192602092909190829003018186803b15801561104857600080fd5b505afa15801561105c573d6000803e3d6000fd5b505050506040513d602081101561107257600080fd5b5051906112d0565b90508061108b5760009150506110a0565b61109c620f42406107e48684611312565b9150505b9695505050505050565b60006105268383600160009054906101000a90046001600160a01b03166001600160a01b0316634d47b3046040518163ffffffff1660e01b815260040160206040518083038186803b1580156110ff57600080fd5b505afa158015611113573d6000803e3d6000fd5b505050506040513d602081101561112957600080fd5b505160015460408051637a210a2b60e01b815290516001600160a01b0390921691637a210a2b91600480820192602092909190829003018186803b15801561117057600080fd5b505afa158015611184573d6000803e3d6000fd5b505050506040513d602081101561119a57600080fd5b505160006105cb565b6001546001600160a01b031681565b600192915050565b6000816111c957506000610856565b60006112616127106107e461125a600160009054906101000a90046001600160a01b03166001600160a01b031663318bc6896040518163ffffffff1660e01b815260040160206040518083038186803b15801561122557600080fd5b505afa158015611239573d6000803e3d6000fd5b505050506040513d602081101561124f57600080fd5b5051612710906112d0565b8690611312565b905061126d83826112d0565b979650505050505050565b600082820183811015610526576040805162461bcd60e51b815260206004820152601b60248201527a536166654d6174683a206164646974696f6e206f766572666c6f7760281b604482015290519081900360640190fd5b600061052683836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f7700008152506114b6565b60008261132157506000610529565b8282028284828161132e57fe5b04146105265760405162461bcd60e51b81526004018080602001828103825260218152602001806116196021913960400191505060405180910390fd5b600061052683836040518060400160405280601a815260200179536166654d6174683a206469766973696f6e206279207a65726f60301b81525061154d565b6113b26115b2565b6001546001600160a01b03166113c66115b2565b6000806000806000866001600160a01b0316634a3f088d8d8d8d8d6040518563ffffffff1660e01b815260040180856001600160a01b03168152602001846001600160a01b03168152602001836001600160a01b0316815260200182151581526020019450505050506101006040518083038186803b15801561144857600080fd5b505afa15801561145c573d6000803e3d6000fd5b505050506040513d61010081101561147357600080fd5b50805160208083015160408085015160608087015160e090970151958d52938c01929092528a015288019190915260c087015250939a9950505050505050505050565b600081848411156115455760405162461bcd60e51b81526004018080602001828103825283818151815260200191508051906020019080838360005b8381101561150a5781810151838201526020016114f2565b50505050905090810190601f1680156115375780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b505050900390565b6000818361159c5760405162461bcd60e51b815260206004820181815283516024840152835190928392604490910191908501908083836000831561150a5781810151838201526020016114f2565b5060008385816115a857fe5b0495945050505050565b6040518060e0016040528060008152602001600081526020016000815260200160008152602001600081526020016000815260200160008152509056fe5661756c743a206c69717569646174696f6e20666565732065786365656420636f6c6c61746572616c536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f77a2646970667358221220bd0fb3cf875ee2ed197b727b6e618398a149d0653e75fff748d9c843d8aaab1e64736f6c634300060c00330000000000000000000000001546ec8b238dca09bb39196a18268cbb51a40853
Deployed Bytecode
0x608060405234801561001057600080fd5b50600436106100d05760003560e01c8063126082cf146100d557806312d43a51146100ef5780634adeddc6146101135780636be6026b1461013f57806381d11a23146101475780639d5c28fa1461019d578063b1cc53ab146101e1578063c7e074c314610219578063cfad57a214610259578063d54d5a9f1461027f578063da133816146102de578063da76524c14610314578063eb0835bf1461035e578063fbfa77cf1461038a578063fbfded6d14610392578063fdaf6ac3146103d4575b600080fd5b6100dd610418565b60408051918252519081900360200190f35b6100f761041e565b604080516001600160a01b039092168252519081900360200190f35b6100dd6004803603604081101561012957600080fd5b506001600160a01b03813516906020013561042d565b6100dd61052f565b61019b600480360360e081101561015d57600080fd5b506001600160a01b0381358116916020810135821691604082013581169160608101359160808201359160a081013515159160c09091013516610536565b005b61019b600480360360a08110156101b357600080fd5b506001600160a01b03813581169160208101358216916040820135169060608101359060800135151561053f565b6100dd600480360360608110156101f757600080fd5b506001600160a01b038135811691602081013590911690604001351515610546565b6100dd600480360360a081101561022f57600080fd5b506001600160a01b03813516906020810135906040810135906060810135906080013515156105cb565b61019b6004803603602081101561026f57600080fd5b50356001600160a01b031661085f565b6102c5600480360360a081101561029557600080fd5b506001600160a01b03813581169160208101358216916040820135169060608101351515906080013515156108d8565b6040805192835260208301919091528051918290030190f35b6100dd600480360360608110156102f457600080fd5b506001600160a01b03813581169160208101359091169060400135610ca0565b6100dd600480360360c081101561032a57600080fd5b506001600160a01b038135811691602081013582169160408201351690606081013515159060808101359060a00135610fe4565b6100dd6004803603604081101561037457600080fd5b506001600160a01b0381351690602001356110aa565b6100f76111a3565b6103c0600480360360408110156103a857600080fd5b506001600160a01b03813581169160200135166111b2565b604080519115158252519081900360200190f35b6100dd600480360360a08110156103ea57600080fd5b506001600160a01b0381358116916020810135821691604082013516906060810135151590608001356111ba565b61271081565b6000546001600160a01b031681565b60006105268383600160009054906101000a90046001600160a01b03166001600160a01b0316634d47b3046040518163ffffffff1660e01b815260040160206040518083038186803b15801561048257600080fd5b505afa158015610496573d6000803e3d6000fd5b505050506040513d60208110156104ac57600080fd5b505160015460408051637a210a2b60e01b815290516001600160a01b0390921691637a210a2b91600480820192602092909190829003018186803b1580156104f357600080fd5b505afa158015610507573d6000803e3d6000fd5b505050506040513d602081101561051d57600080fd5b505160016105cb565b90505b92915050565b620f424081565b50505050505050565b5050505050565b6001546040805163c65bc7b160e01b81526001600160a01b0386811660048301529151600093929092169163c65bc7b191602480820192602092909190829003018186803b15801561059757600080fd5b505afa1580156105ab573d6000803e3d6000fd5b505050506040513d60208110156105c157600080fd5b5051949350505050565b60015460408051639f392eb360e01b815290516000926001600160a01b031691639f392eb3916004808301926020929190829003018186803b15801561061057600080fd5b505afa158015610624573d6000803e3d6000fd5b505050506040513d602081101561063a57600080fd5b5051610647575082610856565b60015460408051631aa4ace560e01b81526001600160a01b03898116600483015291516000939290921691631aa4ace591602480820192602092909190829003018186803b15801561069857600080fd5b505afa1580156106ac573d6000803e3d6000fd5b505050506040513d60208110156106c257600080fd5b5051905060006106d28288611278565b9050836106f5578187116106ef576106ea82886112d0565b6106f2565b60005b90505b60015460408051633a05dcc160e01b81526001600160a01b038b8116600483015291516000939290921691633a05dcc191602480820192602092909190829003018186803b15801561074657600080fd5b505afa15801561075a573d6000803e3d6000fd5b505050506040513d602081101561077057600080fd5b505190508061078457869350505050610856565b600081841161079c5761079782856112d0565b6107a6565b6107a684836112d0565b905060008284116107c0576107bb83856112d0565b6107ca565b6107ca84846112d0565b9050818110156108125760006107ea846107e48b86611312565b9061136b565b9050898111610802576107fd8a826112d0565b610805565b60005b9650505050505050610856565b600061082360026107e48585611278565b9050838111156108305750825b6000610840856107e48c85611312565b905061084c8b82611278565b9750505050505050505b95945050505050565b6000546001600160a01b031633146108b6576040805162461bcd60e51b815260206004820152601560248201527423b7bb32b93730b136329d103337b93134b23232b760591b604482015290519081900360640190fd5b600080546001600160a01b0319166001600160a01b0392909216919091179055565b6000806108e36115b2565b6108ef888888886113aa565b600154815160408084015160c08501518251635c07eaab60e01b81526001600160a01b038d81166004830152602482019590955260448101929092528a1515606483015260848201528151949550919092169260009283928592635c07eaab9260a480840193919291829003018186803b15801561096c57600080fd5b505afa158015610980573d6000803e3d6000fd5b505050506040513d604081101561099657600080fd5b508051602090910151855160608701519294509092506000916109c1918e918e918e918e9190610fe4565b90506109de6109d78d8d8d8d8a600001516111ba565b8290611278565b9050821580156109f15750818560200151105b15610a59578715610a49576040805162461bcd60e51b815260206004820152601f60248201527f5661756c743a206c6f737365732065786365656420636f6c6c61746572616c00604482015290519081900360640190fd5b600196509450610c969350505050565b602085015183610a75576020860151610a7290846112d0565b90505b81811015610ae1578815610ad0576040805162461bcd60e51b815260206004820152601d60248201527f5661756c743a20666565732065786365656420636f6c6c61746572616c000000604482015290519081900360640190fd5b600197509550610c96945050505050565b610b50856001600160a01b031663174d26946040518163ffffffff1660e01b815260040160206040518083038186803b158015610b1d57600080fd5b505afa158015610b31573d6000803e3d6000fd5b505050506040513d6020811015610b4757600080fd5b50518390611278565b811015610ba5578815610b945760405162461bcd60e51b81526004018080602001828103825260298152602001806115f06029913960400191505060405180910390fd5b50600196509450610c969350505050565b8551610bb390612710611312565b610c22866001600160a01b031663ae3302c26040518163ffffffff1660e01b815260040160206040518083038186803b158015610bef57600080fd5b505afa158015610c03573d6000803e3d6000fd5b505050506040513d6020811015610c1957600080fd5b50518390611312565b1015610c8a578815610c79576040805162461bcd60e51b815260206004820152601b60248201527a15985d5b1d0e881b585e13195d995c9859d948195e18d959591959602a1b604482015290519081900360640190fd5b50600296509450610c969350505050565b50600096509450505050505b9550959350505050565b600154604080516342b60b0360e01b81526001600160a01b0386811660048301529151600093849316916342b60b03916024808301926020929190829003018186803b158015610cef57600080fd5b505afa158015610d03573d6000803e3d6000fd5b505050506040513d6020811015610d1957600080fd5b50518015610d9c5750600154604080516342b60b0360e01b81526001600160a01b038781166004830152915191909216916342b60b03916024808301926020929190829003018186803b158015610d6f57600080fd5b505afa158015610d83573d6000803e3d6000fd5b505050506040513d6020811015610d9957600080fd5b50515b9050600081610e2457600160009054906101000a90046001600160a01b03166001600160a01b031663a22f23926040518163ffffffff1660e01b815260040160206040518083038186803b158015610df357600080fd5b505afa158015610e07573d6000803e3d6000fd5b505050506040513d6020811015610e1d57600080fd5b5051610e9f565b600160009054906101000a90046001600160a01b03166001600160a01b031663df73a2676040518163ffffffff1660e01b815260040160206040518083038186803b158015610e7257600080fd5b505afa158015610e86573d6000803e3d6000fd5b505050506040513d6020811015610e9c57600080fd5b50515b9050600082610f2757600160009054906101000a90046001600160a01b03166001600160a01b0316637a210a2b6040518163ffffffff1660e01b815260040160206040518083038186803b158015610ef657600080fd5b505afa158015610f0a573d6000803e3d6000fd5b505050506040513d6020811015610f2057600080fd5b5051610fa2565b600160009054906101000a90046001600160a01b03166001600160a01b03166310eb56c26040518163ffffffff1660e01b815260040160206040518083038186803b158015610f7557600080fd5b505afa158015610f89573d6000803e3d6000fd5b505050506040513d6020811015610f9f57600080fd5b50515b90506000610fb48887858560016105cb565b90506000610fc68888868660006105cb565b9050808211610fd55780610fd7565b815b9998505050505050505050565b600082610ff3575060006110a0565b6001546040805163c65bc7b160e01b81526001600160a01b038981166004830152915160009361107a93879391169163c65bc7b191602480820192602092909190829003018186803b15801561104857600080fd5b505afa15801561105c573d6000803e3d6000fd5b505050506040513d602081101561107257600080fd5b5051906112d0565b90508061108b5760009150506110a0565b61109c620f42406107e48684611312565b9150505b9695505050505050565b60006105268383600160009054906101000a90046001600160a01b03166001600160a01b0316634d47b3046040518163ffffffff1660e01b815260040160206040518083038186803b1580156110ff57600080fd5b505afa158015611113573d6000803e3d6000fd5b505050506040513d602081101561112957600080fd5b505160015460408051637a210a2b60e01b815290516001600160a01b0390921691637a210a2b91600480820192602092909190829003018186803b15801561117057600080fd5b505afa158015611184573d6000803e3d6000fd5b505050506040513d602081101561119a57600080fd5b505160006105cb565b6001546001600160a01b031681565b600192915050565b6000816111c957506000610856565b60006112616127106107e461125a600160009054906101000a90046001600160a01b03166001600160a01b031663318bc6896040518163ffffffff1660e01b815260040160206040518083038186803b15801561122557600080fd5b505afa158015611239573d6000803e3d6000fd5b505050506040513d602081101561124f57600080fd5b5051612710906112d0565b8690611312565b905061126d83826112d0565b979650505050505050565b600082820183811015610526576040805162461bcd60e51b815260206004820152601b60248201527a536166654d6174683a206164646974696f6e206f766572666c6f7760281b604482015290519081900360640190fd5b600061052683836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f7700008152506114b6565b60008261132157506000610529565b8282028284828161132e57fe5b04146105265760405162461bcd60e51b81526004018080602001828103825260218152602001806116196021913960400191505060405180910390fd5b600061052683836040518060400160405280601a815260200179536166654d6174683a206469766973696f6e206279207a65726f60301b81525061154d565b6113b26115b2565b6001546001600160a01b03166113c66115b2565b6000806000806000866001600160a01b0316634a3f088d8d8d8d8d6040518563ffffffff1660e01b815260040180856001600160a01b03168152602001846001600160a01b03168152602001836001600160a01b0316815260200182151581526020019450505050506101006040518083038186803b15801561144857600080fd5b505afa15801561145c573d6000803e3d6000fd5b505050506040513d61010081101561147357600080fd5b50805160208083015160408085015160608087015160e090970151958d52938c01929092528a015288019190915260c087015250939a9950505050505050505050565b600081848411156115455760405162461bcd60e51b81526004018080602001828103825283818151815260200191508051906020019080838360005b8381101561150a5781810151838201526020016114f2565b50505050905090810190601f1680156115375780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b505050900390565b6000818361159c5760405162461bcd60e51b815260206004820181815283516024840152835190928392604490910191908501908083836000831561150a5781810151838201526020016114f2565b5060008385816115a857fe5b0495945050505050565b6040518060e0016040528060008152602001600081526020016000815260200160008152602001600081526020016000815260200160008152509056fe5661756c743a206c69717569646174696f6e20666565732065786365656420636f6c6c61746572616c536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f77a2646970667358221220bd0fb3cf875ee2ed197b727b6e618398a149d0653e75fff748d9c843d8aaab1e64736f6c634300060c0033
Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)
0000000000000000000000001546ec8b238dca09bb39196a18268cbb51a40853
-----Decoded View---------------
Arg [0] : _vault (address): 0x1546ec8B238dCA09Bb39196a18268CbB51A40853
-----Encoded View---------------
1 Constructor Arguments found :
Arg [0] : 0000000000000000000000001546ec8b238dca09bb39196a18268cbb51a40853
Deployed Bytecode Sourcemap
17567:8445:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;17931:52;;;:::i;:::-;;;;;;;;;;;;;;;;8152:18;;;:::i;:::-;;;;-1:-1:-1;;;;;8152:18:0;;;;;;;;;;;;;;22498:236;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;22498:236:0;;;;;;;;:::i;17990:56::-;;;:::i;18535:290::-;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;18535:290:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;18295:232;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;18295:232:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;21382:213::-;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;21382:213:0;;;;;;;;;;;;;;;;;;;:::i;24578:1431::-;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;24578:1431:0;;;;;;;;;;;;;;;;;;;;;;;;;:::i;8352:76::-;;;;;;;;;;;;;;;;-1:-1:-1;8352:76:0;-1:-1:-1;;;;;8352:76:0;;:::i;19609:1765::-;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;19609:1765:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;22988:779;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;22988:779:0;;;;;;;;;;;;;;;;;:::i;22023:467::-;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;22023:467:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;22742:238::-;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;22742:238:0;;;;;;;;:::i;17903:19::-;;;:::i;18130:157::-;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;18130:157:0;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;21603:412;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;21603:412:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;17931:52::-;17978:5;17931:52;:::o;8152:18::-;;;-1:-1:-1;;;;;8152:18:0;;:::o;22498:236::-;22599:7;22626:100;22644:6;22652:11;22665:5;;;;;;;;;-1:-1:-1;;;;;22665:5:0;-1:-1:-1;;;;;22665:28:0;;:30;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;22665:30:0;22697:5;;:22;;;-1:-1:-1;;;22697:22:0;;;;-1:-1:-1;;;;;22697:5:0;;;;:20;;:22;;;;;22665:30;;22697:22;;;;;;;;:5;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;22697:22:0;22721:4;22626:17;:100::i;:::-;22619:107;;22498:236;;;;;:::o;17990:56::-;18039:7;17990:56;:::o;18535:290::-;;;;;;;;:::o;18295:232::-;;;;;;:::o;21382:213::-;21541:5;;:46;;;-1:-1:-1;;;21541:46:0;;-1:-1:-1;;;;;21541:46:0;;;;;;;;;21514:7;;21541:5;;;;;:28;;:46;;;;;;;;;;;;;;;:5;:46;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;21541:46:0;;21382:213;-1:-1:-1;;;;21382:213:0:o;24578:1431::-;24763:5;;:22;;;-1:-1:-1;;;24763:22:0;;;;24738:7;;-1:-1:-1;;;;;24763:5:0;;:20;;:22;;;;;;;;;;;;;;:5;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;24763:22:0;24758:56;;-1:-1:-1;24796:15:0;24789:22;;24758:56;24850:5;;:25;;;-1:-1:-1;;;24850:25:0;;-1:-1:-1;;;;;24850:25:0;;;;;;;;;24826:21;;24850:5;;;;;:17;;:25;;;;;;;;;;;;;;;:5;:25;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;24850:25:0;;-1:-1:-1;24886:18:0;24907:29;24850:25;24925:10;24907:17;:29::i;:::-;24886:50;;24952:10;24947:119;;25005:13;24992:10;:26;:62;;25025:29;:13;25043:10;25025:17;:29::i;:::-;24992:62;;;25021:1;24992:62;24979:75;;24947:119;25101:5;;:33;;;-1:-1:-1;;;25101:33:0;;-1:-1:-1;;;;;25101:33:0;;;;;;;;;25078:20;;25101:5;;;;;:25;;:33;;;;;;;;;;;;;;;:5;:33;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;25101:33:0;;-1:-1:-1;25149:17:0;25145:50;;25177:15;25170:22;;;;;;;25145:50;25207:19;25245:12;25229:13;:28;:96;;25294:31;:12;25311:13;25294:16;:31::i;:::-;25229:96;;;25260:31;:13;25278:12;25260:17;:31::i;:::-;25207:118;;25336:16;25368:12;25355:10;:25;:87;;25414:28;:12;25431:10;25414:16;:28::i;:::-;25355:87;;;25383:28;:10;25398:12;25383:14;:28::i;:::-;25336:106;;25521:11;25510:8;:22;25506:211;;;25549:17;25569:50;25606:12;25569:32;:15;25589:11;25569:19;:32::i;:::-;:36;;:50::i;:::-;25549:70;;25653:15;25641:9;:27;:64;;25675:30;:15;25695:9;25675:19;:30::i;:::-;25641:64;;;25671:1;25641:64;25634:71;;;;;;;;;;25506:211;25729:19;25751:32;25781:1;25751:25;:11;25767:8;25751:15;:25::i;:32::-;25729:54;;25812:12;25798:11;:26;25794:85;;;-1:-1:-1;25855:12:0;25794:85;25889:14;25906:50;25943:12;25906:32;:15;25926:11;25906:19;:32::i;:50::-;25889:67;-1:-1:-1;25974:27:0;:15;25889:67;25974:19;:27::i;:::-;25967:34;;;;;;;;;24578:1431;;;;;;;;:::o;8352:76::-;8295:3;;-1:-1:-1;;;;;8295:3:0;8281:10;:17;8273:51;;;;;-1:-1:-1;;;8273:51:0;;;;;;;;;;;;-1:-1:-1;;;8273:51:0;;;;;;;;;;;;;;;8410:3:::1;:10:::0;;-1:-1:-1;;;;;;8410:10:0::1;-1:-1:-1::0;;;;;8410:10:0;;;::::1;::::0;;;::::1;::::0;;8352:76::o;19609:1765::-;19760:7;19769;19789:24;;:::i;:::-;19816:61;19828:8;19838:16;19856:11;19869:7;19816:11;:61::i;:::-;19904:5;;19985:13;;20000:21;;;;;20032:26;;;;19956:103;;-1:-1:-1;;;19956:103:0;;-1:-1:-1;;;;;19956:103:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;19789:88;;-1:-1:-1;19904:5:0;;;;;19888:13;;;;19904:5;;19956:15;;:103;;;;;20000:21;;19956:103;;;;;;19904:5;19956:103;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;19956:103:0;;;;;;;20155:13;;20170:25;;;;19956:103;;-1:-1:-1;19956:103:0;;-1:-1:-1;20070:18:0;;20091:105;;20105:8;;20115:16;;20133:11;;20146:7;;20155:13;20091;:105::i;:::-;20070:126;;20220:95;20235:79;20250:8;20260:16;20278:11;20291:7;20300:8;:13;;;20235:14;:79::i;:::-;20220:10;;:14;:95::i;:::-;20207:108;;20333:9;20332:10;:41;;;;;20368:5;20346:8;:19;;;:27;20332:41;20328:168;;;20394:6;20390:58;;;20404:41;;;-1:-1:-1;;;20404:41:0;;;;;;;;;;;;;;;;;;;;;;;;;;;20390:58;20470:1;;-1:-1:-1;20473:10:0;-1:-1:-1;20462:22:0;;-1:-1:-1;;;;20462:22:0;20328:168;20538:19;;;;20573:9;20568:95;;20621:19;;;;:30;;20645:5;20621:23;:30::i;:::-;20599:52;;20568:95;20701:10;20679:19;:32;20675:222;;;20732:6;20728:56;;;20742:39;;;-1:-1:-1;;;20742:39:0;;;;;;;;;;;;;;;;;;;;;;;;;;;20728:56;20862:1;;-1:-1:-1;20865:19:0;-1:-1:-1;20854:31:0;;-1:-1:-1;;;;;20854:31:0;20675:222;20935:42;20950:6;-1:-1:-1;;;;;20950:24:0;;:26;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;20950:26:0;20935:10;;:14;:42::i;:::-;20913:19;:64;20909:201;;;20998:6;20994:68;;;21008:51;;-1:-1:-1;;;21008:51:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;20994:68;-1:-1:-1;21084:1:0;;-1:-1:-1;21087:10:0;-1:-1:-1;21076:22:0;;-1:-1:-1;;;;21076:22:0;20909:201;21174:13;;:39;;17978:5;21174:17;:39::i;:::-;21126:45;21150:6;-1:-1:-1;;;;;21150:18:0;;:20;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;21150:20:0;21126:19;;:23;:45::i;:::-;:87;21122:210;;;21234:6;21230:54;;;21244:37;;;-1:-1:-1;;;21244:37:0;;;;;;;;;;;;-1:-1:-1;;;21244:37:0;;;;;;;;;;;;;;21230:54;-1:-1:-1;21306:1:0;;-1:-1:-1;21309:10:0;-1:-1:-1;21298:22:0;;-1:-1:-1;;;;21298:22:0;21122:210;-1:-1:-1;21352:1:0;;-1:-1:-1;21355:10:0;-1:-1:-1;;;;;19609:1765:0;;;;;;;;;:::o;22988:779::-;23147:5;;:28;;;-1:-1:-1;;;23147:28:0;;-1:-1:-1;;;;;23147:28:0;;;;;;;;;23107:7;;;;23147:5;;:18;;:28;;;;;;;;;;;;;;:5;:28;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;23147:28:0;:61;;;;-1:-1:-1;23179:5:0;;:29;;;-1:-1:-1;;;23179:29:0;;-1:-1:-1;;;;;23179:29:0;;;;;;;;;:5;;;;;:18;;:29;;;;;;;;;;;;;;:5;:29;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;23179:29:0;23147:61;23127:81;;23219:15;23237:12;:76;;23287:5;;;;;;;;;-1:-1:-1;;;;;23287:5:0;-1:-1:-1;;;;;23287:24:0;;:26;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;23287:26:0;23237:76;;;23252:5;;;;;;;;;-1:-1:-1;;;;;23252:5:0;-1:-1:-1;;;;;23252:30:0;;:32;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;23252:32:0;23237:76;23219:94;;23324:14;23341:12;:68;;23387:5;;;;;;;;;-1:-1:-1;;;;;23387:5:0;-1:-1:-1;;;;;23387:20:0;;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;23387:22:0;23341:68;;;23356:5;;;;;;;;;-1:-1:-1;;;;;23356:5:0;-1:-1:-1;;;;;23356:26:0;;:28;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;23356:28:0;23341:68;23324:85;;23420:24;23447:63;23465:8;23475:11;23488:7;23497:6;23505:4;23447:17;:63::i;:::-;23420:90;;23521:24;23548:65;23566:9;23577:11;23590:7;23599:6;23607:5;23548:17;:65::i;:::-;23521:92;;23705:16;23686;:35;:73;;23743:16;23686:73;;;23724:16;23686:73;23679:80;22988:779;-1:-1:-1;;;;;;;;;22988:779:0:o;22023:467::-;22215:7;22239:10;22235:29;;-1:-1:-1;22260:1:0;22253:8;;22235:29;22298:5;;:46;;;-1:-1:-1;;;22298:46:0;;-1:-1:-1;;;;;22298:46:0;;;;;;;;;22276:19;;22298:69;;22349:17;;22298:5;;;:28;;:46;;;;;;;;;;;;;;;:5;:46;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;22298:46:0;;:50;:69::i;:::-;22276:91;-1:-1:-1;22382:16:0;22378:35;;22409:1;22402:8;;;;;22378:35;22432:50;18039:7;22432:22;:5;22442:11;22432:9;:22::i;:50::-;22425:57;;;22023:467;;;;;;;;;:::o;22742:238::-;22844:7;22871:101;22889:6;22897:11;22910:5;;;;;;;;;-1:-1:-1;;;;;22910:5:0;-1:-1:-1;;;;;22910:28:0;;:30;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;22910:30:0;22942:5;;:22;;;-1:-1:-1;;;22942:22:0;;;;-1:-1:-1;;;;;22942:5:0;;;;:20;;:22;;;;;22910:30;;22942:22;;;;;;;;:5;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;22942:22:0;22966:5;22871:17;:101::i;17903:19::-;;;-1:-1:-1;;;;;17903:19:0;;:::o;18130:157::-;18275:4;18130:157;;;;:::o;21603:412::-;21780:7;21804:15;21800:34;;-1:-1:-1;21830:1:0;21823:8;;21800:34;21844:19;21866:96;17978:5;21866:70;21881:54;21906:5;;;;;;;;;-1:-1:-1;;;;;21906:5:0;-1:-1:-1;;;;;21906:26:0;;:28;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;21906:28:0;17978:5;;21881:24;:54::i;:::-;21866:10;;:14;:70::i;:96::-;21844:118;-1:-1:-1;21980:27:0;:10;21844:118;21980:14;:27::i;:::-;21973:34;21603:412;-1:-1:-1;;;;;;;21603:412:0:o;902:181::-;960:7;992:5;;;1016:6;;;;1008:46;;;;;-1:-1:-1;;;1008:46:0;;;;;;;;;;;;-1:-1:-1;;;1008:46:0;;;;;;;;;;;;;;1366:136;1424:7;1451:43;1455:1;1458;1451:43;;;;;;;;;;;;;;;;;:3;:43::i;2256:471::-;2314:7;2559:6;2555:47;;-1:-1:-1;2589:1:0;2582:8;;2555:47;2626:5;;;2630:1;2626;:5;:1;2650:5;;;;;:10;2642:56;;;;-1:-1:-1;;;2642:56:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3203:132;3261:7;3288:39;3292:1;3295;3288:39;;;;;;;;;;;;;-1:-1:-1;;;3288:39:0;;;:3;:39::i;18833:768::-;18956:15;;:::i;:::-;19000:5;;-1:-1:-1;;;;;19000:5:0;19016:24;;:::i;:::-;19067:12;19081:18;19101:20;19123:24;19206:25;19235:6;-1:-1:-1;;;;;19235:18:0;;19254:8;19264:16;19282:11;19295:7;19235:68;;;;;;;;;;;;;-1:-1:-1;;;;;19235:68:0;;;;;;-1:-1:-1;;;;;19235:68:0;;;;;;-1:-1:-1;;;;;19235:68:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;19235:68:0;;;;;;;;;;;;;;;;;;;;;;19318:20;;;19353:19;;;:32;;;;19400:21;;:36;19451:25;;:44;;;;19235:68;19510:26;;:46;-1:-1:-1;19318:20:0;;18833:768;-1:-1:-1;;;;;;;;;;18833:768:0:o;1805:192::-;1891:7;1927:12;1919:6;;;;1911:29;;;;-1:-1:-1;;;1911:29:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;1963:5:0;;;1805:192::o;3831:278::-;3917:7;3952:12;3945:5;3937:28;;;;-1:-1:-1;;;3937:28:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3976:9;3992:1;3988;:5;;;;;;;3831:278;-1:-1:-1;;;;;3831:278:0:o;-1:-1:-1:-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o
Swarm Source
ipfs://bd0fb3cf875ee2ed197b727b6e618398a149d0653e75fff748d9c843d8aaab1e
Loading...
Loading
Loading...
Loading
Multichain Portfolio | 30 Chains
Chain | Token | Portfolio % | Price | Amount | Value |
---|
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.