tx · 5JdzcedwaPwuQ4WRNwDPpAA6szFyhtSKiusa1vQfoVzo

3PBSXqaADuWWe7PaSo1vDUqz1aewQA6dUTu:  -0.01300000 Waves

2022.10.13 12:24 [3335838] smart account 3PBSXqaADuWWe7PaSo1vDUqz1aewQA6dUTu > SELF 0.00000000 Waves

{ "type": 13, "id": "5JdzcedwaPwuQ4WRNwDPpAA6szFyhtSKiusa1vQfoVzo", "fee": 1300000, "feeAssetId": null, "timestamp": 1665653088420, "version": 1, "sender": "3PBSXqaADuWWe7PaSo1vDUqz1aewQA6dUTu", "senderPublicKey": "3rvLtMkgTXas3CjmLrFtHietFLFbVDb9Qa1dAKAQYYPm", "proofs": [ "2aokUB2Gkw5pyvRuddugCd2BMUUzXonVpL6WGKNeamGthpT1j3ZUD8fSXb15Z3Ktqqq5cgn7Ufc86P3S9v16BFwz" ], "script": "base64:AAIFAAAAAAAAABgIAhIDCgEIEgMKAQgSABIDCgEYEgMKAQgAAAAgAAAAAANTRVACAAAAAl9fAAAAAAVFTVBUWQIAAAAAAAAAAA5pZHhQb29sQWRkcmVzcwAAAAAAAAAAAQAAAAAJaWR4TFBBc0lkAAAAAAAAAAADAAAAAAlpZHhBbUFzSWQAAAAAAAAAAAQAAAAACWlkeFByQXNJZAAAAAAAAAAABQAAAAAPaWR4RmFjdFN0YWtDbnRyAAAAAAAAAAABAQAAAAtrZXlGYWN0Q250cgAAAAACAAAAEyVzX19mYWN0b3J5Q29udHJhY3QBAAAAE2tleU1hbmFnZXJQdWJsaWNLZXkAAAAAAgAAABQlc19fbWFuYWdlclB1YmxpY0tleQEAAAAaa2V5UGVuZGluZ01hbmFnZXJQdWJsaWNLZXkAAAAAAgAAABslc19fcGVuZGluZ01hbmFnZXJQdWJsaWNLZXkBAAAAC2tleVBvb2xBZGRyAAAAAAIAAAAPJXNfX3Bvb2xBZGRyZXNzAQAAAAtrZXlBbXRBc3NldAAAAAACAAAADyVzX19hbW91bnRBc3NldAEAAAANa2V5UHJpY2VBc3NldAAAAAACAAAADiVzX19wcmljZUFzc2V0AQAAAA9rZXlBZG1pblB1YktleXMAAAAAAgAAABAlc19fYWRtaW5QdWJLZXlzAQAAAAZrZXlBbXAAAAAAAgAAAAclc19fYW1wAQAAAA1rZXlBbXBIaXN0b3J5AAAAAQAAAAZoZWlnaHQJAAEsAAAAAgIAAAALJXMlZF9fYW1wX18JAAGkAAAAAQUAAAAGaGVpZ2h0AQAAABBrZXlGYWN0b3J5Q29uZmlnAAAAAAIAAAARJXNfX2ZhY3RvcnlDb25maWcBAAAADWtleVBvb2xDb25maWcAAAACAAAABmlBbXRBcwAAAAVpUHJBcwkAASwAAAACCQABLAAAAAIJAAEsAAAAAgkAASwAAAACAgAAAAglZCVkJXNfXwUAAAAGaUFtdEFzAgAAAAJfXwUAAAAFaVByQXMCAAAACF9fY29uZmlnAQAAAB9rZXlNYXBwaW5nc0Jhc2VBc3NldDJpbnRlcm5hbElkAAAAAQAAAAViQVN0cgkAASwAAAACAgAAACglcyVzJXNfX21hcHBpbmdzX19iYXNlQXNzZXQyaW50ZXJuYWxJZF9fBQAAAAViQVN0cgEAAAAha2V5QWxsb3dlZExwU3RhYmxlQWRkb25TY3JpcHRIYXNoAAAAAAIAAAAiJXNfX2FsbG93ZWRMcFN0YWJsZUFkZG9uU2NyaXB0SGFzaAEAAAAPZ2V0U3RyaW5nT3JGYWlsAAAAAgAAAARhZGRyAAAAA2tleQkBAAAAE3ZhbHVlT3JFcnJvck1lc3NhZ2UAAAACCQAEHQAAAAIFAAAABGFkZHIFAAAAA2tleQkABLkAAAACCQAETAAAAAICAAAACm1hbmRhdG9yeSAJAARMAAAAAgkABCUAAAABBQAAAARhZGRyCQAETAAAAAICAAAAAS4JAARMAAAAAgUAAAADa2V5CQAETAAAAAICAAAADCBub3QgZGVmaW5lZAUAAAADbmlsAgAAAAABAAAADGdldEludE9yRmFpbAAAAAIAAAAEYWRkcgAAAANrZXkJAQAAABN2YWx1ZU9yRXJyb3JNZXNzYWdlAAAAAgkABBoAAAACBQAAAARhZGRyBQAAAANrZXkJAAS5AAAAAgkABEwAAAACAgAAAAptYW5kYXRvcnkgCQAETAAAAAIJAAQlAAAAAQUAAAAEYWRkcgkABEwAAAACAgAAAAEuCQAETAAAAAIFAAAAA2tleQkABEwAAAACAgAAAAwgbm90IGRlZmluZWQFAAAAA25pbAIAAAAAAAAAAAxwb29sQ29udHJhY3QJAQAAABFAZXh0ck5hdGl2ZSgxMDYyKQAAAAEJAQAAAA9nZXRTdHJpbmdPckZhaWwAAAACBQAAAAR0aGlzCQEAAAALa2V5UG9vbEFkZHIAAAAAAAAAAA9mYWN0b3J5Q29udHJhY3QJAQAAABFAZXh0ck5hdGl2ZSgxMDYyKQAAAAEJAQAAAA9nZXRTdHJpbmdPckZhaWwAAAACBQAAAAxwb29sQ29udHJhY3QJAQAAAAtrZXlGYWN0Q250cgAAAAABAAAADWdldFBvb2xDb25maWcAAAAABAAAAAVhbXRBcwkBAAAAD2dldFN0cmluZ09yRmFpbAAAAAIFAAAADHBvb2xDb250cmFjdAkBAAAAC2tleUFtdEFzc2V0AAAAAAQAAAAHcHJpY2VBcwkBAAAAD2dldFN0cmluZ09yRmFpbAAAAAIFAAAADHBvb2xDb250cmFjdAkBAAAADWtleVByaWNlQXNzZXQAAAAABAAAAAhpUHJpY2VBcwkBAAAADGdldEludE9yRmFpbAAAAAIFAAAAD2ZhY3RvcnlDb250cmFjdAkBAAAAH2tleU1hcHBpbmdzQmFzZUFzc2V0MmludGVybmFsSWQAAAABBQAAAAdwcmljZUFzBAAAAAZpQW10QXMJAQAAAAxnZXRJbnRPckZhaWwAAAACBQAAAA9mYWN0b3J5Q29udHJhY3QJAQAAAB9rZXlNYXBwaW5nc0Jhc2VBc3NldDJpbnRlcm5hbElkAAAAAQUAAAAFYW10QXMJAAS1AAAAAgkBAAAAD2dldFN0cmluZ09yRmFpbAAAAAIFAAAAD2ZhY3RvcnlDb250cmFjdAkBAAAADWtleVBvb2xDb25maWcAAAACCQABpAAAAAEFAAAABmlBbXRBcwkAAaQAAAABBQAAAAhpUHJpY2VBcwUAAAADU0VQAQAAABBnZXRGYWN0b3J5Q29uZmlnAAAAAAkABLUAAAACCQEAAAAPZ2V0U3RyaW5nT3JGYWlsAAAAAgUAAAAPZmFjdG9yeUNvbnRyYWN0CQEAAAAQa2V5RmFjdG9yeUNvbmZpZwAAAAAFAAAAA1NFUAEAAAAWbWFuYWdlclB1YmxpY0tleU9yVW5pdAAAAAAEAAAAByRtYXRjaDAJAAQiAAAAAQkBAAAAE2tleU1hbmFnZXJQdWJsaWNLZXkAAAAAAwkAAAEAAAACBQAAAAckbWF0Y2gwAgAAAAZTdHJpbmcEAAAAAXMFAAAAByRtYXRjaDAJAAJZAAAAAQUAAAABcwMJAAABAAAAAgUAAAAHJG1hdGNoMAIAAAAEVW5pdAUAAAAEdW5pdAkAAAIAAAABAgAAAAtNYXRjaCBlcnJvcgEAAAAdcGVuZGluZ01hbmFnZXJQdWJsaWNLZXlPclVuaXQAAAAABAAAAAckbWF0Y2gwCQAEIgAAAAEJAQAAABprZXlQZW5kaW5nTWFuYWdlclB1YmxpY0tleQAAAAADCQAAAQAAAAIFAAAAByRtYXRjaDACAAAABlN0cmluZwQAAAABcwUAAAAHJG1hdGNoMAkAAlkAAAABBQAAAAFzAwkAAAEAAAACBQAAAAckbWF0Y2gwAgAAAARVbml0BQAAAAR1bml0CQAAAgAAAAECAAAAC01hdGNoIGVycm9yAQAAAAttdXN0TWFuYWdlcgAAAAEAAAABaQQAAAACcGQJAAACAAAAAQIAAAARUGVybWlzc2lvbiBkZW5pZWQEAAAAByRtYXRjaDAJAQAAABZtYW5hZ2VyUHVibGljS2V5T3JVbml0AAAAAAMJAAABAAAAAgUAAAAHJG1hdGNoMAIAAAAKQnl0ZVZlY3RvcgQAAAACcGsFAAAAByRtYXRjaDADCQAAAAAAAAIIBQAAAAFpAAAAD2NhbGxlclB1YmxpY0tleQUAAAACcGsGBQAAAAJwZAMJAAABAAAAAgUAAAAHJG1hdGNoMAIAAAAEVW5pdAMJAAAAAAAAAggFAAAAAWkAAAAGY2FsbGVyBQAAAAR0aGlzBgUAAAACcGQJAAACAAAAAQIAAAALTWF0Y2ggZXJyb3IBAAAACWdldEFkbWlucwAAAAAEAAAAByRtYXRjaDAJAAQiAAAAAQkBAAAAD2tleUFkbWluUHViS2V5cwAAAAADCQAAAQAAAAIFAAAAByRtYXRjaDACAAAABlN0cmluZwQAAAABcwUAAAAHJG1hdGNoMAMJAAAAAAAAAgkAATEAAAABBQAAAAFzAAAAAAAAAAAABQAAAANuaWwJAAS1AAAAAgUAAAABcwUAAAADU0VQBQAAAANuaWwBAAAACW11c3RBZG1pbgAAAAEAAAABaQMJAQAAAA9jb250YWluc0VsZW1lbnQAAAACCQEAAAAJZ2V0QWRtaW5zAAAAAAkAAlgAAAABCAUAAAABaQAAAA9jYWxsZXJQdWJsaWNLZXkGCQEAAAALbXVzdE1hbmFnZXIAAAABBQAAAAFpAQAAAAhtdXN0UG9vbAAAAAEAAAABaQMJAAAAAAAAAggFAAAAAWkAAAAGY2FsbGVyBQAAAAxwb29sQ29udHJhY3QGCQAAAgAAAAECAAAAF2NhbGxlciBtdXN0IGJlIHRoZSBwb29sAAAABQAAAAFpAQAAAAtjb25zdHJ1Y3RvcgAAAAEAAAALcG9vbEFkZHJlc3MEAAAAC2NoZWNrQ2FsbGVyCQEAAAALbXVzdE1hbmFnZXIAAAABBQAAAAFpAwkAAAAAAAACBQAAAAtjaGVja0NhbGxlcgUAAAALY2hlY2tDYWxsZXIJAARMAAAAAgkBAAAAC1N0cmluZ0VudHJ5AAAAAgkBAAAAC2tleVBvb2xBZGRyAAAAAAUAAAALcG9vbEFkZHJlc3MFAAAAA25pbAkAAAIAAAABAgAAACRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4AAAABaQEAAAAKc2V0TWFuYWdlcgAAAAEAAAAXcGVuZGluZ01hbmFnZXJQdWJsaWNLZXkEAAAAC2NoZWNrQ2FsbGVyCQEAAAALbXVzdE1hbmFnZXIAAAABBQAAAAFpAwkAAAAAAAACBQAAAAtjaGVja0NhbGxlcgUAAAALY2hlY2tDYWxsZXIEAAAAFWNoZWNrTWFuYWdlclB1YmxpY0tleQkAAlkAAAABBQAAABdwZW5kaW5nTWFuYWdlclB1YmxpY0tleQMJAAAAAAAAAgUAAAAVY2hlY2tNYW5hZ2VyUHVibGljS2V5BQAAABVjaGVja01hbmFnZXJQdWJsaWNLZXkJAARMAAAAAgkBAAAAC1N0cmluZ0VudHJ5AAAAAgkBAAAAGmtleVBlbmRpbmdNYW5hZ2VyUHVibGljS2V5AAAAAAUAAAAXcGVuZGluZ01hbmFnZXJQdWJsaWNLZXkFAAAAA25pbAkAAAIAAAABAgAAACRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4JAAACAAAAAQIAAAAkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuAAAAAWkBAAAADmNvbmZpcm1NYW5hZ2VyAAAAAAQAAAACcG0JAQAAAB1wZW5kaW5nTWFuYWdlclB1YmxpY0tleU9yVW5pdAAAAAAEAAAABWhhc1BNAwkBAAAACWlzRGVmaW5lZAAAAAEFAAAAAnBtBgkAAAIAAAABAgAAABJObyBwZW5kaW5nIG1hbmFnZXIDCQAAAAAAAAIFAAAABWhhc1BNBQAAAAVoYXNQTQQAAAAHY2hlY2tQTQMJAAAAAAAAAggFAAAAAWkAAAAPY2FsbGVyUHVibGljS2V5CQEAAAAFdmFsdWUAAAABBQAAAAJwbQYJAAACAAAAAQIAAAAbWW91IGFyZSBub3QgcGVuZGluZyBtYW5hZ2VyAwkAAAAAAAACBQAAAAdjaGVja1BNBQAAAAdjaGVja1BNCQAETAAAAAIJAQAAAAtTdHJpbmdFbnRyeQAAAAIJAQAAABNrZXlNYW5hZ2VyUHVibGljS2V5AAAAAAkAAlgAAAABCQEAAAAF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", "chainId": 87, "height": 3335838, "applicationStatus": "succeeded", "spentComplexity": 0 } View: original | compacted Prev: DoSbjdG5oKCFFtTWAyVNhAanqtJxT6hYWsSVCwqNsRe9 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
4240
4341
4442 func keyAmpHistory (height) = ("%s%d__amp__" + toString(height))
45-
46-
47-func lastGetOneTknCall (caller) = makeString(["%s%s__lastGetOneTknCall", caller], SEP)
48-
49-
50-func lastPutOneTknCall (caller) = makeString(["%s%s__lastPutOneTknCall", caller], SEP)
5143
5244
5345 func keyFactoryConfig () = "%s__factoryConfig"
197189
198190
199191 @Callable(i)
200-func unstakeAndGetOneTkn (amount,exchResult,notUsed,outAmount,outAssetId,slippage) = {
201- let checkPayments = if ((size(i.payments) != 0))
202- then throw("No pmnts expd")
203- else true
204- if ((checkPayments == checkPayments))
205- then {
206- let cfg = getPoolConfig()
207- let factoryCfg = getFactoryConfig()
208- let lpAssetId = fromBase58String(cfg[idxLPAsId])
209- let staking = valueOrErrorMessage(addressFromString(factoryCfg[idxFactStakCntr]), "Wr st addr")
210- let unstakeInv = invoke(staking, "unstake", [toBase58String(lpAssetId), amount], nil)
211- if ((unstakeInv == unstakeInv))
212- then {
213- let getOneTkn = reentrantInvoke(poolContract, "getOneTkn", [exchResult, notUsed, outAmount, outAssetId, slippage], [AttachedPayment(lpAssetId, amount)])
214- if ((getOneTkn == getOneTkn))
215- then nil
216- else throw("Strict value is not equal to itself.")
217- }
218- else throw("Strict value is not equal to itself.")
219- }
220- else throw("Strict value is not equal to itself.")
221- }
222-
223-
224-
225-@Callable(i)
226192 func setAmp (amp) = {
227193 let checkCaller = mustAdmin(i)
228194 if ((checkCaller == checkCaller))
230196 let res1 = invoke(poolContract, "setS", [keyAmp(), amp], nil)
231197 let res2 = invoke(poolContract, "setS", [keyAmpHistory(height), amp], nil)
232198 $Tuple2(nil, $Tuple2(res1, res2))
233- }
234- else throw("Strict value is not equal to itself.")
235- }
236-
237-
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.")
323199 }
324200 else throw("Strict value is not equal to itself.")
325201 }
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))
45-
46-
47-func lastGetOneTknCall (caller) = makeString(["%s%s__lastGetOneTknCall", caller], SEP)
48-
49-
50-func lastPutOneTknCall (caller) = makeString(["%s%s__lastPutOneTknCall", caller], SEP)
5143
5244
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)
6052
6153
6254 func keyAllowedLpStableAddonScriptHash () = "%s__allowedLpStableAddonScriptHash"
6355
6456
6557 func getStringOrFail (addr,key) = valueOrErrorMessage(getString(addr, key), makeString(["mandatory ", toString(addr), ".", key, " not defined"], ""))
6658
6759
6860 func getIntOrFail (addr,key) = valueOrErrorMessage(getInteger(addr, key), makeString(["mandatory ", toString(addr), ".", key, " not defined"], ""))
6961
7062
7163 let poolContract = addressFromStringValue(getStringOrFail(this, keyPoolAddr()))
7264
7365 let factoryContract = addressFromStringValue(getStringOrFail(poolContract, keyFactCntr()))
7466
7567 func getPoolConfig () = {
7668 let amtAs = getStringOrFail(poolContract, keyAmtAsset())
7769 let priceAs = getStringOrFail(poolContract, keyPriceAsset())
7870 let iPriceAs = getIntOrFail(factoryContract, keyMappingsBaseAsset2internalId(priceAs))
7971 let iAmtAs = getIntOrFail(factoryContract, keyMappingsBaseAsset2internalId(amtAs))
8072 split(getStringOrFail(factoryContract, keyPoolConfig(toString(iAmtAs), toString(iPriceAs))), SEP)
8173 }
8274
8375
8476 func getFactoryConfig () = split(getStringOrFail(factoryContract, keyFactoryConfig()), SEP)
8577
8678
8779 func managerPublicKeyOrUnit () = match getString(keyManagerPublicKey()) {
8880 case s: String =>
8981 fromBase58String(s)
9082 case _: Unit =>
9183 unit
9284 case _ =>
9385 throw("Match error")
9486 }
9587
9688
9789 func pendingManagerPublicKeyOrUnit () = match getString(keyPendingManagerPublicKey()) {
9890 case s: String =>
9991 fromBase58String(s)
10092 case _: Unit =>
10193 unit
10294 case _ =>
10395 throw("Match error")
10496 }
10597
10698
10799 func mustManager (i) = {
108100 let pd = throw("Permission denied")
109101 match managerPublicKeyOrUnit() {
110102 case pk: ByteVector =>
111103 if ((i.callerPublicKey == pk))
112104 then true
113105 else pd
114106 case _: Unit =>
115107 if ((i.caller == this))
116108 then true
117109 else pd
118110 case _ =>
119111 throw("Match error")
120112 }
121113 }
122114
123115
124116 func getAdmins () = match getString(keyAdminPubKeys()) {
125117 case s: String =>
126118 if ((size(s) == 0))
127119 then nil
128120 else split(s, SEP)
129121 case _ =>
130122 nil
131123 }
132124
133125
134126 func mustAdmin (i) = if (containsElement(getAdmins(), toBase58String(i.callerPublicKey)))
135127 then true
136128 else mustManager(i)
137129
138130
139131 func mustPool (i) = if ((i.caller == poolContract))
140132 then true
141133 else throw("caller must be the pool")
142134
143135
144136 @Callable(i)
145137 func constructor (poolAddress) = {
146138 let checkCaller = mustManager(i)
147139 if ((checkCaller == checkCaller))
148140 then [StringEntry(keyPoolAddr(), poolAddress)]
149141 else throw("Strict value is not equal to itself.")
150142 }
151143
152144
153145
154146 @Callable(i)
155147 func setManager (pendingManagerPublicKey) = {
156148 let checkCaller = mustManager(i)
157149 if ((checkCaller == checkCaller))
158150 then {
159151 let checkManagerPublicKey = fromBase58String(pendingManagerPublicKey)
160152 if ((checkManagerPublicKey == checkManagerPublicKey))
161153 then [StringEntry(keyPendingManagerPublicKey(), pendingManagerPublicKey)]
162154 else throw("Strict value is not equal to itself.")
163155 }
164156 else throw("Strict value is not equal to itself.")
165157 }
166158
167159
168160
169161 @Callable(i)
170162 func confirmManager () = {
171163 let pm = pendingManagerPublicKeyOrUnit()
172164 let hasPM = if (isDefined(pm))
173165 then true
174166 else throw("No pending manager")
175167 if ((hasPM == hasPM))
176168 then {
177169 let checkPM = if ((i.callerPublicKey == value(pm)))
178170 then true
179171 else throw("You are not pending manager")
180172 if ((checkPM == checkPM))
181173 then [StringEntry(keyManagerPublicKey(), toBase58String(value(pm))), DeleteEntry(keyPendingManagerPublicKey())]
182174 else throw("Strict value is not equal to itself.")
183175 }
184176 else throw("Strict value is not equal to itself.")
185177 }
186178
187179
188180
189181 @Callable(i)
190182 func setAdmins (adminPubKeys) = {
191183 let checkCaller = mustManager(i)
192184 if ((checkCaller == checkCaller))
193185 then [StringEntry(keyAdminPubKeys(), makeString(adminPubKeys, SEP))]
194186 else throw("Strict value is not equal to itself.")
195187 }
196188
197189
198190
199191 @Callable(i)
200-func unstakeAndGetOneTkn (amount,exchResult,notUsed,outAmount,outAssetId,slippage) = {
201- let checkPayments = if ((size(i.payments) != 0))
202- then throw("No pmnts expd")
203- else true
204- if ((checkPayments == checkPayments))
205- then {
206- let cfg = getPoolConfig()
207- let factoryCfg = getFactoryConfig()
208- let lpAssetId = fromBase58String(cfg[idxLPAsId])
209- let staking = valueOrErrorMessage(addressFromString(factoryCfg[idxFactStakCntr]), "Wr st addr")
210- let unstakeInv = invoke(staking, "unstake", [toBase58String(lpAssetId), amount], nil)
211- if ((unstakeInv == unstakeInv))
212- then {
213- let getOneTkn = reentrantInvoke(poolContract, "getOneTkn", [exchResult, notUsed, outAmount, outAssetId, slippage], [AttachedPayment(lpAssetId, amount)])
214- if ((getOneTkn == getOneTkn))
215- then nil
216- else throw("Strict value is not equal to itself.")
217- }
218- else throw("Strict value is not equal to itself.")
219- }
220- else throw("Strict value is not equal to itself.")
221- }
222-
223-
224-
225-@Callable(i)
226192 func setAmp (amp) = {
227193 let checkCaller = mustAdmin(i)
228194 if ((checkCaller == checkCaller))
229195 then {
230196 let res1 = invoke(poolContract, "setS", [keyAmp(), amp], nil)
231197 let res2 = invoke(poolContract, "setS", [keyAmpHistory(height), amp], nil)
232198 $Tuple2(nil, $Tuple2(res1, res2))
233- }
234- else throw("Strict value is not equal to itself.")
235- }
236-
237-
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.")
323199 }
324200 else throw("Strict value is not equal to itself.")
325201 }
326202
327203
328204 @Verifier(tx)
329205 func verify () = {
330206 let targetPublicKey = match managerPublicKeyOrUnit() {
331207 case pk: ByteVector =>
332208 pk
333209 case _: Unit =>
334210 tx.senderPublicKey
335211 case _ =>
336212 throw("Match error")
337213 }
338214 match tx {
339215 case s: SetScriptTransaction =>
340216 let newHash = blake2b256(value(s.script))
341217 let allowedHash = fromBase64String(value(getString(factoryContract, keyAllowedLpStableAddonScriptHash())))
342218 let currentHash = scriptHash(this)
343219 if (if ((allowedHash == newHash))
344220 then (currentHash != newHash)
345221 else false)
346222 then true
347223 else sigVerify(tx.bodyBytes, tx.proofs[0], targetPublicKey)
348224 case _ =>
349225 sigVerify(tx.bodyBytes, tx.proofs[0], targetPublicKey)
350226 }
351227 }
352228

github/deemru/w8io/3ef1775 
39.53 ms