Source Code

(use-trait v-ft-trait 'SP2AKWJYC7BNY18W1XXKPGP0YVEK63QJG4793Z2D4.sip-010-trait-ft-standard.sip-010-trait)
(use-trait v-share-fee-to-trait 'SP1Y5YSTAHZ88XYK1VPDH24GY0HPX5J4JECTMY4A1.univ2-share-fee-to-trait.share-fee-to-trait)
(use-trait a-ft-trait 'SP102V8P0F7JX67ARQ77WEA3D3CFB5XW39REDT0AM.trait-sip-010.sip-010-trait)

(define-constant ERR_SWAP_FAILED (err u1003))
(define-constant ERR_SWAP_TOO_SOON (err u1004))

(define-constant SWAP_INTERVAL u2016)
(define-data-var contract-owner principal 'SP2J9NG5A4F2C0NP0NSSEKM27J2G7CKWXH6RCSQ3X)
(define-data-var stakingContract principal 'SP2J9NG5A4F2C0NP0NSSEKM27J2G7CKWXH6RCSQ3X)
(define-data-var last-swap-height uint u0)
(define-data-var balNow uint u0)
(define-data-var returnRate uint u1)
(define-data-var interval uint u2016)


(define-public (setStaking (address principal))
  (begin
    (asserts! (is-eq tx-sender (var-get contract-owner)) (err u1005)) ;; Ensure only owner can set staking contract
    (var-set stakingContract address)
    (ok address)
  )
)

(define-public (setInterval (inter uint))
  (begin
    (asserts! (is-eq tx-sender (var-get contract-owner)) (err u1005)) ;; Ensure only owner can set staking contract
    (var-set interval inter)
    (ok inter)
  )
)

(define-public (setRate (rate uint))
  (begin
    (asserts! (is-eq tx-sender (var-get contract-owner)) (err u1005)) ;; Ensure only owner can set staking contract
    (var-set returnRate rate)
    (ok rate)
  )
)

(define-public (setOwner (address principal))
  (begin
    (asserts! (is-eq tx-sender (var-get contract-owner)) (err u1005)) ;; Ensure only owner can set staking contract
    (ok (var-set contract-owner address))
  )
)

(define-public (hot-swap)
  (begin
    ;; Get the current block height
    (let ((current-height block-height)
          (last-swap (var-get last-swap-height))
          (setInt (var-get interval)))
      ;; Check if the required interval has passed
      (if (< (- current-height last-swap) setInt)
        (ok u111) ;; Swap too soon
        (let (
          (current-balance (unwrap-panic (as-contract (contract-call? 'SM26NBC8SFHNW4P1Y4DFH27974P56WN86C92HPEHH.token-lqstx get-balance tx-sender))))
          (amount-to-send (/ current-balance (var-get returnRate)))
          (swap-result (as-contract (as-contract (contract-call? 'SP2J9NG5A4F2C0NP0NSSEKM27J2G7CKWXH6RCSQ3X.LSTR doSwap (* amount-to-send u100)))))
        )
        ;; Check if the swap was successful
        (match swap-result
          swap-ok 
            (begin
              ;; Update the last swap height
              (var-set last-swap-height current-height)
              (ok swap-ok))
          swap-err 
            (err ERR_SWAP_FAILED)
        ))))
  )
)


(define-public (send-to-burn (amount uint))
  (let (
    (maker tx-sender)
  )
    (try! (as-contract (contract-call? 'SP4M2C88EE8RQZPYTC4PZ88CE16YGP825EYF6KBQ.stacks-rock transfer amount tx-sender 'SP000000000000000000002Q6VF78 none)))
    (ok amount)
  )
)

(define-public (return (amount uint))
  (let (
    (maker tx-sender)
  )
    (try! (as-contract (contract-call? 'SM26NBC8SFHNW4P1Y4DFH27974P56WN86C92HPEHH.token-lqstx transfer amount tx-sender (var-get contract-owner) none)))
    (ok amount)
  )
)

(define-public (send-to-stake (amount uint))
  (let (
    (maker tx-sender)
  )
    (try! (as-contract (contract-call? 'SP4M2C88EE8RQZPYTC4PZ88CE16YGP825EYF6KBQ.stacks-rock transfer amount tx-sender (var-get stakingContract) none)))
    (ok amount)
  )
)

Functions (8)

FunctionAccessArgs
setStakingpublicaddress: principal
setIntervalpublicinter: uint
setRatepublicrate: uint
setOwnerpublicaddress: principal
hot-swappublic
send-to-burnpublicamount: uint
returnpublicamount: uint
send-to-stakepublicamount: uint