stacking-vault

This commit is contained in:
fiftyeightandeight
2024-01-22 22:17:12 +08:00
parent 735872822e
commit 721eae7e35
4 changed files with 111 additions and 20 deletions

View File

@@ -15,6 +15,9 @@ path = "contracts_modules/alex_v1/traits/trait-sip-010.clar"
[contracts.trait-ownable]
path = "contracts_modules/alex_v1/traits/trait-ownable.clar"
[contracts.trait-stacking]
path = "contracts/traits/trait-stacking.clar"
[contracts.token-wstx]
path = "contracts_modules/alex_v1/wrapped-token/token-wstx.clar"
@@ -34,6 +37,10 @@ epoch = 2.4
path = "contracts/token-wlqstx.clar"
epoch = 2.4
[contracts.stacking-vault]
path = "contracts/stacking-vault.clar"
epoch = 2.4
# [repl.analysis]
# passes = ["check_checker"]

View File

@@ -3,9 +3,11 @@
;;
(use-trait sip010-trait .trait-sip-010.sip-010-trait)
(use-trait stacking-trait .trait-stacking.stacking-trait)
(define-constant ERR-NOT-AUTHORIZED (err u1000))
(define-constant ERR-UNKNOWN-REQUEST-ID (err u1008))
(define-constant ERR-UNKNOWN-VAULT (err u1009))
(define-constant PENDING u0)
(define-constant FINALIZED u1)
@@ -14,6 +16,8 @@
(define-data-var contract-owner principal tx-sender)
(define-map approved-operators principal bool)
(define-map approved-stacking-vault principal bool)
(define-data-var rewards-paid-upto uint u0)
(define-data-var mint-request-nonce uint u0)
@@ -49,6 +53,9 @@
(define-read-only (is-approved-operator)
(ok (asserts! (or (get-approved-operator-or-default tx-sender) (is-ok (check-is-owner))) ERR-NOT-AUTHORIZED)))
(define-read-only (get-approved-stacking-vault-or-default (vault principal))
(default-to false (map-get? approved-stacking-vault vault)))
;; governance calls
(define-public (set-contract-owner (owner principal))
@@ -61,6 +68,12 @@
(try! (check-is-owner))
(ok (map-set approved-operators operator approved))))
;; @dev other pools can be added by adding stacking vault that implements stacking-trait
(define-public (set-approved-stacking-vault (vault-trait <stacking-trait>) (approved bool))
(begin
(try! (check-is-owner))
(ok (map-set approved-stacking-vault (contract-of vault-trait) approved))))
;; privileged calls
(define-public (set-rewards-paid-upto (cycle uint))
@@ -93,36 +106,31 @@
(try! (is-approved-operator))
(as-contract (contract-call? token-trait transfer-fixed amount tx-sender recipient none))))
;; @dev other pools can be added by upgrading registry
(define-public (delegate-stx (amount uint))
(define-public (delegate-stx (amount uint) (vault-trait <stacking-trait>))
(begin
(try! (is-approved-operator))
(as-contract (contract-call? 'SP21YTSM60CAY6D011EZVEVNKXVW8FVZE198XEFFP.pox-fast-pool-v2 delegate-stx (/ amount u100)))))
(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)))))
;; @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 (delegate-stack-stx (vault-trait <stacking-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 (disallow-contract-caller (caller principal))
(define-public (revoke-delegate-stx (vault-trait <stacking-trait>))
(begin
(try! (is-approved-operator))
(to-response-uint (as-contract (contract-call? 'SP000000000000000000002Q6VF78.pox-3 disallow-contract-caller caller)))))
(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 (allow-contract-caller (caller principal) (until-burn-ht (optional uint)))
(define-public (transfer-from-vault (amount uint) (vault-trait <stacking-trait>))
(begin
(try! (is-approved-operator))
(to-response-uint (as-contract (contract-call? 'SP000000000000000000002Q6VF78.pox-3 allow-contract-caller caller until-burn-ht)))))
(define-public (revoke-delegate-stx)
(begin
(try! (is-approved-operator))
(to-response-uint (as-contract (contract-call? 'SP000000000000000000002Q6VF78.pox-3 revoke-delegate-stx)))))
(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))))
;; private calls
(define-private (check-is-owner)
(ok (asserts! (is-eq tx-sender (var-get contract-owner)) ERR-NOT-AUTHORIZED)))
(define-read-only (to-response-uint (resp (response bool int)))
(match resp success (ok success) err (err (to-uint err))))
(ok (asserts! (is-eq tx-sender (var-get contract-owner)) ERR-NOT-AUTHORIZED)))

View File

@@ -0,0 +1,68 @@
;; FAST Pool vault
(use-trait sip010-trait .trait-sip-010.sip-010-trait)
(define-constant ERR-NOT-AUTHORIZED (err u1000))
(define-data-var contract-owner principal tx-sender)
(define-map approved-operators principal bool)
;; read-only calls
(define-read-only (get-approved-operator-or-default (operator principal))
(default-to false (map-get? approved-operators operator)))
(define-read-only (is-approved-operator)
(ok (asserts! (or (get-approved-operator-or-default tx-sender) (is-ok (check-is-owner))) ERR-NOT-AUTHORIZED)))
;; governance calls
(define-public (set-contract-owner (owner principal))
(begin
(try! (check-is-owner))
(ok (var-set contract-owner owner))))
(define-public (set-approved-operator (operator principal) (approved bool))
(begin
(try! (check-is-owner))
(ok (map-set approved-operators operator approved))))
;; previliged calls
(define-public (transfer-fixed (amount uint) (recipient principal))
(begin
(try! (is-approved-operator))
(as-contract (contract-call? .token-wstx transfer-fixed amount tx-sender recipient none))))
;; @dev other pools can be added by upgrading registry
(define-public (delegate-stx (amount uint))
(begin
(try! (is-approved-operator))
(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-contract-caller (caller principal))
(begin
(try! (is-approved-operator))
(to-response-uint (as-contract (contract-call? 'SP000000000000000000002Q6VF78.pox-3 disallow-contract-caller caller)))))
(define-public (allow-contract-caller (caller principal) (until-burn-ht (optional uint)))
(begin
(try! (is-approved-operator))
(to-response-uint (as-contract (contract-call? 'SP000000000000000000002Q6VF78.pox-3 allow-contract-caller caller until-burn-ht)))))
(define-public (revoke-delegate-stx)
(begin
(try! (is-approved-operator))
(to-response-uint (as-contract (contract-call? 'SP000000000000000000002Q6VF78.pox-3 revoke-delegate-stx)))))
;; private calls
(define-private (check-is-owner)
(ok (asserts! (is-eq tx-sender (var-get contract-owner)) ERR-NOT-AUTHORIZED)))
(define-private (to-response-uint (resp (response bool int)))
(match resp success (ok success) err (err (to-uint err))))

View File

@@ -0,0 +1,8 @@
(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))
)
)