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+8AAAABBQAAAAdhZGRyZXNzAAAACWF2YWlsYWJsZQkAAAIAAAABAgAAAAtNYXRjaCBlcnJvcgEAAAAJZGVkdWN0RmVlAAAAAQAAAAZhbW91bnQEAAAAA2ZlZQkAAGsAAAADBQAAAAZhbW91bnQAAAAAAAAAAAEFAAAAB2ZlZVJhdGUJAAUUAAAAAgkAAGUAAAACBQAAAAZhbW91bnQFAAAAA2ZlZQUAAAADZmVlAQAAAA9nZXRSZWZlcnJlckRhdGEAAAABAAAADHJlZmVycmVyTmFtZQQAAAAKcmVmQWRkcmVzcwkBAAAAE3BhcnNlQWRkcmVzc09yVGhyb3cAAAABCQEAAAATdmFsdWVPckVycm9yTWVzc2FnZQAAAAIJAAQdAAAAAgUAAAAEdGhpcwkAASwAAAACCQABLAAAAAICAAAACXJlZmVycmVyLQUAAAAMcmVmZXJyZXJOYW1lAgAAAAgtYWRkcmVzcwkAASwAAAACCQABLAAAAAICAAAAE3JlZmVycmVyIHdpdGggbmFtZSAFAAAADHJlZmVycmVyTmFtZQIAAAAKIG5vdCBmb3VuZAQAAAAKcmVmUGVyY2VudAkBAAAAC3ZhbHVlT3JFbHNlAAAAAgkABBoAAAACBQAAAAR0aGlzCQABLAAAAAIJAAEsAAAAAgIAAAAJcmVmZXJyZXItBQAAAAxyZWZlcnJlck5hbWUCAAAACC1wZXJjZW50BQAAAAtwZXJjZW50UmF0ZQMDCQAAZgAAAAIAAAAAAAAAAAAFAAAACnJlZlBlcmNlbnQGCQAAZgAAAAIFAAAACnJlZlBlcmNlbnQAAAAAAAAAAGQJAAACAAAAAQIAAAAWSW5jb3JyZWN0IHBlcmNlbnQgcmF0ZQkABRQAAAACBQAAAApyZWZBZGRyZXNzBQAAAApyZWZQZXJjZW50AQAAAAZkb1N3YXAAAAAFAAAABHBvb2wAAAAHcGF5bWVudAAAAA1hc3NldFJlY2VpdmVkAAAAEmVzdEFtb3VudFRvUmVjZWl2ZQAAABFzbGlwcGFnZVRvbGVyYW5jZQQAAAALcG9vbEFkZHJlc3MJAQAAABNwYXJzZUFkZHJlc3NPclRocm93AAAAAQUAAAAEcG9vbAQAAAAMdmVyc2lvbk1ham9yCQEAAAAPcGFyc2VJbnRPclRocm93AAAAAQkAAZEAAAACCQAEtQAAAAIJAQAAABBnZXRTdHJpbmdPclRocm93AAAAAgUAAAALcG9vbEFkZHJlc3MCAAAAB3ZlcnNpb24CAAAAAS4AAAAAAAAAAAAEAAAAD2Fzc2V0UmVjZWl2ZWRJZAkBAAAACmdldEFzc2V0SWQAAAABBQAAAA1hc3NldFJlY2VpdmVkAwkAAGYAAAACAAAAAAAAAAAABQAAABJlc3RBbW91bnRUb1JlY2VpdmUJAAACAAAAAQIAAAAjZXN0QW1vdW50VG9SZWNlaXZlIG11c3QgYmUgcG9zaXRpdmUDCQEAAAAPY29udGFpbnNFbGVtZW50AAAAAgUAAAAFcG9vbHMFAAAABHBvb2wEAAAACnBvb2xBc3NldEEJAQAAABBnZXRTdHJpbmdPclRocm93AAAAAgUAAAALcG9vbEFkZHJlc3MCAAAACkFfYXNzZXRfaWQEAAAACnBvb2xBc3NldEIJAQAAABBnZXRTdHJpbmdPclRocm93AAAAAgUAAAALcG9vbEFkZHJlc3MCAAAACkJfYXNzZXRfaWQEAAAADHBvb2xBc3NldElkQQkBAAAACmdldEFzc2V0SWQAAAABBQAAAApwb29sQXNzZXRBBAAAAAxwb29sQXNzZXRJZEIJAQAAAApnZXRBc3NldElkAAAAAQUAAAAKcG9vbEFzc2V0QgQAAAALJHQwMzI4NzM2MzEDAwkAAAAAAAACCAUAAAAHcGF5bWVudAAAAAdhc3NldElkBQAAAAxwb29sQXNzZXRJZEEJAAAAAAAAAgUAAAAPYXNzZXRSZWNlaXZlZElkBQAAAAxwb29sQXNzZXRJZEIHCQAFFAAAAAIFAAAADHBvb2xBc3NldElkQQUAAAAMcG9vbEFzc2V0SWRCAwMJAAAAAAAAAgUAAAAPYXNzZXRSZWNlaXZlZElkBQAAAAxwb29sQXNzZXRJZEEJAAAAAAAAAggFAAAAB3BheW1lbnQAAAAHYXNzZXRJZAUAAAAMcG9vbEFzc2V0SWRCBwkABRQAAAACBQAAAAxwb29sQXNzZXRJZEIFAAAADHBvb2xBc3NldElkQQkAAAIAAAABAgAAABdVbnN1cHBvcnRlZCBhc3NldHMgcGFpcgQAAAAHYXNzZXRJbggFAAAACyR0MDMyODczNjMxAAAAAl8xBAAAAAhhc3NldE91dAgFAAAACyR0MDMyODczNjMxAAAAAl8yBAAAAARhcmdzAwkAAAAAAAACBQAAAAx2ZXJzaW9uTWFqb3IAAAAAAAAAAAEJAARMAAAAAgAAAAAAAAAAAQUAAAADbmlsAwkAAAAAAAACBQAAAAx2ZXJzaW9uTWFqb3IAAAAAAAAAAAIDCQAAZwAAAAIAAAAAAAAAAAAFAAAAEmVzdEFtb3VudFRvUmVjZWl2ZQkAAAIAAAABAgAAACNlc3RBbW91bnRUb1JlY2VpdmUgbXVzdCBiZSBwb3NpdGl2ZQMDCQAAZgAAAAIAAAAAAAAAAAAFAAAAEXNsaXBwYWdlVG9sZXJhbmNlBgkAAGYAAAACBQAAABFzbGlwcGFnZVRvbGVyYW5jZQAAAAAAAAAD6AkAAAIAAAABAgAAAEZTbGlwcGFnZSB0b2xlcmFuY2Ug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AgAAAAFfAAAAAAAAAAAAAgAAAAlfYXNzZXRfaWQEAAAACmFzc2V0RmluYWwJAQAAABN2YWx1ZU9yRXJyb3JNZXNzYWdlAAAAAgkABB0AAAACBQAAAA1sYXN0RXhjaGFuZ2VyBQAAAA5sYXN0QXNzZXRJZEtleQkAASwAAAACCQABLAAAAAIJAAEsAAAAAgIAAAAWQ2FuJ3QgcmVhZCBwYXJhbWV0ZXIgJwUAAAAObGFzdEFzc2V0SWRLZXkCAAAAECcgZm9yIGV4Y2hhbmdlciAJAAQlAAAAAQUAAAANbGFzdEV4Y2hhbmdlcgQAAAAMYXNzZXRGaW5hbElkCQEAAAAKZ2V0QXNzZXRJZAAAAAEFAAAACmFzc2V0RmluYWwEAAAADWJhbGFuY2VCZWZvcmUJAQAAAApnZXRCYWxhbmNlAAAAAQUAAAAMYXNzZXRGaW5hbElkAwkAAAAAAAACBQAAAA1iYWxhbmNlQmVmb3JlBQAAAA1iYWxhbmNlQmVmb3JlBAAAAAZyZXN1bHQJAAP8AAAABAUAAAANc3dvcGZpUm91dGluZwIAAAAMcm91dGluZ1RyYWRlCQAETAAAAAIFAAAACmV4Y2hhbmdlcnMJAARMAAAAAgUAAAAOZXhjaGFuZ2Vyc1R5cGUJAARMAAAAAgUAAAAFYXJnczEJAARMAAAAAgUAAAAFYXJnczIJAARMAAAAAgUAAAARcm91dGluZ0Fzc2V0c0tleXMJAARMAAAAAgUAAAASbWluQW1vdW50VG9SZWNlaXZlBQAAAANuaWwJAARMAAAAAgUAAAADcG10BQAAAANuaWwDCQAAAAAAAAIFAAAABnJlc3VsdAUAAAAGcmVzdWx0BAAAAAxiYWxhbmNlQWZ0ZXIJAQAAAApnZXRCYWxhbmNlAAAAAQUAAAAMYXNzZXRGaW5hbElkAwkAAAAAAAACBQAAAAxiYWxhbmNlQWZ0ZXIFAAAADGJhbGFuY2VBZnRlcgQAAAAFZGVsdGEJAABlAAAAAgUAAAAMYmFsYW5jZUFmdGVyBQAAAA1iYWxhbmNlQmVmb3JlBAAAAAskdDA3OTgyODAyNwkBAAAACWRlZHVjdEZlZQAAAAEFAAAABWRlbHRhBAAAAA5yZXN1bHRBZnRlckZlZQgFAAAACyR0MDc5ODI4MDI3AAAAAl8xBAAAAANmZWUIBQAA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b2xlcmFuY2UAAAALbWluUmVjZWl2ZWQJAQAAAAh3cmFwU3dhcAAAAAYFAAAAA2ludgUAAAAJYWRkcmVzc2VzBQAAAA9hc3NldHNUb1JlY2VpdmUFAAAAC2VzdFJlY2VpdmVkBQAAABFzbGlwcGFnZVRvbGVyYW5jZQUAAAALbWluUmVjZWl2ZWQAAAADaW52AQAAABBzd2FwV2l0aFJlZmVycmVyAAAABgAAAAlhZGRyZXNzZXMAAAAPYXNzZXRzVG9SZWNlaXZlAAAAC2VzdFJlY2VpdmVkAAAAEXNsaXBwYWdlVG9sZXJhbmNlAAAAC21pblJlY2VpdmVkAAAADHJlZmVycmVyTmFtZQMJAAAAAAAAAgkAATEAAAABBQAAAAxyZWZlcnJlck5hbWUAAAAAAAAAAAAJAAACAAAAAQIAAAAVUmVmZXJyZXIgbmFtZSBpbnZhbGlkBAAAAAphc3NldEZpbmFsCQABkQAAAAIFAAAAD2Fzc2V0c1RvUmVjZWl2ZQkAAGUAAAACCQABkAAAAAEFAAAAD2Fzc2V0c1RvUmVjZWl2ZQAAAAAAAAAAAQQAAAAHYXNzZXRJZAkBAAAACmdldEFzc2V0SWQAAAABBQAAAAphc3NldEZpbmFsBAAAAAskdDA5NjkxOTc2MQkBAAAAD2dldFJlZmVycmVyRGF0YQAAAAEFAAAADHJlZmVycmVyTmFtZQQAAAAPcmVmZXJyZXJBZGRyZXNzCAUAAAALJHQwOTY5MTk3NjEAAAACXzEEAAAAD3JlZmVycmVyUGVyY2VudAgFAAAACyR0MDk2OTE5NzYxAAAAAl8yBAAAAAZyZXN1bHQJAQAAAAh3cmFwU3dhcAAAAAYFAAAAA2ludgUAAAAJYWRkcmVzc2VzBQAAAA9hc3NldHNUb1JlY2VpdmUFAAAAC2VzdFJlY2VpdmVkBQAAABFzbGlwcGFnZVRvbGVyYW5jZQUAAAALbWluUmVjZWl2ZWQDCQAAAAAAAAIFAAAABnJlc3VsdAUAAAAGcmVzdWx0BAAAAAxjb2xsZWN0b3JGZWUICQABkQAAAAIFAAAABnJlc3VsdAAAAAAAAAAAAQAAAAZhbW91bnQEAAAADnJlZmVycmVyUmV3YXJkCQAAawAAAAMFAAAADGNvbGxlY3RvckZlZQUAAAAPcmVmZXJyZXJQZXJjZW50AAAAAAAAAABkCQAETAAAAAIJAAGRAAAAAgUAAAAGcmVzdWx0AAAAAAAAAAAACQAETAAAAAIJAQAAAA5TY3JpcHRUcmFuc2ZlcgAAAAMFAAAACWNvbGxlY3RvcgkAAGUAAAACBQAAAAxjb2xsZWN0b3JGZWUFAAAADnJlZmVycmVyUmV3YXJkBQAAAAdhc3NldElkCQAETAAAAAIJAQAAAA5TY3JpcHRUcmFuc2ZlcgAAAAMFAAAAD3JlZmVycmVyQWRkcmVzcwUAAAAOcmVmZXJyZXJSZXdhcmQFAAAAB2Fzc2V0SWQFAAAAA25pbAkAAAIAAAABAgAAACRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4AAAADaW52AQAAAApzd29wZmlTd2FwAAAABgAAAApleGNoYW5nZXJzAAAADmV4Y2hhbmdlcnNUeXBlAAAABWFyZ3MxAAAABWFyZ3MyAAAAEXJvdXRpbmdBc3NldHNLZXlzAAAAEm1pbkFtb3VudFRvUmVjZWl2ZQkBAAAADndyYXBTd29wZmlTd2FwAAAABwUAAAADaW52BQAAAApleGNoYW5nZXJzBQAAAA5leGNoYW5nZXJzVHlwZQUAAAAFYXJnczEFAAAABWFyZ3MyBQAAABFyb3V0aW5nQXNzZXRzS2V5cwUAAAASbWluQW1vdW50VG9SZWNlaXZlAAAAA2ludgEAAAAWc3dvcGZpU3dhcFdpdGhSZWZlcnJlcgAAAAcAAAAKZXhjaGFuZ2VycwAAAA5leGNoYW5nZXJzVHlwZQAAAAVhcmdzMQAAAAVhcmdzMgAAABFyb3V0aW5nQXNzZXRzS2V5cwAAABJtaW5BbW91bnRUb1JlY2VpdmUAAAAMcmVmZXJyZXJOYW1lAwkAAAAAAAACCQABMQAAAAEFAAAADHJlZmVycmVyTmFtZQAAAAAAAAAAAAkAAAIAAAABAgAAABVSZWZlcnJlciBuYW1lIGludmFsaWQEAAAADWxhc3RFeGNoYW5nZXIJAQAAABN2YWx1ZU9yRXJyb3JNZXNzYWdlAAAAAgkABCYAAAABCQABkQAAAAIFAAAACmV4Y2hhbmdlcnMJAABlAAAAAgkAAZAAAAABBQAAAApleGNoYW5nZXJzAAAAAAAAAAABAgAAAClDYW4ndCBwYXJzZSBsYXN0IGV4Y2hhbmdlciBzd29wZmkgYWRkcmVzcwQAAAAObGFzdEFzc2V0SWRLZXkJAAEsAAAAAgkAAZEAAAACCQAEtQAAAAIJAAGRAAAAAgUAAAARcm91dGluZ0Fzc2V0c0tleXMJAABlAAAAAgkAAZAAAAABBQAAABFyb3V0aW5nQXNzZXRzS2V5cwAAAAAAAAAAAQIAAAABXwAAAAAAAAAAAAIAAAAJX2Fzc2V0X2lkBAAAAAphc3NldEZpbmFsCQEAAAATdmFsdWVPckVycm9yTWVzc2FnZQAAAAIJAAQdAAAAAgUAAAANbGFzdEV4Y2hhbmdlcgUAAAAObGFzdEFzc2V0SWRLZXkJAAEsAAAAAgkAASwAAAACCQABLAAAAAICAAAAFkNhbid0IHJlYWQgcGFyYW1ldGVyICcFAAAADmxhc3RBc3NldElkS2V5AgAAABAnIGZvciBleGNoYW5nZXIgCQAEJQAAAAEFAAAADWxhc3RFeGNoYW5nZXIEAAAAB2Fzc2V0SWQJAQAAAApnZXRBc3NldElkAAAAAQUAAAAKYXNzZXRGaW5hbAQAAAANJHQwMTEyNjUxMTMzNQkBAAAAD2dldFJlZmVycmVyRGF0YQAAAAEFAAAADHJlZmVycmVyTmFtZQQAAAAPcmVmZXJyZXJBZGRyZXNzCAUAAAANJHQwMTEyNjUxMTMzNQAAAAJfMQQAAAAPcmVmZXJyZXJQZXJjZW50CAUAAAANJHQwMTEyNjUxMTMzNQAAAAJfMgQAAAAGcmVzdWx0CQEAAAAOd3JhcFN3b3BmaVN3YXAAAAAHBQAAAANpbnYFAAAACmV4Y2hhbmdlcnMFAAAADmV4Y2hhbmdlcnNUeXBlBQAAAAVhcmdzMQUAAAAFYXJnczIFAAAAEXJvdXRpbmdBc3NldHNLZXlzBQAAABJtaW5BbW91bnRUb1JlY2VpdmUDCQAAAAAAAAIFAAAABnJlc3VsdAUAAAAGcmVzdWx0BAAAAAxjb2xsZWN0b3JGZWUICQABkQAAAAIFAAAABnJlc3VsdAAAAAAAAAAAAQAAAAZhbW91bnQEAAAADnJlZmVycmVyUmV3YXJkCQAAawAAAAMFAAAADGNvbGxlY3RvckZlZQUAAAAPcmVmZXJyZXJQZXJjZW50AAAAAAAAAABkCQAETAAAAAIJAAGRAAAAAgUAAAAGcmVzdWx0AAAAAAAAAAAACQAETAAAAAIJAQAAAA5TY3JpcHRUcmFuc2ZlcgAAAAMFAAAACWNvbGxlY3RvcgkAAGUAAAACBQAAAAxjb2xsZWN0b3JGZWUFAAAADnJlZmVycmVyUmV3YXJkBQAAAAdhc3NldElkCQAETAAAAAIJAQAAAA5TY3JpcHRUcmFuc2ZlcgAAAAMFAAAAD3JlZmVycmVyQWRkcmVzcwUAAAAOcmVmZXJyZXJSZXdhcmQFAAAAB2Fzc2V0SWQFAAAAA25pbAkAAAIAAAABAgAAACRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4AAAADaW52AQAAAApwdXp6bGVTd2FwAAAAAgAAAAlyb3V0ZXNTdHIAAAAMbWluVG9SZWNlaXZlCQEAAAAOd3JhcFB1enpsZVN3YXAAAAADBQAAAANpbnYFAAAACXJvdXRlc1N0cgUAAAAMbWluVG9SZWNlaXZlAAAAA2ludgEAAAAWcHV6emxlU3dhcFdpdGhSZWZlcnJlcgAAAAMAAAAJcm91dGVzU3RyAAAADG1pblRvUmVjZWl2ZQAAAAxyZWZlcnJlck5hbWUDCQAAAAAAAAIJAAExAAAAAQUAAAAJcm91dGVzU3RyAAAAAAAAAAAACQAAAgAAAAECAAAAD0ludmFsaWQgcm91dGluZwMJAABnAAAAAgAAAAAAAAAAAAUAAAAMbWluVG9SZWNlaXZlCQAAAgAAAAECAAAAGFN1bSB0byByZWNlaXZlIGlzIHRvIGxvdwMJAAAAAAAAAgkAATEAAAABBQAAAAxyZWZlcnJlck5hbWUAAAAAAAAAAAAJAAACAAAAAQIAAAAYUmVmZXJyZXIgbmFtZSBpcyBpbnZhbGlkBAAAAAxhc3NldElkRmluYWwJAAGRAAAAAgkABLUAAAACBQAAAAlyb3V0ZXNTdHICAAAAASwJAABlAAAAAgkAAZAAAAABCQAEtQAAAAIFAAAACXJvdXRlc1N0cgIAAAABLAAAAAAAAAAAAQQAAAAHYXNzZXRJZAkBAAAACmdldEFzc2V0SWQAAAABBQAAAAxhc3NldElkRmluYWwEAAAADSR0MDEyMzU2MTI0MjYJAQAAAA9nZXRSZWZlcnJlckRhdGEAAAABBQAAAAxyZWZlcnJlck5hbWUEAAAAD3JlZmVycmVyQWRkcmVzcwgFAAAADSR0MDEyMzU2MTI0MjYAAAACXzEEAAAAD3JlZmVycmVyUGVyY2VudAgFAAAADSR0MDEyMzU2MTI0MjYAAAACXzIEAAAADWJhbGFuY2VCZWZvcmUJAQAAABNnZXRCYWxhbmNlQnlBZGRyZXNzAAAAAgUAAAAJY29sbGVjdG9yBQAAABNwdXp6bGVSZXdhcmRBc3NldElkAwkAAAAAAAACBQAAAA1iYWxhbmNlQmVmb3JlBQAAAA1iYWxhbmNlQmVmb3JlBAAAAAZyZXN1bHQJAQAAAA53cmFwUHV6emxlU3dhcAAAAAMFAAAAA2ludgUAAAAJcm91dGVzU3RyBQAAAAxtaW5Ub1JlY2VpdmUDCQAAAAAAAAIFAAAABnJlc3VsdAUAAAAGcmVzdWx0BAAAAAxiYWxhbmNlQWZ0ZXIJAQAAABNnZXRCYWxhbmNlQnlBZGRyZXNzAAAAAgUAAAAJY29sbGVjdG9yBQAAABNwdXp6bGVSZXdhcmRBc3NldElkAwkAAAAAAAACBQAAAAxiYWxhbmNlQWZ0ZXIFAAAADGJhbGFuY2VBZnRlcgQAAAAFZGVsdGEJAABlAAAAAgUAAAAMYmFsYW5jZUFmdGVyBQAAAA1iYWxhbmNlQmVmb3JlAwkAAAAAAAACBQAAAAVkZWx0YQUAAAAFZGVsdGEEAAAABnJld2FyZAkAAGsAAAADBQAAAAVkZWx0YQUAAAAPcmVmZXJyZXJQZXJjZW50AAAAAAAAAABkBAAAAANyZXMJAAP8AAAABAUAAAAJY29sbGVjdG9yAgAAABNjbGFpbVJlZmVycmVyUmV3YXJkCQAETAAAAAIFAAAABnJld2FyZAkABEwAAAACBQAAABRwdXp6bGVSZXdhcmRBc3NldFN0cgUAAAADbmlsBQAAAANuaWwDCQAAAAAAAAIFAAAAA3JlcwUAAAADcmVzCQAETQAAAAIFAAAABnJlc3VsdAkBAAAADlNjcmlwdFRyYW5zZmVyAAAAAwUAAAAPcmVmZXJyZXJBZGRyZXNzBQAAAAZyZXdhcmQFAAAAE3B1enpsZVJld2FyZEFzc2V0SWQJAAACAAAAAQIAAAAkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuCQAAAgAAAAECAAAAJFN0cmljdCB2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", "height": 3266811, "applicationStatus": "succeeded", "spentComplexity": 0 } View: original | compacted Prev: 4gDfvLrBMCvU1PsJaV5X14hd2zpfk58bWuF432s4TpTx Next: EHZAuKWwWG4sxwvPWJ9ncH1wAHrsx7YK6b2mrFnyyY1B Diff:
OldNewDifferences
1313 func g (h) = valueOrErrorMessage(parseInt(h), (("Can't parse integer from '" + h) + "'"))
1414
1515
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"))
2917 then unit
30- else fromBase58String(p)
18+ else fromBase58String(j)
3119
3220
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"))
3646 then {
37- let p = s
38- toBase58String(p)
47+ let j = x
48+ toBase58String(j)
3949 }
40- else if ($isInstanceOf(s, "Unit"))
50+ else if ($isInstanceOf(x, "Unit"))
4151 then {
42- let t = s
52+ let y = x
4353 "WAVES"
4454 }
4555 else throw("Match error")
4656 }
4757
4858
49-func u (r) = {
50- let s = r
51- if ($isInstanceOf(s, "ByteVector"))
59+func z (w) = {
60+ let x = w
61+ if ($isInstanceOf(x, "ByteVector"))
5262 then {
53- let p = s
54- assetBalance(this, p)
63+ let j = x
64+ assetBalance(this, j)
5565 }
56- else if ($isInstanceOf(s, "Unit"))
66+ else if ($isInstanceOf(x, "Unit"))
5767 then {
58- let t = s
68+ let y = x
5969 wavesBalance(this).available
6070 }
6171 else throw("Match error")
6272 }
6373
6474
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")
6888 }
6989
7090
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))
76113 then throw("estAmountToReceive must be positive")
77- else if (containsElement(m, z))
114+ else if (containsElement(p, J))
78115 then {
79- let H = a(E, "A_asset_id")
80- let I = a(E, "B_asset_id")
81- let J = o(H)
82- let K = o(I)
83- let L = if (if ((A.assetId == J))
84- then (G == K)
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)
85122 else false)
86- then $Tuple2(J, K)
87- else if (if ((G == J))
88- then (A.assetId == K)
123+ then $Tuple2(T, U)
124+ else if (if ((Q == T))
125+ then (K.assetId == U)
89126 else false)
90- then $Tuple2(K, J)
127+ then $Tuple2(U, T)
91128 else throw("Unsupported assets pair")
92- let M = L._1
93- let N = L._2
94- let O = if ((F == 1))
129+ let W = V._1
130+ let X = V._2
131+ let Y = if ((P == 1))
95132 then [1]
96- else if ((F == 2))
97- then if ((0 >= C))
133+ else if ((P == 2))
134+ then if ((0 >= M))
98135 then throw("estAmountToReceive must be positive")
99- else if (if ((0 > D))
136+ else if (if ((0 > N))
100137 then true
101- else (D > 1000))
138+ else (N > 1000))
102139 then throw("Slippage tolerance must be non-negative and less than or equal to 1000")
103140 else {
104- let P = (C - fraction(C, D, 1000))
105-[C, if ((P > 0))
106- then P
141+ let Z = (M - fraction(M, N, 1000))
142+[M, if ((Z > 0))
143+ then Z
107144 else 1]
108145 }
109- else throw((("Unknown pool version '" + toString(F)) + "', but 1 or 2 expected"))
110- let Q = u(G)
111- if ((Q == Q))
146+ else throw((("Unknown pool version '" + toString(P)) + "', but 1 or 2 expected"))
147+ let aa = z(Q)
148+ if ((aa == aa))
112149 then {
113- let R = invoke(E, "exchange", O, [A])
114- if ((R == R))
150+ let ab = invoke(O, "exchange", Y, [K])
151+ if ((ab == ab))
115152 then {
116- let S = (u(G) - Q)
117- if ((S == S))
118- then if ((0 >= S))
153+ let ac = (z(Q) - aa)
154+ if ((ac == ac))
155+ then if ((0 >= ac))
119156 then throw("Received amount from pool must be positive")
120- else S
157+ else ac
121158 else throw("Strict value is not equal to itself.")
122159 }
123160 else throw("Strict value is not equal to itself.")
124161 }
125162 else throw("Strict value is not equal to itself.")
126163 }
127- else if (containsElement(n, z))
164+ else if (containsElement(u, J))
128165 then {
129- let Q = u(G)
130- if ((Q == Q))
166+ let aa = z(Q)
167+ if ((aa == aa))
131168 then {
132- let R = invoke(E, "swap", [B, 0], [A])
133- if ((R == R))
169+ let ab = invoke(O, "swap", [L, 0], [K])
170+ if ((ab == ab))
134171 then {
135- let S = (u(G) - Q)
136- if ((S == S))
137- then if ((0 >= S))
172+ let ac = (z(Q) - aa)
173+ if ((ac == ac))
174+ then if ((0 >= ac))
138175 then throw("Received amount from pool must be positive")
139- else S
176+ else ac
140177 else throw("Strict value is not equal to itself.")
141178 }
142179 else throw("Strict value is not equal to itself.")
143180 }
144181 else throw("Strict value is not equal to itself.")
145182 }
146- else throw((("There is no pool at address '" + z) + "'"))
183+ else throw((("There is no pool at address '" + J) + "'"))
147184 }
148185
149186
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]
154190 else throw("Payment required")
155- let Z = V[(size(V) - 1)]
156- let aa = o(Z)
157- let ab = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
158- func ac (ad,ae) = if ((ae >= size(U)))
159- then ad
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
160196 else {
161- let B = V[ae]
162- let G = o(B)
163- let s = y(U[ae], ad, B, W[ae], D)
164- if ($isInstanceOf(s, "Int"))
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"))
165201 then {
166- let af = s
167- AttachedPayment(G, af)
202+ let aq = x
203+ AttachedPayment(Q, aq)
168204 }
169205 else throw("Can't handle swap result")
170206 }
171207
172- let ag = if ((size(U) > 0))
208+ let ar = if ((size(af) > 0))
173209 then {
174- let ah = ab
175- let ai = size(ah)
176- let aj = Y
177- func ak (al,am) = if ((am >= ai))
178- then al
179- else ac(al, ah[am])
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])
180216
181- func an (al,am) = if ((am >= ai))
182- then al
217+ func ay (aw,ax) = if ((ax >= at))
218+ then aw
183219 else throw("List size exceeds 10")
184220
185- an(ak(ak(ak(ak(ak(ak(ak(ak(ak(ak(aj, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10)
221+ ay(av(av(av(av(av(av(av(av(av(av(au, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10)
186222 }
187223 else throw("Path cannot be empty")
188- let ao = v(ag.amount)
189- let ap = ao._1
190- let x = ao._2
191- if ((0 >= ag.amount))
192- then throw((("Swap result " + toString(ag.amount)) + " must be positive"))
193- else if ((X > ap))
194- then throw(((("Swap result " + toString(ap)) + " is less then expected ") + toString(X)))
195- else [ScriptTransfer(T.caller, ap, aa), ScriptTransfer(i, x, aa)]
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)]
196232 }
197233
198234
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]
204238 else throw("Payment required")
205- let aw = valueOrErrorMessage(addressFromString(aq[(size(aq) - 1)]), "Can't parse last exchanger swopfi address")
206- let ax = (split(au[(size(au) - 1)], "_")[0] + "_asset_id")
207- let Z = valueOrErrorMessage(getString(aw, ax), ((("Can't read parameter '" + ax) + "' for exchanger ") + toString(aw)))
208- let aa = o(Z)
209- let Q = u(aa)
210- if ((Q == Q))
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))
211245 then {
212- let R = invoke(l, "routingTrade", [aq, ar, as, at, au, av], [Y])
213- if ((R == R))
246+ let ab = invoke(n, "routingTrade", [aC, aD, aE, aF, aG, aH], [aj])
247+ if ((ab == ab))
214248 then {
215- let ay = u(aa)
216- if ((ay == ay))
249+ let aK = z(al)
250+ if ((aK == aK))
217251 then {
218- let az = (ay - Q)
219- let aA = v(az)
220- let ap = aA._1
221- let x = aA._2
222- if ((0 >= az))
223- then throw((("Swap result " + toString(az)) + " must be positive"))
224- else if ((av > ap))
225- then throw(((("Swap result " + toString(ap)) + " is less then expected ") + toString(av)))
226- else [ScriptTransfer(T.caller, ap, aa), ScriptTransfer(i, x, aa)]
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)]
227261 }
228262 else throw("Strict value is not equal to itself.")
229263 }
233267 }
234268
235269
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+ }
236296
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)))
242297
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)))
244406 then throw("only self calls or by collector are allowed")
245407 else [StringEntry("p-pools", makeString({
246- let ah = aB
247- let ai = size(ah)
248- let aj = n
249- func ak (al,am) = if ((am >= ai))
250- then al
251- else aC(al, ah[am])
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])
252414
253- func an (al,am) = if ((am >= ai))
254- then al
415+ func ay (aw,ax) = if ((ax >= at))
416+ then aw
255417 else throw("List size exceeds 10")
256418
257- an(ak(ak(ak(ak(ak(ak(ak(ak(ak(ak(aj, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10)
419+ ay(av(av(av(av(av(av(av(av(av(av(au, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10)
258420 }, ","))]
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)]
259437 }
260438
261439
Full:
OldNewDifferences
11 {-# STDLIB_VERSION 5 #-}
22 {-# SCRIPT_TYPE ACCOUNT #-}
33 {-# CONTENT_TYPE DAPP #-}
44 func a (b,c) = valueOrErrorMessage(getString(b, c), ((("Can't read '" + c) + "' at address ") + toString(b)))
55
66
77 func d (b,c) = valueOrErrorMessage(getInteger(b, c), ((("Can't read '" + c) + "' at address ") + toString(b)))
88
99
1010 func e (f) = valueOrErrorMessage(addressFromString(f), (("Can't parse address from '" + f) + "'"))
1111
1212
1313 func g (h) = valueOrErrorMessage(parseInt(h), (("Can't parse integer from '" + h) + "'"))
1414
1515
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"))
2917 then unit
30- else fromBase58String(p)
18+ else fromBase58String(j)
3119
3220
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"))
3646 then {
37- let p = s
38- toBase58String(p)
47+ let j = x
48+ toBase58String(j)
3949 }
40- else if ($isInstanceOf(s, "Unit"))
50+ else if ($isInstanceOf(x, "Unit"))
4151 then {
42- let t = s
52+ let y = x
4353 "WAVES"
4454 }
4555 else throw("Match error")
4656 }
4757
4858
49-func u (r) = {
50- let s = r
51- if ($isInstanceOf(s, "ByteVector"))
59+func z (w) = {
60+ let x = w
61+ if ($isInstanceOf(x, "ByteVector"))
5262 then {
53- let p = s
54- assetBalance(this, p)
63+ let j = x
64+ assetBalance(this, j)
5565 }
56- else if ($isInstanceOf(s, "Unit"))
66+ else if ($isInstanceOf(x, "Unit"))
5767 then {
58- let t = s
68+ let y = x
5969 wavesBalance(this).available
6070 }
6171 else throw("Match error")
6272 }
6373
6474
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")
6888 }
6989
7090
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))
76113 then throw("estAmountToReceive must be positive")
77- else if (containsElement(m, z))
114+ else if (containsElement(p, J))
78115 then {
79- let H = a(E, "A_asset_id")
80- let I = a(E, "B_asset_id")
81- let J = o(H)
82- let K = o(I)
83- let L = if (if ((A.assetId == J))
84- then (G == K)
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)
85122 else false)
86- then $Tuple2(J, K)
87- else if (if ((G == J))
88- then (A.assetId == K)
123+ then $Tuple2(T, U)
124+ else if (if ((Q == T))
125+ then (K.assetId == U)
89126 else false)
90- then $Tuple2(K, J)
127+ then $Tuple2(U, T)
91128 else throw("Unsupported assets pair")
92- let M = L._1
93- let N = L._2
94- let O = if ((F == 1))
129+ let W = V._1
130+ let X = V._2
131+ let Y = if ((P == 1))
95132 then [1]
96- else if ((F == 2))
97- then if ((0 >= C))
133+ else if ((P == 2))
134+ then if ((0 >= M))
98135 then throw("estAmountToReceive must be positive")
99- else if (if ((0 > D))
136+ else if (if ((0 > N))
100137 then true
101- else (D > 1000))
138+ else (N > 1000))
102139 then throw("Slippage tolerance must be non-negative and less than or equal to 1000")
103140 else {
104- let P = (C - fraction(C, D, 1000))
105-[C, if ((P > 0))
106- then P
141+ let Z = (M - fraction(M, N, 1000))
142+[M, if ((Z > 0))
143+ then Z
107144 else 1]
108145 }
109- else throw((("Unknown pool version '" + toString(F)) + "', but 1 or 2 expected"))
110- let Q = u(G)
111- if ((Q == Q))
146+ else throw((("Unknown pool version '" + toString(P)) + "', but 1 or 2 expected"))
147+ let aa = z(Q)
148+ if ((aa == aa))
112149 then {
113- let R = invoke(E, "exchange", O, [A])
114- if ((R == R))
150+ let ab = invoke(O, "exchange", Y, [K])
151+ if ((ab == ab))
115152 then {
116- let S = (u(G) - Q)
117- if ((S == S))
118- then if ((0 >= S))
153+ let ac = (z(Q) - aa)
154+ if ((ac == ac))
155+ then if ((0 >= ac))
119156 then throw("Received amount from pool must be positive")
120- else S
157+ else ac
121158 else throw("Strict value is not equal to itself.")
122159 }
123160 else throw("Strict value is not equal to itself.")
124161 }
125162 else throw("Strict value is not equal to itself.")
126163 }
127- else if (containsElement(n, z))
164+ else if (containsElement(u, J))
128165 then {
129- let Q = u(G)
130- if ((Q == Q))
166+ let aa = z(Q)
167+ if ((aa == aa))
131168 then {
132- let R = invoke(E, "swap", [B, 0], [A])
133- if ((R == R))
169+ let ab = invoke(O, "swap", [L, 0], [K])
170+ if ((ab == ab))
134171 then {
135- let S = (u(G) - Q)
136- if ((S == S))
137- then if ((0 >= S))
172+ let ac = (z(Q) - aa)
173+ if ((ac == ac))
174+ then if ((0 >= ac))
138175 then throw("Received amount from pool must be positive")
139- else S
176+ else ac
140177 else throw("Strict value is not equal to itself.")
141178 }
142179 else throw("Strict value is not equal to itself.")
143180 }
144181 else throw("Strict value is not equal to itself.")
145182 }
146- else throw((("There is no pool at address '" + z) + "'"))
183+ else throw((("There is no pool at address '" + J) + "'"))
147184 }
148185
149186
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]
154190 else throw("Payment required")
155- let Z = V[(size(V) - 1)]
156- let aa = o(Z)
157- let ab = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
158- func ac (ad,ae) = if ((ae >= size(U)))
159- then ad
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
160196 else {
161- let B = V[ae]
162- let G = o(B)
163- let s = y(U[ae], ad, B, W[ae], D)
164- if ($isInstanceOf(s, "Int"))
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"))
165201 then {
166- let af = s
167- AttachedPayment(G, af)
202+ let aq = x
203+ AttachedPayment(Q, aq)
168204 }
169205 else throw("Can't handle swap result")
170206 }
171207
172- let ag = if ((size(U) > 0))
208+ let ar = if ((size(af) > 0))
173209 then {
174- let ah = ab
175- let ai = size(ah)
176- let aj = Y
177- func ak (al,am) = if ((am >= ai))
178- then al
179- else ac(al, ah[am])
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])
180216
181- func an (al,am) = if ((am >= ai))
182- then al
217+ func ay (aw,ax) = if ((ax >= at))
218+ then aw
183219 else throw("List size exceeds 10")
184220
185- an(ak(ak(ak(ak(ak(ak(ak(ak(ak(ak(aj, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10)
221+ ay(av(av(av(av(av(av(av(av(av(av(au, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10)
186222 }
187223 else throw("Path cannot be empty")
188- let ao = v(ag.amount)
189- let ap = ao._1
190- let x = ao._2
191- if ((0 >= ag.amount))
192- then throw((("Swap result " + toString(ag.amount)) + " must be positive"))
193- else if ((X > ap))
194- then throw(((("Swap result " + toString(ap)) + " is less then expected ") + toString(X)))
195- else [ScriptTransfer(T.caller, ap, aa), ScriptTransfer(i, x, aa)]
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)]
196232 }
197233
198234
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]
204238 else throw("Payment required")
205- let aw = valueOrErrorMessage(addressFromString(aq[(size(aq) - 1)]), "Can't parse last exchanger swopfi address")
206- let ax = (split(au[(size(au) - 1)], "_")[0] + "_asset_id")
207- let Z = valueOrErrorMessage(getString(aw, ax), ((("Can't read parameter '" + ax) + "' for exchanger ") + toString(aw)))
208- let aa = o(Z)
209- let Q = u(aa)
210- if ((Q == Q))
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))
211245 then {
212- let R = invoke(l, "routingTrade", [aq, ar, as, at, au, av], [Y])
213- if ((R == R))
246+ let ab = invoke(n, "routingTrade", [aC, aD, aE, aF, aG, aH], [aj])
247+ if ((ab == ab))
214248 then {
215- let ay = u(aa)
216- if ((ay == ay))
249+ let aK = z(al)
250+ if ((aK == aK))
217251 then {
218- let az = (ay - Q)
219- let aA = v(az)
220- let ap = aA._1
221- let x = aA._2
222- if ((0 >= az))
223- then throw((("Swap result " + toString(az)) + " must be positive"))
224- else if ((av > ap))
225- then throw(((("Swap result " + toString(ap)) + " is less then expected ") + toString(av)))
226- else [ScriptTransfer(T.caller, ap, aa), ScriptTransfer(i, x, aa)]
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)]
227261 }
228262 else throw("Strict value is not equal to itself.")
229263 }
230264 else throw("Strict value is not equal to itself.")
231265 }
232266 else throw("Strict value is not equal to itself.")
233267 }
234268
235269
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+ }
236296
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)))
242297
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)))
244406 then throw("only self calls or by collector are allowed")
245407 else [StringEntry("p-pools", makeString({
246- let ah = aB
247- let ai = size(ah)
248- let aj = n
249- func ak (al,am) = if ((am >= ai))
250- then al
251- else aC(al, ah[am])
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])
252414
253- func an (al,am) = if ((am >= ai))
254- then al
415+ func ay (aw,ax) = if ((ax >= at))
416+ then aw
255417 else throw("List size exceeds 10")
256418
257- an(ak(ak(ak(ak(ak(ak(ak(ak(ak(ak(aj, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10)
419+ ay(av(av(av(av(av(av(av(av(av(av(au, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10)
258420 }, ","))]
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)]
259437 }
260438
261439

github/deemru/w8io/0e76f2f 
186.62 ms