(use-trait dlmm-pool-trait 'SP3ESW1QCNQPVXJDGQWT7E45RDCH38QBK9HEJSX4X.dlmm-pool-trait-v-0-1.dlmm-pool-trait)
(use-trait sip-010-trait 'SP3ESW1QCNQPVXJDGQWT7E45RDCH38QBK9HEJSX4X.sip-010-trait-ft-standard-v-0-0.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? 'SP3ESW1QCNQPVXJDGQWT7E45RDCH38QBK9HEJSX4X.token-tusdc-v-0-2 get-balance SELF)))
)
(asserts! (is-some swaps) (err u213))
(try! (contract-call? 'SP3ESW1QCNQPVXJDGQWT7E45RDCH38QBK9HEJSX4X.token-tbtc-v-0-2 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? 'SP3ESW1QCNQPVXJDGQWT7E45RDCH38QBK9HEJSX4X.token-tusdc-v-0-2 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? 'SP3ESW1QCNQPVXJDGQWT7E45RDCH38QBK9HEJSX4X.token-tusdc-v-0-2 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? 'SP3ESW1QCNQPVXJDGQWT7E45RDCH38QBK9HEJSX4X.dlmm-swap-router-v-0-3 swap-simple-multi swaps)
)