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:
Old | New | Differences | |
---|---|---|---|
129 | 129 | let aggregatorAddress = Address(fromBase58String(aggregator)) | |
130 | 130 | let cashbackAmount = (paymentAmount1 - orderAmount1Left) | |
131 | 131 | 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)) | |
134 | 133 | 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.") | |
138 | 148 | } | |
139 | 149 | else throw("Strict value is not equal to itself.") | |
140 | 150 | } |
Old | New | Differences | |
---|---|---|---|
1 | 1 | {-# STDLIB_VERSION 5 #-} | |
2 | 2 | {-# SCRIPT_TYPE ACCOUNT #-} | |
3 | 3 | {-# CONTENT_TYPE DAPP #-} | |
4 | 4 | let aggregator = "3PGFHzVGT4NTigwCKP1NcwoXkodVZwvBuuU" | |
5 | 5 | ||
6 | 6 | let proxyAddressStr = "3PM4Mn2iwQnUkeMxTJJAuriiVEGAcQwDU5H" | |
7 | 7 | ||
8 | 8 | func tryGetString (key) = match getString(this, key) { | |
9 | 9 | case b: String => | |
10 | 10 | b | |
11 | 11 | case _ => | |
12 | 12 | "" | |
13 | 13 | } | |
14 | 14 | ||
15 | 15 | ||
16 | 16 | func tryGetInteger (key) = match getInteger(this, key) { | |
17 | 17 | case b: Int => | |
18 | 18 | b | |
19 | 19 | case _ => | |
20 | 20 | 0 | |
21 | 21 | } | |
22 | 22 | ||
23 | 23 | ||
24 | 24 | func getAssetString (assetId) = match assetId { | |
25 | 25 | case b: ByteVector => | |
26 | 26 | toBase58String(b) | |
27 | 27 | case _ => | |
28 | 28 | "WAVES" | |
29 | 29 | } | |
30 | 30 | ||
31 | 31 | ||
32 | 32 | func getAssetBytes (assetIdStr) = if ((assetIdStr == "WAVES")) | |
33 | 33 | then unit | |
34 | 34 | else fromBase58String(assetIdStr) | |
35 | 35 | ||
36 | 36 | ||
37 | 37 | func getDappBalance (assetId) = match assetId { | |
38 | 38 | case b: ByteVector => | |
39 | 39 | assetBalance(this, b) | |
40 | 40 | case _ => | |
41 | 41 | wavesBalance(this).available | |
42 | 42 | } | |
43 | 43 | ||
44 | 44 | ||
45 | 45 | @Callable(i) | |
46 | 46 | func createOrder (asset1,amount1) = { | |
47 | 47 | let newOrdersAmount = (tryGetInteger("global_ordersAmount") + 1) | |
48 | 48 | let orderId = toString(newOrdersAmount) | |
49 | 49 | if ((size(i.payments) != 1)) | |
50 | 50 | then throw("You should to provide payment") | |
51 | 51 | else if ((0 >= amount1)) | |
52 | 52 | then throw("Amount1 cannot be less or equals 0") | |
53 | 53 | else { | |
54 | 54 | let asset0 = getAssetString(i.payments[0].assetId) | |
55 | 55 | let amount0 = i.payments[0].amount | |
56 | 56 | let userOrders = tryGetString((("user_" + toString(i.caller)) + "_orders")) | |
57 | 57 | let newUserOrders = match userOrders { | |
58 | 58 | case _ => | |
59 | 59 | if (("" == $match0)) | |
60 | 60 | then orderId | |
61 | 61 | else ((userOrders + ",") + orderId) | |
62 | 62 | } | |
63 | 63 | [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)] | |
64 | 64 | } | |
65 | 65 | } | |
66 | 66 | ||
67 | 67 | ||
68 | 68 | ||
69 | 69 | @Callable(i) | |
70 | 70 | func fulfillOrder (orderId) = { | |
71 | 71 | let orderOwner = valueOrErrorMessage(getString((("order_" + orderId) + "_owner")), "Cannot find order owner") | |
72 | 72 | let orderStatus = getString((("order_" + orderId) + "_status")) | |
73 | 73 | let orderAsset0 = valueOrErrorMessage(getString((("order_" + orderId) + "_token0")), "Cannot find token0") | |
74 | 74 | let orderAmount0 = valueOrErrorMessage(getInteger((("order_" + orderId) + "_amount0")), "Cannot find amount0") | |
75 | 75 | let orderFulfilled0 = valueOrErrorMessage(getInteger((("order_" + orderId) + "_fulfilled0")), "Cannot find fulfilled0") | |
76 | 76 | let orderAmount0Left = (orderAmount0 - orderFulfilled0) | |
77 | 77 | let orderAsset1 = valueOrErrorMessage(getString((("order_" + orderId) + "_token1")), "Cannot find token1") | |
78 | 78 | let orderAmount1 = valueOrErrorMessage(getInteger((("order_" + orderId) + "_amount1")), "Cannot find amount1") | |
79 | 79 | let orderFulfilled1 = valueOrErrorMessage(getInteger((("order_" + orderId) + "_fulfilled1")), "Cannot find fulfilled1") | |
80 | 80 | let orderAmount1Left = (orderAmount1 - orderFulfilled1) | |
81 | 81 | if ((orderStatus != "active")) | |
82 | 82 | then throw("Order already closed or canceled") | |
83 | 83 | else if ((size(i.payments) != 1)) | |
84 | 84 | then throw("You should to provide payment") | |
85 | 85 | else { | |
86 | 86 | let callerAddress = i.caller | |
87 | 87 | let ownerAddress = addressFromStringValue(orderOwner) | |
88 | 88 | let paymentAsset1 = getAssetString(i.payments[0].assetId) | |
89 | 89 | let paymentAmount1 = i.payments[0].amount | |
90 | 90 | if ((paymentAsset1 != orderAsset1)) | |
91 | 91 | then throw("Wrong payment asset") | |
92 | 92 | else if ((paymentAmount1 >= orderAmount1Left)) | |
93 | 93 | 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")] | |
94 | 94 | else { | |
95 | 95 | let amount0 = fraction(orderAmount0, paymentAmount1, orderAmount1, FLOOR) | |
96 | 96 | [ScriptTransfer(ownerAddress, paymentAmount1, getAssetBytes(paymentAsset1)), ScriptTransfer(callerAddress, amount0, getAssetBytes(orderAsset0)), IntegerEntry((("order_" + orderId) + "_fulfilled0"), (orderFulfilled0 + amount0)), IntegerEntry((("order_" + orderId) + "_fulfilled1"), (orderFulfilled1 + paymentAmount1))] | |
97 | 97 | } | |
98 | 98 | } | |
99 | 99 | } | |
100 | 100 | ||
101 | 101 | ||
102 | 102 | ||
103 | 103 | @Callable(i) | |
104 | 104 | func fulfillOrderAndSwapCashback (orderId,params,minToReceive) = { | |
105 | 105 | let orderOwner = valueOrErrorMessage(getString((("order_" + orderId) + "_owner")), "Cannot find order owner") | |
106 | 106 | let orderStatus = getString((("order_" + orderId) + "_status")) | |
107 | 107 | let orderAsset0 = valueOrErrorMessage(getString((("order_" + orderId) + "_token0")), "Cannot find token0") | |
108 | 108 | let orderAmount0 = valueOrErrorMessage(getInteger((("order_" + orderId) + "_amount0")), "Cannot find amount0") | |
109 | 109 | let orderFulfilled0 = valueOrErrorMessage(getInteger((("order_" + orderId) + "_fulfilled0")), "Cannot find fulfilled0") | |
110 | 110 | let orderAmount0Left = (orderAmount0 - orderFulfilled0) | |
111 | 111 | let orderAsset1 = valueOrErrorMessage(getString((("order_" + orderId) + "_token1")), "Cannot find token1") | |
112 | 112 | let orderAmount1 = valueOrErrorMessage(getInteger((("order_" + orderId) + "_amount1")), "Cannot find amount1") | |
113 | 113 | let orderFulfilled1 = valueOrErrorMessage(getInteger((("order_" + orderId) + "_fulfilled1")), "Cannot find fulfilled1") | |
114 | 114 | let orderAmount1Left = (orderAmount1 - orderFulfilled1) | |
115 | 115 | if ((orderStatus != "active")) | |
116 | 116 | then throw("Order already closed or canceled") | |
117 | 117 | else if ((size(i.payments) != 1)) | |
118 | 118 | then throw("You should to provide payment") | |
119 | 119 | else { | |
120 | 120 | let callerAddress = i.caller | |
121 | 121 | let ownerAddress = addressFromStringValue(orderOwner) | |
122 | 122 | let paymentAsset1 = getAssetString(i.payments[0].assetId) | |
123 | 123 | let paymentAmount1 = i.payments[0].amount | |
124 | 124 | if ((paymentAsset1 != orderAsset1)) | |
125 | 125 | then throw("Wrong payment asset") | |
126 | 126 | else if ((orderAmount1Left > paymentAmount1)) | |
127 | 127 | then throw("When you use this func partialy fullfill disabled, please use fulfillOrder") | |
128 | 128 | else { | |
129 | 129 | let aggregatorAddress = Address(fromBase58String(aggregator)) | |
130 | 130 | let cashbackAmount = (paymentAmount1 - orderAmount1Left) | |
131 | 131 | 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)) | |
134 | 133 | 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.") | |
138 | 148 | } | |
139 | 149 | else throw("Strict value is not equal to itself.") | |
140 | 150 | } | |
141 | 151 | } | |
142 | 152 | } | |
143 | 153 | ||
144 | 154 | ||
145 | 155 | ||
146 | 156 | @Callable(i) | |
147 | 157 | func cancelOrder (orderId,proxyCaller) = { | |
148 | 158 | let orderOwner = valueOrErrorMessage(getString((("order_" + orderId) + "_owner")), "Cannot find order owner") | |
149 | 159 | let orderStatus = getString((("order_" + orderId) + "_status")) | |
150 | 160 | let orderAsset0 = valueOrErrorMessage(getString((("order_" + orderId) + "_token0")), "Cannot find token0") | |
151 | 161 | let orderAmount0 = valueOrErrorMessage(getInteger((("order_" + orderId) + "_amount0")), "Cannot find amount0") | |
152 | 162 | let orderFulfilled0 = valueOrErrorMessage(getInteger((("order_" + orderId) + "_fulfilled0")), "Cannot find fulfilled0") | |
153 | 163 | let orderAmount0Left = (orderAmount0 - orderFulfilled0) | |
154 | 164 | if (if ((toBase58String(i.caller.bytes) != orderOwner)) | |
155 | 165 | then (toBase58String(i.caller.bytes) != proxyAddressStr) | |
156 | 166 | else false) | |
157 | 167 | then throw("You cannot cancel order") | |
158 | 168 | else if (if ((toBase58String(i.caller.bytes) == proxyAddressStr)) | |
159 | 169 | then (proxyCaller != orderOwner) | |
160 | 170 | else false) | |
161 | 171 | then throw("You cannot cancel order") | |
162 | 172 | else if ((orderStatus != "active")) | |
163 | 173 | then throw("order is closed or canceled") | |
164 | 174 | else [ScriptTransfer(addressFromStringValue(orderOwner), orderAmount0Left, getAssetBytes(orderAsset0)), StringEntry((("order_" + orderId) + "_status"), "canceled")] | |
165 | 175 | } | |
166 | 176 | ||
167 | 177 | ||
168 | 178 | @Verifier(tx) | |
169 | 179 | func verify () = sigVerify(tx.bodyBytes, tx.proofs[0], tx.senderPublicKey) | |
170 | 180 |
github/deemru/w8io/3ef1775 37.35 ms ◑