Source Code

(use-trait dlmm-pool-trait 'SM1FKXGNZJWSTWDWXQZJNF7B5TV5ZB235JTCXYXKD.dlmm-pool-trait-v-1-1.dlmm-pool-trait)
(use-trait sip-010-trait 'SM1FKXGNZJWSTWDWXQZJNF7B5TV5ZB235JTCXYXKD.sip-010-trait-ft-standard-v-1-1.sip-010-trait)

(define-constant SELF (as-contract contract-caller))

(define-public (liquidate
    (sbtc-in uint)
    (min-usdc-out uint)
    (swaps (optional (list 5 {pool-trait: <dlmm-pool-trait>, x-token-trait: <sip-010-trait>, y-token-trait: <sip-010-trait>, amount: uint, min-received: uint, x-for-y: bool, max-steps: uint}))))

 (let
    (
        (usdc-balance-before (unwrap-panic (contract-call? 'SP120SBRBQJ00MCWS7TM5R8WJNTTKD5K0HFRC2CNE.usdcx get-balance SELF)))
    )
    (asserts! (is-some swaps) (err u213))
    
    (try! (contract-call? 'SM3VDXK3WZZSA84XXFKAFAF15NNZX32CTSG82JFQ4.sbtc-token transfer sbtc-in contract-caller SELF none))

    (try! (as-contract (dllm-swap-simple-multi (unwrap-panic swaps))))

    (let 
        (
            (usdc-balance-after (unwrap-panic (contract-call? 'SP120SBRBQJ00MCWS7TM5R8WJNTTKD5K0HFRC2CNE.usdcx get-balance SELF)))
            (usdc-out (if (is-eq u0 usdc-balance-before) usdc-balance-after (- usdc-balance-before usdc-balance-after)))
            (sender contract-caller)
        )
        (asserts! (>= usdc-out min-usdc-out) (err u214))
        (as-contract (contract-call? 'SP120SBRBQJ00MCWS7TM5R8WJNTTKD5K0HFRC2CNE.usdcx transfer usdc-out SELF sender none))
    )
 )
)

(define-private (dllm-swap-simple-multi 
    (swaps (list 5 {pool-trait: <dlmm-pool-trait>, x-token-trait: <sip-010-trait>, y-token-trait: <sip-010-trait>, amount: uint, min-received: uint, x-for-y: bool, max-steps: uint})))
    (contract-call? 'SM1FKXGNZJWSTWDWXQZJNF7B5TV5ZB235JTCXYXKD.dlmm-swap-router-v-1-1 swap-simple-multi swaps)
)

Functions (2)

FunctionAccessArgs
liquidatepublicsbtc-in: uint, min-usdc-out: uint, swaps: (optional (list 5 {pool-trait: <dlmm-pool-trait>, x-token-trait: <sip-010-trait>, y-token-trait: <sip-010-trait>, amount: uint, min-received: uint, x-for-y: bool, max-steps: uint}
dllm-swap-simple-multiprivateswaps: (list 5 {pool-trait: <dlmm-pool-trait>, x-token-trait: <sip-010-trait>, y-token-trait: <sip-010-trait>, amount: uint, min-received: uint, x-for-y: bool, max-steps: uint}