BCD

Tezos Contract Explorer
Search Networks Deploy
  • Home
  • /
  • Mainnet
  • /
  • LYZI Staking
operations (11.2K)Storage Code Interact Tokens Metadata Fork Statistics Details
Latest
​x
1036
 
1
parameter (or
2
            (or (or (unit %claim_all) (nat %increase_reward))
3
                (or (unit %initialize) (address %set_admin)))
4
            (or (nat %stake) (nat %unstake)));
5
storage (pair
6
          (pair
7
            (pair
8
              (pair (pair (address %admin) (timestamp %creation_time))
9
                    (list %farm_points nat)
10
                    (bool %initialized))
11
              (pair (option %input_fa2_token_id_opt nat) (address %input_token_address))
12
              (big_map %metadata string bytes)
13
              (nat %period_duration))
14
            (pair (pair (nat %rate) (list %reward_at_week nat))
15
                  (option %reward_fa2_token_id_opt nat)
16
                  (address %reward_reserve_address))
17
            (pair (address %reward_token_address) (nat %total_periods))
18
            (nat %total_reward)
19
            (big_map %user_points address (list nat)))
20
          (big_map %user_stakes address nat));
21
code { PUSH bool True ;
22
       PUSH bool False ;
23
       PUSH string "Only the contract admin can change the contract administrator or increase reward" ;
24
       PUSH string "Cannot connect to the input token entrypoint" ;
25
       PUSH string "Cannot connect to the input FA2 token entrypoint" ;
26
       PUSH string "Cannot connect to the reward token entrypoint" ;
27
       PUSH string "Cannot connect to the reward FA2 token entrypoint" ;
28
       PUSH string "You must not send Tezos to the smart contract" ;
29
       PUSH string "There are no more weeks left for staking in the farm" ;
30
       PUSH string "The contract is already initialized" ;
31
       PUSH string "The contract is not initialized" ;
32
       NIL operation ;
33
       NIL nat ;
34
       LAMBDA
35
         (pair
36
           (pair
37
             (pair (pair (pair address timestamp) (list nat) bool)
38
                   (pair (option nat) address)
39
                   (big_map string bytes)
40
                   nat)
41
             (pair (pair nat (list nat)) (option nat) address)
42
             (pair address nat)
43
             nat
44
             (big_map address (list nat)))
45
           (big_map address nat))
46
         nat
47
         { DUP ;
48
           CAR ;
49
           CAR ;
50
           CAR ;
51
           CAR ;
52
           CDR ;
53
           NOW ;
54
           SUB ;
55
           ABS ;
56
           PUSH nat 1 ;
57
           DIG 2 ;
58
           CAR ;
59
           CAR ;
60
           CDR ;
61
           CDR ;
62
           CDR ;
63
           DIG 2 ;
64
           EDIV ;
65
           IF_NONE { PUSH string "DIV by 0" ; FAILWITH } {} ;
66
           CAR ;
67
           ADD } ;
68
       LAMBDA
69
         (pair nat nat)
70
         nat
71
         { UNPAIR ;
72
           PUSH nat 1 ;
73
           PAIR ;
74
           PAIR ;
75
           LEFT nat ;
76
           LOOP_LEFT { UNPAIR ;
77
                       UNPAIR ;
78
                       PUSH nat 0 ;
79
                       DUP 4 ;
80
                       COMPARE ;
81
                       EQ ;
82
                       IF
83
                         { SWAP ; DIG 2 ; DROP 2 ; RIGHT (pair (pair nat nat) nat) }
84
                         { PUSH nat 1 ; DIG 3 ; SUB ; ABS ; DUP 3 ; DIG 3 ; DIG 3 ; MUL ; PAIR ; PAIR ; LEFT nat } } } ;
85
       LAMBDA
86
         (pair (list nat) (list nat))
87
         (list nat)
88
         { LEFT (list nat) ;
89
           LOOP_LEFT { UNPAIR ;
90
                       IF_CONS
91
                         { DIG 2 ; SWAP ; CONS ; SWAP ; PAIR ; LEFT (list nat) }
92
                         { RIGHT (pair (list nat) (list nat)) } } } ;
93
       LAMBDA
94
         (pair (pair (lambda (pair (list nat) (list nat)) (list nat)) (list nat) bool)
95
               (pair (list nat) (list nat) bool))
96
         (list nat)
97
         { UNPAIR ;
98
           UNPAIR 3 ;
99
           DIG 3 ;
100
           UNPAIR 3 ;
101
           DUP 5 ;
102
           DIG 5 ;
103
           DIG 3 ;
104
           DIG 3 ;
105
           PAIR ;
106
           PAIR ;
107
           LEFT (list nat) ;
108
           LOOP_LEFT { UNPAIR ;
109
                       UNPAIR ;
110
                       IF_CONS
111
                         { DIG 2 ;
112
                           IF_CONS
113
                             { DUP 9 ;
114
                               DUP 8 ;
115
                               COMPARE ;
116
                               EQ ;
117
                               IF { DIG 2 ; ADD } { DIG 2 ; SUB ; ABS } ;
118
                               DIG 3 ;
119
                               SWAP ;
120
                               CONS ;
121
                               SWAP ;
122
                               DIG 2 ;
123
                               PAIR ;
124
                               PAIR ;
125
                               LEFT (list nat) }
126
                             { DROP 3 ; PUSH string "size don't match" ; FAILWITH } }
127
                         { IF_CONS
128
                             { DROP 3 ; PUSH string "size don't match" ; FAILWITH }
129
                             {} ;
130
                           RIGHT (pair (pair (list nat) (list nat)) (list nat)) } } ;
131
           DIG 2 ;
132
           DIG 4 ;
133
           DROP 2 ;
134
           PAIR ;
135
           EXEC } ;
136
       DUP 17 ;
137
       DUP 6 ;
138
       DUP 4 ;
139
       PAIR 3 ;
140
       APPLY ;
141
       LAMBDA
142
         (pair (pair (lambda (pair nat nat) nat) (list nat)) (pair nat nat nat))
143
         (list nat)
144
         { UNPAIR ;
145
           UNPAIR ;
146
           DIG 2 ;
147
           UNPAIR 3 ;
148
           DIG 4 ;
149
           DUP 3 ;
150
           PAIR ;
151
           LEFT (list nat) ;
152
           LOOP_LEFT { UNPAIR ;
153
                       PUSH nat 0 ;
154
                       DUP 2 ;
155
                       COMPARE ;
156
                       EQ ;
157
                       IF
158
                         { DROP ; RIGHT (pair nat (list nat)) }
159
                         { SWAP ;
160
                           PUSH nat 1 ;
161
                           DUP 3 ;
162
                           SUB ;
163
                           ABS ;
164
                           DUP 6 ;
165
                           PAIR ;
166
                           DUP 7 ;
167
                           SWAP ;
168
                           EXEC ;
169
                           PUSH nat 1 ;
170
                           DUP 4 ;
171
                           SUB ;
172
                           ABS ;
173
                           PUSH nat 10000 ;
174
                           PAIR ;
175
                           DUP 8 ;
176
                           SWAP ;
177
                           EXEC ;
178
                           DUP 7 ;
179
                           PUSH nat 10000 ;
180
                           SUB ;
181
                           ABS ;
182
                           PUSH nat 1 ;
183
                           DUP 8 ;
184
                           SUB ;
185
                           ABS ;
186
                           PUSH nat 10000 ;
187
                           PAIR ;
188
                           DUP 10 ;
189
                           SWAP ;
190
                           EXEC ;
191
                           SWAP ;
192
                           MUL ;
193
                           DUP 7 ;
194
                           DUP 9 ;
195
                           PAIR ;
196
                           DUP 10 ;
197
                           SWAP ;
198
                           EXEC ;
199
                           DUP 8 ;
200
                           PUSH nat 10000 ;
201
                           PAIR ;
202
                           DUP 11 ;
203
                           SWAP ;
204
                           EXEC ;
205
                           SUB ;
206
                           ABS ;
207
                           DIG 2 ;
208
                           MUL ;
209
                           DIG 2 ;
210
                           DUP 6 ;
211
                           DIG 3 ;
212
                           MUL ;
213
                           MUL ;
214
                           EDIV ;
215
                           IF_NONE { PUSH string "DIV by 0" ; FAILWITH } {} ;
216
                           CAR ;
217
                           CONS ;
218
                           PUSH nat 1 ;
219
                           DIG 2 ;
220
                           SUB ;
221
                           ABS ;
222
                           PAIR ;
223
                           LEFT (list nat) } } ;
224
           SWAP ;
225
           DIG 2 ;
226
           DIG 3 ;
227
           DIG 4 ;
228
           DROP 4 } ;
229
       DUP 6 ;
230
       DUP 5 ;
231
       PAIR ;
232
       APPLY ;
233
       DIG 3 ;
234
       DROP ;
235
       DIG 17 ;
236
       UNPAIR ;
237
       IF_LEFT
238
         { IF_LEFT
239
             { DIG 9 ;
240
               DIG 14 ;
241
               DIG 15 ;
242
               DIG 17 ;
243
               DROP 4 ;
244
               IF_LEFT
245
                 { DIG 2 ;
246
                   DIG 3 ;
247
                   DIG 9 ;
248
                   DIG 13 ;
249
                   DROP 5 ;
250
                   DIG 9 ;
251
                   DUP 2 ;
252
                   CAR ;
253
                   CAR ;
254
                   CAR ;
255
                   CDR ;
256
                   CDR ;
257
                   COMPARE ;
258
                   EQ ;
259
                   IF { DIG 5 ; DROP } { DIG 5 ; FAILWITH } ;
260
                   SENDER ;
261
                   DUP 2 ;
262
                   DIG 4 ;
263
                   SWAP ;
264
                   EXEC ;
265
                   PUSH nat 1 ;
266
                   DUP 2 ;
267
                   COMPARE ;
268
                   GT ;
269
                   IF
270
                     {}
271
                     { PUSH string "You cannot claim any reward before the first farm week as passed" ;
272
                       FAILWITH } ;
273
                   DIG 6 ;
274
                   PUSH mutez 0 ;
275
                   AMOUNT ;
276
                   COMPARE ;
277
                   EQ ;
278
                   IF { DROP } { FAILWITH } ;
279
                   PUSH nat 1 ;
280
                   SWAP ;
281
                   SUB ;
282
                   ABS ;
283
                   DUP 3 ;
284
                   CAR ;
285
                   CDR ;
286
                   CDR ;
287
                   CDR ;
288
                   CDR ;
289
                   DUP 3 ;
290
                   GET ;
291
                   IF_NONE
292
                     { SWAP ; DIG 3 ; DIG 4 ; DIG 6 ; DIG 7 ; DROP 6 ; SWAP }
293
                     { DUP 4 ;
294
                       CAR ;
295
                       CDR ;
296
                       CAR ;
297
                       CAR ;
298
                       CDR ;
299
                       DUP 5 ;
300
                       CAR ;
301
                       CAR ;
302
                       CAR ;
303
                       CDR ;
304
                       CAR ;
305
                       DUP 3 ;
306
                       PAIR ;
307
                       DUP 4 ;
308
                       PUSH nat 0 ;
309
                       PAIR ;
310
                       PAIR ;
311
                       PAIR ;
312
                       LEFT nat ;
313
                       LOOP_LEFT { UNPAIR ;
314
                                   UNPAIR ;
315
                                   UNPAIR ;
316
                                   DIG 2 ;
317
                                   UNPAIR ;
318
                                   IF_CONS
319
                                     { DIG 2 ;
320
                                       IF_CONS
321
                                         { DIG 6 ;
322
                                           IF_CONS
323
                                             { PUSH nat 0 ;
324
                                               DUP 9 ;
325
                                               COMPARE ;
326
                                               GT ;
327
                                               IF
328
                                                 { PUSH nat 0 ;
329
                                                   DUP 4 ;
330
                                                   COMPARE ;
331
                                                   EQ ;
332
                                                   IF
333
                                                     { DIG 2 ;
334
                                                       DIG 4 ;
335
                                                       DROP 3 ;
336
                                                       SWAP ;
337
                                                       DIG 2 ;
338
                                                       PAIR ;
339
                                                       PUSH nat 1 ;
340
                                                       DIG 4 ;
341
                                                       SUB }
342
                                                     { DIG 2 ;
343
                                                       SWAP ;
344
                                                       DIG 4 ;
345
                                                       MUL ;
346
                                                       EDIV ;
347
                                                       IF_NONE
348
                                                         { PUSH string "DIV by 0" ;
349
                                                           FAILWITH }
350
                                                         {} ;
351
                                                       CAR ;
352
                                                       DIG 4 ;
353
                                                       ADD ;
354
                                                       SWAP ;
355
                                                       DIG 2 ;
356
                                                       DIG 3 ;
357
                                                       PAIR ;
358
                                                       PUSH nat 1 ;
359
                                                       DIG 4 ;
360
                                                       SUB } ;
361
                                                   ABS ;
362
                                                   DIG 3 ;
363
                                                   PAIR ;
364
                                                   PAIR ;
365
                                                   PAIR ;
366
                                                   LEFT nat }
367
                                                 { SWAP ;
368
                                                   DIG 2 ;
369
                                                   DIG 3 ;
370
                                                   DIG 4 ;
371
                                                   DIG 5 ;
372
                                                   DIG 7 ;
373
                                                   DROP 7 ;
374
                                                   RIGHT (pair
375
                                                           (pair (pair nat nat)
376
                                                                 (list nat)
377
                                                                 (list nat))
378
                                                           (list nat)) } }
379
                                             { DROP 6 ;
380
                                               PUSH string "size don't match" ;
381
                                               FAILWITH } }
382
                                         { DROP 5 ;
383
                                           PUSH string "size don't match" ;
384
                                           FAILWITH } }
385
                                     { DIG 2 ;
386
                                       DROP ;
387
                                       IF_CONS
388
                                         { DROP 4 ;
389
                                           PUSH string "size don't match" ;
390
                                           FAILWITH }
391
                                         { SWAP ;
392
                                           IF_CONS
393
                                             { DROP 3 ;
394
                                               PUSH string "size don't match" ;
395
                                               FAILWITH }
396
                                             {} } ;
397
                                       RIGHT (pair
398
                                               (pair (pair nat nat) (list nat)
399
                                                     (list nat))
400
                                               (list nat)) } } ;
401
                       DUP 5 ;
402
                       CAR ;
403
                       CDR ;
404
                       CAR ;
405
                       CDR ;
406
                       CDR ;
407
                       DUP 6 ;
408
                       CAR ;
409
                       CDR ;
410
                       CDR ;
411
                       CAR ;
412
                       CAR ;
413
                       DUP 7 ;
414
                       CAR ;
415
                       CDR ;
416
                       CAR ;
417
                       CDR ;
418
                       CAR ;
419
                       IF_NONE
420
                         { DIG 10 ;
421
                           DROP ;
422
                           CONTRACT %transfer (pair address address nat) ;
423
                           IF_NONE { DIG 9 ; FAILWITH } { DIG 10 ; DROP } ;
424
                           PUSH mutez 0 ;
425
                           DUP 4 ;
426
                           DUP 8 ;
427
                           PAIR ;
428
                           DIG 3 ;
429
                           PAIR ;
430
                           TRANSFER_TOKENS }
431
                         { DIG 12 ;
432
                           DROP ;
433
                           SWAP ;
434
                           CONTRACT %transfer (list (pair address
435
                                                         (list (pair address nat nat)))) ;
436
                           IF_NONE { DIG 10 ; FAILWITH } { DIG 11 ; DROP } ;
437
                           PUSH mutez 0 ;
438
                           NIL (pair address (list (pair address nat nat))) ;
439
                           NIL (pair address nat nat) ;
440
                           DUP 7 ;
441
                           DIG 5 ;
442
                           PAIR ;
443
                           DUP 10 ;
444
                           PAIR ;
445
                           CONS ;
446
                           DIG 4 ;
447
                           PAIR ;
448
                           CONS ;
449
                           TRANSFER_TOKENS } ;
450
                       PUSH nat 0 ;
451
                       DIG 2 ;
452
                       COMPARE ;
453
                       EQ ;
454
                       IF
455
                         { SWAP ; DIG 2 ; DIG 3 ; DIG 5 ; DIG 6 ; DROP 6 ; SWAP }
456
                         { DIG 7 ;
457
                           DROP ;
458
                           DUP 7 ;
459
                           DIG 2 ;
460
                           DIG 3 ;
461
                           DIG 7 ;
462
                           PAIR ;
463
                           PAIR ;
464
                           LEFT (list nat) ;
465
                           LOOP_LEFT { UNPAIR ;
466
                                       UNPAIR ;
467
                                       DIG 2 ;
468
                                       IF_CONS
469
                                         { PUSH nat 0 ;
470
                                           DUP 5 ;
471
                                           COMPARE ;
472
                                           GT ;
473
                                           IF
474
                                             { DROP ;
475
                                               PUSH nat 1 ;
476
                                               DIG 3 ;
477
                                               SUB ;
478
                                               ABS ;
479
                                               DIG 2 ;
480
                                               PUSH nat 0 }
481
                                             { SWAP ; DUG 3 } ;
482
                                           CONS ;
483
                                           PAIR ;
484
                                           PAIR ;
485
                                           LEFT (list nat) }
486
                                         { SWAP ;
487
                                           DROP ;
488
                                           RIGHT (pair (pair (list nat) nat) (list nat)) } } ;
489
                           PAIR ;
490
                           DIG 4 ;
491
                           SWAP ;
492
                           EXEC ;
493
                           DUP 4 ;
494
                           DUP 5 ;
495
                           CAR ;
496
                           DUP ;
497
                           CDR ;
498
                           DUP ;
499
                           CDR ;
500
                           DUP ;
501
                           CDR ;
502
                           DIG 8 ;
503
                           CAR ;
504
                           CDR ;
505
                           CDR ;
506
                           CDR ;
507
                           CDR ;
508
                           DIG 6 ;
509
                           SOME ;
510
                           DIG 8 ;
511
                           UPDATE ;
512
                           UPDATE 2 ;
513
                           UPDATE 2 ;
514
                           UPDATE 2 ;
515
                           UPDATE 2 ;
516
                           UPDATE 1 ;
517
                           NIL operation ;
518
                           DIG 2 ;
519
                           CONS } } }
520
                 { DIG 4 ;
521
                   DIG 6 ;
522
                   DIG 11 ;
523
                   DIG 12 ;
524
                   DROP 4 ;
525
                   DUP 2 ;
526
                   CAR ;
527
                   CDR ;
528
                   CDR ;
529
                   CAR ;
530
                   CDR ;
531
                   NOW ;
532
                   DUP 4 ;
533
                   CAR ;
534
                   CAR ;
535
                   CAR ;
536
                   CAR ;
537
                   CDR ;
538
                   DUP 5 ;
539
                   DIG 8 ;
540
                   SWAP ;
541
                   EXEC ;
542
                   DUP 14 ;
543
                   DUP 7 ;
544
                   CAR ;
545
                   CAR ;
546
                   CAR ;
547
                   CDR ;
548
                   CDR ;
549
                   COMPARE ;
550
                   EQ ;
551
                   IF { DIG 9 ; DROP } { DIG 9 ; FAILWITH } ;
552
                   DIG 11 ;
553
                   DUP 7 ;
554
                   CAR ;
555
                   CAR ;
556
                   CAR ;
557
                   CAR ;
558
                   CAR ;
559
                   SENDER ;
560
                   COMPARE ;
561
                   EQ ;
562
                   IF { DROP } { FAILWITH } ;
563
                   DIG 10 ;
564
                   PUSH mutez 0 ;
565
                   AMOUNT ;
566
                   COMPARE ;
567
                   EQ ;
568
                   IF { DROP } { FAILWITH } ;
569
                   DIG 9 ;
570
                   DUP 7 ;
571
                   CAR ;
572
                   CAR ;
573
                   CDR ;
574
                   CDR ;
575
                   CDR ;
576
                   DUP 6 ;
577
                   MUL ;
578
                   INT ;
579
                   DUP 4 ;
580
                   ADD ;
581
                   DUP 5 ;
582
                   COMPARE ;
583
                   LT ;
584
                   IF { DROP } { FAILWITH } ;
585
                   PUSH nat 0 ;
586
                   DUP 6 ;
587
                   COMPARE ;
588
                   GT ;
589
                   IF
590
                     {}
591
                     { PUSH string "The increase amount must be greater than zero" ;
592
                       FAILWITH } ;
593
                   PUSH nat 1 ;
594
                   DUP 2 ;
595
                   DIG 5 ;
596
                   SUB ;
597
                   ABS ;
598
                   ADD ;
599
                   DUP 6 ;
600
                   CAR ;
601
                   CDR ;
602
                   CAR ;
603
                   CAR ;
604
                   CAR ;
605
                   SWAP ;
606
                   DUP 6 ;
607
                   PAIR 3 ;
608
                   DIG 6 ;
609
                   SWAP ;
610
                   EXEC ;
611
                   PUSH nat 1 ;
612
                   DIG 2 ;
613
                   SUB ;
614
                   ABS ;
615
                   SWAP ;
616
                   PAIR ;
617
                   LEFT (list nat) ;
618
                   LOOP_LEFT { UNPAIR ;
619
                               PUSH nat 0 ;
620
                               DUP 3 ;
621
                               COMPARE ;
622
                               EQ ;
623
                               IF
624
                                 { SWAP ; DROP ; RIGHT (pair (list nat) nat) }
625
                                 { PUSH nat 1 ;
626
                                   DIG 2 ;
627
                                   SUB ;
628
                                   ABS ;
629
                                   SWAP ;
630
                                   PUSH nat 0 ;
631
                                   CONS ;
632
                                   PAIR ;
633
                                   LEFT (list nat) } } ;
634
                   DIG 7 ;
635
                   SWAP ;
636
                   DUP 6 ;
637
                   CAR ;
638
                   CDR ;
639
                   CAR ;
640
                   CAR ;
641
                   CDR ;
642
                   PAIR 3 ;
643
                   DIG 5 ;
644
                   SWAP ;
645
                   EXEC ;
646
                   DUP 5 ;
647
                   DUP 6 ;
648
                   CAR ;
649
                   DUP ;
650
                   CDR ;
651
                   DUP ;
652
                   CDR ;
653
                   DUP ;
654
                   CDR ;
655
                   DUP 9 ;
656
                   DIG 10 ;
657
                   CAR ;
658
                   CDR ;
659
                   CDR ;
660
                   CDR ;
661
                   CAR ;
662
                   ADD ;
663
                   UPDATE 1 ;
664
                   UPDATE 2 ;
665
                   UPDATE 2 ;
666
                   UPDATE 2 ;
667
                   UPDATE 1 ;
668
                   DUP ;
669
                   CAR ;
670
                   DUP ;
671
                   CDR ;
672
                   DUP ;
673
                   CAR ;
674
                   DUP ;
675
                   CAR ;
676
                   DIG 5 ;
677
                   UPDATE 2 ;
678
                   UPDATE 1 ;
679
                   UPDATE 1 ;
680
                   UPDATE 2 ;
681
                   UPDATE 1 ;
682
                   DUP ;
683
                   CAR ;
684
                   DUP ;
685
                   CAR ;
686
                   DUP ;
687
                   CAR ;
688
                   DUP ;
689
                   CAR ;
690
                   PUSH nat 0 ;
691
                   DIG 8 ;
692
                   COMPARE ;
693
                   EQ ;
694
                   IF { DIG 5 ; DROP } { DIG 6 ; DROP } ;
695
                   DIG 5 ;
696
                   UPDATE 2 ;
697
                   UPDATE 1 ;
698
                   UPDATE 1 ;
699
                   UPDATE 1 ;
700
                   UPDATE 1 ;
701
                   SWAP } }
702
             { DIG 3 ;
703
               DIG 4 ;
704
               DIG 6 ;
705
               DIG 8 ;
706
               DROP 4 ;
707
               IF_LEFT
708
                 { DROP ;
709
                   NOW ;
710
                   DUP 2 ;
711
                   DIG 4 ;
712
                   SWAP ;
713
                   EXEC ;
714
                   DROP ;
715
                   DIG 11 ;
716
                   DUP 3 ;
717
                   CAR ;
718
                   CAR ;
719
                   CAR ;
720
                   CAR ;
721
                   CAR ;
722
                   SENDER ;
723
                   COMPARE ;
724
                   EQ ;
725
                   IF { DROP } { FAILWITH } ;
726
                   DIG 6 ;
727
                   PUSH mutez 0 ;
728
                   AMOUNT ;
729
                   COMPARE ;
730
                   EQ ;
731
                   IF { DROP } { FAILWITH } ;
732
                   DIG 5 ;
733
                   DUP 3 ;
734
                   CAR ;
735
                   CAR ;
736
                   CDR ;
737
                   CDR ;
738
                   CDR ;
739
                   INT ;
740
                   DUP 4 ;
741
                   CAR ;
742
                   CAR ;
743
                   CAR ;
744
                   CAR ;
745
                   CDR ;
746
                   ADD ;
747
                   DUP 3 ;
748
                   COMPARE ;
749
                   LT ;
750
                   IF { DROP } { FAILWITH } ;
751
                   PUSH nat 0 ;
752
                   DUP 3 ;
753
                   CAR ;
754
                   CDR ;
755
                   CAR ;
756
                   CAR ;
757
                   CDR ;
758
                   SIZE ;
759
                   COMPARE ;
760
                   EQ ;
761
                   IF {} { DUP 5 ; FAILWITH } ;
762
                   DIG 9 ;
763
                   DUP 3 ;
764
                   CAR ;
765
                   CAR ;
766
                   CAR ;
767
                   CDR ;
768
                   CDR ;
769
                   COMPARE ;
770
                   EQ ;
771
                   IF { DIG 4 ; DROP } { DIG 4 ; FAILWITH } ;
772
                   DUP 2 ;
773
                   CAR ;
774
                   CDR ;
775
                   CAR ;
776
                   CAR ;
777
                   CAR ;
778
                   DUP 3 ;
779
                   CAR ;
780
                   CDR ;
781
                   CDR ;
782
                   CAR ;
783
                   CDR ;
784
                   DUP 4 ;
785
                   CAR ;
786
                   CDR ;
787
                   CDR ;
788
                   CDR ;
789
                   CAR ;
790
                   PAIR 3 ;
791
                   DIG 3 ;
792
                   SWAP ;
793
                   EXEC ;
794
                   DUP 3 ;
795
                   CAR ;
796
                   CAR ;
797
                   CDR ;
798
                   CAR ;
799
                   CAR ;
800
                   IF_NONE
801
                     { DIG 6 ;
802
                       DROP ;
803
                       DUP 3 ;
804
                       CAR ;
805
                       CAR ;
806
                       CDR ;
807
                       CAR ;
808
                       CDR ;
809
                       CONTRACT %transfer (pair address address nat) ;
810
                       IF_NONE { DIG 6 ; FAILWITH } { DIG 7 ; DROP 2 } }
811
                     { DIG 8 ;
812
                       DROP 2 ;
813
                       DUP 3 ;
814
                       CAR ;
815
                       CAR ;
816
                       CDR ;
817
                       CAR ;
818
                       CDR ;
819
                       CONTRACT %transfer (list (pair address
820
                                                     (list (pair address nat nat)))) ;
821
                       IF_NONE { DIG 6 ; FAILWITH } { DIG 7 ; DROP 2 } } ;
822
                   DUP 3 ;
823
                   CAR ;
824
                   CDR ;
825
                   CAR ;
826
                   CDR ;
827
                   CAR ;
828
                   IF_NONE
829
                     { DIG 4 ;
830
                       DROP ;
831
                       DUP 3 ;
832
                       CAR ;
833
                       CDR ;
834
                       CDR ;
835
                       CAR ;
836
                       CAR ;
837
                       CONTRACT %transfer (pair address address nat) ;
838
                       IF_NONE { DIG 4 ; FAILWITH } { DIG 5 ; DROP 2 } }
839
                     { DIG 6 ;
840
                       DROP 2 ;
841
                       DUP 3 ;
842
                       CAR ;
843
                       CDR ;
844
                       CDR ;
845
                       CAR ;
846
                       CAR ;
847
                       CONTRACT %transfer (list (pair address
848
                                                     (list (pair address nat nat)))) ;
849
                       IF_NONE { DIG 4 ; FAILWITH } { DIG 5 ; DROP 2 } } ;
850
                   DUP 3 ;
851
                   DIG 3 ;
852
                   CAR ;
853
                   DUP ;
854
                   CDR ;
855
                   DUP ;
856
                   CAR ;
857
                   DUP ;
858
                   CAR ;
859
                   DIG 5 ;
860
                   UPDATE 2 ;
861
                   UPDATE 1 ;
862
                   UPDATE 1 ;
863
                   UPDATE 2 ;
864
                   UPDATE 1 ;
865
                   DUP ;
866
                   CAR ;
867
                   DUP ;
868
                   CAR ;
869
                   DUP ;
870
                   CAR ;
871
                   DUP ;
872
                   CAR ;
873
                   DIG 5 ;
874
                   UPDATE 2 ;
875
                   UPDATE 1 ;
876
                   UPDATE 1 ;
877
                   UPDATE 1 ;
878
                   UPDATE 1 ;
879
                   DUP ;
880
                   CAR ;
881
                   DUP ;
882
                   CAR ;
883
                   DUP ;
884
                   CAR ;
885
                   DUP ;
886
                   CDR ;
887
                   DIG 6 ;
888
                   UPDATE 2 ;
889
                   UPDATE 2 ;
890
                   UPDATE 1 ;
891
                   UPDATE 1 ;
892
                   UPDATE 1 }
893
                 { DIG 2 ;
894
                   DIG 3 ;
895
                   DIG 5 ;
896
                   DIG 6 ;
897
                   DIG 8 ;
898
                   DIG 9 ;
899
                   DIG 10 ;
900
                   DIG 11 ;
901
                   DIG 13 ;
902
                   DIG 14 ;
903
                   DROP 10 ;
904
                   DIG 4 ;
905
                   DUP 3 ;
906
                   CAR ;
907
                   CAR ;
908
                   CAR ;
909
                   CAR ;
910
                   CAR ;
911
                   SENDER ;
912
                   COMPARE ;
913
                   EQ ;
914
                   IF { DROP } { FAILWITH } ;
915
                   DIG 3 ;
916
                   PUSH mutez 0 ;
917
                   AMOUNT ;
918
                   COMPARE ;
919
                   EQ ;
920
                   IF { DROP } { FAILWITH } ;
921
                   DUP 2 ;
922
                   DIG 2 ;
923
                   CAR ;
924
                   DUP ;
925
                   CAR ;
926
                   DUP ;
927
                   CAR ;
928
                   DUP ;
929
                   CAR ;
930
                   DIG 5 ;
931
                   UPDATE 1 ;
932
                   UPDATE 1 ;
933
                   UPDATE 1 ;
934
                   UPDATE 1 ;
935
                   UPDATE 1 } ;
936
               SWAP } }
937
         { DIG 2 ;
938
           DIG 4 ;
939
           DIG 7 ;
940
           DIG 9 ;
941
           DIG 12 ;
942
           DIG 13 ;
943
           DIG 16 ;
944
           DROP 7 ;
945
           IF_LEFT
946
             { DIG 10 ;
947
               DROP ;
948
               DUP 2 ;
949
               CAR ;
950
               CAR ;
951
               CDR ;
952
               CAR ;
953
               CDR ;
954
               NOW ;
955
               SENDER ;
956
               DUP 5 ;
957
               CAR ;
958
               CAR ;
959
               CAR ;
960
               CDR ;
961
               CAR ;
962
               DUP 6 ;
963
               CAR ;
964
               CDR ;
965
               CDR ;
966
               CDR ;
967
               CDR ;
968
               DUP 7 ;
969
               DIG 9 ;
970
               SWAP ;
971
               EXEC ;
972
               DUP 8 ;
973
               CAR ;
974
               CAR ;
975
               CDR ;
976
               CDR ;
977
               CDR ;
978
               DUP 2 ;
979
               MUL ;
980
               INT ;
981
               DUP 9 ;
982
               CAR ;
983
               CAR ;
984
               CAR ;
985
               CAR ;
986
               CDR ;
987
               ADD ;
988
               DUP 17 ;
989
               DUP 10 ;
990
               CAR ;
991
               CAR ;
992
               CAR ;
993
               CDR ;
994
               CDR ;
995
               COMPARE ;
996
               EQ ;
997
               IF { DIG 11 ; DROP } { DIG 11 ; FAILWITH } ;
998
               DIG 12 ;
999
               PUSH mutez 0 ;
1000
               AMOUNT ;
1001
               COMPARE ;
1002
               EQ ;
1003
               IF { DROP } { FAILWITH } ;
1004
               PUSH nat 0 ;
1005
               DUP 9 ;
1006
               COMPARE ;
1007
               GT ;
1008
               IF
1009
                 {}
1010
                 { PUSH string "The farm staking amount must be greater than zero" ;
1011
                   FAILWITH } ;
1012
               DIG 11 ;
1013
               DUP 10 ;
1014
               CAR ;
1015
               CAR ;
1016
               CDR ;
1017
               CDR ;
1018
               CDR ;
1019
               DUP 11 ;
1020
               CAR ;
1021
               CDR ;
1022
               CDR ;
1023
               CAR ;
1024
               CDR ;
1025
               MUL ;
1026
               INT ;
1027
               DUP 11 ;
1028
               CAR ;
1029
               CAR ;
1030
               CAR ;
1031
               CAR ;
1032
               CDR ;
1033
               ADD ;
1034
               DUP 8 ;
1035
               COMPARE ;
1036
               LT ;
1037
               IF { DROP } { FAILWITH } ;
1038
               PUSH string "Please try again in few seconds" ;
1039
               PUSH int 0 ;
1040
               DUP 3 ;
1041
               DUP 9 ;
1042
               SUB ;
1043
               COMPARE ;
1044
               LT ;
1045
               IF { DROP } { FAILWITH } ;
1046
               DUP 9 ;
1047
               CAR ;
1048
               CAR ;
1049
               CDR ;
1050
               CAR ;
1051
               CAR ;
1052
               IF_NONE
1053
                 { DIG 11 ;
1054
                   DROP ;
1055
                   DIG 6 ;
1056
                   CONTRACT %transfer (pair address address nat) ;
1057
                   IF_NONE { DIG 10 ; FAILWITH } { DIG 11 ; DROP } ;
1058
                   DUP 8 ;
1059
                   SELF_ADDRESS ;
1060
                   PAIR ;
1061
                   DUP 7 ;
1062
                   PAIR ;
1063
                   SWAP ;
1064
                   PUSH mutez 0 ;
1065
                   DIG 2 ;
1066
                   TRANSFER_TOKENS }
1067
                 { DIG 13 ;
1068
                   DROP ;
1069
                   DIG 7 ;
1070
                   CONTRACT %transfer (list (pair address (list (pair address nat nat)))) ;
1071
                   IF_NONE { DIG 11 ; FAILWITH } { DIG 12 ; DROP } ;
1072
                   NIL (pair address nat nat) ;
1073
                   DUP 10 ;
1074
                   DIG 3 ;
1075
                   PAIR ;
1076
                   SELF_ADDRESS ;
1077
                   PAIR ;
1078
                   CONS ;
1079
                   DUP 7 ;
1080
                   PAIR ;
1081
                   SWAP ;
1082
                   PUSH mutez 0 ;
1083
                   NIL (pair address (list (pair address nat nat))) ;
1084
                   DIG 3 ;
1085
                   CONS ;
1086
                   TRANSFER_TOKENS } ;
1087
               NIL operation ;
1088
               SWAP ;
1089
               CONS ;
1090
               DUP 9 ;
1091
               CDR ;
1092
               DUP 7 ;
1093
               GET ;
1094
               IF_NONE
1095
                 { DUP 9 ; CDR ; DUP 9 ; DUP 8 ; SWAP ; SOME ; SWAP ; UPDATE }
1096
                 { DUP 10 ; CDR ; SWAP ; DUP 10 ; ADD ; SOME ; DUP 8 ; UPDATE } ;
1097
               DIG 2 ;
1098
               DIG 7 ;
1099
               SUB ;
1100
               ABS ;
1101
               DUP 8 ;
1102
               SWAP ;
1103
               MUL ;
1104
               DIG 7 ;
1105
               DUP 9 ;
1106
               CAR ;
1107
               CAR ;
1108
               CDR ;
1109
               CDR ;
1110
               CDR ;
1111
               MUL ;
1112
               DIG 10 ;
1113
               DUP 10 ;
1114
               CAR ;
1115
               CDR ;
1116
               CDR ;
1117
               CAR ;
1118
               CDR ;
1119
               PAIR ;
1120
               LEFT (list nat) ;
1121
               LOOP_LEFT { UNPAIR ;
1122
                           PUSH nat 0 ;
1123
                           DUP 2 ;
1124
                           COMPARE ;
1125
                           EQ ;
1126
                           IF
1127
                             { DROP ; RIGHT (pair nat (list nat)) }
1128
                             { SWAP ;
1129
                               DUP 7 ;
1130
                               DUP 3 ;
1131
                               COMPARE ;
1132
                               LT ;
1133
                               IF
1134
                                 { PUSH nat 0 }
1135
                                 { DUP 7 ; DUP 3 ; COMPARE ; EQ ; IF { DUP 4 } { DUP 3 } } ;
1136
                               CONS ;
1137
                               PUSH nat 1 ;
1138
                               DIG 2 ;
1139
                               SUB ;
1140
                               ABS ;
1141
                               PAIR ;
1142
                               LEFT (list nat) } } ;
1143
               SWAP ;
1144
               DIG 2 ;
1145
               DIG 5 ;
1146
               DROP 3 ;
1147
               DUP 4 ;
1148
               DUP 7 ;
1149
               GET ;
1150
               IF_NONE
1151
                 { DUP }
1152
                 { DUP 10 ; DUP 3 ; DIG 2 ; PAIR 3 ; DUP 9 ; SWAP ; EXEC } ;
1153
               PUSH nat 0 ;
1154
               DUP 7 ;
1155
               SIZE ;
1156
               COMPARE ;
1157
               EQ ;
1158
               IF
1159
                 { SWAP ; DIG 5 ; DIG 8 ; DIG 9 ; DROP 4 ; DUP }
1160
                 { DIG 9 ; DIG 2 ; DIG 6 ; PAIR 3 ; DIG 7 ; SWAP ; EXEC } ;
1161
               DIG 6 ;
1162
               DIG 3 ;
1163
               UPDATE 2 ;
1164
               DUP ;
1165
               CAR ;
1166
               DUP ;
1167
               CDR ;
1168
               DUP ;
1169
               CDR ;
1170
               DUP ;
1171
               CDR ;
1172
               DIG 8 ;
1173
               DIG 7 ;
1174
               SOME ;
1175
               DIG 9 ;
1176
               UPDATE ;
1177
               UPDATE 2 ;
1178
               UPDATE 2 ;
1179
               UPDATE 2 ;
1180
               UPDATE 2 ;
1181
               UPDATE 1 ;
1182
               DUP ;
1183
               CAR ;
1184
               DUP ;
1185
               CAR ;
1186
               DUP ;
1187
               CAR ;
1188
               DUP ;
1189
               CDR ;
1190
               DIG 5 ;
1191
               UPDATE 1 ;
1192
               UPDATE 2 ;
1193
               UPDATE 1 ;
1194
               UPDATE 1 ;
1195
               UPDATE 1 }
1196
             { DIG 6 ;
1197
               DIG 8 ;
1198
               DROP 2 ;
1199
               DIG 9 ;
1200
               DUP 3 ;
1201
               CAR ;
1202
               CAR ;
1203
               CAR ;
1204
               CDR ;
1205
               CDR ;
1206
               COMPARE ;
1207
               EQ ;
1208
               IF { DIG 5 ; DROP } { DIG 5 ; FAILWITH } ;
1209
               DUP 2 ;
1210
               CAR ;
1211
               CAR ;
1212
               CDR ;
1213
               CAR ;
1214
               CDR ;
1215
               NOW ;
1216
               DUP 4 ;
1217
               DIG 6 ;
1218
               SWAP ;
1219
               EXEC ;
1220
               DUP 5 ;
1221
               CAR ;
1222
               CDR ;
1223
               CDR ;
1224
               CDR ;
1225
               CDR ;
1226
               DIG 8 ;
1227
               PUSH mutez 0 ;
1228
               AMOUNT ;
1229
               COMPARE ;
1230
               EQ ;
1231
               IF { DROP } { FAILWITH } ;
1232
               SENDER ;
1233
               DUP 7 ;
1234
               CAR ;
1235
               CAR ;
1236
               CDR ;
1237
               CDR ;
1238
               CDR ;
1239
               DUP 4 ;
1240
               MUL ;
1241
               INT ;
1242
               DUP 8 ;
1243
               CAR ;
1244
               CAR ;
1245
               CAR ;
1246
               CAR ;
1247
               CDR ;
1248
               ADD ;
1249
               DUP 8 ;
1250
               CDR ;
1251
               DUP 3 ;
1252
               GET ;
1253
               IF_NONE { PUSH string "You did not stake any token yet" ; FAILWITH } {} ;
1254
               DUP 8 ;
1255
               DUP 2 ;
1256
               COMPARE ;
1257
               GE ;
1258
               IF
1259
                 {}
1260
                 { PUSH string "You cannot unstake more than your farm staking" ;
1261
                   FAILWITH } ;
1262
               DUP 9 ;
1263
               CDR ;
1264
               DUP 9 ;
1265
               DIG 2 ;
1266
               SUB ;
1267
               ABS ;
1268
               SOME ;
1269
               DUP 4 ;
1270
               UPDATE ;
1271
               DUP 9 ;
1272
               CAR ;
1273
               CAR ;
1274
               CDR ;
1275
               CAR ;
1276
               CAR ;
1277
               IF_NONE
1278
                 { DIG 6 ;
1279
                   CONTRACT %transfer (pair address address nat) ;
1280
                   IF_NONE { DIG 10 ; FAILWITH } { DIG 11 ; DROP } ;
1281
                   DUP 8 ;
1282
                   DUP 5 ;
1283
                   PAIR ;
1284
                   SELF_ADDRESS ;
1285
                   PAIR ;
1286
                   SWAP ;
1287
                   PUSH mutez 0 ;
1288
                   DIG 2 ;
1289
                   TRANSFER_TOKENS }
1290
                 { DIG 7 ;
1291
                   CONTRACT %transfer (list (pair address (list (pair address nat nat)))) ;
1292
                   IF_NONE { DIG 11 ; FAILWITH } { DIG 12 ; DROP } ;
1293
                   NIL (pair address nat nat) ;
1294
                   DUP 10 ;
1295
                   DIG 3 ;
1296
                   PAIR ;
1297
                   DUP 6 ;
1298
                   PAIR ;
1299
                   CONS ;
1300
                   SELF_ADDRESS ;
1301
                   PAIR ;
1302
                   SWAP ;
1303
                   PUSH mutez 0 ;
1304
                   NIL (pair address (list (pair address nat nat))) ;
1305
                   DIG 3 ;
1306
                   CONS ;
1307
                   TRANSFER_TOKENS } ;
1308
               NIL operation ;
1309
               SWAP ;
1310
               CONS ;
1311
               DUP 3 ;
1312
               DUP 8 ;
1313
               COMPARE ;
1314
               LT ;
1315
               IF
1316
                 { DIG 2 ;
1317
                   DIG 6 ;
1318
                   SUB ;
1319
                   ABS ;
1320
                   DUP 7 ;
1321
                   SWAP ;
1322
                   MUL ;
1323
                   DIG 6 ;
1324
                   DUP 8 ;
1325
                   CAR ;
1326
                   CAR ;
1327
                   CDR ;
1328
                   CDR ;
1329
                   CDR ;
1330
                   MUL ;
1331
                   DIG 9 ;
1332
                   DUP 9 ;
1333
                   CAR ;
1334
                   CDR ;
1335
                   CDR ;
1336
                   CAR ;
1337
                   CDR ;
1338
                   PAIR ;
1339
                   LEFT (list nat) ;
1340
                   LOOP_LEFT { UNPAIR ;
1341
                               PUSH nat 0 ;
1342
                               DUP 2 ;
1343
                               COMPARE ;
1344
                               EQ ;
1345
                               IF
1346
                                 { DROP ; RIGHT (pair nat (list nat)) }
1347
                                 { SWAP ;
1348
                                   DUP 9 ;
1349
                                   DUP 3 ;
1350
                                   COMPARE ;
1351
                                   LT ;
1352
                                   IF
1353
                                     { PUSH nat 0 }
1354
                                     { DUP 9 ; DUP 3 ; COMPARE ; EQ ; IF { DUP 4 } { DUP 3 } } ;
1355
                                   CONS ;
1356
                                   PUSH nat 1 ;
1357
                                   DIG 2 ;
1358
                                   SUB ;
1359
                                   ABS ;
1360
                                   PAIR ;
1361
                                   LEFT (list nat) } } ;
1362
                   SWAP ;
1363
                   DIG 2 ;
1364
                   DIG 7 ;
1365
                   DROP 3 ;
1366
                   DUP 5 ;
1367
                   DUP 5 ;
1368
                   GET ;
1369
                   IF_NONE
1370
                     { PUSH string "Some points should exist" ; FAILWITH }
1371
                     { DUP 9 ; DUP 3 ; DIG 2 ; PAIR 3 ; DUP 8 ; SWAP ; EXEC } ;
1372
                   DIG 8 ;
1373
                   DIG 2 ;
1374
                   DUP 8 ;
1375
                   CAR ;
1376
                   CAR ;
1377
                   CAR ;
1378
                   CDR ;
1379
                   CAR ;
1380
                   PAIR 3 ;
1381
                   DIG 7 ;
1382
                   SWAP ;
1383
                   EXEC ;
1384
                   DIG 6 ;
1385
                   DIG 4 ;
1386
                   UPDATE 2 ;
1387
                   DUP ;
1388
                   CAR ;
1389
                   DUP ;
1390
                   CDR ;
1391
                   DUP ;
1392
                   CDR ;
1393
                   DUP ;
1394
                   CDR ;
1395
                   DIG 9 ;
1396
                   DIG 7 ;
1397
                   SOME ;
1398
                   DIG 9 ;
1399
                   UPDATE ;
1400
                   UPDATE 2 ;
1401
                   UPDATE 2 ;
1402
                   UPDATE 2 ;
1403
                   UPDATE 2 ;
1404
                   UPDATE 1 ;
1405
                   DUP ;
1406
                   CAR ;
1407
                   DUP ;
1408
                   CAR ;
1409
                   DUP ;
1410
                   CAR ;
1411
                   DUP ;
1412
                   CDR ;
1413
                   DIG 5 ;
1414
                   UPDATE 1 ;
1415
                   UPDATE 2 ;
1416
                   UPDATE 1 ;
1417
                   UPDATE 1 ;
1418
                   UPDATE 1 }
1419
                 { DIG 2 ; DIG 3 ; DIG 4 ; DIG 5 ; DIG 6 ; DIG 7 ; DIG 9 ; DIG 10 ; DIG 11 ; DROP 9 ; DUG 2 ; UPDATE 2 } } ;
1420
           SWAP } ;
1421
       PAIR }