From 2dfde1681cb8d39fee9f8a1630d16a9baa2ac31e Mon Sep 17 00:00:00 2001 From: fiftyeightandeight Date: Tue, 30 Jan 2024 19:38:11 +0800 Subject: [PATCH] lqstx-mint --- contracts/deposit-stx.clar | 46 ---------------------- contracts/lqstx-mint-endpoint.clar | 52 ++++++++++++------------ contracts/lqstx-mint-registry.clar | 38 +----------------- contracts/stacking-vault.clar | 48 ---------------------- contracts/token-wstx.clar | 59 ---------------------------- contracts/traits/trait-stacking.clar | 8 ---- contracts/wstx.clar | 30 -------------- 7 files changed, 26 insertions(+), 255 deletions(-) delete mode 100644 contracts/deposit-stx.clar delete mode 100644 contracts/stacking-vault.clar delete mode 100644 contracts/token-wstx.clar delete mode 100644 contracts/traits/trait-stacking.clar delete mode 100644 contracts/wstx.clar diff --git a/contracts/deposit-stx.clar b/contracts/deposit-stx.clar deleted file mode 100644 index 4293b4f..0000000 --- a/contracts/deposit-stx.clar +++ /dev/null @@ -1,46 +0,0 @@ - -(define-constant err-unauthorised (err u1000)) -(define-constant err-invalid-request-id (err u1001)) - -(define-data-var withdrawal-requests-nonce uint u0) -(define-map withdrawal-requests uint {recipient: principal, amount: uint}) - -(define-public (is-dao-or-extension) - (ok (asserts! (or (is-eq tx-sender .lisa-dao) (contract-call? .lisa-dao is-extension contract-caller)) err-unauthorised)) -) - -(define-public (deposit-stx (amount uint)) - (begin - (try! (stx-transfer? amount tx-sender .vault)) - (contract-call? .token-lqstx dao-mint amount tx-sender) - ) -) - -(define-public (request-withdraw-stx (amount uint)) - (let ((vault-balance (stx-get-balance .vault))) - (try! (contract-call? .token-lqstx dao-burn amount tx-sender)) - (if (>= vault-balance amount) - (begin - (try! (contract-call? .vault dynamic-transfer .stx-transfer-provider (unwrap-panic (to-consensus-buff? { ustx: amount, recipient: tx-sender })))) - (ok none) - ) - ;;else - (let ((nonce (var-get withdrawal-requests-nonce))) - (map-set withdrawal-requests nonce {recipient: tx-sender, amount: amount}) - (var-set withdrawal-requests-nonce (+ nonce u1)) - (ok (some nonce)) - ) - ) - ) -) - -(define-public (settle-withdraw-stx (request-id uint)) - (let ((request (unwrap! (map-get? withdrawal-requests request-id) err-invalid-request-id))) - (map-delete withdrawal-requests request-id) - (contract-call? .vault dynamic-transfer .stx-transfer-provider (unwrap-panic (to-consensus-buff? { ustx: (get amount request), recipient: (get recipient request) }))) - ) -) - -(define-public (settle-withdraw-stx-many (request-ids (list 200 uint))) - (ok (map settle-withdraw-stx request-ids)) -) diff --git a/contracts/lqstx-mint-endpoint.clar b/contracts/lqstx-mint-endpoint.clar index 618dd7e..6fd6656 100644 --- a/contracts/lqstx-mint-endpoint.clar +++ b/contracts/lqstx-mint-endpoint.clar @@ -2,21 +2,18 @@ ;; lqstx-mint-endpoint ;; +(impl-trait .extension-trait.extension-trait) + (use-trait sip-010-trait 'SP3FBR2AGK5H9QBDH3EEN6DF8EK8JY7RX8QJ5SVTE.sip-010-trait-ft-standard.sip-010-trait) (define-constant err-unauthorised (err u1000)) -(define-constant ERR-PAUSED (err u1001)) -(define-constant ERR-INVALID-AMOUNT (err u1002)) -(define-constant ERR-TOKEN-MISMATCH (err u1003)) -(define-constant ERR-SENDER-MISMATCH (err u1004)) -(define-constant ERR-REQUEST-NOT-PENDING (err u1005)) -(define-constant ERR-REQUEST-PENDING (err u1006)) +(define-constant err-paused (err u1001)) +(define-constant err-request-pending (err u1006)) (define-data-var paused bool true) (define-public (is-dao-or-extension) - (ok (asserts! (or (is-eq tx-sender .lisa-dao) (contract-call? .lisa-dao is-extension contract-caller)) err-unauthorised)) -) + (ok (asserts! (or (is-eq tx-sender .lisa-dao) (contract-call? .lisa-dao is-extension contract-caller)) err-unauthorised))) ;; read-only calls @@ -24,7 +21,7 @@ (var-get paused)) (define-read-only (is-paused-or-fail) - (ok (asserts! (not (is-paused)) ERR-PAUSED))) + (ok (asserts! (not (is-paused)) err-paused))) (define-read-only (get-pending) (contract-call? .lqstx-mint-registry get-pending)) @@ -47,33 +44,31 @@ (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)))) - (ok (asserts! (>= (get-rewards-paid-upto) (get requested-at request-details)) ERR-REQUEST-PENDING)))) + (ok (asserts! (>= (get-rewards-paid-upto) (get requested-at request-details)) err-request-pending)))) ;; @dev it favours smaller amounts as we do not allow partial burn (define-read-only (validate-burn-request (request-id uint)) (let ( (request-details (try! (contract-call? .lqstx-mint-registry get-burn-request-or-fail request-id))) (vaulted-amount (contract-call? .token-wlqstx convert-to-tokens (get amount request-details))) - (balance (stx-account .lqstx-mint-registry))) - (asserts! (>= (get unlocked balance) vaulted-amount) ERR-REQUEST-PENDING) + (balance (stx-account .vault))) + (asserts! (>= (* (get unlocked balance) u100) vaulted-amount) err-request-pending) (ok { vaulted-amount: vaulted-amount, balance: balance }))) -;; governance calls - (define-public (set-paused (new-paused bool)) (begin (try! (is-dao-or-extension)) (ok (var-set paused new-paused)))) - + ;; public calls -(define-public (request-mint (amount uint)) +(define-public (request-mint (amount-in-fixed uint)) (let ( (cycle (contract-call? 'SP000000000000000000002Q6VF78.pox-3 current-pox-reward-cycle)) (request-details { requested-by: tx-sender, amount: amount, requested-at: cycle, status: (get-pending) }) (request-id (as-contract (try! (contract-call? .lqstx-mint-registry set-mint-request u0 request-details))))) (try! (is-paused-or-fail)) - (try! (contract-call? .token-wstx transfer-fixed amount tx-sender .lqstx-mint-registry none)) + (try! (stx-transfer? (/ amount-in-fixed u100) tx-sender .vault)) (print { type: "mint-request", id: request-id, details: request-details}) (ok request-id))) @@ -100,16 +95,19 @@ (print { type: "burn-request", id: request-id, details: request-details }) (ok request-id))) -;; (define-public (finalize-burn (request-id uint)) -;; (let ( -;; (request-details (try! (get-burn-request-or-fail request-id))) -;; (transfer-wlqstx (as-contract (try! (contract-call? .lqstx-mint-registry transfer-fixed (get amount request-details) tx-sender .token-wlqstx)))) -;; (validation-data (try! (validate-burn-request request-id)))) -;; (try! (is-paused-or-fail)) -;; (as-contract (try! (contract-call? .token-wlqstx burn-fixed (get amount request-details) tx-sender))) -;; (as-contract (try! (contract-call? .token-lqstx burn-fixed (get vaulted-amount validation-data) tx-sender))) -;; (as-contract (try! (contract-call? .lqstx-mint-registry transfer-fixed (get vaulted-amount validation-data) (get requested-by request-details) .token-wstx))) -;; (as-contract (contract-call? .lqstx-mint-registry set-burn-request request-id (merge request-details { status: (get-finalized) }))))) +(define-public (finalize-burn (request-id uint)) + (let ( + (request-details (try! (get-burn-request-or-fail request-id))) + (transfer-wlqstx (as-contract (try! (contract-call? .lqstx-mint-registry transfer-fixed (get amount request-details) tx-sender .token-wlqstx)))) + (validation-data (try! (validate-burn-request request-id)))) + (try! (is-paused-or-fail)) + (as-contract (try! (contract-call? .token-wlqstx burn-fixed (get amount request-details) tx-sender))) + (as-contract (try! (contract-call? .token-lqstx burn-fixed (get vaulted-amount validation-data) tx-sender))) + (try! (contract-call? .vault dynamic-transfer .stx-transfer-provider (unwrap-panic (to-consensus-buff? { ustx: (/ (get vaulted-amount validation-data) u100), recipient: (get requested-by request-details) })))) + (as-contract (contract-call? .lqstx-mint-registry set-burn-request request-id (merge request-details { status: (get-finalized) }))))) (define-public (revoke-burn (request-id uint)) (ok true)) + +(define-public (callback (extension principal) (payload (buff 34))) + (ok true)) diff --git a/contracts/lqstx-mint-registry.clar b/contracts/lqstx-mint-registry.clar index 07484e9..6645c7e 100644 --- a/contracts/lqstx-mint-registry.clar +++ b/contracts/lqstx-mint-registry.clar @@ -4,7 +4,6 @@ (use-trait sip-010-trait 'SP3FBR2AGK5H9QBDH3EEN6DF8EK8JY7RX8QJ5SVTE.sip-010-trait-ft-standard.sip-010-trait) (use-trait sip-010-extensions-trait .sip-010-extensions-trait.sip-010-extensions-trait) -(use-trait stacking-trait .trait-stacking.stacking-trait) (define-constant err-unauthorised (err u1000)) (define-constant ERR-UNKNOWN-REQUEST-ID (err u1008)) @@ -14,8 +13,6 @@ (define-constant FINALIZED u1) (define-constant REVOKED u2) -(define-map approved-stacking-vault principal bool) - (define-data-var rewards-paid-upto uint u0) (define-data-var mint-request-nonce uint u0) @@ -25,8 +22,7 @@ (define-map burn-requests uint { requested-by: principal, amount: uint, requested-at: uint, status: uint }) (define-public (is-dao-or-extension) - (ok (asserts! (or (is-eq tx-sender .lisa-dao) (contract-call? .lisa-dao is-extension contract-caller)) err-unauthorised)) -) + (ok (asserts! (or (is-eq tx-sender .lisa-dao) (contract-call? .lisa-dao is-extension contract-caller)) err-unauthorised))) ;; read-only calls @@ -54,14 +50,6 @@ ;; governance calls -;; @dev other pools can be added by adding stacking vault that implements stacking-trait -(define-public (set-approved-stacking-vault (vault-trait ) (approved bool)) - (begin - (try! (is-dao-or-extension)) - (ok (map-set approved-stacking-vault (contract-of vault-trait) approved)))) - -;; privileged calls - (define-public (set-rewards-paid-upto (cycle uint)) (begin (try! (is-dao-or-extension)) @@ -91,28 +79,4 @@ (begin (try! (is-dao-or-extension)) (as-contract (contract-call? token-trait transfer-fixed amount tx-sender recipient none)))) - -(define-public (delegate-stx (amount uint) (vault-trait )) - (begin - (try! (is-dao-or-extension)) - (asserts! (get-approved-stacking-vault-or-default (contract-of vault-trait)) ERR-UNKNOWN-VAULT) - ;;(as-contract (try! (contract-call? .token-wstx transfer-fixed amount tx-sender (contract-of vault-trait) none))) - (as-contract (contract-call? vault-trait delegate-stx (/ amount u100))))) - -(define-public (delegate-stack-stx (vault-trait )) - (begin - (asserts! (get-approved-stacking-vault-or-default (contract-of vault-trait)) ERR-UNKNOWN-VAULT) - (contract-call? vault-trait delegate-stack-stx))) - -(define-public (revoke-delegate-stx (vault-trait )) - (begin - (try! (is-dao-or-extension)) - (asserts! (get-approved-stacking-vault-or-default (contract-of vault-trait)) ERR-UNKNOWN-VAULT) - (as-contract (contract-call? vault-trait revoke-delegate-stx)))) - -(define-public (transfer-from-vault (amount uint) (vault-trait )) - (begin - (try! (is-dao-or-extension)) - (asserts! (get-approved-stacking-vault-or-default (contract-of vault-trait)) ERR-UNKNOWN-VAULT) - (as-contract (contract-call? vault-trait transfer-fixed amount tx-sender)))) \ No newline at end of file diff --git a/contracts/stacking-vault.clar b/contracts/stacking-vault.clar deleted file mode 100644 index 01a1b15..0000000 --- a/contracts/stacking-vault.clar +++ /dev/null @@ -1,48 +0,0 @@ -;; FAST Pool vault - -(use-trait sip-010-trait 'SP3FBR2AGK5H9QBDH3EEN6DF8EK8JY7RX8QJ5SVTE.sip-010-trait-ft-standard.sip-010-trait) - -(define-constant err-unauthorised (err u1000)) - -;; read-only calls - -(define-public (is-dao-or-extension) - (ok (asserts! (or (is-eq tx-sender .lisa-dao) (contract-call? .lisa-dao is-extension contract-caller)) err-unauthorised)) -) - -;; governance calls - -(define-public (transfer-fixed (amount uint) (recipient principal)) - (begin - (try! (is-dao-or-extension)) - ;;(as-contract (contract-call? .token-wstx transfer-fixed amount tx-sender recipient none)) - (ok true) - )) - -;; @dev other pools can be added by upgrading registry -(define-public (delegate-stx (amount uint)) - (begin - (try! (is-dao-or-extension)) - (as-contract (contract-call? 'SP21YTSM60CAY6D011EZVEVNKXVW8FVZE198XEFFP.pox-fast-pool-v2 delegate-stx (/ amount u100))))) - -;; @dev other pools can be added by upgrading registry -(define-public (delegate-stack-stx) - (contract-call? 'SP21YTSM60CAY6D011EZVEVNKXVW8FVZE198XEFFP.pox-fast-pool-v2 delegate-stack-stx (as-contract tx-sender))) - -(define-public (disallow-fast-pool (caller principal)) - (begin - (try! (is-dao-or-extension)) - (to-response-uint (as-contract (contract-call? 'SP000000000000000000002Q6VF78.pox-3 disallow-contract-caller 'SP21YTSM60CAY6D011EZVEVNKXVW8FVZE198XEFFP.pox-fast-pool-v2))))) - - -(define-public (revoke-delegate-stx) - (begin - (try! (is-dao-or-extension)) - (to-response-uint (as-contract (contract-call? 'SP000000000000000000002Q6VF78.pox-3 revoke-delegate-stx))))) - -(define-private (to-response-uint (resp (response bool int))) - (match resp success (ok success) err (err (to-uint err)))) - -;; initialisation - -(as-contract (contract-call? 'SP000000000000000000002Q6VF78.pox-3 allow-contract-caller 'SP21YTSM60CAY6D011EZVEVNKXVW8FVZE198XEFFP.pox-fast-pool-v2 none)) \ No newline at end of file diff --git a/contracts/token-wstx.clar b/contracts/token-wstx.clar deleted file mode 100644 index 0287571..0000000 --- a/contracts/token-wstx.clar +++ /dev/null @@ -1,59 +0,0 @@ -(impl-trait 'SP3FBR2AGK5H9QBDH3EEN6DF8EK8JY7RX8QJ5SVTE.sip-010-trait-ft-standard.sip-010-trait) - -(define-constant err-unauthorised (err u100)) - -(define-constant ONE_8 u100000000) - -(define-public (transfer (amount uint) (from principal) (to principal) (memo (optional (buff 34)))) - (begin - (asserts! (is-eq tx-sender from) err-unauthorised) - (match memo m - (stx-transfer-memo? amount from to m) - (stx-transfer? amount from to)) - )) - -(define-public (transfer-fixed (amount uint) (from principal) (to principal) (memo (optional (buff 34)))) - (transfer (decimals-to-fixed amount) from to memo)) - -(define-read-only (get-name) - (ok "WSTX")) - -(define-read-only (get-symbol) - (ok "WSTX")) - -(define-read-only (get-decimals) - (ok u8)) - -(define-read-only (get-balance (who principal)) - (ok (stx-get-balance who))) - -(define-read-only (get-total-supply) - (ok stx-liquid-supply)) - -(define-read-only (get-token-uri) - (ok none)) - -(define-read-only (get-total-supply-fixed) - (ok (decimals-to-fixed (unwrap-panic (get-total-supply))))) - -(define-read-only (get-balance-fixed (account principal)) - (ok (decimals-to-fixed (unwrap-panic (get-balance account))))) - -;; private functions - -(define-private (pow-decimals) - (pow u10 (unwrap-panic (get-decimals)))) - -(define-private (decimals-to-fixed (amount uint)) - (/ (* amount ONE_8) (pow-decimals))) - -(define-private (fixed-to-decimals (amount uint)) - (/ (* amount (pow-decimals)) ONE_8)) - -(define-private (mul-down (a uint) (b uint)) - (/ (* a b) ONE_8)) - -(define-private (div-down (a uint) (b uint)) - (if (is-eq a u0) - u0 - (/ (* a ONE_8) b))) diff --git a/contracts/traits/trait-stacking.clar b/contracts/traits/trait-stacking.clar deleted file mode 100644 index 027bab1..0000000 --- a/contracts/traits/trait-stacking.clar +++ /dev/null @@ -1,8 +0,0 @@ -(define-trait stacking-trait - ( - (delegate-stx (uint) (response bool uint)) - (delegate-stack-stx () (response { stacker: principal, lock-amount: uint, unlock-burn-height: uint } uint)) - (revoke-delegate-stx () (response bool uint)) - (transfer-fixed (uint principal) (response bool uint)) - ) -) diff --git a/contracts/wstx.clar b/contracts/wstx.clar deleted file mode 100644 index 26885ad..0000000 --- a/contracts/wstx.clar +++ /dev/null @@ -1,30 +0,0 @@ - -;; title: wstx -;; version: -;; summary: -;; description: - -;; traits -;; - -;; token definitions -;; - -;; constants -;; - -;; data vars -;; - -;; data maps -;; - -;; public functions -;; - -;; read only functions -;; - -;; private functions -;; -