BCD

Tezos Contract Explorer
Search Networks Deploy
  • Home
  • /
  • Mainnet
  • /
  • NFT 4 NFT
operations (2.12K)Storage Code Interact Tokens Metadata Fork Statistics Details
Latest
​x
375
 
1
parameter (or (nat %accept_trade)
2
              (or (nat %cancel_trade)
3
                  (pair %propose_trade
4
                    (list %tokens (pair (address %fa2) (pair (nat %id) (nat %amount))))
5
                    (pair
6
                      (list %for_tokens (pair (address %fa2)
7
                                             (pair (nat %id) (nat %amount))))
8
                      (option %with_user address)))));
9
storage (pair (nat %counter)
10
              (pair (big_map %metadata string bytes)
11
                    (big_map %trades nat
12
                                     (pair (bool %executed)
13
                                           (pair (bool %cancelled)
14
                                                 (pair (address %user1)
15
                                                       (pair (option %user2 address)
16
                                                             (pair
17
                                                               (list %tokens1 (pair
18
                                                                               (address %fa2)
19
                                                                               (pair
20
                                                                                 (nat %id)
21
                                                                                 (nat %amount))))
22
                                                               (list %tokens2 (pair
23
                                                                               (address %fa2)
24
                                                                               (pair
25
                                                                                 (nat %id)
26
                                                                                 (nat %amount))))))))))));
27
code { UNPAIR ;
28
       IF_LEFT
29
         { SWAP ;
30
           DUP ;
31
           DUG 2 ;
32
           GET 4 ;
33
           SWAP ;
34
           DUP ;
35
           DUG 2 ;
36
           MEM ;
37
           IF {} { PUSH string "The provided trade id doesn't exist" ; FAILWITH } ;
38
           SWAP ;
39
           DUP ;
40
           DUG 2 ;
41
           GET 4 ;
42
           SWAP ;
43
           DUP ;
44
           DUG 2 ;
45
           GET ;
46
           IF_NONE { PUSH int 66 ; FAILWITH } {} ;
47
           CAR ;
48
           IF { PUSH string "The trade was executed" ; FAILWITH } {} ;
49
           SWAP ;
50
           DUP ;
51
           DUG 2 ;
52
           GET 4 ;
53
           SWAP ;
54
           DUP ;
55
           DUG 2 ;
56
           GET ;
57
           IF_NONE { PUSH int 70 ; FAILWITH } {} ;
58
           GET 3 ;
59
           IF { PUSH string "The trade was cancelled" ; FAILWITH } {} ;
60
           PUSH mutez 0 ;
61
           AMOUNT ;
62
           COMPARE ;
63
           EQ ;
64
           IF
65
             {}
66
             { PUSH string "The operation does not need tez transfers" ; FAILWITH } ;
67
           SWAP ;
68
           DUP ;
69
           DUG 2 ;
70
           GET 4 ;
71
           SWAP ;
72
           DUP ;
73
           DUG 2 ;
74
           GET ;
75
           IF_NONE { PUSH int 130 ; FAILWITH } {} ;
76
           GET 7 ;
77
           IF_NONE
78
             { SWAP ;
79
               DUP ;
80
               GET 4 ;
81
               DUP ;
82
               DUP 4 ;
83
               DUP ;
84
               DUG 2 ;
85
               GET ;
86
               IF_NONE { PUSH int 137 ; FAILWITH } {} ;
87
               SENDER ;
88
               SOME ;
89
               UPDATE 7 ;
90
               SOME ;
91
               SWAP ;
92
               UPDATE ;
93
               UPDATE 4 ;
94
               SWAP }
95
             { DROP ;
96
               SWAP ;
97
               DUP ;
98
               DUG 2 ;
99
               GET 4 ;
100
               SWAP ;
101
               DUP ;
102
               DUG 2 ;
103
               GET ;
104
               IF_NONE { PUSH int 130 ; FAILWITH } {} ;
105
               GET 7 ;
106
               IF_NONE { PUSH int 133 ; FAILWITH } {} ;
107
               SENDER ;
108
               COMPARE ;
109
               EQ ;
110
               IF {} { PUSH string "Only user2 can accept the trade" ; FAILWITH } } ;
111
           SWAP ;
112
           DUP ;
113
           GET 4 ;
114
           DUP ;
115
           DUP 4 ;
116
           DUP ;
117
           DUG 2 ;
118
           GET ;
119
           IF_NONE { PUSH int 140 ; FAILWITH } {} ;
120
           PUSH bool True ;
121
           UPDATE 1 ;
122
           SOME ;
123
           SWAP ;
124
           UPDATE ;
125
           UPDATE 4 ;
126
           SWAP ;
127
           NIL operation ;
128
           DUP 3 ;
129
           GET 4 ;
130
           DUP 3 ;
131
           GET ;
132
           IF_NONE { PUSH int 130 ; FAILWITH } {} ;
133
           GET 10 ;
134
           ITER { DUP ;
135
                  DUG 2 ;
136
                  CAR ;
137
                  CONTRACT %transfer (list (pair address
138
                                                (list (pair address (pair nat nat))))) ;
139
                  IF_NONE { PUSH int 199 ; FAILWITH } {} ;
140
                  PUSH mutez 0 ;
141
                  NIL (pair address (list (pair address (pair nat nat)))) ;
142
                  NIL (pair address (pair nat nat)) ;
143
                  DIG 5 ;
144
                  DUP ;
145
                  GET 4 ;
146
                  SWAP ;
147
                  GET 3 ;
148
                  DUP 9 ;
149
                  GET 4 ;
150
                  DUP 9 ;
151
                  GET ;
152
                  IF_NONE { PUSH int 130 ; FAILWITH } {} ;
153
                  GET 5 ;
154
                  PAIR 3 ;
155
                  CONS ;
156
                  SENDER ;
157
                  PAIR ;
158
                  CONS ;
159
                  TRANSFER_TOKENS ;
160
                  CONS } ;
161
           DUP 3 ;
162
           GET 4 ;
163
           DIG 2 ;
164
           GET ;
165
           IF_NONE { PUSH int 130 ; FAILWITH } {} ;
166
           GET 9 ;
167
           ITER { DUP ;
168
                  DUG 2 ;
169
                  CAR ;
170
                  CONTRACT %transfer (list (pair address
171
                                                (list (pair address (pair nat nat))))) ;
172
                  IF_NONE { PUSH int 199 ; FAILWITH } {} ;
173
                  PUSH mutez 0 ;
174
                  NIL (pair address (list (pair address (pair nat nat)))) ;
175
                  NIL (pair address (pair nat nat)) ;
176
                  DIG 5 ;
177
                  DUP ;
178
                  GET 4 ;
179
                  SWAP ;
180
                  GET 3 ;
181
                  SENDER ;
182
                  PAIR 3 ;
183
                  CONS ;
184
                  SELF_ADDRESS ;
185
                  PAIR ;
186
                  CONS ;
187
                  TRANSFER_TOKENS ;
188
                  CONS } }
189
         { IF_LEFT
190
             { SWAP ;
191
               DUP ;
192
               DUG 2 ;
193
               GET 4 ;
194
               SWAP ;
195
               DUP ;
196
               DUG 2 ;
197
               MEM ;
198
               IF {} { PUSH string "The provided trade id doesn't exist" ; FAILWITH } ;
199
               SWAP ;
200
               DUP ;
201
               DUG 2 ;
202
               GET 4 ;
203
               SWAP ;
204
               DUP ;
205
               DUG 2 ;
206
               GET ;
207
               IF_NONE { PUSH int 66 ; FAILWITH } {} ;
208
               CAR ;
209
               IF { PUSH string "The trade was executed" ; FAILWITH } {} ;
210
               SWAP ;
211
               DUP ;
212
               DUG 2 ;
213
               GET 4 ;
214
               SWAP ;
215
               DUP ;
216
               DUG 2 ;
217
               GET ;
218
               IF_NONE { PUSH int 70 ; FAILWITH } {} ;
219
               GET 3 ;
220
               IF { PUSH string "The trade was cancelled" ; FAILWITH } {} ;
221
               PUSH mutez 0 ;
222
               AMOUNT ;
223
               COMPARE ;
224
               EQ ;
225
               IF
226
                 {}
227
                 { PUSH string "The operation does not need tez transfers" ; FAILWITH } ;
228
               SWAP ;
229
               DUP ;
230
               DUG 2 ;
231
               GET 4 ;
232
               SWAP ;
233
               DUP ;
234
               DUG 2 ;
235
               GET ;
236
               IF_NONE { PUSH int 169 ; FAILWITH } {} ;
237
               GET 5 ;
238
               SENDER ;
239
               COMPARE ;
240
               EQ ;
241
               IF {} { PUSH string "Only user1 can cancel the trade" ; FAILWITH } ;
242
               SWAP ;
243
               DUP ;
244
               GET 4 ;
245
               DUP ;
246
               DUP 4 ;
247
               DUP ;
248
               DUG 2 ;
249
               GET ;
250
               IF_NONE { PUSH int 174 ; FAILWITH } {} ;
251
               PUSH bool True ;
252
               UPDATE 3 ;
253
               SOME ;
254
               SWAP ;
255
               UPDATE ;
256
               UPDATE 4 ;
257
               SWAP ;
258
               NIL operation ;
259
               DUP 3 ;
260
               GET 4 ;
261
               DIG 2 ;
262
               GET ;
263
               IF_NONE { PUSH int 169 ; FAILWITH } {} ;
264
               GET 9 ;
265
               ITER { DUP ;
266
                      DUG 2 ;
267
                      CAR ;
268
                      CONTRACT %transfer (list (pair address
269
                                                    (list (pair address (pair nat nat))))) ;
270
                      IF_NONE { PUSH int 199 ; FAILWITH } {} ;
271
                      PUSH mutez 0 ;
272
                      NIL (pair address (list (pair address (pair nat nat)))) ;
273
                      NIL (pair address (pair nat nat)) ;
274
                      DIG 5 ;
275
                      DUP ;
276
                      GET 4 ;
277
                      SWAP ;
278
                      GET 3 ;
279
                      SENDER ;
280
                      PAIR 3 ;
281
                      CONS ;
282
                      SELF_ADDRESS ;
283
                      PAIR ;
284
                      CONS ;
285
                      TRANSFER_TOKENS ;
286
                      CONS } }
287
             { PUSH mutez 0 ;
288
               AMOUNT ;
289
               COMPARE ;
290
               EQ ;
291
               IF
292
                 {}
293
                 { PUSH string "The operation does not need tez transfers" ; FAILWITH } ;
294
               DUP ;
295
               CAR ;
296
               ITER { GET 4 ;
297
                      PUSH nat 0 ;
298
                      SWAP ;
299
                      COMPARE ;
300
                      GE ;
301
                      IF
302
                        {}
303
                        { PUSH string "At least one token edition needs to be traded" ;
304
                          FAILWITH } } ;
305
               DUP ;
306
               GET 3 ;
307
               ITER { GET 4 ;
308
                      PUSH nat 0 ;
309
                      SWAP ;
310
                      COMPARE ;
311
                      GE ;
312
                      IF
313
                        {}
314
                        { PUSH string "At least one token edition needs to be traded" ;
315
                          FAILWITH } } ;
316
               DUP ;
317
               CAR ;
318
               NIL operation ;
319
               SWAP ;
320
               ITER { DUP ;
321
                      DUG 2 ;
322
                      CAR ;
323
                      CONTRACT %transfer (list (pair address
324
                                                    (list (pair address (pair nat nat))))) ;
325
                      IF_NONE { PUSH int 199 ; FAILWITH } {} ;
326
                      PUSH mutez 0 ;
327
                      NIL (pair address (list (pair address (pair nat nat)))) ;
328
                      NIL (pair address (pair nat nat)) ;
329
                      DIG 5 ;
330
                      DUP ;
331
                      GET 4 ;
332
                      SWAP ;
333
                      GET 3 ;
334
                      SELF_ADDRESS ;
335
                      PAIR 3 ;
336
                      CONS ;
337
                      SENDER ;
338
                      PAIR ;
339
                      CONS ;
340
                      TRANSFER_TOKENS ;
341
                      CONS } ;
342
               DUP 3 ;
343
               DUP ;
344
               GET 4 ;
345
               DIG 3 ;
346
               DUP ;
347
               GET 3 ;
348
               SWAP ;
349
               DUP ;
350
               CAR ;
351
               SWAP ;
352
               DUP ;
353
               DUG 6 ;
354
               GET 4 ;
355
               SENDER ;
356
               PUSH bool False ;
357
               DUP ;
358
               PAIR 6 ;
359
               DIG 4 ;
360
               DROP ;
361
               SOME ;
362
               DIG 4 ;
363
               CAR ;
364
               UPDATE ;
365
               UPDATE 4 ;
366
               DUP ;
367
               CAR ;
368
               PUSH nat 1 ;
369
               ADD ;
370
               UPDATE 1 ;
371
               SWAP } } ;
372
       NIL operation ;
373
       SWAP ;
374
       ITER { CONS } ;
375
       PAIR }