;; Title: Swap Wrapper v1
;; Author: rozar.btc
(define-constant err-unauthorized (err u3000))
(define-constant err-insufficient-funds (err u4001))
(define-constant ONE_6 (pow u10 u6)) ;; 6 decimal places
(define-constant contract (as-contract tx-sender))
(define-public (swap-stx-for-fenrir (amount-stx uint) (amount-fenrir uint) (amount-swelsh uint) (amount-sodin uint) (amt-in-max uint))
(let (
(sender tx-sender)
(fee-percent (unwrap-panic (contract-call? .fenrir-corgi-of-ragnarok get-craft-fee-percent)))
(amount-swelsh-plus-fees (+ amount-swelsh (/ (* amount-swelsh fee-percent) ONE_6)))
(amount-sodin-plus-fees (+ amount-sodin (/ (* amount-sodin fee-percent) ONE_6)))
)
(asserts! (>= (stx-get-balance sender) amount-stx) err-insufficient-funds)
(print {amount-stx: amount-stx, amount-fenrir: amount-fenrir, amount-swelsh: amount-swelsh, amount-sodin: amount-sodin, fee-percent: fee-percent, amount-swelsh-plus-fees: amount-swelsh-plus-fees, amount-sodin-plus-fees: amount-sodin-plus-fees})
(try! (stx-transfer? amount-stx sender contract))
(try! (as-contract (contract-call? 'SP1Y5YSTAHZ88XYK1VPDH24GY0HPX5J4JECTMY4A1.univ2-router swap-tokens-for-exact-tokens u26 'SP1Y5YSTAHZ88XYK1VPDH24GY0HPX5J4JECTMY4A1.wstx .liquid-staked-welsh-v2 'SP1Y5YSTAHZ88XYK1VPDH24GY0HPX5J4JECTMY4A1.wstx .liquid-staked-welsh-v2 'SP1Y5YSTAHZ88XYK1VPDH24GY0HPX5J4JECTMY4A1.univ2-share-fee-to amt-in-max amount-swelsh-plus-fees)))
(try! (as-contract (contract-call? 'SP1Y5YSTAHZ88XYK1VPDH24GY0HPX5J4JECTMY4A1.univ2-router swap-tokens-for-exact-tokens u24 'SP1Y5YSTAHZ88XYK1VPDH24GY0HPX5J4JECTMY4A1.wstx .liquid-staked-odin 'SP1Y5YSTAHZ88XYK1VPDH24GY0HPX5J4JECTMY4A1.wstx .liquid-staked-odin 'SP1Y5YSTAHZ88XYK1VPDH24GY0HPX5J4JECTMY4A1.univ2-share-fee-to amt-in-max amount-sodin-plus-fees)))
(try! (as-contract (contract-call? .crafting-helper craft .fenrir-corgi-of-ragnarok amount-fenrir .liquid-staked-welsh-v2 .liquid-staked-odin)))
(try! (as-contract (stx-transfer? (stx-get-balance contract) contract sender)))
(as-contract (contract-call? .fenrir-corgi-of-ragnarok transfer amount-fenrir contract sender none))
)
)
(define-public (swap-fenrir-for-stx (amount-fenrir uint) (amt-out-min uint))
(let (
(sender tx-sender)
)
(asserts! (>= (unwrap-panic (contract-call? .fenrir-corgi-of-ragnarok get-balance sender)) amount-fenrir) err-insufficient-funds)
(print {amount-fenrir: amount-fenrir, amt-out-min: amt-out-min})
(try! (contract-call? .fenrir-corgi-of-ragnarok transfer amount-fenrir sender contract none))
(try! (as-contract (contract-call? .crafting-helper salvage .fenrir-corgi-of-ragnarok (unwrap-panic (contract-call? .fenrir-corgi-of-ragnarok get-balance contract)) .liquid-staked-welsh-v2 .liquid-staked-odin)))
(try! (as-contract (contract-call? 'SP1Y5YSTAHZ88XYK1VPDH24GY0HPX5J4JECTMY4A1.univ2-router swap-exact-tokens-for-tokens u26 'SP1Y5YSTAHZ88XYK1VPDH24GY0HPX5J4JECTMY4A1.wstx .liquid-staked-welsh-v2 .liquid-staked-welsh-v2 'SP1Y5YSTAHZ88XYK1VPDH24GY0HPX5J4JECTMY4A1.wstx 'SP1Y5YSTAHZ88XYK1VPDH24GY0HPX5J4JECTMY4A1.univ2-share-fee-to (unwrap-panic (contract-call? .liquid-staked-welsh-v2 get-balance contract)) amt-out-min)))
(try! (as-contract (contract-call? 'SP1Y5YSTAHZ88XYK1VPDH24GY0HPX5J4JECTMY4A1.univ2-router swap-exact-tokens-for-tokens u24 'SP1Y5YSTAHZ88XYK1VPDH24GY0HPX5J4JECTMY4A1.wstx .liquid-staked-odin .liquid-staked-odin 'SP1Y5YSTAHZ88XYK1VPDH24GY0HPX5J4JECTMY4A1.wstx 'SP1Y5YSTAHZ88XYK1VPDH24GY0HPX5J4JECTMY4A1.univ2-share-fee-to (unwrap-panic (contract-call? .liquid-staked-odin get-balance contract)) amt-out-min)))
(as-contract (stx-transfer? (stx-get-balance contract) contract sender))
)
)