tx · G6fuQQ9RF373z6SFWSmo1NFPnhkrh6e3j1VPvsDNYw3x

3PCrRrwHEjGXFjYtXDsNv78f3Ch3CH3p6V1:  -0.01200000 Waves

2024.02.09 22:30 [4034911] smart account 3PCrRrwHEjGXFjYtXDsNv78f3Ch3CH3p6V1 > SELF 0.00000000 Waves

{ "type": 13, "id": "G6fuQQ9RF373z6SFWSmo1NFPnhkrh6e3j1VPvsDNYw3x", "fee": 1200000, "feeAssetId": null, "timestamp": 1707507074351, "version": 1, "sender": "3PCrRrwHEjGXFjYtXDsNv78f3Ch3CH3p6V1", "senderPublicKey": "CySLWUjPdfjfB7gvJBekkUcTuL6EKAnbmMcUJqLbqGFS", "proofs": [ "2rosyKhYvARYajcjRzc8HdMDXcLknfUSTUaN5rRf36LrjmENPcG38MhfVAn9zPuJTrs7NyqcB59Z57ccm47XPqeU" ], "script": "base64:BgIoCAISBwoFAQEBAQESBwoFAQgBCAESBwoFARIREQgSAwoBARIAEgASABkACE1pbmVyRmVlAAUAEVBheW91dEVtcHR5U3RhdHVzAAAAFVBheW91dEluaXRpYXRlZFN0YXR1cwABABVQYXlvdXRDb21wbGV0ZWRTdGF0dXMAAgASQmxvY2tzQmF0Y2hNYXhTaXplAAoAFlJlY2lwaWVudHNCYXRjaE1heFNpemUAZAAGSGVpZ2h0BQZoZWlnaHQAB0NoYWluSWQAVwAKV2F2ZXNEbHBJZAEg9eDHTnZPaS3F3WDrsJfX9MGy2Phj0uw/X8pRVNWeeFQADUNhbGxlckFkZHJlc3MJAQdBZGRyZXNzAQEaAVeRb/9MO+Y2oXlOclma/+zWZ/8p9xI+BWcAFldhdmVzRGFvRmFjdG9yeUFkZHJlc3MJAQdBZGRyZXNzAQEaAVe1uWNW+XgkQF1z4GTqhH6ffsW4z6s/7OoAD1NldHRpbmdzQWRkcmVzcwkBB0FkZHJlc3MBARoBVzr/Z2sn6PhCCnFDf80da2k5kkGpcBiUOwAXUHV6emxlQWdncmVnYXRvckFkZHJlc3MJAQdBZGRyZXNzAQEaAVedDKrGE1GpbsuA92N9wWR44u9yTagMutMAEU1haW50YWluZXJBZGRyZXNzCQEHQWRkcmVzcwEBGgFX3GhhfGXViVO9QBvk9y3fJdl+RLjStgT4ABFQdXp6bGVUZWFtQWRkcmVzcwkBB0FkZHJlc3MBARoBV5nuQ1M10C8v8E1ER39n72R9o33ljxcGWQAHV2F2ZXNJZAIFV0FWRVMADUxhc3RQYXlvdXRLZXkCCmxhc3RQYXlvdXQAE01hc3NUcmFuc2ZlckZlZXNLZXkCEG1hc3NUcmFuc2ZlckZlZXMBEW1ha2VQYXlvdXREYXRhS2V5AQhwYXlvdXRJZAkArAICAgtwYXlvdXREYXRhXwkApAMBBQhwYXlvdXRJZAETbWFrZVBheW91dFN0YXR1c0tleQEIcGF5b3V0SWQJAKwCAgINcGF5b3V0U3RhdHVzXwkApAMBBQhwYXlvdXRJZAEebWFrZVBheW91dEFkZGl0aW9uYWxSZXdhcmRzS2V5AQhwYXlvdXRJZAkArAICAhhwYXlvdXRBZGRpdGlvbmFsUmV3YXJkc18JAKQDAQUIcGF5b3V0SWQBDWdldExhc3RQYXlvdXQACQERQGV4dHJOYXRpdmUoMTA1MCkCBQR0aGlzBQ1MYXN0UGF5b3V0S2V5AQ1nZXRQYXlvdXREYXRhAQhwYXlvdXRJZAQMcGF5b3V0U3RyaW5nCQERQGV4dHJOYXRpdmUoMTA1OCkBCQERbWFrZVBheW91dERhdGFLZXkBBQhwYXlvdXRJZAQOcGF5b3V0RGF0YUxpc3QJALUJAgUMcGF5b3V0U3RyaW5nAgFfBAtzdGFydEhlaWdodAkBDXBhcnNlSW50VmFsdWUBCQCRAwIFDnBheW91dERhdGFMaXN0AAAECWVuZEhlaWdodAkBDXBhcnNlSW50VmFsdWUBCQCRAwIFDnBheW91dERhdGFMaXN0AAEEC3dhdmVzQW1vdW50CQENcGFyc2VJbnRWYWx1ZQEJAJEDAgUOcGF5b3V0RGF0YUxpc3QAAgQQd2F2ZXNEYW9McEFtb3VudAkBDXBhcnNlSW50VmFsdWUBCQCRAwIFDnBheW91dERhdGFMaXN0AAMJAJYKBAULc3RhcnRIZWlnaHQFCWVuZEhlaWdodAULd2F2ZXNBbW91bnQFEHdhdmVzRGFvTHBBbW91bnQBD2dldFBheW91dFN0YXR1cwEIcGF5b3V0SWQJAQt2YWx1ZU9yRWxzZQIJAJ8IAQkBE21ha2VQYXlvdXRTdGF0dXNLZXkBBQhwYXlvdXRJZAURUGF5b3V0RW1wdHlTdGF0dXMBGmdldFBheW91dEFkZGl0aW9uYWxSZXdhcmRzAQhwYXlvdXRJZAkBC3ZhbHVlT3JFbHNlAgkAnwgBCQEebWFrZVBheW91dEFkZGl0aW9uYWxSZXdhcmRzS2V5AQUIcGF5b3V0SWQAAAcBaQEOaW5pdGlhdGVQYXlvdXQFCHBheW91dElkC3N0YXJ0SGVpZ2h0CWVuZEhlaWdodAt3YXZlc0Ftb3VudBB3YXZlc0Rhb0xwQW1vdW50AwkBAiE9AggFAWkGY2FsbGVyBQ1DYWxsZXJBZGRyZXNzCQACAQINQWNjZXNzIGRlbmllZAMJAQIhPQIJAJADAQgFAWkIcGF5bWVudHMAAAkAAgECF1BheW1lbnRzIGFyZSBwcm9oaWJpdGVkBApsYXN0UGF5b3V0CQENZ2V0TGFzdFBheW91dAADCQECIT0CBQhwYXlvdXRJZAkAZAIFCmxhc3RQYXlvdXQAAQkAAgEJAKwCAgkArAICCQCsAgICEFdyb25nIHBheW91dElkOiAJAKQDAQUIcGF5b3V0SWQCDSwgc2hvdWxkIGJlOiAJAKQDAQkAZAIFCmxhc3RQYXlvdXQAAQQQbGFzdFBheW91dFN0YXR1cwkBD2dldFBheW91dFN0YXR1cwEFCmxhc3RQYXlvdXQDCQECIT0CBRBsYXN0UGF5b3V0U3RhdHVzBRVQYXlvdXRDb21wbGV0ZWRTdGF0dXMJAAIBCQCsAgIJAKwCAgINTGFzdCBwYXlvdXQ6IAkApAMBBQpsYXN0UGF5b3V0AhIgd2FzIG5vdCBjb21wbGV0ZWQECyR0MDI2MjAyNzIzCQENZ2V0UGF5b3V0RGF0YQEFCmxhc3RQYXlvdXQED2xhc3RTdGFydEhlaWdodAgFCyR0MDI2MjAyNzIzAl8xBA1sYXN0RW5kSGVpZ2h0CAULJHQwMjYyMDI3MjMCXzIED2xhc3RXYXZlc0Ftb3VudAgFCyR0MDI2MjAyNzIzAl8zBBRsYXN0V2F2ZXNEYW9McEFtb3VudAgFCyR0MDI2MjAyNzIzAl80AwkBAiE9AgULc3RhcnRIZWlnaHQJAGQCBQ1sYXN0RW5kSGVpZ2h0AAEJAAIBCQCsAgIJAKwCAgkArAICAhNXcm9uZyBzdGFydEhlaWdodDogCQCkAwEFC3N0YXJ0SGVpZ2h0Ag0sIHNob3VsZCBiZTogCQCkAwEJAGQCBQ1sYXN0RW5kSGVpZ2h0AAEDCQBmAgULc3RhcnRIZWlnaHQFCWVuZEhlaWdodAkAAgEJAKwCAgkArAICCQCsAgICC2VuZEhlaWdodDogCQCkAwEFCWVuZEhlaWdodAIYIGxlc3MgdGhhbiBzdGFydEhlaWdodDogCQCkAwEFC3N0YXJ0SGVpZ2h0AwkAZwIAAAULd2F2ZXNBbW91bnQJAAIBCQCsAgIJAKwCAgITV3Jvbmcgd2F2ZXNBbW91bnQ6IAkApAMBBQt3YXZlc0Ftb3VudAIULCBzaG91bGQgYmUgcG9zaXRpdmUDCQBmAgAABRB3YXZlc0Rhb0xwQW1vdW50CQACAQkArAICCQCsAgICGFdyb25nIHdhdmVzRGFvTHBBbW91bnQ6IAkApAMBBRB3YXZlc0Rhb0xwQW1vdW50AhwsIHNob3VsZCBiZSBwb3NpdGl2ZSBvciB6ZXJvBBphdmFpbGFibGVXYXZlc0Rhb0xwVG9DbGFpbQkBC3ZhbHVlT3JFbHNlAgkAmggCBRZXYXZlc0Rhb0ZhY3RvcnlBZGRyZXNzCQCsAgICESVzJXNfX2F2YWlsYWJsZV9fCQClCAEFBHRoaXMAAAQad2F2ZXNEYW9OZXh0QmxvY2tUb1Byb2Nlc3MJARFAZXh0ck5hdGl2ZSgxMDUwKQIFFldhdmVzRGFvRmFjdG9yeUFkZHJlc3MCFiVzX19uZXh0QmxvY2tUb1Byb2Nlc3MEDXdhdmVzRGxwQ2xhaW0DAwkAZgIFGmF2YWlsYWJsZVdhdmVzRGFvTHBUb0NsYWltAAAJAGcCCQBkAgUad2F2ZXNEYW9OZXh0QmxvY2tUb1Byb2Nlc3MFEkJsb2Nrc0JhdGNoTWF4U2l6ZQUGSGVpZ2h0BwkA/AcEBRZXYXZlc0Rhb0ZhY3RvcnlBZGRyZXNzAgdjbGFpbUxQBQNuaWwFA25pbAUEdW5pdAMJAAACBQ13YXZlc0RscENsYWltBQ13YXZlc0RscENsYWltBBhjdXJyZW50QWRkaXRpb25hbFJld2FyZHMJARpnZXRQYXlvdXRBZGRpdGlvbmFsUmV3YXJkcwEFCHBheW91dElkBBB0b3RhbFdhdmVzQW1vdW50CQBkAgUYY3VycmVudEFkZGl0aW9uYWxSZXdhcmRzBQt3YXZlc0Ftb3VudAQNbWluZXJXYXZlc0ZlZQkAawMFEHRvdGFsV2F2ZXNBbW91bnQFCE1pbmVyRmVlAGQEEm1haW50YWluZXJXYXZlc0ZlZQkAaQIFDW1pbmVyV2F2ZXNGZWUAAgQScHV6emxlVGVhbVdhdmVzRmVlCQBlAgUNbWluZXJXYXZlc0ZlZQUSbWFpbnRhaW5lcldhdmVzRmVlBBJsZXNzb3JzV2F2ZXNBbW91bnQJAGUCCQBlAgUQdG90YWxXYXZlc0Ftb3VudAUSbWFpbnRhaW5lcldhdmVzRmVlBRJwdXp6bGVUZWFtV2F2ZXNGZWUEEm1pbmVyV2F2ZXNEYW9McEZlZQkAawMFEHdhdmVzRGFvTHBBbW91bnQFCE1pbmVyRmVlAGQEF21haW50YWluZXJXYXZlc0Rhb0xwRmVlCQBpAgUSbWluZXJXYXZlc0Rhb0xwRmVlAAIEF3B1enpsZVRlYW1XYXZlc0Rhb0xwRmVlCQBlAgUSbWluZXJXYXZlc0Rhb0xwRmVlBRdtYWludGFpbmVyV2F2ZXNEYW9McEZlZQQXbGVzc29yc1dhdmVzRGFvTHBBbW91bnQJAGUCCQBlAgUQd2F2ZXNEYW9McEFtb3VudAUXbWFpbnRhaW5lcldhdmVzRGFvTHBGZWUFF3B1enpsZVRlYW1XYXZlc0Rhb0xwRmVlBA1uZXdQYXlvdXREYXRhCQC5CQIJAMwIAgkApAMBBQtzdGFydEhlaWdodAkAzAgCCQCkAwEFCWVuZEhlaWdodAkAzAgCCQCkAwEFEmxlc3NvcnNXYXZlc0Ftb3VudAkAzAgCCQCkAwEFF2xlc3NvcnNXYXZlc0Rhb0xwQW1vdW50BQNuaWwCAV8JAMwIAgkBDlNjcmlwdFRyYW5zZmVyAwURTWFpbnRhaW5lckFkZHJlc3MFEm1haW50YWluZXJXYXZlc0ZlZQUEdW5pdAkAzAgCCQEOU2NyaXB0VHJhbnNmZXIDBRFNYWludGFpbmVyQWRkcmVzcwUXbWFpbnRhaW5lcldhdmVzRGFvTHBGZWUFCldhdmVzRGxwSWQJAMwIAgkBDlNjcmlwdFRyYW5zZmVyAwURUHV6emxlVGVhbUFkZHJlc3MFEnB1enpsZVRlYW1XYXZlc0ZlZQUEdW5pdAkAzAgCCQEOU2NyaXB0VHJhbnNmZXIDBRFQdXp6bGVUZWFtQWRkcmVzcwUXcHV6emxlVGVhbVdhdmVzRGFvTHBGZWUFCldhdmVzRGxwSWQJAMwIAgkBDEludGVnZXJFbnRyeQIFDUxhc3RQYXlvdXRLZXkFCHBheW91dElkCQDMCAIJAQtTdHJpbmdFbnRyeQIJARFtYWtlUGF5b3V0RGF0YUtleQEFCHBheW91dElkBQ1uZXdQYXlvdXREYXRhCQDMCAIJAQxJbnRlZ2VyRW50cnkCCQETbWFrZVBheW91dFN0YXR1c0tleQEFCHBheW91dElkBRVQYXlvdXRJbml0aWF0ZWRTdGF0dXMFA25pbAkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgFpAQRzd2FwBQhwYXlvdXRJZAhzd2FwRnJvbQhhbW91bnRJbgVyb3V0ZQxtaW5Ub1JlY2VpdmUDCQECIT0CCAUBaQZjYWxsZXIFDUNhbGxlckFkZHJlc3MJAAIBAg1BY2Nlc3MgZGVuaWVkAwkBAiE9AgkAkAMBCAUBaQhwYXltZW50cwAACQACAQIXUGF5bWVudHMgYXJlIHByb2hpYml0ZWQECmxhc3RQYXlvdXQJAQ1nZXRMYXN0UGF5b3V0AAMJAQIhPQIFCmxhc3RQYXlvdXQFCHBheW91dElkCQACAQkArAICCQCsAgIJAKwCAgIQV3JvbmcgcGF5b3V0SWQ6IAkApAMBBQhwYXlvdXRJZAINLCBzaG91bGQgYmU6IAkApAMBBQpsYXN0UGF5b3V0BAxwYXlvdXRTdGF0dXMJAQ9nZXRQYXlvdXRTdGF0dXMBBQhwYXlvdXRJZAMJAQIhPQIFDHBheW91dFN0YXR1cwUVUGF5b3V0SW5pdGlhdGVkU3RhdHVzCQACAQkArAICCQCsAgICFVdyb25nIHBheW91dCBzdGF0dXM6IAkApAMBBQxwYXlvdXRTdGF0dXMCDSwgc2hvdWxkIGJlIDEECyR0MDU3NjM2MDEyAwkAAAIFCHN3YXBGcm9tBQdXYXZlc0lkCQCUCgIICQDvBwEFBHRoaXMJYXZhaWxhYmxlBQR1bml0BAdhc3NldElkCQDZBAEFCHN3YXBGcm9tCQCUCgIJAPAHAgUEdGhpcwUHYXNzZXRJZAUHYXNzZXRJZAQTYmFsYW5jZUluQmVmb3JlU3dhcAgFCyR0MDU3NjM2MDEyAl8xBApzd2FwRnJvbUlkCAULJHQwNTc2MzYwMTICXzIECnN3YXBJbnZva2UJAPwHBAUXUHV6emxlQWdncmVnYXRvckFkZHJlc3MCEHN3YXBXaXRoUmVmZXJyYWwJAMwIAgUFcm91dGUJAMwIAgUMbWluVG9SZWNlaXZlCQDMCAICCnB1enpsZW5vZGUFA25pbAkAzAgCCQEPQXR0YWNoZWRQYXltZW50AgUKc3dhcEZyb21JZAUIYW1vdW50SW4FA25pbAMJAAACBQpzd2FwSW52b2tlBQpzd2FwSW52b2tlBBJiYWxhbmNlSW5BZnRlclN3YXADCQAAAgUIc3dhcEZyb20FB1dhdmVzSWQICQDvBwEFBHRoaXMJYXZhaWxhYmxlCQDwBwIFBHRoaXMJAQV2YWx1ZQEFCnN3YXBGcm9tSWQEBnJlZnVuZAkAZQIFEmJhbGFuY2VJbkFmdGVyU3dhcAkAZQIFE2JhbGFuY2VJbkJlZm9yZVN3YXAFCGFtb3VudEluAwkAZgIFBnJlZnVuZAAKCQACAQkArAICAhxSb2xsYmFjayBhZ2dyZWdhdG9yIHJlZnVuZDogCQCkAwEFBnJlZnVuZAUDbmlsCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuAWkBEGRpc3RyaWJ1dGVUb2tlbnMFCHBheW91dElkCnJlY2lwaWVudHMHYW1vdW50cwZhc3NldHMKYXR0YWNobWVudAMJAQIhPQIIBQFpBmNhbGxlcgUNQ2FsbGVyQWRkcmVzcwkAAgECDUFjY2VzcyBkZW5pZWQDCQECIT0CCQCQAwEIBQFpCHBheW1lbnRzAAAJAAIBAhdQYXltZW50cyBhcmUgcHJvaGliaXRlZAQKbGFzdFBheW91dAkBDWdldExhc3RQYXlvdXQAAwkBAiE9AgUKbGFzdFBheW91dAUIcGF5b3V0SWQJAAIBCQCsAgIJAKwCAgkArAICAhBXcm9uZyBwYXlvdXRJZDogCQCkAwEFCHBheW91dElkAg0sIHNob3VsZCBiZTogCQCkAwEFCmxhc3RQYXlvdXQEDHBheW91dFN0YXR1cwkBD2dldFBheW91dFN0YXR1cwEFCHBheW91dElkAwkBAiE9AgUMcGF5b3V0U3RhdHVzBRVQYXlvdXRJbml0aWF0ZWRTdGF0dXMJAAIBCQCsAgIJAKwCAgIVV3JvbmcgcGF5b3V0IHN0YXR1czogCQCkAwEFDHBheW91dFN0YXR1cwINLCBzaG91bGQgYmUgMQQOcmVjaXBpZW50c1NpemUJAJADAQUKcmVjaXBpZW50cwQLYW1vdW50c1NpemUJAJADAQUHYW1vdW50cwQKYXNzZXRzU2l6ZQkAkAMBBQZhc3NldHMDAwkBAiE9AgUOcmVjaXBpZW50c1NpemUFC2Ftb3VudHNTaXplBgkBAiE9AgUOcmVjaXBpZW50c1NpemUFCmFzc2V0c1NpemUJAAIBCQCsAgIJAKwCAgkArAICCQCsAgIJAKwCAgIXV3JvbmcgcmVjaXBpZW50cyBzaXplOiAJAKQDAQUOcmVjaXBpZW50c1NpemUCECwgYW1vdW50cyBzaXplOiAJAKQDAQULYW1vdW50c1NpemUCDywgYXNzZXRzIHNpemU6IAkApAMBBQphc3NldHNTaXplAwkAAAIFDnJlY2lwaWVudHNTaXplAAAJAAIBAiNSZWNpcGllbnRzIGxpc3Qgc2hvdWxkIG5vdCBiZSBlbXB0eQMJAGYCBQ5yZWNpcGllbnRzU2l6ZQUWUmVjaXBpZW50c0JhdGNoTWF4U2l6ZQkAAgEJAKwCAgkArAICCQCsAgICG1Nob3VsZCBiZSBub3QgZ3JlYXRlciB0aGFuIAkApAMBBRZSZWNpcGllbnRzQmF0Y2hNYXhTaXplAhYgcmVjaXBpZW50cywgY3VycmVudDogCQCkAwEFDnJlY2lwaWVudHNTaXplBAltYWdpY0J5dGUJAMoBAgkAmgMBAAEABwQLY2hhaW5JZEJ5dGUJAMoBAgkAmgMBBQdDaGFpbklkAAcEDWFkZHJlc3NQcmVmaXgJAMsBAgUJbWFnaWNCeXRlBQtjaGFpbklkQnl0ZQoBE3NjcmlwdFRyYW5zZmVyc0ZvbGQCBWFjY3VtBWluZGV4AwkAZwIFBWluZGV4BQ5yZWNpcGllbnRzU2l6ZQUFYWNjdW0EDXB1YmxpY0tleUhhc2gJAJEDAgUKcmVjaXBpZW50cwUFaW5kZXgEC2FkZHJlc3NEYXRhCQDLAQIFDWFkZHJlc3NQcmVmaXgFDXB1YmxpY0tleUhhc2gED2FkZHJlc3NDaGVja3N1bQkAyQECCQD1AwEJAPYDAQULYWRkcmVzc0RhdGEABAQJcmVjaXBpZW50CQEHQWRkcmVzcwEJAMsBAgULYWRkcmVzc0RhdGEFD2FkZHJlc3NDaGVja3N1bQQGYW1vdW50CQCRAwIFB2Ftb3VudHMFBWluZGV4BAphc3NldEluZGV4CQCRAwIFBmFzc2V0cwUFaW5kZXgEB2Fzc2V0SWQJARFAZXh0ck5hdGl2ZSgxMDUyKQIFD1NldHRpbmdzQWRkcmVzcwkArAICAghhc3NldElkXwkApAMBBQphc3NldEluZGV4BAVhc3NldAMJAAACBQdhc3NldElkAQAFBHVuaXQFB2Fzc2V0SWQJAM0IAgUFYWNjdW0JAQ5TY3JpcHRUcmFuc2ZlcgMFCXJlY2lwaWVudAUGYW1vdW50BQVhc3NldAQHaW5kZXhlcwkAzAgCAAAJAMwIAgABCQDMCAIAAgkAzAgCAAMJAMwIAgAECQDMCAIABQkAzAgCAAYJAMwIAgAHCQDMCAIACAkAzAgCAAkJAMwIAgAKCQDMCAIACwkAzAgCAAwJAMwIAgANCQDMCAIADgkAzAgCAA8JAMwIAgAQCQDMCAIAEQkAzAgCABIJAMwIAgATCQDMCAIAFAkAzAgCABUJAMwIAgAWCQDMCAIAFwkAzAgCABgJAMwIAgAZCQDMCAIAGgkAzAgCABsJAMwIAgAcCQDMCAIAHQkAzAgCAB4JAMwIAgAfCQDMCAIAIAkAzAgCACEJAMwIAgAiCQDMCAIAIwkAzAgCACQJAMwIAgAlCQDMCAIAJgkAzAgCACcJAMwIAgAoCQDMCAIAKQkAzAgCACoJAMwIAgArCQDMCAIALAkAzAgCAC0JAMwIAgAuCQDMCAIALwkAzAgCADAJAMwIAgAxCQDMCAIAMgkAzAgCADMJAMwIAgA0CQDMCAIANQkAzAgCADYJAMwIAgA3CQDMCAIAOAkAzAgCADkJAMwIAgA6CQDMCAIAOwkAzAgCADwJAMwIAgA9CQDMCAIAPgkAzAgCAD8JAMwIAgBACQDMCAIAQQkAzAgCAEIJAMwIAgBDCQDMCAIARAkAzAgCAEUJAMwIAgBGCQDMCAIARwkAzAgCAEgJAMwIAgBJCQDMCAIASgkAzAgCAEsJAMwIAgBMCQDMCAIATQkAzAgCAE4JAMwIAgBPCQDMCAIAUAkAzAgCAFEJAMwIAgBSCQDMCAIAUwkAzAgCAFQJAMwIAgBVCQDMCAIAVgkAzAgCAFcJAMwIAgBYCQDMCAIAWQkAzAgCAFoJAMwIAgBbCQDMCAIAXAkAzAgCAF0JAMwIAgBeCQDMCAIAXwkAzAgCAGAJAMwIAgBhCQDMCAIAYgkAzAgCAGMFA25pbAoAAiRsBQdpbmRleGVzCgACJHMJAJADAQUCJGwKAAUkYWNjMAUDbmlsCgEFJGYwXzECAiRhAiRpAwkAZwIFAiRpBQIkcwUCJGEJARNzY3JpcHRUcmFuc2ZlcnNGb2xkAgUCJGEJAJEDAgUCJGwFAiRpCgEFJGYwXzICAiRhAiRpAwkAZwIFAiRpBQIkcwUCJGEJAAIBAhVMaXN0IHNpemUgZXhjZWVkcyAxMDAJAQUkZjBfMgIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIFBSRhY2MwAAAAAQACAAMABAAFAAYABwAIAAkACgALAAwADQAOAA8AEAARABIAEwAUABUAFgAXABgAGQAaABsAHAAdAB4AHwAgACEAIgAjACQAJQAmACcAKAApACoAKwAsAC0ALgAvADAAMQAyADMANAA1ADYANwA4ADkAOgA7ADwAPQA+AD8AQABBAEIAQwBEAEUARgBHAEgASQBKAEsATABNAE4ATwBQAFEAUgBTAFQAVQBWAFcAWABZAFoAWwBcAF0AXgBfAGAAYQBiAGMAZAFpAQ5maW5hbGl6ZVBheW91dAEIcGF5b3V0SWQDCQECIT0CCAUBaQZjYWxsZXIFDUNhbGxlckFkZHJlc3MJAAIBAg1BY2Nlc3MgZGVuaWVkAwkBAiE9AgkAkAMBCAUBaQhwYXltZW50cwABCQACAQInQXQgbGVhc3Qgb25lIHBheW1lbnQgc2hvdWxkIGJlIGF0dGFjaGVkAwkBAiE9AggJAJEDAggFAWkIcGF5bWVudHMAAAdhc3NldElkBQR1bml0CQACAQIaT25seSB3YXZlcyBjYW4gYmUgYXR0YWNoZWQECmxhc3RQYXlvdXQJAQ1nZXRMYXN0UGF5b3V0AAMJAQIhPQIFCmxhc3RQYXlvdXQFCHBheW91dElkCQACAQkArAICCQCsAgIJAKwCAgIQV3JvbmcgcGF5b3V0SWQ6IAkApAMBBQhwYXlvdXRJZAINLCBzaG91bGQgYmU6IAkApAMBBQpsYXN0UGF5b3V0BAxwYXlvdXRTdGF0dXMJAQ9nZXRQYXlvdXRTdGF0dXMBBQpsYXN0UGF5b3V0AwkBAiE9AgUMcGF5b3V0U3RhdHVzBRVQYXlvdXRJbml0aWF0ZWRTdGF0dXMJAAIBCQCsAgIJAKwCAgIVV3JvbmcgcGF5b3V0IHN0YXR1czogCQCkAwEFDHBheW91dFN0YXR1cwIOLCBzaG91bGQgYmU6IDEJAMwIAgkBDEludGVnZXJFbnRyeQIJARNtYWtlUGF5b3V0U3RhdHVzS2V5AQUKbGFzdFBheW91dAUVUGF5b3V0Q29tcGxldGVkU3RhdHVzBQNuaWwBaQEUYWRkQWRkaXRpb25hbFJld2FyZHMAAwkBAiE9AgkAkAMBCAUBaQhwYXltZW50cwABCQACAQInQXQgbGVhc3Qgb25lIHBheW1lbnQgc2hvdWxkIGJlIGF0dGFjaGVkAwkBAiE9AggJAJEDAggFAWkIcGF5bWVudHMAAAdhc3NldElkBQR1bml0CQACAQIaT25seSB3YXZlcyBjYW4gYmUgYXR0YWNoZWQECmxhc3RQYXlvdXQJAQ1nZXRMYXN0UGF5b3V0AAQQbGFzdFBheW91dFN0YXR1cwkBD2dldFBheW91dFN0YXR1cwEFCmxhc3RQYXlvdXQDCQECIT0CBRBsYXN0UGF5b3V0U3RhdHVzBRVQYXlvdXRDb21wbGV0ZWRTdGF0dXMJAAIBCQCsAgIJAKwCAgINTGFzdCBwYXlvdXQ6IAkApAMBBQpsYXN0UGF5b3V0AhIgd2FzIG5vdCBjb21wbGV0ZWQEDG5leHRQYXlvdXRJZAkAZAIFCmxhc3RQYXlvdXQAAQQYY3VycmVudEFkZGl0aW9uYWxSZXdhcmRzCQEaZ2V0UGF5b3V0QWRkaXRpb25hbFJld2FyZHMBBQxuZXh0UGF5b3V0SWQEFG5ld0FkZGl0aW9uYWxSZXdhcmRzCQBkAgUYY3VycmVudEFkZGl0aW9uYWxSZXdhcmRzCAkAkQMCCAUBaQhwYXltZW50cwAABmFtb3VudAkAzAgCCQEMSW50ZWdlckVudHJ5AgkBHm1ha2VQYXlvdXRBZGRpdGlvbmFsUmV3YXJkc0tleQEFDG5leHRQYXlvdXRJZAUUbmV3QWRkaXRpb25hbFJld2FyZHMFA25pbAFpARNhZGRNYXNzVHJhbnNmZXJGZWVzAAMJAQIhPQIJAJADAQgFAWkIcGF5bWVudHMAAQkAAgECJ0F0IGxlYXN0IG9uZSBwYXltZW50IHNob3VsZCBiZSBhdHRhY2hlZAMJAQIhPQIICQCRAwIIBQFpCHBheW1lbnRzAAAHYXNzZXRJZAUEdW5pdAkAAgECGk9ubHkgd2F2ZXMgY2FuIGJlIGF0dGFjaGVkBBdjdXJyZW50TWFzc1RyYW5zZmVyRmVlcwkBC3ZhbHVlT3JFbHNlAgkAnwgBBRNNYXNzVHJhbnNmZXJGZWVzS2V5AAAEE25ld01hc3NUcmFuc2ZlckZlZXMJAGQCBRdjdXJyZW50TWFzc1RyYW5zZmVyRmVlcwgJAJEDAggFAWkIcGF5bWVudHMAAAZhbW91bnQJAMwIAgkBDEludGVnZXJFbnRyeQIFE01hc3NUcmFuc2ZlckZlZXNLZXkFE25ld01hc3NUcmFuc2ZlckZlZXMFA25pbAFpARh3aXRoZHJhd01hc3NUcmFuc2ZlckZlZXMAAwkBAiE9AggFAWkGY2FsbGVyBRFNYWludGFpbmVyQWRkcmVzcwkAAgECDUFjY2VzcyBkZW5pZWQDCQECIT0CCQCQAwEIBQFpCHBheW1lbnRzAAAJAAIBAhdQYXltZW50cyBhcmUgcHJvaGliaXRlZAQXY3VycmVudE1hc3NUcmFuc2ZlckZlZXMJAQt2YWx1ZU9yRWxzZQIJAJ8IAQUTTWFzc1RyYW5zZmVyRmVlc0tleQAAAwkAAAIFF2N1cnJlbnRNYXNzVHJhbnNmZXJGZWVzAAAJAAIBAhNOb3RoaW5nIHRvIHdpdGhkcmF3CQDMCAIJAQxJbnRlZ2VyRW50cnkCBRNNYXNzVHJhbnNmZXJGZWVzS2V5AAAJAMwIAgkBDlNjcmlwdFRyYW5zZmVyAwURTWFpbnRhaW5lckFkZHJlc3MFF2N1cnJlbnRNYXNzVHJhbnNmZXJGZWVzBQR1bml0BQNuaWwBAnR4AQZ2ZXJpZnkABAckbWF0Y2gwBQJ0eAMJAAECBQckbWF0Y2gwAhdNYXNzVHJhbnNmZXJUcmFuc2FjdGlvbgQGbWFzc1R4BQckbWF0Y2gwCQDIEwMIBQZtYXNzVHgJYm9keUJ5dGVzCQCRAwIIBQZtYXNzVHgGcHJvb2ZzAAABIBf5r1FS82Z+mjmsTfGderqq/fweMToIpjHdE68W448DCQDIEwMIBQJ0eAlib2R5Qnl0ZXMJAJEDAggFAnR4BnByb29mcwAAASA2GsDjKZgTxa/YnKuG/MKmgMlHa5/5oYxSDcNpEI/KGGzE01E=", "chainId": 87, "height": 4034911, "applicationStatus": "succeeded", "spentComplexity": 0 } View: original | compacted Prev: CJg54VxcuL9VMK3i9Loj1acWhiUwH9zqVaN9dQG88nBL Next: 5ovLnpNu9M5ipxknLn33RyM8TfZd5ajEGE9ZRPaJcKJb Diff:
OldNewDifferences
152152 let balanceInAfterSwap = if ((swapFrom == WavesId))
153153 then wavesBalance(this).available
154154 else assetBalance(this, value(swapFromId))
155- if ((balanceInAfterSwap != (balanceInBeforeSwap - amountIn)))
156- then throw("Rollback aggregator error")
155+ let refund = (balanceInAfterSwap - (balanceInBeforeSwap - amountIn))
156+ if ((refund > 10))
157+ then throw(("Rollback aggregator refund: " + toString(refund)))
157158 else nil
158159 }
159160 else throw("Strict value is not equal to itself.")
Full:
OldNewDifferences
11 {-# STDLIB_VERSION 6 #-}
22 {-# SCRIPT_TYPE ACCOUNT #-}
33 {-# CONTENT_TYPE DAPP #-}
44 let MinerFee = 5
55
66 let PayoutEmptyStatus = 0
77
88 let PayoutInitiatedStatus = 1
99
1010 let PayoutCompletedStatus = 2
1111
1212 let BlocksBatchMaxSize = 10
1313
1414 let RecipientsBatchMaxSize = 100
1515
1616 let Height = height
1717
1818 let ChainId = 87
1919
2020 let WavesDlpId = base58'HYogWffUjS8Uw4bYA1Dn3qrGmJerMqkf139aJcHhk8yq'
2121
2222 let CallerAddress = Address(base58'3PFBtsmUJSVWHUaoYMDgvLygcmczJzYQBEe')
2323
2424 let WavesDaoFactoryAddress = Address(base58'3PJVm7xLPabmYohbnvdgGDYHMwnZxF2x18m')
2525
2626 let SettingsAddress = Address(base58'3P7Jqt9meoym7YhUTEXe3nRYXVe8kuCuMSr')
2727
2828 let PuzzleAggregatorAddress = Address(base58'3PGFHzVGT4NTigwCKP1NcwoXkodVZwvBuuU')
2929
3030 let MaintainerAddress = Address(base58'3PN2JRxJxjjZo1YJGyQrxdhoEbijc24BMY3')
3131
3232 let PuzzleTeamAddress = Address(base58'3PFxoYQ6ZFp8sLkrbeJEyaFFyKpHifV2jRS')
3333
3434 let WavesId = "WAVES"
3535
3636 let LastPayoutKey = "lastPayout"
3737
3838 let MassTransferFeesKey = "massTransferFees"
3939
4040 func makePayoutDataKey (payoutId) = ("payoutData_" + toString(payoutId))
4141
4242
4343 func makePayoutStatusKey (payoutId) = ("payoutStatus_" + toString(payoutId))
4444
4545
4646 func makePayoutAdditionalRewardsKey (payoutId) = ("payoutAdditionalRewards_" + toString(payoutId))
4747
4848
4949 func getLastPayout () = getIntegerValue(this, LastPayoutKey)
5050
5151
5252 func getPayoutData (payoutId) = {
5353 let payoutString = getStringValue(makePayoutDataKey(payoutId))
5454 let payoutDataList = split(payoutString, "_")
5555 let startHeight = parseIntValue(payoutDataList[0])
5656 let endHeight = parseIntValue(payoutDataList[1])
5757 let wavesAmount = parseIntValue(payoutDataList[2])
5858 let wavesDaoLpAmount = parseIntValue(payoutDataList[3])
5959 $Tuple4(startHeight, endHeight, wavesAmount, wavesDaoLpAmount)
6060 }
6161
6262
6363 func getPayoutStatus (payoutId) = valueOrElse(getInteger(makePayoutStatusKey(payoutId)), PayoutEmptyStatus)
6464
6565
6666 func getPayoutAdditionalRewards (payoutId) = valueOrElse(getInteger(makePayoutAdditionalRewardsKey(payoutId)), 0)
6767
6868
6969 @Callable(i)
7070 func initiatePayout (payoutId,startHeight,endHeight,wavesAmount,wavesDaoLpAmount) = if ((i.caller != CallerAddress))
7171 then throw("Access denied")
7272 else if ((size(i.payments) != 0))
7373 then throw("Payments are prohibited")
7474 else {
7575 let lastPayout = getLastPayout()
7676 if ((payoutId != (lastPayout + 1)))
7777 then throw(((("Wrong payoutId: " + toString(payoutId)) + ", should be: ") + toString((lastPayout + 1))))
7878 else {
7979 let lastPayoutStatus = getPayoutStatus(lastPayout)
8080 if ((lastPayoutStatus != PayoutCompletedStatus))
8181 then throw((("Last payout: " + toString(lastPayout)) + " was not completed"))
8282 else {
8383 let $t026202723 = getPayoutData(lastPayout)
8484 let lastStartHeight = $t026202723._1
8585 let lastEndHeight = $t026202723._2
8686 let lastWavesAmount = $t026202723._3
8787 let lastWavesDaoLpAmount = $t026202723._4
8888 if ((startHeight != (lastEndHeight + 1)))
8989 then throw(((("Wrong startHeight: " + toString(startHeight)) + ", should be: ") + toString((lastEndHeight + 1))))
9090 else if ((startHeight > endHeight))
9191 then throw(((("endHeight: " + toString(endHeight)) + " less than startHeight: ") + toString(startHeight)))
9292 else if ((0 >= wavesAmount))
9393 then throw((("Wrong wavesAmount: " + toString(wavesAmount)) + ", should be positive"))
9494 else if ((0 > wavesDaoLpAmount))
9595 then throw((("Wrong wavesDaoLpAmount: " + toString(wavesDaoLpAmount)) + ", should be positive or zero"))
9696 else {
9797 let availableWavesDaoLpToClaim = valueOrElse(getInteger(WavesDaoFactoryAddress, ("%s%s__available__" + toString(this))), 0)
9898 let wavesDaoNextBlockToProcess = getIntegerValue(WavesDaoFactoryAddress, "%s__nextBlockToProcess")
9999 let wavesDlpClaim = if (if ((availableWavesDaoLpToClaim > 0))
100100 then ((wavesDaoNextBlockToProcess + BlocksBatchMaxSize) >= Height)
101101 else false)
102102 then invoke(WavesDaoFactoryAddress, "claimLP", nil, nil)
103103 else unit
104104 if ((wavesDlpClaim == wavesDlpClaim))
105105 then {
106106 let currentAdditionalRewards = getPayoutAdditionalRewards(payoutId)
107107 let totalWavesAmount = (currentAdditionalRewards + wavesAmount)
108108 let minerWavesFee = fraction(totalWavesAmount, MinerFee, 100)
109109 let maintainerWavesFee = (minerWavesFee / 2)
110110 let puzzleTeamWavesFee = (minerWavesFee - maintainerWavesFee)
111111 let lessorsWavesAmount = ((totalWavesAmount - maintainerWavesFee) - puzzleTeamWavesFee)
112112 let minerWavesDaoLpFee = fraction(wavesDaoLpAmount, MinerFee, 100)
113113 let maintainerWavesDaoLpFee = (minerWavesDaoLpFee / 2)
114114 let puzzleTeamWavesDaoLpFee = (minerWavesDaoLpFee - maintainerWavesDaoLpFee)
115115 let lessorsWavesDaoLpAmount = ((wavesDaoLpAmount - maintainerWavesDaoLpFee) - puzzleTeamWavesDaoLpFee)
116116 let newPayoutData = makeString([toString(startHeight), toString(endHeight), toString(lessorsWavesAmount), toString(lessorsWavesDaoLpAmount)], "_")
117117 [ScriptTransfer(MaintainerAddress, maintainerWavesFee, unit), ScriptTransfer(MaintainerAddress, maintainerWavesDaoLpFee, WavesDlpId), ScriptTransfer(PuzzleTeamAddress, puzzleTeamWavesFee, unit), ScriptTransfer(PuzzleTeamAddress, puzzleTeamWavesDaoLpFee, WavesDlpId), IntegerEntry(LastPayoutKey, payoutId), StringEntry(makePayoutDataKey(payoutId), newPayoutData), IntegerEntry(makePayoutStatusKey(payoutId), PayoutInitiatedStatus)]
118118 }
119119 else throw("Strict value is not equal to itself.")
120120 }
121121 }
122122 }
123123 }
124124
125125
126126
127127 @Callable(i)
128128 func swap (payoutId,swapFrom,amountIn,route,minToReceive) = if ((i.caller != CallerAddress))
129129 then throw("Access denied")
130130 else if ((size(i.payments) != 0))
131131 then throw("Payments are prohibited")
132132 else {
133133 let lastPayout = getLastPayout()
134134 if ((lastPayout != payoutId))
135135 then throw(((("Wrong payoutId: " + toString(payoutId)) + ", should be: ") + toString(lastPayout)))
136136 else {
137137 let payoutStatus = getPayoutStatus(payoutId)
138138 if ((payoutStatus != PayoutInitiatedStatus))
139139 then throw((("Wrong payout status: " + toString(payoutStatus)) + ", should be 1"))
140140 else {
141141 let $t057636012 = if ((swapFrom == WavesId))
142142 then $Tuple2(wavesBalance(this).available, unit)
143143 else {
144144 let assetId = fromBase58String(swapFrom)
145145 $Tuple2(assetBalance(this, assetId), assetId)
146146 }
147147 let balanceInBeforeSwap = $t057636012._1
148148 let swapFromId = $t057636012._2
149149 let swapInvoke = invoke(PuzzleAggregatorAddress, "swapWithReferral", [route, minToReceive, "puzzlenode"], [AttachedPayment(swapFromId, amountIn)])
150150 if ((swapInvoke == swapInvoke))
151151 then {
152152 let balanceInAfterSwap = if ((swapFrom == WavesId))
153153 then wavesBalance(this).available
154154 else assetBalance(this, value(swapFromId))
155- if ((balanceInAfterSwap != (balanceInBeforeSwap - amountIn)))
156- then throw("Rollback aggregator error")
155+ let refund = (balanceInAfterSwap - (balanceInBeforeSwap - amountIn))
156+ if ((refund > 10))
157+ then throw(("Rollback aggregator refund: " + toString(refund)))
157158 else nil
158159 }
159160 else throw("Strict value is not equal to itself.")
160161 }
161162 }
162163 }
163164
164165
165166
166167 @Callable(i)
167168 func distributeTokens (payoutId,recipients,amounts,assets,attachment) = if ((i.caller != CallerAddress))
168169 then throw("Access denied")
169170 else if ((size(i.payments) != 0))
170171 then throw("Payments are prohibited")
171172 else {
172173 let lastPayout = getLastPayout()
173174 if ((lastPayout != payoutId))
174175 then throw(((("Wrong payoutId: " + toString(payoutId)) + ", should be: ") + toString(lastPayout)))
175176 else {
176177 let payoutStatus = getPayoutStatus(payoutId)
177178 if ((payoutStatus != PayoutInitiatedStatus))
178179 then throw((("Wrong payout status: " + toString(payoutStatus)) + ", should be 1"))
179180 else {
180181 let recipientsSize = size(recipients)
181182 let amountsSize = size(amounts)
182183 let assetsSize = size(assets)
183184 if (if ((recipientsSize != amountsSize))
184185 then true
185186 else (recipientsSize != assetsSize))
186187 then throw(((((("Wrong recipients size: " + toString(recipientsSize)) + ", amounts size: ") + toString(amountsSize)) + ", assets size: ") + toString(assetsSize)))
187188 else if ((recipientsSize == 0))
188189 then throw("Recipients list should not be empty")
189190 else if ((recipientsSize > RecipientsBatchMaxSize))
190191 then throw(((("Should be not greater than " + toString(RecipientsBatchMaxSize)) + " recipients, current: ") + toString(recipientsSize)))
191192 else {
192193 let magicByte = drop(toBytes(1), 7)
193194 let chainIdByte = drop(toBytes(ChainId), 7)
194195 let addressPrefix = (magicByte + chainIdByte)
195196 func scriptTransfersFold (accum,index) = if ((index >= recipientsSize))
196197 then accum
197198 else {
198199 let publicKeyHash = recipients[index]
199200 let addressData = (addressPrefix + publicKeyHash)
200201 let addressChecksum = take(keccak256(blake2b256(addressData)), 4)
201202 let recipient = Address((addressData + addressChecksum))
202203 let amount = amounts[index]
203204 let assetIndex = assets[index]
204205 let assetId = getBinaryValue(SettingsAddress, ("assetId_" + toString(assetIndex)))
205206 let asset = if ((assetId == base58''))
206207 then unit
207208 else assetId
208209 (accum :+ ScriptTransfer(recipient, amount, asset))
209210 }
210211
211212 let indexes = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99]
212213 let $l = indexes
213214 let $s = size($l)
214215 let $acc0 = nil
215216 func $f0_1 ($a,$i) = if (($i >= $s))
216217 then $a
217218 else scriptTransfersFold($a, $l[$i])
218219
219220 func $f0_2 ($a,$i) = if (($i >= $s))
220221 then $a
221222 else throw("List size exceeds 100")
222223
223224 $f0_2($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($acc0, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10), 11), 12), 13), 14), 15), 16), 17), 18), 19), 20), 21), 22), 23), 24), 25), 26), 27), 28), 29), 30), 31), 32), 33), 34), 35), 36), 37), 38), 39), 40), 41), 42), 43), 44), 45), 46), 47), 48), 49), 50), 51), 52), 53), 54), 55), 56), 57), 58), 59), 60), 61), 62), 63), 64), 65), 66), 67), 68), 69), 70), 71), 72), 73), 74), 75), 76), 77), 78), 79), 80), 81), 82), 83), 84), 85), 86), 87), 88), 89), 90), 91), 92), 93), 94), 95), 96), 97), 98), 99), 100)
224225 }
225226 }
226227 }
227228 }
228229
229230
230231
231232 @Callable(i)
232233 func finalizePayout (payoutId) = if ((i.caller != CallerAddress))
233234 then throw("Access denied")
234235 else if ((size(i.payments) != 1))
235236 then throw("At least one payment should be attached")
236237 else if ((i.payments[0].assetId != unit))
237238 then throw("Only waves can be attached")
238239 else {
239240 let lastPayout = getLastPayout()
240241 if ((lastPayout != payoutId))
241242 then throw(((("Wrong payoutId: " + toString(payoutId)) + ", should be: ") + toString(lastPayout)))
242243 else {
243244 let payoutStatus = getPayoutStatus(lastPayout)
244245 if ((payoutStatus != PayoutInitiatedStatus))
245246 then throw((("Wrong payout status: " + toString(payoutStatus)) + ", should be: 1"))
246247 else [IntegerEntry(makePayoutStatusKey(lastPayout), PayoutCompletedStatus)]
247248 }
248249 }
249250
250251
251252
252253 @Callable(i)
253254 func addAdditionalRewards () = if ((size(i.payments) != 1))
254255 then throw("At least one payment should be attached")
255256 else if ((i.payments[0].assetId != unit))
256257 then throw("Only waves can be attached")
257258 else {
258259 let lastPayout = getLastPayout()
259260 let lastPayoutStatus = getPayoutStatus(lastPayout)
260261 if ((lastPayoutStatus != PayoutCompletedStatus))
261262 then throw((("Last payout: " + toString(lastPayout)) + " was not completed"))
262263 else {
263264 let nextPayoutId = (lastPayout + 1)
264265 let currentAdditionalRewards = getPayoutAdditionalRewards(nextPayoutId)
265266 let newAdditionalRewards = (currentAdditionalRewards + i.payments[0].amount)
266267 [IntegerEntry(makePayoutAdditionalRewardsKey(nextPayoutId), newAdditionalRewards)]
267268 }
268269 }
269270
270271
271272
272273 @Callable(i)
273274 func addMassTransferFees () = if ((size(i.payments) != 1))
274275 then throw("At least one payment should be attached")
275276 else if ((i.payments[0].assetId != unit))
276277 then throw("Only waves can be attached")
277278 else {
278279 let currentMassTransferFees = valueOrElse(getInteger(MassTransferFeesKey), 0)
279280 let newMassTransferFees = (currentMassTransferFees + i.payments[0].amount)
280281 [IntegerEntry(MassTransferFeesKey, newMassTransferFees)]
281282 }
282283
283284
284285
285286 @Callable(i)
286287 func withdrawMassTransferFees () = if ((i.caller != MaintainerAddress))
287288 then throw("Access denied")
288289 else if ((size(i.payments) != 0))
289290 then throw("Payments are prohibited")
290291 else {
291292 let currentMassTransferFees = valueOrElse(getInteger(MassTransferFeesKey), 0)
292293 if ((currentMassTransferFees == 0))
293294 then throw("Nothing to withdraw")
294295 else [IntegerEntry(MassTransferFeesKey, 0), ScriptTransfer(MaintainerAddress, currentMassTransferFees, unit)]
295296 }
296297
297298
298299 @Verifier(tx)
299300 func verify () = match tx {
300301 case massTx: MassTransferTransaction =>
301302 sigVerify_128Kb(massTx.bodyBytes, massTx.proofs[0], base58'2cbCaPrCUFJSpoBfd1vzYB6ZVGRgjRky7u7bAqf2zjgE')
302303 case _ =>
303304 sigVerify_128Kb(tx.bodyBytes, tx.proofs[0], base58'4eCgF1voXpsudbxN4FRQG2NCBP5QVeyJpNsfqMDQvPHh')
304305 }
305306

github/deemru/w8io/6500d08 
47.72 ms