tx · EP4sVG81wmGjP6gprVZ2nmnyzZCC1NNbTTtNGNe3JmrE

3Mq63YubY7UKJEobhDuXfsnXaPDJZT1fDhx:  -0.01400000 Waves

2021.12.29 19:15 [1855734] smart account 3Mq63YubY7UKJEobhDuXfsnXaPDJZT1fDhx > SELF 0.00000000 Waves

{ "type": 13, "id": "EP4sVG81wmGjP6gprVZ2nmnyzZCC1NNbTTtNGNe3JmrE", "fee": 1400000, "feeAssetId": null, "timestamp": 1640794555561, "version": 2, "chainId": 84, "sender": "3Mq63YubY7UKJEobhDuXfsnXaPDJZT1fDhx", "senderPublicKey": "HXfVyeXgXUtHD3uSP6yjsk6JQcTwmU9qQTvhXzFpPw2T", "proofs": [ "2UeJQp8EeecgmA2VSv9MvUbWMa5HwNvUBvj6iNsw7sV62vffQ1Sus24C3jNmG7NNRFSyhrGeQCKR1L4DRZraGmQT", "5L9QXHsTJQzD76ngxG6YdPnEakKfN9ppqha1vVZS2WN49DzLfgj4RMXVG9DCyCGTDwqhvXjBjmTqwBtVpngdcPh8" ], "script": "base64:AAIFAAAAAAAADsAIAhIDCgEEEgcKBQEBCAgEEgMKAQESAwoBARIAEgMKAQESABIAEgMKAQESBQoDBAEIEgAaFAoBQRIPa2V5QWRtaW5QdWJLZXkyGhQKAUISD2tleUFkbWluUHViS2V5MxoLCgFDEgZvcmFjbGUaEAoBRBILZ2V0QWRtaW5QdWIaEAoBRRILa2V5QWRtaW5QdWIaDAoBRhIHJG1hdGNoMBoLCgFHEgZzdHJpbmcaDAoBSBIHbm90aGluZxoRCgFJEgxhZG1pblB1YktleTEaEQoBShIMYWRtaW5QdWJLZXkyGhEKAUsSDGFkbWluUHViS2V5MxoZCgFMEhRhZG1pblB1YktleVN0YXJ0U3RvcBoXCgFNEhJhZG1pblB1YktleVN0YWtpbmcaEgoBThINd2FsbGV0QWRkcmVzcxoSCgFPEg12b3RpbmdBZGRyZXNzGgkKAVASBFVTRE4aCQoBURIETlNCVBoJCgFSEgRFVVJOGhIKAVMSDXN0YWtpbmdBc3NldHMaGwoBVBIWc3Rha2luZ1VTRE5OU0JUQWRkcmVzcxoXCgFVEhJzdGFraW5nRVVSTkFkZHJlc3MaGQoBVhIUVVNETlRvV2F2ZXNFeGNoYW5nZXIaGAoBVxITVVNETlRvTlNCVEV4Y2hhbmdlchoPCgFYEgpiYXNlUGVyaW9kGhAKAVkSC3N0YXJ0SGVpZ2h0GhEKAVoSDHBlcmlvZExlbmd0aBoMCgFhEgd2ZXJzaW9uGhMKAmFBEg1zdGFrZWRBbW91bnRCGhAKAmFCEgphc3NldEluaXRBGhAKAmFDEgphc3NldEluaXRCGh8KAmFEEhlhY2NvdW50QmFsYW5jZVdpdGhTdGFrZWRBGh8KAmFFEhlhY2NvdW50QmFsYW5jZVdpdGhTdGFrZWRCGhYKAmFGEhBoYXNFbm91Z2hCYWxhbmNlGhIKAmFHEgxnZXRBc3NldEluZm8aDgoCYUgSCHN0cmluZ0lkGgoKAmFJEgRpbmZvGhwKAmFKEhZnZXRBc3NldEluZm9Gcm9tU3RyaW5nGg4KAmFLEghhc3NldFN0choNCgJhTBIHc3VzcGVuZBoLCgJhTRIFY2F1c2UaHgoCYU4SGGNhbGNTdGFraW5nRnVuY0FuZEFkZHJlcxoLCgJhTxIFc3Rha2UaFwoCYVASEWNhbGNTdGFraW5nUGFyYW1zGgwKAmFREgZhbW91bnQaEQoCYVISCyR0MDY5MzA2OTk2GgoKAmFTEgRjYWxsGhEKAmFUEgtzdGFraW5nQWRkchoRCgJhVRILJHQwNzA4MjcxNDgaFwoCYVYSEXN1c3BlbmRTdXNwaWNpb3VzGhIKAmFXEgxmaXJzdEhhcnZlc3QaEQoCYVgSCyR0MDc1Nzk3NjU2GhAKAmFZEgpwbXRBbW91bnRBGhEKAmFaEgtwbXRBc3NldElkQRobCgJhYRIVZmlyc3RIYXJ2ZXN0RW5kUGVyaW9kGg4KAmFiEghpc0FjdGl2ZRoRCgJhYxILc3RyQXNzZXRJZEEaEQoCYWQSC3N0ckFzc2V0SWRCGg4KAmFlEghhc3NldElkQRoOCgJhZhIIYXNzZXRJZEIaEAoCYWcSCmFzc2V0TmFtZUEaCAoCYWgSAmlkGgsKAmFpEgV3YXZlcxoQCgJhahIKYXNzZXROYW1lQhoOCgJhaxIIYmFsYW5jZUEaDgoCYWwSCGJhbGFuY2VCGhIKAmFtEgxzaGFyZUFzc2V0SWQaFgoCYW4SEHNoYXJlQXNzZXRTdXBwbHkaEAoCYW8SCmNvbW1pc3Npb24aHgoCYXASGGNvbW1pc3Npb25TY2FsZURlbGltaXRlchoRCgJhcRILc2NhbGVWYWx1ZTMaEQoCYXISC3NjYWxlVmFsdWU4GiAKAmFzEhpzbGlwcGFnZVRvbGVyYW5jZURlbGltaXRlchoUCgJhdBIOYWNjb3VudEJhbGFuY2UaDQoCYXUSB2Fzc2V0SWQaEgoCYXYSDHN0YWtlZEFtb3VudBocCgJhdxIWc3Rha2VkQW1vdW50Q2FsY3VsYXRlZBoJCgJheBIDYUlkGgcKAmF5EgFpGhMKAmF6Eg1zdGFrZWRBbW91bnRBGg8KAWISCmtleVZlcnNpb24aEwoCYkESDSR0MDEwNTgzMTA2NzAaEAoCYkISCnNoYXJlTGltaXQaFwoCYkMSEXNsaXBwYWdlVG9sZXJhbmNlGhMKAmJEEg0kdDAxMzE2NzEzMjQ0GhMKAmJFEg0kdDAxMzI0OTEzMzI2GhAKAmJGEgp0b2tlblJhdGlvGhkKAmJHEhNyYXRpb1NoYXJlVG9rZW5zSW5BGhkKAmJIEhNyYXRpb1NoYXJlVG9rZW5zSW5CGhsKAmJJEhVzaGFyZVRva2VuVG9QYXlBbW91bnQaEwoCYkoSDSR0MDE4NDk1MTg1NzAaDwoCYksSCXBtdEFtb3VudBoQCgJiTBIKcG10QXNzZXRJZBoSCgJiTRIMYW1vdW50VG9QYXlBGhIKAmJOEgxhbW91bnRUb1BheUIaGAoCYk8SEm1pbkFtb3VudFRvUmVjZWl2ZRoTCgJiUBINJHQwMTk5MjgyMDAwMxoTCgJiURINY2FsY3VsYXRlRmVlcxoPCgJiUhIJdG9rZW5Gcm9tGg0KAmJTEgd0b2tlblRvGhYKAmJUEhBhbW91bnRXaXRob3V0RmVlGhMKAmJVEg1hbW91bnRXaXRoRmVlGhYKAmJWEhBnb3Zlcm5hbmNlUmV3YXJkGhEKAmJXEgthc3NldElkU2VuZBoTCgJiWBINJHQwMjEyNzcyMTM2OBoRCgJiWRILbmV3QmFsYW5jZUEaEQoCYloSC25ld0JhbGFuY2VCGhEKAmJhEgskdDA3NjYxNzczOBoQCgJiYhIKcG10QW1vdW50QhoRCgJiYxILcG10QXNzZXRJZEIaEQoCYmQSCyR0MDc3NDM3ODIwGhQKAmJlEg5wbXRTdHJBc3NldElkQRoTCgJiZhINcG10QXNzZXROYW1lQRoSCgJiZxIMcG10RGVjaW1hbHNBGhEKAmJoEgskdDA3ODI1NzkwMhoUCgJiaRIOcG10U3RyQXNzZXRJZEIaEwoCYmoSDXBtdEFzc2V0TmFtZUIaEgoCYmsSDHBtdERlY2ltYWxzQhoPCgJibBIJc2hhcmVOYW1lGhYKAmJtEhBzaGFyZURlc2NyaXB0aW9uGhMKAmJuEg1zaGFyZURlY2ltYWxzGgoKAmJvEgRhcmcxGgoKAmJwEgRhcmcyGgoKAmJxEgRhcmczGhgKAmJyEhJzaGFyZUluaXRpYWxTdXBwbHkaEAoCYnMSCnNoYXJlSXNzdWUaEgoCYnQSDHNoYXJlSXNzdWVJZBoMCgJidRIGc3Rha2UxGgwKAmJ2EgZzdGFrZTIaDwoCYncSCWJhc2VFbnRyeRoPCgJieBIJYW10QXNzZXRBGg8KAmJ5EglhbXRBc3NldEIaEwoCYnoSDSR0MDEwNDkxMTA1NzgaDgoBYxIJa2V5QWN0aXZlGhgKAmNBEhJhZG1pblB1YktleTJTaWduZWQaGAoCY0ISEmFkbWluUHViS2V5M1NpZ25lZBoZCgJjQxITY2FsbFRha2VJbnRvQWNjb3VudBoVCgJjRBIPZXhjaGFuZ2VUb1dhdmVzGhUKAmNFEg9leGNoYW5nZVRvTlNCVHMaEwoCY0YSDXNpZ25lZEJ5QWRtaW4aEwoCY2ESDSR0MDIyMzIzMjI0MTQaEQoCY2ISC2Ftb3VudExlYXZlGiMKAmNjEh11bmNvdW50YWJsZUFtb3VudEVucm9sbEFzc2V0QRojCgJjZBIddW5jb3VudGFibGVBbW91bnRFbnJvbGxBc3NldEIaEwoCY2USDWFtb3VudEVucm9sbEEaEwoCY2YSDWFtb3VudEVucm9sbEIaEwoCY2cSDWFzc2V0SWRTdHJpbmcaCgoCY2gSBHBvb2waDwoCY2kSCWxlYXNpbmdJZBoTCgJjahINbGVhc2luZ0Ftb3VudBoUCgJjaxIObmV3TGVhc2VBbW91bnQaDgoCY2wSCG5ld0xlYXNlGhAKAmNtEgpuZXdMZWFzZUlkGg4KAmNuEghiYXNlRXRyeRoJCgJjbxIDbElkGhMKAmNwEg0kdDAyNjY1MjI2NzU1GgoKAmNxEgRhZGRyGgwKAmNyEgZwYXJhbXMaDgoCY3MSCHBheW1lbnRzGgkKAmN0EgNpbnYaDQoCY3USB2Ftb3VudEEaDQoCY3YSB2Ftb3VudEIaCAoCY3cSAnR4GgwKAmN4EgZ2ZXJpZnkaGQoCY3kSE211bHRpU2lnbmVkQnlBZG1pbnMaGAoCY3oSEmFkbWluUHViS2V5MVNpZ25lZBoQCgFkEgtrZXlBc3NldElkQRoQCgFlEgtrZXlBc3NldElkQhoQCgFmEgtrZXlCYWxhbmNlQRoQCgFnEgtrZXlCYWxhbmNlQhoUCgFoEg9rZXlCYWxhbmNlSW5pdEEaFAoBaRIPa2V5QmFsYW5jZUluaXRCGhQKAWoSD2tleVNoYXJlQXNzZXRJZBoYCgFrEhNrZXlTaGFyZUFzc2V0U3VwcGx5GhIKAWwSDWtleUNvbW1pc3Npb24aIAoBbRIba2V5Q29tbWlzc2lvblNjYWxlRGVsaW1pdGVyGg0KAW4SCGtleUNhdXNlGhQKAW8SD2tleUZpcnN0SGFydmVzdBoaCgFwEhVrZXlGaXJzdEhhcnZlc3RIZWlnaHQaEAoBcRILa1NoYXJlTGltaXQaEAoBchILa0Jhc2VQZXJpb2QaEgoBcxINa1BlcmlvZExlbmd0aBoRCgF0EgxrU3RhcnRIZWlnaHQaFwoBdRISa2V5VVNETk5TQlRBZGRyZXNzGhMKAXYSDmtleUVVUk5BZGRyZXNzGhMKAXcSDmtleUxlYXNpbmdQb29sGhUKAXgSEGtleUxlYXNpbmdBbW91bnQaEQoBeRIMa2V5TGVhc2luZ0lkGhQKAXoSD2tleUFkbWluUHViS2V5MQAAAFAAAAAAAWECAAAABTEuMC4wAAAAAAFiAgAAAAd2ZXJzaW9uAAAAAAFjAgAAAAZhY3RpdmUAAAAAAWQCAAAACkFfYXNzZXRfaWQAAAAAAWUCAAAACkJfYXNzZXRfaWQAAAAAAWYCAAAAD0FfYXNzZXRfYmFsYW5jZQAAAAABZwIAAAAPQl9hc3NldF9iYWxhbmNlAAAAAAFoAgAAAAxBX2Fzc2V0X2luaXQAAAAAAWkCAAAADEJfYXNzZXRfaW5pdAAAAAABagIAAAAOc2hhcmVfYXNzZXRfaWQAAAAAAWsCAAAAEnNoYXJlX2Fzc2V0X3N1cHBseQAAAAABbAIAAAAKY29tbWlzc2lvbgAAAAABbQIAAAAaY29tbWlzc2lvbl9zY2FsZV9kZWxpbWl0ZXIAAAAAAW4CAAAADnNodXRkb3duX2NhdXNlAAAAAAFvAgAAAA1maXJzdF9oYXJ2ZXN0AAAAAAFwAgAAABRmaXJzdF9oYXJ2ZXN0X2hlaWdodAAAAAABcQIAAAAcc2hhcmVfbGltaXRfb25fZmlyc3RfaGFydmVzdAAAAAABcgIAAAALYmFzZV9wZXJpb2QAAAAAAXMCAAAADXBlcmlvZF9sZW5ndGgAAAAAAXQCAAAADHN0YXJ0X2hlaWdodAAAAAABdQIAAAAYc3Rha2luZ191c2RubnNidF9hZGRyZXNzAAAAAAF2AgAAABRzdGFraW5nX2V1cm5fYWRkcmVzcwAAAAABdwIAAAAPbGVhc2luZ19hZGRyZXNzAAAAAAF4AgAAAA5sZWFzaW5nX2Ftb3VudAAAAAABeQIAAAAKbGVhc2luZ19pZAAAAAABegIAAAALYWRtaW5fcHViXzEAAAAAAUECAAAAC2FkbWluX3B1Yl8yAAAAAAFCAgAAAAthZG1pbl9wdWJfMwAAAAABQwkBAAAAB0Fk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", "height": 1855734, "applicationStatus": "succeeded", "spentComplexity": 0 } View: original | compacted Prev: 269JkUQbjcwiHcSmcSz2fWZsuNFA9VVsioiztQz6ryo5 Next: 8rYiFi2o9kjEz3Z3JKP8AvKttrKcfT4sRexurNmsGQfs Diff:
OldNewDifferences
225225
226226 let aC = getIntegerValue(this, i)
227227
228-let aD = (ak - az)
228+let aD = (at(ae) + az)
229229
230-let aE = (al - aA)
230+let aE = (at(af) + aA)
231231
232-let aF = (at(ae) + az)
233-
234-let aG = (at(af) + aA)
235-
236-let aH = if ((aF >= ak))
237- then (aG >= al)
232+let aF = if ((aD >= ak))
233+ then (aE >= al)
238234 else false
239235
240-func aI (au) = {
236+func aG (au) = {
241237 let F = au
242238 if ($isInstanceOf(F, "ByteVector"))
243239 then {
244240 let ah = F
245- let aJ = toBase58String(ah)
246- let aK = valueOrErrorMessage(assetInfo(ah), (("Asset " + aJ) + " doesn't exist"))
247- $Tuple3(aJ, aK.name, aK.decimals)
241+ let aH = toBase58String(ah)
242+ let aI = valueOrErrorMessage(assetInfo(ah), (("Asset " + aH) + " doesn't exist"))
243+ $Tuple3(aH, aI.name, aI.decimals)
248244 }
249245 else if ($isInstanceOf(F, "Unit"))
250246 then {
255251 }
256252
257253
258-func aL (aM) = if ((aM == "WAVES"))
254+func aJ (aK) = if ((aK == "WAVES"))
259255 then $Tuple3("WAVES", "WAVES", 8)
260256 else {
261- let aJ = aM
262- let ah = fromBase58String(aM)
263- let aK = valueOrErrorMessage(assetInfo(ah), (("Asset " + aJ) + " doesn't exist"))
264- $Tuple3(aJ, aK.name, aK.decimals)
257+ let aH = aK
258+ let ah = fromBase58String(aK)
259+ let aI = valueOrErrorMessage(assetInfo(ah), (("Asset " + aH) + " doesn't exist"))
260+ $Tuple3(aH, aI.name, aI.decimals)
265261 }
266262
267263
268-func aN (aO) = [BooleanEntry(c, false), StringEntry(n, aO)]
264+func aL (aM) = [BooleanEntry(c, false), StringEntry(n, aM)]
269265
270266
271-func aP (aQ,au) = if (aQ)
267+func aN (aO,au) = if (aO)
272268 then if ((au == P))
273269 then $Tuple2("lockNeutrino", T)
274270 else if ((au == Q))
281277 else $Tuple2("stopStaking", U)
282278
283279
284-func aR (aQ,aS,au) = if (aQ)
280+func aP (aO,aQ,au) = if (aO)
285281 then {
286- let aT = aP(aQ, au)
287- let aU = aT._1
288- let aV = aT._2
289- $Tuple4(aU, aV, nil, [AttachedPayment(au, aS)])
282+ let aR = aN(aO, au)
283+ let aS = aR._1
284+ let aT = aR._2
285+ $Tuple4(aS, aT, nil, [AttachedPayment(au, aQ)])
290286 }
291287 else {
292- let aW = aP(aQ, au)
293- let aU = aW._1
294- let aV = aW._2
295- $Tuple4(aU, aV, [aS, toBase58String(au)], nil)
288+ let aU = aN(aO, au)
289+ let aS = aU._1
290+ let aT = aU._2
291+ $Tuple4(aS, aT, [aQ, toBase58String(au)], nil)
296292 }
297293
298294
299-func aX (aS,aY,aZ) = throw((((((((("Insufficient DApp balance to pay " + toString(aS)) + " ") + aZ) + " due to staking. Available: ") + toString(aY)) + " ") + aZ) + ". Please contact support in Telegram: https://t.me/swopfisupport"))
300-
301-
302-func ba (bb,bc) = throw((((((((((((((((("Insufficient DApp balance to pay " + toString(bb)) + " ") + ag) + " and ") + toString(bc)) + " ") + aj) + " due to staking. Available: ") + toString(aD)) + " ") + ag) + " and ") + toString(aE)) + " ") + aj) + ". Please contact support in Telegram: https://t.me/swopfisupport"))
303-
304-
305-func bd () = aN(((((((((((((((("Suspicious state. Actual balances: " + toString(aF)) + " ") + ag) + ", ") + toString(aG)) + " ") + aj) + ". State: ") + toString(ak)) + " ") + ag) + ", ") + toString(al)) + " ") + aj))
295+func aV () = aL(((((((((((((((("Suspicious state. Actual balances: " + toString(aD)) + " ") + ag) + ", ") + toString(aE)) + " ") + aj) + ". State: ") + toString(ak)) + " ") + ag) + ", ") + toString(al)) + " ") + aj))
306296
307297
308298 @Callable(ay)
309-func init (be) = {
310- let bf = $Tuple2(ay.payments[0].amount, ay.payments[0].assetId)
311- let bg = bf._1
312- let bh = bf._2
313- let bi = $Tuple2(ay.payments[1].amount, ay.payments[1].assetId)
314- let bj = bi._1
315- let bk = bi._2
316- let bl = aI(bh)
317- let bm = bl._1
318- let bn = bl._2
319- let bo = bl._3
320- let bp = aI(bk)
321- let bq = bp._1
322- let br = bp._2
323- let bs = bp._3
299+func init (aW) = {
300+ let aX = $Tuple2(ay.payments[0].amount, ay.payments[0].assetId)
301+ let aY = aX._1
302+ let aZ = aX._2
303+ let ba = $Tuple2(ay.payments[1].amount, ay.payments[1].assetId)
304+ let bb = ba._1
305+ let bc = ba._2
306+ let bd = aG(aZ)
307+ let be = bd._1
308+ let bf = bd._2
309+ let bg = bd._3
310+ let bh = aG(bc)
311+ let bi = bh._1
312+ let bj = bh._2
313+ let bk = bh._3
324314 if (!(containsElement([I, J, K, M], ay.callerPublicKey)))
325315 then throw("Only admin can call this function")
326316 else if (isDefined(getBoolean(this, c)))
327317 then throw("DApp is already active")
328- else if ((bh == bk))
318+ else if ((aZ == bc))
329319 then throw("Assets must be different")
330320 else {
331- let bt = ((("s" + take(bn, 7)) + "_") + take(br, 7))
332- let bu = ((((("ShareToken of SwopFi protocol for " + bn) + " and ") + br) + " at address ") + toString(this))
333- let bv = ((bo + bs) / 2)
334- let bw = pow(bg, bo, 5, 1, bo, DOWN)
335- let bx = pow(bj, bs, 5, 1, bs, DOWN)
336- let by = pow(10, 0, bv, 0, 0, DOWN)
337- let bz = fraction(bw, bx, by)
338- let bA = Issue(bt, bu, bz, bv, true)
339- let bB = calculateAssetId(bA)
340- let bC = if (containsElement(S, bm))
341- then invoke(this, "stakeUnstake", [true, bg, bm], nil)
321+ let bl = ((("s" + take(bf, 7)) + "_") + take(bj, 7))
322+ let bm = ((((("ShareToken of SwopFi protocol for " + bf) + " and ") + bj) + " at address ") + toString(this))
323+ let bn = ((bg + bk) / 2)
324+ let bo = pow(aY, bg, 5, 1, bg, DOWN)
325+ let bp = pow(bb, bk, 5, 1, bk, DOWN)
326+ let bq = pow(10, 0, bn, 0, 0, DOWN)
327+ let br = fraction(bo, bp, bq)
328+ let bs = Issue(bl, bm, br, bn, true)
329+ let bt = calculateAssetId(bs)
330+ let bu = if (containsElement(S, be))
331+ then invoke(this, "stakeUnstake", [true, aY, be], nil)
342332 else 0
343- if ((bC == bC))
333+ if ((bu == bu))
344334 then {
345- let bD = if (containsElement(S, bq))
346- then invoke(this, "stakeUnstake", [true, bj, bq], nil)
335+ let bv = if (containsElement(S, bi))
336+ then invoke(this, "stakeUnstake", [true, bb, bi], nil)
347337 else 0
348- if ((bD == bD))
338+ if ((bv == bv))
349339 then {
350- let bE = [StringEntry(b, a), BooleanEntry(c, true), StringEntry(d, bm), StringEntry(e, bq), IntegerEntry(f, bg), IntegerEntry(g, bj), IntegerEntry(l, ao), IntegerEntry(m, ap), bA, StringEntry(j, toBase58String(bB)), IntegerEntry(k, bz), ScriptTransfer(ay.caller, bz, bB)]
351- if (be)
352- then (bE ++ [BooleanEntry(o, be), IntegerEntry(p, (Y + (aa * Z)))])
353- else bE
340+ let bw = [StringEntry(b, a), BooleanEntry(c, true), StringEntry(d, be), StringEntry(e, bi), IntegerEntry(f, aY), IntegerEntry(g, bb), IntegerEntry(l, ao), IntegerEntry(m, ap), bs, StringEntry(j, toBase58String(bt)), IntegerEntry(k, br), ScriptTransfer(ay.caller, br, bt)]
341+ if (aW)
342+ then (bw ++ [BooleanEntry(o, aW), IntegerEntry(p, (Y + (aa * Z)))])
343+ else bw
354344 }
355345 else throw("Strict value is not equal to itself.")
356346 }
361351
362352
363353 @Callable(ay)
364-func initWithInitRatio (bF,bG,ac,ad,be) = {
365- let bH = aL(ac)
366- let bm = bH._1
367- let bn = bH._2
368- let bo = bH._3
369- let bI = aL(ad)
370- let bq = bI._1
371- let br = bI._2
372- let bs = bI._3
354+func initWithInitRatio (bx,by,ac,ad,aW) = {
355+ let bz = aJ(ac)
356+ let be = bz._1
357+ let bf = bz._2
358+ let bg = bz._3
359+ let bA = aJ(ad)
360+ let bi = bA._1
361+ let bj = bA._2
362+ let bk = bA._3
373363 if (!(containsElement([I, J, K, M], ay.callerPublicKey)))
374364 then throw("Only admin can call this function")
375365 else if (isDefined(getBoolean(this, c)))
377367 else if ((ac == ad))
378368 then throw("Assets must be different")
379369 else {
380- let bt = ((("s" + take(bn, 7)) + "_") + take(br, 7))
381- let bu = ((((("ShareToken of SwopFi protocol for " + bn) + " and ") + br) + " at address ") + toString(this))
382- let bv = ((bo + bs) / 2)
383- let bz = 0
384- let bA = Issue(bt, bu, bz, bv, true)
385- let bB = calculateAssetId(bA)
386- let bE = [StringEntry(b, a), BooleanEntry(c, true), StringEntry(d, bm), StringEntry(e, bq), IntegerEntry(h, bF), IntegerEntry(i, bG), IntegerEntry(f, 0), IntegerEntry(g, 0), IntegerEntry(l, ao), IntegerEntry(m, ap), bA, StringEntry(j, toBase58String(bB)), IntegerEntry(k, bz)]
387- if (be)
388- then (bE ++ [BooleanEntry(o, be), IntegerEntry(p, (Y + (aa * Z)))])
389- else bE
370+ let bl = ((("s" + take(bf, 7)) + "_") + take(bj, 7))
371+ let bm = ((((("ShareToken of SwopFi protocol for " + bf) + " and ") + bj) + " at address ") + toString(this))
372+ let bn = ((bg + bk) / 2)
373+ let br = 0
374+ let bs = Issue(bl, bm, br, bn, true)
375+ let bt = calculateAssetId(bs)
376+ let bw = [StringEntry(b, a), BooleanEntry(c, true), StringEntry(d, be), StringEntry(e, bi), IntegerEntry(h, bx), IntegerEntry(i, by), IntegerEntry(f, 0), IntegerEntry(g, 0), IntegerEntry(l, ao), IntegerEntry(m, ap), bs, StringEntry(j, toBase58String(bt)), IntegerEntry(k, br)]
377+ if (aW)
378+ then (bw ++ [BooleanEntry(o, aW), IntegerEntry(p, (Y + (aa * Z)))])
379+ else bw
390380 }
391381 }
392382
393383
394384
395385 @Callable(ay)
396-func keepLimitForFirstHarvest (bJ) = if (!(ab))
386+func keepLimitForFirstHarvest (bB) = if (!(ab))
397387 then throw("DApp is inactive at this moment")
398388 else if (!(containsElement([I, J, K, M], ay.callerPublicKey)))
399389 then throw("Only admin can call this function")
400- else [IntegerEntry(q, bJ)]
390+ else [IntegerEntry(q, bB)]
401391
402392
403393
404394 @Callable(ay)
405-func replenishWithTwoTokens (bK) = {
406- let bh = ay.payments[0].assetId
407- let bk = ay.payments[1].assetId
408- let bg = ay.payments[0].amount
409- let bj = ay.payments[1].amount
410- let bL = aI(bh)
411- let bm = bL._1
412- let bn = bL._2
413- let bo = bL._3
414- let bM = aI(bk)
415- let bq = bM._1
416- let br = bM._2
417- let bs = bM._3
395+func replenishWithTwoTokens (bC) = {
396+ let aZ = ay.payments[0].assetId
397+ let bc = ay.payments[1].assetId
398+ let aY = ay.payments[0].amount
399+ let bb = ay.payments[1].amount
400+ let bD = aG(aZ)
401+ let be = bD._1
402+ let bf = bD._2
403+ let bg = bD._3
404+ let bE = aG(bc)
405+ let bi = bE._1
406+ let bj = bE._2
407+ let bk = bE._3
418408 if (if ((ak == 0))
419409 then (al == 0)
420410 else false)
421411 then {
422- let bN = fraction(fraction(aB, ar, bg), aq, fraction(aC, ar, bj))
423- if ((bh == bk))
412+ let bF = fraction(fraction(aB, ar, aY), aq, fraction(aC, ar, bb))
413+ if ((aZ == bc))
424414 then throw("Assets must be different")
425415 else {
426- let bv = ((bo + bs) / 2)
427- let bz = fraction(pow(bg, bo, 5, 1, bo, DOWN), pow(bj, bs, 5, 1, bs, DOWN), pow(10, 0, bv, 0, 0, DOWN))
416+ let bn = ((bg + bk) / 2)
417+ let br = fraction(pow(aY, bg, 5, 1, bg, DOWN), pow(bb, bk, 5, 1, bk, DOWN), pow(10, 0, bn, 0, 0, DOWN))
428418 if (!(ab))
429419 then throw("DApp is inactive at this moment")
430- else if (if ((0 > bK))
420+ else if (if ((0 > bC))
431421 then true
432- else (bK > as))
433- then throw(((("Slippage tolerance must be between 0 and " + toString(as)) + " inclusively. Actual: ") + toString(bK)))
422+ else (bC > as))
423+ then throw(((("Slippage tolerance must be between 0 and " + toString(as)) + " inclusively. Actual: ") + toString(bC)))
434424 else if ((size(ay.payments) != 2))
435425 then throw("Two attached assets expected")
436- else if (if ((((aq * (as - bK)) / as) > bN))
426+ else if (if ((((aq * (as - bC)) / as) > bF))
437427 then true
438- else (bN > ((aq * (as + bK)) / as)))
428+ else (bF > ((aq * (as + bC)) / as)))
439429 then throw("Incorrect assets amount: amounts must have the contract ratio")
440- else if (if ((bh != ae))
430+ else if (if ((aZ != ae))
441431 then true
442- else (bk != af))
432+ else (bc != af))
443433 then throw(((("Incorrect assets attached. Expected: " + ac) + " and ") + ad))
444- else if ((bz == 0))
434+ else if ((br == 0))
445435 then throw("Too small amount to replenish")
446- else if (!(aH))
447- then ([ScriptTransfer(ay.caller, bg, bh), ScriptTransfer(ay.caller, bj, bk)] ++ bd())
436+ else if (!(aF))
437+ then ([ScriptTransfer(ay.caller, aY, aZ), ScriptTransfer(ay.caller, bb, bc)] ++ aV())
448438 else {
449- let bC = if (containsElement(S, bm))
450- then invoke(this, "stakeUnstake", [true, bg, bm], nil)
439+ let bu = if (containsElement(S, be))
440+ then invoke(this, "stakeUnstake", [true, aY, be], nil)
451441 else 0
452- if ((bC == bC))
442+ if ((bu == bu))
453443 then {
454- let bD = if (containsElement(S, bq))
455- then invoke(this, "stakeUnstake", [true, bj, bq], nil)
444+ let bv = if (containsElement(S, bi))
445+ then invoke(this, "stakeUnstake", [true, bb, bi], nil)
456446 else 0
457- if ((bD == bD))
458- then [Reissue(am, bz, true), IntegerEntry(f, bg), IntegerEntry(g, bj), IntegerEntry(k, bz), ScriptTransfer(ay.caller, bz, am)]
447+ if ((bv == bv))
448+ then [Reissue(am, br, true), IntegerEntry(f, aY), IntegerEntry(g, bb), IntegerEntry(k, br), ScriptTransfer(ay.caller, br, am)]
459449 else throw("Strict value is not equal to itself.")
460450 }
461451 else throw("Strict value is not equal to itself.")
463453 }
464454 }
465455 else {
466- let bN = fraction(fraction(ak, ar, bg), aq, fraction(al, ar, bj))
467- let bO = fraction(bg, ar, ak)
468- let bP = fraction(bj, ar, al)
469- let bQ = fraction(min([bO, bP]), an, ar)
456+ let bF = fraction(fraction(ak, ar, aY), aq, fraction(al, ar, bb))
457+ let bG = fraction(aY, ar, ak)
458+ let bH = fraction(bb, ar, al)
459+ let bI = fraction(min([bG, bH]), an, ar)
470460 if (!(ab))
471461 then throw("DApp is inactive at this moment")
472- else if (if ((0 > bK))
462+ else if (if ((0 > bC))
473463 then true
474- else (bK > as))
475- then throw(((("Slippage tolerance must be between 0 and " + toString(as)) + " inclusively. Actual: ") + toString(bK)))
464+ else (bC > as))
465+ then throw(((("Slippage tolerance must be between 0 and " + toString(as)) + " inclusively. Actual: ") + toString(bC)))
476466 else if ((size(ay.payments) != 2))
477467 then throw("Two attached assets expected")
478- else if (if ((bh != ae))
468+ else if (if ((aZ != ae))
479469 then true
480- else (bk != af))
470+ else (bc != af))
481471 then throw(((("Incorrect assets attached. Expected: " + ac) + " and ") + ad))
482- else if (if ((((aq * (as - bK)) / as) > bN))
472+ else if (if ((((aq * (as - bC)) / as) > bF))
483473 then true
484- else (bN > ((aq * (as + bK)) / as)))
474+ else (bF > ((aq * (as + bC)) / as)))
485475 then throw("Incorrect assets amount: amounts must have the contract ratio")
486- else if ((bQ == 0))
476+ else if ((bI == 0))
487477 then throw("Too small amount to replenish")
488- else if (!(aH))
489- then ([ScriptTransfer(ay.caller, bg, bh), ScriptTransfer(ay.caller, bj, bk)] ++ bd())
478+ else if (!(aF))
479+ then ([ScriptTransfer(ay.caller, aY, aZ), ScriptTransfer(ay.caller, bb, bc)] ++ aV())
490480 else {
491- let bC = if (containsElement(S, bm))
492- then invoke(this, "stakeUnstake", [true, bg, bm], nil)
481+ let bu = if (containsElement(S, be))
482+ then invoke(this, "stakeUnstake", [true, aY, be], nil)
493483 else 0
494- if ((bC == bC))
484+ if ((bu == bu))
495485 then {
496- let bD = if (containsElement(S, bq))
497- then invoke(this, "stakeUnstake", [true, bj, bq], nil)
486+ let bv = if (containsElement(S, bi))
487+ then invoke(this, "stakeUnstake", [true, bb, bi], nil)
498488 else 0
499- if ((bD == bD))
500- then [IntegerEntry(f, (ak + bg)), IntegerEntry(g, (al + bj)), IntegerEntry(k, (an + bQ)), Reissue(am, bQ, true), ScriptTransfer(ay.caller, bQ, am)]
489+ if ((bv == bv))
490+ then [IntegerEntry(f, (ak + aY)), IntegerEntry(g, (al + bb)), IntegerEntry(k, (an + bI)), Reissue(am, bI, true), ScriptTransfer(ay.caller, bI, am)]
501491 else throw("Strict value is not equal to itself.")
502492 }
503493 else throw("Strict value is not equal to itself.")
509499
510500 @Callable(ay)
511501 func withdraw () = {
512- let bR = $Tuple2(ay.payments[0].amount, ay.payments[0].assetId)
513- let bS = bR._1
514- let bT = bR._2
515- let bU = fraction(bS, ak, an)
516- let bV = fraction(bS, al, an)
502+ let bJ = $Tuple2(ay.payments[0].amount, ay.payments[0].assetId)
503+ let bK = bJ._1
504+ let bL = bJ._2
505+ let bM = fraction(bK, ak, an)
506+ let bN = fraction(bK, al, an)
517507 if (!(ab))
518508 then throw("DApp is inactive at this moment")
519509 else if ((size(ay.payments) != 1))
520510 then throw("One attached payment expected")
521- else if ((bT != am))
511+ else if ((bL != am))
522512 then throw(("Incorrect asset attached. Expected: " + toBase58String(am)))
523- else if (!(aH))
524- then ([ScriptTransfer(ay.caller, bS, bT)] ++ bd())
525- else if (if ((bU > aD))
526- then true
527- else (bV > aE))
528- then ba(bU, bV)
529- else {
530- let bC = if (containsElement(S, ac))
531- then invoke(this, "stakeUnstake", [false, bU, ac], nil)
532- else 0
533- if ((bC == bC))
534- then {
535- let bD = if (containsElement(S, ad))
536- then invoke(this, "stakeUnstake", [false, bV, ad], nil)
537- else 0
538- if ((bD == bD))
539- then [IntegerEntry(f, (ak - bU)), IntegerEntry(g, (al - bV)), IntegerEntry(k, (an - bS)), Burn(am, bS), ScriptTransfer(ay.caller, bU, ae), ScriptTransfer(ay.caller, bV, af)]
540- else throw("Strict value is not equal to itself.")
541- }
542- else throw("Strict value is not equal to itself.")
543- }
513+ else if (!(aF))
514+ then ([ScriptTransfer(ay.caller, bK, bL)] ++ aV())
515+ else {
516+ let bu = if (containsElement(S, ac))
517+ then invoke(this, "stakeUnstake", [false, bM, ac], nil)
518+ else 0
519+ if ((bu == bu))
520+ then {
521+ let bv = if (containsElement(S, ad))
522+ then invoke(this, "stakeUnstake", [false, bN, ad], nil)
523+ else 0
524+ if ((bv == bv))
525+ then [IntegerEntry(f, (ak - bM)), IntegerEntry(g, (al - bN)), IntegerEntry(k, (an - bK)), Burn(am, bK), ScriptTransfer(ay.caller, bM, ae), ScriptTransfer(ay.caller, bN, af)]
526+ else throw("Strict value is not equal to itself.")
527+ }
528+ else throw("Strict value is not equal to itself.")
529+ }
544530 }
545531
546532
547533
548534 @Callable(ay)
549-func exchange (bW) = {
550- let bX = $Tuple2(ay.payments[0].amount, ay.payments[0].assetId)
551- let bS = bX._1
552- let bT = bX._2
553- func bY (bZ,ca) = {
554- let cb = fraction(ca, bS, (bS + bZ))
555- let cc = fraction(cb, (ap - ao), ap)
556- let cd = fraction(cb, commissionGovernance, ap)
557- if ((bW > cc))
558- then throw(((("Calculated amount to receive " + toString(cc)) + " is less than specified minimum ") + toString(bW)))
559- else $Tuple3(cb, cc, cd)
535+func exchange (bO) = {
536+ let bP = $Tuple2(ay.payments[0].amount, ay.payments[0].assetId)
537+ let bK = bP._1
538+ let bL = bP._2
539+ func bQ (bR,bS) = {
540+ let bT = fraction(bS, bK, (bK + bR))
541+ let bU = fraction(bT, (ap - ao), ap)
542+ let bV = fraction(bT, commissionGovernance, ap)
543+ if ((bO > bU))
544+ then throw(((("Calculated amount to receive " + toString(bU)) + " is less than specified minimum ") + toString(bO)))
545+ else $Tuple3(bT, bU, bV)
560546 }
561547
562548 if (!(ab))
565551 then true
566552 else (al == 0))
567553 then throw("Can't exchange with zero balance")
568- else if ((0 >= bW))
569- then throw(("Minimal amount to receive must be positive. Actual: " + toString(bW)))
554+ else if ((0 >= bO))
555+ then throw(("Minimal amount to receive must be positive. Actual: " + toString(bO)))
570556 else if ((size(ay.payments) != 1))
571557 then throw("One attached payment expected")
572- else if (!(aH))
573- then ([ScriptTransfer(ay.caller, bS, bT)] ++ bd())
574- else if ((bT == ae))
558+ else if (!(aF))
559+ then ([ScriptTransfer(ay.caller, bK, bL)] ++ aV())
560+ else if ((bL == ae))
575561 then {
576- let ce = af
577- let cf = bY(ak, al)
578- let cb = cf._1
579- let cc = cf._2
580- let cd = cf._3
581- let cg = (ak + bS)
582- let ch = ((al - cc) - cd)
583- let bC = if (containsElement(S, ac))
584- then invoke(this, "stakeUnstake", [true, bS, ac], nil)
562+ let bW = af
563+ let bX = bQ(ak, al)
564+ let bT = bX._1
565+ let bU = bX._2
566+ let bV = bX._3
567+ let bY = (ak + bK)
568+ let bZ = ((al - bU) - bV)
569+ let bu = if (containsElement(S, ac))
570+ then invoke(this, "stakeUnstake", [true, bK, ac], nil)
585571 else 0
586- if ((bC == bC))
572+ if ((bu == bu))
587573 then {
588- let bD = if (containsElement(S, ad))
589- then invoke(this, "stakeUnstake", [false, (cc + cd), ad], nil)
574+ let bv = if (containsElement(S, ad))
575+ then invoke(this, "stakeUnstake", [false, (bU + bV), ad], nil)
590576 else 0
591- if ((bD == bD))
592- then [IntegerEntry(f, cg), IntegerEntry(g, ch), ScriptTransfer(ay.caller, cc, ce), ScriptTransfer(N, cd, ce)]
577+ if ((bv == bv))
578+ then [IntegerEntry(f, bY), IntegerEntry(g, bZ), ScriptTransfer(ay.caller, bU, bW), ScriptTransfer(N, bV, bW)]
593579 else throw("Strict value is not equal to itself.")
594580 }
595581 else throw("Strict value is not equal to itself.")
596582 }
597- else if ((bT == af))
583+ else if ((bL == af))
598584 then {
599- let ce = ae
600- let ci = bY(al, ak)
601- let cb = ci._1
602- let cc = ci._2
603- let cd = ci._3
604- let cg = ((ak - cc) - cd)
605- let ch = (al + bS)
606- if (if ((az >= cg))
607- then true
608- else (aA >= ch))
609- then aX(cc, aD, ag)
610- else {
611- let bC = if (containsElement(S, ac))
612- then invoke(this, "stakeUnstake", [false, (cc + cd), ac], nil)
585+ let bW = ae
586+ let ca = bQ(al, ak)
587+ let bT = ca._1
588+ let bU = ca._2
589+ let bV = ca._3
590+ let bY = ((ak - bU) - bV)
591+ let bZ = (al + bK)
592+ let bu = if (containsElement(S, ac))
593+ then invoke(this, "stakeUnstake", [false, (bU + bV), ac], nil)
594+ else 0
595+ if ((bu == bu))
596+ then {
597+ let bv = if (containsElement(S, ad))
598+ then invoke(this, "stakeUnstake", [true, bK, ad], nil)
613599 else 0
614- if ((bC == bC))
615- then {
616- let bD = if (containsElement(S, ad))
617- then invoke(this, "stakeUnstake", [true, bS, ad], nil)
618- else 0
619- if ((bD == bD))
620- then [IntegerEntry(f, cg), IntegerEntry(g, ch), ScriptTransfer(ay.caller, cc, ce), ScriptTransfer(N, cd, ce)]
621- else throw("Strict value is not equal to itself.")
622- }
600+ if ((bv == bv))
601+ then [IntegerEntry(f, bY), IntegerEntry(g, bZ), ScriptTransfer(ay.caller, bU, bW), ScriptTransfer(N, bV, bW)]
623602 else throw("Strict value is not equal to itself.")
624603 }
604+ else throw("Strict value is not equal to itself.")
625605 }
626606 else throw(((("Incorrect asset attached. Expected: " + ac) + " or ") + ad))
627607 }
633613 then throw(("DApp is already suspended. Cause: " + valueOrElse(getString(this, n), "the cause wasn't specified")))
634614 else if (!(containsElement([I, J, K, L], ay.callerPublicKey)))
635615 then throw("Only admin can call this function")
636- else aN("Paused by admin")
616+ else aL("Paused by admin")
637617
638618
639619
647627
648628
649629 @Callable(ay)
650-func takeIntoAccountExtraFunds (cj) = {
651- let ck = (aF - ak)
652- let cl = (aG - al)
653- let cm = (ck - (if ((ae == unit))
654- then cj
630+func takeIntoAccountExtraFunds (cb) = {
631+ let cc = (aD - ak)
632+ let cd = (aE - al)
633+ let ce = (cc - (if ((ae == unit))
634+ then cb
655635 else 0))
656- let cn = (cl - (if ((af == unit))
657- then cj
636+ let cf = (cd - (if ((af == unit))
637+ then cb
658638 else 0))
659639 if (!(ab))
660640 then throw("DApp is inactive at this moment")
661641 else if ((ay.caller != this))
662642 then throw("Only the DApp itself can call this function")
663- else if ((0 > cj))
664- then throw(("Argument 'amountLeave' cannot be negative. Actual: " + toString(cj)))
665- else if (if ((0 > ck))
643+ else if ((0 > cb))
644+ then throw(("Argument 'amountLeave' cannot be negative. Actual: " + toString(cb)))
645+ else if (if ((0 > cc))
666646 then true
667- else (0 > cl))
668- then aN("Enroll amount negative")
669- else if (if ((0 > cm))
647+ else (0 > cd))
648+ then aL("Enroll amount negative")
649+ else if (if ((0 > ce))
670650 then true
671- else (0 > cn))
651+ else (0 > cf))
672652 then throw("Too large amountLeave")
673653 else {
674- let bC = if (if (containsElement(S, ac))
675- then (cm > 0)
654+ let bu = if (if (containsElement(S, ac))
655+ then (ce > 0)
676656 else false)
677- then invoke(this, "stakeUnstake", [true, cm, ac], nil)
657+ then invoke(this, "stakeUnstake", [true, ce, ac], nil)
678658 else 0
679- if ((bC == bC))
659+ if ((bu == bu))
680660 then {
681- let bD = if (if (containsElement(S, ad))
682- then (cn > 0)
661+ let bv = if (if (containsElement(S, ad))
662+ then (cf > 0)
683663 else false)
684- then invoke(this, "stakeUnstake", [true, cn, ad], nil)
664+ then invoke(this, "stakeUnstake", [true, cf, ad], nil)
685665 else 0
686- if ((bD == bD))
687- then [IntegerEntry(f, (ak + cm)), IntegerEntry(g, (al + cn)), IntegerEntry(("last_income_" + ac), cm), IntegerEntry(("last_income_" + ad), cn)]
666+ if ((bv == bv))
667+ then [IntegerEntry(f, (ak + ce)), IntegerEntry(g, (al + cf)), IntegerEntry(("last_income_" + ac), ce), IntegerEntry(("last_income_" + ad), cf)]
688668 else throw("Strict value is not equal to itself.")
689669 }
690670 else throw("Strict value is not equal to itself.")
694674
695675
696676 @Callable(ay)
697-func stakeUnstake (aQ,aS,co) = if ((ay.caller != this))
677+func stakeUnstake (aO,aQ,cg) = if ((ay.caller != this))
698678 then throw("Only contract itself can invoke this function")
699- else if ((co == "WAVES"))
679+ else if ((cg == "WAVES"))
700680 then {
701- let cp = addressFromStringValue(valueOrErrorMessage(getString(C, w), "No leasing pool in oracle"))
702- let cq = getBinary(this, y)
703- let cr = valueOrElse(getInteger(this, x), 0)
704- let cs = if (aQ)
705- then (cr + aS)
706- else (cr - aS)
707- let ct = Lease(cp, cs)
708- let cu = calculateLeaseId(ct)
709- let cv = [ct, BinaryEntry(y, cu), IntegerEntry(x, cs)]
710- let F = cq
681+ let ch = addressFromStringValue(valueOrErrorMessage(getString(C, w), "No leasing pool in oracle"))
682+ let ci = getBinary(this, y)
683+ let cj = valueOrElse(getInteger(this, x), 0)
684+ let ck = if (aO)
685+ then (cj + aQ)
686+ else (cj - aQ)
687+ let cl = Lease(ch, ck)
688+ let cm = calculateLeaseId(cl)
689+ let cn = [cl, BinaryEntry(y, cm), IntegerEntry(x, ck)]
690+ let F = ci
711691 if ($isInstanceOf(F, "ByteVector"))
712692 then {
713- let cw = F
714- ([LeaseCancel(cw)] ++ cv)
693+ let co = F
694+ ([LeaseCancel(co)] ++ cn)
715695 }
716- else cv
696+ else cn
717697 }
718698 else {
719- let cx = aR(aQ, aS, fromBase58String(co))
720- let aU = cx._1
721- let cy = cx._2
722- let cz = cx._3
723- let cA = cx._4
724- let cB = invoke(cy, aU, cz, cA)
725- if ((cB == cB))
699+ let cp = aP(aO, aQ, fromBase58String(cg))
700+ let aS = cp._1
701+ let cq = cp._2
702+ let cr = cp._3
703+ let cs = cp._4
704+ let ct = invoke(cq, aS, cr, cs)
705+ if ((ct == ct))
726706 then nil
727707 else throw("Strict value is not equal to itself.")
728708 }
735715 else if (!(containsElement([I, J, K, L], ay.callerPublicKey)))
736716 then throw("Only admin can call this function")
737717 else {
738- let bC = if (containsElement(S, ac))
718+ let bu = if (containsElement(S, ac))
739719 then {
740- let bb = (ak - az)
741- if ((bb > 0))
742- then invoke(this, "stakeUnstake", [true, bb, ac], nil)
720+ let cu = (ak - az)
721+ if ((cu > 0))
722+ then invoke(this, "stakeUnstake", [true, cu, ac], nil)
743723 else 0
744724 }
745725 else 0
746- if ((bC == bC))
726+ if ((bu == bu))
747727 then {
748- let bD = if (containsElement(S, ad))
728+ let bv = if (containsElement(S, ad))
749729 then {
750- let bc = (al - aA)
751- if ((bc > 0))
752- then invoke(this, "stakeUnstake", [true, bc, ad], nil)
730+ let cv = (al - aA)
731+ if ((cv > 0))
732+ then invoke(this, "stakeUnstake", [true, cv, ad], nil)
753733 else 0
754734 }
755735 else 0
756- if ((bD == bD))
736+ if ((bv == bv))
757737 then nil
758738 else throw("Strict value is not equal to itself.")
759739 }
761741 }
762742
763743
764-@Verifier(cC)
765-func cD () = {
766- let cE = {
767- let cF = if (sigVerify(cC.bodyBytes, cC.proofs[0], I))
744+@Verifier(cw)
745+func cx () = {
746+ let cy = {
747+ let cz = if (sigVerify(cw.bodyBytes, cw.proofs[0], I))
768748 then 1
769749 else 0
770- let cG = if (sigVerify(cC.bodyBytes, cC.proofs[1], J))
750+ let cA = if (sigVerify(cw.bodyBytes, cw.proofs[1], J))
771751 then 1
772752 else 0
773- let cH = if (sigVerify(cC.bodyBytes, cC.proofs[2], K))
753+ let cB = if (sigVerify(cw.bodyBytes, cw.proofs[2], K))
774754 then 1
775755 else 0
776- (((cF + cG) + cH) >= 2)
756+ (((cz + cA) + cB) >= 2)
777757 }
778- let F = cC
758+ let F = cw
779759 if ($isInstanceOf(F, "InvokeScriptTransaction"))
780760 then {
781- let cB = F
782- let cI = if ((cB.dApp == this))
783- then (cB.function == "takeIntoAccountExtraFunds")
761+ let ct = F
762+ let cC = if ((ct.dApp == this))
763+ then (ct.function == "takeIntoAccountExtraFunds")
784764 else false
785- let cJ = if (if (if ((cB.dApp == V))
786- then (cB.function == "exchange")
765+ let cD = if (if (if ((ct.dApp == V))
766+ then (ct.function == "exchange")
787767 else false)
788768 then (ae == P)
789769 else false)
790770 then true
791771 else if (if ((af == P))
792- then (size(cB.payments) == 1)
772+ then (size(ct.payments) == 1)
793773 else false)
794- then (cB.payments[0].assetId == P)
774+ then (ct.payments[0].assetId == P)
795775 else false
796- let cK = if (if (if ((cB.dApp == W))
797- then (cB.function == "exchange")
776+ let cE = if (if (if ((ct.dApp == W))
777+ then (ct.function == "exchange")
798778 else false)
799779 then (ae == Q)
800780 else false)
801781 then true
802782 else if (if ((af == Q))
803- then (size(cB.payments) == 1)
783+ then (size(ct.payments) == 1)
804784 else false)
805- then (cB.payments[0].assetId == P)
785+ then (ct.payments[0].assetId == P)
806786 else false
807- let cL = if (if (if (sigVerify(cC.bodyBytes, cC.proofs[0], I))
787+ let cF = if (if (if (sigVerify(cw.bodyBytes, cw.proofs[0], I))
808788 then true
809- else sigVerify(cC.bodyBytes, cC.proofs[0], J))
789+ else sigVerify(cw.bodyBytes, cw.proofs[0], J))
810790 then true
811- else sigVerify(cC.bodyBytes, cC.proofs[0], K))
791+ else sigVerify(cw.bodyBytes, cw.proofs[0], K))
812792 then true
813- else sigVerify(cC.bodyBytes, cC.proofs[0], M)
814- if (if (if (if (cI)
793+ else sigVerify(cw.bodyBytes, cw.proofs[0], M)
794+ if (if (if (if (cC)
815795 then true
816- else cJ)
796+ else cD)
817797 then true
818- else cK)
819- then cL
798+ else cE)
799+ then cF
820800 else false)
821801 then true
822- else cE
802+ else cy
823803 }
824- else cE
804+ else cy
825805 }
826806
Full:
OldNewDifferences
11 {-# STDLIB_VERSION 5 #-}
22 {-# SCRIPT_TYPE ACCOUNT #-}
33 {-# CONTENT_TYPE DAPP #-}
44 let a = "1.0.0"
55
66 let b = "version"
77
88 let c = "active"
99
1010 let d = "A_asset_id"
1111
1212 let e = "B_asset_id"
1313
1414 let f = "A_asset_balance"
1515
1616 let g = "B_asset_balance"
1717
1818 let h = "A_asset_init"
1919
2020 let i = "B_asset_init"
2121
2222 let j = "share_asset_id"
2323
2424 let k = "share_asset_supply"
2525
2626 let l = "commission"
2727
2828 let m = "commission_scale_delimiter"
2929
3030 let n = "shutdown_cause"
3131
3232 let o = "first_harvest"
3333
3434 let p = "first_harvest_height"
3535
3636 let q = "share_limit_on_first_harvest"
3737
3838 let r = "base_period"
3939
4040 let s = "period_length"
4141
4242 let t = "start_height"
4343
4444 let u = "staking_usdnnsbt_address"
4545
4646 let v = "staking_eurn_address"
4747
4848 let w = "leasing_address"
4949
5050 let x = "leasing_amount"
5151
5252 let y = "leasing_id"
5353
5454 let z = "admin_pub_1"
5555
5656 let A = "admin_pub_2"
5757
5858 let B = "admin_pub_3"
5959
6060 let C = Address(base58'3NBBWfzZtZtszaXbitTKnrB2xXwv26Bn7H9')
6161
6262 func D (E) = {
6363 let F = getString(C, E)
6464 if ($isInstanceOf(F, "String"))
6565 then {
6666 let G = F
6767 fromBase58String(G)
6868 }
6969 else {
7070 let H = F
7171 throw("Admin public key is empty")
7272 }
7373 }
7474
7575
7676 let I = D(z)
7777
7878 let J = D(A)
7979
8080 let K = D(B)
8181
8282 let L = base58'Kn7NpzaG12dLZgcHf2ipUftU6hbJygmrhFqQYE4B7ZK'
8383
8484 let M = base58'Kn7NpzaG12dLZgcHf2ipUftU6hbJygmrhFqQYE4B7ZK'
8585
8686 let N = Address(base58'3NAGTtZz6WpupSN89NZD5rMZwwziZEg4Kx4')
8787
8888 let O = Address(base58'3MrJgdL1GniipErHy44YF9idzLaUL2iX5DQ')
8989
9090 let P = base58'8UrfDVd5GreeUwm7uPk7eYz1eMv376kzR52C6sANPkwS'
9191
9292 let Q = base58'36mg8NZTaFRDygiVwb8uBnLR51hetJruUCZcxhaVcHj9'
9393
9494 let R = base58'ECBCkHS68DckpBrzLeoRgYbFg7sCVqR176mPqbXsj9pA'
9595
9696 let S = ["WAVES", toBase58String(P), toBase58String(Q), toBase58String(R)]
9797
9898 let T = Address(fromBase58String(valueOrErrorMessage(getString(C, u), "no usdn staking address")))
9999
100100 let U = Address(fromBase58String(valueOrErrorMessage(getString(C, v), "no usdn staking address")))
101101
102102 let V = Address(base58'3N8PGkzXhbtTvEwEQTtE2xiTJmsDEQ9XfoZ')
103103
104104 let W = Address(base58'3MqW1t2cxdYy2emEMk3YtZkRwQPhHaTfWRe')
105105
106106 let X = valueOrErrorMessage(getInteger(O, r), "Empty kBasePeriod")
107107
108108 let Y = valueOrErrorMessage(getInteger(O, t), "Empty kStartHeight")
109109
110110 let Z = valueOrErrorMessage(getInteger(O, s), "Empty kPeriodLength")
111111
112112 let aa = ((X + ((height - Y) / Z)) + 3)
113113
114114 let ab = getBooleanValue(this, c)
115115
116116 let ac = getStringValue(this, d)
117117
118118 let ad = getStringValue(this, e)
119119
120120 let ae = if ((ac == "WAVES"))
121121 then unit
122122 else fromBase58String(ac)
123123
124124 let af = if ((ad == "WAVES"))
125125 then unit
126126 else fromBase58String(ad)
127127
128128 let ag = {
129129 let F = ae
130130 if ($isInstanceOf(F, "ByteVector"))
131131 then {
132132 let ah = F
133133 value(assetInfo(ah)).name
134134 }
135135 else if ($isInstanceOf(F, "Unit"))
136136 then {
137137 let ai = F
138138 "WAVES"
139139 }
140140 else throw("Match error")
141141 }
142142
143143 let aj = {
144144 let F = af
145145 if ($isInstanceOf(F, "ByteVector"))
146146 then {
147147 let ah = F
148148 value(assetInfo(ah)).name
149149 }
150150 else if ($isInstanceOf(F, "Unit"))
151151 then {
152152 let ai = F
153153 "WAVES"
154154 }
155155 else throw("Match error")
156156 }
157157
158158 let ak = getIntegerValue(this, f)
159159
160160 let al = getIntegerValue(this, g)
161161
162162 let am = fromBase58String(getStringValue(this, j))
163163
164164 let an = getIntegerValue(this, k)
165165
166166 let ao = 3000
167167
168168 let ap = 1000000
169169
170170 let aq = 1000
171171
172172 let ar = 100000000
173173
174174 let as = 1000
175175
176176 func at (au) = {
177177 let F = au
178178 if ($isInstanceOf(F, "ByteVector"))
179179 then {
180180 let ah = F
181181 assetBalance(this, ah)
182182 }
183183 else if ($isInstanceOf(F, "Unit"))
184184 then {
185185 let ai = F
186186 wavesBalance(this).available
187187 }
188188 else throw("Match error")
189189 }
190190
191191
192192 func av (au) = {
193193 let aw = {
194194 let F = au
195195 if ($isInstanceOf(F, "ByteVector"))
196196 then {
197197 let ax = F
198198 if (if ((ax == P))
199199 then true
200200 else (ax == Q))
201201 then getInteger(T, ((("rpd_balance_" + toBase58String(ax)) + "_") + toString(this)))
202202 else if ((ax == R))
203203 then getInteger(U, ((("%s%s%s__stakingBalance__" + toBase58String(ax)) + "__") + toString(this)))
204204 else 0
205205 }
206206 else if ($isInstanceOf(F, "Unit"))
207207 then valueOrElse(getInteger(this, x), 0)
208208 else throw("Match error")
209209 }
210210 let F = aw
211211 if ($isInstanceOf(F, "Int"))
212212 then {
213213 let ay = F
214214 ay
215215 }
216216 else 0
217217 }
218218
219219
220220 let az = av(ae)
221221
222222 let aA = av(af)
223223
224224 let aB = getIntegerValue(this, h)
225225
226226 let aC = getIntegerValue(this, i)
227227
228-let aD = (ak - az)
228+let aD = (at(ae) + az)
229229
230-let aE = (al - aA)
230+let aE = (at(af) + aA)
231231
232-let aF = (at(ae) + az)
233-
234-let aG = (at(af) + aA)
235-
236-let aH = if ((aF >= ak))
237- then (aG >= al)
232+let aF = if ((aD >= ak))
233+ then (aE >= al)
238234 else false
239235
240-func aI (au) = {
236+func aG (au) = {
241237 let F = au
242238 if ($isInstanceOf(F, "ByteVector"))
243239 then {
244240 let ah = F
245- let aJ = toBase58String(ah)
246- let aK = valueOrErrorMessage(assetInfo(ah), (("Asset " + aJ) + " doesn't exist"))
247- $Tuple3(aJ, aK.name, aK.decimals)
241+ let aH = toBase58String(ah)
242+ let aI = valueOrErrorMessage(assetInfo(ah), (("Asset " + aH) + " doesn't exist"))
243+ $Tuple3(aH, aI.name, aI.decimals)
248244 }
249245 else if ($isInstanceOf(F, "Unit"))
250246 then {
251247 let ai = F
252248 $Tuple3("WAVES", "WAVES", 8)
253249 }
254250 else throw("Match error")
255251 }
256252
257253
258-func aL (aM) = if ((aM == "WAVES"))
254+func aJ (aK) = if ((aK == "WAVES"))
259255 then $Tuple3("WAVES", "WAVES", 8)
260256 else {
261- let aJ = aM
262- let ah = fromBase58String(aM)
263- let aK = valueOrErrorMessage(assetInfo(ah), (("Asset " + aJ) + " doesn't exist"))
264- $Tuple3(aJ, aK.name, aK.decimals)
257+ let aH = aK
258+ let ah = fromBase58String(aK)
259+ let aI = valueOrErrorMessage(assetInfo(ah), (("Asset " + aH) + " doesn't exist"))
260+ $Tuple3(aH, aI.name, aI.decimals)
265261 }
266262
267263
268-func aN (aO) = [BooleanEntry(c, false), StringEntry(n, aO)]
264+func aL (aM) = [BooleanEntry(c, false), StringEntry(n, aM)]
269265
270266
271-func aP (aQ,au) = if (aQ)
267+func aN (aO,au) = if (aO)
272268 then if ((au == P))
273269 then $Tuple2("lockNeutrino", T)
274270 else if ((au == Q))
275271 then $Tuple2("lockNsbt", T)
276272 else $Tuple2("startStaking", U)
277273 else if ((au == P))
278274 then $Tuple2("unlockNeutrino", T)
279275 else if ((au == Q))
280276 then $Tuple2("unlockNsbt", T)
281277 else $Tuple2("stopStaking", U)
282278
283279
284-func aR (aQ,aS,au) = if (aQ)
280+func aP (aO,aQ,au) = if (aO)
285281 then {
286- let aT = aP(aQ, au)
287- let aU = aT._1
288- let aV = aT._2
289- $Tuple4(aU, aV, nil, [AttachedPayment(au, aS)])
282+ let aR = aN(aO, au)
283+ let aS = aR._1
284+ let aT = aR._2
285+ $Tuple4(aS, aT, nil, [AttachedPayment(au, aQ)])
290286 }
291287 else {
292- let aW = aP(aQ, au)
293- let aU = aW._1
294- let aV = aW._2
295- $Tuple4(aU, aV, [aS, toBase58String(au)], nil)
288+ let aU = aN(aO, au)
289+ let aS = aU._1
290+ let aT = aU._2
291+ $Tuple4(aS, aT, [aQ, toBase58String(au)], nil)
296292 }
297293
298294
299-func aX (aS,aY,aZ) = throw((((((((("Insufficient DApp balance to pay " + toString(aS)) + " ") + aZ) + " due to staking. Available: ") + toString(aY)) + " ") + aZ) + ". Please contact support in Telegram: https://t.me/swopfisupport"))
300-
301-
302-func ba (bb,bc) = throw((((((((((((((((("Insufficient DApp balance to pay " + toString(bb)) + " ") + ag) + " and ") + toString(bc)) + " ") + aj) + " due to staking. Available: ") + toString(aD)) + " ") + ag) + " and ") + toString(aE)) + " ") + aj) + ". Please contact support in Telegram: https://t.me/swopfisupport"))
303-
304-
305-func bd () = aN(((((((((((((((("Suspicious state. Actual balances: " + toString(aF)) + " ") + ag) + ", ") + toString(aG)) + " ") + aj) + ". State: ") + toString(ak)) + " ") + ag) + ", ") + toString(al)) + " ") + aj))
295+func aV () = aL(((((((((((((((("Suspicious state. Actual balances: " + toString(aD)) + " ") + ag) + ", ") + toString(aE)) + " ") + aj) + ". State: ") + toString(ak)) + " ") + ag) + ", ") + toString(al)) + " ") + aj))
306296
307297
308298 @Callable(ay)
309-func init (be) = {
310- let bf = $Tuple2(ay.payments[0].amount, ay.payments[0].assetId)
311- let bg = bf._1
312- let bh = bf._2
313- let bi = $Tuple2(ay.payments[1].amount, ay.payments[1].assetId)
314- let bj = bi._1
315- let bk = bi._2
316- let bl = aI(bh)
317- let bm = bl._1
318- let bn = bl._2
319- let bo = bl._3
320- let bp = aI(bk)
321- let bq = bp._1
322- let br = bp._2
323- let bs = bp._3
299+func init (aW) = {
300+ let aX = $Tuple2(ay.payments[0].amount, ay.payments[0].assetId)
301+ let aY = aX._1
302+ let aZ = aX._2
303+ let ba = $Tuple2(ay.payments[1].amount, ay.payments[1].assetId)
304+ let bb = ba._1
305+ let bc = ba._2
306+ let bd = aG(aZ)
307+ let be = bd._1
308+ let bf = bd._2
309+ let bg = bd._3
310+ let bh = aG(bc)
311+ let bi = bh._1
312+ let bj = bh._2
313+ let bk = bh._3
324314 if (!(containsElement([I, J, K, M], ay.callerPublicKey)))
325315 then throw("Only admin can call this function")
326316 else if (isDefined(getBoolean(this, c)))
327317 then throw("DApp is already active")
328- else if ((bh == bk))
318+ else if ((aZ == bc))
329319 then throw("Assets must be different")
330320 else {
331- let bt = ((("s" + take(bn, 7)) + "_") + take(br, 7))
332- let bu = ((((("ShareToken of SwopFi protocol for " + bn) + " and ") + br) + " at address ") + toString(this))
333- let bv = ((bo + bs) / 2)
334- let bw = pow(bg, bo, 5, 1, bo, DOWN)
335- let bx = pow(bj, bs, 5, 1, bs, DOWN)
336- let by = pow(10, 0, bv, 0, 0, DOWN)
337- let bz = fraction(bw, bx, by)
338- let bA = Issue(bt, bu, bz, bv, true)
339- let bB = calculateAssetId(bA)
340- let bC = if (containsElement(S, bm))
341- then invoke(this, "stakeUnstake", [true, bg, bm], nil)
321+ let bl = ((("s" + take(bf, 7)) + "_") + take(bj, 7))
322+ let bm = ((((("ShareToken of SwopFi protocol for " + bf) + " and ") + bj) + " at address ") + toString(this))
323+ let bn = ((bg + bk) / 2)
324+ let bo = pow(aY, bg, 5, 1, bg, DOWN)
325+ let bp = pow(bb, bk, 5, 1, bk, DOWN)
326+ let bq = pow(10, 0, bn, 0, 0, DOWN)
327+ let br = fraction(bo, bp, bq)
328+ let bs = Issue(bl, bm, br, bn, true)
329+ let bt = calculateAssetId(bs)
330+ let bu = if (containsElement(S, be))
331+ then invoke(this, "stakeUnstake", [true, aY, be], nil)
342332 else 0
343- if ((bC == bC))
333+ if ((bu == bu))
344334 then {
345- let bD = if (containsElement(S, bq))
346- then invoke(this, "stakeUnstake", [true, bj, bq], nil)
335+ let bv = if (containsElement(S, bi))
336+ then invoke(this, "stakeUnstake", [true, bb, bi], nil)
347337 else 0
348- if ((bD == bD))
338+ if ((bv == bv))
349339 then {
350- let bE = [StringEntry(b, a), BooleanEntry(c, true), StringEntry(d, bm), StringEntry(e, bq), IntegerEntry(f, bg), IntegerEntry(g, bj), IntegerEntry(l, ao), IntegerEntry(m, ap), bA, StringEntry(j, toBase58String(bB)), IntegerEntry(k, bz), ScriptTransfer(ay.caller, bz, bB)]
351- if (be)
352- then (bE ++ [BooleanEntry(o, be), IntegerEntry(p, (Y + (aa * Z)))])
353- else bE
340+ let bw = [StringEntry(b, a), BooleanEntry(c, true), StringEntry(d, be), StringEntry(e, bi), IntegerEntry(f, aY), IntegerEntry(g, bb), IntegerEntry(l, ao), IntegerEntry(m, ap), bs, StringEntry(j, toBase58String(bt)), IntegerEntry(k, br), ScriptTransfer(ay.caller, br, bt)]
341+ if (aW)
342+ then (bw ++ [BooleanEntry(o, aW), IntegerEntry(p, (Y + (aa * Z)))])
343+ else bw
354344 }
355345 else throw("Strict value is not equal to itself.")
356346 }
357347 else throw("Strict value is not equal to itself.")
358348 }
359349 }
360350
361351
362352
363353 @Callable(ay)
364-func initWithInitRatio (bF,bG,ac,ad,be) = {
365- let bH = aL(ac)
366- let bm = bH._1
367- let bn = bH._2
368- let bo = bH._3
369- let bI = aL(ad)
370- let bq = bI._1
371- let br = bI._2
372- let bs = bI._3
354+func initWithInitRatio (bx,by,ac,ad,aW) = {
355+ let bz = aJ(ac)
356+ let be = bz._1
357+ let bf = bz._2
358+ let bg = bz._3
359+ let bA = aJ(ad)
360+ let bi = bA._1
361+ let bj = bA._2
362+ let bk = bA._3
373363 if (!(containsElement([I, J, K, M], ay.callerPublicKey)))
374364 then throw("Only admin can call this function")
375365 else if (isDefined(getBoolean(this, c)))
376366 then throw("DApp is already active")
377367 else if ((ac == ad))
378368 then throw("Assets must be different")
379369 else {
380- let bt = ((("s" + take(bn, 7)) + "_") + take(br, 7))
381- let bu = ((((("ShareToken of SwopFi protocol for " + bn) + " and ") + br) + " at address ") + toString(this))
382- let bv = ((bo + bs) / 2)
383- let bz = 0
384- let bA = Issue(bt, bu, bz, bv, true)
385- let bB = calculateAssetId(bA)
386- let bE = [StringEntry(b, a), BooleanEntry(c, true), StringEntry(d, bm), StringEntry(e, bq), IntegerEntry(h, bF), IntegerEntry(i, bG), IntegerEntry(f, 0), IntegerEntry(g, 0), IntegerEntry(l, ao), IntegerEntry(m, ap), bA, StringEntry(j, toBase58String(bB)), IntegerEntry(k, bz)]
387- if (be)
388- then (bE ++ [BooleanEntry(o, be), IntegerEntry(p, (Y + (aa * Z)))])
389- else bE
370+ let bl = ((("s" + take(bf, 7)) + "_") + take(bj, 7))
371+ let bm = ((((("ShareToken of SwopFi protocol for " + bf) + " and ") + bj) + " at address ") + toString(this))
372+ let bn = ((bg + bk) / 2)
373+ let br = 0
374+ let bs = Issue(bl, bm, br, bn, true)
375+ let bt = calculateAssetId(bs)
376+ let bw = [StringEntry(b, a), BooleanEntry(c, true), StringEntry(d, be), StringEntry(e, bi), IntegerEntry(h, bx), IntegerEntry(i, by), IntegerEntry(f, 0), IntegerEntry(g, 0), IntegerEntry(l, ao), IntegerEntry(m, ap), bs, StringEntry(j, toBase58String(bt)), IntegerEntry(k, br)]
377+ if (aW)
378+ then (bw ++ [BooleanEntry(o, aW), IntegerEntry(p, (Y + (aa * Z)))])
379+ else bw
390380 }
391381 }
392382
393383
394384
395385 @Callable(ay)
396-func keepLimitForFirstHarvest (bJ) = if (!(ab))
386+func keepLimitForFirstHarvest (bB) = if (!(ab))
397387 then throw("DApp is inactive at this moment")
398388 else if (!(containsElement([I, J, K, M], ay.callerPublicKey)))
399389 then throw("Only admin can call this function")
400- else [IntegerEntry(q, bJ)]
390+ else [IntegerEntry(q, bB)]
401391
402392
403393
404394 @Callable(ay)
405-func replenishWithTwoTokens (bK) = {
406- let bh = ay.payments[0].assetId
407- let bk = ay.payments[1].assetId
408- let bg = ay.payments[0].amount
409- let bj = ay.payments[1].amount
410- let bL = aI(bh)
411- let bm = bL._1
412- let bn = bL._2
413- let bo = bL._3
414- let bM = aI(bk)
415- let bq = bM._1
416- let br = bM._2
417- let bs = bM._3
395+func replenishWithTwoTokens (bC) = {
396+ let aZ = ay.payments[0].assetId
397+ let bc = ay.payments[1].assetId
398+ let aY = ay.payments[0].amount
399+ let bb = ay.payments[1].amount
400+ let bD = aG(aZ)
401+ let be = bD._1
402+ let bf = bD._2
403+ let bg = bD._3
404+ let bE = aG(bc)
405+ let bi = bE._1
406+ let bj = bE._2
407+ let bk = bE._3
418408 if (if ((ak == 0))
419409 then (al == 0)
420410 else false)
421411 then {
422- let bN = fraction(fraction(aB, ar, bg), aq, fraction(aC, ar, bj))
423- if ((bh == bk))
412+ let bF = fraction(fraction(aB, ar, aY), aq, fraction(aC, ar, bb))
413+ if ((aZ == bc))
424414 then throw("Assets must be different")
425415 else {
426- let bv = ((bo + bs) / 2)
427- let bz = fraction(pow(bg, bo, 5, 1, bo, DOWN), pow(bj, bs, 5, 1, bs, DOWN), pow(10, 0, bv, 0, 0, DOWN))
416+ let bn = ((bg + bk) / 2)
417+ let br = fraction(pow(aY, bg, 5, 1, bg, DOWN), pow(bb, bk, 5, 1, bk, DOWN), pow(10, 0, bn, 0, 0, DOWN))
428418 if (!(ab))
429419 then throw("DApp is inactive at this moment")
430- else if (if ((0 > bK))
420+ else if (if ((0 > bC))
431421 then true
432- else (bK > as))
433- then throw(((("Slippage tolerance must be between 0 and " + toString(as)) + " inclusively. Actual: ") + toString(bK)))
422+ else (bC > as))
423+ then throw(((("Slippage tolerance must be between 0 and " + toString(as)) + " inclusively. Actual: ") + toString(bC)))
434424 else if ((size(ay.payments) != 2))
435425 then throw("Two attached assets expected")
436- else if (if ((((aq * (as - bK)) / as) > bN))
426+ else if (if ((((aq * (as - bC)) / as) > bF))
437427 then true
438- else (bN > ((aq * (as + bK)) / as)))
428+ else (bF > ((aq * (as + bC)) / as)))
439429 then throw("Incorrect assets amount: amounts must have the contract ratio")
440- else if (if ((bh != ae))
430+ else if (if ((aZ != ae))
441431 then true
442- else (bk != af))
432+ else (bc != af))
443433 then throw(((("Incorrect assets attached. Expected: " + ac) + " and ") + ad))
444- else if ((bz == 0))
434+ else if ((br == 0))
445435 then throw("Too small amount to replenish")
446- else if (!(aH))
447- then ([ScriptTransfer(ay.caller, bg, bh), ScriptTransfer(ay.caller, bj, bk)] ++ bd())
436+ else if (!(aF))
437+ then ([ScriptTransfer(ay.caller, aY, aZ), ScriptTransfer(ay.caller, bb, bc)] ++ aV())
448438 else {
449- let bC = if (containsElement(S, bm))
450- then invoke(this, "stakeUnstake", [true, bg, bm], nil)
439+ let bu = if (containsElement(S, be))
440+ then invoke(this, "stakeUnstake", [true, aY, be], nil)
451441 else 0
452- if ((bC == bC))
442+ if ((bu == bu))
453443 then {
454- let bD = if (containsElement(S, bq))
455- then invoke(this, "stakeUnstake", [true, bj, bq], nil)
444+ let bv = if (containsElement(S, bi))
445+ then invoke(this, "stakeUnstake", [true, bb, bi], nil)
456446 else 0
457- if ((bD == bD))
458- then [Reissue(am, bz, true), IntegerEntry(f, bg), IntegerEntry(g, bj), IntegerEntry(k, bz), ScriptTransfer(ay.caller, bz, am)]
447+ if ((bv == bv))
448+ then [Reissue(am, br, true), IntegerEntry(f, aY), IntegerEntry(g, bb), IntegerEntry(k, br), ScriptTransfer(ay.caller, br, am)]
459449 else throw("Strict value is not equal to itself.")
460450 }
461451 else throw("Strict value is not equal to itself.")
462452 }
463453 }
464454 }
465455 else {
466- let bN = fraction(fraction(ak, ar, bg), aq, fraction(al, ar, bj))
467- let bO = fraction(bg, ar, ak)
468- let bP = fraction(bj, ar, al)
469- let bQ = fraction(min([bO, bP]), an, ar)
456+ let bF = fraction(fraction(ak, ar, aY), aq, fraction(al, ar, bb))
457+ let bG = fraction(aY, ar, ak)
458+ let bH = fraction(bb, ar, al)
459+ let bI = fraction(min([bG, bH]), an, ar)
470460 if (!(ab))
471461 then throw("DApp is inactive at this moment")
472- else if (if ((0 > bK))
462+ else if (if ((0 > bC))
473463 then true
474- else (bK > as))
475- then throw(((("Slippage tolerance must be between 0 and " + toString(as)) + " inclusively. Actual: ") + toString(bK)))
464+ else (bC > as))
465+ then throw(((("Slippage tolerance must be between 0 and " + toString(as)) + " inclusively. Actual: ") + toString(bC)))
476466 else if ((size(ay.payments) != 2))
477467 then throw("Two attached assets expected")
478- else if (if ((bh != ae))
468+ else if (if ((aZ != ae))
479469 then true
480- else (bk != af))
470+ else (bc != af))
481471 then throw(((("Incorrect assets attached. Expected: " + ac) + " and ") + ad))
482- else if (if ((((aq * (as - bK)) / as) > bN))
472+ else if (if ((((aq * (as - bC)) / as) > bF))
483473 then true
484- else (bN > ((aq * (as + bK)) / as)))
474+ else (bF > ((aq * (as + bC)) / as)))
485475 then throw("Incorrect assets amount: amounts must have the contract ratio")
486- else if ((bQ == 0))
476+ else if ((bI == 0))
487477 then throw("Too small amount to replenish")
488- else if (!(aH))
489- then ([ScriptTransfer(ay.caller, bg, bh), ScriptTransfer(ay.caller, bj, bk)] ++ bd())
478+ else if (!(aF))
479+ then ([ScriptTransfer(ay.caller, aY, aZ), ScriptTransfer(ay.caller, bb, bc)] ++ aV())
490480 else {
491- let bC = if (containsElement(S, bm))
492- then invoke(this, "stakeUnstake", [true, bg, bm], nil)
481+ let bu = if (containsElement(S, be))
482+ then invoke(this, "stakeUnstake", [true, aY, be], nil)
493483 else 0
494- if ((bC == bC))
484+ if ((bu == bu))
495485 then {
496- let bD = if (containsElement(S, bq))
497- then invoke(this, "stakeUnstake", [true, bj, bq], nil)
486+ let bv = if (containsElement(S, bi))
487+ then invoke(this, "stakeUnstake", [true, bb, bi], nil)
498488 else 0
499- if ((bD == bD))
500- then [IntegerEntry(f, (ak + bg)), IntegerEntry(g, (al + bj)), IntegerEntry(k, (an + bQ)), Reissue(am, bQ, true), ScriptTransfer(ay.caller, bQ, am)]
489+ if ((bv == bv))
490+ then [IntegerEntry(f, (ak + aY)), IntegerEntry(g, (al + bb)), IntegerEntry(k, (an + bI)), Reissue(am, bI, true), ScriptTransfer(ay.caller, bI, am)]
501491 else throw("Strict value is not equal to itself.")
502492 }
503493 else throw("Strict value is not equal to itself.")
504494 }
505495 }
506496 }
507497
508498
509499
510500 @Callable(ay)
511501 func withdraw () = {
512- let bR = $Tuple2(ay.payments[0].amount, ay.payments[0].assetId)
513- let bS = bR._1
514- let bT = bR._2
515- let bU = fraction(bS, ak, an)
516- let bV = fraction(bS, al, an)
502+ let bJ = $Tuple2(ay.payments[0].amount, ay.payments[0].assetId)
503+ let bK = bJ._1
504+ let bL = bJ._2
505+ let bM = fraction(bK, ak, an)
506+ let bN = fraction(bK, al, an)
517507 if (!(ab))
518508 then throw("DApp is inactive at this moment")
519509 else if ((size(ay.payments) != 1))
520510 then throw("One attached payment expected")
521- else if ((bT != am))
511+ else if ((bL != am))
522512 then throw(("Incorrect asset attached. Expected: " + toBase58String(am)))
523- else if (!(aH))
524- then ([ScriptTransfer(ay.caller, bS, bT)] ++ bd())
525- else if (if ((bU > aD))
526- then true
527- else (bV > aE))
528- then ba(bU, bV)
529- else {
530- let bC = if (containsElement(S, ac))
531- then invoke(this, "stakeUnstake", [false, bU, ac], nil)
532- else 0
533- if ((bC == bC))
534- then {
535- let bD = if (containsElement(S, ad))
536- then invoke(this, "stakeUnstake", [false, bV, ad], nil)
537- else 0
538- if ((bD == bD))
539- then [IntegerEntry(f, (ak - bU)), IntegerEntry(g, (al - bV)), IntegerEntry(k, (an - bS)), Burn(am, bS), ScriptTransfer(ay.caller, bU, ae), ScriptTransfer(ay.caller, bV, af)]
540- else throw("Strict value is not equal to itself.")
541- }
542- else throw("Strict value is not equal to itself.")
543- }
513+ else if (!(aF))
514+ then ([ScriptTransfer(ay.caller, bK, bL)] ++ aV())
515+ else {
516+ let bu = if (containsElement(S, ac))
517+ then invoke(this, "stakeUnstake", [false, bM, ac], nil)
518+ else 0
519+ if ((bu == bu))
520+ then {
521+ let bv = if (containsElement(S, ad))
522+ then invoke(this, "stakeUnstake", [false, bN, ad], nil)
523+ else 0
524+ if ((bv == bv))
525+ then [IntegerEntry(f, (ak - bM)), IntegerEntry(g, (al - bN)), IntegerEntry(k, (an - bK)), Burn(am, bK), ScriptTransfer(ay.caller, bM, ae), ScriptTransfer(ay.caller, bN, af)]
526+ else throw("Strict value is not equal to itself.")
527+ }
528+ else throw("Strict value is not equal to itself.")
529+ }
544530 }
545531
546532
547533
548534 @Callable(ay)
549-func exchange (bW) = {
550- let bX = $Tuple2(ay.payments[0].amount, ay.payments[0].assetId)
551- let bS = bX._1
552- let bT = bX._2
553- func bY (bZ,ca) = {
554- let cb = fraction(ca, bS, (bS + bZ))
555- let cc = fraction(cb, (ap - ao), ap)
556- let cd = fraction(cb, commissionGovernance, ap)
557- if ((bW > cc))
558- then throw(((("Calculated amount to receive " + toString(cc)) + " is less than specified minimum ") + toString(bW)))
559- else $Tuple3(cb, cc, cd)
535+func exchange (bO) = {
536+ let bP = $Tuple2(ay.payments[0].amount, ay.payments[0].assetId)
537+ let bK = bP._1
538+ let bL = bP._2
539+ func bQ (bR,bS) = {
540+ let bT = fraction(bS, bK, (bK + bR))
541+ let bU = fraction(bT, (ap - ao), ap)
542+ let bV = fraction(bT, commissionGovernance, ap)
543+ if ((bO > bU))
544+ then throw(((("Calculated amount to receive " + toString(bU)) + " is less than specified minimum ") + toString(bO)))
545+ else $Tuple3(bT, bU, bV)
560546 }
561547
562548 if (!(ab))
563549 then throw("DApp is inactive at this moment")
564550 else if (if ((ak == 0))
565551 then true
566552 else (al == 0))
567553 then throw("Can't exchange with zero balance")
568- else if ((0 >= bW))
569- then throw(("Minimal amount to receive must be positive. Actual: " + toString(bW)))
554+ else if ((0 >= bO))
555+ then throw(("Minimal amount to receive must be positive. Actual: " + toString(bO)))
570556 else if ((size(ay.payments) != 1))
571557 then throw("One attached payment expected")
572- else if (!(aH))
573- then ([ScriptTransfer(ay.caller, bS, bT)] ++ bd())
574- else if ((bT == ae))
558+ else if (!(aF))
559+ then ([ScriptTransfer(ay.caller, bK, bL)] ++ aV())
560+ else if ((bL == ae))
575561 then {
576- let ce = af
577- let cf = bY(ak, al)
578- let cb = cf._1
579- let cc = cf._2
580- let cd = cf._3
581- let cg = (ak + bS)
582- let ch = ((al - cc) - cd)
583- let bC = if (containsElement(S, ac))
584- then invoke(this, "stakeUnstake", [true, bS, ac], nil)
562+ let bW = af
563+ let bX = bQ(ak, al)
564+ let bT = bX._1
565+ let bU = bX._2
566+ let bV = bX._3
567+ let bY = (ak + bK)
568+ let bZ = ((al - bU) - bV)
569+ let bu = if (containsElement(S, ac))
570+ then invoke(this, "stakeUnstake", [true, bK, ac], nil)
585571 else 0
586- if ((bC == bC))
572+ if ((bu == bu))
587573 then {
588- let bD = if (containsElement(S, ad))
589- then invoke(this, "stakeUnstake", [false, (cc + cd), ad], nil)
574+ let bv = if (containsElement(S, ad))
575+ then invoke(this, "stakeUnstake", [false, (bU + bV), ad], nil)
590576 else 0
591- if ((bD == bD))
592- then [IntegerEntry(f, cg), IntegerEntry(g, ch), ScriptTransfer(ay.caller, cc, ce), ScriptTransfer(N, cd, ce)]
577+ if ((bv == bv))
578+ then [IntegerEntry(f, bY), IntegerEntry(g, bZ), ScriptTransfer(ay.caller, bU, bW), ScriptTransfer(N, bV, bW)]
593579 else throw("Strict value is not equal to itself.")
594580 }
595581 else throw("Strict value is not equal to itself.")
596582 }
597- else if ((bT == af))
583+ else if ((bL == af))
598584 then {
599- let ce = ae
600- let ci = bY(al, ak)
601- let cb = ci._1
602- let cc = ci._2
603- let cd = ci._3
604- let cg = ((ak - cc) - cd)
605- let ch = (al + bS)
606- if (if ((az >= cg))
607- then true
608- else (aA >= ch))
609- then aX(cc, aD, ag)
610- else {
611- let bC = if (containsElement(S, ac))
612- then invoke(this, "stakeUnstake", [false, (cc + cd), ac], nil)
585+ let bW = ae
586+ let ca = bQ(al, ak)
587+ let bT = ca._1
588+ let bU = ca._2
589+ let bV = ca._3
590+ let bY = ((ak - bU) - bV)
591+ let bZ = (al + bK)
592+ let bu = if (containsElement(S, ac))
593+ then invoke(this, "stakeUnstake", [false, (bU + bV), ac], nil)
594+ else 0
595+ if ((bu == bu))
596+ then {
597+ let bv = if (containsElement(S, ad))
598+ then invoke(this, "stakeUnstake", [true, bK, ad], nil)
613599 else 0
614- if ((bC == bC))
615- then {
616- let bD = if (containsElement(S, ad))
617- then invoke(this, "stakeUnstake", [true, bS, ad], nil)
618- else 0
619- if ((bD == bD))
620- then [IntegerEntry(f, cg), IntegerEntry(g, ch), ScriptTransfer(ay.caller, cc, ce), ScriptTransfer(N, cd, ce)]
621- else throw("Strict value is not equal to itself.")
622- }
600+ if ((bv == bv))
601+ then [IntegerEntry(f, bY), IntegerEntry(g, bZ), ScriptTransfer(ay.caller, bU, bW), ScriptTransfer(N, bV, bW)]
623602 else throw("Strict value is not equal to itself.")
624603 }
604+ else throw("Strict value is not equal to itself.")
625605 }
626606 else throw(((("Incorrect asset attached. Expected: " + ac) + " or ") + ad))
627607 }
628608
629609
630610
631611 @Callable(ay)
632612 func shutdown () = if (!(ab))
633613 then throw(("DApp is already suspended. Cause: " + valueOrElse(getString(this, n), "the cause wasn't specified")))
634614 else if (!(containsElement([I, J, K, L], ay.callerPublicKey)))
635615 then throw("Only admin can call this function")
636- else aN("Paused by admin")
616+ else aL("Paused by admin")
637617
638618
639619
640620 @Callable(ay)
641621 func activate () = if (ab)
642622 then throw("DApp is already active")
643623 else if (!(containsElement([I, J, K, L], ay.callerPublicKey)))
644624 then throw("Only admin can call this function")
645625 else [BooleanEntry(c, true), DeleteEntry(n)]
646626
647627
648628
649629 @Callable(ay)
650-func takeIntoAccountExtraFunds (cj) = {
651- let ck = (aF - ak)
652- let cl = (aG - al)
653- let cm = (ck - (if ((ae == unit))
654- then cj
630+func takeIntoAccountExtraFunds (cb) = {
631+ let cc = (aD - ak)
632+ let cd = (aE - al)
633+ let ce = (cc - (if ((ae == unit))
634+ then cb
655635 else 0))
656- let cn = (cl - (if ((af == unit))
657- then cj
636+ let cf = (cd - (if ((af == unit))
637+ then cb
658638 else 0))
659639 if (!(ab))
660640 then throw("DApp is inactive at this moment")
661641 else if ((ay.caller != this))
662642 then throw("Only the DApp itself can call this function")
663- else if ((0 > cj))
664- then throw(("Argument 'amountLeave' cannot be negative. Actual: " + toString(cj)))
665- else if (if ((0 > ck))
643+ else if ((0 > cb))
644+ then throw(("Argument 'amountLeave' cannot be negative. Actual: " + toString(cb)))
645+ else if (if ((0 > cc))
666646 then true
667- else (0 > cl))
668- then aN("Enroll amount negative")
669- else if (if ((0 > cm))
647+ else (0 > cd))
648+ then aL("Enroll amount negative")
649+ else if (if ((0 > ce))
670650 then true
671- else (0 > cn))
651+ else (0 > cf))
672652 then throw("Too large amountLeave")
673653 else {
674- let bC = if (if (containsElement(S, ac))
675- then (cm > 0)
654+ let bu = if (if (containsElement(S, ac))
655+ then (ce > 0)
676656 else false)
677- then invoke(this, "stakeUnstake", [true, cm, ac], nil)
657+ then invoke(this, "stakeUnstake", [true, ce, ac], nil)
678658 else 0
679- if ((bC == bC))
659+ if ((bu == bu))
680660 then {
681- let bD = if (if (containsElement(S, ad))
682- then (cn > 0)
661+ let bv = if (if (containsElement(S, ad))
662+ then (cf > 0)
683663 else false)
684- then invoke(this, "stakeUnstake", [true, cn, ad], nil)
664+ then invoke(this, "stakeUnstake", [true, cf, ad], nil)
685665 else 0
686- if ((bD == bD))
687- then [IntegerEntry(f, (ak + cm)), IntegerEntry(g, (al + cn)), IntegerEntry(("last_income_" + ac), cm), IntegerEntry(("last_income_" + ad), cn)]
666+ if ((bv == bv))
667+ then [IntegerEntry(f, (ak + ce)), IntegerEntry(g, (al + cf)), IntegerEntry(("last_income_" + ac), ce), IntegerEntry(("last_income_" + ad), cf)]
688668 else throw("Strict value is not equal to itself.")
689669 }
690670 else throw("Strict value is not equal to itself.")
691671 }
692672 }
693673
694674
695675
696676 @Callable(ay)
697-func stakeUnstake (aQ,aS,co) = if ((ay.caller != this))
677+func stakeUnstake (aO,aQ,cg) = if ((ay.caller != this))
698678 then throw("Only contract itself can invoke this function")
699- else if ((co == "WAVES"))
679+ else if ((cg == "WAVES"))
700680 then {
701- let cp = addressFromStringValue(valueOrErrorMessage(getString(C, w), "No leasing pool in oracle"))
702- let cq = getBinary(this, y)
703- let cr = valueOrElse(getInteger(this, x), 0)
704- let cs = if (aQ)
705- then (cr + aS)
706- else (cr - aS)
707- let ct = Lease(cp, cs)
708- let cu = calculateLeaseId(ct)
709- let cv = [ct, BinaryEntry(y, cu), IntegerEntry(x, cs)]
710- let F = cq
681+ let ch = addressFromStringValue(valueOrErrorMessage(getString(C, w), "No leasing pool in oracle"))
682+ let ci = getBinary(this, y)
683+ let cj = valueOrElse(getInteger(this, x), 0)
684+ let ck = if (aO)
685+ then (cj + aQ)
686+ else (cj - aQ)
687+ let cl = Lease(ch, ck)
688+ let cm = calculateLeaseId(cl)
689+ let cn = [cl, BinaryEntry(y, cm), IntegerEntry(x, ck)]
690+ let F = ci
711691 if ($isInstanceOf(F, "ByteVector"))
712692 then {
713- let cw = F
714- ([LeaseCancel(cw)] ++ cv)
693+ let co = F
694+ ([LeaseCancel(co)] ++ cn)
715695 }
716- else cv
696+ else cn
717697 }
718698 else {
719- let cx = aR(aQ, aS, fromBase58String(co))
720- let aU = cx._1
721- let cy = cx._2
722- let cz = cx._3
723- let cA = cx._4
724- let cB = invoke(cy, aU, cz, cA)
725- if ((cB == cB))
699+ let cp = aP(aO, aQ, fromBase58String(cg))
700+ let aS = cp._1
701+ let cq = cp._2
702+ let cr = cp._3
703+ let cs = cp._4
704+ let ct = invoke(cq, aS, cr, cs)
705+ if ((ct == ct))
726706 then nil
727707 else throw("Strict value is not equal to itself.")
728708 }
729709
730710
731711
732712 @Callable(ay)
733713 func stakeAll () = if (!(ab))
734714 then throw("DApp is inactive at this moment")
735715 else if (!(containsElement([I, J, K, L], ay.callerPublicKey)))
736716 then throw("Only admin can call this function")
737717 else {
738- let bC = if (containsElement(S, ac))
718+ let bu = if (containsElement(S, ac))
739719 then {
740- let bb = (ak - az)
741- if ((bb > 0))
742- then invoke(this, "stakeUnstake", [true, bb, ac], nil)
720+ let cu = (ak - az)
721+ if ((cu > 0))
722+ then invoke(this, "stakeUnstake", [true, cu, ac], nil)
743723 else 0
744724 }
745725 else 0
746- if ((bC == bC))
726+ if ((bu == bu))
747727 then {
748- let bD = if (containsElement(S, ad))
728+ let bv = if (containsElement(S, ad))
749729 then {
750- let bc = (al - aA)
751- if ((bc > 0))
752- then invoke(this, "stakeUnstake", [true, bc, ad], nil)
730+ let cv = (al - aA)
731+ if ((cv > 0))
732+ then invoke(this, "stakeUnstake", [true, cv, ad], nil)
753733 else 0
754734 }
755735 else 0
756- if ((bD == bD))
736+ if ((bv == bv))
757737 then nil
758738 else throw("Strict value is not equal to itself.")
759739 }
760740 else throw("Strict value is not equal to itself.")
761741 }
762742
763743
764-@Verifier(cC)
765-func cD () = {
766- let cE = {
767- let cF = if (sigVerify(cC.bodyBytes, cC.proofs[0], I))
744+@Verifier(cw)
745+func cx () = {
746+ let cy = {
747+ let cz = if (sigVerify(cw.bodyBytes, cw.proofs[0], I))
768748 then 1
769749 else 0
770- let cG = if (sigVerify(cC.bodyBytes, cC.proofs[1], J))
750+ let cA = if (sigVerify(cw.bodyBytes, cw.proofs[1], J))
771751 then 1
772752 else 0
773- let cH = if (sigVerify(cC.bodyBytes, cC.proofs[2], K))
753+ let cB = if (sigVerify(cw.bodyBytes, cw.proofs[2], K))
774754 then 1
775755 else 0
776- (((cF + cG) + cH) >= 2)
756+ (((cz + cA) + cB) >= 2)
777757 }
778- let F = cC
758+ let F = cw
779759 if ($isInstanceOf(F, "InvokeScriptTransaction"))
780760 then {
781- let cB = F
782- let cI = if ((cB.dApp == this))
783- then (cB.function == "takeIntoAccountExtraFunds")
761+ let ct = F
762+ let cC = if ((ct.dApp == this))
763+ then (ct.function == "takeIntoAccountExtraFunds")
784764 else false
785- let cJ = if (if (if ((cB.dApp == V))
786- then (cB.function == "exchange")
765+ let cD = if (if (if ((ct.dApp == V))
766+ then (ct.function == "exchange")
787767 else false)
788768 then (ae == P)
789769 else false)
790770 then true
791771 else if (if ((af == P))
792- then (size(cB.payments) == 1)
772+ then (size(ct.payments) == 1)
793773 else false)
794- then (cB.payments[0].assetId == P)
774+ then (ct.payments[0].assetId == P)
795775 else false
796- let cK = if (if (if ((cB.dApp == W))
797- then (cB.function == "exchange")
776+ let cE = if (if (if ((ct.dApp == W))
777+ then (ct.function == "exchange")
798778 else false)
799779 then (ae == Q)
800780 else false)
801781 then true
802782 else if (if ((af == Q))
803- then (size(cB.payments) == 1)
783+ then (size(ct.payments) == 1)
804784 else false)
805- then (cB.payments[0].assetId == P)
785+ then (ct.payments[0].assetId == P)
806786 else false
807- let cL = if (if (if (sigVerify(cC.bodyBytes, cC.proofs[0], I))
787+ let cF = if (if (if (sigVerify(cw.bodyBytes, cw.proofs[0], I))
808788 then true
809- else sigVerify(cC.bodyBytes, cC.proofs[0], J))
789+ else sigVerify(cw.bodyBytes, cw.proofs[0], J))
810790 then true
811- else sigVerify(cC.bodyBytes, cC.proofs[0], K))
791+ else sigVerify(cw.bodyBytes, cw.proofs[0], K))
812792 then true
813- else sigVerify(cC.bodyBytes, cC.proofs[0], M)
814- if (if (if (if (cI)
793+ else sigVerify(cw.bodyBytes, cw.proofs[0], M)
794+ if (if (if (if (cC)
815795 then true
816- else cJ)
796+ else cD)
817797 then true
818- else cK)
819- then cL
798+ else cE)
799+ then cF
820800 else false)
821801 then true
822- else cE
802+ else cy
823803 }
824- else cE
804+ else cy
825805 }
826806

github/deemru/w8io/026f985 
233.52 ms