-
Notifications
You must be signed in to change notification settings - Fork 11
/
Copy pathbeernfts.clar
157 lines (123 loc) · 4.19 KB
/
beernfts.clar
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
150
151
152
153
154
;; beernfts
;; testnet
;; (impl-trait 'ST1CSHTKVHMMQJ7PRQRFYW6SB4QAW6SR3XZ54PKG7.nft-trait.nft-trait)
;; mainnet
(impl-trait 'SP2PABAF9FTAJYNFZH93XENAJ8FVY99RRM50D2JG9.nft-trait.nft-trait)
(define-non-fungible-token beernfts uint)
;; Constants
(define-constant DEPLOYER tx-sender)
(define-constant COMM u1000)
(define-constant COMM-ADDR 'SPNWZ5V2TPWGQGVDR6T7B6RQ4XMGZ4PXTEE0VQ0S)
(define-constant ERR-NO-MORE-NFTS u100)
(define-constant ERR-NOT-ENOUGH-PASSES u101)
(define-constant ERR-PUBLIC-SALE-DISABLED u102)
(define-constant ERR-CONTRACT-INITIALIZED u103)
(define-constant ERR-NOT-AUTHORIZED u104)
(define-constant ERR-INVALID-USER u105)
(define-constant ERR-LISTING u106)
(define-constant ERR-WRONG-COMMISSION u107)
(define-constant ERR-NOT-FOUND u108)
(define-constant ERR-PAUSED u109)
(define-constant ERR-MINT-LIMIT u110)
;; Internal variables
(define-data-var mint-limit uint u21)
(define-data-var last-id uint u1)
(define-data-var total-price uint u21000000)
(define-data-var artist-address principal 'SP1WP1GYZV50CRGV6T6AJ5408XV68VSS1WQNRMBXZ)
(define-data-var ipfs-root (string-ascii 80) "ipfs://ipfs/QmdmrdSB8bGHJkjRh141GHcE9T65r8EBGQGjS8Hyz3XtGc/json/")
(define-data-var mint-paused bool false)
(define-data-var premint-enabled bool false)
(define-data-var sale-enabled bool false)
(define-map mint-passes principal uint)
(define-public (claim)
(mint (list true))
)
(define-public (claim-three)
(mint (list true true true))
)
(define-public (claim-five)
(mint (list true true true true true))
)
(define-public (claim-ten)
(mint (list true true true true true true true true true true))
)
;; Default Minting
(define-private (mint (orders (list 10 bool)))
(mint-many orders)
)
(define-private (mint-many (orders (list 10 bool )))
(let (
(last-nft-id (var-get last-id))
(enabled (asserts! (<= last-nft-id (var-get mint-limit)) (err ERR-NO-MORE-NFTS)))
(art-addr (var-get artist-address))
(id-reached (fold mint-many-iter orders last-nft-id))
(price (* (var-get total-price) (- id-reached last-nft-id)))
(total-commission (/ (* price COMM) u10000))
(total-artist (- price total-commission))
)
(asserts! (is-eq false (var-get mint-paused)) (err ERR-PAUSED))
(if (or (is-eq tx-sender art-addr) (is-eq tx-sender DEPLOYER))
(begin
(var-set last-id id-reached)
)
(begin
(var-set last-id id-reached)
(try! (stx-transfer? total-artist tx-sender (var-get artist-address)))
(try! (stx-transfer? total-commission tx-sender COMM-ADDR))
)
)
(ok id-reached)
)
)
(define-private (mint-many-iter (ignore bool) (next-id uint))
(if (<= next-id (var-get mint-limit))
(begin
(unwrap! (nft-mint? beernfts next-id tx-sender) next-id)
(+ next-id u1)
)
next-id
)
)
(define-public (set-artist-address (address principal))
(begin
(asserts! (is-eq tx-sender DEPLOYER) (err ERR-INVALID-USER))
(ok (var-set artist-address address))
)
)
(define-public (set-price (price uint))
(begin
(asserts! (is-eq tx-sender DEPLOYER) (err ERR-INVALID-USER))
(ok (var-set total-price price))
)
)
(define-public (toggle-pause)
(begin
(asserts! (is-eq tx-sender DEPLOYER) (err ERR-INVALID-USER))
(ok (var-set mint-paused (not (var-get mint-paused))))
)
)
(define-public (set-mint-limit (limit uint))
(begin
(asserts! (is-eq tx-sender DEPLOYER) (err ERR-INVALID-USER))
(asserts! (< limit (var-get mint-limit)) (err ERR-MINT-LIMIT))
(ok (var-set mint-limit limit))
)
)
;; Default SIP-009 transfer fuction
(define-public (transfer (token-id uint) (sender principal) (recipient principal))
(begin
(asserts! (is-eq tx-sender sender) (err ERR-INVALID-USER))
(nft-transfer? beernfts token-id sender recipient)
)
)
;; read-only functions
(define-read-only (get-owner (token-id uint))
(ok (nft-get-owner? beernfts token-id)))
(define-read-only (get-last-token-id)
(ok (- (var-get last-id) u1)))
(define-read-only (get-token-uri (token-id uint))
(ok (some (concat (concat (var-get ipfs-root) "{id}") ".json"))))
(define-read-only (get-paused)
(ok (var-get mint-paused)))
(define-read-only (get-price)
(ok (var-get total-price)))