Source Code

(use-trait ft-trait 'SP2AKWJYC7BNY18W1XXKPGP0YVEK63QJG4793Z2D4.sip-010-trait-ft-standard.sip-010-trait)

(define-constant ERR_MIN_PROFIT (err u6001))
(define-constant ERR_SWAP1      (err u6002))
(define-constant ERR_SWAP2      (err u6003))

(define-private (assert-min-profit (amount-in uint) (amount-out uint) (min-profit uint))
  (if (>= amount-out (+ amount-in min-profit)) (ok true) ERR_MIN_PROFIT)
)

(define-private (make-result (route (string-ascii 64)) (amount-in uint) (out1 uint) (out2 uint))
  {
    out1: out1,
    out2: out2,
    profit: (to-int (- out2 amount-in)),
    route: route,
    start: tx-sender,
  }
)

;; ---------------------------------------------------------------------
;; STX/aeUSDC: Bitflow XYK <-> Velar V1 AMM (poolId=6)
;; ---------------------------------------------------------------------

(define-constant BITFLOW_XYK_POOL_STX_AEUSDC 'SM1793C4R5PZ4NS4VQ4WMP7SKKYVH8JZEWSZ9HCCR.xyk-pool-stx-aeusdc-v-1-2)
(define-constant BITFLOW_TOKEN_STX 'SM1793C4R5PZ4NS4VQ4WMP7SKKYVH8JZEWSZ9HCCR.token-stx-v-1-2)
(define-constant TOKEN_AEUSDC 'SP3Y2ZSH8P7D50B0VBTSX11S7XSG24M1VB9YFQA4K.token-aeusdc)

(define-constant VELAR_V1_POOL_ID u6)
(define-constant VELAR_WSTX 'SP1Y5YSTAHZ88XYK1VPDH24GY0HPX5J4JECTMY4A1.wstx)
(define-constant VELAR_SHARE_FEE_TO 'SP1Y5YSTAHZ88XYK1VPDH24GY0HPX5J4JECTMY4A1.univ2-share-fee-to)

(define-public (exec-stx-aeusdc__bitflow_to_velar_v1
    (start-is-stx bool)
    (amount-in uint)
    (min-out-bitflow uint)
    (velar-amt-out uint)
    (min-profit uint))
  (let (
    (out1 (unwrap! (if start-is-stx
                      (contract-call? 'SM1793C4R5PZ4NS4VQ4WMP7SKKYVH8JZEWSZ9HCCR.xyk-core-v-1-2 swap-x-for-y BITFLOW_XYK_POOL_STX_AEUSDC BITFLOW_TOKEN_STX TOKEN_AEUSDC amount-in min-out-bitflow)
                      (contract-call? 'SM1793C4R5PZ4NS4VQ4WMP7SKKYVH8JZEWSZ9HCCR.xyk-core-v-1-2 swap-y-for-x BITFLOW_XYK_POOL_STX_AEUSDC BITFLOW_TOKEN_STX TOKEN_AEUSDC amount-in min-out-bitflow))
                  ERR_SWAP1))
    (e2 (unwrap! (if start-is-stx
                    (contract-call? 'SP1Y5YSTAHZ88XYK1VPDH24GY0HPX5J4JECTMY4A1.univ2-core swap VELAR_V1_POOL_ID TOKEN_AEUSDC VELAR_WSTX VELAR_SHARE_FEE_TO out1 velar-amt-out)
                    (contract-call? 'SP1Y5YSTAHZ88XYK1VPDH24GY0HPX5J4JECTMY4A1.univ2-core swap VELAR_V1_POOL_ID VELAR_WSTX TOKEN_AEUSDC VELAR_SHARE_FEE_TO out1 velar-amt-out))
                ERR_SWAP2))
    (out2 (get amt-out e2))
  )
    (try! (assert-min-profit amount-in out2 min-profit))
    (print { op: "amm-exec", route: "STX/aeUSDC:bitflow->velar-v1", in: amount-in, out1: out1, out2: out2 })
    (ok (make-result "STX/aeUSDC:bitflow->velar-v1" amount-in out1 out2))
  )
)

(define-public (exec-stx-aeusdc__velar_v1_to_bitflow
    (start-is-stx bool)
    (amount-in uint)
    (velar-amt-out uint)
    (min-out-bitflow uint)
    (min-profit uint))
  (let (
    (e1 (unwrap! (if start-is-stx
                    (contract-call? 'SP1Y5YSTAHZ88XYK1VPDH24GY0HPX5J4JECTMY4A1.univ2-core swap VELAR_V1_POOL_ID VELAR_WSTX TOKEN_AEUSDC VELAR_SHARE_FEE_TO amount-in velar-amt-out)
                    (contract-call? 'SP1Y5YSTAHZ88XYK1VPDH24GY0HPX5J4JECTMY4A1.univ2-core swap VELAR_V1_POOL_ID TOKEN_AEUSDC VELAR_WSTX VELAR_SHARE_FEE_TO amount-in velar-amt-out))
                ERR_SWAP1))
    (out1 (get amt-out e1))
    (out2 (unwrap! (if start-is-stx
                      (contract-call? 'SM1793C4R5PZ4NS4VQ4WMP7SKKYVH8JZEWSZ9HCCR.xyk-core-v-1-2 swap-y-for-x BITFLOW_XYK_POOL_STX_AEUSDC BITFLOW_TOKEN_STX TOKEN_AEUSDC out1 min-out-bitflow)
                      (contract-call? 'SM1793C4R5PZ4NS4VQ4WMP7SKKYVH8JZEWSZ9HCCR.xyk-core-v-1-2 swap-x-for-y BITFLOW_XYK_POOL_STX_AEUSDC BITFLOW_TOKEN_STX TOKEN_AEUSDC out1 min-out-bitflow))
                  ERR_SWAP2))
  )
    (try! (assert-min-profit amount-in out2 min-profit))
    (print { op: "amm-exec", route: "STX/aeUSDC:velar-v1->bitflow", in: amount-in, out1: out1, out2: out2 })
    (ok (make-result "STX/aeUSDC:velar-v1->bitflow" amount-in out1 out2))
  )
)

;; ---------------------------------------------------------------------
;; sBTC/STX: Bitflow XYK <-> Velar Univ2 pool
;; ---------------------------------------------------------------------

(define-constant BITFLOW_XYK_POOL_SBTC_STX 'SM1793C4R5PZ4NS4VQ4WMP7SKKYVH8JZEWSZ9HCCR.xyk-pool-sbtc-stx-v-1-1)
(define-constant TOKEN_SBTC 'SM3VDXK3WZZSA84XXFKAFAF15NNZX32CTSG82JFQ4.sbtc-token)

(define-constant VELAR_UNIV2_POOL_SBTC_STX 'SP20X3DC5R091J8B6YPQT638J8NR1W83KN6TN5BJY.univ2-pool-v1_0_0-0070)
(define-constant VELAR_UNIV2_FEES_SBTC_STX 'SP20X3DC5R091J8B6YPQT638J8NR1W83KN6TN5BJY.univ2-fees-v1_0_0-0070)

(define-public (exec-sbtc-stx__bitflow_to_velar_univ2
    (start-is-sbtc bool)
    (amount-in uint)
    (min-out-bitflow uint)
    (min-out-velar uint)
    (min-profit uint))
  (let (
    (out1 (unwrap! (if start-is-sbtc
                      (contract-call? 'SM1793C4R5PZ4NS4VQ4WMP7SKKYVH8JZEWSZ9HCCR.xyk-core-v-1-2 swap-x-for-y BITFLOW_XYK_POOL_SBTC_STX TOKEN_SBTC BITFLOW_TOKEN_STX amount-in min-out-bitflow)
                      (contract-call? 'SM1793C4R5PZ4NS4VQ4WMP7SKKYVH8JZEWSZ9HCCR.xyk-core-v-1-2 swap-y-for-x BITFLOW_XYK_POOL_SBTC_STX TOKEN_SBTC BITFLOW_TOKEN_STX amount-in min-out-bitflow))
                  ERR_SWAP1))
    (e2 (unwrap! (if start-is-sbtc
                    (contract-call? 'SP20X3DC5R091J8B6YPQT638J8NR1W83KN6TN5BJY.univ2-pool-v1_0_0-0070 swap VELAR_WSTX TOKEN_SBTC VELAR_UNIV2_FEES_SBTC_STX out1 min-out-velar)
                    (contract-call? 'SP20X3DC5R091J8B6YPQT638J8NR1W83KN6TN5BJY.univ2-pool-v1_0_0-0070 swap TOKEN_SBTC VELAR_WSTX VELAR_UNIV2_FEES_SBTC_STX out1 min-out-velar))
                ERR_SWAP2))
    (out2 (get amt-out e2))
  )
    (try! (assert-min-profit amount-in out2 min-profit))
    (print { op: "amm-exec", route: "sBTC/STX:bitflow->velar-univ2", in: amount-in, out1: out1, out2: out2 })
    (ok (make-result "sBTC/STX:bitflow->velar-univ2" amount-in out1 out2))
  )
)

(define-public (exec-sbtc-stx__velar_univ2_to_bitflow
    (start-is-sbtc bool)
    (amount-in uint)
    (min-out-velar uint)
    (min-out-bitflow uint)
    (min-profit uint))
  (let (
    (e1 (unwrap! (if start-is-sbtc
                    (contract-call? 'SP20X3DC5R091J8B6YPQT638J8NR1W83KN6TN5BJY.univ2-pool-v1_0_0-0070 swap TOKEN_SBTC VELAR_WSTX VELAR_UNIV2_FEES_SBTC_STX amount-in min-out-velar)
                    (contract-call? 'SP20X3DC5R091J8B6YPQT638J8NR1W83KN6TN5BJY.univ2-pool-v1_0_0-0070 swap VELAR_WSTX TOKEN_SBTC VELAR_UNIV2_FEES_SBTC_STX amount-in min-out-velar))
                ERR_SWAP1))
    (out1 (get amt-out e1))
    (out2 (unwrap! (if start-is-sbtc
                      (contract-call? 'SM1793C4R5PZ4NS4VQ4WMP7SKKYVH8JZEWSZ9HCCR.xyk-core-v-1-2 swap-y-for-x BITFLOW_XYK_POOL_SBTC_STX TOKEN_SBTC BITFLOW_TOKEN_STX out1 min-out-bitflow)
                      (contract-call? 'SM1793C4R5PZ4NS4VQ4WMP7SKKYVH8JZEWSZ9HCCR.xyk-core-v-1-2 swap-x-for-y BITFLOW_XYK_POOL_SBTC_STX TOKEN_SBTC BITFLOW_TOKEN_STX out1 min-out-bitflow))
                  ERR_SWAP2))
  )
    (try! (assert-min-profit amount-in out2 min-profit))
    (print { op: "amm-exec", route: "sBTC/STX:velar-univ2->bitflow", in: amount-in, out1: out1, out2: out2 })
    (ok (make-result "sBTC/STX:velar-univ2->bitflow" amount-in out1 out2))
  )
)

;; ---------------------------------------------------------------------
;; USDh/aeUSDC: Bitflow StableSwap <-> Velar Curve pool
;; ---------------------------------------------------------------------

(define-constant BITFLOW_STABLESWAP_POOL_AEUSDC_USDH 'SM1793C4R5PZ4NS4VQ4WMP7SKKYVH8JZEWSZ9HCCR.stableswap-pool-aeusdc-usdh-v-1-2)
(define-constant TOKEN_USDH 'SPN5AKG35QZSK2M8GAMR4AFX45659RJHDW353HSG.usdh-token-v1)

(define-constant VELAR_CURVE_POOL_USDH_AEUSDC 'SP1Y5YSTAHZ88XYK1VPDH24GY0HPX5J4JECTMY4A1.curve-pool-v1_1_0-0001)
(define-constant VELAR_CURVE_FEES_USDH_AEUSDC 'SP1Y5YSTAHZ88XYK1VPDH24GY0HPX5J4JECTMY4A1.curve-fees-v1_1_0-0001)

(define-public (exec-usdh-aeusdc__bitflow_to_velar_curve
    (start-is-usdh bool)
    (amount-in uint)
    (min-out-bitflow uint)
    (min-out-velar uint)
    (min-profit uint))
  (let (
    (out1 (unwrap! (if start-is-usdh
                      (contract-call? 'SM1793C4R5PZ4NS4VQ4WMP7SKKYVH8JZEWSZ9HCCR.stableswap-core-v-1-2 swap-y-for-x BITFLOW_STABLESWAP_POOL_AEUSDC_USDH TOKEN_AEUSDC TOKEN_USDH amount-in min-out-bitflow)
                      (contract-call? 'SM1793C4R5PZ4NS4VQ4WMP7SKKYVH8JZEWSZ9HCCR.stableswap-core-v-1-2 swap-x-for-y BITFLOW_STABLESWAP_POOL_AEUSDC_USDH TOKEN_AEUSDC TOKEN_USDH amount-in min-out-bitflow))
                  ERR_SWAP1))
    (e2 (unwrap! (if start-is-usdh
                    (contract-call? 'SP1Y5YSTAHZ88XYK1VPDH24GY0HPX5J4JECTMY4A1.curve-pool-v1_1_0-0001 swap TOKEN_AEUSDC TOKEN_USDH VELAR_CURVE_FEES_USDH_AEUSDC out1 min-out-velar)
                    (contract-call? 'SP1Y5YSTAHZ88XYK1VPDH24GY0HPX5J4JECTMY4A1.curve-pool-v1_1_0-0001 swap TOKEN_USDH TOKEN_AEUSDC VELAR_CURVE_FEES_USDH_AEUSDC out1 min-out-velar))
                ERR_SWAP2))
    (out2 (get amt-out e2))
  )
    (try! (assert-min-profit amount-in out2 min-profit))
    (print { op: "amm-exec", route: "USDh/aeUSDC:bitflow->velar-curve", in: amount-in, out1: out1, out2: out2 })
    (ok (make-result "USDh/aeUSDC:bitflow->velar-curve" amount-in out1 out2))
  )
)

(define-public (exec-usdh-aeusdc__velar_curve_to_bitflow
    (start-is-usdh bool)
    (amount-in uint)
    (min-out-velar uint)
    (min-out-bitflow uint)
    (min-profit uint))
  (let (
    (e1 (unwrap! (if start-is-usdh
                    (contract-call? 'SP1Y5YSTAHZ88XYK1VPDH24GY0HPX5J4JECTMY4A1.curve-pool-v1_1_0-0001 swap TOKEN_USDH TOKEN_AEUSDC VELAR_CURVE_FEES_USDH_AEUSDC amount-in min-out-velar)
                    (contract-call? 'SP1Y5YSTAHZ88XYK1VPDH24GY0HPX5J4JECTMY4A1.curve-pool-v1_1_0-0001 swap TOKEN_AEUSDC TOKEN_USDH VELAR_CURVE_FEES_USDH_AEUSDC amount-in min-out-velar))
                ERR_SWAP1))
    (out1 (get amt-out e1))
    (out2 (unwrap! (if start-is-usdh
                      (contract-call? 'SM1793C4R5PZ4NS4VQ4WMP7SKKYVH8JZEWSZ9HCCR.stableswap-core-v-1-2 swap-x-for-y BITFLOW_STABLESWAP_POOL_AEUSDC_USDH TOKEN_AEUSDC TOKEN_USDH out1 min-out-bitflow)
                      (contract-call? 'SM1793C4R5PZ4NS4VQ4WMP7SKKYVH8JZEWSZ9HCCR.stableswap-core-v-1-2 swap-y-for-x BITFLOW_STABLESWAP_POOL_AEUSDC_USDH TOKEN_AEUSDC TOKEN_USDH out1 min-out-bitflow))
                  ERR_SWAP2))
  )
    (try! (assert-min-profit amount-in out2 min-profit))
    (print { op: "amm-exec", route: "USDh/aeUSDC:velar-curve->bitflow", in: amount-in, out1: out1, out2: out2 })
    (ok (make-result "USDh/aeUSDC:velar-curve->bitflow" amount-in out1 out2))
  )
)

Functions (8)

FunctionAccessArgs
assert-min-profitprivateamount-in: uint, amount-out: uint, min-profit: uint
make-resultprivateroute: (string-ascii 64
exec-stx-aeusdc__bitflow_to_velar_v1publicstart-is-stx: bool, amount-in: uint, min-out-bitflow: uint, velar-amt-out: uint, min-profit: uint
exec-stx-aeusdc__velar_v1_to_bitflowpublicstart-is-stx: bool, amount-in: uint, velar-amt-out: uint, min-out-bitflow: uint, min-profit: uint
exec-sbtc-stx__bitflow_to_velar_univ2publicstart-is-sbtc: bool, amount-in: uint, min-out-bitflow: uint, min-out-velar: uint, min-profit: uint
exec-sbtc-stx__velar_univ2_to_bitflowpublicstart-is-sbtc: bool, amount-in: uint, min-out-velar: uint, min-out-bitflow: uint, min-profit: uint
exec-usdh-aeusdc__bitflow_to_velar_curvepublicstart-is-usdh: bool, amount-in: uint, min-out-bitflow: uint, min-out-velar: uint, min-profit: uint
exec-usdh-aeusdc__velar_curve_to_bitflowpublicstart-is-usdh: bool, amount-in: uint, min-out-velar: uint, min-out-bitflow: uint, min-profit: uint