BCD

Tezos Contract Explorer
Search Networks Deploy
  • Home
  • /
  • Mainnet
  • /
  • Etherlink Sequencer Committee Governance
operations (1)Storage Code Interact Tokens Metadata Fork Views Statistics Details
Latest
​x
849
1597
 
1
{ parameter (or (address %trigger_committee_upgrade)
2
                (or (string %vote)
3
                    (or
4
                      (pair %upvote_proposal (string %sequencer_pk)
5
                                             (bytes %pool_address))
6
                      (pair %new_proposal (string %sequencer_pk) (bytes %pool_address))))) ;
7
  storage (pair
8
            (pair %config (nat %started_at_level)
9
                          (pair (nat %period_length)
10
                                (pair (nat %adoption_period_sec)
11
                                      (pair (nat %upvoting_limit)
12
                                            (pair (nat %scale)
13
                                                  (pair (nat %proposal_quorum)
14
                                                        (pair (nat %promotion_quorum)
15
                                                              (nat %promotion_supermajority))))))))
16
            (pair
17
              (option %voting_context (pair (nat %period_index)
18
                                           (or %period
19
                                             (pair %proposal
20
                                               (big_map %upvoters_upvotes_count key_hash
21
                                                                                nat)
22
                                               (pair
23
                                                 (big_map %upvoters_proposals
24
                                                   (pair key_hash
25
                                                         (pair (string %sequencer_pk)
26
                                                               (bytes %pool_address)))
27
                                                   unit)
28
                                                 (pair
29
                                                   (big_map %proposals
30
                                                     (pair (string %sequencer_pk)
31
                                                           (bytes %pool_address))
32
                                                     (pair (key_hash %proposer)
33
                                                           (nat %upvotes_voting_power)))
34
                                                   (pair
35
                                                     (option %max_upvotes_voting_power nat)
36
                                                     (pair
37
                                                       (option %winner_candidate (pair
38
                                                                                  (string %sequencer_pk)
39
                                                                                  (bytes %pool_address)))
40
                                                       (nat %total_voting_power))))))
41
                                             (pair %promotion
42
                                               (big_map %voters key_hash string)
43
                                               (pair (nat %yea_voting_power)
44
                                                     (pair (nat %nay_voting_power)
45
                                                           (pair
46
                                                             (nat %pass_voting_power)
47
                                                             (pair
48
                                                               (nat %total_voting_power)
49
                                                               (pair %winner_candidate
50
                                                                 (string %sequencer_pk)
51
                                                                 (bytes %pool_address))))))))))
52
              (pair
53
                (option %last_winner (pair
54
                                      (pair %payload (string %sequencer_pk)
55
                                                     (bytes %pool_address))
56
                                      (big_map %trigger_history address unit)))
57
                (big_map %metadata string bytes)))) ;
58
  code { PUSH string "NOT_PROPOSAL_PERIOD" ;
59
         LAMBDA
60
           address
61
           key_hash
62
           { DUP ;
63
             PACK ;
64
             PUSH bytes 0x00 ;
65
             DUP 2 ;
66
             PUSH nat 1 ;
67
             PUSH nat 6 ;
68
             SLICE ;
69
             IF_NONE { PUSH string "SLICE" ; FAILWITH } {} ;
70
             COMPARE ;
71
             EQ ;
72
             IF {} { PUSH string "NOT_IMPLICIT_ADDRESS" ; FAILWITH } ;
73
             PUSH bytes 0x ;
74
             NIL bytes ;
75
             DUP 3 ;
76
             PUSH nat 21 ;
77
             PUSH nat 7 ;
78
             SLICE ;
79
             IF_NONE { PUSH string "SLICE" ; FAILWITH } {} ;
80
             CONS ;
81
             PUSH bytes 0x00000015 ;
82
             CONS ;
83
             DIG 2 ;
84
             PUSH nat 2 ;
85
             PUSH nat 0 ;
86
             SLICE ;
87
             IF_NONE { PUSH string "SLICE" ; FAILWITH } {} ;
88
             CONS ;
89
             NIL bytes ;
90
             SWAP ;
91
             ITER { CONS } ;
92
             ITER { CONCAT } ;
93
             UNPACK key_hash ;
94
             PUSH string "FAILED_TO_CAST_ADDRESS_TO_KEY_HASH" ;
95
             SWAP ;
96
             IF_NONE { FAILWITH } { SWAP ; DROP } ;
97
             PUSH string "KEY_HASH_NOT_EQUAL_TO_SOURCE_ADDRESS" ;
98
             DIG 2 ;
99
             DUP 3 ;
100
             IMPLICIT_ACCOUNT ;
101
             ADDRESS ;
102
             COMPARE ;
103
             EQ ;
104
             IF { DROP } { FAILWITH } } ;
105
         LAMBDA
106
           (pair nat nat)
107
           bytes
108
           { UNPAIR ;
109
             PUSH nat 56 ;
110
             DUP 2 ;
111
             COMPARE ;
112
             LT ;
113
             IF
114
               { ADD ; BYTES }
115
               { BYTES ;
116
                 DUP ;
117
                 SIZE ;
118
                 PUSH nat 9 ;
119
                 DUP 2 ;
120
                 COMPARE ;
121
                 LT ;
122
                 IF {} { PUSH string "INPUT_TOO_LONG_FOR_RLP" ; FAILWITH } ;
123
                 PUSH nat 55 ;
124
                 DIG 3 ;
125
                 DIG 2 ;
126
                 ADD ;
127
                 ADD ;
128
                 BYTES ;
129
                 CONCAT } } ;
130
         LAMBDA
131
           unit
132
           unit
133
           { DROP ;
134
             PUSH string "TEZ_IN_TRANSACTION_DISALLOWED" ;
135
             PUSH mutez 0 ;
136
             AMOUNT ;
137
             COMPARE ;
138
             EQ ;
139
             IF { DROP ; UNIT } { FAILWITH } } ;
140
         LAMBDA
141
           nat
142
           unit
143
           { PUSH nat 0 ;
144
             SWAP ;
145
             COMPARE ;
146
             GT ;
147
             IF { UNIT } { PUSH string "NO_VOTING_POWER" ; FAILWITH } } ;
148
         LAMBDA
149
           (pair nat
150
                 (pair nat (pair nat (pair nat (pair nat (pair nat (pair nat nat)))))))
151
           nat
152
           { DUP ;
153
             CAR ;
154
             LEVEL ;
155
             SUB ;
156
             ISNAT ;
157
             IF_NONE
158
               { DROP ; PUSH string "CURRENT_LEVEL_LESS_THAN_START_LEVEL" ; FAILWITH }
159
               { SWAP ; GET 3 ; SWAP ; EDIV ; IF_NONE { PUSH string "DIV by 0" ; FAILWITH } {} ; CAR } } ;
160
         DIG 6 ;
161
         UNPAIR ;
162
         IF_LEFT
163
           { DIG 3 ;
164
             DIG 6 ;
165
             DIG 7 ;
166
             DROP 3 ;
167
             UNIT ;
168
             DIG 4 ;
169
             SWAP ;
170
             EXEC ;
171
             DROP ;
172
             DUP 2 ;
173
             CAR ;
174
             DIG 3 ;
175
             SWAP ;
176
             EXEC ;
177
             DUP 3 ;
178
             GET 3 ;
179
             IF_NONE
180
               { NONE (pair nat (pair (or unit unit) (option (pair string bytes)))) ;
181
                 TOTAL_VOTING_POWER ;
182
                 NONE (pair string bytes) ;
183
                 NONE nat ;
184
                 EMPTY_BIG_MAP (pair string bytes) (pair key_hash nat) ;
185
                 EMPTY_BIG_MAP (pair key_hash (pair string bytes)) unit ;
186
                 EMPTY_BIG_MAP key_hash nat ;
187
                 PAIR 6 ;
188
                 LEFT (pair (big_map key_hash string)
189
                            (pair nat
190
                                  (pair nat (pair nat (pair nat (pair string bytes)))))) ;
191
                 DIG 2 ;
192
                 PAIR }
193
               { DUP ;
194
                 CAR ;
195
                 DUP 3 ;
196
                 COMPARE ;
197
                 EQ ;
198
                 IF
199
                   { SWAP ;
200
                     DROP ;
201
                     NONE (pair nat (pair (or unit unit) (option (pair string bytes)))) ;
202
                     SWAP }
203
                   { DUP 4 ;
204
                     CAR ;
205
                     DUP 2 ;
206
                     CDR ;
207
                     IF_LEFT
208
                       { DUP 2 ;
209
                         GET 11 ;
210
                         DUP 2 ;
211
                         GET 10 ;
212
                         MUL ;
213
                         DIG 2 ;
214
                         GET 9 ;
215
                         DUP 3 ;
216
                         GET 7 ;
217
                         IF_NONE { PUSH nat 0 } {} ;
218
                         MUL ;
219
                         COMPARE ;
220
                         GE ;
221
                         IF { DUP ; GET 9 } { NONE (pair string bytes) } ;
222
                         IF_NONE
223
                           { GET 7 ;
224
                             IF_NONE { PUSH bool False } { DROP ; PUSH bool True } ;
225
                             IF
226
                               { NONE (pair string bytes) ;
227
                                 UNIT ;
228
                                 LEFT unit ;
229
                                 DIG 2 ;
230
                                 CAR ;
231
                                 DUG 2 ;
232
                                 PUSH nat 1 ;
233
                                 DIG 3 ;
234
                                 ADD ;
235
                                 PAIR 3 ;
236
                                 SOME }
237
                               { DROP ;
238
                                 NONE (pair nat
239
                                            (pair (or unit unit)
240
                                                  (option (pair string bytes)))) } ;
241
                             TOTAL_VOTING_POWER ;
242
                             NONE (pair string bytes) ;
243
                             NONE nat ;
244
                             EMPTY_BIG_MAP (pair string bytes) (pair key_hash nat) ;
245
                             EMPTY_BIG_MAP (pair key_hash (pair string bytes)) unit ;
246
                             EMPTY_BIG_MAP key_hash nat ;
247
                             PAIR 6 ;
248
                             LEFT (pair (big_map key_hash string)
249
                                        (pair nat
250
                                              (pair nat
251
                                                    (pair nat
252
                                                          (pair nat (pair string bytes)))))) }
253
                           { SWAP ;
254
                             DROP ;
255
                             PUSH nat 1 ;
256
                             DIG 2 ;
257
                             CAR ;
258
                             ADD ;
259
                             DUP ;
260
                             DUP 4 ;
261
                             COMPARE ;
262
                             EQ ;
263
                             IF
264
                               { DROP ;
265
                                 NONE (pair nat
266
                                            (pair (or unit unit)
267
                                                  (option (pair string bytes)))) ;
268
                                 SWAP ;
269
                                 TOTAL_VOTING_POWER ;
270
                                 PUSH nat 0 ;
271
                                 PUSH nat 0 ;
272
                                 PUSH nat 0 ;
273
                                 EMPTY_BIG_MAP key_hash string ;
274
                                 PAIR 6 ;
275
                                 RIGHT (pair (big_map key_hash nat)
276
                                             (pair
277
                                               (big_map
278
                                                 (pair key_hash (pair string bytes))
279
                                                 unit)
280
                                               (pair
281
                                                 (big_map (pair string bytes)
282
                                                          (pair key_hash nat))
283
                                                 (pair (option nat)
284
                                                       (pair
285
                                                         (option (pair string bytes))
286
                                                         nat))))) }
287
                               { SWAP ;
288
                                 DROP ;
289
                                 NONE (pair string bytes) ;
290
                                 UNIT ;
291
                                 RIGHT unit ;
292
                                 PUSH nat 1 ;
293
                                 DIG 3 ;
294
                                 ADD ;
295
                                 PAIR 3 ;
296
                                 SOME ;
297
                                 TOTAL_VOTING_POWER ;
298
                                 NONE (pair string bytes) ;
299
                                 NONE nat ;
300
                                 EMPTY_BIG_MAP (pair string bytes) (pair key_hash nat) ;
301
                                 EMPTY_BIG_MAP (pair key_hash (pair string bytes)) unit ;
302
                                 EMPTY_BIG_MAP key_hash nat ;
303
                                 PAIR 6 ;
304
                                 LEFT (pair (big_map key_hash string)
305
                                            (pair nat
306
                                                  (pair nat
307
                                                        (pair nat
308
                                                              (pair nat
309
                                                                    (pair string bytes)))))) } } }
310
                       { UNPAIR 6 ;
311
                         DROP ;
312
                         DIG 3 ;
313
                         DUP 6 ;
314
                         GET 13 ;
315
                         MUL ;
316
                         DUP 6 ;
317
                         GET 9 ;
318
                         DIG 4 ;
319
                         DUP 5 ;
320
                         DUP 5 ;
321
                         ADD ;
322
                         ADD ;
323
                         MUL ;
324
                         COMPARE ;
325
                         GE ;
326
                         DIG 2 ;
327
                         DUP 3 ;
328
                         ADD ;
329
                         DUP ;
330
                         DUP 6 ;
331
                         GET 14 ;
332
                         MUL ;
333
                         DIG 5 ;
334
                         GET 9 ;
335
                         DIG 4 ;
336
                         MUL ;
337
                         COMPARE ;
338
                         GE ;
339
                         PUSH nat 0 ;
340
                         DIG 2 ;
341
                         COMPARE ;
342
                         GT ;
343
                         AND ;
344
                         AND ;
345
                         IF { SOME } { DROP ; NONE (pair string bytes) } ;
346
                         UNIT ;
347
                         RIGHT unit ;
348
                         DIG 2 ;
349
                         CAR ;
350
                         DUG 2 ;
351
                         PUSH nat 1 ;
352
                         DIG 3 ;
353
                         ADD ;
354
                         PAIR 3 ;
355
                         SOME ;
356
                         TOTAL_VOTING_POWER ;
357
                         NONE (pair string bytes) ;
358
                         NONE nat ;
359
                         EMPTY_BIG_MAP (pair string bytes) (pair key_hash nat) ;
360
                         EMPTY_BIG_MAP (pair key_hash (pair string bytes)) unit ;
361
                         EMPTY_BIG_MAP key_hash nat ;
362
                         PAIR 6 ;
363
                         LEFT (pair (big_map key_hash string)
364
                                    (pair nat
365
                                          (pair nat
366
                                                (pair nat (pair nat (pair string bytes)))))) } ;
367
                     DIG 2 ;
368
                     PAIR } } ;
369
             DUP 2 ;
370
             DIG 2 ;
371
             IF_NONE
372
               { DUP 4 ; GET 5 }
373
               { GET 4 ;
374
                 IF_NONE
375
                   { DUP 4 ; GET 5 }
376
                   { EMPTY_BIG_MAP address unit ; SWAP ; PAIR ; SOME } } ;
377
             DIG 2 ;
378
             SWAP ;
379
             IF_NONE { PUSH string "LAST_WINNER_NOT_FOUND" ; FAILWITH } {} ;
380
             DUP ;
381
             CDR ;
382
             DUP 5 ;
383
             MEM ;
384
             NOT ;
385
             IF {} { PUSH string "UPGRADE_FOR_ADDRESS_ALREADY_TRIGGERED" ; FAILWITH } ;
386
             DUP 4 ;
387
             CONTRACT (or
388
                        (or (pair %d bytes (ticket (pair nat (option bytes))))
389
                            (bytes %a))
390
                        (bytes %u)) ;
391
             IF_NONE { PUSH string "ROLLUP_ENTRYPOINT_NOT_FOUND" ; FAILWITH } {} ;
392
             DUP 2 ;
393
             CAR ;
394
             DUP 7 ;
395
             CAR ;
396
             GET 5 ;
397
             INT ;
398
             NOW ;
399
             ADD ;
400
             DUP 2 ;
401
             CAR ;
402
             PACK ;
403
             DUP ;
404
             PUSH nat 4 ;
405
             PUSH nat 2 ;
406
             SLICE ;
407
             IF_NONE { PUSH string "SLICE" ; FAILWITH } {} ;
408
             NAT ;
409
             PUSH timestamp 0 ;
410
             DIG 3 ;
411
             SUB ;
412
             ISNAT ;
413
             PUSH string "NEGATIVE_TIMESTAMP" ;
414
             SWAP ;
415
             IF_NONE { FAILWITH } { SWAP ; DROP } ;
416
             BYTES ;
417
             PUSH bytes 0x ;
418
             PUSH int 1 ;
419
             PUSH int 1 ;
420
             DUP 4 ;
421
             SIZE ;
422
             SUB ;
423
             PUSH int 0 ;
424
             DUP 2 ;
425
             DUP 2 ;
426
             COMPARE ;
427
             LE ;
428
             LOOP { DUP ;
429
                    DUG 3 ;
430
                    DIP 3
431
                         { ISNAT ;
432
                           PUSH string "INDEX_NOT_NAT" ;
433
                           SWAP ;
434
                           IF_NONE { FAILWITH } { SWAP ; DROP } ;
435
                           SWAP ;
436
                           DUP 3 ;
437
                           PUSH nat 1 ;
438
                           DIG 3 ;
439
                           SLICE ;
440
                           IF_NONE { PUSH string "SLICE" ; FAILWITH } {} ;
441
                           CONCAT } ;
442
                    DUP 3 ;
443
                    ADD ;
444
                    DUP 2 ;
445
                    DUP 2 ;
446
                    COMPARE ;
447
                    LE } ;
448
             DROP 3 ;
449
             SWAP ;
450
             DROP ;
451
             DUP ;
452
             SIZE ;
453
             INT ;
454
             PUSH int 1 ;
455
             PUSH int 1 ;
456
             PUSH nat 8 ;
457
             SUB ;
458
             DIG 2 ;
459
             DUP 2 ;
460
             DUP 2 ;
461
             COMPARE ;
462
             LE ;
463
             LOOP { DUP ;
464
                    DUG 3 ;
465
                    DIP 3 { DROP ; PUSH bytes 0x00 ; SWAP ; CONCAT } ;
466
                    DUP 3 ;
467
                    ADD ;
468
                    DUP 2 ;
469
                    DUP 2 ;
470
                    COMPARE ;
471
                    LE } ;
472
             DROP 3 ;
473
             NIL bytes ;
474
             SWAP ;
475
             CONS ;
476
             DIG 3 ;
477
             CDR ;
478
             CONS ;
479
             DUG 2 ;
480
             PUSH nat 6 ;
481
             SLICE ;
482
             IF_NONE { PUSH string "SLICE" ; FAILWITH } {} ;
483
             CONS ;
484
             MAP { DUP ;
485
                   SIZE ;
486
                   PUSH bytes 0x80 ;
487
                   DUP 3 ;
488
                   COMPARE ;
489
                   LT ;
490
                   PUSH nat 1 ;
491
                   DUP 3 ;
492
                   COMPARE ;
493
                   EQ ;
494
                   AND ;
495
                   IF
496
                     { DROP ; PUSH bytes 0x }
497
                     { PUSH nat 128 ; SWAP ; PAIR ; DUP 9 ; SWAP ; EXEC } ;
498
                   CONCAT } ;
499
             PUSH bytes 0x ;
500
             SWAP ;
501
             NIL bytes ;
502
             SWAP ;
503
             ITER { CONS } ;
504
             ITER { CONCAT } ;
505
             PUSH nat 192 ;
506
             DUP 2 ;
507
             SIZE ;
508
             PAIR ;
509
             DIG 8 ;
510
             SWAP ;
511
             EXEC ;
512
             CONCAT ;
513
             RIGHT (or (pair bytes (ticket (pair nat (option bytes)))) bytes) ;
514
             SWAP ;
515
             PUSH mutez 0 ;
516
             DIG 2 ;
517
             TRANSFER_TOKENS ;
518
             DIG 3 ;
519
             IF_NONE
520
               { NIL operation }
521
               { NIL operation ;
522
                 SWAP ;
523
                 EMIT %voting_finished (pair (nat %finished_at_period_index)
524
                                             (pair
525
                                               (or %finished_at_period_type
526
                                                 (unit %proposal)
527
                                                 (unit %promotion))
528
                                               (option %winner_proposal_payload (pair
529
                                                                                 (string %sequencer_pk)
530
                                                                                 (bytes %pool_address))))) ;
531
                 CONS } ;
532
             DIG 5 ;
533
             DIG 4 ;
534
             SOME ;
535
             UPDATE 3 ;
536
             DUP 4 ;
537
             DIG 4 ;
538
             CDR ;
539
             UNIT ;
540
             SOME ;
541
             DIG 6 ;
542
             UPDATE ;
543
             UPDATE 2 ;
544
             SOME ;
545
             UPDATE 5 ;
546
             SWAP ;
547
             DIG 2 ;
548
             CONS }
549
           { DIG 5 ;
550
             DROP ;
551
             IF_LEFT
552
               { DIG 6 ;
553
                 DROP ;
554
                 DUP 2 ;
555
                 CAR ;
556
                 DIG 3 ;
557
                 SWAP ;
558
                 EXEC ;
559
                 DUP 3 ;
560
                 GET 3 ;
561
                 IF_NONE
562
                   { NONE (pair nat (pair (or unit unit) (option (pair string bytes)))) ;
563
                     TOTAL_VOTING_POWER ;
564
                     NONE (pair string bytes) ;
565
                     NONE nat ;
566
                     EMPTY_BIG_MAP (pair string bytes) (pair key_hash nat) ;
567
                     EMPTY_BIG_MAP (pair key_hash (pair string bytes)) unit ;
568
                     EMPTY_BIG_MAP key_hash nat ;
569
                     PAIR 6 ;
570
                     LEFT (pair (big_map key_hash string)
571
                                (pair nat
572
                                      (pair nat
573
                                            (pair nat (pair nat (pair string bytes)))))) ;
574
                     DIG 2 ;
575
                     PAIR }
576
                   { DUP ;
577
                     CAR ;
578
                     DUP 3 ;
579
                     COMPARE ;
580
                     EQ ;
581
                     IF
582
                       { SWAP ;
583
                         DROP ;
584
                         NONE (pair nat
585
                                    (pair (or unit unit) (option (pair string bytes)))) ;
586
                         SWAP }
587
                       { DUP 4 ;
588
                         CAR ;
589
                         DUP 2 ;
590
                         CDR ;
591
                         IF_LEFT
592
                           { DUP 2 ;
593
                             GET 11 ;
594
                             DUP 2 ;
595
                             GET 10 ;
596
                             MUL ;
597
                             DIG 2 ;
598
                             GET 9 ;
599
                             DUP 3 ;
600
                             GET 7 ;
601
                             IF_NONE { PUSH nat 0 } {} ;
602
                             MUL ;
603
                             COMPARE ;
604
                             GE ;
605
                             IF { DUP ; GET 9 } { NONE (pair string bytes) } ;
606
                             IF_NONE
607
                               { GET 7 ;
608
                                 IF_NONE { PUSH bool False } { DROP ; PUSH bool True } ;
609
                                 IF
610
                                   { NONE (pair string bytes) ;
611
                                     UNIT ;
612
                                     LEFT unit ;
613
                                     DIG 2 ;
614
                                     CAR ;
615
                                     DUG 2 ;
616
                                     PUSH nat 1 ;
617
                                     DIG 3 ;
618
                                     ADD ;
619
                                     PAIR 3 ;
620
                                     SOME }
621
                                   { DROP ;
622
                                     NONE (pair nat
623
                                                (pair (or unit unit)
624
                                                      (option (pair string bytes)))) } ;
625
                                 TOTAL_VOTING_POWER ;
626
                                 NONE (pair string bytes) ;
627
                                 NONE nat ;
628
                                 EMPTY_BIG_MAP (pair string bytes) (pair key_hash nat) ;
629
                                 EMPTY_BIG_MAP (pair key_hash (pair string bytes)) unit ;
630
                                 EMPTY_BIG_MAP key_hash nat ;
631
                                 PAIR 6 ;
632
                                 LEFT (pair (big_map key_hash string)
633
                                            (pair nat
634
                                                  (pair nat
635
                                                        (pair nat
636
                                                              (pair nat
637
                                                                    (pair string bytes)))))) }
638
                               { SWAP ;
639
                                 DROP ;
640
                                 PUSH nat 1 ;
641
                                 DIG 2 ;
642
                                 CAR ;
643
                                 ADD ;
644
                                 DUP ;
645
                                 DUP 4 ;
646
                                 COMPARE ;
647
                                 EQ ;
648
                                 IF
649
                                   { DROP ;
650
                                     NONE (pair nat
651
                                                (pair (or unit unit)
652
                                                      (option (pair string bytes)))) ;
653
                                     SWAP ;
654
                                     TOTAL_VOTING_POWER ;
655
                                     PUSH nat 0 ;
656
                                     PUSH nat 0 ;
657
                                     PUSH nat 0 ;
658
                                     EMPTY_BIG_MAP key_hash string ;
659
                                     PAIR 6 ;
660
                                     RIGHT (pair (big_map key_hash nat)
661
                                                 (pair
662
                                                   (big_map
663
                                                     (pair key_hash (pair string bytes))
664
                                                     unit)
665
                                                   (pair
666
                                                     (big_map (pair string bytes)
667
                                                              (pair key_hash nat))
668
                                                     (pair (option nat)
669
                                                           (pair
670
                                                             (option (pair string bytes))
671
                                                             nat))))) }
672
                                   { SWAP ;
673
                                     DROP ;
674
                                     NONE (pair string bytes) ;
675
                                     UNIT ;
676
                                     RIGHT unit ;
677
                                     PUSH nat 1 ;
678
                                     DIG 3 ;
679
                                     ADD ;
680
                                     PAIR 3 ;
681
                                     SOME ;
682
                                     TOTAL_VOTING_POWER ;
683
                                     NONE (pair string bytes) ;
684
                                     NONE nat ;
685
                                     EMPTY_BIG_MAP (pair string bytes)
686
                                                    (pair key_hash nat) ;
687
                                     EMPTY_BIG_MAP (pair key_hash (pair string bytes))
688
                                                    unit ;
689
                                     EMPTY_BIG_MAP key_hash nat ;
690
                                     PAIR 6 ;
691
                                     LEFT (pair (big_map key_hash string)
692
                                                (pair nat
693
                                                      (pair nat
694
                                                            (pair nat
695
                                                                  (pair nat
696
                                                                        (pair string
697
                                                                              bytes)))))) } } }
698
                           { UNPAIR 6 ;
699
                             DROP ;
700
                             DIG 3 ;
701
                             DUP 6 ;
702
                             GET 13 ;
703
                             MUL ;
704
                             DUP 6 ;
705
                             GET 9 ;
706
                             DIG 4 ;
707
                             DUP 5 ;
708
                             DUP 5 ;
709
                             ADD ;
710
                             ADD ;
711
                             MUL ;
712
                             COMPARE ;
713
                             GE ;
714
                             DIG 2 ;
715
                             DUP 3 ;
716
                             ADD ;
717
                             DUP ;
718
                             DUP 6 ;
719
                             GET 14 ;
720
                             MUL ;
721
                             DIG 5 ;
722
                             GET 9 ;
723
                             DIG 4 ;
724
                             MUL ;
725
                             COMPARE ;
726
                             GE ;
727
                             PUSH nat 0 ;
728
                             DIG 2 ;
729
                             COMPARE ;
730
                             GT ;
731
                             AND ;
732
                             AND ;
733
                             IF { SOME } { DROP ; NONE (pair string bytes) } ;
734
                             UNIT ;
735
                             RIGHT unit ;
736
                             DIG 2 ;
737
                             CAR ;
738
                             DUG 2 ;
739
                             PUSH nat 1 ;
740
                             DIG 3 ;
741
                             ADD ;
742
                             PAIR 3 ;
743
                             SOME ;
744
                             TOTAL_VOTING_POWER ;
745
                             NONE (pair string bytes) ;
746
                             NONE nat ;
747
                             EMPTY_BIG_MAP (pair string bytes) (pair key_hash nat) ;
748
                             EMPTY_BIG_MAP (pair key_hash (pair string bytes)) unit ;
749
                             EMPTY_BIG_MAP key_hash nat ;
750
                             PAIR 6 ;
751
                             LEFT (pair (big_map key_hash string)
752
                                        (pair nat
753
                                              (pair nat
754
                                                    (pair nat
755
                                                          (pair nat (pair string bytes)))))) } ;
756
                         DIG 2 ;
757
                         PAIR } } ;
758
                 SWAP ;
759
                 DROP ;
760
                 SENDER ;
761
                 DIG 6 ;
762
                 SWAP ;
763
                 EXEC ;
764
                 DUP ;
765
                 VOTING_POWER ;
766
                 UNIT ;
767
                 DIG 7 ;
768
                 SWAP ;
769
                 EXEC ;
770
                 DROP ;
771
                 DUP ;
772
                 DIG 6 ;
773
                 SWAP ;
774
                 EXEC ;
775
                 DROP ;
776
                 DUP 3 ;
777
                 CDR ;
778
                 IF_LEFT { DROP ; PUSH string "NOT_PROMOTION_PERIOD" ; FAILWITH } {} ;
779
                 DUP ;
780
                 CAR ;
781
                 DUP 4 ;
782
                 MEM ;
783
                 NOT ;
784
                 IF {} { PUSH string "PROMOTION_ALREADY_VOTED" ; FAILWITH } ;
785
                 PUSH string "yea" ;
786
                 DUP 6 ;
787
                 COMPARE ;
788
                 EQ ;
789
                 IF
790
                   { DUP ; DIG 2 ; DUP 3 ; GET 3 ; ADD ; UPDATE 3 }
791
                   { PUSH string "nay" ;
792
                     DUP 6 ;
793
                     COMPARE ;
794
                     EQ ;
795
                     IF
796
                       { DUP ; DIG 2 ; DUP 3 ; GET 5 ; ADD ; UPDATE 5 }
797
                       { PUSH string "pass" ;
798
                         DUP 6 ;
799
                         COMPARE ;
800
                         EQ ;
801
                         IF
802
                           { DUP ; DIG 2 ; DUP 3 ; GET 7 ; ADD ; UPDATE 7 }
803
                           { SWAP ; DROP ; PUSH string "INCORRECT_VOTE_VALUE" ; FAILWITH } } } ;
804
                 SWAP ;
805
                 CAR ;
806
                 DIG 4 ;
807
                 SOME ;
808
                 DIG 3 ;
809
                 UPDATE ;
810
                 UPDATE 1 ;
811
                 RIGHT (pair (big_map key_hash nat)
812
                             (pair (big_map (pair key_hash (pair string bytes)) unit)
813
                                   (pair
814
                                     (big_map (pair string bytes) (pair key_hash nat))
815
                                     (pair (option nat)
816
                                           (pair (option (pair string bytes)) nat))))) ;
817
                 UPDATE 2 ;
818
                 SOME ;
819
                 UPDATE 3 ;
820
                 NIL operation }
821
               { IF_LEFT
822
                   { DUP 2 ;
823
                     CAR ;
824
                     DIG 3 ;
825
                     SWAP ;
826
                     EXEC ;
827
                     DUP 3 ;
828
                     GET 3 ;
829
                     IF_NONE
830
                       { NONE (pair nat
831
                                    (pair (or unit unit) (option (pair string bytes)))) ;
832
                         TOTAL_VOTING_POWER ;
833
                         NONE (pair string bytes) ;
834
                         NONE nat ;
835
                         EMPTY_BIG_MAP (pair string bytes) (pair key_hash nat) ;
836
                         EMPTY_BIG_MAP (pair key_hash (pair string bytes)) unit ;
837
                         EMPTY_BIG_MAP key_hash nat ;
838
                         PAIR 6 ;
839
                         LEFT (pair (big_map key_hash string)
840
                                    (pair nat
841
                                          (pair nat
842
                                                (pair nat (pair nat (pair string bytes)))))) ;
843
                         DIG 2 ;
844
                         PAIR }
845
                       { DUP ;
846
                         CAR ;
847
                         DUP 3 ;
848
                         COMPARE ;
849
                         EQ ;
850
                         IF
851
                           { SWAP ;
852
                             DROP ;
853
                             NONE (pair nat
854
                                        (pair (or unit unit)
855
                                              (option (pair string bytes)))) ;
856
                             SWAP }
857
                           { DUP 4 ;
858
                             CAR ;
859
                             DUP 2 ;
860
                             CDR ;
861
                             IF_LEFT
862
                               { DUP 2 ;
863
                                 GET 11 ;
864
                                 DUP 2 ;
865
                                 GET 10 ;
866
                                 MUL ;
867
                                 DIG 2 ;
868
                                 GET 9 ;
869
                                 DUP 3 ;
870
                                 GET 7 ;
871
                                 IF_NONE { PUSH nat 0 } {} ;
872
                                 MUL ;
873
                                 COMPARE ;
874
                                 GE ;
875
                                 IF { DUP ; GET 9 } { NONE (pair string bytes) } ;
876
                                 IF_NONE
877
                                   { GET 7 ;
878
                                     IF_NONE
879
                                       { PUSH bool False }
880
                                       { DROP ; PUSH bool True } ;
881
                                     IF
882
                                       { NONE (pair string bytes) ;
883
                                         UNIT ;
884
                                         LEFT unit ;
885
                                         DIG 2 ;
886
                                         CAR ;
887
                                         DUG 2 ;
888
                                         PUSH nat 1 ;
889
                                         DIG 3 ;
890
                                         ADD ;
891
                                         PAIR 3 ;
892
                                         SOME }
893
                                       { DROP ;
894
                                         NONE (pair nat
895
                                                    (pair (or unit unit)
896
                                                          (option (pair string bytes)))) } ;
897
                                     TOTAL_VOTING_POWER ;
898
                                     NONE (pair string bytes) ;
899
                                     NONE nat ;
900
                                     EMPTY_BIG_MAP (pair string bytes)
901
                                                    (pair key_hash nat) ;
902
                                     EMPTY_BIG_MAP (pair key_hash (pair string bytes))
903
                                                    unit ;
904
                                     EMPTY_BIG_MAP key_hash nat ;
905
                                     PAIR 6 ;
906
                                     LEFT (pair (big_map key_hash string)
907
                                                (pair nat
908
                                                      (pair nat
909
                                                            (pair nat
910
                                                                  (pair nat
911
                                                                        (pair string
912
                                                                              bytes)))))) }
913
                                   { SWAP ;
914
                                     DROP ;
915
                                     PUSH nat 1 ;
916
                                     DIG 2 ;
917
                                     CAR ;
918
                                     ADD ;
919
                                     DUP ;
920
                                     DUP 4 ;
921
                                     COMPARE ;
922
                                     EQ ;
923
                                     IF
924
                                       { DROP ;
925
                                         NONE (pair nat
926
                                                    (pair (or unit unit)
927
                                                          (option (pair string bytes)))) ;
928
                                         SWAP ;
929
                                         TOTAL_VOTING_POWER ;
930
                                         PUSH nat 0 ;
931
                                         PUSH nat 0 ;
932
                                         PUSH nat 0 ;
933
                                         EMPTY_BIG_MAP key_hash string ;
934
                                         PAIR 6 ;
935
                                         RIGHT (pair (big_map key_hash nat)
936
                                                     (pair
937
                                                       (big_map
938
                                                         (pair key_hash
939
                                                               (pair string bytes))
940
                                                         unit)
941
                                                       (pair
942
                                                         (big_map (pair string bytes)
943
                                                                  (pair key_hash nat))
944
                                                         (pair (option nat)
945
                                                               (pair
946
                                                                 (option (pair string
947
                                                                              bytes))
948
                                                                 nat))))) }
949
                                       { SWAP ;
950
                                         DROP ;
951
                                         NONE (pair string bytes) ;
952
                                         UNIT ;
953
                                         RIGHT unit ;
954
                                         PUSH nat 1 ;
955
                                         DIG 3 ;
956
                                         ADD ;
957
                                         PAIR 3 ;
958
                                         SOME ;
959
                                         TOTAL_VOTING_POWER ;
960
                                         NONE (pair string bytes) ;
961
                                         NONE nat ;
962
                                         EMPTY_BIG_MAP (pair string bytes)
963
                                                        (pair key_hash nat) ;
964
                                         EMPTY_BIG_MAP
965
                                           (pair key_hash (pair string bytes))
966
                                           unit ;
967
                                         EMPTY_BIG_MAP key_hash nat ;
968
                                         PAIR 6 ;
969
                                         LEFT (pair (big_map key_hash string)
970
                                                    (pair nat
971
                                                          (pair nat
972
                                                                (pair nat
973
                                                                      (pair nat
974
                                                                            (pair string
975
                                                                                  bytes)))))) } } }
976
                               { UNPAIR 6 ;
977
                                 DROP ;
978
                                 DIG 3 ;
979
                                 DUP 6 ;
980
                                 GET 13 ;
981
                                 MUL ;
982
                                 DUP 6 ;
983
                                 GET 9 ;
984
                                 DIG 4 ;
985
                                 DUP 5 ;
986
                                 DUP 5 ;
987
                                 ADD ;
988
                                 ADD ;
989
                                 MUL ;
990
                                 COMPARE ;
991
                                 GE ;
992
                                 DIG 2 ;
993
                                 DUP 3 ;
994
                                 ADD ;
995
                                 DUP ;
996
                                 DUP 6 ;
997
                                 GET 14 ;
998
                                 MUL ;
999
                                 DIG 5 ;
1000
                                 GET 9 ;
1001
                                 DIG 4 ;
1002
                                 MUL ;
1003
                                 COMPARE ;
1004
                                 GE ;
1005
                                 PUSH nat 0 ;
1006
                                 DIG 2 ;
1007
                                 COMPARE ;
1008
                                 GT ;
1009
                                 AND ;
1010
                                 AND ;
1011
                                 IF { SOME } { DROP ; NONE (pair string bytes) } ;
1012
                                 UNIT ;
1013
                                 RIGHT unit ;
1014
                                 DIG 2 ;
1015
                                 CAR ;
1016
                                 DUG 2 ;
1017
                                 PUSH nat 1 ;
1018
                                 DIG 3 ;
1019
                                 ADD ;
1020
                                 PAIR 3 ;
1021
                                 SOME ;
1022
                                 TOTAL_VOTING_POWER ;
1023
                                 NONE (pair string bytes) ;
1024
                                 NONE nat ;
1025
                                 EMPTY_BIG_MAP (pair string bytes) (pair key_hash nat) ;
1026
                                 EMPTY_BIG_MAP (pair key_hash (pair string bytes)) unit ;
1027
                                 EMPTY_BIG_MAP key_hash nat ;
1028
                                 PAIR 6 ;
1029
                                 LEFT (pair (big_map key_hash string)
1030
                                            (pair nat
1031
                                                  (pair nat
1032
                                                        (pair nat
1033
                                                              (pair nat
1034
                                                                    (pair string bytes)))))) } ;
1035
                             DIG 2 ;
1036
                             PAIR } } ;
1037
                     DUP 2 ;
1038
                     DIG 2 ;
1039
                     IF_NONE
1040
                       { DUP 4 ; GET 5 }
1041
                       { GET 4 ;
1042
                         IF_NONE
1043
                           { DUP 4 ; GET 5 }
1044
                           { EMPTY_BIG_MAP address unit ; SWAP ; PAIR ; SOME } } ;
1045
                     DIG 2 ;
1046
                     SENDER ;
1047
                     DIG 8 ;
1048
                     SWAP ;
1049
                     EXEC ;
1050
                     DUP ;
1051
                     VOTING_POWER ;
1052
                     UNIT ;
1053
                     DIG 9 ;
1054
                     SWAP ;
1055
                     EXEC ;
1056
                     DROP ;
1057
                     DUP ;
1058
                     DIG 8 ;
1059
                     SWAP ;
1060
                     EXEC ;
1061
                     DROP ;
1062
                     DUP 3 ;
1063
                     CDR ;
1064
                     IF_LEFT { DIG 8 ; DROP } { DROP ; DIG 7 ; FAILWITH } ;
1065
                     DUP ;
1066
                     CAR ;
1067
                     DUP 9 ;
1068
                     CAR ;
1069
                     GET 7 ;
1070
                     DUP 2 ;
1071
                     DUP 6 ;
1072
                     GET ;
1073
                     IF_NONE { PUSH nat 0 } {} ;
1074
                     COMPARE ;
1075
                     LT ;
1076
                     IF {} { PUSH string "UPVOTING_LIMIT_EXCEEDED" ; FAILWITH } ;
1077
                     DUP 2 ;
1078
                     GET 5 ;
1079
                     DUP 9 ;
1080
                     GET ;
1081
                     IF_NONE { PUSH string "PROPOSAL_NOT_FOUND" ; FAILWITH } {} ;
1082
                     DUP 3 ;
1083
                     GET 3 ;
1084
                     DUP ;
1085
                     DUP 11 ;
1086
                     DUP 8 ;
1087
                     PAIR ;
1088
                     MEM ;
1089
                     NOT ;
1090
                     IF {} { PUSH string "PROPOSAL_ALREADY_UPVOTED" ; FAILWITH } ;
1091
                     DIG 4 ;
1092
                     DUP 3 ;
1093
                     CDR ;
1094
                     ADD ;
1095
                     DUP 5 ;
1096
                     DUP 5 ;
1097
                     DUP 8 ;
1098
                     GET ;
1099
                     IF_NONE
1100
                       { DIG 4 ; PUSH nat 1 ; SOME ; DUP 8 ; UPDATE }
1101
                       { DIG 5 ; PUSH nat 1 ; DIG 2 ; ADD ; SOME ; DUP 8 ; UPDATE } ;
1102
                     UPDATE 1 ;
1103
                     DIG 2 ;
1104
                     UNIT ;
1105
                     SOME ;
1106
                     DUP 11 ;
1107
                     DIG 7 ;
1108
                     PAIR ;
1109
                     UPDATE ;
1110
                     UPDATE 3 ;
1111
                     DIG 3 ;
1112
                     GET 5 ;
1113
                     DIG 3 ;
1114
                     DUP 4 ;
1115
                     UPDATE 2 ;
1116
                     SOME ;
1117
                     DUP 8 ;
1118
                     UPDATE ;
1119
                     UPDATE 5 ;
1120
                     DUP ;
1121
                     GET 7 ;
1122
                     IF_NONE
1123
                       { SWAP ; SOME ; UPDATE 7 ; DIG 4 ; SOME ; UPDATE 9 }
1124
                       { DUP ;
1125
                         DUP 4 ;
1126
                         COMPARE ;
1127
                         GT ;
1128
                         IF
1129
                           { DROP ; SWAP ; SOME ; UPDATE 7 ; DIG 4 ; SOME ; UPDATE 9 }
1130
                           { DIG 6 ;
1131
                             DROP ;
1132
                             DIG 2 ;
1133
                             COMPARE ;
1134
                             EQ ;
1135
                             IF { NONE (pair string bytes) ; UPDATE 9 } {} } } ;
1136
                     LEFT (pair (big_map key_hash string)
1137
                                (pair nat
1138
                                      (pair nat
1139
                                            (pair nat (pair nat (pair string bytes)))))) ;
1140
                     DIG 3 ;
1141
                     IF_NONE
1142
                       { NIL operation }
1143
                       { NIL operation ;
1144
                         SWAP ;
1145
                         EMIT %voting_finished (pair (nat %finished_at_period_index)
1146
                                                     (pair
1147
                                                       (or %finished_at_period_type
1148
                                                         (unit %proposal)
1149
                                                         (unit %promotion))
1150
                                                       (option %winner_proposal_payload (pair
1151
                                                                                         (string %sequencer_pk)
1152
                                                                                         (bytes %pool_address))))) ;
1153
                         CONS } ;
1154
                     DIG 4 ;
1155
                     DIG 3 ;
1156
                     DIG 3 ;
1157
                     UPDATE 2 ;
1158
                     SOME ;
1159
                     UPDATE 3 ;
1160
                     DIG 2 ;
1161
                     UPDATE 5 }
1162
                   { DUP ;
1163
                     UNPAIR ;
1164
                     SIZE ;
1165
                     PUSH nat 55 ;
1166
                     DUP 2 ;
1167
                     COMPARE ;
1168
                     EQ ;
1169
                     PUSH nat 54 ;
1170
                     DIG 2 ;
1171
                     COMPARE ;
1172
                     EQ ;
1173
                     OR ;
1174
                     IF {} { PUSH string "INCORRECT_SEQUENCER_PK_LENGTH" ; FAILWITH } ;
1175
                     PUSH nat 20 ;
1176
                     SWAP ;
1177
                     SIZE ;
1178
                     COMPARE ;
1179
                     EQ ;
1180
                     IF {} { PUSH string "INCORRECT_POOL_ADDRESS_LENGTH" ; FAILWITH } ;
1181
                     DUP 2 ;
1182
                     CAR ;
1183
                     DIG 3 ;
1184
                     SWAP ;
1185
                     EXEC ;
1186
                     DUP 3 ;
1187
                     GET 3 ;
1188
                     IF_NONE
1189
                       { NONE (pair nat
1190
                                    (pair (or unit unit) (option (pair string bytes)))) ;
1191
                         TOTAL_VOTING_POWER ;
1192
                         NONE (pair string bytes) ;
1193
                         NONE nat ;
1194
                         EMPTY_BIG_MAP (pair string bytes) (pair key_hash nat) ;
1195
                         EMPTY_BIG_MAP (pair key_hash (pair string bytes)) unit ;
1196
                         EMPTY_BIG_MAP key_hash nat ;
1197
                         PAIR 6 ;
1198
                         LEFT (pair (big_map key_hash string)
1199
                                    (pair nat
1200
                                          (pair nat
1201
                                                (pair nat (pair nat (pair string bytes)))))) ;
1202
                         DIG 2 ;
1203
                         PAIR }
1204
                       { DUP ;
1205
                         CAR ;
1206
                         DUP 3 ;
1207
                         COMPARE ;
1208
                         EQ ;
1209
                         IF
1210
                           { SWAP ;
1211
                             DROP ;
1212
                             NONE (pair nat
1213
                                        (pair (or unit unit)
1214
                                              (option (pair string bytes)))) ;
1215
                             SWAP }
1216
                           { DUP 4 ;
1217
                             CAR ;
1218
                             DUP 2 ;
1219
                             CDR ;
1220
                             IF_LEFT
1221
                               { DUP 2 ;
1222
                                 GET 11 ;
1223
                                 DUP 2 ;
1224
                                 GET 10 ;
1225
                                 MUL ;
1226
                                 DIG 2 ;
1227
                                 GET 9 ;
1228
                                 DUP 3 ;
1229
                                 GET 7 ;
1230
                                 IF_NONE { PUSH nat 0 } {} ;
1231
                                 MUL ;
1232
                                 COMPARE ;
1233
                                 GE ;
1234
                                 IF { DUP ; GET 9 } { NONE (pair string bytes) } ;
1235
                                 IF_NONE
1236
                                   { GET 7 ;
1237
                                     IF_NONE
1238
                                       { PUSH bool False }
1239
                                       { DROP ; PUSH bool True } ;
1240
                                     IF
1241
                                       { NONE (pair string bytes) ;
1242
                                         UNIT ;
1243
                                         LEFT unit ;
1244
                                         DIG 2 ;
1245
                                         CAR ;
1246
                                         DUG 2 ;
1247
                                         PUSH nat 1 ;
1248
                                         DIG 3 ;
1249
                                         ADD ;
1250
                                         PAIR 3 ;
1251
                                         SOME }
1252
                                       { DROP ;
1253
                                         NONE (pair nat
1254
                                                    (pair (or unit unit)
1255
                                                          (option (pair string bytes)))) } ;
1256
                                     TOTAL_VOTING_POWER ;
1257
                                     NONE (pair string bytes) ;
1258
                                     NONE nat ;
1259
                                     EMPTY_BIG_MAP (pair string bytes)
1260
                                                    (pair key_hash nat) ;
1261
                                     EMPTY_BIG_MAP (pair key_hash (pair string bytes))
1262
                                                    unit ;
1263
                                     EMPTY_BIG_MAP key_hash nat ;
1264
                                     PAIR 6 ;
1265
                                     LEFT (pair (big_map key_hash string)
1266
                                                (pair nat
1267
                                                      (pair nat
1268
                                                            (pair nat
1269
                                                                  (pair nat
1270
                                                                        (pair string
1271
                                                                              bytes)))))) }
1272
                                   { SWAP ;
1273
                                     DROP ;
1274
                                     PUSH nat 1 ;
1275
                                     DIG 2 ;
1276
                                     CAR ;
1277
                                     ADD ;
1278
                                     DUP ;
1279
                                     DUP 4 ;
1280
                                     COMPARE ;
1281
                                     EQ ;
1282
                                     IF
1283
                                       { DROP ;
1284
                                         NONE (pair nat
1285
                                                    (pair (or unit unit)
1286
                                                          (option (pair string bytes)))) ;
1287
                                         SWAP ;
1288
                                         TOTAL_VOTING_POWER ;
1289
                                         PUSH nat 0 ;
1290
                                         PUSH nat 0 ;
1291
                                         PUSH nat 0 ;
1292
                                         EMPTY_BIG_MAP key_hash string ;
1293
                                         PAIR 6 ;
1294
                                         RIGHT (pair (big_map key_hash nat)
1295
                                                     (pair
1296
                                                       (big_map
1297
                                                         (pair key_hash
1298
                                                               (pair string bytes))
1299
                                                         unit)
1300
                                                       (pair
1301
                                                         (big_map (pair string bytes)
1302
                                                                  (pair key_hash nat))
1303
                                                         (pair (option nat)
1304
                                                               (pair
1305
                                                                 (option (pair string
1306
                                                                              bytes))
1307
                                                                 nat))))) }
1308
                                       { SWAP ;
1309
                                         DROP ;
1310
                                         NONE (pair string bytes) ;
1311
                                         UNIT ;
1312
                                         RIGHT unit ;
1313
                                         PUSH nat 1 ;
1314
                                         DIG 3 ;
1315
                                         ADD ;
1316
                                         PAIR 3 ;
1317
                                         SOME ;
1318
                                         TOTAL_VOTING_POWER ;
1319
                                         NONE (pair string bytes) ;
1320
                                         NONE nat ;
1321
                                         EMPTY_BIG_MAP (pair string bytes)
1322
                                                        (pair key_hash nat) ;
1323
                                         EMPTY_BIG_MAP
1324
                                           (pair key_hash (pair string bytes))
1325
                                           unit ;
1326
                                         EMPTY_BIG_MAP key_hash nat ;
1327
                                         PAIR 6 ;
1328
                                         LEFT (pair (big_map key_hash string)
1329
                                                    (pair nat
1330
                                                          (pair nat
1331
                                                                (pair nat
1332
                                                                      (pair nat
1333
                                                                            (pair string
1334
                                                                                  bytes)))))) } } }
1335
                               { UNPAIR 6 ;
1336
                                 DROP ;
1337
                                 DIG 3 ;
1338
                                 DUP 6 ;
1339
                                 GET 13 ;
1340
                                 MUL ;
1341
                                 DUP 6 ;
1342
                                 GET 9 ;
1343
                                 DIG 4 ;
1344
                                 DUP 5 ;
1345
                                 DUP 5 ;
1346
                                 ADD ;
1347
                                 ADD ;
1348
                                 MUL ;
1349
                                 COMPARE ;
1350
                                 GE ;
1351
                                 DIG 2 ;
1352
                                 DUP 3 ;
1353
                                 ADD ;
1354
                                 DUP ;
1355
                                 DUP 6 ;
1356
                                 GET 14 ;
1357
                                 MUL ;
1358
                                 DIG 5 ;
1359
                                 GET 9 ;
1360
                                 DIG 4 ;
1361
                                 MUL ;
1362
                                 COMPARE ;
1363
                                 GE ;
1364
                                 PUSH nat 0 ;
1365
                                 DIG 2 ;
1366
                                 COMPARE ;
1367
                                 GT ;
1368
                                 AND ;
1369
                                 AND ;
1370
                                 IF { SOME } { DROP ; NONE (pair string bytes) } ;
1371
                                 UNIT ;
1372
                                 RIGHT unit ;
1373
                                 DIG 2 ;
1374
                                 CAR ;
1375
                                 DUG 2 ;
1376
                                 PUSH nat 1 ;
1377
                                 DIG 3 ;
1378
                                 ADD ;
1379
                                 PAIR 3 ;
1380
                                 SOME ;
1381
                                 TOTAL_VOTING_POWER ;
1382
                                 NONE (pair string bytes) ;
1383
                                 NONE nat ;
1384
                                 EMPTY_BIG_MAP (pair string bytes) (pair key_hash nat) ;
1385
                                 EMPTY_BIG_MAP (pair key_hash (pair string bytes)) unit ;
1386
                                 EMPTY_BIG_MAP key_hash nat ;
1387
                                 PAIR 6 ;
1388
                                 LEFT (pair (big_map key_hash string)
1389
                                            (pair nat
1390
                                                  (pair nat
1391
                                                        (pair nat
1392
                                                              (pair nat
1393
                                                                    (pair string bytes)))))) } ;
1394
                             DIG 2 ;
1395
                             PAIR } } ;
1396
                     DUP 2 ;
1397
                     DIG 2 ;
1398
                     IF_NONE
1399
                       { DUP 4 ; GET 5 }
1400
                       { GET 4 ;
1401
                         IF_NONE
1402
                           { DUP 4 ; GET 5 }
1403
                           { EMPTY_BIG_MAP address unit ; SWAP ; PAIR ; SOME } } ;
1404
                     DIG 2 ;
1405
                     SENDER ;
1406
                     DIG 8 ;
1407
                     SWAP ;
1408
                     EXEC ;
1409
                     DUP ;
1410
                     VOTING_POWER ;
1411
                     UNIT ;
1412
                     DIG 9 ;
1413
                     SWAP ;
1414
                     EXEC ;
1415
                     DROP ;
1416
                     DUP ;
1417
                     DIG 8 ;
1418
                     SWAP ;
1419
                     EXEC ;
1420
                     DROP ;
1421
                     DUP 3 ;
1422
                     CDR ;
1423
                     IF_LEFT { DIG 8 ; DROP } { DROP ; DIG 7 ; FAILWITH } ;
1424
                     DUP ;
1425
                     CAR ;
1426
                     DUP 9 ;
1427
                     CAR ;
1428
                     GET 7 ;
1429
                     DUP 2 ;
1430
                     DUP 6 ;
1431
                     GET ;
1432
                     IF_NONE { PUSH nat 0 } {} ;
1433
                     COMPARE ;
1434
                     LT ;
1435
                     IF {} { PUSH string "UPVOTING_LIMIT_EXCEEDED" ; FAILWITH } ;
1436
                     DUP 2 ;
1437
                     GET 5 ;
1438
                     DUP 9 ;
1439
                     MEM ;
1440
                     NOT ;
1441
                     IF {} { PUSH string "PROPOSAL_ALREADY_CREATED" ; FAILWITH } ;
1442
                     DUP 2 ;
1443
                     DUP 2 ;
1444
                     DUP 6 ;
1445
                     GET ;
1446
                     IF_NONE
1447
                       { SWAP ; PUSH nat 1 ; SOME ; DUP 6 ; UPDATE }
1448
                       { DIG 2 ; PUSH nat 1 ; DIG 2 ; ADD ; SOME ; DUP 6 ; UPDATE } ;
1449
                     UPDATE 1 ;
1450
                     DUP 2 ;
1451
                     GET 3 ;
1452
                     UNIT ;
1453
                     SOME ;
1454
                     DUP 10 ;
1455
                     DUP 7 ;
1456
                     PAIR ;
1457
                     UPDATE ;
1458
                     UPDATE 3 ;
1459
                     SWAP ;
1460
                     GET 5 ;
1461
                     DUP 3 ;
1462
                     DIG 4 ;
1463
                     PAIR ;
1464
                     SOME ;
1465
                     DUP 8 ;
1466
                     UPDATE ;
1467
                     UPDATE 5 ;
1468
                     DUP ;
1469
                     GET 7 ;
1470
                     IF_NONE
1471
                       { SWAP ; SOME ; UPDATE 7 ; DIG 4 ; SOME ; UPDATE 9 }
1472
                       { DUP ;
1473
                         DUP 4 ;
1474
                         COMPARE ;
1475
                         GT ;
1476
                         IF
1477
                           { DROP ; SWAP ; SOME ; UPDATE 7 ; DIG 4 ; SOME ; UPDATE 9 }
1478
                           { DIG 6 ;
1479
                             DROP ;
1480
                             DIG 2 ;
1481
                             COMPARE ;
1482
                             EQ ;
1483
                             IF { NONE (pair string bytes) ; UPDATE 9 } {} } } ;
1484
                     LEFT (pair (big_map key_hash string)
1485
                                (pair nat
1486
                                      (pair nat
1487
                                            (pair nat (pair nat (pair string bytes)))))) ;
1488
                     DIG 3 ;
1489
                     IF_NONE
1490
                       { NIL operation }
1491
                       { NIL operation ;
1492
                         SWAP ;
1493
                         EMIT %voting_finished (pair (nat %finished_at_period_index)
1494
                                                     (pair
1495
                                                       (or %finished_at_period_type
1496
                                                         (unit %proposal)
1497
                                                         (unit %promotion))
1498
                                                       (option %winner_proposal_payload (pair
1499
                                                                                         (string %sequencer_pk)
1500
                                                                                         (bytes %pool_address))))) ;
1501
                         CONS } ;
1502
                     DIG 4 ;
1503
                     DIG 3 ;
1504
                     DIG 3 ;
1505
                     UPDATE 2 ;
1506
                     SOME ;
1507
                     UPDATE 3 ;
1508
                     DIG 2 ;
1509
                     UPDATE 5 } ;
1510
                 SWAP } } ;
1511
         PAIR } ;
1512
  view "get_voting_state" unit
1513
        (pair (nat %period_index)
1514
              (pair (or %period_type (unit %proposal) (unit %promotion))
1515
                    (pair (nat %remaining_blocks)
1516
                          (option %finished_voting (pair (nat %finished_at_period_index)
1517
                                                        (pair
1518
                                                          (or %finished_at_period_type
1519
                                                            (unit %proposal)
1520
                                                            (unit %promotion))
1521
                                                          (option %winner_proposal_payload (pair
1522
                                                                                            (string %sequencer_pk)
1523
                                                                                            (bytes %pool_address)))))))))
1524
        { PUSH string "CURRENT_LEVEL_LESS_THAN_START_LEVEL" ;
1525
          SWAP ;
1526
          CDR ;
1527
          DUP ;
1528
          CAR ;
1529
          DUP ;
1530
          CAR ;
1531
          LEVEL ;
1532
          SUB ;
1533
          ISNAT ;
1534
          IF_NONE
1535
            { DROP ; DUP 2 ; FAILWITH }
1536
            { SWAP ; GET 3 ; SWAP ; EDIV ; IF_NONE { PUSH string "DIV by 0" ; FAILWITH } {} ; CAR } ;
1537
          DUP 2 ;
1538
          GET 3 ;
1539
          IF_NONE
1540
            { NONE (pair nat (pair (or unit unit) (option (pair string bytes)))) ;
1541
              TOTAL_VOTING_POWER ;
1542
              NONE (pair string bytes) ;
1543
              NONE nat ;
1544
              EMPTY_BIG_MAP (pair string bytes) (pair key_hash nat) ;
1545
              EMPTY_BIG_MAP (pair key_hash (pair string bytes)) unit ;
1546
              EMPTY_BIG_MAP key_hash nat ;
1547
              PAIR 6 ;
1548
              LEFT (pair (big_map key_hash string)
1549
                         (pair nat (pair nat (pair nat (pair nat (pair string bytes)))))) ;
1550
              DIG 2 ;
1551
              PAIR }
1552
            { DUP ;
1553
              CAR ;
1554
              DUP 3 ;
1555
              COMPARE ;
1556
              EQ ;
1557
              IF
1558
                { SWAP ;
1559
                  DROP ;
1560
                  NONE (pair nat (pair (or unit unit) (option (pair string bytes)))) ;
1561
                  SWAP }
1562
                { DUP 3 ;
1563
                  CAR ;
1564
                  DUP 2 ;
1565
                  CDR ;
1566
                  IF_LEFT
1567
                    { DUP 2 ;
1568
                      GET 11 ;
1569
                      DUP 2 ;
1570
                      GET 10 ;
1571
                      MUL ;
1572
                      DIG 2 ;
1573
                      GET 9 ;
1574
                      DUP 3 ;
1575
                      GET 7 ;
1576
                      IF_NONE { PUSH nat 0 } {} ;
1577
                      MUL ;
1578
                      COMPARE ;
1579
                      GE ;
1580
                      IF { DUP ; GET 9 } { NONE (pair string bytes) } ;
1581
                      IF_NONE
1582
                        { GET 7 ;
1583
                          IF_NONE { PUSH bool False } { DROP ; PUSH bool True } ;
1584
                          IF
1585
                            { NONE (pair string bytes) ;
1586
                              UNIT ;
1587
                              LEFT unit ;
1588
                              DIG 2 ;
1589
                              CAR ;
1590
                              DUG 2 ;
1591
                              PUSH nat 1 ;
1592
                              DIG 3 ;
1593
                              ADD ;
1594
                              PAIR 3 ;
1595
                              SOME }
1596
                            { DROP ;
1597
                              NONE (pair nat
1598
                                         (pair (or unit unit)
1599
                                               (option (pair string bytes)))) } ;
1600
                          TOTAL_VOTING_POWER ;
1601
                          NONE (pair string bytes) ;
1602
                          NONE nat ;
1603
                          EMPTY_BIG_MAP (pair string bytes) (pair key_hash nat) ;
1604
                          EMPTY_BIG_MAP (pair key_hash (pair string bytes)) unit ;
1605
                          EMPTY_BIG_MAP key_hash nat ;
1606
                          PAIR 6 ;
1607
                          LEFT (pair (big_map key_hash string)
1608
                                     (pair nat
1609
                                           (pair nat
1610
                                                 (pair nat
1611
                                                       (pair nat (pair string bytes)))))) }
1612
                        { SWAP ;
1613
                          DROP ;
1614
                          PUSH nat 1 ;
1615
                          DIG 2 ;
1616
                          CAR ;
1617
                          ADD ;
1618
                          DUP ;
1619
                          DUP 4 ;
1620
                          COMPARE ;
1621
                          EQ ;
1622
                          IF
1623
                            { DROP ;
1624
                              NONE (pair nat
1625
                                         (pair (or unit unit)
1626
                                               (option (pair string bytes)))) ;
1627
                              SWAP ;
1628
                              TOTAL_VOTING_POWER ;
1629
                              PUSH nat 0 ;
1630
                              PUSH nat 0 ;
1631
                              PUSH nat 0 ;
1632
                              EMPTY_BIG_MAP key_hash string ;
1633
                              PAIR 6 ;
1634
                              RIGHT (pair (big_map key_hash nat)
1635
                                          (pair
1636
                                            (big_map (pair key_hash (pair string bytes))
1637
                                                     unit)
1638
                                            (pair
1639
                                              (big_map (pair string bytes)
1640
                                                       (pair key_hash nat))
1641
                                              (pair (option nat)
1642
                                                    (pair (option (pair string bytes))
1643
                                                          nat))))) }
1644
                            { SWAP ;
1645
                              DROP ;
1646
                              NONE (pair string bytes) ;
1647
                              UNIT ;
1648
                              RIGHT unit ;
1649
                              PUSH nat 1 ;
1650
                              DIG 3 ;
1651
                              ADD ;
1652
                              PAIR 3 ;
1653
                              SOME ;
1654
                              TOTAL_VOTING_POWER ;
1655
                              NONE (pair string bytes) ;
1656
                              NONE nat ;
1657
                              EMPTY_BIG_MAP (pair string bytes) (pair key_hash nat) ;
1658
                              EMPTY_BIG_MAP (pair key_hash (pair string bytes)) unit ;
1659
                              EMPTY_BIG_MAP key_hash nat ;
1660
                              PAIR 6 ;
1661
                              LEFT (pair (big_map key_hash string)
1662
                                         (pair nat
1663
                                               (pair nat
1664
                                                     (pair nat
1665
                                                           (pair nat (pair string bytes)))))) } } }
1666
                    { UNPAIR 6 ;
1667
                      DROP ;
1668
                      DIG 3 ;
1669
                      DUP 6 ;
1670
                      GET 13 ;
1671
                      MUL ;
1672
                      DUP 6 ;
1673
                      GET 9 ;
1674
                      DIG 4 ;
1675
                      DUP 5 ;
1676
                      DUP 5 ;
1677
                      ADD ;
1678
                      ADD ;
1679
                      MUL ;
1680
                      COMPARE ;
1681
                      GE ;
1682
                      DIG 2 ;
1683
                      DUP 3 ;
1684
                      ADD ;
1685
                      DUP ;
1686
                      DUP 6 ;
1687
                      GET 14 ;
1688
                      MUL ;
1689
                      DIG 5 ;
1690
                      GET 9 ;
1691
                      DIG 4 ;
1692
                      MUL ;
1693
                      COMPARE ;
1694
                      GE ;
1695
                      PUSH nat 0 ;
1696
                      DIG 2 ;
1697
                      COMPARE ;
1698
                      GT ;
1699
                      AND ;
1700
                      AND ;
1701
                      IF { SOME } { DROP ; NONE (pair string bytes) } ;
1702
                      UNIT ;
1703
                      RIGHT unit ;
1704
                      DIG 2 ;
1705
                      CAR ;
1706
                      DUG 2 ;
1707
                      PUSH nat 1 ;
1708
                      DIG 3 ;
1709
                      ADD ;
1710
                      PAIR 3 ;
1711
                      SOME ;
1712
                      TOTAL_VOTING_POWER ;
1713
                      NONE (pair string bytes) ;
1714
                      NONE nat ;
1715
                      EMPTY_BIG_MAP (pair string bytes) (pair key_hash nat) ;
1716
                      EMPTY_BIG_MAP (pair key_hash (pair string bytes)) unit ;
1717
                      EMPTY_BIG_MAP key_hash nat ;
1718
                      PAIR 6 ;
1719
                      LEFT (pair (big_map key_hash string)
1720
                                 (pair nat
1721
                                       (pair nat
1722
                                             (pair nat (pair nat (pair string bytes)))))) } ;
1723
                  DIG 2 ;
1724
                  PAIR } } ;
1725
          DUP 2 ;
1726
          DIG 2 ;
1727
          IF_NONE
1728
            { DUP 3 ; GET 5 }
1729
            { GET 4 ;
1730
              IF_NONE
1731
                { DUP 3 ; GET 5 }
1732
                { EMPTY_BIG_MAP address unit ; SWAP ; PAIR ; SOME } } ;
1733
          DIG 2 ;
1734
          PAIR 3 ;
1735
          DUP ;
1736
          CAR ;
1737
          SWAP ;
1738
          GET 4 ;
1739
          DIG 2 ;
1740
          CAR ;
1741
          DUP ;
1742
          CAR ;
1743
          LEVEL ;
1744
          SUB ;
1745
          SWAP ;
1746
          GET 3 ;
1747
          SWAP ;
1748
          ISNAT ;
1749
          IF_NONE
1750
            { DROP ; DIG 2 ; FAILWITH }
1751
            { DIG 4 ;
1752
              DROP ;
1753
              DUP 2 ;
1754
              SWAP ;
1755
              EDIV ;
1756
              IF_NONE { PUSH string "MOD by 0" ; FAILWITH } {} ;
1757
              CDR ;
1758
              SWAP ;
1759
              SUB ;
1760
              ISNAT ;
1761
              IF_NONE { PUSH string "option is None" ; FAILWITH } {} } ;
1762
          DUP 3 ;
1763
          CDR ;
1764
          IF_LEFT { DROP ; UNIT ; LEFT unit } { DROP ; UNIT ; RIGHT unit } ;
1765
          DIG 3 ;
1766
          CAR ;
1767
          PAIR 4 } }