mirror of
https://github.com/zhigang1992/liquid-stacking.git
synced 2026-01-12 17:23:23 +08:00
stacking-vault
This commit is contained in:
@@ -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"]
|
||||
|
||||
@@ -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)))
|
||||
68
contracts/stacking-vault.clar
Normal file
68
contracts/stacking-vault.clar
Normal 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))))
|
||||
8
contracts/traits/trait-stacking.clar
Normal file
8
contracts/traits/trait-stacking.clar
Normal 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))
|
||||
)
|
||||
)
|
||||
Reference in New Issue
Block a user