Skip to content

IFluidLiquidityLogic ​

Git Source

Inherits:IFluidLiquidityAdmin

Functions ​

operate ​

Single function which handles supply, withdraw, borrow & payback

*to trigger skipping in / out transfers (gas optimization):

  • callbackData_ MUST be encoded so that "from" address is the last 20 bytes in the last 32 bytes slot, also for native token operations where liquidityCallback is not triggered! from address must come at last position if there is more data. I.e. encode like: abi.encode(otherVar1, otherVar2, FROM_ADDRESS). Note dynamic types used with abi.encode come at the end so if dynamic types are needed, you must use abi.encodePacked to ensure the from address is at the end.
  • this "from" address must match withdrawTo_ or borrowTo_ and must be == msg.sender
  • callbackData_ must in addition to the from address as described above include bytes32 SKIP_TRANSFERS in the slot before (bytes 32 to 63)
  • msg.value must be 0.
  • Amounts must be either:
  • supply(+) == borrow(+), withdraw(-) == payback(-).
  • Liquidity must be on the winning side (deposit < borrow OR payback < withdraw).*
solidity
function operate(
    address token_,
    int256 supplyAmount_,
    int256 borrowAmount_,
    address withdrawTo_,
    address borrowTo_,
    bytes calldata callbackData_
) external payable returns (uint256 memVar3_, uint256 memVar4_);

Parameters

NameTypeDescription
token_addressaddress of token (0xEeeeeEeeeEeEeeEeEeEeeEEEeeeeEeeeeeeeEEeE for native)
supplyAmount_int256if +ve then supply, if -ve then withdraw, if 0 then nothing
borrowAmount_int256if +ve then borrow, if -ve then payback, if 0 then nothing
withdrawTo_addressif withdrawal then to which address
borrowTo_addressif borrow then to which address
callbackData_bytescallback data passed to liquidityCallback method of protocol

Returns

NameTypeDescription
memVar3_uint256updated supplyExchangePrice
memVar4_uint256updated borrowExchangePrice