tx · F6Ub6ZDdoMtUPcYvqsdNxW1MZfyqyFgy1eQjzHmJgtVo

3PGFHzVGT4NTigwCKP1NcwoXkodVZwvBuuU:  -0.05000000 Waves

2023.12.20 16:45 [3961026] smart account 3PGFHzVGT4NTigwCKP1NcwoXkodVZwvBuuU > SELF 0.00000000 Waves

{ "type": 13, "id": "F6Ub6ZDdoMtUPcYvqsdNxW1MZfyqyFgy1eQjzHmJgtVo", "fee": 5000000, "feeAssetId": null, "timestamp": 1703079941450, "version": 2, "chainId": 87, "sender": "3PGFHzVGT4NTigwCKP1NcwoXkodVZwvBuuU", "senderPublicKey": "Dmn1fWHxpwN789LPfoMHFj7uSYKSsb5VFfyNQyQ629f9", "proofs": [ "UbG3HJFxvtv7Lzc6WuRcTHpwG4T8RQuiGFDu4xggnEfAa8KfRkjD69DKLfiwTJ4gKZ7ZQtjSgpHjW7g5zE7qe1U" ], "script": "base64:BgIgCAISBAoCCAESBQoDCAEIEgQKAggIEgQKAggIEgMKAQQOAAl1c2RuSWRTdHICLERHMnhGa1BkRHdLVW9Ca3pHQWhRdExwU0d6ZlhMaUNZUEV6ZUtIMkFkMjRwAAZ1c2RuSWQBILYmKcME9c5TkaQOS3UkL2SMUbH6369UKb1I0h0qsqrRAA1saW1pdENvbnRyYWN0AiMzUEZCNkxKeVNoc0NLRUExQVUxVTFXTGJEYXpxeWo2Wkw5YgALdHNuQ29udHJhY3QCIzNQS3o1am5KTG9oRjJHalNoUTdiRzVINEJlYmRvQTk4eloyABFsZW5kUHJveHlDb250cmFjdAIjM1BHeE1adE1uTlQ5cEpDdlh4WFY0THpLcVhzanZROVhwZlIBDHRyeUdldFN0cmluZwEDa2V5BAckbWF0Y2gwCQCdCAIFBHRoaXMFA2tleQMJAAECBQckbWF0Y2gwAgZTdHJpbmcEAWIFByRtYXRjaDAFAWICAAEOZ2V0QXNzZXRTdHJpbmcBB2Fzc2V0SWQEByRtYXRjaDAFB2Fzc2V0SWQDCQABAgUHJG1hdGNoMAIKQnl0ZVZlY3RvcgQBYgUHJG1hdGNoMAkA2AQBBQFiAgVXQVZFUwENZ2V0QXNzZXRCeXRlcwEKYXNzZXRJZFN0cgMJAAACBQphc3NldElkU3RyAgVXQVZFUwUEdW5pdAkA2QQBBQphc3NldElkU3RyAQpnZXRCYWxhbmNlAQdhc3NldElkBAckbWF0Y2gwBQdhc3NldElkAwkAAQIFByRtYXRjaDACBFVuaXQEAXgFByRtYXRjaDAICQDvBwEFBHRoaXMJYXZhaWxhYmxlCQDwBwIFBHRoaXMJAQV2YWx1ZQEFB2Fzc2V0SWQBBnN3YXBXWAMGYXNzZXQwBmFzc2V0MQdhbW91bnQwBBNhc3NldDFCYWxhbmNlQmVmb3JlCQEKZ2V0QmFsYW5jZQEJAQ1nZXRBc3NldEJ5dGVzAQUGYXNzZXQxAwkAAAIFE2Fzc2V0MUJhbGFuY2VCZWZvcmUFE2Fzc2V0MUJhbGFuY2VCZWZvcmUEBGludjEJAPwHBAkBB0FkZHJlc3MBARoBVy4qNTWxDbfxeT7ht0bQnnRSTXsx0IOuBgIEc3dhcAkAzAgCAAEJAMwIAgUGYXNzZXQxCQDMCAIJAKUIAQUEdGhpcwUDbmlsCQDMCAIJAQ9BdHRhY2hlZFBheW1lbnQCCQENZ2V0QXNzZXRCeXRlcwEFBmFzc2V0MAUHYW1vdW50MAUDbmlsAwkAAAIFBGludjEFBGludjEEB2Ftb3VudDEJAGUCCQEKZ2V0QmFsYW5jZQEJAQ1nZXRBc3NldEJ5dGVzAQUGYXNzZXQxBRNhc3NldDFCYWxhbmNlQmVmb3JlAwkAAAIFB2Ftb3VudDEFB2Ftb3VudDEFB2Ftb3VudDEJAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4JAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4JAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4BCXN3YXBMaW1pdAMGcGFyYW1zBXQwU3RyBXQxU3RyCgEHZG9MaW1pdAIFYXNzZXQLb3JkZXJQYXJhbXMEA29yZAkAtQkCBQtvcmRlclBhcmFtcwIBPgQLJHQwMzMwMzMzNDgJAJQKAgkAkQMCBQNvcmQAAAkAkQMCBQNvcmQAAQQHb3JkZXJJZAgFCyR0MDMzMDMzMzQ4Al8xBAtvcmRlckFtb3VudAgFCyR0MDMzMDMzMzQ4Al8yBANpbnYJAPwHBAkBB0FkZHJlc3MBCQDZBAEFDWxpbWl0Q29udHJhY3QCDGZ1bGZpbGxPcmRlcgkAzAgCBQdvcmRlcklkBQNuaWwJAMwIAgkBD0F0dGFjaGVkUGF5bWVudAIFBWFzc2V0CQENcGFyc2VJbnRWYWx1ZQEFC29yZGVyQW1vdW50BQNuaWwDCQAAAgUDaW52BQNpbnYFBWFzc2V0CQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuBAhvcmRlcnNMaQkAtQkCBQZwYXJhbXMCAToEAnQwCQENZ2V0QXNzZXRCeXRlcwEFBXQwU3RyBAZyZXN1bHQKAAIkbAUIb3JkZXJzTGkKAAIkcwkAkAMBBQIkbAoABSRhY2MwBQJ0MAoBBSRmMF8xAgIkYQIkaQMJAGcCBQIkaQUCJHMFAiRhCQEHZG9MaW1pdAIFAiRhCQCRAwIFAiRsBQIkaQoBBSRmMF8yAgIkYQIkaQMJAGcCBQIkaQUCJHMFAiRhCQACAQIUTGlzdCBzaXplIGV4Y2VlZHMgMTAJAQUkZjBfMgIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIFBSRhY2MwAAAAAQACAAMABAAFAAYABwAIAAkACgMJAAACBQZyZXN1bHQFBnJlc3VsdAAACQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuAQhzd2FwTGVuZAQGcGFyYW1zBXQwU3RyBXQxU3RyBmFtb3VudAQDYXJyCQC1CQIFBnBhcmFtcwIBLQQLJHQwMzc2NTM4MjIJAJUKAwkAkQMCBQNhcnIAAAkAkQMCBQNhcnIAAQkAkQMCBQNhcnIAAgQMcG9vbF9hZGRyZXNzCAULJHQwMzc2NTM4MjICXzEEBWFzc2V0CAULJHQwMzc2NTM4MjICXzIEA2RpcggFCyR0MDM3NjUzODIyAl8zBAhwcm94eUFkcgkBB0FkZHJlc3MBCQDZBAEFEWxlbmRQcm94eUNvbnRyYWN0BAxmdW5jdGlvbk5hbWUDCQAAAgUDZGlyAgEwAgZtaW50UEwCCHJlZGVlbVBMCQD8BwQFCHByb3h5QWRyBQxmdW5jdGlvbk5hbWUJAMwIAgAABQNuaWwJAMwIAgkBD0F0dGFjaGVkUGF5bWVudAIJAQ1nZXRBc3NldEJ5dGVzAQUFdDBTdHIFBmFtb3VudAUDbmlsAQhzd2FwUGVwZQQGcGFyYW1zBXQwU3RyBXQxU3RyBmFtb3VudAQDYXJyCQC1CQIFBnBhcmFtcwIBLQQLJHQwNDE5MDQyNDAJAJQKAgkAkQMCBQNhcnIAAAkAkQMCBQNhcnIAAQQMcG9vbF9hZGRyZXNzCAULJHQwNDE5MDQyNDACXzEEC2Z1bmN0aW9uVGFnCAULJHQwNDE5MDQyNDACXzIEC3N3YXBBZGRyZXNzCQEHQWRkcmVzcwEJANkEAQUMcG9vbF9hZGRyZXNzAwkAAAIFC2Z1bmN0aW9uVGFnAgFkCQD8BwQFC3N3YXBBZGRyZXNzAgdkZXBvc2l0CQDMCAIAAAUDbmlsCQDMCAIJAQ9BdHRhY2hlZFBheW1lbnQCCQENZ2V0QXNzZXRCeXRlcwEFBXQwU3RyBQZhbW91bnQFA25pbAMJAAACBQtmdW5jdGlvblRhZwIBdwkA/AcEBQtzd2FwQWRkcmVzcwIId2l0aGRyYXcJAMwIAgUFdDFTdHIJAMwIAgAABQNuaWwJAMwIAgkBD0F0dGFjaGVkUGF5bWVudAIJAQ1nZXRBc3NldEJ5dGVzAQUFdDBTdHIFBmFtb3VudAUDbmlsAwkAAAIFC2Z1bmN0aW9uVGFnAgFzCQD8BwQFC3N3YXBBZGRyZXNzAgRzd2FwCQDMCAIFBXQxU3RyCQDMCAIAAAUDbmlsCQDMCAIJAQ9BdHRhY2hlZFBheW1lbnQCCQENZ2V0QXNzZXRCeXRlcwEFBXQwU3RyBQZhbW91bnQFA25pbAkAAgECIlVua25vd24gZnVuY3Rpb24gdGFnIGZvciBwZXBlIHN3YXABDHN3YXBJbnRlcm5hbAQBaQlyb3V0ZXNTdHIMbWluVG9SZWNlaXZlBnJlZktleQQIc2h1dGRvd24JAQt2YWx1ZU9yRWxzZQIJAKAIAQIIc2h1dGRvd24HAwUIc2h1dGRvd24JAAIBAghzaHV0ZG93bgoBBmRvU3dhcAIGYW1vdW50BHN3YXAEBnN3YXBMaQkAtQkCBQRzd2FwAgEsBAskdDA1MDQ0NTEyNQkAlgoECQCRAwIFBnN3YXBMaQAACQCRAwIFBnN3YXBMaQABCQCRAwIFBnN3YXBMaQACCQCRAwIFBnN3YXBMaQADBARkQXBwCAULJHQwNTA0NDUxMjUCXzEECGRBcHBUeXBlCAULJHQwNTA0NDUxMjUCXzIEBXQwU3RyCAULJHQwNTA0NDUxMjUCXzMEBXQxU3RyCAULJHQwNTA0NDUxMjUCXzQEAnQwCQENZ2V0QXNzZXRCeXRlcwEFBXQwU3RyBAdhbW91bnQwAwkBAiE9AgUGYW1vdW50AAAFBmFtb3VudAkBCmdldEJhbGFuY2UBBQJ0MAQCaTEDCQAAAgUIZEFwcFR5cGUCBnN3b3BmaQkA/AcECQEHQWRkcmVzcwEJANkEAQUEZEFwcAIIZXhjaGFuZ2UJAMwIAgABBQNuaWwJAMwIAgkBD0F0dGFjaGVkUGF5bWVudAIFAnQwBQdhbW91bnQwBQNuaWwDCQAAAgUIZEFwcFR5cGUCBnB1enpsZQkA/AcECQEHQWRkcmVzcwEJANkEAQUEZEFwcAIEc3dhcAkAzAgCBQV0MVN0cgkAzAgCAAAFA25pbAkAzAgCCQEPQXR0YWNoZWRQYXltZW50AgUCdDAFB2Ftb3VudDAFA25pbAMJAAACBQhkQXBwVHlwZQICd3gJAQZzd2FwV1gDBQV0MFN0cgUFdDFTdHIFB2Ftb3VudDADCQAAAgUIZEFwcFR5cGUCBWxpbWl0CQEJc3dhcExpbWl0AwUEZEFwcAUFdDBTdHIFBXQxU3RyAwkAAAIFCGRBcHBUeXBlAgd0c3VuYW1pCQD8BwQJAQdBZGRyZXNzAQkA2QQBBQt0c25Db250cmFjdAIEc3dhcAkAzAgCBQV0MVN0cgkAzAgCAAAFA25pbAkAzAgCCQEPQXR0YWNoZWRQYXltZW50AgUCdDAFB2Ftb3VudDAFA25pbAMJAAACBQhkQXBwVHlwZQIEbGVuZAkBCHN3YXBMZW5kBAUEZEFwcAUFdDBTdHIFBXQxU3RyBQdhbW91bnQwAwkAAAIFCGRBcHBUeXBlAgRwZXBlCQEIc3dhcFBlcGUEBQRkQXBwBQV0MFN0cgUFdDFTdHIFB2Ftb3VudDAJAAIBAitpbnRlcm5hbCBhZ2dyZWdhdG9yIGlzc3VlOiB1bmtub3cgcG9vbCB0eXBlAwkAAAIFAmkxBQJpMQAACQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuCgEHZG9Sb3V0ZQIFYWNjdW0Fcm91dGUECGFtb3VudEluCQENcGFyc2VJbnRWYWx1ZQEJAJEDAgkAtQkCBQVyb3V0ZQIBLwAABAVzd2FwcwkAtQkCCQCRAwIJALUJAgUFcm91dGUCAS8AAQIBOwQLc3dhcHNSZXN1bHQKAAIkbAUFc3dhcHMKAAIkcwkAkAMBBQIkbAoABSRhY2MwBQhhbW91bnRJbgoBBSRmMF8xAgIkYQIkaQMJAGcCBQIkaQUCJHMFAiRhCQEGZG9Td2FwAgUCJGEJAJEDAgUCJGwFAiRpCgEFJGYwXzICAiRhAiRpAwkAZwIFAiRpBQIkcwUCJGEJAAIBAhNMaXN0IHNpemUgZXhjZWVkcyAzCQEFJGYwXzICCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECBQUkYWNjMAAAAAEAAgADAwkAAAIFC3N3YXBzUmVzdWx0BQtzd2Fwc1Jlc3VsdAkAZAIFBWFjY3VtBQtzd2Fwc1Jlc3VsdAkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgQNc3BsaXR0ZWRSb3V0ZQkAtQkCCQCyAgIFCXJvdXRlc1N0cgAyAgEsBAlhc3NldDFTdHIJAJEDAgUNc3BsaXR0ZWRSb3V0ZQkAZQIJAJADAQUNc3BsaXR0ZWRSb3V0ZQABBAZhc3NldDEJAQ1nZXRBc3NldEJ5dGVzAQUJYXNzZXQxU3RyBAZyb3V0ZXMJALwJAgUJcm91dGVzU3RyAgF8BAVzd2FwcwoAAiRsBQZyb3V0ZXMKAAIkcwkAkAMBBQIkbAoABSRhY2MwAAAKAQUkZjBfMQICJGECJGkDCQBnAgUCJGkFAiRzBQIkYQkBB2RvUm91dGUCBQIkYQkAkQMCBQIkbAUCJGkKAQUkZjBfMgICJGECJGkDCQBnAgUCJGkFAiRzBQIkYQkAAgECE0xpc3Qgc2l6ZSBleGNlZWRzIDQJAQUkZjBfMgIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIFBSRhY2MwAAAAAQACAAMABAMJAAACBQVzd2FwcwUFc3dhcHMECHRvdGFsT3V0CQEKZ2V0QmFsYW5jZQEFBmFzc2V0MQQJZmVlQW1vdW50CQBrAwUIdG90YWxPdXQAHQCQTgQQY2xlYW5Ub3RhbEFtb3VudAkAZQIFCHRvdGFsT3V0BQlmZWVBbW91bnQDCQBmAgUMbWluVG9SZWNlaXZlBRBjbGVhblRvdGFsQW1vdW50CQACAQkArAICCQCsAgIJAKwCAgJfYW1vdW50IHRvIHJlY2VpdmUgaXMgdG9vIGxvdy4gcGxlYXNlIHRyeSBhZ2FpbiB3aXRoIGFub3RoZXIgYW1vdW50IG9yIHdhaXQgMSBtaW51dGUuIGV4cGVjdGVkOiAJAKQDAQUMbWluVG9SZWNlaXZlAgcsIHJlYWwgCQCkAwEFEGNsZWFuVG90YWxBbW91bnQEB3VzZG5GZWUDCQAAAgUGYXNzZXQxBQZ1c2RuSWQFCWZlZUFtb3VudAQOcG9vbEFkZHJlc3NTdHIJAQx0cnlHZXRTdHJpbmcBCQCsAgIJAKwCAgINc3RhdGljX2Fzc2V0XwUJYXNzZXQxU3RyAgtfcHV6emxlUG9vbAMJAAACBQ5wb29sQWRkcmVzc1N0cgIAAAAEEXVzZG5CYWxhbmNlQmVmb3JlCQEKZ2V0QmFsYW5jZQEFBnVzZG5JZAMJAAACBRF1c2RuQmFsYW5jZUJlZm9yZQURdXNkbkJhbGFuY2VCZWZvcmUEDGNvbnZlcnRlZEZlZQkA/AcECQERQGV4dHJOYXRpdmUoMTA2MikBBQ5wb29sQWRkcmVzc1N0cgIEc3dhcAkAzAgCBQl1c2RuSWRTdHIJAMwIAgAABQNuaWwJAMwIAgkBD0F0dGFjaGVkUGF5bWVudAIFBmFzc2V0MQUJZmVlQW1vdW50BQNuaWwDCQAAAgUMY29udmVydGVkRmVlBQxjb252ZXJ0ZWRGZWUEEHVzZG5CYWxhbmNlQWZ0ZXIJAQpnZXRCYWxhbmNlAQUGdXNkbklkAwkAAAIFEHVzZG5CYWxhbmNlQWZ0ZXIFEHVzZG5CYWxhbmNlQWZ0ZXIJAGUCBRB1c2RuQmFsYW5jZUFmdGVyBRF1c2RuQmFsYW5jZUJlZm9yZQkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgMJAAACBQd1c2RuRmVlBQd1c2RuRmVlBA9yZWZlcnJhbEFkZHJlc3MDCQAAAgUGcmVmS2V5AgRtdW5hCQEHQWRkcmVzcwEBGgFXnQyqxhNRqW7LgPdjfcFkeOLvck2oDLrTAwkAAAIFBnJlZktleQIGa2VlcGVyCQEHQWRkcmVzcwEBGgFX47bKEjTub0Zv8MqogOOLr3FN8V6ZrDv2AwkAAAIFBnJlZktleQIDdGNpCQEHQWRkcmVzcwEBGgFXTgSp9XKM3uf50lJK3bhrU0WMeqeaOH2cAwkBAiE9AgkBC3ZhbHVlT3JFbHNlAgkAnQgCBQR0aGlzCQCsAgICBHJlZl8FBnJlZktleQIAAgAJARFAZXh0ck5hdGl2ZSgxMDYyKQEJARFAZXh0ck5hdGl2ZSgxMDUzKQIFBHRoaXMJAKwCAgIEcmVmXwUGcmVmS2V5CQEHQWRkcmVzcwEBGgFX/JoHcOFv3tGUISFteraNWNJCWHssByYSBAxyZWZVc2RuU2hhcmUDCQAAAgUGcmVmS2V5AgVub3JlZgAACQBrAwUHdXNkbkZlZQACAAoEBXRvcFVwAwkBAiE9AgUHdXNkbkZlZQAACQD8BwQJAQdBZGRyZXNzAQEaAVfAiq1zlCEzvbAYVg8otbk+QXfOv2/y/tcCC3RvcFVwUmV3YXJkBQNuaWwJAMwIAgkBD0F0dGFjaGVkUGF5bWVudAIFBnVzZG5JZAkAZQIFB3VzZG5GZWUFDHJlZlVzZG5TaGFyZQUDbmlsBQR1bml0AwkAAAIFBXRvcFVwBQV0b3BVcAQGYXNzZXQwCAkAkQMCCAUBaQhwYXltZW50cwAAB2Fzc2V0SWQEB2Ftb3VudDAJAGUCCQEKZ2V0QmFsYW5jZQEFBmFzc2V0MAMJAAACBQZhc3NldDAFBnVzZG5JZAUMcmVmVXNkblNoYXJlAAAEB2Ftb3VudDEJAGUCBRBjbGVhblRvdGFsQW1vdW50AwkAAAIFBmFzc2V0MQUGdXNkbklkBQxyZWZVc2RuU2hhcmUAAAkAzggCCQDOCAIJAM4IAgkAzAgCCQEOU2NyaXB0VHJhbnNmZXIDCAUBaQZjYWxsZXIFB2Ftb3VudDEFBmFzc2V0MQUDbmlsAwkBAiE9AgUMcmVmVXNkblNoYXJlAAAJAMwIAgkBDlNjcmlwdFRyYW5zZmVyAwUPcmVmZXJyYWxBZGRyZXNzBQxyZWZVc2RuU2hhcmUFBnVzZG5JZAUDbmlsBQNuaWwDCQECIT0CBQdhbW91bnQwAAAJAMwIAgkBDlNjcmlwdFRyYW5zZmVyAwgFAWkGY2FsbGVyBQdhbW91bnQwBQZhc3NldDAFA25pbAUDbmlsAwkAAAIFB3VzZG5GZWUAAAkAzAgCCQEOU2NyaXB0VHJhbnNmZXIDCQEHQWRkcmVzcwEBGgFXHuH7QDFrgebsS1YbBSxRoZNu3wmxPNLBBQlmZWVBbW91bnQFBmFzc2V0MQUDbmlsBQNuaWwJAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4JAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4JAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4FAWkBBHN3YXACCXJvdXRlc1N0cgxtaW5Ub1JlY2VpdmUJAQxzd2FwSW50ZXJuYWwEBQFpBQlyb3V0ZXNTdHIFDG1pblRvUmVjZWl2ZQIFbm9yZWYBaQEQc3dhcFdpdGhSZWZlcnJhbAMJcm91dGVzU3RyDG1pblRvUmVjZWl2ZQZyZWZLZXkJAQxzd2FwSW50ZXJuYWwEBQFpBQlyb3V0ZXNTdHIFDG1pblRvUmVjZWl2ZQUGcmVmS2V5AWkBEmFkZFRva2VuUHV6emxlUG9vbAIKYXNzZXRJZFN0cg5wb29sQWRkcmVzc1N0cgMJAQIhPQIIBQFpBmNhbGxlcgkBB0FkZHJlc3MBARoBV9fhI1GOfKuIWtXXKJd12Ih104+uIwWm4QkAAgECCmFkbWluIG9ubHkJAMwIAgkBC1N0cmluZ0VudHJ5AgkArAICCQCsAgICDXN0YXRpY19hc3NldF8FCmFzc2V0SWRTdHICC19wdXp6bGVQb29sBQ5wb29sQWRkcmVzc1N0cgUDbmlsAWkBDmFkZFJlZmVycmFsS2V5AgZyZWZLZXkKYWRkcmVzc1N0cgMJAQIhPQIIBQFpBmNhbGxlcgkBB0FkZHJlc3MBARoBV9fhI1GOfKuIWtXXKJd12Ih104+uIwWm4QkAAgECCmFkbWluIG9ubHkJAMwIAgkBC1N0cmluZ0VudHJ5AgkArAICAgRyZWZfBQZyZWZLZXkFCmFkZHJlc3NTdHIFA25pbAFpAQhzaHV0ZG93bgEDdmFsAwkBAiE9AggFAWkGY2FsbGVyCQEHQWRkcmVzcwEBGgFX1+EjUY58q4ha1dcol3XYiHXTj64jBabhCQACAQIHd2wgb25seQkAzAgCCQEMQm9vbGVhbkVudHJ5AgIIc2h1dGRvd24FA3ZhbAUDbmlsAQJ0eAEGdmVyaWZ5AAkA9AMDCAUCdHgJYm9keUJ5dGVzCQCRAwIIBQJ0eAZwcm9vZnMAAAgFAnR4D3NlbmRlclB1YmxpY0tleTN/0Mc=", "height": 3961026, "applicationStatus": "succeeded", "spentComplexity": 0 } View: original | compacted Prev: FfVPhQKrN9W3igyvDDFLwgHwbJab5yK8cqNwBsrmWSxs Next: E8cyLf5hSUj4vgUWwBaQTwf8uYrAjgq9XdZSP7TTY4ZQ Diff:
OldNewDifferences
237237 then Address(base58'3PNgw6Db2TGUQbjnV7ekve6q126xBC1e7eM')
238238 else if ((refKey == "tci"))
239239 then Address(base58'3P93R2GBkTGVehRPhytHr7sdxYww93jkbhm')
240- else Address(base58'3PQxXXiQXpWsjDwQLYxyuoPiaLnVHjJguFo')
240+ else if ((valueOrElse(getString(this, ("ref_" + refKey)), "") != ""))
241+ then addressFromStringValue(getStringValue(this, ("ref_" + refKey)))
242+ else Address(base58'3PQxXXiQXpWsjDwQLYxyuoPiaLnVHjJguFo')
241243 let refUsdnShare = if ((refKey == "noref"))
242244 then 0
243245 else fraction(usdnFee, 2, 10)
289291
290292
291293 @Callable(i)
294+func addReferralKey (refKey,addressStr) = if ((i.caller != Address(base58'3PMcMiMEs6w56NRGacksXtFG5zS7doE9fpL')))
295+ then throw("admin only")
296+ else [StringEntry(("ref_" + refKey), addressStr)]
297+
298+
299+
300+@Callable(i)
292301 func shutdown (val) = if ((i.caller != Address(base58'3PMcMiMEs6w56NRGacksXtFG5zS7doE9fpL')))
293302 then throw("wl only")
294303 else [BooleanEntry("shutdown", val)]
Full:
OldNewDifferences
11 {-# STDLIB_VERSION 6 #-}
22 {-# SCRIPT_TYPE ACCOUNT #-}
33 {-# CONTENT_TYPE DAPP #-}
44 let usdnIdStr = "DG2xFkPdDwKUoBkzGAhQtLpSGzfXLiCYPEzeKH2Ad24p"
55
66 let usdnId = base58'DG2xFkPdDwKUoBkzGAhQtLpSGzfXLiCYPEzeKH2Ad24p'
77
88 let limitContract = "3PFB6LJyShsCKEA1AU1U1WLbDazqyj6ZL9b"
99
1010 let tsnContract = "3PKz5jnJLohF2GjShQ7bG5H4BebdoA98zZ2"
1111
1212 let lendProxyContract = "3PGxMZtMnNT9pJCvXxXV4LzKqXsjvQ9XpfR"
1313
1414 func tryGetString (key) = match getString(this, key) {
1515 case b: String =>
1616 b
1717 case _ =>
1818 ""
1919 }
2020
2121
2222 func getAssetString (assetId) = match assetId {
2323 case b: ByteVector =>
2424 toBase58String(b)
2525 case _ =>
2626 "WAVES"
2727 }
2828
2929
3030 func getAssetBytes (assetIdStr) = if ((assetIdStr == "WAVES"))
3131 then unit
3232 else fromBase58String(assetIdStr)
3333
3434
3535 func getBalance (assetId) = match assetId {
3636 case x: Unit =>
3737 wavesBalance(this).available
3838 case _ =>
3939 assetBalance(this, value(assetId))
4040 }
4141
4242
4343 func swapWX (asset0,asset1,amount0) = {
4444 let asset1BalanceBefore = getBalance(getAssetBytes(asset1))
4545 if ((asset1BalanceBefore == asset1BalanceBefore))
4646 then {
4747 let inv1 = invoke(Address(base58'3P68zNiufsu1viZpu1aY3cdahRRKcvV5N93'), "swap", [1, asset1, toString(this)], [AttachedPayment(getAssetBytes(asset0), amount0)])
4848 if ((inv1 == inv1))
4949 then {
5050 let amount1 = (getBalance(getAssetBytes(asset1)) - asset1BalanceBefore)
5151 if ((amount1 == amount1))
5252 then amount1
5353 else throw("Strict value is not equal to itself.")
5454 }
5555 else throw("Strict value is not equal to itself.")
5656 }
5757 else throw("Strict value is not equal to itself.")
5858 }
5959
6060
6161 func swapLimit (params,t0Str,t1Str) = {
6262 func doLimit (asset,orderParams) = {
6363 let ord = split(orderParams, ">")
6464 let $t033033348 = $Tuple2(ord[0], ord[1])
6565 let orderId = $t033033348._1
6666 let orderAmount = $t033033348._2
6767 let inv = invoke(Address(fromBase58String(limitContract)), "fulfillOrder", [orderId], [AttachedPayment(asset, parseIntValue(orderAmount))])
6868 if ((inv == inv))
6969 then asset
7070 else throw("Strict value is not equal to itself.")
7171 }
7272
7373 let ordersLi = split(params, ":")
7474 let t0 = getAssetBytes(t0Str)
7575 let result = {
7676 let $l = ordersLi
7777 let $s = size($l)
7878 let $acc0 = t0
7979 func $f0_1 ($a,$i) = if (($i >= $s))
8080 then $a
8181 else doLimit($a, $l[$i])
8282
8383 func $f0_2 ($a,$i) = if (($i >= $s))
8484 then $a
8585 else throw("List size exceeds 10")
8686
8787 $f0_2($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)
8888 }
8989 if ((result == result))
9090 then 0
9191 else throw("Strict value is not equal to itself.")
9292 }
9393
9494
9595 func swapLend (params,t0Str,t1Str,amount) = {
9696 let arr = split(params, "-")
9797 let $t037653822 = $Tuple3(arr[0], arr[1], arr[2])
9898 let pool_address = $t037653822._1
9999 let asset = $t037653822._2
100100 let dir = $t037653822._3
101101 let proxyAdr = Address(fromBase58String(lendProxyContract))
102102 let functionName = if ((dir == "0"))
103103 then "mintPL"
104104 else "redeemPL"
105105 invoke(proxyAdr, functionName, [0], [AttachedPayment(getAssetBytes(t0Str), amount)])
106106 }
107107
108108
109109 func swapPepe (params,t0Str,t1Str,amount) = {
110110 let arr = split(params, "-")
111111 let $t041904240 = $Tuple2(arr[0], arr[1])
112112 let pool_address = $t041904240._1
113113 let functionTag = $t041904240._2
114114 let swapAddress = Address(fromBase58String(pool_address))
115115 if ((functionTag == "d"))
116116 then invoke(swapAddress, "deposit", [0], [AttachedPayment(getAssetBytes(t0Str), amount)])
117117 else if ((functionTag == "w"))
118118 then invoke(swapAddress, "withdraw", [t1Str, 0], [AttachedPayment(getAssetBytes(t0Str), amount)])
119119 else if ((functionTag == "s"))
120120 then invoke(swapAddress, "swap", [t1Str, 0], [AttachedPayment(getAssetBytes(t0Str), amount)])
121121 else throw("Unknown function tag for pepe swap")
122122 }
123123
124124
125125 func swapInternal (i,routesStr,minToReceive,refKey) = {
126126 let shutdown = valueOrElse(getBoolean("shutdown"), false)
127127 if (shutdown)
128128 then throw("shutdown")
129129 else {
130130 func doSwap (amount,swap) = {
131131 let swapLi = split(swap, ",")
132132 let $t050445125 = $Tuple4(swapLi[0], swapLi[1], swapLi[2], swapLi[3])
133133 let dApp = $t050445125._1
134134 let dAppType = $t050445125._2
135135 let t0Str = $t050445125._3
136136 let t1Str = $t050445125._4
137137 let t0 = getAssetBytes(t0Str)
138138 let amount0 = if ((amount != 0))
139139 then amount
140140 else getBalance(t0)
141141 let i1 = if ((dAppType == "swopfi"))
142142 then invoke(Address(fromBase58String(dApp)), "exchange", [1], [AttachedPayment(t0, amount0)])
143143 else if ((dAppType == "puzzle"))
144144 then invoke(Address(fromBase58String(dApp)), "swap", [t1Str, 0], [AttachedPayment(t0, amount0)])
145145 else if ((dAppType == "wx"))
146146 then swapWX(t0Str, t1Str, amount0)
147147 else if ((dAppType == "limit"))
148148 then swapLimit(dApp, t0Str, t1Str)
149149 else if ((dAppType == "tsunami"))
150150 then invoke(Address(fromBase58String(tsnContract)), "swap", [t1Str, 0], [AttachedPayment(t0, amount0)])
151151 else if ((dAppType == "lend"))
152152 then swapLend(dApp, t0Str, t1Str, amount0)
153153 else if ((dAppType == "pepe"))
154154 then swapPepe(dApp, t0Str, t1Str, amount0)
155155 else throw("internal aggregator issue: unknow pool type")
156156 if ((i1 == i1))
157157 then 0
158158 else throw("Strict value is not equal to itself.")
159159 }
160160
161161 func doRoute (accum,route) = {
162162 let amountIn = parseIntValue(split(route, "/")[0])
163163 let swaps = split(split(route, "/")[1], ";")
164164 let swapsResult = {
165165 let $l = swaps
166166 let $s = size($l)
167167 let $acc0 = amountIn
168168 func $f0_1 ($a,$i) = if (($i >= $s))
169169 then $a
170170 else doSwap($a, $l[$i])
171171
172172 func $f0_2 ($a,$i) = if (($i >= $s))
173173 then $a
174174 else throw("List size exceeds 3")
175175
176176 $f0_2($f0_1($f0_1($f0_1($acc0, 0), 1), 2), 3)
177177 }
178178 if ((swapsResult == swapsResult))
179179 then (accum + swapsResult)
180180 else throw("Strict value is not equal to itself.")
181181 }
182182
183183 let splittedRoute = split(takeRight(routesStr, 50), ",")
184184 let asset1Str = splittedRoute[(size(splittedRoute) - 1)]
185185 let asset1 = getAssetBytes(asset1Str)
186186 let routes = split_4C(routesStr, "|")
187187 let swaps = {
188188 let $l = routes
189189 let $s = size($l)
190190 let $acc0 = 0
191191 func $f0_1 ($a,$i) = if (($i >= $s))
192192 then $a
193193 else doRoute($a, $l[$i])
194194
195195 func $f0_2 ($a,$i) = if (($i >= $s))
196196 then $a
197197 else throw("List size exceeds 4")
198198
199199 $f0_2($f0_1($f0_1($f0_1($f0_1($acc0, 0), 1), 2), 3), 4)
200200 }
201201 if ((swaps == swaps))
202202 then {
203203 let totalOut = getBalance(asset1)
204204 let feeAmount = fraction(totalOut, 29, 10000)
205205 let cleanTotalAmount = (totalOut - feeAmount)
206206 if ((minToReceive > cleanTotalAmount))
207207 then throw(((("amount to receive is too low. please try again with another amount or wait 1 minute. expected: " + toString(minToReceive)) + ", real ") + toString(cleanTotalAmount)))
208208 else {
209209 let usdnFee = if ((asset1 == usdnId))
210210 then feeAmount
211211 else {
212212 let poolAddressStr = tryGetString((("static_asset_" + asset1Str) + "_puzzlePool"))
213213 if ((poolAddressStr == ""))
214214 then 0
215215 else {
216216 let usdnBalanceBefore = getBalance(usdnId)
217217 if ((usdnBalanceBefore == usdnBalanceBefore))
218218 then {
219219 let convertedFee = invoke(addressFromStringValue(poolAddressStr), "swap", [usdnIdStr, 0], [AttachedPayment(asset1, feeAmount)])
220220 if ((convertedFee == convertedFee))
221221 then {
222222 let usdnBalanceAfter = getBalance(usdnId)
223223 if ((usdnBalanceAfter == usdnBalanceAfter))
224224 then (usdnBalanceAfter - usdnBalanceBefore)
225225 else throw("Strict value is not equal to itself.")
226226 }
227227 else throw("Strict value is not equal to itself.")
228228 }
229229 else throw("Strict value is not equal to itself.")
230230 }
231231 }
232232 if ((usdnFee == usdnFee))
233233 then {
234234 let referralAddress = if ((refKey == "muna"))
235235 then Address(base58'3PGFHzVGT4NTigwCKP1NcwoXkodVZwvBuuU')
236236 else if ((refKey == "keeper"))
237237 then Address(base58'3PNgw6Db2TGUQbjnV7ekve6q126xBC1e7eM')
238238 else if ((refKey == "tci"))
239239 then Address(base58'3P93R2GBkTGVehRPhytHr7sdxYww93jkbhm')
240- else Address(base58'3PQxXXiQXpWsjDwQLYxyuoPiaLnVHjJguFo')
240+ else if ((valueOrElse(getString(this, ("ref_" + refKey)), "") != ""))
241+ then addressFromStringValue(getStringValue(this, ("ref_" + refKey)))
242+ else Address(base58'3PQxXXiQXpWsjDwQLYxyuoPiaLnVHjJguFo')
241243 let refUsdnShare = if ((refKey == "noref"))
242244 then 0
243245 else fraction(usdnFee, 2, 10)
244246 let topUp = if ((usdnFee != 0))
245247 then invoke(Address(base58'3PKUxbZaSYfsR7wu2HaAgiirHYwAMupDrYW'), "topUpReward", nil, [AttachedPayment(usdnId, (usdnFee - refUsdnShare))])
246248 else unit
247249 if ((topUp == topUp))
248250 then {
249251 let asset0 = i.payments[0].assetId
250252 let amount0 = (getBalance(asset0) - (if ((asset0 == usdnId))
251253 then refUsdnShare
252254 else 0))
253255 let amount1 = (cleanTotalAmount - (if ((asset1 == usdnId))
254256 then refUsdnShare
255257 else 0))
256258 ((([ScriptTransfer(i.caller, amount1, asset1)] ++ (if ((refUsdnShare != 0))
257259 then [ScriptTransfer(referralAddress, refUsdnShare, usdnId)]
258260 else nil)) ++ (if ((amount0 != 0))
259261 then [ScriptTransfer(i.caller, amount0, asset0)]
260262 else nil)) ++ (if ((usdnFee == 0))
261263 then [ScriptTransfer(Address(base58'3P4kBiU4wr2yV1S5gMfu3MdkVvy7kxXHsKe'), feeAmount, asset1)]
262264 else nil))
263265 }
264266 else throw("Strict value is not equal to itself.")
265267 }
266268 else throw("Strict value is not equal to itself.")
267269 }
268270 }
269271 else throw("Strict value is not equal to itself.")
270272 }
271273 }
272274
273275
274276 @Callable(i)
275277 func swap (routesStr,minToReceive) = swapInternal(i, routesStr, minToReceive, "noref")
276278
277279
278280
279281 @Callable(i)
280282 func swapWithReferral (routesStr,minToReceive,refKey) = swapInternal(i, routesStr, minToReceive, refKey)
281283
282284
283285
284286 @Callable(i)
285287 func addTokenPuzzlePool (assetIdStr,poolAddressStr) = if ((i.caller != Address(base58'3PMcMiMEs6w56NRGacksXtFG5zS7doE9fpL')))
286288 then throw("admin only")
287289 else [StringEntry((("static_asset_" + assetIdStr) + "_puzzlePool"), poolAddressStr)]
288290
289291
290292
291293 @Callable(i)
294+func addReferralKey (refKey,addressStr) = if ((i.caller != Address(base58'3PMcMiMEs6w56NRGacksXtFG5zS7doE9fpL')))
295+ then throw("admin only")
296+ else [StringEntry(("ref_" + refKey), addressStr)]
297+
298+
299+
300+@Callable(i)
292301 func shutdown (val) = if ((i.caller != Address(base58'3PMcMiMEs6w56NRGacksXtFG5zS7doE9fpL')))
293302 then throw("wl only")
294303 else [BooleanEntry("shutdown", val)]
295304
296305
297306 @Verifier(tx)
298307 func verify () = sigVerify(tx.bodyBytes, tx.proofs[0], tx.senderPublicKey)
299308

github/deemru/w8io/6500d08 
46.08 ms