tx · 9WsGTT9MQoEaFzRDCnRM3me8ozSB7EHaq5kYwGzyrjdJ 3PCbvPVQfSvVu88ip8Fm5YjwJhjEYk1Txhk: -0.00700000 Waves 2022.09.01 16:49 [3275638] smart account 3PCbvPVQfSvVu88ip8Fm5YjwJhjEYk1Txhk > SELF 0.00000000 Waves
{ "type": 13, "id": "9WsGTT9MQoEaFzRDCnRM3me8ozSB7EHaq5kYwGzyrjdJ", "fee": 700000, "feeAssetId": null, "timestamp": 1662040221712, "version": 1, "sender": "3PCbvPVQfSvVu88ip8Fm5YjwJhjEYk1Txhk", "senderPublicKey": "FwXAX9xcWiwbCejtdF8q1Nz8NpJqaVxXKnKK6JoR24pZ", "proofs": [ "jbcmgHeHzAysr4Pq4tds5y7p7nDW1gtsqDWCDUpAvYEyHQ5cLMxCGBKZGzFxJYwPRaZuYf9pFjvjL8RnyHa2Jug" ], "script": "base64:BgIdCAISCwoJCAgICAgICAEIEgASBAoCBAQSBAoCBAQcAAtmYWN0b3JzQmFzZQDoBwEQd3JpdGVDb25zdFN0cmluZwIDa2V5BXZhbHVlAwkBASEBCQEJaXNEZWZpbmVkAQkAnQgCBQR0aGlzBQNrZXkJAQtTdHJpbmdFbnRyeQIFA2tleQUFdmFsdWUJAAIBCQCsAgICFWFscmVhZHkgaW5pdGlhbGl6ZWQ6IAUDa2V5AQ13cml0ZUNvbnN0SW50AgNrZXkFdmFsdWUDCQEBIQEJAQlpc0RlZmluZWQBCQCaCAIFBHRoaXMFA2tleQkBDEludGVnZXJFbnRyeQIFA2tleQUFdmFsdWUJAAIBCQCsAgICFWFscmVhZHkgaW5pdGlhbGl6ZWQ6IAUDa2V5AQh3cml0ZUludAIDa2V5BXZhbHVlAwkAZgIAAAUFdmFsdWUJAAIBCQCsAgIJAKwCAgkArAICAhd3cml0aW5nIG5lZ2F0aXZlIHZhbHVlIAkApAMBBQV2YWx1ZQIJIGZvciBrZXkgBQNrZXkJAQxJbnRlZ2VyRW50cnkCBQNrZXkFBXZhbHVlAQhhc1N0cmluZwEFdmFsdWUEByRtYXRjaDAFBXZhbHVlAwkAAQIFByRtYXRjaDACBlN0cmluZwQBcwUHJG1hdGNoMAUBcwkAAgECHHdyb25nIHR5cGUsIGV4cGVjdGVkOiBTdHJpbmcBBWFzSW50AQV2YWx1ZQQHJG1hdGNoMAUFdmFsdWUDCQABAgUHJG1hdGNoMAIDSW50BANpbnQFByRtYXRjaDAFA2ludAkAAgECBHNtOjEBBmFzSW50MgEFdmFsdWUEByRtYXRjaDAFBXZhbHVlAwkAAQIFByRtYXRjaDACCihJbnQsIEludCkEAXgFByRtYXRjaDAFAXgEAXQFByRtYXRjaDAJAAIBAhp3cm9uZyB0eXBlLCBleHBlY3RlZDogSW50MgERYXNVc2VyQmFsYW5jZURhdGEBBXZhbHVlBAckbWF0Y2gwBQV2YWx1ZQMJAAECBQckbWF0Y2gwAiIoSW50LCBJbnQsIEludCwgSW50LCBJbnQsIEJvb2xlYW4pBAF4BQckbWF0Y2gwBQF4BAF0BQckbWF0Y2gwCQACAQIBMwELdXNlckJhbGFuY2UCA3JzcgR1c2VyCQERYXNVc2VyQmFsYW5jZURhdGEBCQD8BwQFA3JzcgILdXNlckJhbGFuY2UJAMwIAgUEdXNlcgUDbmlsBQNuaWwBB3Rocm93SWYCCWNvbmRpdGlvbgVlcnJvcgMFCWNvbmRpdGlvbgkAAgEFBWVycm9yBgEIY2hhbmdlQnkCA2tleQV2YWx1ZQkBCHdyaXRlSW50AgUDa2V5CQBkAgkBC3ZhbHVlT3JFbHNlAgkAmggCBQR0aGlzBQNrZXkAAAUFdmFsdWUAC2NvbmZpZ1N0b3JlAgZjb25maWcADWNvbmZpZ0FkZHJlc3MJARFAZXh0ck5hdGl2ZSgxMDYyKQEJARFAZXh0ck5hdGl2ZSgxMDUzKQIFBHRoaXMFC2NvbmZpZ1N0b3JlABJtYXliZU9yYWNsZUFkZHJlc3MEByRtYXRjaDAJAJ0IAgUNY29uZmlnQWRkcmVzcwIOb3JhY2xlX2FkZHJlc3MDCQABAgUHJG1hdGNoMAIGU3RyaW5nBAFzBQckbWF0Y2gwCQCmCAEFAXMFBHVuaXQABkhFSUdIVAUGaGVpZ2h0AAJ2ZAkBEUBleHRyTmF0aXZlKDEwNjIpAQkBE3ZhbHVlT3JFcnJvck1lc3NhZ2UCCQCdCAIFDWNvbmZpZ0FkZHJlc3MCEXZpcmVzX2Rpc3RyaWJ1dG9yAhViYWQgdmlyZXMgZGlzdHJpYnV0b3IAEHByb3RlY3RlZFJlc2VydmUJARFAZXh0ck5hdGl2ZSgxMDYyKQEJARFAZXh0ck5hdGl2ZSgxMDUzKQIFDWNvbmZpZ0FkZHJlc3MCEXByb3RlY3RlZF9yZXNlcnZlAAVtYWluMQkBEUBleHRyTmF0aXZlKDEwNjIpAQkBEUBleHRyTmF0aXZlKDEwNTMpAgUEdGhpcwIFbWFpbjEAC3VzZHRSZXNlcnZlCQERQGV4dHJOYXRpdmUoMTA2MikBCQERQGV4dHJOYXRpdmUoMTA1MykCBQR0aGlzAgt1c2R0UmVzZXJ2ZQALdXNkY1Jlc2VydmUJARFAZXh0ck5hdGl2ZSgxMDYyKQEJARFAZXh0ck5hdGl2ZSgxMDUzKQIFBHRoaXMCC3VzZGNSZXNlcnZlAANhY2MJARFAZXh0ck5hdGl2ZSgxMDUzKQIFBHRoaXMCA2FjYwAOdXNkblZlc3RpbmdBbGwJARFAZXh0ck5hdGl2ZSgxMDYyKQEJARFAZXh0ck5hdGl2ZSgxMDUzKQIFBHRoaXMCDnVzZG5WZXN0aW5nQWxsAAt1c2RuVmVzdGluZwkBEUBleHRyTmF0aXZlKDEwNjIpAQkBEUBleHRyTmF0aXZlKDEwNTMpAgUEdGhpcwILdXNkblZlc3RpbmcAC3VzZG5Bc3NldElkCQERQGV4dHJOYXRpdmUoMTA1MykCBQR0aGlzAgt1c2RuQXNzZXRJZAAJdXNkbkJvbnVzCQERQGV4dHJOYXRpdmUoMTA1MCkCBQR0aGlzAgVib251cwEKbW92ZVN0cmVhbQUDcnNyBmFjdGlvbgRmcm9tBnN0cmluZwNhbXQJAPwHBAUCdmQCBG1vdmUJAMwIAgUDcnNyCQDMCAIFBmFjdGlvbgkAzAgCBQRmcm9tCQDMCAIFBnN0cmluZwkAzAgCBQNhbXQFA25pbAUDbmlsAQlvcEFsbG93ZWQCAm9wCmFzc2V0SWRTdHIEByRtYXRjaDAJAPwHBAUNY29uZmlnQWRkcmVzcwIJb3BBbGxvd2VkCQDMCAIFCmFzc2V0SWRTdHIJAMwIAgUCb3AFA25pbAUDbmlsAwkAAQIFByRtYXRjaDACB0Jvb2xlYW4EAWIFByRtYXRjaDADBQFiBgkAAgECC25vdCBhbGxvd2VkCQACAQIhb3BBbGxvd2VkOiB1bmV4cGVjdGVkIHJlc3VsdCB0eXBlAQphZHZpc2VVc2VyAQNhY2MECWRhdGFXaGFsZQkBCGFzU3RyaW5nAQkA/AcEBQt1c2RuVmVzdGluZwIHYWR2aXNlVQkAzAgCBQNhY2MFA25pbAUDbmlsAwkAAAIFCWRhdGFXaGFsZQUJZGF0YVdoYWxlBAdkYXRhQWxsCQEIYXNTdHJpbmcBCQD8BwQFDnVzZG5WZXN0aW5nQWxsAgdhZHZpc2VVCQDMCAIFA2FjYwUDbmlsBQNuaWwDCQAAAgUHZGF0YUFsbAUHZGF0YUFsbAkArAICCQCsAgIFCWRhdGFXaGFsZQIDIHwgBQdkYXRhQWxsCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuBAFpAQRpbml0CQRjb25mAXQBYwh2ZXN0bkFsbAdhY2NvdW50BG1haW4JdXNkbkFzc2V0BWJvbnVzBXZlc3RuAwkBAiE9AggFAWkGY2FsbGVyBQR0aGlzCQACAQISb25seSBzZWxmIGNhbiBpbml0CQDMCAIJARB3cml0ZUNvbnN0U3RyaW5nAgULY29uZmlnU3RvcmUFBGNvbmYJAMwIAgkBEHdyaXRlQ29uc3RTdHJpbmcCAgt1c2R0UmVzZXJ2ZQUBdAkAzAgCCQEQd3JpdGVDb25zdFN0cmluZwICC3VzZGNSZXNlcnZlBQFjCQDMCAIJARB3cml0ZUNvbnN0U3RyaW5nAgIOdXNkblZlc3RpbmdBbGwFCHZlc3RuQWxsCQDMCAIJARB3cml0ZUNvbnN0U3RyaW5nAgILdXNkblZlc3RpbmcFBXZlc3RuCQDMCAIJARB3cml0ZUNvbnN0U3RyaW5nAgIDYWNjBQdhY2NvdW50CQDMCAIJARB3cml0ZUNvbnN0U3RyaW5nAgIFbWFpbjEFBG1haW4JAMwIAgkBEHdyaXRlQ29uc3RTdHJpbmcCAgt1c2RuQXNzZXRJZAUJdXNkbkFzc2V0CQDMCAIJAQxJbnRlZ2VyRW50cnkCAgVib251cwUFYm9udXMFA25pbAFpAQ1jb252ZXJ0VG9VU0ROAAQHYWRkcmVzcwkApQgBCAUBaQZjYWxsZXIKAQdtb3ZlUnNyAQNyc3IEB3Jlc2VydmUJARFAZXh0ck5hdGl2ZSgxMDYyKQEFA3JzcgQHYXNzZXRJZAkBEUBleHRyTmF0aXZlKDEwNTMpAgUHcmVzZXJ2ZQIHYXNzZXRJZAQGY2hlY2tzCQEJb3BBbGxvd2VkAgIOb3BlbkNvbGxhdGVyYWwFB2Fzc2V0SWQDCQAAAgUGY2hlY2tzBQZjaGVja3MDAwkBAiE9AgUDcnNyCQClCAEFC3VzZHRSZXNlcnZlCQECIT0CBQNyc3IJAKUIAQULdXNkY1Jlc2VydmUHCQACAQIPaW52YWxpZCByZXNlcnZlBANzaEMJAPwHBAUCdmQCCnN5bmNIZWlnaHQJAMwIAgUDcnNyBQNuaWwFA25pbAMJAAACBQNzaEMFA3NoQwQLJHQwNDIzMDQzMTQJAQZhc0ludDIBCQD8BwQFB3Jlc2VydmUCE3N0b3JlZERlcG9zaXRCb3Jyb3cFA25pbAUDbmlsBAx0b3RhbERlcG9zaXQIBQskdDA0MjMwNDMxNAJfMQQJdG90YWxEZWJ0CAULJHQwNDIzMDQzMTQCXzIEBHV0aWwDCQBmAgUMdG90YWxEZXBvc2l0AAAJAJcDAQkAzAgCBQtmYWN0b3JzQmFzZQkAzAgCCQBrAwUJdG90YWxEZWJ0BQtmYWN0b3JzQmFzZQUMdG90YWxEZXBvc2l0BQNuaWwAAAQNdXRpbFRocmVzaG9sZAkBC3ZhbHVlT3JFbHNlAgkAmggCBQ1jb25maWdBZGRyZXNzCQCsAgIFB2Fzc2V0SWQCGV9vcGVuX2NvbGxhdGVyYWxfdGhyZXNvbGQA6AcDCQBmAgUNdXRpbFRocmVzaG9sZAUEdXRpbAkAAgECHW5vdCBhbGxvd2VkOiB1dGlsIDwgdGhyZXNob2xkBANkZXAJAQVhc0ludAEJAPwHBAUHcmVzZXJ2ZQIOdXNlckRlcG9zaXRVU0QJAMwIAgUHYWRkcmVzcwUDbmlsBQNuaWwEBG1vdmUEAnMzCQD8BwQFB3Jlc2VydmUCEnRyYW5zZmVyQVRva2Vuc0ZvcgkAzAgCBQdhZGRyZXNzCQDMCAIFA2FjYwkAzAgCBQNkZXAFA25pbAUDbmlsAwkAAAIFAnMzBQJzMwQEcFJ3MwkBCm1vdmVTdHJlYW0FBQNyc3ICB2RlcG9zaXQFB2FkZHJlc3MFA2FjYwUDZGVwAwkAAAIFBHBSdzMFBHBSdzMFBHVuaXQJAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4JAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4DCQAAAgUEbW92ZQUEbW92ZQUDZGVwCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuBAJtdwkA/AcEBQt1c2RuVmVzdGluZwISc3RhcnRWZXN0aW5nQWxsRm9yCQDMCAIJAKUIAQgFAWkGY2FsbGVyBQNuaWwFA25pbAMJAAACBQJtdwUCbXcEAm10CQEFYXNJbnQBCQEHbW92ZVJzcgEJAKUIAQULdXNkdFJlc2VydmUDCQAAAgUCbXQFAm10BAJtYwkBBWFzSW50AQkBB21vdmVSc3IBCQClCAEFC3VzZGNSZXNlcnZlAwkAAAIFAm1jBQJtYwQIZGVwVG90YWwJAGQCBQJtdAUCbWMEBXJlaGFiBAd1c2RuQW10CQBrAwUIZGVwVG90YWwJAGQCBQtmYWN0b3JzQmFzZQUJdXNkbkJvbnVzBQtmYWN0b3JzQmFzZQQCd2QJAPwHBAUQcHJvdGVjdGVkUmVzZXJ2ZQIPd2l0aGRyYXdUb01haW4yCQDMCAIFA2FjYwkAzAgCBQt1c2RuQXNzZXRJZAkAzAgCBQd1c2RuQW10BQNuaWwFA25pbAMJAAACBQJ3ZAUCd2QEBXJlaGFiCQD8BwQFDnVzZG5WZXN0aW5nQWxsAgphY2NvdW50Rm9yCQDMCAIFB2FkZHJlc3MFA25pbAkAzAgCCQEPQXR0YWNoZWRQYXltZW50AgkA2QQBBQt1c2RuQXNzZXRJZAUHdXNkbkFtdAUDbmlsAwkAAAIFBXJlaGFiBQVyZWhhYgUEdW5pdAkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgMJAAACBQVyZWhhYgUFcmVoYWIECyR0MDU1NDY1NjA4CQEGYXNJbnQyAQkA/AcEBQVtYWluMQIIaGVhbHRoT2YJAMwIAgUHYWRkcmVzcwUDbmlsBQNuaWwEAmJwCAULJHQwNTU0NjU2MDgCXzEEA2JwdQgFCyR0MDU1NDY1NjA4Al8yAwkAZgIFAmJwCQBoAgBkCQBlAgUCYnAFA2JwdQkAAgECKm5vdCBlbm91Z2ggYWRkcmVzcyBoZWFsdGggYWZ0ZXIgbW92ZTogPCAxJQQLJHQwNTcwNjU3NzIJAQZhc0ludDIBCQD8BwQFBW1haW4xAghoZWFsdGhPZgkAzAgCBQNhY2MFA25pbAUDbmlsBAZicF9hY2MIBQskdDA1NzA2NTc3MgJfMQQHYnB1X2FjYwgFCyR0MDU3MDY1NzcyAl8yAwkAZgIFBmJwX2FjYwkAaAIAZAkAZQIFBmJwX2FjYwUHYnB1X2FjYwkAAgECJm5vdCBlbm91Z2ggYWNjIGhlYWx0aCBhZnRlciBtb3ZlOiA8IDElCQDMCAIJAQ13cml0ZUNvbnN0SW50AgkArAICCQCsAgIFB2FkZHJlc3MCCl9taWdyYXRlZF8JARFAZXh0ck5hdGl2ZSgxMDUzKQIFC3VzZHRSZXNlcnZlAgdhc3NldElkBQJtdAkAzAgCCQENd3JpdGVDb25zdEludAIJAKwCAgkArAICBQdhZGRyZXNzAgpfbWlncmF0ZWRfCQERQGV4dHJOYXRpdmUoMTA1MykCBQt1c2RjUmVzZXJ2ZQIHYXNzZXRJZAUCbWMFA25pbAkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgFpARV3aXRoZHJhd1Zlc3RlZEFsbFVTRE4CBXdoYWxlB3JlZ3VsYXIECXdoYWxlUGFydAMFBXdoYWxlCQEFYXNJbnQBCQD8BwQFDnVzZG5WZXN0aW5nQWxsAhF3aXRoZHJhd1Zlc3RlZEZvcgkAzAgCCQClCAEIBQFpBmNhbGxlcgUDbmlsBQNuaWwAAAMJAAACBQl3aGFsZVBhcnQFCXdoYWxlUGFydAQHcmVnUGFydAMFB3JlZ3VsYXIJAQVhc0ludAEJAPwHBAULdXNkblZlc3RpbmcCEXdpdGhkcmF3VmVzdGVkRm9yCQDMCAIJAKUIAQgFAWkGY2FsbGVyBQNuaWwFA25pbAAAAwkAAAIFB3JlZ1BhcnQFB3JlZ1BhcnQJAJQKAgUDbmlsCQBkAgUJd2hhbGVQYXJ0BQdyZWdQYXJ0CQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuAWkBFXdpdGhkcmF3VmVzdGVkQWxsU1VSRgIFd2hhbGUHcmVndWxhcgkAAgECBHRvZG8AJaIZPw==", "chainId": 87, "height": 3275638, "applicationStatus": "succeeded", "spentComplexity": 0 } View: original | compacted Prev: none Next: GniN2f7yf36GzReitrCBFnBUVvKvfH95h4yJnrYbEwPq Full:
Old | New | Differences | |
---|---|---|---|
1 | - | # no script | |
1 | + | {-# STDLIB_VERSION 6 #-} | |
2 | + | {-# SCRIPT_TYPE ACCOUNT #-} | |
3 | + | {-# CONTENT_TYPE DAPP #-} | |
4 | + | let factorsBase = 1000 | |
5 | + | ||
6 | + | func writeConstString (key,value) = if (!(isDefined(getString(this, key)))) | |
7 | + | then StringEntry(key, value) | |
8 | + | else throw(("already initialized: " + key)) | |
9 | + | ||
10 | + | ||
11 | + | func writeConstInt (key,value) = if (!(isDefined(getInteger(this, key)))) | |
12 | + | then IntegerEntry(key, value) | |
13 | + | else throw(("already initialized: " + key)) | |
14 | + | ||
15 | + | ||
16 | + | func writeInt (key,value) = if ((0 > value)) | |
17 | + | then throw(((("writing negative value " + toString(value)) + " for key ") + key)) | |
18 | + | else IntegerEntry(key, value) | |
19 | + | ||
20 | + | ||
21 | + | func asString (value) = match value { | |
22 | + | case s: String => | |
23 | + | s | |
24 | + | case _ => | |
25 | + | throw("wrong type, expected: String") | |
26 | + | } | |
27 | + | ||
28 | + | ||
29 | + | func asInt (value) = match value { | |
30 | + | case int: Int => | |
31 | + | int | |
32 | + | case _ => | |
33 | + | throw("sm:1") | |
34 | + | } | |
35 | + | ||
36 | + | ||
37 | + | func asInt2 (value) = match value { | |
38 | + | case x: (Int, Int) => | |
39 | + | x | |
40 | + | case t => | |
41 | + | throw("wrong type, expected: Int2") | |
42 | + | } | |
43 | + | ||
44 | + | ||
45 | + | func asUserBalanceData (value) = match value { | |
46 | + | case x: (Int, Int, Int, Int, Int, Boolean) => | |
47 | + | x | |
48 | + | case t => | |
49 | + | throw("3") | |
50 | + | } | |
51 | + | ||
52 | + | ||
53 | + | func userBalance (rsr,user) = asUserBalanceData(invoke(rsr, "userBalance", [user], nil)) | |
54 | + | ||
55 | + | ||
56 | + | func throwIf (condition,error) = if (condition) | |
57 | + | then throw(error) | |
58 | + | else true | |
59 | + | ||
60 | + | ||
61 | + | func changeBy (key,value) = writeInt(key, (valueOrElse(getInteger(this, key), 0) + value)) | |
62 | + | ||
63 | + | ||
64 | + | let configStore = "config" | |
65 | + | ||
66 | + | let configAddress = addressFromStringValue(getStringValue(this, configStore)) | |
67 | + | ||
68 | + | let maybeOracleAddress = match getString(configAddress, "oracle_address") { | |
69 | + | case s: String => | |
70 | + | addressFromString(s) | |
71 | + | case _ => | |
72 | + | unit | |
73 | + | } | |
74 | + | ||
75 | + | let HEIGHT = height | |
76 | + | ||
77 | + | let vd = addressFromStringValue(valueOrErrorMessage(getString(configAddress, "vires_distributor"), "bad vires distributor")) | |
78 | + | ||
79 | + | let protectedReserve = addressFromStringValue(getStringValue(configAddress, "protected_reserve")) | |
80 | + | ||
81 | + | let main1 = addressFromStringValue(getStringValue(this, "main1")) | |
82 | + | ||
83 | + | let usdtReserve = addressFromStringValue(getStringValue(this, "usdtReserve")) | |
84 | + | ||
85 | + | let usdcReserve = addressFromStringValue(getStringValue(this, "usdcReserve")) | |
86 | + | ||
87 | + | let acc = getStringValue(this, "acc") | |
88 | + | ||
89 | + | let usdnVestingAll = addressFromStringValue(getStringValue(this, "usdnVestingAll")) | |
90 | + | ||
91 | + | let usdnVesting = addressFromStringValue(getStringValue(this, "usdnVesting")) | |
92 | + | ||
93 | + | let usdnAssetId = getStringValue(this, "usdnAssetId") | |
94 | + | ||
95 | + | let usdnBonus = getIntegerValue(this, "bonus") | |
96 | + | ||
97 | + | func moveStream (rsr,action,from,string,amt) = invoke(vd, "move", [rsr, action, from, string, amt], nil) | |
98 | + | ||
99 | + | ||
100 | + | func opAllowed (op,assetIdStr) = match invoke(configAddress, "opAllowed", [assetIdStr, op], nil) { | |
101 | + | case b: Boolean => | |
102 | + | if (b) | |
103 | + | then true | |
104 | + | else throw("not allowed") | |
105 | + | case _ => | |
106 | + | throw("opAllowed: unexpected result type") | |
107 | + | } | |
108 | + | ||
109 | + | ||
110 | + | func adviseUser (acc) = { | |
111 | + | let dataWhale = asString(invoke(usdnVesting, "adviseU", [acc], nil)) | |
112 | + | if ((dataWhale == dataWhale)) | |
113 | + | then { | |
114 | + | let dataAll = asString(invoke(usdnVestingAll, "adviseU", [acc], nil)) | |
115 | + | if ((dataAll == dataAll)) | |
116 | + | then ((dataWhale + " | ") + dataAll) | |
117 | + | else throw("Strict value is not equal to itself.") | |
118 | + | } | |
119 | + | else throw("Strict value is not equal to itself.") | |
120 | + | } | |
121 | + | ||
122 | + | ||
123 | + | @Callable(i) | |
124 | + | func init (conf,t,c,vestnAll,account,main,usdnAsset,bonus,vestn) = if ((i.caller != this)) | |
125 | + | then throw("only self can init") | |
126 | + | 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)] | |
127 | + | ||
128 | + | ||
129 | + | ||
130 | + | @Callable(i) | |
131 | + | func convertToUSDN () = { | |
132 | + | let address = toString(i.caller) | |
133 | + | func moveRsr (rsr) = { | |
134 | + | let reserve = addressFromStringValue(rsr) | |
135 | + | let assetId = getStringValue(reserve, "assetId") | |
136 | + | let checks = opAllowed("openCollateral", assetId) | |
137 | + | if ((checks == checks)) | |
138 | + | then if (if ((rsr != toString(usdtReserve))) | |
139 | + | then (rsr != toString(usdcReserve)) | |
140 | + | else false) | |
141 | + | then throw("invalid reserve") | |
142 | + | else { | |
143 | + | let shC = invoke(vd, "syncHeight", [rsr], nil) | |
144 | + | if ((shC == shC)) | |
145 | + | then { | |
146 | + | let $t042304314 = asInt2(invoke(reserve, "storedDepositBorrow", nil, nil)) | |
147 | + | let totalDeposit = $t042304314._1 | |
148 | + | let totalDebt = $t042304314._2 | |
149 | + | let util = if ((totalDeposit > 0)) | |
150 | + | then min([factorsBase, fraction(totalDebt, factorsBase, totalDeposit)]) | |
151 | + | else 0 | |
152 | + | let utilThreshold = valueOrElse(getInteger(configAddress, (assetId + "_open_collateral_thresold")), 1000) | |
153 | + | if ((utilThreshold > util)) | |
154 | + | then throw("not allowed: util < threshold") | |
155 | + | else { | |
156 | + | let dep = asInt(invoke(reserve, "userDepositUSD", [address], nil)) | |
157 | + | let move = { | |
158 | + | let s3 = invoke(reserve, "transferATokensFor", [address, acc, dep], nil) | |
159 | + | if ((s3 == s3)) | |
160 | + | then { | |
161 | + | let pRw3 = moveStream(rsr, "deposit", address, acc, dep) | |
162 | + | if ((pRw3 == pRw3)) | |
163 | + | then unit | |
164 | + | else throw("Strict value is not equal to itself.") | |
165 | + | } | |
166 | + | else throw("Strict value is not equal to itself.") | |
167 | + | } | |
168 | + | if ((move == move)) | |
169 | + | then dep | |
170 | + | else throw("Strict value is not equal to itself.") | |
171 | + | } | |
172 | + | } | |
173 | + | else throw("Strict value is not equal to itself.") | |
174 | + | } | |
175 | + | else throw("Strict value is not equal to itself.") | |
176 | + | } | |
177 | + | ||
178 | + | let mw = invoke(usdnVesting, "startVestingAllFor", [toString(i.caller)], nil) | |
179 | + | if ((mw == mw)) | |
180 | + | then { | |
181 | + | let mt = asInt(moveRsr(toString(usdtReserve))) | |
182 | + | if ((mt == mt)) | |
183 | + | then { | |
184 | + | let mc = asInt(moveRsr(toString(usdcReserve))) | |
185 | + | if ((mc == mc)) | |
186 | + | then { | |
187 | + | let depTotal = (mt + mc) | |
188 | + | let rehab = { | |
189 | + | let usdnAmt = fraction(depTotal, (factorsBase + usdnBonus), factorsBase) | |
190 | + | let wd = invoke(protectedReserve, "withdrawToMain2", [acc, usdnAssetId, usdnAmt], nil) | |
191 | + | if ((wd == wd)) | |
192 | + | then { | |
193 | + | let rehab = invoke(usdnVestingAll, "accountFor", [address], [AttachedPayment(fromBase58String(usdnAssetId), usdnAmt)]) | |
194 | + | if ((rehab == rehab)) | |
195 | + | then unit | |
196 | + | else throw("Strict value is not equal to itself.") | |
197 | + | } | |
198 | + | else throw("Strict value is not equal to itself.") | |
199 | + | } | |
200 | + | if ((rehab == rehab)) | |
201 | + | then { | |
202 | + | let $t055465608 = asInt2(invoke(main1, "healthOf", [address], nil)) | |
203 | + | let bp = $t055465608._1 | |
204 | + | let bpu = $t055465608._2 | |
205 | + | if ((bp > (100 * (bp - bpu)))) | |
206 | + | then throw("not enough address health after move: < 1%") | |
207 | + | else { | |
208 | + | let $t057065772 = asInt2(invoke(main1, "healthOf", [acc], nil)) | |
209 | + | let bp_acc = $t057065772._1 | |
210 | + | let bpu_acc = $t057065772._2 | |
211 | + | if ((bp_acc > (100 * (bp_acc - bpu_acc)))) | |
212 | + | then throw("not enough acc health after move: < 1%") | |
213 | + | else [writeConstInt(((address + "_migrated_") + getStringValue(usdtReserve, "assetId")), mt), writeConstInt(((address + "_migrated_") + getStringValue(usdcReserve, "assetId")), mc)] | |
214 | + | } | |
215 | + | } | |
216 | + | else throw("Strict value is not equal to itself.") | |
217 | + | } | |
218 | + | else throw("Strict value is not equal to itself.") | |
219 | + | } | |
220 | + | else throw("Strict value is not equal to itself.") | |
221 | + | } | |
222 | + | else throw("Strict value is not equal to itself.") | |
223 | + | } | |
224 | + | ||
225 | + | ||
226 | + | ||
227 | + | @Callable(i) | |
228 | + | func withdrawVestedAllUSDN (whale,regular) = { | |
229 | + | let whalePart = if (whale) | |
230 | + | then asInt(invoke(usdnVestingAll, "withdrawVestedFor", [toString(i.caller)], nil)) | |
231 | + | else 0 | |
232 | + | if ((whalePart == whalePart)) | |
233 | + | then { | |
234 | + | let regPart = if (regular) | |
235 | + | then asInt(invoke(usdnVesting, "withdrawVestedFor", [toString(i.caller)], nil)) | |
236 | + | else 0 | |
237 | + | if ((regPart == regPart)) | |
238 | + | then $Tuple2(nil, (whalePart + regPart)) | |
239 | + | else throw("Strict value is not equal to itself.") | |
240 | + | } | |
241 | + | else throw("Strict value is not equal to itself.") | |
242 | + | } | |
243 | + | ||
244 | + | ||
245 | + | ||
246 | + | @Callable(i) | |
247 | + | func withdrawVestedAllSURF (whale,regular) = throw("todo") | |
248 | + | ||
249 | + |
github/deemru/w8io/6500d08 54.24 ms ◑