tx · 7rotTFSzFy2o2Q4PVnSTbhKtVoDxY2KNC5cnVLf9jKik 3P3VTtUiwJ91Ly7vwtRVKv5NkNNiPoWe7oP: -0.00600000 Waves 2022.07.28 19:05 [3225389] smart account 3P3VTtUiwJ91Ly7vwtRVKv5NkNNiPoWe7oP > SELF 0.00000000 Waves
{ "type": 13, "id": "7rotTFSzFy2o2Q4PVnSTbhKtVoDxY2KNC5cnVLf9jKik", "fee": 600000, "feeAssetId": null, "timestamp": 1659024334157, "version": 1, "sender": "3P3VTtUiwJ91Ly7vwtRVKv5NkNNiPoWe7oP", "senderPublicKey": "5q25v77G7b2qAcdzH88H2Y7mxXnddbN9ZYKCn3Q8W6Pi", "proofs": [ "2Cp5jc9THErN1ypQThFEgbkpyaNoGeVVr4wbrg8CJNfnTEpQf9hfCwgzffKpJLVKLLjRomvvi57vrk81y13SECcs" ], "script": "base64:BgIVCAISBgoECAgICBIAEgASBQoDCAgBGAEQd3JpdGVDb25zdFN0cmluZwIDa2V5BXZhbHVlAwkBASEBCQEJaXNEZWZpbmVkAQkAnQgCBQR0aGlzBQNrZXkJAQtTdHJpbmdFbnRyeQIFA2tleQUFdmFsdWUJAAIBCQCsAgICFWFscmVhZHkgaW5pdGlhbGl6ZWQ6IAUDa2V5AQ13cml0ZUNvbnN0SW50AgNrZXkFdmFsdWUDCQEBIQEJAQlpc0RlZmluZWQBCQCaCAIFBHRoaXMFA2tleQkBDEludGVnZXJFbnRyeQIFA2tleQUFdmFsdWUJAAIBCQCsAgICFWFscmVhZHkgaW5pdGlhbGl6ZWQ6IAUDa2V5AQh3cml0ZUludAIDa2V5BXZhbHVlAwkAZgIAAAUFdmFsdWUJAAIBCQCsAgIJAKwCAgkArAICAhd3cml0aW5nIG5lZ2F0aXZlIHZhbHVlIAkApAMBBQV2YWx1ZQIJIGZvciBrZXkgBQNrZXkJAQxJbnRlZ2VyRW50cnkCBQNrZXkFBXZhbHVlAQhjaGFuZ2VCeQIDa2V5BXZhbHVlCQEId3JpdGVJbnQCBQNrZXkJAGQCCQELdmFsdWVPckVsc2UCCQCaCAIFBHRoaXMFA2tleQAABQV2YWx1ZQALY29uZmlnU3RvcmUCBmNvbmZpZwANY29uZmlnQWRkcmVzcwkBEUBleHRyTmF0aXZlKDEwNjIpAQkBEUBleHRyTmF0aXZlKDEwNTMpAgUEdGhpcwULY29uZmlnU3RvcmUAEm1heWJlT3JhY2xlQWRkcmVzcwQHJG1hdGNoMAkAnQgCBQ1jb25maWdBZGRyZXNzAg5vcmFjbGVfYWRkcmVzcwMJAAECBQckbWF0Y2gwAgZTdHJpbmcEAXMFByRtYXRjaDAJAKYIAQUBcwUEdW5pdAAGSEVJR0hUBQZoZWlnaHQBCW9wQWxsb3dlZAECb3AEByRtYXRjaDAJAPwHBAUNY29uZmlnQWRkcmVzcwIJb3BBbGxvd2VkCQDMCAICBHVzZG4JAMwIAgUCb3AFA25pbAUDbmlsAwkAAQIFByRtYXRjaDACB0Jvb2xlYW4EAWIFByRtYXRjaDADBQFiBgkAAgECC25vdCBhbGxvd2VkCQACAQIhb3BBbGxvd2VkOiB1bmV4cGVjdGVkIHJlc3VsdCB0eXBlAQhtYWluT25seQEBaQMJAQhjb250YWlucwIJARFAZXh0ck5hdGl2ZSgxMDUzKQIFDWNvbmZpZ0FkZHJlc3MCBG1haW4JAKUIAQgFAWkGY2FsbGVyBgkAAgECEG9ubHkgbWFpbiBjYW4gZG8BB3Rocm93SWYCCWNvbmRpdGlvbgVlcnJvcgMFCWNvbmRpdGlvbgkAAgEFBWVycm9yBgAEdXNkYwkBEUBleHRyTmF0aXZlKDEwNTMpAgUEdGhpcwIEdXNkYwAEdXNkdAkBEUBleHRyTmF0aXZlKDEwNTMpAgUEdGhpcwIEdXNkdAAEdXNkbgkBEUBleHRyTmF0aXZlKDEwNTMpAgUEdGhpcwIEdXNkbgERYWRkcmVzc0Fzc2V0U3RvcmUCB2FkZHJlc3MHYXNzZXRJZAkArAICCQCsAgIFB2FkZHJlc3MCAV8FB2Fzc2V0SWQBFWFkZHJlc3NBc3NldFVTRE5TdG9yZQIHYWRkcmVzcwdhc3NldElkCQCsAgIJAKwCAgkArAICBQdhZGRyZXNzAgFfBQdhc3NldElkAgVfdXNkbgEVYWRkcmVzc1RvdGFsVVNETlN0b3JlAQdhZGRyZXNzCQCsAgIFB2FkZHJlc3MCBV91c2RuAQ90b3RhbEFzc2V0U3RvcmUBB2Fzc2V0SWQJAKwCAgIGdG90YWxfBQdhc3NldElkARF2ZXN0aW5nU3RhcnRTdG9yZQEHYWRkcmVzcwkArAICBQdhZGRyZXNzAg5fdmVzdGluZ19zdGFydAETdmVzdGluZ0NsYWltZWRTdG9yZQEHYWRkcmVzcwkArAICBQdhZGRyZXNzAghfY2xhaW1lZAAOdG90YWxVU0ROU3RvcmUCCnRvdGFsX3VzZG4ADXZlc3RpbmdQZXJpb2QJAGgCAKALAO0CARJ1c2VyVmVzdGluZ0JhbGFuY2UBB2FkZHJlc3MEBWNVU0ROCQELdmFsdWVPckVsc2UCCQCfCAEJARVhZGRyZXNzQXNzZXRVU0ROU3RvcmUCBQdhZGRyZXNzBQR1c2RjAAAEBXRVU0ROCQELdmFsdWVPckVsc2UCCQCfCAEJARVhZGRyZXNzQXNzZXRVU0ROU3RvcmUCBQdhZGRyZXNzBQR1c2R0AAAEDHRvdGFsVmVzdGluZwkAZAIFBWNVU0ROBQV0VVNETgQOYWxyZWFkeUNsYWltZWQJAQt2YWx1ZU9yRWxzZQIJAJ8IAQkBE3Zlc3RpbmdDbGFpbWVkU3RvcmUBBQdhZGRyZXNzAAAEByRtYXRjaDAJAJoIAgUEdGhpcwkBEXZlc3RpbmdTdGFydFN0b3JlAQUHYWRkcmVzcwMJAAECBQckbWF0Y2gwAgNJbnQEDHZlc3RpbmdTdGFydAUHJG1hdGNoMAQIZWxpZ2libGUDCQBmAgUGSEVJR0hUCQBkAgUMdmVzdGluZ1N0YXJ0BQ12ZXN0aW5nUGVyaW9kBQx0b3RhbFZlc3RpbmcJAGsDBQx0b3RhbFZlc3RpbmcJAGUCBQZIRUlHSFQFDHZlc3RpbmdTdGFydAUNdmVzdGluZ1BlcmlvZAkAlwoFBQx0b3RhbFZlc3RpbmcFDmFscmVhZHlDbGFpbWVkBQhlbGlnaWJsZQUMdmVzdGluZ1N0YXJ0CQBkAgUMdmVzdGluZ1N0YXJ0BQ12ZXN0aW5nUGVyaW9kCQCXCgUFDHRvdGFsVmVzdGluZwAAAP///////////wEA////////////AQD///////////8BAQphZHZpc2VVc2VyAQdhZGRyZXNzBAskdDAyODc5Mjk2NQkBEnVzZXJWZXN0aW5nQmFsYW5jZQEFB2FkZHJlc3MEDHRvdGFsVmVzdGluZwgFCyR0MDI4NzkyOTY1Al8xBA5hbHJlYWR5Q2xhaW1lZAgFCyR0MDI4NzkyOTY1Al8yBAhlbGlnaWJsZQgFCyR0MDI4NzkyOTY1Al8zBAVzdGFydAgFCyR0MDI4NzkyOTY1Al80BANlbmQIBQskdDAyODc5Mjk2NQJfNQQBYwkBC3ZhbHVlT3JFbHNlAgkAnwgBCQERYWRkcmVzc0Fzc2V0U3RvcmUCBQdhZGRyZXNzBQR1c2RjAAAEAXQJAQt2YWx1ZU9yRWxzZQIJAJ8IAQkBEWFkZHJlc3NBc3NldFN0b3JlAgUHYWRkcmVzcwUEdXNkdAAACQCsAgIJAKwCAgkArAICCQCsAgIJAKwCAgkArAICCQCsAgIJAKwCAgkArAICCQCsAgIJAKwCAgkArAICCQCsAgIJAKwCAgkArAICCQCsAgIJAKwCAgkArAICCQCsAgIJAKwCAgkArAICAglhZGRyZXNzOiAFB2FkZHJlc3MCECwgdG90YWxWZXN0aW5nOiAJAKQDAQUMdG90YWxWZXN0aW5nAhIsIGFscmVhZHlDbGFpbWVkOiAJAKQDAQUOYWxyZWFkeUNsYWltZWQCDCwgZWxpZ2libGU6IAkApAMBBQhlbGlnaWJsZQIPLCBzdGFydEhlaWdodDogCQCkAwEFBXN0YXJ0Ag0sIGVuZEhlaWdodDogCQCkAwEFA2VuZAINLCBub3dIZWlnaHQ6IAkApAMBBQZIRUlHSFQCESwgdXNkY19taWdyYXRlZDogCQCkAwEFAWMCESwgdXNkdF9taWdyYXRlZDogCQCkAwEFAXQCECwgdXNkY19hc3NldElkOiAFBHVzZGMCECwgdXNkdF9hc3NldElkOiAFBHVzZHQEAWkBBGluaXQEBGNvbmYDdElkA2NJZANuSWQDCQECIT0CCAUBaQZjYWxsZXIFBHRoaXMJAAIBAhJvbmx5IHNlbGYgY2FuIGluaXQJAMwIAgkBEHdyaXRlQ29uc3RTdHJpbmcCBQtjb25maWdTdG9yZQUEY29uZgkAzAgCCQEQd3JpdGVDb25zdFN0cmluZwICBHVzZHQFA3RJZAkAzAgCCQEQd3JpdGVDb25zdFN0cmluZwICBHVzZGMFA2NJZAkAzAgCCQEQd3JpdGVDb25zdFN0cmluZwICBHVzZG4FA25JZAUDbmlsAWkBD3N0YXJ0VmVzdGluZ0FsbAAEB2FkZHJlc3MJAKUIAQgFAWkGY2FsbGVyBAZjaGVja3MJAQlvcEFsbG93ZWQBAhVsaXF1aWRhb19zdGFydFZlc3RpbmcDCQAAAgUGY2hlY2tzBQZjaGVja3MECnVzZXJUU3RvcmUJARFhZGRyZXNzQXNzZXRTdG9yZQIFB2FkZHJlc3MFBHVzZHQECnVzZXJDU3RvcmUJARFhZGRyZXNzQXNzZXRTdG9yZQIFB2FkZHJlc3MFBHVzZGMECmNvbnZlcnRlZEMJAQt2YWx1ZU9yRWxzZQIJAJoIAgUEdGhpcwUKdXNlckNTdG9yZQAABApjb252ZXJ0ZWRUCQELdmFsdWVPckVsc2UCCQCaCAIFBHRoaXMFCnVzZXJUU3RvcmUAAAQOc3RhcnRlZFZlc3RpbmcJARN2YWx1ZU9yRXJyb3JNZXNzYWdlAgkAmggCBQR0aGlzCQEVYWRkcmVzc1RvdGFsVVNETlN0b3JlAQUHYWRkcmVzcwIVbm8gYWNjb3VudGVkIGZvciB1c2VyCQDMCAIJAQhjaGFuZ2VCeQICDWNvbW1pdHRlZFVTRE4FDnN0YXJ0ZWRWZXN0aW5nCQDMCAIJAQ13cml0ZUNvbnN0SW50AgkBEXZlc3RpbmdTdGFydFN0b3JlAQUHYWRkcmVzcwUGSEVJR0hUCQDMCAIJAQhjaGFuZ2VCeQIJAQ90b3RhbEFzc2V0U3RvcmUBBQR1c2RjCQEBLQEFCmNvbnZlcnRlZEMJAMwIAgkBC0RlbGV0ZUVudHJ5AQUKdXNlckNTdG9yZQkAzAgCCQEIY2hhbmdlQnkCCQEPdG90YWxBc3NldFN0b3JlAQUEdXNkdAkBAS0BBQpjb252ZXJ0ZWRUCQDMCAIJAQtEZWxldGVFbnRyeQEFCnVzZXJUU3RvcmUFA25pbAkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgFpAQ53aXRoZHJhd1Zlc3RlZAAEBmNoZWNrcwkBCW9wQWxsb3dlZAECF2xpcXVpZGFvX3dpdGhkcmF3VmVzdGVkAwkAAAIFBmNoZWNrcwUGY2hlY2tzBAdhZGRyZXNzCQClCAEIBQFpBmNhbGxlcgQLJHQwNTA2OTUxNTUJARJ1c2VyVmVzdGluZ0JhbGFuY2UBBQdhZGRyZXNzBAx0b3RhbFZlc3RpbmcIBQskdDA1MDY5NTE1NQJfMQQOYWxyZWFkeUNsYWltZWQIBQskdDA1MDY5NTE1NQJfMgQIZWxpZ2libGUIBQskdDA1MDY5NTE1NQJfMwQFc3RhcnQIBQskdDA1MDY5NTE1NQJfNAQDZW5kCAULJHQwNTA2OTUxNTUCXzUECWF2YWlsYWJsZQkAZQIFCGVsaWdpYmxlBQ5hbHJlYWR5Q2xhaW1lZAMJAGYCAAAFBXN0YXJ0CQACAQISbm8gdmVzdGluZyBlbmFibGVkAwkAAAIFCWF2YWlsYWJsZQAACQCUCgIFA25pbAAACQCUCgIJAMwIAgkBDlNjcmlwdFRyYW5zZmVyAwgFAWkGY2FsbGVyBQlhdmFpbGFibGUJANkEAQUEdXNkbgkAzAgCCQEMSW50ZWdlckVudHJ5AgkBE3Zlc3RpbmdDbGFpbWVkU3RvcmUBBQdhZGRyZXNzCQBkAgUOYWxyZWFkeUNsYWltZWQFCWF2YWlsYWJsZQUDbmlsBQlhdmFpbGFibGUJAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4BaQEKYWNjb3VudEZvcgMHYWRkcmVzcwdhc3NldElkBmFtb3VudAQIYXR0YWNoZWQJAJEDAggFAWkIcGF5bWVudHMAAAQGY2hlY2tzAwMDAwkBCG1haW5Pbmx5AQUBaQkBCW9wQWxsb3dlZAECDWxpcXVpZGFvX21vdmUHCQEHdGhyb3dJZgIJAQIhPQIJANgEAQkBBXZhbHVlAQgFCGF0dGFjaGVkB2Fzc2V0SWQFBHVzZG4CFXVzZG4gbXVzdCBiZSBhdHRhY2hlZAcJAQd0aHJvd0lmAgkAZgIFBmFtb3VudAgFCGF0dGFjaGVkBmFtb3VudAITbm90IGVub3VnaCBzdXBwbGllZAcJAQd0aHJvd0lmAgMJAQIhPQIFB2Fzc2V0SWQFBHVzZGMJAQIhPQIFB2Fzc2V0SWQFBHVzZHQHAgtvbmx5IHQgb3IgYwcDCQAAAgUGY2hlY2tzBQZjaGVja3MJAMwIAgkBDXdyaXRlQ29uc3RJbnQCCQERYWRkcmVzc0Fzc2V0U3RvcmUCBQdhZGRyZXNzBQdhc3NldElkBQZhbW91bnQJAMwIAgkBCGNoYW5nZUJ5AgkBFWFkZHJlc3NBc3NldFVTRE5TdG9yZQIFB2FkZHJlc3MFB2Fzc2V0SWQIBQhhdHRhY2hlZAZhbW91bnQJAMwIAgkBCGNoYW5nZUJ5AgkBFWFkZHJlc3NUb3RhbFVTRE5TdG9yZQEFB2FkZHJlc3MIBQhhdHRhY2hlZAZhbW91bnQJAMwIAgkBCGNoYW5nZUJ5AgkBD3RvdGFsQXNzZXRTdG9yZQEFB2Fzc2V0SWQFBmFtb3VudAkAzAgCCQEIY2hhbmdlQnkCBQ50b3RhbFVTRE5TdG9yZQgFCGF0dGFjaGVkBmFtb3VudAUDbmlsCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuAAIj9d8=", "chainId": 87, "height": 3225389, "applicationStatus": "succeeded", "spentComplexity": 0 } View: original | compacted Prev: 4ZehgtFX9NUvJ8bhvbzxqyWLYU5PazU5bhvFEqu3nhCB Next: HWQ5bBtUFi2Bh4KswDryoi3JKQzz9Sjn15FwnWG2A4dX Diff:
Old | New | Differences | |
---|---|---|---|
125 | 125 | then { | |
126 | 126 | let userTStore = addressAssetStore(address, usdt) | |
127 | 127 | let userCStore = addressAssetStore(address, usdc) | |
128 | - | let convertedC = valueOrElse( | |
129 | - | let convertedT = valueOrElse( | |
130 | - | let startedVesting = | |
128 | + | let convertedC = valueOrElse(getInteger(this, userCStore), 0) | |
129 | + | let convertedT = valueOrElse(getInteger(this, userTStore), 0) | |
130 | + | let startedVesting = valueOrErrorMessage(getInteger(this, addressTotalUSDNStore(address)), "no accounted for user") | |
131 | 131 | [changeBy("committedUSDN", startedVesting), writeConstInt(vestingStartStore(address), HEIGHT), changeBy(totalAssetStore(usdc), -(convertedC)), DeleteEntry(userCStore), changeBy(totalAssetStore(usdt), -(convertedT)), DeleteEntry(userTStore)] | |
132 | 132 | } | |
133 | 133 | else throw("Strict value is not equal to itself.") | |
141 | 141 | if ((checks == checks)) | |
142 | 142 | then { | |
143 | 143 | let address = toString(i.caller) | |
144 | - | let $ | |
145 | - | let totalVesting = $ | |
146 | - | let alreadyClaimed = $ | |
147 | - | let eligible = $ | |
148 | - | let start = $ | |
149 | - | let end = $ | |
144 | + | let $t050695155 = userVestingBalance(address) | |
145 | + | let totalVesting = $t050695155._1 | |
146 | + | let alreadyClaimed = $t050695155._2 | |
147 | + | let eligible = $t050695155._3 | |
148 | + | let start = $t050695155._4 | |
149 | + | let end = $t050695155._5 | |
150 | 150 | let available = (eligible - alreadyClaimed) | |
151 | 151 | if ((0 > start)) | |
152 | 152 | then throw("no vesting enabled") |
Old | New | Differences | |
---|---|---|---|
1 | 1 | {-# STDLIB_VERSION 6 #-} | |
2 | 2 | {-# SCRIPT_TYPE ACCOUNT #-} | |
3 | 3 | {-# CONTENT_TYPE DAPP #-} | |
4 | 4 | func writeConstString (key,value) = if (!(isDefined(getString(this, key)))) | |
5 | 5 | then StringEntry(key, value) | |
6 | 6 | else throw(("already initialized: " + key)) | |
7 | 7 | ||
8 | 8 | ||
9 | 9 | func writeConstInt (key,value) = if (!(isDefined(getInteger(this, key)))) | |
10 | 10 | then IntegerEntry(key, value) | |
11 | 11 | else throw(("already initialized: " + key)) | |
12 | 12 | ||
13 | 13 | ||
14 | 14 | func writeInt (key,value) = if ((0 > value)) | |
15 | 15 | then throw(((("writing negative value " + toString(value)) + " for key ") + key)) | |
16 | 16 | else IntegerEntry(key, value) | |
17 | 17 | ||
18 | 18 | ||
19 | 19 | func changeBy (key,value) = writeInt(key, (valueOrElse(getInteger(this, key), 0) + value)) | |
20 | 20 | ||
21 | 21 | ||
22 | 22 | let configStore = "config" | |
23 | 23 | ||
24 | 24 | let configAddress = addressFromStringValue(getStringValue(this, configStore)) | |
25 | 25 | ||
26 | 26 | let maybeOracleAddress = match getString(configAddress, "oracle_address") { | |
27 | 27 | case s: String => | |
28 | 28 | addressFromString(s) | |
29 | 29 | case _ => | |
30 | 30 | unit | |
31 | 31 | } | |
32 | 32 | ||
33 | 33 | let HEIGHT = height | |
34 | 34 | ||
35 | 35 | func opAllowed (op) = match invoke(configAddress, "opAllowed", ["usdn", op], nil) { | |
36 | 36 | case b: Boolean => | |
37 | 37 | if (b) | |
38 | 38 | then true | |
39 | 39 | else throw("not allowed") | |
40 | 40 | case _ => | |
41 | 41 | throw("opAllowed: unexpected result type") | |
42 | 42 | } | |
43 | 43 | ||
44 | 44 | ||
45 | 45 | func mainOnly (i) = if (contains(getStringValue(configAddress, "main"), toString(i.caller))) | |
46 | 46 | then true | |
47 | 47 | else throw("only main can do") | |
48 | 48 | ||
49 | 49 | ||
50 | 50 | func throwIf (condition,error) = if (condition) | |
51 | 51 | then throw(error) | |
52 | 52 | else true | |
53 | 53 | ||
54 | 54 | ||
55 | 55 | let usdc = getStringValue(this, "usdc") | |
56 | 56 | ||
57 | 57 | let usdt = getStringValue(this, "usdt") | |
58 | 58 | ||
59 | 59 | let usdn = getStringValue(this, "usdn") | |
60 | 60 | ||
61 | 61 | func addressAssetStore (address,assetId) = ((address + "_") + assetId) | |
62 | 62 | ||
63 | 63 | ||
64 | 64 | func addressAssetUSDNStore (address,assetId) = (((address + "_") + assetId) + "_usdn") | |
65 | 65 | ||
66 | 66 | ||
67 | 67 | func addressTotalUSDNStore (address) = (address + "_usdn") | |
68 | 68 | ||
69 | 69 | ||
70 | 70 | func totalAssetStore (assetId) = ("total_" + assetId) | |
71 | 71 | ||
72 | 72 | ||
73 | 73 | func vestingStartStore (address) = (address + "_vesting_start") | |
74 | 74 | ||
75 | 75 | ||
76 | 76 | func vestingClaimedStore (address) = (address + "_claimed") | |
77 | 77 | ||
78 | 78 | ||
79 | 79 | let totalUSDNStore = "total_usdn" | |
80 | 80 | ||
81 | 81 | let vestingPeriod = (1440 * 365) | |
82 | 82 | ||
83 | 83 | func userVestingBalance (address) = { | |
84 | 84 | let cUSDN = valueOrElse(getInteger(addressAssetUSDNStore(address, usdc)), 0) | |
85 | 85 | let tUSDN = valueOrElse(getInteger(addressAssetUSDNStore(address, usdt)), 0) | |
86 | 86 | let totalVesting = (cUSDN + tUSDN) | |
87 | 87 | let alreadyClaimed = valueOrElse(getInteger(vestingClaimedStore(address)), 0) | |
88 | 88 | match getInteger(this, vestingStartStore(address)) { | |
89 | 89 | case vestingStart: Int => | |
90 | 90 | let eligible = if ((HEIGHT > (vestingStart + vestingPeriod))) | |
91 | 91 | then totalVesting | |
92 | 92 | else fraction(totalVesting, (HEIGHT - vestingStart), vestingPeriod) | |
93 | 93 | $Tuple5(totalVesting, alreadyClaimed, eligible, vestingStart, (vestingStart + vestingPeriod)) | |
94 | 94 | case _ => | |
95 | 95 | $Tuple5(totalVesting, 0, -1, -1, -1) | |
96 | 96 | } | |
97 | 97 | } | |
98 | 98 | ||
99 | 99 | ||
100 | 100 | func adviseUser (address) = { | |
101 | 101 | let $t028792965 = userVestingBalance(address) | |
102 | 102 | let totalVesting = $t028792965._1 | |
103 | 103 | let alreadyClaimed = $t028792965._2 | |
104 | 104 | let eligible = $t028792965._3 | |
105 | 105 | let start = $t028792965._4 | |
106 | 106 | let end = $t028792965._5 | |
107 | 107 | let c = valueOrElse(getInteger(addressAssetStore(address, usdc)), 0) | |
108 | 108 | let t = valueOrElse(getInteger(addressAssetStore(address, usdt)), 0) | |
109 | 109 | ((((((((((((((((((((("address: " + address) + ", totalVesting: ") + toString(totalVesting)) + ", alreadyClaimed: ") + toString(alreadyClaimed)) + ", eligible: ") + toString(eligible)) + ", startHeight: ") + toString(start)) + ", endHeight: ") + toString(end)) + ", nowHeight: ") + toString(HEIGHT)) + ", usdc_migrated: ") + toString(c)) + ", usdt_migrated: ") + toString(t)) + ", usdc_assetId: ") + usdc) + ", usdt_assetId: ") + usdt) | |
110 | 110 | } | |
111 | 111 | ||
112 | 112 | ||
113 | 113 | @Callable(i) | |
114 | 114 | func init (conf,tId,cId,nId) = if ((i.caller != this)) | |
115 | 115 | then throw("only self can init") | |
116 | 116 | else [writeConstString(configStore, conf), writeConstString("usdt", tId), writeConstString("usdc", cId), writeConstString("usdn", nId)] | |
117 | 117 | ||
118 | 118 | ||
119 | 119 | ||
120 | 120 | @Callable(i) | |
121 | 121 | func startVestingAll () = { | |
122 | 122 | let address = toString(i.caller) | |
123 | 123 | let checks = opAllowed("liquidao_startVesting") | |
124 | 124 | if ((checks == checks)) | |
125 | 125 | then { | |
126 | 126 | let userTStore = addressAssetStore(address, usdt) | |
127 | 127 | let userCStore = addressAssetStore(address, usdc) | |
128 | - | let convertedC = valueOrElse( | |
129 | - | let convertedT = valueOrElse( | |
130 | - | let startedVesting = | |
128 | + | let convertedC = valueOrElse(getInteger(this, userCStore), 0) | |
129 | + | let convertedT = valueOrElse(getInteger(this, userTStore), 0) | |
130 | + | let startedVesting = valueOrErrorMessage(getInteger(this, addressTotalUSDNStore(address)), "no accounted for user") | |
131 | 131 | [changeBy("committedUSDN", startedVesting), writeConstInt(vestingStartStore(address), HEIGHT), changeBy(totalAssetStore(usdc), -(convertedC)), DeleteEntry(userCStore), changeBy(totalAssetStore(usdt), -(convertedT)), DeleteEntry(userTStore)] | |
132 | 132 | } | |
133 | 133 | else throw("Strict value is not equal to itself.") | |
134 | 134 | } | |
135 | 135 | ||
136 | 136 | ||
137 | 137 | ||
138 | 138 | @Callable(i) | |
139 | 139 | func withdrawVested () = { | |
140 | 140 | let checks = opAllowed("liquidao_withdrawVested") | |
141 | 141 | if ((checks == checks)) | |
142 | 142 | then { | |
143 | 143 | let address = toString(i.caller) | |
144 | - | let $ | |
145 | - | let totalVesting = $ | |
146 | - | let alreadyClaimed = $ | |
147 | - | let eligible = $ | |
148 | - | let start = $ | |
149 | - | let end = $ | |
144 | + | let $t050695155 = userVestingBalance(address) | |
145 | + | let totalVesting = $t050695155._1 | |
146 | + | let alreadyClaimed = $t050695155._2 | |
147 | + | let eligible = $t050695155._3 | |
148 | + | let start = $t050695155._4 | |
149 | + | let end = $t050695155._5 | |
150 | 150 | let available = (eligible - alreadyClaimed) | |
151 | 151 | if ((0 > start)) | |
152 | 152 | then throw("no vesting enabled") | |
153 | 153 | else if ((available == 0)) | |
154 | 154 | then $Tuple2(nil, 0) | |
155 | 155 | else $Tuple2([ScriptTransfer(i.caller, available, fromBase58String(usdn)), IntegerEntry(vestingClaimedStore(address), (alreadyClaimed + available))], available) | |
156 | 156 | } | |
157 | 157 | else throw("Strict value is not equal to itself.") | |
158 | 158 | } | |
159 | 159 | ||
160 | 160 | ||
161 | 161 | ||
162 | 162 | @Callable(i) | |
163 | 163 | func accountFor (address,assetId,amount) = { | |
164 | 164 | let attached = i.payments[0] | |
165 | 165 | let checks = if (if (if (if (mainOnly(i)) | |
166 | 166 | then opAllowed("liquidao_move") | |
167 | 167 | else false) | |
168 | 168 | then throwIf((toBase58String(value(attached.assetId)) != usdn), "usdn must be attached") | |
169 | 169 | else false) | |
170 | 170 | then throwIf((amount > attached.amount), "not enough supplied") | |
171 | 171 | else false) | |
172 | 172 | then throwIf(if ((assetId != usdc)) | |
173 | 173 | then (assetId != usdt) | |
174 | 174 | else false, "only t or c") | |
175 | 175 | else false | |
176 | 176 | if ((checks == checks)) | |
177 | 177 | then [writeConstInt(addressAssetStore(address, assetId), amount), changeBy(addressAssetUSDNStore(address, assetId), attached.amount), changeBy(addressTotalUSDNStore(address), attached.amount), changeBy(totalAssetStore(assetId), amount), changeBy(totalUSDNStore, attached.amount)] | |
178 | 178 | else throw("Strict value is not equal to itself.") | |
179 | 179 | } | |
180 | 180 | ||
181 | 181 |
github/deemru/w8io/6500d08 37.59 ms ◑