Source Code

;;
;; lqstx-mint-registry
;;

(use-trait sip-010-trait .sip-010-trait.sip-010-trait)

(define-constant err-unauthorised (err u1000))
(define-constant err-unknown-request-id (err u1008))

(define-constant PENDING 0x00)
(define-constant FINALIZED 0x01)
(define-constant REVOKED 0x02)

(define-data-var mint-request-nonce uint u0)
(define-data-var burn-request-nonce uint u0)

(define-map mint-requests uint { requested-by: principal, amount: uint, requested-at: uint, status: (buff 1) })
(define-map burn-requests uint { requested-by: principal, amount: uint, wrapped-amount: uint, requested-at: uint, status: (buff 1) })

(define-map mint-requests-pending principal (list 1000 uint))
(define-map burn-requests-pending principal (list 1000 uint))

(define-data-var mint-requests-pending-amount uint u0)

;; read-only calls

(define-read-only (is-dao-or-extension)
	(ok (asserts! (or (is-eq tx-sender .lisa-dao) (contract-call? .lisa-dao is-extension contract-caller)) err-unauthorised)))
	
(define-read-only (get-mint-request-nonce)
	(var-get mint-request-nonce))

(define-read-only (get-burn-request-nonce)
	(var-get burn-request-nonce))

(define-read-only (get-mint-request-or-fail (request-id uint))
	(ok (unwrap! (map-get? mint-requests request-id) err-unknown-request-id)))

(define-read-only (get-burn-request-or-fail (request-id uint))
	(ok (unwrap! (map-get? burn-requests request-id) err-unknown-request-id)))	

(define-read-only (get-mint-requests-pending-or-default (user principal))
    (default-to (list ) (map-get? mint-requests-pending user)))

(define-read-only (get-burn-requests-pending-or-default (user principal))
    (default-to (list ) (map-get? burn-requests-pending user)))

(define-read-only (get-mint-requests-pending-amount)
    (var-get mint-requests-pending-amount))

;; governance calls

(define-public (set-mint-request (request-id uint) (details { requested-by: principal, amount: uint, requested-at: uint, status: (buff 1) }))
	(let
		(
			(next-nonce (+ (var-get mint-request-nonce) u1))
			(id (if (is-some (map-get? mint-requests request-id)) request-id (begin (var-set mint-request-nonce next-nonce) next-nonce)))
		)
		(try! (is-dao-or-extension))
		(map-set mint-requests id details)
		(ok id)))

(define-public (set-burn-request (request-id uint) (details { requested-by: principal, amount: uint, wrapped-amount: uint, requested-at: uint, status: (buff 1) }))
	(let
		(
			(next-nonce (+ (var-get burn-request-nonce) u1))
			(id (if (is-some (map-get? burn-requests request-id)) request-id (begin (var-set burn-request-nonce next-nonce) next-nonce)))
		)
		(try! (is-dao-or-extension))
		(map-set burn-requests id details)
		(ok id)))	

(define-public (set-mint-requests-pending (requested-by principal) (new-list (list 1000 uint)))
	(begin 
		(try! (is-dao-or-extension))
		(ok (map-set mint-requests-pending requested-by new-list))))

(define-public (set-burn-requests-pending (requested-by principal) (new-list (list 1000 uint)))
	(begin 
		(try! (is-dao-or-extension))
		(ok (map-set burn-requests-pending requested-by new-list))))

(define-public (set-mint-requests-pending-amount (new-amount uint))
	(begin 
		(try! (is-dao-or-extension))
		(ok (var-set mint-requests-pending-amount new-amount))))

(define-public (transfer (amount uint) (recipient principal) (token-trait <sip-010-trait>))
    (begin 
        (try! (is-dao-or-extension))
        (as-contract (contract-call? token-trait transfer amount tx-sender recipient none))))

(define-public (stx-transfer (amount uint) (recipient principal))
	(begin 
		(try! (is-dao-or-extension))
		(as-contract (stx-transfer? amount tx-sender recipient))))

Functions (13)

FunctionAccessArgs
is-dao-or-extensionread-only
get-mint-request-nonceread-only
get-burn-request-nonceread-only
get-mint-request-or-failread-onlyrequest-id: uint
get-burn-request-or-failread-onlyrequest-id: uint
get-mint-requests-pending-or-defaultread-onlyuser: principal
get-burn-requests-pending-or-defaultread-onlyuser: principal
get-mint-requests-pending-amountread-only
set-mint-requests-pendingpublicrequested-by: principal, new-list: (list 1000 uint
set-burn-requests-pendingpublicrequested-by: principal, new-list: (list 1000 uint
set-mint-requests-pending-amountpublicnew-amount: uint
transferpublicamount: uint, recipient: principal, token-trait: <sip-010-trait>
stx-transferpublicamount: uint, recipient: principal