tx · Ft7FUdNm1ut6ckbVzJVMZGbKUmh2G4ZeHvpnDqpS2giv

3N2mWZGG3ejU8Ypmhs9SRjJqEifx7wvETGe:  -0.01400000 Waves

2021.07.20 16:51 [1622023] smart account 3N2mWZGG3ejU8Ypmhs9SRjJqEifx7wvETGe > SELF 0.00000000 Waves

{ "type": 13, "id": "Ft7FUdNm1ut6ckbVzJVMZGbKUmh2G4ZeHvpnDqpS2giv", "fee": 1400000, "feeAssetId": null, "timestamp": 1626789100420, "version": 2, "chainId": 84, "sender": "3N2mWZGG3ejU8Ypmhs9SRjJqEifx7wvETGe", "senderPublicKey": "G4GRGfKZznvAxNXzrvWVv9HEKBbeR9VUdnuAGnk7gPAj", "proofs": [ "4VsH61VwT217hVXmSyPuyVthyd4XFX76sgPkrvgU1LQrYZ7TkLTKsnpjQPFsp6bk4dGmzxchpdZvij3uSgVzQG3K", "46QDRy7jAHRhV3ZR5H56Ko4ZJEBWNnqrdYFs3o5pqfxFRDwEJ7PpvHhFyS7ay3yV685xRZ1hRjMGNkeuwQN1BWLx" ], "script": "base64:AAIFAAAAAAAAABkIAhIAEgMKAQESABIDCgEBEgASABIDCgEBAAAAQAAAAAAHdmVyc2lvbgIAAAAFMS4wLjAAAAAACmtleVZlcnNpb24CAAAAB3ZlcnNpb24AAAAACWtleUFjdGl2ZQIAAAAGYWN0aXZlAAAAAAtrZXlBc3NldElkQQIAAAAKQV9hc3NldF9pZAAAAAALa2V5QXNzZXRJZEICAAAACkJfYXNzZXRfaWQAAAAAC2tleUJhbGFuY2VBAgAAAA9BX2Fzc2V0X2JhbGFuY2UAAAAAC2tleUJhbGFuY2VCAgAAAA9CX2Fzc2V0X2JhbGFuY2UAAAAAD2tleVNoYXJlQXNzZXRJZAIAAAAOc2hhcmVfYXNzZXRfaWQAAAAAE2tleVNoYXJlQXNzZXRTdXBwbHkCAAAAEnNoYXJlX2Fzc2V0X3N1cHBseQAAAAANa2V5Q29tbWlzc2lvbgIAAAAKY29tbWlzc2lvbgAAAAAba2V5Q29tbWlzc2lvblNjYWxlRGVsaW1pdGVyAgAAABpjb21taXNzaW9uX3NjYWxlX2RlbGltaXRlcgAAAAAIa2V5Q2F1c2UCAAAADnNodXRkb3duX2NhdXNlAAAAAA9rZXlBZG1pblB1YktleTECAAAAC2FkbWluX3B1Yl8xAAAAAA9rZXlBZG1pblB1YktleTICAAAAC2FkbWluX3B1Yl8yAAAAAA9rZXlBZG1pblB1YktleTMCAAAAC2FkbWluX3B1Yl8zAAAAAAZvcmFjbGUJAQAAAAdBZGRyZXNzAAAAAQEAAAAaAVTpRaoekC86rvG6DuYumpJfGpiE4fNiswgBAAAAC2dldEFkbWluUHViAAAAAQAAAAtrZXlBZG1pblB1YgQAAAAHJG1hdGNoMAkABB0AAAACBQAAAAZvcmFjbGUFAAAAC2tleUFkbWluUHViAwkAAAEAAAACBQAAAAckbWF0Y2gwAgAAAAZTdHJpbmcEAAAABnN0cmluZwUAAAAHJG1hdGNoMAkAAlkAAAABBQAAAAZzdHJpbmcEAAAAB25vdGhpbmcFAAAAByRtYXRjaDAJAAACAAAAAQIAAAAZQWRtaW4gcHVibGljIGtleSBpcyBlbXB0eQAAAAAMYWRtaW5QdWJLZXkxCQEAAAALZ2V0QWRtaW5QdWIAAAABBQAAAA9rZXlBZG1pblB1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ZWRBbW91bnRCCQEAAAAMc3Rha2VkQW1vdW50AAAAAgUAAAASc3Rha2luZ0FkZHJlc3NVU0ROBQAAAAtzdHJBc3NldElkQgAAAAARYXZhaWxhYmxlQmFsYW5jZUEJAABlAAAAAgUAAAAIYmFsYW5jZUEFAAAADXN0YWtlZEFtb3VudEEAAAAAEWF2YWlsYWJsZUJhbGFuY2VCCQAAZQAAAAIFAAAACGJhbGFuY2VCBQAAAA1zdGFrZWRBbW91bnRCAAAAABlhY2NvdW50QmFsYW5jZVdpdGhTdGFrZWRBCQAAZAAAAAIJAQAAAA5hY2NvdW50QmFsYW5jZQAAAAEFAAAACGFzc2V0SWRBBQAAAA1zdGFrZWRBbW91bnRBAAAAABlhY2NvdW50QmFsYW5jZVdpdGhTdGFrZWRCCQAAZAAAAAIJAQAAAA5hY2NvdW50QmFsYW5jZQAAAAEFAAAACGFzc2V0SWRCBQAAAA1zdGFrZWRBbW91bnRCAAAAABBoYXNFbm91Z2hCYWxhbmNlAwkAAGcAAAACBQAAABlhY2NvdW50QmFsYW5jZVdpdGhTdGFrZWRBBQAAAAhiYWxhbmNlQQkAAGcAAAACBQAAABlhY2NvdW50QmFsYW5jZVdpdGhTdGFrZWRCBQAAAAhiYWxhbmNlQgcBAAAADGdldEFzc2V0SW5mbwAAAAEAAAAHYXNzZXRJZAQAAAAHJG1hdGNoMAUAAAAHYXNzZXRJZAMJAAABAAAAAgUAAAAHJG1hdGNoMAIAAAAKQnl0ZVZlY3RvcgQAAAACaWQFAAAAByRtYXRjaDAEAAAACHN0cmluZ0lkCQACWAAAAAEFAAAAAmlkBAAAAARpbmZvCQEAAAATdmFsdWVPckVycm9yTWVzc2FnZQAAAAIJAAPsAAAAAQUAAAACaWQJAAEsAAAAAgkAASwAAAACAgAAAAZBc3NldCAFAAAACHN0cmluZ0lkAgAAAA4gZG9lc24ndCBleGlzdAkABRUAAAADBQAAAAhzdHJpbmdJZAgFAAAABGluZm8AAAAEbmFtZQgFAAAABGluZm8AAAAIZGVjaW1hbHMDCQAAAQAAAAIFAAAAByRtYXRjaDACAAAABFVuaXQEAAAABXdhdmVzBQAAAAckbWF0Y2gwCQAFFQAAAAMCAAAABVdBVkVTAgAAAAVXQVZFUwAAAAAA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AAAFAAAADXNoYXJlRGVjaW1hbHMAAAAAAAAAAAAAAAAAAAAAAAAFAAAABERPV04EAAAACnNoYXJlSXNzdWUJAARCAAAABQUAAAAJc2hhcmVOYW1lBQAAABBzaGFyZURlc2NyaXB0aW9uBQAAABJzaGFyZUluaXRpYWxTdXBwbHkFAAAADXNoYXJlRGVjaW1hbHMGBAAAAAxzaGFyZUlzc3VlSWQJAAQ4AAAAAQUAAAAKc2hhcmVJc3N1ZQkABEwAAAACCQEAAAALU3RyaW5nRW50cnkAAAACBQAAAAprZXlWZXJzaW9uBQAAAAd2ZXJzaW9uCQAETAAAAAIJAQAAAAxCb29sZWFuRW50cnkAAAACBQAAAAlrZXlBY3RpdmUGCQAETAAAAAIJAQAAAAtTdHJpbmdFbnRyeQAAAAIFAAAAC2tleUFzc2V0SWRBBQAAAA5wbXRTdHJBc3NldElkQQkABEwAAAACCQEAAAALU3RyaW5nRW50cnkAAAACBQAAAAtrZXlBc3NldElkQgUAAAAOcG10U3RyQXNzZXRJZEIJAARMAAAAAgkBAAAADEludGVnZXJFbnRyeQAAAAIFAAAAC2tleUJhbGFuY2VBBQAAAApwbXRBbW91bnRBCQAETAAAAAIJAQAAAAxJbnRlZ2VyRW50cnkAAAACBQAAAAtrZXlCYWxhbmNlQgUAAAAKcG10QW1vdW50QgkABEwAAAACCQEAAAAMSW50ZWdlckVudHJ5AAAAAgUAAAANa2V5Q29tbWlzc2lvbgUAAAAKY29tbWlzc2lvbgkABEwAAAACCQEAAAAMSW50ZWdlckVudHJ5AAAAAgUAAAAba2V5Q29tbWlzc2lvblNjYWxlRGVsaW1pdGVyBQAAABhjb21taXNzaW9uU2NhbGVEZWxpbWl0ZXIJAARMAAAAAgUAAAAKc2hhcmVJc3N1ZQkABEwAAAACCQEAAAALU3RyaW5nRW50cnkAAAACBQAAAA9rZXlTaGFyZUFzc2V0SWQJAAJYAAAAAQUAAAAMc2hhcmVJc3N1ZUlkCQAETAAAAAIJAQAAAAxJbnRlZ2VyRW50cnkAAAACBQAAABNrZXlTaGFyZUFzc2V0U3VwcGx5BQAAABJzaGFyZUluaXRpYWxTdXBwbHkJAARMAAAAAgkBAAAADlNjcmlwdFRyYW5zZmVyAAAAAwgFAAAAAWkAAAAGY2FsbGVyBQAAABJzaGFyZUluaXRpYWxTdXBwbHkFAAAADHNoYXJlSXNzdWVJZAUAAAADbmlsAAAAAWkBAAAAFnJlcGxlbmlzaFdpdGhUd29Ub2tlbnMAAAABAAAAEXNsaXBwYWdlVG9sZXJhbmNlBAAAAAtwbXRBc3NldElkQQgJAAGRAAAAAggFAAAAAWkAAAAIcGF5bWVudHMAAAAAAAAAAAAAAAAHYXNzZXRJZAQAAAALcG10QXNzZXRJZEIICQABkQAAAAIIBQAAAAFpAAAACHBheW1lbnRzAAAAAAAAAAABAAAAB2Fzc2V0SWQEAAAACnBtdEFtb3VudEEJAQAAABBkZWR1Y3RTdGFraW5nRmVlAAAAAggJAAGRAAAAAggFAAAAAWkAAAAIcGF5bWVudHMAAAAAAAAAAAAAAAAGYW1vdW50BQAAAAtwbXRBc3NldElkQQQAAAAKcG10QW1vdW50QgkBAAAAEGRlZHVjdFN0YWtpbmdGZWUAAAACCAkAAZEAAAACCAUAAAABaQAAAAhwYXltZW50cwAAAAAAAAAAAQAAAAZhbW91bnQFAAAAC3BtdEFzc2V0SWRCBAAAAAp0b2tlblJhdGlvCQAAawAAAAMJAABrAAAAAwUAAAAIYmFsYW5jZUEFAAAAC3NjYWxlVmFsdWU4BQAAAApwbXRBbW91bnRBBQAAAAtzY2FsZVZhbHVlMwkAAGsAAAADBQAAAAhiYWxhbmNlQgUAAAALc2NhbGVWYWx1ZTgFAAAACnBtdEFtb3VudEIEAAAAE3JhdGlvU2hhcmVUb2tlbnNJbkEJAABrAAAAAwUAAAAKcG10QW1vdW50QQUAAAALc2NhbGVWYWx1ZTgFAAAACGJhbGFuY2VBBAAAABNyYXRpb1NoYXJlVG9rZW5zSW5CCQAAawAAAAMFAAAACnBtdEFtb3VudEIFAAAAC3NjYWxlVmFsdWU4BQAAAAhiYWxhbmNlQgQAAAAVc2hhcmVUb2tlblRvUGF5QW1vdW50CQAAawAAAAMJAAGXAAAAAQkABEwAAAACBQAAABNyYXRpb1NoYXJlVG9rZW5zSW5BCQAETAAAAAIFAAAAE3JhdGlvU2hhcmVUb2tlbnNJbkIFAAAAA25pbAUAAAAQc2hhcmVBc3NldFN1cHBseQUAAAALc2NhbGVWYWx1ZTgDCQEAAAABIQAAAAEFAAAACGlzQWN0aXZlCQAAAgAAAAECAAAAH0RBcHAgaXMgaW5hY3RpdmUgYXQgdGhpcyBtb21lbnQDAwkAAGYAAAACAAAAAAAAAAAABQAAABFzbGlwcGFnZVRvbGVyYW5jZQYJAABmAAAAAgUAAAARc2xpcHBhZ2VUb2xlcmFuY2UFAAAAGnNsaXBwYWdlVG9sZXJhbmNlRGVsaW1pdGVyCQAAAgAAAAEJAAEsAAAAAgkAASwAAAACCQABLAAAAAICAAAAKVNsaXBwYWdlIHRvbGVyYW5jZSBtdXN0IGJlIGJldHdlZW4gMCBhbmQgCQABpAAAAAEFAAAAGnNsaXBwYWdlVG9sZXJhbmNlRGVsaW1pdGVyAgAAABYgaW5jbHVzaXZlbHkuIEFjdHVhbDogCQABpAAAAAEFAAAAEXNsaXBwYWdlVG9sZXJhbmNlAwkBAAAAAiE9AAAAAgkAAZAAAAABCAUAAAABaQAAAAhwYXltZW50cwAAAAAAAAAAAgkAAAIAAAABAgAAABxUd28gYXR0YWNoZWQgYXNzZXRzIGV4cGVjdGVkAwMJAQAAAAIhPQAAAAIFAAAAC3BtdEFzc2V0SWRBBQAAAAhhc3NldElkQQYJAQAAAAIhPQAAAAIFAAAAC3BtdEFzc2V0SWRCBQAAAAhhc3NldElkQgkAAAIAAAABCQABLAAAAAIJAAEsAAAAAgkAASwAAAACAgAAACVJbmNvcnJlY3QgYXNzZXRzIGF0dGFjaGVkLiBFeHBlY3RlZDogBQAAAAtzdHJBc3NldElkQQIAAAAFIGFuZCAFAAAAC3N0ckFzc2V0SWRCAwMJAABmAAAAAgkAAGkAAAACCQAAaAAAAAIFAAAAC3NjYWxlVmFsdWUzCQAAZQAAAAIFAAAAGnNsaXBwYWdlVG9sZXJhbmNlRGVsaW1pdGVyBQAAABFzbGlwcGFnZVRvbGVyYW5jZQUAAAAac2xpcHBhZ2VUb2xlcmFuY2VEZWxpbWl0ZXIFAAAACnRva2VuUmF0aW8GCQAAZgAAAAIFAAAACnRva2VuUmF0aW8JAABpAAAAAgkAAGgAAAACBQAAAAtzY2FsZVZhbHVlMwkAAGQAAAACBQAAABpzbGlwcGFnZVRvbGVyYW5jZURlbGltaXRlcgUAAAARc2xpcHBhZ2VUb2xlcmFuY2UFAAAAGnNsaXBwYWdlVG9sZXJhbmNlRGVsaW1pdGVyCQAAAgAAAAECAAAAPUluY29ycmVjdCBhc3NldHMgYW1vdW50OiBhbW91bnRzIG11c3QgaGF2ZSB0aGUgY29udHJhY3QgcmF0aW8DCQAAAAAAAAIFAAAAFXNoYXJlVG9rZW5Ub1BheUFtb3VudAAAAAAAAAAAAAkAAAIAAAABAgAAAB1Ub28gc21hbGwgYW1vdW50IHRvIHJlcGxlbmlzaAMJAQAAAAEhAAAAAQUAAAAQaGFzRW5vdWdoQmFsYW5jZQkABE4AAAACCQAETAAAAAIJAQAAAA5TY3JpcHRUcmFuc2ZlcgAAAAMIBQAAAAFpAAAABmNhbGxlcgUAAAAKcG10QW1vdW50QQUAAAALcG10QXNzZXRJZEEJAARMAAAAAgkBAAAADlNjcmlwdFRyYW5zZmVyAAAAAwgFAAAAAWkAAAAGY2FsbGVyBQAAAApwbXRBbW91bnRCBQAAAAtwbXRBc3NldElkQgUAAAADbmlsCQEAAAARc3VzcGVuZFN1c3BpY2lvdXMAAAAACQAETAAAAAIJAQAAAAxJbnRlZ2VyRW50cnkAAAACBQAAAAtrZXlCYWxhbmNlQQkAAGQAAAACBQAAAAhiYWxhbmNlQQUAAAAKcG10QW1vdW50QQkABEwAAAACCQEAAAAMSW50ZWdlckVudHJ5AAAAAgUAAAALa2V5QmFsYW5jZUIJAABkAAAAAgUAAAAIYmFsYW5jZUIFAAAACnBtdEFtb3VudEIJAARMAAAAAgkBAAAADEludGVnZXJFbnRyeQAAAAIFAAAAE2tleVNoYXJlQXNzZXRTdXBwbHkJAABkAAAAAgUAAAAQc2hhcmVBc3NldFN1cHBseQUAAAAVc2hhcmVUb2tlblRvUGF5QW1vdW50CQAETAAAAAIJAQAAAAdSZWlzc3VlAAAAAwUAAAAMc2hhcmVBc3NldElkBQAAABVzaGFyZVRva2VuVG9QYXlBbW91bnQGCQAETAAAAAIJAQAAAA5TY3JpcHRUcmFuc2ZlcgAAAAMIBQAAAAFpAAAABmNhbGxlcgUAAAAVc2hhcmVUb2tlblRvUGF5QW1vdW50BQAAAAxzaGFyZUFzc2V0SWQFAAAAA25pbAAAAAFpAQAAAAh3aXRoZHJhdwAAAAAEAAAADSR0MDEwMzMwMTA0ODAJAAUUAAAAAggJAAGRAAAAAggFAAAAAWkAAAAIcGF5bWVudHMAAAAAAAAAAAAAAAAGYW1vdW50CAkAAZEAAAACCAUAAAABaQAAAAhwYXltZW50cwAAAAAAAAAAAAAAAAdhc3NldElkBAAAAAlwbXRBbW91bnQIBQAAAA0kdDAxMDMzMDEwNDgwAAAAAl8xBAAAAApwbXRBc3NldElkCAUAAAANJHQwMTAzMzAxMDQ4MAAAAAJfMgQAAAAMYW1vdW50VG9QYXlBCQEAAAAQZGVkdWN0U3Rha2luZ0ZlZQAAAAIJAABrAAAAAwUAAAAJcG10QW1vdW50BQAAAAhiYWxhbmNlQQUAAAAQc2hhcmVBc3NldFN1cHBseQUAAAAIYXNzZXRJZEEEAAAADGFtb3VudFRvUGF5QgkBAAAAEGRlZHVjdFN0YWtpbmdGZWUAAAACCQAAawAAAAMFAAAACXBtdEFtb3VudAUAAAAIYmFsYW5jZUIFAAAAEHNoYXJlQXNzZXRTdXBwbHkFAAAACGFzc2V0SWRCAwkBAAAAASEAAAABBQAAAAhpc0FjdGl2ZQkAAAIAAAABAgAAAB9EQXBwIGlzIGluYWN0aXZlIGF0IHRoaXMgbW9tZW50AwkBAAAAAiE9AAAAAgkAAZAAAAABCAUAAAABaQAAAAhwYXltZW50cwAAAAAAAAAAAQkAAAIAAAABAgAAAB1PbmUgYXR0YWNoZWQgcGF5bWVudCBleHBlY3RlZAMJAQAAAAIhPQAAAAIFAAAACnBtdEFzc2V0SWQFAAAADHNoYXJlQXNzZXRJZAkAAAIAAAABCQABLAAAAAICAAAAJEluY29ycmVjdCBhc3NldCBhdHRhY2hlZC4gRXhwZWN0ZWQ6IAkAAlgAAAABBQAAAAxzaGFyZUFzc2V0SWQDCQEAAAABIQAAAAEFAAAAEGhhc0Vub3VnaEJhbGFuY2UJAAROAAAAAgkABEwAAAACCQEAAAAOU2NyaXB0VHJhbnNmZXIAAAADCAUAAAABaQAAAAZjYWxsZXIFAAAACXBtdEFtb3VudAUAAAAKcG10QXNzZXRJZAUAAAADbmlsCQEAAAARc3VzcGVuZFN1c3BpY2lvdXMAAAAAAwMJAABmAAAAAgUAAAAMYW1vdW50VG9QYXlBBQAAABFhdmFpbGFibGVCYWxhbmNlQQYJAABmAAAAAgUAAAAMYW1vdW50VG9QYXlCBQAAABFhdmFpbGFibGVCYWxhbmNlQgkBAAAAInRocm93SW5zdWZmaWNpZW50QXZhaWxhYmxlQmFsYW5jZXMAAAACBQAAAAxhbW91bnRUb1BheUEFAAAADGFtb3VudFRvUGF5QgkABEwAAAACCQEAAAAMSW50ZWdlckVudHJ5AAAAAgUAAAALa2V5QmFsYW5jZUEJAABlAAAAAgUAAAAIYmFsYW5jZUEFAAAADGFtb3VudFRvUGF5QQkABEwAAAACCQEAAAAMSW50ZWdlckVudHJ5AAAAAgUAAAALa2V5QmFsYW5jZUIJAABlAAAAAgUAAAAIYmFsYW5jZUIFAAAADGFtb3VudFRvUGF5QgkABEwAAAACCQEAAAAMSW50ZWdlckVudHJ5AAAAAgUAAAATa2V5U2hhcmVBc3NldFN1cHBseQkAAGUAAAACBQAAABBzaGFyZUFzc2V0U3VwcGx5BQAAAAlwbXRBbW91bnQJAARMAAAAAgkBAAAABEJ1cm4AAAACBQAAAAxzaGFyZUFzc2V0SWQFAAAACXBtdEFtb3VudAkABEwAAAACCQEAAAAOU2NyaXB0VHJhbnNmZXIAAAADCAUAAAABaQAAAAZjYWxsZXIFAAAADGFtb3VudFRvUGF5QQUAAAAIYXNzZXRJZEEJAARMAAAAAgkBAAAADlNjcmlwdFRyYW5zZmVyAAAAAwgFAAAAAWkAAAAGY2FsbGVyBQAAAAxhbW91bnRUb1BheUIFAAAACGFzc2V0SWRCBQAAAANuaWwAAAABaQEAAAAIZXhjaGFuZ2UAAAABAAAAEm1pbkFtb3VudFRvUmVjZWl2ZQQAAAANJHQwMTE2ODcxMTc2MgkABRQAAAACCAkAAZEAAAACCAUAAAABaQAAAAhwYXltZW50cwAAAAAAAAAAAAAAAAZhbW91bnQICQABkQAAAAIIBQAAAAFpAAAACHBheW1lbnRzAAAAAAAAAAAAAAAAB2Fzc2V0SWQEAAAACXBtdEFtb3VudAgFAAAADSR0MDExNjg3MTE3NjIAAAACXzEEAAAACnBtdEFzc2V0SWQIBQAAAA0kdDAxMTY4NzExNzYyAAAAAl8yCgEAAAANY2FsY3VsYXRlRmVlcwAAAAIAAAAJdG9rZW5Gcm9tAAAAB3Rva2VuVG8EAAAAEGFtb3VudFdpdGhvdXRGZWUJAABrAAAAAwUAAAAHdG9rZW5UbwUAAAAJcG10QW1vdW50CQAAZAAAAAIFAAAACXBtdEFtb3VudAUAAAAJdG9rZW5Gcm9tBAAAAA1hbW91bnRXaXRoRmVlCQAAawAAAAMFAAAAEGFtb3VudFdpdGhvdXRGZWUJAABlAAAAAgUAAAAYY29tbWlzc2lvblNjYWxlRGVsaW1pdGVyBQAAAApjb21taXNzaW9uBQAAABhjb21taXNzaW9uU2NhbGVEZWxpbWl0ZXIEAAAAEGdvdmVybmFuY2VSZXdhcmQJAABrAAAAAwUAAAAQYW1vdW50V2l0aG91dEZlZQUAAAAUY29tbWlzc2lvbkdvdmVybmFuY2UFAAAAGGNvbW1pc3Npb25TY2FsZURlbGltaXRlcgMJAABmAAAAAgUAAAASbWluQW1vdW50VG9SZWNlaXZlBQAAAA1hbW91bnRXaXRoRmVlCQAAAgAAAAEJAAEsAAAAAgkAASwAAAACCQABLAAAAAICAAAAHUNhbGN1bGF0ZWQgYW1vdW50IHRvIHJlY2VpdmUgCQABpAAAAAEFAAAADWFtb3VudFdpdGhGZWUCAAAAICBpcyBsZXNzIHRoYW4gc3BlY2lmaWVkIG1pbmltdW0gCQABpAAAAAEFAAAAEm1pbkFtb3VudFRvUmVjZWl2ZQkABRUAAAADBQAAABBhbW91bnRXaXRob3V0RmVlBQAAAA1hbW91bnRXaXRoRmVlBQAAABBnb3Zlcm5hbmNlUmV3YXJkAwkBAAAAASEAAAABBQAAAAhpc0FjdGl2ZQkAAAIAAAABAgAAAB9EQXBwIGlzIGluYWN0aXZlIGF0IHRoaXMgbW9tZW50AwkAAGcAAAACAAAAAAAAAAAABQAAABJtaW5BbW91bnRUb1JlY2VpdmUJAAACAAAAAQkAASwAAAACAgAAADRNaW5pbWFsIGFtb3VudCB0byByZWNlaXZlIG11c3QgYmUgcG9zaXRpdmUuIEFjdHVhbDogCQABpAAAAAEFAAAAEm1pbkFtb3VudFRvUmVjZWl2ZQMJAQAAAAIhPQAAAAIJAAGQAAAAAQgFAAAAAWkAAAAIcGF5bWVudHMAAAAAAAAAAAEJAAACAAAAAQIAAAAdT25lIGF0dGFjaGVkIHBheW1lbnQgZXhwZWN0ZWQDCQEAAAABIQAAAAEFAAAAEGhhc0Vub3VnaEJhbGFuY2UJAAROAAAAAgkABEwAAAACCQEAAAAOU2NyaXB0VHJhbnNmZXIAAAADCAUAAAABaQAAAAZjYWxsZXIFAAAACXBtdEFtb3VudAUAAAAKcG10QXNzZXRJZAUAAAADbmlsCQEAAAARc3VzcGVuZFN1c3BpY2lvdXMAAAAAAwkAAAAAAAACBQAAAApwbXRBc3NldElkBQAAAAhhc3NldElkQQQAAAALYXNzZXRJZFNlbmQFAAAACGFzc2V0SWRCBAAAAA0kdDAxMjkzODEzMDI5CQEAAAANY2FsY3VsYXRlRmVlcwAAAAIFAAAACGJhbGFuY2VBBQAAAAhiYWxhbmNlQgQAAAAQYW1vdW50V2l0aG91dEZlZQgFAAAADSR0MDEyOTM4MTMwMjkAAAACXzEEAAAADWFtb3VudFdpdGhGZWUIBQAAAA0kdDAxMjkzODEzMDI5AAAAAl8yBAAAABBnb3Zlcm5hbmNlUmV3YXJkCAUAAAANJHQwMTI5MzgxMzAyOQAAAAJfMwQAAAALbmV3QmFsYW5jZUEJAABkAAAAAgUAAAAIYmFsYW5jZUEFAAAACXBtdEFtb3VudAQAAAALbmV3QmFsYW5jZUIJAABlAAAAAgkAAGUAAAACBQAAAAhiYWxhbmNlQgUAAAANYW1vdW50V2l0aEZlZQUAAAAQZ292ZXJuYW5jZVJld2FyZAMDCQAAZwAAAAIFAAAADXN0YWtlZEFtb3VudEEFAAAAC25ld0JhbGFuY2VBBgkAAGcAAAACBQAAAA1zdGFrZWRBbW91bnRCBQAAAAtuZXdCYWxhbmNlQgkBAAAAIXRocm93SW5zdWZmaWNpZW50QXZhaWxhYmxlQmFsYW5jZQAAAAMFAAAADWFtb3VudFdpdGhGZWUFAAAAEWF2YWlsYWJsZUJhbGFuY2VCBQAAAAphc3NldE5hbWVCCQAETAAAAAIJAQAAAAxJbnRlZ2VyRW50cnkAAAACBQAAAAtrZXlCYWxhbmNlQQUAAAALbmV3QmFsYW5jZUEJAARMAAAAAgkBAAAADEludGVnZXJFbnRyeQAAAAIFAAAAC2tleUJhbGFuY2VCBQAAAAtuZXdCYWxhbmNlQgkABEwAAAACCQEAAAAOU2NyaXB0VHJhbnNmZXIAAAADCAUAAAABaQAAAAZjYWxsZXIFAAAADWFtb3VudFdpdGhGZWUFAAAAC2Fzc2V0SWRTZW5kCQAETAAAAAIJAQAAAA5TY3JpcHRUcmFuc2ZlcgAAAAMFAAAAEWdvdmVybmFuY2VBZGRyZXNzBQAAABBnb3Zlcm5hbmNlUmV3YXJkBQAAAAthc3NldElkU2VuZAUAAAADbmlsAwkAAAAAAAACBQAAAApwbXRBc3NldElkBQAAAAhhc3NldElkQgQAAAALYXNzZXRJZFNlbmQFAAAACGFzc2V0SWRBBAAAAA0kdDAxMzg1MjEzOTQzCQEAAAANY2FsY3VsYXRlRmVlcwAAAAIFAAAACGJhbGFuY2VCBQAAAAhiYWxhbmNlQQQAAAAQYW1vdW50V2l0aG91dEZlZQgFAAAADSR0MDEzODUyMTM5NDMAAAACXzEEAAAADWFtb3VudFdpdGhGZWUIBQAAAA0kdDAxMzg1MjEzOTQzAAAAAl8yBAAAABBnb3Zlcm5hbmNlUmV3YXJkCAUAAAANJHQwMTM4NTIxMzk0MwAAAAJfMwQAAAALbmV3QmFsYW5jZUEJAABlAAAAAgkAAGUAAAACBQAAAAhiYWxhbmNlQQUAAAANYW1vdW50V2l0aEZlZQUAAAAQZ292ZXJuYW5jZVJld2FyZAQAAAALbmV3QmFsYW5jZUIJAABkAAAAAgUAAAAIYmFsYW5jZUIFAAAACXBtdEFtb3VudAMDCQAAZwAAAAIFAAAADXN0YWtlZEFtb3VudEEFAAAAC25ld0JhbGFuY2VBBgkAAGcAAAACBQAAAA1zdGFrZWRBbW91bnRCBQAAAAtuZXdCYWxhbmNlQgkBAAAAIXRocm93SW5zdWZmaWNpZW50QXZhaWxhYmxlQmFsYW5jZQAAAAMFAAAADWFtb3VudFdpdGhGZWUFAAAAEWF2YWlsYWJsZUJhbGFuY2VBBQAAAAphc3NldE5hbWVBCQAETAAAAAIJAQAAAAxJbnRlZ2VyRW50cnkAAAACBQAAAAtrZXlCYWxhbmNlQQUAAAALbmV3QmFsYW5jZUEJAARMAAAAAgkBAAAADEludGVnZXJFbnRyeQAAAAIFAAAAC2tleUJhbGFuY2VCBQAAAAtuZXdCYWxhbmNlQgkABEwAAAACCQEAAAAOU2NyaXB0VHJhbnNmZXIAAAADCAUAAAABaQAAAAZjYWxsZXIFAAAADWFtb3VudFdpdGhGZWUFAAAAC2Fzc2V0SWRTZW5kCQAETAAAAAIJAQAAAA5TY3JpcHRUcmFuc2ZlcgAAAAMFAAAAEWdvdmVybmFuY2VBZGRyZXNzBQAAABBnb3Zlcm5hbmNlUmV3YXJkBQAAAAthc3NldElkU2VuZAUAAAADbmlsCQAAAgAAAAEJAAEsAAAAAgkAASwAAAACCQABLAAAAAICAAAAJEluY29ycmVjdCBhc3NldCBhdHRhY2hlZC4gRXhwZWN0ZWQ6IAUAAAALc3RyQXNzZXRJZEECAAAABCBvciAFAAAAC3N0ckFzc2V0SWRCAAAAAWkBAAAACHNodXRkb3duAAAAAAMJAQAAAAEhAAAAAQUAAAAIaXNBY3RpdmUJAAACAAAAAQkAASwAAAACAgAAACJEQXBwIGlzIGFscmVhZHkgc3VzcGVuZGVkLiBDYXVzZTogCQEAAAALdmFsdWVPckVsc2UAAAACCQAEHQAAAAIFAAAABHRoaXMFAAAACGtleUNhdXNlAgAAABp0aGUgY2F1c2Ugd2Fzbid0IHNwZWNpZmllZAMJAQAAAAEhAAAAAQkBAAAAD2NvbnRhaW5zRWxlbWVudAAAAAIJAARMAAAAAgUAAAAMYWRtaW5QdWJLZXkxCQAETAAAAAIFAAAADGFkbWluUHViS2V5MgkABEwAAAACBQAAAAxhZG1pblB1YktleTMJAARMAAAAAgUAAAAUYWRtaW5QdWJLZXlTdGFydFN0b3AFAAAAA25pbAgFAAAAAWkAAAAPY2FsbGVyUHVibGljS2V5CQAAAgAAAAECAAAAIU9ubHkgYWRtaW4gY2FuIGNhbGwgdGhpcyBmdW5jdGlvbgkBAAAAB3N1c3BlbmQAAAABAgAAAA9QYXVzZWQgYnkgYWRtaW4AAAABaQEAAAAIYWN0aXZhdGUAAAAAAwUAAAAIaXNBY3RpdmUJAAACAAAAAQIAAAAWREFwcCBpcyBhbHJlYWR5IGFjdGl2ZQMJAQAAAAEhAAAAAQkBAAAAD2NvbnRhaW5zRWxlbWVudAAAAAIJAARMAAAAAgUAAAAMYWRtaW5QdWJLZXkxCQAETAAAAAIFAAAADGFkbWluUHViS2V5MgkABEwAAAACBQAAAAxhZG1pblB1YktleTMJAARMAAAAAgUAAAAUYWRtaW5QdWJLZXlTdGFydFN0b3AFAAAAA25pbAgFAAAAAWkAAAAPY2FsbGVyUHVibGljS2V5CQAAAgAAAAECAAAAIU9ubHkgYWRtaW4gY2FuIGNhbGwgdGhpcyBmdW5jdGlvbgkABEwAAAACCQEAAAAMQm9vbGVhbkVudHJ5AAAAAgUAAAAJa2V5QWN0aXZlBgkABEwAAAACCQEAAAALRGVsZXRlRW50cnkAAAABBQAAAAhrZXlDYXVzZQUAAAADbmlsAAAAAWkBAAAAGXRha2VJbnRvQWNjb3VudEV4dHJhRnVuZHMAAAABAAAAC2Ftb3VudExlYXZlBAAAAB11bmNvdW50YWJsZUFtb3VudEVucm9sbEFzc2V0QQkAAGUAAAACBQAAABlhY2NvdW50QmFsYW5jZVdpdGhTdGFrZWRBBQAAAAhiYWxhbmNlQQQAAAAddW5jb3VudGFibGVBbW91bnRFbnJvbGxBc3NldEIJAABlAAAAAgUAAAAZYWNjb3VudEJhbGFuY2VXaXRoU3Rha2VkQgUAAAAIYmFsYW5jZUIEAAAADWFtb3VudEVucm9sbEEJAABlAAAAAgUAAAAddW5jb3VudGFibGVBbW91bnRFbnJvbGxBc3NldEEDCQAAAAAAAAIFAAAACGFzc2V0SWRBBQAAAAR1bml0BQAAAAthbW91bnRMZWF2ZQAAAAAAAAAAAAQAAAANYW1vdW50RW5yb2xsQgkAAGUAAAACBQAAAB11bmNvdW50YWJsZUFtb3VudEVucm9sbEFzc2V0QgMJAAAAAAAAAgUAAAAIYXNzZXRJZEIFAAAABHVuaXQFAAAAC2Ftb3VudExlYXZlAAAAAAAAAAAAAwkBAAAAASEAAAABBQAAAAhpc0FjdGl2ZQkAAAIAAAABAgAAAB9EQXBwIGlzIGluYWN0aXZlIGF0IHRoaXMgbW9tZW50AwkBAAAAAiE9AAAAAggFAAAAAWkAAAAGY2FsbGVyBQAAAAR0aGlzCQAAAgAAAAECAAAAK09ubHkgdGhlIERBcHAgaXRzZWxmIGNhbiBjYWxsIHRoaXMgZnVuY3Rpb24DCQAAZgAAAAIAAAAAAAAAAAAFAAAAC2Ftb3VudExlYXZlCQAAAgAAAAEJAAEsAAAAAgIAAAAzQXJndW1lbnQgJ2Ftb3Vu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", "height": 1622023, "applicationStatus": "succeeded", "spentComplexity": 0 } View: original | compacted Prev: 94PoeraAsNjxtnL8ya3Hkev1YB6BHN2NhhKXSgX3CJ9r Next: none Diff:
OldNewDifferences
1515
1616 let g = "B_asset_balance"
1717
18-let h = "A_asset_init"
18+let h = "share_asset_id"
1919
20-let i = "B_asset_init"
20+let i = "share_asset_supply"
2121
22-let j = "share_asset_id"
22+let j = "commission"
2323
24-let k = "share_asset_supply"
24+let k = "commission_scale_delimiter"
2525
26-let l = "commission"
26+let l = "shutdown_cause"
2727
28-let m = "commission_scale_delimiter"
28+let m = "admin_pub_1"
2929
30-let n = "shutdown_cause"
30+let n = "admin_pub_2"
3131
32-let o = "first_harvest"
32+let o = "admin_pub_3"
3333
34-let p = "first_harvest_height"
34+let p = Address(base58'3NBBWfzZtZtszaXbitTKnrB2xXwv26Bn7H9')
3535
36-let q = "share_limit_on_first_harvest"
37-
38-let r = "base_period"
39-
40-let s = "period_length"
41-
42-let t = "start_height"
43-
44-let u = "first_harvest_height"
45-
46-let v = "admin_pub_1"
47-
48-let w = "admin_pub_2"
49-
50-let x = "admin_pub_3"
51-
52-let y = Address(base58'3NBBWfzZtZtszaXbitTKnrB2xXwv26Bn7H9')
53-
54-func z (A) = {
55- let B = getString(y, A)
56- if ($isInstanceOf(B, "String"))
36+func q (r) = {
37+ let s = getString(p, r)
38+ if ($isInstanceOf(s, "String"))
5739 then {
58- let C = B
59- fromBase58String(C)
40+ let t = s
41+ fromBase58String(t)
6042 }
6143 else {
62- let D = B
44+ let u = s
6345 throw("Admin public key is empty")
6446 }
6547 }
6648
6749
68-let E = z(v)
50+let v = q(m)
6951
70-let F = z(w)
52+let w = q(n)
7153
72-let G = z(x)
54+let x = q(o)
7355
74-let H = base58'Kn7NpzaG12dLZgcHf2ipUftU6hbJygmrhFqQYE4B7ZK'
56+let y = base58'Kn7NpzaG12dLZgcHf2ipUftU6hbJygmrhFqQYE4B7ZK'
7557
76-let I = base58'Kn7NpzaG12dLZgcHf2ipUftU6hbJygmrhFqQYE4B7ZK'
58+let z = base58'Kn7NpzaG12dLZgcHf2ipUftU6hbJygmrhFqQYE4B7ZK'
7759
78-let J = Address(base58'3NAGTtZz6WpupSN89NZD5rMZwwziZEg4Kx4')
60+let A = Address(base58'3NAGTtZz6WpupSN89NZD5rMZwwziZEg4Kx4')
7961
80-let K = Address(base58'3MrJgdL1GniipErHy44YF9idzLaUL2iX5DQ')
62+let B = Address(base58'3N6q7sCGSSLBUXDdjBdYGTJbZGZfhhh8cNg')
8163
82-let L = Address(base58'3N6q7sCGSSLBUXDdjBdYGTJbZGZfhhh8cNg')
64+let C = base58'8UrfDVd5GreeUwm7uPk7eYz1eMv376kzR52C6sANPkwS'
8365
84-let M = Address(base58'3Mvutbqb6ykHHvNCCgELTNzyAMaPTqFMixX')
66+let D = base58'36mg8NZTaFRDygiVwb8uBnLR51hetJruUCZcxhaVcHj9'
8567
86-let N = valueOrErrorMessage(getInteger(K, r), "Empty kBasePeriod")
68+let E = base58'2HAJrwa8q4SxBx9cHYaBTQdBjdk5wwqdof7ccpAx2uhZ'
8769
88-let O = valueOrErrorMessage(getInteger(K, t), "Empty kStartHeight")
70+let F = Address(base58'3Mvutbqb6ykHHvNCCgELTNzyAMaPTqFMixX')
8971
90-let P = valueOrErrorMessage(getInteger(K, s), "Empty kPeriodLength")
72+let G = Address(base58'8iwQUs2Q5bPLYULK5U24DR9msCpRQbVagtRWantBuNkp')
9173
92-let Q = ((N + ((height - O) / P)) + 3)
74+let H = 270000
9375
94-let R = base58'DG2xFkPdDwKUoBkzGAhQtLpSGzfXLiCYPEzeKH2Ad24p'
76+let I = getBooleanValue(this, c)
9577
96-let S = 270000
78+let J = getStringValue(this, d)
9779
98-let T = getBooleanValue(this, c)
80+let K = getStringValue(this, e)
9981
100-let U = getStringValue(this, d)
82+let L = if ((J == "WAVES"))
83+ then unit
84+ else fromBase58String(J)
10185
102-let V = getStringValue(this, e)
86+let M = if ((K == "WAVES"))
87+ then unit
88+ else fromBase58String(K)
10389
104-let W = if ((U == "WAVES"))
105- then unit
106- else fromBase58String(U)
107-
108-let X = if ((V == "WAVES"))
109- then unit
110- else fromBase58String(V)
111-
112-let Y = {
113- let B = W
114- if ($isInstanceOf(B, "ByteVector"))
90+let N = {
91+ let s = L
92+ if ($isInstanceOf(s, "ByteVector"))
11593 then {
116- let Z = B
117- value(assetInfo(Z)).name
94+ let O = s
95+ value(assetInfo(O)).name
11896 }
119- else if ($isInstanceOf(B, "Unit"))
97+ else if ($isInstanceOf(s, "Unit"))
12098 then {
121- let aa = B
99+ let P = s
122100 "WAVES"
123101 }
124102 else throw("Match error")
125103 }
126104
127-let ab = {
128- let B = X
129- if ($isInstanceOf(B, "ByteVector"))
105+let Q = {
106+ let s = M
107+ if ($isInstanceOf(s, "ByteVector"))
130108 then {
131- let Z = B
132- value(assetInfo(Z)).name
109+ let O = s
110+ value(assetInfo(O)).name
133111 }
134- else if ($isInstanceOf(B, "Unit"))
112+ else if ($isInstanceOf(s, "Unit"))
135113 then {
136- let aa = B
114+ let P = s
137115 "WAVES"
138116 }
139117 else throw("Match error")
140118 }
141119
142-let ac = getIntegerValue(this, f)
120+let R = getIntegerValue(this, f)
143121
144-let ad = getIntegerValue(this, g)
122+let S = getIntegerValue(this, g)
145123
146-let ae = fromBase58String(getStringValue(this, j))
124+let T = fromBase58String(getStringValue(this, h))
147125
148-let af = getIntegerValue(this, k)
126+let U = getIntegerValue(this, i)
149127
150-let ag = 3000
128+let V = 3000
151129
152-let ah = 1200
130+let W = 1200
153131
154-let ai = 1000000
132+let X = 1000000
155133
156-let aj = 1000
134+let Y = 1000
157135
158-let ak = 100000000
136+let Z = 100000000
159137
160-let al = 1000
138+let aa = 1000
161139
162-let am = 8
140+let ab = 8
163141
164-func an (ao) = {
165- let B = ao
166- if ($isInstanceOf(B, "ByteVector"))
142+func ac (ad) = {
143+ let s = ad
144+ if ($isInstanceOf(s, "ByteVector"))
167145 then {
168- let Z = B
169- assetBalance(this, Z)
146+ let O = s
147+ assetBalance(this, O)
170148 }
171- else if ($isInstanceOf(B, "Unit"))
149+ else if ($isInstanceOf(s, "Unit"))
172150 then {
173- let aa = B
151+ let P = s
174152 wavesBalance(this).available
175153 }
176154 else throw("Match error")
177155 }
178156
179157
180-let ap = {
181- let B = getInteger(L, ((("rpd_balance_" + toBase58String(R)) + "_") + toString(this)))
182- if ($isInstanceOf(B, "Int"))
183- then {
184- let aq = B
185- aq
186- }
187- else if ($isInstanceOf(B, "Unit"))
158+func ae (af,ag) = {
159+ let ah = {
160+ let s = getInteger(af, ((("rpd_balance_" + ag) + "_") + toString(this)))
161+ if ($isInstanceOf(s, "Int"))
188162 then {
189- let D = B
190- 0
163+ let ai = s
164+ ai
191165 }
192- else throw("Match error")
166+ else if ($isInstanceOf(s, "Unit"))
167+ then {
168+ let u = s
169+ 0
170+ }
171+ else throw("Match error")
172+ }
173+ ah
193174 }
194175
195-let ar = getIntegerValue(this, h)
196176
197-let as = getIntegerValue(this, i)
177+let aj = ae(B, J)
198178
199-let at = (ac - (if ((W == R))
200- then ap
201- else 0))
179+let ak = ae(B, K)
202180
203-let au = (ad - (if ((X == R))
204- then ap
205- else 0))
181+let al = (R - aj)
206182
207-let av = (an(W) + (if ((W == R))
208- then ap
209- else 0))
183+let am = (S - ak)
210184
211-let aw = (an(X) + (if ((X == R))
212- then ap
213- else 0))
185+let an = (ac(L) + aj)
214186
215-let ax = if ((av >= ac))
216- then (aw >= ad)
187+let ao = (ac(M) + ak)
188+
189+let ap = if ((an >= R))
190+ then (ao >= S)
217191 else false
218192
219-func ay (ao) = {
220- let B = ao
221- if ($isInstanceOf(B, "ByteVector"))
193+func aq (ad) = {
194+ let s = ad
195+ if ($isInstanceOf(s, "ByteVector"))
222196 then {
223- let Z = B
224- let az = toBase58String(Z)
225- let aA = valueOrErrorMessage(assetInfo(Z), (("Asset " + az) + " doesn't exist"))
226- $Tuple3(az, aA.name, aA.decimals)
197+ let O = s
198+ let ar = toBase58String(O)
199+ let as = valueOrErrorMessage(assetInfo(O), (("Asset " + ar) + " doesn't exist"))
200+ $Tuple3(ar, as.name, as.decimals)
227201 }
228- else if ($isInstanceOf(B, "Unit"))
202+ else if ($isInstanceOf(s, "Unit"))
229203 then {
230- let aa = B
204+ let P = s
231205 $Tuple3("WAVES", "WAVES", 8)
232206 }
233207 else throw("Match error")
234208 }
235209
236210
237-func aB (aC) = if ((aC == "WAVES"))
238- then $Tuple3("WAVES", "WAVES", 8)
239- else {
240- let az = aC
241- let Z = fromBase58String(aC)
242- let aA = valueOrErrorMessage(assetInfo(Z), (("Asset " + az) + " doesn't exist"))
243- $Tuple3(az, aA.name, aA.decimals)
244- }
211+func at (au) = [BooleanEntry(c, false), StringEntry(l, au)]
245212
246213
247-func aD (aE) = [BooleanEntry(c, false), StringEntry(n, aE)]
214+func av () = {
215+ let aw = if ((aj > 0))
216+ then 1
217+ else 0
218+ let ax = if ((ak > 0))
219+ then 1
220+ else 0
221+ (aw + ax)
222+ }
248223
249224
250-func aF (aG,ao) = if ((ao == R))
225+func ay (az,ad) = if ((ad == C))
251226 then {
252- let aH = (aG - S)
253- if ((0 >= aH))
254- then throw((((("Insufficient amount " + toString(aG)) + " to deduct staking fee ") + toString(S)) + " USD-N"))
255- else aH
227+ let aA = (az - (av() * H))
228+ if ((0 >= aA))
229+ then throw((((("Insufficient amount " + toString(az)) + " to deduct staking fee ") + toString(H)) + " USD-N"))
230+ else aA
256231 }
257- else aG
232+ else az
258233
259234
260-func aI (aG,aJ,aK) = throw((((((((("Insufficient DApp balance to pay " + toString(aG)) + " ") + aK) + " due to staking. Available: ") + toString(aJ)) + " ") + aK) + ". Please contact support in Telegram: https://t.me/swopfisupport"))
235+func aB (az,aC,aD) = throw((((((((("Insufficient DApp balance to pay " + toString(az)) + " ") + aD) + " due to staking. Available: ") + toString(aC)) + " ") + aD) + ". Please contact support in Telegram: https://t.me/swopfisupport"))
261236
262237
263-func aL (aM,aN) = throw((((((((((((((((("Insufficient DApp balance to pay " + toString(aM)) + " ") + Y) + " and ") + toString(aN)) + " ") + ab) + " due to staking. Available: ") + toString(at)) + " ") + Y) + " and ") + toString(au)) + " ") + ab) + ". Please contact support in Telegram: https://t.me/swopfisupport"))
238+func aE (aF,aG) = throw((((((((((((((((("Insufficient DApp balance to pay " + toString(aF)) + " ") + N) + " and ") + toString(aG)) + " ") + Q) + " due to staking. Available: ") + toString(al)) + " ") + N) + " and ") + toString(am)) + " ") + Q) + ". Please contact support in Telegram: https://t.me/swopfisupport"))
264239
265240
266-func aO () = aD(((((((((((((((("Suspicious state. Actual balances: " + toString(av)) + " ") + Y) + ", ") + toString(aw)) + " ") + ab) + ". State: ") + toString(ac)) + " ") + Y) + ", ") + toString(ad)) + " ") + ab))
241+func aH () = at(((((((((((((((("Suspicious state. Actual balances: " + toString(an)) + " ") + N) + ", ") + toString(ao)) + " ") + Q) + ". State: ") + toString(R)) + " ") + N) + ", ") + toString(S)) + " ") + Q))
267242
268243
269-@Callable(aP)
270-func init (aQ) = {
271- let aR = $Tuple2(aP.payments[0].amount, aP.payments[0].assetId)
272- let aS = aR._1
273- let aT = aR._2
274- let aU = $Tuple2(aP.payments[1].amount, aP.payments[1].assetId)
275- let aV = aU._1
276- let aW = aU._2
277- let aX = ay(aT)
278- let aY = aX._1
279- let aZ = aX._2
280- let ba = aX._3
281- let bb = ay(aW)
282- let bc = bb._1
283- let bd = bb._2
284- let be = bb._3
285- if (!(containsElement([E, F, G, I], aP.callerPublicKey)))
286- then throw("Only admin can call this function")
287- else if (isDefined(getBoolean(this, c)))
288- then throw("DApp is already active")
289- else if ((aT == aW))
290- then throw("Assets must be different")
291- else {
292- let bf = ((("s" + take(aZ, 7)) + "_") + take(bd, 7))
293- let bg = ((((("ShareToken of SwopFi protocol for " + aZ) + " and ") + bd) + " at address ") + toString(this))
294- let bh = ((ba + be) / 2)
295- let bi = pow(aS, ba, 5, 1, ba, DOWN)
296- let bj = pow(aV, be, 5, 1, be, DOWN)
297- let bk = pow(10, 0, bh, 0, 0, DOWN)
298- let bl = fraction(bi, bj, bk)
299- let bm = Issue(bf, bg, bl, bh, true)
300- let bn = calculateAssetId(bm)
301- let bo = [StringEntry(b, a), BooleanEntry(c, true), StringEntry(d, aY), StringEntry(e, bc), IntegerEntry(f, aS), IntegerEntry(g, aV), IntegerEntry(l, ag), IntegerEntry(m, ai), bm, StringEntry(j, toBase58String(bn)), IntegerEntry(k, bl), ScriptTransfer(aP.caller, bl, bn)]
302- if (aQ)
303- then (bo ++ [BooleanEntry(o, aQ), IntegerEntry(p, (O + (Q * P)))])
304- else bo
305- }
244+@Callable(aI)
245+func init () = {
246+ let aJ = $Tuple2(aI.payments[0].amount, aI.payments[0].assetId)
247+ let aK = aJ._1
248+ let aL = aJ._2
249+ let aM = $Tuple2(aI.payments[1].amount, aI.payments[1].assetId)
250+ let aN = aM._1
251+ let aO = aM._2
252+ let aP = aq(aL)
253+ let aQ = aP._1
254+ let aR = aP._2
255+ let aS = aP._3
256+ let aT = aq(aO)
257+ let aU = aT._1
258+ let aV = aT._2
259+ let aW = aT._3
260+ if (isDefined(getBoolean(this, c)))
261+ then throw("DApp is already active")
262+ else if ((aL == aO))
263+ then throw("Assets must be different")
264+ else {
265+ let aX = ((("s" + take(aR, 7)) + "_") + take(aV, 7))
266+ let aY = ((((("ShareToken of SwopFi protocol for " + aR) + " and ") + aV) + " at address ") + toString(this))
267+ let aZ = ((aS + aW) / 2)
268+ let ba = fraction(pow(aK, aS, 5, 1, aS, DOWN), pow(aN, aW, 5, 1, aW, DOWN), pow(10, 0, aZ, 0, 0, DOWN))
269+ let bb = Issue(aX, aY, ba, aZ, true)
270+ let bc = calculateAssetId(bb)
271+[StringEntry(b, a), BooleanEntry(c, true), StringEntry(d, aQ), StringEntry(e, aU), IntegerEntry(f, aK), IntegerEntry(g, aN), IntegerEntry(j, V), IntegerEntry(k, X), bb, StringEntry(h, toBase58String(bc)), IntegerEntry(i, ba), ScriptTransfer(aI.caller, ba, bc)]
272+ }
306273 }
307274
308275
309276
310-@Callable(aP)
311-func initWithInitRatio (bp,bq,U,V,aQ) = {
312- let br = aB(U)
313- let aY = br._1
314- let aZ = br._2
315- let ba = br._3
316- let bs = aB(V)
317- let bc = bs._1
318- let bd = bs._2
319- let be = bs._3
320- if (!(containsElement([E, F, G, I], aP.callerPublicKey)))
321- then throw("Only admin can call this function")
322- else if (isDefined(getBoolean(this, c)))
323- then throw("DApp is already active")
324- else if ((U == V))
325- then throw("Assets must be different")
326- else {
327- let bf = ((("s" + take(aZ, 7)) + "_") + take(bd, 7))
328- let bg = ((((("ShareToken of SwopFi protocol for " + aZ) + " and ") + bd) + " at address ") + toString(this))
329- let bh = ((ba + be) / 2)
330- let bl = 0
331- let bm = Issue(bf, bg, bl, bh, true)
332- let bn = calculateAssetId(bm)
333- let bo = [StringEntry(b, a), BooleanEntry(c, true), StringEntry(d, aY), StringEntry(e, bc), IntegerEntry(h, bp), IntegerEntry(i, bq), IntegerEntry(f, 0), IntegerEntry(g, 0), IntegerEntry(l, ag), IntegerEntry(m, ai), bm, StringEntry(j, toBase58String(bn)), IntegerEntry(k, bl)]
334- if (aQ)
335- then (bo ++ [BooleanEntry(o, aQ), IntegerEntry(p, (O + (Q * P)))])
336- else bo
337- }
277+@Callable(aI)
278+func replenishWithTwoTokens (bd) = {
279+ let aL = aI.payments[0].assetId
280+ let aO = aI.payments[1].assetId
281+ let aK = ay(aI.payments[0].amount, aL)
282+ let aN = ay(aI.payments[1].amount, aO)
283+ let be = fraction(fraction(R, Z, aK), Y, fraction(S, Z, aN))
284+ let bf = fraction(aK, Z, R)
285+ let bg = fraction(aN, Z, S)
286+ let bh = fraction(min([bf, bg]), U, Z)
287+ if (!(I))
288+ then throw("DApp is inactive at this moment")
289+ else if (if ((0 > bd))
290+ then true
291+ else (bd > aa))
292+ then throw(((("Slippage tolerance must be between 0 and " + toString(aa)) + " inclusively. Actual: ") + toString(bd)))
293+ else if ((size(aI.payments) != 2))
294+ then throw("Two attached assets expected")
295+ else if (if ((aL != L))
296+ then true
297+ else (aO != M))
298+ then throw(((("Incorrect assets attached. Expected: " + J) + " and ") + K))
299+ else if (if ((((Y * (aa - bd)) / aa) > be))
300+ then true
301+ else (be > ((Y * (aa + bd)) / aa)))
302+ then throw("Incorrect assets amount: amounts must have the contract ratio")
303+ else if ((bh == 0))
304+ then throw("Too small amount to replenish")
305+ else if (!(ap))
306+ then ([ScriptTransfer(aI.caller, aK, aL), ScriptTransfer(aI.caller, aN, aO)] ++ aH())
307+ else [IntegerEntry(f, (R + aK)), IntegerEntry(g, (S + aN)), IntegerEntry(i, (U + bh)), Reissue(T, bh, true), ScriptTransfer(aI.caller, bh, T)]
338308 }
339309
340310
341311
342-@Callable(aP)
343-func keepLimitForFirstHarvest (bt) = if (!(T))
344- then throw("DApp is inactive at this moment")
345- else if (!(containsElement([E, F, G, I], aP.callerPublicKey)))
346- then throw("Only admin can call this function")
347- else [IntegerEntry(q, bt)]
348-
349-
350-
351-@Callable(aP)
352-func replenishWithTwoTokens (bu) = {
353- let aT = aP.payments[0].assetId
354- let aW = aP.payments[1].assetId
355- let aS = aF(aP.payments[0].amount, aT)
356- let aV = aF(aP.payments[1].amount, aW)
357- if (if ((ac == 0))
358- then (ad == 0)
359- else false)
360- then {
361- let bv = ay(aT)
362- let aY = bv._1
363- let aZ = bv._2
364- let ba = bv._3
365- let bw = ay(aW)
366- let bc = bw._1
367- let bd = bw._2
368- let be = bw._3
369- let bx = fraction(fraction(ar, ak, aS), aj, fraction(as, ak, aV))
370- if ((aT == aW))
371- then throw("Assets must be different")
372- else {
373- let bh = ((ba + be) / 2)
374- let bl = fraction(pow(aS, ba, 5, 1, ba, DOWN), pow(aV, be, 5, 1, be, DOWN), pow(10, 0, bh, 0, 0, DOWN))
375- if (!(T))
376- then throw("DApp is inactive at this moment")
377- else if (if ((0 > bu))
378- then true
379- else (bu > al))
380- then throw(((("Slippage tolerance must be between 0 and " + toString(al)) + " inclusively. Actual: ") + toString(bu)))
381- else if ((size(aP.payments) != 2))
382- then throw("Two attached assets expected")
383- else if (if ((((aj * (al - bu)) / al) > bx))
384- then true
385- else (bx > ((aj * (al + bu)) / al)))
386- then throw("Incorrect assets amount: amounts must have the contract ratio")
387- else if (if ((aT != W))
388- then true
389- else (aW != X))
390- then throw(((("Incorrect assets attached. Expected: " + U) + " and ") + V))
391- else if ((bl == 0))
392- then throw("Too small amount to replenish")
393- else if (!(ax))
394- then ([ScriptTransfer(aP.caller, aS, aT), ScriptTransfer(aP.caller, aV, aW)] ++ aO())
395- else [Reissue(ae, bl, true), IntegerEntry(f, aS), IntegerEntry(g, aV), IntegerEntry(k, bl), ScriptTransfer(aP.caller, bl, ae)]
396- }
397- }
398- else {
399- let bx = fraction(fraction(ac, ak, aS), aj, fraction(ad, ak, aV))
400- let by = fraction(aS, ak, ac)
401- let bz = fraction(aV, ak, ad)
402- let bA = fraction(min([by, bz]), af, ak)
403- if (!(T))
404- then throw("DApp is inactive at this moment")
405- else if (if ((0 > bu))
406- then true
407- else (bu > al))
408- then throw(((("Slippage tolerance must be between 0 and " + toString(al)) + " inclusively. Actual: ") + toString(bu)))
409- else if ((size(aP.payments) != 2))
410- then throw("Two attached assets expected")
411- else if (if ((aT != W))
412- then true
413- else (aW != X))
414- then throw(((("Incorrect assets attached. Expected: " + U) + " and ") + V))
415- else if (if ((((aj * (al - bu)) / al) > bx))
416- then true
417- else (bx > ((aj * (al + bu)) / al)))
418- then throw("Incorrect assets amount: amounts must have the contract ratio")
419- else if ((bA == 0))
420- then throw("Too small amount to replenish")
421- else if (!(ax))
422- then ([ScriptTransfer(aP.caller, aS, aT), ScriptTransfer(aP.caller, aV, aW)] ++ aO())
423- else [IntegerEntry(f, (ac + aS)), IntegerEntry(g, (ad + aV)), IntegerEntry(k, (af + bA)), Reissue(ae, bA, true), ScriptTransfer(aP.caller, bA, ae)]
424- }
312+@Callable(aI)
313+func withdraw () = {
314+ let bi = $Tuple2(aI.payments[0].amount, aI.payments[0].assetId)
315+ let bj = bi._1
316+ let bk = bi._2
317+ let bl = ay(fraction(bj, R, U), L)
318+ let bm = ay(fraction(bj, S, U), M)
319+ if (!(I))
320+ then throw("DApp is inactive at this moment")
321+ else if ((size(aI.payments) != 1))
322+ then throw("One attached payment expected")
323+ else if ((bk != T))
324+ then throw(("Incorrect asset attached. Expected: " + toBase58String(T)))
325+ else if (!(ap))
326+ then ([ScriptTransfer(aI.caller, bj, bk)] ++ aH())
327+ else if (if ((bl > al))
328+ then true
329+ else (bm > am))
330+ then aE(bl, bm)
331+ else [IntegerEntry(f, (R - bl)), IntegerEntry(g, (S - bm)), IntegerEntry(i, (U - bj)), Burn(T, bj), ScriptTransfer(aI.caller, bl, L), ScriptTransfer(aI.caller, bm, M)]
425332 }
426333
427334
428335
429-@Callable(aP)
430-func withdraw () = {
431- let bB = $Tuple2(aP.payments[0].amount, aP.payments[0].assetId)
432- let bC = bB._1
433- let bD = bB._2
434- let bE = aF(fraction(bC, ac, af), W)
435- let bF = aF(fraction(bC, ad, af), X)
436- if (!(T))
336+@Callable(aI)
337+func exchange (bn) = {
338+ let bo = $Tuple2(aI.payments[0].amount, aI.payments[0].assetId)
339+ let bj = bo._1
340+ let bk = bo._2
341+ func bp (bq,br) = {
342+ let bs = fraction(br, bj, (bj + bq))
343+ let bt = fraction(bs, (X - V), X)
344+ let bu = fraction(bs, W, X)
345+ if ((bn > bt))
346+ then throw(((("Calculated amount to receive " + toString(bt)) + " is less than specified minimum ") + toString(bn)))
347+ else $Tuple3(bs, bt, bu)
348+ }
349+
350+ if (!(I))
437351 then throw("DApp is inactive at this moment")
438- else if ((size(aP.payments) != 1))
439- then throw("One attached payment expected")
440- else if ((bD != ae))
441- then throw(("Incorrect asset attached. Expected: " + toBase58String(ae)))
442- else if (!(ax))
443- then ([ScriptTransfer(aP.caller, bC, bD)] ++ aO())
444- else if (if ((bE > at))
445- then true
446- else (bF > au))
447- then aL(bE, bF)
448- else [IntegerEntry(f, (ac - bE)), IntegerEntry(g, (ad - bF)), IntegerEntry(k, (af - bC)), Burn(ae, bC), ScriptTransfer(aP.caller, bE, W), ScriptTransfer(aP.caller, bF, X)]
352+ else if ((0 >= bn))
353+ then throw(("Minimal amount to receive must be positive. Actual: " + toString(bn)))
354+ else if ((size(aI.payments) != 1))
355+ then throw("One attached payment expected")
356+ else if (!(ap))
357+ then ([ScriptTransfer(aI.caller, bj, bk)] ++ aH())
358+ else if ((bk == L))
359+ then {
360+ let bv = M
361+ let bw = bp(R, S)
362+ let bs = bw._1
363+ let bt = bw._2
364+ let bu = bw._3
365+ let bx = (R + bj)
366+ let by = ((S - bt) - bu)
367+ if (if ((aj >= bx))
368+ then true
369+ else (ak >= by))
370+ then aB(bt, am, Q)
371+ else [IntegerEntry(f, bx), IntegerEntry(g, by), ScriptTransfer(aI.caller, bt, bv), ScriptTransfer(A, bu, bv)]
372+ }
373+ else if ((bk == M))
374+ then {
375+ let bv = L
376+ let bz = bp(S, R)
377+ let bs = bz._1
378+ let bt = bz._2
379+ let bu = bz._3
380+ let bx = ((R - bt) - bu)
381+ let by = (S + bj)
382+ if (if ((aj >= bx))
383+ then true
384+ else (ak >= by))
385+ then aB(bt, al, N)
386+ else [IntegerEntry(f, bx), IntegerEntry(g, by), ScriptTransfer(aI.caller, bt, bv), ScriptTransfer(A, bu, bv)]
387+ }
388+ else throw(((("Incorrect asset attached. Expected: " + J) + " or ") + K))
449389 }
450390
451391
452392
453-@Callable(aP)
454-func exchange (bG) = {
455- let bH = $Tuple2(aP.payments[0].amount, aP.payments[0].assetId)
456- let bC = bH._1
457- let bD = bH._2
458- func bI (bJ,bK) = {
459- let bL = fraction(bK, bC, (bC + bJ))
460- let bM = fraction(bL, (ai - ag), ai)
461- let bN = fraction(bL, ah, ai)
462- if ((bG > bM))
463- then throw(((("Calculated amount to receive " + toString(bM)) + " is less than specified minimum ") + toString(bG)))
464- else $Tuple3(bL, bM, bN)
465- }
393+@Callable(aI)
394+func shutdown () = if (!(I))
395+ then throw(("DApp is already suspended. Cause: " + valueOrElse(getString(this, l), "the cause wasn't specified")))
396+ else if (!(containsElement([v, w, x, y], aI.callerPublicKey)))
397+ then throw("Only admin can call this function")
398+ else at("Paused by admin")
466399
467- if (!(T))
400+
401+
402+@Callable(aI)
403+func activate () = if (I)
404+ then throw("DApp is already active")
405+ else if (!(containsElement([v, w, x, y], aI.callerPublicKey)))
406+ then throw("Only admin can call this function")
407+ else [BooleanEntry(c, true), DeleteEntry(l)]
408+
409+
410+
411+@Callable(aI)
412+func takeIntoAccountExtraFunds (bA) = {
413+ let bB = (an - R)
414+ let bC = (ao - S)
415+ let bD = (bB - (if ((L == unit))
416+ then bA
417+ else 0))
418+ let bE = (bC - (if ((M == unit))
419+ then bA
420+ else 0))
421+ if (!(I))
468422 then throw("DApp is inactive at this moment")
469- else if (if ((ac == 0))
470- then true
471- else (ad == 0))
472- then throw("Can't exchange with zero balance")
473- else if ((0 >= bG))
474- then throw(("Minimal amount to receive must be positive. Actual: " + toString(bG)))
475- else if ((size(aP.payments) != 1))
476- then throw("One attached payment expected")
477- else if (!(ax))
478- then ([ScriptTransfer(aP.caller, bC, bD)] ++ aO())
479- else if ((bD == W))
480- then {
481- let bO = X
482- let bP = bI(ac, ad)
483- let bL = bP._1
484- let bM = bP._2
485- let bN = bP._3
486- let bQ = (ac + bC)
487- let bR = ((ad - bM) - bN)
488- if (if (if ((W == R))
489- then (ap >= bQ)
490- else false)
491- then true
492- else if ((X == R))
493- then (ap >= bR)
494- else false)
495- then aI(bM, au, ab)
496- else [IntegerEntry(f, bQ), IntegerEntry(g, bR), ScriptTransfer(aP.caller, bM, bO), ScriptTransfer(J, bN, bO)]
497- }
498- else if ((bD == X))
499- then {
500- let bO = W
501- let bS = bI(ad, ac)
502- let bL = bS._1
503- let bM = bS._2
504- let bN = bS._3
505- let bQ = ((ac - bM) - bN)
506- let bR = (ad + bC)
507- if (if (if ((W == R))
508- then (ap >= bQ)
509- else false)
510- then true
511- else if ((X == R))
512- then (ap >= bR)
513- else false)
514- then aI(bM, at, Y)
515- else [IntegerEntry(f, bQ), IntegerEntry(g, bR), ScriptTransfer(aP.caller, bM, bO), ScriptTransfer(J, bN, bO)]
516- }
517- else throw(((("Incorrect asset attached. Expected: " + U) + " or ") + V))
423+ else if ((aI.caller != this))
424+ then throw("Only the DApp itself can call this function")
425+ else if ((0 > bA))
426+ then throw(("Argument 'amountLeave' cannot be negative. Actual: " + toString(bA)))
427+ else if (if ((0 > bB))
428+ then true
429+ else (0 > bC))
430+ then at("Enroll amount negative")
431+ else if (if ((0 > bD))
432+ then true
433+ else (0 > bE))
434+ then throw("Too large amountLeave")
435+ else [IntegerEntry(f, (R + bD)), IntegerEntry(g, (S + bE)), IntegerEntry(("last_income_" + J), bD), IntegerEntry(("last_income_" + K), bE)]
518436 }
519437
520438
521-
522-@Callable(aP)
523-func shutdown () = if (!(T))
524- then throw(("DApp is already suspended. Cause: " + valueOrElse(getString(this, n), "the cause wasn't specified")))
525- else if (!(containsElement([E, F, G, H], aP.callerPublicKey)))
526- then throw("Only admin can call this function")
527- else aD("Paused by admin")
528-
529-
530-
531-@Callable(aP)
532-func activate () = if (T)
533- then throw("DApp is already active")
534- else if (!(containsElement([E, F, G, H], aP.callerPublicKey)))
535- then throw("Only admin can call this function")
536- else [BooleanEntry(c, true), DeleteEntry(n)]
537-
538-
539-
540-@Callable(aP)
541-func takeIntoAccountExtraFunds (bT) = {
542- let bU = (av - ac)
543- let bV = (aw - ad)
544- let bW = (bU - (if ((W == unit))
545- then bT
546- else 0))
547- let bX = (bV - (if ((X == unit))
548- then bT
549- else 0))
550- if (!(T))
551- then throw("DApp is inactive at this moment")
552- else if ((aP.caller != this))
553- then throw("Only the DApp itself can call this function")
554- else if ((0 > bT))
555- then throw(("Argument 'amountLeave' cannot be negative. Actual: " + toString(bT)))
556- else if (if ((0 > bU))
557- then true
558- else (0 > bV))
559- then aD("Enroll amount negative")
560- else if (if ((0 > bW))
561- then true
562- else (0 > bX))
563- then throw("Too large amountLeave")
564- else [IntegerEntry(f, (ac + bW)), IntegerEntry(g, (ad + bX)), IntegerEntry(("last_income_" + U), bW), IntegerEntry(("last_income_" + V), bX)]
565- }
566-
567-
568-@Verifier(bY)
569-func bZ () = {
570- let ca = {
571- let cb = if (sigVerify(bY.bodyBytes, bY.proofs[0], E))
439+@Verifier(bF)
440+func bG () = {
441+ let bH = {
442+ let bI = if (sigVerify(bF.bodyBytes, bF.proofs[0], v))
572443 then 1
573444 else 0
574- let cc = if (sigVerify(bY.bodyBytes, bY.proofs[1], F))
445+ let bJ = if (sigVerify(bF.bodyBytes, bF.proofs[1], w))
575446 then 1
576447 else 0
577- let cd = if (sigVerify(bY.bodyBytes, bY.proofs[2], G))
448+ let bK = if (sigVerify(bF.bodyBytes, bF.proofs[2], x))
578449 then 1
579450 else 0
580- (((cb + cc) + cd) >= 2)
451+ (((bI + bJ) + bK) >= 2)
581452 }
582- let B = bY
583- if ($isInstanceOf(B, "InvokeScriptTransaction"))
453+ let s = bF
454+ if ($isInstanceOf(s, "InvokeScriptTransaction"))
584455 then {
585- let ce = B
586- let cf = if ((ce.dApp == this))
587- then (ce.function == "takeIntoAccountExtraFunds")
588- else false
589- let cg = if ((ce.dApp == L))
590- then if (if (if ((ce.function == "lockNeutrino"))
591- then (size(ce.payments) == 1)
592- else false)
593- then (ce.payments[0].assetId == R)
594- else false)
595- then true
596- else if ((ce.function == "unlockNeutrino"))
597- then (size(ce.payments) == 0)
598- else false
599- else false
600- let ch = if (if (if ((ce.dApp == M))
601- then (ce.function == "exchange")
602- else false)
603- then (W == R)
456+ let bL = s
457+ if (if (if (if (sigVerify(bL.bodyBytes, bL.proofs[0], z))
458+ then (bL.dApp == B)
604459 else false)
605460 then true
606- else if (if ((X == R))
607- then (size(ce.payments) == 1)
461+ else if (if (if (sigVerify(bL.bodyBytes, bL.proofs[0], z))
462+ then (bL.function == "exchange")
608463 else false)
609- then (ce.payments[0].assetId == R)
610- else false
611- let ci = if (if (if (sigVerify(bY.bodyBytes, bY.proofs[0], E))
464+ then (size(bL.payments) == 1)
465+ else false)
466+ then if (if (if (if (if ((L == D))
467+ then (M == C)
468+ else false)
469+ then (bL.dApp == F)
470+ else false)
471+ then (bL.payments[0].assetId == unit)
472+ else false)
473+ then if ((bL.payments[0].assetId == unit))
474+ then true
475+ else (bL.payments[0].assetId == C)
476+ else false)
477+ then true
478+ else if (if ((L == D))
479+ then (M == E)
480+ else false)
481+ then if (if ((bL.dApp == G))
482+ then (bL.payments[0].assetId == C)
483+ else false)
484+ then true
485+ else if ((bL.dApp == F))
486+ then if ((bL.payments[0].assetId == unit))
487+ then true
488+ else (bL.payments[0].assetId == C)
489+ else false
490+ else false
491+ else false)
612492 then true
613- else sigVerify(bY.bodyBytes, bY.proofs[0], F))
493+ else if (if (sigVerify(bL.bodyBytes, bL.proofs[0], z))
494+ then (bL.dApp == this)
495+ else false)
496+ then (bL.function == "takeIntoAccountExtraFunds")
497+ else false)
614498 then true
615- else sigVerify(bY.bodyBytes, bY.proofs[0], G))
616- then true
617- else sigVerify(bY.bodyBytes, bY.proofs[0], I)
618- if (if (if (if (cf)
619- then true
620- else cg)
621- then true
622- else ch)
623- then ci
624- else false)
625- then true
626- else ca
499+ else bH
627500 }
628- else ca
501+ else bH
629502 }
630503
Full:
OldNewDifferences
11 {-# STDLIB_VERSION 5 #-}
22 {-# SCRIPT_TYPE ACCOUNT #-}
33 {-# CONTENT_TYPE DAPP #-}
44 let a = "1.0.0"
55
66 let b = "version"
77
88 let c = "active"
99
1010 let d = "A_asset_id"
1111
1212 let e = "B_asset_id"
1313
1414 let f = "A_asset_balance"
1515
1616 let g = "B_asset_balance"
1717
18-let h = "A_asset_init"
18+let h = "share_asset_id"
1919
20-let i = "B_asset_init"
20+let i = "share_asset_supply"
2121
22-let j = "share_asset_id"
22+let j = "commission"
2323
24-let k = "share_asset_supply"
24+let k = "commission_scale_delimiter"
2525
26-let l = "commission"
26+let l = "shutdown_cause"
2727
28-let m = "commission_scale_delimiter"
28+let m = "admin_pub_1"
2929
30-let n = "shutdown_cause"
30+let n = "admin_pub_2"
3131
32-let o = "first_harvest"
32+let o = "admin_pub_3"
3333
34-let p = "first_harvest_height"
34+let p = Address(base58'3NBBWfzZtZtszaXbitTKnrB2xXwv26Bn7H9')
3535
36-let q = "share_limit_on_first_harvest"
37-
38-let r = "base_period"
39-
40-let s = "period_length"
41-
42-let t = "start_height"
43-
44-let u = "first_harvest_height"
45-
46-let v = "admin_pub_1"
47-
48-let w = "admin_pub_2"
49-
50-let x = "admin_pub_3"
51-
52-let y = Address(base58'3NBBWfzZtZtszaXbitTKnrB2xXwv26Bn7H9')
53-
54-func z (A) = {
55- let B = getString(y, A)
56- if ($isInstanceOf(B, "String"))
36+func q (r) = {
37+ let s = getString(p, r)
38+ if ($isInstanceOf(s, "String"))
5739 then {
58- let C = B
59- fromBase58String(C)
40+ let t = s
41+ fromBase58String(t)
6042 }
6143 else {
62- let D = B
44+ let u = s
6345 throw("Admin public key is empty")
6446 }
6547 }
6648
6749
68-let E = z(v)
50+let v = q(m)
6951
70-let F = z(w)
52+let w = q(n)
7153
72-let G = z(x)
54+let x = q(o)
7355
74-let H = base58'Kn7NpzaG12dLZgcHf2ipUftU6hbJygmrhFqQYE4B7ZK'
56+let y = base58'Kn7NpzaG12dLZgcHf2ipUftU6hbJygmrhFqQYE4B7ZK'
7557
76-let I = base58'Kn7NpzaG12dLZgcHf2ipUftU6hbJygmrhFqQYE4B7ZK'
58+let z = base58'Kn7NpzaG12dLZgcHf2ipUftU6hbJygmrhFqQYE4B7ZK'
7759
78-let J = Address(base58'3NAGTtZz6WpupSN89NZD5rMZwwziZEg4Kx4')
60+let A = Address(base58'3NAGTtZz6WpupSN89NZD5rMZwwziZEg4Kx4')
7961
80-let K = Address(base58'3MrJgdL1GniipErHy44YF9idzLaUL2iX5DQ')
62+let B = Address(base58'3N6q7sCGSSLBUXDdjBdYGTJbZGZfhhh8cNg')
8163
82-let L = Address(base58'3N6q7sCGSSLBUXDdjBdYGTJbZGZfhhh8cNg')
64+let C = base58'8UrfDVd5GreeUwm7uPk7eYz1eMv376kzR52C6sANPkwS'
8365
84-let M = Address(base58'3Mvutbqb6ykHHvNCCgELTNzyAMaPTqFMixX')
66+let D = base58'36mg8NZTaFRDygiVwb8uBnLR51hetJruUCZcxhaVcHj9'
8567
86-let N = valueOrErrorMessage(getInteger(K, r), "Empty kBasePeriod")
68+let E = base58'2HAJrwa8q4SxBx9cHYaBTQdBjdk5wwqdof7ccpAx2uhZ'
8769
88-let O = valueOrErrorMessage(getInteger(K, t), "Empty kStartHeight")
70+let F = Address(base58'3Mvutbqb6ykHHvNCCgELTNzyAMaPTqFMixX')
8971
90-let P = valueOrErrorMessage(getInteger(K, s), "Empty kPeriodLength")
72+let G = Address(base58'8iwQUs2Q5bPLYULK5U24DR9msCpRQbVagtRWantBuNkp')
9173
92-let Q = ((N + ((height - O) / P)) + 3)
74+let H = 270000
9375
94-let R = base58'DG2xFkPdDwKUoBkzGAhQtLpSGzfXLiCYPEzeKH2Ad24p'
76+let I = getBooleanValue(this, c)
9577
96-let S = 270000
78+let J = getStringValue(this, d)
9779
98-let T = getBooleanValue(this, c)
80+let K = getStringValue(this, e)
9981
100-let U = getStringValue(this, d)
82+let L = if ((J == "WAVES"))
83+ then unit
84+ else fromBase58String(J)
10185
102-let V = getStringValue(this, e)
86+let M = if ((K == "WAVES"))
87+ then unit
88+ else fromBase58String(K)
10389
104-let W = if ((U == "WAVES"))
105- then unit
106- else fromBase58String(U)
107-
108-let X = if ((V == "WAVES"))
109- then unit
110- else fromBase58String(V)
111-
112-let Y = {
113- let B = W
114- if ($isInstanceOf(B, "ByteVector"))
90+let N = {
91+ let s = L
92+ if ($isInstanceOf(s, "ByteVector"))
11593 then {
116- let Z = B
117- value(assetInfo(Z)).name
94+ let O = s
95+ value(assetInfo(O)).name
11896 }
119- else if ($isInstanceOf(B, "Unit"))
97+ else if ($isInstanceOf(s, "Unit"))
12098 then {
121- let aa = B
99+ let P = s
122100 "WAVES"
123101 }
124102 else throw("Match error")
125103 }
126104
127-let ab = {
128- let B = X
129- if ($isInstanceOf(B, "ByteVector"))
105+let Q = {
106+ let s = M
107+ if ($isInstanceOf(s, "ByteVector"))
130108 then {
131- let Z = B
132- value(assetInfo(Z)).name
109+ let O = s
110+ value(assetInfo(O)).name
133111 }
134- else if ($isInstanceOf(B, "Unit"))
112+ else if ($isInstanceOf(s, "Unit"))
135113 then {
136- let aa = B
114+ let P = s
137115 "WAVES"
138116 }
139117 else throw("Match error")
140118 }
141119
142-let ac = getIntegerValue(this, f)
120+let R = getIntegerValue(this, f)
143121
144-let ad = getIntegerValue(this, g)
122+let S = getIntegerValue(this, g)
145123
146-let ae = fromBase58String(getStringValue(this, j))
124+let T = fromBase58String(getStringValue(this, h))
147125
148-let af = getIntegerValue(this, k)
126+let U = getIntegerValue(this, i)
149127
150-let ag = 3000
128+let V = 3000
151129
152-let ah = 1200
130+let W = 1200
153131
154-let ai = 1000000
132+let X = 1000000
155133
156-let aj = 1000
134+let Y = 1000
157135
158-let ak = 100000000
136+let Z = 100000000
159137
160-let al = 1000
138+let aa = 1000
161139
162-let am = 8
140+let ab = 8
163141
164-func an (ao) = {
165- let B = ao
166- if ($isInstanceOf(B, "ByteVector"))
142+func ac (ad) = {
143+ let s = ad
144+ if ($isInstanceOf(s, "ByteVector"))
167145 then {
168- let Z = B
169- assetBalance(this, Z)
146+ let O = s
147+ assetBalance(this, O)
170148 }
171- else if ($isInstanceOf(B, "Unit"))
149+ else if ($isInstanceOf(s, "Unit"))
172150 then {
173- let aa = B
151+ let P = s
174152 wavesBalance(this).available
175153 }
176154 else throw("Match error")
177155 }
178156
179157
180-let ap = {
181- let B = getInteger(L, ((("rpd_balance_" + toBase58String(R)) + "_") + toString(this)))
182- if ($isInstanceOf(B, "Int"))
183- then {
184- let aq = B
185- aq
186- }
187- else if ($isInstanceOf(B, "Unit"))
158+func ae (af,ag) = {
159+ let ah = {
160+ let s = getInteger(af, ((("rpd_balance_" + ag) + "_") + toString(this)))
161+ if ($isInstanceOf(s, "Int"))
188162 then {
189- let D = B
190- 0
163+ let ai = s
164+ ai
191165 }
192- else throw("Match error")
166+ else if ($isInstanceOf(s, "Unit"))
167+ then {
168+ let u = s
169+ 0
170+ }
171+ else throw("Match error")
172+ }
173+ ah
193174 }
194175
195-let ar = getIntegerValue(this, h)
196176
197-let as = getIntegerValue(this, i)
177+let aj = ae(B, J)
198178
199-let at = (ac - (if ((W == R))
200- then ap
201- else 0))
179+let ak = ae(B, K)
202180
203-let au = (ad - (if ((X == R))
204- then ap
205- else 0))
181+let al = (R - aj)
206182
207-let av = (an(W) + (if ((W == R))
208- then ap
209- else 0))
183+let am = (S - ak)
210184
211-let aw = (an(X) + (if ((X == R))
212- then ap
213- else 0))
185+let an = (ac(L) + aj)
214186
215-let ax = if ((av >= ac))
216- then (aw >= ad)
187+let ao = (ac(M) + ak)
188+
189+let ap = if ((an >= R))
190+ then (ao >= S)
217191 else false
218192
219-func ay (ao) = {
220- let B = ao
221- if ($isInstanceOf(B, "ByteVector"))
193+func aq (ad) = {
194+ let s = ad
195+ if ($isInstanceOf(s, "ByteVector"))
222196 then {
223- let Z = B
224- let az = toBase58String(Z)
225- let aA = valueOrErrorMessage(assetInfo(Z), (("Asset " + az) + " doesn't exist"))
226- $Tuple3(az, aA.name, aA.decimals)
197+ let O = s
198+ let ar = toBase58String(O)
199+ let as = valueOrErrorMessage(assetInfo(O), (("Asset " + ar) + " doesn't exist"))
200+ $Tuple3(ar, as.name, as.decimals)
227201 }
228- else if ($isInstanceOf(B, "Unit"))
202+ else if ($isInstanceOf(s, "Unit"))
229203 then {
230- let aa = B
204+ let P = s
231205 $Tuple3("WAVES", "WAVES", 8)
232206 }
233207 else throw("Match error")
234208 }
235209
236210
237-func aB (aC) = if ((aC == "WAVES"))
238- then $Tuple3("WAVES", "WAVES", 8)
239- else {
240- let az = aC
241- let Z = fromBase58String(aC)
242- let aA = valueOrErrorMessage(assetInfo(Z), (("Asset " + az) + " doesn't exist"))
243- $Tuple3(az, aA.name, aA.decimals)
244- }
211+func at (au) = [BooleanEntry(c, false), StringEntry(l, au)]
245212
246213
247-func aD (aE) = [BooleanEntry(c, false), StringEntry(n, aE)]
214+func av () = {
215+ let aw = if ((aj > 0))
216+ then 1
217+ else 0
218+ let ax = if ((ak > 0))
219+ then 1
220+ else 0
221+ (aw + ax)
222+ }
248223
249224
250-func aF (aG,ao) = if ((ao == R))
225+func ay (az,ad) = if ((ad == C))
251226 then {
252- let aH = (aG - S)
253- if ((0 >= aH))
254- then throw((((("Insufficient amount " + toString(aG)) + " to deduct staking fee ") + toString(S)) + " USD-N"))
255- else aH
227+ let aA = (az - (av() * H))
228+ if ((0 >= aA))
229+ then throw((((("Insufficient amount " + toString(az)) + " to deduct staking fee ") + toString(H)) + " USD-N"))
230+ else aA
256231 }
257- else aG
232+ else az
258233
259234
260-func aI (aG,aJ,aK) = throw((((((((("Insufficient DApp balance to pay " + toString(aG)) + " ") + aK) + " due to staking. Available: ") + toString(aJ)) + " ") + aK) + ". Please contact support in Telegram: https://t.me/swopfisupport"))
235+func aB (az,aC,aD) = throw((((((((("Insufficient DApp balance to pay " + toString(az)) + " ") + aD) + " due to staking. Available: ") + toString(aC)) + " ") + aD) + ". Please contact support in Telegram: https://t.me/swopfisupport"))
261236
262237
263-func aL (aM,aN) = throw((((((((((((((((("Insufficient DApp balance to pay " + toString(aM)) + " ") + Y) + " and ") + toString(aN)) + " ") + ab) + " due to staking. Available: ") + toString(at)) + " ") + Y) + " and ") + toString(au)) + " ") + ab) + ". Please contact support in Telegram: https://t.me/swopfisupport"))
238+func aE (aF,aG) = throw((((((((((((((((("Insufficient DApp balance to pay " + toString(aF)) + " ") + N) + " and ") + toString(aG)) + " ") + Q) + " due to staking. Available: ") + toString(al)) + " ") + N) + " and ") + toString(am)) + " ") + Q) + ". Please contact support in Telegram: https://t.me/swopfisupport"))
264239
265240
266-func aO () = aD(((((((((((((((("Suspicious state. Actual balances: " + toString(av)) + " ") + Y) + ", ") + toString(aw)) + " ") + ab) + ". State: ") + toString(ac)) + " ") + Y) + ", ") + toString(ad)) + " ") + ab))
241+func aH () = at(((((((((((((((("Suspicious state. Actual balances: " + toString(an)) + " ") + N) + ", ") + toString(ao)) + " ") + Q) + ". State: ") + toString(R)) + " ") + N) + ", ") + toString(S)) + " ") + Q))
267242
268243
269-@Callable(aP)
270-func init (aQ) = {
271- let aR = $Tuple2(aP.payments[0].amount, aP.payments[0].assetId)
272- let aS = aR._1
273- let aT = aR._2
274- let aU = $Tuple2(aP.payments[1].amount, aP.payments[1].assetId)
275- let aV = aU._1
276- let aW = aU._2
277- let aX = ay(aT)
278- let aY = aX._1
279- let aZ = aX._2
280- let ba = aX._3
281- let bb = ay(aW)
282- let bc = bb._1
283- let bd = bb._2
284- let be = bb._3
285- if (!(containsElement([E, F, G, I], aP.callerPublicKey)))
286- then throw("Only admin can call this function")
287- else if (isDefined(getBoolean(this, c)))
288- then throw("DApp is already active")
289- else if ((aT == aW))
290- then throw("Assets must be different")
291- else {
292- let bf = ((("s" + take(aZ, 7)) + "_") + take(bd, 7))
293- let bg = ((((("ShareToken of SwopFi protocol for " + aZ) + " and ") + bd) + " at address ") + toString(this))
294- let bh = ((ba + be) / 2)
295- let bi = pow(aS, ba, 5, 1, ba, DOWN)
296- let bj = pow(aV, be, 5, 1, be, DOWN)
297- let bk = pow(10, 0, bh, 0, 0, DOWN)
298- let bl = fraction(bi, bj, bk)
299- let bm = Issue(bf, bg, bl, bh, true)
300- let bn = calculateAssetId(bm)
301- let bo = [StringEntry(b, a), BooleanEntry(c, true), StringEntry(d, aY), StringEntry(e, bc), IntegerEntry(f, aS), IntegerEntry(g, aV), IntegerEntry(l, ag), IntegerEntry(m, ai), bm, StringEntry(j, toBase58String(bn)), IntegerEntry(k, bl), ScriptTransfer(aP.caller, bl, bn)]
302- if (aQ)
303- then (bo ++ [BooleanEntry(o, aQ), IntegerEntry(p, (O + (Q * P)))])
304- else bo
305- }
244+@Callable(aI)
245+func init () = {
246+ let aJ = $Tuple2(aI.payments[0].amount, aI.payments[0].assetId)
247+ let aK = aJ._1
248+ let aL = aJ._2
249+ let aM = $Tuple2(aI.payments[1].amount, aI.payments[1].assetId)
250+ let aN = aM._1
251+ let aO = aM._2
252+ let aP = aq(aL)
253+ let aQ = aP._1
254+ let aR = aP._2
255+ let aS = aP._3
256+ let aT = aq(aO)
257+ let aU = aT._1
258+ let aV = aT._2
259+ let aW = aT._3
260+ if (isDefined(getBoolean(this, c)))
261+ then throw("DApp is already active")
262+ else if ((aL == aO))
263+ then throw("Assets must be different")
264+ else {
265+ let aX = ((("s" + take(aR, 7)) + "_") + take(aV, 7))
266+ let aY = ((((("ShareToken of SwopFi protocol for " + aR) + " and ") + aV) + " at address ") + toString(this))
267+ let aZ = ((aS + aW) / 2)
268+ let ba = fraction(pow(aK, aS, 5, 1, aS, DOWN), pow(aN, aW, 5, 1, aW, DOWN), pow(10, 0, aZ, 0, 0, DOWN))
269+ let bb = Issue(aX, aY, ba, aZ, true)
270+ let bc = calculateAssetId(bb)
271+[StringEntry(b, a), BooleanEntry(c, true), StringEntry(d, aQ), StringEntry(e, aU), IntegerEntry(f, aK), IntegerEntry(g, aN), IntegerEntry(j, V), IntegerEntry(k, X), bb, StringEntry(h, toBase58String(bc)), IntegerEntry(i, ba), ScriptTransfer(aI.caller, ba, bc)]
272+ }
306273 }
307274
308275
309276
310-@Callable(aP)
311-func initWithInitRatio (bp,bq,U,V,aQ) = {
312- let br = aB(U)
313- let aY = br._1
314- let aZ = br._2
315- let ba = br._3
316- let bs = aB(V)
317- let bc = bs._1
318- let bd = bs._2
319- let be = bs._3
320- if (!(containsElement([E, F, G, I], aP.callerPublicKey)))
321- then throw("Only admin can call this function")
322- else if (isDefined(getBoolean(this, c)))
323- then throw("DApp is already active")
324- else if ((U == V))
325- then throw("Assets must be different")
326- else {
327- let bf = ((("s" + take(aZ, 7)) + "_") + take(bd, 7))
328- let bg = ((((("ShareToken of SwopFi protocol for " + aZ) + " and ") + bd) + " at address ") + toString(this))
329- let bh = ((ba + be) / 2)
330- let bl = 0
331- let bm = Issue(bf, bg, bl, bh, true)
332- let bn = calculateAssetId(bm)
333- let bo = [StringEntry(b, a), BooleanEntry(c, true), StringEntry(d, aY), StringEntry(e, bc), IntegerEntry(h, bp), IntegerEntry(i, bq), IntegerEntry(f, 0), IntegerEntry(g, 0), IntegerEntry(l, ag), IntegerEntry(m, ai), bm, StringEntry(j, toBase58String(bn)), IntegerEntry(k, bl)]
334- if (aQ)
335- then (bo ++ [BooleanEntry(o, aQ), IntegerEntry(p, (O + (Q * P)))])
336- else bo
337- }
277+@Callable(aI)
278+func replenishWithTwoTokens (bd) = {
279+ let aL = aI.payments[0].assetId
280+ let aO = aI.payments[1].assetId
281+ let aK = ay(aI.payments[0].amount, aL)
282+ let aN = ay(aI.payments[1].amount, aO)
283+ let be = fraction(fraction(R, Z, aK), Y, fraction(S, Z, aN))
284+ let bf = fraction(aK, Z, R)
285+ let bg = fraction(aN, Z, S)
286+ let bh = fraction(min([bf, bg]), U, Z)
287+ if (!(I))
288+ then throw("DApp is inactive at this moment")
289+ else if (if ((0 > bd))
290+ then true
291+ else (bd > aa))
292+ then throw(((("Slippage tolerance must be between 0 and " + toString(aa)) + " inclusively. Actual: ") + toString(bd)))
293+ else if ((size(aI.payments) != 2))
294+ then throw("Two attached assets expected")
295+ else if (if ((aL != L))
296+ then true
297+ else (aO != M))
298+ then throw(((("Incorrect assets attached. Expected: " + J) + " and ") + K))
299+ else if (if ((((Y * (aa - bd)) / aa) > be))
300+ then true
301+ else (be > ((Y * (aa + bd)) / aa)))
302+ then throw("Incorrect assets amount: amounts must have the contract ratio")
303+ else if ((bh == 0))
304+ then throw("Too small amount to replenish")
305+ else if (!(ap))
306+ then ([ScriptTransfer(aI.caller, aK, aL), ScriptTransfer(aI.caller, aN, aO)] ++ aH())
307+ else [IntegerEntry(f, (R + aK)), IntegerEntry(g, (S + aN)), IntegerEntry(i, (U + bh)), Reissue(T, bh, true), ScriptTransfer(aI.caller, bh, T)]
338308 }
339309
340310
341311
342-@Callable(aP)
343-func keepLimitForFirstHarvest (bt) = if (!(T))
344- then throw("DApp is inactive at this moment")
345- else if (!(containsElement([E, F, G, I], aP.callerPublicKey)))
346- then throw("Only admin can call this function")
347- else [IntegerEntry(q, bt)]
348-
349-
350-
351-@Callable(aP)
352-func replenishWithTwoTokens (bu) = {
353- let aT = aP.payments[0].assetId
354- let aW = aP.payments[1].assetId
355- let aS = aF(aP.payments[0].amount, aT)
356- let aV = aF(aP.payments[1].amount, aW)
357- if (if ((ac == 0))
358- then (ad == 0)
359- else false)
360- then {
361- let bv = ay(aT)
362- let aY = bv._1
363- let aZ = bv._2
364- let ba = bv._3
365- let bw = ay(aW)
366- let bc = bw._1
367- let bd = bw._2
368- let be = bw._3
369- let bx = fraction(fraction(ar, ak, aS), aj, fraction(as, ak, aV))
370- if ((aT == aW))
371- then throw("Assets must be different")
372- else {
373- let bh = ((ba + be) / 2)
374- let bl = fraction(pow(aS, ba, 5, 1, ba, DOWN), pow(aV, be, 5, 1, be, DOWN), pow(10, 0, bh, 0, 0, DOWN))
375- if (!(T))
376- then throw("DApp is inactive at this moment")
377- else if (if ((0 > bu))
378- then true
379- else (bu > al))
380- then throw(((("Slippage tolerance must be between 0 and " + toString(al)) + " inclusively. Actual: ") + toString(bu)))
381- else if ((size(aP.payments) != 2))
382- then throw("Two attached assets expected")
383- else if (if ((((aj * (al - bu)) / al) > bx))
384- then true
385- else (bx > ((aj * (al + bu)) / al)))
386- then throw("Incorrect assets amount: amounts must have the contract ratio")
387- else if (if ((aT != W))
388- then true
389- else (aW != X))
390- then throw(((("Incorrect assets attached. Expected: " + U) + " and ") + V))
391- else if ((bl == 0))
392- then throw("Too small amount to replenish")
393- else if (!(ax))
394- then ([ScriptTransfer(aP.caller, aS, aT), ScriptTransfer(aP.caller, aV, aW)] ++ aO())
395- else [Reissue(ae, bl, true), IntegerEntry(f, aS), IntegerEntry(g, aV), IntegerEntry(k, bl), ScriptTransfer(aP.caller, bl, ae)]
396- }
397- }
398- else {
399- let bx = fraction(fraction(ac, ak, aS), aj, fraction(ad, ak, aV))
400- let by = fraction(aS, ak, ac)
401- let bz = fraction(aV, ak, ad)
402- let bA = fraction(min([by, bz]), af, ak)
403- if (!(T))
404- then throw("DApp is inactive at this moment")
405- else if (if ((0 > bu))
406- then true
407- else (bu > al))
408- then throw(((("Slippage tolerance must be between 0 and " + toString(al)) + " inclusively. Actual: ") + toString(bu)))
409- else if ((size(aP.payments) != 2))
410- then throw("Two attached assets expected")
411- else if (if ((aT != W))
412- then true
413- else (aW != X))
414- then throw(((("Incorrect assets attached. Expected: " + U) + " and ") + V))
415- else if (if ((((aj * (al - bu)) / al) > bx))
416- then true
417- else (bx > ((aj * (al + bu)) / al)))
418- then throw("Incorrect assets amount: amounts must have the contract ratio")
419- else if ((bA == 0))
420- then throw("Too small amount to replenish")
421- else if (!(ax))
422- then ([ScriptTransfer(aP.caller, aS, aT), ScriptTransfer(aP.caller, aV, aW)] ++ aO())
423- else [IntegerEntry(f, (ac + aS)), IntegerEntry(g, (ad + aV)), IntegerEntry(k, (af + bA)), Reissue(ae, bA, true), ScriptTransfer(aP.caller, bA, ae)]
424- }
312+@Callable(aI)
313+func withdraw () = {
314+ let bi = $Tuple2(aI.payments[0].amount, aI.payments[0].assetId)
315+ let bj = bi._1
316+ let bk = bi._2
317+ let bl = ay(fraction(bj, R, U), L)
318+ let bm = ay(fraction(bj, S, U), M)
319+ if (!(I))
320+ then throw("DApp is inactive at this moment")
321+ else if ((size(aI.payments) != 1))
322+ then throw("One attached payment expected")
323+ else if ((bk != T))
324+ then throw(("Incorrect asset attached. Expected: " + toBase58String(T)))
325+ else if (!(ap))
326+ then ([ScriptTransfer(aI.caller, bj, bk)] ++ aH())
327+ else if (if ((bl > al))
328+ then true
329+ else (bm > am))
330+ then aE(bl, bm)
331+ else [IntegerEntry(f, (R - bl)), IntegerEntry(g, (S - bm)), IntegerEntry(i, (U - bj)), Burn(T, bj), ScriptTransfer(aI.caller, bl, L), ScriptTransfer(aI.caller, bm, M)]
425332 }
426333
427334
428335
429-@Callable(aP)
430-func withdraw () = {
431- let bB = $Tuple2(aP.payments[0].amount, aP.payments[0].assetId)
432- let bC = bB._1
433- let bD = bB._2
434- let bE = aF(fraction(bC, ac, af), W)
435- let bF = aF(fraction(bC, ad, af), X)
436- if (!(T))
336+@Callable(aI)
337+func exchange (bn) = {
338+ let bo = $Tuple2(aI.payments[0].amount, aI.payments[0].assetId)
339+ let bj = bo._1
340+ let bk = bo._2
341+ func bp (bq,br) = {
342+ let bs = fraction(br, bj, (bj + bq))
343+ let bt = fraction(bs, (X - V), X)
344+ let bu = fraction(bs, W, X)
345+ if ((bn > bt))
346+ then throw(((("Calculated amount to receive " + toString(bt)) + " is less than specified minimum ") + toString(bn)))
347+ else $Tuple3(bs, bt, bu)
348+ }
349+
350+ if (!(I))
437351 then throw("DApp is inactive at this moment")
438- else if ((size(aP.payments) != 1))
439- then throw("One attached payment expected")
440- else if ((bD != ae))
441- then throw(("Incorrect asset attached. Expected: " + toBase58String(ae)))
442- else if (!(ax))
443- then ([ScriptTransfer(aP.caller, bC, bD)] ++ aO())
444- else if (if ((bE > at))
445- then true
446- else (bF > au))
447- then aL(bE, bF)
448- else [IntegerEntry(f, (ac - bE)), IntegerEntry(g, (ad - bF)), IntegerEntry(k, (af - bC)), Burn(ae, bC), ScriptTransfer(aP.caller, bE, W), ScriptTransfer(aP.caller, bF, X)]
352+ else if ((0 >= bn))
353+ then throw(("Minimal amount to receive must be positive. Actual: " + toString(bn)))
354+ else if ((size(aI.payments) != 1))
355+ then throw("One attached payment expected")
356+ else if (!(ap))
357+ then ([ScriptTransfer(aI.caller, bj, bk)] ++ aH())
358+ else if ((bk == L))
359+ then {
360+ let bv = M
361+ let bw = bp(R, S)
362+ let bs = bw._1
363+ let bt = bw._2
364+ let bu = bw._3
365+ let bx = (R + bj)
366+ let by = ((S - bt) - bu)
367+ if (if ((aj >= bx))
368+ then true
369+ else (ak >= by))
370+ then aB(bt, am, Q)
371+ else [IntegerEntry(f, bx), IntegerEntry(g, by), ScriptTransfer(aI.caller, bt, bv), ScriptTransfer(A, bu, bv)]
372+ }
373+ else if ((bk == M))
374+ then {
375+ let bv = L
376+ let bz = bp(S, R)
377+ let bs = bz._1
378+ let bt = bz._2
379+ let bu = bz._3
380+ let bx = ((R - bt) - bu)
381+ let by = (S + bj)
382+ if (if ((aj >= bx))
383+ then true
384+ else (ak >= by))
385+ then aB(bt, al, N)
386+ else [IntegerEntry(f, bx), IntegerEntry(g, by), ScriptTransfer(aI.caller, bt, bv), ScriptTransfer(A, bu, bv)]
387+ }
388+ else throw(((("Incorrect asset attached. Expected: " + J) + " or ") + K))
449389 }
450390
451391
452392
453-@Callable(aP)
454-func exchange (bG) = {
455- let bH = $Tuple2(aP.payments[0].amount, aP.payments[0].assetId)
456- let bC = bH._1
457- let bD = bH._2
458- func bI (bJ,bK) = {
459- let bL = fraction(bK, bC, (bC + bJ))
460- let bM = fraction(bL, (ai - ag), ai)
461- let bN = fraction(bL, ah, ai)
462- if ((bG > bM))
463- then throw(((("Calculated amount to receive " + toString(bM)) + " is less than specified minimum ") + toString(bG)))
464- else $Tuple3(bL, bM, bN)
465- }
393+@Callable(aI)
394+func shutdown () = if (!(I))
395+ then throw(("DApp is already suspended. Cause: " + valueOrElse(getString(this, l), "the cause wasn't specified")))
396+ else if (!(containsElement([v, w, x, y], aI.callerPublicKey)))
397+ then throw("Only admin can call this function")
398+ else at("Paused by admin")
466399
467- if (!(T))
400+
401+
402+@Callable(aI)
403+func activate () = if (I)
404+ then throw("DApp is already active")
405+ else if (!(containsElement([v, w, x, y], aI.callerPublicKey)))
406+ then throw("Only admin can call this function")
407+ else [BooleanEntry(c, true), DeleteEntry(l)]
408+
409+
410+
411+@Callable(aI)
412+func takeIntoAccountExtraFunds (bA) = {
413+ let bB = (an - R)
414+ let bC = (ao - S)
415+ let bD = (bB - (if ((L == unit))
416+ then bA
417+ else 0))
418+ let bE = (bC - (if ((M == unit))
419+ then bA
420+ else 0))
421+ if (!(I))
468422 then throw("DApp is inactive at this moment")
469- else if (if ((ac == 0))
470- then true
471- else (ad == 0))
472- then throw("Can't exchange with zero balance")
473- else if ((0 >= bG))
474- then throw(("Minimal amount to receive must be positive. Actual: " + toString(bG)))
475- else if ((size(aP.payments) != 1))
476- then throw("One attached payment expected")
477- else if (!(ax))
478- then ([ScriptTransfer(aP.caller, bC, bD)] ++ aO())
479- else if ((bD == W))
480- then {
481- let bO = X
482- let bP = bI(ac, ad)
483- let bL = bP._1
484- let bM = bP._2
485- let bN = bP._3
486- let bQ = (ac + bC)
487- let bR = ((ad - bM) - bN)
488- if (if (if ((W == R))
489- then (ap >= bQ)
490- else false)
491- then true
492- else if ((X == R))
493- then (ap >= bR)
494- else false)
495- then aI(bM, au, ab)
496- else [IntegerEntry(f, bQ), IntegerEntry(g, bR), ScriptTransfer(aP.caller, bM, bO), ScriptTransfer(J, bN, bO)]
497- }
498- else if ((bD == X))
499- then {
500- let bO = W
501- let bS = bI(ad, ac)
502- let bL = bS._1
503- let bM = bS._2
504- let bN = bS._3
505- let bQ = ((ac - bM) - bN)
506- let bR = (ad + bC)
507- if (if (if ((W == R))
508- then (ap >= bQ)
509- else false)
510- then true
511- else if ((X == R))
512- then (ap >= bR)
513- else false)
514- then aI(bM, at, Y)
515- else [IntegerEntry(f, bQ), IntegerEntry(g, bR), ScriptTransfer(aP.caller, bM, bO), ScriptTransfer(J, bN, bO)]
516- }
517- else throw(((("Incorrect asset attached. Expected: " + U) + " or ") + V))
423+ else if ((aI.caller != this))
424+ then throw("Only the DApp itself can call this function")
425+ else if ((0 > bA))
426+ then throw(("Argument 'amountLeave' cannot be negative. Actual: " + toString(bA)))
427+ else if (if ((0 > bB))
428+ then true
429+ else (0 > bC))
430+ then at("Enroll amount negative")
431+ else if (if ((0 > bD))
432+ then true
433+ else (0 > bE))
434+ then throw("Too large amountLeave")
435+ else [IntegerEntry(f, (R + bD)), IntegerEntry(g, (S + bE)), IntegerEntry(("last_income_" + J), bD), IntegerEntry(("last_income_" + K), bE)]
518436 }
519437
520438
521-
522-@Callable(aP)
523-func shutdown () = if (!(T))
524- then throw(("DApp is already suspended. Cause: " + valueOrElse(getString(this, n), "the cause wasn't specified")))
525- else if (!(containsElement([E, F, G, H], aP.callerPublicKey)))
526- then throw("Only admin can call this function")
527- else aD("Paused by admin")
528-
529-
530-
531-@Callable(aP)
532-func activate () = if (T)
533- then throw("DApp is already active")
534- else if (!(containsElement([E, F, G, H], aP.callerPublicKey)))
535- then throw("Only admin can call this function")
536- else [BooleanEntry(c, true), DeleteEntry(n)]
537-
538-
539-
540-@Callable(aP)
541-func takeIntoAccountExtraFunds (bT) = {
542- let bU = (av - ac)
543- let bV = (aw - ad)
544- let bW = (bU - (if ((W == unit))
545- then bT
546- else 0))
547- let bX = (bV - (if ((X == unit))
548- then bT
549- else 0))
550- if (!(T))
551- then throw("DApp is inactive at this moment")
552- else if ((aP.caller != this))
553- then throw("Only the DApp itself can call this function")
554- else if ((0 > bT))
555- then throw(("Argument 'amountLeave' cannot be negative. Actual: " + toString(bT)))
556- else if (if ((0 > bU))
557- then true
558- else (0 > bV))
559- then aD("Enroll amount negative")
560- else if (if ((0 > bW))
561- then true
562- else (0 > bX))
563- then throw("Too large amountLeave")
564- else [IntegerEntry(f, (ac + bW)), IntegerEntry(g, (ad + bX)), IntegerEntry(("last_income_" + U), bW), IntegerEntry(("last_income_" + V), bX)]
565- }
566-
567-
568-@Verifier(bY)
569-func bZ () = {
570- let ca = {
571- let cb = if (sigVerify(bY.bodyBytes, bY.proofs[0], E))
439+@Verifier(bF)
440+func bG () = {
441+ let bH = {
442+ let bI = if (sigVerify(bF.bodyBytes, bF.proofs[0], v))
572443 then 1
573444 else 0
574- let cc = if (sigVerify(bY.bodyBytes, bY.proofs[1], F))
445+ let bJ = if (sigVerify(bF.bodyBytes, bF.proofs[1], w))
575446 then 1
576447 else 0
577- let cd = if (sigVerify(bY.bodyBytes, bY.proofs[2], G))
448+ let bK = if (sigVerify(bF.bodyBytes, bF.proofs[2], x))
578449 then 1
579450 else 0
580- (((cb + cc) + cd) >= 2)
451+ (((bI + bJ) + bK) >= 2)
581452 }
582- let B = bY
583- if ($isInstanceOf(B, "InvokeScriptTransaction"))
453+ let s = bF
454+ if ($isInstanceOf(s, "InvokeScriptTransaction"))
584455 then {
585- let ce = B
586- let cf = if ((ce.dApp == this))
587- then (ce.function == "takeIntoAccountExtraFunds")
588- else false
589- let cg = if ((ce.dApp == L))
590- then if (if (if ((ce.function == "lockNeutrino"))
591- then (size(ce.payments) == 1)
592- else false)
593- then (ce.payments[0].assetId == R)
594- else false)
595- then true
596- else if ((ce.function == "unlockNeutrino"))
597- then (size(ce.payments) == 0)
598- else false
599- else false
600- let ch = if (if (if ((ce.dApp == M))
601- then (ce.function == "exchange")
602- else false)
603- then (W == R)
456+ let bL = s
457+ if (if (if (if (sigVerify(bL.bodyBytes, bL.proofs[0], z))
458+ then (bL.dApp == B)
604459 else false)
605460 then true
606- else if (if ((X == R))
607- then (size(ce.payments) == 1)
461+ else if (if (if (sigVerify(bL.bodyBytes, bL.proofs[0], z))
462+ then (bL.function == "exchange")
608463 else false)
609- then (ce.payments[0].assetId == R)
610- else false
611- let ci = if (if (if (sigVerify(bY.bodyBytes, bY.proofs[0], E))
464+ then (size(bL.payments) == 1)
465+ else false)
466+ then if (if (if (if (if ((L == D))
467+ then (M == C)
468+ else false)
469+ then (bL.dApp == F)
470+ else false)
471+ then (bL.payments[0].assetId == unit)
472+ else false)
473+ then if ((bL.payments[0].assetId == unit))
474+ then true
475+ else (bL.payments[0].assetId == C)
476+ else false)
477+ then true
478+ else if (if ((L == D))
479+ then (M == E)
480+ else false)
481+ then if (if ((bL.dApp == G))
482+ then (bL.payments[0].assetId == C)
483+ else false)
484+ then true
485+ else if ((bL.dApp == F))
486+ then if ((bL.payments[0].assetId == unit))
487+ then true
488+ else (bL.payments[0].assetId == C)
489+ else false
490+ else false
491+ else false)
612492 then true
613- else sigVerify(bY.bodyBytes, bY.proofs[0], F))
493+ else if (if (sigVerify(bL.bodyBytes, bL.proofs[0], z))
494+ then (bL.dApp == this)
495+ else false)
496+ then (bL.function == "takeIntoAccountExtraFunds")
497+ else false)
614498 then true
615- else sigVerify(bY.bodyBytes, bY.proofs[0], G))
616- then true
617- else sigVerify(bY.bodyBytes, bY.proofs[0], I)
618- if (if (if (if (cf)
619- then true
620- else cg)
621- then true
622- else ch)
623- then ci
624- else false)
625- then true
626- else ca
499+ else bH
627500 }
628- else ca
501+ else bH
629502 }
630503

github/deemru/w8io/169f3d6 
121.81 ms