Source Code

(use-trait ft 'SP2VCQJGH7PHP2DJK7Z0V48AGBHQAW3R3ZW1QF4N.ft-trait.ft-trait)
(use-trait ft-mint-trait 'SP2VCQJGH7PHP2DJK7Z0V48AGBHQAW3R3ZW1QF4N.ft-mint-trait.ft-mint-trait)
(use-trait a-token 'SP2VCQJGH7PHP2DJK7Z0V48AGBHQAW3R3ZW1QF4N.a-token-trait.a-token-trait)
(use-trait flash-loan 'SP2VCQJGH7PHP2DJK7Z0V48AGBHQAW3R3ZW1QF4N.flash-loan-trait.flash-loan-trait)
(use-trait oracle-trait 'SP2VCQJGH7PHP2DJK7Z0V48AGBHQAW3R3ZW1QF4N.oracle-trait.oracle-trait)
(use-trait redeemeable-token 'SP2VCQJGH7PHP2DJK7Z0V48AGBHQAW3R3ZW1QF4N.redeemeable-trait-v1-2.redeemeable-trait)
(use-trait incentives-trait 'SP2VCQJGH7PHP2DJK7Z0V48AGBHQAW3R3ZW1QF4N.incentives-trait-v2-1.incentives-trait)

(define-constant ERR_UNAUTHORIZED (err u1000000000000))
(define-constant ERR_REWARDS_CONTRACT (err u1000000000001))
(define-constant ERR_NO_REWARDS (err u1000000000003))

(define-constant max-value u340282366920938463463374607431768211455)

(define-read-only (is-rewards-contract (contract principal))
  (is-eq contract (contract-call? 'SP2VCQJGH7PHP2DJK7Z0V48AGBHQAW3R3ZW1QF4N.rewards-data get-rewards-contract-read)))

(define-public (supply
  (lp <redeemeable-token>)
  (pool-reserve principal)
  (asset <ft>)
  (amount uint)
  (owner principal)
  (referral (optional principal))
  (incentives <incentives-trait>)
  )
  (let ((asset-principal (contract-of asset)))

    (asserts! (is-eq tx-sender contract-caller) ERR_UNAUTHORIZED)
    (asserts! (is-rewards-contract (contract-of incentives)) ERR_REWARDS_CONTRACT)
    (try! (contract-call? incentives claim-rewards-to-vault lp asset owner))
    (try! (contract-call? 'SP2VCQJGH7PHP2DJK7Z0V48AGBHQAW3R3ZW1QF4N.pool-borrow-v2-1 supply lp pool-reserve asset amount owner))

    (print { type: "supply-call", payload: { key: owner, data: {
      reserve-state: (try! (contract-call? 'SP2VCQJGH7PHP2DJK7Z0V48AGBHQAW3R3ZW1QF4N.pool-0-reserve-v2-0 get-reserve-state asset-principal)),
      user-reserve-state: (contract-call? 'SP2VCQJGH7PHP2DJK7Z0V48AGBHQAW3R3ZW1QF4N.pool-0-reserve-v2-0 get-user-reserve-data owner asset-principal),
      user-index: (contract-call? 'SP2VCQJGH7PHP2DJK7Z0V48AGBHQAW3R3ZW1QF4N.pool-0-reserve-v2-0 get-user-index owner asset-principal),
      user-assets: (contract-call? 'SP2VCQJGH7PHP2DJK7Z0V48AGBHQAW3R3ZW1QF4N.pool-0-reserve-v2-0 get-user-assets owner),
      asset: asset,
      amount: amount,
      new-balance: (try! (contract-call? lp get-balance owner)),
      referral: referral,
    }}})
    (ok true)
  )
)

(define-public (supply-all
  (ststx-amount uint)
  (aeusdc-amount uint)
  (wstx-amount uint)
  (diko-amount uint)
  (usdh-amount uint)
  (susdt-amount uint)
  (usda-amount uint)
  (sbtc-amount uint)
  (ststxbtc-amount uint)
  (alex-amount uint)
  (pool-reserve principal)
  (owner principal)
  (referral (optional principal))
  (incentives <incentives-trait>)
  )
  (begin
    (asserts! (is-eq tx-sender contract-caller) ERR_UNAUTHORIZED)

    (if (> ststx-amount u0)
      (begin
        (try! (supply
          'SP2VCQJGH7PHP2DJK7Z0V48AGBHQAW3R3ZW1QF4N.zststx-v2-0
          pool-reserve
          'SP4SZE494VC2YC5JYG7AYFQ44F5Q4PYV7DVMDPBG.ststx-token
          ststx-amount
          owner
          referral
          incentives
          ))
      )
      false
    )

    (if (> aeusdc-amount u0)
      (begin
        (try! (supply
          'SP2VCQJGH7PHP2DJK7Z0V48AGBHQAW3R3ZW1QF4N.zaeusdc-v2-0
          pool-reserve
          'SP3Y2ZSH8P7D50B0VBTSX11S7XSG24M1VB9YFQA4K.token-aeusdc
          aeusdc-amount
          owner
          referral
          incentives
          ))
      )
      false
    )

    (if (> wstx-amount u0)
      (begin
        (try! (supply
          'SP2VCQJGH7PHP2DJK7Z0V48AGBHQAW3R3ZW1QF4N.zwstx-v2-0
          pool-reserve
          'SP2VCQJGH7PHP2DJK7Z0V48AGBHQAW3R3ZW1QF4N.wstx
          wstx-amount
          owner
          referral
          incentives
          ))
      )
      false
    )

    (if (> diko-amount u0)
      (begin
        (try! (supply
          'SP2VCQJGH7PHP2DJK7Z0V48AGBHQAW3R3ZW1QF4N.zdiko-v2-0
          pool-reserve
          'SP2C2YFP12AJZB4MABJBAJ55XECVS7E4PMMZ89YZR.arkadiko-token
          diko-amount
          owner
          referral
          incentives
          ))
      )
      false
    )

    (if (> usdh-amount u0)
      (begin
        (try! (supply
          'SP2VCQJGH7PHP2DJK7Z0V48AGBHQAW3R3ZW1QF4N.zusdh-v2-0
          pool-reserve
          'SPN5AKG35QZSK2M8GAMR4AFX45659RJHDW353HSG.usdh-token-v1
          usdh-amount
          owner
          referral
          incentives
          ))
      )
      false
    )

    (if (> susdt-amount u0)
      (begin
        (try! (supply
          'SP2VCQJGH7PHP2DJK7Z0V48AGBHQAW3R3ZW1QF4N.zsusdt-v2-0
          pool-reserve
          'SP2XD7417HGPRTREMKF748VNEQPDRR0RMANB7X1NK.token-susdt
          susdt-amount
          owner
          referral
          incentives
          ))
      )
      false
    )

    (if (> usda-amount u0)
      (begin
        (try! (supply
          'SP2VCQJGH7PHP2DJK7Z0V48AGBHQAW3R3ZW1QF4N.zusda-v2-0
          pool-reserve
          'SP2C2YFP12AJZB4MABJBAJ55XECVS7E4PMMZ89YZR.usda-token
          usda-amount
          owner
          referral
          incentives
          ))
      )
      false
    )

    (if (> sbtc-amount u0)
      (begin
        (try! (supply
          'SP2VCQJGH7PHP2DJK7Z0V48AGBHQAW3R3ZW1QF4N.zsbtc-v2-0
          pool-reserve
          'SM3VDXK3WZZSA84XXFKAFAF15NNZX32CTSG82JFQ4.sbtc-token
          sbtc-amount
          owner
          referral
          incentives
          ))
      )
      false
    )

    (if (> ststxbtc-amount u0)
      (begin
        (try! (supply
          'SP2VCQJGH7PHP2DJK7Z0V48AGBHQAW3R3ZW1QF4N.zststxbtc-v2-0
          pool-reserve
          'SP4SZE494VC2YC5JYG7AYFQ44F5Q4PYV7DVMDPBG.ststxbtc-token
          ststxbtc-amount
          owner
          referral
          incentives
          ))
      )
      false
    )

    (if (> alex-amount u0)
      (begin
        (try! (supply
          'SP2VCQJGH7PHP2DJK7Z0V48AGBHQAW3R3ZW1QF4N.zalex-v2-0
          pool-reserve
          'SP102V8P0F7JX67ARQ77WEA3D3CFB5XW39REDT0AM.token-alex
          alex-amount
          owner
          referral
          incentives
          ))
      )
      false
    )

    (ok true)
  )
)

(define-public (borrow
  (pool-reserve principal)
  (oracle <oracle-trait>)
  (asset-to-borrow <ft>)
  (lp <ft>)
  (assets (list 100 { asset: <ft>, lp-token: <ft>, oracle: <oracle-trait> }))
  (amount-to-be-borrowed uint)
  (fee-calculator principal)
  (interest-rate-mode uint)
  (owner principal)
  (price-feed-bytes (optional (buff 8192)))
  )
  (let ((asset-principal (contract-of asset-to-borrow)))

    (asserts! (is-eq tx-sender contract-caller) ERR_UNAUTHORIZED)
    (try! (write-feed price-feed-bytes))
    (try! (contract-call? 'SP2VCQJGH7PHP2DJK7Z0V48AGBHQAW3R3ZW1QF4N.pool-borrow-v2-1 borrow pool-reserve oracle asset-to-borrow lp assets amount-to-be-borrowed fee-calculator interest-rate-mode owner))

    (print { type: "borrow-call", payload: { key: owner, data: {
        reserve-state: (try! (contract-call? 'SP2VCQJGH7PHP2DJK7Z0V48AGBHQAW3R3ZW1QF4N.pool-0-reserve-v2-0 get-reserve-state asset-principal)),
        user-reserve-state: (contract-call? 'SP2VCQJGH7PHP2DJK7Z0V48AGBHQAW3R3ZW1QF4N.pool-0-reserve-v2-0 get-user-reserve-data owner asset-principal),
        user-index: (contract-call? 'SP2VCQJGH7PHP2DJK7Z0V48AGBHQAW3R3ZW1QF4N.pool-0-reserve-v2-0 get-user-index owner asset-principal),
        user-assets: (contract-call? 'SP2VCQJGH7PHP2DJK7Z0V48AGBHQAW3R3ZW1QF4N.pool-0-reserve-v2-0 get-user-assets owner),
        asset: asset-to-borrow,
        amount: amount-to-be-borrowed,
        new-borrow-balance: (get compounded-balance (try! (contract-call? 'SP2VCQJGH7PHP2DJK7Z0V48AGBHQAW3R3ZW1QF4N.pool-0-reserve-v2-0 get-user-borrow-balance owner asset-to-borrow))),
      }}})
    (ok true)
  )
)

(define-public (repay
  (asset <ft>)
  (amount-to-repay uint)
  (on-behalf-of principal)
  (payer principal)
  )
  (let (
    (asset-principal (contract-of asset))
    (check-ok (asserts! (is-eq tx-sender contract-caller) ERR_UNAUTHORIZED))
    (payback-amount (try! (contract-call? 'SP2VCQJGH7PHP2DJK7Z0V48AGBHQAW3R3ZW1QF4N.pool-borrow-v2-1 repay asset amount-to-repay on-behalf-of payer)))
    )

    (print { type: "repay-call", payload: { key: on-behalf-of, data: {
        reserve-state: (try! (contract-call? 'SP2VCQJGH7PHP2DJK7Z0V48AGBHQAW3R3ZW1QF4N.pool-0-reserve-v2-0 get-reserve-state asset-principal)),
        user-reserve-state: (contract-call? 'SP2VCQJGH7PHP2DJK7Z0V48AGBHQAW3R3ZW1QF4N.pool-0-reserve-v2-0 get-user-reserve-data on-behalf-of asset-principal),
        user-index: (contract-call? 'SP2VCQJGH7PHP2DJK7Z0V48AGBHQAW3R3ZW1QF4N.pool-0-reserve-v2-0 get-user-index on-behalf-of asset-principal),
        user-assets: (contract-call? 'SP2VCQJGH7PHP2DJK7Z0V48AGBHQAW3R3ZW1QF4N.pool-0-reserve-v2-0 get-user-assets on-behalf-of),
        asset: asset,
        amount: payback-amount,
        on-behalf-of: on-behalf-of,
        payer: payer,
        new-borrow-balance: (get compounded-balance (try! (contract-call? 'SP2VCQJGH7PHP2DJK7Z0V48AGBHQAW3R3ZW1QF4N.pool-0-reserve-v2-0 get-user-borrow-balance on-behalf-of asset))),
      }}})
    (ok true)
  )
)

(define-public (set-user-use-reserve-as-collateral
  (who principal)
  (lp-token <ft>)
  (asset <ft>)
  (enable-as-collateral bool)
  (oracle <oracle-trait>)
  (assets-to-calculate (list 100 { asset: <ft>, lp-token: <ft>, oracle: <oracle-trait> }))
  (price-feed-bytes (optional (buff 8192)))
  )
  (let (
    (asset-principal (contract-of asset))
    (reserve-state (try! (contract-call? 'SP2VCQJGH7PHP2DJK7Z0V48AGBHQAW3R3ZW1QF4N.pool-0-reserve-v2-0 get-reserve-state asset-principal)))
    )

    (asserts! (is-eq tx-sender contract-caller) ERR_UNAUTHORIZED)
    (try! (write-feed price-feed-bytes))
    (try! (contract-call? 'SP2VCQJGH7PHP2DJK7Z0V48AGBHQAW3R3ZW1QF4N.pool-borrow-v2-1 set-user-use-reserve-as-collateral who lp-token asset enable-as-collateral oracle assets-to-calculate))

    (print { type: "set-user-use-reserve-as-collateral-call", payload: { key: who, data: {
        reserve-state: (try! (contract-call? 'SP2VCQJGH7PHP2DJK7Z0V48AGBHQAW3R3ZW1QF4N.pool-0-reserve-v2-0 get-reserve-state asset-principal)),
        user-reserve-state: (contract-call? 'SP2VCQJGH7PHP2DJK7Z0V48AGBHQAW3R3ZW1QF4N.pool-0-reserve-v2-0 get-user-reserve-data who asset-principal),
        user-index: (contract-call? 'SP2VCQJGH7PHP2DJK7Z0V48AGBHQAW3R3ZW1QF4N.pool-0-reserve-v2-0 get-user-index who asset-principal),
        user-assets: (contract-call? 'SP2VCQJGH7PHP2DJK7Z0V48AGBHQAW3R3ZW1QF4N.pool-0-reserve-v2-0 get-user-assets who),
        asset: asset,
      }}})
    (ok true)
  )
)

(define-public (withdraw
  (lp <redeemeable-token>)
  (pool-reserve principal)
  (asset <ft>)
  (oracle <oracle-trait>)
  (amount uint)
  (owner principal)
  (assets (list 100 { asset: <ft>, lp-token: <ft-mint-trait>, oracle: <oracle-trait> }))
  (incentives <incentives-trait>)
  (price-feed-bytes (optional (buff 8192)))
  )
  (let (
    (asset-principal (contract-of asset))
    (check-ok (asserts! (is-eq tx-sender contract-caller) ERR_UNAUTHORIZED))
    (check-on-rewards (asserts! (is-rewards-contract (contract-of incentives)) ERR_REWARDS_CONTRACT))
    (price-ok (try! (write-feed price-feed-bytes)))
    (result-claim (try! (contract-call? incentives claim-rewards-to-vault lp asset owner)))
    (withdraw-res (try! (contract-call? 'SP2VCQJGH7PHP2DJK7Z0V48AGBHQAW3R3ZW1QF4N.pool-borrow-v2-1 withdraw pool-reserve asset lp oracle assets amount owner)))
    )

    (print { type: "withdraw-call", payload: { key: owner, data: {
        reserve-state: (try! (contract-call? 'SP2VCQJGH7PHP2DJK7Z0V48AGBHQAW3R3ZW1QF4N.pool-0-reserve-v2-0 get-reserve-state asset-principal)),
        user-reserve-state: (contract-call? 'SP2VCQJGH7PHP2DJK7Z0V48AGBHQAW3R3ZW1QF4N.pool-0-reserve-v2-0 get-user-reserve-data owner asset-principal),
        user-index: (contract-call? 'SP2VCQJGH7PHP2DJK7Z0V48AGBHQAW3R3ZW1QF4N.pool-0-reserve-v2-0 get-user-index owner asset-principal),
        user-assets: (contract-call? 'SP2VCQJGH7PHP2DJK7Z0V48AGBHQAW3R3ZW1QF4N.pool-0-reserve-v2-0 get-user-assets owner),
        asset: asset,
        withdrawn-amount: withdraw-res,
        balance: (try! (contract-call? lp get-balance owner)),
      }}})
    (ok true)
  )
)


(define-public (claim-rewards
  (lp <redeemeable-token>)
  (pool-reserve principal)
  (asset <ft>)
  (oracle <oracle-trait>)
  (owner principal)
  (assets (list 100 { asset: <ft>, lp-token: <ft-mint-trait>, oracle: <oracle-trait> }))
  (reward-asset <ft>)
  (incentives <incentives-trait>)
  (price-feed-bytes (optional (buff 8192)))
  )
  (begin
    (asserts! (is-eq tx-sender contract-caller) ERR_UNAUTHORIZED)
    (asserts! (is-rewards-contract (contract-of incentives)) ERR_REWARDS_CONTRACT)

    (asserts! (> (try! (contract-call? incentives claim-rewards lp asset owner)) u0) ERR_NO_REWARDS)

    (ok true)
  )
)

(define-public (liquidation-call
  (assets (list 100 { asset: <ft>, lp-token: <ft>, oracle: <oracle-trait> }))
  (collateral-lp <a-token>)
  (collateral-to-liquidate <ft>)
  (debt-asset <ft>)
  (collateral-oracle <oracle-trait>)
  (debt-oracle <oracle-trait>)
  (liquidated-user principal)
  (debt-amount uint)
  (to-receive-atoken bool)
  (price-feed-bytes (optional (buff 8192)))
  )
  (let (
    (debt-asset-principal (contract-of debt-asset))
    (collateral-asset-principal (contract-of collateral-to-liquidate))
    (liquidator tx-sender)
    )

    (asserts! (is-eq liquidator contract-caller) ERR_UNAUTHORIZED)
    (try! (write-feed price-feed-bytes))

    (try! (contract-call? 'SP2VCQJGH7PHP2DJK7Z0V48AGBHQAW3R3ZW1QF4N.pool-borrow-v2-1 liquidation-call
      assets
      collateral-lp
      collateral-to-liquidate
      debt-asset
      collateral-oracle
      debt-oracle
      liquidated-user
      debt-amount
      to-receive-atoken)
    )
    (print { type: "liquidation-call", payload: { key: liquidated-user, data: {
        debt-reserve-state: (try! (contract-call? 'SP2VCQJGH7PHP2DJK7Z0V48AGBHQAW3R3ZW1QF4N.pool-0-reserve-v2-0 get-reserve-state debt-asset-principal)),
        collateral-reserve-state: (try! (contract-call? 'SP2VCQJGH7PHP2DJK7Z0V48AGBHQAW3R3ZW1QF4N.pool-0-reserve-v2-0 get-reserve-state debt-asset-principal)),
        
        liquidator-debt-reserve-state: (contract-call? 'SP2VCQJGH7PHP2DJK7Z0V48AGBHQAW3R3ZW1QF4N.pool-0-reserve-v2-0 get-user-reserve-data liquidator debt-asset-principal),
        liquidator-debt-index: (contract-call? 'SP2VCQJGH7PHP2DJK7Z0V48AGBHQAW3R3ZW1QF4N.pool-0-reserve-v2-0 get-user-index liquidator debt-asset-principal),
        liquidator-collateral-reserve-state: (contract-call? 'SP2VCQJGH7PHP2DJK7Z0V48AGBHQAW3R3ZW1QF4N.pool-0-reserve-v2-0 get-user-reserve-data liquidator collateral-asset-principal),
        liquidator-collateral-index: (contract-call? 'SP2VCQJGH7PHP2DJK7Z0V48AGBHQAW3R3ZW1QF4N.pool-0-reserve-v2-0 get-user-index liquidator collateral-asset-principal),
        liquidator-user-assets: (contract-call? 'SP2VCQJGH7PHP2DJK7Z0V48AGBHQAW3R3ZW1QF4N.pool-0-reserve-v2-0 get-user-assets liquidator),

        liquidated-user-debt-reserve-state: (contract-call? 'SP2VCQJGH7PHP2DJK7Z0V48AGBHQAW3R3ZW1QF4N.pool-0-reserve-v2-0 get-user-reserve-data liquidated-user debt-asset-principal),
        liquidated-user-debt-index: (contract-call? 'SP2VCQJGH7PHP2DJK7Z0V48AGBHQAW3R3ZW1QF4N.pool-0-reserve-v2-0 get-user-index liquidated-user debt-asset-principal),
        liquidated-user-collateral-reserve-state: (contract-call? 'SP2VCQJGH7PHP2DJK7Z0V48AGBHQAW3R3ZW1QF4N.pool-0-reserve-v2-0 get-user-reserve-data liquidated-user collateral-asset-principal),
        liquidated-user-collateral-index: (contract-call? 'SP2VCQJGH7PHP2DJK7Z0V48AGBHQAW3R3ZW1QF4N.pool-0-reserve-v2-0 get-user-index liquidated-user collateral-asset-principal),
        liquidated-user-assets: (contract-call? 'SP2VCQJGH7PHP2DJK7Z0V48AGBHQAW3R3ZW1QF4N.pool-0-reserve-v2-0 get-user-assets liquidated-user),

        collateral-to-liquidate: collateral-to-liquidate,
        debt-asset: debt-asset-principal,
        debt-amount: debt-amount,
      }}})
    (ok u0)
  )
)

(define-public (set-e-mode
  (user principal)
  (assets (list 100 { asset: <ft>, lp-token: <ft>, oracle: <oracle-trait> }))
  (new-e-mode-type (buff 1))
  (price-feed-bytes (optional (buff 8192)))
  )
  (begin
    (asserts! (is-eq tx-sender contract-caller) ERR_UNAUTHORIZED)
    (try! (write-feed price-feed-bytes))
    (try! (contract-call? 'SP2VCQJGH7PHP2DJK7Z0V48AGBHQAW3R3ZW1QF4N.pool-borrow-v2-1 set-e-mode user assets new-e-mode-type))

    (print { type: "set-e-mode-call", payload: { key: user, data: {
        user-e-mode: (contract-call? 'SP2VCQJGH7PHP2DJK7Z0V48AGBHQAW3R3ZW1QF4N.pool-reserve-data-2 get-user-e-mode-read user),
      }}})
    (ok true)
  )
)

(define-read-only (is-approved-sender (sender principal))
  (default-to false (contract-call? .flashloan-data get-approved-sender-read sender)))

(define-public (flashloan
  (receiver principal)
  (asset <ft>)
  (amount uint)
  (flashloan-script <flash-loan>))
  (begin
    (asserts! (is-approved-sender tx-sender) ERR_UNAUTHORIZED)

    (try! 
      (contract-call? 'SP2VCQJGH7PHP2DJK7Z0V48AGBHQAW3R3ZW1QF4N.pool-borrow-v2-1 flashloan
        receiver
        asset
        amount
        flashloan-script))

    (print { type: "flashloan-call", payload: { key: receiver, data: {
      reserve-state: (try! (contract-call? 'SP2VCQJGH7PHP2DJK7Z0V48AGBHQAW3R3ZW1QF4N.pool-0-reserve-v2-0 get-reserve-state (contract-of asset))),
    }}})
    (ok u0)
  )
)

(define-private (write-feed (price-feed-bytes (optional (buff 8192))))
  (match price-feed-bytes
    bytes (begin
      (try! 
        (contract-call? 'SP3R4F6C1J3JQWWCVZ3S7FRRYPMYG6ZW6RZK31FXY.pyth-oracle-v3 verify-and-update-price-feeds
          bytes
          {
            pyth-storage-contract: 'SP3R4F6C1J3JQWWCVZ3S7FRRYPMYG6ZW6RZK31FXY.pyth-storage-v3,
            pyth-decoder-contract: 'SP3R4F6C1J3JQWWCVZ3S7FRRYPMYG6ZW6RZK31FXY.pyth-pnau-decoder-v2,
            wormhole-core-contract: 'SP3R4F6C1J3JQWWCVZ3S7FRRYPMYG6ZW6RZK31FXY.wormhole-core-v3,
          }
        )
      )
      (ok true)
    )
    (begin
      (print "no-feed-update")
      ;; do nothing if none
      (ok true)
    )
  )
)

Functions (12)

FunctionAccessArgs
is-rewards-contractread-onlycontract: principal
supplypubliclp: <redeemeable-token>, pool-reserve: principal, asset: <ft>, amount: uint, owner: principal, referral: (optional principal
supply-allpublicststx-amount: uint, aeusdc-amount: uint, wstx-amount: uint, diko-amount: uint, usdh-amount: uint, susdt-amount: uint, usda-amount: uint, sbtc-amount: uint, ststxbtc-amount: uint, alex-amount: uint, pool-reserve: principal, owner: principal, referral: (optional principal
borrowpublicpool-reserve: principal, oracle: <oracle-trait>, asset-to-borrow: <ft>, lp: <ft>, assets: (list 100 { asset: <ft>, lp-token: <ft>, oracle: <oracle-trait> }
set-user-use-reserve-as-collateralpublicwho: principal, lp-token: <ft>, asset: <ft>, enable-as-collateral: bool, oracle: <oracle-trait>, assets-to-calculate: (list 100 { asset: <ft>, lp-token: <ft>, oracle: <oracle-trait> }
withdrawpubliclp: <redeemeable-token>, pool-reserve: principal, asset: <ft>, oracle: <oracle-trait>, amount: uint, owner: principal, assets: (list 100 { asset: <ft>, lp-token: <ft-mint-trait>, oracle: <oracle-trait> }
claim-rewardspubliclp: <redeemeable-token>, pool-reserve: principal, asset: <ft>, oracle: <oracle-trait>, owner: principal, assets: (list 100 { asset: <ft>, lp-token: <ft-mint-trait>, oracle: <oracle-trait> }
liquidation-callpublicassets: (list 100 { asset: <ft>, lp-token: <ft>, oracle: <oracle-trait> }
set-e-modepublicuser: principal, assets: (list 100 { asset: <ft>, lp-token: <ft>, oracle: <oracle-trait> }
is-approved-senderread-onlysender: principal
flashloanpublicreceiver: principal, asset: <ft>, amount: uint, flashloan-script: <flash-loan>
write-feedprivateprice-feed-bytes: (optional (buff 8192