tx · GSNqZDuTsGLxT6VLrscVN1W8wpoQUuzfDPF247NxwwVC

3Mynj79w9PikhwUwMwFPk2vifkm8zkDt2Zt:  -0.02000000 Waves

2022.10.31 09:49 [2296253] smart account 3Mynj79w9PikhwUwMwFPk2vifkm8zkDt2Zt > SELF 0.00000000 Waves

{ "type": 13, "id": "GSNqZDuTsGLxT6VLrscVN1W8wpoQUuzfDPF247NxwwVC", "fee": 2000000, "feeAssetId": null, "timestamp": 1667199001010, "version": 1, "sender": "3Mynj79w9PikhwUwMwFPk2vifkm8zkDt2Zt", "senderPublicKey": "5195SwZ4ifX6bBstZ6tN31kEQFVHaKpFYLc1GCa3Myrh", "proofs": [ "FQFHoa3H5jiBhDov2bAxRi6R24eBi7sf5hSr9AYrTRDLXs1uAePHACgWRVCeYPXzw414tM1uDpgNLPwHLGVn4fS" ], "script": "base64:AAIFAAAAAAAAC3wIAhIJCgcBAQEBAQgBEgASBAoCCAgSBAoCCAgSBAoCCAgSAwoBCBIAIg9nZXRTdHJpbmdPckZhaWwiA2tleSIDU0VQIghCVUZTQ0FMRSIIdGhyb3dFcnIiA21zZyIdY29udmVydFByaWNlQXNzZXRJbnRvSWRvQXNzZXQiEHByaWNlQXNzZXRBbW91bnQiDnByaWNlQXNzZXRNVUxUIgVwcmljZSIJcHJpY2VNVUxUIgxpZG9Bc3NldE1VTFQiD2JQcmljZUFzc2V0TVVMVCINYklkb0Fzc2V0TVVMVCIOYlByaWNlQXNzZXRCVUYiD2JBbW91bnRBc3NldEJVRiIOSWR4Q2ZnSWRvU3RhcnQiEUlkeENmZ0lkb0R1cmF0aW9uIhBJZHhDZmdDbGFpbVN0YXJ0IhNJZHhDZmdDbGFpbUR1cmF0aW9uIgtJZHhDZmdQcmljZSIPSWR4Q2ZnUHJpY2VNdWx0IhBJZHhDZmdJZG9Bc3NldElkIhJJZHhDZmdJZG9Bc3NldE11bHQiEklkeENmZ1ByaWNlQXNzZXRJZCIUSWR4Q2ZnUHJpY2VBc3NldE11bHQiFUlkeENmZ01pbkludmVzdEFtb3VudCINZnJvbWF0Q29uZmlnUyIIaWRvU3RhcnQiC2lkb0R1cmF0aW9uIgpjbGFpbVN0YXJ0Ig1jbGFpbUR1cmF0aW9uIglwcmljZU11bHQiDGlkb0Fzc2V0SWQ1OCIMaWRvQXNzZXRNdWx0Ig5wcmljZUFzc2V0SWQ1OCIOcHJpY2VBc3NldE11bHQiD21pbkludmVzdEFtb3VudCITdG90YWxJZG9Bc3NldFRvU2VsbCIMZnJvbWF0Q29uZmlnIhFJZHhJbnZUb3RhbEFtb3VudCIVSWR4SW52UmVtYWluaW5nQW1vdW50Ih1JZHhJbnZDbGFpbWVkUHJpY2VBc3NldEFtb3VudCIbSWR4SW52Q2xhaW1lZElkb0Fzc2V0QW1vdW50IhdJZHhJbnZMYXN0Q2xhaW1lZEhlaWdodCIPZm9ybWF0SW52ZXN0b3JTIgt0b3RhbEFtb3VudCIPcmVtYWluaW5nQW1vdW50IhdjbGFpbWVkUHJpY2VBc3NldEFtb3VudCIVY2xhaW1lZElkb0Fzc2V0QW1vdW50IhFsYXN0Q2xhaW1lZEhlaWdodCIOZm9ybWF0SW52ZXN0b3IiE2Zvcm1hdEhpc3RvcnlSZWNvcmQiDmlkb0Fzc2V0QW1vdW50IglrZXlDb25maWciC2tleUludmVzdG9yIgt1c2VyQWRkcmVzcyIJa2V5VG90YWxzIhlrZXlPcGVyYXRpb25IaXN0b3J5UmVjb3JkIgR0eXBlIgZ0eElkNTgiFGtleVVTRE5DbGFpbURpc2FibGVkIhVrZXlVU0ROQ2xhaW1FbmRIZWlnaHQiD2tleVBlcmlvZExlbmd0aCIQa2V5Q3Vycm5ldFBlcmlvZCIUa2V5UGVyaW9kU3RhcnRIZWlnaHQiCXBlcmlvZE51bSISa2V5UGVyaW9kRW5kSGVpZ2h0IhZrZXlVc2R0UHJpY2VBc3NldFJhdGlvIhdrZXlUb3RhbFBlcmlvZEFsbG93YW5jZSIHYXNzZXRJZCIWa2V5VXNlclBlcmlvZEFsbG93YW5jZSIea2V5UGVyaW9kVG90YWxBdmFpbGFibGVUb0NsYWltIh1rZXlQZXJpb2RVc2VyQXZhaWxhYmxlVG9DbGFpbSITa2V5TWFuYWdlclB1YmxpY0tleSIaa2V5UGVuZGluZ01hbmFnZXJQdWJsaWNLZXkiD3JlYWRDb25maWdBcnJheSIjcmVhZFRvdGFsc0FycmF5T3JEZWZhdWx0QnlDdXN0b21LZXkiCWN1c3RvbUtleSIYcmVhZFRvdGFsc0FycmF5T3JEZWZhdWx0IhpyZWFkSW52ZXN0b3JBcnJheU9yRGVmYXVsdCIXcmVhZEludmVzdG9yQXJyYXlPckZhaWwiFUlkeERpZmZUb3RhbEluY3JlbWVudCIkSWR4RGlmZlJlbWFpbmluZ1ByaWNlQW1vdW50SW5jcmVtZW50IiJJZHhEaWZmQ2xhaW1lZFByaWNlQW1vdW50SW5jcmVtZW50IiVJZHhEaWZmQ2xhaW1lZElkb0Fzc2V0QW1vdW50SW5jcmVtZW50IgtUb3RhbHNFbnRyeSIJb3JpZ0FycmF5Ig1pbmNyZW1lbnREaWZmIhRuZXdMYXN0Q2xhaW1lZEhlaWdodCIObmV3VG90YWxBbW91bnQiEm5ld1JlbWFpbmluZ0Ftb3VudCIabmV3Q2xhaW1lZFByaWNlQXNzZXRBbW91bnQiGG5ld0NsYWltZWRJZG9Bc3NldEFtb3VudCIbSW52ZXN0T3BlcmF0aW9uSGlzdG9yeUVudHJ5IgR0eElkIhpDbGFpbU9wZXJhdGlvbkhpc3RvcnlFbnRyeSINaW50ZXJuYWxDbGFpbSIQY2xhaW1lZEFzc2V0SWQ1OCIIY2ZnQXJyYXkiCGNsYWltRW5kIgppZG9Bc3NldElkIgxwcmljZUFzc2V0SWQiDXVzZXJBZGRyZXNzNTgiD29yaWdJbnZlc3RBcnJheSIRaW52ZXN0VG90YWxBbW91bnQiGmludmVzdExhc3RDbGFpbWVkSGVpZ2h0VE1QIhdpbnZlc3RMYXN0Q2xhaW1lZEhlaWdodCIUbmV3Q2xhaW1QZXJpb2RIZWlnaHQiDmNsYWltaW5nQmxvY2tzIhhjbGFpbWluZ1ByaWNlQXNzZXRBbW91bnQiFmNsYWltaW5nSWRvQXNzZXRBbW91bnQiBmlzVVNETiITaXNVU0ROQ2xhaW1EaXNhYmxlZCIQaXNVU0ROQ2xhaW1FbmRlZCIHJG1hdGNoMCIDZW5kIgZjaGVja3MiHnRvdGFsUGVyaW9kUHJpY2VBc3NldEFsbG93YW5jZSIddXNlclBlcmlvZFByaWNlQXNzZXRBbGxvd2FuY2UiDWN1cnJlbnRQZXJpb2QiG3BlcmlvZFRvdGFsQXZhaWxhYmxlVG9DbGFpbSIacGVyaW9kVXNlckF2YWlsYWJsZVRvQ2xhaW0iIWF2YWlsYWJsZUNsYWltaW5nUHJpY2VBc3NldEFtb3VudCIWbWFuYWdlclB1YmxpY0tleU9yVW5pdCIBcyIdcGVuZGluZ01hbmFnZXJQdWJsaWNLZXlPclVuaXQiC211c3RNYW5hZ2VyIgFpIgJwZCICcGsiBmlkb0VuZCIDcG10IgxpZG9Bc3NldEluZm8iDnByaWNlQXNzZXRJbmZvIg9vcmlnVG90YWxzQXJyYXkiCnRvdGFsc0RpZmYiDm1pbkl2ZXN0QW1vdW50IgpwbXRBc3NldElkIglwbXRBbW91bnQiEW9yaWdJbnZlc3RvckFycmF5IhNuZXdQcmljZVRvdGFsQW1vdW50IhZyZXF1aXJlZElkb0Fzc2V0QW1vdW50Ig9jYWxsZXJBZGRyZXNzNTgiEGNsYWltUmVzdWx0VHVwbGUiCW91dEFtb3VudCIKb3V0QXNzZXRJZCIaY2xhaW1lZFBy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", "chainId": 84, "height": 2296253, "applicationStatus": "succeeded", "spentComplexity": 0 } View: original | compacted Prev: 3j7x1KyCPsNYAeAWmuczAngQHK8CLHx6uK5hoNzSkm5F Next: Dx59e7chuVgNVHMbed79qyNQdbsx8fVBcuauCWPRKtFf Diff:
OldNewDifferences
77 let SEP = "__"
88
99 let BUFSCALE = toBigInt(1000000000000000000)
10+
11+func throwErr (msg) = throw(makeString(["ido.ride:", msg], " "))
12+
1013
1114 func convertPriceAssetIntoIdoAsset (priceAssetAmount,priceAssetMULT,price,priceMULT,idoAssetMULT) = {
1215 let bPriceAssetMULT = toBigInt(priceAssetMULT)
8083
8184
8285 func keyUSDNClaimEndHeight () = "%s__usdnClaimEndHeight"
86+
87+
88+func keyPeriodLength () = makeString(["%s", "periodLength"], SEP)
89+
90+
91+func keyCurrnetPeriod () = makeString(["%s", "currentPeriod"], SEP)
92+
93+
94+func keyPeriodStartHeight (periodNum) = makeString(["%s%s", "periodStartHeight", toString(periodNum)], SEP)
95+
96+
97+func keyPeriodEndHeight (periodNum) = makeString(["%s%s", "periodEndHeight", toString(periodNum)], SEP)
98+
99+
100+func keyUsdtPriceAssetRatio () = makeString(["%s", "usdtUsdnRatio"], SEP)
101+
102+
103+func keyTotalPeriodAllowance (assetId) = makeString(["%s%s", "totalPeriodAllowance", assetId], SEP)
104+
105+
106+func keyUserPeriodAllowance (assetId,userAddress) = makeString(["%s%s%s", "userPeriodAllowance", assetId, userAddress], SEP)
107+
108+
109+func keyPeriodTotalAvailableToClaim (assetId,periodNum) = makeString(["%s%s%s", "periodTotalAvailableToClaim", assetId, toString(periodNum)], SEP)
110+
111+
112+func keyPeriodUserAvailableToClaim (assetId,periodNum,userAddress) = makeString(["%s%s%s%s", "periodUserAvailableToClaim", assetId, toString(periodNum), userAddress], SEP)
83113
84114
85115 func keyManagerPublicKey () = "%s__managerPublicKey"
175205 then isUSDNClaimDisabled
176206 else false))
177207 then true
178- else throw("USDN claim is disabled"), if (!(if (isUSDN)
208+ else throwErr("USDN claim is disabled"), if (!(if (isUSDN)
179209 then isUSDNClaimEnded
180210 else false))
181211 then true
182- else throw("USDN claim is ended")]
212+ else throwErr("USDN claim is ended")]
183213 if ((checks == checks))
184- then if ((claimedAssetId58 == priceAssetId58))
185- then $Tuple6([0, -(claimingPriceAssetAmount), claimingPriceAssetAmount, 0], claimingPriceAssetAmount, priceAssetId, origInvestArray, newClaimPeriodHeight, [claimingPriceAssetAmount, claimingIdoAssetAmount])
186- else if ((claimedAssetId58 == idoAssetId58))
187- then $Tuple6([0, -(claimingPriceAssetAmount), 0, claimingIdoAssetAmount], claimingIdoAssetAmount, idoAssetId, origInvestArray, newClaimPeriodHeight, [claimingPriceAssetAmount, claimingIdoAssetAmount])
188- else throw(("unsupported assetId: " + claimedAssetId58))
214+ then {
215+ let totalPeriodPriceAssetAllowance = value(getInteger(keyTotalPeriodAllowance(priceAssetId58)))
216+ let userPeriodPriceAssetAllowance = value(getInteger(keyUserPeriodAllowance(priceAssetId58, userAddress58)))
217+ let currentPeriod = valueOrElse(getInteger(keyCurrnetPeriod()), 0)
218+ let periodTotalAvailableToClaim = valueOrElse(getInteger(keyPeriodTotalAvailableToClaim(priceAssetId58, currentPeriod)), totalPeriodPriceAssetAllowance)
219+ let periodUserAvailableToClaim = valueOrElse(getInteger(keyPeriodUserAvailableToClaim(priceAssetId58, currentPeriod, userAddress58)), userPeriodPriceAssetAllowance)
220+ let availableClaimingPriceAssetAmount = min([claimingPriceAssetAmount, periodTotalAvailableToClaim, periodUserAvailableToClaim])
221+ if ((claimedAssetId58 == priceAssetId58))
222+ then $Tuple6([0, -(availableClaimingPriceAssetAmount), availableClaimingPriceAssetAmount, 0], availableClaimingPriceAssetAmount, priceAssetId, origInvestArray, newClaimPeriodHeight, [availableClaimingPriceAssetAmount, claimingIdoAssetAmount, periodTotalAvailableToClaim])
223+ else if ((claimedAssetId58 == idoAssetId58))
224+ then $Tuple6([0, -(availableClaimingPriceAssetAmount), 0, availableClaimingPriceAssetAmount], claimingIdoAssetAmount, idoAssetId, origInvestArray, newClaimPeriodHeight, [availableClaimingPriceAssetAmount, claimingIdoAssetAmount, periodTotalAvailableToClaim])
225+ else throwErr(makeString(["unsupported assetId:", claimedAssetId58], " "))
226+ }
189227 else throw("Strict value is not equal to itself.")
190228 }
191229
307345 func claim (claimedAssetId58,userAddress58) = {
308346 let callerAddress58 = toString(i.caller)
309347 if ((userAddress58 != callerAddress58))
310- then throw("not authorized")
348+ then throwErr("not authorized")
311349 else {
312350 let claimResultTuple = internalClaim(claimedAssetId58, i.caller, i.transactionId)
313351 let totalsDiff = claimResultTuple._1
335373 let availablePriceAmountToClaim = availableToClaimArray[0]
336374 let availableIdoAmountToClaim = availableToClaimArray[1]
337375 $Tuple2(nil, makeString(["%s%d%d", userAddress58, toString(availablePriceAmountToClaim), toString(availableIdoAmountToClaim)], SEP))
376+ }
377+
378+
379+
380+@Callable(i)
381+func claimV2READONLY (claimedAssetId58,userAddress58) = {
382+ let claimResultTuple = internalClaim(claimedAssetId58, addressFromStringValue(userAddress58), fromBase58String(""))
383+ let totalsDiff = claimResultTuple._1
384+ let outAmount = claimResultTuple._2
385+ let outAssetId = claimResultTuple._3
386+ let origInvestArray = claimResultTuple._4
387+ let newClaimPeriodHeight = claimResultTuple._5
388+ let availableToClaimArray = claimResultTuple._6
389+ let resultString = makeString(["%d%d%d%d%d%d", "1000", "2000", "100000", "101000000", "100123456", "100"], SEP)
390+ $Tuple2(nil, resultString)
338391 }
339392
340393
Full:
OldNewDifferences
11 {-# STDLIB_VERSION 5 #-}
22 {-# SCRIPT_TYPE ACCOUNT #-}
33 {-# CONTENT_TYPE DAPP #-}
44 func getStringOrFail (key) = valueOrErrorMessage(getString(key), (("mandatory this." + key) + " is not defined"))
55
66
77 let SEP = "__"
88
99 let BUFSCALE = toBigInt(1000000000000000000)
10+
11+func throwErr (msg) = throw(makeString(["ido.ride:", msg], " "))
12+
1013
1114 func convertPriceAssetIntoIdoAsset (priceAssetAmount,priceAssetMULT,price,priceMULT,idoAssetMULT) = {
1215 let bPriceAssetMULT = toBigInt(priceAssetMULT)
1316 let bIdoAssetMULT = toBigInt(idoAssetMULT)
1417 let bPriceAssetBUF = fraction(toBigInt(priceAssetAmount), BUFSCALE, bPriceAssetMULT)
1518 let bAmountAssetBUF = fraction(bPriceAssetBUF, toBigInt(priceMULT), toBigInt(price))
1619 toInt(fraction(bAmountAssetBUF, toBigInt(idoAssetMULT), BUFSCALE))
1720 }
1821
1922
2023 let IdxCfgIdoStart = 1
2124
2225 let IdxCfgIdoDuration = 2
2326
2427 let IdxCfgClaimStart = 3
2528
2629 let IdxCfgClaimDuration = 4
2730
2831 let IdxCfgPrice = 5
2932
3033 let IdxCfgPriceMult = 6
3134
3235 let IdxCfgIdoAssetId = 7
3336
3437 let IdxCfgIdoAssetMult = 8
3538
3639 let IdxCfgPriceAssetId = 9
3740
3841 let IdxCfgPriceAssetMult = 10
3942
4043 let IdxCfgMinInvestAmount = 11
4144
4245 func fromatConfigS (idoStart,idoDuration,claimStart,claimDuration,price,priceMult,idoAssetId58,idoAssetMult,priceAssetId58,priceAssetMult,minInvestAmount,totalIdoAssetToSell) = makeString(["%d%d%d%d%d%d%s%d%s%d%d%d", idoStart, idoDuration, claimStart, claimDuration, price, priceMult, idoAssetId58, idoAssetMult, priceAssetId58, priceAssetMult, minInvestAmount, totalIdoAssetToSell], SEP)
4346
4447
4548 func fromatConfig (idoStart,idoDuration,claimStart,claimDuration,price,priceMult,idoAssetId58,idoAssetMult,priceAssetId58,priceAssetMult,minInvestAmount,totalIdoAssetToSell) = fromatConfigS(toString(idoStart), toString(idoDuration), toString(claimStart), toString(claimDuration), toString(price), toString(priceMult), idoAssetId58, toString(idoAssetMult), priceAssetId58, toString(priceAssetMult), toString(minInvestAmount), toString(totalIdoAssetToSell))
4649
4750
4851 let IdxInvTotalAmount = 1
4952
5053 let IdxInvRemainingAmount = 2
5154
5255 let IdxInvClaimedPriceAssetAmount = 3
5356
5457 let IdxInvClaimedIdoAssetAmount = 4
5558
5659 let IdxInvLastClaimedHeight = 5
5760
5861 func formatInvestorS (totalAmount,remainingAmount,claimedPriceAssetAmount,claimedIdoAssetAmount,lastClaimedHeight) = makeString(["%d%d%d%d%d", totalAmount, remainingAmount, claimedPriceAssetAmount, claimedIdoAssetAmount, lastClaimedHeight], SEP)
5962
6063
6164 func formatInvestor (totalAmount,remainingAmount,claimedPriceAssetAmount,claimedIdoAssetAmount,lastClaimedHeight) = formatInvestorS(toString(totalAmount), toString(remainingAmount), toString(claimedPriceAssetAmount), toString(claimedIdoAssetAmount), toString(lastClaimedHeight))
6265
6366
6467 func formatHistoryRecord (priceAssetAmount,idoAssetAmount) = makeString(["%d%d%d%d", toString(height), toString(lastBlock.timestamp), toString(priceAssetAmount), toString(idoAssetAmount)], SEP)
6568
6669
6770 func keyConfig () = "%s__config"
6871
6972
7073 func keyInvestor (userAddress) = ("%s__" + userAddress)
7174
7275
7376 func keyTotals () = "%s__totals"
7477
7578
7679 func keyOperationHistoryRecord (type,userAddress,txId58) = makeString(["%s%s%s%s__history", type, userAddress, txId58], SEP)
7780
7881
7982 func keyUSDNClaimDisabled () = "%s__usdnClaimDisabled"
8083
8184
8285 func keyUSDNClaimEndHeight () = "%s__usdnClaimEndHeight"
86+
87+
88+func keyPeriodLength () = makeString(["%s", "periodLength"], SEP)
89+
90+
91+func keyCurrnetPeriod () = makeString(["%s", "currentPeriod"], SEP)
92+
93+
94+func keyPeriodStartHeight (periodNum) = makeString(["%s%s", "periodStartHeight", toString(periodNum)], SEP)
95+
96+
97+func keyPeriodEndHeight (periodNum) = makeString(["%s%s", "periodEndHeight", toString(periodNum)], SEP)
98+
99+
100+func keyUsdtPriceAssetRatio () = makeString(["%s", "usdtUsdnRatio"], SEP)
101+
102+
103+func keyTotalPeriodAllowance (assetId) = makeString(["%s%s", "totalPeriodAllowance", assetId], SEP)
104+
105+
106+func keyUserPeriodAllowance (assetId,userAddress) = makeString(["%s%s%s", "userPeriodAllowance", assetId, userAddress], SEP)
107+
108+
109+func keyPeriodTotalAvailableToClaim (assetId,periodNum) = makeString(["%s%s%s", "periodTotalAvailableToClaim", assetId, toString(periodNum)], SEP)
110+
111+
112+func keyPeriodUserAvailableToClaim (assetId,periodNum,userAddress) = makeString(["%s%s%s%s", "periodUserAvailableToClaim", assetId, toString(periodNum), userAddress], SEP)
83113
84114
85115 func keyManagerPublicKey () = "%s__managerPublicKey"
86116
87117
88118 func keyPendingManagerPublicKey () = "%s__pendingManagerPublicKey"
89119
90120
91121 func readConfigArray () = split(getStringOrFail(keyConfig()), SEP)
92122
93123
94124 func readTotalsArrayOrDefaultByCustomKey (customKey) = split(valueOrElse(getString(customKey), formatInvestorS("0", "0", "0", "0", "0")), SEP)
95125
96126
97127 func readTotalsArrayOrDefault () = readTotalsArrayOrDefaultByCustomKey(keyTotals())
98128
99129
100130 func readInvestorArrayOrDefault (userAddress) = readTotalsArrayOrDefaultByCustomKey(keyInvestor(userAddress))
101131
102132
103133 func readInvestorArrayOrFail (userAddress) = split(getStringOrFail(keyInvestor(userAddress)), SEP)
104134
105135
106136 let IdxDiffTotalIncrement = 0
107137
108138 let IdxDiffRemainingPriceAmountIncrement = 1
109139
110140 let IdxDiffClaimedPriceAmountIncrement = 2
111141
112142 let IdxDiffClaimedIdoAssetAmountIncrement = 3
113143
114144 func TotalsEntry (key,origArray,incrementDiff,newLastClaimedHeight) = {
115145 let totalAmount = parseIntValue(origArray[IdxInvTotalAmount])
116146 let remainingAmount = parseIntValue(origArray[IdxInvRemainingAmount])
117147 let claimedPriceAssetAmount = parseIntValue(origArray[IdxInvClaimedPriceAssetAmount])
118148 let claimedIdoAssetAmount = parseIntValue(origArray[IdxInvClaimedIdoAssetAmount])
119149 let lastClaimedHeight = parseIntValue(origArray[IdxInvLastClaimedHeight])
120150 let newTotalAmount = (totalAmount + incrementDiff[IdxDiffTotalIncrement])
121151 let newRemainingAmount = (remainingAmount + incrementDiff[IdxDiffRemainingPriceAmountIncrement])
122152 let newClaimedPriceAssetAmount = (claimedPriceAssetAmount + incrementDiff[IdxDiffClaimedPriceAmountIncrement])
123153 let newClaimedIdoAssetAmount = (claimedIdoAssetAmount + incrementDiff[IdxDiffClaimedIdoAssetAmountIncrement])
124154 if ((0 > newRemainingAmount))
125155 then throw("invalid math")
126156 else StringEntry(key, formatInvestor(newTotalAmount, newRemainingAmount, newClaimedPriceAssetAmount, newClaimedIdoAssetAmount, newLastClaimedHeight))
127157 }
128158
129159
130160 func InvestOperationHistoryEntry (userAddress,priceAssetAmount,idoAssetAmount,txId) = StringEntry(keyOperationHistoryRecord("invest", userAddress, toBase58String(txId)), formatHistoryRecord(priceAssetAmount, idoAssetAmount))
131161
132162
133163 func ClaimOperationHistoryEntry (userAddress,priceAssetAmount,idoAssetAmount,txId) = StringEntry(keyOperationHistoryRecord("claim", userAddress, toBase58String(txId)), formatHistoryRecord(priceAssetAmount, idoAssetAmount))
134164
135165
136166 func internalClaim (claimedAssetId58,userAddress,txId) = {
137167 let cfgArray = readConfigArray()
138168 let claimStart = parseIntValue(cfgArray[IdxCfgClaimStart])
139169 let claimDuration = parseIntValue(cfgArray[IdxCfgClaimDuration])
140170 let claimEnd = (claimStart + claimDuration)
141171 let price = parseIntValue(cfgArray[IdxCfgPrice])
142172 let priceMult = parseIntValue(cfgArray[IdxCfgPriceMult])
143173 let idoAssetId58 = cfgArray[IdxCfgIdoAssetId]
144174 let idoAssetId = fromBase58String(idoAssetId58)
145175 let idoAssetMult = parseIntValue(cfgArray[IdxCfgIdoAssetMult])
146176 let priceAssetId58 = cfgArray[IdxCfgPriceAssetId]
147177 let priceAssetId = fromBase58String(priceAssetId58)
148178 let priceAssetMult = parseIntValue(cfgArray[IdxCfgPriceAssetMult])
149179 let userAddress58 = toString(userAddress)
150180 let origInvestArray = readInvestorArrayOrFail(userAddress58)
151181 let investTotalAmount = parseIntValue(origInvestArray[IdxInvTotalAmount])
152182 let investLastClaimedHeightTMP = parseIntValue(origInvestArray[IdxInvLastClaimedHeight])
153183 let investLastClaimedHeight = if ((claimStart >= investLastClaimedHeightTMP))
154184 then claimStart
155185 else investLastClaimedHeightTMP
156186 let newClaimPeriodHeight = if ((height > claimEnd))
157187 then claimEnd
158188 else if ((claimStart > height))
159189 then claimStart
160190 else height
161191 let claimingBlocks = (newClaimPeriodHeight - investLastClaimedHeight)
162192 let claimingPriceAssetAmount = fraction(investTotalAmount, claimingBlocks, claimDuration)
163193 let claimingIdoAssetAmount = convertPriceAssetIntoIdoAsset(claimingPriceAssetAmount, priceAssetMult, price, priceMult, idoAssetMult)
164194 let isUSDN = (claimedAssetId58 == priceAssetId58)
165195 let isUSDNClaimDisabled = valueOrElse(getBoolean(keyUSDNClaimDisabled()), false)
166196 let isUSDNClaimEnded = match getInteger(keyUSDNClaimEndHeight()) {
167197 case end: Int =>
168198 (height > end)
169199 case _: Unit =>
170200 false
171201 case _ =>
172202 throw("Match error")
173203 }
174204 let checks = [if (!(if (isUSDN)
175205 then isUSDNClaimDisabled
176206 else false))
177207 then true
178- else throw("USDN claim is disabled"), if (!(if (isUSDN)
208+ else throwErr("USDN claim is disabled"), if (!(if (isUSDN)
179209 then isUSDNClaimEnded
180210 else false))
181211 then true
182- else throw("USDN claim is ended")]
212+ else throwErr("USDN claim is ended")]
183213 if ((checks == checks))
184- then if ((claimedAssetId58 == priceAssetId58))
185- then $Tuple6([0, -(claimingPriceAssetAmount), claimingPriceAssetAmount, 0], claimingPriceAssetAmount, priceAssetId, origInvestArray, newClaimPeriodHeight, [claimingPriceAssetAmount, claimingIdoAssetAmount])
186- else if ((claimedAssetId58 == idoAssetId58))
187- then $Tuple6([0, -(claimingPriceAssetAmount), 0, claimingIdoAssetAmount], claimingIdoAssetAmount, idoAssetId, origInvestArray, newClaimPeriodHeight, [claimingPriceAssetAmount, claimingIdoAssetAmount])
188- else throw(("unsupported assetId: " + claimedAssetId58))
214+ then {
215+ let totalPeriodPriceAssetAllowance = value(getInteger(keyTotalPeriodAllowance(priceAssetId58)))
216+ let userPeriodPriceAssetAllowance = value(getInteger(keyUserPeriodAllowance(priceAssetId58, userAddress58)))
217+ let currentPeriod = valueOrElse(getInteger(keyCurrnetPeriod()), 0)
218+ let periodTotalAvailableToClaim = valueOrElse(getInteger(keyPeriodTotalAvailableToClaim(priceAssetId58, currentPeriod)), totalPeriodPriceAssetAllowance)
219+ let periodUserAvailableToClaim = valueOrElse(getInteger(keyPeriodUserAvailableToClaim(priceAssetId58, currentPeriod, userAddress58)), userPeriodPriceAssetAllowance)
220+ let availableClaimingPriceAssetAmount = min([claimingPriceAssetAmount, periodTotalAvailableToClaim, periodUserAvailableToClaim])
221+ if ((claimedAssetId58 == priceAssetId58))
222+ then $Tuple6([0, -(availableClaimingPriceAssetAmount), availableClaimingPriceAssetAmount, 0], availableClaimingPriceAssetAmount, priceAssetId, origInvestArray, newClaimPeriodHeight, [availableClaimingPriceAssetAmount, claimingIdoAssetAmount, periodTotalAvailableToClaim])
223+ else if ((claimedAssetId58 == idoAssetId58))
224+ then $Tuple6([0, -(availableClaimingPriceAssetAmount), 0, availableClaimingPriceAssetAmount], claimingIdoAssetAmount, idoAssetId, origInvestArray, newClaimPeriodHeight, [availableClaimingPriceAssetAmount, claimingIdoAssetAmount, periodTotalAvailableToClaim])
225+ else throwErr(makeString(["unsupported assetId:", claimedAssetId58], " "))
226+ }
189227 else throw("Strict value is not equal to itself.")
190228 }
191229
192230
193231 func managerPublicKeyOrUnit () = match getString(keyManagerPublicKey()) {
194232 case s: String =>
195233 fromBase58String(s)
196234 case _: Unit =>
197235 unit
198236 case _ =>
199237 throw("Match error")
200238 }
201239
202240
203241 func pendingManagerPublicKeyOrUnit () = match getString(keyPendingManagerPublicKey()) {
204242 case s: String =>
205243 fromBase58String(s)
206244 case _: Unit =>
207245 unit
208246 case _ =>
209247 throw("Match error")
210248 }
211249
212250
213251 func mustManager (i) = {
214252 let pd = throw("Permission denied")
215253 match managerPublicKeyOrUnit() {
216254 case pk: ByteVector =>
217255 if ((i.callerPublicKey == pk))
218256 then true
219257 else pd
220258 case _: Unit =>
221259 if ((i.caller == this))
222260 then true
223261 else pd
224262 case _ =>
225263 throw("Match error")
226264 }
227265 }
228266
229267
230268 @Callable(i)
231269 func constructor (idoStart,idoDuration,claimStart,claimDuration,price,priceAssetId58,minInvestAmount) = {
232270 let priceMult = ((100 * 1000) * 1000)
233271 let idoEnd = (idoStart + idoDuration)
234272 if (isDefined(getString(keyConfig())))
235273 then throw("already initialized")
236274 else if (("3PMEHLx1j6zerarZTYfsGqDeeZqQoMpxq5S" != toString(i.caller)))
237275 then throw("not authorized")
238276 else if ((size(i.payments) != 1))
239277 then throw("exactly 1 payment must be attached")
240278 else if ((idoEnd >= claimStart))
241279 then throw("claimStart must be greater than idoEnd")
242280 else {
243281 let pmt = value(i.payments[0])
244282 let idoAssetId = value(pmt.assetId)
245283 let idoAssetInfo = valueOrErrorMessage(assetInfo(idoAssetId), "fail to load ido asset info")
246284 let idoAssetId58 = toBase58String(idoAssetId)
247285 let idoAssetMult = pow(10, 0, idoAssetInfo.decimals, 0, 0, DOWN)
248286 let priceAssetId = fromBase58String(priceAssetId58)
249287 let priceAssetInfo = valueOrErrorMessage(assetInfo(priceAssetId), "fail to load price asset info")
250288 let priceAssetMult = pow(10, 0, priceAssetInfo.decimals, 0, 0, DOWN)
251289 let origTotalsArray = readTotalsArrayOrDefault()
252290 let totalsDiff = [0, 0, 0, 0]
253291 [StringEntry(keyConfig(), fromatConfig(idoStart, idoDuration, claimStart, claimDuration, price, priceMult, idoAssetId58, idoAssetMult, priceAssetId58, priceAssetMult, minInvestAmount, pmt.amount)), TotalsEntry(keyTotals(), origTotalsArray, totalsDiff, claimStart)]
254292 }
255293 }
256294
257295
258296
259297 @Callable(i)
260298 func invest () = {
261299 let cfgArray = readConfigArray()
262300 let idoStart = parseIntValue(cfgArray[IdxCfgIdoStart])
263301 let idoDuration = parseIntValue(cfgArray[IdxCfgIdoDuration])
264302 let idoEnd = (idoStart + idoDuration)
265303 let claimStart = parseIntValue(cfgArray[IdxCfgClaimStart])
266304 let claimDuration = parseIntValue(cfgArray[IdxCfgClaimDuration])
267305 let price = parseIntValue(cfgArray[IdxCfgPrice])
268306 let priceMult = parseIntValue(cfgArray[IdxCfgPriceMult])
269307 let idoAssetId58 = cfgArray[IdxCfgIdoAssetId]
270308 let idoAssetId = fromBase58String(idoAssetId58)
271309 let idoAssetMult = parseIntValue(cfgArray[IdxCfgIdoAssetMult])
272310 let priceAssetId58 = cfgArray[IdxCfgPriceAssetId]
273311 let priceAssetId = fromBase58String(priceAssetId58)
274312 let priceAssetMult = parseIntValue(cfgArray[IdxCfgPriceAssetMult])
275313 let minIvestAmount = parseIntValue(cfgArray[IdxCfgMinInvestAmount])
276314 let userAddress = toString(i.caller)
277315 if ((idoStart > height))
278316 then throw("ido has not been started yet")
279317 else if ((height > idoEnd))
280318 then throw("ido has been already ended")
281319 else if ((size(i.payments) != 1))
282320 then throw("exactly 1 payment is expected")
283321 else {
284322 let pmt = value(i.payments[0])
285323 let pmtAssetId = value(pmt.assetId)
286324 let pmtAmount = pmt.amount
287325 if ((pmtAssetId != priceAssetId))
288326 then throw((("invalid payment asset id: " + toBase58String(pmtAssetId)) + " is expected"))
289327 else {
290328 let origInvestorArray = readInvestorArrayOrDefault(userAddress)
291329 let origTotalsArray = readTotalsArrayOrDefault()
292330 let newPriceTotalAmount = (parseIntValue(origTotalsArray[IdxInvTotalAmount]) + pmtAmount)
293331 let requiredIdoAssetAmount = (newPriceTotalAmount * 100)
294332 if ((requiredIdoAssetAmount > assetBalance(this, idoAssetId)))
295333 then throw("IDO asset has been - sold consider to use smaller payment")
296334 else {
297335 let totalsDiff = [pmtAmount, pmtAmount, 0, 0]
298336 [TotalsEntry(keyInvestor(userAddress), origInvestorArray, totalsDiff, claimStart), TotalsEntry(keyTotals(), origTotalsArray, totalsDiff, claimStart), InvestOperationHistoryEntry(userAddress, pmtAmount, 0, i.transactionId)]
299337 }
300338 }
301339 }
302340 }
303341
304342
305343
306344 @Callable(i)
307345 func claim (claimedAssetId58,userAddress58) = {
308346 let callerAddress58 = toString(i.caller)
309347 if ((userAddress58 != callerAddress58))
310- then throw("not authorized")
348+ then throwErr("not authorized")
311349 else {
312350 let claimResultTuple = internalClaim(claimedAssetId58, i.caller, i.transactionId)
313351 let totalsDiff = claimResultTuple._1
314352 let outAmount = claimResultTuple._2
315353 let outAssetId = claimResultTuple._3
316354 let origInvestArray = claimResultTuple._4
317355 let newClaimPeriodHeight = claimResultTuple._5
318356 let claimedPriceAmountFromDiff = totalsDiff[IdxDiffClaimedPriceAmountIncrement]
319357 let claimedIdoAssetAmountFromDiff = totalsDiff[IdxDiffClaimedIdoAssetAmountIncrement]
320358 $Tuple2([ScriptTransfer(i.caller, outAmount, outAssetId), TotalsEntry(keyInvestor(userAddress58), origInvestArray, totalsDiff, newClaimPeriodHeight), TotalsEntry(keyTotals(), readTotalsArrayOrDefault(), totalsDiff, newClaimPeriodHeight), ClaimOperationHistoryEntry(userAddress58, claimedPriceAmountFromDiff, claimedIdoAssetAmountFromDiff, i.transactionId)], unit)
321359 }
322360 }
323361
324362
325363
326364 @Callable(i)
327365 func claimREADONLY (claimedAssetId58,userAddress58) = {
328366 let claimResultTuple = internalClaim(claimedAssetId58, addressFromStringValue(userAddress58), fromBase58String(""))
329367 let totalsDiff = claimResultTuple._1
330368 let outAmount = claimResultTuple._2
331369 let outAssetId = claimResultTuple._3
332370 let origInvestArray = claimResultTuple._4
333371 let newClaimPeriodHeight = claimResultTuple._5
334372 let availableToClaimArray = claimResultTuple._6
335373 let availablePriceAmountToClaim = availableToClaimArray[0]
336374 let availableIdoAmountToClaim = availableToClaimArray[1]
337375 $Tuple2(nil, makeString(["%s%d%d", userAddress58, toString(availablePriceAmountToClaim), toString(availableIdoAmountToClaim)], SEP))
376+ }
377+
378+
379+
380+@Callable(i)
381+func claimV2READONLY (claimedAssetId58,userAddress58) = {
382+ let claimResultTuple = internalClaim(claimedAssetId58, addressFromStringValue(userAddress58), fromBase58String(""))
383+ let totalsDiff = claimResultTuple._1
384+ let outAmount = claimResultTuple._2
385+ let outAssetId = claimResultTuple._3
386+ let origInvestArray = claimResultTuple._4
387+ let newClaimPeriodHeight = claimResultTuple._5
388+ let availableToClaimArray = claimResultTuple._6
389+ let resultString = makeString(["%d%d%d%d%d%d", "1000", "2000", "100000", "101000000", "100123456", "100"], SEP)
390+ $Tuple2(nil, resultString)
338391 }
339392
340393
341394
342395 @Callable(i)
343396 func setManager (pendingManagerPublicKey) = {
344397 let checkCaller = mustManager(i)
345398 if ((checkCaller == checkCaller))
346399 then {
347400 let checkManagerPublicKey = fromBase58String(pendingManagerPublicKey)
348401 if ((checkManagerPublicKey == checkManagerPublicKey))
349402 then [StringEntry(keyPendingManagerPublicKey(), pendingManagerPublicKey)]
350403 else throw("Strict value is not equal to itself.")
351404 }
352405 else throw("Strict value is not equal to itself.")
353406 }
354407
355408
356409
357410 @Callable(i)
358411 func confirmManager () = {
359412 let pm = pendingManagerPublicKeyOrUnit()
360413 let hasPM = if (isDefined(pm))
361414 then true
362415 else throw("No pending manager")
363416 if ((hasPM == hasPM))
364417 then {
365418 let checkPM = if ((i.callerPublicKey == value(pm)))
366419 then true
367420 else throw("You are not pending manager")
368421 if ((checkPM == checkPM))
369422 then [StringEntry(keyManagerPublicKey(), toBase58String(value(pm))), DeleteEntry(keyPendingManagerPublicKey())]
370423 else throw("Strict value is not equal to itself.")
371424 }
372425 else throw("Strict value is not equal to itself.")
373426 }
374427
375428
376429 @Verifier(tx)
377430 func verify () = {
378431 let targetPublicKey = match managerPublicKeyOrUnit() {
379432 case pk: ByteVector =>
380433 pk
381434 case _: Unit =>
382435 tx.senderPublicKey
383436 case _ =>
384437 throw("Match error")
385438 }
386439 sigVerify(tx.bodyBytes, tx.proofs[0], targetPublicKey)
387440 }
388441

github/deemru/w8io/169f3d6 
53.19 ms