tx · Hhmftx4zsDJmHpo15zEgE87hGgBjwxceqTdhKSvRnrc

3N5Xd7QVQZWntaJwha9Kg42is626GUPjtUW:  -0.14000000 Waves

2022.06.06 15:45 [2084512] smart account 3N5Xd7QVQZWntaJwha9Kg42is626GUPjtUW > SELF 0.00000000 Waves

{ "type": 13, "id": "Hhmftx4zsDJmHpo15zEgE87hGgBjwxceqTdhKSvRnrc", "fee": 14000000, "feeAssetId": null, "timestamp": 1654519525914, "version": 2, "chainId": 84, "sender": "3N5Xd7QVQZWntaJwha9Kg42is626GUPjtUW", "senderPublicKey": "DfbjpZJBbZwnUKysUkxCbWTE1ZWuoUb6Y6BZdu5iAE8j", "proofs": [ "qzXBgMtx5jvpj4WP7UiT3i1PzcbXNzqKTdN1jYEzvXDFEr9ZVZjwo8JLuAKn8jHt7FW6k14aePnbnPCWjLmDfCo", "4P2s71MrCzYE28pYL4KYyyFbp9p273rX9mMKrvJiVXibdiA34FQuRuYTFsb3iHo3tcP8VR34w4zdiDjQRfWYqjAA" ], "script": "base64:AAIFAAAAAAAAEvgIAhIAEgASBAoCAQESABIECgIBARIAEgASABIFCgMEAQgSABoMCgFBEgckbWF0Y2gwGgsKAUISBnN0cmluZxoMCgFDEgdub3RoaW5nGhEKAUQSDGFkbWluUHViS2V5MRoRCgFFEgxhZG1pblB1YktleTIaEQoBRhIMYWRtaW5QdWJLZXkzGhYKAUcSEWFkbWluUHViS2V5SW52b2tlGhQKAUgSD21vbmV5Qm94QWRkcmVzcxoPCgFJEgpnb3ZBZGRyZXNzGhcKAUoSEnN0YWtpbmdVU0ROQWRkcmVzcxoJCgFLEgRVU0ROGhIKAUwSDXN0YWtpbmdBc3NldHMaCwoBTRIGYWN0aXZlGhAKAU4SC3N0ckFzc2V0SWRBGhAKAU8SC3N0ckFzc2V0SWRCGg0KAVASCGFzc2V0SWRBGg0KAVESCGFzc2V0SWRCGg8KAVISCmFzc2V0TmFtZUEaBwoBUxICaWQaCgoBVBIFd2F2ZXMaDwoBVRIKYXNzZXROYW1lQhoNCgFWEghiYWxhbmNlQRoNCgFXEghiYWxhbmNlQhoRCgFYEgxzaGFyZUFzc2V0SWQaFQoBWRIQc2hhcmVBc3NldFN1cHBseRoOCgFaEglpbnZhcmlhbnQaDAoBYRIHdmVyc2lvbhofCgJhQRIZYWNjb3VudEJhbGFuY2VXaXRoU3Rha2VkQhoWCgJhQhIQaGFzRW5vdWdoQmFsYW5jZRoOCgJhQxIIc2tld25lc3MaBwoCYUQSAXgaBwoCYUUSAXkaEwoCYUYSDWludmFyaWFudENhbGMaCAoCYUcSAnNrGhkKAmFIEhNjYWxjdWxhdGVTZW5kQW1vdW50GhsKAmFJEhVhbW91bnRUb1NlbmRFc3RpbWF0ZWQaGwoCYUoSFW1pblRva2VuUmVjZWl2ZUFtb3VudBoYCgJhSxISdG9rZW5SZWNlaXZlQW1vdW50Gg0KAmFMEgd0b2tlbklkGiMKAmFNEh13b3JzdEFsbG93ZWROZXdJbnZhcmlhbnRSYXRpbxokCgJhThIeZGVsdGFCZXR3ZWVuTWF4QW5kTWluU2VuZFZhbHVlGhMKAmFPEg1nZXRTdGVwQW1vdW50GgkKAmFQEgNhY2MaCgoCYVESBHN0ZXAaEgoCYVISDGFtb3VudFRvU2VuZBoTCgJhUxINc3RlcEludmFyaWFudBoVCgJhVBIPYW1vdW50VG9TZW5kTWluGhIKAmFVEgxpbnZFc3RpbWF0ZWQaBwoCYVYSAWEaCAoCYVcSAiRsGggKAmFYEgIkcxoLCgJhWRIFJGFjYzAaCwoCYVoSBSRmMF8xGgkKAmFhEgNmZWUaEwoCYWISDWZlZUdvdmVybmFuY2UaDwoCYWMSCWZlZVNjYWxlNhoMCgJhZBIGc2NhbGUzGgwKAmFlEgZzY2FsZTgaDQoCYWYSB3NjYWxlMTYaFAoCYWcSDnNsaXBwYWdlU2NhbGUzGg0KAmFoEgdkaWdpdHM4GhMKAmFpEg1kQXBwVGhyZXNob2xkGhkKAmFqEhNkQXBwVGhyZXNob2xkU2NhbGUyGhwKAmFrEhZleGNoYW5nZVJhdGlvTGltaXRDb2VmGhgKAmFsEhJleGNoYW5nZVJhdGlvTGltaXQaCwoCYW0SBWFscGhhGhEKAmFuEgthbHBoYURpZ2l0cxoKCgJhbxIEYmV0YRoUCgJhcBIOYWNjb3VudEJhbGFuY2UaDQoCYXESB2Fzc2V0SWQaEgoCYXISDHN0YWtlZEFtb3VudBocCgJhcxIWc3Rha2VkQW1vdW50Q2FsY3VsYXRlZBoJCgJhdBIDYUlkGgcKAmF1EgFpGhMKAmF2Eg1zdGFrZWRBbW91bnRBGhMKAmF3Eg1zdGFrZWRBbW91bnRCGhcKAmF4EhFhdmFpbGFibGVCYWxhbmNlQRoXCgJheRIRYXZhaWxhYmxlQmFsYW5jZUIaHwoCYXoSGWFjY291bnRCYWxhbmNlV2l0aFN0YWtlZEEaDQoBYhIIa1ZlcnNpb24aEQoCYkESCyR0MDk1MTQ5NTgwGhoKAmJCEhRjYWxjdWxhdGVGZWVEaXNjb3VudBoOCgJiQxIIdXNlckFkZHIaEAoCYkQSCnN3b3BBbW91bnQaFAoCYkUSDmRpc2NvdW50VmFsdWVzGg8KAmJGEglkaXNjb3VudHMaHAoCYkcSFmNhbGNCYWxhbmNlQW5kUG10UmF0aW8aDgoCYkgSCEFCYWxhbmNlGg4KAmJJEghCQmFsYW5jZRoYCgJiShISbWluQW1vdW50VG9SZWNlaXZlGg8KAmJLEglwbXRBbW91bnQaEAoCYkwSCnBtdEFzc2V0SWQaCwoCYk0SBXJhdGlvGgwKAmJOEgZwcmF0aW8aEwoCYk8SDSR0MDExNDk4MTE1NzUaEAoCYlASCnBtdEFtb3VudEEaEQoCYlESC3BtdEFzc2V0SWRBGhMKAmJSEg0kdDAxMTU4MDExNjU3GhAKAmJTEgpwbXRBbW91bnRCGhEKAmJUEgtwbXRBc3NldElkQhoTCgJiVRINJHQwMTE2NjIxMTczORoUCgJiVhIOcG10U3RyQXNzZXRJZEEaEwoCYlcSDXBtdEFzc2V0TmFtZUEaEgoCYlgSDHBtdERlY2ltYWxzQRoTCgJiWRINJHQwMTE3NDQxMTgyMRoUCgJiWhIOcG10U3RyQXNzZXRJZEIaCAoCYmESAiRhGggKAmJiEgIkaRoLCgJiYxIFJGYwXzIaFQoCYmQSD3R1cGxlU2VuZEJldHRlchoSCgJiZRIMZ2V0QXNzZXRJbmZvGg4KAmJmEghzdHJpbmdJZBoKCgJiZxIEaW5mbxoNCgJiaBIHc3VzcGVuZBoLCgJiaRIFY2F1c2UaEwoCYmoSDXRocm93SXNBY3RpdmUaDgoCYmsSCGlzQWN0aXZlGhEKAmJsEgtpc0FkbWluQ2FsbBoRCgJibRILdGhyb3dBc3NldHMaFQoCYm4SD3Rocm93T25lUGF5bWVudBoXCgJibxIRc3VzcGVuZFN1c3BpY2lvdXMaFAoCYnASDnRocm93VGhyZXNob2xkGg8KAmJxEgl0aHJlc2hvbGQaDQoCYnISB2Ftb3VudEEaDQoCYnMSB2Ftb3VudEIaHgoCYnQSGGNhbGNTdGFraW5nRnVuY0FuZEFkZHJlcxoLCgJidRIFc3Rha2UaFwoCYnYSEWNhbGNTdGFraW5nUGFyYW1zGgwKAmJ3EgZhbW91bnQaEQoCYngSCyR0MDkzNjI5NDI4GgoKAmJ5EgRjYWxsGhEKAmJ6EgtzdGFraW5nQWRkchoMCgFjEgdrQWN0aXZlGhIKAmNBEgxwbXRBc3NldE5hbWUaEQoCY0ISC3BtdERlY2ltYWxzGhUKAmNDEg9wbXRNaW5UaHJlc2hvbGQaIwoCY0QSHXRocmVzaG9sZFZhbHVlRm9yTWluVG9sZXJhbmNlGg8KAmNFEgl0b2xlcmFuY2UaIgoCY0YSHHNsaXBwYWdlVmFsdWVNaW5Gb3JSZXBsZW5pc2gaIgoCY0cSHHNsaXBwYWdlVmFsdWVNYXhGb3JSZXBsZW5pc2gaHQoCY0gSF3NsaXBwYWdlVmFsdWVNaW5Gb3JTd2FwGhMKAmNJEg0kdDAxODA0MTE4NjgzGhcKAmNKEhF2aXJ0dWFsUmVwbGVuaXNoQRoXCgJjSxIRdmlydHVhbFJlcGxlbmlzaEIaFwoCY0wSEWJhbGFuY2VBZnRlclN3YXBBGhcKAmNNEhFiYWxhbmNlQWZ0ZXJTd2FwQhoRCgJjThILbmV3QmFsYW5jZUEaEQoCY08SC25ld0JhbGFuY2VCGhIKAmNQEgxpbnZhcmlhbnROZXcaKwoCY1ESJXJhdGlvVmlydHVhbEJhbGFuY2VUb1ZpcnR1YWxSZXBsZW5pc2gaIwoCY1ISHXNoYXJlVG9rZW5Ub1BheUFtb3VudEFmdGVyRmVlGiAKAmNTEhpzaGFyZVRva2VuR292ZXJuYW5jZVJld2FyZBocCgJjVBIWZ292ZXJuYW5jZVJld2FyZFRva2VuQRocCgJjVRIWZ292ZXJuYW5jZVJld2FyZFRva2VuQhoTCgJjVhINJHQwMjAzOTQyMDY4ORoRCgJjVxILc3Rha2VBbW91bnQaEwoCY1gSDXVuc3Rha2VBbW91bnQaEgoCY1kSDHVuc3Rha2VBc3NldBoTCgJjWhINJHQwMjE5NzYyMjA1MRoTCgJjYRINcG10QXNzZXROYW1lQhoSCgJjYhIMcG10RGVjaW1hbHNCGg8KAmNjEglzaGFyZU5hbWUaFgoCY2QSEHNoYXJlRGVzY3JpcHRpb24aEwoCY2USDXNoYXJlRGVjaW1hbHMaGAoCY2YSEnNoYXJlSW5pdGlhbFN1cHBseRoQCgJjZxIKc2hhcmVJc3N1ZRoSCgJjaBIMc2hhcmVJc3N1ZUlkGhkKAmNpEhNpbnZhcmlhbnRDYWxjdWxhdGVkGgwKAmNqEgZzdGFrZTEaDAoCY2sSBnN0YWtlMhoZCgJjbBITcmF0aW9TaGFyZVRva2Vuc0luQRoZCgJjbRITcmF0aW9TaGFyZVRva2Vuc0luQhoTCgJjbhINJHQwMTQ0NjkxNDU0NhoTCgJjbxINJHQwMTQ1NTExNDY2OBoTCgJjcBINJHQwMTQ2NzMxNTE3NxoJCgJjcRIDcG10GgwKAmNyEgZjaGFuZ2UaEwoCY3MSDWNoYW5nZUFzc2V0SWQaFQoCY3QSD3NoYXJlVG9rZW5SYXRpbxobCgJjdRIVc2hhcmVUb2tlblRvUGF5QW1vdW50GhkKAmN2EhN2aXJ0dWFsU3dhcFRva2VuUGF5GhkKAmN3EhN2aXJ0dWFsU3dhcFRva2VuR2V0GhMKAmN4Eg0kdDAxNjkxMDE2OTg1GhMKAmN5Eg0kdDAxNjk5MDE3MDYzGhMKAmN6Eg1wbXRTdHJBc3NldElkGg4KAWQSCWtBc3NldElkQRoICgJkQRICdHgaDAoCZEISBnZlcmlmeRoZCgJkQxITbXVsdGlTaWduZWRCeUFkbWlucxoYCgJkRBISYWRtaW5QdWJLZXkxU2lnbmVkGhgKAmRFEhJhZG1pblB1YktleTJTaWduZWQaGAoCZEYSEmFkbWluUHViS2V5M1NpZ25lZBoZCgJkRxITY2FsbFRha2VJbnRvQWNjb3VudBoTCgJkSBINc2lnbmVkQnlBZG1pbhoSCgJkYRIMYW1vdW50VG9QYXlBGhIKAmRiEgxhbW91bnRUb1BheUIaHgoCZGMSGGVzdGltYXRlZEFtb3VudFRvUmVjZWl2ZRoTCgJkZBINJHQwMjM2MDIyMzY3NxoTCgJkZRINJHQwMjQzNjMyNDQ3ORoSCgJkZhIMYmFsYW5jZVJhdGlvGg4KAmRnEghwbXRSYXRpbxoRCgJkaBILc2VuZEFzc2V0SWQaEQoCZGkSC2ZlZURpc2NvdW50GhYKAmRqEhBnb3Zlcm5hbmNlUmV3YXJkGhQKAmRrEg5hbW91bnRNaW51c0ZlZRoTCgJkbBINJHQwMjUyMzQyNTUxMhoZCgJkbRITZEFwcFRocmVzaG9sZEFtb3VudBoTCgJkbhINJHQwMjU4MzEyNTkwNBoTCgJkbxINJHQwMjU5MjEyNTk5OBoUCgJkcBIOc2VuZFN0ckFzc2V0SWQaEwoCZHESDXNlbmRBc3NldE5hbWUaEgoCZHISDHNlbmREZWNpbWFscxoTCgJkcxINYW1vdW50RW5yb2xsQRoTCgJkdBINYW1vdW50RW5yb2xsQhoTCgJkdRINYXNzZXRJZFN0cmluZxoTCgJkdhINJHQwMjkwNDEyOTE0NBoKCgJkdxIEYWRkchoMCgJkeBIGcGFyYW1zGg4KAmR5EghwYXltZW50cxoJCgJkehIDaW52Gg4KAWUSCWtBc3NldElkQhoOCgFmEglrQmFsYW5jZUEaDgoBZxIJa0JhbGFuY2VCGhIKAWgSDWtTaGFyZUFzc2V0SWQaFgoBaRIRa1NoYXJlQXNzZXRTdXBwbHkaCQoBahIEa0ZlZRoPCgFrEgprSW52YXJpYW50GgsKAWwSBmtDYXVzZRoRCgFtEgxrVVNETkFkZHJlc3MaEQoBbhIMa0VVUk5BZGRyZXNzGg8KAW8SCmtEaXNjb3VudHMaFAoBcBIPa0Rpc2NvdW50VmFsdWVzGhMKAXESDmtVc2VyU3dvcEluR292GhIKAXISDWtBZG1pblB1YktleTEaEgoBcxINa0FkbWluUHViS2V5MhoSCgF0Eg1rQWRtaW5QdWJLZXkzGhcKAXUSEmtBZG1pbkludm9rZVB1YktleRoVCgF2EhBrTW9uZXlCb3hBZGRyZXNzGhAKAXcSC2tHb3ZBZGRyZXNzGgsKAXgSBm9yYWNsZRoYCgF5EhNnZXRCYXNlNThGcm9tT3JhY2xlGggKAXoSA2tleQAAAFYAAAAAAWECAAAABTIuMC4wAAAAAAFiAgAAAAd2ZXJzaW9uAAAAAAFjAgAAAAZhY3RpdmUAAAAAAWQCAAAACkFfYXNzZXRfaWQAAAAAAWUCAAAACkJfYXNzZXRfaWQAAAAAAWYCAAAAD0FfYXNzZXRfYmFsYW5jZQAAAAABZwIAAAAPQl9hc3NldF9iYWxhbmNlAAAAAAFoAgAAAA5zaGFyZV9hc3NldF9pZAAAAAABaQIAAAASc2hhcmVfYXNzZXRfc3VwcGx5AAAAAAFqAgAAAApjb21taXNzaW9uAAAAAAFrAgAAAAlpbnZhcmlhbnQAAAAAAWwCAAAADnNodXRkb3duX2NhdXNlAAAAAAFtAgAAABhzdGFraW5nX3VzZG5uc2J0X2FkZHJlc3MAAAAAAW4CAAAAFHN0YWtpbmdfZXVybl9hZGRyZXNzAAAAAAFvAgAAAAlkaXNjb3VudHMAAAAAAXACAAAAD2Rpc2NvdW50X3ZhbHVlcwAAAAABcQIAAAAMX1NXT1BfYW1vdW50AAAAAAFyAgAAAAthZG1pbl9wdWJfMQAAAAABcwIAAAALYWRtaW5fcHViXzIAAAAAAXQCAAAAC2FkbWluX3B1Yl8zAAAAAAF1AgAAABBhZG1pbl9pbnZva2VfcHViAAAAAAF2AgAAABFtb25leV9ib3hfYWRkcmVzcwAAAAABdwIA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", "height": 2084512, "applicationStatus": "succeeded", "spentComplexity": 0 } View: original | compacted Prev: sRVmQR5UUJKRKZCf1TQfzRMKNNSybvkhGumCVmFFztf Next: HHTretVGkLmUGNcuYk3CNk53GFLEPycsdjonWAA4DDut Diff:
OldNewDifferences
151151
152152 let ah = 8
153153
154-let ai = 50
154+let ai = 125
155155
156-let aj = 100
156+let aj = 1000
157157
158-let ak = 90000000
158+let ak = 2500000
159159
160-let al = 110000000
160+let al = 93500000
161161
162162 let am = 50
163163
344344 func bn () = throw("One attached payment expected")
345345
346346
347-func bo (bp,bq,br) = throw(((((((((("New balance in assets of the DApp is less than threshold " + toString(bp)) + ": ") + toString(bq)) + " ") + R) + ", ") + toString(br)) + " ") + U))
347+func bo () = bh(((((((((((((((("Suspicious state. Actual balances: " + toString(V)) + " ") + R) + ", ") + toString(W)) + " ") + U) + ". State: ") + toString(ap(P))) + " ") + R) + ", ") + toString(ap(Q))) + " ") + U))
348348
349349
350-func bs () = bh(((((((((((((((("Suspicious state. Actual balances: " + toString(V)) + " ") + R) + ", ") + toString(W)) + " ") + U) + ". State: ") + toString(ap(P))) + " ") + R) + ", ") + toString(ap(Q))) + " ") + U))
350+func bp (bq,br,bs) = throw(((((((((("New balance in assets of the DApp is less than threshold " + toString(bq)) + ": ") + toString(br)) + " ") + R) + ", ") + toString(bs)) + " ") + U))
351351
352352
353353 func bt (bu,aq) = if (bu)
396396 }
397397
398398
399+func bG (bH,bI,bJ,bK,bL) = if ((V > W))
400+ then {
401+ let bM = fraction(ae, V, W)
402+ let bN = if ((bL == P))
403+ then fraction(ae, bJ, bK)
404+ else fraction(ae, bJ, bK)
405+ $Tuple2(bM, bN)
406+ }
407+ else {
408+ let bM = fraction(ae, W, V)
409+ let bN = if ((bL == P))
410+ then fraction(ae, bJ, bK)
411+ else fraction(ae, bJ, bK)
412+ $Tuple2(bM, bN)
413+ }
414+
415+
399416 @Callable(au)
400417 func init () = {
401- let bG = $Tuple2(au.payments[0].amount, au.payments[0].assetId)
402- let bH = bG._1
403- let bI = bG._2
404- let bJ = $Tuple2(au.payments[1].amount, au.payments[1].assetId)
405- let bK = bJ._1
406- let bL = bJ._2
407- let bM = be(bI)
408- let bN = bM._1
409- let bO = bM._2
410- let bP = bM._3
411- let bQ = be(bL)
412- let bR = bQ._1
413- let bS = bQ._2
414- let bT = bQ._3
418+ let bO = $Tuple2(au.payments[0].amount, au.payments[0].assetId)
419+ let bP = bO._1
420+ let bQ = bO._2
421+ let bR = $Tuple2(au.payments[1].amount, au.payments[1].assetId)
422+ let bS = bR._1
423+ let bT = bR._2
424+ let bU = be(bQ)
425+ let bV = bU._1
426+ let bW = bU._2
427+ let bX = bU._3
428+ let bY = be(bT)
429+ let bZ = bY._1
430+ let ca = bY._2
431+ let cb = bY._3
415432 if (isDefined(getBoolean(this, c)))
416433 then bj()
417- else if ((bI == bL))
434+ else if ((bQ == bT))
418435 then throw("Assets must be different")
419436 else {
420- let bU = ((("s" + take(bO, 7)) + "_") + take(bS, 7))
421- let bV = ((((("ShareToken of SwopFi protocol for " + bO) + " and ") + bS) + " at address ") + toString(this))
422- let bW = ((bP + bT) / 2)
423- let bX = fraction(pow(bH, bP, 5, 1, bP, DOWN), pow(bK, bT, 5, 1, bT, DOWN), pow(10, 0, bW, 0, 0, DOWN))
424- let bY = Issue(bU, bV, bX, bW, true)
425- let bZ = calculateAssetId(bY)
426- let ca = aF(bH, bK)
427- let cb = if (containsElement(L, bN))
428- then invoke(this, "stakeUnstake", [true, bH, bN], nil)
437+ let cc = ((("s" + take(bW, 7)) + "_") + take(ca, 7))
438+ let cd = ((((("ShareToken of SwopFi protocol for " + bW) + " and ") + ca) + " at address ") + toString(this))
439+ let ce = ((bX + cb) / 2)
440+ let cf = fraction(pow(bP, bX, 5, 1, bX, DOWN), pow(bS, cb, 5, 1, cb, DOWN), pow(10, 0, ce, 0, 0, DOWN))
441+ let cg = Issue(cc, cd, cf, ce, true)
442+ let ch = calculateAssetId(cg)
443+ let ci = aF(bP, bS)
444+ let cj = if (containsElement(L, bV))
445+ then invoke(this, "stakeUnstake", [true, bP, bV], nil)
429446 else 0
430- if ((cb == cb))
447+ if ((cj == cj))
431448 then {
432- let cc = if (containsElement(L, bR))
433- then invoke(this, "stakeUnstake", [true, bK, bR], nil)
449+ let ck = if (containsElement(L, bZ))
450+ then invoke(this, "stakeUnstake", [true, bS, bZ], nil)
434451 else 0
435- if ((cc == cc))
436- then [StringEntry(b, a), BooleanEntry(c, true), StringEntry(d, bN), StringEntry(e, bR), IntegerEntry(f, bH), IntegerEntry(g, bK), IntegerEntry(k, ca), IntegerEntry(j, getIntegerValue(x, "base_fee_flat")), bY, StringEntry(h, toBase58String(bZ)), IntegerEntry(i, bX), ScriptTransfer(au.caller, bX, bZ)]
452+ if ((ck == ck))
453+ then [StringEntry(b, a), BooleanEntry(c, true), StringEntry(d, bV), StringEntry(e, bZ), IntegerEntry(f, bP), IntegerEntry(g, bS), IntegerEntry(k, ci), IntegerEntry(j, getIntegerValue(x, "base_fee_flat")), cg, StringEntry(h, toBase58String(ch)), IntegerEntry(i, cf), ScriptTransfer(au.caller, cf, ch)]
437454 else throw("Strict value is not equal to itself.")
438455 }
439456 else throw("Strict value is not equal to itself.")
444461
445462 @Callable(au)
446463 func replenishWithTwoTokens () = valueOrElse(bk(), {
447- let bI = au.payments[0].assetId
448- let bL = au.payments[1].assetId
449- let cd = fraction(ae, au.payments[0].amount, V)
450- let ce = fraction(ae, au.payments[1].amount, W)
451- let cf = be(bI)
452- let bN = cf._1
453- let bO = cf._2
454- let bP = cf._3
455- let cg = be(bL)
456- let bR = cg._1
457- let bS = cg._2
458- let bT = cg._3
459- let ch = if ((ce > cd))
464+ let bQ = au.payments[0].assetId
465+ let bT = au.payments[1].assetId
466+ let cl = fraction(ae, au.payments[0].amount, V)
467+ let cm = fraction(ae, au.payments[1].amount, W)
468+ let cn = be(bQ)
469+ let bV = cn._1
470+ let bW = cn._2
471+ let bX = cn._3
472+ let co = be(bT)
473+ let bZ = co._1
474+ let ca = co._2
475+ let cb = co._3
476+ let cp = if ((cm > cl))
460477 then {
461- let ci = fraction(W, cd, ae, CEILING)
462- $Tuple5(au.payments[0].amount, ci, (au.payments[1].amount - ci), bL, cd)
478+ let cq = fraction(W, cl, ae, CEILING)
479+ $Tuple5(au.payments[0].amount, cq, (au.payments[1].amount - cq), bT, cl)
463480 }
464481 else {
465- let ci = fraction(V, ce, ae, CEILING)
466- $Tuple5(ci, au.payments[1].amount, (au.payments[0].amount - ci), bI, ce)
482+ let cq = fraction(V, cm, ae, CEILING)
483+ $Tuple5(cq, au.payments[1].amount, (au.payments[0].amount - cq), bQ, cm)
467484 }
468- let bH = ch._1
469- let bK = ch._2
470- let cj = ch._3
471- let ck = ch._4
472- let cl = ch._5
473- let cm = fraction(cl, Y, ae)
485+ let bP = cp._1
486+ let bS = cp._2
487+ let cr = cp._3
488+ let cs = cp._4
489+ let ct = cp._5
490+ let cu = fraction(ct, Y, ae)
474491 if ((size(au.payments) != 2))
475492 then throw("Two attached assets expected")
476- else if (if ((bI != P))
493+ else if (if ((bQ != P))
477494 then true
478- else (bL != Q))
495+ else (bT != Q))
479496 then bm()
480- else if ((cm == 0))
497+ else if ((cu == 0))
481498 then throw("Too small amount to replenish")
482- else if ((0 > cj))
499+ else if ((0 > cr))
483500 then throw("Change < 0")
484501 else if (!(aB))
485- then ([ScriptTransfer(au.caller, bH, bI), ScriptTransfer(au.caller, bK, bL)] ++ bs())
502+ then ([ScriptTransfer(au.caller, bP, bQ), ScriptTransfer(au.caller, bS, bT)] ++ bo())
486503 else {
487- let cb = if (containsElement(L, bN))
488- then invoke(this, "stakeUnstake", [true, bH, bN], nil)
504+ let cj = if (containsElement(L, bV))
505+ then invoke(this, "stakeUnstake", [true, bP, bV], nil)
489506 else 0
490- if ((cb == cb))
507+ if ((cj == cj))
491508 then {
492- let cc = if (containsElement(L, bR))
493- then invoke(this, "stakeUnstake", [true, bK, bR], nil)
509+ let ck = if (containsElement(L, bZ))
510+ then invoke(this, "stakeUnstake", [true, bS, bZ], nil)
494511 else 0
495- if ((cc == cc))
496- then [IntegerEntry(f, (V + bH)), IntegerEntry(g, (W + bK)), IntegerEntry(i, (Y + cm)), IntegerEntry(k, aF((V + bH), (W + bK))), Reissue(X, cm, true), ScriptTransfer(au.caller, cm, X), ScriptTransfer(au.caller, cj, ck)]
512+ if ((ck == ck))
513+ then [IntegerEntry(f, (V + bP)), IntegerEntry(g, (W + bS)), IntegerEntry(i, (Y + cu)), IntegerEntry(k, aF((V + bP), (W + bS))), Reissue(X, cu, true), ScriptTransfer(au.caller, cu, X), ScriptTransfer(au.caller, cr, cs)]
497514 else throw("Strict value is not equal to itself.")
498515 }
499516 else throw("Strict value is not equal to itself.")
503520
504521
505522 @Callable(au)
506-func replenishWithOneToken (cn,co) = valueOrElse(bk(), {
507- let cp = $Tuple2(au.payments[0].amount, au.payments[0].assetId)
508- let cq = cp._1
509- let cr = cp._2
510- let cs = be(cr)
511- let ct = cs._1
512- let cu = cs._2
513- let cv = cs._3
514- let cw = 5000000
515- let cx = 50000000
516- let cy = if ((cx > cq))
523+func replenishWithOneToken (cv,cw) = valueOrElse(bk(), {
524+ let cx = $Tuple2(au.payments[0].amount, au.payments[0].assetId)
525+ let bK = cx._1
526+ let bL = cx._2
527+ let cy = be(bL)
528+ let cz = cy._1
529+ let cA = cy._2
530+ let cB = cy._3
531+ let cC = 5000000
532+ let cD = 50000000
533+ let cE = if ((cD > bK))
517534 then 100000
518535 else 1
519- let cz = (ae - ((ae * cy) / 10000000))
520- let cA = (ae + ((ae * cy) / 10000000))
521- let cB = (ae - ((ae * 1) / 10000000))
522- if ((cw > cq))
523- then throw((((("Payment amount " + toString(cq)) + " does not exceed the minimum amount of ") + toString(cw)) + " tokens"))
536+ let cF = (ae - ((ae * cE) / 10000000))
537+ let cG = (ae + ((ae * cE) / 10000000))
538+ let cH = (ae - ((ae * 1) / 10000000))
539+ if ((cC > bK))
540+ then throw((((("Payment amount " + toString(bK)) + " does not exceed the minimum amount of ") + toString(cC)) + " tokens"))
524541 else if ((size(au.payments) != 1))
525542 then bn()
526543 else if (!(aB))
527- then ([ScriptTransfer(au.caller, cq, cr)] ++ bs())
528- else if (if ((cr != P))
529- then (cr != Q)
544+ then ([ScriptTransfer(au.caller, bK, bL)] ++ bo())
545+ else if (if ((bL != P))
546+ then (bL != Q)
530547 else false)
531548 then bm()
532549 else {
533- let cC = if ((cr == P))
534- then $Tuple6((cq - cn), co, (V + cn), (W - co), (V + cq), W)
535- else $Tuple6(co, (cq - cn), (V - co), (W + cn), V, (W + cq))
536- let cD = cC._1
537- let cE = cC._2
538- let cF = cC._3
539- let cG = cC._4
540- let cH = cC._5
541- let cI = cC._6
542- let cJ = aF(cF, cG)
543- let cK = (fraction(af, cF, cG) / fraction(ae, cD, cE))
544- let cL = fraction((cH + cI), ai, (2 * aj))
545- if (if ((cB >= fraction(ae, Z, cJ)))
550+ let cI = if ((bL == P))
551+ then $Tuple6((bK - cv), cw, (V + cv), (W - cw), (V + bK), W)
552+ else $Tuple6(cw, (bK - cv), (V - cw), (W + cv), V, (W + bK))
553+ let cJ = cI._1
554+ let cK = cI._2
555+ let cL = cI._3
556+ let cM = cI._4
557+ let cN = cI._5
558+ let cO = cI._6
559+ let cP = aF(cL, cM)
560+ let cQ = (fraction(af, cL, cM) / fraction(ae, cJ, cK))
561+ if (if ((cH >= fraction(ae, Z, cP)))
546562 then true
547- else (Z > cJ))
563+ else (Z > cP))
548564 then throw("Incorrect virtualSwapTokenPay or virtualSwapTokenGet value")
549- else if (if ((cz > cK))
565+ else if (if ((cF > cQ))
550566 then true
551- else (cK > cA))
567+ else (cQ > cG))
552568 then throw("Swap with virtualSwapTokenPay and virtualSwapTokenGet is possible, but ratio after virtual swap is incorrect")
553- else if (if ((cL > cH))
554- then true
555- else (cL > cI))
556- then bo(cL, cH, cI)
557- else {
558- let cd = fraction(cD, ae, cF)
559- let ce = fraction(cE, ae, cG)
560- let cm = fraction(min([cd, ce]), Y, ae)
561- let cM = fraction(cm, (ac - (aa / 2)), ac)
562- let cN = fraction(cm, (ab / 2), ac)
563- let cO = fraction(cN, V, Y)
564- let cP = fraction(cN, W, Y)
565- let cQ = if ((ct == N))
566- then $Tuple3((cq - cO), cP, O)
567- else $Tuple3((cq - cP), cO, N)
568- let cR = cQ._1
569- let cS = cQ._2
570- let cT = cQ._3
571- let cb = if (containsElement(L, ct))
572- then invoke(this, "stakeUnstake", [true, cR, ct], nil)
573- else 0
574- if ((cb == cb))
575- then {
576- let cc = if (containsElement(L, cT))
577- then invoke(this, "stakeUnstake", [false, cS, cT], nil)
578- else 0
579- if ((cc == cc))
580- then [Reissue(X, cM, true), ScriptTransfer(au.caller, cM, X), ScriptTransfer(H, cO, P), ScriptTransfer(H, cP, Q), IntegerEntry(f, (cH - cO)), IntegerEntry(g, (cI - cP)), IntegerEntry(i, (Y + cM)), IntegerEntry(k, aF((cH - cO), (cI - cP)))]
581- else throw("Strict value is not equal to itself.")
582- }
583- else throw("Strict value is not equal to itself.")
584- }
569+ else {
570+ let cl = fraction(cJ, ae, cL)
571+ let cm = fraction(cK, ae, cM)
572+ let cu = fraction(min([cl, cm]), Y, ae)
573+ let cR = fraction(cu, (ac - (aa / 2)), ac)
574+ let cS = fraction(cu, (ab / 2), ac)
575+ let cT = fraction(cS, V, Y)
576+ let cU = fraction(cS, W, Y)
577+ let cV = if ((cz == N))
578+ then $Tuple3((bK - cT), cU, O)
579+ else $Tuple3((bK - cU), cT, N)
580+ let cW = cV._1
581+ let cX = cV._2
582+ let cY = cV._3
583+ let cj = if (containsElement(L, cz))
584+ then invoke(this, "stakeUnstake", [true, cW, cz], nil)
585+ else 0
586+ if ((cj == cj))
587+ then {
588+ let ck = if (containsElement(L, cY))
589+ then invoke(this, "stakeUnstake", [false, cX, cY], nil)
590+ else 0
591+ if ((ck == ck))
592+ then [Reissue(X, cR, true), ScriptTransfer(au.caller, cR, X), ScriptTransfer(H, cT, P), ScriptTransfer(H, cU, Q), IntegerEntry(f, (cN - cT)), IntegerEntry(g, (cO - cU)), IntegerEntry(i, (Y + cR)), IntegerEntry(k, aF((cN - cT), (cO - cU)))]
593+ else throw("Strict value is not equal to itself.")
594+ }
595+ else throw("Strict value is not equal to itself.")
596+ }
585597 }
586598 })
587599
589601
590602 @Callable(au)
591603 func withdraw () = valueOrElse(bk(), {
592- let cU = $Tuple2(au.payments[0].amount, au.payments[0].assetId)
593- let cq = cU._1
594- let cr = cU._2
595- let cV = fraction(cq, V, Y)
596- let cW = fraction(cq, W, Y)
597- let ca = aF((V - cV), (W - cW))
604+ let cZ = $Tuple2(au.payments[0].amount, au.payments[0].assetId)
605+ let bK = cZ._1
606+ let bL = cZ._2
607+ let da = fraction(bK, V, Y)
608+ let db = fraction(bK, W, Y)
609+ let ci = aF((V - da), (W - db))
598610 if ((size(au.payments) != 1))
599611 then bn()
600- else if ((cr != X))
612+ else if ((bL != X))
601613 then throw(("Incorrect asset attached. Expected: " + toBase58String(X)))
602614 else if (!(aB))
603- then ([ScriptTransfer(au.caller, cq, cr)] ++ bs())
615+ then ([ScriptTransfer(au.caller, bK, bL)] ++ bo())
604616 else {
605- let cb = if (containsElement(L, N))
606- then invoke(this, "stakeUnstake", [false, cV, N], nil)
617+ let cj = if (containsElement(L, N))
618+ then invoke(this, "stakeUnstake", [false, da, N], nil)
607619 else 0
608- if ((cb == cb))
620+ if ((cj == cj))
609621 then {
610- let cc = if (containsElement(L, O))
611- then invoke(this, "stakeUnstake", [false, cW, O], nil)
622+ let ck = if (containsElement(L, O))
623+ then invoke(this, "stakeUnstake", [false, db, O], nil)
612624 else 0
613- if ((cc == cc))
614- then [IntegerEntry(f, (V - cV)), IntegerEntry(g, (W - cW)), IntegerEntry(i, (Y - cq)), IntegerEntry(k, ca), Burn(X, cq), ScriptTransfer(au.caller, cV, P), ScriptTransfer(au.caller, cW, Q)]
625+ if ((ck == ck))
626+ then [IntegerEntry(f, (V - da)), IntegerEntry(g, (W - db)), IntegerEntry(i, (Y - bK)), IntegerEntry(k, ci), Burn(X, bK), ScriptTransfer(au.caller, da, P), ScriptTransfer(au.caller, db, Q)]
615627 else throw("Strict value is not equal to itself.")
616628 }
617629 else throw("Strict value is not equal to itself.")
621633
622634
623635 @Callable(au)
624-func exchange (cX,cY) = valueOrElse(bk(), {
625- let cZ = $Tuple2(au.payments[0].amount, au.payments[0].assetId)
626- let cq = cZ._1
627- let cr = cZ._2
628- if ((0 >= cX))
629- then throw(("Estimated amount must be positive. Actual: " + toString(cX)))
630- else if ((cY > cX))
636+func exchange (dc,bJ) = valueOrElse(bk(), {
637+ let dd = $Tuple2(au.payments[0].amount, au.payments[0].assetId)
638+ let bK = dd._1
639+ let bL = dd._2
640+ if ((0 >= dc))
641+ then throw(("Estimated amount must be positive. Actual: " + toString(dc)))
642+ else if ((bJ > dc))
631643 then throw("Minimal amount can't be greater than estimated.")
632644 else if ((size(au.payments) != 1))
633645 then bn()
634646 else if (!(aB))
635- then ([ScriptTransfer(au.caller, cq, cr)] ++ bs())
636- else if (if ((cr != P))
637- then (cr != Q)
647+ then ([ScriptTransfer(au.caller, bK, bL)] ++ bo())
648+ else if (if ((bL != P))
649+ then (bL != Q)
638650 else false)
639651 then bm()
640- else if ((10000000 > cq))
652+ else if ((10000000 > bK))
641653 then throw("Only swap of 10.000000 or more tokens is allowed")
642- else if (if ((ak > fraction(ae, cY, cq)))
643- then true
644- else (fraction(ae, cX, cq) > al))
645- then throw("Incorrect args and pmt ratio")
646- else {
647- let da = if ((cr == P))
648- then Q
649- else P
650- let bw = aH(cX, cY, cq, cr)
651- let db = bB(au.originCaller)
652- let dc = fraction(bw, fraction(ab, db, ac, CEILING), ac)
653- let dd = fraction(bw, (ac - fraction(aa, db, ac, CEILING)), ac)
654- let de = if ((cr == P))
655- then $Tuple2((V + cq), ((W - dd) - dc))
656- else $Tuple2(((V - dd) - dc), (W + cq))
657- let cH = de._1
658- let cI = de._2
659- let cL = fraction((cH + cI), ai, (2 * aj))
660- if (if ((cL > cH))
661- then true
662- else (cL > cI))
663- then bo(cL, cH, cI)
664- else {
665- let df = be(cr)
666- let ct = df._1
667- let cu = df._2
668- let cv = df._3
669- let dg = be(da)
670- let dh = dg._1
671- let di = dg._2
672- let dj = dg._3
673- let cb = if (containsElement(L, ct))
674- then invoke(this, "stakeUnstake", [true, cq, ct], nil)
675- else 0
676- if ((cb == cb))
677- then {
678- let cc = if (containsElement(L, dh))
679- then invoke(this, "stakeUnstake", [false, (dd + dc), dh], nil)
680- else 0
681- if ((cc == cc))
682- then $Tuple2([IntegerEntry(f, cH), IntegerEntry(g, cI), IntegerEntry(k, aF(cH, cI)), ScriptTransfer(au.caller, dd, da), ScriptTransfer(H, dc, da)], $Tuple2(dd, da))
683- else throw("Strict value is not equal to itself.")
684- }
685- else throw("Strict value is not equal to itself.")
686- }
687- }
654+ else {
655+ let de = bG(V, W, bJ, bK, bL)
656+ let df = de._1
657+ let dg = de._2
658+ if (((al - fraction(ak, df, ae)) > dg))
659+ then throw("Incorrect args and pmt ratio")
660+ else {
661+ let dh = if ((bL == P))
662+ then Q
663+ else P
664+ let bw = aH(dc, bJ, bK, bL)
665+ let di = bB(au.originCaller)
666+ let dj = fraction(bw, fraction(ab, di, ac, CEILING), ac)
667+ let dk = fraction(bw, (ac - fraction(aa, di, ac, CEILING)), ac)
668+ let dl = if ((bL == P))
669+ then $Tuple2((V + bK), ((W - dk) - dj))
670+ else $Tuple2(((V - dk) - dj), (W + bK))
671+ let cN = dl._1
672+ let cO = dl._2
673+ let dm = fraction((cN + cO), ai, (2 * aj))
674+ if (if ((dm > cN))
675+ then true
676+ else (dm > cO))
677+ then bp(dm, cN, cO)
678+ else {
679+ let dn = be(bL)
680+ let cz = dn._1
681+ let cA = dn._2
682+ let cB = dn._3
683+ let do = be(dh)
684+ let dp = do._1
685+ let dq = do._2
686+ let dr = do._3
687+ let cj = if (containsElement(L, cz))
688+ then invoke(this, "stakeUnstake", [true, bK, cz], nil)
689+ else 0
690+ if ((cj == cj))
691+ then {
692+ let ck = if (containsElement(L, dp))
693+ then invoke(this, "stakeUnstake", [false, (dk + dj), dp], nil)
694+ else 0
695+ if ((ck == ck))
696+ then $Tuple2([IntegerEntry(f, cN), IntegerEntry(g, cO), IntegerEntry(k, aF(cN, cO)), ScriptTransfer(au.caller, dk, dh), ScriptTransfer(H, dj, dh)], $Tuple2(dk, dh))
697+ else throw("Strict value is not equal to itself.")
698+ }
699+ else throw("Strict value is not equal to itself.")
700+ }
701+ }
702+ }
688703 })
689704
690705
705720
706721 @Callable(au)
707722 func takeIntoAccountExtraFunds () = valueOrElse(bk(), {
708- let dk = (az - V)
709- let dl = (aA - W)
710- let cJ = aF((V + dk), (W + dl))
723+ let ds = (az - V)
724+ let dt = (aA - W)
725+ let cP = aF((V + ds), (W + dt))
711726 if ((au.caller != H))
712727 then throw("Only the money box can call this function")
713- else if (if ((0 > dk))
728+ else if (if ((0 > ds))
714729 then true
715- else (0 > dl))
730+ else (0 > dt))
716731 then bh("Enroll amount negative")
717- else if (if ((dk == 0))
718- then (dl == 0)
732+ else if (if ((ds == 0))
733+ then (dt == 0)
719734 else false)
720735 then throw("No money to take")
721736 else {
722- let cb = if (if (containsElement(L, N))
723- then (dk > 0)
737+ let cj = if (if (containsElement(L, N))
738+ then (ds > 0)
724739 else false)
725- then invoke(this, "stakeUnstake", [true, dk, N], nil)
740+ then invoke(this, "stakeUnstake", [true, ds, N], nil)
726741 else 0
727- if ((cb == cb))
742+ if ((cj == cj))
728743 then {
729- let cc = if (if (containsElement(L, O))
730- then (dl > 0)
744+ let ck = if (if (containsElement(L, O))
745+ then (dt > 0)
731746 else false)
732- then invoke(this, "stakeUnstake", [true, dl, O], nil)
747+ then invoke(this, "stakeUnstake", [true, dt, O], nil)
733748 else 0
734- if ((cc == cc))
735- then [IntegerEntry(k, cJ), IntegerEntry(f, (V + dk)), IntegerEntry(g, (W + dl))]
749+ if ((ck == ck))
750+ then [IntegerEntry(k, cP), IntegerEntry(f, (V + ds)), IntegerEntry(g, (W + dt))]
736751 else throw("Strict value is not equal to itself.")
737752 }
738753 else throw("Strict value is not equal to itself.")
742757
743758
744759 @Callable(au)
745-func stakeUnstake (bu,bw,dm) = if ((au.caller != this))
760+func stakeUnstake (bu,bw,du) = if ((au.caller != this))
746761 then throw("Only contract itself can invoke this function")
747762 else {
748- let dn = bv(bu, bw, fromBase58String(dm))
749- let by = dn._1
750- let do = dn._2
751- let dp = dn._3
752- let dq = dn._4
753- let dr = invoke(do, by, dp, dq)
754- if ((dr == dr))
763+ let dv = bv(bu, bw, fromBase58String(du))
764+ let by = dv._1
765+ let dw = dv._2
766+ let dx = dv._3
767+ let dy = dv._4
768+ let dz = invoke(dw, by, dx, dy)
769+ if ((dz == dz))
755770 then nil
756771 else throw("Strict value is not equal to itself.")
757772 }
762777 func toBigIntInvariant () = valueOrElse(bl(au), [IntegerEntry(k, aF(V, W))])
763778
764779
765-@Verifier(ds)
766-func dt () = {
767- let du = {
768- let dv = if (sigVerify(ds.bodyBytes, ds.proofs[0], D))
780+@Verifier(dA)
781+func dB () = {
782+ let dC = {
783+ let dD = if (sigVerify(dA.bodyBytes, dA.proofs[0], D))
769784 then 1
770785 else 0
771- let dw = if (sigVerify(ds.bodyBytes, ds.proofs[1], E))
786+ let dE = if (sigVerify(dA.bodyBytes, dA.proofs[1], E))
772787 then 1
773788 else 0
774- let dx = if (sigVerify(ds.bodyBytes, ds.proofs[2], F))
789+ let dF = if (sigVerify(dA.bodyBytes, dA.proofs[2], F))
775790 then 1
776791 else 0
777- (((dv + dw) + dx) >= 2)
792+ (((dD + dE) + dF) >= 2)
778793 }
779- let A = ds
794+ let A = dA
780795 if ($isInstanceOf(A, "InvokeScriptTransaction"))
781796 then {
782- let dr = A
783- let dy = if ((dr.dApp == this))
784- then (dr.function == "takeIntoAccountExtraFunds")
797+ let dz = A
798+ let dG = if ((dz.dApp == this))
799+ then (dz.function == "takeIntoAccountExtraFunds")
785800 else false
786- let dz = if (if (if (sigVerify(ds.bodyBytes, ds.proofs[0], D))
801+ let dH = if (if (if (sigVerify(dA.bodyBytes, dA.proofs[0], D))
787802 then true
788- else sigVerify(ds.bodyBytes, ds.proofs[0], E))
803+ else sigVerify(dA.bodyBytes, dA.proofs[0], E))
789804 then true
790- else sigVerify(ds.bodyBytes, ds.proofs[0], F))
805+ else sigVerify(dA.bodyBytes, dA.proofs[0], F))
791806 then true
792- else sigVerify(ds.bodyBytes, ds.proofs[0], G)
793- if (if (dy)
794- then dz
807+ else sigVerify(dA.bodyBytes, dA.proofs[0], G)
808+ if (if (dG)
809+ then dH
795810 else false)
796811 then true
797- else du
812+ else dC
798813 }
799- else du
814+ else dC
800815 }
801816
Full:
OldNewDifferences
11 {-# STDLIB_VERSION 5 #-}
22 {-# SCRIPT_TYPE ACCOUNT #-}
33 {-# CONTENT_TYPE DAPP #-}
44 let a = "2.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 = "share_asset_id"
1919
2020 let i = "share_asset_supply"
2121
2222 let j = "commission"
2323
2424 let k = "invariant"
2525
2626 let l = "shutdown_cause"
2727
2828 let m = "staking_usdnnsbt_address"
2929
3030 let n = "staking_eurn_address"
3131
3232 let o = "discounts"
3333
3434 let p = "discount_values"
3535
3636 let q = "_SWOP_amount"
3737
3838 let r = "admin_pub_1"
3939
4040 let s = "admin_pub_2"
4141
4242 let t = "admin_pub_3"
4343
4444 let u = "admin_invoke_pub"
4545
4646 let v = "money_box_address"
4747
4848 let w = "governance_address"
4949
5050 let x = Address(base58'3NBBWfzZtZtszaXbitTKnrB2xXwv26Bn7H9')
5151
5252 func y (z) = {
5353 let A = getString(x, z)
5454 if ($isInstanceOf(A, "String"))
5555 then {
5656 let B = A
5757 fromBase58String(B)
5858 }
5959 else {
6060 let C = A
6161 throw((z + "is empty"))
6262 }
6363 }
6464
6565
6666 let D = y(r)
6767
6868 let E = y(s)
6969
7070 let F = y(t)
7171
7272 let G = y(u)
7373
7474 let H = Address(y(v))
7575
7676 let I = Address(y(w))
7777
7878 let J = Address(y(m))
7979
8080 let K = base58'8UrfDVd5GreeUwm7uPk7eYz1eMv376kzR52C6sANPkwS'
8181
8282 let L = [toBase58String(K)]
8383
8484 let M = getBooleanValue(this, c)
8585
8686 let N = getStringValue(this, d)
8787
8888 let O = getStringValue(this, e)
8989
9090 let P = if ((N == "WAVES"))
9191 then unit
9292 else fromBase58String(N)
9393
9494 let Q = if ((O == "WAVES"))
9595 then unit
9696 else fromBase58String(O)
9797
9898 let R = {
9999 let A = P
100100 if ($isInstanceOf(A, "ByteVector"))
101101 then {
102102 let S = A
103103 value(assetInfo(S)).name
104104 }
105105 else if ($isInstanceOf(A, "Unit"))
106106 then {
107107 let T = A
108108 "WAVES"
109109 }
110110 else throw("Match error")
111111 }
112112
113113 let U = {
114114 let A = Q
115115 if ($isInstanceOf(A, "ByteVector"))
116116 then {
117117 let S = A
118118 value(assetInfo(S)).name
119119 }
120120 else if ($isInstanceOf(A, "Unit"))
121121 then {
122122 let T = A
123123 "WAVES"
124124 }
125125 else throw("Match error")
126126 }
127127
128128 let V = getIntegerValue(this, f)
129129
130130 let W = getIntegerValue(this, g)
131131
132132 let X = fromBase58String(getStringValue(this, h))
133133
134134 let Y = getIntegerValue(this, i)
135135
136136 let Z = getIntegerValue(this, k)
137137
138138 let aa = getIntegerValue(this, j)
139139
140140 let ab = fraction(aa, 40, 100)
141141
142142 let ac = 1000000
143143
144144 let ad = 1000
145145
146146 let ae = 100000000
147147
148148 let af = 10000000000000000
149149
150150 let ag = 1000
151151
152152 let ah = 8
153153
154-let ai = 50
154+let ai = 125
155155
156-let aj = 100
156+let aj = 1000
157157
158-let ak = 90000000
158+let ak = 2500000
159159
160-let al = 110000000
160+let al = 93500000
161161
162162 let am = 50
163163
164164 let an = 2
165165
166166 let ao = 4600000000000000
167167
168168 func ap (aq) = {
169169 let A = aq
170170 if ($isInstanceOf(A, "ByteVector"))
171171 then {
172172 let S = A
173173 assetBalance(this, S)
174174 }
175175 else if ($isInstanceOf(A, "Unit"))
176176 then {
177177 let T = A
178178 wavesBalance(this).available
179179 }
180180 else throw("Match error")
181181 }
182182
183183
184184 func ar (aq) = {
185185 let as = {
186186 let A = aq
187187 if ($isInstanceOf(A, "ByteVector"))
188188 then {
189189 let at = A
190190 if ((at == K))
191191 then getInteger(J, ((("rpd_balance_" + toBase58String(at)) + "_") + toString(this)))
192192 else 0
193193 }
194194 else if ($isInstanceOf(A, "Unit"))
195195 then 0
196196 else throw("Match error")
197197 }
198198 let A = as
199199 if ($isInstanceOf(A, "Int"))
200200 then {
201201 let au = A
202202 au
203203 }
204204 else 0
205205 }
206206
207207
208208 let av = ar(P)
209209
210210 let aw = ar(Q)
211211
212212 let ax = (V - av)
213213
214214 let ay = (W - aw)
215215
216216 let az = (ap(P) + av)
217217
218218 let aA = (ap(Q) + aw)
219219
220220 let aB = if ((az >= V))
221221 then (aA >= W)
222222 else false
223223
224224 func aC (aD,aE) = ((fraction(af, aD, aE) + fraction(af, aE, aD)) / 2)
225225
226226
227227 func aF (aD,aE) = {
228228 let aG = aC(aD, aE)
229229 (fraction((aD + aE), af, pow(aG, ah, am, an, ah, CEILING)) + (2 * fraction(toInt(pow(fraction(toBigInt(aD), toBigInt(aE), toBigInt(ae)), 0, toBigInt(5), 1, (ah / 2), DOWN)), pow((aG - ao), ah, am, an, ah, DOWN), ae)))
230230 }
231231
232232
233233 func aH (aI,aJ,aK,aL) = {
234234 let aM = (af - ((af * 1) / 10000000))
235235 let aN = (aI - aJ)
236236 let aD = (V + aK)
237237 let aE = (W + aK)
238238 func aO (aP,aQ) = if ((aP._1 == -1))
239239 then {
240240 let aR = (aI - (((aQ * aN) / 3) / ad))
241241 let aS = if ((aL == P))
242242 then aF(aD, (W - aR))
243243 else aF((V - aR), aE)
244244 if ((aS > Z))
245245 then $Tuple2(aR, aS)
246246 else $Tuple2(-1, 0)
247247 }
248248 else aP
249249
250250 let aT = aO($Tuple2(-1, 0), 3000)
251251 if ((0 > aT._1))
252252 then throw("Price is worse than minReceived")
253253 else {
254254 let aU = if ((aL == P))
255255 then aF(aD, (W - aI))
256256 else if ((aL == Q))
257257 then aF((V - aI), aE)
258258 else throw("Wrong asset in payment")
259259 if ((Z > aU))
260260 then if ((aM >= fraction(af, Z, aU)))
261261 then throw("The requested price is too not profitable for user")
262262 else {
263263 let aV = {
264264 let aW = [25, 200, 500]
265265 let aX = size(aW)
266266 let aY = $Tuple2(-1, 0)
267267 func aZ (ba,bb) = if ((bb >= aX))
268268 then ba
269269 else aO(ba, aW[bb])
270270
271271 func bc (ba,bb) = if ((bb >= aX))
272272 then ba
273273 else throw("List size exceeds 3")
274274
275275 bc(aZ(aZ(aZ(aY, 0), 1), 2), 3)
276276 }
277277 if ((0 > aV._1))
278278 then aT._1
279279 else aV._1
280280 }
281281 else {
282282 let aV = {
283283 let aW = [-500, -200, -25]
284284 let aX = size(aW)
285285 let aY = $Tuple2(-1, 0)
286286 func aZ (ba,bb) = if ((bb >= aX))
287287 then ba
288288 else aO(ba, aW[bb])
289289
290290 func bc (ba,bb) = if ((bb >= aX))
291291 then ba
292292 else throw("List size exceeds 3")
293293
294294 bc(aZ(aZ(aZ(aY, 0), 1), 2), 3)
295295 }
296296 let bd = if ((0 > aV._1))
297297 then $Tuple2(aI, aU)
298298 else aV
299299 if ((aM >= fraction(af, Z, bd._2)))
300300 then throw("The requested price is too not profitable for user")
301301 else bd._1
302302 }
303303 }
304304 }
305305
306306
307307 func be (aq) = {
308308 let A = aq
309309 if ($isInstanceOf(A, "ByteVector"))
310310 then {
311311 let S = A
312312 let bf = toBase58String(S)
313313 let bg = valueOrErrorMessage(assetInfo(S), (("Asset " + bf) + " doesn't exist"))
314314 $Tuple3(bf, bg.name, bg.decimals)
315315 }
316316 else if ($isInstanceOf(A, "Unit"))
317317 then {
318318 let T = A
319319 $Tuple3("WAVES", "WAVES", 8)
320320 }
321321 else throw("Match error")
322322 }
323323
324324
325325 func bh (bi) = [BooleanEntry(c, false), StringEntry(l, bi)]
326326
327327
328328 func bj () = throw("DApp is already active")
329329
330330
331331 func bk () = if (M)
332332 then unit
333333 else throw("DApp is inactive at this moment")
334334
335335
336336 func bl (au) = if (containsElement([D, E, F], au.callerPublicKey))
337337 then unit
338338 else throw("Only admin can call this function")
339339
340340
341341 func bm () = throw(((("Incorrect assets attached. Expected: " + N) + " and ") + O))
342342
343343
344344 func bn () = throw("One attached payment expected")
345345
346346
347-func bo (bp,bq,br) = throw(((((((((("New balance in assets of the DApp is less than threshold " + toString(bp)) + ": ") + toString(bq)) + " ") + R) + ", ") + toString(br)) + " ") + U))
347+func bo () = bh(((((((((((((((("Suspicious state. Actual balances: " + toString(V)) + " ") + R) + ", ") + toString(W)) + " ") + U) + ". State: ") + toString(ap(P))) + " ") + R) + ", ") + toString(ap(Q))) + " ") + U))
348348
349349
350-func bs () = bh(((((((((((((((("Suspicious state. Actual balances: " + toString(V)) + " ") + R) + ", ") + toString(W)) + " ") + U) + ". State: ") + toString(ap(P))) + " ") + R) + ", ") + toString(ap(Q))) + " ") + U))
350+func bp (bq,br,bs) = throw(((((((((("New balance in assets of the DApp is less than threshold " + toString(bq)) + ": ") + toString(br)) + " ") + R) + ", ") + toString(bs)) + " ") + U))
351351
352352
353353 func bt (bu,aq) = if (bu)
354354 then $Tuple2("lockNeutrino", J)
355355 else $Tuple2("unlockNeutrino", J)
356356
357357
358358 func bv (bu,bw,aq) = if (bu)
359359 then {
360360 let bx = bt(bu, aq)
361361 let by = bx._1
362362 let bz = bx._2
363363 $Tuple4(by, bz, nil, [AttachedPayment(aq, bw)])
364364 }
365365 else {
366366 let bA = bt(bu, aq)
367367 let by = bA._1
368368 let bz = bA._2
369369 $Tuple4(by, bz, [bw, toBase58String(aq)], nil)
370370 }
371371
372372
373373 func bB (bC) = {
374374 let bD = valueOrElse(getInteger(I, (toString(bC) + q)), 0)
375375 let bE = split(getStringValue(x, p), ",")
376376 let bF = split(getStringValue(x, o), ",")
377377 if (if ((bD >= parseIntValue(bE[0])))
378378 then (parseIntValue(bE[1]) > bD)
379379 else false)
380380 then (ac - parseIntValue(bF[0]))
381381 else if (if ((bD >= parseIntValue(bE[1])))
382382 then (parseIntValue(bE[2]) > bD)
383383 else false)
384384 then (ac - parseIntValue(bF[1]))
385385 else if (if ((bD >= parseIntValue(bE[2])))
386386 then (parseIntValue(bE[3]) > bD)
387387 else false)
388388 then (ac - parseIntValue(bF[2]))
389389 else if (if ((bD >= parseIntValue(bE[3])))
390390 then (parseIntValue(bE[4]) > bD)
391391 else false)
392392 then (ac - parseIntValue(bF[3]))
393393 else if ((bD >= parseIntValue(bE[4])))
394394 then (ac - parseIntValue(bF[4]))
395395 else ac
396396 }
397397
398398
399+func bG (bH,bI,bJ,bK,bL) = if ((V > W))
400+ then {
401+ let bM = fraction(ae, V, W)
402+ let bN = if ((bL == P))
403+ then fraction(ae, bJ, bK)
404+ else fraction(ae, bJ, bK)
405+ $Tuple2(bM, bN)
406+ }
407+ else {
408+ let bM = fraction(ae, W, V)
409+ let bN = if ((bL == P))
410+ then fraction(ae, bJ, bK)
411+ else fraction(ae, bJ, bK)
412+ $Tuple2(bM, bN)
413+ }
414+
415+
399416 @Callable(au)
400417 func init () = {
401- let bG = $Tuple2(au.payments[0].amount, au.payments[0].assetId)
402- let bH = bG._1
403- let bI = bG._2
404- let bJ = $Tuple2(au.payments[1].amount, au.payments[1].assetId)
405- let bK = bJ._1
406- let bL = bJ._2
407- let bM = be(bI)
408- let bN = bM._1
409- let bO = bM._2
410- let bP = bM._3
411- let bQ = be(bL)
412- let bR = bQ._1
413- let bS = bQ._2
414- let bT = bQ._3
418+ let bO = $Tuple2(au.payments[0].amount, au.payments[0].assetId)
419+ let bP = bO._1
420+ let bQ = bO._2
421+ let bR = $Tuple2(au.payments[1].amount, au.payments[1].assetId)
422+ let bS = bR._1
423+ let bT = bR._2
424+ let bU = be(bQ)
425+ let bV = bU._1
426+ let bW = bU._2
427+ let bX = bU._3
428+ let bY = be(bT)
429+ let bZ = bY._1
430+ let ca = bY._2
431+ let cb = bY._3
415432 if (isDefined(getBoolean(this, c)))
416433 then bj()
417- else if ((bI == bL))
434+ else if ((bQ == bT))
418435 then throw("Assets must be different")
419436 else {
420- let bU = ((("s" + take(bO, 7)) + "_") + take(bS, 7))
421- let bV = ((((("ShareToken of SwopFi protocol for " + bO) + " and ") + bS) + " at address ") + toString(this))
422- let bW = ((bP + bT) / 2)
423- let bX = fraction(pow(bH, bP, 5, 1, bP, DOWN), pow(bK, bT, 5, 1, bT, DOWN), pow(10, 0, bW, 0, 0, DOWN))
424- let bY = Issue(bU, bV, bX, bW, true)
425- let bZ = calculateAssetId(bY)
426- let ca = aF(bH, bK)
427- let cb = if (containsElement(L, bN))
428- then invoke(this, "stakeUnstake", [true, bH, bN], nil)
437+ let cc = ((("s" + take(bW, 7)) + "_") + take(ca, 7))
438+ let cd = ((((("ShareToken of SwopFi protocol for " + bW) + " and ") + ca) + " at address ") + toString(this))
439+ let ce = ((bX + cb) / 2)
440+ let cf = fraction(pow(bP, bX, 5, 1, bX, DOWN), pow(bS, cb, 5, 1, cb, DOWN), pow(10, 0, ce, 0, 0, DOWN))
441+ let cg = Issue(cc, cd, cf, ce, true)
442+ let ch = calculateAssetId(cg)
443+ let ci = aF(bP, bS)
444+ let cj = if (containsElement(L, bV))
445+ then invoke(this, "stakeUnstake", [true, bP, bV], nil)
429446 else 0
430- if ((cb == cb))
447+ if ((cj == cj))
431448 then {
432- let cc = if (containsElement(L, bR))
433- then invoke(this, "stakeUnstake", [true, bK, bR], nil)
449+ let ck = if (containsElement(L, bZ))
450+ then invoke(this, "stakeUnstake", [true, bS, bZ], nil)
434451 else 0
435- if ((cc == cc))
436- then [StringEntry(b, a), BooleanEntry(c, true), StringEntry(d, bN), StringEntry(e, bR), IntegerEntry(f, bH), IntegerEntry(g, bK), IntegerEntry(k, ca), IntegerEntry(j, getIntegerValue(x, "base_fee_flat")), bY, StringEntry(h, toBase58String(bZ)), IntegerEntry(i, bX), ScriptTransfer(au.caller, bX, bZ)]
452+ if ((ck == ck))
453+ then [StringEntry(b, a), BooleanEntry(c, true), StringEntry(d, bV), StringEntry(e, bZ), IntegerEntry(f, bP), IntegerEntry(g, bS), IntegerEntry(k, ci), IntegerEntry(j, getIntegerValue(x, "base_fee_flat")), cg, StringEntry(h, toBase58String(ch)), IntegerEntry(i, cf), ScriptTransfer(au.caller, cf, ch)]
437454 else throw("Strict value is not equal to itself.")
438455 }
439456 else throw("Strict value is not equal to itself.")
440457 }
441458 }
442459
443460
444461
445462 @Callable(au)
446463 func replenishWithTwoTokens () = valueOrElse(bk(), {
447- let bI = au.payments[0].assetId
448- let bL = au.payments[1].assetId
449- let cd = fraction(ae, au.payments[0].amount, V)
450- let ce = fraction(ae, au.payments[1].amount, W)
451- let cf = be(bI)
452- let bN = cf._1
453- let bO = cf._2
454- let bP = cf._3
455- let cg = be(bL)
456- let bR = cg._1
457- let bS = cg._2
458- let bT = cg._3
459- let ch = if ((ce > cd))
464+ let bQ = au.payments[0].assetId
465+ let bT = au.payments[1].assetId
466+ let cl = fraction(ae, au.payments[0].amount, V)
467+ let cm = fraction(ae, au.payments[1].amount, W)
468+ let cn = be(bQ)
469+ let bV = cn._1
470+ let bW = cn._2
471+ let bX = cn._3
472+ let co = be(bT)
473+ let bZ = co._1
474+ let ca = co._2
475+ let cb = co._3
476+ let cp = if ((cm > cl))
460477 then {
461- let ci = fraction(W, cd, ae, CEILING)
462- $Tuple5(au.payments[0].amount, ci, (au.payments[1].amount - ci), bL, cd)
478+ let cq = fraction(W, cl, ae, CEILING)
479+ $Tuple5(au.payments[0].amount, cq, (au.payments[1].amount - cq), bT, cl)
463480 }
464481 else {
465- let ci = fraction(V, ce, ae, CEILING)
466- $Tuple5(ci, au.payments[1].amount, (au.payments[0].amount - ci), bI, ce)
482+ let cq = fraction(V, cm, ae, CEILING)
483+ $Tuple5(cq, au.payments[1].amount, (au.payments[0].amount - cq), bQ, cm)
467484 }
468- let bH = ch._1
469- let bK = ch._2
470- let cj = ch._3
471- let ck = ch._4
472- let cl = ch._5
473- let cm = fraction(cl, Y, ae)
485+ let bP = cp._1
486+ let bS = cp._2
487+ let cr = cp._3
488+ let cs = cp._4
489+ let ct = cp._5
490+ let cu = fraction(ct, Y, ae)
474491 if ((size(au.payments) != 2))
475492 then throw("Two attached assets expected")
476- else if (if ((bI != P))
493+ else if (if ((bQ != P))
477494 then true
478- else (bL != Q))
495+ else (bT != Q))
479496 then bm()
480- else if ((cm == 0))
497+ else if ((cu == 0))
481498 then throw("Too small amount to replenish")
482- else if ((0 > cj))
499+ else if ((0 > cr))
483500 then throw("Change < 0")
484501 else if (!(aB))
485- then ([ScriptTransfer(au.caller, bH, bI), ScriptTransfer(au.caller, bK, bL)] ++ bs())
502+ then ([ScriptTransfer(au.caller, bP, bQ), ScriptTransfer(au.caller, bS, bT)] ++ bo())
486503 else {
487- let cb = if (containsElement(L, bN))
488- then invoke(this, "stakeUnstake", [true, bH, bN], nil)
504+ let cj = if (containsElement(L, bV))
505+ then invoke(this, "stakeUnstake", [true, bP, bV], nil)
489506 else 0
490- if ((cb == cb))
507+ if ((cj == cj))
491508 then {
492- let cc = if (containsElement(L, bR))
493- then invoke(this, "stakeUnstake", [true, bK, bR], nil)
509+ let ck = if (containsElement(L, bZ))
510+ then invoke(this, "stakeUnstake", [true, bS, bZ], nil)
494511 else 0
495- if ((cc == cc))
496- then [IntegerEntry(f, (V + bH)), IntegerEntry(g, (W + bK)), IntegerEntry(i, (Y + cm)), IntegerEntry(k, aF((V + bH), (W + bK))), Reissue(X, cm, true), ScriptTransfer(au.caller, cm, X), ScriptTransfer(au.caller, cj, ck)]
512+ if ((ck == ck))
513+ then [IntegerEntry(f, (V + bP)), IntegerEntry(g, (W + bS)), IntegerEntry(i, (Y + cu)), IntegerEntry(k, aF((V + bP), (W + bS))), Reissue(X, cu, true), ScriptTransfer(au.caller, cu, X), ScriptTransfer(au.caller, cr, cs)]
497514 else throw("Strict value is not equal to itself.")
498515 }
499516 else throw("Strict value is not equal to itself.")
500517 }
501518 })
502519
503520
504521
505522 @Callable(au)
506-func replenishWithOneToken (cn,co) = valueOrElse(bk(), {
507- let cp = $Tuple2(au.payments[0].amount, au.payments[0].assetId)
508- let cq = cp._1
509- let cr = cp._2
510- let cs = be(cr)
511- let ct = cs._1
512- let cu = cs._2
513- let cv = cs._3
514- let cw = 5000000
515- let cx = 50000000
516- let cy = if ((cx > cq))
523+func replenishWithOneToken (cv,cw) = valueOrElse(bk(), {
524+ let cx = $Tuple2(au.payments[0].amount, au.payments[0].assetId)
525+ let bK = cx._1
526+ let bL = cx._2
527+ let cy = be(bL)
528+ let cz = cy._1
529+ let cA = cy._2
530+ let cB = cy._3
531+ let cC = 5000000
532+ let cD = 50000000
533+ let cE = if ((cD > bK))
517534 then 100000
518535 else 1
519- let cz = (ae - ((ae * cy) / 10000000))
520- let cA = (ae + ((ae * cy) / 10000000))
521- let cB = (ae - ((ae * 1) / 10000000))
522- if ((cw > cq))
523- then throw((((("Payment amount " + toString(cq)) + " does not exceed the minimum amount of ") + toString(cw)) + " tokens"))
536+ let cF = (ae - ((ae * cE) / 10000000))
537+ let cG = (ae + ((ae * cE) / 10000000))
538+ let cH = (ae - ((ae * 1) / 10000000))
539+ if ((cC > bK))
540+ then throw((((("Payment amount " + toString(bK)) + " does not exceed the minimum amount of ") + toString(cC)) + " tokens"))
524541 else if ((size(au.payments) != 1))
525542 then bn()
526543 else if (!(aB))
527- then ([ScriptTransfer(au.caller, cq, cr)] ++ bs())
528- else if (if ((cr != P))
529- then (cr != Q)
544+ then ([ScriptTransfer(au.caller, bK, bL)] ++ bo())
545+ else if (if ((bL != P))
546+ then (bL != Q)
530547 else false)
531548 then bm()
532549 else {
533- let cC = if ((cr == P))
534- then $Tuple6((cq - cn), co, (V + cn), (W - co), (V + cq), W)
535- else $Tuple6(co, (cq - cn), (V - co), (W + cn), V, (W + cq))
536- let cD = cC._1
537- let cE = cC._2
538- let cF = cC._3
539- let cG = cC._4
540- let cH = cC._5
541- let cI = cC._6
542- let cJ = aF(cF, cG)
543- let cK = (fraction(af, cF, cG) / fraction(ae, cD, cE))
544- let cL = fraction((cH + cI), ai, (2 * aj))
545- if (if ((cB >= fraction(ae, Z, cJ)))
550+ let cI = if ((bL == P))
551+ then $Tuple6((bK - cv), cw, (V + cv), (W - cw), (V + bK), W)
552+ else $Tuple6(cw, (bK - cv), (V - cw), (W + cv), V, (W + bK))
553+ let cJ = cI._1
554+ let cK = cI._2
555+ let cL = cI._3
556+ let cM = cI._4
557+ let cN = cI._5
558+ let cO = cI._6
559+ let cP = aF(cL, cM)
560+ let cQ = (fraction(af, cL, cM) / fraction(ae, cJ, cK))
561+ if (if ((cH >= fraction(ae, Z, cP)))
546562 then true
547- else (Z > cJ))
563+ else (Z > cP))
548564 then throw("Incorrect virtualSwapTokenPay or virtualSwapTokenGet value")
549- else if (if ((cz > cK))
565+ else if (if ((cF > cQ))
550566 then true
551- else (cK > cA))
567+ else (cQ > cG))
552568 then throw("Swap with virtualSwapTokenPay and virtualSwapTokenGet is possible, but ratio after virtual swap is incorrect")
553- else if (if ((cL > cH))
554- then true
555- else (cL > cI))
556- then bo(cL, cH, cI)
557- else {
558- let cd = fraction(cD, ae, cF)
559- let ce = fraction(cE, ae, cG)
560- let cm = fraction(min([cd, ce]), Y, ae)
561- let cM = fraction(cm, (ac - (aa / 2)), ac)
562- let cN = fraction(cm, (ab / 2), ac)
563- let cO = fraction(cN, V, Y)
564- let cP = fraction(cN, W, Y)
565- let cQ = if ((ct == N))
566- then $Tuple3((cq - cO), cP, O)
567- else $Tuple3((cq - cP), cO, N)
568- let cR = cQ._1
569- let cS = cQ._2
570- let cT = cQ._3
571- let cb = if (containsElement(L, ct))
572- then invoke(this, "stakeUnstake", [true, cR, ct], nil)
573- else 0
574- if ((cb == cb))
575- then {
576- let cc = if (containsElement(L, cT))
577- then invoke(this, "stakeUnstake", [false, cS, cT], nil)
578- else 0
579- if ((cc == cc))
580- then [Reissue(X, cM, true), ScriptTransfer(au.caller, cM, X), ScriptTransfer(H, cO, P), ScriptTransfer(H, cP, Q), IntegerEntry(f, (cH - cO)), IntegerEntry(g, (cI - cP)), IntegerEntry(i, (Y + cM)), IntegerEntry(k, aF((cH - cO), (cI - cP)))]
581- else throw("Strict value is not equal to itself.")
582- }
583- else throw("Strict value is not equal to itself.")
584- }
569+ else {
570+ let cl = fraction(cJ, ae, cL)
571+ let cm = fraction(cK, ae, cM)
572+ let cu = fraction(min([cl, cm]), Y, ae)
573+ let cR = fraction(cu, (ac - (aa / 2)), ac)
574+ let cS = fraction(cu, (ab / 2), ac)
575+ let cT = fraction(cS, V, Y)
576+ let cU = fraction(cS, W, Y)
577+ let cV = if ((cz == N))
578+ then $Tuple3((bK - cT), cU, O)
579+ else $Tuple3((bK - cU), cT, N)
580+ let cW = cV._1
581+ let cX = cV._2
582+ let cY = cV._3
583+ let cj = if (containsElement(L, cz))
584+ then invoke(this, "stakeUnstake", [true, cW, cz], nil)
585+ else 0
586+ if ((cj == cj))
587+ then {
588+ let ck = if (containsElement(L, cY))
589+ then invoke(this, "stakeUnstake", [false, cX, cY], nil)
590+ else 0
591+ if ((ck == ck))
592+ then [Reissue(X, cR, true), ScriptTransfer(au.caller, cR, X), ScriptTransfer(H, cT, P), ScriptTransfer(H, cU, Q), IntegerEntry(f, (cN - cT)), IntegerEntry(g, (cO - cU)), IntegerEntry(i, (Y + cR)), IntegerEntry(k, aF((cN - cT), (cO - cU)))]
593+ else throw("Strict value is not equal to itself.")
594+ }
595+ else throw("Strict value is not equal to itself.")
596+ }
585597 }
586598 })
587599
588600
589601
590602 @Callable(au)
591603 func withdraw () = valueOrElse(bk(), {
592- let cU = $Tuple2(au.payments[0].amount, au.payments[0].assetId)
593- let cq = cU._1
594- let cr = cU._2
595- let cV = fraction(cq, V, Y)
596- let cW = fraction(cq, W, Y)
597- let ca = aF((V - cV), (W - cW))
604+ let cZ = $Tuple2(au.payments[0].amount, au.payments[0].assetId)
605+ let bK = cZ._1
606+ let bL = cZ._2
607+ let da = fraction(bK, V, Y)
608+ let db = fraction(bK, W, Y)
609+ let ci = aF((V - da), (W - db))
598610 if ((size(au.payments) != 1))
599611 then bn()
600- else if ((cr != X))
612+ else if ((bL != X))
601613 then throw(("Incorrect asset attached. Expected: " + toBase58String(X)))
602614 else if (!(aB))
603- then ([ScriptTransfer(au.caller, cq, cr)] ++ bs())
615+ then ([ScriptTransfer(au.caller, bK, bL)] ++ bo())
604616 else {
605- let cb = if (containsElement(L, N))
606- then invoke(this, "stakeUnstake", [false, cV, N], nil)
617+ let cj = if (containsElement(L, N))
618+ then invoke(this, "stakeUnstake", [false, da, N], nil)
607619 else 0
608- if ((cb == cb))
620+ if ((cj == cj))
609621 then {
610- let cc = if (containsElement(L, O))
611- then invoke(this, "stakeUnstake", [false, cW, O], nil)
622+ let ck = if (containsElement(L, O))
623+ then invoke(this, "stakeUnstake", [false, db, O], nil)
612624 else 0
613- if ((cc == cc))
614- then [IntegerEntry(f, (V - cV)), IntegerEntry(g, (W - cW)), IntegerEntry(i, (Y - cq)), IntegerEntry(k, ca), Burn(X, cq), ScriptTransfer(au.caller, cV, P), ScriptTransfer(au.caller, cW, Q)]
625+ if ((ck == ck))
626+ then [IntegerEntry(f, (V - da)), IntegerEntry(g, (W - db)), IntegerEntry(i, (Y - bK)), IntegerEntry(k, ci), Burn(X, bK), ScriptTransfer(au.caller, da, P), ScriptTransfer(au.caller, db, Q)]
615627 else throw("Strict value is not equal to itself.")
616628 }
617629 else throw("Strict value is not equal to itself.")
618630 }
619631 })
620632
621633
622634
623635 @Callable(au)
624-func exchange (cX,cY) = valueOrElse(bk(), {
625- let cZ = $Tuple2(au.payments[0].amount, au.payments[0].assetId)
626- let cq = cZ._1
627- let cr = cZ._2
628- if ((0 >= cX))
629- then throw(("Estimated amount must be positive. Actual: " + toString(cX)))
630- else if ((cY > cX))
636+func exchange (dc,bJ) = valueOrElse(bk(), {
637+ let dd = $Tuple2(au.payments[0].amount, au.payments[0].assetId)
638+ let bK = dd._1
639+ let bL = dd._2
640+ if ((0 >= dc))
641+ then throw(("Estimated amount must be positive. Actual: " + toString(dc)))
642+ else if ((bJ > dc))
631643 then throw("Minimal amount can't be greater than estimated.")
632644 else if ((size(au.payments) != 1))
633645 then bn()
634646 else if (!(aB))
635- then ([ScriptTransfer(au.caller, cq, cr)] ++ bs())
636- else if (if ((cr != P))
637- then (cr != Q)
647+ then ([ScriptTransfer(au.caller, bK, bL)] ++ bo())
648+ else if (if ((bL != P))
649+ then (bL != Q)
638650 else false)
639651 then bm()
640- else if ((10000000 > cq))
652+ else if ((10000000 > bK))
641653 then throw("Only swap of 10.000000 or more tokens is allowed")
642- else if (if ((ak > fraction(ae, cY, cq)))
643- then true
644- else (fraction(ae, cX, cq) > al))
645- then throw("Incorrect args and pmt ratio")
646- else {
647- let da = if ((cr == P))
648- then Q
649- else P
650- let bw = aH(cX, cY, cq, cr)
651- let db = bB(au.originCaller)
652- let dc = fraction(bw, fraction(ab, db, ac, CEILING), ac)
653- let dd = fraction(bw, (ac - fraction(aa, db, ac, CEILING)), ac)
654- let de = if ((cr == P))
655- then $Tuple2((V + cq), ((W - dd) - dc))
656- else $Tuple2(((V - dd) - dc), (W + cq))
657- let cH = de._1
658- let cI = de._2
659- let cL = fraction((cH + cI), ai, (2 * aj))
660- if (if ((cL > cH))
661- then true
662- else (cL > cI))
663- then bo(cL, cH, cI)
664- else {
665- let df = be(cr)
666- let ct = df._1
667- let cu = df._2
668- let cv = df._3
669- let dg = be(da)
670- let dh = dg._1
671- let di = dg._2
672- let dj = dg._3
673- let cb = if (containsElement(L, ct))
674- then invoke(this, "stakeUnstake", [true, cq, ct], nil)
675- else 0
676- if ((cb == cb))
677- then {
678- let cc = if (containsElement(L, dh))
679- then invoke(this, "stakeUnstake", [false, (dd + dc), dh], nil)
680- else 0
681- if ((cc == cc))
682- then $Tuple2([IntegerEntry(f, cH), IntegerEntry(g, cI), IntegerEntry(k, aF(cH, cI)), ScriptTransfer(au.caller, dd, da), ScriptTransfer(H, dc, da)], $Tuple2(dd, da))
683- else throw("Strict value is not equal to itself.")
684- }
685- else throw("Strict value is not equal to itself.")
686- }
687- }
654+ else {
655+ let de = bG(V, W, bJ, bK, bL)
656+ let df = de._1
657+ let dg = de._2
658+ if (((al - fraction(ak, df, ae)) > dg))
659+ then throw("Incorrect args and pmt ratio")
660+ else {
661+ let dh = if ((bL == P))
662+ then Q
663+ else P
664+ let bw = aH(dc, bJ, bK, bL)
665+ let di = bB(au.originCaller)
666+ let dj = fraction(bw, fraction(ab, di, ac, CEILING), ac)
667+ let dk = fraction(bw, (ac - fraction(aa, di, ac, CEILING)), ac)
668+ let dl = if ((bL == P))
669+ then $Tuple2((V + bK), ((W - dk) - dj))
670+ else $Tuple2(((V - dk) - dj), (W + bK))
671+ let cN = dl._1
672+ let cO = dl._2
673+ let dm = fraction((cN + cO), ai, (2 * aj))
674+ if (if ((dm > cN))
675+ then true
676+ else (dm > cO))
677+ then bp(dm, cN, cO)
678+ else {
679+ let dn = be(bL)
680+ let cz = dn._1
681+ let cA = dn._2
682+ let cB = dn._3
683+ let do = be(dh)
684+ let dp = do._1
685+ let dq = do._2
686+ let dr = do._3
687+ let cj = if (containsElement(L, cz))
688+ then invoke(this, "stakeUnstake", [true, bK, cz], nil)
689+ else 0
690+ if ((cj == cj))
691+ then {
692+ let ck = if (containsElement(L, dp))
693+ then invoke(this, "stakeUnstake", [false, (dk + dj), dp], nil)
694+ else 0
695+ if ((ck == ck))
696+ then $Tuple2([IntegerEntry(f, cN), IntegerEntry(g, cO), IntegerEntry(k, aF(cN, cO)), ScriptTransfer(au.caller, dk, dh), ScriptTransfer(H, dj, dh)], $Tuple2(dk, dh))
697+ else throw("Strict value is not equal to itself.")
698+ }
699+ else throw("Strict value is not equal to itself.")
700+ }
701+ }
702+ }
688703 })
689704
690705
691706
692707 @Callable(au)
693708 func shutdown () = valueOrElse(bl(au), if (!(M))
694709 then throw(("DApp is already suspended. Cause: " + valueOrElse(getString(this, l), "the cause wasn't specified")))
695710 else bh("Paused by admin"))
696711
697712
698713
699714 @Callable(au)
700715 func activate () = valueOrElse(bl(au), if (M)
701716 then bj()
702717 else [BooleanEntry(c, true), DeleteEntry(l)])
703718
704719
705720
706721 @Callable(au)
707722 func takeIntoAccountExtraFunds () = valueOrElse(bk(), {
708- let dk = (az - V)
709- let dl = (aA - W)
710- let cJ = aF((V + dk), (W + dl))
723+ let ds = (az - V)
724+ let dt = (aA - W)
725+ let cP = aF((V + ds), (W + dt))
711726 if ((au.caller != H))
712727 then throw("Only the money box can call this function")
713- else if (if ((0 > dk))
728+ else if (if ((0 > ds))
714729 then true
715- else (0 > dl))
730+ else (0 > dt))
716731 then bh("Enroll amount negative")
717- else if (if ((dk == 0))
718- then (dl == 0)
732+ else if (if ((ds == 0))
733+ then (dt == 0)
719734 else false)
720735 then throw("No money to take")
721736 else {
722- let cb = if (if (containsElement(L, N))
723- then (dk > 0)
737+ let cj = if (if (containsElement(L, N))
738+ then (ds > 0)
724739 else false)
725- then invoke(this, "stakeUnstake", [true, dk, N], nil)
740+ then invoke(this, "stakeUnstake", [true, ds, N], nil)
726741 else 0
727- if ((cb == cb))
742+ if ((cj == cj))
728743 then {
729- let cc = if (if (containsElement(L, O))
730- then (dl > 0)
744+ let ck = if (if (containsElement(L, O))
745+ then (dt > 0)
731746 else false)
732- then invoke(this, "stakeUnstake", [true, dl, O], nil)
747+ then invoke(this, "stakeUnstake", [true, dt, O], nil)
733748 else 0
734- if ((cc == cc))
735- then [IntegerEntry(k, cJ), IntegerEntry(f, (V + dk)), IntegerEntry(g, (W + dl))]
749+ if ((ck == ck))
750+ then [IntegerEntry(k, cP), IntegerEntry(f, (V + ds)), IntegerEntry(g, (W + dt))]
736751 else throw("Strict value is not equal to itself.")
737752 }
738753 else throw("Strict value is not equal to itself.")
739754 }
740755 })
741756
742757
743758
744759 @Callable(au)
745-func stakeUnstake (bu,bw,dm) = if ((au.caller != this))
760+func stakeUnstake (bu,bw,du) = if ((au.caller != this))
746761 then throw("Only contract itself can invoke this function")
747762 else {
748- let dn = bv(bu, bw, fromBase58String(dm))
749- let by = dn._1
750- let do = dn._2
751- let dp = dn._3
752- let dq = dn._4
753- let dr = invoke(do, by, dp, dq)
754- if ((dr == dr))
763+ let dv = bv(bu, bw, fromBase58String(du))
764+ let by = dv._1
765+ let dw = dv._2
766+ let dx = dv._3
767+ let dy = dv._4
768+ let dz = invoke(dw, by, dx, dy)
769+ if ((dz == dz))
755770 then nil
756771 else throw("Strict value is not equal to itself.")
757772 }
758773
759774
760775
761776 @Callable(au)
762777 func toBigIntInvariant () = valueOrElse(bl(au), [IntegerEntry(k, aF(V, W))])
763778
764779
765-@Verifier(ds)
766-func dt () = {
767- let du = {
768- let dv = if (sigVerify(ds.bodyBytes, ds.proofs[0], D))
780+@Verifier(dA)
781+func dB () = {
782+ let dC = {
783+ let dD = if (sigVerify(dA.bodyBytes, dA.proofs[0], D))
769784 then 1
770785 else 0
771- let dw = if (sigVerify(ds.bodyBytes, ds.proofs[1], E))
786+ let dE = if (sigVerify(dA.bodyBytes, dA.proofs[1], E))
772787 then 1
773788 else 0
774- let dx = if (sigVerify(ds.bodyBytes, ds.proofs[2], F))
789+ let dF = if (sigVerify(dA.bodyBytes, dA.proofs[2], F))
775790 then 1
776791 else 0
777- (((dv + dw) + dx) >= 2)
792+ (((dD + dE) + dF) >= 2)
778793 }
779- let A = ds
794+ let A = dA
780795 if ($isInstanceOf(A, "InvokeScriptTransaction"))
781796 then {
782- let dr = A
783- let dy = if ((dr.dApp == this))
784- then (dr.function == "takeIntoAccountExtraFunds")
797+ let dz = A
798+ let dG = if ((dz.dApp == this))
799+ then (dz.function == "takeIntoAccountExtraFunds")
785800 else false
786- let dz = if (if (if (sigVerify(ds.bodyBytes, ds.proofs[0], D))
801+ let dH = if (if (if (sigVerify(dA.bodyBytes, dA.proofs[0], D))
787802 then true
788- else sigVerify(ds.bodyBytes, ds.proofs[0], E))
803+ else sigVerify(dA.bodyBytes, dA.proofs[0], E))
789804 then true
790- else sigVerify(ds.bodyBytes, ds.proofs[0], F))
805+ else sigVerify(dA.bodyBytes, dA.proofs[0], F))
791806 then true
792- else sigVerify(ds.bodyBytes, ds.proofs[0], G)
793- if (if (dy)
794- then dz
807+ else sigVerify(dA.bodyBytes, dA.proofs[0], G)
808+ if (if (dG)
809+ then dH
795810 else false)
796811 then true
797- else du
812+ else dC
798813 }
799- else du
814+ else dC
800815 }
801816

github/deemru/w8io/026f985 
157.47 ms