Indexed Finance
  • README
  • Introduction
    • Product FAQs
      • Index Pools
      • Yield Aggregator Vaults
    • Fees
    • Who We Are
  • Day-To-Day Operations
    • Using Your Vote
    • The Sigma Program
  • Index Pool Protocol
    • Terminology
    • Governance
    • Security
    • Index Controller
    • Index Pools
    • Rebalancing
      • Bootstrapping New Tokens
      • Removing Tokens
  • Index Pool Smart Contracts
    • Deployments
    • IndexPool.sol
    • PoolInitializer.sol
    • UnboundTokenSeller.sol
    • MarketCapSqrtController.sol
    • @indexed-finance/proxies
      • DelegateCallProxyManager.sol
      • DelegateCallProxyManyToOne.sol
      • DelegateCallProxyOneToOne.sol
      • ManyToOneImplementationHolder.sol
      • SaltyLib.sol
    • @indexed-finance/uniswap-v2-oracle
    • Interfaces
      • IIndexPool.sol
      • IFlashLoanRecipient.sol
  • Yield Aggregator Protocol
    • Supported Assets
  • Yield Aggregator Smart Contracts
    • Deployments
Powered by GitBook
On this page

Was this helpful?

  1. Index Pool Smart Contracts
  2. Interfaces

IIndexPool.sol

// SPDX-License-Identifier: GPL-3.0 pragma solidity ^0.6.0; pragma experimental ABIEncoderV2;

interface IIndexPool { /**

  • @dev Token record data structure

  • @param bound is token bound to pool

  • @param ready has token been initialized

  • @param lastDenormUpdate timestamp of last denorm change

  • @param denorm denormalized weight

  • @param desiredDenorm desired denormalized weight (used for incremental changes)

  • @param index index of address in tokens array

  • @param balance token balance */ struct Record { bool bound; bool ready; uint40 lastDenormUpdate; uint96 denorm; uint96 desiredDenorm; uint8 index; uint256 balance; }

    event LOG_SWAP( address indexed caller, address indexed tokenIn, address indexed tokenOut, uint256 tokenAmountIn, uint256 tokenAmountOut );

    event LOG_JOIN( address indexed caller, address indexed tokenIn, uint256 tokenAmountIn );

    event LOG_EXIT( address indexed caller, address indexed tokenOut, uint256 tokenAmountOut );

    event LOG_DENORM_UPDATED(address indexed token, uint256 newDenorm);

    event LOG_DESIRED_DENORM_SET(address indexed token, uint256 desiredDenorm);

    event LOG_TOKEN_REMOVED(address token);

    event LOG_TOKEN_ADDED( address indexed token, uint256 desiredDenorm, uint256 minimumBalance );

    event LOG_MINIMUM_BALANCE_UPDATED(address token, uint256 minimumBalance);

    event LOG_TOKEN_READY(address indexed token);

    event LOG_PUBLIC_SWAP_ENABLED();

    event LOG_MAX_TOKENS_UPDATED(uint256 maxPoolTokens);

    event LOG_SWAP_FEE_UPDATED(uint256 swapFee);

    function configure( address controller, string calldata name, string calldata symbol ) external;

    function initialize( address[] calldata tokens, uint256[] calldata balances, uint96[] calldata denorms, address tokenProvider, address unbindHandler ) external;

    function setMaxPoolTokens(uint256 maxPoolTokens) external;

    function setSwapFee(uint256 swapFee) external;

    function reweighTokens( address[] calldata tokens, uint96[] calldata desiredDenorms ) external;

    function reindexTokens( address[] calldata tokens, uint96[] calldata desiredDenorms, uint256[] calldata minimumBalances ) external;

    function setMinimumBalance(address token, uint256 minimumBalance) external;

    function joinPool(uint256 poolAmountOut, uint256[] calldata maxAmountsIn) external;

    function joinswapExternAmountIn( address tokenIn, uint256 tokenAmountIn, uint256 minPoolAmountOut ) external returns (uint256/ poolAmountOut /);

    function joinswapPoolAmountOut( address tokenIn, uint256 poolAmountOut, uint256 maxAmountIn ) external returns (uint256/ tokenAmountIn /);

    function exitPool(uint256 poolAmountIn, uint256[] calldata minAmountsOut) external;

    function exitswapPoolAmountIn( address tokenOut, uint256 poolAmountIn, uint256 minAmountOut ) external returns (uint256/ tokenAmountOut /);

    function exitswapExternAmountOut( address tokenOut, uint256 tokenAmountOut, uint256 maxPoolAmountIn ) external returns (uint256/ poolAmountIn /);

    function gulp(address token) external;

    function flashBorrow( address recipient, address token, uint256 amount, bytes calldata data ) external;

    function swapExactAmountIn( address tokenIn, uint256 tokenAmountIn, address tokenOut, uint256 minAmountOut, uint256 maxPrice ) external returns (uint256/ tokenAmountOut /, uint256/ spotPriceAfter /);

    function swapExactAmountOut( address tokenIn, uint256 maxAmountIn, address tokenOut, uint256 tokenAmountOut, uint256 maxPrice ) external returns (uint256 / tokenAmountIn /, uint256 / spotPriceAfter /);

    function isPublicSwap() external view returns (bool);

    function getSwapFee() external view returns (uint256/ swapFee /);

    function getController() external view returns (address);

    function getMaxPoolTokens() external view returns (uint256);

    function isBound(address t) external view returns (bool);

    function getNumTokens() external view returns (uint256);

    function getCurrentTokens() external view returns (address[] memory tokens);

    function getCurrentDesiredTokens() external view returns (address[] memory tokens);

    function getDenormalizedWeight(address token) external view returns (uint256/ denorm /);

    function getTokenRecord(address token) external view returns (Record memory record);

    function extrapolatePoolValueFromToken() external view returns (address/ token /, uint256/ extrapolatedValue /);

    function getTotalDenormalizedWeight() external view returns (uint256);

    function getBalance(address token) external view returns (uint256);

    function getMinimumBalance(address token) external view returns (uint256);

    function getUsedBalance(address token) external view returns (uint256);

    function getSpotPrice(address tokenIn, address tokenOut) external view returns (uint256); }

PreviousInterfacesNextIFlashLoanRecipient.sol

Last updated 4 years ago

Was this helpful?