BCD

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