BCD

Tezos Contract Explorer
Search Networks Deploy
  • Home
  • /
  • Mainnet
  • /
  • upsorber
FA1FA1.2
operations (141K)Storage Code Interact Tokens Fork Views Statistics Details
Latest
​x
1002
 
1
{ parameter (or
2
              (or
3
                (or
4
                  (or (pair %approve (address %spender) (nat %value))
5
                      (pair %getAllowance
6
                        (pair %request (address %owner) (address %spender))
7
                        (contract %callback nat)))
8
                  (or (pair %getBalance (address %owner) (contract %callback nat))
9
                      (pair %getTotalSupply (unit %request) (contract %callback nat))))
10
                (or
11
                  (or (nat %setTransformPrice)
12
                      (pair %stake (nat %amount) (nat %duration)))
13
                  (or (pair %transfer (address %from) (address %to) (nat %value))
14
                      (address %transform))))
15
              (or (timestamp %unstake) (mutez %withdraw))) ;
16
  storage (pair
17
            (pair
18
              (pair
19
                (pair
20
                  (big_map %allowances (pair (address %owner) (address %spender)) nat)
21
                  (nat %currentUPPerTez))
22
                (nat %doubling)
23
                (timestamp %lastDoubledDate))
24
              (pair (nat %maxDays) (nat %minDays))
25
              (nat %stakeTooLate)
26
              (big_map %stakes address
27
                               (map timestamp
28
                                    (pair (pair (nat %amount) (nat %duration))
29
                                          (timestamp %normalizedStarted)))))
30
            (pair
31
              (pair (timestamp %startDate)
32
                    (big_map %timeline timestamp
33
                                       (pair (nat %upStaked) (nat %uptimeStaked))))
34
              (big_map %token_metadata nat
35
                                       (pair (nat %token_id)
36
                                             (map %token_info string bytes)))
37
              (big_map %tokens address nat))
38
            (pair (nat %total_supply) (nat %transformDurationDays))
39
            (address %withdraw)) ;
40
  code { SENDER ;
41
         LAMBDA
42
           (pair address
43
                 (pair nat
44
                       (pair
45
                         (pair (pair (big_map (pair address address) nat) nat) nat
46
                               timestamp)
47
                         (pair nat nat)
48
                         nat
49
                         (big_map address
50
                                  (map timestamp (pair (pair nat nat) timestamp))))
51
                       (pair (pair timestamp (big_map timestamp (pair nat nat)))
52
                             (big_map nat (pair nat (map string bytes)))
53
                             (big_map address nat))
54
                       (pair nat nat)
55
                       address))
56
           nat
57
           { UNPAIR ;
58
             SWAP ;
59
             UNPAIR ;
60
             SWAP ;
61
             CDR ;
62
             CAR ;
63
             CDR ;
64
             CDR ;
65
             DIG 2 ;
66
             GET ;
67
             IF_NONE { PUSH nat 0 } {} ;
68
             SUB ;
69
             ISNAT ;
70
             IF_NONE { PUSH string "Not enough UP" ; FAILWITH } {} } ;
71
         DUP 2 ;
72
         APPLY ;
73
         LAMBDA
74
           (pair
75
             (pair (pair (pair (big_map (pair address address) nat) nat) nat timestamp)
76
                   (pair nat nat)
77
                   nat
78
                   (big_map address (map timestamp (pair (pair nat nat) timestamp))))
79
             (pair (pair timestamp (big_map timestamp (pair nat nat)))
80
                   (big_map nat (pair nat (map string bytes)))
81
                   (big_map address nat))
82
             (pair nat nat)
83
             address)
84
           timestamp
85
           { PUSH int 86400 ;
86
             PUSH int 86400 ;
87
             DUP 3 ;
88
             CDR ;
89
             CAR ;
90
             CAR ;
91
             CAR ;
92
             NOW ;
93
             SUB ;
94
             EDIV ;
95
             IF_NONE { PUSH string "DIV by 0" ; FAILWITH } {} ;
96
             CAR ;
97
             MUL ;
98
             SWAP ;
99
             CDR ;
100
             CAR ;
101
             CAR ;
102
             CAR ;
103
             ADD } ;
104
         LAMBDA
105
           (pair address
106
                 (pair timestamp
107
                       (pair
108
                         (pair (pair (big_map (pair address address) nat) nat) nat
109
                               timestamp)
110
                         (pair nat nat)
111
                         nat
112
                         (big_map address
113
                                  (map timestamp (pair (pair nat nat) timestamp))))
114
                       (pair (pair timestamp (big_map timestamp (pair nat nat)))
115
                             (big_map nat (pair nat (map string bytes)))
116
                             (big_map address nat))
117
                       (pair nat nat)
118
                       address))
119
           (pair (pair nat nat) timestamp)
120
           { UNPAIR ;
121
             SWAP ;
122
             UNPAIR ;
123
             SWAP ;
124
             CAR ;
125
             CDR ;
126
             CDR ;
127
             CDR ;
128
             DIG 2 ;
129
             GET ;
130
             IF_NONE { EMPTY_MAP timestamp (pair (pair nat nat) timestamp) } {} ;
131
             SWAP ;
132
             GET ;
133
             IF_NONE { PUSH timestamp 0 ; PUSH nat 0 ; PUSH nat 0 ; PAIR ; PAIR } {} } ;
134
         DUP 4 ;
135
         APPLY ;
136
         LAMBDA
137
           (pair address
138
                 (pair
139
                   (pair
140
                     (pair (pair (big_map (pair address address) nat) nat) nat timestamp)
141
                     (pair nat nat)
142
                     nat
143
                     (big_map address (map timestamp (pair (pair nat nat) timestamp))))
144
                   (pair (pair timestamp (big_map timestamp (pair nat nat)))
145
                         (big_map nat (pair nat (map string bytes)))
146
                         (big_map address nat))
147
                   (pair nat nat)
148
                   address))
149
           (map timestamp (pair (pair nat nat) timestamp))
150
           { UNPAIR ;
151
             SWAP ;
152
             CAR ;
153
             CDR ;
154
             CDR ;
155
             CDR ;
156
             SWAP ;
157
             GET ;
158
             IF_NONE { EMPTY_MAP timestamp (pair (pair nat nat) timestamp) } {} } ;
159
         DUP 5 ;
160
         APPLY ;
161
         LAMBDA
162
           (pair address
163
                 (pair nat
164
                       (pair
165
                         (pair (pair (big_map (pair address address) nat) nat) nat
166
                               timestamp)
167
                         (pair nat nat)
168
                         nat
169
                         (big_map address
170
                                  (map timestamp (pair (pair nat nat) timestamp))))
171
                       (pair (pair timestamp (big_map timestamp (pair nat nat)))
172
                             (big_map nat (pair nat (map string bytes)))
173
                             (big_map address nat))
174
                       (pair nat nat)
175
                       address))
176
           (big_map address nat)
177
           { UNPAIR ; SWAP ; UNPAIR ; SWAP ; CDR ; CAR ; CDR ; CDR ; SWAP ; SOME ; DIG 2 ; UPDATE } ;
178
         DUP 6 ;
179
         APPLY ;
180
         LAMBDA
181
           (pair (pair address nat)
182
                 (pair
183
                   (pair (pair (big_map (pair address address) nat) nat) nat timestamp)
184
                   (pair nat nat)
185
                   nat
186
                   (big_map address (map timestamp (pair (pair nat nat) timestamp))))
187
                 (pair (pair timestamp (big_map timestamp (pair nat nat)))
188
                       (big_map nat (pair nat (map string bytes)))
189
                       (big_map address nat))
190
                 (pair nat nat)
191
                 address)
192
           (big_map address nat)
193
           { UNPAIR ;
194
             UNPAIR ;
195
             SWAP ;
196
             DUP 3 ;
197
             CDR ;
198
             CAR ;
199
             CDR ;
200
             CDR ;
201
             DUP 3 ;
202
             GET ;
203
             IF_NONE { PUSH nat 0 } {} ;
204
             ADD ;
205
             DIG 2 ;
206
             CDR ;
207
             CAR ;
208
             CDR ;
209
             CDR ;
210
             SWAP ;
211
             SOME ;
212
             DIG 2 ;
213
             UPDATE } ;
214
         LAMBDA
215
           (pair nat nat)
216
           nat
217
           { UNPAIR ;
218
             PUSH nat 100 ;
219
             DIG 2 ;
220
             DUP 3 ;
221
             MUL ;
222
             EDIV ;
223
             IF_NONE { PUSH string "DIV by 0" ; FAILWITH } {} ;
224
             CAR ;
225
             ADD } ;
226
         DIG 8 ;
227
         UNPAIR ;
228
         IF_LEFT
229
           { IF_LEFT
230
               { DIG 2 ;
231
                 DIG 3 ;
232
                 DIG 4 ;
233
                 DIG 5 ;
234
                 DIG 6 ;
235
                 DIG 7 ;
236
                 DIG 8 ;
237
                 DIG 9 ;
238
                 DROP 8 ;
239
                 IF_LEFT
240
                   { IF_LEFT
241
                       { DUP 2 ;
242
                         CAR ;
243
                         CAR ;
244
                         CAR ;
245
                         CAR ;
246
                         DUP 2 ;
247
                         CAR ;
248
                         SENDER ;
249
                         PAIR ;
250
                         PUSH nat 0 ;
251
                         DUP 4 ;
252
                         CDR ;
253
                         COMPARE ;
254
                         GT ;
255
                         PUSH nat 0 ;
256
                         DUP 4 ;
257
                         DUP 4 ;
258
                         GET ;
259
                         IF_NONE { PUSH nat 0 } {} ;
260
                         COMPARE ;
261
                         GT ;
262
                         AND ;
263
                         IF { PUSH string "UnsafeAllowanceChange" ; FAILWITH } {} ;
264
                         DUP 4 ;
265
                         CDR ;
266
                         DUP 5 ;
267
                         CAR ;
268
                         CDR ;
269
                         DUP 6 ;
270
                         CAR ;
271
                         CAR ;
272
                         CDR ;
273
                         DIG 6 ;
274
                         CAR ;
275
                         CAR ;
276
                         CAR ;
277
                         CDR ;
278
                         DIG 6 ;
279
                         CDR ;
280
                         DIG 6 ;
281
                         PUSH nat 0 ;
282
                         DUP 3 ;
283
                         COMPARE ;
284
                         EQ ;
285
                         IF { SWAP ; DROP ; NONE nat } { SWAP ; SOME } ;
286
                         DIG 6 ;
287
                         UPDATE ;
288
                         PAIR ;
289
                         PAIR ;
290
                         PAIR ;
291
                         PAIR ;
292
                         NIL operation }
293
                       { DUP 2 ;
294
                         NIL operation ;
295
                         DUP 3 ;
296
                         CDR ;
297
                         PUSH mutez 0 ;
298
                         DIG 5 ;
299
                         CAR ;
300
                         CAR ;
301
                         CAR ;
302
                         CAR ;
303
                         DIG 5 ;
304
                         CAR ;
305
                         GET ;
306
                         IF_NONE { PUSH nat 0 } {} ;
307
                         TRANSFER_TOKENS ;
308
                         CONS } }
309
                   { IF_LEFT
310
                       { DUP 2 ;
311
                         NIL operation ;
312
                         DUP 3 ;
313
                         CDR ;
314
                         PUSH mutez 0 ;
315
                         DIG 5 ;
316
                         CDR ;
317
                         CAR ;
318
                         CDR ;
319
                         CDR ;
320
                         DIG 5 ;
321
                         CAR ;
322
                         GET ;
323
                         IF_NONE { PUSH nat 0 } {} ;
324
                         TRANSFER_TOKENS }
325
                       { DUP 2 ;
326
                         NIL operation ;
327
                         DIG 2 ;
328
                         CDR ;
329
                         PUSH mutez 0 ;
330
                         DIG 4 ;
331
                         CDR ;
332
                         CDR ;
333
                         CAR ;
334
                         CAR ;
335
                         TRANSFER_TOKENS } ;
336
                     CONS } }
337
               { IF_LEFT
338
                   { DIG 3 ;
339
                     DROP ;
340
                     IF_LEFT
341
                       { DIG 2 ;
342
                         DIG 3 ;
343
                         DIG 4 ;
344
                         DIG 5 ;
345
                         DIG 6 ;
346
                         DIG 7 ;
347
                         DROP 6 ;
348
                         DIG 2 ;
349
                         DUP 3 ;
350
                         CDR ;
351
                         CDR ;
352
                         CDR ;
353
                         COMPARE ;
354
                         NEQ ;
355
                         IF { PUSH string "You cant set price" ; FAILWITH } {} ;
356
                         DUP 2 ;
357
                         CDR ;
358
                         DUP 3 ;
359
                         CAR ;
360
                         CDR ;
361
                         DUP 4 ;
362
                         CAR ;
363
                         CAR ;
364
                         CDR ;
365
                         DIG 3 ;
366
                         DIG 4 ;
367
                         CAR ;
368
                         CAR ;
369
                         CAR ;
370
                         CAR ;
371
                         PAIR }
372
                       { DUP 2 ;
373
                         DUP 2 ;
374
                         CAR ;
375
                         PAIR ;
376
                         DIG 8 ;
377
                         SWAP ;
378
                         EXEC ;
379
                         DUP 3 ;
380
                         CAR ;
381
                         CDR ;
382
                         CAR ;
383
                         CDR ;
384
                         DUP 3 ;
385
                         CDR ;
386
                         COMPARE ;
387
                         LT ;
388
                         IF { PUSH string "Too short time period" ; FAILWITH } {} ;
389
                         DUP 3 ;
390
                         CAR ;
391
                         CDR ;
392
                         CAR ;
393
                         CAR ;
394
                         DUP 3 ;
395
                         CDR ;
396
                         COMPARE ;
397
                         GT ;
398
                         IF { PUSH string "Too long time period" ; FAILWITH } {} ;
399
                         DUP 3 ;
400
                         DUP 9 ;
401
                         SWAP ;
402
                         EXEC ;
403
                         NOW ;
404
                         DUP 5 ;
405
                         DUP 2 ;
406
                         PAIR ;
407
                         DIG 9 ;
408
                         SWAP ;
409
                         EXEC ;
410
                         PUSH nat 0 ;
411
                         SWAP ;
412
                         CAR ;
413
                         CDR ;
414
                         COMPARE ;
415
                         NEQ ;
416
                         IF { PUSH string "Please wait a few seconds" ; FAILWITH } {} ;
417
                         DUP 5 ;
418
                         DIG 3 ;
419
                         PAIR ;
420
                         DIG 6 ;
421
                         SWAP ;
422
                         EXEC ;
423
                         PUSH int 86400 ;
424
                         DUP 4 ;
425
                         ADD ;
426
                         DUP 6 ;
427
                         DIG 8 ;
428
                         SWAP ;
429
                         EXEC ;
430
                         PUSH nat 1 ;
431
                         DUP 8 ;
432
                         CDR ;
433
                         CAR ;
434
                         CAR ;
435
                         CDR ;
436
                         DUP 8 ;
437
                         CAR ;
438
                         PAIR ;
439
                         DUP 8 ;
440
                         CDR ;
441
                         DUP 5 ;
442
                         PAIR ;
443
                         PAIR ;
444
                         PAIR ;
445
                         LEFT (big_map timestamp (pair nat nat)) ;
446
                         LOOP_LEFT { UNPAIR ;
447
                                     UNPAIR ;
448
                                     UNPAIR ;
449
                                     DIG 2 ;
450
                                     UNPAIR ;
451
                                     DUP 4 ;
452
                                     DUP 6 ;
453
                                     COMPARE ;
454
                                     GT ;
455
                                     IF
456
                                       { DIG 2 ;
457
                                         DIG 3 ;
458
                                         DIG 4 ;
459
                                         DROP 4 ;
460
                                         RIGHT (pair
461
                                                 (pair (pair timestamp nat) nat
462
                                                       (big_map timestamp (pair nat nat)))
463
                                                 nat) }
464
                                       { DUP 2 ;
465
                                         DUP 4 ;
466
                                         GET ;
467
                                         IF_NONE { PUSH nat 0 ; PUSH nat 0 ; PAIR } {} ;
468
                                         DUP 6 ;
469
                                         DUP 3 ;
470
                                         PAIR ;
471
                                         DUP 15 ;
472
                                         SWAP ;
473
                                         EXEC ;
474
                                         DUP 2 ;
475
                                         CDR ;
476
                                         ADD ;
477
                                         DUP 3 ;
478
                                         DIG 2 ;
479
                                         CAR ;
480
                                         ADD ;
481
                                         PAIR ;
482
                                         PUSH int 86400 ;
483
                                         DUP 5 ;
484
                                         ADD ;
485
                                         PUSH nat 1 ;
486
                                         DIG 7 ;
487
                                         ADD ;
488
                                         DIG 4 ;
489
                                         DIG 3 ;
490
                                         SOME ;
491
                                         DIG 5 ;
492
                                         UPDATE ;
493
                                         DIG 3 ;
494
                                         PAIR ;
495
                                         DIG 3 ;
496
                                         DIG 3 ;
497
                                         PAIR ;
498
                                         PAIR ;
499
                                         PAIR ;
500
                                         LEFT (big_map timestamp (pair nat nat)) } } ;
501
                         DIG 8 ;
502
                         DROP ;
503
                         DUP 8 ;
504
                         DIG 9 ;
505
                         SWAP ;
506
                         EXEC ;
507
                         PUSH int 86400 ;
508
                         DUP 10 ;
509
                         CAR ;
510
                         CAR ;
511
                         CDR ;
512
                         CAR ;
513
                         MUL ;
514
                         DUP 10 ;
515
                         CAR ;
516
                         CAR ;
517
                         CDR ;
518
                         CDR ;
519
                         DIG 2 ;
520
                         SUB ;
521
                         COMPARE ;
522
                         GT ;
523
                         IF
524
                           { PUSH nat 2 ; DUP 9 ; CAR ; CDR ; CAR ; CDR ; MUL }
525
                           { DUP 8 ; CAR ; CDR ; CAR ; CDR } ;
526
                         DUP 9 ;
527
                         CDR ;
528
                         CDR ;
529
                         DUP 10 ;
530
                         CDR ;
531
                         CAR ;
532
                         CDR ;
533
                         DIG 3 ;
534
                         DUP 11 ;
535
                         CDR ;
536
                         CAR ;
537
                         CAR ;
538
                         CAR ;
539
                         PAIR ;
540
                         PAIR ;
541
                         PAIR ;
542
                         DUP 9 ;
543
                         CAR ;
544
                         PAIR ;
545
                         DUP ;
546
                         CDR ;
547
                         DUP 10 ;
548
                         CAR ;
549
                         CDR ;
550
                         CDR ;
551
                         CDR ;
552
                         DIG 4 ;
553
                         DIG 5 ;
554
                         DIG 9 ;
555
                         PAIR ;
556
                         SOME ;
557
                         DIG 7 ;
558
                         UPDATE ;
559
                         SOME ;
560
                         DIG 8 ;
561
                         UPDATE ;
562
                         DUP 3 ;
563
                         CAR ;
564
                         CDR ;
565
                         CDR ;
566
                         CAR ;
567
                         PAIR ;
568
                         DUP 3 ;
569
                         CAR ;
570
                         CDR ;
571
                         CAR ;
572
                         PAIR ;
573
                         DIG 2 ;
574
                         CAR ;
575
                         CAR ;
576
                         PAIR ;
577
                         PAIR ;
578
                         DUP ;
579
                         CDR ;
580
                         CDR ;
581
                         DIG 3 ;
582
                         DUP 3 ;
583
                         CDR ;
584
                         CAR ;
585
                         CDR ;
586
                         CAR ;
587
                         PAIR ;
588
                         DUP 3 ;
589
                         CDR ;
590
                         CAR ;
591
                         CAR ;
592
                         PAIR ;
593
                         PAIR ;
594
                         SWAP ;
595
                         CAR ;
596
                         PAIR ;
597
                         DUP ;
598
                         CDR ;
599
                         DUP 2 ;
600
                         CAR ;
601
                         CDR ;
602
                         CDR ;
603
                         DUP 4 ;
604
                         DUP 4 ;
605
                         CAR ;
606
                         CDR ;
607
                         CAR ;
608
                         CAR ;
609
                         PAIR ;
610
                         PAIR ;
611
                         DIG 2 ;
612
                         CAR ;
613
                         CAR ;
614
                         PAIR ;
615
                         PAIR ;
616
                         DUP ;
617
                         CDR ;
618
                         DUP 2 ;
619
                         CAR ;
620
                         CDR ;
621
                         DUP 6 ;
622
                         CAR ;
623
                         CDR ;
624
                         CAR ;
625
                         CDR ;
626
                         DIG 4 ;
627
                         COMPARE ;
628
                         GT ;
629
                         IF
630
                           { DIG 4 ; DROP ; DIG 3 }
631
                           { DIG 3 ; DROP ; DIG 3 ; CAR ; CAR ; CDR ; CDR } ;
632
                         DUP 4 ;
633
                         CAR ;
634
                         CAR ;
635
                         CDR ;
636
                         CAR ;
637
                         PAIR ;
638
                         DIG 3 ;
639
                         CAR ;
640
                         CAR ;
641
                         CAR } ;
642
                     PAIR ;
643
                     PAIR }
644
                   { DIG 2 ;
645
                     DIG 4 ;
646
                     DIG 5 ;
647
                     DIG 6 ;
648
                     DIG 8 ;
649
                     DROP 5 ;
650
                     IF_LEFT
651
                       { DIG 2 ;
652
                         DIG 3 ;
653
                         DIG 4 ;
654
                         DROP 3 ;
655
                         DUP 2 ;
656
                         CAR ;
657
                         CAR ;
658
                         CAR ;
659
                         CAR ;
660
                         DUP 3 ;
661
                         CDR ;
662
                         CAR ;
663
                         CDR ;
664
                         CDR ;
665
                         DUP 3 ;
666
                         CAR ;
667
                         SENDER ;
668
                         COMPARE ;
669
                         EQ ;
670
                         IF
671
                           { SWAP }
672
                           { SENDER ;
673
                             DUP 4 ;
674
                             CAR ;
675
                             PAIR ;
676
                             DUP 4 ;
677
                             GET 4 ;
678
                             DUP 4 ;
679
                             DUP 3 ;
680
                             GET ;
681
                             IF_NONE { PUSH nat 0 } {} ;
682
                             SUB ;
683
                             ISNAT ;
684
                             IF_NONE
685
                               { PUSH string "NotEnoughAllowance" ; FAILWITH }
686
                               {} ;
687
                             DIG 3 ;
688
                             PUSH nat 0 ;
689
                             DUP 3 ;
690
                             COMPARE ;
691
                             EQ ;
692
                             IF { SWAP ; DROP ; NONE nat } { SWAP ; SOME } ;
693
                             DIG 2 ;
694
                             UPDATE } ;
695
                         DUP 3 ;
696
                         GET 4 ;
697
                         DUP 3 ;
698
                         DUP 5 ;
699
                         CAR ;
700
                         GET ;
701
                         IF_NONE { PUSH nat 0 } {} ;
702
                         SUB ;
703
                         ISNAT ;
704
                         IF_NONE { PUSH string "NotEnoughBalance" ; FAILWITH } {} ;
705
                         DIG 2 ;
706
                         PUSH nat 0 ;
707
                         DUP 3 ;
708
                         COMPARE ;
709
                         EQ ;
710
                         IF { SWAP ; DROP ; NONE nat } { SWAP ; SOME } ;
711
                         DUP 4 ;
712
                         CAR ;
713
                         UPDATE ;
714
                         DUP 3 ;
715
                         GET 4 ;
716
                         DUP 2 ;
717
                         DUP 5 ;
718
                         GET 3 ;
719
                         GET ;
720
                         IF_NONE { PUSH nat 0 } {} ;
721
                         ADD ;
722
                         DUP 5 ;
723
                         CDR ;
724
                         CDR ;
725
                         DIG 2 ;
726
                         PUSH nat 0 ;
727
                         DUP 4 ;
728
                         COMPARE ;
729
                         EQ ;
730
                         IF { DIG 2 ; DROP ; NONE nat } { DIG 2 ; SOME } ;
731
                         DIG 4 ;
732
                         GET 3 ;
733
                         UPDATE ;
734
                         DUP 4 ;
735
                         CDR ;
736
                         CAR ;
737
                         CDR ;
738
                         CAR ;
739
                         PAIR ;
740
                         DUP 4 ;
741
                         CDR ;
742
                         CAR ;
743
                         CAR ;
744
                         PAIR ;
745
                         PAIR ;
746
                         DIG 2 ;
747
                         CAR ;
748
                         PAIR ;
749
                         DUP ;
750
                         CDR ;
751
                         DUP 2 ;
752
                         CAR ;
753
                         CDR ;
754
                         DUP 3 ;
755
                         CAR ;
756
                         CAR ;
757
                         CDR ;
758
                         DIG 3 ;
759
                         CAR ;
760
                         CAR ;
761
                         CAR ;
762
                         CDR ;
763
                         DIG 4 ;
764
                         PAIR ;
765
                         PAIR ;
766
                         PAIR }
767
                       { PUSH mutez 1000000 ;
768
                         AMOUNT ;
769
                         EDIV ;
770
                         IF_NONE { PUSH string "DIV by 0" ; FAILWITH } {} ;
771
                         CAR ;
772
                         DUP 3 ;
773
                         DIG 5 ;
774
                         SWAP ;
775
                         EXEC ;
776
                         PUSH int 86400 ;
777
                         DUP 5 ;
778
                         CDR ;
779
                         CDR ;
780
                         CAR ;
781
                         CDR ;
782
                         MUL ;
783
                         DUP 5 ;
784
                         CDR ;
785
                         CAR ;
786
                         CAR ;
787
                         CAR ;
788
                         DIG 2 ;
789
                         SUB ;
790
                         COMPARE ;
791
                         GE ;
792
                         IF { PUSH string "Transformation phase over" ; FAILWITH } {} ;
793
                         PUSH nat 0 ;
794
                         DUP 2 ;
795
                         COMPARE ;
796
                         LE ;
797
                         IF { PUSH string "Must send some tez" ; FAILWITH } {} ;
798
                         DUP 2 ;
799
                         DUP 6 ;
800
                         COMPARE ;
801
                         EQ ;
802
                         IF { PUSH string "Sender cant be ref" ; FAILWITH } {} ;
803
                         DUP 3 ;
804
                         CAR ;
805
                         CAR ;
806
                         CAR ;
807
                         CDR ;
808
                         SWAP ;
809
                         MUL ;
810
                         DUP 3 ;
811
                         DUP 2 ;
812
                         DIG 6 ;
813
                         PAIR ;
814
                         PAIR ;
815
                         DUP 5 ;
816
                         SWAP ;
817
                         EXEC ;
818
                         PUSH nat 10 ;
819
                         DUP 3 ;
820
                         EDIV ;
821
                         IF_NONE { PUSH string "DIV by 0" ; FAILWITH } {} ;
822
                         CAR ;
823
                         DUP 5 ;
824
                         CDR ;
825
                         CDR ;
826
                         DIG 2 ;
827
                         DUP 6 ;
828
                         CDR ;
829
                         CAR ;
830
                         CDR ;
831
                         CAR ;
832
                         PAIR ;
833
                         DUP 6 ;
834
                         CDR ;
835
                         CAR ;
836
                         CAR ;
837
                         PAIR ;
838
                         PAIR ;
839
                         DUP 5 ;
840
                         CAR ;
841
                         PAIR ;
842
                         DUP 2 ;
843
                         DIG 4 ;
844
                         PAIR ;
845
                         PAIR ;
846
                         DIG 4 ;
847
                         SWAP ;
848
                         EXEC ;
849
                         SWAP ;
850
                         DIG 2 ;
851
                         DUP 4 ;
852
                         CDR ;
853
                         CDR ;
854
                         CAR ;
855
                         CAR ;
856
                         ADD ;
857
                         ADD ;
858
                         DUP 3 ;
859
                         CDR ;
860
                         CDR ;
861
                         DIG 2 ;
862
                         DUP 4 ;
863
                         CDR ;
864
                         CAR ;
865
                         CDR ;
866
                         CAR ;
867
                         PAIR ;
868
                         DUP 4 ;
869
                         CDR ;
870
                         CAR ;
871
                         CAR ;
872
                         PAIR ;
873
                         PAIR ;
874
                         DIG 2 ;
875
                         CAR ;
876
                         PAIR ;
877
                         DUP ;
878
                         CDR ;
879
                         CDR ;
880
                         CDR ;
881
                         DUP 2 ;
882
                         CDR ;
883
                         CDR ;
884
                         CAR ;
885
                         CDR ;
886
                         DIG 3 ;
887
                         PAIR ;
888
                         PAIR ;
889
                         DUP 2 ;
890
                         CDR ;
891
                         CAR ;
892
                         PAIR ;
893
                         SWAP ;
894
                         CAR } } ;
895
                 PAIR ;
896
                 NIL operation } ;
897
             PAIR }
898
           { DIG 3 ;
899
             DROP ;
900
             IF_LEFT
901
               { DUP 2 ;
902
                 DUP 2 ;
903
                 PAIR ;
904
                 DIG 6 ;
905
                 SWAP ;
906
                 EXEC ;
907
                 PUSH nat 0 ;
908
                 DUP 2 ;
909
                 CAR ;
910
                 CDR ;
911
                 COMPARE ;
912
                 EQ ;
913
                 IF { PUSH string "No stake at this ID" ; FAILWITH } {} ;
914
                 PUSH bool False ;
915
                 DUP 2 ;
916
                 CAR ;
917
                 CDR ;
918
                 PUSH int 86400 ;
919
                 MUL ;
920
                 DUP 3 ;
921
                 CDR ;
922
                 ADD ;
923
                 PUSH int 0 ;
924
                 SWAP ;
925
                 NOW ;
926
                 SUB ;
927
                 COMPARE ;
928
                 GT ;
929
                 IF { PUSH bool True } { PUSH bool False } ;
930
                 COMPARE ;
931
                 EQ ;
932
                 IF { PUSH string "Stake not finished yet" ; FAILWITH } {} ;
933
                 PUSH int 86400 ;
934
                 PUSH int 1 ;
935
                 DUP 3 ;
936
                 CAR ;
937
                 CDR ;
938
                 SUB ;
939
                 ABS ;
940
                 MUL ;
941
                 DUP 2 ;
942
                 CDR ;
943
                 ADD ;
944
                 PUSH nat 3650000 ;
945
                 PUSH nat 300 ;
946
                 DUP 6 ;
947
                 CDR ;
948
                 CDR ;
949
                 CAR ;
950
                 CAR ;
951
                 MUL ;
952
                 EDIV ;
953
                 IF_NONE { PUSH string "DIV by 0" ; FAILWITH } {} ;
954
                 CAR ;
955
                 PUSH bool True ;
956
                 PUSH int 86400 ;
957
                 DUP 7 ;
958
                 CAR ;
959
                 CDR ;
960
                 CDR ;
961
                 CAR ;
962
                 MUL ;
963
                 DUP 4 ;
964
                 ADD ;
965
                 DUP 7 ;
966
                 DIG 11 ;
967
                 SWAP ;
968
                 EXEC ;
969
                 PUSH int 0 ;
970
                 SWAP ;
971
                 DIG 2 ;
972
                 SUB ;
973
                 COMPARE ;
974
                 LT ;
975
                 IF { PUSH bool True } { PUSH bool False } ;
976
                 COMPARE ;
977
                 EQ ;
978
                 IF
979
                   { SWAP ; DIG 5 ; DROP 3 ; PUSH nat 0 }
980
                   { SWAP ;
981
                     PAIR ;
982
                     PUSH nat 0 ;
983
                     PUSH nat 0 ;
984
                     PAIR ;
985
                     DUP 5 ;
986
                     CDR ;
987
                     CAR ;
988
                     CAR ;
989
                     CDR ;
990
                     DUP 4 ;
991
                     PAIR ;
992
                     PAIR ;
993
                     PAIR ;
994
                     LEFT nat ;
995
                     LOOP_LEFT { UNPAIR ;
996
                                 UNPAIR ;
997
                                 UNPAIR ;
998
                                 DIG 2 ;
999
                                 UNPAIR ;
1000
                                 DIG 4 ;
1001
                                 UNPAIR ;
1002
                                 DUP 4 ;
1003
                                 DUP 6 ;
1004
                                 CAR ;
1005
                                 CDR ;
1006
                                 SUB ;
1007
                                 ABS ;
1008
                                 DUP 6 ;
1009
                                 CAR ;
1010
                                 CAR ;
1011
                                 PAIR ;
1012
                                 DUP 11 ;
1013
                                 SWAP ;
1014
                                 EXEC ;
1015
                                 DUP 7 ;
1016
                                 DUP 3 ;
1017
                                 GET ;
1018
                                 IF_NONE { PUSH nat 0 ; PUSH nat 0 ; PAIR } {} ;
1019
                                 PUSH nat 0 ;
1020
                                 DUP 2 ;
1021
                                 CDR ;
1022
                                 COMPARE ;
1023
                                 EQ ;
1024
                                 IF { DUP 6 ; FAILWITH } {} ;
1025
                                 CDR ;
1026
                                 DUP 4 ;
1027
                                 DIG 2 ;
1028
                                 MUL ;
1029
                                 EDIV ;
1030
                                 IF_NONE { PUSH string "DIV by 0" ; FAILWITH } {} ;
1031
                                 CAR ;
1032
                                 DIG 3 ;
1033
                                 ADD ;
1034
                                 PUSH nat 1 ;
1035
                                 DIG 4 ;
1036
                                 ADD ;
1037
                                 PUSH int 86400 ;
1038
                                 DUP 4 ;
1039
                                 SUB ;
1040
                                 DUP 6 ;
1041
                                 CDR ;
1042
                                 DIG 4 ;
1043
                                 COMPARE ;
1044
                                 EQ ;
1045
                                 IF
1046
                                   { SWAP ;
1047
                                     DIG 3 ;
1048
                                     DIG 4 ;
1049
                                     DIG 5 ;
1050
                                     DROP 5 ;
1051
                                     RIGHT (pair
1052
                                             (pair
1053
                                               (pair (pair (pair nat nat) timestamp)
1054
                                                     (big_map timestamp (pair nat nat)))
1055
                                               nat
1056
                                               nat)
1057
                                             timestamp
1058
                                             nat) }
1059
                                   { DIG 3 ;
1060
                                     SWAP ;
1061
                                     PAIR ;
1062
                                     SWAP ;
1063
                                     DIG 2 ;
1064
                                     PAIR ;
1065
                                     DIG 3 ;
1066
                                     DIG 3 ;
1067
                                     PAIR ;
1068
                                     PAIR ;
1069
                                     PAIR ;
1070
                                     LEFT nat } } ;
1071
                     DIG 4 ;
1072
                     DROP } ;
1073
                 DUP 4 ;
1074
                 PUSH nat 0 ;
1075
                 PAIR ;
1076
                 DIG 7 ;
1077
                 SWAP ;
1078
                 EXEC ;
1079
                 DIG 2 ;
1080
                 CAR ;
1081
                 CAR ;
1082
                 DUP 3 ;
1083
                 DIG 2 ;
1084
                 ADD ;
1085
                 ADD ;
1086
                 DUP 4 ;
1087
                 SWAP ;
1088
                 PAIR ;
1089
                 DIG 4 ;
1090
                 SWAP ;
1091
                 EXEC ;
1092
                 DUP 4 ;
1093
                 DIG 5 ;
1094
                 SWAP ;
1095
                 EXEC ;
1096
                 DIG 2 ;
1097
                 DUP 5 ;
1098
                 CDR ;
1099
                 CDR ;
1100
                 CAR ;
1101
                 CAR ;
1102
                 ADD ;
1103
                 DUP 5 ;
1104
                 CDR ;
1105
                 DUP 6 ;
1106
                 CAR ;
1107
                 CDR ;
1108
                 CDR ;
1109
                 CDR ;
1110
                 DIG 3 ;
1111
                 DIG 5 ;
1112
                 NONE (pair (pair nat nat) timestamp) ;
1113
                 SWAP ;
1114
                 UPDATE ;
1115
                 SOME ;
1116
                 DIG 6 ;
1117
                 UPDATE ;
1118
                 DUP 5 ;
1119
                 CAR ;
1120
                 CDR ;
1121
                 CDR ;
1122
                 CAR ;
1123
                 PAIR ;
1124
                 DUP 5 ;
1125
                 CAR ;
1126
                 CDR ;
1127
                 CAR ;
1128
                 PAIR ;
1129
                 DIG 4 ;
1130
                 CAR ;
1131
                 CAR ;
1132
                 PAIR ;
1133
                 PAIR ;
1134
                 DUP ;
1135
                 CDR ;
1136
                 CDR ;
1137
                 DIG 3 ;
1138
                 DUP 3 ;
1139
                 CDR ;
1140
                 CAR ;
1141
                 CDR ;
1142
                 CAR ;
1143
                 PAIR ;
1144
                 DUP 3 ;
1145
                 CDR ;
1146
                 CAR ;
1147
                 CAR ;
1148
                 PAIR ;
1149
                 PAIR ;
1150
                 SWAP ;
1151
                 CAR ;
1152
                 PAIR ;
1153
                 DUP ;
1154
                 CDR ;
1155
                 CDR ;
1156
                 CDR ;
1157
                 DUP 2 ;
1158
                 CDR ;
1159
                 CDR ;
1160
                 CAR ;
1161
                 CDR ;
1162
                 DIG 3 ;
1163
                 PAIR ;
1164
                 PAIR ;
1165
                 DUP 2 ;
1166
                 CDR ;
1167
                 CAR ;
1168
                 PAIR ;
1169
                 SWAP ;
1170
                 CAR ;
1171
                 PAIR ;
1172
                 NIL operation ;
1173
                 PAIR }
1174
               { DIG 2 ;
1175
                 DIG 3 ;
1176
                 DIG 4 ;
1177
                 DIG 5 ;
1178
                 DIG 6 ;
1179
                 DIG 7 ;
1180
                 DROP 6 ;
1181
                 DIG 2 ;
1182
                 DUP 3 ;
1183
                 CDR ;
1184
                 CDR ;
1185
                 CDR ;
1186
                 COMPARE ;
1187
                 NEQ ;
1188
                 IF
1189
                   { DROP 2 ; PUSH string "You cant withdraw" ; FAILWITH }
1190
                   { DUP 2 ;
1191
                     CDR ;
1192
                     CDR ;
1193
                     CDR ;
1194
                     CONTRACT unit ;
1195
                     IF_NONE { PUSH string "Contract not found" ; FAILWITH } {} ;
1196
                     SWAP ;
1197
                     UNIT ;
1198
                     TRANSFER_TOKENS ;
1199
                     SWAP ;
1200
                     NIL operation ;
1201
                     DIG 2 ;
1202
                     CONS ;
1203
                     PAIR } } } } ;
1204
  view "getUserStakesView" unit
1205
        (map timestamp
1206
             (pair (pair (nat %amount) (nat %duration)) (timestamp %normalizedStarted)))
1207
        { SENDER ;
1208
          SWAP ;
1209
          CDR ;
1210
          CAR ;
1211
          CDR ;
1212
          CDR ;
1213
          CDR ;
1214
          SWAP ;
1215
          GET ;
1216
          IF_NONE { EMPTY_MAP timestamp (pair (pair nat nat) timestamp) } {} } ;
1217
  view "getEstTotalUserReward" timestamp nat
1218
        { SENDER ;
1219
          SWAP ;
1220
          UNPAIR ;
1221
          DUP 2 ;
1222
          CAR ;
1223
          CDR ;
1224
          CDR ;
1225
          CDR ;
1226
          DIG 3 ;
1227
          GET ;
1228
          IF_NONE { EMPTY_MAP timestamp (pair (pair nat nat) timestamp) } {} ;
1229
          SWAP ;
1230
          GET ;
1231
          IF_NONE { PUSH timestamp 0 ; PUSH nat 0 ; PUSH nat 0 ; PAIR ; PAIR } {} ;
1232
          PUSH nat 0 ;
1233
          DUP 2 ;
1234
          CAR ;
1235
          CDR ;
1236
          COMPARE ;
1237
          EQ ;
1238
          IF { PUSH string "No stake at this ID" ; FAILWITH } {} ;
1239
          PUSH int 86400 ;
1240
          PUSH int 1 ;
1241
          DUP 3 ;
1242
          CAR ;
1243
          CDR ;
1244
          SUB ;
1245
          ABS ;
1246
          MUL ;
1247
          DUP 2 ;
1248
          CDR ;
1249
          ADD ;
1250
          PUSH nat 3650000 ;
1251
          PUSH nat 300 ;
1252
          DUP 5 ;
1253
          CDR ;
1254
          CDR ;
1255
          CAR ;
1256
          CAR ;
1257
          MUL ;
1258
          EDIV ;
1259
          IF_NONE { PUSH string "DIV by 0" ; FAILWITH } {} ;
1260
          CAR ;
1261
          PUSH bool True ;
1262
          PUSH int 86400 ;
1263
          DUP 6 ;
1264
          CAR ;
1265
          CDR ;
1266
          CDR ;
1267
          CAR ;
1268
          MUL ;
1269
          DUP 4 ;
1270
          ADD ;
1271
          PUSH int 86400 ;
1272
          PUSH int 86400 ;
1273
          DUP 8 ;
1274
          CDR ;
1275
          CAR ;
1276
          CAR ;
1277
          CAR ;
1278
          NOW ;
1279
          SUB ;
1280
          EDIV ;
1281
          IF_NONE { PUSH string "DIV by 0" ; FAILWITH } {} ;
1282
          CAR ;
1283
          MUL ;
1284
          DUP 7 ;
1285
          CDR ;
1286
          CAR ;
1287
          CAR ;
1288
          CAR ;
1289
          ADD ;
1290
          PUSH int 0 ;
1291
          SWAP ;
1292
          DIG 2 ;
1293
          SUB ;
1294
          COMPARE ;
1295
          LT ;
1296
          IF { PUSH bool True } { PUSH bool False } ;
1297
          COMPARE ;
1298
          EQ ;
1299
          IF
1300
            { DROP 4 ; PUSH nat 0 }
1301
            { SWAP ;
1302
              PAIR ;
1303
              PUSH nat 0 ;
1304
              PUSH nat 0 ;
1305
              PAIR ;
1306
              DIG 3 ;
1307
              CDR ;
1308
              CAR ;
1309
              CAR ;
1310
              CDR ;
1311
              DIG 3 ;
1312
              PAIR ;
1313
              PAIR ;
1314
              PAIR ;
1315
              LEFT nat ;
1316
              LOOP_LEFT { UNPAIR ;
1317
                          UNPAIR ;
1318
                          UNPAIR ;
1319
                          DIG 2 ;
1320
                          UNPAIR ;
1321
                          DIG 4 ;
1322
                          UNPAIR ;
1323
                          DUP 4 ;
1324
                          DUP 6 ;
1325
                          CAR ;
1326
                          CDR ;
1327
                          SUB ;
1328
                          ABS ;
1329
                          DUP 6 ;
1330
                          CAR ;
1331
                          CAR ;
1332
                          PUSH nat 100 ;
1333
                          DIG 2 ;
1334
                          DUP 3 ;
1335
                          MUL ;
1336
                          EDIV ;
1337
                          IF_NONE { PUSH string "DIV by 0" ; FAILWITH } {} ;
1338
                          CAR ;
1339
                          ADD ;
1340
                          DUP 7 ;
1341
                          DUP 3 ;
1342
                          GET ;
1343
                          IF_NONE { PUSH nat 0 ; PUSH nat 0 ; PAIR } {} ;
1344
                          PUSH nat 0 ;
1345
                          DUP 2 ;
1346
                          CDR ;
1347
                          COMPARE ;
1348
                          EQ ;
1349
                          IF { DUP 6 ; FAILWITH } {} ;
1350
                          CDR ;
1351
                          DUP 4 ;
1352
                          DIG 2 ;
1353
                          MUL ;
1354
                          EDIV ;
1355
                          IF_NONE { PUSH string "DIV by 0" ; FAILWITH } {} ;
1356
                          CAR ;
1357
                          DIG 3 ;
1358
                          ADD ;
1359
                          PUSH nat 1 ;
1360
                          DIG 4 ;
1361
                          ADD ;
1362
                          PUSH int 86400 ;
1363
                          DUP 4 ;
1364
                          SUB ;
1365
                          DUP 6 ;
1366
                          CDR ;
1367
                          DIG 4 ;
1368
                          COMPARE ;
1369
                          EQ ;
1370
                          IF
1371
                            { SWAP ;
1372
                              DIG 3 ;
1373
                              DIG 4 ;
1374
                              DIG 5 ;
1375
                              DROP 5 ;
1376
                              RIGHT (pair
1377
                                      (pair
1378
                                        (pair (pair (pair nat nat) timestamp)
1379
                                              (big_map timestamp (pair nat nat)))
1380
                                        nat
1381
                                        nat)
1382
                                      timestamp
1383
                                      nat) }
1384
                            { DIG 3 ;
1385
                              SWAP ;
1386
                              PAIR ;
1387
                              SWAP ;
1388
                              DIG 2 ;
1389
                              PAIR ;
1390
                              DIG 3 ;
1391
                              DIG 3 ;
1392
                              PAIR ;
1393
                              PAIR ;
1394
                              PAIR ;
1395
                              LEFT nat } } } } ;
1396
  view "getEstUserRewardUntilNow" timestamp nat
1397
        { SENDER ;
1398
          LAMBDA
1399
            (pair
1400
              (pair (pair (pair (big_map (pair address address) nat) nat) nat timestamp)
1401
                    (pair nat nat)
1402
                    nat
1403
                    (big_map address (map timestamp (pair (pair nat nat) timestamp))))
1404
              (pair (pair timestamp (big_map timestamp (pair nat nat)))
1405
                    (big_map nat (pair nat (map string bytes)))
1406
                    (big_map address nat))
1407
              (pair nat nat)
1408
              address)
1409
            timestamp
1410
            { PUSH int 86400 ;
1411
              PUSH int 86400 ;
1412
              DUP 3 ;
1413
              CDR ;
1414
              CAR ;
1415
              CAR ;
1416
              CAR ;
1417
              NOW ;
1418
              SUB ;
1419
              EDIV ;
1420
              IF_NONE { PUSH string "DIV by 0" ; FAILWITH } {} ;
1421
              CAR ;
1422
              MUL ;
1423
              SWAP ;
1424
              CDR ;
1425
              CAR ;
1426
              CAR ;
1427
              CAR ;
1428
              ADD } ;
1429
          LAMBDA
1430
            (pair
1431
              (pair
1432
                (pair (pair (pair nat nat) timestamp) (big_map timestamp (pair nat nat)))
1433
                nat
1434
                nat)
1435
              timestamp
1436
              nat)
1437
            nat
1438
            { LEFT nat ;
1439
              LOOP_LEFT { UNPAIR ;
1440
                          UNPAIR ;
1441
                          UNPAIR ;
1442
                          DIG 2 ;
1443
                          UNPAIR ;
1444
                          DIG 4 ;
1445
                          UNPAIR ;
1446
                          DUP 4 ;
1447
                          DUP 6 ;
1448
                          CAR ;
1449
                          CDR ;
1450
                          SUB ;
1451
                          ABS ;
1452
                          DUP 6 ;
1453
                          CAR ;
1454
                          CAR ;
1455
                          PUSH nat 100 ;
1456
                          DIG 2 ;
1457
                          DUP 3 ;
1458
                          MUL ;
1459
                          EDIV ;
1460
                          IF_NONE { PUSH string "DIV by 0" ; FAILWITH } {} ;
1461
                          CAR ;
1462
                          ADD ;
1463
                          DUP 7 ;
1464
                          DUP 3 ;
1465
                          GET ;
1466
                          IF_NONE { PUSH nat 0 ; PUSH nat 0 ; PAIR } {} ;
1467
                          PUSH nat 0 ;
1468
                          DUP 2 ;
1469
                          CDR ;
1470
                          COMPARE ;
1471
                          EQ ;
1472
                          IF { DUP 6 ; FAILWITH } {} ;
1473
                          CDR ;
1474
                          DUP 4 ;
1475
                          DIG 2 ;
1476
                          MUL ;
1477
                          EDIV ;
1478
                          IF_NONE { PUSH string "DIV by 0" ; FAILWITH } {} ;
1479
                          CAR ;
1480
                          DIG 3 ;
1481
                          ADD ;
1482
                          PUSH nat 1 ;
1483
                          DIG 4 ;
1484
                          ADD ;
1485
                          PUSH int 86400 ;
1486
                          DUP 4 ;
1487
                          SUB ;
1488
                          DUP 6 ;
1489
                          CDR ;
1490
                          DIG 4 ;
1491
                          COMPARE ;
1492
                          EQ ;
1493
                          IF
1494
                            { SWAP ;
1495
                              DIG 3 ;
1496
                              DIG 4 ;
1497
                              DIG 5 ;
1498
                              DROP 5 ;
1499
                              RIGHT (pair
1500
                                      (pair
1501
                                        (pair (pair (pair nat nat) timestamp)
1502
                                              (big_map timestamp (pair nat nat)))
1503
                                        nat
1504
                                        nat)
1505
                                      timestamp
1506
                                      nat) }
1507
                            { DIG 3 ;
1508
                              SWAP ;
1509
                              PAIR ;
1510
                              SWAP ;
1511
                              DIG 2 ;
1512
                              PAIR ;
1513
                              DIG 3 ;
1514
                              DIG 3 ;
1515
                              PAIR ;
1516
                              PAIR ;
1517
                              PAIR ;
1518
                              LEFT nat } } } ;
1519
          DIG 3 ;
1520
          UNPAIR ;
1521
          DUP 2 ;
1522
          CAR ;
1523
          CDR ;
1524
          CDR ;
1525
          CDR ;
1526
          DIG 5 ;
1527
          GET ;
1528
          IF_NONE { EMPTY_MAP timestamp (pair (pair nat nat) timestamp) } {} ;
1529
          SWAP ;
1530
          GET ;
1531
          IF_NONE { PUSH timestamp 0 ; PUSH nat 0 ; PUSH nat 0 ; PAIR ; PAIR } {} ;
1532
          PUSH nat 0 ;
1533
          DUP 2 ;
1534
          CAR ;
1535
          CDR ;
1536
          COMPARE ;
1537
          EQ ;
1538
          IF { PUSH string "No stake at this ID" ; FAILWITH } {} ;
1539
          PUSH int 86400 ;
1540
          DUP 3 ;
1541
          DUP 6 ;
1542
          SWAP ;
1543
          EXEC ;
1544
          SUB ;
1545
          PUSH int 86400 ;
1546
          PUSH int 1 ;
1547
          DUP 4 ;
1548
          CAR ;
1549
          CDR ;
1550
          SUB ;
1551
          ABS ;
1552
          MUL ;
1553
          DUP 3 ;
1554
          CDR ;
1555
          ADD ;
1556
          PUSH nat 3650000 ;
1557
          PUSH nat 300 ;
1558
          DUP 6 ;
1559
          CDR ;
1560
          CDR ;
1561
          CAR ;
1562
          CAR ;
1563
          MUL ;
1564
          EDIV ;
1565
          IF_NONE { PUSH string "DIV by 0" ; FAILWITH } {} ;
1566
          CAR ;
1567
          DUP 2 ;
1568
          DUP 4 ;
1569
          COMPARE ;
1570
          GE ;
1571
          IF
1572
            { DIG 2 ;
1573
              DROP ;
1574
              PUSH bool True ;
1575
              PUSH int 86400 ;
1576
              DUP 6 ;
1577
              CAR ;
1578
              CDR ;
1579
              CDR ;
1580
              CAR ;
1581
              MUL ;
1582
              DUP 4 ;
1583
              ADD ;
1584
              DUP 6 ;
1585
              DIG 8 ;
1586
              SWAP ;
1587
              EXEC ;
1588
              PUSH int 0 ;
1589
              SWAP ;
1590
              DIG 2 ;
1591
              SUB ;
1592
              COMPARE ;
1593
              LT ;
1594
              IF { PUSH bool True } { PUSH bool False } ;
1595
              COMPARE ;
1596
              EQ ;
1597
              IF
1598
                { DROP 5 ; PUSH nat 0 }
1599
                { SWAP ;
1600
                  PAIR ;
1601
                  PUSH nat 0 ;
1602
                  PUSH nat 0 ;
1603
                  PAIR ;
1604
                  DIG 3 ;
1605
                  CDR ;
1606
                  CAR ;
1607
                  CAR ;
1608
                  CDR ;
1609
                  DIG 3 ;
1610
                  PAIR ;
1611
                  PAIR ;
1612
                  PAIR ;
1613
                  EXEC } }
1614
            { DIG 6 ;
1615
              DROP ;
1616
              PUSH nat 86400 ;
1617
              DUP 4 ;
1618
              DIG 3 ;
1619
              SUB ;
1620
              ABS ;
1621
              EDIV ;
1622
              IF_NONE { PUSH string "DIV by 0" ; FAILWITH } {} ;
1623
              CAR ;
1624
              PUSH int 0 ;
1625
              DUP 5 ;
1626
              CDR ;
1627
              DUP 5 ;
1628
              SUB ;
1629
              COMPARE ;
1630
              LT ;
1631
              IF
1632
                { DROP 6 ; PUSH nat 0 }
1633
                { SWAP ;
1634
                  DIG 2 ;
1635
                  PAIR ;
1636
                  SWAP ;
1637
                  PUSH nat 0 ;
1638
                  PAIR ;
1639
                  DIG 3 ;
1640
                  CDR ;
1641
                  CAR ;
1642
                  CAR ;
1643
                  CDR ;
1644
                  DIG 3 ;
1645
                  PAIR ;
1646
                  PAIR ;
1647
                  PAIR ;
1648
                  EXEC } } } ;
1649
  view "getEstRewardsNewStake" (pair (nat %amount) (nat %duration)) nat
1650
        { SENDER ;
1651
          LAMBDA
1652
            (pair
1653
              (pair (pair (pair (big_map (pair address address) nat) nat) nat timestamp)
1654
                    (pair nat nat)
1655
                    nat
1656
                    (big_map address (map timestamp (pair (pair nat nat) timestamp))))
1657
              (pair (pair timestamp (big_map timestamp (pair nat nat)))
1658
                    (big_map nat (pair nat (map string bytes)))
1659
                    (big_map address nat))
1660
              (pair nat nat)
1661
              address)
1662
            timestamp
1663
            { PUSH int 86400 ;
1664
              PUSH int 86400 ;
1665
              DUP 3 ;
1666
              CDR ;
1667
              CAR ;
1668
              CAR ;
1669
              CAR ;
1670
              NOW ;
1671
              SUB ;
1672
              EDIV ;
1673
              IF_NONE { PUSH string "DIV by 0" ; FAILWITH } {} ;
1674
              CAR ;
1675
              MUL ;
1676
              SWAP ;
1677
              CDR ;
1678
              CAR ;
1679
              CAR ;
1680
              CAR ;
1681
              ADD } ;
1682
          LAMBDA
1683
            (pair address
1684
                  (pair timestamp
1685
                        (pair
1686
                          (pair (pair (big_map (pair address address) nat) nat) nat
1687
                                timestamp)
1688
                          (pair nat nat)
1689
                          nat
1690
                          (big_map address
1691
                                   (map timestamp (pair (pair nat nat) timestamp))))
1692
                        (pair (pair timestamp (big_map timestamp (pair nat nat)))
1693
                              (big_map nat (pair nat (map string bytes)))
1694
                              (big_map address nat))
1695
                        (pair nat nat)
1696
                        address))
1697
            (pair (pair nat nat) timestamp)
1698
            { UNPAIR ;
1699
              SWAP ;
1700
              UNPAIR ;
1701
              SWAP ;
1702
              CAR ;
1703
              CDR ;
1704
              CDR ;
1705
              CDR ;
1706
              DIG 2 ;
1707
              GET ;
1708
              IF_NONE { EMPTY_MAP timestamp (pair (pair nat nat) timestamp) } {} ;
1709
              SWAP ;
1710
              GET ;
1711
              IF_NONE { PUSH timestamp 0 ; PUSH nat 0 ; PUSH nat 0 ; PAIR ; PAIR } {} } ;
1712
          DUP 3 ;
1713
          APPLY ;
1714
          LAMBDA
1715
            (pair nat nat)
1716
            nat
1717
            { UNPAIR ;
1718
              PUSH nat 100 ;
1719
              DIG 2 ;
1720
              DUP 3 ;
1721
              MUL ;
1722
              EDIV ;
1723
              IF_NONE { PUSH string "DIV by 0" ; FAILWITH } {} ;
1724
              CAR ;
1725
              ADD } ;
1726
          DIG 4 ;
1727
          UNPAIR ;
1728
          NOW ;
1729
          DUP 2 ;
1730
          CAR ;
1731
          DUP 4 ;
1732
          CDR ;
1733
          CAR ;
1734
          CDR ;
1735
          CDR ;
1736
          DUP 9 ;
1737
          GET ;
1738
          IF_NONE { PUSH nat 0 } {} ;
1739
          SUB ;
1740
          ISNAT ;
1741
          IF_NONE { PUSH string "Not enough UP" ; FAILWITH } {} ;
1742
          DUP 4 ;
1743
          CAR ;
1744
          CDR ;
1745
          CAR ;
1746
          CDR ;
1747
          DUP 4 ;
1748
          CDR ;
1749
          COMPARE ;
1750
          LT ;
1751
          IF { PUSH string "Too short time period" ; FAILWITH } {} ;
1752
          DUP 4 ;
1753
          CAR ;
1754
          CDR ;
1755
          CAR ;
1756
          CAR ;
1757
          DUP 4 ;
1758
          CDR ;
1759
          COMPARE ;
1760
          GT ;
1761
          IF { PUSH string "Too long time period" ; FAILWITH } {} ;
1762
          DUP 4 ;
1763
          DUP 8 ;
1764
          SWAP ;
1765
          EXEC ;
1766
          NOW ;
1767
          DUP 6 ;
1768
          DUP 2 ;
1769
          PAIR ;
1770
          DUP 9 ;
1771
          SWAP ;
1772
          EXEC ;
1773
          PUSH nat 0 ;
1774
          SWAP ;
1775
          CAR ;
1776
          CDR ;
1777
          COMPARE ;
1778
          NEQ ;
1779
          IF { PUSH string "Please wait a few seconds" ; FAILWITH } {} ;
1780
          PUSH int 86400 ;
1781
          DUP 3 ;
1782
          ADD ;
1783
          PUSH nat 1 ;
1784
          DUP 8 ;
1785
          CDR ;
1786
          CAR ;
1787
          CAR ;
1788
          CDR ;
1789
          DUP 8 ;
1790
          CAR ;
1791
          PAIR ;
1792
          DUP 8 ;
1793
          CDR ;
1794
          DUP 4 ;
1795
          PAIR ;
1796
          PAIR ;
1797
          PAIR ;
1798
          LEFT (big_map timestamp (pair nat nat)) ;
1799
          LOOP_LEFT { UNPAIR ;
1800
                      UNPAIR ;
1801
                      UNPAIR ;
1802
                      DIG 2 ;
1803
                      UNPAIR ;
1804
                      DUP 4 ;
1805
                      DUP 6 ;
1806
                      COMPARE ;
1807
                      GT ;
1808
                      IF
1809
                        { DIG 2 ;
1810
                          DIG 3 ;
1811
                          DIG 4 ;
1812
                          DROP 4 ;
1813
                          RIGHT (pair
1814
                                  (pair (pair timestamp nat) nat
1815
                                        (big_map timestamp (pair nat nat)))
1816
                                  nat) }
1817
                        { DUP 2 ;
1818
                          DUP 4 ;
1819
                          GET ;
1820
                          IF_NONE { PUSH nat 0 ; PUSH nat 0 ; PAIR } {} ;
1821
                          DUP 6 ;
1822
                          DUP 3 ;
1823
                          PAIR ;
1824
                          DUP 15 ;
1825
                          SWAP ;
1826
                          EXEC ;
1827
                          DUP 2 ;
1828
                          CDR ;
1829
                          ADD ;
1830
                          DUP 3 ;
1831
                          DIG 2 ;
1832
                          CAR ;
1833
                          ADD ;
1834
                          PAIR ;
1835
                          PUSH int 86400 ;
1836
                          DUP 5 ;
1837
                          ADD ;
1838
                          PUSH nat 1 ;
1839
                          DIG 7 ;
1840
                          ADD ;
1841
                          DIG 4 ;
1842
                          DIG 3 ;
1843
                          SOME ;
1844
                          DIG 5 ;
1845
                          UPDATE ;
1846
                          DIG 3 ;
1847
                          PAIR ;
1848
                          DIG 3 ;
1849
                          DIG 3 ;
1850
                          PAIR ;
1851
                          PAIR ;
1852
                          PAIR ;
1853
                          LEFT (big_map timestamp (pair nat nat)) } } ;
1854
          DUP 8 ;
1855
          DIG 11 ;
1856
          SWAP ;
1857
          EXEC ;
1858
          PUSH int 86400 ;
1859
          DUP 10 ;
1860
          CAR ;
1861
          CAR ;
1862
          CDR ;
1863
          CAR ;
1864
          MUL ;
1865
          DUP 10 ;
1866
          CAR ;
1867
          CAR ;
1868
          CDR ;
1869
          CDR ;
1870
          DIG 2 ;
1871
          SUB ;
1872
          COMPARE ;
1873
          GT ;
1874
          IF
1875
            { PUSH nat 2 ; DUP 9 ; CAR ; CDR ; CAR ; CDR ; MUL }
1876
            { DUP 8 ; CAR ; CDR ; CAR ; CDR } ;
1877
          DUP 9 ;
1878
          CDR ;
1879
          CDR ;
1880
          DUP 10 ;
1881
          CDR ;
1882
          CAR ;
1883
          CDR ;
1884
          DIG 3 ;
1885
          DUP 11 ;
1886
          CDR ;
1887
          CAR ;
1888
          CAR ;
1889
          CAR ;
1890
          PAIR ;
1891
          PAIR ;
1892
          PAIR ;
1893
          DUP 9 ;
1894
          CAR ;
1895
          PAIR ;
1896
          DUP ;
1897
          CDR ;
1898
          DUP 10 ;
1899
          CAR ;
1900
          CDR ;
1901
          CDR ;
1902
          CDR ;
1903
          DUP 11 ;
1904
          CAR ;
1905
          CDR ;
1906
          CDR ;
1907
          CDR ;
1908
          DUP 15 ;
1909
          GET ;
1910
          IF_NONE { EMPTY_MAP timestamp (pair (pair nat nat) timestamp) } {} ;
1911
          DIG 5 ;
1912
          DIG 10 ;
1913
          PAIR ;
1914
          SOME ;
1915
          DIG 6 ;
1916
          UPDATE ;
1917
          SOME ;
1918
          DUP 12 ;
1919
          UPDATE ;
1920
          DUP 3 ;
1921
          CAR ;
1922
          CDR ;
1923
          CDR ;
1924
          CAR ;
1925
          PAIR ;
1926
          DUP 3 ;
1927
          CAR ;
1928
          CDR ;
1929
          CAR ;
1930
          PAIR ;
1931
          DIG 2 ;
1932
          CAR ;
1933
          CAR ;
1934
          PAIR ;
1935
          PAIR ;
1936
          DUP ;
1937
          CDR ;
1938
          CDR ;
1939
          DUP 7 ;
1940
          CDR ;
1941
          CAR ;
1942
          CDR ;
1943
          CDR ;
1944
          DIG 5 ;
1945
          SOME ;
1946
          DIG 10 ;
1947
          UPDATE ;
1948
          DUP 3 ;
1949
          CDR ;
1950
          CAR ;
1951
          CDR ;
1952
          CAR ;
1953
          PAIR ;
1954
          DUP 3 ;
1955
          CDR ;
1956
          CAR ;
1957
          CAR ;
1958
          PAIR ;
1959
          PAIR ;
1960
          SWAP ;
1961
          CAR ;
1962
          PAIR ;
1963
          DUP ;
1964
          CDR ;
1965
          DUP 2 ;
1966
          CAR ;
1967
          CDR ;
1968
          CDR ;
1969
          DUP 4 ;
1970
          DUP 4 ;
1971
          CAR ;
1972
          CDR ;
1973
          CAR ;
1974
          CAR ;
1975
          PAIR ;
1976
          PAIR ;
1977
          DIG 2 ;
1978
          CAR ;
1979
          CAR ;
1980
          PAIR ;
1981
          PAIR ;
1982
          DUP ;
1983
          CDR ;
1984
          DUP 2 ;
1985
          CAR ;
1986
          CDR ;
1987
          DUP 7 ;
1988
          CAR ;
1989
          CDR ;
1990
          CAR ;
1991
          CDR ;
1992
          DIG 4 ;
1993
          COMPARE ;
1994
          GT ;
1995
          IF { DIG 5 ; DROP ; DIG 3 } { DIG 3 ; DROP ; DIG 4 ; CAR ; CAR ; CDR ; CDR } ;
1996
          DUP 4 ;
1997
          CAR ;
1998
          CAR ;
1999
          CDR ;
2000
          CAR ;
2001
          PAIR ;
2002
          DIG 3 ;
2003
          CAR ;
2004
          CAR ;
2005
          CAR ;
2006
          PAIR ;
2007
          PAIR ;
2008
          PAIR ;
2009
          PUSH nat 3650000 ;
2010
          PUSH nat 300 ;
2011
          DUP 3 ;
2012
          CDR ;
2013
          CDR ;
2014
          CAR ;
2015
          CAR ;
2016
          MUL ;
2017
          EDIV ;
2018
          IF_NONE { PUSH string "DIV by 0" ; FAILWITH } {} ;
2019
          CAR ;
2020
          DUP 2 ;
2021
          DIG 3 ;
2022
          PAIR ;
2023
          DIG 4 ;
2024
          SWAP ;
2025
          EXEC ;
2026
          PUSH int 86400 ;
2027
          PUSH int 1 ;
2028
          DUP 3 ;
2029
          CAR ;
2030
          CDR ;
2031
          SUB ;
2032
          ABS ;
2033
          MUL ;
2034
          DUP 2 ;
2035
          CDR ;
2036
          ADD ;
2037
          DIG 2 ;
2038
          SWAP ;
2039
          PAIR ;
2040
          PUSH nat 0 ;
2041
          PUSH nat 0 ;
2042
          PAIR ;
2043
          DIG 3 ;
2044
          CDR ;
2045
          CAR ;
2046
          CAR ;
2047
          CDR ;
2048
          DIG 3 ;
2049
          PAIR ;
2050
          PAIR ;
2051
          PAIR ;
2052
          LEFT nat ;
2053
          LOOP_LEFT { UNPAIR ;
2054
                      UNPAIR ;
2055
                      UNPAIR ;
2056
                      DIG 2 ;
2057
                      UNPAIR ;
2058
                      DIG 4 ;
2059
                      UNPAIR ;
2060
                      DUP 4 ;
2061
                      DUP 6 ;
2062
                      CAR ;
2063
                      CDR ;
2064
                      SUB ;
2065
                      ABS ;
2066
                      DUP 6 ;
2067
                      CAR ;
2068
                      CAR ;
2069
                      PAIR ;
2070
                      DUP 8 ;
2071
                      SWAP ;
2072
                      EXEC ;
2073
                      DUP 7 ;
2074
                      DUP 3 ;
2075
                      GET ;
2076
                      IF_NONE { PUSH nat 0 ; PUSH nat 0 ; PAIR } {} ;
2077
                      PUSH nat 0 ;
2078
                      DUP 2 ;
2079
                      CDR ;
2080
                      COMPARE ;
2081
                      EQ ;
2082
                      IF { DUP 6 ; FAILWITH } {} ;
2083
                      CDR ;
2084
                      DUP 4 ;
2085
                      DIG 2 ;
2086
                      MUL ;
2087
                      EDIV ;
2088
                      IF_NONE { PUSH string "DIV by 0" ; FAILWITH } {} ;
2089
                      CAR ;
2090
                      DIG 3 ;
2091
                      ADD ;
2092
                      PUSH nat 1 ;
2093
                      DIG 4 ;
2094
                      ADD ;
2095
                      PUSH int 86400 ;
2096
                      DUP 4 ;
2097
                      SUB ;
2098
                      DUP 6 ;
2099
                      CDR ;
2100
                      DIG 4 ;
2101
                      COMPARE ;
2102
                      EQ ;
2103
                      IF
2104
                        { SWAP ;
2105
                          DIG 3 ;
2106
                          DIG 4 ;
2107
                          DIG 5 ;
2108
                          DROP 5 ;
2109
                          RIGHT (pair
2110
                                  (pair
2111
                                    (pair (pair (pair nat nat) timestamp)
2112
                                          (big_map timestamp (pair nat nat)))
2113
                                    nat
2114
                                    nat)
2115
                                  timestamp
2116
                                  nat) }
2117
                        { DIG 3 ; SWAP ; PAIR ; SWAP ; DIG 2 ; PAIR ; DIG 3 ; DIG 3 ; PAIR ; PAIR ; PAIR ; LEFT nat } } ;
2118
          SWAP ;
2119
          DROP } ;
2120
  view "getTotalSupplyView" unit nat { CDR ; CDR ; CDR ; CAR ; CAR } ;
2121
  view "getMinDays" unit nat { CDR ; CAR ; CDR ; CAR ; CDR } ;
2122
  view "getMaxDays" unit nat { CDR ; CAR ; CDR ; CAR ; CAR } ;
2123
  view "getStartDate" unit timestamp { CDR ; CDR ; CAR ; CAR ; CAR } ;
2124
  view "getTimelineForDay" timestamp (pair (nat %upStaked) (nat %uptimeStaked))
2125
        { UNPAIR ; SWAP ; CDR ; CAR ; CAR ; CDR ; SWAP ; GET ; IF_NONE { PUSH nat 0 ; PUSH nat 0 ; PAIR } {} } ;
2126
  view "getLockedUp" unit nat
2127
        { CDR ;
2128
          PUSH int 86400 ;
2129
          PUSH int 86400 ;
2130
          DUP 3 ;
2131
          CDR ;
2132
          CAR ;
2133
          CAR ;
2134
          CAR ;
2135
          NOW ;
2136
          SUB ;
2137
          EDIV ;
2138
          IF_NONE { PUSH string "DIV by 0" ; FAILWITH } {} ;
2139
          CAR ;
2140
          MUL ;
2141
          DUP 2 ;
2142
          CDR ;
2143
          CAR ;
2144
          CAR ;
2145
          CAR ;
2146
          ADD ;
2147
          SWAP ;
2148
          CDR ;
2149
          CAR ;
2150
          CAR ;
2151
          CDR ;
2152
          SWAP ;
2153
          GET ;
2154
          IF_NONE { PUSH nat 0 } { CDR } } ;
2155
  view "getLastDoubledDate" unit timestamp { CDR ; CAR ; CAR ; CDR ; CDR } ;
2156
  view "getUpForOneTez" unit nat { CDR ; CAR ; CAR ; CAR ; CDR } }