tx · 2SrM22bQJmLjTt99QdaXTXkfLuHfFeVrV9PmeFTsmQ6e

3P5UKXpQbom7GB2WGdPG5yGQPeQQuM3hFmw:  -0.02700000 Waves

2023.03.14 12:56 [3555101] smart account 3P5UKXpQbom7GB2WGdPG5yGQPeQQuM3hFmw > SELF 0.00000000 Waves

{ "type": 13, "id": "2SrM22bQJmLjTt99QdaXTXkfLuHfFeVrV9PmeFTsmQ6e", "fee": 2700000, "feeAssetId": null, "timestamp": 1678787679531, "version": 2, "chainId": 87, "sender": "3P5UKXpQbom7GB2WGdPG5yGQPeQQuM3hFmw", "senderPublicKey": "4MfTwwE7yP4BFGaifQrcc9Nwb5BA9t92WKhVb6Ton65k", "proofs": [ "5uCW9rYTS3bVrgwrvAhkQ8C1rvnVcKQugburb6bF4MSzrsSPrSpn2sQLdU9QegGHJEP5uz5ssJiN24Z6NMEjJeXW", "r7fWMpWJtmggbVhcwsZBPipgroR2ZeHg6go7yt9iHejpiQwYpaoeqbwrGPttTGCuvSKeYkKxJQuuzgdT8tXQBoP" ], "script": "base64:AAIFAAAAAAAAACYIAhIJCgcRGBgYAQEYEgkKBxgYEREYARgSBQoDCAEYEgUKAwgIAQAAAB8BAAAAEGdldFN0cmluZ09yVGhyb3cAAAACAAAAB2FkZHJlc3MAAAADa2V5CQEAAAATdmFsdWVPckVycm9yTWVzc2FnZQAAAAIJAAQdAAAAAgUAAAAHYWRkcmVzcwUAAAADa2V5CQABLAAAAAIJAAEsAAAAAgkAASwAAAACAgAAAAxDYW4ndCByZWFkICcFAAAAA2tleQIAAAANJyBhdCBhZGRyZXNzIAkABCUAAAABBQAAAAdhZGRyZXNzAQAAABFnZXRJbnRlZ2VyT3JUaHJvdwAAAAIAAAAHYWRkcmVzcwAAAANrZXkJAQAAABN2YWx1ZU9yRXJyb3JNZXNzYWdlAAAAAgkABBoAAAACBQAAAAdhZGRyZXNzBQAAAANrZXkJAAEsAAAAAgkAASwAAAACCQABLAAAAAICAAAADENhbid0IHJlYWQgJwUAAAADa2V5AgAAAA0nIGF0IGFkZHJlc3MgCQAEJQAAAAEFAAAAB2FkZHJlc3MBAAAAE3BhcnNlQWRkcmVzc09yVGhyb3cAAAABAAAADG1heWJlQWRkcmVzcwkBAAAAE3ZhbHVlT3JFcnJvck1lc3NhZ2UAAAACCQAEJgAAAAEFAAAADG1heWJlQWRkcmVzcwkAASwAAAACCQABLAAAAAICAAAAGkNhbid0IHBhcnNlIGFkZHJlc3MgZnJvbSAnBQAAAAxtYXliZUFkZHJlc3MCAAAAAScBAAAAEXBhcnNlSW50T3JEZWZhdWx0AAAAAgAAAAhtYXliZUludAAAAAdkZWZhdWx0CQEAAAALdmFsdWVPckVsc2UAAAACCQAEtgAAAAEFAAAACG1heWJlSW50BQAAAAdkZWZhdWx0AQAAAA9wYXJzZUludE9yVGhyb3cAAAABAAAACG1heWJlSW50CQEAAAATdmFsdWVPckVycm9yTWVzc2FnZQAAAAIJAAS2AAAAAQUAAAAIbWF5YmVJbnQJAAEsAAAAAgkAASwAAAACAgAAABpDYW4ndCBwYXJzZSBpbnRlZ2VyIGZyb20gJwUAAAAIbWF5YmVJbnQCAAAAAScBAAAACmdldEFzc2V0SWQAAAABAAAABWFzc2V0AwkAAAAAAAACBQAAAAVhc3NldAIAAAAFV0FWRVMFAAAABHVuaXQJAAJZAAAAAQUAAAAFYXNzZXQAAAAACWNvbGxlY3RvcgkBAAAAE3BhcnNlQWRkcmVzc09yVGhyb3cAAAABCQEAAAAQZ2V0U3RyaW5nT3JUaHJvdwAAAAIFAAAABHRoaXMCAAAACWNvbGxlY3RvcgAAAAAHZmVlUmF0ZQkBAAAAEWdldEludGVnZXJPclRocm93AAAAAgUAAAAEdGhpcwIAAAAIZmVlLXJhdGUAAAAADHN3b3BmaU9yYWNsZQkBAAAAE3BhcnNlQWRkcmVzc09yVGhyb3cAAAABCQEAAAAQZ2V0U3RyaW5nT3JUaHJvdwAAAAIFAAAABHRoaXMCAAAABm9yYWNsZQAAAAANc3dvcGZpUm91dGluZwkBAAAAE3BhcnNlQWRkcmVzc09yVGhyb3cAAAABCQEAAAAQZ2V0U3RyaW5nT3JUaHJvdwAAAAIFAAAADHN3b3BmaU9yYWNsZQIAAAAPcm91dGluZ19hZGRyZXNzAQAAAAxpc1N3b3BmaVBvb2wAAAABAAAAB2FkZHJlc3MJAQAAAAlpc0RlZmluZWQAAAABCQAEHQAAAAIFAAAADHN3b3BmaU9yYWNsZQkAASwAAAACAgAAAAVwb29sXwUAAAAHYWRkcmVzcwAAAAAJd3hGYWN0b3J5CQEAAAATcGFyc2VBZGRyZXNzT3JUaHJvdwAAAAEJAQAAABBnZXRTdHJpbmdPclRocm93AAAAAgUAAAAEdGhpcwIAAAAKd3gtZmFjdG9yeQAAAAAGd3hTd2FwCQEAAAATcGFyc2VBZGRyZXNzT3JUaHJvdwAAAAEJAQAAABBnZXRTdHJpbmdPclRocm93AAAAAgUAAAAJd3hGYWN0b3J5AgAAABAlc19fc3dhcENvbnRyYWN0AQAAAAhpc1d4UG9vbAAAAAEAAAAHYWRkcmVzcwkBAAAACWlzRGVmaW5lZAAAAAEJAAQdAAAAAgUAAAAJd3hGYWN0b3J5CQABLAAAAAIJAAEsAAAAAgIAAAAIJXMlcyVzX18FAAAAB2FkZHJlc3MCAAAAI19fbWFwcGluZ3NfX3Bvb2xDb250cmFjdDJQb29sQXNzZXRzAAAAAA1wdXp6bGVSb3V0aW5nCQEAAAATcGFyc2VBZGRyZXNzT3JUaHJvdwAAAAEJAQAAABBnZXRTdHJpbmdPclRocm93AAAAAgUAAAAEdGhpcwIAAAAOcHV6emxlLXJvdXRpbmcAAAAAFHB1enpsZVJld2FyZEFzc2V0U3RyCQEAAAAQZ2V0U3RyaW5nT3JUaHJvdwAAAAIFAAAABHRoaXMCAAAAE3B1enpsZS1yZXdhcmQtdG9rZW4AAAAAE3B1enpsZVJld2FyZEFzc2V0SWQJAQAAAApnZXRBc3NldElkAAAAAQUAAAAUcHV6emxlUmV3YXJkQXNzZXRTdHIAAAAADHB1enpsZVJlZktleQIAAAAGa2VlcGVyAAAAAAtwZXJjZW50UmF0ZQkBAAAAEWdldEludGVnZXJPclRocm93AAAAAgUAAAAEdGhpcwIAAAAMcGVyY2VudC1yYXRlAQAAAA9hc3NldElkVG9TdHJpbmcAAAABAAAAB2Fzc2V0SWQEAAAAByRtYXRjaDAFAAAAB2Fzc2V0SWQDCQAAAQAAAAIFAAAAByRtYXRjaDACAAAACkJ5dGVWZWN0b3IEAAAABWFzc2V0BQAAAAckbWF0Y2gwCQACWAAAAAEFAAAABWFzc2V0AwkAAAEAAAACBQAAAAckbWF0Y2gwAgAAAARVbml0BAAAAAV3YXZlcwUAAAAHJG1hdGNoMAIAAAAFV0FWRVMJAAACAAAAAQIAAAALTWF0Y2ggZXJyb3IBAAAACmdldEJhbGFuY2UAAAABAAAAB2Fzc2V0SWQEAAAAByRtYXRjaDAFAAAAB2Fzc2V0SWQDCQAAAQAAAAIFAAAAByRtYXRjaDACAAAACkJ5dGVWZWN0b3IEAAAABWFzc2V0BQAAAAckbWF0Y2gwCQAD8AAAAAIFAAAABHRoaXMFAAAABWFzc2V0AwkAAAEAAAACBQAAAAckbWF0Y2gwAgAAAARVbml0BAAAAAV3YXZlcwUAAAAHJG1hdGNoMAgJAAPvAAAAAQUAAAAEdGhpcwAAAAlhdmFpbGFibGUJAAACAAAAAQIAAAALTWF0Y2ggZXJyb3IBAAAAE2dldEJhbGFuY2VCeUFkZHJlc3MAAAACAAAAB2FkZHJlc3MAAAAHYXNzZXRJZAQAAAAHJG1hdGNoMAUAAAAHYXNzZXRJZAMJAAABAAAAAgUAAAAHJG1hdGNoMAIAAAAKQnl0ZVZlY3RvcgQAAAAFYXNzZXQFAAAAByRtYXRjaDAJAAPwAAAAAgUAAAAHYWRkcmVzcwUAAAAFYXNzZXQDCQAAAQAAAAIFAAAAByRtYXRjaDACAAAABFVuaXQEAAAABXdhdmVzBQAAAAckbWF0Y2gwCAkAA+8AAAABBQAAAAdhZGRyZXNzAAAACWF2YWlsYWJsZQkAAAIAAAABAgAAAAtNYXRjaCBlcnJvcgEAAAAJZGVkdWN0RmVlAAAAAQAAAAZhbW91bnQEAAAAA2ZlZQkAAGsAAAADBQAAAAZhbW91bnQAAAAAAAAAAAEFAAAAB2ZlZVJhdGUJAAUUAAAAAgkAAGUAAAACBQAAAAZhbW91bnQFAAAAA2ZlZQUAAAADZmVlAQAAABZnZXRSZWZlcnJlckRhdGFPclRocm93AAAAAQAAAAxyZWZlcnJlck5hbWUDCQAAAAAAAAIJAAExAAAAAQUAAAAMcmVmZXJyZXJOYW1lAAAAAAAAAAAACQAFFAAAAAIFAAAACWNvbGxlY3RvcgAAAAAAAAAAAAQAAAAKcmVmQWRkcmVzcwkBAAAAE3BhcnNlQWRkcmVzc09yVGhyb3cAAAABCQEAAAATdmFsdWVPckVycm9yTWVzc2FnZQAAAAIJAAQdAAAAAgUAAAAEdGhpcwkAASwAAAACCQABLAAAAAICAAAACXJlZmVycmVyLQUAAAAMcmVmZXJyZXJOYW1lAgAAAAgtYWRkcmVzcwkAASwAAAACCQABLAAAAAICAAAAE3JlZmVycmVyIHdpdGggbmFtZSAFAAAADHJlZmVycmVyTmFtZQIAAAAKIG5vdCBmb3VuZAQAAAAKcmVmUGVyY2VudAkBAAAAC3ZhbHVlT3JFbHNlAAAAAgkABBoAAAACBQAAAAR0aGlzCQABLAAAAAIJAAEsAAAAAgIAAAAJcmVmZXJyZXItBQAAAAxyZWZlcnJlck5hbWUCAAAACC1wZXJjZW50BQAAAAtwZXJjZW50UmF0ZQMDCQAAZgAAAAIAAAAAAAAAAAAFAAAACnJlZlBlcmNlbnQGCQAAZgAAAAIFAAAACnJlZlBlcmNlbnQAAAAAAAAAAGQJAAACAAAAAQIAAAAWSW5jb3JyZWN0IHBlcmNlbnQgcmF0ZQkABRQAAAACBQAAAApyZWZBZGRyZXNzBQAAAApyZWZQZXJjZW50AQAAAA5nZXRTd2FwT3B0aW9ucwAAAAEAAAAHb3B0aW9ucwoBAAAADWZvbGRBcmd1bWVudHMAAAACAAAAA2FjYwAAAAVpbmRleAMJAABnAAAAAgUAAAAFaW5kZXgJAAGQAAAAAQUAAAAHb3B0aW9ucwkABE0AAAACBQAAAANhY2MCAAAAAAkABE0AAAACBQAAAANhY2MJAAGRAAAAAgUAAAAHb3B0aW9ucwUAAAAFaW5kZXgEAAAAB2luZGljZXMJAARMAAAAAgAAAAAAAAAAAAkABEwAAAACAAAAAAAAAAABBQAAAANuaWwEAAAACWFyZ3VtZW50cwoAAAAAAiRsBQAAAAdpbmRpY2VzCgAAAAACJHMJAAGQAAAAAQUAAAACJGwKAAAAAAUkYWNjMAUAAAADbmlsCgEAAAAFJGYwXzEAAAACAAAAAiRhAAAAAiRpAwkAAGcAAAACBQAAAAIkaQUAAAACJHMFAAAAAiRhCQEAAAANZm9sZEFyZ3VtZW50cwAAAAIFAAAAAiRhCQABkQAAAAIFAAAAAiRsBQAAAAIkaQoBAAAABSRmMF8yAAAAAgAAAAIkYQAAAAIkaQMJAABnAAAAAgUAAAACJGkFAAAAAiRzBQAAAAIkYQkAAAIAAAABAgAAABNMaXN0IHNpemUgZXhjZWVkcyAyCQEAAAAFJGYwXzIAAAACCQEAAAAFJGYwXzEAAAACCQEAAAAFJGYwXzEAAAACBQAAAAUkYWNjMAAAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAgQAAAAIZGVhZGxpbmUJAQAAABFwYXJzZUludE9yRGVmYXVsdAAAAAIJAAGRAAAAAgUAAAAJYXJndW1lbnRzAAAAAAAAAAAAAAAAAAAAAAAABAAAAAxyZWZlcnJlck5hbWUJAAGRAAAAAgUAAAAJYXJndW1lbnRzAAAAAAAAAAABCQAFFAAAAAIFAAAACGRlYWRsaW5lBQAAAAxyZWZlcnJlck5hbWUBAAAAFnZhbGlkYXRlQmxvY2tUaW1lc3RhbXAAAAABAAAACGRlYWRsaW5lAwMJAABmAAAAAgUAAAAIZGVhZGxpbmUAAAAAAAAAAAAJAABmAAAAAggFAAAACWxhc3RCbG9jawAAAAl0aW1lc3RhbXAFAAAACGRlYWRsaW5lBwkAAAIAAAABCQABLAAAAAIJAAEsAAAAAgkAASwAAAACAgAAAB9UaGlzIHN3YXAgZXhwaXJlZCBhdCB0aW1lc3RhbXAgCQABpAAAAAEFAAAACGRlYWRsaW5lAgAAAAsuIEN1cnJlbnQ6IAkAAaQAAAABCAUAAAAJbGFzdEJsb2NrAAAACXRpbWVzdGFtcAYBAAAABmRvU3dhcAAAAAUAAAAEcG9vbAAAAAdwYXltZW50AAAADWFzc2V0UmVjZWl2ZWQAAAASZXN0QW1vdW50VG9SZWNlaXZlAAAAEXNsaXBwYWdlVG9sZXJhbmNlBAAAAAtwb29sQWRkcmVzcwkBAAAAE3BhcnNlQWRkcmVzc09yVGhyb3cAAAABBQAAAARwb29sBAAAAAx2ZXJzaW9uTWFqb3IJAQAAAA9wYXJzZUludE9yVGhyb3cAAAABCQABkQAAAAIJAAS1AAAAAgkBAAAAEGdldFN0cmluZ09yVGhyb3cAAAACBQAAAAtwb29sQWRkcmVzcwIAAAAHdmVyc2lvbgIAAAABLgAAAAAAAAAAAAQAAAAPYXNzZXRSZWNlaXZlZElkCQEAAAAKZ2V0QXNzZXRJZAAAAAEFAAAADWFzc2V0UmVjZWl2ZWQEAAAACyR0MDQyMDU2MDY3AwkAAGYAAAACAAAAAAAAAAAABQAAABJlc3RBbW91bnRUb1JlY2VpdmUJAAACAAAAAQIAAAAjZXN0QW1vdW50VG9SZWNlaXZlIG11c3QgYmUgcG9zaXRpdmUDCQEAAAAMaXNTd29wZmlQb29sAAAAAQUAAAAEcG9vbAQAAAAKcG9vbEFzc2V0QQkBAAAAEGdldFN0cmluZ09yVGhyb3cAAAACBQAAAAtwb29sQWRkcmVzcwIAAAAKQV9hc3NldF9pZAQAAAAKcG9vbEFzc2V0QgkBAAAAEGdldFN0cmluZ09yVGhyb3cAAAACBQAAAAtwb29sQWRkcmVzcwIAAAAKQl9hc3NldF9pZAQAAAAMcG9vbEFzc2V0SWRBCQEAAAAKZ2V0QXNzZXRJZAAAAAEFAAAACnBvb2xBc3NldEEEAAAADHBvb2xBc3NldElkQgkBAAAACmdldEFzc2V0SWQAAAABBQAAAApwb29sQXNzZXRCBAAAAAskdDA0NjAzNDk0NwMDCQAAAAAAAAIIBQAAAAdwYXltZW50AAAAB2Fzc2V0SWQFAAAADHBvb2xBc3NldElkQQkAAAAAAAACBQAAAA9hc3NldFJlY2VpdmVkSWQFAAAA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bmNlQWZ0ZXIFAAAADWJhbGFuY2VCZWZvcmUDCQAAAAAAAAIFAAAACmRlbHRhUHJveHkFAAAACmRlbHRhUHJveHkJAARMAAAAAgkBAAAADlNjcmlwdFRyYW5zZmVyAAAAAwgFAAAAA2ludgAAAAZjYWxsZXIFAAAACmRlbHRhUHJveHkFAAAAB2Fzc2V0SWQFAAAAA25pbAkAAAIAAAABAgAAACRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4JAAACAAAAAQIAAAAkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuCQAAAgAAAAECAAAAJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgkAAAIAAAABAgAAACRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4AAAAEAAAAA2ludgEAAAAEc3dhcAAAAAcAAAAJYW1vdW50c0luAAAACWFkZHJlc3NlcwAAAA9hc3NldHNUb1JlY2VpdmUAAAALZXN0UmVjZWl2ZWQAAAARc2xpcHBhZ2VUb2xlcmFuY2UAAAALbWluUmVjZWl2ZWQAAAAHb3B0aW9ucwQAAAADcG10AwkAAAAAAAACCQABkAAAAAEIBQAAAANpbnYAAAAIcGF5bWVudHMAAAAAAAAAAAEJAAGRAAAAAggFAAAAA2ludgAAAAhwYXltZW50cwAAAAAAAAAAAAkAAAIAAAABAgAAABdTaW5nbGUgcGF5bWVudCByZXF1aXJlZAQAAAANJHQwMTE5MTIxMTk2NgkBAAAADmdldFN3YXBPcHRpb25zAAAAAQUAAAAHb3B0aW9ucwQAAAAIZGVhZGxpbmUIBQAAAA0kdDAxMTkxMjExOTY2AAAAAl8xBAAAAAxyZWZlcnJlck5hbWUIBQAAAA0kdDAxMTkxMjExOTY2AAAAAl8yBAAAABBpc1ZhbGlkVGltZXN0YW1wCQEAAAAWdmFsaWRhdGVCbG9ja1RpbWVzdGFtcAAAAAEFAAAACGRlYWRsaW5lAwkAAAAAAAACBQAAABBpc1ZhbGlkVGltZXN0YW1wBQAAABBpc1ZhbGlkVGltZXN0YW1wBAAAAA0kdDAxMjAzNDEyMTE0CQEAAAAWZ2V0UmVmZXJyZXJEYXRhT3JU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IGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuCQAAAgAAAAECAAAAJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgAAAANpbnYBAAAACnN3b3BmaVN3YXAAAAAHAAAACmV4Y2hhbmdlcnMAAAAOZXhjaGFuZ2Vyc1R5cGUAAAAFYXJnczEAAAAFYXJnczIAAAARcm91dGluZ0Fzc2V0c0tleXMAAAASbWluQW1vdW50VG9SZWNlaXZlAAAAB29wdGlvbnMEAAAADSR0MDE0MTY1MTQyMTkJAQAAAA5nZXRTd2FwT3B0aW9ucwAAAAEFAAAAB29wdGlvbnMEAAAACGRlYWRsaW5lCAUAAAANJHQwMTQxNjUxNDIxOQAAAAJfMQQAAAAMcmVmZXJyZXJOYW1lCAUAAAANJHQwMTQxNjUxNDIxOQAAAAJfMgQAAAAQaXNWYWxpZFRpbWVzdGFtcAkBAAAAFnZhbGlkYXRlQmxvY2tUaW1lc3RhbXAAAAABBQAAAAhkZWFkbGluZQMJAAAAAAAAAgUAAAAQaXNWYWxpZFRpbWVzdGFtcAUAAAAQaXNWYWxpZFRpbWVzdGFtcAQAAAANJHQwMTQyODcxNDM2NwkBAAAAFmdldFJlZmVycmVyRGF0YU9yVGhyb3cAAAABBQAAAAxyZWZlcnJlck5hbWUDCQAAAAAAAAIFAAAADSR0MDE0Mjg3MTQzNjcFAAAADSR0MDE0Mjg3MTQzNjcEAAAAD3JlZmVycmVyUGVyY2VudAgFAAAADSR0MDE0Mjg3MTQzNjcAAAACXzIEAAAAD3JlZmVycmVyQWRkcmVzcwgFAAAADSR0MDE0Mjg3MTQzNjcAAAACXzEEAAAABnJlc3VsdAkBAAAADndyYXBTd29wZmlTd2FwAAAABwUAAAADaW52BQAAAApleGNoYW5nZXJzBQAAAA5leGNoYW5nZXJzVHlwZQUAAAAFYXJnczEFAAAABWFyZ3MyBQAAABFyb3V0aW5nQXNzZXRzS2V5cwUAAAASbWluQW1vdW50VG9SZWNlaXZlAwkAAAAAAAACBQAAAAZyZXN1bHQFAAAABnJlc3VsdAMJAABmAAAAAgUAAAAPcmVmZXJyZXJQZXJjZW50AAAAAAAAAAAABAAAAA1sYXN0RXhjaGFuZ2VyCQEAAAATdmFsdWVPckVycm9yTWVzc2FnZQAAAAIJAAQmAAAAAQkAAZEAAAACBQAAAApleGNoYW5nZXJzCQAAZQAAAAIJAAGQAAAAAQUAAAAKZXhjaGFuZ2VycwAAAAAAAAAAAQIAAAApQ2FuJ3QgcGFyc2UgbGFzdCBleGNoYW5nZXIgc3dvcGZpIGFkZHJlc3MEAAAADmxhc3RBc3NldElkS2V5CQABLAAAAAIJAAGRAAAAAgkABLUAAAACCQABkQAAAAIFAAAAEXJvdXRpbmdBc3NldHNLZXlzCQAAZQAAAAIJAAGQAAAAAQUAAAARcm91dGluZ0Fzc2V0c0tleXMAAAAAAAAAAAECAAAAAV8AAAAAAAAAAAACAAAACV9hc3NldF9pZAQAAAAKYXNzZXRGaW5hbAkBAAAAE3ZhbHVlT3JFcnJvck1lc3NhZ2UAAAACCQAEHQAAAAIFAAAADWxhc3RFeGNoYW5nZXIFAAAADmxhc3RBc3NldElkS2V5CQABLAAAAAIJAAEsAAAAAgkAASwAAAACAgAAABZDYW4ndCByZWFkIHBhcmFtZXRlciAnBQAAAA5sYXN0QXNzZXRJZEtleQIAAAAQJyBmb3IgZXhjaGFuZ2VyIAkABCUAAAABBQAAAA1sYXN0RXhjaGFuZ2VyBAAAAAdhc3NldElkCQEAAAAKZ2V0QXNzZXRJZAAAAAEFAAAACmFzc2V0RmluYWwEAAAADGNvbGxlY3RvckZlZQgJAAGRAAAAAgUAAAAGcmVzdWx0AAAAAAAAAAABAAAABmFtb3VudAQAAAAOcmVmZXJyZXJSZXdhcmQJAABrAAAAAwUAAAAMY29sbGVjdG9yRmVlBQAAAA9yZWZlcnJlclBlcmNlbnQAAAAAAAAAAGQJAARMAAAAAgkAAZEAAAACBQAAAAZyZXN1bHQAAAAAAAAAAAAJAARMAAAAAgkBAAAADlNjcmlwdFRyYW5zZmVyAAAAAwUAAAAJY29sbGVjdG9yCQAAZQAAAAIFAAAADGNvbGxlY3RvckZlZQUAAAAOcmVmZXJyZXJSZXdhcmQFAAAAB2Fzc2V0SWQJAARMAAAAAgkBAAAADlNjcmlwdFRyYW5zZmVyAAAAAwUAAAAPcmVmZXJyZXJBZGRyZXNzBQAAAA5yZWZlcnJlclJld2FyZAUAAAAHYXNzZXRJZAUAAAADbmlsBQAAAAZyZXN1bHQJAAACAAAAAQIAAAAkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuCQAAAgAAAAECAAAAJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgkAAAIAAAABAgAAACRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4AAAADaW52AQAAAApwdXp6bGVTd2FwAAAAAwAAAAlyb3V0ZXNTdHIAAAAMbWluVG9SZWNlaXZlAAAAB29wdGlvbnMEAAAADSR0MDE1NDM3MTU0OTEJAQAAAA5nZXRTd2FwT3B0aW9ucwAAAAEFAAAAB29wdGlvbnMEAAAACGRlYWRsaW5lCAUAAAANJHQwMTU0MzcxNTQ5MQAAAAJfMQQAAAAMcmVmZXJyZXJOYW1lCAUAAAANJHQwMTU0MzcxNTQ5MQAAAAJfMgQAAAAQaXNWYWxpZFRpbWVzdGFtcAkBAAAAFnZhbGlkYXRlQmxvY2tUaW1lc3RhbXAAAAABBQAAAAhkZWFkbGluZQMJAAAAAAAAAgUAAAAQaXNWYWxpZFRpbWVzdGFtcAUAAAAQaXNWYWxpZFRpbWVzdGFtcAQAAAANJHQwMTU1NTkxNTYzOQkBAAAAFmdldFJlZmVycmVyRGF0YU9yVGhyb3cAAAABBQAAAAxyZWZlcnJlck5hbWUDCQAAAAAAAAIFAAAADSR0MDE1NTU5MTU2MzkFAAAADSR0MDE1NTU5MTU2MzkEAAAAD3JlZmVycmVyUGVyY2VudAgFAAAADSR0MDE1NTU5MTU2MzkAAAACXzIEAAAAD3JlZmVycmVyQWRkcmVzcwgFAAAADSR0MDE1NTU5MTU2MzkAAAACXzEDCQAAAAAAAAIJAAExAAAAAQUAAAAJcm91dGVzU3RyAAAAAAAAAAAACQAAAgAAAAECAAAAD0ludmFsaWQgcm91dGluZwMJAABnAAAAAgAAAAAAAAAAAAUAAAAMbWluVG9SZWNlaXZlCQAAAgAAAAECAAAAGFN1bSB0byByZWNlaXZlIGlzIHRvIGxvdwQAAAANYmFsYW5jZUJlZm9yZQkBAAAAE2dldEJhbGFuY2VCeUFkZHJlc3MAAAACBQAAAAljb2xsZWN0b3IFAAAAE3B1enpsZVJld2FyZEFzc2V0SWQDCQAAAAAAAAIFAAAADWJhbGFuY2VCZWZvcmUFAAAADWJhbGFuY2VCZWZvcmUEAAAABnJlc3VsdAkBAAAADndyYXBQdXp6bGVTd2FwAAAAAwUAAAADaW52BQAAAAlyb3V0ZXNTdHIFAAAADG1pblRvUmVjZWl2ZQMJAAAAAAAAAgUAAAAGcmVzdWx0BQAAAAZyZXN1bHQDCQAAZgAAAAIFAAAAD3JlZmVycmVyUGVyY2VudAAAAAAAAAAAAAQAAAAMYXNzZXRJZEZpbmFsCQABkQAAAAIJAAS1AAAAAgUAAAAJcm91dGVzU3RyAgAAAAEsCQAAZQAAAAIJAAGQAAAAAQkABLUAAAACBQAAAAlyb3V0ZXNTdHICAAAAASwAAAAAAAAAAAEEAAAAB2Fzc2V0SWQJAQAAAApnZXRBc3NldElkAAAAAQUAAAAMYXNzZXRJZEZpbmFsBAAAAAxiYWxhbmNlQWZ0ZXIJAQAAABNnZXRCYWxhbmNlQnlBZGRyZXNzAAAAAgUAAAAJY29sbGVjdG9yBQAAABNwdXp6bGVSZXdhcmRBc3NldElkAwkAAAAAAAACBQAAAAxiYWxhbmNlQWZ0ZXIFAAAADGJhbGFuY2VBZnRlcgQAAAAFZGVsdGEJAABlAAAAAgUAAAAMYmFsYW5jZUFmdGVyBQAAAA1iYWxhbmNlQmVmb3JlAwkAAAAAAAACBQAAAAVkZWx0YQUAAAAFZGVsdGEEAAAABnJld2FyZAkAAGsAAAADBQAAAAVkZWx0YQUAAAAPcmVmZXJyZXJQZXJjZW50AAAAAAAAAABkBAAAAANyZXMJAAP8AAAABAUAAAAJY29sbGVjdG9yAgAAABNjbGFpbVJlZmVycmVyUmV3YXJkCQAETAAAAAIFAAAABnJld2FyZAkABEwAAAACBQAAABRwdXp6bGVSZXdhcmRBc3NldFN0cgUAAAADbmlsBQAAAANuaWwDCQAAAAAAAAIFAAAAA3JlcwUAAAADcmVzCQAETQAAAAIFAAAABnJlc3VsdAkBAAAADlNjcmlwdFRyYW5zZmVyAAAAAwUAAAAPcmVmZXJyZXJBZGRyZXNzBQAAAAZyZXdhcmQFAAAAE3B1enpsZVJld2FyZEFzc2V0SWQJAAACAAAAAQIAAAAkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuCQAAAgAAAAECAAAAJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgkAAAIAAAABAgAAACRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4FAAAABnJlc3VsdAkAAAIAAAABAgAAACRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4JAAACAAAAAQIAAAAkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuCQAAAgAAAAECAAAAJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgkAAAIAAAABAgAAACRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4AAAADaW52AQAAAAthZGRSZWZlcnJlcgAAAAMAAAAMcmVmZXJyZXJOYW1lAAAADnJlZmVyZXJBZGRyZXNzAAAAB3BlcmNlbnQEAAAAB2FkZHJlc3MJAQAAABNwYXJzZUFkZHJlc3NPclRocm93AAAAAQUAAAAOcmVmZXJlckFkZHJlc3MDAwkAAGYAAAACAAAAAAAAAAAABQAAAAdwZXJjZW50BgkAAGYAAAACBQAAAAdwZXJjZW50AAAAAAAAAABkCQAAAgAAAAECAAAAFkluY29ycmVjdCBwZXJjZW50IHJhdGUDCQAAAAAAAAIJAAExAAAAAQUAAAAMcmVmZXJyZXJOYW1lAAAAAAAAAAAACQAAAgAAAAECAAAAFVJlZmVycmVyIG5hbWUgaW52YWxpZAMJAQAAAAEhAAAAAQkBAAAAD2NvbnRhaW5zRWxlbWVudAAAAAIJAARMAAAAAgUAAAAEdGhpcwkABEwAAAACBQAAAAljb2xsZWN0b3IFAAAAA25pbAgFAAAAA2ludgAAAAZjYWxsZXIJAAACAAAAAQIAAAArb25seSBzZWxmIGNhbGxzIG9yIGJ5IGNvbGxlY3RvciBhcmUgYWxsb3dlZAkABEwAAAACCQEAAAALU3RyaW5nRW50cnkAAAACCQABLAAAAAIJAAEsAAAAAgIAAAAJcmVmZXJyZXItBQAAAAxyZWZlcnJlck5hbWUCAAAACC1hZGRyZXNzBQAAAA5yZWZlcmVyQWRkcmVzcwkABEwAAAACCQEAAAAMSW50ZWdlckVudHJ5AAAAAgkAASwAAAACCQABLAAAAAICAAAACXJlZmVycmVyLQUAAAAMcmVmZXJyZXJOYW1lAgAAAAgtcGVyY2VudAUAAAAHcGVyY2VudAUAAAADbmlsAAAAAQAAAAJ0eAEAAAAGdmVyaWZ5AAAAAAQAAAALbWF5YmVPcmFjbGUJAAQmAAAAAQkBAAAAC3ZhbHVlT3JFbHNlAAAAAgkABB0AAAACBQAAAAR0aGlzAgAAAAZPcmFjbGUCAAAAAAQAAAAObWF5YmVBZG1pbktleXMDCQEAAAAJaXNEZWZpbmVkAAAAAQUAAAALbWF5YmVPcmFjbGUJAAQdAAAAAgkBAAAABXZhbHVlAAAAAQUAAAALbWF5YmVPcmFjbGUCAAAACUFkbWluS2V5cwUAAAAEdW5pdAQAAAAHJG1hdGNoMAUAAAAObWF5YmVBZG1pbktleXMDCQAAAQAAAAIFAAAAByRtYXRjaDACAAAABlN0cmluZwQAAAAMYWRtaW5LZXlzU3RyBQAAAAckbWF0Y2gwBAAAAAlhZG1pbktleXMEAAAACnN0cmluZ0tleXMJAAS1AAAAAgUAAAAMYWRtaW5LZXlzU3RyAgAAAAEsCQAETAAAAAIJAAJZAAAAAQkAAZEAAAACBQAAAApzdHJpbmdLZXlzAAAAAAAAAAAACQAETAAAAAIJAAJZAAAAAQkAAZEAAAACBQAAAApzdHJpbmdLZXlzAAAAAAAAAAABCQAETAAAAAIJAAJZAAAAAQkAAZEAAAACBQAAAApzdHJpbmdLZXlzAAAAAAAAAAACBQAAAANuaWwKAQAAAA92ZXJpZnlCeUFsbEtleXMAAAABAAAABXByb29mAwkAAfQAAAADCAUAAAACdHgAAAAJYm9keUJ5dGVzBQAAAAVwcm9vZgkAAZEAAAACBQAAAAlhZG1pbktleXMAAAAAAAAAAAAAAAAAAAAAAAEDCQAB9AAAAAMIBQAAAAJ0eAAAAAlib2R5Qnl0ZXMFAAAABXByb29mCQABkQAAAAIFAAAACWFkbWluS2V5cwAAAAAAAAAAAQAAAAAAAAAACgMJAAH0AAAAAwgFAAAAAnR4AAAACWJvZHlCeXRlcwUAAAAFcHJvb2YJAAGRAAAAAgUAAAAJYWRtaW5LZXlzAAAAAAAAAAACAAAAAAAAAABkAAAAAAAAAAAACQEAAAAPY29udGFpbnNFbGVtZW50AAAAAgkABEwAAAACAAAAAAAAAABuCQAETAAAAAIAAAAAAAAAAGUJAARMAAAAAgAAAAAAAAAACwUAAAADbmlsCQAAZAAAAAIJAQAAAA92ZXJpZnlCeUFsbEtleXMAAAABCQABkQAAAAIIBQAAAAJ0eAAAAAZwcm9vZnMAAAAAAAAAAAAJAQAAAA92ZXJpZnlCeUFsbEtleXMAAAABCQABkQAAAAIIBQAAAAJ0eAAAAAZwcm9vZnMAAAAAAAAAAAEJAAH0AAAAAwgFAAAAAnR4AAAACWJvZHlCeXRlcwkAAZEAAAACCAUAAAACdHgAAAAGcHJvb2ZzAAAAAAAAAAAACAUAAAACdHgAAAAPc2VuZGVyUHVibGljS2V5TlCMBA==", "height": 3555101, "applicationStatus": "succeeded", "spentComplexity": 0 } View: original | compacted Prev: Dbo7SzxoTB96BduL8Rg1BkEoTG1xBHZ3NRQdExS9chgL Next: 6PkNEyMhwoXcGVyLZ2s5QRX4LXSj3h7rVY3W6WZBtxvd Diff:
OldNewDifferences
2727
2828 let o = e(a(this, "oracle"))
2929
30-let p = e(a(this, "swopfi-routing"))
30+let p = e(a(o, "routing_address"))
3131
32-let q = e(a(this, "puzzle-routing"))
32+func q (b) = isDefined(getString(o, ("pool_" + b)))
3333
34-let r = split(a(o, "pools"), ",")
3534
36-let s = d(this, "percent-rate")
35+let r = e(a(this, "wx-factory"))
3736
38-let t = "keeper"
37+let s = e(a(r, "%s__swapContract"))
3938
40-let u = a(this, "puzzle-reward-token")
39+func t (b) = isDefined(getString(r, (("%s%s%s__" + b) + "__mappings__poolContract2PoolAssets")))
4140
42-let v = k(u)
4341
44-let w = split(a(this, "p-pools"), ",")
42+let u = e(a(this, "puzzle-routing"))
4543
46-func x (y) = {
47- let z = y
48- if ($isInstanceOf(z, "ByteVector"))
44+let v = a(this, "puzzle-reward-token")
45+
46+let w = k(v)
47+
48+let x = "keeper"
49+
50+let y = d(this, "percent-rate")
51+
52+func z (A) = {
53+ let B = A
54+ if ($isInstanceOf(B, "ByteVector"))
4955 then {
50- let l = z
56+ let l = B
5157 toBase58String(l)
5258 }
53- else if ($isInstanceOf(z, "Unit"))
59+ else if ($isInstanceOf(B, "Unit"))
5460 then {
55- let A = z
61+ let C = B
5662 "WAVES"
5763 }
5864 else throw("Match error")
5965 }
6066
6167
62-func B (y) = {
63- let z = y
64- if ($isInstanceOf(z, "ByteVector"))
68+func D (A) = {
69+ let B = A
70+ if ($isInstanceOf(B, "ByteVector"))
6571 then {
66- let l = z
72+ let l = B
6773 assetBalance(this, l)
6874 }
69- else if ($isInstanceOf(z, "Unit"))
75+ else if ($isInstanceOf(B, "Unit"))
7076 then {
71- let A = z
77+ let C = B
7278 wavesBalance(this).available
7379 }
7480 else throw("Match error")
7581 }
7682
7783
78-func C (b,y) = {
79- let z = y
80- if ($isInstanceOf(z, "ByteVector"))
84+func E (b,A) = {
85+ let B = A
86+ if ($isInstanceOf(B, "ByteVector"))
8187 then {
82- let l = z
88+ let l = B
8389 assetBalance(b, l)
8490 }
85- else if ($isInstanceOf(z, "Unit"))
91+ else if ($isInstanceOf(B, "Unit"))
8692 then {
87- let A = z
93+ let C = B
8894 wavesBalance(b).available
8995 }
9096 else throw("Match error")
9197 }
9298
9399
94-func D (E) = {
95- let F = fraction(E, 1, n)
96- $Tuple2((E - F), F)
100+func F (G) = {
101+ let H = fraction(G, 1, n)
102+ $Tuple2((G - H), H)
97103 }
98104
99105
100-func G (H) = {
101- let I = e(valueOrErrorMessage(getString(this, (("referrer-" + H) + "-address")), (("referrer with name " + H) + " not found")))
102- let J = valueOrElse(getInteger(this, (("referrer-" + H) + "-percent")), s)
103- if (if ((0 > J))
104- then true
105- else (J > 100))
106- then throw("Incorrect percent rate")
107- else $Tuple2(I, J)
106+func I (J) = if ((size(J) == 0))
107+ then $Tuple2(m, 0)
108+ else {
109+ let K = e(valueOrErrorMessage(getString(this, (("referrer-" + J) + "-address")), (("referrer with name " + J) + " not found")))
110+ let L = valueOrElse(getInteger(this, (("referrer-" + J) + "-percent")), y)
111+ if (if ((0 > L))
112+ then true
113+ else (L > 100))
114+ then throw("Incorrect percent rate")
115+ else $Tuple2(K, L)
116+ }
117+
118+
119+func M (N) = {
120+ func O (P,Q) = if ((Q >= size(N)))
121+ then (P :+ "")
122+ else (P :+ N[Q])
123+
124+ let R = [0, 1]
125+ let S = {
126+ let T = R
127+ let U = size(T)
128+ let V = nil
129+ func W (X,Y) = if ((Y >= U))
130+ then X
131+ else O(X, T[Y])
132+
133+ func Z (X,Y) = if ((Y >= U))
134+ then X
135+ else throw("List size exceeds 2")
136+
137+ Z(W(W(V, 0), 1), 2)
138+ }
139+ let aa = g(S[0], 0)
140+ let J = S[1]
141+ $Tuple2(aa, J)
108142 }
109143
110144
111-func K (L) = {
112- func M (N,O) = if ((O >= size(L)))
113- then (N :+ "")
114- else (N :+ L[O])
145+func ab (aa) = if (if ((aa > 0))
146+ then (lastBlock.timestamp > aa)
147+ else false)
148+ then throw(((("This swap expired at timestamp " + toString(aa)) + ". Current: ") + toString(lastBlock.timestamp)))
149+ else true
115150
116- let P = [0, 1]
117- let Q = {
118- let R = P
119- let S = size(R)
120- let T = nil
121- func U (V,W) = if ((W >= S))
122- then V
123- else M(V, R[W])
124151
125- func X (V,W) = if ((W >= S))
126- then V
127- else throw("List size exceeds 2")
128-
129- X(U(U(T, 0), 1), 2)
130- }
131- let Y = g(Q[0], 0)
132- let H = Q[1]
133- $Tuple2(Y, H)
152+func ac (ad,ae,af,ag,ah) = {
153+ let ai = e(ad)
154+ let aj = j(split(a(ai, "version"), ".")[0])
155+ let ak = k(af)
156+ let al = if ((0 > ag))
157+ then throw("estAmountToReceive must be positive")
158+ else if (q(ad))
159+ then {
160+ let am = a(ai, "A_asset_id")
161+ let an = a(ai, "B_asset_id")
162+ let ao = k(am)
163+ let ap = k(an)
164+ let aq = if (if ((ae.assetId == ao))
165+ then (ak == ap)
166+ else false)
167+ then $Tuple2(ao, ap)
168+ else if (if ((ak == ao))
169+ then (ae.assetId == ap)
170+ else false)
171+ then $Tuple2(ap, ao)
172+ else throw("Unsupported assets pair")
173+ let ar = aq._1
174+ let as = aq._2
175+ if ((aj == 1))
176+ then $Tuple3(ai, "callFunction", ["exchange", ["1"]])
177+ else if ((aj == 2))
178+ then if ((0 >= ag))
179+ then throw("estAmountToReceive must be positive")
180+ else {
181+ let at = (ag - fraction(ag, ah, 1000))
182+ $Tuple3(ai, "exchange", [ag, if ((at > 0))
183+ then at
184+ else 1])
185+ }
186+ else throw((("Unknown pool version '" + toString(aj)) + "', but 1 or 2 expected"))
187+ }
188+ else if (t(ad))
189+ then $Tuple3(s, "swap", [1, af, toString(this)])
190+ else $Tuple3(ai, "swap", [af, 0])
191+ let au = al._1
192+ let av = al._2
193+ let aw = al._3
194+ let ax = D(ak)
195+ if ((ax == ax))
196+ then {
197+ let ay = invoke(au, av, aw, [ae])
198+ if ((ay == ay))
199+ then {
200+ let az = (D(ak) - ax)
201+ if ((az == az))
202+ then if ((0 >= az))
203+ then throw("Received amount from pool must be positive")
204+ else az
205+ else throw("Strict value is not equal to itself.")
206+ }
207+ else throw("Strict value is not equal to itself.")
208+ }
209+ else throw("Strict value is not equal to itself.")
134210 }
135211
136212
137-func Z (Y) = if (if ((Y > 0))
138- then (lastBlock.timestamp > Y)
139- else false)
140- then throw(((("This swap expired at timestamp " + toString(Y)) + ". Current: ") + toString(lastBlock.timestamp)))
141- else true
142-
143-
144-func aa (ab,ac,ad,ae,af) = {
145- let ag = e(ab)
146- let ah = j(split(a(ag, "version"), ".")[0])
147- let ai = k(ad)
148- if ((0 > ae))
149- then throw("estAmountToReceive must be positive")
150- else if (containsElement(r, ab))
151- then {
152- let aj = a(ag, "A_asset_id")
153- let ak = a(ag, "B_asset_id")
154- let al = k(aj)
155- let am = k(ak)
156- let an = if (if ((ac.assetId == al))
157- then (ai == am)
158- else false)
159- then $Tuple2(al, am)
160- else if (if ((ai == al))
161- then (ac.assetId == am)
162- else false)
163- then $Tuple2(am, al)
164- else throw("Unsupported assets pair")
165- let ao = an._1
166- let ap = an._2
167- let aq = if ((ah == 1))
168- then $Tuple2("callFunction", ["exchange", ["1"]])
169- else if ((ah == 2))
170- then if ((0 >= ae))
171- then throw("estAmountToReceive must be positive")
172- else if (if ((0 > af))
173- then true
174- else (af > 1000))
175- then throw("Slippage tolerance must be non-negative and less than or equal to 1000")
176- else {
177- let ar = (ae - fraction(ae, af, 1000))
178- $Tuple2("exchange", [ae, if ((ar > 0))
179- then ar
180- else 1])
181- }
182- else throw((("Unknown pool version '" + toString(ah)) + "', but 1 or 2 expected"))
183- let as = aq._1
184- let at = aq._2
185- let au = B(ai)
186- if ((au == au))
187- then {
188- let av = invoke(ag, as, at, [ac])
189- if ((av == av))
190- then {
191- let aw = (B(ai) - au)
192- if ((aw == aw))
193- then if ((0 >= aw))
194- then throw("Received amount from pool must be positive")
195- else aw
196- else throw("Strict value is not equal to itself.")
197- }
198- else throw("Strict value is not equal to itself.")
199- }
200- else throw("Strict value is not equal to itself.")
201- }
202- else if (containsElement(w, ab))
203- then {
204- let au = B(ai)
205- if ((au == au))
206- then {
207- let av = invoke(ag, "swap", [ad, 0], [ac])
208- if ((av == av))
209- then {
210- let aw = (B(ai) - au)
211- if ((aw == aw))
212- then if ((0 >= aw))
213- then throw("Received amount from pool must be positive")
214- else aw
215- else throw("Strict value is not equal to itself.")
216- }
217- else throw("Strict value is not equal to itself.")
218- }
219- else throw("Strict value is not equal to itself.")
220- }
221- else throw((("There is no pool at address '" + ab) + "'"))
222- }
223-
224-
225-func ax (ay,az,aA,aB,af,aC) = {
226- let aD = if ((size(ay.payments) > 0))
227- then ay.payments[0]
228- else throw("Payment required")
229- let aE = aA[(size(aA) - 1)]
230- let aF = k(aE)
231- let P = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
232- func aG (aH,O) = if ((O >= size(az)))
213+func aA (aB,aC,aD,aE,ah) = {
214+ let aF = if ((size(aB.payments) == 1))
215+ then aB.payments[0]
216+ else throw("Single payment required")
217+ func aG (aH,Q) = if ((Q >= size(aC)))
233218 then aH
234219 else {
235- let ad = aA[O]
236- let ai = k(ad)
237- let z = aa(az[O], aH, ad, aB[O], af)
238- if ($isInstanceOf(z, "Int"))
220+ let af = aD[Q]
221+ let ak = k(af)
222+ let B = ac(aC[Q], aH, af, aE[Q], ah)
223+ if ($isInstanceOf(B, "Int"))
239224 then {
240- let aI = z
241- AttachedPayment(ai, aI)
225+ let aI = B
226+ AttachedPayment(ak, aI)
242227 }
243228 else throw("Can't handle swap result")
244229 }
245230
246- let aJ = if ((size(az) > 0))
231+ let az = if ((size(aC) > 0))
247232 then {
248- let R = P
249- let S = size(R)
250- let T = aD
251- func U (V,W) = if ((W >= S))
252- then V
253- else aG(V, R[W])
233+ let T = [0, 1, 2, 3, 4]
234+ let U = size(T)
235+ let V = aF
236+ func W (X,Y) = if ((Y >= U))
237+ then X
238+ else aG(X, T[Y])
254239
255- func X (V,W) = if ((W >= S))
256- then V
257- else throw("List size exceeds 10")
240+ func Z (X,Y) = if ((Y >= U))
241+ then X
242+ else throw("List size exceeds 5")
258243
259- X(U(U(U(U(U(U(U(U(U(U(T, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10)
244+ Z(W(W(W(W(W(V, 0), 1), 2), 3), 4), 5)
260245 }
261246 else throw("Path cannot be empty")
262- let aK = D(aJ.amount)
263- let aL = aK._1
264- let F = aK._2
265- if ((0 >= aJ.amount))
266- then throw((("Swap result " + toString(aJ.amount)) + " must be positive"))
267- else if ((aC > aL))
268- then throw(((("Swap result " + toString(aL)) + " is less then expected ") + toString(aC)))
269- else [ScriptTransfer(ay.caller, aL, aF), ScriptTransfer(m, F, aF)]
247+ if ((0 >= az.amount))
248+ then throw((("Swap result " + toString(az.amount)) + " must be positive"))
249+ else az
270250 }
271251
272252
273-func aM (ay,aN,aO,aP,aQ,aR,aS) = {
274- let aD = if ((size(ay.payments) > 0))
275- then ay.payments[0]
276- else throw("Payment required")
277- let aT = valueOrErrorMessage(addressFromString(aN[(size(aN) - 1)]), "Can't parse last exchanger swopfi address")
278- let aU = (split(aR[(size(aR) - 1)], "_")[0] + "_asset_id")
279- let aE = valueOrErrorMessage(getString(aT, aU), ((("Can't read parameter '" + aU) + "' for exchanger ") + toString(aT)))
280- let aF = k(aE)
281- let au = B(aF)
282- if ((au == au))
253+func aJ (aB,aK,aC,aD,aE,ah) = {
254+ let aF = if ((size(aB.payments) == 1))
255+ then aB.payments[0]
256+ else throw("Single payment required")
257+ func aL (aM,Q) = if ((Q >= size(aC)))
258+ then aM
259+ else {
260+ let aN = Invocation([AttachedPayment(aF.assetId, aK[Q])], aB.caller, aB.callerPublicKey, aB.transactionId, aB.fee, aB.feeAssetId, aB.originCaller, aB.originCallerPublicKey)
261+ let aO = split(aC[Q], "_")
262+ let aP = split(aD[Q], "_")
263+ func aQ (ay,h) = (ay :+ j(h))
264+
265+ let aR = {
266+ let T = split(aE[Q], "_")
267+ let U = size(T)
268+ let V = nil
269+ func W (X,Y) = if ((Y >= U))
270+ then X
271+ else aQ(X, T[Y])
272+
273+ func Z (X,Y) = if ((Y >= U))
274+ then X
275+ else throw("List size exceeds 5")
276+
277+ Z(W(W(W(W(W(V, 0), 1), 2), 3), 4), 5)
278+ }
279+ let ay = aA(aN, aO, aP, aR, ah)
280+ if ((ay == ay))
281+ then (aM :+ ay)
282+ else throw("Strict value is not equal to itself.")
283+ }
284+
285+ let T = [0, 1, 2]
286+ let U = size(T)
287+ let V = nil
288+ func W (X,Y) = if ((Y >= U))
289+ then X
290+ else aL(X, T[Y])
291+
292+ func Z (X,Y) = if ((Y >= U))
293+ then X
294+ else throw("List size exceeds 3")
295+
296+ Z(W(W(W(V, 0), 1), 2), 3)
297+ }
298+
299+
300+func aS (aB,aT,aU,aV,aW,aX,aY) = {
301+ let aF = if ((size(aB.payments) == 1))
302+ then aB.payments[0]
303+ else throw("Single payment required")
304+ let aZ = valueOrErrorMessage(addressFromString(aT[(size(aT) - 1)]), "Can't parse last exchanger swopfi address")
305+ let ba = (split(aX[(size(aX) - 1)], "_")[0] + "_asset_id")
306+ let bb = valueOrErrorMessage(getString(aZ, ba), ((("Can't read parameter '" + ba) + "' for exchanger ") + toString(aZ)))
307+ let bc = k(bb)
308+ let ax = D(bc)
309+ if ((ax == ax))
283310 then {
284- let av = invoke(p, "routingTrade", [aN, aO, aP, aQ, aR, aS], [aD])
285- if ((av == av))
311+ let ay = invoke(p, "routingTrade", [aT, aU, aV, aW, aX, aY], [aF])
312+ if ((ay == ay))
286313 then {
287- let aV = B(aF)
288- if ((aV == aV))
314+ let bd = D(bc)
315+ if ((bd == bd))
289316 then {
290- let aW = (aV - au)
291- let aX = D(aW)
292- let aL = aX._1
293- let F = aX._2
294- if ((0 >= aW))
295- then throw((("Swap result " + toString(aW)) + " must be positive"))
296- else if ((aS > aL))
297- then throw(((("Swap result " + toString(aL)) + " is less then expected ") + toString(aS)))
298- else [ScriptTransfer(ay.caller, aL, aF), ScriptTransfer(m, F, aF)]
317+ let be = (bd - ax)
318+ let bf = F(be)
319+ let bg = bf._1
320+ let H = bf._2
321+ if ((0 >= be))
322+ then throw((("Swap result " + toString(be)) + " must be positive"))
323+ else if ((aY > bg))
324+ then throw(((("Swap result " + toString(bg)) + " is less then expected ") + toString(aY)))
325+ else [ScriptTransfer(aB.caller, bg, bc), ScriptTransfer(m, H, bc)]
299326 }
300327 else throw("Strict value is not equal to itself.")
301328 }
305332 }
306333
307334
308-func aY (ay,aZ,ba) = {
309- let aD = if ((size(ay.payments) > 0))
310- then ay.payments[0]
311- else throw("Payment required")
312- let bb = split(aZ, ",")[(size(split(aZ, ",")) - 1)]
313- let y = k(bb)
314- let au = B(y)
315- if ((au == au))
335+func bh (aB,bi,bj) = {
336+ let aF = if ((size(aB.payments) == 1))
337+ then aB.payments[0]
338+ else throw("Single payment required")
339+ let bk = split(bi, ",")[(size(split(bi, ",")) - 1)]
340+ let A = k(bk)
341+ let ax = D(A)
342+ if ((ax == ax))
316343 then {
317- let av = invoke(q, "swapWithReferral", [aZ, ba, t], [aD])
318- if ((av == av))
344+ let ay = invoke(u, "swapWithReferral", [bi, bj, x], [aF])
345+ if ((ay == ay))
319346 then {
320- let aV = B(y)
321- if ((aV == aV))
347+ let bd = D(A)
348+ if ((bd == bd))
322349 then {
323- let bc = (aV - au)
324- if ((bc == bc))
325- then [ScriptTransfer(ay.caller, bc, y)]
350+ let bl = (bd - ax)
351+ if ((bl == bl))
352+ then [ScriptTransfer(aB.caller, bl, A)]
326353 else throw("Strict value is not equal to itself.")
327354 }
328355 else throw("Strict value is not equal to itself.")
333360 }
334361
335362
336-@Callable(ay)
337-func swap (az,aA,aB,af,aC,L) = {
338- let bd = K(L)
339- let Y = bd._1
340- let H = bd._2
341- let be = Z(Y)
342- if ((be == be))
363+@Callable(aB)
364+func swap (aK,aC,aD,aE,ah,bm,N) = {
365+ let aF = if ((size(aB.payments) == 1))
366+ then aB.payments[0]
367+ else throw("Single payment required")
368+ let bn = M(N)
369+ let aa = bn._1
370+ let J = bn._2
371+ let bo = ab(aa)
372+ if ((bo == bo))
343373 then {
344- let av = ax(ay, az, aA, aB, af, aC)
345- if ((av == av))
346- then if ((size(H) > 0))
347- then {
348- let aE = aA[(size(aA) - 1)]
349- let y = k(aE)
350- let bf = G(H)
351- let bg = bf._1
352- let bh = bf._2
353- let bi = av[1].amount
354- let bj = fraction(bi, bh, 100)
355-[av[0], ScriptTransfer(m, (bi - bj), y), ScriptTransfer(bg, bj, y)]
374+ let bp = I(J)
375+ if ((bp == bp))
376+ then {
377+ let bq = bp._2
378+ let br = bp._1
379+ let bs = if (if ((1 > size(aC)))
380+ then true
381+ else (size(aC) > 3))
382+ then throw("Supported swap of 1 to 3 splits")
383+ else aC
384+ let bt = if (if ((0 > ah))
385+ then true
386+ else (ah > 1000))
387+ then throw("Slippage tolerance must be non-negative and less than or equal to 1000")
388+ else ah
389+ func bu (bv,bw) = (bv + bw)
390+
391+ let bx = {
392+ let T = aK
393+ let U = size(T)
394+ let V = 0
395+ func W (X,Y) = if ((Y >= U))
396+ then X
397+ else bu(X, T[Y])
398+
399+ func Z (X,Y) = if ((Y >= U))
400+ then X
401+ else throw("List size exceeds 3")
402+
403+ Z(W(W(W(V, 0), 1), 2), 3)
356404 }
357- else av
405+ let by = if ((aF.amount != bx))
406+ then throw(((("Total amount after split " + toString(bx)) + " is not equal original payment amount ") + toString(aF.amount)))
407+ else aJ(aB, aK, bs, aD, aE, bt)
408+ if ((by == by))
409+ then {
410+ func bz (bA,bw) = (bA + bw.amount)
411+
412+ let bB = {
413+ let T = by
414+ let U = size(T)
415+ let V = 0
416+ func bC (X,Y) = if ((Y >= U))
417+ then X
418+ else bz(X, T[Y])
419+
420+ func bD (X,Y) = if ((Y >= U))
421+ then X
422+ else throw("List size exceeds 3")
423+
424+ bD(bC(bC(bC(V, 0), 1), 2), 3)
425+ }
426+ let A = by[0].assetId
427+ let bE = F(bB)
428+ let bF = bE._1
429+ let H = bE._2
430+ let bG = fraction(H, bq, 100)
431+ let bH = (H - bG)
432+ let bI = [ScriptTransfer(aB.caller, bF, A), ScriptTransfer(m, bH, A)]
433+ if ((bm > bF))
434+ then throw(((("Swap result " + toString(bF)) + " is less then expected ") + toString(bm)))
435+ else if ((bG == 0))
436+ then bI
437+ else (bI :+ ScriptTransfer(br, bG, A))
438+ }
439+ else throw("Strict value is not equal to itself.")
440+ }
358441 else throw("Strict value is not equal to itself.")
359442 }
360443 else throw("Strict value is not equal to itself.")
362445
363446
364447
365-@Callable(ay)
366-func swopfiSwap (aN,aO,aP,aQ,aR,aS,L) = {
367- let bk = K(L)
368- let Y = bk._1
369- let H = bk._2
370- let be = Z(Y)
371- if ((be == be))
448+@Callable(aB)
449+func swopfiSwap (aT,aU,aV,aW,aX,aY,N) = {
450+ let bJ = M(N)
451+ let aa = bJ._1
452+ let J = bJ._2
453+ let bo = ab(aa)
454+ if ((bo == bo))
372455 then {
373- let av = aM(ay, aN, aO, aP, aQ, aR, aS)
374- if ((av == av))
375- then if ((size(H) > 0))
376- then {
377- let aT = valueOrErrorMessage(addressFromString(aN[(size(aN) - 1)]), "Can't parse last exchanger swopfi address")
378- let aU = (split(aR[(size(aR) - 1)], "_")[0] + "_asset_id")
379- let aE = valueOrErrorMessage(getString(aT, aU), ((("Can't read parameter '" + aU) + "' for exchanger ") + toString(aT)))
380- let y = k(aE)
381- let bl = G(H)
382- let bg = bl._1
383- let bh = bl._2
384- let bi = av[1].amount
385- let bj = fraction(bi, bh, 100)
386-[av[0], ScriptTransfer(m, (bi - bj), y), ScriptTransfer(bg, bj, y)]
387- }
388- else av
456+ let bK = I(J)
457+ if ((bK == bK))
458+ then {
459+ let bq = bK._2
460+ let br = bK._1
461+ let ay = aS(aB, aT, aU, aV, aW, aX, aY)
462+ if ((ay == ay))
463+ then if ((bq > 0))
464+ then {
465+ let aZ = valueOrErrorMessage(addressFromString(aT[(size(aT) - 1)]), "Can't parse last exchanger swopfi address")
466+ let ba = (split(aX[(size(aX) - 1)], "_")[0] + "_asset_id")
467+ let bb = valueOrErrorMessage(getString(aZ, ba), ((("Can't read parameter '" + ba) + "' for exchanger ") + toString(aZ)))
468+ let A = k(bb)
469+ let bL = ay[1].amount
470+ let bG = fraction(bL, bq, 100)
471+[ay[0], ScriptTransfer(m, (bL - bG), A), ScriptTransfer(br, bG, A)]
472+ }
473+ else ay
474+ else throw("Strict value is not equal to itself.")
475+ }
389476 else throw("Strict value is not equal to itself.")
390477 }
391478 else throw("Strict value is not equal to itself.")
393480
394481
395482
396-@Callable(ay)
397-func puzzleSwap (aZ,ba,L) = {
398- let bm = K(L)
399- let Y = bm._1
400- let H = bm._2
401- let be = Z(Y)
402- if ((be == be))
403- then if ((size(aZ) == 0))
404- then throw("Invalid routing")
405- else if ((0 >= ba))
406- then throw("Sum to receive is to low")
407- else {
408- let au = C(m, v)
409- if ((au == au))
410- then {
411- let av = aY(ay, aZ, ba)
412- if ((av == av))
413- then if ((size(H) > 0))
483+@Callable(aB)
484+func puzzleSwap (bi,bj,N) = {
485+ let bM = M(N)
486+ let aa = bM._1
487+ let J = bM._2
488+ let bo = ab(aa)
489+ if ((bo == bo))
490+ then {
491+ let bN = I(J)
492+ if ((bN == bN))
493+ then {
494+ let bq = bN._2
495+ let br = bN._1
496+ if ((size(bi) == 0))
497+ then throw("Invalid routing")
498+ else if ((0 >= bj))
499+ then throw("Sum to receive is to low")
500+ else {
501+ let ax = E(m, w)
502+ if ((ax == ax))
414503 then {
415- let bb = split(aZ, ",")[(size(split(aZ, ",")) - 1)]
416- let y = k(bb)
417- let bn = G(H)
418- let bg = bn._1
419- let bh = bn._2
420- let aV = C(m, v)
421- if ((aV == aV))
422- then {
423- let aW = (aV - au)
424- if ((aW == aW))
425- then {
426- let bo = fraction(aW, bh, 100)
427- let bp = invoke(m, "claimReferrerReward", [bo, u], nil)
428- if ((bp == bp))
429- then (av :+ ScriptTransfer(bg, bo, v))
430- else throw("Strict value is not equal to itself.")
431- }
432- else throw("Strict value is not equal to itself.")
433- }
504+ let ay = bh(aB, bi, bj)
505+ if ((ay == ay))
506+ then if ((bq > 0))
507+ then {
508+ let bk = split(bi, ",")[(size(split(bi, ",")) - 1)]
509+ let A = k(bk)
510+ let bd = E(m, w)
511+ if ((bd == bd))
512+ then {
513+ let be = (bd - ax)
514+ if ((be == be))
515+ then {
516+ let bO = fraction(be, bq, 100)
517+ let bP = invoke(m, "claimReferrerReward", [bO, v], nil)
518+ if ((bP == bP))
519+ then (ay :+ ScriptTransfer(br, bO, w))
520+ else throw("Strict value is not equal to itself.")
521+ }
522+ else throw("Strict value is not equal to itself.")
523+ }
524+ else throw("Strict value is not equal to itself.")
525+ }
526+ else ay
434527 else throw("Strict value is not equal to itself.")
435528 }
436- else av
437- else throw("Strict value is not equal to itself.")
438- }
439- else throw("Strict value is not equal to itself.")
529+ else throw("Strict value is not equal to itself.")
530+ }
440531 }
532+ else throw("Strict value is not equal to itself.")
533+ }
441534 else throw("Strict value is not equal to itself.")
442535 }
443536
444537
445538
446-@Callable(ay)
447-func addPools (bq) = {
448- func br (r,ab) = if (containsElement(r, ab))
449- then throw((("Pool '" + ab) + "' is already added"))
450- else (r :+ toString(e(ab)))
451-
452- if (!(containsElement([this, m], ay.caller)))
453- then throw("only self calls or by collector are allowed")
454- else [StringEntry("p-pools", makeString({
455- let R = bq
456- let S = size(R)
457- let T = w
458- func U (V,W) = if ((W >= S))
459- then V
460- else br(V, R[W])
461-
462- func X (V,W) = if ((W >= S))
463- then V
464- else throw("List size exceeds 10")
465-
466- X(U(U(U(U(U(U(U(U(U(U(T, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10)
467- }, ","))]
539+@Callable(aB)
540+func addReferrer (J,bQ,bR) = {
541+ let b = e(bQ)
542+ if (if ((0 > bR))
543+ then true
544+ else (bR > 100))
545+ then throw("Incorrect percent rate")
546+ else if ((size(J) == 0))
547+ then throw("Referrer name invalid")
548+ else if (!(containsElement([this, m], aB.caller)))
549+ then throw("only self calls or by collector are allowed")
550+ else [StringEntry((("referrer-" + J) + "-address"), bQ), IntegerEntry((("referrer-" + J) + "-percent"), bR)]
468551 }
469552
470553
471-
472-@Callable(ay)
473-func addReferer (H,bs,bt) = {
474- let b = e(bs)
475- if (if ((0 > bt))
476- then true
477- else (bt > 100))
478- then throw("Incorrect percent rate")
479- else if ((size(H) == 0))
480- then throw("Referrer name invalid")
481- else if (!(containsElement([this, m], ay.caller)))
482- then throw("only self calls or by collector are allowed")
483- else [StringEntry((("referrer-" + H) + "-address"), bs), IntegerEntry((("referrer-" + H) + "-percent"), bt)]
484- }
485-
486-
487-@Verifier(bu)
488-func bv () = {
489- let bw = addressFromString(valueOrElse(getString(this, "Oracle"), ""))
490- let bx = if (isDefined(bw))
491- then getString(value(bw), "AdminKeys")
554+@Verifier(bS)
555+func bT () = {
556+ let bU = addressFromString(valueOrElse(getString(this, "Oracle"), ""))
557+ let bV = if (isDefined(bU))
558+ then getString(value(bU), "AdminKeys")
492559 else unit
493- let z = bx
494- if ($isInstanceOf(z, "String"))
560+ let B = bV
561+ if ($isInstanceOf(B, "String"))
495562 then {
496- let by = z
497- let bz = {
498- let bA = split(by, ",")
499-[fromBase58String(bA[0]), fromBase58String(bA[1]), fromBase58String(bA[2])]
563+ let bW = B
564+ let bX = {
565+ let bY = split(bW, ",")
566+[fromBase58String(bY[0]), fromBase58String(bY[1]), fromBase58String(bY[2])]
500567 }
501- func bB (bC) = if (sigVerify(bu.bodyBytes, bC, bz[0]))
568+ func bZ (ca) = if (sigVerify(bS.bodyBytes, ca, bX[0]))
502569 then 1
503- else if (sigVerify(bu.bodyBytes, bC, bz[1]))
570+ else if (sigVerify(bS.bodyBytes, ca, bX[1]))
504571 then 10
505- else if (sigVerify(bu.bodyBytes, bC, bz[2]))
572+ else if (sigVerify(bS.bodyBytes, ca, bX[2]))
506573 then 100
507574 else 0
508575
509- containsElement([110, 101, 11], (bB(bu.proofs[0]) + bB(bu.proofs[1])))
576+ containsElement([110, 101, 11], (bZ(bS.proofs[0]) + bZ(bS.proofs[1])))
510577 }
511- else sigVerify(bu.bodyBytes, bu.proofs[0], bu.senderPublicKey)
578+ else sigVerify(bS.bodyBytes, bS.proofs[0], bS.senderPublicKey)
512579 }
513580
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,i) = valueOrElse(parseInt(h), i)
1414
1515
1616 func j (h) = valueOrErrorMessage(parseInt(h), (("Can't parse integer from '" + h) + "'"))
1717
1818
1919 func k (l) = if ((l == "WAVES"))
2020 then unit
2121 else fromBase58String(l)
2222
2323
2424 let m = e(a(this, "collector"))
2525
2626 let n = d(this, "fee-rate")
2727
2828 let o = e(a(this, "oracle"))
2929
30-let p = e(a(this, "swopfi-routing"))
30+let p = e(a(o, "routing_address"))
3131
32-let q = e(a(this, "puzzle-routing"))
32+func q (b) = isDefined(getString(o, ("pool_" + b)))
3333
34-let r = split(a(o, "pools"), ",")
3534
36-let s = d(this, "percent-rate")
35+let r = e(a(this, "wx-factory"))
3736
38-let t = "keeper"
37+let s = e(a(r, "%s__swapContract"))
3938
40-let u = a(this, "puzzle-reward-token")
39+func t (b) = isDefined(getString(r, (("%s%s%s__" + b) + "__mappings__poolContract2PoolAssets")))
4140
42-let v = k(u)
4341
44-let w = split(a(this, "p-pools"), ",")
42+let u = e(a(this, "puzzle-routing"))
4543
46-func x (y) = {
47- let z = y
48- if ($isInstanceOf(z, "ByteVector"))
44+let v = a(this, "puzzle-reward-token")
45+
46+let w = k(v)
47+
48+let x = "keeper"
49+
50+let y = d(this, "percent-rate")
51+
52+func z (A) = {
53+ let B = A
54+ if ($isInstanceOf(B, "ByteVector"))
4955 then {
50- let l = z
56+ let l = B
5157 toBase58String(l)
5258 }
53- else if ($isInstanceOf(z, "Unit"))
59+ else if ($isInstanceOf(B, "Unit"))
5460 then {
55- let A = z
61+ let C = B
5662 "WAVES"
5763 }
5864 else throw("Match error")
5965 }
6066
6167
62-func B (y) = {
63- let z = y
64- if ($isInstanceOf(z, "ByteVector"))
68+func D (A) = {
69+ let B = A
70+ if ($isInstanceOf(B, "ByteVector"))
6571 then {
66- let l = z
72+ let l = B
6773 assetBalance(this, l)
6874 }
69- else if ($isInstanceOf(z, "Unit"))
75+ else if ($isInstanceOf(B, "Unit"))
7076 then {
71- let A = z
77+ let C = B
7278 wavesBalance(this).available
7379 }
7480 else throw("Match error")
7581 }
7682
7783
78-func C (b,y) = {
79- let z = y
80- if ($isInstanceOf(z, "ByteVector"))
84+func E (b,A) = {
85+ let B = A
86+ if ($isInstanceOf(B, "ByteVector"))
8187 then {
82- let l = z
88+ let l = B
8389 assetBalance(b, l)
8490 }
85- else if ($isInstanceOf(z, "Unit"))
91+ else if ($isInstanceOf(B, "Unit"))
8692 then {
87- let A = z
93+ let C = B
8894 wavesBalance(b).available
8995 }
9096 else throw("Match error")
9197 }
9298
9399
94-func D (E) = {
95- let F = fraction(E, 1, n)
96- $Tuple2((E - F), F)
100+func F (G) = {
101+ let H = fraction(G, 1, n)
102+ $Tuple2((G - H), H)
97103 }
98104
99105
100-func G (H) = {
101- let I = e(valueOrErrorMessage(getString(this, (("referrer-" + H) + "-address")), (("referrer with name " + H) + " not found")))
102- let J = valueOrElse(getInteger(this, (("referrer-" + H) + "-percent")), s)
103- if (if ((0 > J))
104- then true
105- else (J > 100))
106- then throw("Incorrect percent rate")
107- else $Tuple2(I, J)
106+func I (J) = if ((size(J) == 0))
107+ then $Tuple2(m, 0)
108+ else {
109+ let K = e(valueOrErrorMessage(getString(this, (("referrer-" + J) + "-address")), (("referrer with name " + J) + " not found")))
110+ let L = valueOrElse(getInteger(this, (("referrer-" + J) + "-percent")), y)
111+ if (if ((0 > L))
112+ then true
113+ else (L > 100))
114+ then throw("Incorrect percent rate")
115+ else $Tuple2(K, L)
116+ }
117+
118+
119+func M (N) = {
120+ func O (P,Q) = if ((Q >= size(N)))
121+ then (P :+ "")
122+ else (P :+ N[Q])
123+
124+ let R = [0, 1]
125+ let S = {
126+ let T = R
127+ let U = size(T)
128+ let V = nil
129+ func W (X,Y) = if ((Y >= U))
130+ then X
131+ else O(X, T[Y])
132+
133+ func Z (X,Y) = if ((Y >= U))
134+ then X
135+ else throw("List size exceeds 2")
136+
137+ Z(W(W(V, 0), 1), 2)
138+ }
139+ let aa = g(S[0], 0)
140+ let J = S[1]
141+ $Tuple2(aa, J)
108142 }
109143
110144
111-func K (L) = {
112- func M (N,O) = if ((O >= size(L)))
113- then (N :+ "")
114- else (N :+ L[O])
145+func ab (aa) = if (if ((aa > 0))
146+ then (lastBlock.timestamp > aa)
147+ else false)
148+ then throw(((("This swap expired at timestamp " + toString(aa)) + ". Current: ") + toString(lastBlock.timestamp)))
149+ else true
115150
116- let P = [0, 1]
117- let Q = {
118- let R = P
119- let S = size(R)
120- let T = nil
121- func U (V,W) = if ((W >= S))
122- then V
123- else M(V, R[W])
124151
125- func X (V,W) = if ((W >= S))
126- then V
127- else throw("List size exceeds 2")
128-
129- X(U(U(T, 0), 1), 2)
130- }
131- let Y = g(Q[0], 0)
132- let H = Q[1]
133- $Tuple2(Y, H)
152+func ac (ad,ae,af,ag,ah) = {
153+ let ai = e(ad)
154+ let aj = j(split(a(ai, "version"), ".")[0])
155+ let ak = k(af)
156+ let al = if ((0 > ag))
157+ then throw("estAmountToReceive must be positive")
158+ else if (q(ad))
159+ then {
160+ let am = a(ai, "A_asset_id")
161+ let an = a(ai, "B_asset_id")
162+ let ao = k(am)
163+ let ap = k(an)
164+ let aq = if (if ((ae.assetId == ao))
165+ then (ak == ap)
166+ else false)
167+ then $Tuple2(ao, ap)
168+ else if (if ((ak == ao))
169+ then (ae.assetId == ap)
170+ else false)
171+ then $Tuple2(ap, ao)
172+ else throw("Unsupported assets pair")
173+ let ar = aq._1
174+ let as = aq._2
175+ if ((aj == 1))
176+ then $Tuple3(ai, "callFunction", ["exchange", ["1"]])
177+ else if ((aj == 2))
178+ then if ((0 >= ag))
179+ then throw("estAmountToReceive must be positive")
180+ else {
181+ let at = (ag - fraction(ag, ah, 1000))
182+ $Tuple3(ai, "exchange", [ag, if ((at > 0))
183+ then at
184+ else 1])
185+ }
186+ else throw((("Unknown pool version '" + toString(aj)) + "', but 1 or 2 expected"))
187+ }
188+ else if (t(ad))
189+ then $Tuple3(s, "swap", [1, af, toString(this)])
190+ else $Tuple3(ai, "swap", [af, 0])
191+ let au = al._1
192+ let av = al._2
193+ let aw = al._3
194+ let ax = D(ak)
195+ if ((ax == ax))
196+ then {
197+ let ay = invoke(au, av, aw, [ae])
198+ if ((ay == ay))
199+ then {
200+ let az = (D(ak) - ax)
201+ if ((az == az))
202+ then if ((0 >= az))
203+ then throw("Received amount from pool must be positive")
204+ else az
205+ else throw("Strict value is not equal to itself.")
206+ }
207+ else throw("Strict value is not equal to itself.")
208+ }
209+ else throw("Strict value is not equal to itself.")
134210 }
135211
136212
137-func Z (Y) = if (if ((Y > 0))
138- then (lastBlock.timestamp > Y)
139- else false)
140- then throw(((("This swap expired at timestamp " + toString(Y)) + ". Current: ") + toString(lastBlock.timestamp)))
141- else true
142-
143-
144-func aa (ab,ac,ad,ae,af) = {
145- let ag = e(ab)
146- let ah = j(split(a(ag, "version"), ".")[0])
147- let ai = k(ad)
148- if ((0 > ae))
149- then throw("estAmountToReceive must be positive")
150- else if (containsElement(r, ab))
151- then {
152- let aj = a(ag, "A_asset_id")
153- let ak = a(ag, "B_asset_id")
154- let al = k(aj)
155- let am = k(ak)
156- let an = if (if ((ac.assetId == al))
157- then (ai == am)
158- else false)
159- then $Tuple2(al, am)
160- else if (if ((ai == al))
161- then (ac.assetId == am)
162- else false)
163- then $Tuple2(am, al)
164- else throw("Unsupported assets pair")
165- let ao = an._1
166- let ap = an._2
167- let aq = if ((ah == 1))
168- then $Tuple2("callFunction", ["exchange", ["1"]])
169- else if ((ah == 2))
170- then if ((0 >= ae))
171- then throw("estAmountToReceive must be positive")
172- else if (if ((0 > af))
173- then true
174- else (af > 1000))
175- then throw("Slippage tolerance must be non-negative and less than or equal to 1000")
176- else {
177- let ar = (ae - fraction(ae, af, 1000))
178- $Tuple2("exchange", [ae, if ((ar > 0))
179- then ar
180- else 1])
181- }
182- else throw((("Unknown pool version '" + toString(ah)) + "', but 1 or 2 expected"))
183- let as = aq._1
184- let at = aq._2
185- let au = B(ai)
186- if ((au == au))
187- then {
188- let av = invoke(ag, as, at, [ac])
189- if ((av == av))
190- then {
191- let aw = (B(ai) - au)
192- if ((aw == aw))
193- then if ((0 >= aw))
194- then throw("Received amount from pool must be positive")
195- else aw
196- else throw("Strict value is not equal to itself.")
197- }
198- else throw("Strict value is not equal to itself.")
199- }
200- else throw("Strict value is not equal to itself.")
201- }
202- else if (containsElement(w, ab))
203- then {
204- let au = B(ai)
205- if ((au == au))
206- then {
207- let av = invoke(ag, "swap", [ad, 0], [ac])
208- if ((av == av))
209- then {
210- let aw = (B(ai) - au)
211- if ((aw == aw))
212- then if ((0 >= aw))
213- then throw("Received amount from pool must be positive")
214- else aw
215- else throw("Strict value is not equal to itself.")
216- }
217- else throw("Strict value is not equal to itself.")
218- }
219- else throw("Strict value is not equal to itself.")
220- }
221- else throw((("There is no pool at address '" + ab) + "'"))
222- }
223-
224-
225-func ax (ay,az,aA,aB,af,aC) = {
226- let aD = if ((size(ay.payments) > 0))
227- then ay.payments[0]
228- else throw("Payment required")
229- let aE = aA[(size(aA) - 1)]
230- let aF = k(aE)
231- let P = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
232- func aG (aH,O) = if ((O >= size(az)))
213+func aA (aB,aC,aD,aE,ah) = {
214+ let aF = if ((size(aB.payments) == 1))
215+ then aB.payments[0]
216+ else throw("Single payment required")
217+ func aG (aH,Q) = if ((Q >= size(aC)))
233218 then aH
234219 else {
235- let ad = aA[O]
236- let ai = k(ad)
237- let z = aa(az[O], aH, ad, aB[O], af)
238- if ($isInstanceOf(z, "Int"))
220+ let af = aD[Q]
221+ let ak = k(af)
222+ let B = ac(aC[Q], aH, af, aE[Q], ah)
223+ if ($isInstanceOf(B, "Int"))
239224 then {
240- let aI = z
241- AttachedPayment(ai, aI)
225+ let aI = B
226+ AttachedPayment(ak, aI)
242227 }
243228 else throw("Can't handle swap result")
244229 }
245230
246- let aJ = if ((size(az) > 0))
231+ let az = if ((size(aC) > 0))
247232 then {
248- let R = P
249- let S = size(R)
250- let T = aD
251- func U (V,W) = if ((W >= S))
252- then V
253- else aG(V, R[W])
233+ let T = [0, 1, 2, 3, 4]
234+ let U = size(T)
235+ let V = aF
236+ func W (X,Y) = if ((Y >= U))
237+ then X
238+ else aG(X, T[Y])
254239
255- func X (V,W) = if ((W >= S))
256- then V
257- else throw("List size exceeds 10")
240+ func Z (X,Y) = if ((Y >= U))
241+ then X
242+ else throw("List size exceeds 5")
258243
259- X(U(U(U(U(U(U(U(U(U(U(T, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10)
244+ Z(W(W(W(W(W(V, 0), 1), 2), 3), 4), 5)
260245 }
261246 else throw("Path cannot be empty")
262- let aK = D(aJ.amount)
263- let aL = aK._1
264- let F = aK._2
265- if ((0 >= aJ.amount))
266- then throw((("Swap result " + toString(aJ.amount)) + " must be positive"))
267- else if ((aC > aL))
268- then throw(((("Swap result " + toString(aL)) + " is less then expected ") + toString(aC)))
269- else [ScriptTransfer(ay.caller, aL, aF), ScriptTransfer(m, F, aF)]
247+ if ((0 >= az.amount))
248+ then throw((("Swap result " + toString(az.amount)) + " must be positive"))
249+ else az
270250 }
271251
272252
273-func aM (ay,aN,aO,aP,aQ,aR,aS) = {
274- let aD = if ((size(ay.payments) > 0))
275- then ay.payments[0]
276- else throw("Payment required")
277- let aT = valueOrErrorMessage(addressFromString(aN[(size(aN) - 1)]), "Can't parse last exchanger swopfi address")
278- let aU = (split(aR[(size(aR) - 1)], "_")[0] + "_asset_id")
279- let aE = valueOrErrorMessage(getString(aT, aU), ((("Can't read parameter '" + aU) + "' for exchanger ") + toString(aT)))
280- let aF = k(aE)
281- let au = B(aF)
282- if ((au == au))
253+func aJ (aB,aK,aC,aD,aE,ah) = {
254+ let aF = if ((size(aB.payments) == 1))
255+ then aB.payments[0]
256+ else throw("Single payment required")
257+ func aL (aM,Q) = if ((Q >= size(aC)))
258+ then aM
259+ else {
260+ let aN = Invocation([AttachedPayment(aF.assetId, aK[Q])], aB.caller, aB.callerPublicKey, aB.transactionId, aB.fee, aB.feeAssetId, aB.originCaller, aB.originCallerPublicKey)
261+ let aO = split(aC[Q], "_")
262+ let aP = split(aD[Q], "_")
263+ func aQ (ay,h) = (ay :+ j(h))
264+
265+ let aR = {
266+ let T = split(aE[Q], "_")
267+ let U = size(T)
268+ let V = nil
269+ func W (X,Y) = if ((Y >= U))
270+ then X
271+ else aQ(X, T[Y])
272+
273+ func Z (X,Y) = if ((Y >= U))
274+ then X
275+ else throw("List size exceeds 5")
276+
277+ Z(W(W(W(W(W(V, 0), 1), 2), 3), 4), 5)
278+ }
279+ let ay = aA(aN, aO, aP, aR, ah)
280+ if ((ay == ay))
281+ then (aM :+ ay)
282+ else throw("Strict value is not equal to itself.")
283+ }
284+
285+ let T = [0, 1, 2]
286+ let U = size(T)
287+ let V = nil
288+ func W (X,Y) = if ((Y >= U))
289+ then X
290+ else aL(X, T[Y])
291+
292+ func Z (X,Y) = if ((Y >= U))
293+ then X
294+ else throw("List size exceeds 3")
295+
296+ Z(W(W(W(V, 0), 1), 2), 3)
297+ }
298+
299+
300+func aS (aB,aT,aU,aV,aW,aX,aY) = {
301+ let aF = if ((size(aB.payments) == 1))
302+ then aB.payments[0]
303+ else throw("Single payment required")
304+ let aZ = valueOrErrorMessage(addressFromString(aT[(size(aT) - 1)]), "Can't parse last exchanger swopfi address")
305+ let ba = (split(aX[(size(aX) - 1)], "_")[0] + "_asset_id")
306+ let bb = valueOrErrorMessage(getString(aZ, ba), ((("Can't read parameter '" + ba) + "' for exchanger ") + toString(aZ)))
307+ let bc = k(bb)
308+ let ax = D(bc)
309+ if ((ax == ax))
283310 then {
284- let av = invoke(p, "routingTrade", [aN, aO, aP, aQ, aR, aS], [aD])
285- if ((av == av))
311+ let ay = invoke(p, "routingTrade", [aT, aU, aV, aW, aX, aY], [aF])
312+ if ((ay == ay))
286313 then {
287- let aV = B(aF)
288- if ((aV == aV))
314+ let bd = D(bc)
315+ if ((bd == bd))
289316 then {
290- let aW = (aV - au)
291- let aX = D(aW)
292- let aL = aX._1
293- let F = aX._2
294- if ((0 >= aW))
295- then throw((("Swap result " + toString(aW)) + " must be positive"))
296- else if ((aS > aL))
297- then throw(((("Swap result " + toString(aL)) + " is less then expected ") + toString(aS)))
298- else [ScriptTransfer(ay.caller, aL, aF), ScriptTransfer(m, F, aF)]
317+ let be = (bd - ax)
318+ let bf = F(be)
319+ let bg = bf._1
320+ let H = bf._2
321+ if ((0 >= be))
322+ then throw((("Swap result " + toString(be)) + " must be positive"))
323+ else if ((aY > bg))
324+ then throw(((("Swap result " + toString(bg)) + " is less then expected ") + toString(aY)))
325+ else [ScriptTransfer(aB.caller, bg, bc), ScriptTransfer(m, H, bc)]
299326 }
300327 else throw("Strict value is not equal to itself.")
301328 }
302329 else throw("Strict value is not equal to itself.")
303330 }
304331 else throw("Strict value is not equal to itself.")
305332 }
306333
307334
308-func aY (ay,aZ,ba) = {
309- let aD = if ((size(ay.payments) > 0))
310- then ay.payments[0]
311- else throw("Payment required")
312- let bb = split(aZ, ",")[(size(split(aZ, ",")) - 1)]
313- let y = k(bb)
314- let au = B(y)
315- if ((au == au))
335+func bh (aB,bi,bj) = {
336+ let aF = if ((size(aB.payments) == 1))
337+ then aB.payments[0]
338+ else throw("Single payment required")
339+ let bk = split(bi, ",")[(size(split(bi, ",")) - 1)]
340+ let A = k(bk)
341+ let ax = D(A)
342+ if ((ax == ax))
316343 then {
317- let av = invoke(q, "swapWithReferral", [aZ, ba, t], [aD])
318- if ((av == av))
344+ let ay = invoke(u, "swapWithReferral", [bi, bj, x], [aF])
345+ if ((ay == ay))
319346 then {
320- let aV = B(y)
321- if ((aV == aV))
347+ let bd = D(A)
348+ if ((bd == bd))
322349 then {
323- let bc = (aV - au)
324- if ((bc == bc))
325- then [ScriptTransfer(ay.caller, bc, y)]
350+ let bl = (bd - ax)
351+ if ((bl == bl))
352+ then [ScriptTransfer(aB.caller, bl, A)]
326353 else throw("Strict value is not equal to itself.")
327354 }
328355 else throw("Strict value is not equal to itself.")
329356 }
330357 else throw("Strict value is not equal to itself.")
331358 }
332359 else throw("Strict value is not equal to itself.")
333360 }
334361
335362
336-@Callable(ay)
337-func swap (az,aA,aB,af,aC,L) = {
338- let bd = K(L)
339- let Y = bd._1
340- let H = bd._2
341- let be = Z(Y)
342- if ((be == be))
363+@Callable(aB)
364+func swap (aK,aC,aD,aE,ah,bm,N) = {
365+ let aF = if ((size(aB.payments) == 1))
366+ then aB.payments[0]
367+ else throw("Single payment required")
368+ let bn = M(N)
369+ let aa = bn._1
370+ let J = bn._2
371+ let bo = ab(aa)
372+ if ((bo == bo))
343373 then {
344- let av = ax(ay, az, aA, aB, af, aC)
345- if ((av == av))
346- then if ((size(H) > 0))
347- then {
348- let aE = aA[(size(aA) - 1)]
349- let y = k(aE)
350- let bf = G(H)
351- let bg = bf._1
352- let bh = bf._2
353- let bi = av[1].amount
354- let bj = fraction(bi, bh, 100)
355-[av[0], ScriptTransfer(m, (bi - bj), y), ScriptTransfer(bg, bj, y)]
374+ let bp = I(J)
375+ if ((bp == bp))
376+ then {
377+ let bq = bp._2
378+ let br = bp._1
379+ let bs = if (if ((1 > size(aC)))
380+ then true
381+ else (size(aC) > 3))
382+ then throw("Supported swap of 1 to 3 splits")
383+ else aC
384+ let bt = if (if ((0 > ah))
385+ then true
386+ else (ah > 1000))
387+ then throw("Slippage tolerance must be non-negative and less than or equal to 1000")
388+ else ah
389+ func bu (bv,bw) = (bv + bw)
390+
391+ let bx = {
392+ let T = aK
393+ let U = size(T)
394+ let V = 0
395+ func W (X,Y) = if ((Y >= U))
396+ then X
397+ else bu(X, T[Y])
398+
399+ func Z (X,Y) = if ((Y >= U))
400+ then X
401+ else throw("List size exceeds 3")
402+
403+ Z(W(W(W(V, 0), 1), 2), 3)
356404 }
357- else av
405+ let by = if ((aF.amount != bx))
406+ then throw(((("Total amount after split " + toString(bx)) + " is not equal original payment amount ") + toString(aF.amount)))
407+ else aJ(aB, aK, bs, aD, aE, bt)
408+ if ((by == by))
409+ then {
410+ func bz (bA,bw) = (bA + bw.amount)
411+
412+ let bB = {
413+ let T = by
414+ let U = size(T)
415+ let V = 0
416+ func bC (X,Y) = if ((Y >= U))
417+ then X
418+ else bz(X, T[Y])
419+
420+ func bD (X,Y) = if ((Y >= U))
421+ then X
422+ else throw("List size exceeds 3")
423+
424+ bD(bC(bC(bC(V, 0), 1), 2), 3)
425+ }
426+ let A = by[0].assetId
427+ let bE = F(bB)
428+ let bF = bE._1
429+ let H = bE._2
430+ let bG = fraction(H, bq, 100)
431+ let bH = (H - bG)
432+ let bI = [ScriptTransfer(aB.caller, bF, A), ScriptTransfer(m, bH, A)]
433+ if ((bm > bF))
434+ then throw(((("Swap result " + toString(bF)) + " is less then expected ") + toString(bm)))
435+ else if ((bG == 0))
436+ then bI
437+ else (bI :+ ScriptTransfer(br, bG, A))
438+ }
439+ else throw("Strict value is not equal to itself.")
440+ }
358441 else throw("Strict value is not equal to itself.")
359442 }
360443 else throw("Strict value is not equal to itself.")
361444 }
362445
363446
364447
365-@Callable(ay)
366-func swopfiSwap (aN,aO,aP,aQ,aR,aS,L) = {
367- let bk = K(L)
368- let Y = bk._1
369- let H = bk._2
370- let be = Z(Y)
371- if ((be == be))
448+@Callable(aB)
449+func swopfiSwap (aT,aU,aV,aW,aX,aY,N) = {
450+ let bJ = M(N)
451+ let aa = bJ._1
452+ let J = bJ._2
453+ let bo = ab(aa)
454+ if ((bo == bo))
372455 then {
373- let av = aM(ay, aN, aO, aP, aQ, aR, aS)
374- if ((av == av))
375- then if ((size(H) > 0))
376- then {
377- let aT = valueOrErrorMessage(addressFromString(aN[(size(aN) - 1)]), "Can't parse last exchanger swopfi address")
378- let aU = (split(aR[(size(aR) - 1)], "_")[0] + "_asset_id")
379- let aE = valueOrErrorMessage(getString(aT, aU), ((("Can't read parameter '" + aU) + "' for exchanger ") + toString(aT)))
380- let y = k(aE)
381- let bl = G(H)
382- let bg = bl._1
383- let bh = bl._2
384- let bi = av[1].amount
385- let bj = fraction(bi, bh, 100)
386-[av[0], ScriptTransfer(m, (bi - bj), y), ScriptTransfer(bg, bj, y)]
387- }
388- else av
456+ let bK = I(J)
457+ if ((bK == bK))
458+ then {
459+ let bq = bK._2
460+ let br = bK._1
461+ let ay = aS(aB, aT, aU, aV, aW, aX, aY)
462+ if ((ay == ay))
463+ then if ((bq > 0))
464+ then {
465+ let aZ = valueOrErrorMessage(addressFromString(aT[(size(aT) - 1)]), "Can't parse last exchanger swopfi address")
466+ let ba = (split(aX[(size(aX) - 1)], "_")[0] + "_asset_id")
467+ let bb = valueOrErrorMessage(getString(aZ, ba), ((("Can't read parameter '" + ba) + "' for exchanger ") + toString(aZ)))
468+ let A = k(bb)
469+ let bL = ay[1].amount
470+ let bG = fraction(bL, bq, 100)
471+[ay[0], ScriptTransfer(m, (bL - bG), A), ScriptTransfer(br, bG, A)]
472+ }
473+ else ay
474+ else throw("Strict value is not equal to itself.")
475+ }
389476 else throw("Strict value is not equal to itself.")
390477 }
391478 else throw("Strict value is not equal to itself.")
392479 }
393480
394481
395482
396-@Callable(ay)
397-func puzzleSwap (aZ,ba,L) = {
398- let bm = K(L)
399- let Y = bm._1
400- let H = bm._2
401- let be = Z(Y)
402- if ((be == be))
403- then if ((size(aZ) == 0))
404- then throw("Invalid routing")
405- else if ((0 >= ba))
406- then throw("Sum to receive is to low")
407- else {
408- let au = C(m, v)
409- if ((au == au))
410- then {
411- let av = aY(ay, aZ, ba)
412- if ((av == av))
413- then if ((size(H) > 0))
483+@Callable(aB)
484+func puzzleSwap (bi,bj,N) = {
485+ let bM = M(N)
486+ let aa = bM._1
487+ let J = bM._2
488+ let bo = ab(aa)
489+ if ((bo == bo))
490+ then {
491+ let bN = I(J)
492+ if ((bN == bN))
493+ then {
494+ let bq = bN._2
495+ let br = bN._1
496+ if ((size(bi) == 0))
497+ then throw("Invalid routing")
498+ else if ((0 >= bj))
499+ then throw("Sum to receive is to low")
500+ else {
501+ let ax = E(m, w)
502+ if ((ax == ax))
414503 then {
415- let bb = split(aZ, ",")[(size(split(aZ, ",")) - 1)]
416- let y = k(bb)
417- let bn = G(H)
418- let bg = bn._1
419- let bh = bn._2
420- let aV = C(m, v)
421- if ((aV == aV))
422- then {
423- let aW = (aV - au)
424- if ((aW == aW))
425- then {
426- let bo = fraction(aW, bh, 100)
427- let bp = invoke(m, "claimReferrerReward", [bo, u], nil)
428- if ((bp == bp))
429- then (av :+ ScriptTransfer(bg, bo, v))
430- else throw("Strict value is not equal to itself.")
431- }
432- else throw("Strict value is not equal to itself.")
433- }
504+ let ay = bh(aB, bi, bj)
505+ if ((ay == ay))
506+ then if ((bq > 0))
507+ then {
508+ let bk = split(bi, ",")[(size(split(bi, ",")) - 1)]
509+ let A = k(bk)
510+ let bd = E(m, w)
511+ if ((bd == bd))
512+ then {
513+ let be = (bd - ax)
514+ if ((be == be))
515+ then {
516+ let bO = fraction(be, bq, 100)
517+ let bP = invoke(m, "claimReferrerReward", [bO, v], nil)
518+ if ((bP == bP))
519+ then (ay :+ ScriptTransfer(br, bO, w))
520+ else throw("Strict value is not equal to itself.")
521+ }
522+ else throw("Strict value is not equal to itself.")
523+ }
524+ else throw("Strict value is not equal to itself.")
525+ }
526+ else ay
434527 else throw("Strict value is not equal to itself.")
435528 }
436- else av
437- else throw("Strict value is not equal to itself.")
438- }
439- else throw("Strict value is not equal to itself.")
529+ else throw("Strict value is not equal to itself.")
530+ }
440531 }
532+ else throw("Strict value is not equal to itself.")
533+ }
441534 else throw("Strict value is not equal to itself.")
442535 }
443536
444537
445538
446-@Callable(ay)
447-func addPools (bq) = {
448- func br (r,ab) = if (containsElement(r, ab))
449- then throw((("Pool '" + ab) + "' is already added"))
450- else (r :+ toString(e(ab)))
451-
452- if (!(containsElement([this, m], ay.caller)))
453- then throw("only self calls or by collector are allowed")
454- else [StringEntry("p-pools", makeString({
455- let R = bq
456- let S = size(R)
457- let T = w
458- func U (V,W) = if ((W >= S))
459- then V
460- else br(V, R[W])
461-
462- func X (V,W) = if ((W >= S))
463- then V
464- else throw("List size exceeds 10")
465-
466- X(U(U(U(U(U(U(U(U(U(U(T, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10)
467- }, ","))]
539+@Callable(aB)
540+func addReferrer (J,bQ,bR) = {
541+ let b = e(bQ)
542+ if (if ((0 > bR))
543+ then true
544+ else (bR > 100))
545+ then throw("Incorrect percent rate")
546+ else if ((size(J) == 0))
547+ then throw("Referrer name invalid")
548+ else if (!(containsElement([this, m], aB.caller)))
549+ then throw("only self calls or by collector are allowed")
550+ else [StringEntry((("referrer-" + J) + "-address"), bQ), IntegerEntry((("referrer-" + J) + "-percent"), bR)]
468551 }
469552
470553
471-
472-@Callable(ay)
473-func addReferer (H,bs,bt) = {
474- let b = e(bs)
475- if (if ((0 > bt))
476- then true
477- else (bt > 100))
478- then throw("Incorrect percent rate")
479- else if ((size(H) == 0))
480- then throw("Referrer name invalid")
481- else if (!(containsElement([this, m], ay.caller)))
482- then throw("only self calls or by collector are allowed")
483- else [StringEntry((("referrer-" + H) + "-address"), bs), IntegerEntry((("referrer-" + H) + "-percent"), bt)]
484- }
485-
486-
487-@Verifier(bu)
488-func bv () = {
489- let bw = addressFromString(valueOrElse(getString(this, "Oracle"), ""))
490- let bx = if (isDefined(bw))
491- then getString(value(bw), "AdminKeys")
554+@Verifier(bS)
555+func bT () = {
556+ let bU = addressFromString(valueOrElse(getString(this, "Oracle"), ""))
557+ let bV = if (isDefined(bU))
558+ then getString(value(bU), "AdminKeys")
492559 else unit
493- let z = bx
494- if ($isInstanceOf(z, "String"))
560+ let B = bV
561+ if ($isInstanceOf(B, "String"))
495562 then {
496- let by = z
497- let bz = {
498- let bA = split(by, ",")
499-[fromBase58String(bA[0]), fromBase58String(bA[1]), fromBase58String(bA[2])]
563+ let bW = B
564+ let bX = {
565+ let bY = split(bW, ",")
566+[fromBase58String(bY[0]), fromBase58String(bY[1]), fromBase58String(bY[2])]
500567 }
501- func bB (bC) = if (sigVerify(bu.bodyBytes, bC, bz[0]))
568+ func bZ (ca) = if (sigVerify(bS.bodyBytes, ca, bX[0]))
502569 then 1
503- else if (sigVerify(bu.bodyBytes, bC, bz[1]))
570+ else if (sigVerify(bS.bodyBytes, ca, bX[1]))
504571 then 10
505- else if (sigVerify(bu.bodyBytes, bC, bz[2]))
572+ else if (sigVerify(bS.bodyBytes, ca, bX[2]))
506573 then 100
507574 else 0
508575
509- containsElement([110, 101, 11], (bB(bu.proofs[0]) + bB(bu.proofs[1])))
576+ containsElement([110, 101, 11], (bZ(bS.proofs[0]) + bZ(bS.proofs[1])))
510577 }
511- else sigVerify(bu.bodyBytes, bu.proofs[0], bu.senderPublicKey)
578+ else sigVerify(bS.bodyBytes, bS.proofs[0], bS.senderPublicKey)
512579 }
513580

github/deemru/w8io/0e76f2f 
105.48 ms