tx · 2nyzACnqpWzh8eoMYDb2sNWuAqWzAuGWXbKajWwPSeAo 3P5UKXpQbom7GB2WGdPG5yGQPeQQuM3hFmw: -0.01800000 Waves 2022.08.26 13:46 [3266811] smart account 3P5UKXpQbom7GB2WGdPG5yGQPeQQuM3hFmw > SELF 0.00000000 Waves
{ "type": 13, "id": "2nyzACnqpWzh8eoMYDb2sNWuAqWzAuGWXbKajWwPSeAo", "fee": 1800000, "feeAssetId": null, "timestamp": 1661510800229, "version": 2, "chainId": 87, "sender": "3P5UKXpQbom7GB2WGdPG5yGQPeQQuM3hFmw", "senderPublicKey": "4MfTwwE7yP4BFGaifQrcc9Nwb5BA9t92WKhVb6Ton65k", "proofs": [ "2LBZu7HPrrwH2E4jsrSpipha77oMRsmRcRU2n5n7rRfoC3iCVuvp5k8iTM6AuGgrhbJEgTBqcA7UViNzs4rrdQQA" ], "script": "base64:AAIFAAAAAAAAAEMIAhIHCgUYGBEBARIICgYYGBEBAQgSCAoGGBgRERgBEgkKBxgYEREYAQgSBAoCCAESBQoDCAEIEgMKARgSBQoDCAgBAAAAGQEAAAAQZ2V0U3RyaW5nT3JUaHJvdwAAAAIAAAAHYWRkcmVzcwAAAANrZXkJAQAAABN2YWx1ZU9yRXJyb3JNZXNzYWdlAAAAAgkABB0AAAACBQAAAAdhZGRyZXNzBQAAAANrZXkJAAEsAAAAAgkAASwAAAACCQABLAAAAAICAAAADENhbid0IHJlYWQgJwUAAAADa2V5AgAAAA0nIGF0IGFkZHJlc3MgCQAEJQAAAAEFAAAAB2FkZHJlc3MBAAAAEWdldEludGVnZXJPclRocm93AAAAAgAAAAdhZGRyZXNzAAAAA2tleQkBAAAAE3ZhbHVlT3JFcnJvck1lc3NhZ2UAAAACCQAEGgAAAAIFAAAAB2FkZHJlc3MFAAAAA2tleQkAASwAAAACCQABLAAAAAIJAAEsAAAAAgIAAAAMQ2FuJ3QgcmVhZCAnBQAAAANrZXkCAAAADScgYXQgYWRkcmVzcyAJAAQlAAAAAQUAAAAHYWRkcmVzcwEAAAATcGFyc2VBZGRyZXNzT3JUaHJvdwAAAAEAAAAMbWF5YmVBZGRyZXNzCQEAAAATdmFsdWVPckVycm9yTWVzc2FnZQAAAAIJAAQmAAAAAQUAAAAMbWF5YmVBZGRyZXNzCQABLAAAAAIJAAEsAAAAAgIAAAAaQ2FuJ3QgcGFyc2UgYWRkcmVzcyBmcm9tICcFAAAADG1heWJlQWRkcmVzcwIAAAABJwEAAAAPcGFyc2VJbnRPclRocm93AAAAAQAAAAhtYXliZUludAkBAAAAE3ZhbHVlT3JFcnJvck1lc3NhZ2UAAAACCQAEtgAAAAEFAAAACG1heWJlSW50CQABLAAAAAIJAAEsAAAAAgIAAAAaQ2FuJ3QgcGFyc2UgaW50ZWdlciBmcm9tICcFAAAACG1heWJlSW50AgAAAAEnAQAAAApnZXRBc3NldElkAAAAAQAAAAVhc3NldAMJAAAAAAAAAgUAAAAFYXNzZXQCAAAABVdBVkVTBQAAAAR1bml0CQACWQAAAAEFAAAABWFzc2V0AAAAAAljb2xsZWN0b3IJAQAAABNwYXJzZUFkZHJlc3NPclRocm93AAAAAQkBAAAAEGdldFN0cmluZ09yVGhyb3cAAAACBQAAAAR0aGlzAgAAAAljb2xsZWN0b3IAAAAAB2ZlZVJhdGUJAQAAABFnZXRJbnRlZ2VyT3JUaHJvdwAAAAIFAAAABHRoaXMCAAAACGZlZS1yYXRlAAAAAAZvcmFjbGUJAQAAABNwYXJzZUFkZHJlc3NPclRocm93AAAAAQkBAAAAEGdldFN0cmluZ09yVGhyb3cAAAACBQAAAAR0aGlzAgAAAAZvcmFjbGUAAAAADXN3b3BmaVJvdXRpbmcJAQAAABNwYXJzZUFkZHJlc3NPclRocm93AAAAAQkBAAAAEGdldFN0cmluZ09yVGhyb3cAAAACBQAAAAR0aGlzAgAAAA5zd29wZmktcm91dGluZwAAAAANcHV6emxlUm91dGluZwkBAAAAE3BhcnNlQWRkcmVzc09yVGhyb3cAAAABCQEAAAAQZ2V0U3RyaW5nT3JUaHJvdwAAAAIFAAAABHRoaXMCAAAADnB1enpsZS1yb3V0aW5nAAAAAAVwb29scwkABLUAAAACCQEAAAAQZ2V0U3RyaW5nT3JUaHJvdwAAAAIFAAAABm9yYWNsZQIAAAAFcG9vbHMCAAAAASwAAAAAC3BlcmNlbnRSYXRlCQEAAAARZ2V0SW50ZWdlck9yVGhyb3cAAAACBQAAAAR0aGlzAgAAAAxwZXJjZW50LXJhdGUAAAAABnJlZktleQIAAAAGa2VlcGVyAAAAABRwdXp6bGVSZXdhcmRBc3NldFN0cgkBAAAAEGdldFN0cmluZ09yVGhyb3cAAAACBQAAAAR0aGlzAgAAABNwdXp6bGUtcmV3YXJkLXRva2VuAAAAABNwdXp6bGVSZXdhcmRBc3NldElkCQEAAAAKZ2V0QXNzZXRJZAAAAAEFAAAAFHB1enpsZVJld2FyZEFzc2V0U3RyAAAAAAZwUG9vbHMJAAS1AAAAAgkBAAAAEGdldFN0cmluZ09yVGhyb3cAAAACBQAAAAR0aGlzAgAAAAdwLXBvb2xzAgAAAAEsAQAAAA9hc3NldElkVG9TdHJpbmcAAAABAAAAB2Fzc2V0SWQEAAAAByRtYXRjaDAFAAAAB2Fzc2V0SWQDCQAAAQAAAAIFAAAAByRtYXRjaDACAAAACkJ5dGVWZWN0b3IEAAAABWFzc2V0BQAAAAckbWF0Y2gwCQACWAAAAAEFAAAABWFzc2V0AwkAAAEAAAACBQAAAAckbWF0Y2gwAgAAAARVbml0BAAAAAV3YXZlcwUAAAAHJG1hdGNoMAIAAAAFV0FWRVMJAAACAAAAAQIAAAALTWF0Y2ggZXJyb3IBAAAACmdldEJhbGFuY2UAAAABAAAAB2Fzc2V0SWQEAAAAByRtYXRjaDAFAAAAB2Fzc2V0SWQDCQAAAQAAAAIFAAAAByRtYXRjaDACAAAACkJ5dGVWZWN0b3IEAAAABWFzc2V0BQAAAAckbWF0Y2gwCQAD8AAAAAIFAAAABHRoaXMFAAAABWFzc2V0AwkAAAEAAAACBQAAAAckbWF0Y2gwAgAAAARVbml0BAAAAAV3YXZlcwUAAAAHJG1hdGNoMAgJAAPvAAAAAQUAAAAEdGhpcwAAAAlhdmFpbGFibGUJAAACAAAAAQIAAAALTWF0Y2ggZXJyb3IBAAAAE2dldEJhbGFuY2VCeUFkZHJlc3MAAAACAAAAB2FkZHJlc3MAAAAHYXNzZXRJZAQAAAAHJG1hdGNoMAUAAAAHYXNzZXRJZAMJAAABAAAAAgUAAAAHJG1hdGNoMAIAAAAKQnl0ZVZlY3RvcgQAAAAFYXNzZXQFAAAAByRtYXRjaDAJAAPwAAAAAgUAAAAHYWRkcmVzcwUAAAAFYXNzZXQDCQAAAQAAAAIFAAAAByRtYXRjaDACAAAABFVuaXQEAAAABXdhdmVzBQAAAAckbWF0Y2gwCAkAA+8AAAABBQAAAAdhZGRyZXNzAAAACWF2YWlsYWJsZQkAAAIAAAABAgAAAAtNYXRjaCBlcnJvcgEAAAAJZGVkdWN0RmVlAAAAAQAAAAZhbW91bnQEAAAAA2ZlZQkAAGsAAAADBQAAAAZhbW91bnQAAAAAAAAAAAEFAAAAB2ZlZVJhdGUJAAUUAAAAAgkAAGUAAAACBQAAAAZhbW91bnQFAAAAA2ZlZQUAAAADZmVlAQAAAA9nZXRSZWZlcnJlckRhdGEAAAABAAAADHJlZmVycmVyTmFtZQQAAAAKcmVmQWRkcmVzcwkBAAAAE3BhcnNlQWRkcmVzc09yVGhyb3cAAAABCQEAAAATdmFsdWVPckVycm9yTWVzc2FnZQAAAAIJAAQdAAAAAgUAAAAEdGhpcwkAASwAAAACCQABLAAAAAICAAAACXJlZmVycmVyLQUAAAAMcmVmZXJyZXJOYW1lAgAAAAgtYWRkcmVzcwkAASwAAAACCQABLAAAAAICAAAAE3JlZmVycmVyIHdpdGggbmFtZSAFAAAADHJlZmVycmVyTmFtZQIAAAAKIG5vdCBmb3VuZAQAAAAKcmVmUGVyY2VudAkBAAAAC3ZhbHVlT3JFbHNlAAAAAgkABBoAAAACBQAAAAR0aGlzCQABLAAAAAIJAAEsAAAAAgIAAAAJcmVmZXJyZXItBQAAAAxyZWZlcnJlck5hbWUCAAAACC1wZXJjZW50BQAAAAtwZXJjZW50UmF0ZQMDCQAAZgAAAAIAAAAAAAAAAAAFAAAACnJlZlBlcmNlbnQGCQAAZgAAAAIFAAAACnJlZlBlcmNlbnQAAAAAAAAAAGQJAAACAAAAAQIAAAAWSW5jb3JyZWN0IHBlcmNlbnQgcmF0ZQkABRQAAAACBQAAAApyZWZBZGRyZXNzBQAAAApyZWZQZXJjZW50AQAAAAZkb1N3YXAAAAAFAAAABHBvb2wAAAAHcGF5bWVudAAAAA1hc3NldFJlY2VpdmVkAAAAEmVzdEFtb3VudFRvUmVjZWl2ZQAAABFzbGlwcGFnZVRvbGVyYW5jZQQAAAALcG9vbEFkZHJlc3MJAQAAABNwYXJzZUFkZHJlc3NPclRocm93AAAAAQUAAAAEcG9vbAQAAAAMdmVyc2lvbk1ham9yCQEAAAAPcGFyc2VJbnRPclRocm93AAAAAQkAAZEAAAACCQAEtQAAAAIJAQAAABBnZXRTdHJpbmdPclRocm93AAAAAgUAAAALcG9vbEFkZHJlc3MCAAAAB3ZlcnNpb24CAAAAAS4AAAAAAAAAAAAEAAAAD2Fzc2V0UmVjZWl2ZWRJZAkBAAAACmdldEFzc2V0SWQAAAABBQAAAA1hc3NldFJlY2VpdmVkAwkAAGYAAAACAAAAAAAAAAAABQAAABJlc3RBbW91bnRUb1JlY2VpdmUJAAACAAAAAQIAAAAjZXN0QW1vdW50VG9SZWNlaXZlIG11c3QgYmUgcG9zaXRpdmUDCQEAAAAPY29udGFpbnNFbGVtZW50AAAAAgUAAAAFcG9vbHMFAAAABHBvb2wEAAAACnBvb2xBc3NldEEJAQAAABBnZXRTdHJpbmdPclRocm93AAAAAgUAAAALcG9vbEFkZHJlc3MCAAAACkFfYXNzZXRfaWQEAAAACnBvb2xBc3NldEIJAQAAABBnZXRTdHJpbmdPclRocm93AAAAAgUAAAALcG9vbEFkZHJlc3MCAAAACkJfYXNzZXRfaWQEAAAADHBvb2xBc3NldElkQQkBAAAACmdldEFzc2V0SWQAAAABBQAAAApwb29sQXNzZXRBBAAAAAxwb29sQXNzZXRJZEIJAQAAAApnZXRBc3NldElkAAAAAQUAAAAKcG9vbEFzc2V0QgQAAAALJHQwMzI4NzM2MzEDAwkAAAAAAAACCAUAAAAHcGF5bWVudAAAAAdhc3NldElkBQAAAAxwb29sQXNzZXRJZEEJAAAAAAAAAgUAAAAPYXNzZXRSZWNlaXZlZElkBQAAAAxwb29sQXNzZXRJZEIHCQAFFAAAAAIFAAAADHBvb2xBc3NldElkQQUAAAAMcG9vbEFzc2V0SWRCAwMJAAAAAAAAAgUAAAAPYXNzZXRSZWNlaXZlZElkBQAAAAxwb29sQXNzZXRJZEEJAAAAAAAAAggFAAAAB3BheW1lbnQAAAAHYXNzZXRJZAUAAAAMcG9vbEFzc2V0SWRCBwkABRQAAAACBQAAAAxwb29sQXNzZXRJZEIFAAAADHBvb2xBc3NldElkQQkAAAIAAAABAgAAABdVbnN1cHBvcnRlZCBhc3NldHMgcGFpcgQAAAAHYXNzZXRJbggFAAAACyR0MDMyODczNjMxAAAAAl8xBAAAAAhhc3NldE91dAgFAAAACyR0MDMyODczNjMxAAAAAl8yBAAAAARhcmdzAwkAAAAAAAACBQAAAAx2ZXJzaW9uTWFqb3IAAAAAAAAAAAEJAARMAAAAAgAAAAAAAAAAAQUAAAADbmlsAwkAAAAAAAACBQAAAAx2ZXJzaW9uTWFqb3IAAAAAAAAAAAIDCQAAZwAAAAIAAAAAAAAAAAAFAAAAEmVzdEFtb3VudFRvUmVjZWl2ZQkAAAIAAAABAgAAACNlc3RBbW91bnRUb1JlY2VpdmUgbXVzdCBiZSBwb3NpdGl2ZQMDCQAAZgAAAAIAAAAAAAAAAAAFAAAAEXNsaXBwYWdlVG9sZXJhbmNlBgkAAGYAAAACBQAAABFzbGlwcGFnZVRvbGVyYW5jZQAAAAAAAAAD6AkAAAIAAAABAgAAAEZTbGlwcGFnZSB0b2xlcmFuY2UgbXVzdCBiZSBub24tbmVnYXRpdmUgYW5kIGxlc3MgdGhhbiBvciBlcXVhbCB0byAxMDAwBAAAAAltaW5BbW91bnQJAABlAAAAAgUAAAASZXN0QW1vdW50VG9SZWNlaXZlCQAAawAAAAMFAAAAEmVzdEFtb3VudFRvUmVjZWl2ZQUAAAARc2xpcHBhZ2VUb2xlcmFuY2UAAAAAAAAAA+gJAARMAAAAAgUAAAASZXN0QW1vdW50VG9SZWNlaXZlCQAETAAAAAIDCQAAZgAAAAIFAAAACW1pbkFtb3VudAAAAAAAAAAAAAUAAAAJbWluQW1vdW50AAAAAAAAAAABBQAAAANuaWwJAAACAAAAAQkAASwAAAACCQABLAAAAAICAAAAFlVua25vd24gcG9vbCB2ZXJzaW9uICcJAAGkAAAAAQUAAAAMdmVyc2lvbk1ham9yAgAAABYnLCBidXQgMSBvciAyIGV4cGVjdGVkBAAAAA1iYWxhbmNlQmVmb3JlCQEAAAAKZ2V0QmFsYW5jZQAAAAEFAAAAD2Fzc2V0UmVjZWl2ZWRJZAMJAAAAAAAAAgUAAAANYmFsYW5jZUJlZm9yZQUAAAANYmFsYW5jZUJlZm9yZQQAAAAGcmVzdWx0CQAD/AAAAAQFAAAAC3Bvb2xBZGRyZXNzAgAAAAhleGNoYW5nZQUAAAAEYXJncwkABEwAAAACBQAAAAdwYXltZW50BQAAAANuaWwDCQAAAAAAAAIFAAAABnJlc3VsdAUAAAAGcmVzdWx0BAAAAAhyZWNlaXZlZAkAAGUAAAACCQEAAAAKZ2V0QmFsYW5jZQAAAAEFAAAAD2Fzc2V0UmVjZWl2ZWRJZAUAAAANYmFsYW5jZUJlZm9yZQMJAAAAAAAAAgUAAAAIcmVjZWl2ZWQFAAAACHJlY2VpdmVkAwkAAGcAAAACAAAAAAAAAAAABQAAAAhyZWNlaXZlZAkAAAIAAAABAgAAACpSZWNlaXZlZCBhbW91bnQgZnJvbSBwb29sIG11c3QgYmUgcG9zaXRpdmUFAAAACHJlY2VpdmVkCQAAAgAAAAECAAAAJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgkAAAIAAAABAgAAACRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4JAAACAAAAAQIAAAAkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuAwkBAAAAD2NvbnRhaW5zRWxlbWVudAAAAAIFAAAABnBQb29scwUAAAAEcG9vbAQAAAANYmFsYW5jZUJlZm9yZQkBAAAACmdldEJhbGFuY2UAAAABBQAAAA9hc3NldFJlY2VpdmVkSWQDCQAAAAAAAAIFAAAADWJhbGFuY2VCZWZvcmUFAAAADWJhbGFuY2VCZWZvcmUEAAAABnJlc3VsdAkAA/wAAAAEBQAAAAtwb29sQWRkcmVzcwIAAAAEc3dhcAkABEwAAAACBQAAAA1hc3NldFJlY2VpdmVkCQAETAAAAAIAAAAAAAAAAAAFAAAAA25pbAkABEwAAAACBQAAAAdwYXltZW50BQAAAANuaWwDCQAAAAAAAAIFAAAABnJlc3VsdAUAAAAGcmVzdWx0BAAAAAhyZWNlaXZlZAkAAGUAAAACCQEAAAAKZ2V0QmFsYW5jZQAAAAEFAAAAD2Fzc2V0UmVjZWl2ZWRJZAUAAAANYmFsYW5jZUJlZm9yZQMJAAAAAAAAAgUAAAAIcmVjZWl2ZWQFAAAACHJlY2VpdmVkAwkAAGcAAAACAAAAAAAAAAAABQAAAAhyZWNlaXZlZAkAAAIAAAABAgAAACpSZWNlaXZlZCBhbW91bnQgZnJvbSBwb29sIG11c3QgYmUgcG9zaXRpdmUFAAAACHJlY2VpdmVkCQAAAgAAAAECAAAAJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgkAAAIAAAABAgAAACRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4JAAACAAAAAQIAAAAkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuCQAAAgAAAAEJAAEsAAAAAgkAASwAAAACAgAAAB1UaGVyZSBpcyBubyBwb29sIGF0IGFkZHJlc3MgJwUAAAAEcG9vbAIAAAABJwEAAAAId3JhcFN3YXAAAAAGAAAAA2ludgAAAAlhZGRyZXNzZXMAAAAPYXNzZXRzVG9SZWNlaXZlAAAAC2VzdFJlY2VpdmVkAAAAEXNsaXBwYWdlVG9sZXJhbmNlAAAAC21pblJlY2VpdmVkBAAAAANwbXQDCQAAZgAAAAIJAAGQAAAAAQgFAAAAA2ludgAAAAhwYXltZW50cwAAAAAAAAAAAAkAAZEAAAACCAUAAAADaW52AAAACHBheW1lbnRzAAAAAAAAAAAACQAAAgAAAAECAAAAEFBheW1lbnQgcmVxdWlyZWQEAAAACmFzc2V0RmluYWwJAAGRAAAAAgUAAAAPYXNzZXRzVG9SZWNlaXZlCQAAZQAAAAIJAAGQAAAAAQUAAAAPYXNzZXRzVG9SZWNlaXZlAAAAAAAAAAABBAAAAAxhc3NldEZpbmFsSWQJAQAAAApnZXRBc3NldElkAAAAAQUAAAAKYXNzZXRGaW5hbAQAAAAHaW5kaWNlcwkABEwAAAACAAAAAAAAAAAACQAETAAAAAIAAAAAAAAAAAEJAARMAAAAAgAAAAAAAAAAAgkABEwAAAACAAAAAAAAAAADCQAETAAAAAIAAAAAAAAAAAQJAARMAAAAAgAAAAAAAAAABQkABEwAAAACAAAAAAAAAAAGCQAETAAAAAIAAAAAAAAAAAcJAARMAAAAAgAAAAAAAAAACAkABEwAAAACAAAAAAAAAAAJBQAAAANuaWwKAQAAAAhmb2xkU3dhcAAAAAIAAAAQcHJldmlvdXNSZWNlaXZlZAAAAAVpbmRleAMJAABnAAAAAgUAAAAFaW5kZXgJAAGQAAAAAQUAAAAJYWRkcmVzc2VzBQAAABBwcmV2aW91c1JlY2VpdmVkBAAAAA1hc3NldFJlY2VpdmVkCQABkQAAAAIFAAAAD2Fzc2V0c1RvUmVjZWl2ZQUAAAAFaW5kZXgEAAAAD2Fzc2V0UmVjZWl2ZWRJZAkBAAAACmdldEFzc2V0SWQAAAABBQAAAA1hc3NldFJlY2VpdmVkBAAAAAckbWF0Y2gwCQEAAAAGZG9Td2FwAAAABQkAAZEAAAACBQAAAAlhZGRyZXNzZXMFAAAABWluZGV4BQAAABBwcmV2aW91c1JlY2VpdmVkBQAAAA1hc3NldFJlY2VpdmVkCQABkQAAAAIFAAAAC2VzdFJlY2VpdmVkBQAAAAVpbmRleAUAAAARc2xpcHBhZ2VUb2xlcmFuY2UDCQAAAQAAAAIFAAAAByRtYXRjaDACAAAAA0ludAQAAAAGaW5jb21lBQAAAAckbWF0Y2gwCQEAAAAPQXR0YWNoZWRQYXltZW50AAAAAgUAAAAPYXNzZXRSZWNlaXZlZElkBQAAAAZpbmNvbWUJAAACAAAAAQIAAAAYQ2FuJ3QgaGFuZGxlIHN3YXAgcmVzdWx0BAAAAAVmaW5hbAMJAABmAAAAAgkAAZAAAAABBQAAAAlhZGRyZXNzZXMAAAAAAAAAAAAKAAAAAAIkbAUAAAAHaW5kaWNlcwoAAAAAAiRzCQABkAAAAAEFAAAAAiRsCgAAAAAFJGFjYzAFAAAAA3BtdAoBAAAABSRmMF8xAAAAAgAAAAIkYQAAAAIkaQMJAABnAAAAAgUAAAACJGkFAAAAAiRzBQAAAAIkYQkBAAAACGZvbGRTd2FwAAAAAgUAAAACJGEJAAGRAAAAAgUAAAACJGwFAAAAAiRpCgEAAAAFJGYwXzIAAAACAAAAAiRhAAAAAiRpAwkAAGcAAAACBQAAAAIkaQUAAAACJHMFAAAAAiRhCQAAAgAAAAECAAAAFExpc3Qgc2l6ZSBleGNlZWRzIDEwCQEAAAAFJGYwXzIAAAACCQEAAAAFJGYwXzEAAAACCQEAAAAFJGYwXzEAAAACCQEAAAAFJGYwXzEAAAACCQEAAAAFJGYwXzEAAAACCQEAAAAFJGYwXzEAAAACCQEAAAAFJGYwXzEAAAACCQEAAAAFJGYwXzEAAAACCQEAAAAFJGYwXzEAAAACCQEAAAAFJGYwXzEAAAACCQEAAAAFJGYwXzEAAAACBQAAAAUkYWNjMAAAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAgAAAAAAAAAAAwAAAAAAAAAABAAAAAAAAAAABQAAAAAAAAAABgAAAAAAAAAABwAAAAAAAAAACAAAAAAAAAAACQAAAAAAAAAACgkAAAIAAAABAgAAABRQYXRoIGNhbm5vdCBiZSBlbXB0eQQAAAALJHQwNjI4ODYzNDAJAQAAAAlkZWR1Y3RGZWUAAAABCAUAAAAFZmluYWwAAAAGYW1vdW50BAAAAA5yZXN1bHRBZnRlckZlZQgFAAAACyR0MDYyODg2MzQwAAAAAl8xBAAAAANmZWUIBQAAAAskdDA2Mjg4NjM0MAAAAAJfMgMJAABnAAAAAgAAAAAAAAAAAAgFAAAABWZpbmFsAAAABmFtb3VudAkAAAIAAAABCQABLAAAAAIJAAEsAAAAAgIAAAAMU3dhcCByZXN1bHQgCQABpAAAAAEIBQAAAAVmaW5hbAAAAAZhbW91bnQCAAAAESBtdXN0IGJlIHBvc2l0aXZlAwkAAGYAAAACBQAAAAttaW5SZWNlaXZlZAUAAAAOcmVzdWx0QWZ0ZXJGZWUJAAACAAAAAQkAASwAAAACCQABLAAAAAIJAAEsAAAAAgIAAAAMU3dhcCByZXN1bHQgCQABpAAAAAEFAAAADnJlc3VsdEFmdGVyRmVlAgAAABcgaXMgbGVzcyB0aGVuIGV4cGVjdGVkIAkAAaQAAAABBQAAAAttaW5SZWNlaXZlZAkABEwAAAACCQEAAAAOU2NyaXB0VHJhbnNmZXIAAAADCAUAAAADaW52AAAABmNhbGxlcgUAAAAOcmVzdWx0QWZ0ZXJGZWUFAAAADGFzc2V0RmluYWxJZAkABEwAAAACCQEAAAAOU2NyaXB0VHJhbnNmZXIAAAADBQAAAAljb2xsZWN0b3IFAAAAA2ZlZQUAAAAMYXNzZXRGaW5hbElkBQAAAANuaWwBAAAADndyYXBTd29wZmlTd2FwAAAABwAAAANpbnYAAAAKZXhjaGFuZ2VycwAAAA5leGNoYW5nZXJzVHlwZQAAAAVhcmdzMQAAAAVhcmdzMgAAABFyb3V0aW5nQXNzZXRzS2V5cwAAABJtaW5BbW91bnRUb1JlY2VpdmUEAAAAA3BtdAMJAABmAAAAAgkAAZAAAAABCAUAAAADaW52AAAACHBheW1lbnRzAAAAAAAAAAAACQABkQAAAAIIBQAAAANpbnYAAAAIcGF5bWVudHMAAAAAAAAAAAAJAAACAAAAAQIAAAAQUGF5bWVudCByZXF1aXJlZAQAAAANbGFzdEV4Y2hhbmdlcgkBAAAAE3ZhbHVlT3JFcnJvck1lc3NhZ2UAAAACCQAEJgAAAAEJAAGRAAAAAgUAAAAKZXhjaGFuZ2VycwkAAGUAAAACCQABkAAAAAEFAAAACmV4Y2hhbmdlcnMAAAAAAAAAAAECAAAAKUNhbid0IHBhcnNlIGxhc3QgZXhjaGFuZ2VyIHN3b3BmaSBhZGRyZXNzBAAAAA5sYXN0QXNzZXRJZEtleQkAASwAAAACCQABkQAAAAIJAAS1AAAAAgkAAZEAAAACBQAAABFyb3V0aW5nQXNzZXRzS2V5cwkAAGUAAAACCQABkAAAAAEFAAAAEXJvdXRpbmdBc3NldHNLZXlzAAAAAAAAAAABAgAAAAFfAAAAAAAAAAAAAgAAAAlfYXNzZXRfaWQEAAAACmFzc2V0RmluYWwJAQAAABN2YWx1ZU9yRXJyb3JNZXNzYWdlAAAAAgkABB0AAAACBQAAAA1sYXN0RXhjaGFuZ2VyBQAAAA5sYXN0QXNzZXRJZEtleQkAASwAAAACCQABLAAAAAIJAAEsAAAAAgIAAAAWQ2FuJ3QgcmVhZCBwYXJhbWV0ZXIgJwUAAAAObGFzdEFzc2V0SWRLZXkCAAAAECcgZm9yIGV4Y2hhbmdlciAJAAQlAAAAAQUAAAANbGFzdEV4Y2hhbmdlcgQAAAAMYXNzZXRGaW5hbElkCQEAAAAKZ2V0QXNzZXRJZAAAAAEFAAAACmFzc2V0RmluYWwEAAAADWJhbGFuY2VCZWZvcmUJAQAAAApnZXRCYWxhbmNlAAAAAQUAAAAMYXNzZXRGaW5hbElkAwkAAAAAAAACBQAAAA1iYWxhbmNlQmVmb3JlBQAAAA1iYWxhbmNlQmVmb3JlBAAAAAZyZXN1bHQJAAP8AAAABAUAAAANc3dvcGZpUm91dGluZwIAAAAMcm91dGluZ1RyYWRlCQAETAAAAAIFAAAACmV4Y2hhbmdlcnMJAARMAAAAAgUAAAAOZXhjaGFuZ2Vyc1R5cGUJAARMAAAAAgUAAAAFYXJnczEJAARMAAAAAgUAAAAFYXJnczIJAARMAAAAAgUAAAARcm91dGluZ0Fzc2V0c0tleXMJAARMAAAAAgUAAAASbWluQW1vdW50VG9SZWNlaXZlBQAAAANuaWwJAARMAAAAAgUAAAADcG10BQAAAANuaWwDCQAAAAAAAAIFAAAABnJlc3VsdAUAAAAGcmVzdWx0BAAAAAxiYWxhbmNlQWZ0ZXIJAQAAAApnZXRCYWxhbmNlAAAAAQUAAAAMYXNzZXRGaW5hbElkAwkAAAAAAAACBQAAAAxiYWxhbmNlQWZ0ZXIFAAAADGJhbGFuY2VBZnRlcgQAAAAFZGVsdGEJAABlAAAAAgUAAAAMYmFsYW5jZUFmdGVyBQAAAA1iYWxhbmNlQmVmb3JlBAAAAAskdDA3OTgyODAyNwkBAAAACWRlZHVjdEZlZQAAAAEFAAAABWRlbHRhBAAAAA5yZXN1bHRBZnRlckZlZQgFAAAACyR0MDc5ODI4MDI3AAAAAl8xBAAAAANmZWUIBQAA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b2xlcmFuY2UAAAALbWluUmVjZWl2ZWQJAQAAAAh3cmFwU3dhcAAAAAYFAAAAA2ludgUAAAAJYWRkcmVzc2VzBQAAAA9hc3NldHNUb1JlY2VpdmUFAAAAC2VzdFJlY2VpdmVkBQAAABFzbGlwcGFnZVRvbGVyYW5jZQUAAAALbWluUmVjZWl2ZWQAAAADaW52AQAAABBzd2FwV2l0aFJlZmVycmVyAAAABgAAAAlhZGRyZXNzZXMAAAAPYXNzZXRzVG9SZWNlaXZlAAAAC2VzdFJlY2VpdmVkAAAAEXNsaXBwYWdlVG9sZXJhbmNlAAAAC21pblJlY2VpdmVkAAAADHJlZmVycmVyTmFtZQMJAAAAAAAAAgkAATEAAAABBQAAAAxyZWZlcnJlck5hbWUAAAAAAAAAAAAJAAACAAAAAQIAAAAVUmVmZXJyZXIgbmFtZSBpbnZhbGlkBAAAAAphc3NldEZpbmFsCQABkQAAAAIFAAAAD2Fzc2V0c1RvUmVjZWl2ZQkAAGUAAAACCQABkAAAAAEFAAAAD2Fzc2V0c1RvUmVjZWl2ZQAAAAAAAAAAAQQAAAAHYXNzZXRJZAkBAAAACmdldEFzc2V0SWQAAAABBQAAAAphc3NldEZpbmFsBAAAAAskdDA5NjkxOTc2MQkBAAAAD2dldFJlZmVycmVyRGF0YQAAAAEFAAAADHJlZmVycmVyTmFtZQQAAAAPcmVmZXJyZXJBZGRyZXNzCAUAAAALJHQwOTY5MTk3NjEAAAACXzEEAAAAD3JlZmVycmVyUGVyY2VudAgFAAAACyR0MDk2OTE5NzYxAAAAAl8yBAAAAAZyZXN1bHQJAQAAAAh3cmFwU3dhcAAAAAYFAAAAA2ludgUAAAAJYWRkcmVzc2VzBQAAAA9hc3NldHNUb1JlY2VpdmUFAAAAC2VzdFJlY2VpdmVkBQAAABFzbGlwcGFnZVRvbGVyYW5jZQUAAAALbWluUmVjZWl2ZWQDCQAAAAAAAAIFAAAABnJlc3VsdAUAAAAGcmVzdWx0BAAAAAxjb2xsZWN0b3JGZWUICQABkQAAAAIFAAAABnJlc3VsdAAAAAAAAAAAAQAAAAZhbW91bnQEAAAADnJlZmVycmVyUmV3YXJkCQAAawAAAAMFAAAADGNvbGxlY3RvckZlZQUAAAAPcmVmZXJyZXJQZXJjZW50AAAAAAAAAABkCQAETAAAAAIJAAGRAAAAAgUAAAAGcmVzdWx0AAAAAAAAAAAACQAETAAAAAIJAQAAAA5TY3JpcHRUcmFuc2ZlcgAAAAMFAAAACWNvbGxlY3RvcgkAAGUAAAACBQAAAAxjb2xsZWN0b3JGZWUFAAAADnJlZmVycmVyUmV3YXJkBQAAAAdhc3NldElkCQAETAAAAAIJAQAAAA5TY3JpcHRUcmFuc2ZlcgAAAAMFAAAAD3JlZmVycmVyQWRkcmVzcwUAAAAOcmVmZXJyZXJSZXdhcmQFAAAAB2Fzc2V0SWQFAAAAA25pbAkAAAIAAAABAgAAACRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4AAAADaW52AQAAAApzd29wZmlTd2FwAAAABgAAAApleGNoYW5nZXJzAAAADmV4Y2hhbmdlcnNUeXBlAAAABWFyZ3MxAAAABWFyZ3MyAAAAEXJvdXRpbmdBc3NldHNLZXlzAAAAEm1pbkFtb3VudFRvUmVjZWl2ZQkBAAAADndyYXBTd29wZmlTd2FwAAAABwUAAAADaW52BQAAAApleGNoYW5nZXJzBQAAAA5leGNoYW5nZXJzVHlwZQUAAAAFYXJnczEFAAAABWFyZ3MyBQAAABFyb3V0aW5nQXNzZXRzS2V5cwUAAAASbWluQW1vdW50VG9SZWNlaXZlAAAAA2ludgEAAAAWc3dvcGZpU3dhcFdpdGhSZWZlcnJlcgAAAAcAAAAKZXhjaGFuZ2VycwAAAA5leGNoYW5nZXJzVHlwZQAAAAVhcmdzMQAAAAVhcmdzMgAAABFyb3V0aW5nQXNzZXRzS2V5cwAAABJtaW5BbW91bnRUb1JlY2VpdmUAAAAMcmVmZXJyZXJOYW1lAwkAAAAAAAACCQABMQAAAAEFAAAADHJlZmVycmVyTmFtZQAAAAAAAAAAAAkAAAIAAAABAgAAABVSZWZlcnJlciBuYW1lIGludmFsaWQEAAAADWxhc3RFeGNoYW5nZXIJAQAAABN2YWx1ZU9yRXJyb3JNZXNzYWdlAAAAAgkABCYAAAABCQABkQAAAAIFAAAACmV4Y2hhbmdlcnMJAABlAAAAAgkAAZAAAAABBQAAAApleGNoYW5nZXJzAAAAAAAAAAABAgAAAClDYW4ndCBwYXJzZSBsYXN0IGV4Y2hhbmdlciBzd29wZmkgYWRkcmVzcwQAAAAObGFzdEFzc2V0SWRLZXkJAAEsAAAAAgkAAZEAAAACCQAEtQAAAAIJAAGRAAAAAgUAAAARcm91dGluZ0Fzc2V0c0tleXMJAABlAAAAAgkAAZAAAAABBQAAABFyb3V0aW5nQXNzZXRzS2V5cwAAAAAAAAAAAQIAAAABXwAAAAAAAAAAAAIAAAAJX2Fzc2V0X2lkBAAAAAphc3NldEZpbmFsCQEAAAATdmFsdWVPckVycm9yTWVzc2FnZQAAAAIJAAQdAAAAAgUAAAANbGFzdEV4Y2hhbmdlcgUAAAAObGFzdEFzc2V0SWRLZXkJAAEsAAAAAgkAASwAAAACCQABLAAAAAICAAAAFkNhbid0IHJlYWQgcGFyYW1ldGVyICcFAAAADmxhc3RBc3NldElkS2V5AgAAABAnIGZvciBleGNoYW5nZXIgCQAEJQAAAAEFAAAADWxhc3RFeGNoYW5nZXIEAAAAB2Fzc2V0SWQJAQAAAApnZXRBc3NldElkAAAAAQUAAAAKYXNzZXRGaW5hbAQAAAANJHQwMTEyNjUxMTMzNQkBAAAAD2dldFJlZmVycmVyRGF0YQAAAAEFAAAADHJlZmVycmVyTmFtZQQAAAAPcmVmZXJyZXJBZGRyZXNzCAUAAAANJHQwMTEyNjUxMTMzNQAAAAJfMQQAAAAPcmVmZXJyZXJQZXJjZW50CAUAAAANJHQwMTEyNjUxMTMzNQAAAAJfMgQAAAAGcmVzdWx0CQEAAAAOd3JhcFN3b3BmaVN3YXAAAAAHBQAAAANpbnYFAAAACmV4Y2hhbmdlcnMFAAAADmV4Y2hhbmdlcnNUeXBlBQAAAAVhcmdzMQUAAAAFYXJnczIFAAAAEXJvdXRpbmdBc3NldHNLZXlzBQAAABJtaW5BbW91bnRUb1JlY2VpdmUDCQAAAAAAAAIFAAAABnJlc3VsdAUAAAAGcmVzdWx0BAAAAAxjb2xsZWN0b3JGZWUICQABkQAAAAIFAAAABnJlc3VsdAAAAAAAAAAAAQAAAAZhbW91bnQEAAAADnJlZmVycmVyUmV3YXJkCQAAawAAAAMFAAAADGNvbGxlY3RvckZlZQUAAAAPcmVmZXJyZXJQZXJjZW50AAAAAAAAAABkCQAETAAAAAIJAAGRAAAAAgUAAAAGcmVzdWx0AAAAAAAAAAAACQAETAAAAAIJAQAAAA5TY3JpcHRUcmFuc2ZlcgAAAAMFAAAACWNvbGxlY3RvcgkAAGUAAAACBQAAAAxjb2xsZWN0b3JGZWUFAAAADnJlZmVycmVyUmV3YXJkBQAAAAdhc3NldElkCQAETAAAAAIJAQAAAA5TY3JpcHRUcmFuc2ZlcgAAAAMFAAAAD3JlZmVycmVyQWRkcmVzcwUAAAAOcmVmZXJyZXJSZXdhcmQFAAAAB2Fzc2V0SWQFAAAAA25pbAkAAAIAAAABAgAAACRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4AAAADaW52AQAAAApwdXp6bGVTd2FwAAAAAgAAAAlyb3V0ZXNTdHIAAAAMbWluVG9SZWNlaXZlCQEAAAAOd3JhcFB1enpsZVN3YXAAAAADBQAAAANpbnYFAAAACXJvdXRlc1N0cgUAAAAMbWluVG9SZWNlaXZlAAAAA2ludgEAAAAWcHV6emxlU3dhcFdpdGhSZWZlcnJlcgAAAAMAAAAJcm91dGVzU3RyAAAADG1pblRvUmVjZWl2ZQAAAAxyZWZlcnJlck5hbWUDCQAAAAAAAAIJAAExAAAAAQUAAAAJcm91dGVzU3RyAAAAAAAAAAAACQAAAgAAAAECAAAAD0ludmFsaWQgcm91dGluZwMJAABnAAAAAgAAAAAAAAAAAAUAAAAMbWluVG9SZWNlaXZlCQAAAgAAAAECAAAAGFN1bSB0byByZWNlaXZlIGlzIHRvIGxvdwMJAAAAAAAAAgkAATEAAAABBQAAAAxyZWZlcnJlck5hbWUAAAAAAAAAAAAJAAACAAAAAQIAAAAYUmVmZXJyZXIgbmFtZSBpcyBpbnZhbGlkBAAAAAxhc3NldElkRmluYWwJAAGRAAAAAgkABLUAAAACBQAAAAlyb3V0ZXNTdHICAAAAASwJAABlAAAAAgkAAZAAAAABCQAEtQAAAAIFAAAACXJvdXRlc1N0cgIAAAABLAAAAAAAAAAAAQQAAAAHYXNzZXRJZAkBAAAACmdldEFzc2V0SWQAAAABBQAAAAxhc3NldElkRmluYWwEAAAADSR0MDEyMzU2MTI0MjYJAQAAAA9nZXRSZWZlcnJlckRhdGEAAAABBQAAAAxyZWZlcnJlck5hbWUEAAAAD3JlZmVycmVyQWRkcmVzcwgFAAAADSR0MDEyMzU2MTI0MjYAAAACXzEEAAAAD3JlZmVycmVyUGVyY2VudAgFAAAADSR0MDEyMzU2MTI0MjYAAAACXzIEAAAADWJhbGFuY2VCZWZvcmUJAQAAABNnZXRCYWxhbmNlQnlBZGRyZXNzAAAAAgUAAAAJY29sbGVjdG9yBQAAABNwdXp6bGVSZXdhcmRBc3NldElkAwkAAAAAAAACBQAAAA1iYWxhbmNlQmVmb3JlBQAAAA1iYWxhbmNlQmVmb3JlBAAAAAZyZXN1bHQJAQAAAA53cmFwUHV6emxlU3dhcAAAAAMFAAAAA2ludgUAAAAJcm91dGVzU3RyBQAAAAxtaW5Ub1JlY2VpdmUDCQAAAAAAAAIFAAAABnJlc3VsdAUAAAAGcmVzdWx0BAAAAAxiYWxhbmNlQWZ0ZXIJAQAAABNnZXRCYWxhbmNlQnlBZGRyZXNzAAAAAgUAAAAJY29sbGVjdG9yBQAAABNwdXp6bGVSZXdhcmRBc3NldElkAwkAAAAAAAACBQAAAAxiYWxhbmNlQWZ0ZXIFAAAADGJhbGFuY2VBZnRlcgQAAAAFZGVsdGEJAABlAAAAAgUAAAAMYmFsYW5jZUFmdGVyBQAAAA1iYWxhbmNlQmVmb3JlAwkAAAAAAAACBQAAAAVkZWx0YQUAAAAFZGVsdGEEAAAABnJld2FyZAkAAGsAAAADBQAAAAVkZWx0YQUAAAAPcmVmZXJyZXJQZXJjZW50AAAAAAAAAABkBAAAAANyZXMJAAP8AAAABAUAAAAJY29sbGVjdG9yAgAAABNjbGFpbVJlZmVycmVyUmV3YXJkCQAETAAAAAIFAAAABnJld2FyZAkABEwAAAACBQAAABRwdXp6bGVSZXdhcmRBc3NldFN0cgUAAAADbmlsBQAAAANuaWwDCQAAAAAAAAIFAAAAA3JlcwUAAAADcmVzCQAETQAAAAIFAAAABnJlc3VsdAkBAAAADlNjcmlwdFRyYW5zZmVyAAAAAwUAAAAPcmVmZXJyZXJBZGRyZXNzBQAAAAZyZXdhcmQFAAAAE3B1enpsZVJld2FyZEFzc2V0SWQJAAACAAAAAQIAAAAkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuCQAAAgAAAAECAAAAJFN0cmljdCB2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", "height": 3266811, "applicationStatus": "succeeded", "spentComplexity": 0 } View: original | compacted Prev: 4gDfvLrBMCvU1PsJaV5X14hd2zpfk58bWuF432s4TpTx Next: EHZAuKWwWG4sxwvPWJ9ncH1wAHrsx7YK6b2mrFnyyY1B Diff:
Old | New | Differences | |
---|---|---|---|
13 | 13 | func g (h) = valueOrErrorMessage(parseInt(h), (("Can't parse integer from '" + h) + "'")) | |
14 | 14 | ||
15 | 15 | ||
16 | - | let i = e(a(this, "collector")) | |
17 | - | ||
18 | - | let j = d(this, "fee-rate") | |
19 | - | ||
20 | - | let k = e(a(this, "oracle")) | |
21 | - | ||
22 | - | let l = e(a(this, "swopfi-routing")) | |
23 | - | ||
24 | - | let m = split(a(k, "pools"), ",") | |
25 | - | ||
26 | - | let n = split(a(this, "p-pools"), ",") | |
27 | - | ||
28 | - | func o (p) = if ((p == "WAVES")) | |
16 | + | func i (j) = if ((j == "WAVES")) | |
29 | 17 | then unit | |
30 | - | else fromBase58String( | |
18 | + | else fromBase58String(j) | |
31 | 19 | ||
32 | 20 | ||
33 | - | func q (r) = { | |
34 | - | let s = r | |
35 | - | if ($isInstanceOf(s, "ByteVector")) | |
21 | + | let k = e(a(this, "collector")) | |
22 | + | ||
23 | + | let l = d(this, "fee-rate") | |
24 | + | ||
25 | + | let m = e(a(this, "oracle")) | |
26 | + | ||
27 | + | let n = e(a(this, "swopfi-routing")) | |
28 | + | ||
29 | + | let o = e(a(this, "puzzle-routing")) | |
30 | + | ||
31 | + | let p = split(a(m, "pools"), ",") | |
32 | + | ||
33 | + | let q = d(this, "percent-rate") | |
34 | + | ||
35 | + | let r = "keeper" | |
36 | + | ||
37 | + | let s = a(this, "puzzle-reward-token") | |
38 | + | ||
39 | + | let t = i(s) | |
40 | + | ||
41 | + | let u = split(a(this, "p-pools"), ",") | |
42 | + | ||
43 | + | func v (w) = { | |
44 | + | let x = w | |
45 | + | if ($isInstanceOf(x, "ByteVector")) | |
36 | 46 | then { | |
37 | - | let | |
38 | - | toBase58String( | |
47 | + | let j = x | |
48 | + | toBase58String(j) | |
39 | 49 | } | |
40 | - | else if ($isInstanceOf( | |
50 | + | else if ($isInstanceOf(x, "Unit")) | |
41 | 51 | then { | |
42 | - | let | |
52 | + | let y = x | |
43 | 53 | "WAVES" | |
44 | 54 | } | |
45 | 55 | else throw("Match error") | |
46 | 56 | } | |
47 | 57 | ||
48 | 58 | ||
49 | - | func | |
50 | - | let | |
51 | - | if ($isInstanceOf( | |
59 | + | func z (w) = { | |
60 | + | let x = w | |
61 | + | if ($isInstanceOf(x, "ByteVector")) | |
52 | 62 | then { | |
53 | - | let | |
54 | - | assetBalance(this, | |
63 | + | let j = x | |
64 | + | assetBalance(this, j) | |
55 | 65 | } | |
56 | - | else if ($isInstanceOf( | |
66 | + | else if ($isInstanceOf(x, "Unit")) | |
57 | 67 | then { | |
58 | - | let | |
68 | + | let y = x | |
59 | 69 | wavesBalance(this).available | |
60 | 70 | } | |
61 | 71 | else throw("Match error") | |
62 | 72 | } | |
63 | 73 | ||
64 | 74 | ||
65 | - | func v (w) = { | |
66 | - | let x = fraction(w, 1, j) | |
67 | - | $Tuple2((w - x), x) | |
75 | + | func A (b,w) = { | |
76 | + | let x = w | |
77 | + | if ($isInstanceOf(x, "ByteVector")) | |
78 | + | then { | |
79 | + | let j = x | |
80 | + | assetBalance(b, j) | |
81 | + | } | |
82 | + | else if ($isInstanceOf(x, "Unit")) | |
83 | + | then { | |
84 | + | let y = x | |
85 | + | wavesBalance(b).available | |
86 | + | } | |
87 | + | else throw("Match error") | |
68 | 88 | } | |
69 | 89 | ||
70 | 90 | ||
71 | - | func y (z,A,B,C,D) = { | |
72 | - | let E = e(z) | |
73 | - | let F = g(split(a(E, "version"), ".")[0]) | |
74 | - | let G = o(B) | |
75 | - | if ((0 > C)) | |
91 | + | func B (C) = { | |
92 | + | let D = fraction(C, 1, l) | |
93 | + | $Tuple2((C - D), D) | |
94 | + | } | |
95 | + | ||
96 | + | ||
97 | + | func E (F) = { | |
98 | + | let G = e(valueOrErrorMessage(getString(this, (("referrer-" + F) + "-address")), (("referrer with name " + F) + " not found"))) | |
99 | + | let H = valueOrElse(getInteger(this, (("referrer-" + F) + "-percent")), q) | |
100 | + | if (if ((0 > H)) | |
101 | + | then true | |
102 | + | else (H > 100)) | |
103 | + | then throw("Incorrect percent rate") | |
104 | + | else $Tuple2(G, H) | |
105 | + | } | |
106 | + | ||
107 | + | ||
108 | + | func I (J,K,L,M,N) = { | |
109 | + | let O = e(J) | |
110 | + | let P = g(split(a(O, "version"), ".")[0]) | |
111 | + | let Q = i(L) | |
112 | + | if ((0 > M)) | |
76 | 113 | then throw("estAmountToReceive must be positive") | |
77 | - | else if (containsElement( | |
114 | + | else if (containsElement(p, J)) | |
78 | 115 | then { | |
79 | - | let | |
80 | - | let | |
81 | - | let | |
82 | - | let | |
83 | - | let | |
84 | - | then ( | |
116 | + | let R = a(O, "A_asset_id") | |
117 | + | let S = a(O, "B_asset_id") | |
118 | + | let T = i(R) | |
119 | + | let U = i(S) | |
120 | + | let V = if (if ((K.assetId == T)) | |
121 | + | then (Q == U) | |
85 | 122 | else false) | |
86 | - | then $Tuple2( | |
87 | - | else if (if (( | |
88 | - | then ( | |
123 | + | then $Tuple2(T, U) | |
124 | + | else if (if ((Q == T)) | |
125 | + | then (K.assetId == U) | |
89 | 126 | else false) | |
90 | - | then $Tuple2( | |
127 | + | then $Tuple2(U, T) | |
91 | 128 | else throw("Unsupported assets pair") | |
92 | - | let | |
93 | - | let | |
94 | - | let | |
129 | + | let W = V._1 | |
130 | + | let X = V._2 | |
131 | + | let Y = if ((P == 1)) | |
95 | 132 | then [1] | |
96 | - | else if (( | |
97 | - | then if ((0 >= | |
133 | + | else if ((P == 2)) | |
134 | + | then if ((0 >= M)) | |
98 | 135 | then throw("estAmountToReceive must be positive") | |
99 | - | else if (if ((0 > | |
136 | + | else if (if ((0 > N)) | |
100 | 137 | then true | |
101 | - | else ( | |
138 | + | else (N > 1000)) | |
102 | 139 | then throw("Slippage tolerance must be non-negative and less than or equal to 1000") | |
103 | 140 | else { | |
104 | - | let | |
105 | - | [ | |
106 | - | then | |
141 | + | let Z = (M - fraction(M, N, 1000)) | |
142 | + | [M, if ((Z > 0)) | |
143 | + | then Z | |
107 | 144 | else 1] | |
108 | 145 | } | |
109 | - | else throw((("Unknown pool version '" + toString( | |
110 | - | let | |
111 | - | if (( | |
146 | + | else throw((("Unknown pool version '" + toString(P)) + "', but 1 or 2 expected")) | |
147 | + | let aa = z(Q) | |
148 | + | if ((aa == aa)) | |
112 | 149 | then { | |
113 | - | let | |
114 | - | if (( | |
150 | + | let ab = invoke(O, "exchange", Y, [K]) | |
151 | + | if ((ab == ab)) | |
115 | 152 | then { | |
116 | - | let | |
117 | - | if (( | |
118 | - | then if ((0 >= | |
153 | + | let ac = (z(Q) - aa) | |
154 | + | if ((ac == ac)) | |
155 | + | then if ((0 >= ac)) | |
119 | 156 | then throw("Received amount from pool must be positive") | |
120 | - | else | |
157 | + | else ac | |
121 | 158 | else throw("Strict value is not equal to itself.") | |
122 | 159 | } | |
123 | 160 | else throw("Strict value is not equal to itself.") | |
124 | 161 | } | |
125 | 162 | else throw("Strict value is not equal to itself.") | |
126 | 163 | } | |
127 | - | else if (containsElement( | |
164 | + | else if (containsElement(u, J)) | |
128 | 165 | then { | |
129 | - | let | |
130 | - | if (( | |
166 | + | let aa = z(Q) | |
167 | + | if ((aa == aa)) | |
131 | 168 | then { | |
132 | - | let | |
133 | - | if (( | |
169 | + | let ab = invoke(O, "swap", [L, 0], [K]) | |
170 | + | if ((ab == ab)) | |
134 | 171 | then { | |
135 | - | let | |
136 | - | if (( | |
137 | - | then if ((0 >= | |
172 | + | let ac = (z(Q) - aa) | |
173 | + | if ((ac == ac)) | |
174 | + | then if ((0 >= ac)) | |
138 | 175 | then throw("Received amount from pool must be positive") | |
139 | - | else | |
176 | + | else ac | |
140 | 177 | else throw("Strict value is not equal to itself.") | |
141 | 178 | } | |
142 | 179 | else throw("Strict value is not equal to itself.") | |
143 | 180 | } | |
144 | 181 | else throw("Strict value is not equal to itself.") | |
145 | 182 | } | |
146 | - | else throw((("There is no pool at address '" + | |
183 | + | else throw((("There is no pool at address '" + J) + "'")) | |
147 | 184 | } | |
148 | 185 | ||
149 | 186 | ||
150 | - | @Callable(T) | |
151 | - | func swap (U,V,W,D,X) = { | |
152 | - | let Y = if ((size(T.payments) > 0)) | |
153 | - | then T.payments[0] | |
187 | + | func ad (ae,af,ag,ah,N,ai) = { | |
188 | + | let aj = if ((size(ae.payments) > 0)) | |
189 | + | then ae.payments[0] | |
154 | 190 | else throw("Payment required") | |
155 | - | let | |
156 | - | let | |
157 | - | let | |
158 | - | func | |
159 | - | then | |
191 | + | let ak = ag[(size(ag) - 1)] | |
192 | + | let al = i(ak) | |
193 | + | let am = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9] | |
194 | + | func an (ao,ap) = if ((ap >= size(af))) | |
195 | + | then ao | |
160 | 196 | else { | |
161 | - | let | |
162 | - | let | |
163 | - | let | |
164 | - | if ($isInstanceOf( | |
197 | + | let L = ag[ap] | |
198 | + | let Q = i(L) | |
199 | + | let x = I(af[ap], ao, L, ah[ap], N) | |
200 | + | if ($isInstanceOf(x, "Int")) | |
165 | 201 | then { | |
166 | - | let | |
167 | - | AttachedPayment( | |
202 | + | let aq = x | |
203 | + | AttachedPayment(Q, aq) | |
168 | 204 | } | |
169 | 205 | else throw("Can't handle swap result") | |
170 | 206 | } | |
171 | 207 | ||
172 | - | let | |
208 | + | let ar = if ((size(af) > 0)) | |
173 | 209 | then { | |
174 | - | let | |
175 | - | let | |
176 | - | let | |
177 | - | func | |
178 | - | then | |
179 | - | else | |
210 | + | let as = am | |
211 | + | let at = size(as) | |
212 | + | let au = aj | |
213 | + | func av (aw,ax) = if ((ax >= at)) | |
214 | + | then aw | |
215 | + | else an(aw, as[ax]) | |
180 | 216 | ||
181 | - | func | |
182 | - | then | |
217 | + | func ay (aw,ax) = if ((ax >= at)) | |
218 | + | then aw | |
183 | 219 | else throw("List size exceeds 10") | |
184 | 220 | ||
185 | - | | |
221 | + | ay(av(av(av(av(av(av(av(av(av(av(au, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10) | |
186 | 222 | } | |
187 | 223 | else throw("Path cannot be empty") | |
188 | - | let | |
189 | - | let | |
190 | - | let | |
191 | - | if ((0 >= | |
192 | - | then throw((("Swap result " + toString( | |
193 | - | else if (( | |
194 | - | then throw(((("Swap result " + toString( | |
195 | - | else [ScriptTransfer( | |
224 | + | let az = B(ar.amount) | |
225 | + | let aA = az._1 | |
226 | + | let D = az._2 | |
227 | + | if ((0 >= ar.amount)) | |
228 | + | then throw((("Swap result " + toString(ar.amount)) + " must be positive")) | |
229 | + | else if ((ai > aA)) | |
230 | + | then throw(((("Swap result " + toString(aA)) + " is less then expected ") + toString(ai))) | |
231 | + | else [ScriptTransfer(ae.caller, aA, al), ScriptTransfer(k, D, al)] | |
196 | 232 | } | |
197 | 233 | ||
198 | 234 | ||
199 | - | ||
200 | - | @Callable(T) | |
201 | - | func swopfiSwap (aq,ar,as,at,au,av) = { | |
202 | - | let Y = if ((size(T.payments) > 0)) | |
203 | - | then T.payments[0] | |
235 | + | func aB (ae,aC,aD,aE,aF,aG,aH) = { | |
236 | + | let aj = if ((size(ae.payments) > 0)) | |
237 | + | then ae.payments[0] | |
204 | 238 | else throw("Payment required") | |
205 | - | let | |
206 | - | let | |
207 | - | let | |
208 | - | let | |
209 | - | let | |
210 | - | if (( | |
239 | + | let aI = valueOrErrorMessage(addressFromString(aC[(size(aC) - 1)]), "Can't parse last exchanger swopfi address") | |
240 | + | let aJ = (split(aG[(size(aG) - 1)], "_")[0] + "_asset_id") | |
241 | + | let ak = valueOrErrorMessage(getString(aI, aJ), ((("Can't read parameter '" + aJ) + "' for exchanger ") + toString(aI))) | |
242 | + | let al = i(ak) | |
243 | + | let aa = z(al) | |
244 | + | if ((aa == aa)) | |
211 | 245 | then { | |
212 | - | let | |
213 | - | if (( | |
246 | + | let ab = invoke(n, "routingTrade", [aC, aD, aE, aF, aG, aH], [aj]) | |
247 | + | if ((ab == ab)) | |
214 | 248 | then { | |
215 | - | let | |
216 | - | if (( | |
249 | + | let aK = z(al) | |
250 | + | if ((aK == aK)) | |
217 | 251 | then { | |
218 | - | let | |
219 | - | let | |
220 | - | let | |
221 | - | let | |
222 | - | if ((0 >= | |
223 | - | then throw((("Swap result " + toString( | |
224 | - | else if (( | |
225 | - | then throw(((("Swap result " + toString( | |
226 | - | else [ScriptTransfer( | |
252 | + | let aL = (aK - aa) | |
253 | + | let aM = B(aL) | |
254 | + | let aA = aM._1 | |
255 | + | let D = aM._2 | |
256 | + | if ((0 >= aL)) | |
257 | + | then throw((("Swap result " + toString(aL)) + " must be positive")) | |
258 | + | else if ((aH > aA)) | |
259 | + | then throw(((("Swap result " + toString(aA)) + " is less then expected ") + toString(aH))) | |
260 | + | else [ScriptTransfer(ae.caller, aA, al), ScriptTransfer(k, D, al)] | |
227 | 261 | } | |
228 | 262 | else throw("Strict value is not equal to itself.") | |
229 | 263 | } | |
233 | 267 | } | |
234 | 268 | ||
235 | 269 | ||
270 | + | func aN (ae,aO,aP) = { | |
271 | + | let aj = if ((size(ae.payments) > 0)) | |
272 | + | then ae.payments[0] | |
273 | + | else throw("Payment required") | |
274 | + | let aQ = split(aO, ",")[(size(split(aO, ",")) - 1)] | |
275 | + | let w = i(aQ) | |
276 | + | let aa = z(w) | |
277 | + | if ((aa == aa)) | |
278 | + | then { | |
279 | + | let ab = invoke(o, "swapWithReferral", [aO, aP, r], [aj]) | |
280 | + | if ((ab == ab)) | |
281 | + | then { | |
282 | + | let aK = z(w) | |
283 | + | if ((aK == aK)) | |
284 | + | then { | |
285 | + | let aR = (aK - aa) | |
286 | + | if ((aR == aR)) | |
287 | + | then [ScriptTransfer(ae.caller, aR, w)] | |
288 | + | else throw("Strict value is not equal to itself.") | |
289 | + | } | |
290 | + | else throw("Strict value is not equal to itself.") | |
291 | + | } | |
292 | + | else throw("Strict value is not equal to itself.") | |
293 | + | } | |
294 | + | else throw("Strict value is not equal to itself.") | |
295 | + | } | |
236 | 296 | ||
237 | - | @Callable(T) | |
238 | - | func addPools (aB) = { | |
239 | - | func aC (m,z) = if (containsElement(m, z)) | |
240 | - | then throw((("Pool '" + z) + "' is already added")) | |
241 | - | else (m :+ toString(e(z))) | |
242 | 297 | ||
243 | - | if (!(containsElement([this, i], T.caller))) | |
298 | + | @Callable(ae) | |
299 | + | func swap (af,ag,ah,N,ai) = ad(ae, af, ag, ah, N, ai) | |
300 | + | ||
301 | + | ||
302 | + | ||
303 | + | @Callable(ae) | |
304 | + | func swapWithReferrer (af,ag,ah,N,ai,F) = if ((size(F) == 0)) | |
305 | + | then throw("Referrer name invalid") | |
306 | + | else { | |
307 | + | let ak = ag[(size(ag) - 1)] | |
308 | + | let w = i(ak) | |
309 | + | let aS = E(F) | |
310 | + | let aT = aS._1 | |
311 | + | let aU = aS._2 | |
312 | + | let ab = ad(ae, af, ag, ah, N, ai) | |
313 | + | if ((ab == ab)) | |
314 | + | then { | |
315 | + | let aV = ab[1].amount | |
316 | + | let aW = fraction(aV, aU, 100) | |
317 | + | [ab[0], ScriptTransfer(k, (aV - aW), w), ScriptTransfer(aT, aW, w)] | |
318 | + | } | |
319 | + | else throw("Strict value is not equal to itself.") | |
320 | + | } | |
321 | + | ||
322 | + | ||
323 | + | ||
324 | + | @Callable(ae) | |
325 | + | func swopfiSwap (aC,aD,aE,aF,aG,aH) = aB(ae, aC, aD, aE, aF, aG, aH) | |
326 | + | ||
327 | + | ||
328 | + | ||
329 | + | @Callable(ae) | |
330 | + | func swopfiSwapWithReferrer (aC,aD,aE,aF,aG,aH,F) = if ((size(F) == 0)) | |
331 | + | then throw("Referrer name invalid") | |
332 | + | else { | |
333 | + | let aI = valueOrErrorMessage(addressFromString(aC[(size(aC) - 1)]), "Can't parse last exchanger swopfi address") | |
334 | + | let aJ = (split(aG[(size(aG) - 1)], "_")[0] + "_asset_id") | |
335 | + | let ak = valueOrErrorMessage(getString(aI, aJ), ((("Can't read parameter '" + aJ) + "' for exchanger ") + toString(aI))) | |
336 | + | let w = i(ak) | |
337 | + | let aX = E(F) | |
338 | + | let aT = aX._1 | |
339 | + | let aU = aX._2 | |
340 | + | let ab = aB(ae, aC, aD, aE, aF, aG, aH) | |
341 | + | if ((ab == ab)) | |
342 | + | then { | |
343 | + | let aV = ab[1].amount | |
344 | + | let aW = fraction(aV, aU, 100) | |
345 | + | [ab[0], ScriptTransfer(k, (aV - aW), w), ScriptTransfer(aT, aW, w)] | |
346 | + | } | |
347 | + | else throw("Strict value is not equal to itself.") | |
348 | + | } | |
349 | + | ||
350 | + | ||
351 | + | ||
352 | + | @Callable(ae) | |
353 | + | func puzzleSwap (aO,aP) = aN(ae, aO, aP) | |
354 | + | ||
355 | + | ||
356 | + | ||
357 | + | @Callable(ae) | |
358 | + | func puzzleSwapWithReferrer (aO,aP,F) = if ((size(aO) == 0)) | |
359 | + | then throw("Invalid routing") | |
360 | + | else if ((0 >= aP)) | |
361 | + | then throw("Sum to receive is to low") | |
362 | + | else if ((size(F) == 0)) | |
363 | + | then throw("Referrer name is invalid") | |
364 | + | else { | |
365 | + | let aQ = split(aO, ",")[(size(split(aO, ",")) - 1)] | |
366 | + | let w = i(aQ) | |
367 | + | let aY = E(F) | |
368 | + | let aT = aY._1 | |
369 | + | let aU = aY._2 | |
370 | + | let aa = A(k, t) | |
371 | + | if ((aa == aa)) | |
372 | + | then { | |
373 | + | let ab = aN(ae, aO, aP) | |
374 | + | if ((ab == ab)) | |
375 | + | then { | |
376 | + | let aK = A(k, t) | |
377 | + | if ((aK == aK)) | |
378 | + | then { | |
379 | + | let aL = (aK - aa) | |
380 | + | if ((aL == aL)) | |
381 | + | then { | |
382 | + | let aZ = fraction(aL, aU, 100) | |
383 | + | let ba = invoke(k, "claimReferrerReward", [aZ, s], nil) | |
384 | + | if ((ba == ba)) | |
385 | + | then (ab :+ ScriptTransfer(aT, aZ, t)) | |
386 | + | else throw("Strict value is not equal to itself.") | |
387 | + | } | |
388 | + | else throw("Strict value is not equal to itself.") | |
389 | + | } | |
390 | + | else throw("Strict value is not equal to itself.") | |
391 | + | } | |
392 | + | else throw("Strict value is not equal to itself.") | |
393 | + | } | |
394 | + | else throw("Strict value is not equal to itself.") | |
395 | + | } | |
396 | + | ||
397 | + | ||
398 | + | ||
399 | + | @Callable(ae) | |
400 | + | func addPools (bb) = { | |
401 | + | func bc (p,J) = if (containsElement(p, J)) | |
402 | + | then throw((("Pool '" + J) + "' is already added")) | |
403 | + | else (p :+ toString(e(J))) | |
404 | + | ||
405 | + | if (!(containsElement([this, k], ae.caller))) | |
244 | 406 | then throw("only self calls or by collector are allowed") | |
245 | 407 | else [StringEntry("p-pools", makeString({ | |
246 | - | let | |
247 | - | let | |
248 | - | let | |
249 | - | func | |
250 | - | then | |
251 | - | else | |
408 | + | let as = bb | |
409 | + | let at = size(as) | |
410 | + | let au = u | |
411 | + | func av (aw,ax) = if ((ax >= at)) | |
412 | + | then aw | |
413 | + | else bc(aw, as[ax]) | |
252 | 414 | ||
253 | - | func | |
254 | - | then | |
415 | + | func ay (aw,ax) = if ((ax >= at)) | |
416 | + | then aw | |
255 | 417 | else throw("List size exceeds 10") | |
256 | 418 | ||
257 | - | | |
419 | + | ay(av(av(av(av(av(av(av(av(av(av(au, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10) | |
258 | 420 | }, ","))] | |
421 | + | } | |
422 | + | ||
423 | + | ||
424 | + | ||
425 | + | @Callable(ae) | |
426 | + | func addReferer (F,bd,be) = { | |
427 | + | let b = e(bd) | |
428 | + | if (if ((0 > be)) | |
429 | + | then true | |
430 | + | else (be > 100)) | |
431 | + | then throw("Incorrect percent rate") | |
432 | + | else if ((size(F) == 0)) | |
433 | + | then throw("Referrer name invalid") | |
434 | + | else if (!(containsElement([this, k], ae.caller))) | |
435 | + | then throw("only self calls or by collector are allowed") | |
436 | + | else [StringEntry((("referrer-" + F) + "-address"), bd), IntegerEntry((("referrer-" + F) + "-percent"), be)] | |
259 | 437 | } | |
260 | 438 | ||
261 | 439 |
Old | New | Differences | |
---|---|---|---|
1 | 1 | {-# STDLIB_VERSION 5 #-} | |
2 | 2 | {-# SCRIPT_TYPE ACCOUNT #-} | |
3 | 3 | {-# CONTENT_TYPE DAPP #-} | |
4 | 4 | func a (b,c) = valueOrErrorMessage(getString(b, c), ((("Can't read '" + c) + "' at address ") + toString(b))) | |
5 | 5 | ||
6 | 6 | ||
7 | 7 | func d (b,c) = valueOrErrorMessage(getInteger(b, c), ((("Can't read '" + c) + "' at address ") + toString(b))) | |
8 | 8 | ||
9 | 9 | ||
10 | 10 | func e (f) = valueOrErrorMessage(addressFromString(f), (("Can't parse address from '" + f) + "'")) | |
11 | 11 | ||
12 | 12 | ||
13 | 13 | func g (h) = valueOrErrorMessage(parseInt(h), (("Can't parse integer from '" + h) + "'")) | |
14 | 14 | ||
15 | 15 | ||
16 | - | let i = e(a(this, "collector")) | |
17 | - | ||
18 | - | let j = d(this, "fee-rate") | |
19 | - | ||
20 | - | let k = e(a(this, "oracle")) | |
21 | - | ||
22 | - | let l = e(a(this, "swopfi-routing")) | |
23 | - | ||
24 | - | let m = split(a(k, "pools"), ",") | |
25 | - | ||
26 | - | let n = split(a(this, "p-pools"), ",") | |
27 | - | ||
28 | - | func o (p) = if ((p == "WAVES")) | |
16 | + | func i (j) = if ((j == "WAVES")) | |
29 | 17 | then unit | |
30 | - | else fromBase58String( | |
18 | + | else fromBase58String(j) | |
31 | 19 | ||
32 | 20 | ||
33 | - | func q (r) = { | |
34 | - | let s = r | |
35 | - | if ($isInstanceOf(s, "ByteVector")) | |
21 | + | let k = e(a(this, "collector")) | |
22 | + | ||
23 | + | let l = d(this, "fee-rate") | |
24 | + | ||
25 | + | let m = e(a(this, "oracle")) | |
26 | + | ||
27 | + | let n = e(a(this, "swopfi-routing")) | |
28 | + | ||
29 | + | let o = e(a(this, "puzzle-routing")) | |
30 | + | ||
31 | + | let p = split(a(m, "pools"), ",") | |
32 | + | ||
33 | + | let q = d(this, "percent-rate") | |
34 | + | ||
35 | + | let r = "keeper" | |
36 | + | ||
37 | + | let s = a(this, "puzzle-reward-token") | |
38 | + | ||
39 | + | let t = i(s) | |
40 | + | ||
41 | + | let u = split(a(this, "p-pools"), ",") | |
42 | + | ||
43 | + | func v (w) = { | |
44 | + | let x = w | |
45 | + | if ($isInstanceOf(x, "ByteVector")) | |
36 | 46 | then { | |
37 | - | let | |
38 | - | toBase58String( | |
47 | + | let j = x | |
48 | + | toBase58String(j) | |
39 | 49 | } | |
40 | - | else if ($isInstanceOf( | |
50 | + | else if ($isInstanceOf(x, "Unit")) | |
41 | 51 | then { | |
42 | - | let | |
52 | + | let y = x | |
43 | 53 | "WAVES" | |
44 | 54 | } | |
45 | 55 | else throw("Match error") | |
46 | 56 | } | |
47 | 57 | ||
48 | 58 | ||
49 | - | func | |
50 | - | let | |
51 | - | if ($isInstanceOf( | |
59 | + | func z (w) = { | |
60 | + | let x = w | |
61 | + | if ($isInstanceOf(x, "ByteVector")) | |
52 | 62 | then { | |
53 | - | let | |
54 | - | assetBalance(this, | |
63 | + | let j = x | |
64 | + | assetBalance(this, j) | |
55 | 65 | } | |
56 | - | else if ($isInstanceOf( | |
66 | + | else if ($isInstanceOf(x, "Unit")) | |
57 | 67 | then { | |
58 | - | let | |
68 | + | let y = x | |
59 | 69 | wavesBalance(this).available | |
60 | 70 | } | |
61 | 71 | else throw("Match error") | |
62 | 72 | } | |
63 | 73 | ||
64 | 74 | ||
65 | - | func v (w) = { | |
66 | - | let x = fraction(w, 1, j) | |
67 | - | $Tuple2((w - x), x) | |
75 | + | func A (b,w) = { | |
76 | + | let x = w | |
77 | + | if ($isInstanceOf(x, "ByteVector")) | |
78 | + | then { | |
79 | + | let j = x | |
80 | + | assetBalance(b, j) | |
81 | + | } | |
82 | + | else if ($isInstanceOf(x, "Unit")) | |
83 | + | then { | |
84 | + | let y = x | |
85 | + | wavesBalance(b).available | |
86 | + | } | |
87 | + | else throw("Match error") | |
68 | 88 | } | |
69 | 89 | ||
70 | 90 | ||
71 | - | func y (z,A,B,C,D) = { | |
72 | - | let E = e(z) | |
73 | - | let F = g(split(a(E, "version"), ".")[0]) | |
74 | - | let G = o(B) | |
75 | - | if ((0 > C)) | |
91 | + | func B (C) = { | |
92 | + | let D = fraction(C, 1, l) | |
93 | + | $Tuple2((C - D), D) | |
94 | + | } | |
95 | + | ||
96 | + | ||
97 | + | func E (F) = { | |
98 | + | let G = e(valueOrErrorMessage(getString(this, (("referrer-" + F) + "-address")), (("referrer with name " + F) + " not found"))) | |
99 | + | let H = valueOrElse(getInteger(this, (("referrer-" + F) + "-percent")), q) | |
100 | + | if (if ((0 > H)) | |
101 | + | then true | |
102 | + | else (H > 100)) | |
103 | + | then throw("Incorrect percent rate") | |
104 | + | else $Tuple2(G, H) | |
105 | + | } | |
106 | + | ||
107 | + | ||
108 | + | func I (J,K,L,M,N) = { | |
109 | + | let O = e(J) | |
110 | + | let P = g(split(a(O, "version"), ".")[0]) | |
111 | + | let Q = i(L) | |
112 | + | if ((0 > M)) | |
76 | 113 | then throw("estAmountToReceive must be positive") | |
77 | - | else if (containsElement( | |
114 | + | else if (containsElement(p, J)) | |
78 | 115 | then { | |
79 | - | let | |
80 | - | let | |
81 | - | let | |
82 | - | let | |
83 | - | let | |
84 | - | then ( | |
116 | + | let R = a(O, "A_asset_id") | |
117 | + | let S = a(O, "B_asset_id") | |
118 | + | let T = i(R) | |
119 | + | let U = i(S) | |
120 | + | let V = if (if ((K.assetId == T)) | |
121 | + | then (Q == U) | |
85 | 122 | else false) | |
86 | - | then $Tuple2( | |
87 | - | else if (if (( | |
88 | - | then ( | |
123 | + | then $Tuple2(T, U) | |
124 | + | else if (if ((Q == T)) | |
125 | + | then (K.assetId == U) | |
89 | 126 | else false) | |
90 | - | then $Tuple2( | |
127 | + | then $Tuple2(U, T) | |
91 | 128 | else throw("Unsupported assets pair") | |
92 | - | let | |
93 | - | let | |
94 | - | let | |
129 | + | let W = V._1 | |
130 | + | let X = V._2 | |
131 | + | let Y = if ((P == 1)) | |
95 | 132 | then [1] | |
96 | - | else if (( | |
97 | - | then if ((0 >= | |
133 | + | else if ((P == 2)) | |
134 | + | then if ((0 >= M)) | |
98 | 135 | then throw("estAmountToReceive must be positive") | |
99 | - | else if (if ((0 > | |
136 | + | else if (if ((0 > N)) | |
100 | 137 | then true | |
101 | - | else ( | |
138 | + | else (N > 1000)) | |
102 | 139 | then throw("Slippage tolerance must be non-negative and less than or equal to 1000") | |
103 | 140 | else { | |
104 | - | let | |
105 | - | [ | |
106 | - | then | |
141 | + | let Z = (M - fraction(M, N, 1000)) | |
142 | + | [M, if ((Z > 0)) | |
143 | + | then Z | |
107 | 144 | else 1] | |
108 | 145 | } | |
109 | - | else throw((("Unknown pool version '" + toString( | |
110 | - | let | |
111 | - | if (( | |
146 | + | else throw((("Unknown pool version '" + toString(P)) + "', but 1 or 2 expected")) | |
147 | + | let aa = z(Q) | |
148 | + | if ((aa == aa)) | |
112 | 149 | then { | |
113 | - | let | |
114 | - | if (( | |
150 | + | let ab = invoke(O, "exchange", Y, [K]) | |
151 | + | if ((ab == ab)) | |
115 | 152 | then { | |
116 | - | let | |
117 | - | if (( | |
118 | - | then if ((0 >= | |
153 | + | let ac = (z(Q) - aa) | |
154 | + | if ((ac == ac)) | |
155 | + | then if ((0 >= ac)) | |
119 | 156 | then throw("Received amount from pool must be positive") | |
120 | - | else | |
157 | + | else ac | |
121 | 158 | else throw("Strict value is not equal to itself.") | |
122 | 159 | } | |
123 | 160 | else throw("Strict value is not equal to itself.") | |
124 | 161 | } | |
125 | 162 | else throw("Strict value is not equal to itself.") | |
126 | 163 | } | |
127 | - | else if (containsElement( | |
164 | + | else if (containsElement(u, J)) | |
128 | 165 | then { | |
129 | - | let | |
130 | - | if (( | |
166 | + | let aa = z(Q) | |
167 | + | if ((aa == aa)) | |
131 | 168 | then { | |
132 | - | let | |
133 | - | if (( | |
169 | + | let ab = invoke(O, "swap", [L, 0], [K]) | |
170 | + | if ((ab == ab)) | |
134 | 171 | then { | |
135 | - | let | |
136 | - | if (( | |
137 | - | then if ((0 >= | |
172 | + | let ac = (z(Q) - aa) | |
173 | + | if ((ac == ac)) | |
174 | + | then if ((0 >= ac)) | |
138 | 175 | then throw("Received amount from pool must be positive") | |
139 | - | else | |
176 | + | else ac | |
140 | 177 | else throw("Strict value is not equal to itself.") | |
141 | 178 | } | |
142 | 179 | else throw("Strict value is not equal to itself.") | |
143 | 180 | } | |
144 | 181 | else throw("Strict value is not equal to itself.") | |
145 | 182 | } | |
146 | - | else throw((("There is no pool at address '" + | |
183 | + | else throw((("There is no pool at address '" + J) + "'")) | |
147 | 184 | } | |
148 | 185 | ||
149 | 186 | ||
150 | - | @Callable(T) | |
151 | - | func swap (U,V,W,D,X) = { | |
152 | - | let Y = if ((size(T.payments) > 0)) | |
153 | - | then T.payments[0] | |
187 | + | func ad (ae,af,ag,ah,N,ai) = { | |
188 | + | let aj = if ((size(ae.payments) > 0)) | |
189 | + | then ae.payments[0] | |
154 | 190 | else throw("Payment required") | |
155 | - | let | |
156 | - | let | |
157 | - | let | |
158 | - | func | |
159 | - | then | |
191 | + | let ak = ag[(size(ag) - 1)] | |
192 | + | let al = i(ak) | |
193 | + | let am = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9] | |
194 | + | func an (ao,ap) = if ((ap >= size(af))) | |
195 | + | then ao | |
160 | 196 | else { | |
161 | - | let | |
162 | - | let | |
163 | - | let | |
164 | - | if ($isInstanceOf( | |
197 | + | let L = ag[ap] | |
198 | + | let Q = i(L) | |
199 | + | let x = I(af[ap], ao, L, ah[ap], N) | |
200 | + | if ($isInstanceOf(x, "Int")) | |
165 | 201 | then { | |
166 | - | let | |
167 | - | AttachedPayment( | |
202 | + | let aq = x | |
203 | + | AttachedPayment(Q, aq) | |
168 | 204 | } | |
169 | 205 | else throw("Can't handle swap result") | |
170 | 206 | } | |
171 | 207 | ||
172 | - | let | |
208 | + | let ar = if ((size(af) > 0)) | |
173 | 209 | then { | |
174 | - | let | |
175 | - | let | |
176 | - | let | |
177 | - | func | |
178 | - | then | |
179 | - | else | |
210 | + | let as = am | |
211 | + | let at = size(as) | |
212 | + | let au = aj | |
213 | + | func av (aw,ax) = if ((ax >= at)) | |
214 | + | then aw | |
215 | + | else an(aw, as[ax]) | |
180 | 216 | ||
181 | - | func | |
182 | - | then | |
217 | + | func ay (aw,ax) = if ((ax >= at)) | |
218 | + | then aw | |
183 | 219 | else throw("List size exceeds 10") | |
184 | 220 | ||
185 | - | | |
221 | + | ay(av(av(av(av(av(av(av(av(av(av(au, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10) | |
186 | 222 | } | |
187 | 223 | else throw("Path cannot be empty") | |
188 | - | let | |
189 | - | let | |
190 | - | let | |
191 | - | if ((0 >= | |
192 | - | then throw((("Swap result " + toString( | |
193 | - | else if (( | |
194 | - | then throw(((("Swap result " + toString( | |
195 | - | else [ScriptTransfer( | |
224 | + | let az = B(ar.amount) | |
225 | + | let aA = az._1 | |
226 | + | let D = az._2 | |
227 | + | if ((0 >= ar.amount)) | |
228 | + | then throw((("Swap result " + toString(ar.amount)) + " must be positive")) | |
229 | + | else if ((ai > aA)) | |
230 | + | then throw(((("Swap result " + toString(aA)) + " is less then expected ") + toString(ai))) | |
231 | + | else [ScriptTransfer(ae.caller, aA, al), ScriptTransfer(k, D, al)] | |
196 | 232 | } | |
197 | 233 | ||
198 | 234 | ||
199 | - | ||
200 | - | @Callable(T) | |
201 | - | func swopfiSwap (aq,ar,as,at,au,av) = { | |
202 | - | let Y = if ((size(T.payments) > 0)) | |
203 | - | then T.payments[0] | |
235 | + | func aB (ae,aC,aD,aE,aF,aG,aH) = { | |
236 | + | let aj = if ((size(ae.payments) > 0)) | |
237 | + | then ae.payments[0] | |
204 | 238 | else throw("Payment required") | |
205 | - | let | |
206 | - | let | |
207 | - | let | |
208 | - | let | |
209 | - | let | |
210 | - | if (( | |
239 | + | let aI = valueOrErrorMessage(addressFromString(aC[(size(aC) - 1)]), "Can't parse last exchanger swopfi address") | |
240 | + | let aJ = (split(aG[(size(aG) - 1)], "_")[0] + "_asset_id") | |
241 | + | let ak = valueOrErrorMessage(getString(aI, aJ), ((("Can't read parameter '" + aJ) + "' for exchanger ") + toString(aI))) | |
242 | + | let al = i(ak) | |
243 | + | let aa = z(al) | |
244 | + | if ((aa == aa)) | |
211 | 245 | then { | |
212 | - | let | |
213 | - | if (( | |
246 | + | let ab = invoke(n, "routingTrade", [aC, aD, aE, aF, aG, aH], [aj]) | |
247 | + | if ((ab == ab)) | |
214 | 248 | then { | |
215 | - | let | |
216 | - | if (( | |
249 | + | let aK = z(al) | |
250 | + | if ((aK == aK)) | |
217 | 251 | then { | |
218 | - | let | |
219 | - | let | |
220 | - | let | |
221 | - | let | |
222 | - | if ((0 >= | |
223 | - | then throw((("Swap result " + toString( | |
224 | - | else if (( | |
225 | - | then throw(((("Swap result " + toString( | |
226 | - | else [ScriptTransfer( | |
252 | + | let aL = (aK - aa) | |
253 | + | let aM = B(aL) | |
254 | + | let aA = aM._1 | |
255 | + | let D = aM._2 | |
256 | + | if ((0 >= aL)) | |
257 | + | then throw((("Swap result " + toString(aL)) + " must be positive")) | |
258 | + | else if ((aH > aA)) | |
259 | + | then throw(((("Swap result " + toString(aA)) + " is less then expected ") + toString(aH))) | |
260 | + | else [ScriptTransfer(ae.caller, aA, al), ScriptTransfer(k, D, al)] | |
227 | 261 | } | |
228 | 262 | else throw("Strict value is not equal to itself.") | |
229 | 263 | } | |
230 | 264 | else throw("Strict value is not equal to itself.") | |
231 | 265 | } | |
232 | 266 | else throw("Strict value is not equal to itself.") | |
233 | 267 | } | |
234 | 268 | ||
235 | 269 | ||
270 | + | func aN (ae,aO,aP) = { | |
271 | + | let aj = if ((size(ae.payments) > 0)) | |
272 | + | then ae.payments[0] | |
273 | + | else throw("Payment required") | |
274 | + | let aQ = split(aO, ",")[(size(split(aO, ",")) - 1)] | |
275 | + | let w = i(aQ) | |
276 | + | let aa = z(w) | |
277 | + | if ((aa == aa)) | |
278 | + | then { | |
279 | + | let ab = invoke(o, "swapWithReferral", [aO, aP, r], [aj]) | |
280 | + | if ((ab == ab)) | |
281 | + | then { | |
282 | + | let aK = z(w) | |
283 | + | if ((aK == aK)) | |
284 | + | then { | |
285 | + | let aR = (aK - aa) | |
286 | + | if ((aR == aR)) | |
287 | + | then [ScriptTransfer(ae.caller, aR, w)] | |
288 | + | else throw("Strict value is not equal to itself.") | |
289 | + | } | |
290 | + | else throw("Strict value is not equal to itself.") | |
291 | + | } | |
292 | + | else throw("Strict value is not equal to itself.") | |
293 | + | } | |
294 | + | else throw("Strict value is not equal to itself.") | |
295 | + | } | |
236 | 296 | ||
237 | - | @Callable(T) | |
238 | - | func addPools (aB) = { | |
239 | - | func aC (m,z) = if (containsElement(m, z)) | |
240 | - | then throw((("Pool '" + z) + "' is already added")) | |
241 | - | else (m :+ toString(e(z))) | |
242 | 297 | ||
243 | - | if (!(containsElement([this, i], T.caller))) | |
298 | + | @Callable(ae) | |
299 | + | func swap (af,ag,ah,N,ai) = ad(ae, af, ag, ah, N, ai) | |
300 | + | ||
301 | + | ||
302 | + | ||
303 | + | @Callable(ae) | |
304 | + | func swapWithReferrer (af,ag,ah,N,ai,F) = if ((size(F) == 0)) | |
305 | + | then throw("Referrer name invalid") | |
306 | + | else { | |
307 | + | let ak = ag[(size(ag) - 1)] | |
308 | + | let w = i(ak) | |
309 | + | let aS = E(F) | |
310 | + | let aT = aS._1 | |
311 | + | let aU = aS._2 | |
312 | + | let ab = ad(ae, af, ag, ah, N, ai) | |
313 | + | if ((ab == ab)) | |
314 | + | then { | |
315 | + | let aV = ab[1].amount | |
316 | + | let aW = fraction(aV, aU, 100) | |
317 | + | [ab[0], ScriptTransfer(k, (aV - aW), w), ScriptTransfer(aT, aW, w)] | |
318 | + | } | |
319 | + | else throw("Strict value is not equal to itself.") | |
320 | + | } | |
321 | + | ||
322 | + | ||
323 | + | ||
324 | + | @Callable(ae) | |
325 | + | func swopfiSwap (aC,aD,aE,aF,aG,aH) = aB(ae, aC, aD, aE, aF, aG, aH) | |
326 | + | ||
327 | + | ||
328 | + | ||
329 | + | @Callable(ae) | |
330 | + | func swopfiSwapWithReferrer (aC,aD,aE,aF,aG,aH,F) = if ((size(F) == 0)) | |
331 | + | then throw("Referrer name invalid") | |
332 | + | else { | |
333 | + | let aI = valueOrErrorMessage(addressFromString(aC[(size(aC) - 1)]), "Can't parse last exchanger swopfi address") | |
334 | + | let aJ = (split(aG[(size(aG) - 1)], "_")[0] + "_asset_id") | |
335 | + | let ak = valueOrErrorMessage(getString(aI, aJ), ((("Can't read parameter '" + aJ) + "' for exchanger ") + toString(aI))) | |
336 | + | let w = i(ak) | |
337 | + | let aX = E(F) | |
338 | + | let aT = aX._1 | |
339 | + | let aU = aX._2 | |
340 | + | let ab = aB(ae, aC, aD, aE, aF, aG, aH) | |
341 | + | if ((ab == ab)) | |
342 | + | then { | |
343 | + | let aV = ab[1].amount | |
344 | + | let aW = fraction(aV, aU, 100) | |
345 | + | [ab[0], ScriptTransfer(k, (aV - aW), w), ScriptTransfer(aT, aW, w)] | |
346 | + | } | |
347 | + | else throw("Strict value is not equal to itself.") | |
348 | + | } | |
349 | + | ||
350 | + | ||
351 | + | ||
352 | + | @Callable(ae) | |
353 | + | func puzzleSwap (aO,aP) = aN(ae, aO, aP) | |
354 | + | ||
355 | + | ||
356 | + | ||
357 | + | @Callable(ae) | |
358 | + | func puzzleSwapWithReferrer (aO,aP,F) = if ((size(aO) == 0)) | |
359 | + | then throw("Invalid routing") | |
360 | + | else if ((0 >= aP)) | |
361 | + | then throw("Sum to receive is to low") | |
362 | + | else if ((size(F) == 0)) | |
363 | + | then throw("Referrer name is invalid") | |
364 | + | else { | |
365 | + | let aQ = split(aO, ",")[(size(split(aO, ",")) - 1)] | |
366 | + | let w = i(aQ) | |
367 | + | let aY = E(F) | |
368 | + | let aT = aY._1 | |
369 | + | let aU = aY._2 | |
370 | + | let aa = A(k, t) | |
371 | + | if ((aa == aa)) | |
372 | + | then { | |
373 | + | let ab = aN(ae, aO, aP) | |
374 | + | if ((ab == ab)) | |
375 | + | then { | |
376 | + | let aK = A(k, t) | |
377 | + | if ((aK == aK)) | |
378 | + | then { | |
379 | + | let aL = (aK - aa) | |
380 | + | if ((aL == aL)) | |
381 | + | then { | |
382 | + | let aZ = fraction(aL, aU, 100) | |
383 | + | let ba = invoke(k, "claimReferrerReward", [aZ, s], nil) | |
384 | + | if ((ba == ba)) | |
385 | + | then (ab :+ ScriptTransfer(aT, aZ, t)) | |
386 | + | else throw("Strict value is not equal to itself.") | |
387 | + | } | |
388 | + | else throw("Strict value is not equal to itself.") | |
389 | + | } | |
390 | + | else throw("Strict value is not equal to itself.") | |
391 | + | } | |
392 | + | else throw("Strict value is not equal to itself.") | |
393 | + | } | |
394 | + | else throw("Strict value is not equal to itself.") | |
395 | + | } | |
396 | + | ||
397 | + | ||
398 | + | ||
399 | + | @Callable(ae) | |
400 | + | func addPools (bb) = { | |
401 | + | func bc (p,J) = if (containsElement(p, J)) | |
402 | + | then throw((("Pool '" + J) + "' is already added")) | |
403 | + | else (p :+ toString(e(J))) | |
404 | + | ||
405 | + | if (!(containsElement([this, k], ae.caller))) | |
244 | 406 | then throw("only self calls or by collector are allowed") | |
245 | 407 | else [StringEntry("p-pools", makeString({ | |
246 | - | let | |
247 | - | let | |
248 | - | let | |
249 | - | func | |
250 | - | then | |
251 | - | else | |
408 | + | let as = bb | |
409 | + | let at = size(as) | |
410 | + | let au = u | |
411 | + | func av (aw,ax) = if ((ax >= at)) | |
412 | + | then aw | |
413 | + | else bc(aw, as[ax]) | |
252 | 414 | ||
253 | - | func | |
254 | - | then | |
415 | + | func ay (aw,ax) = if ((ax >= at)) | |
416 | + | then aw | |
255 | 417 | else throw("List size exceeds 10") | |
256 | 418 | ||
257 | - | | |
419 | + | ay(av(av(av(av(av(av(av(av(av(av(au, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10) | |
258 | 420 | }, ","))] | |
421 | + | } | |
422 | + | ||
423 | + | ||
424 | + | ||
425 | + | @Callable(ae) | |
426 | + | func addReferer (F,bd,be) = { | |
427 | + | let b = e(bd) | |
428 | + | if (if ((0 > be)) | |
429 | + | then true | |
430 | + | else (be > 100)) | |
431 | + | then throw("Incorrect percent rate") | |
432 | + | else if ((size(F) == 0)) | |
433 | + | then throw("Referrer name invalid") | |
434 | + | else if (!(containsElement([this, k], ae.caller))) | |
435 | + | then throw("only self calls or by collector are allowed") | |
436 | + | else [StringEntry((("referrer-" + F) + "-address"), bd), IntegerEntry((("referrer-" + F) + "-percent"), be)] | |
259 | 437 | } | |
260 | 438 | ||
261 | 439 |
github/deemru/w8io/0e76f2f 186.62 ms ◑![]()