tx · 69ysPdCVGZFawLKhuouPBETMhPfG8Xgwzbbq3o9Z5Ri1 3N95taAsiWcVMmXdVShZ2ann6MAboXrFT1b: -0.01400000 Waves 2021.07.20 16:53 [1622025] smart account 3N95taAsiWcVMmXdVShZ2ann6MAboXrFT1b > SELF 0.00000000 Waves
{ "type": 13, "id": "69ysPdCVGZFawLKhuouPBETMhPfG8Xgwzbbq3o9Z5Ri1", "fee": 1400000, "feeAssetId": null, "timestamp": 1626789276271, "version": 2, "chainId": 84, "sender": "3N95taAsiWcVMmXdVShZ2ann6MAboXrFT1b", "senderPublicKey": "EDQ1awBPdPh8m86bDaSLf5pynLiRVX4kcPLMxYLRScq5", "proofs": [ "5kKXNhKHtB6kLUDCifY4RPfZ7H4EzqNz6CEhGSTpg3zpJUf9uuHrQgjq7TdtPVeXqHxjv7jFtKkfa4MLZBWinCu3", "5yqCSm5AukbrBktVAZCNL9sjyfsBT9pFbH2afbjbBVUpSQF9b4KTUZ7pCLHtu9kMnrkWsXBPnTbDoPhSBhdCnbaC" ], "script": "base64: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AAAEdGhpcwAAAAlhdmFpbGFibGUJAAACAAAAAQIAAAALTWF0Y2ggZXJyb3IBAAAADHN0YWtlZEFtb3VudAAAAAIAAAAOc3Rha2luZ0FkZHJlc3MAAAAFYXNzZXQEAAAAFnN0YWtlZEFtb3VudENhbGN1bGF0ZWQEAAAAByRtYXRjaDAJAAQaAAAAAgUAAAAOc3Rha2luZ0FkZHJlc3MJAAEsAAAAAgkAASwAAAACCQABLAAAAAICAAAADHJwZF9iYWxhbmNlXwUAAAAFYXNzZXQCAAAAAV8JAAQlAAAAAQUAAAAEdGhpcwMJAAABAAAAAgUAAAAHJG1hdGNoMAIAAAADSW50BAAAAAZzdGFrZWQFAAAAByRtYXRjaDAFAAAABnN0YWtlZAMJAAABAAAAAgUAAAAHJG1hdGNoMAIAAAAEVW5pdAQAAAAHbm90aGluZwUAAAAHJG1hdGNoMAAAAAAAAAAAAAkAAAIAAAABAgAAAAtNYXRjaCBlcnJvcgUAAAAWc3Rha2VkQW1vdW50Q2FsY3VsYXRlZAAAAAANc3Rha2VkQW1vdW50QQkBAAAADHN0YWtlZEFtb3VudAAAAAIFAAAAEnN0YWtpbmdBZGRyZXNzVVNETgUAAAALc3RyQXNzZXRJZEEAAAAADXN0YWtlZEFtb3VudEIJAQAAAAxzdGFrZWRBbW91bnQAAAACBQAAABJzdGFraW5nQWRkcmVzc1VTRE4FAAAAC3N0ckFzc2V0SWRCAAAAABFhdmFpbGFibGVCYWxhbmNlQQkAAGUAAAACBQAAAAhiYWxhbmNlQQUAAAANc3Rha2VkQW1vdW50QQAAAAARYXZhaWxhYmxlQmFsYW5jZUIJAABlAAAAAgUAAAAIYmFsYW5jZUIFAAAADXN0YWtlZEFtb3VudEIAAAAAGWFjY291bnRCYWxhbmNlV2l0aFN0YWtlZEEJAABkAAAAAgkBAAAADmFjY291bnRCYWxhbmNlAAAAAQUAAAAIYXNzZXRJZEEFAAAADXN0YWtlZEFtb3VudEEAAAAAGWFjY291bnRCYWxhbmNlV2l0aFN0YWtlZEIJAABkAAAAAgkBAAAADmFjY291bnRCYWxhbmNlAAAAAQUAAAAIYXNzZXRJZEIFAAAADXN0YWtlZEFtb3VudEIAAAAAEGhhc0Vub3VnaEJhbGFuY2UDCQAA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c2V0SWRCBQAAAA5wbXRTdHJBc3NldElkQgkABEwAAAACCQEAAAAMSW50ZWdlckVudHJ5AAAAAgUAAAALa2V5QmFsYW5jZUEFAAAACnBtdEFtb3VudEEJAARMAAAAAgkBAAAADEludGVnZXJFbnRyeQAAAAIFAAAAC2tleUJhbGFuY2VCBQAAAApwbXRBbW91bnRCCQAETAAAAAIJAQAAAAxJbnRlZ2VyRW50cnkAAAACBQAAAA1rZXlDb21taXNzaW9uBQAAAApjb21taXNzaW9uCQAETAAAAAIJAQAAAAxJbnRlZ2VyRW50cnkAAAACBQAAABtrZXlDb21taXNzaW9uU2NhbGVEZWxpbWl0ZXIFAAAAGGNvbW1pc3Npb25TY2FsZURlbGltaXRlcgkABEwAAAACBQAAAApzaGFyZUlzc3VlCQAETAAAAAIJAQAAAAtTdHJpbmdFbnRyeQAAAAIFAAAAD2tleVNoYXJlQXNzZXRJZAkAAlgAAAABBQAAAAxzaGFyZUlzc3VlSWQJAARMAAAAAgkBAAAADEludGVnZXJFbnRyeQAAAAIFAAAAE2tleVNoYXJlQXNzZXRTdXBwbHkFAAAAEnNoYXJlSW5pdGlhbFN1cHBseQkABEwAAAACCQEAAAAOU2NyaXB0VHJhbnNmZXIAAAADCAUAAAABaQAAAAZjYWxsZXIFAAAAEnNoYXJlSW5pdGlhbFN1cHBseQUAAAAMc2hhcmVJc3N1ZUlkBQAAAANuaWwAAAABaQEAAAAWcmVwbGVuaXNoV2l0aFR3b1Rva2VucwAAAAEAAAARc2xpcHBhZ2VUb2xlcmFuY2UEAAAAC3BtdEFzc2V0SWRBCAkAAZEAAAACCAUAAAABaQAAAAhwYXltZW50cwAAAAAAAAAAAAAAAAdhc3NldElkBAAAAAtwbXRBc3NldElkQggJAAGRAAAAAggFAAAAAWkAAAAIcGF5bWVudHMAAAAAAAAAAAEAAAAHYXNzZXRJZAQAAAAKcG10QW1vdW50QQkBAAAAEGRlZHVjdFN0YWtpbmdGZWUAAAACCAkAAZEAAAACCAUAAAABaQAAAAhwYXltZW50cwAAAAAAAAAAAAAAAAZhbW91bnQFAAAAC3BtdEFzc2V0SWRBBAAAAApwbXRBbW91bnRCCQEAAAAQZGVkdWN0U3Rha2luZ0ZlZQAAAAIICQABkQAAAAIIBQAAAAFpAAAACHBheW1lbnRzAAAAAAAAAAABAAAABmFtb3VudAUAAAALcG10QXNzZXRJZEIEAAAACnRva2VuUmF0aW8JAABrAAAAAwkAAGsAAAADBQAAAAhiYWxhbmNlQQUAAAALc2NhbGVWYWx1ZTgFAAAACnBtdEFtb3VudEEFAAAAC3NjYWxlVmFsdWUzCQAAawAAAAMFAAAACGJhbGFuY2VCBQAAAAtzY2FsZVZhbHVlOAUAAAAKcG10QW1vdW50QgQAAAATcmF0aW9TaGFyZVRva2Vuc0luQQkAAGsAAAADBQAAAApwbXRBbW91bnRBBQAAAAtzY2FsZVZhbHVlOAUAAAAIYmFsYW5jZUEEAAAAE3JhdGlvU2hhcmVUb2tlbnNJbkIJAABrAAAAAwUAAAAKcG10QW1vdW50QgUAAAALc2NhbGVWYWx1ZTgFAAAACGJhbGFuY2VCBAAAABVzaGFyZVRva2VuVG9QYXlBbW91bnQJAABrAAAAAwkAAZcAAAABCQAETAAAAAIFAAAAE3JhdGlvU2hhcmVUb2tlbnNJbkEJAARMAAAAAgUAAAATcmF0aW9TaGFyZVRva2Vuc0luQgUAAAADbmlsBQAAABBzaGFyZUFzc2V0U3VwcGx5BQAAAAtzY2FsZVZhbHVlOAMJAQAAAAEhAAAAAQUAAAAIaXNBY3RpdmUJAAACAAAAAQIAAAAfREFwcCBpcyBpbmFjdGl2ZSBhdCB0aGlzIG1vbWVudAMDCQAAZgAAAAIAAAAAAAAAAAAFAAAAEXNsaXBwYWdlVG9sZXJhbmNlBgkAAGYAAAACBQAAABFzbGlwcGFnZVRvbGVyYW5jZQUAAAAac2xpcHBhZ2VUb2xlcmFuY2VEZWxpbWl0ZXIJAAACAAAAAQkAASwAAAACCQABLAAAAAIJAAEsAAAAAgIAAAApU2xpcHBhZ2UgdG9sZXJhbmNlIG11c3QgYmUgYmV0d2VlbiAwIGFuZCAJAAGkAAAAAQUAAAAac2xpcHBhZ2VUb2xlcmFuY2VEZWxpbWl0ZXICAAAAFiBpbmNsdXNpdmVseS4gQWN0dWFsOiAJAAGkAAAAAQUAAAARc2xpcHBhZ2VUb2xlcmFuY2UDCQEAAAACIT0AAAACCQABkAAAAAEIBQAAAAFpAAAACHBheW1lbnRzAAAAAAAAAAACCQAAAgAAAAECAAAAHFR3byBhdHRhY2hlZCBhc3NldHMgZXhwZWN0ZWQDAwkBAAAAAiE9AAAAAgUAAAALcG10QXNzZXRJZEEFAAAACGFzc2V0SWRBBgkBAAAAAiE9AAAAAgUAAAALcG10QXNzZXRJZEIFAAAACGFzc2V0SWRCCQAAAgAAAAEJAAEsAAAAAgkAASwAAAACCQABLAAAAAICAAAAJUluY29ycmVjdCBhc3NldHMgYXR0YWNoZWQuIEV4cGVjdGVkOiAFAAAAC3N0ckFzc2V0SWRBAgAAAAUgYW5kIAUAAAALc3RyQXNzZXRJZEIDAwkAAGYAAAACCQAAaQAAAAIJAABoAAAAAgUAAAALc2NhbGVWYWx1ZTMJAABlAAAAAgUAAAAac2xpcHBhZ2VUb2xlcmFuY2VEZWxpbWl0ZXIFAAAAEXNsaXBwYWdlVG9sZXJhbmNlBQAAABpzbGlwcGFnZVRvbGVyYW5jZURlbGltaXRlcgUAAAAKdG9rZW5SYXRpbwYJAABmAAAAAgUAAAAKdG9rZW5SYXRpbwkAAGkAAAACCQAAaAAAAAIFAAAAC3NjYWxlVmFsdWUzCQAAZAAAAAIFAAAAGnNsaXBwYWdlVG9sZXJhbmNlRGVsaW1pdGVyBQAAABFzbGlwcGFnZVRvbGVyYW5jZQUAAAAac2xpcHBhZ2VUb2xlcmFuY2VEZWxpbWl0ZXIJAAACAAAAAQIAAAA9SW5jb3JyZWN0IGFzc2V0cyBhbW91bnQ6IGFtb3VudHMgbXVzdCBoYXZlIHRoZSBjb250cmFjdCByYXRpbwMJAAAAAAAAAgUAAAAVc2hhcmVUb2tlblRvUGF5QW1vdW50AAAAAAAAAAAACQAAAgAAAAECAAAAHVRvbyBzbWFsbCBhbW91bnQgdG8gcmVwbGVuaXNoAwkBAAAAASEAAAABBQAAABBoYXNFbm91Z2hCYWxhbmNlCQAETgAAAAIJAARMAAAAAgkBAAAADlNjcmlwdFRyYW5zZmVyAAAAAwgFAAAAAWkAAAAGY2FsbGVyBQAAAApwbXRBbW91bnRBBQAAAAtwbXRBc3NldElkQQkABEwAAAACCQEAAAAOU2NyaXB0VHJhbnNmZXIAAAADCAUAAAABaQAAAAZjYWxsZXIFAAAACnBtdEFtb3VudEIFAAAAC3BtdEFzc2V0SWRCBQAAAANuaWwJAQAAABFzdXNwZW5kU3VzcGljaW91cwAAAAAJAARMAAAAAgkBAAAADEludGVnZXJFbnRyeQAAAAIFAAAAC2tleUJhbGFuY2VBCQAAZAAAAAIFAAAACGJhbGFuY2VBBQAAAApwbXRBbW91bnRBCQAETAAAAAIJAQAAAAxJbnRlZ2VyRW50cnkAAAACBQAAAAtrZXlCYWxhbmNlQgkAAGQAAAACBQAAAAhiYWxhbmNlQgUAAAAKcG10QW1vdW50QgkABEwAAAACCQEAAAAMSW50ZWdlckVudHJ5AAAAAgUAAAATa2V5U2hhcmVBc3NldFN1cHBseQkAAGQAAAACBQAAABBzaGFyZUFzc2V0U3VwcGx5BQAAABVzaGFyZVRva2VuVG9QYXlBbW91bnQJAARMAAAAAgkBAAAAB1JlaXNzdWUAAAADBQAAAAxzaGFyZUFzc2V0SWQFAAAAFXNoYXJlVG9rZW5Ub1BheUFtb3VudAYJAARMAAAAAgkBAAAADlNjcmlwdFRyYW5zZmVyAAAAAwgFAAAAAWkAAAAGY2FsbGVyBQAAABVzaGFyZVRva2VuVG9QYXlBbW91bnQFAAAADHNoYXJlQXNzZXRJZAUAAAADbmlsAAAAAWkBAAAACHdpdGhkcmF3AAAAAAQAAAANJHQwMTAwMDkxMDE1OQkABRQAAAACCAkAAZEAAAACCAUAAAABaQAAAAhwYXltZW50cwAAAAAAAAAAAAAAAAZhbW91bnQICQABkQAAAAIIBQAAAAFpAAAACHBheW1lbnRzAAAAAAAAAAAAAAAAB2Fzc2V0SWQEAAAACXBtdEFtb3VudAgFAAAADSR0MDEwMDA5MTAxNTkAAAACXzEEAAAACnBtdEFzc2V0SWQIBQAAAA0kdDAxMDAwOTEwMTU5AAAAAl8yBAAAAAxhbW91bnRUb1BheUEJAQAAABBkZWR1Y3RTdGFraW5nRmVlAAAAAgkAAGsAAAADBQAAAAlwbXRBbW91bnQFAAAACGJhbGFuY2VBBQAAABBzaGFyZUFzc2V0U3VwcGx5BQAAAAhhc3NldElkQQQAAAAMYW1vdW50VG9QYXlCCQEAAAAQZGVkdWN0U3Rha2luZ0ZlZQAAAAIJAABrAAAAAwUAAAAJcG10QW1vdW50BQAAAAhiYWxhbmNlQgUAAAAQc2hhcmVBc3NldFN1cHBseQUAAAAIYXNzZXRJZEIDCQEAAAABIQAAAAEFAAAACGlzQWN0aXZlCQAAAgAAAAECAAAAH0RBcHAgaXMgaW5hY3RpdmUgYXQgdGhpcyBtb21lbnQDCQEAAAACIT0AAAACCQABkAAAAAEIBQAAAAFpAAAACHBheW1lbnRzAAAAAAAAAAABCQAAAgAAAAECAAAAHU9uZSBhdHRhY2hlZCBwYXltZW50IGV4cGVjdGVkAwkBAAAAAiE9AAAAAgUAAAAKcG10QXNzZXRJZAUAAAAMc2hhcmVBc3NldElkCQAAAgAAAAEJAAEsAAAAAgIAAAAkSW5jb3JyZWN0IGFzc2V0IGF0dGFjaGVkLiBFeHBlY3RlZDogCQACWAAAAAEFAAAADHNoYXJlQXNzZXRJZAMJAQAAAAEhAAAAAQUAAAAQaGFzRW5vdWdoQmFsYW5jZQkABE4AAAACCQAETAAAAAIJAQAAAA5TY3JpcHRUcmFuc2ZlcgAAAAMIBQAAAAFpAAAABmNhbGxlcgUAAAAJcG10QW1vdW50BQAAAApwbXRBc3NldElkBQAAAANuaWwJAQAAABFzdXNwZW5kU3VzcGljaW91cwAAAAADAwkAAGYAAAACBQAAAAxhbW91bnRUb1BheUEFAAAAEWF2YWlsYWJsZUJhbGFuY2VBBgkAAGYAAAACBQAAAAxhbW91bnRUb1BheUIFAAAAEWF2YWlsYWJsZUJhbGFuY2VCCQEAAAAidGhyb3dJbnN1ZmZpY2llbnRBdmFpbGFibGVCYWxhbmNlcwAAAAIFAAAADGFtb3VudFRvUGF5QQUAAAAMYW1vdW50VG9QYXlCCQAETAAAAAIJAQAAAAxJbnRlZ2VyRW50cnkAAAACBQAAAAtrZXlCYWxhbmNlQQkAAGUAAAACBQAAAAhiYWxhbmNlQQUAAAAMYW1vdW50VG9QYXlBCQAETAAAAAIJAQAAAAxJbnRlZ2VyRW50cnkAAAACBQAAAAtrZXlCYWxhbmNlQgkAAGUAAAACBQAAAAhiYWxhbmNlQgUAAAAMYW1vdW50VG9QYXlCCQAETAAAAAIJAQAAAAxJbnRlZ2VyRW50cnkAAAACBQAAABNrZXlTaGFyZUFzc2V0U3VwcGx5CQAAZQAAAAIFAAAAEHNoYXJlQXNzZXRTdXBwbHkFAAAACXBtdEFtb3VudAkABEwAAAACCQEAAAAEQnVybgAAAAIFAAAADHNoYXJlQXNzZXRJZAUAAAAJcG10QW1vdW50CQAETAAAAAIJAQAAAA5TY3JpcHRUcmFuc2ZlcgAAAAMIBQAAAAFpAAAABmNhbGxlcgUAAAAMYW1vdW50VG9QYXlBBQAAAAhhc3NldElkQQkABEwAAAACCQEAAAAOU2NyaXB0VHJhbnNmZXIAAAADCAUAAAABaQAAAAZjYWxsZXIFAAAADGFtb3VudFRvUGF5QgUAAAAIYXNzZXRJZEIFAAAAA25pbAAAAAFpAQAAAAhleGNoYW5nZQAAAAEAAAASbWluQW1vdW50VG9SZWNlaXZlBAAAAA0kdDAxMTM2NTExNDQwCQAFFAAAAAIICQABkQAAAAIIBQAAAAFpAAAACHBheW1lbnRzAAAAAAAAAAAAAAAABmFtb3VudAgJAAGRAAAAAggFAAAAAWkAAAAIcGF5bWVudHMAAAAAAAAAAAAAAAAHYXNzZXRJZAQAAAAJcG10QW1vdW50CAUAAAANJHQwMTEzNjUxMTQ0MAAAAAJfMQQAAAAKcG10QXNzZXRJZAgFAAAADSR0MDExMzY1MTE0NDAAAAACXzIKAQAAAA1jYWxjdWxhdGVGZWVzAAAAAgAAAAl0b2tlbkZyb20AAAAHdG9rZW5UbwQAAAAQYW1vdW50V2l0aG91dEZlZQkAAGsAAAADBQAAAAd0b2tlblRvBQAAAAlwbXRBbW91bnQJAABkAAAAAgUAAAAJcG10QW1vdW50BQAAAAl0b2tlbkZyb20EAAAADWFtb3VudFdpdGhGZWUJAABrAAAAAwUAAAAQYW1vdW50V2l0aG91dEZlZQkAAGUAAAACBQAAABhjb21taXNzaW9uU2NhbGVEZWxpbWl0ZXIFAAAACmNvbW1pc3Npb24FAAAAGGNvbW1pc3Npb25TY2FsZURlbGltaXRlcgQAAAAQZ292ZXJuYW5jZVJld2FyZAkAAGsAAAADBQAAABBhbW91bnRXaXRob3V0RmVlBQAAABRjb21taXNzaW9uR292ZXJuYW5jZQUAAAAYY29tbWlzc2lvblNjYWxlRGVsaW1pdGVyAwkAAGYAAAACBQAAABJtaW5BbW91bnRUb1JlY2VpdmUFAAAADWFtb3VudFdpdGhGZWUJAAACAAAAAQkAASwAAAACCQABLAAAAAIJAAEsAAAAAgIAAAAdQ2FsY3VsYXRlZCBhbW91bnQgdG8gcmVjZWl2ZSAJAAGkAAAAAQUAAAANYW1vdW50V2l0aEZlZQIAAAAgIGlzIGxlc3MgdGhhbiBzcGVjaWZpZWQgbWluaW11bSAJAAGkAAAAAQUAAAASbWluQW1vdW50VG9SZWNlaXZlCQAFFQAAAAMFAAAAEGFtb3VudFdpdGhvdXRGZWUFAAAADWFtb3VudFdpdGhGZWUFAAAAEGdvdmVybmFuY2VSZXdhcmQDCQEAAAABIQAAAAEFAAAACGlzQWN0aXZlCQAAAgAAAAECAAAAH0RBcHAgaXMgaW5hY3RpdmUgYXQgdGhpcyBtb21lbnQDCQAAZwAAAAIAAAAAAAAAAAAFAAAAEm1pbkFtb3VudFRvUmVjZWl2ZQkAAAIAAAABCQABLAAAAAICAAAANE1pbmltYWwgYW1vdW50IHRvIHJlY2VpdmUgbXVzdCBiZSBwb3NpdGl2ZS4gQWN0dWFsOiAJAAGkAAAAAQUAAAASbWluQW1vdW50VG9SZWNlaXZlAwkBAAAAAiE9AAAAAgkAAZAAAAABCAUAAAABaQAAAAhwYXltZW50cwAAAAAAAAAAAQkAAAIAAAABAgAAAB1PbmUgYXR0YWNoZWQgcGF5bWVudCBleHBlY3RlZAMJAQAAAAEhAAAAAQUAAAAQaGFzRW5vdWdoQmFsYW5jZQkABE4AAAACCQAETAAAAAIJAQAAAA5TY3JpcHRUcmFuc2ZlcgAAAAMIBQAAAAFpAAAABmNhbGxlcgUAAAAJcG10QW1vdW50BQAAAApwbXRBc3NldElkBQAAAANuaWwJAQAAABFzdXNwZW5kU3VzcGljaW91cwAAAAADCQAAAAAAAAIFAAAACnBtdEFzc2V0SWQFAAAACGFzc2V0SWRBBAAAAAthc3NldElkU2VuZAUAAAAIYXNzZXRJZEIEAAAADSR0MDEyNjE1MTI3MDYJAQAAAA1jYWxjdWxhdGVGZWVzAAAAAgUAAAAIYmFsYW5jZUEFAAAACGJhbGFuY2VCBAAAABBhbW91bnRXaXRob3V0RmVlCAUAAAANJHQwMTI2MTUxMjcwNgAAAAJfMQQAAAANYW1vdW50V2l0aEZlZQgFAAAADSR0MDEyNjE1MTI3MDYAAAACXzIEAAAAEGdvdmVybmFuY2VSZXdhcmQIBQAAAA0kdDAxMjYxNTEyNzA2AAAAAl8zBAAAAAtuZXdCYWxhbmNlQQkAAGQAAAACBQAAAAhiYWxhbmNlQQUAAAAJcG10QW1vdW50BAAAAAtuZXdCYWxhbmNlQgkAAGUAAAACCQAAZQAAAAIFAAAACGJhbGFuY2VCBQAAAA1hbW91bnRXaXRoRmVlBQAAABBnb3Zlcm5hbmNlUmV3YXJkAwMJAABnAAAAAgUAAAANc3Rha2VkQW1vdW50QQUAAAALbmV3QmFsYW5jZUEGCQAAZwAAAAIFAAAADXN0YWtlZEFtb3VudEIFAAAAC25ld0JhbGFuY2VCCQEAAAAhdGhyb3dJbnN1ZmZpY2llbnRBdmFpbGFibGVCYWxhbmNlAAAAAwUAAAANYW1vdW50V2l0aEZlZQUAAAARYXZhaWxhYmxlQmFsYW5jZUIFAAAACmFzc2V0TmFtZUIJAARMAAAAAgkBAAAADEludGVnZXJFbnRyeQAAAAIFAAAAC2tleUJhbGFuY2VBBQAAAAtuZXdCYWxhbmNlQQkABEwAAAACCQEAAAAMSW50ZWdlckVudHJ5AAAAAgUAAAALa2V5QmFsYW5jZUIFAAAAC25ld0JhbGFuY2VCCQAETAAAAAIJAQAAAA5TY3JpcHRUcmFuc2ZlcgAAAAMIBQAAAAFpAAAABmNhbGxlcgUAAAANYW1vdW50V2l0aEZlZQUAAAALYXNzZXRJZFNlbmQJAARMAAAAAgkBAAAADlNjcmlwdFRyYW5zZmVyAAAAAwUAAAARZ292ZXJuYW5jZUFkZHJlc3MFAAAAEGdvdmVybmFuY2VSZXdhcmQFAAAAC2Fzc2V0SWRTZW5kBQAAAANuaWwDCQAAAAAAAAIFAAAACnBtdEFzc2V0SWQFAAAACGFzc2V0SWRCBAAAAAthc3NldElkU2VuZAUAAAAIYXNzZXRJZEEEAAAADSR0MDEzNTI5MTM2MjAJAQAAAA1jYWxjdWxhdGVGZWVzAAAAAgUAAAAIYmFsYW5jZUIFAAAACGJhbGFuY2VBBAAAABBhbW91bnRXaXRob3V0RmVlCAUAAAANJHQwMTM1MjkxMzYyMAAAAAJfMQQAAAANYW1vdW50V2l0aEZlZQgFAAAADSR0MDEzNTI5MTM2MjAAAAACXzIEAAAAEGdvdmVybmFuY2VSZXdhcmQIBQAAAA0kdDAxMzUyOTEzNjIwAAAAAl8zBAAAAAtuZXdCYWxhbmNlQQkAAGUAAAACCQAAZQAAAAIFAAAACGJhbGFuY2VBBQAAAA1hbW91bnRXaXRoRmVlBQAAABBnb3Zlcm5hbmNlUmV3YXJkBAAAAAtuZXdCYWxhbmNlQgkAAGQAAAACBQAAAAhiYWxhbmNlQgUAAAAJcG10QW1vdW50AwMJAABnAAAAAgUAAAANc3Rha2VkQW1vdW50QQUAAAALbmV3QmFsYW5jZUEGCQAAZwAAAAIFAAAADXN0YWtlZEFtb3VudEIFAAAAC25ld0JhbGFuY2VCCQEAAAAhdGhyb3dJbnN1ZmZpY2llbnRBdmFpbGFibGVCYWxhbmNlAAAAAwUAAAANYW1vdW50V2l0aEZlZQUAAAARYXZhaWxhYmxlQmFsYW5jZUEFAAAACmFzc2V0TmFtZUEJAARMAAAAAgkBAAAADEludGVnZXJFbnRyeQAAAAIFAAAAC2tleUJhbGFuY2VBBQAAAAtuZXdCYWxhbmNlQQkABEwAAAACCQEAAAAMSW50ZWdlckVudHJ5AAAAAgUAAAALa2V5QmFsYW5jZUIFAAAAC25ld0JhbGFuY2VCCQAETAAAAAIJAQAAAA5TY3JpcHRUcmFuc2ZlcgAAAAMIBQAAAAFpAAAABmNhbGxlcgUAAAANYW1vdW50V2l0aEZlZQUAAAALYXNzZXRJZFNlbmQJAARMAAAAAgkBAAAADlNjcmlwdFRyYW5zZmVyAAAAAwUAAAARZ292ZXJuYW5jZUFkZHJlc3MFAAAAEGdvdmVybmFuY2VSZXdhcmQFAAAAC2Fzc2V0SWRTZW5kBQAAAANuaWwJAAACAAAAAQkAASwAAAACCQABLAAAAAIJAAEsAAAAAgIAAAAkSW5jb3JyZWN0IGFzc2V0IGF0dGFjaGVkLiBFeHBlY3RlZDogBQAAAAtzdHJBc3NldElkQQIAAAAEIG9yIAUAAAALc3RyQXNzZXRJZEIAAAABaQEAAAAIc2h1dGRvd24AAAAAAwkBAAAAASEAAAABBQAAAAhpc0FjdGl2ZQkAAAIAAAABCQABLAAAAAICAAAAIkRBcHAgaXMgYWxyZWFkeSBzdXNwZW5kZWQuIENhdXNlOiAJAQAAAAt2YWx1ZU9yRWxzZQAAAAIJAAQdAAAAAgUAAAAEdGhpcwUAAAAIa2V5Q2F1c2UCAAAAGnRoZSBjYXVzZSB3YXNuJ3Qgc3BlY2lmaWVkAwkBAAAAASEAAAABCQEAAAAPY29udGFpbnNFbGVtZW50AAAAAgkABEwAAAACBQAAAAxhZG1pblB1YktleTEJAARMAAAAAgUAAAAMYWRtaW5QdWJLZXkyCQAETAAAAAIFAAAADGFkbWluUHViS2V5MwkABEwAAAACBQAAABRhZG1pblB1YktleVN0YXJ0U3RvcAUAAAADbmlsCAUAAAABaQAAAA9jYWxsZXJQdWJsaWNLZXkJAAACAAAAAQIAAAAhT25seSBhZG1pbiBjYW4gY2FsbCB0aGlzIGZ1bmN0aW9uCQEAAAAHc3VzcGVuZAAAAAECAAAAD1BhdXNlZCBieSBhZG1pbgAAAAFpAQAAAAhhY3RpdmF0ZQAAAAADBQAAAAhpc0FjdGl2ZQkAAAIAAAABAgAAABZEQXBwIGlzIGFscmVhZHkgYWN0aXZlAwkBAAAAASEAAAABCQEAAAAPY29udGFpbnNFbGVtZW50AAAAAgkABEwAAAACBQAAAAxhZG1pblB1YktleTEJAARMAAAAAgUAAAAMYWRtaW5QdWJLZXkyCQAETAAAAAIFAAAADGFkbWluUHViS2V5MwkABEwAAAACBQAAABRhZG1pblB1YktleVN0YXJ0U3RvcAUAAAADbmlsCAUAAAABaQAAAA9jYWxsZXJQdWJsaWNLZXkJAAACAAAAAQIAAAAhT25seSBhZG1pbiBjYW4gY2FsbCB0aGlzIGZ1bmN0aW9uCQAETAAAAAIJAQAAAAxCb29sZWFuRW50cnkAAAACBQAAAAlrZXlBY3RpdmUGCQAETAAAAAIJAQAAAAtEZWxldGVFbnRyeQAAAAEFAAAACGtleUNhdXNlBQAAAANuaWwAAAABaQEAAAAZdGFrZUludG9BY2NvdW50RXh0cmFGdW5kcwAAAAEAAAALYW1vdW50TGVhdmUEAAAAHXVuY291bnRhYmxlQW1vdW50RW5yb2xsQXNzZXRBCQAAZQAAAAIFAAAAGWFjY291bnRCYWxhbmNlV2l0aFN0YWtlZEEFAAAACGJhbGFuY2VBBAAAAB11bmNvdW50YWJsZUFtb3VudEVucm9sbEFzc2V0QgkAAGUAAAACBQAAABlhY2NvdW50QmFsYW5jZVdpdGhTdGFrZWRCBQAAAAhiYWxhbmNlQgQAAAANYW1vdW50RW5yb2xsQQkAAGUAAAACBQAAAB11bmNvdW50YWJsZUFtb3VudEVucm9sbEFzc2V0QQMJAAAAAAAAAgUAAAAIYXNzZXRJZEEFAAAABHVuaXQFAAAAC2Ftb3VudExlYXZlAAAAAAAAAAAABAAAAA1hbW91bnRFbnJvbGxCCQAAZQAAAAIFAAAAHXVuY291bnRhYmxlQW1vdW50RW5yb2xsQXNzZXRCAwkAAAAAAAACBQAAAAhhc3NldElkQgUAAAAEdW5pdAUAAAALYW1vdW50TGVhdmUAAAAAAAAAAAADCQEAAAABIQAAAAEFAAAACGlzQWN0aXZlCQAAAgAAAAECAAAAH0RBcHAgaXMgaW5hY3RpdmUgYXQgdGhpcyBtb21lbnQDCQEAAAACIT0AAAACCAUAAAABaQAAAAZjYWxsZXIFAAAABHRoaXMJAAACAAAAAQIAAAArT25seSB0aGUgREFwcCBpdHNlbGYgY2FuIGNhbGwgdGhpcyBmdW5jdGlvbgMJAABmAAAAAgAAAAAAAAAAAAUAAAALYW1vdW50TGVhdmUJAAACAAAAAQkAASwAAAACAgAAADNBcmd1bWVudCAnYW1vdW50TGVhdmUnIGNhbm5vdCBiZSBuZWdhdGl2ZS4gQWN0dWFsOiAJAAGkAAAAAQUAAAALYW1vdW50TGVhdmUDAwkAAGYAAAACAAAAAAAAAAAABQAAAB11bmNvdW50YWJsZUFtb3VudEVucm9sbEFzc2V0QQYJAABmAAAAAgAAAAAAAAAAAAUAAAAddW5jb3VudGFibGVBbW91bnRFbnJvbGxBc3NldEIJAQAAAAdzdXNwZW5kAAAAAQIAAAAWRW5yb2xsIGFtb3VudCBuZWdhdGl2ZQMDCQAAZgAAAAIAAAAAAAAAAAAFAAAADWFtb3VudEVucm9sbEEGCQAAZgAAAAIAAAAAAAAAAAAFAAAADWFtb3VudEVucm9sbEIJAAACAAAAAQIAAAAVVG9vIGxhcmdlIGFtb3VudExlYXZlCQAETAAAAAIJAQAAAAxJbnRlZ2VyRW50cnkAAAACBQAAAAtrZXlCYWxhbmNlQQkAAGQAAAACBQAAAAhiYWxhbmNlQQUAAAANYW1v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", "height": 1622025, "applicationStatus": "succeeded", "spentComplexity": 0 } View: original | compacted Prev: Gp1B9iArShJ62KJUTrSrA5H9GNXnr9qeVMJ8fTLxe7in Next: none Diff:
Old | New | Differences | |
---|---|---|---|
15 | 15 | ||
16 | 16 | let g = "B_asset_balance" | |
17 | 17 | ||
18 | - | let h = " | |
18 | + | let h = "share_asset_id" | |
19 | 19 | ||
20 | - | let i = " | |
20 | + | let i = "share_asset_supply" | |
21 | 21 | ||
22 | - | let j = " | |
22 | + | let j = "commission" | |
23 | 23 | ||
24 | - | let k = " | |
24 | + | let k = "commission_scale_delimiter" | |
25 | 25 | ||
26 | - | let l = " | |
26 | + | let l = "shutdown_cause" | |
27 | 27 | ||
28 | - | let m = | |
28 | + | let m = base58'Kn7NpzaG12dLZgcHf2ipUftU6hbJygmrhFqQYE4B7ZK' | |
29 | 29 | ||
30 | - | let n = | |
30 | + | let n = base58'Kn7NpzaG12dLZgcHf2ipUftU6hbJygmrhFqQYE4B7ZK' | |
31 | 31 | ||
32 | - | let o = | |
32 | + | let o = base58'Kn7NpzaG12dLZgcHf2ipUftU6hbJygmrhFqQYE4B7ZK' | |
33 | 33 | ||
34 | - | let p = | |
34 | + | let p = base58'Kn7NpzaG12dLZgcHf2ipUftU6hbJygmrhFqQYE4B7ZK' | |
35 | 35 | ||
36 | - | let q = | |
36 | + | let q = base58'Kn7NpzaG12dLZgcHf2ipUftU6hbJygmrhFqQYE4B7ZK' | |
37 | 37 | ||
38 | - | let r = | |
38 | + | let r = Address(base58'3NAGTtZz6WpupSN89NZD5rMZwwziZEg4Kx4') | |
39 | 39 | ||
40 | - | let s = | |
40 | + | let s = Address(base58'3N6q7sCGSSLBUXDdjBdYGTJbZGZfhhh8cNg') | |
41 | 41 | ||
42 | - | let t = | |
42 | + | let t = base58'8UrfDVd5GreeUwm7uPk7eYz1eMv376kzR52C6sANPkwS' | |
43 | 43 | ||
44 | - | let u = | |
44 | + | let u = base58'36mg8NZTaFRDygiVwb8uBnLR51hetJruUCZcxhaVcHj9' | |
45 | 45 | ||
46 | - | let v = base58' | |
46 | + | let v = base58'2HAJrwa8q4SxBx9cHYaBTQdBjdk5wwqdof7ccpAx2uhZ' | |
47 | 47 | ||
48 | - | let w = base58' | |
48 | + | let w = Address(base58'3N3g1MVp6DXyfqhq8sMPA6CRRkTTPtBsZeh') | |
49 | 49 | ||
50 | - | let x = base58' | |
50 | + | let x = Address(base58'3N95taAsiWcVMmXdVShZ2ann6MAboXrFT1b') | |
51 | 51 | ||
52 | - | let y = | |
52 | + | let y = 270000 | |
53 | 53 | ||
54 | - | let z = | |
54 | + | let z = getBooleanValue(this, c) | |
55 | 55 | ||
56 | - | let A = | |
56 | + | let A = getStringValue(this, d) | |
57 | 57 | ||
58 | - | let B = | |
58 | + | let B = getStringValue(this, e) | |
59 | 59 | ||
60 | - | let C = Address(base58'3MrJgdL1GniipErHy44YF9idzLaUL2iX5DQ') | |
60 | + | let C = if ((A == "WAVES")) | |
61 | + | then unit | |
62 | + | else fromBase58String(A) | |
61 | 63 | ||
62 | - | let D = Address(base58'3N6q7sCGSSLBUXDdjBdYGTJbZGZfhhh8cNg') | |
64 | + | let D = if ((B == "WAVES")) | |
65 | + | then unit | |
66 | + | else fromBase58String(B) | |
63 | 67 | ||
64 | - | let E = Address(base58'3N3g1MVp6DXyfqhq8sMPA6CRRkTTPtBsZeh') | |
65 | - | ||
66 | - | let F = valueOrErrorMessage(getInteger(C, r), "Empty kBasePeriod") | |
67 | - | ||
68 | - | let G = valueOrErrorMessage(getInteger(C, t), "Empty kStartHeight") | |
69 | - | ||
70 | - | let H = valueOrErrorMessage(getInteger(C, s), "Empty kPeriodLength") | |
71 | - | ||
72 | - | let I = ((F + ((height - G) / H)) + 3) | |
73 | - | ||
74 | - | let J = base58'8UrfDVd5GreeUwm7uPk7eYz1eMv376kzR52C6sANPkwS' | |
75 | - | ||
76 | - | let K = 270000 | |
77 | - | ||
78 | - | let L = getBooleanValue(this, c) | |
79 | - | ||
80 | - | let M = getStringValue(this, d) | |
81 | - | ||
82 | - | let N = getStringValue(this, e) | |
83 | - | ||
84 | - | let O = if ((M == "WAVES")) | |
85 | - | then unit | |
86 | - | else fromBase58String(M) | |
87 | - | ||
88 | - | let P = if ((N == "WAVES")) | |
89 | - | then unit | |
90 | - | else fromBase58String(N) | |
91 | - | ||
92 | - | let Q = { | |
93 | - | let R = O | |
94 | - | if ($isInstanceOf(R, "ByteVector")) | |
68 | + | let E = { | |
69 | + | let F = C | |
70 | + | if ($isInstanceOf(F, "ByteVector")) | |
95 | 71 | then { | |
96 | - | let | |
97 | - | value(assetInfo( | |
72 | + | let G = F | |
73 | + | value(assetInfo(G)).name | |
98 | 74 | } | |
99 | - | else if ($isInstanceOf( | |
75 | + | else if ($isInstanceOf(F, "Unit")) | |
100 | 76 | then { | |
101 | - | let | |
77 | + | let H = F | |
102 | 78 | "WAVES" | |
103 | 79 | } | |
104 | 80 | else throw("Match error") | |
105 | 81 | } | |
106 | 82 | ||
107 | - | let | |
108 | - | let | |
109 | - | if ($isInstanceOf( | |
83 | + | let I = { | |
84 | + | let F = D | |
85 | + | if ($isInstanceOf(F, "ByteVector")) | |
110 | 86 | then { | |
111 | - | let | |
112 | - | value(assetInfo( | |
87 | + | let G = F | |
88 | + | value(assetInfo(G)).name | |
113 | 89 | } | |
114 | - | else if ($isInstanceOf( | |
90 | + | else if ($isInstanceOf(F, "Unit")) | |
115 | 91 | then { | |
116 | - | let | |
92 | + | let H = F | |
117 | 93 | "WAVES" | |
118 | 94 | } | |
119 | 95 | else throw("Match error") | |
120 | 96 | } | |
121 | 97 | ||
122 | - | let | |
98 | + | let J = getIntegerValue(this, f) | |
123 | 99 | ||
124 | - | let | |
100 | + | let K = getIntegerValue(this, g) | |
125 | 101 | ||
126 | - | let | |
102 | + | let L = fromBase58String(getStringValue(this, h)) | |
127 | 103 | ||
128 | - | let | |
104 | + | let M = getIntegerValue(this, i) | |
129 | 105 | ||
130 | - | let | |
106 | + | let N = 3000 | |
131 | 107 | ||
132 | - | let | |
108 | + | let O = 1200 | |
133 | 109 | ||
134 | - | let | |
110 | + | let P = 1000000 | |
135 | 111 | ||
136 | - | let | |
112 | + | let Q = 1000 | |
137 | 113 | ||
138 | - | let | |
114 | + | let R = 100000000 | |
139 | 115 | ||
140 | - | let | |
116 | + | let S = 1000 | |
141 | 117 | ||
142 | - | let | |
118 | + | let T = 8 | |
143 | 119 | ||
144 | - | func | |
145 | - | let | |
146 | - | if ($isInstanceOf( | |
120 | + | func U (V) = { | |
121 | + | let F = V | |
122 | + | if ($isInstanceOf(F, "ByteVector")) | |
147 | 123 | then { | |
148 | - | let | |
149 | - | assetBalance(this, | |
124 | + | let G = F | |
125 | + | assetBalance(this, G) | |
150 | 126 | } | |
151 | - | else if ($isInstanceOf( | |
127 | + | else if ($isInstanceOf(F, "Unit")) | |
152 | 128 | then { | |
153 | - | let | |
129 | + | let H = F | |
154 | 130 | wavesBalance(this).available | |
155 | 131 | } | |
156 | 132 | else throw("Match error") | |
157 | 133 | } | |
158 | 134 | ||
159 | 135 | ||
160 | - | let ai = { | |
161 | - | let R = getInteger(D, ((("rpd_balance_" + toBase58String(J)) + "_") + toString(this))) | |
162 | - | if ($isInstanceOf(R, "Int")) | |
163 | - | then { | |
164 | - | let aj = R | |
165 | - | aj | |
166 | - | } | |
167 | - | else if ($isInstanceOf(R, "Unit")) | |
136 | + | func W (X,Y) = { | |
137 | + | let Z = { | |
138 | + | let F = getInteger(X, ((("rpd_balance_" + Y) + "_") + toString(this))) | |
139 | + | if ($isInstanceOf(F, "Int")) | |
168 | 140 | then { | |
169 | - | let | |
170 | - | | |
141 | + | let aa = F | |
142 | + | aa | |
171 | 143 | } | |
172 | - | else throw("Match error") | |
144 | + | else if ($isInstanceOf(F, "Unit")) | |
145 | + | then { | |
146 | + | let ab = F | |
147 | + | 0 | |
148 | + | } | |
149 | + | else throw("Match error") | |
150 | + | } | |
151 | + | Z | |
173 | 152 | } | |
174 | 153 | ||
175 | - | let al = getIntegerValue(this, h) | |
176 | 154 | ||
177 | - | let | |
155 | + | let ac = W(s, A) | |
178 | 156 | ||
179 | - | let an = (V - (if ((O == J)) | |
180 | - | then ai | |
181 | - | else 0)) | |
157 | + | let ad = W(s, B) | |
182 | 158 | ||
183 | - | let ao = (W - (if ((P == J)) | |
184 | - | then ai | |
185 | - | else 0)) | |
159 | + | let ae = (J - ac) | |
186 | 160 | ||
187 | - | let ap = (ag(O) + (if ((O == J)) | |
188 | - | then ai | |
189 | - | else 0)) | |
161 | + | let af = (K - ad) | |
190 | 162 | ||
191 | - | let aq = (ag(P) + (if ((P == J)) | |
192 | - | then ai | |
193 | - | else 0)) | |
163 | + | let ag = (U(C) + ac) | |
194 | 164 | ||
195 | - | let ar = if ((ap >= V)) | |
196 | - | then (aq >= W) | |
165 | + | let ah = (U(D) + ad) | |
166 | + | ||
167 | + | let ai = if ((ag >= J)) | |
168 | + | then (ah >= K) | |
197 | 169 | else false | |
198 | 170 | ||
199 | - | func | |
200 | - | let | |
201 | - | if ($isInstanceOf( | |
171 | + | func aj (V) = { | |
172 | + | let F = V | |
173 | + | if ($isInstanceOf(F, "ByteVector")) | |
202 | 174 | then { | |
203 | - | let | |
204 | - | let | |
205 | - | let | |
206 | - | $Tuple3( | |
175 | + | let G = F | |
176 | + | let ak = toBase58String(G) | |
177 | + | let al = valueOrErrorMessage(assetInfo(G), (("Asset " + ak) + " doesn't exist")) | |
178 | + | $Tuple3(ak, al.name, al.decimals) | |
207 | 179 | } | |
208 | - | else if ($isInstanceOf( | |
180 | + | else if ($isInstanceOf(F, "Unit")) | |
209 | 181 | then { | |
210 | - | let | |
182 | + | let H = F | |
211 | 183 | $Tuple3("WAVES", "WAVES", 8) | |
212 | 184 | } | |
213 | 185 | else throw("Match error") | |
214 | 186 | } | |
215 | 187 | ||
216 | 188 | ||
217 | - | func av (aw) = if ((aw == "WAVES")) | |
218 | - | then $Tuple3("WAVES", "WAVES", 8) | |
219 | - | else { | |
220 | - | let at = aw | |
221 | - | let S = fromBase58String(aw) | |
222 | - | let au = valueOrErrorMessage(assetInfo(S), (("Asset " + at) + " doesn't exist")) | |
223 | - | $Tuple3(at, au.name, au.decimals) | |
224 | - | } | |
189 | + | func am (an) = [BooleanEntry(c, false), StringEntry(l, an)] | |
225 | 190 | ||
226 | 191 | ||
227 | - | func ax (ay) = [BooleanEntry(c, false), StringEntry(n, ay)] | |
192 | + | func ao () = { | |
193 | + | let ap = if ((ac > 0)) | |
194 | + | then 1 | |
195 | + | else 0 | |
196 | + | let aq = if ((ad > 0)) | |
197 | + | then 1 | |
198 | + | else 0 | |
199 | + | (ap + aq) | |
200 | + | } | |
228 | 201 | ||
229 | 202 | ||
230 | - | func | |
203 | + | func ar (as,V) = if ((V == t)) | |
231 | 204 | then { | |
232 | - | let | |
233 | - | if ((0 >= | |
234 | - | then throw((((("Insufficient amount " + toString( | |
235 | - | else | |
205 | + | let at = (as - (ao() * y)) | |
206 | + | if ((0 >= at)) | |
207 | + | then throw((((("Insufficient amount " + toString(as)) + " to deduct staking fee ") + toString(y)) + " USD-N")) | |
208 | + | else at | |
236 | 209 | } | |
237 | - | else | |
210 | + | else as | |
238 | 211 | ||
239 | 212 | ||
240 | - | func | |
213 | + | func au (as,av,aw) = throw((((((((("Insufficient DApp balance to pay " + toString(as)) + " ") + aw) + " due to staking. Available: ") + toString(av)) + " ") + aw) + ". Please contact support in Telegram: https://t.me/swopfisupport")) | |
241 | 214 | ||
242 | 215 | ||
243 | - | func | |
216 | + | func ax (ay,az) = throw((((((((((((((((("Insufficient DApp balance to pay " + toString(ay)) + " ") + E) + " and ") + toString(az)) + " ") + I) + " due to staking. Available: ") + toString(ae)) + " ") + E) + " and ") + toString(af)) + " ") + I) + ". Please contact support in Telegram: https://t.me/swopfisupport")) | |
244 | 217 | ||
245 | 218 | ||
246 | - | func | |
219 | + | func aA () = am(((((((((((((((("Suspicious state. Actual balances: " + toString(ag)) + " ") + E) + ", ") + toString(ah)) + " ") + I) + ". State: ") + toString(J)) + " ") + E) + ", ") + toString(K)) + " ") + I)) | |
247 | 220 | ||
248 | 221 | ||
249 | - | @Callable(aJ) | |
250 | - | func init (aK) = { | |
251 | - | let aL = $Tuple2(aJ.payments[0].amount, aJ.payments[0].assetId) | |
252 | - | let aM = aL._1 | |
253 | - | let aN = aL._2 | |
254 | - | let aO = $Tuple2(aJ.payments[1].amount, aJ.payments[1].assetId) | |
255 | - | let aP = aO._1 | |
256 | - | let aQ = aO._2 | |
257 | - | let aR = as(aN) | |
258 | - | let aS = aR._1 | |
259 | - | let aT = aR._2 | |
260 | - | let aU = aR._3 | |
261 | - | let aV = as(aQ) | |
262 | - | let aW = aV._1 | |
263 | - | let aX = aV._2 | |
264 | - | let aY = aV._3 | |
265 | - | if (!(containsElement([v, w, x, z], aJ.callerPublicKey))) | |
266 | - | then throw("Only admin can call this function") | |
267 | - | else if (isDefined(getBoolean(this, c))) | |
268 | - | then throw("DApp is already active") | |
269 | - | else if ((aN == aQ)) | |
270 | - | then throw("Assets must be different") | |
271 | - | else { | |
272 | - | let aZ = ((("s" + take(aT, 7)) + "_") + take(aX, 7)) | |
273 | - | let ba = ((((("ShareToken of SwopFi protocol for " + aT) + " and ") + aX) + " at address ") + toString(this)) | |
274 | - | let bb = ((aU + aY) / 2) | |
275 | - | let bc = fraction(pow(aM, aU, 5, 1, aU, HALFDOWN), pow(aP, aY, 5, 1, aY, HALFDOWN), pow(10, 0, bb, 0, 0, HALFDOWN)) | |
276 | - | let bd = Issue(aZ, ba, bc, bb, true) | |
277 | - | let be = calculateAssetId(bd) | |
278 | - | let bf = [StringEntry(b, a), BooleanEntry(c, true), StringEntry(d, aS), StringEntry(e, aW), IntegerEntry(f, aM), IntegerEntry(g, aP), IntegerEntry(l, Z), IntegerEntry(m, ab), bd, StringEntry(j, toBase58String(be)), IntegerEntry(k, bc), ScriptTransfer(aJ.caller, bc, be)] | |
279 | - | if (aK) | |
280 | - | then (bf ++ [BooleanEntry(o, aK), IntegerEntry(p, (G + (I * H)))]) | |
281 | - | else bf | |
282 | - | } | |
222 | + | @Callable(aB) | |
223 | + | func init () = { | |
224 | + | let aC = $Tuple2(aB.payments[0].amount, aB.payments[0].assetId) | |
225 | + | let aD = aC._1 | |
226 | + | let aE = aC._2 | |
227 | + | let aF = $Tuple2(aB.payments[1].amount, aB.payments[1].assetId) | |
228 | + | let aG = aF._1 | |
229 | + | let aH = aF._2 | |
230 | + | let aI = aj(aE) | |
231 | + | let aJ = aI._1 | |
232 | + | let aK = aI._2 | |
233 | + | let aL = aI._3 | |
234 | + | let aM = aj(aH) | |
235 | + | let aN = aM._1 | |
236 | + | let aO = aM._2 | |
237 | + | let aP = aM._3 | |
238 | + | if (isDefined(getBoolean(this, c))) | |
239 | + | then throw("DApp is already active") | |
240 | + | else if ((aE == aH)) | |
241 | + | then throw("Assets must be different") | |
242 | + | else { | |
243 | + | let aQ = ((("s" + take(aK, 7)) + "_") + take(aO, 7)) | |
244 | + | let aR = ((((("ShareToken of SwopFi protocol for " + aK) + " and ") + aO) + " at address ") + toString(this)) | |
245 | + | let aS = ((aL + aP) / 2) | |
246 | + | let aT = fraction(pow(aD, aL, 5, 1, aL, HALFDOWN), pow(aG, aP, 5, 1, aP, HALFDOWN), pow(10, 0, aS, 0, 0, HALFDOWN)) | |
247 | + | let aU = Issue(aQ, aR, aT, aS, true) | |
248 | + | let aV = calculateAssetId(aU) | |
249 | + | [StringEntry(b, a), BooleanEntry(c, true), StringEntry(d, aJ), StringEntry(e, aN), IntegerEntry(f, aD), IntegerEntry(g, aG), IntegerEntry(j, N), IntegerEntry(k, P), aU, StringEntry(h, toBase58String(aV)), IntegerEntry(i, aT), ScriptTransfer(aB.caller, aT, aV)] | |
250 | + | } | |
283 | 251 | } | |
284 | 252 | ||
285 | 253 | ||
286 | 254 | ||
287 | - | @Callable(aJ) | |
288 | - | func initWithInitRatio (bg,bh,M,N,aK) = { | |
289 | - | let bi = av(M) | |
290 | - | let aS = bi._1 | |
291 | - | let aT = bi._2 | |
292 | - | let aU = bi._3 | |
293 | - | let bj = av(N) | |
294 | - | let aW = bj._1 | |
295 | - | let aX = bj._2 | |
296 | - | let aY = bj._3 | |
297 | - | if (!(containsElement([v, w, x, z], aJ.callerPublicKey))) | |
298 | - | then throw("Only admin can call this function") | |
299 | - | else if (isDefined(getBoolean(this, c))) | |
300 | - | then throw("DApp is already active") | |
301 | - | else if ((M == N)) | |
302 | - | then throw("Assets must be different") | |
303 | - | else { | |
304 | - | let aZ = ((("s" + take(aT, 7)) + "_") + take(aX, 7)) | |
305 | - | let ba = ((((("ShareToken of SwopFi protocol for " + aT) + " and ") + aX) + " at address ") + toString(this)) | |
306 | - | let bb = ((aU + aY) / 2) | |
307 | - | let bc = 0 | |
308 | - | let bd = Issue(aZ, ba, bc, bb, true) | |
309 | - | let be = calculateAssetId(bd) | |
310 | - | let bf = [StringEntry(b, a), BooleanEntry(c, true), StringEntry(d, aS), StringEntry(e, aW), IntegerEntry(h, bg), IntegerEntry(i, bh), IntegerEntry(f, 0), IntegerEntry(g, 0), IntegerEntry(l, Z), IntegerEntry(m, ab), bd, StringEntry(j, toBase58String(be)), IntegerEntry(k, bc)] | |
311 | - | if (aK) | |
312 | - | then (bf ++ [BooleanEntry(o, aK), IntegerEntry(p, (G + (I * H)))]) | |
313 | - | else bf | |
314 | - | } | |
255 | + | @Callable(aB) | |
256 | + | func replenishWithTwoTokens (aW) = { | |
257 | + | let aE = aB.payments[0].assetId | |
258 | + | let aH = aB.payments[1].assetId | |
259 | + | let aD = ar(aB.payments[0].amount, aE) | |
260 | + | let aG = ar(aB.payments[1].amount, aH) | |
261 | + | let aX = fraction(fraction(J, R, aD), Q, fraction(K, R, aG)) | |
262 | + | let aY = fraction(aD, R, J) | |
263 | + | let aZ = fraction(aG, R, K) | |
264 | + | let ba = fraction(min([aY, aZ]), M, R) | |
265 | + | if (!(z)) | |
266 | + | then throw("DApp is inactive at this moment") | |
267 | + | else if (if ((0 > aW)) | |
268 | + | then true | |
269 | + | else (aW > S)) | |
270 | + | then throw(((("Slippage tolerance must be between 0 and " + toString(S)) + " inclusively. Actual: ") + toString(aW))) | |
271 | + | else if ((size(aB.payments) != 2)) | |
272 | + | then throw("Two attached assets expected") | |
273 | + | else if (if ((aE != C)) | |
274 | + | then true | |
275 | + | else (aH != D)) | |
276 | + | then throw(((("Incorrect assets attached. Expected: " + A) + " and ") + B)) | |
277 | + | else if (if ((((Q * (S - aW)) / S) > aX)) | |
278 | + | then true | |
279 | + | else (aX > ((Q * (S + aW)) / S))) | |
280 | + | then throw("Incorrect assets amount: amounts must have the contract ratio") | |
281 | + | else if ((ba == 0)) | |
282 | + | then throw("Too small amount to replenish") | |
283 | + | else if (!(ai)) | |
284 | + | then ([ScriptTransfer(aB.caller, aD, aE), ScriptTransfer(aB.caller, aG, aH)] ++ aA()) | |
285 | + | else [IntegerEntry(f, (J + aD)), IntegerEntry(g, (K + aG)), IntegerEntry(i, (M + ba)), Reissue(L, ba, true), ScriptTransfer(aB.caller, ba, L)] | |
315 | 286 | } | |
316 | 287 | ||
317 | 288 | ||
318 | 289 | ||
319 | - | @Callable(aJ) | |
320 | - | func keepLimitForFirstHarvest (bk) = if (!(L)) | |
321 | - | then throw("DApp is inactive at this moment") | |
322 | - | else if (!(containsElement([v, w, x, z], aJ.callerPublicKey))) | |
323 | - | then throw("Only admin can call this function") | |
324 | - | else [IntegerEntry(q, bk)] | |
325 | - | ||
326 | - | ||
327 | - | ||
328 | - | @Callable(aJ) | |
329 | - | func replenishWithTwoTokens (bl) = { | |
330 | - | let aN = aJ.payments[0].assetId | |
331 | - | let aQ = aJ.payments[1].assetId | |
332 | - | let aM = az(aJ.payments[0].amount, aN) | |
333 | - | let aP = az(aJ.payments[1].amount, aQ) | |
334 | - | if (if ((V == 0)) | |
335 | - | then (W == 0) | |
336 | - | else false) | |
337 | - | then { | |
338 | - | let bm = as(aN) | |
339 | - | let aS = bm._1 | |
340 | - | let aT = bm._2 | |
341 | - | let aU = bm._3 | |
342 | - | let bn = as(aQ) | |
343 | - | let aW = bn._1 | |
344 | - | let aX = bn._2 | |
345 | - | let aY = bn._3 | |
346 | - | let bo = fraction(fraction(al, ad, aM), ac, fraction(am, ad, aP)) | |
347 | - | if ((aN == aQ)) | |
348 | - | then throw("Assets must be different") | |
349 | - | else { | |
350 | - | let bb = ((aU + aY) / 2) | |
351 | - | let bc = fraction(pow(aM, aU, 5, 1, aU, HALFDOWN), pow(aP, aY, 5, 1, aY, HALFDOWN), pow(10, 0, bb, 0, 0, HALFDOWN)) | |
352 | - | if (!(L)) | |
353 | - | then throw("DApp is inactive at this moment") | |
354 | - | else if (if ((0 > bl)) | |
355 | - | then true | |
356 | - | else (bl > ae)) | |
357 | - | then throw(((("Slippage tolerance must be between 0 and " + toString(ae)) + " inclusively. Actual: ") + toString(bl))) | |
358 | - | else if ((size(aJ.payments) != 2)) | |
359 | - | then throw("Two attached assets expected") | |
360 | - | else if (if ((((ac * (ae - bl)) / ae) > bo)) | |
361 | - | then true | |
362 | - | else (bo > ((ac * (ae + bl)) / ae))) | |
363 | - | then throw("Incorrect assets amount: amounts must have the contract ratio") | |
364 | - | else if (if ((aN != O)) | |
365 | - | then true | |
366 | - | else (aQ != P)) | |
367 | - | then throw(((("Incorrect assets attached. Expected: " + M) + " and ") + N)) | |
368 | - | else if ((bc == 0)) | |
369 | - | then throw("Too small amount to replenish") | |
370 | - | else if (!(ar)) | |
371 | - | then ([ScriptTransfer(aJ.caller, aM, aN), ScriptTransfer(aJ.caller, aP, aQ)] ++ aI()) | |
372 | - | else [Reissue(X, bc, true), IntegerEntry(f, aM), IntegerEntry(g, aP), IntegerEntry(k, bc), ScriptTransfer(aJ.caller, bc, X)] | |
373 | - | } | |
374 | - | } | |
375 | - | else { | |
376 | - | let bo = fraction(fraction(V, ad, aM), ac, fraction(W, ad, aP)) | |
377 | - | let bp = fraction(aM, ad, V) | |
378 | - | let bq = fraction(aP, ad, W) | |
379 | - | let br = fraction(min([bp, bq]), Y, ad) | |
380 | - | if (!(L)) | |
381 | - | then throw("DApp is inactive at this moment") | |
382 | - | else if (if ((0 > bl)) | |
383 | - | then true | |
384 | - | else (bl > ae)) | |
385 | - | then throw(((("Slippage tolerance must be between 0 and " + toString(ae)) + " inclusively. Actual: ") + toString(bl))) | |
386 | - | else if ((size(aJ.payments) != 2)) | |
387 | - | then throw("Two attached assets expected") | |
388 | - | else if (if ((aN != O)) | |
389 | - | then true | |
390 | - | else (aQ != P)) | |
391 | - | then throw(((("Incorrect assets attached. Expected: " + M) + " and ") + N)) | |
392 | - | else if (if ((((ac * (ae - bl)) / ae) > bo)) | |
393 | - | then true | |
394 | - | else (bo > ((ac * (ae + bl)) / ae))) | |
395 | - | then throw("Incorrect assets amount: amounts must have the contract ratio") | |
396 | - | else if ((br == 0)) | |
397 | - | then throw("Too small amount to replenish") | |
398 | - | else if (!(ar)) | |
399 | - | then ([ScriptTransfer(aJ.caller, aM, aN), ScriptTransfer(aJ.caller, aP, aQ)] ++ aI()) | |
400 | - | else [IntegerEntry(f, (V + aM)), IntegerEntry(g, (W + aP)), IntegerEntry(k, (Y + br)), Reissue(X, br, true), ScriptTransfer(aJ.caller, br, X)] | |
401 | - | } | |
290 | + | @Callable(aB) | |
291 | + | func withdraw () = { | |
292 | + | let bb = $Tuple2(aB.payments[0].amount, aB.payments[0].assetId) | |
293 | + | let bc = bb._1 | |
294 | + | let bd = bb._2 | |
295 | + | let be = ar(fraction(bc, J, M), C) | |
296 | + | let bf = ar(fraction(bc, K, M), D) | |
297 | + | if (!(z)) | |
298 | + | then throw("DApp is inactive at this moment") | |
299 | + | else if ((size(aB.payments) != 1)) | |
300 | + | then throw("One attached payment expected") | |
301 | + | else if ((bd != L)) | |
302 | + | then throw(("Incorrect asset attached. Expected: " + toBase58String(L))) | |
303 | + | else if (!(ai)) | |
304 | + | then ([ScriptTransfer(aB.caller, bc, bd)] ++ aA()) | |
305 | + | else if (if ((be > ae)) | |
306 | + | then true | |
307 | + | else (bf > af)) | |
308 | + | then ax(be, bf) | |
309 | + | else [IntegerEntry(f, (J - be)), IntegerEntry(g, (K - bf)), IntegerEntry(i, (M - bc)), Burn(L, bc), ScriptTransfer(aB.caller, be, C), ScriptTransfer(aB.caller, bf, D)] | |
402 | 310 | } | |
403 | 311 | ||
404 | 312 | ||
405 | 313 | ||
406 | - | @Callable(aJ) | |
407 | - | func withdraw () = { | |
408 | - | let bs = $Tuple2(aJ.payments[0].amount, aJ.payments[0].assetId) | |
409 | - | let bt = bs._1 | |
410 | - | let bu = bs._2 | |
411 | - | let bv = az(fraction(bt, V, Y), O) | |
412 | - | let bw = az(fraction(bt, W, Y), P) | |
413 | - | if (!(L)) | |
314 | + | @Callable(aB) | |
315 | + | func exchange (bg) = { | |
316 | + | let bh = $Tuple2(aB.payments[0].amount, aB.payments[0].assetId) | |
317 | + | let bc = bh._1 | |
318 | + | let bd = bh._2 | |
319 | + | func bi (bj,bk) = { | |
320 | + | let bl = fraction(bk, bc, (bc + bj)) | |
321 | + | let bm = fraction(bl, (P - N), P) | |
322 | + | let bn = fraction(bl, O, P) | |
323 | + | if ((bg > bm)) | |
324 | + | then throw(((("Calculated amount to receive " + toString(bm)) + " is less than specified minimum ") + toString(bg))) | |
325 | + | else $Tuple3(bl, bm, bn) | |
326 | + | } | |
327 | + | ||
328 | + | if (!(z)) | |
414 | 329 | then throw("DApp is inactive at this moment") | |
415 | - | else if ((size(aJ.payments) != 1)) | |
416 | - | then throw("One attached payment expected") | |
417 | - | else if ((bu != X)) | |
418 | - | then throw(("Incorrect asset attached. Expected: " + toBase58String(X))) | |
419 | - | else if (!(ar)) | |
420 | - | then ([ScriptTransfer(aJ.caller, bt, bu)] ++ aI()) | |
421 | - | else if (if ((bv > an)) | |
422 | - | then true | |
423 | - | else (bw > ao)) | |
424 | - | then aF(bv, bw) | |
425 | - | else [IntegerEntry(f, (V - bv)), IntegerEntry(g, (W - bw)), IntegerEntry(k, (Y - bt)), Burn(X, bt), ScriptTransfer(aJ.caller, bv, O), ScriptTransfer(aJ.caller, bw, P)] | |
330 | + | else if ((0 >= bg)) | |
331 | + | then throw(("Minimal amount to receive must be positive. Actual: " + toString(bg))) | |
332 | + | else if ((size(aB.payments) != 1)) | |
333 | + | then throw("One attached payment expected") | |
334 | + | else if (!(ai)) | |
335 | + | then ([ScriptTransfer(aB.caller, bc, bd)] ++ aA()) | |
336 | + | else if ((bd == C)) | |
337 | + | then { | |
338 | + | let bo = D | |
339 | + | let bp = bi(J, K) | |
340 | + | let bl = bp._1 | |
341 | + | let bm = bp._2 | |
342 | + | let bn = bp._3 | |
343 | + | let bq = (J + bc) | |
344 | + | let br = ((K - bm) - bn) | |
345 | + | if (if ((ac >= bq)) | |
346 | + | then true | |
347 | + | else (ad >= br)) | |
348 | + | then au(bm, af, I) | |
349 | + | else [IntegerEntry(f, bq), IntegerEntry(g, br), ScriptTransfer(aB.caller, bm, bo), ScriptTransfer(r, bn, bo)] | |
350 | + | } | |
351 | + | else if ((bd == D)) | |
352 | + | then { | |
353 | + | let bo = C | |
354 | + | let bs = bi(K, J) | |
355 | + | let bl = bs._1 | |
356 | + | let bm = bs._2 | |
357 | + | let bn = bs._3 | |
358 | + | let bq = ((J - bm) - bn) | |
359 | + | let br = (K + bc) | |
360 | + | if (if ((ac >= bq)) | |
361 | + | then true | |
362 | + | else (ad >= br)) | |
363 | + | then au(bm, ae, E) | |
364 | + | else [IntegerEntry(f, bq), IntegerEntry(g, br), ScriptTransfer(aB.caller, bm, bo), ScriptTransfer(r, bn, bo)] | |
365 | + | } | |
366 | + | else throw(((("Incorrect asset attached. Expected: " + A) + " or ") + B)) | |
426 | 367 | } | |
427 | 368 | ||
428 | 369 | ||
429 | 370 | ||
430 | - | @Callable(aJ) | |
431 | - | func exchange (bx) = { | |
432 | - | let by = $Tuple2(aJ.payments[0].amount, aJ.payments[0].assetId) | |
433 | - | let bt = by._1 | |
434 | - | let bu = by._2 | |
435 | - | func bz (bA,bB) = { | |
436 | - | let bC = fraction(bB, bt, (bt + bA)) | |
437 | - | let bD = fraction(bC, (ab - Z), ab) | |
438 | - | let bE = fraction(bC, aa, ab) | |
439 | - | if ((bx > bD)) | |
440 | - | then throw(((("Calculated amount to receive " + toString(bD)) + " is less than specified minimum ") + toString(bx))) | |
441 | - | else $Tuple3(bC, bD, bE) | |
442 | - | } | |
371 | + | @Callable(aB) | |
372 | + | func shutdown () = if (!(z)) | |
373 | + | then throw(("DApp is already suspended. Cause: " + valueOrElse(getString(this, l), "the cause wasn't specified"))) | |
374 | + | else if (!(containsElement([m, n, o, p], aB.callerPublicKey))) | |
375 | + | then throw("Only admin can call this function") | |
376 | + | else am("Paused by admin") | |
443 | 377 | ||
444 | - | if (!(L)) | |
378 | + | ||
379 | + | ||
380 | + | @Callable(aB) | |
381 | + | func activate () = if (z) | |
382 | + | then throw("DApp is already active") | |
383 | + | else if (!(containsElement([m, n, o, p], aB.callerPublicKey))) | |
384 | + | then throw("Only admin can call this function") | |
385 | + | else [BooleanEntry(c, true), DeleteEntry(l)] | |
386 | + | ||
387 | + | ||
388 | + | ||
389 | + | @Callable(aB) | |
390 | + | func takeIntoAccountExtraFunds (bt) = { | |
391 | + | let bu = (ag - J) | |
392 | + | let bv = (ah - K) | |
393 | + | let bw = (bu - (if ((C == unit)) | |
394 | + | then bt | |
395 | + | else 0)) | |
396 | + | let bx = (bv - (if ((D == unit)) | |
397 | + | then bt | |
398 | + | else 0)) | |
399 | + | if (!(z)) | |
445 | 400 | then throw("DApp is inactive at this moment") | |
446 | - | else if (if ((V == 0)) | |
447 | - | then true | |
448 | - | else (W == 0)) | |
449 | - | then throw("Can't exchange with zero balance") | |
450 | - | else if ((0 >= bx)) | |
451 | - | then throw(("Minimal amount to receive must be positive. Actual: " + toString(bx))) | |
452 | - | else if ((size(aJ.payments) != 1)) | |
453 | - | then throw("One attached payment expected") | |
454 | - | else if (!(ar)) | |
455 | - | then ([ScriptTransfer(aJ.caller, bt, bu)] ++ aI()) | |
456 | - | else if ((bu == O)) | |
457 | - | then { | |
458 | - | let bF = P | |
459 | - | let bG = bz(V, W) | |
460 | - | let bC = bG._1 | |
461 | - | let bD = bG._2 | |
462 | - | let bE = bG._3 | |
463 | - | let bH = (V + bt) | |
464 | - | let bI = ((W - bD) - bE) | |
465 | - | if (if (if ((O == J)) | |
466 | - | then (ai >= bH) | |
467 | - | else false) | |
468 | - | then true | |
469 | - | else if ((P == J)) | |
470 | - | then (ai >= bI) | |
471 | - | else false) | |
472 | - | then aC(bD, ao, U) | |
473 | - | else [IntegerEntry(f, bH), IntegerEntry(g, bI), ScriptTransfer(aJ.caller, bD, bF), ScriptTransfer(B, bE, bF)] | |
474 | - | } | |
475 | - | else if ((bu == P)) | |
476 | - | then { | |
477 | - | let bF = O | |
478 | - | let bJ = bz(W, V) | |
479 | - | let bC = bJ._1 | |
480 | - | let bD = bJ._2 | |
481 | - | let bE = bJ._3 | |
482 | - | let bH = ((V - bD) - bE) | |
483 | - | let bI = (W + bt) | |
484 | - | if (if (if ((O == J)) | |
485 | - | then (ai >= bH) | |
486 | - | else false) | |
487 | - | then true | |
488 | - | else if ((P == J)) | |
489 | - | then (ai >= bI) | |
490 | - | else false) | |
491 | - | then aC(bD, an, Q) | |
492 | - | else [IntegerEntry(f, bH), IntegerEntry(g, bI), ScriptTransfer(aJ.caller, bD, bF), ScriptTransfer(B, bE, bF)] | |
493 | - | } | |
494 | - | else throw(((("Incorrect asset attached. Expected: " + M) + " or ") + N)) | |
401 | + | else if ((aB.caller != this)) | |
402 | + | then throw("Only the DApp itself can call this function") | |
403 | + | else if ((0 > bt)) | |
404 | + | then throw(("Argument 'amountLeave' cannot be negative. Actual: " + toString(bt))) | |
405 | + | else if (if ((0 > bu)) | |
406 | + | then true | |
407 | + | else (0 > bv)) | |
408 | + | then am("Enroll amount negative") | |
409 | + | else if (if ((0 > bw)) | |
410 | + | then true | |
411 | + | else (0 > bx)) | |
412 | + | then throw("Too large amountLeave") | |
413 | + | else [IntegerEntry(f, (J + bw)), IntegerEntry(g, (K + bx)), IntegerEntry(("last_income_" + A), bw), IntegerEntry(("last_income_" + B), bx)] | |
495 | 414 | } | |
496 | 415 | ||
497 | 416 | ||
498 | - | ||
499 | - | @Callable(aJ) | |
500 | - | func shutdown () = if (!(L)) | |
501 | - | then throw(("DApp is already suspended. Cause: " + valueOrElse(getString(this, n), "the cause wasn't specified"))) | |
502 | - | else if (!(containsElement([v, w, x, y], aJ.callerPublicKey))) | |
503 | - | then throw("Only admin can call this function") | |
504 | - | else ax("Paused by admin") | |
505 | - | ||
506 | - | ||
507 | - | ||
508 | - | @Callable(aJ) | |
509 | - | func activate () = if (L) | |
510 | - | then throw("DApp is already active") | |
511 | - | else if (!(containsElement([v, w, x, y], aJ.callerPublicKey))) | |
512 | - | then throw("Only admin can call this function") | |
513 | - | else [BooleanEntry(c, true), DeleteEntry(n)] | |
514 | - | ||
515 | - | ||
516 | - | ||
517 | - | @Callable(aJ) | |
518 | - | func takeIntoAccountExtraFunds (bK) = { | |
519 | - | let bL = (ap - V) | |
520 | - | let bM = (aq - W) | |
521 | - | let bN = (bL - (if ((O == unit)) | |
522 | - | then bK | |
523 | - | else 0)) | |
524 | - | let bO = (bM - (if ((P == unit)) | |
525 | - | then bK | |
526 | - | else 0)) | |
527 | - | if (!(L)) | |
528 | - | then throw("DApp is inactive at this moment") | |
529 | - | else if ((aJ.caller != this)) | |
530 | - | then throw("Only the DApp itself can call this function") | |
531 | - | else if ((0 > bK)) | |
532 | - | then throw(("Argument 'amountLeave' cannot be negative. Actual: " + toString(bK))) | |
533 | - | else if (if ((0 > bL)) | |
534 | - | then true | |
535 | - | else (0 > bM)) | |
536 | - | then ax("Enroll amount negative") | |
537 | - | else if (if ((0 > bN)) | |
538 | - | then true | |
539 | - | else (0 > bO)) | |
540 | - | then throw("Too large amountLeave") | |
541 | - | else [IntegerEntry(f, (V + bN)), IntegerEntry(g, (W + bO)), IntegerEntry(("last_income_" + M), bN), IntegerEntry(("last_income_" + N), bO)] | |
542 | - | } | |
543 | - | ||
544 | - | ||
545 | - | @Verifier(bP) | |
546 | - | func bQ () = { | |
547 | - | let R = bP | |
548 | - | if ($isInstanceOf(R, "InvokeScriptTransaction")) | |
417 | + | @Verifier(by) | |
418 | + | func bz () = { | |
419 | + | let F = by | |
420 | + | if ($isInstanceOf(F, "InvokeScriptTransaction")) | |
549 | 421 | then { | |
550 | - | let bR = R | |
551 | - | let bS = if ((bR.dApp == this)) | |
552 | - | then (bR.function == "takeIntoAccountExtraFunds") | |
553 | - | else false | |
554 | - | let bT = if ((bR.dApp == D)) | |
555 | - | then if (if (if ((bR.function == "lockNeutrino")) | |
556 | - | then (size(bR.payments) == 1) | |
557 | - | else false) | |
558 | - | then (bR.payments[0].assetId == J) | |
559 | - | else false) | |
560 | - | then true | |
561 | - | else if ((bR.function == "unlockNeutrino")) | |
562 | - | then (size(bR.payments) == 0) | |
563 | - | else false | |
564 | - | else false | |
565 | - | let bU = if (if (if ((bR.dApp == E)) | |
566 | - | then (bR.function == "exchange") | |
567 | - | else false) | |
568 | - | then (O == J) | |
422 | + | let bA = F | |
423 | + | if (if (if (sigVerify(bA.bodyBytes, bA.proofs[0], q)) | |
424 | + | then (bA.dApp == s) | |
569 | 425 | else false) | |
570 | 426 | then true | |
571 | - | else if ((P == J)) | |
572 | - | then (bR.payments[0].assetId == J) | |
427 | + | else if (if (sigVerify(bA.bodyBytes, bA.proofs[0], q)) | |
428 | + | then (bA.function == "exchange") | |
429 | + | else false) | |
430 | + | then if (if (if (if ((C == u)) | |
431 | + | then (D == t) | |
432 | + | else false) | |
433 | + | then (bA.dApp == w) | |
434 | + | else false) | |
435 | + | then if ((bA.payments[0].assetId == unit)) | |
436 | + | then true | |
437 | + | else (bA.payments[0].assetId == t) | |
438 | + | else false) | |
439 | + | then true | |
440 | + | else if (if ((C == u)) | |
441 | + | then (D == v) | |
442 | + | else false) | |
443 | + | then if (if ((bA.dApp == x)) | |
444 | + | then (bA.payments[0].assetId == t) | |
445 | + | else false) | |
446 | + | then true | |
447 | + | else if ((bA.dApp == w)) | |
448 | + | then if ((bA.payments[0].assetId == unit)) | |
449 | + | then true | |
450 | + | else (bA.payments[0].assetId == t) | |
451 | + | else false | |
452 | + | else false | |
453 | + | else false) | |
454 | + | then true | |
455 | + | else if (if (sigVerify(bA.bodyBytes, bA.proofs[0], q)) | |
456 | + | then (bA.dApp == this) | |
457 | + | else false) | |
458 | + | then (bA.function == "takeIntoAccountExtraFunds") | |
573 | 459 | else false | |
574 | - | let bV = if (if (if (sigVerify(bP.bodyBytes, bP.proofs[0], v)) | |
575 | - | then true | |
576 | - | else sigVerify(bP.bodyBytes, bP.proofs[0], w)) | |
577 | - | then true | |
578 | - | else sigVerify(bP.bodyBytes, bP.proofs[0], x)) | |
579 | - | then true | |
580 | - | else sigVerify(bP.bodyBytes, bP.proofs[0], z) | |
581 | - | if (if (if (bS) | |
582 | - | then true | |
583 | - | else bT) | |
584 | - | then true | |
585 | - | else bU) | |
586 | - | then bV | |
587 | - | else false | |
588 | 460 | } | |
589 | 461 | else { | |
590 | - | let | |
462 | + | let bB = if (sigVerify(by.bodyBytes, by.proofs[0], m)) | |
591 | 463 | then 1 | |
592 | 464 | else 0 | |
593 | - | let | |
465 | + | let bC = if (sigVerify(by.bodyBytes, by.proofs[1], n)) | |
594 | 466 | then 1 | |
595 | 467 | else 0 | |
596 | - | let | |
468 | + | let bD = if (sigVerify(by.bodyBytes, by.proofs[2], o)) | |
597 | 469 | then 1 | |
598 | 470 | else 0 | |
599 | - | ((( | |
471 | + | (((bB + bC) + bD) >= 2) | |
600 | 472 | } | |
601 | 473 | } | |
602 | 474 |
Old | New | Differences | |
---|---|---|---|
1 | 1 | {-# STDLIB_VERSION 4 #-} | |
2 | 2 | {-# SCRIPT_TYPE ACCOUNT #-} | |
3 | 3 | {-# CONTENT_TYPE DAPP #-} | |
4 | 4 | let a = "1.0.0" | |
5 | 5 | ||
6 | 6 | let b = "version" | |
7 | 7 | ||
8 | 8 | let c = "active" | |
9 | 9 | ||
10 | 10 | let d = "A_asset_id" | |
11 | 11 | ||
12 | 12 | let e = "B_asset_id" | |
13 | 13 | ||
14 | 14 | let f = "A_asset_balance" | |
15 | 15 | ||
16 | 16 | let g = "B_asset_balance" | |
17 | 17 | ||
18 | - | let h = " | |
18 | + | let h = "share_asset_id" | |
19 | 19 | ||
20 | - | let i = " | |
20 | + | let i = "share_asset_supply" | |
21 | 21 | ||
22 | - | let j = " | |
22 | + | let j = "commission" | |
23 | 23 | ||
24 | - | let k = " | |
24 | + | let k = "commission_scale_delimiter" | |
25 | 25 | ||
26 | - | let l = " | |
26 | + | let l = "shutdown_cause" | |
27 | 27 | ||
28 | - | let m = | |
28 | + | let m = base58'Kn7NpzaG12dLZgcHf2ipUftU6hbJygmrhFqQYE4B7ZK' | |
29 | 29 | ||
30 | - | let n = | |
30 | + | let n = base58'Kn7NpzaG12dLZgcHf2ipUftU6hbJygmrhFqQYE4B7ZK' | |
31 | 31 | ||
32 | - | let o = | |
32 | + | let o = base58'Kn7NpzaG12dLZgcHf2ipUftU6hbJygmrhFqQYE4B7ZK' | |
33 | 33 | ||
34 | - | let p = | |
34 | + | let p = base58'Kn7NpzaG12dLZgcHf2ipUftU6hbJygmrhFqQYE4B7ZK' | |
35 | 35 | ||
36 | - | let q = | |
36 | + | let q = base58'Kn7NpzaG12dLZgcHf2ipUftU6hbJygmrhFqQYE4B7ZK' | |
37 | 37 | ||
38 | - | let r = | |
38 | + | let r = Address(base58'3NAGTtZz6WpupSN89NZD5rMZwwziZEg4Kx4') | |
39 | 39 | ||
40 | - | let s = | |
40 | + | let s = Address(base58'3N6q7sCGSSLBUXDdjBdYGTJbZGZfhhh8cNg') | |
41 | 41 | ||
42 | - | let t = | |
42 | + | let t = base58'8UrfDVd5GreeUwm7uPk7eYz1eMv376kzR52C6sANPkwS' | |
43 | 43 | ||
44 | - | let u = | |
44 | + | let u = base58'36mg8NZTaFRDygiVwb8uBnLR51hetJruUCZcxhaVcHj9' | |
45 | 45 | ||
46 | - | let v = base58' | |
46 | + | let v = base58'2HAJrwa8q4SxBx9cHYaBTQdBjdk5wwqdof7ccpAx2uhZ' | |
47 | 47 | ||
48 | - | let w = base58' | |
48 | + | let w = Address(base58'3N3g1MVp6DXyfqhq8sMPA6CRRkTTPtBsZeh') | |
49 | 49 | ||
50 | - | let x = base58' | |
50 | + | let x = Address(base58'3N95taAsiWcVMmXdVShZ2ann6MAboXrFT1b') | |
51 | 51 | ||
52 | - | let y = | |
52 | + | let y = 270000 | |
53 | 53 | ||
54 | - | let z = | |
54 | + | let z = getBooleanValue(this, c) | |
55 | 55 | ||
56 | - | let A = | |
56 | + | let A = getStringValue(this, d) | |
57 | 57 | ||
58 | - | let B = | |
58 | + | let B = getStringValue(this, e) | |
59 | 59 | ||
60 | - | let C = Address(base58'3MrJgdL1GniipErHy44YF9idzLaUL2iX5DQ') | |
60 | + | let C = if ((A == "WAVES")) | |
61 | + | then unit | |
62 | + | else fromBase58String(A) | |
61 | 63 | ||
62 | - | let D = Address(base58'3N6q7sCGSSLBUXDdjBdYGTJbZGZfhhh8cNg') | |
64 | + | let D = if ((B == "WAVES")) | |
65 | + | then unit | |
66 | + | else fromBase58String(B) | |
63 | 67 | ||
64 | - | let E = Address(base58'3N3g1MVp6DXyfqhq8sMPA6CRRkTTPtBsZeh') | |
65 | - | ||
66 | - | let F = valueOrErrorMessage(getInteger(C, r), "Empty kBasePeriod") | |
67 | - | ||
68 | - | let G = valueOrErrorMessage(getInteger(C, t), "Empty kStartHeight") | |
69 | - | ||
70 | - | let H = valueOrErrorMessage(getInteger(C, s), "Empty kPeriodLength") | |
71 | - | ||
72 | - | let I = ((F + ((height - G) / H)) + 3) | |
73 | - | ||
74 | - | let J = base58'8UrfDVd5GreeUwm7uPk7eYz1eMv376kzR52C6sANPkwS' | |
75 | - | ||
76 | - | let K = 270000 | |
77 | - | ||
78 | - | let L = getBooleanValue(this, c) | |
79 | - | ||
80 | - | let M = getStringValue(this, d) | |
81 | - | ||
82 | - | let N = getStringValue(this, e) | |
83 | - | ||
84 | - | let O = if ((M == "WAVES")) | |
85 | - | then unit | |
86 | - | else fromBase58String(M) | |
87 | - | ||
88 | - | let P = if ((N == "WAVES")) | |
89 | - | then unit | |
90 | - | else fromBase58String(N) | |
91 | - | ||
92 | - | let Q = { | |
93 | - | let R = O | |
94 | - | if ($isInstanceOf(R, "ByteVector")) | |
68 | + | let E = { | |
69 | + | let F = C | |
70 | + | if ($isInstanceOf(F, "ByteVector")) | |
95 | 71 | then { | |
96 | - | let | |
97 | - | value(assetInfo( | |
72 | + | let G = F | |
73 | + | value(assetInfo(G)).name | |
98 | 74 | } | |
99 | - | else if ($isInstanceOf( | |
75 | + | else if ($isInstanceOf(F, "Unit")) | |
100 | 76 | then { | |
101 | - | let | |
77 | + | let H = F | |
102 | 78 | "WAVES" | |
103 | 79 | } | |
104 | 80 | else throw("Match error") | |
105 | 81 | } | |
106 | 82 | ||
107 | - | let | |
108 | - | let | |
109 | - | if ($isInstanceOf( | |
83 | + | let I = { | |
84 | + | let F = D | |
85 | + | if ($isInstanceOf(F, "ByteVector")) | |
110 | 86 | then { | |
111 | - | let | |
112 | - | value(assetInfo( | |
87 | + | let G = F | |
88 | + | value(assetInfo(G)).name | |
113 | 89 | } | |
114 | - | else if ($isInstanceOf( | |
90 | + | else if ($isInstanceOf(F, "Unit")) | |
115 | 91 | then { | |
116 | - | let | |
92 | + | let H = F | |
117 | 93 | "WAVES" | |
118 | 94 | } | |
119 | 95 | else throw("Match error") | |
120 | 96 | } | |
121 | 97 | ||
122 | - | let | |
98 | + | let J = getIntegerValue(this, f) | |
123 | 99 | ||
124 | - | let | |
100 | + | let K = getIntegerValue(this, g) | |
125 | 101 | ||
126 | - | let | |
102 | + | let L = fromBase58String(getStringValue(this, h)) | |
127 | 103 | ||
128 | - | let | |
104 | + | let M = getIntegerValue(this, i) | |
129 | 105 | ||
130 | - | let | |
106 | + | let N = 3000 | |
131 | 107 | ||
132 | - | let | |
108 | + | let O = 1200 | |
133 | 109 | ||
134 | - | let | |
110 | + | let P = 1000000 | |
135 | 111 | ||
136 | - | let | |
112 | + | let Q = 1000 | |
137 | 113 | ||
138 | - | let | |
114 | + | let R = 100000000 | |
139 | 115 | ||
140 | - | let | |
116 | + | let S = 1000 | |
141 | 117 | ||
142 | - | let | |
118 | + | let T = 8 | |
143 | 119 | ||
144 | - | func | |
145 | - | let | |
146 | - | if ($isInstanceOf( | |
120 | + | func U (V) = { | |
121 | + | let F = V | |
122 | + | if ($isInstanceOf(F, "ByteVector")) | |
147 | 123 | then { | |
148 | - | let | |
149 | - | assetBalance(this, | |
124 | + | let G = F | |
125 | + | assetBalance(this, G) | |
150 | 126 | } | |
151 | - | else if ($isInstanceOf( | |
127 | + | else if ($isInstanceOf(F, "Unit")) | |
152 | 128 | then { | |
153 | - | let | |
129 | + | let H = F | |
154 | 130 | wavesBalance(this).available | |
155 | 131 | } | |
156 | 132 | else throw("Match error") | |
157 | 133 | } | |
158 | 134 | ||
159 | 135 | ||
160 | - | let ai = { | |
161 | - | let R = getInteger(D, ((("rpd_balance_" + toBase58String(J)) + "_") + toString(this))) | |
162 | - | if ($isInstanceOf(R, "Int")) | |
163 | - | then { | |
164 | - | let aj = R | |
165 | - | aj | |
166 | - | } | |
167 | - | else if ($isInstanceOf(R, "Unit")) | |
136 | + | func W (X,Y) = { | |
137 | + | let Z = { | |
138 | + | let F = getInteger(X, ((("rpd_balance_" + Y) + "_") + toString(this))) | |
139 | + | if ($isInstanceOf(F, "Int")) | |
168 | 140 | then { | |
169 | - | let | |
170 | - | | |
141 | + | let aa = F | |
142 | + | aa | |
171 | 143 | } | |
172 | - | else throw("Match error") | |
144 | + | else if ($isInstanceOf(F, "Unit")) | |
145 | + | then { | |
146 | + | let ab = F | |
147 | + | 0 | |
148 | + | } | |
149 | + | else throw("Match error") | |
150 | + | } | |
151 | + | Z | |
173 | 152 | } | |
174 | 153 | ||
175 | - | let al = getIntegerValue(this, h) | |
176 | 154 | ||
177 | - | let | |
155 | + | let ac = W(s, A) | |
178 | 156 | ||
179 | - | let an = (V - (if ((O == J)) | |
180 | - | then ai | |
181 | - | else 0)) | |
157 | + | let ad = W(s, B) | |
182 | 158 | ||
183 | - | let ao = (W - (if ((P == J)) | |
184 | - | then ai | |
185 | - | else 0)) | |
159 | + | let ae = (J - ac) | |
186 | 160 | ||
187 | - | let ap = (ag(O) + (if ((O == J)) | |
188 | - | then ai | |
189 | - | else 0)) | |
161 | + | let af = (K - ad) | |
190 | 162 | ||
191 | - | let aq = (ag(P) + (if ((P == J)) | |
192 | - | then ai | |
193 | - | else 0)) | |
163 | + | let ag = (U(C) + ac) | |
194 | 164 | ||
195 | - | let ar = if ((ap >= V)) | |
196 | - | then (aq >= W) | |
165 | + | let ah = (U(D) + ad) | |
166 | + | ||
167 | + | let ai = if ((ag >= J)) | |
168 | + | then (ah >= K) | |
197 | 169 | else false | |
198 | 170 | ||
199 | - | func | |
200 | - | let | |
201 | - | if ($isInstanceOf( | |
171 | + | func aj (V) = { | |
172 | + | let F = V | |
173 | + | if ($isInstanceOf(F, "ByteVector")) | |
202 | 174 | then { | |
203 | - | let | |
204 | - | let | |
205 | - | let | |
206 | - | $Tuple3( | |
175 | + | let G = F | |
176 | + | let ak = toBase58String(G) | |
177 | + | let al = valueOrErrorMessage(assetInfo(G), (("Asset " + ak) + " doesn't exist")) | |
178 | + | $Tuple3(ak, al.name, al.decimals) | |
207 | 179 | } | |
208 | - | else if ($isInstanceOf( | |
180 | + | else if ($isInstanceOf(F, "Unit")) | |
209 | 181 | then { | |
210 | - | let | |
182 | + | let H = F | |
211 | 183 | $Tuple3("WAVES", "WAVES", 8) | |
212 | 184 | } | |
213 | 185 | else throw("Match error") | |
214 | 186 | } | |
215 | 187 | ||
216 | 188 | ||
217 | - | func av (aw) = if ((aw == "WAVES")) | |
218 | - | then $Tuple3("WAVES", "WAVES", 8) | |
219 | - | else { | |
220 | - | let at = aw | |
221 | - | let S = fromBase58String(aw) | |
222 | - | let au = valueOrErrorMessage(assetInfo(S), (("Asset " + at) + " doesn't exist")) | |
223 | - | $Tuple3(at, au.name, au.decimals) | |
224 | - | } | |
189 | + | func am (an) = [BooleanEntry(c, false), StringEntry(l, an)] | |
225 | 190 | ||
226 | 191 | ||
227 | - | func ax (ay) = [BooleanEntry(c, false), StringEntry(n, ay)] | |
192 | + | func ao () = { | |
193 | + | let ap = if ((ac > 0)) | |
194 | + | then 1 | |
195 | + | else 0 | |
196 | + | let aq = if ((ad > 0)) | |
197 | + | then 1 | |
198 | + | else 0 | |
199 | + | (ap + aq) | |
200 | + | } | |
228 | 201 | ||
229 | 202 | ||
230 | - | func | |
203 | + | func ar (as,V) = if ((V == t)) | |
231 | 204 | then { | |
232 | - | let | |
233 | - | if ((0 >= | |
234 | - | then throw((((("Insufficient amount " + toString( | |
235 | - | else | |
205 | + | let at = (as - (ao() * y)) | |
206 | + | if ((0 >= at)) | |
207 | + | then throw((((("Insufficient amount " + toString(as)) + " to deduct staking fee ") + toString(y)) + " USD-N")) | |
208 | + | else at | |
236 | 209 | } | |
237 | - | else | |
210 | + | else as | |
238 | 211 | ||
239 | 212 | ||
240 | - | func | |
213 | + | func au (as,av,aw) = throw((((((((("Insufficient DApp balance to pay " + toString(as)) + " ") + aw) + " due to staking. Available: ") + toString(av)) + " ") + aw) + ". Please contact support in Telegram: https://t.me/swopfisupport")) | |
241 | 214 | ||
242 | 215 | ||
243 | - | func | |
216 | + | func ax (ay,az) = throw((((((((((((((((("Insufficient DApp balance to pay " + toString(ay)) + " ") + E) + " and ") + toString(az)) + " ") + I) + " due to staking. Available: ") + toString(ae)) + " ") + E) + " and ") + toString(af)) + " ") + I) + ". Please contact support in Telegram: https://t.me/swopfisupport")) | |
244 | 217 | ||
245 | 218 | ||
246 | - | func | |
219 | + | func aA () = am(((((((((((((((("Suspicious state. Actual balances: " + toString(ag)) + " ") + E) + ", ") + toString(ah)) + " ") + I) + ". State: ") + toString(J)) + " ") + E) + ", ") + toString(K)) + " ") + I)) | |
247 | 220 | ||
248 | 221 | ||
249 | - | @Callable(aJ) | |
250 | - | func init (aK) = { | |
251 | - | let aL = $Tuple2(aJ.payments[0].amount, aJ.payments[0].assetId) | |
252 | - | let aM = aL._1 | |
253 | - | let aN = aL._2 | |
254 | - | let aO = $Tuple2(aJ.payments[1].amount, aJ.payments[1].assetId) | |
255 | - | let aP = aO._1 | |
256 | - | let aQ = aO._2 | |
257 | - | let aR = as(aN) | |
258 | - | let aS = aR._1 | |
259 | - | let aT = aR._2 | |
260 | - | let aU = aR._3 | |
261 | - | let aV = as(aQ) | |
262 | - | let aW = aV._1 | |
263 | - | let aX = aV._2 | |
264 | - | let aY = aV._3 | |
265 | - | if (!(containsElement([v, w, x, z], aJ.callerPublicKey))) | |
266 | - | then throw("Only admin can call this function") | |
267 | - | else if (isDefined(getBoolean(this, c))) | |
268 | - | then throw("DApp is already active") | |
269 | - | else if ((aN == aQ)) | |
270 | - | then throw("Assets must be different") | |
271 | - | else { | |
272 | - | let aZ = ((("s" + take(aT, 7)) + "_") + take(aX, 7)) | |
273 | - | let ba = ((((("ShareToken of SwopFi protocol for " + aT) + " and ") + aX) + " at address ") + toString(this)) | |
274 | - | let bb = ((aU + aY) / 2) | |
275 | - | let bc = fraction(pow(aM, aU, 5, 1, aU, HALFDOWN), pow(aP, aY, 5, 1, aY, HALFDOWN), pow(10, 0, bb, 0, 0, HALFDOWN)) | |
276 | - | let bd = Issue(aZ, ba, bc, bb, true) | |
277 | - | let be = calculateAssetId(bd) | |
278 | - | let bf = [StringEntry(b, a), BooleanEntry(c, true), StringEntry(d, aS), StringEntry(e, aW), IntegerEntry(f, aM), IntegerEntry(g, aP), IntegerEntry(l, Z), IntegerEntry(m, ab), bd, StringEntry(j, toBase58String(be)), IntegerEntry(k, bc), ScriptTransfer(aJ.caller, bc, be)] | |
279 | - | if (aK) | |
280 | - | then (bf ++ [BooleanEntry(o, aK), IntegerEntry(p, (G + (I * H)))]) | |
281 | - | else bf | |
282 | - | } | |
222 | + | @Callable(aB) | |
223 | + | func init () = { | |
224 | + | let aC = $Tuple2(aB.payments[0].amount, aB.payments[0].assetId) | |
225 | + | let aD = aC._1 | |
226 | + | let aE = aC._2 | |
227 | + | let aF = $Tuple2(aB.payments[1].amount, aB.payments[1].assetId) | |
228 | + | let aG = aF._1 | |
229 | + | let aH = aF._2 | |
230 | + | let aI = aj(aE) | |
231 | + | let aJ = aI._1 | |
232 | + | let aK = aI._2 | |
233 | + | let aL = aI._3 | |
234 | + | let aM = aj(aH) | |
235 | + | let aN = aM._1 | |
236 | + | let aO = aM._2 | |
237 | + | let aP = aM._3 | |
238 | + | if (isDefined(getBoolean(this, c))) | |
239 | + | then throw("DApp is already active") | |
240 | + | else if ((aE == aH)) | |
241 | + | then throw("Assets must be different") | |
242 | + | else { | |
243 | + | let aQ = ((("s" + take(aK, 7)) + "_") + take(aO, 7)) | |
244 | + | let aR = ((((("ShareToken of SwopFi protocol for " + aK) + " and ") + aO) + " at address ") + toString(this)) | |
245 | + | let aS = ((aL + aP) / 2) | |
246 | + | let aT = fraction(pow(aD, aL, 5, 1, aL, HALFDOWN), pow(aG, aP, 5, 1, aP, HALFDOWN), pow(10, 0, aS, 0, 0, HALFDOWN)) | |
247 | + | let aU = Issue(aQ, aR, aT, aS, true) | |
248 | + | let aV = calculateAssetId(aU) | |
249 | + | [StringEntry(b, a), BooleanEntry(c, true), StringEntry(d, aJ), StringEntry(e, aN), IntegerEntry(f, aD), IntegerEntry(g, aG), IntegerEntry(j, N), IntegerEntry(k, P), aU, StringEntry(h, toBase58String(aV)), IntegerEntry(i, aT), ScriptTransfer(aB.caller, aT, aV)] | |
250 | + | } | |
283 | 251 | } | |
284 | 252 | ||
285 | 253 | ||
286 | 254 | ||
287 | - | @Callable(aJ) | |
288 | - | func initWithInitRatio (bg,bh,M,N,aK) = { | |
289 | - | let bi = av(M) | |
290 | - | let aS = bi._1 | |
291 | - | let aT = bi._2 | |
292 | - | let aU = bi._3 | |
293 | - | let bj = av(N) | |
294 | - | let aW = bj._1 | |
295 | - | let aX = bj._2 | |
296 | - | let aY = bj._3 | |
297 | - | if (!(containsElement([v, w, x, z], aJ.callerPublicKey))) | |
298 | - | then throw("Only admin can call this function") | |
299 | - | else if (isDefined(getBoolean(this, c))) | |
300 | - | then throw("DApp is already active") | |
301 | - | else if ((M == N)) | |
302 | - | then throw("Assets must be different") | |
303 | - | else { | |
304 | - | let aZ = ((("s" + take(aT, 7)) + "_") + take(aX, 7)) | |
305 | - | let ba = ((((("ShareToken of SwopFi protocol for " + aT) + " and ") + aX) + " at address ") + toString(this)) | |
306 | - | let bb = ((aU + aY) / 2) | |
307 | - | let bc = 0 | |
308 | - | let bd = Issue(aZ, ba, bc, bb, true) | |
309 | - | let be = calculateAssetId(bd) | |
310 | - | let bf = [StringEntry(b, a), BooleanEntry(c, true), StringEntry(d, aS), StringEntry(e, aW), IntegerEntry(h, bg), IntegerEntry(i, bh), IntegerEntry(f, 0), IntegerEntry(g, 0), IntegerEntry(l, Z), IntegerEntry(m, ab), bd, StringEntry(j, toBase58String(be)), IntegerEntry(k, bc)] | |
311 | - | if (aK) | |
312 | - | then (bf ++ [BooleanEntry(o, aK), IntegerEntry(p, (G + (I * H)))]) | |
313 | - | else bf | |
314 | - | } | |
255 | + | @Callable(aB) | |
256 | + | func replenishWithTwoTokens (aW) = { | |
257 | + | let aE = aB.payments[0].assetId | |
258 | + | let aH = aB.payments[1].assetId | |
259 | + | let aD = ar(aB.payments[0].amount, aE) | |
260 | + | let aG = ar(aB.payments[1].amount, aH) | |
261 | + | let aX = fraction(fraction(J, R, aD), Q, fraction(K, R, aG)) | |
262 | + | let aY = fraction(aD, R, J) | |
263 | + | let aZ = fraction(aG, R, K) | |
264 | + | let ba = fraction(min([aY, aZ]), M, R) | |
265 | + | if (!(z)) | |
266 | + | then throw("DApp is inactive at this moment") | |
267 | + | else if (if ((0 > aW)) | |
268 | + | then true | |
269 | + | else (aW > S)) | |
270 | + | then throw(((("Slippage tolerance must be between 0 and " + toString(S)) + " inclusively. Actual: ") + toString(aW))) | |
271 | + | else if ((size(aB.payments) != 2)) | |
272 | + | then throw("Two attached assets expected") | |
273 | + | else if (if ((aE != C)) | |
274 | + | then true | |
275 | + | else (aH != D)) | |
276 | + | then throw(((("Incorrect assets attached. Expected: " + A) + " and ") + B)) | |
277 | + | else if (if ((((Q * (S - aW)) / S) > aX)) | |
278 | + | then true | |
279 | + | else (aX > ((Q * (S + aW)) / S))) | |
280 | + | then throw("Incorrect assets amount: amounts must have the contract ratio") | |
281 | + | else if ((ba == 0)) | |
282 | + | then throw("Too small amount to replenish") | |
283 | + | else if (!(ai)) | |
284 | + | then ([ScriptTransfer(aB.caller, aD, aE), ScriptTransfer(aB.caller, aG, aH)] ++ aA()) | |
285 | + | else [IntegerEntry(f, (J + aD)), IntegerEntry(g, (K + aG)), IntegerEntry(i, (M + ba)), Reissue(L, ba, true), ScriptTransfer(aB.caller, ba, L)] | |
315 | 286 | } | |
316 | 287 | ||
317 | 288 | ||
318 | 289 | ||
319 | - | @Callable(aJ) | |
320 | - | func keepLimitForFirstHarvest (bk) = if (!(L)) | |
321 | - | then throw("DApp is inactive at this moment") | |
322 | - | else if (!(containsElement([v, w, x, z], aJ.callerPublicKey))) | |
323 | - | then throw("Only admin can call this function") | |
324 | - | else [IntegerEntry(q, bk)] | |
325 | - | ||
326 | - | ||
327 | - | ||
328 | - | @Callable(aJ) | |
329 | - | func replenishWithTwoTokens (bl) = { | |
330 | - | let aN = aJ.payments[0].assetId | |
331 | - | let aQ = aJ.payments[1].assetId | |
332 | - | let aM = az(aJ.payments[0].amount, aN) | |
333 | - | let aP = az(aJ.payments[1].amount, aQ) | |
334 | - | if (if ((V == 0)) | |
335 | - | then (W == 0) | |
336 | - | else false) | |
337 | - | then { | |
338 | - | let bm = as(aN) | |
339 | - | let aS = bm._1 | |
340 | - | let aT = bm._2 | |
341 | - | let aU = bm._3 | |
342 | - | let bn = as(aQ) | |
343 | - | let aW = bn._1 | |
344 | - | let aX = bn._2 | |
345 | - | let aY = bn._3 | |
346 | - | let bo = fraction(fraction(al, ad, aM), ac, fraction(am, ad, aP)) | |
347 | - | if ((aN == aQ)) | |
348 | - | then throw("Assets must be different") | |
349 | - | else { | |
350 | - | let bb = ((aU + aY) / 2) | |
351 | - | let bc = fraction(pow(aM, aU, 5, 1, aU, HALFDOWN), pow(aP, aY, 5, 1, aY, HALFDOWN), pow(10, 0, bb, 0, 0, HALFDOWN)) | |
352 | - | if (!(L)) | |
353 | - | then throw("DApp is inactive at this moment") | |
354 | - | else if (if ((0 > bl)) | |
355 | - | then true | |
356 | - | else (bl > ae)) | |
357 | - | then throw(((("Slippage tolerance must be between 0 and " + toString(ae)) + " inclusively. Actual: ") + toString(bl))) | |
358 | - | else if ((size(aJ.payments) != 2)) | |
359 | - | then throw("Two attached assets expected") | |
360 | - | else if (if ((((ac * (ae - bl)) / ae) > bo)) | |
361 | - | then true | |
362 | - | else (bo > ((ac * (ae + bl)) / ae))) | |
363 | - | then throw("Incorrect assets amount: amounts must have the contract ratio") | |
364 | - | else if (if ((aN != O)) | |
365 | - | then true | |
366 | - | else (aQ != P)) | |
367 | - | then throw(((("Incorrect assets attached. Expected: " + M) + " and ") + N)) | |
368 | - | else if ((bc == 0)) | |
369 | - | then throw("Too small amount to replenish") | |
370 | - | else if (!(ar)) | |
371 | - | then ([ScriptTransfer(aJ.caller, aM, aN), ScriptTransfer(aJ.caller, aP, aQ)] ++ aI()) | |
372 | - | else [Reissue(X, bc, true), IntegerEntry(f, aM), IntegerEntry(g, aP), IntegerEntry(k, bc), ScriptTransfer(aJ.caller, bc, X)] | |
373 | - | } | |
374 | - | } | |
375 | - | else { | |
376 | - | let bo = fraction(fraction(V, ad, aM), ac, fraction(W, ad, aP)) | |
377 | - | let bp = fraction(aM, ad, V) | |
378 | - | let bq = fraction(aP, ad, W) | |
379 | - | let br = fraction(min([bp, bq]), Y, ad) | |
380 | - | if (!(L)) | |
381 | - | then throw("DApp is inactive at this moment") | |
382 | - | else if (if ((0 > bl)) | |
383 | - | then true | |
384 | - | else (bl > ae)) | |
385 | - | then throw(((("Slippage tolerance must be between 0 and " + toString(ae)) + " inclusively. Actual: ") + toString(bl))) | |
386 | - | else if ((size(aJ.payments) != 2)) | |
387 | - | then throw("Two attached assets expected") | |
388 | - | else if (if ((aN != O)) | |
389 | - | then true | |
390 | - | else (aQ != P)) | |
391 | - | then throw(((("Incorrect assets attached. Expected: " + M) + " and ") + N)) | |
392 | - | else if (if ((((ac * (ae - bl)) / ae) > bo)) | |
393 | - | then true | |
394 | - | else (bo > ((ac * (ae + bl)) / ae))) | |
395 | - | then throw("Incorrect assets amount: amounts must have the contract ratio") | |
396 | - | else if ((br == 0)) | |
397 | - | then throw("Too small amount to replenish") | |
398 | - | else if (!(ar)) | |
399 | - | then ([ScriptTransfer(aJ.caller, aM, aN), ScriptTransfer(aJ.caller, aP, aQ)] ++ aI()) | |
400 | - | else [IntegerEntry(f, (V + aM)), IntegerEntry(g, (W + aP)), IntegerEntry(k, (Y + br)), Reissue(X, br, true), ScriptTransfer(aJ.caller, br, X)] | |
401 | - | } | |
290 | + | @Callable(aB) | |
291 | + | func withdraw () = { | |
292 | + | let bb = $Tuple2(aB.payments[0].amount, aB.payments[0].assetId) | |
293 | + | let bc = bb._1 | |
294 | + | let bd = bb._2 | |
295 | + | let be = ar(fraction(bc, J, M), C) | |
296 | + | let bf = ar(fraction(bc, K, M), D) | |
297 | + | if (!(z)) | |
298 | + | then throw("DApp is inactive at this moment") | |
299 | + | else if ((size(aB.payments) != 1)) | |
300 | + | then throw("One attached payment expected") | |
301 | + | else if ((bd != L)) | |
302 | + | then throw(("Incorrect asset attached. Expected: " + toBase58String(L))) | |
303 | + | else if (!(ai)) | |
304 | + | then ([ScriptTransfer(aB.caller, bc, bd)] ++ aA()) | |
305 | + | else if (if ((be > ae)) | |
306 | + | then true | |
307 | + | else (bf > af)) | |
308 | + | then ax(be, bf) | |
309 | + | else [IntegerEntry(f, (J - be)), IntegerEntry(g, (K - bf)), IntegerEntry(i, (M - bc)), Burn(L, bc), ScriptTransfer(aB.caller, be, C), ScriptTransfer(aB.caller, bf, D)] | |
402 | 310 | } | |
403 | 311 | ||
404 | 312 | ||
405 | 313 | ||
406 | - | @Callable(aJ) | |
407 | - | func withdraw () = { | |
408 | - | let bs = $Tuple2(aJ.payments[0].amount, aJ.payments[0].assetId) | |
409 | - | let bt = bs._1 | |
410 | - | let bu = bs._2 | |
411 | - | let bv = az(fraction(bt, V, Y), O) | |
412 | - | let bw = az(fraction(bt, W, Y), P) | |
413 | - | if (!(L)) | |
314 | + | @Callable(aB) | |
315 | + | func exchange (bg) = { | |
316 | + | let bh = $Tuple2(aB.payments[0].amount, aB.payments[0].assetId) | |
317 | + | let bc = bh._1 | |
318 | + | let bd = bh._2 | |
319 | + | func bi (bj,bk) = { | |
320 | + | let bl = fraction(bk, bc, (bc + bj)) | |
321 | + | let bm = fraction(bl, (P - N), P) | |
322 | + | let bn = fraction(bl, O, P) | |
323 | + | if ((bg > bm)) | |
324 | + | then throw(((("Calculated amount to receive " + toString(bm)) + " is less than specified minimum ") + toString(bg))) | |
325 | + | else $Tuple3(bl, bm, bn) | |
326 | + | } | |
327 | + | ||
328 | + | if (!(z)) | |
414 | 329 | then throw("DApp is inactive at this moment") | |
415 | - | else if ((size(aJ.payments) != 1)) | |
416 | - | then throw("One attached payment expected") | |
417 | - | else if ((bu != X)) | |
418 | - | then throw(("Incorrect asset attached. Expected: " + toBase58String(X))) | |
419 | - | else if (!(ar)) | |
420 | - | then ([ScriptTransfer(aJ.caller, bt, bu)] ++ aI()) | |
421 | - | else if (if ((bv > an)) | |
422 | - | then true | |
423 | - | else (bw > ao)) | |
424 | - | then aF(bv, bw) | |
425 | - | else [IntegerEntry(f, (V - bv)), IntegerEntry(g, (W - bw)), IntegerEntry(k, (Y - bt)), Burn(X, bt), ScriptTransfer(aJ.caller, bv, O), ScriptTransfer(aJ.caller, bw, P)] | |
330 | + | else if ((0 >= bg)) | |
331 | + | then throw(("Minimal amount to receive must be positive. Actual: " + toString(bg))) | |
332 | + | else if ((size(aB.payments) != 1)) | |
333 | + | then throw("One attached payment expected") | |
334 | + | else if (!(ai)) | |
335 | + | then ([ScriptTransfer(aB.caller, bc, bd)] ++ aA()) | |
336 | + | else if ((bd == C)) | |
337 | + | then { | |
338 | + | let bo = D | |
339 | + | let bp = bi(J, K) | |
340 | + | let bl = bp._1 | |
341 | + | let bm = bp._2 | |
342 | + | let bn = bp._3 | |
343 | + | let bq = (J + bc) | |
344 | + | let br = ((K - bm) - bn) | |
345 | + | if (if ((ac >= bq)) | |
346 | + | then true | |
347 | + | else (ad >= br)) | |
348 | + | then au(bm, af, I) | |
349 | + | else [IntegerEntry(f, bq), IntegerEntry(g, br), ScriptTransfer(aB.caller, bm, bo), ScriptTransfer(r, bn, bo)] | |
350 | + | } | |
351 | + | else if ((bd == D)) | |
352 | + | then { | |
353 | + | let bo = C | |
354 | + | let bs = bi(K, J) | |
355 | + | let bl = bs._1 | |
356 | + | let bm = bs._2 | |
357 | + | let bn = bs._3 | |
358 | + | let bq = ((J - bm) - bn) | |
359 | + | let br = (K + bc) | |
360 | + | if (if ((ac >= bq)) | |
361 | + | then true | |
362 | + | else (ad >= br)) | |
363 | + | then au(bm, ae, E) | |
364 | + | else [IntegerEntry(f, bq), IntegerEntry(g, br), ScriptTransfer(aB.caller, bm, bo), ScriptTransfer(r, bn, bo)] | |
365 | + | } | |
366 | + | else throw(((("Incorrect asset attached. Expected: " + A) + " or ") + B)) | |
426 | 367 | } | |
427 | 368 | ||
428 | 369 | ||
429 | 370 | ||
430 | - | @Callable(aJ) | |
431 | - | func exchange (bx) = { | |
432 | - | let by = $Tuple2(aJ.payments[0].amount, aJ.payments[0].assetId) | |
433 | - | let bt = by._1 | |
434 | - | let bu = by._2 | |
435 | - | func bz (bA,bB) = { | |
436 | - | let bC = fraction(bB, bt, (bt + bA)) | |
437 | - | let bD = fraction(bC, (ab - Z), ab) | |
438 | - | let bE = fraction(bC, aa, ab) | |
439 | - | if ((bx > bD)) | |
440 | - | then throw(((("Calculated amount to receive " + toString(bD)) + " is less than specified minimum ") + toString(bx))) | |
441 | - | else $Tuple3(bC, bD, bE) | |
442 | - | } | |
371 | + | @Callable(aB) | |
372 | + | func shutdown () = if (!(z)) | |
373 | + | then throw(("DApp is already suspended. Cause: " + valueOrElse(getString(this, l), "the cause wasn't specified"))) | |
374 | + | else if (!(containsElement([m, n, o, p], aB.callerPublicKey))) | |
375 | + | then throw("Only admin can call this function") | |
376 | + | else am("Paused by admin") | |
443 | 377 | ||
444 | - | if (!(L)) | |
378 | + | ||
379 | + | ||
380 | + | @Callable(aB) | |
381 | + | func activate () = if (z) | |
382 | + | then throw("DApp is already active") | |
383 | + | else if (!(containsElement([m, n, o, p], aB.callerPublicKey))) | |
384 | + | then throw("Only admin can call this function") | |
385 | + | else [BooleanEntry(c, true), DeleteEntry(l)] | |
386 | + | ||
387 | + | ||
388 | + | ||
389 | + | @Callable(aB) | |
390 | + | func takeIntoAccountExtraFunds (bt) = { | |
391 | + | let bu = (ag - J) | |
392 | + | let bv = (ah - K) | |
393 | + | let bw = (bu - (if ((C == unit)) | |
394 | + | then bt | |
395 | + | else 0)) | |
396 | + | let bx = (bv - (if ((D == unit)) | |
397 | + | then bt | |
398 | + | else 0)) | |
399 | + | if (!(z)) | |
445 | 400 | then throw("DApp is inactive at this moment") | |
446 | - | else if (if ((V == 0)) | |
447 | - | then true | |
448 | - | else (W == 0)) | |
449 | - | then throw("Can't exchange with zero balance") | |
450 | - | else if ((0 >= bx)) | |
451 | - | then throw(("Minimal amount to receive must be positive. Actual: " + toString(bx))) | |
452 | - | else if ((size(aJ.payments) != 1)) | |
453 | - | then throw("One attached payment expected") | |
454 | - | else if (!(ar)) | |
455 | - | then ([ScriptTransfer(aJ.caller, bt, bu)] ++ aI()) | |
456 | - | else if ((bu == O)) | |
457 | - | then { | |
458 | - | let bF = P | |
459 | - | let bG = bz(V, W) | |
460 | - | let bC = bG._1 | |
461 | - | let bD = bG._2 | |
462 | - | let bE = bG._3 | |
463 | - | let bH = (V + bt) | |
464 | - | let bI = ((W - bD) - bE) | |
465 | - | if (if (if ((O == J)) | |
466 | - | then (ai >= bH) | |
467 | - | else false) | |
468 | - | then true | |
469 | - | else if ((P == J)) | |
470 | - | then (ai >= bI) | |
471 | - | else false) | |
472 | - | then aC(bD, ao, U) | |
473 | - | else [IntegerEntry(f, bH), IntegerEntry(g, bI), ScriptTransfer(aJ.caller, bD, bF), ScriptTransfer(B, bE, bF)] | |
474 | - | } | |
475 | - | else if ((bu == P)) | |
476 | - | then { | |
477 | - | let bF = O | |
478 | - | let bJ = bz(W, V) | |
479 | - | let bC = bJ._1 | |
480 | - | let bD = bJ._2 | |
481 | - | let bE = bJ._3 | |
482 | - | let bH = ((V - bD) - bE) | |
483 | - | let bI = (W + bt) | |
484 | - | if (if (if ((O == J)) | |
485 | - | then (ai >= bH) | |
486 | - | else false) | |
487 | - | then true | |
488 | - | else if ((P == J)) | |
489 | - | then (ai >= bI) | |
490 | - | else false) | |
491 | - | then aC(bD, an, Q) | |
492 | - | else [IntegerEntry(f, bH), IntegerEntry(g, bI), ScriptTransfer(aJ.caller, bD, bF), ScriptTransfer(B, bE, bF)] | |
493 | - | } | |
494 | - | else throw(((("Incorrect asset attached. Expected: " + M) + " or ") + N)) | |
401 | + | else if ((aB.caller != this)) | |
402 | + | then throw("Only the DApp itself can call this function") | |
403 | + | else if ((0 > bt)) | |
404 | + | then throw(("Argument 'amountLeave' cannot be negative. Actual: " + toString(bt))) | |
405 | + | else if (if ((0 > bu)) | |
406 | + | then true | |
407 | + | else (0 > bv)) | |
408 | + | then am("Enroll amount negative") | |
409 | + | else if (if ((0 > bw)) | |
410 | + | then true | |
411 | + | else (0 > bx)) | |
412 | + | then throw("Too large amountLeave") | |
413 | + | else [IntegerEntry(f, (J + bw)), IntegerEntry(g, (K + bx)), IntegerEntry(("last_income_" + A), bw), IntegerEntry(("last_income_" + B), bx)] | |
495 | 414 | } | |
496 | 415 | ||
497 | 416 | ||
498 | - | ||
499 | - | @Callable(aJ) | |
500 | - | func shutdown () = if (!(L)) | |
501 | - | then throw(("DApp is already suspended. Cause: " + valueOrElse(getString(this, n), "the cause wasn't specified"))) | |
502 | - | else if (!(containsElement([v, w, x, y], aJ.callerPublicKey))) | |
503 | - | then throw("Only admin can call this function") | |
504 | - | else ax("Paused by admin") | |
505 | - | ||
506 | - | ||
507 | - | ||
508 | - | @Callable(aJ) | |
509 | - | func activate () = if (L) | |
510 | - | then throw("DApp is already active") | |
511 | - | else if (!(containsElement([v, w, x, y], aJ.callerPublicKey))) | |
512 | - | then throw("Only admin can call this function") | |
513 | - | else [BooleanEntry(c, true), DeleteEntry(n)] | |
514 | - | ||
515 | - | ||
516 | - | ||
517 | - | @Callable(aJ) | |
518 | - | func takeIntoAccountExtraFunds (bK) = { | |
519 | - | let bL = (ap - V) | |
520 | - | let bM = (aq - W) | |
521 | - | let bN = (bL - (if ((O == unit)) | |
522 | - | then bK | |
523 | - | else 0)) | |
524 | - | let bO = (bM - (if ((P == unit)) | |
525 | - | then bK | |
526 | - | else 0)) | |
527 | - | if (!(L)) | |
528 | - | then throw("DApp is inactive at this moment") | |
529 | - | else if ((aJ.caller != this)) | |
530 | - | then throw("Only the DApp itself can call this function") | |
531 | - | else if ((0 > bK)) | |
532 | - | then throw(("Argument 'amountLeave' cannot be negative. Actual: " + toString(bK))) | |
533 | - | else if (if ((0 > bL)) | |
534 | - | then true | |
535 | - | else (0 > bM)) | |
536 | - | then ax("Enroll amount negative") | |
537 | - | else if (if ((0 > bN)) | |
538 | - | then true | |
539 | - | else (0 > bO)) | |
540 | - | then throw("Too large amountLeave") | |
541 | - | else [IntegerEntry(f, (V + bN)), IntegerEntry(g, (W + bO)), IntegerEntry(("last_income_" + M), bN), IntegerEntry(("last_income_" + N), bO)] | |
542 | - | } | |
543 | - | ||
544 | - | ||
545 | - | @Verifier(bP) | |
546 | - | func bQ () = { | |
547 | - | let R = bP | |
548 | - | if ($isInstanceOf(R, "InvokeScriptTransaction")) | |
417 | + | @Verifier(by) | |
418 | + | func bz () = { | |
419 | + | let F = by | |
420 | + | if ($isInstanceOf(F, "InvokeScriptTransaction")) | |
549 | 421 | then { | |
550 | - | let bR = R | |
551 | - | let bS = if ((bR.dApp == this)) | |
552 | - | then (bR.function == "takeIntoAccountExtraFunds") | |
553 | - | else false | |
554 | - | let bT = if ((bR.dApp == D)) | |
555 | - | then if (if (if ((bR.function == "lockNeutrino")) | |
556 | - | then (size(bR.payments) == 1) | |
557 | - | else false) | |
558 | - | then (bR.payments[0].assetId == J) | |
559 | - | else false) | |
560 | - | then true | |
561 | - | else if ((bR.function == "unlockNeutrino")) | |
562 | - | then (size(bR.payments) == 0) | |
563 | - | else false | |
564 | - | else false | |
565 | - | let bU = if (if (if ((bR.dApp == E)) | |
566 | - | then (bR.function == "exchange") | |
567 | - | else false) | |
568 | - | then (O == J) | |
422 | + | let bA = F | |
423 | + | if (if (if (sigVerify(bA.bodyBytes, bA.proofs[0], q)) | |
424 | + | then (bA.dApp == s) | |
569 | 425 | else false) | |
570 | 426 | then true | |
571 | - | else if ((P == J)) | |
572 | - | then (bR.payments[0].assetId == J) | |
427 | + | else if (if (sigVerify(bA.bodyBytes, bA.proofs[0], q)) | |
428 | + | then (bA.function == "exchange") | |
429 | + | else false) | |
430 | + | then if (if (if (if ((C == u)) | |
431 | + | then (D == t) | |
432 | + | else false) | |
433 | + | then (bA.dApp == w) | |
434 | + | else false) | |
435 | + | then if ((bA.payments[0].assetId == unit)) | |
436 | + | then true | |
437 | + | else (bA.payments[0].assetId == t) | |
438 | + | else false) | |
439 | + | then true | |
440 | + | else if (if ((C == u)) | |
441 | + | then (D == v) | |
442 | + | else false) | |
443 | + | then if (if ((bA.dApp == x)) | |
444 | + | then (bA.payments[0].assetId == t) | |
445 | + | else false) | |
446 | + | then true | |
447 | + | else if ((bA.dApp == w)) | |
448 | + | then if ((bA.payments[0].assetId == unit)) | |
449 | + | then true | |
450 | + | else (bA.payments[0].assetId == t) | |
451 | + | else false | |
452 | + | else false | |
453 | + | else false) | |
454 | + | then true | |
455 | + | else if (if (sigVerify(bA.bodyBytes, bA.proofs[0], q)) | |
456 | + | then (bA.dApp == this) | |
457 | + | else false) | |
458 | + | then (bA.function == "takeIntoAccountExtraFunds") | |
573 | 459 | else false | |
574 | - | let bV = if (if (if (sigVerify(bP.bodyBytes, bP.proofs[0], v)) | |
575 | - | then true | |
576 | - | else sigVerify(bP.bodyBytes, bP.proofs[0], w)) | |
577 | - | then true | |
578 | - | else sigVerify(bP.bodyBytes, bP.proofs[0], x)) | |
579 | - | then true | |
580 | - | else sigVerify(bP.bodyBytes, bP.proofs[0], z) | |
581 | - | if (if (if (bS) | |
582 | - | then true | |
583 | - | else bT) | |
584 | - | then true | |
585 | - | else bU) | |
586 | - | then bV | |
587 | - | else false | |
588 | 460 | } | |
589 | 461 | else { | |
590 | - | let | |
462 | + | let bB = if (sigVerify(by.bodyBytes, by.proofs[0], m)) | |
591 | 463 | then 1 | |
592 | 464 | else 0 | |
593 | - | let | |
465 | + | let bC = if (sigVerify(by.bodyBytes, by.proofs[1], n)) | |
594 | 466 | then 1 | |
595 | 467 | else 0 | |
596 | - | let | |
468 | + | let bD = if (sigVerify(by.bodyBytes, by.proofs[2], o)) | |
597 | 469 | then 1 | |
598 | 470 | else 0 | |
599 | - | ((( | |
471 | + | (((bB + bC) + bD) >= 2) | |
600 | 472 | } | |
601 | 473 | } | |
602 | 474 |
github/deemru/w8io/169f3d6 115.69 ms ◑