BCD

Tezos Contract Explorer
Search Networks Deploy
  • Home
  • /
  • Mainnet
  • /
  • KT1RYEs...S6WM
Sapling
operations (549)Storage Code Interact Tokens Fork Statistics Details
Latest
​x
517
 
1
parameter (or (pair %init_token_sapling_pool (address %contract) (option %token_id nat))
2
              (list %default (pair (list %txns (sapling_transaction 8))
3
                                  (option %contract address)
4
                                  (option %token_id nat))));
5
storage (pair (sapling_state %tez 8) (map %token_fa_1_2 address (sapling_state 8))
6
              (map %token_fa_2 (pair address nat) (sapling_state 8)));
7
code { UNPAIR ;
8
       IF_LEFT
9
         { DUP 2 ;
10
           DUP 2 ;
11
           CDR ;
12
           IF_NONE
13
             { DUP 3 ;
14
               GET 3 ;
15
               DUP 3 ;
16
               CAR ;
17
               MEM ;
18
               IF { PUSH string "SAPLING_POOL_ALREADY_EXISTS" ; FAILWITH } {} ;
19
               DUP 2 ;
20
               CAR ;
21
               CONTRACT %transfer (pair (address %from_) (address %to_) (nat %value)) ;
22
               IF_NONE
23
                 { SWAP ; DIG 2 ; DROP 2 ; PUSH string "%TRANFER_DOESNT_EXIST" ; FAILWITH }
24
                 { DROP ;
25
                   DUP 2 ;
26
                   CAR ;
27
                   CONTRACT %approve (pair (address %spender) (nat %value)) ;
28
                   IF_NONE
29
                     { SWAP ; DIG 2 ; DROP 2 ; PUSH string "%APPROVE_DOESNT_EXIST" ; FAILWITH }
30
                     { DROP ;
31
                       DIG 2 ;
32
                       GET 3 ;
33
                       SAPLING_EMPTY_STATE 8 ;
34
                       DIG 3 ;
35
                       CAR ;
36
                       DUG 2 ;
37
                       SOME ;
38
                       DIG 2 ;
39
                       UPDATE ;
40
                       UPDATE 3 } } }
41
             { DUP 4 ;
42
               GET 4 ;
43
               DUP 2 ;
44
               DUP 5 ;
45
               CAR ;
46
               PAIR ;
47
               MEM ;
48
               IF { PUSH string "SAPLING_POOL_ALREADY_EXISTS" ; FAILWITH } {} ;
49
               DUP 3 ;
50
               CAR ;
51
               CONTRACT %transfer (list (pair (address %from_)
52
                                             (list %txs (pair (address %to_)
53
                                                             (nat %token_id)
54
                                                             (nat %amount))))) ;
55
               IF_NONE
56
                 { DIG 2 ; DIG 3 ; DROP 3 ; PUSH string "%TRANFER_DOESNT_EXIST" ; FAILWITH }
57
                 { DROP ;
58
                   DUP 3 ;
59
                   CAR ;
60
                   CONTRACT %update_operators (list (or
61
                                                     (pair %add_operator
62
                                                       (address %owner)
63
                                                       (address %operator)
64
                                                       (nat %token_id))
65
                                                     (pair %remove_operator
66
                                                       (address %owner)
67
                                                       (address %operator)
68
                                                       (nat %token_id)))) ;
69
                   IF_NONE
70
                     { DIG 2 ;
71
                       DIG 3 ;
72
                       DROP 3 ;
73
                       PUSH string "%UPDATE_OPERATORS_DOESNT_EXIST" ;
74
                       FAILWITH }
75
                     { DROP ;
76
                       SWAP ;
77
                       DIG 3 ;
78
                       GET 4 ;
79
                       SAPLING_EMPTY_STATE 8 ;
80
                       DIG 3 ;
81
                       DIG 4 ;
82
                       CAR ;
83
                       PAIR ;
84
                       DUG 2 ;
85
                       SOME ;
86
                       DIG 2 ;
87
                       UPDATE ;
88
                       UPDATE 4 } } } ;
89
           NIL operation }
90
         { NIL operation ;
91
           DUG 2 ;
92
           ITER { UNPAIR 3 ;
93
                  SWAP ;
94
                  IF_NONE
95
                    { SWAP ;
96
                      DROP ;
97
                      DUP 2 ;
98
                      CAR ;
99
                      AMOUNT ;
100
                      SWAP ;
101
                      NIL operation ;
102
                      PAIR 3 ;
103
                      SWAP ;
104
                      LAMBDA
105
                        (pair (pair (list operation) (sapling_state 8) mutez)
106
                              (sapling_transaction 8))
107
                        (pair (list operation) (sapling_state 8) mutez)
108
                        { UNPAIR ;
109
                          UNPAIR 3 ;
110
                          SWAP ;
111
                          DIG 3 ;
112
                          SAPLING_VERIFY_UPDATE ;
113
                          IF_NONE
114
                            { DROP 2 ; PUSH string "INVALID_SAPLING_TX" ; FAILWITH }
115
                            { UNPAIR ;
116
                              SWAP ;
117
                              UNPAIR ;
118
                              DUP ;
119
                              ABS ;
120
                              PUSH mutez 1 ;
121
                              MUL ;
122
                              PUSH int 0 ;
123
                              DIG 2 ;
124
                              COMPARE ;
125
                              GT ;
126
                              IF
127
                                { DIG 2 ;
128
                                  UNPACK key_hash ;
129
                                  IF_NONE
130
                                    { DROP 4 ;
131
                                      PUSH string "UNABLE_TO_UNPACK_RECIPIENT" ;
132
                                      FAILWITH }
133
                                    { IMPLICIT_ACCOUNT ;
134
                                      SWAP ;
135
                                      UNIT ;
136
                                      TRANSFER_TOKENS ;
137
                                      DIG 3 ;
138
                                      DIG 2 ;
139
                                      NIL operation ;
140
                                      DIG 4 ;
141
                                      NIL operation ;
142
                                      SWAP ;
143
                                      ITER { CONS } ;
144
                                      ITER { CONS } ;
145
                                      DIG 3 ;
146
                                      CONS ;
147
                                      PAIR 3 } }
148
                                { DIG 4 ;
149
                                  SUB_MUTEZ ;
150
                                  IF_NONE
151
                                    { DROP 3 ; PUSH string "INVALID_AMOUNT" ; FAILWITH }
152
                                    { PUSH nat 0 ;
153
                                      DIG 3 ;
154
                                      SIZE ;
155
                                      COMPARE ;
156
                                      NEQ ;
157
                                      IF
158
                                        { PUSH string "UNEXPECTED_EMPTY_BOUND_DATA" ;
159
                                          FAILWITH }
160
                                        {} ;
161
                                      SWAP ;
162
                                      DIG 2 ;
163
                                      PAIR 3 } } } } ;
164
                      DUG 2 ;
165
                      ITER { SWAP ; PAIR ; DUP 2 ; SWAP ; EXEC } ;
166
                      SWAP ;
167
                      DROP ;
168
                      UNPAIR 3 ;
169
                      PUSH mutez 0 ;
170
                      DIG 3 ;
171
                      COMPARE ;
172
                      NEQ ;
173
                      IF
174
                        { DROP 2 ; PUSH string "UNEXPECTED_REMAINDER" ; FAILWITH }
175
                        { PAIR } ;
176
                      UNPAIR ;
177
                      DIG 3 ;
178
                      SWAP ;
179
                      LAMBDA
180
                        (pair (list operation) operation)
181
                        (list operation)
182
                        { UNPAIR ; SWAP ; CONS } ;
183
                      DUG 2 ;
184
                      ITER { SWAP ; PAIR ; DUP 2 ; SWAP ; EXEC } ;
185
                      SWAP ;
186
                      DROP ;
187
                      DUG 2 ;
188
                      UPDATE 1 }
189
                    { DIG 2 ;
190
                      IF_NONE
191
                        { DUP 3 ;
192
                          GET 3 ;
193
                          DUP 2 ;
194
                          GET ;
195
                          IF_NONE
196
                            { PUSH string "SAPLING_STATE_NOT_FOUND" ; FAILWITH }
197
                            {} ;
198
                          DUP 2 ;
199
                          SWAP ;
200
                          PAIR ;
201
                          PUSH mutez 0 ;
202
                          AMOUNT ;
203
                          COMPARE ;
204
                          GT ;
205
                          IF
206
                            { DIG 2 ; DROP 2 ; PUSH string "UNEXPECTED_XTZ_AMOUNT" ; FAILWITH }
207
                            { DUP ;
208
                              CDR ;
209
                              CONTRACT %transfer (pair (address %from_) (address %to_)
210
                                                       (nat %value)) ;
211
                              IF_NONE
212
                                { DIG 2 ;
213
                                  DROP 2 ;
214
                                  PUSH string "%TRANSFER_DOESNT_EXIST" ;
215
                                  FAILWITH }
216
                                { SWAP ;
217
                                  NIL operation ;
218
                                  PAIR ;
219
                                  DIG 3 ;
220
                                  ITER { SWAP ;
221
                                         UNPAIR ;
222
                                         DUP 2 ;
223
                                         CAR ;
224
                                         DIG 3 ;
225
                                         SAPLING_VERIFY_UPDATE ;
226
                                         IF_NONE
227
                                           { DROP 2 ;
228
                                             PUSH string "INVALID_SAPLING_TX" ;
229
                                             FAILWITH }
230
                                           { UNPAIR ;
231
                                             SWAP ;
232
                                             UNPAIR ;
233
                                             PUSH int 0 ;
234
                                             DUP 2 ;
235
                                             COMPARE ;
236
                                             GT ;
237
                                             IF
238
                                               { DIG 2 ;
239
                                                 UNPACK key_hash ;
240
                                                 IF_NONE
241
                                                   { DROP 4 ;
242
                                                     PUSH string "UNABLE_TO_UNPACK_RECIPIENT" ;
243
                                                     FAILWITH }
244
                                                   { IMPLICIT_ACCOUNT ;
245
                                                     ADDRESS ;
246
                                                     SWAP ;
247
                                                     ABS ;
248
                                                     SWAP ;
249
                                                     SELF_ADDRESS ;
250
                                                     PAIR 3 ;
251
                                                     DIG 3 ;
252
                                                     DIG 2 ;
253
                                                     UPDATE 1 ;
254
                                                     NIL operation ;
255
                                                     DIG 3 ;
256
                                                     NIL operation ;
257
                                                     SWAP ;
258
                                                     ITER { CONS } ;
259
                                                     ITER { CONS } ;
260
                                                     DUP 4 ;
261
                                                     PUSH mutez 0 ;
262
                                                     DIG 4 ;
263
                                                     TRANSFER_TOKENS ;
264
                                                     CONS ;
265
                                                     PAIR } }
266
                                               { DIG 2 ;
267
                                                 UNPACK key_hash ;
268
                                                 IF_NONE
269
                                                   { PUSH int 0 ;
270
                                                     DUP 2 ;
271
                                                     COMPARE ;
272
                                                     LT ;
273
                                                     IF
274
                                                       { ABS ;
275
                                                         SELF_ADDRESS ;
276
                                                         SENDER ;
277
                                                         PAIR 3 ;
278
                                                         DIG 3 ;
279
                                                         DIG 2 ;
280
                                                         UPDATE 1 ;
281
                                                         NIL operation ;
282
                                                         DIG 3 ;
283
                                                         NIL operation ;
284
                                                         SWAP ;
285
                                                         ITER { CONS } ;
286
                                                         ITER { CONS } ;
287
                                                         DUP 4 ;
288
                                                         PUSH mutez 0 ;
289
                                                         DIG 4 ;
290
                                                         TRANSFER_TOKENS ;
291
                                                         CONS }
292
                                                       { DROP ; DIG 2 ; SWAP ; UPDATE 1 ; SWAP } ;
293
                                                     PAIR }
294
                                                   { DROP 5 ;
295
                                                     PUSH string "UNEXPECTED_RECIPIENT" ;
296
                                                     FAILWITH } } } } ;
297
                                  SWAP ;
298
                                  DROP } } ;
299
                          UNPAIR ;
300
                          DIG 4 ;
301
                          SWAP ;
302
                          LAMBDA
303
                            (pair (list operation) operation)
304
                            (list operation)
305
                            { UNPAIR ; SWAP ; CONS } ;
306
                          DUG 2 ;
307
                          ITER { SWAP ; PAIR ; DUP 2 ; SWAP ; EXEC } ;
308
                          SWAP ;
309
                          DROP ;
310
                          DUG 3 ;
311
                          DUP 3 ;
312
                          DIG 3 ;
313
                          GET 3 ;
314
                          DIG 2 ;
315
                          CAR ;
316
                          SOME ;
317
                          DIG 3 ;
318
                          UPDATE ;
319
                          UPDATE 3 }
320
                        { DUP 4 ;
321
                          GET 4 ;
322
                          DUP 2 ;
323
                          DUP 4 ;
324
                          PAIR ;
325
                          GET ;
326
                          IF_NONE
327
                            { PUSH string "SAPLING_STATE_NOT_FOUND" ; FAILWITH }
328
                            {} ;
329
                          DUP 2 ;
330
                          DUP 4 ;
331
                          DIG 2 ;
332
                          PAIR 3 ;
333
                          PUSH mutez 0 ;
334
                          AMOUNT ;
335
                          COMPARE ;
336
                          GT ;
337
                          IF
338
                            { DIG 3 ; DROP 2 ; PUSH string "UNEXPECTED_XTZ_AMOUNT" ; FAILWITH }
339
                            { DUP ;
340
                              PUSH nat 0 ;
341
                              NIL (pair address nat) ;
342
                              PAIR 3 ;
343
                              DIG 4 ;
344
                              ITER { SWAP ;
345
                                     UNPAIR 3 ;
346
                                     DUP 3 ;
347
                                     CAR ;
348
                                     DIG 4 ;
349
                                     SAPLING_VERIFY_UPDATE ;
350
                                     IF_NONE
351
                                       { DROP 3 ;
352
                                         PUSH string "INVALID_SAPLING_TX" ;
353
                                         FAILWITH }
354
                                       { UNPAIR ;
355
                                         SWAP ;
356
                                         UNPAIR ;
357
                                         PUSH int 0 ;
358
                                         DUP 2 ;
359
                                         COMPARE ;
360
                                         GT ;
361
                                         IF
362
                                           { DIG 2 ;
363
                                             UNPACK key_hash ;
364
                                             IF_NONE
365
                                               { DROP 5 ;
366
                                                 PUSH string "UNABLE_TO_UNPACK_RECIPIENT" ;
367
                                                 FAILWITH }
368
                                               { IMPLICIT_ACCOUNT ;
369
                                                 ADDRESS ;
370
                                                 SWAP ;
371
                                                 ABS ;
372
                                                 SWAP ;
373
                                                 PAIR ;
374
                                                 DIG 4 ;
375
                                                 DIG 2 ;
376
                                                 UPDATE 1 ;
377
                                                 DIG 3 ;
378
                                                 NIL (pair address nat) ;
379
                                                 DIG 4 ;
380
                                                 NIL (pair address nat) ;
381
                                                 SWAP ;
382
                                                 ITER { CONS } ;
383
                                                 ITER { CONS } ;
384
                                                 DIG 3 ;
385
                                                 CONS ;
386
                                                 PAIR 3 } }
387
                                           { PUSH int 0 ;
388
                                             DUP 2 ;
389
                                             COMPARE ;
390
                                             LT ;
391
                                             IF
392
                                               { DIG 2 ;
393
                                                 UNPACK key_hash ;
394
                                                 IF_NONE
395
                                                   { DIG 4 ;
396
                                                     DIG 2 ;
397
                                                     UPDATE 1 ;
398
                                                     SWAP ;
399
                                                     ABS ;
400
                                                     DIG 3 ;
401
                                                     ADD ;
402
                                                     DIG 2 ;
403
                                                     PAIR 3 }
404
                                                   { DROP 6 ;
405
                                                     PUSH string "UNEXPECTED_RECIPIENT" ;
406
                                                     FAILWITH } }
407
                                               { DIG 2 ;
408
                                                 DROP 2 ;
409
                                                 DIG 3 ;
410
                                                 SWAP ;
411
                                                 UPDATE 1 ;
412
                                                 DUG 2 ;
413
                                                 PAIR 3 } } } } ;
414
                              UNPAIR 3 ;
415
                              PUSH nat 0 ;
416
                              DUP 3 ;
417
                              COMPARE ;
418
                              EQ ;
419
                              PUSH nat 0 ;
420
                              DUP 3 ;
421
                              SIZE ;
422
                              COMPARE ;
423
                              EQ ;
424
                              AND ;
425
                              IF
426
                                { SWAP ; DIG 3 ; DROP 3 ; NIL operation }
427
                                { DUP 4 ;
428
                                  GET 3 ;
429
                                  CONTRACT %transfer (list (pair (address %from_)
430
                                                                (list %txs (pair
431
                                                                            (address %to_)
432
                                                                            (nat %token_id)
433
                                                                            (nat %amount))))) ;
434
                                  IF_NONE
435
                                    { SWAP ;
436
                                      DIG 3 ;
437
                                      DROP 3 ;
438
                                      PUSH string "%TRANFER_DOESNT_EXIST" ;
439
                                      FAILWITH }
440
                                    { PUSH nat 0 ;
441
                                      DUP 4 ;
442
                                      COMPARE ;
443
                                      GT ;
444
                                      IF
445
                                        { NIL (pair address
446
                                                    (list (pair address nat nat))) ;
447
                                          NIL (pair address nat nat) ;
448
                                          DIG 4 ;
449
                                          DUP 7 ;
450
                                          GET 4 ;
451
                                          SELF_ADDRESS ;
452
                                          PAIR 3 ;
453
                                          CONS ;
454
                                          SENDER ;
455
                                          PAIR ;
456
                                          CONS }
457
                                        { DIG 2 ;
458
                                          DROP ;
459
                                          NIL (pair address
460
                                                    (list (pair address nat nat))) } ;
461
                                      DIG 2 ;
462
                                      MAP { DUP ; CDR ; DUP 6 ; GET 4 ; DIG 2 ; CAR ; PAIR 3 } ;
463
                                      DIG 4 ;
464
                                      DROP ;
465
                                      PUSH nat 0 ;
466
                                      DUP 2 ;
467
                                      SIZE ;
468
                                      COMPARE ;
469
                                      NEQ ;
470
                                      IF
471
                                        { NIL (pair address
472
                                                    (list (pair address nat nat))) ;
473
                                          DIG 2 ;
474
                                          NIL (pair address
475
                                                    (list (pair address nat nat))) ;
476
                                          SWAP ;
477
                                          ITER { CONS } ;
478
                                          ITER { CONS } ;
479
                                          SWAP ;
480
                                          SELF_ADDRESS ;
481
                                          PAIR ;
482
                                          CONS }
483
                                        { DROP } ;
484
                                      SWAP ;
485
                                      PUSH mutez 0 ;
486
                                      DIG 2 ;
487
                                      TRANSFER_TOKENS } ;
488
                                  SWAP ;
489
                                  NIL operation ;
490
                                  DIG 2 ;
491
                                  CONS } ;
492
                              PAIR } ;
493
                          UNPAIR ;
494
                          DIG 5 ;
495
                          SWAP ;
496
                          LAMBDA
497
                            (pair (list operation) operation)
498
                            (list operation)
499
                            { UNPAIR ; SWAP ; CONS } ;
500
                          DUG 2 ;
501
                          ITER { SWAP ; PAIR ; DUP 2 ; SWAP ; EXEC } ;
502
                          SWAP ;
503
                          DROP ;
504
                          DUG 4 ;
505
                          DUP 4 ;
506
                          DIG 4 ;
507
                          GET 4 ;
508
                          DIG 2 ;
509
                          CAR ;
510
                          SOME ;
511
                          DIG 3 ;
512
                          DIG 4 ;
513
                          PAIR ;
514
                          UPDATE ;
515
                          UPDATE 4 } } } ;
516
           SWAP } ;
517
       PAIR }