Source Code


;; DeFi Liquidity Pool Tracker
(define-constant CONTRACT-OWNER tx-sender)
(define-constant ERR-NOT-AUTHORIZED (err u1))

(define-data-var pool-count uint u0)
(define-map pools uint {token-a: (string-ascii 10), token-b: (string-ascii 10), reserve-a: uint, reserve-b: uint, lp-supply: uint})
(define-map lp-balances {pool: uint, owner: principal} uint)

(define-public (create-pool (token-a (string-ascii 10)) (token-b (string-ascii 10)) (amount-a uint) (amount-b uint))
  (let ((id (var-get pool-count)))
    (map-set pools id {token-a: token-a, token-b: token-b, reserve-a: amount-a, reserve-b: amount-b, lp-supply: amount-a})
    (map-set lp-balances {pool: id, owner: tx-sender} amount-a)
    (var-set pool-count (+ id u1))
    (ok id)))

(define-public (add-liquidity (pool-id uint) (amount-a uint) (amount-b uint))
  (let ((p (unwrap! (map-get? pools pool-id) ERR-NOT-AUTHORIZED))
        (lp-amount (/ (* amount-a (get lp-supply p)) (get reserve-a p))))
    (map-set pools pool-id (merge p {
      reserve-a: (+ (get reserve-a p) amount-a),
      reserve-b: (+ (get reserve-b p) amount-b),
      lp-supply: (+ (get lp-supply p) lp-amount)}))
    (map-set lp-balances {pool: pool-id, owner: tx-sender}
      (+ (default-to u0 (map-get? lp-balances {pool: pool-id, owner: tx-sender})) lp-amount))
    (ok lp-amount)))

(define-read-only (get-pool (id uint))
  (map-get? pools id))

(define-read-only (get-lp-balance (pool-id uint) (owner principal))
  (default-to u0 (map-get? lp-balances {pool: pool-id, owner: owner})))

(define-read-only (get-pool-count)
  (var-get pool-count))

Functions (5)

FunctionAccessArgs
create-poolpublictoken-a: (string-ascii 10
add-liquiditypublicpool-id: uint, amount-a: uint, amount-b: uint
get-poolread-onlyid: uint
get-lp-balanceread-onlypool-id: uint, owner: principal
get-pool-countread-only