From e32884fde544f8122b327d78e6e7f65b1806f3ef Mon Sep 17 00:00:00 2001 From: MarvinJanssen Date: Mon, 3 Jun 2024 12:37:24 -0700 Subject: [PATCH 1/2] feat: public-pools-strategy-manager Dead Man's Switch --- Clarinet.toml | 5 +++ .../public-pools-strategy-manager.clar | 38 ++++++++++++++++++- 2 files changed, 41 insertions(+), 2 deletions(-) diff --git a/Clarinet.toml b/Clarinet.toml index 57404ce..0e68806 100644 --- a/Clarinet.toml +++ b/Clarinet.toml @@ -19,6 +19,7 @@ requirements = [ { contract_id = "SM3KNVZS30WM7F89SXKVVFY4SN9RMPZZ9FX929N0V.li-stx-mint-nft" }, { contract_id = "SM3KNVZS30WM7F89SXKVVFY4SN9RMPZZ9FX929N0V.li-stx-burn-nft" }, { contract_id = "SM3KNVZS30WM7F89SXKVVFY4SN9RMPZZ9FX929N0V.lqstx-mint-endpoint-v2-01" }, + { contract_id = "SM3KNVZS30WM7F89SXKVVFY4SN9RMPZZ9FX929N0V.public-pools-strategy-v2" }, { contract_id = "SPGAB1P3YV109E22KXFJYM63GK0G21BYX50CQ80B.lip005" }, { contract_id = "SP3BQ65DRM8DMTYDD5HWMN60EYC0JFS5NC2V5CWW7.lip006" }, { contract_id = "SP3K8BC0PPEVCV7NZ6QSRWPQ2JE9E5B6N3PA0KBR9.executor-dao" }, @@ -27,3 +28,7 @@ requirements = [ [contracts.lip007] path = "contracts/proposals/lip007.clar" epoch = 2.5 + +[contracts.public-pools-strategy-manager-v3] +path = "contracts/extensions/public-pools-strategy-manager.clar" +epoch = 2.5 \ No newline at end of file diff --git a/contracts/extensions/public-pools-strategy-manager.clar b/contracts/extensions/public-pools-strategy-manager.clar index 256b0c8..7539881 100644 --- a/contracts/extensions/public-pools-strategy-manager.clar +++ b/contracts/extensions/public-pools-strategy-manager.clar @@ -2,10 +2,15 @@ ;; SPDX-License-Identifier: BUSL-1.1 (define-constant err-unauthorised (err u3000)) +(define-constant err-still-alive (err u3001)) + +(define-constant dms-activation-period u12960) ;; ~90 days (define-map authorised-managers principal bool) (map-set authorised-managers tx-sender true) +(define-data-var last-manager-action-height uint burn-block-height) + (define-read-only (is-dao-or-extension) (ok (asserts! (or (is-eq tx-sender 'SM26NBC8SFHNW4P1Y4DFH27974P56WN86C92HPEHH.lisa-dao) (contract-call? 'SM26NBC8SFHNW4P1Y4DFH27974P56WN86C92HPEHH.lisa-dao is-extension contract-caller)) err-unauthorised)) ) @@ -17,14 +22,23 @@ (define-public (fund-strategy (amounts (list 20 uint))) (begin (asserts! (is-authorised-manager tx-sender) err-unauthorised) - (contract-call? 'SM26NBC8SFHNW4P1Y4DFH27974P56WN86C92HPEHH.lqstx-vault fund-strategy .public-pools-strategy-v2 (unwrap-panic (to-consensus-buff? amounts))) + (var-set last-manager-action-height burn-block-height) + (contract-call? 'SM26NBC8SFHNW4P1Y4DFH27974P56WN86C92HPEHH.lqstx-vault fund-strategy 'SM3KNVZS30WM7F89SXKVVFY4SN9RMPZZ9FX929N0V.public-pools-strategy-v2 (unwrap-panic (to-consensus-buff? amounts))) ) ) (define-public (refund-strategy (selection (list 20 bool))) (begin (asserts! (is-authorised-manager tx-sender) err-unauthorised) - (contract-call? 'SM26NBC8SFHNW4P1Y4DFH27974P56WN86C92HPEHH.lqstx-vault refund-strategy .public-pools-strategy-v2 (unwrap-panic (to-consensus-buff? selection))) + (var-set last-manager-action-height burn-block-height) + (contract-call? 'SM26NBC8SFHNW4P1Y4DFH27974P56WN86C92HPEHH.lqstx-vault refund-strategy 'SM3KNVZS30WM7F89SXKVVFY4SN9RMPZZ9FX929N0V.public-pools-strategy-v2 (unwrap-panic (to-consensus-buff? selection))) + ) +) + +(define-public (keep-alive) + (begin + (asserts! (is-authorised-manager tx-sender) err-unauthorised) + (ok (var-set last-manager-action-height burn-block-height)) ) ) @@ -34,3 +48,23 @@ (ok (map-set authorised-managers who enabled)) ) ) + +;; Dead Man's switch + +(define-read-only (dms-active) + (ok (asserts! (< (+ (var-get last-manager-action-height) dms-activation-period) burn-block-height) err-still-alive)) +) + +(define-public (dms-revoke-strategy) + (begin + (try! (dms-active)) + (contract-call? 'SM26NBC8SFHNW4P1Y4DFH27974P56WN86C92HPEHH.lqstx-vault fund-strategy 'SM3KNVZS30WM7F89SXKVVFY4SN9RMPZZ9FX929N0V.public-pools-strategy-v2 (unwrap-panic (to-consensus-buff? (list u0 u0 u0 u0 u0 u0 u0 u0 u0 u0 u0 u0 u0 u0 u0 u0 u0 u0 u0 u0)))) + ) +) + +(define-public (dms-refund-strategy) + (begin + (try! (dms-active)) + (contract-call? 'SM26NBC8SFHNW4P1Y4DFH27974P56WN86C92HPEHH.lqstx-vault refund-strategy 'SM3KNVZS30WM7F89SXKVVFY4SN9RMPZZ9FX929N0V.public-pools-strategy-v2 (unwrap-panic (to-consensus-buff? (list true true true true true true true true true true true true true true true true true true true true)))) + ) +) From 9bc32bb20367f74d349b0f3c5c4db03e4293ca70 Mon Sep 17 00:00:00 2001 From: MarvinJanssen Date: Mon, 3 Jun 2024 12:39:06 -0700 Subject: [PATCH 2/2] fix: remove tx-sender default manager --- contracts/extensions/public-pools-strategy-manager.clar | 1 - 1 file changed, 1 deletion(-) diff --git a/contracts/extensions/public-pools-strategy-manager.clar b/contracts/extensions/public-pools-strategy-manager.clar index 7539881..d960aec 100644 --- a/contracts/extensions/public-pools-strategy-manager.clar +++ b/contracts/extensions/public-pools-strategy-manager.clar @@ -7,7 +7,6 @@ (define-constant dms-activation-period u12960) ;; ~90 days (define-map authorised-managers principal bool) -(map-set authorised-managers tx-sender true) (define-data-var last-manager-action-height uint burn-block-height)