tx · 4vJiN5TrgrcrPwt51MBg4HjqgjY4EoL7fvrk7oz3vsPA

3PPrfNMnk8z8QhZcqMyJk69mF65s2Rbz3B6:  -0.01500000 Waves

2022.09.19 15:41 [3301463] smart account 3PPrfNMnk8z8QhZcqMyJk69mF65s2Rbz3B6 > SELF 0.00000000 Waves

{ "type": 13, "id": "4vJiN5TrgrcrPwt51MBg4HjqgjY4EoL7fvrk7oz3vsPA", "fee": 1500000, "feeAssetId": null, "timestamp": 1663591346925, "version": 2, "chainId": 87, "sender": "3PPrfNMnk8z8QhZcqMyJk69mF65s2Rbz3B6", "senderPublicKey": "B4i4ZwaBsuGDVZsPTgZK6PeupVp2cfDy3PCug1QUxrZC", "proofs": [ "4LAd7uzit9KQc9bdHabSaWjvsqaXxS8bFJAZeHZsydFgBKU4biz9oqnhsYFzzAgLsTJjhvBYbNvoPmgetaY7jedX" ], "script": "base64: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AWkBAAAADGZ1bGZpbGxPcmRlcgAAAAEAAAAHb3JkZXJJZAQAAAAKb3JkZXJPd25lcgkBAAAAE3ZhbHVlT3JFcnJvck1lc3NhZ2UAAAACCQAEIgAAAAEJAAEsAAAAAgkAASwAAAACAgAAAAZvcmRlcl8FAAAAB29yZGVySWQCAAAABl9vd25lcgIAAAAXQ2Fubm90IGZpbmQgb3JkZXIgb3duZXIEAAAAC29yZGVyU3RhdHVzCQAEIgAAAAEJAAEsAAAAAgkAASwAAAACAgAAAAZvcmRlcl8FAAAAB29yZGVySWQCAAAAB19zdGF0dXMEAAAAC29yZGVyQXNzZXQwCQEAAAATdmFsdWVPckVycm9yTWVzc2FnZQAAAAIJAAQiAAAAAQkAASwAAAACCQABLAAAAAICAAAABm9yZGVyXwUAAAAHb3JkZXJJZAIAAAAHX3Rva2VuMAIAAAASQ2Fubm90IGZpbmQgdG9rZW4wBAAAAAxvcmRlckFtb3VudDAJAQAAABN2YWx1ZU9yRXJyb3JNZXNzYWdlAAAAAgkABB8AAAABCQABLAAAAAIJAAEsAAAAAgIAAAAGb3JkZXJfBQAAAAdvcmRlcklkAgAAAAhfYW1vdW50MAIAAAATQ2Fubm90IGZpbmQgYW1vdW50MAQAAAAPb3JkZXJGdWxmaWxsZWQwCQEAAAATdmFsdWVPckVycm9yTWVzc2FnZQAAAAIJAAQfAAAAAQkAASwAAAACCQABLAAAAAICAAAABm9yZGVyXwUAAAAHb3JkZXJJZAIAAAALX2Z1bGZpbGxlZDACAAAAFkNhbm5vdCBmaW5kIGZ1bGZpbGxlZDAEAAAAEG9yZGVyQW1vdW50MExlZnQJAABlAAAAAgUAAAAMb3JkZXJBbW91bnQwBQAAAA9vcmRlckZ1bGZpbGxlZDAEAAAAC29yZGVyQXNzZXQxCQEAAAATdmFsdWVPckVycm9yTWVzc2FnZQAAAAIJAAQiAAAAAQkAASwAAAACCQABLAAAAAICAAAABm9yZGVyXwUAAAAHb3JkZXJJZAIAAAAHX3Rva2VuMQIAAAASQ2Fubm90IGZpbmQgdG9rZW4xBAAAAAxvcmRlckFtb3VudDEJAQAAABN2YWx1ZU9yRXJyb3JNZXNzYWdlAAAAAgkABB8AAAABCQABLAAAAAIJAAEsAAAAAgIAAAAGb3JkZXJfBQAAAAdvcmRlcklkAgAAAAhfYW1vdW50MQIAAAATQ2Fubm90IGZpbmQgYW1vdW50MQQAAAAPb3JkZXJGdWxmaWxsZWQxCQEAAAATdmFsdWVPckVycm9yTWVzc2FnZQAAAAIJAAQfAAAAAQkAASwAAAACCQABLAAAAAICAAAABm9yZGVyXwUAAAAHb3JkZXJJZAIAAAALX2Z1bGZpbGxlZDECAAAAFkNhbm5vdCBmaW5kIGZ1bGZpbGxlZDEEAAAAEG9yZGVyQW1vdW50MUxlZnQJAABlAAAAAgUAAAAMb3JkZXJBbW91bnQxBQAAAA9vcmRlckZ1bGZpbGxlZDEDCQEAAAACIT0AAAACBQAAAAtvcmRlclN0YXR1cwIAAAAGYWN0aXZlCQAAAgAAAAECAAAAIE9yZGVyIGFscmVhZHkgY2xvc2VkIG9yIGNhbmNlbGVkAwkBAAAAAiE9AAAAAgkAAZAAAAABCAUAAAABaQAAAAhwYXltZW50cwAAAAAAAAAAAQkAAAIAAAABAgAAAB1Zb3Ugc2hvdWxkIHRvIHByb3ZpZGUgcGF5bWVudAQAAAANY2FsbGVyQWRkcmVzcwgFAAAAAWkAAAAGY2FsbGVyBAAAAAxvd25lckFkZHJlc3MJAQAAABFAZXh0ck5hdGl2ZSgxMDYyKQAAAAEFAAAACm9yZGVyT3duZXIEAAAADXBheW1lbnRBc3NldDEJAQAAAA5nZXRBc3NldFN0cmluZwAAAAEICQABkQAAAAIIBQAAAAFpAAAACHBheW1lbnRzAAAAAAAAAAAAAAAAB2Fzc2V0SWQEAAAADnBheW1lbnRBbW91bnQxCAkAAZEAAAACCAUAAAABaQAAAAhwYXltZW50cwAAAAAAAAAAAAAAAAZhbW91bnQDCQEAAAACIT0AAAACBQAAAA1wYXltZW50QXNzZXQxBQAAAAtvcmRlckFzc2V0MQkAAAIAAAABAgAAABNXcm9uZyBwYXltZW50IGFzc2V0AwkAAGcAAAACBQAAAA5wYXltZW50QW1vdW50MQUAAAAQb3JkZXJBbW91bnQxTGVmdAkABEwAAAACCQEAAAAOU2NyaXB0VHJhbnNmZXIAAAADBQAAAA1jYWxsZXJBZGRyZXNzCQAAZQAAAAIFAAAADnBheW1lbnRBbW91bnQxBQAAABBvcmRlckFtb3VudDFMZWZ0CQEAAAANZ2V0QXNzZXRCeXRlcwAAAAEFAAAAC29yZGVyQXNzZXQxCQAETAAAAAIJAQAAAA5TY3JpcHRUcmFuc2ZlcgAAAAMFAAAADWNhbGxlckFkZHJlc3MFAAAAEG9yZGVyQW1vdW50MExlZnQJAQAAAA1nZXRBc3NldEJ5dGVzAAAAAQUAAAALb3JkZXJBc3NldDAJAARMAAAAAgkBAAAADlNjcmlwdFRyYW5zZmVyAAAAAwUAAAAMb3duZXJBZGRyZXNzBQAAABBvcmRlckFtb3VudDFMZWZ0CQEAAAANZ2V0QXNzZXRCeXRlcwAAAAEFAAAADXBheW1lbnRBc3NldDEJAARMAAAAAgkBAAAADEludGVnZXJFbnRyeQAAAAIJAAEsAAAAAgkAASwAAAACAgAAAAZvcmRlcl8FAAAAB29yZGVySWQCAAAAC19mdWxmaWxsZWQwCQAAZAAAAAIFAAAAD29yZGVyRnVsZmlsbGVkMAUAAAAQb3JkZXJBbW91bnQwTGVmdAkABEwAAAACCQEAAAAMSW50ZWdlckVudHJ5AAAAAgkAASwAAAACCQABLAAAAAICAAAABm9yZGVyXwUAAAAHb3JkZXJJZAIAAAALX2Z1bGZpbGxlZDEJAABkAAAAAgUAAAAPb3JkZXJGdWxmaWxsZWQxBQAAABBvcmRlckFtb3VudDFMZWZ0CQAETAAAAAIJAQAAAAtTdHJpbmdFbnRyeQAAAAIJAAEsAAAAAgkAASwAAAACAgAAAAZvcmRlcl8FAAAAB29yZGVySWQCAAAAB19zdGF0dXMCAAAABmNsb3NlZAUAAAADbmlsBAAAAAdhbW91bnQwCQEAAAAIZnJhY3Rpb24AAAAEBQAAAAxvcmRlckFtb3VudDAFAAAADnBheW1lbnRBbW91bnQxBQAAAAxvcmRlckFtb3VudDEFAAAABUZMT09SCQAETAAAAAIJAQAAAA5TY3JpcHRUcmFuc2ZlcgAAAAMFAAAADG93bmVyQWRkcmVzcwUAAAAOcGF5bWVudEFtb3VudDEJAQAAAA1nZXRBc3NldEJ5dGVzAAAAAQUAAAANcGF5bWVudEFzc2V0MQkABEwAAAACCQEAAAAOU2NyaXB0VHJhbnNmZXIAAAADBQAAAA1jYWxsZXJBZGRyZXNzBQAAAAdhbW91bnQwCQEAAAANZ2V0QXNzZXRCeXRlcwAAAAEFAAAAC29yZGVyQXNzZXQwCQAETAAAAAIJAQAAAAxJbnRlZ2VyRW50cnkAAAACCQABLAAAAAIJAAEsAAAAAgIAAAAGb3JkZXJfBQAAAAdvcmRlcklkAgAAAAtfZnVsZmlsbGVkMAkAAGQAAAACBQAAAA9vcmRlckZ1bGZpbGxlZDAFAAAAB2Ftb3VudDAJAARMAAAAAgkBAAAADEludGVnZXJFbnRyeQAAAAIJAAEsAAAAAgkAASwAAAACAgAAAAZvcmRlcl8FAAAAB29yZGVySWQCAAAAC19mdWxmaWxsZWQxCQAAZAAAAAIFAAAAD29yZGVyRnVsZmlsbGVkMQUAAAAOcGF5bWVudEFtb3VudDEFAAAAA25pbAAAAAFpAQAAABtmdWxmaWxsT3JkZXJBbmRTd2FwQ2FzaGJhY2sAAAADAAAAB29yZGVySWQAAAAGcGFyYW1zAAAADG1pblRvUmVjZWl2ZQQAAAAKb3JkZXJPd25lcgkBAAAAE3ZhbHVlT3JFcnJvck1lc3NhZ2UAAAACCQAEIgAAAAEJAAEsAAAAAgkAASwAAAACAgAAAAZvcmRlcl8FAAAAB29yZGVySWQCAAAABl9vd25lcgIAAAAXQ2Fubm90IGZpbmQgb3JkZXIgb3duZXIEAAAAC29yZGVyU3RhdHVzCQAEIgAAAAEJAAEsAAAAAgkAASwAAAACAgAAAAZvcmRlcl8FAAAAB29yZGVySWQCAAAAB19zdGF0dXMEAAAAC29yZGVyQXNzZXQwCQEAAAATdmFsdWVPckVycm9yTWVzc2FnZQAAAAIJAAQiAAAAAQkAASwAAAACCQABLAAAAAICAAAABm9yZGVyXwUAAAAHb3JkZXJJZAIAAAAHX3Rva2VuMAIAAAASQ2Fubm90IGZpbmQgdG9rZW4wBAAAAAxvcmRlckFtb3VudDAJAQAAABN2YWx1ZU9yRXJyb3JNZXNzYWdlAAAAAgkABB8AAAABCQABLAAAAAIJAAEsAAAAAgIAAAAGb3JkZXJfBQAAAAdvcmRlcklkAgAAAAhfYW1vdW50MAIAAAATQ2Fubm90IGZpbmQgYW1vdW50MAQAAAAPb3JkZXJGdWxmaWxsZWQwCQEAAAATdmFsdWVPckVycm9yTWVzc2FnZQAAAAIJAAQfAAAAAQkAASwAAAACCQABLAAAAAICAAAABm9yZGVyXwUAAAAHb3JkZXJJZAIAAAALX2Z1bGZpbGxlZDACAAAAFkNhbm5vdCBmaW5kIGZ1bGZpbGxlZDAEAAAAEG9yZGVyQW1vdW50MExlZnQJAABlAAAAAgUAAAAMb3JkZXJBbW91bnQwBQAAAA9vcmRlckZ1bGZpbGxlZDAEAAAAC29yZGVyQXNzZXQxCQEAAAATdmFsdWVPckVycm9yTWVzc2FnZQAAAAIJAAQiAAAAAQkAASwAAAACCQABLAAAAAICAAAABm9yZGVyXwUAAAAHb3JkZXJJZAIAAAAHX3Rva2VuMQIAAAASQ2Fubm90IGZpbmQgdG9rZW4xBAAAAAxvcmRlckFtb3VudDEJAQAAABN2YWx1ZU9yRXJyb3JNZXNzYWdlAAAAAgkABB8AAAABCQABLAAAAAIJAAEsAAAAAgIAAAAGb3JkZXJfBQAAAAdvcmRlcklkAgAAAAhfYW1vdW50MQIAAAATQ2Fubm90IGZpbmQgYW1vdW50MQQAAAAPb3JkZXJGdWxmaWxsZWQxCQEAAAATdmFsdWVPckVycm9yTWVzc2FnZQAAAAIJAAQfAAAAAQkAASwAAAACCQABLAAAAAICAAAABm9yZGVyXwUAAAAHb3JkZXJJZAIAAAALX2Z1bGZpbGxlZDECAAAAFkNhbm5vdCBmaW5kIGZ1bGZpbGxlZDEEAAAAEG9yZGVyQW1vdW50MUxlZnQJAABlAAAAAgUAAAAMb3JkZXJBbW91bnQxBQAAAA9vcmRlckZ1bGZpbGxlZDEDCQEAAAACIT0AAAACBQAAAAtvcmRlclN0YXR1cwIAAAAGYWN0aXZlCQAAAgAAAAECAAAAIE9yZGVyIGFscmVhZHkgY2xvc2VkIG9yIGNhbmNlbGVkAwkBAAAAAiE9AAAAAgkAAZAAAAABCAUAAAABaQAAAAhwYXltZW50cwAAAAAAAAAAAQkAAAIAAAABAgAAAB1Zb3Ugc2hvdWxkIHRvIHByb3ZpZGUgcGF5bWVudAQAAAANY2FsbGVyQWRkcmVzcwgFAAAAAWkAAAAGY2FsbGVyBAAAAAxvd25lckFkZHJlc3MJAQAAABFAZXh0ck5hdGl2ZSgxMDYyKQAAAAEFAAAACm9yZGVyT3duZXIEAAAADXBheW1lbnRBc3NldDEJAQAAAA5nZXRBc3NldFN0cmluZwAAAAEICQABkQAAAAIIBQAAAAFpAAAACHBheW1lbnRzAAAAAAAAAAAAAAAAB2Fzc2V0SWQEAAAADnBheW1lbnRBbW91bnQxCAkAAZEAAAACCAUAAAABaQAAAAhwYXltZW50cwAAAAAAAAAAAAAAAAZhbW91bnQDCQEAAAACIT0AAAACBQAAAA1wYXltZW50QXNzZXQxBQAAAAtvcmRlckFzc2V0MQkAAAIAAAABAgAAABNXcm9uZyBwYXltZW50IGFzc2V0AwkAAGYAAAACBQAAABBvcmRlckFtb3VudDFMZWZ0BQAAAA5wYXltZW50QW1vdW50MQkAAAIAAAABAgAAAEpXaGVuIHlvdSB1c2UgdGhpcyBmdW5jIHBhcnRpYWx5IGZ1bGxmaWxsIGRpc2FibGVkLCBwbGVhc2UgdXNlIGZ1bGZpbGxPcmRlcgQAAAARYWdncmVnYXRvckFkZHJlc3MJAQAAAAdBZGRyZXNzAAAAAQkAAlkAAAABBQAAAAphZ2dyZWdhdG9yBAAAAA5jYXNoYmFja0Ftb3VudAkAAGUAAAACBQAAAA5wYXltZW50QW1vdW50MQUAAAAQb3JkZXJBbW91bnQxTGVmdAQAAAANYmFsYW5jZUJlZm9yZQkBAAAADmdldERhcHBCYWxhbmNlAAAAAQkBAAAADWdldEFzc2V0Qnl0ZXMAAAABBQAAAAtvcmRlckFzc2V0MAMJAAAAAAAAAgUAAAANYmFsYW5jZUJlZm9yZQUAAAANYmFsYW5jZUJlZm9yZQQAAAAGc3dhcFR4CQAD/AAAAAQFAAAAEWFnZ3JlZ2F0b3JBZGRyZXNzAgAAAARzd2FwCQAETAAAAAIFAAAABnBhcmFtcwkABEwAAAACBQAAAAxtaW5Ub1JlY2VpdmUFAAAAA25pbAkABEwAAAACCQEAAAAPQXR0YWNoZWRQYXltZW50AAAAAgkBAAAADWdldEFzc2V0Qnl0ZXMAAAABBQAAAAtvcmRlckFzc2V0MQUAAAAOY2FzaGJhY2tBbW91bnQFAAAAA25pbAMJAAAAAAAAAgUAAAAGc3dhcFR4BQAAAAZzd2FwVHgEAAAADGJhbGFuY2VBZnRlcgkBAAAADmdldERhcHBCYWxhbmNlAAAAAQkBAAAADWdldEFzc2V0Qnl0ZXMAAAABBQAAAAtvcmRlckFzc2V0MAMJAAAAAAAAAgUAAAAMYmFsYW5jZUFmdGVyBQAAAAxiYWxhbmNlQWZ0ZXIEAAAACGNhc2hiYWNrCQAAZQAAAAIFAAAADGJhbGFuY2VBZnRlcgUAAAANYmFsYW5jZUJlZm9yZQMJAAAAAAAAAgUAAAAIY2FzaGJhY2sFAAAACGNhc2hiYWNrCQAETAAAAAIJAQAAAA5TY3JpcHRUcmFuc2ZlcgAAAAMFAAAADWNhbGxlckFkZHJlc3MFAAAAEG9yZGVyQW1vdW50MExlZnQJAQAAAA1nZXRBc3NldEJ5dGVzAAAAAQUAAAALb3JkZXJBc3NldDAJAARMAAAAAgkBAAAADlNjcmlwdFRyYW5zZmVyAAAAAwUAAAANY2FsbGVyQWRkcmVzcwUAAAAIY2FzaGJhY2sJAQAAAA1nZXRBc3NldEJ5dGVzAAAAAQUAAAALb3JkZXJBc3NldDAJAARMAAAAAgkBAAAADlNjcmlwdFRyYW5zZmVyAAAAAwUAAAAMb3duZXJBZGRyZXNzBQAAABBvcmRlckFtb3VudDFMZWZ0CQEAAAANZ2V0QXNzZXRCeXRlcwAAAAEFAAAADXBheW1lbnRBc3NldDEJAARMAAAAAgkBAAAADEludGVnZXJFbnRyeQAAAAIJAAEsAAAAAgkAASwAAAACAgAAAAZvcmRlcl8FAAAAB29yZGVySWQCAAAAC19mdWxmaWxsZWQwCQAAZAAAAAIFAAAAD29yZGVyRnVsZmlsbGVkMAUAAAAQb3JkZXJBbW91bnQwTGVmdAkABEwAAAACCQEAAAAMSW50ZWdlckVudHJ5AAAAAgkAASwAAAACCQABLAAAAAICAAAABm9yZGVyXwUAAAAHb3JkZXJJZAIAAAALX2Z1bGZpbGxlZDEJAABkAAAAAgUAAAAPb3JkZXJGdWxmaWxsZWQxBQAAABBvcmRlckFtb3VudDFMZWZ0CQAETAAAAAIJAQAAAAtTdHJpbmdFbnRyeQAAAAIJAAEsAAAAAgkAASwAAAACAgAAAAZvcmRlcl8FAAAAB29yZGVySWQCAAAAB19zdGF0dXMCAAAABmNsb3NlZAUAAAADbmlsCQAAAgAAAAECAAAAJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgkAAAIAAAABAgAAACRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4JAAACAAAAAQIAAAAkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuCQAAAgAAAAECAAAAJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgAAAAFpAQAAAAtjYW5jZWxPcmRlcgAAAAIAAAAHb3JkZXJJZAAAAAtwcm94eUNhbGxlcgQAAAAKb3JkZXJPd25lcgkBAAAAE3ZhbHVlT3JFcnJvck1lc3NhZ2UAAAACCQAEIgAAAAEJAAEsAAAAAgkAASwAAAACAgAAAAZvcmRlcl8FAAAAB29yZGVySWQCAAAABl9vd25lcgIAAAAXQ2Fubm90IGZpbmQgb3JkZXIgb3duZXIEAAAAC29yZGVyU3RhdHVzCQAEIgAAAAEJAAEsAAAAAgkAASwAAAACAgAAAAZvcmRlcl8FAAAAB29yZGVySWQCAAAAB19zdGF0dXMEAAAAC29yZGVyQXNzZXQwCQEAAAATdmFsdWVPckVycm9yTWVzc2FnZQAAAAIJAAQiAAAAAQkAASwAAAACCQABLAAAAAICAAAABm9yZGVyXwUAAAAHb3JkZXJJZAIAAAAHX3Rva2VuMAIAAAASQ2Fubm90IGZpbmQgdG9rZW4wBAAAAAxvcmRlckFtb3VudDAJAQAAABN2YWx1ZU9yRXJyb3JNZXNzYWdlAAAAAgkABB8AAAABCQABLAAAAAIJAAEsAAAAAgIAAAAGb3JkZXJfBQAAAAdvcmRlcklkAgAAAAhfYW1vdW50MAIAAAATQ2Fubm90IGZpbmQgYW1vdW50MAQAAAAPb3JkZXJGdWxmaWxsZWQwCQEAAAATdmFsdWVPckVycm9yTWVzc2FnZQAAAAIJAAQfAAAAAQkAASwAAAACCQABLAAAAAICAAAABm9yZGVyXwUAAAAHb3JkZXJJZAIAAAALX2Z1bGZpbGxlZDACAAAAFkNhbm5vdCBmaW5kIGZ1bGZpbGxlZDAEAAAAEG9yZGVyQW1vdW50MExlZnQJAABlAAAAAgUAAAAMb3JkZXJBbW91bnQwBQAAAA9vcmRlckZ1bGZpbGxlZDADAwkBAAAAAiE9AAAAAgkAAlgAAAABCAgFAAAAAWkAAAAGY2FsbGVyAAAABWJ5dGVzBQAAAApvcmRlck93bmVyCQEAAAACIT0AAAACCQACWAAAAAEICAUAAAABaQAAAAZjYWxsZXIAAAAFYnl0ZXMFAAAAD3Byb3h5QWRkcmVzc1N0cgcJAAACAAAAAQIAAAAXWW91IGNhbm5vdCBjYW5jZWwgb3JkZXIDAwkAAAAAAAACCQACWAAAAAEICAUAAAABaQAAAAZjYWxsZXIAAAAFYnl0ZXMFAAAAD3Byb3h5QWRkcmVzc1N0cgkBAAAAAiE9AAAAAgUAAAALcHJveHlDYWxsZXIFAAAACm9yZGVyT3duZXIHCQAAAgAAAAECAAAAF1lvdSBjYW5ub3QgY2FuY2VsIG9yZGVyAwkBAAAAAiE9AAAAAgUAAAALb3JkZXJTdGF0dXMCAAAABmFjdGl2ZQkAAAIAAAABAgAAABtvcmRlciBpcyBjbG9zZWQgb3IgY2FuY2VsZWQJAARMAAAAAgkBAAAADlNjcmlwdFRyYW5zZmVyAAAAAwkBAAAAEUBleHRyTmF0aXZlKDEwNjIpAAAAAQUAAAAKb3JkZXJPd25lcgUAAAAQb3JkZXJBbW91bnQwTGVmdAkBAAAADWdldEFzc2V0Qnl0ZXMAAAABBQAAAAtvcmRlckFzc2V0MAkABEwAAAACCQEAAAALU3RyaW5nRW50cnkAAAACCQABLAAAAAIJAAEsAAAAAgIAAAAGb3JkZXJfBQAAAAdvcmRlcklkAgAAAAdfc3RhdHVzAgAAAAhjYW5jZWxlZAUAAAADbmlsAAAAAQAAAAJ0eAEAAAAGdmVyaWZ5AAAAAAkAAfQAAAADCAUAAAACdHgAAAAJYm9keUJ5dGVzCQABkQAAAAIIBQAAAAJ0eAAAAAZwcm9vZnMAAAAAAAAAAAAIBQAAAAJ0eAAAAA9zZW5kZXJQdWJsaWNLZXnrq3lJ", "height": 3301463, "applicationStatus": "succeeded", "spentComplexity": 0 } View: original | compacted Prev: 5M2xHqieMMEnKP7mR3s2HK4RDSEmqahwFYELy9oCexFZ Next: none Diff:
OldNewDifferences
129129 let aggregatorAddress = Address(fromBase58String(aggregator))
130130 let cashbackAmount = (paymentAmount1 - orderAmount1Left)
131131 let balanceBefore = getDappBalance(getAssetBytes(orderAsset0))
132- let swapTx = invoke(aggregatorAddress, "swap", [params, minToReceive], [AttachedPayment(getAssetBytes(orderAsset1), cashbackAmount)])
133- if ((swapTx == swapTx))
132+ if ((balanceBefore == balanceBefore))
134133 then {
135- let balanceAfter = getDappBalance(getAssetBytes(orderAsset0))
136- let cashback = (balanceAfter - balanceBefore)
137-[ScriptTransfer(callerAddress, (orderAmount0Left + cashback), getAssetBytes(orderAsset0)), ScriptTransfer(ownerAddress, orderAmount1Left, getAssetBytes(paymentAsset1)), IntegerEntry((("order_" + orderId) + "_fulfilled0"), (orderFulfilled0 + orderAmount0Left)), IntegerEntry((("order_" + orderId) + "_fulfilled1"), (orderFulfilled1 + orderAmount1Left)), StringEntry((("order_" + orderId) + "_status"), "closed")]
134+ let swapTx = invoke(aggregatorAddress, "swap", [params, minToReceive], [AttachedPayment(getAssetBytes(orderAsset1), cashbackAmount)])
135+ if ((swapTx == swapTx))
136+ then {
137+ let balanceAfter = getDappBalance(getAssetBytes(orderAsset0))
138+ if ((balanceAfter == balanceAfter))
139+ then {
140+ let cashback = (balanceAfter - balanceBefore)
141+ if ((cashback == cashback))
142+ then [ScriptTransfer(callerAddress, orderAmount0Left, getAssetBytes(orderAsset0)), ScriptTransfer(callerAddress, cashback, getAssetBytes(orderAsset0)), ScriptTransfer(ownerAddress, orderAmount1Left, getAssetBytes(paymentAsset1)), IntegerEntry((("order_" + orderId) + "_fulfilled0"), (orderFulfilled0 + orderAmount0Left)), IntegerEntry((("order_" + orderId) + "_fulfilled1"), (orderFulfilled1 + orderAmount1Left)), StringEntry((("order_" + orderId) + "_status"), "closed")]
143+ else throw("Strict value is not equal to itself.")
144+ }
145+ else throw("Strict value is not equal to itself.")
146+ }
147+ else throw("Strict value is not equal to itself.")
138148 }
139149 else throw("Strict value is not equal to itself.")
140150 }
Full:
OldNewDifferences
11 {-# STDLIB_VERSION 5 #-}
22 {-# SCRIPT_TYPE ACCOUNT #-}
33 {-# CONTENT_TYPE DAPP #-}
44 let aggregator = "3PGFHzVGT4NTigwCKP1NcwoXkodVZwvBuuU"
55
66 let proxyAddressStr = "3PM4Mn2iwQnUkeMxTJJAuriiVEGAcQwDU5H"
77
88 func tryGetString (key) = match getString(this, key) {
99 case b: String =>
1010 b
1111 case _ =>
1212 ""
1313 }
1414
1515
1616 func tryGetInteger (key) = match getInteger(this, key) {
1717 case b: Int =>
1818 b
1919 case _ =>
2020 0
2121 }
2222
2323
2424 func getAssetString (assetId) = match assetId {
2525 case b: ByteVector =>
2626 toBase58String(b)
2727 case _ =>
2828 "WAVES"
2929 }
3030
3131
3232 func getAssetBytes (assetIdStr) = if ((assetIdStr == "WAVES"))
3333 then unit
3434 else fromBase58String(assetIdStr)
3535
3636
3737 func getDappBalance (assetId) = match assetId {
3838 case b: ByteVector =>
3939 assetBalance(this, b)
4040 case _ =>
4141 wavesBalance(this).available
4242 }
4343
4444
4545 @Callable(i)
4646 func createOrder (asset1,amount1) = {
4747 let newOrdersAmount = (tryGetInteger("global_ordersAmount") + 1)
4848 let orderId = toString(newOrdersAmount)
4949 if ((size(i.payments) != 1))
5050 then throw("You should to provide payment")
5151 else if ((0 >= amount1))
5252 then throw("Amount1 cannot be less or equals 0")
5353 else {
5454 let asset0 = getAssetString(i.payments[0].assetId)
5555 let amount0 = i.payments[0].amount
5656 let userOrders = tryGetString((("user_" + toString(i.caller)) + "_orders"))
5757 let newUserOrders = match userOrders {
5858 case _ =>
5959 if (("" == $match0))
6060 then orderId
6161 else ((userOrders + ",") + orderId)
6262 }
6363 [IntegerEntry("global_ordersAmount", newOrdersAmount), StringEntry((("order_" + orderId) + "_token0"), asset0), IntegerEntry((("order_" + orderId) + "_amount0"), amount0), IntegerEntry((("order_" + orderId) + "_amount1"), amount1), StringEntry((("order_" + orderId) + "_token1"), asset1), IntegerEntry((("order_" + orderId) + "_fulfilled0"), 0), IntegerEntry((("order_" + orderId) + "_fulfilled1"), 0), StringEntry((("order_" + orderId) + "_owner"), toString(i.caller)), StringEntry((("order_" + orderId) + "_status"), "active"), IntegerEntry((("order_" + orderId) + "_timestamp"), lastBlock.timestamp), StringEntry((("order_" + orderId) + "_txId"), toBase58String(i.transactionId)), StringEntry((("user_" + toString(i.caller)) + "_orders"), newUserOrders)]
6464 }
6565 }
6666
6767
6868
6969 @Callable(i)
7070 func fulfillOrder (orderId) = {
7171 let orderOwner = valueOrErrorMessage(getString((("order_" + orderId) + "_owner")), "Cannot find order owner")
7272 let orderStatus = getString((("order_" + orderId) + "_status"))
7373 let orderAsset0 = valueOrErrorMessage(getString((("order_" + orderId) + "_token0")), "Cannot find token0")
7474 let orderAmount0 = valueOrErrorMessage(getInteger((("order_" + orderId) + "_amount0")), "Cannot find amount0")
7575 let orderFulfilled0 = valueOrErrorMessage(getInteger((("order_" + orderId) + "_fulfilled0")), "Cannot find fulfilled0")
7676 let orderAmount0Left = (orderAmount0 - orderFulfilled0)
7777 let orderAsset1 = valueOrErrorMessage(getString((("order_" + orderId) + "_token1")), "Cannot find token1")
7878 let orderAmount1 = valueOrErrorMessage(getInteger((("order_" + orderId) + "_amount1")), "Cannot find amount1")
7979 let orderFulfilled1 = valueOrErrorMessage(getInteger((("order_" + orderId) + "_fulfilled1")), "Cannot find fulfilled1")
8080 let orderAmount1Left = (orderAmount1 - orderFulfilled1)
8181 if ((orderStatus != "active"))
8282 then throw("Order already closed or canceled")
8383 else if ((size(i.payments) != 1))
8484 then throw("You should to provide payment")
8585 else {
8686 let callerAddress = i.caller
8787 let ownerAddress = addressFromStringValue(orderOwner)
8888 let paymentAsset1 = getAssetString(i.payments[0].assetId)
8989 let paymentAmount1 = i.payments[0].amount
9090 if ((paymentAsset1 != orderAsset1))
9191 then throw("Wrong payment asset")
9292 else if ((paymentAmount1 >= orderAmount1Left))
9393 then [ScriptTransfer(callerAddress, (paymentAmount1 - orderAmount1Left), getAssetBytes(orderAsset1)), ScriptTransfer(callerAddress, orderAmount0Left, getAssetBytes(orderAsset0)), ScriptTransfer(ownerAddress, orderAmount1Left, getAssetBytes(paymentAsset1)), IntegerEntry((("order_" + orderId) + "_fulfilled0"), (orderFulfilled0 + orderAmount0Left)), IntegerEntry((("order_" + orderId) + "_fulfilled1"), (orderFulfilled1 + orderAmount1Left)), StringEntry((("order_" + orderId) + "_status"), "closed")]
9494 else {
9595 let amount0 = fraction(orderAmount0, paymentAmount1, orderAmount1, FLOOR)
9696 [ScriptTransfer(ownerAddress, paymentAmount1, getAssetBytes(paymentAsset1)), ScriptTransfer(callerAddress, amount0, getAssetBytes(orderAsset0)), IntegerEntry((("order_" + orderId) + "_fulfilled0"), (orderFulfilled0 + amount0)), IntegerEntry((("order_" + orderId) + "_fulfilled1"), (orderFulfilled1 + paymentAmount1))]
9797 }
9898 }
9999 }
100100
101101
102102
103103 @Callable(i)
104104 func fulfillOrderAndSwapCashback (orderId,params,minToReceive) = {
105105 let orderOwner = valueOrErrorMessage(getString((("order_" + orderId) + "_owner")), "Cannot find order owner")
106106 let orderStatus = getString((("order_" + orderId) + "_status"))
107107 let orderAsset0 = valueOrErrorMessage(getString((("order_" + orderId) + "_token0")), "Cannot find token0")
108108 let orderAmount0 = valueOrErrorMessage(getInteger((("order_" + orderId) + "_amount0")), "Cannot find amount0")
109109 let orderFulfilled0 = valueOrErrorMessage(getInteger((("order_" + orderId) + "_fulfilled0")), "Cannot find fulfilled0")
110110 let orderAmount0Left = (orderAmount0 - orderFulfilled0)
111111 let orderAsset1 = valueOrErrorMessage(getString((("order_" + orderId) + "_token1")), "Cannot find token1")
112112 let orderAmount1 = valueOrErrorMessage(getInteger((("order_" + orderId) + "_amount1")), "Cannot find amount1")
113113 let orderFulfilled1 = valueOrErrorMessage(getInteger((("order_" + orderId) + "_fulfilled1")), "Cannot find fulfilled1")
114114 let orderAmount1Left = (orderAmount1 - orderFulfilled1)
115115 if ((orderStatus != "active"))
116116 then throw("Order already closed or canceled")
117117 else if ((size(i.payments) != 1))
118118 then throw("You should to provide payment")
119119 else {
120120 let callerAddress = i.caller
121121 let ownerAddress = addressFromStringValue(orderOwner)
122122 let paymentAsset1 = getAssetString(i.payments[0].assetId)
123123 let paymentAmount1 = i.payments[0].amount
124124 if ((paymentAsset1 != orderAsset1))
125125 then throw("Wrong payment asset")
126126 else if ((orderAmount1Left > paymentAmount1))
127127 then throw("When you use this func partialy fullfill disabled, please use fulfillOrder")
128128 else {
129129 let aggregatorAddress = Address(fromBase58String(aggregator))
130130 let cashbackAmount = (paymentAmount1 - orderAmount1Left)
131131 let balanceBefore = getDappBalance(getAssetBytes(orderAsset0))
132- let swapTx = invoke(aggregatorAddress, "swap", [params, minToReceive], [AttachedPayment(getAssetBytes(orderAsset1), cashbackAmount)])
133- if ((swapTx == swapTx))
132+ if ((balanceBefore == balanceBefore))
134133 then {
135- let balanceAfter = getDappBalance(getAssetBytes(orderAsset0))
136- let cashback = (balanceAfter - balanceBefore)
137-[ScriptTransfer(callerAddress, (orderAmount0Left + cashback), getAssetBytes(orderAsset0)), ScriptTransfer(ownerAddress, orderAmount1Left, getAssetBytes(paymentAsset1)), IntegerEntry((("order_" + orderId) + "_fulfilled0"), (orderFulfilled0 + orderAmount0Left)), IntegerEntry((("order_" + orderId) + "_fulfilled1"), (orderFulfilled1 + orderAmount1Left)), StringEntry((("order_" + orderId) + "_status"), "closed")]
134+ let swapTx = invoke(aggregatorAddress, "swap", [params, minToReceive], [AttachedPayment(getAssetBytes(orderAsset1), cashbackAmount)])
135+ if ((swapTx == swapTx))
136+ then {
137+ let balanceAfter = getDappBalance(getAssetBytes(orderAsset0))
138+ if ((balanceAfter == balanceAfter))
139+ then {
140+ let cashback = (balanceAfter - balanceBefore)
141+ if ((cashback == cashback))
142+ then [ScriptTransfer(callerAddress, orderAmount0Left, getAssetBytes(orderAsset0)), ScriptTransfer(callerAddress, cashback, getAssetBytes(orderAsset0)), ScriptTransfer(ownerAddress, orderAmount1Left, getAssetBytes(paymentAsset1)), IntegerEntry((("order_" + orderId) + "_fulfilled0"), (orderFulfilled0 + orderAmount0Left)), IntegerEntry((("order_" + orderId) + "_fulfilled1"), (orderFulfilled1 + orderAmount1Left)), StringEntry((("order_" + orderId) + "_status"), "closed")]
143+ else throw("Strict value is not equal to itself.")
144+ }
145+ else throw("Strict value is not equal to itself.")
146+ }
147+ else throw("Strict value is not equal to itself.")
138148 }
139149 else throw("Strict value is not equal to itself.")
140150 }
141151 }
142152 }
143153
144154
145155
146156 @Callable(i)
147157 func cancelOrder (orderId,proxyCaller) = {
148158 let orderOwner = valueOrErrorMessage(getString((("order_" + orderId) + "_owner")), "Cannot find order owner")
149159 let orderStatus = getString((("order_" + orderId) + "_status"))
150160 let orderAsset0 = valueOrErrorMessage(getString((("order_" + orderId) + "_token0")), "Cannot find token0")
151161 let orderAmount0 = valueOrErrorMessage(getInteger((("order_" + orderId) + "_amount0")), "Cannot find amount0")
152162 let orderFulfilled0 = valueOrErrorMessage(getInteger((("order_" + orderId) + "_fulfilled0")), "Cannot find fulfilled0")
153163 let orderAmount0Left = (orderAmount0 - orderFulfilled0)
154164 if (if ((toBase58String(i.caller.bytes) != orderOwner))
155165 then (toBase58String(i.caller.bytes) != proxyAddressStr)
156166 else false)
157167 then throw("You cannot cancel order")
158168 else if (if ((toBase58String(i.caller.bytes) == proxyAddressStr))
159169 then (proxyCaller != orderOwner)
160170 else false)
161171 then throw("You cannot cancel order")
162172 else if ((orderStatus != "active"))
163173 then throw("order is closed or canceled")
164174 else [ScriptTransfer(addressFromStringValue(orderOwner), orderAmount0Left, getAssetBytes(orderAsset0)), StringEntry((("order_" + orderId) + "_status"), "canceled")]
165175 }
166176
167177
168178 @Verifier(tx)
169179 func verify () = sigVerify(tx.bodyBytes, tx.proofs[0], tx.senderPublicKey)
170180

github/deemru/w8io/3ef1775 
37.35 ms