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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IGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuCQAAAgAAAAECAAAAJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgAAAANpbnYBAAAACnN3b3BmaVN3YXAAAAAHAAAACmV4Y2hhbmdlcnMAAAAOZXhjaGFuZ2Vyc1R5cGUAAAAFYXJnczEAAAAFYXJnczIAAAARcm91dGluZ0Fzc2V0c0tleXMAAAASbWluQW1vdW50VG9SZWNlaXZlAAAAB29wdGlvbnMEAAAADSR0MDE0MTY1MTQyMTkJAQAAAA5nZXRTd2FwT3B0aW9ucwAAAAEFAAAAB29wdGlvbnMEAAAACGRlYWRsaW5lCAUAAAANJHQwMTQxNjUxNDIxOQAAAAJfMQQAAAAMcmVmZXJyZXJOYW1lCAUAAAANJHQwMTQxNjUxNDIxOQAAAAJfMgQAAAAQaXNWYWxpZFRpbWVzdGFtcAkBAAAAFnZhbGlkYXRlQmxvY2tUaW1lc3RhbXAAAAABBQAAAAhkZWFkbGluZQMJAAAAAAAAAgUAAAAQaXNWYWxpZFRpbWVzdGFtcAUAAAAQaXNWYWxpZFRpbWVzdGFtcAQAAAANJHQwMTQyODcxNDM2NwkBAAAAFmdldFJlZmVycmVyRGF0YU9yVGhyb3cAAAABBQAAAAxyZWZlcnJlck5hbWUDCQAAAAAAAAIFAAAADSR0MDE0Mjg3MTQzNjcFAAAADSR0MDE0Mjg3MTQzNjcEAAAAD3JlZmVycmVyUGVyY2VudAgFAAAADSR0MDE0Mjg3MTQzNjcAAAACXzIEAAAAD3JlZmVycmVyQWRkcmVzcwgFAAAADSR0MDE0Mjg3MTQzNjcAAAACXzEEAAAABnJlc3VsdAkBAAAADndyYXBTd29wZmlTd2FwAAAABwUAAAADaW52BQAAAApleGNoYW5nZXJzBQAAAA5leGNoYW5nZXJzVHlwZQUAAAAFYXJnczEFAAAABWFyZ3MyBQAAABFyb3V0aW5nQXNzZXRzS2V5cwUAAAASbWluQW1vdW50VG9SZWNlaXZlAwkAAAAAAAACBQAAAAZyZXN1bHQFAAAABnJlc3VsdAMJAABmAAAAAgUAAAAPcmVmZXJyZXJQZXJjZW50AAAAAAAAAAAABAAAAA1sYXN0RXhjaGFuZ2VyCQEAAAATdmFsdWVPckVycm9yTWVzc2FnZQAAAAIJAAQmAAAAAQkAAZEAAAACBQAAAApleGNoYW5nZXJzCQAAZQAAAAIJAAGQAAAAAQUAAAAKZXhjaGFuZ2VycwAAAAAAAAAAAQIAAAApQ2FuJ3QgcGFyc2UgbGFzdCBleGNoYW5nZXIgc3dvcGZpIGFkZHJlc3MEAAAADmxhc3RBc3NldElkS2V5CQABLAAAAAIJAAGRAAAAAgkABLUAAAACCQABkQAAAAIFAAAAEXJvdXRpbmdBc3NldHNLZXlzCQAAZQAAAAIJAAGQAAAAAQUAAAARcm91dGluZ0Fzc2V0c0tleXMAAAAAAAAAAAECAAAAAV8AAAAAAAAAAAACAAAACV9hc3NldF9pZAQAAAAKYXNzZXRGaW5hbAkBAAAAE3ZhbHVlT3JFcnJvck1lc3NhZ2UAAAACCQAEHQAAAAIFAAAADWxhc3RFeGNoYW5nZXIFAAAADmxhc3RBc3NldElkS2V5CQABLAAAAAIJAAEsAAAAAgkAASwAAAACAgAAABZDYW4ndCByZWFkIHBhcmFtZXRlciAnBQAAAA5sYXN0QXNzZXRJZEtleQIAAAAQJyBmb3IgZXhjaGFuZ2VyIAkABCUAAAABBQAAAA1sYXN0RXhjaGFuZ2VyBAAAAAdhc3NldElkCQEAAAAKZ2V0QXNzZXRJZAAAAAEFAAAACmFzc2V0RmluYWwEAAAADGNvbGxlY3RvckZlZQgJAAGRAAAAAgUAAAAGcmVzdWx0AAAAAAAAAAABAAAABmFtb3VudAQAAAAOcmVmZXJyZXJSZXdhcmQJAABrAAAAAwUAAAAMY29sbGVjdG9yRmVlBQAAAA9yZWZlcnJlclBlcmNlbnQAAAAAAAAAAGQJAARMAAAAAgkAAZEAAAACBQAAAAZyZXN1bHQAAAAAAAAAAAAJAARMAAAAAgkBAAAADlNjcmlwdFRyYW5zZmVyAAAAAwUAAAAJY29sbGVjdG9yCQAAZQAAAAIFAAAADGNvbGxlY3RvckZlZQUAAAAOcmVmZXJyZXJSZXdhcmQFAAAAB2Fzc2V0SWQJAARMAAAAAgkBAAAADlNjcmlwdFRyYW5zZmVyAAAAAwUAAAAPcmVmZXJyZXJBZGRyZXNzBQAAAA5yZWZlcnJlclJld2FyZAUAAAAHYXNzZXRJZAUAAAADbmlsBQAAAAZyZXN1bHQJAAACAAAAAQIAAAAkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuCQAAAgAAAAECAAAAJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgkAAAIAAAABAgAAACRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4AAAADaW52AQAAAApwdXp6bGVTd2FwAAAAAwAAAAlyb3V0ZXNTdHIAAAAMbWluVG9SZWNlaXZlAAAAB29wdGlvbnMEAAAADSR0MDE1NDM3MTU0OTEJAQAAAA5nZXRTd2FwT3B0aW9ucwAAAAEFAAAAB29wdGlvbnMEAAAACGRlYWRsaW5lCAUAAAANJHQwMTU0MzcxNTQ5MQAAAAJfMQQAAAAMcmVmZXJyZXJOYW1lCAUAAAANJHQwMTU0MzcxNTQ5MQAAAAJfMgQAAAAQaXNWYWxpZFRpbWVzdGFtcAkBAAAAFnZhbGlkYXRlQmxvY2tUaW1lc3RhbXAAAAABBQAAAAhkZWFkbGluZQMJAAAAAAAAAgUAAAAQaXNWYWxpZFRpbWVzdGFtcAUAAAAQaXNWYWxpZFRpbWVzdGFtcAQAAAANJHQwMTU1NTkxNTYzOQkBAAAAFmdldFJlZmVycmVyRGF0YU9yVGhyb3cAAAABBQAAAAxyZWZlcnJlck5hbWUDCQAAAAAAAAIFAAAADSR0MDE1NTU5MTU2MzkFAAAADSR0MDE1NTU5MTU2MzkEAAAAD3JlZmVycmVyUGVyY2VudAgFAAAADSR0MDE1NTU5MTU2MzkAAAACXzIEAAAAD3JlZmVycmVyQWRkcmVzcwgFAAAADSR0MDE1NTU5MTU2MzkAAAACXzEDCQAAAAAAAAIJAAExAAAAAQUAAAAJcm91dGVzU3RyAAAAAAAAAAAACQAAAgAAAAECAAAAD0ludmFsaWQgcm91dGluZwMJAABnAAAAAgAAAAAAAAAAAAUAAAAMbWluVG9SZWNlaXZlCQAAAgAAAAECAAAAGFN1bSB0byByZWNlaXZlIGlzIHRvIGxvdwQAAAANYmFsYW5jZUJlZm9yZQkBAAAAE2dldEJhbGFuY2VCeUFkZHJlc3MAAAACBQAAAAljb2xsZWN0b3IFAAAAE3B1enpsZVJld2FyZEFzc2V0SWQDCQAAAAAA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", "height": 3555101, "applicationStatus": "succeeded", "spentComplexity": 0 } View: original | compacted Prev: Dbo7SzxoTB96BduL8Rg1BkEoTG1xBHZ3NRQdExS9chgL Next: 6PkNEyMhwoXcGVyLZ2s5QRX4LXSj3h7rVY3W6WZBtxvd Diff:
Old | New | Differences | |
---|---|---|---|
27 | 27 | ||
28 | 28 | let o = e(a(this, "oracle")) | |
29 | 29 | ||
30 | - | let p = e(a( | |
30 | + | let p = e(a(o, "routing_address")) | |
31 | 31 | ||
32 | - | ||
32 | + | func q (b) = isDefined(getString(o, ("pool_" + b))) | |
33 | 33 | ||
34 | - | let r = split(a(o, "pools"), ",") | |
35 | 34 | ||
36 | - | let | |
35 | + | let r = e(a(this, "wx-factory")) | |
37 | 36 | ||
38 | - | let | |
37 | + | let s = e(a(r, "%s__swapContract")) | |
39 | 38 | ||
40 | - | ||
39 | + | func t (b) = isDefined(getString(r, (("%s%s%s__" + b) + "__mappings__poolContract2PoolAssets"))) | |
41 | 40 | ||
42 | - | let v = k(u) | |
43 | 41 | ||
44 | - | let | |
42 | + | let u = e(a(this, "puzzle-routing")) | |
45 | 43 | ||
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")) | |
49 | 55 | then { | |
50 | - | let l = | |
56 | + | let l = B | |
51 | 57 | toBase58String(l) | |
52 | 58 | } | |
53 | - | else if ($isInstanceOf( | |
59 | + | else if ($isInstanceOf(B, "Unit")) | |
54 | 60 | then { | |
55 | - | let | |
61 | + | let C = B | |
56 | 62 | "WAVES" | |
57 | 63 | } | |
58 | 64 | else throw("Match error") | |
59 | 65 | } | |
60 | 66 | ||
61 | 67 | ||
62 | - | func | |
63 | - | let | |
64 | - | if ($isInstanceOf( | |
68 | + | func D (A) = { | |
69 | + | let B = A | |
70 | + | if ($isInstanceOf(B, "ByteVector")) | |
65 | 71 | then { | |
66 | - | let l = | |
72 | + | let l = B | |
67 | 73 | assetBalance(this, l) | |
68 | 74 | } | |
69 | - | else if ($isInstanceOf( | |
75 | + | else if ($isInstanceOf(B, "Unit")) | |
70 | 76 | then { | |
71 | - | let | |
77 | + | let C = B | |
72 | 78 | wavesBalance(this).available | |
73 | 79 | } | |
74 | 80 | else throw("Match error") | |
75 | 81 | } | |
76 | 82 | ||
77 | 83 | ||
78 | - | func | |
79 | - | let | |
80 | - | if ($isInstanceOf( | |
84 | + | func E (b,A) = { | |
85 | + | let B = A | |
86 | + | if ($isInstanceOf(B, "ByteVector")) | |
81 | 87 | then { | |
82 | - | let l = | |
88 | + | let l = B | |
83 | 89 | assetBalance(b, l) | |
84 | 90 | } | |
85 | - | else if ($isInstanceOf( | |
91 | + | else if ($isInstanceOf(B, "Unit")) | |
86 | 92 | then { | |
87 | - | let | |
93 | + | let C = B | |
88 | 94 | wavesBalance(b).available | |
89 | 95 | } | |
90 | 96 | else throw("Match error") | |
91 | 97 | } | |
92 | 98 | ||
93 | 99 | ||
94 | - | func | |
95 | - | let | |
96 | - | $Tuple2(( | |
100 | + | func F (G) = { | |
101 | + | let H = fraction(G, 1, n) | |
102 | + | $Tuple2((G - H), H) | |
97 | 103 | } | |
98 | 104 | ||
99 | 105 | ||
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) | |
108 | 142 | } | |
109 | 143 | ||
110 | 144 | ||
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 | |
115 | 150 | ||
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]) | |
124 | 151 | ||
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.") | |
134 | 210 | } | |
135 | 211 | ||
136 | 212 | ||
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))) | |
233 | 218 | then aH | |
234 | 219 | else { | |
235 | - | let | |
236 | - | let | |
237 | - | let | |
238 | - | if ($isInstanceOf( | |
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")) | |
239 | 224 | then { | |
240 | - | let aI = | |
241 | - | AttachedPayment( | |
225 | + | let aI = B | |
226 | + | AttachedPayment(ak, aI) | |
242 | 227 | } | |
243 | 228 | else throw("Can't handle swap result") | |
244 | 229 | } | |
245 | 230 | ||
246 | - | let | |
231 | + | let az = if ((size(aC) > 0)) | |
247 | 232 | then { | |
248 | - | let | |
249 | - | let | |
250 | - | let | |
251 | - | func | |
252 | - | then | |
253 | - | else aG( | |
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]) | |
254 | 239 | ||
255 | - | func | |
256 | - | then | |
257 | - | else throw("List size exceeds | |
240 | + | func Z (X,Y) = if ((Y >= U)) | |
241 | + | then X | |
242 | + | else throw("List size exceeds 5") | |
258 | 243 | ||
259 | - | | |
244 | + | Z(W(W(W(W(W(V, 0), 1), 2), 3), 4), 5) | |
260 | 245 | } | |
261 | 246 | 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 | |
270 | 250 | } | |
271 | 251 | ||
272 | 252 | ||
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)) | |
283 | 310 | then { | |
284 | - | let | |
285 | - | if (( | |
311 | + | let ay = invoke(p, "routingTrade", [aT, aU, aV, aW, aX, aY], [aF]) | |
312 | + | if ((ay == ay)) | |
286 | 313 | then { | |
287 | - | let | |
288 | - | if (( | |
314 | + | let bd = D(bc) | |
315 | + | if ((bd == bd)) | |
289 | 316 | then { | |
290 | - | let | |
291 | - | let | |
292 | - | let | |
293 | - | let | |
294 | - | if ((0 >= | |
295 | - | then throw((("Swap result " + toString( | |
296 | - | else if (( | |
297 | - | then throw(((("Swap result " + toString( | |
298 | - | else [ScriptTransfer( | |
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)] | |
299 | 326 | } | |
300 | 327 | else throw("Strict value is not equal to itself.") | |
301 | 328 | } | |
305 | 332 | } | |
306 | 333 | ||
307 | 334 | ||
308 | - | func | |
309 | - | let | |
310 | - | then | |
311 | - | else throw(" | |
312 | - | let | |
313 | - | let | |
314 | - | let | |
315 | - | if (( | |
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)) | |
316 | 343 | then { | |
317 | - | let | |
318 | - | if (( | |
344 | + | let ay = invoke(u, "swapWithReferral", [bi, bj, x], [aF]) | |
345 | + | if ((ay == ay)) | |
319 | 346 | then { | |
320 | - | let | |
321 | - | if (( | |
347 | + | let bd = D(A) | |
348 | + | if ((bd == bd)) | |
322 | 349 | then { | |
323 | - | let | |
324 | - | if (( | |
325 | - | then [ScriptTransfer( | |
350 | + | let bl = (bd - ax) | |
351 | + | if ((bl == bl)) | |
352 | + | then [ScriptTransfer(aB.caller, bl, A)] | |
326 | 353 | else throw("Strict value is not equal to itself.") | |
327 | 354 | } | |
328 | 355 | else throw("Strict value is not equal to itself.") | |
333 | 360 | } | |
334 | 361 | ||
335 | 362 | ||
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)) | |
343 | 373 | 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) | |
356 | 404 | } | |
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 | + | } | |
358 | 441 | else throw("Strict value is not equal to itself.") | |
359 | 442 | } | |
360 | 443 | else throw("Strict value is not equal to itself.") | |
362 | 445 | ||
363 | 446 | ||
364 | 447 | ||
365 | - | @Callable( | |
366 | - | func swopfiSwap ( | |
367 | - | let | |
368 | - | let | |
369 | - | let | |
370 | - | let | |
371 | - | if (( | |
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)) | |
372 | 455 | 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 | + | } | |
389 | 476 | else throw("Strict value is not equal to itself.") | |
390 | 477 | } | |
391 | 478 | else throw("Strict value is not equal to itself.") | |
393 | 480 | ||
394 | 481 | ||
395 | 482 | ||
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)) | |
414 | 503 | 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 | |
434 | 527 | else throw("Strict value is not equal to itself.") | |
435 | 528 | } | |
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 | + | } | |
440 | 531 | } | |
532 | + | else throw("Strict value is not equal to itself.") | |
533 | + | } | |
441 | 534 | else throw("Strict value is not equal to itself.") | |
442 | 535 | } | |
443 | 536 | ||
444 | 537 | ||
445 | 538 | ||
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)] | |
468 | 551 | } | |
469 | 552 | ||
470 | 553 | ||
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") | |
492 | 559 | else unit | |
493 | - | let | |
494 | - | if ($isInstanceOf( | |
560 | + | let B = bV | |
561 | + | if ($isInstanceOf(B, "String")) | |
495 | 562 | then { | |
496 | - | let | |
497 | - | let | |
498 | - | let | |
499 | - | [fromBase58String( | |
563 | + | let bW = B | |
564 | + | let bX = { | |
565 | + | let bY = split(bW, ",") | |
566 | + | [fromBase58String(bY[0]), fromBase58String(bY[1]), fromBase58String(bY[2])] | |
500 | 567 | } | |
501 | - | func | |
568 | + | func bZ (ca) = if (sigVerify(bS.bodyBytes, ca, bX[0])) | |
502 | 569 | then 1 | |
503 | - | else if (sigVerify( | |
570 | + | else if (sigVerify(bS.bodyBytes, ca, bX[1])) | |
504 | 571 | then 10 | |
505 | - | else if (sigVerify( | |
572 | + | else if (sigVerify(bS.bodyBytes, ca, bX[2])) | |
506 | 573 | then 100 | |
507 | 574 | else 0 | |
508 | 575 | ||
509 | - | containsElement([110, 101, 11], ( | |
576 | + | containsElement([110, 101, 11], (bZ(bS.proofs[0]) + bZ(bS.proofs[1]))) | |
510 | 577 | } | |
511 | - | else sigVerify( | |
578 | + | else sigVerify(bS.bodyBytes, bS.proofs[0], bS.senderPublicKey) | |
512 | 579 | } | |
513 | 580 |
Old | New | Differences | |
---|---|---|---|
1 | 1 | {-# STDLIB_VERSION 5 #-} | |
2 | 2 | {-# SCRIPT_TYPE ACCOUNT #-} | |
3 | 3 | {-# CONTENT_TYPE DAPP #-} | |
4 | 4 | func a (b,c) = valueOrErrorMessage(getString(b, c), ((("Can't read '" + c) + "' at address ") + toString(b))) | |
5 | 5 | ||
6 | 6 | ||
7 | 7 | func d (b,c) = valueOrErrorMessage(getInteger(b, c), ((("Can't read '" + c) + "' at address ") + toString(b))) | |
8 | 8 | ||
9 | 9 | ||
10 | 10 | func e (f) = valueOrErrorMessage(addressFromString(f), (("Can't parse address from '" + f) + "'")) | |
11 | 11 | ||
12 | 12 | ||
13 | 13 | func g (h,i) = valueOrElse(parseInt(h), i) | |
14 | 14 | ||
15 | 15 | ||
16 | 16 | func j (h) = valueOrErrorMessage(parseInt(h), (("Can't parse integer from '" + h) + "'")) | |
17 | 17 | ||
18 | 18 | ||
19 | 19 | func k (l) = if ((l == "WAVES")) | |
20 | 20 | then unit | |
21 | 21 | else fromBase58String(l) | |
22 | 22 | ||
23 | 23 | ||
24 | 24 | let m = e(a(this, "collector")) | |
25 | 25 | ||
26 | 26 | let n = d(this, "fee-rate") | |
27 | 27 | ||
28 | 28 | let o = e(a(this, "oracle")) | |
29 | 29 | ||
30 | - | let p = e(a( | |
30 | + | let p = e(a(o, "routing_address")) | |
31 | 31 | ||
32 | - | ||
32 | + | func q (b) = isDefined(getString(o, ("pool_" + b))) | |
33 | 33 | ||
34 | - | let r = split(a(o, "pools"), ",") | |
35 | 34 | ||
36 | - | let | |
35 | + | let r = e(a(this, "wx-factory")) | |
37 | 36 | ||
38 | - | let | |
37 | + | let s = e(a(r, "%s__swapContract")) | |
39 | 38 | ||
40 | - | ||
39 | + | func t (b) = isDefined(getString(r, (("%s%s%s__" + b) + "__mappings__poolContract2PoolAssets"))) | |
41 | 40 | ||
42 | - | let v = k(u) | |
43 | 41 | ||
44 | - | let | |
42 | + | let u = e(a(this, "puzzle-routing")) | |
45 | 43 | ||
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")) | |
49 | 55 | then { | |
50 | - | let l = | |
56 | + | let l = B | |
51 | 57 | toBase58String(l) | |
52 | 58 | } | |
53 | - | else if ($isInstanceOf( | |
59 | + | else if ($isInstanceOf(B, "Unit")) | |
54 | 60 | then { | |
55 | - | let | |
61 | + | let C = B | |
56 | 62 | "WAVES" | |
57 | 63 | } | |
58 | 64 | else throw("Match error") | |
59 | 65 | } | |
60 | 66 | ||
61 | 67 | ||
62 | - | func | |
63 | - | let | |
64 | - | if ($isInstanceOf( | |
68 | + | func D (A) = { | |
69 | + | let B = A | |
70 | + | if ($isInstanceOf(B, "ByteVector")) | |
65 | 71 | then { | |
66 | - | let l = | |
72 | + | let l = B | |
67 | 73 | assetBalance(this, l) | |
68 | 74 | } | |
69 | - | else if ($isInstanceOf( | |
75 | + | else if ($isInstanceOf(B, "Unit")) | |
70 | 76 | then { | |
71 | - | let | |
77 | + | let C = B | |
72 | 78 | wavesBalance(this).available | |
73 | 79 | } | |
74 | 80 | else throw("Match error") | |
75 | 81 | } | |
76 | 82 | ||
77 | 83 | ||
78 | - | func | |
79 | - | let | |
80 | - | if ($isInstanceOf( | |
84 | + | func E (b,A) = { | |
85 | + | let B = A | |
86 | + | if ($isInstanceOf(B, "ByteVector")) | |
81 | 87 | then { | |
82 | - | let l = | |
88 | + | let l = B | |
83 | 89 | assetBalance(b, l) | |
84 | 90 | } | |
85 | - | else if ($isInstanceOf( | |
91 | + | else if ($isInstanceOf(B, "Unit")) | |
86 | 92 | then { | |
87 | - | let | |
93 | + | let C = B | |
88 | 94 | wavesBalance(b).available | |
89 | 95 | } | |
90 | 96 | else throw("Match error") | |
91 | 97 | } | |
92 | 98 | ||
93 | 99 | ||
94 | - | func | |
95 | - | let | |
96 | - | $Tuple2(( | |
100 | + | func F (G) = { | |
101 | + | let H = fraction(G, 1, n) | |
102 | + | $Tuple2((G - H), H) | |
97 | 103 | } | |
98 | 104 | ||
99 | 105 | ||
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) | |
108 | 142 | } | |
109 | 143 | ||
110 | 144 | ||
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 | |
115 | 150 | ||
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]) | |
124 | 151 | ||
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.") | |
134 | 210 | } | |
135 | 211 | ||
136 | 212 | ||
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))) | |
233 | 218 | then aH | |
234 | 219 | else { | |
235 | - | let | |
236 | - | let | |
237 | - | let | |
238 | - | if ($isInstanceOf( | |
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")) | |
239 | 224 | then { | |
240 | - | let aI = | |
241 | - | AttachedPayment( | |
225 | + | let aI = B | |
226 | + | AttachedPayment(ak, aI) | |
242 | 227 | } | |
243 | 228 | else throw("Can't handle swap result") | |
244 | 229 | } | |
245 | 230 | ||
246 | - | let | |
231 | + | let az = if ((size(aC) > 0)) | |
247 | 232 | then { | |
248 | - | let | |
249 | - | let | |
250 | - | let | |
251 | - | func | |
252 | - | then | |
253 | - | else aG( | |
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]) | |
254 | 239 | ||
255 | - | func | |
256 | - | then | |
257 | - | else throw("List size exceeds | |
240 | + | func Z (X,Y) = if ((Y >= U)) | |
241 | + | then X | |
242 | + | else throw("List size exceeds 5") | |
258 | 243 | ||
259 | - | | |
244 | + | Z(W(W(W(W(W(V, 0), 1), 2), 3), 4), 5) | |
260 | 245 | } | |
261 | 246 | 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 | |
270 | 250 | } | |
271 | 251 | ||
272 | 252 | ||
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)) | |
283 | 310 | then { | |
284 | - | let | |
285 | - | if (( | |
311 | + | let ay = invoke(p, "routingTrade", [aT, aU, aV, aW, aX, aY], [aF]) | |
312 | + | if ((ay == ay)) | |
286 | 313 | then { | |
287 | - | let | |
288 | - | if (( | |
314 | + | let bd = D(bc) | |
315 | + | if ((bd == bd)) | |
289 | 316 | then { | |
290 | - | let | |
291 | - | let | |
292 | - | let | |
293 | - | let | |
294 | - | if ((0 >= | |
295 | - | then throw((("Swap result " + toString( | |
296 | - | else if (( | |
297 | - | then throw(((("Swap result " + toString( | |
298 | - | else [ScriptTransfer( | |
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)] | |
299 | 326 | } | |
300 | 327 | else throw("Strict value is not equal to itself.") | |
301 | 328 | } | |
302 | 329 | else throw("Strict value is not equal to itself.") | |
303 | 330 | } | |
304 | 331 | else throw("Strict value is not equal to itself.") | |
305 | 332 | } | |
306 | 333 | ||
307 | 334 | ||
308 | - | func | |
309 | - | let | |
310 | - | then | |
311 | - | else throw(" | |
312 | - | let | |
313 | - | let | |
314 | - | let | |
315 | - | if (( | |
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)) | |
316 | 343 | then { | |
317 | - | let | |
318 | - | if (( | |
344 | + | let ay = invoke(u, "swapWithReferral", [bi, bj, x], [aF]) | |
345 | + | if ((ay == ay)) | |
319 | 346 | then { | |
320 | - | let | |
321 | - | if (( | |
347 | + | let bd = D(A) | |
348 | + | if ((bd == bd)) | |
322 | 349 | then { | |
323 | - | let | |
324 | - | if (( | |
325 | - | then [ScriptTransfer( | |
350 | + | let bl = (bd - ax) | |
351 | + | if ((bl == bl)) | |
352 | + | then [ScriptTransfer(aB.caller, bl, A)] | |
326 | 353 | else throw("Strict value is not equal to itself.") | |
327 | 354 | } | |
328 | 355 | else throw("Strict value is not equal to itself.") | |
329 | 356 | } | |
330 | 357 | else throw("Strict value is not equal to itself.") | |
331 | 358 | } | |
332 | 359 | else throw("Strict value is not equal to itself.") | |
333 | 360 | } | |
334 | 361 | ||
335 | 362 | ||
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)) | |
343 | 373 | 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) | |
356 | 404 | } | |
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 | + | } | |
358 | 441 | else throw("Strict value is not equal to itself.") | |
359 | 442 | } | |
360 | 443 | else throw("Strict value is not equal to itself.") | |
361 | 444 | } | |
362 | 445 | ||
363 | 446 | ||
364 | 447 | ||
365 | - | @Callable( | |
366 | - | func swopfiSwap ( | |
367 | - | let | |
368 | - | let | |
369 | - | let | |
370 | - | let | |
371 | - | if (( | |
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)) | |
372 | 455 | 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 | + | } | |
389 | 476 | else throw("Strict value is not equal to itself.") | |
390 | 477 | } | |
391 | 478 | else throw("Strict value is not equal to itself.") | |
392 | 479 | } | |
393 | 480 | ||
394 | 481 | ||
395 | 482 | ||
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)) | |
414 | 503 | 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 | |
434 | 527 | else throw("Strict value is not equal to itself.") | |
435 | 528 | } | |
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 | + | } | |
440 | 531 | } | |
532 | + | else throw("Strict value is not equal to itself.") | |
533 | + | } | |
441 | 534 | else throw("Strict value is not equal to itself.") | |
442 | 535 | } | |
443 | 536 | ||
444 | 537 | ||
445 | 538 | ||
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)] | |
468 | 551 | } | |
469 | 552 | ||
470 | 553 | ||
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") | |
492 | 559 | else unit | |
493 | - | let | |
494 | - | if ($isInstanceOf( | |
560 | + | let B = bV | |
561 | + | if ($isInstanceOf(B, "String")) | |
495 | 562 | then { | |
496 | - | let | |
497 | - | let | |
498 | - | let | |
499 | - | [fromBase58String( | |
563 | + | let bW = B | |
564 | + | let bX = { | |
565 | + | let bY = split(bW, ",") | |
566 | + | [fromBase58String(bY[0]), fromBase58String(bY[1]), fromBase58String(bY[2])] | |
500 | 567 | } | |
501 | - | func | |
568 | + | func bZ (ca) = if (sigVerify(bS.bodyBytes, ca, bX[0])) | |
502 | 569 | then 1 | |
503 | - | else if (sigVerify( | |
570 | + | else if (sigVerify(bS.bodyBytes, ca, bX[1])) | |
504 | 571 | then 10 | |
505 | - | else if (sigVerify( | |
572 | + | else if (sigVerify(bS.bodyBytes, ca, bX[2])) | |
506 | 573 | then 100 | |
507 | 574 | else 0 | |
508 | 575 | ||
509 | - | containsElement([110, 101, 11], ( | |
576 | + | containsElement([110, 101, 11], (bZ(bS.proofs[0]) + bZ(bS.proofs[1]))) | |
510 | 577 | } | |
511 | - | else sigVerify( | |
578 | + | else sigVerify(bS.bodyBytes, bS.proofs[0], bS.senderPublicKey) | |
512 | 579 | } | |
513 | 580 |
github/deemru/w8io/0e76f2f 105.48 ms ◑