tx · CQRfUyJ1zCG269HVYUjNifJdfuGDFa38VpQdYg9JppP3

3PCbvPVQfSvVu88ip8Fm5YjwJhjEYk1Txhk:  -0.01700000 Waves

2023.06.15 11:56 [3689129] smart account 3PCbvPVQfSvVu88ip8Fm5YjwJhjEYk1Txhk > SELF 0.00000000 Waves

{ "type": 13, "id": "CQRfUyJ1zCG269HVYUjNifJdfuGDFa38VpQdYg9JppP3", "fee": 1700000, "feeAssetId": null, "timestamp": 1686819237343, "version": 1, "sender": "3PCbvPVQfSvVu88ip8Fm5YjwJhjEYk1Txhk", "senderPublicKey": "FwXAX9xcWiwbCejtdF8q1Nz8NpJqaVxXKnKK6JoR24pZ", "proofs": [ "zW7qmPxPE5MQGCKgA5cafi4py1bMxpbZGy23aJ8hAHQ8gr9c7Leh7EcV2zP5zyd36yWsqYN6142tmooErgV27hR" ], "script": "base64:BgIyCAISCwoJCAgICAgICAEIEgASBAoCBAQSBAoCBAQSBQoDAQEEEgQKAgQEEgQKAgEBEgAhAAtmYWN0b3JzQmFzZQDoBwEQd3JpdGVDb25zdFN0cmluZwIDa2V5BXZhbHVlAwkBASEBCQEJaXNEZWZpbmVkAQkAnQgCBQR0aGlzBQNrZXkJAQtTdHJpbmdFbnRyeQIFA2tleQUFdmFsdWUJAAIBCQCsAgICFWFscmVhZHkgaW5pdGlhbGl6ZWQ6IAUDa2V5AQ13cml0ZUNvbnN0SW50AgNrZXkFdmFsdWUDCQEBIQEJAQlpc0RlZmluZWQBCQCaCAIFBHRoaXMFA2tleQkBDEludGVnZXJFbnRyeQIFA2tleQUFdmFsdWUJAAIBCQCsAgICFWFscmVhZHkgaW5pdGlhbGl6ZWQ6IAUDa2V5AQh3cml0ZUludAIDa2V5BXZhbHVlAwkAZgIAAAUFdmFsdWUJAAIBCQCsAgIJAKwCAgkArAICAhd3cml0aW5nIG5lZ2F0aXZlIHZhbHVlIAkApAMBBQV2YWx1ZQIJIGZvciBrZXkgBQNrZXkJAQxJbnRlZ2VyRW50cnkCBQNrZXkFBXZhbHVlAQhhc1N0cmluZwEFdmFsdWUEByRtYXRjaDAFBXZhbHVlAwkAAQIFByRtYXRjaDACBlN0cmluZwQBcwUHJG1hdGNoMAUBcwkAAgECHHdyb25nIHR5cGUsIGV4cGVjdGVkOiBTdHJpbmcBBWFzSW50AQV2YWx1ZQQHJG1hdGNoMAUFdmFsdWUDCQABAgUHJG1hdGNoMAIDSW50BANpbnQFByRtYXRjaDAFA2ludAkAAgECBHNtOjEBBmFzSW50MgEFdmFsdWUEByRtYXRjaDAFBXZhbHVlAwkAAQIFByRtYXRjaDACCihJbnQsIEludCkEAXgFByRtYXRjaDAFAXgEAXQFByRtYXRjaDAJAAIBAhp3cm9uZyB0eXBlLCBleHBlY3RlZDogSW50MgERYXNVc2VyQmFsYW5jZURhdGEBBXZhbHVlBAckbWF0Y2gwBQV2YWx1ZQMJAAECBQckbWF0Y2gwAiIoSW50LCBJbnQsIEludCwgSW50LCBJbnQsIEJvb2xlYW4pBAF4BQckbWF0Y2gwBQF4BAF0BQckbWF0Y2gwCQACAQIBMwELdXNlckJhbGFuY2UCA3JzcgR1c2VyCQERYXNVc2VyQmFsYW5jZURhdGEBCQD8BwQFA3JzcgILdXNlckJhbGFuY2UJAMwIAgUEdXNlcgUDbmlsBQNuaWwBB3Rocm93SWYCCWNvbmRpdGlvbgVlcnJvcgMFCWNvbmRpdGlvbgkAAgEFBWVycm9yBgEIY2hhbmdlQnkCA2tleQV2YWx1ZQkBCHdyaXRlSW50AgUDa2V5CQBkAgkBC3ZhbHVlT3JFbHNlAgkAmggCBQR0aGlzBQNrZXkAAAUFdmFsdWUAC2NvbmZpZ1N0b3JlAgZjb25maWcADWNvbmZpZ0FkZHJlc3MJARFAZXh0ck5hdGl2ZSgxMDYyKQEJARFAZXh0ck5hdGl2ZSgxMDUzKQIFBHRoaXMFC2NvbmZpZ1N0b3JlABV2aXJlc1Zlc3RlZFVzZG5McERhcHAJARFAZXh0ck5hdGl2ZSgxMDYyKQECIzNQSkZ1OE1tVmEyclNWR000OHdkTG00amhMem5FZ3U2WFNlABJtYXliZU9yYWNsZUFkZHJlc3MEByRtYXRjaDAJAJ0IAgUNY29uZmlnQWRkcmVzcwIOb3JhY2xlX2FkZHJlc3MDCQABAgUHJG1hdGNoMAIGU3RyaW5nBAFzBQckbWF0Y2gwCQCmCAEFAXMFBHVuaXQABkhFSUdIVAUGaGVpZ2h0AAJ2ZAkBEUBleHRyTmF0aXZlKDEwNjIpAQkBE3ZhbHVlT3JFcnJvck1lc3NhZ2UCCQCdCAIFDWNvbmZpZ0FkZHJlc3MCEXZpcmVzX2Rpc3RyaWJ1dG9yAhViYWQgdmlyZXMgZGlzdHJpYnV0b3IAEHByb3RlY3RlZFJlc2VydmUJARFAZXh0ck5hdGl2ZSgxMDYyKQEJARFAZXh0ck5hdGl2ZSgxMDUzKQIFDWNvbmZpZ0FkZHJlc3MCEXByb3RlY3RlZF9yZXNlcnZlAAVtYWluMQkBEUBleHRyTmF0aXZlKDEwNjIpAQkBEUBleHRyTmF0aXZlKDEwNTMpAgUEdGhpcwIFbWFpbjEAC3VzZHRSZXNlcnZlCQERQGV4dHJOYXRpdmUoMTA2MikBCQERQGV4dHJOYXRpdmUoMTA1MykCBQR0aGlzAgt1c2R0UmVzZXJ2ZQALdXNkY1Jlc2VydmUJARFAZXh0ck5hdGl2ZSgxMDYyKQEJARFAZXh0ck5hdGl2ZSgxMDUzKQIFBHRoaXMCC3VzZGNSZXNlcnZlAANhY2MJARFAZXh0ck5hdGl2ZSgxMDUzKQIFBHRoaXMCA2FjYwAOdXNkblZlc3RpbmdBbGwJARFAZXh0ck5hdGl2ZSgxMDYyKQEJARFAZXh0ck5hdGl2ZSgxMDUzKQIFBHRoaXMCDnVzZG5WZXN0aW5nQWxsAAt1c2RuVmVzdGluZwkBEUBleHRyTmF0aXZlKDEwNjIpAQkBEUBleHRyTmF0aXZlKDEwNTMpAgUEdGhpcwILdXNkblZlc3RpbmcAC3VzZG5Bc3NldElkCQERQGV4dHJOYXRpdmUoMTA1MykCBQR0aGlzAgt1c2RuQXNzZXRJZAAJdXNkbkJvbnVzCQERQGV4dHJOYXRpdmUoMTA1MCkCBQR0aGlzAgVib251cwEKbW92ZVN0cmVhbQUDcnNyBmFjdGlvbgRmcm9tBnN0cmluZwNhbXQJAPwHBAUCdmQCBG1vdmUJAMwIAgUDcnNyCQDMCAIFBmFjdGlvbgkAzAgCBQRmcm9tCQDMCAIFBnN0cmluZwkAzAgCBQNhbXQFA25pbAUDbmlsAQlvcEFsbG93ZWQCAm9wCmFzc2V0SWRTdHIEByRtYXRjaDAJAPwHBAUNY29uZmlnQWRkcmVzcwIJb3BBbGxvd2VkCQDMCAIFCmFzc2V0SWRTdHIJAMwIAgUCb3AFA25pbAUDbmlsAwkAAQIFByRtYXRjaDACB0Jvb2xlYW4EAWIFByRtYXRjaDADBQFiBgkAAgECC25vdCBhbGxvd2VkCQACAQIhb3BBbGxvd2VkOiB1bmV4cGVjdGVkIHJlc3VsdCB0eXBlAQphZHZpc2VVc2VyAQNhY2MECWRhdGFXaGFsZQkBCGFzU3RyaW5nAQkA/AcEBQt1c2RuVmVzdGluZwIHYWR2aXNlVQkAzAgCBQNhY2MFA25pbAUDbmlsAwkAAAIFCWRhdGFXaGFsZQUJZGF0YVdoYWxlBAdkYXRhQWxsCQEIYXNTdHJpbmcBCQD8BwQFDnVzZG5WZXN0aW5nQWxsAgdhZHZpc2VVCQDMCAIFA2FjYwUDbmlsBQNuaWwDCQAAAgUHZGF0YUFsbAUHZGF0YUFsbAkArAICCQCsAgIFCWRhdGFXaGFsZQIDIHwgBQdkYXRhQWxsCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuAAtzdXJmQWRkcmVzcwkBEUBleHRyTmF0aXZlKDEwNjIpAQIjM1BHMnZNaEs1Q1Bxc0NEb2R2TEd6UTg0UWtvSFhDSjNvTlAAEHN1cmZTdGFrZUFkZHJlc3MJARFAZXh0ck5hdGl2ZSgxMDYyKQECIzNQQmlvdEZwcWpSTWtrZUZCY2NuUU5VWFVvcHk3S0ZlejVDAAtzdXJmQXNzZXRJZAkA2QQBAixBdDhENk5GRnBoZUNidktWbmpWb2VMTDg0RW84TlpuNm92TWFueGZMYUZXTAEHYnV5U3VyZgMGY2FsbGVyBXdoYWxlB3JlZ3VsYXIEB2FkZHJlc3MJAKUIAQUGY2FsbGVyBAdyZWdQYXJ0AwUHcmVndWxhcgkBBWFzSW50AQkA/AcEBQ51c2RuVmVzdGluZ0FsbAIWd2l0aGRyYXdBbGxWZXN0ZWRGb3JUbwkAzAgCBQdhZGRyZXNzCQDMCAIJAKUIAQUEdGhpcwUDbmlsBQNuaWwAAAMJAAACBQdyZWdQYXJ0BQdyZWdQYXJ0BAl3aGFsZVBhcnQDBQV3aGFsZQkAAgECD25vdCBpbXBsZW1lbnRlZAAAAwkAAAIFCXdoYWxlUGFydAUJd2hhbGVQYXJ0BAV0b3RhbAkAZAIFCXdoYWxlUGFydAUHcmVnUGFydAQDYnV5CQD8BwQFC3N1cmZBZGRyZXNzAgdidXlTdXJmCQDMCAIAwIQ9CQDMCAIAwIQ9CQDMCAIHBQNuaWwJAMwIAgkBD0F0dGFjaGVkUGF5bWVudAIJANkEAQULdXNkbkFzc2V0SWQFBXRvdGFsBQNuaWwDCQAAAgUDYnV5BQNidXkJAPAHAgUEdGhpcwULc3VyZkFzc2V0SWQJAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4JAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4JAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4IAWkBBGluaXQJBGNvbmYBdAFjCHZlc3RuQWxsB2FjY291bnQEbWFpbgl1c2RuQXNzZXQFYm9udXMFdmVzdG4DCQECIT0CCAUBaQZjYWxsZXIFBHRoaXMJAAIBAhJvbmx5IHNlbGYgY2FuIGluaXQJAMwIAgkBEHdyaXRlQ29uc3RTdHJpbmcCBQtjb25maWdTdG9yZQUEY29uZgkAzAgCCQEQd3JpdGVDb25zdFN0cmluZwICC3VzZHRSZXNlcnZlBQF0CQDMCAIJARB3cml0ZUNvbnN0U3RyaW5nAgILdXNkY1Jlc2VydmUFAWMJAMwIAgkBEHdyaXRlQ29uc3RTdHJpbmcCAg51c2RuVmVzdGluZ0FsbAUIdmVzdG5BbGwJAMwIAgkBEHdyaXRlQ29uc3RTdHJpbmcCAgt1c2RuVmVzdGluZwUFdmVzdG4JAMwIAgkBEHdyaXRlQ29uc3RTdHJpbmcCAgNhY2MFB2FjY291bnQJAMwIAgkBEHdyaXRlQ29uc3RTdHJpbmcCAgVtYWluMQUEbWFpbgkAzAgCCQEQd3JpdGVDb25zdFN0cmluZwICC3VzZG5Bc3NldElkBQl1c2RuQXNzZXQJAMwIAgkBDEludGVnZXJFbnRyeQICBWJvbnVzBQVib251cwUDbmlsAWkBDWNvbnZlcnRUb1VTRE4ABAdhZGRyZXNzCQClCAEIBQFpBmNhbGxlcgoBB21vdmVSc3IBA3JzcgQHcmVzZXJ2ZQkBEUBleHRyTmF0aXZlKDEwNjIpAQUDcnNyBAdhc3NldElkCQERQGV4dHJOYXRpdmUoMTA1MykCBQdyZXNlcnZlAgdhc3NldElkBAZjaGVja3MJAQlvcEFsbG93ZWQCAg5vcGVuQ29sbGF0ZXJhbAUHYXNzZXRJZAMJAAACBQZjaGVja3MFBmNoZWNrcwMDCQECIT0CBQNyc3IJAKUIAQULdXNkdFJlc2VydmUJAQIhPQIFA3JzcgkApQgBBQt1c2RjUmVzZXJ2ZQcJAAIBAg9pbnZhbGlkIHJlc2VydmUEA3NoQwkA/AcEBQJ2ZAIKc3luY0hlaWdodAkAzAgCBQNyc3IFA25pbAUDbmlsAwkAAAIFA3NoQwUDc2hDBAskdDA1MjI0NTMwOAkBBmFzSW50MgEJAPwHBAUHcmVzZXJ2ZQITc3RvcmVkRGVwb3NpdEJvcnJvdwUDbmlsBQNuaWwEDHRvdGFsRGVwb3NpdAgFCyR0MDUyMjQ1MzA4Al8xBAl0b3RhbERlYnQIBQskdDA1MjI0NTMwOAJfMgQEdXRpbAMJAGYCBQx0b3RhbERlcG9zaXQAAAkAlwMBCQDMCAIFC2ZhY3RvcnNCYXNlCQDMCAIJAGsDBQl0b3RhbERlYnQFC2ZhY3RvcnNCYXNlBQx0b3RhbERlcG9zaXQFA25pbAAABA11dGlsVGhyZXNob2xkCQELdmFsdWVPckVsc2UCCQCaCAIFDWNvbmZpZ0FkZHJlc3MJAKwCAgUHYXNzZXRJZAIZX29wZW5fY29sbGF0ZXJhbF90aHJlc29sZADoBwMJAGYCBQ11dGlsVGhyZXNob2xkBQR1dGlsCQACAQIdbm90IGFsbG93ZWQ6IHV0aWwgPCB0aHJlc2hvbGQEA2RlcAkBBWFzSW50AQkA/AcEBQdyZXNlcnZlAg51c2VyRGVwb3NpdFVTRAkAzAgCBQdhZGRyZXNzBQNuaWwFA25pbAMJAAACBQNkZXAFA2RlcAQCczMJAQVhc0ludAEJAPwHBAUHcmVzZXJ2ZQISdHJhbnNmZXJBVG9rZW5zRm9yCQDMCAIFB2FkZHJlc3MJAMwIAgUDYWNjCQDMCAIFA2RlcAUDbmlsBQNuaWwDCQAAAgUCczMFAnMzBARwUnczCQEKbW92ZVN0cmVhbQUFA3JzcgIHZGVwb3NpdAUHYWRkcmVzcwUDYWNjBQJzMwMJAAACBQRwUnczBQRwUnczBQJzMwkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgQCbXcJAPwHBAULdXNkblZlc3RpbmcCEnN0YXJ0VmVzdGluZ0FsbEZvcgkAzAgCCQClCAEIBQFpBmNhbGxlcgUDbmlsBQNuaWwDCQAAAgUCbXcFAm13BAJtdAkBBWFzSW50AQkBB21vdmVSc3IBCQClCAEFC3VzZHRSZXNlcnZlAwkAAAIFAm10BQJtdAQCbWMJAQVhc0ludAEJAQdtb3ZlUnNyAQkApQgBBQt1c2RjUmVzZXJ2ZQMJAAACBQJtYwUCbWMECGRlcFRvdGFsCQBkAgUCbXQFAm1jBAVyZWhhYgQHdXNkbkFtdAkAawMFCGRlcFRvdGFsCQBkAgULZmFjdG9yc0Jhc2UFCXVzZG5Cb251cwULZmFjdG9yc0Jhc2UEAndkCQD8BwQFEHByb3RlY3RlZFJlc2VydmUCD3dpdGhkcmF3VG9NYWluMgkAzAgCBQNhY2MJAMwIAgULdXNkbkFzc2V0SWQJAMwIAgUHdXNkbkFtdAUDbmlsBQNuaWwDCQAAAgUCd2QFAndkBAVyZWhhYgkA/AcEBQ51c2RuVmVzdGluZ0FsbAIKYWNjb3VudEZvcgkAzAgCBQdhZGRyZXNzBQNuaWwJAMwIAgkBD0F0dGFjaGVkUGF5bWVudAIJANkEAQULdXNkbkFzc2V0SWQFB3VzZG5BbXQFA25pbAMJAAACBQVyZWhhYgUFcmVoYWIFBHVuaXQJAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4JAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4DCQAAAgUFcmVoYWIFBXJlaGFiBAskdDA2NDYyNjUyNAkBBmFzSW50MgEJAPwHBAUFbWFpbjECCGhlYWx0aE9mCQDMCAIFB2FkZHJlc3MFA25pbAUDbmlsBAJicAgFCyR0MDY0NjI2NTI0Al8xBANicHUIBQskdDA2NDYyNjUyNAJfMgMJAGYCBQJicAkAaAIAZAkAZQIFAmJwBQNicHUJAAIBAipub3QgZW5vdWdoIGFkZHJlc3MgaGVhbHRoIGFmdGVyIG1vdmU6IDwgMSUJAMwIAgkBCGNoYW5nZUJ5AgkArAICCQCsAgIFB2FkZHJlc3MCCl9taWdyYXRlZF8JARFAZXh0ck5hdGl2ZSgxMDUzKQIFC3VzZHRSZXNlcnZlAgdhc3NldElkBQJtdAkAzAgCCQEIY2hhbmdlQnkCCQCsAgIJAKwCAgUHYWRkcmVzcwIKX21pZ3JhdGVkXwkBEUBleHRyTmF0aXZlKDEwNTMpAgULdXNkY1Jlc2VydmUCB2Fzc2V0SWQFAm1jBQNuaWwJAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4JAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4JAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4JAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4BaQEVd2l0aGRyYXdWZXN0ZWRBbGxVU0ROAgV3aGFsZQdyZWd1bGFyBAdhZGRyZXNzCQClCAEIBQFpBmNhbGxlcgQHcmVnUGFydAMFB3JlZ3VsYXIJAQVhc0ludAEJAPwHBAUOdXNkblZlc3RpbmdBbGwCE3dpdGhkcmF3VmVzdGVkRm9yVG8JAMwIAgUHYWRkcmVzcwkAzAgCBQdhZGRyZXNzBQNuaWwFA25pbAAAAwkAAAIFB3JlZ1BhcnQFB3JlZ1BhcnQECXdoYWxlUGFydAMFBXdoYWxlCQEFYXNJbnQBCQD8BwQFC3VzZG5WZXN0aW5nAhN3aXRoZHJhd1Zlc3RlZEZvclRvCQDMCAIFB2FkZHJlc3MJAMwIAgUHYWRkcmVzcwUDbmlsBQNuaWwAAAMJAAACBQl3aGFsZVBhcnQFCXdoYWxlUGFydAkAlAoCBQNuaWwJAGQCBQl3aGFsZVBhcnQFB3JlZ1BhcnQJAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4JAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4BaQEVd2l0aGRyYXdWZXN0ZWRBbGxTVVJGAgV3aGFsZQdyZWd1bGFyBAZjaGVja3MJAQlvcEFsbG93ZWQCAiFsaXF1aWRhb19hbGxfd2l0aGRyYXdWZXN0ZWRBc1N1cmYJANgEAQULc3VyZkFzc2V0SWQDCQAAAgUGY2hlY2tzBQZjaGVja3MEC3N1cmZCYWxhbmNlCQEHYnV5U3VyZgMIBQFpBmNhbGxlcgUFd2hhbGUFB3JlZ3VsYXIDCQAAAgULc3VyZkJhbGFuY2UFC3N1cmZCYWxhbmNlCQCUCgIJAMwIAgkBDlNjcmlwdFRyYW5zZmVyAwgFAWkGY2FsbGVyBQtzdXJmQmFsYW5jZQULc3VyZkFzc2V0SWQFA25pbAULc3VyZkJhbGFuY2UJAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4JAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4BaQETd2l0aGRyYXdWZXN0ZWRTVVJGMgMFd2hhbGUHcmVndWxhcgVzdGFrZQQHYWRkcmVzcwkApQgBCAUBaQZjYWxsZXIEBmNoZWNrcwkBCW9wQWxsb3dlZAICIWxpcXVpZGFvX2FsbF93aXRoZHJhd1Zlc3RlZEFzU3VyZgkA2AQBBQtzdXJmQXNzZXRJZAMJAAACBQZjaGVja3MFBmNoZWNrcwQHcmVnUGFydAMJAGYCBQdyZWd1bGFyAAAJAQVhc0ludAEJAPwHBAUOdXNkblZlc3RpbmdBbGwCGnBhcnRpYWxXaXRoZHJhd1Zlc3RlZEZvclRvCQDMCAIFB2FkZHJlc3MJAMwIAgkApQgBBQR0aGlzCQDMCAIFB3JlZ3VsYXIFA25pbAUDbmlsAAADCQAAAgUHcmVnUGFydAUHcmVnUGFydAQJd2hhbGVQYXJ0AwkAZgIFBXdoYWxlAAAJAQVhc0ludAEJAPwHBAULdXNkblZlc3RpbmcCGnBhcnRpYWxXaXRoZHJhd1Zlc3RlZEZvclRvCQDMCAIFB2FkZHJlc3MJAMwIAgkApQgBBQR0aGlzCQDMCAIFBXdoYWxlBQNuaWwFA25pbAAAAwkAAAIFCXdoYWxlUGFydAUJd2hhbGVQYXJ0BAV0b3RhbAkAZAIFCXdoYWxlUGFydAUHcmVnUGFydAQDYnV5CQD8BwQFC3N1cmZBZGRyZXNzAgdidXlTdXJmCQDMCAIAwIQ9CQDMCAIAwIQ9CQDMCAIHBQNuaWwJAMwIAgkBD0F0dGFjaGVkUGF5bWVudAIJANkEAQULdXNkbkFzc2V0SWQFBXRvdGFsBQNuaWwDCQAAAgUDYnV5BQNidXkEC3N1cmZCYWxhbmNlCQDwBwIFBHRoaXMFC3N1cmZBc3NldElkAwkAAAIFC3N1cmZCYWxhbmNlBQtzdXJmQmFsYW5jZQMFBXN0YWtlBAlzdGFrZVN1cmYJAPwHBAUQc3VyZlN0YWtlQWRkcmVzcwITc3Rha2VCeU9yaWdpbkNhbGxlcgUDbmlsCQDMCAIJAQ9BdHRhY2hlZFBheW1lbnQCBQtzdXJmQXNzZXRJZAULc3VyZkJhbGFuY2UFA25pbAMJAAACBQlzdGFrZVN1cmYFCXN0YWtlU3VyZgkAlAoCBQNuaWwFC3N1cmZCYWxhbmNlCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuCQCUCgIJAMwIAgkBDlNjcmlwdFRyYW5zZmVyAwgFAWkGY2FsbGVyBQtzdXJmQmFsYW5jZQULc3VyZkFzc2V0SWQFA25pbAULc3VyZkJhbGFuY2UJAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4JAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4JAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4JAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4JAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4BaQEdd2l0aGRyYXdWZXN0ZWRBbGxTVVJGQW5kU3Rha2UCBXdoYWxlB3JlZ3VsYXIEBmNoZWNrcwkBCW9wQWxsb3dlZAICIWxpcXVpZGFvX2FsbF93aXRoZHJhd1Zlc3RlZEFzU3VyZgkA2AQBBQtzdXJmQXNzZXRJZAMJAAACBQZjaGVja3MFBmNoZWNrcwQLc3VyZkJhbGFuY2UJAQdidXlTdXJmAwgFAWkGY2FsbGVyBQV3aGFsZQUHcmVndWxhcgMJAAACBQtzdXJmQmFsYW5jZQULc3VyZkJhbGFuY2UECXN0YWtlU3VyZgkA/AcEBRBzdXJmU3Rha2VBZGRyZXNzAhNzdGFrZUJ5T3JpZ2luQ2FsbGVyBQNuaWwJAMwIAgkBD0F0dGFjaGVkUGF5bWVudAIFC3N1cmZBc3NldElkBQtzdXJmQmFsYW5jZQUDbmlsAwkAAAIFCXN0YWtlU3VyZgUJc3Rha2VTdXJmCQCUCgIFA25pbAULc3VyZkJhbGFuY2UJAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4JAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4JAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4BaQEMd2l0aGRyYXdBc0xQAgV3aGFsZQdyZWd1bGFyBAdhZGRyZXNzCQClCAEIBQFpBmNhbGxlcgQHcmVnUGFydAMJAGYCBQdyZWd1bGFyAAAJAQVhc0ludAEJAPwHBAUOdXNkblZlc3RpbmdBbGwCGnBhcnRpYWxXaXRoZHJhd1Zlc3RlZEZvclRvCQDMCAIFB2FkZHJlc3MJAMwIAgkApQgBBQR0aGlzCQDMCAIFB3JlZ3VsYXIFA25pbAUDbmlsAAADCQAAAgUHcmVnUGFydAUHcmVnUGFydAQJd2hhbGVQYXJ0AwkAZgIFBXdoYWxlAAAJAQVhc0ludAEJAPwHBAULdXNkblZlc3RpbmcCGnBhcnRpYWxXaXRoZHJhd1Zlc3RlZEZvclRvCQDMCAIFB2FkZHJlc3MJAMwIAgkApQgBBQR0aGlzCQDMCAIFBXdoYWxlBQNuaWwFA25pbAAAAwkAAAIFCXdoYWxlUGFydAUJd2hhbGVQYXJ0BAV0b3RhbAkAZAIFCXdoYWxlUGFydAUHcmVnUGFydAQEdG9McAkA/AcEBRV2aXJlc1Zlc3RlZFVzZG5McERhcHACBm1pbnRUbwkAzAgCBQdhZGRyZXNzBQNuaWwJAMwIAgkBD0F0dGFjaGVkUGF5bWVudAIJANkEAQULdXNkbkFzc2V0SWQFBXRvdGFsBQNuaWwDCQAAAgUEdG9McAUEdG9McAkAlAoCBQNuaWwFBXRvdGFsCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuAWkBCGltcG9ydExQAAQHYWRkcmVzcwkApQgBCAUBaQZjYWxsZXIEB3VzZG5BbXQJAQVhc0ludAEJAPwHBAUVdmlyZXNWZXN0ZWRVc2RuTHBEYXBwAgZpbXBvcnQFA25pbAgFAWkIcGF5bWVudHMDCQAAAgUHdXNkbkFtdAUHdXNkbkFtdAQKYWNjb3VudEZvcgkA/AcEBQ51c2RuVmVzdGluZ0FsbAIKYWNjb3VudEZvcgkAzAgCBQdhZGRyZXNzBQNuaWwJAMwIAgkBD0F0dGFjaGVkUGF5bWVudAIJANkEAQULdXNkbkFzc2V0SWQFB3VzZG5BbXQFA25pbAMJAAACBQphY2NvdW50Rm9yBQphY2NvdW50Rm9yCQCUCgIFA25pbAUHdXNkbkFtdAkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgECdHgBBnZlcmlmeQAEBEJBU0UA6AcEC3F1b3J1bVJhdGlvCQETdmFsdWVPckVycm9yTWVzc2FnZQIJAJoIAgUNY29uZmlnQWRkcmVzcwIVcHJvcG9zYWxfcXVvcnVtX3JhdGlvAiJwcm9wb3NhbFF1b3J1bVJhdGlvIGlzIG5vdCBkZWZpbmVkBAtwYXNzZWRSYXRpbwkBE3ZhbHVlT3JFcnJvck1lc3NhZ2UCCQCaCAIFDWNvbmZpZ0FkZHJlc3MCFXByb3Bvc2FsX3Bhc3NlZF9yYXRpbwIlcHJvcG9zYWxUaHJlc2hvbGRSYXRpbyBpcyBub3QgZGVmaW5lZAQOZ1ZpcmVzQ29udHJhY3QJARN2YWx1ZU9yRXJyb3JNZXNzYWdlAgkApggBCQETdmFsdWVPckVycm9yTWVzc2FnZQIJAJ0IAgUNY29uZmlnQWRkcmVzcwISZGl2aWRlbmRzX2NvbnRyYWN0AhVubyBkaXZpZGVuZHNfY29udHJhY3QCGmludmFsaWQgZGl2aWRlbmRzX2NvbnRyYWN0BA52b3RpbmdDb250cmFjdAkBE3ZhbHVlT3JFcnJvck1lc3NhZ2UCCQCmCAEJARN2YWx1ZU9yRXJyb3JNZXNzYWdlAgkAnQgCBQ1jb25maWdBZGRyZXNzAg92b3RpbmdfY29udHJhY3QCEm5vIHZvdGluZ19jb250cmFjdAIXaW52YWxpZCB2b3RpbmdfY29udHJhY3QEAmlkCQDYBAEIBQJ0eAJpZAQIdm90ZXNZZXMJAQt2YWx1ZU9yRWxzZQIJAJoIAgUOdm90aW5nQ29udHJhY3QJAKwCAgINcHJvcG9zYWxfeWVzXwUCaWQAAAQHdm90ZXNObwkBC3ZhbHVlT3JFbHNlAgkAmggCBQ52b3RpbmdDb250cmFjdAkArAICAgxwcm9wb3NhbF9ub18FAmlkAAAEDnByb3Bvc2FsSGVpZ2h0CQETdmFsdWVPckVycm9yTWVzc2FnZQIJAJoIAgUOdm90aW5nQ29udHJhY3QJAKwCAgIQcHJvcG9zYWxfaGVpZ2h0XwUCaWQCF3Byb3Bvc2FsIG5vdCByZWdpc3RlcmVkBAphcHBseVN0YXJ0CQELdmFsdWVPckVsc2UCCQCaCAIFDnZvdGluZ0NvbnRyYWN0CQCsAgICFHByb3Bvc2FsX2FwcGx5c3RhcnRfBQJpZAAABAhhcHBseUVuZAkBC3ZhbHVlT3JFbHNlAgkAmggCBQ52b3RpbmdDb250cmFjdAkArAICAhJwcm9wb3NhbF9hcHBseWVuZF8FAmlkAAAEC3RvdGFsR1ZpcmVzCQELdmFsdWVPckVsc2UCCQCaCAIFDnZvdGluZ0NvbnRyYWN0CQCsAgICEHByb3Bvc2FsX2d2aXJlc18FAmlkAAAEB2VuYWJsZWQJAQt2YWx1ZU9yRWxzZQIJAJsIAgUNY29uZmlnQWRkcmVzcwIdb3BfZ292ZXJuYW5jZV9hcHBseV90eF9wYXVzZWQHBAd2b3RlWWVzBQh2b3Rlc1llcwQGdm90ZU5vBQd2b3Rlc05vBAp0b3RhbFZvdGVzCQBkAgUHdm90ZVllcwUGdm90ZU5vBAloYXNRdW9ydW0JAGcCCQBpAgkAaAIFCnRvdGFsVm90ZXMFBEJBU0UFC3RvdGFsR1ZpcmVzBQtxdW9ydW1SYXRpbwQJaGFzUGFzc2VkCQBnAgkAaQIJAGgCBQd2b3RlWWVzBQRCQVNFBQp0b3RhbFZvdGVzBQtwYXNzZWRSYXRpbwQIdG9vRWFybHkJAGcCBQphcHBseVN0YXJ0BQZIRUlHSFQEB3Rvb0xhdGUJAGcCBQZIRUlHSFQFCGFwcGx5RW5kBAl0aW1lRGVidWcJAKwCAgkArAICCQCsAgIJAKwCAgkArAICCQCsAgIJAKwCAgIRcHJvcG9zYWxIZWlnaHQgPSAJAKQDAQUOcHJvcG9zYWxIZWlnaHQCDywgYXBwbHlTdGFydCA9IAkApAMBBQphcHBseVN0YXJ0Ag0sIGFwcGx5RW5kID0gCQCkAwEFCGFwcGx5RW5kAgssIEhFSUdIVCA9IAkApAMBBQZIRUlHSFQECGJ5Vm90aW5nAwkBASEBBQdlbmFibGVkCQACAQIrdHggYXBwbGljYXRpb24gdGhyb3cgZ292ZXJuYW5jZSBub3QgZW5hYmxlZAMFCHRvb0Vhcmx5CQACAQkArAICAi5wcm9wb3NhbCBjYW4ndCBiZSBleGVjdXRlZCBhcyBpdCdzIHRvbyBlYXJseTogBQl0aW1lRGVidWcDBQd0b29MYXRlCQACAQkArAICAixwcm9wb3NhbCBjYW4ndCBiZSBleGVjdXRlZCBhcyBpdCdzIHRvbyBsYXRlOgUJdGltZURlYnVnAwkBASEBBQloYXNRdW9ydW0JAAIBCQCsAgIJAKwCAgkArAICCQCsAgIJAKwCAgkArAICAgtubyBxdW9ydW06IAIMdG90YWxWb3RlczogCQCkAwEFCnRvdGFsVm90ZXMCDywgdG90YWxHVmlyZXM6IAkApAMBBQt0b3RhbEdWaXJlcwIPLCBxdW9ydW1SYXRpbzogCQCkAwEFC3F1b3J1bVJhdGlvAwkBASEBBQloYXNQYXNzZWQJAAIBCQCsAgIJAKwCAgkArAICCQCsAgIJAKwCAgkArAICAhdubyB0aHJlc2hvbGQgYWNoaWV2ZWQ6IAIJdm90ZVllczogCQCkAwEFB3ZvdGVZZXMCCiwgdm90ZU5vOiAJAKQDAQUGdm90ZU5vAg8sIHBhc3NlZFJhdGlvOiAJAKQDAQULcGFzc2VkUmF0aW8GAwkA9AMDCAUCdHgJYm9keUJ5dGVzCQCRAwIIBQJ0eAZwcm9vZnMAAAgFAnR4D3NlbmRlclB1YmxpY0tleQYFCGJ5Vm90aW5nMfvu0w==", "chainId": 87, "height": 3689129, "applicationStatus": "succeeded", "spentComplexity": 0 } View: original | compacted Prev: E4xDePwJhqJDy13yBdGnHQ5BTZmoSskXzggucJ71TjiX Next: 5tejBeNLtMdVwPANMPswVFBgYMVsTrrg7c1T8jN5wB3v Diff:
OldNewDifferences
235235 let bpu = $t064626524._2
236236 if ((bp > (100 * (bp - bpu))))
237237 then throw("not enough address health after move: < 1%")
238- else {
239- let $t066226688 = asInt2(invoke(main1, "healthOf", [acc], nil))
240- let bp_acc = $t066226688._1
241- let bpu_acc = $t066226688._2
242- if ((bpu_acc > bp_acc))
243- then throw("not enough acc health after move: < 1%")
244- else [changeBy(((address + "_migrated_") + getStringValue(usdtReserve, "assetId")), mt), changeBy(((address + "_migrated_") + getStringValue(usdcReserve, "assetId")), mc)]
245- }
238+ else [changeBy(((address + "_migrated_") + getStringValue(usdtReserve, "assetId")), mt), changeBy(((address + "_migrated_") + getStringValue(usdcReserve, "assetId")), mc)]
246239 }
247240 else throw("Strict value is not equal to itself.")
248241 }
Full:
OldNewDifferences
11 {-# STDLIB_VERSION 6 #-}
22 {-# SCRIPT_TYPE ACCOUNT #-}
33 {-# CONTENT_TYPE DAPP #-}
44 let factorsBase = 1000
55
66 func writeConstString (key,value) = if (!(isDefined(getString(this, key))))
77 then StringEntry(key, value)
88 else throw(("already initialized: " + key))
99
1010
1111 func writeConstInt (key,value) = if (!(isDefined(getInteger(this, key))))
1212 then IntegerEntry(key, value)
1313 else throw(("already initialized: " + key))
1414
1515
1616 func writeInt (key,value) = if ((0 > value))
1717 then throw(((("writing negative value " + toString(value)) + " for key ") + key))
1818 else IntegerEntry(key, value)
1919
2020
2121 func asString (value) = match value {
2222 case s: String =>
2323 s
2424 case _ =>
2525 throw("wrong type, expected: String")
2626 }
2727
2828
2929 func asInt (value) = match value {
3030 case int: Int =>
3131 int
3232 case _ =>
3333 throw("sm:1")
3434 }
3535
3636
3737 func asInt2 (value) = match value {
3838 case x: (Int, Int) =>
3939 x
4040 case t =>
4141 throw("wrong type, expected: Int2")
4242 }
4343
4444
4545 func asUserBalanceData (value) = match value {
4646 case x: (Int, Int, Int, Int, Int, Boolean) =>
4747 x
4848 case t =>
4949 throw("3")
5050 }
5151
5252
5353 func userBalance (rsr,user) = asUserBalanceData(invoke(rsr, "userBalance", [user], nil))
5454
5555
5656 func throwIf (condition,error) = if (condition)
5757 then throw(error)
5858 else true
5959
6060
6161 func changeBy (key,value) = writeInt(key, (valueOrElse(getInteger(this, key), 0) + value))
6262
6363
6464 let configStore = "config"
6565
6666 let configAddress = addressFromStringValue(getStringValue(this, configStore))
6767
6868 let viresVestedUsdnLpDapp = addressFromStringValue("3PJFu8MmVa2rSVGM48wdLm4jhLznEgu6XSe")
6969
7070 let maybeOracleAddress = match getString(configAddress, "oracle_address") {
7171 case s: String =>
7272 addressFromString(s)
7373 case _ =>
7474 unit
7575 }
7676
7777 let HEIGHT = height
7878
7979 let vd = addressFromStringValue(valueOrErrorMessage(getString(configAddress, "vires_distributor"), "bad vires distributor"))
8080
8181 let protectedReserve = addressFromStringValue(getStringValue(configAddress, "protected_reserve"))
8282
8383 let main1 = addressFromStringValue(getStringValue(this, "main1"))
8484
8585 let usdtReserve = addressFromStringValue(getStringValue(this, "usdtReserve"))
8686
8787 let usdcReserve = addressFromStringValue(getStringValue(this, "usdcReserve"))
8888
8989 let acc = getStringValue(this, "acc")
9090
9191 let usdnVestingAll = addressFromStringValue(getStringValue(this, "usdnVestingAll"))
9292
9393 let usdnVesting = addressFromStringValue(getStringValue(this, "usdnVesting"))
9494
9595 let usdnAssetId = getStringValue(this, "usdnAssetId")
9696
9797 let usdnBonus = getIntegerValue(this, "bonus")
9898
9999 func moveStream (rsr,action,from,string,amt) = invoke(vd, "move", [rsr, action, from, string, amt], nil)
100100
101101
102102 func opAllowed (op,assetIdStr) = match invoke(configAddress, "opAllowed", [assetIdStr, op], nil) {
103103 case b: Boolean =>
104104 if (b)
105105 then true
106106 else throw("not allowed")
107107 case _ =>
108108 throw("opAllowed: unexpected result type")
109109 }
110110
111111
112112 func adviseUser (acc) = {
113113 let dataWhale = asString(invoke(usdnVesting, "adviseU", [acc], nil))
114114 if ((dataWhale == dataWhale))
115115 then {
116116 let dataAll = asString(invoke(usdnVestingAll, "adviseU", [acc], nil))
117117 if ((dataAll == dataAll))
118118 then ((dataWhale + " | ") + dataAll)
119119 else throw("Strict value is not equal to itself.")
120120 }
121121 else throw("Strict value is not equal to itself.")
122122 }
123123
124124
125125 let surfAddress = addressFromStringValue("3PG2vMhK5CPqsCDodvLGzQ84QkoHXCJ3oNP")
126126
127127 let surfStakeAddress = addressFromStringValue("3PBiotFpqjRMkkeFBccnQNUXUopy7KFez5C")
128128
129129 let surfAssetId = fromBase58String("At8D6NFFpheCbvKVnjVoeLL84Eo8NZn6ovManxfLaFWL")
130130
131131 func buySurf (caller,whale,regular) = {
132132 let address = toString(caller)
133133 let regPart = if (regular)
134134 then asInt(invoke(usdnVestingAll, "withdrawAllVestedForTo", [address, toString(this)], nil))
135135 else 0
136136 if ((regPart == regPart))
137137 then {
138138 let whalePart = if (whale)
139139 then throw("not implemented")
140140 else 0
141141 if ((whalePart == whalePart))
142142 then {
143143 let total = (whalePart + regPart)
144144 let buy = invoke(surfAddress, "buySurf", [1000000, 1000000, false], [AttachedPayment(fromBase58String(usdnAssetId), total)])
145145 if ((buy == buy))
146146 then assetBalance(this, surfAssetId)
147147 else throw("Strict value is not equal to itself.")
148148 }
149149 else throw("Strict value is not equal to itself.")
150150 }
151151 else throw("Strict value is not equal to itself.")
152152 }
153153
154154
155155 @Callable(i)
156156 func init (conf,t,c,vestnAll,account,main,usdnAsset,bonus,vestn) = if ((i.caller != this))
157157 then throw("only self can init")
158158 else [writeConstString(configStore, conf), writeConstString("usdtReserve", t), writeConstString("usdcReserve", c), writeConstString("usdnVestingAll", vestnAll), writeConstString("usdnVesting", vestn), writeConstString("acc", account), writeConstString("main1", main), writeConstString("usdnAssetId", usdnAsset), IntegerEntry("bonus", bonus)]
159159
160160
161161
162162 @Callable(i)
163163 func convertToUSDN () = {
164164 let address = toString(i.caller)
165165 func moveRsr (rsr) = {
166166 let reserve = addressFromStringValue(rsr)
167167 let assetId = getStringValue(reserve, "assetId")
168168 let checks = opAllowed("openCollateral", assetId)
169169 if ((checks == checks))
170170 then if (if ((rsr != toString(usdtReserve)))
171171 then (rsr != toString(usdcReserve))
172172 else false)
173173 then throw("invalid reserve")
174174 else {
175175 let shC = invoke(vd, "syncHeight", [rsr], nil)
176176 if ((shC == shC))
177177 then {
178178 let $t052245308 = asInt2(invoke(reserve, "storedDepositBorrow", nil, nil))
179179 let totalDeposit = $t052245308._1
180180 let totalDebt = $t052245308._2
181181 let util = if ((totalDeposit > 0))
182182 then min([factorsBase, fraction(totalDebt, factorsBase, totalDeposit)])
183183 else 0
184184 let utilThreshold = valueOrElse(getInteger(configAddress, (assetId + "_open_collateral_thresold")), 1000)
185185 if ((utilThreshold > util))
186186 then throw("not allowed: util < threshold")
187187 else {
188188 let dep = asInt(invoke(reserve, "userDepositUSD", [address], nil))
189189 if ((dep == dep))
190190 then {
191191 let s3 = asInt(invoke(reserve, "transferATokensFor", [address, acc, dep], nil))
192192 if ((s3 == s3))
193193 then {
194194 let pRw3 = moveStream(rsr, "deposit", address, acc, s3)
195195 if ((pRw3 == pRw3))
196196 then s3
197197 else throw("Strict value is not equal to itself.")
198198 }
199199 else throw("Strict value is not equal to itself.")
200200 }
201201 else throw("Strict value is not equal to itself.")
202202 }
203203 }
204204 else throw("Strict value is not equal to itself.")
205205 }
206206 else throw("Strict value is not equal to itself.")
207207 }
208208
209209 let mw = invoke(usdnVesting, "startVestingAllFor", [toString(i.caller)], nil)
210210 if ((mw == mw))
211211 then {
212212 let mt = asInt(moveRsr(toString(usdtReserve)))
213213 if ((mt == mt))
214214 then {
215215 let mc = asInt(moveRsr(toString(usdcReserve)))
216216 if ((mc == mc))
217217 then {
218218 let depTotal = (mt + mc)
219219 let rehab = {
220220 let usdnAmt = fraction(depTotal, (factorsBase + usdnBonus), factorsBase)
221221 let wd = invoke(protectedReserve, "withdrawToMain2", [acc, usdnAssetId, usdnAmt], nil)
222222 if ((wd == wd))
223223 then {
224224 let rehab = invoke(usdnVestingAll, "accountFor", [address], [AttachedPayment(fromBase58String(usdnAssetId), usdnAmt)])
225225 if ((rehab == rehab))
226226 then unit
227227 else throw("Strict value is not equal to itself.")
228228 }
229229 else throw("Strict value is not equal to itself.")
230230 }
231231 if ((rehab == rehab))
232232 then {
233233 let $t064626524 = asInt2(invoke(main1, "healthOf", [address], nil))
234234 let bp = $t064626524._1
235235 let bpu = $t064626524._2
236236 if ((bp > (100 * (bp - bpu))))
237237 then throw("not enough address health after move: < 1%")
238- else {
239- let $t066226688 = asInt2(invoke(main1, "healthOf", [acc], nil))
240- let bp_acc = $t066226688._1
241- let bpu_acc = $t066226688._2
242- if ((bpu_acc > bp_acc))
243- then throw("not enough acc health after move: < 1%")
244- else [changeBy(((address + "_migrated_") + getStringValue(usdtReserve, "assetId")), mt), changeBy(((address + "_migrated_") + getStringValue(usdcReserve, "assetId")), mc)]
245- }
238+ else [changeBy(((address + "_migrated_") + getStringValue(usdtReserve, "assetId")), mt), changeBy(((address + "_migrated_") + getStringValue(usdcReserve, "assetId")), mc)]
246239 }
247240 else throw("Strict value is not equal to itself.")
248241 }
249242 else throw("Strict value is not equal to itself.")
250243 }
251244 else throw("Strict value is not equal to itself.")
252245 }
253246 else throw("Strict value is not equal to itself.")
254247 }
255248
256249
257250
258251 @Callable(i)
259252 func withdrawVestedAllUSDN (whale,regular) = {
260253 let address = toString(i.caller)
261254 let regPart = if (regular)
262255 then asInt(invoke(usdnVestingAll, "withdrawVestedForTo", [address, address], nil))
263256 else 0
264257 if ((regPart == regPart))
265258 then {
266259 let whalePart = if (whale)
267260 then asInt(invoke(usdnVesting, "withdrawVestedForTo", [address, address], nil))
268261 else 0
269262 if ((whalePart == whalePart))
270263 then $Tuple2(nil, (whalePart + regPart))
271264 else throw("Strict value is not equal to itself.")
272265 }
273266 else throw("Strict value is not equal to itself.")
274267 }
275268
276269
277270
278271 @Callable(i)
279272 func withdrawVestedAllSURF (whale,regular) = {
280273 let checks = opAllowed("liquidao_all_withdrawVestedAsSurf", toBase58String(surfAssetId))
281274 if ((checks == checks))
282275 then {
283276 let surfBalance = buySurf(i.caller, whale, regular)
284277 if ((surfBalance == surfBalance))
285278 then $Tuple2([ScriptTransfer(i.caller, surfBalance, surfAssetId)], surfBalance)
286279 else throw("Strict value is not equal to itself.")
287280 }
288281 else throw("Strict value is not equal to itself.")
289282 }
290283
291284
292285
293286 @Callable(i)
294287 func withdrawVestedSURF2 (whale,regular,stake) = {
295288 let address = toString(i.caller)
296289 let checks = opAllowed("liquidao_all_withdrawVestedAsSurf", toBase58String(surfAssetId))
297290 if ((checks == checks))
298291 then {
299292 let regPart = if ((regular > 0))
300293 then asInt(invoke(usdnVestingAll, "partialWithdrawVestedForTo", [address, toString(this), regular], nil))
301294 else 0
302295 if ((regPart == regPart))
303296 then {
304297 let whalePart = if ((whale > 0))
305298 then asInt(invoke(usdnVesting, "partialWithdrawVestedForTo", [address, toString(this), whale], nil))
306299 else 0
307300 if ((whalePart == whalePart))
308301 then {
309302 let total = (whalePart + regPart)
310303 let buy = invoke(surfAddress, "buySurf", [1000000, 1000000, false], [AttachedPayment(fromBase58String(usdnAssetId), total)])
311304 if ((buy == buy))
312305 then {
313306 let surfBalance = assetBalance(this, surfAssetId)
314307 if ((surfBalance == surfBalance))
315308 then if (stake)
316309 then {
317310 let stakeSurf = invoke(surfStakeAddress, "stakeByOriginCaller", nil, [AttachedPayment(surfAssetId, surfBalance)])
318311 if ((stakeSurf == stakeSurf))
319312 then $Tuple2(nil, surfBalance)
320313 else throw("Strict value is not equal to itself.")
321314 }
322315 else $Tuple2([ScriptTransfer(i.caller, surfBalance, surfAssetId)], surfBalance)
323316 else throw("Strict value is not equal to itself.")
324317 }
325318 else throw("Strict value is not equal to itself.")
326319 }
327320 else throw("Strict value is not equal to itself.")
328321 }
329322 else throw("Strict value is not equal to itself.")
330323 }
331324 else throw("Strict value is not equal to itself.")
332325 }
333326
334327
335328
336329 @Callable(i)
337330 func withdrawVestedAllSURFAndStake (whale,regular) = {
338331 let checks = opAllowed("liquidao_all_withdrawVestedAsSurf", toBase58String(surfAssetId))
339332 if ((checks == checks))
340333 then {
341334 let surfBalance = buySurf(i.caller, whale, regular)
342335 if ((surfBalance == surfBalance))
343336 then {
344337 let stakeSurf = invoke(surfStakeAddress, "stakeByOriginCaller", nil, [AttachedPayment(surfAssetId, surfBalance)])
345338 if ((stakeSurf == stakeSurf))
346339 then $Tuple2(nil, surfBalance)
347340 else throw("Strict value is not equal to itself.")
348341 }
349342 else throw("Strict value is not equal to itself.")
350343 }
351344 else throw("Strict value is not equal to itself.")
352345 }
353346
354347
355348
356349 @Callable(i)
357350 func withdrawAsLP (whale,regular) = {
358351 let address = toString(i.caller)
359352 let regPart = if ((regular > 0))
360353 then asInt(invoke(usdnVestingAll, "partialWithdrawVestedForTo", [address, toString(this), regular], nil))
361354 else 0
362355 if ((regPart == regPart))
363356 then {
364357 let whalePart = if ((whale > 0))
365358 then asInt(invoke(usdnVesting, "partialWithdrawVestedForTo", [address, toString(this), whale], nil))
366359 else 0
367360 if ((whalePart == whalePart))
368361 then {
369362 let total = (whalePart + regPart)
370363 let toLp = invoke(viresVestedUsdnLpDapp, "mintTo", [address], [AttachedPayment(fromBase58String(usdnAssetId), total)])
371364 if ((toLp == toLp))
372365 then $Tuple2(nil, total)
373366 else throw("Strict value is not equal to itself.")
374367 }
375368 else throw("Strict value is not equal to itself.")
376369 }
377370 else throw("Strict value is not equal to itself.")
378371 }
379372
380373
381374
382375 @Callable(i)
383376 func importLP () = {
384377 let address = toString(i.caller)
385378 let usdnAmt = asInt(invoke(viresVestedUsdnLpDapp, "import", nil, i.payments))
386379 if ((usdnAmt == usdnAmt))
387380 then {
388381 let accountFor = invoke(usdnVestingAll, "accountFor", [address], [AttachedPayment(fromBase58String(usdnAssetId), usdnAmt)])
389382 if ((accountFor == accountFor))
390383 then $Tuple2(nil, usdnAmt)
391384 else throw("Strict value is not equal to itself.")
392385 }
393386 else throw("Strict value is not equal to itself.")
394387 }
395388
396389
397390 @Verifier(tx)
398391 func verify () = {
399392 let BASE = 1000
400393 let quorumRatio = valueOrErrorMessage(getInteger(configAddress, "proposal_quorum_ratio"), "proposalQuorumRatio is not defined")
401394 let passedRatio = valueOrErrorMessage(getInteger(configAddress, "proposal_passed_ratio"), "proposalThresholdRatio is not defined")
402395 let gViresContract = valueOrErrorMessage(addressFromString(valueOrErrorMessage(getString(configAddress, "dividends_contract"), "no dividends_contract")), "invalid dividends_contract")
403396 let votingContract = valueOrErrorMessage(addressFromString(valueOrErrorMessage(getString(configAddress, "voting_contract"), "no voting_contract")), "invalid voting_contract")
404397 let id = toBase58String(tx.id)
405398 let votesYes = valueOrElse(getInteger(votingContract, ("proposal_yes_" + id)), 0)
406399 let votesNo = valueOrElse(getInteger(votingContract, ("proposal_no_" + id)), 0)
407400 let proposalHeight = valueOrErrorMessage(getInteger(votingContract, ("proposal_height_" + id)), "proposal not registered")
408401 let applyStart = valueOrElse(getInteger(votingContract, ("proposal_applystart_" + id)), 0)
409402 let applyEnd = valueOrElse(getInteger(votingContract, ("proposal_applyend_" + id)), 0)
410403 let totalGVires = valueOrElse(getInteger(votingContract, ("proposal_gvires_" + id)), 0)
411404 let enabled = valueOrElse(getBoolean(configAddress, "op_governance_apply_tx_paused"), false)
412405 let voteYes = votesYes
413406 let voteNo = votesNo
414407 let totalVotes = (voteYes + voteNo)
415408 let hasQuorum = (((totalVotes * BASE) / totalGVires) >= quorumRatio)
416409 let hasPassed = (((voteYes * BASE) / totalVotes) >= passedRatio)
417410 let tooEarly = (applyStart >= HEIGHT)
418411 let tooLate = (HEIGHT >= applyEnd)
419412 let timeDebug = ((((((("proposalHeight = " + toString(proposalHeight)) + ", applyStart = ") + toString(applyStart)) + ", applyEnd = ") + toString(applyEnd)) + ", HEIGHT = ") + toString(HEIGHT))
420413 let byVoting = if (!(enabled))
421414 then throw("tx application throw governance not enabled")
422415 else if (tooEarly)
423416 then throw(("proposal can't be executed as it's too early: " + timeDebug))
424417 else if (tooLate)
425418 then throw(("proposal can't be executed as it's too late:" + timeDebug))
426419 else if (!(hasQuorum))
427420 then throw((((((("no quorum: " + "totalVotes: ") + toString(totalVotes)) + ", totalGVires: ") + toString(totalGVires)) + ", quorumRatio: ") + toString(quorumRatio)))
428421 else if (!(hasPassed))
429422 then throw((((((("no threshold achieved: " + "voteYes: ") + toString(voteYes)) + ", voteNo: ") + toString(voteNo)) + ", passedRatio: ") + toString(passedRatio)))
430423 else true
431424 if (sigVerify(tx.bodyBytes, tx.proofs[0], tx.senderPublicKey))
432425 then true
433426 else byVoting
434427 }
435428

github/deemru/w8io/6500d08 
57.49 ms