tx · AeBWvN6ptRuom4ZnkhVC9FAWvHvprxkCm6DPJV6X9ns

3N2V9vbP8zDTDvNMR8jQeGuUu22vz1KCv5i:  -0.01700000 Waves

2023.05.10 13:17 [2571657] smart account 3N2V9vbP8zDTDvNMR8jQeGuUu22vz1KCv5i > SELF 0.00000000 Waves

{ "type": 13, "id": "AeBWvN6ptRuom4ZnkhVC9FAWvHvprxkCm6DPJV6X9ns", "fee": 1700000, "feeAssetId": null, "timestamp": 1683713868982, "version": 2, "chainId": 84, "sender": "3N2V9vbP8zDTDvNMR8jQeGuUu22vz1KCv5i", "senderPublicKey": "3JBooHFx9f8xuJuUNn9AeF8B4U8a9onpNMbvzV3UTVTk", "proofs": [ "1sJb46Haznv1yY1DhEL5x33ev45THMZ6euwKpb51xRguTbuQcYqiYLYPuKJSG9Ahu56vPxGfP1HBzaujWYoz76n" ], "script": "base64:AAIFAAAAAAAABH4IAhIDCgEIEgQKAggBEgMKAQgSBAoCCAgSAwoBCBIECgIICBIECgIICBIECgIIARIECgIIARIFCgMICAESBQoDCAgBEgUKAwgIARIDCgEIEgMKAQgSBAoCCAgiA1NFUCIFRU1QVFkiE2tleU1hbmFnZXJQdWJsaWNLZXkiFmtleU1hbmFnZXJWYXVsdEFkZHJlc3MiD2tleUFkbWluUHViS2V5cyIHa2V5VXNlciIHYXNzZXRJZCIHYWRkcmVzcyITa2V5VXNlckZpeGVkRGVwb3NpdCIFYmxvY2siCmtleVJldm9rZWQiD2tleVJldm9rZWRUb3RhbCITa2V5VXNlclZlc3RpbmdTdGFydCIRa2V5VXNlclZlc3RpbmdFbmQiFWtleVVzZXJBbW91bnRQZXJCbG9jayIOa2V5Q2xhaW1EZW5pZWQiCHRocm93RXJyIgNtc2ciHGdldE1hbmFnZXJWYXVsdEFkZHJlc3NPclRoaXMiByRtYXRjaDAiAXMiFm1hbmFnZXJQdWJsaWNLZXlPclVuaXQiE21hbmFnZXJWYXVsdEFkZHJlc3MiC211c3RNYW5hZ2VyIgFpIgJwZCICcGsiCW11c3RBZG1pbiIIYWRtaW5QS3MiCWlzTWFuYWdlciIKdmFsdWVVc2VyUyILdG90YWxBbW91bnQiD3JlbWFpbmluZ0Ftb3VudCIPY2xhaW1lZFdYQW1vdW50IhFsYXN0Q2xhaW1lZEhlaWdodCIJdmFsdWVVc2VyIhJnZXRVc2VyVG90YWxBbW91bnQiFmdldFVzZXJSZW1haW5pbmdBbW91bnQiFGdldFVzZXJDbGFpbWVkQW1vdW50IhhnZXRVc2VyTGFzdENsYWltZWRIZWlnaHQiE2F2YWlsYWJsZVRvQ2xhaW1Ob3ciDWlzUmV2b2tlZFVzZXIiCmxhc3RIZWlnaHQiA2VuZCIPdW5jbGFpbWVkUGVyaW9kIhVhdmFpbGFibGVUb0NsYWltRml4ZWQiDHJlbGVhc2VCbG9jayINY2xhaW1JbnRlcm5hbCIEYWRkciIFYXNzZXQiBmFtb3VudCIGY2hlY2tzIg1jbGFpbWVkQW1vdW50IhJjbGFpbUZpeGVkSW50ZXJuYWwiEHVzZXJGaXhlZERlcG9zaXQiDmJsb2Nrc0R1cmF0aW9uIgll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", "height": 2571657, "applicationStatus": "succeeded", "spentComplexity": 0 } View: original | compacted Prev: BG1NtcEhXdXnoQxcm4RkU7cmByPRnWFgRpPHjAf4yRHz Next: none Diff:
OldNewDifferences
88 func keyManagerPublicKey () = "%s__managerPublicKey"
99
1010
11-func keyPendingManagerPublicKey () = "%s__pendingManagerPublicKey"
11+func keyManagerVaultAddress () = "%s__managerVaultAddress"
1212
1313
1414 func keyAdminPubKeys () = "%s__adminPubKeys"
4141 func throwErr (msg) = throw(makeString(["vesting_multiasset.ride:", msg], " "))
4242
4343
44-func managerPublicKeyOrUnit () = match getString(keyManagerPublicKey()) {
44+func getManagerVaultAddressOrThis () = match getString(keyManagerVaultAddress()) {
4545 case s: String =>
46- fromBase58String(s)
47- case _: Unit =>
48- unit
46+ addressFromStringValue(s)
4947 case _ =>
50- throw("Match error")
48+ this
5149 }
5250
5351
54-func pendingManagerPublicKeyOrUnit () = match getString(keyPendingManagerPublicKey()) {
55- case s: String =>
56- fromBase58String(s)
57- case _: Unit =>
58- unit
59- case _ =>
60- throw("Match error")
61-}
52+func managerPublicKeyOrUnit () = {
53+ let managerVaultAddress = getManagerVaultAddressOrThis()
54+ match getString(managerVaultAddress, keyManagerPublicKey()) {
55+ case s: String =>
56+ fromBase58String(s)
57+ case _: Unit =>
58+ unit
59+ case _ =>
60+ throw("Match error")
61+ }
62+ }
6263
6364
6465 func mustManager (i) = {
365366 func stats (assetId,address) = $Tuple2(nil, [value(getInteger(keyUserVestingStart(assetId, address))), value(getInteger(keyUserVestingEnd(assetId, address))), getUserTotalAmount(assetId, address), getUserClaimedAmount(assetId, address), getUserRemainingAmount(assetId, address), availableToClaimNow(assetId, address)])
366367
367368
368-
369-@Callable(i)
370-func setManager (pendingManagerPublicKey) = {
371- let checkCaller = mustManager(i)
372- if ((checkCaller == checkCaller))
373- then {
374- let checkManagerPublicKey = fromBase58String(pendingManagerPublicKey)
375- if ((checkManagerPublicKey == checkManagerPublicKey))
376- then [StringEntry(keyPendingManagerPublicKey(), pendingManagerPublicKey)]
377- else throw("Strict value is not equal to itself.")
378- }
379- else throw("Strict value is not equal to itself.")
380- }
381-
382-
383-
384-@Callable(i)
385-func confirmManager () = {
386- let pm = pendingManagerPublicKeyOrUnit()
387- let hasPM = if (isDefined(pm))
388- then true
389- else throwErr("no pending manager")
390- if ((hasPM == hasPM))
391- then {
392- let checkPM = if ((i.callerPublicKey == value(pm)))
393- then true
394- else throwErr("you are not pending manager")
395- if ((checkPM == checkPM))
396- then [StringEntry(keyManagerPublicKey(), toBase58String(value(pm))), DeleteEntry(keyPendingManagerPublicKey())]
397- else throw("Strict value is not equal to itself.")
398- }
399- else throw("Strict value is not equal to itself.")
400- }
401-
402-
403369 @Verifier(tx)
404370 func verify () = {
405371 let targetPublicKey = match managerPublicKeyOrUnit() {
Full:
OldNewDifferences
11 {-# STDLIB_VERSION 5 #-}
22 {-# SCRIPT_TYPE ACCOUNT #-}
33 {-# CONTENT_TYPE DAPP #-}
44 let SEP = "__"
55
66 let EMPTY = ""
77
88 func keyManagerPublicKey () = "%s__managerPublicKey"
99
1010
11-func keyPendingManagerPublicKey () = "%s__pendingManagerPublicKey"
11+func keyManagerVaultAddress () = "%s__managerVaultAddress"
1212
1313
1414 func keyAdminPubKeys () = "%s__adminPubKeys"
1515
1616
1717 func keyUser (assetId,address) = makeString(["%s%s", assetId, address], SEP)
1818
1919
2020 func keyUserFixedDeposit (assetId,address,block) = makeString(["%s%s%s%d", "fixedDeposit", assetId, address, toString(block)], SEP)
2121
2222
2323 func keyRevoked (assetId,address) = makeString(["%s%s%s", "revoked", assetId, address], SEP)
2424
2525
2626 func keyRevokedTotal (assetId) = makeString(["%s%s", "revokedTotal", assetId], SEP)
2727
2828
2929 func keyUserVestingStart (assetId,address) = makeString(["%s%s%s", "vestingStart", assetId, address], SEP)
3030
3131
3232 func keyUserVestingEnd (assetId,address) = makeString(["%s%s%s", "vestingEnd", assetId, address], SEP)
3333
3434
3535 func keyUserAmountPerBlock (assetId,address) = makeString(["%s%s%s", "amountPerBlock", assetId, address], SEP)
3636
3737
3838 func keyClaimDenied (assetId) = makeString(["%s%s", "claimDenied", assetId], SEP)
3939
4040
4141 func throwErr (msg) = throw(makeString(["vesting_multiasset.ride:", msg], " "))
4242
4343
44-func managerPublicKeyOrUnit () = match getString(keyManagerPublicKey()) {
44+func getManagerVaultAddressOrThis () = match getString(keyManagerVaultAddress()) {
4545 case s: String =>
46- fromBase58String(s)
47- case _: Unit =>
48- unit
46+ addressFromStringValue(s)
4947 case _ =>
50- throw("Match error")
48+ this
5149 }
5250
5351
54-func pendingManagerPublicKeyOrUnit () = match getString(keyPendingManagerPublicKey()) {
55- case s: String =>
56- fromBase58String(s)
57- case _: Unit =>
58- unit
59- case _ =>
60- throw("Match error")
61-}
52+func managerPublicKeyOrUnit () = {
53+ let managerVaultAddress = getManagerVaultAddressOrThis()
54+ match getString(managerVaultAddress, keyManagerPublicKey()) {
55+ case s: String =>
56+ fromBase58String(s)
57+ case _: Unit =>
58+ unit
59+ case _ =>
60+ throw("Match error")
61+ }
62+ }
6263
6364
6465 func mustManager (i) = {
6566 let pd = throwErr("permission denied")
6667 match managerPublicKeyOrUnit() {
6768 case pk: ByteVector =>
6869 if ((i.callerPublicKey == pk))
6970 then true
7071 else pd
7172 case _: Unit =>
7273 if ((i.caller == this))
7374 then true
7475 else pd
7576 case _ =>
7677 throw("Match error")
7778 }
7879 }
7980
8081
8182 func mustAdmin (i) = {
8283 let adminPKs = split(valueOrElse(getString(keyAdminPubKeys()), EMPTY), SEP)
8384 if (containsElement(adminPKs, toBase58String(i.callerPublicKey)))
8485 then true
8586 else {
8687 let isManager = mustManager(i)
8788 if ((isManager == isManager))
8889 then true
8990 else throw("Strict value is not equal to itself.")
9091 }
9192 }
9293
9394
9495 func valueUserS (totalAmount,remainingAmount,claimedWXAmount,lastClaimedHeight) = makeString(["%d%d%d%d%d", totalAmount, remainingAmount, "0", claimedWXAmount, lastClaimedHeight], SEP)
9596
9697
9798 func valueUser (totalAmount,remainingAmount,claimedWXAmount,lastClaimedHeight) = valueUserS(toString(totalAmount), toString(remainingAmount), toString(claimedWXAmount), toString(lastClaimedHeight))
9899
99100
100101 func getUserTotalAmount (assetId,address) = parseIntValue(split(value(getString(keyUser(assetId, address))), SEP)[1])
101102
102103
103104 func getUserRemainingAmount (assetId,address) = parseIntValue(split(value(getString(keyUser(assetId, address))), SEP)[2])
104105
105106
106107 func getUserClaimedAmount (assetId,address) = parseIntValue(split(value(getString(keyUser(assetId, address))), SEP)[3])
107108
108109
109110 func getUserLastClaimedHeight (assetId,address) = parseIntValue(split(value(getString(keyUser(assetId, address))), SEP)[5])
110111
111112
112113 func availableToClaimNow (assetId,address) = {
113114 let isRevokedUser = valueOrElse(getBoolean(keyRevoked(assetId, address)), false)
114115 if (isRevokedUser)
115116 then getUserRemainingAmount(assetId, address)
116117 else {
117118 let lastHeight = getUserLastClaimedHeight(assetId, address)
118119 if ((lastHeight >= height))
119120 then 0
120121 else {
121122 let end = value(getInteger(keyUserVestingEnd(assetId, address)))
122123 if ((height > end))
123124 then getUserRemainingAmount(assetId, address)
124125 else {
125126 let unclaimedPeriod = (height - lastHeight)
126127 (value(getInteger(keyUserAmountPerBlock(assetId, address))) * unclaimedPeriod)
127128 }
128129 }
129130 }
130131 }
131132
132133
133134 func availableToClaimFixed (assetId,address,releaseBlock) = valueOrElse(getInteger(keyUserFixedDeposit(assetId, address, releaseBlock)), 0)
134135
135136
136137 func claimInternal (assetId,address) = {
137138 let addr = addressFromStringValue(address)
138139 let asset = fromBase58String(assetId)
139140 let amount = availableToClaimNow(assetId, address)
140141 let checks = [if ((valueOrElse(getBoolean(keyClaimDenied(assetId)), false) == false))
141142 then true
142143 else throwErr("asset claim denied"), if ((amount != 0))
143144 then true
144145 else throwErr("nothing to claim")]
145146 if ((checks == checks))
146147 then {
147148 let totalAmount = getUserTotalAmount(assetId, address)
148149 let remainingAmount = getUserRemainingAmount(assetId, address)
149150 let claimedAmount = getUserClaimedAmount(assetId, address)
150151 let isRevokedUser = valueOrElse(getBoolean(keyRevoked(assetId, address)), false)
151152 if (isRevokedUser)
152153 then [ScriptTransfer(addr, remainingAmount, asset), StringEntry(keyUser(assetId, address), valueUser(totalAmount, 0, (claimedAmount + remainingAmount), height))]
153154 else [ScriptTransfer(addr, amount, asset), StringEntry(keyUser(assetId, address), valueUser(totalAmount, (remainingAmount - amount), (claimedAmount + amount), height))]
154155 }
155156 else throw("Strict value is not equal to itself.")
156157 }
157158
158159
159160 func claimFixedInternal (assetId,address,releaseBlock) = {
160161 let userFixedDeposit = getInteger(keyUserFixedDeposit(assetId, address, releaseBlock))
161162 let checks = [if ((valueOrElse(getBoolean(keyClaimDenied(assetId)), false) == false))
162163 then true
163164 else throwErr("asset claim denied"), if ((height > releaseBlock))
164165 then true
165166 else throwErr("current height must be more than releaseBlock for fixed deposit"), if ((valueOrElse(userFixedDeposit, 0) != 0))
166167 then true
167168 else throwErr("no fixed deposit for assetId/address/height")]
168169 if ((checks == checks))
169170 then {
170171 let addr = addressFromStringValue(address)
171172 let asset = fromBase58String(assetId)
172173 let amount = value(userFixedDeposit)
173174 [ScriptTransfer(addr, amount, asset), IntegerEntry(keyUserFixedDeposit(assetId, address, releaseBlock), 0)]
174175 }
175176 else throw("Strict value is not equal to itself.")
176177 }
177178
178179
179180 @Callable(i)
180181 func withdrawRevoked (assetId) = {
181182 let amount = valueOrElse(getInteger(keyRevokedTotal(assetId)), 0)
182183 let asset = fromBase58String(assetId)
183184 let checks = [mustManager(i), if ((amount > 0))
184185 then true
185186 else throwErr("revoked amount is zero, nothing to withdraw")]
186187 if ((checks == checks))
187188 then [ScriptTransfer(i.caller, amount, asset), IntegerEntry(keyRevokedTotal(assetId), 0)]
188189 else throw("Strict value is not equal to itself.")
189190 }
190191
191192
192193
193194 @Callable(i)
194195 func createDepositFor (address,blocksDuration) = {
195196 let amount = i.payments[0].amount
196197 let assetId = toBase58String(value(i.payments[0].assetId))
197198 let endHeight = (height + blocksDuration)
198199 let vestingLen = (endHeight - height)
199200 let amountPerBlock = (amount / vestingLen)
200201 let checks = [if ((endHeight > height))
201202 then true
202203 else throwErr("endHeight must be more than height"), if ((getString(keyUser(assetId, address)) == unit))
203204 then true
204205 else throwErr("deposit of this asset for user already exists"), if ((amountPerBlock != 0))
205206 then true
206207 else throwErr("attached amount too small or blocksDuration too large — will claimed zero per block")]
207208 if ((checks == checks))
208209 then [StringEntry(keyUser(assetId, address), valueUser(amount, amount, 0, height)), IntegerEntry(keyUserVestingStart(assetId, address), height), IntegerEntry(keyUserVestingEnd(assetId, address), endHeight), IntegerEntry(keyUserAmountPerBlock(assetId, address), amountPerBlock)]
209210 else throw("Strict value is not equal to itself.")
210211 }
211212
212213
213214
214215 @Callable(i)
215216 func increaseDepositFor (address) = {
216217 let amount = i.payments[0].amount
217218 let assetId = toBase58String(value(i.payments[0].assetId))
218219 let availableToClaim = availableToClaimNow(assetId, address)
219220 let forceClaim = if ((availableToClaim > 0))
220221 then claimInternal(assetId, address)
221222 else unit
222223 if ((forceClaim == forceClaim))
223224 then {
224225 let endHeight = value(getInteger(keyUserVestingEnd(assetId, address)))
225226 let vestingLen = (endHeight - height)
226227 let amountPerBlock = value(getInteger(keyUserAmountPerBlock(assetId, address)))
227228 let incAmountPerBlock = (amount / vestingLen)
228229 let userTotalAmount = getUserTotalAmount(assetId, address)
229230 let userRemainingAmount = getUserRemainingAmount(assetId, address)
230231 let userClaimedAmount = getUserClaimedAmount(assetId, address)
231232 let userLastClaimedHeight = getUserLastClaimedHeight(assetId, address)
232233 let checks = [if ((valueOrElse(getBoolean(keyRevoked(assetId, address)), false) == false))
233234 then true
234235 else throwErr("deposit for user is revoked"), if ((getString(keyUser(assetId, address)) != unit))
235236 then true
236237 else throwErr("deposit for user doesn't exists"), if ((incAmountPerBlock != 0))
237238 then true
238239 else throwErr("attached amount too small — increase is zero per block")]
239240 if ((checks == checks))
240241 then [StringEntry(keyUser(assetId, address), valueUser((userTotalAmount + amount), (userRemainingAmount + amount), userClaimedAmount, userLastClaimedHeight)), IntegerEntry(keyUserAmountPerBlock(assetId, address), (amountPerBlock + incAmountPerBlock))]
241242 else throw("Strict value is not equal to itself.")
242243 }
243244 else throw("Strict value is not equal to itself.")
244245 }
245246
246247
247248
248249 @Callable(i)
249250 func revokeDepositFor (assetId,address) = {
250251 let totalAmount = getUserTotalAmount(assetId, address)
251252 let remainingAmount = getUserRemainingAmount(assetId, address)
252253 let claimedWXAmount = getUserClaimedAmount(assetId, address)
253254 let lastClaimedHeight = getUserLastClaimedHeight(assetId, address)
254255 let unclaimedAmountNow = availableToClaimNow(assetId, address)
255256 let revokedTotal = valueOrElse(getInteger(keyRevokedTotal(assetId)), 0)
256257 let amountToRevoke = (remainingAmount - unclaimedAmountNow)
257258 let newRevokedTotal = (revokedTotal + amountToRevoke)
258259 let checks = [mustAdmin(i), if ((getString(keyUser(assetId, address)) != unit))
259260 then true
260261 else throwErr("deposit of this asset for user is not exists"), if ((newRevokedTotal > revokedTotal))
261262 then true
262263 else throwErr("newRevokedTotal can't be less or equal than revokedTotal")]
263264 if ((checks == checks))
264265 then [BooleanEntry(keyRevoked(assetId, address), true), IntegerEntry(keyRevokedTotal(assetId), newRevokedTotal), StringEntry(keyUser(assetId, address), valueUser(totalAmount, unclaimedAmountNow, claimedWXAmount, lastClaimedHeight))]
265266 else throw("Strict value is not equal to itself.")
266267 }
267268
268269
269270
270271 @Callable(i)
271272 func claim (assetId) = claimInternal(assetId, toBase58String(i.caller.bytes))
272273
273274
274275
275276 @Callable(i)
276277 func claimFor (assetId,address) = claimInternal(assetId, address)
277278
278279
279280
280281 @Callable(i)
281282 func claimREADONLY (assetId,address) = {
282283 let amount = availableToClaimNow(assetId, address)
283284 $Tuple2(nil, amount)
284285 }
285286
286287
287288
288289 @Callable(i)
289290 func createFixedDepositFor (address,releaseBlock) = {
290291 let amount = i.payments[0].amount
291292 let assetId = toBase58String(value(i.payments[0].assetId))
292293 let userFixedDeposit = keyUserFixedDeposit(assetId, address, releaseBlock)
293294 let checks = [if ((releaseBlock > height))
294295 then true
295296 else throwErr("releaseBlock must be more than height"), if ((getInteger(userFixedDeposit) == unit))
296297 then true
297298 else throwErr("deposit for this height for user already exists")]
298299 if ((checks == checks))
299300 then [IntegerEntry(userFixedDeposit, amount)]
300301 else throw("Strict value is not equal to itself.")
301302 }
302303
303304
304305
305306 @Callable(i)
306307 func claimFixed (assetId,releaseBlock) = claimFixedInternal(assetId, toBase58String(i.caller.bytes), releaseBlock)
307308
308309
309310
310311 @Callable(i)
311312 func claimFixedFor (assetId,address,releaseBlock) = claimFixedInternal(assetId, address, releaseBlock)
312313
313314
314315
315316 @Callable(i)
316317 func claimFixedREADONLY (assetId,address,releaseBlock) = {
317318 let amount = availableToClaimFixed(assetId, address, releaseBlock)
318319 $Tuple2(nil, amount)
319320 }
320321
321322
322323
323324 @Callable(i)
324325 func revokeFixedDepositFor (assetId,address,releaseBlock) = {
325326 let checks = [mustAdmin(i), if ((releaseBlock > height))
326327 then true
327328 else throwErr("can't revoke deposit in past"), if ((valueOrElse(getInteger(keyUserFixedDeposit(assetId, address, releaseBlock)), 0) != 0))
328329 then true
329330 else throwErr("deposit for this height for user not exists")]
330331 if ((checks == checks))
331332 then {
332333 let amount = value(getInteger(keyUserFixedDeposit(assetId, address, releaseBlock)))
333334 [IntegerEntry(keyRevokedTotal(assetId), amount), IntegerEntry(keyUserFixedDeposit(assetId, address, releaseBlock), 0)]
334335 }
335336 else throw("Strict value is not equal to itself.")
336337 }
337338
338339
339340
340341 @Callable(i)
341342 func denyAssetClaim (assetId) = {
342343 let checks = [mustAdmin(i), if ((valueOrElse(getBoolean(keyClaimDenied(assetId)), false) == false))
343344 then true
344345 else throwErr("asset already denied")]
345346 if ((checks == checks))
346347 then [BooleanEntry(keyClaimDenied(assetId), true)]
347348 else throw("Strict value is not equal to itself.")
348349 }
349350
350351
351352
352353 @Callable(i)
353354 func allowAssetClaim (assetId) = {
354355 let checks = [mustAdmin(i), if ((valueOrElse(getBoolean(keyClaimDenied(assetId)), false) == true))
355356 then true
356357 else throwErr("asset already allowed")]
357358 if ((checks == checks))
358359 then [DeleteEntry(keyClaimDenied(assetId))]
359360 else throw("Strict value is not equal to itself.")
360361 }
361362
362363
363364
364365 @Callable(i)
365366 func stats (assetId,address) = $Tuple2(nil, [value(getInteger(keyUserVestingStart(assetId, address))), value(getInteger(keyUserVestingEnd(assetId, address))), getUserTotalAmount(assetId, address), getUserClaimedAmount(assetId, address), getUserRemainingAmount(assetId, address), availableToClaimNow(assetId, address)])
366367
367368
368-
369-@Callable(i)
370-func setManager (pendingManagerPublicKey) = {
371- let checkCaller = mustManager(i)
372- if ((checkCaller == checkCaller))
373- then {
374- let checkManagerPublicKey = fromBase58String(pendingManagerPublicKey)
375- if ((checkManagerPublicKey == checkManagerPublicKey))
376- then [StringEntry(keyPendingManagerPublicKey(), pendingManagerPublicKey)]
377- else throw("Strict value is not equal to itself.")
378- }
379- else throw("Strict value is not equal to itself.")
380- }
381-
382-
383-
384-@Callable(i)
385-func confirmManager () = {
386- let pm = pendingManagerPublicKeyOrUnit()
387- let hasPM = if (isDefined(pm))
388- then true
389- else throwErr("no pending manager")
390- if ((hasPM == hasPM))
391- then {
392- let checkPM = if ((i.callerPublicKey == value(pm)))
393- then true
394- else throwErr("you are not pending manager")
395- if ((checkPM == checkPM))
396- then [StringEntry(keyManagerPublicKey(), toBase58String(value(pm))), DeleteEntry(keyPendingManagerPublicKey())]
397- else throw("Strict value is not equal to itself.")
398- }
399- else throw("Strict value is not equal to itself.")
400- }
401-
402-
403369 @Verifier(tx)
404370 func verify () = {
405371 let targetPublicKey = match managerPublicKeyOrUnit() {
406372 case pk: ByteVector =>
407373 pk
408374 case _: Unit =>
409375 tx.senderPublicKey
410376 case _ =>
411377 throw("Match error")
412378 }
413379 sigVerify(tx.bodyBytes, tx.proofs[0], targetPublicKey)
414380 }
415381

github/deemru/w8io/169f3d6 
63.69 ms