๐Ÿ“–
Yupana Document Portal
  • Introduction
    • What is Yupana.Finance?
    • Participants
    • FAQ
  • Lending
    • Supplying assets
      • General
    • Borrowing assets
      • General
  • Liquidation
  • Liquidity Risk
    • Yupana Interest Rate
  • โš™๏ธDeveloper space
    • yToken contract methods
      • ๐Ÿ“„Storage overview
      • accrueInterest
      • priceCallback
      • updateInterest
      • ๐Ÿ”ตLending methods
        • borrow
        • enterMarket
        • exitMarket
        • liquidate
        • mint
        • redeem
        • repay
      • ๐Ÿ”ตFA2 Token entrypoints
        • balance_of
        • get_total_supply
        • transfer
        • update_operators
      • ๐Ÿ›‘Admin methods
        • ๐Ÿ“ฅSetup entrypionts
          • setTokenAction
          • setUseAction
        • ๐ŸคนManage entrypoints
          • addMarket
          • setAdmin
          • setBorrowPause
          • setGlobalFactors
          • setTokenFactors
          • updateMetadata
          • withdrawReserve
    • InterestRate contract
      • ๐Ÿ”ตOn-chain views
        • getBorrowRate
        • getSupplyRate
        • getUtilizationRate
      • ๐Ÿ›‘Admin methods
        • setCoefficients
        • updateAdmin
    • PriceFeed contract
      • getPrice
      • receivePrice
      • ๐Ÿ›‘Admin methods
        • setProxyAdmin
        • updateOracle
        • updatePair
        • updateYToken
  • Agreements
    • Terms of Service
    • Privacy Policy
    • Cookie Policy
Powered by GitBook
On this page
  • Types
  • Usage
  • Errors
  1. Developer space
  2. yToken contract methods
  3. Lending methods

liquidate

params of liquidateParams -> (list(op), storage upd)

PreviousexitMarketNextmint

Last updated 3 years ago

The liquidation process occurs when another user repays part of the outstanding amount of the borrower and thus purchases his collateral at a discount. To do this, user call liquidate method.

The yToken contract expects that underlying token infos of collateralToken and all borrowed by borrower before tokenIds are updated by calling and in the same block before this contract method

Types

type liquidateParams    is [@layout:comb] record [
  borrowToken             : nat;
  collateralToken         : nat;
  borrower                : address;
  amount                  : nat;
]
Parameter
Type
Description

borrowToken

nat

yToken identifier of borrow token market

collateralToken

nat

yToken identifier of collateral token market

borrower

address

address of borrower to liquidate

amount

nat

amount of yTokens borrow to pay with max amount is less or equal borrow * closeFactor

Usage

const collateralTokenId = 0; // or new BigNumber(0) or "0"
const borrowTokenIdToClose = 2;
const amount = 10_000_000; // amount of collateral.
const borrower = "tz...";
const yupana = await tezos.contract.at(yTokenAddress);
const proxy = await tezos.contract.at(proxyAddress);
const borrowedTokenIds = [1, 2];
const updBorrowed = borrowedTokenIds.reduce(
  (batch, tokenId) => {
    batch.push({
        kind: "transaction",
        ...yupana.methods.updateInterest(tokenId).toTransferParams(),
      },
      {
        kind: "transaction",
        ...proxy.methods.getPrice([tokenId]).toTransferParams(),
      });
      return batch;
    }
const batchArray = [
      ...updBorrowed,
      {
        kind: "transaction",
        ...yupana.methods.updateInterest(collateralTokenId).toTransferParams(),
      },
      {
        kind: "transaction",
        ...proxy.methods.getPrice([collateralTokenId]).toTransferParams(),
      },
      {
        kind: "transaction",
        ...yupana.methods
          .liquidate(borrowTokenIdToClose, collateralTokenId, borrower, amount)
          .toTransferParams(),
      },
    ];
const batch = await tezos.wallet.batch(batchArray);
const operation = await batch.send();
await operation.confirmation();
collateral_token_id = 0
borrow_token_id = 2
amount = 10_000_000 # amount of underlying tokens.
borrower_address = "tz..."
yupana = ContractInterface.from_michelson(code) # or client.contract(contract_address)...
proxy = ContractInterface.from_michelson(prx_code) # or client.contract(prx_contract_address)...
borrow_ids = [1, 2] # user borrowed tokens
borrow_updates = [yupana.updateInterest(borrow_token_id) for borrow_token_id in borrow_ids]
borrow_updates.append(proxy.getPrice([borrow_token_id for borrow_token_id in borrow_ids]))
call = pytezos.bulk(
        *borrow_updates,
        yupana.updateInterest(token_id),
        proxy.getPrice([token_id]),
        yupana.liquidate(
                borrow_token_id, 
                collateral_token_id, 
                borrower_address, 
                amount
        )
    ).autofill().sign()
opg = call.inject()

Errors

  • yToken/borrower-cannot-be-liquidator - borrower can't be liquidator

  • yToken/liquidation-not-achieved - this debt is not in "liquidation" case.

  • yToken/debt-is-zero - user's debt is zero.

  • yToken/too-much-repay - too many tokens sent to repay.

  • underflow/borrowerAccount.borrow - not enough borrow of borrower to liquidate with amount wanted by user.

  • underflow/totalBorrowsF - total borrows less than amount.

  • yToken/no-such-collateral - borrower doesn't has collateral in token with collateralToken

  • yToken/seize/not-enough-tokens - seize tokens greater than borrower balance.

  • token/cant-get-contract-token - FA12 token contract address does not contain transfer entrypoint from FA12 interface.

  • token/cant-get-contract-fa2-token - FA2 token contract address does not contain transfer entrypoint from FA2 interface.

  • underflow/liquidity - reserves - liquidity more than reserves.

  • yToken/amount-is-zero - passed zero amount.

  • ceil-div-error - division of two numbers fails.

  • yToken/need-update - token price and interest not updated (see warning above)

  • yToken/borrow-id-undefined - borrow token identifier is not assigned to any known yTokens.

  • yToken/collateral-id-undefined - collateral token identifier is not assigned to any known yTokens.

โš™๏ธ
๐Ÿ”ต
PriceFeed.getPrice
updateInterest