Source Code


    (impl-trait 'SP3FBR2AGK5H9QBDH3EEN6DF8EK8JY7RX8QJ5SVTE.sip-010-trait-ft-standard.sip-010-trait)

    (define-constant OWNER tx-sender)
    (define-constant MINT-AUTHORITY 'SPTSC1VVBT6AWAB1HMQ94CTNSTPZY6R1FZ40XK5J.swap-core)

    (define-constant err-not-contract-owner (err u1001))
    (define-constant err-not-token-owner (err u1002))
    (define-constant err-not-mint-authority (err u1003))
    (define-constant err-get-balance (err u2001))
    (define-constant err-get-total-supply (err u2002))
    (define-constant err-token-not-enough (err u3001))

    (define-data-var token-uri (optional (string-utf8 256)) (some u"https://memefun.s3.ap-northeast-1.amazonaws.com/metadata/6wjvsutz8fqqbeyw8lzwzmf0uej4m0fh.json?"))
    (define-map lp-balance-map {pool-id: uint, provider: principal} uint)
    (define-map lp-supply-map uint uint)
    (define-fungible-token lp-token)


    (define-read-only (get-name) (ok "memecrazy-lp-token")) 
    (define-read-only (get-symbol) (ok "memecrazy-lp-token"))
    (define-read-only (get-decimals) (ok u6))
    (define-read-only (get-token-uri)
        (ok (var-get token-uri)))
    (define-read-only (lp-get-balance (pool-id uint) (who principal))
        (ok (default-to u0 (map-get? lp-balance-map {pool-id: pool-id, provider: who}))))
    (define-read-only (lp-get-total-supply (pool-id uint))
        (ok (default-to u0 (map-get? lp-supply-map pool-id))))

    (define-public (set-token-uri (uri (string-utf8 256)))
        (begin
            (asserts! (is-eq tx-sender OWNER) err-not-contract-owner)
            (var-set token-uri (some uri))
            (ok uri)
        )
    )

    (define-public (lp-transfer (pool-id uint) (amount uint) (sender principal) (recipient principal) (memo (optional (buff 34)))) 
        (let ((sender-balance (unwrap! (lp-get-balance pool-id sender) err-get-balance))
              (recipient-balance (unwrap! (lp-get-balance pool-id recipient) err-get-balance)))
            
            (asserts! (is-eq sender tx-sender) err-not-token-owner)
            (asserts! (>= sender-balance amount) err-token-not-enough)

            (try! (ft-transfer? lp-token amount sender recipient))
            (map-set lp-balance-map {pool-id: pool-id, provider: sender} (- sender-balance amount))
            (map-set lp-balance-map {pool-id: pool-id, provider: recipient} (+ recipient-balance amount))
            (match memo to-print (print to-print) 0x)
            (ok true)
        )
    )

    (define-public (lp-mint (pool-id uint) (amount uint) (provider principal)) 
        (let ((provider-balance (unwrap! (lp-get-balance pool-id provider) err-get-balance))
              (pool-total-supply (unwrap! (lp-get-total-supply pool-id) err-get-total-supply)))
            
            (asserts! (is-eq tx-sender MINT-AUTHORITY) err-not-mint-authority)
            
            (try! (ft-mint? lp-token amount provider))
            (map-set lp-balance-map {pool-id: pool-id, provider: provider} (+ amount provider-balance))
            (map-set lp-supply-map pool-id (+ amount pool-total-supply))

            (ok true)
        )
    )

    (define-public (lp-burn (pool-id uint) (amount uint) (provider principal)) 
        (let ((provider-balance (unwrap! (lp-get-balance pool-id provider) err-get-balance))
              (pool-total-supply (unwrap! (lp-get-total-supply pool-id) err-get-total-supply)))
            
            (asserts! (is-eq tx-sender provider) err-not-token-owner)
            (asserts! (>= provider-balance amount) err-token-not-enough)

            (try! (ft-burn? lp-token amount provider))  
            (map-set lp-balance-map {pool-id: pool-id, provider: provider} (- provider-balance amount)) 
            (map-set lp-supply-map pool-id (- pool-total-supply amount)) 

            (ok true)
        )
    )


    (define-read-only (get-balance (who principal))
        (ok (ft-get-balance lp-token who)))
    (define-read-only (get-total-supply)
        (ok (ft-get-supply lp-token)))
    (define-public (transfer (amount uint) (sender principal) (recipient principal) (memo (optional (buff 34)))) 
        (begin
            (print "Can't transfer without pool-id! Use lp-transfer instead.")
            (ok true)
        )
    )
    

Functions (13)

FunctionAccessArgs
get-nameread-only
get-symbolread-only
get-decimalsread-only
get-token-uriread-only
lp-get-balanceread-onlypool-id: uint, who: principal
lp-get-total-supplyread-onlypool-id: uint
set-token-uripublicuri: (string-utf8 256
lp-transferpublicpool-id: uint, amount: uint, sender: principal, recipient: principal, memo: (optional (buff 34
lp-mintpublicpool-id: uint, amount: uint, provider: principal
lp-burnpublicpool-id: uint, amount: uint, provider: principal
get-balanceread-onlywho: principal
get-total-supplyread-only
transferpublicamount: uint, sender: principal, recipient: principal, memo: (optional (buff 34