tx · 5agNi1tt7hGX1nBzZTBUtRAUeH4MeQMkT7rW9gU7DyfJ

3MwyBKGZcdChEK9Z55HwLn3A2EgwEJJpqC1:  -0.01000000 Waves

2024.01.09 14:03 [2923849] smart account 3MwyBKGZcdChEK9Z55HwLn3A2EgwEJJpqC1 > SELF 0.00000000 Waves

{ "type": 13, "id": "5agNi1tt7hGX1nBzZTBUtRAUeH4MeQMkT7rW9gU7DyfJ", "fee": 1000000, "feeAssetId": null, "timestamp": 1704798280005, "version": 2, "chainId": 84, "sender": "3MwyBKGZcdChEK9Z55HwLn3A2EgwEJJpqC1", "senderPublicKey": "7c3qLtcJ7EaPS2JDjXv8MBbd4kpyc6R27wcn5GgvZhur", "proofs": [ "47EhNFkwpwb9JgFpqzojG54RwvQSY5VRgwRU3rrMQceH4QwQdKt7UKLmp87aN8zBwzAEZYfquk3csQthZ9uU9W5P" ], "script": "base64:BgIKCAISBgoECAEBARUADGNvbnRyYWN0RmlsZQIQdmVzdGluZ19uZW8ucmlkZQADU0VQAgJfXwAISURTX0xJU1QJAMwIAgAACQDMCAIAAQkAzAgCAAIJAMwIAgADCQDMCAIABAkAzAgCAAUJAMwIAgAGCQDMCAIABwkAzAgCAAgJAMwIAgAJCQDMCAIACgkAzAgCAAsJAMwIAgAMCQDMCAIADQkAzAgCAA4JAMwIAgAPCQDMCAIAEAkAzAgCABEJAMwIAgASCQDMCAIAEwkAzAgCABQJAMwIAgAVCQDMCAIAFgkAzAgCABcJAMwIAgAYCQDMCAIAGQkAzAgCABoJAMwIAgAbCQDMCAIAHAkAzAgCAB0FA25pbAARTUFYX1ZFU1RJTkdfQ09VTlQJAJADAQUISURTX0xJU1QBCHRocm93RXJyAQNtc2cJAAIBCQCsAgIJAKwCAgUMY29udHJhY3RGaWxlAgI6IAUDbXNnAAprZXlBc3NldElkCQC5CQIJAMwIAgICJXMJAMwIAgIHYXNzZXRJZAUDbmlsBQNTRVAADWFzc2V0SWRTdHJpbmcJAQt2YWx1ZU9yRWxzZQIJAJ0IAgUEdGhpcwUKa2V5QXNzZXRJZAIFV0FWRVMADGFzc2V0SWRCeXRlcwMJAAACBQ1hc3NldElkU3RyaW5nAgVXQVZFUwUEdW5pdAkA2QQBBQ1hc3NldElkU3RyaW5nAAxrZXlBZG1pbkxpc3QJALkJAgkAzAgCAgIlcwkAzAgCAglhZG1pbkxpc3QFA25pbAUDU0VQAAlhZG1pbkxpc3QEByRtYXRjaDAJAJ0IAgUEdGhpcwUMa2V5QWRtaW5MaXN0AwkAAQIFByRtYXRjaDACBlN0cmluZwQBcwUHJG1hdGNoMAkAtQkCBQFzBQNTRVAFA25pbAEUaXNWYWxpZEFkZHJlc3NTdHJpbmcBDWFkZHJlc3NTdHJpbmcEByRtYXRjaDAJAKYIAQUNYWRkcmVzc1N0cmluZwMJAAECBQckbWF0Y2gwAgdBZGRyZXNzBAFhBQckbWF0Y2gwBgcBDmtleVVzZXJWZXN0aW5nAgt1c2VyQWRkcmVzcwJpZAQGY2hlY2tzCQDMCAIDCQEUaXNWYWxpZEFkZHJlc3NTdHJpbmcBBQt1c2VyQWRkcmVzcwYJAQh0aHJvd0VycgEJALkJAgkAzAgCAhVhZGRyZXNzIGlzIG5vdCB2YWxpZDoJAMwIAgULdXNlckFkZHJlc3MFA25pbAIBIAkAzAgCAwMJAGcCBQJpZAAACQBmAgURTUFYX1ZFU1RJTkdfQ09VTlQFAmlkBwYJAQh0aHJvd0VycgEJALkJAgkAzAgCAhZpZCBzaG91bGQgYmUgbGVzcyB0aGFuCQDMCAIJAKQDAQURTUFYX1ZFU1RJTkdfQ09VTlQJAMwIAgIEZ290OgkAzAgCCQCkAwEFAmlkBQNuaWwCASAFA25pbAMJAAACBQZjaGVja3MFBmNoZWNrcwkAuQkCCQDMCAICBCVzJWQJAMwIAgULdXNlckFkZHJlc3MJAMwIAgkApAMBBQJpZAUDbmlsBQNTRVAJAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4BEWZvcm1hdFVzZXJWZXN0aW5nAw12ZXN0aW5nQW1vdW50CnN0YXJ0QmxvY2sKbG9ja0xlbmd0aAQGY2hlY2tzCQDMCAIDCQBnAgUNdmVzdGluZ0Ftb3VudAAABgkBCHRocm93RXJyAQIhdmVzdGluZyBhbW91bnQgY2Fubm90IGJlIG5lZ2F0aXZlCQDMCAIDCQBnAgUKc3RhcnRCbG9jawAABgkBCHRocm93RXJyAQIec3RhcnQgYmxvY2sgY2Fubm90IGJlIG5lZ2F0aXZlCQDMCAIDCQBnAgUKbG9ja0xlbmd0aAAABgkBCHRocm93RXJyAQIebG9jayBsZW5ndGggY2Fubm90IGJlIG5lZ2F0aXZlBQNuaWwDCQAAAgUGY2hlY2tzBQZjaGVja3MJALkJAgkAzAgCAgolZCVkJWQlZCVkCQDMCAIJAKQDAQUNdmVzdGluZ0Ftb3VudAkAzAgCCQCkAwEFCnN0YXJ0QmxvY2sJAMwIAgkApAMBBQpsb2NrTGVuZ3RoBQNuaWwFA1NFUAkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgEQcGFyc2VVc2VyVmVzdGluZwILdXNlckFkZHJlc3MCaWQEByRtYXRjaDAJAJ0IAgUEdGhpcwkBDmtleVVzZXJWZXN0aW5nAgULdXNlckFkZHJlc3MFAmlkAwkAAQIFByRtYXRjaDACBlN0cmluZwQJcmF3U3RyaW5nBQckbWF0Y2gwBAtzcGxpdFN0cmluZwkAtQkCBQlyYXdTdHJpbmcFA1NFUAQNdmVzdGluZ0Ftb3VudAkBDXBhcnNlSW50VmFsdWUBCQCRAwIFC3NwbGl0U3RyaW5nAAEECnN0YXJ0QmxvY2sJAQ1wYXJzZUludFZhbHVlAQkAkQMCBQtzcGxpdFN0cmluZwACBApsb2NrTGVuZ3RoCQENcGFyc2VJbnRWYWx1ZQEJAJEDAgULc3BsaXRTdHJpbmcAAwkAlQoDBQ12ZXN0aW5nQW1vdW50BQpzdGFydEJsb2NrBQpsb2NrTGVuZ3RoCQCVCgMAAAAAAAABEWtleVZlc3RpbmdIaXN0b3J5AwZhY3Rpb24LdXNlckFkZHJlc3MEdHhJZAkAuQkCCQDMCAICBiVzJXMlcwkAzAgCBQZhY3Rpb24JAMwIAgULdXNlckFkZHJlc3MJAMwIAgUEdHhJZAUDbmlsBQNTRVABEmNhbGNVbmxvY2tlZEFtb3VudAMGYW1vdW50CnN0YXJ0QmxvY2sKbG9ja0xlbmd0aAQNZWxhcHNlZEJsb2NrcwkAZQIFBmhlaWdodAUKc3RhcnRCbG9jawQOdW5sb2NrZWRBbW91bnQDAwkBAiE9AgUKbG9ja0xlbmd0aAAACQBmAgUNZWxhcHNlZEJsb2NrcwAABwkAlwMBCQDMCAIJAGsDBQZhbW91bnQFDWVsYXBzZWRCbG9ja3MFCmxvY2tMZW5ndGgJAMwIAgUGYW1vdW50BQNuaWwAAAkAlAoCBQ51bmxvY2tlZEFtb3VudAkAZQIFBmFtb3VudAUOdW5sb2NrZWRBbW91bnQBFWdldFVzZXJVbmxvY2tlZEFtb3VudAILdXNlckFkZHJlc3MCaWQECyR0MDI3NDcyODI2CQEQcGFyc2VVc2VyVmVzdGluZwIFC3VzZXJBZGRyZXNzBQJpZAQNdmVzdGluZ0Ftb3VudAgFCyR0MDI3NDcyODI2Al8xBApzdGFydEJsb2NrCAULJHQwMjc0NzI4MjYCXzIECmxvY2tMZW5ndGgIBQskdDAyNzQ3MjgyNgJfMwQLJHQwMjgyOTI5MjYJARJjYWxjVW5sb2NrZWRBbW91bnQDBQ12ZXN0aW5nQW1vdW50BQpzdGFydEJsb2NrBQpsb2NrTGVuZ3RoBA51bmxvY2tlZEFtb3VudAgFCyR0MDI4MjkyOTI2Al8xBA9yZW1haW5pbmdBbW91bnQIBQskdDAyODI5MjkyNgJfMgkAlAoCBQ51bmxvY2tlZEFtb3VudAUPcmVtYWluaW5nQW1vdW50ARNnZXRVc2VyQ2xhaW1BY3Rpb25zAgt1c2VyQWRkcmVzcwJpZAQLJHQwMzAyOTMxMDgJARBwYXJzZVVzZXJWZXN0aW5nAgULdXNlckFkZHJlc3MFAmlkBA12ZXN0aW5nQW1vdW50CAULJHQwMzAyOTMxMDgCXzEECnN0YXJ0QmxvY2sIBQskdDAzMDI5MzEwOAJfMgQKbG9ja0xlbmd0aAgFCyR0MDMwMjkzMTA4Al8zBAskdDAzMTExMzE4OQkBFWdldFVzZXJVbmxvY2tlZEFtb3VudAIFC3VzZXJBZGRyZXNzBQJpZAQOdW5sb2NrZWRBbW91bnQIBQskdDAzMTExMzE4OQJfMQQPcmVtYWluaW5nQW1vdW50CAULJHQwMzExMTMxODkCXzIED3JlbWFpbmluZ0Jsb2NrcwkAlgMBCQDMCAIJAGUCCQBkAgUKc3RhcnRCbG9jawUKbG9ja0xlbmd0aAUGaGVpZ2h0CQDMCAIAAAUDbmlsBAdhY3Rpb25zAwkBAiE9AgUOdW5sb2NrZWRBbW91bnQAAAkAzAgCCQEOU2NyaXB0VHJhbnNmZXIDCQERQGV4dHJOYXRpdmUoMTA2MikBBQt1c2VyQWRkcmVzcwUOdW5sb2NrZWRBbW91bnQFDGFzc2V0SWRCeXRlcwkAzAgCCQELU3RyaW5nRW50cnkCCQEOa2V5VXNlclZlc3RpbmcCBQt1c2VyQWRkcmVzcwUCaWQJARFmb3JtYXRVc2VyVmVzdGluZwMFD3JlbWFpbmluZ0Ftb3VudAUGaGVpZ2h0BQ9yZW1haW5pbmdCbG9ja3MFA25pbAUDbmlsCQCUCgIFB2FjdGlvbnMFDnVubG9ja2VkQW1vdW50ARRnZXROZXdWZXN0aW5nQWN0aW9ucwULdXNlckFkZHJlc3MCaWQNdmVzdGluZ0Ftb3VudApzdGFydEJsb2NrCmxvY2tMZW5ndGgJAMwIAgkBC1N0cmluZ0VudHJ5AgkBDmtleVVzZXJWZXN0aW5nAgULdXNlckFkZHJlc3MFAmlkCQERZm9ybWF0VXNlclZlc3RpbmcDBQ12ZXN0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AgEgBQthdmFpbGFibGVJZAEBaQEOdmVzdGluZ0ZvclVzZXIEC3VzZXJBZGRyZXNzDXZlc3RpbmdBbW91bnQKc3RhcnRCbG9jawpsb2NrTGVuZ3RoBAVjaGVjawkAzAgCAwkAAAIJAJADAQgFAWkIcGF5bWVudHMAAQYJAQh0aHJvd0VycgECGHNob3VsZCBiZSBvbmx5IDEgcGF5bWVudAkAzAgCAwkAAAIICQCRAwIIBQFpCHBheW1lbnRzAAAHYXNzZXRJZAUMYXNzZXRJZEJ5dGVzBgkBCHRocm93RXJyAQkAuQkCCQDMCAICG3BheW1lbnQgYXNzZXRJZCBzaG91bGQgYmU6IAkAzAgCBQ1hc3NldElkU3RyaW5nBQNuaWwCASAJAMwIAgMJAAACCAkAkQMCCAUBaQhwYXltZW50cwAABmFtb3VudAUNdmVzdGluZ0Ftb3VudAYJAQh0aHJvd0VycgECL3BheW1lbnQgYW1vdW50IHNob3VsZCBiZSBlcXVhbCB0byB2ZXN0aW5nQW1vdW50CQDMCAIDAwkBAiE9AgUJYWRtaW5MaXN0BQNuaWwGCQEPY29udGFpbnNFbGVtZW50AgUJYWRtaW5MaXN0CQClCAEIBQFpBmNhbGxlcgYJAQh0aHJvd0VycgECEXlvdSBtdXN0IGJlIGFkbWluBQNuaWwDCQAAAgUFY2hlY2sFBWNoZWNrBAJpZAkBFWdldEF2YWlsYWJsZVZlc3RpbmdJZAEFC3VzZXJBZGRyZXNzCQEUZ2V0TmV3VmVzdGluZ0FjdGlvbnMFBQt1c2VyQWRkcmVzcwUCaWQFDXZlc3RpbmdBbW91bnQFCnN0YXJ0QmxvY2sFCmxvY2tMZW5ndGgJAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4Afbp8Cg==", "height": 2923849, "applicationStatus": "succeeded", "spentComplexity": 0 } View: original | compacted Prev: 2WjMxprX5yG784LJtQB91kBdNQBh7hvxbfNojjLGm9oq Next: 3LB3tmSRUfrmX3LjX6WwGzUsF7o4VWnoYtGsiBYNjQcU Diff:
OldNewDifferences
1919 let assetIdBytes = if ((assetIdString == "WAVES"))
2020 then unit
2121 else fromBase58String(assetIdString)
22+
23+let keyAdminList = makeString(["%s", "adminList"], SEP)
24+
25+let adminList = match getString(this, keyAdminList) {
26+ case s: String =>
27+ split(s, SEP)
28+ case _ =>
29+ nil
30+}
2231
2332 func isValidAddressString (addressString) = match addressFromString(addressString) {
2433 case a: Address =>
8392
8493
8594 func getUserUnlockedAmount (userAddress,id) = {
86- let $t025722651 = parseUserVesting(userAddress, id)
87- let vestingAmount = $t025722651._1
88- let startBlock = $t025722651._2
89- let lockLength = $t025722651._3
90- let $t026542751 = calcUnlockedAmount(vestingAmount, startBlock, lockLength)
91- let unlockedAmount = $t026542751._1
92- let remainingAmount = $t026542751._2
95+ let $t027472826 = parseUserVesting(userAddress, id)
96+ let vestingAmount = $t027472826._1
97+ let startBlock = $t027472826._2
98+ let lockLength = $t027472826._3
99+ let $t028292926 = calcUnlockedAmount(vestingAmount, startBlock, lockLength)
100+ let unlockedAmount = $t028292926._1
101+ let remainingAmount = $t028292926._2
93102 $Tuple2(unlockedAmount, remainingAmount)
94103 }
95104
96105
97106 func getUserClaimActions (userAddress,id) = {
98- let $t028542933 = parseUserVesting(userAddress, id)
99- let vestingAmount = $t028542933._1
100- let startBlock = $t028542933._2
101- let lockLength = $t028542933._3
102- let $t029363014 = getUserUnlockedAmount(userAddress, id)
103- let unlockedAmount = $t029363014._1
104- let remainingAmount = $t029363014._2
107+ let $t030293108 = parseUserVesting(userAddress, id)
108+ let vestingAmount = $t030293108._1
109+ let startBlock = $t030293108._2
110+ let lockLength = $t030293108._3
111+ let $t031113189 = getUserUnlockedAmount(userAddress, id)
112+ let unlockedAmount = $t031113189._1
113+ let remainingAmount = $t031113189._2
105114 let remainingBlocks = max([((startBlock + lockLength) - height), 0])
106115 let actions = if ((unlockedAmount != 0))
107116 then [ScriptTransfer(addressFromStringValue(userAddress), unlockedAmount, assetIdBytes), StringEntry(keyUserVesting(userAddress, id), formatUserVesting(remainingAmount, height, remainingBlocks))]
115124
116125 func getAllUserClaimActions (userAddress) = {
117126 func actionsHelper (acc,a) = {
118- let $t037373764 = acc
119- let allActions = $t037373764._1
120- let sum = $t037373764._2
121- let $t037693838 = getUserClaimActions(userAddress, a)
122- let claimActions = $t037693838._1
123- let claimAmount = $t037693838._2
127+ let $t039123939 = acc
128+ let allActions = $t039123939._1
129+ let sum = $t039123939._2
130+ let $t039444013 = getUserClaimActions(userAddress, a)
131+ let claimActions = $t039444013._1
132+ let claimAmount = $t039444013._2
124133 $Tuple2((allActions ++ claimActions), (sum + claimAmount))
125134 }
126135
141150
142151 func getAvailableVestingId (userAddress) = {
143152 func helper (availableId,id) = {
144- let $t040464125 = parseUserVesting(userAddress, id)
145- let vestingAmount = $t040464125._1
146- let startBlock = $t040464125._2
147- let lockLength = $t040464125._3
153+ let $t042214300 = parseUserVesting(userAddress, id)
154+ let vestingAmount = $t042214300._1
155+ let startBlock = $t042214300._2
156+ let lockLength = $t042214300._3
148157 if ((vestingAmount > 0))
149158 then availableId
150159 else if ((availableId == -1))
173182
174183
175184 @Callable(i)
176-func foo (userAddress,id,vestingAmount,startBlock,lockLength) = getNewVestingActions(userAddress, id, vestingAmount, startBlock, lockLength)
185+func vestingForUser (userAddress,vestingAmount,startBlock,lockLength) = {
186+ let check = [if ((size(i.payments) == 1))
187+ then true
188+ else throwErr("should be only 1 payment"), if ((i.payments[0].assetId == assetIdBytes))
189+ then true
190+ else throwErr(makeString(["payment assetId should be: ", assetIdString], " ")), if ((i.payments[0].amount == vestingAmount))
191+ then true
192+ else throwErr("payment amount should be equal to vestingAmount"), if (if ((adminList != nil))
193+ then true
194+ else containsElement(adminList, toString(i.caller)))
195+ then true
196+ else throwErr("you must be admin")]
197+ if ((check == check))
198+ then {
199+ let id = getAvailableVestingId(userAddress)
200+ getNewVestingActions(userAddress, id, vestingAmount, startBlock, lockLength)
201+ }
202+ else throw("Strict value is not equal to itself.")
203+ }
177204
178205
Full:
OldNewDifferences
11 {-# STDLIB_VERSION 6 #-}
22 {-# SCRIPT_TYPE ACCOUNT #-}
33 {-# CONTENT_TYPE DAPP #-}
44 let contractFile = "vesting_neo.ride"
55
66 let SEP = "__"
77
88 let IDS_LIST = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29]
99
1010 let MAX_VESTING_COUNT = size(IDS_LIST)
1111
1212 func throwErr (msg) = throw(((contractFile + ": ") + msg))
1313
1414
1515 let keyAssetId = makeString(["%s", "assetId"], SEP)
1616
1717 let assetIdString = valueOrElse(getString(this, keyAssetId), "WAVES")
1818
1919 let assetIdBytes = if ((assetIdString == "WAVES"))
2020 then unit
2121 else fromBase58String(assetIdString)
22+
23+let keyAdminList = makeString(["%s", "adminList"], SEP)
24+
25+let adminList = match getString(this, keyAdminList) {
26+ case s: String =>
27+ split(s, SEP)
28+ case _ =>
29+ nil
30+}
2231
2332 func isValidAddressString (addressString) = match addressFromString(addressString) {
2433 case a: Address =>
2534 true
2635 case _ =>
2736 false
2837 }
2938
3039
3140 func keyUserVesting (userAddress,id) = {
3241 let checks = [if (isValidAddressString(userAddress))
3342 then true
3443 else throwErr(makeString(["address is not valid:", userAddress], " ")), if (if ((id >= 0))
3544 then (MAX_VESTING_COUNT > id)
3645 else false)
3746 then true
3847 else throwErr(makeString(["id should be less than", toString(MAX_VESTING_COUNT), "got:", toString(id)], " "))]
3948 if ((checks == checks))
4049 then makeString(["%s%d", userAddress, toString(id)], SEP)
4150 else throw("Strict value is not equal to itself.")
4251 }
4352
4453
4554 func formatUserVesting (vestingAmount,startBlock,lockLength) = {
4655 let checks = [if ((vestingAmount >= 0))
4756 then true
4857 else throwErr("vesting amount cannot be negative"), if ((startBlock >= 0))
4958 then true
5059 else throwErr("start block cannot be negative"), if ((lockLength >= 0))
5160 then true
5261 else throwErr("lock length cannot be negative")]
5362 if ((checks == checks))
5463 then makeString(["%d%d%d%d%d", toString(vestingAmount), toString(startBlock), toString(lockLength)], SEP)
5564 else throw("Strict value is not equal to itself.")
5665 }
5766
5867
5968 func parseUserVesting (userAddress,id) = match getString(this, keyUserVesting(userAddress, id)) {
6069 case rawString: String =>
6170 let splitString = split(rawString, SEP)
6271 let vestingAmount = parseIntValue(splitString[1])
6372 let startBlock = parseIntValue(splitString[2])
6473 let lockLength = parseIntValue(splitString[3])
6574 $Tuple3(vestingAmount, startBlock, lockLength)
6675 case _ =>
6776 $Tuple3(0, 0, 0)
6877 }
6978
7079
7180 func keyVestingHistory (action,userAddress,txId) = makeString(["%s%s%s", action, userAddress, txId], SEP)
7281
7382
7483 func calcUnlockedAmount (amount,startBlock,lockLength) = {
7584 let elapsedBlocks = (height - startBlock)
7685 let unlockedAmount = if (if ((lockLength != 0))
7786 then (elapsedBlocks > 0)
7887 else false)
7988 then min([fraction(amount, elapsedBlocks, lockLength), amount])
8089 else 0
8190 $Tuple2(unlockedAmount, (amount - unlockedAmount))
8291 }
8392
8493
8594 func getUserUnlockedAmount (userAddress,id) = {
86- let $t025722651 = parseUserVesting(userAddress, id)
87- let vestingAmount = $t025722651._1
88- let startBlock = $t025722651._2
89- let lockLength = $t025722651._3
90- let $t026542751 = calcUnlockedAmount(vestingAmount, startBlock, lockLength)
91- let unlockedAmount = $t026542751._1
92- let remainingAmount = $t026542751._2
95+ let $t027472826 = parseUserVesting(userAddress, id)
96+ let vestingAmount = $t027472826._1
97+ let startBlock = $t027472826._2
98+ let lockLength = $t027472826._3
99+ let $t028292926 = calcUnlockedAmount(vestingAmount, startBlock, lockLength)
100+ let unlockedAmount = $t028292926._1
101+ let remainingAmount = $t028292926._2
93102 $Tuple2(unlockedAmount, remainingAmount)
94103 }
95104
96105
97106 func getUserClaimActions (userAddress,id) = {
98- let $t028542933 = parseUserVesting(userAddress, id)
99- let vestingAmount = $t028542933._1
100- let startBlock = $t028542933._2
101- let lockLength = $t028542933._3
102- let $t029363014 = getUserUnlockedAmount(userAddress, id)
103- let unlockedAmount = $t029363014._1
104- let remainingAmount = $t029363014._2
107+ let $t030293108 = parseUserVesting(userAddress, id)
108+ let vestingAmount = $t030293108._1
109+ let startBlock = $t030293108._2
110+ let lockLength = $t030293108._3
111+ let $t031113189 = getUserUnlockedAmount(userAddress, id)
112+ let unlockedAmount = $t031113189._1
113+ let remainingAmount = $t031113189._2
105114 let remainingBlocks = max([((startBlock + lockLength) - height), 0])
106115 let actions = if ((unlockedAmount != 0))
107116 then [ScriptTransfer(addressFromStringValue(userAddress), unlockedAmount, assetIdBytes), StringEntry(keyUserVesting(userAddress, id), formatUserVesting(remainingAmount, height, remainingBlocks))]
108117 else nil
109118 $Tuple2(actions, unlockedAmount)
110119 }
111120
112121
113122 func getNewVestingActions (userAddress,id,vestingAmount,startBlock,lockLength) = [StringEntry(keyUserVesting(userAddress, id), formatUserVesting(vestingAmount, startBlock, lockLength))]
114123
115124
116125 func getAllUserClaimActions (userAddress) = {
117126 func actionsHelper (acc,a) = {
118- let $t037373764 = acc
119- let allActions = $t037373764._1
120- let sum = $t037373764._2
121- let $t037693838 = getUserClaimActions(userAddress, a)
122- let claimActions = $t037693838._1
123- let claimAmount = $t037693838._2
127+ let $t039123939 = acc
128+ let allActions = $t039123939._1
129+ let sum = $t039123939._2
130+ let $t039444013 = getUserClaimActions(userAddress, a)
131+ let claimActions = $t039444013._1
132+ let claimAmount = $t039444013._2
124133 $Tuple2((allActions ++ claimActions), (sum + claimAmount))
125134 }
126135
127136 let $l = IDS_LIST
128137 let $s = size($l)
129138 let $acc0 = $Tuple2(nil, 0)
130139 func $f0_1 ($a,$i) = if (($i >= $s))
131140 then $a
132141 else actionsHelper($a, $l[$i])
133142
134143 func $f0_2 ($a,$i) = if (($i >= $s))
135144 then $a
136145 else throw("List size exceeds 30")
137146
138147 $f0_2($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($acc0, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10), 11), 12), 13), 14), 15), 16), 17), 18), 19), 20), 21), 22), 23), 24), 25), 26), 27), 28), 29), 30)
139148 }
140149
141150
142151 func getAvailableVestingId (userAddress) = {
143152 func helper (availableId,id) = {
144- let $t040464125 = parseUserVesting(userAddress, id)
145- let vestingAmount = $t040464125._1
146- let startBlock = $t040464125._2
147- let lockLength = $t040464125._3
153+ let $t042214300 = parseUserVesting(userAddress, id)
154+ let vestingAmount = $t042214300._1
155+ let startBlock = $t042214300._2
156+ let lockLength = $t042214300._3
148157 if ((vestingAmount > 0))
149158 then availableId
150159 else if ((availableId == -1))
151160 then id
152161 else min([availableId, id])
153162 }
154163
155164 let availableId = {
156165 let $l = IDS_LIST
157166 let $s = size($l)
158167 let $acc0 = -1
159168 func $f0_1 ($a,$i) = if (($i >= $s))
160169 then $a
161170 else helper($a, $l[$i])
162171
163172 func $f0_2 ($a,$i) = if (($i >= $s))
164173 then $a
165174 else throw("List size exceeds 30")
166175
167176 $f0_2($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($acc0, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10), 11), 12), 13), 14), 15), 16), 17), 18), 19), 20), 21), 22), 23), 24), 25), 26), 27), 28), 29), 30)
168177 }
169178 if ((availableId == -1))
170179 then throwErr(makeString(["user exceeded max vesting count: ", userAddress], " "))
171180 else availableId
172181 }
173182
174183
175184 @Callable(i)
176-func foo (userAddress,id,vestingAmount,startBlock,lockLength) = getNewVestingActions(userAddress, id, vestingAmount, startBlock, lockLength)
185+func vestingForUser (userAddress,vestingAmount,startBlock,lockLength) = {
186+ let check = [if ((size(i.payments) == 1))
187+ then true
188+ else throwErr("should be only 1 payment"), if ((i.payments[0].assetId == assetIdBytes))
189+ then true
190+ else throwErr(makeString(["payment assetId should be: ", assetIdString], " ")), if ((i.payments[0].amount == vestingAmount))
191+ then true
192+ else throwErr("payment amount should be equal to vestingAmount"), if (if ((adminList != nil))
193+ then true
194+ else containsElement(adminList, toString(i.caller)))
195+ then true
196+ else throwErr("you must be admin")]
197+ if ((check == check))
198+ then {
199+ let id = getAvailableVestingId(userAddress)
200+ getNewVestingActions(userAddress, id, vestingAmount, startBlock, lockLength)
201+ }
202+ else throw("Strict value is not equal to itself.")
203+ }
177204
178205

github/deemru/w8io/026f985 
36.27 ms