tx · DRwt1DT1VHYy7967QPKo7Lu7MiNDJXm39PW5PzWBguVh

3MvfyfQejgDK15c6B4uzPK4W9PdtdY5HPv3:  -0.01400000 Waves

2022.06.06 23:38 [2084982] smart account 3MvfyfQejgDK15c6B4uzPK4W9PdtdY5HPv3 > SELF 0.00000000 Waves

{ "type": 13, "id": "DRwt1DT1VHYy7967QPKo7Lu7MiNDJXm39PW5PzWBguVh", "fee": 1400000, "feeAssetId": null, "timestamp": 1654547977223, "version": 1, "sender": "3MvfyfQejgDK15c6B4uzPK4W9PdtdY5HPv3", "senderPublicKey": "BvVeg8smaC5URu5BzVQBgiAJGww7pTwsKHdiW14QEuAo", "proofs": [ "hXWdkP3JSuaJ1qdKTZ1MkdxLQM7NQVofqe6oh92d1vayHgugFyLMFMrddbqNXuPoPRa9NyxJRefzooCv5b8M3VU" ], "script": "base64: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dAkBAAAAC2tleUZhY3RDbnRyAAAAAAEAAAANZ2V0UG9vbENvbmZpZwAAAAAEAAAABWFtdEFzCQEAAAAPZ2V0U3RyaW5nT3JGYWlsAAAAAgUAAAAMcG9vbENvbnRyYWN0CQEAAAALa2V5QW10QXNzZXQAAAAABAAAAAdwcmljZUFzCQEAAAAPZ2V0U3RyaW5nT3JGYWlsAAAAAgUAAAAMcG9vbENvbnRyYWN0CQEAAAANa2V5UHJpY2VBc3NldAAAAAAEAAAACGlQcmljZUFzCQEAAAAMZ2V0SW50T3JGYWlsAAAAAgUAAAAPZmFjdG9yeUNvbnRyYWN0CQEAAAAfa2V5TWFwcGluZ3NCYXNlQXNzZXQyaW50ZXJuYWxJZAAAAAEFAAAAB3ByaWNlQXMEAAAABmlBbXRBcwkBAAAADGdldEludE9yRmFpbAAAAAIFAAAAD2ZhY3RvcnlDb250cmFjdAkBAAAAH2tleU1hcHBpbmdzQmFzZUFzc2V0MmludGVybmFsSWQAAAABBQAAAAVhbXRBcwkABLUAAAACCQEAAAAPZ2V0U3RyaW5nT3JGYWlsAAAAAgUAAAAPZmFjdG9yeUNvbnRyYWN0CQEAAAANa2V5UG9vbENvbmZpZwAAAAIJAAGkAAAAAQUAAAAGaUFtdEFzCQABpAAAAAEFAAAACGlQcmljZUFzBQAAAANTRVABAAAAEGdldEZhY3RvcnlDb25maWcAAAAACQAEtQAAAAIJAQAAAA9nZXRTdHJpbmdPckZhaWwAAAACBQAAAA9mYWN0b3J5Q29udHJhY3QJAQAAABBrZXlGYWN0b3J5Q29uZmlnAAAAAAUAAAADU0VQAQAAABZtYW5hZ2VyUHVibGljS2V5T3JVbml0AAAAAAQAAAAHJG1hdGNoMAkABCIAAAABCQEAAAATa2V5TWFuYWdlclB1YmxpY0tleQAAAAADCQAAAQAAAAIFAAAAByRtYXRjaDACAAAABlN0cmluZwQAAAABcwUAAAAHJG1hdGNoMAkAAlkAAAABBQAAAAFzAwkAAAEAAAACBQAAAAckbWF0Y2gwAgAAAARVbml0BQAAAAR1bml0CQAAAgAAAAECAAAAC01hdGNoIGVycm9yAQAAAB1wZW5kaW5nTWFuYWdlclB1YmxpY0tleU9yVW5pdAAAAAAEAAAAByRtYXRjaDAJAAQiAAAAAQkBAAAAGmtleVBlbmRpbmdNYW5hZ2VyUHVibGljS2V5AAAAAAMJAAABAAAAAgUAAAAHJG1hdGNoMAIAAAAGU3RyaW5nBAAAAAFzBQAAAAckbWF0Y2gwCQACWQAAAAEFAAAAAXMDCQAAAQAAAAIFAAAAByRtYXRjaDACAAAABFVuaXQFAAAABHVuaXQJAAACAAAAAQIAAAALTWF0Y2ggZXJyb3IBAAAAC211c3RNYW5hZ2VyAAAAAQAAAAFpBAAAAAJwZAkAAAIAAAABAgAAABFQZXJtaXNzaW9uIGRlbmllZAQAAAAHJG1hdGNoMAkBAAAAFm1hbmFnZXJQdWJsaWNLZXlPclVuaXQAAAAAAwkAAAEAAAACBQAAAAckbWF0Y2gwAgAAAApCeXRlVmVjdG9yBAAAAAJwawUAAAAHJG1hdGNoMAMJAAAAAAAAAggFAAAAAWkAAAAPY2FsbGVyUHVibGljS2V5BQAAAAJwawYFAAAAAnBkAwkAAAEAAAACBQAAAAckbWF0Y2gwAgAAAARVbml0AwkAAAAAAAACCAUAAAABaQAAAAZjYWxsZXIFAAAABHRoaXMGBQAAAAJwZAkAAAIAAAABAgAAAAtNYXRjaCBlcnJvcgEAAAAJZ2V0QWRtaW5zAAAAAAQAAAAHJG1hdGNoMAkABCIAAAABCQEAAAAPa2V5QWRtaW5QdWJLZXlzAAAAAAMJAAABAAAAAgUAAAAHJG1hdGNoMAIAAAAGU3RyaW5nBAAAAAFzBQAAAAckbWF0Y2gwAwkAAAAAAAACCQABMQAAAAEFAAAAAXMAAAAAAAAAAAAFAAAAA25pbAkABLUAAAACBQAAAAFzBQAAAANTRVAFAAAAA25pbAEAAAAJbXVzdEFkbWluAAAAAQAAAAFpAwkBAAAAD2NvbnRhaW5zRWxlbWVudAAAAAIJAQAAAAlnZXRBZG1pbnMAAAAACQACWAAAAAEIBQAAAAFpAAAAD2NhbGxlclB1YmxpY0tleQYJAQAAAAttdXN0TWFuYWdlcgAAAAEFAAAAAWkBAAAACG11c3RQb29sAAAAAQAAAAFpAwkAAAAAAAACCAUAAAABaQAAAAZjYWxsZXIFAAAADHBvb2xDb250cmFjdAYJAAACAAAAAQIAAAAXY2FsbGVyIG11c3QgYmUgdGhlIHBvb2wAAAAHAAAAAWkBAAAAC2NvbnN0cnVjdG9yAAAAAQAAAAtwb29sQWRkcmVzcwQAAAALY2hlY2tDYWxsZXIJAQAAAAttdXN0TWFuYWdlcgAAAAEFAAAAAWkDCQAAAAAAAAIFAAAAC2NoZWNrQ2FsbGVyBQAAAAtjaGVja0NhbGxlcgkABEwAAAACCQEAAAALU3RyaW5nRW50cnkAAAACCQEAAAALa2V5UG9vbEFkZHIAAAAABQAAAAtwb29sQWRkcmVzcwUAAAADbmlsCQAAAgAAAAECAAAAJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgAAAAFpAQAAAApzZXRNYW5hZ2VyAAAAAQAAABdwZW5kaW5nTWFuYWdlclB1YmxpY0tleQQAAAALY2hlY2tDYWxsZXIJAQAAAAttdXN0TWFuYWdlcgAAAAEFAAAAAWkDCQAAAAAAAAIFAAAAC2NoZWNrQ2FsbGVyBQAAAAtjaGVja0NhbGxlcgQAAAAVY2hlY2tNYW5hZ2VyUHVibGljS2V5CQACWQAAAAEFAAAAF3BlbmRpbmdNYW5hZ2VyUHVibGljS2V5AwkAAAAAAAACBQAAABVjaGVja01hbmFnZXJQdWJsaWNLZXkFAAAAFWNoZWNrTWFuYWdlclB1YmxpY0tleQkABEwAAAACCQEAAAALU3RyaW5nRW50cnkAAAACCQEAAAAaa2V5UGVuZGluZ01hbmFnZXJQdWJsaWNLZXkAAAAABQAAABdwZW5kaW5nTWFuYWdlclB1YmxpY0tleQUAAAADbmlsCQAAAgAAAAECAAAAJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgkAAAIAAAABAgAAACRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4AAAABaQEAAAAOY29uZmlybU1hbmFnZXIAAAAABAAAAAJwbQkBAAAAHXBlbmRpbmdNYW5hZ2VyUHVibGljS2V5T3JVbml0AAAAAAQAAAAFaGFzUE0DCQEAAAAJaXNEZWZpbmVkAAAAAQUAAAACcG0GCQAAAgAAAAECAAAAEk5vIHBlbmRpbmcgbWFuYWdlcgMJAAAAAAAAAgUAAAAFaGFzUE0FAAAABWhhc1BNBAAAAAdjaGVja1BNAwkAAAAAAAACCAUAAAAB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", "chainId": 84, "height": 2084982, "applicationStatus": "succeeded", "spentComplexity": 0 } View: original | compacted Prev: 2xvq2kj9f56vjx5yhwbvJHYp7fUDynUpihfto617bFkA Next: 3Wf7MgTxWf2gGDSkEagdb4BRcUZ7ubCXXtc1gwqKe52y Diff:
OldNewDifferences
225225 if ((checkCaller == checkCaller))
226226 then {
227227 let res1 = invoke(poolContract, "setS", [keyAmp(), amp], nil)
228- let res2 = invoke(poolContract, "setS", [keyAmpHistory(r), amp], nil)
228+ let res2 = invoke(poolContract, "setS", [keyAmpHistory(height), amp], nil)
229229 $Tuple2(nil, $Tuple2(res1, res2))
230230 }
231231 else throw("Strict value is not equal to itself.")
234234
235235
236236 @Callable(i)
237-func ensureCanGetOneTkn (caller) = {
237+func ensureCanGetOrPutOneTkn (caller) = {
238238 let checkCaller = mustPool(i)
239239 if ((checkCaller == checkCaller))
240240 then {
241241 let ensureCanPut = match getInteger(poolContract, lastPutOneTknCall(caller)) {
242242 case int: Int =>
243243 let permittedHeight = (int + value(getInteger(poolContract, delay)))
244- let isReadyforPutOneTkn = (r >= permittedHeight)
245- let needBlocks = (permittedHeight - r)
244+ let isReadyforPutOneTkn = (height >= permittedHeight)
245+ let needBlocks = (permittedHeight - height)
246246 if (isReadyforPutOneTkn)
247247 then true
248248 else throw(makeString(["you should wait", toString(needBlocks), "blocks more to perform the action"], " "))
254254 let ensureCanGet = match getInteger(poolContract, lastGetOneTknCall(caller)) {
255255 case int: Int =>
256256 let permittedHeight = (int + value(getInteger(poolContract, delay)))
257- let isReadyforGetOneTkn = (r >= permittedHeight)
258- let needBlocks = (permittedHeight - r)
257+ let isReadyforGetOneTkn = (height >= permittedHeight)
258+ let needBlocks = (permittedHeight - height)
259259 if (isReadyforGetOneTkn)
260260 then true
261261 else throw(makeString(["you should wait", toString(needBlocks), "blocks more to perform the action"], " "))
264264 }
265265 if ((ensureCanGet == ensureCanGet))
266266 then {
267- let setI = invoke(poolContract, "setI", [lastPutOneTknCall(caller), r], 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 = (r >= permittedHeight)
290- let needBlocks = (permittedHeight - r)
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 = (r >= permittedHeight)
303- let needBlocks = (permittedHeight - r)
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), r], nil)
267+ let setI = invoke(poolContract, "setI", [lastPutOneTknCall(caller), height], nil)
313268 if ((setI == setI))
314269 then nil
315270 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
1818 let delay = "%s__delay"
1919
2020 func keyFactCntr () = "%s__factoryContract"
2121
2222
2323 func keyManagerPublicKey () = "%s__managerPublicKey"
2424
2525
2626 func keyPendingManagerPublicKey () = "%s__pendingManagerPublicKey"
2727
2828
2929 func keyPoolAddr () = "%s__poolAddress"
3030
3131
3232 func keyAmtAsset () = "%s__amountAsset"
3333
3434
3535 func keyPriceAsset () = "%s__priceAsset"
3636
3737
3838 func keyAdminPubKeys () = "%s__adminPubKeys"
3939
4040
4141 func keyAmp () = "%s__amp"
4242
4343
4444 func keyAmpHistory (height) = ("%s%d__amp__" + toString(height))
4545
4646
4747 func lastGetOneTknCall (caller) = makeString(["%s%s__lastGetOneTknCall", caller], SEP)
4848
4949
5050 func lastPutOneTknCall (caller) = makeString(["%s%s__lastPutOneTknCall", caller], SEP)
5151
5252
5353 func keyFactoryConfig () = "%s__factoryConfig"
5454
5555
5656 func keyPoolConfig (iAmtAs,iPrAs) = (((("%d%d%s__" + iAmtAs) + "__") + iPrAs) + "__config")
5757
5858
5959 func keyMappingsBaseAsset2internalId (bAStr) = ("%s%s%s__mappings__baseAsset2internalId__" + bAStr)
6060
6161
6262 func getStringOrFail (addr,key) = valueOrErrorMessage(getString(addr, key), makeString(["mandatory ", toString(addr), ".", key, " not defined"], ""))
6363
6464
6565 func getIntOrFail (addr,key) = valueOrErrorMessage(getInteger(addr, key), makeString(["mandatory ", toString(addr), ".", key, " not defined"], ""))
6666
6767
6868 let poolContract = addressFromStringValue(getStringOrFail(this, keyPoolAddr()))
6969
7070 let factoryContract = addressFromStringValue(getStringOrFail(poolContract, keyFactCntr()))
7171
7272 func getPoolConfig () = {
7373 let amtAs = getStringOrFail(poolContract, keyAmtAsset())
7474 let priceAs = getStringOrFail(poolContract, keyPriceAsset())
7575 let iPriceAs = getIntOrFail(factoryContract, keyMappingsBaseAsset2internalId(priceAs))
7676 let iAmtAs = getIntOrFail(factoryContract, keyMappingsBaseAsset2internalId(amtAs))
7777 split(getStringOrFail(factoryContract, keyPoolConfig(toString(iAmtAs), toString(iPriceAs))), SEP)
7878 }
7979
8080
8181 func getFactoryConfig () = split(getStringOrFail(factoryContract, keyFactoryConfig()), SEP)
8282
8383
8484 func managerPublicKeyOrUnit () = match getString(keyManagerPublicKey()) {
8585 case s: String =>
8686 fromBase58String(s)
8787 case _: Unit =>
8888 unit
8989 case _ =>
9090 throw("Match error")
9191 }
9292
9393
9494 func pendingManagerPublicKeyOrUnit () = match getString(keyPendingManagerPublicKey()) {
9595 case s: String =>
9696 fromBase58String(s)
9797 case _: Unit =>
9898 unit
9999 case _ =>
100100 throw("Match error")
101101 }
102102
103103
104104 func mustManager (i) = {
105105 let pd = throw("Permission denied")
106106 match managerPublicKeyOrUnit() {
107107 case pk: ByteVector =>
108108 if ((i.callerPublicKey == pk))
109109 then true
110110 else pd
111111 case _: Unit =>
112112 if ((i.caller == this))
113113 then true
114114 else pd
115115 case _ =>
116116 throw("Match error")
117117 }
118118 }
119119
120120
121121 func getAdmins () = match getString(keyAdminPubKeys()) {
122122 case s: String =>
123123 if ((size(s) == 0))
124124 then nil
125125 else split(s, SEP)
126126 case _ =>
127127 nil
128128 }
129129
130130
131131 func mustAdmin (i) = if (containsElement(getAdmins(), toBase58String(i.callerPublicKey)))
132132 then true
133133 else mustManager(i)
134134
135135
136136 func mustPool (i) = if ((i.caller == poolContract))
137137 then true
138138 else throw("caller must be the pool")
139139
140140
141141 @Callable(i)
142142 func constructor (poolAddress) = {
143143 let checkCaller = mustManager(i)
144144 if ((checkCaller == checkCaller))
145145 then [StringEntry(keyPoolAddr(), poolAddress)]
146146 else throw("Strict value is not equal to itself.")
147147 }
148148
149149
150150
151151 @Callable(i)
152152 func setManager (pendingManagerPublicKey) = {
153153 let checkCaller = mustManager(i)
154154 if ((checkCaller == checkCaller))
155155 then {
156156 let checkManagerPublicKey = fromBase58String(pendingManagerPublicKey)
157157 if ((checkManagerPublicKey == checkManagerPublicKey))
158158 then [StringEntry(keyPendingManagerPublicKey(), pendingManagerPublicKey)]
159159 else throw("Strict value is not equal to itself.")
160160 }
161161 else throw("Strict value is not equal to itself.")
162162 }
163163
164164
165165
166166 @Callable(i)
167167 func confirmManager () = {
168168 let pm = pendingManagerPublicKeyOrUnit()
169169 let hasPM = if (isDefined(pm))
170170 then true
171171 else throw("No pending manager")
172172 if ((hasPM == hasPM))
173173 then {
174174 let checkPM = if ((i.callerPublicKey == value(pm)))
175175 then true
176176 else throw("You are not pending manager")
177177 if ((checkPM == checkPM))
178178 then [StringEntry(keyManagerPublicKey(), toBase58String(value(pm))), DeleteEntry(keyPendingManagerPublicKey())]
179179 else throw("Strict value is not equal to itself.")
180180 }
181181 else throw("Strict value is not equal to itself.")
182182 }
183183
184184
185185
186186 @Callable(i)
187187 func setAdmins (adminPubKeys) = {
188188 let checkCaller = mustManager(i)
189189 if ((checkCaller == checkCaller))
190190 then [StringEntry(keyAdminPubKeys(), makeString(adminPubKeys, SEP))]
191191 else throw("Strict value is not equal to itself.")
192192 }
193193
194194
195195
196196 @Callable(i)
197197 func unstakeAndGetOneTkn (amount,exchResult,notUsed,outAmount,outAssetId,slippage) = {
198198 let checkPayments = if ((size(i.payments) != 0))
199199 then throw("No pmnts expd")
200200 else true
201201 if ((checkPayments == checkPayments))
202202 then {
203203 let cfg = getPoolConfig()
204204 let factoryCfg = getFactoryConfig()
205205 let lpAssetId = fromBase58String(cfg[idxLPAsId])
206206 let staking = valueOrErrorMessage(addressFromString(factoryCfg[idxFactStakCntr]), "Wr st addr")
207207 let unstakeInv = invoke(staking, "unstake", [toBase58String(lpAssetId), amount], nil)
208208 if ((unstakeInv == unstakeInv))
209209 then {
210210 let getOneTkn = invoke(poolContract, "getOneTkn", [exchResult, notUsed, outAmount, outAssetId, slippage], [AttachedPayment(lpAssetId, amount)])
211211 if ((getOneTkn == getOneTkn))
212212 then nil
213213 else throw("Strict value is not equal to itself.")
214214 }
215215 else throw("Strict value is not equal to itself.")
216216 }
217217 else throw("Strict value is not equal to itself.")
218218 }
219219
220220
221221
222222 @Callable(i)
223223 func setAmp (amp) = {
224224 let checkCaller = mustAdmin(i)
225225 if ((checkCaller == checkCaller))
226226 then {
227227 let res1 = invoke(poolContract, "setS", [keyAmp(), amp], nil)
228- let res2 = invoke(poolContract, "setS", [keyAmpHistory(r), amp], nil)
228+ let res2 = invoke(poolContract, "setS", [keyAmpHistory(height), amp], nil)
229229 $Tuple2(nil, $Tuple2(res1, res2))
230230 }
231231 else throw("Strict value is not equal to itself.")
232232 }
233233
234234
235235
236236 @Callable(i)
237-func ensureCanGetOneTkn (caller) = {
237+func ensureCanGetOrPutOneTkn (caller) = {
238238 let checkCaller = mustPool(i)
239239 if ((checkCaller == checkCaller))
240240 then {
241241 let ensureCanPut = match getInteger(poolContract, lastPutOneTknCall(caller)) {
242242 case int: Int =>
243243 let permittedHeight = (int + value(getInteger(poolContract, delay)))
244- let isReadyforPutOneTkn = (r >= permittedHeight)
245- let needBlocks = (permittedHeight - r)
244+ let isReadyforPutOneTkn = (height >= permittedHeight)
245+ let needBlocks = (permittedHeight - height)
246246 if (isReadyforPutOneTkn)
247247 then true
248248 else throw(makeString(["you should wait", toString(needBlocks), "blocks more to perform the action"], " "))
249249 case _ =>
250250 true
251251 }
252252 if ((ensureCanPut == ensureCanPut))
253253 then {
254254 let ensureCanGet = match getInteger(poolContract, lastGetOneTknCall(caller)) {
255255 case int: Int =>
256256 let permittedHeight = (int + value(getInteger(poolContract, delay)))
257- let isReadyforGetOneTkn = (r >= permittedHeight)
258- let needBlocks = (permittedHeight - r)
257+ let isReadyforGetOneTkn = (height >= permittedHeight)
258+ let needBlocks = (permittedHeight - height)
259259 if (isReadyforGetOneTkn)
260260 then true
261261 else throw(makeString(["you should wait", toString(needBlocks), "blocks more to perform the action"], " "))
262262 case _ =>
263263 true
264264 }
265265 if ((ensureCanGet == ensureCanGet))
266266 then {
267- let setI = invoke(poolContract, "setI", [lastPutOneTknCall(caller), r], 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 = (r >= permittedHeight)
290- let needBlocks = (permittedHeight - r)
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 = (r >= permittedHeight)
303- let needBlocks = (permittedHeight - r)
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), r], nil)
267+ let setI = invoke(poolContract, "setI", [lastPutOneTknCall(caller), height], nil)
313268 if ((setI == setI))
314269 then nil
315270 else throw("Strict value is not equal to itself.")
316271 }
317272 else throw("Strict value is not equal to itself.")
318273 }
319274 else throw("Strict value is not equal to itself.")
320275 }
321276 else throw("Strict value is not equal to itself.")
322277 }
323278
324279
325280 @Verifier(tx)
326281 func verify () = {
327282 let targetPublicKey = match managerPublicKeyOrUnit() {
328283 case pk: ByteVector =>
329284 pk
330285 case _: Unit =>
331286 tx.senderPublicKey
332287 case _ =>
333288 throw("Match error")
334289 }
335290 sigVerify(tx.bodyBytes, tx.proofs[0], targetPublicKey)
336291 }
337292

github/deemru/w8io/169f3d6 
58.78 ms