mirror of
https://github.com/zhigang1992/liquid-stacking.git
synced 2026-04-30 13:02:37 +08:00
feat: use nft owner
This commit is contained in:
@@ -23,12 +23,12 @@
|
||||
(define-data-var ipfs-root (string-ascii 80) "")
|
||||
(define-data-var metadata-frozen bool false)
|
||||
|
||||
(define-public (mint (id uint) (amount uint))
|
||||
(let ((current-balance (get-balance tx-sender)))
|
||||
(define-public (mint (id uint) (amount uint) (recipient principal))
|
||||
(let ((current-balance (get-balance recipient)))
|
||||
(try! (is-dao-or-extension))
|
||||
(var-set last-id id)
|
||||
(map-set token-count tx-sender (+ current-balance u1))
|
||||
(nft-mint? li-stx-burn id tx-sender)))
|
||||
(map-set token-count recipient (+ current-balance u1))
|
||||
(nft-mint? li-stx-burn id recipient)))
|
||||
|
||||
(define-public (burn (token-id uint))
|
||||
(let ((owner (unwrap! (nft-get-owner? li-stx-burn token-id) err-not-found))
|
||||
|
||||
@@ -23,12 +23,12 @@
|
||||
(define-data-var ipfs-root (string-ascii 80) "")
|
||||
(define-data-var metadata-frozen bool false)
|
||||
|
||||
(define-public (mint (id uint) (amount uint))
|
||||
(let ((current-balance (get-balance tx-sender)))
|
||||
(define-public (mint (id uint) (amount uint) (recipient principal))
|
||||
(let ((current-balance (get-balance recipient)))
|
||||
(try! (is-dao-or-extension))
|
||||
(var-set last-id id)
|
||||
(map-set token-count tx-sender (+ current-balance u1))
|
||||
(nft-mint? li-stx-mint id tx-sender)))
|
||||
(map-set token-count recipient (+ current-balance u1))
|
||||
(nft-mint? li-stx-mint id recipient)))
|
||||
|
||||
(define-public (burn (token-id uint))
|
||||
(let ((owner (unwrap! (nft-get-owner? li-stx-mint token-id) err-not-found))
|
||||
|
||||
@@ -72,6 +72,12 @@
|
||||
(define-read-only (get-burn-request-or-fail-many (request-ids (list 1000 uint)))
|
||||
(ok (map get-burn-request-or-fail request-ids)))
|
||||
|
||||
(define-read-only (get-owner-mint-nft (id uint))
|
||||
(contract-call? .li-stx-mint-nft get-owner id))
|
||||
|
||||
(define-read-only (get-owner-burn-nft (id uint))
|
||||
(contract-call? .li-stx-burn-nft get-owner id))
|
||||
|
||||
(define-read-only (validate-mint-request (request-id uint))
|
||||
(let (
|
||||
(request-details (try! (contract-call? .lqstx-mint-registry get-mint-request-or-fail request-id)))
|
||||
@@ -125,7 +131,7 @@
|
||||
(try! (stx-transfer? amount sender .lqstx-vault))
|
||||
(try! (contract-call? .lqstx-mint-registry set-mint-requests-pending-amount (+ (get-mint-requests-pending-amount) amount)))
|
||||
(try! (contract-call? .lqstx-mint-registry set-mint-requests-pending sender (unwrap-panic (as-max-len? (append (get-mint-requests-pending-or-default sender) request-id) u1000))))
|
||||
(try! (contract-call? .li-stx-mint-nft mint request-id amount))
|
||||
(try! (contract-call? .li-stx-mint-nft mint request-id amount sender))
|
||||
(print { type: "mint-request", id: request-id, details: request-details })
|
||||
(ok request-id)))
|
||||
|
||||
@@ -133,11 +139,12 @@
|
||||
(let (
|
||||
(request-details (try! (get-mint-request-or-fail request-id)))
|
||||
(mint-requests (get-mint-requests-pending-or-default (get requested-by request-details)))
|
||||
(recipient (unwrap! (unwrap-panic (get-owner-mint-nft request-id)) err-request-finalized-or-revoked))
|
||||
(request-id-idx (unwrap! (index-of? mint-requests request-id) err-request-finalized-or-revoked)))
|
||||
(try! (is-not-paused-or-fail))
|
||||
(asserts! (is-eq tx-sender (get requested-by request-details)) err-unauthorised)
|
||||
(asserts! (is-eq tx-sender recipient) err-unauthorised)
|
||||
(asserts! (is-eq PENDING (get status request-details)) err-request-finalized-or-revoked)
|
||||
(try! (contract-call? .lqstx-vault proxy-call .stx-transfer-proxy (unwrap-panic (to-consensus-buff? { ustx: (get amount request-details), recipient: (get requested-by request-details) }))))
|
||||
(try! (contract-call? .lqstx-vault proxy-call .stx-transfer-proxy (unwrap-panic (to-consensus-buff? { ustx: (get amount request-details), recipient: recipient }))))
|
||||
(try! (contract-call? .lqstx-mint-registry set-mint-request request-id (merge request-details { status: REVOKED })))
|
||||
(try! (contract-call? .lqstx-mint-registry set-mint-requests-pending-amount (- (get-mint-requests-pending-amount) (get amount request-details))))
|
||||
(try! (contract-call? .lqstx-mint-registry set-mint-requests-pending (get requested-by request-details) (pop mint-requests request-id-idx)))
|
||||
@@ -148,14 +155,15 @@
|
||||
(let (
|
||||
(request-details (try! (get-burn-request-or-fail request-id)))
|
||||
(burn-requests (get-burn-requests-pending-or-default (get requested-by request-details)))
|
||||
(recipient (unwrap! (unwrap-panic (get-owner-burn-nft request-id)) err-request-finalized-or-revoked))
|
||||
(request-id-idx (unwrap! (index-of? burn-requests request-id) err-request-finalized-or-revoked))
|
||||
(lqstx-amount (contract-call? .token-vlqstx get-shares-to-tokens (get wrapped-amount request-details))))
|
||||
(try! (is-not-paused-or-fail))
|
||||
(asserts! (is-eq PENDING (get status request-details)) err-request-finalized-or-revoked)
|
||||
(asserts! (is-eq tx-sender (get requested-by request-details)) err-unauthorised)
|
||||
(asserts! (is-eq tx-sender recipient) err-unauthorised)
|
||||
(try! (contract-call? .lqstx-mint-registry transfer (get wrapped-amount request-details) (as-contract tx-sender) .token-vlqstx))
|
||||
(try! (contract-call? .token-vlqstx burn (get wrapped-amount request-details) (as-contract tx-sender)))
|
||||
(try! (contract-call? .token-lqstx transfer lqstx-amount (as-contract tx-sender) (get requested-by request-details) none))
|
||||
(try! (contract-call? .token-lqstx transfer lqstx-amount (as-contract tx-sender) recipient none))
|
||||
(try! (contract-call? .lqstx-mint-registry set-burn-request request-id (merge request-details { status: REVOKED })))
|
||||
(try! (contract-call? .lqstx-mint-registry set-burn-requests-pending (get requested-by request-details) (pop burn-requests request-id-idx)))
|
||||
(try! (contract-call? .li-stx-burn-nft burn request-id))
|
||||
@@ -199,10 +207,11 @@
|
||||
(let (
|
||||
(request-details (try! (get-mint-request-or-fail request-id)))
|
||||
(mint-requests (get-mint-requests-pending-or-default (get requested-by request-details)))
|
||||
(recipient (unwrap! (unwrap-panic (get-owner-mint-nft request-id)) err-request-finalized-or-revoked))
|
||||
(request-id-idx (try! (validate-mint-request request-id))))
|
||||
(try! (is-not-paused-or-fail))
|
||||
(try! (is-dao-or-extension))
|
||||
(try! (contract-call? .token-lqstx dao-mint (get amount request-details) (get requested-by request-details)))
|
||||
(try! (contract-call? .token-lqstx dao-mint (get amount request-details) recipient))
|
||||
(try! (contract-call? .lqstx-mint-registry set-mint-request request-id (merge request-details { status: FINALIZED })))
|
||||
(try! (contract-call? .lqstx-mint-registry set-mint-requests-pending-amount (- (get-mint-requests-pending-amount) (get amount request-details))))
|
||||
(try! (contract-call? .lqstx-mint-registry set-mint-requests-pending (get requested-by request-details) (pop mint-requests request-id-idx)))
|
||||
@@ -224,7 +233,7 @@
|
||||
(try! (contract-call? .token-vlqstx mint amount tx-sender))
|
||||
(try! (contract-call? .token-vlqstx transfer vlqstx-amount tx-sender .lqstx-mint-registry none))
|
||||
(try! (contract-call? .lqstx-mint-registry set-burn-requests-pending sender (unwrap-panic (as-max-len? (append (get-burn-requests-pending-or-default sender) request-id) u1000))))
|
||||
(try! (contract-call? .li-stx-burn-nft mint request-id amount))
|
||||
(try! (contract-call? .li-stx-burn-nft mint request-id amount sender))
|
||||
(print { type: "burn-request", id: request-id, details: request-details })
|
||||
(ok { request-id: request-id, status: PENDING })))
|
||||
|
||||
@@ -233,12 +242,13 @@
|
||||
(request-details (try! (get-burn-request-or-fail request-id)))
|
||||
(transfer-vlqstx (try! (contract-call? .lqstx-mint-registry transfer (get wrapped-amount request-details) (as-contract tx-sender) .token-vlqstx)))
|
||||
(burn-requests (get-burn-requests-pending-or-default (get requested-by request-details)))
|
||||
(recipient (unwrap! (unwrap-panic (get-owner-burn-nft request-id)) err-request-finalized-or-revoked))
|
||||
(validation-data (try! (validate-burn-request request-id))))
|
||||
(try! (is-not-paused-or-fail))
|
||||
(try! (is-dao-or-extension))
|
||||
(try! (contract-call? .token-vlqstx burn (get wrapped-amount request-details) (as-contract tx-sender)))
|
||||
(try! (contract-call? .token-lqstx dao-burn (get vaulted-amount validation-data) (as-contract tx-sender)))
|
||||
(try! (contract-call? .lqstx-vault proxy-call .stx-transfer-proxy (unwrap-panic (to-consensus-buff? { ustx: (get vaulted-amount validation-data), recipient: (get requested-by request-details) }))))
|
||||
(try! (contract-call? .lqstx-vault proxy-call .stx-transfer-proxy (unwrap-panic (to-consensus-buff? { ustx: (get vaulted-amount validation-data), recipient: recipient }))))
|
||||
(try! (contract-call? .lqstx-mint-registry set-burn-request request-id (merge request-details { status: FINALIZED })))
|
||||
(try! (contract-call? .lqstx-mint-registry set-burn-requests-pending (get requested-by request-details) (pop burn-requests (get request-id-idx validation-data))))
|
||||
(try! (contract-call? .li-stx-burn-nft burn request-id))
|
||||
|
||||
Reference in New Issue
Block a user