tx · 9w14o88xk9cNysrre79geypArSGrMpg72tMVQV2JDjto

3PNi1BJendWYYe2CRnqpfLoYxUZ6UTcx3LF:  -0.01400000 Waves

2022.05.08 13:06 [3108037] smart account 3PNi1BJendWYYe2CRnqpfLoYxUZ6UTcx3LF > SELF 0.00000000 Waves

{ "type": 13, "id": "9w14o88xk9cNysrre79geypArSGrMpg72tMVQV2JDjto", "fee": 1400000, "feeAssetId": null, "timestamp": 1652003641217, "version": 2, "chainId": 87, "sender": "3PNi1BJendWYYe2CRnqpfLoYxUZ6UTcx3LF", "senderPublicKey": "DPiPHjYxH29a4J8cyZDKwgtLKxH17JvT7nwm6ugnSEm7", "proofs": [ "", "wBUnTovaXxRPtKVVFqwFwTzUCFLMYG4vambryyut4ojdJgCi4dDLdPcm2WSrDDkbr6zWGqPWBirzHpFb6dSHXBx", "3anRPmzoQqdZdBpiJJhYANxiENVSY94hDPnMKUxcvXBg8A2TXvzv6W2G1ECfMkFZ6ByHbnmGfoxrPGmukvYy6GVo" ], "script": "base64:AAIFAAAAAAAAACMIAhIAEgASBAoCAQESABIECgIBARIAEgASABIFCgMEAQgSAAAAAE8AAAAAB3ZlcnNpb24CAAAABTIuMC4wAAAAAAhrVmVyc2lvbgIAAAAHdmVyc2lvbgAAAAAHa0FjdGl2ZQIAAAAGYWN0aXZlAAAAAAlrQXNzZXRJZEECAAAACkFfYXNzZXRfaWQAAAAACWtBc3NldElkQgIAAAAKQl9hc3NldF9pZAAAAAAJa0JhbGFuY2VBAgAAAA9BX2Fzc2V0X2JhbGFuY2UAAAAACWtCYWxhbmNlQgIAAAAPQl9hc3NldF9iYWxhbmNlAAAAAA1rU2hhcmVBc3NldElkAgAAAA5zaGFyZV9hc3NldF9pZAAAAAARa1NoYXJlQXNzZXRTdXBwbHkCAAAAEnNoYXJlX2Fzc2V0X3N1cHBseQAAAAAEa0ZlZQIAAAAKY29tbWlzc2lvbgAAAAAKa0ludmFyaWFudAIAAAAJaW52YXJpYW50AAAAAAZrQ2F1c2UCAAAADnNodXRkb3duX2NhdXNlAAAAAAxrVVNETkFkZHJlc3MCAAAAGHN0YWtpbmdfdXNkbm5zYnRfYWRkcmVzcwAAAAAMa0VVUk5BZGRyZXNzAgAAABRzdGFraW5nX2V1cm5fYWRkcmVzcwAAAAANa0FkbWluUHViS2V5MQIAAAALYWRtaW5fcHViXzEAAAAADWtBZG1pblB1YktleTICAAAAC2FkbWluX3B1Yl8yAAAAAA1rQWRtaW5QdWJLZXkzAgAAAAthZG1pbl9wdWJfMwAAAAASa0FkbWluSW52b2tlUHViS2V5AgAAABBhZG1pbl9pbnZva2VfcHViAAAAABBrTW9uZXlCb3hBZGRyZXNzAgAAABFtb25leV9ib3hfYWRkcmVzcwAAAAAGb3JhY2xlCQEAAAAHQWRkcmVzcwAAAAEBAAAAGgFXiv8IaJo1ukDNYXTyEjfepjfw+jjO6B44AQAAABNnZXRCYXNlNThGcm9tT3JhY2xlAAAAAQAAAANrZXkEAAAAByRtYXRjaDAJAAQdAAAAAgUAAAAGb3JhY2xlBQAAAANrZXkDCQAAAQAAAAIFAAAAByRtYXRjaDACAAAABlN0cmluZwQAAAAGc3RyaW5nBQAAAAckbWF0Y2gwCQACWQAAAAEFAAAABnN0cmluZwQAAAAHbm90aGluZwUAAAAHJG1hdGNoMAkAAAIAAAABCQABLAAAAAIFAAAAA2tleQIAAAAIaXMgZW1wdHkAAAAADGFkbWluUHViS2V5MQkBAAAAE2dldEJhc2U1OEZyb21PcmFjbGUAAAABBQAAAA1rQWRtaW5QdWJLZXkxAAAAAAxhZG1pblB1YktleTIJAQAAABNnZXRCYXNlNThGcm9tT3JhY2xlAAAAAQUAAAANa0FkbWluUHViS2V5MgAAAAAMYWRtaW5QdWJLZXkzCQEAAAATZ2V0QmFzZTU4RnJvbU9yYWNsZQAAAAEFAAAADWtBZG1pblB1YktleTMAAAAAEWFkbWluUHViS2V5SW52b2tlCQEAAAATZ2V0QmFzZTU4RnJvbU9yYWNsZQAAAAEFAAAAEmtBZG1pbkludm9rZVB1YktleQAAAAAPbW9uZXlCb3hBZGRyZXNzCQEAAAAHQWRkcmVzcwAAAAEJAQAAABNnZXRCYXNlNThGcm9tT3JhY2xlAAAAAQUAAAAQa01vbmV5Qm94QWRkcmVzcwAAAAASc3Rha2luZ1VTRE5BZGRyZXNzCQEAAAAHQWRkcmVzcwAAAAEJAQAAABNnZXRCYXNlNThGcm9tT3JhY2xlAAAAAQUAAAAMa1VTRE5BZGRyZXNzAAAAAARVU0ROAQAAACC2JinDBPXOU5GkDkt1JC9kjFGx+t+vVCm9SNIdKrKq0QAAAAANc3Rha2luZ0Fzc2V0cwkABEwAAAACCQACWAAAAAEFAAAABFVTRE4FAAAAA25pbAAAAAAGYWN0aXZlCQEAAAARQGV4dHJOYXRpdmUoMTA1MSkAAAACBQAAAAR0aGlzBQAAAAdrQWN0aXZlAAAAAAtzdHJBc3NldElkQQkBAAAAEUBleHRyTmF0aXZlKDEwNTMpAAAAAgUAAAAEdGhpcwUAAAAJa0Fzc2V0SWRBAAAAAAtzdHJBc3NldElkQgkBAAAAEUBleHRyTmF0aXZlKDEwNTMpAAAAAgUAAAAEdGhpcwUAAAAJa0Fzc2V0SWRCAAAAAAhhc3NldElkQQMJAAAAAAAAAgUAAAALc3RyQXNzZXRJZEECAAAABVdBVkVTBQAAAAR1bml0CQACWQAAAAEFAAAAC3N0ckFzc2V0SWRBAAAAAAhhc3NldElkQgMJAAAAAAAAAgUAAAALc3RyQXNzZXRJ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AgkBAAAAC1N0cmluZ0VudHJ5AAAAAgUAAAAJa0Fzc2V0SWRBBQAAAA5wbXRTdHJBc3NldElkQQkABEwAAAACCQEAAAALU3RyaW5nRW50cnkAAAACBQAAAAlrQXNzZXRJZEIFAAAADnBtdFN0ckFzc2V0SWRCCQAETAAAAAIJAQAAAAxJbnRlZ2VyRW50cnkAAAACBQAAAAlrQmFsYW5jZUEFAAAACnBtdEFtb3VudEEJAARMAAAAAgkBAAAADEludGVnZXJFbnRyeQAAAAIFAAAACWtCYWxhbmNlQgUAAAAKcG10QW1vdW50QgkABEwAAAACCQEAAAAMSW50ZWdlckVudHJ5AAAAAgUAAAAKa0ludmFyaWFudAUAAAATaW52YXJpYW50Q2FsY3VsYXRlZAkABEwAAAACCQEAAAAMSW50ZWdlckVudHJ5AAAAAgUAAAAEa0ZlZQkBAAAAEUBleHRyTmF0aXZlKDEwNTApAAAAAgUAAAAGb3JhY2xlAgAAAA1iYXNlX2ZlZV9mbGF0CQAETAAAAAIFAAAACnNoYXJlSXNzdWUJAARMAAAAAgkBAAAAC1N0cmluZ0VudHJ5AAAAAgUAAAANa1NoYXJlQXNzZXRJZAkAAlgAAAABBQAAAAxzaGFyZUlzc3VlSWQJAARMAAAAAgkBAAAADEludGVnZXJFbnRyeQAAAAIFAAAAEWtTaGFyZUFzc2V0U3VwcGx5BQAAABJzaGFyZUluaXRpYWxTdXBwbHkJAARMAAAAAgkBAAAADlNjcmlwdFRyYW5zZmVyAAAAAwgFAAAAAWkAAAAGY2FsbGVyBQAAABJzaGFyZUluaXRpYWxTdXBwbHkFAAAADHNoYXJlSXNzdWVJZAUAAAADbmlsCQAAAgAAAAECAAAAJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgkAAAIAAAABAgAAACRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4AAAABaQEAAAAWcmVwbGVuaXNoV2l0aFR3b1Rva2VucwAAAAAJAQAAAAt2YWx1ZU9yRWxzZQAAAAIJAQAAAAhpc0FjdGl2ZQAAAAAEAAAAC3BtdEFzc2V0SWRBCAkAAZEAAAACCAUAAAABaQAAAAhwYXltZW50cwAAAAAAAAAAAAAAAAdhc3NldElkBAAAAAtwbXRBc3NldElkQggJAAGRAAAAAggFAAAAAWkAAAAIcGF5bWVudHMAAAAAAAAAAAEAAAAHYXNzZXRJZAQAAAATcmF0aW9TaGFyZVRva2Vuc0luQQkAAGsAAAADBQAAAAZzY2FsZTgICQABkQAAAAIIBQAAAAFpAAAACHBheW1lbnRzAAAAAAAAAAAAAAAABmFtb3VudAUAAAAIYmFsYW5jZUEEAAAAE3JhdGlvU2hhcmVUb2tlbnNJbkIJAABrAAAAAwUAAAAGc2NhbGU4CAkAAZEAAAACCAUAAAABaQAAAAhwYXltZW50cwAAAAAAAAAAAQAAAAZhbW91bnQFAAAACGJhbGFuY2VCBAAAAA0kdDAxMjQzNTEyNTEyCQEAAAAMZ2V0QXNzZXRJbmZvAAAAAQUAAAALcG10QXNzZXRJZEEEAAAADnBtdFN0ckFzc2V0SWRBCAUAAAANJHQwMTI0MzUxMjUxMgAAAAJfMQQAAAANcG10QXNzZXROYW1lQQgFAAAADSR0MDEyNDM1MTI1MTIAAAACXzIEAAAADHBtdERlY2ltYWxzQQgFAAAADSR0MDEyNDM1MTI1MTIAAAACXzMEAAAADSR0MDEyNTE3MTI2MzQJAQAAAAxnZXRBc3NldEluZm8AAAABBQAAAAtwbXRBc3NldElkQgQAAAAOcG10U3RyQXNzZXRJZEIIBQAAAA0kdDAxMjUxNzEyNjM0AAAAAl8xBAAAAA1wbXRBc3NldE5hbWVCCAUAAAANJHQwMTI1MTcxMjYzNAAAAAJfMgQAAAAMcG10RGVjaW1hbHNCCAUAAAANJHQwMTI1MTcxMjYzNAAAAAJfMwQAAAANJHQwMTI2MzkxMzE0MwMJAABmAAAAAgUAAAATcmF0aW9TaGFyZVRva2Vuc0luQgUAAAATcmF0aW9TaGFyZVRva2Vuc0luQQQAAAADcG10CQEAAAAIZnJhY3Rpb24AAAAEBQAAAAhiYWxhbmNlQgUAAAATcmF0aW9TaGFyZVRva2Vuc0luQQUAAAAGc2NhbGU4BQAAAAdDRUlMSU5HCQAFFwAAAAUICQABkQAAAAIIBQAAAAFpAAAACHBheW1lbnRzAAAAAAAAAAAAAAAABmFtb3VudAUAAAADcG10CQAAZQAAAAIICQABkQAAAAIIBQAAAAFpAAAACHBheW1l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AAxJbnRlZ2VyRW50cnkAAAACBQAAABFrU2hhcmVBc3NldFN1cHBseQkAAGQAAAACBQAAABBzaGFyZUFzc2V0U3VwcGx5BQAAABVzaGFyZVRva2VuVG9QYXlBbW91bnQJAARMAAAAAgkBAAAADEludGVnZXJFbnRyeQAAAAIFAAAACmtJbnZhcmlhbnQJAQAAAA1pbnZhcmlhbnRDYWxjAAAAAgkAAGQAAAACBQAAAAhiYWxhbmNlQQUAAAAKcG10QW1vdW50QQkAAGQAAAACBQAAAAhiYWxhbmNlQgUAAAAKcG10QW1vdW50QgkABEwAAAACCQEAAAAHUmVpc3N1ZQAAAAMFAAAADHNoYXJlQXNzZXRJZAUAAAAVc2hhcmVUb2tlblRvUGF5QW1vdW50BgkABEwAAAACCQEAAAAOU2NyaXB0VHJhbnNmZXIAAAADCAUAAAABaQAAAAZjYWxsZXIFAAAAFXNoYXJlVG9rZW5Ub1BheUFtb3VudAUAAAAMc2hhcmVBc3NldElkCQAETAAAAAIJAQAAAA5TY3JpcHRUcmFuc2ZlcgAAAAMIBQAAAAFpAAAABmNhbGxlcgUAAAAGY2hhbmdlBQAAAA1jaGFuZ2VBc3NldElkBQAAAANuaWwJAAACAAAAAQIAAAAkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuCQAAAgAAAAECAAAAJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgAAAAFpAQAAABVyZXBsZW5pc2hXaXRoT25lVG9rZW4AAAACAAAAE3ZpcnR1YWxTd2FwVG9rZW5QYXkAAAATdmlydHVhbFN3YXBUb2tlbkdldAkBAAAAC3ZhbHVlT3JFbHNlAAAAAgkBAAAACGlzQWN0aXZlAAAAAAQAAAANJHQwMTQ4NzYxNDk1MQkABRQAAAACCAkAAZEAAAACCAUAAAABaQAAAAhwYXltZW50cwAAAAAAAAAAAAAAAAZhbW91bnQICQABkQAAAAIIBQAAAAFpAAAACHBheW1lbnRzAAAAAAAAAAAAAAAAB2Fzc2V0SWQEAAAACXBtdEFtb3VudAgFAAAADSR0MDE0ODc2MTQ5NTEAAAACXzEEAAAACnBtdEFzc2V0SWQIBQAAAA0kdDAxNDg3NjE0OTUxAAAAAl8yBAAAAA0kdDAxNDk1NjE1MDI5CQEAAAAMZ2V0QXNzZXRJbmZvAAAAAQUAAAAKcG10QXNzZXRJZAQAAAANcG10U3RyQXNzZXRJZAgFAAAADSR0MDE0OTU2MTUwMjkAAAACXzEEAAAADHBtdEFzc2V0TmFtZQgFAAAADSR0MDE0OTU2MTUwMjkAAAACXzIEAAAAC3BtdERlY2ltYWxzCAUAAAANJHQwMTQ5NTYxNTAyOQAAAAJfMwQAAAAPcG10TWluVGhyZXNob2xkAAAAAAAATEtABAAAAB10aHJlc2hvbGRWYWx1ZUZvck1pblRvbGVyYW5jZQAAAAAAAvrwgAQAAAAJdG9sZXJhbmNlAwkAAGYAAAACBQAAAB10aHJlc2hvbGRWYWx1ZUZvck1pblRvbGVyYW5jZQUAAAAJcG10QW1vdW50AAAAAAAAAYagAAAAAAAAAAABBAAAABxzbGlwcGFnZVZhbHVlTWluRm9yUmVwbGVuaXNoCQAAZQAAAAIFAAAABnNjYWxlOAkAAGkAAAACCQAAaAAAAAIFAAAABnNjYWxlOAUAAAAJdG9sZXJhbmNlAAAAAAAAmJaABAAAABxzbGlwcGFnZVZhbHVlTWF4Rm9yUmVwbGVuaXNoCQAAZAAAAAIFAAAABnNjYWxlOAkAAGkAAAACCQAAaAAAAAIFAAAABnNjYWxlOAUAAAAJdG9sZXJhbmNlAAAAAAAAmJaABAAAABdzbGlwcGFnZVZhbHVlTWluRm9yU3dhcAkAAGUAAAACBQAAAAZzY2FsZTgJAABpAAAAAgkAAGgAAAACBQAAAAZzY2FsZTgAAAAAAAAAAAEAAAAAAACYloADCQAAZgAAAAIFAAAAD3BtdE1pblRocmVzaG9sZAUAAAAJcG10QW1vdW50CQAAAgAAAAEJAAEsAAAAAgkAASwAAAACCQABLAAAAAIJAAEsAAAAAgIAAAAPUGF5bWVudCBhbW91bnQgCQABpAAAAAEFAAAACXBtdEFtb3VudAIAAAAnIGRvZXMgbm90IGV4Y2VlZCB0aGUgbWluaW11bSBhbW91bnQgb2YgCQABpAAAAAEFAAAAD3BtdE1pblRocmVzaG9sZAIAAAAHIHRva2VucwMJAQAAAAIhPQAAAAIJAAGQAAAAAQgFAAAAAWkAAAAIcGF5bWVudHMAAAAAAAAAAAEJAQAAAA90aHJvd09uZVBheW1lbnQAAAAAAwkBAAAAASEAAAABBQAAABBoYXNFbm91Z2hCYWxhbmNlCQAETgAAAAIJAARMAAAAAgkBAAAADlNjcmlwdFRyYW5zZmVyAAAAAwgFAAAAAWkAAAAGY2FsbGVyBQAAAAlwbXRBbW91bnQFAAAACnBtdEFzc2V0SWQFAAAAA25pbAkBAAAAEXN1c3BlbmRTdXNwaWNpb3VzAAAAAAMDCQEAAAACIT0AAAACBQAAAApwbXRBc3NldElkBQAAAAhhc3NldElkQQkBAAAAAiE9AAAAAgUAAAAKcG10QXNzZXRJZAUAAAAIYXNzZXRJZEIHCQEAAAALdGhyb3dBc3NldHMAAAAABAAAAA0kdDAxNjAwNzE2NjQ5AwkAAAAAAAACBQAAAApwbXRBc3NldElkBQAAAAhhc3NldElkQQkABRgAAAAGCQAAZQAAAAIFAAAACXBtdEFtb3VudAUAAAATdmlydHVhbFN3YXBUb2tlblBheQUAAAATdmlydHVhbFN3YXBUb2tlbkdldAkAAGQAAAACBQAAAAhiYWxhbmNlQQUAAAATdmlydHVhbFN3YXBUb2tlblBheQkAAGUAAAACBQAAAAhiYWxhbmNlQgUAAAATdmlydHVhbFN3YXBUb2tlbkdldAkAAGQAAAACBQAAAAhiYWxhbmNlQQUAAAAJcG10QW1vdW50BQAAAAhiYWxhbmNlQgkABRgAAAAGBQAAABN2aXJ0dWFsU3dhcFRva2VuR2V0CQAAZQAAAAIFAAAACXBtdEFtb3VudAUAAAATdmlydHVhbFN3YXBUb2tlblBheQkAAGUAAAACBQAAAAhiYWxhbmNlQQUAAAATdmlydHVhbFN3YXBUb2tlbkdldAkAAGQAAAACBQAAAAhiYWxhbmNlQgUAAAATdmlydHVhbFN3YXBUb2tlblBheQUAAAAIYmFsYW5jZUEJAABkAAAAAgUAAAAIYmFsYW5jZUIFAAAACXBtdEFtb3VudAQAAAARdmlydHVhbFJlcGxlbmlzaEEIBQAAAA0kdDAxNjAwNzE2NjQ5AAAAAl8xBAAAABF2aXJ0dWFsUmVwbGVuaXNoQggFAAAADSR0MDE2MDA3MTY2NDkAAAACXzIEAAAAEWJhbGFuY2VBZnRlclN3YXBBCAUAAAANJHQwMTYwMDcxNjY0OQAAAAJfMwQAAAARYmFsYW5jZUFmdGVyU3dhcEIIBQAAAA0kdDAxNjAwNzE2NjQ5AAAAAl80BAAAAAtuZXdCYWxhbmNlQQgFAAAADSR0MDE2MDA3MTY2NDkAAAACXzUEAAAAC25ld0JhbGFuY2VCCAUAAAANJHQwMTYwMDcxNjY0OQAAAAJfNgQAAAAMaW52YXJpYW50TmV3CQEAAAANaW52YXJpYW50Q2FsYwAAAAIFAAAAEWJhbGFuY2VBZnRlclN3YXBBBQAAABFiYWxhbmNlQWZ0ZXJTd2FwQgQAAAAlcmF0aW9WaXJ0dWFsQmFsYW5jZVRvVmlydHVhbFJlcGxlbmlzaAkAAGkAAAACCQAAawAAAAMFAAAAB3NjYWxlMTYFAAAAEWJhbGFuY2VBZnRlclN3YXBBBQAAABFiYWxhbmNlQWZ0ZXJTd2FwQgkAAGsAAAADBQAAAAZzY2FsZTgFAAAAEXZpcnR1YWxSZXBsZW5pc2hBBQAAABF2aXJ0dWFsUmVwbGVuaXNoQgQAAAATZEFwcFRocmVzaG9sZEFtb3VudAkAAGsAAAADCQAAZAAAAAIFAAAAC25ld0JhbGFuY2VBBQAAAAtuZXdCYWxhbmNlQgUAAAANZEFwcFRocmVzaG9sZAkAAGgAAAACAAAAAAAAAAACBQAAABNkQXBwVGhyZXNob2xkU2NhbGUyAwMJAABnAAAAAgUAAAAXc2xpcHBhZ2VWYWx1ZU1pbkZvclN3YXAJAABrAAAAAwUAAAAGc2NhbGU4BQAAAAlpbnZhcmlhbnQFAAAADGludmFyaWFudE5ldwYJAABmAAAAAgUAAAAJaW52YXJpYW50BQAAAAxpbnZhcmlhbnROZXcJAAACAAAAAQIAAAA6SW5jb3JyZWN0IHZpcnR1YWxTd2FwVG9rZW5QYXkgb3IgdmlydHVhbFN3YXBUb2tlbkdldCB2YWx1ZQMDCQAAZgAAAAIFAAAAHHNsaXBwYWdlVmFsdWVNaW5Gb3JSZXBsZW5pc2gFAAAAJXJhdGlvVmlydHVhbEJhbGFuY2VUb1ZpcnR1YWxSZXBsZW5pc2gGCQAAZgAAAAIFAAAAJXJhdGlvVmlydHVhbEJhbGFuY2VUb1ZpcnR1YWxSZXBsZW5pc2gFAAAAHHNsaXBwYWdlVmFsdWVNYXhGb3JSZXBsZW5pc2gJAAACAAAAAQIAAABsU3dhcCB3aXRoIHZpcnR1YWxTd2FwVG9rZW5QYXkgYW5kIHZpcnR1YWxTd2FwVG9rZW5HZXQgaXMgcG9zc2libGUsIGJ1dCByYXRpbyBhZnRlciB2aXJ0dWFsIHN3YXAgaXMgaW5jb3JyZWN0AwMJAABmAAAAAgUAAAATZEFwcFRocmVzaG9sZEFtb3VudAUAAAALbmV3QmFsYW5jZUEGCQAAZgAAAAIFAAAAE2RBcHBUaHJlc2hvbGRBbW91bnQFAAAAC25ld0JhbGFuY2VCCQEAAAAOdGhyb3dUaHJlc2hvbGQAAAADBQAAABNkQXBwVGhyZXNob2xkQW1vdW50BQAAAAtuZXdCYWxhbmNlQQUAAAALbmV3QmFsYW5jZUIEAAAAE3JhdGlvU2hhcmVUb2tlbnNJbkEJAABrAAAAAwUAAAARdmlydHVhbFJlcGxlbmlzaEEFAAAABnNjYWxlOAUAAAARYmFsYW5jZUFmdGVyU3dhcEEEAAAAE3JhdGlvU2hhcmVUb2tlbnNJbkIJAABrAAAAAwUAAAARdmlydHVhbFJlcGxlbmlzaEIFAAAABnNjYWxlOAUAAAARYmFsYW5jZUFmdGVyU3dhcEIEAAAAFXNoYXJlVG9rZW5Ub1BheUFtb3VudAkAAGsAAAADCQABlwAAAAEJAARMAAAAAgUAAAATcmF0aW9TaGFyZVRva2Vuc0luQQkABEwAAAACBQAAABNyYXRpb1NoYXJlVG9rZW5zSW5CBQAAAANuaWwFAAAAEHNoYXJlQXNzZXRTdXBwbHkFAAAABnNjYWxlOAQAAAAdc2hhcmVUb2tlblRvUGF5QW1vdW50QWZ0ZXJGZWUJAABrAAAAAwUAAAAVc2hhcmVUb2tlblRvUGF5QW1vdW50CQAAZQAAAAIFAAAACWZlZVNjYWxlNgkAAGkAAAACBQAAAANmZWUAAAAAAAAAAAIFAAAACWZlZVNjYWxlNgQAAAAac2hhcmVUb2tlbkdvdmVybmFuY2VSZXdhcmQJAABrAAAAAwUAAAAVc2hhcmVUb2tlblRvUGF5QW1vdW50CQAAaQAAAAIFAAAADWZlZUdvdmVybmFuY2UAAAAAAAAAAAIFAAAACWZlZVNjYWxlNgQAAAAWZ292ZXJuYW5jZVJld2FyZFRva2VuQQkAAGsAAAADBQAAABpzaGFyZVRva2VuR292ZXJuYW5jZVJld2FyZAUAAAAIYmFsYW5jZUEFAAAAEHNoYXJlQXNzZXRTdXBwbHkEAAAAFmdvdmVybmFuY2VSZXdhcmRUb2tlbkIJAABrAAAAAwUAAAAac2hhcmVUb2tlbkdvdmVybmFuY2VSZXdhcmQFAAAACGJhbGFuY2VCBQAAABBzaGFyZUFzc2V0U3VwcGx5BAAAAA0kdDAxODYzNjE4OTMxAwkAAAAAAAACBQAAAA1wbXRTdHJBc3NldElkBQAAAAtzdHJBc3NldElkQQkABRUAAAADCQAAZQAAAAIFAAAACXBtdEFtb3VudAUAAAAWZ292ZXJuYW5jZVJld2FyZFRva2VuQQUAAAAWZ292ZXJuYW5jZVJld2FyZFRva2VuQgUAAAALc3RyQXNzZXRJZEIJAAUVAAAAAwkAAGUAAAACBQAAAAlwbXRBbW91bnQFAAAAFmdvdmVybmFuY2VSZXdhcmRUb2tlbkIFAAAAFmdvdmVybmFuY2VSZXdhcmRUb2tlbkEFAAAAC3N0ckFzc2V0SWRBBAAAAAtzdGFrZUFtb3VudAgFAAAADSR0MDE4NjM2MTg5MzEAAAACXzEEAAAADXVuc3Rha2VBbW91bnQIBQAAAA0kdDAxODYzNjE4OTMxAAAAAl8yBAAAAAx1bnN0YWtlQXNzZXQIBQAAAA0kdDAxODYzNjE4OTMxAAAAAl8zBAAAAAZzdGFrZTEDCQEAAAAPY29udGFpbnNFbGVtZW50AAAAAgUAAAANc3Rha2luZ0Fzc2V0cwUAAAANcG10U3RyQXNzZXRJZAkAA/wAAAAEBQAAAAR0aGlzAgAAAAxzdGFrZVVuc3Rha2UJAARMAAAAAgYJAARMAAAAAgUAAAALc3Rha2VBbW91bnQJAARMAAAAAgUAAAANcG10U3RyQXNzZXRJZAUAAAADbmlsBQAAAANuaWwAAAAAAAAAAAADCQAAAAAAAAIFAAAABnN0YWtlMQUAAAAGc3Rha2UxBAAAAAZzdGFrZTIDCQEAAAAPY29udGFpbnNFbGVtZW50AAAAAgUAAAANc3Rha2luZ0Fzc2V0cwUAAAAMdW5zdGFrZUFzc2V0CQAD/AAAAAQFAAAABHRoaXMCAAAADHN0YWtlVW5zdGFrZQkABEwAAAACBwkABEwAAAACBQAAAA11bnN0YWtlQW1vdW50CQAETAAAAAIFAAAADHVuc3Rha2VBc3NldAUAAAADbmlsBQAAAANuaWwAAAAAAAAAAAADCQAAAAAAAAIFAAAABnN0YWtlMgUAAAAGc3Rha2UyCQAETAAAAAIJAQAAAAdSZWlzc3VlAAAAAwUAAAAMc2hhcmVBc3NldElkBQAAAB1zaGFyZVRva2VuVG9QYXlBbW91bnRBZnRlckZlZQYJAARMAAAAAgkBAAAADlNjcmlwdFRyYW5zZmVyAAAAAwgFAAAAAWkAAAAGY2FsbGVyBQAAAB1zaGFyZVRva2VuVG9QYXlBbW91bnRBZnRlckZlZQUAAAAMc2hhcmVBc3NldElkCQAETAAAAAIJAQAAAA5TY3JpcHRUcmFuc2ZlcgAAAAMFAAAAD21vbmV5Qm94QWRkcmVzcwUAAAAWZ292ZXJuYW5jZVJld2FyZFRva2VuQQUAAAAIYXNzZXRJZEEJAARMAAAAAgkBAAAADlNjcmlwdFRyYW5zZmVyAAAAAwUAAAAPbW9uZXlCb3hBZGRyZXNzBQAAABZnb3Zlcm5hbmNlUmV3YXJkVG9rZW5CBQAAAAhhc3NldElkQgkABEwAAAACCQEAAAAMSW50ZWdlckVudHJ5AAAAAgUAAAAJa0JhbGFuY2VBCQAAZQAAAAIFAAAAC25ld0JhbGFuY2VBBQAAABZnb3Zlcm5hbmNlUmV3YXJkVG9rZW5BCQAETAAAAAIJAQAAAAxJbnRlZ2VyRW50cnkAAAACBQAAAAlrQmFsYW5jZUIJAABlAAAAAgUAAAALbmV3QmFsYW5jZUIFAAAAFmdvdmVybmFuY2VSZXdhcmRUb2tlbkIJAARMAAAAAgkBAAAADEludGVnZXJFbnRyeQAAAAIFAAAAEWtTaGFyZUFzc2V0U3VwcGx5CQAAZAAAAAIFAAAAEHNoYXJlQXNzZXRTdXBwbHkFAAAAHXNoYXJlVG9rZW5Ub1BheUFtb3VudEFmdGVyRmVlCQAETAAAAAIJAQAAAAxJbnRlZ2VyRW50cnkAAAACBQAAAAprSW52YXJpYW50CQEAAAANaW52YXJpYW50Q2FsYwAAAAIJAABlAAAAAgUAAAALbmV3QmFsYW5jZUEFAAAAFmdvdmVybmFuY2VSZXdhcmRUb2tlbkEJAABlAAAAAgUAAAALbmV3QmFsYW5jZUIF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bgAAAAIFAAAADHNoYXJlQXNzZXRJZAUAAAAJcG10QW1vdW50CQAETAAAAAIJAQAAAA5TY3JpcHRUcmFuc2ZlcgAAAAMIBQAAAAFpAAAABmNhbGxlcgUAAAAMYW1vdW50VG9QYXlBBQAAAAhhc3NldElkQQkABEwAAAACCQEAAAAOU2NyaXB0VHJhbnNmZXIAAAADCAUAAAABaQAAAAZjYWxsZXIFAAAADGFtb3VudFRvUGF5QgUAAAAIYXNzZXRJZEIFAAAAA25pbAkAAAIAAAABAgAAACRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4JAAACAAAAAQIAAAAkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuAAAAAWkBAAAACGV4Y2hhbmdlAAAAAgAAABhlc3RpbWF0ZWRBbW91bnRUb1JlY2VpdmUAAAASbWluQW1vdW50VG9SZWNlaXZlCQEAAAALdmFsdWVPckVsc2UAAAACCQEAAAAIaXNBY3RpdmUAAAAABAAAAA0kdDAyMTg0NDIxOTE5CQAFFAAAAAIICQABkQAAAAIIBQAAAAFpAAAACHBheW1lbnRzAAAAAAAAAAAAAAAABmFtb3VudAgJAAGRAAAAAggFAAAAAWkAAAAIcGF5bWVudHMAAAAAAAAAAAAAAAAHYXNzZXRJZAQAAAAJcG10QW1vdW50CAUAAAANJHQwMjE4NDQyMTkxOQAAAAJfMQQAAAAKcG10QXNzZXRJZAgFAAAADSR0MDIxODQ0MjE5MTkAAAACXzIDCQAAZwAAAAIAAAAAAAAAAAAFAAAAGGVzdGltYXRlZEFtb3VudFRvUmVjZWl2ZQkAAAIAAAABCQABLAAAAAICAAAAK0VzdGltYXRlZCBhbW91bnQgbXVzdCBiZSBwb3NpdGl2ZS4gQWN0dWFsOiAJAAGkAAAAAQUAAAAYZXN0aW1hdGVkQW1vdW50VG9SZWNlaXZlAwkAAGYAAAACBQAAABJtaW5BbW91bnRUb1JlY2VpdmUFAAAAGGVzdGltYXRlZEFtb3VudFRvUmVjZWl2ZQkAAAIAAAABAgAAAC9NaW5pbWFsIGFtb3VudCBjYW4ndCBiZSBncmVhdGVyIHRoYW4gZXN0aW1hdGVkLgMJAQAAAAIhPQAAAAIJAAGQAAAAAQgFAAAAAWkAAAAIcGF5bWVudHMAAAAAAAAAAAEJAQAAAA90aHJvd09uZVBheW1lbnQAAAAAAwkBAAAAASEAAAABBQAAABBoYXNFbm91Z2hCYWxhbmNlCQAETgAAAAIJAARMAAAAAgkBAAAADlNjcmlwdFRyYW5zZmVyAAAAAwgFAAAAAWkAAAAGY2FsbGVyBQAAAAlwbXRBbW91bnQFAAAACnBtdEFzc2V0SWQFAAAAA25pbAkBAAAAEXN1c3BlbmRTdXNwaWNpb3VzAAAAAAMDCQEAAAACIT0AAAACBQAAAApwbXRBc3NldElkBQAAAAhhc3NldElkQQkBAAAAAiE9AAAAAgUAAAAKcG10QXNzZXRJZAUAAAAIYXNzZXRJZEIHCQEAAAALdGhyb3dBc3NldHMAAAAAAwkAAGYAAAACAAAAAAAAmJaABQAAAAlwbXRBbW91bnQJAAACAAAAAQIAAAAwT25seSBzd2FwIG9mIDEwLjAwMDAwMCBvciBtb3JlIHRva2VucyBpcyBhbGxvd2VkAwMJAABmAAAAAgUAAAAVZXhjaGFuZ2VSYXRpb0xpbWl0TWluCQAAawAAAAMFAAAABnNjYWxlOAUAAAASbWluQW1vdW50VG9SZWNlaXZlBQAAAAlwbXRBbW91bnQGCQAAZgAAAAIJAABrAAAAAwUAAAAGc2NhbGU4BQAAABhlc3RpbWF0ZWRBbW91bnRUb1JlY2VpdmUFAAAACXBtdEFtb3VudAUAAAAVZXhjaGFuZ2VSYXRpb0xpbWl0TWF4CQAAAgAAAAECAAAAHEluY29ycmVjdCBhcmdzIGFuZCBwbXQgcmF0aW8EAAAAC3NlbmRBc3NldElkAwkAAAAAAAACBQAAAApwbXRBc3NldElkBQAAAAhhc3NldElkQQUAAAAIYXNzZXRJZEIFAAAACGFzc2V0SWRBBAAAAAZhbW91bnQJAQAAABNjYWxjdWxhdGVTZW5kQW1vdW50AAAABAUAAAAYZXN0aW1hdGVkQW1vdW50VG9SZWNlaXZlBQAAABJtaW5BbW91bnRUb1JlY2VpdmUFAAAACXBtdEFtb3VudAUAAAAKcG10QXNzZXRJZAQAAAAQZ292ZXJuYW5jZVJld2FyZAkAAGsAAAADBQAAAAZhbW91bnQFAAAADWZlZUdvdmVybmFuY2UFAAAACWZlZVNjYWxlNgQAAAAOYW1vdW50TWludXNGZWUJAABrAAAAAwUAAAAGYW1vdW50CQAAZQAAAAIFAAAACWZlZVNjYWxlNgUAAAADZmVlBQAAAAlmZWVTY2FsZTYEAAAADSR0MDIzMjI1MjM0ODcDCQAAAAAAAAIFAAAACnBtdEFzc2V0SWQFAAAACGFzc2V0SWRBCQAFFAAAAAIJAABkAAAAAgUAAAAIYmFsYW5jZUEFAAAACXBtdEFtb3VudAkAAGUAAAACCQAAZQAAAAIFAAAACGJhbGFuY2VCBQAAAA5hbW91bnRNaW51c0ZlZQUAAAAQZ292ZXJuYW5jZVJld2FyZAkABRQAAAACCQAAZQAAAAIJAABlAAAAAgUAAAAIYmFsYW5jZUEFAAAADmFtb3VudE1pbnVzRmVlBQAAABBnb3Zlcm5hbmNlUmV3YXJkCQAAZAAAAAIFAAAACGJhbGFuY2VCBQAAAAlwbXRBbW91bnQEAAAAC25ld0JhbGFuY2VBCAUAAAANJHQwMjMyMjUyMzQ4NwAAAAJfMQQAAAALbmV3QmFsYW5jZUIIBQAAAA0kdDAyMzIyNTIzNDg3AAAAAl8yBAAAABNkQXBwVGhyZXNob2xkQW1vdW50CQAAawAAAAMJAABkAAAAAgUAAAALbmV3QmFsYW5jZUEFAAAAC25ld0JhbGFuY2VCBQAAAA1kQXBwVGhyZXNob2xkCQAAaAAAAAIAAAAAAAAAAAIFAAAAE2RBcHBUaHJlc2hvbGRTY2FsZTIDAwkAAGYAAAACBQAAABNkQXBwVGhyZXNob2xkQW1vdW50BQAAAAtuZXdCYWxhbmNlQQYJAABmAAAAAgUAAAATZEFwcFRocmVzaG9sZEFtb3VudAUAAAALbmV3QmFsYW5jZUIJAQAAAA50aHJvd1RocmVzaG9sZAAAAAMFAAAAE2RBcHBUaHJlc2hvbGRBbW91bnQFAAAAC25ld0JhbGFuY2VBBQAAAAtuZXdCYWxhbmNlQgQAAAANJHQwMjM3ODYyMzg1OQkBAAAADGdldEFzc2V0SW5mbwAAAAEFAAAACnBtdEFzc2V0SWQEAAAADXBtdFN0ckFzc2V0SWQIBQAAAA0kdDAyMzc4NjIzODU5AAAAAl8xBAAAAAxwbXRBc3NldE5hbWUIBQAAAA0kdDAyMzc4NjIzODU5AAAAAl8y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", "height": 3108037, "applicationStatus": "succeeded", "spentComplexity": 0 } View: original | compacted Prev: EjBT3rMGvfYtReKQ8WfT3VFiKxNz3x3ghFwqaXusYiuM Next: 23E2C29NFgPR5zpYCTXRNsrzRKRUUUDDX1wre9ErZVZY Diff:
OldNewDifferences
2121
2222 let j = "commission"
2323
24-let k = "commission_scale_delimiter"
24+let k = "invariant"
2525
26-let l = "invariant"
26+let l = "shutdown_cause"
2727
28-let m = "shutdown_cause"
28+let m = "staking_usdnnsbt_address"
2929
30-let n = "staking_usdnnsbt_address"
30+let n = "staking_eurn_address"
3131
32-let o = "staking_eurn_address"
32+let o = "admin_pub_1"
3333
34-let p = "admin_pub_1"
34+let p = "admin_pub_2"
3535
36-let q = "admin_pub_2"
36+let q = "admin_pub_3"
3737
38-let r = "admin_pub_3"
38+let r = "admin_invoke_pub"
3939
40-let s = Address(base58'3PHaNgomBkrvEL2QnuJarQVJa71wjw9qiqG')
40+let s = "money_box_address"
4141
4242 let t = Address(base58'3PEbqViERCoKnmcSULh6n2aiMvUdSQdCsom')
4343
5050 }
5151 else {
5252 let y = w
53- throw("Admin public key is empty")
53+ throw((v + "is empty"))
5454 }
5555 }
5656
5757
58-let z = u(p)
58+let z = u(o)
5959
60-let A = u(q)
60+let A = u(p)
6161
62-let B = u(r)
62+let B = u(q)
6363
64-let C = base58'EtVkT6ed8GtbUiVVEqdmEqsp2J4qbb3rre2HFgxeVYdg'
64+let C = u(r)
6565
66-let D = base58'Czn4yoAuUZCVCLJDRfskn8URfkwpknwBTZDbs1wFrY7h'
66+let D = Address(u(s))
6767
68-let E = Address(base58'3P6J84oH51DzY6xk2mT5TheXRbrCwBMxonp')
68+let E = Address(u(m))
6969
7070 let F = base58'DG2xFkPdDwKUoBkzGAhQtLpSGzfXLiCYPEzeKH2Ad24p'
7171
72-let G = base58'DUk2YTxhRoAqMJLus4G2b3fR8hMHVh6eiyFx5r29VR6t'
72+let G = [toBase58String(F)]
7373
74-let H = [toBase58String(F), toBase58String(G)]
74+let H = getBooleanValue(this, c)
7575
76-let I = Address(fromBase58String(valueOrErrorMessage(getString(t, n), "no usdn staking address")))
76+let I = getStringValue(this, d)
7777
78-let J = Address(fromBase58String(valueOrErrorMessage(getString(t, o), "no usdn staking address")))
78+let J = getStringValue(this, e)
7979
80-let K = getBooleanValue(this, c)
80+let K = if ((I == "WAVES"))
81+ then unit
82+ else fromBase58String(I)
8183
82-let L = getStringValue(this, d)
84+let L = if ((J == "WAVES"))
85+ then unit
86+ else fromBase58String(J)
8387
84-let M = getStringValue(this, e)
85-
86-let N = if ((L == "WAVES"))
87- then unit
88- else fromBase58String(L)
89-
90-let O = if ((M == "WAVES"))
91- then unit
92- else fromBase58String(M)
93-
94-let P = {
95- let w = N
88+let M = {
89+ let w = K
9690 if ($isInstanceOf(w, "ByteVector"))
9791 then {
98- let Q = w
99- value(assetInfo(Q)).name
92+ let N = w
93+ value(assetInfo(N)).name
10094 }
10195 else if ($isInstanceOf(w, "Unit"))
10296 then {
103- let R = w
97+ let O = w
10498 "WAVES"
10599 }
106100 else throw("Match error")
107101 }
108102
109-let S = {
110- let w = O
103+let P = {
104+ let w = L
111105 if ($isInstanceOf(w, "ByteVector"))
112106 then {
113- let Q = w
114- value(assetInfo(Q)).name
107+ let N = w
108+ value(assetInfo(N)).name
115109 }
116110 else if ($isInstanceOf(w, "Unit"))
117111 then {
118- let R = w
112+ let O = w
119113 "WAVES"
120114 }
121115 else throw("Match error")
122116 }
123117
124-let T = getIntegerValue(this, f)
118+let Q = getIntegerValue(this, f)
125119
126-let U = getIntegerValue(this, g)
120+let R = getIntegerValue(this, g)
127121
128-let V = fromBase58String(getStringValue(this, h))
122+let S = fromBase58String(getStringValue(this, h))
129123
130-let W = getIntegerValue(this, i)
124+let T = getIntegerValue(this, i)
131125
132-let X = getIntegerValue(this, l)
126+let U = getIntegerValue(this, k)
133127
134-let Y = 500
128+let V = getIntegerValue(this, j)
135129
136-let Z = 200
130+let W = fraction(V, 40, 100)
137131
138-let aa = 1000000
132+let X = 1000000
133+
134+let Y = 1000
135+
136+let Z = 100000000
137+
138+let aa = 10000000000000000
139139
140140 let ab = 1000
141141
142-let ac = 100000000
142+let ac = 8
143143
144-let ad = 1000000000000
144+let ad = 50
145145
146-let ae = 1000
146+let ae = 100
147147
148-let af = 8
148+let af = 90000000
149149
150-let ag = 50
150+let ag = 110000000
151151
152-let ah = 100
152+let ah = 50
153153
154-let ai = 90000000
154+let ai = 2
155155
156-let aj = 110000000
156+let aj = 4600000000000000
157157
158-let ak = 50
159-
160-let al = 2
161-
162-let am = 46000000
163-
164-func an (ao) = {
165- let w = ao
158+func ak (al) = {
159+ let w = al
166160 if ($isInstanceOf(w, "ByteVector"))
167161 then {
168- let Q = w
169- assetBalance(this, Q)
162+ let N = w
163+ assetBalance(this, N)
170164 }
171165 else if ($isInstanceOf(w, "Unit"))
172166 then {
173- let R = w
167+ let O = w
174168 wavesBalance(this).available
175169 }
176170 else throw("Match error")
177171 }
178172
179173
180-func ap (ao) = {
181- let aq = {
182- let w = ao
174+func am (al) = {
175+ let an = {
176+ let w = al
183177 if ($isInstanceOf(w, "ByteVector"))
184178 then {
185- let ar = w
186- if ((ar == F))
187- then getInteger(I, ((("rpd_balance_" + toBase58String(ar)) + "_") + toString(this)))
188- else if ((ar == G))
189- then getInteger(J, ((("%s%s%s__stakingBalance__" + toBase58String(ar)) + "__") + toString(this)))
190- else 0
179+ let ao = w
180+ if ((ao == F))
181+ then getInteger(E, ((("rpd_balance_" + toBase58String(ao)) + "_") + toString(this)))
182+ else 0
191183 }
192184 else if ($isInstanceOf(w, "Unit"))
193185 then 0
194186 else throw("Match error")
195187 }
196- let w = aq
188+ let w = an
197189 if ($isInstanceOf(w, "Int"))
198190 then {
199- let as = w
200- as
191+ let ap = w
192+ ap
201193 }
202194 else 0
203195 }
204196
205197
206-let at = ap(N)
198+let aq = am(K)
207199
208-let au = ap(O)
200+let ar = am(L)
209201
210-let av = (T - at)
202+let as = (Q - aq)
211203
212-let aw = (U - au)
204+let at = (R - ar)
213205
214-let ax = (an(N) + at)
206+let au = (ak(K) + aq)
215207
216-let ay = (an(O) + au)
208+let av = (ak(L) + ar)
217209
218-let az = if ((ax >= T))
219- then (ay >= U)
210+let aw = if ((au >= Q))
211+ then (av >= R)
220212 else false
221213
222-func aA (aB,aC) = (((fraction(ad, aB, aC) + fraction(ad, aC, aB)) / 2) / 10000)
214+func ax (ay,az) = ((fraction(aa, ay, az) + fraction(aa, az, ay)) / 2)
223215
224216
225-func aD (aB,aC) = {
226- let aE = aA(aB, aC)
227- (fraction((aB + aC), ac, pow(aE, af, ak, al, af, CEILING)) + (2 * fraction(pow(fraction(aB, aC, ac), 0, 5, 1, (af / 2), DOWN), pow((aE - am), af, ak, al, af, DOWN), ac)))
217+func aA (ay,az) = {
218+ let aB = ax(ay, az)
219+ (fraction((ay + az), aa, pow(aB, ac, ah, ai, ac, CEILING)) + (2 * fraction(toInt(pow(fraction(toBigInt(ay), toBigInt(az), toBigInt(Z)), 0, toBigInt(5), 1, (ac / 2), DOWN)), pow((aB - aj), ac, ah, ai, ac, DOWN), Z)))
228220 }
229221
230222
231-func aF (aG,aH,aI,aJ) = {
232- let aK = (ac - ((ac * 1) / 10000000))
233- let aL = (aG - aH)
234- let aB = (T + aI)
235- let aC = (U + aI)
236- let aM = if ((aJ == N))
237- then aD(aB, (U - aG))
238- else if ((aJ == O))
239- then aD((T - aG), aC)
240- else throw("Wrong asset in payment")
241- let aN = fraction(ac, X, aM)
242- func aO (aP,aQ) = if ((aP == -1))
223+func aC (aD,aE,aF,aG) = {
224+ let aH = (aa - ((aa * 1) / 10000000))
225+ let aI = (aD - aE)
226+ let ay = (Q + aF)
227+ let az = (R + aF)
228+ func aJ (aK,aL) = if ((aK._1 == -1))
243229 then {
244- let aR = (aG - ((aQ * aL) / 5))
245- let aS = if ((aJ == N))
246- then aD(aB, (U - aR))
247- else aD((T - aR), aC)
248- if ((aS > X))
249- then aR
250- else -1
230+ let aM = (aD - (((aL * aI) / 3) / Y))
231+ let aN = if ((aG == K))
232+ then aA(ay, (R - aM))
233+ else aA((Q - aM), az)
234+ if ((aN > U))
235+ then $Tuple2(aM, aN)
236+ else $Tuple2(-1, 0)
251237 }
252- else aP
238+ else aK
253239
254- let aT = {
255- let aU = [1, 2, 3, 4, 5]
256- let aV = size(aU)
257- let aW = -1
258- func aX (aY,aZ) = if ((aZ >= aV))
259- then aY
260- else aO(aY, aU[aZ])
240+ let aO = aJ($Tuple2(-1, 0), 3000)
241+ if ((0 > aO._1))
242+ then throw("Price is worse than minReceived")
243+ else {
244+ let aP = if ((aG == K))
245+ then aA(ay, (R - aD))
246+ else if ((aG == L))
247+ then aA((Q - aD), az)
248+ else throw("Wrong asset in payment")
249+ if ((U > aP))
250+ then if ((aH >= fraction(aa, U, aP)))
251+ then throw("The requested price is too not profitable for user")
252+ else {
253+ let aQ = {
254+ let aR = [25, 200, 500]
255+ let aS = size(aR)
256+ let aT = $Tuple2(-1, 0)
257+ func aU (aV,aW) = if ((aW >= aS))
258+ then aV
259+ else aJ(aV, aR[aW])
261260
262- func ba (aY,aZ) = if ((aZ >= aV))
263- then aY
264- else throw("List size exceeds 5")
261+ func aX (aV,aW) = if ((aW >= aS))
262+ then aV
263+ else throw("List size exceeds 3")
265264
266- ba(aX(aX(aX(aX(aX(aW, 0), 1), 2), 3), 4), 5)
267- }
268- if ((0 > aT))
269- then throw("something went wrong while working with amountToSend")
270- else if (if ((aN > aK))
271- then (aM > X)
272- else false)
273- then aG
274- else aT
265+ aX(aU(aU(aU(aT, 0), 1), 2), 3)
266+ }
267+ if ((0 > aQ._1))
268+ then aO._1
269+ else aQ._1
270+ }
271+ else {
272+ let aQ = {
273+ let aR = [-500, -200, -25]
274+ let aS = size(aR)
275+ let aT = $Tuple2(-1, 0)
276+ func aU (aV,aW) = if ((aW >= aS))
277+ then aV
278+ else aJ(aV, aR[aW])
279+
280+ func aX (aV,aW) = if ((aW >= aS))
281+ then aV
282+ else throw("List size exceeds 3")
283+
284+ aX(aU(aU(aU(aT, 0), 1), 2), 3)
285+ }
286+ let aY = if ((0 > aQ._1))
287+ then $Tuple2(aD, aP)
288+ else aQ
289+ if ((aH >= fraction(aa, U, aY._2)))
290+ then throw("The requested price is too not profitable for user")
291+ else aY._1
292+ }
293+ }
275294 }
276295
277296
278-func bb (ao) = {
279- let w = ao
297+func aZ (al) = {
298+ let w = al
280299 if ($isInstanceOf(w, "ByteVector"))
281300 then {
282- let Q = w
283- let bc = toBase58String(Q)
284- let bd = valueOrErrorMessage(assetInfo(Q), (("Asset " + bc) + " doesn't exist"))
285- $Tuple3(bc, bd.name, bd.decimals)
301+ let N = w
302+ let ba = toBase58String(N)
303+ let bb = valueOrErrorMessage(assetInfo(N), (("Asset " + ba) + " doesn't exist"))
304+ $Tuple3(ba, bb.name, bb.decimals)
286305 }
287306 else if ($isInstanceOf(w, "Unit"))
288307 then {
289- let R = w
308+ let O = w
290309 $Tuple3("WAVES", "WAVES", 8)
291310 }
292311 else throw("Match error")
293312 }
294313
295314
296-func be (bf) = [BooleanEntry(c, false), StringEntry(m, bf)]
315+func bc (bd) = [BooleanEntry(c, false), StringEntry(l, bd)]
297316
298317
299-func bg () = throw("DApp is already active")
318+func be () = throw("DApp is already active")
300319
301320
302-func bh () = throw("DApp is inactive at this moment")
321+func bf () = if (H)
322+ then unit
323+ else throw("DApp is inactive at this moment")
303324
304325
305-func bi () = throw("Only admin can call this function")
326+func bg (ap) = if (containsElement([z, A, B], ap.callerPublicKey))
327+ then unit
328+ else throw("Only admin can call this function")
306329
307330
308-func bj () = throw(((("Incorrect assets attached. Expected: " + L) + " and ") + M))
331+func bh () = throw(((("Incorrect assets attached. Expected: " + I) + " and ") + J))
309332
310333
311-func bk (bl,bm,bn) = throw(((((((((("New balance in assets of the DApp is less than threshold " + toString(bl)) + ": ") + toString(bm)) + " ") + P) + ", ") + toString(bn)) + " ") + S))
334+func bi () = throw("One attached payment expected")
312335
313336
314-func bo () = be(((((((((((((((("Suspicious state. Actual balances: " + toString(T)) + " ") + P) + ", ") + toString(U)) + " ") + S) + ". State: ") + toString(an(N))) + " ") + P) + ", ") + toString(an(O))) + " ") + S))
337+func bj (bk,bl,bm) = throw(((((((((("New balance in assets of the DApp is less than threshold " + toString(bk)) + ": ") + toString(bl)) + " ") + M) + ", ") + toString(bm)) + " ") + P))
315338
316339
317-func bp (bq,ao) = if (bq)
318- then if ((ao == F))
319- then $Tuple2("lockNeutrino", I)
320- else $Tuple2("startStaking", J)
321- else if ((ao == F))
322- then $Tuple2("unlockNeutrino", I)
323- else $Tuple2("stopStaking", J)
340+func bn () = bc(((((((((((((((("Suspicious state. Actual balances: " + toString(Q)) + " ") + M) + ", ") + toString(R)) + " ") + P) + ". State: ") + toString(ak(K))) + " ") + M) + ", ") + toString(ak(L))) + " ") + P))
324341
325342
326-func br (bq,bs,ao) = if (bq)
343+func bo (bp,al) = if (bp)
344+ then $Tuple2("lockNeutrino", E)
345+ else $Tuple2("unlockNeutrino", E)
346+
347+
348+func bq (bp,br,al) = if (bp)
327349 then {
328- let bt = bp(bq, ao)
329- let bu = bt._1
330- let bv = bt._2
331- $Tuple4(bu, bv, nil, [AttachedPayment(ao, bs)])
350+ let bs = bo(bp, al)
351+ let bt = bs._1
352+ let bu = bs._2
353+ $Tuple4(bt, bu, nil, [AttachedPayment(al, br)])
332354 }
333355 else {
334- let bw = bp(bq, ao)
335- let bu = bw._1
336- let bv = bw._2
337- $Tuple4(bu, bv, [bs, toBase58String(ao)], nil)
356+ let bv = bo(bp, al)
357+ let bt = bv._1
358+ let bu = bv._2
359+ $Tuple4(bt, bu, [br, toBase58String(al)], nil)
338360 }
339361
340362
341-@Callable(as)
363+@Callable(ap)
342364 func init () = {
343- let bx = $Tuple2(as.payments[0].amount, as.payments[0].assetId)
344- let by = bx._1
345- let bz = bx._2
346- let bA = $Tuple2(as.payments[1].amount, as.payments[1].assetId)
347- let bB = bA._1
348- let bC = bA._2
349- let bD = bb(bz)
350- let bE = bD._1
351- let bF = bD._2
352- let bG = bD._3
353- let bH = bb(bC)
354- let bI = bH._1
355- let bJ = bH._2
356- let bK = bH._3
365+ let bw = $Tuple2(ap.payments[0].amount, ap.payments[0].assetId)
366+ let bx = bw._1
367+ let by = bw._2
368+ let bz = $Tuple2(ap.payments[1].amount, ap.payments[1].assetId)
369+ let bA = bz._1
370+ let bB = bz._2
371+ let bC = aZ(by)
372+ let bD = bC._1
373+ let bE = bC._2
374+ let bF = bC._3
375+ let bG = aZ(bB)
376+ let bH = bG._1
377+ let bI = bG._2
378+ let bJ = bG._3
357379 if (isDefined(getBoolean(this, c)))
358- then bg()
359- else if ((bz == bC))
380+ then be()
381+ else if ((by == bB))
360382 then throw("Assets must be different")
361383 else {
362- let bL = ((("s" + take(bF, 7)) + "_") + take(bJ, 7))
363- let bM = ((((("ShareToken of SwopFi protocol for " + bF) + " and ") + bJ) + " at address ") + toString(this))
364- let bN = ((bG + bK) / 2)
365- let bO = fraction(pow(by, bG, 5, 1, bG, DOWN), pow(bB, bK, 5, 1, bK, DOWN), pow(10, 0, bN, 0, 0, DOWN))
366- let bP = Issue(bL, bM, bO, bN, true)
367- let bQ = calculateAssetId(bP)
368- let bR = aD(by, bB)
369- let bS = if (containsElement(H, bE))
370- then invoke(this, "stakeUnstake", [true, by, bE], nil)
384+ let bK = ((("s" + take(bE, 7)) + "_") + take(bI, 7))
385+ let bL = ((((("ShareToken of SwopFi protocol for " + bE) + " and ") + bI) + " at address ") + toString(this))
386+ let bM = ((bF + bJ) / 2)
387+ let bN = fraction(pow(bx, bF, 5, 1, bF, DOWN), pow(bA, bJ, 5, 1, bJ, DOWN), pow(10, 0, bM, 0, 0, DOWN))
388+ let bO = Issue(bK, bL, bN, bM, true)
389+ let bP = calculateAssetId(bO)
390+ let bQ = aA(bx, bA)
391+ let bR = if (containsElement(G, bD))
392+ then invoke(this, "stakeUnstake", [true, bx, bD], nil)
371393 else 0
372- if ((bS == bS))
394+ if ((bR == bR))
373395 then {
374- let bT = if (containsElement(H, bI))
375- then invoke(this, "stakeUnstake", [true, bB, bI], nil)
396+ let bS = if (containsElement(G, bH))
397+ then invoke(this, "stakeUnstake", [true, bA, bH], nil)
376398 else 0
377- if ((bT == bT))
378- then [StringEntry(b, a), BooleanEntry(c, true), StringEntry(d, bE), StringEntry(e, bI), IntegerEntry(f, by), IntegerEntry(g, bB), IntegerEntry(l, bR), IntegerEntry(j, Y), IntegerEntry(k, aa), bP, StringEntry(h, toBase58String(bQ)), IntegerEntry(i, bO), ScriptTransfer(as.caller, bO, bQ)]
399+ if ((bS == bS))
400+ then [StringEntry(b, a), BooleanEntry(c, true), StringEntry(d, bD), StringEntry(e, bH), IntegerEntry(f, bx), IntegerEntry(g, bA), IntegerEntry(k, bQ), IntegerEntry(j, getIntegerValue(t, "base_fee_flat")), bO, StringEntry(h, toBase58String(bP)), IntegerEntry(i, bN), ScriptTransfer(ap.caller, bN, bP)]
379401 else throw("Strict value is not equal to itself.")
380402 }
381403 else throw("Strict value is not equal to itself.")
384406
385407
386408
387-@Callable(as)
388-func replenishWithTwoTokens (bU) = {
389- let bz = as.payments[0].assetId
390- let bC = as.payments[1].assetId
391- let by = as.payments[0].amount
392- let bB = as.payments[1].amount
393- let bV = bb(bz)
394- let bE = bV._1
395- let bF = bV._2
396- let bG = bV._3
397- let bW = bb(bC)
398- let bI = bW._1
399- let bJ = bW._2
400- let bK = bW._3
401- let bX = fraction(fraction(ac, T, by), ab, fraction(ac, U, bB))
402- let bY = fraction(ac, by, T)
403- let bZ = fraction(ac, bB, U)
404- let ca = fraction(min([bY, bZ]), W, ac)
405- let bR = aD((T + by), (U + bB))
406- if (!(K))
407- then bh()
408- else if (if ((0 > bU))
409+@Callable(ap)
410+func replenishWithTwoTokens () = valueOrElse(bf(), {
411+ let by = ap.payments[0].assetId
412+ let bB = ap.payments[1].assetId
413+ let bT = fraction(Z, ap.payments[0].amount, Q)
414+ let bU = fraction(Z, ap.payments[1].amount, R)
415+ let bV = aZ(by)
416+ let bD = bV._1
417+ let bE = bV._2
418+ let bF = bV._3
419+ let bW = aZ(bB)
420+ let bH = bW._1
421+ let bI = bW._2
422+ let bJ = bW._3
423+ let bX = if ((bU > bT))
424+ then {
425+ let bY = fraction(R, bT, Z, CEILING)
426+ $Tuple5(ap.payments[0].amount, bY, (ap.payments[1].amount - bY), bB, bT)
427+ }
428+ else {
429+ let bY = fraction(Q, bU, Z, CEILING)
430+ $Tuple5(bY, ap.payments[1].amount, (ap.payments[0].amount - bY), by, bU)
431+ }
432+ let bx = bX._1
433+ let bA = bX._2
434+ let bZ = bX._3
435+ let ca = bX._4
436+ let cb = bX._5
437+ let cc = fraction(cb, T, Z)
438+ if ((size(ap.payments) != 2))
439+ then throw("Two attached assets expected")
440+ else if (if ((by != K))
409441 then true
410- else (bU > 10))
411- then throw("Slippage tolerance must be <= 1%")
412- else if ((size(as.payments) != 2))
413- then throw("Two attached assets expected")
414- else if (if ((bz != N))
415- then true
416- else (bC != O))
417- then bj()
418- else if (if ((((ab * (ae - bU)) / ae) > bX))
419- then true
420- else (bX > ((ab * (ae + bU)) / ae)))
421- then throw("Incorrect assets amount: amounts must have the contract ratio")
422- else if ((ca == 0))
423- then throw("Too small amount to replenish")
424- else if (!(az))
425- then ([ScriptTransfer(as.caller, by, bz), ScriptTransfer(as.caller, bB, bC)] ++ bo())
426- else {
427- let bS = if (containsElement(H, bE))
428- then invoke(this, "stakeUnstake", [true, by, bE], nil)
442+ else (bB != L))
443+ then bh()
444+ else if ((cc == 0))
445+ then throw("Too small amount to replenish")
446+ else if ((0 > bZ))
447+ then throw("Change < 0")
448+ else if (!(aw))
449+ then ([ScriptTransfer(ap.caller, bx, by), ScriptTransfer(ap.caller, bA, bB)] ++ bn())
450+ else {
451+ let bR = if (containsElement(G, bD))
452+ then invoke(this, "stakeUnstake", [true, bx, bD], nil)
453+ else 0
454+ if ((bR == bR))
455+ then {
456+ let bS = if (containsElement(G, bH))
457+ then invoke(this, "stakeUnstake", [true, bA, bH], nil)
429458 else 0
430459 if ((bS == bS))
431- then {
432- let bT = if (containsElement(H, bI))
433- then invoke(this, "stakeUnstake", [true, bB, bI], nil)
434- else 0
435- if ((bT == bT))
436- then [IntegerEntry(f, (T + by)), IntegerEntry(g, (U + bB)), IntegerEntry(i, (W + ca)), IntegerEntry(l, bR), Reissue(V, ca, true), ScriptTransfer(as.caller, ca, V)]
437- else throw("Strict value is not equal to itself.")
438- }
460+ then [IntegerEntry(f, (Q + bx)), IntegerEntry(g, (R + bA)), IntegerEntry(i, (T + cc)), IntegerEntry(k, aA((Q + bx), (R + bA))), Reissue(S, cc, true), ScriptTransfer(ap.caller, cc, S), ScriptTransfer(ap.caller, bZ, ca)]
439461 else throw("Strict value is not equal to itself.")
440462 }
441- }
463+ else throw("Strict value is not equal to itself.")
464+ }
465+ })
442466
443467
444468
445-@Callable(as)
446-func replenishWithOneToken (cb,cc) = {
447- let cd = $Tuple2(as.payments[0].amount, as.payments[0].assetId)
448- let ce = cd._1
449- let cf = cd._2
450- let cg = bb(cf)
451- let ch = cg._1
452- let ci = cg._2
453- let cj = cg._3
454- let ck = 5000000
455- let cl = 50000000
456- let cm = if ((cl > ce))
469+@Callable(ap)
470+func replenishWithOneToken (cd,ce) = valueOrElse(bf(), {
471+ let cf = $Tuple2(ap.payments[0].amount, ap.payments[0].assetId)
472+ let cg = cf._1
473+ let ch = cf._2
474+ let ci = aZ(ch)
475+ let cj = ci._1
476+ let ck = ci._2
477+ let cl = ci._3
478+ let cm = 5000000
479+ let cn = 50000000
480+ let co = if ((cn > cg))
457481 then 100000
458482 else 1
459- let cn = (ac - ((ac * cm) / 10000000))
460- let co = (ac + ((ac * cm) / 10000000))
461- let cp = (ac - ((ac * 1) / 10000000))
462- if (!(K))
463- then bh()
464- else if ((ck > ce))
465- then throw((((("Payment amount " + toString(ce)) + " does not exceed the minimum amount of ") + toString(ck)) + " tokens"))
466- else if ((size(as.payments) != 1))
467- then throw("One attached payment expected")
468- else if (!(az))
469- then ([ScriptTransfer(as.caller, ce, cf)] ++ bo())
470- else if (if ((cf != N))
471- then (cf != O)
483+ let cp = (Z - ((Z * co) / 10000000))
484+ let cq = (Z + ((Z * co) / 10000000))
485+ let cr = (Z - ((Z * 1) / 10000000))
486+ if ((cm > cg))
487+ then throw((((("Payment amount " + toString(cg)) + " does not exceed the minimum amount of ") + toString(cm)) + " tokens"))
488+ else if ((size(ap.payments) != 1))
489+ then bi()
490+ else if (!(aw))
491+ then ([ScriptTransfer(ap.caller, cg, ch)] ++ bn())
492+ else if (if ((ch != K))
493+ then (ch != L)
494+ else false)
495+ then bh()
496+ else {
497+ let cs = if ((ch == K))
498+ then $Tuple6((cg - cd), ce, (Q + cd), (R - ce), (Q + cg), R)
499+ else $Tuple6(ce, (cg - cd), (Q - ce), (R + cd), Q, (R + cg))
500+ let ct = cs._1
501+ let cu = cs._2
502+ let cv = cs._3
503+ let cw = cs._4
504+ let cx = cs._5
505+ let cy = cs._6
506+ let cz = aA(cv, cw)
507+ let cA = (fraction(aa, cv, cw) / fraction(Z, ct, cu))
508+ let cB = fraction((cx + cy), ad, (2 * ae))
509+ if (if ((cr >= fraction(Z, U, cz)))
510+ then true
511+ else (U > cz))
512+ then throw("Incorrect virtualSwapTokenPay or virtualSwapTokenGet value")
513+ else if (if ((cp > cA))
514+ then true
515+ else (cA > cq))
516+ then throw("Swap with virtualSwapTokenPay and virtualSwapTokenGet is possible, but ratio after virtual swap is incorrect")
517+ else if (if ((cB > cx))
518+ then true
519+ else (cB > cy))
520+ then bj(cB, cx, cy)
521+ else {
522+ let bT = fraction(ct, Z, cv)
523+ let bU = fraction(cu, Z, cw)
524+ let cc = fraction(min([bT, bU]), T, Z)
525+ let cC = fraction(cc, (X - (V / 2)), X)
526+ let cD = fraction(cc, (W / 2), X)
527+ let cE = fraction(cD, Q, T)
528+ let cF = fraction(cD, R, T)
529+ let cG = if ((cj == I))
530+ then $Tuple3((cg - cE), cF, J)
531+ else $Tuple3((cg - cF), cE, I)
532+ let cH = cG._1
533+ let cI = cG._2
534+ let cJ = cG._3
535+ let bR = if (containsElement(G, cj))
536+ then invoke(this, "stakeUnstake", [true, cH, cj], nil)
537+ else 0
538+ if ((bR == bR))
539+ then {
540+ let bS = if (containsElement(G, cJ))
541+ then invoke(this, "stakeUnstake", [false, cI, cJ], nil)
542+ else 0
543+ if ((bS == bS))
544+ then [Reissue(S, cC, true), ScriptTransfer(ap.caller, cC, S), ScriptTransfer(D, cE, K), ScriptTransfer(D, cF, L), IntegerEntry(f, (cx - cE)), IntegerEntry(g, (cy - cF)), IntegerEntry(i, (T + cC)), IntegerEntry(k, aA((cx - cE), (cy - cF)))]
545+ else throw("Strict value is not equal to itself.")
546+ }
547+ else throw("Strict value is not equal to itself.")
548+ }
549+ }
550+ })
551+
552+
553+
554+@Callable(ap)
555+func withdraw () = valueOrElse(bf(), {
556+ let cK = $Tuple2(ap.payments[0].amount, ap.payments[0].assetId)
557+ let cg = cK._1
558+ let ch = cK._2
559+ let cL = fraction(cg, Q, T)
560+ let cM = fraction(cg, R, T)
561+ let bQ = aA((Q - cL), (R - cM))
562+ if ((size(ap.payments) != 1))
563+ then bi()
564+ else if ((ch != S))
565+ then throw(("Incorrect asset attached. Expected: " + toBase58String(S)))
566+ else if (!(aw))
567+ then ([ScriptTransfer(ap.caller, cg, ch)] ++ bn())
568+ else {
569+ let bR = if (containsElement(G, I))
570+ then invoke(this, "stakeUnstake", [false, cL, I], nil)
571+ else 0
572+ if ((bR == bR))
573+ then {
574+ let bS = if (containsElement(G, J))
575+ then invoke(this, "stakeUnstake", [false, cM, J], nil)
576+ else 0
577+ if ((bS == bS))
578+ then [IntegerEntry(f, (Q - cL)), IntegerEntry(g, (R - cM)), IntegerEntry(i, (T - cg)), IntegerEntry(k, bQ), Burn(S, cg), ScriptTransfer(ap.caller, cL, K), ScriptTransfer(ap.caller, cM, L)]
579+ else throw("Strict value is not equal to itself.")
580+ }
581+ else throw("Strict value is not equal to itself.")
582+ }
583+ })
584+
585+
586+
587+@Callable(ap)
588+func exchange (cN,cO) = valueOrElse(bf(), {
589+ let cP = $Tuple2(ap.payments[0].amount, ap.payments[0].assetId)
590+ let cg = cP._1
591+ let ch = cP._2
592+ if ((0 >= cN))
593+ then throw(("Estimated amount must be positive. Actual: " + toString(cN)))
594+ else if ((cO > cN))
595+ then throw("Minimal amount can't be greater than estimated.")
596+ else if ((size(ap.payments) != 1))
597+ then bi()
598+ else if (!(aw))
599+ then ([ScriptTransfer(ap.caller, cg, ch)] ++ bn())
600+ else if (if ((ch != K))
601+ then (ch != L)
472602 else false)
473- then bj()
474- else {
475- let cq = if ((cf == N))
476- then $Tuple7((ce - cb), cc, (T + cb), (U - cc), aD((T + ce), U), (T + ce), U)
477- else $Tuple7(cc, (ce - cb), (T - cc), (U + cb), aD(T, (U + ce)), T, (U + ce))
478- let cr = cq._1
479- let cs = cq._2
480- let ct = cq._3
481- let cu = cq._4
482- let bR = cq._5
483- let cv = cq._6
484- let cw = cq._7
485- let cx = if ((cf == N))
486- then IntegerEntry(f, cv)
487- else IntegerEntry(g, cw)
488- let aM = aD(ct, cu)
489- let aN = fraction(ac, X, aM)
490- let cy = (fraction((ac * ac), ct, cu) / fraction(ac, cr, cs))
491- let cz = fraction((cv + cw), ag, (2 * ah))
492- if (if ((cp >= aN))
603+ then bh()
604+ else if ((10000000 > cg))
605+ then throw("Only swap of 10.000000 or more tokens is allowed")
606+ else if (if ((af > fraction(Z, cO, cg)))
493607 then true
494- else (X > aM))
495- then throw("Incorrect virtualSwapTokenPay or virtualSwapTokenGet value")
496- else if (if ((cn > cy))
497- then true
498- else (cy > co))
499- then throw("Swap with virtualSwapTokenPay and virtualSwapTokenGet is possible, but ratio after virtual swap is incorrect")
500- else if (if ((cz > cv))
608+ else (fraction(Z, cN, cg) > ag))
609+ then throw("Incorrect args and pmt ratio")
610+ else {
611+ let cQ = if ((ch == K))
612+ then L
613+ else K
614+ let br = aC(cN, cO, cg, ch)
615+ let cR = fraction(br, W, X)
616+ let cS = fraction(br, (X - V), X)
617+ let cT = if ((ch == K))
618+ then $Tuple2((Q + cg), ((R - cS) - cR))
619+ else $Tuple2(((Q - cS) - cR), (R + cg))
620+ let cx = cT._1
621+ let cy = cT._2
622+ let cB = fraction((cx + cy), ad, (2 * ae))
623+ if (if ((cB > cx))
501624 then true
502- else (cz > cw))
503- then bk(cz, cv, cw)
625+ else (cB > cy))
626+ then bj(cB, cx, cy)
504627 else {
505- let bS = if (containsElement(H, ch))
506- then invoke(this, "stakeUnstake", [true, ce, ch], nil)
628+ let cU = aZ(ch)
629+ let cj = cU._1
630+ let ck = cU._2
631+ let cl = cU._3
632+ let cV = aZ(cQ)
633+ let cW = cV._1
634+ let cX = cV._2
635+ let cY = cV._3
636+ let bR = if (containsElement(G, cj))
637+ then invoke(this, "stakeUnstake", [true, cg, cj], nil)
507638 else 0
508- if ((bS == bS))
639+ if ((bR == bR))
509640 then {
510- let bY = fraction(cr, ac, ct)
511- let bZ = fraction(cs, ac, cu)
512- let ca = fraction(min([bY, bZ]), W, ac)
513-[Reissue(V, ca, true), ScriptTransfer(as.caller, ca, V), IntegerEntry(i, (W + ca)), cx, IntegerEntry(l, bR)]
641+ let bS = if (containsElement(G, cW))
642+ then invoke(this, "stakeUnstake", [false, (cS + cR), cW], nil)
643+ else 0
644+ if ((bS == bS))
645+ then $Tuple2([IntegerEntry(f, cx), IntegerEntry(g, cy), IntegerEntry(k, aA(cx, cy)), ScriptTransfer(ap.caller, cS, cQ), ScriptTransfer(D, cR, cQ)], $Tuple2(cS, cQ))
646+ else throw("Strict value is not equal to itself.")
514647 }
515648 else throw("Strict value is not equal to itself.")
516649 }
517- }
518- }
650+ }
651+ })
519652
520653
521654
522-@Callable(as)
523-func withdraw () = {
524- let cA = $Tuple2(as.payments[0].amount, as.payments[0].assetId)
525- let ce = cA._1
526- let cf = cA._2
527- let cB = fraction(ce, T, W)
528- let cC = fraction(ce, U, W)
529- let bR = aD((T - cB), (U - cC))
530- if (!(K))
531- then bh()
532- else if ((size(as.payments) != 1))
533- then throw("One attached payment expected")
534- else if ((cf != V))
535- then throw(("Incorrect asset attached. Expected: " + toBase58String(V)))
536- else if (!(az))
537- then ([ScriptTransfer(as.caller, ce, cf)] ++ bo())
538- else {
539- let bS = if (containsElement(H, L))
540- then invoke(this, "stakeUnstake", [false, cB, L], nil)
541- else 0
542- if ((bS == bS))
543- then {
544- let bT = if (containsElement(H, M))
545- then invoke(this, "stakeUnstake", [false, cC, M], nil)
546- else 0
547- if ((bT == bT))
548- then [IntegerEntry(f, (T - cB)), IntegerEntry(g, (U - cC)), IntegerEntry(i, (W - ce)), IntegerEntry(l, bR), Burn(V, ce), ScriptTransfer(as.caller, cB, N), ScriptTransfer(as.caller, cC, O)]
549- else throw("Strict value is not equal to itself.")
550- }
551- else throw("Strict value is not equal to itself.")
552- }
553- }
655+@Callable(ap)
656+func shutdown () = valueOrElse(bg(ap), if (!(H))
657+ then throw(("DApp is already suspended. Cause: " + valueOrElse(getString(this, l), "the cause wasn't specified")))
658+ else bc("Paused by admin"))
554659
555660
556661
557-@Callable(as)
558-func exchange (cD,cE) = {
559- let cF = $Tuple2(as.payments[0].amount, as.payments[0].assetId)
560- let ce = cF._1
561- let cf = cF._2
562- if (!(K))
563- then bh()
564- else if ((0 >= cD))
565- then throw(("Estimated amount must be positive. Actual: " + toString(cD)))
566- else if ((cE > cD))
567- then throw(((("Minimal amount can't be greater than estimated. Estimated: " + toString(cD)) + ". Minimal: ") + toString(cE)))
568- else if ((size(as.payments) != 1))
569- then throw("One attached payment expected")
570- else if (!(az))
571- then ([ScriptTransfer(as.caller, ce, cf)] ++ bo())
572- else if (if ((cf != N))
573- then (cf != O)
574- else false)
575- then bj()
576- else if ((10000000 > ce))
577- then throw("Only swap of 10.000000 or more tokens is allowed")
578- else if (if ((ai > fraction(ac, cE, ce)))
579- then true
580- else (fraction(ac, cD, ce) > aj))
581- then throw("Incorrect args and pmt ratio")
582- else {
583- let cG = if ((cf == N))
584- then O
585- else N
586- let bs = aF(cD, cE, ce, cf)
587- let cH = fraction(bs, Z, aa)
588- let cI = fraction(bs, (aa - Y), aa)
589- let cJ = if ((cf == N))
590- then $Tuple2((T + ce), ((U - cI) - cH))
591- else $Tuple2(((T - cI) - cH), (U + ce))
592- let cv = cJ._1
593- let cw = cJ._2
594- let cz = fraction((cv + cw), ag, (2 * ah))
595- if (if ((cz > cv))
596- then true
597- else (cz > cw))
598- then bk(cz, cv, cw)
599- else {
600- let cK = bb(cf)
601- let ch = cK._1
602- let ci = cK._2
603- let cj = cK._3
604- let cL = bb(cG)
605- let cM = cL._1
606- let cN = cL._2
607- let cO = cL._3
608- let bS = if (containsElement(H, ch))
609- then invoke(this, "stakeUnstake", [true, ce, ch], nil)
610- else 0
611- if ((bS == bS))
612- then {
613- let bT = if (containsElement(H, cM))
614- then invoke(this, "stakeUnstake", [false, (cI + cH), cM], nil)
615- else 0
616- if ((bT == bT))
617- then [IntegerEntry(f, cv), IntegerEntry(g, cw), IntegerEntry(l, aD(cv, cw)), ScriptTransfer(as.caller, cI, cG), ScriptTransfer(E, cH, cG)]
618- else throw("Strict value is not equal to itself.")
619- }
620- else throw("Strict value is not equal to itself.")
621- }
622- }
623- }
662+@Callable(ap)
663+func activate () = valueOrElse(bg(ap), if (H)
664+ then be()
665+ else [BooleanEntry(c, true), DeleteEntry(l)])
624666
625667
626668
627-@Callable(as)
628-func shutdown () = if (!(K))
629- then throw(("DApp is already suspended. Cause: " + valueOrElse(getString(this, m), "the cause wasn't specified")))
630- else if (!(containsElement([z, A, B, C], as.callerPublicKey)))
631- then bi()
632- else be("Paused by admin")
669+@Callable(ap)
670+func takeIntoAccountExtraFunds () = valueOrElse(bf(), {
671+ let cZ = (au - Q)
672+ let da = (av - R)
673+ let cz = aA((Q + cZ), (R + da))
674+ if ((ap.caller != D))
675+ then throw("Only the money box can call this function")
676+ else if (if ((0 > cZ))
677+ then true
678+ else (0 > da))
679+ then bc("Enroll amount negative")
680+ else if (if ((cZ == 0))
681+ then (da == 0)
682+ else false)
683+ then throw("No money to take")
684+ else {
685+ let bR = if (if (containsElement(G, I))
686+ then (cZ > 0)
687+ else false)
688+ then invoke(this, "stakeUnstake", [true, cZ, I], nil)
689+ else 0
690+ if ((bR == bR))
691+ then {
692+ let bS = if (if (containsElement(G, J))
693+ then (da > 0)
694+ else false)
695+ then invoke(this, "stakeUnstake", [true, da, J], nil)
696+ else 0
697+ if ((bS == bS))
698+ then [IntegerEntry(k, cz), IntegerEntry(f, (Q + cZ)), IntegerEntry(g, (R + da))]
699+ else throw("Strict value is not equal to itself.")
700+ }
701+ else throw("Strict value is not equal to itself.")
702+ }
703+ })
633704
634705
635706
636-@Callable(as)
637-func activate () = if (K)
638- then bg()
639- else if (!(containsElement([z, A, B, C], as.callerPublicKey)))
640- then bi()
641- else [BooleanEntry(c, true), DeleteEntry(m)]
642-
643-
644-
645-@Callable(as)
646-func takeIntoAccountExtraFunds () = {
647- let cP = (ax - T)
648- let cQ = (ay - U)
649- let aM = aD((T + cP), (U + cQ))
650- if (!(K))
651- then bh()
652- else if ((as.caller != E))
653- then throw("Only the wallet can call this function")
654- else if (if ((0 > cP))
655- then true
656- else (0 > cQ))
657- then be("Enroll amount negative")
658- else if (if ((cP == 0))
659- then (cQ == 0)
660- else false)
661- then throw("No money to take")
662- else {
663- let bS = if (if (containsElement(H, L))
664- then (cP > 0)
665- else false)
666- then invoke(this, "stakeUnstake", [true, cP, L], nil)
667- else 0
668- if ((bS == bS))
669- then {
670- let bT = if (if (containsElement(H, M))
671- then (cQ > 0)
672- else false)
673- then invoke(this, "stakeUnstake", [true, cQ, M], nil)
674- else 0
675- if ((bT == bT))
676- then [IntegerEntry(l, aM), IntegerEntry(f, (T + cP)), IntegerEntry(g, (U + cQ)), IntegerEntry(("last_income_" + L), cP), IntegerEntry(("last_income_" + M), cQ)]
677- else throw("Strict value is not equal to itself.")
678- }
679- else throw("Strict value is not equal to itself.")
680- }
681- }
682-
683-
684-
685-@Callable(as)
686-func stakeUnstake (bq,bs,cR) = if ((as.caller != this))
707+@Callable(ap)
708+func stakeUnstake (bp,br,db) = if ((ap.caller != this))
687709 then throw("Only contract itself can invoke this function")
688710 else {
689- let cS = br(bq, bs, fromBase58String(cR))
690- let bu = cS._1
691- let cT = cS._2
692- let cU = cS._3
693- let cV = cS._4
694- let cW = invoke(cT, bu, cU, cV)
695- if ((cW == cW))
711+ let dc = bq(bp, br, fromBase58String(db))
712+ let bt = dc._1
713+ let dd = dc._2
714+ let de = dc._3
715+ let df = dc._4
716+ let dg = invoke(dd, bt, de, df)
717+ if ((dg == dg))
696718 then nil
697719 else throw("Strict value is not equal to itself.")
698720 }
699721
700722
701723
702-@Callable(as)
703-func stakeAll () = if (!(K))
704- then throw("DApp is inactive at this moment")
705- else if (!(containsElement([z, A, B, C], as.callerPublicKey)))
706- then throw("Only admin can call this function")
707- else {
708- let bS = if (containsElement(H, L))
709- then {
710- let bm = (T - at)
711- if ((bm > 0))
712- then invoke(this, "stakeUnstake", [true, bm, L], nil)
713- else 0
714- }
715- else 0
716- if ((bS == bS))
717- then {
718- let bT = if (containsElement(H, M))
719- then {
720- let bn = (U - au)
721- if ((bn > 0))
722- then invoke(this, "stakeUnstake", [true, bn, M], nil)
723- else 0
724- }
725- else 0
726- if ((bT == bT))
727- then nil
728- else throw("Strict value is not equal to itself.")
729- }
730- else throw("Strict value is not equal to itself.")
731- }
724+@Callable(ap)
725+func toBigIntInvariant () = valueOrElse(bg(ap), [IntegerEntry(k, aA(Q, R))])
732726
733727
734-@Verifier(cX)
735-func cY () = {
736- let cZ = {
737- let da = if (sigVerify(cX.bodyBytes, cX.proofs[0], z))
728+@Verifier(dh)
729+func di () = {
730+ let dj = {
731+ let dk = if (sigVerify(dh.bodyBytes, dh.proofs[0], z))
738732 then 1
739733 else 0
740- let db = if (sigVerify(cX.bodyBytes, cX.proofs[1], A))
734+ let dl = if (sigVerify(dh.bodyBytes, dh.proofs[1], A))
741735 then 1
742736 else 0
743- let dc = if (sigVerify(cX.bodyBytes, cX.proofs[2], B))
737+ let dm = if (sigVerify(dh.bodyBytes, dh.proofs[2], B))
744738 then 1
745739 else 0
746- (((da + db) + dc) >= 2)
740+ (((dk + dl) + dm) >= 2)
747741 }
748- let w = cX
742+ let w = dh
749743 if ($isInstanceOf(w, "InvokeScriptTransaction"))
750744 then {
751- let cW = w
752- let dd = if ((cW.dApp == this))
753- then (cW.function == "takeIntoAccountExtraFunds")
745+ let dg = w
746+ let dn = if ((dg.dApp == this))
747+ then (dg.function == "takeIntoAccountExtraFunds")
754748 else false
755- let de = if (if (if (sigVerify(cX.bodyBytes, cX.proofs[0], z))
749+ let do = if (if (if (sigVerify(dh.bodyBytes, dh.proofs[0], z))
756750 then true
757- else sigVerify(cX.bodyBytes, cX.proofs[0], A))
751+ else sigVerify(dh.bodyBytes, dh.proofs[0], A))
758752 then true
759- else sigVerify(cX.bodyBytes, cX.proofs[0], B))
753+ else sigVerify(dh.bodyBytes, dh.proofs[0], B))
760754 then true
761- else sigVerify(cX.bodyBytes, cX.proofs[0], D)
762- if (if (dd)
763- then de
755+ else sigVerify(dh.bodyBytes, dh.proofs[0], C)
756+ if (if (dn)
757+ then do
764758 else false)
765759 then true
766- else cZ
760+ else dj
767761 }
768- else cZ
762+ else dj
769763 }
770764
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
24-let k = "commission_scale_delimiter"
24+let k = "invariant"
2525
26-let l = "invariant"
26+let l = "shutdown_cause"
2727
28-let m = "shutdown_cause"
28+let m = "staking_usdnnsbt_address"
2929
30-let n = "staking_usdnnsbt_address"
30+let n = "staking_eurn_address"
3131
32-let o = "staking_eurn_address"
32+let o = "admin_pub_1"
3333
34-let p = "admin_pub_1"
34+let p = "admin_pub_2"
3535
36-let q = "admin_pub_2"
36+let q = "admin_pub_3"
3737
38-let r = "admin_pub_3"
38+let r = "admin_invoke_pub"
3939
40-let s = Address(base58'3PHaNgomBkrvEL2QnuJarQVJa71wjw9qiqG')
40+let s = "money_box_address"
4141
4242 let t = Address(base58'3PEbqViERCoKnmcSULh6n2aiMvUdSQdCsom')
4343
4444 func u (v) = {
4545 let w = getString(t, v)
4646 if ($isInstanceOf(w, "String"))
4747 then {
4848 let x = w
4949 fromBase58String(x)
5050 }
5151 else {
5252 let y = w
53- throw("Admin public key is empty")
53+ throw((v + "is empty"))
5454 }
5555 }
5656
5757
58-let z = u(p)
58+let z = u(o)
5959
60-let A = u(q)
60+let A = u(p)
6161
62-let B = u(r)
62+let B = u(q)
6363
64-let C = base58'EtVkT6ed8GtbUiVVEqdmEqsp2J4qbb3rre2HFgxeVYdg'
64+let C = u(r)
6565
66-let D = base58'Czn4yoAuUZCVCLJDRfskn8URfkwpknwBTZDbs1wFrY7h'
66+let D = Address(u(s))
6767
68-let E = Address(base58'3P6J84oH51DzY6xk2mT5TheXRbrCwBMxonp')
68+let E = Address(u(m))
6969
7070 let F = base58'DG2xFkPdDwKUoBkzGAhQtLpSGzfXLiCYPEzeKH2Ad24p'
7171
72-let G = base58'DUk2YTxhRoAqMJLus4G2b3fR8hMHVh6eiyFx5r29VR6t'
72+let G = [toBase58String(F)]
7373
74-let H = [toBase58String(F), toBase58String(G)]
74+let H = getBooleanValue(this, c)
7575
76-let I = Address(fromBase58String(valueOrErrorMessage(getString(t, n), "no usdn staking address")))
76+let I = getStringValue(this, d)
7777
78-let J = Address(fromBase58String(valueOrErrorMessage(getString(t, o), "no usdn staking address")))
78+let J = getStringValue(this, e)
7979
80-let K = getBooleanValue(this, c)
80+let K = if ((I == "WAVES"))
81+ then unit
82+ else fromBase58String(I)
8183
82-let L = getStringValue(this, d)
84+let L = if ((J == "WAVES"))
85+ then unit
86+ else fromBase58String(J)
8387
84-let M = getStringValue(this, e)
85-
86-let N = if ((L == "WAVES"))
87- then unit
88- else fromBase58String(L)
89-
90-let O = if ((M == "WAVES"))
91- then unit
92- else fromBase58String(M)
93-
94-let P = {
95- let w = N
88+let M = {
89+ let w = K
9690 if ($isInstanceOf(w, "ByteVector"))
9791 then {
98- let Q = w
99- value(assetInfo(Q)).name
92+ let N = w
93+ value(assetInfo(N)).name
10094 }
10195 else if ($isInstanceOf(w, "Unit"))
10296 then {
103- let R = w
97+ let O = w
10498 "WAVES"
10599 }
106100 else throw("Match error")
107101 }
108102
109-let S = {
110- let w = O
103+let P = {
104+ let w = L
111105 if ($isInstanceOf(w, "ByteVector"))
112106 then {
113- let Q = w
114- value(assetInfo(Q)).name
107+ let N = w
108+ value(assetInfo(N)).name
115109 }
116110 else if ($isInstanceOf(w, "Unit"))
117111 then {
118- let R = w
112+ let O = w
119113 "WAVES"
120114 }
121115 else throw("Match error")
122116 }
123117
124-let T = getIntegerValue(this, f)
118+let Q = getIntegerValue(this, f)
125119
126-let U = getIntegerValue(this, g)
120+let R = getIntegerValue(this, g)
127121
128-let V = fromBase58String(getStringValue(this, h))
122+let S = fromBase58String(getStringValue(this, h))
129123
130-let W = getIntegerValue(this, i)
124+let T = getIntegerValue(this, i)
131125
132-let X = getIntegerValue(this, l)
126+let U = getIntegerValue(this, k)
133127
134-let Y = 500
128+let V = getIntegerValue(this, j)
135129
136-let Z = 200
130+let W = fraction(V, 40, 100)
137131
138-let aa = 1000000
132+let X = 1000000
133+
134+let Y = 1000
135+
136+let Z = 100000000
137+
138+let aa = 10000000000000000
139139
140140 let ab = 1000
141141
142-let ac = 100000000
142+let ac = 8
143143
144-let ad = 1000000000000
144+let ad = 50
145145
146-let ae = 1000
146+let ae = 100
147147
148-let af = 8
148+let af = 90000000
149149
150-let ag = 50
150+let ag = 110000000
151151
152-let ah = 100
152+let ah = 50
153153
154-let ai = 90000000
154+let ai = 2
155155
156-let aj = 110000000
156+let aj = 4600000000000000
157157
158-let ak = 50
159-
160-let al = 2
161-
162-let am = 46000000
163-
164-func an (ao) = {
165- let w = ao
158+func ak (al) = {
159+ let w = al
166160 if ($isInstanceOf(w, "ByteVector"))
167161 then {
168- let Q = w
169- assetBalance(this, Q)
162+ let N = w
163+ assetBalance(this, N)
170164 }
171165 else if ($isInstanceOf(w, "Unit"))
172166 then {
173- let R = w
167+ let O = w
174168 wavesBalance(this).available
175169 }
176170 else throw("Match error")
177171 }
178172
179173
180-func ap (ao) = {
181- let aq = {
182- let w = ao
174+func am (al) = {
175+ let an = {
176+ let w = al
183177 if ($isInstanceOf(w, "ByteVector"))
184178 then {
185- let ar = w
186- if ((ar == F))
187- then getInteger(I, ((("rpd_balance_" + toBase58String(ar)) + "_") + toString(this)))
188- else if ((ar == G))
189- then getInteger(J, ((("%s%s%s__stakingBalance__" + toBase58String(ar)) + "__") + toString(this)))
190- else 0
179+ let ao = w
180+ if ((ao == F))
181+ then getInteger(E, ((("rpd_balance_" + toBase58String(ao)) + "_") + toString(this)))
182+ else 0
191183 }
192184 else if ($isInstanceOf(w, "Unit"))
193185 then 0
194186 else throw("Match error")
195187 }
196- let w = aq
188+ let w = an
197189 if ($isInstanceOf(w, "Int"))
198190 then {
199- let as = w
200- as
191+ let ap = w
192+ ap
201193 }
202194 else 0
203195 }
204196
205197
206-let at = ap(N)
198+let aq = am(K)
207199
208-let au = ap(O)
200+let ar = am(L)
209201
210-let av = (T - at)
202+let as = (Q - aq)
211203
212-let aw = (U - au)
204+let at = (R - ar)
213205
214-let ax = (an(N) + at)
206+let au = (ak(K) + aq)
215207
216-let ay = (an(O) + au)
208+let av = (ak(L) + ar)
217209
218-let az = if ((ax >= T))
219- then (ay >= U)
210+let aw = if ((au >= Q))
211+ then (av >= R)
220212 else false
221213
222-func aA (aB,aC) = (((fraction(ad, aB, aC) + fraction(ad, aC, aB)) / 2) / 10000)
214+func ax (ay,az) = ((fraction(aa, ay, az) + fraction(aa, az, ay)) / 2)
223215
224216
225-func aD (aB,aC) = {
226- let aE = aA(aB, aC)
227- (fraction((aB + aC), ac, pow(aE, af, ak, al, af, CEILING)) + (2 * fraction(pow(fraction(aB, aC, ac), 0, 5, 1, (af / 2), DOWN), pow((aE - am), af, ak, al, af, DOWN), ac)))
217+func aA (ay,az) = {
218+ let aB = ax(ay, az)
219+ (fraction((ay + az), aa, pow(aB, ac, ah, ai, ac, CEILING)) + (2 * fraction(toInt(pow(fraction(toBigInt(ay), toBigInt(az), toBigInt(Z)), 0, toBigInt(5), 1, (ac / 2), DOWN)), pow((aB - aj), ac, ah, ai, ac, DOWN), Z)))
228220 }
229221
230222
231-func aF (aG,aH,aI,aJ) = {
232- let aK = (ac - ((ac * 1) / 10000000))
233- let aL = (aG - aH)
234- let aB = (T + aI)
235- let aC = (U + aI)
236- let aM = if ((aJ == N))
237- then aD(aB, (U - aG))
238- else if ((aJ == O))
239- then aD((T - aG), aC)
240- else throw("Wrong asset in payment")
241- let aN = fraction(ac, X, aM)
242- func aO (aP,aQ) = if ((aP == -1))
223+func aC (aD,aE,aF,aG) = {
224+ let aH = (aa - ((aa * 1) / 10000000))
225+ let aI = (aD - aE)
226+ let ay = (Q + aF)
227+ let az = (R + aF)
228+ func aJ (aK,aL) = if ((aK._1 == -1))
243229 then {
244- let aR = (aG - ((aQ * aL) / 5))
245- let aS = if ((aJ == N))
246- then aD(aB, (U - aR))
247- else aD((T - aR), aC)
248- if ((aS > X))
249- then aR
250- else -1
230+ let aM = (aD - (((aL * aI) / 3) / Y))
231+ let aN = if ((aG == K))
232+ then aA(ay, (R - aM))
233+ else aA((Q - aM), az)
234+ if ((aN > U))
235+ then $Tuple2(aM, aN)
236+ else $Tuple2(-1, 0)
251237 }
252- else aP
238+ else aK
253239
254- let aT = {
255- let aU = [1, 2, 3, 4, 5]
256- let aV = size(aU)
257- let aW = -1
258- func aX (aY,aZ) = if ((aZ >= aV))
259- then aY
260- else aO(aY, aU[aZ])
240+ let aO = aJ($Tuple2(-1, 0), 3000)
241+ if ((0 > aO._1))
242+ then throw("Price is worse than minReceived")
243+ else {
244+ let aP = if ((aG == K))
245+ then aA(ay, (R - aD))
246+ else if ((aG == L))
247+ then aA((Q - aD), az)
248+ else throw("Wrong asset in payment")
249+ if ((U > aP))
250+ then if ((aH >= fraction(aa, U, aP)))
251+ then throw("The requested price is too not profitable for user")
252+ else {
253+ let aQ = {
254+ let aR = [25, 200, 500]
255+ let aS = size(aR)
256+ let aT = $Tuple2(-1, 0)
257+ func aU (aV,aW) = if ((aW >= aS))
258+ then aV
259+ else aJ(aV, aR[aW])
261260
262- func ba (aY,aZ) = if ((aZ >= aV))
263- then aY
264- else throw("List size exceeds 5")
261+ func aX (aV,aW) = if ((aW >= aS))
262+ then aV
263+ else throw("List size exceeds 3")
265264
266- ba(aX(aX(aX(aX(aX(aW, 0), 1), 2), 3), 4), 5)
267- }
268- if ((0 > aT))
269- then throw("something went wrong while working with amountToSend")
270- else if (if ((aN > aK))
271- then (aM > X)
272- else false)
273- then aG
274- else aT
265+ aX(aU(aU(aU(aT, 0), 1), 2), 3)
266+ }
267+ if ((0 > aQ._1))
268+ then aO._1
269+ else aQ._1
270+ }
271+ else {
272+ let aQ = {
273+ let aR = [-500, -200, -25]
274+ let aS = size(aR)
275+ let aT = $Tuple2(-1, 0)
276+ func aU (aV,aW) = if ((aW >= aS))
277+ then aV
278+ else aJ(aV, aR[aW])
279+
280+ func aX (aV,aW) = if ((aW >= aS))
281+ then aV
282+ else throw("List size exceeds 3")
283+
284+ aX(aU(aU(aU(aT, 0), 1), 2), 3)
285+ }
286+ let aY = if ((0 > aQ._1))
287+ then $Tuple2(aD, aP)
288+ else aQ
289+ if ((aH >= fraction(aa, U, aY._2)))
290+ then throw("The requested price is too not profitable for user")
291+ else aY._1
292+ }
293+ }
275294 }
276295
277296
278-func bb (ao) = {
279- let w = ao
297+func aZ (al) = {
298+ let w = al
280299 if ($isInstanceOf(w, "ByteVector"))
281300 then {
282- let Q = w
283- let bc = toBase58String(Q)
284- let bd = valueOrErrorMessage(assetInfo(Q), (("Asset " + bc) + " doesn't exist"))
285- $Tuple3(bc, bd.name, bd.decimals)
301+ let N = w
302+ let ba = toBase58String(N)
303+ let bb = valueOrErrorMessage(assetInfo(N), (("Asset " + ba) + " doesn't exist"))
304+ $Tuple3(ba, bb.name, bb.decimals)
286305 }
287306 else if ($isInstanceOf(w, "Unit"))
288307 then {
289- let R = w
308+ let O = w
290309 $Tuple3("WAVES", "WAVES", 8)
291310 }
292311 else throw("Match error")
293312 }
294313
295314
296-func be (bf) = [BooleanEntry(c, false), StringEntry(m, bf)]
315+func bc (bd) = [BooleanEntry(c, false), StringEntry(l, bd)]
297316
298317
299-func bg () = throw("DApp is already active")
318+func be () = throw("DApp is already active")
300319
301320
302-func bh () = throw("DApp is inactive at this moment")
321+func bf () = if (H)
322+ then unit
323+ else throw("DApp is inactive at this moment")
303324
304325
305-func bi () = throw("Only admin can call this function")
326+func bg (ap) = if (containsElement([z, A, B], ap.callerPublicKey))
327+ then unit
328+ else throw("Only admin can call this function")
306329
307330
308-func bj () = throw(((("Incorrect assets attached. Expected: " + L) + " and ") + M))
331+func bh () = throw(((("Incorrect assets attached. Expected: " + I) + " and ") + J))
309332
310333
311-func bk (bl,bm,bn) = throw(((((((((("New balance in assets of the DApp is less than threshold " + toString(bl)) + ": ") + toString(bm)) + " ") + P) + ", ") + toString(bn)) + " ") + S))
334+func bi () = throw("One attached payment expected")
312335
313336
314-func bo () = be(((((((((((((((("Suspicious state. Actual balances: " + toString(T)) + " ") + P) + ", ") + toString(U)) + " ") + S) + ". State: ") + toString(an(N))) + " ") + P) + ", ") + toString(an(O))) + " ") + S))
337+func bj (bk,bl,bm) = throw(((((((((("New balance in assets of the DApp is less than threshold " + toString(bk)) + ": ") + toString(bl)) + " ") + M) + ", ") + toString(bm)) + " ") + P))
315338
316339
317-func bp (bq,ao) = if (bq)
318- then if ((ao == F))
319- then $Tuple2("lockNeutrino", I)
320- else $Tuple2("startStaking", J)
321- else if ((ao == F))
322- then $Tuple2("unlockNeutrino", I)
323- else $Tuple2("stopStaking", J)
340+func bn () = bc(((((((((((((((("Suspicious state. Actual balances: " + toString(Q)) + " ") + M) + ", ") + toString(R)) + " ") + P) + ". State: ") + toString(ak(K))) + " ") + M) + ", ") + toString(ak(L))) + " ") + P))
324341
325342
326-func br (bq,bs,ao) = if (bq)
343+func bo (bp,al) = if (bp)
344+ then $Tuple2("lockNeutrino", E)
345+ else $Tuple2("unlockNeutrino", E)
346+
347+
348+func bq (bp,br,al) = if (bp)
327349 then {
328- let bt = bp(bq, ao)
329- let bu = bt._1
330- let bv = bt._2
331- $Tuple4(bu, bv, nil, [AttachedPayment(ao, bs)])
350+ let bs = bo(bp, al)
351+ let bt = bs._1
352+ let bu = bs._2
353+ $Tuple4(bt, bu, nil, [AttachedPayment(al, br)])
332354 }
333355 else {
334- let bw = bp(bq, ao)
335- let bu = bw._1
336- let bv = bw._2
337- $Tuple4(bu, bv, [bs, toBase58String(ao)], nil)
356+ let bv = bo(bp, al)
357+ let bt = bv._1
358+ let bu = bv._2
359+ $Tuple4(bt, bu, [br, toBase58String(al)], nil)
338360 }
339361
340362
341-@Callable(as)
363+@Callable(ap)
342364 func init () = {
343- let bx = $Tuple2(as.payments[0].amount, as.payments[0].assetId)
344- let by = bx._1
345- let bz = bx._2
346- let bA = $Tuple2(as.payments[1].amount, as.payments[1].assetId)
347- let bB = bA._1
348- let bC = bA._2
349- let bD = bb(bz)
350- let bE = bD._1
351- let bF = bD._2
352- let bG = bD._3
353- let bH = bb(bC)
354- let bI = bH._1
355- let bJ = bH._2
356- let bK = bH._3
365+ let bw = $Tuple2(ap.payments[0].amount, ap.payments[0].assetId)
366+ let bx = bw._1
367+ let by = bw._2
368+ let bz = $Tuple2(ap.payments[1].amount, ap.payments[1].assetId)
369+ let bA = bz._1
370+ let bB = bz._2
371+ let bC = aZ(by)
372+ let bD = bC._1
373+ let bE = bC._2
374+ let bF = bC._3
375+ let bG = aZ(bB)
376+ let bH = bG._1
377+ let bI = bG._2
378+ let bJ = bG._3
357379 if (isDefined(getBoolean(this, c)))
358- then bg()
359- else if ((bz == bC))
380+ then be()
381+ else if ((by == bB))
360382 then throw("Assets must be different")
361383 else {
362- let bL = ((("s" + take(bF, 7)) + "_") + take(bJ, 7))
363- let bM = ((((("ShareToken of SwopFi protocol for " + bF) + " and ") + bJ) + " at address ") + toString(this))
364- let bN = ((bG + bK) / 2)
365- let bO = fraction(pow(by, bG, 5, 1, bG, DOWN), pow(bB, bK, 5, 1, bK, DOWN), pow(10, 0, bN, 0, 0, DOWN))
366- let bP = Issue(bL, bM, bO, bN, true)
367- let bQ = calculateAssetId(bP)
368- let bR = aD(by, bB)
369- let bS = if (containsElement(H, bE))
370- then invoke(this, "stakeUnstake", [true, by, bE], nil)
384+ let bK = ((("s" + take(bE, 7)) + "_") + take(bI, 7))
385+ let bL = ((((("ShareToken of SwopFi protocol for " + bE) + " and ") + bI) + " at address ") + toString(this))
386+ let bM = ((bF + bJ) / 2)
387+ let bN = fraction(pow(bx, bF, 5, 1, bF, DOWN), pow(bA, bJ, 5, 1, bJ, DOWN), pow(10, 0, bM, 0, 0, DOWN))
388+ let bO = Issue(bK, bL, bN, bM, true)
389+ let bP = calculateAssetId(bO)
390+ let bQ = aA(bx, bA)
391+ let bR = if (containsElement(G, bD))
392+ then invoke(this, "stakeUnstake", [true, bx, bD], nil)
371393 else 0
372- if ((bS == bS))
394+ if ((bR == bR))
373395 then {
374- let bT = if (containsElement(H, bI))
375- then invoke(this, "stakeUnstake", [true, bB, bI], nil)
396+ let bS = if (containsElement(G, bH))
397+ then invoke(this, "stakeUnstake", [true, bA, bH], nil)
376398 else 0
377- if ((bT == bT))
378- then [StringEntry(b, a), BooleanEntry(c, true), StringEntry(d, bE), StringEntry(e, bI), IntegerEntry(f, by), IntegerEntry(g, bB), IntegerEntry(l, bR), IntegerEntry(j, Y), IntegerEntry(k, aa), bP, StringEntry(h, toBase58String(bQ)), IntegerEntry(i, bO), ScriptTransfer(as.caller, bO, bQ)]
399+ if ((bS == bS))
400+ then [StringEntry(b, a), BooleanEntry(c, true), StringEntry(d, bD), StringEntry(e, bH), IntegerEntry(f, bx), IntegerEntry(g, bA), IntegerEntry(k, bQ), IntegerEntry(j, getIntegerValue(t, "base_fee_flat")), bO, StringEntry(h, toBase58String(bP)), IntegerEntry(i, bN), ScriptTransfer(ap.caller, bN, bP)]
379401 else throw("Strict value is not equal to itself.")
380402 }
381403 else throw("Strict value is not equal to itself.")
382404 }
383405 }
384406
385407
386408
387-@Callable(as)
388-func replenishWithTwoTokens (bU) = {
389- let bz = as.payments[0].assetId
390- let bC = as.payments[1].assetId
391- let by = as.payments[0].amount
392- let bB = as.payments[1].amount
393- let bV = bb(bz)
394- let bE = bV._1
395- let bF = bV._2
396- let bG = bV._3
397- let bW = bb(bC)
398- let bI = bW._1
399- let bJ = bW._2
400- let bK = bW._3
401- let bX = fraction(fraction(ac, T, by), ab, fraction(ac, U, bB))
402- let bY = fraction(ac, by, T)
403- let bZ = fraction(ac, bB, U)
404- let ca = fraction(min([bY, bZ]), W, ac)
405- let bR = aD((T + by), (U + bB))
406- if (!(K))
407- then bh()
408- else if (if ((0 > bU))
409+@Callable(ap)
410+func replenishWithTwoTokens () = valueOrElse(bf(), {
411+ let by = ap.payments[0].assetId
412+ let bB = ap.payments[1].assetId
413+ let bT = fraction(Z, ap.payments[0].amount, Q)
414+ let bU = fraction(Z, ap.payments[1].amount, R)
415+ let bV = aZ(by)
416+ let bD = bV._1
417+ let bE = bV._2
418+ let bF = bV._3
419+ let bW = aZ(bB)
420+ let bH = bW._1
421+ let bI = bW._2
422+ let bJ = bW._3
423+ let bX = if ((bU > bT))
424+ then {
425+ let bY = fraction(R, bT, Z, CEILING)
426+ $Tuple5(ap.payments[0].amount, bY, (ap.payments[1].amount - bY), bB, bT)
427+ }
428+ else {
429+ let bY = fraction(Q, bU, Z, CEILING)
430+ $Tuple5(bY, ap.payments[1].amount, (ap.payments[0].amount - bY), by, bU)
431+ }
432+ let bx = bX._1
433+ let bA = bX._2
434+ let bZ = bX._3
435+ let ca = bX._4
436+ let cb = bX._5
437+ let cc = fraction(cb, T, Z)
438+ if ((size(ap.payments) != 2))
439+ then throw("Two attached assets expected")
440+ else if (if ((by != K))
409441 then true
410- else (bU > 10))
411- then throw("Slippage tolerance must be <= 1%")
412- else if ((size(as.payments) != 2))
413- then throw("Two attached assets expected")
414- else if (if ((bz != N))
415- then true
416- else (bC != O))
417- then bj()
418- else if (if ((((ab * (ae - bU)) / ae) > bX))
419- then true
420- else (bX > ((ab * (ae + bU)) / ae)))
421- then throw("Incorrect assets amount: amounts must have the contract ratio")
422- else if ((ca == 0))
423- then throw("Too small amount to replenish")
424- else if (!(az))
425- then ([ScriptTransfer(as.caller, by, bz), ScriptTransfer(as.caller, bB, bC)] ++ bo())
426- else {
427- let bS = if (containsElement(H, bE))
428- then invoke(this, "stakeUnstake", [true, by, bE], nil)
442+ else (bB != L))
443+ then bh()
444+ else if ((cc == 0))
445+ then throw("Too small amount to replenish")
446+ else if ((0 > bZ))
447+ then throw("Change < 0")
448+ else if (!(aw))
449+ then ([ScriptTransfer(ap.caller, bx, by), ScriptTransfer(ap.caller, bA, bB)] ++ bn())
450+ else {
451+ let bR = if (containsElement(G, bD))
452+ then invoke(this, "stakeUnstake", [true, bx, bD], nil)
453+ else 0
454+ if ((bR == bR))
455+ then {
456+ let bS = if (containsElement(G, bH))
457+ then invoke(this, "stakeUnstake", [true, bA, bH], nil)
429458 else 0
430459 if ((bS == bS))
431- then {
432- let bT = if (containsElement(H, bI))
433- then invoke(this, "stakeUnstake", [true, bB, bI], nil)
434- else 0
435- if ((bT == bT))
436- then [IntegerEntry(f, (T + by)), IntegerEntry(g, (U + bB)), IntegerEntry(i, (W + ca)), IntegerEntry(l, bR), Reissue(V, ca, true), ScriptTransfer(as.caller, ca, V)]
437- else throw("Strict value is not equal to itself.")
438- }
460+ then [IntegerEntry(f, (Q + bx)), IntegerEntry(g, (R + bA)), IntegerEntry(i, (T + cc)), IntegerEntry(k, aA((Q + bx), (R + bA))), Reissue(S, cc, true), ScriptTransfer(ap.caller, cc, S), ScriptTransfer(ap.caller, bZ, ca)]
439461 else throw("Strict value is not equal to itself.")
440462 }
441- }
463+ else throw("Strict value is not equal to itself.")
464+ }
465+ })
442466
443467
444468
445-@Callable(as)
446-func replenishWithOneToken (cb,cc) = {
447- let cd = $Tuple2(as.payments[0].amount, as.payments[0].assetId)
448- let ce = cd._1
449- let cf = cd._2
450- let cg = bb(cf)
451- let ch = cg._1
452- let ci = cg._2
453- let cj = cg._3
454- let ck = 5000000
455- let cl = 50000000
456- let cm = if ((cl > ce))
469+@Callable(ap)
470+func replenishWithOneToken (cd,ce) = valueOrElse(bf(), {
471+ let cf = $Tuple2(ap.payments[0].amount, ap.payments[0].assetId)
472+ let cg = cf._1
473+ let ch = cf._2
474+ let ci = aZ(ch)
475+ let cj = ci._1
476+ let ck = ci._2
477+ let cl = ci._3
478+ let cm = 5000000
479+ let cn = 50000000
480+ let co = if ((cn > cg))
457481 then 100000
458482 else 1
459- let cn = (ac - ((ac * cm) / 10000000))
460- let co = (ac + ((ac * cm) / 10000000))
461- let cp = (ac - ((ac * 1) / 10000000))
462- if (!(K))
463- then bh()
464- else if ((ck > ce))
465- then throw((((("Payment amount " + toString(ce)) + " does not exceed the minimum amount of ") + toString(ck)) + " tokens"))
466- else if ((size(as.payments) != 1))
467- then throw("One attached payment expected")
468- else if (!(az))
469- then ([ScriptTransfer(as.caller, ce, cf)] ++ bo())
470- else if (if ((cf != N))
471- then (cf != O)
483+ let cp = (Z - ((Z * co) / 10000000))
484+ let cq = (Z + ((Z * co) / 10000000))
485+ let cr = (Z - ((Z * 1) / 10000000))
486+ if ((cm > cg))
487+ then throw((((("Payment amount " + toString(cg)) + " does not exceed the minimum amount of ") + toString(cm)) + " tokens"))
488+ else if ((size(ap.payments) != 1))
489+ then bi()
490+ else if (!(aw))
491+ then ([ScriptTransfer(ap.caller, cg, ch)] ++ bn())
492+ else if (if ((ch != K))
493+ then (ch != L)
494+ else false)
495+ then bh()
496+ else {
497+ let cs = if ((ch == K))
498+ then $Tuple6((cg - cd), ce, (Q + cd), (R - ce), (Q + cg), R)
499+ else $Tuple6(ce, (cg - cd), (Q - ce), (R + cd), Q, (R + cg))
500+ let ct = cs._1
501+ let cu = cs._2
502+ let cv = cs._3
503+ let cw = cs._4
504+ let cx = cs._5
505+ let cy = cs._6
506+ let cz = aA(cv, cw)
507+ let cA = (fraction(aa, cv, cw) / fraction(Z, ct, cu))
508+ let cB = fraction((cx + cy), ad, (2 * ae))
509+ if (if ((cr >= fraction(Z, U, cz)))
510+ then true
511+ else (U > cz))
512+ then throw("Incorrect virtualSwapTokenPay or virtualSwapTokenGet value")
513+ else if (if ((cp > cA))
514+ then true
515+ else (cA > cq))
516+ then throw("Swap with virtualSwapTokenPay and virtualSwapTokenGet is possible, but ratio after virtual swap is incorrect")
517+ else if (if ((cB > cx))
518+ then true
519+ else (cB > cy))
520+ then bj(cB, cx, cy)
521+ else {
522+ let bT = fraction(ct, Z, cv)
523+ let bU = fraction(cu, Z, cw)
524+ let cc = fraction(min([bT, bU]), T, Z)
525+ let cC = fraction(cc, (X - (V / 2)), X)
526+ let cD = fraction(cc, (W / 2), X)
527+ let cE = fraction(cD, Q, T)
528+ let cF = fraction(cD, R, T)
529+ let cG = if ((cj == I))
530+ then $Tuple3((cg - cE), cF, J)
531+ else $Tuple3((cg - cF), cE, I)
532+ let cH = cG._1
533+ let cI = cG._2
534+ let cJ = cG._3
535+ let bR = if (containsElement(G, cj))
536+ then invoke(this, "stakeUnstake", [true, cH, cj], nil)
537+ else 0
538+ if ((bR == bR))
539+ then {
540+ let bS = if (containsElement(G, cJ))
541+ then invoke(this, "stakeUnstake", [false, cI, cJ], nil)
542+ else 0
543+ if ((bS == bS))
544+ then [Reissue(S, cC, true), ScriptTransfer(ap.caller, cC, S), ScriptTransfer(D, cE, K), ScriptTransfer(D, cF, L), IntegerEntry(f, (cx - cE)), IntegerEntry(g, (cy - cF)), IntegerEntry(i, (T + cC)), IntegerEntry(k, aA((cx - cE), (cy - cF)))]
545+ else throw("Strict value is not equal to itself.")
546+ }
547+ else throw("Strict value is not equal to itself.")
548+ }
549+ }
550+ })
551+
552+
553+
554+@Callable(ap)
555+func withdraw () = valueOrElse(bf(), {
556+ let cK = $Tuple2(ap.payments[0].amount, ap.payments[0].assetId)
557+ let cg = cK._1
558+ let ch = cK._2
559+ let cL = fraction(cg, Q, T)
560+ let cM = fraction(cg, R, T)
561+ let bQ = aA((Q - cL), (R - cM))
562+ if ((size(ap.payments) != 1))
563+ then bi()
564+ else if ((ch != S))
565+ then throw(("Incorrect asset attached. Expected: " + toBase58String(S)))
566+ else if (!(aw))
567+ then ([ScriptTransfer(ap.caller, cg, ch)] ++ bn())
568+ else {
569+ let bR = if (containsElement(G, I))
570+ then invoke(this, "stakeUnstake", [false, cL, I], nil)
571+ else 0
572+ if ((bR == bR))
573+ then {
574+ let bS = if (containsElement(G, J))
575+ then invoke(this, "stakeUnstake", [false, cM, J], nil)
576+ else 0
577+ if ((bS == bS))
578+ then [IntegerEntry(f, (Q - cL)), IntegerEntry(g, (R - cM)), IntegerEntry(i, (T - cg)), IntegerEntry(k, bQ), Burn(S, cg), ScriptTransfer(ap.caller, cL, K), ScriptTransfer(ap.caller, cM, L)]
579+ else throw("Strict value is not equal to itself.")
580+ }
581+ else throw("Strict value is not equal to itself.")
582+ }
583+ })
584+
585+
586+
587+@Callable(ap)
588+func exchange (cN,cO) = valueOrElse(bf(), {
589+ let cP = $Tuple2(ap.payments[0].amount, ap.payments[0].assetId)
590+ let cg = cP._1
591+ let ch = cP._2
592+ if ((0 >= cN))
593+ then throw(("Estimated amount must be positive. Actual: " + toString(cN)))
594+ else if ((cO > cN))
595+ then throw("Minimal amount can't be greater than estimated.")
596+ else if ((size(ap.payments) != 1))
597+ then bi()
598+ else if (!(aw))
599+ then ([ScriptTransfer(ap.caller, cg, ch)] ++ bn())
600+ else if (if ((ch != K))
601+ then (ch != L)
472602 else false)
473- then bj()
474- else {
475- let cq = if ((cf == N))
476- then $Tuple7((ce - cb), cc, (T + cb), (U - cc), aD((T + ce), U), (T + ce), U)
477- else $Tuple7(cc, (ce - cb), (T - cc), (U + cb), aD(T, (U + ce)), T, (U + ce))
478- let cr = cq._1
479- let cs = cq._2
480- let ct = cq._3
481- let cu = cq._4
482- let bR = cq._5
483- let cv = cq._6
484- let cw = cq._7
485- let cx = if ((cf == N))
486- then IntegerEntry(f, cv)
487- else IntegerEntry(g, cw)
488- let aM = aD(ct, cu)
489- let aN = fraction(ac, X, aM)
490- let cy = (fraction((ac * ac), ct, cu) / fraction(ac, cr, cs))
491- let cz = fraction((cv + cw), ag, (2 * ah))
492- if (if ((cp >= aN))
603+ then bh()
604+ else if ((10000000 > cg))
605+ then throw("Only swap of 10.000000 or more tokens is allowed")
606+ else if (if ((af > fraction(Z, cO, cg)))
493607 then true
494- else (X > aM))
495- then throw("Incorrect virtualSwapTokenPay or virtualSwapTokenGet value")
496- else if (if ((cn > cy))
497- then true
498- else (cy > co))
499- then throw("Swap with virtualSwapTokenPay and virtualSwapTokenGet is possible, but ratio after virtual swap is incorrect")
500- else if (if ((cz > cv))
608+ else (fraction(Z, cN, cg) > ag))
609+ then throw("Incorrect args and pmt ratio")
610+ else {
611+ let cQ = if ((ch == K))
612+ then L
613+ else K
614+ let br = aC(cN, cO, cg, ch)
615+ let cR = fraction(br, W, X)
616+ let cS = fraction(br, (X - V), X)
617+ let cT = if ((ch == K))
618+ then $Tuple2((Q + cg), ((R - cS) - cR))
619+ else $Tuple2(((Q - cS) - cR), (R + cg))
620+ let cx = cT._1
621+ let cy = cT._2
622+ let cB = fraction((cx + cy), ad, (2 * ae))
623+ if (if ((cB > cx))
501624 then true
502- else (cz > cw))
503- then bk(cz, cv, cw)
625+ else (cB > cy))
626+ then bj(cB, cx, cy)
504627 else {
505- let bS = if (containsElement(H, ch))
506- then invoke(this, "stakeUnstake", [true, ce, ch], nil)
628+ let cU = aZ(ch)
629+ let cj = cU._1
630+ let ck = cU._2
631+ let cl = cU._3
632+ let cV = aZ(cQ)
633+ let cW = cV._1
634+ let cX = cV._2
635+ let cY = cV._3
636+ let bR = if (containsElement(G, cj))
637+ then invoke(this, "stakeUnstake", [true, cg, cj], nil)
507638 else 0
508- if ((bS == bS))
639+ if ((bR == bR))
509640 then {
510- let bY = fraction(cr, ac, ct)
511- let bZ = fraction(cs, ac, cu)
512- let ca = fraction(min([bY, bZ]), W, ac)
513-[Reissue(V, ca, true), ScriptTransfer(as.caller, ca, V), IntegerEntry(i, (W + ca)), cx, IntegerEntry(l, bR)]
641+ let bS = if (containsElement(G, cW))
642+ then invoke(this, "stakeUnstake", [false, (cS + cR), cW], nil)
643+ else 0
644+ if ((bS == bS))
645+ then $Tuple2([IntegerEntry(f, cx), IntegerEntry(g, cy), IntegerEntry(k, aA(cx, cy)), ScriptTransfer(ap.caller, cS, cQ), ScriptTransfer(D, cR, cQ)], $Tuple2(cS, cQ))
646+ else throw("Strict value is not equal to itself.")
514647 }
515648 else throw("Strict value is not equal to itself.")
516649 }
517- }
518- }
650+ }
651+ })
519652
520653
521654
522-@Callable(as)
523-func withdraw () = {
524- let cA = $Tuple2(as.payments[0].amount, as.payments[0].assetId)
525- let ce = cA._1
526- let cf = cA._2
527- let cB = fraction(ce, T, W)
528- let cC = fraction(ce, U, W)
529- let bR = aD((T - cB), (U - cC))
530- if (!(K))
531- then bh()
532- else if ((size(as.payments) != 1))
533- then throw("One attached payment expected")
534- else if ((cf != V))
535- then throw(("Incorrect asset attached. Expected: " + toBase58String(V)))
536- else if (!(az))
537- then ([ScriptTransfer(as.caller, ce, cf)] ++ bo())
538- else {
539- let bS = if (containsElement(H, L))
540- then invoke(this, "stakeUnstake", [false, cB, L], nil)
541- else 0
542- if ((bS == bS))
543- then {
544- let bT = if (containsElement(H, M))
545- then invoke(this, "stakeUnstake", [false, cC, M], nil)
546- else 0
547- if ((bT == bT))
548- then [IntegerEntry(f, (T - cB)), IntegerEntry(g, (U - cC)), IntegerEntry(i, (W - ce)), IntegerEntry(l, bR), Burn(V, ce), ScriptTransfer(as.caller, cB, N), ScriptTransfer(as.caller, cC, O)]
549- else throw("Strict value is not equal to itself.")
550- }
551- else throw("Strict value is not equal to itself.")
552- }
553- }
655+@Callable(ap)
656+func shutdown () = valueOrElse(bg(ap), if (!(H))
657+ then throw(("DApp is already suspended. Cause: " + valueOrElse(getString(this, l), "the cause wasn't specified")))
658+ else bc("Paused by admin"))
554659
555660
556661
557-@Callable(as)
558-func exchange (cD,cE) = {
559- let cF = $Tuple2(as.payments[0].amount, as.payments[0].assetId)
560- let ce = cF._1
561- let cf = cF._2
562- if (!(K))
563- then bh()
564- else if ((0 >= cD))
565- then throw(("Estimated amount must be positive. Actual: " + toString(cD)))
566- else if ((cE > cD))
567- then throw(((("Minimal amount can't be greater than estimated. Estimated: " + toString(cD)) + ". Minimal: ") + toString(cE)))
568- else if ((size(as.payments) != 1))
569- then throw("One attached payment expected")
570- else if (!(az))
571- then ([ScriptTransfer(as.caller, ce, cf)] ++ bo())
572- else if (if ((cf != N))
573- then (cf != O)
574- else false)
575- then bj()
576- else if ((10000000 > ce))
577- then throw("Only swap of 10.000000 or more tokens is allowed")
578- else if (if ((ai > fraction(ac, cE, ce)))
579- then true
580- else (fraction(ac, cD, ce) > aj))
581- then throw("Incorrect args and pmt ratio")
582- else {
583- let cG = if ((cf == N))
584- then O
585- else N
586- let bs = aF(cD, cE, ce, cf)
587- let cH = fraction(bs, Z, aa)
588- let cI = fraction(bs, (aa - Y), aa)
589- let cJ = if ((cf == N))
590- then $Tuple2((T + ce), ((U - cI) - cH))
591- else $Tuple2(((T - cI) - cH), (U + ce))
592- let cv = cJ._1
593- let cw = cJ._2
594- let cz = fraction((cv + cw), ag, (2 * ah))
595- if (if ((cz > cv))
596- then true
597- else (cz > cw))
598- then bk(cz, cv, cw)
599- else {
600- let cK = bb(cf)
601- let ch = cK._1
602- let ci = cK._2
603- let cj = cK._3
604- let cL = bb(cG)
605- let cM = cL._1
606- let cN = cL._2
607- let cO = cL._3
608- let bS = if (containsElement(H, ch))
609- then invoke(this, "stakeUnstake", [true, ce, ch], nil)
610- else 0
611- if ((bS == bS))
612- then {
613- let bT = if (containsElement(H, cM))
614- then invoke(this, "stakeUnstake", [false, (cI + cH), cM], nil)
615- else 0
616- if ((bT == bT))
617- then [IntegerEntry(f, cv), IntegerEntry(g, cw), IntegerEntry(l, aD(cv, cw)), ScriptTransfer(as.caller, cI, cG), ScriptTransfer(E, cH, cG)]
618- else throw("Strict value is not equal to itself.")
619- }
620- else throw("Strict value is not equal to itself.")
621- }
622- }
623- }
662+@Callable(ap)
663+func activate () = valueOrElse(bg(ap), if (H)
664+ then be()
665+ else [BooleanEntry(c, true), DeleteEntry(l)])
624666
625667
626668
627-@Callable(as)
628-func shutdown () = if (!(K))
629- then throw(("DApp is already suspended. Cause: " + valueOrElse(getString(this, m), "the cause wasn't specified")))
630- else if (!(containsElement([z, A, B, C], as.callerPublicKey)))
631- then bi()
632- else be("Paused by admin")
669+@Callable(ap)
670+func takeIntoAccountExtraFunds () = valueOrElse(bf(), {
671+ let cZ = (au - Q)
672+ let da = (av - R)
673+ let cz = aA((Q + cZ), (R + da))
674+ if ((ap.caller != D))
675+ then throw("Only the money box can call this function")
676+ else if (if ((0 > cZ))
677+ then true
678+ else (0 > da))
679+ then bc("Enroll amount negative")
680+ else if (if ((cZ == 0))
681+ then (da == 0)
682+ else false)
683+ then throw("No money to take")
684+ else {
685+ let bR = if (if (containsElement(G, I))
686+ then (cZ > 0)
687+ else false)
688+ then invoke(this, "stakeUnstake", [true, cZ, I], nil)
689+ else 0
690+ if ((bR == bR))
691+ then {
692+ let bS = if (if (containsElement(G, J))
693+ then (da > 0)
694+ else false)
695+ then invoke(this, "stakeUnstake", [true, da, J], nil)
696+ else 0
697+ if ((bS == bS))
698+ then [IntegerEntry(k, cz), IntegerEntry(f, (Q + cZ)), IntegerEntry(g, (R + da))]
699+ else throw("Strict value is not equal to itself.")
700+ }
701+ else throw("Strict value is not equal to itself.")
702+ }
703+ })
633704
634705
635706
636-@Callable(as)
637-func activate () = if (K)
638- then bg()
639- else if (!(containsElement([z, A, B, C], as.callerPublicKey)))
640- then bi()
641- else [BooleanEntry(c, true), DeleteEntry(m)]
642-
643-
644-
645-@Callable(as)
646-func takeIntoAccountExtraFunds () = {
647- let cP = (ax - T)
648- let cQ = (ay - U)
649- let aM = aD((T + cP), (U + cQ))
650- if (!(K))
651- then bh()
652- else if ((as.caller != E))
653- then throw("Only the wallet can call this function")
654- else if (if ((0 > cP))
655- then true
656- else (0 > cQ))
657- then be("Enroll amount negative")
658- else if (if ((cP == 0))
659- then (cQ == 0)
660- else false)
661- then throw("No money to take")
662- else {
663- let bS = if (if (containsElement(H, L))
664- then (cP > 0)
665- else false)
666- then invoke(this, "stakeUnstake", [true, cP, L], nil)
667- else 0
668- if ((bS == bS))
669- then {
670- let bT = if (if (containsElement(H, M))
671- then (cQ > 0)
672- else false)
673- then invoke(this, "stakeUnstake", [true, cQ, M], nil)
674- else 0
675- if ((bT == bT))
676- then [IntegerEntry(l, aM), IntegerEntry(f, (T + cP)), IntegerEntry(g, (U + cQ)), IntegerEntry(("last_income_" + L), cP), IntegerEntry(("last_income_" + M), cQ)]
677- else throw("Strict value is not equal to itself.")
678- }
679- else throw("Strict value is not equal to itself.")
680- }
681- }
682-
683-
684-
685-@Callable(as)
686-func stakeUnstake (bq,bs,cR) = if ((as.caller != this))
707+@Callable(ap)
708+func stakeUnstake (bp,br,db) = if ((ap.caller != this))
687709 then throw("Only contract itself can invoke this function")
688710 else {
689- let cS = br(bq, bs, fromBase58String(cR))
690- let bu = cS._1
691- let cT = cS._2
692- let cU = cS._3
693- let cV = cS._4
694- let cW = invoke(cT, bu, cU, cV)
695- if ((cW == cW))
711+ let dc = bq(bp, br, fromBase58String(db))
712+ let bt = dc._1
713+ let dd = dc._2
714+ let de = dc._3
715+ let df = dc._4
716+ let dg = invoke(dd, bt, de, df)
717+ if ((dg == dg))
696718 then nil
697719 else throw("Strict value is not equal to itself.")
698720 }
699721
700722
701723
702-@Callable(as)
703-func stakeAll () = if (!(K))
704- then throw("DApp is inactive at this moment")
705- else if (!(containsElement([z, A, B, C], as.callerPublicKey)))
706- then throw("Only admin can call this function")
707- else {
708- let bS = if (containsElement(H, L))
709- then {
710- let bm = (T - at)
711- if ((bm > 0))
712- then invoke(this, "stakeUnstake", [true, bm, L], nil)
713- else 0
714- }
715- else 0
716- if ((bS == bS))
717- then {
718- let bT = if (containsElement(H, M))
719- then {
720- let bn = (U - au)
721- if ((bn > 0))
722- then invoke(this, "stakeUnstake", [true, bn, M], nil)
723- else 0
724- }
725- else 0
726- if ((bT == bT))
727- then nil
728- else throw("Strict value is not equal to itself.")
729- }
730- else throw("Strict value is not equal to itself.")
731- }
724+@Callable(ap)
725+func toBigIntInvariant () = valueOrElse(bg(ap), [IntegerEntry(k, aA(Q, R))])
732726
733727
734-@Verifier(cX)
735-func cY () = {
736- let cZ = {
737- let da = if (sigVerify(cX.bodyBytes, cX.proofs[0], z))
728+@Verifier(dh)
729+func di () = {
730+ let dj = {
731+ let dk = if (sigVerify(dh.bodyBytes, dh.proofs[0], z))
738732 then 1
739733 else 0
740- let db = if (sigVerify(cX.bodyBytes, cX.proofs[1], A))
734+ let dl = if (sigVerify(dh.bodyBytes, dh.proofs[1], A))
741735 then 1
742736 else 0
743- let dc = if (sigVerify(cX.bodyBytes, cX.proofs[2], B))
737+ let dm = if (sigVerify(dh.bodyBytes, dh.proofs[2], B))
744738 then 1
745739 else 0
746- (((da + db) + dc) >= 2)
740+ (((dk + dl) + dm) >= 2)
747741 }
748- let w = cX
742+ let w = dh
749743 if ($isInstanceOf(w, "InvokeScriptTransaction"))
750744 then {
751- let cW = w
752- let dd = if ((cW.dApp == this))
753- then (cW.function == "takeIntoAccountExtraFunds")
745+ let dg = w
746+ let dn = if ((dg.dApp == this))
747+ then (dg.function == "takeIntoAccountExtraFunds")
754748 else false
755- let de = if (if (if (sigVerify(cX.bodyBytes, cX.proofs[0], z))
749+ let do = if (if (if (sigVerify(dh.bodyBytes, dh.proofs[0], z))
756750 then true
757- else sigVerify(cX.bodyBytes, cX.proofs[0], A))
751+ else sigVerify(dh.bodyBytes, dh.proofs[0], A))
758752 then true
759- else sigVerify(cX.bodyBytes, cX.proofs[0], B))
753+ else sigVerify(dh.bodyBytes, dh.proofs[0], B))
760754 then true
761- else sigVerify(cX.bodyBytes, cX.proofs[0], D)
762- if (if (dd)
763- then de
755+ else sigVerify(dh.bodyBytes, dh.proofs[0], C)
756+ if (if (dn)
757+ then do
764758 else false)
765759 then true
766- else cZ
760+ else dj
767761 }
768- else cZ
762+ else dj
769763 }
770764

github/deemru/w8io/3ef1775 
180.51 ms