Source Code

;; title: TokenManager
;; version: 1.0.0
;; summary: Manages supported tokens for PiggyBank system
;; description: Allows adding and removing supported tokens (STX and fungible tokens)

(define-constant ERR-UNAUTHORIZED (err u3001))
(define-constant ERR-TOKEN-EXISTS (err u3002))
(define-constant ERR-TOKEN-NOT-FOUND (err u3003))

;; Data vars
(define-data-var owner principal tx-sender)

;; Data maps
(define-map supported-tokens { token: principal } bool)

;; Public functions

;; Add a supported token (only owner)
(define-public (add-supported-token (token principal))
    (begin
        (asserts! (is-eq tx-sender (var-get owner)) ERR-UNAUTHORIZED)
        (let ((exists (default-to false (map-get? supported-tokens { token: token }))))
            (asserts! (not exists) ERR-TOKEN-EXISTS)
            (map-set supported-tokens { token: token } true)
            (ok true)
        )
    )
)

;; Remove a supported token (only owner)
(define-public (remove-supported-token (token principal))
    (begin
        (asserts! (is-eq tx-sender (var-get owner)) ERR-UNAUTHORIZED)
        (let ((exists (default-to false (map-get? supported-tokens { token: token }))))
            (asserts! exists ERR-TOKEN-NOT-FOUND)
            (map-delete supported-tokens { token: token })
            (ok true)
        )
    )
)

;; Transfer ownership (only owner)
(define-public (transfer-ownership (new-owner principal))
    (begin
        (asserts! (is-eq tx-sender (var-get owner)) ERR-UNAUTHORIZED)
        (var-set owner new-owner)
        (ok true)
    )
)

;; Read-only functions

;; Check if a token is supported
(define-read-only (is-token-supported (token principal))
    (ok (default-to false (map-get? supported-tokens { token: token })))
)

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

Functions (5)

FunctionAccessArgs
add-supported-tokenpublictoken: principal
remove-supported-tokenpublictoken: principal
transfer-ownershippublicnew-owner: principal
is-token-supportedread-onlytoken: principal
get-ownerread-only