tx · GEAQ19Spx5sb5koR83Ly6JAfGGJVoAidgaAcSEKg48zo

3P8KMyAJCPWNcyedqrmymxaeWonvmkhGauz:  -0.01400000 Waves

2021.12.28 15:02 [2919121] smart account 3P8KMyAJCPWNcyedqrmymxaeWonvmkhGauz > SELF 0.00000000 Waves

{ "type": 13, "id": "GEAQ19Spx5sb5koR83Ly6JAfGGJVoAidgaAcSEKg48zo", "fee": 1400000, "feeAssetId": null, "timestamp": 1640693021939, "version": 1, "sender": "3P8KMyAJCPWNcyedqrmymxaeWonvmkhGauz", "senderPublicKey": "DxhbzFs9BZTiN6kcnyybxmqPTV8xReD6Z5gWQ5AgRX8w", "proofs": [ "EU1T5dzxqvUpgSUjwHh8MTyLozLuJ5WdUWoE22gdmPu1yu6nSVvbqY5rjWEHqJ4wscVtKjJoyRQhyejSDTcbaPg" ], "script": "base64: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AAAIc2xpcHBhZ2UJAAUUAAAAAgUAAAAGcGFzc2VkCQABmQAAAAEJAARMAAAAAgUAAAAHcmVhbEFtdAkABEwAAAACBQAAAAtleHBlY3RlZEFtdAUAAAADbmlsAQAAABBwcml2YXRlQ2FsY1ByaWNlAAAABAAAAAphbUFzc2V0RGNtAAAACnByQXNzZXREY20AAAAFYW1BbXQAAAAFcHJBbXQEAAAAC2FtdEFzQW10WDE4CQEAAAAFdG9YMTgAAAACBQAAAAVhbUFtdAUAAAAKYW1Bc3NldERjbQQAAAAKcHJBc0FtdFgxOAkBAAAABXRvWDE4AAAAAgUAAAAFcHJBbXQFAAAACnByQXNzZXREY20JAQAAAA9jYWxjUHJpY2VCaWdJbnQAAAACBQAAAApwckFzQW10WDE4BQAAAAthbXRBc0FtdFgxOAEAAAAKY2FsY1ByaWNlcwAAAAMAAAAFYW1BbXQAAAAFcHJBbXQAAAAFbHBBbXQEAAAAA2NmZwkBAAAADWdldFBvb2xDb25maWcAAAAABAAAAAhhbXRBc0RjbQkBAAAADXBhcnNlSW50VmFsdWUAAAABCQABkQAAAAIFAAAAA2NmZwUAAAALaWR4QW10QXNEY20EAAAAB3ByQXNEY20JAQAAAA1wYXJzZUludFZhbHVlAAAAAQkAAZEAAAACBQAAAANjZmcFAAAADWlkeFByaWNlQXNEY20EAAAACHByaWNlWDE4CQEAAAAQcHJpdmF0ZUNhbGNQcmljZQAAAAQFAAAACGFtdEFzRGNtBQAAAAdwckFzRGNtBQAAAAVhbUFtdAUAAAAFcHJBbXQEAAAACGFtQW10WDE4CQEAAAAFdG9YMTgAAAACBQAAAAVhbUFtdAUAAAAIYW10QXNEY20EAAAACHByQW10WDE4CQEAAAAFdG9YMTgAAAACBQAAAAVwckFtdAUAAAAHcHJBc0RjbQQAAAAIbHBBbXRYMTgJAQAAAAV0b1gxOAAAAAIFAAAABWxwQW10BQAAAAZzY2FsZTgEAAAADWxwUHJJbkFtQXNYMTgJAQAAAA9jYWxjUHJpY2VCaWdJbnQAAAACBQAAAAhhbUFtdFgxOAUAAAAIbHBBbXRYMTgEAAAADWxwUHJJblByQXNYMTgJAQAAAA9jYWxjUHJpY2VCaWdJbnQAAAACBQAAAAhwckFtdFgxOAUAAAAIbHBBbXRYMTgJAARMAAAAAgUAAAAIcHJpY2VYMTgJAARMAAAAAgUAAAANbHBQckluQW1Bc1gxOAkABEwAAAACBQAAAA1scFBySW5QckFzWDE4BQAAAANuaWwBAAAAD2NhbGN1bGF0ZVByaWNlcwAAAAMAAAAFYW1BbXQAAAAFcHJBbXQAAAAFbHBBbXQEAAAABnByaWNlcwkBAAAACmNhbGNQcmljZXMAAAADBQAAAAVhbUFtdAUAAAAFcHJBbXQFAAAABWxwQW10CQAETAAAAAIJAQAAAAdmcm9tWDE4AAAAAgkAAZEAAAACBQAAAAZwcmljZXMAAAAAAAAAAAAFAAAABnNjYWxlOAkABEwAAAACCQEAAAAHZnJvbVgxOAAAAAIJAAGRAAAAAgUAAAAGcHJpY2VzAAAAAAAAAAABBQAAAAZzY2FsZTgJAARMAAAAAgkBAAAAB2Zyb21YMTgAAAACCQABkQAAAAIFAAAABnByaWNlcwAAAAAAAAAAAgUAAAAGc2NhbGU4BQAAAANuaWwBAAAAFGVzdGltYXRlR2V0T3BlcmF0aW9uAAAABAAAAAZ0eElkNTgAAAAKcG10QXNzZXRJZAAAAAhwbXRMcEFtdAAAAAt1c2VyQWRkcmVzcwQAAAADY2ZnCQEAAAANZ2V0UG9vbENvbmZpZwAAAAAEAAAABGxwSWQJAAGRAAAAAgUAAAADY2ZnBQAAAAlpZHhMUEFzSWQEAAAABGFtSWQJAAGRAAAAAgUAAAADY2ZnBQAAAAlpZHhBbUFzSWQEAAAABHBySWQJAAGRAAAAAgUAAAADY2ZnBQAAAAlpZHhQckFzSWQEAAAABWFtRGNtCQEAAAANcGFyc2VJbnRWYWx1ZQAAAAEJAAGRAAAAAgUAAAADY2ZnBQAAAAtpZHhBbXRBc0RjbQQAAAAFcHJEY20JAQAAAA1wYXJzZUludFZhbHVlAAAAAQkAAZEAAAACBQAAAANjZmcFAAAADWlkeFByaWNlQXNEY20EAAAACnBvb2xTdGF0dXMJAAGRAAAAAgUAAAADY2ZnBQAAAAlpZHhQb29sU3QEAAAACmxwRW1pc3Npb24ICQEAAAATdmFsdWVPckVycm9yTWVzc2FnZQAAAAIJAAPsAAAAAQkAAlkAAAABBQAAAARscElkAgAAAA1JbnZhbGlkIExQIGlkAAAACHF1YW50aXR5AwkBAAAAAiE9AAAAAgUAAAAEbHBJZAUAAAAKcG10QXNzZXRJZAkAAAIAAAABAgAAABFJbnZhbGlkIHBtdCBhc3NldAQAAAAJYW1CYWxhbmNlCQEAAAANZ2V0QWNjQmFsYW5jZQAAAAEFAAAABGFtSWQEAAAADGFtQmFsYW5jZVgxOAkBAAAABXRvWDE4AAAAAgUAAAAJYW1CYWxhbmNlBQAAAAVhbURjbQQAAAAJcHJCYWxhbmNlCQEAAAANZ2V0QWNjQmFsYW5jZQAAAAEFAAAABHBySWQEAAAADHByQmFsYW5jZVgxOAkBAAAABXRvWDE4AAAAAgUAAAAJcHJCYWxhbmNlBQAAAAVwckRjbQQAAAALY3VyUHJpY2VYMTgJAQAAAA9jYWxjUHJpY2VCaWdJbnQAAAACBQAAAAxwckJhbGFuY2VYMTgFAAAADGFtQmFsYW5jZVgxOAQAAAAIY3VyUHJpY2UJAQAAAAdmcm9tWDE4AAAAAgUAAAALY3VyUHJpY2VYMTgFAAAABnNjYWxlOAQAAAALcG10THBBbXRYMTgJAQAAAAV0b1gxOAAAAAIFAAAACHBtdExwQW10BQAAAAZzY2FsZTgEAAAADWxwRW1pc3Npb25YMTgJAQAAAAV0b1gxOAAAAAIFAAAACmxwRW1pc3Npb24FAAAABnNjYWxlOAQAAAALb3V0QW1BbXRYMTgJAAE8AAAAAwUAAAAMYW1CYWxhbmNlWDE4BQAAAAtwbXRMcEFtdFgxOAUAAAANbHBFbWlzc2lvblgxOAQAAAALb3V0UHJBbXRYMTgJAAE8AAAAAwUAAAAMcHJCYWxhbmNlWDE4BQAAAAtwbXRMcEFtdFgxOAUAAAANbHBFbWlzc2lvblgxOAQAAAAIb3V0QW1BbXQJAQAAAAdmcm9tWDE4AAAAAgUAAAALb3V0QW1BbXRYMTgFAAAABWFtRGNtBAAAAAhvdXRQckFtdAkBAAAAB2Zyb21YMTgAAAACBQAAAAtvdXRQckFtdFgxOAUAAAAFcHJEY20EAAAABXN0YXRlAwkAAAAAAAACBQAAAAZ0eElkNTgCAAAAAAUAAAADbmlsCQAETAAAAAIJAQAAAA5TY3JpcHRUcmFuc2ZlcgAAAAMFAAAAC3VzZXJBZGRyZXNzBQAAAAhvdXRBbUFtdAMJAAAAAAAAAgUAAAAEYW1JZAIAAAAFV0FWRVMFAAAABHVuaXQJAAJZAAAAAQUAAAAEYW1JZAkABEwAAAACCQEAAAAOU2NyaXB0VHJhbnNmZXIAAAADBQAAAAt1c2VyQWRkcmVzcwUAAAAIb3V0UHJBbXQDCQAAAAAAAAIFAAAABHBySWQCAAAABVdBVkVTBQAAAAR1bml0CQACWQAAAAEFAAAABHBySWQJAARMAAAAAgkBAAAAC1N0cmluZ0VudHJ5AAAAAgkBAAAAEmtleUdldEFjdGlvbkJ5VXNlcgAAAAIJAAQlAAAAAQUAAAALdXNlckFkZHJlc3MFAAAABnR4SWQ1OAkBAAAAEWRhdGFHZXRBY3Rpb25JbmZvAAAABgUAAAAIb3V0QW1BbXQFAAAACG91dFByQW10BQAAAAhwbXRMcEFtdAUAAAAIY3VyUHJpY2UFAAAABmhlaWdodAgFAAAACWxhc3RCbG9jawAAAAl0aW1lc3RhbXAJAARMAAAAAgkBAAAADEludGVnZXJFbnRyeQAAAAIJAQAAAAxrZXlQcmljZUxhc3QAAAAABQAAAAhjdXJQcmljZQkABEwAAAACCQEAAAAMSW50ZWdlckVudHJ5AAAAAgkBAAAAD2tleVByaWNlSGlzdG9yeQAAAAIFAAAABmhlaWdodAgFAAAACWxhc3RCbG9jawAAAAl0aW1lc3RhbXAFAAAACGN1clByaWNlBQAAAANuaWwJAAUcAAAACgUAAAAIb3V0QW1BbXQFAAAACG91dFByQW10BQAAAARhbUlkBQAAAARwcklkBQAAAAlhbUJhbGFuY2UFAAAACXByQmFsYW5jZQUAAAAKbHBFbWlzc2lvbgUAAAALY3VyUHJpY2VYMTgFAAAACnBvb2xTdGF0dXMFAAAABXN0YXRlAQAAABRlc3RpbWF0ZVB1dE9wZXJhdGlvbgAAAAwAAAAGdHhJZDU4AAAACHNsaXBwYWdlAAAAB2luQW1BbXQAAAAGaW5BbUlkAAAAB2luUHJBbXQAAAAGaW5QcklkAAAAC3VzZXJBZGRyZXNzAAAABmlzRXZhbAAAAAZlbWl0THAAAAAKaXNPbmVBc3NldAAAAAZwbXRBbXQAAAAFcG10SWQEAAAAA2NmZwkBAAAADWdldFBvb2xDb25maWcAAAAABAAAAARscElkCQACWQAAAAEJAAGRAAAAAgUAAAADY2ZnBQAAAAlpZHhMUEFzSWQEAAAAB2FtSWRTdHIJAAGRAAAAAgUAAAADY2ZnBQAAAAlpZHhBbUFzSWQEAAAAB3BySWRTdHIJAAGRAAAAAgUAAAADY2ZnBQAAAAlpZHhQckFzSWQEAAAACWluQW1JZFN0cgkAAZEAAAACBQAAAANjZmcFAAAAC2lkeElBbXRBc0lkBAAAAAlpblBySWRTdHIJAAGRAAAAAgUAAAADY2ZnBQAAAA1pZHhJUHJpY2VBc0lkBAAAAAZhbXREY20JAQAAAA1wYXJzZUludFZhbHVlAAAAAQkAAZEAAAACBQAAAANjZmcFAAAAC2lkeEFtdEFzRGNtBAAAAAhwcmljZURjbQkBAAAADXBhcnNlSW50VmFsdWUAAAABCQABkQAAAAIFAAAAA2NmZwUAAAANaWR4UHJpY2VBc0RjbQQAAAAKcG9vbFN0YXR1cwkAAZEAAAACBQAAAANjZmcFAAAACWlkeFBvb2xTdAQAAAAEbHBFbQgJAQAAABN2YWx1ZU9yRXJyb3JNZXNzYWdlAAAAAgkAA+wAAAABBQAAAARscElkAgAAAAhXciBscCBhcwAAAAhxdWFudGl0eQQAAAAJYW1CYWxhbmNlAwUAAAAGaXNFdmFsCQEAAAANZ2V0QWNjQmFsYW5jZQAAAAEFAAAAB2FtSWRTdHIDAwUAAAAKaXNPbmVBc3NldAkAAAAAAAACBQAAAAVwbXRJZAUAAAAHYW1JZFN0cgcJAABlAAAAAgkBAAAADWdldEFjY0JhbGFuY2UAAAABBQAAAAdhbUlkU3RyBQAAAAZwbXRBbXQDBQAAAAppc09uZUFzc2V0CQEAAAANZ2V0QWNjQmFsYW5jZQAAAAEFAAAAB2FtSWRTdHIJAABlAAAAAgkBAAAADWdldEFjY0JhbGFuY2UAAAABBQAAAAdhbUlkU3RyBQAAAAdpbkFtQW10BAAAAAlwckJhbGFuY2UDBQAAAAZpc0V2YWwJAQAAAA1nZXRBY2NCYWxhbmNlAAAAAQUAAAAHcHJJZFN0cgMDBQAAAAppc09uZUFzc2V0CQAAAAAAAAIFAAAABXBtdElkBQAAAAdwcklkU3RyBwkAAGUAAAACCQEAAAANZ2V0QWNjQmFsYW5jZQAAAAEFAAAAB3BySWRTdHIFAAAABnBtdEFtdAMFAAAACmlzT25lQXNzZXQJAQAAAA1nZXRBY2NCYWxhbmNlAAAAAQUAAAAHcHJJZFN0cgkAAGUAAAACCQEAAAANZ2V0QWNjQmFsYW5jZQAAAAEFAAAAB3BySWRTdHIFAAAAB2luUHJBbXQEAAAAD2luQW1Bc3NldEFtdFgxOAkBAAAABXRvWDE4AAAAAgUAAAAHaW5BbUFtdAUAAAAGYW10RGNtBAAAAA9pblByQXNzZXRBbXRYMTgJAQAAAAV0b1gxOAAAAAIFAAAAB2luUHJBbXQFAAAACHByaWNlRGNtBAAAAAx1c2VyUHJpY2VYMTgJAQAAAA9jYWxjUHJpY2VCaWdJbnQAAAACBQAAAA9pblByQXNzZXRBbXRYMTgFAAAAD2luQW1Bc3NldEFtdFgxOAQAAAAMYW1CYWxhbmNlWDE4CQEAAAAFdG9YMTgAAAACBQAAAAlhbUJhbGFuY2UFAAAABmFtdERjbQQAAAAMcHJCYWxhbmNlWDE4CQEAAAAFdG9YMTgAAAACBQAAAAlwckJhbGFuY2UFAAAACHByaWNlRGNtBAAAAANyZXMDCQAAAAAAAAIFAAAABGxwRW0AAAAAAAAAAAAEAAAAC2N1clByaWNlWDE4BQAAAAp6ZXJvQmlnSW50BAAAAAtzbGlwcGFnZVgxOAUAAAAKemVyb0JpZ0ludAQAAAAIbHBBbXRYMTgJAAB2AAAABgkAATkAAAACBQAAAA9pbkFtQXNzZXRBbXRYMTgFAAAAD2luUHJBc3NldEFtdFgxOAAAAAAAAAAAAAkAATYAAAABAAAAAAAAAAAFAAAAAAAAAAABAAAAAAAAAAAABQAAAARET1dOCQAFFwAAAAUJAQAAAAdmcm9tWDE4AAAAAgUAAAAIbHBBbXRYMTgFAAAABnNjYWxlOAkBAAAAB2Zyb21YMTgAAAACBQAAAA9pbkFtQXNzZXRBbXRYMTgFAAAABmFtdERjbQkBAAAAB2Zyb21YMTgAAAACBQAAAA9pblByQXNzZXRBbXRYMTgFAAAACHByaWNlRGNtCQEAAAAPY2FsY1ByaWNlQmlnSW50AAAAAgkAATcAAAACBQAAAAxwckJhbGFuY2VYMTgFAAAAD2luUHJBc3NldEFtdFgxOAkAATcAAAACBQAAAAxhbUJhbGFuY2VYMTgFAAAAD2luQW1Bc3NldEFtdFgxOAUAAAALc2xpcHBhZ2VYMTgEAAAAC2N1clByaWNlWDE4CQEAAAAPY2FsY1ByaWNlQmlnSW50AAAAAgUAAAAMcHJCYWxhbmNlWDE4BQAAAAxhbUJhbGFuY2VYMTgEAAAAD3NsaXBwYWdlUmVhbFgxOAkAATwAAAADCQEAAAADYWJzAAAAAQkAATgAAAACBQAAAAtjdXJQcmljZVgxOAUAAAAMdXNlclByaWNlWDE4BQAAAAdzY2FsZTE4BQAAAAtjdXJQcmljZVgxOAQAAAALc2xpcHBhZ2VYMTgJAQAAAAV0b1gxOAAAAAIFAAAACHNsaXBwYWdlBQAAAAZzY2FsZTgDAwkBAAAAAiE9AAAAAgUAAAALY3VyUHJpY2VYMTgFAAAACnplcm9CaWdJbnQJAAE/AAAAAgUAAAAPc2xpcHBhZ2VSZWFsWDE4BQAAAAtzbGlwcGFnZVgxOAcJAAACAAAAAQkAASwAAAACCQABLAAAAAIJAAEsAAAAAgIAAAAPUHJpY2Ugc2xpcHBhZ2UgCQABpgAAAAEFAAAAD3NsaXBwYWdlUmVhbFgxOAIAAAADID4gCQABpgAAAAEFAAAAC3NsaXBwYWdlWDE4BAAAAA1scEVtaXNzaW9uWDE4CQEAAAAFdG9YMTgAAAACBQAAAARscEVtBQAAAAZzY2FsZTgEAAAACnByVmlhQW1YMTgJAAE8AAAAAwUAAAAPaW5BbUFzc2V0QW10WDE4BQAAAAtjdXJQcmljZVgxOAUAAAAHc2NhbGUxOAQAAAAKYW1WaWFQclgxOAkAATwAAAADBQAAAA9pblByQXNzZXRBbXRYMTgFAAAAB3NjYWxlMTgFAAAAC2N1clByaWNlWDE4BAAAAAxleHBlY3RlZEFtdHMDCQABPwAAAAIFAAAACnByVmlhQW1YMTgFAAAAD2luUHJBc3NldEFtdFgxOAkABRQAAAACBQAAAAphbVZpYVByWDE4BQAAAA9pblByQXNzZXRBbXRYMTgJAAUUAAAAAgUAAAAPaW5BbUFzc2V0QW10WDE4BQAAAApwclZpYUFtWDE4BAAAABFleHBBbXRBc3NldEFtdFgxOAgFAAAADGV4cGVjdGVkQW10cwAAAAJfMQQAAAATZXhwUHJpY2VBc3NldEFtdFgxOAgFAAAADGV4cGVjdGVkQW10cwAAAAJfMgQAAAAIbHBBbXRYMTgJAAE8AAAAAwUAAAANbHBFbWlzc2lvblgxOAUAAAATZXhwUHJpY2VBc3NldEFtdFgxOAUAAAAMcHJCYWxhbmNlWDE4CQAFFwAAAAUJAQAAAAdmcm9tWDE4AAAAAgUAAAAIbHBBbXRYMTgFAAAABnNjYWxlOAkBAAAAB2Zyb21YMTgAAAACBQAAABFleHBBbXRBc3NldEFtdFgxOAUAAAAGYW10RGNtCQEAAAAHZnJvbVgxOAAAAAIFAAAAE2V4cFByaWNlQXNzZXRBbXRYMTgFAAAACHByaWNlRGNtBQAAAAtjdXJQcmljZVgxOAUAAAALc2xpcHBhZ2VYMTgEAAAACWNhbGNMcEFtdAgFAAAAA3JlcwAAAAJfMQQAAAAOY2FsY0FtQXNzZXRQbXQIBQAAAANyZXMAAAACXzIEAAAADmNhbGNQckFzc2V0UG10CAUAAAADcmVzAAAAAl8zBAAAAAhjdXJQcmljZQkBAAAAB2Zyb21YMTgAAAACCAUAAAADcmVzAAAAAl80BQAAAAZzY2FsZTgEAAAADHNsaXBwYWdlQ2FsYwkBAAAAB2Zyb21YMTgAAAACCAUAAAADcmVzAAAAAl81BQAAAAZzY2FsZTgDCQAAZwAAAAIAAAAAAAAAAAAFAAAACWNhbGNMcEFtdAkAAAIAAAABAgAAAAdMUCA8PSAwBAAAAAllbWl0THBBbXQDCQEAAAABIQAAAAEFAAAABmVtaXRMcAAAAAAAAAAAAAUAAAAJY2FsY0xwQW10BAAAAAZhbURpZmYJAABlAAAAAgUAAAAHaW5BbUFtdAUAAAAOY2FsY0FtQXNzZXRQbXQEAAAABnByRGlmZgkAAGUAAAACBQAAAAdpblByQW10BQAAAA5jYWxjUHJBc3NldFBtdAQAAAANJHQwMTU2NDIxNTk4OAMDBQAAAAppc09uZUFzc2V0CQAAAAAAAAIFAAAABXBtdElkBQAAAAdhbUlkU3RyBwkABRQAAAACBQAAAAZwbXRBbXQAAAAAAAAAAAADAwUAAAAKaXNPbmVBc3NldAkAAAAAAAACBQAAAAVwbXRJZAUAAAAHcHJJZFN0cgcJAAUUAAAAAgAAAAAAAAAAAAUAAAAGcG10QW10CQAFFAAAAAIFAAAADmNhbGNBbUFzc2V0UG10BQAAAA5jYWxjUHJBc3NldFBtdAQAAAAKd3JpdGVBbUFtdAgFAAAADSR0MDE1NjQyMTU5ODgAAAACXzEEAAAACndyaXRlUHJBbXQIBQAAAA0kdDAxNTY0MjE1OTg4AAAAAl8yBAAAAAtjb21tb25TdGF0ZQkABEwAAAACCQEAAAAMSW50ZWdlckVudHJ5AAAAAgkBAAAADGtleVByaWNlTGFzdAAAAAAFAAAACGN1clByaWNlCQAETAAAAAIJAQAAAAxJbnRlZ2VyRW50cnkAAAACCQEAAAAPa2V5UHJpY2VIaXN0b3J5AAAAAgUAAAAGaGVpZ2h0CAUAAAAJbGFzdEJsb2NrAAAACXRpbWVzdGFtcAUAAAAIY3VyUHJpY2UJAARMAAAAAgkBAAAAC1N0cmluZ0VudHJ5AAAAAgkBAAAAEmtleVB1dEFjdGlvbkJ5VXNlcgAAAAIFAAAAC3VzZXJBZGRyZXNzBQAAAAZ0eElkNTgJAQAAABFkYXRhUHV0QWN0aW9uSW5mbwAAAAoFAAAACndyaXRlQW1BbXQFAAAACndyaXRlUHJBbXQFAAAACWVtaXRMcEFtdAUAAAAIY3VyUHJpY2UFAAAACHNsaXBwYWdlBQAAAAxzbGlwcGFnZUNhbGMFAAAABmhlaWdodAgFAAAACWxhc3RCbG9jawAAAAl0aW1lc3RhbXAFAAAABmFtRGlmZgUAAAAGcHJEaWZmBQAAAANuaWwJAAUfAAAADQUAAAAJY2FsY0xwQW10BQAAAAllbWl0THBBbXQFAAAACGN1clByaWNlBQAAAAlhbUJhbGFuY2UFAAAACXByQmFsYW5jZQUAAAAEbHBFbQUAAAAEbHBJZAUAAAAKcG9vbFN0YXR1cwUAAAALY29tbW9uU3RhdGUFAAAABmFtRGlmZgUAAAAGcHJEaWZmBQAAAAZpbkFtSWQFAAAABmluUHJJZAEAAAAbdmFsaWRhdGVNYXRjaGVyT3JkZXJBbGxvd2VkAAAAAQAAAAVvcmRlcgQAAAADY2ZnCQEAAAANZ2V0UG9vbENvbmZpZwAAAAAEAAAAB2FtdEFzSWQJAAGRAAAAAgUAAAADY2ZnBQAAAAlpZHhBbUFzSWQEAAAABnByQXNJZAkAAZEAAAACBQAAAANjZmcFAAAACWlkeFByQXNJZAQAAAAKcG9vbFN0YXR1cwkBAAAADXBhcnNlSW50VmFsdWUAAAABCQABkQAAAAIFAAAAA2NmZwUAAAAJaWR4UG9vbFN0BAAAAAhhbXRBc0RjbQkBAAAADXBhcnNlSW50VmFsdWUAAAABCQABkQAAAAIFAAAAA2NmZwUAAAALaWR4QW10QXNEY20EAAAAB3ByQXNEY20JAQAAAA1wYXJzZUludFZhbHVlAAAAAQkAAZEAAAACBQAAAANjZmcFAAAADWlkeFByaWNlQXNEY20EAAAAD2FjY0FtdEFzQmFsYW5jZQkBAAAADWdldEFjY0JhbGFuY2UAAAABBQAAAAdhbXRBc0lkBAAAAA5hY2NQckFzQmFsYW5jZQkBAAAADWdldEFjY0JhbGFuY2UAAAABBQAAAAZwckFzSWQEAAAAC2N1clByaWNlWDE4AwkAAAAAAAACCAUAAAAFb3JkZXIAAAAJb3JkZXJUeXBlBQAAAANCdXkJAQAAABBwcml2YXRlQ2FsY1ByaWNlAAAABAUAAAAIYW10QXNEY20FAAAAB3ByQXNEY20JAABkAAAAAgUAAAAPYWNjQW10QXNCYWxhbmNlCAUAAAAFb3JkZXIAAAAGYW1vdW50BQAAAA5hY2NQckFzQmFsYW5jZQkBAAAAEHByaXZhdGVDYWxjUHJpY2UAAAAEBQAAAAhhbXRBc0RjbQUAAAAHcHJBc0RjbQkAAGUAAAACBQAAAA9hY2NBbXRBc0JhbGFuY2UIBQAAAAVvcmRlcgAAAAZhbW91bnQFAAAADmFjY1ByQXNCYWxhbmNlBAAAAAhjdXJQcmljZQkBAAAAB2Zyb21YMTgAAAACBQAAAAtjdXJQcmljZVgxOAUAAAAGc2NhbGU4AwMDCQEAAAAQaXNHbG9iYWxTaHV0ZG93bgAAAAAGCQAAAAAAAAIFAAAACnBvb2xTdGF0dXMFAAAADlBvb2xNYXRjaGVyRGlzBgkAAAAAAAACBQAAAApwb29sU3RhdHVzBQAAAAxQb29sU2h1dGRvd24JAAACAAAAAQIAAAANQWRtaW4gYmxvY2tlZAQAAAAKb3JBbXRBc3NldAgIBQAAAAVvcmRlcgAAAAlhc3NldFBhaXIAAAALYW1vdW50QXNzZXQEAAAACm9yQW10QXNTdHIDCQAAAAAAAAIFAAAACm9yQW10QXNzZXQFAAAABHVuaXQCAAAABVdBVkVTCQACWAAAAAEJAQAAAAV2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pgAAAAEJAAGRAAAAAgUAAAAGcHJpY2VzAAAAAAAAAAACBQAAAANuaWwAAAABaQEAAAAWZnJvbVgxOFdyYXBwZXJSRUFET05MWQAAAAIAAAADdmFsAAAAD3Jlc3VsdFNjYWxlTXVsdAkABRQAAAACBQAAAANuaWwJAQAAAAdmcm9tWDE4AAAAAgkAAacAAAABBQAAAAN2YWwFAAAAD3Jlc3VsdFNjYWxlTXVsdAAAAAFpAQAAABR0b1gxOFdyYXBwZXJSRUFET05MWQAAAAIAAAAHb3JpZ1ZhbAAAAA1vcmlnU2NhbGVNdWx0CQAFFAAAAAIFAAAAA25pbAkAAaYAAAABCQEAAAAFdG9YMTgAAAACBQAAAAdvcmlnVmFsBQAAAA1vcmlnU2NhbGVNdWx0AAAAAWkBAAAAHmNhbGNQcmljZUJpZ0ludFdyYXBwZXJSRUFET05MWQAAAAIAAAAIcHJBbXRYMTgAAAAIYW1BbXRYMTgJAAUUAAAAAgUAAAADbmlsCQABpgAAAAEJAQAAAA9jYWxjUHJpY2VCaWdJbnQAAAACCQABpwAAAAEFAAAACHByQW10WDE4CQABpwAAAAEFAAAACGFtQW10WDE4AAAAAWkBAAAAI2VzdGltYXRlUHV0T3BlcmF0aW9uV3JhcHBlclJFQURPTkxZAAAACQAAAAZ0eElkNTgAAAAIc2xpcHBhZ2UAAAAHaW5BbUFtdAAAAAZpbkFtSWQAAAAHaW5QckFtdAAAAAZpblBySWQAAAAHdXNyQWRkcgAAAAZpc0V2YWwAAAAGZW1pdExwCQAFFAAAAAIFAAAAA25pbAkBAAAAFGVzdGltYXRlUHV0T3BlcmF0aW9uAAAADAUAAAAGdHhJZDU4BQAAAAhzbGlwcGFnZQUAAAAHaW5BbUFtdAUAAAAGaW5BbUlkBQAAAAdpblByQW10BQAAAAZpblBySWQFAAAAB3VzckFkZHIFAAAABmlzRXZhbAUAAAAGZW1pdExwBwAAAAAAAAAAAAIAAAAAAAAAAWkBAAAAI2VzdGltYXRlR2V0T3BlcmF0aW9uV3JhcHBlclJFQURPTkxZAAAABAAAAAZ0eElkNTgAAAAHcG10QXNJZAAAAAhwbXRMcEFtdAAAAAd1c3JBZGRyBAAAAANyZXMJAQAAABRlc3RpbWF0ZUdldE9wZXJhdGlvbgAAAAQFAAAABnR4SWQ1OAUAAAAHcG10QXNJZAUAAAAIcG10THBBbXQJAQAAABFAZXh0ck5hdGl2ZSgxMDYyKQAAAAEFAAAAB3VzckFkZHIJAAUUAAAAAgUAAAADbmlsCQAFHAAAAAoIBQAAAANyZXMAAAACXzEIBQAAAANyZXMAAAACXzIIBQAAAANyZXMAAAACXzMIBQAAAANyZXMAAAACXzQIBQAAAANyZXMAAAACXzUIBQAAAANyZXMAAAACXzYIBQAAAANyZXMAAAACXzcJAAGmAAAAAQgFAAAAA3JlcwAAAAJfOAgFAAAAA3JlcwAAAAJfOQgFAAAAA3JlcwAAAANfMTAAAAABAAAAAnR4AQAAAAZ2ZXJpZnkAAAAABAAAAAckbWF0Y2gwBQAAAAJ0eAMJAAABAAAAAgUAAAAHJG1hdGNoMAIAAAAFT3JkZXIEAAAABW9yZGVyBQAAAAckbWF0Y2gwBAAAAAdtdGNoUHViCQEAAAATZ2V0TWF0Y2hlclB1Yk9yRmFpbAAAAAAEAAAAA29yVgkBAAAAG3ZhbGlkYXRlTWF0Y2hlck9yZGVyQWxsb3dlZAAAAAEFAAAABW9yZGVyBAAAAAVzbmRyVgkAAfQAAAADCAUAAAAFb3JkZXIAAAAJYm9keUJ5dGVzCQABkQAAAAIIBQAAAAVvcmRlcgAAAAZwcm9vZnMAAAAAAAAAAAAIBQAAAAVvcmRlcgAAAA9zZW5kZXJQdWJsaWNLZXkEAAAABW10Y2hWCQAB9AAAAAMIBQAAAAVvcmRlcgAAAAlib2R5Qnl0ZXMJAAGRAAAAAggFAAAABW9yZGVyAAAABnByb29mcwAAAAAAAAAAAQUAAAAHbXRjaFB1YgMDAwUAAAADb3JWBQAAAAVzbmRyVgcFAAAABW10Y2hWBwYJAQAAAA90aHJvd09yZGVyRXJyb3IAAAADBQAAAANvclYFAAAABXNuZHJWBQAAAAVtdGNoVgQAAAAFYWRtaW4JAQAAAAt2YWx1ZU9yRWxzZQAAAAIJAAQdAAAAAgUAAAAEdGhpcwkBAAAADGtleU1hblB1YktleQAAAAAFAAAABUVNUFRZAwkAAAAAAAACBQAAAAVhZG1pbgUAAAAFRU1QVFkJAAH0AAAAAwgFAAAAAnR4AAAACWJvZHlCeXRlcwkAAZEAAAACCAUAAAACdHgAAAAGcHJvb2ZzAAAAAAAAAAAACAUAAAACdHgAAAAPc2VuZGVyUHVibGljS2V5CQAB9AAAAAMIBQAAAAJ0eAAAAAlib2R5Qnl0ZXMJAAGRAAAAAggFAAAAAnR4AAAABnByb29mcwAAAAAAAAAAAAkAAlkAAAABBQAAAAVhZG1pbqgYABQ=", "chainId": 87, "height": 2919121, "applicationStatus": "succeeded", "spentComplexity": 0 } View: original | compacted Prev: E6gH5tHCsgXUAofVLUbYB34BL6fEDvGGQUkHHaDEKvjF Next: D8EbQFYLuXk36ceeHddo5JbDsoVBKLpMZWYxL77UjoT7 Diff:
OldNewDifferences
11 {-# STDLIB_VERSION 5 #-}
22 {-# SCRIPT_TYPE ACCOUNT #-}
33 {-# CONTENT_TYPE DAPP #-}
4-let a = 8
4+let a = 100000000
55
6-let b = 100000000
6+let b = toBigInt(100000000)
77
8-let c = toBigInt(100000000)
8+let c = toBigInt(1000000000000000000)
99
10-let d = toBigInt(1000000000000000000)
10+let d = toBigInt(0)
1111
12-let e = toBigInt(0)
12+let e = toBigInt(1)
1313
14-let f = "__"
14+let f = "100"
1515
16-let g = ""
16+let g = "1"
1717
18-let h = 1
18+let h = "__"
1919
20-let i = 2
20+let i = ""
2121
22-let j = 3
22+let j = 1
2323
24-let k = 4
24+let k = 2
2525
26-let l = 1
26+let l = 3
2727
28-let m = 2
28+let m = 4
2929
30-let n = 3
30+let n = 1
3131
32-let o = 4
32+let o = 2
3333
34-let p = 5
34+let p = 3
3535
36-let q = 6
36+let q = 4
3737
38-let r = 7
38+let r = 5
3939
40-let s = 8
40+let s = 6
4141
42-let t = 9
42+let t = 7
4343
44-let u = 10
44+let u = 8
4545
46-let v = 1
46+let v = 9
4747
48-let w = 2
48+let w = 1
4949
50-let x = 3
50+let x = 7
5151
52-let y = 1
52+let y = 10
5353
54-let z = 7
55-
56-func A (B,C) = fraction(toBigInt(B), d, toBigInt(C))
54+func z (A,B) = fraction(toBigInt(A), c, toBigInt(B))
5755
5856
59-func D (E,F) = toInt(fraction(E, toBigInt(F), d))
57+func C (D,E) = toInt(fraction(D, toBigInt(E), c))
6058
6159
62-func G (H,I,J) = fraction(H, I, J)
60+func F (G,H,I) = fraction(G, H, I)
6361
6462
65-func K (E) = if ((e > E))
66- then -(E)
67- else E
63+func J (D) = if ((d > D))
64+ then -(D)
65+ else D
6866
6967
70-func L () = "%s__factoryContract"
68+func K () = "%s__factoryContract"
7169
7270
73-func M () = "%s__managerPublicKey"
71+func L () = "%s__managerPublicKey"
7472
7573
76-func N () = "%s%s__price__last"
74+func M () = "%s%s__price__last"
7775
7876
79-func O (P,Q) = makeString(["%s%s%d%d__price__history", toString(P), toString(Q)], f)
77+func N (O,P) = makeString(["%s%s%d%d__price__history", toString(O), toString(P)], h)
8078
8179
82-func R (S,T) = ((("%s%s%s__P__" + S) + "__") + T)
80+func Q (R,S) = ((("%s%s%s__P__" + R) + "__") + S)
8381
8482
85-func U (S,T) = ((("%s%s%s__G__" + S) + "__") + T)
83+func T (R,S) = ((("%s%s%s__G__" + R) + "__") + S)
8684
8785
88-func V () = "%s__amountAsset"
86+func U () = "%s__amountAsset"
8987
9088
91-func W () = "%s__priceAsset"
89+func V () = "%s__priceAsset"
9290
9391
94-func X (P,Q) = makeString(["%s%s%d%d__K_history", toString(P), toString(Q)], f)
92+func W () = "%s__amp"
9593
9694
97-func Y () = "%s__factoryConfig"
95+func X () = "%s__factoryConfig"
9896
9997
100-func Z () = "%s%s__matcher__publicKey"
98+func Y () = "%s%s__matcher__publicKey"
10199
102100
103-func aa (ab) = (("%s%s%s__" + ab) + "__mappings__poolContract2LpAsset")
101+func Z (aa,ab) = (((("%d%d%s__" + aa) + "__") + ab) + "__config")
104102
105103
106-func ac (ad,ae) = (((("%d%d%s__" + ad) + "__") + ae) + "__config")
104+func ac (ad) = ("%s%s%s__mappings__baseAsset2internalId__" + ad)
107105
108106
109-func af (ag) = ("%s%s%s__mappings__baseAsset2internalId__" + ag)
107+func ae () = "%s__shutdown"
110108
111109
112-func ah () = "%s__shutdown"
110+func af (ag) = ("%s%s__poolWeight__" + ag)
113111
114112
115-func ai (aj) = ("%s%s__poolWeight__" + aj)
113+func ah (ai,aj,ak) = throw(((((("Failed: orderValid=" + toString(ai)) + " senderValid=") + toString(aj)) + " matcherValid=") + toString(ak)))
116114
117115
118-func ak (al,am,an) = throw(((((("order validation failed: orderValid=" + toString(al)) + " senderValid=") + toString(am)) + " matcherValid=") + toString(an)))
116+func al (D) = {
117+ let am = D
118+ if ($isInstanceOf(am, "String"))
119+ then {
120+ let an = am
121+ an
122+ }
123+ else throw("fail cast to String")
124+ }
119125
120126
121127 func ao (ap,aq) = valueOrErrorMessage(getString(ap, aq), makeString(["mandatory ", toString(ap), ".", aq, " is not defined"], ""))
124130 func ar (ap,aq) = valueOrErrorMessage(getInteger(ap, aq), makeString(["mandatory ", toString(ap), ".", aq, " is not defined"], ""))
125131
126132
127-let as = addressFromStringValue(ao(this, L()))
133+let as = addressFromStringValue(ao(this, K()))
128134
129-func at () = valueOrElse(getBoolean(as, ah()), false)
135+let at = ao(this, W())
136+
137+func au () = valueOrElse(getBoolean(as, ae()), false)
130138
131139
132-func au () = fromBase58String(ao(as, Z()))
140+func av () = fromBase58String(ao(as, Y()))
133141
134142
135-func av () = {
136- let aw = ao(this, V())
137- let ax = ao(this, W())
138- let ae = ar(as, af(ax))
139- let ad = ar(as, af(aw))
140- split(ao(as, ac(toString(ad), toString(ae))), f)
143+func aw () = {
144+ let ax = ao(this, U())
145+ let ay = ao(this, V())
146+ let az = ar(as, ac(ay))
147+ let aa = ar(as, ac(ax))
148+ split(ao(as, Z(toString(aa), toString(az))), h)
141149 }
142150
143151
144-func ay () = split(ao(as, Y()), f)
152+func aA () = split(ao(as, X()), h)
145153
146154
147-func az (aA,aB,aC,aD,aE,aF,aG,aH,aI,aJ) = makeString(["%d%d%d%d%d%d%d%d%d%d", toString(aA), toString(aB), toString(aC), toString(aD), toString(aE), toString(aF), toString(aG), toString(aH), toString(aI), toString(aJ)], f)
155+func aB (aC,aD,aE,aF,aG,aH,aI,aJ,aK,aL) = makeString(["%d%d%d%d%d%d%d%d%d%d", toString(aC), toString(aD), toString(aE), toString(aF), toString(aG), toString(aH), toString(aI), toString(aJ), toString(aK), toString(aL)], h)
148156
149157
150-func aK (aL,aM,aN,aD,aG,aH) = makeString(["%d%d%d%d%d%d", toString(aL), toString(aM), toString(aN), toString(aD), toString(aG), toString(aH)], f)
158+func aM (aN,aO,aP,aF,aI,aJ) = makeString(["%d%d%d%d%d%d", toString(aN), toString(aO), toString(aP), toString(aF), toString(aI), toString(aJ)], h)
151159
152160
153-func aO (aP) = if ((aP == "WAVES"))
161+func aQ (aR) = if ((aR == "WAVES"))
154162 then wavesBalance(this).available
155- else assetBalance(this, fromBase58String(aP))
163+ else assetBalance(this, fromBase58String(aR))
156164
157165
158-func aQ (aR,aS) = fraction(aR, d, aS)
166+func aS (aT,aU) = fraction(aT, c, aU)
159167
160168
161-func aT (aU,aV,aW,aX) = {
162- let aY = A(aW, aU)
163- let aZ = A(aX, aV)
164- aQ(aZ, aY)
169+func aV (aW,aX,aY) = {
170+ let aZ = fraction((aW - aX), b, aX)
171+ let ba = ((aY - J(aZ)) > d)
172+ if (!(ba))
173+ then throw(((("Too big slippage: " + toString(aZ)) + " vs ") + toString(aY)))
174+ else $Tuple2(ba, min([aW, aX]))
165175 }
166176
167177
168-func ba (aW,aX,bb) = {
169- let bc = av()
170- let bd = parseIntValue(bc[q])
171- let be = parseIntValue(bc[r])
172- let bf = aT(bd, be, aW, aX)
173- let aS = A(aW, bd)
174- let aR = A(aX, be)
175- let bg = A(bb, b)
176- let bh = aQ(aS, bg)
177- let bi = aQ(aR, bg)
178-[bf, bh, bi]
178+func bb (bc,bd,be,bf) = {
179+ let bg = z(be, bc)
180+ let bh = z(bf, bd)
181+ aS(bh, bg)
179182 }
180183
181184
182-func bj (aW,aX,bb) = {
183- let bk = ba(aW, aX, bb)
184-[D(bk[0], b), D(bk[1], b), D(bk[2], b)]
185+func bi (be,bf,bj) = {
186+ let bk = aw()
187+ let bl = parseIntValue(bk[s])
188+ let bm = parseIntValue(bk[t])
189+ let bn = bb(bl, bm, be, bf)
190+ let aU = z(be, bl)
191+ let aT = z(bf, bm)
192+ let bo = z(bj, a)
193+ let bp = aS(aU, bo)
194+ let bq = aS(aT, bo)
195+[bn, bp, bq]
185196 }
186197
187198
188-func bl (bm,bn,bo,S) = {
189- let bc = av()
190- let bp = bc[n]
191- let bq = bc[o]
192- let br = bc[p]
193- let aU = parseIntValue(bc[q])
194- let aV = parseIntValue(bc[r])
195- let bs = bc[m]
196- let bt = valueOrErrorMessage(assetInfo(fromBase58String(bp)), (("Asset " + bp) + " doesn't exist")).quantity
197- if ((bp != bn))
198- then throw("Invalid asset passed.")
199+func br (be,bf,bj) = {
200+ let bs = bi(be, bf, bj)
201+[C(bs[0], a), C(bs[1], a), C(bs[2], a)]
202+ }
203+
204+
205+func bt (bu,bv,bw,bx) = {
206+ let bk = aw()
207+ let by = bk[p]
208+ let bz = bk[q]
209+ let bA = bk[r]
210+ let bB = parseIntValue(bk[s])
211+ let bC = parseIntValue(bk[t])
212+ let bD = bk[o]
213+ let bE = valueOrErrorMessage(assetInfo(fromBase58String(by)), "Invalid LP id").quantity
214+ if ((by != bv))
215+ then throw("Invalid pmt asset")
199216 else {
200- let bu = aO(bq)
201- let bv = A(bu, aU)
202- let bw = aO(br)
203- let bx = A(bw, aV)
204- let by = aQ(bx, bv)
205- let bz = D(by, b)
206- let bA = A(bo, b)
207- let bB = A(bt, b)
208- let bC = fraction(bv, bA, bB)
209- let bD = fraction(bx, bA, bB)
210- let bE = D(bC, aU)
211- let bF = D(bD, aV)
212- let bG = if ((bm == ""))
217+ let bF = aQ(bz)
218+ let bG = z(bF, bB)
219+ let bH = aQ(bA)
220+ let bI = z(bH, bC)
221+ let bJ = aS(bI, bG)
222+ let bK = C(bJ, a)
223+ let bL = z(bw, a)
224+ let bM = z(bE, a)
225+ let bN = fraction(bG, bL, bM)
226+ let bO = fraction(bI, bL, bM)
227+ let bP = C(bN, bB)
228+ let bQ = C(bO, bC)
229+ let bR = if ((bu == ""))
213230 then nil
214- else [ScriptTransfer(S, bE, if ((bq == "WAVES"))
231+ else [ScriptTransfer(bx, bP, if ((bz == "WAVES"))
215232 then unit
216- else fromBase58String(bq)), ScriptTransfer(S, bF, if ((br == "WAVES"))
233+ else fromBase58String(bz)), ScriptTransfer(bx, bQ, if ((bA == "WAVES"))
217234 then unit
218- else fromBase58String(br)), StringEntry(U(toString(S), bm), aK(bE, bF, bo, bz, height, lastBlock.timestamp)), IntegerEntry(N(), bz), IntegerEntry(O(height, lastBlock.timestamp), bz)]
219- $Tuple10(bE, bF, bq, br, bu, bw, bt, by, bs, bG)
235+ else fromBase58String(bA)), StringEntry(T(toString(bx), bu), aM(bP, bQ, bw, bK, height, lastBlock.timestamp)), IntegerEntry(M(), bK), IntegerEntry(N(height, lastBlock.timestamp), bK)]
236+ $Tuple10(bP, bQ, bz, bA, bF, bH, bE, bJ, bD, bR)
220237 }
221238 }
222239
223240
224-func bH (bm,bI,bJ,bK,bL,bM,S,bN,bO) = {
225- let bc = av()
226- let bp = fromBase58String(bc[n])
227- let bP = bc[o]
228- let bQ = bc[p]
229- let bR = bc[s]
230- let bS = bc[t]
231- let bd = parseIntValue(bc[q])
232- let be = parseIntValue(bc[r])
233- let bs = bc[m]
234- let bt = valueOrErrorMessage(assetInfo(bp), (("Asset " + toBase58String(bp)) + " doesn't exist")).quantity
235- let bT = toBase58String(valueOrElse(bK, fromBase58String("WAVES")))
236- let bU = toBase58String(valueOrElse(bM, fromBase58String("WAVES")))
237- if (if ((bP != bT))
238- then true
239- else (bQ != bU))
240- then throw("Invalid amt or price asset passed.")
241+func bS (bu,aY,bT,bU,bV,bW,bx,bX,bY,bZ,ca,cb) = {
242+ let bk = aw()
243+ let by = fromBase58String(bk[p])
244+ let cc = bk[q]
245+ let cd = bk[r]
246+ let ce = bk[u]
247+ let cf = bk[v]
248+ let cg = parseIntValue(bk[s])
249+ let ch = parseIntValue(bk[t])
250+ let bD = bk[o]
251+ let ci = valueOrErrorMessage(assetInfo(by), "Wr lp as").quantity
252+ let bF = if (bX)
253+ then aQ(cc)
254+ else if (if (bZ)
255+ then (cb == cc)
256+ else false)
257+ then (aQ(cc) - ca)
258+ else if (bZ)
259+ then aQ(cc)
260+ else (aQ(cc) - bT)
261+ let bH = if (bX)
262+ then aQ(cd)
263+ else if (if (bZ)
264+ then (cb == cd)
265+ else false)
266+ then (aQ(cd) - ca)
267+ else if (bZ)
268+ then aQ(cd)
269+ else (aQ(cd) - bV)
270+ let cj = z(bT, cg)
271+ let ck = z(bV, ch)
272+ let cl = aS(ck, cj)
273+ let bG = z(bF, cg)
274+ let bI = z(bH, ch)
275+ let cm = if ((ci == 0))
276+ then {
277+ let bJ = d
278+ let cn = d
279+ let bo = pow((cj * ck), 0, toBigInt(5), 1, 0, DOWN)
280+ $Tuple5(C(bo, a), C(cj, cg), C(ck, ch), aS((bI + ck), (bG + cj)), cn)
281+ }
241282 else {
242- let bu = if (bN)
243- then aO(bP)
244- else (aO(bP) - bJ)
245- let bw = if (bN)
246- then aO(bQ)
247- else (aO(bQ) - bL)
248- let bV = A(bJ, bd)
249- let bW = A(bL, be)
250- let bX = aQ(bW, bV)
251- let bv = A(bu, bd)
252- let bx = A(bw, be)
253- let bY = if ((bt == 0))
254- then {
255- let by = e
256- let bZ = e
257- let bg = pow((bV * bW), 0, toBigInt(5), 1, 0, DOWN)
258- $Tuple5(D(bg, b), D(bV, bd), D(bW, be), aQ((bx + bW), (bv + bV)), bZ)
283+ let bJ = aS(bI, bG)
284+ let co = fraction(J((bJ - cl)), c, bJ)
285+ let cn = z(aY, a)
286+ if (if ((bJ != d))
287+ then (co > cn)
288+ else false)
289+ then throw(((("Price slippage " + toString(co)) + " > ") + toString(cn)))
290+ else {
291+ let bM = z(ci, a)
292+ let cp = fraction(cj, bJ, c)
293+ let cq = fraction(ck, c, bJ)
294+ let cr = if ((cp > ck))
295+ then $Tuple2(cq, ck)
296+ else $Tuple2(cj, cp)
297+ let cs = cr._1
298+ let ct = cr._2
299+ let bo = fraction(bM, ct, bI)
300+ $Tuple5(C(bo, a), C(cs, cg), C(ct, ch), bJ, cn)
259301 }
260- else {
261- let by = aQ(bx, bv)
262- let bZ = fraction(K((by - bX)), d, by)
263- let ca = A(bI, b)
264- if (if ((by != e))
265- then (bZ > ca)
266- else false)
267- then throw(((("Price slippage " + toString(bZ)) + " exceeded the passed limit of ") + toString(ca)))
268- else {
269- let bB = A(bt, b)
270- let cb = fraction(bV, by, d)
271- let cc = fraction(bW, d, by)
272- let cd = if ((cb > bW))
273- then $Tuple2(cc, bW)
274- else $Tuple2(bV, cb)
275- let ce = cd._1
276- let cf = cd._2
277- let bg = fraction(bB, cf, bx)
278- $Tuple5(D(bg, b), D(ce, bd), D(cf, be), by, bZ)
279- }
280- }
281- let cg = bY._1
282- let ch = bY._2
283- let ci = bY._3
284- let bz = D(bY._4, b)
285- let cj = D(bY._5, b)
286- if ((0 >= cg))
287- then throw("Invalid calculations. LP calculated is less than zero.")
288- else {
289- let ck = if (!(bO))
290- then 0
291- else cg
292- let cl = (bJ - ch)
293- let cm = (bL - ci)
294- let cn = [IntegerEntry(N(), bz), IntegerEntry(O(height, lastBlock.timestamp), bz), StringEntry(R(S, bm), az(ch, ci, ck, bz, bI, cj, height, lastBlock.timestamp, cl, cm))]
295- $Tuple13(cg, ck, bz, bu, bw, bt, bp, bs, cn, cl, cm, bK, bM)
296- }
302+ }
303+ let cu = cm._1
304+ let cv = cm._2
305+ let cw = cm._3
306+ let bK = C(cm._4, a)
307+ let cx = C(cm._5, a)
308+ if ((0 >= cu))
309+ then throw("LP <= 0")
310+ else {
311+ let cy = if (!(bY))
312+ then 0
313+ else cu
314+ let cz = (bT - cv)
315+ let cA = (bV - cw)
316+ let cB = if (if (bZ)
317+ then (cb == cc)
318+ else false)
319+ then $Tuple2(ca, 0)
320+ else if (if (bZ)
321+ then (cb == cd)
322+ else false)
323+ then $Tuple2(0, ca)
324+ else $Tuple2(cv, cw)
325+ let cC = cB._1
326+ let cD = cB._2
327+ let cE = [IntegerEntry(M(), bK), IntegerEntry(N(height, lastBlock.timestamp), bK), StringEntry(Q(bx, bu), aB(cC, cD, cy, bK, aY, cx, height, lastBlock.timestamp, cz, cA))]
328+ $Tuple13(cu, cy, bK, bF, bH, ci, by, bD, cE, cz, cA, bU, bW)
297329 }
298330 }
299331
300332
301-func co (cp) = {
302- let bc = av()
303- let cq = bc[o]
304- let cr = bc[p]
305- let bs = parseIntValue(bc[m])
306- let bd = parseIntValue(bc[q])
307- let be = parseIntValue(bc[r])
308- let cs = aO(cq)
309- let ct = aO(cr)
310- let by = if ((cp.orderType == Buy))
311- then aT(bd, be, (cs + cp.amount), ct)
312- else aT(bd, be, (cs - cp.amount), ct)
313- let bz = D(by, b)
314- if (if (if (at())
333+func cF (cG) = {
334+ let bk = aw()
335+ let cH = bk[q]
336+ let cI = bk[r]
337+ let bD = parseIntValue(bk[o])
338+ let bl = parseIntValue(bk[s])
339+ let bm = parseIntValue(bk[t])
340+ let cJ = aQ(cH)
341+ let cK = aQ(cI)
342+ let bJ = if ((cG.orderType == Buy))
343+ then bb(bl, bm, (cJ + cG.amount), cK)
344+ else bb(bl, bm, (cJ - cG.amount), cK)
345+ let bK = C(bJ, a)
346+ if (if (if (au())
315347 then true
316- else (bs == j))
348+ else (bD == l))
317349 then true
318- else (bs == k))
319- then throw("Exchange operations disabled")
350+ else (bD == m))
351+ then throw("Admin blocked")
320352 else {
321- let cu = cp.assetPair.amountAsset
322- let cv = if ((cu == unit))
353+ let cL = cG.assetPair.amountAsset
354+ let cM = if ((cL == unit))
323355 then "WAVES"
324- else toBase58String(value(cu))
325- let cw = cp.assetPair.priceAsset
326- let cx = if ((cw == unit))
356+ else toBase58String(value(cL))
357+ let cN = cG.assetPair.priceAsset
358+ let cO = if ((cN == unit))
327359 then "WAVES"
328- else toBase58String(value(cw))
329- if (if ((cv != cq))
360+ else toBase58String(value(cN))
361+ if (if ((cM != cH))
330362 then true
331- else (cx != cr))
332- then throw("Wrong order assets.")
363+ else (cO != cI))
364+ then throw("Wr assets")
333365 else {
334- let cy = cp.price
335- let cz = fraction(b, be, bd)
336- let cA = G(cy, b, cz)
337- let cB = if ((cp.orderType == Buy))
338- then (bz >= cA)
339- else (cA >= bz)
366+ let cP = cG.price
367+ let ch = fraction(a, bm, bl)
368+ let cQ = F(cP, a, ch)
369+ let cR = if ((cG.orderType == Buy))
370+ then (bK >= cQ)
371+ else (cQ >= bK)
340372 true
341373 }
342374 }
343375 }
344376
345377
346-func cC (cD) = if ((size(cD.payments) != 1))
347- then throw("exactly 1 payment is expected")
378+func cS (cT) = if ((size(cT.payments) != 1))
379+ then throw("1 pmnt exp")
348380 else {
349- let cE = value(cD.payments[0])
350- let bn = value(cE.assetId)
351- let cF = cE.amount
352- let bY = bl(toBase58String(cD.transactionId), toBase58String(bn), cF, cD.caller)
353- let bE = bY._1
354- let bF = bY._2
355- let bs = parseIntValue(bY._9)
356- let bG = bY._10
357- if (if (at())
381+ let cU = value(cT.payments[0])
382+ let bv = value(cU.assetId)
383+ let ca = cU.amount
384+ let cm = bt(toBase58String(cT.transactionId), toBase58String(bv), ca, cT.caller)
385+ let bP = cm._1
386+ let bQ = cm._2
387+ let bD = parseIntValue(cm._9)
388+ let bR = cm._10
389+ if (if (au())
358390 then true
359- else (bs == k))
360- then throw(("Get operation is blocked by admin. Status = " + toString(bs)))
361- else $Tuple5(bE, bF, cF, bn, bG)
391+ else (bD == m))
392+ then throw(("Admin blocked: " + toString(bD)))
393+ else $Tuple5(bP, bQ, ca, bv, bR)
362394 }
363395
364396
365-func cG (cD,bI,bO) = if ((size(cD.payments) != 2))
366- then throw("exactly 2 payments are expected")
367- else {
368- let cH = value(cD.payments[0])
369- let cI = value(cD.payments[1])
370- let cJ = bH(toBase58String(cD.transactionId), bI, cH.amount, cH.assetId, cI.amount, cI.assetId, toString(cD.caller), false, bO)
371- let bs = parseIntValue(cJ._8)
372- if (if (if (at())
373- then true
374- else (bs == i))
375- then true
376- else (bs == k))
377- then throw(("Put operation is blocked by admin. Status = " + toString(bs)))
378- else cJ
379- }
397+func cV (cW,S,cX,cY,aY,bY,bZ,ca,cb) = {
398+ let cZ = bS(S, aY, value(cX).amount, value(cX).assetId, value(cY).amount, value(cY).assetId, cW, false, bY, bZ, ca, cb)
399+ let da = parseIntValue(cZ._8)
400+ if (if (if (au())
401+ then true
402+ else (da == k))
403+ then true
404+ else (da == m))
405+ then throw(("Admin blocked: " + toString(da)))
406+ else cZ
407+ }
380408
381409
382-@Callable(cD)
383-func constructor (as,cK) = if ((cD.caller != this))
384- then throw("permissions denied")
385- else [StringEntry(L(), as), StringEntry(M(), cK)]
410+@Callable(cT)
411+func constructor (as,db) = if ((cT.caller != this))
412+ then throw("denied")
413+ else [StringEntry(K(), as), StringEntry(L(), db)]
386414
387415
388416
389-@Callable(cD)
390-func put (bI,cL) = {
391- let cM = ay()
392- let cN = valueOrErrorMessage(addressFromString(cM[y]), "Error. Incorrect staking address.")
393- let cO = valueOrErrorMessage(addressFromString(cM[z]), "Error. Incorrect slippage contract address.")
394- if ((0 > bI))
395- then throw("Invalid slippageTolerance passed")
396- else {
397- let cJ = cG(cD, bI, true)
398- let ck = cJ._2
399- let bp = cJ._7
400- let bG = cJ._9
401- let cl = cJ._10
402- let cm = cJ._11
403- let cP = cJ._12
404- let cQ = cJ._13
405- let cR = invoke(as, "emit", [ck], nil)
406- if ((cR == cR))
407- then {
408- let cS = if ((cl > 0))
409- then invoke(cO, "put", nil, [AttachedPayment(cP, cl)])
410- else nil
411- if ((cS == cS))
412- then {
413- let cT = if ((cm > 0))
414- then invoke(cO, "put", nil, [AttachedPayment(cQ, cm)])
415- else nil
416- if ((cT == cT))
417- then {
418- let cU = if (cL)
419- then {
420- let cV = invoke(cN, "stake", nil, [AttachedPayment(bp, ck)])
421- if ((cV == cV))
422- then nil
423- else throw("Strict value is not equal to itself.")
424- }
425- else [ScriptTransfer(cD.caller, ck, bp)]
426- (bG ++ cU)
427- }
428- else throw("Strict value is not equal to itself.")
429- }
430- else throw("Strict value is not equal to itself.")
431- }
432- else throw("Strict value is not equal to itself.")
433- }
434- }
435-
436-
437-
438-@Callable(cD)
439-func putForFree (cW) = if ((0 > cW))
440- then throw("Invalid value passed")
441- else {
442- let cJ = cG(cD, cW, false)
443- cJ._9
444- }
445-
446-
447-
448-@Callable(cD)
449-func get () = {
450- let bY = cC(cD)
451- let cX = bY._1
452- let bF = bY._2
453- let cF = bY._3
454- let bn = bY._4
455- let bG = bY._5
456- let cY = invoke(as, "burn", [cF], [AttachedPayment(bn, cF)])
457- if ((cY == cY))
458- then bG
459- else throw("Strict value is not equal to itself.")
460- }
461-
462-
463-
464-@Callable(cD)
465-func getNoLess (cZ,da) = {
466- let bY = cC(cD)
467- let bE = bY._1
468- let bF = bY._2
469- let cF = bY._3
470- let bn = bY._4
471- let bG = bY._5
472- if ((cZ > bE))
473- then throw(((("noLessThenAmtAsset failed: " + toString(bE)) + " < ") + toString(cZ)))
474- else if ((da > bF))
475- then throw(((("noLessThenPriceAsset failed: " + toString(bF)) + " < ") + toString(da)))
417+@Callable(cT)
418+func put (dc,dd) = {
419+ let de = aA()
420+ let df = valueOrErrorMessage(addressFromString(de[w]), "Wr st addr")
421+ let dg = valueOrErrorMessage(addressFromString(de[x]), "Wr sl addr")
422+ if ((0 > dc))
423+ then throw("Invalid slippage")
424+ else if ((size(cT.payments) != 2))
425+ then throw("2 pmnts expected")
476426 else {
477- let cY = invoke(as, "burn", [cF], [AttachedPayment(bn, cF)])
478- if ((cY == cY))
479- then bG
427+ let dh = cV(toString(cT.caller), toBase58String(cT.transactionId), AttachedPayment(value(cT.payments[0]).assetId, value(cT.payments[0]).amount), cT.payments[1], dc, true, false, 0, "")
428+ let cy = dh._2
429+ let di = dh._7
430+ let bR = dh._9
431+ let cz = dh._10
432+ let cA = dh._11
433+ let bz = dh._12
434+ let bA = dh._13
435+ let dj = invoke(as, "emit", [cy], nil)
436+ if ((dj == dj))
437+ then {
438+ let dk = if ((cz > 0))
439+ then invoke(dg, "put", nil, [AttachedPayment(bz, cz)])
440+ else nil
441+ if ((dk == dk))
442+ then {
443+ let dl = if ((cA > 0))
444+ then invoke(dg, "put", nil, [AttachedPayment(bA, cA)])
445+ else nil
446+ if ((dl == dl))
447+ then {
448+ let dm = if (dd)
449+ then {
450+ let dn = invoke(df, "stake", nil, [AttachedPayment(di, cy)])
451+ if ((dn == dn))
452+ then nil
453+ else throw("Strict value is not equal to itself.")
454+ }
455+ else [ScriptTransfer(cT.caller, cy, di)]
456+ (bR ++ dm)
457+ }
458+ else throw("Strict value is not equal to itself.")
459+ }
460+ else throw("Strict value is not equal to itself.")
461+ }
480462 else throw("Strict value is not equal to itself.")
481463 }
482464 }
483465
484466
485467
486-@Callable(cD)
487-func unstakeAndGet (db) = {
488- let dc = if ((size(cD.payments) != 0))
489- then throw("No payments are expected")
468+@Callable(cT)
469+func putOneTkn (do,dp,dq,aY,dd) = {
470+ let bk = aA()
471+ let df = valueOrErrorMessage(addressFromString(bk[w]), "Wr st addr")
472+ let dg = valueOrErrorMessage(addressFromString(bk[x]), "Wr sl addr")
473+ let dr = valueOrErrorMessage(addressFromString(bk[y]), "Wr gwx addr")
474+ let ds = aw()
475+ let bz = ds[q]
476+ let bA = ds[r]
477+ let bB = parseIntValue(ds[s])
478+ let bC = parseIntValue(ds[t])
479+ if (if (if (if ((0 >= aY))
480+ then true
481+ else (0 >= do))
482+ then true
483+ else (0 >= dp))
484+ then true
485+ else (0 >= dq))
486+ then throw("Wrong params")
487+ else if ((size(cT.payments) != 1))
488+ then throw("1 pmnt expected")
489+ else {
490+ let cU = value(cT.payments[0])
491+ let bv = toBase58String(value(cU.assetId))
492+ let ca = cU.amount
493+ let bF = aQ(bz)
494+ let bH = aQ(bA)
495+ let dt = if ((bv == bz))
496+ then $Tuple6((bF - ca), bH, (ca - do), dp, 0, 0)
497+ else if ((bv == bA))
498+ then $Tuple6(bF, (bH - ca), 0, 0, (ca - dp), do)
499+ else throw("wrong pmtAssetId")
500+ let du = dt._1
501+ let dv = dt._2
502+ let dw = dt._3
503+ let dx = dt._4
504+ let dy = dt._5
505+ let dz = dt._6
506+ let dA = invoke(dr, "calcD", [toString(du), toString(dv), at, f, g], nil)
507+ let dB = invoke(dr, "calcD", [toString(toBigInt(((du + dw) - dz))), toString(toBigInt(((dv + dy) - dx))), at, f, g], nil)
508+ let dC = aV(parseBigIntValue(al(dB)), parseBigIntValue(al(dA)), toBigInt(1000))
509+ if ((dC == dC))
510+ then {
511+ let dh = cV(toString(cT.caller), toBase58String(cT.transactionId), AttachedPayment(fromBase58String(bz), do), AttachedPayment(fromBase58String(bA), dp), 50000000000, true, true, ca, bv)
512+ let dD = dh._2
513+ let di = dh._7
514+ let bR = dh._9
515+ let cz = dh._10
516+ let cA = dh._11
517+ let dE = aV(toBigInt(dD), toBigInt(dq), toBigInt(aY))
518+ let cy = toInt(dE._2)
519+ let dj = invoke(as, "emit", [cy], nil)
520+ if ((dj == dj))
521+ then {
522+ let dk = if ((cz > 0))
523+ then invoke(dg, "put", nil, [AttachedPayment(fromBase58String(bz), cz)])
524+ else nil
525+ if ((dk == dk))
526+ then {
527+ let dl = if ((cA > 0))
528+ then invoke(dg, "put", nil, [AttachedPayment(fromBase58String(bA), cA)])
529+ else nil
530+ if ((dl == dl))
531+ then {
532+ let dm = if (dd)
533+ then {
534+ let dn = invoke(df, "stake", nil, [AttachedPayment(di, cy)])
535+ if ((dn == dn))
536+ then nil
537+ else throw("Strict value is not equal to itself.")
538+ }
539+ else [ScriptTransfer(cT.caller, cy, di)]
540+ (bR ++ dm)
541+ }
542+ else throw("Strict value is not equal to itself.")
543+ }
544+ else throw("Strict value is not equal to itself.")
545+ }
546+ else throw("Strict value is not equal to itself.")
547+ }
548+ else throw("Strict value is not equal to itself.")
549+ }
550+ }
551+
552+
553+
554+@Callable(cT)
555+func putForFree (dF) = if ((0 > dF))
556+ then throw("Invalid slippage")
557+ else if ((size(cT.payments) != 2))
558+ then throw("2 pmnts expected")
559+ else {
560+ let dh = cV(toString(cT.caller), toBase58String(cT.transactionId), AttachedPayment(value(cT.payments[0]).assetId, value(cT.payments[0]).amount), cT.payments[1], dF, false, false, 0, "")
561+ dh._9
562+ }
563+
564+
565+
566+@Callable(cT)
567+func get () = {
568+ let cm = cS(cT)
569+ let dG = cm._1
570+ let bQ = cm._2
571+ let ca = cm._3
572+ let bv = cm._4
573+ let bR = cm._5
574+ let dH = invoke(as, "burn", [ca], [AttachedPayment(bv, ca)])
575+ if ((dH == dH))
576+ then bR
577+ else throw("Strict value is not equal to itself.")
578+ }
579+
580+
581+
582+@Callable(cT)
583+func getOneTkn (dI,dJ,dK,dL,aY) = if ((size(cT.payments) != 1))
584+ then throw("1 pmnt expected")
585+ else {
586+ let bk = aw()
587+ let by = bk[p]
588+ let bz = bk[q]
589+ let bA = bk[r]
590+ let bB = parseIntValue(bk[s])
591+ let bC = parseIntValue(bk[t])
592+ let bD = bk[o]
593+ let dM = aA()
594+ let dr = valueOrErrorMessage(addressFromString(dM[y]), "Wr sl addr")
595+ let cU = value(cT.payments[0])
596+ let bx = cT.caller
597+ let bu = toBase58String(cT.transactionId)
598+ let bv = value(cU.assetId)
599+ let ca = cU.amount
600+ if (if (if (if ((0 > aY))
601+ then true
602+ else (0 > dI))
603+ then true
604+ else (0 > dJ))
605+ then true
606+ else (0 > dK))
607+ then throw("Wrong params")
608+ else if ((by != toBase58String(bv)))
609+ then throw("Invalid LP")
610+ else {
611+ let cZ = bt(toBase58String(cT.transactionId), toBase58String(bv), ca, cT.caller)
612+ let dN = cZ._1
613+ let dO = cZ._2
614+ let bF = aQ(bz)
615+ let bH = aQ(bA)
616+ let dP = if ((dL == bz))
617+ then $Tuple7((bF - dN), (bH - dO), (dK - dN), dJ, 0, 0, (dN + dI))
618+ else if ((dL == bA))
619+ then $Tuple7((bF - dN), (bH - dO), 0, 0, (dK - dO), dI, (dO + dJ))
620+ else throw("wrong outAssetId")
621+ let du = dP._1
622+ let dv = dP._2
623+ let dw = dP._3
624+ let dx = dP._4
625+ let dy = dP._5
626+ let dz = dP._6
627+ let dQ = dP._7
628+ let dA = invoke(dr, "calcD", [toString(du), toString(dv), at, f, g], nil)
629+ let dB = invoke(dr, "calcD", [toString(((du - dw) + dz)), toString(((dv + dx) - dy)), at, f, g], nil)
630+ let dC = aV(parseBigIntValue(al(dB)), parseBigIntValue(al(dA)), toBigInt(1000))
631+ if ((dC == dC))
632+ then {
633+ let dR = aV(toBigInt(dQ), toBigInt(dK), toBigInt(aY))
634+ if ((dR == dR))
635+ then {
636+ let dS = if ((dL == bz))
637+ then $Tuple2(toInt(dR._2), 0)
638+ else $Tuple2(0, toInt(dR._2))
639+ let dT = dS._1
640+ let dU = dS._2
641+ let bJ = aS(z(bH, bC), z(bF, bB))
642+ let bK = C(bJ, a)
643+ let bR = [ScriptTransfer(bx, (dT + dU), if ((dL == "WAVES"))
644+ then unit
645+ else fromBase58String(dL)), StringEntry(T(toString(bx), bu), aM(dT, dU, ca, bK, height, lastBlock.timestamp)), IntegerEntry(M(), bK), IntegerEntry(N(height, lastBlock.timestamp), bK)]
646+ if ((bR == bR))
647+ then {
648+ let dV = invoke(as, "burn", [ca], [AttachedPayment(bv, ca)])
649+ if ((dV == dV))
650+ then bR
651+ else throw("Strict value is not equal to itself.")
652+ }
653+ else throw("Strict value is not equal to itself.")
654+ }
655+ else throw("Strict value is not equal to itself.")
656+ }
657+ else throw("Strict value is not equal to itself.")
658+ }
659+ }
660+
661+
662+
663+@Callable(cT)
664+func getNoLess (dW,dX) = {
665+ let cm = cS(cT)
666+ let bP = cm._1
667+ let bQ = cm._2
668+ let ca = cm._3
669+ let bv = cm._4
670+ let bR = cm._5
671+ if ((dW > bP))
672+ then throw(((("Failed: " + toString(bP)) + " < ") + toString(dW)))
673+ else if ((dX > bQ))
674+ then throw(((("Failed: " + toString(bQ)) + " < ") + toString(dX)))
675+ else {
676+ let dH = invoke(as, "burn", [ca], [AttachedPayment(bv, ca)])
677+ if ((dH == dH))
678+ then bR
679+ else throw("Strict value is not equal to itself.")
680+ }
681+ }
682+
683+
684+
685+@Callable(cT)
686+func unstakeAndGet (dY) = {
687+ let dZ = if ((size(cT.payments) != 0))
688+ then throw("No pmnts expected")
490689 else true
491- if ((dc == dc))
690+ if ((dZ == dZ))
492691 then {
493- let bc = av()
494- let cM = ay()
495- let bp = fromBase58String(bc[n])
496- let cN = valueOrErrorMessage(addressFromString(cM[y]), "Error. Incorrect staking address.")
497- let dd = invoke(cN, "unstake", [toBase58String(bp), db], nil)
498- if ((dd == dd))
692+ let bk = aw()
693+ let ea = aA()
694+ let di = fromBase58String(bk[p])
695+ let eb = valueOrErrorMessage(addressFromString(ea[w]), "Wr st addr")
696+ let ec = invoke(eb, "unstake", [toBase58String(di), dY], nil)
697+ if ((ec == ec))
499698 then {
500- let bY = bl(toBase58String(cD.transactionId), toBase58String(bp), db, cD.caller)
501- let bs = parseIntValue(bY._9)
502- let bG = bY._10
503- let de = if (if (at())
699+ let cZ = bt(toBase58String(cT.transactionId), toBase58String(di), dY, cT.caller)
700+ let bD = parseIntValue(cZ._9)
701+ let bR = cZ._10
702+ let ed = if (if (au())
504703 then true
505- else (bs == k))
506- then throw(("Get operation is blocked by admin. Status = " + toString(bs)))
704+ else (bD == m))
705+ then throw(("Blocked: " + toString(bD)))
507706 else true
508- if ((de == de))
707+ if ((ed == ed))
509708 then {
510- let cY = invoke(as, "burn", [db], [AttachedPayment(bp, db)])
511- if ((cY == cY))
512- then bG
709+ let dH = invoke(as, "burn", [dY], [AttachedPayment(di, dY)])
710+ if ((dH == dH))
711+ then bR
513712 else throw("Strict value is not equal to itself.")
514713 }
515714 else throw("Strict value is not equal to itself.")
521720
522721
523722
524-@Callable(cD)
525-func activate (df,dg) = if ((toString(cD.caller) != toString(as)))
526- then throw("permissions denied")
527- else $Tuple2([StringEntry(V(), df), StringEntry(W(), dg)], "success")
723+@Callable(cT)
724+func activate (ee,ef) = if ((toString(cT.caller) != toString(as)))
725+ then throw("denied")
726+ else $Tuple2([StringEntry(U(), ee), StringEntry(V(), ef)], "success")
528727
529728
530729
531-@Callable(cD)
532-func getPoolConfigWrapperREADONLY () = $Tuple2(nil, av())
730+@Callable(cT)
731+func getPoolConfigWrapperREADONLY () = $Tuple2(nil, aw())
533732
534733
535734
536-@Callable(cD)
537-func getAccBalanceWrapperREADONLY (aP) = $Tuple2(nil, aO(aP))
735+@Callable(cT)
736+func getAccBalanceWrapperREADONLY (aR) = $Tuple2(nil, aQ(aR))
538737
539738
540739
541-@Callable(cD)
542-func calcPricesWrapperREADONLY (aW,aX,bb) = {
543- let bk = ba(aW, aX, bb)
544- $Tuple2(nil, [toString(bk[0]), toString(bk[1]), toString(bk[2])])
740+@Callable(cT)
741+func calcPricesWrapperREADONLY (be,bf,bj) = {
742+ let bs = bi(be, bf, bj)
743+ $Tuple2(nil, [toString(bs[0]), toString(bs[1]), toString(bs[2])])
545744 }
546745
547746
548747
549-@Callable(cD)
550-func toX18WrapperREADONLY (B,C) = $Tuple2(nil, toString(A(B, C)))
748+@Callable(cT)
749+func fromX18WrapperREADONLY (D,E) = $Tuple2(nil, C(parseBigIntValue(D), E))
551750
552751
553752
554-@Callable(cD)
555-func fromX18WrapperREADONLY (E,F) = $Tuple2(nil, D(parseBigIntValue(E), F))
753+@Callable(cT)
754+func toX18WrapperREADONLY (A,B) = $Tuple2(nil, toString(z(A, B)))
556755
557756
558757
559-@Callable(cD)
560-func calcPriceBigIntWrapperREADONLY (aR,aS) = $Tuple2(nil, toString(aQ(parseBigIntValue(aR), parseBigIntValue(aS))))
758+@Callable(cT)
759+func calcPriceBigIntWrapperREADONLY (aT,aU) = $Tuple2(nil, toString(aS(parseBigIntValue(aT), parseBigIntValue(aU))))
561760
562761
563762
564-@Callable(cD)
565-func estimatePutOperationWrapperREADONLY (bm,bI,bJ,bK,bL,bM,S,bN,bO) = $Tuple2(nil, bH(bm, bI, bJ, bK, bL, bM, S, bN, bO))
763+@Callable(cT)
764+func estimatePutOperationWrapperREADONLY (bu,aY,bT,bU,bV,bW,eg,bX,bY) = $Tuple2(nil, bS(bu, aY, bT, bU, bV, bW, eg, bX, bY, false, 0, ""))
566765
567766
568767
569-@Callable(cD)
570-func estimateGetOperationWrapperREADONLY (bm,bn,bo,S) = {
571- let bY = bl(bm, bn, bo, addressFromStringValue(S))
572- $Tuple2(nil, $Tuple10(bY._1, bY._2, bY._3, bY._4, bY._5, bY._6, bY._7, toString(bY._8), bY._9, bY._10))
768+@Callable(cT)
769+func estimateGetOperationWrapperREADONLY (bu,eh,bw,eg) = {
770+ let cm = bt(bu, eh, bw, addressFromStringValue(eg))
771+ $Tuple2(nil, $Tuple10(cm._1, cm._2, cm._3, cm._4, cm._5, cm._6, cm._7, toString(cm._8), cm._9, cm._10))
573772 }
574773
575774
576-
577-@Callable(cD)
578-func statsREADONLY () = {
579- let bc = av()
580- let bp = fromBase58String(bc[n])
581- let cq = bc[o]
582- let cr = bc[p]
583- let bR = bc[s]
584- let bS = bc[t]
585- let bd = parseIntValue(bc[q])
586- let be = parseIntValue(bc[r])
587- let dh = valueOrErrorMessage(assetInfo(bp), (("Asset " + toBase58String(bp)) + " doesn't exist")).quantity
588- let cs = aO(cq)
589- let ct = aO(cr)
590- let di = if ((dh == 0))
591- then [e, e, e]
592- else ba(cs, ct, dh)
593- let bz = 0
594- let dj = D(di[1], b)
595- let dk = D(di[2], b)
596- let dl = value(getInteger(as, ai(toString(this))))
597- $Tuple2(nil, makeString(["%d%d%d%d%d%d%d", toString(cs), toString(ct), toString(dh), toString(bz), toString(dj), toString(dk), toString(dl)], f))
598- }
599-
600-
601-
602-@Callable(cD)
603-func evaluatePutByAmountAssetREADONLY (bJ) = {
604- let bc = av()
605- let bp = fromBase58String(bc[n])
606- let bP = bc[o]
607- let bq = fromBase58String(bP)
608- let bQ = bc[p]
609- let br = fromBase58String(bQ)
610- let bd = parseIntValue(bc[q])
611- let be = parseIntValue(bc[r])
612- let bs = bc[m]
613- let dh = valueOrErrorMessage(assetInfo(bp), (("Asset " + toBase58String(bp)) + " doesn't exist")).quantity
614- let cs = aO(bP)
615- let ct = aO(bQ)
616- let aY = A(cs, bd)
617- let aZ = A(ct, be)
618- let by = if ((dh == 0))
619- then e
620- else aQ(aZ, aY)
621- let bV = A(bJ, bd)
622- let bW = fraction(bV, by, d)
623- let bL = D(bW, be)
624- let cJ = bH("", 500000, bJ, bq, bL, br, "", true, false)
625- let cg = cJ._1
626- let dm = cJ._3
627- let bu = cJ._4
628- let bw = cJ._5
629- let bt = cJ._6
630- $Tuple2(nil, makeString(["%d%d%d%d%d%d%d%d", toString(cg), toString(D(by, b)), toString(bu), toString(bw), toString(bt), bs, toString(bJ), toString(bL)], f))
631- }
632-
633-
634-
635-@Callable(cD)
636-func evaluatePutByPriceAssetREADONLY (bL) = {
637- let bc = av()
638- let bp = fromBase58String(bc[n])
639- let bP = bc[o]
640- let bq = fromBase58String(bP)
641- let bQ = bc[p]
642- let br = fromBase58String(bQ)
643- let bd = parseIntValue(bc[q])
644- let be = parseIntValue(bc[r])
645- let bs = bc[m]
646- let dh = valueOrErrorMessage(assetInfo(bp), (("Asset " + toBase58String(bp)) + " doesn't exist")).quantity
647- let dn = aO(bP)
648- let do = aO(bQ)
649- let dp = A(dn, bd)
650- let dq = A(do, be)
651- let by = if ((dh == 0))
652- then e
653- else aQ(dq, dp)
654- let bW = A(bL, be)
655- let bV = fraction(bW, d, by)
656- let bJ = D(bV, bd)
657- let cJ = bH("", 500000, bJ, bq, bL, br, "", true, false)
658- let cg = cJ._1
659- let dm = cJ._3
660- let bu = cJ._4
661- let bw = cJ._5
662- let bt = cJ._6
663- $Tuple2(nil, makeString(["%d%d%d%d%d%d%d%d", toString(cg), toString(D(by, b)), toString(bu), toString(bw), toString(bt), bs, toString(bJ), toString(bL)], f))
664- }
665-
666-
667-
668-@Callable(cD)
669-func evaluateGetREADONLY (dr,ds) = {
670- let bY = bl("", dr, ds, this)
671- let bE = bY._1
672- let bF = bY._2
673- let bu = bY._5
674- let bw = bY._6
675- let bt = bY._7
676- let bz = bY._8
677- let bs = parseIntValue(bY._9)
678- $Tuple2(nil, makeString(["%d%d%d%d%d%d%d", toString(bE), toString(bF), toString(bu), toString(bw), toString(bt), toString(bz), toString(bs)], f))
679- }
680-
681-
682-@Verifier(dt)
683-func du () = {
684- let dv = dt
685- if ($isInstanceOf(dv, "Order"))
775+@Verifier(ei)
776+func ej () = {
777+ let am = ei
778+ if ($isInstanceOf(am, "Order"))
686779 then {
687- let cp = dv
688- let dw = au()
689- let al = co(cp)
690- let am = sigVerify(cp.bodyBytes, cp.proofs[0], cp.senderPublicKey)
691- let an = sigVerify(cp.bodyBytes, cp.proofs[1], dw)
692- if (if (if (al)
693- then am
780+ let cG = am
781+ let ek = av()
782+ let ai = cF(cG)
783+ let el = sigVerify(cG.bodyBytes, cG.proofs[0], cG.senderPublicKey)
784+ let em = sigVerify(cG.bodyBytes, cG.proofs[1], ek)
785+ if (if (if (ai)
786+ then el
694787 else false)
695- then an
788+ then em
696789 else false)
697790 then true
698- else ak(al, am, an)
791+ else ah(ai, el, em)
699792 }
700793 else {
701- let dx = valueOrElse(getString(this, M()), g)
702- if ((dx == g))
703- then sigVerify(dt.bodyBytes, dt.proofs[0], dt.senderPublicKey)
704- else sigVerify(dt.bodyBytes, dt.proofs[0], fromBase58String(dx))
794+ let en = valueOrElse(getString(this, L()), i)
795+ if ((en == i))
796+ then sigVerify(ei.bodyBytes, ei.proofs[0], ei.senderPublicKey)
797+ else sigVerify(ei.bodyBytes, ei.proofs[0], fromBase58String(en))
705798 }
706799 }
707800
Full:
OldNewDifferences
11 {-# STDLIB_VERSION 5 #-}
22 {-# SCRIPT_TYPE ACCOUNT #-}
33 {-# CONTENT_TYPE DAPP #-}
4-let a = 8
4+let a = 100000000
55
6-let b = 100000000
6+let b = toBigInt(100000000)
77
8-let c = toBigInt(100000000)
8+let c = toBigInt(1000000000000000000)
99
10-let d = toBigInt(1000000000000000000)
10+let d = toBigInt(0)
1111
12-let e = toBigInt(0)
12+let e = toBigInt(1)
1313
14-let f = "__"
14+let f = "100"
1515
16-let g = ""
16+let g = "1"
1717
18-let h = 1
18+let h = "__"
1919
20-let i = 2
20+let i = ""
2121
22-let j = 3
22+let j = 1
2323
24-let k = 4
24+let k = 2
2525
26-let l = 1
26+let l = 3
2727
28-let m = 2
28+let m = 4
2929
30-let n = 3
30+let n = 1
3131
32-let o = 4
32+let o = 2
3333
34-let p = 5
34+let p = 3
3535
36-let q = 6
36+let q = 4
3737
38-let r = 7
38+let r = 5
3939
40-let s = 8
40+let s = 6
4141
42-let t = 9
42+let t = 7
4343
44-let u = 10
44+let u = 8
4545
46-let v = 1
46+let v = 9
4747
48-let w = 2
48+let w = 1
4949
50-let x = 3
50+let x = 7
5151
52-let y = 1
52+let y = 10
5353
54-let z = 7
55-
56-func A (B,C) = fraction(toBigInt(B), d, toBigInt(C))
54+func z (A,B) = fraction(toBigInt(A), c, toBigInt(B))
5755
5856
59-func D (E,F) = toInt(fraction(E, toBigInt(F), d))
57+func C (D,E) = toInt(fraction(D, toBigInt(E), c))
6058
6159
62-func G (H,I,J) = fraction(H, I, J)
60+func F (G,H,I) = fraction(G, H, I)
6361
6462
65-func K (E) = if ((e > E))
66- then -(E)
67- else E
63+func J (D) = if ((d > D))
64+ then -(D)
65+ else D
6866
6967
70-func L () = "%s__factoryContract"
68+func K () = "%s__factoryContract"
7169
7270
73-func M () = "%s__managerPublicKey"
71+func L () = "%s__managerPublicKey"
7472
7573
76-func N () = "%s%s__price__last"
74+func M () = "%s%s__price__last"
7775
7876
79-func O (P,Q) = makeString(["%s%s%d%d__price__history", toString(P), toString(Q)], f)
77+func N (O,P) = makeString(["%s%s%d%d__price__history", toString(O), toString(P)], h)
8078
8179
82-func R (S,T) = ((("%s%s%s__P__" + S) + "__") + T)
80+func Q (R,S) = ((("%s%s%s__P__" + R) + "__") + S)
8381
8482
85-func U (S,T) = ((("%s%s%s__G__" + S) + "__") + T)
83+func T (R,S) = ((("%s%s%s__G__" + R) + "__") + S)
8684
8785
88-func V () = "%s__amountAsset"
86+func U () = "%s__amountAsset"
8987
9088
91-func W () = "%s__priceAsset"
89+func V () = "%s__priceAsset"
9290
9391
94-func X (P,Q) = makeString(["%s%s%d%d__K_history", toString(P), toString(Q)], f)
92+func W () = "%s__amp"
9593
9694
97-func Y () = "%s__factoryConfig"
95+func X () = "%s__factoryConfig"
9896
9997
100-func Z () = "%s%s__matcher__publicKey"
98+func Y () = "%s%s__matcher__publicKey"
10199
102100
103-func aa (ab) = (("%s%s%s__" + ab) + "__mappings__poolContract2LpAsset")
101+func Z (aa,ab) = (((("%d%d%s__" + aa) + "__") + ab) + "__config")
104102
105103
106-func ac (ad,ae) = (((("%d%d%s__" + ad) + "__") + ae) + "__config")
104+func ac (ad) = ("%s%s%s__mappings__baseAsset2internalId__" + ad)
107105
108106
109-func af (ag) = ("%s%s%s__mappings__baseAsset2internalId__" + ag)
107+func ae () = "%s__shutdown"
110108
111109
112-func ah () = "%s__shutdown"
110+func af (ag) = ("%s%s__poolWeight__" + ag)
113111
114112
115-func ai (aj) = ("%s%s__poolWeight__" + aj)
113+func ah (ai,aj,ak) = throw(((((("Failed: orderValid=" + toString(ai)) + " senderValid=") + toString(aj)) + " matcherValid=") + toString(ak)))
116114
117115
118-func ak (al,am,an) = throw(((((("order validation failed: orderValid=" + toString(al)) + " senderValid=") + toString(am)) + " matcherValid=") + toString(an)))
116+func al (D) = {
117+ let am = D
118+ if ($isInstanceOf(am, "String"))
119+ then {
120+ let an = am
121+ an
122+ }
123+ else throw("fail cast to String")
124+ }
119125
120126
121127 func ao (ap,aq) = valueOrErrorMessage(getString(ap, aq), makeString(["mandatory ", toString(ap), ".", aq, " is not defined"], ""))
122128
123129
124130 func ar (ap,aq) = valueOrErrorMessage(getInteger(ap, aq), makeString(["mandatory ", toString(ap), ".", aq, " is not defined"], ""))
125131
126132
127-let as = addressFromStringValue(ao(this, L()))
133+let as = addressFromStringValue(ao(this, K()))
128134
129-func at () = valueOrElse(getBoolean(as, ah()), false)
135+let at = ao(this, W())
136+
137+func au () = valueOrElse(getBoolean(as, ae()), false)
130138
131139
132-func au () = fromBase58String(ao(as, Z()))
140+func av () = fromBase58String(ao(as, Y()))
133141
134142
135-func av () = {
136- let aw = ao(this, V())
137- let ax = ao(this, W())
138- let ae = ar(as, af(ax))
139- let ad = ar(as, af(aw))
140- split(ao(as, ac(toString(ad), toString(ae))), f)
143+func aw () = {
144+ let ax = ao(this, U())
145+ let ay = ao(this, V())
146+ let az = ar(as, ac(ay))
147+ let aa = ar(as, ac(ax))
148+ split(ao(as, Z(toString(aa), toString(az))), h)
141149 }
142150
143151
144-func ay () = split(ao(as, Y()), f)
152+func aA () = split(ao(as, X()), h)
145153
146154
147-func az (aA,aB,aC,aD,aE,aF,aG,aH,aI,aJ) = makeString(["%d%d%d%d%d%d%d%d%d%d", toString(aA), toString(aB), toString(aC), toString(aD), toString(aE), toString(aF), toString(aG), toString(aH), toString(aI), toString(aJ)], f)
155+func aB (aC,aD,aE,aF,aG,aH,aI,aJ,aK,aL) = makeString(["%d%d%d%d%d%d%d%d%d%d", toString(aC), toString(aD), toString(aE), toString(aF), toString(aG), toString(aH), toString(aI), toString(aJ), toString(aK), toString(aL)], h)
148156
149157
150-func aK (aL,aM,aN,aD,aG,aH) = makeString(["%d%d%d%d%d%d", toString(aL), toString(aM), toString(aN), toString(aD), toString(aG), toString(aH)], f)
158+func aM (aN,aO,aP,aF,aI,aJ) = makeString(["%d%d%d%d%d%d", toString(aN), toString(aO), toString(aP), toString(aF), toString(aI), toString(aJ)], h)
151159
152160
153-func aO (aP) = if ((aP == "WAVES"))
161+func aQ (aR) = if ((aR == "WAVES"))
154162 then wavesBalance(this).available
155- else assetBalance(this, fromBase58String(aP))
163+ else assetBalance(this, fromBase58String(aR))
156164
157165
158-func aQ (aR,aS) = fraction(aR, d, aS)
166+func aS (aT,aU) = fraction(aT, c, aU)
159167
160168
161-func aT (aU,aV,aW,aX) = {
162- let aY = A(aW, aU)
163- let aZ = A(aX, aV)
164- aQ(aZ, aY)
169+func aV (aW,aX,aY) = {
170+ let aZ = fraction((aW - aX), b, aX)
171+ let ba = ((aY - J(aZ)) > d)
172+ if (!(ba))
173+ then throw(((("Too big slippage: " + toString(aZ)) + " vs ") + toString(aY)))
174+ else $Tuple2(ba, min([aW, aX]))
165175 }
166176
167177
168-func ba (aW,aX,bb) = {
169- let bc = av()
170- let bd = parseIntValue(bc[q])
171- let be = parseIntValue(bc[r])
172- let bf = aT(bd, be, aW, aX)
173- let aS = A(aW, bd)
174- let aR = A(aX, be)
175- let bg = A(bb, b)
176- let bh = aQ(aS, bg)
177- let bi = aQ(aR, bg)
178-[bf, bh, bi]
178+func bb (bc,bd,be,bf) = {
179+ let bg = z(be, bc)
180+ let bh = z(bf, bd)
181+ aS(bh, bg)
179182 }
180183
181184
182-func bj (aW,aX,bb) = {
183- let bk = ba(aW, aX, bb)
184-[D(bk[0], b), D(bk[1], b), D(bk[2], b)]
185+func bi (be,bf,bj) = {
186+ let bk = aw()
187+ let bl = parseIntValue(bk[s])
188+ let bm = parseIntValue(bk[t])
189+ let bn = bb(bl, bm, be, bf)
190+ let aU = z(be, bl)
191+ let aT = z(bf, bm)
192+ let bo = z(bj, a)
193+ let bp = aS(aU, bo)
194+ let bq = aS(aT, bo)
195+[bn, bp, bq]
185196 }
186197
187198
188-func bl (bm,bn,bo,S) = {
189- let bc = av()
190- let bp = bc[n]
191- let bq = bc[o]
192- let br = bc[p]
193- let aU = parseIntValue(bc[q])
194- let aV = parseIntValue(bc[r])
195- let bs = bc[m]
196- let bt = valueOrErrorMessage(assetInfo(fromBase58String(bp)), (("Asset " + bp) + " doesn't exist")).quantity
197- if ((bp != bn))
198- then throw("Invalid asset passed.")
199+func br (be,bf,bj) = {
200+ let bs = bi(be, bf, bj)
201+[C(bs[0], a), C(bs[1], a), C(bs[2], a)]
202+ }
203+
204+
205+func bt (bu,bv,bw,bx) = {
206+ let bk = aw()
207+ let by = bk[p]
208+ let bz = bk[q]
209+ let bA = bk[r]
210+ let bB = parseIntValue(bk[s])
211+ let bC = parseIntValue(bk[t])
212+ let bD = bk[o]
213+ let bE = valueOrErrorMessage(assetInfo(fromBase58String(by)), "Invalid LP id").quantity
214+ if ((by != bv))
215+ then throw("Invalid pmt asset")
199216 else {
200- let bu = aO(bq)
201- let bv = A(bu, aU)
202- let bw = aO(br)
203- let bx = A(bw, aV)
204- let by = aQ(bx, bv)
205- let bz = D(by, b)
206- let bA = A(bo, b)
207- let bB = A(bt, b)
208- let bC = fraction(bv, bA, bB)
209- let bD = fraction(bx, bA, bB)
210- let bE = D(bC, aU)
211- let bF = D(bD, aV)
212- let bG = if ((bm == ""))
217+ let bF = aQ(bz)
218+ let bG = z(bF, bB)
219+ let bH = aQ(bA)
220+ let bI = z(bH, bC)
221+ let bJ = aS(bI, bG)
222+ let bK = C(bJ, a)
223+ let bL = z(bw, a)
224+ let bM = z(bE, a)
225+ let bN = fraction(bG, bL, bM)
226+ let bO = fraction(bI, bL, bM)
227+ let bP = C(bN, bB)
228+ let bQ = C(bO, bC)
229+ let bR = if ((bu == ""))
213230 then nil
214- else [ScriptTransfer(S, bE, if ((bq == "WAVES"))
231+ else [ScriptTransfer(bx, bP, if ((bz == "WAVES"))
215232 then unit
216- else fromBase58String(bq)), ScriptTransfer(S, bF, if ((br == "WAVES"))
233+ else fromBase58String(bz)), ScriptTransfer(bx, bQ, if ((bA == "WAVES"))
217234 then unit
218- else fromBase58String(br)), StringEntry(U(toString(S), bm), aK(bE, bF, bo, bz, height, lastBlock.timestamp)), IntegerEntry(N(), bz), IntegerEntry(O(height, lastBlock.timestamp), bz)]
219- $Tuple10(bE, bF, bq, br, bu, bw, bt, by, bs, bG)
235+ else fromBase58String(bA)), StringEntry(T(toString(bx), bu), aM(bP, bQ, bw, bK, height, lastBlock.timestamp)), IntegerEntry(M(), bK), IntegerEntry(N(height, lastBlock.timestamp), bK)]
236+ $Tuple10(bP, bQ, bz, bA, bF, bH, bE, bJ, bD, bR)
220237 }
221238 }
222239
223240
224-func bH (bm,bI,bJ,bK,bL,bM,S,bN,bO) = {
225- let bc = av()
226- let bp = fromBase58String(bc[n])
227- let bP = bc[o]
228- let bQ = bc[p]
229- let bR = bc[s]
230- let bS = bc[t]
231- let bd = parseIntValue(bc[q])
232- let be = parseIntValue(bc[r])
233- let bs = bc[m]
234- let bt = valueOrErrorMessage(assetInfo(bp), (("Asset " + toBase58String(bp)) + " doesn't exist")).quantity
235- let bT = toBase58String(valueOrElse(bK, fromBase58String("WAVES")))
236- let bU = toBase58String(valueOrElse(bM, fromBase58String("WAVES")))
237- if (if ((bP != bT))
238- then true
239- else (bQ != bU))
240- then throw("Invalid amt or price asset passed.")
241+func bS (bu,aY,bT,bU,bV,bW,bx,bX,bY,bZ,ca,cb) = {
242+ let bk = aw()
243+ let by = fromBase58String(bk[p])
244+ let cc = bk[q]
245+ let cd = bk[r]
246+ let ce = bk[u]
247+ let cf = bk[v]
248+ let cg = parseIntValue(bk[s])
249+ let ch = parseIntValue(bk[t])
250+ let bD = bk[o]
251+ let ci = valueOrErrorMessage(assetInfo(by), "Wr lp as").quantity
252+ let bF = if (bX)
253+ then aQ(cc)
254+ else if (if (bZ)
255+ then (cb == cc)
256+ else false)
257+ then (aQ(cc) - ca)
258+ else if (bZ)
259+ then aQ(cc)
260+ else (aQ(cc) - bT)
261+ let bH = if (bX)
262+ then aQ(cd)
263+ else if (if (bZ)
264+ then (cb == cd)
265+ else false)
266+ then (aQ(cd) - ca)
267+ else if (bZ)
268+ then aQ(cd)
269+ else (aQ(cd) - bV)
270+ let cj = z(bT, cg)
271+ let ck = z(bV, ch)
272+ let cl = aS(ck, cj)
273+ let bG = z(bF, cg)
274+ let bI = z(bH, ch)
275+ let cm = if ((ci == 0))
276+ then {
277+ let bJ = d
278+ let cn = d
279+ let bo = pow((cj * ck), 0, toBigInt(5), 1, 0, DOWN)
280+ $Tuple5(C(bo, a), C(cj, cg), C(ck, ch), aS((bI + ck), (bG + cj)), cn)
281+ }
241282 else {
242- let bu = if (bN)
243- then aO(bP)
244- else (aO(bP) - bJ)
245- let bw = if (bN)
246- then aO(bQ)
247- else (aO(bQ) - bL)
248- let bV = A(bJ, bd)
249- let bW = A(bL, be)
250- let bX = aQ(bW, bV)
251- let bv = A(bu, bd)
252- let bx = A(bw, be)
253- let bY = if ((bt == 0))
254- then {
255- let by = e
256- let bZ = e
257- let bg = pow((bV * bW), 0, toBigInt(5), 1, 0, DOWN)
258- $Tuple5(D(bg, b), D(bV, bd), D(bW, be), aQ((bx + bW), (bv + bV)), bZ)
283+ let bJ = aS(bI, bG)
284+ let co = fraction(J((bJ - cl)), c, bJ)
285+ let cn = z(aY, a)
286+ if (if ((bJ != d))
287+ then (co > cn)
288+ else false)
289+ then throw(((("Price slippage " + toString(co)) + " > ") + toString(cn)))
290+ else {
291+ let bM = z(ci, a)
292+ let cp = fraction(cj, bJ, c)
293+ let cq = fraction(ck, c, bJ)
294+ let cr = if ((cp > ck))
295+ then $Tuple2(cq, ck)
296+ else $Tuple2(cj, cp)
297+ let cs = cr._1
298+ let ct = cr._2
299+ let bo = fraction(bM, ct, bI)
300+ $Tuple5(C(bo, a), C(cs, cg), C(ct, ch), bJ, cn)
259301 }
260- else {
261- let by = aQ(bx, bv)
262- let bZ = fraction(K((by - bX)), d, by)
263- let ca = A(bI, b)
264- if (if ((by != e))
265- then (bZ > ca)
266- else false)
267- then throw(((("Price slippage " + toString(bZ)) + " exceeded the passed limit of ") + toString(ca)))
268- else {
269- let bB = A(bt, b)
270- let cb = fraction(bV, by, d)
271- let cc = fraction(bW, d, by)
272- let cd = if ((cb > bW))
273- then $Tuple2(cc, bW)
274- else $Tuple2(bV, cb)
275- let ce = cd._1
276- let cf = cd._2
277- let bg = fraction(bB, cf, bx)
278- $Tuple5(D(bg, b), D(ce, bd), D(cf, be), by, bZ)
279- }
280- }
281- let cg = bY._1
282- let ch = bY._2
283- let ci = bY._3
284- let bz = D(bY._4, b)
285- let cj = D(bY._5, b)
286- if ((0 >= cg))
287- then throw("Invalid calculations. LP calculated is less than zero.")
288- else {
289- let ck = if (!(bO))
290- then 0
291- else cg
292- let cl = (bJ - ch)
293- let cm = (bL - ci)
294- let cn = [IntegerEntry(N(), bz), IntegerEntry(O(height, lastBlock.timestamp), bz), StringEntry(R(S, bm), az(ch, ci, ck, bz, bI, cj, height, lastBlock.timestamp, cl, cm))]
295- $Tuple13(cg, ck, bz, bu, bw, bt, bp, bs, cn, cl, cm, bK, bM)
296- }
302+ }
303+ let cu = cm._1
304+ let cv = cm._2
305+ let cw = cm._3
306+ let bK = C(cm._4, a)
307+ let cx = C(cm._5, a)
308+ if ((0 >= cu))
309+ then throw("LP <= 0")
310+ else {
311+ let cy = if (!(bY))
312+ then 0
313+ else cu
314+ let cz = (bT - cv)
315+ let cA = (bV - cw)
316+ let cB = if (if (bZ)
317+ then (cb == cc)
318+ else false)
319+ then $Tuple2(ca, 0)
320+ else if (if (bZ)
321+ then (cb == cd)
322+ else false)
323+ then $Tuple2(0, ca)
324+ else $Tuple2(cv, cw)
325+ let cC = cB._1
326+ let cD = cB._2
327+ let cE = [IntegerEntry(M(), bK), IntegerEntry(N(height, lastBlock.timestamp), bK), StringEntry(Q(bx, bu), aB(cC, cD, cy, bK, aY, cx, height, lastBlock.timestamp, cz, cA))]
328+ $Tuple13(cu, cy, bK, bF, bH, ci, by, bD, cE, cz, cA, bU, bW)
297329 }
298330 }
299331
300332
301-func co (cp) = {
302- let bc = av()
303- let cq = bc[o]
304- let cr = bc[p]
305- let bs = parseIntValue(bc[m])
306- let bd = parseIntValue(bc[q])
307- let be = parseIntValue(bc[r])
308- let cs = aO(cq)
309- let ct = aO(cr)
310- let by = if ((cp.orderType == Buy))
311- then aT(bd, be, (cs + cp.amount), ct)
312- else aT(bd, be, (cs - cp.amount), ct)
313- let bz = D(by, b)
314- if (if (if (at())
333+func cF (cG) = {
334+ let bk = aw()
335+ let cH = bk[q]
336+ let cI = bk[r]
337+ let bD = parseIntValue(bk[o])
338+ let bl = parseIntValue(bk[s])
339+ let bm = parseIntValue(bk[t])
340+ let cJ = aQ(cH)
341+ let cK = aQ(cI)
342+ let bJ = if ((cG.orderType == Buy))
343+ then bb(bl, bm, (cJ + cG.amount), cK)
344+ else bb(bl, bm, (cJ - cG.amount), cK)
345+ let bK = C(bJ, a)
346+ if (if (if (au())
315347 then true
316- else (bs == j))
348+ else (bD == l))
317349 then true
318- else (bs == k))
319- then throw("Exchange operations disabled")
350+ else (bD == m))
351+ then throw("Admin blocked")
320352 else {
321- let cu = cp.assetPair.amountAsset
322- let cv = if ((cu == unit))
353+ let cL = cG.assetPair.amountAsset
354+ let cM = if ((cL == unit))
323355 then "WAVES"
324- else toBase58String(value(cu))
325- let cw = cp.assetPair.priceAsset
326- let cx = if ((cw == unit))
356+ else toBase58String(value(cL))
357+ let cN = cG.assetPair.priceAsset
358+ let cO = if ((cN == unit))
327359 then "WAVES"
328- else toBase58String(value(cw))
329- if (if ((cv != cq))
360+ else toBase58String(value(cN))
361+ if (if ((cM != cH))
330362 then true
331- else (cx != cr))
332- then throw("Wrong order assets.")
363+ else (cO != cI))
364+ then throw("Wr assets")
333365 else {
334- let cy = cp.price
335- let cz = fraction(b, be, bd)
336- let cA = G(cy, b, cz)
337- let cB = if ((cp.orderType == Buy))
338- then (bz >= cA)
339- else (cA >= bz)
366+ let cP = cG.price
367+ let ch = fraction(a, bm, bl)
368+ let cQ = F(cP, a, ch)
369+ let cR = if ((cG.orderType == Buy))
370+ then (bK >= cQ)
371+ else (cQ >= bK)
340372 true
341373 }
342374 }
343375 }
344376
345377
346-func cC (cD) = if ((size(cD.payments) != 1))
347- then throw("exactly 1 payment is expected")
378+func cS (cT) = if ((size(cT.payments) != 1))
379+ then throw("1 pmnt exp")
348380 else {
349- let cE = value(cD.payments[0])
350- let bn = value(cE.assetId)
351- let cF = cE.amount
352- let bY = bl(toBase58String(cD.transactionId), toBase58String(bn), cF, cD.caller)
353- let bE = bY._1
354- let bF = bY._2
355- let bs = parseIntValue(bY._9)
356- let bG = bY._10
357- if (if (at())
381+ let cU = value(cT.payments[0])
382+ let bv = value(cU.assetId)
383+ let ca = cU.amount
384+ let cm = bt(toBase58String(cT.transactionId), toBase58String(bv), ca, cT.caller)
385+ let bP = cm._1
386+ let bQ = cm._2
387+ let bD = parseIntValue(cm._9)
388+ let bR = cm._10
389+ if (if (au())
358390 then true
359- else (bs == k))
360- then throw(("Get operation is blocked by admin. Status = " + toString(bs)))
361- else $Tuple5(bE, bF, cF, bn, bG)
391+ else (bD == m))
392+ then throw(("Admin blocked: " + toString(bD)))
393+ else $Tuple5(bP, bQ, ca, bv, bR)
362394 }
363395
364396
365-func cG (cD,bI,bO) = if ((size(cD.payments) != 2))
366- then throw("exactly 2 payments are expected")
367- else {
368- let cH = value(cD.payments[0])
369- let cI = value(cD.payments[1])
370- let cJ = bH(toBase58String(cD.transactionId), bI, cH.amount, cH.assetId, cI.amount, cI.assetId, toString(cD.caller), false, bO)
371- let bs = parseIntValue(cJ._8)
372- if (if (if (at())
373- then true
374- else (bs == i))
375- then true
376- else (bs == k))
377- then throw(("Put operation is blocked by admin. Status = " + toString(bs)))
378- else cJ
379- }
397+func cV (cW,S,cX,cY,aY,bY,bZ,ca,cb) = {
398+ let cZ = bS(S, aY, value(cX).amount, value(cX).assetId, value(cY).amount, value(cY).assetId, cW, false, bY, bZ, ca, cb)
399+ let da = parseIntValue(cZ._8)
400+ if (if (if (au())
401+ then true
402+ else (da == k))
403+ then true
404+ else (da == m))
405+ then throw(("Admin blocked: " + toString(da)))
406+ else cZ
407+ }
380408
381409
382-@Callable(cD)
383-func constructor (as,cK) = if ((cD.caller != this))
384- then throw("permissions denied")
385- else [StringEntry(L(), as), StringEntry(M(), cK)]
410+@Callable(cT)
411+func constructor (as,db) = if ((cT.caller != this))
412+ then throw("denied")
413+ else [StringEntry(K(), as), StringEntry(L(), db)]
386414
387415
388416
389-@Callable(cD)
390-func put (bI,cL) = {
391- let cM = ay()
392- let cN = valueOrErrorMessage(addressFromString(cM[y]), "Error. Incorrect staking address.")
393- let cO = valueOrErrorMessage(addressFromString(cM[z]), "Error. Incorrect slippage contract address.")
394- if ((0 > bI))
395- then throw("Invalid slippageTolerance passed")
396- else {
397- let cJ = cG(cD, bI, true)
398- let ck = cJ._2
399- let bp = cJ._7
400- let bG = cJ._9
401- let cl = cJ._10
402- let cm = cJ._11
403- let cP = cJ._12
404- let cQ = cJ._13
405- let cR = invoke(as, "emit", [ck], nil)
406- if ((cR == cR))
407- then {
408- let cS = if ((cl > 0))
409- then invoke(cO, "put", nil, [AttachedPayment(cP, cl)])
410- else nil
411- if ((cS == cS))
412- then {
413- let cT = if ((cm > 0))
414- then invoke(cO, "put", nil, [AttachedPayment(cQ, cm)])
415- else nil
416- if ((cT == cT))
417- then {
418- let cU = if (cL)
419- then {
420- let cV = invoke(cN, "stake", nil, [AttachedPayment(bp, ck)])
421- if ((cV == cV))
422- then nil
423- else throw("Strict value is not equal to itself.")
424- }
425- else [ScriptTransfer(cD.caller, ck, bp)]
426- (bG ++ cU)
427- }
428- else throw("Strict value is not equal to itself.")
429- }
430- else throw("Strict value is not equal to itself.")
431- }
432- else throw("Strict value is not equal to itself.")
433- }
434- }
435-
436-
437-
438-@Callable(cD)
439-func putForFree (cW) = if ((0 > cW))
440- then throw("Invalid value passed")
441- else {
442- let cJ = cG(cD, cW, false)
443- cJ._9
444- }
445-
446-
447-
448-@Callable(cD)
449-func get () = {
450- let bY = cC(cD)
451- let cX = bY._1
452- let bF = bY._2
453- let cF = bY._3
454- let bn = bY._4
455- let bG = bY._5
456- let cY = invoke(as, "burn", [cF], [AttachedPayment(bn, cF)])
457- if ((cY == cY))
458- then bG
459- else throw("Strict value is not equal to itself.")
460- }
461-
462-
463-
464-@Callable(cD)
465-func getNoLess (cZ,da) = {
466- let bY = cC(cD)
467- let bE = bY._1
468- let bF = bY._2
469- let cF = bY._3
470- let bn = bY._4
471- let bG = bY._5
472- if ((cZ > bE))
473- then throw(((("noLessThenAmtAsset failed: " + toString(bE)) + " < ") + toString(cZ)))
474- else if ((da > bF))
475- then throw(((("noLessThenPriceAsset failed: " + toString(bF)) + " < ") + toString(da)))
417+@Callable(cT)
418+func put (dc,dd) = {
419+ let de = aA()
420+ let df = valueOrErrorMessage(addressFromString(de[w]), "Wr st addr")
421+ let dg = valueOrErrorMessage(addressFromString(de[x]), "Wr sl addr")
422+ if ((0 > dc))
423+ then throw("Invalid slippage")
424+ else if ((size(cT.payments) != 2))
425+ then throw("2 pmnts expected")
476426 else {
477- let cY = invoke(as, "burn", [cF], [AttachedPayment(bn, cF)])
478- if ((cY == cY))
479- then bG
427+ let dh = cV(toString(cT.caller), toBase58String(cT.transactionId), AttachedPayment(value(cT.payments[0]).assetId, value(cT.payments[0]).amount), cT.payments[1], dc, true, false, 0, "")
428+ let cy = dh._2
429+ let di = dh._7
430+ let bR = dh._9
431+ let cz = dh._10
432+ let cA = dh._11
433+ let bz = dh._12
434+ let bA = dh._13
435+ let dj = invoke(as, "emit", [cy], nil)
436+ if ((dj == dj))
437+ then {
438+ let dk = if ((cz > 0))
439+ then invoke(dg, "put", nil, [AttachedPayment(bz, cz)])
440+ else nil
441+ if ((dk == dk))
442+ then {
443+ let dl = if ((cA > 0))
444+ then invoke(dg, "put", nil, [AttachedPayment(bA, cA)])
445+ else nil
446+ if ((dl == dl))
447+ then {
448+ let dm = if (dd)
449+ then {
450+ let dn = invoke(df, "stake", nil, [AttachedPayment(di, cy)])
451+ if ((dn == dn))
452+ then nil
453+ else throw("Strict value is not equal to itself.")
454+ }
455+ else [ScriptTransfer(cT.caller, cy, di)]
456+ (bR ++ dm)
457+ }
458+ else throw("Strict value is not equal to itself.")
459+ }
460+ else throw("Strict value is not equal to itself.")
461+ }
480462 else throw("Strict value is not equal to itself.")
481463 }
482464 }
483465
484466
485467
486-@Callable(cD)
487-func unstakeAndGet (db) = {
488- let dc = if ((size(cD.payments) != 0))
489- then throw("No payments are expected")
468+@Callable(cT)
469+func putOneTkn (do,dp,dq,aY,dd) = {
470+ let bk = aA()
471+ let df = valueOrErrorMessage(addressFromString(bk[w]), "Wr st addr")
472+ let dg = valueOrErrorMessage(addressFromString(bk[x]), "Wr sl addr")
473+ let dr = valueOrErrorMessage(addressFromString(bk[y]), "Wr gwx addr")
474+ let ds = aw()
475+ let bz = ds[q]
476+ let bA = ds[r]
477+ let bB = parseIntValue(ds[s])
478+ let bC = parseIntValue(ds[t])
479+ if (if (if (if ((0 >= aY))
480+ then true
481+ else (0 >= do))
482+ then true
483+ else (0 >= dp))
484+ then true
485+ else (0 >= dq))
486+ then throw("Wrong params")
487+ else if ((size(cT.payments) != 1))
488+ then throw("1 pmnt expected")
489+ else {
490+ let cU = value(cT.payments[0])
491+ let bv = toBase58String(value(cU.assetId))
492+ let ca = cU.amount
493+ let bF = aQ(bz)
494+ let bH = aQ(bA)
495+ let dt = if ((bv == bz))
496+ then $Tuple6((bF - ca), bH, (ca - do), dp, 0, 0)
497+ else if ((bv == bA))
498+ then $Tuple6(bF, (bH - ca), 0, 0, (ca - dp), do)
499+ else throw("wrong pmtAssetId")
500+ let du = dt._1
501+ let dv = dt._2
502+ let dw = dt._3
503+ let dx = dt._4
504+ let dy = dt._5
505+ let dz = dt._6
506+ let dA = invoke(dr, "calcD", [toString(du), toString(dv), at, f, g], nil)
507+ let dB = invoke(dr, "calcD", [toString(toBigInt(((du + dw) - dz))), toString(toBigInt(((dv + dy) - dx))), at, f, g], nil)
508+ let dC = aV(parseBigIntValue(al(dB)), parseBigIntValue(al(dA)), toBigInt(1000))
509+ if ((dC == dC))
510+ then {
511+ let dh = cV(toString(cT.caller), toBase58String(cT.transactionId), AttachedPayment(fromBase58String(bz), do), AttachedPayment(fromBase58String(bA), dp), 50000000000, true, true, ca, bv)
512+ let dD = dh._2
513+ let di = dh._7
514+ let bR = dh._9
515+ let cz = dh._10
516+ let cA = dh._11
517+ let dE = aV(toBigInt(dD), toBigInt(dq), toBigInt(aY))
518+ let cy = toInt(dE._2)
519+ let dj = invoke(as, "emit", [cy], nil)
520+ if ((dj == dj))
521+ then {
522+ let dk = if ((cz > 0))
523+ then invoke(dg, "put", nil, [AttachedPayment(fromBase58String(bz), cz)])
524+ else nil
525+ if ((dk == dk))
526+ then {
527+ let dl = if ((cA > 0))
528+ then invoke(dg, "put", nil, [AttachedPayment(fromBase58String(bA), cA)])
529+ else nil
530+ if ((dl == dl))
531+ then {
532+ let dm = if (dd)
533+ then {
534+ let dn = invoke(df, "stake", nil, [AttachedPayment(di, cy)])
535+ if ((dn == dn))
536+ then nil
537+ else throw("Strict value is not equal to itself.")
538+ }
539+ else [ScriptTransfer(cT.caller, cy, di)]
540+ (bR ++ dm)
541+ }
542+ else throw("Strict value is not equal to itself.")
543+ }
544+ else throw("Strict value is not equal to itself.")
545+ }
546+ else throw("Strict value is not equal to itself.")
547+ }
548+ else throw("Strict value is not equal to itself.")
549+ }
550+ }
551+
552+
553+
554+@Callable(cT)
555+func putForFree (dF) = if ((0 > dF))
556+ then throw("Invalid slippage")
557+ else if ((size(cT.payments) != 2))
558+ then throw("2 pmnts expected")
559+ else {
560+ let dh = cV(toString(cT.caller), toBase58String(cT.transactionId), AttachedPayment(value(cT.payments[0]).assetId, value(cT.payments[0]).amount), cT.payments[1], dF, false, false, 0, "")
561+ dh._9
562+ }
563+
564+
565+
566+@Callable(cT)
567+func get () = {
568+ let cm = cS(cT)
569+ let dG = cm._1
570+ let bQ = cm._2
571+ let ca = cm._3
572+ let bv = cm._4
573+ let bR = cm._5
574+ let dH = invoke(as, "burn", [ca], [AttachedPayment(bv, ca)])
575+ if ((dH == dH))
576+ then bR
577+ else throw("Strict value is not equal to itself.")
578+ }
579+
580+
581+
582+@Callable(cT)
583+func getOneTkn (dI,dJ,dK,dL,aY) = if ((size(cT.payments) != 1))
584+ then throw("1 pmnt expected")
585+ else {
586+ let bk = aw()
587+ let by = bk[p]
588+ let bz = bk[q]
589+ let bA = bk[r]
590+ let bB = parseIntValue(bk[s])
591+ let bC = parseIntValue(bk[t])
592+ let bD = bk[o]
593+ let dM = aA()
594+ let dr = valueOrErrorMessage(addressFromString(dM[y]), "Wr sl addr")
595+ let cU = value(cT.payments[0])
596+ let bx = cT.caller
597+ let bu = toBase58String(cT.transactionId)
598+ let bv = value(cU.assetId)
599+ let ca = cU.amount
600+ if (if (if (if ((0 > aY))
601+ then true
602+ else (0 > dI))
603+ then true
604+ else (0 > dJ))
605+ then true
606+ else (0 > dK))
607+ then throw("Wrong params")
608+ else if ((by != toBase58String(bv)))
609+ then throw("Invalid LP")
610+ else {
611+ let cZ = bt(toBase58String(cT.transactionId), toBase58String(bv), ca, cT.caller)
612+ let dN = cZ._1
613+ let dO = cZ._2
614+ let bF = aQ(bz)
615+ let bH = aQ(bA)
616+ let dP = if ((dL == bz))
617+ then $Tuple7((bF - dN), (bH - dO), (dK - dN), dJ, 0, 0, (dN + dI))
618+ else if ((dL == bA))
619+ then $Tuple7((bF - dN), (bH - dO), 0, 0, (dK - dO), dI, (dO + dJ))
620+ else throw("wrong outAssetId")
621+ let du = dP._1
622+ let dv = dP._2
623+ let dw = dP._3
624+ let dx = dP._4
625+ let dy = dP._5
626+ let dz = dP._6
627+ let dQ = dP._7
628+ let dA = invoke(dr, "calcD", [toString(du), toString(dv), at, f, g], nil)
629+ let dB = invoke(dr, "calcD", [toString(((du - dw) + dz)), toString(((dv + dx) - dy)), at, f, g], nil)
630+ let dC = aV(parseBigIntValue(al(dB)), parseBigIntValue(al(dA)), toBigInt(1000))
631+ if ((dC == dC))
632+ then {
633+ let dR = aV(toBigInt(dQ), toBigInt(dK), toBigInt(aY))
634+ if ((dR == dR))
635+ then {
636+ let dS = if ((dL == bz))
637+ then $Tuple2(toInt(dR._2), 0)
638+ else $Tuple2(0, toInt(dR._2))
639+ let dT = dS._1
640+ let dU = dS._2
641+ let bJ = aS(z(bH, bC), z(bF, bB))
642+ let bK = C(bJ, a)
643+ let bR = [ScriptTransfer(bx, (dT + dU), if ((dL == "WAVES"))
644+ then unit
645+ else fromBase58String(dL)), StringEntry(T(toString(bx), bu), aM(dT, dU, ca, bK, height, lastBlock.timestamp)), IntegerEntry(M(), bK), IntegerEntry(N(height, lastBlock.timestamp), bK)]
646+ if ((bR == bR))
647+ then {
648+ let dV = invoke(as, "burn", [ca], [AttachedPayment(bv, ca)])
649+ if ((dV == dV))
650+ then bR
651+ else throw("Strict value is not equal to itself.")
652+ }
653+ else throw("Strict value is not equal to itself.")
654+ }
655+ else throw("Strict value is not equal to itself.")
656+ }
657+ else throw("Strict value is not equal to itself.")
658+ }
659+ }
660+
661+
662+
663+@Callable(cT)
664+func getNoLess (dW,dX) = {
665+ let cm = cS(cT)
666+ let bP = cm._1
667+ let bQ = cm._2
668+ let ca = cm._3
669+ let bv = cm._4
670+ let bR = cm._5
671+ if ((dW > bP))
672+ then throw(((("Failed: " + toString(bP)) + " < ") + toString(dW)))
673+ else if ((dX > bQ))
674+ then throw(((("Failed: " + toString(bQ)) + " < ") + toString(dX)))
675+ else {
676+ let dH = invoke(as, "burn", [ca], [AttachedPayment(bv, ca)])
677+ if ((dH == dH))
678+ then bR
679+ else throw("Strict value is not equal to itself.")
680+ }
681+ }
682+
683+
684+
685+@Callable(cT)
686+func unstakeAndGet (dY) = {
687+ let dZ = if ((size(cT.payments) != 0))
688+ then throw("No pmnts expected")
490689 else true
491- if ((dc == dc))
690+ if ((dZ == dZ))
492691 then {
493- let bc = av()
494- let cM = ay()
495- let bp = fromBase58String(bc[n])
496- let cN = valueOrErrorMessage(addressFromString(cM[y]), "Error. Incorrect staking address.")
497- let dd = invoke(cN, "unstake", [toBase58String(bp), db], nil)
498- if ((dd == dd))
692+ let bk = aw()
693+ let ea = aA()
694+ let di = fromBase58String(bk[p])
695+ let eb = valueOrErrorMessage(addressFromString(ea[w]), "Wr st addr")
696+ let ec = invoke(eb, "unstake", [toBase58String(di), dY], nil)
697+ if ((ec == ec))
499698 then {
500- let bY = bl(toBase58String(cD.transactionId), toBase58String(bp), db, cD.caller)
501- let bs = parseIntValue(bY._9)
502- let bG = bY._10
503- let de = if (if (at())
699+ let cZ = bt(toBase58String(cT.transactionId), toBase58String(di), dY, cT.caller)
700+ let bD = parseIntValue(cZ._9)
701+ let bR = cZ._10
702+ let ed = if (if (au())
504703 then true
505- else (bs == k))
506- then throw(("Get operation is blocked by admin. Status = " + toString(bs)))
704+ else (bD == m))
705+ then throw(("Blocked: " + toString(bD)))
507706 else true
508- if ((de == de))
707+ if ((ed == ed))
509708 then {
510- let cY = invoke(as, "burn", [db], [AttachedPayment(bp, db)])
511- if ((cY == cY))
512- then bG
709+ let dH = invoke(as, "burn", [dY], [AttachedPayment(di, dY)])
710+ if ((dH == dH))
711+ then bR
513712 else throw("Strict value is not equal to itself.")
514713 }
515714 else throw("Strict value is not equal to itself.")
516715 }
517716 else throw("Strict value is not equal to itself.")
518717 }
519718 else throw("Strict value is not equal to itself.")
520719 }
521720
522721
523722
524-@Callable(cD)
525-func activate (df,dg) = if ((toString(cD.caller) != toString(as)))
526- then throw("permissions denied")
527- else $Tuple2([StringEntry(V(), df), StringEntry(W(), dg)], "success")
723+@Callable(cT)
724+func activate (ee,ef) = if ((toString(cT.caller) != toString(as)))
725+ then throw("denied")
726+ else $Tuple2([StringEntry(U(), ee), StringEntry(V(), ef)], "success")
528727
529728
530729
531-@Callable(cD)
532-func getPoolConfigWrapperREADONLY () = $Tuple2(nil, av())
730+@Callable(cT)
731+func getPoolConfigWrapperREADONLY () = $Tuple2(nil, aw())
533732
534733
535734
536-@Callable(cD)
537-func getAccBalanceWrapperREADONLY (aP) = $Tuple2(nil, aO(aP))
735+@Callable(cT)
736+func getAccBalanceWrapperREADONLY (aR) = $Tuple2(nil, aQ(aR))
538737
539738
540739
541-@Callable(cD)
542-func calcPricesWrapperREADONLY (aW,aX,bb) = {
543- let bk = ba(aW, aX, bb)
544- $Tuple2(nil, [toString(bk[0]), toString(bk[1]), toString(bk[2])])
740+@Callable(cT)
741+func calcPricesWrapperREADONLY (be,bf,bj) = {
742+ let bs = bi(be, bf, bj)
743+ $Tuple2(nil, [toString(bs[0]), toString(bs[1]), toString(bs[2])])
545744 }
546745
547746
548747
549-@Callable(cD)
550-func toX18WrapperREADONLY (B,C) = $Tuple2(nil, toString(A(B, C)))
748+@Callable(cT)
749+func fromX18WrapperREADONLY (D,E) = $Tuple2(nil, C(parseBigIntValue(D), E))
551750
552751
553752
554-@Callable(cD)
555-func fromX18WrapperREADONLY (E,F) = $Tuple2(nil, D(parseBigIntValue(E), F))
753+@Callable(cT)
754+func toX18WrapperREADONLY (A,B) = $Tuple2(nil, toString(z(A, B)))
556755
557756
558757
559-@Callable(cD)
560-func calcPriceBigIntWrapperREADONLY (aR,aS) = $Tuple2(nil, toString(aQ(parseBigIntValue(aR), parseBigIntValue(aS))))
758+@Callable(cT)
759+func calcPriceBigIntWrapperREADONLY (aT,aU) = $Tuple2(nil, toString(aS(parseBigIntValue(aT), parseBigIntValue(aU))))
561760
562761
563762
564-@Callable(cD)
565-func estimatePutOperationWrapperREADONLY (bm,bI,bJ,bK,bL,bM,S,bN,bO) = $Tuple2(nil, bH(bm, bI, bJ, bK, bL, bM, S, bN, bO))
763+@Callable(cT)
764+func estimatePutOperationWrapperREADONLY (bu,aY,bT,bU,bV,bW,eg,bX,bY) = $Tuple2(nil, bS(bu, aY, bT, bU, bV, bW, eg, bX, bY, false, 0, ""))
566765
567766
568767
569-@Callable(cD)
570-func estimateGetOperationWrapperREADONLY (bm,bn,bo,S) = {
571- let bY = bl(bm, bn, bo, addressFromStringValue(S))
572- $Tuple2(nil, $Tuple10(bY._1, bY._2, bY._3, bY._4, bY._5, bY._6, bY._7, toString(bY._8), bY._9, bY._10))
768+@Callable(cT)
769+func estimateGetOperationWrapperREADONLY (bu,eh,bw,eg) = {
770+ let cm = bt(bu, eh, bw, addressFromStringValue(eg))
771+ $Tuple2(nil, $Tuple10(cm._1, cm._2, cm._3, cm._4, cm._5, cm._6, cm._7, toString(cm._8), cm._9, cm._10))
573772 }
574773
575774
576-
577-@Callable(cD)
578-func statsREADONLY () = {
579- let bc = av()
580- let bp = fromBase58String(bc[n])
581- let cq = bc[o]
582- let cr = bc[p]
583- let bR = bc[s]
584- let bS = bc[t]
585- let bd = parseIntValue(bc[q])
586- let be = parseIntValue(bc[r])
587- let dh = valueOrErrorMessage(assetInfo(bp), (("Asset " + toBase58String(bp)) + " doesn't exist")).quantity
588- let cs = aO(cq)
589- let ct = aO(cr)
590- let di = if ((dh == 0))
591- then [e, e, e]
592- else ba(cs, ct, dh)
593- let bz = 0
594- let dj = D(di[1], b)
595- let dk = D(di[2], b)
596- let dl = value(getInteger(as, ai(toString(this))))
597- $Tuple2(nil, makeString(["%d%d%d%d%d%d%d", toString(cs), toString(ct), toString(dh), toString(bz), toString(dj), toString(dk), toString(dl)], f))
598- }
599-
600-
601-
602-@Callable(cD)
603-func evaluatePutByAmountAssetREADONLY (bJ) = {
604- let bc = av()
605- let bp = fromBase58String(bc[n])
606- let bP = bc[o]
607- let bq = fromBase58String(bP)
608- let bQ = bc[p]
609- let br = fromBase58String(bQ)
610- let bd = parseIntValue(bc[q])
611- let be = parseIntValue(bc[r])
612- let bs = bc[m]
613- let dh = valueOrErrorMessage(assetInfo(bp), (("Asset " + toBase58String(bp)) + " doesn't exist")).quantity
614- let cs = aO(bP)
615- let ct = aO(bQ)
616- let aY = A(cs, bd)
617- let aZ = A(ct, be)
618- let by = if ((dh == 0))
619- then e
620- else aQ(aZ, aY)
621- let bV = A(bJ, bd)
622- let bW = fraction(bV, by, d)
623- let bL = D(bW, be)
624- let cJ = bH("", 500000, bJ, bq, bL, br, "", true, false)
625- let cg = cJ._1
626- let dm = cJ._3
627- let bu = cJ._4
628- let bw = cJ._5
629- let bt = cJ._6
630- $Tuple2(nil, makeString(["%d%d%d%d%d%d%d%d", toString(cg), toString(D(by, b)), toString(bu), toString(bw), toString(bt), bs, toString(bJ), toString(bL)], f))
631- }
632-
633-
634-
635-@Callable(cD)
636-func evaluatePutByPriceAssetREADONLY (bL) = {
637- let bc = av()
638- let bp = fromBase58String(bc[n])
639- let bP = bc[o]
640- let bq = fromBase58String(bP)
641- let bQ = bc[p]
642- let br = fromBase58String(bQ)
643- let bd = parseIntValue(bc[q])
644- let be = parseIntValue(bc[r])
645- let bs = bc[m]
646- let dh = valueOrErrorMessage(assetInfo(bp), (("Asset " + toBase58String(bp)) + " doesn't exist")).quantity
647- let dn = aO(bP)
648- let do = aO(bQ)
649- let dp = A(dn, bd)
650- let dq = A(do, be)
651- let by = if ((dh == 0))
652- then e
653- else aQ(dq, dp)
654- let bW = A(bL, be)
655- let bV = fraction(bW, d, by)
656- let bJ = D(bV, bd)
657- let cJ = bH("", 500000, bJ, bq, bL, br, "", true, false)
658- let cg = cJ._1
659- let dm = cJ._3
660- let bu = cJ._4
661- let bw = cJ._5
662- let bt = cJ._6
663- $Tuple2(nil, makeString(["%d%d%d%d%d%d%d%d", toString(cg), toString(D(by, b)), toString(bu), toString(bw), toString(bt), bs, toString(bJ), toString(bL)], f))
664- }
665-
666-
667-
668-@Callable(cD)
669-func evaluateGetREADONLY (dr,ds) = {
670- let bY = bl("", dr, ds, this)
671- let bE = bY._1
672- let bF = bY._2
673- let bu = bY._5
674- let bw = bY._6
675- let bt = bY._7
676- let bz = bY._8
677- let bs = parseIntValue(bY._9)
678- $Tuple2(nil, makeString(["%d%d%d%d%d%d%d", toString(bE), toString(bF), toString(bu), toString(bw), toString(bt), toString(bz), toString(bs)], f))
679- }
680-
681-
682-@Verifier(dt)
683-func du () = {
684- let dv = dt
685- if ($isInstanceOf(dv, "Order"))
775+@Verifier(ei)
776+func ej () = {
777+ let am = ei
778+ if ($isInstanceOf(am, "Order"))
686779 then {
687- let cp = dv
688- let dw = au()
689- let al = co(cp)
690- let am = sigVerify(cp.bodyBytes, cp.proofs[0], cp.senderPublicKey)
691- let an = sigVerify(cp.bodyBytes, cp.proofs[1], dw)
692- if (if (if (al)
693- then am
780+ let cG = am
781+ let ek = av()
782+ let ai = cF(cG)
783+ let el = sigVerify(cG.bodyBytes, cG.proofs[0], cG.senderPublicKey)
784+ let em = sigVerify(cG.bodyBytes, cG.proofs[1], ek)
785+ if (if (if (ai)
786+ then el
694787 else false)
695- then an
788+ then em
696789 else false)
697790 then true
698- else ak(al, am, an)
791+ else ah(ai, el, em)
699792 }
700793 else {
701- let dx = valueOrElse(getString(this, M()), g)
702- if ((dx == g))
703- then sigVerify(dt.bodyBytes, dt.proofs[0], dt.senderPublicKey)
704- else sigVerify(dt.bodyBytes, dt.proofs[0], fromBase58String(dx))
794+ let en = valueOrElse(getString(this, L()), i)
795+ if ((en == i))
796+ then sigVerify(ei.bodyBytes, ei.proofs[0], ei.senderPublicKey)
797+ else sigVerify(ei.bodyBytes, ei.proofs[0], fromBase58String(en))
705798 }
706799 }
707800

github/deemru/w8io/6500d08 
164.03 ms