tx · 5MxnbHDZTkoZwnYKVcgHZmCfYSSYMFXZqcNrChgrkidE

3PMqKakbsELgTxiAHNzm4ryEJBLKJcLetyj:  -0.01100000 Waves

2023.10.13 13:45 [3862588] smart account 3PMqKakbsELgTxiAHNzm4ryEJBLKJcLetyj > SELF 0.00000000 Waves

{ "type": 13, "id": "5MxnbHDZTkoZwnYKVcgHZmCfYSSYMFXZqcNrChgrkidE", "fee": 1100000, "feeAssetId": null, "timestamp": 1697193969815, "version": 2, "chainId": 87, "sender": "3PMqKakbsELgTxiAHNzm4ryEJBLKJcLetyj", "senderPublicKey": "y6K4a5SRZdvLzRWHrhjBuh5BQqujMD5sLnAocMyZ3P3", "proofs": [ "2sQ5cNqkjFdZhpRiPmU2tZyhwvqBg41stApLRcweyX14N897dg4tmn8ntgLzMML5J4Exj1z9yx3cKGQzbTU9tomz" ], "script": "base64:BgIfCAISABIICgYBAQgIGBgSBAoCCAgSBAoCCAESAwoBCBIADGFkbWluQWRkcmVzcwkBC3ZhbHVlT3JFbHNlAgkAnQgCBQR0aGlzAgVhZG1pbgIAAAphcmJDb3VudGVyCQELdmFsdWVPckVsc2UCCQCaCAIFBHRoaXMCCmFyYkNvdW50ZXIAAAANd3hTd2FwQWRkcmVzcwIjM1A2OHpOaXVmc3UxdmlacHUxYVkzY2RhaFJSS2N2VjVOOTMBC3dyaXRlU3RyaW5nAgNrZXkLc3RyaW5nVmFsdWUJAQtTdHJpbmdFbnRyeQIFA2tleQULc3RyaW5nVmFsdWUBDHdyaXRlSW50ZWdlcgIDa2V5DGludGVnZXJWYWx1ZQkBDEludGVnZXJFbnRyeQIFA2tleQUMaW50ZWdlclZhbHVlAQdpc0FkbWluAQ1jYWxsZXJBZGRyZXNzAwkAAAIFDWNhbGxlckFkZHJlc3MJANkEAQUMYWRtaW5BZGRyZXNzBgcBDXNwbGl0Q2ZtbUpzb24BBWVudHJ5CQC1CQIFBWVudHJ5AgEvAQppbnZva2VTd29wAwtwb29sQWRkcmVzcwd0b2tlbklkC2lucHV0QW1vdW50BA50b2tlbklkQ2hlY2tlZAMJAAACBQd0b2tlbklkAgVXQVZFUwUEdW5pdAkA2QQBBQd0b2tlbklkBAZyZXN1bHQJAPwHBAkBEUBleHRyTmF0aXZlKDEwNjIpAQULcG9vbEFkZHJlc3MCCGV4Y2hhbmdlCQDMCAIAAQUDbmlsCQDMCAIJAQ9BdHRhY2hlZFBheW1lbnQCBQ50b2tlbklkQ2hlY2tlZAULaW5wdXRBbW91bnQFA25pbAMJAAACBQZyZXN1bHQFBnJlc3VsdAQHJG1hdGNoMAUGcmVzdWx0AwkAAQIFByRtYXRjaDACCUxpc3RbQW55XQQGcmVzdWx0BQckbWF0Y2gwBAckbWF0Y2gxCQCRAwIFBnJlc3VsdAAAAwkAAQIFByRtYXRjaDECA0ludAQBYQUHJG1hdGNoMQUBYQkAAgECGExpc3QgaXRlbSBpcyBub3QgYW4gaW50IQkAAgECKVJlc3VsdCBvZiBzd29wIGludm9rYXRpb24gZG9lcyBub3QgbWF0Y2ghCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuAQhpbnZva2VXeAMJdG9rZW5JZEluCnRva2VuSWRPdXQLaW5wdXRBbW91bnQEEHRva2VuSWRJbkNoZWNrZWQDCQAAAgUJdG9rZW5JZEluAgVXQVZFUwUEdW5pdAkA2QQBBQl0b2tlbklkSW4EEXRva2VuSWRPdXRDaGVja2VkAwkAAAIFCnRva2VuSWRPdXQCBVdBVkVTAgAFCnRva2VuSWRPdXQEAXIJAPwHBAkBEUBleHRyTmF0aXZlKDEwNjIpAQUNd3hTd2FwQWRkcmVzcwIEc3dhcAkAzAgCAAEJAMwIAgURdG9rZW5JZE91dENoZWNrZWQJAMwIAgkApQgBBQR0aGlzBQNuaWwJAMwIAgkBD0F0dGFjaGVkUGF5bWVudAIFEHRva2VuSWRJbkNoZWNrZWQFC2lucHV0QW1vdW50BQNuaWwDCQAAAgUBcgUBcgQHJG1hdGNoMAUBcgMJAAECBQckbWF0Y2gwAgNJbnQEAXIFByRtYXRjaDAFAXIJAAIBAilSZXN1bHQgb2Ygc3dvcCBpbnZva2F0aW9uIGRvZXMgbm90IG1hdGNoIQkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgEMaW52b2tlUHV6emxlBAtwb29sQWRkcmVzcwl0b2tlbklkSW4KdG9rZW5JZE91dAtpbnB1dEFtb3VudAQQdG9rZW5JZEluQ2hlY2tlZAMJAAACBQl0b2tlbklkSW4CBVdBVkVTBQR1bml0CQDZBAEFCXRva2VuSWRJbgQGcmVzdWx0CQD8BwQJARFAZXh0ck5hdGl2ZSgxMDYyKQEFC3Bvb2xBZGRyZXNzAgRzd2FwCQDMCAIFCnRva2VuSWRPdXQJAMwIAgABBQNuaWwJAMwIAgkBD0F0dGFjaGVkUGF5bWVudAIFEHRva2VuSWRJbkNoZWNrZWQFC2lucHV0QW1vdW50BQNuaWwDCQAAAgUGcmVzdWx0BQZyZXN1bHQEByRtYXRjaDAFBnJlc3VsdAMJAAECBQckbWF0Y2gwAgNJbnQEBnJlc3VsdAUHJG1hdGNoMAUGcmVzdWx0CQACAQIpUmVzdWx0IG9mIHN3b3AgaW52b2thdGlvbiBkb2VzIG5vdCBtYXRjaCEJAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4BEWRldGVybWluZVBsYXRmb3JtAwRjZm1tCXRva2VuSWRJbgp0b2tlbklkT3V0BARpdGVtCQENc3BsaXRDZm1tSnNvbgEFBGNmbW0EC2lucHV0QW1vdW50CQC2CQEJAJEDAgUEaXRlbQACBAVpbnB1dAQHJG1hdGNoMAULaW5wdXRBbW91bnQDCQABAgUHJG1hdGNoMAIDSW50BAtpbnB1dEFtb3VudAUHJG1hdGNoMAULaW5wdXRBbW91bnQJAAIBAihEYXRhdHlwZSBvZiBpbnB1dCBhbW91bnQgZG9lcyBub3QgbWF0Y2ghBAZyZXN1bHQDCQAAAgkAkQMCBQRpdGVtAAACBFNXT1AJAQppbnZva2VTd29wAwkAkQMCBQRpdGVtAAEFCXRva2VuSWRJbgUFaW5wdXQDCQAAAgkAkQMCBQRpdGVtAAACDldhdmVzIEV4Y2hhbmdlCQEIaW52b2tlV3gDBQl0b2tlbklkSW4FCnRva2VuSWRPdXQFBWlucHV0AwkAAAIJAJEDAgUEaXRlbQAAAgtQdXp6bGUgU3dhcAkBDGludm9rZVB1enpsZQQJAJEDAgUEaXRlbQABBQl0b2tlbklkSW4FCnRva2VuSWRPdXQFBWlucHV0CQACAQIbUGxhdGZvcm0gaWQgZG9lcyBub3QgbWF0Y2ghBQZyZXN1bHQBDHByb2Nlc3NDZm1tcwMFc3dhcHMJdG9rZW5JZEluCnRva2VuSWRPdXQKAQppbnZva2VTd2FwAgVhY2N1bQRuZXh0BAskdDA2OTU5Njk4NgUFYWNjdW0EBnJlc3VsdAgFCyR0MDY5NTk2OTg2Al8xBAVpbmRleAgFCyR0MDY5NTk2OTg2Al8yAwkAZgIJAJADAQUFc3dhcHMFBWluZGV4CQCUCgIJAGQCBQZyZXN1bHQJARFkZXRlcm1pbmVQbGF0Zm9ybQMFBG5leHQFCXRva2VuSWRJbgUKdG9rZW5JZE91dAkAZAIFBWluZGV4AAEJAJQKAgUGcmVzdWx0BQVpbmRleAQLcmVzdWx0VHVwbGUKAAIkbAUFc3dhcHMKAAIkcwkAkAMBBQIkbAoABSRhY2MwCQCUCgIAAAAACgEFJGYwXzECAiRhAiRpAwkAZwIFAiRpBQIkcwUCJGEJAQppbnZva2VTd2FwAgUCJGEJAJEDAgUCJGwFAiRpCgEFJGYwXzICAiRhAiRpAwkAZwIFAiRpBQIkcwUCJGEJAAIBAhRMaXN0IHNpemUgZXhjZWVkcyA0MAkBBSRmMF8yAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgUFJGFjYzAAAAABAAIAAwAEAAUABgAHAAgACQAKAAsADAANAA4ADwAQABEAEgATABQAFQAWABcAGAAZABoAGwAcAB0AHgAfACAAIQAiACMAJAAlACYAJwAoCAULcmVzdWx0VHVwbGUCXzEBH2NhbGNFeGNlc3NBbW91bnRQZXJDZm1tUG9zaXRpdmUCCmRpZmZlcmVuY2ULbnVtYmVyQ2ZtbXMECHF1b3RpZW50CQBuBAUKZGlmZmVyZW5jZQABBQtudW1iZXJDZm1tcwUERE9XTgQWdG90YWxEaXN0cmlidXRlZEFtb3VudAkAaAIFCHF1b3RpZW50BQtudW1iZXJDZm1tcwQPcmVtYWluaW5nQW1vdW50CQBlAgUKZGlmZmVyZW5jZQUWdG90YWxEaXN0cmlidXRlZEFtb3VudAMJAGYCBQ9yZW1haW5pbmdBbW91bnQAAAkAlAoCBQhxdW90aWVudAUPcmVtYWluaW5nQW1vdW50CQCUCgIFCHF1b3RpZW50AAABH2NhbGNFeGNlc3NBbW91bnRQZXJDZm1tTmVnYXRpdmUCCmRpZmZlcmVuY2ULbnVtYmVyQ2ZtbXMECHF1b3RpZW50CQBuBAUKZGlmZmVyZW5jZQABBQtudW1iZXJDZm1tcwUERE9XTgQWdG90YWxEaXN0cmlidXRlZEFtb3VudAkAaAIFCHF1b3RpZW50BQtudW1iZXJDZm1tcwQPcmVtYWluaW5nQW1vdW50CQBlAgUKZGlmZmVyZW5jZQUWdG90YWxEaXN0cmlidXRlZEFtb3VudAMJAGYCAAAFD3JlbWFpbmluZ0Ftb3VudAkAlAoCBQhxdW90aWVudAUPcmVtYWluaW5nQW1vdW50CQCUCgIFCHF1b3RpZW50AAABGmRpc3RyaWJ1dGVBZGRpdGlvbmFsVG9rZW5zAgVzd2FwcwRkaWZmBAp0b3RhbFN3YXBzCQCQAwEFBXN3YXBzBAskdDA3OTk3ODA4MAkBH2NhbGNFeGNlc3NBbW91bnRQZXJDZm1tUG9zaXRpdmUCBQRkaWZmBQp0b3RhbFN3YXBzBAhxdW90aWVudAgFCyR0MDc5OTc4MDgwAl8xBA9yZW1haW5pbmdBbW91bnQIBQskdDA3OTk3ODA4MAJfMgoBDWFkanVzdEFtb3VudHMCBWFjY3VtBG5leHQECyR0MDgxNTM4MTk1BQVhY2N1bQQNYWRqdXN0ZWRTd2FwcwgFCyR0MDgxNTM4MTk1Al8xBA1yZW1haW5pbmdEaWZmCAULJHQwODE1MzgxOTUCXzIEBGl0ZW0JAQ1zcGxpdENmbW1Kc29uAQUEbmV4dAQLaW5wdXRBbW91bnQJALYJAQkAkQMCBQRpdGVtAAIEByRtYXRjaDAFC2lucHV0QW1vdW50AwkAAQIFByRtYXRjaDACA0ludAQFaW5wdXQFByRtYXRjaDAEDmFtb3VudFRvQWRqdXN0AwkAZgIFDXJlbWFpbmluZ0RpZmYAAAkAZAIJAGQCBQVpbnB1dAUIcXVvdGllbnQAAQkAZAIFBWlucHV0BQhxdW90aWVudAQHbmV3SXRlbQkArAICCQCsAgIJAKwCAgkArAICCQCRAwIFBGl0ZW0AAAIBLwkAkQMCBQRpdGVtAAECAS8JAKQDAQUOYW1vdW50VG9BZGp1c3QEEG5ld1JlbWFpbmluZ0RpZmYDCQBmAgUNcmVtYWluaW5nRGlmZgAACQBlAgUNcmVtYWluaW5nRGlmZgABBQ1yZW1haW5pbmdEaWZmCQCUCgIJAM0IAgUNYWRqdXN0ZWRTd2FwcwUHbmV3SXRlbQUQbmV3UmVtYWluaW5nRGlmZgkAAgECGUlucHV0IGhhcyB3cm9uZyBkYXRhdHlwZSEEBnJlc3VsdAoAAiRsBQVzd2FwcwoAAiRzCQCQAwEFAiRsCgAFJGFjYzAJAJQKAgUDbmlsBQ9yZW1haW5pbmdBbW91bnQKAQUkZjBfMQICJGECJGkDCQBnAgUCJGkFAiRzBQIkYQkBDWFkanVzdEFtb3VudHMCBQIkYQkAkQMCBQIkbAUCJGkKAQUkZjBfMgICJGECJGkDCQBnAgUCJGkFAiRzBQIkYQkAAgECFExpc3Qgc2l6ZSBleGNlZWRzIDQwCQEFJGYwXzICCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECBQUkYWNjMAAAAAEAAgADAAQABQAGAAcACAAJAAoACwAMAA0ADgAPABAAEQASABMAFAAVABYAFwAYABkAGgAbABwAHQAeAB8AIAAhACIAIwAkACUAJgAnACgIBQZyZXN1bHQCXzEBGGRpc3RyaWJ1dGVSZW1haW5pbmdEaWZmcwINcmVtYWluaW5nRGlmZgVzd2FwcwoBFmRpc3RyaWJ1dGVQcm9wb3J0aW9uYWwCBWFjY3VtBG5leHQECyR0MDkwNzE5MTEwBQVhY2N1bQQNYWRqdXN0ZWRTd2FwcwgFCyR0MDkwNzE5MTEwAl8xBApyZW1haW5EaWZmCAULJHQwOTA3MTkxMTACXzIEBGl0ZW0JAQ1zcGxpdENmbW1Kc29uAQUEbmV4dAQLaW5wdXRBbW91bnQJALYJAQkAkQMCBQRpdGVtAAIEEGlucHV0QW1vdW50Q2hlY2sEByRtYXRjaDAFC2lucHV0QW1vdW50AwkAAQIFByRtYXRjaDACA0ludAQFaW5wdXQFByRtYXRjaDAFBWlucHV0CQACAQIkSW5wdXQgYW1vdW50IGhhcyB0aGUgd3JvbmcgZGF0YSB0eXBlBA9tYXhTdWJ0cmFjdGFibGUDCQBmAgUQaW5wdXRBbW91bnRDaGVjawAECQBrAwUQaW5wdXRBbW91bnRDaGVjawADAAQAAAQMJHQwOTUwODEwMTIyAwMJAAACBQpyZW1haW5EaWZmAAAGCQAAAgUPbWF4U3VidHJhY3RhYmxlAAAJAJQKAgUKcmVtYWluRGlmZgAAAwkAZgIJAGQCBQpyZW1haW5EaWZmBQ9tYXhTdWJ0cmFjdGFibGUAAAQVcmVtYWluaW5nU3VidHJhY3RhYmxlCQBkAgUKcmVtYWluRGlmZgUPbWF4U3VidHJhY3RhYmxlCQCUCgIAAAkAZQIFD21heFN1YnRyYWN0YWJsZQUVcmVtYWluaW5nU3VidHJhY3RhYmxlAwkAZgIAAAkAZAIFCnJlbWFpbkRpZmYFD21heFN1YnRyYWN0YWJsZQkAlAoCCQBkAgUKcmVtYWluRGlmZgUPbWF4U3VidHJhY3RhYmxlBQ9tYXhTdWJ0cmFjdGFibGUJAJQKAgAABQ9tYXhTdWJ0cmFjdGFibGUEEG5ld1JlbWFpbmluZ0RpZmYIBQwkdDA5NTA4MTAxMjICXzEEEnN1YnRyYWN0YWJsZUFtb3VudAgFDCR0MDk1MDgxMDEyMgJfMgQOYW1vdW50VG9BZGp1c3QJAGUCBRBpbnB1dEFtb3VudENoZWNrBRJzdWJ0cmFjdGFibGVBbW91bnQEB25ld0l0ZW0JAKwCAgkArAICCQCsAgIJAKwCAgkAkQMCBQRpdGVtAAACAS8JAJEDAgUEaXRlbQABAgEvCQCkAwEFDmFtb3VudFRvQWRqdXN0CQCUCgIJAM0IAgUNYWRqdXN0ZWRTd2FwcwUHbmV3SXRlbQUQbmV3UmVtYWluaW5nRGlmZgoAAiRsBQVzd2FwcwoAAiRzCQCQAwEFAiRsCgAFJGFjYzAJAJQKAgUDbmlsBQ1yZW1haW5pbmdEaWZmCgEFJGYwXzECAiRhAiRpAwkAZwIFAiRpBQIkcwUCJGEJARZkaXN0cmlidXRlUHJvcG9ydGlvbmFsAgUCJGEJAJEDAgUCJGwFAiRpCgEFJGYwXzICAiRhAiRpAwkAZwIFAiRpBQIkcwUCJGEJAAIBAhRMaXN0IHNpemUgZXhjZWVkcyA0MAkBBSRmMF8yAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgUFJGFjYzAAAAABAAIAAwAEAAUABgAHAAgACQAKAAsADAANAA4ADwAQABEAEgATABQAFQAWABcAGAAZABoAGwAcAB0AHgAfACAAIQAiACMAJAAlACYAJwAoARhkaXN0cmlidXRlTmVnYXRpdmVUb2tlbnMCBXN3YXBzBGRpZmYECnRvdGFsU3dhcHMJAJADAQUFc3dhcHMEDSR0MDEwNDg3MTA1NzAJAR9jYWxjRXhjZXNzQW1vdW50UGVyQ2ZtbU5lZ2F0aXZlAgUEZGlmZgUKdG90YWxTd2FwcwQIcXVvdGllbnQIBQ0kdDAxMDQ4NzEwNTcwAl8xBA9yZW1haW5pbmdBbW91bnQIBQ0kdDAxMDQ4NzEwNTcwAl8yCgENYWRqdXN0QW1vdW50cwIFYWNjdW0EbmV4dAQNJHQwMTA2NDMxMDY4NQUFYWNjdW0EDWFkanVzdGVkU3dhcHMIBQ0kdDAxMDY0MzEwNjg1Al8xBA1yZW1haW5pbmdEaWZmCAUNJHQwMTA2NDMxMDY4NQJfMgQEaXRlbQkBDXNwbGl0Q2ZtbUpzb24BBQRuZXh0BAtpbnB1dEFtb3VudAkAtgkBCQCRAwIFBGl0ZW0AAgQHJG1hdGNoMAULaW5wdXRBbW91bnQDCQABAgUHJG1hdGNoMAIDSW50BAVpbnB1dAUHJG1hdGNoMAQNJHQwMTA4MjIxMTE3MgMJAGcCCQBkAgUFaW5wdXQFCHF1b3RpZW50AAEDAwkAZgIFDXJlbWFpbmluZ0RpZmYAAAkAZwIJAGUCCQBkAgUFaW5wdXQFCHF1b3RpZW50AAEAAQcJAJQKAgkAZQIJAGQCBQVpbnB1dAUIcXVvdGllbnQAAQkAZQIFDXJlbWFpbmluZ0RpZmYAAQkAlAoCCQBkAgUFaW5wdXQFCHF1b3RpZW50BQ1yZW1haW5pbmdEaWZmCQCUCgIFBWlucHV0CQBkAgUNcmVtYWluaW5nRGlmZgUIcXVvdGllbnQEDmFtb3VudFRvQWRqdXN0CAUNJHQwMTA4MjIxMTE3MgJfMQQQbmV3UmVtYWluaW5nRGlmZggFDSR0MDEwODIyMTExNzICXzIEB25ld0l0ZW0JAKwCAgkArAICCQCsAgIJAKwCAgkAkQMCBQRpdGVtAAACAS8JAJEDAgUEaXRlbQABAgEvCQCkAwEFDmFtb3VudFRvQWRqdXN0CQCUCgIJAM0IAgUNYWRqdXN0ZWRTd2FwcwUHbmV3SXRlbQUQbmV3UmVtYWluaW5nRGlmZgkAAgECGUlucHV0IGhhcyB3cm9uZyBkYXRhdHlwZSEEDSR0MDExMzcxMTE0NjIKAAIkbAUFc3dhcHMKAAIkcwkAkAMBBQIkbAoABSRhY2MwCQCUCgIFA25pbAUPcmVtYWluaW5nQW1vdW50CgEFJGYwXzECAiRhAiRpAwkAZwIFAiRpBQIkcwUCJGEJAQ1hZGp1c3RBbW91bnRzAgUCJGEJAJEDAgUCJGwFAiRpCgEFJGYwXzICAiRhAiRpAwkAZwIFAiRpBQIkcwUCJGEJAAIBAhRMaXN0IHNpemUgZXhjZWVkcyA0MAkBBSRmMF8yAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgUFJGFjYzAAAAABAAIAAwAEAAUABgAHAAgACQAKAAsADAANAA4ADwAQABEAEgATABQAFQAWABcAGAAZABoAGwAcAB0AHgAfACAAIQAiACMAJAAlACYAJwAoBA1hZGp1c3RlZFN3YXBzCAUNJHQwMTEzNzExMTQ2MgJfMQQOcmVtYWluaW5nRGlmZnMIBQ0kdDAxMTM3MTExNDYyAl8yBA0kdDAxMTQ2NjExNTQ2CQEYZGlzdHJpYnV0ZVJlbWFpbmluZ0RpZmZzAgUOcmVtYWluaW5nRGlmZnMFDWFkanVzdGVkU3dhcHMECmZpbmFsU3dhcHMIBQ0kdDAxMTQ2NjExNTQ2Al8xBAVkaWZmcwgFDSR0MDExNDY2MTE1NDYCXzIFCmZpbmFsU3dhcHMBF2hhbmRsZVNlY29uZElucHV0QW1vdW50AxNwcmVkZXRlcm1pbmVkQW1vdW50D2F2YWlsYWJsZUFtb3VudAVzd2FwcwQEZGlmZgkAZQIFD2F2YWlsYWJsZUFtb3VudAUTcHJlZGV0ZXJtaW5lZEFtb3VudAQNYWRqdXN0ZWRTd2FwcwMJAGYCBQRkaWZmAAAJARpkaXN0cmlidXRlQWRkaXRpb25hbFRva2VucwIFBXN3YXBzBQRkaWZmAwkAZgIAAAUEZGlmZgkBGGRpc3RyaWJ1dGVOZWdhdGl2ZVRva2VucwIFBXN3YXBzBQRkaWZmBQVzd2FwcwUNYWRqdXN0ZWRTd2FwcwUBaQEFc2V0dXAAAwkBASEBCQEJaXNEZWZpbmVkAQkAnQgCBQR0aGlzAgVhZG1pbgkAzAgCCQELd3JpdGVTdHJpbmcCAgVhZG1pbgkA2AQBCAgFAWkGY2FsbGVyBWJ5dGVzBQNuaWwJAAIBAhNEYXBwIGFscmVhZHkgc2V0dXAhAWkBCGJhc2ljQXJiBgtzdGFydEFtb3VudA5zZWNvbmRBbW91bnRJbgpmaXJzdFRva2VuC3NlY29uZFRva2VuCWZpcnN0U3dhcApzZWNvbmRTd2FwAwkBB2lzQWRtaW4BCAgFAWkGY2FsbGVyBWJ5dGVzBBlhdmFpbGFibGVBbW91bnRGaXJzdFRva2VuAwkAAAIFCmZpcnN0VG9rZW4CBVdBVkVTBAdiYWxhbmNlCQDvBwEFBHRoaXMIBQdiYWxhbmNlCWF2YWlsYWJsZQQMZmlyc3RUb2tlbklkBAN0SWQJANkEAQUKZmlyc3RUb2tlbgQHJG1hdGNoMAUDdElkAwkAAQIFByRtYXRjaDACCkJ5dGVWZWN0b3IEA3RJZAUHJG1hdGNoMAUDdElkCQACAQIQSW52YWxpZCBkYXRhdHlwZQkA8AcCBQR0aGlzBQxmaXJzdFRva2VuSWQDCQBnAgUZYXZhaWxhYmxlQW1vdW50Rmlyc3RUb2tlbgULc3RhcnRBbW91bnQEC2ZpcnN0UmVzdWx0CQEMcHJvY2Vzc0NmbW1zAwUJZmlyc3RTd2FwBQpmaXJzdFRva2VuBQtzZWNvbmRUb2tlbgQLc2Vjb25kU3dhcHMDCQAAAgULZmlyc3RSZXN1bHQFDnNlY29uZEFtb3VudEluBQpzZWNvbmRTd2FwCQEXaGFuZGxlU2Vjb25kSW5wdXRBbW91bnQDBQ5zZWNvbmRBbW91bnRJbgULZmlyc3RSZXN1bHQFCnNlY29uZFN3YXAEDHNlY29uZFJlc3VsdAkBDHByb2Nlc3NDZm1tcwMFC3NlY29uZFN3YXBzBQtzZWNvbmRUb2tlbgUKZmlyc3RUb2tlbgMJAGYCBQxzZWNvbmRSZXN1bHQFC3N0YXJ0QW1vdW50CQCUCgIJAMwIAgkBDHdyaXRlSW50ZWdlcgIJAKwCAgIKQXJiUmVzdWx0XwkApAMBBQphcmJDb3VudGVyCQBlAgUMc2Vjb25kUmVzdWx0BQtzdGFydEFtb3VudAkAzAgCCQELd3JpdGVTdHJpbmcCCQCsAgICEEFyYlJlc3VsdCBUb2tlbl8JAKQDAQUKYXJiQ291bnRlcgUKZmlyc3RUb2tlbgkAzAgCCQEMd3JpdGVJbnRlZ2VyAgIKYXJiQ291bnRlcgkAZAIFCmFyYkNvdW50ZXIAAQUDbmlsCQBlAgUMc2Vjb25kUmVzdWx0BQtzdGFydEFtb3VudAkAAgEJAKwCAgkArAICCQCsAgICKFRyYWRlIHdhcyBub3QgcHJvZml0YWJsZSEgSW5wdXQgYW1vdW50OiAJAKQDAQULc3RhcnRBbW91bnQCECBPdXRwdXQgYW1vdW50OiAJAKQDAQUMc2Vjb25kUmVzdWx0CQACAQIpQXZhaWxhYmxlIGlucHV0IGFtb3VudCBpcyBub3Qgc3VmZmljaWVudCEJAAIBAipBZGRyZXNzIGRvZXMgbm90IG1hdGNoIHdpdGggYWRtaW4gYWRkcmVzcyEBaQERdXBkYXRlU3RyaW5nRW50cnkCA2tleQtzdHJpbmdWYWx1ZQMJAQdpc0FkbWluAQgIBQFpBmNhbGxlcgVieXRlcwkAzAgCCQELd3JpdGVTdHJpbmcCBQNrZXkFC3N0cmluZ1ZhbHVlBQNuaWwJAAIBAipBZGRyZXNzIGRvZXMgbm90IG1hdGNoIHdpdGggYWRtaW4gYWRkcmVzcyEBaQESdXBkYXRlSW50ZWdlckVudHJ5AgNrZXkMaW50ZWdlclZhbHVlAwkBB2lzQWRtaW4BCAgFAWkGY2FsbGVyBWJ5dGVzCQDMCAIJAQx3cml0ZUludGVnZXICBQNrZXkFDGludGVnZXJWYWx1ZQUDbmlsCQACAQIqQWRkcmVzcyBkb2VzIG5vdCBtYXRjaCB3aXRoIGFkbWluIGFkZHJlc3MhAWkBEmRlbGV0ZVN0b3JhZ2VFbnRyeQEDa2V5AwkBB2lzQWRtaW4BCAgFAWkGY2FsbGVyBWJ5dGVzCQDMCAIJAQtEZWxldGVFbnRyeQEFA2tleQUDbmlsCQACAQIqQWRkcmVzcyBkb2VzIG5vdCBtYXRjaCB3aXRoIGFkbWluIGFkZHJlc3MhAQJ0eAEGdmVyaWZ5AAkA9AMDCAUCdHgJYm9keUJ5dGVzCQCRAwIIBQJ0eAZwcm9vZnMAAAgFAnR4D3NlbmRlclB1YmxpY0tleXaEJSc=", "height": 3862588, "applicationStatus": "succeeded", "spentComplexity": 0 } View: original | compacted Prev: FQaEmXf6Cx8tvCBGzLqkMMu8ou4zS5FmRu5NF7hNBjpX Next: DqgaCDsr1fvNLHXxejT8bpgZwsPHyABFuZSGGg4tPdBw Diff:
OldNewDifferences
22 {-# SCRIPT_TYPE ACCOUNT #-}
33 {-# CONTENT_TYPE DAPP #-}
44 let adminAddress = valueOrElse(getString(this, "admin"), "")
5+
6+let arbCounter = valueOrElse(getInteger(this, "arbCounter"), 0)
57
68 let wxSwapAddress = "3P68zNiufsu1viZpu1aY3cdahRRKcvV5N93"
79
9799
98100 func processCfmms (swaps,tokenIdIn,tokenIdOut) = {
99101 func invokeSwap (accum,next) = {
100- let $t068956922 = accum
101- let result = $t068956922._1
102- let index = $t068956922._2
102+ let $t069596986 = accum
103+ let result = $t069596986._1
104+ let index = $t069596986._2
103105 if ((size(swaps) > index))
104106 then $Tuple2((result + determinePlatform(next, tokenIdIn, tokenIdOut)), (index + 1))
105107 else $Tuple2(result, index)
145147
146148 func distributeAdditionalTokens (swaps,diff) = {
147149 let totalSwaps = size(swaps)
148- let $t079338016 = calcExcessAmountPerCfmmPositive(diff, totalSwaps)
149- let quotient = $t079338016._1
150- let remainingAmount = $t079338016._2
150+ let $t079978080 = calcExcessAmountPerCfmmPositive(diff, totalSwaps)
151+ let quotient = $t079978080._1
152+ let remainingAmount = $t079978080._2
151153 func adjustAmounts (accum,next) = {
152- let $t080898131 = accum
153- let adjustedSwaps = $t080898131._1
154- let remainingDiff = $t080898131._2
154+ let $t081538195 = accum
155+ let adjustedSwaps = $t081538195._1
156+ let remainingDiff = $t081538195._2
155157 let item = splitCfmmJson(next)
156158 let inputAmount = parseInt(item[2])
157159 match inputAmount {
189191
190192 func distributeRemainingDiffs (remainingDiff,swaps) = {
191193 func distributeProportional (accum,next) = {
192- let $t090079046 = accum
193- let adjustedSwaps = $t090079046._1
194- let remainDiff = $t090079046._2
194+ let $t090719110 = accum
195+ let adjustedSwaps = $t090719110._1
196+ let remainDiff = $t090719110._2
195197 let item = splitCfmmJson(next)
196198 let inputAmount = parseInt(item[2])
197199 let inputAmountCheck = match inputAmount {
203205 let maxSubtractable = if ((inputAmountCheck > 4))
204206 then fraction(inputAmountCheck, 3, 4)
205207 else 0
206- let $t0944410058 = if (if ((remainDiff == 0))
208+ let $t0950810122 = if (if ((remainDiff == 0))
207209 then true
208210 else (maxSubtractable == 0))
209211 then $Tuple2(remainDiff, 0)
215217 else if ((0 > (remainDiff + maxSubtractable)))
216218 then $Tuple2((remainDiff + maxSubtractable), maxSubtractable)
217219 else $Tuple2(0, maxSubtractable)
218- let newRemainingDiff = $t0944410058._1
219- let subtractableAmount = $t0944410058._2
220+ let newRemainingDiff = $t0950810122._1
221+ let subtractableAmount = $t0950810122._2
220222 let amountToAdjust = (inputAmountCheck - subtractableAmount)
221223 let newItem = ((((item[0] + "/") + item[1]) + "/") + toString(amountToAdjust))
222224 $Tuple2((adjustedSwaps :+ newItem), newRemainingDiff)
239241
240242 func distributeNegativeTokens (swaps,diff) = {
241243 let totalSwaps = size(swaps)
242- let $t01042310506 = calcExcessAmountPerCfmmNegative(diff, totalSwaps)
243- let quotient = $t01042310506._1
244- let remainingAmount = $t01042310506._2
244+ let $t01048710570 = calcExcessAmountPerCfmmNegative(diff, totalSwaps)
245+ let quotient = $t01048710570._1
246+ let remainingAmount = $t01048710570._2
245247 func adjustAmounts (accum,next) = {
246- let $t01057910621 = accum
247- let adjustedSwaps = $t01057910621._1
248- let remainingDiff = $t01057910621._2
248+ let $t01064310685 = accum
249+ let adjustedSwaps = $t01064310685._1
250+ let remainingDiff = $t01064310685._2
249251 let item = splitCfmmJson(next)
250252 let inputAmount = parseInt(item[2])
251253 match inputAmount {
252254 case input: Int =>
253- let $t01075811108 = if (((input + quotient) >= 1))
255+ let $t01082211172 = if (((input + quotient) >= 1))
254256 then if (if ((remainingDiff > 0))
255257 then (((input + quotient) - 1) >= 1)
256258 else false)
257259 then $Tuple2(((input + quotient) - 1), (remainingDiff - 1))
258260 else $Tuple2((input + quotient), remainingDiff)
259261 else $Tuple2(input, (remainingDiff + quotient))
260- let amountToAdjust = $t01075811108._1
261- let newRemainingDiff = $t01075811108._2
262+ let amountToAdjust = $t01082211172._1
263+ let newRemainingDiff = $t01082211172._2
262264 let newItem = ((((item[0] + "/") + item[1]) + "/") + toString(amountToAdjust))
263265 $Tuple2((adjustedSwaps :+ newItem), newRemainingDiff)
264266 case _ =>
266268 }
267269 }
268270
269- let $t01130711398 = {
271+ let $t01137111462 = {
270272 let $l = swaps
271273 let $s = size($l)
272274 let $acc0 = $Tuple2(nil, remainingAmount)
280282
281283 $f0_2($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($acc0, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10), 11), 12), 13), 14), 15), 16), 17), 18), 19), 20), 21), 22), 23), 24), 25), 26), 27), 28), 29), 30), 31), 32), 33), 34), 35), 36), 37), 38), 39), 40)
282284 }
283- let adjustedSwaps = $t01130711398._1
284- let remainingDiffs = $t01130711398._2
285- let $t01140211482 = distributeRemainingDiffs(remainingDiffs, adjustedSwaps)
286- let finalSwaps = $t01140211482._1
287- let diffs = $t01140211482._2
285+ let adjustedSwaps = $t01137111462._1
286+ let remainingDiffs = $t01137111462._2
287+ let $t01146611546 = distributeRemainingDiffs(remainingDiffs, adjustedSwaps)
288+ let finalSwaps = $t01146611546._1
289+ let diffs = $t01146611546._2
288290 finalSwaps
289291 }
290292
335337 else handleSecondInputAmount(secondAmountIn, firstResult, secondSwap)
336338 let secondResult = processCfmms(secondSwaps, secondToken, firstToken)
337339 if ((secondResult > startAmount))
338- then $Tuple2(nil, (secondResult - startAmount))
340+ then $Tuple2([writeInteger(("ArbResult_" + toString(arbCounter)), (secondResult - startAmount)), writeString(("ArbResult Token_" + toString(arbCounter)), firstToken), writeInteger("arbCounter", (arbCounter + 1))], (secondResult - startAmount))
339341 else throw(((("Trade was not profitable! Input amount: " + toString(startAmount)) + " Output amount: ") + toString(secondResult)))
340342 }
341343 else throw("Available input amount is not sufficient!")
Full:
OldNewDifferences
11 {-# STDLIB_VERSION 6 #-}
22 {-# SCRIPT_TYPE ACCOUNT #-}
33 {-# CONTENT_TYPE DAPP #-}
44 let adminAddress = valueOrElse(getString(this, "admin"), "")
5+
6+let arbCounter = valueOrElse(getInteger(this, "arbCounter"), 0)
57
68 let wxSwapAddress = "3P68zNiufsu1viZpu1aY3cdahRRKcvV5N93"
79
810 func writeString (key,stringValue) = StringEntry(key, stringValue)
911
1012
1113 func writeInteger (key,integerValue) = IntegerEntry(key, integerValue)
1214
1315
1416 func isAdmin (callerAddress) = if ((callerAddress == fromBase58String(adminAddress)))
1517 then true
1618 else false
1719
1820
1921 func splitCfmmJson (entry) = split(entry, "/")
2022
2123
2224 func invokeSwop (poolAddress,tokenId,inputAmount) = {
2325 let tokenIdChecked = if ((tokenId == "WAVES"))
2426 then unit
2527 else fromBase58String(tokenId)
2628 let result = invoke(addressFromStringValue(poolAddress), "exchange", [1], [AttachedPayment(tokenIdChecked, inputAmount)])
2729 if ((result == result))
2830 then match result {
2931 case result: List[Any] =>
3032 match result[0] {
3133 case a: Int =>
3234 a
3335 case _ =>
3436 throw("List item is not an int!")
3537 }
3638 case _ =>
3739 throw("Result of swop invokation does not match!")
3840 }
3941 else throw("Strict value is not equal to itself.")
4042 }
4143
4244
4345 func invokeWx (tokenIdIn,tokenIdOut,inputAmount) = {
4446 let tokenIdInChecked = if ((tokenIdIn == "WAVES"))
4547 then unit
4648 else fromBase58String(tokenIdIn)
4749 let tokenIdOutChecked = if ((tokenIdOut == "WAVES"))
4850 then ""
4951 else tokenIdOut
5052 let r = invoke(addressFromStringValue(wxSwapAddress), "swap", [1, tokenIdOutChecked, toString(this)], [AttachedPayment(tokenIdInChecked, inputAmount)])
5153 if ((r == r))
5254 then match r {
5355 case r: Int =>
5456 r
5557 case _ =>
5658 throw("Result of swop invokation does not match!")
5759 }
5860 else throw("Strict value is not equal to itself.")
5961 }
6062
6163
6264 func invokePuzzle (poolAddress,tokenIdIn,tokenIdOut,inputAmount) = {
6365 let tokenIdInChecked = if ((tokenIdIn == "WAVES"))
6466 then unit
6567 else fromBase58String(tokenIdIn)
6668 let result = invoke(addressFromStringValue(poolAddress), "swap", [tokenIdOut, 1], [AttachedPayment(tokenIdInChecked, inputAmount)])
6769 if ((result == result))
6870 then match result {
6971 case result: Int =>
7072 result
7173 case _ =>
7274 throw("Result of swop invokation does not match!")
7375 }
7476 else throw("Strict value is not equal to itself.")
7577 }
7678
7779
7880 func determinePlatform (cfmm,tokenIdIn,tokenIdOut) = {
7981 let item = splitCfmmJson(cfmm)
8082 let inputAmount = parseInt(item[2])
8183 let input = match inputAmount {
8284 case inputAmount: Int =>
8385 inputAmount
8486 case _ =>
8587 throw("Datatype of input amount does not match!")
8688 }
8789 let result = if ((item[0] == "SWOP"))
8890 then invokeSwop(item[1], tokenIdIn, input)
8991 else if ((item[0] == "Waves Exchange"))
9092 then invokeWx(tokenIdIn, tokenIdOut, input)
9193 else if ((item[0] == "Puzzle Swap"))
9294 then invokePuzzle(item[1], tokenIdIn, tokenIdOut, input)
9395 else throw("Platform id does not match!")
9496 result
9597 }
9698
9799
98100 func processCfmms (swaps,tokenIdIn,tokenIdOut) = {
99101 func invokeSwap (accum,next) = {
100- let $t068956922 = accum
101- let result = $t068956922._1
102- let index = $t068956922._2
102+ let $t069596986 = accum
103+ let result = $t069596986._1
104+ let index = $t069596986._2
103105 if ((size(swaps) > index))
104106 then $Tuple2((result + determinePlatform(next, tokenIdIn, tokenIdOut)), (index + 1))
105107 else $Tuple2(result, index)
106108 }
107109
108110 let resultTuple = {
109111 let $l = swaps
110112 let $s = size($l)
111113 let $acc0 = $Tuple2(0, 0)
112114 func $f0_1 ($a,$i) = if (($i >= $s))
113115 then $a
114116 else invokeSwap($a, $l[$i])
115117
116118 func $f0_2 ($a,$i) = if (($i >= $s))
117119 then $a
118120 else throw("List size exceeds 40")
119121
120122 $f0_2($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($acc0, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10), 11), 12), 13), 14), 15), 16), 17), 18), 19), 20), 21), 22), 23), 24), 25), 26), 27), 28), 29), 30), 31), 32), 33), 34), 35), 36), 37), 38), 39), 40)
121123 }
122124 resultTuple._1
123125 }
124126
125127
126128 func calcExcessAmountPerCfmmPositive (difference,numberCfmms) = {
127129 let quotient = fraction(difference, 1, numberCfmms, DOWN)
128130 let totalDistributedAmount = (quotient * numberCfmms)
129131 let remainingAmount = (difference - totalDistributedAmount)
130132 if ((remainingAmount > 0))
131133 then $Tuple2(quotient, remainingAmount)
132134 else $Tuple2(quotient, 0)
133135 }
134136
135137
136138 func calcExcessAmountPerCfmmNegative (difference,numberCfmms) = {
137139 let quotient = fraction(difference, 1, numberCfmms, DOWN)
138140 let totalDistributedAmount = (quotient * numberCfmms)
139141 let remainingAmount = (difference - totalDistributedAmount)
140142 if ((0 > remainingAmount))
141143 then $Tuple2(quotient, remainingAmount)
142144 else $Tuple2(quotient, 0)
143145 }
144146
145147
146148 func distributeAdditionalTokens (swaps,diff) = {
147149 let totalSwaps = size(swaps)
148- let $t079338016 = calcExcessAmountPerCfmmPositive(diff, totalSwaps)
149- let quotient = $t079338016._1
150- let remainingAmount = $t079338016._2
150+ let $t079978080 = calcExcessAmountPerCfmmPositive(diff, totalSwaps)
151+ let quotient = $t079978080._1
152+ let remainingAmount = $t079978080._2
151153 func adjustAmounts (accum,next) = {
152- let $t080898131 = accum
153- let adjustedSwaps = $t080898131._1
154- let remainingDiff = $t080898131._2
154+ let $t081538195 = accum
155+ let adjustedSwaps = $t081538195._1
156+ let remainingDiff = $t081538195._2
155157 let item = splitCfmmJson(next)
156158 let inputAmount = parseInt(item[2])
157159 match inputAmount {
158160 case input: Int =>
159161 let amountToAdjust = if ((remainingDiff > 0))
160162 then ((input + quotient) + 1)
161163 else (input + quotient)
162164 let newItem = ((((item[0] + "/") + item[1]) + "/") + toString(amountToAdjust))
163165 let newRemainingDiff = if ((remainingDiff > 0))
164166 then (remainingDiff - 1)
165167 else remainingDiff
166168 $Tuple2((adjustedSwaps :+ newItem), newRemainingDiff)
167169 case _ =>
168170 throw("Input has wrong datatype!")
169171 }
170172 }
171173
172174 let result = {
173175 let $l = swaps
174176 let $s = size($l)
175177 let $acc0 = $Tuple2(nil, remainingAmount)
176178 func $f0_1 ($a,$i) = if (($i >= $s))
177179 then $a
178180 else adjustAmounts($a, $l[$i])
179181
180182 func $f0_2 ($a,$i) = if (($i >= $s))
181183 then $a
182184 else throw("List size exceeds 40")
183185
184186 $f0_2($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($acc0, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10), 11), 12), 13), 14), 15), 16), 17), 18), 19), 20), 21), 22), 23), 24), 25), 26), 27), 28), 29), 30), 31), 32), 33), 34), 35), 36), 37), 38), 39), 40)
185187 }
186188 result._1
187189 }
188190
189191
190192 func distributeRemainingDiffs (remainingDiff,swaps) = {
191193 func distributeProportional (accum,next) = {
192- let $t090079046 = accum
193- let adjustedSwaps = $t090079046._1
194- let remainDiff = $t090079046._2
194+ let $t090719110 = accum
195+ let adjustedSwaps = $t090719110._1
196+ let remainDiff = $t090719110._2
195197 let item = splitCfmmJson(next)
196198 let inputAmount = parseInt(item[2])
197199 let inputAmountCheck = match inputAmount {
198200 case input: Int =>
199201 input
200202 case _ =>
201203 throw("Input amount has the wrong data type")
202204 }
203205 let maxSubtractable = if ((inputAmountCheck > 4))
204206 then fraction(inputAmountCheck, 3, 4)
205207 else 0
206- let $t0944410058 = if (if ((remainDiff == 0))
208+ let $t0950810122 = if (if ((remainDiff == 0))
207209 then true
208210 else (maxSubtractable == 0))
209211 then $Tuple2(remainDiff, 0)
210212 else if (((remainDiff + maxSubtractable) > 0))
211213 then {
212214 let remainingSubtractable = (remainDiff + maxSubtractable)
213215 $Tuple2(0, (maxSubtractable - remainingSubtractable))
214216 }
215217 else if ((0 > (remainDiff + maxSubtractable)))
216218 then $Tuple2((remainDiff + maxSubtractable), maxSubtractable)
217219 else $Tuple2(0, maxSubtractable)
218- let newRemainingDiff = $t0944410058._1
219- let subtractableAmount = $t0944410058._2
220+ let newRemainingDiff = $t0950810122._1
221+ let subtractableAmount = $t0950810122._2
220222 let amountToAdjust = (inputAmountCheck - subtractableAmount)
221223 let newItem = ((((item[0] + "/") + item[1]) + "/") + toString(amountToAdjust))
222224 $Tuple2((adjustedSwaps :+ newItem), newRemainingDiff)
223225 }
224226
225227 let $l = swaps
226228 let $s = size($l)
227229 let $acc0 = $Tuple2(nil, remainingDiff)
228230 func $f0_1 ($a,$i) = if (($i >= $s))
229231 then $a
230232 else distributeProportional($a, $l[$i])
231233
232234 func $f0_2 ($a,$i) = if (($i >= $s))
233235 then $a
234236 else throw("List size exceeds 40")
235237
236238 $f0_2($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($acc0, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10), 11), 12), 13), 14), 15), 16), 17), 18), 19), 20), 21), 22), 23), 24), 25), 26), 27), 28), 29), 30), 31), 32), 33), 34), 35), 36), 37), 38), 39), 40)
237239 }
238240
239241
240242 func distributeNegativeTokens (swaps,diff) = {
241243 let totalSwaps = size(swaps)
242- let $t01042310506 = calcExcessAmountPerCfmmNegative(diff, totalSwaps)
243- let quotient = $t01042310506._1
244- let remainingAmount = $t01042310506._2
244+ let $t01048710570 = calcExcessAmountPerCfmmNegative(diff, totalSwaps)
245+ let quotient = $t01048710570._1
246+ let remainingAmount = $t01048710570._2
245247 func adjustAmounts (accum,next) = {
246- let $t01057910621 = accum
247- let adjustedSwaps = $t01057910621._1
248- let remainingDiff = $t01057910621._2
248+ let $t01064310685 = accum
249+ let adjustedSwaps = $t01064310685._1
250+ let remainingDiff = $t01064310685._2
249251 let item = splitCfmmJson(next)
250252 let inputAmount = parseInt(item[2])
251253 match inputAmount {
252254 case input: Int =>
253- let $t01075811108 = if (((input + quotient) >= 1))
255+ let $t01082211172 = if (((input + quotient) >= 1))
254256 then if (if ((remainingDiff > 0))
255257 then (((input + quotient) - 1) >= 1)
256258 else false)
257259 then $Tuple2(((input + quotient) - 1), (remainingDiff - 1))
258260 else $Tuple2((input + quotient), remainingDiff)
259261 else $Tuple2(input, (remainingDiff + quotient))
260- let amountToAdjust = $t01075811108._1
261- let newRemainingDiff = $t01075811108._2
262+ let amountToAdjust = $t01082211172._1
263+ let newRemainingDiff = $t01082211172._2
262264 let newItem = ((((item[0] + "/") + item[1]) + "/") + toString(amountToAdjust))
263265 $Tuple2((adjustedSwaps :+ newItem), newRemainingDiff)
264266 case _ =>
265267 throw("Input has wrong datatype!")
266268 }
267269 }
268270
269- let $t01130711398 = {
271+ let $t01137111462 = {
270272 let $l = swaps
271273 let $s = size($l)
272274 let $acc0 = $Tuple2(nil, remainingAmount)
273275 func $f0_1 ($a,$i) = if (($i >= $s))
274276 then $a
275277 else adjustAmounts($a, $l[$i])
276278
277279 func $f0_2 ($a,$i) = if (($i >= $s))
278280 then $a
279281 else throw("List size exceeds 40")
280282
281283 $f0_2($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($acc0, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10), 11), 12), 13), 14), 15), 16), 17), 18), 19), 20), 21), 22), 23), 24), 25), 26), 27), 28), 29), 30), 31), 32), 33), 34), 35), 36), 37), 38), 39), 40)
282284 }
283- let adjustedSwaps = $t01130711398._1
284- let remainingDiffs = $t01130711398._2
285- let $t01140211482 = distributeRemainingDiffs(remainingDiffs, adjustedSwaps)
286- let finalSwaps = $t01140211482._1
287- let diffs = $t01140211482._2
285+ let adjustedSwaps = $t01137111462._1
286+ let remainingDiffs = $t01137111462._2
287+ let $t01146611546 = distributeRemainingDiffs(remainingDiffs, adjustedSwaps)
288+ let finalSwaps = $t01146611546._1
289+ let diffs = $t01146611546._2
288290 finalSwaps
289291 }
290292
291293
292294 func handleSecondInputAmount (predeterminedAmount,availableAmount,swaps) = {
293295 let diff = (availableAmount - predeterminedAmount)
294296 let adjustedSwaps = if ((diff > 0))
295297 then distributeAdditionalTokens(swaps, diff)
296298 else if ((0 > diff))
297299 then distributeNegativeTokens(swaps, diff)
298300 else swaps
299301 adjustedSwaps
300302 }
301303
302304
303305 @Callable(i)
304306 func setup () = if (!(isDefined(getString(this, "admin"))))
305307 then [writeString("admin", toBase58String(i.caller.bytes))]
306308 else throw("Dapp already setup!")
307309
308310
309311
310312 @Callable(i)
311313 func basicArb (startAmount,secondAmountIn,firstToken,secondToken,firstSwap,secondSwap) = if (isAdmin(i.caller.bytes))
312314 then {
313315 let availableAmountFirstToken = if ((firstToken == "WAVES"))
314316 then {
315317 let balance = wavesBalance(this)
316318 balance.available
317319 }
318320 else {
319321 let firstTokenId = {
320322 let tId = fromBase58String(firstToken)
321323 match tId {
322324 case tId: ByteVector =>
323325 tId
324326 case _ =>
325327 throw("Invalid datatype")
326328 }
327329 }
328330 assetBalance(this, firstTokenId)
329331 }
330332 if ((availableAmountFirstToken >= startAmount))
331333 then {
332334 let firstResult = processCfmms(firstSwap, firstToken, secondToken)
333335 let secondSwaps = if ((firstResult == secondAmountIn))
334336 then secondSwap
335337 else handleSecondInputAmount(secondAmountIn, firstResult, secondSwap)
336338 let secondResult = processCfmms(secondSwaps, secondToken, firstToken)
337339 if ((secondResult > startAmount))
338- then $Tuple2(nil, (secondResult - startAmount))
340+ then $Tuple2([writeInteger(("ArbResult_" + toString(arbCounter)), (secondResult - startAmount)), writeString(("ArbResult Token_" + toString(arbCounter)), firstToken), writeInteger("arbCounter", (arbCounter + 1))], (secondResult - startAmount))
339341 else throw(((("Trade was not profitable! Input amount: " + toString(startAmount)) + " Output amount: ") + toString(secondResult)))
340342 }
341343 else throw("Available input amount is not sufficient!")
342344 }
343345 else throw("Address does not match with admin address!")
344346
345347
346348
347349 @Callable(i)
348350 func updateStringEntry (key,stringValue) = if (isAdmin(i.caller.bytes))
349351 then [writeString(key, stringValue)]
350352 else throw("Address does not match with admin address!")
351353
352354
353355
354356 @Callable(i)
355357 func updateIntegerEntry (key,integerValue) = if (isAdmin(i.caller.bytes))
356358 then [writeInteger(key, integerValue)]
357359 else throw("Address does not match with admin address!")
358360
359361
360362
361363 @Callable(i)
362364 func deleteStorageEntry (key) = if (isAdmin(i.caller.bytes))
363365 then [DeleteEntry(key)]
364366 else throw("Address does not match with admin address!")
365367
366368
367369 @Verifier(tx)
368370 func verify () = sigVerify(tx.bodyBytes, tx.proofs[0], tx.senderPublicKey)
369371

github/deemru/w8io/3ef1775 
75.46 ms