usda-aeusdc-migration-helper-v-1-1

SPQC38PW542EQJ5M11CR25P7BS1CA6QT4TBXGB3M

Source Code

;; usda-aeusdc-migration-helper-v-1-1

(define-constant ERR_NOT_AUTHORIZED (err "ERR_NOT_AUTHORIZED"))
(define-constant ERR_INVALID_AMOUNT (err "ERR_INVALID_AMOUNT"))
(define-constant ERR_MIGRATION_STATUS (err "ERR_MIGRATION_STATUS"))
(define-constant ERR_WITHDRAW_LIQUIDITY_FAILED (err "ERR_WITHDRAW_LIQUIDITY_FAILED"))
(define-constant ERR_ADD_LIQUIDITY_FAILED (err "ERR_ADD_LIQUIDITY_FAILED"))
(define-constant ERR_TOKEN_TRANSFER_FAILED (err "ERR_TOKEN_TRANSFER_FAILED"))

(define-data-var contract-owner principal tx-sender)
(define-data-var migration-status bool true)

(define-map user-extra-amount principal uint)

(define-read-only (get-contract-owner)
  (ok (var-get contract-owner))
)

(define-read-only (get-migration-status)
  (ok (var-get migration-status))
)

(define-read-only (get-user-extra-amount (user principal))
  (ok (default-to u0 (map-get? user-extra-amount user)))
)

(define-public (set-contract-owner (owner principal))
  (let (
    (caller tx-sender)
  )
    (begin
      (asserts! (is-eq caller (var-get contract-owner)) ERR_NOT_AUTHORIZED)
      (var-set contract-owner owner)
      (print {action: "set-contract-owner", caller: caller, data: {owner: owner}})
      (ok true)
    )
  )
)

(define-public (set-migration-status (status bool))
  (let (
    (caller tx-sender)
  )
    (begin
      (asserts! (is-eq caller (var-get contract-owner)) ERR_NOT_AUTHORIZED)
      (var-set migration-status status)
      (print {action: "set-migration-status", caller: caller, data: {status: status}})
      (ok true)
    )
  )
)

(define-public (set-user-extra-amount (user principal) (amount uint))
  (let (
    (caller tx-sender)
  )
    (begin
      (asserts! (is-eq caller (var-get contract-owner)) ERR_NOT_AUTHORIZED)
      (map-set user-extra-amount user amount)
      (print {action: "set-user-extra-amount", caller: caller, data: {user: user, amount: amount}})
      (ok true)
    )
  )
)

(define-public (withdraw-lp-tokens (amount uint) (recipient principal))
  (let (
    (caller tx-sender)
  )
    (begin
      (asserts! (is-eq caller (var-get contract-owner)) ERR_NOT_AUTHORIZED)
      (asserts! (> amount u0) ERR_INVALID_AMOUNT)
      (unwrap! (as-contract (contract-call? 'SPQC38PW542EQJ5M11CR25P7BS1CA6QT4TBXGB3M.usda-aeusdc-lp-token-v-1-4 transfer amount tx-sender recipient none)) ERR_TOKEN_TRANSFER_FAILED)
      (print {action: "withdraw-lp-tokens", caller: caller, data: {amount: amount, recipient: recipient}})
      (ok true)
    )
  )
)

(define-public (migrate-liquidity (amount uint))
  (let (
    (extra (default-to u0 (map-get? user-extra-amount tx-sender)))
    (withdraw (unwrap! (withdraw-liquidity amount) ERR_WITHDRAW_LIQUIDITY_FAILED))
    (x-amount (get withdrawal-x-balance withdraw))
    (y-amount (get withdrawal-y-balance withdraw))
    (add (unwrap! (add-liquidity x-amount y-amount) ERR_ADD_LIQUIDITY_FAILED))
    (caller tx-sender)
  )
    (begin
      (asserts! (> amount u0) ERR_INVALID_AMOUNT)
      (asserts! (is-eq (var-get migration-status) true) ERR_MIGRATION_STATUS)

      (if (> extra u0)
        (unwrap! (as-contract (contract-call? 'SPQC38PW542EQJ5M11CR25P7BS1CA6QT4TBXGB3M.usda-aeusdc-lp-token-v-1-4 transfer extra tx-sender caller none)) ERR_TOKEN_TRANSFER_FAILED)
        false
      )

      (map-set user-extra-amount caller u0)
      (print {action: "migrate-liquidity", caller: caller, data: {amount: amount, x-amount: x-amount, y-amount: y-amount, add: add, extra: extra}})
      (ok true)
    )
  )
)

(define-public (set-user-extra-amount-multi (users (list 120 principal)) (amounts (list 120 uint)))
  (ok (map set-user-extra-amount users amounts))
)

(define-private (add-liquidity (x-amount uint) (y-amount uint))
  (let (
    (call (try! (contract-call?
          'SPQC38PW542EQJ5M11CR25P7BS1CA6QT4TBXGB3M.stableswap-usda-aeusdc-v-1-4 add-liquidity
          'SP2C2YFP12AJZB4MABJBAJ55XECVS7E4PMMZ89YZR.usda-token
          'SP3Y2ZSH8P7D50B0VBTSX11S7XSG24M1VB9YFQA4K.token-aeusdc
          'SPQC38PW542EQJ5M11CR25P7BS1CA6QT4TBXGB3M.usda-aeusdc-lp-token-v-1-4
          x-amount y-amount u0)))
  )
    (ok call)
  )
)

(define-private (withdraw-liquidity (amount uint))
  (let (
    (call (try! (contract-call?
          'SPQC38PW542EQJ5M11CR25P7BS1CA6QT4TBXGB3M.stableswap-usda-aeusdc-v-1-2 withdraw-liquidity
          'SP2C2YFP12AJZB4MABJBAJ55XECVS7E4PMMZ89YZR.usda-token
          'SP3Y2ZSH8P7D50B0VBTSX11S7XSG24M1VB9YFQA4K.token-aeusdc
          'SPQC38PW542EQJ5M11CR25P7BS1CA6QT4TBXGB3M.usda-aeusdc-lp-token-v-1-2
          amount u0 u0)))
  )
    (ok call)
  )
)

Functions (11)

FunctionAccessArgs
get-contract-ownerread-only
get-migration-statusread-only
get-user-extra-amountread-onlyuser: principal
set-contract-ownerpublicowner: principal
set-migration-statuspublicstatus: bool
set-user-extra-amountpublicuser: principal, amount: uint
withdraw-lp-tokenspublicamount: uint, recipient: principal
migrate-liquiditypublicamount: uint
set-user-extra-amount-multipublicusers: (list 120 principal
add-liquidityprivatex-amount: uint, y-amount: uint
withdraw-liquidityprivateamount: uint