tx · 6ufmP5RMMxW3rVNkZsrigp22Mnx2QtAE6Mzr6XPNJWkU

3MwyBKGZcdChEK9Z55HwLn3A2EgwEJJpqC1:  -0.01700000 Waves

2024.01.15 10:23 [2932331] smart account 3MwyBKGZcdChEK9Z55HwLn3A2EgwEJJpqC1 > SELF 0.00000000 Waves

{ "type": 13, "id": "6ufmP5RMMxW3rVNkZsrigp22Mnx2QtAE6Mzr6XPNJWkU", "fee": 1700000, "feeAssetId": null, "timestamp": 1705303375687, "version": 2, "chainId": 84, "sender": "3MwyBKGZcdChEK9Z55HwLn3A2EgwEJJpqC1", "senderPublicKey": "7c3qLtcJ7EaPS2JDjXv8MBbd4kpyc6R27wcn5GgvZhur", "proofs": [ "4Zj848RHooHheDK3Erp5cyRYUZqXc4soEMALuxMquTPK5ds1YEQfg72mmaqp1N2HMiWM7de14AAAFKqWAzqtdMKQ" ], "script": "base64:BgIdCAISBgoECAEBARIDCgEIEgMKAQgSABIDCgEIEgAhAAxjb250cmFjdEZpbGUCEHZlc3RpbmdfbmVvLnJpZGUAA1NFUAICX18ACElEU19MSVNUCQDMCAIAAAkAzAgCAAEJAMwIAgACCQDMCAIAAwkAzAgCAAQJAMwIAgAFCQDMCAIABgkAzAgCAAcJAMwIAgAICQDMCAIACQkAzAgCAAoJAMwIAgALCQDMCAIADAkAzAgCAA0JAMwIAgAOCQDMCAIADwkAzAgCABAJAMwIAgARCQDMCAIAEgkAzAgCABMJAMwIAgAUCQDMCAIAFQkAzAgCABYJAMwIAgAXCQDMCAIAGAkAzAgCABkJAMwIAgAaCQDMCAIAGwkAzAgCABwJAMwIAgAdBQNuaWwAEU1BWF9WRVNUSU5HX0NPVU5UCQCQAwEFCElEU19MSVNUAQh0aHJvd0VycgEDbXNnCQACAQkArAICCQCsAgIFDGNvbnRyYWN0RmlsZQICOiAFA21zZwETa2V5TWFuYWdlclB1YmxpY0tleQACFCVzX19tYW5hZ2VyUHVibGljS2V5ARZrZXlNYW5hZ2VyVmF1bHRBZGRyZXNzAAIXJXNfX21hbmFnZXJWYXVsdEFkZHJlc3MBHGdldE1hbmFnZXJWYXVsdEFkZHJlc3NPclRoaXMABAckbWF0Y2gwCQCiCAEJARZrZXlNYW5hZ2VyVmF1bHRBZGRyZXNzAAMJAAECBQckbWF0Y2gwAgZTdHJpbmcEAXMFByRtYXRjaDAJARFAZXh0ck5hdGl2ZSgxMDYyKQEFAXMFBHRoaXMBFm1hbmFnZXJQdWJsaWNLZXlPclVuaXQABBNtYW5hZ2VyVmF1bHRBZGRyZXNzCQEcZ2V0TWFuYWdlclZhdWx0QWRkcmVzc09yVGhpcwAEByRtYXRjaDAJAJ0IAgUTbWFuYWdlclZhdWx0QWRkcmVzcwkBE2tleU1hbmFnZXJQdWJsaWNLZXkAAwkAAQIFByRtYXRjaDACBlN0cmluZwQBcwUHJG1hdGNoMAkA2QQBBQFzAwkAAQIFByRtYXRjaDACBFVuaXQFBHVuaXQJAAIBAgtNYXRjaCBlcnJvcgAKa2V5QXNzZXRJZAkAuQkCCQDMCAICAiVzCQDMCAICB2Fzc2V0SWQFA25pbAUDU0VQAA1hc3NldElkU3RyaW5nCQELdmFsdWVPckVsc2UCCQCdCAIFBHRoaXMFCmtleUFzc2V0SWQCBVdBVkVTAAxhc3NldElkQnl0ZXMDCQAAAgUNYXNzZXRJZFN0cmluZwIFV0FWRVMFBHVuaXQJANkEAQUNYXNzZXRJZFN0cmluZwAMa2V5QWRtaW5MaXN0CQC5CQIJAMwIAgICJXMJAMwIAgIQYWRtaW5BZGRyZXNzTGlzdAUDbmlsBQNTRVAACmtleUJhbkxpc3QJALkJAgkAzAgCAgIlcwkAzAgCAgdiYW5MaXN0BQNuaWwFA1NFUAAJYWRtaW5MaXN0BAckbWF0Y2gwCQCdCAIFBHRoaXMFDGtleUFkbWluTGlzdAMJAAECBQckbWF0Y2gwAgZTdHJpbmcEAXMFByRtYXRjaDAJALUJAgUBcwUDU0VQBQNuaWwAB2Jhbkxpc3QECmJhbkxpc3RSYXcJAQt2YWx1ZU9yRWxzZQIJAJ0IAgUEdGhpcwUKa2V5QmFuTGlzdAIAAwkAAAIFCmJhbkxpc3RSYXcCAAUDbmlsCQC9CQIFCmJhbkxpc3RSYXcFA1NFUAEUaXNWYWxpZEFkZHJlc3NTdHJpbmcBDWFkZHJlc3NTdHJpbmcEByRtYXRjaDAJAKYIAQUNYWRkcmVzc1N0cmluZwMJAAECBQckbWF0Y2gwAgdBZGRyZXNzBAFhBQckbWF0Y2gwBgcBDmtleVVzZXJWZXN0aW5nAgt1c2VyQWRkcmVzcwJpZAQGY2hlY2tzCQDMCAIDCQEUaXNWYWxpZEFkZHJlc3NTdHJpbmcBBQt1c2VyQWRkcmVzcwYJAQh0aHJvd0VycgEJALkJAgkAzAgCAhVhZGRyZXNzIGlzIG5vdCB2YWxpZDoJAMwIAgULdXNlckFkZHJlc3MFA25pbAIBIAkAzAgCAwMJAGcCBQJpZAAACQBmAgURTUFYX1ZFU1RJTkdfQ09VTlQFAmlkBwYJAQh0aHJvd0VycgEJALkJAgkAzAgCAhZpZCBzaG91bGQgYmUgbGVzcyB0aGFuCQDMCAIJAKQDAQURTUFYX1ZFU1RJTkdfQ09VTlQJAMwIAgIEZ290OgkAzAgCCQCkAwEFAmlkBQNuaWwCASAFA25pbAMJAAACBQZjaGVja3MFBmNoZWNrcwkAuQkCCQDMCAICBiVzJXMlZAkAzAgCAgd2ZXN0aW5nCQDMCAIFC3VzZXJBZGRyZXNzCQDMCAIJAKQDAQUCaWQFA25pbAUDU0VQCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuARJrZXlVc2VyQWNjdW11bGF0ZWQBC3VzZXJBZGRyZXNzBAZjaGVja3MJAMwIAgMJARRpc1ZhbGlkQWRkcmVzc1N0cmluZwEFC3VzZXJBZGRyZXNzBgkBCHRocm93RXJyAQkAuQkCCQDMCAICFWFkZHJlc3MgaXMgbm90IHZhbGlkOgkAzAgCBQt1c2VyQWRkcmVzcwUDbmlsAgEgBQNuaWwDCQAAAgUGY2hlY2tzBQZjaGVja3MJALkJAgkAzAgCAgQlcyVzCQDMCAICC2FjY3VtdWxhdGVkCQDMCAIFC3VzZXJBZGRyZXNzBQNuaWwFA1NFUAkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgERZm9ybWF0VXNlclZlc3RpbmcDDXZlc3RpbmdBbW91bnQKc3RhcnRCbG9jawpsb2NrTGVuZ3RoBAZjaGVja3MJAMwIAgMJAGcCBQ12ZXN0aW5nQW1vdW50AAAGCQEIdGhyb3dFcnIBAiF2ZXN0aW5nIGFtb3VudCBjYW5ub3QgYmUgbmVnYXRpdmUJAMwIAgMJAGcCBQpzdGFydEJsb2NrAAAGCQEIdGhyb3dFcnIBAh5zdGFydCBibG9jayBjYW5ub3QgYmUgbmVnYXRpdmUJAMwIAgMJAGcCBQpsb2NrTGVuZ3RoAAAGCQEIdGhyb3dFcnIBAh5sb2NrIGxlbmd0aCBjYW5ub3QgYmUgbmVnYXRpdmUFA25pbAMJAAACBQZjaGVja3MFBmNoZWNrcwkAuQkCCQDMCAICBiVkJWQlZAkAzAgCCQCkAwEFDXZlc3RpbmdBbW91bnQJAMwIAgkApAMBBQpzdGFydEJsb2NrCQDMCAIJAKQDAQUKbG9ja0xlbmd0aAUDbmlsBQNTRVAJAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4BEHBhcnNlVXNlclZlc3RpbmcCC3VzZXJBZGRyZXNzAmlkBAckbWF0Y2gwCQCdCAIFBHRoaXMJAQ5rZXlVc2VyVmVzdGluZwIFC3VzZXJBZGRyZXNzBQJpZAMJAAECBQckbWF0Y2gwAgZTdHJpbmcECXJhd1N0cmluZwUHJG1hdGNoMAQLc3BsaXRTdHJpbmcJALUJAgUJcmF3U3RyaW5nBQNTRVAEDXZlc3RpbmdBbW91bnQJAQ1wYXJzZUludFZhbHVlAQkAkQMCBQtzcGxpdFN0cmluZwABBApzdGFydEJsb2NrCQENcGFyc2VJbnRWYWx1ZQEJAJEDAgULc3BsaXRTdHJpbmcAAgQKbG9ja0xlbmd0aAkBDXBhcnNlSW50VmFsdWUBCQCRAwIFC3NwbGl0U3RyaW5nAAMJAJUKAwUNdmVzdGluZ0Ftb3VudAUKc3RhcnRCbG9jawUKbG9ja0xlbmd0aAkAlQoDAAAAAAAAARFrZXlWZXN0aW5nSGlzdG9yeQMGYWN0aW9uC3VzZXJBZGRyZXNzBHR4SWQJALkJAgkAzAgCAgglcyVzJXMlcwkAzAgCAgdoaXN0b3J5CQDMCAIFC3VzZXJBZGRyZXNzCQDMCAIFBmFjdGlvbgkAzAgCBQR0eElkBQNuaWwFA1NFUAESY2FsY1VubG9ja2VkQW1vdW50AwZhbW91bnQKc3RhcnRCbG9jawpsb2NrTGVuZ3RoBA1lbGFwc2VkQmxvY2tzCQBlAgUGaGVpZ2h0BQpzdGFydEJsb2NrBA51bmxvY2tlZEFtb3VudAMDCQECIT0CBQpsb2NrTGVuZ3RoAAAJAGYCBQ1lbGFwc2VkQmxvY2tzAAAHCQCXAwEJAMwIAgkAawMFBmFtb3VudAUNZWxhcHNlZEJsb2NrcwUKbG9ja0xlbmd0aAkAzAgCBQZhbW91bnQFA25pbAAACQCUCgIFDnVubG9ja2VkQW1vdW50CQBlAgUGYW1vdW50BQ51bmxvY2tlZEFtb3VudAEVZ2V0VXNlclVubG9ja2VkQW1vdW50Agt1c2VyQWRkcmVzcwJpZAQLJHQwMzc3OTM4NTgJARBwYXJzZVVzZXJWZXN0aW5nAgULdXNlckFkZHJlc3MFAmlkBA12ZXN0aW5nQW1vdW50CAULJHQwMzc3OTM4NTgCXzEECnN0YXJ0QmxvY2sIBQskdDAzNzc5Mzg1OAJfMgQKbG9ja0xlbmd0aAgFCyR0MDM3NzkzODU4Al8zBAskdDAzODYxMzk1OAkBEmNhbGNVbmxvY2tlZEFtb3VudAMFDXZlc3RpbmdBbW91bnQFCnN0YXJ0QmxvY2sFCmxvY2tMZW5ndGgEDnVubG9ja2VkQW1vdW50CAULJHQwMzg2MTM5NTgCXzEED3JlbWFpbmluZ0Ftb3VudAgFCyR0MDM4NjEzOTU4Al8yCQCUCgIFDnVubG9ja2VkQW1vdW50BQ9yZW1haW5pbmdBbW91bnQBF2dldFVwZGF0ZVZlc3RpbmdBY3Rpb25zAgt1c2VyQWRkcmVzcwJpZAQLJHQwNDA2NTQxNDQJARBwYXJzZVVzZXJWZXN0aW5nAgULdXNlckFkZHJlc3MFAmlkBA12ZXN0aW5nQW1vdW50CAULJHQwNDA2NTQxNDQCXzEECnN0YXJ0QmxvY2sIBQskdDA0MDY1NDE0NAJfMgQKbG9ja0xlbmd0aAgFCyR0MDQwNjU0MTQ0Al8zBAskdDA0MTQ3NDIyNQkBFWdldFVzZXJVbmxvY2tlZEFtb3VudAIFC3VzZXJBZGRyZXNzBQJpZAQOdW5sb2NrZWRBbW91bnQIBQskdDA0MTQ3NDIyNQJfMQQPcmVtYWluaW5nQW1vdW50CAULJHQwNDE0NzQyMjUCXzIED3JlbWFpbmluZ0Jsb2NrcwkAlgMBCQDMCAIJAGUCCQBkAgUKc3RhcnRCbG9jawUKbG9ja0xlbmd0aAUGaGVpZ2h0CQDMCAIAAAUDbmlsBBR1cGRhdGVWZXN0aW5nQWN0aW9ucwMJAQIhPQIFDnVubG9ja2VkQW1vdW50AAADCQECIT0CBQ9yZW1haW5pbmdCbG9ja3MAAAkAzAgCCQELU3RyaW5nRW50cnkCCQEOa2V5VXNlclZlc3RpbmcCBQt1c2VyQWRkcmVzcwUCaWQJARFmb3JtYXRVc2VyVmVzdGluZwMFD3JlbWFpbmluZ0Ftb3VudAUGaGVpZ2h0BQ9yZW1haW5pbmdCbG9ja3MFA25pbAkAzAgCCQELRGVsZXRlRW50cnkBCQEOa2V5VXNlclZlc3RpbmcCBQt1c2VyQWRkcmVzcwUCaWQFA25pbAUDbmlsCQCUCgIFFHVwZGF0ZVZlc3RpbmdBY3Rpb25zBQ51bmxvY2tlZEFtb3VudAETZ2V0VXNlckNsYWltQWN0aW9ucwILdXNlckFkZHJlc3MCaWQECyR0MDQ2ODk0Nzc0CQEXZ2V0VXBkYXRlVmVzdGluZ0FjdGlvbnMCBQt1c2VyQWRkcmVzcwUCaWQEFHVwZGF0ZVZlc3RpbmdBY3Rpb25zCAULJHQwNDY4OTQ3NzQCXzEEDnVubG9ja2VkQW1vdW50CAULJHQwNDY4OTQ3NzQCXzIED3RyYW5zZmVyQWN0aW9ucwMJAQIhPQIFDnVubG9ja2VkQW1vdW50AAAJAMwIAgkBDlNjcmlwdFRyYW5zZmVyAwkBEUBleHRyTmF0aXZlKDEwNjIpAQULdXNlckFkZHJlc3MFDnVubG9ja2VkQW1vdW50BQxhc3NldElkQnl0ZXMFA25pbAUDbmlsCQCUCgIJAM4IAgUUdXBkYXRlVmVzdGluZ0FjdGlvbnMFD3RyYW5zZmVyQWN0aW9ucwUOdW5sb2NrZWRBbW91bnQBFmdldEFsbFVzZXJDbGFpbUFjdGlvbnMBC3VzZXJBZGRyZXNzCgENYWN0aW9uc0hlbHBlcgIDYWNjAmlkBAskdDA1MTQ4NTE4OAUDYWNjBBdhbGxWZXN0aW5nc0NsYWltQWN0aW9ucwgFCyR0MDUxNDg1MTg4Al8xBANzdW0IBQskdDA1MTQ4NTE4OAJfMgQLJHQwNTE5MzUyNzAJARNnZXRVc2VyQ2xhaW1BY3Rpb25zAgULdXNlckFkZHJlc3MFAmlkBBN2ZXN0aW5nQ2xhaW1BY3Rpb25zCAULJHQwNTE5MzUyNzACXzEEC2NsYWltQW1vdW50CAULJHQwNTE5MzUyNzACXzIJAJQKAgkAzggCBRdhbGxWZXN0aW5nc0NsYWltQWN0aW9ucwUTdmVzdGluZ0NsYWltQWN0aW9ucwkAZAIFA3N1bQULY2xhaW1BbW91bnQKAAIkbAUISURTX0xJU1QKAAIkcwkAkAMBBQIkbAoABSRhY2MwCQCUCgIFA25pbAAACgEFJGYwXzECAiRhAiRpAwkAZwIFAiRpBQIkcwUCJGEJAQ1hY3Rpb25zSGVscGVyAgUCJGEJAJEDAgUCJGwFAiRpCgEFJGYwXzICAiRhAiRpAwkAZwIFAiRpBQIkcwUCJGEJAAIBAhRMaXN0IHNpemUgZXhjZWVkcyAzMAkBBSRmMF8yAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgUFJGFjYzAAAAABAAIAAwAEAAUABgAHAAgACQAKAAsADAANAA4ADwAQABEAEgATABQAFQAWABcAGAAZABoAGwAcAB0AHgEmZ2V0TW92ZUFsbFVubG9ja2VkVG9BY2N1bXVsYXRvckFjdGlvbnMBC3VzZXJBZGRyZXNzCgENYWN0aW9uc0hlbHBlcgIDYWNjAmlkBAskdDA1NTYzNTYwNAUDYWNjBBh1cGRhdGVBbGxWZXN0aW5nc0FjdGlvbnMIBQskdDA1NTYzNTYwNAJfMQQDc3VtCAULJHQwNTU2MzU2MDQCXzIECyR0MDU2MDk1Njk0CQEXZ2V0VXBkYXRlVmVzdGluZ0FjdGlvbnMCBQt1c2VyQWRkcmVzcwUCaWQEFHVwZGF0ZVZlc3RpbmdBY3Rpb25zCAULJHQwNTYwOTU2OTQCXzEEDnVubG9ja2VkQW1vdW50CAULJHQwNTYwOTU2OTQCXzIJAJQKAgkAzggCBRh1cGRhdGVBbGxWZXN0aW5nc0FjdGlvbnMFFHVwZGF0ZVZlc3RpbmdBY3Rpb25zCQBkAgUDc3VtBQ51bmxvY2tlZEFtb3VudAQLJHQwNTc4MDU4NjgKAAIkbAUISURTX0xJU1QKAAIkcwkAkAMBBQIkbAoABSRhY2MwCQCUCgIFA25pbAAACgEFJGYwXzECAiRhAiRpAwkAZwIFAiRpBQIkcwUCJGEJAQ1hY3Rpb25zSGVscGVyAgUCJGEJAJEDAgUCJGwFAiRpCgEFJGYwXzICAiRhAiRpAwkAZwIFAiRpBQIkcwUCJGEJAAIBAhRMaXN0IHNpemUgZXhjZWVkcyAzMAkBBSRmMF8yAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgUFJGFjYzAAAAABAAIAAwAEAAUABgAHAAgACQAKAAsADAANAA4ADwAQABEAEgATABQAFQAWABcAGAAZABoAGwAcAB0AHgQYdXBkYXRlQWxsVmVzdGluZ3NBY3Rpb25zCAULJHQwNTc4MDU4NjgCXzEEC3VubG9ja2VkU3VtCAULJHQwNTc4MDU4NjgCXzIEDm9sZEFjY3VtdWxhdGVkCQELdmFsdWVPckVsc2UCCQCaCAIFBHRoaXMJARJrZXlVc2VyQWNjdW11bGF0ZWQBBQt1c2VyQWRkcmVzcwAABBh1cGRhdGVBY2N1bXVsYXRlZEFjdGlvbnMDCQECIT0CBQt1bmxvY2tlZFN1bQAACQDMCAIJAQxJbnRlZ2VyRW50cnkCCQESa2V5VXNlckFjY3VtdWxhdGVkAQULdXNlckFkZHJlc3MJAGQCBQ5vbGRBY2N1bXVsYXRlZAULdW5sb2NrZWRTdW0FA25pbAUDbmlsCQCUCgIJAM4IAgUYdXBkYXRlQWxsVmVzdGluZ3NBY3Rpb25zBRh1cGRhdGVBY2N1bXVsYXRlZEFjdGlvbnMFC3VubG9ja2VkU3VtARpnZXRDbGFpbUFjY3VtdWxhdGVkQWN0aW9ucwELdXNlckFkZHJlc3MEDm9sZEFjY3VtdWxhdGVkCQELdmFsdWVPckVsc2UCCQCaCAIFBHRoaXMJARJrZXlVc2VyQWNjdW11bGF0ZWQBBQt1c2VyQWRkcmVzcwAAAwkBAiE9AgUOb2xkQWNjdW11bGF0ZWQAAAkAlAoCCQDMCAIJAQ5TY3JpcHRUcmFuc2ZlcgMJARFAZXh0ck5hdGl2ZSgxMDYyKQEFC3VzZXJBZGRyZXNzBQ5vbGRBY2N1bXVsYXRlZAUMYXNzZXRJZEJ5dGVzCQDMCAIJAQtEZWxldGVFbnRyeQEJARJrZXlVc2VyQWNjdW11bGF0ZWQBBQt1c2VyQWRkcmVzcwUDbmlsBQ5vbGRBY2N1bXVsYXRlZAkAlAoCBQNuaWwAAAESZ2V0Q2xhaW1BbGxBY3Rpb25zAQt1c2VyQWRkcmVzcwQLJHQwNjYzNjY3NjkDCQEBIQEJAQ9jb250YWluc0VsZW1lbnQCBQdiYW5MaXN0BQt1c2VyQWRkcmVzcwkBFmdldEFsbFVzZXJDbGFpbUFjdGlvbnMBBQt1c2VyQWRkcmVzcwkAlAoCBQNuaWwAAAQMY2xhaW1BY3Rpb25zCAULJHQwNjYzNjY3NjkCXzEEDnVubG9ja2VkQW1vdW50CAULJHQwNjYzNjY3NjkCXzIECyR0MDY3NzI2ODYyCQEaZ2V0Q2xhaW1BY2N1bXVsYXRlZEFjdGlvbnMBBQt1c2VyQWRkcmVzcwQXY2xhaW1BY2N1bXVsYXRlZEFjdGlvbnMIBQskdDA2NzcyNjg2MgJfMQQRYWNjdW11bGF0ZWRBbW91bnQIBQskdDA2NzcyNjg2MgJfMgQLdG90YWxBbW91bnQJAGQCBQ51bmxvY2tlZEFtb3VudAURYWNjdW11bGF0ZWRBbW91bnQJAJQKAgkAzggCBQxjbGFpbUFjdGlvbnMFF2NsYWltQWNjdW11bGF0ZWRBY3Rpb25zBQt0b3RhbEFtb3VudAESZ2V0VmVzdGluZ1VzZXJJbmZvAQt1c2VyQWRkcmVzcwoBBmhlbHBlcgIDYWNjAmlkBAskdDA3MDc2NzE1NQkBEHBhcnNlVXNlclZlc3RpbmcCBQt1c2VyQWRkcmVzcwUCaWQEDXZlc3RpbmdBbW91bnQIBQskdDA3MDc2NzE1NQJfMQQKc3RhcnRCbG9jawgFCyR0MDcwNzY3MTU1Al8yBApsb2NrTGVuZ3RoCAULJHQwNzA3NjcxNTUCXzMECyR0MDcxNjA3MjM4CQEVZ2V0VXNlclVubG9ja2VkQW1vdW50AgULdXNlckFkZHJlc3MFAmlkBA51bmxvY2tlZEFtb3VudAgFCyR0MDcxNjA3MjM4Al8xBA9yZW1haW5pbmdBbW91bnQIBQskdDA3MTYwNzIzOAJfMgMDCQAAAgUNdmVzdGluZ0Ftb3VudAAABgkBD2NvbnRhaW5zRWxlbWVudAIFB2Jhbkxpc3QFC3VzZXJBZGRyZXNzBQNhY2MJAM0I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cmVzcw12ZXN0aW5nQW1vdW50CnN0YXJ0QmxvY2sKbG9ja0xlbmd0aAQFY2hlY2sJAMwIAgMJAAACCQCQAwEIBQFpCHBheW1lbnRzAAEGCQEIdGhyb3dFcnIBAiBzaG91bGQgYmUgd2l0aCBleGFjdGx5IDEgcGF5bWVudAkAzAgCAwkAAAIICQCRAwIIBQFpCHBheW1lbnRzAAAHYXNzZXRJZAUMYXNzZXRJZEJ5dGVzBgkBCHRocm93RXJyAQkAuQkCCQDMCAICG3BheW1lbnQgYXNzZXRJZCBzaG91bGQgYmU6IAkAzAgCBQ1hc3NldElkU3RyaW5nBQNuaWwCASAJAMwIAgMJAAACCAkAkQMCCAUBaQhwYXltZW50cwAABmFtb3VudAUNdmVzdGluZ0Ftb3VudAYJAQh0aHJvd0VycgECL3BheW1lbnQgYW1vdW50IHNob3VsZCBiZSBlcXVhbCB0byB2ZXN0aW5nQW1vdW50CQDMCAIDAwkAAAIFCWFkbWluTGlzdAUDbmlsBgkBD2NvbnRhaW5zRWxlbWVudAIFCWFkbWluTGlzdAkApQgBCAUBaQZjYWxsZXIGCQEIdGhyb3dFcnIBAhF5b3UgbXVzdCBiZSBhZG1pbgUDbmlsAwkAAAIFBWNoZWNrBQVjaGVjawQCaWQJARVnZXRBdmFpbGFibGVWZXN0aW5nSWQBBQt1c2VyQWRkcmVzcwQOaGlzdG9yeUFjdGlvbnMJAMwIAgkBC1N0cmluZ0VudHJ5AgkBEWtleVZlc3RpbmdIaXN0b3J5AwIGdmVzdGVkBQt1c2VyQWRkcmVzcwkA2AQBCAUBaQ10cmFuc2FjdGlvbklkCQC5CQIJAMwIAgkApAMBBQ12ZXN0aW5nQW1vdW50CQDMCAIJAKQDAQUKc3RhcnRCbG9jawkAzAgCCQCkAwEFCmxvY2tMZW5ndGgFA25pbAUDU0VQBQNuaWwJAM4IAgkBFGdldE5ld1Zlc3RpbmdBY3Rpb25zBQULdXNlckFkZHJlc3MFAmlkBQ12ZXN0aW5nQW1vdW50BQpzdGFydEJsb2NrBQpsb2NrTGVuZ3RoBQ5oaXN0b3J5QWN0aW9ucwkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgFpAQNiYW4BC3VzZXJBZGRyZXNzBAZjaGVja3MJAMwIAgMDCQAAAgUJYWRtaW5MaXN0BQNuaWwGCQEPY29udGFpbnNFbGVtZW50AgUJYWRtaW5MaXN0CQClCAEIBQFpBmNhbGxlcgYJAQh0aHJvd0VycgECEXlvdSBtdXN0IGJlIGFkbWluCQDMCAIDCQEBIQEJAQ9jb250YWluc0VsZW1lbnQCBQdiYW5MaXN0BQt1c2VyQWRkcmVzcwYJAQh0aHJvd0VycgEJALkJAgkAzAgCAht1c2VyIGFscmVhZHkgaW4gYSBiYW4gbGlzdDoJAMwIAgULdXNlckFkZHJlc3MFA25pbAIBIAUDbmlsAwkAAAIFBmNoZWNrcwUGY2hlY2tzBAskdDA5NTAzOTU5MQkBJmdldE1vdmVBbGxVbmxvY2tlZFRvQWNjdW11bGF0b3JBY3Rpb25zAQULdXNlckFkZHJlc3MEGG1vdmVUb0FjY3VtdWxhdGVkQWN0aW9ucwgFCyR0MDk1MDM5NTkxAl8xBAJfYQgFCyR0MDk1MDM5NTkxAl8yBBNhZGRUb0Jhbkxpc3RBY3Rpb25zCQDMCAIJAQtTdHJpbmdFbnRyeQIFCmtleUJhbkxpc3QJALsJAgkAzQgCBQdiYW5MaXN0BQt1c2VyQWRkcmVzcwICX18FA25pbAkAzggCBRhtb3ZlVG9BY2N1bXVsYXRlZEFjdGlvbnMFE2FkZFRvQmFuTGlzdEFjdGlvbnMJAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4BaQEFdW5iYW4BC3VzZXJBZGRyZXNzBAZjaGVja3MJAMwIAgMDCQAAAgUJYWRtaW5MaXN0BQNuaWwGCQEPY29udGFpbnNFbGVtZW50AgUJYWRtaW5MaXN0CQClCAEIBQFpBmNhbGxlcgYJAQh0aHJvd0VycgECEXlvdSBtdXN0IGJlIGFkbWluCQDMCAIDCQEPY29udGFpbnNFbGVtZW50AgUHYmFuTGlzdAULdXNlckFkZHJlc3MGCQEIdGhyb3dFcnIBCQC5CQIJAMwIAgIXdXNlciBub3QgaW4gYSBiYW4gbGlzdDoJAMwIAgULdXNlckFkZHJlc3MFA25pbAIBIAUDbmlsAwkAAAIFBmNoZWNrcwUGY2hlY2tzBApuZXdCYW5MaXN0BAckbWF0Y2gwCQDPCAIFB2Jhbkxpc3QFC3VzZXJBZGRyZXNzAwkAAQIFByRtYXRjaDACA0ludAQDaW5kBQckbWF0Y2gwCQDRCAIFB2Jhbkxpc3QFA2luZAkBCHRocm93RXJyAQIrdXNlciBhZGRyZXNzIGluZGV4IGluIGJhbiBsaXN0IGlzIG5vdCBmb3VuZAMJAAACBQpuZXdCYW5MaXN0BQNuaWwJAMwIAgkBC0RlbGV0ZUVudHJ5AQUKa2V5QmFuTGlzdAUDbmlsCQDMCAIJAQtTdHJpbmdFbnRyeQIFCmtleUJhbkxpc3QJALsJAgUKbmV3QmFuTGlzdAICX18FA25pbAkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgFpAQhjbGFpbUFsbAAEC3VzZXJBZGRyZXNzCQClCAEIBQFpBmNhbGxlcgQNJHQwMTA0ODQxMDU0OQkBEmdldENsYWltQWxsQWN0aW9ucwEFC3VzZXJBZGRyZXNzBAxjbGFpbUFjdGlvbnMIBQ0kdDAxMDQ4NDEwNTQ5Al8xBAt0b3RhbEFtb3VudAgFDSR0MDEwNDg0MTA1NDkCXzIEDmhpc3RvcnlBY3Rpb25zCQDMCAIJAQtTdHJpbmdFbnRyeQIJARFrZXlWZXN0aW5nSGlzdG9yeQMCB2NsYWltZWQFC3VzZXJBZGRyZXNzCQDYBAEIBQFpDXRyYW5zYWN0aW9uSWQJAKQDAQULdG90YWxBbW91bnQFA25pbAMJAGYCBQt0b3RhbEFtb3VudAAACQDOCAIFDGNsYWltQWN0aW9ucwUOaGlzdG9yeUFjdGlvbnMJAQh0aHJvd0VycgECEG5vdGhpbmcgdG8gY2xhaW0BaQEQdXNlckluZm9SRUFET05MWQELdXNlckFkZHJlc3MEDSR0MDExMTUwMTEyMDUJARJnZXRDbGFpbUFsbEFjdGlvbnMBBQt1c2VyQWRkcmVzcwQCX2EIBQ0kdDAxMTE1MDExMjA1Al8xBAt0b3RhbEFtb3VudAgFDSR0MDExMTUwMTEyMDUCXzIEEWFjY3VtdWxhdGVkQW1vdW50CQELdmFsdWVPckVsc2UCCQCaCAIFBHRoaXMJARJrZXlVc2VyQWNjdW11bGF0ZWQBBQt1c2VyQWRkcmVzcwAACQCUCgIFA25pbAkAlQoDBQt0b3RhbEFtb3VudAURYWNjdW11bGF0ZWRBbW91bnQJARJnZXRWZXN0aW5nVXNlckluZm8BBQt1c2VyQWRkcmVzcwFpAQNmb28ABAJjaAkAAgECA2VycgMJAAACBQJjaAUCY2gFA25pbAkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgECdHgBBnZlcmlmeQAED3RhcmdldFB1YmxpY0tleQQHJG1hdGNoMAkBFm1hbmFnZXJQdWJsaWNLZXlPclVuaXQAAwkAAQIFByRtYXRjaDACCkJ5dGVWZWN0b3IEAnBrBQckbWF0Y2gwBQJwawMJAAECBQckbWF0Y2gwAgRVbml0CAUCdHgPc2VuZGVyUHVibGljS2V5CQACAQILTWF0Y2ggZXJyb3IJAPQDAwgFAnR4CWJvZHlCeXRlcwkAkQMCCAUCdHgGcHJvb2ZzAAAFD3RhcmdldFB1YmxpY0tleRB8DAc=", "height": 2932331, "applicationStatus": "succeeded", "spentComplexity": 0 } View: original | compacted Prev: 3ugbYTTe5RSAEHKaUcink3srFrtFXse1o2mpQfX4Mp6R Next: FZs5VPGcTnyv84LpHrPYQaKe9kY136SgpvE4rAZqP7xZ Diff:
OldNewDifferences
424424 }
425425
426426
427+
428+@Callable(i)
429+func foo () = {
430+ let ch = throw("err")
431+ if ((ch == ch))
432+ then nil
433+ else throw("Strict value is not equal to itself.")
434+ }
435+
436+
427437 @Verifier(tx)
428438 func verify () = {
429439 let targetPublicKey = match managerPublicKeyOrUnit() {
Full:
OldNewDifferences
11 {-# STDLIB_VERSION 6 #-}
22 {-# SCRIPT_TYPE ACCOUNT #-}
33 {-# CONTENT_TYPE DAPP #-}
44 let contractFile = "vesting_neo.ride"
55
66 let SEP = "__"
77
88 let IDS_LIST = [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]
99
1010 let MAX_VESTING_COUNT = size(IDS_LIST)
1111
1212 func throwErr (msg) = throw(((contractFile + ": ") + msg))
1313
1414
1515 func keyManagerPublicKey () = "%s__managerPublicKey"
1616
1717
1818 func keyManagerVaultAddress () = "%s__managerVaultAddress"
1919
2020
2121 func getManagerVaultAddressOrThis () = match getString(keyManagerVaultAddress()) {
2222 case s: String =>
2323 addressFromStringValue(s)
2424 case _ =>
2525 this
2626 }
2727
2828
2929 func managerPublicKeyOrUnit () = {
3030 let managerVaultAddress = getManagerVaultAddressOrThis()
3131 match getString(managerVaultAddress, keyManagerPublicKey()) {
3232 case s: String =>
3333 fromBase58String(s)
3434 case _: Unit =>
3535 unit
3636 case _ =>
3737 throw("Match error")
3838 }
3939 }
4040
4141
4242 let keyAssetId = makeString(["%s", "assetId"], SEP)
4343
4444 let assetIdString = valueOrElse(getString(this, keyAssetId), "WAVES")
4545
4646 let assetIdBytes = if ((assetIdString == "WAVES"))
4747 then unit
4848 else fromBase58String(assetIdString)
4949
5050 let keyAdminList = makeString(["%s", "adminAddressList"], SEP)
5151
5252 let keyBanList = makeString(["%s", "banList"], SEP)
5353
5454 let adminList = match getString(this, keyAdminList) {
5555 case s: String =>
5656 split(s, SEP)
5757 case _ =>
5858 nil
5959 }
6060
6161 let banList = {
6262 let banListRaw = valueOrElse(getString(this, keyBanList), "")
6363 if ((banListRaw == ""))
6464 then nil
6565 else split_51C(banListRaw, SEP)
6666 }
6767
6868 func isValidAddressString (addressString) = match addressFromString(addressString) {
6969 case a: Address =>
7070 true
7171 case _ =>
7272 false
7373 }
7474
7575
7676 func keyUserVesting (userAddress,id) = {
7777 let checks = [if (isValidAddressString(userAddress))
7878 then true
7979 else throwErr(makeString(["address is not valid:", userAddress], " ")), if (if ((id >= 0))
8080 then (MAX_VESTING_COUNT > id)
8181 else false)
8282 then true
8383 else throwErr(makeString(["id should be less than", toString(MAX_VESTING_COUNT), "got:", toString(id)], " "))]
8484 if ((checks == checks))
8585 then makeString(["%s%s%d", "vesting", userAddress, toString(id)], SEP)
8686 else throw("Strict value is not equal to itself.")
8787 }
8888
8989
9090 func keyUserAccumulated (userAddress) = {
9191 let checks = [if (isValidAddressString(userAddress))
9292 then true
9393 else throwErr(makeString(["address is not valid:", userAddress], " "))]
9494 if ((checks == checks))
9595 then makeString(["%s%s", "accumulated", userAddress], SEP)
9696 else throw("Strict value is not equal to itself.")
9797 }
9898
9999
100100 func formatUserVesting (vestingAmount,startBlock,lockLength) = {
101101 let checks = [if ((vestingAmount >= 0))
102102 then true
103103 else throwErr("vesting amount cannot be negative"), if ((startBlock >= 0))
104104 then true
105105 else throwErr("start block cannot be negative"), if ((lockLength >= 0))
106106 then true
107107 else throwErr("lock length cannot be negative")]
108108 if ((checks == checks))
109109 then makeString(["%d%d%d", toString(vestingAmount), toString(startBlock), toString(lockLength)], SEP)
110110 else throw("Strict value is not equal to itself.")
111111 }
112112
113113
114114 func parseUserVesting (userAddress,id) = match getString(this, keyUserVesting(userAddress, id)) {
115115 case rawString: String =>
116116 let splitString = split(rawString, SEP)
117117 let vestingAmount = parseIntValue(splitString[1])
118118 let startBlock = parseIntValue(splitString[2])
119119 let lockLength = parseIntValue(splitString[3])
120120 $Tuple3(vestingAmount, startBlock, lockLength)
121121 case _ =>
122122 $Tuple3(0, 0, 0)
123123 }
124124
125125
126126 func keyVestingHistory (action,userAddress,txId) = makeString(["%s%s%s%s", "history", userAddress, action, txId], SEP)
127127
128128
129129 func calcUnlockedAmount (amount,startBlock,lockLength) = {
130130 let elapsedBlocks = (height - startBlock)
131131 let unlockedAmount = if (if ((lockLength != 0))
132132 then (elapsedBlocks > 0)
133133 else false)
134134 then min([fraction(amount, elapsedBlocks, lockLength), amount])
135135 else 0
136136 $Tuple2(unlockedAmount, (amount - unlockedAmount))
137137 }
138138
139139
140140 func getUserUnlockedAmount (userAddress,id) = {
141141 let $t037793858 = parseUserVesting(userAddress, id)
142142 let vestingAmount = $t037793858._1
143143 let startBlock = $t037793858._2
144144 let lockLength = $t037793858._3
145145 let $t038613958 = calcUnlockedAmount(vestingAmount, startBlock, lockLength)
146146 let unlockedAmount = $t038613958._1
147147 let remainingAmount = $t038613958._2
148148 $Tuple2(unlockedAmount, remainingAmount)
149149 }
150150
151151
152152 func getUpdateVestingActions (userAddress,id) = {
153153 let $t040654144 = parseUserVesting(userAddress, id)
154154 let vestingAmount = $t040654144._1
155155 let startBlock = $t040654144._2
156156 let lockLength = $t040654144._3
157157 let $t041474225 = getUserUnlockedAmount(userAddress, id)
158158 let unlockedAmount = $t041474225._1
159159 let remainingAmount = $t041474225._2
160160 let remainingBlocks = max([((startBlock + lockLength) - height), 0])
161161 let updateVestingActions = if ((unlockedAmount != 0))
162162 then if ((remainingBlocks != 0))
163163 then [StringEntry(keyUserVesting(userAddress, id), formatUserVesting(remainingAmount, height, remainingBlocks))]
164164 else [DeleteEntry(keyUserVesting(userAddress, id))]
165165 else nil
166166 $Tuple2(updateVestingActions, unlockedAmount)
167167 }
168168
169169
170170 func getUserClaimActions (userAddress,id) = {
171171 let $t046894774 = getUpdateVestingActions(userAddress, id)
172172 let updateVestingActions = $t046894774._1
173173 let unlockedAmount = $t046894774._2
174174 let transferActions = if ((unlockedAmount != 0))
175175 then [ScriptTransfer(addressFromStringValue(userAddress), unlockedAmount, assetIdBytes)]
176176 else nil
177177 $Tuple2((updateVestingActions ++ transferActions), unlockedAmount)
178178 }
179179
180180
181181 func getAllUserClaimActions (userAddress) = {
182182 func actionsHelper (acc,id) = {
183183 let $t051485188 = acc
184184 let allVestingsClaimActions = $t051485188._1
185185 let sum = $t051485188._2
186186 let $t051935270 = getUserClaimActions(userAddress, id)
187187 let vestingClaimActions = $t051935270._1
188188 let claimAmount = $t051935270._2
189189 $Tuple2((allVestingsClaimActions ++ vestingClaimActions), (sum + claimAmount))
190190 }
191191
192192 let $l = IDS_LIST
193193 let $s = size($l)
194194 let $acc0 = $Tuple2(nil, 0)
195195 func $f0_1 ($a,$i) = if (($i >= $s))
196196 then $a
197197 else actionsHelper($a, $l[$i])
198198
199199 func $f0_2 ($a,$i) = if (($i >= $s))
200200 then $a
201201 else throw("List size exceeds 30")
202202
203203 $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($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)
204204 }
205205
206206
207207 func getMoveAllUnlockedToAccumulatorActions (userAddress) = {
208208 func actionsHelper (acc,id) = {
209209 let $t055635604 = acc
210210 let updateAllVestingsActions = $t055635604._1
211211 let sum = $t055635604._2
212212 let $t056095694 = getUpdateVestingActions(userAddress, id)
213213 let updateVestingActions = $t056095694._1
214214 let unlockedAmount = $t056095694._2
215215 $Tuple2((updateAllVestingsActions ++ updateVestingActions), (sum + unlockedAmount))
216216 }
217217
218218 let $t057805868 = {
219219 let $l = IDS_LIST
220220 let $s = size($l)
221221 let $acc0 = $Tuple2(nil, 0)
222222 func $f0_1 ($a,$i) = if (($i >= $s))
223223 then $a
224224 else actionsHelper($a, $l[$i])
225225
226226 func $f0_2 ($a,$i) = if (($i >= $s))
227227 then $a
228228 else throw("List size exceeds 30")
229229
230230 $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($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)
231231 }
232232 let updateAllVestingsActions = $t057805868._1
233233 let unlockedSum = $t057805868._2
234234 let oldAccumulated = valueOrElse(getInteger(this, keyUserAccumulated(userAddress)), 0)
235235 let updateAccumulatedActions = if ((unlockedSum != 0))
236236 then [IntegerEntry(keyUserAccumulated(userAddress), (oldAccumulated + unlockedSum))]
237237 else nil
238238 $Tuple2((updateAllVestingsActions ++ updateAccumulatedActions), unlockedSum)
239239 }
240240
241241
242242 func getClaimAccumulatedActions (userAddress) = {
243243 let oldAccumulated = valueOrElse(getInteger(this, keyUserAccumulated(userAddress)), 0)
244244 if ((oldAccumulated != 0))
245245 then $Tuple2([ScriptTransfer(addressFromStringValue(userAddress), oldAccumulated, assetIdBytes), DeleteEntry(keyUserAccumulated(userAddress))], oldAccumulated)
246246 else $Tuple2(nil, 0)
247247 }
248248
249249
250250 func getClaimAllActions (userAddress) = {
251251 let $t066366769 = if (!(containsElement(banList, userAddress)))
252252 then getAllUserClaimActions(userAddress)
253253 else $Tuple2(nil, 0)
254254 let claimActions = $t066366769._1
255255 let unlockedAmount = $t066366769._2
256256 let $t067726862 = getClaimAccumulatedActions(userAddress)
257257 let claimAccumulatedActions = $t067726862._1
258258 let accumulatedAmount = $t067726862._2
259259 let totalAmount = (unlockedAmount + accumulatedAmount)
260260 $Tuple2((claimActions ++ claimAccumulatedActions), totalAmount)
261261 }
262262
263263
264264 func getVestingUserInfo (userAddress) = {
265265 func helper (acc,id) = {
266266 let $t070767155 = parseUserVesting(userAddress, id)
267267 let vestingAmount = $t070767155._1
268268 let startBlock = $t070767155._2
269269 let lockLength = $t070767155._3
270270 let $t071607238 = getUserUnlockedAmount(userAddress, id)
271271 let unlockedAmount = $t071607238._1
272272 let remainingAmount = $t071607238._2
273273 if (if ((vestingAmount == 0))
274274 then true
275275 else containsElement(banList, userAddress))
276276 then acc
277277 else (acc :+ [vestingAmount, (startBlock + lockLength), unlockedAmount, remainingAmount])
278278 }
279279
280280 let $l = IDS_LIST
281281 let $s = size($l)
282282 let $acc0 = nil
283283 func $f0_1 ($a,$i) = if (($i >= $s))
284284 then $a
285285 else helper($a, $l[$i])
286286
287287 func $f0_2 ($a,$i) = if (($i >= $s))
288288 then $a
289289 else throw("List size exceeds 30")
290290
291291 $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($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)
292292 }
293293
294294
295295 func getAvailableVestingId (userAddress) = {
296296 func helper (availableId,id) = {
297297 let $t075627641 = parseUserVesting(userAddress, id)
298298 let vestingAmount = $t075627641._1
299299 let startBlock = $t075627641._2
300300 let lockLength = $t075627641._3
301301 if ((vestingAmount > 0))
302302 then availableId
303303 else if ((availableId == -1))
304304 then id
305305 else min([availableId, id])
306306 }
307307
308308 let availableId = {
309309 let $l = IDS_LIST
310310 let $s = size($l)
311311 let $acc0 = -1
312312 func $f0_1 ($a,$i) = if (($i >= $s))
313313 then $a
314314 else helper($a, $l[$i])
315315
316316 func $f0_2 ($a,$i) = if (($i >= $s))
317317 then $a
318318 else throw("List size exceeds 30")
319319
320320 $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($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)
321321 }
322322 if ((availableId == -1))
323323 then throwErr(makeString(["user exceeded max active vesting count: ", userAddress], " "))
324324 else availableId
325325 }
326326
327327
328328 func getNewVestingActions (userAddress,id,vestingAmount,startBlock,lockLength) = [StringEntry(keyUserVesting(userAddress, id), formatUserVesting(vestingAmount, startBlock, lockLength))]
329329
330330
331331 @Callable(i)
332332 func vestingForUser (userAddress,vestingAmount,startBlock,lockLength) = {
333333 let check = [if ((size(i.payments) == 1))
334334 then true
335335 else throwErr("should be with exactly 1 payment"), if ((i.payments[0].assetId == assetIdBytes))
336336 then true
337337 else throwErr(makeString(["payment assetId should be: ", assetIdString], " ")), if ((i.payments[0].amount == vestingAmount))
338338 then true
339339 else throwErr("payment amount should be equal to vestingAmount"), if (if ((adminList == nil))
340340 then true
341341 else containsElement(adminList, toString(i.caller)))
342342 then true
343343 else throwErr("you must be admin")]
344344 if ((check == check))
345345 then {
346346 let id = getAvailableVestingId(userAddress)
347347 let historyActions = [StringEntry(keyVestingHistory("vested", userAddress, toBase58String(i.transactionId)), makeString([toString(vestingAmount), toString(startBlock), toString(lockLength)], SEP))]
348348 (getNewVestingActions(userAddress, id, vestingAmount, startBlock, lockLength) ++ historyActions)
349349 }
350350 else throw("Strict value is not equal to itself.")
351351 }
352352
353353
354354
355355 @Callable(i)
356356 func ban (userAddress) = {
357357 let checks = [if (if ((adminList == nil))
358358 then true
359359 else containsElement(adminList, toString(i.caller)))
360360 then true
361361 else throwErr("you must be admin"), if (!(containsElement(banList, userAddress)))
362362 then true
363363 else throwErr(makeString(["user already in a ban list:", userAddress], " "))]
364364 if ((checks == checks))
365365 then {
366366 let $t095039591 = getMoveAllUnlockedToAccumulatorActions(userAddress)
367367 let moveToAccumulatedActions = $t095039591._1
368368 let _a = $t095039591._2
369369 let addToBanListActions = [StringEntry(keyBanList, makeString_11C((banList :+ userAddress), "__"))]
370370 (moveToAccumulatedActions ++ addToBanListActions)
371371 }
372372 else throw("Strict value is not equal to itself.")
373373 }
374374
375375
376376
377377 @Callable(i)
378378 func unban (userAddress) = {
379379 let checks = [if (if ((adminList == nil))
380380 then true
381381 else containsElement(adminList, toString(i.caller)))
382382 then true
383383 else throwErr("you must be admin"), if (containsElement(banList, userAddress))
384384 then true
385385 else throwErr(makeString(["user not in a ban list:", userAddress], " "))]
386386 if ((checks == checks))
387387 then {
388388 let newBanList = match indexOf(banList, userAddress) {
389389 case ind: Int =>
390390 removeByIndex(banList, ind)
391391 case _ =>
392392 throwErr("user address index in ban list is not found")
393393 }
394394 if ((newBanList == nil))
395395 then [DeleteEntry(keyBanList)]
396396 else [StringEntry(keyBanList, makeString_11C(newBanList, "__"))]
397397 }
398398 else throw("Strict value is not equal to itself.")
399399 }
400400
401401
402402
403403 @Callable(i)
404404 func claimAll () = {
405405 let userAddress = toString(i.caller)
406406 let $t01048410549 = getClaimAllActions(userAddress)
407407 let claimActions = $t01048410549._1
408408 let totalAmount = $t01048410549._2
409409 let historyActions = [StringEntry(keyVestingHistory("claimed", userAddress, toBase58String(i.transactionId)), toString(totalAmount))]
410410 if ((totalAmount > 0))
411411 then (claimActions ++ historyActions)
412412 else throwErr("nothing to claim")
413413 }
414414
415415
416416
417417 @Callable(i)
418418 func userInfoREADONLY (userAddress) = {
419419 let $t01115011205 = getClaimAllActions(userAddress)
420420 let _a = $t01115011205._1
421421 let totalAmount = $t01115011205._2
422422 let accumulatedAmount = valueOrElse(getInteger(this, keyUserAccumulated(userAddress)), 0)
423423 $Tuple2(nil, $Tuple3(totalAmount, accumulatedAmount, getVestingUserInfo(userAddress)))
424424 }
425425
426426
427+
428+@Callable(i)
429+func foo () = {
430+ let ch = throw("err")
431+ if ((ch == ch))
432+ then nil
433+ else throw("Strict value is not equal to itself.")
434+ }
435+
436+
427437 @Verifier(tx)
428438 func verify () = {
429439 let targetPublicKey = match managerPublicKeyOrUnit() {
430440 case pk: ByteVector =>
431441 pk
432442 case _: Unit =>
433443 tx.senderPublicKey
434444 case _ =>
435445 throw("Match error")
436446 }
437447 sigVerify(tx.bodyBytes, tx.proofs[0], targetPublicKey)
438448 }
439449

github/deemru/w8io/169f3d6 
61.70 ms