Source Code

;; bridge-adapter-aeusdc-stx-v-1-1

(use-trait x-pool-trait 'SM1793C4R5PZ4NS4VQ4WMP7SKKYVH8JZEWSZ9HCCR.xyk-pool-trait-v-1-1.xyk-pool-trait)
(use-trait x-ft-trait 'SM1793C4R5PZ4NS4VQ4WMP7SKKYVH8JZEWSZ9HCCR.sip-010-trait-ft-standard-v-1-1.sip-010-trait)

(define-constant ERR_NOT_AUTHORIZED (err u1001))
(define-constant ERR_INVALID_AMOUNT (err u1002))
(define-constant ERR_MINIMUM_RECEIVED (err u4002))
(define-constant ERR_SWAP_A (err u5001))
(define-constant ERR_KEEPER_NOT_AUTHORIZED (err u8001))
(define-constant ERR_TOKEN_TRANSFER_FAILED (err u8002))

(define-data-var owner-address principal 'SPEXN2X0M0CJ55K8GAJZEEH3A0JP64ZE7XD9XMKY)
(define-data-var keeper-address principal 'SPEXN2X0M0CJ55K8GAJZEEH3A0JP64ZE7XD9XMKY)

(define-data-var keeper-authorized bool true)

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

(define-read-only (get-keeper-address)
  (ok (var-get keeper-address))
)

(define-read-only (get-keeper-authorized)
  (ok (var-get keeper-authorized))
)

(define-public (swap-helper-a (amount uint) (min-received uint))
  (let (
    (swap-a (unwrap! (as-contract (xyk-sb
                                  amount
                                  'SM1793C4R5PZ4NS4VQ4WMP7SKKYVH8JZEWSZ9HCCR.xyk-pool-stx-aeusdc-v-1-1
                                  'SM1793C4R5PZ4NS4VQ4WMP7SKKYVH8JZEWSZ9HCCR.token-stx-v-1-1
                                  'SP3Y2ZSH8P7D50B0VBTSX11S7XSG24M1VB9YFQA4K.token-aeusdc)) ERR_SWAP_A))
    (transfer-a (try! (as-contract (transfer-stx swap-a tx-sender (var-get owner-address)))))
    (caller tx-sender)
  )
    (begin
      (asserts! (is-owner-or-keeper) ERR_NOT_AUTHORIZED)
      (asserts! (is-keeper-authorized) ERR_KEEPER_NOT_AUTHORIZED)
      (asserts! (> amount u0) ERR_INVALID_AMOUNT)
      (asserts! (>= swap-a min-received) ERR_MINIMUM_RECEIVED)
      (print {
        action: "swap-helper-a",
        caller: caller,
        data: {
          amount: amount,
          min-received: min-received,
          owner-address: (var-get owner-address),
          keeper-address: (var-get keeper-address),
          swap-a: swap-a,
          transfer-a: transfer-a
        }
      })
      (ok true)
    )
  )
)

(define-public (withdraw-token (amount uint) (recipient principal))
  (let (
    (caller tx-sender)
  )
    (begin
      (asserts! (is-eq caller (var-get owner-address)) ERR_NOT_AUTHORIZED)
      (try! (as-contract (transfer-aeusdc amount tx-sender recipient)))
      (print {action: "withdraw-token", caller: caller, data: {amount: amount, recipient: recipient}})
      (ok true)
    )
  )
)

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

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

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

(define-private (xyk-sb
    (amount uint)
    (pool-trait <x-pool-trait>)
    (a-token <x-ft-trait>) (b-token <x-ft-trait>)
  )
  (let (
    (swap-a (try! (contract-call?
                  'SM1793C4R5PZ4NS4VQ4WMP7SKKYVH8JZEWSZ9HCCR.xyk-core-v-1-1 swap-y-for-x
                  pool-trait
                  a-token b-token
                  amount u1)))
  )
    (ok swap-a)
  )
)

(define-private (transfer-aeusdc (amount uint) (sender principal) (recipient principal))
  (let (
    (call-a (unwrap! (contract-call?
                     'SP3Y2ZSH8P7D50B0VBTSX11S7XSG24M1VB9YFQA4K.token-aeusdc transfer
                     amount sender recipient none) ERR_TOKEN_TRANSFER_FAILED))
  )
    (ok call-a)
  )
)

(define-private (transfer-stx (amount uint) (sender principal) (recipient principal))
  (let (
    (call-a (unwrap! (contract-call?
                     'SM1793C4R5PZ4NS4VQ4WMP7SKKYVH8JZEWSZ9HCCR.token-stx-v-1-1 transfer
                     amount sender recipient none) ERR_TOKEN_TRANSFER_FAILED))
  )
    (ok call-a)
  )
)

(define-private (is-owner-or-keeper)
  (or (is-eq tx-sender (var-get owner-address)) (is-eq tx-sender (var-get keeper-address)))
)

(define-private (is-keeper-authorized)
  (or (is-eq (var-get keeper-authorized) true) (is-eq tx-sender (var-get owner-address)))
)

Functions (12)

FunctionAccessArgs
get-keeper-authorizedread-only
get-keeper-addressread-only
get-owner-addressread-only
swap-helper-apublicamount: uint, min-received: uint
withdraw-tokenpublicamount: uint, recipient: principal
set-owner-addresspublicowner: principal
set-keeper-addresspublicaddress: principal
set-keeper-authorizedpublicauthorized: bool
transfer-aeusdcprivateamount: uint, sender: principal, recipient: principal
transfer-stxprivateamount: uint, sender: principal, recipient: principal
is-owner-or-keeperprivate
is-keeper-authorizedprivate