BCD

Tezos Contract Explorer
Search Networks Deploy
  • Home
  • /
  • Mainnet
  • /
  • objkt.com Dutch Auctions
Delegatable
operations (3.22K)Storage Code Interact Tokens Metadata Fork Statistics Details
Latest
​x
928
 
1
parameter (or
2
            (or
3
              (pair %buy (nat %auction_id)
4
                         (pair (nat %amount)
5
                               (pair (nat %editions)
6
                                     (pair (option %condition_extra bytes)
7
                                           (pair (option %proxy_for address)
8
                                                 (map %referrers address nat))))))
9
              (or (nat %cancel_auction)
10
                  (pair %create_auction (pair %token (address %address) (nat %token_id))
11
                                        (pair
12
                                          (or %currency (address %fa12)
13
                                                        (or
14
                                                          (pair %fa2 (address %address)
15
                                                                     (nat %token_id))
16
                                                          (unit %tez)))
17
                                          (pair (nat %editions)
18
                                                (pair (timestamp %start_time)
19
                                                      (pair (timestamp %end_time)
20
                                                            (pair (nat %start_price)
21
                                                                  (pair (nat %end_price)
22
                                                                        (pair
23
                                                                          (map %shares
24
                                                                            address
25
                                                                            nat)
26
                                                                          (pair
27
                                                                            (nat %referral_bonus)
28
                                                                            (option %condition (pair
29
                                                                                                (address %address)
30
                                                                                                (bytes %id))))))))))))))
31
            (or (or (unit %default) (unit %delegate))
32
                (or (address %update_fee_sharing_registry)
33
                    (address %update_permission_module))));
34
storage (pair
35
          (pair
36
            (big_map %auctions nat
37
                               (pair (address %creator)
38
                                     (pair
39
                                       (pair %token (address %address) (nat %token_id))
40
                                       (pair
41
                                         (or %currency (address %fa12)
42
                                                       (or
43
                                                         (pair %fa2 (address %address)
44
                                                                    (nat %token_id))
45
                                                         (unit %tez)))
46
                                         (pair (nat %editions)
47
                                               (pair (timestamp %start_time)
48
                                                     (pair (timestamp %end_time)
49
                                                           (pair (nat %start_price)
50
                                                                 (pair (nat %end_price)
51
                                                                       (pair
52
                                                                         (map %shares
53
                                                                           address
54
                                                                           nat)
55
                                                                         (pair
56
                                                                           (nat %platform_fee)
57
                                                                           (pair
58
                                                                             (nat %referral_bonus)
59
                                                                             (option %condition (pair
60
                                                                                                 (address %address)
61
                                                                                                 (bytes %id)))))))))))))))
62
            (address %fee_sharing_registry))
63
          (pair (big_map %metadata string bytes)
64
                (pair (nat %next_auction_id) (address %permission_module))));
65
code { UNPAIR ;
66
       IF_LEFT
67
         { IF_LEFT
68
             { SWAP ;
69
               DUP ;
70
               DUG 2 ;
71
               CAR ;
72
               CAR ;
73
               SWAP ;
74
               DUP ;
75
               DUG 2 ;
76
               CAR ;
77
               GET ;
78
               IF_NONE { PUSH int 224 ; FAILWITH } {} ;
79
               PUSH nat 1 ;
80
               DUP 3 ;
81
               GET 5 ;
82
               COMPARE ;
83
               GE ;
84
               IF {} { PUSH string "D_AT_LEAST_1_E" ; FAILWITH } ;
85
               DUP ;
86
               GET 9 ;
87
               NOW ;
88
               COMPARE ;
89
               GE ;
90
               IF { DUP ; GET 11 ; NOW ; COMPARE ; LE } { PUSH bool False } ;
91
               IF {} { PUSH string "D_NOT_IN_WINDOW" ; FAILWITH } ;
92
               DUP ;
93
               GET 9 ;
94
               SWAP ;
95
               DUP ;
96
               DUG 2 ;
97
               GET 11 ;
98
               SUB ;
99
               ISNAT ;
100
               IF_NONE { PUSH int 231 ; FAILWITH } {} ;
101
               SWAP ;
102
               DUP ;
103
               GET 15 ;
104
               SWAP ;
105
               DUP ;
106
               DUG 3 ;
107
               GET 13 ;
108
               SUB ;
109
               ISNAT ;
110
               IF_NONE { PUSH int 230 ; FAILWITH } {} ;
111
               DUP 3 ;
112
               GET 9 ;
113
               NOW ;
114
               SUB ;
115
               ISNAT ;
116
               IF_NONE { PUSH int 234 ; FAILWITH } {} ;
117
               MUL ;
118
               EDIV ;
119
               IF_NONE { PUSH int 237 ; FAILWITH } { CAR } ;
120
               SWAP ;
121
               DUP ;
122
               DUG 2 ;
123
               GET 13 ;
124
               SUB ;
125
               ISNAT ;
126
               IF_NONE { PUSH int 237 ; FAILWITH } {} ;
127
               DUP ;
128
               DUP 4 ;
129
               GET 3 ;
130
               COMPARE ;
131
               GE ;
132
               IF {} { PUSH string "D_BID_TOO_SMALL" ; FAILWITH } ;
133
               DUP 4 ;
134
               GET 6 ;
135
               UNIT ;
136
               VIEW "get_treasury" address ;
137
               IF_NONE { PUSH int 158 ; FAILWITH } {} ;
138
               DUP 5 ;
139
               CAR ;
140
               CDR ;
141
               DUP 5 ;
142
               GET 10 ;
143
               DIG 4 ;
144
               DUP ;
145
               GET 21 ;
146
               SWAP ;
147
               DUP ;
148
               DUG 6 ;
149
               GET 19 ;
150
               PAIR 3 ;
151
               VIEW "get_share_fee" (map address nat) ;
152
               IF_NONE { PUSH int 136 ; FAILWITH } {} ;
153
               DUP 4 ;
154
               GET 19 ;
155
               PUSH nat 0 ;
156
               DIG 2 ;
157
               DUP ;
158
               DUP ;
159
               DUG 4 ;
160
               ITER { DIG 2 ; SWAP ; CDR ; ADD ; SWAP } ;
161
               PUSH nat 0 ;
162
               DUP 8 ;
163
               GET 21 ;
164
               COMPARE ;
165
               EQ ;
166
               IF
167
                 { SWAP ;
168
                   DUP ;
169
                   DUG 2 ;
170
                   DIG 3 ;
171
                   SUB ;
172
                   ISNAT ;
173
                   IF_NONE { PUSH int 47 ; FAILWITH } {} ;
174
                   DUG 2 }
175
                 {} ;
176
               DUP 7 ;
177
               GET 17 ;
178
               ITER { DUP ;
179
                      CDR ;
180
                      DIG 3 ;
181
                      ADD ;
182
                      DUG 2 ;
183
                      SWAP ;
184
                      DUP ;
185
                      DUG 2 ;
186
                      SWAP ;
187
                      DUP ;
188
                      DUG 2 ;
189
                      CAR ;
190
                      MEM ;
191
                      IF
192
                        { SWAP ;
193
                          DUP ;
194
                          DUP 3 ;
195
                          CAR ;
196
                          DUP ;
197
                          DUG 2 ;
198
                          GET ;
199
                          IF_NONE { PUSH int 53 ; FAILWITH } {} ;
200
                          DIG 3 ;
201
                          CDR ;
202
                          ADD ;
203
                          SOME ;
204
                          SWAP ;
205
                          UPDATE }
206
                        { DUP ; DUG 2 ; CDR ; SOME ; DIG 2 ; CAR ; UPDATE } } ;
207
               DUP 3 ;
208
               DIG 2 ;
209
               ADD ;
210
               SWAP ;
211
               DUP ;
212
               DUP 6 ;
213
               MEM ;
214
               IF
215
                 { DUP ;
216
                   DUP 6 ;
217
                   DUP ;
218
                   DUG 2 ;
219
                   GET ;
220
                   IF_NONE { PUSH int 60 ; FAILWITH } {} ;
221
                   DUP 5 ;
222
                   ADD ;
223
                   SOME ;
224
                   SWAP ;
225
                   UPDATE }
226
                 { DUP 3 ; SOME ; DUP 6 ; UPDATE } ;
227
               PUSH nat 10000 ;
228
               DUP 3 ;
229
               COMPARE ;
230
               LE ;
231
               IF
232
                 {}
233
                 { PUSH string "WrongCondition: total_fee.value <= 10000" ; FAILWITH } ;
234
               SENDER ;
235
               DUP 9 ;
236
               GET 9 ;
237
               IF_NONE {} { SWAP ; DROP } ;
238
               DUP 9 ;
239
               GET 5 ;
240
               DUP 9 ;
241
               GET 7 ;
242
               DUP ;
243
               DUP 3 ;
244
               COMPARE ;
245
               LE ;
246
               IF { DROP } { SWAP ; DROP } ;
247
               DUP 9 ;
248
               GET 22 ;
249
               IF_NONE
250
                 { NIL operation }
251
                 { DUP ;
252
                   CAR ;
253
                   CONTRACT %enforce_conditions (list (pair
254
                                                       (pair (nat %amount)
255
                                                             (pair (address %claimer)
256
                                                                   (bytes %condition_id)))
257
                                                       (pair (address %creator)
258
                                                             (pair (option %extra bytes)
259
                                                                   (pair %token
260
                                                                     (address %address)
261
                                                                     (nat %token_id)))))) ;
262
                   IF_NONE { PUSH int 517 ; FAILWITH } {} ;
263
                   NIL operation ;
264
                   SWAP ;
265
                   PUSH mutez 0 ;
266
                   NIL (pair (pair nat (pair address bytes))
267
                             (pair address (pair (option bytes) (pair address nat)))) ;
268
                   DUP 14 ;
269
                   GET 3 ;
270
                   DUP 16 ;
271
                   GET 7 ;
272
                   PAIR ;
273
                   DUP 15 ;
274
                   CAR ;
275
                   PAIR ;
276
                   DIG 5 ;
277
                   CDR ;
278
                   SENDER ;
279
                   PAIR ;
280
                   DUP 7 ;
281
                   PAIR ;
282
                   PAIR ;
283
                   CONS ;
284
                   TRANSFER_TOKENS ;
285
                   CONS } ;
286
               SWAP ;
287
               DUP ;
288
               DUG 2 ;
289
               DUP 10 ;
290
               MUL ;
291
               SWAP ;
292
               DUP 11 ;
293
               GET 3 ;
294
               CAR ;
295
               CONTRACT %transfer (list (pair (address %from_)
296
                                             (list %txs (pair (address %to_)
297
                                                             (pair (nat %token_id)
298
                                                                   (nat %amount)))))) ;
299
               IF_NONE { PUSH int 305 ; FAILWITH } {} ;
300
               PUSH mutez 0 ;
301
               NIL (pair address (list (pair address (pair nat nat)))) ;
302
               NIL (pair address (pair nat nat)) ;
303
               DUP 7 ;
304
               DUP 16 ;
305
               GET 3 ;
306
               CDR ;
307
               DUP 10 ;
308
               PAIR 3 ;
309
               CONS ;
310
               DUP 15 ;
311
               CAR ;
312
               PAIR ;
313
               CONS ;
314
               TRANSFER_TOKENS ;
315
               CONS ;
316
               SWAP ;
317
               DUP 11 ;
318
               GET 5 ;
319
               IF_LEFT
320
                 { PUSH nat 0 ;
321
                   DUP 7 ;
322
                   ITER { DUP ;
323
                          CDR ;
324
                          PUSH nat 10000 ;
325
                          SWAP ;
326
                          DUP 6 ;
327
                          MUL ;
328
                          EDIV ;
329
                          IF_NONE { PUSH int 255 ; FAILWITH } { CAR } ;
330
                          DUP ;
331
                          DIG 3 ;
332
                          ADD ;
333
                          DUG 2 ;
334
                          DUP ;
335
                          PUSH nat 0 ;
336
                          COMPARE ;
337
                          LT ;
338
                          IF
339
                            { DIG 5 ;
340
                              DUP 5 ;
341
                              CONTRACT %transfer (pair address (pair address nat)) ;
342
                              IF_NONE { PUSH int 460 ; FAILWITH } {} ;
343
                              PUSH mutez 0 ;
344
                              DIG 3 ;
345
                              DIG 4 ;
346
                              CAR ;
347
                              PAIR ;
348
                              SENDER ;
349
                              PAIR ;
350
                              TRANSFER_TOKENS ;
351
                              CONS ;
352
                              DUG 3 }
353
                            { DROP 2 } } ;
354
                   DUP ;
355
                   DUP 4 ;
356
                   SUB ;
357
                   DUP 4 ;
358
                   DUP 3 ;
359
                   COMPARE ;
360
                   LE ;
361
                   IF {} { PUSH string "PH_INVALID_TOTAL" ; FAILWITH } ;
362
                   DUP ;
363
                   PUSH int 0 ;
364
                   COMPARE ;
365
                   LT ;
366
                   IF
367
                     { SWAP ;
368
                       DROP ;
369
                       DIG 2 ;
370
                       DROP ;
371
                       DIG 4 ;
372
                       DROP ;
373
                       DIG 4 ;
374
                       DROP ;
375
                       DIG 4 ;
376
                       DROP ;
377
                       DIG 4 ;
378
                       DROP ;
379
                       DIG 4 ;
380
                       DROP ;
381
                       DIG 4 ;
382
                       DROP ;
383
                       DIG 4 ;
384
                       DROP ;
385
                       DUG 2 ;
386
                       CONTRACT %transfer (pair address (pair address nat)) ;
387
                       IF_NONE { PUSH int 460 ; FAILWITH } {} ;
388
                       PUSH mutez 0 ;
389
                       DIG 3 ;
390
                       ISNAT ;
391
                       IF_NONE { PUSH int 265 ; FAILWITH } {} ;
392
                       DUP 6 ;
393
                       CAR ;
394
                       PAIR ;
395
                       SENDER ;
396
                       PAIR ;
397
                       TRANSFER_TOKENS ;
398
                       CONS }
399
                     { DROP 4 ;
400
                       DIG 2 ;
401
                       DROP ;
402
                       DIG 2 ;
403
                       DROP ;
404
                       DIG 2 ;
405
                       DROP ;
406
                       DIG 2 ;
407
                       DROP ;
408
                       DIG 2 ;
409
                       DROP ;
410
                       DIG 2 ;
411
                       DROP ;
412
                       DIG 2 ;
413
                       DROP } }
414
                 { IF_LEFT
415
                     { PUSH nat 0 ;
416
                       NIL (pair address (pair nat nat)) ;
417
                       DUP 8 ;
418
                       ITER { DUP ;
419
                              CDR ;
420
                              PUSH nat 10000 ;
421
                              SWAP ;
422
                              DUP 7 ;
423
                              MUL ;
424
                              EDIV ;
425
                              IF_NONE { PUSH int 106 ; FAILWITH } { CAR } ;
426
                              DUP ;
427
                              DIG 4 ;
428
                              ADD ;
429
                              DUG 3 ;
430
                              DUP ;
431
                              PUSH nat 0 ;
432
                              COMPARE ;
433
                              LT ;
434
                              IF
435
                                { DIG 2 ; SWAP ; DUP 5 ; CDR ; DIG 3 ; CAR ; PAIR 3 ; CONS }
436
                                { DROP 2 } } ;
437
                       DUP 4 ;
438
                       DUP 3 ;
439
                       COMPARE ;
440
                       LE ;
441
                       IF {} { PUSH string "PH_INVALID_TOTAL" ; FAILWITH } ;
442
                       SWAP ;
443
                       DUP ;
444
                       DUG 2 ;
445
                       DUP 5 ;
446
                       SUB ;
447
                       DUP ;
448
                       PUSH int 0 ;
449
                       COMPARE ;
450
                       LT ;
451
                       IF
452
                         { DIG 2 ;
453
                           DROP ;
454
                           DIG 3 ;
455
                           DROP ;
456
                           DIG 5 ;
457
                           DROP ;
458
                           DIG 5 ;
459
                           DROP ;
460
                           DIG 5 ;
461
                           DROP ;
462
                           DIG 5 ;
463
                           DROP ;
464
                           DIG 5 ;
465
                           DROP ;
466
                           DIG 5 ;
467
                           DROP ;
468
                           DIG 5 ;
469
                           DROP ;
470
                           ISNAT ;
471
                           IF_NONE { PUSH int 122 ; FAILWITH } {} ;
472
                           DUP 3 ;
473
                           CDR ;
474
                           DUP 7 ;
475
                           CAR ;
476
                           PAIR 3 ;
477
                           CONS }
478
                         { DROP ;
479
                           SWAP ;
480
                           DROP ;
481
                           DIG 2 ;
482
                           DROP ;
483
                           DIG 4 ;
484
                           DROP ;
485
                           DIG 4 ;
486
                           DROP ;
487
                           DIG 4 ;
488
                           DROP ;
489
                           DIG 4 ;
490
                           DROP ;
491
                           DIG 4 ;
492
                           DROP ;
493
                           DIG 4 ;
494
                           DROP ;
495
                           DIG 4 ;
496
                           DROP } ;
497
                       DUG 2 ;
498
                       CAR ;
499
                       CONTRACT %transfer (list (pair (address %from_)
500
                                                     (list %txs (pair (address %to_)
501
                                                                     (pair
502
                                                                       (nat %token_id)
503
                                                                       (nat %amount)))))) ;
504
                       IF_NONE { PUSH int 394 ; FAILWITH } {} ;
505
                       PUSH mutez 0 ;
506
                       NIL (pair address (list (pair address (pair nat nat)))) ;
507
                       DIG 4 ;
508
                       SENDER ;
509
                       PAIR ;
510
                       CONS ;
511
                       TRANSFER_TOKENS ;
512
                       CONS }
513
                     { PUSH mutez 1 ;
514
                       AMOUNT ;
515
                       EDIV ;
516
                       IF_NONE { UNIT ; FAILWITH } {} ;
517
                       CAR ;
518
                       DUP 3 ;
519
                       SWAP ;
520
                       DUP ;
521
                       DUG 2 ;
522
                       COMPARE ;
523
                       GE ;
524
                       IF {} { PUSH string "D_NOT_ENOUGH_TEZ" ; FAILWITH } ;
525
                       PUSH mutez 0 ;
526
                       DUP 8 ;
527
                       ITER { DUP ;
528
                              CDR ;
529
                              PUSH nat 10000 ;
530
                              SWAP ;
531
                              PUSH mutez 1 ;
532
                              DUP 8 ;
533
                              MUL ;
534
                              MUL ;
535
                              EDIV ;
536
                              IF_NONE { PUSH int 78 ; FAILWITH } {} ;
537
                              CAR ;
538
                              DUP ;
539
                              DIG 3 ;
540
                              ADD ;
541
                              DUG 2 ;
542
                              DUP ;
543
                              PUSH mutez 0 ;
544
                              COMPARE ;
545
                              LT ;
546
                              IF
547
                                { DIG 6 ;
548
                                  DIG 2 ;
549
                                  CAR ;
550
                                  CONTRACT unit ;
551
                                  IF_NONE { PUSH int 85 ; FAILWITH } {} ;
552
                                  DIG 2 ;
553
                                  UNIT ;
554
                                  TRANSFER_TOKENS ;
555
                                  CONS ;
556
                                  DUG 4 }
557
                                { DROP 2 } } ;
558
                       PUSH mutez 1 ;
559
                       DUP ;
560
                       DUP 3 ;
561
                       EDIV ;
562
                       IF_NONE { UNIT ; FAILWITH } {} ;
563
                       CAR ;
564
                       DUP 6 ;
565
                       SUB ;
566
                       ISNAT ;
567
                       IF_NONE { PUSH int 90 ; FAILWITH } {} ;
568
                       MUL ;
569
                       PUSH mutez 1 ;
570
                       DUP 6 ;
571
                       MUL ;
572
                       DUP 3 ;
573
                       COMPARE ;
574
                       LE ;
575
                       IF {} { PUSH string "PH_INVALID_TOTAL" ; FAILWITH } ;
576
                       DUP ;
577
                       PUSH mutez 0 ;
578
                       COMPARE ;
579
                       LT ;
580
                       IF
581
                         { SWAP ;
582
                           DROP ;
583
                           DIG 4 ;
584
                           DUP 14 ;
585
                           CAR ;
586
                           CONTRACT unit ;
587
                           IF_NONE { PUSH int 98 ; FAILWITH } {} ;
588
                           DIG 2 ;
589
                           UNIT ;
590
                           TRANSFER_TOKENS ;
591
                           CONS ;
592
                           DUG 3 }
593
                         { DROP 2 } ;
594
                       DUP 3 ;
595
                       SWAP ;
596
                       DUP ;
597
                       DUG 2 ;
598
                       COMPARE ;
599
                       GT ;
600
                       IF
601
                         { SWAP ;
602
                           DROP ;
603
                           DIG 4 ;
604
                           DROP ;
605
                           DIG 4 ;
606
                           DROP ;
607
                           DIG 4 ;
608
                           DROP ;
609
                           DIG 4 ;
610
                           DROP ;
611
                           DIG 4 ;
612
                           DROP ;
613
                           DIG 4 ;
614
                           DROP ;
615
                           DIG 4 ;
616
                           DROP ;
617
                           DIG 2 ;
618
                           SENDER ;
619
                           CONTRACT unit ;
620
                           IF_NONE { PUSH int 319 ; FAILWITH } {} ;
621
                           PUSH mutez 1 ;
622
                           DIG 4 ;
623
                           DIG 4 ;
624
                           SUB ;
625
                           ISNAT ;
626
                           IF_NONE { PUSH int 322 ; FAILWITH } {} ;
627
                           MUL ;
628
                           UNIT ;
629
                           TRANSFER_TOKENS ;
630
                           CONS }
631
                         { DROP 3 ;
632
                           DIG 2 ;
633
                           DROP ;
634
                           DIG 2 ;
635
                           DROP ;
636
                           DIG 2 ;
637
                           DROP ;
638
                           DIG 2 ;
639
                           DROP ;
640
                           DIG 2 ;
641
                           DROP ;
642
                           DIG 2 ;
643
                           DROP ;
644
                           DIG 2 ;
645
                           DROP } } } ;
646
               DIG 4 ;
647
               UNPAIR ;
648
               UNPAIR ;
649
               DUP ;
650
               DUP 8 ;
651
               CAR ;
652
               DUP ;
653
               DUG 2 ;
654
               GET ;
655
               IF_NONE { PUSH int 326 ; FAILWITH } {} ;
656
               DIG 6 ;
657
               DIG 7 ;
658
               GET 7 ;
659
               SUB ;
660
               ISNAT ;
661
               IF_NONE { PUSH int 326 ; FAILWITH } {} ;
662
               UPDATE 7 ;
663
               SOME ;
664
               SWAP ;
665
               UPDATE ;
666
               PAIR ;
667
               PAIR ;
668
               DUG 2 ;
669
               PUSH nat 0 ;
670
               DUP 4 ;
671
               CAR ;
672
               CAR ;
673
               DUP 4 ;
674
               CAR ;
675
               GET ;
676
               IF_NONE { PUSH int 329 ; FAILWITH } {} ;
677
               GET 7 ;
678
               COMPARE ;
679
               EQ ;
680
               IF
681
                 { DIG 2 ;
682
                   UNPAIR ;
683
                   UNPAIR ;
684
                   NONE (pair address
685
                              (pair (pair address nat)
686
                                    (pair (or address (or (pair address nat) unit))
687
                                          (pair nat
688
                                                (pair timestamp
689
                                                      (pair timestamp
690
                                                            (pair nat
691
                                                                  (pair nat
692
                                                                        (pair
693
                                                                          (map address
694
                                                                               nat)
695
                                                                          (pair nat
696
                                                                                (pair
697
                                                                                  nat
698
                                                                                  (option (pair
699
                                                                                           address
700
                                                                                           bytes))))))))))))) ;
701
                   DIG 5 ;
702
                   CAR ;
703
                   UPDATE ;
704
                   PAIR ;
705
                   PAIR ;
706
                   SWAP }
707
                 { SWAP ; DROP } }
708
             { IF_LEFT
709
                 { SWAP ;
710
                   DUP ;
711
                   DUG 2 ;
712
                   CAR ;
713
                   CAR ;
714
                   SWAP ;
715
                   DUP ;
716
                   DUG 2 ;
717
                   GET ;
718
                   IF_NONE { PUSH int 187 ; FAILWITH } {} ;
719
                   DUP ;
720
                   CAR ;
721
                   SENDER ;
722
                   COMPARE ;
723
                   EQ ;
724
                   IF { DROP ; PUSH bool True } { GET 11 ; NOW ; COMPARE ; GT } ;
725
                   IF {} { PUSH string "D_NOT_SELLER" ; FAILWITH } ;
726
                   SWAP ;
727
                   UNPAIR ;
728
                   UNPAIR ;
729
                   NONE (pair address
730
                              (pair (pair address nat)
731
                                    (pair (or address (or (pair address nat) unit))
732
                                          (pair nat
733
                                                (pair timestamp
734
                                                      (pair timestamp
735
                                                            (pair nat
736
                                                                  (pair nat
737
                                                                        (pair
738
                                                                          (map address
739
                                                                               nat)
740
                                                                          (pair nat
741
                                                                                (pair
742
                                                                                  nat
743
                                                                                  (option (pair
744
                                                                                           address
745
                                                                                           bytes))))))))))))) ;
746
                   DIG 4 ;
747
                   UPDATE ;
748
                   PAIR ;
749
                   PAIR }
750
                 { DUP ;
751
                   GET 7 ;
752
                   SWAP ;
753
                   DUP ;
754
                   DUG 2 ;
755
                   GET 9 ;
756
                   COMPARE ;
757
                   GT ;
758
                   IF {} { PUSH string "D_END_BEFORE_START" ; FAILWITH } ;
759
                   PUSH int 2592000 ;
760
                   SWAP ;
761
                   DUP ;
762
                   GET 7 ;
763
                   SWAP ;
764
                   DUP ;
765
                   DUG 3 ;
766
                   GET 9 ;
767
                   SUB ;
768
                   COMPARE ;
769
                   LE ;
770
                   IF {} { PUSH string "D_MAX_30_DAYS" ; FAILWITH } ;
771
                   DUP ;
772
                   GET 13 ;
773
                   SWAP ;
774
                   DUP ;
775
                   DUG 2 ;
776
                   GET 11 ;
777
                   COMPARE ;
778
                   GT ;
779
                   IF {} { PUSH string "D_END_GTE_START" ; FAILWITH } ;
780
                   SWAP ;
781
                   DUP ;
782
                   DUG 2 ;
783
                   CAR ;
784
                   CDR ;
785
                   UNIT ;
786
                   VIEW "get_management_fee" nat ;
787
                   IF_NONE { PUSH int 148 ; FAILWITH } {} ;
788
                   PUSH nat 100 ;
789
                   DUP 3 ;
790
                   GET 15 ;
791
                   SIZE ;
792
                   COMPARE ;
793
                   LE ;
794
                   IF {} { PUSH string "R_TOO_MANY_SHARES" ; FAILWITH } ;
795
                   PUSH nat 0 ;
796
                   DUP 3 ;
797
                   GET 15 ;
798
                   ITER { CDR ; ADD } ;
799
                   SWAP ;
800
                   DUP ;
801
                   DUG 2 ;
802
                   PUSH nat 10000 ;
803
                   SUB ;
804
                   ISNAT ;
805
                   IF_NONE { PUSH int 28 ; FAILWITH } {} ;
806
                   SWAP ;
807
                   DUP ;
808
                   DUG 2 ;
809
                   COMPARE ;
810
                   LE ;
811
                   IF {} { PUSH string "R_INVALID_SHARES_TOTAL" ; FAILWITH } ;
812
                   DUP 4 ;
813
                   CAR ;
814
                   CDR ;
815
                   DUP 4 ;
816
                   GET 17 ;
817
                   VIEW "is_valid_referral_fee_level" bool ;
818
                   IF_NONE { PUSH int 156 ; FAILWITH } {} ;
819
                   IF {} { PUSH string "D_INVALID_R_FEE" ; FAILWITH } ;
820
                   DUP 4 ;
821
                   UNPAIR ;
822
                   UNPAIR ;
823
                   DIG 5 ;
824
                   DUP ;
825
                   GET 18 ;
826
                   SWAP ;
827
                   DUP ;
828
                   DUG 7 ;
829
                   GET 17 ;
830
                   DUP 7 ;
831
                   DIG 8 ;
832
                   DUP ;
833
                   GET 15 ;
834
                   SWAP ;
835
                   DUP ;
836
                   GET 13 ;
837
                   SWAP ;
838
                   DUP ;
839
                   GET 11 ;
840
                   SWAP ;
841
                   DUP ;
842
                   GET 9 ;
843
                   SWAP ;
844
                   DUP ;
845
                   GET 7 ;
846
                   SWAP ;
847
                   DUP ;
848
                   GET 5 ;
849
                   SWAP ;
850
                   DUP ;
851
                   GET 3 ;
852
                   SWAP ;
853
                   DUP ;
854
                   DUG 16 ;
855
                   CAR ;
856
                   SENDER ;
857
                   PAIR 12 ;
858
                   DIG 4 ;
859
                   DROP ;
860
                   DIG 4 ;
861
                   DROP ;
862
                   DIG 4 ;
863
                   DROP ;
864
                   SOME ;
865
                   DIG 4 ;
866
                   GET 5 ;
867
                   UPDATE ;
868
                   PAIR ;
869
                   PAIR ;
870
                   DUP ;
871
                   GET 5 ;
872
                   PUSH nat 1 ;
873
                   ADD ;
874
                   UPDATE 5 } ;
875
               NIL operation } }
876
         { IF_LEFT
877
             { IF_LEFT
878
                 { DROP ;
879
                   DUP ;
880
                   GET 6 ;
881
                   NIL operation ;
882
                   SWAP ;
883
                   UNIT ;
884
                   VIEW "get_baking_reward_collector" address ;
885
                   IF_NONE { PUSH int 167 ; FAILWITH } {} ;
886
                   CONTRACT unit ;
887
                   IF_NONE { PUSH int 181 ; FAILWITH } {} ;
888
                   AMOUNT ;
889
                   UNIT ;
890
                   TRANSFER_TOKENS ;
891
                   CONS }
892
                 { DROP ;
893
                   DUP ;
894
                   GET 6 ;
895
                   NIL operation ;
896
                   SWAP ;
897
                   UNIT ;
898
                   VIEW "get_delegate" key_hash ;
899
                   IF_NONE { PUSH int 176 ; FAILWITH } {} ;
900
                   SOME ;
901
                   SET_DELEGATE ;
902
                   CONS } }
903
             { IF_LEFT
904
                 { SWAP ;
905
                   DUP ;
906
                   DUG 2 ;
907
                   GET 6 ;
908
                   UNIT ;
909
                   VIEW "get_admin" address ;
910
                   IF_NONE { PUSH int 135 ; FAILWITH } {} ;
911
                   SENDER ;
912
                   COMPARE ;
913
                   EQ ;
914
                   IF {} { PUSH string "PMI_ONLY_ADMIN" ; FAILWITH } ;
915
                   SWAP ;
916
                   UNPAIR ;
917
                   CAR ;
918
                   DIG 2 ;
919
                   SWAP ;
920
                   PAIR ;
921
                   PAIR }
922
                 { SWAP ;
923
                   DUP ;
924
                   DUG 2 ;
925
                   GET 6 ;
926
                   UNIT ;
927
                   VIEW "get_admin" address ;
928
                   IF_NONE { PUSH int 135 ; FAILWITH } {} ;
929
                   SENDER ;
930
                   COMPARE ;
931
                   EQ ;
932
                   IF {} { PUSH string "PMI_ONLY_ADMIN" ; FAILWITH } ;
933
                   UPDATE 6 } ;
934
               NIL operation } } ;
935
       NIL operation ;
936
       SWAP ;
937
       ITER { CONS } ;
938
       PAIR }