BCD

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