BCD

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