-
Notifications
You must be signed in to change notification settings - Fork 16
Expand file tree
/
Copy pathmiami-degens.clar
More file actions
149 lines (126 loc) · 4.74 KB
/
Copy pathmiami-degens.clar
File metadata and controls
149 lines (126 loc) · 4.74 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
;; MiamiDegens
(impl-trait 'SP2PABAF9FTAJYNFZH93XENAJ8FVY99RRM50D2JG9.nft-trait.nft-trait)
;; Non Fungible Token, using sip-009
(define-non-fungible-token miami-degens uint)
;; Constants
(define-constant err-no-more-nfts u300)
(define-constant err-invalid-user u500)
(define-constant commission-address-master tx-sender)
(define-constant mint-limit u420)
;; Internal variables
(define-data-var last-id uint u0)
(define-data-var commission-master uint u500)
(define-data-var commission uint u500)
(define-data-var total-price uint u69000000)
(define-data-var artist-address principal 'SPFRGJ8117Y5H9Y6SYBF75H6RSB1FMJQYA27RST9)
(define-data-var commission-address principal 'SPNWZ5V2TPWGQGVDR6T7B6RQ4XMGZ4PXTEE0VQ0S)
(define-data-var ipfs-root (string-ascii 80) "ipfs://QmQcZyB1GEsZgYQXr82CHN2BeqEY53bmMPB89g6ryKPWJU/")
;; private functions
(define-private (mint (new-owner principal))
(let ((next-id (+ u1 (var-get last-id)))
(count (var-get last-id)))
(asserts! (< count mint-limit) (err err-no-more-nfts))
(let
((total-commission-master (/ (* (var-get total-price) (var-get commission-master)) u10000))
(total-commission (/ (* (var-get total-price) (var-get commission)) u10000))
(total-artist (- (- (var-get total-price) total-commission-master) total-commission))
)
(if (is-eq tx-sender (var-get artist-address))
(mint-helper new-owner next-id)
(if (is-eq tx-sender commission-address-master)
(begin
(mint-helper new-owner next-id))
(if (is-eq tx-sender (var-get commission-address))
(begin
(try! (stx-transfer? total-commission-master tx-sender commission-address-master))
(try! (stx-transfer? total-artist tx-sender (var-get artist-address)))
(mint-helper new-owner next-id))
(begin
(try! (stx-transfer? total-commission-master tx-sender commission-address-master))
(try! (stx-transfer? total-commission tx-sender (var-get commission-address)))
(try! (stx-transfer? total-artist tx-sender (var-get artist-address)))
(mint-helper new-owner next-id))
)
)
)
)
)
)
(define-private (mint-helper (new-owner principal) (next-id uint))
(match (nft-mint? miami-degens next-id new-owner)
success
(begin
(var-set last-id next-id)
(ok true))
error (err error)))
;; public functions
(define-public (claim)
(mint tx-sender))
(define-public (set-artist-address (address principal))
(if (is-eq tx-sender commission-address-master)
(begin
(var-set artist-address address)
(ok true)
)
(err err-invalid-user)))
(define-public (set-commission-address (address principal))
(if (is-eq tx-sender commission-address-master)
(begin
(var-set commission-address address)
(ok true)
)
(err err-invalid-user)))
(define-public (set-price (price uint))
(if (is-eq tx-sender commission-address-master)
(begin
(var-set total-price price)
(ok true)
)
(err err-invalid-user)))
(define-public (set-commission-master (new-commission-master uint))
(if (is-eq tx-sender commission-address-master)
(begin
(var-set commission-master new-commission-master)
(ok true)
)
(err err-invalid-user)))
(define-public (set-commission (new-commission uint))
(if (is-eq tx-sender commission-address-master)
(begin
(var-set commission new-commission)
(ok true)
)
(err err-invalid-user)))
(define-public (set-ipfs-root (new-ipfs-root (string-ascii 80)))
(if (is-eq tx-sender commission-address-master)
(begin
(var-set ipfs-root new-ipfs-root)
(ok true)
)
(err err-invalid-user)))
(define-public (transfer (token-id uint) (sender principal) (recipient principal))
(if (and
(is-eq tx-sender sender))
(match (nft-transfer? miami-degens token-id sender recipient)
success (ok success)
error (err error))
(err err-invalid-user)))
;; read-only functions
(define-read-only (get-owner (token-id uint))
(ok (nft-get-owner? miami-degens token-id)))
(define-read-only (get-last-token-id)
(ok (var-get last-id)))
(define-read-only (get-token-uri (token-id uint))
(ok (some (concat (concat (var-get ipfs-root) "$TOKEN_ID") ".json"))))
(define-read-only (get-price)
(ok (var-get total-price)))
(define-read-only (get-artist-address)
(ok (var-get artist-address)))
(define-read-only (get-commission-address)
(ok (var-get commission-address)))
(define-read-only (get-commission-master)
(ok (var-get commission-master)))
(define-read-only (get-commission)
(ok (var-get commission)))
(define-read-only (get-base-uri)
(ok (var-get ipfs-root)))