tx · 3ugbYTTe5RSAEHKaUcink3srFrtFXse1o2mpQfX4Mp6R 3MwyBKGZcdChEK9Z55HwLn3A2EgwEJJpqC1: -0.01300000 Waves 2024.01.12 10:37 [2928005] smart account 3MwyBKGZcdChEK9Z55HwLn3A2EgwEJJpqC1 > SELF 0.00000000 Waves
{ "type": 13, "id": "3ugbYTTe5RSAEHKaUcink3srFrtFXse1o2mpQfX4Mp6R", "fee": 1300000, "feeAssetId": null, "timestamp": 1705045112643, "version": 2, "chainId": 84, "sender": "3MwyBKGZcdChEK9Z55HwLn3A2EgwEJJpqC1", "senderPublicKey": "7c3qLtcJ7EaPS2JDjXv8MBbd4kpyc6R27wcn5GgvZhur", "proofs": [ "3sbe8cdjkU5CL2LpzSVAdedurLcGAqhswvfz9UjWduuE26muW234DWfKkR6uUEgEQy5w973FC4oAuA88rCNwq7R5" ], "script": "base64:BgIbCAISBgoECAEBARIDCgEIEgMKAQgSABIDCgEIIQAMY29udHJhY3RGaWxlAhB2ZXN0aW5nX25lby5yaWRlAANTRVACAl9fAAhJRFNfTElTVAkAzAgCAAAJAMwIAgABCQDMCAIAAgkAzAgCAAMJAMwIAgAECQDMCAIABQkAzAgCAAYJAMwIAgAHCQDMCAIACAkAzAgCAAkJAMwIAgAKCQDMCAIACwkAzAgCAAwJAMwIAgANCQDMCAIADgkAzAgCAA8JAMwIAgAQCQDMCAIAEQkAzAgCABIJAMwIAgATCQDMCAIAFAkAzAgCABUJAMwIAgAWCQDMCAIAFwkAzAgCABgJAMwIAgAZCQDMCAIAGgkAzAgCABsJAMwIAgAcCQDMCAIAHQUDbmlsABFNQVhfVkVTVElOR19DT1VOVAkAkAMBBQhJRFNfTElTVAEIdGhyb3dFcnIBA21zZwkAAgEJAKwCAgkArAICBQxjb250cmFjdEZpbGUCAjogBQNtc2cBE2tleU1hbmFnZXJQdWJsaWNLZXkAAhQlc19fbWFuYWdlclB1YmxpY0tleQEWa2V5TWFuYWdlclZhdWx0QWRkcmVzcwACFyVzX19tYW5hZ2VyVmF1bHRBZGRyZXNzARxnZXRNYW5hZ2VyVmF1bHRBZGRyZXNzT3JUaGlzAAQHJG1hdGNoMAkAoggBCQEWa2V5TWFuYWdlclZhdWx0QWRkcmVzcwADCQABAgUHJG1hdGNoMAIGU3RyaW5nBAFzBQckbWF0Y2gwCQERQGV4dHJOYXRpdmUoMTA2MikBBQFzBQR0aGlzARZtYW5hZ2VyUHVibGljS2V5T3JVbml0AAQTbWFuYWdlclZhdWx0QWRkcmVzcwkBHGdldE1hbmFnZXJWYXVsdEFkZHJlc3NPclRoaXMABAckbWF0Y2gwCQCdCAIFE21hbmFnZXJWYXVsdEFkZHJlc3MJARNrZXlNYW5hZ2VyUHVibGljS2V5AAMJAAECBQckbWF0Y2gwAgZTdHJpbmcEAXMFByRtYXRjaDAJANkEAQUBcwMJAAECBQckbWF0Y2gwAgRVbml0BQR1bml0CQACAQILTWF0Y2ggZXJyb3IACmtleUFzc2V0SWQJALkJAgkAzAgCAgIlcwkAzAgCAgdhc3NldElkBQNuaWwFA1NFUAANYXNzZXRJZFN0cmluZwkBC3ZhbHVlT3JFbHNlAgkAnQgCBQR0aGlzBQprZXlBc3NldElkAgVXQVZFUwAMYXNzZXRJZEJ5dGVzAwkAAAIFDWFzc2V0SWRTdHJpbmcCBVdBVkVTBQR1bml0CQDZBAEFDWFzc2V0SWRTdHJpbmcADGtleUFkbWluTGlzdAkAuQkCCQDMCAICAiVzCQDMCAICEGFkbWluQWRkcmVzc0xpc3QFA25pbAUDU0VQAAprZXlCYW5MaXN0CQC5CQIJAMwIAgICJXMJAMwIAgIHYmFuTGlzdAUDbmlsBQNTRVAACWFkbWluTGlzdAQHJG1hdGNoMAkAnQgCBQR0aGlzBQxrZXlBZG1pbkxpc3QDCQABAgUHJG1hdGNoMAIGU3RyaW5nBAFzBQckbWF0Y2gwCQC1CQIFAXMFA1NFUAUDbmlsAAdiYW5MaXN0BApiYW5MaXN0UmF3CQELdmFsdWVPckVsc2UCCQCdCAIFBHRoaXMFCmtleUJhbkxpc3QCAAMJAAACBQpiYW5MaXN0UmF3AgAFA25pbAkAvQkCBQpiYW5MaXN0UmF3BQNTRVABFGlzVmFsaWRBZGRyZXNzU3RyaW5nAQ1hZGRyZXNzU3RyaW5nBAckbWF0Y2gwCQCmCAEFDWFkZHJlc3NTdHJpbmcDCQABAgUHJG1hdGNoMAIHQWRkcmVzcwQBYQUHJG1hdGNoMAYHAQ5rZXlVc2VyVmVzdGluZwILdXNlckFkZHJlc3MCaWQEBmNoZWNrcwkAzAgCAwkBFGlzVmFsaWRBZGRyZXNzU3RyaW5nAQULdXNlckFkZHJlc3MGCQEIdGhyb3dFcnIBCQC5CQIJAMwIAgIVYWRkcmVzcyBpcyBub3QgdmFsaWQ6CQDMCAIFC3VzZXJBZGRyZXNzBQNuaWwCASAJAMwIAgMDCQBnAgUCaWQAAAkAZgIFEU1BWF9WRVNUSU5HX0NPVU5UBQJpZAcGCQEIdGhyb3dFcnIBCQC5CQIJAMwIAgIWaWQgc2hvdWxkIGJlIGxlc3MgdGhhbgkAzAgCCQCkAwEFEU1BWF9WRVNUSU5HX0NPVU5UCQDMCAICBGdvdDoJAMwIAgkApAMBBQJpZAUDbmlsAgEgBQNuaWwDCQAAAgUGY2hlY2tzBQZjaGVja3MJALkJAgkAzAgCAgYlcyVzJWQJAMwIAgIHdmVzdGluZwkAzAgCBQt1c2VyQWRkcmVzcwkAzAgCCQCkAwEFAmlkBQNuaWwFA1NFUAkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgESa2V5VXNlckFjY3VtdWxhdGVkAQt1c2VyQWRkcmVzcwQGY2hlY2tzCQDMCAIDCQEUaXNWYWxpZEFkZHJlc3NTdHJpbmcBBQt1c2VyQWRkcmVzcwYJAQh0aHJvd0VycgEJALkJAgkAzAgCAhVhZGRyZXNzIGlzIG5vdCB2YWxpZDoJAMwIAgULdXNlckFkZHJlc3MFA25pbAIBIAUDbmlsAwkAAAIFBmNoZWNrcwUGY2hlY2tzCQC5CQIJAMwIAgIEJXMlcwkAzAgCAgthY2N1bXVsYXRlZAkAzAgCBQt1c2VyQWRkcmVzcwUDbmlsBQNTRVAJAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4BEWZvcm1hdFVzZXJWZXN0aW5nAw12ZXN0aW5nQW1vdW50CnN0YXJ0QmxvY2sKbG9ja0xlbmd0aAQGY2hlY2tzCQDMCAIDCQBnAgUNdmVzdGluZ0Ftb3VudAAABgkBCHRocm93RXJyAQIhdmVzdGluZyBhbW91bnQgY2Fubm90IGJlIG5lZ2F0aXZlCQDMCAIDCQBnAgUKc3RhcnRCbG9jawAABgkBCHRocm93RXJyAQIec3RhcnQgYmxvY2sgY2Fubm90IGJlIG5lZ2F0aXZlCQDMCAIDCQBnAgUKbG9ja0xlbmd0aAAABgkBCHRocm93RXJyAQIebG9jayBsZW5ndGggY2Fubm90IGJlIG5lZ2F0aXZlBQNuaWwDCQAAAgUGY2hlY2tzBQZjaGVja3MJALkJAgkAzAgCAgYlZCVkJWQJAMwIAgkApAMBBQ12ZXN0aW5nQW1vdW50CQDMCAIJAKQDAQUKc3RhcnRCbG9jawkAzAgCCQCkAwEFCmxvY2tMZW5ndGgFA25pbAUDU0VQCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuARBwYXJzZVVzZXJWZXN0aW5nAgt1c2VyQWRkcmVzcwJpZAQHJG1hdGNoMAkAnQgCBQR0aGlzCQEOa2V5VXNlclZlc3RpbmcCBQt1c2VyQWRkcmVzcwUCaWQDCQABAgUHJG1hdGNoMAIGU3RyaW5nBAlyYXdTdHJpbmcFByRtYXRjaDAEC3NwbGl0U3RyaW5nCQC1CQIFCXJhd1N0cmluZwUDU0VQBA12ZXN0aW5nQW1vdW50CQENcGFyc2VJbnRWYWx1ZQEJAJEDAgULc3BsaXRTdHJpbmcAAQQKc3RhcnRCbG9jawkBDXBhcnNlSW50VmFsdWUBCQCRAwIFC3NwbGl0U3RyaW5nAAIECmxvY2tMZW5ndGgJAQ1wYXJzZUludFZhbHVlAQkAkQMCBQtzcGxpdFN0cmluZwADCQCVCgMFDXZlc3RpbmdBbW91bnQFCnN0YXJ0QmxvY2sFCmxvY2tMZW5ndGgJAJUKAwAAAAAAAAERa2V5VmVzdGluZ0hpc3RvcnkDBmFjdGlvbgt1c2VyQWRkcmVzcwR0eElkCQC5CQIJAMwIAgIIJXMlcyVzJXMJAMwIAgIHaGlzdG9yeQkAzAgCBQt1c2VyQWRkcmVzcwkAzAgCBQZhY3Rpb24JAMwIAgUEdHhJZAUDbmlsBQNTRVABEmNhbGNVbmxvY2tlZEFtb3VudAMGYW1vdW50CnN0YXJ0QmxvY2sKbG9ja0xlbmd0aAQNZWxhcHNlZEJsb2NrcwkAZQIFBmhlaWdodAUKc3RhcnRCbG9jawQOdW5sb2NrZWRBbW91bnQDAwkBAiE9AgUKbG9ja0xlbmd0aAAACQBmAgUNZWxhcHNlZEJsb2NrcwAABwkAlwMBCQDMCAIJAGsDBQZhbW91bnQFDWVsYXBzZWRCbG9ja3MFCmxvY2tMZW5ndGgJAMwIAgUGYW1vdW50BQNuaWwAAAkAlAoCBQ51bmxvY2tlZEFtb3VudAkAZQIFBmFtb3VudAUOdW5sb2NrZWRBbW91bnQBFWdldFVzZXJVbmxvY2tlZEFtb3VudAILdXNlckFkZHJlc3MCaWQECyR0MDM3NzkzODU4CQEQcGFyc2VVc2VyVmVzdGluZwIFC3VzZXJBZGRyZXNzBQJpZAQNdmVzdGluZ0Ftb3VudAgFCyR0MDM3NzkzODU4Al8xBApzdGFydEJsb2NrCAULJHQwMzc3OTM4NTgCXzIECmxvY2tMZW5ndGgIBQskdDAzNzc5Mzg1OAJfMwQLJHQwMzg2MTM5NTgJARJjYWxjVW5sb2NrZWRBbW91bnQDBQ12ZXN0aW5nQW1vdW50BQpzdGFydEJsb2NrBQpsb2NrTGVuZ3RoBA51bmxvY2tlZEFtb3VudAgFCyR0MDM4NjEzOTU4Al8xBA9yZW1haW5pbmdBbW91bnQIBQskdDAzODYxMzk1OAJfMgkAlAoCBQ51bmxvY2tlZEFtb3VudAUPcmVtYWluaW5nQW1vdW50ARdnZXRVcGRhdGVWZXN0aW5nQWN0aW9ucwILdXNlckFkZHJlc3MCaWQECyR0MDQwNjU0MTQ0CQEQcGFyc2VVc2VyVmVzdGluZwIFC3VzZXJBZGRyZXNzBQJpZAQNdmVzdGluZ0Ftb3VudAgFCyR0MDQwNjU0MTQ0Al8xBApzdGFydEJsb2NrCAULJHQwNDA2NTQxNDQCXzIECmxvY2tMZW5ndGgIBQskdDA0MDY1NDE0NAJfMwQLJHQwNDE0NzQyMjUJARVnZXRVc2VyVW5sb2NrZWRBbW91bnQCBQt1c2VyQWRkcmVzcwUCaWQEDnVubG9ja2VkQW1vdW50CAULJHQwNDE0NzQyMjUCXzEED3JlbWFpbmluZ0Ftb3VudAgFCyR0MDQxNDc0MjI1Al8yBA9yZW1haW5pbmdCbG9ja3MJAJYDAQkAzAgCCQBlAgkAZAIFCnN0YXJ0QmxvY2sFCmxvY2tMZW5ndGgFBmhlaWdodAkAzAgCAAAFA25pbAQUdXBkYXRlVmVzdGluZ0FjdGlvbnMDCQECIT0CBQ51bmxvY2tlZEFtb3VudAAAAwkBAiE9AgUPcmVtYWluaW5nQmxvY2tzAAAJAMwIAgkBC1N0cmluZ0VudHJ5AgkBDmtleVVzZXJWZXN0aW5nAgULdXNlckFkZHJlc3MFAmlkCQERZm9ybWF0VXNlclZlc3RpbmcDBQ9yZW1haW5pbmdBbW91bnQFBmhlaWdodAUPcmVtYWluaW5nQmxvY2tzBQNuaWwJAMwIAgkBC0RlbGV0ZUVudHJ5AQkBDmtleVVzZXJWZXN0aW5nAgULdXNlckFkZHJlc3MFAmlkBQNuaWwFA25pbAkAlAoCBRR1cGRhdGVWZXN0aW5nQWN0aW9ucwUOdW5sb2NrZWRBbW91bnQBE2dldFVzZXJDbGFpbUFjdGlvbnMCC3VzZXJBZGRyZXNzAmlkBAskdDA0Njg5NDc3NAkBF2dldFVwZGF0ZVZlc3RpbmdBY3Rpb25zAgULdXNlckFkZHJlc3MFAmlkBBR1cGRhdGVWZXN0aW5nQWN0aW9ucwgFCyR0MDQ2ODk0Nzc0Al8xBA51bmxvY2tlZEFtb3VudAgFCyR0MDQ2ODk0Nzc0Al8yBA90cmFuc2ZlckFjdGlvbnMDCQECIT0CBQ51bmxvY2tlZEFtb3VudAAACQDMCAIJAQ5TY3JpcHRUcmFuc2ZlcgMJARFAZXh0ck5hdGl2ZSgxMDYyKQEFC3VzZXJBZGRyZXNzBQ51bmxvY2tlZEFtb3VudAUMYXNzZXRJZEJ5dGVzBQNuaWwFA25pbAkAlAoCCQDOCAIFFHVwZGF0ZVZlc3RpbmdBY3Rpb25zBQ90cmFuc2ZlckFjdGlvbnMFDnVubG9ja2VkQW1vdW50ARZnZXRBbGxVc2VyQ2xhaW1BY3Rpb25zAQt1c2VyQWRkcmVzcwoBDWFjdGlvbnNIZWxwZXICA2FjYwJpZAQLJHQwNTE0ODUxODgFA2FjYwQXYWxsVmVzdGluZ3NDbGFpbUFjdGlvbnMIBQskdDA1MTQ4NTE4OAJfMQQDc3VtCAULJHQwNTE0ODUxODgCXzIECyR0MDUxOTM1MjcwCQETZ2V0VXNlckNsYWltQWN0aW9ucwIFC3VzZXJBZGRyZXNzBQJpZAQTdmVzdGluZ0NsYWltQWN0aW9ucwgFCyR0MDUxOTM1MjcwAl8xBAtjbGFpbUFtb3VudAgFCyR0MDUxOTM1MjcwAl8yCQCUCgIJAM4IAgUXYWxsVmVzdGluZ3NDbGFpbUFjdGlvbnMFE3Zlc3RpbmdDbGFpbUFjdGlvbnMJAGQCBQNzdW0FC2NsYWltQW1vdW50CgACJGwFCElEU19MSVNUCgACJHMJAJADAQUCJGwKAAUkYWNjMAkAlAoCBQNuaWwAAAoBBSRmMF8xAgIkYQIkaQMJAGcCBQIkaQUCJHMFAiRhCQENYWN0aW9uc0hlbHBlcgIFAiRhCQCRAwIFAiRsBQIkaQoBBSRmMF8yAgIkYQIkaQMJAGcCBQIkaQUCJHMFAiRhCQACAQIUTGlzdCBzaXplIGV4Y2VlZHMgMzAJAQUkZjBfMgIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIFBSRhY2MwAAAAAQACAAMABAAFAAYABwAIAAkACgALAAwADQAOAA8AEAARABIAEwAUABUAFgAXABgAGQAaABsAHAAdAB4BJmdldE1vdmVBbGxVbmxvY2tlZFRvQWNjdW11bGF0b3JBY3Rpb25zAQt1c2VyQWRkcmVzcwoBDWFjdGlvbnNIZWxwZXICA2FjYwJpZAQLJHQwNTU2MzU2MDQFA2FjYwQYdXBkYXRlQWxsVmVzdGluZ3NBY3Rpb25zCAULJHQwNTU2MzU2MDQCXzEEA3N1bQgFCyR0MDU1NjM1NjA0Al8yBAskdDA1NjA5NTY5NAkBF2dldFVwZGF0ZVZlc3RpbmdBY3Rpb25zAgULdXNlckFkZHJlc3MFAmlkBBR1cGRhdGVWZXN0aW5nQWN0aW9ucwgFCyR0MDU2MDk1Njk0Al8xBA51bmxvY2tlZEFtb3VudAgFCyR0MDU2MDk1Njk0Al8yCQCUCgIJAM4IAgUYdXBkYXRlQWxsVmVzdGluZ3NBY3Rpb25zBRR1cGRhdGVWZXN0aW5nQWN0aW9ucwkAZAIFA3N1bQUOdW5sb2NrZWRBbW91bnQECyR0MDU3ODA1ODY4CgACJGwFCElEU19MSVNUCgACJHMJAJADAQUCJGwKAAUkYWNjMAkAlAoCBQNuaWwAAAoBBSRmMF8xAgIkYQIkaQMJAGcCBQIkaQUCJHMFAiRhCQENYWN0aW9uc0hlbHBlcgIFAiRhCQCRAwIFAiRsBQIkaQoBBSRmMF8yAgIkYQIkaQMJAGcCBQIkaQUCJHMFAiRhCQACAQIUTGlzdCBzaXplIGV4Y2VlZHMgMzAJAQUkZjBfMgIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIFBSRhY2MwAAAAAQACAAMABAAFAAYABwAIAAkACgALAAwADQAOAA8AEAARABIAEwAUABUAFgAXABgAGQAaABsAHAAdAB4EGHVwZGF0ZUFsbFZlc3RpbmdzQWN0aW9ucwgFCyR0MDU3ODA1ODY4Al8xBAt1bmxvY2tlZFN1bQgFCyR0MDU3ODA1ODY4Al8yBA5vbGRBY2N1bXVsYXRlZAkBC3ZhbHVlT3JFbHNlAgkAmggCBQR0aGlzCQESa2V5VXNlckFjY3VtdWxhdGVkAQULdXNlckFkZHJlc3MAAAQYdXBkYXRlQWNjdW11bGF0ZWRBY3Rpb25zAwkBAiE9AgULdW5sb2NrZWRTdW0AAAkAzAgCCQEMSW50ZWdlckVudHJ5AgkBEmtleVVzZXJBY2N1bXVsYXRlZAEFC3VzZXJBZGRyZXNzCQBkAgUOb2xkQWNjdW11bGF0ZWQFC3VubG9ja2VkU3VtBQNuaWwFA25pbAkAlAoCCQDOCAIFGHVwZGF0ZUFsbFZlc3RpbmdzQWN0aW9ucwUYdXBkYXRlQWNjdW11bGF0ZWRBY3Rpb25zBQt1bmxvY2tlZFN1bQEaZ2V0Q2xhaW1BY2N1bXVsYXRlZEFjdGlvbnMBC3VzZXJBZGRyZXNzBA5vbGRBY2N1bXVsYXRlZAkBC3ZhbHVlT3JFbHNlAgkAmggCBQR0aGlzCQESa2V5VXNlckFjY3VtdWxhdGVkAQULdXNlckFkZHJlc3MAAAMJAQIhPQIFDm9sZEFjY3VtdWxhdGVkAAAJAJQKAgkAzAgCCQEOU2NyaXB0VHJhbnNmZXIDCQERQGV4dHJOYXRpdmUoMTA2MikBBQt1c2VyQWRkcmVzcwUOb2xkQWNjdW11bGF0ZWQFDGFzc2V0SWRCeXRlcwkAzAgCCQELRGVsZXRlRW50cnkBCQESa2V5VXNlckFjY3VtdWxhdGVkAQULdXNlckFkZHJlc3MFA25pbAUOb2xkQWNjdW11bGF0ZWQJAJQKAgUDbmlsAAABEmdldENsYWltQWxsQWN0aW9ucwELdXNlckFkZHJlc3MECyR0MDY2MzY2NzY5AwkBASEBCQEPY29udGFpbnNFbGVtZW50AgUHYmFuTGlzdAULdXNlckFkZHJlc3MJARZnZXRBbGxVc2VyQ2xhaW1BY3Rpb25zAQULdXNlckFkZHJlc3MJAJQKAgUDbmlsAAAEDGNsYWltQWN0aW9ucwgFCyR0MDY2MzY2NzY5Al8xBA51bmxvY2tlZEFtb3VudAgFCyR0MDY2MzY2NzY5Al8yBAskdDA2NzcyNjg2MgkBGmdldENsYWltQWNjdW11bGF0ZWRBY3Rpb25zAQULdXNlckFkZHJlc3MEF2NsYWltQWNjdW11bGF0ZWRBY3Rpb25zCAULJHQwNjc3MjY4NjICXzEEEWFjY3VtdWxhdGVkQW1vdW50CAULJHQwNjc3MjY4NjICXzIEC3RvdGFsQW1vdW50CQBkAgUOdW5sb2NrZWRBbW91bnQFEWFjY3VtdWxhdGVkQW1vdW50CQCUCgIJAM4IAgUMY2xhaW1BY3Rpb25zBRdjbGFpbUFjY3VtdWxhdGVkQWN0aW9ucwULdG90YWxBbW91bnQBEmdldFZlc3RpbmdVc2VySW5mbwELdXNlckFkZHJlc3MKAQZoZWxwZXICA2FjYwJpZAQLJHQwNzA3NjcxNTUJARBwYXJzZVVzZXJWZXN0aW5nAgULdXNlckFkZHJlc3MFAmlkBA12ZXN0aW5nQW1vdW50CAULJHQwNzA3NjcxNTUCXzEECnN0YXJ0QmxvY2sIBQskdDA3MDc2NzE1NQJfMgQKbG9ja0xlbmd0aAgFCyR0MDcwNzY3MTU1Al8zBAskdDA3MTYwNzIzOAkBFWdldFVzZXJVbmxvY2tlZEFtb3VudAIFC3VzZXJBZGRyZXNzBQJpZAQOdW5sb2NrZWRBbW91bnQIBQskdDA3MTYwNzIzOAJfMQQPcmVtYWluaW5nQW1vdW50CAULJHQwNzE2MDcyMzgCXzIDAwkAAAIFDXZlc3RpbmdBbW91bnQAAAYJAQ9jb250YWluc0VsZW1lbnQCBQdiYW5MaXN0BQt1c2VyQWRkcmVzcwUDYWNjCQDNCAIFA2FjYwkAzAgCBQ12ZXN0aW5nQW1vdW50CQDMCAIJAGQCBQpzdGFydEJsb2NrBQpsb2NrTGVuZ3RoCQDMCAIFDnVubG9ja2VkQW1vdW50CQDMCAIFD3JlbWFpbmluZ0Ftb3VudAUDbmlsCgACJGwFCElEU19MSVNUCgACJHMJAJADAQUCJGwKAAUkYWNjMAUDbmlsCgEFJGYwXzECAiRhAiRpAwkAZwIFAiRpBQIkcwUCJGEJAQZoZWxwZXICBQIkYQkAkQMCBQIkbAUCJGkKAQUkZjBfMgICJGECJGkDCQBnAgUCJGkFAiRzBQIkYQkAAgECFExpc3Qgc2l6ZSBleGNlZWRzIDMwCQEFJGYwXzICCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECBQUkYWNjMAAAAAEAAgADAAQABQAGAAcACAAJAAoACwAMAA0ADgAPABAAEQASABMAFAAVABYAFwAYABkAGgAbABwAHQAeARVnZXRBdmFpbGFibGVWZXN0aW5nSWQBC3VzZXJBZGRyZXNzCgEGaGVscGVyAgthdmFpbGFibGVJZAJpZAQLJHQwNzU2Mjc2NDEJARBwYXJzZVVzZXJWZXN0aW5nAgULdXNlckFkZHJlc3MFAmlkBA12ZXN0aW5nQW1vdW50CAULJHQwNzU2Mjc2NDECXzEECnN0YXJ0QmxvY2sIBQskdDA3NTYyNzY0MQJfMgQKbG9ja0xlbmd0aAgFCyR0MDc1NjI3NjQxAl8zAwkAZgIFDXZlc3RpbmdBbW91bnQAAAULYXZhaWxhYmxlSWQDCQAAAgULYXZhaWxhYmxlSWQA////////////AQUCaWQJAJcDAQkAzAgCBQthdmFpbGFibGVJZAkAzAgCBQJpZAUDbmlsBAthdmFpbGFibGVJZAoAAiRsBQhJRFNfTElTVAoAAiRzCQCQAwEFAiRsCgAFJGFjYzAA////////////AQoBBSRmMF8xAgIkYQIkaQMJAGcCBQIkaQUCJHMFAiRhCQEGaGVscGVyAgUCJGEJAJEDAgUCJGwFAiRpCgEFJGYwXzICAiRhAiRpAwkAZwIFAiRpBQIkcwUCJGEJAAIBAhRMaXN0IHNpemUgZXhjZWVkcyAzMAkBBSRmMF8yAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgUFJGFjYzAAAAABAAIAAwAEAAUABgAHAAgACQAKAAsADAANAA4ADwAQABEAEgATABQAFQAWABcAGAAZABoAGwAcAB0AHgMJAAACBQthdmFpbGFibGVJZAD///////////8BCQEIdGhyb3dFcnIBCQC5CQIJAMwIAgIodXNlciBleGNlZWRlZCBtYXggYWN0aXZlIHZlc3RpbmcgY291bnQ6IAkAzAgCBQt1c2VyQWRkcmVzcwUDbmlsAgEgBQthdmFpbGFibGVJZAEUZ2V0TmV3VmVzdGluZ0FjdGlvbnMFC3VzZXJBZGRyZXNzAmlkDXZlc3RpbmdBbW91bnQKc3RhcnRCbG9jawpsb2NrTGVuZ3RoCQDMCAIJAQtTdHJpbmdFbnRyeQIJAQ5rZXlVc2VyVmVzdGluZwIFC3VzZXJBZGRyZXNzBQJpZAkBEWZvcm1hdFVzZXJWZXN0aW5nAwUNdmVzdGluZ0Ftb3VudAUKc3RhcnRCbG9jawUKbG9ja0xlbmd0aAUDbmlsBQFpAQ52ZXN0aW5nRm9yVXNlcgQLdXNlckFkZHJlc3MNdmVzdGluZ0Ftb3VudApzdGFydEJsb2NrCmxvY2tMZW5ndGgEBWNoZWNrCQDMCAIDCQAAAgkAkAMBCAUBaQhwYXltZW50cwABBgkBCHRocm93RXJyAQIgc2hvdWxkIGJlIHdpdGggZXhhY3RseSAxIHBheW1lbnQJAMwIAgMJAAACCAkAkQMCCAUBaQhwYXltZW50cwAAB2Fzc2V0SWQFDGFzc2V0SWRCeXRlcwYJAQh0aHJvd0VycgEJALkJAgkAzAgCAhtwYXltZW50IGFzc2V0SWQgc2hvdWxkIGJlOiAJAMwIAgUNYXNzZXRJZFN0cmluZwUDbmlsAgEgCQDMCAIDCQAAAggJAJEDAggFAWkIcGF5bWVudHMAAAZhbW91bnQFDXZlc3RpbmdBbW91bnQGCQEIdGhyb3dFcnIBAi9wYXltZW50IGFtb3VudCBzaG91bGQgYmUgZXF1YWwgdG8gdmVzdGluZ0Ftb3VudAkAzAgCAwMJAAACBQlhZG1pbkxpc3QFA25pbAYJAQ9jb250YWluc0VsZW1lbnQCBQlhZG1pbkxpc3QJAKUIAQgFAWkGY2FsbGVyBgkBCHRocm93RXJyAQIReW91IG11c3QgYmUgYWRtaW4FA25pbAMJAAACBQVjaGVjawUFY2hlY2sEAmlkCQEVZ2V0QXZhaWxhYmxlVmVzdGluZ0lkAQULdXNlckFkZHJlc3MEDmhpc3RvcnlBY3Rpb25zCQDMCAIJAQtTdHJpbmdFbnRyeQIJARFrZXlWZXN0aW5nSGlzdG9yeQMCBnZlc3RlZAULdXNlckFkZHJlc3MJANgEAQgFAWkNdHJhbnNhY3Rpb25JZAkAuQkCCQDMCAIJAKQDAQUNdmVzdGluZ0Ftb3VudAkAzAgCCQCkAwEFCnN0YXJ0QmxvY2sJAMwIAgkApAMBBQpsb2NrTGVuZ3RoBQNuaWwFA1NFUAUDbmlsCQDOCAIJARRnZXROZXdWZXN0aW5nQWN0aW9ucwUFC3VzZXJBZGRyZXNzBQJpZAUNdmVzdGluZ0Ftb3VudAUKc3RhcnRCbG9jawUKbG9ja0xlbmd0aAUOaGlzdG9yeUFjdGlvbnMJAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4BaQEDYmFuAQt1c2VyQWRkcmVzcwQGY2hlY2tzCQDMCAIDAwkAAAIFCWFkbWluTGlzdAUDbmlsBgkBD2NvbnRhaW5zRWxlbWVudAIFCWFkbWluTGlzdAkApQgBCAUBaQZjYWxsZXIGCQEIdGhyb3dFcnIBAhF5b3UgbXVzdCBiZSBhZG1pbgkAzAgCAwkBASEBCQEPY29udGFpbnNFbGVtZW50AgUHYmFuTGlzdAULdXNlckFkZHJlc3MGCQEIdGhyb3dFcnIBCQC5CQIJAMwIAgIbdXNlciBhbHJlYWR5IGluIGEgYmFuIGxpc3Q6CQDMCAIFC3VzZXJBZGRyZXNzBQNuaWwCASAFA25pbAMJAAACBQZjaGVja3MFBmNoZWNrcwQLJHQwOTUwMzk1OTEJASZnZXRNb3ZlQWxsVW5sb2NrZWRUb0FjY3VtdWxhdG9yQWN0aW9ucwEFC3VzZXJBZGRyZXNzBBhtb3ZlVG9BY2N1bXVsYXRlZEFjdGlvbnMIBQskdDA5NTAzOTU5MQJfMQQCX2EIBQskdDA5NTAzOTU5MQJfMgQTYWRkVG9CYW5MaXN0QWN0aW9ucwkAzAgCCQELU3RyaW5nRW50cnkCBQprZXlCYW5MaXN0CQC7CQIJAM0IAgUHYmFuTGlzdAULdXNlckFkZHJlc3MCAl9fBQNuaWwJAM4IAgUYbW92ZVRvQWNjdW11bGF0ZWRBY3Rpb25zBRNhZGRUb0Jhbkxpc3RBY3Rpb25zCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuAWkBBXVuYmFuAQt1c2VyQWRkcmVzcwQGY2hlY2tzCQDMCAIDAwkAAAIFCWFkbWluTGlzdAUDbmlsBgkBD2NvbnRhaW5zRWxlbWVudAIFCWFkbWluTGlzdAkApQgBCAUBaQZjYWxsZXIGCQEIdGhyb3dFcnIBAhF5b3UgbXVzdCBiZSBhZG1pbgkAzAgCAwkBD2NvbnRhaW5zRWxlbWVudAIFB2Jhbkxpc3QFC3VzZXJBZGRyZXNzBgkBCHRocm93RXJyAQkAuQkCCQDMCAICF3VzZXIgbm90IGluIGEgYmFuIGxpc3Q6CQDMCAIFC3VzZXJBZGRyZXNzBQNuaWwCASAFA25pbAMJAAACBQZjaGVja3MFBmNoZWNrcwQKbmV3QmFuTGlzdAQHJG1hdGNoMAkAzwgCBQdiYW5MaXN0BQt1c2VyQWRkcmVzcwMJAAECBQckbWF0Y2gwAgNJbnQEA2luZAUHJG1hdGNoMAkA0QgCBQdiYW5MaXN0BQNpbmQJAQh0aHJvd0VycgECK3VzZXIgYWRkcmVzcyBpbmRleCBpbiBiYW4gbGlzdCBpcyBub3QgZm91bmQDCQAAAgUKbmV3QmFuTGlzdAUDbmlsCQDMCAIJAQtEZWxldGVFbnRyeQEFCmtleUJhbkxpc3QFA25pbAkAzAgCCQELU3RyaW5nRW50cnkCBQprZXlCYW5MaXN0CQC7CQIFCm5ld0Jhbkxpc3QCAl9fBQNuaWwJAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4BaQEIY2xhaW1BbGwABAt1c2VyQWRkcmVzcwkApQgBCAUBaQZjYWxsZXIEDSR0MDEwNDg0MTA1NDkJARJnZXRDbGFpbUFsbEFjdGlvbnMBBQt1c2VyQWRkcmVzcwQMY2xhaW1BY3Rpb25zCAUNJHQwMTA0ODQxMDU0OQJfMQQLdG90YWxBbW91bnQIBQ0kdDAxMDQ4NDEwNTQ5Al8yBA5oaXN0b3J5QWN0aW9ucwkAzAgCCQELU3RyaW5nRW50cnkCCQERa2V5VmVzdGluZ0hpc3RvcnkDAgdjbGFpbWVkBQt1c2VyQWRkcmVzcwkA2AQBCAUBaQ10cmFuc2FjdGlvbklkCQCkAwEFC3RvdGFsQW1vdW50BQNuaWwDCQBmAgULdG90YWxBbW91bnQAAAkAzggCBQxjbGFpbUFjdGlvbnMFDmhpc3RvcnlBY3Rpb25zCQEIdGhyb3dFcnIBAhBub3RoaW5nIHRvIGNsYWltAWkBEHVzZXJJbmZvUkVBRE9OTFkBC3VzZXJBZGRyZXNzBA0kdDAxMTE1MDExMjA1CQESZ2V0Q2xhaW1BbGxBY3Rpb25zAQULdXNlckFkZHJlc3MEAl9hCAUNJHQwMTExNTAxMTIwNQJfMQQLdG90YWxBbW91bnQIBQ0kdDAxMTE1MDExMjA1Al8yBBFhY2N1bXVsYXRlZEFtb3VudAkBC3ZhbHVlT3JFbHNlAgkAmggCBQR0aGlzCQESa2V5VXNlckFjY3VtdWxhdGVkAQULdXNlckFkZHJlc3MAAAkAlAoCBQNuaWwJAJUKAwULdG90YWxBbW91bnQFEWFjY3VtdWxhdGVkQW1vdW50CQESZ2V0VmVzdGluZ1VzZXJJbmZvAQULdXNlckFkZHJlc3MBAnR4AQZ2ZXJpZnkABA90YXJnZXRQdWJsaWNLZXkEByRtYXRjaDAJARZtYW5hZ2VyUHVibGljS2V5T3JVbml0AAMJAAECBQckbWF0Y2gwAgpCeXRlVmVjdG9yBAJwawUHJG1hdGNoMAUCcGsDCQABAgUHJG1hdGNoMAIEVW5pdAgFAnR4D3NlbmRlclB1YmxpY0tleQkAAgECC01hdGNoIGVycm9yCQD0AwMIBQJ0eAlib2R5Qnl0ZXMJAJEDAggFAnR4BnByb29mcwAABQ90YXJnZXRQdWJsaWNLZXlvdhaU", "height": 2928005, "applicationStatus": "succeeded", "spentComplexity": 0 } View: original | compacted Prev: DZzX9CgaF2xRFZ6oAHDynpCyNcv8vpCYfUj1PBHCGtQ3 Next: 6ufmP5RMMxW3rVNkZsrigp22Mnx2QtAE6Mzr6XPNJWkU Diff:
Old | New | Differences | |
---|---|---|---|
12 | 12 | func e (f) = throw(((a + ": ") + f)) | |
13 | 13 | ||
14 | 14 | ||
15 | - | ||
15 | + | func g () = "%s__managerPublicKey" | |
16 | 16 | ||
17 | - | let h = valueOrElse(getString(this, g), "WAVES") | |
18 | 17 | ||
19 | - | let i = if ((h == "WAVES")) | |
18 | + | func h () = "%s__managerVaultAddress" | |
19 | + | ||
20 | + | ||
21 | + | func i () = { | |
22 | + | let j = getString(h()) | |
23 | + | if ($isInstanceOf(j, "String")) | |
24 | + | then { | |
25 | + | let k = j | |
26 | + | addressFromStringValue(k) | |
27 | + | } | |
28 | + | else this | |
29 | + | } | |
30 | + | ||
31 | + | ||
32 | + | func l () = { | |
33 | + | let m = i() | |
34 | + | let j = getString(m, g()) | |
35 | + | if ($isInstanceOf(j, "String")) | |
36 | + | then { | |
37 | + | let k = j | |
38 | + | fromBase58String(k) | |
39 | + | } | |
40 | + | else if ($isInstanceOf(j, "Unit")) | |
41 | + | then unit | |
42 | + | else throw("Match error") | |
43 | + | } | |
44 | + | ||
45 | + | ||
46 | + | let n = makeString(["%s", "assetId"], b) | |
47 | + | ||
48 | + | let o = valueOrElse(getString(this, n), "WAVES") | |
49 | + | ||
50 | + | let p = if ((o == "WAVES")) | |
20 | 51 | then unit | |
21 | - | else fromBase58String( | |
52 | + | else fromBase58String(o) | |
22 | 53 | ||
23 | - | let | |
54 | + | let q = makeString(["%s", "adminAddressList"], b) | |
24 | 55 | ||
25 | - | let | |
56 | + | let r = makeString(["%s", "banList"], b) | |
26 | 57 | ||
27 | - | let | |
28 | - | let | |
29 | - | if ($isInstanceOf( | |
58 | + | let s = { | |
59 | + | let j = getString(this, q) | |
60 | + | if ($isInstanceOf(j, "String")) | |
30 | 61 | then { | |
31 | - | let | |
32 | - | split( | |
62 | + | let k = j | |
63 | + | split(k, b) | |
33 | 64 | } | |
34 | 65 | else nil | |
35 | 66 | } | |
36 | 67 | ||
37 | - | let o = { | |
38 | - | let m = getString(this, k) | |
39 | - | if ($isInstanceOf(m, "String")) | |
40 | - | then { | |
41 | - | let n = m | |
42 | - | if ((n == "")) | |
43 | - | then nil | |
44 | - | else split_51C(n, b) | |
45 | - | } | |
46 | - | else nil | |
68 | + | let t = { | |
69 | + | let u = valueOrElse(getString(this, r), "") | |
70 | + | if ((u == "")) | |
71 | + | then nil | |
72 | + | else split_51C(u, b) | |
47 | 73 | } | |
48 | 74 | ||
49 | - | func | |
50 | - | let | |
51 | - | if ($isInstanceOf( | |
75 | + | func v (w) = { | |
76 | + | let j = addressFromString(w) | |
77 | + | if ($isInstanceOf(j, "Address")) | |
52 | 78 | then { | |
53 | - | let | |
79 | + | let x = j | |
54 | 80 | true | |
55 | 81 | } | |
56 | 82 | else false | |
57 | 83 | } | |
58 | 84 | ||
59 | 85 | ||
60 | - | func | |
61 | - | let | |
86 | + | func y (z,A) = { | |
87 | + | let B = [if (v(z)) | |
62 | 88 | then true | |
63 | - | else e(makeString(["address is not valid:", | |
64 | - | then (d > | |
89 | + | else e(makeString(["address is not valid:", z], " ")), if (if ((A >= 0)) | |
90 | + | then (d > A) | |
65 | 91 | else false) | |
66 | 92 | then true | |
67 | - | else e(makeString(["id should be less than", toString(d), "got:", toString( | |
68 | - | if (( | |
69 | - | then makeString(["%s%s%d", "vesting", | |
93 | + | else e(makeString(["id should be less than", toString(d), "got:", toString(A)], " "))] | |
94 | + | if ((B == B)) | |
95 | + | then makeString(["%s%s%d", "vesting", z, toString(A)], b) | |
70 | 96 | else throw("Strict value is not equal to itself.") | |
71 | 97 | } | |
72 | 98 | ||
73 | 99 | ||
74 | - | func | |
75 | - | let | |
100 | + | func C (z) = { | |
101 | + | let B = [if (v(z)) | |
76 | 102 | then true | |
77 | - | else e(makeString(["address is not valid:", | |
78 | - | if (( | |
79 | - | then makeString(["%s%s", "accumulated", | |
103 | + | else e(makeString(["address is not valid:", z], " "))] | |
104 | + | if ((B == B)) | |
105 | + | then makeString(["%s%s", "accumulated", z], b) | |
80 | 106 | else throw("Strict value is not equal to itself.") | |
81 | 107 | } | |
82 | 108 | ||
83 | 109 | ||
84 | - | func | |
85 | - | let | |
110 | + | func D (E,F,G) = { | |
111 | + | let B = [if ((E >= 0)) | |
86 | 112 | then true | |
87 | - | else e("vesting amount cannot be negative"), if (( | |
113 | + | else e("vesting amount cannot be negative"), if ((F >= 0)) | |
88 | 114 | then true | |
89 | - | else e("start block cannot be negative"), if (( | |
115 | + | else e("start block cannot be negative"), if ((G >= 0)) | |
90 | 116 | then true | |
91 | 117 | else e("lock length cannot be negative")] | |
92 | - | if (( | |
93 | - | then makeString(["%d%d%d", toString( | |
118 | + | if ((B == B)) | |
119 | + | then makeString(["%d%d%d", toString(E), toString(F), toString(G)], b) | |
94 | 120 | else throw("Strict value is not equal to itself.") | |
95 | 121 | } | |
96 | 122 | ||
97 | 123 | ||
98 | - | func | |
99 | - | let | |
100 | - | if ($isInstanceOf( | |
124 | + | func H (z,A) = { | |
125 | + | let j = getString(this, y(z, A)) | |
126 | + | if ($isInstanceOf(j, "String")) | |
101 | 127 | then { | |
102 | - | let | |
103 | - | let | |
104 | - | let | |
105 | - | let | |
106 | - | let | |
107 | - | $Tuple3( | |
128 | + | let I = j | |
129 | + | let J = split(I, b) | |
130 | + | let E = parseIntValue(J[1]) | |
131 | + | let F = parseIntValue(J[2]) | |
132 | + | let G = parseIntValue(J[3]) | |
133 | + | $Tuple3(E, F, G) | |
108 | 134 | } | |
109 | 135 | else $Tuple3(0, 0, 0) | |
110 | 136 | } | |
111 | 137 | ||
112 | 138 | ||
113 | - | func | |
139 | + | func K (L,z,M) = makeString(["%s%s%s%s", "history", z, L, M], b) | |
114 | 140 | ||
115 | 141 | ||
116 | - | func | |
117 | - | let | |
118 | - | let | |
119 | - | then ( | |
142 | + | func N (O,F,G) = { | |
143 | + | let P = (height - F) | |
144 | + | let Q = if (if ((G != 0)) | |
145 | + | then (P > 0) | |
120 | 146 | else false) | |
121 | - | then min([fraction( | |
147 | + | then min([fraction(O, P, G), O]) | |
122 | 148 | else 0 | |
123 | - | $Tuple2( | |
149 | + | $Tuple2(Q, (O - Q)) | |
124 | 150 | } | |
125 | 151 | ||
126 | 152 | ||
127 | - | func | |
128 | - | let | |
129 | - | let | |
130 | - | let | |
131 | - | let | |
132 | - | let | |
133 | - | let | |
134 | - | let | |
135 | - | $Tuple2( | |
153 | + | func R (z,A) = { | |
154 | + | let S = H(z, A) | |
155 | + | let E = S._1 | |
156 | + | let F = S._2 | |
157 | + | let G = S._3 | |
158 | + | let T = N(E, F, G) | |
159 | + | let Q = T._1 | |
160 | + | let U = T._2 | |
161 | + | $Tuple2(Q, U) | |
136 | 162 | } | |
137 | 163 | ||
138 | 164 | ||
139 | - | func | |
140 | - | let | |
141 | - | let | |
142 | - | let | |
143 | - | let | |
144 | - | let | |
145 | - | let | |
146 | - | let | |
147 | - | let | |
148 | - | let | |
149 | - | then if (( | |
150 | - | then [StringEntry( | |
151 | - | else [DeleteEntry( | |
165 | + | func V (z,A) = { | |
166 | + | let W = H(z, A) | |
167 | + | let E = W._1 | |
168 | + | let F = W._2 | |
169 | + | let G = W._3 | |
170 | + | let X = R(z, A) | |
171 | + | let Q = X._1 | |
172 | + | let U = X._2 | |
173 | + | let Y = max([((F + G) - height), 0]) | |
174 | + | let Z = if ((Q != 0)) | |
175 | + | then if ((Y != 0)) | |
176 | + | then [StringEntry(y(z, A), D(U, height, Y))] | |
177 | + | else [DeleteEntry(y(z, A))] | |
152 | 178 | else nil | |
153 | - | $Tuple2( | |
179 | + | $Tuple2(Z, Q) | |
154 | 180 | } | |
155 | 181 | ||
156 | 182 | ||
157 | - | func | |
158 | - | let | |
159 | - | let | |
160 | - | let | |
161 | - | let | |
162 | - | then [ScriptTransfer(addressFromStringValue( | |
183 | + | func aa (z,A) = { | |
184 | + | let ab = V(z, A) | |
185 | + | let Z = ab._1 | |
186 | + | let Q = ab._2 | |
187 | + | let ac = if ((Q != 0)) | |
188 | + | then [ScriptTransfer(addressFromStringValue(z), Q, p)] | |
163 | 189 | else nil | |
164 | - | $Tuple2(( | |
190 | + | $Tuple2((Z ++ ac), Q) | |
165 | 191 | } | |
166 | 192 | ||
167 | 193 | ||
168 | - | func | |
169 | - | func | |
170 | - | let | |
171 | - | let | |
172 | - | let | |
173 | - | let | |
174 | - | let | |
175 | - | let | |
176 | - | $Tuple2(( | |
194 | + | func ad (z) = { | |
195 | + | func ae (af,A) = { | |
196 | + | let ag = af | |
197 | + | let ah = ag._1 | |
198 | + | let ai = ag._2 | |
199 | + | let aj = aa(z, A) | |
200 | + | let ak = aj._1 | |
201 | + | let al = aj._2 | |
202 | + | $Tuple2((ah ++ ak), (ai + al)) | |
177 | 203 | } | |
178 | 204 | ||
179 | - | let | |
180 | - | let | |
181 | - | let | |
182 | - | func | |
183 | - | then | |
184 | - | else | |
205 | + | let am = c | |
206 | + | let an = size(am) | |
207 | + | let ao = $Tuple2(nil, 0) | |
208 | + | func ap (aq,ar) = if ((ar >= an)) | |
209 | + | then aq | |
210 | + | else ae(aq, am[ar]) | |
185 | 211 | ||
186 | - | func | |
187 | - | then | |
212 | + | func as (aq,ar) = if ((ar >= an)) | |
213 | + | then aq | |
188 | 214 | else throw("List size exceeds 30") | |
189 | 215 | ||
190 | - | | |
216 | + | as(ap(ap(ap(ap(ap(ap(ap(ap(ap(ap(ap(ap(ap(ap(ap(ap(ap(ap(ap(ap(ap(ap(ap(ap(ap(ap(ap(ap(ap(ap(ao, 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) | |
191 | 217 | } | |
192 | 218 | ||
193 | 219 | ||
194 | - | func | |
195 | - | func | |
196 | - | let | |
197 | - | let | |
198 | - | let | |
199 | - | let | |
200 | - | let | |
201 | - | let | |
202 | - | $Tuple2(( | |
220 | + | func at (z) = { | |
221 | + | func ae (af,A) = { | |
222 | + | let au = af | |
223 | + | let av = au._1 | |
224 | + | let ai = au._2 | |
225 | + | let aw = V(z, A) | |
226 | + | let Z = aw._1 | |
227 | + | let Q = aw._2 | |
228 | + | $Tuple2((av ++ Z), (ai + Q)) | |
203 | 229 | } | |
204 | 230 | ||
205 | - | let | |
206 | - | let | |
207 | - | let | |
208 | - | let | |
209 | - | func | |
210 | - | then | |
211 | - | else | |
231 | + | let ax = { | |
232 | + | let am = c | |
233 | + | let an = size(am) | |
234 | + | let ao = $Tuple2(nil, 0) | |
235 | + | func ap (aq,ar) = if ((ar >= an)) | |
236 | + | then aq | |
237 | + | else ae(aq, am[ar]) | |
212 | 238 | ||
213 | - | func | |
214 | - | then | |
239 | + | func as (aq,ar) = if ((ar >= an)) | |
240 | + | then aq | |
215 | 241 | else throw("List size exceeds 30") | |
216 | 242 | ||
217 | - | | |
243 | + | as(ap(ap(ap(ap(ap(ap(ap(ap(ap(ap(ap(ap(ap(ap(ap(ap(ap(ap(ap(ap(ap(ap(ap(ap(ap(ap(ap(ap(ap(ap(ao, 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) | |
218 | 244 | } | |
219 | - | let | |
220 | - | let | |
221 | - | let | |
222 | - | let | |
223 | - | then [IntegerEntry( | |
245 | + | let av = ax._1 | |
246 | + | let ay = ax._2 | |
247 | + | let az = valueOrElse(getInteger(this, C(z)), 0) | |
248 | + | let aA = if ((ay != 0)) | |
249 | + | then [IntegerEntry(C(z), (az + ay))] | |
224 | 250 | else nil | |
225 | - | $Tuple2(( | |
251 | + | $Tuple2((av ++ aA), ay) | |
226 | 252 | } | |
227 | 253 | ||
228 | 254 | ||
229 | - | func | |
230 | - | let | |
231 | - | if (( | |
232 | - | then $Tuple2([ScriptTransfer(addressFromStringValue( | |
255 | + | func aB (z) = { | |
256 | + | let az = valueOrElse(getInteger(this, C(z)), 0) | |
257 | + | if ((az != 0)) | |
258 | + | then $Tuple2([ScriptTransfer(addressFromStringValue(z), az, p), DeleteEntry(C(z))], az) | |
233 | 259 | else $Tuple2(nil, 0) | |
234 | 260 | } | |
235 | 261 | ||
236 | 262 | ||
237 | - | func | |
238 | - | let | |
239 | - | then | |
263 | + | func aC (z) = { | |
264 | + | let aD = if (!(containsElement(t, z))) | |
265 | + | then ad(z) | |
240 | 266 | else $Tuple2(nil, 0) | |
241 | - | let | |
242 | - | let | |
243 | - | let | |
244 | - | let | |
245 | - | let | |
246 | - | let | |
247 | - | $Tuple2(( | |
267 | + | let aE = aD._1 | |
268 | + | let Q = aD._2 | |
269 | + | let aF = aB(z) | |
270 | + | let aG = aF._1 | |
271 | + | let aH = aF._2 | |
272 | + | let aI = (Q + aH) | |
273 | + | $Tuple2((aE ++ aG), aI) | |
248 | 274 | } | |
249 | 275 | ||
250 | 276 | ||
251 | - | func | |
252 | - | func | |
253 | - | let | |
254 | - | let | |
255 | - | let | |
256 | - | let | |
257 | - | let | |
258 | - | let | |
259 | - | let | |
260 | - | if (if (( | |
277 | + | func aJ (z) = { | |
278 | + | func aK (af,A) = { | |
279 | + | let aL = H(z, A) | |
280 | + | let E = aL._1 | |
281 | + | let F = aL._2 | |
282 | + | let G = aL._3 | |
283 | + | let aM = R(z, A) | |
284 | + | let Q = aM._1 | |
285 | + | let U = aM._2 | |
286 | + | if (if ((E == 0)) | |
261 | 287 | then true | |
262 | - | else containsElement( | |
263 | - | then | |
264 | - | else ( | |
288 | + | else containsElement(t, z)) | |
289 | + | then af | |
290 | + | else (af :+ [E, (F + G), Q, U]) | |
265 | 291 | } | |
266 | 292 | ||
267 | - | let | |
268 | - | let | |
269 | - | let | |
270 | - | func | |
271 | - | then | |
272 | - | else | |
293 | + | let am = c | |
294 | + | let an = size(am) | |
295 | + | let ao = nil | |
296 | + | func ap (aq,ar) = if ((ar >= an)) | |
297 | + | then aq | |
298 | + | else aK(aq, am[ar]) | |
273 | 299 | ||
274 | - | func | |
275 | - | then | |
300 | + | func as (aq,ar) = if ((ar >= an)) | |
301 | + | then aq | |
276 | 302 | else throw("List size exceeds 30") | |
277 | 303 | ||
278 | - | | |
304 | + | as(ap(ap(ap(ap(ap(ap(ap(ap(ap(ap(ap(ap(ap(ap(ap(ap(ap(ap(ap(ap(ap(ap(ap(ap(ap(ap(ap(ap(ap(ap(ao, 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) | |
279 | 305 | } | |
280 | 306 | ||
281 | 307 | ||
282 | - | func | |
283 | - | func | |
284 | - | let | |
285 | - | let | |
286 | - | let | |
287 | - | let | |
288 | - | if (( | |
289 | - | then | |
290 | - | else if (( | |
291 | - | then | |
292 | - | else min([ | |
308 | + | func aN (z) = { | |
309 | + | func aK (aO,A) = { | |
310 | + | let aP = H(z, A) | |
311 | + | let E = aP._1 | |
312 | + | let F = aP._2 | |
313 | + | let G = aP._3 | |
314 | + | if ((E > 0)) | |
315 | + | then aO | |
316 | + | else if ((aO == -1)) | |
317 | + | then A | |
318 | + | else min([aO, A]) | |
293 | 319 | } | |
294 | 320 | ||
295 | - | let | |
296 | - | let | |
297 | - | let | |
298 | - | let | |
299 | - | func | |
300 | - | then | |
301 | - | else | |
321 | + | let aO = { | |
322 | + | let am = c | |
323 | + | let an = size(am) | |
324 | + | let ao = -1 | |
325 | + | func ap (aq,ar) = if ((ar >= an)) | |
326 | + | then aq | |
327 | + | else aK(aq, am[ar]) | |
302 | 328 | ||
303 | - | func | |
304 | - | then | |
329 | + | func as (aq,ar) = if ((ar >= an)) | |
330 | + | then aq | |
305 | 331 | else throw("List size exceeds 30") | |
306 | 332 | ||
307 | - | | |
333 | + | as(ap(ap(ap(ap(ap(ap(ap(ap(ap(ap(ap(ap(ap(ap(ap(ap(ap(ap(ap(ap(ap(ap(ap(ap(ap(ap(ap(ap(ap(ap(ao, 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) | |
308 | 334 | } | |
309 | - | if (( | |
310 | - | then e(makeString(["user exceeded max active vesting count: ", | |
311 | - | else | |
335 | + | if ((aO == -1)) | |
336 | + | then e(makeString(["user exceeded max active vesting count: ", z], " ")) | |
337 | + | else aO | |
312 | 338 | } | |
313 | 339 | ||
314 | 340 | ||
315 | - | func | |
341 | + | func aQ (z,A,E,F,G) = [StringEntry(y(z, A), D(E, F, G))] | |
316 | 342 | ||
317 | 343 | ||
318 | - | @Callable( | |
319 | - | func vestingForUser ( | |
320 | - | let | |
344 | + | @Callable(aR) | |
345 | + | func vestingForUser (z,E,F,G) = { | |
346 | + | let aS = [if ((size(aR.payments) == 1)) | |
321 | 347 | then true | |
322 | - | else e("should be with exactly 1 payment"), if (( | |
348 | + | else e("should be with exactly 1 payment"), if ((aR.payments[0].assetId == p)) | |
323 | 349 | then true | |
324 | - | else e(makeString(["payment assetId should be: ", | |
350 | + | else e(makeString(["payment assetId should be: ", o], " ")), if ((aR.payments[0].amount == E)) | |
325 | 351 | then true | |
326 | - | else e("payment amount should be equal to vestingAmount"), if (if (( | |
352 | + | else e("payment amount should be equal to vestingAmount"), if (if ((s == nil)) | |
327 | 353 | then true | |
328 | - | else containsElement( | |
354 | + | else containsElement(s, toString(aR.caller))) | |
329 | 355 | then true | |
330 | 356 | else e("you must be admin")] | |
331 | - | if (( | |
357 | + | if ((aS == aS)) | |
332 | 358 | then { | |
333 | - | let | |
334 | - | let | |
335 | - | ( | |
359 | + | let A = aN(z) | |
360 | + | let aT = [StringEntry(K("vested", z, toBase58String(aR.transactionId)), makeString([toString(E), toString(F), toString(G)], b))] | |
361 | + | (aQ(z, A, E, F, G) ++ aT) | |
336 | 362 | } | |
337 | 363 | else throw("Strict value is not equal to itself.") | |
338 | 364 | } | |
339 | 365 | ||
340 | 366 | ||
341 | 367 | ||
342 | - | @Callable( | |
343 | - | func ban ( | |
344 | - | let | |
368 | + | @Callable(aR) | |
369 | + | func ban (z) = { | |
370 | + | let B = [if (if ((s == nil)) | |
345 | 371 | then true | |
346 | - | else containsElement( | |
372 | + | else containsElement(s, toString(aR.caller))) | |
347 | 373 | then true | |
348 | - | else e("you must be admin"), if (!(containsElement( | |
374 | + | else e("you must be admin"), if (!(containsElement(t, z))) | |
349 | 375 | then true | |
350 | - | else e(makeString(["user already in a ban list:", | |
351 | - | if (( | |
376 | + | else e(makeString(["user already in a ban list:", z], " "))] | |
377 | + | if ((B == B)) | |
352 | 378 | then { | |
353 | - | let | |
354 | - | let | |
355 | - | let | |
356 | - | let | |
357 | - | ( | |
379 | + | let aU = at(z) | |
380 | + | let aV = aU._1 | |
381 | + | let aW = aU._2 | |
382 | + | let aX = [StringEntry(r, makeString_11C((t :+ z), "__"))] | |
383 | + | (aV ++ aX) | |
358 | 384 | } | |
359 | 385 | else throw("Strict value is not equal to itself.") | |
360 | 386 | } | |
361 | 387 | ||
362 | 388 | ||
363 | 389 | ||
364 | - | @Callable( | |
365 | - | func unban ( | |
366 | - | let | |
390 | + | @Callable(aR) | |
391 | + | func unban (z) = { | |
392 | + | let B = [if (if ((s == nil)) | |
367 | 393 | then true | |
368 | - | else containsElement( | |
394 | + | else containsElement(s, toString(aR.caller))) | |
369 | 395 | then true | |
370 | - | else e("you must be admin"), if (containsElement( | |
396 | + | else e("you must be admin"), if (containsElement(t, z)) | |
371 | 397 | then true | |
372 | - | else e(makeString(["user not in a ban list:", | |
373 | - | if (( | |
398 | + | else e(makeString(["user not in a ban list:", z], " "))] | |
399 | + | if ((B == B)) | |
374 | 400 | then { | |
375 | - | let | |
376 | - | let | |
377 | - | if ($isInstanceOf( | |
401 | + | let aY = { | |
402 | + | let j = indexOf(t, z) | |
403 | + | if ($isInstanceOf(j, "Int")) | |
378 | 404 | then { | |
379 | - | let | |
380 | - | removeByIndex( | |
405 | + | let aZ = j | |
406 | + | removeByIndex(t, aZ) | |
381 | 407 | } | |
382 | 408 | else e("user address index in ban list is not found") | |
383 | 409 | } | |
384 | - | if (( | |
385 | - | then [DeleteEntry( | |
386 | - | else [StringEntry( | |
410 | + | if ((aY == nil)) | |
411 | + | then [DeleteEntry(r)] | |
412 | + | else [StringEntry(r, makeString_11C(aY, "__"))] | |
387 | 413 | } | |
388 | 414 | else throw("Strict value is not equal to itself.") | |
389 | 415 | } | |
390 | 416 | ||
391 | 417 | ||
392 | 418 | ||
393 | - | @Callable( | |
419 | + | @Callable(aR) | |
394 | 420 | func claimAll () = { | |
395 | - | let | |
396 | - | let | |
397 | - | let | |
398 | - | let | |
399 | - | let | |
400 | - | if (( | |
401 | - | then ( | |
421 | + | let z = toString(aR.caller) | |
422 | + | let ba = aC(z) | |
423 | + | let aE = ba._1 | |
424 | + | let aI = ba._2 | |
425 | + | let aT = [StringEntry(K("claimed", z, toBase58String(aR.transactionId)), toString(aI))] | |
426 | + | if ((aI > 0)) | |
427 | + | then (aE ++ aT) | |
402 | 428 | else e("nothing to claim") | |
403 | 429 | } | |
404 | 430 | ||
405 | 431 | ||
406 | 432 | ||
407 | - | @Callable( | |
408 | - | func userInfoREADONLY ( | |
409 | - | let | |
410 | - | let | |
411 | - | let | |
412 | - | let | |
413 | - | $Tuple2(nil, $Tuple3( | |
433 | + | @Callable(aR) | |
434 | + | func userInfoREADONLY (z) = { | |
435 | + | let bb = aC(z) | |
436 | + | let aW = bb._1 | |
437 | + | let aI = bb._2 | |
438 | + | let aH = valueOrElse(getInteger(this, C(z)), 0) | |
439 | + | $Tuple2(nil, $Tuple3(aI, aH, aJ(z))) | |
414 | 440 | } | |
415 | 441 | ||
442 | + | ||
443 | + | @Verifier(bc) | |
444 | + | func bd () = { | |
445 | + | let be = { | |
446 | + | let j = l() | |
447 | + | if ($isInstanceOf(j, "ByteVector")) | |
448 | + | then { | |
449 | + | let bf = j | |
450 | + | bf | |
451 | + | } | |
452 | + | else if ($isInstanceOf(j, "Unit")) | |
453 | + | then bc.senderPublicKey | |
454 | + | else throw("Match error") | |
455 | + | } | |
456 | + | sigVerify(bc.bodyBytes, bc.proofs[0], be) | |
457 | + | } | |
416 | 458 |
Old | New | Differences | |
---|---|---|---|
1 | 1 | {-# STDLIB_VERSION 6 #-} | |
2 | 2 | {-# SCRIPT_TYPE ACCOUNT #-} | |
3 | 3 | {-# CONTENT_TYPE DAPP #-} | |
4 | 4 | let a = "vesting_neo.ride" | |
5 | 5 | ||
6 | 6 | let b = "__" | |
7 | 7 | ||
8 | 8 | let c = [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] | |
9 | 9 | ||
10 | 10 | let d = size(c) | |
11 | 11 | ||
12 | 12 | func e (f) = throw(((a + ": ") + f)) | |
13 | 13 | ||
14 | 14 | ||
15 | - | ||
15 | + | func g () = "%s__managerPublicKey" | |
16 | 16 | ||
17 | - | let h = valueOrElse(getString(this, g), "WAVES") | |
18 | 17 | ||
19 | - | let i = if ((h == "WAVES")) | |
18 | + | func h () = "%s__managerVaultAddress" | |
19 | + | ||
20 | + | ||
21 | + | func i () = { | |
22 | + | let j = getString(h()) | |
23 | + | if ($isInstanceOf(j, "String")) | |
24 | + | then { | |
25 | + | let k = j | |
26 | + | addressFromStringValue(k) | |
27 | + | } | |
28 | + | else this | |
29 | + | } | |
30 | + | ||
31 | + | ||
32 | + | func l () = { | |
33 | + | let m = i() | |
34 | + | let j = getString(m, g()) | |
35 | + | if ($isInstanceOf(j, "String")) | |
36 | + | then { | |
37 | + | let k = j | |
38 | + | fromBase58String(k) | |
39 | + | } | |
40 | + | else if ($isInstanceOf(j, "Unit")) | |
41 | + | then unit | |
42 | + | else throw("Match error") | |
43 | + | } | |
44 | + | ||
45 | + | ||
46 | + | let n = makeString(["%s", "assetId"], b) | |
47 | + | ||
48 | + | let o = valueOrElse(getString(this, n), "WAVES") | |
49 | + | ||
50 | + | let p = if ((o == "WAVES")) | |
20 | 51 | then unit | |
21 | - | else fromBase58String( | |
52 | + | else fromBase58String(o) | |
22 | 53 | ||
23 | - | let | |
54 | + | let q = makeString(["%s", "adminAddressList"], b) | |
24 | 55 | ||
25 | - | let | |
56 | + | let r = makeString(["%s", "banList"], b) | |
26 | 57 | ||
27 | - | let | |
28 | - | let | |
29 | - | if ($isInstanceOf( | |
58 | + | let s = { | |
59 | + | let j = getString(this, q) | |
60 | + | if ($isInstanceOf(j, "String")) | |
30 | 61 | then { | |
31 | - | let | |
32 | - | split( | |
62 | + | let k = j | |
63 | + | split(k, b) | |
33 | 64 | } | |
34 | 65 | else nil | |
35 | 66 | } | |
36 | 67 | ||
37 | - | let o = { | |
38 | - | let m = getString(this, k) | |
39 | - | if ($isInstanceOf(m, "String")) | |
40 | - | then { | |
41 | - | let n = m | |
42 | - | if ((n == "")) | |
43 | - | then nil | |
44 | - | else split_51C(n, b) | |
45 | - | } | |
46 | - | else nil | |
68 | + | let t = { | |
69 | + | let u = valueOrElse(getString(this, r), "") | |
70 | + | if ((u == "")) | |
71 | + | then nil | |
72 | + | else split_51C(u, b) | |
47 | 73 | } | |
48 | 74 | ||
49 | - | func | |
50 | - | let | |
51 | - | if ($isInstanceOf( | |
75 | + | func v (w) = { | |
76 | + | let j = addressFromString(w) | |
77 | + | if ($isInstanceOf(j, "Address")) | |
52 | 78 | then { | |
53 | - | let | |
79 | + | let x = j | |
54 | 80 | true | |
55 | 81 | } | |
56 | 82 | else false | |
57 | 83 | } | |
58 | 84 | ||
59 | 85 | ||
60 | - | func | |
61 | - | let | |
86 | + | func y (z,A) = { | |
87 | + | let B = [if (v(z)) | |
62 | 88 | then true | |
63 | - | else e(makeString(["address is not valid:", | |
64 | - | then (d > | |
89 | + | else e(makeString(["address is not valid:", z], " ")), if (if ((A >= 0)) | |
90 | + | then (d > A) | |
65 | 91 | else false) | |
66 | 92 | then true | |
67 | - | else e(makeString(["id should be less than", toString(d), "got:", toString( | |
68 | - | if (( | |
69 | - | then makeString(["%s%s%d", "vesting", | |
93 | + | else e(makeString(["id should be less than", toString(d), "got:", toString(A)], " "))] | |
94 | + | if ((B == B)) | |
95 | + | then makeString(["%s%s%d", "vesting", z, toString(A)], b) | |
70 | 96 | else throw("Strict value is not equal to itself.") | |
71 | 97 | } | |
72 | 98 | ||
73 | 99 | ||
74 | - | func | |
75 | - | let | |
100 | + | func C (z) = { | |
101 | + | let B = [if (v(z)) | |
76 | 102 | then true | |
77 | - | else e(makeString(["address is not valid:", | |
78 | - | if (( | |
79 | - | then makeString(["%s%s", "accumulated", | |
103 | + | else e(makeString(["address is not valid:", z], " "))] | |
104 | + | if ((B == B)) | |
105 | + | then makeString(["%s%s", "accumulated", z], b) | |
80 | 106 | else throw("Strict value is not equal to itself.") | |
81 | 107 | } | |
82 | 108 | ||
83 | 109 | ||
84 | - | func | |
85 | - | let | |
110 | + | func D (E,F,G) = { | |
111 | + | let B = [if ((E >= 0)) | |
86 | 112 | then true | |
87 | - | else e("vesting amount cannot be negative"), if (( | |
113 | + | else e("vesting amount cannot be negative"), if ((F >= 0)) | |
88 | 114 | then true | |
89 | - | else e("start block cannot be negative"), if (( | |
115 | + | else e("start block cannot be negative"), if ((G >= 0)) | |
90 | 116 | then true | |
91 | 117 | else e("lock length cannot be negative")] | |
92 | - | if (( | |
93 | - | then makeString(["%d%d%d", toString( | |
118 | + | if ((B == B)) | |
119 | + | then makeString(["%d%d%d", toString(E), toString(F), toString(G)], b) | |
94 | 120 | else throw("Strict value is not equal to itself.") | |
95 | 121 | } | |
96 | 122 | ||
97 | 123 | ||
98 | - | func | |
99 | - | let | |
100 | - | if ($isInstanceOf( | |
124 | + | func H (z,A) = { | |
125 | + | let j = getString(this, y(z, A)) | |
126 | + | if ($isInstanceOf(j, "String")) | |
101 | 127 | then { | |
102 | - | let | |
103 | - | let | |
104 | - | let | |
105 | - | let | |
106 | - | let | |
107 | - | $Tuple3( | |
128 | + | let I = j | |
129 | + | let J = split(I, b) | |
130 | + | let E = parseIntValue(J[1]) | |
131 | + | let F = parseIntValue(J[2]) | |
132 | + | let G = parseIntValue(J[3]) | |
133 | + | $Tuple3(E, F, G) | |
108 | 134 | } | |
109 | 135 | else $Tuple3(0, 0, 0) | |
110 | 136 | } | |
111 | 137 | ||
112 | 138 | ||
113 | - | func | |
139 | + | func K (L,z,M) = makeString(["%s%s%s%s", "history", z, L, M], b) | |
114 | 140 | ||
115 | 141 | ||
116 | - | func | |
117 | - | let | |
118 | - | let | |
119 | - | then ( | |
142 | + | func N (O,F,G) = { | |
143 | + | let P = (height - F) | |
144 | + | let Q = if (if ((G != 0)) | |
145 | + | then (P > 0) | |
120 | 146 | else false) | |
121 | - | then min([fraction( | |
147 | + | then min([fraction(O, P, G), O]) | |
122 | 148 | else 0 | |
123 | - | $Tuple2( | |
149 | + | $Tuple2(Q, (O - Q)) | |
124 | 150 | } | |
125 | 151 | ||
126 | 152 | ||
127 | - | func | |
128 | - | let | |
129 | - | let | |
130 | - | let | |
131 | - | let | |
132 | - | let | |
133 | - | let | |
134 | - | let | |
135 | - | $Tuple2( | |
153 | + | func R (z,A) = { | |
154 | + | let S = H(z, A) | |
155 | + | let E = S._1 | |
156 | + | let F = S._2 | |
157 | + | let G = S._3 | |
158 | + | let T = N(E, F, G) | |
159 | + | let Q = T._1 | |
160 | + | let U = T._2 | |
161 | + | $Tuple2(Q, U) | |
136 | 162 | } | |
137 | 163 | ||
138 | 164 | ||
139 | - | func | |
140 | - | let | |
141 | - | let | |
142 | - | let | |
143 | - | let | |
144 | - | let | |
145 | - | let | |
146 | - | let | |
147 | - | let | |
148 | - | let | |
149 | - | then if (( | |
150 | - | then [StringEntry( | |
151 | - | else [DeleteEntry( | |
165 | + | func V (z,A) = { | |
166 | + | let W = H(z, A) | |
167 | + | let E = W._1 | |
168 | + | let F = W._2 | |
169 | + | let G = W._3 | |
170 | + | let X = R(z, A) | |
171 | + | let Q = X._1 | |
172 | + | let U = X._2 | |
173 | + | let Y = max([((F + G) - height), 0]) | |
174 | + | let Z = if ((Q != 0)) | |
175 | + | then if ((Y != 0)) | |
176 | + | then [StringEntry(y(z, A), D(U, height, Y))] | |
177 | + | else [DeleteEntry(y(z, A))] | |
152 | 178 | else nil | |
153 | - | $Tuple2( | |
179 | + | $Tuple2(Z, Q) | |
154 | 180 | } | |
155 | 181 | ||
156 | 182 | ||
157 | - | func | |
158 | - | let | |
159 | - | let | |
160 | - | let | |
161 | - | let | |
162 | - | then [ScriptTransfer(addressFromStringValue( | |
183 | + | func aa (z,A) = { | |
184 | + | let ab = V(z, A) | |
185 | + | let Z = ab._1 | |
186 | + | let Q = ab._2 | |
187 | + | let ac = if ((Q != 0)) | |
188 | + | then [ScriptTransfer(addressFromStringValue(z), Q, p)] | |
163 | 189 | else nil | |
164 | - | $Tuple2(( | |
190 | + | $Tuple2((Z ++ ac), Q) | |
165 | 191 | } | |
166 | 192 | ||
167 | 193 | ||
168 | - | func | |
169 | - | func | |
170 | - | let | |
171 | - | let | |
172 | - | let | |
173 | - | let | |
174 | - | let | |
175 | - | let | |
176 | - | $Tuple2(( | |
194 | + | func ad (z) = { | |
195 | + | func ae (af,A) = { | |
196 | + | let ag = af | |
197 | + | let ah = ag._1 | |
198 | + | let ai = ag._2 | |
199 | + | let aj = aa(z, A) | |
200 | + | let ak = aj._1 | |
201 | + | let al = aj._2 | |
202 | + | $Tuple2((ah ++ ak), (ai + al)) | |
177 | 203 | } | |
178 | 204 | ||
179 | - | let | |
180 | - | let | |
181 | - | let | |
182 | - | func | |
183 | - | then | |
184 | - | else | |
205 | + | let am = c | |
206 | + | let an = size(am) | |
207 | + | let ao = $Tuple2(nil, 0) | |
208 | + | func ap (aq,ar) = if ((ar >= an)) | |
209 | + | then aq | |
210 | + | else ae(aq, am[ar]) | |
185 | 211 | ||
186 | - | func | |
187 | - | then | |
212 | + | func as (aq,ar) = if ((ar >= an)) | |
213 | + | then aq | |
188 | 214 | else throw("List size exceeds 30") | |
189 | 215 | ||
190 | - | | |
216 | + | as(ap(ap(ap(ap(ap(ap(ap(ap(ap(ap(ap(ap(ap(ap(ap(ap(ap(ap(ap(ap(ap(ap(ap(ap(ap(ap(ap(ap(ap(ap(ao, 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) | |
191 | 217 | } | |
192 | 218 | ||
193 | 219 | ||
194 | - | func | |
195 | - | func | |
196 | - | let | |
197 | - | let | |
198 | - | let | |
199 | - | let | |
200 | - | let | |
201 | - | let | |
202 | - | $Tuple2(( | |
220 | + | func at (z) = { | |
221 | + | func ae (af,A) = { | |
222 | + | let au = af | |
223 | + | let av = au._1 | |
224 | + | let ai = au._2 | |
225 | + | let aw = V(z, A) | |
226 | + | let Z = aw._1 | |
227 | + | let Q = aw._2 | |
228 | + | $Tuple2((av ++ Z), (ai + Q)) | |
203 | 229 | } | |
204 | 230 | ||
205 | - | let | |
206 | - | let | |
207 | - | let | |
208 | - | let | |
209 | - | func | |
210 | - | then | |
211 | - | else | |
231 | + | let ax = { | |
232 | + | let am = c | |
233 | + | let an = size(am) | |
234 | + | let ao = $Tuple2(nil, 0) | |
235 | + | func ap (aq,ar) = if ((ar >= an)) | |
236 | + | then aq | |
237 | + | else ae(aq, am[ar]) | |
212 | 238 | ||
213 | - | func | |
214 | - | then | |
239 | + | func as (aq,ar) = if ((ar >= an)) | |
240 | + | then aq | |
215 | 241 | else throw("List size exceeds 30") | |
216 | 242 | ||
217 | - | | |
243 | + | as(ap(ap(ap(ap(ap(ap(ap(ap(ap(ap(ap(ap(ap(ap(ap(ap(ap(ap(ap(ap(ap(ap(ap(ap(ap(ap(ap(ap(ap(ap(ao, 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) | |
218 | 244 | } | |
219 | - | let | |
220 | - | let | |
221 | - | let | |
222 | - | let | |
223 | - | then [IntegerEntry( | |
245 | + | let av = ax._1 | |
246 | + | let ay = ax._2 | |
247 | + | let az = valueOrElse(getInteger(this, C(z)), 0) | |
248 | + | let aA = if ((ay != 0)) | |
249 | + | then [IntegerEntry(C(z), (az + ay))] | |
224 | 250 | else nil | |
225 | - | $Tuple2(( | |
251 | + | $Tuple2((av ++ aA), ay) | |
226 | 252 | } | |
227 | 253 | ||
228 | 254 | ||
229 | - | func | |
230 | - | let | |
231 | - | if (( | |
232 | - | then $Tuple2([ScriptTransfer(addressFromStringValue( | |
255 | + | func aB (z) = { | |
256 | + | let az = valueOrElse(getInteger(this, C(z)), 0) | |
257 | + | if ((az != 0)) | |
258 | + | then $Tuple2([ScriptTransfer(addressFromStringValue(z), az, p), DeleteEntry(C(z))], az) | |
233 | 259 | else $Tuple2(nil, 0) | |
234 | 260 | } | |
235 | 261 | ||
236 | 262 | ||
237 | - | func | |
238 | - | let | |
239 | - | then | |
263 | + | func aC (z) = { | |
264 | + | let aD = if (!(containsElement(t, z))) | |
265 | + | then ad(z) | |
240 | 266 | else $Tuple2(nil, 0) | |
241 | - | let | |
242 | - | let | |
243 | - | let | |
244 | - | let | |
245 | - | let | |
246 | - | let | |
247 | - | $Tuple2(( | |
267 | + | let aE = aD._1 | |
268 | + | let Q = aD._2 | |
269 | + | let aF = aB(z) | |
270 | + | let aG = aF._1 | |
271 | + | let aH = aF._2 | |
272 | + | let aI = (Q + aH) | |
273 | + | $Tuple2((aE ++ aG), aI) | |
248 | 274 | } | |
249 | 275 | ||
250 | 276 | ||
251 | - | func | |
252 | - | func | |
253 | - | let | |
254 | - | let | |
255 | - | let | |
256 | - | let | |
257 | - | let | |
258 | - | let | |
259 | - | let | |
260 | - | if (if (( | |
277 | + | func aJ (z) = { | |
278 | + | func aK (af,A) = { | |
279 | + | let aL = H(z, A) | |
280 | + | let E = aL._1 | |
281 | + | let F = aL._2 | |
282 | + | let G = aL._3 | |
283 | + | let aM = R(z, A) | |
284 | + | let Q = aM._1 | |
285 | + | let U = aM._2 | |
286 | + | if (if ((E == 0)) | |
261 | 287 | then true | |
262 | - | else containsElement( | |
263 | - | then | |
264 | - | else ( | |
288 | + | else containsElement(t, z)) | |
289 | + | then af | |
290 | + | else (af :+ [E, (F + G), Q, U]) | |
265 | 291 | } | |
266 | 292 | ||
267 | - | let | |
268 | - | let | |
269 | - | let | |
270 | - | func | |
271 | - | then | |
272 | - | else | |
293 | + | let am = c | |
294 | + | let an = size(am) | |
295 | + | let ao = nil | |
296 | + | func ap (aq,ar) = if ((ar >= an)) | |
297 | + | then aq | |
298 | + | else aK(aq, am[ar]) | |
273 | 299 | ||
274 | - | func | |
275 | - | then | |
300 | + | func as (aq,ar) = if ((ar >= an)) | |
301 | + | then aq | |
276 | 302 | else throw("List size exceeds 30") | |
277 | 303 | ||
278 | - | | |
304 | + | as(ap(ap(ap(ap(ap(ap(ap(ap(ap(ap(ap(ap(ap(ap(ap(ap(ap(ap(ap(ap(ap(ap(ap(ap(ap(ap(ap(ap(ap(ap(ao, 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) | |
279 | 305 | } | |
280 | 306 | ||
281 | 307 | ||
282 | - | func | |
283 | - | func | |
284 | - | let | |
285 | - | let | |
286 | - | let | |
287 | - | let | |
288 | - | if (( | |
289 | - | then | |
290 | - | else if (( | |
291 | - | then | |
292 | - | else min([ | |
308 | + | func aN (z) = { | |
309 | + | func aK (aO,A) = { | |
310 | + | let aP = H(z, A) | |
311 | + | let E = aP._1 | |
312 | + | let F = aP._2 | |
313 | + | let G = aP._3 | |
314 | + | if ((E > 0)) | |
315 | + | then aO | |
316 | + | else if ((aO == -1)) | |
317 | + | then A | |
318 | + | else min([aO, A]) | |
293 | 319 | } | |
294 | 320 | ||
295 | - | let | |
296 | - | let | |
297 | - | let | |
298 | - | let | |
299 | - | func | |
300 | - | then | |
301 | - | else | |
321 | + | let aO = { | |
322 | + | let am = c | |
323 | + | let an = size(am) | |
324 | + | let ao = -1 | |
325 | + | func ap (aq,ar) = if ((ar >= an)) | |
326 | + | then aq | |
327 | + | else aK(aq, am[ar]) | |
302 | 328 | ||
303 | - | func | |
304 | - | then | |
329 | + | func as (aq,ar) = if ((ar >= an)) | |
330 | + | then aq | |
305 | 331 | else throw("List size exceeds 30") | |
306 | 332 | ||
307 | - | | |
333 | + | as(ap(ap(ap(ap(ap(ap(ap(ap(ap(ap(ap(ap(ap(ap(ap(ap(ap(ap(ap(ap(ap(ap(ap(ap(ap(ap(ap(ap(ap(ap(ao, 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) | |
308 | 334 | } | |
309 | - | if (( | |
310 | - | then e(makeString(["user exceeded max active vesting count: ", | |
311 | - | else | |
335 | + | if ((aO == -1)) | |
336 | + | then e(makeString(["user exceeded max active vesting count: ", z], " ")) | |
337 | + | else aO | |
312 | 338 | } | |
313 | 339 | ||
314 | 340 | ||
315 | - | func | |
341 | + | func aQ (z,A,E,F,G) = [StringEntry(y(z, A), D(E, F, G))] | |
316 | 342 | ||
317 | 343 | ||
318 | - | @Callable( | |
319 | - | func vestingForUser ( | |
320 | - | let | |
344 | + | @Callable(aR) | |
345 | + | func vestingForUser (z,E,F,G) = { | |
346 | + | let aS = [if ((size(aR.payments) == 1)) | |
321 | 347 | then true | |
322 | - | else e("should be with exactly 1 payment"), if (( | |
348 | + | else e("should be with exactly 1 payment"), if ((aR.payments[0].assetId == p)) | |
323 | 349 | then true | |
324 | - | else e(makeString(["payment assetId should be: ", | |
350 | + | else e(makeString(["payment assetId should be: ", o], " ")), if ((aR.payments[0].amount == E)) | |
325 | 351 | then true | |
326 | - | else e("payment amount should be equal to vestingAmount"), if (if (( | |
352 | + | else e("payment amount should be equal to vestingAmount"), if (if ((s == nil)) | |
327 | 353 | then true | |
328 | - | else containsElement( | |
354 | + | else containsElement(s, toString(aR.caller))) | |
329 | 355 | then true | |
330 | 356 | else e("you must be admin")] | |
331 | - | if (( | |
357 | + | if ((aS == aS)) | |
332 | 358 | then { | |
333 | - | let | |
334 | - | let | |
335 | - | ( | |
359 | + | let A = aN(z) | |
360 | + | let aT = [StringEntry(K("vested", z, toBase58String(aR.transactionId)), makeString([toString(E), toString(F), toString(G)], b))] | |
361 | + | (aQ(z, A, E, F, G) ++ aT) | |
336 | 362 | } | |
337 | 363 | else throw("Strict value is not equal to itself.") | |
338 | 364 | } | |
339 | 365 | ||
340 | 366 | ||
341 | 367 | ||
342 | - | @Callable( | |
343 | - | func ban ( | |
344 | - | let | |
368 | + | @Callable(aR) | |
369 | + | func ban (z) = { | |
370 | + | let B = [if (if ((s == nil)) | |
345 | 371 | then true | |
346 | - | else containsElement( | |
372 | + | else containsElement(s, toString(aR.caller))) | |
347 | 373 | then true | |
348 | - | else e("you must be admin"), if (!(containsElement( | |
374 | + | else e("you must be admin"), if (!(containsElement(t, z))) | |
349 | 375 | then true | |
350 | - | else e(makeString(["user already in a ban list:", | |
351 | - | if (( | |
376 | + | else e(makeString(["user already in a ban list:", z], " "))] | |
377 | + | if ((B == B)) | |
352 | 378 | then { | |
353 | - | let | |
354 | - | let | |
355 | - | let | |
356 | - | let | |
357 | - | ( | |
379 | + | let aU = at(z) | |
380 | + | let aV = aU._1 | |
381 | + | let aW = aU._2 | |
382 | + | let aX = [StringEntry(r, makeString_11C((t :+ z), "__"))] | |
383 | + | (aV ++ aX) | |
358 | 384 | } | |
359 | 385 | else throw("Strict value is not equal to itself.") | |
360 | 386 | } | |
361 | 387 | ||
362 | 388 | ||
363 | 389 | ||
364 | - | @Callable( | |
365 | - | func unban ( | |
366 | - | let | |
390 | + | @Callable(aR) | |
391 | + | func unban (z) = { | |
392 | + | let B = [if (if ((s == nil)) | |
367 | 393 | then true | |
368 | - | else containsElement( | |
394 | + | else containsElement(s, toString(aR.caller))) | |
369 | 395 | then true | |
370 | - | else e("you must be admin"), if (containsElement( | |
396 | + | else e("you must be admin"), if (containsElement(t, z)) | |
371 | 397 | then true | |
372 | - | else e(makeString(["user not in a ban list:", | |
373 | - | if (( | |
398 | + | else e(makeString(["user not in a ban list:", z], " "))] | |
399 | + | if ((B == B)) | |
374 | 400 | then { | |
375 | - | let | |
376 | - | let | |
377 | - | if ($isInstanceOf( | |
401 | + | let aY = { | |
402 | + | let j = indexOf(t, z) | |
403 | + | if ($isInstanceOf(j, "Int")) | |
378 | 404 | then { | |
379 | - | let | |
380 | - | removeByIndex( | |
405 | + | let aZ = j | |
406 | + | removeByIndex(t, aZ) | |
381 | 407 | } | |
382 | 408 | else e("user address index in ban list is not found") | |
383 | 409 | } | |
384 | - | if (( | |
385 | - | then [DeleteEntry( | |
386 | - | else [StringEntry( | |
410 | + | if ((aY == nil)) | |
411 | + | then [DeleteEntry(r)] | |
412 | + | else [StringEntry(r, makeString_11C(aY, "__"))] | |
387 | 413 | } | |
388 | 414 | else throw("Strict value is not equal to itself.") | |
389 | 415 | } | |
390 | 416 | ||
391 | 417 | ||
392 | 418 | ||
393 | - | @Callable( | |
419 | + | @Callable(aR) | |
394 | 420 | func claimAll () = { | |
395 | - | let | |
396 | - | let | |
397 | - | let | |
398 | - | let | |
399 | - | let | |
400 | - | if (( | |
401 | - | then ( | |
421 | + | let z = toString(aR.caller) | |
422 | + | let ba = aC(z) | |
423 | + | let aE = ba._1 | |
424 | + | let aI = ba._2 | |
425 | + | let aT = [StringEntry(K("claimed", z, toBase58String(aR.transactionId)), toString(aI))] | |
426 | + | if ((aI > 0)) | |
427 | + | then (aE ++ aT) | |
402 | 428 | else e("nothing to claim") | |
403 | 429 | } | |
404 | 430 | ||
405 | 431 | ||
406 | 432 | ||
407 | - | @Callable( | |
408 | - | func userInfoREADONLY ( | |
409 | - | let | |
410 | - | let | |
411 | - | let | |
412 | - | let | |
413 | - | $Tuple2(nil, $Tuple3( | |
433 | + | @Callable(aR) | |
434 | + | func userInfoREADONLY (z) = { | |
435 | + | let bb = aC(z) | |
436 | + | let aW = bb._1 | |
437 | + | let aI = bb._2 | |
438 | + | let aH = valueOrElse(getInteger(this, C(z)), 0) | |
439 | + | $Tuple2(nil, $Tuple3(aI, aH, aJ(z))) | |
414 | 440 | } | |
415 | 441 | ||
442 | + | ||
443 | + | @Verifier(bc) | |
444 | + | func bd () = { | |
445 | + | let be = { | |
446 | + | let j = l() | |
447 | + | if ($isInstanceOf(j, "ByteVector")) | |
448 | + | then { | |
449 | + | let bf = j | |
450 | + | bf | |
451 | + | } | |
452 | + | else if ($isInstanceOf(j, "Unit")) | |
453 | + | then bc.senderPublicKey | |
454 | + | else throw("Match error") | |
455 | + | } | |
456 | + | sigVerify(bc.bodyBytes, bc.proofs[0], be) | |
457 | + | } | |
416 | 458 |
github/deemru/w8io/c3f4982 160.28 ms ◑