tx · 4DPEh5hT3peWGWNUxEd5UXzB2daWLY3Q6ge9tPzvPS2J 3PCbvPVQfSvVu88ip8Fm5YjwJhjEYk1Txhk: -0.01800000 Waves 2023.10.18 19:22 [3870115] smart account 3PCbvPVQfSvVu88ip8Fm5YjwJhjEYk1Txhk > SELF 0.00000000 Waves
{ "type": 13, "id": "4DPEh5hT3peWGWNUxEd5UXzB2daWLY3Q6ge9tPzvPS2J", "fee": 1800000, "feeAssetId": null, "timestamp": 1697646162474, "version": 1, "sender": "3PCbvPVQfSvVu88ip8Fm5YjwJhjEYk1Txhk", "senderPublicKey": "FwXAX9xcWiwbCejtdF8q1Nz8NpJqaVxXKnKK6JoR24pZ", "proofs": [ "KAJyafFD7eDBiJ77KzEQ1TywZg6Vek3UxQ3Sxks5JfNjshB88SWww7ohHBcBX8BWF2ueRrCUZp1yFWEFfeYhNdW" ], "script": "base64:BgI5CAISCwoJCAgICAgICAEIEgUKAwgIARIAEgQKAgQEEgQKAgQEEgUKAwEBBBIECgIEBBIECgIBARIAJAALZmFjdG9yc0Jhc2UA6AcBEHdyaXRlQ29uc3RTdHJpbmcCA2tleQV2YWx1ZQMJAQEhAQkBCWlzRGVmaW5lZAEJAJ0IAgUEdGhpcwUDa2V5CQELU3RyaW5nRW50cnkCBQNrZXkFBXZhbHVlCQACAQkArAICAhVhbHJlYWR5IGluaXRpYWxpemVkOiAFA2tleQENd3JpdGVDb25zdEludAIDa2V5BXZhbHVlAwkBASEBCQEJaXNEZWZpbmVkAQkAmggCBQR0aGlzBQNrZXkJAQxJbnRlZ2VyRW50cnkCBQNrZXkFBXZhbHVlCQACAQkArAICAhVhbHJlYWR5IGluaXRpYWxpemVkOiAFA2tleQEId3JpdGVJbnQCA2tleQV2YWx1ZQMJAGYCAAAFBXZhbHVlCQACAQkArAICCQCsAgIJAKwCAgIXd3JpdGluZyBuZWdhdGl2ZSB2YWx1ZSAJAKQDAQUFdmFsdWUCCSBmb3Iga2V5IAUDa2V5CQEMSW50ZWdlckVudHJ5AgUDa2V5BQV2YWx1ZQEIYXNTdHJpbmcBBXZhbHVlBAckbWF0Y2gwBQV2YWx1ZQMJAAECBQckbWF0Y2gwAgZTdHJpbmcEAXMFByRtYXRjaDAFAXMJAAIBAhx3cm9uZyB0eXBlLCBleHBlY3RlZDogU3RyaW5nAQVhc0ludAEFdmFsdWUEByRtYXRjaDAFBXZhbHVlAwkAAQIFByRtYXRjaDACA0ludAQDaW50BQckbWF0Y2gwBQNpbnQJAAIBAgRzbToxAQZhc0ludDIBBXZhbHVlBAckbWF0Y2gwBQV2YWx1ZQMJAAECBQckbWF0Y2gwAgooSW50LCBJbnQpBAF4BQckbWF0Y2gwBQF4BAF0BQckbWF0Y2gwCQACAQIad3JvbmcgdHlwZSwgZXhwZWN0ZWQ6IEludDIBEWFzVXNlckJhbGFuY2VEYXRhAQV2YWx1ZQQHJG1hdGNoMAUFdmFsdWUDCQABAgUHJG1hdGNoMAIiKEludCwgSW50LCBJbnQsIEludCwgSW50LCBCb29sZWFuKQQBeAUHJG1hdGNoMAUBeAQBdAUHJG1hdGNoMAkAAgECATMBC3VzZXJCYWxhbmNlAgNyc3IEdXNlcgkBEWFzVXNlckJhbGFuY2VEYXRhAQkA/AcEBQNyc3ICC3VzZXJCYWxhbmNlCQDMCAIFBHVzZXIFA25pbAUDbmlsAQd0aHJvd0lmAgljb25kaXRpb24FZXJyb3IDBQljb25kaXRpb24JAAIBBQVlcnJvcgYBCGNoYW5nZUJ5AgNrZXkFdmFsdWUJAQh3cml0ZUludAIFA2tleQkAZAIJAQt2YWx1ZU9yRWxzZQIJAJoIAgUEdGhpcwUDa2V5AAAFBXZhbHVlAAtjb25maWdTdG9yZQIGY29uZmlnAA1jb25maWdBZGRyZXNzCQERQGV4dHJOYXRpdmUoMTA2MikBCQERQGV4dHJOYXRpdmUoMTA1MykCBQR0aGlzBQtjb25maWdTdG9yZQAVdmlyZXNWZXN0ZWRVc2RuTHBEYXBwCQERQGV4dHJOYXRpdmUoMTA2MikBAiMzUEpGdThNbVZhMnJTVkdNNDh3ZExtNGpoTHpuRWd1NlhTZQASbWF5YmVPcmFjbGVBZGRyZXNzBAckbWF0Y2gwCQCdCAIFDWNvbmZpZ0FkZHJlc3MCDm9yYWNsZV9hZGRyZXNzAwkAAQIFByRtYXRjaDACBlN0cmluZwQBcwUHJG1hdGNoMAkApggBBQFzBQR1bml0AAZIRUlHSFQFBmhlaWdodAACdmQJARFAZXh0ck5hdGl2ZSgxMDYyKQEJARN2YWx1ZU9yRXJyb3JNZXNzYWdlAgkAnQgCBQ1jb25maWdBZGRyZXNzAhF2aXJlc19kaXN0cmlidXRvcgIVYmFkIHZpcmVzIGRpc3RyaWJ1dG9yABBwcm90ZWN0ZWRSZXNlcnZlCQERQGV4dHJOYXRpdmUoMTA2MikBCQERQGV4dHJOYXRpdmUoMTA1MykCBQ1jb25maWdBZGRyZXNzAhFwcm90ZWN0ZWRfcmVzZXJ2ZQAFbWFpbjEJARFAZXh0ck5hdGl2ZSgxMDYyKQEJARFAZXh0ck5hdGl2ZSgxMDUzKQIFBHRoaXMCBW1haW4xAAt1c2R0UmVzZXJ2ZQkBEUBleHRyTmF0aXZlKDEwNjIpAQkBEUBleHRyTmF0aXZlKDEwNTMpAgUEdGhpcwILdXNkdFJlc2VydmUAC3VzZGNSZXNlcnZlCQERQGV4dHJOYXRpdmUoMTA2MikBCQERQGV4dHJOYXRpdmUoMTA1MykCBQR0aGlzAgt1c2RjUmVzZXJ2ZQADYWNjCQERQGV4dHJOYXRpdmUoMTA1MykCBQR0aGlzAgNhY2MADnVzZG5WZXN0aW5nQWxsCQERQGV4dHJOYXRpdmUoMTA2MikBCQERQGV4dHJOYXRpdmUoMTA1MykCBQR0aGlzAg51c2RuVmVzdGluZ0FsbAALdXNkblZlc3RpbmcJARFAZXh0ck5hdGl2ZSgxMDYyKQEJARFAZXh0ck5hdGl2ZSgxMDUzKQIFBHRoaXMCC3VzZG5WZXN0aW5nAAt1c2RuQXNzZXRJZAkBEUBleHRyTmF0aXZlKDEwNTMpAgUEdGhpcwILdXNkbkFzc2V0SWQACXVzZG5Cb251cwkBEUBleHRyTmF0aXZlKDEwNTApAgUEdGhpcwIFYm9udXMBCm1vdmVTdHJlYW0FA3JzcgZhY3Rpb24EZnJvbQZzdHJpbmcDYW10CQD8BwQFAnZkAgRtb3ZlCQDMCAIFA3JzcgkAzAgCBQZhY3Rpb24JAMwIAgUEZnJvbQkAzAgCBQZzdHJpbmcJAMwIAgUDYW10BQNuaWwFA25pbAEJb3BBbGxvd2VkAgJvcAphc3NldElkU3RyBAckbWF0Y2gwCQD8BwQFDWNvbmZpZ0FkZHJlc3MCCW9wQWxsb3dlZAkAzAgCBQphc3NldElkU3RyCQDMCAIFAm9wBQNuaWwFA25pbAMJAAECBQckbWF0Y2gwAgdCb29sZWFuBAFiBQckbWF0Y2gwAwUBYgYJAAIBAgtub3QgYWxsb3dlZAkAAgECIW9wQWxsb3dlZDogdW5leHBlY3RlZCByZXN1bHQgdHlwZQEIbWFpbk9ubHkBAWkDCQEIY29udGFpbnMCCQERQGV4dHJOYXRpdmUoMTA1MykCBQ1jb25maWdBZGRyZXNzAgRtYWluCQClCAEIBQFpBmNhbGxlcgYJAAIBAhBvbmx5IG1haW4gY2FuIGRvAQphZHZpc2VVc2VyAQNhY2MECWRhdGFXaGFsZQkBCGFzU3RyaW5nAQkA/AcEBQt1c2RuVmVzdGluZwIHYWR2aXNlVQkAzAgCBQNhY2MFA25pbAUDbmlsAwkAAAIFCWRhdGFXaGFsZQUJZGF0YVdoYWxlBAdkYXRhQWxsCQEIYXNTdHJpbmcBCQD8BwQFDnVzZG5WZXN0aW5nQWxsAgdhZHZpc2VVCQDMCAIFA2FjYwUDbmlsBQNuaWwDCQAAAgUHZGF0YUFsbAUHZGF0YUFsbAkArAICCQCsAgIFCWRhdGFXaGFsZQIDIHwgBQdkYXRhQWxsCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuAAtzdXJmQWRkcmVzcwkBEUBleHRyTmF0aXZlKDEwNjIpAQIjM1BHMnZNaEs1Q1Bxc0NEb2R2TEd6UTg0UWtvSFhDSjNvTlAAEHN1cmZTdGFrZUFkZHJlc3MJARFAZXh0ck5hdGl2ZSgxMDYyKQECIzNQQmlvdEZwcWpSTWtrZUZCY2NuUU5VWFVvcHk3S0ZlejVDAAtzdXJmQXNzZXRJZAkA2QQBAixBdDhENk5GRnBoZUNidktWbmpWb2VMTDg0RW84TlpuNm92TWFueGZMYUZXTAAGb3JhY2xlCQEHQWRkcmVzcwEBGgFXw4nuidFTWhQUZTvI/d/0hIb99hEAq5RYAAh4dG5QcmljZQkBEUBleHRyTmF0aXZlKDEwNTApAgUGb3JhY2xlAhYlcyVzX19wcmljZV9fVVNETi1VU0RUAQdidXlTdXJmAwZjYWxsZXIFd2hhbGUHcmVndWxhcgQHYWRkcmVzcwkApQgBBQZjYWxsZXIEB3JlZ1BhcnQDBQdyZWd1bGFyCQEFYXNJbnQBCQD8BwQFDnVzZG5WZXN0aW5nQWxsAhZ3aXRoZHJhd0FsbFZlc3RlZEZvclRvCQDMCAIFB2FkZHJlc3MJAMwIAgkApQgBBQR0aGlzBQNuaWwFA25pbAAAAwkAAAIFB3JlZ1BhcnQFB3JlZ1BhcnQECXdoYWxlUGFydAMFBXdoYWxlCQACAQIPbm90IGltcGxlbWVudGVkAAADCQAAAgUJd2hhbGVQYXJ0BQl3aGFsZVBhcnQEBXRvdGFsCQBkAgUJd2hhbGVQYXJ0BQdyZWdQYXJ0BANidXkJAPwHBAULc3VyZkFkZHJlc3MCB2J1eVN1cmYJAMwIAgDAhD0JAMwIAgDAhD0JAMwIAgcFA25pbAkAzAgCCQEPQXR0YWNoZWRQYXltZW50AgkA2QQBBQt1c2RuQXNzZXRJZAUFdG90YWwFA25pbAMJAAACBQNidXkFA2J1eQkA8AcCBQR0aGlzBQtzdXJmQXNzZXRJZAkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgkBaQEEaW5pdAkEY29uZgF0AWMIdmVzdG5BbGwHYWNjb3VudARtYWluCXVzZG5Bc3NldAVib251cwV2ZXN0bgMJAQIhPQIIBQFpBmNhbGxlcgUEdGhpcwkAAgECEm9ubHkgc2VsZiBjYW4gaW5pdAkAzAgCCQEQd3JpdGVDb25zdFN0cmluZwIFC2NvbmZpZ1N0b3JlBQRjb25mCQDMCAIJARB3cml0ZUNvbnN0U3RyaW5nAgILdXNkdFJlc2VydmUFAXQJAMwIAgkBEHdyaXRlQ29uc3RTdHJpbmcCAgt1c2RjUmVzZXJ2ZQUBYwkAzAgCCQEQd3JpdGVDb25zdFN0cmluZwICDnVzZG5WZXN0aW5nQWxsBQh2ZXN0bkFsbAkAzAgCCQEQd3JpdGVDb25zdFN0cmluZwICC3VzZG5WZXN0aW5nBQV2ZXN0bgkAzAgCCQEQd3JpdGVDb25zdFN0cmluZwICA2FjYwUHYWNjb3VudAkAzAgCCQEQd3JpdGVDb25zdFN0cmluZwICBW1haW4xBQRtYWluCQDMCAIJARB3cml0ZUNvbnN0U3RyaW5nAgILdXNkbkFzc2V0SWQFCXVzZG5Bc3NldAkAzAgCCQEMSW50ZWdlckVudHJ5AgIFYm9udXMFBWJvbnVzBQNuaWwBaQEPc3RhcnRWZXN0aW5nRm9yAwdhZGRyZXNzA3JzcgZhbW91bnQEAW0JAQhtYWluT25seQEFAWkDCQAAAgUBbQUBbQQHcmVzZXJ2ZQkBEUBleHRyTmF0aXZlKDEwNjIpAQUDcnNyBAdhc3NldElkCQERQGV4dHJOYXRpdmUoMTA1MykCBQdyZXNlcnZlAgdhc3NldElkBAJtdwkA/AcEBQt1c2RuVmVzdGluZwISc3RhcnRWZXN0aW5nQWxsRm9yCQDMCAIFB2FkZHJlc3MFA25pbAUDbmlsAwkAAAIFAm13BQJtdwQGY2hlY2tzCQEJb3BBbGxvd2VkAgIOb3BlbkNvbGxhdGVyYWwFB2Fzc2V0SWQDCQAAAgUGY2hlY2tzBQZjaGVja3MEAnMzCQEFYXNJbnQBCQD8BwQFB3Jlc2VydmUCGHRyYW5zZmVyQVRva2Vuc0Ftb3VudEZvcgkAzAgCBQdhZGRyZXNzCQDMCAIFA2FjYwkAzAgCBQZhbW91bnQFA25pbAUDbmlsAwkAAAIFAnMzBQJzMwQGeHRuQW10BBJyZXNlcnZlVmVzdGluZ1JhdGUJAJoIAgUNY29uZmlnQWRkcmVzcwkArAICBQNyc3ICEV90b192ZXN0aW5nX3ZhbHVlAwkBCWlzRGVmaW5lZAEFEnJlc2VydmVWZXN0aW5nUmF0ZQkAawMFAnMzCQEFdmFsdWUBBRJyZXNlcnZlVmVzdGluZ1JhdGUFC2ZhY3RvcnNCYXNlBAN1c2QJAQVhc0ludAEJAPwHBAUHcmVzZXJ2ZQIFdG9VU0QJAMwIAgUCczMFA25pbAUDbmlsCQBrAwUDdXNkAMCEPQUIeHRuUHJpY2UEBXJlaGFiBAJ3ZAkA/AcEBRBwcm90ZWN0ZWRSZXNlcnZlAg93aXRoZHJhd1RvTWFpbjIJAMwIAgUDYWNjCQDMCAIFC3VzZG5Bc3NldElkCQDMCAIFBnh0bkFtdAUDbmlsBQNuaWwDCQAAAgUCd2QFAndkBAVyZWhhYgkA/AcEBQ51c2RuVmVzdGluZ0FsbAIKYWNjb3VudEZvcgkAzAgCBQdhZGRyZXNzBQNuaWwJAMwIAgkBD0F0dGFjaGVkUGF5bWVudAIJANkEAQULdXNkbkFzc2V0SWQFBnh0bkFtdAUDbmlsAwkAAAIFBXJlaGFiBQVyZWhhYgUEdW5pdAkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgMJAAACBQVyZWhhYgUFcmVoYWIECyR0MDYxOTU2MjU3CQEGYXNJbnQyAQkA/AcEBQVtYWluMQIIaGVhbHRoT2YJAMwIAgUHYWRkcmVzcwUDbmlsBQNuaWwEAmJwCAULJHQwNjE5NTYyNTcCXzEEA2JwdQgFCyR0MDYxOTU2MjU3Al8yAwkAZgIFAmJwCQBoAgBkCQBlAgUCYnAFA2JwdQkAAgECKm5vdCBlbm91Z2ggYWRkcmVzcyBoZWFsdGggYWZ0ZXIgbW92ZTogPCAxJQkAzAgCCQEIY2hhbmdlQnkCCQCsAgIJAKwCAgUHYWRkcmVzcwIKX21pZ3JhdGVkXwUHYXNzZXRJZAUCczMFA25pbAkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgFpAQ1jb252ZXJ0VG9VU0ROAAQHYWRkcmVzcwkApQgBCAUBaQZjYWxsZXIKAQdtb3ZlUnNyAQNyc3IEB3Jlc2VydmUJARFAZXh0ck5hdGl2ZSgxMDYyKQEFA3JzcgQHYXNzZXRJZAkBEUBleHRyTmF0aXZlKDEwNTMpAgUHcmVzZXJ2ZQIHYXNzZXRJZAQGY2hlY2tzCQEJb3BBbGxvd2VkAgIOb3BlbkNvbGxhdGVyYWwFB2Fzc2V0SWQDCQAAAgUGY2hlY2tzBQZjaGVja3MDAwkBAiE9AgUDcnNyCQClCAEFC3VzZHRSZXNlcnZlCQECIT0CBQNyc3IJAKUIAQULdXNkY1Jlc2VydmUHCQACAQIPaW52YWxpZCByZXNlcnZlBANzaEMJAPwHBAUCdmQCCnN5bmNIZWlnaHQJAMwIAgUDcnNyBQNuaWwFA25pbAMJAAACBQNzaEMFA3NoQwQLJHQwNjg2NDY5NDgJAQZhc0ludDIBCQD8BwQFB3Jlc2VydmUCE3N0b3JlZERlcG9zaXRCb3Jyb3cFA25pbAUDbmlsBAx0b3RhbERlcG9zaXQIBQskdDA2ODY0Njk0OAJfMQQJdG90YWxEZWJ0CAULJHQwNjg2NDY5NDgCXzIEBHV0aWwDCQBmAgUMdG90YWxEZXBvc2l0AAAJAJcDAQkAzAgCBQtmYWN0b3JzQmFzZQkAzAgCCQBrAwUJdG90YWxEZWJ0BQtmYWN0b3JzQmFzZQUMdG90YWxEZXBvc2l0BQNuaWwAAAQNdXRpbFRocmVzaG9sZAkBC3ZhbHVlT3JFbHNlAgkAmggCBQ1jb25maWdBZGRyZXNzCQCsAgIFB2Fzc2V0SWQCGV9vcGVuX2NvbGxhdGVyYWxfdGhyZXNvbGQA6AcDCQBmAgUNdXRpbFRocmVzaG9sZAUEdXRpbAkAAgECHW5vdCBhbGxvd2VkOiB1dGlsIDwgdGhyZXNob2xkBANkZXAJAQVhc0ludAEJAPwHBAUHcmVzZXJ2ZQIOdXNlckRlcG9zaXRVU0QJAMwIAgUHYWRkcmVzcwUDbmlsBQNuaWwDCQAAAgUDZGVwBQNkZXAEAnMzCQEFYXNJbnQBCQD8BwQFB3Jlc2VydmUCEnRyYW5zZmVyQVRva2Vuc0ZvcgkAzAgCBQdhZGRyZXNzCQDMCAIFA2FjYwkAzAgCBQNkZXAFA25pbAUDbmlsAwkAAAIFAnMzBQJzMwQEcFJ3MwkBCm1vdmVTdHJlYW0FBQNyc3ICB2RlcG9zaXQFB2FkZHJlc3MFA2FjYwUCczMDCQAAAgUEcFJ3MwUEcFJ3MwUCczMJAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4JAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4JAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4JAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4JAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4EAm13CQD8BwQFC3VzZG5WZXN0aW5nAhJzdGFydFZlc3RpbmdBbGxGb3IJAMwIAgkApQgBCAUBaQZjYWxsZXIFA25pbAUDbmlsAwkAAAIFAm13BQJtdwQCbXQJAQVhc0ludAEJAQdtb3ZlUnNyAQkApQgBBQt1c2R0UmVzZXJ2ZQMJAAACBQJtdAUCbXQEAm1jCQEFYXNJbnQBCQEHbW92ZVJzcgEJAKUIAQULdXNkY1Jlc2VydmUDCQAAAgUCbWMFAm1jBAhkZXBUb3RhbAkAZAIFAm10BQJtYwQFcmVoYWIEB3VzZG5BbXQJAGsDBQhkZXBUb3RhbAkAZAIFC2ZhY3RvcnNCYXNlBQl1c2RuQm9udXMFC2ZhY3RvcnNCYXNlBAJ3ZAkA/AcEBRBwcm90ZWN0ZWRSZXNlcnZlAg93aXRoZHJhd1RvTWFpbjIJAMwIAgUDYWNjCQDMCAIFC3VzZG5Bc3NldElkCQDMCAIFB3VzZG5BbXQFA25pbAUDbmlsAwkAAAIFAndkBQJ3ZAQFcmVoYWIJAPwHBAUOdXNkblZlc3RpbmdBbGwCCmFjY291bnRGb3IJAMwIAgUHYWRkcmVzcwUDbmlsCQDMCAIJAQ9BdHRhY2hlZFBheW1lbnQCCQDZBAEFC3VzZG5Bc3NldElkBQd1c2RuQW10BQNuaWwDCQAAAgUFcmVoYWIFBXJlaGFiBQR1bml0CQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuAwkAAAIFBXJlaGFiBQVyZWhhYgQLJHQwODEwMjgxNjQJAQZhc0ludDIBCQD8BwQFBW1haW4xAghoZWFsdGhPZgkAzAgCBQdhZGRyZXNzBQNuaWwFA25pbAQCYnAIBQskdDA4MTAyODE2NAJfMQQDYnB1CAULJHQwODEwMjgxNjQCXzIDCQBmAgUCYnAJAGgCAGQJAGUCBQJicAUDYnB1CQACAQIqbm90IGVub3VnaCBhZGRyZXNzIGhlYWx0aCBhZnRlciBtb3ZlOiA8IDElCQDMCAIJAQhjaGFuZ2VCeQIJAKwCAgkArAICBQdhZGRyZXNzAgpfbWlncmF0ZWRfCQERQGV4dHJOYXRpdmUoMTA1MykCBQt1c2R0UmVzZXJ2ZQIHYXNzZXRJZAUCbXQJAMwIAgkBCGNoYW5nZUJ5AgkArAICCQCsAgIFB2FkZHJlc3MCCl9taWdyYXRlZF8JARFAZXh0ck5hdGl2ZSgxMDUzKQIFC3VzZGNSZXNlcnZlAgdhc3NldElkBQJtYwUDbmlsCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuAWkBFXdpdGhkcmF3VmVzdGVkQWxsVVNETgIFd2hhbGUHcmVndWxhcgQHYWRkcmVzcwkApQgBCAUBaQZjYWxsZXIEB3JlZ1BhcnQDBQdyZWd1bGFyCQEFYXNJbnQBCQD8BwQFDnVzZG5WZXN0aW5nQWxsAhN3aXRoZHJhd1Zlc3RlZEZvclRvCQDMCAIFB2FkZHJlc3MJAMwIAgUHYWRkcmVzcwUDbmlsBQNuaWwAAAMJAAACBQdyZWdQYXJ0BQdyZWdQYXJ0BAl3aGFsZVBhcnQDBQV3aGFsZQkBBWFzSW50AQkA/AcEBQt1c2RuVmVzdGluZwITd2l0aGRyYXdWZXN0ZWRGb3JUbwkAzAgCBQdhZGRyZXNzCQDMCAIFB2FkZHJlc3MFA25pbAUDbmlsAAADCQAAAgUJd2hhbGVQYXJ0BQl3aGFsZVBhcnQJAJQKAgUDbmlsCQBkAgUJd2hhbGVQYXJ0BQdyZWdQYXJ0CQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuAWkBFXdpdGhkcmF3VmVzdGVkQWxsU1VSRgIFd2hhbGUHcmVndWxhcgQGY2hlY2tzCQEJb3BBbGxvd2VkAgIhbGlxdWlkYW9fYWxsX3dpdGhkcmF3VmVzdGVkQXNTdXJmCQDYBAEFC3N1cmZBc3NldElkAwkAAAIFBmNoZWNrcwUGY2hlY2tzBAtzdXJmQmFsYW5jZQkBB2J1eVN1cmYDCAUBaQZjYWxsZXIFBXdoYWxlBQdyZWd1bGFyAwkAAAIFC3N1cmZCYWxhbmNlBQtzdXJmQmFsYW5jZQkAlAoCCQDMCAIJAQ5TY3JpcHRUcmFuc2ZlcgMIBQFpBmNhbGxlcgULc3VyZkJhbGFuY2UFC3N1cmZBc3NldElkBQNuaWwFC3N1cmZCYWxhbmNlCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuAWkBE3dpdGhkcmF3VmVzdGVkU1VSRjIDBXdoYWxlB3JlZ3VsYXIFc3Rha2UEB2FkZHJlc3MJAKUIAQgFAWkGY2FsbGVyBAZjaGVja3MJAQlvcEFsbG93ZWQCAiFsaXF1aWRhb19hbGxfd2l0aGRyYXdWZXN0ZWRBc1N1cmYJANgEAQULc3VyZkFzc2V0SWQDCQAAAgUGY2hlY2tzBQZjaGVja3MEB3JlZ1BhcnQDCQBmAgUHcmVndWxhcgAACQEFYXNJbnQBCQD8BwQFDnVzZG5WZXN0aW5nQWxsAhpwYXJ0aWFsV2l0aGRyYXdWZXN0ZWRGb3JUbwkAzAgCBQdhZGRyZXNzCQDMCAIJAKUIAQUEdGhpcwkAzAgCBQdyZWd1bGFyBQNuaWwFA25pbAAAAwkAAAIFB3JlZ1BhcnQFB3JlZ1BhcnQECXdoYWxlUGFydAMJAGYCBQV3aGFsZQAACQEFYXNJbnQBCQD8BwQFC3VzZG5WZXN0aW5nAhpwYXJ0aWFsV2l0aGRyYXdWZXN0ZWRGb3JUbwkAzAgCBQdhZGRyZXNzCQDMCAIJAKUIAQUEdGhpcwkAzAgCBQV3aGFsZQUDbmlsBQNuaWwAAAMJAAACBQl3aGFsZVBhcnQFCXdoYWxlUGFydAQFdG90YWwJAGQCBQl3aGFsZVBhcnQFB3JlZ1BhcnQEA2J1eQkA/AcEBQtzdXJmQWRkcmVzcwIHYnV5U3VyZgkAzAgCAMCEPQkAzAgCAMCEPQkAzAgCBwUDbmlsCQDMCAIJAQ9BdHRhY2hlZFBheW1lbnQCCQDZBAEFC3VzZG5Bc3NldElkBQV0b3RhbAUDbmlsAwkAAAIFA2J1eQUDYnV5BAtzdXJmQmFsYW5jZQkA8AcCBQR0aGlzBQtzdXJmQXNzZXRJZAMJAAACBQtzdXJmQmFsYW5jZQULc3VyZkJhbGFuY2UDBQVzdGFrZQQJc3Rha2VTdXJmCQD8BwQFEHN1cmZTdGFrZUFkZHJlc3MCE3N0YWtlQnlPcmlnaW5DYWxsZXIFA25pbAkAzAgCCQEPQXR0YWNoZWRQYXltZW50AgULc3VyZkFzc2V0SWQFC3N1cmZCYWxhbmNlBQNuaWwDCQAAAgUJc3Rha2VTdXJmBQlzdGFrZVN1cmYJAJQKAgUDbmlsBQtzdXJmQmFsYW5jZQkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgkAlAoCCQDMCAIJAQ5TY3JpcHRUcmFuc2ZlcgMIBQFpBmNhbGxlcgULc3VyZkJhbGFuY2UFC3N1cmZBc3NldElkBQNuaWwFC3N1cmZCYWxhbmNlCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuAWkBHXdpdGhkcmF3VmVzdGVkQWxsU1VSRkFuZFN0YWtlAgV3aGFsZQdyZWd1bGFyBAZjaGVja3MJAQlvcEFsbG93ZWQCAiFsaXF1aWRhb19hbGxfd2l0aGRyYXdWZXN0ZWRBc1N1cmYJANgEAQULc3VyZkFzc2V0SWQDCQAAAgUGY2hlY2tzBQZjaGVja3MEC3N1cmZCYWxhbmNlCQEHYnV5U3VyZgMIBQFpBmNhbGxlcgUFd2hhbGUFB3JlZ3VsYXIDCQAAAgULc3VyZkJhbGFuY2UFC3N1cmZCYWxhbmNlBAlzdGFrZVN1cmYJAPwHBAUQc3VyZlN0YWtlQWRkcmVzcwITc3Rha2VCeU9yaWdpbkNhbGxlcgUDbmlsCQDMCAIJAQ9BdHRhY2hlZFBheW1lbnQCBQtzdXJmQXNzZXRJZAULc3VyZkJhbGFuY2UFA25pbAMJAAACBQlzdGFrZVN1cmYFCXN0YWtlU3VyZgkAlAoCBQNuaWwFC3N1cmZCYWxhbmNlCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuAWkBDHdpdGhkcmF3QXNMUAIFd2hhbGUHcmVndWxhcgQHYWRkcmVzcwkApQgBCAUBaQZjYWxsZXIEB3JlZ1BhcnQDCQBmAgUHcmVndWxhcgAACQEFYXNJbnQBCQD8BwQFDnVzZG5WZXN0aW5nQWxsAhpwYXJ0aWFsV2l0aGRyYXdWZXN0ZWRGb3JUbwkAzAgCBQdhZGRyZXNzCQDMCAIJAKUIAQUEdGhpcwkAzAgCBQdyZWd1bGFyBQNuaWwFA25pbAAAAwkAAAIFB3JlZ1BhcnQFB3JlZ1BhcnQECXdoYWxlUGFydAMJAGYCBQV3aGFsZQAACQEFYXNJbnQBCQD8BwQFC3VzZG5WZXN0aW5nAhpwYXJ0aWFsV2l0aGRyYXdWZXN0ZWRGb3JUbwkAzAgCBQdhZGRyZXNzCQDMCAIJAKUIAQUEdGhpcwkAzAgCBQV3aGFsZQUDbmlsBQNuaWwAAAMJAAACBQl3aGFsZVBhcnQFCXdoYWxlUGFydAQFdG90YWwJAGQCBQl3aGFsZVBhcnQFB3JlZ1BhcnQEBHRvTHAJAPwHBAUVdmlyZXNWZXN0ZWRVc2RuTHBEYXBwAgZtaW50VG8JAMwIAgUHYWRkcmVzcwUDbmlsCQDMCAIJAQ9BdHRhY2hlZFBheW1lbnQCCQDZBAEFC3VzZG5Bc3NldElkBQV0b3RhbAUDbmlsAwkAAAIFBHRvTHAFBHRvTHAJAJQKAgUDbmlsBQV0b3RhbAkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgFpAQhpbXBvcnRMUAAEB2FkZHJlc3MJAKUIAQgFAWkGY2FsbGVyBAd1c2RuQW10CQEFYXNJbnQBCQD8BwQFFXZpcmVzVmVzdGVkVXNkbkxwRGFwcAIGaW1wb3J0BQNuaWwIBQFpCHBheW1lbnRzAwkAAAIFB3VzZG5BbXQFB3VzZG5BbXQECmFjY291bnRGb3IJAPwHBAUOdXNkblZlc3RpbmdBbGwCCmFjY291bnRGb3IJAMwIAgUHYWRkcmVzcwUDbmlsCQDMCAIJAQ9BdHRhY2hlZFBheW1lbnQCCQDZBAEFC3VzZG5Bc3NldElkBQd1c2RuQW10BQNuaWwDCQAAAgUKYWNjb3VudEZvcgUKYWNjb3VudEZvcgkAlAoCBQNuaWwFB3VzZG5BbXQJAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4JAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4BAnR4AQZ2ZXJpZnkABARCQVNFAOgHBAtxdW9ydW1SYXRpbwkBE3ZhbHVlT3JFcnJvck1lc3NhZ2UCCQCaCAIFDWNvbmZpZ0FkZHJlc3MCFXByb3Bvc2FsX3F1b3J1bV9yYXRpbwIicHJvcG9zYWxRdW9ydW1SYXRpbyBpcyBub3QgZGVmaW5lZAQLcGFzc2VkUmF0aW8JARN2YWx1ZU9yRXJyb3JNZXNzYWdlAgkAmggCBQ1jb25maWdBZGRyZXNzAhVwcm9wb3NhbF9wYXNzZWRfcmF0aW8CJXByb3Bvc2FsVGhyZXNob2xkUmF0aW8gaXMgbm90IGRlZmluZWQEDmdWaXJlc0NvbnRyYWN0CQETdmFsdWVPckVycm9yTWVzc2FnZQIJAKYIAQkBE3ZhbHVlT3JFcnJvck1lc3NhZ2UCCQCdCAIFDWNvbmZpZ0FkZHJlc3MCEmRpdmlkZW5kc19jb250cmFjdAIVbm8gZGl2aWRlbmRzX2NvbnRyYWN0AhppbnZhbGlkIGRpdmlkZW5kc19jb250cmFjdAQOdm90aW5nQ29udHJhY3QJARN2YWx1ZU9yRXJyb3JNZXNzYWdlAgkApggBCQETdmFsdWVPckVycm9yTWVzc2FnZQIJAJ0IAgUNY29uZmlnQWRkcmVzcwIPdm90aW5nX2NvbnRyYWN0AhJubyB2b3RpbmdfY29udHJhY3QCF2ludmFsaWQgdm90aW5nX2NvbnRyYWN0BAJpZAkA2AQBCAUCdHgCaWQECHZvdGVzWWVzCQELdmFsdWVPckVsc2UCCQCaCAIFDnZvdGluZ0NvbnRyYWN0CQCsAgICDXByb3Bvc2FsX3llc18FAmlkAAAEB3ZvdGVzTm8JAQt2YWx1ZU9yRWxzZQIJAJoIAgUOdm90aW5nQ29udHJhY3QJAKwCAgIMcHJvcG9zYWxfbm9fBQJpZAAABA5wcm9wb3NhbEhlaWdodAkBE3ZhbHVlT3JFcnJvck1lc3NhZ2UCCQCaCAIFDnZvdGluZ0NvbnRyYWN0CQCsAgICEHByb3Bvc2FsX2hlaWdodF8FAmlkAhdwcm9wb3NhbCBub3QgcmVnaXN0ZXJlZAQKYXBwbHlTdGFydAkBC3ZhbHVlT3JFbHNlAgkAmggCBQ52b3RpbmdDb250cmFjdAkArAICAhRwcm9wb3NhbF9hcHBseXN0YXJ0XwUCaWQAAAQIYXBwbHlFbmQJAQt2YWx1ZU9yRWxzZQIJAJoIAgUOdm90aW5nQ29udHJhY3QJAKwCAgIScHJvcG9zYWxfYXBwbHllbmRfBQJpZAAABAt0b3RhbEdWaXJlcwkBC3ZhbHVlT3JFbHNlAgkAmggCBQ52b3RpbmdDb250cmFjdAkArAICAhBwcm9wb3NhbF9ndmlyZXNfBQJpZAAABAdlbmFibGVkCQELdmFsdWVPckVsc2UCCQCbCAIFDWNvbmZpZ0FkZHJlc3MCHW9wX2dvdmVybmFuY2VfYXBwbHlfdHhfcGF1c2VkBwQHdm90ZVllcwUIdm90ZXNZZXMEBnZvdGVObwUHdm90ZXNObwQKdG90YWxWb3RlcwkAZAIFB3ZvdGVZZXMFBnZvdGVObwQJaGFzUXVvcnVtCQBnAgkAaQIJAGgCBQp0b3RhbFZvdGVzBQRCQVNFBQt0b3RhbEdWaXJlcwULcXVvcnVtUmF0aW8ECWhhc1Bhc3NlZAkAZwIJAGkCCQBoAgUHdm90ZVllcwUEQkFTRQUKdG90YWxWb3RlcwULcGFzc2VkUmF0aW8ECHRvb0Vhcmx5CQBnAgUKYXBwbHlTdGFydAUGSEVJR0hUBAd0b29MYXRlCQBnAgUGSEVJR0hUBQhhcHBseUVuZAQJdGltZURlYnVnCQCsAgIJAKwCAgkArAICCQCsAgIJAKwCAgkArAICCQCsAgICEXByb3Bvc2FsSGVpZ2h0ID0gCQCkAwEFDnByb3Bvc2FsSGVpZ2h0Ag8sIGFwcGx5U3RhcnQgPSAJAKQDAQUKYXBwbHlTdGFydAINLCBhcHBseUVuZCA9IAkApAMBBQhhcHBseUVuZAILLCBIRUlHSFQgPSAJAKQDAQUGSEVJR0hUBAhieVZvdGluZwMJAQEhAQUHZW5hYmxlZAkAAgECK3R4IGFwcGxpY2F0aW9uIHRocm93IGdvdmVybmFuY2Ugbm90IGVuYWJsZWQDBQh0b29FYXJseQkAAgEJAKwCAgIucHJvcG9zYWwgY2FuJ3QgYmUgZXhlY3V0ZWQgYXMgaXQncyB0b28gZWFybHk6IAUJdGltZURlYnVnAwUHdG9vTGF0ZQkAAgEJAKwCAgIscHJvcG9zYWwgY2FuJ3QgYmUgZXhlY3V0ZWQgYXMgaXQncyB0b28gbGF0ZToFCXRpbWVEZWJ1ZwMJAQEhAQUJaGFzUXVvcnVtCQACAQkArAICCQCsAgIJAKwCAgkArAICCQCsAgIJAKwCAgILbm8gcXVvcnVtOiACDHRvdGFsVm90ZXM6IAkApAMBBQp0b3RhbFZvdGVzAg8sIHRvdGFsR1ZpcmVzOiAJAKQDAQULdG90YWxHVmlyZXMCDywgcXVvcnVtUmF0aW86IAkApAMBBQtxdW9ydW1SYXRpbwMJAQEhAQUJaGFzUGFzc2VkCQACAQkArAICCQCsAgIJAKwCAgkArAICCQCsAgIJAKwCAgIXbm8gdGhyZXNob2xkIGFjaGlldmVkOiACCXZvdGVZZXM6IAkApAMBBQd2b3RlWWVzAgosIHZvdGVObzogCQCkAwEFBnZvdGVObwIPLCBwYXNzZWRSYXRpbzogCQCkAwEFC3Bhc3NlZFJhdGlvBgMJAPQDAwgFAnR4CWJvZHlCeXRlcwkAkQMCCAUCdHgGcHJvb2ZzAAAIBQJ0eA9zZW5kZXJQdWJsaWNLZXkGBQhieVZvdGluZ9mCSnU=", "chainId": 87, "height": 3870115, "applicationStatus": "succeeded", "spentComplexity": 0 } View: original | compacted Prev: 4bVVeqWJeJp2Ki1nJPcMurvpDiHMLUgcmabayyP3wcAc Next: GpZhgqnBnXpZfY24dPqep3RfhoQGkzMVHzUyD3jAaJLz Diff:
Old | New | Differences | |
---|---|---|---|
157 | 157 | ||
158 | 158 | let ab = fromBase58String("At8D6NFFpheCbvKVnjVoeLL84Eo8NZn6ovManxfLaFWL") | |
159 | 159 | ||
160 | - | func ac (ad,ae,af) = { | |
161 | - | let ag = toString(ad) | |
162 | - | let ah = if (af) | |
163 | - | then j(invoke(H, "withdrawAllVestedForTo", [ag, toString(this)], nil)) | |
160 | + | let ac = Address(base58'3PKkojKdd6BBzTf1RXbQVfUDraNFXXHKzQF') | |
161 | + | ||
162 | + | let ad = getIntegerValue(ac, "%s%s__price__USDN-USDT") | |
163 | + | ||
164 | + | func ae (af,ag,ah) = { | |
165 | + | let ai = toString(af) | |
166 | + | let aj = if (ah) | |
167 | + | then j(invoke(H, "withdrawAllVestedForTo", [ai, toString(this)], nil)) | |
164 | 168 | else 0 | |
165 | - | if (( | |
169 | + | if ((aj == aj)) | |
166 | 170 | then { | |
167 | - | let | |
171 | + | let ak = if (ag) | |
168 | 172 | then throw("not implemented") | |
169 | 173 | else 0 | |
170 | - | if (( | |
174 | + | if ((ak == ak)) | |
171 | 175 | then { | |
172 | - | let | |
173 | - | let | |
174 | - | if (( | |
176 | + | let al = (ak + aj) | |
177 | + | let am = invoke(Z, "buySurf", [1000000, 1000000, false], [AttachedPayment(fromBase58String(J), al)]) | |
178 | + | if ((am == am)) | |
175 | 179 | then assetBalance(this, ab) | |
176 | 180 | else throw("Strict value is not equal to itself.") | |
177 | 181 | } | |
182 | 186 | ||
183 | 187 | ||
184 | 188 | @Callable(V) | |
185 | - | func init ( | |
189 | + | func init (an,n,ao,ap,aq,ar,as,at,au) = if ((V.caller != this)) | |
186 | 190 | then throw("only self can init") | |
187 | - | else [b(w, | |
191 | + | else [b(w, an), b("usdtReserve", n), b("usdcReserve", ao), b("usdnVestingAll", ap), b("usdnVesting", au), b("acc", aq), b("main1", ar), b("usdnAssetId", as), IntegerEntry("bonus", at)] | |
188 | 192 | ||
189 | 193 | ||
190 | 194 | ||
191 | 195 | @Callable(V) | |
192 | - | func startVestingFor ( | |
193 | - | let | |
194 | - | if (( | |
196 | + | func startVestingFor (ai,q,av) = { | |
197 | + | let aw = U(V) | |
198 | + | if ((aw == aw)) | |
195 | 199 | then { | |
196 | - | let | |
197 | - | let | |
198 | - | let | |
199 | - | if (( | |
200 | + | let ax = addressFromStringValue(q) | |
201 | + | let ay = getStringValue(ax, "assetId") | |
202 | + | let az = invoke(I, "startVestingAllFor", [ai], nil) | |
203 | + | if ((az == az)) | |
200 | 204 | then { | |
201 | - | let | |
202 | - | if (( | |
205 | + | let aA = Q("openCollateral", ay) | |
206 | + | if ((aA == aA)) | |
203 | 207 | then { | |
204 | - | let | |
205 | - | if (( | |
208 | + | let aB = j(invoke(ax, "transferATokensAmountFor", [ai, G, av], nil)) | |
209 | + | if ((aB == aB)) | |
206 | 210 | then { | |
207 | - | let aA = valueOrErrorMessage(getInteger(x, (q + "_to_vesting_value")), "no [reserve]_to_vesting_value") | |
208 | - | let aB = fraction(az, aA, a) | |
209 | 211 | let aC = { | |
210 | - | let aD = invoke(C, "withdrawToMain2", [G, J, aB], nil) | |
211 | - | if ((aD == aD)) | |
212 | + | let aD = getInteger(x, (q + "_to_vesting_value")) | |
213 | + | if (isDefined(aD)) | |
214 | + | then fraction(aB, value(aD), a) | |
215 | + | else { | |
216 | + | let aE = j(invoke(ax, "toUSD", [aB], nil)) | |
217 | + | fraction(aE, 1000000, ad) | |
218 | + | } | |
219 | + | } | |
220 | + | let aF = { | |
221 | + | let aG = invoke(C, "withdrawToMain2", [G, J, aC], nil) | |
222 | + | if ((aG == aG)) | |
212 | 223 | then { | |
213 | - | let | |
214 | - | if (( | |
224 | + | let aF = invoke(H, "accountFor", [ai], [AttachedPayment(fromBase58String(J), aC)]) | |
225 | + | if ((aF == aF)) | |
215 | 226 | then unit | |
216 | 227 | else throw("Strict value is not equal to itself.") | |
217 | 228 | } | |
218 | 229 | else throw("Strict value is not equal to itself.") | |
219 | 230 | } | |
220 | - | if (( | |
231 | + | if ((aF == aF)) | |
221 | 232 | then { | |
222 | - | let | |
223 | - | let | |
224 | - | let | |
225 | - | if (( | |
233 | + | let aH = l(invoke(D, "healthOf", [ai], nil)) | |
234 | + | let aI = aH._1 | |
235 | + | let aJ = aH._2 | |
236 | + | if ((aI > (100 * (aI - aJ)))) | |
226 | 237 | then throw("not enough address health after move: < 1%") | |
227 | - | else [v((( | |
238 | + | else [v(((ai + "_migrated_") + ay), aB)] | |
228 | 239 | } | |
229 | 240 | else throw("Strict value is not equal to itself.") | |
230 | 241 | } | |
241 | 252 | ||
242 | 253 | @Callable(V) | |
243 | 254 | func convertToUSDN () = { | |
244 | - | let | |
245 | - | func | |
246 | - | let | |
247 | - | let | |
248 | - | let | |
249 | - | if (( | |
255 | + | let ai = toString(V.caller) | |
256 | + | func aK (q) = { | |
257 | + | let ax = addressFromStringValue(q) | |
258 | + | let ay = getStringValue(ax, "assetId") | |
259 | + | let aA = Q("openCollateral", ay) | |
260 | + | if ((aA == aA)) | |
250 | 261 | then if (if ((q != toString(E))) | |
251 | 262 | then (q != toString(F)) | |
252 | 263 | else false) | |
253 | 264 | then throw("invalid reserve") | |
254 | 265 | else { | |
255 | - | let | |
256 | - | if (( | |
266 | + | let aL = invoke(B, "syncHeight", [q], nil) | |
267 | + | if ((aL == aL)) | |
257 | 268 | then { | |
258 | - | let | |
259 | - | let | |
260 | - | let | |
261 | - | let | |
262 | - | then min([a, fraction( | |
269 | + | let aM = l(invoke(ax, "storedDepositBorrow", nil, nil)) | |
270 | + | let aN = aM._1 | |
271 | + | let aO = aM._2 | |
272 | + | let aP = if ((aN > 0)) | |
273 | + | then min([a, fraction(aO, a, aN)]) | |
263 | 274 | else 0 | |
264 | - | let | |
265 | - | if (( | |
275 | + | let aQ = valueOrElse(getInteger(x, (ay + "_open_collateral_thresold")), 1000) | |
276 | + | if ((aQ > aP)) | |
266 | 277 | then throw("not allowed: util < threshold") | |
267 | 278 | else { | |
268 | - | let | |
269 | - | if (( | |
279 | + | let aR = j(invoke(ax, "userDepositUSD", [ai], nil)) | |
280 | + | if ((aR == aR)) | |
270 | 281 | then { | |
271 | - | let | |
272 | - | if (( | |
282 | + | let aB = j(invoke(ax, "transferATokensFor", [ai, G, aR], nil)) | |
283 | + | if ((aB == aB)) | |
273 | 284 | then { | |
274 | - | let | |
275 | - | if (( | |
276 | - | then | |
285 | + | let aS = L(q, "deposit", ai, G, aB) | |
286 | + | if ((aS == aS)) | |
287 | + | then aB | |
277 | 288 | else throw("Strict value is not equal to itself.") | |
278 | 289 | } | |
279 | 290 | else throw("Strict value is not equal to itself.") | |
286 | 297 | else throw("Strict value is not equal to itself.") | |
287 | 298 | } | |
288 | 299 | ||
289 | - | let | |
290 | - | if (( | |
300 | + | let az = invoke(I, "startVestingAllFor", [toString(V.caller)], nil) | |
301 | + | if ((az == az)) | |
291 | 302 | then { | |
292 | - | let | |
293 | - | if (( | |
303 | + | let aT = j(aK(toString(E))) | |
304 | + | if ((aT == aT)) | |
294 | 305 | then { | |
295 | - | let | |
296 | - | if (( | |
306 | + | let aU = j(aK(toString(F))) | |
307 | + | if ((aU == aU)) | |
297 | 308 | then { | |
298 | - | let | |
299 | - | let | |
300 | - | let | |
301 | - | let | |
302 | - | if (( | |
309 | + | let aV = (aT + aU) | |
310 | + | let aF = { | |
311 | + | let aW = fraction(aV, (a + K), a) | |
312 | + | let aG = invoke(C, "withdrawToMain2", [G, J, aW], nil) | |
313 | + | if ((aG == aG)) | |
303 | 314 | then { | |
304 | - | let | |
305 | - | if (( | |
315 | + | let aF = invoke(H, "accountFor", [ai], [AttachedPayment(fromBase58String(J), aW)]) | |
316 | + | if ((aF == aF)) | |
306 | 317 | then unit | |
307 | 318 | else throw("Strict value is not equal to itself.") | |
308 | 319 | } | |
309 | 320 | else throw("Strict value is not equal to itself.") | |
310 | 321 | } | |
311 | - | if (( | |
322 | + | if ((aF == aF)) | |
312 | 323 | then { | |
313 | - | let | |
314 | - | let | |
315 | - | let | |
316 | - | if (( | |
324 | + | let aX = l(invoke(D, "healthOf", [ai], nil)) | |
325 | + | let aI = aX._1 | |
326 | + | let aJ = aX._2 | |
327 | + | if ((aI > (100 * (aI - aJ)))) | |
317 | 328 | then throw("not enough address health after move: < 1%") | |
318 | - | else [v((( | |
329 | + | else [v(((ai + "_migrated_") + getStringValue(E, "assetId")), aT), v(((ai + "_migrated_") + getStringValue(F, "assetId")), aU)] | |
319 | 330 | } | |
320 | 331 | else throw("Strict value is not equal to itself.") | |
321 | 332 | } | |
329 | 340 | ||
330 | 341 | ||
331 | 342 | @Callable(V) | |
332 | - | func withdrawVestedAllUSDN ( | |
333 | - | let | |
334 | - | let | |
335 | - | then j(invoke(H, "withdrawVestedForTo", [ | |
343 | + | func withdrawVestedAllUSDN (ag,ah) = { | |
344 | + | let ai = toString(V.caller) | |
345 | + | let aj = if (ah) | |
346 | + | then j(invoke(H, "withdrawVestedForTo", [ai, ai], nil)) | |
336 | 347 | else 0 | |
337 | - | if (( | |
348 | + | if ((aj == aj)) | |
338 | 349 | then { | |
339 | - | let | |
340 | - | then j(invoke(I, "withdrawVestedForTo", [ | |
350 | + | let ak = if (ag) | |
351 | + | then j(invoke(I, "withdrawVestedForTo", [ai, ai], nil)) | |
341 | 352 | else 0 | |
342 | - | if (( | |
343 | - | then $Tuple2(nil, ( | |
353 | + | if ((ak == ak)) | |
354 | + | then $Tuple2(nil, (ak + aj)) | |
344 | 355 | else throw("Strict value is not equal to itself.") | |
345 | 356 | } | |
346 | 357 | else throw("Strict value is not equal to itself.") | |
349 | 360 | ||
350 | 361 | ||
351 | 362 | @Callable(V) | |
352 | - | func withdrawVestedAllSURF ( | |
353 | - | let | |
354 | - | if (( | |
363 | + | func withdrawVestedAllSURF (ag,ah) = { | |
364 | + | let aA = Q("liquidao_all_withdrawVestedAsSurf", toBase58String(ab)) | |
365 | + | if ((aA == aA)) | |
355 | 366 | then { | |
356 | - | let | |
357 | - | if (( | |
358 | - | then $Tuple2([ScriptTransfer(V.caller, | |
367 | + | let aY = ae(V.caller, ag, ah) | |
368 | + | if ((aY == aY)) | |
369 | + | then $Tuple2([ScriptTransfer(V.caller, aY, ab)], aY) | |
359 | 370 | else throw("Strict value is not equal to itself.") | |
360 | 371 | } | |
361 | 372 | else throw("Strict value is not equal to itself.") | |
364 | 375 | ||
365 | 376 | ||
366 | 377 | @Callable(V) | |
367 | - | func withdrawVestedSURF2 ( | |
368 | - | let | |
369 | - | let | |
370 | - | if (( | |
378 | + | func withdrawVestedSURF2 (ag,ah,aZ) = { | |
379 | + | let ai = toString(V.caller) | |
380 | + | let aA = Q("liquidao_all_withdrawVestedAsSurf", toBase58String(ab)) | |
381 | + | if ((aA == aA)) | |
371 | 382 | then { | |
372 | - | let | |
373 | - | then j(invoke(H, "partialWithdrawVestedForTo", [ | |
383 | + | let aj = if ((ah > 0)) | |
384 | + | then j(invoke(H, "partialWithdrawVestedForTo", [ai, toString(this), ah], nil)) | |
374 | 385 | else 0 | |
375 | - | if (( | |
386 | + | if ((aj == aj)) | |
376 | 387 | then { | |
377 | - | let | |
378 | - | then j(invoke(I, "partialWithdrawVestedForTo", [ | |
388 | + | let ak = if ((ag > 0)) | |
389 | + | then j(invoke(I, "partialWithdrawVestedForTo", [ai, toString(this), ag], nil)) | |
379 | 390 | else 0 | |
380 | - | if (( | |
391 | + | if ((ak == ak)) | |
381 | 392 | then { | |
382 | - | let | |
383 | - | let | |
384 | - | if (( | |
393 | + | let al = (ak + aj) | |
394 | + | let am = invoke(Z, "buySurf", [1000000, 1000000, false], [AttachedPayment(fromBase58String(J), al)]) | |
395 | + | if ((am == am)) | |
385 | 396 | then { | |
386 | - | let | |
387 | - | if (( | |
388 | - | then if ( | |
397 | + | let aY = assetBalance(this, ab) | |
398 | + | if ((aY == aY)) | |
399 | + | then if (aZ) | |
389 | 400 | then { | |
390 | - | let | |
391 | - | if (( | |
392 | - | then $Tuple2(nil, | |
401 | + | let ba = invoke(aa, "stakeByOriginCaller", nil, [AttachedPayment(ab, aY)]) | |
402 | + | if ((ba == ba)) | |
403 | + | then $Tuple2(nil, aY) | |
393 | 404 | else throw("Strict value is not equal to itself.") | |
394 | 405 | } | |
395 | - | else $Tuple2([ScriptTransfer(V.caller, | |
406 | + | else $Tuple2([ScriptTransfer(V.caller, aY, ab)], aY) | |
396 | 407 | else throw("Strict value is not equal to itself.") | |
397 | 408 | } | |
398 | 409 | else throw("Strict value is not equal to itself.") | |
407 | 418 | ||
408 | 419 | ||
409 | 420 | @Callable(V) | |
410 | - | func withdrawVestedAllSURFAndStake ( | |
411 | - | let | |
412 | - | if (( | |
421 | + | func withdrawVestedAllSURFAndStake (ag,ah) = { | |
422 | + | let aA = Q("liquidao_all_withdrawVestedAsSurf", toBase58String(ab)) | |
423 | + | if ((aA == aA)) | |
413 | 424 | then { | |
414 | - | let | |
415 | - | if (( | |
425 | + | let aY = ae(V.caller, ag, ah) | |
426 | + | if ((aY == aY)) | |
416 | 427 | then { | |
417 | - | let | |
418 | - | if (( | |
419 | - | then $Tuple2(nil, | |
428 | + | let ba = invoke(aa, "stakeByOriginCaller", nil, [AttachedPayment(ab, aY)]) | |
429 | + | if ((ba == ba)) | |
430 | + | then $Tuple2(nil, aY) | |
420 | 431 | else throw("Strict value is not equal to itself.") | |
421 | 432 | } | |
422 | 433 | else throw("Strict value is not equal to itself.") | |
427 | 438 | ||
428 | 439 | ||
429 | 440 | @Callable(V) | |
430 | - | func withdrawAsLP ( | |
431 | - | let | |
432 | - | let | |
433 | - | then j(invoke(H, "partialWithdrawVestedForTo", [ | |
441 | + | func withdrawAsLP (ag,ah) = { | |
442 | + | let ai = toString(V.caller) | |
443 | + | let aj = if ((ah > 0)) | |
444 | + | then j(invoke(H, "partialWithdrawVestedForTo", [ai, toString(this), ah], nil)) | |
434 | 445 | else 0 | |
435 | - | if (( | |
446 | + | if ((aj == aj)) | |
436 | 447 | then { | |
437 | - | let | |
438 | - | then j(invoke(I, "partialWithdrawVestedForTo", [ | |
448 | + | let ak = if ((ag > 0)) | |
449 | + | then j(invoke(I, "partialWithdrawVestedForTo", [ai, toString(this), ag], nil)) | |
439 | 450 | else 0 | |
440 | - | if (( | |
451 | + | if ((ak == ak)) | |
441 | 452 | then { | |
442 | - | let | |
443 | - | let | |
444 | - | if (( | |
445 | - | then $Tuple2(nil, | |
453 | + | let al = (ak + aj) | |
454 | + | let bb = invoke(y, "mintTo", [ai], [AttachedPayment(fromBase58String(J), al)]) | |
455 | + | if ((bb == bb)) | |
456 | + | then $Tuple2(nil, al) | |
446 | 457 | else throw("Strict value is not equal to itself.") | |
447 | 458 | } | |
448 | 459 | else throw("Strict value is not equal to itself.") | |
454 | 465 | ||
455 | 466 | @Callable(V) | |
456 | 467 | func importLP () = { | |
457 | - | let | |
458 | - | let | |
459 | - | if (( | |
468 | + | let ai = toString(V.caller) | |
469 | + | let aW = j(invoke(y, "import", nil, V.payments)) | |
470 | + | if ((aW == aW)) | |
460 | 471 | then { | |
461 | - | let | |
462 | - | if (( | |
463 | - | then $Tuple2(nil, | |
472 | + | let bc = invoke(H, "accountFor", [ai], [AttachedPayment(fromBase58String(J), aW)]) | |
473 | + | if ((bc == bc)) | |
474 | + | then $Tuple2(nil, aW) | |
464 | 475 | else throw("Strict value is not equal to itself.") | |
465 | 476 | } | |
466 | 477 | else throw("Strict value is not equal to itself.") | |
467 | 478 | } | |
468 | 479 | ||
469 | 480 | ||
470 | - | @Verifier( | |
471 | - | func | |
472 | - | let | |
473 | - | let | |
474 | - | let | |
475 | - | let | |
476 | - | let | |
477 | - | let | |
478 | - | let | |
479 | - | let | |
480 | - | let | |
481 | - | let | |
482 | - | let | |
483 | - | let | |
484 | - | let | |
485 | - | let | |
486 | - | let | |
487 | - | let | |
488 | - | let | |
489 | - | let | |
490 | - | let | |
491 | - | let | |
492 | - | let | |
493 | - | let | |
481 | + | @Verifier(bd) | |
482 | + | func be () = { | |
483 | + | let bf = 1000 | |
484 | + | let bg = valueOrErrorMessage(getInteger(x, "proposal_quorum_ratio"), "proposalQuorumRatio is not defined") | |
485 | + | let bh = valueOrErrorMessage(getInteger(x, "proposal_passed_ratio"), "proposalThresholdRatio is not defined") | |
486 | + | let bi = valueOrErrorMessage(addressFromString(valueOrErrorMessage(getString(x, "dividends_contract"), "no dividends_contract")), "invalid dividends_contract") | |
487 | + | let bj = valueOrErrorMessage(addressFromString(valueOrErrorMessage(getString(x, "voting_contract"), "no voting_contract")), "invalid voting_contract") | |
488 | + | let bk = toBase58String(bd.id) | |
489 | + | let bl = valueOrElse(getInteger(bj, ("proposal_yes_" + bk)), 0) | |
490 | + | let bm = valueOrElse(getInteger(bj, ("proposal_no_" + bk)), 0) | |
491 | + | let bn = valueOrErrorMessage(getInteger(bj, ("proposal_height_" + bk)), "proposal not registered") | |
492 | + | let bo = valueOrElse(getInteger(bj, ("proposal_applystart_" + bk)), 0) | |
493 | + | let bp = valueOrElse(getInteger(bj, ("proposal_applyend_" + bk)), 0) | |
494 | + | let bq = valueOrElse(getInteger(bj, ("proposal_gvires_" + bk)), 0) | |
495 | + | let br = valueOrElse(getBoolean(x, "op_governance_apply_tx_paused"), false) | |
496 | + | let bs = bl | |
497 | + | let bt = bm | |
498 | + | let bu = (bs + bt) | |
499 | + | let bv = (((bu * bf) / bq) >= bg) | |
500 | + | let bw = (((bs * bf) / bu) >= bh) | |
501 | + | let bx = (bo >= A) | |
502 | + | let by = (A >= bp) | |
503 | + | let bz = ((((((("proposalHeight = " + toString(bn)) + ", applyStart = ") + toString(bo)) + ", applyEnd = ") + toString(bp)) + ", HEIGHT = ") + toString(A)) | |
504 | + | let bA = if (!(br)) | |
494 | 505 | then throw("tx application throw governance not enabled") | |
495 | - | else if ( | |
496 | - | then throw(("proposal can't be executed as it's too early: " + | |
497 | - | else if ( | |
498 | - | then throw(("proposal can't be executed as it's too late:" + | |
499 | - | else if (!( | |
500 | - | then throw((((((("no quorum: " + "totalVotes: ") + toString( | |
501 | - | else if (!( | |
502 | - | then throw((((((("no threshold achieved: " + "voteYes: ") + toString( | |
506 | + | else if (bx) | |
507 | + | then throw(("proposal can't be executed as it's too early: " + bz)) | |
508 | + | else if (by) | |
509 | + | then throw(("proposal can't be executed as it's too late:" + bz)) | |
510 | + | else if (!(bv)) | |
511 | + | then throw((((((("no quorum: " + "totalVotes: ") + toString(bu)) + ", totalGVires: ") + toString(bq)) + ", quorumRatio: ") + toString(bg))) | |
512 | + | else if (!(bw)) | |
513 | + | then throw((((((("no threshold achieved: " + "voteYes: ") + toString(bs)) + ", voteNo: ") + toString(bt)) + ", passedRatio: ") + toString(bh))) | |
503 | 514 | else true | |
504 | - | if (sigVerify( | |
515 | + | if (sigVerify(bd.bodyBytes, bd.proofs[0], bd.senderPublicKey)) | |
505 | 516 | then true | |
506 | - | else | |
517 | + | else bA | |
507 | 518 | } | |
508 | 519 |
Old | New | Differences | |
---|---|---|---|
1 | 1 | {-# STDLIB_VERSION 6 #-} | |
2 | 2 | {-# SCRIPT_TYPE ACCOUNT #-} | |
3 | 3 | {-# CONTENT_TYPE DAPP #-} | |
4 | 4 | let a = 1000 | |
5 | 5 | ||
6 | 6 | func b (c,d) = if (!(isDefined(getString(this, c)))) | |
7 | 7 | then StringEntry(c, d) | |
8 | 8 | else throw(("already initialized: " + c)) | |
9 | 9 | ||
10 | 10 | ||
11 | 11 | func e (c,d) = if (!(isDefined(getInteger(this, c)))) | |
12 | 12 | then IntegerEntry(c, d) | |
13 | 13 | else throw(("already initialized: " + c)) | |
14 | 14 | ||
15 | 15 | ||
16 | 16 | func f (c,d) = if ((0 > d)) | |
17 | 17 | then throw(((("writing negative value " + toString(d)) + " for key ") + c)) | |
18 | 18 | else IntegerEntry(c, d) | |
19 | 19 | ||
20 | 20 | ||
21 | 21 | func g (d) = { | |
22 | 22 | let h = d | |
23 | 23 | if ($isInstanceOf(h, "String")) | |
24 | 24 | then { | |
25 | 25 | let i = h | |
26 | 26 | i | |
27 | 27 | } | |
28 | 28 | else throw("wrong type, expected: String") | |
29 | 29 | } | |
30 | 30 | ||
31 | 31 | ||
32 | 32 | func j (d) = { | |
33 | 33 | let h = d | |
34 | 34 | if ($isInstanceOf(h, "Int")) | |
35 | 35 | then { | |
36 | 36 | let k = h | |
37 | 37 | k | |
38 | 38 | } | |
39 | 39 | else throw("sm:1") | |
40 | 40 | } | |
41 | 41 | ||
42 | 42 | ||
43 | 43 | func l (d) = { | |
44 | 44 | let h = d | |
45 | 45 | if ($isInstanceOf(h, "(Int, Int)")) | |
46 | 46 | then { | |
47 | 47 | let m = h | |
48 | 48 | m | |
49 | 49 | } | |
50 | 50 | else { | |
51 | 51 | let n = h | |
52 | 52 | throw("wrong type, expected: Int2") | |
53 | 53 | } | |
54 | 54 | } | |
55 | 55 | ||
56 | 56 | ||
57 | 57 | func o (d) = { | |
58 | 58 | let h = d | |
59 | 59 | if ($isInstanceOf(h, "(Int, Int, Int, Int, Int, Boolean)")) | |
60 | 60 | then { | |
61 | 61 | let m = h | |
62 | 62 | m | |
63 | 63 | } | |
64 | 64 | else { | |
65 | 65 | let n = h | |
66 | 66 | throw("3") | |
67 | 67 | } | |
68 | 68 | } | |
69 | 69 | ||
70 | 70 | ||
71 | 71 | func p (q,r) = o(invoke(q, "userBalance", [r], nil)) | |
72 | 72 | ||
73 | 73 | ||
74 | 74 | func s (t,u) = if (t) | |
75 | 75 | then throw(u) | |
76 | 76 | else true | |
77 | 77 | ||
78 | 78 | ||
79 | 79 | func v (c,d) = f(c, (valueOrElse(getInteger(this, c), 0) + d)) | |
80 | 80 | ||
81 | 81 | ||
82 | 82 | let w = "config" | |
83 | 83 | ||
84 | 84 | let x = addressFromStringValue(getStringValue(this, w)) | |
85 | 85 | ||
86 | 86 | let y = addressFromStringValue("3PJFu8MmVa2rSVGM48wdLm4jhLznEgu6XSe") | |
87 | 87 | ||
88 | 88 | let z = { | |
89 | 89 | let h = getString(x, "oracle_address") | |
90 | 90 | if ($isInstanceOf(h, "String")) | |
91 | 91 | then { | |
92 | 92 | let i = h | |
93 | 93 | addressFromString(i) | |
94 | 94 | } | |
95 | 95 | else unit | |
96 | 96 | } | |
97 | 97 | ||
98 | 98 | let A = height | |
99 | 99 | ||
100 | 100 | let B = addressFromStringValue(valueOrErrorMessage(getString(x, "vires_distributor"), "bad vires distributor")) | |
101 | 101 | ||
102 | 102 | let C = addressFromStringValue(getStringValue(x, "protected_reserve")) | |
103 | 103 | ||
104 | 104 | let D = addressFromStringValue(getStringValue(this, "main1")) | |
105 | 105 | ||
106 | 106 | let E = addressFromStringValue(getStringValue(this, "usdtReserve")) | |
107 | 107 | ||
108 | 108 | let F = addressFromStringValue(getStringValue(this, "usdcReserve")) | |
109 | 109 | ||
110 | 110 | let G = getStringValue(this, "acc") | |
111 | 111 | ||
112 | 112 | let H = addressFromStringValue(getStringValue(this, "usdnVestingAll")) | |
113 | 113 | ||
114 | 114 | let I = addressFromStringValue(getStringValue(this, "usdnVesting")) | |
115 | 115 | ||
116 | 116 | let J = getStringValue(this, "usdnAssetId") | |
117 | 117 | ||
118 | 118 | let K = getIntegerValue(this, "bonus") | |
119 | 119 | ||
120 | 120 | func L (q,M,N,O,P) = invoke(B, "move", [q, M, N, O, P], nil) | |
121 | 121 | ||
122 | 122 | ||
123 | 123 | func Q (R,S) = { | |
124 | 124 | let h = invoke(x, "opAllowed", [S, R], nil) | |
125 | 125 | if ($isInstanceOf(h, "Boolean")) | |
126 | 126 | then { | |
127 | 127 | let T = h | |
128 | 128 | if (T) | |
129 | 129 | then true | |
130 | 130 | else throw("not allowed") | |
131 | 131 | } | |
132 | 132 | else throw("opAllowed: unexpected result type") | |
133 | 133 | } | |
134 | 134 | ||
135 | 135 | ||
136 | 136 | func U (V) = if (contains(getStringValue(x, "main"), toString(V.caller))) | |
137 | 137 | then true | |
138 | 138 | else throw("only main can do") | |
139 | 139 | ||
140 | 140 | ||
141 | 141 | func W (G) = { | |
142 | 142 | let X = g(invoke(I, "adviseU", [G], nil)) | |
143 | 143 | if ((X == X)) | |
144 | 144 | then { | |
145 | 145 | let Y = g(invoke(H, "adviseU", [G], nil)) | |
146 | 146 | if ((Y == Y)) | |
147 | 147 | then ((X + " | ") + Y) | |
148 | 148 | else throw("Strict value is not equal to itself.") | |
149 | 149 | } | |
150 | 150 | else throw("Strict value is not equal to itself.") | |
151 | 151 | } | |
152 | 152 | ||
153 | 153 | ||
154 | 154 | let Z = addressFromStringValue("3PG2vMhK5CPqsCDodvLGzQ84QkoHXCJ3oNP") | |
155 | 155 | ||
156 | 156 | let aa = addressFromStringValue("3PBiotFpqjRMkkeFBccnQNUXUopy7KFez5C") | |
157 | 157 | ||
158 | 158 | let ab = fromBase58String("At8D6NFFpheCbvKVnjVoeLL84Eo8NZn6ovManxfLaFWL") | |
159 | 159 | ||
160 | - | func ac (ad,ae,af) = { | |
161 | - | let ag = toString(ad) | |
162 | - | let ah = if (af) | |
163 | - | then j(invoke(H, "withdrawAllVestedForTo", [ag, toString(this)], nil)) | |
160 | + | let ac = Address(base58'3PKkojKdd6BBzTf1RXbQVfUDraNFXXHKzQF') | |
161 | + | ||
162 | + | let ad = getIntegerValue(ac, "%s%s__price__USDN-USDT") | |
163 | + | ||
164 | + | func ae (af,ag,ah) = { | |
165 | + | let ai = toString(af) | |
166 | + | let aj = if (ah) | |
167 | + | then j(invoke(H, "withdrawAllVestedForTo", [ai, toString(this)], nil)) | |
164 | 168 | else 0 | |
165 | - | if (( | |
169 | + | if ((aj == aj)) | |
166 | 170 | then { | |
167 | - | let | |
171 | + | let ak = if (ag) | |
168 | 172 | then throw("not implemented") | |
169 | 173 | else 0 | |
170 | - | if (( | |
174 | + | if ((ak == ak)) | |
171 | 175 | then { | |
172 | - | let | |
173 | - | let | |
174 | - | if (( | |
176 | + | let al = (ak + aj) | |
177 | + | let am = invoke(Z, "buySurf", [1000000, 1000000, false], [AttachedPayment(fromBase58String(J), al)]) | |
178 | + | if ((am == am)) | |
175 | 179 | then assetBalance(this, ab) | |
176 | 180 | else throw("Strict value is not equal to itself.") | |
177 | 181 | } | |
178 | 182 | else throw("Strict value is not equal to itself.") | |
179 | 183 | } | |
180 | 184 | else throw("Strict value is not equal to itself.") | |
181 | 185 | } | |
182 | 186 | ||
183 | 187 | ||
184 | 188 | @Callable(V) | |
185 | - | func init ( | |
189 | + | func init (an,n,ao,ap,aq,ar,as,at,au) = if ((V.caller != this)) | |
186 | 190 | then throw("only self can init") | |
187 | - | else [b(w, | |
191 | + | else [b(w, an), b("usdtReserve", n), b("usdcReserve", ao), b("usdnVestingAll", ap), b("usdnVesting", au), b("acc", aq), b("main1", ar), b("usdnAssetId", as), IntegerEntry("bonus", at)] | |
188 | 192 | ||
189 | 193 | ||
190 | 194 | ||
191 | 195 | @Callable(V) | |
192 | - | func startVestingFor ( | |
193 | - | let | |
194 | - | if (( | |
196 | + | func startVestingFor (ai,q,av) = { | |
197 | + | let aw = U(V) | |
198 | + | if ((aw == aw)) | |
195 | 199 | then { | |
196 | - | let | |
197 | - | let | |
198 | - | let | |
199 | - | if (( | |
200 | + | let ax = addressFromStringValue(q) | |
201 | + | let ay = getStringValue(ax, "assetId") | |
202 | + | let az = invoke(I, "startVestingAllFor", [ai], nil) | |
203 | + | if ((az == az)) | |
200 | 204 | then { | |
201 | - | let | |
202 | - | if (( | |
205 | + | let aA = Q("openCollateral", ay) | |
206 | + | if ((aA == aA)) | |
203 | 207 | then { | |
204 | - | let | |
205 | - | if (( | |
208 | + | let aB = j(invoke(ax, "transferATokensAmountFor", [ai, G, av], nil)) | |
209 | + | if ((aB == aB)) | |
206 | 210 | then { | |
207 | - | let aA = valueOrErrorMessage(getInteger(x, (q + "_to_vesting_value")), "no [reserve]_to_vesting_value") | |
208 | - | let aB = fraction(az, aA, a) | |
209 | 211 | let aC = { | |
210 | - | let aD = invoke(C, "withdrawToMain2", [G, J, aB], nil) | |
211 | - | if ((aD == aD)) | |
212 | + | let aD = getInteger(x, (q + "_to_vesting_value")) | |
213 | + | if (isDefined(aD)) | |
214 | + | then fraction(aB, value(aD), a) | |
215 | + | else { | |
216 | + | let aE = j(invoke(ax, "toUSD", [aB], nil)) | |
217 | + | fraction(aE, 1000000, ad) | |
218 | + | } | |
219 | + | } | |
220 | + | let aF = { | |
221 | + | let aG = invoke(C, "withdrawToMain2", [G, J, aC], nil) | |
222 | + | if ((aG == aG)) | |
212 | 223 | then { | |
213 | - | let | |
214 | - | if (( | |
224 | + | let aF = invoke(H, "accountFor", [ai], [AttachedPayment(fromBase58String(J), aC)]) | |
225 | + | if ((aF == aF)) | |
215 | 226 | then unit | |
216 | 227 | else throw("Strict value is not equal to itself.") | |
217 | 228 | } | |
218 | 229 | else throw("Strict value is not equal to itself.") | |
219 | 230 | } | |
220 | - | if (( | |
231 | + | if ((aF == aF)) | |
221 | 232 | then { | |
222 | - | let | |
223 | - | let | |
224 | - | let | |
225 | - | if (( | |
233 | + | let aH = l(invoke(D, "healthOf", [ai], nil)) | |
234 | + | let aI = aH._1 | |
235 | + | let aJ = aH._2 | |
236 | + | if ((aI > (100 * (aI - aJ)))) | |
226 | 237 | then throw("not enough address health after move: < 1%") | |
227 | - | else [v((( | |
238 | + | else [v(((ai + "_migrated_") + ay), aB)] | |
228 | 239 | } | |
229 | 240 | else throw("Strict value is not equal to itself.") | |
230 | 241 | } | |
231 | 242 | else throw("Strict value is not equal to itself.") | |
232 | 243 | } | |
233 | 244 | else throw("Strict value is not equal to itself.") | |
234 | 245 | } | |
235 | 246 | else throw("Strict value is not equal to itself.") | |
236 | 247 | } | |
237 | 248 | else throw("Strict value is not equal to itself.") | |
238 | 249 | } | |
239 | 250 | ||
240 | 251 | ||
241 | 252 | ||
242 | 253 | @Callable(V) | |
243 | 254 | func convertToUSDN () = { | |
244 | - | let | |
245 | - | func | |
246 | - | let | |
247 | - | let | |
248 | - | let | |
249 | - | if (( | |
255 | + | let ai = toString(V.caller) | |
256 | + | func aK (q) = { | |
257 | + | let ax = addressFromStringValue(q) | |
258 | + | let ay = getStringValue(ax, "assetId") | |
259 | + | let aA = Q("openCollateral", ay) | |
260 | + | if ((aA == aA)) | |
250 | 261 | then if (if ((q != toString(E))) | |
251 | 262 | then (q != toString(F)) | |
252 | 263 | else false) | |
253 | 264 | then throw("invalid reserve") | |
254 | 265 | else { | |
255 | - | let | |
256 | - | if (( | |
266 | + | let aL = invoke(B, "syncHeight", [q], nil) | |
267 | + | if ((aL == aL)) | |
257 | 268 | then { | |
258 | - | let | |
259 | - | let | |
260 | - | let | |
261 | - | let | |
262 | - | then min([a, fraction( | |
269 | + | let aM = l(invoke(ax, "storedDepositBorrow", nil, nil)) | |
270 | + | let aN = aM._1 | |
271 | + | let aO = aM._2 | |
272 | + | let aP = if ((aN > 0)) | |
273 | + | then min([a, fraction(aO, a, aN)]) | |
263 | 274 | else 0 | |
264 | - | let | |
265 | - | if (( | |
275 | + | let aQ = valueOrElse(getInteger(x, (ay + "_open_collateral_thresold")), 1000) | |
276 | + | if ((aQ > aP)) | |
266 | 277 | then throw("not allowed: util < threshold") | |
267 | 278 | else { | |
268 | - | let | |
269 | - | if (( | |
279 | + | let aR = j(invoke(ax, "userDepositUSD", [ai], nil)) | |
280 | + | if ((aR == aR)) | |
270 | 281 | then { | |
271 | - | let | |
272 | - | if (( | |
282 | + | let aB = j(invoke(ax, "transferATokensFor", [ai, G, aR], nil)) | |
283 | + | if ((aB == aB)) | |
273 | 284 | then { | |
274 | - | let | |
275 | - | if (( | |
276 | - | then | |
285 | + | let aS = L(q, "deposit", ai, G, aB) | |
286 | + | if ((aS == aS)) | |
287 | + | then aB | |
277 | 288 | else throw("Strict value is not equal to itself.") | |
278 | 289 | } | |
279 | 290 | else throw("Strict value is not equal to itself.") | |
280 | 291 | } | |
281 | 292 | else throw("Strict value is not equal to itself.") | |
282 | 293 | } | |
283 | 294 | } | |
284 | 295 | else throw("Strict value is not equal to itself.") | |
285 | 296 | } | |
286 | 297 | else throw("Strict value is not equal to itself.") | |
287 | 298 | } | |
288 | 299 | ||
289 | - | let | |
290 | - | if (( | |
300 | + | let az = invoke(I, "startVestingAllFor", [toString(V.caller)], nil) | |
301 | + | if ((az == az)) | |
291 | 302 | then { | |
292 | - | let | |
293 | - | if (( | |
303 | + | let aT = j(aK(toString(E))) | |
304 | + | if ((aT == aT)) | |
294 | 305 | then { | |
295 | - | let | |
296 | - | if (( | |
306 | + | let aU = j(aK(toString(F))) | |
307 | + | if ((aU == aU)) | |
297 | 308 | then { | |
298 | - | let | |
299 | - | let | |
300 | - | let | |
301 | - | let | |
302 | - | if (( | |
309 | + | let aV = (aT + aU) | |
310 | + | let aF = { | |
311 | + | let aW = fraction(aV, (a + K), a) | |
312 | + | let aG = invoke(C, "withdrawToMain2", [G, J, aW], nil) | |
313 | + | if ((aG == aG)) | |
303 | 314 | then { | |
304 | - | let | |
305 | - | if (( | |
315 | + | let aF = invoke(H, "accountFor", [ai], [AttachedPayment(fromBase58String(J), aW)]) | |
316 | + | if ((aF == aF)) | |
306 | 317 | then unit | |
307 | 318 | else throw("Strict value is not equal to itself.") | |
308 | 319 | } | |
309 | 320 | else throw("Strict value is not equal to itself.") | |
310 | 321 | } | |
311 | - | if (( | |
322 | + | if ((aF == aF)) | |
312 | 323 | then { | |
313 | - | let | |
314 | - | let | |
315 | - | let | |
316 | - | if (( | |
324 | + | let aX = l(invoke(D, "healthOf", [ai], nil)) | |
325 | + | let aI = aX._1 | |
326 | + | let aJ = aX._2 | |
327 | + | if ((aI > (100 * (aI - aJ)))) | |
317 | 328 | then throw("not enough address health after move: < 1%") | |
318 | - | else [v((( | |
329 | + | else [v(((ai + "_migrated_") + getStringValue(E, "assetId")), aT), v(((ai + "_migrated_") + getStringValue(F, "assetId")), aU)] | |
319 | 330 | } | |
320 | 331 | else throw("Strict value is not equal to itself.") | |
321 | 332 | } | |
322 | 333 | else throw("Strict value is not equal to itself.") | |
323 | 334 | } | |
324 | 335 | else throw("Strict value is not equal to itself.") | |
325 | 336 | } | |
326 | 337 | else throw("Strict value is not equal to itself.") | |
327 | 338 | } | |
328 | 339 | ||
329 | 340 | ||
330 | 341 | ||
331 | 342 | @Callable(V) | |
332 | - | func withdrawVestedAllUSDN ( | |
333 | - | let | |
334 | - | let | |
335 | - | then j(invoke(H, "withdrawVestedForTo", [ | |
343 | + | func withdrawVestedAllUSDN (ag,ah) = { | |
344 | + | let ai = toString(V.caller) | |
345 | + | let aj = if (ah) | |
346 | + | then j(invoke(H, "withdrawVestedForTo", [ai, ai], nil)) | |
336 | 347 | else 0 | |
337 | - | if (( | |
348 | + | if ((aj == aj)) | |
338 | 349 | then { | |
339 | - | let | |
340 | - | then j(invoke(I, "withdrawVestedForTo", [ | |
350 | + | let ak = if (ag) | |
351 | + | then j(invoke(I, "withdrawVestedForTo", [ai, ai], nil)) | |
341 | 352 | else 0 | |
342 | - | if (( | |
343 | - | then $Tuple2(nil, ( | |
353 | + | if ((ak == ak)) | |
354 | + | then $Tuple2(nil, (ak + aj)) | |
344 | 355 | else throw("Strict value is not equal to itself.") | |
345 | 356 | } | |
346 | 357 | else throw("Strict value is not equal to itself.") | |
347 | 358 | } | |
348 | 359 | ||
349 | 360 | ||
350 | 361 | ||
351 | 362 | @Callable(V) | |
352 | - | func withdrawVestedAllSURF ( | |
353 | - | let | |
354 | - | if (( | |
363 | + | func withdrawVestedAllSURF (ag,ah) = { | |
364 | + | let aA = Q("liquidao_all_withdrawVestedAsSurf", toBase58String(ab)) | |
365 | + | if ((aA == aA)) | |
355 | 366 | then { | |
356 | - | let | |
357 | - | if (( | |
358 | - | then $Tuple2([ScriptTransfer(V.caller, | |
367 | + | let aY = ae(V.caller, ag, ah) | |
368 | + | if ((aY == aY)) | |
369 | + | then $Tuple2([ScriptTransfer(V.caller, aY, ab)], aY) | |
359 | 370 | else throw("Strict value is not equal to itself.") | |
360 | 371 | } | |
361 | 372 | else throw("Strict value is not equal to itself.") | |
362 | 373 | } | |
363 | 374 | ||
364 | 375 | ||
365 | 376 | ||
366 | 377 | @Callable(V) | |
367 | - | func withdrawVestedSURF2 ( | |
368 | - | let | |
369 | - | let | |
370 | - | if (( | |
378 | + | func withdrawVestedSURF2 (ag,ah,aZ) = { | |
379 | + | let ai = toString(V.caller) | |
380 | + | let aA = Q("liquidao_all_withdrawVestedAsSurf", toBase58String(ab)) | |
381 | + | if ((aA == aA)) | |
371 | 382 | then { | |
372 | - | let | |
373 | - | then j(invoke(H, "partialWithdrawVestedForTo", [ | |
383 | + | let aj = if ((ah > 0)) | |
384 | + | then j(invoke(H, "partialWithdrawVestedForTo", [ai, toString(this), ah], nil)) | |
374 | 385 | else 0 | |
375 | - | if (( | |
386 | + | if ((aj == aj)) | |
376 | 387 | then { | |
377 | - | let | |
378 | - | then j(invoke(I, "partialWithdrawVestedForTo", [ | |
388 | + | let ak = if ((ag > 0)) | |
389 | + | then j(invoke(I, "partialWithdrawVestedForTo", [ai, toString(this), ag], nil)) | |
379 | 390 | else 0 | |
380 | - | if (( | |
391 | + | if ((ak == ak)) | |
381 | 392 | then { | |
382 | - | let | |
383 | - | let | |
384 | - | if (( | |
393 | + | let al = (ak + aj) | |
394 | + | let am = invoke(Z, "buySurf", [1000000, 1000000, false], [AttachedPayment(fromBase58String(J), al)]) | |
395 | + | if ((am == am)) | |
385 | 396 | then { | |
386 | - | let | |
387 | - | if (( | |
388 | - | then if ( | |
397 | + | let aY = assetBalance(this, ab) | |
398 | + | if ((aY == aY)) | |
399 | + | then if (aZ) | |
389 | 400 | then { | |
390 | - | let | |
391 | - | if (( | |
392 | - | then $Tuple2(nil, | |
401 | + | let ba = invoke(aa, "stakeByOriginCaller", nil, [AttachedPayment(ab, aY)]) | |
402 | + | if ((ba == ba)) | |
403 | + | then $Tuple2(nil, aY) | |
393 | 404 | else throw("Strict value is not equal to itself.") | |
394 | 405 | } | |
395 | - | else $Tuple2([ScriptTransfer(V.caller, | |
406 | + | else $Tuple2([ScriptTransfer(V.caller, aY, ab)], aY) | |
396 | 407 | else throw("Strict value is not equal to itself.") | |
397 | 408 | } | |
398 | 409 | else throw("Strict value is not equal to itself.") | |
399 | 410 | } | |
400 | 411 | else throw("Strict value is not equal to itself.") | |
401 | 412 | } | |
402 | 413 | else throw("Strict value is not equal to itself.") | |
403 | 414 | } | |
404 | 415 | else throw("Strict value is not equal to itself.") | |
405 | 416 | } | |
406 | 417 | ||
407 | 418 | ||
408 | 419 | ||
409 | 420 | @Callable(V) | |
410 | - | func withdrawVestedAllSURFAndStake ( | |
411 | - | let | |
412 | - | if (( | |
421 | + | func withdrawVestedAllSURFAndStake (ag,ah) = { | |
422 | + | let aA = Q("liquidao_all_withdrawVestedAsSurf", toBase58String(ab)) | |
423 | + | if ((aA == aA)) | |
413 | 424 | then { | |
414 | - | let | |
415 | - | if (( | |
425 | + | let aY = ae(V.caller, ag, ah) | |
426 | + | if ((aY == aY)) | |
416 | 427 | then { | |
417 | - | let | |
418 | - | if (( | |
419 | - | then $Tuple2(nil, | |
428 | + | let ba = invoke(aa, "stakeByOriginCaller", nil, [AttachedPayment(ab, aY)]) | |
429 | + | if ((ba == ba)) | |
430 | + | then $Tuple2(nil, aY) | |
420 | 431 | else throw("Strict value is not equal to itself.") | |
421 | 432 | } | |
422 | 433 | else throw("Strict value is not equal to itself.") | |
423 | 434 | } | |
424 | 435 | else throw("Strict value is not equal to itself.") | |
425 | 436 | } | |
426 | 437 | ||
427 | 438 | ||
428 | 439 | ||
429 | 440 | @Callable(V) | |
430 | - | func withdrawAsLP ( | |
431 | - | let | |
432 | - | let | |
433 | - | then j(invoke(H, "partialWithdrawVestedForTo", [ | |
441 | + | func withdrawAsLP (ag,ah) = { | |
442 | + | let ai = toString(V.caller) | |
443 | + | let aj = if ((ah > 0)) | |
444 | + | then j(invoke(H, "partialWithdrawVestedForTo", [ai, toString(this), ah], nil)) | |
434 | 445 | else 0 | |
435 | - | if (( | |
446 | + | if ((aj == aj)) | |
436 | 447 | then { | |
437 | - | let | |
438 | - | then j(invoke(I, "partialWithdrawVestedForTo", [ | |
448 | + | let ak = if ((ag > 0)) | |
449 | + | then j(invoke(I, "partialWithdrawVestedForTo", [ai, toString(this), ag], nil)) | |
439 | 450 | else 0 | |
440 | - | if (( | |
451 | + | if ((ak == ak)) | |
441 | 452 | then { | |
442 | - | let | |
443 | - | let | |
444 | - | if (( | |
445 | - | then $Tuple2(nil, | |
453 | + | let al = (ak + aj) | |
454 | + | let bb = invoke(y, "mintTo", [ai], [AttachedPayment(fromBase58String(J), al)]) | |
455 | + | if ((bb == bb)) | |
456 | + | then $Tuple2(nil, al) | |
446 | 457 | else throw("Strict value is not equal to itself.") | |
447 | 458 | } | |
448 | 459 | else throw("Strict value is not equal to itself.") | |
449 | 460 | } | |
450 | 461 | else throw("Strict value is not equal to itself.") | |
451 | 462 | } | |
452 | 463 | ||
453 | 464 | ||
454 | 465 | ||
455 | 466 | @Callable(V) | |
456 | 467 | func importLP () = { | |
457 | - | let | |
458 | - | let | |
459 | - | if (( | |
468 | + | let ai = toString(V.caller) | |
469 | + | let aW = j(invoke(y, "import", nil, V.payments)) | |
470 | + | if ((aW == aW)) | |
460 | 471 | then { | |
461 | - | let | |
462 | - | if (( | |
463 | - | then $Tuple2(nil, | |
472 | + | let bc = invoke(H, "accountFor", [ai], [AttachedPayment(fromBase58String(J), aW)]) | |
473 | + | if ((bc == bc)) | |
474 | + | then $Tuple2(nil, aW) | |
464 | 475 | else throw("Strict value is not equal to itself.") | |
465 | 476 | } | |
466 | 477 | else throw("Strict value is not equal to itself.") | |
467 | 478 | } | |
468 | 479 | ||
469 | 480 | ||
470 | - | @Verifier( | |
471 | - | func | |
472 | - | let | |
473 | - | let | |
474 | - | let | |
475 | - | let | |
476 | - | let | |
477 | - | let | |
478 | - | let | |
479 | - | let | |
480 | - | let | |
481 | - | let | |
482 | - | let | |
483 | - | let | |
484 | - | let | |
485 | - | let | |
486 | - | let | |
487 | - | let | |
488 | - | let | |
489 | - | let | |
490 | - | let | |
491 | - | let | |
492 | - | let | |
493 | - | let | |
481 | + | @Verifier(bd) | |
482 | + | func be () = { | |
483 | + | let bf = 1000 | |
484 | + | let bg = valueOrErrorMessage(getInteger(x, "proposal_quorum_ratio"), "proposalQuorumRatio is not defined") | |
485 | + | let bh = valueOrErrorMessage(getInteger(x, "proposal_passed_ratio"), "proposalThresholdRatio is not defined") | |
486 | + | let bi = valueOrErrorMessage(addressFromString(valueOrErrorMessage(getString(x, "dividends_contract"), "no dividends_contract")), "invalid dividends_contract") | |
487 | + | let bj = valueOrErrorMessage(addressFromString(valueOrErrorMessage(getString(x, "voting_contract"), "no voting_contract")), "invalid voting_contract") | |
488 | + | let bk = toBase58String(bd.id) | |
489 | + | let bl = valueOrElse(getInteger(bj, ("proposal_yes_" + bk)), 0) | |
490 | + | let bm = valueOrElse(getInteger(bj, ("proposal_no_" + bk)), 0) | |
491 | + | let bn = valueOrErrorMessage(getInteger(bj, ("proposal_height_" + bk)), "proposal not registered") | |
492 | + | let bo = valueOrElse(getInteger(bj, ("proposal_applystart_" + bk)), 0) | |
493 | + | let bp = valueOrElse(getInteger(bj, ("proposal_applyend_" + bk)), 0) | |
494 | + | let bq = valueOrElse(getInteger(bj, ("proposal_gvires_" + bk)), 0) | |
495 | + | let br = valueOrElse(getBoolean(x, "op_governance_apply_tx_paused"), false) | |
496 | + | let bs = bl | |
497 | + | let bt = bm | |
498 | + | let bu = (bs + bt) | |
499 | + | let bv = (((bu * bf) / bq) >= bg) | |
500 | + | let bw = (((bs * bf) / bu) >= bh) | |
501 | + | let bx = (bo >= A) | |
502 | + | let by = (A >= bp) | |
503 | + | let bz = ((((((("proposalHeight = " + toString(bn)) + ", applyStart = ") + toString(bo)) + ", applyEnd = ") + toString(bp)) + ", HEIGHT = ") + toString(A)) | |
504 | + | let bA = if (!(br)) | |
494 | 505 | then throw("tx application throw governance not enabled") | |
495 | - | else if ( | |
496 | - | then throw(("proposal can't be executed as it's too early: " + | |
497 | - | else if ( | |
498 | - | then throw(("proposal can't be executed as it's too late:" + | |
499 | - | else if (!( | |
500 | - | then throw((((((("no quorum: " + "totalVotes: ") + toString( | |
501 | - | else if (!( | |
502 | - | then throw((((((("no threshold achieved: " + "voteYes: ") + toString( | |
506 | + | else if (bx) | |
507 | + | then throw(("proposal can't be executed as it's too early: " + bz)) | |
508 | + | else if (by) | |
509 | + | then throw(("proposal can't be executed as it's too late:" + bz)) | |
510 | + | else if (!(bv)) | |
511 | + | then throw((((((("no quorum: " + "totalVotes: ") + toString(bu)) + ", totalGVires: ") + toString(bq)) + ", quorumRatio: ") + toString(bg))) | |
512 | + | else if (!(bw)) | |
513 | + | then throw((((((("no threshold achieved: " + "voteYes: ") + toString(bs)) + ", voteNo: ") + toString(bt)) + ", passedRatio: ") + toString(bh))) | |
503 | 514 | else true | |
504 | - | if (sigVerify( | |
515 | + | if (sigVerify(bd.bodyBytes, bd.proofs[0], bd.senderPublicKey)) | |
505 | 516 | then true | |
506 | - | else | |
517 | + | else bA | |
507 | 518 | } | |
508 | 519 |
github/deemru/w8io/3ef1775 194.51 ms ◑