tx · 5y3UQHM1bdKK8VL8SJYdSnGYqJo5VjGxey6EE5joDir2

3MxUSyFKcKESBg3Nf4Gwj1Qn15Jr9NTJE1a:  -0.01100000 Waves

2022.08.31 16:57 [2208727] smart account 3MxUSyFKcKESBg3Nf4Gwj1Qn15Jr9NTJE1a > SELF 0.00000000 Waves

{ "type": 13, "id": "5y3UQHM1bdKK8VL8SJYdSnGYqJo5VjGxey6EE5joDir2", "fee": 1100000, "feeAssetId": null, "timestamp": 1661954223469, "version": 2, "chainId": 84, "sender": "3MxUSyFKcKESBg3Nf4Gwj1Qn15Jr9NTJE1a", "senderPublicKey": "Gz38AcUCTd55TqzHQABThf42Sb9M2s8VmPT4u68hNZhA", "proofs": [ "gx1d8kSCZbrNd9kbp3i6bLotXATbKuZtFado8Y4k44WnwedPnsAd8vxV4HisRXzgfPBJ6CG9qqoYqPXNXJQ4nUK" ], "script": "base64:AAIFAAAAAAAAACIIAhIDCgEIEgMKAQgSABIDCgEYEggKBgEBAQEIARIDCgEIAAAAHwAAAAADU0VQAgAAAAJfXwAAAAAFRU1QVFkCAAAAAAAAAAAOaWR4UG9vbEFkZHJlc3MAAAAAAAAAAAEAAAAACWlkeExQQXNJZAAAAAAAAAAAAwAAAAAJaWR4QW1Bc0lkAAAAAAAAAAAEAAAAAAlpZHhQckFzSWQAAAAAAAAAAAUAAAAAD2lkeEZhY3RTdGFrQ250cgAAAAAAAAAAAQEAAAALa2V5RmFjdENudHIAAAAAAgAAABMlc19fZmFjdG9yeUNvbnRyYWN0AQAAABNrZXlNYW5hZ2VyUHVibGljS2V5AAAAAAIAAAAUJXNfX21hbmFnZXJQdWJsaWNLZXkBAAAAGmtleVBlbmRpbmdNYW5hZ2VyUHVibGljS2V5AAAAAAIAAAAbJXNfX3BlbmRpbmdNYW5hZ2VyUHVibGljS2V5AQAAAAtrZXlQb29sQWRkcgAAAAACAAAADyVzX19wb29sQWRkcmVzcwEAAAALa2V5QW10QXNzZXQAAAAAAgAAAA8lc19fYW1vdW50QXNzZXQBAAAADWtleVByaWNlQXNzZXQAAAAAAgAAAA4lc19fcHJpY2VBc3NldAEAAAAPa2V5QWRtaW5QdWJLZXlzAAAAAAIAAAAQJXNfX2FkbWluUHViS2V5cwEAAAAGa2V5QW1wAAAAAAIAAAAHJXNfX2FtcAEAAAANa2V5QW1wSGlzdG9yeQAAAAEAAAAGaGVpZ2h0CQABLAAAAAICAAAACyVzJWRfX2FtcF9fCQABpAAAAAEFAAAABmhlaWdodAEAAAAQa2V5RmFjdG9yeUNvbmZpZwAAAAACAAAAESVzX19mYWN0b3J5Q29uZmlnAQAAAA1rZXlQb29sQ29uZmlnAAAAAgAAAAZpQW10QXMAAAAFaVByQXMJAAEsAAAAAgkAASwAAAACCQABLAAAAAIJAAEsAAAAAgIAAAAIJWQlZCVzX18FAAAABmlBbXRBcwIAAAACX18FAAAABWlQckFzAgAAAAhfX2NvbmZpZwEAAAAfa2V5TWFwcGluZ3NCYXNlQXNzZXQyaW50ZXJuYWxJZAAAAAEAAAAFYkFTdHIJAAEsAAAAAgIAAAAoJXMlcyVzX19tYXBwaW5nc19fYmFzZUFzc2V0MmludGVybmFsSWRfXwUAAAAFYkFTdHIBAAAAD2dldFN0cmluZ09yRmFpbAAAAAIAAAAEYWRkcgAAAANrZXkJAQAAABN2YWx1ZU9yRXJyb3JNZXNzYWdlAAAAAgkABB0AAAACBQAAAARhZGRyBQAAAANrZXkJAAS5AAAAAgkABEwAAAACAgAAAAptYW5kYXRvcnkgCQAETAAAAAIJAAQlAAAAAQUAAAAEYWRkcgkABEwAAAACAgAAAAEuCQAETAAAAAIFAAAAA2tleQkABEwAAAACAgAAAAwgbm90IGRlZmluZWQFAAAAA25pbAIAAAAAAQAAAAxnZXRJbnRPckZhaWwAAAACAAAABGFkZHIAAAADa2V5CQEAAAATdmFsdWVPckVycm9yTWVzc2FnZQAAAAIJAAQaAAAAAgUAAAAEYWRkcgUAAAADa2V5CQAEuQAAAAIJAARMAAAAAgIAAAAKbWFuZGF0b3J5IAkABEwAAAACCQAEJQAAAAEFAAAABGFkZHIJAARMAAAAAgIAAAABLgkABEwAAAACBQAAAANrZXkJAARMAAAAAgIAAAAMIG5vdCBkZWZpbmVkBQAAAANuaWwCAAAAAAAAAAAMcG9vbENvbnRyYWN0CQEAAAARQGV4dHJOYXRpdmUoMTA2MikAAAABCQEAAAAPZ2V0U3RyaW5nT3JGYWlsAAAAAgUAAAAEdGhpcwkBAAAAC2tleVBvb2xBZGRyAAAAAAAAAAAPZmFjdG9yeUNvbnRyYWN0CQEAAAARQGV4dHJOYXRpdmUoMTA2MikAAAABCQEAAAAPZ2V0U3RyaW5nT3JGYWlsAAAAAgUAAAAMcG9vbENvbnRyYWN0CQEAAAALa2V5RmFjdENudHIAAAAAAQAAAA1nZXRQb29sQ29uZmlnAAAAAAQAAAAFYW10QXMJAQAAAA9nZXRTdHJpbmdPckZhaWwAAAACBQAAAAxwb29sQ29udHJhY3QJAQAAAAtrZXlBbXRBc3NldAAAAAAEAAAAB3ByaWNlQXMJAQAAAA9nZXRTdHJpbmdPckZhaWwAAAACBQAAAAxwb29sQ29udHJhY3QJAQAAAA1rZXlQcmljZUFzc2V0AAAAAAQAAAAIaVByaWNlQXMJAQAAAAxnZXRJbnRPckZhaWwAAAACBQAAAA9mYWN0b3J5Q29udHJhY3QJAQAAAB9rZXlNYXBwaW5nc0Jhc2VBc3NldDJpbnRlcm5hbElkAAAAAQUAAAAHcHJpY2VBcwQAAAAGaUFtdEFzCQEAAAAMZ2V0SW50T3JGYWlsAAAAAgUAAAAPZmFjdG9yeUNvbnRyYWN0CQEAAAAfa2V5TWFwcGluZ3NCYXNlQXNzZXQyaW50ZXJuYWxJZAAAAAEFAAAABWFtdEFzCQAEtQAAAAIJAQAAAA9nZXRTdHJpbmdPckZhaWwAAAACBQAAAA9mYWN0b3J5Q29udHJhY3QJAQAAAA1rZXlQb29sQ29uZmlnAAAAAgkAAaQAAAABBQAAAAZpQW10QXMJAAGkAAAAAQUAAAAIaVByaWNlQXMFAAAAA1NFUAEAAAAQZ2V0RmFjdG9yeUNvbmZpZwAAAAAJAAS1AAAAAgkBAAAAD2dldFN0cmluZ09yRmFpbAAAAAIFAAAAD2ZhY3RvcnlDb250cmFjdAkBAAAAEGtleUZhY3RvcnlDb25maWcAAAAABQAAAANTRVABAAAAFm1hbmFnZXJQdWJsaWNLZXlPclVuaXQAAAAABAAAAAckbWF0Y2gwCQAEIgAAAAEJAQAAABNrZXlNYW5hZ2VyUHVibGljS2V5AAAAAAMJAAABAAAAAgUAAAAHJG1hdGNoMAIAAAAGU3RyaW5nBAAAAAFzBQAAAAckbWF0Y2gwCQACWQAAAAEFAAAAAXMDCQAAAQAAAAIFAAAAByRtYXRjaDACAAAABFVuaXQFAAAABHVuaXQJAAACAAAAAQIAAAALTWF0Y2ggZXJyb3IBAAAAHXBlbmRpbmdNYW5hZ2VyUHVibGljS2V5T3JVbml0AAAAAAQAAAAHJG1hdGNoMAkABCIAAAABCQEAAAAaa2V5UGVuZGluZ01hbmFnZXJQdWJsaWNLZXkAAAAAAwkAAAEAAAACBQAAAAckbWF0Y2gwAgAAAAZTdHJpbmcEAAAAAXMFAAAAByRtYXRjaDAJAAJZAAAAAQUAAAABcwMJAAABAAAAAgUAAAAHJG1hdGNoMAIAAAAEVW5pdAUAAAAEdW5pdAkAAAIAAAABAgAAAAtNYXRjaCBlcnJvcgEAAAALbXVzdE1hbmFnZXIAAAABAAAAAWkEAAAAAnBkCQAAAgAAAAECAAAAEVBlcm1pc3Npb24gZGVuaWVkBAAAAAckbWF0Y2gwCQEAAAAWbWFuYWdlclB1YmxpY0tleU9yVW5pdAAAAAADCQAAAQAAAAIFAAAAByRtYXRjaDACAAAACkJ5dGVWZWN0b3IEAAAAAnBrBQAAAAckbWF0Y2gwAwkAAAAAAAACCAUAAAABaQAAAA9jYWxsZXJQdWJsaWNLZXkFAAAAAnBrBgUAAAACcGQDCQAAAQAAAAIFAAAAByRtYXRjaDACAAAABFVuaXQDCQAAAAAAAAIIBQAAAAFpAAAABmNhbGxlcgUAAAAEdGhpcwYFAAAAAnBkCQAAAgAAAAECAAAAC01hdGNoIGVycm9yAQAAAAlnZXRBZG1pbnMAAAAABAAAAAckbWF0Y2gwCQAEIgAAAAEJAQAAAA9rZXlBZG1pblB1YktleXMAAAAAAwkAAAEAAAACBQAAAAckbWF0Y2gwAgAAAAZTdHJpbmcEAAAAAXMFAAAAByRtYXRjaDADCQAAAAAAAAIJAAExAAAAAQUAAAABcwAAAAAAAAAAAAUAAAADbmlsCQAEtQAAAAIFAAAAAXMFAAAAA1NFUAUAAAADbmlsAQAAAAltdXN0QWRtaW4AAAABAAAAAWkDCQEAAAAPY29udGFpbnNFbGVtZW50AAAAAgkBAAAACWdldEFkbWlucwAAAAAJAAJYAAAAAQgFAAAAAWkAAAAPY2FsbGVyUHVibGljS2V5BgkBAAAAC211c3RNYW5hZ2VyAAAAAQUAAAABaQEAAAAIbXVzdFBvb2wAAAABAAAAAWkDCQAAAAAAAAIIBQAAAAFpAAAABmNhbGxlcgUAAAAMcG9vbENvbnRyYWN0BgkAAAIAAAABAgAAABdjYWxsZXIgbXVzdCBiZSB0aGUgcG9vbAAAAAYAAAABaQEAAAALY29uc3RydWN0b3IAAAABAAAAC3Bvb2xBZGRyZXNzBAAAAAtjaGVja0NhbGxlcgkBAAAAC211c3RNYW5hZ2VyAAAAAQUAAAABaQMJAAAAAAAAAgUAAAALY2hlY2tDYWxsZXIFAAAAC2NoZWNrQ2FsbGVyCQAETAAAAAIJAQAAAAtTdHJpbmdFbnRyeQAAAAIJAQAAAAtrZXlQb29sQWRkcgAAAAAFAAAAC3Bvb2xBZGRyZXNzBQAAAANuaWwJAAACAAAAAQIAAAAkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuAAAAAWkBAAAACnNldE1hbmFnZXIAAAABAAAAF3BlbmRpbmdNYW5hZ2VyUHVibGljS2V5BAAAAAtjaGVja0NhbGxlcgkBAAAAC211c3RNYW5hZ2VyAAAAAQUAAAABaQMJAAAAAAAAAgUAAAALY2hlY2tDYWxsZXIFAAAAC2NoZWNrQ2FsbGVyBAAAABVjaGVja01hbmFnZXJQdWJsaWNLZXkJAAJZAAAAAQUAAAAXcGVuZGluZ01hbmFnZXJQdWJsaWNLZXkDCQAAAAAAAAIFAAAAFWNoZWNrTWFuYWdlclB1YmxpY0tleQUAAAAVY2hlY2tNYW5hZ2VyUHVibGljS2V5CQAETAAAAAIJAQAAAAtTdHJpbmdFbnRyeQAAAAIJAQAAABprZXlQZW5kaW5nTWFuYWdlclB1YmxpY0tleQAAAAAFAAAAF3BlbmRpbmdNYW5hZ2VyUHVibGljS2V5BQAAAANuaWwJAAACAAAAAQIAAAAkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuCQAAAgAAAAECAAAAJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgAAAAFpAQAAAA5jb25maXJtTWFuYWdlcgAAAAAEAAAAAnBtCQEAAAAdcGVuZGluZ01hbmFnZXJQdWJsaWNLZXlPclVuaXQAAAAABAAAAAVoYXNQTQMJAQAAAAlpc0RlZmluZWQAAAABBQAAAAJwbQYJAAACAAAAAQIAAAASTm8gcGVuZGluZyBtYW5hZ2VyAwkAAAAAAAACBQAAAAVoYXNQTQUAAAAFaGFzUE0EAAAAB2NoZWNrUE0DCQAAAAAAAAIIBQAAAAFpAAAAD2NhbGxlclB1YmxpY0tleQkBAAAABXZhbHVlAAAAAQUAAAACcG0GCQAAAgAAAAECAAAAG1lvdSBhcmUgbm90IHBlbmRpbmcgbWFuYWdlcgMJAAAAAAAAAgUAAAAHY2hlY2tQTQUAAAAHY2hlY2tQTQkABEwAAAACCQEAAAALU3RyaW5nRW50cnkAAAACCQEAAAATa2V5TWFuYWdlclB1YmxpY0tleQAAAAAJAAJYAAAAAQkBAAAABXZhbHVlAAAAAQUAAAACcG0JAARMAAAAAgkBAAAAC0RlbGV0ZUVudHJ5AAAAAQkBAAAAGmtleVBlbmRpbmdNYW5hZ2VyUHVi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", "height": 2208727, "applicationStatus": "succeeded", "spentComplexity": 0 } View: original | compacted Prev: 3USfiyWKP6hGwpzb4JX6JNg4kSZGcS9pHHgT8wWKZzQZ Next: none Diff:
OldNewDifferences
1414 let idxPrAsId = 5
1515
1616 let idxFactStakCntr = 1
17-
18-let delay = "%s__delay"
1917
2018 func keyFactCntr () = "%s__factoryContract"
2119
4442 func keyAmpHistory (height) = ("%s%d__amp__" + toString(height))
4543
4644
47-func lastGetOneTknCall (caller) = makeString(["%s%s__lastGetOneTknCall", caller], SEP)
48-
49-
50-func lastPutOneTknCall (caller) = makeString(["%s%s__lastPutOneTknCall", caller], SEP)
51-
52-
5345 func keyFactoryConfig () = "%s__factoryConfig"
5446
5547
5749
5850
5951 func keyMappingsBaseAsset2internalId (bAStr) = ("%s%s%s__mappings__baseAsset2internalId__" + bAStr)
60-
61-
62-func keyAllowedLpStableAddonScriptHash () = "%s__allowedLpStableAddonScriptHash"
6352
6453
6554 func getStringOrFail (addr,key) = valueOrErrorMessage(getString(addr, key), makeString(["mandatory ", toString(addr), ".", key, " not defined"], ""))
210199 let unstakeInv = invoke(staking, "unstake", [toBase58String(lpAssetId), amount], nil)
211200 if ((unstakeInv == unstakeInv))
212201 then {
213- let getOneTkn = reentrantInvoke(poolContract, "getOneTkn", [exchResult, notUsed, outAmount, outAssetId, slippage], [AttachedPayment(lpAssetId, amount)])
202+ let getOneTkn = invoke(poolContract, "getOneTkn", [exchResult, notUsed, outAmount, outAssetId, slippage], [AttachedPayment(lpAssetId, amount)])
214203 if ((getOneTkn == getOneTkn))
215204 then nil
216205 else throw("Strict value is not equal to itself.")
235224 }
236225
237226
238-
239-@Callable(i)
240-func ensureCanGetOneTkn (caller) = {
241- let checkCaller = mustPool(i)
242- if ((checkCaller == checkCaller))
243- then {
244- let ensureCanPut = match getInteger(poolContract, lastPutOneTknCall(caller)) {
245- case int: Int =>
246- let permittedHeight = (int + value(getInteger(poolContract, delay)))
247- let isReadyforPutOneTkn = (height >= permittedHeight)
248- let needBlocks = (permittedHeight - height)
249- if (isReadyforPutOneTkn)
250- then true
251- else throw(makeString(["you should wait", toString(needBlocks), "blocks more to perform the action"], " "))
252- case _ =>
253- true
254- }
255- if ((ensureCanPut == ensureCanPut))
256- then {
257- let ensureCanGet = match getInteger(poolContract, lastGetOneTknCall(caller)) {
258- case int: Int =>
259- let permittedHeight = (int + value(getInteger(poolContract, delay)))
260- let isReadyforGetOneTkn = (height >= permittedHeight)
261- let needBlocks = (permittedHeight - height)
262- if (isReadyforGetOneTkn)
263- then true
264- else throw(makeString(["you should wait", toString(needBlocks), "blocks more to perform the action"], " "))
265- case _ =>
266- true
267- }
268- if ((ensureCanGet == ensureCanGet))
269- then {
270- let setI = invoke(poolContract, "setI", [lastPutOneTknCall(caller), height], nil)
271- if ((setI == setI))
272- then nil
273- else throw("Strict value is not equal to itself.")
274- }
275- else throw("Strict value is not equal to itself.")
276- }
277- else throw("Strict value is not equal to itself.")
278- }
279- else throw("Strict value is not equal to itself.")
280- }
281-
282-
283-
284-@Callable(i)
285-func ensureCanPutOneTkn (caller) = {
286- let checkCaller = mustPool(i)
287- if ((checkCaller == checkCaller))
288- then {
289- let ensureCanPut = match getInteger(poolContract, lastPutOneTknCall(caller)) {
290- case int: Int =>
291- let permittedHeight = (int + value(getInteger(poolContract, delay)))
292- let isReadyforPutOneTkn = (height >= permittedHeight)
293- let needBlocks = (permittedHeight - height)
294- if (isReadyforPutOneTkn)
295- then true
296- else throw(makeString(["you should wait", toString(needBlocks), "blocks more to perform the action"], " "))
297- case _ =>
298- true
299- }
300- if ((ensureCanPut == ensureCanPut))
301- then {
302- let ensureCanGet = match getInteger(poolContract, lastGetOneTknCall(caller)) {
303- case int: Int =>
304- let permittedHeight = (int + value(getInteger(poolContract, delay)))
305- let isReadyforGetOneTkn = (height >= permittedHeight)
306- let needBlocks = (permittedHeight - height)
307- if (isReadyforGetOneTkn)
308- then true
309- else throw(makeString(["you should wait", toString(needBlocks), "blocks more to perform the action"], " "))
310- case _ =>
311- true
312- }
313- if ((ensureCanGet == ensureCanGet))
314- then {
315- let setI = invoke(poolContract, "setI", [lastPutOneTknCall(caller), height], nil)
316- if ((setI == setI))
317- then nil
318- else throw("Strict value is not equal to itself.")
319- }
320- else throw("Strict value is not equal to itself.")
321- }
322- else throw("Strict value is not equal to itself.")
323- }
324- else throw("Strict value is not equal to itself.")
325- }
326-
327-
328227 @Verifier(tx)
329228 func verify () = {
330229 let targetPublicKey = match managerPublicKeyOrUnit() {
335234 case _ =>
336235 throw("Match error")
337236 }
338- match tx {
339- case s: SetScriptTransaction =>
340- let newHash = blake2b256(value(s.script))
341- let allowedHash = fromBase64String(value(getString(factoryContract, keyAllowedLpStableAddonScriptHash())))
342- let currentHash = scriptHash(this)
343- if (if ((allowedHash == newHash))
344- then (currentHash != newHash)
345- else false)
346- then true
347- else sigVerify(tx.bodyBytes, tx.proofs[0], targetPublicKey)
348- case _ =>
349- sigVerify(tx.bodyBytes, tx.proofs[0], targetPublicKey)
350- }
237+ sigVerify(tx.bodyBytes, tx.proofs[0], targetPublicKey)
351238 }
352239
Full:
OldNewDifferences
11 {-# STDLIB_VERSION 5 #-}
22 {-# SCRIPT_TYPE ACCOUNT #-}
33 {-# CONTENT_TYPE DAPP #-}
44 let SEP = "__"
55
66 let EMPTY = ""
77
88 let idxPoolAddress = 1
99
1010 let idxLPAsId = 3
1111
1212 let idxAmAsId = 4
1313
1414 let idxPrAsId = 5
1515
1616 let idxFactStakCntr = 1
17-
18-let delay = "%s__delay"
1917
2018 func keyFactCntr () = "%s__factoryContract"
2119
2220
2321 func keyManagerPublicKey () = "%s__managerPublicKey"
2422
2523
2624 func keyPendingManagerPublicKey () = "%s__pendingManagerPublicKey"
2725
2826
2927 func keyPoolAddr () = "%s__poolAddress"
3028
3129
3230 func keyAmtAsset () = "%s__amountAsset"
3331
3432
3533 func keyPriceAsset () = "%s__priceAsset"
3634
3735
3836 func keyAdminPubKeys () = "%s__adminPubKeys"
3937
4038
4139 func keyAmp () = "%s__amp"
4240
4341
4442 func keyAmpHistory (height) = ("%s%d__amp__" + toString(height))
4543
4644
47-func lastGetOneTknCall (caller) = makeString(["%s%s__lastGetOneTknCall", caller], SEP)
48-
49-
50-func lastPutOneTknCall (caller) = makeString(["%s%s__lastPutOneTknCall", caller], SEP)
51-
52-
5345 func keyFactoryConfig () = "%s__factoryConfig"
5446
5547
5648 func keyPoolConfig (iAmtAs,iPrAs) = (((("%d%d%s__" + iAmtAs) + "__") + iPrAs) + "__config")
5749
5850
5951 func keyMappingsBaseAsset2internalId (bAStr) = ("%s%s%s__mappings__baseAsset2internalId__" + bAStr)
60-
61-
62-func keyAllowedLpStableAddonScriptHash () = "%s__allowedLpStableAddonScriptHash"
6352
6453
6554 func getStringOrFail (addr,key) = valueOrErrorMessage(getString(addr, key), makeString(["mandatory ", toString(addr), ".", key, " not defined"], ""))
6655
6756
6857 func getIntOrFail (addr,key) = valueOrErrorMessage(getInteger(addr, key), makeString(["mandatory ", toString(addr), ".", key, " not defined"], ""))
6958
7059
7160 let poolContract = addressFromStringValue(getStringOrFail(this, keyPoolAddr()))
7261
7362 let factoryContract = addressFromStringValue(getStringOrFail(poolContract, keyFactCntr()))
7463
7564 func getPoolConfig () = {
7665 let amtAs = getStringOrFail(poolContract, keyAmtAsset())
7766 let priceAs = getStringOrFail(poolContract, keyPriceAsset())
7867 let iPriceAs = getIntOrFail(factoryContract, keyMappingsBaseAsset2internalId(priceAs))
7968 let iAmtAs = getIntOrFail(factoryContract, keyMappingsBaseAsset2internalId(amtAs))
8069 split(getStringOrFail(factoryContract, keyPoolConfig(toString(iAmtAs), toString(iPriceAs))), SEP)
8170 }
8271
8372
8473 func getFactoryConfig () = split(getStringOrFail(factoryContract, keyFactoryConfig()), SEP)
8574
8675
8776 func managerPublicKeyOrUnit () = match getString(keyManagerPublicKey()) {
8877 case s: String =>
8978 fromBase58String(s)
9079 case _: Unit =>
9180 unit
9281 case _ =>
9382 throw("Match error")
9483 }
9584
9685
9786 func pendingManagerPublicKeyOrUnit () = match getString(keyPendingManagerPublicKey()) {
9887 case s: String =>
9988 fromBase58String(s)
10089 case _: Unit =>
10190 unit
10291 case _ =>
10392 throw("Match error")
10493 }
10594
10695
10796 func mustManager (i) = {
10897 let pd = throw("Permission denied")
10998 match managerPublicKeyOrUnit() {
11099 case pk: ByteVector =>
111100 if ((i.callerPublicKey == pk))
112101 then true
113102 else pd
114103 case _: Unit =>
115104 if ((i.caller == this))
116105 then true
117106 else pd
118107 case _ =>
119108 throw("Match error")
120109 }
121110 }
122111
123112
124113 func getAdmins () = match getString(keyAdminPubKeys()) {
125114 case s: String =>
126115 if ((size(s) == 0))
127116 then nil
128117 else split(s, SEP)
129118 case _ =>
130119 nil
131120 }
132121
133122
134123 func mustAdmin (i) = if (containsElement(getAdmins(), toBase58String(i.callerPublicKey)))
135124 then true
136125 else mustManager(i)
137126
138127
139128 func mustPool (i) = if ((i.caller == poolContract))
140129 then true
141130 else throw("caller must be the pool")
142131
143132
144133 @Callable(i)
145134 func constructor (poolAddress) = {
146135 let checkCaller = mustManager(i)
147136 if ((checkCaller == checkCaller))
148137 then [StringEntry(keyPoolAddr(), poolAddress)]
149138 else throw("Strict value is not equal to itself.")
150139 }
151140
152141
153142
154143 @Callable(i)
155144 func setManager (pendingManagerPublicKey) = {
156145 let checkCaller = mustManager(i)
157146 if ((checkCaller == checkCaller))
158147 then {
159148 let checkManagerPublicKey = fromBase58String(pendingManagerPublicKey)
160149 if ((checkManagerPublicKey == checkManagerPublicKey))
161150 then [StringEntry(keyPendingManagerPublicKey(), pendingManagerPublicKey)]
162151 else throw("Strict value is not equal to itself.")
163152 }
164153 else throw("Strict value is not equal to itself.")
165154 }
166155
167156
168157
169158 @Callable(i)
170159 func confirmManager () = {
171160 let pm = pendingManagerPublicKeyOrUnit()
172161 let hasPM = if (isDefined(pm))
173162 then true
174163 else throw("No pending manager")
175164 if ((hasPM == hasPM))
176165 then {
177166 let checkPM = if ((i.callerPublicKey == value(pm)))
178167 then true
179168 else throw("You are not pending manager")
180169 if ((checkPM == checkPM))
181170 then [StringEntry(keyManagerPublicKey(), toBase58String(value(pm))), DeleteEntry(keyPendingManagerPublicKey())]
182171 else throw("Strict value is not equal to itself.")
183172 }
184173 else throw("Strict value is not equal to itself.")
185174 }
186175
187176
188177
189178 @Callable(i)
190179 func setAdmins (adminPubKeys) = {
191180 let checkCaller = mustManager(i)
192181 if ((checkCaller == checkCaller))
193182 then [StringEntry(keyAdminPubKeys(), makeString(adminPubKeys, SEP))]
194183 else throw("Strict value is not equal to itself.")
195184 }
196185
197186
198187
199188 @Callable(i)
200189 func unstakeAndGetOneTkn (amount,exchResult,notUsed,outAmount,outAssetId,slippage) = {
201190 let checkPayments = if ((size(i.payments) != 0))
202191 then throw("No pmnts expd")
203192 else true
204193 if ((checkPayments == checkPayments))
205194 then {
206195 let cfg = getPoolConfig()
207196 let factoryCfg = getFactoryConfig()
208197 let lpAssetId = fromBase58String(cfg[idxLPAsId])
209198 let staking = valueOrErrorMessage(addressFromString(factoryCfg[idxFactStakCntr]), "Wr st addr")
210199 let unstakeInv = invoke(staking, "unstake", [toBase58String(lpAssetId), amount], nil)
211200 if ((unstakeInv == unstakeInv))
212201 then {
213- let getOneTkn = reentrantInvoke(poolContract, "getOneTkn", [exchResult, notUsed, outAmount, outAssetId, slippage], [AttachedPayment(lpAssetId, amount)])
202+ let getOneTkn = invoke(poolContract, "getOneTkn", [exchResult, notUsed, outAmount, outAssetId, slippage], [AttachedPayment(lpAssetId, amount)])
214203 if ((getOneTkn == getOneTkn))
215204 then nil
216205 else throw("Strict value is not equal to itself.")
217206 }
218207 else throw("Strict value is not equal to itself.")
219208 }
220209 else throw("Strict value is not equal to itself.")
221210 }
222211
223212
224213
225214 @Callable(i)
226215 func setAmp (amp) = {
227216 let checkCaller = mustAdmin(i)
228217 if ((checkCaller == checkCaller))
229218 then {
230219 let res1 = invoke(poolContract, "setS", [keyAmp(), amp], nil)
231220 let res2 = invoke(poolContract, "setS", [keyAmpHistory(height), amp], nil)
232221 $Tuple2(nil, $Tuple2(res1, res2))
233222 }
234223 else throw("Strict value is not equal to itself.")
235224 }
236225
237226
238-
239-@Callable(i)
240-func ensureCanGetOneTkn (caller) = {
241- let checkCaller = mustPool(i)
242- if ((checkCaller == checkCaller))
243- then {
244- let ensureCanPut = match getInteger(poolContract, lastPutOneTknCall(caller)) {
245- case int: Int =>
246- let permittedHeight = (int + value(getInteger(poolContract, delay)))
247- let isReadyforPutOneTkn = (height >= permittedHeight)
248- let needBlocks = (permittedHeight - height)
249- if (isReadyforPutOneTkn)
250- then true
251- else throw(makeString(["you should wait", toString(needBlocks), "blocks more to perform the action"], " "))
252- case _ =>
253- true
254- }
255- if ((ensureCanPut == ensureCanPut))
256- then {
257- let ensureCanGet = match getInteger(poolContract, lastGetOneTknCall(caller)) {
258- case int: Int =>
259- let permittedHeight = (int + value(getInteger(poolContract, delay)))
260- let isReadyforGetOneTkn = (height >= permittedHeight)
261- let needBlocks = (permittedHeight - height)
262- if (isReadyforGetOneTkn)
263- then true
264- else throw(makeString(["you should wait", toString(needBlocks), "blocks more to perform the action"], " "))
265- case _ =>
266- true
267- }
268- if ((ensureCanGet == ensureCanGet))
269- then {
270- let setI = invoke(poolContract, "setI", [lastPutOneTknCall(caller), height], nil)
271- if ((setI == setI))
272- then nil
273- else throw("Strict value is not equal to itself.")
274- }
275- else throw("Strict value is not equal to itself.")
276- }
277- else throw("Strict value is not equal to itself.")
278- }
279- else throw("Strict value is not equal to itself.")
280- }
281-
282-
283-
284-@Callable(i)
285-func ensureCanPutOneTkn (caller) = {
286- let checkCaller = mustPool(i)
287- if ((checkCaller == checkCaller))
288- then {
289- let ensureCanPut = match getInteger(poolContract, lastPutOneTknCall(caller)) {
290- case int: Int =>
291- let permittedHeight = (int + value(getInteger(poolContract, delay)))
292- let isReadyforPutOneTkn = (height >= permittedHeight)
293- let needBlocks = (permittedHeight - height)
294- if (isReadyforPutOneTkn)
295- then true
296- else throw(makeString(["you should wait", toString(needBlocks), "blocks more to perform the action"], " "))
297- case _ =>
298- true
299- }
300- if ((ensureCanPut == ensureCanPut))
301- then {
302- let ensureCanGet = match getInteger(poolContract, lastGetOneTknCall(caller)) {
303- case int: Int =>
304- let permittedHeight = (int + value(getInteger(poolContract, delay)))
305- let isReadyforGetOneTkn = (height >= permittedHeight)
306- let needBlocks = (permittedHeight - height)
307- if (isReadyforGetOneTkn)
308- then true
309- else throw(makeString(["you should wait", toString(needBlocks), "blocks more to perform the action"], " "))
310- case _ =>
311- true
312- }
313- if ((ensureCanGet == ensureCanGet))
314- then {
315- let setI = invoke(poolContract, "setI", [lastPutOneTknCall(caller), height], nil)
316- if ((setI == setI))
317- then nil
318- else throw("Strict value is not equal to itself.")
319- }
320- else throw("Strict value is not equal to itself.")
321- }
322- else throw("Strict value is not equal to itself.")
323- }
324- else throw("Strict value is not equal to itself.")
325- }
326-
327-
328227 @Verifier(tx)
329228 func verify () = {
330229 let targetPublicKey = match managerPublicKeyOrUnit() {
331230 case pk: ByteVector =>
332231 pk
333232 case _: Unit =>
334233 tx.senderPublicKey
335234 case _ =>
336235 throw("Match error")
337236 }
338- match tx {
339- case s: SetScriptTransaction =>
340- let newHash = blake2b256(value(s.script))
341- let allowedHash = fromBase64String(value(getString(factoryContract, keyAllowedLpStableAddonScriptHash())))
342- let currentHash = scriptHash(this)
343- if (if ((allowedHash == newHash))
344- then (currentHash != newHash)
345- else false)
346- then true
347- else sigVerify(tx.bodyBytes, tx.proofs[0], targetPublicKey)
348- case _ =>
349- sigVerify(tx.bodyBytes, tx.proofs[0], targetPublicKey)
350- }
237+ sigVerify(tx.bodyBytes, tx.proofs[0], targetPublicKey)
351238 }
352239

github/deemru/w8io/873ac7e 
31.39 ms