Skip to content

Latest commit

 

History

History
295 lines (258 loc) · 10.1 KB

VaultStrategy.md

File metadata and controls

295 lines (258 loc) · 10.1 KB

VaultStrategy.sol

View Source: contracts/core/liquidity/VaultStrategy.sol

↗ Extends: VaultLiquidity ↘ Derived Contracts: WithFlashLoan

VaultStrategy

Contract Members

Constants & Variables

uint256 private _transferToStrategyEntry;
uint256 private _receiveFromStrategyEntry;

Functions

transferToStrategy

Transfers tokens to strategy contract(s). Uses the hooks preTransferToStrategy and postTransferToStrategy on the vault delegate contract.

function transferToStrategy(IERC20 token, bytes32 coverKey, bytes32 strategyName, uint256 amount) external nonpayable

Arguments

Name Type Description
token IERC20
coverKey bytes32
strategyName bytes32
amount uint256
Source Code
function transferToStrategy(
    IERC20 token,
    bytes32 coverKey,
    bytes32 strategyName,
    uint256 amount
  ) external override {
    require(address(token) != address(0), "Invalid token to transfer");
    require(coverKey == key, "Forbidden");
    require(strategyName > 0, "Invalid strategy");
    require(amount > 0, "Please specify amount");

    // Reentrancy check
    require(_transferToStrategyEntry == 0, "Access is denied");

    _transferToStrategyEntry = 1;

    /******************************************************************************************
      PRE
     ******************************************************************************************/
    delegate().preTransferToStrategy(msg.sender, token, coverKey, strategyName, amount);

    /******************************************************************************************
      BODY
     ******************************************************************************************/

    token.ensureTransfer(msg.sender, amount);

    /******************************************************************************************
      POST
     ******************************************************************************************/
    delegate().postTransferToStrategy(msg.sender, token, coverKey, strategyName, amount);

    emit StrategyTransfer(address(token), msg.sender, strategyName, amount);
    _transferToStrategyEntry = 0;
  }

receiveFromStrategy

Receives tokens from strategy contract(s). Uses the hooks preReceiveFromStrategy and postReceiveFromStrategy on the vault delegate contract.

function receiveFromStrategy(IERC20 token, bytes32 coverKey, bytes32 strategyName, uint256 amount) external nonpayable

Arguments

Name Type Description
token IERC20
coverKey bytes32
strategyName bytes32
amount uint256
Source Code
function receiveFromStrategy(
    IERC20 token,
    bytes32 coverKey,
    bytes32 strategyName,
    uint256 amount
  ) external override {
    require(coverKey == key, "Forbidden");
    require(_receiveFromStrategyEntry == 0, "Access is denied");
    require(amount > 0, "Please specify amount");

    _receiveFromStrategyEntry = 1;

    /******************************************************************************************
      PRE
     ******************************************************************************************/
    delegate().preReceiveFromStrategy(msg.sender, token, coverKey, strategyName, amount);

    /******************************************************************************************
      BODY
     ******************************************************************************************/

    token.ensureTransferFrom(msg.sender, address(this), amount);

    /******************************************************************************************
      POST
     ******************************************************************************************/
    (uint256 income, uint256 loss) = delegate().postReceiveFromStrategy(msg.sender, token, coverKey, strategyName, amount);

    emit StrategyReceipt(address(token), msg.sender, strategyName, amount, income, loss);
    _receiveFromStrategyEntry = 0;
  }

Contracts