BCD

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