2024.01.21 03:51 [4006327] smart account 3PGFHzVGT4NTigwCKP1NcwoXkodVZwvBuuU > SELF 0.00000000 Waves

{ "type": 13, "id": "E8cyLf5hSUj4vgUWwBaQTwf8uYrAjgq9XdZSP7TTY4ZQ", "fee": 5000000, "feeAssetId": null, "timestamp": 1705798311899, "version": 2, "chainId": 87, "sender": "3PGFHzVGT4NTigwCKP1NcwoXkodVZwvBuuU", "senderPublicKey": "Dmn1fWHxpwN789LPfoMHFj7uSYKSsb5VFfyNQyQ629f9", "proofs": [ "4Bz6mFYi3BTSkynMuLYbdUpZ4bdwZsoWBHU4PWkCnrcZCC6EZdVaSm6MwQDEp6idrrxx1mmA5TvCjrbKpyEjv9pu" ], "script": "base64:BgIgCAISBAoCCAESBQoDCAEIEgQKAggIEgQKAggIEgMKAQQQAAl1c2RuSWRTdHICLERHMnhGa1BkRHdLVW9Ca3pHQWhRdExwU0d6ZlhMaUNZUEV6ZUtIMkFkMjRwAAZ1c2RuSWQBILYmKcME9c5TkaQOS3UkL2SMUbH6369UKb1I0h0qsqrRAA1saW1pdENvbnRyYWN0AiMzUEZCNkxKeVNoc0NLRUExQVUxVTFXTGJEYXpxeWo2Wkw5YgALdHNuQ29udHJhY3QCIzNQS3o1am5KTG9oRjJHalNoUTdiRzVINEJlYmRvQTk4eloyABFsZW5kUHJveHlDb250cmFjdAIjM1BHeE1adE1uTlQ5cEpDdlh4WFY0THpLcVhzanZROVhwZlIAEHB6UG9vbHNMMldyYXBwZXICIzNQUW9CZlVLSGtKQWVHV2hvb0xQN1dTOG92YjU0YXY5SnAyAQx0cnlHZXRTdHJpbmcBA2tleQQHJG1hdGNoMAkAnQgCBQR0aGlzBQNrZXkDCQABAgUHJG1hdGNoMAIGU3RyaW5nBAFiBQckbWF0Y2gwBQFiAgABEXRyeUdldFN0cmluZ090aGVyAgNrZXkHYWRkcmVzcwQHJG1hdGNoMAkAnQgCBQdhZGRyZXNzBQNrZXkDCQABAgUHJG1hdGNoMAIGU3RyaW5nBAFiBQckbWF0Y2gwBQFiAgABDmdldEFzc2V0U3RyaW5nAQdhc3NldElkBAckbWF0Y2gwBQdhc3NldElkAwkAAQIFByRtYXRjaDACCkJ5dGVWZWN0b3IEAWIFByRtYXRjaDAJANgEAQUBYgIFV0FWRVMBDWdldEFzc2V0Qnl0ZXMBCmFzc2V0SWRTdHIDCQAAAgUKYXNzZXRJZFN0cgIFV0FWRVMFBHVuaXQJANkEAQUKYXNzZXRJZFN0cgEKZ2V0QmFsYW5jZQEHYXNzZXRJZAQHJG1hdGNoMAUHYXNzZXRJZAMJAAECBQckbWF0Y2gwAgRVbml0BAF4BQckbWF0Y2gwCAkA7wcBBQR0aGlzCWF2YWlsYWJsZQkA8AcCBQR0aGlzCQEFdmFsdWUBBQdhc3NldElkAQZzd2FwV1gDBmFzc2V0MAZhc3NldDEHYW1vdW50MAQTYXNzZXQxQmFsYW5jZUJlZm9yZQkBCmdldEJhbGFuY2UBCQENZ2V0QXNzZXRCeXRlcwEFBmFzc2V0MQMJAAACBRNhc3NldDFCYWxhbmNlQmVmb3JlBRNhc3NldDFCYWxhbmNlQmVmb3JlBARpbnYxCQD8BwQJAQdBZGRyZXNzAQEaAVcuKjU1sQ238Xk+4bdG0J50Uk17MdCDrgYCBHN3YXAJAMwIAgABCQDMCAIFBmFzc2V0MQkAzAgCCQClCAEFBHRoaXMFA25pbAkAzAgCCQEPQXR0YWNoZWRQYXltZW50AgkBDWdldEFzc2V0Qnl0ZXMBBQZhc3NldDAFB2Ftb3VudDAFA25pbAMJAAACBQRpbnYxBQRpbnYxBAdhbW91bnQxCQBlAgkBCmdldEJhbGFuY2UBCQENZ2V0QXNzZXRCeXRlcwEFBmFzc2V0MQUTYXNzZXQxQmFsYW5jZUJlZm9yZQMJAAACBQdhbW91bnQxBQdhbW91bnQxBQdhbW91bnQxCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuAQlzd2FwTGltaXQDBnBhcmFtcwV0MFN0cgV0MVN0cgoBB2RvTGltaXQCBWFzc2V0C29yZGVyUGFyYW1zBANvcmQJALUJAgULb3JkZXJQYXJhbXMCAT4ECyR0MDE3MDQxNzQ5CQCUCgIJAJEDAgUDb3JkAAAJAJEDAgUDb3JkAAEEB29yZGVySWQIBQskdDAxNzA0MTc0OQJfMQQLb3JkZXJBbW91bnQIBQskdDAxNzA0MTc0OQJfMgQDaW52CQD8BwQJAQdBZGRyZXNzAQkA2QQBBQ1saW1pdENvbnRyYWN0AgxmdWxmaWxsT3JkZXIJAMwIAgUHb3JkZXJJZAUDbmlsCQDMCAIJAQ9BdHRhY2hlZFBheW1lbnQCBQVhc3NldAkBDXBhcnNlSW50VmFsdWUBBQtvcmRlckFtb3VudAUDbmlsAwkAAAIFA2ludgUDaW52BQVhc3NldAkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgQIb3JkZXJzTGkJALUJAgUGcGFyYW1zAgE6BAJ0MAkBDWdldEFzc2V0Qnl0ZXMBBQV0MFN0cgQGcmVzdWx0CgACJGwFCG9yZGVyc0xpCgACJHMJAJADAQUCJGwKAAUkYWNjMAUCdDAKAQUkZjBfMQICJGECJGkDCQBnAgUCJGkFAiRzBQIkYQkBB2RvTGltaXQCBQIkYQkAkQMCBQIkbAUCJGkKAQUkZjBfMgICJGECJGkDCQBnAgUCJGkFAiRzBQIkYQkAAgECFExpc3Qgc2l6ZSBleGNlZWRzIDEwCQEFJGYwXzICCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECBQUkYWNjMAAAAAEAAgADAAQABQAGAAcACAAJAAoDCQAAAgUGcmVzdWx0BQZyZXN1bHQAAAkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgEIc3dhcExlbmQEBnBhcmFtcwV0MFN0cgV0MVN0cgZhbW91bnQEA2FycgkAtQkCBQZwYXJhbXMCAS0ECyR0MDIxNjYyMjIzCQCVCgMJAJEDAgUDYXJyAAAJAJEDAgUDYXJyAAEJAJEDAgUDYXJyAAIEDHBvb2xfYWRkcmVzcwgFCyR0MDIxNjYyMjIzAl8xBAVhc3NldAgFCyR0MDIxNjYyMjIzAl8yBANkaXIIBQskdDAyMTY2MjIyMwJfMwQIcHJveHlBZHIJAQdBZGRyZXNzAQkA2QQBBRFsZW5kUHJveHlDb250cmFjdAQMZnVuY3Rpb25OYW1lAwkAAAIFA2RpcgIBMAIGbWludFBMAghyZWRlZW1QTAkA/AcEBQhwcm94eUFkcgUMZnVuY3Rpb25OYW1lCQDMCAIAAAUDbmlsCQDMCAIJAQ9BdHRhY2hlZFBheW1lbnQCCQENZ2V0QXNzZXRCeXRlcwEFBXQwU3RyBQZhbW91bnQFA25pbAEIc3dhcFBlcGUEBnBhcmFtcwV0MFN0cgV0MVN0cgZhbW91bnQEA2FycgkAtQkCBQZwYXJhbXMCAS0ECyR0MDI1OTEyNjQxCQCUCgIJAJEDAgUDYXJyAAAJAJEDAgUDYXJyAAEEDHBvb2xfYWRkcmVzcwgFCyR0MDI1OTEyNjQxAl8xBAtmdW5jdGlvblRhZwgFCyR0MDI1OTEyNjQxAl8yBAtzd2FwQWRkcmVzcwkBB0FkZHJlc3MBCQDZBAEFDHBvb2xfYWRkcmVzcwMJAAACBQtmdW5jdGlvblRhZwIBZAkA/AcEBQtzd2FwQWRkcmVzcwIHZGVwb3NpdAkAzAgCAAAFA25pbAkAzAgCCQEPQXR0YWNoZWRQYXltZW50AgkBDWdldEFzc2V0Qnl0ZXMBBQV0MFN0cgUGYW1vdW50BQNuaWwDCQAAAgULZnVuY3Rpb25UYWcCAXcJAPwHBAULc3dhcEFkZHJlc3MCCHdpdGhkcmF3CQDMCAIFBXQxU3RyCQDMCAIAAAUDbmlsCQDMCAIJAQ9BdHRhY2hlZFBheW1lbnQCCQENZ2V0QXNzZXRCeXRlcwEFBXQwU3RyBQZhbW91bnQFA25pbAMJAAACBQtmdW5jdGlvblRhZwIBcwkA/AcEBQtzd2FwQWRkcmVzcwIEc3dhcAkAzAgCBQV0MVN0cgkAzAgCAAAFA25pbAkAzAgCCQEPQXR0YWNoZWRQYXltZW50AgkBDWdldEFzc2V0Qnl0ZXMBBQV0MFN0cgUGYW1vdW50BQNuaWwJAAIBAiJVbmtub3duIGZ1bmN0aW9uIHRhZyBmb3IgcGVwZSBzd2FwAQxzd2FwSW50ZXJuYWwEAWkJcm91dGVzU3RyDG1pblRvUmVjZWl2ZQZyZWZLZXkECHNodXRkb3duCQELdmFsdWVPckVsc2UCCQCgCAECCHNodXRkb3duBwMFCHNodXRkb3duCQACAQIIc2h1dGRvd24KAQZkb1N3YXACBmFtb3VudARzd2FwBAZzd2FwTGkJALUJAgUEc3dhcAIBLAQLJHQwMzQ0NTM1MjYJAJYKBAkAkQMCBQZzd2FwTGkAAAkAkQMCBQZzd2FwTGkAAQkAkQMCBQZzd2FwTGkAAgkAkQMCBQZzd2FwTGkAAwQEZEFwcAgFCyR0MDM0NDUzNTI2Al8xBAhkQXBwVHlwZQgFCyR0MDM0NDUzNTI2Al8yBAV0MFN0cggFCyR0MDM0NDUzNTI2Al8zBAV0MVN0cggFCyR0MDM0NDUzNTI2Al80BAJ0MAkBDWdldEFzc2V0Qnl0ZXMBBQV0MFN0cgQHYW1vdW50MAMJAQIhPQIFBmFtb3VudAAABQZhbW91bnQJAQpnZXRCYWxhbmNlAQUCdDAEAmkxAwkAAAIFCGRBcHBUeXBlAgZzd29wZmkJAPwHBAkBB0FkZHJlc3MBCQDZBAEFBGRBcHACCGV4Y2hhbmdlCQDMCAIAAQUDbmlsCQDMCAIJAQ9BdHRhY2hlZFBheW1lbnQCBQJ0MAUHYW1vdW50MAUDbmlsAwkAAAIFCGRBcHBUeXBlAgZwdXp6bGUEBHBvb2wJAQdBZGRyZXNzAQkA2QQBBQRkQXBwBBFwb29sVG9rZW5JZEJpbmFyeQkBE3ZhbHVlT3JFcnJvck1lc3NhZ2UCCQCcCAIFBHBvb2wCE2dsb2JhbF9wb29sVG9rZW5faWQJAKwCAgIWTm8gcG9vbFRva2VuIGVudHJ5IGluIAUEZEFwcAQOcG9vbFRva2VuSWRTdHIJAQ5nZXRBc3NldFN0cmluZwEFEXBvb2xUb2tlbklkQmluYXJ5AwkAAAIFBXQwU3RyBQ5wb29sVG9rZW5JZFN0cgkA/AcECQEHQWRkcmVzcwEJANkEAQUQcHpQb29sc0wyV3JhcHBlcgIScmVkZWVtV2l0aE9uZVRva2VuCQDMCAIFBGRBcHAJAMwIAgUFdDFTdHIFA25pbAkAzAgCCQEPQXR0YWNoZWRQYXltZW50AgUCdDAFB2Ftb3VudDAFA25pbAMJAAACBQV0MVN0cgUOcG9vbFRva2VuSWRTdHIJAPwHBAkBB0FkZHJlc3MBCQDZBAEFEHB6UG9vbHNMMldyYXBwZXICFGdlbmVyYXRlV2l0aE9uZVRva2VuCQDMCAIFBGRBcHAFA25pbAkAzAgCCQEPQXR0YWNoZWRQYXltZW50AgUCdDAFB2Ftb3VudDAFA25pbAkA/AcEBQRwb29sAgRzd2FwCQDMCAIFBXQxU3RyCQDMCAIAAAUDbmlsCQDMCAIJAQ9BdHRhY2hlZFBheW1lbnQCBQJ0MAUHYW1vdW50MAUDbmlsAwkAAAIFCGRBcHBUeXBlAgJ3eAkBBnN3YXBXWAMFBXQwU3RyBQV0MVN0cgUHYW1vdW50MAMJAAACBQhkQXBwVHlwZQIFbGltaXQJAQlzd2FwTGltaXQDBQRkQXBwBQV0MFN0cgUFdDFTdHIDCQAAAgUIZEFwcFR5cGUCB3RzdW5hbWkJAPwHBAkBB0FkZHJlc3MBCQDZBAEFC3RzbkNvbnRyYWN0AgRzd2FwCQDMCAIFBXQxU3RyCQDMCAIAAAUDbmlsCQDMCAIJAQ9BdHRhY2hlZFBheW1lbnQCBQJ0MAUHYW1vdW50MAUDbmlsAwkAAAIFCGRBcHBUeXBlAgRsZW5kCQEIc3dhcExlbmQEBQRkQXBwBQV0MFN0cgUFdDFTdHIFB2Ftb3VudDADCQAAAgUIZEFwcFR5cGUCBHBlcGUJAQhzd2FwUGVwZQQFBGRBcHAFBXQwU3RyBQV0MVN0cgUHYW1vdW50MAkAAgECK2ludGVybmFsIGFnZ3JlZ2F0b3IgaXNzdWU6IHVua25vdyBwb29sIHR5cGUDCQAAAgUCaTEFAmkxAAAJAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4KAQdkb1JvdXRlAgVhY2N1bQVyb3V0ZQQIYW1vdW50SW4JAQ1wYXJzZUludFZhbHVlAQkAkQMCCQC1CQIFBXJvdXRlAgEvAAAEBXN3YXBzCQC1CQIJAJEDAgkAtQkCBQVyb3V0ZQIBLwABAgE7BAtzd2Fwc1Jlc3VsdAoAAiRsBQVzd2FwcwoAAiRzCQCQAwEFAiRsCgAFJGFjYzAFCGFtb3VudEluCgEFJGYwXzECAiRhAiRpAwkAZwIFAiRpBQIkcwUCJGEJAQZkb1N3YXACBQIkYQkAkQMCBQIkbAUCJGkKAQUkZjBfMgICJGECJGkDCQBnAgUCJGkFAiRzBQIkYQkAAgECE0xpc3Qgc2l6ZSBleGNlZWRzIDMJAQUkZjBfMgIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIFBSRhY2MwAAAAAQACAAMDCQAAAgULc3dhcHNSZXN1bHQFC3N3YXBzUmVzdWx0CQBkAgUFYWNjdW0FC3N3YXBzUmVzdWx0CQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuBA1zcGxpdHRlZFJvdXRlCQC1CQIJALICAgUJcm91dGVzU3RyADICASwECWFzc2V0MVN0cgkAkQMCBQ1zcGxpdHRlZFJvdXRlCQBlAgkAkAMBBQ1zcGxpdHRlZFJvdXRlAAEEBmFzc2V0MQkBDWdldEFzc2V0Qnl0ZXMBBQlhc3NldDFTdHIEBnJvdXRlcwkAvAkCBQlyb3V0ZXNTdHICAXwEBXN3YXBzCgACJGwFBnJvdXRlcwoAAiRzCQCQAwEFAiRsCgAFJGFjYzAAAAoBBSRmMF8xAgIkYQIkaQMJAGcCBQIkaQUCJHMFAiRhCQEHZG9Sb3V0ZQIFAiRhCQCRAwIFAiRsBQIkaQoBBSRmMF8yAgIkYQIkaQMJAGcCBQIkaQUCJHMFAiRhCQACAQITTGlzdCBzaXplIGV4Y2VlZHMgNAkBBSRmMF8yAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgUFJGFjYzAAAAABAAIAAwAEAwkAAAIFBXN3YXBzBQVzd2FwcwQIdG90YWxPdXQJAQpnZXRCYWxhbmNlAQUGYXNzZXQxBAlmZWVBbW91bnQJAGsDBQh0b3RhbE91dAAdAJBOBBBjbGVhblRvdGFsQW1vdW50CQBlAgUIdG90YWxPdXQFCWZlZUFtb3VudAMJAGYCBQxtaW5Ub1JlY2VpdmUFEGNsZWFuVG90YWxBbW91bnQJAAIBCQCsAgIJAKwCAgkArAICAl9hbW91bnQgdG8gcmVjZWl2ZSBpcyB0b28gbG93LiBwbGVhc2UgdHJ5IGFnYWluIHdpdGggYW5vdGhlciBhbW91bnQgb3Igd2FpdCAxIG1pbnV0ZS4gZXhwZWN0ZWQ6IAkApAMBBQxtaW5Ub1JlY2VpdmUCBywgcmVhbCAJAKQDAQUQY2xlYW5Ub3RhbEFtb3VudAQHdXNkbkZlZQMJAAACBQZhc3NldDEFBnVzZG5JZAUJZmVlQW1vdW50BA5wb29sQWRkcmVzc1N0cgkBDHRyeUdldFN0cmluZwEJAKwCAgkArAICAg1zdGF0aWNfYXNzZXRfBQlhc3NldDFTdHICC19wdXp6bGVQb29sAwkAAAIFDnBvb2xBZGRyZXNzU3RyAgAAAAQRdXNkbkJhbGFuY2VCZWZvcmUJAQpnZXRCYWxhbmNlAQUGdXNkbklkAwkAAAIFEXVzZG5CYWxhbmNlQmVmb3JlBRF1c2RuQmFsYW5jZUJlZm9yZQQMY29udmVydGVkRmVlCQD8BwQJARFAZXh0ck5hdGl2ZSgxMDYyKQEFDnBvb2xBZGRyZXNzU3RyAgRzd2FwCQDMCAIFCXVzZG5JZFN0cgkAzAgCAAAFA25pbAkAzAgCCQEPQXR0YWNoZWRQYXltZW50AgUGYXNzZXQxBQlmZWVBbW91bnQFA25pbAMJAAACBQxjb252ZXJ0ZWRGZWUFDGNvbnZlcnRlZEZlZQQQdXNkbkJhbGFuY2VBZnRlcgkBCmdldEJhbGFuY2UBBQZ1c2RuSWQDCQAAAgUQdXNkbkJhbGFuY2VBZnRlcgUQdXNkbkJhbGFuY2VBZnRlcgkAZQIFEHVzZG5CYWxhbmNlQWZ0ZXIFEXVzZG5CYWxhbmNlQmVmb3JlCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuAwkAAAIFB3VzZG5GZWUFB3VzZG5GZWUED3JlZmVycmFsQWRkcmVzcwMJAAACBQZyZWZLZXkCBG11bmEJAQdBZGRyZXNzAQEaAVedDKrGE1GpbsuA92N9wWR44u9yTagMutMDCQAAAgUGcmVmS2V5AgZrZWVwZXIJAQdBZGRyZXNzAQEaAVfjtsoSNO5vRm/wyqiA44uvcU3xXpmsO/YDCQAAAgUGcmVmS2V5AgN0Y2kJAQdBZGRyZXNzAQEaAVdOBKn1coze5/nSUkrduGtTRYx6p5o4fZwDCQECIT0CCQELdmFsdWVPckVsc2UCCQCdCAIFBHRoaXMJAKwCAgIEcmVmXwUGcmVmS2V5AgACAAkBEUBleHRyTmF0aXZlKDEwNjIpAQkBEUBleHRyTmF0aXZlKDEwNTMpAgUEdGhpcwkArAICAgRyZWZfBQZyZWZLZXkJAQdBZGRyZXNzAQEaAVf8mgdw4W/e0ZQhIW16to1Y0kJYeywHJhIEDHJlZlVzZG5TaGFyZQMJAAACBQZyZWZLZXkCBW5vcmVmAAAJAGsDBQd1c2RuRmVlAAIACgQFdG9wVXADCQECIT0CBQd1c2RuRmVlAAAJAPwHBAkBB0FkZHJlc3MBARoBV8CKrXOUITO9sBhWDyi1uT5Bd86/b/L+1wILdG9wVXBSZXdhcmQFA25pbAkAzAgCCQEPQXR0YWNoZWRQYXltZW50AgUGdXNkbklkCQBlAgUHdXNkbkZlZQUMcmVmVXNkblNoYXJlBQNuaWwFBHVuaXQDCQAAAgUFdG9wVXAFBXRvcFVwBAZhc3NldDAICQCRAwIIBQFpCHBheW1lbnRzAAAHYXNzZXRJZAQHYW1vdW50MAkAZQIJAQpnZXRCYWxhbmNlAQUGYXNzZXQwAwkAAAIFBmFzc2V0MAUGdXNkbklkBQxyZWZVc2RuU2hhcmUAAAQHYW1vdW50MQkAZQIFEGNsZWFuVG90YWxBbW91bnQDCQAAAgUGYXNzZXQxBQZ1c2RuSWQFDHJlZlVzZG5TaGFyZQAACQDOCAIJAM4IAgkAzggCCQDMCAIJAQ5TY3JpcHRUcmFuc2ZlcgMIBQFpBmNhbGxlcgUHYW1vdW50MQUGYXNzZXQxBQNuaWwDCQECIT0CBQxyZWZVc2RuU2hhcmUAAAkAzAgCCQEOU2NyaXB0VHJhbnNmZXIDBQ9yZWZlcnJhbEFkZHJlc3MFDHJlZlVzZG5TaGFyZQUGdXNkbklkBQNuaWwFA25pbAMJAQIhPQIFB2Ftb3VudDAAAAkAzAgCCQEOU2NyaXB0VHJhbnNmZXIDCAUBaQZjYWxsZXIFB2Ftb3VudDAFBmFzc2V0MAUDbmlsBQNuaWwDCQAAAgUHdXNkbkZlZQAACQDMCAIJAQ5TY3JpcHRUcmFuc2ZlcgMJAQdBZGRyZXNzAQEaAVce4ftAMWuB5uxLVhsFLFGhk27fCbE80sEFCWZlZUFtb3VudAUGYXNzZXQxBQNuaWwFA25pbAkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgUBaQEEc3dhcAIJcm91dGVzU3RyDG1pblRvUmVjZWl2ZQkBDHN3YXBJbnRlcm5hbAQFAWkFCXJvdXRlc1N0cgUMbWluVG9SZWNlaXZlAgVub3JlZgFpARBzd2FwV2l0aFJlZmVycmFsAwlyb3V0ZXNTdHIMbWluVG9SZWNlaXZlBnJlZktleQkBDHN3YXBJbnRlcm5hbAQFAWkFCXJvdXRlc1N0cgUMbWluVG9SZWNlaXZlBQZyZWZLZXkBaQESYWRkVG9rZW5QdXp6bGVQb29sAgphc3NldElkU3RyDnBvb2xBZGRyZXNzU3RyAwkBAiE9AggFAWkGY2FsbGVyCQEHQWRkcmVzcwEBGgFX1+EjUY58q4ha1dcol3XYiHXTj64jBabhCQACAQIKYWRtaW4gb25seQkAzAgCCQELU3RyaW5nRW50cnkCCQCsAgIJAKwCAgINc3RhdGljX2Fzc2V0XwUKYXNzZXRJZFN0cgILX3B1enpsZVBvb2wFDnBvb2xBZGRyZXNzU3RyBQNuaWwBaQEOYWRkUmVmZXJyYWxLZXkCBnJlZktleQphZGRyZXNzU3RyAwkBAiE9AggFAWkGY2FsbGVyCQEHQWRkcmVzcwEBGgFX1+EjUY58q4ha1dcol3XYiHXTj64jBabhCQACAQIKYWRtaW4gb25seQkAzAgCCQELU3RyaW5nRW50cnkCCQCsAgICBHJlZl8FBnJlZktleQUKYWRkcmVzc1N0cgUDbmlsAWkBCHNodXRkb3duAQN2YWwDCQECIT0CCAUBaQZjYWxsZXIJAQdBZGRyZXNzAQEaAVfX4SNRjnyriFrV1yiXddiIddOPriMFpuEJAAIBAgd3bCBvbmx5CQDMCAIJAQxCb29sZWFuRW50cnkCAghzaHV0ZG93bgUDdmFsBQNuaWwBAnR4AQZ2ZXJpZnkACQD0AwMIBQJ0eAlib2R5Qnl0ZXMJAJEDAggFAnR4BnByb29mcwAACAUCdHgPc2VuZGVyUHVibGljS2V576TTgA==", "height": 4006327, "applicationStatus": "succeeded", "spentComplexity": 0 } View: original | compacted Prev: F6Ub6ZDdoMtUPcYvqsdNxW1MZfyqyFgy1eQjzHmJgtVo Next: none Diff:
OldNewDifferences
1111
1212 let lendProxyContract = "3PGxMZtMnNT9pJCvXxXV4LzKqXsjvQ9XpfR"
1313
14+let pzPoolsL2Wrapper = "3PQoBfUKHkJAeGWhooLP7WS8ovb54av9Jp2"
15+
1416 func tryGetString (key) = match getString(this, key) {
17+ case b: String =>
18+ b
19+ case _ =>
20+ ""
21+}
22+
23+
24+func tryGetStringOther (key,address) = match getString(address, key) {
1525 case b: String =>
1626 b
1727 case _ =>
6171 func swapLimit (params,t0Str,t1Str) = {
6272 func doLimit (asset,orderParams) = {
6373 let ord = split(orderParams, ">")
64- let $t033033348 = $Tuple2(ord[0], ord[1])
65- let orderId = $t033033348._1
66- let orderAmount = $t033033348._2
74+ let $t017041749 = $Tuple2(ord[0], ord[1])
75+ let orderId = $t017041749._1
76+ let orderAmount = $t017041749._2
6777 let inv = invoke(Address(fromBase58String(limitContract)), "fulfillOrder", [orderId], [AttachedPayment(asset, parseIntValue(orderAmount))])
6878 if ((inv == inv))
6979 then asset
94104
95105 func swapLend (params,t0Str,t1Str,amount) = {
96106 let arr = split(params, "-")
97- let $t037653822 = $Tuple3(arr[0], arr[1], arr[2])
98- let pool_address = $t037653822._1
99- let asset = $t037653822._2
100- let dir = $t037653822._3
107+ let $t021662223 = $Tuple3(arr[0], arr[1], arr[2])
108+ let pool_address = $t021662223._1
109+ let asset = $t021662223._2
110+ let dir = $t021662223._3
101111 let proxyAdr = Address(fromBase58String(lendProxyContract))
102112 let functionName = if ((dir == "0"))
103113 then "mintPL"
108118
109119 func swapPepe (params,t0Str,t1Str,amount) = {
110120 let arr = split(params, "-")
111- let $t041904240 = $Tuple2(arr[0], arr[1])
112- let pool_address = $t041904240._1
113- let functionTag = $t041904240._2
121+ let $t025912641 = $Tuple2(arr[0], arr[1])
122+ let pool_address = $t025912641._1
123+ let functionTag = $t025912641._2
114124 let swapAddress = Address(fromBase58String(pool_address))
115125 if ((functionTag == "d"))
116126 then invoke(swapAddress, "deposit", [0], [AttachedPayment(getAssetBytes(t0Str), amount)])
129139 else {
130140 func doSwap (amount,swap) = {
131141 let swapLi = split(swap, ",")
132- let $t050445125 = $Tuple4(swapLi[0], swapLi[1], swapLi[2], swapLi[3])
133- let dApp = $t050445125._1
134- let dAppType = $t050445125._2
135- let t0Str = $t050445125._3
136- let t1Str = $t050445125._4
142+ let $t034453526 = $Tuple4(swapLi[0], swapLi[1], swapLi[2], swapLi[3])
143+ let dApp = $t034453526._1
144+ let dAppType = $t034453526._2
145+ let t0Str = $t034453526._3
146+ let t1Str = $t034453526._4
137147 let t0 = getAssetBytes(t0Str)
138148 let amount0 = if ((amount != 0))
139149 then amount
141151 let i1 = if ((dAppType == "swopfi"))
142152 then invoke(Address(fromBase58String(dApp)), "exchange", [1], [AttachedPayment(t0, amount0)])
143153 else if ((dAppType == "puzzle"))
144- then invoke(Address(fromBase58String(dApp)), "swap", [t1Str, 0], [AttachedPayment(t0, amount0)])
154+ then {
155+ let pool = Address(fromBase58String(dApp))
156+ let poolTokenIdBinary = valueOrErrorMessage(getBinary(pool, "global_poolToken_id"), ("No poolToken entry in " + dApp))
157+ let poolTokenIdStr = getAssetString(poolTokenIdBinary)
158+ if ((t0Str == poolTokenIdStr))
159+ then invoke(Address(fromBase58String(pzPoolsL2Wrapper)), "redeemWithOneToken", [dApp, t1Str], [AttachedPayment(t0, amount0)])
160+ else if ((t1Str == poolTokenIdStr))
161+ then invoke(Address(fromBase58String(pzPoolsL2Wrapper)), "generateWithOneToken", [dApp], [AttachedPayment(t0, amount0)])
162+ else invoke(pool, "swap", [t1Str, 0], [AttachedPayment(t0, amount0)])
163+ }
145164 else if ((dAppType == "wx"))
146165 then swapWX(t0Str, t1Str, amount0)
147166 else if ((dAppType == "limit"))
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
14+let pzPoolsL2Wrapper = "3PQoBfUKHkJAeGWhooLP7WS8ovb54av9Jp2"
15+
1416 func tryGetString (key) = match getString(this, key) {
17+ case b: String =>
18+ b
19+ case _ =>
20+ ""
21+}
22+
23+
24+func tryGetStringOther (key,address) = match getString(address, key) {
1525 case b: String =>
1626 b
1727 case _ =>
1828 ""
1929 }
2030
2131
2232 func getAssetString (assetId) = match assetId {
2333 case b: ByteVector =>
2434 toBase58String(b)
2535 case _ =>
2636 "WAVES"
2737 }
2838
2939
3040 func getAssetBytes (assetIdStr) = if ((assetIdStr == "WAVES"))
3141 then unit
3242 else fromBase58String(assetIdStr)
3343
3444
3545 func getBalance (assetId) = match assetId {
3646 case x: Unit =>
3747 wavesBalance(this).available
3848 case _ =>
3949 assetBalance(this, value(assetId))
4050 }
4151
4252
4353 func swapWX (asset0,asset1,amount0) = {
4454 let asset1BalanceBefore = getBalance(getAssetBytes(asset1))
4555 if ((asset1BalanceBefore == asset1BalanceBefore))
4656 then {
4757 let inv1 = invoke(Address(base58'3P68zNiufsu1viZpu1aY3cdahRRKcvV5N93'), "swap", [1, asset1, toString(this)], [AttachedPayment(getAssetBytes(asset0), amount0)])
4858 if ((inv1 == inv1))
4959 then {
5060 let amount1 = (getBalance(getAssetBytes(asset1)) - asset1BalanceBefore)
5161 if ((amount1 == amount1))
5262 then amount1
5363 else throw("Strict value is not equal to itself.")
5464 }
5565 else throw("Strict value is not equal to itself.")
5666 }
5767 else throw("Strict value is not equal to itself.")
5868 }
5969
6070
6171 func swapLimit (params,t0Str,t1Str) = {
6272 func doLimit (asset,orderParams) = {
6373 let ord = split(orderParams, ">")
64- let $t033033348 = $Tuple2(ord[0], ord[1])
65- let orderId = $t033033348._1
66- let orderAmount = $t033033348._2
74+ let $t017041749 = $Tuple2(ord[0], ord[1])
75+ let orderId = $t017041749._1
76+ let orderAmount = $t017041749._2
6777 let inv = invoke(Address(fromBase58String(limitContract)), "fulfillOrder", [orderId], [AttachedPayment(asset, parseIntValue(orderAmount))])
6878 if ((inv == inv))
6979 then asset
7080 else throw("Strict value is not equal to itself.")
7181 }
7282
7383 let ordersLi = split(params, ":")
7484 let t0 = getAssetBytes(t0Str)
7585 let result = {
7686 let $l = ordersLi
7787 let $s = size($l)
7888 let $acc0 = t0
7989 func $f0_1 ($a,$i) = if (($i >= $s))
8090 then $a
8191 else doLimit($a, $l[$i])
8292
8393 func $f0_2 ($a,$i) = if (($i >= $s))
8494 then $a
8595 else throw("List size exceeds 10")
8696
8797 $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)
8898 }
8999 if ((result == result))
90100 then 0
91101 else throw("Strict value is not equal to itself.")
92102 }
93103
94104
95105 func swapLend (params,t0Str,t1Str,amount) = {
96106 let arr = split(params, "-")
97- let $t037653822 = $Tuple3(arr[0], arr[1], arr[2])
98- let pool_address = $t037653822._1
99- let asset = $t037653822._2
100- let dir = $t037653822._3
107+ let $t021662223 = $Tuple3(arr[0], arr[1], arr[2])
108+ let pool_address = $t021662223._1
109+ let asset = $t021662223._2
110+ let dir = $t021662223._3
101111 let proxyAdr = Address(fromBase58String(lendProxyContract))
102112 let functionName = if ((dir == "0"))
103113 then "mintPL"
104114 else "redeemPL"
105115 invoke(proxyAdr, functionName, [0], [AttachedPayment(getAssetBytes(t0Str), amount)])
106116 }
107117
108118
109119 func swapPepe (params,t0Str,t1Str,amount) = {
110120 let arr = split(params, "-")
111- let $t041904240 = $Tuple2(arr[0], arr[1])
112- let pool_address = $t041904240._1
113- let functionTag = $t041904240._2
121+ let $t025912641 = $Tuple2(arr[0], arr[1])
122+ let pool_address = $t025912641._1
123+ let functionTag = $t025912641._2
114124 let swapAddress = Address(fromBase58String(pool_address))
115125 if ((functionTag == "d"))
116126 then invoke(swapAddress, "deposit", [0], [AttachedPayment(getAssetBytes(t0Str), amount)])
117127 else if ((functionTag == "w"))
118128 then invoke(swapAddress, "withdraw", [t1Str, 0], [AttachedPayment(getAssetBytes(t0Str), amount)])
119129 else if ((functionTag == "s"))
120130 then invoke(swapAddress, "swap", [t1Str, 0], [AttachedPayment(getAssetBytes(t0Str), amount)])
121131 else throw("Unknown function tag for pepe swap")
122132 }
123133
124134
125135 func swapInternal (i,routesStr,minToReceive,refKey) = {
126136 let shutdown = valueOrElse(getBoolean("shutdown"), false)
127137 if (shutdown)
128138 then throw("shutdown")
129139 else {
130140 func doSwap (amount,swap) = {
131141 let swapLi = split(swap, ",")
132- let $t050445125 = $Tuple4(swapLi[0], swapLi[1], swapLi[2], swapLi[3])
133- let dApp = $t050445125._1
134- let dAppType = $t050445125._2
135- let t0Str = $t050445125._3
136- let t1Str = $t050445125._4
142+ let $t034453526 = $Tuple4(swapLi[0], swapLi[1], swapLi[2], swapLi[3])
143+ let dApp = $t034453526._1
144+ let dAppType = $t034453526._2
145+ let t0Str = $t034453526._3
146+ let t1Str = $t034453526._4
137147 let t0 = getAssetBytes(t0Str)
138148 let amount0 = if ((amount != 0))
139149 then amount
140150 else getBalance(t0)
141151 let i1 = if ((dAppType == "swopfi"))
142152 then invoke(Address(fromBase58String(dApp)), "exchange", [1], [AttachedPayment(t0, amount0)])
143153 else if ((dAppType == "puzzle"))
144- then invoke(Address(fromBase58String(dApp)), "swap", [t1Str, 0], [AttachedPayment(t0, amount0)])
154+ then {
155+ let pool = Address(fromBase58String(dApp))
156+ let poolTokenIdBinary = valueOrErrorMessage(getBinary(pool, "global_poolToken_id"), ("No poolToken entry in " + dApp))
157+ let poolTokenIdStr = getAssetString(poolTokenIdBinary)
158+ if ((t0Str == poolTokenIdStr))
159+ then invoke(Address(fromBase58String(pzPoolsL2Wrapper)), "redeemWithOneToken", [dApp, t1Str], [AttachedPayment(t0, amount0)])
160+ else if ((t1Str == poolTokenIdStr))
161+ then invoke(Address(fromBase58String(pzPoolsL2Wrapper)), "generateWithOneToken", [dApp], [AttachedPayment(t0, amount0)])
162+ else invoke(pool, "swap", [t1Str, 0], [AttachedPayment(t0, amount0)])
163+ }
145164 else if ((dAppType == "wx"))
146165 then swapWX(t0Str, t1Str, amount0)
147166 else if ((dAppType == "limit"))
148167 then swapLimit(dApp, t0Str, t1Str)
149168 else if ((dAppType == "tsunami"))
150169 then invoke(Address(fromBase58String(tsnContract)), "swap", [t1Str, 0], [AttachedPayment(t0, amount0)])
151170 else if ((dAppType == "lend"))
152171 then swapLend(dApp, t0Str, t1Str, amount0)
153172 else if ((dAppType == "pepe"))
154173 then swapPepe(dApp, t0Str, t1Str, amount0)
155174 else throw("internal aggregator issue: unknow pool type")
156175 if ((i1 == i1))
157176 then 0
158177 else throw("Strict value is not equal to itself.")
159178 }
160179
161180 func doRoute (accum,route) = {
162181 let amountIn = parseIntValue(split(route, "/")[0])
163182 let swaps = split(split(route, "/")[1], ";")
164183 let swapsResult = {
165184 let $l = swaps
166185 let $s = size($l)
167186 let $acc0 = amountIn
168187 func $f0_1 ($a,$i) = if (($i >= $s))
169188 then $a
170189 else doSwap($a, $l[$i])
171190
172191 func $f0_2 ($a,$i) = if (($i >= $s))
173192 then $a
174193 else throw("List size exceeds 3")
175194
176195 $f0_2($f0_1($f0_1($f0_1($acc0, 0), 1), 2), 3)
177196 }
178197 if ((swapsResult == swapsResult))
179198 then (accum + swapsResult)
180199 else throw("Strict value is not equal to itself.")
181200 }
182201
183202 let splittedRoute = split(takeRight(routesStr, 50), ",")
184203 let asset1Str = splittedRoute[(size(splittedRoute) - 1)]
185204 let asset1 = getAssetBytes(asset1Str)
186205 let routes = split_4C(routesStr, "|")
187206 let swaps = {
188207 let $l = routes
189208 let $s = size($l)
190209 let $acc0 = 0
191210 func $f0_1 ($a,$i) = if (($i >= $s))
192211 then $a
193212 else doRoute($a, $l[$i])
194213
195214 func $f0_2 ($a,$i) = if (($i >= $s))
196215 then $a
197216 else throw("List size exceeds 4")
198217
199218 $f0_2($f0_1($f0_1($f0_1($f0_1($acc0, 0), 1), 2), 3), 4)
200219 }
201220 if ((swaps == swaps))
202221 then {
203222 let totalOut = getBalance(asset1)
204223 let feeAmount = fraction(totalOut, 29, 10000)
205224 let cleanTotalAmount = (totalOut - feeAmount)
206225 if ((minToReceive > cleanTotalAmount))
207226 then throw(((("amount to receive is too low. please try again with another amount or wait 1 minute. expected: " + toString(minToReceive)) + ", real ") + toString(cleanTotalAmount)))
208227 else {
209228 let usdnFee = if ((asset1 == usdnId))
210229 then feeAmount
211230 else {
212231 let poolAddressStr = tryGetString((("static_asset_" + asset1Str) + "_puzzlePool"))
213232 if ((poolAddressStr == ""))
214233 then 0
215234 else {
216235 let usdnBalanceBefore = getBalance(usdnId)
217236 if ((usdnBalanceBefore == usdnBalanceBefore))
218237 then {
219238 let convertedFee = invoke(addressFromStringValue(poolAddressStr), "swap", [usdnIdStr, 0], [AttachedPayment(asset1, feeAmount)])
220239 if ((convertedFee == convertedFee))
221240 then {
222241 let usdnBalanceAfter = getBalance(usdnId)
223242 if ((usdnBalanceAfter == usdnBalanceAfter))
224243 then (usdnBalanceAfter - usdnBalanceBefore)
225244 else throw("Strict value is not equal to itself.")
226245 }
227246 else throw("Strict value is not equal to itself.")
228247 }
229248 else throw("Strict value is not equal to itself.")
230249 }
231250 }
232251 if ((usdnFee == usdnFee))
233252 then {
234253 let referralAddress = if ((refKey == "muna"))
235254 then Address(base58'3PGFHzVGT4NTigwCKP1NcwoXkodVZwvBuuU')
236255 else if ((refKey == "keeper"))
237256 then Address(base58'3PNgw6Db2TGUQbjnV7ekve6q126xBC1e7eM')
238257 else if ((refKey == "tci"))
239258 then Address(base58'3P93R2GBkTGVehRPhytHr7sdxYww93jkbhm')
240259 else if ((valueOrElse(getString(this, ("ref_" + refKey)), "") != ""))
241260 then addressFromStringValue(getStringValue(this, ("ref_" + refKey)))
242261 else Address(base58'3PQxXXiQXpWsjDwQLYxyuoPiaLnVHjJguFo')
243262 let refUsdnShare = if ((refKey == "noref"))
244263 then 0
245264 else fraction(usdnFee, 2, 10)
246265 let topUp = if ((usdnFee != 0))
247266 then invoke(Address(base58'3PKUxbZaSYfsR7wu2HaAgiirHYwAMupDrYW'), "topUpReward", nil, [AttachedPayment(usdnId, (usdnFee - refUsdnShare))])
248267 else unit
249268 if ((topUp == topUp))
250269 then {
251270 let asset0 = i.payments[0].assetId
252271 let amount0 = (getBalance(asset0) - (if ((asset0 == usdnId))
253272 then refUsdnShare
254273 else 0))
255274 let amount1 = (cleanTotalAmount - (if ((asset1 == usdnId))
256275 then refUsdnShare
257276 else 0))
258277 ((([ScriptTransfer(i.caller, amount1, asset1)] ++ (if ((refUsdnShare != 0))
259278 then [ScriptTransfer(referralAddress, refUsdnShare, usdnId)]
260279 else nil)) ++ (if ((amount0 != 0))
261280 then [ScriptTransfer(i.caller, amount0, asset0)]
262281 else nil)) ++ (if ((usdnFee == 0))
263282 then [ScriptTransfer(Address(base58'3P4kBiU4wr2yV1S5gMfu3MdkVvy7kxXHsKe'), feeAmount, asset1)]
264283 else nil))
265284 }
266285 else throw("Strict value is not equal to itself.")
267286 }
268287 else throw("Strict value is not equal to itself.")
269288 }
270289 }
271290 else throw("Strict value is not equal to itself.")
272291 }
273292 }
274293
275294
276295 @Callable(i)
277296 func swap (routesStr,minToReceive) = swapInternal(i, routesStr, minToReceive, "noref")
278297
279298
280299
281300 @Callable(i)
282301 func swapWithReferral (routesStr,minToReceive,refKey) = swapInternal(i, routesStr, minToReceive, refKey)
283302
284303
285304
286305 @Callable(i)
287306 func addTokenPuzzlePool (assetIdStr,poolAddressStr) = if ((i.caller != Address(base58'3PMcMiMEs6w56NRGacksXtFG5zS7doE9fpL')))
288307 then throw("admin only")
289308 else [StringEntry((("static_asset_" + assetIdStr) + "_puzzlePool"), poolAddressStr)]
290309
291310
292311
293312 @Callable(i)
294313 func addReferralKey (refKey,addressStr) = if ((i.caller != Address(base58'3PMcMiMEs6w56NRGacksXtFG5zS7doE9fpL')))
295314 then throw("admin only")
296315 else [StringEntry(("ref_" + refKey), addressStr)]
297316
298317
299318
300319 @Callable(i)
301320 func shutdown (val) = if ((i.caller != Address(base58'3PMcMiMEs6w56NRGacksXtFG5zS7doE9fpL')))
302321 then throw("wl only")
303322 else [BooleanEntry("shutdown", val)]
304323
305324
306325 @Verifier(tx)
307326 func verify () = sigVerify(tx.bodyBytes, tx.proofs[0], tx.senderPublicKey)
308327

github/deemru/w8io/786bc32 
43.88 ms