Source Code

;; Simple Liquidator Contract
;; ==========================
;; Implements the liquidator trait and works with the lending pool
;; This contract is verified by the lending pool using contract-hash?

(impl-trait .liquidator-trait.liquidator-trait)

;; Constants
(define-constant LIQUIDATION-BONUS-BPS u1000) ;; 10% bonus
(define-constant err-liquidation-failed (err u500))
(define-constant err-insufficient-funds (err u501))

;; Implement liquidate function from trait
(define-public (liquidate (borrower principal) (debt-amount uint))
    (let (
        ;; Calculate total amount needed (debt + bonus)
        (total-needed (+ debt-amount (/ (* debt-amount LIQUIDATION-BONUS-BPS) u10000)))
    )
        ;; Note: The actual liquidation logic is handled by the lending pool contract
        ;; This contract is called by the lending pool with restrict-assets? protection
        ;; The lending pool will:
        ;; 1. Verify this contract using contract-hash?
        ;; 2. Set asset restrictions using restrict-assets?
        ;; 3. Transfer collateral to this contract
        ;; 4. This contract can then process the liquidation (swap, etc.)
        
        ;; Validate inputs
        (asserts! (> debt-amount u0) err-liquidation-failed)
        (asserts! (> total-needed u0) err-liquidation-failed)
        
        ;; Return the amount that will be received (debt + bonus)
        (ok total-needed)
    )
)

;; Get liquidation bonus
(define-public (get-liquidation-bonus)
    (ok LIQUIDATION-BONUS-BPS)
)

;; Check if a position can be liquidated
;; Note: This is a simplified check - in production, this would:
;; 1. Query the lending pool for the borrower's health factor
;; 2. Check with price oracle for asset prices
;; 3. Verify liquidation is profitable
(define-public (can-liquidate (borrower principal))
    ;; For now, return true - actual check should be done by calling lending pool
    ;; This function exists to satisfy the trait interface
    (ok true)
)

;; Read-only version of liquidation bonus
(define-read-only (get-bonus-amount (debt uint))
    (ok (/ (* debt LIQUIDATION-BONUS-BPS) u10000))
)

Functions (4)

FunctionAccessArgs
liquidatepublicborrower: principal, debt-amount: uint
get-liquidation-bonuspublic
can-liquidatepublicborrower: principal
get-bonus-amountread-onlydebt: uint