BCD

Tezos Contract Explorer
Search Networks Deploy
  • Home
  • /
  • Mainnet
  • /
  • Vested funds 13
Delegatable
operations (66)Storage Code Interact Tokens Fork Statistics Details
Latest
​x
247
 
1
parameter (or
2
            (pair %Action
3
              (or %action_input
4
                (or (pair %Transfer (contract %dest unit) (mutez %transfer_amount))
5
                    (option %Set_pour (pair (contract %pour_dest unit)
6
                                           (key %pour_authorizer))))
7
                (or
8
                  (pair %Set_keys
9
                    (list %key_groups (pair (list %signatories key)
10
                                           (nat %group_threshold)))
11
                    (nat %overall_threshold))
12
                  (option %Set_delegate key_hash)))
13
              (list %signatures (list (option signature))))
14
            (option (pair (signature %pour_auth) (mutez %pour_amount))));
15
storage (pair
16
          (pair (nat %replay_counter)
17
                (pair %key_info
18
                  (list %key_groups (pair (list %signatories key) (nat %group_threshold)))
19
                  (nat %overall_threshold)))
20
          (pair
21
            (pair %vesting
22
              (pair %vesting_quantities (mutez %vested_balance)
23
                                        (mutez %vesting_increment))
24
              (pair %vesting_schedule (timestamp %next_payout) (int %payout_interval)))
25
            (option (pair (address %pour_dest) (key %pour_authorizer)))));
26
code { DUP ;
27
       CAR ;
28
       IF_LEFT
29
         { DIP { CDR ; DUP ; NIL @operations operation ; SWAP } ;
30
           SWAP ;
31
           CAR ;
32
           DUP ;
33
           CDR %key_info @% ;
34
           DIP { CAR %replay_counter @% ;
35
                 DIP { DUP ; CDR %signatures @% } ;
36
                 SWAP ;
37
                 DIP { DIP { CAR %action_input @% ; DUP } ;
38
                       SELF ;
39
                       ADDRESS ;
40
                       PAIR ;
41
                       SWAP ;
42
                       PAIR ;
43
                       PACK @packed } } ;
44
           SWAP ;
45
           DIP { DUP ;
46
                 CAR %key_groups @% ;
47
                 DIP { CDR %overall_threshold @% ; INT @overall_counter ; SWAP } } ;
48
           ITER { DIP { IF_CONS
49
                          { DIP { SWAP } ;
50
                            DUP ;
51
                            CAR @%% ;
52
                            DIP { CDR @%% ; INT @group_counter ; SWAP } }
53
                          { { UNIT ; FAILWITH } } } ;
54
                  ITER { DIP { IF_CONS {} { { UNIT ; FAILWITH } } } ;
55
                         IF_NONE
56
                           { DROP }
57
                           { SWAP ;
58
                             DIP { DIP { SWAP ;
59
                                         DIP { DIP { PUSH int -1 ; ADD @group_counter } } ;
60
                                         DUP } } ;
61
                             CHECK_SIGNATURE @sig_ok ;
62
                             { IF {} { { UNIT ; FAILWITH } } } ;
63
                             SWAP } } ;
64
                  { DIP { DIP { PUSH int 0 ;
65
                                { COMPARE ; GE @group_threshold_met } ;
66
                                IF { DIP { PUSH int -1 ; ADD @overall_counter } } {} } } } ;
67
                  IF_CONS { { UNIT ; FAILWITH } } {} ;
68
                  SWAP } ;
69
           IF_CONS { { UNIT ; FAILWITH } } {} ;
70
           DROP ;
71
           PUSH int 0 ;
72
           { COMPARE ; GE @overall_threshold_met } ;
73
           { IF {} { { UNIT ; FAILWITH } } } ;
74
           { DIP { DIP { DUP ;
75
                         CAR ;
76
                         DUP ;
77
                         CAR %replay_counter @% ;
78
                         PUSH nat 1 ;
79
                         ADD @replay_counter ;
80
                         DIP { CDR %key_info @% } ;
81
                         PAIR %@ %@ ;
82
                         DIP { CDR } ;
83
                         PAIR } } } ;
84
           IF_LEFT
85
             { IF_LEFT
86
                 { DUP ;
87
                   DIP { CDR %transfer_amount @% ;
88
                         DUP ;
89
                         BALANCE @balance ;
90
                         { { COMPARE ; GE } ; IF {} { { UNIT ; FAILWITH } } } ;
91
                         SWAP ;
92
                         DIP { DIP { DUP ;
93
                                     CDR ;
94
                                     DUP ;
95
                                     CAR ;
96
                                     CAR %vesting_quantities @% ;
97
                                     DUP ;
98
                                     CAR %vested_balance @% ;
99
                                     DUP } ;
100
                               DUP ;
101
                               DIP { { { COMPARE ; LE } ; IF {} { { UNIT ; FAILWITH } } } } ;
102
                               SWAP ;
103
                               SUB_MUTEZ ;
104
                               IF_NONE { UNIT ; FAILWITH } { RENAME @vested_balance } ;
105
                               DIP { CDR %vesting_increment @% } ;
106
                               PAIR @vesting_quantities %@ %@ ;
107
                               DIP { DUP ;
108
                                     CAR ;
109
                                     CDR %vesting_schedule @% ;
110
                                     DIP { CDR %pour_info @% } } ;
111
                               PAIR @vesting %@ %@ ;
112
                               PAIR %@ %@ ;
113
                               SWAP ;
114
                               CAR ;
115
                               PAIR } } ;
116
                   DUP ;
117
                   CDR %transfer_amount @% ;
118
                   DIP { CAR %dest @% } ;
119
                   UNIT ;
120
                   TRANSFER_TOKENS @transfer_op ;
121
                   CONS @operations }
122
                 { SWAP ;
123
                   DIP { MAP { UNPAIR ; ADDRESS ; PAIR } ;
124
                         SWAP ;
125
                         DUP ;
126
                         CAR ;
127
                         DIP { CDR ; CAR %vesting @% ; PAIR %vesting %pour_info } ;
128
                         PAIR @storage } } }
129
             { IF_LEFT
130
                 { DUP ;
131
                   DUP ;
132
                   CAR %key_groups @% ;
133
                   DIP { CDR %overall_threshold @new_threshold ;
134
                         DUP ;
135
                         PUSH nat 0 ;
136
                         { { COMPARE ; LT } ; IF {} { { UNIT ; FAILWITH } } } ;
137
                         PUSH @counter nat 0 } ;
138
                   ITER { DUP ;
139
                          CAR %signatories @%% ;
140
                          DIP { CDR %group_threshold @%% ;
141
                                DUP ;
142
                                PUSH nat 0 ;
143
                                { { COMPARE ; LT } ; IF {} { { UNIT ; FAILWITH } } } } ;
144
                          SIZE @num_keys ;
145
                          { { COMPARE ; GE } ; IF {} { { UNIT ; FAILWITH } } } ;
146
                          PUSH nat 1 ;
147
                          ADD @counter } ;
148
                   { { COMPARE ; GE } ; IF {} { { UNIT ; FAILWITH } } } ;
149
                   SWAP ;
150
                   DIP { DIP { DUP ; CAR ; CAR %replay_counter } ;
151
                         SWAP ;
152
                         PAIR %@ %key_info ;
153
                         DIP { CDR } ;
154
                         PAIR @storage } }
155
                 { SET_DELEGATE @set_delegate_op ; CONS } } ;
156
           PAIR }
157
         { IF_NONE
158
             { CDR ;
159
               DUP ;
160
               CDR ;
161
               DUP ;
162
               DIP { CDR %pour_info @% } ;
163
               CAR %vesting @% ;
164
               DUP ;
165
               CDR %vesting_schedule @% ;
166
               DUP ;
167
               CAR %next_payout @% ;
168
               DUP ;
169
               NOW ;
170
               { COMPARE ; GT } ;
171
               { IF {} { { UNIT ; FAILWITH } } } ;
172
               DIP { CDR %payout_interval @% ; DUP } ;
173
               ADD @new_next_payout ;
174
               PAIR %next_payout %@ @new_vesting_schedule ;
175
               SWAP ;
176
               CAR %vesting_quantities @% ;
177
               DUP ;
178
               CAR %vested_balance @% ;
179
               DIP { CDR %vesting_increment @% ; DUP } ;
180
               ADD @new_balance ;
181
               PAIR %vested_balance %@ ;
182
               PAIR %vesting_quantities %vesting_schedule ;
183
               PAIR %vesting %@ ;
184
               SWAP ;
185
               CAR ;
186
               PAIR @storage ;
187
               NIL operation }
188
             { DIP { CDR ;
189
                     DUP ;
190
                     CDR ;
191
                     DUP ;
192
                     CAR %vesting @% ;
193
                     DUP ;
194
                     CAR %vesting_quantities @% ;
195
                     DUP ;
196
                     CAR %vested_balance @% ;
197
                     DUP } ;
198
               DUP ;
199
               DIP { CDR %pour_amount @%% ;
200
                     DUP ;
201
                     DIP { { { COMPARE ; LE } ; IF {} { { UNIT ; FAILWITH } } } } ;
202
                     DUP ;
203
                     BALANCE @balance ;
204
                     { { COMPARE ; GE } ; IF {} { { UNIT ; FAILWITH } } } ;
205
                     SWAP ;
206
                     SUB_MUTEZ @new_cur_balance ;
207
                     IF_NONE { UNIT ; FAILWITH } {} ;
208
                     DIP { CDR %vesting_increment @% } ;
209
                     PAIR %vested_balance %@ @vesting_quantities ;
210
                     DIP { CDR %vesting_schedule @% } ;
211
                     PAIR %@ %@ @vesting ;
212
                     DIP { CDR %pour_info @% ; DUP ; IF_NONE { { UNIT ; FAILWITH } } {} } ;
213
                     SWAP ;
214
                     DIP { PAIR %@ %@ ;
215
                           SWAP ;
216
                           CAR ;
217
                           DUP ;
218
                           CAR %replay_counter @% ;
219
                           DUP ;
220
                           PUSH nat 1 ;
221
                           ADD @replay_counter ;
222
                           SWAP ;
223
                           SELF ;
224
                           ADDRESS ;
225
                           PAIR ;
226
                           DIP { DIP { CDR %key_info @% } ; PAIR %@ %@ ; PAIR @storage } } } ;
227
               DUP ;
228
               DIP { SWAP ;
229
                     DUP ;
230
                     CAR %pour_dest @% ;
231
                     CONTRACT unit ;
232
                     IF_NONE { PUSH string "Bad transaction receiver" ; FAILWITH } {} ;
233
                     DIP { DUP ;
234
                           CDR %pour_authorizer @% ;
235
                           DIP { CAR %pour_dest @% ;
236
                                 SWAP ;
237
                                 DUP ;
238
                                 CAR %pour_auth @% ;
239
                                 DIP { CDR %pour_amount @% ; SWAP ; PAIR ; PAIR ; PACK @packed } } ;
240
                           CHECK_SIGNATURE @pour_auth_ok ;
241
                           { IF {} { { UNIT ; FAILWITH } } } ;
242
                           NIL operation } } ;
243
               CDR %pour_amount @% ;
244
               UNIT ;
245
               TRANSFER_TOKENS @pour_op ;
246
               CONS } ;
247
           PAIR } }