tx · 7amyBvb7Jzia9RLfqVbNe12t3cksc92cf135KenxJ7XU

3PMcDUBDyjNB1fkRGeLGpsz1ZQPfcmyp4r5:  -0.01400000 Waves

2021.07.16 19:25 [2681178] smart account 3PMcDUBDyjNB1fkRGeLGpsz1ZQPfcmyp4r5 > SELF 0.00000000 Waves

{ "type": 13, "id": "7amyBvb7Jzia9RLfqVbNe12t3cksc92cf135KenxJ7XU", "fee": 1400000, "feeAssetId": null, "timestamp": 1626452243708, "version": 2, "chainId": 87, "sender": "3PMcDUBDyjNB1fkRGeLGpsz1ZQPfcmyp4r5", "senderPublicKey": "7H2naFWXqy4xm814dnmwszxSSyeYbWrwaMUihe8gWmfE", "proofs": [ "", "4FdyKuTGNf1QuTBDQT6yjY56dGJaZm9ikKFWf4H3qtuAZhqqjbvrAKbGs3zctFSAVz4edReuLaTZRdjs28AMVwii", "bkA4e4g4R8BHja1by83kSjCzToJGgjFafm9D7GWc17iDDRf4s5Az9CgMyXZZ8VxZkfVZXbYWCJpuYYwLjqdsApL" ], "script": "base64:AAIFAAAAAAAAABkIAhIAEgMKAQESABIDCgEBEgASABIDCgEBAAAAQAAAAAAHdmVyc2lvbgIAAAAFMS4wLjAAAAAACmtleVZlcnNpb24CAAAAB3ZlcnNpb24AAAAACWtleUFjdGl2ZQIAAAAGYWN0aXZlAAAAAAtrZXlBc3NldElkQQIAAAAKQV9hc3NldF9pZAAAAAALa2V5QXNzZXRJZEICAAAACkJfYXNzZXRfaWQAAAAAC2tleUJhbGFuY2VBAgAAAA9BX2Fzc2V0X2JhbGFuY2UAAAAAC2tleUJhbGFuY2VCAgAAAA9CX2Fzc2V0X2JhbGFuY2UAAAAAD2tleVNoYXJlQXNzZXRJZAIAAAAOc2hhcmVfYXNzZXRfaWQAAAAAE2tleVNoYXJlQXNzZXRTdXBwbHkCAAAAEnNoYXJlX2Fzc2V0X3N1cHBseQAAAAANa2V5Q29tbWlzc2lvbgIAAAAKY29tbWlzc2lvbgAAAAAba2V5Q29tbWlzc2lvblNjYWxlRGVsaW1pdGVyAgAAABpjb21taXNzaW9uX3NjYWxlX2RlbGltaXRlcgAAAAAIa2V5Q2F1c2UCAAAADnNodXRkb3duX2NhdXNlAAAAAA9rZXlBZG1pblB1YktleTECAAAAC2FkbWluX3B1Yl8xAAAAAA9rZXlBZG1pblB1YktleTICAAAAC2FkbWluX3B1Yl8yAAAAAA9rZXlBZG1pblB1YktleTMCAAAAC2FkbWluX3B1Yl8zAAAAAAZvcmFjbGUJAQAAAAdBZGRyZXNzAAAAAQEAAAAaAVeK/whomjW6QM1hdPISN96mN/D6OM7oHjgBAAAAC2dldEFkbWluUHViAAAAAQAAAAtrZXlBZG1pblB1YgQAAAAHJG1hdGNoMAkABB0AAAACBQAAAAZvcmFjbGUFAAAAC2tleUFkbWluUHViAwkAAAEAAAACBQAAAAckbWF0Y2gwAgAAAAZTdHJpbmcEAAAABnN0cmluZwUAAAAHJG1hdGNoMAkAAlkAAAABBQAAAAZzdHJpbmcEAAAAB25vdGhpbmcFAAAAByRtYXRjaDAJAAACAAAAAQIAAAAZQWRtaW4gcHVibGljIGtleSBpcyBlbXB0eQAAAAAMYWRtaW5QdWJLZXkxCQEAAAALZ2V0QWRtaW5QdWIAAAABBQAAAA9rZXlBZG1pblB1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bnRCCQEAAAAMc3Rha2VkQW1vdW50AAAAAgUAAAASc3Rha2luZ0FkZHJlc3NVU0ROBQAAAAtzdHJBc3NldElkQgAAAAARYXZhaWxhYmxlQmFsYW5jZUEJAABlAAAAAgUAAAAIYmFsYW5jZUEFAAAADXN0YWtlZEFtb3VudEEAAAAAEWF2YWlsYWJsZUJhbGFuY2VCCQAAZQAAAAIFAAAACGJhbGFuY2VCBQAAAA1zdGFrZWRBbW91bnRCAAAAABlhY2NvdW50QmFsYW5jZVdpdGhTdGFrZWRBCQAAZAAAAAIJAQAAAA5hY2NvdW50QmFsYW5jZQAAAAEFAAAACGFzc2V0SWRBBQAAAA1zdGFrZWRBbW91bnRBAAAAABlhY2NvdW50QmFsYW5jZVdpdGhTdGFrZWRCCQAAZAAAAAIJAQAAAA5hY2NvdW50QmFsYW5jZQAAAAEFAAAACGFzc2V0SWRCBQAAAA1zdGFrZWRBbW91bnRCAAAAABBoYXNFbm91Z2hCYWxhbmNlAwkAAGcAAAACBQAAABlhY2NvdW50QmFsYW5jZVdpdGhTdGFrZWRBBQAAAAhiYWxhbmNlQQkAAGcAAAACBQAAABlhY2NvdW50QmFsYW5jZVdpdGhTdGFrZWRCBQAAAAhiYWxhbmNlQgcBAAAADGdldEFzc2V0SW5mbwAAAAEAAAAHYXNzZXRJZAQAAAAHJG1hdGNoMAUAAAAHYXNzZXRJZAMJAAABAAAAAgUAAAAHJG1hdGNoMAIAAAAKQnl0ZVZlY3RvcgQAAAACaWQFAAAAByRtYXRjaDAEAAAACHN0cmluZ0lkCQACWAAAAAEFAAAAAmlkBAAAAARpbmZvCQEAAAATdmFsdWVPckVycm9yTWVzc2FnZQAAAAIJAAPsAAAAAQUAAAACaWQJAAEsAAAAAgkAASwAAAACAgAAAAZBc3NldCAFAAAACHN0cmluZ0lkAgAAAA4gZG9lc24ndCBleGlzdAkABRUAAAADBQAAAAhzdHJpbmdJZAgFAAAABGluZm8AAAAEbmFtZQgFAAAABGluZm8AAAAIZGVjaW1hbHMDCQAAAQAAAAIFAAAAByRtYXRjaDACAAAABFVuaXQEAAAABXdhdmVzBQAAAAckbWF0Y2gwCQAFFQAAAAMCAAAABVdBVkVTAgAAAAVXQVZFUwAAAAAAAAAACAkA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DXNoYXJlRGVjaW1hbHMAAAAAAAAAAAAAAAAAAAAAAAAFAAAABERPV04EAAAACnNoYXJlSXNzdWUJAARCAAAABQUAAAAJc2hhcmVOYW1lBQAAABBzaGFyZURlc2NyaXB0aW9uBQAAABJzaGFyZUluaXRpYWxTdXBwbHkFAAAADXNoYXJlRGVjaW1hbHMGBAAAAAxzaGFyZUlzc3VlSWQJAAQ4AAAAAQUAAAAKc2hhcmVJc3N1ZQkABEwAAAACCQEAAAALU3RyaW5nRW50cnkAAAACBQAAAAprZXlWZXJzaW9uBQAAAAd2ZXJzaW9uCQAETAAAAAIJAQAAAAxCb29sZWFuRW50cnkAAAACBQAAAAlrZXlBY3RpdmUGCQAETAAAAAIJAQAAAAtTdHJpbmdFbnRyeQAAAAIFAAAAC2tleUFzc2V0SWRBBQAAAA5wbXRTdHJBc3NldElkQQkABEwAAAACCQEAAAALU3RyaW5nRW50cnkAAAACBQAAAAtrZXlBc3NldElkQgUAAAAOcG10U3RyQXNzZXRJZEIJAARMAAAAAgkBAAAADEludGVnZXJFbnRyeQAAAAIFAAAAC2tleUJhbGFuY2VBBQAAAApwbXRBbW91bnRBCQAETAAAAAIJAQAAAAxJbnRlZ2VyRW50cnkAAAACBQAAAAtrZXlCYWxhbmNlQgUAAAAKcG10QW1vdW50QgkABEwAAAACCQEAAAAMSW50ZWdlckVudHJ5AAAAAgUAAAANa2V5Q29tbWlzc2lvbgUAAAAKY29tbWlzc2lvbgkABEwAAAACCQEAAAAMSW50ZWdlckVudHJ5AAAAAgUAAAAba2V5Q29tbWlzc2lvblNjYWxlRGVsaW1pdGVyBQAAABhjb21taXNzaW9uU2NhbGVEZWxpbWl0ZXIJAARMAAAAAgUAAAAKc2hhcmVJc3N1ZQkABEwAAAACCQEAAAALU3RyaW5nRW50cnkAAAACBQAAAA9rZXlTaGFyZUFzc2V0SWQJAAJYAAAAAQUAAAAMc2hhcmVJc3N1ZUlkCQAETAAAAAIJAQAAAAxJbnRlZ2VyRW50cnkAAAACBQAAABNrZXlTaGFyZUFzc2V0U3VwcGx5BQAAABJzaGFyZUluaXRpYWxTdXBwbHkJAARMAAAAAgkBAAAADlNjcmlwdFRyYW5zZmVyAAAAAwgFAAAAAWkAAAAGY2FsbGVyBQAAABJzaGFyZUluaXRpYWxTdXBwbHkFAAAADHNoYXJlSXNzdWVJZAUAAAADbmlsAAAAAWkBAAAAFnJlcGxlbmlzaFdpdGhUd29Ub2tlbnMAAAABAAAAEXNsaXBwYWdlVG9sZXJhbmNlBAAAAAtwbXRBc3NldElkQQgJAAGRAAAAAggFAAAAAWkAAAAIcGF5bWVudHMAAAAAAAAAAAAAAAAHYXNzZXRJZAQAAAALcG10QXNzZXRJZEIICQABkQAAAAIIBQAAAAFpAAAACHBheW1lbnRzAAAAAAAAAAABAAAAB2Fzc2V0SWQEAAAACnBtdEFtb3VudEEJAQAAABBkZWR1Y3RTdGFraW5nRmVlAAAAAggJAAGRAAAAAggFAAAAAWkAAAAIcGF5bWVudHMAAAAAAAAAAAAAAAAGYW1vdW50BQAAAAtwbXRBc3NldElkQQQAAAAKcG10QW1vdW50QgkBAAAAEGRlZHVjdFN0YWtpbmdGZWUAAAACCAkAAZEAAAACCAUAAAABaQAAAAhwYXltZW50cwAAAAAAAAAAAQAAAAZhbW91bnQFAAAAC3BtdEFzc2V0SWRCBAAAAAp0b2tlblJhdGlvCQAAawAAAAMJAABrAAAAAwUAAAAIYmFsYW5jZUEFAAAAC3NjYWxlVmFsdWU4BQAAAApwbXRBbW91bnRBBQAAAAtzY2FsZVZhbHVlMwkAAGsAAAADBQAAAAhiYWxhbmNlQgUAAAALc2NhbGVWYWx1ZTgFAAAACnBtdEFtb3VudEIEAAAAE3JhdGlvU2hhcmVUb2tlbnNJbkEJAABrAAAAAwUAAAAKcG10QW1vdW50QQUAAAALc2NhbGVWYWx1ZTgFAAAACGJhbGFuY2VBBAAAABNyYXRpb1NoYXJlVG9rZW5zSW5CCQAAawAAAAMFAAAACnBtdEFtb3VudEIFAAAAC3NjYWxlVmFsdWU4BQAAAAhiYWxhbmNlQgQAAAAVc2hhcmVUb2tlblRvUGF5QW1vdW50CQAAawAAAAMJAAGXAAAAAQkABEwAAAACBQAAABNyYXRpb1NoYXJlVG9rZW5zSW5BCQAETAAAAAIFAAAAE3JhdGlvU2hhcmVUb2tlbnNJbkIFAAAAA25pbAUAAAAQc2hhcmVBc3NldFN1cHBseQUAAAALc2NhbGVWYWx1ZTgDCQEAAAABIQAAAAEFAAAACGlzQWN0aXZlCQAAAgAAAAECAAAAH0RBcHAgaXMgaW5hY3RpdmUgYXQgdGhpcyBtb21lbnQDAwkAAGYAAAACAAAAAAAAAAAABQAAABFzbGlwcGFnZVRvbGVyYW5jZQYJAABmAAAAAgUAAAARc2xpcHBhZ2VUb2xlcmFuY2UFAAAAGnNsaXBwYWdlVG9sZXJhbmNlRGVsaW1pdGVyCQAAAgAAAAEJAAEsAAAAAgkAASwAAAACCQABLAAAAAICAAAAKVNsaXBwYWdlIHRvbGVyYW5jZSBtdXN0IGJlIGJldHdlZW4gMCBhbmQgCQABpAAAAAEFAAAAGnNsaXBwYWdlVG9sZXJhbmNlRGVsaW1pdGVyAgAAABYgaW5jbHVzaXZlbHkuIEFjdHVhbDogCQABpAAAAAEFAAAAEXNsaXBwYWdlVG9sZXJhbmNlAwkBAAAAAiE9AAAAAgkAAZAAAAABCAUAAAABaQAAAAhwYXltZW50cwAAAAAAAAAAAgkAAAIAAAABAgAAABxUd28gYXR0YWNoZWQgYXNzZXRzIGV4cGVjdGVkAwMJAQAAAAIhPQAAAAIFAAAAC3BtdEFzc2V0SWRBBQAAAAhhc3NldElkQQYJAQAAAAIhPQAAAAIFAAAAC3BtdEFzc2V0SWRCBQAAAAhhc3NldElkQgkAAAIAAAABCQABLAAAAAIJAAEsAAAAAgkAASwAAAACAgAAACVJbmNvcnJlY3QgYXNzZXRzIGF0dGFjaGVkLiBFeHBlY3RlZDogBQAAAAtzdHJBc3NldElkQQIAAAAFIGFuZCAFAAAAC3N0ckFzc2V0SWRCAwMJAABmAAAAAgkAAGkAAAACCQAAaAAAAAIFAAAAC3NjYWxlVmFsdWUzCQAAZQAAAAIFAAAAGnNsaXBwYWdlVG9sZXJhbmNlRGVsaW1pdGVyBQAAABFzbGlwcGFnZVRvbGVyYW5jZQUAAAAac2xpcHBhZ2VUb2xlcmFuY2VEZWxpbWl0ZXIFAAAACnRva2VuUmF0aW8GCQAAZgAAAAIFAAAACnRva2VuUmF0aW8JAABpAAAAAgkAAGgAAAACBQAAAAtzY2FsZVZhbHVlMwkAAGQAAAACBQAAABpzbGlwcGFnZVRvbGVyYW5jZURlbGltaXRlcgUAAAARc2xpcHBhZ2VUb2xlcmFuY2UFAAAAGnNsaXBwYWdlVG9sZXJhbmNlRGVsaW1pdGVyCQAAAgAAAAECAAAAPUluY29ycmVjdCBhc3NldHMgYW1vdW50OiBhbW91bnRzIG11c3QgaGF2ZSB0aGUgY29udHJhY3QgcmF0aW8DCQAAAAAAAAIFAAAAFXNoYXJlVG9rZW5Ub1BheUFtb3VudAAAAAAAAAAAAAkAAAIAAAABAgAAAB1Ub28gc21hbGwgYW1vdW50IHRvIHJlcGxlbmlzaAMJAQAAAAEhAAAAAQUAAAAQaGFzRW5vdWdoQmFsYW5jZQkABE4AAAACCQAETAAAAAIJAQAAAA5TY3JpcHRUcmFuc2ZlcgAAAAMIBQAAAAFpAAAABmNhbGxlcgUAAAAKcG10QW1vdW50QQUAAAALcG10QXNzZXRJZEEJAARMAAAAAgkBAAAADlNjcmlwdFRyYW5zZmVyAAAAAwgFAAAAAWkAAAAGY2FsbGVyBQAAAApwbXRBbW91bnRCBQAAAAtwbXRBc3NldElkQgUAAAADbmlsCQEAAAARc3VzcGVuZFN1c3BpY2lvdXMAAAAACQAETAAAAAIJAQAAAAxJbnRlZ2VyRW50cnkAAAACBQAAAAtrZXlCYWxhbmNlQQkAAGQAAAACBQAAAAhiYWxhbmNlQQUAAAAKcG10QW1vdW50QQkABEwAAAACCQEAAAAMSW50ZWdlckVudHJ5AAAAAgUAAAALa2V5QmFsYW5jZUIJAABkAAAAAgUAAAAIYmFsYW5jZUIFAAAACnBtdEFtb3VudEIJAARMAAAAAgkBAAAADEludGVnZXJFbnRyeQAAAAIFAAAAE2tleVNoYXJlQXNzZXRTdXBwbHkJAABkAAAAAgUAAAAQc2hhcmVBc3NldFN1cHBseQUAAAAVc2hhcmVUb2tlblRvUGF5QW1vdW50CQAETAAAAAIJAQAAAAdSZWlzc3VlAAAAAwUAAAAMc2hhcmVBc3NldElkBQAAABVzaGFyZVRva2VuVG9QYXlBbW91bnQGCQAETAAAAAIJAQAAAA5TY3JpcHRUcmFuc2ZlcgAAAAMIBQAAAAFpAAAABmNhbGxlcgUAAAAVc2hhcmVUb2tlblRvUGF5QW1vdW50BQAAAAxzaGFyZUFzc2V0SWQFAAAAA25pbAAAAAFpAQAAAAh3aXRoZHJhdwAAAAAEAAAADSR0MDEwMzA5MTA0NTkJAAUUAAAAAggJAAGRAAAAAggFAAAAAWkAAAAIcGF5bWVudHMAAAAAAAAAAAAAAAAGYW1vdW50CAkAAZEAAAACCAUAAAABaQAAAAhwYXltZW50cwAAAAAAAAAAAAAAAAdhc3NldElkBAAAAAlwbXRBbW91bnQIBQAAAA0kdDAxMDMwOTEwNDU5AAAAAl8xBAAAAApwbXRBc3NldElkCAUAAAANJHQwMTAzMDkxMDQ1OQAAAAJfMgQAAAAMYW1vdW50VG9QYXlBCQEAAAAQZGVkdWN0U3Rha2luZ0ZlZQAAAAIJAABrAAAAAwUAAAAJcG10QW1vdW50BQAAAAhiYWxhbmNlQQUAAAAQc2hhcmVBc3NldFN1cHBseQUAAAAIYXNzZXRJZEEEAAAADGFtb3VudFRvUGF5QgkBAAAAEGRlZHVjdFN0YWtpbmdGZWUAAAACCQAAawAAAAMFAAAACXBtdEFtb3VudAUAAAAIYmFsYW5jZUIFAAAAEHNoYXJlQXNzZXRTdXBwbHkFAAAACGFzc2V0SWRCAwkBAAAAASEAAAABBQAAAAhpc0FjdGl2ZQkAAAIAAAABAgAAAB9EQXBwIGlzIGluYWN0aXZlIGF0IHRoaXMgbW9tZW50AwkBAAAAAiE9AAAAAgkAAZAAAAABCAUAAAABaQAAAAhwYXltZW50cwAAAAAAAAAAAQkAAAIAAAABAgAAAB1PbmUgYXR0YWNoZWQgcGF5bWVudCBleHBlY3RlZAMJAQAAAAIhPQAAAAIFAAAACnBtdEFzc2V0SWQFAAAADHNoYXJlQXNzZXRJZAkAAAIAAAABCQABLAAAAAICAAAAJEluY29ycmVjdCBhc3NldCBhdHRhY2hlZC4gRXhwZWN0ZWQ6IAkAAlgAAAABBQAAAAxzaGFyZUFzc2V0SWQDCQEAAAABIQAAAAEFAAAAEGhhc0Vub3VnaEJhbGFuY2UJAAROAAAAAgkABEwAAAACCQEAAAAOU2NyaXB0VHJhbnNmZXIAAAADCAUAAAABaQAAAAZjYWxsZXIFAAAACXBtdEFtb3VudAUAAAAKcG10QXNzZXRJZAUAAAADbmlsCQEAAAARc3VzcGVuZFN1c3BpY2lvdXMAAAAAAwMJAABmAAAAAgUAAAAMYW1vdW50VG9QYXlBBQAAABFhdmFpbGFibGVCYWxhbmNlQQYJAABmAAAAAgUAAAAMYW1vdW50VG9QYXlCBQAAABFhdmFpbGFibGVCYWxhbmNlQgkBAAAAInRocm93SW5zdWZmaWNpZW50QXZhaWxhYmxlQmFsYW5jZXMAAAACBQAAAAxhbW91bnRUb1BheUEFAAAADGFtb3VudFRvUGF5QgkABEwAAAACCQEAAAAMSW50ZWdlckVudHJ5AAAAAgUAAAALa2V5QmFsYW5jZUEJAABlAAAAAgUAAAAIYmFsYW5jZUEFAAAADGFtb3VudFRvUGF5QQkABEwAAAACCQEAAAAMSW50ZWdlckVudHJ5AAAAAgUAAAALa2V5QmFsYW5jZUIJAABlAAAAAgUAAAAIYmFsYW5jZUIFAAAADGFtb3VudFRvUGF5QgkABEwAAAACCQEAAAAMSW50ZWdlckVudHJ5AAAAAgUAAAATa2V5U2hhcmVBc3NldFN1cHBseQkAAGUAAAACBQAAABBzaGFyZUFzc2V0U3VwcGx5BQAAAAlwbXRBbW91bnQJAARMAAAAAgkBAAAABEJ1cm4AAAACBQAAAAxzaGFyZUFzc2V0SWQFAAAACXBtdEFtb3VudAkABEwAAAACCQEAAAAOU2NyaXB0VHJhbnNmZXIAAAADCAUAAAABaQAAAAZjYWxsZXIFAAAADGFtb3VudFRvUGF5QQUAAAAIYXNzZXRJZEEJAARMAAAAAgkBAAAADlNjcmlwdFRyYW5zZmVyAAAAAwgFAAAAAWkAAAAGY2FsbGVyBQAAAAxhbW91bnRUb1BheUIFAAAACGFzc2V0SWRCBQAAAANuaWwAAAABaQEAAAAIZXhjaGFuZ2UAAAABAAAAEm1pbkFtb3VudFRvUmVjZWl2ZQQAAAANJHQwMTE2NjYxMTc0MQkABRQAAAACCAkAAZEAAAACCAUAAAABaQAAAAhwYXltZW50cwAAAAAAAAAAAAAAAAZhbW91bnQICQABkQAAAAIIBQAAAAFpAAAACHBheW1lbnRzAAAAAAAAAAAAAAAAB2Fzc2V0SWQEAAAACXBtdEFtb3VudAgFAAAADSR0MDExNjY2MTE3NDEAAAACXzEEAAAACnBtdEFzc2V0SWQIBQAAAA0kdDAxMTY2NjExNzQxAAAAAl8yCgEAAAANY2FsY3VsYXRlRmVlcwAAAAIAAAAJdG9rZW5Gcm9tAAAAB3Rva2VuVG8EAAAAEGFtb3VudFdpdGhvdXRGZWUJAABrAAAAAwUAAAAHdG9rZW5UbwUAAAAJcG10QW1vdW50CQAAZAAAAAIFAAAACXBtdEFtb3VudAUAAAAJdG9rZW5Gcm9tBAAAAA1hbW91bnRXaXRoRmVlCQAAawAAAAMFAAAAEGFtb3VudFdpdGhvdXRGZWUJAABlAAAAAgUAAAAYY29tbWlzc2lvblNjYWxlRGVsaW1pdGVyBQAAAApjb21taXNzaW9uBQAAABhjb21taXNzaW9uU2NhbGVEZWxpbWl0ZXIEAAAAEGdvdmVybmFuY2VSZXdhcmQJAABrAAAAAwUAAAAQYW1vdW50V2l0aG91dEZlZQUAAAAUY29tbWlzc2lvbkdvdmVybmFuY2UFAAAAGGNvbW1pc3Npb25TY2FsZURlbGltaXRlcgMJAABmAAAAAgUAAAASbWluQW1vdW50VG9SZWNlaXZlBQAAAA1hbW91bnRXaXRoRmVlCQAAAgAAAAEJAAEsAAAAAgkAASwAAAACCQABLAAAAAICAAAAHUNhbGN1bGF0ZWQgYW1vdW50IHRvIHJlY2VpdmUgCQABpAAAAAEFAAAADWFtb3VudFdpdGhGZWUCAAAAICBpcyBsZXNzIHRoYW4gc3BlY2lmaWVkIG1pbmltdW0gCQABpAAAAAEFAAAAEm1pbkFtb3VudFRvUmVjZWl2ZQkABRUAAAADBQAAABBhbW91bnRXaXRob3V0RmVlBQAAAA1hbW91bnRXaXRoRmVlBQAAABBnb3Zlcm5hbmNlUmV3YXJkAwkBAAAAASEAAAABBQAAAAhpc0FjdGl2ZQkAAAIAAAABAgAAAB9EQXBwIGlzIGluYWN0aXZlIGF0IHRoaXMgbW9tZW50AwkAAGcAAAACAAAAAAAAAAAABQAAABJtaW5BbW91bnRUb1JlY2VpdmUJAAACAAAAAQkAASwAAAACAgAAADRNaW5pbWFsIGFtb3VudCB0byByZWNlaXZlIG11c3QgYmUgcG9zaXRpdmUuIEFjdHVhbDogCQABpAAAAAEFAAAAEm1pbkFtb3VudFRvUmVjZWl2ZQMJAQAAAAIhPQAAAAIJAAGQAAAAAQgFAAAAAWkAAAAIcGF5bWVudHMAAAAAAAAAAAEJAAACAAAAAQIAAAAdT25lIGF0dGFjaGVkIHBheW1lbnQgZXhwZWN0ZWQDCQEAAAABIQAAAAEFAAAAEGhhc0Vub3VnaEJhbGFuY2UJAAROAAAAAgkABEwAAAACCQEAAAAOU2NyaXB0VHJhbnNmZXIAAAADCAUAAAABaQAAAAZjYWxsZXIFAAAACXBtdEFtb3VudAUAAAAKcG10QXNzZXRJZAUAAAADbmlsCQEAAAARc3VzcGVuZFN1c3BpY2lvdXMAAAAAAwkAAAAAAAACBQAAAApwbXRBc3NldElkBQAAAAhhc3NldElkQQQAAAALYXNzZXRJZFNlbmQFAAAACGFzc2V0SWRCBAAAAA0kdDAxMjkxNzEzMDA4CQEAAAANY2FsY3VsYXRlRmVlcwAAAAIFAAAACGJhbGFuY2VBBQAAAAhiYWxhbmNlQgQAAAAQYW1vdW50V2l0aG91dEZlZQgFAAAADSR0MDEyOTE3MTMwMDgAAAACXzEEAAAADWFtb3VudFdpdGhGZWUIBQAAAA0kdDAxMjkxNzEzMDA4AAAAAl8yBAAAABBnb3Zlcm5hbmNlUmV3YXJkCAUAAAANJHQwMTI5MTcxMzAwOAAAAAJfMwQAAAALbmV3QmFsYW5jZUEJAABkAAAAAgUAAAAIYmFsYW5jZUEFAAAACXBtdEFtb3VudAQAAAALbmV3QmFsYW5jZUIJAABlAAAAAgkAAGUAAAACBQAAAAhiYWxhbmNlQgUAAAANYW1vdW50V2l0aEZlZQUAAAAQZ292ZXJuYW5jZVJld2FyZAMDCQAAZwAAAAIFAAAADXN0YWtlZEFtb3VudEEFAAAAC25ld0JhbGFuY2VBBgkAAGcAAAACBQAAAA1zdGFrZWRBbW91bnRCBQAAAAtuZXdCYWxhbmNlQgkBAAAAIXRocm93SW5zdWZmaWNpZW50QXZhaWxhYmxlQmFsYW5jZQAAAAMFAAAADWFtb3VudFdpdGhGZWUFAAAAEWF2YWlsYWJsZUJhbGFuY2VCBQAAAAphc3NldE5hbWVCCQAETAAAAAIJAQAAAAxJbnRlZ2VyRW50cnkAAAACBQAAAAtrZXlCYWxhbmNlQQUAAAALbmV3QmFsYW5jZUEJAARMAAAAAgkBAAAADEludGVnZXJFbnRyeQAAAAIFAAAAC2tleUJhbGFuY2VCBQAAAAtuZXdCYWxhbmNlQgkABEwAAAACCQEAAAAOU2NyaXB0VHJhbnNmZXIAAAADCAUAAAABaQAAAAZjYWxsZXIFAAAADWFtb3VudFdpdGhGZWUFAAAAC2Fzc2V0SWRTZW5kCQAETAAAAAIJAQAAAA5TY3JpcHRUcmFuc2ZlcgAAAAMFAAAAEWdvdmVybmFuY2VBZGRyZXNzBQAAABBnb3Zlcm5hbmNlUmV3YXJkBQAAAAthc3NldElkU2VuZAUAAAADbmlsAwkAAAAAAAACBQAAAApwbXRBc3NldElkBQAAAAhhc3NldElkQgQAAAALYXNzZXRJZFNlbmQFAAAACGFzc2V0SWRBBAAAAA0kdDAxMzgzMTEzOTIyCQEAAAANY2FsY3VsYXRlRmVlcwAAAAIFAAAACGJhbGFuY2VCBQAAAAhiYWxhbmNlQQQAAAAQYW1vdW50V2l0aG91dEZlZQgFAAAADSR0MDEzODMxMTM5MjIAAAACXzEEAAAADWFtb3VudFdpdGhGZWUIBQAAAA0kdDAxMzgzMTEzOTIyAAAAAl8yBAAAABBnb3Zlcm5hbmNlUmV3YXJkCAUAAAANJHQwMTM4MzExMzkyMgAAAAJfMwQAAAALbmV3QmFsYW5jZUEJAABlAAAAAgkAAGUAAAACBQAAAAhiYWxhbmNlQQUAAAANYW1vdW50V2l0aEZlZQUAAAAQZ292ZXJuYW5jZVJld2FyZAQAAAALbmV3QmFsYW5jZUIJAABkAAAAAgUAAAAIYmFsYW5jZUIFAAAACXBtdEFtb3VudAMDCQAAZwAAAAIFAAAADXN0YWtlZEFtb3VudEEFAAAAC25ld0JhbGFuY2VBBgkAAGcAAAACBQAAAA1zdGFrZWRBbW91bnRCBQAAAAtuZXdCYWxhbmNlQgkBAAAAIXRocm93SW5zdWZmaWNpZW50QXZhaWxhYmxlQmFsYW5jZQAAAAMFAAAADWFtb3VudFdpdGhGZWUFAAAAEWF2YWlsYWJsZUJhbGFuY2VBBQAAAAphc3NldE5hbWVBCQAETAAAAAIJAQAAAAxJbnRlZ2VyRW50cnkAAAACBQAAAAtrZXlCYWxhbmNlQQUAAAALbmV3QmFsYW5jZUEJAARMAAAAAgkBAAAADEludGVnZXJFbnRyeQAAAAIFAAAAC2tleUJhbGFuY2VCBQAAAAtuZXdCYWxhbmNlQgkABEwAAAACCQEAAAAOU2NyaXB0VHJhbnNmZXIAAAADCAUAAAABaQAAAAZjYWxsZXIFAAAADWFtb3VudFdpdGhGZWUFAAAAC2Fzc2V0SWRTZW5kCQAETAAAAAIJAQAAAA5TY3JpcHRUcmFuc2ZlcgAAAAMFAAAAEWdvdmVybmFuY2VBZGRyZXNzBQAAABBnb3Zlcm5hbmNlUmV3YXJkBQAAAAthc3NldElkU2VuZAUAAAADbmlsCQAAAgAAAAEJAAEsAAAAAgkAASwAAAACCQABLAAAAAICAAAAJEluY29ycmVjdCBhc3NldCBhdHRhY2hlZC4gRXhwZWN0ZWQ6IAUAAAALc3RyQXNzZXRJZEECAAAABCBvciAFAAAAC3N0ckFzc2V0SWRCAAAAAWkBAAAACHNodXRkb3duAAAAAAMJAQAAAAEhAAAAAQUAAAAIaXNBY3RpdmUJAAACAAAAAQkAASwAAAACAgAAACJEQXBwIGlzIGFscmVhZHkgc3VzcGVuZGVkLiBDYXVzZTogCQEAAAALdmFsdWVPckVsc2UAAAACCQAEHQAAAAIFAAAABHRoaXMFAAAACGtleUNhdXNlAgAAABp0aGUgY2F1c2Ugd2Fzbid0IHNwZWNpZmllZAMJAQAAAAEhAAAAAQkBAAAAD2NvbnRhaW5zRWxlbWVudAAAAAIJAARMAAAAAgUAAAAMYWRtaW5QdWJLZXkxCQAETAAAAAIFAAAADGFkbWluUHViS2V5MgkABEwAAAACBQAAAAxhZG1pblB1YktleTMJAARMAAAAAgUAAAAUYWRtaW5QdWJLZXlTdGFydFN0b3AFAAAAA25pbAgFAAAAAWkAAAAPY2FsbGVyUHVibGljS2V5CQAAAgAAAAECAAAAIU9ubHkgYWRtaW4gY2FuIGNhbGwgdGhpcyBmdW5jdGlvbgkBAAAAB3N1c3BlbmQAAAABAgAAAA9QYXVzZWQgYnkgYWRtaW4AAAABaQEAAAAIYWN0aXZhdGUAAAAAAwUAAAAIaXNBY3RpdmUJAAACAAAAAQIAAAAWREFwcCBpcyBhbHJlYWR5IGFjdGl2ZQMJAQAAAAEhAAAAAQkBAAAAD2NvbnRhaW5zRWxlbWVudAAAAAIJAARMAAAAAgUAAAAMYWRtaW5QdWJLZXkxCQAETAAAAAIFAAAADGFkbWluUHViS2V5MgkABEwAAAACBQAAAAxhZG1pblB1YktleTMJAARMAAAAAgUAAAAUYWRtaW5QdWJLZXlTdGFydFN0b3AFAAAAA25pbAgFAAAAAWkAAAAPY2FsbGVyUHVibGljS2V5CQAAAgAAAAECAAAAIU9ubHkgYWRtaW4gY2FuIGNhbGwgdGhpcyBmdW5jdGlvbgkABEwAAAACCQEAAAAMQm9vbGVhbkVudHJ5AAAAAgUAAAAJa2V5QWN0aXZlBgkABEwAAAACCQEAAAALRGVsZXRlRW50cnkAAAABBQAAAAhrZXlDYXVzZQUAAAADbmlsAAAAAWkBAAAAGXRha2VJbnRvQWNjb3VudEV4dHJhRnVuZHMAAAABAAAAC2Ftb3VudExlYXZlBAAAAB11bmNvdW50YWJsZUFtb3VudEVucm9sbEFzc2V0QQkAAGUAAAACBQAAABlhY2NvdW50QmFsYW5jZVdpdGhTdGFrZWRBBQAAAAhiYWxhbmNlQQQAAAAddW5jb3VudGFibGVBbW91bnRFbnJvbGxBc3NldEIJAABlAAAAAgUAAAAZYWNjb3VudEJhbGFuY2VXaXRoU3Rha2VkQgUAAAAIYmFsYW5jZUIEAAAADWFtb3VudEVucm9sbEEJAABlAAAAAgUAAAAddW5jb3VudGFibGVBbW91bnRFbnJvbGxBc3NldEEDCQAAAAAAAAIFAAAACGFzc2V0SWRBBQAAAAR1bml0BQAAAAthbW91bnRMZWF2ZQAAAAAAAAAAAAQAAAANYW1vdW50RW5yb2xsQgkAAGUAAAACBQAAAB11bmNvdW50YWJsZUFtb3VudEVucm9sbEFzc2V0QgMJAAAAAAAAAgUAAAAIYXNzZXRJZEIFAAAABHVuaXQFAAAAC2Ftb3VudExlYXZlAAAAAAAAAAAAAwkBAAAAASEAAAABBQAAAAhpc0FjdGl2ZQkAAAIAAAABAgAAAB9EQXBwIGlzIGluYWN0aXZlIGF0IHRoaXMgbW9tZW50AwkBAAAAAiE9AAAAAggFAAAAAWkAAAAGY2FsbGVyBQAAAAR0aGlzCQAAAgAAAAECAAAAK09ubHkgdGhlIERBcHAgaXRzZWxmIGNhbiBjYWxsIHRoaXMgZnVuY3Rpb24DCQAAZgAAAAIAAAAAAAAAAAAFAAAAC2Ftb3VudExlYXZlCQAAAgAAAAEJAAEsAAAAAgIAAAAzQXJndW1lbnQgJ2Ftb3VudExlYXZl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", "height": 2681178, "applicationStatus": "succeeded", "spentComplexity": 0 } View: original | compacted Prev: rQGL88g1sz1wVDJyG5bMroMDYt3v4oi9biKsgfWwEi3 Next: 7V759wmLUUHTQWAz4E9c55m8SA52qoKkZecMTqDyRVGL Diff:
OldNewDifferences
1-{-# STDLIB_VERSION 4 #-}
1+{-# STDLIB_VERSION 5 #-}
22 {-# SCRIPT_TYPE ACCOUNT #-}
33 {-# CONTENT_TYPE DAPP #-}
44 let version = "1.0.0"
2525
2626 let keyCause = "shutdown_cause"
2727
28-let adminPubKey1 = base58'DXDY2itiEcYBtGkVLnkpHtDFyWQUkoLJz79uJ7ECbMrA'
28+let keyAdminPubKey1 = "admin_pub_1"
2929
30-let adminPubKey2 = base58'E6Wa1SGoktYcjHjsKrvjMiqJY3SWmGKcD8Q5L8kxSPS7'
30+let keyAdminPubKey2 = "admin_pub_2"
3131
32-let adminPubKey3 = base58'AZmWJtuy4GeVrMmJH4hfFBRApe1StvhJSk4jcbT6bArQ'
32+let keyAdminPubKey3 = "admin_pub_3"
33+
34+let oracle = Address(base58'3PEbqViERCoKnmcSULh6n2aiMvUdSQdCsom')
35+
36+func getAdminPub (keyAdminPub) = match getString(oracle, keyAdminPub) {
37+ case string: String =>
38+ fromBase58String(string)
39+ case nothing =>
40+ throw("Admin public key is empty")
41+}
42+
43+
44+let adminPubKey1 = getAdminPub(keyAdminPubKey1)
45+
46+let adminPubKey2 = getAdminPub(keyAdminPubKey2)
47+
48+let adminPubKey3 = getAdminPub(keyAdminPubKey3)
3349
3450 let adminPubKeyStartStop = base58'EtVkT6ed8GtbUiVVEqdmEqsp2J4qbb3rre2HFgxeVYdg'
3551
191207
192208 @Callable(i)
193209 func init () = {
194- let $t056115688 = $Tuple2(i.payments[0].amount, i.payments[0].assetId)
195- let pmtAmountA = $t056115688._1
196- let pmtAssetIdA = $t056115688._2
197- let $t056935770 = $Tuple2(i.payments[1].amount, i.payments[1].assetId)
198- let pmtAmountB = $t056935770._1
199- let pmtAssetIdB = $t056935770._2
200- let $t057755852 = getAssetInfo(pmtAssetIdA)
201- let pmtStrAssetIdA = $t057755852._1
202- let pmtAssetNameA = $t057755852._2
203- let pmtDecimalsA = $t057755852._3
204- let $t058575934 = getAssetInfo(pmtAssetIdB)
205- let pmtStrAssetIdB = $t058575934._1
206- let pmtAssetNameB = $t058575934._2
207- let pmtDecimalsB = $t058575934._3
210+ let $t059246001 = $Tuple2(i.payments[0].amount, i.payments[0].assetId)
211+ let pmtAmountA = $t059246001._1
212+ let pmtAssetIdA = $t059246001._2
213+ let $t060066083 = $Tuple2(i.payments[1].amount, i.payments[1].assetId)
214+ let pmtAmountB = $t060066083._1
215+ let pmtAssetIdB = $t060066083._2
216+ let $t060886165 = getAssetInfo(pmtAssetIdA)
217+ let pmtStrAssetIdA = $t060886165._1
218+ let pmtAssetNameA = $t060886165._2
219+ let pmtDecimalsA = $t060886165._3
220+ let $t061706247 = getAssetInfo(pmtAssetIdB)
221+ let pmtStrAssetIdB = $t061706247._1
222+ let pmtAssetNameB = $t061706247._2
223+ let pmtDecimalsB = $t061706247._3
208224 if (isDefined(getBoolean(this, keyActive)))
209225 then throw("DApp is already active")
210226 else if ((pmtAssetIdA == pmtAssetIdB))
213229 let shareName = ((("s" + take(pmtAssetNameA, 7)) + "_") + take(pmtAssetNameB, 7))
214230 let shareDescription = ((((("ShareToken of SwopFi protocol for " + pmtAssetNameA) + " and ") + pmtAssetNameB) + " at address ") + toString(this))
215231 let shareDecimals = ((pmtDecimalsA + pmtDecimalsB) / 2)
216- let shareInitialSupply = fraction(pow(pmtAmountA, pmtDecimalsA, 5, 1, pmtDecimalsA, HALFDOWN), pow(pmtAmountB, pmtDecimalsB, 5, 1, pmtDecimalsB, HALFDOWN), pow(10, 0, shareDecimals, 0, 0, HALFDOWN))
232+ let shareInitialSupply = fraction(pow(pmtAmountA, pmtDecimalsA, 5, 1, pmtDecimalsA, DOWN), pow(pmtAmountB, pmtDecimalsB, 5, 1, pmtDecimalsB, DOWN), pow(10, 0, shareDecimals, 0, 0, DOWN))
217233 let shareIssue = Issue(shareName, shareDescription, shareInitialSupply, shareDecimals, true)
218234 let shareIssueId = calculateAssetId(shareIssue)
219235 [StringEntry(keyVersion, version), BooleanEntry(keyActive, true), StringEntry(keyAssetIdA, pmtStrAssetIdA), StringEntry(keyAssetIdB, pmtStrAssetIdB), IntegerEntry(keyBalanceA, pmtAmountA), IntegerEntry(keyBalanceB, pmtAmountB), IntegerEntry(keyCommission, commission), IntegerEntry(keyCommissionScaleDelimiter, commissionScaleDelimiter), shareIssue, StringEntry(keyShareAssetId, toBase58String(shareIssueId)), IntegerEntry(keyShareAssetSupply, shareInitialSupply), ScriptTransfer(i.caller, shareInitialSupply, shareIssueId)]
259275
260276 @Callable(i)
261277 func withdraw () = {
262- let $t01000710157 = $Tuple2(i.payments[0].amount, i.payments[0].assetId)
263- let pmtAmount = $t01000710157._1
264- let pmtAssetId = $t01000710157._2
278+ let $t01030910459 = $Tuple2(i.payments[0].amount, i.payments[0].assetId)
279+ let pmtAmount = $t01030910459._1
280+ let pmtAssetId = $t01030910459._2
265281 let amountToPayA = deductStakingFee(fraction(pmtAmount, balanceA, shareAssetSupply), assetIdA)
266282 let amountToPayB = deductStakingFee(fraction(pmtAmount, balanceB, shareAssetSupply), assetIdB)
267283 if (!(isActive))
283299
284300 @Callable(i)
285301 func exchange (minAmountToReceive) = {
286- let $t01136311438 = $Tuple2(i.payments[0].amount, i.payments[0].assetId)
287- let pmtAmount = $t01136311438._1
288- let pmtAssetId = $t01136311438._2
302+ let $t01166611741 = $Tuple2(i.payments[0].amount, i.payments[0].assetId)
303+ let pmtAmount = $t01166611741._1
304+ let pmtAssetId = $t01166611741._2
289305 func calculateFees (tokenFrom,tokenTo) = {
290306 let amountWithoutFee = fraction(tokenTo, pmtAmount, (pmtAmount + tokenFrom))
291307 let amountWithFee = fraction(amountWithoutFee, (commissionScaleDelimiter - commission), commissionScaleDelimiter)
306322 else if ((pmtAssetId == assetIdA))
307323 then {
308324 let assetIdSend = assetIdB
309- let $t01261312704 = calculateFees(balanceA, balanceB)
310- let amountWithoutFee = $t01261312704._1
311- let amountWithFee = $t01261312704._2
312- let governanceReward = $t01261312704._3
325+ let $t01291713008 = calculateFees(balanceA, balanceB)
326+ let amountWithoutFee = $t01291713008._1
327+ let amountWithFee = $t01291713008._2
328+ let governanceReward = $t01291713008._3
313329 let newBalanceA = (balanceA + pmtAmount)
314330 let newBalanceB = ((balanceB - amountWithFee) - governanceReward)
315331 if (if ((stakedAmountA >= newBalanceA))
321337 else if ((pmtAssetId == assetIdB))
322338 then {
323339 let assetIdSend = assetIdA
324- let $t01352713618 = calculateFees(balanceB, balanceA)
325- let amountWithoutFee = $t01352713618._1
326- let amountWithFee = $t01352713618._2
327- let governanceReward = $t01352713618._3
340+ let $t01383113922 = calculateFees(balanceB, balanceA)
341+ let amountWithoutFee = $t01383113922._1
342+ let amountWithFee = $t01383113922._2
343+ let governanceReward = $t01383113922._3
328344 let newBalanceA = ((balanceA - amountWithFee) - governanceReward)
329345 let newBalanceB = (balanceB + pmtAmount)
330346 if (if ((stakedAmountA >= newBalanceA))
386402
387403 @Verifier(tx)
388404 func verify () = match tx {
389- case invoke: InvokeScriptTransaction =>
390- if (if (if (sigVerify(invoke.bodyBytes, invoke.proofs[0], adminPubKeyStaking))
391- then (invoke.dApp == stakingAddressUSDN)
405+ case inv: InvokeScriptTransaction =>
406+ if (if (if (sigVerify(inv.bodyBytes, inv.proofs[0], adminPubKeyStaking))
407+ then (inv.dApp == stakingAddressUSDN)
392408 else false)
393409 then true
394- else if (if (sigVerify(invoke.bodyBytes, invoke.proofs[0], adminPubKeyStaking))
395- then (invoke.function == "exchange")
410+ else if (if (if (sigVerify(inv.bodyBytes, inv.proofs[0], adminPubKeyStaking))
411+ then (inv.function == "exchange")
396412 else false)
397- then if (if (if (if ((assetIdA == NSBT))
413+ then (size(inv.payments) == 1)
414+ else false)
415+ then if (if (if (if (if ((assetIdA == NSBT))
398416 then (assetIdB == USDN)
399417 else false)
400- then (invoke.dApp == swopUSDNtoWAVES)
418+ then (inv.dApp == swopUSDNtoWAVES)
401419 else false)
402- then if ((invoke.payments[0].assetId == unit))
420+ then (inv.payments[0].assetId == unit)
421+ else false)
422+ then if ((inv.payments[0].assetId == unit))
403423 then true
404- else (invoke.payments[0].assetId == USDN)
424+ else (inv.payments[0].assetId == USDN)
405425 else false)
406426 then true
407427 else if (if ((assetIdA == NSBT))
408428 then (assetIdB == SWOP)
409429 else false)
410- then if (if ((invoke.dApp == swopUSDNtoNSBT))
411- then (invoke.payments[0].assetId == USDN)
430+ then if (if ((inv.dApp == swopUSDNtoNSBT))
431+ then (inv.payments[0].assetId == USDN)
412432 else false)
413433 then true
414- else if ((invoke.dApp == swopUSDNtoWAVES))
415- then if ((invoke.payments[0].assetId == unit))
434+ else if ((inv.dApp == swopUSDNtoWAVES))
435+ then if ((inv.payments[0].assetId == unit))
416436 then true
417- else (invoke.payments[0].assetId == USDN)
437+ else (inv.payments[0].assetId == USDN)
418438 else false
419439 else false
420440 else false)
421441 then true
422- else if (if (sigVerify(invoke.bodyBytes, invoke.proofs[0], adminPubKeyStaking))
423- then (invoke.dApp == this)
442+ else if (if (sigVerify(inv.bodyBytes, inv.proofs[0], adminPubKeyStaking))
443+ then (inv.dApp == this)
424444 else false)
425- then (invoke.function == "takeIntoAccountExtraFunds")
445+ then (inv.function == "takeIntoAccountExtraFunds")
426446 else false
427447 case _ =>
428448 let adminPubKey1Signed = if (sigVerify(tx.bodyBytes, tx.proofs[0], adminPubKey1))
Full:
OldNewDifferences
1-{-# STDLIB_VERSION 4 #-}
1+{-# STDLIB_VERSION 5 #-}
22 {-# SCRIPT_TYPE ACCOUNT #-}
33 {-# CONTENT_TYPE DAPP #-}
44 let version = "1.0.0"
55
66 let keyVersion = "version"
77
88 let keyActive = "active"
99
1010 let keyAssetIdA = "A_asset_id"
1111
1212 let keyAssetIdB = "B_asset_id"
1313
1414 let keyBalanceA = "A_asset_balance"
1515
1616 let keyBalanceB = "B_asset_balance"
1717
1818 let keyShareAssetId = "share_asset_id"
1919
2020 let keyShareAssetSupply = "share_asset_supply"
2121
2222 let keyCommission = "commission"
2323
2424 let keyCommissionScaleDelimiter = "commission_scale_delimiter"
2525
2626 let keyCause = "shutdown_cause"
2727
28-let adminPubKey1 = base58'DXDY2itiEcYBtGkVLnkpHtDFyWQUkoLJz79uJ7ECbMrA'
28+let keyAdminPubKey1 = "admin_pub_1"
2929
30-let adminPubKey2 = base58'E6Wa1SGoktYcjHjsKrvjMiqJY3SWmGKcD8Q5L8kxSPS7'
30+let keyAdminPubKey2 = "admin_pub_2"
3131
32-let adminPubKey3 = base58'AZmWJtuy4GeVrMmJH4hfFBRApe1StvhJSk4jcbT6bArQ'
32+let keyAdminPubKey3 = "admin_pub_3"
33+
34+let oracle = Address(base58'3PEbqViERCoKnmcSULh6n2aiMvUdSQdCsom')
35+
36+func getAdminPub (keyAdminPub) = match getString(oracle, keyAdminPub) {
37+ case string: String =>
38+ fromBase58String(string)
39+ case nothing =>
40+ throw("Admin public key is empty")
41+}
42+
43+
44+let adminPubKey1 = getAdminPub(keyAdminPubKey1)
45+
46+let adminPubKey2 = getAdminPub(keyAdminPubKey2)
47+
48+let adminPubKey3 = getAdminPub(keyAdminPubKey3)
3349
3450 let adminPubKeyStartStop = base58'EtVkT6ed8GtbUiVVEqdmEqsp2J4qbb3rre2HFgxeVYdg'
3551
3652 let adminPubKeyStaking = base58'Czn4yoAuUZCVCLJDRfskn8URfkwpknwBTZDbs1wFrY7h'
3753
3854 let governanceAddress = Address(base58'3P6J84oH51DzY6xk2mT5TheXRbrCwBMxonp')
3955
4056 let stakingAddressUSDN = Address(base58'3PNikM6yp4NqcSU8guxQtmR5onr2D4e8yTJ')
4157
4258 let USDN = base58'DG2xFkPdDwKUoBkzGAhQtLpSGzfXLiCYPEzeKH2Ad24p'
4359
4460 let NSBT = base58'6nSpVyNH7yM69eg446wrQR94ipbbcmZMU1ENPwanC97g'
4561
4662 let SWOP = base58'Ehie5xYpeN8op1Cctc6aGUrqx8jq3jtf1DSjXDbfm7aT'
4763
4864 let swopUSDNtoWAVES = Address(base58'3PHaNgomBkrvEL2QnuJarQVJa71wjw9qiqG')
4965
5066 let swopUSDNtoNSBT = Address(base58'3P2V63Xd6BviDkeMzxhUw2SJyojByRz8a8m')
5167
5268 let stakingFeeInUSDN = 270000
5369
5470 let isActive = getBooleanValue(this, keyActive)
5571
5672 let strAssetIdA = getStringValue(this, keyAssetIdA)
5773
5874 let strAssetIdB = getStringValue(this, keyAssetIdB)
5975
6076 let assetIdA = if ((strAssetIdA == "WAVES"))
6177 then unit
6278 else fromBase58String(strAssetIdA)
6379
6480 let assetIdB = if ((strAssetIdB == "WAVES"))
6581 then unit
6682 else fromBase58String(strAssetIdB)
6783
6884 let assetNameA = match assetIdA {
6985 case id: ByteVector =>
7086 value(assetInfo(id)).name
7187 case waves: Unit =>
7288 "WAVES"
7389 case _ =>
7490 throw("Match error")
7591 }
7692
7793 let assetNameB = match assetIdB {
7894 case id: ByteVector =>
7995 value(assetInfo(id)).name
8096 case waves: Unit =>
8197 "WAVES"
8298 case _ =>
8399 throw("Match error")
84100 }
85101
86102 let balanceA = getIntegerValue(this, keyBalanceA)
87103
88104 let balanceB = getIntegerValue(this, keyBalanceB)
89105
90106 let shareAssetId = fromBase58String(getStringValue(this, keyShareAssetId))
91107
92108 let shareAssetSupply = getIntegerValue(this, keyShareAssetSupply)
93109
94110 let commission = 3000
95111
96112 let commissionGovernance = 1200
97113
98114 let commissionScaleDelimiter = 1000000
99115
100116 let scaleValue3 = 1000
101117
102118 let scaleValue8 = 100000000
103119
104120 let slippageToleranceDelimiter = 1000
105121
106122 let scaleValue8Digits = 8
107123
108124 func accountBalance (assetId) = match assetId {
109125 case id: ByteVector =>
110126 assetBalance(this, id)
111127 case waves: Unit =>
112128 wavesBalance(this).available
113129 case _ =>
114130 throw("Match error")
115131 }
116132
117133
118134 func stakedAmount (stakingAddress,asset) = {
119135 let stakedAmountCalculated = match getInteger(stakingAddress, ((("rpd_balance_" + asset) + "_") + toString(this))) {
120136 case staked: Int =>
121137 staked
122138 case nothing: Unit =>
123139 0
124140 case _ =>
125141 throw("Match error")
126142 }
127143 stakedAmountCalculated
128144 }
129145
130146
131147 let stakedAmountA = stakedAmount(stakingAddressUSDN, strAssetIdA)
132148
133149 let stakedAmountB = stakedAmount(stakingAddressUSDN, strAssetIdB)
134150
135151 let availableBalanceA = (balanceA - stakedAmountA)
136152
137153 let availableBalanceB = (balanceB - stakedAmountB)
138154
139155 let accountBalanceWithStakedA = (accountBalance(assetIdA) + stakedAmountA)
140156
141157 let accountBalanceWithStakedB = (accountBalance(assetIdB) + stakedAmountB)
142158
143159 let hasEnoughBalance = if ((accountBalanceWithStakedA >= balanceA))
144160 then (accountBalanceWithStakedB >= balanceB)
145161 else false
146162
147163 func getAssetInfo (assetId) = match assetId {
148164 case id: ByteVector =>
149165 let stringId = toBase58String(id)
150166 let info = valueOrErrorMessage(assetInfo(id), (("Asset " + stringId) + " doesn't exist"))
151167 $Tuple3(stringId, info.name, info.decimals)
152168 case waves: Unit =>
153169 $Tuple3("WAVES", "WAVES", 8)
154170 case _ =>
155171 throw("Match error")
156172 }
157173
158174
159175 func suspend (cause) = [BooleanEntry(keyActive, false), StringEntry(keyCause, cause)]
160176
161177
162178 func stakedTokenCount () = {
163179 let isStakedA = if ((stakedAmountA > 0))
164180 then 1
165181 else 0
166182 let isStakedB = if ((stakedAmountB > 0))
167183 then 1
168184 else 0
169185 (isStakedA + isStakedB)
170186 }
171187
172188
173189 func deductStakingFee (amount,assetId) = if ((assetId == USDN))
174190 then {
175191 let result = (amount - (stakedTokenCount() * stakingFeeInUSDN))
176192 if ((0 >= result))
177193 then throw((((("Insufficient amount " + toString(amount)) + " to deduct staking fee ") + toString(stakingFeeInUSDN)) + " USD-N"))
178194 else result
179195 }
180196 else amount
181197
182198
183199 func throwInsufficientAvailableBalance (amount,available,assetName) = throw((((((((("Insufficient DApp balance to pay " + toString(amount)) + " ") + assetName) + " due to staking. Available: ") + toString(available)) + " ") + assetName) + ". Please contact support in Telegram: https://t.me/swopfisupport"))
184200
185201
186202 func throwInsufficientAvailableBalances (amountA,amountB) = throw((((((((((((((((("Insufficient DApp balance to pay " + toString(amountA)) + " ") + assetNameA) + " and ") + toString(amountB)) + " ") + assetNameB) + " due to staking. Available: ") + toString(availableBalanceA)) + " ") + assetNameA) + " and ") + toString(availableBalanceB)) + " ") + assetNameB) + ". Please contact support in Telegram: https://t.me/swopfisupport"))
187203
188204
189205 func suspendSuspicious () = suspend(((((((((((((((("Suspicious state. Actual balances: " + toString(accountBalanceWithStakedA)) + " ") + assetNameA) + ", ") + toString(accountBalanceWithStakedB)) + " ") + assetNameB) + ". State: ") + toString(balanceA)) + " ") + assetNameA) + ", ") + toString(balanceB)) + " ") + assetNameB))
190206
191207
192208 @Callable(i)
193209 func init () = {
194- let $t056115688 = $Tuple2(i.payments[0].amount, i.payments[0].assetId)
195- let pmtAmountA = $t056115688._1
196- let pmtAssetIdA = $t056115688._2
197- let $t056935770 = $Tuple2(i.payments[1].amount, i.payments[1].assetId)
198- let pmtAmountB = $t056935770._1
199- let pmtAssetIdB = $t056935770._2
200- let $t057755852 = getAssetInfo(pmtAssetIdA)
201- let pmtStrAssetIdA = $t057755852._1
202- let pmtAssetNameA = $t057755852._2
203- let pmtDecimalsA = $t057755852._3
204- let $t058575934 = getAssetInfo(pmtAssetIdB)
205- let pmtStrAssetIdB = $t058575934._1
206- let pmtAssetNameB = $t058575934._2
207- let pmtDecimalsB = $t058575934._3
210+ let $t059246001 = $Tuple2(i.payments[0].amount, i.payments[0].assetId)
211+ let pmtAmountA = $t059246001._1
212+ let pmtAssetIdA = $t059246001._2
213+ let $t060066083 = $Tuple2(i.payments[1].amount, i.payments[1].assetId)
214+ let pmtAmountB = $t060066083._1
215+ let pmtAssetIdB = $t060066083._2
216+ let $t060886165 = getAssetInfo(pmtAssetIdA)
217+ let pmtStrAssetIdA = $t060886165._1
218+ let pmtAssetNameA = $t060886165._2
219+ let pmtDecimalsA = $t060886165._3
220+ let $t061706247 = getAssetInfo(pmtAssetIdB)
221+ let pmtStrAssetIdB = $t061706247._1
222+ let pmtAssetNameB = $t061706247._2
223+ let pmtDecimalsB = $t061706247._3
208224 if (isDefined(getBoolean(this, keyActive)))
209225 then throw("DApp is already active")
210226 else if ((pmtAssetIdA == pmtAssetIdB))
211227 then throw("Assets must be different")
212228 else {
213229 let shareName = ((("s" + take(pmtAssetNameA, 7)) + "_") + take(pmtAssetNameB, 7))
214230 let shareDescription = ((((("ShareToken of SwopFi protocol for " + pmtAssetNameA) + " and ") + pmtAssetNameB) + " at address ") + toString(this))
215231 let shareDecimals = ((pmtDecimalsA + pmtDecimalsB) / 2)
216- let shareInitialSupply = fraction(pow(pmtAmountA, pmtDecimalsA, 5, 1, pmtDecimalsA, HALFDOWN), pow(pmtAmountB, pmtDecimalsB, 5, 1, pmtDecimalsB, HALFDOWN), pow(10, 0, shareDecimals, 0, 0, HALFDOWN))
232+ let shareInitialSupply = fraction(pow(pmtAmountA, pmtDecimalsA, 5, 1, pmtDecimalsA, DOWN), pow(pmtAmountB, pmtDecimalsB, 5, 1, pmtDecimalsB, DOWN), pow(10, 0, shareDecimals, 0, 0, DOWN))
217233 let shareIssue = Issue(shareName, shareDescription, shareInitialSupply, shareDecimals, true)
218234 let shareIssueId = calculateAssetId(shareIssue)
219235 [StringEntry(keyVersion, version), BooleanEntry(keyActive, true), StringEntry(keyAssetIdA, pmtStrAssetIdA), StringEntry(keyAssetIdB, pmtStrAssetIdB), IntegerEntry(keyBalanceA, pmtAmountA), IntegerEntry(keyBalanceB, pmtAmountB), IntegerEntry(keyCommission, commission), IntegerEntry(keyCommissionScaleDelimiter, commissionScaleDelimiter), shareIssue, StringEntry(keyShareAssetId, toBase58String(shareIssueId)), IntegerEntry(keyShareAssetSupply, shareInitialSupply), ScriptTransfer(i.caller, shareInitialSupply, shareIssueId)]
220236 }
221237 }
222238
223239
224240
225241 @Callable(i)
226242 func replenishWithTwoTokens (slippageTolerance) = {
227243 let pmtAssetIdA = i.payments[0].assetId
228244 let pmtAssetIdB = i.payments[1].assetId
229245 let pmtAmountA = deductStakingFee(i.payments[0].amount, pmtAssetIdA)
230246 let pmtAmountB = deductStakingFee(i.payments[1].amount, pmtAssetIdB)
231247 let tokenRatio = fraction(fraction(balanceA, scaleValue8, pmtAmountA), scaleValue3, fraction(balanceB, scaleValue8, pmtAmountB))
232248 let ratioShareTokensInA = fraction(pmtAmountA, scaleValue8, balanceA)
233249 let ratioShareTokensInB = fraction(pmtAmountB, scaleValue8, balanceB)
234250 let shareTokenToPayAmount = fraction(min([ratioShareTokensInA, ratioShareTokensInB]), shareAssetSupply, scaleValue8)
235251 if (!(isActive))
236252 then throw("DApp is inactive at this moment")
237253 else if (if ((0 > slippageTolerance))
238254 then true
239255 else (slippageTolerance > slippageToleranceDelimiter))
240256 then throw(((("Slippage tolerance must be between 0 and " + toString(slippageToleranceDelimiter)) + " inclusively. Actual: ") + toString(slippageTolerance)))
241257 else if ((size(i.payments) != 2))
242258 then throw("Two attached assets expected")
243259 else if (if ((pmtAssetIdA != assetIdA))
244260 then true
245261 else (pmtAssetIdB != assetIdB))
246262 then throw(((("Incorrect assets attached. Expected: " + strAssetIdA) + " and ") + strAssetIdB))
247263 else if (if ((((scaleValue3 * (slippageToleranceDelimiter - slippageTolerance)) / slippageToleranceDelimiter) > tokenRatio))
248264 then true
249265 else (tokenRatio > ((scaleValue3 * (slippageToleranceDelimiter + slippageTolerance)) / slippageToleranceDelimiter)))
250266 then throw("Incorrect assets amount: amounts must have the contract ratio")
251267 else if ((shareTokenToPayAmount == 0))
252268 then throw("Too small amount to replenish")
253269 else if (!(hasEnoughBalance))
254270 then ([ScriptTransfer(i.caller, pmtAmountA, pmtAssetIdA), ScriptTransfer(i.caller, pmtAmountB, pmtAssetIdB)] ++ suspendSuspicious())
255271 else [IntegerEntry(keyBalanceA, (balanceA + pmtAmountA)), IntegerEntry(keyBalanceB, (balanceB + pmtAmountB)), IntegerEntry(keyShareAssetSupply, (shareAssetSupply + shareTokenToPayAmount)), Reissue(shareAssetId, shareTokenToPayAmount, true), ScriptTransfer(i.caller, shareTokenToPayAmount, shareAssetId)]
256272 }
257273
258274
259275
260276 @Callable(i)
261277 func withdraw () = {
262- let $t01000710157 = $Tuple2(i.payments[0].amount, i.payments[0].assetId)
263- let pmtAmount = $t01000710157._1
264- let pmtAssetId = $t01000710157._2
278+ let $t01030910459 = $Tuple2(i.payments[0].amount, i.payments[0].assetId)
279+ let pmtAmount = $t01030910459._1
280+ let pmtAssetId = $t01030910459._2
265281 let amountToPayA = deductStakingFee(fraction(pmtAmount, balanceA, shareAssetSupply), assetIdA)
266282 let amountToPayB = deductStakingFee(fraction(pmtAmount, balanceB, shareAssetSupply), assetIdB)
267283 if (!(isActive))
268284 then throw("DApp is inactive at this moment")
269285 else if ((size(i.payments) != 1))
270286 then throw("One attached payment expected")
271287 else if ((pmtAssetId != shareAssetId))
272288 then throw(("Incorrect asset attached. Expected: " + toBase58String(shareAssetId)))
273289 else if (!(hasEnoughBalance))
274290 then ([ScriptTransfer(i.caller, pmtAmount, pmtAssetId)] ++ suspendSuspicious())
275291 else if (if ((amountToPayA > availableBalanceA))
276292 then true
277293 else (amountToPayB > availableBalanceB))
278294 then throwInsufficientAvailableBalances(amountToPayA, amountToPayB)
279295 else [IntegerEntry(keyBalanceA, (balanceA - amountToPayA)), IntegerEntry(keyBalanceB, (balanceB - amountToPayB)), IntegerEntry(keyShareAssetSupply, (shareAssetSupply - pmtAmount)), Burn(shareAssetId, pmtAmount), ScriptTransfer(i.caller, amountToPayA, assetIdA), ScriptTransfer(i.caller, amountToPayB, assetIdB)]
280296 }
281297
282298
283299
284300 @Callable(i)
285301 func exchange (minAmountToReceive) = {
286- let $t01136311438 = $Tuple2(i.payments[0].amount, i.payments[0].assetId)
287- let pmtAmount = $t01136311438._1
288- let pmtAssetId = $t01136311438._2
302+ let $t01166611741 = $Tuple2(i.payments[0].amount, i.payments[0].assetId)
303+ let pmtAmount = $t01166611741._1
304+ let pmtAssetId = $t01166611741._2
289305 func calculateFees (tokenFrom,tokenTo) = {
290306 let amountWithoutFee = fraction(tokenTo, pmtAmount, (pmtAmount + tokenFrom))
291307 let amountWithFee = fraction(amountWithoutFee, (commissionScaleDelimiter - commission), commissionScaleDelimiter)
292308 let governanceReward = fraction(amountWithoutFee, commissionGovernance, commissionScaleDelimiter)
293309 if ((minAmountToReceive > amountWithFee))
294310 then throw(((("Calculated amount to receive " + toString(amountWithFee)) + " is less than specified minimum ") + toString(minAmountToReceive)))
295311 else $Tuple3(amountWithoutFee, amountWithFee, governanceReward)
296312 }
297313
298314 if (!(isActive))
299315 then throw("DApp is inactive at this moment")
300316 else if ((0 >= minAmountToReceive))
301317 then throw(("Minimal amount to receive must be positive. Actual: " + toString(minAmountToReceive)))
302318 else if ((size(i.payments) != 1))
303319 then throw("One attached payment expected")
304320 else if (!(hasEnoughBalance))
305321 then ([ScriptTransfer(i.caller, pmtAmount, pmtAssetId)] ++ suspendSuspicious())
306322 else if ((pmtAssetId == assetIdA))
307323 then {
308324 let assetIdSend = assetIdB
309- let $t01261312704 = calculateFees(balanceA, balanceB)
310- let amountWithoutFee = $t01261312704._1
311- let amountWithFee = $t01261312704._2
312- let governanceReward = $t01261312704._3
325+ let $t01291713008 = calculateFees(balanceA, balanceB)
326+ let amountWithoutFee = $t01291713008._1
327+ let amountWithFee = $t01291713008._2
328+ let governanceReward = $t01291713008._3
313329 let newBalanceA = (balanceA + pmtAmount)
314330 let newBalanceB = ((balanceB - amountWithFee) - governanceReward)
315331 if (if ((stakedAmountA >= newBalanceA))
316332 then true
317333 else (stakedAmountB >= newBalanceB))
318334 then throwInsufficientAvailableBalance(amountWithFee, availableBalanceB, assetNameB)
319335 else [IntegerEntry(keyBalanceA, newBalanceA), IntegerEntry(keyBalanceB, newBalanceB), ScriptTransfer(i.caller, amountWithFee, assetIdSend), ScriptTransfer(governanceAddress, governanceReward, assetIdSend)]
320336 }
321337 else if ((pmtAssetId == assetIdB))
322338 then {
323339 let assetIdSend = assetIdA
324- let $t01352713618 = calculateFees(balanceB, balanceA)
325- let amountWithoutFee = $t01352713618._1
326- let amountWithFee = $t01352713618._2
327- let governanceReward = $t01352713618._3
340+ let $t01383113922 = calculateFees(balanceB, balanceA)
341+ let amountWithoutFee = $t01383113922._1
342+ let amountWithFee = $t01383113922._2
343+ let governanceReward = $t01383113922._3
328344 let newBalanceA = ((balanceA - amountWithFee) - governanceReward)
329345 let newBalanceB = (balanceB + pmtAmount)
330346 if (if ((stakedAmountA >= newBalanceA))
331347 then true
332348 else (stakedAmountB >= newBalanceB))
333349 then throwInsufficientAvailableBalance(amountWithFee, availableBalanceA, assetNameA)
334350 else [IntegerEntry(keyBalanceA, newBalanceA), IntegerEntry(keyBalanceB, newBalanceB), ScriptTransfer(i.caller, amountWithFee, assetIdSend), ScriptTransfer(governanceAddress, governanceReward, assetIdSend)]
335351 }
336352 else throw(((("Incorrect asset attached. Expected: " + strAssetIdA) + " or ") + strAssetIdB))
337353 }
338354
339355
340356
341357 @Callable(i)
342358 func shutdown () = if (!(isActive))
343359 then throw(("DApp is already suspended. Cause: " + valueOrElse(getString(this, keyCause), "the cause wasn't specified")))
344360 else if (!(containsElement([adminPubKey1, adminPubKey2, adminPubKey3, adminPubKeyStartStop], i.callerPublicKey)))
345361 then throw("Only admin can call this function")
346362 else suspend("Paused by admin")
347363
348364
349365
350366 @Callable(i)
351367 func activate () = if (isActive)
352368 then throw("DApp is already active")
353369 else if (!(containsElement([adminPubKey1, adminPubKey2, adminPubKey3, adminPubKeyStartStop], i.callerPublicKey)))
354370 then throw("Only admin can call this function")
355371 else [BooleanEntry(keyActive, true), DeleteEntry(keyCause)]
356372
357373
358374
359375 @Callable(i)
360376 func takeIntoAccountExtraFunds (amountLeave) = {
361377 let uncountableAmountEnrollAssetA = (accountBalanceWithStakedA - balanceA)
362378 let uncountableAmountEnrollAssetB = (accountBalanceWithStakedB - balanceB)
363379 let amountEnrollA = (uncountableAmountEnrollAssetA - (if ((assetIdA == unit))
364380 then amountLeave
365381 else 0))
366382 let amountEnrollB = (uncountableAmountEnrollAssetB - (if ((assetIdB == unit))
367383 then amountLeave
368384 else 0))
369385 if (!(isActive))
370386 then throw("DApp is inactive at this moment")
371387 else if ((i.caller != this))
372388 then throw("Only the DApp itself can call this function")
373389 else if ((0 > amountLeave))
374390 then throw(("Argument 'amountLeave' cannot be negative. Actual: " + toString(amountLeave)))
375391 else if (if ((0 > uncountableAmountEnrollAssetA))
376392 then true
377393 else (0 > uncountableAmountEnrollAssetB))
378394 then suspend("Enroll amount negative")
379395 else if (if ((0 > amountEnrollA))
380396 then true
381397 else (0 > amountEnrollB))
382398 then throw("Too large amountLeave")
383399 else [IntegerEntry(keyBalanceA, (balanceA + amountEnrollA)), IntegerEntry(keyBalanceB, (balanceB + amountEnrollB)), IntegerEntry(("last_income_" + strAssetIdA), amountEnrollA), IntegerEntry(("last_income_" + strAssetIdB), amountEnrollB)]
384400 }
385401
386402
387403 @Verifier(tx)
388404 func verify () = match tx {
389- case invoke: InvokeScriptTransaction =>
390- if (if (if (sigVerify(invoke.bodyBytes, invoke.proofs[0], adminPubKeyStaking))
391- then (invoke.dApp == stakingAddressUSDN)
405+ case inv: InvokeScriptTransaction =>
406+ if (if (if (sigVerify(inv.bodyBytes, inv.proofs[0], adminPubKeyStaking))
407+ then (inv.dApp == stakingAddressUSDN)
392408 else false)
393409 then true
394- else if (if (sigVerify(invoke.bodyBytes, invoke.proofs[0], adminPubKeyStaking))
395- then (invoke.function == "exchange")
410+ else if (if (if (sigVerify(inv.bodyBytes, inv.proofs[0], adminPubKeyStaking))
411+ then (inv.function == "exchange")
396412 else false)
397- then if (if (if (if ((assetIdA == NSBT))
413+ then (size(inv.payments) == 1)
414+ else false)
415+ then if (if (if (if (if ((assetIdA == NSBT))
398416 then (assetIdB == USDN)
399417 else false)
400- then (invoke.dApp == swopUSDNtoWAVES)
418+ then (inv.dApp == swopUSDNtoWAVES)
401419 else false)
402- then if ((invoke.payments[0].assetId == unit))
420+ then (inv.payments[0].assetId == unit)
421+ else false)
422+ then if ((inv.payments[0].assetId == unit))
403423 then true
404- else (invoke.payments[0].assetId == USDN)
424+ else (inv.payments[0].assetId == USDN)
405425 else false)
406426 then true
407427 else if (if ((assetIdA == NSBT))
408428 then (assetIdB == SWOP)
409429 else false)
410- then if (if ((invoke.dApp == swopUSDNtoNSBT))
411- then (invoke.payments[0].assetId == USDN)
430+ then if (if ((inv.dApp == swopUSDNtoNSBT))
431+ then (inv.payments[0].assetId == USDN)
412432 else false)
413433 then true
414- else if ((invoke.dApp == swopUSDNtoWAVES))
415- then if ((invoke.payments[0].assetId == unit))
434+ else if ((inv.dApp == swopUSDNtoWAVES))
435+ then if ((inv.payments[0].assetId == unit))
416436 then true
417- else (invoke.payments[0].assetId == USDN)
437+ else (inv.payments[0].assetId == USDN)
418438 else false
419439 else false
420440 else false)
421441 then true
422- else if (if (sigVerify(invoke.bodyBytes, invoke.proofs[0], adminPubKeyStaking))
423- then (invoke.dApp == this)
442+ else if (if (sigVerify(inv.bodyBytes, inv.proofs[0], adminPubKeyStaking))
443+ then (inv.dApp == this)
424444 else false)
425- then (invoke.function == "takeIntoAccountExtraFunds")
445+ then (inv.function == "takeIntoAccountExtraFunds")
426446 else false
427447 case _ =>
428448 let adminPubKey1Signed = if (sigVerify(tx.bodyBytes, tx.proofs[0], adminPubKey1))
429449 then 1
430450 else 0
431451 let adminPubKey2Signed = if (sigVerify(tx.bodyBytes, tx.proofs[1], adminPubKey2))
432452 then 1
433453 else 0
434454 let adminPubKey3Signed = if (sigVerify(tx.bodyBytes, tx.proofs[2], adminPubKey3))
435455 then 1
436456 else 0
437457 (((adminPubKey1Signed + adminPubKey2Signed) + adminPubKey3Signed) >= 2)
438458 }
439459

github/deemru/w8io/6500d08 
125.96 ms