tx · D8N7EvbYzCmqS6pBS9B9YAwgL93J96yJUjPjMahKUZhY

3P5wA45whe3XB4ECK6UYofNM3uFHFxE4KTn:  -0.02000000 Waves

2023.05.07 21:47 [3633318] smart account 3P5wA45whe3XB4ECK6UYofNM3uFHFxE4KTn > SELF 0.00000000 Waves

{ "type": 13, "id": "D8N7EvbYzCmqS6pBS9B9YAwgL93J96yJUjPjMahKUZhY", "fee": 2000000, "feeAssetId": null, "timestamp": 1683485241814, "version": 2, "chainId": 87, "sender": "3P5wA45whe3XB4ECK6UYofNM3uFHFxE4KTn", "senderPublicKey": "77PTtvVsSSK5NDQN4NdKYYvRFDV34gUPe5hMXgrCQg1B", "proofs": [ "53fdLVRD1dhUYLMzXikjhP8egV3QkJYb5uziqB5vcJ5fVUn8VQWGHtJC3FZu8y4RXjuax2m72NhBaz8fgaEWQqXm" ], "script": "base64:BgL8CggCEgASABIDCgEBEgASAwoBARIGCgQBCAgIEgQKAggBEgQKAggBEgQKAggBEgQKAggBEgQKAggBEgQKAggBEgQKAggBEgQKAggBEggKBggICAgIARIICgYICAgICAESCAoGCAgICAgBEggKBggICAgIARIDCgEIIgVUT0tFTiIJZmVlX3NjYWxlIgJ3MSIAIgAiByRtYXRjaDAiAXIiDFdYX1NXQVBfREFQUCIJYXNzZXRzX2luIgpnZXRCYWxhbmNlIgdhc3NldElkIgFiIghnZXRCYXNlMSIEZGF0YSIGcF9kYXRhIgFhIgJhMiIHYXNzZXRJbiIAIghhbW91bnRJbiIIZ2V0QmFzZTIiAnAxIgAiACIAIgF0Ig1nZXRBc3NldEJ5dGVzIgdzd2FwX3d4IgFwIgVhc3NldCIGYW1vdW50IgRjYWxsIglzd2FwX3N3b3AiBHN3YXAiC3N3YXBfcHV6emxlIghhc3NldE91dCIGdWNoZWNrIgJpZCIBaCIBaSIDZmVlIgdjdXJyZW50IgNyZXQiA3BtdCIGY2FsbGVyIg1jdXJyZW50QW1vdW50Igx0b3RhbERlcG9zaXQiCW5ld0Ftb3VudCIEYW1udCIBZiICc3QiAmlpIgJldCIFZmVlX3IiBHBhdGgiC3Bvb2xBZGRyZXNzIgRwb29sIgt1c2RuQXNzZXRJZCIRdXNkbkFzc2V0SWRTdHJpbmciF3VzZG5XYXZlc0xQVG9rZW5Bc3NldElkIhFwdXp6bGVQb29sQWRkcmVzcyIKcHV6emxlUG9vbCITaW5pdGlhbFdhdmVzQmFsYW5jZSINaW5pdGlhbEFtb3VudCILYnV5T25QdXp6bGUiEXdhdmVzVG9rZW5CYWxhbmNlIhRwdXRUaGVUb2tlbkluVGhlUG9vbCIObHBUb2tlbkJhbGFuY2UiDXNlbGxQb29sVG9rZW4iC2ZpbmFsQW1vdW50IgxzZWxsT25QdXp6bGUiEXVzZGNBc3NldElkU3RyaW5nIgt1c2RjQXNzZXRJZCIWdXNkblVzZGNMUFRva2VuQXNzZXRJZCIRaW5pdGlhbEFtb3VudFVTREMiEHVzZGNUb2tlbkJhbGFuY2UiEXVzZHRBc3NldElkU3RyaW5nIgt1c2R0QXNzZXRJZCIWdXNkblVzZHRMUFRva2VuQXNzZXRJZCIRaW5pdGlhbEFtb3VudFVTRFQiEHVzZHRUb2tlbkJhbGFuY2UiCnRzbkFzc2V0SWQiFXVzZG5Uc25MUFRva2VuQXNzZXRJZCIQaW5pdGlhbEFtb3VudFRTTiIPdHNuVG9rZW5CYWxhbmNlIhB0c25Bc3NldElkU3RyaW5nIgpmaXJzdEFzc2V0IgtzZWNvbmRBc3NldCIHbHBUb2tlbiIMZmlyc3RBc3NldElkIg1zZWNvbmRBc3NldElkIg5scFRva2VuQXNzZXRJZCIYaW5pdGlhbEFtb3VudFNlY29uZEFzc2V0IhJzZWNvbmRUb2tlbkJhbGFuY2UiCmRhdGFfYXJyYXkiCnQwMzAwODMwNjQiCnQwMzA2OTMxMDciAnQxIgp0MDMxMTIzMTUwIgJwMiICdDIiCnQwMzE1NTMxOTMiAnAzIgJ0MyIDaWR1IhJhbW91bnRfYmVmX2Fzc2V0SW4iBnVsaW1pdCIKbWF4X2Ftb3VudCIMbmV3X2Ftb3VudEluIhFhbW91bnRfYmVmX2Fzc2V0MSIFc3dhcDEiAm5iIhFhbW91bnRfYmVmX2Fzc2V0MiIFc3dhcDIiA25iMiIVYW1vdW50X2JlZl9iYXNlX2Fzc2V0IgVzd2FwMyIDbmIzIgh0cmVzaG9sZCICdHgiBnZlcmlmeQ0AAWEBILYmKcME9c5TkaQOS3UkL2SMUbH6369UKb1I0h0qsqrRAAFiAMCEPQABYwQBZgkAnQgCBQR0aGlzAgJ3MQMJAAECBQFmAgZTdHJpbmcEAWcFAWYFAWcCAAABaAkBB0FkZHJlc3MBARoBVy4qNTWxDbfxeT7ht0bQnnRSTXsx0IOuBgABaQkAzAgCAixERzJ4RmtQZER3S1VvQmt6R0FoUXRMcFNHemZYTGlDWVBFemVLSDJBZDI0cAUDbmlsAQFqAQFrBAFmBQFrAwkAAQIFAWYCCkJ5dGVWZWN0b3IEAWwFAWYJAPAHAgUEdGhpcwUBbAgJAO8HAQUEdGhpcwlhdmFpbGFibGUBAW0BAW4EAW8JALwJAgUBbgIBXwQBcAkAkQMCBQFvAAAEAXEJAJEDAgUBbwABBAFyCQCRAwIFAWkJAQV2YWx1ZQEJALYJAQkAkQMCBQFvAAIEAXQJAJEDAgUBbwADCQCWCgQFAXAFAXEFAXIFAXQBAXUBAW4EAW8JALUJAgUBbgIBXwQBdgkAkQMCBQFvAAAEAXoJAJEDAgUBbwABCQCUCgIFAXYFAXoBAUEBAWsDCQAAAgUBawIFV0FWRVMFBHVuaXQJANkEAQUBawEBQgQBQwFEAUUBcAQBRgkA/AcEBQFoAgRzd2FwCQDMCAIAAQkAzAgCBQFwCQDMCAIJAKUIAQUEdGhpcwUDbmlsCQDMCAIJAQ9BdHRhY2hlZFBheW1lbnQCCQEBQQEFAUQFAUUFA25pbAMJAAACBQFGBQFGBQNuaWwJAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4BAUcDAUMBRAFFBAFICQD8BwQJAQdBZGRyZXNzAQkA2QQBBQFDAghleGNoYW5nZQkAzAgCAAEFA25pbAkAzAgCCQEPQXR0YWNoZWRQYXltZW50AgkBAUEBBQFEBQFFBQNuaWwDCQAAAgUBSAUBSAUDbmlsCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuAQFJBAFDAUQBRQFKBAFICQD8BwQJAQdBZGRyZXNzAQkA2QQBBQFDAgRzd2FwCQDMCAIFAUoJAMwIAgABBQNuaWwJAMwIAgkBD0F0dGFjaGVkUGF5bWVudAIJAQFBAQUBRAUBRQUDbmlsAwkAAAIFAUgFAUgFA25pbAkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgEBSwEBTAQBZgkA6QcBBQFMAwkAAQIFAWYCA0ludAQBTQUBZgUBTQAAEwFOAQFzAAMJAQIhPQIIBQFOBmNhbGxlcgUEdGhpcwkAAgECBHNlbGYJAMwIAgkBC1N0cmluZ0VudHJ5AgIHY3VycmVudAkA2AQBCAUBTg10cmFuc2FjdGlvbklkBQNuaWwBTgEBZQADCQECIT0CCAUBTgZjYWxsZXIFBHRoaXMJAAIBAgRzZWxmCQDMCAIJAQtEZWxldGVFbnRyeQECB2N1cnJlbnQFA25pbAFOAQJzZgEBTwMJAQIhPQIIBQFOBmNhbGxlcgUEdGhpcwkAAgECBHNlbGYJAMwIAgkBDEludGVnZXJFbnRyeQICA2ZlZQUBTwUDbmlsAU4BAWQAAwkBASEBCQEPY29udGFpbnNFbGVtZW50AgkAvAkCBQFjAgF8CQDYBAEICAUBTgZjYWxsZXIFYnl0ZXMJAAIBAgJ3bAQBUAQBZgkAnQgCBQR0aGlzAgdjdXJyZW50AwkAAQIFAWYCBlN0cmluZwQBUQUBZgkAAgECB2N1cnJlbnQCAAQBUgMJAAACCQCQAwEIBQFOCHBheW1lbnRzAAEJAJEDAggFAU4IcGF5bWVudHMAAAkAAgECEjEgcGF5bWVudCBleHBlY3RlZAMJAQIhPQIIBQFSB2Fzc2V0SWQFAWEJAAIBAgt3cm9uZyB0b2tlbgQBUwkA2AQBCAgFAU4GY2FsbGVyBWJ5dGVzBAFUBAFmCQCaCAIFBHRoaXMJAKwCAgIIZGVwb3NpdF8FAVMDCQABAgUBZgIDSW50BAFwBQFmBQFwAAAEAVUEAWYJAJoIAgUEdGhpcwINdG90YWxfZGVwb3NpdAMJAAECBQFmAgNJbnQEAXAFAWYFAXAAAAQBVgkAZAIFAVQIBQFSBmFtb3VudAkAzAgCCQEMSW50ZWdlckVudHJ5AgkArAICAghkZXBvc2l0XwUBUwUBVgkAzAgCCQEMSW50ZWdlckVudHJ5AgINdG90YWxfZGVwb3NpdAkAZAIFAVUIBQFSBmFtb3VudAUDbmlsAU4BAXcBAVcDCQECIT0CBQR0aGlzCAUBTgZjYWxsZXIJAAIBAgJ3bAQBUAQBZgkAnQgCBQR0aGlzAgdjdXJyZW50AwkAAQIFAWYCBlN0cmluZwQBUQUBZgkAAgECB2N1cnJlbnQCAAQBUwkA2AQBCAgFAU4GY2FsbGVyBWJ5dGVzBAFUBAFmCQCaCAIFBHRoaXMJAKwCAgIIZGVwb3NpdF8FAVMDCQABAgUBZgIDSW50BAFwBQFmBQFwAAADCQBmAgUBVwUBVAkAAgECBXcgPiBkBAFWCQBlAgUBVAUBVwMJAGYCAAAFAVYJAAIBAgl1bmRlcmZsb3cEAVUEAWYJAJoIAgUEdGhpcwINdG90YWxfZGVwb3NpdAMJAAECBQFmAgNJbnQEAXAFAWYFAXAAAAkAzAgCCQEMSW50ZWdlckVudHJ5AgkArAICAghkZXBvc2l0XwUBUwUBVgkAzAgCCQEMSW50ZWdlckVudHJ5AgINdG90YWxfZGVwb3NpdAkAZQIFAVUFAVcJAMwIAgkBDlNjcmlwdFRyYW5zZmVyAwgFAU4GY2FsbGVyBQFXBQFhBQNuaWwB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b3QgYWxsb3dlZCB0byBhcmIhBAJhbAkA8AcCBQR0aGlzBQJhZgMJAAACBQJhbAUCYWwEAmF3CQDwBwIFBHRoaXMFAmF1AwkAAAIFAmF3BQJhdwQCYW8JAPwHBAUCYWUCC3B1dE9uZVRrblYyCQDMCAIAAQkAzAgCBwUDbmlsCQDMCAIJAQ9BdHRhY2hlZFBheW1lbnQCBQJhZgkAaAIFAUUAwIQ9BQNuaWwDCQAAAgUCYW8FAmFvBAJhcAkA8AcCBQR0aGlzBQJhdgMJAAACBQJhcAUCYXAEAmFxCQD8BwQFAmFlAgtnZXRPbmVUa25WMgkAzAgCBQJhdAkAzAgCAAEFA25pbAkAzAgCCQEPQXR0YWNoZWRQYXltZW50AgUCYXYFAmFwBQNuaWwDCQAAAgUCYXEFAmFxBAJheAkAZQIJAPAHAgUEdGhpcwUCYXUFAmF3AwkAAAIFAmF4BQJheAQCYXMJAPwHBAUCYWoCBHN3YXAJAMwIAgUCYWMJAMwIAgABBQNuaWwJAMwIAgkBD0F0dGFjaGVkUGF5bWVudAIFAmF1BQJheAUDbmlsAwkAAAIFAmFzBQJhcwQCYXIJAPAHAgUEdGhpcwUCYWYDCQAAAgUCYXIFAmFyAwkAZwIFAmFsBQJhcgkAAgECE2FyYiBub3Qgc3VjY2Vzc2Z1bCEFA25pbAkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgFOAQdhcmJVU0RUAgJhYwFFBAJhZAIjM1A4S015QUpDUFdOY3llZHFybXlteGFl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qxDlBb4Btze0E871/oNWTcbB9LmeGtGidutsomByBAJhaQIjM1BHRkh6VkdUNE5UaWd3Q0tQMU5jd29Ya29kVlp3dkJ1dVUEAmFqCQERQGV4dHJOYXRpdmUoMTA2MikBBQJhaQMJAQIhPQIIBQFOBmNhbGxlcgUEdGhpcwkAAgECG3lvdSBhcmUgbm90IGFsbG93ZWQgdG8gYXJiIQQCYWwJAPAHAgUEdGhpcwUCYWYDCQAAAgUCYWwFAmFsBAJhRgkA8AcCBQR0aGlzBQJhRAMJAAACBQJhRgUCYUYEAmFtCQD8BwQFAmFqAgRzd2FwCQDMCAIFAmFjCQDMCAIAAQUDbmlsCQDMCAIJAQ9BdHRhY2hlZFBheW1lbnQCBQJhZgkAaAIFAUUAwIQ9BQNuaWwDCQAAAgUCYW0FAmFtBAJhRwkAZQIJAPAHAgUEdGhpcwUCYUQFAmFGAwkAAAIFAmFHBQJhRwQCYW8JAPwHBAUCYWUCCXB1dE9uZVRrbgkAzAgCAAEJAMwIAgcFA25pbAkAzAgCCQEPQXR0YWNoZWRQYXltZW50AgUCYUQFAmFHBQNuaWwDCQAAAgUCYW8FAmFvBAJhcAkA8AcCBQR0aGlzBQJhRQMJAAACBQJhcAUCYXAEAmFxCQD8BwQFAmFlAglnZXRPbmVUa24JAMwIAgUCYWcJAMwIAgABBQNuaWwJAMwIAgkBD0F0dGFjaGVkUGF5bWVudAIFAmFFBQJhcAUDbmlsAwkAAAIFAmFxBQJhcQQCYXIJAPAHAgUEdGhpcwUCYWYDCQAAAgUCYXIFAmFyAwkAZwIFAmFsBQJhcgkAAgECE2FyYiBub3Qgc3VjY2Vzc2Z1bCEFA25pbAkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRz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AgABCQDMCAIHBQNuaWwJAMwIAgkBD0F0dGFjaGVkUGF5bWVudAIFAmFNBQJhUAUDbmlsAwkAAAIFAmFvBQJhbwQCYXAJAPAHAgUEdGhpcwUCYU4DCQAAAgUCYXAFAmFwBAJhcQkA/AcEBQJhZQIJZ2V0T25lVGtuCQDMCAIFAmFJCQDMCAIAAQUDbmlsCQDMCAIJAQ9BdHRhY2hlZFBheW1lbnQCBQJhTgUCYXAFA25pbAMJAAACBQJhcQUCYXEEAmFyCQDwBwIFBHRoaXMFAmFMAwkAAAIFAmFyBQJhcgMJAGcCBQJhbAUCYXIJAAIBAhNhcmIgbm90IHN1Y2Nlc3NmdWwhBQNuaWwJAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4JAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4JAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4JAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4JAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4JAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4JAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4JAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4BTgEIYXJiUG9vbDIGAmFJAmFKAmFkAmFLAmFjAUUEAmFlCQERQGV4dHJOYXRpdmUoMTA2MikBBQJhZAQCYUwJANkEAQUCYUkEAmFNCQDZBAEFAmFKBAJhTgkA2QQBBQJhSwQCYWkCIzNQR0ZIelZHVDROVGlnd0NLUDFOY3dvWGtvZFZad3ZCdXVVBAJhagkBEUBleHRyTmF0aXZlKDEwNjIpAQUCYWkDCQECIT0CCAUBTgZjYWxsZXIFBHRoaXMJAAIBAht5b3UgYXJlIG5vdCBhbGxvd2VkIHRvIGFyYiEEAmFsCQDwBwIFBHRoaXMFAmFMAwkAAAIFAmFsBQJhbAQCYU8JAPAHAgUEdGhpcwUCYU0DCQAAAgUCYU8FAmFPBAJhbwkA/AcEBQJhZQIJcHV0T25lVGtuCQDMCAIAAQkAzAgCBwUDbmlsCQDMCAIJAQ9BdHRhY2hlZFBheW1lbnQCBQJhTAkAaAIFAUUAwIQ9BQNuaWwDCQAAAgUCYW8FAmFvBAJhcAkA8AcCBQR0aGlzBQJhTgMJAAACBQJhcAUCYXAEAmFxCQD8BwQFAmFlAglnZXRPbmVUa24JAMwIAgUCYUoJAMwIAgABBQNuaWwJAMwIAgkBD0F0dGFjaGVkUGF5bWVudAIFAmFOBQJhcAUDbmlsAwkAAAIFAmFxBQJhcQQCYVAJAGUCCQDwBwIFBHRoaXMFAmFNBQJhTwMJAAACBQJhUAUCYVAEAmFzCQD8BwQFAmFqAgRzd2FwCQDMCAIFAmFjCQDMCAIAAQUDbmlsCQDMCAIJAQ9BdHRhY2hlZFBheW1lbnQCBQJhTQUCYVAFA25pbAMJAAACBQJhcwUCYXMEAmFyCQDwBwIFBHRoaXMFAmFMAwkAAAIFAmFyBQJhcgMJAGcCBQJhbAUCYXIJAAIBAhNhcmIgbm90IHN1Y2Nlc3NmdWwhBQNuaWwJAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4JAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4JAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4JAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4JAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4JAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4JAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4JAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4BTgEJYXJiUG9vbFYyBgJhSQJhSgJhZAJhSwJhYwFFBAJhZQkBEUBleHRyTmF0aXZlKDEwNjIpAQUCYWQEAmFMCQDZBAEFAmFJBAJhTQkA2QQBBQJhSgQCYU4JANkEAQUCYUsEAmFpAiMzUEdGSHpWR1Q0TlRpZ3dDS1AxTmN3b1hrb2RWWnd2QnV1VQQCYWoJARFAZXh0ck5hdGl2ZSgxMDYyKQEFAmFpAwkBAiE9AggFAU4GY2FsbGVyBQR0aGlzCQACAQIbeW91IGFyZSBub3QgYWxsb3dlZCB0byBhcmIhBAJhbAkA8AcCBQR0aGlzBQJhTAMJAAACBQJhbAUCYWwEAmFPCQDwBwIFBHRoaXMFAmFNAwkAAAIFAmFPBQJhTwQCYW0JAPwHBAUCYWoCBHN3YXAJAMwIAgUCYWMJAMwIAgABBQNuaWwJAMwIAgkBD0F0dGFjaGVkUGF5bWVudAIFAmFMCQBoAgUBRQDAhD0FA25pbAMJAAACBQJhbQUCYW0EAmFQCQBlAgkA8AcCBQR0aGlzBQJhTQUCYU8DCQAAAgUCYVAFAmFQBAJhbwkA/AcEBQJhZQILcHV0T25lVGtuVjIJAMwIAgABCQDMCAIHBQNuaWwJAMwIAgkBD0F0dGFjaGVkUGF5bWVudAIFAmFNBQJhUAUDbmlsAwkAAAIFAmFvBQJhbwQCYXAJAPAHAgUEdGhpcwUCYU4DCQAAAgUCYXAFAmFwBAJhcQkA/AcEBQJhZQILZ2V0T25lVGtuVjIJAMwIAgUCYUkJAMwIAgABBQNuaWwJAMwIAgkBD0F0dGFjaGVkUGF5bWVudAIFAmFOBQJhcAUDbmlsAwkAAAIFAmFxBQJhcQQCYXIJAPAHAgUEdGhpcwUCYUwDCQAAAgUCYXIFAmFyAwkAZwIFAmFsBQJhcgkAAgECE2FyYiBub3Qgc3VjY2Vzc2Z1bCEFA25pbAkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgFOAQphcmJQb29sMlYyBgJhSQJhSgJhZAJhSwJhYwFFBAJhZQkBEUBleHRyTmF0aXZlKDEwNjIpAQUCYWQEAmFMCQDZBAEFAmFJBAJhTQkA2QQBBQJhSgQCYU4JANkEAQUCYUsEAmFpAiMzUEdGSHpWR1Q0TlRpZ3dDS1AxTmN3b1hrb2RWWnd2QnV1VQQCYWoJARFAZXh0ck5hdGl2ZSgxMDYyKQEFAmFpAwkBAiE9AggFAU4GY2FsbGVyBQR0aGlzCQACAQIbeW91IGFyZSBub3QgYWxsb3dlZCB0byBhcmIhBAJhbAkA8AcCBQR0aGlzBQJhTAMJAAACBQJhbAUCYWwEAmFPCQDwBwIFBHRoaXMFAmFNAwkAAAIFAmFPBQJhTwQCYW8JAPwHBAUCYWUCC3B1dE9uZVRrblYyCQDMCAIAAQkAzAgCBwUDbmlsCQDMCAIJAQ9BdHRhY2hlZFBheW1lbnQCBQJhTAkAaAIFAUUAwIQ9BQNuaWwDCQAAAgUCYW8FAmFvBAJhcAkA8AcCBQR0aGlzBQJhTgMJAAACBQJhcAUCYXAEAmFxCQD8BwQFAmFlAgtnZXRPbmVUa25WMgkAzAgCBQJhSgkAzAgCAAEFA25pbAkAzAgCCQEPQXR0YWNoZWRQYXltZW50AgUCYU4FAmFwBQNuaWwDCQAAAgUCYXEFAmFxBAJhUAkAZQIJAPAHAgUEdGhpcwUCYU0FAmFPAwkAAAIFAmFQBQJhUAQCYXMJAPwHBAUCYWoCBHN3YXAJAMwIAgUCYWMJAMwIAgABBQNuaWwJAMwIAgkBD0F0dGFjaGVkUGF5bWVudAIFAmFNBQJhUAUDbmlsAwkAAAIFAmFzBQJhcwQCYXIJAPAHAgUEdGhpcwUCYUwDCQAAAgUCYXIFAmFyAwkAZwIFAmFsBQJhcgkAAgECE2FyYiBub3Qgc3VjY2Vzc2Z1bCEFA25pbAkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgFOAQF5AQFuAwkBAiE9AggFAU4GY2FsbGVyBQR0aGlzCQACAQIbeW91IGFyZSBub3QgYWxsb3dlZCB0byBhcmIhBAJhUQkAvAkCBQFuAgF8BAJhUgkBAW0BCQCRAwIFAmFRAAAEAXAIBQJhUgJfMQQBcQgFAmFSAl8yBAFyCAUCYVICXzMEAXQIBQJhUgJfNAQCYVMJAQF1AQkAkQMCBQJhUQABBAF2CAUCYVMCXzEEAmFUCAUCYVMCXzIEAmFVCQEBdQEJAJEDAgUCYVEAAgQCYVYIBQJhVQJfMQQCYVcIBQJhVQJfMgQCYVgJAQF1AQkAkQMCBQJhUQADBAJhWQgFAmFYAl8xBAJhWggFAmFYAl8yBAJiYQMJAGYCCQCxAgEJAJEDAgUCYVEABAABCQC8CQIJAJEDAgUCYVEABAIBLQUDbmlsAwMDCQBmAgkAkAMBBQJiYQAACQBmAgkBAUsBCQDZBAEJAJEDAgUCYmEAAAAABwYJAGcCAAEJALECAQkAkQMCBQJhUQAEBAJiYgkBAWoBCQEBQQEFAXIDCQAAAgUCYmIFAmJiBAJiYwkBC3ZhbHVlT3JFbHNlAgkAmggCBQR0aGlzAgZ1bGltaXQAZAQCYmQDCQBmAgkAkAMBBQJiYQAACQBrAwUCYmIFAmJjAGQFAmJiBAJiZQMJAGYCCQEFdmFsdWUBCQC2CQEFAXQFAmJkBQJiZAkBBXZhbHVlAQkAtgkBBQF0AwkAAAIFAmJlBQJiZQQCYmYJAQFqAQkBAUEBBQFwAwkAAAIFAmJmBQJiZgQCYmcDCQAAAgUCYVQCAVcJAQFCBAUBdgUBcgUCYmUFAXADCQAAAgUCYVQCAVMJAQFHAwUBdgUBcgUCYmUJAQFJBAUBdgUBcgUCYmUFAXADCQAAAgUCYmcFAmJnBAJiaAkAZQIJAQFqAQkBAUEBBQFwBQJiZgMJAAACBQJiaAUCYmgEAmJpCQEBagEJAQFBAQUBcQMJAAACBQJiaQUCYmkEAmJqAwkAAAIFAmFXAgFXCQEBQgQFAmFWBQFwBQJiaAUBcQMJAAACBQJhVwIBUwkBAUcDBQJhVgUBcAUCYmgJAQFJBAUCYVYFAXAFAmJoBQFxAwkAAAIFAmJqBQJiagQCYmsJAGUCCQEBagEJAQFBAQUBcQUCYmkDCQAAAgUCYmsFAmJrBAJibAkBAWoBCQEBQQEFAXIDCQAAAgUCYmwFAmJsBAJibQMJAAACBQJhWgIBVwkBAUIEBQJhWQUBcQUCYmsFAXIDCQAAAgUCYVoCAVMJAQFHAwUCYVkFAXEFAmJrCQEBSQQFAmFZBQFxBQJiawUBcgMJAAACBQJibQUCYm0EAmJuCQBlAgkBAWoBCQEBQQEFAXIFAmJsAwkAAAIFAmJuBQJibgQCYm8JAQt2YWx1ZU9yRWxzZQIJAJoIAgUEdGhpcwIIdHJlc2hvbGQA8JMJAwkAZgIFAmJuCQBkAgUCYmUFAmJvBQNuaWwJAAIBCQCsAgIJAKwCAgkArAICCQCsAgIJAKwCAgkArAICCQCsAgIJAKwCAgkArAICAhJvcmlnaW4gYW1vdW50SW4gPSAFAXQCESwgbmV3X2Ftb3VudEluID0gCQCkAwEFAmJlAgwsIG5ld0JhbF8xOiAJAKQDAQUCYmgCDCwgbmV3QmFsXzI6IAkApAMBBQJiawIMLCBuZXdCYWxfMzogCQCkAwEFAmJuCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuBQNuaWwBAmJwAQJicQAJAPQDAwgFAmJwCWJvZHlCeXRlcwkAkQMCCAUCYnAGcHJvb2ZzAAAIBQJicA9zZW5kZXJQdWJsaWNLZXkTiASb", "height": 3633318, "applicationStatus": "succeeded", "spentComplexity": 0 } View: original | compacted Prev: Gn1M8ymzZXpw4zWrGrop17rJzZofbJRFVAMnehTBjQfZ Next: GnP1mnZhHuB4famGD2RfhVUHoyRK1mq2a8h7jTReEaw2 Diff:
OldNewDifferences
1111 case _ =>
1212 ""
1313 }
14-
15-let w2 = match getString(this, "w2") {
16- case r: String =>
17- r
18- case _ =>
19- ""
20-}
21-
22-let USDN_ASSET_ID = base58'DG2xFkPdDwKUoBkzGAhQtLpSGzfXLiCYPEzeKH2Ad24p'
2314
2415 let WX_SWAP_DAPP = Address(base58'3P68zNiufsu1viZpu1aY3cdahRRKcvV5N93')
2516
Full:
OldNewDifferences
11 {-# STDLIB_VERSION 6 #-}
22 {-# SCRIPT_TYPE ACCOUNT #-}
33 {-# CONTENT_TYPE DAPP #-}
44 let TOKEN = base58'DG2xFkPdDwKUoBkzGAhQtLpSGzfXLiCYPEzeKH2Ad24p'
55
66 let fee_scale = 1000000
77
88 let w1 = match getString(this, "w1") {
99 case r: String =>
1010 r
1111 case _ =>
1212 ""
1313 }
14-
15-let w2 = match getString(this, "w2") {
16- case r: String =>
17- r
18- case _ =>
19- ""
20-}
21-
22-let USDN_ASSET_ID = base58'DG2xFkPdDwKUoBkzGAhQtLpSGzfXLiCYPEzeKH2Ad24p'
2314
2415 let WX_SWAP_DAPP = Address(base58'3P68zNiufsu1viZpu1aY3cdahRRKcvV5N93')
2516
2617 let assets_in = ["DG2xFkPdDwKUoBkzGAhQtLpSGzfXLiCYPEzeKH2Ad24p"]
2718
2819 func getBalance (assetId) = match assetId {
2920 case b: ByteVector =>
3021 assetBalance(this, b)
3122 case _ =>
3223 wavesBalance(this).available
3324 }
3425
3526
3627 func getBase1 (data) = {
3728 let p_data = split_4C(data, "_")
3829 let a = p_data[0]
3930 let a2 = p_data[1]
4031 let assetIn = assets_in[value(parseInt(p_data[2]))]
4132 let amountIn = p_data[3]
4233 $Tuple4(a, a2, assetIn, amountIn)
4334 }
4435
4536
4637 func getBase2 (data) = {
4738 let p_data = split(data, "_")
4839 let p1 = p_data[0]
4940 let t = p_data[1]
5041 $Tuple2(p1, t)
5142 }
5243
5344
5445 func getAssetBytes (assetId) = if ((assetId == "WAVES"))
5546 then unit
5647 else fromBase58String(assetId)
5748
5849
5950 func swap_wx (p,asset,amount,a) = {
6051 let call = invoke(WX_SWAP_DAPP, "swap", [1, a, toString(this)], [AttachedPayment(getAssetBytes(asset), amount)])
6152 if ((call == call))
6253 then nil
6354 else throw("Strict value is not equal to itself.")
6455 }
6556
6657
6758 func swap_swop (p,asset,amount) = {
6859 let swap = invoke(Address(fromBase58String(p)), "exchange", [1], [AttachedPayment(getAssetBytes(asset), amount)])
6960 if ((swap == swap))
7061 then nil
7162 else throw("Strict value is not equal to itself.")
7263 }
7364
7465
7566 func swap_puzzle (p,asset,amount,assetOut) = {
7667 let swap = invoke(Address(fromBase58String(p)), "swap", [assetOut, 1], [AttachedPayment(getAssetBytes(asset), amount)])
7768 if ((swap == swap))
7869 then nil
7970 else throw("Strict value is not equal to itself.")
8071 }
8172
8273
8374 func ucheck (id) = match transactionHeightById(id) {
8475 case h: Int =>
8576 h
8677 case _ =>
8778 0
8879 }
8980
9081
9182 @Callable(i)
9283 func s () = if ((i.caller != this))
9384 then throw("self")
9485 else [StringEntry("current", toBase58String(i.transactionId))]
9586
9687
9788
9889 @Callable(i)
9990 func e () = if ((i.caller != this))
10091 then throw("self")
10192 else [DeleteEntry("current")]
10293
10394
10495
10596 @Callable(i)
10697 func sf (fee) = if ((i.caller != this))
10798 then throw("self")
10899 else [IntegerEntry("fee", fee)]
109100
110101
111102
112103 @Callable(i)
113104 func d () = if (!(containsElement(split_4C(w1, "|"), toBase58String(i.caller.bytes))))
114105 then throw("wl")
115106 else {
116107 let current = match getString(this, "current") {
117108 case ret: String =>
118109 throw("current")
119110 case _ =>
120111 ""
121112 }
122113 let pmt = if ((size(i.payments) == 1))
123114 then i.payments[0]
124115 else throw("1 payment expected")
125116 if ((pmt.assetId != TOKEN))
126117 then throw("wrong token")
127118 else {
128119 let caller = toBase58String(i.caller.bytes)
129120 let currentAmount = match getInteger(this, ("deposit_" + caller)) {
130121 case a: Int =>
131122 a
132123 case _ =>
133124 0
134125 }
135126 let totalDeposit = match getInteger(this, "total_deposit") {
136127 case a: Int =>
137128 a
138129 case _ =>
139130 0
140131 }
141132 let newAmount = (currentAmount + pmt.amount)
142133 [IntegerEntry(("deposit_" + caller), newAmount), IntegerEntry("total_deposit", (totalDeposit + pmt.amount))]
143134 }
144135 }
145136
146137
147138
148139 @Callable(i)
149140 func w (amnt) = if ((this != i.caller))
150141 then throw("wl")
151142 else {
152143 let current = match getString(this, "current") {
153144 case ret: String =>
154145 throw("current")
155146 case _ =>
156147 ""
157148 }
158149 let caller = toBase58String(i.caller.bytes)
159150 let currentAmount = match getInteger(this, ("deposit_" + caller)) {
160151 case a: Int =>
161152 a
162153 case _ =>
163154 0
164155 }
165156 if ((amnt > currentAmount))
166157 then throw("w > d")
167158 else {
168159 let newAmount = (currentAmount - amnt)
169160 if ((0 > newAmount))
170161 then throw("underflow")
171162 else {
172163 let totalDeposit = match getInteger(this, "total_deposit") {
173164 case a: Int =>
174165 a
175166 case _ =>
176167 0
177168 }
178169 [IntegerEntry(("deposit_" + caller), newAmount), IntegerEntry("total_deposit", (totalDeposit - amnt)), ScriptTransfer(i.caller, amnt, TOKEN)]
179170 }
180171 }
181172 }
182173
183174
184175
185176 @Callable(i)
186177 func x (amnt,a,f,data) = if ((this != i.caller))
187178 then throw("wl")
188179 else {
189180 let st = assetBalance(this, TOKEN)
190181 if ((st == st))
191182 then {
192183 let ii = reentrantInvoke(addressFromStringValue(a), f, [data], [AttachedPayment(TOKEN, amnt)])
193184 if ((ii == ii))
194185 then {
195186 let et = assetBalance(this, TOKEN)
196187 if ((et == et))
197188 then {
198189 let fee_r = match getInteger(this, "fee") {
199190 case ret: Int =>
200191 ret
201192 case _ =>
202193 0
203194 }
204195 let fee = fraction(st, fee_r, fee_scale, DOWN)
205196 if (((st + fee) > et))
206197 then throw(("! " + toString((st + fee))))
207198 else nil
208199 }
209200 else throw("Strict value is not equal to itself.")
210201 }
211202 else throw("Strict value is not equal to itself.")
212203 }
213204 else throw("Strict value is not equal to itself.")
214205 }
215206
216207
217208
218209 @Callable(i)
219210 func arbWaves (path,amount) = {
220211 let poolAddress = "3PPZWgFNRKHLvM51pwS934C8VZ7d2F4Z58g"
221212 let pool = addressFromStringValue(poolAddress)
222213 let usdnAssetId = base58'DG2xFkPdDwKUoBkzGAhQtLpSGzfXLiCYPEzeKH2Ad24p'
223214 let usdnAssetIdString = "DG2xFkPdDwKUoBkzGAhQtLpSGzfXLiCYPEzeKH2Ad24p"
224215 let usdnWavesLPTokenAssetId = base58'7KZbJrVopwJhkdwbe1eFDBbex4dkY63MxjTNjqXtrzj1'
225216 let puzzlePoolAddress = "3PGFHzVGT4NTigwCKP1NcwoXkodVZwvBuuU"
226217 let puzzlePool = addressFromStringValue(puzzlePoolAddress)
227218 if ((i.caller != this))
228219 then throw("you are not allowed to arb!")
229220 else {
230221 let initialWavesBalance = wavesBalance(this).available
231222 if ((initialWavesBalance == initialWavesBalance))
232223 then {
233224 let initialAmount = assetBalance(this, usdnAssetId)
234225 if ((initialAmount == initialAmount))
235226 then {
236227 let buyOnPuzzle = invoke(puzzlePool, "swap", [path, 1], [AttachedPayment(usdnAssetId, (amount * 1000000))])
237228 if ((buyOnPuzzle == buyOnPuzzle))
238229 then {
239230 let wavesTokenBalance = (wavesBalance(this).available - initialWavesBalance)
240231 if ((wavesTokenBalance == wavesTokenBalance))
241232 then {
242233 let putTheTokenInThePool = invoke(pool, "putOneTkn", [1, false], [AttachedPayment(unit, wavesTokenBalance)])
243234 if ((putTheTokenInThePool == putTheTokenInThePool))
244235 then {
245236 let lpTokenBalance = assetBalance(this, usdnWavesLPTokenAssetId)
246237 if ((lpTokenBalance == lpTokenBalance))
247238 then {
248239 let sellPoolToken = invoke(pool, "getOneTkn", [usdnAssetIdString, 1], [AttachedPayment(usdnWavesLPTokenAssetId, lpTokenBalance)])
249240 if ((sellPoolToken == sellPoolToken))
250241 then {
251242 let finalAmount = assetBalance(this, usdnAssetId)
252243 if ((finalAmount == finalAmount))
253244 then if ((initialAmount >= finalAmount))
254245 then throw("arb not successful!")
255246 else nil
256247 else throw("Strict value is not equal to itself.")
257248 }
258249 else throw("Strict value is not equal to itself.")
259250 }
260251 else throw("Strict value is not equal to itself.")
261252 }
262253 else throw("Strict value is not equal to itself.")
263254 }
264255 else throw("Strict value is not equal to itself.")
265256 }
266257 else throw("Strict value is not equal to itself.")
267258 }
268259 else throw("Strict value is not equal to itself.")
269260 }
270261 else throw("Strict value is not equal to itself.")
271262 }
272263 }
273264
274265
275266
276267 @Callable(i)
277268 func arbWaves2 (path,amount) = {
278269 let poolAddress = "3PPZWgFNRKHLvM51pwS934C8VZ7d2F4Z58g"
279270 let pool = addressFromStringValue(poolAddress)
280271 let usdnAssetId = base58'DG2xFkPdDwKUoBkzGAhQtLpSGzfXLiCYPEzeKH2Ad24p'
281272 let usdnAssetIdString = "DG2xFkPdDwKUoBkzGAhQtLpSGzfXLiCYPEzeKH2Ad24p"
282273 let usdnWavesLPTokenAssetId = base58'7KZbJrVopwJhkdwbe1eFDBbex4dkY63MxjTNjqXtrzj1'
283274 let puzzlePoolAddress = "3PGFHzVGT4NTigwCKP1NcwoXkodVZwvBuuU"
284275 let puzzlePool = addressFromStringValue(puzzlePoolAddress)
285276 if ((i.caller != this))
286277 then throw("you are not allowed to arb!")
287278 else {
288279 let initialWavesBalance = wavesBalance(this).available
289280 if ((initialWavesBalance == initialWavesBalance))
290281 then {
291282 let initialAmount = assetBalance(this, usdnAssetId)
292283 if ((initialAmount == initialAmount))
293284 then {
294285 let putTheTokenInThePool = invoke(pool, "putOneTkn", [1, false], [AttachedPayment(usdnAssetId, (amount * 1000000))])
295286 if ((putTheTokenInThePool == putTheTokenInThePool))
296287 then {
297288 let lpTokenBalance = assetBalance(this, usdnWavesLPTokenAssetId)
298289 if ((lpTokenBalance == lpTokenBalance))
299290 then {
300291 let sellPoolToken = invoke(pool, "getOneTkn", ["WAVES", 1], [AttachedPayment(usdnWavesLPTokenAssetId, lpTokenBalance)])
301292 if ((sellPoolToken == sellPoolToken))
302293 then {
303294 let wavesTokenBalance = (wavesBalance(this).available - initialWavesBalance)
304295 if ((wavesTokenBalance == wavesTokenBalance))
305296 then {
306297 let sellOnPuzzle = invoke(puzzlePool, "swap", [path, 1], [AttachedPayment(unit, wavesTokenBalance)])
307298 if ((sellOnPuzzle == sellOnPuzzle))
308299 then {
309300 let finalAmount = assetBalance(this, usdnAssetId)
310301 if ((finalAmount == finalAmount))
311302 then if ((initialAmount >= finalAmount))
312303 then throw("arb not successful!")
313304 else nil
314305 else throw("Strict value is not equal to itself.")
315306 }
316307 else throw("Strict value is not equal to itself.")
317308 }
318309 else throw("Strict value is not equal to itself.")
319310 }
320311 else throw("Strict value is not equal to itself.")
321312 }
322313 else throw("Strict value is not equal to itself.")
323314 }
324315 else throw("Strict value is not equal to itself.")
325316 }
326317 else throw("Strict value is not equal to itself.")
327318 }
328319 else throw("Strict value is not equal to itself.")
329320 }
330321 }
331322
332323
333324
334325 @Callable(i)
335326 func arbUSDC (path,amount) = {
336327 let poolAddress = "3PC3HtupBxBmy4WtZf1Tym1vrxg9MwbZRK1"
337328 let pool = addressFromStringValue(poolAddress)
338329 let usdnAssetId = base58'DG2xFkPdDwKUoBkzGAhQtLpSGzfXLiCYPEzeKH2Ad24p'
339330 let usdnAssetIdString = "DG2xFkPdDwKUoBkzGAhQtLpSGzfXLiCYPEzeKH2Ad24p"
340331 let usdcAssetIdString = "6XtHjpXbs9RRJP2Sr9GUyVqzACcby9TkThHXnjVC5CDJ"
341332 let usdcAssetId = base58'6XtHjpXbs9RRJP2Sr9GUyVqzACcby9TkThHXnjVC5CDJ'
342333 let usdnUsdcLPTokenAssetId = base58'EK6N7S38xbtBT3SxAqoGdDLCiX6rojX6G169CnSyuE5'
343334 let puzzlePoolAddress = "3PGFHzVGT4NTigwCKP1NcwoXkodVZwvBuuU"
344335 let puzzlePool = addressFromStringValue(puzzlePoolAddress)
345336 if ((i.caller != this))
346337 then throw("you are not allowed to arb!")
347338 else {
348339 let initialAmount = assetBalance(this, usdnAssetId)
349340 if ((initialAmount == initialAmount))
350341 then {
351342 let initialAmountUSDC = assetBalance(this, usdcAssetId)
352343 if ((initialAmountUSDC == initialAmountUSDC))
353344 then {
354345 let buyOnPuzzle = invoke(puzzlePool, "swap", [path, 1], [AttachedPayment(usdnAssetId, (amount * 1000000))])
355346 if ((buyOnPuzzle == buyOnPuzzle))
356347 then {
357348 let usdcTokenBalance = (assetBalance(this, usdcAssetId) - initialAmountUSDC)
358349 if ((usdcTokenBalance == usdcTokenBalance))
359350 then {
360351 let putTheTokenInThePool = invoke(pool, "putOneTknV2", [1, false], [AttachedPayment(usdcAssetId, usdcTokenBalance)])
361352 if ((putTheTokenInThePool == putTheTokenInThePool))
362353 then {
363354 let lpTokenBalance = assetBalance(this, usdnUsdcLPTokenAssetId)
364355 if ((lpTokenBalance == lpTokenBalance))
365356 then {
366357 let sellPoolToken = invoke(pool, "getOneTknV2", [usdnAssetIdString, 1], [AttachedPayment(usdnUsdcLPTokenAssetId, lpTokenBalance)])
367358 if ((sellPoolToken == sellPoolToken))
368359 then {
369360 let finalAmount = assetBalance(this, usdnAssetId)
370361 if ((finalAmount == finalAmount))
371362 then if ((initialAmount >= finalAmount))
372363 then throw("arb not successful!")
373364 else nil
374365 else throw("Strict value is not equal to itself.")
375366 }
376367 else throw("Strict value is not equal to itself.")
377368 }
378369 else throw("Strict value is not equal to itself.")
379370 }
380371 else throw("Strict value is not equal to itself.")
381372 }
382373 else throw("Strict value is not equal to itself.")
383374 }
384375 else throw("Strict value is not equal to itself.")
385376 }
386377 else throw("Strict value is not equal to itself.")
387378 }
388379 else throw("Strict value is not equal to itself.")
389380 }
390381 }
391382
392383
393384
394385 @Callable(i)
395386 func arbUSDC2 (path,amount) = {
396387 let poolAddress = "3PC3HtupBxBmy4WtZf1Tym1vrxg9MwbZRK1"
397388 let pool = addressFromStringValue(poolAddress)
398389 let usdnAssetId = base58'DG2xFkPdDwKUoBkzGAhQtLpSGzfXLiCYPEzeKH2Ad24p'
399390 let usdnAssetIdString = "DG2xFkPdDwKUoBkzGAhQtLpSGzfXLiCYPEzeKH2Ad24p"
400391 let usdcAssetIdString = "6XtHjpXbs9RRJP2Sr9GUyVqzACcby9TkThHXnjVC5CDJ"
401392 let usdcAssetId = base58'6XtHjpXbs9RRJP2Sr9GUyVqzACcby9TkThHXnjVC5CDJ'
402393 let usdnUsdcLPTokenAssetId = base58'EK6N7S38xbtBT3SxAqoGdDLCiX6rojX6G169CnSyuE5'
403394 let puzzlePoolAddress = "3PGFHzVGT4NTigwCKP1NcwoXkodVZwvBuuU"
404395 let puzzlePool = addressFromStringValue(puzzlePoolAddress)
405396 if ((i.caller != this))
406397 then throw("you are not allowed to arb!")
407398 else {
408399 let initialAmount = assetBalance(this, usdnAssetId)
409400 if ((initialAmount == initialAmount))
410401 then {
411402 let initialAmountUSDC = assetBalance(this, usdcAssetId)
412403 if ((initialAmountUSDC == initialAmountUSDC))
413404 then {
414405 let putTheTokenInThePool = invoke(pool, "putOneTknV2", [1, false], [AttachedPayment(usdnAssetId, (amount * 1000000))])
415406 if ((putTheTokenInThePool == putTheTokenInThePool))
416407 then {
417408 let lpTokenBalance = assetBalance(this, usdnUsdcLPTokenAssetId)
418409 if ((lpTokenBalance == lpTokenBalance))
419410 then {
420411 let sellPoolToken = invoke(pool, "getOneTknV2", [usdcAssetIdString, 1], [AttachedPayment(usdnUsdcLPTokenAssetId, lpTokenBalance)])
421412 if ((sellPoolToken == sellPoolToken))
422413 then {
423414 let usdcTokenBalance = (assetBalance(this, usdcAssetId) - initialAmountUSDC)
424415 if ((usdcTokenBalance == usdcTokenBalance))
425416 then {
426417 let sellOnPuzzle = invoke(puzzlePool, "swap", [path, 1], [AttachedPayment(usdcAssetId, usdcTokenBalance)])
427418 if ((sellOnPuzzle == sellOnPuzzle))
428419 then {
429420 let finalAmount = assetBalance(this, usdnAssetId)
430421 if ((finalAmount == finalAmount))
431422 then if ((initialAmount >= finalAmount))
432423 then throw("arb not successful!")
433424 else nil
434425 else throw("Strict value is not equal to itself.")
435426 }
436427 else throw("Strict value is not equal to itself.")
437428 }
438429 else throw("Strict value is not equal to itself.")
439430 }
440431 else throw("Strict value is not equal to itself.")
441432 }
442433 else throw("Strict value is not equal to itself.")
443434 }
444435 else throw("Strict value is not equal to itself.")
445436 }
446437 else throw("Strict value is not equal to itself.")
447438 }
448439 else throw("Strict value is not equal to itself.")
449440 }
450441 }
451442
452443
453444
454445 @Callable(i)
455446 func arbUSDT (path,amount) = {
456447 let poolAddress = "3P8KMyAJCPWNcyedqrmymxaeWonvmkhGauz"
457448 let pool = addressFromStringValue(poolAddress)
458449 let usdnAssetId = base58'DG2xFkPdDwKUoBkzGAhQtLpSGzfXLiCYPEzeKH2Ad24p'
459450 let usdnAssetIdString = "DG2xFkPdDwKUoBkzGAhQtLpSGzfXLiCYPEzeKH2Ad24p"
460451 let usdtAssetIdString = "34N9YcEETLWn93qYQ64EsP1x89tSruJU44RrEMSXXEPJ"
461452 let usdtAssetId = base58'34N9YcEETLWn93qYQ64EsP1x89tSruJU44RrEMSXXEPJ'
462453 let usdnUsdtLPTokenAssetId = base58'97zHFp1C3cB7qfvx8Xv5f2rWp9nUSG5UnAamfPcW6txf'
463454 let puzzlePoolAddress = "3PGFHzVGT4NTigwCKP1NcwoXkodVZwvBuuU"
464455 let puzzlePool = addressFromStringValue(puzzlePoolAddress)
465456 if ((i.caller != this))
466457 then throw("you are not allowed to arb!")
467458 else {
468459 let initialAmount = assetBalance(this, usdnAssetId)
469460 if ((initialAmount == initialAmount))
470461 then {
471462 let initialAmountUSDT = assetBalance(this, usdtAssetId)
472463 if ((initialAmountUSDT == initialAmountUSDT))
473464 then {
474465 let buyOnPuzzle = invoke(puzzlePool, "swap", [path, 1], [AttachedPayment(usdnAssetId, (amount * 1000000))])
475466 if ((buyOnPuzzle == buyOnPuzzle))
476467 then {
477468 let usdtTokenBalance = (assetBalance(this, usdtAssetId) - initialAmountUSDT)
478469 if ((usdtTokenBalance == usdtTokenBalance))
479470 then {
480471 let putTheTokenInThePool = invoke(pool, "putOneTknV2", [1, false], [AttachedPayment(usdtAssetId, usdtTokenBalance)])
481472 if ((putTheTokenInThePool == putTheTokenInThePool))
482473 then {
483474 let lpTokenBalance = assetBalance(this, usdnUsdtLPTokenAssetId)
484475 if ((lpTokenBalance == lpTokenBalance))
485476 then {
486477 let sellPoolToken = invoke(pool, "getOneTknV2", [usdnAssetIdString, 1], [AttachedPayment(usdnUsdtLPTokenAssetId, lpTokenBalance)])
487478 if ((sellPoolToken == sellPoolToken))
488479 then {
489480 let finalAmount = assetBalance(this, usdnAssetId)
490481 if ((finalAmount == finalAmount))
491482 then if ((initialAmount >= finalAmount))
492483 then throw("arb not successful!")
493484 else nil
494485 else throw("Strict value is not equal to itself.")
495486 }
496487 else throw("Strict value is not equal to itself.")
497488 }
498489 else throw("Strict value is not equal to itself.")
499490 }
500491 else throw("Strict value is not equal to itself.")
501492 }
502493 else throw("Strict value is not equal to itself.")
503494 }
504495 else throw("Strict value is not equal to itself.")
505496 }
506497 else throw("Strict value is not equal to itself.")
507498 }
508499 else throw("Strict value is not equal to itself.")
509500 }
510501 }
511502
512503
513504
514505 @Callable(i)
515506 func arbUSDT2 (path,amount) = {
516507 let poolAddress = "3P8KMyAJCPWNcyedqrmymxaeWonvmkhGauz"
517508 let pool = addressFromStringValue(poolAddress)
518509 let usdnAssetId = base58'DG2xFkPdDwKUoBkzGAhQtLpSGzfXLiCYPEzeKH2Ad24p'
519510 let usdnAssetIdString = "DG2xFkPdDwKUoBkzGAhQtLpSGzfXLiCYPEzeKH2Ad24p"
520511 let usdtAssetIdString = "34N9YcEETLWn93qYQ64EsP1x89tSruJU44RrEMSXXEPJ"
521512 let usdtAssetId = base58'34N9YcEETLWn93qYQ64EsP1x89tSruJU44RrEMSXXEPJ'
522513 let usdnUsdtLPTokenAssetId = base58'97zHFp1C3cB7qfvx8Xv5f2rWp9nUSG5UnAamfPcW6txf'
523514 let puzzlePoolAddress = "3PGFHzVGT4NTigwCKP1NcwoXkodVZwvBuuU"
524515 let puzzlePool = addressFromStringValue(puzzlePoolAddress)
525516 if ((i.caller != this))
526517 then throw("you are not allowed to arb!")
527518 else {
528519 let initialAmount = assetBalance(this, usdnAssetId)
529520 if ((initialAmount == initialAmount))
530521 then {
531522 let initialAmountUSDT = assetBalance(this, usdtAssetId)
532523 if ((initialAmountUSDT == initialAmountUSDT))
533524 then {
534525 let putTheTokenInThePool = invoke(pool, "putOneTknV2", [1, false], [AttachedPayment(usdnAssetId, (amount * 1000000))])
535526 if ((putTheTokenInThePool == putTheTokenInThePool))
536527 then {
537528 let lpTokenBalance = assetBalance(this, usdnUsdtLPTokenAssetId)
538529 if ((lpTokenBalance == lpTokenBalance))
539530 then {
540531 let sellPoolToken = invoke(pool, "getOneTknV2", [usdtAssetIdString, 1], [AttachedPayment(usdnUsdtLPTokenAssetId, lpTokenBalance)])
541532 if ((sellPoolToken == sellPoolToken))
542533 then {
543534 let usdtTokenBalance = (assetBalance(this, usdtAssetId) - initialAmountUSDT)
544535 if ((usdtTokenBalance == usdtTokenBalance))
545536 then {
546537 let sellOnPuzzle = invoke(puzzlePool, "swap", [path, 1], [AttachedPayment(usdtAssetId, usdtTokenBalance)])
547538 if ((sellOnPuzzle == sellOnPuzzle))
548539 then {
549540 let finalAmount = assetBalance(this, usdnAssetId)
550541 if ((finalAmount == finalAmount))
551542 then if ((initialAmount >= finalAmount))
552543 then throw("arb not successful!")
553544 else nil
554545 else throw("Strict value is not equal to itself.")
555546 }
556547 else throw("Strict value is not equal to itself.")
557548 }
558549 else throw("Strict value is not equal to itself.")
559550 }
560551 else throw("Strict value is not equal to itself.")
561552 }
562553 else throw("Strict value is not equal to itself.")
563554 }
564555 else throw("Strict value is not equal to itself.")
565556 }
566557 else throw("Strict value is not equal to itself.")
567558 }
568559 else throw("Strict value is not equal to itself.")
569560 }
570561 }
571562
572563
573564
574565 @Callable(i)
575566 func arbTSN (path,amount) = {
576567 let poolAddress = "3PH832eKnw67PFvJfUg9Knz6BHM87QvjMeL"
577568 let pool = addressFromStringValue(poolAddress)
578569 let usdnAssetId = base58'DG2xFkPdDwKUoBkzGAhQtLpSGzfXLiCYPEzeKH2Ad24p'
579570 let usdnAssetIdString = "DG2xFkPdDwKUoBkzGAhQtLpSGzfXLiCYPEzeKH2Ad24p"
580571 let tsnAssetId = base58'8t4DPWTwPzpatHA9AkTxWAB47THnYzBsDnoY7fQqbG91'
581572 let usdnTsnLPTokenAssetId = base58'EbwpqrZjrvi7XLowkM5Z2rg7xVdzfg6S5ec9asarpAU9'
582573 let puzzlePoolAddress = "3PGFHzVGT4NTigwCKP1NcwoXkodVZwvBuuU"
583574 let puzzlePool = addressFromStringValue(puzzlePoolAddress)
584575 if ((i.caller != this))
585576 then throw("you are not allowed to arb!")
586577 else {
587578 let initialAmount = assetBalance(this, usdnAssetId)
588579 if ((initialAmount == initialAmount))
589580 then {
590581 let initialAmountTSN = assetBalance(this, tsnAssetId)
591582 if ((initialAmountTSN == initialAmountTSN))
592583 then {
593584 let buyOnPuzzle = invoke(puzzlePool, "swap", [path, 1], [AttachedPayment(usdnAssetId, (amount * 1000000))])
594585 if ((buyOnPuzzle == buyOnPuzzle))
595586 then {
596587 let tsnTokenBalance = (assetBalance(this, tsnAssetId) - initialAmountTSN)
597588 if ((tsnTokenBalance == tsnTokenBalance))
598589 then {
599590 let putTheTokenInThePool = invoke(pool, "putOneTkn", [1, false], [AttachedPayment(tsnAssetId, tsnTokenBalance)])
600591 if ((putTheTokenInThePool == putTheTokenInThePool))
601592 then {
602593 let lpTokenBalance = assetBalance(this, usdnTsnLPTokenAssetId)
603594 if ((lpTokenBalance == lpTokenBalance))
604595 then {
605596 let sellPoolToken = invoke(pool, "getOneTkn", [usdnAssetIdString, 1], [AttachedPayment(usdnTsnLPTokenAssetId, lpTokenBalance)])
606597 if ((sellPoolToken == sellPoolToken))
607598 then {
608599 let finalAmount = assetBalance(this, usdnAssetId)
609600 if ((finalAmount == finalAmount))
610601 then if ((initialAmount >= finalAmount))
611602 then throw("arb not successful!")
612603 else nil
613604 else throw("Strict value is not equal to itself.")
614605 }
615606 else throw("Strict value is not equal to itself.")
616607 }
617608 else throw("Strict value is not equal to itself.")
618609 }
619610 else throw("Strict value is not equal to itself.")
620611 }
621612 else throw("Strict value is not equal to itself.")
622613 }
623614 else throw("Strict value is not equal to itself.")
624615 }
625616 else throw("Strict value is not equal to itself.")
626617 }
627618 else throw("Strict value is not equal to itself.")
628619 }
629620 }
630621
631622
632623
633624 @Callable(i)
634625 func arbTSN2 (path,amount) = {
635626 let poolAddress = "3PH832eKnw67PFvJfUg9Knz6BHM87QvjMeL"
636627 let pool = addressFromStringValue(poolAddress)
637628 let usdnAssetId = base58'DG2xFkPdDwKUoBkzGAhQtLpSGzfXLiCYPEzeKH2Ad24p'
638629 let usdnAssetIdString = "DG2xFkPdDwKUoBkzGAhQtLpSGzfXLiCYPEzeKH2Ad24p"
639630 let tsnAssetId = base58'8t4DPWTwPzpatHA9AkTxWAB47THnYzBsDnoY7fQqbG91'
640631 let tsnAssetIdString = "8t4DPWTwPzpatHA9AkTxWAB47THnYzBsDnoY7fQqbG91"
641632 let usdnTsnLPTokenAssetId = base58'EbwpqrZjrvi7XLowkM5Z2rg7xVdzfg6S5ec9asarpAU9'
642633 let puzzlePoolAddress = "3PGFHzVGT4NTigwCKP1NcwoXkodVZwvBuuU"
643634 let puzzlePool = addressFromStringValue(puzzlePoolAddress)
644635 if ((i.caller != this))
645636 then throw("you are not allowed to arb!")
646637 else {
647638 let initialAmount = assetBalance(this, usdnAssetId)
648639 if ((initialAmount == initialAmount))
649640 then {
650641 let initialAmountTSN = assetBalance(this, tsnAssetId)
651642 if ((initialAmountTSN == initialAmountTSN))
652643 then {
653644 let putTheTokenInThePool = invoke(pool, "putOneTkn", [1, false], [AttachedPayment(usdnAssetId, (amount * 1000000))])
654645 if ((putTheTokenInThePool == putTheTokenInThePool))
655646 then {
656647 let lpTokenBalance = assetBalance(this, usdnTsnLPTokenAssetId)
657648 if ((lpTokenBalance == lpTokenBalance))
658649 then {
659650 let sellPoolToken = invoke(pool, "getOneTkn", [tsnAssetIdString, 1], [AttachedPayment(usdnTsnLPTokenAssetId, lpTokenBalance)])
660651 if ((sellPoolToken == sellPoolToken))
661652 then {
662653 let tsnTokenBalance = (assetBalance(this, tsnAssetId) - initialAmountTSN)
663654 if ((tsnTokenBalance == tsnTokenBalance))
664655 then {
665656 let sellOnPuzzle = invoke(puzzlePool, "swap", [path, 1], [AttachedPayment(tsnAssetId, tsnTokenBalance)])
666657 if ((sellOnPuzzle == sellOnPuzzle))
667658 then {
668659 let finalAmount = assetBalance(this, usdnAssetId)
669660 if ((finalAmount == finalAmount))
670661 then if ((initialAmount >= finalAmount))
671662 then throw("arb not successful!")
672663 else nil
673664 else throw("Strict value is not equal to itself.")
674665 }
675666 else throw("Strict value is not equal to itself.")
676667 }
677668 else throw("Strict value is not equal to itself.")
678669 }
679670 else throw("Strict value is not equal to itself.")
680671 }
681672 else throw("Strict value is not equal to itself.")
682673 }
683674 else throw("Strict value is not equal to itself.")
684675 }
685676 else throw("Strict value is not equal to itself.")
686677 }
687678 else throw("Strict value is not equal to itself.")
688679 }
689680 }
690681
691682
692683
693684 @Callable(i)
694685 func arbPool (firstAsset,secondAsset,poolAddress,lpToken,path,amount) = {
695686 let pool = addressFromStringValue(poolAddress)
696687 let firstAssetId = fromBase58String(firstAsset)
697688 let secondAssetId = fromBase58String(secondAsset)
698689 let lpTokenAssetId = fromBase58String(lpToken)
699690 let puzzlePoolAddress = "3PGFHzVGT4NTigwCKP1NcwoXkodVZwvBuuU"
700691 let puzzlePool = addressFromStringValue(puzzlePoolAddress)
701692 if ((i.caller != this))
702693 then throw("you are not allowed to arb!")
703694 else {
704695 let initialAmount = assetBalance(this, firstAssetId)
705696 if ((initialAmount == initialAmount))
706697 then {
707698 let initialAmountSecondAsset = assetBalance(this, secondAssetId)
708699 if ((initialAmountSecondAsset == initialAmountSecondAsset))
709700 then {
710701 let buyOnPuzzle = invoke(puzzlePool, "swap", [path, 1], [AttachedPayment(firstAssetId, (amount * 1000000))])
711702 if ((buyOnPuzzle == buyOnPuzzle))
712703 then {
713704 let secondTokenBalance = (assetBalance(this, secondAssetId) - initialAmountSecondAsset)
714705 if ((secondTokenBalance == secondTokenBalance))
715706 then {
716707 let putTheTokenInThePool = invoke(pool, "putOneTkn", [1, false], [AttachedPayment(secondAssetId, secondTokenBalance)])
717708 if ((putTheTokenInThePool == putTheTokenInThePool))
718709 then {
719710 let lpTokenBalance = assetBalance(this, lpTokenAssetId)
720711 if ((lpTokenBalance == lpTokenBalance))
721712 then {
722713 let sellPoolToken = invoke(pool, "getOneTkn", [firstAsset, 1], [AttachedPayment(lpTokenAssetId, lpTokenBalance)])
723714 if ((sellPoolToken == sellPoolToken))
724715 then {
725716 let finalAmount = assetBalance(this, firstAssetId)
726717 if ((finalAmount == finalAmount))
727718 then if ((initialAmount >= finalAmount))
728719 then throw("arb not successful!")
729720 else nil
730721 else throw("Strict value is not equal to itself.")
731722 }
732723 else throw("Strict value is not equal to itself.")
733724 }
734725 else throw("Strict value is not equal to itself.")
735726 }
736727 else throw("Strict value is not equal to itself.")
737728 }
738729 else throw("Strict value is not equal to itself.")
739730 }
740731 else throw("Strict value is not equal to itself.")
741732 }
742733 else throw("Strict value is not equal to itself.")
743734 }
744735 else throw("Strict value is not equal to itself.")
745736 }
746737 }
747738
748739
749740
750741 @Callable(i)
751742 func arbPool2 (firstAsset,secondAsset,poolAddress,lpToken,path,amount) = {
752743 let pool = addressFromStringValue(poolAddress)
753744 let firstAssetId = fromBase58String(firstAsset)
754745 let secondAssetId = fromBase58String(secondAsset)
755746 let lpTokenAssetId = fromBase58String(lpToken)
756747 let puzzlePoolAddress = "3PGFHzVGT4NTigwCKP1NcwoXkodVZwvBuuU"
757748 let puzzlePool = addressFromStringValue(puzzlePoolAddress)
758749 if ((i.caller != this))
759750 then throw("you are not allowed to arb!")
760751 else {
761752 let initialAmount = assetBalance(this, firstAssetId)
762753 if ((initialAmount == initialAmount))
763754 then {
764755 let initialAmountSecondAsset = assetBalance(this, secondAssetId)
765756 if ((initialAmountSecondAsset == initialAmountSecondAsset))
766757 then {
767758 let putTheTokenInThePool = invoke(pool, "putOneTkn", [1, false], [AttachedPayment(firstAssetId, (amount * 1000000))])
768759 if ((putTheTokenInThePool == putTheTokenInThePool))
769760 then {
770761 let lpTokenBalance = assetBalance(this, lpTokenAssetId)
771762 if ((lpTokenBalance == lpTokenBalance))
772763 then {
773764 let sellPoolToken = invoke(pool, "getOneTkn", [secondAsset, 1], [AttachedPayment(lpTokenAssetId, lpTokenBalance)])
774765 if ((sellPoolToken == sellPoolToken))
775766 then {
776767 let secondTokenBalance = (assetBalance(this, secondAssetId) - initialAmountSecondAsset)
777768 if ((secondTokenBalance == secondTokenBalance))
778769 then {
779770 let sellOnPuzzle = invoke(puzzlePool, "swap", [path, 1], [AttachedPayment(secondAssetId, secondTokenBalance)])
780771 if ((sellOnPuzzle == sellOnPuzzle))
781772 then {
782773 let finalAmount = assetBalance(this, firstAssetId)
783774 if ((finalAmount == finalAmount))
784775 then if ((initialAmount >= finalAmount))
785776 then throw("arb not successful!")
786777 else nil
787778 else throw("Strict value is not equal to itself.")
788779 }
789780 else throw("Strict value is not equal to itself.")
790781 }
791782 else throw("Strict value is not equal to itself.")
792783 }
793784 else throw("Strict value is not equal to itself.")
794785 }
795786 else throw("Strict value is not equal to itself.")
796787 }
797788 else throw("Strict value is not equal to itself.")
798789 }
799790 else throw("Strict value is not equal to itself.")
800791 }
801792 else throw("Strict value is not equal to itself.")
802793 }
803794 }
804795
805796
806797
807798 @Callable(i)
808799 func arbPoolV2 (firstAsset,secondAsset,poolAddress,lpToken,path,amount) = {
809800 let pool = addressFromStringValue(poolAddress)
810801 let firstAssetId = fromBase58String(firstAsset)
811802 let secondAssetId = fromBase58String(secondAsset)
812803 let lpTokenAssetId = fromBase58String(lpToken)
813804 let puzzlePoolAddress = "3PGFHzVGT4NTigwCKP1NcwoXkodVZwvBuuU"
814805 let puzzlePool = addressFromStringValue(puzzlePoolAddress)
815806 if ((i.caller != this))
816807 then throw("you are not allowed to arb!")
817808 else {
818809 let initialAmount = assetBalance(this, firstAssetId)
819810 if ((initialAmount == initialAmount))
820811 then {
821812 let initialAmountSecondAsset = assetBalance(this, secondAssetId)
822813 if ((initialAmountSecondAsset == initialAmountSecondAsset))
823814 then {
824815 let buyOnPuzzle = invoke(puzzlePool, "swap", [path, 1], [AttachedPayment(firstAssetId, (amount * 1000000))])
825816 if ((buyOnPuzzle == buyOnPuzzle))
826817 then {
827818 let secondTokenBalance = (assetBalance(this, secondAssetId) - initialAmountSecondAsset)
828819 if ((secondTokenBalance == secondTokenBalance))
829820 then {
830821 let putTheTokenInThePool = invoke(pool, "putOneTknV2", [1, false], [AttachedPayment(secondAssetId, secondTokenBalance)])
831822 if ((putTheTokenInThePool == putTheTokenInThePool))
832823 then {
833824 let lpTokenBalance = assetBalance(this, lpTokenAssetId)
834825 if ((lpTokenBalance == lpTokenBalance))
835826 then {
836827 let sellPoolToken = invoke(pool, "getOneTknV2", [firstAsset, 1], [AttachedPayment(lpTokenAssetId, lpTokenBalance)])
837828 if ((sellPoolToken == sellPoolToken))
838829 then {
839830 let finalAmount = assetBalance(this, firstAssetId)
840831 if ((finalAmount == finalAmount))
841832 then if ((initialAmount >= finalAmount))
842833 then throw("arb not successful!")
843834 else nil
844835 else throw("Strict value is not equal to itself.")
845836 }
846837 else throw("Strict value is not equal to itself.")
847838 }
848839 else throw("Strict value is not equal to itself.")
849840 }
850841 else throw("Strict value is not equal to itself.")
851842 }
852843 else throw("Strict value is not equal to itself.")
853844 }
854845 else throw("Strict value is not equal to itself.")
855846 }
856847 else throw("Strict value is not equal to itself.")
857848 }
858849 else throw("Strict value is not equal to itself.")
859850 }
860851 }
861852
862853
863854
864855 @Callable(i)
865856 func arbPool2V2 (firstAsset,secondAsset,poolAddress,lpToken,path,amount) = {
866857 let pool = addressFromStringValue(poolAddress)
867858 let firstAssetId = fromBase58String(firstAsset)
868859 let secondAssetId = fromBase58String(secondAsset)
869860 let lpTokenAssetId = fromBase58String(lpToken)
870861 let puzzlePoolAddress = "3PGFHzVGT4NTigwCKP1NcwoXkodVZwvBuuU"
871862 let puzzlePool = addressFromStringValue(puzzlePoolAddress)
872863 if ((i.caller != this))
873864 then throw("you are not allowed to arb!")
874865 else {
875866 let initialAmount = assetBalance(this, firstAssetId)
876867 if ((initialAmount == initialAmount))
877868 then {
878869 let initialAmountSecondAsset = assetBalance(this, secondAssetId)
879870 if ((initialAmountSecondAsset == initialAmountSecondAsset))
880871 then {
881872 let putTheTokenInThePool = invoke(pool, "putOneTknV2", [1, false], [AttachedPayment(firstAssetId, (amount * 1000000))])
882873 if ((putTheTokenInThePool == putTheTokenInThePool))
883874 then {
884875 let lpTokenBalance = assetBalance(this, lpTokenAssetId)
885876 if ((lpTokenBalance == lpTokenBalance))
886877 then {
887878 let sellPoolToken = invoke(pool, "getOneTknV2", [secondAsset, 1], [AttachedPayment(lpTokenAssetId, lpTokenBalance)])
888879 if ((sellPoolToken == sellPoolToken))
889880 then {
890881 let secondTokenBalance = (assetBalance(this, secondAssetId) - initialAmountSecondAsset)
891882 if ((secondTokenBalance == secondTokenBalance))
892883 then {
893884 let sellOnPuzzle = invoke(puzzlePool, "swap", [path, 1], [AttachedPayment(secondAssetId, secondTokenBalance)])
894885 if ((sellOnPuzzle == sellOnPuzzle))
895886 then {
896887 let finalAmount = assetBalance(this, firstAssetId)
897888 if ((finalAmount == finalAmount))
898889 then if ((initialAmount >= finalAmount))
899890 then throw("arb not successful!")
900891 else nil
901892 else throw("Strict value is not equal to itself.")
902893 }
903894 else throw("Strict value is not equal to itself.")
904895 }
905896 else throw("Strict value is not equal to itself.")
906897 }
907898 else throw("Strict value is not equal to itself.")
908899 }
909900 else throw("Strict value is not equal to itself.")
910901 }
911902 else throw("Strict value is not equal to itself.")
912903 }
913904 else throw("Strict value is not equal to itself.")
914905 }
915906 else throw("Strict value is not equal to itself.")
916907 }
917908 }
918909
919910
920911
921912 @Callable(i)
922913 func y (data) = if ((i.caller != this))
923914 then throw("you are not allowed to arb!")
924915 else {
925916 let data_array = split_4C(data, "|")
926917 let t030083064 = getBase1(data_array[0])
927918 let a = t030083064._1
928919 let a2 = t030083064._2
929920 let assetIn = t030083064._3
930921 let amountIn = t030083064._4
931922 let t030693107 = getBase2(data_array[1])
932923 let p1 = t030693107._1
933924 let t1 = t030693107._2
934925 let t031123150 = getBase2(data_array[2])
935926 let p2 = t031123150._1
936927 let t2 = t031123150._2
937928 let t031553193 = getBase2(data_array[3])
938929 let p3 = t031553193._1
939930 let t3 = t031553193._2
940931 let idu = if ((size(data_array[4]) > 1))
941932 then split_4C(data_array[4], "-")
942933 else nil
943934 if (if (if ((size(idu) > 0))
944935 then (ucheck(fromBase58String(idu[0])) > 0)
945936 else false)
946937 then true
947938 else (1 >= size(data_array[4])))
948939 then {
949940 let amount_bef_assetIn = getBalance(getAssetBytes(assetIn))
950941 if ((amount_bef_assetIn == amount_bef_assetIn))
951942 then {
952943 let ulimit = valueOrElse(getInteger(this, "ulimit"), 100)
953944 let max_amount = if ((size(idu) > 0))
954945 then fraction(amount_bef_assetIn, ulimit, 100)
955946 else amount_bef_assetIn
956947 let new_amountIn = if ((value(parseInt(amountIn)) > max_amount))
957948 then max_amount
958949 else value(parseInt(amountIn))
959950 if ((new_amountIn == new_amountIn))
960951 then {
961952 let amount_bef_asset1 = getBalance(getAssetBytes(a))
962953 if ((amount_bef_asset1 == amount_bef_asset1))
963954 then {
964955 let swap1 = if ((t1 == "W"))
965956 then swap_wx(p1, assetIn, new_amountIn, a)
966957 else if ((t1 == "S"))
967958 then swap_swop(p1, assetIn, new_amountIn)
968959 else swap_puzzle(p1, assetIn, new_amountIn, a)
969960 if ((swap1 == swap1))
970961 then {
971962 let nb = (getBalance(getAssetBytes(a)) - amount_bef_asset1)
972963 if ((nb == nb))
973964 then {
974965 let amount_bef_asset2 = getBalance(getAssetBytes(a2))
975966 if ((amount_bef_asset2 == amount_bef_asset2))
976967 then {
977968 let swap2 = if ((t2 == "W"))
978969 then swap_wx(p2, a, nb, a2)
979970 else if ((t2 == "S"))
980971 then swap_swop(p2, a, nb)
981972 else swap_puzzle(p2, a, nb, a2)
982973 if ((swap2 == swap2))
983974 then {
984975 let nb2 = (getBalance(getAssetBytes(a2)) - amount_bef_asset2)
985976 if ((nb2 == nb2))
986977 then {
987978 let amount_bef_base_asset = getBalance(getAssetBytes(assetIn))
988979 if ((amount_bef_base_asset == amount_bef_base_asset))
989980 then {
990981 let swap3 = if ((t3 == "W"))
991982 then swap_wx(p3, a2, nb2, assetIn)
992983 else if ((t3 == "S"))
993984 then swap_swop(p3, a2, nb2)
994985 else swap_puzzle(p3, a2, nb2, assetIn)
995986 if ((swap3 == swap3))
996987 then {
997988 let nb3 = (getBalance(getAssetBytes(assetIn)) - amount_bef_base_asset)
998989 if ((nb3 == nb3))
999990 then {
1000991 let treshold = valueOrElse(getInteger(this, "treshold"), 150000)
1001992 if ((nb3 > (new_amountIn + treshold)))
1002993 then nil
1003994 else throw(((((((((("origin amountIn = " + amountIn) + ", new_amountIn = ") + toString(new_amountIn)) + ", newBal_1: ") + toString(nb)) + ", newBal_2: ") + toString(nb2)) + ", newBal_3: ") + toString(nb3)))
1004995 }
1005996 else throw("Strict value is not equal to itself.")
1006997 }
1007998 else throw("Strict value is not equal to itself.")
1008999 }
10091000 else throw("Strict value is not equal to itself.")
10101001 }
10111002 else throw("Strict value is not equal to itself.")
10121003 }
10131004 else throw("Strict value is not equal to itself.")
10141005 }
10151006 else throw("Strict value is not equal to itself.")
10161007 }
10171008 else throw("Strict value is not equal to itself.")
10181009 }
10191010 else throw("Strict value is not equal to itself.")
10201011 }
10211012 else throw("Strict value is not equal to itself.")
10221013 }
10231014 else throw("Strict value is not equal to itself.")
10241015 }
10251016 else throw("Strict value is not equal to itself.")
10261017 }
10271018 else nil
10281019 }
10291020
10301021
10311022 @Verifier(tx)
10321023 func verify () = sigVerify(tx.bodyBytes, tx.proofs[0], tx.senderPublicKey)
10331024

github/deemru/w8io/3ef1775 
113.48 ms