Skip to content

Commit

Permalink
Merge pull request #59 from citycoins/fix/support-pox-2
Browse files Browse the repository at this point in the history
Add support for pox-3
  • Loading branch information
whoabuddy authored Aug 31, 2023
2 parents 40c9ba4 + da0d488 commit 8106042
Show file tree
Hide file tree
Showing 41 changed files with 6,305 additions and 62 deletions.
109 changes: 102 additions & 7 deletions Clarinet.toml
Original file line number Diff line number Diff line change
Expand Up @@ -89,12 +89,18 @@ path = "contracts/extensions/ccd001-direct-execute.clar"
[contracts.ccd002-treasury-mia-mining]
path = "contracts/extensions/ccd002-treasury.clar"

[contracts.ccd002-treasury-mia-mining-v2]
path = "contracts/extensions/ccd002-treasury-v2.clar"

[contracts.ccd002-treasury-mia-stacking]
path = "contracts/extensions/ccd002-treasury.clar"

[contracts.ccd002-treasury-nyc-mining]
path = "contracts/extensions/ccd002-treasury.clar"

[contracts.ccd002-treasury-nyc-mining-v2]
path = "contracts/extensions/ccd002-treasury-v2.clar"

[contracts.ccd002-treasury-nyc-stacking]
path = "contracts/extensions/ccd002-treasury.clar"

Expand All @@ -110,6 +116,9 @@ path = "contracts/extensions/ccd005-city-data.clar"
[contracts.ccd006-citycoin-mining]
path = "contracts/extensions/ccd006-citycoin-mining.clar"

[contracts.ccd006-citycoin-mining-v2]
path = "contracts/extensions/ccd006-citycoin-mining-v2.clar"

[contracts.ccd007-citycoin-stacking]
path = "contracts/extensions/ccd007-citycoin-stacking.clar"

Expand All @@ -134,6 +143,16 @@ path = "contracts/proposals/ccip013-migration.clar"
[contracts.ccip013-activation]
path = "contracts/proposals/ccip013-activation.clar"

[contracts.ccip014-pox-3]
path = "contracts/proposals/ccip014-pox-3.clar"
clarity_version = 2
epoch = 2.4

[contracts.ccip014-pox-3-v2]
path = "contracts/proposals/ccip014-pox-3-v2.clar"
clarity_version = 2
epoch = 2.4

# CITYCOINS PROTOCOL TRAITS

[contracts.extension-trait]
Expand All @@ -154,6 +173,9 @@ path = "contracts/traits/ccd006-trait.clar"
[contracts.ccd007-trait]
path = "contracts/traits/ccd007-trait.clar"

[contracts.ccip-015-trait]
path = "contracts/traits/ccip-015-trait.clar"

# CITYCOINS EXTERNAL CONTRACTS

[contracts.citycoin-vrf-v2]
Expand All @@ -171,6 +193,11 @@ path = "tests/contracts/external/test-ccext-nft-mia.clar"
[contracts.test-ccext-nft-nyc]
path = "tests/contracts/external/test-ccext-nft-nyc.clar"

[contracts.mock-pox-3]
path = "tests/contracts/external/mock-pox-3.clar"
clarity_version = 2
epoch = 2.4

# CITYCOINS LEGACY CONTRACTS

[contracts.citycoin-core-v2-trait]
Expand Down Expand Up @@ -244,6 +271,42 @@ path = "tests/contracts/proposals/test-ccd002-treasury-011.clar"
[contracts.test-ccd002-treasury-012]
path = "tests/contracts/proposals/test-ccd002-treasury-012.clar"

[contracts.test-ccd002-treasury-v2-001]
path = "tests/contracts/proposals/test-ccd002-treasury-v2-001.clar"

[contracts.test-ccd002-treasury-v2-002]
path = "tests/contracts/proposals/test-ccd002-treasury-v2-002.clar"

[contracts.test-ccd002-treasury-v2-003]
path = "tests/contracts/proposals/test-ccd002-treasury-v2-003.clar"

[contracts.test-ccd002-treasury-v2-004]
path = "tests/contracts/proposals/test-ccd002-treasury-v2-004.clar"

[contracts.test-ccd002-treasury-v2-005]
path = "tests/contracts/proposals/test-ccd002-treasury-v2-005.clar"

[contracts.test-ccd002-treasury-v2-006]
path = "tests/contracts/proposals/test-ccd002-treasury-v2-006.clar"

[contracts.test-ccd002-treasury-v2-007]
path = "tests/contracts/proposals/test-ccd002-treasury-v2-007.clar"

[contracts.test-ccd002-treasury-v2-008]
path = "tests/contracts/proposals/test-ccd002-treasury-v2-008.clar"

[contracts.test-ccd002-treasury-v2-009]
path = "tests/contracts/proposals/test-ccd002-treasury-v2-009.clar"

[contracts.test-ccd002-treasury-v2-010]
path = "tests/contracts/proposals/test-ccd002-treasury-v2-010.clar"

[contracts.test-ccd002-treasury-v2-011]
path = "tests/contracts/proposals/test-ccd002-treasury-v2-011.clar"

[contracts.test-ccd002-treasury-v2-012]
path = "tests/contracts/proposals/test-ccd002-treasury-v2-012.clar"

[contracts.test-ccd003-user-registry-001]
path = "tests/contracts/proposals/test-ccd003-user-registry-001.clar"

Expand Down Expand Up @@ -316,6 +379,9 @@ path = "tests/contracts/proposals/test-ccd005-city-data-018.clar"
[contracts.test-ccd005-city-data-019]
path = "tests/contracts/proposals/test-ccd005-city-data-019.clar"

[contracts.test-ccd005-city-data-020]
path = "tests/contracts/proposals/test-ccd005-city-data-020.clar"

[contracts.test-ccd006-citycoin-mining-001]
path = "tests/contracts/proposals/test-ccd006-citycoin-mining-001.clar"

Expand All @@ -331,6 +397,27 @@ path = "tests/contracts/proposals/test-ccd006-citycoin-mining-004.clar"
[contracts.test-ccd006-citycoin-mining-005]
path = "tests/contracts/proposals/test-ccd006-citycoin-mining-005.clar"

[contracts.test-ccd006-citycoin-mining-v2-001]
path = "tests/contracts/proposals/test-ccd006-citycoin-mining-v2-001.clar"

[contracts.test-ccd006-citycoin-mining-v2-002]
path = "tests/contracts/proposals/test-ccd006-citycoin-mining-v2-002.clar"

[contracts.test-ccd006-citycoin-mining-v2-003]
path = "tests/contracts/proposals/test-ccd006-citycoin-mining-v2-003.clar"

[contracts.test-ccd006-citycoin-mining-v2-004]
path = "tests/contracts/proposals/test-ccd006-citycoin-mining-v2-004.clar"

[contracts.test-ccd006-citycoin-mining-v2-005]
path = "tests/contracts/proposals/test-ccd006-citycoin-mining-v2-005.clar"

[contracts.test-ccd006-citycoin-mining-v2-006]
path = "tests/contracts/proposals/test-ccd006-citycoin-mining-v2-006.clar"

[contracts.test-ccd006-citycoin-mining-v2-007]
path = "tests/contracts/proposals/test-ccd006-citycoin-mining-v2-007.clar"

[contracts.test-ccd007-citycoin-stacking-001]
path = "tests/contracts/proposals/test-ccd007-citycoin-stacking-001.clar"

Expand Down Expand Up @@ -370,15 +457,23 @@ path = "tests/contracts/proposals/test-ccd007-citycoin-stacking-012.clar"
[contracts.test-ccd011-stacking-payouts-001]
path = "tests/contracts/proposals/test-ccd011-stacking-payouts-001.clar"

[contracts.test-ccip014-pox-3-001]
path = "tests/contracts/proposals/test-ccip014-pox-3-001.clar"

[contracts.test-ccip014-pox-3-002]
path = "tests/contracts/proposals/test-ccip014-pox-3-002.clar"

[repl]
costs_version = 2
parser_version = 2

[repl.analysis]
passes = ["check_checker"]
# TEMPORARILY DISABLED

# [repl.analysis]
# passes = ["check_checker"]

[repl.analysis.check_checker]
strict = false
trusted_sender = false
trusted_caller = false
callee_filter = true
# [repl.analysis.check_checker]
# strict = false
# trusted_sender = false
# trusted_caller = false
# callee_filter = true
206 changes: 206 additions & 0 deletions contracts/extensions/ccd002-treasury-v2.clar
Original file line number Diff line number Diff line change
@@ -0,0 +1,206 @@
;; Title: CCD002 Treasury
;; Version: 2.0.0
;; Summary: A treasury contract that can manage STX, SIP-009 NFTs, and SIP-010 FTs.
;; Description: An extension contract that holds assets on behalf of the DAO. SIP-009 and SIP-010 assets must be allowed before they are supported. Deposits can be made by anyone either by transferring to the contract or using a deposit function below. Withdrawals are restricted to the DAO through either extensions or proposals. Stacking is enabled through PoX.

;; TRAITS

(impl-trait .extension-trait.extension-trait)
(impl-trait .stacking-trait.stacking-trait)
(impl-trait .ccd002-trait.ccd002-treasury-trait)
;; MAINNET: 'SP3FBR2AGK5H9QBDH3EEN6DF8EK8JY7RX8QJ5SVTE.sip-010-trait-ft-standard.sip-010-trait
(use-trait ft-trait 'ST1NXBK3K5YYMD6FD41MVNP3JS1GABZ8TRVX023PT.sip-010-trait-ft-standard.sip-010-trait)
;; MAINNET: 'SP2PABAF9FTAJYNFZH93XENAJ8FVY99RRM50D2JG9.nft-trait.nft-trait
(use-trait nft-trait 'ST1NXBK3K5YYMD6FD41MVNP3JS1GABZ8TRVX023PT.nft-trait.nft-trait)

;; CONSTANTS

(define-constant ERR_UNAUTHORIZED (err u2000))
(define-constant ERR_UNKNOWN_ASSSET (err u2001))
(define-constant TREASURY (as-contract tx-sender))

;; DATA MAPS

(define-map AllowedAssets principal bool)

;; PUBLIC FUNCTIONS

(define-public (is-dao-or-extension)
(ok (asserts! (or (is-eq tx-sender .base-dao)
(contract-call? .base-dao is-extension contract-caller)) ERR_UNAUTHORIZED
))
)

(define-public (callback (sender principal) (memo (buff 34)))
(ok true)
)

(define-public (set-allowed (token principal) (enabled bool))
(begin
(try! (is-dao-or-extension))
(print {
event: "allow-asset",
enabled: enabled,
token: token
})
(ok (map-set AllowedAssets token enabled))
)
)

(define-public (set-allowed-list (allowList (list 100 {token: principal, enabled: bool})))
(begin
(try! (is-dao-or-extension))
(ok (map set-allowed-iter allowList))
)
)

(define-public (deposit-stx (amount uint))
(begin
(print {
event: "deposit-stx",
amount: amount,
caller: contract-caller,
recipient: TREASURY,
sender: tx-sender
})
(stx-transfer? amount tx-sender TREASURY)
)
)

(define-public (deposit-ft (ft <ft-trait>) (amount uint))
(begin
(asserts! (is-allowed (contract-of ft)) ERR_UNKNOWN_ASSSET)
(print {
event: "deposit-ft",
amount: amount,
assetContract: (contract-of ft),
caller: contract-caller,
recipient: TREASURY,
sender: tx-sender
})
(contract-call? ft transfer amount tx-sender TREASURY none)
)
)

(define-public (deposit-nft (nft <nft-trait>) (id uint))
(begin
(asserts! (is-allowed (contract-of nft)) ERR_UNKNOWN_ASSSET)
(print {
event: "deposit-nft",
assetContract: (contract-of nft),
caller: contract-caller,
recipient: TREASURY,
sender: tx-sender,
tokenId: id,
})
(contract-call? nft transfer id tx-sender TREASURY)
)
)

(define-public (withdraw-stx (amount uint) (recipient principal))
(begin
(try! (is-dao-or-extension))
(print {
event: "withdraw-stx",
amount: amount,
caller: contract-caller,
recipient: recipient,
sender: tx-sender
})
(as-contract (stx-transfer? amount TREASURY recipient))
)
)

(define-public (withdraw-ft (ft <ft-trait>) (amount uint) (recipient principal))
(begin
(try! (is-dao-or-extension))
(asserts! (is-allowed (contract-of ft)) ERR_UNKNOWN_ASSSET)
(print {
event: "withdraw-ft",
assetContract: (contract-of ft),
caller: contract-caller,
recipient: recipient,
sender: tx-sender
})
(as-contract (contract-call? ft transfer amount TREASURY recipient none))
)
)

(define-public (withdraw-nft (nft <nft-trait>) (id uint) (recipient principal))
(begin
(try! (is-dao-or-extension))
(asserts! (is-allowed (contract-of nft)) ERR_UNKNOWN_ASSSET)
(print {
event: "withdraw-nft",
assetContract: (contract-of nft),
caller: contract-caller,
recipient: recipient,
sender: tx-sender,
tokenId: id
})
(as-contract (contract-call? nft transfer id TREASURY recipient))
)
)

(define-public (delegate-stx (maxAmount uint) (to principal))
(begin
(try! (is-dao-or-extension))
(print {
event: "delegate-stx",
amount: maxAmount,
caller: contract-caller,
delegate: to,
sender: tx-sender
})
;; MAINNET: 'SP000000000000000000002Q6VF78.pox-3
;; TESTNET: 'ST000000000000000000002AMW42H.pox-3
(match (as-contract (contract-call? 'ST000000000000000000002AMW42H.pox-3 delegate-stx maxAmount to none none))
success (ok success)
err (err (to-uint err))
)
)
)

(define-public (revoke-delegate-stx)
(begin
(try! (is-dao-or-extension))
(print {
event: "revoke-delegate-stx",
caller: contract-caller,
sender: tx-sender
})
;; MAINNET: 'SP000000000000000000002Q6VF78.pox-3
;; TESTNET: 'ST000000000000000000002AMW42H.pox-3
(match (as-contract (contract-call? 'ST000000000000000000002AMW42H.pox-3 revoke-delegate-stx))
success (ok success)
err (err (to-uint err))
)
)
)

;; READ ONLY FUNCTIONS

(define-read-only (is-allowed (assetContract principal))
(default-to false (get-allowed-asset assetContract))
)

(define-read-only (get-allowed-asset (assetContract principal))
(map-get? AllowedAssets assetContract)
)

(define-read-only (get-balance-stx)
(stx-get-balance TREASURY)
)

;; PRIVATE FUNCTIONS

(define-private (set-allowed-iter (item {token: principal, enabled: bool}))
(begin
(print {
event: "allow-asset",
enabled: (get enabled item),
token: (get token item)
})
(map-set AllowedAssets (get token item) (get enabled item))
)
)
Loading

0 comments on commit 8106042

Please sign in to comment.