tx · 63m3mxgyRFntEVRzGMTAqwtd4imWn2byKev2KhuneFWH

3P5pXRgr8Lo8VM4rF7yQKd7Gcs9dgZvtBK6:  -0.01400000 Waves

2022.06.02 14:24 [3144171] smart account 3P5pXRgr8Lo8VM4rF7yQKd7Gcs9dgZvtBK6 > SELF 0.00000000 Waves

{ "type": 13, "id": "63m3mxgyRFntEVRzGMTAqwtd4imWn2byKev2KhuneFWH", "fee": 1400000, "feeAssetId": null, "timestamp": 1654163064892, "version": 1, "sender": "3P5pXRgr8Lo8VM4rF7yQKd7Gcs9dgZvtBK6", "senderPublicKey": "HvJS3GqvjsSQQGvGK1tPGTrzv53bHB9GPgJofSJmLBKu", "proofs": [ "3GNoTVAdsJt1MThtkerivqW6JSUWe2E1GMTzyUn2w6KiqtAG73Bgd7vYh1XCtJ2M7rehXGtHVNnVVPUHS7hDn778" ], "script": "base64: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bnRyYWN0CQEAAAALa2V5RmFjdENudHIAAAAAAQAAAA1nZXRQb29sQ29uZmlnAAAAAAQAAAAFYW10QXMJAQAAAA9nZXRTdHJpbmdPckZhaWwAAAACBQAAAAxwb29sQ29udHJhY3QJAQAAAAtrZXlBbXRBc3NldAAAAAAEAAAAB3ByaWNlQXMJAQAAAA9nZXRTdHJpbmdPckZhaWwAAAACBQAAAAxwb29sQ29udHJhY3QJAQAAAA1rZXlQcmljZUFzc2V0AAAAAAQAAAAIaVByaWNlQXMJAQAAAAxnZXRJbnRPckZhaWwAAAACBQAAAA9mYWN0b3J5Q29udHJhY3QJAQAAAB9rZXlNYXBwaW5nc0Jhc2VBc3NldDJpbnRlcm5hbElkAAAAAQUAAAAHcHJpY2VBcwQAAAAGaUFtdEFzCQEAAAAMZ2V0SW50T3JGYWlsAAAAAgUAAAAPZmFjdG9yeUNvbnRyYWN0CQEAAAAfa2V5TWFwcGluZ3NCYXNlQXNzZXQyaW50ZXJuYWxJZAAAAAEFAAAABWFtdEFzCQAEtQAAAAIJAQAAAA9nZXRTdHJpbmdPckZhaWwAAAACBQAAAA9mYWN0b3J5Q29udHJhY3QJAQAAAA1rZXlQb29sQ29uZmlnAAAAAgkAAaQAAAABBQAAAAZpQW10QXMJAAGkAAAAAQUAAAAIaVByaWNlQXMFAAAAA1NFUAEAAAAQZ2V0RmFjdG9yeUNvbmZpZwAAAAAJAAS1AAAAAgkBAAAAD2dldFN0cmluZ09yRmFpbAAAAAIFAAAAD2ZhY3RvcnlDb250cmFjdAkBAAAAEGtleUZhY3RvcnlDb25maWcAAAAABQAAAANTRVABAAAAFm1hbmFnZXJQdWJsaWNLZXlPclVuaXQAAAAABAAAAAckbWF0Y2gwCQAEIgAAAAEJAQAAABNrZXlNYW5hZ2VyUHVibGljS2V5AAAAAAMJAAABAAAAAgUAAAAHJG1hdGNoMAIAAAAGU3RyaW5nBAAAAAFzBQAAAAckbWF0Y2gwCQACWQAAAAEFAAAAAXMDCQAAAQAAAAIFAAAAByRtYXRjaDACAAAABFVuaXQFAAAABHVuaXQJAAACAAAAAQIAAAALTWF0Y2ggZXJyb3IBAAAAHXBlbmRpbmdNYW5hZ2VyUHVibGljS2V5T3JVbml0AAAAAAQAAAAHJG1hdGNoMAkABCIAAAABCQEAAAAaa2V5UGVuZGluZ01hbmFnZXJQdWJsaWNLZXkAAAAAAwkAAAEAAAACBQAAAAckbWF0Y2gwAgAAAAZTdHJpbmcEAAAAAXMFAAAAByRtYXRjaDAJAAJZAAAAAQUAAAABcwMJAAABAAAAAgUAAAAHJG1hdGNoMAIAAAAEVW5pdAUAAAAEdW5pdAkAAAIAAAABAgAAAAtNYXRjaCBlcnJvcgEAAAALbXVzdE1hbmFnZXIAAAABAAAAAWkEAAAAAnBkCQAAAgAAAAECAAAAEVBlcm1pc3Npb24gZGVuaWVkBAAAAAckbWF0Y2gwCQEAAAAWbWFuYWdlclB1YmxpY0tleU9yVW5pdAAAAAADCQAAAQAAAAIFAAAAByRtYXRjaDACAAAACkJ5dGVWZWN0b3IEAAAAAnBrBQAAAAckbWF0Y2gwAwkAAAAAAAACCAUAAAABaQAAAA9jYWxsZXJQdWJsaWNLZXkFAAAAAnBrBgUAAAACcGQDCQAAAQAAAAIFAAAAByRtYXRjaDACAAAABFVuaXQDCQAAAAAAAAIIBQAAAAFpAAAABmNhbGxlcgUAAAAEdGhpcwYFAAAAAnBkCQAAAgAAAAECAAAAC01hdGNoIGVycm9yAQAAAAlnZXRBZG1pbnMAAAAABAAAAAckbWF0Y2gwCQAEIgAAAAEJAQAAAA9rZXlBZG1pblB1YktleXMAAAAAAwkAAAEAAAACBQAAAAckbWF0Y2gwAgAAAAZTdHJpbmcEAAAAAXMFAAAAByRtYXRjaDADCQAAAAAAAAIJAAExAAAAAQUAAAABcwAAAAAAAAAAAAUAAAADbmlsCQAEtQAAAAIFAAAAAXMFAAAAA1NFUAUAAAADbmlsAQAAAAltdXN0QWRtaW4AAAABAAAAAWkDCQEAAAAPY29udGFpbnNFbGVtZW50AAAAAgkBAAAACWdldEFkbWlucwAAAAAJAAJYAAAAAQgFAAAAAWkAAAAPY2FsbGVyUHVibGljS2V5BgkBAAAAC211c3RNYW5hZ2VyAAAAAQUAAAABaQEAAAAIbXVzdFBvb2wAAAABAAAAAWkDCQAAAAAAAAIIBQAAAAFpAAAABmNhbGxlcgUAAAAMcG9vbENvbnRyYWN0BgkAAAIAAAABAgAAABdjYWxsZXIgbXVzdCBiZSB0aGUgcG9vbAAAAAgAAAABaQEAAAALY29uc3RydWN0b3IAAAABAAAAC3Bvb2xBZGRyZXNzBAAAAAtjaGVja0NhbGxlcgkBAAAAC211c3RNYW5hZ2VyAAAAAQUAAAABaQMJAAAAAAAAAgUAAAALY2hlY2tDYWxsZXIFAAAAC2NoZWNrQ2FsbGVyCQAETAAAAAIJAQAAAAtTdHJpbmdFbnRyeQAAAAIJAQAAAAtrZXlQb29sQWRkcgAAAAAFAAAAC3Bvb2xBZGRyZXNzBQAAAANuaWwJAAACAAAAAQIAAAAkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuAAAAAWkBAAAACnNldE1hbmFnZXIAAAABAAAAF3BlbmRpbmdNYW5hZ2VyUHVibGljS2V5BAAAAAtjaGVja0NhbGxlcgkBAAAAC211c3RNYW5hZ2VyAAAAAQUAAAABaQMJAAAAAAAAAgUAAAALY2hlY2tDYWxsZXIFAAAAC2NoZWNrQ2FsbGVyBAAAABVjaGVja01hbmFnZXJQdWJsaWNLZXkJAAJZAAAAAQUAAAAXcGVuZGluZ01hbmFnZXJQdWJsaWNLZXkDCQAAAAAAAAIFAAAAFWNoZWNrTWFuYWdlclB1YmxpY0tleQUAAAAVY2hlY2tNYW5hZ2VyUHVibGljS2V5CQAETAAAAAIJAQAAAAtTdHJpbmdFbnRyeQAAAAIJAQAAABprZXlQZW5kaW5nTWFuYWdlclB1YmxpY0tleQAAAAAFAAAAF3BlbmRpbmdNYW5hZ2VyUHVibGljS2V5BQAAAANuaWwJAAACAAAAAQIAAAAkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuCQAAAgAAAAECAAAAJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgAAAAFpAQAAAA5jb25maXJtTWFuYWdlcgAAAAAEAAAAAnBtCQEAAAAdcGVuZGluZ01hbmFnZXJQdWJsaWNLZXlPclVuaXQAAAAABAAAAAVoYXNQTQMJAQAAAAlpc0RlZmluZWQAAAABBQAAAAJwbQYJAAACAAAAAQIAAAASTm8gcGVuZGluZyBtYW5hZ2VyAwkAAAAAAAACBQAAAAVoYXNQTQUAAAAFaGFzUE0EAAAAB2NoZWNrUE0DCQAAAAAAAAII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", "chainId": 87, "height": 3144171, "applicationStatus": "succeeded", "spentComplexity": 0 } View: original | compacted Prev: 36PEf2oEJ96kB4t5G6QwZHn9TW3Y3uxvqAgdnomBAARQ Next: 4AbfG9kyofXkwAneBLZ4xYJQRSXGZGwzqwnTomjRcfHo Diff:
OldNewDifferences
1515
1616 let idxFactStakCntr = 1
1717
18+let delay = "%s__delay"
19+
1820 func keyFactCntr () = "%s__factoryContract"
1921
2022
3133
3234
3335 func keyPriceAsset () = "%s__priceAsset"
36+
37+
38+func keyAdminPubKeys () = "%s__adminPubKeys"
39+
40+
41+func keyAmp () = "%s__amp"
42+
43+
44+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)
3451
3552
3653 func keyFactoryConfig () = "%s__factoryConfig"
101118 }
102119
103120
121+func getAdmins () = match getString(keyAdminPubKeys()) {
122+ case s: String =>
123+ if ((size(s) == 0))
124+ then nil
125+ else split(s, SEP)
126+ case _ =>
127+ nil
128+}
129+
130+
131+func mustAdmin (i) = if (containsElement(getAdmins(), toBase58String(i.callerPublicKey)))
132+ then true
133+ else mustManager(i)
134+
135+
136+func mustPool (i) = if ((i.caller == poolContract))
137+ then true
138+ else throw("caller must be the pool")
139+
140+
104141 @Callable(i)
105142 func constructor (poolAddress) = {
106143 let checkCaller = mustManager(i)
147184
148185
149186 @Callable(i)
187+func setAdmins (adminPubKeys) = {
188+ let checkCaller = mustManager(i)
189+ if ((checkCaller == checkCaller))
190+ then [StringEntry(keyAdminPubKeys(), makeString(adminPubKeys, SEP))]
191+ else throw("Strict value is not equal to itself.")
192+ }
193+
194+
195+
196+@Callable(i)
150197 func unstakeAndGetOneTkn (amount,exchResult,notUsed,outAmount,outAssetId,slippage) = {
151198 let checkPayments = if ((size(i.payments) != 0))
152199 then throw("No pmnts expd")
163210 let getOneTkn = invoke(poolContract, "getOneTkn", [exchResult, notUsed, outAmount, outAssetId, slippage], [AttachedPayment(lpAssetId, amount)])
164211 if ((getOneTkn == getOneTkn))
165212 then nil
213+ else throw("Strict value is not equal to itself.")
214+ }
215+ else throw("Strict value is not equal to itself.")
216+ }
217+ else throw("Strict value is not equal to itself.")
218+ }
219+
220+
221+
222+@Callable(i)
223+func setAmp (amp) = {
224+ let checkCaller = mustAdmin(i)
225+ if ((checkCaller == checkCaller))
226+ then {
227+ let res1 = invoke(poolContract, "setS", [keyAmp(), amp], nil)
228+ let res2 = invoke(poolContract, "setS", [keyAmpHistory(height), amp], nil)
229+ $Tuple2(nil, $Tuple2(res1, res2))
230+ }
231+ else throw("Strict value is not equal to itself.")
232+ }
233+
234+
235+
236+@Callable(i)
237+func ensureCanGetOneTkn (caller) = {
238+ let checkCaller = mustPool(i)
239+ if ((checkCaller == checkCaller))
240+ then {
241+ let ensureCanPut = match getInteger(poolContract, lastPutOneTknCall(caller)) {
242+ case int: Int =>
243+ let permittedHeight = (int + value(getInteger(poolContract, delay)))
244+ let isReadyforPutOneTkn = (height >= permittedHeight)
245+ let needBlocks = (permittedHeight - height)
246+ if (isReadyforPutOneTkn)
247+ then true
248+ else throw(makeString(["you should wait", toString(needBlocks), "blocks more to perform the action"], " "))
249+ case _ =>
250+ true
251+ }
252+ if ((ensureCanPut == ensureCanPut))
253+ then {
254+ let ensureCanGet = match getInteger(poolContract, lastGetOneTknCall(caller)) {
255+ case int: Int =>
256+ let permittedHeight = (int + value(getInteger(poolContract, delay)))
257+ let isReadyforGetOneTkn = (height >= permittedHeight)
258+ let needBlocks = (permittedHeight - height)
259+ if (isReadyforGetOneTkn)
260+ then true
261+ else throw(makeString(["you should wait", toString(needBlocks), "blocks more to perform the action"], " "))
262+ case _ =>
263+ true
264+ }
265+ if ((ensureCanGet == ensureCanGet))
266+ then {
267+ let setI = invoke(poolContract, "setI", [lastPutOneTknCall(caller), height], nil)
268+ if ((setI == setI))
269+ then nil
270+ else throw("Strict value is not equal to itself.")
271+ }
272+ else throw("Strict value is not equal to itself.")
273+ }
274+ else throw("Strict value is not equal to itself.")
275+ }
276+ else throw("Strict value is not equal to itself.")
277+ }
278+
279+
280+
281+@Callable(i)
282+func ensureCanPutOneTkn (caller) = {
283+ let checkCaller = mustPool(i)
284+ if ((checkCaller == checkCaller))
285+ then {
286+ let ensureCanPut = match getInteger(poolContract, lastPutOneTknCall(caller)) {
287+ case int: Int =>
288+ let permittedHeight = (int + value(getInteger(poolContract, delay)))
289+ let isReadyforPutOneTkn = (height >= permittedHeight)
290+ let needBlocks = (permittedHeight - height)
291+ if (isReadyforPutOneTkn)
292+ then true
293+ else throw(makeString(["you should wait", toString(needBlocks), "blocks more to perform the action"], " "))
294+ case _ =>
295+ true
296+ }
297+ if ((ensureCanPut == ensureCanPut))
298+ then {
299+ let ensureCanGet = match getInteger(poolContract, lastGetOneTknCall(caller)) {
300+ case int: Int =>
301+ let permittedHeight = (int + value(getInteger(poolContract, delay)))
302+ let isReadyforGetOneTkn = (height >= permittedHeight)
303+ let needBlocks = (permittedHeight - height)
304+ if (isReadyforGetOneTkn)
305+ then true
306+ else throw(makeString(["you should wait", toString(needBlocks), "blocks more to perform the action"], " "))
307+ case _ =>
308+ true
309+ }
310+ if ((ensureCanGet == ensureCanGet))
311+ then {
312+ let setI = invoke(poolContract, "setI", [lastPutOneTknCall(caller), height], nil)
313+ if ((setI == setI))
314+ then nil
315+ else throw("Strict value is not equal to itself.")
316+ }
166317 else throw("Strict value is not equal to itself.")
167318 }
168319 else throw("Strict value is not equal to itself.")
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
1717
18+let delay = "%s__delay"
19+
1820 func keyFactCntr () = "%s__factoryContract"
1921
2022
2123 func keyManagerPublicKey () = "%s__managerPublicKey"
2224
2325
2426 func keyPendingManagerPublicKey () = "%s__pendingManagerPublicKey"
2527
2628
2729 func keyPoolAddr () = "%s__poolAddress"
2830
2931
3032 func keyAmtAsset () = "%s__amountAsset"
3133
3234
3335 func keyPriceAsset () = "%s__priceAsset"
36+
37+
38+func keyAdminPubKeys () = "%s__adminPubKeys"
39+
40+
41+func keyAmp () = "%s__amp"
42+
43+
44+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)
3451
3552
3653 func keyFactoryConfig () = "%s__factoryConfig"
3754
3855
3956 func keyPoolConfig (iAmtAs,iPrAs) = (((("%d%d%s__" + iAmtAs) + "__") + iPrAs) + "__config")
4057
4158
4259 func keyMappingsBaseAsset2internalId (bAStr) = ("%s%s%s__mappings__baseAsset2internalId__" + bAStr)
4360
4461
4562 func getStringOrFail (addr,key) = valueOrErrorMessage(getString(addr, key), makeString(["mandatory ", toString(addr), ".", key, " not defined"], ""))
4663
4764
4865 func getIntOrFail (addr,key) = valueOrErrorMessage(getInteger(addr, key), makeString(["mandatory ", toString(addr), ".", key, " not defined"], ""))
4966
5067
5168 let poolContract = addressFromStringValue(getStringOrFail(this, keyPoolAddr()))
5269
5370 let factoryContract = addressFromStringValue(getStringOrFail(poolContract, keyFactCntr()))
5471
5572 func getPoolConfig () = {
5673 let amtAs = getStringOrFail(poolContract, keyAmtAsset())
5774 let priceAs = getStringOrFail(poolContract, keyPriceAsset())
5875 let iPriceAs = getIntOrFail(factoryContract, keyMappingsBaseAsset2internalId(priceAs))
5976 let iAmtAs = getIntOrFail(factoryContract, keyMappingsBaseAsset2internalId(amtAs))
6077 split(getStringOrFail(factoryContract, keyPoolConfig(toString(iAmtAs), toString(iPriceAs))), SEP)
6178 }
6279
6380
6481 func getFactoryConfig () = split(getStringOrFail(factoryContract, keyFactoryConfig()), SEP)
6582
6683
6784 func managerPublicKeyOrUnit () = match getString(keyManagerPublicKey()) {
6885 case s: String =>
6986 fromBase58String(s)
7087 case _: Unit =>
7188 unit
7289 case _ =>
7390 throw("Match error")
7491 }
7592
7693
7794 func pendingManagerPublicKeyOrUnit () = match getString(keyPendingManagerPublicKey()) {
7895 case s: String =>
7996 fromBase58String(s)
8097 case _: Unit =>
8198 unit
8299 case _ =>
83100 throw("Match error")
84101 }
85102
86103
87104 func mustManager (i) = {
88105 let pd = throw("Permission denied")
89106 match managerPublicKeyOrUnit() {
90107 case pk: ByteVector =>
91108 if ((i.callerPublicKey == pk))
92109 then true
93110 else pd
94111 case _: Unit =>
95112 if ((i.caller == this))
96113 then true
97114 else pd
98115 case _ =>
99116 throw("Match error")
100117 }
101118 }
102119
103120
121+func getAdmins () = match getString(keyAdminPubKeys()) {
122+ case s: String =>
123+ if ((size(s) == 0))
124+ then nil
125+ else split(s, SEP)
126+ case _ =>
127+ nil
128+}
129+
130+
131+func mustAdmin (i) = if (containsElement(getAdmins(), toBase58String(i.callerPublicKey)))
132+ then true
133+ else mustManager(i)
134+
135+
136+func mustPool (i) = if ((i.caller == poolContract))
137+ then true
138+ else throw("caller must be the pool")
139+
140+
104141 @Callable(i)
105142 func constructor (poolAddress) = {
106143 let checkCaller = mustManager(i)
107144 if ((checkCaller == checkCaller))
108145 then [StringEntry(keyPoolAddr(), poolAddress)]
109146 else throw("Strict value is not equal to itself.")
110147 }
111148
112149
113150
114151 @Callable(i)
115152 func setManager (pendingManagerPublicKey) = {
116153 let checkCaller = mustManager(i)
117154 if ((checkCaller == checkCaller))
118155 then {
119156 let checkManagerPublicKey = fromBase58String(pendingManagerPublicKey)
120157 if ((checkManagerPublicKey == checkManagerPublicKey))
121158 then [StringEntry(keyPendingManagerPublicKey(), pendingManagerPublicKey)]
122159 else throw("Strict value is not equal to itself.")
123160 }
124161 else throw("Strict value is not equal to itself.")
125162 }
126163
127164
128165
129166 @Callable(i)
130167 func confirmManager () = {
131168 let pm = pendingManagerPublicKeyOrUnit()
132169 let hasPM = if (isDefined(pm))
133170 then true
134171 else throw("No pending manager")
135172 if ((hasPM == hasPM))
136173 then {
137174 let checkPM = if ((i.callerPublicKey == value(pm)))
138175 then true
139176 else throw("You are not pending manager")
140177 if ((checkPM == checkPM))
141178 then [StringEntry(keyManagerPublicKey(), toBase58String(value(pm))), DeleteEntry(keyPendingManagerPublicKey())]
142179 else throw("Strict value is not equal to itself.")
143180 }
144181 else throw("Strict value is not equal to itself.")
145182 }
146183
147184
148185
149186 @Callable(i)
187+func setAdmins (adminPubKeys) = {
188+ let checkCaller = mustManager(i)
189+ if ((checkCaller == checkCaller))
190+ then [StringEntry(keyAdminPubKeys(), makeString(adminPubKeys, SEP))]
191+ else throw("Strict value is not equal to itself.")
192+ }
193+
194+
195+
196+@Callable(i)
150197 func unstakeAndGetOneTkn (amount,exchResult,notUsed,outAmount,outAssetId,slippage) = {
151198 let checkPayments = if ((size(i.payments) != 0))
152199 then throw("No pmnts expd")
153200 else true
154201 if ((checkPayments == checkPayments))
155202 then {
156203 let cfg = getPoolConfig()
157204 let factoryCfg = getFactoryConfig()
158205 let lpAssetId = fromBase58String(cfg[idxLPAsId])
159206 let staking = valueOrErrorMessage(addressFromString(factoryCfg[idxFactStakCntr]), "Wr st addr")
160207 let unstakeInv = invoke(staking, "unstake", [toBase58String(lpAssetId), amount], nil)
161208 if ((unstakeInv == unstakeInv))
162209 then {
163210 let getOneTkn = invoke(poolContract, "getOneTkn", [exchResult, notUsed, outAmount, outAssetId, slippage], [AttachedPayment(lpAssetId, amount)])
164211 if ((getOneTkn == getOneTkn))
165212 then nil
213+ else throw("Strict value is not equal to itself.")
214+ }
215+ else throw("Strict value is not equal to itself.")
216+ }
217+ else throw("Strict value is not equal to itself.")
218+ }
219+
220+
221+
222+@Callable(i)
223+func setAmp (amp) = {
224+ let checkCaller = mustAdmin(i)
225+ if ((checkCaller == checkCaller))
226+ then {
227+ let res1 = invoke(poolContract, "setS", [keyAmp(), amp], nil)
228+ let res2 = invoke(poolContract, "setS", [keyAmpHistory(height), amp], nil)
229+ $Tuple2(nil, $Tuple2(res1, res2))
230+ }
231+ else throw("Strict value is not equal to itself.")
232+ }
233+
234+
235+
236+@Callable(i)
237+func ensureCanGetOneTkn (caller) = {
238+ let checkCaller = mustPool(i)
239+ if ((checkCaller == checkCaller))
240+ then {
241+ let ensureCanPut = match getInteger(poolContract, lastPutOneTknCall(caller)) {
242+ case int: Int =>
243+ let permittedHeight = (int + value(getInteger(poolContract, delay)))
244+ let isReadyforPutOneTkn = (height >= permittedHeight)
245+ let needBlocks = (permittedHeight - height)
246+ if (isReadyforPutOneTkn)
247+ then true
248+ else throw(makeString(["you should wait", toString(needBlocks), "blocks more to perform the action"], " "))
249+ case _ =>
250+ true
251+ }
252+ if ((ensureCanPut == ensureCanPut))
253+ then {
254+ let ensureCanGet = match getInteger(poolContract, lastGetOneTknCall(caller)) {
255+ case int: Int =>
256+ let permittedHeight = (int + value(getInteger(poolContract, delay)))
257+ let isReadyforGetOneTkn = (height >= permittedHeight)
258+ let needBlocks = (permittedHeight - height)
259+ if (isReadyforGetOneTkn)
260+ then true
261+ else throw(makeString(["you should wait", toString(needBlocks), "blocks more to perform the action"], " "))
262+ case _ =>
263+ true
264+ }
265+ if ((ensureCanGet == ensureCanGet))
266+ then {
267+ let setI = invoke(poolContract, "setI", [lastPutOneTknCall(caller), height], nil)
268+ if ((setI == setI))
269+ then nil
270+ else throw("Strict value is not equal to itself.")
271+ }
272+ else throw("Strict value is not equal to itself.")
273+ }
274+ else throw("Strict value is not equal to itself.")
275+ }
276+ else throw("Strict value is not equal to itself.")
277+ }
278+
279+
280+
281+@Callable(i)
282+func ensureCanPutOneTkn (caller) = {
283+ let checkCaller = mustPool(i)
284+ if ((checkCaller == checkCaller))
285+ then {
286+ let ensureCanPut = match getInteger(poolContract, lastPutOneTknCall(caller)) {
287+ case int: Int =>
288+ let permittedHeight = (int + value(getInteger(poolContract, delay)))
289+ let isReadyforPutOneTkn = (height >= permittedHeight)
290+ let needBlocks = (permittedHeight - height)
291+ if (isReadyforPutOneTkn)
292+ then true
293+ else throw(makeString(["you should wait", toString(needBlocks), "blocks more to perform the action"], " "))
294+ case _ =>
295+ true
296+ }
297+ if ((ensureCanPut == ensureCanPut))
298+ then {
299+ let ensureCanGet = match getInteger(poolContract, lastGetOneTknCall(caller)) {
300+ case int: Int =>
301+ let permittedHeight = (int + value(getInteger(poolContract, delay)))
302+ let isReadyforGetOneTkn = (height >= permittedHeight)
303+ let needBlocks = (permittedHeight - height)
304+ if (isReadyforGetOneTkn)
305+ then true
306+ else throw(makeString(["you should wait", toString(needBlocks), "blocks more to perform the action"], " "))
307+ case _ =>
308+ true
309+ }
310+ if ((ensureCanGet == ensureCanGet))
311+ then {
312+ let setI = invoke(poolContract, "setI", [lastPutOneTknCall(caller), height], nil)
313+ if ((setI == setI))
314+ then nil
315+ else throw("Strict value is not equal to itself.")
316+ }
166317 else throw("Strict value is not equal to itself.")
167318 }
168319 else throw("Strict value is not equal to itself.")
169320 }
170321 else throw("Strict value is not equal to itself.")
171322 }
172323
173324
174325 @Verifier(tx)
175326 func verify () = {
176327 let targetPublicKey = match managerPublicKeyOrUnit() {
177328 case pk: ByteVector =>
178329 pk
179330 case _: Unit =>
180331 tx.senderPublicKey
181332 case _ =>
182333 throw("Match error")
183334 }
184335 sigVerify(tx.bodyBytes, tx.proofs[0], targetPublicKey)
185336 }
186337

github/deemru/w8io/6500d08 
43.70 ms