YSL.IO Protocol - Smart Contract Audit Report

Summary

 YSLProtocol Audit Report YSL.IO Protocol is launching new tokens along with a staking platform where each pool utilizes a separate strategy contract.

We reviewed YSL.IO Protocol's YSLToken, sYSLToken, YSLProtocol, Referral, StrategyLock, StrategySwap, YSLOpt, YSLOptPancake, YSLOptApe, YSLOptSinglePancake, YSLOptSingleApe, YSLxBUSDShare, sYSLxBUSDShare, and sYSLShare contracts at commit 57a52b25b4fca75d302d22ee3ee3692ecd299e56 on the team's private GitHub.

Update: We have additionally reviewed the project team's aYSLToken, xYSLAirdrop, xYSLAdapter, and YSLSwapAdapter contracts at commit 05a50c20a12027f4f53fab0a69a9cc97092f80c0 on the team's private GitHub.

We previously reviewed the project team's xYSLToken contract here, and PriceDiscovery platform here.

Notes on the Contracts:
YSLToken ERC20 Contract:
  • A Minter is able to mint any amount to any address at any time.
  • A Minter is able to burn any amount of tokens from their own address at any time.
  • Only a Minter can burn or mint tokens, however a user can send their own tokens to the 0x..dead address to decrease the circulating supply, if desired.
  • There are no transfer fees for this token.
  • The owner is able to grant or revoke the Minter role for any address at any time.
sYSLToken ERC20 Contract:
  • The owner of the contract is given Admin and Minter roles.
  • A Minter is able to mint any amount to any account at any time.
  • A Minter is able to burn any amount of tokens from their own address at any time.
  • A Minter is able to mint 'Airdropped' tokens and 'Purchased' tokens which are kept track of in separate mappings.
  • The minter will specify a period of time for which the funds will be released. The minted tokens will be unlocked linearly throughout the lock period.
  • Only a Minter can burn or mint tokens, however a user can send their own tokens to the 0x..dead address to decrease the circulating supply, if desired.
  • There are no transfer fees for this token.
  • The owner is able to grant or revoke the Minter role for any address at any time.
aYSLToken ERC20 Contract:
  • The owner of the contract is given Admin and Minter roles.
  • A Minter is able to mint any amount to any account at any time.
  • No burning functionality is present.
  • Only Whitelisted users can transfer funds or approve their funds for transfer.
  • A Minter is able to add/remove any address to/from the Whitelist at any time.
  • The owner is able to grant or revoke the Minter role for any address at any time.
YSLProtocol Contract:
  • Users can stake various tokens in the YSLProtocol contract into pools to earn rewards in the form of the project's native sYSL token and any rewards earned from the pool's strategy contract.
  • Each pool has a strategy contract associated with it. When funds are deposited/withdrawn to/from a pool, they are intended to be automatically deposited/withdrawn to/from the pool's strategy contract.
  • When a user deposits, they can specify a referrer address which will grant the referrer additional rewards.
  • A pools strategy contract can be changed at any time by the owner and will function as long as the required functions are defined.
  • If the user has an aYSL balance of over 10% of the BUSD price of their holdings across all compounded pools, their rewards are multiplied by an 'amplified' coefficient. The amplified multiplier for each pool's rewards are defined by the pool's strategy contract. This logic can be potentially abused by a user if they use multiple different addresses to stake tokens (requiring a smaller aYSL balance to obtain the amplified multiplier), then transferring their aYSL balance to the address they wish to harvest with.
  • When rewards are generated, an additional amount of sYSL tokens are minted to a team wallet. While rewards can be updated at any time, minting to the team wallet can only occur once per 24 hours. The owner can change the amount minted to the team wallet at any time.
  • User rewards are intended to be locked in a lock contract and linearly vested over 180 days. Note that the lock contract can be changed at anytime by the owner.
  • Users can migrate funds from one pool to another at any time, with fees dependent on the pool's strategy contract.
  • There are no deposit or withdraw fees in this contract.
  • The YSLProtocol staking contract should not be used with fee-on-transfer tokens or ERC-777 tokens. If a fee-on-transfer token is added as a staking asset, then the contract must be exempt from transfer fees. This contract is intended to be exempt from xYSLToken fees.
  • This contract is intended to be a Minter for the sYSLToken contract.
  • The team must also be careful not to add the same token twice for staking.
  • A pool's share of rewards generated can be changed by the owner at any time. When changing, the owner can elect to have the sYSL tokens minted to this contract.
  • The owner can change the referral contract at any time.
  • The owner can change the base amount of sYSL rewarded per block at any time (this value is multiplied by a pool's allocation points to calculate rewards).
  • The owner can allow and disallow all deposits into any pool at any time.
Referral Contract:
  • The owner has the Admin role and the Operator role in the Referral contract.
  • The owner is able to grant or revoke the Operator role for any address at any time.
  • An Operator is able to add or remove a referrer's address for any user at any time.
StrategyLock Contract:
  • This contract implements the locking functionality used throughout the project.
  • Any time funds are locked, they are transferred to this contract. Funds are then unlocked linearly over the passed lock period. For example, if 10% of the lock time has passed, 10% of funds will be available for withdrawal.
StrategySwap Contract:
  • StrategySwap is used by each strategy contract to swap between a pool's LP token and BUSD.
  • This contract has two methods for swapping from BUSD to LP tokens:
  • (1)BUSD is split into two equal amounts and converted along specified paths. The resulting tokens are paired and added as liquidity to either PancakeSwap or ApeSwap in exchange for LP tokens.
  • (2) BUSD is simply swapped along a specified path into LP tokens.
  • This contract also has two methods for swapping LP tokens to BUSD:
  • (1) Liquidity is first removed from a specified pair. The resulting tokens are then swapped for along specified paths for BUSD.
  • (2) LP tokens are simply swapped along a specified path into BUSD.
  • As swaps do not take slippage into account, transactions can be vulnerable to front-running.
YSLOpt/General Strategy Contract Notes:
  • The owner of the contract is given the Admin role and the strategy contract is given the 'Strat' role at the time of initialization.
  • Each strategy contract inherits some functionality from the base YSLOpt contract.
  • Each strategy contract is initialized with a referral contract, a swap contract, fee address, an lp token, and adapter address, all of which cannot be changed.
  • The adapter address collects LP tokens received from certain liquidity adds and cannot be changed.
  • Earnings from strategy contracts are subject to a multiplier based on whether a user is amplified, has specified a referrer, or neither of these conditions. The order of precedence of these multipliers is as follows: amplified > has referrer > base multiplier.
  • Referrer earnings are also subject to a separate multiplier.
  • All earnings multipliers can be changed by an Admin at any time. Note that multipliers can also be set to less than 100%.
  • These notes apply only to strategy contracts we reviewed during this audit.
YSLOptPancake and YSLOptApe Contracts:
  • Funds deposited into these strategy contract are sent to either PancakeSwap's MasterChef contract or ApeSwap's MasterApe contract to earn rewards.
  • Rewards are periodically collected and converted to BUSD, where a 'controller fee' and 'optimization tax' are both collected. The remaining rewards are then swapped from BUSD to LP tokens using StrategySwap's method (1) added back into the MasterChef/MasterApe contract.
  • When users harvest their rewards from a pool implementing one of these strategy contracts, their share of rewards, along with referrer rewards, are minted in sYSL tokens. These rewards are both affected by the previous mentioned multipliers. At the same time, a portion of the contract's lp tokens, relational to the user's earned rewards, are converted to BUSD using StrategySwap's method (1). YSL tokens are then minted and paired with the BUSD and added to the ApeSwap liquidity pair, with the resulting LP tokens sent to the defined adapter address.
  • When harvest is called, user's share of staked LP tokens are converted into BUSD using StrategySwap's method (1).
  • A user will receive decreased rewards from harvesting from a pool using these strategies if they have not waited a defined maturity period between harvests and/or deposits.
  • User rewards will be sent to the lock contract and will vest linearly over a 180 day period.
  • There are no fees for transferring into a pool implementing one of these strategy contracts.
  • When transferring funds out of a pool implementing this contract into a different pool, a .1% fee is taken, swapped from LP tokens to BUSD using StrategySwap's method (1), paired with minted YSL tokens, and added as liquidity to ApeSwap. The resulting LP tokens are sent to the adapter address. This fee cannot be changed.
  • Any address granted the Strat role the maturity period at any time.
  • Any address granted the Strat role can change the lock contract at any time.
  • Any address granted the Strat role can withdraw all funds from the MasterChef/MasterApe contracts into the strategy contract at any time.
YSLOptSinglePancake and YSLOptSingleApe Contracts:
  • These contracts implement the same functionality as the YSLOptPancake and YSLOptApe contracts, however use StrategySwap's method (2) whenever swapping from BUSD to LP tokens and vice versa.
YSLxBUSDShare Contract:
  • There are no staking contracts or rewards associated with this strategy contract.
  • When transferring funds from a separate pool into a pool implementing this strategy contract, the amount in BUSD is paired with minted YSL tokens and added as liquidity to ApeSwap. Half of the LP tokens received are then sent to the adapter address.
  • Transferring funds out of this pool utilizes the same functionality as YSLOptSinglePancake and YSLOptSingleApe.
sYSLxBUSDShare Contract:
  • There are no staking contracts or rewards associated with this strategy contract.
  • When transferring into this contract from another pool, a 10% fee is collected and sent to the adapter address. the remaining amount in BUSD is split into two halves. YSL and sYSL tokens are then minted, paired with each half, and added to ApeSwap as liquidity. The resulting LP tokens from the YSL:BUSD liquidity pair is sent to the xYSLAdapter address.
  • When transferring funds out of a pool implementing this contract into a different pool, the amount transferred out is calculated through the ratio of amount passed to total supply, multiplied by the balance of the swap contract's LP token balance. A 10% fee is collected from this amount and sent to an 'xYSLAdapter' address. This address can be changed at any time.
sYSLShare Contract:
  • There are no staking contracts or rewards associated with this strategy contract.
  • When tranfserring funds into a pool implementing this strategy contract, a 10% fee is taken and sent to the fee address. The remaining amount in BUSD is then paired with minted YSL tokens and added to ApeSwap as liquidity. The resulting LP tokens are sent to the adapter address. sYSL tokens are then minted to this contract and added to the user's tracked deposit amount.
  • When transferring funds out of a pool implementing this contract, a 10% fee is taken and sent to the fee address.
xYSLAdapter Contract
  • The initializer of this contract is given the Admin role.
  • This contract is used to handles fees that are sent to it.
  • An address with the Strat role can elect to process the contract's accrued xYSLToken balance at any time. When this function is called, the contract's xYSLTokens are first converted to BUSD. 40% of this BUSD is then paired with the equivalent amount in minted YSL Tokens and added to ApeSwap as liquidity. The remaining 60% of the BUSD is then sent to a team address as a fee.
  • An address with the Strat role can also call the collect fee functionality, which converts the contract's BUSD balance to xYSL and subsequently burns it.
  • The xYSL, ApeSwap, team, and paths for swapping are all defined upon initialization.
xYSLAirdrop Contract:
  • The owner of this contract has the ability to create xYSLToken airdrops for specified users.
  • Users can be given three different xYSLToken balances: A swap balance, a community balance, and a whitelist balance.
  • The owner of the contract can add/remove users and associated amounts to/from any of these balances at any time.
  • The owner of the contract also has the power to update any user's balances at any time.
  • The owner should be careful to not add a user twice to the same balance, or the total balance variable will not be accurate.
  • The owner of the contract can start the airdrop period at any time. Users then claim their balances at any time until the constant 30 day period is over.
  • When users claim, their swap and community balances are sent directly to them.
  • Users must claim their whitelist balance through a separate claimAirdrop function. This locks their funds in the xYSLToken contract, where they vest linearly over a constant 1500 days.
  • Users can also process claims on behalf of another address. The specified address will receive their rewards as described above; the user claiming does not receive anything.
  • The project team must ensure that this contract has enough xYSL tokens to support claims as this contract does not generate funds on its own.
YSLSwapAdapter Contract:
  • Users can buy or sell sYSL tokens using this contract, where various tokens can be used for purchase or payout.
  • In order to buy sYSL with a token or sell sYSL in exchange for a token, that token must be supported by the contract. The owner can add or remove support for any token at any time.
  • When selling sYSL, sYSL is burned and the equivalent amount in YSL is minted to the contract. It is then swapped for BUSD.
  • There is a 50% sell fee, where 80% of the fee is used to buy and burn sYSL tokens through PancakeSwap, and 20% is sent to a team address.
  • The remaining 50% of BUSD is then swapped for the desired token through ApeSwap and sent to the user. If the desired token is already BUSD, it is simply sent to the user as no swapping is needed.
  • When buying BUSD, the specified tokens are swapped for BUSD through ApeSwap. If the specified token is already BUSD, no swapping occurs as it is not necessary.
  • There is a 10% buying fee, where 80% of the fee is used to buy and burn sYSL tokens through PancakeSwap, and 20% is sent to a team address.
  • The remaining 90% of the BUSD is paired with minted YSL tokens and added as liquidity to the ApeSwap pair. The equivalent amount after fees in sYSL tokens are then minted to the user.
  • Fees are set and cannot be changed by the owner.
General Notes across contracts:
  • Contracts utilize Solidity v0.8.4 to prevent overflows.
  • These notes assume that the sYSL, YSL, lock, and swap contracts are set to the contracts in the scope of this audit.
  • Many functions can be declared external instead of public for gas saving purposes.

Audit Findings Summary:
  • No security issues from outside attackers were identified.
  • Ensure trust in the team as they have substantial control in the ecosystem. The strategy and lock contracts can be changed at any time. Reward multipliers and some fees can also be changed by Admins at any time.
  • Date: October 14th, 2021.
  • Updated: November 8th, 2021

External Threat Results

Vulnerability CategoryNotesResult
Arbitrary Storage WriteN/APASS
Arbitrary JumpN/APASS
Delegate Call to Untrusted ContractN/APASS
Dependence on Predictable VariablesN/APASS
Deprecated OpcodesN/APASS
Ether ThiefN/APASS
ExceptionsN/APASS
External CallsN/APASS
Integer Over/UnderflowN/APASS
Multiple SendsN/APASS
SuicideN/APASS
State Change External CallsN/APASS
Unchecked RetvalN/APASS
User Supplied AssertionN/APASS
Critical Solidity CompilerN/APASS
Overall Contract Safety PASS

YSLToken Contract

Smart Contract Graph

Contract Inheritance


 ($) = payable function
 # = non-constant function
 
  + [Int] IERC20 
    - [Ext] totalSupply
    - [Ext] balanceOf
    - [Ext] transfer #
    - [Ext] allowance
    - [Ext] approve #
    - [Ext] transferFrom #

 + [Int] IERC20Metadata (IERC20)
    - [Ext] name
    - [Ext] symbol
    - [Ext] decimals

 +  Context 
    - [Int] _msgSender
    - [Int] _msgData

 +  ERC20 (Context, IERC20, IERC20Metadata)
    - [Pub]  #
    - [Pub] name
    - [Pub] symbol
    - [Pub] decimals
    - [Pub] totalSupply
    - [Pub] balanceOf
    - [Pub] transfer #
    - [Pub] allowance
    - [Pub] approve #
    - [Pub] transferFrom #
    - [Pub] increaseAllowance #
    - [Pub] decreaseAllowance #
    - [Int] _transfer #
    - [Int] _mint #
    - [Int] _burn #
    - [Int] _approve #
    - [Int] _beforeTokenTransfer #
    - [Int] _afterTokenTransfer #

 +  Ownable (Context)
    - [Pub]  #
    - [Pub] owner
    - [Pub] renounceOwnership #
       - modifiers: onlyOwner
    - [Pub] transferOwnership #
       - modifiers: onlyOwner
    - [Prv] _setOwner #

 + [Int] IAccessControl 
    - [Ext] hasRole
    - [Ext] getRoleAdmin
    - [Ext] grantRole #
    - [Ext] revokeRole #
    - [Ext] renounceRole #

 + [Lib] Strings 
    - [Int] toString
    - [Int] toHexString
    - [Int] toHexString

 + [Int] IERC165 
    - [Ext] supportsInterface

 +  ERC165 (IERC165)
    - [Pub] supportsInterface

 +  AccessControl (Context, IAccessControl, ERC165)
    - [Pub] supportsInterface
    - [Pub] hasRole
    - [Int] _checkRole
    - [Pub] getRoleAdmin
    - [Pub] grantRole #
       - modifiers: onlyRole
    - [Pub] revokeRole #
       - modifiers: onlyRole
    - [Pub] renounceRole #
    - [Int] _setupRole #
    - [Int] _setRoleAdmin #
    - [Prv] _grantRole #
    - [Prv] _revokeRole #

 +  YSLToken (ERC20, Ownable, AccessControl)
    - [Pub]  #
       - modifiers: ERC20
    - [Ext] isMinter
    - [Ext] mintFor #
       - modifiers: _isMinter
    - [Ext] mint #
       - modifiers: _isMinter
    - [Ext] burnFrom #
       - modifiers: _isMinter
    - [Ext] burn #
       - modifiers: _isMinter
    - [Ext] setMinter #
       - modifiers: onlyOwner
    - [Ext] removeMinter #
       - modifiers: onlyOwner



sYSLToken Contract

Smart Contract Graph

Contract Inheritance


 ($) = payable function
 # = non-constant function
 
  + [Int] IERC20 
    - [Ext] totalSupply
    - [Ext] balanceOf
    - [Ext] transfer #
    - [Ext] allowance
    - [Ext] approve #
    - [Ext] transferFrom #

 + [Int] IERC20Metadata (IERC20)
    - [Ext] name
    - [Ext] symbol
    - [Ext] decimals

 +  Context 
    - [Int] _msgSender
    - [Int] _msgData

 +  ERC20 (Context, IERC20, IERC20Metadata)
    - [Pub]  #
    - [Pub] name
    - [Pub] symbol
    - [Pub] decimals
    - [Pub] totalSupply
    - [Pub] balanceOf
    - [Pub] transfer #
    - [Pub] allowance
    - [Pub] approve #
    - [Pub] transferFrom #
    - [Pub] increaseAllowance #
    - [Pub] decreaseAllowance #
    - [Int] _transfer #
    - [Int] _mint #
    - [Int] _burn #
    - [Int] _approve #
    - [Int] _beforeTokenTransfer #
    - [Int] _afterTokenTransfer #

 +  Ownable (Context)
    - [Pub]  #
    - [Pub] owner
    - [Pub] renounceOwnership #
       - modifiers: onlyOwner
    - [Pub] transferOwnership #
       - modifiers: onlyOwner
    - [Prv] _setOwner #

 + [Int] IAccessControl 
    - [Ext] hasRole
    - [Ext] getRoleAdmin
    - [Ext] grantRole #
    - [Ext] revokeRole #
    - [Ext] renounceRole #

 + [Lib] Strings 
    - [Int] toString
    - [Int] toHexString
    - [Int] toHexString

 + [Int] IERC165 
    - [Ext] supportsInterface

 +  ERC165 (IERC165)
    - [Pub] supportsInterface

 +  AccessControl (Context, IAccessControl, ERC165)
    - [Pub] supportsInterface
    - [Pub] hasRole
    - [Int] _checkRole
    - [Pub] getRoleAdmin
    - [Pub] grantRole #
       - modifiers: onlyRole
    - [Pub] revokeRole #
       - modifiers: onlyRole
    - [Pub] renounceRole #
    - [Int] _setupRole #
    - [Int] _setRoleAdmin #
    - [Prv] _grantRole #
    - [Prv] _revokeRole #

 +  sYSLToken (ERC20, Ownable, AccessControl)
    - [Pub]  #
       - modifiers: ERC20
    - [Ext] setMinter #
       - modifiers: onlyOwner
    - [Ext] removeMinter #
       - modifiers: onlyOwner
    - [Ext] addToWhitelist #
       - modifiers: onlyOwner
    - [Ext] removeFromWhitelist #
       - modifiers: onlyOwner
    - [Ext] isMinter
    - [Ext] mint #
       - modifiers: minterOnly
    - [Ext] mintFor #
       - modifiers: minterOnly
    - [Ext] mintPurchased #
       - modifiers: minterOnly
    - [Ext] mintAirdropped #
       - modifiers: minterOnly
    - [Ext] burn #
       - modifiers: minterOnly
    - [Ext] burnFrom #
       - modifiers: minterOnly
    - [Pub] lockedTokens
    - [Pub] lockedTransferrableTokens
    - [Ext] unlockedTokens
    - [Ext] availableTokens
    - [Int] _beforeTokenTransfer #
    - [Pub] unlock #
    - [Pub] unlockAirdrop #


 

aYSLToken Contract

Smart Contract Graph

Contract Inheritance


 ($) = payable function
 # = non-constant function
 
 + [Int] IAccessControl 
    - [Ext] hasRole
    - [Ext] getRoleAdmin
    - [Ext] grantRole #
    - [Ext] revokeRole #
    - [Ext] renounceRole #

 +  Context 
    - [Int] _msgSender
    - [Int] _msgData

 + [Lib] Strings 
    - [Int] toString
    - [Int] toHexString
    - [Int] toHexString

 + [Int] IERC165 
    - [Ext] supportsInterface

 +  ERC165 (IERC165)
    - [Pub] supportsInterface

 +  AccessControl (Context, IAccessControl, ERC165)
    - [Pub] supportsInterface
    - [Pub] hasRole
    - [Int] _checkRole
    - [Pub] getRoleAdmin
    - [Pub] grantRole #
       - modifiers: onlyRole
    - [Pub] revokeRole #
       - modifiers: onlyRole
    - [Pub] renounceRole #
    - [Int] _setupRole #
    - [Int] _setRoleAdmin #
    - [Prv] _grantRole #
    - [Prv] _revokeRole #

 + [Int] IERC20 
    - [Ext] totalSupply
    - [Ext] balanceOf
    - [Ext] transfer #
    - [Ext] allowance
    - [Ext] approve #
    - [Ext] transferFrom #

 + [Int] IERC20Metadata (IERC20)
    - [Ext] name
    - [Ext] symbol
    - [Ext] decimals

 +  ERC20 (Context, IERC20, IERC20Metadata)
    - [Pub]  #
    - [Pub] name
    - [Pub] symbol
    - [Pub] decimals
    - [Pub] totalSupply
    - [Pub] balanceOf
    - [Pub] transfer #
    - [Pub] allowance
    - [Pub] approve #
    - [Pub] transferFrom #
    - [Pub] increaseAllowance #
    - [Pub] decreaseAllowance #
    - [Int] _transfer #
    - [Int] _mint #
    - [Int] _burn #
    - [Int] _approve #
    - [Int] _beforeTokenTransfer #
    - [Int] _afterTokenTransfer #

 + [Int] IxYSLAdapter 
    - [Ext] collectxYSLFee #
    - [Ext] transferSurcharge #

 +  aYSLToken (ERC20, AccessControl)
    - [Pub]  #
       - modifiers: ERC20
    - [Ext] isMinter
    - [Ext] addToWhitelist #
       - modifiers: _isMinter
    - [Ext] removeFromWhitelist #
       - modifiers: _isMinter
    - [Ext] mintFor #
       - modifiers: _isMinter
    - [Ext] setMinter #
       - modifiers: onlyRole
    - [Ext] removeMinter #
       - modifiers: onlyRole
    - [Int] _transfer #
       - modifiers: _isWhitelisted
    - [Int] _approve #
       - modifiers: _isWhitelisted



 

YSLProtocol Contract

Smart Contract Graph

Contract Inheritance


 ($) = payable function
 # = non-constant function
 
  + [Int] IERC20 
    - [Ext] totalSupply
    - [Ext] balanceOf
    - [Ext] transfer #
    - [Ext] allowance
    - [Ext] approve #
    - [Ext] transferFrom #

 + [Lib] Address 
    - [Int] isContract
    - [Int] sendValue #
    - [Int] functionCall #
    - [Int] functionCall #
    - [Int] functionCallWithValue #
    - [Int] functionCallWithValue #
    - [Int] functionStaticCall
    - [Int] functionStaticCall
    - [Int] functionDelegateCall #
    - [Int] functionDelegateCall #
    - [Int] verifyCallResult

 + [Lib] SafeERC20 
    - [Int] safeTransfer #
    - [Int] safeTransferFrom #
    - [Int] safeApprove #
    - [Int] safeIncreaseAllowance #
    - [Int] safeDecreaseAllowance #
    - [Prv] _callOptionalReturn #

 +  Initializable 

 +  ContextUpgradeable (Initializable)
    - [Int] __Context_init #
       - modifiers: initializer
    - [Int] __Context_init_unchained #
       - modifiers: initializer
    - [Int] _msgSender
    - [Int] _msgData

 +  OwnableUpgradeable (Initializable, ContextUpgradeable)
    - [Int] __Ownable_init #
       - modifiers: initializer
    - [Int] __Ownable_init_unchained #
       - modifiers: initializer
    - [Pub] owner
    - [Pub] renounceOwnership #
       - modifiers: onlyOwner
    - [Pub] transferOwnership #
       - modifiers: onlyOwner
    - [Prv] _setOwner #

 + [Int] IsYSL (IERC20)
    - [Ext] YSLSupply #
    - [Ext] isMinted #
    - [Ext] mintPurchased #
    - [Ext] mintAirdropped #
    - [Ext] mintFor #
    - [Ext] burnFrom #
    - [Ext] mint #

 + [Int] IStrategy 
    - [Ext] deposit #
    - [Ext] withdraw #
    - [Ext] getUserDepositedUSD
    - [Ext] transferOut #
    - [Ext] transferIn #
    - [Ext] earn #
    - [Ext] lpToken
    - [Ext] totalDeposited
    - [Ext] currentReward

 + [Int] IReferral 
    - [Ext] hasReferral
    - [Ext] referrals
    - [Ext] proccessReferral #
    - [Ext] proccessReferral #

 + [Int] ILock 
    - [Ext] setLock #
    - [Ext] releaseClient #
    - [Ext] lock #

 +  YSLProtocol (OwnableUpgradeable)
    - [Ext] initialize #
       - modifiers: initializer
    - [Ext] add #
       - modifiers: onlyOwner
    - [Ext] setAlloc #
       - modifiers: onlyOwner
    - [Ext] setStrat #
       - modifiers: onlyOwner
    - [Ext] setTreasury #
       - modifiers: onlyOwner
    - [Ext] setTeamRate #
       - modifiers: onlyOwner
    - [Ext] setReferral #
       - modifiers: onlyOwner
    - [Ext] setLockContract #
       - modifiers: onlyOwner
    - [Ext] updateEmissionRate #
       - modifiers: onlyOwner
    - [Ext] activatePool #
       - modifiers: onlyOwner
    - [Ext] deactivatePool #
       - modifiers: onlyOwner
    - [Pub] massUpdatePools #
    - [Pub] updatePool #
    - [Pub] deposit #
       - modifiers: isActive
    - [Pub] depositFrom #
       - modifiers: isActive,isActive
    - [Pub] withdraw #
    - [Pub] harvestAll #
    - [Pub] harvest #
    - [Int] _harvest #
    - [Pub] pendingsYSL
    - [Pub] isAmplified
    - [Pub] poolLength
    - [Pub] getMultiplier
    - [Pub] getTotalRewardInPools
    - [Int] safeSYSLtransfer #



 

Referral Contract

Smart Contract Graph

Contract Inheritance


 ($) = payable function
 # = non-constant function
 
  +  Context 
    - [Int] _msgSender
    - [Int] _msgData

 +  Ownable (Context)
    - [Pub]  #
    - [Pub] owner
    - [Pub] renounceOwnership #
       - modifiers: onlyOwner
    - [Pub] transferOwnership #
       - modifiers: onlyOwner
    - [Prv] _setOwner #

 + [Int] IAccessControl 
    - [Ext] hasRole
    - [Ext] getRoleAdmin
    - [Ext] grantRole #
    - [Ext] revokeRole #
    - [Ext] renounceRole #

 + [Lib] Strings 
    - [Int] toString
    - [Int] toHexString
    - [Int] toHexString

 + [Int] IERC165 
    - [Ext] supportsInterface

 +  ERC165 (IERC165)
    - [Pub] supportsInterface

 +  AccessControl (Context, IAccessControl, ERC165)
    - [Pub] supportsInterface
    - [Pub] hasRole
    - [Int] _checkRole
    - [Pub] getRoleAdmin
    - [Pub] grantRole #
       - modifiers: onlyRole
    - [Pub] revokeRole #
       - modifiers: onlyRole
    - [Pub] renounceRole #
    - [Int] _setupRole #
    - [Int] _setRoleAdmin #
    - [Prv] _grantRole #
    - [Prv] _revokeRole #

 +  Referral (Ownable, AccessControl)
    - [Pub]  #
    - [Ext] adminAddReferal #
       - modifiers: operatorOnly
    - [Ext] adminDeleteReferral #
       - modifiers: operatorOnly
    - [Ext] setOperator #
       - modifiers: onlyOwner
    - [Ext] removeOperator #
       - modifiers: onlyOwner
    - [Ext] isOperator
    - [Ext] proccessReferral #
       - modifiers: operatorOnly
    - [Pub] hasReferral
  

 
 

StrategySwap Contract

Smart Contract Graph

Contract Inheritance


 ($) = payable function
 # = non-constant function
 
  + [Int] IERC20 
    - [Ext] totalSupply
    - [Ext] balanceOf
    - [Ext] transfer #
    - [Ext] allowance
    - [Ext] approve #
    - [Ext] transferFrom #

 + [Lib] Address 
    - [Int] isContract
    - [Int] sendValue #
    - [Int] functionCall #
    - [Int] functionCall #
    - [Int] functionCallWithValue #
    - [Int] functionCallWithValue #
    - [Int] functionStaticCall
    - [Int] functionStaticCall
    - [Int] functionDelegateCall #
    - [Int] functionDelegateCall #
    - [Int] verifyCallResult

 + [Lib] SafeERC20 
    - [Int] safeTransfer #
    - [Int] safeTransferFrom #
    - [Int] safeApprove #
    - [Int] safeIncreaseAllowance #
    - [Int] safeDecreaseAllowance #
    - [Prv] _callOptionalReturn #

 +  Context 
    - [Int] _msgSender
    - [Int] _msgData

 +  Initializable 

 + [Int] IPancakeRouter02 
    - [Ext] factory
    - [Ext] WETH
    - [Ext] addLiquidity #
    - [Ext] addLiquidityETH ($)
    - [Ext] removeLiquidity #
    - [Ext] removeLiquidityETH #
    - [Ext] removeLiquidityWithPermit #
    - [Ext] removeLiquidityETHWithPermit #
    - [Ext] swapExactTokensForTokensSupportingFeeOnTransferTokens #
    - [Ext] swapExactTokensForTokens #
    - [Ext] swapTokensForExactTokens #
    - [Ext] swapExactETHForTokens ($)
    - [Ext] swapTokensForExactETH #
    - [Ext] swapExactTokensForETH #
    - [Ext] swapETHForExactTokens ($)
    - [Ext] quote
    - [Ext] getAmountOut
    - [Ext] getAmountIn
    - [Ext] getAmountsOut
    - [Ext] getAmountsIn

 + [Int] IPancakePair 
    - [Ext] name
    - [Ext] symbol
    - [Ext] decimals
    - [Ext] totalSupply
    - [Ext] balanceOf
    - [Ext] allowance
    - [Ext] approve #
    - [Ext] transfer #
    - [Ext] transferFrom #
    - [Ext] DOMAIN_SEPARATOR
    - [Ext] PERMIT_TYPEHASH
    - [Ext] nonces
    - [Ext] permit #
    - [Ext] MINIMUM_LIQUIDITY
    - [Ext] factory
    - [Ext] token0
    - [Ext] token1
    - [Ext] getReserves
    - [Ext] price0CumulativeLast
    - [Ext] price1CumulativeLast
    - [Ext] kLast
    - [Ext] mint #
    - [Ext] burn #
    - [Ext] swap #
    - [Ext] skim #
    - [Ext] sync #
    - [Ext] initialize #

 + [Int] IPancakeMaster 
    - [Ext] deposit #
    - [Ext] withdraw #
    - [Ext] userInfo
    - [Ext] enterStaking #
    - [Ext] leaveStaking #
    - [Ext] pendingCake

 + [Int] IProtocol 
    - [Ext] sYSLPrice #

 +  StrategySwap (Context, Initializable)
    - [Ext] initialize #
       - modifiers: initializer
    - [Ext] swapLPToBusd #
       - modifiers: sYSLSwapDefence
    - [Ext] swapBusdToLP #
       - modifiers: sYSLSwapDefence
    - [Ext] swapLPToBusd #
       - modifiers: sYSLSwapDefenceLP
    - [Ext] swapBusdToLP #
       - modifiers: sYSLSwapDefenceLP
    - [Ext] getBusdAmount
    - [Ext] getBusdAmount
    - [Pub] reversedPath

 
 

StrategyLock Contract

Smart Contract Graph

Contract Inheritance


 ($) = payable function
 # = non-constant function
 
  + [Int] IERC20 
    - [Ext] totalSupply
    - [Ext] balanceOf
    - [Ext] transfer #
    - [Ext] allowance
    - [Ext] approve #
    - [Ext] transferFrom #

 + [Lib] Address 
    - [Int] isContract
    - [Int] sendValue #
    - [Int] functionCall #
    - [Int] functionCall #
    - [Int] functionCallWithValue #
    - [Int] functionCallWithValue #
    - [Int] functionStaticCall
    - [Int] functionStaticCall
    - [Int] functionDelegateCall #
    - [Int] functionDelegateCall #
    - [Int] verifyCallResult

 + [Lib] SafeERC20 
    - [Int] safeTransfer #
    - [Int] safeTransferFrom #
    - [Int] safeApprove #
    - [Int] safeIncreaseAllowance #
    - [Int] safeDecreaseAllowance #
    - [Prv] _callOptionalReturn #

 +  Initializable 

 +  ContextUpgradeable (Initializable)
    - [Int] __Context_init #
       - modifiers: initializer
    - [Int] __Context_init_unchained #
       - modifiers: initializer
    - [Int] _msgSender
    - [Int] _msgData

 +  OwnableUpgradeable (Initializable, ContextUpgradeable)
    - [Int] __Ownable_init #
       - modifiers: initializer
    - [Int] __Ownable_init_unchained #
       - modifiers: initializer
    - [Pub] owner
    - [Pub] renounceOwnership #
       - modifiers: onlyOwner
    - [Pub] transferOwnership #
       - modifiers: onlyOwner
    - [Prv] _setOwner #

 +  StrategyLock (OwnableUpgradeable)
    - [Pub] initialize #
       - modifiers: initializer
    - [Ext] lock #
    - [Ext] unlock #
    - [Pub] getUnlockedFunds
    - [Pub] usersTotalLocked
    - [Prv] _vestedAmount
 
 

YSLOptApe Contract

Smart Contract Graph

Contract Inheritance


 ($) = payable function
 # = non-constant function
 
  + [Lib] Address 
    - [Int] isContract
    - [Int] sendValue #
    - [Int] functionCall #
    - [Int] functionCall #
    - [Int] functionCallWithValue #
    - [Int] functionCallWithValue #
    - [Int] functionStaticCall
    - [Int] functionStaticCall
    - [Int] functionDelegateCall #
    - [Int] functionDelegateCall #
    - [Int] verifyCallResult

 + [Lib] SafeERC20 
    - [Int] safeTransfer #
    - [Int] safeTransferFrom #
    - [Int] safeApprove #
    - [Int] safeIncreaseAllowance #
    - [Int] safeDecreaseAllowance #
    - [Prv] _callOptionalReturn #

 + [Int] IAccessControlUpgradeable 
    - [Ext] hasRole
    - [Ext] getRoleAdmin
    - [Ext] grantRole #
    - [Ext] revokeRole #
    - [Ext] renounceRole #

 +  Initializable 

 +  ContextUpgradeable (Initializable)
    - [Int] __Context_init #
       - modifiers: initializer
    - [Int] __Context_init_unchained #
       - modifiers: initializer
    - [Int] _msgSender
    - [Int] _msgData

 + [Lib] StringsUpgradeable 
    - [Int] toString
    - [Int] toHexString
    - [Int] toHexString

 + [Int] IERC165Upgradeable 
    - [Ext] supportsInterface

 +  ERC165Upgradeable (Initializable, IERC165Upgradeable)
    - [Int] __ERC165_init #
       - modifiers: initializer
    - [Int] __ERC165_init_unchained #
       - modifiers: initializer
    - [Pub] supportsInterface

 +  AccessControlUpgradeable (Initializable, ContextUpgradeable, IAccessControlUpgradeable, ERC165Upgradeable)
    - [Int] __AccessControl_init #
       - modifiers: initializer
    - [Int] __AccessControl_init_unchained #
       - modifiers: initializer
    - [Pub] supportsInterface
    - [Pub] hasRole
    - [Int] _checkRole
    - [Pub] getRoleAdmin
    - [Pub] grantRole #
       - modifiers: onlyRole
    - [Pub] revokeRole #
       - modifiers: onlyRole
    - [Pub] renounceRole #
    - [Int] _setupRole #
    - [Int] _setRoleAdmin #
    - [Prv] _grantRole #
    - [Prv] _revokeRole #

 + [Int] IPancakeRouter02 
    - [Ext] factory
    - [Ext] WETH
    - [Ext] addLiquidity #
    - [Ext] addLiquidityETH ($)
    - [Ext] removeLiquidity #
    - [Ext] removeLiquidityETH #
    - [Ext] removeLiquidityWithPermit #
    - [Ext] removeLiquidityETHWithPermit #
    - [Ext] swapExactTokensForTokensSupportingFeeOnTransferTokens #
    - [Ext] swapExactTokensForTokens #
    - [Ext] swapTokensForExactTokens #
    - [Ext] swapExactETHForTokens ($)
    - [Ext] swapTokensForExactETH #
    - [Ext] swapExactTokensForETH #
    - [Ext] swapETHForExactTokens ($)
    - [Ext] quote
    - [Ext] getAmountOut
    - [Ext] getAmountIn
    - [Ext] getAmountsOut
    - [Ext] getAmountsIn

 + [Int] IERC20 
    - [Ext] totalSupply
    - [Ext] balanceOf
    - [Ext] transfer #
    - [Ext] allowance
    - [Ext] approve #
    - [Ext] transferFrom #

 + [Int] IStrategy 
    - [Ext] deposit #
    - [Ext] withdraw #
    - [Ext] getUserDepositedUSD
    - [Ext] transferOut #
    - [Ext] transferIn #
    - [Ext] earn #
    - [Ext] lpToken
    - [Ext] totalDeposited
    - [Ext] currentReward

 +  YSLOpt (AccessControlUpgradeable, IStrategy)
    - [Int] initialize #
       - modifiers: initializer
    - [Ext] setCoefficients #
       - modifiers: onlyRole
    - [Ext] setOptimizationTax #
       - modifiers: onlyRole
    - [Ext] setControllerFee #
       - modifiers: onlyRole
    - [Pub] deposit #
       - modifiers: onlyRole
    - [Ext] withdraw #
       - modifiers: onlyRole
    - [Int] swapBUSDForETH #
    - [Ext] earn #
    - [Ext] compound #
    - [Int] withdrawAcc #
    - [Int] collectControllerFee #
    - [Int] collectOptimisationTax #
    - [Int] addLiquidity #
    - [Int] getPrice

 + [Int] IPancakeMaster 
    - [Ext] deposit #
    - [Ext] withdraw #
    - [Ext] userInfo
    - [Ext] enterStaking #
    - [Ext] leaveStaking #
    - [Ext] pendingCake

 + [Int] IStrategySwap 
    - [Ext] sYSL
    - [Ext] YSL
    - [Ext] reversedPath
    - [Ext] lock #
    - [Ext] unlock #
    - [Ext] migrate #
    - [Ext] swapLPToBusd #
    - [Ext] swapBusdToLP #
    - [Ext] swapLPToBusd #
    - [Ext] swapBusdToLP #
    - [Ext] getBusdAmount
    - [Ext] getBusdAmount

 + [Int] IsYSL (IERC20)
    - [Ext] YSLSupply #
    - [Ext] isMinted #
    - [Ext] mintPurchased #
    - [Ext] mintAirdropped #
    - [Ext] mintFor #
    - [Ext] burnFrom #
    - [Ext] mint #

 + [Int] IReferral 
    - [Ext] hasReferral
    - [Ext] referrals
    - [Ext] proccessReferral #
    - [Ext] proccessReferral #

 + [Int] ILock 
    - [Ext] setLock #
    - [Ext] releaseClient #
    - [Ext] lock #

 +  YSLOptApe (YSLOpt)
    - [Pub] initialize #
       - modifiers: initializer
    - [Ext] setLockContract #
       - modifiers: onlyRole
    - [Ext] setMaturityEarn #
       - modifiers: onlyRole
    - [Ext] compound #
    - [Ext] earn #
       - modifiers: onlyRole
    - [Pub] transferOut #
       - modifiers: onlyRole
    - [Pub] transferIn #
       - modifiers: onlyRole
    - [Pub] deposit #
       - modifiers: onlyRole
    - [Ext] withdraw #
       - modifiers: onlyRole
    - [Pub] getUserDepositedUSD
    - [Pub] getTotalDepositedUSD
    - [Int] mintBonus #
    - [Int] sendReferralBonus #
    - [Int] withdrawAcc #
    - [Pub] restorePool #
       - modifiers: onlyRole
    - [Pub] currentRewardUSD
    - [Pub] currentReward

 
 

YSLOptSingleApe Contract

Smart Contract Graph

Contract Inheritance


 ($) = payable function
 # = non-constant function
 
  + [Lib] Address 
    - [Int] isContract
    - [Int] sendValue #
    - [Int] functionCall #
    - [Int] functionCall #
    - [Int] functionCallWithValue #
    - [Int] functionCallWithValue #
    - [Int] functionStaticCall
    - [Int] functionStaticCall
    - [Int] functionDelegateCall #
    - [Int] functionDelegateCall #
    - [Int] verifyCallResult

 + [Lib] SafeERC20 
    - [Int] safeTransfer #
    - [Int] safeTransferFrom #
    - [Int] safeApprove #
    - [Int] safeIncreaseAllowance #
    - [Int] safeDecreaseAllowance #
    - [Prv] _callOptionalReturn #

 + [Int] IAccessControlUpgradeable 
    - [Ext] hasRole
    - [Ext] getRoleAdmin
    - [Ext] grantRole #
    - [Ext] revokeRole #
    - [Ext] renounceRole #

 +  Initializable 

 +  ContextUpgradeable (Initializable)
    - [Int] __Context_init #
       - modifiers: initializer
    - [Int] __Context_init_unchained #
       - modifiers: initializer
    - [Int] _msgSender
    - [Int] _msgData

 + [Lib] StringsUpgradeable 
    - [Int] toString
    - [Int] toHexString
    - [Int] toHexString

 + [Int] IERC165Upgradeable 
    - [Ext] supportsInterface

 +  ERC165Upgradeable (Initializable, IERC165Upgradeable)
    - [Int] __ERC165_init #
       - modifiers: initializer
    - [Int] __ERC165_init_unchained #
       - modifiers: initializer
    - [Pub] supportsInterface

 +  AccessControlUpgradeable (Initializable, ContextUpgradeable, IAccessControlUpgradeable, ERC165Upgradeable)
    - [Int] __AccessControl_init #
       - modifiers: initializer
    - [Int] __AccessControl_init_unchained #
       - modifiers: initializer
    - [Pub] supportsInterface
    - [Pub] hasRole
    - [Int] _checkRole
    - [Pub] getRoleAdmin
    - [Pub] grantRole #
       - modifiers: onlyRole
    - [Pub] revokeRole #
       - modifiers: onlyRole
    - [Pub] renounceRole #
    - [Int] _setupRole #
    - [Int] _setRoleAdmin #
    - [Prv] _grantRole #
    - [Prv] _revokeRole #

 + [Int] IPancakeRouter02 
    - [Ext] factory
    - [Ext] WETH
    - [Ext] addLiquidity #
    - [Ext] addLiquidityETH ($)
    - [Ext] removeLiquidity #
    - [Ext] removeLiquidityETH #
    - [Ext] removeLiquidityWithPermit #
    - [Ext] removeLiquidityETHWithPermit #
    - [Ext] swapExactTokensForTokensSupportingFeeOnTransferTokens #
    - [Ext] swapExactTokensForTokens #
    - [Ext] swapTokensForExactTokens #
    - [Ext] swapExactETHForTokens ($)
    - [Ext] swapTokensForExactETH #
    - [Ext] swapExactTokensForETH #
    - [Ext] swapETHForExactTokens ($)
    - [Ext] quote
    - [Ext] getAmountOut
    - [Ext] getAmountIn
    - [Ext] getAmountsOut
    - [Ext] getAmountsIn

 + [Int] IERC20 
    - [Ext] totalSupply
    - [Ext] balanceOf
    - [Ext] transfer #
    - [Ext] allowance
    - [Ext] approve #
    - [Ext] transferFrom #

 + [Int] IStrategy 
    - [Ext] deposit #
    - [Ext] withdraw #
    - [Ext] getUserDepositedUSD
    - [Ext] transferOut #
    - [Ext] transferIn #
    - [Ext] earn #
    - [Ext] lpToken
    - [Ext] totalDeposited
    - [Ext] currentReward

 +  YSLOpt (AccessControlUpgradeable, IStrategy)
    - [Int] initialize #
       - modifiers: initializer
    - [Ext] setCoefficients #
       - modifiers: onlyRole
    - [Ext] setOptimizationTax #
       - modifiers: onlyRole
    - [Ext] setControllerFee #
       - modifiers: onlyRole
    - [Pub] deposit #
       - modifiers: onlyRole
    - [Ext] withdraw #
       - modifiers: onlyRole
    - [Int] swapBUSDForETH #
    - [Ext] earn #
    - [Ext] compound #
    - [Int] withdrawAcc #
    - [Int] collectControllerFee #
    - [Int] collectOptimisationTax #
    - [Int] addLiquidity #
    - [Int] getPrice

 + [Int] IPancakeMaster 
    - [Ext] deposit #
    - [Ext] withdraw #
    - [Ext] userInfo
    - [Ext] enterStaking #
    - [Ext] leaveStaking #
    - [Ext] pendingCake

 + [Int] IStrategySwap 
    - [Ext] sYSL
    - [Ext] YSL
    - [Ext] reversedPath
    - [Ext] lock #
    - [Ext] unlock #
    - [Ext] migrate #
    - [Ext] swapLPToBusd #
    - [Ext] swapBusdToLP #
    - [Ext] swapLPToBusd #
    - [Ext] swapBusdToLP #
    - [Ext] getBusdAmount
    - [Ext] getBusdAmount

 + [Int] IsYSL (IERC20)
    - [Ext] YSLSupply #
    - [Ext] isMinted #
    - [Ext] mintPurchased #
    - [Ext] mintAirdropped #
    - [Ext] mintFor #
    - [Ext] burnFrom #
    - [Ext] mint #

 + [Int] IReferral 
    - [Ext] hasReferral
    - [Ext] referrals
    - [Ext] proccessReferral #
    - [Ext] proccessReferral #

 + [Int] ILock 
    - [Ext] setLock #
    - [Ext] releaseClient #
    - [Ext] lock #

 +  YSLOptSingleApe (YSLOpt)
    - [Pub] initialize #
       - modifiers: initializer
    - [Ext] setLockContract #
       - modifiers: onlyRole
    - [Ext] setMaturityEarn #
       - modifiers: onlyRole
    - [Ext] compound #
    - [Ext] earn #
       - modifiers: onlyRole
    - [Pub] transferOut #
       - modifiers: onlyRole
    - [Pub] transferIn #
       - modifiers: onlyRole
    - [Pub] deposit #
       - modifiers: onlyRole
    - [Ext] withdraw #
       - modifiers: onlyRole
    - [Pub] getUserDepositedUSD
    - [Pub] getTotalDepositedUSD
    - [Int] mintBonus #
    - [Int] sendReferralBonus #
    - [Int] withdrawAcc #
    - [Pub] restorePool #
       - modifiers: onlyRole
    - [Pub] currentRewardUSD
    - [Pub] currentReward
 
 

YSLxBUSDShare Contract

Smart Contract Graph

Contract Inheritance


 ($) = payable function
 # = non-constant function
 
  + [Lib] Address 
    - [Int] isContract
    - [Int] sendValue #
    - [Int] functionCall #
    - [Int] functionCall #
    - [Int] functionCallWithValue #
    - [Int] functionCallWithValue #
    - [Int] functionStaticCall
    - [Int] functionStaticCall
    - [Int] functionDelegateCall #
    - [Int] functionDelegateCall #
    - [Int] verifyCallResult

 + [Lib] SafeERC20 
    - [Int] safeTransfer #
    - [Int] safeTransferFrom #
    - [Int] safeApprove #
    - [Int] safeIncreaseAllowance #
    - [Int] safeDecreaseAllowance #
    - [Prv] _callOptionalReturn #

 + [Int] IAccessControlUpgradeable 
    - [Ext] hasRole
    - [Ext] getRoleAdmin
    - [Ext] grantRole #
    - [Ext] revokeRole #
    - [Ext] renounceRole #

 +  Initializable 

 +  ContextUpgradeable (Initializable)
    - [Int] __Context_init #
       - modifiers: initializer
    - [Int] __Context_init_unchained #
       - modifiers: initializer
    - [Int] _msgSender
    - [Int] _msgData

 + [Lib] StringsUpgradeable 
    - [Int] toString
    - [Int] toHexString
    - [Int] toHexString

 + [Int] IERC165Upgradeable 
    - [Ext] supportsInterface

 +  ERC165Upgradeable (Initializable, IERC165Upgradeable)
    - [Int] __ERC165_init #
       - modifiers: initializer
    - [Int] __ERC165_init_unchained #
       - modifiers: initializer
    - [Pub] supportsInterface

 +  AccessControlUpgradeable (Initializable, ContextUpgradeable, IAccessControlUpgradeable, ERC165Upgradeable)
    - [Int] __AccessControl_init #
       - modifiers: initializer
    - [Int] __AccessControl_init_unchained #
       - modifiers: initializer
    - [Pub] supportsInterface
    - [Pub] hasRole
    - [Int] _checkRole
    - [Pub] getRoleAdmin
    - [Pub] grantRole #
       - modifiers: onlyRole
    - [Pub] revokeRole #
       - modifiers: onlyRole
    - [Pub] renounceRole #
    - [Int] _setupRole #
    - [Int] _setRoleAdmin #
    - [Prv] _grantRole #
    - [Prv] _revokeRole #

 + [Int] IPancakeRouter02 
    - [Ext] factory
    - [Ext] WETH
    - [Ext] addLiquidity #
    - [Ext] addLiquidityETH ($)
    - [Ext] removeLiquidity #
    - [Ext] removeLiquidityETH #
    - [Ext] removeLiquidityWithPermit #
    - [Ext] removeLiquidityETHWithPermit #
    - [Ext] swapExactTokensForTokensSupportingFeeOnTransferTokens #
    - [Ext] swapExactTokensForTokens #
    - [Ext] swapTokensForExactTokens #
    - [Ext] swapExactETHForTokens ($)
    - [Ext] swapTokensForExactETH #
    - [Ext] swapExactTokensForETH #
    - [Ext] swapETHForExactTokens ($)
    - [Ext] quote
    - [Ext] getAmountOut
    - [Ext] getAmountIn
    - [Ext] getAmountsOut
    - [Ext] getAmountsIn

 + [Int] IERC20 
    - [Ext] totalSupply
    - [Ext] balanceOf
    - [Ext] transfer #
    - [Ext] allowance
    - [Ext] approve #
    - [Ext] transferFrom #

 + [Int] IStrategy 
    - [Ext] deposit #
    - [Ext] withdraw #
    - [Ext] getUserDepositedUSD
    - [Ext] transferOut #
    - [Ext] transferIn #
    - [Ext] earn #
    - [Ext] lpToken
    - [Ext] totalDeposited
    - [Ext] currentReward

 +  YSLOpt (AccessControlUpgradeable, IStrategy)
    - [Int] initialize #
       - modifiers: initializer
    - [Ext] setCoefficients #
       - modifiers: onlyRole
    - [Ext] setOptimizationTax #
       - modifiers: onlyRole
    - [Ext] setControllerFee #
       - modifiers: onlyRole
    - [Pub] deposit #
       - modifiers: onlyRole
    - [Ext] withdraw #
       - modifiers: onlyRole
    - [Int] swapBUSDForETH #
    - [Ext] earn #
    - [Ext] compound #
    - [Int] withdrawAcc #
    - [Int] collectControllerFee #
    - [Int] collectOptimisationTax #
    - [Int] addLiquidity #
    - [Int] getPrice

 + [Int] IPancakeMaster 
    - [Ext] deposit #
    - [Ext] withdraw #
    - [Ext] userInfo
    - [Ext] enterStaking #
    - [Ext] leaveStaking #
    - [Ext] pendingCake

 + [Int] IStrategySwap 
    - [Ext] sYSL
    - [Ext] YSL
    - [Ext] reversedPath
    - [Ext] lock #
    - [Ext] unlock #
    - [Ext] migrate #
    - [Ext] swapLPToBusd #
    - [Ext] swapBusdToLP #
    - [Ext] swapLPToBusd #
    - [Ext] swapBusdToLP #
    - [Ext] getBusdAmount
    - [Ext] getBusdAmount

 + [Int] IsYSL (IERC20)
    - [Ext] YSLSupply #
    - [Ext] isMinted #
    - [Ext] mintPurchased #
    - [Ext] mintAirdropped #
    - [Ext] mintFor #
    - [Ext] burnFrom #
    - [Ext] mint #

 + [Int] IReferral 
    - [Ext] hasReferral
    - [Ext] referrals
    - [Ext] proccessReferral #
    - [Ext] proccessReferral #

 +  YSLxBUSDShare (YSLOpt)
    - [Pub] initialize #
       - modifiers: initializer
    - [Pub] transferOut #
       - modifiers: onlyRole
    - [Pub] transferIn #
       - modifiers: onlyRole
    - [Ext] earn #
    - [Ext] compound #
    - [Pub] getUserDepositedUSD
    - [Pub] getTotalDepositedUSD
    - [Int] withdrawAcc #
    - [Ext] currentReward


 

sYSLxBUSD Contract

Smart Contract Graph

Contract Inheritance


 ($) = payable function
 # = non-constant function
 
  + [Lib] Address 
    - [Int] isContract
    - [Int] sendValue #
    - [Int] functionCall #
    - [Int] functionCall #
    - [Int] functionCallWithValue #
    - [Int] functionCallWithValue #
    - [Int] functionStaticCall
    - [Int] functionStaticCall
    - [Int] functionDelegateCall #
    - [Int] functionDelegateCall #
    - [Int] verifyCallResult

 + [Lib] SafeERC20 
    - [Int] safeTransfer #
    - [Int] safeTransferFrom #
    - [Int] safeApprove #
    - [Int] safeIncreaseAllowance #
    - [Int] safeDecreaseAllowance #
    - [Prv] _callOptionalReturn #

 + [Int] IAccessControlUpgradeable 
    - [Ext] hasRole
    - [Ext] getRoleAdmin
    - [Ext] grantRole #
    - [Ext] revokeRole #
    - [Ext] renounceRole #

 +  Initializable 

 +  ContextUpgradeable (Initializable)
    - [Int] __Context_init #
       - modifiers: initializer
    - [Int] __Context_init_unchained #
       - modifiers: initializer
    - [Int] _msgSender
    - [Int] _msgData

 + [Lib] StringsUpgradeable 
    - [Int] toString
    - [Int] toHexString
    - [Int] toHexString

 + [Int] IERC165Upgradeable 
    - [Ext] supportsInterface

 +  ERC165Upgradeable (Initializable, IERC165Upgradeable)
    - [Int] __ERC165_init #
       - modifiers: initializer
    - [Int] __ERC165_init_unchained #
       - modifiers: initializer
    - [Pub] supportsInterface

 +  AccessControlUpgradeable (Initializable, ContextUpgradeable, IAccessControlUpgradeable, ERC165Upgradeable)
    - [Int] __AccessControl_init #
       - modifiers: initializer
    - [Int] __AccessControl_init_unchained #
       - modifiers: initializer
    - [Pub] supportsInterface
    - [Pub] hasRole
    - [Int] _checkRole
    - [Pub] getRoleAdmin
    - [Pub] grantRole #
       - modifiers: onlyRole
    - [Pub] revokeRole #
       - modifiers: onlyRole
    - [Pub] renounceRole #
    - [Int] _setupRole #
    - [Int] _setRoleAdmin #
    - [Prv] _grantRole #
    - [Prv] _revokeRole #

 + [Int] IPancakeRouter02 
    - [Ext] factory
    - [Ext] WETH
    - [Ext] addLiquidity #
    - [Ext] addLiquidityETH ($)
    - [Ext] removeLiquidity #
    - [Ext] removeLiquidityETH #
    - [Ext] removeLiquidityWithPermit #
    - [Ext] removeLiquidityETHWithPermit #
    - [Ext] swapExactTokensForTokensSupportingFeeOnTransferTokens #
    - [Ext] swapExactTokensForTokens #
    - [Ext] swapTokensForExactTokens #
    - [Ext] swapExactETHForTokens ($)
    - [Ext] swapTokensForExactETH #
    - [Ext] swapExactTokensForETH #
    - [Ext] swapETHForExactTokens ($)
    - [Ext] quote
    - [Ext] getAmountOut
    - [Ext] getAmountIn
    - [Ext] getAmountsOut
    - [Ext] getAmountsIn

 + [Int] IERC20 
    - [Ext] totalSupply
    - [Ext] balanceOf
    - [Ext] transfer #
    - [Ext] allowance
    - [Ext] approve #
    - [Ext] transferFrom #

 + [Int] IStrategy 
    - [Ext] deposit #
    - [Ext] withdraw #
    - [Ext] getUserDepositedUSD
    - [Ext] transferOut #
    - [Ext] transferIn #
    - [Ext] earn #
    - [Ext] lpToken
    - [Ext] totalDeposited
    - [Ext] currentReward

 +  YSLOpt (AccessControlUpgradeable, IStrategy)
    - [Int] initialize #
       - modifiers: initializer
    - [Ext] setCoefficients #
       - modifiers: onlyRole
    - [Ext] setOptimizationTax #
       - modifiers: onlyRole
    - [Ext] setControllerFee #
       - modifiers: onlyRole
    - [Pub] deposit #
       - modifiers: onlyRole
    - [Ext] withdraw #
       - modifiers: onlyRole
    - [Int] swapBUSDForETH #
    - [Ext] earn #
    - [Ext] compound #
    - [Int] withdrawAcc #
    - [Int] collectControllerFee #
    - [Int] collectOptimisationTax #
    - [Int] addLiquidity #
    - [Int] getPrice

 + [Int] IPancakeMaster 
    - [Ext] deposit #
    - [Ext] withdraw #
    - [Ext] userInfo
    - [Ext] enterStaking #
    - [Ext] leaveStaking #
    - [Ext] pendingCake

 + [Int] IStrategySwap 
    - [Ext] sYSL
    - [Ext] YSL
    - [Ext] reversedPath
    - [Ext] lock #
    - [Ext] unlock #
    - [Ext] migrate #
    - [Ext] swapLPToBusd #
    - [Ext] swapBusdToLP #
    - [Ext] swapLPToBusd #
    - [Ext] swapBusdToLP #
    - [Ext] getBusdAmount
    - [Ext] getBusdAmount

 + [Int] IsYSL (IERC20)
    - [Ext] YSLSupply #
    - [Ext] isMinted #
    - [Ext] mintPurchased #
    - [Ext] mintAirdropped #
    - [Ext] mintFor #
    - [Ext] burnFrom #
    - [Ext] mint #

 + [Int] IReferral 
    - [Ext] hasReferral
    - [Ext] referrals
    - [Ext] proccessReferral #
    - [Ext] proccessReferral #

 + [Int] IxYSLAdapter 
    - [Ext] collectxYSLFee #
    - [Ext] transferSurcharge #

 +  sYSLxBUSDShare (YSLOpt)
    - [Pub] initialize #
       - modifiers: initializer
    - [Ext] setXYslAdapter #
       - modifiers: onlyRole
    - [Pub] transferOut #
       - modifiers: onlyRole
    - [Pub] transferIn #
       - modifiers: onlyRole
    - [Ext] earn #
    - [Ext] compound #
    - [Pub] getUserDepositedUSD
    - [Pub] getTotalDepositedUSD
    - [Int] withdrawAcc #
    - [Ext] currentReward

 

sYSLShare Contract

Smart Contract Graph

Contract Inheritance


 ($) = payable function
 # = non-constant function
 
  + [Lib] Address 
    - [Int] isContract
    - [Int] sendValue #
    - [Int] functionCall #
    - [Int] functionCall #
    - [Int] functionCallWithValue #
    - [Int] functionCallWithValue #
    - [Int] functionStaticCall
    - [Int] functionStaticCall
    - [Int] functionDelegateCall #
    - [Int] functionDelegateCall #
    - [Int] verifyCallResult

 + [Lib] SafeERC20 
    - [Int] safeTransfer #
    - [Int] safeTransferFrom #
    - [Int] safeApprove #
    - [Int] safeIncreaseAllowance #
    - [Int] safeDecreaseAllowance #
    - [Prv] _callOptionalReturn #

 + [Int] IAccessControlUpgradeable 
    - [Ext] hasRole
    - [Ext] getRoleAdmin
    - [Ext] grantRole #
    - [Ext] revokeRole #
    - [Ext] renounceRole #

 +  Initializable 

 +  ContextUpgradeable (Initializable)
    - [Int] __Context_init #
       - modifiers: initializer
    - [Int] __Context_init_unchained #
       - modifiers: initializer
    - [Int] _msgSender
    - [Int] _msgData

 + [Lib] StringsUpgradeable 
    - [Int] toString
    - [Int] toHexString
    - [Int] toHexString

 + [Int] IERC165Upgradeable 
    - [Ext] supportsInterface

 +  ERC165Upgradeable (Initializable, IERC165Upgradeable)
    - [Int] __ERC165_init #
       - modifiers: initializer
    - [Int] __ERC165_init_unchained #
       - modifiers: initializer
    - [Pub] supportsInterface

 +  AccessControlUpgradeable (Initializable, ContextUpgradeable, IAccessControlUpgradeable, ERC165Upgradeable)
    - [Int] __AccessControl_init #
       - modifiers: initializer
    - [Int] __AccessControl_init_unchained #
       - modifiers: initializer
    - [Pub] supportsInterface
    - [Pub] hasRole
    - [Int] _checkRole
    - [Pub] getRoleAdmin
    - [Pub] grantRole #
       - modifiers: onlyRole
    - [Pub] revokeRole #
       - modifiers: onlyRole
    - [Pub] renounceRole #
    - [Int] _setupRole #
    - [Int] _setRoleAdmin #
    - [Prv] _grantRole #
    - [Prv] _revokeRole #

 + [Int] IPancakeRouter02 
    - [Ext] factory
    - [Ext] WETH
    - [Ext] addLiquidity #
    - [Ext] addLiquidityETH ($)
    - [Ext] removeLiquidity #
    - [Ext] removeLiquidityETH #
    - [Ext] removeLiquidityWithPermit #
    - [Ext] removeLiquidityETHWithPermit #
    - [Ext] swapExactTokensForTokensSupportingFeeOnTransferTokens #
    - [Ext] swapExactTokensForTokens #
    - [Ext] swapTokensForExactTokens #
    - [Ext] swapExactETHForTokens ($)
    - [Ext] swapTokensForExactETH #
    - [Ext] swapExactTokensForETH #
    - [Ext] swapETHForExactTokens ($)
    - [Ext] quote
    - [Ext] getAmountOut
    - [Ext] getAmountIn
    - [Ext] getAmountsOut
    - [Ext] getAmountsIn

 + [Int] IERC20 
    - [Ext] totalSupply
    - [Ext] balanceOf
    - [Ext] transfer #
    - [Ext] allowance
    - [Ext] approve #
    - [Ext] transferFrom #

 + [Int] IStrategy 
    - [Ext] deposit #
    - [Ext] withdraw #
    - [Ext] getUserDepositedUSD
    - [Ext] transferOut #
    - [Ext] transferIn #
    - [Ext] earn #
    - [Ext] lpToken
    - [Ext] totalDeposited
    - [Ext] currentReward

 +  YSLOpt (AccessControlUpgradeable, IStrategy)
    - [Int] initialize #
       - modifiers: initializer
    - [Ext] setCoefficients #
       - modifiers: onlyRole
    - [Ext] setOptimizationTax #
       - modifiers: onlyRole
    - [Ext] setControllerFee #
       - modifiers: onlyRole
    - [Pub] deposit #
       - modifiers: onlyRole
    - [Ext] withdraw #
       - modifiers: onlyRole
    - [Int] swapBUSDForETH #
    - [Ext] earn #
    - [Ext] compound #
    - [Int] withdrawAcc #
    - [Int] collectControllerFee #
    - [Int] collectOptimisationTax #
    - [Int] addLiquidity #
    - [Int] getPrice

 + [Int] IPancakeMaster 
    - [Ext] deposit #
    - [Ext] withdraw #
    - [Ext] userInfo
    - [Ext] enterStaking #
    - [Ext] leaveStaking #
    - [Ext] pendingCake

 + [Int] IStrategySwap 
    - [Ext] sYSL
    - [Ext] YSL
    - [Ext] reversedPath
    - [Ext] lock #
    - [Ext] unlock #
    - [Ext] migrate #
    - [Ext] swapLPToBusd #
    - [Ext] swapBusdToLP #
    - [Ext] swapLPToBusd #
    - [Ext] swapBusdToLP #
    - [Ext] getBusdAmount
    - [Ext] getBusdAmount

 + [Int] IsYSL (IERC20)
    - [Ext] YSLSupply #
    - [Ext] isMinted #
    - [Ext] mintPurchased #
    - [Ext] mintAirdropped #
    - [Ext] mintFor #
    - [Ext] burnFrom #
    - [Ext] mint #

 + [Int] IReferral 
    - [Ext] hasReferral
    - [Ext] referrals
    - [Ext] proccessReferral #
    - [Ext] proccessReferral #

 +  sYSLShare (YSLOpt)
    - [Pub] initialize #
       - modifiers: initializer
    - [Pub] transferOut #
       - modifiers: onlyRole
    - [Pub] transferIn #
       - modifiers: onlyRole
    - [Ext] earn #
    - [Ext] compound #
    - [Pub] getUserDepositedUSD
    - [Pub] getTotalDepositedUSD
    - [Int] withdrawAcc #
    - [Ext] currentReward


 

xYSLAdapter Contract

Smart Contract Graph

Contract Inheritance


 ($) = payable function
 # = non-constant function
 
   + [Int] IERC20 
    - [Ext] totalSupply
    - [Ext] balanceOf
    - [Ext] transfer #
    - [Ext] allowance
    - [Ext] approve #
    - [Ext] transferFrom #

 + [Lib] Address 
    - [Int] isContract
    - [Int] sendValue #
    - [Int] functionCall #
    - [Int] functionCall #
    - [Int] functionCallWithValue #
    - [Int] functionCallWithValue #
    - [Int] functionStaticCall
    - [Int] functionStaticCall
    - [Int] functionDelegateCall #
    - [Int] functionDelegateCall #
    - [Int] verifyCallResult

 + [Lib] SafeERC20 
    - [Int] safeTransfer #
    - [Int] safeTransferFrom #
    - [Int] safeApprove #
    - [Int] safeIncreaseAllowance #
    - [Int] safeDecreaseAllowance #
    - [Prv] _callOptionalReturn #

 + [Int] IAccessControlUpgradeable 
    - [Ext] hasRole
    - [Ext] getRoleAdmin
    - [Ext] grantRole #
    - [Ext] revokeRole #
    - [Ext] renounceRole #

 +  Initializable 

 +  ContextUpgradeable (Initializable)
    - [Int] __Context_init #
       - modifiers: initializer
    - [Int] __Context_init_unchained #
       - modifiers: initializer
    - [Int] _msgSender
    - [Int] _msgData

 + [Lib] StringsUpgradeable 
    - [Int] toString
    - [Int] toHexString
    - [Int] toHexString

 + [Int] IERC165Upgradeable 
    - [Ext] supportsInterface

 +  ERC165Upgradeable (Initializable, IERC165Upgradeable)
    - [Int] __ERC165_init #
       - modifiers: initializer
    - [Int] __ERC165_init_unchained #
       - modifiers: initializer
    - [Pub] supportsInterface

 +  AccessControlUpgradeable (Initializable, ContextUpgradeable, IAccessControlUpgradeable, ERC165Upgradeable)
    - [Int] __AccessControl_init #
       - modifiers: initializer
    - [Int] __AccessControl_init_unchained #
       - modifiers: initializer
    - [Pub] supportsInterface
    - [Pub] hasRole
    - [Int] _checkRole
    - [Pub] getRoleAdmin
    - [Pub] grantRole #
       - modifiers: onlyRole
    - [Pub] revokeRole #
       - modifiers: onlyRole
    - [Pub] renounceRole #
    - [Int] _setupRole #
    - [Int] _setRoleAdmin #
    - [Prv] _grantRole #
    - [Prv] _revokeRole #

 + [Int] IxYSL 
    - [Ext] burnFrom #
    - [Ext] burn #
    - [Ext] mintFor #
    - [Ext] mint #
    - [Ext] getAirdropped #
    - [Ext] addToWhitelist #
    - [Ext] removeFromWhitelist #

 + [Int] IPancakeRouter02 
    - [Ext] factory
    - [Ext] WETH
    - [Ext] addLiquidity #
    - [Ext] addLiquidityETH ($)
    - [Ext] removeLiquidity #
    - [Ext] removeLiquidityETH #
    - [Ext] removeLiquidityWithPermit #
    - [Ext] removeLiquidityETHWithPermit #
    - [Ext] swapExactTokensForTokens #
    - [Ext] swapExactTokensForTokensSupportingFeeOnTransferTokens #
    - [Ext] swapTokensForExactTokens #
    - [Ext] swapExactETHForTokens ($)
    - [Ext] swapTokensForExactETH #
    - [Ext] swapExactTokensForETH #
    - [Ext] swapETHForExactTokens ($)
    - [Ext] quote
    - [Ext] getAmountOut
    - [Ext] getAmountIn
    - [Ext] getAmountsOut
    - [Ext] getAmountsIn

 +  xYSLAdapter (AccessControlUpgradeable)
    - [Pub] initialize #
       - modifiers: initializer
    - [Ext] transferSurcharge #
       - modifiers: stratOnly
    - [Ext] processCollectedFee #
    - [Ext] collectxYSLFee #
       - modifiers: stratOnly
    - [Pub] reversedPath


 

xYSLAirdrop Contract

Smart Contract Graph

Contract Inheritance


 ($) = payable function
 # = non-constant function
 
   + [Int] IERC20 
    - [Ext] totalSupply
    - [Ext] balanceOf
    - [Ext] transfer #
    - [Ext] allowance
    - [Ext] approve #
    - [Ext] transferFrom #

 + [Lib] Address 
    - [Int] isContract
    - [Int] sendValue #
    - [Int] functionCall #
    - [Int] functionCall #
    - [Int] functionCallWithValue #
    - [Int] functionCallWithValue #
    - [Int] functionStaticCall
    - [Int] functionStaticCall
    - [Int] functionDelegateCall #
    - [Int] functionDelegateCall #
    - [Int] verifyCallResult

 + [Lib] SafeERC20 
    - [Int] safeTransfer #
    - [Int] safeTransferFrom #
    - [Int] safeApprove #
    - [Int] safeIncreaseAllowance #
    - [Int] safeDecreaseAllowance #
    - [Prv] _callOptionalReturn #

 +  Initializable 

 +  ContextUpgradeable (Initializable)
    - [Int] __Context_init #
       - modifiers: initializer
    - [Int] __Context_init_unchained #
       - modifiers: initializer
    - [Int] _msgSender
    - [Int] _msgData

 +  OwnableUpgradeable (Initializable, ContextUpgradeable)
    - [Int] __Ownable_init #
       - modifiers: initializer
    - [Int] __Ownable_init_unchained #
       - modifiers: initializer
    - [Pub] owner
    - [Pub] renounceOwnership #
       - modifiers: onlyOwner
    - [Pub] transferOwnership #
       - modifiers: onlyOwner
    - [Prv] _setOwner #

 + [Int] IxYSL 
    - [Ext] burnFrom #
    - [Ext] burn #
    - [Ext] mintFor #
    - [Ext] mint #
    - [Ext] getAirdropped #
    - [Ext] addToWhitelist #
    - [Ext] removeFromWhitelist #

 +  xYSLAirdrop (OwnableUpgradeable)
    - [Pub] initialize #
       - modifiers: initializer
    - [Ext] addHolders #
       - modifiers: onlyOwner
    - [Ext] removeHolders #
       - modifiers: onlyOwner
    - [Ext] addSwap #
       - modifiers: onlyOwner
    - [Ext] removeSwap #
       - modifiers: onlyOwner
    - [Ext] addCommunity #
       - modifiers: onlyOwner
    - [Ext] removeCommunity #
       - modifiers: onlyOwner
    - [Ext] startAirdrop #
       - modifiers: onlyOwner
    - [Ext] burnResidual #
       - modifiers: started,onlyOwner
    - [Ext] addSwapOne #
       - modifiers: onlyOwner
    - [Ext] addCommunityOne #
       - modifiers: onlyOwner
    - [Ext] addAirdropOne #
       - modifiers: onlyOwner
    - [Ext] claim #
       - modifiers: started,isOpen
    - [Ext] claimAirdrop #
       - modifiers: started,isOpen
    - [Ext] claimOnBehalf #
       - modifiers: started,isOpen
    - [Ext] claimAirdropOnBehalf #
       - modifiers: started,isOpen


 

YSLSwapAdapter Contract

Smart Contract Graph

Contract Inheritance


 ($) = payable function
 # = non-constant function
 
   +  Context 
    - [Int] _msgSender
    - [Int] _msgData

 +  Ownable (Context)
    - [Pub]  #
    - [Pub] owner
    - [Pub] renounceOwnership #
       - modifiers: onlyOwner
    - [Pub] transferOwnership #
       - modifiers: onlyOwner
    - [Prv] _setOwner #

 + [Int] IERC20 
    - [Ext] totalSupply
    - [Ext] balanceOf
    - [Ext] transfer #
    - [Ext] allowance
    - [Ext] approve #
    - [Ext] transferFrom #

 + [Lib] Address 
    - [Int] isContract
    - [Int] sendValue #
    - [Int] functionCall #
    - [Int] functionCall #
    - [Int] functionCallWithValue #
    - [Int] functionCallWithValue #
    - [Int] functionStaticCall
    - [Int] functionStaticCall
    - [Int] functionDelegateCall #
    - [Int] functionDelegateCall #
    - [Int] verifyCallResult

 + [Lib] SafeERC20 
    - [Int] safeTransfer #
    - [Int] safeTransferFrom #
    - [Int] safeApprove #
    - [Int] safeIncreaseAllowance #
    - [Int] safeDecreaseAllowance #
    - [Prv] _callOptionalReturn #

 + [Int] IPancakeRouter02 
    - [Ext] factory
    - [Ext] WETH
    - [Ext] addLiquidity #
    - [Ext] addLiquidityETH ($)
    - [Ext] removeLiquidity #
    - [Ext] removeLiquidityETH #
    - [Ext] removeLiquidityWithPermit #
    - [Ext] removeLiquidityETHWithPermit #
    - [Ext] swapExactTokensForTokens #
    - [Ext] swapExactTokensForTokensSupportingFeeOnTransferTokens #
    - [Ext] swapTokensForExactTokens #
    - [Ext] swapExactETHForTokens ($)
    - [Ext] swapTokensForExactETH #
    - [Ext] swapExactTokensForETH #
    - [Ext] swapETHForExactTokens ($)
    - [Ext] quote
    - [Ext] getAmountOut
    - [Ext] getAmountIn
    - [Ext] getAmountsOut
    - [Ext] getAmountsIn

 + [Int] IxYSLAdapter 
    - [Ext] collectxYSLFee #
    - [Ext] transferSurcharge #

 + [Int] IsYSL (IERC20)
    - [Ext] YSLSupply #
    - [Ext] isMinted #
    - [Ext] mintPurchased #
    - [Ext] mintAirdropped #
    - [Ext] mintFor #
    - [Ext] burnFrom #
    - [Ext] mint #
    - [Ext] burn #

 + [Int] IWBNB 
    - [Ext] withdraw #
    - [Ext] deposit ($)
    - [Ext] balanceOf #

 +  YSLSwapAdapter (Ownable)
    - [Pub]  #
    - [Ext] setPath #
       - modifiers: onlyOwner
    - [Ext] resetPath #
       - modifiers: onlyOwner
    - [Ext]  ($)
    - [Pub] swap #
    - [Prv] _sell #
    - [Prv] _buy #
    - [Pub] reversedPath
    - [Pub] getAmountOut
    - [Pub] pathExists