BCD

Tezos Contract Explorer
Search Networks Deploy
  • Home
  • /
  • Ghostnet
  • /
  • KT1Lq11...prZh
operations (15)Storage Code Interact Tokens Fork Statistics Details
Latest
​x
944
1063
 
1
parameter (or
2
            (or (nat %accept_trade)
3
                (or (nat %cancel_trade_proposal) (address %modify_administrator)))
4
            (or (pair %modify_admins (address %admin) (bool %isAdmin))
5
                (or (pair %modify_denylist (address %contract) (bool %deny))
6
                    (pair %propose_trade (address %proposer)
7
                                         (pair (address %acceptor)
8
                                               (pair (mutez %mutez_amount1)
9
                                                     (pair (mutez %mutez_amount2)
10
                                                           (pair
11
                                                             (list %tokens1 (pair
12
                                                                             (address %fa2)
13
                                                                             (pair
14
                                                                               (nat %id)
15
                                                                               (pair
16
                                                                                 (nat %amount)
17
                                                                                 (list %royalty_addresses address)))))
18
                                                             (list %tokens2 (pair
19
                                                                             (address %fa2)
20
                                                                             (pair
21
                                                                               (nat %id)
22
                                                                               (pair
23
                                                                                 (nat %amount)
24
                                                                                 (list %royalty_addresses address)))))))))))));
25
storage (pair
26
          (pair (address %administrator)
27
                (pair (map %admins address bool) (nat %counter)))
28
          (pair (big_map %denylist address bool)
29
                (pair (big_map %metadata string bytes)
30
                      (big_map %trades nat
31
                                       (pair
32
                                         (pair (bool %acceptor_accepted)
33
                                               (bool %executed))
34
                                         (pair (address %executor)
35
                                               (pair
36
                                                 (pair %proposal (address %proposer)
37
                                                                 (pair
38
                                                                   (address %acceptor)
39
                                                                   (pair
40
                                                                     (mutez %mutez_amount1)
41
                                                                     (pair
42
                                                                       (mutez %mutez_amount2)
43
                                                                       (pair
44
                                                                         (list %tokens1 (pair
45
                                                                                         (address %fa2)
46
                                                                                         (pair
47
                                                                                           (nat %id)
48
                                                                                           (pair
49
                                                                                             (nat %amount)
50
                                                                                             (list %royalty_addresses address)))))
51
                                                                         (list %tokens2 (pair
52
                                                                                         (address %fa2)
53
                                                                                         (pair
54
                                                                                           (nat %id)
55
                                                                                           (pair
56
                                                                                             (nat %amount)
57
                                                                                             (list %royalty_addresses address))))))))))
58
                                                 (bool %proposer_accepted))))))));
59
code { UNPAIR ;
60
       IF_LEFT
61
         { IF_LEFT
62
             { SWAP ;
63
               DUP ;
64
               DUG 2 ;
65
               GET 6 ;
66
               SWAP ;
67
               DUP ;
68
               DUG 2 ;
69
               MEM ;
70
               IF {} { PUSH string "The provided trade id doesn't exist" ; FAILWITH } ;
71
               SWAP ;
72
               DUP ;
73
               DUG 2 ;
74
               GET 6 ;
75
               SWAP ;
76
               DUP ;
77
               DUG 2 ;
78
               GET ;
79
               IF_NONE { PUSH int 167 ; FAILWITH } {} ;
80
               CAR ;
81
               CDR ;
82
               IF { PUSH string "Trade already executed" ; FAILWITH } {} ;
83
               SWAP ;
84
               DUP ;
85
               DUG 2 ;
86
               GET 6 ;
87
               SWAP ;
88
               DUP ;
89
               DUG 2 ;
90
               GET ;
91
               IF_NONE { PUSH int 250 ; FAILWITH } {} ;
92
               GET 5 ;
93
               GET 3 ;
94
               SENDER ;
95
               COMPARE ;
96
               EQ ;
97
               IF
98
                 { PUSH bool True }
99
                 { SWAP ;
100
                   DUP ;
101
                   DUG 2 ;
102
                   GET 6 ;
103
                   SWAP ;
104
                   DUP ;
105
                   DUG 2 ;
106
                   GET ;
107
                   IF_NONE { PUSH int 250 ; FAILWITH } {} ;
108
                   GET 5 ;
109
                   GET 3 ;
110
                   SELF_ADDRESS ;
111
                   COMPARE ;
112
                   EQ } ;
113
               IF
114
                 {}
115
                 { PUSH string "This can only be executed by the trade acceptor" ;
116
                   FAILWITH } ;
117
               SWAP ;
118
               DUP ;
119
               DUG 2 ;
120
               GET 6 ;
121
               SWAP ;
122
               DUP ;
123
               DUG 2 ;
124
               GET ;
125
               IF_NONE { PUSH int 250 ; FAILWITH } {} ;
126
               GET 5 ;
127
               CAR ;
128
               SENDER ;
129
               COMPARE ;
130
               NEQ ;
131
               IF
132
                 {}
133
                 { PUSH string "This can not be executed by the trade proposer" ;
134
                   FAILWITH } ;
135
               SWAP ;
136
               DUP ;
137
               DUG 2 ;
138
               GET 6 ;
139
               SWAP ;
140
               DUP ;
141
               DUG 2 ;
142
               GET ;
143
               IF_NONE { PUSH int 250 ; FAILWITH } {} ;
144
               CAR ;
145
               CAR ;
146
               IF { PUSH string "The trade is already accepted" ; FAILWITH } {} ;
147
               SWAP ;
148
               DUP ;
149
               GET 6 ;
150
               DUP ;
151
               DUP 4 ;
152
               DUP ;
153
               DUG 2 ;
154
               GET ;
155
               IF_NONE { PUSH int 259 ; FAILWITH } {} ;
156
               UNPAIR ;
157
               CDR ;
158
               PUSH bool True ;
159
               PAIR ;
160
               PAIR ;
161
               SOME ;
162
               SWAP ;
163
               UPDATE ;
164
               UPDATE 6 ;
165
               SWAP ;
166
               PUSH mutez 0 ;
167
               DUP 3 ;
168
               GET 6 ;
169
               DUP 3 ;
170
               GET ;
171
               IF_NONE { PUSH int 250 ; FAILWITH } {} ;
172
               GET 5 ;
173
               GET 7 ;
174
               COMPARE ;
175
               NEQ ;
176
               IF
177
                 { SWAP ;
178
                   DUP ;
179
                   DUG 2 ;
180
                   GET 6 ;
181
                   SWAP ;
182
                   DUP ;
183
                   DUG 2 ;
184
                   GET ;
185
                   IF_NONE { PUSH int 250 ; FAILWITH } {} ;
186
                   GET 5 ;
187
                   GET 7 ;
188
                   AMOUNT ;
189
                   COMPARE ;
190
                   EQ ;
191
                   IF
192
                     {}
193
                     { PUSH string "The sent tez amount does not coincide trade proposal amount with 5% royalties" ;
194
                       FAILWITH } }
195
                 {} ;
196
               PUSH bool True ;
197
               DUP 3 ;
198
               GET 6 ;
199
               DUP 3 ;
200
               GET ;
201
               IF_NONE { PUSH int 250 ; FAILWITH } {} ;
202
               GET 6 ;
203
               COMPARE ;
204
               EQ ;
205
               IF
206
                 { PUSH bool True ;
207
                   DUP 3 ;
208
                   GET 6 ;
209
                   DUP 3 ;
210
                   GET ;
211
                   IF_NONE { PUSH int 250 ; FAILWITH } {} ;
212
                   CAR ;
213
                   CAR ;
214
                   COMPARE ;
215
                   EQ }
216
                 { PUSH bool False } ;
217
               IF {} { PUSH string "Trade is not completely accepted" ; FAILWITH } ;
218
               SWAP ;
219
               DUP ;
220
               GET 6 ;
221
               DUP ;
222
               DUP 4 ;
223
               DUP ;
224
               DUG 2 ;
225
               GET ;
226
               IF_NONE { PUSH int 270 ; FAILWITH } {} ;
227
               UNPAIR ;
228
               CAR ;
229
               PUSH bool True ;
230
               SWAP ;
231
               PAIR ;
232
               PAIR ;
233
               SOME ;
234
               SWAP ;
235
               UPDATE ;
236
               UPDATE 6 ;
237
               DUP ;
238
               GET 6 ;
239
               DUP ;
240
               DUP 4 ;
241
               DUP ;
242
               DUG 2 ;
243
               GET ;
244
               IF_NONE { PUSH int 271 ; FAILWITH } {} ;
245
               SENDER ;
246
               UPDATE 3 ;
247
               SOME ;
248
               SWAP ;
249
               UPDATE ;
250
               UPDATE 6 ;
251
               SWAP ;
252
               PUSH nat 0 ;
253
               PUSH nat 0 ;
254
               DUP 4 ;
255
               GET 6 ;
256
               DUP 4 ;
257
               GET ;
258
               IF_NONE { PUSH int 250 ; FAILWITH } {} ;
259
               GET 5 ;
260
               GET 9 ;
261
               ITER { GET 6 ; SIZE ; DIG 2 ; ADD ; SWAP } ;
262
               PUSH mutez 0 ;
263
               DUP 5 ;
264
               GET 6 ;
265
               DUP 5 ;
266
               GET ;
267
               IF_NONE { PUSH int 250 ; FAILWITH } {} ;
268
               GET 5 ;
269
               GET 5 ;
270
               COMPARE ;
271
               NEQ ;
272
               IF
273
                 { PUSH nat 0 ;
274
                   DUP 3 ;
275
                   COMPARE ;
276
                   GT ;
277
                   IF
278
                     { PUSH mutez 0 ;
279
                       PUSH nat 20 ;
280
                       PUSH nat 1 ;
281
                       DUP 7 ;
282
                       GET 6 ;
283
                       DUP 7 ;
284
                       GET ;
285
                       IF_NONE { PUSH int 250 ; FAILWITH } {} ;
286
                       GET 5 ;
287
                       GET 5 ;
288
                       MUL ;
289
                       EDIV ;
290
                       IF_NONE { PUSH int 288 ; FAILWITH } {} ;
291
                       CAR ;
292
                       DUP 6 ;
293
                       GET 6 ;
294
                       DUP 6 ;
295
                       GET ;
296
                       IF_NONE { PUSH int 250 ; FAILWITH } {} ;
297
                       GET 5 ;
298
                       GET 5 ;
299
                       SUB_MUTEZ ;
300
                       IF_NONE { PUSH int 289 ; FAILWITH } {} ;
301
                       COMPARE ;
302
                       NEQ ;
303
                       IF
304
                         { NIL operation ;
305
                           SENDER ;
306
                           CONTRACT unit ;
307
                           IF_NONE { PUSH int 291 ; FAILWITH } {} ;
308
                           PUSH nat 20 ;
309
                           PUSH nat 1 ;
310
                           DUP 8 ;
311
                           GET 6 ;
312
                           DUP 8 ;
313
                           GET ;
314
                           IF_NONE { PUSH int 250 ; FAILWITH } {} ;
315
                           GET 5 ;
316
                           GET 5 ;
317
                           MUL ;
318
                           EDIV ;
319
                           IF_NONE { PUSH int 288 ; FAILWITH } {} ;
320
                           CAR ;
321
                           DUP 7 ;
322
                           GET 6 ;
323
                           DUP 7 ;
324
                           GET ;
325
                           IF_NONE { PUSH int 250 ; FAILWITH } {} ;
326
                           GET 5 ;
327
                           GET 5 ;
328
                           SUB_MUTEZ ;
329
                           IF_NONE { PUSH int 291 ; FAILWITH } {} ;
330
                           UNIT ;
331
                           TRANSFER_TOKENS ;
332
                           CONS }
333
                         { NIL operation } }
334
                     { NIL operation ;
335
                       SENDER ;
336
                       CONTRACT unit ;
337
                       IF_NONE { PUSH int 293 ; FAILWITH } {} ;
338
                       DUP 6 ;
339
                       GET 6 ;
340
                       DUP 6 ;
341
                       GET ;
342
                       IF_NONE { PUSH int 250 ; FAILWITH } {} ;
343
                       GET 5 ;
344
                       GET 5 ;
345
                       UNIT ;
346
                       TRANSFER_TOKENS ;
347
                       CONS } }
348
                 { NIL operation } ;
349
               DUP 5 ;
350
               GET 6 ;
351
               DUP 5 ;
352
               GET ;
353
               IF_NONE { PUSH int 250 ; FAILWITH } {} ;
354
               GET 5 ;
355
               GET 10 ;
356
               ITER { GET 6 ; SIZE ; DIG 2 ; ADD ; SWAP } ;
357
               PUSH mutez 0 ;
358
               DUP 6 ;
359
               GET 6 ;
360
               DUP 6 ;
361
               GET ;
362
               IF_NONE { PUSH int 250 ; FAILWITH } {} ;
363
               GET 5 ;
364
               GET 7 ;
365
               COMPARE ;
366
               NEQ ;
367
               IF
368
                 { PUSH nat 0 ;
369
                   DUP 3 ;
370
                   COMPARE ;
371
                   GT ;
372
                   IF
373
                     { PUSH mutez 0 ;
374
                       PUSH nat 20 ;
375
                       PUSH nat 1 ;
376
                       DUP 8 ;
377
                       GET 6 ;
378
                       DUP 8 ;
379
                       GET ;
380
                       IF_NONE { PUSH int 250 ; FAILWITH } {} ;
381
                       GET 5 ;
382
                       GET 7 ;
383
                       MUL ;
384
                       EDIV ;
385
                       IF_NONE { PUSH int 302 ; FAILWITH } {} ;
386
                       CAR ;
387
                       DUP 7 ;
388
                       GET 6 ;
389
                       DUP 7 ;
390
                       GET ;
391
                       IF_NONE { PUSH int 250 ; FAILWITH } {} ;
392
                       GET 5 ;
393
                       GET 7 ;
394
                       SUB_MUTEZ ;
395
                       IF_NONE { PUSH int 303 ; FAILWITH } {} ;
396
                       COMPARE ;
397
                       NEQ ;
398
                       IF
399
                         { DUP 5 ;
400
                           GET 6 ;
401
                           DUP 5 ;
402
                           GET ;
403
                           IF_NONE { PUSH int 250 ; FAILWITH } {} ;
404
                           GET 5 ;
405
                           CAR ;
406
                           CONTRACT unit ;
407
                           IF_NONE { PUSH int 305 ; FAILWITH } {} ;
408
                           PUSH nat 20 ;
409
                           PUSH nat 1 ;
410
                           DUP 8 ;
411
                           GET 6 ;
412
                           DUP 8 ;
413
                           GET ;
414
                           IF_NONE { PUSH int 250 ; FAILWITH } {} ;
415
                           GET 5 ;
416
                           GET 7 ;
417
                           MUL ;
418
                           EDIV ;
419
                           IF_NONE { PUSH int 302 ; FAILWITH } {} ;
420
                           CAR ;
421
                           DUP 7 ;
422
                           GET 6 ;
423
                           DUP 7 ;
424
                           GET ;
425
                           IF_NONE { PUSH int 250 ; FAILWITH } {} ;
426
                           GET 5 ;
427
                           GET 7 ;
428
                           SUB_MUTEZ ;
429
                           IF_NONE { PUSH int 305 ; FAILWITH } {} ;
430
                           UNIT ;
431
                           TRANSFER_TOKENS ;
432
                           CONS }
433
                         {} }
434
                     { DUP 5 ;
435
                       GET 6 ;
436
                       DUP 5 ;
437
                       GET ;
438
                       IF_NONE { PUSH int 250 ; FAILWITH } {} ;
439
                       GET 5 ;
440
                       CAR ;
441
                       CONTRACT unit ;
442
                       IF_NONE { PUSH int 307 ; FAILWITH } {} ;
443
                       DUP 6 ;
444
                       GET 6 ;
445
                       DUP 6 ;
446
                       GET ;
447
                       IF_NONE { PUSH int 250 ; FAILWITH } {} ;
448
                       GET 5 ;
449
                       GET 7 ;
450
                       UNIT ;
451
                       TRANSFER_TOKENS ;
452
                       CONS } }
453
                 {} ;
454
               DUP 5 ;
455
               GET 6 ;
456
               DUP 5 ;
457
               GET ;
458
               IF_NONE { PUSH int 250 ; FAILWITH } {} ;
459
               GET 5 ;
460
               GET 9 ;
461
               ITER { DUP 6 ;
462
                      GET 3 ;
463
                      SWAP ;
464
                      DUP ;
465
                      DUG 2 ;
466
                      CAR ;
467
                      MEM ;
468
                      IF
469
                        { PUSH bool False ;
470
                          DUP 7 ;
471
                          GET 3 ;
472
                          DUP 3 ;
473
                          CAR ;
474
                          GET ;
475
                          IF_NONE { PUSH int 175 ; FAILWITH } {} ;
476
                          COMPARE ;
477
                          EQ }
478
                        { PUSH bool True } ;
479
                      IF
480
                        {}
481
                        { PUSH string "The contract is on the denylist" ; FAILWITH } ;
482
                      DUP ;
483
                      DUG 2 ;
484
                      CAR ;
485
                      CONTRACT %transfer (list (pair (address %from_)
486
                                                    (list %txs (pair (address %to_)
487
                                                                    (pair
488
                                                                      (nat %token_id)
489
                                                                      (nat %amount)))))) ;
490
                      IF_NONE { PUSH int 414 ; FAILWITH } {} ;
491
                      PUSH mutez 0 ;
492
                      NIL (pair address (list (pair address (pair nat nat)))) ;
493
                      NIL (pair address (pair nat nat)) ;
494
                      DIG 5 ;
495
                      DUP ;
496
                      GET 5 ;
497
                      SWAP ;
498
                      DUP ;
499
                      DUG 7 ;
500
                      GET 3 ;
501
                      SENDER ;
502
                      PAIR 3 ;
503
                      CONS ;
504
                      DUP 10 ;
505
                      GET 6 ;
506
                      DUP 10 ;
507
                      GET ;
508
                      IF_NONE { PUSH int 250 ; FAILWITH } {} ;
509
                      GET 5 ;
510
                      CAR ;
511
                      PAIR ;
512
                      CONS ;
513
                      TRANSFER_TOKENS ;
514
                      CONS ;
515
                      SWAP ;
516
                      DUP ;
517
                      GET 6 ;
518
                      ITER { PUSH mutez 0 ;
519
                             DUP 6 ;
520
                             PUSH nat 1 ;
521
                             PUSH nat 20 ;
522
                             PUSH nat 1 ;
523
                             DUP 12 ;
524
                             GET 6 ;
525
                             DUP 12 ;
526
                             GET ;
527
                             IF_NONE { PUSH int 250 ; FAILWITH } {} ;
528
                             GET 5 ;
529
                             GET 5 ;
530
                             MUL ;
531
                             EDIV ;
532
                             IF_NONE { PUSH int 288 ; FAILWITH } {} ;
533
                             CAR ;
534
                             MUL ;
535
                             EDIV ;
536
                             IF_NONE { PUSH int 322 ; FAILWITH } {} ;
537
                             CAR ;
538
                             COMPARE ;
539
                             NEQ ;
540
                             IF
541
                               { DIG 2 ;
542
                                 SWAP ;
543
                                 CONTRACT unit ;
544
                                 IF_NONE { PUSH int 324 ; FAILWITH } {} ;
545
                                 DUP 5 ;
546
                                 PUSH nat 1 ;
547
                                 PUSH nat 20 ;
548
                                 PUSH nat 1 ;
549
                                 DUP 11 ;
550
                                 GET 6 ;
551
                                 DUP 11 ;
552
                                 GET ;
553
                                 IF_NONE { PUSH int 250 ; FAILWITH } {} ;
554
                                 GET 5 ;
555
                                 GET 5 ;
556
                                 MUL ;
557
                                 EDIV ;
558
                                 IF_NONE { PUSH int 288 ; FAILWITH } {} ;
559
                                 CAR ;
560
                                 MUL ;
561
                                 EDIV ;
562
                                 IF_NONE { PUSH int 322 ; FAILWITH } {} ;
563
                                 CAR ;
564
                                 UNIT ;
565
                                 TRANSFER_TOKENS ;
566
                                 CONS ;
567
                                 SWAP }
568
                               { DROP } } ;
569
                      DROP } ;
570
               DUP 5 ;
571
               GET 6 ;
572
               DUP 5 ;
573
               GET ;
574
               IF_NONE { PUSH int 250 ; FAILWITH } {} ;
575
               GET 5 ;
576
               GET 10 ;
577
               ITER { DUP 6 ;
578
                      GET 3 ;
579
                      SWAP ;
580
                      DUP ;
581
                      DUG 2 ;
582
                      CAR ;
583
                      MEM ;
584
                      IF
585
                        { PUSH bool False ;
586
                          DUP 7 ;
587
                          GET 3 ;
588
                          DUP 3 ;
589
                          CAR ;
590
                          GET ;
591
                          IF_NONE { PUSH int 175 ; FAILWITH } {} ;
592
                          COMPARE ;
593
                          EQ }
594
                        { PUSH bool True } ;
595
                      IF
596
                        {}
597
                        { PUSH string "The contract is on the denylist" ; FAILWITH } ;
598
                      DUP ;
599
                      DUG 2 ;
600
                      CAR ;
601
                      CONTRACT %transfer (list (pair (address %from_)
602
                                                    (list %txs (pair (address %to_)
603
                                                                    (pair
604
                                                                      (nat %token_id)
605
                                                                      (nat %amount)))))) ;
606
                      IF_NONE { PUSH int 414 ; FAILWITH } {} ;
607
                      PUSH mutez 0 ;
608
                      NIL (pair address (list (pair address (pair nat nat)))) ;
609
                      NIL (pair address (pair nat nat)) ;
610
                      DIG 5 ;
611
                      DUP ;
612
                      GET 5 ;
613
                      SWAP ;
614
                      DUP ;
615
                      DUG 7 ;
616
                      GET 3 ;
617
                      DUP 12 ;
618
                      GET 6 ;
619
                      DUP 12 ;
620
                      GET ;
621
                      IF_NONE { PUSH int 250 ; FAILWITH } {} ;
622
                      GET 5 ;
623
                      CAR ;
624
                      PAIR 3 ;
625
                      CONS ;
626
                      SENDER ;
627
                      PAIR ;
628
                      CONS ;
629
                      TRANSFER_TOKENS ;
630
                      CONS ;
631
                      SWAP ;
632
                      DUP ;
633
                      GET 6 ;
634
                      ITER { PUSH mutez 0 ;
635
                             DUP 5 ;
636
                             PUSH nat 1 ;
637
                             PUSH nat 20 ;
638
                             PUSH nat 1 ;
639
                             DUP 12 ;
640
                             GET 6 ;
641
                             DUP 12 ;
642
                             GET ;
643
                             IF_NONE { PUSH int 250 ; FAILWITH } {} ;
644
                             GET 5 ;
645
                             GET 7 ;
646
                             MUL ;
647
                             EDIV ;
648
                             IF_NONE { PUSH int 302 ; FAILWITH } {} ;
649
                             CAR ;
650
                             MUL ;
651
                             EDIV ;
652
                             IF_NONE { PUSH int 339 ; FAILWITH } {} ;
653
                             CAR ;
654
                             COMPARE ;
655
                             NEQ ;
656
                             IF
657
                               { DIG 2 ;
658
                                 SWAP ;
659
                                 CONTRACT unit ;
660
                                 IF_NONE { PUSH int 341 ; FAILWITH } {} ;
661
                                 DUP 4 ;
662
                                 PUSH nat 1 ;
663
                                 PUSH nat 20 ;
664
                                 PUSH nat 1 ;
665
                                 DUP 11 ;
666
                                 GET 6 ;
667
                                 DUP 11 ;
668
                                 GET ;
669
                                 IF_NONE { PUSH int 250 ; FAILWITH } {} ;
670
                                 GET 5 ;
671
                                 GET 7 ;
672
                                 MUL ;
673
                                 EDIV ;
674
                                 IF_NONE { PUSH int 302 ; FAILWITH } {} ;
675
                                 CAR ;
676
                                 MUL ;
677
                                 EDIV ;
678
                                 IF_NONE { PUSH int 339 ; FAILWITH } {} ;
679
                                 CAR ;
680
                                 UNIT ;
681
                                 TRANSFER_TOKENS ;
682
                                 CONS ;
683
                                 SWAP }
684
                               { DROP } } ;
685
                      DROP } ;
686
               SWAP ;
687
               DROP ;
688
               SWAP ;
689
               DROP ;
690
               SWAP ;
691
               DROP }
692
             { IF_LEFT
693
                 { PUSH mutez 0 ;
694
                   AMOUNT ;
695
                   COMPARE ;
696
                   EQ ;
697
                   IF {} { PUSH string "The operation does not need tez" ; FAILWITH } ;
698
                   SWAP ;
699
                   DUP ;
700
                   DUG 2 ;
701
                   GET 6 ;
702
                   SWAP ;
703
                   DUP ;
704
                   DUG 2 ;
705
                   MEM ;
706
                   IF
707
                     {}
708
                     { PUSH string "The provided trade id doesn't exist" ; FAILWITH } ;
709
                   SWAP ;
710
                   DUP ;
711
                   DUG 2 ;
712
                   GET 6 ;
713
                   SWAP ;
714
                   DUP ;
715
                   DUG 2 ;
716
                   GET ;
717
                   IF_NONE { PUSH int 167 ; FAILWITH } {} ;
718
                   CAR ;
719
                   CDR ;
720
                   IF { PUSH string "Trade already executed" ; FAILWITH } {} ;
721
                   SWAP ;
722
                   DUP ;
723
                   DUG 2 ;
724
                   GET 6 ;
725
                   SWAP ;
726
                   DUP ;
727
                   DUG 2 ;
728
                   GET ;
729
                   IF_NONE { PUSH int 358 ; FAILWITH } {} ;
730
                   GET 5 ;
731
                   CAR ;
732
                   SENDER ;
733
                   COMPARE ;
734
                   EQ ;
735
                   IF
736
                     {}
737
                     { PUSH string "This can only be executed by the trade proposer" ;
738
                       FAILWITH } ;
739
                   SWAP ;
740
                   DUP ;
741
                   DUG 2 ;
742
                   GET 6 ;
743
                   SWAP ;
744
                   DUP ;
745
                   DUG 2 ;
746
                   GET ;
747
                   IF_NONE { PUSH int 358 ; FAILWITH } {} ;
748
                   GET 6 ;
749
                   IF
750
                     {}
751
                     { PUSH string "The trade was not accepted before" ; FAILWITH } ;
752
                   SWAP ;
753
                   DUP ;
754
                   GET 6 ;
755
                   DUP ;
756
                   DUP 4 ;
757
                   DUP ;
758
                   DUG 2 ;
759
                   GET ;
760
                   IF_NONE { PUSH int 366 ; FAILWITH } {} ;
761
                   PUSH bool False ;
762
                   UPDATE 6 ;
763
                   SOME ;
764
                   SWAP ;
765
                   UPDATE ;
766
                   UPDATE 6 ;
767
                   SWAP ;
768
                   PUSH mutez 0 ;
769
                   DUP 3 ;
770
                   GET 6 ;
771
                   DUP 3 ;
772
                   GET ;
773
                   IF_NONE { PUSH int 358 ; FAILWITH } {} ;
774
                   GET 5 ;
775
                   GET 5 ;
776
                   COMPARE ;
777
                   NEQ ;
778
                   IF
779
                     { NIL operation ;
780
                       SENDER ;
781
                       CONTRACT unit ;
782
                       IF_NONE { PUSH int 370 ; FAILWITH } {} ;
783
                       DUP 4 ;
784
                       GET 6 ;
785
                       DIG 3 ;
786
                       GET ;
787
                       IF_NONE { PUSH int 358 ; FAILWITH } {} ;
788
                       GET 5 ;
789
                       GET 5 ;
790
                       UNIT ;
791
                       TRANSFER_TOKENS ;
792
                       CONS }
793
                     { DROP ; NIL operation } }
794
                 { SWAP ;
795
                   DUP ;
796
                   DUG 2 ;
797
                   CAR ;
798
                   GET 3 ;
799
                   SENDER ;
800
                   MEM ;
801
                   IF
802
                     { PUSH bool True ;
803
                       DUP 3 ;
804
                       CAR ;
805
                       GET 3 ;
806
                       SENDER ;
807
                       GET ;
808
                       IF_NONE { PUSH int 115 ; FAILWITH } {} ;
809
                       COMPARE ;
810
                       EQ }
811
                     { PUSH bool False } ;
812
                   IF
813
                     { PUSH bool True }
814
                     { SWAP ; DUP ; DUG 2 ; CAR ; CAR ; SENDER ; COMPARE ; EQ } ;
815
                   IF {} { PUSH string "NOT_ADMIN" ; FAILWITH } ;
816
                   SWAP ;
817
                   UNPAIR ;
818
                   CDR ;
819
                   DIG 2 ;
820
                   PAIR ;
821
                   PAIR ;
822
                   NIL operation } } }
823
         { IF_LEFT
824
             { SWAP ;
825
               DUP ;
826
               DUG 2 ;
827
               CAR ;
828
               GET 3 ;
829
               SENDER ;
830
               MEM ;
831
               IF
832
                 { PUSH bool True ;
833
                   DUP 3 ;
834
                   CAR ;
835
                   GET 3 ;
836
                   SENDER ;
837
                   GET ;
838
                   IF_NONE { PUSH int 115 ; FAILWITH } {} ;
839
                   COMPARE ;
840
                   EQ }
841
                 { PUSH bool False } ;
842
               IF
843
                 { PUSH bool True }
844
                 { SWAP ; DUP ; DUG 2 ; CAR ; CAR ; SENDER ; COMPARE ; EQ } ;
845
               IF {} { PUSH string "NOT_ADMIN" ; FAILWITH } ;
846
               SWAP ;
847
               UNPAIR ;
848
               UNPAIR ;
849
               SWAP ;
850
               UNPAIR ;
851
               DUP 5 ;
852
               CDR ;
853
               SOME ;
854
               DIG 5 ;
855
               CAR ;
856
               UPDATE ;
857
               PAIR ;
858
               SWAP ;
859
               PAIR ;
860
               PAIR ;
861
               NIL operation }
862
             { IF_LEFT
863
                 { SWAP ;
864
                   DUP ;
865
                   DUG 2 ;
866
                   CAR ;
867
                   GET 3 ;
868
                   SENDER ;
869
                   MEM ;
870
                   IF
871
                     { PUSH bool True ;
872
                       DUP 3 ;
873
                       CAR ;
874
                       GET 3 ;
875
                       SENDER ;
876
                       GET ;
877
                       IF_NONE { PUSH int 115 ; FAILWITH } {} ;
878
                       COMPARE ;
879
                       EQ }
880
                     { PUSH bool False } ;
881
                   IF
882
                     { PUSH bool True }
883
                     { SWAP ; DUP ; DUG 2 ; CAR ; CAR ; SENDER ; COMPARE ; EQ } ;
884
                   IF {} { PUSH string "NOT_ADMIN" ; FAILWITH } ;
885
                   SWAP ;
886
                   DUP ;
887
                   GET 3 ;
888
                   DUP 3 ;
889
                   CDR ;
890
                   SOME ;
891
                   DIG 3 ;
892
                   CAR ;
893
                   UPDATE ;
894
                   UPDATE 3 ;
895
                   NIL operation }
896
                 { DUP ;
897
                   CAR ;
898
                   SENDER ;
899
                   COMPARE ;
900
                   EQ ;
901
                   IF
902
                     {}
903
                     { PUSH string "This can only be executed by the trade proposer" ;
904
                       FAILWITH } ;
905
                   DUP ;
906
                   GET 3 ;
907
                   SWAP ;
908
                   DUP ;
909
                   DUG 2 ;
910
                   CAR ;
911
                   COMPARE ;
912
                   NEQ ;
913
                   IF
914
                     {}
915
                     { PUSH string "The users involved in the trade need to be different" ;
916
                       FAILWITH } ;
917
                   DUP ;
918
                   GET 9 ;
919
                   SIZE ;
920
                   PUSH nat 0 ;
921
                   COMPARE ;
922
                   LT ;
923
                   IF
924
                     {}
925
                     { PUSH string "At least one FA2 token needs to be traded by proposer" ;
926
                       FAILWITH } ;
927
                   DUP ;
928
                   GET 10 ;
929
                   SIZE ;
930
                   PUSH nat 0 ;
931
                   COMPARE ;
932
                   LT ;
933
                   IF
934
                     {}
935
                     { PUSH string "At least one FA2 token needs to be traded by acceptor" ;
936
                       FAILWITH } ;
937
                   DUP ;
938
                   GET 5 ;
939
                   PUSH mutez 0 ;
940
                   COMPARE ;
941
                   NEQ ;
942
                   IF
943
                     { DUP ;
944
                       GET 5 ;
945
                       AMOUNT ;
946
                       COMPARE ;
947
                       EQ ;
948
                       IF
949
                         {}
950
                         { PUSH string "The sent tez amount does not coincide trade proposal amount with 5% royalties" ;
951
                           FAILWITH } }
952
                     {} ;
953
                   DUP ;
954
                   GET 9 ;
955
                   NIL operation ;
956
                   SWAP ;
957
                   ITER { DUP 4 ;
958
                          GET 3 ;
959
                          SWAP ;
960
                          DUP ;
961
                          DUG 2 ;
962
                          CAR ;
963
                          MEM ;
964
                          IF
965
                            { PUSH bool False ;
966
                              DUP 5 ;
967
                              GET 3 ;
968
                              DUP 3 ;
969
                              CAR ;
970
                              GET ;
971
                              IF_NONE { PUSH int 175 ; FAILWITH } {} ;
972
                              COMPARE ;
973
                              EQ }
974
                            { PUSH bool True } ;
975
                          IF
976
                            {}
977
                            { PUSH string "The contract is on the denylist" ; FAILWITH } ;
978
                          DUP ;
979
                          DUG 2 ;
980
                          CAR ;
981
                          CONTRACT %transfer (list (pair (address %from_)
982
                                                        (list %txs (pair (address %to_)
983
                                                                        (pair
984
                                                                          (nat %token_id)
985
                                                                          (nat %amount)))))) ;
986
                          IF_NONE { PUSH int 414 ; FAILWITH } {} ;
987
                          PUSH mutez 0 ;
988
                          NIL (pair address (list (pair address (pair nat nat)))) ;
989
                          NIL (pair address (pair nat nat)) ;
990
                          DIG 5 ;
991
                          DUP ;
992
                          GET 5 ;
993
                          SWAP ;
994
                          DUP ;
995
                          DUG 7 ;
996
                          GET 3 ;
997
                          SELF_ADDRESS ;
998
                          PAIR 3 ;
999
                          CONS ;
1000
                          SENDER ;
1001
                          PAIR ;
1002
                          CONS ;
1003
                          TRANSFER_TOKENS ;
1004
                          CONS ;
1005
                          SWAP ;
1006
                          DUP ;
1007
                          DUG 2 ;
1008
                          CAR ;
1009
                          CONTRACT %transfer (list (pair (address %from_)
1010
                                                        (list %txs (pair (address %to_)
1011
                                                                        (pair
1012
                                                                          (nat %token_id)
1013
                                                                          (nat %amount)))))) ;
1014
                          IF_NONE { PUSH int 414 ; FAILWITH } {} ;
1015
                          PUSH mutez 0 ;
1016
                          NIL (pair address (list (pair address (pair nat nat)))) ;
1017
                          NIL (pair address (pair nat nat)) ;
1018
                          DIG 5 ;
1019
                          DUP ;
1020
                          GET 5 ;
1021
                          SWAP ;
1022
                          GET 3 ;
1023
                          SENDER ;
1024
                          PAIR 3 ;
1025
                          CONS ;
1026
                          SELF_ADDRESS ;
1027
                          PAIR ;
1028
                          CONS ;
1029
                          TRANSFER_TOKENS ;
1030
                          CONS } ;
1031
                   DUP 3 ;
1032
                   DUP ;
1033
                   GET 6 ;
1034
                   PUSH bool True ;
1035
                   DIG 4 ;
1036
                   PAIR ;
1037
                   SELF_ADDRESS ;
1038
                   PAIR ;
1039
                   PUSH (pair bool bool) (Pair False False) ;
1040
                   PAIR ;
1041
                   SOME ;
1042
                   DIG 4 ;
1043
                   CAR ;
1044
                   GET 4 ;
1045
                   UPDATE ;
1046
                   UPDATE 6 ;
1047
                   UNPAIR ;
1048
                   UNPAIR ;
1049
                   SWAP ;
1050
                   UNPAIR ;
1051
                   SWAP ;
1052
                   PUSH nat 1 ;
1053
                   ADD ;
1054
                   SWAP ;
1055
                   PAIR ;
1056
                   SWAP ;
1057
                   PAIR ;
1058
                   PAIR ;
1059
                   SWAP } } } ;
1060
       NIL operation ;
1061
       SWAP ;
1062
       ITER { CONS } ;
1063
       PAIR }