Source Code
Overview
ETH Balance
0 ETH
More Info
ContractCreator
Multi Chain
Multichain Addresses
0 address found via
Latest 1 from a total of 1 transactions
Transaction Hash |
Method
|
Block
|
From
|
To
|
Value | ||||
---|---|---|---|---|---|---|---|---|---|
0x61014060 | 8378985 | 315 days 17 hrs ago | IN | Create: StakeUIHelper | 0 ETH | 0.00307029 |
Loading...
Loading
Contract Name:
StakeUIHelper
Compiler Version
v0.7.5+commit.eb77ed08
Optimization Enabled:
Yes with 200 runs
Other Settings:
default evmVersion
Contract Source Code (Solidity Standard Json-Input format)
// SPDX-License-Identifier: MIT pragma solidity 0.7.5; pragma experimental ABIEncoderV2; import {IStakedToken} from '../interfaces/IStakedToken.sol'; import {StakeUIHelperI} from '../interfaces/StakeUIHelperI.sol'; import {IERC20WithNonce} from '../interfaces/IERC20WithNonce.sol'; import {BPTPriceFeedI} from '../interfaces/BPTPriceFeedI.sol'; import {IPriceOracle} from '../interfaces/IPriceOracle.sol'; import {IERC20} from '../interfaces/IERC20.sol'; contract StakeUIHelper is StakeUIHelperI { IPriceOracle public immutable PRICE_ORACLE; BPTPriceFeedI public immutable BPT_PRICE_FEED; address public immutable AAVE; IStakedToken public immutable STAKED_AAVE; address public immutable BPT; IStakedToken public immutable STAKED_BPT; uint256 constant SECONDS_PER_YEAR = 365 * 24 * 60 * 60; uint256 constant APY_PRECISION = 10000; address constant MOCK_USD_ADDRESS = 0xCCa7d1416518D095E729904aAeA087dBA749A4dC; uint256 internal constant USD_BASE = 1e26; constructor( IPriceOracle priceOracle, BPTPriceFeedI bptPriceFeed, address aave, IStakedToken stkAave, address bpt, IStakedToken stkBpt ) public { PRICE_ORACLE = priceOracle; BPT_PRICE_FEED = bptPriceFeed; AAVE = aave; STAKED_AAVE = stkAave; BPT = bpt; STAKED_BPT = stkBpt; } function _getUserAndGeneralStakedAssetData( IStakedToken stakeToken, address underlyingToken, address user, bool isNonceAvailable ) internal view returns (AssetUIData memory) { AssetUIData memory data; GeneralStakeUIData memory generalStakeData = _getGeneralStakedAssetData(stakeToken); data.stakeTokenTotalSupply = generalStakeData.stakeTokenTotalSupply; data.stakeCooldownSeconds = generalStakeData.stakeCooldownSeconds; data.stakeUnstakeWindow = generalStakeData.stakeUnstakeWindow; data.rewardTokenPriceEth = generalStakeData.rewardTokenPriceEth; data.distributionEnd = generalStakeData.distributionEnd; data.distributionPerSecond = generalStakeData.distributionPerSecond; if (user != address(0)) { UserStakeUIData memory userStakeData = _getUserStakedAssetData( stakeToken, underlyingToken, user, isNonceAvailable ); data.underlyingTokenUserBalance = userStakeData.underlyingTokenUserBalance; data.stakeTokenUserBalance = userStakeData.stakeTokenUserBalance; data.userIncentivesToClaim = userStakeData.userIncentivesToClaim; data.userCooldown = userStakeData.userCooldown; data.userPermitNonce = userStakeData.userPermitNonce; } return data; } function _getUserStakedAssetData( IStakedToken stakeToken, address underlyingToken, address user, bool isNonceAvailable ) internal view returns (UserStakeUIData memory) { UserStakeUIData memory data; data.underlyingTokenUserBalance = IERC20(underlyingToken).balanceOf(user); data.stakeTokenUserBalance = stakeToken.balanceOf(user); data.userIncentivesToClaim = stakeToken.getTotalRewardsBalance(user); data.userCooldown = stakeToken.stakersCooldowns(user); data.userPermitNonce = isNonceAvailable ? IERC20WithNonce(underlyingToken)._nonces(user) : 0; return data; } function _getGeneralStakedAssetData(IStakedToken stakeToken) internal view returns (GeneralStakeUIData memory) { GeneralStakeUIData memory data; data.stakeTokenTotalSupply = stakeToken.totalSupply(); data.stakeCooldownSeconds = stakeToken.COOLDOWN_SECONDS(); data.stakeUnstakeWindow = stakeToken.UNSTAKE_WINDOW(); data.rewardTokenPriceEth = PRICE_ORACLE.getAssetPrice(AAVE); data.distributionEnd = stakeToken.DISTRIBUTION_END(); if (block.timestamp < data.distributionEnd) { data.distributionPerSecond = stakeToken.assets(address(stakeToken)).emissionPerSecond; } return data; } function _calculateApy(uint256 distributionPerSecond, uint256 stakeTokenTotalSupply) internal pure returns (uint256) { if (stakeTokenTotalSupply == 0) return 0; return (distributionPerSecond * SECONDS_PER_YEAR * APY_PRECISION) / stakeTokenTotalSupply; } function getStkAaveData(address user) public view override returns (AssetUIData memory) { AssetUIData memory data = _getUserAndGeneralStakedAssetData(STAKED_AAVE, AAVE, user, false); data.stakeTokenPriceEth = data.rewardTokenPriceEth; data.stakeApy = _calculateApy(data.distributionPerSecond, data.stakeTokenTotalSupply); return data; } function getStkBptData(address user) public view override returns (AssetUIData memory) { AssetUIData memory data = _getUserAndGeneralStakedAssetData(STAKED_BPT, BPT, user, false); data.stakeTokenPriceEth = address(BPT_PRICE_FEED) != address(0) ? BPT_PRICE_FEED.latestAnswer() : PRICE_ORACLE.getAssetPrice(BPT); data.stakeApy = _calculateApy( data.distributionPerSecond * data.rewardTokenPriceEth, data.stakeTokenTotalSupply * data.stakeTokenPriceEth ); return data; } function getStkGeneralAaveData() public view override returns (GeneralStakeUIData memory) { GeneralStakeUIData memory data = _getGeneralStakedAssetData(STAKED_AAVE); data.stakeTokenPriceEth = data.rewardTokenPriceEth; data.stakeApy = _calculateApy(data.distributionPerSecond, data.stakeTokenTotalSupply); return data; } function getStkGeneralBptData() public view override returns (GeneralStakeUIData memory) { GeneralStakeUIData memory data = _getGeneralStakedAssetData(STAKED_BPT); data.stakeTokenPriceEth = address(BPT_PRICE_FEED) != address(0) ? BPT_PRICE_FEED.latestAnswer() : PRICE_ORACLE.getAssetPrice(BPT); data.stakeApy = _calculateApy( data.distributionPerSecond * data.rewardTokenPriceEth, data.stakeTokenTotalSupply * data.stakeTokenPriceEth ); return data; } function getStkUserAaveData(address user) public view override returns (UserStakeUIData memory) { UserStakeUIData memory data = _getUserStakedAssetData(STAKED_AAVE, AAVE, user, false); return data; } function getStkUserBptData(address user) public view override returns (UserStakeUIData memory) { UserStakeUIData memory data = _getUserStakedAssetData(STAKED_BPT, BPT, user, false); return data; } function getUserUIData(address user) external view override returns ( AssetUIData memory, AssetUIData memory emptyData, uint256 ) { return ( getStkAaveData(user), emptyData, USD_BASE / PRICE_ORACLE.getAssetPrice(MOCK_USD_ADDRESS) ); } function getGeneralStakeUIData() external view override returns ( GeneralStakeUIData memory, GeneralStakeUIData memory emptyData, uint256 ) { return ( getStkGeneralAaveData(), emptyData, USD_BASE / PRICE_ORACLE.getAssetPrice(MOCK_USD_ADDRESS) ); } function getUserStakeUIData(address user) external view override returns ( UserStakeUIData memory, UserStakeUIData memory emptyData, uint256 ) { return ( getStkUserAaveData(user), emptyData, USD_BASE / PRICE_ORACLE.getAssetPrice(MOCK_USD_ADDRESS) ); } }
// SPDX-License-Identifier: MIT pragma solidity 0.7.5; interface BPTPriceFeedI { function latestAnswer() external view returns (uint256); }
// SPDX-License-Identifier: MIT pragma solidity 0.7.5; /** * @dev Interface of the ERC20 standard as defined in the EIP. * From https://github.com/OpenZeppelin/openzeppelin-contracts */ 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); }
// SPDX-License-Identifier: agpl-3.0 pragma solidity 0.7.5; import {IERC20} from './IERC20.sol'; /** * @dev Interface for ERC20 including metadata **/ interface IERC20Detailed is IERC20 { function name() external view returns (string memory); function symbol() external view returns (string memory); function decimals() external view returns (uint8); }
// SPDX-License-Identifier: MIT pragma solidity 0.7.5; import {IERC20} from '../lib/ERC20.sol'; interface IERC20WithNonce is IERC20 { function _nonces(address user) external view returns (uint256); }
// SPDX-License-Identifier: MIT pragma solidity 0.7.5; interface IPriceOracle { function getAssetPrice(address asset) external view returns (uint256); }
// SPDX-License-Identifier: MIT pragma solidity 0.7.5; pragma experimental ABIEncoderV2; interface IStakedToken { struct AssetData { uint128 emissionPerSecond; uint128 lastUpdateTimestamp; uint256 index; } function totalSupply() external view returns (uint256); function COOLDOWN_SECONDS() external view returns (uint256); function UNSTAKE_WINDOW() external view returns (uint256); function DISTRIBUTION_END() external view returns (uint256); function assets(address asset) external view returns (AssetData memory); function balanceOf(address user) external view returns (uint256); function getTotalRewardsBalance(address user) external view returns (uint256); function stakersCooldowns(address user) external view returns (uint256); }
// SPDX-License-Identifier: MIT pragma solidity 0.7.5; pragma experimental ABIEncoderV2; interface StakeUIHelperI { struct AssetUIData { uint256 stakeTokenTotalSupply; uint256 stakeCooldownSeconds; uint256 stakeUnstakeWindow; uint256 stakeTokenPriceEth; uint256 rewardTokenPriceEth; uint256 stakeApy; uint128 distributionPerSecond; uint256 distributionEnd; uint256 stakeTokenUserBalance; uint256 underlyingTokenUserBalance; uint256 userCooldown; uint256 userIncentivesToClaim; uint256 userPermitNonce; } struct GeneralStakeUIData { uint256 stakeTokenTotalSupply; uint256 stakeCooldownSeconds; uint256 stakeUnstakeWindow; uint256 stakeTokenPriceEth; uint256 rewardTokenPriceEth; uint256 stakeApy; uint128 distributionPerSecond; uint256 distributionEnd; } struct UserStakeUIData { uint256 stakeTokenUserBalance; uint256 underlyingTokenUserBalance; uint256 userCooldown; uint256 userIncentivesToClaim; uint256 userPermitNonce; } function getStkAaveData(address user) external view returns (AssetUIData memory); function getStkBptData(address user) external view returns (AssetUIData memory); function getStkGeneralAaveData() external view returns (GeneralStakeUIData memory); function getStkGeneralBptData() external view returns (GeneralStakeUIData memory); function getStkUserAaveData(address user) external view returns (UserStakeUIData memory); function getStkUserBptData(address user) external view returns (UserStakeUIData memory); /// @dev This will return user + general for fallback function getUserUIData(address user) external view returns ( AssetUIData memory, AssetUIData memory, uint256 ); function getGeneralStakeUIData() external view returns ( GeneralStakeUIData memory, GeneralStakeUIData memory, uint256 ); function getUserStakeUIData(address user) external view returns ( UserStakeUIData memory, UserStakeUIData memory, uint256 ); }
// SPDX-License-Identifier: MIT pragma solidity 0.7.5; /** * @dev From https://github.com/OpenZeppelin/openzeppelin-contracts * Provides information about the current execution context, including the * sender of the transaction and its data. While these are generally available * via msg.sender and msg.data, they should not be accessed in such a direct * manner, since when dealing with GSN meta-transactions the account sending and * paying for execution may not be the actual sender (as far as an application * is concerned). * * This contract is only required for intermediate, library-like contracts. */ abstract contract Context { function _msgSender() internal view virtual returns (address payable) { return msg.sender; } function _msgData() internal view virtual returns (bytes memory) { this; // silence state mutability warning without generating bytecode - see https://github.com/ethereum/solidity/issues/2691 return msg.data; } }
// SPDX-License-Identifier: agpl-3.0 pragma solidity 0.7.5; import {Context} from './Context.sol'; import {IERC20} from '../interfaces/IERC20.sol'; import {IERC20Detailed} from '../interfaces/IERC20Detailed.sol'; import {SafeMath} from './SafeMath.sol'; /** * @title ERC20 * @notice Basic ERC20 implementation * @author Aave **/ contract ERC20 is Context, IERC20, IERC20Detailed { using SafeMath for uint256; mapping(address => uint256) private _balances; mapping(address => mapping(address => uint256)) private _allowances; uint256 private _totalSupply; string private _name; string private _symbol; uint8 private _decimals; constructor( string memory name, string memory symbol, uint8 decimals ) public { _name = name; _symbol = symbol; _decimals = decimals; } /** * @return the name of the token **/ function name() public view override returns (string memory) { return _name; } /** * @return the symbol of the token **/ function symbol() public view override returns (string memory) { return _symbol; } /** * @return the decimals of the token **/ function decimals() public view override returns (uint8) { return _decimals; } /** * @return the total supply of the token **/ function totalSupply() public view override returns (uint256) { return _totalSupply; } /** * @return the balance of the token **/ function balanceOf(address account) public view override returns (uint256) { return _balances[account]; } /** * @dev executes a transfer of tokens from msg.sender to recipient * @param recipient the recipient of the tokens * @param amount the amount of tokens being transferred * @return true if the transfer succeeds, false otherwise **/ function transfer(address recipient, uint256 amount) public virtual override returns (bool) { _transfer(_msgSender(), recipient, amount); return true; } /** * @dev returns the allowance of spender on the tokens owned by owner * @param owner the owner of the tokens * @param spender the user allowed to spend the owner's tokens * @return the amount of owner's tokens spender is allowed to spend **/ function allowance(address owner, address spender) public view virtual override returns (uint256) { return _allowances[owner][spender]; } /** * @dev allows spender to spend the tokens owned by msg.sender * @param spender the user allowed to spend msg.sender tokens * @return true **/ function approve(address spender, uint256 amount) public virtual override returns (bool) { _approve(_msgSender(), spender, amount); return true; } /** * @dev executes a transfer of token from sender to recipient, if msg.sender is allowed to do so * @param sender the owner of the tokens * @param recipient the recipient of the tokens * @param amount the amount of tokens being transferred * @return true if the transfer succeeds, false otherwise **/ function transferFrom( address sender, address recipient, uint256 amount ) public virtual override returns (bool) { _transfer(sender, recipient, amount); _approve( sender, _msgSender(), _allowances[sender][_msgSender()].sub(amount, 'ERC20: transfer amount exceeds allowance') ); return true; } /** * @dev increases the allowance of spender to spend msg.sender tokens * @param spender the user allowed to spend on behalf of msg.sender * @param addedValue the amount being added to the allowance * @return true **/ function increaseAllowance(address spender, uint256 addedValue) public virtual returns (bool) { _approve(_msgSender(), spender, _allowances[_msgSender()][spender].add(addedValue)); return true; } /** * @dev decreases the allowance of spender to spend msg.sender tokens * @param spender the user allowed to spend on behalf of msg.sender * @param subtractedValue the amount being subtracted to the allowance * @return true **/ function decreaseAllowance(address spender, uint256 subtractedValue) public virtual returns (bool) { _approve( _msgSender(), spender, _allowances[_msgSender()][spender].sub( subtractedValue, 'ERC20: decreased allowance below zero' ) ); return true; } function _transfer( address sender, address recipient, uint256 amount ) internal virtual { require(sender != address(0), 'ERC20: transfer from the zero address'); require(recipient != address(0), 'ERC20: transfer to the zero address'); _beforeTokenTransfer(sender, recipient, amount); _balances[sender] = _balances[sender].sub(amount, 'ERC20: transfer amount exceeds balance'); _balances[recipient] = _balances[recipient].add(amount); emit Transfer(sender, recipient, amount); } function _mint(address account, uint256 amount) internal virtual { require(account != address(0), 'ERC20: mint to the zero address'); _beforeTokenTransfer(address(0), account, amount); _totalSupply = _totalSupply.add(amount); _balances[account] = _balances[account].add(amount); emit Transfer(address(0), account, amount); } function _burn(address account, uint256 amount) internal virtual { require(account != address(0), 'ERC20: burn from the zero address'); _beforeTokenTransfer(account, address(0), amount); _balances[account] = _balances[account].sub(amount, 'ERC20: burn amount exceeds balance'); _totalSupply = _totalSupply.sub(amount); emit Transfer(account, address(0), amount); } function _approve( address owner, address spender, uint256 amount ) internal virtual { require(owner != address(0), 'ERC20: approve from the zero address'); require(spender != address(0), 'ERC20: approve to the zero address'); _allowances[owner][spender] = amount; emit Approval(owner, spender, amount); } function _setName(string memory newName) internal { _name = newName; } function _setSymbol(string memory newSymbol) internal { _symbol = newSymbol; } function _setDecimals(uint8 newDecimals) internal { _decimals = newDecimals; } function _beforeTokenTransfer( address from, address to, uint256 amount ) internal virtual {} }
// SPDX-License-Identifier: agpl-3.0 pragma solidity 0.7.5; /** * @dev From https://github.com/OpenZeppelin/openzeppelin-contracts * 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) { // Solidity only automatically asserts when dividing by 0 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; } }
{ "optimizer": { "enabled": true, "runs": 200 }, "evmVersion": "istanbul", "outputSelection": { "*": { "*": [ "evm.bytecode", "evm.deployedBytecode", "devdoc", "userdoc", "metadata", "abi" ] } }, "libraries": {} }
[{"inputs":[{"internalType":"contract IPriceOracle","name":"priceOracle","type":"address"},{"internalType":"contract BPTPriceFeedI","name":"bptPriceFeed","type":"address"},{"internalType":"address","name":"aave","type":"address"},{"internalType":"contract IStakedToken","name":"stkAave","type":"address"},{"internalType":"address","name":"bpt","type":"address"},{"internalType":"contract IStakedToken","name":"stkBpt","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"inputs":[],"name":"AAVE","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"BPT","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"BPT_PRICE_FEED","outputs":[{"internalType":"contract BPTPriceFeedI","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"PRICE_ORACLE","outputs":[{"internalType":"contract IPriceOracle","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"STAKED_AAVE","outputs":[{"internalType":"contract IStakedToken","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"STAKED_BPT","outputs":[{"internalType":"contract IStakedToken","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getGeneralStakeUIData","outputs":[{"components":[{"internalType":"uint256","name":"stakeTokenTotalSupply","type":"uint256"},{"internalType":"uint256","name":"stakeCooldownSeconds","type":"uint256"},{"internalType":"uint256","name":"stakeUnstakeWindow","type":"uint256"},{"internalType":"uint256","name":"stakeTokenPriceEth","type":"uint256"},{"internalType":"uint256","name":"rewardTokenPriceEth","type":"uint256"},{"internalType":"uint256","name":"stakeApy","type":"uint256"},{"internalType":"uint128","name":"distributionPerSecond","type":"uint128"},{"internalType":"uint256","name":"distributionEnd","type":"uint256"}],"internalType":"struct StakeUIHelperI.GeneralStakeUIData","name":"","type":"tuple"},{"components":[{"internalType":"uint256","name":"stakeTokenTotalSupply","type":"uint256"},{"internalType":"uint256","name":"stakeCooldownSeconds","type":"uint256"},{"internalType":"uint256","name":"stakeUnstakeWindow","type":"uint256"},{"internalType":"uint256","name":"stakeTokenPriceEth","type":"uint256"},{"internalType":"uint256","name":"rewardTokenPriceEth","type":"uint256"},{"internalType":"uint256","name":"stakeApy","type":"uint256"},{"internalType":"uint128","name":"distributionPerSecond","type":"uint128"},{"internalType":"uint256","name":"distributionEnd","type":"uint256"}],"internalType":"struct StakeUIHelperI.GeneralStakeUIData","name":"emptyData","type":"tuple"},{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"user","type":"address"}],"name":"getStkAaveData","outputs":[{"components":[{"internalType":"uint256","name":"stakeTokenTotalSupply","type":"uint256"},{"internalType":"uint256","name":"stakeCooldownSeconds","type":"uint256"},{"internalType":"uint256","name":"stakeUnstakeWindow","type":"uint256"},{"internalType":"uint256","name":"stakeTokenPriceEth","type":"uint256"},{"internalType":"uint256","name":"rewardTokenPriceEth","type":"uint256"},{"internalType":"uint256","name":"stakeApy","type":"uint256"},{"internalType":"uint128","name":"distributionPerSecond","type":"uint128"},{"internalType":"uint256","name":"distributionEnd","type":"uint256"},{"internalType":"uint256","name":"stakeTokenUserBalance","type":"uint256"},{"internalType":"uint256","name":"underlyingTokenUserBalance","type":"uint256"},{"internalType":"uint256","name":"userCooldown","type":"uint256"},{"internalType":"uint256","name":"userIncentivesToClaim","type":"uint256"},{"internalType":"uint256","name":"userPermitNonce","type":"uint256"}],"internalType":"struct StakeUIHelperI.AssetUIData","name":"","type":"tuple"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"user","type":"address"}],"name":"getStkBptData","outputs":[{"components":[{"internalType":"uint256","name":"stakeTokenTotalSupply","type":"uint256"},{"internalType":"uint256","name":"stakeCooldownSeconds","type":"uint256"},{"internalType":"uint256","name":"stakeUnstakeWindow","type":"uint256"},{"internalType":"uint256","name":"stakeTokenPriceEth","type":"uint256"},{"internalType":"uint256","name":"rewardTokenPriceEth","type":"uint256"},{"internalType":"uint256","name":"stakeApy","type":"uint256"},{"internalType":"uint128","name":"distributionPerSecond","type":"uint128"},{"internalType":"uint256","name":"distributionEnd","type":"uint256"},{"internalType":"uint256","name":"stakeTokenUserBalance","type":"uint256"},{"internalType":"uint256","name":"underlyingTokenUserBalance","type":"uint256"},{"internalType":"uint256","name":"userCooldown","type":"uint256"},{"internalType":"uint256","name":"userIncentivesToClaim","type":"uint256"},{"internalType":"uint256","name":"userPermitNonce","type":"uint256"}],"internalType":"struct StakeUIHelperI.AssetUIData","name":"","type":"tuple"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getStkGeneralAaveData","outputs":[{"components":[{"internalType":"uint256","name":"stakeTokenTotalSupply","type":"uint256"},{"internalType":"uint256","name":"stakeCooldownSeconds","type":"uint256"},{"internalType":"uint256","name":"stakeUnstakeWindow","type":"uint256"},{"internalType":"uint256","name":"stakeTokenPriceEth","type":"uint256"},{"internalType":"uint256","name":"rewardTokenPriceEth","type":"uint256"},{"internalType":"uint256","name":"stakeApy","type":"uint256"},{"internalType":"uint128","name":"distributionPerSecond","type":"uint128"},{"internalType":"uint256","name":"distributionEnd","type":"uint256"}],"internalType":"struct StakeUIHelperI.GeneralStakeUIData","name":"","type":"tuple"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getStkGeneralBptData","outputs":[{"components":[{"internalType":"uint256","name":"stakeTokenTotalSupply","type":"uint256"},{"internalType":"uint256","name":"stakeCooldownSeconds","type":"uint256"},{"internalType":"uint256","name":"stakeUnstakeWindow","type":"uint256"},{"internalType":"uint256","name":"stakeTokenPriceEth","type":"uint256"},{"internalType":"uint256","name":"rewardTokenPriceEth","type":"uint256"},{"internalType":"uint256","name":"stakeApy","type":"uint256"},{"internalType":"uint128","name":"distributionPerSecond","type":"uint128"},{"internalType":"uint256","name":"distributionEnd","type":"uint256"}],"internalType":"struct StakeUIHelperI.GeneralStakeUIData","name":"","type":"tuple"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"user","type":"address"}],"name":"getStkUserAaveData","outputs":[{"components":[{"internalType":"uint256","name":"stakeTokenUserBalance","type":"uint256"},{"internalType":"uint256","name":"underlyingTokenUserBalance","type":"uint256"},{"internalType":"uint256","name":"userCooldown","type":"uint256"},{"internalType":"uint256","name":"userIncentivesToClaim","type":"uint256"},{"internalType":"uint256","name":"userPermitNonce","type":"uint256"}],"internalType":"struct StakeUIHelperI.UserStakeUIData","name":"","type":"tuple"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"user","type":"address"}],"name":"getStkUserBptData","outputs":[{"components":[{"internalType":"uint256","name":"stakeTokenUserBalance","type":"uint256"},{"internalType":"uint256","name":"underlyingTokenUserBalance","type":"uint256"},{"internalType":"uint256","name":"userCooldown","type":"uint256"},{"internalType":"uint256","name":"userIncentivesToClaim","type":"uint256"},{"internalType":"uint256","name":"userPermitNonce","type":"uint256"}],"internalType":"struct StakeUIHelperI.UserStakeUIData","name":"","type":"tuple"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"user","type":"address"}],"name":"getUserStakeUIData","outputs":[{"components":[{"internalType":"uint256","name":"stakeTokenUserBalance","type":"uint256"},{"internalType":"uint256","name":"underlyingTokenUserBalance","type":"uint256"},{"internalType":"uint256","name":"userCooldown","type":"uint256"},{"internalType":"uint256","name":"userIncentivesToClaim","type":"uint256"},{"internalType":"uint256","name":"userPermitNonce","type":"uint256"}],"internalType":"struct StakeUIHelperI.UserStakeUIData","name":"","type":"tuple"},{"components":[{"internalType":"uint256","name":"stakeTokenUserBalance","type":"uint256"},{"internalType":"uint256","name":"underlyingTokenUserBalance","type":"uint256"},{"internalType":"uint256","name":"userCooldown","type":"uint256"},{"internalType":"uint256","name":"userIncentivesToClaim","type":"uint256"},{"internalType":"uint256","name":"userPermitNonce","type":"uint256"}],"internalType":"struct StakeUIHelperI.UserStakeUIData","name":"emptyData","type":"tuple"},{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"user","type":"address"}],"name":"getUserUIData","outputs":[{"components":[{"internalType":"uint256","name":"stakeTokenTotalSupply","type":"uint256"},{"internalType":"uint256","name":"stakeCooldownSeconds","type":"uint256"},{"internalType":"uint256","name":"stakeUnstakeWindow","type":"uint256"},{"internalType":"uint256","name":"stakeTokenPriceEth","type":"uint256"},{"internalType":"uint256","name":"rewardTokenPriceEth","type":"uint256"},{"internalType":"uint256","name":"stakeApy","type":"uint256"},{"internalType":"uint128","name":"distributionPerSecond","type":"uint128"},{"internalType":"uint256","name":"distributionEnd","type":"uint256"},{"internalType":"uint256","name":"stakeTokenUserBalance","type":"uint256"},{"internalType":"uint256","name":"underlyingTokenUserBalance","type":"uint256"},{"internalType":"uint256","name":"userCooldown","type":"uint256"},{"internalType":"uint256","name":"userIncentivesToClaim","type":"uint256"},{"internalType":"uint256","name":"userPermitNonce","type":"uint256"}],"internalType":"struct StakeUIHelperI.AssetUIData","name":"","type":"tuple"},{"components":[{"internalType":"uint256","name":"stakeTokenTotalSupply","type":"uint256"},{"internalType":"uint256","name":"stakeCooldownSeconds","type":"uint256"},{"internalType":"uint256","name":"stakeUnstakeWindow","type":"uint256"},{"internalType":"uint256","name":"stakeTokenPriceEth","type":"uint256"},{"internalType":"uint256","name":"rewardTokenPriceEth","type":"uint256"},{"internalType":"uint256","name":"stakeApy","type":"uint256"},{"internalType":"uint128","name":"distributionPerSecond","type":"uint128"},{"internalType":"uint256","name":"distributionEnd","type":"uint256"},{"internalType":"uint256","name":"stakeTokenUserBalance","type":"uint256"},{"internalType":"uint256","name":"underlyingTokenUserBalance","type":"uint256"},{"internalType":"uint256","name":"userCooldown","type":"uint256"},{"internalType":"uint256","name":"userIncentivesToClaim","type":"uint256"},{"internalType":"uint256","name":"userPermitNonce","type":"uint256"}],"internalType":"struct StakeUIHelperI.AssetUIData","name":"emptyData","type":"tuple"},{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"}]
Contract Creation Code
6101406040523480156200001257600080fd5b506040516200173138038062001731833981016040819052620000359162000076565b6001600160601b0319606096871b811660805294861b851660a05292851b841660c05290841b831660e052831b82166101005290911b166101205262000122565b60008060008060008060c087890312156200008f578182fd5b86516200009c8162000109565b6020880151909650620000af8162000109565b6040880151909550620000c28162000109565b6060880151909450620000d58162000109565b6080880151909350620000e88162000109565b60a0880151909250620000fb8162000109565b809150509295509295509295565b6001600160a01b03811681146200011f57600080fd5b50565b60805160601c60a05160601c60c05160601c60e05160601c6101005160601c6101205160601c611545620001ec60003980610257528061055b52806106a452806108af52508061027852806104a752806106c5528061076052806109475250806103a8528061040552806104de52806105375250806103c9528061042652806104835280610ff052508061066d52806106f052806107df52806108d752806109c652508061022052806102db52806105b15280610733528061091a5280610fc352506115456000f3fe608060405234801561001057600080fd5b50600436106100f55760003560e01c806387fc93fe11610097578063cfe7b31211610066578063cfe7b312146101d9578063d4aeef2b146101e1578063d733ab61146101f4578063f48ba8c2146101fc576100f5565b806387fc93fe146101925780638e6a6941146101a7578063ad809caa146101af578063b0c2bb3a146101b7576100f5565b806331f8cf50116100d357806331f8cf501461014f5780633a6c7cd71461016257806348ccda3c146101825780634f0640861461018a576100f5565b80630a19399a146100fa5780630f3476c4146101185780632aa8364a14610138575b600080fd5b61010261021e565b60405161010f919061144c565b60405180910390f35b61012b610126366004611286565b610242565b60405161010f91906114d6565b6101406102a8565b60405161010f939291906114aa565b61012b61015d366004611286565b610393565b610175610170366004611286565b6103f0565b60405161010f9190611460565b610102610481565b6101026104a5565b61019a6104c9565b60405161010f919061149b565b610102610535565b610102610559565b6101ca6101c5366004611286565b61057d565b60405161010f939291906114e4565b61010261066b565b6101756101ef366004611286565b61068f565b61019a61089a565b61020f61020a366004611286565b610a81565b60405161010f9392919061146f565b7f000000000000000000000000000000000000000000000000000000000000000081565b61024a611181565b610252611181565b61029f7f00000000000000000000000000000000000000000000000000000000000000007f0000000000000000000000000000000000000000000000000000000000000000856000610a9c565b9150505b919050565b6102b06111b0565b6102b86111b0565b60006102c26104c9565b60405163b3596f0760e01b815283906001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169063b3596f07906103249073cca7d1416518d095e729904aaea087dba749a4dc9060040161144c565b60206040518083038186803b15801561033c57600080fd5b505afa158015610350573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906103749190611315565b6a52b7d2dcc80cd2e40000008161038757fe5b04925092509250909192565b61039b611181565b6103a3611181565b61029f7f00000000000000000000000000000000000000000000000000000000000000007f0000000000000000000000000000000000000000000000000000000000000000856000610a9c565b6103f86111fe565b6104006111fe565b61044d7f00000000000000000000000000000000000000000000000000000000000000007f0000000000000000000000000000000000000000000000000000000000000000856000610d43565b6080810151606082015260c08101518151919250610476916001600160801b0390911690610e07565b60a082015292915050565b7f000000000000000000000000000000000000000000000000000000000000000081565b7f000000000000000000000000000000000000000000000000000000000000000081565b6104d16111b0565b6104d96111b0565b6105027f0000000000000000000000000000000000000000000000000000000000000000610e30565b6080810151606082015260c0810151815191925061052b916001600160801b0390911690610e07565b60a0820152905090565b7f000000000000000000000000000000000000000000000000000000000000000081565b7f000000000000000000000000000000000000000000000000000000000000000081565b610585611181565b61058d611181565b600061059884610393565b60405163b3596f0760e01b815283906001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169063b3596f07906105fa9073cca7d1416518d095e729904aaea087dba749a4dc9060040161144c565b60206040518083038186803b15801561061257600080fd5b505afa158015610626573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061064a9190611315565b6a52b7d2dcc80cd2e40000008161065d57fe5b049250925092509193909250565b7f000000000000000000000000000000000000000000000000000000000000000081565b6106976111fe565b61069f6111fe565b6106ec7f00000000000000000000000000000000000000000000000000000000000000007f0000000000000000000000000000000000000000000000000000000000000000856000610d43565b90507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166107dd5760405163b3596f0760e01b81526001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169063b3596f0790610788907f00000000000000000000000000000000000000000000000000000000000000009060040161144c565b60206040518083038186803b1580156107a057600080fd5b505afa1580156107b4573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906107d89190611315565b61086e565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166350d25bcd6040518163ffffffff1660e01b815260040160206040518083038186803b15801561083657600080fd5b505afa15801561084a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061086e9190611315565b60608201819052608082015160c08301518351610476936001600160801b039092169092029102610e07565b6108a26111b0565b6108aa6111b0565b6108d37f0000000000000000000000000000000000000000000000000000000000000000610e30565b90507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166109c45760405163b3596f0760e01b81526001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169063b3596f079061096f907f00000000000000000000000000000000000000000000000000000000000000009060040161144c565b60206040518083038186803b15801561098757600080fd5b505afa15801561099b573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109bf9190611315565b610a55565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166350d25bcd6040518163ffffffff1660e01b815260040160206040518083038186803b158015610a1d57600080fd5b505afa158015610a31573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a559190611315565b60608201819052608082015160c0830151835161052b936001600160801b039092169092029102610e07565b610a896111fe565b610a916111fe565b6000610598846103f0565b610aa4611181565b610aac611181565b6040516370a0823160e01b81526001600160a01b038616906370a0823190610ad890879060040161144c565b60206040518083038186803b158015610af057600080fd5b505afa158015610b04573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b289190611315565b60208201526040516370a0823160e01b81526001600160a01b038716906370a0823190610b5990879060040161144c565b60206040518083038186803b158015610b7157600080fd5b505afa158015610b85573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ba99190611315565b81526040516346df7f7160e11b81526001600160a01b03871690638dbefee290610bd790879060040161144c565b60206040518083038186803b158015610bef57600080fd5b505afa158015610c03573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c279190611315565b606082015260405163091030c360e01b81526001600160a01b0387169063091030c390610c5890879060040161144c565b60206040518083038186803b158015610c7057600080fd5b505afa158015610c84573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ca89190611315565b604082015282610cb9576000610d35565b60405163b9844d8d60e01b81526001600160a01b0386169063b9844d8d90610ce590879060040161144c565b60206040518083038186803b158015610cfd57600080fd5b505afa158015610d11573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d359190611315565b608082015295945050505050565b610d4b6111fe565b610d536111fe565b610d5b6111b0565b610d6487610e30565b8051835260208082015190840152604080820151908401526080808201519084015260e0808201519084015260c0808201516001600160801b03169084015290506001600160a01b03851615610dfd57610dbc611181565b610dc888888888610a9c565b602081015161012085015280516101008501526060810151610160850152604081015161014085015260800151610180840152505b5095945050505050565b600081610e1657506000610e2a565b8164496cebb800840281610e2657fe5b0490505b92915050565b610e386111b0565b610e406111b0565b826001600160a01b03166318160ddd6040518163ffffffff1660e01b815260040160206040518083038186803b158015610e7957600080fd5b505afa158015610e8d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610eb19190611315565b816000018181525050826001600160a01b03166372b49d636040518163ffffffff1660e01b815260040160206040518083038186803b158015610ef357600080fd5b505afa158015610f07573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f2b9190611315565b816020018181525050826001600160a01b031663359c4a966040518163ffffffff1660e01b815260040160206040518083038186803b158015610f6d57600080fd5b505afa158015610f81573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610fa59190611315565b6040808301919091525163b3596f0760e01b81526001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169063b3596f0790611018907f00000000000000000000000000000000000000000000000000000000000000009060040161144c565b60206040518083038186803b15801561103057600080fd5b505afa158015611044573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906110689190611315565b816080018181525050826001600160a01b031663919cd40f6040518163ffffffff1660e01b815260040160206040518083038186803b1580156110aa57600080fd5b505afa1580156110be573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906110e29190611315565b60e08201819052421015610e2a57604051631e23703160e31b81526001600160a01b0384169063f11b81889061111c90869060040161144c565b60606040518083038186803b15801561113457600080fd5b505afa158015611148573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061116c91906112b4565b516001600160801b031660c082015292915050565b6040518060a0016040528060008152602001600081526020016000815260200160008152602001600081525090565b60405180610100016040528060008152602001600081526020016000815260200160008152602001600081526020016000815260200160006001600160801b03168152602001600081525090565b604051806101a0016040528060008152602001600081526020016000815260200160008152602001600081526020016000815260200160006001600160801b031681526020016000815260200160008152602001600081526020016000815260200160008152602001600081525090565b80516001600160801b03811681146102a357600080fd5b600060208284031215611297578081fd5b81356001600160a01b03811681146112ad578182fd5b9392505050565b6000606082840312156112c5578081fd5b6040516060810181811067ffffffffffffffff821117156112e257fe5b6040526112ee8361126f565b81526112fc6020840161126f565b6020820152604083015160408201528091505092915050565b600060208284031215611326578081fd5b5051919050565b805182526020810151602083015260408101516040830152606081015160608301526080810151608083015260a081015160a083015260c081015161137560c084018261143f565b5060e08181015190830152610100808201519083015261012080820151908301526101408082015190830152610160808201519083015261018090810151910152565b805182526020810151602083015260408101516040830152606081015160608301526080810151608083015260a081015160a08301526001600160801b0360c08201511660c083015260e081015160e08301525050565b80518252602081015160208301526040810151604083015260608101516060830152608081015160808301525050565b6001600160801b03169052565b6001600160a01b0391909116815260200190565b6101a08101610e2a828461132d565b610360810161147e828661132d565b61148c6101a083018561132d565b82610340830152949350505050565b6101008101610e2a82846113b8565b61022081016114b982866113b8565b6114c76101008301856113b8565b82610200830152949350505050565b60a08101610e2a828461140f565b61016081016114f3828661140f565b61150060a083018561140f565b8261014083015294935050505056fea2646970667358221220e043cdd8824968e0a91bbdc864308db0ab01b972cbab03b4186fffc007d7404464736f6c63430007050033000000000000000000000000cb601629b36891c43943e3cda2eb18fac38b5c4e0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e205181eb3d7415f15377f79aa7769f846ce56dd000000000000000000000000b85b34c58129a9a7d54149e86934ed3922b0559200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
Deployed Bytecode
0x608060405234801561001057600080fd5b50600436106100f55760003560e01c806387fc93fe11610097578063cfe7b31211610066578063cfe7b312146101d9578063d4aeef2b146101e1578063d733ab61146101f4578063f48ba8c2146101fc576100f5565b806387fc93fe146101925780638e6a6941146101a7578063ad809caa146101af578063b0c2bb3a146101b7576100f5565b806331f8cf50116100d357806331f8cf501461014f5780633a6c7cd71461016257806348ccda3c146101825780634f0640861461018a576100f5565b80630a19399a146100fa5780630f3476c4146101185780632aa8364a14610138575b600080fd5b61010261021e565b60405161010f919061144c565b60405180910390f35b61012b610126366004611286565b610242565b60405161010f91906114d6565b6101406102a8565b60405161010f939291906114aa565b61012b61015d366004611286565b610393565b610175610170366004611286565b6103f0565b60405161010f9190611460565b610102610481565b6101026104a5565b61019a6104c9565b60405161010f919061149b565b610102610535565b610102610559565b6101ca6101c5366004611286565b61057d565b60405161010f939291906114e4565b61010261066b565b6101756101ef366004611286565b61068f565b61019a61089a565b61020f61020a366004611286565b610a81565b60405161010f9392919061146f565b7f000000000000000000000000cb601629b36891c43943e3cda2eb18fac38b5c4e81565b61024a611181565b610252611181565b61029f7f00000000000000000000000000000000000000000000000000000000000000007f0000000000000000000000000000000000000000000000000000000000000000856000610a9c565b9150505b919050565b6102b06111b0565b6102b86111b0565b60006102c26104c9565b60405163b3596f0760e01b815283906001600160a01b037f000000000000000000000000cb601629b36891c43943e3cda2eb18fac38b5c4e169063b3596f07906103249073cca7d1416518d095e729904aaea087dba749a4dc9060040161144c565b60206040518083038186803b15801561033c57600080fd5b505afa158015610350573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906103749190611315565b6a52b7d2dcc80cd2e40000008161038757fe5b04925092509250909192565b61039b611181565b6103a3611181565b61029f7f000000000000000000000000b85b34c58129a9a7d54149e86934ed3922b055927f000000000000000000000000e205181eb3d7415f15377f79aa7769f846ce56dd856000610a9c565b6103f86111fe565b6104006111fe565b61044d7f000000000000000000000000b85b34c58129a9a7d54149e86934ed3922b055927f000000000000000000000000e205181eb3d7415f15377f79aa7769f846ce56dd856000610d43565b6080810151606082015260c08101518151919250610476916001600160801b0390911690610e07565b60a082015292915050565b7f000000000000000000000000e205181eb3d7415f15377f79aa7769f846ce56dd81565b7f000000000000000000000000000000000000000000000000000000000000000081565b6104d16111b0565b6104d96111b0565b6105027f000000000000000000000000b85b34c58129a9a7d54149e86934ed3922b05592610e30565b6080810151606082015260c0810151815191925061052b916001600160801b0390911690610e07565b60a0820152905090565b7f000000000000000000000000b85b34c58129a9a7d54149e86934ed3922b0559281565b7f000000000000000000000000000000000000000000000000000000000000000081565b610585611181565b61058d611181565b600061059884610393565b60405163b3596f0760e01b815283906001600160a01b037f000000000000000000000000cb601629b36891c43943e3cda2eb18fac38b5c4e169063b3596f07906105fa9073cca7d1416518d095e729904aaea087dba749a4dc9060040161144c565b60206040518083038186803b15801561061257600080fd5b505afa158015610626573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061064a9190611315565b6a52b7d2dcc80cd2e40000008161065d57fe5b049250925092509193909250565b7f000000000000000000000000000000000000000000000000000000000000000081565b6106976111fe565b61069f6111fe565b6106ec7f00000000000000000000000000000000000000000000000000000000000000007f0000000000000000000000000000000000000000000000000000000000000000856000610d43565b90507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166107dd5760405163b3596f0760e01b81526001600160a01b037f000000000000000000000000cb601629b36891c43943e3cda2eb18fac38b5c4e169063b3596f0790610788907f00000000000000000000000000000000000000000000000000000000000000009060040161144c565b60206040518083038186803b1580156107a057600080fd5b505afa1580156107b4573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906107d89190611315565b61086e565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166350d25bcd6040518163ffffffff1660e01b815260040160206040518083038186803b15801561083657600080fd5b505afa15801561084a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061086e9190611315565b60608201819052608082015160c08301518351610476936001600160801b039092169092029102610e07565b6108a26111b0565b6108aa6111b0565b6108d37f0000000000000000000000000000000000000000000000000000000000000000610e30565b90507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166109c45760405163b3596f0760e01b81526001600160a01b037f000000000000000000000000cb601629b36891c43943e3cda2eb18fac38b5c4e169063b3596f079061096f907f00000000000000000000000000000000000000000000000000000000000000009060040161144c565b60206040518083038186803b15801561098757600080fd5b505afa15801561099b573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109bf9190611315565b610a55565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166350d25bcd6040518163ffffffff1660e01b815260040160206040518083038186803b158015610a1d57600080fd5b505afa158015610a31573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a559190611315565b60608201819052608082015160c0830151835161052b936001600160801b039092169092029102610e07565b610a896111fe565b610a916111fe565b6000610598846103f0565b610aa4611181565b610aac611181565b6040516370a0823160e01b81526001600160a01b038616906370a0823190610ad890879060040161144c565b60206040518083038186803b158015610af057600080fd5b505afa158015610b04573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b289190611315565b60208201526040516370a0823160e01b81526001600160a01b038716906370a0823190610b5990879060040161144c565b60206040518083038186803b158015610b7157600080fd5b505afa158015610b85573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ba99190611315565b81526040516346df7f7160e11b81526001600160a01b03871690638dbefee290610bd790879060040161144c565b60206040518083038186803b158015610bef57600080fd5b505afa158015610c03573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c279190611315565b606082015260405163091030c360e01b81526001600160a01b0387169063091030c390610c5890879060040161144c565b60206040518083038186803b158015610c7057600080fd5b505afa158015610c84573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ca89190611315565b604082015282610cb9576000610d35565b60405163b9844d8d60e01b81526001600160a01b0386169063b9844d8d90610ce590879060040161144c565b60206040518083038186803b158015610cfd57600080fd5b505afa158015610d11573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d359190611315565b608082015295945050505050565b610d4b6111fe565b610d536111fe565b610d5b6111b0565b610d6487610e30565b8051835260208082015190840152604080820151908401526080808201519084015260e0808201519084015260c0808201516001600160801b03169084015290506001600160a01b03851615610dfd57610dbc611181565b610dc888888888610a9c565b602081015161012085015280516101008501526060810151610160850152604081015161014085015260800151610180840152505b5095945050505050565b600081610e1657506000610e2a565b8164496cebb800840281610e2657fe5b0490505b92915050565b610e386111b0565b610e406111b0565b826001600160a01b03166318160ddd6040518163ffffffff1660e01b815260040160206040518083038186803b158015610e7957600080fd5b505afa158015610e8d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610eb19190611315565b816000018181525050826001600160a01b03166372b49d636040518163ffffffff1660e01b815260040160206040518083038186803b158015610ef357600080fd5b505afa158015610f07573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f2b9190611315565b816020018181525050826001600160a01b031663359c4a966040518163ffffffff1660e01b815260040160206040518083038186803b158015610f6d57600080fd5b505afa158015610f81573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610fa59190611315565b6040808301919091525163b3596f0760e01b81526001600160a01b037f000000000000000000000000cb601629b36891c43943e3cda2eb18fac38b5c4e169063b3596f0790611018907f000000000000000000000000e205181eb3d7415f15377f79aa7769f846ce56dd9060040161144c565b60206040518083038186803b15801561103057600080fd5b505afa158015611044573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906110689190611315565b816080018181525050826001600160a01b031663919cd40f6040518163ffffffff1660e01b815260040160206040518083038186803b1580156110aa57600080fd5b505afa1580156110be573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906110e29190611315565b60e08201819052421015610e2a57604051631e23703160e31b81526001600160a01b0384169063f11b81889061111c90869060040161144c565b60606040518083038186803b15801561113457600080fd5b505afa158015611148573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061116c91906112b4565b516001600160801b031660c082015292915050565b6040518060a0016040528060008152602001600081526020016000815260200160008152602001600081525090565b60405180610100016040528060008152602001600081526020016000815260200160008152602001600081526020016000815260200160006001600160801b03168152602001600081525090565b604051806101a0016040528060008152602001600081526020016000815260200160008152602001600081526020016000815260200160006001600160801b031681526020016000815260200160008152602001600081526020016000815260200160008152602001600081525090565b80516001600160801b03811681146102a357600080fd5b600060208284031215611297578081fd5b81356001600160a01b03811681146112ad578182fd5b9392505050565b6000606082840312156112c5578081fd5b6040516060810181811067ffffffffffffffff821117156112e257fe5b6040526112ee8361126f565b81526112fc6020840161126f565b6020820152604083015160408201528091505092915050565b600060208284031215611326578081fd5b5051919050565b805182526020810151602083015260408101516040830152606081015160608301526080810151608083015260a081015160a083015260c081015161137560c084018261143f565b5060e08181015190830152610100808201519083015261012080820151908301526101408082015190830152610160808201519083015261018090810151910152565b805182526020810151602083015260408101516040830152606081015160608301526080810151608083015260a081015160a08301526001600160801b0360c08201511660c083015260e081015160e08301525050565b80518252602081015160208301526040810151604083015260608101516060830152608081015160808301525050565b6001600160801b03169052565b6001600160a01b0391909116815260200190565b6101a08101610e2a828461132d565b610360810161147e828661132d565b61148c6101a083018561132d565b82610340830152949350505050565b6101008101610e2a82846113b8565b61022081016114b982866113b8565b6114c76101008301856113b8565b82610200830152949350505050565b60a08101610e2a828461140f565b61016081016114f3828661140f565b61150060a083018561140f565b8261014083015294935050505056fea2646970667358221220e043cdd8824968e0a91bbdc864308db0ab01b972cbab03b4186fffc007d7404464736f6c63430007050033
Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)
000000000000000000000000cb601629b36891c43943e3cda2eb18fac38b5c4e0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e205181eb3d7415f15377f79aa7769f846ce56dd000000000000000000000000b85b34c58129a9a7d54149e86934ed3922b0559200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
-----Decoded View---------------
Arg [0] : priceOracle (address): 0xcb601629B36891c43943e3CDa2eB18FAc38B5c4e
Arg [1] : bptPriceFeed (address): 0x0000000000000000000000000000000000000000
Arg [2] : aave (address): 0xE205181Eb3D7415f15377F79aA7769F846cE56DD
Arg [3] : stkAave (address): 0xb85B34C58129a9a7d54149e86934ed3922b05592
Arg [4] : bpt (address): 0x0000000000000000000000000000000000000000
Arg [5] : stkBpt (address): 0x0000000000000000000000000000000000000000
-----Encoded View---------------
6 Constructor Arguments found :
Arg [0] : 000000000000000000000000cb601629b36891c43943e3cda2eb18fac38b5c4e
Arg [1] : 0000000000000000000000000000000000000000000000000000000000000000
Arg [2] : 000000000000000000000000e205181eb3d7415f15377f79aa7769f846ce56dd
Arg [3] : 000000000000000000000000b85b34c58129a9a7d54149e86934ed3922b05592
Arg [4] : 0000000000000000000000000000000000000000000000000000000000000000
Arg [5] : 0000000000000000000000000000000000000000000000000000000000000000
Loading...
Loading
[ 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.