Overview
ETH Balance
0 ETH
Eth Value
$0.00More Info
Private Name Tags
ContractCreator
Latest 1 from a total of 1 transactions
Transaction Hash |
Method
|
Block
|
From
|
To
|
|||||
---|---|---|---|---|---|---|---|---|---|
0x60e06040 | 19120326 | 259 days ago | IN | 0 ETH | 0.08640169 |
Loading...
Loading
Contract Name:
StakedTokenDataProvider
Compiler Version
v0.8.20+commit.a1b79de6
Optimization Enabled:
Yes with 200 runs
Other Settings:
paris EvmVersion
Contract Source Code (Solidity Standard Json-Input format)
// SPDX-License-Identifier: MIT pragma solidity ^0.8.0; import {IERC20} from "../interfaces/IERC20.sol"; import {IAggregatedStakeToken} from "../interfaces/IAggregatedStakeToken.sol"; import {AggregatorInterface} from "../interfaces/AggregatorInterface.sol"; import {IStakedTokenDataProvider} from "../interfaces/IStakedTokenDataProvider.sol"; import {AggregatedStakedTokenV3} from "../interfaces/AggregatedStakedTokenV3.sol"; /** * @title StakedTokenDataProvider * @notice Data provider contract for Staked Tokens of the Safety Module (such as stkAAVE for staked AAVE in the safety module) */ contract StakedTokenDataProvider is IStakedTokenDataProvider { /// @inheritdoc IStakedTokenDataProvider address public immutable override ETH_USD_PRICE_FEED; /// @inheritdoc IStakedTokenDataProvider address public immutable override AAVE_USD_PRICE_FEED; /// @inheritdoc IStakedTokenDataProvider address public immutable override STAKED_AAVE; uint256 private constant SECONDS_PER_YEAR = 365 days; uint256 private constant APY_PRECISION = 10000; /** * @dev Constructor * @param stkAave The address of the StkAAVE token * @param ethUsdPriceFeed The address of ETH price feed (USD denominated, with 8 decimals) * @param aaveUsdPriceFeed The address of AAVE price feed (USD denominated, with 8 decimals) */ constructor( address stkAave, address ethUsdPriceFeed, address aaveUsdPriceFeed ) { STAKED_AAVE = stkAave; ETH_USD_PRICE_FEED = ethUsdPriceFeed; AAVE_USD_PRICE_FEED = aaveUsdPriceFeed; } /// @inheritdoc IStakedTokenDataProvider function getStakedAssetData( address stakedAsset, address oracle ) external view override returns (StakedTokenData memory) { return _getStakedTokenData(stakedAsset, oracle); } /// @inheritdoc IStakedTokenDataProvider function getStakedUserData( address stakedAsset, address oracle, address user ) external view override returns (StakedTokenData memory, StakedTokenUserData memory) { return ( _getStakedTokenData(stakedAsset, oracle), _getStakedTokenUserData(stakedAsset, user) ); } /// @inheritdoc IStakedTokenDataProvider function getStakedAssetDataBatch( address[] calldata stakedAssets, address[] calldata oracles ) external view override returns (StakedTokenData[] memory, uint256) { require( stakedAssets.length == oracles.length, "Arrays must be of the same length" ); StakedTokenData[] memory stakedData = new StakedTokenData[]( stakedAssets.length ); uint256 ethPrice = uint256( AggregatorInterface(ETH_USD_PRICE_FEED).latestAnswer() ); for (uint256 i = 0; i < stakedAssets.length; i++) { stakedData[i] = _getStakedTokenData(stakedAssets[i], oracles[i]); } return (stakedData, ethPrice); } /// @inheritdoc IStakedTokenDataProvider function getStakedUserDataBatch( address[] calldata stakedAssets, address[] calldata oracles, address user ) external view override returns (StakedTokenData[] memory, StakedTokenUserData[] memory) { require( stakedAssets.length == oracles.length, "All arrays must be of the same length" ); StakedTokenData[] memory stakedData = new StakedTokenData[]( stakedAssets.length ); StakedTokenUserData[] memory userData = new StakedTokenUserData[]( stakedAssets.length ); for (uint256 i = 0; i < stakedAssets.length; i++) { stakedData[i] = _getStakedTokenData(stakedAssets[i], oracles[i]); userData[i] = _getStakedTokenUserData(stakedAssets[i], user); } return (stakedData, userData); } /** * @notice Returns data of the Staked Token passed as parameter * @param stakedToken The address of the StakedToken (eg. stkAave, stkBptAave) * @param oracle The address of the oracle associated of the staked token, USD denominated with 8 decimals * @return data An object with general data of the StakedToken */ function _getStakedTokenData( address stakedToken, address oracle ) internal view returns (StakedTokenData memory data) { IAggregatedStakeToken stkToken = IAggregatedStakeToken(stakedToken); data.stakedTokenTotalSupply = stkToken.totalSupply(); data.stakedTokenTotalRedeemableAmount = stkToken.previewRedeem( data.stakedTokenTotalSupply ); data.stakeCooldownSeconds = stkToken.getCooldownSeconds(); data.stakeUnstakeWindow = stkToken.UNSTAKE_WINDOW(); data.rewardTokenPriceUsd = uint256( AggregatorInterface(AAVE_USD_PRICE_FEED).latestAnswer() ); data.maxSlashablePercentage = stkToken.getMaxSlashablePercentage(); try AggregatedStakedTokenV3(stakedToken).DISTRIBUTION_END() returns ( uint256 distributionEnd ) { data.distributionEnd = distributionEnd; } catch { try stkToken.distributionEnd() returns (uint256 distributionEnd) { data.distributionEnd = distributionEnd; } catch {} } data.inPostSlashingPeriod = stkToken.inPostSlashingPeriod(); (uint128 emissionPerSecond, , ) = stkToken.assets(address(stakedToken)); data.distributionPerSecond = block.timestamp < data.distributionEnd ? emissionPerSecond : 0; // stkAave if (address(stakedToken) == STAKED_AAVE) { data.stakedTokenPriceUsd = data.rewardTokenPriceUsd; // assumes AAVE and stkAAVE have the same value data.stakeApy = _calculateApy( data.distributionPerSecond, data.stakedTokenTotalSupply ); } else { // other wrapped assets data.stakedTokenPriceUsd = uint256( AggregatorInterface(oracle).latestAnswer() ); data.stakeApy = _calculateApy( data.distributionPerSecond * data.rewardTokenPriceUsd, data.stakedTokenTotalSupply * data.stakedTokenPriceUsd ); } } /** * @notice Returns user data of the Staked Token * @param stakedToken The address of the StakedToken asset * @param user The address of the user * @return data struct containing user-specific details related to the staked asset */ function _getStakedTokenUserData( address stakedToken, address user ) internal view returns (StakedTokenUserData memory data) { IAggregatedStakeToken stkToken = IAggregatedStakeToken(stakedToken); data.stakedTokenUserBalance = stkToken.balanceOf(user); data.rewardsToClaim = stkToken.getTotalRewardsBalance(user); data.underlyingTokenUserBalance = IERC20(stkToken.STAKED_TOKEN()) .balanceOf(user); data.stakedTokenRedeemableAmount = stkToken.previewRedeem( data.stakedTokenUserBalance ); (data.userCooldownTimestamp, data.userCooldownAmount) = stkToken .stakersCooldowns(user); } /** * @notice Calculates the APY of the reward distribution among StakedToken holders * @dev It uses the value of the reward and StakedToken asset * @param distributionPerSecond The value of the rewards being distributed per second * @param stakedTokenTotalSupply The value of the total supply of StakedToken asset * @return the APY of the reward distribution among StakedToken holders */ function _calculateApy( uint256 distributionPerSecond, uint256 stakedTokenTotalSupply ) internal pure returns (uint256) { if (stakedTokenTotalSupply == 0) return 0; return (distributionPerSecond * SECONDS_PER_YEAR * APY_PRECISION) / stakedTokenTotalSupply; } }
// SPDX-License-Identifier: MIT pragma solidity ^0.8.0; /** * @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 ); }
pragma solidity ^0.8.0; /** * @title IAggregatedStakeToken * https://github.com/bgd-labs/stake-token/blob/f42de811d1ef831545446cc357b54e187ccd87a2/src/contracts/IAggregatedStakeToken.sol */ interface IAggregatedStakeToken { event Approval( address indexed owner, address indexed spender, uint256 value ); event AssetConfigUpdated(address indexed asset, uint256 emission); event AssetIndexUpdated(address indexed asset, uint256 index); event Cooldown(address indexed user, uint256 amount); event CooldownSecondsChanged(uint256 cooldownSeconds); event DistributionEndChanged(uint256 endTimestamp); event EIP712DomainChanged(); event ExchangeRateChanged(uint216 exchangeRate); event FundsReturned(uint256 amount); event Initialized(uint64 version); event MaxSlashablePercentageChanged(uint256 newPercentage); event PendingAdminChanged(address indexed newPendingAdmin, uint256 role); event Redeem( address indexed from, address indexed to, uint256 assets, uint256 shares ); event RewardsAccrued(address user, uint256 amount); event RewardsClaimed( address indexed from, address indexed to, uint256 amount ); event RoleClaimed(address indexed newAdmin, uint256 role); event Slashed(address indexed destination, uint256 amount); event SlashingExitWindowDurationChanged(uint256 windowSeconds); event SlashingSettled(); event Staked( address indexed from, address indexed to, uint256 assets, uint256 shares ); event Transfer(address indexed from, address indexed to, uint256 value); event UserIndexUpdated( address indexed user, address indexed asset, uint256 index ); struct AssetConfigInput { uint128 emissionPerSecond; uint256 totalStaked; address underlyingAsset; } function CLAIM_HELPER_ROLE() external view returns (uint256); function COOLDOWN_ADMIN_ROLE() external view returns (uint256); function DOMAIN_SEPARATOR() external view returns (bytes32); function EMISSION_MANAGER() external view returns (address); function EXCHANGE_RATE_UNIT() external view returns (uint256); function INITIAL_EXCHANGE_RATE() external view returns (uint216); function LOWER_BOUND() external view returns (uint256); function PRECISION() external view returns (uint8); function REWARDS_VAULT() external view returns (address); function REWARD_TOKEN() external view returns (address); function SLASH_ADMIN_ROLE() external view returns (uint256); function STAKED_TOKEN() external view returns (address); function UNSTAKE_WINDOW() external view returns (uint256); function allowance( address owner, address spender ) external view returns (uint256); function approve(address spender, uint256 value) external returns (bool); function assets( address ) external view returns ( uint128 emissionPerSecond, uint128 lastUpdateTimestamp, uint256 index ); function balanceOf(address account) external view returns (uint256); function claimRewards(address to, uint256 amount) external; function claimRewardsAndRedeem( address to, uint256 claimAmount, uint256 redeemAmount ) external; function claimRewardsAndRedeemOnBehalf( address from, address to, uint256 claimAmount, uint256 redeemAmount ) external; function claimRewardsOnBehalf( address from, address to, uint256 amount ) external returns (uint256); function claimRoleAdmin(uint256 role) external; function configureAssets( AssetConfigInput[] memory assetsConfigInput ) external; function cooldown() external; function cooldownOnBehalfOf(address from) external; function decimals() external view returns (uint8); function distributionEnd() external view returns (uint256); function eip712Domain() external view returns ( bytes1 fields, string memory name, string memory version, uint256 chainId, address verifyingContract, bytes32 salt, uint256[] memory extensions ); function getAdmin(uint256 role) external view returns (address); function getCooldownSeconds() external view returns (uint256); function getExchangeRate() external view returns (uint216); function getMaxSlashablePercentage() external view returns (uint256); function getPendingAdmin(uint256 role) external view returns (address); function getTotalRewardsBalance( address staker ) external view returns (uint256); function getUserAssetData( address user, address asset ) external view returns (uint256); function inPostSlashingPeriod() external view returns (bool); function initialize( string memory name, string memory symbol, address slashingAdmin, address cooldownPauseAdmin, address claimHelper, uint256 maxSlashablePercentage, uint256 cooldownSeconds ) external; function name() external view returns (string memory); function nonces(address owner) external view returns (uint256); function permit( address owner, address spender, uint256 value, uint256 deadline, uint8 v, bytes32 r, bytes32 s ) external; function previewRedeem(uint256 shares) external view returns (uint256); function previewStake(uint256 assets) external view returns (uint256); function redeem(address to, uint256 amount) external; function redeemOnBehalf(address from, address to, uint256 amount) external; function returnFunds(uint256 amount) external; function setCooldownSeconds(uint256 cooldownSeconds) external; function setDistributionEnd(uint256 newDistributionEnd) external; function setMaxSlashablePercentage(uint256 percentage) external; function setPendingAdmin(uint256 role, address newPendingAdmin) external; function settleSlashing() external; function slash( address destination, uint256 amount ) external returns (uint256); function stake(address to, uint256 amount) external; function stakeWithPermit( uint256 amount, uint256 deadline, uint8 v, bytes32 r, bytes32 s ) external; function stakerRewardsToClaim(address) external view returns (uint256); function stakersCooldowns( address ) external view returns (uint40 timestamp, uint216 amount); function symbol() external view returns (string memory); function totalSupply() external view returns (uint256); function transfer(address to, uint256 value) external returns (bool); function transferFrom( address from, address to, uint256 value ) external returns (bool); }
// SPDX-License-Identifier: MIT pragma solidity ^0.8.0; /** * @title AggregatorInterface * https://github.com/aave/aave-v3-core/blob/6070e82d962d9b12835c88e68210d0e63f08d035/contracts/dependencies/chainlink/AggregatorInterface.sol */ interface AggregatorInterface { function latestAnswer() external view returns (int256); function latestTimestamp() external view returns (uint256); function latestRound() external view returns (uint256); function getAnswer(uint256 roundId) external view returns (int256); function getTimestamp(uint256 roundId) external view returns (uint256); event AnswerUpdated( int256 indexed current, uint256 indexed roundId, uint256 updatedAt ); event NewRound( uint256 indexed roundId, address indexed startedBy, uint256 startedAt ); }
// SPDX-License-Identifier: MIT pragma solidity ^0.8.0; /** * @title IStakedTokenDataProvider * @notice Basic interface of the Staked Token Data Provider */ interface IStakedTokenDataProvider { struct StakedTokenData { uint256 stakedTokenTotalSupply; // total supply of staked token uint256 stakedTokenTotalRedeemableAmount; // total redeemable amount of staked token uint256 stakeCooldownSeconds; // cooldown period of staked token denominated in seconds uint256 stakeUnstakeWindow; // unstake window of staked token denominated in seconds uint256 stakedTokenPriceUsd; // price of staked token denominated in USD uint256 rewardTokenPriceUsd; // price of reward token denominated in USD uint256 stakeApy; // apy(annual percentage yield) of staked token uint128 distributionPerSecond; // distribution of reward tokens per second bool inPostSlashingPeriod; // staked token in slashing period or not uint256 distributionEnd; // distribution end time uint256 maxSlashablePercentage; // max slashable percentage of the total staked amount } struct StakedTokenUserData { uint256 stakedTokenUserBalance; // user balance of staked token uint256 stakedTokenRedeemableAmount; // user redeemable amount of staked token uint256 underlyingTokenUserBalance; // underlying token balance of user uint256 rewardsToClaim; // total rewards balance of user uint40 userCooldownTimestamp; // cooldown timestamp of user uint216 userCooldownAmount; // amount available to unstake after cooldown timestamp for user } /** * @return The address of the ETH price feed, USD denominated, expressed with 8 decimals */ function ETH_USD_PRICE_FEED() external view returns (address); /** * @return The address of the AAVE price feed, USD denominated, expressed with 8 decimals */ function AAVE_USD_PRICE_FEED() external view returns (address); /** * @return The address of the StkAAVE token */ function STAKED_AAVE() external view returns (address); /** * @notice Returns data of Staked asset * @param stakedAsset The address of the staked asset (eg. stkAave, stkBptAave) * @param oracle The address of the oracle for the staked asset, USD denominated with 8 decimals * @return stakedAssetData struct with staked asset data */ function getStakedAssetData( address stakedAsset, address oracle ) external view returns (StakedTokenData memory stakedAssetData); /** * @notice Retrieves staked token data and user-specific data for a given user, staked asset, * and its associated oracle. * @param stakedAsset The address of the staked asset (eg. stkAave, stkBptAave) * @param oracle The address of the oracle for the staked asset, USD denominated with 8 decimals * @param user The address of the user for whom the data is to be fetched. * @return stakedTokenData `StakedTokenData` struct with details about the staked asset. * @return stakedUserData `StakedTokenUserData` struct containing user-specific details related to the staked asset */ function getStakedUserData( address stakedAsset, address oracle, address user ) external view returns ( StakedTokenData memory stakedTokenData, StakedTokenUserData memory stakedUserData ); /** * notice Retrieves general data of a batch of staked assets * @param stakedAssets An array of addresses of staked assets. * @param oracles An array of oracle addresses for the staked assets, USD denominated with 8 decimals. * @return stakedData An array containing data about the staked assets. * @return ethPrice The price of ETH asset, USD denominated with 8 decimals. */ function getStakedAssetDataBatch( address[] calldata stakedAssets, address[] calldata oracles ) external view returns (StakedTokenData[] memory stakedData, uint256 ethPrice); /** * @notice Retrieves general and user-specific data for a batch of staked assets. * @param stakedAssets An array of addresses of staked assets. * @param oracles An array of oracle addresses for the staked assets, USD denominated with 8 decimals. * @param user The address of the user to retrieve data from. * @return stakedTokenData An array containing data about the staked assets. * @return stakedUserData An array containing user-specific data about the staked assets. */ function getStakedUserDataBatch( address[] calldata stakedAssets, address[] calldata oracles, address user ) external view returns ( StakedTokenData[] memory stakedTokenData, StakedTokenUserData[] memory stakedUserData ); }
pragma solidity ^0.8.0; /** * @title AggregatedStakedTokenV3 * https://github.com/bgd-labs/aave-stk-gov-v3/blob/0c4cb0b71566cf91a62816e06199fdb3606608bc/src/interfaces/AggregatedStakedTokenV3.sol */ interface AggregatedStakedTokenV3 { event Approval( address indexed owner, address indexed spender, uint256 value ); event AssetConfigUpdated(address indexed asset, uint256 emission); event AssetIndexUpdated(address indexed asset, uint256 index); event Cooldown(address indexed user, uint256 amount); event CooldownSecondsChanged(uint256 cooldownSeconds); event DelegateChanged( address indexed delegator, address indexed delegatee, uint8 delegationType ); event ExchangeRateChanged(uint216 exchangeRate); event FundsReturned(uint256 amount); event MaxSlashablePercentageChanged(uint256 newPercentage); event PendingAdminChanged(address indexed newPendingAdmin, uint256 role); event Redeem( address indexed from, address indexed to, uint256 assets, uint256 shares ); event RewardsAccrued(address user, uint256 amount); event RewardsClaimed( address indexed from, address indexed to, uint256 amount ); event RoleClaimed(address indexed newAdmin, uint256 role); event Slashed(address indexed destination, uint256 amount); event SlashingExitWindowDurationChanged(uint256 windowSeconds); event SlashingSettled(); event Staked( address indexed from, address indexed to, uint256 assets, uint256 shares ); event Transfer(address indexed from, address indexed to, uint256 value); event UserIndexUpdated( address indexed user, address indexed asset, uint256 index ); struct AssetConfigInput { uint128 emissionPerSecond; uint256 totalStaked; address underlyingAsset; } function CLAIM_HELPER_ROLE() external view returns (uint256); function COOLDOWN_ADMIN_ROLE() external view returns (uint256); function COOLDOWN_SECONDS() external view returns (uint256); function DELEGATE_BY_TYPE_TYPEHASH() external view returns (bytes32); function DELEGATE_TYPEHASH() external view returns (bytes32); function DISTRIBUTION_END() external view returns (uint256); function DOMAIN_SEPARATOR() external view returns (bytes32); function EIP712_REVISION() external view returns (bytes memory); function EMISSION_MANAGER() external view returns (address); function EXCHANGE_RATE_UNIT() external view returns (uint256); function INITIAL_EXCHANGE_RATE() external view returns (uint216); function LOWER_BOUND() external view returns (uint256); function PERMIT_TYPEHASH() external view returns (bytes32); function POWER_SCALE_FACTOR() external view returns (uint256); function PRECISION() external view returns (uint8); function REVISION() external pure returns (uint256); function REWARDS_VAULT() external view returns (address); function REWARD_TOKEN() external view returns (address); function SLASH_ADMIN_ROLE() external view returns (uint256); function STAKED_TOKEN() external view returns (address); function UNSTAKE_WINDOW() external view returns (uint256); function _nonces(address) external view returns (uint256); function allowance( address owner, address spender ) external view returns (uint256); function approve(address spender, uint256 amount) external returns (bool); function assets( address ) external view returns ( uint128 emissionPerSecond, uint128 lastUpdateTimestamp, uint256 index ); function balanceOf(address account) external view returns (uint256); function claimRewards(address to, uint256 amount) external; function claimRewardsAndRedeem( address to, uint256 claimAmount, uint256 redeemAmount ) external; function claimRewardsAndRedeemOnBehalf( address from, address to, uint256 claimAmount, uint256 redeemAmount ) external; function claimRewardsOnBehalf( address from, address to, uint256 amount ) external returns (uint256); function claimRoleAdmin(uint256 role) external; function configureAssets( AssetConfigInput[] memory assetsConfigInput ) external; function cooldown() external; function cooldownOnBehalfOf(address from) external; function decimals() external view returns (uint8); function decreaseAllowance( address spender, uint256 subtractedValue ) external returns (bool); function delegate(address delegatee) external; function delegateByType(address delegatee, uint8 delegationType) external; function deprecated_aaveGovernance() external view returns (address); function deprecated_votingSnapshots( address, uint256 ) external view returns (uint128 blockNumber, uint128 value); function deprecated_votingSnapshotsCounts( address ) external view returns (uint256); function getAdmin(uint256 role) external view returns (address); function getCooldownSeconds() external view returns (uint256); function getDelegateeByType( address delegator, uint8 delegationType ) external view returns (address); function getDelegates( address delegator ) external view returns (address, address); function getExchangeRate() external view returns (uint216); function getMaxSlashablePercentage() external view returns (uint256); function getPendingAdmin(uint256 role) external view returns (address); function getPowerCurrent( address user, uint8 delegationType ) external view returns (uint256); function getPowersCurrent( address user ) external view returns (uint256, uint256); function getTotalRewardsBalance( address staker ) external view returns (uint256); function getUserAssetData( address user, address asset ) external view returns (uint256); function inPostSlashingPeriod() external view returns (bool); function increaseAllowance( address spender, uint256 addedValue ) external returns (bool); function initialize( address slashingAdmin, address cooldownPauseAdmin, address claimHelper, uint256 maxSlashablePercentage, uint256 cooldownSeconds ) external; function metaDelegate( address delegator, address delegatee, uint256 deadline, uint8 v, bytes32 r, bytes32 s ) external; function metaDelegateByType( address delegator, address delegatee, uint8 delegationType, uint256 deadline, uint8 v, bytes32 r, bytes32 s ) external; function name() external view returns (string memory); function permit( address owner, address spender, uint256 value, uint256 deadline, uint8 v, bytes32 r, bytes32 s ) external; function previewRedeem(uint256 shares) external view returns (uint256); function previewStake(uint256 assets) external view returns (uint256); function redeem(address to, uint256 amount) external; function redeemOnBehalf(address from, address to, uint256 amount) external; function returnFunds(uint256 amount) external; function setCooldownSeconds(uint256 cooldownSeconds) external; function setMaxSlashablePercentage(uint256 percentage) external; function setPendingAdmin(uint256 role, address newPendingAdmin) external; function settleSlashing() external; function slash( address destination, uint256 amount ) external returns (uint256); function stake(address to, uint256 amount) external; function stakerRewardsToClaim(address) external view returns (uint256); function stakersCooldowns( address ) external view returns (uint40 timestamp, uint216 amount); function symbol() external view returns (string memory); function totalSupply() external view returns (uint256); function transfer(address to, uint256 amount) external returns (bool); function transferFrom( address from, address to, uint256 amount ) external returns (bool); }
{ "remappings": [ "aave-address-book/=lib/aave-address-book/src/", "@aave/core-v3/=lib/aave-address-book/lib/aave-v3-core/", "@aave/periphery-v3/=lib/aave-address-book/lib/aave-v3-periphery/", "aave-v3-core/=lib/aave-address-book/lib/aave-v3-core/", "aave-v3-periphery/=lib/aave-address-book/lib/aave-v3-periphery/", "ds-test/=lib/forge-std/lib/ds-test/src/", "forge-std/=lib/forge-std/src/" ], "optimizer": { "enabled": true, "runs": 200 }, "metadata": { "useLiteralContent": false, "bytecodeHash": "ipfs", "appendCBOR": true }, "outputSelection": { "*": { "*": [ "evm.bytecode", "evm.deployedBytecode", "devdoc", "userdoc", "metadata", "abi" ] } }, "evmVersion": "paris", "libraries": {} }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"inputs":[{"internalType":"address","name":"stkAave","type":"address"},{"internalType":"address","name":"ethUsdPriceFeed","type":"address"},{"internalType":"address","name":"aaveUsdPriceFeed","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"inputs":[],"name":"AAVE_USD_PRICE_FEED","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"ETH_USD_PRICE_FEED","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"STAKED_AAVE","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"stakedAsset","type":"address"},{"internalType":"address","name":"oracle","type":"address"}],"name":"getStakedAssetData","outputs":[{"components":[{"internalType":"uint256","name":"stakedTokenTotalSupply","type":"uint256"},{"internalType":"uint256","name":"stakedTokenTotalRedeemableAmount","type":"uint256"},{"internalType":"uint256","name":"stakeCooldownSeconds","type":"uint256"},{"internalType":"uint256","name":"stakeUnstakeWindow","type":"uint256"},{"internalType":"uint256","name":"stakedTokenPriceUsd","type":"uint256"},{"internalType":"uint256","name":"rewardTokenPriceUsd","type":"uint256"},{"internalType":"uint256","name":"stakeApy","type":"uint256"},{"internalType":"uint128","name":"distributionPerSecond","type":"uint128"},{"internalType":"bool","name":"inPostSlashingPeriod","type":"bool"},{"internalType":"uint256","name":"distributionEnd","type":"uint256"},{"internalType":"uint256","name":"maxSlashablePercentage","type":"uint256"}],"internalType":"struct IStakedTokenDataProvider.StakedTokenData","name":"","type":"tuple"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address[]","name":"stakedAssets","type":"address[]"},{"internalType":"address[]","name":"oracles","type":"address[]"}],"name":"getStakedAssetDataBatch","outputs":[{"components":[{"internalType":"uint256","name":"stakedTokenTotalSupply","type":"uint256"},{"internalType":"uint256","name":"stakedTokenTotalRedeemableAmount","type":"uint256"},{"internalType":"uint256","name":"stakeCooldownSeconds","type":"uint256"},{"internalType":"uint256","name":"stakeUnstakeWindow","type":"uint256"},{"internalType":"uint256","name":"stakedTokenPriceUsd","type":"uint256"},{"internalType":"uint256","name":"rewardTokenPriceUsd","type":"uint256"},{"internalType":"uint256","name":"stakeApy","type":"uint256"},{"internalType":"uint128","name":"distributionPerSecond","type":"uint128"},{"internalType":"bool","name":"inPostSlashingPeriod","type":"bool"},{"internalType":"uint256","name":"distributionEnd","type":"uint256"},{"internalType":"uint256","name":"maxSlashablePercentage","type":"uint256"}],"internalType":"struct IStakedTokenDataProvider.StakedTokenData[]","name":"","type":"tuple[]"},{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"stakedAsset","type":"address"},{"internalType":"address","name":"oracle","type":"address"},{"internalType":"address","name":"user","type":"address"}],"name":"getStakedUserData","outputs":[{"components":[{"internalType":"uint256","name":"stakedTokenTotalSupply","type":"uint256"},{"internalType":"uint256","name":"stakedTokenTotalRedeemableAmount","type":"uint256"},{"internalType":"uint256","name":"stakeCooldownSeconds","type":"uint256"},{"internalType":"uint256","name":"stakeUnstakeWindow","type":"uint256"},{"internalType":"uint256","name":"stakedTokenPriceUsd","type":"uint256"},{"internalType":"uint256","name":"rewardTokenPriceUsd","type":"uint256"},{"internalType":"uint256","name":"stakeApy","type":"uint256"},{"internalType":"uint128","name":"distributionPerSecond","type":"uint128"},{"internalType":"bool","name":"inPostSlashingPeriod","type":"bool"},{"internalType":"uint256","name":"distributionEnd","type":"uint256"},{"internalType":"uint256","name":"maxSlashablePercentage","type":"uint256"}],"internalType":"struct IStakedTokenDataProvider.StakedTokenData","name":"","type":"tuple"},{"components":[{"internalType":"uint256","name":"stakedTokenUserBalance","type":"uint256"},{"internalType":"uint256","name":"stakedTokenRedeemableAmount","type":"uint256"},{"internalType":"uint256","name":"underlyingTokenUserBalance","type":"uint256"},{"internalType":"uint256","name":"rewardsToClaim","type":"uint256"},{"internalType":"uint40","name":"userCooldownTimestamp","type":"uint40"},{"internalType":"uint216","name":"userCooldownAmount","type":"uint216"}],"internalType":"struct IStakedTokenDataProvider.StakedTokenUserData","name":"","type":"tuple"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address[]","name":"stakedAssets","type":"address[]"},{"internalType":"address[]","name":"oracles","type":"address[]"},{"internalType":"address","name":"user","type":"address"}],"name":"getStakedUserDataBatch","outputs":[{"components":[{"internalType":"uint256","name":"stakedTokenTotalSupply","type":"uint256"},{"internalType":"uint256","name":"stakedTokenTotalRedeemableAmount","type":"uint256"},{"internalType":"uint256","name":"stakeCooldownSeconds","type":"uint256"},{"internalType":"uint256","name":"stakeUnstakeWindow","type":"uint256"},{"internalType":"uint256","name":"stakedTokenPriceUsd","type":"uint256"},{"internalType":"uint256","name":"rewardTokenPriceUsd","type":"uint256"},{"internalType":"uint256","name":"stakeApy","type":"uint256"},{"internalType":"uint128","name":"distributionPerSecond","type":"uint128"},{"internalType":"bool","name":"inPostSlashingPeriod","type":"bool"},{"internalType":"uint256","name":"distributionEnd","type":"uint256"},{"internalType":"uint256","name":"maxSlashablePercentage","type":"uint256"}],"internalType":"struct IStakedTokenDataProvider.StakedTokenData[]","name":"","type":"tuple[]"},{"components":[{"internalType":"uint256","name":"stakedTokenUserBalance","type":"uint256"},{"internalType":"uint256","name":"stakedTokenRedeemableAmount","type":"uint256"},{"internalType":"uint256","name":"underlyingTokenUserBalance","type":"uint256"},{"internalType":"uint256","name":"rewardsToClaim","type":"uint256"},{"internalType":"uint40","name":"userCooldownTimestamp","type":"uint40"},{"internalType":"uint216","name":"userCooldownAmount","type":"uint216"}],"internalType":"struct IStakedTokenDataProvider.StakedTokenUserData[]","name":"","type":"tuple[]"}],"stateMutability":"view","type":"function"}]
Contract Creation Code
60e06040523480156200001157600080fd5b50604051620015433803806200154383398101604081905262000034916200006f565b6001600160a01b0392831660c0529082166080521660a052620000b9565b80516001600160a01b03811681146200006a57600080fd5b919050565b6000806000606084860312156200008557600080fd5b620000908462000052565b9250620000a06020850162000052565b9150620000b06040850162000052565b90509250925092565b60805160a05160c051611446620000fd6000396000818160d20152610a300152600081816101790152610762015260008181610111015261025801526114466000f3fe608060405234801561001057600080fd5b506004361061007d5760003560e01c8063b0f0abe91161005b578063b0f0abe91461010c578063deb6609014610133578063ee4291ce14610153578063feb23d311461017457600080fd5b8063026dc68214610082578063304fbe0d146100ac5780638e6a6941146100cd575b600080fd5b610095610090366004610f1c565b61019b565b6040516100a392919061104d565b60405180910390f35b6100bf6100ba366004611087565b610379565b6040516100a3929190611152565b6100f47f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b0390911681526020016100a3565b6100f47f000000000000000000000000000000000000000000000000000000000000000081565b6101466101413660046111b3565b61055a565b6040516100a391906111ec565b6101666101613660046111fb565b610575565b6040516100a3929190611246565b6100f47f000000000000000000000000000000000000000000000000000000000000000081565b606060008483146101fd5760405162461bcd60e51b815260206004820152602160248201527f417272617973206d757374206265206f66207468652073616d65206c656e67746044820152600d60fb1b60648201526084015b60405180910390fd5b60008567ffffffffffffffff8111156102185761021861126a565b60405190808252806020026020018201604052801561025157816020015b61023e610e25565b8152602001906001900390816102365790505b50905060007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166350d25bcd6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156102b4573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906102d89190611280565b905060005b8781101561036b5761033b8989838181106102fa576102fa611299565b905060200201602081019061030f91906112af565b88888481811061032157610321611299565b905060200201602081019061033691906112af565b6105a5565b83828151811061034d5761034d611299565b60200260200101819052508080610363906112e2565b9150506102dd565b509097909650945050505050565b6060808584146103d95760405162461bcd60e51b815260206004820152602560248201527f416c6c20617272617973206d757374206265206f66207468652073616d65206c6044820152640cadccee8d60db1b60648201526084016101f4565b60008667ffffffffffffffff8111156103f4576103f461126a565b60405190808252806020026020018201604052801561042d57816020015b61041a610e25565b8152602001906001900390816104125790505b50905060008767ffffffffffffffff81111561044b5761044b61126a565b60405190808252806020026020018201604052801561048457816020015b610471610e8a565b8152602001906001900390816104695790505b50905060005b8881101561054b576104ce8a8a838181106104a7576104a7611299565b90506020020160208101906104bc91906112af565b89898481811061032157610321611299565b8382815181106104e0576104e0611299565b602002602001018190525061051b8a8a8381811061050057610500611299565b905060200201602081019061051591906112af565b87610b32565b82828151811061052d5761052d611299565b60200260200101819052508080610543906112e2565b91505061048a565b50909890975095505050505050565b610562610e25565b61056c83836105a5565b90505b92915050565b61057d610e25565b610585610e8a565b61058f85856105a5565b6105998685610b32565b91509150935093915050565b6105ad610e25565b6000839050806001600160a01b03166318160ddd6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156105f0573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906106149190611280565b80835260405163266d6a8360e11b815260048101919091526001600160a01b03821690634cdad50690602401602060405180830381865afa15801561065d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906106819190611280565b826020018181525050806001600160a01b031663616e0bf96040518163ffffffff1660e01b8152600401602060405180830381865afa1580156106c8573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906106ec9190611280565b826040018181525050806001600160a01b031663359c4a966040518163ffffffff1660e01b8152600401602060405180830381865afa158015610733573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906107579190611280565b8260600181815250507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166350d25bcd6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156107be573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906107e29190611280565b8260a0018181525050806001600160a01b031663f34d96da6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610829573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061084d9190611280565b82610140018181525050836001600160a01b031663919cd40f6040518163ffffffff1660e01b8152600401602060405180830381865afa9250505080156108b1575060408051601f3d908101601f191682019092526108ae91810190611280565b60015b61092057806001600160a01b031663efa90b546040518163ffffffff1660e01b8152600401602060405180830381865afa92505050801561090f575060408051601f3d908101601f1916820190925261090c91810190611280565b60015b1561091b576101208301525b610927565b6101208301525b806001600160a01b031663f036bc686040518163ffffffff1660e01b8152600401602060405180830381865afa158015610965573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061098991906112fb565b1515610100830152604051631e23703160e31b81526001600160a01b0385811660048301526000919083169063f11b818890602401606060405180830381865afa1580156109db573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109ff9190611339565b505090508261012001514210610a16576000610a18565b805b6001600160801b031660e08401526001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000811690861603610a875760a0830151608084015260e08301518351610a7d916001600160801b031690610ded565b60c0840152610b2a565b836001600160a01b03166350d25bcd6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610ac5573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ae99190611280565b608084015260a083015160e0840151610b2491610b0e916001600160801b0316611375565b60808501518551610b1f9190611375565b610ded565b60c08401525b505092915050565b610b3a610e8a565b6040516370a0823160e01b81526001600160a01b0383811660048301528491908216906370a0823190602401602060405180830381865afa158015610b83573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ba79190611280565b82526040516346df7f7160e11b81526001600160a01b038481166004830152821690638dbefee290602401602060405180830381865afa158015610bef573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c139190611280565b826060018181525050806001600160a01b031663312f6b836040518163ffffffff1660e01b8152600401602060405180830381865afa158015610c5a573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c7e919061138c565b6040516370a0823160e01b81526001600160a01b03858116600483015291909116906370a0823190602401602060405180830381865afa158015610cc6573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610cea9190611280565b6040838101919091528251905163266d6a8360e11b815260048101919091526001600160a01b03821690634cdad50690602401602060405180830381865afa158015610d3a573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d5e9190611280565b602083015260405163091030c360e01b81526001600160a01b03848116600483015282169063091030c3906024016040805180830381865afa158015610da8573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610dcc91906113a9565b6001600160d81b031660a084015264ffffffffff1660808301525092915050565b600081600003610dff5750600061056f565b81612710610e116301e1338086611375565b610e1b9190611375565b61056c91906113ee565b6040518061016001604052806000815260200160008152602001600081526020016000815260200160008152602001600081526020016000815260200160006001600160801b0316815260200160001515815260200160008152602001600081525090565b6040518060c0016040528060008152602001600081526020016000815260200160008152602001600064ffffffffff16815260200160006001600160d81b031681525090565b60008083601f840112610ee257600080fd5b50813567ffffffffffffffff811115610efa57600080fd5b6020830191508360208260051b8501011115610f1557600080fd5b9250929050565b60008060008060408587031215610f3257600080fd5b843567ffffffffffffffff80821115610f4a57600080fd5b610f5688838901610ed0565b90965094506020870135915080821115610f6f57600080fd5b50610f7c87828801610ed0565b95989497509550505050565b805182526020810151602083015260408101516040830152606081015160608301526080810151608083015260a081015160a083015260c081015160c083015260e0810151610fe260e08401826001600160801b03169052565b5061010081810151151590830152610120808201519083015261014090810151910152565b600081518084526020808501945080840160005b838110156110425761102e878351610f88565b61016096909601959082019060010161101b565b509495945050505050565b6040815260006110606040830185611007565b90508260208301529392505050565b6001600160a01b038116811461108457600080fd5b50565b60008060008060006060868803121561109f57600080fd5b853567ffffffffffffffff808211156110b757600080fd5b6110c389838a01610ed0565b909750955060208801359150808211156110dc57600080fd5b506110e988828901610ed0565b90945092505060408601356110fd8161106f565b809150509295509295909350565b8051825260208082015190830152604080820151908301526060808201519083015260808082015164ffffffffff169083015260a0908101516001600160d81b0316910152565b6040815260006111656040830185611007565b82810360208481019190915284518083528582019282019060005b818110156111a65761119383865161110b565b9383019360c09290920191600101611180565b5090979650505050505050565b600080604083850312156111c657600080fd5b82356111d18161106f565b915060208301356111e18161106f565b809150509250929050565b610160810161056f8284610f88565b60008060006060848603121561121057600080fd5b833561121b8161106f565b9250602084013561122b8161106f565b9150604084013561123b8161106f565b809150509250925092565b61022081016112558285610f88565b61126361016083018461110b565b9392505050565b634e487b7160e01b600052604160045260246000fd5b60006020828403121561129257600080fd5b5051919050565b634e487b7160e01b600052603260045260246000fd5b6000602082840312156112c157600080fd5b81356112638161106f565b634e487b7160e01b600052601160045260246000fd5b6000600182016112f4576112f46112cc565b5060010190565b60006020828403121561130d57600080fd5b8151801515811461126357600080fd5b80516001600160801b038116811461133457600080fd5b919050565b60008060006060848603121561134e57600080fd5b6113578461131d565b92506113656020850161131d565b9150604084015190509250925092565b808202811582820484141761056f5761056f6112cc565b60006020828403121561139e57600080fd5b81516112638161106f565b600080604083850312156113bc57600080fd5b825164ffffffffff811681146113d157600080fd5b60208401519092506001600160d81b03811681146111e157600080fd5b60008261140b57634e487b7160e01b600052601260045260246000fd5b50049056fea26469706673582212201237325600ddf33cbbdea3f7410a0deddca0f00cfcc15941dde73e189018cb0264736f6c634300081400330000000000000000000000004da27a545c0c5b758a6ba100e3a049001de870f50000000000000000000000005f4ec3df9cbd43714fe2740f5e3616155c5b8419000000000000000000000000547a514d5e3769680ce22b2361c10ea13619e8a9
Deployed Bytecode
0x608060405234801561001057600080fd5b506004361061007d5760003560e01c8063b0f0abe91161005b578063b0f0abe91461010c578063deb6609014610133578063ee4291ce14610153578063feb23d311461017457600080fd5b8063026dc68214610082578063304fbe0d146100ac5780638e6a6941146100cd575b600080fd5b610095610090366004610f1c565b61019b565b6040516100a392919061104d565b60405180910390f35b6100bf6100ba366004611087565b610379565b6040516100a3929190611152565b6100f47f0000000000000000000000004da27a545c0c5b758a6ba100e3a049001de870f581565b6040516001600160a01b0390911681526020016100a3565b6100f47f0000000000000000000000005f4ec3df9cbd43714fe2740f5e3616155c5b841981565b6101466101413660046111b3565b61055a565b6040516100a391906111ec565b6101666101613660046111fb565b610575565b6040516100a3929190611246565b6100f47f000000000000000000000000547a514d5e3769680ce22b2361c10ea13619e8a981565b606060008483146101fd5760405162461bcd60e51b815260206004820152602160248201527f417272617973206d757374206265206f66207468652073616d65206c656e67746044820152600d60fb1b60648201526084015b60405180910390fd5b60008567ffffffffffffffff8111156102185761021861126a565b60405190808252806020026020018201604052801561025157816020015b61023e610e25565b8152602001906001900390816102365790505b50905060007f0000000000000000000000005f4ec3df9cbd43714fe2740f5e3616155c5b84196001600160a01b03166350d25bcd6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156102b4573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906102d89190611280565b905060005b8781101561036b5761033b8989838181106102fa576102fa611299565b905060200201602081019061030f91906112af565b88888481811061032157610321611299565b905060200201602081019061033691906112af565b6105a5565b83828151811061034d5761034d611299565b60200260200101819052508080610363906112e2565b9150506102dd565b509097909650945050505050565b6060808584146103d95760405162461bcd60e51b815260206004820152602560248201527f416c6c20617272617973206d757374206265206f66207468652073616d65206c6044820152640cadccee8d60db1b60648201526084016101f4565b60008667ffffffffffffffff8111156103f4576103f461126a565b60405190808252806020026020018201604052801561042d57816020015b61041a610e25565b8152602001906001900390816104125790505b50905060008767ffffffffffffffff81111561044b5761044b61126a565b60405190808252806020026020018201604052801561048457816020015b610471610e8a565b8152602001906001900390816104695790505b50905060005b8881101561054b576104ce8a8a838181106104a7576104a7611299565b90506020020160208101906104bc91906112af565b89898481811061032157610321611299565b8382815181106104e0576104e0611299565b602002602001018190525061051b8a8a8381811061050057610500611299565b905060200201602081019061051591906112af565b87610b32565b82828151811061052d5761052d611299565b60200260200101819052508080610543906112e2565b91505061048a565b50909890975095505050505050565b610562610e25565b61056c83836105a5565b90505b92915050565b61057d610e25565b610585610e8a565b61058f85856105a5565b6105998685610b32565b91509150935093915050565b6105ad610e25565b6000839050806001600160a01b03166318160ddd6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156105f0573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906106149190611280565b80835260405163266d6a8360e11b815260048101919091526001600160a01b03821690634cdad50690602401602060405180830381865afa15801561065d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906106819190611280565b826020018181525050806001600160a01b031663616e0bf96040518163ffffffff1660e01b8152600401602060405180830381865afa1580156106c8573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906106ec9190611280565b826040018181525050806001600160a01b031663359c4a966040518163ffffffff1660e01b8152600401602060405180830381865afa158015610733573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906107579190611280565b8260600181815250507f000000000000000000000000547a514d5e3769680ce22b2361c10ea13619e8a96001600160a01b03166350d25bcd6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156107be573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906107e29190611280565b8260a0018181525050806001600160a01b031663f34d96da6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610829573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061084d9190611280565b82610140018181525050836001600160a01b031663919cd40f6040518163ffffffff1660e01b8152600401602060405180830381865afa9250505080156108b1575060408051601f3d908101601f191682019092526108ae91810190611280565b60015b61092057806001600160a01b031663efa90b546040518163ffffffff1660e01b8152600401602060405180830381865afa92505050801561090f575060408051601f3d908101601f1916820190925261090c91810190611280565b60015b1561091b576101208301525b610927565b6101208301525b806001600160a01b031663f036bc686040518163ffffffff1660e01b8152600401602060405180830381865afa158015610965573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061098991906112fb565b1515610100830152604051631e23703160e31b81526001600160a01b0385811660048301526000919083169063f11b818890602401606060405180830381865afa1580156109db573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109ff9190611339565b505090508261012001514210610a16576000610a18565b805b6001600160801b031660e08401526001600160a01b037f0000000000000000000000004da27a545c0c5b758a6ba100e3a049001de870f5811690861603610a875760a0830151608084015260e08301518351610a7d916001600160801b031690610ded565b60c0840152610b2a565b836001600160a01b03166350d25bcd6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610ac5573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ae99190611280565b608084015260a083015160e0840151610b2491610b0e916001600160801b0316611375565b60808501518551610b1f9190611375565b610ded565b60c08401525b505092915050565b610b3a610e8a565b6040516370a0823160e01b81526001600160a01b0383811660048301528491908216906370a0823190602401602060405180830381865afa158015610b83573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ba79190611280565b82526040516346df7f7160e11b81526001600160a01b038481166004830152821690638dbefee290602401602060405180830381865afa158015610bef573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c139190611280565b826060018181525050806001600160a01b031663312f6b836040518163ffffffff1660e01b8152600401602060405180830381865afa158015610c5a573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c7e919061138c565b6040516370a0823160e01b81526001600160a01b03858116600483015291909116906370a0823190602401602060405180830381865afa158015610cc6573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610cea9190611280565b6040838101919091528251905163266d6a8360e11b815260048101919091526001600160a01b03821690634cdad50690602401602060405180830381865afa158015610d3a573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d5e9190611280565b602083015260405163091030c360e01b81526001600160a01b03848116600483015282169063091030c3906024016040805180830381865afa158015610da8573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610dcc91906113a9565b6001600160d81b031660a084015264ffffffffff1660808301525092915050565b600081600003610dff5750600061056f565b81612710610e116301e1338086611375565b610e1b9190611375565b61056c91906113ee565b6040518061016001604052806000815260200160008152602001600081526020016000815260200160008152602001600081526020016000815260200160006001600160801b0316815260200160001515815260200160008152602001600081525090565b6040518060c0016040528060008152602001600081526020016000815260200160008152602001600064ffffffffff16815260200160006001600160d81b031681525090565b60008083601f840112610ee257600080fd5b50813567ffffffffffffffff811115610efa57600080fd5b6020830191508360208260051b8501011115610f1557600080fd5b9250929050565b60008060008060408587031215610f3257600080fd5b843567ffffffffffffffff80821115610f4a57600080fd5b610f5688838901610ed0565b90965094506020870135915080821115610f6f57600080fd5b50610f7c87828801610ed0565b95989497509550505050565b805182526020810151602083015260408101516040830152606081015160608301526080810151608083015260a081015160a083015260c081015160c083015260e0810151610fe260e08401826001600160801b03169052565b5061010081810151151590830152610120808201519083015261014090810151910152565b600081518084526020808501945080840160005b838110156110425761102e878351610f88565b61016096909601959082019060010161101b565b509495945050505050565b6040815260006110606040830185611007565b90508260208301529392505050565b6001600160a01b038116811461108457600080fd5b50565b60008060008060006060868803121561109f57600080fd5b853567ffffffffffffffff808211156110b757600080fd5b6110c389838a01610ed0565b909750955060208801359150808211156110dc57600080fd5b506110e988828901610ed0565b90945092505060408601356110fd8161106f565b809150509295509295909350565b8051825260208082015190830152604080820151908301526060808201519083015260808082015164ffffffffff169083015260a0908101516001600160d81b0316910152565b6040815260006111656040830185611007565b82810360208481019190915284518083528582019282019060005b818110156111a65761119383865161110b565b9383019360c09290920191600101611180565b5090979650505050505050565b600080604083850312156111c657600080fd5b82356111d18161106f565b915060208301356111e18161106f565b809150509250929050565b610160810161056f8284610f88565b60008060006060848603121561121057600080fd5b833561121b8161106f565b9250602084013561122b8161106f565b9150604084013561123b8161106f565b809150509250925092565b61022081016112558285610f88565b61126361016083018461110b565b9392505050565b634e487b7160e01b600052604160045260246000fd5b60006020828403121561129257600080fd5b5051919050565b634e487b7160e01b600052603260045260246000fd5b6000602082840312156112c157600080fd5b81356112638161106f565b634e487b7160e01b600052601160045260246000fd5b6000600182016112f4576112f46112cc565b5060010190565b60006020828403121561130d57600080fd5b8151801515811461126357600080fd5b80516001600160801b038116811461133457600080fd5b919050565b60008060006060848603121561134e57600080fd5b6113578461131d565b92506113656020850161131d565b9150604084015190509250925092565b808202811582820484141761056f5761056f6112cc565b60006020828403121561139e57600080fd5b81516112638161106f565b600080604083850312156113bc57600080fd5b825164ffffffffff811681146113d157600080fd5b60208401519092506001600160d81b03811681146111e157600080fd5b60008261140b57634e487b7160e01b600052601260045260246000fd5b50049056fea26469706673582212201237325600ddf33cbbdea3f7410a0deddca0f00cfcc15941dde73e189018cb0264736f6c63430008140033
Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)
0000000000000000000000004da27a545c0c5b758a6ba100e3a049001de870f50000000000000000000000005f4ec3df9cbd43714fe2740f5e3616155c5b8419000000000000000000000000547a514d5e3769680ce22b2361c10ea13619e8a9
-----Decoded View---------------
Arg [0] : stkAave (address): 0x4da27a545c0c5B758a6BA100e3a049001de870f5
Arg [1] : ethUsdPriceFeed (address): 0x5f4eC3Df9cbd43714FE2740f5E3616155c5b8419
Arg [2] : aaveUsdPriceFeed (address): 0x547a514d5e3769680Ce22B2361c10Ea13619e8a9
-----Encoded View---------------
3 Constructor Arguments found :
Arg [0] : 0000000000000000000000004da27a545c0c5b758a6ba100e3a049001de870f5
Arg [1] : 0000000000000000000000005f4ec3df9cbd43714fe2740f5e3616155c5b8419
Arg [2] : 000000000000000000000000547a514d5e3769680ce22b2361c10ea13619e8a9
Loading...
Loading
Loading...
Loading
Multichain Portfolio | 27 Chains
Chain | Token | Portfolio % | Price | Amount | Value |
---|
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.