tx · BYFf18BfN9tf27BNhAQPMaJkRPWBMDL1uR8NNCwKgtco

3MvZpvvbmovEt3pvdDZKvhKRjjQxdbUD6Tv:  -0.02500000 Waves

2022.11.02 20:55 [2299812] smart account 3MvZpvvbmovEt3pvdDZKvhKRjjQxdbUD6Tv > SELF 0.00000000 Waves

{ "type": 13, "id": "BYFf18BfN9tf27BNhAQPMaJkRPWBMDL1uR8NNCwKgtco", "fee": 2500000, "feeAssetId": null, "timestamp": 1667411757155, "version": 1, "sender": "3MvZpvvbmovEt3pvdDZKvhKRjjQxdbUD6Tv", "senderPublicKey": "39YkRD2qWXTcdNBr4CbDnm8g8SAB2FKVaDeGYahcFHHx", "proofs": [ "AwdNo7fQ5zqnToT8zK88aXURizXA6gDfVUNfMhhDSYK83tqbFbvYGFvUHV21A6WWRzhHzLn53UYDUUEX6mg3SEG" ], "script": "base64:AAIFAAAAAAAADkcIAhIJCgcBAQEBAQgBEgASBAoCCAgSBAoCCAgSBAoCCAgSAwoBCBIAIg9nZXRTdHJpbmdPckZhaWwiA2tleSIDU0VQIghCVUZTQ0FMRSIGc2NhbGU4Igh0aHJvd0VyciIDbXNnIh1jb252ZXJ0UHJpY2VBc3NldEludG9JZG9Bc3NldCIQcHJpY2VBc3NldEFtb3VudCIOcHJpY2VBc3NldE1VTFQiBXByaWNlIglwcmljZU1VTFQiDGlkb0Fzc2V0TVVMVCIPYlByaWNlQXNzZXRNVUxUIg1iSWRvQXNzZXRNVUxUIg5iUHJpY2VBc3NldEJVRiIPYkFtb3VudEFzc2V0QlVGIg5JZHhDZmdJZG9TdGFydCIRSWR4Q2ZnSWRvRHVyYXRpb24iEElkeENmZ0NsYWltU3RhcnQiE0lkeENmZ0NsYWltRHVyYXRpb24iC0lkeENmZ1ByaWNlIg9JZHhDZmdQcmljZU11bHQiEElkeENmZ0lkb0Fzc2V0SWQiEklkeENmZ0lkb0Fzc2V0TXVsdCISSWR4Q2ZnUHJpY2VBc3NldElkIhRJZHhDZmdQcmljZUFzc2V0TXVsdCIVSWR4Q2ZnTWluSW52ZXN0QW1vdW50Ig1mcm9tYXRDb25maWdTIghpZG9TdGFydCILaWRvRHVyYXRpb24iCmNsYWltU3RhcnQiDWNsYWltRHVyYXRpb24iCXByaWNlTXVsdCIMaWRvQXNzZXRJZDU4IgxpZG9Bc3NldE11bHQiDnByaWNlQXNzZXRJZDU4Ig5wcmljZUFzc2V0TXVsdCIPbWluSW52ZXN0QW1vdW50IhN0b3RhbElkb0Fzc2V0VG9TZWxsIgxmcm9tYXRDb25maWciEUlkeEludlRvdGFsQW1vdW50IhVJZHhJbnZSZW1haW5pbmdBbW91bnQiHUlkeEludkNsYWltZWRQcmljZUFzc2V0QW1vdW50IhtJZHhJbnZDbGFpbWVkSWRvQXNzZXRBbW91bnQiF0lkeEludkxhc3RDbGFpbWVkSGVpZ2h0Ig9mb3JtYXRJbnZlc3RvclMiC3RvdGFsQW1vdW50Ig9yZW1haW5pbmdBbW91bnQiF2NsYWltZWRQcmljZUFzc2V0QW1vdW50IhVjbGFpbWVkSWRvQXNzZXRBbW91bnQiEWxhc3RDbGFpbWVkSGVpZ2h0Ig5mb3JtYXRJbnZlc3RvciITZm9ybWF0SGlzdG9yeVJlY29yZCIOaWRvQXNzZXRBbW91bnQiCWtleUNvbmZpZyILa2V5SW52ZXN0b3IiC3VzZXJBZGRyZXNzIglrZXlUb3RhbHMiGWtleU9wZXJhdGlvbkhpc3RvcnlSZWNvcmQiBHR5cGUiBnR4SWQ1OCIUa2V5VVNETkNsYWltRGlzYWJsZWQiFWtleVVTRE5DbGFpbUVuZEhlaWdodCIPa2V5UGVyaW9kTGVuZ3RoIhBrZXlDdXJyZW50UGVyaW9kIhRrZXlQZXJpb2RTdGFydEhlaWdodCIJcGVyaW9kTnVtIhJrZXlQZXJpb2RFbmRIZWlnaHQiH2tleVVzZHRQcmljZUFzc2V0QWxsb3dhYmxlUmF0aW8iF2tleVRvdGFsUGVyaW9kQWxsb3dhbmNlIgdhc3NldElkIhZrZXlVc2VyUGVyaW9kQWxsb3dhbmNlIh5rZXlQZXJpb2RUb3RhbEF2YWlsYWJsZVRvQ2xhaW0iHWtleVBlcmlvZFVzZXJBdmFpbGFibGVUb0NsYWltIhtrZXlVc2R0UHJpY2VBc3NldFN0YWJsZVBvb2wiDmtleVVzZHRBc3NldElkIhRrZXlQcmljZUFzc2V0QmFsYW5jZSIHYWRkcmVzcyITa2V5TWFuYWdlclB1YmxpY0tleSIaa2V5UGVuZGluZ01hbmFnZXJQdWJsaWNLZXkiD3JlYWRDb25maWdBcnJheSIjcmVhZFRvdGFsc0FycmF5T3JEZWZhdWx0QnlDdXN0b21LZXkiCWN1c3RvbUtleSIYcmVhZFRvdGFsc0FycmF5T3JEZWZhdWx0IhpyZWFkSW52ZXN0b3JBcnJheU9yRGVmYXVsdCIXcmVhZEludmVzdG9yQXJyYXlPckZhaWwiFUlkeERpZmZUb3RhbEluY3JlbWVudCIkSWR4RGlmZlJlbWFpbmluZ1ByaWNlQW1vdW50SW5jcmVtZW50IiJJZHhEaWZmQ2xhaW1lZFByaWNlQW1vdW50SW5jcmVtZW50IiVJZHhEaWZmQ2xhaW1lZElkb0Fzc2V0QW1vdW50SW5jcmVtZW50IgtUb3RhbHNFbnRyeSIJb3JpZ0FycmF5Ig1pbmNyZW1lbnREaWZmIhRuZXdMYXN0Q2xhaW1lZEhlaWdodCIObmV3VG90YWxBbW91bnQiEm5ld1JlbWFpbmluZ0Ftb3VudCIabmV3Q2xhaW1lZFByaWNlQXNzZXRBbW91bnQiGG5ld0NsYWltZWRJZG9Bc3NldEFtb3VudCIbSW52ZXN0T3BlcmF0aW9uSGlzdG9yeUVudHJ5IgR0eElkIhpDbGFpbU9wZXJhdGlvbkhpc3RvcnlFbnRyeSINaW50ZXJuYWxDbGFpbSIQY2xhaW1lZEFzc2V0SWQ1OCIIY2ZnQXJyYXkiCGNsYWltRW5kIgppZG9Bc3NldElkIgxwcmljZUFzc2V0SWQiDXVzZXJBZGRyZXNzNTgiD29yaWdJbnZlc3RBcnJheSIRaW52ZXN0VG90YWxBbW91bnQiGmludmVzdExhc3RDbGFpbWVkSGVpZ2h0VE1QIhdpbnZlc3RMYXN0Q2xhaW1lZEhlaWdodCIUbmV3Q2xhaW1QZXJpb2RIZWlnaHQiDmNsYWltaW5nQmxvY2tzIhhjbGFpbWluZ1ByaWNlQXNzZXRBbW91bnQiFmNsYWltaW5nSWRvQXNzZXRBbW91bnQiBmlzVVNETiITaXNVU0ROQ2xhaW1EaXNhYmxlZCIQaXNVU0ROQ2xhaW1FbmRlZCIHJG1hdGNoMCIDZW5kIgZjaGVja3MiD2ludGVybmFsQ2xhaW1WMiIJb3V0QW1vdW50Ihl0b3RhbFVzZXJBdmFpbGFibGVUb0NsYWltIh50b3RhbFBlcmlvZFByaWNlQXNzZXRBbGxvd2FuY2UiHXVzZXJQZXJpb2RQcmljZUFzc2V0QWxsb3dhbmNlIgxwZXJpb2RMZW5ndGgiDWN1cnJlbnRQZXJpb2QiDSR0MDExOTQ3MTI4NjUiFWxhc3RQZXJpb2RTdGFydEhlaWdodCITbGFzdFBlcmlvZEVuZEhlaWdodCINJHQwMTIyMTUxMjU5NyIUdXBkYXRlZEN1cnJlbnRQZXJpb2QiC3BlcmlvZFN0YXJ0IglwZXJpb2RFbmQiG3BlcmlvZFRvdGFsQXZhaWxhYmxlVG9DbGFpbSIacGVyaW9kVXNlckF2YWlsYWJsZVRvQ2xhaW0iGXBlcmlvZE1pbkF2YWlsYWJsZVRvQ2xhaW0iHHVzZHRQcmljZUFzc2V0QWxsb3dhYmxlUmF0aW8iG3B1dE9uZVRrblYyUHJpY2VBc3NldEFtb3VudCINJHQwMTM1MDgxMzc2MSIBQCIFYm9udXMiCWZlZUFtb3VudCIIbHBBbW91bnQiC3VzZHRBc3NldElkIg0kdDAxMzgyMzE0MDQxIhRnZXRPbmVUa25WMkZlZUFtb3VudCIKdXNkdEFtb3VudCIaY3VycmVudFVzZHRQcmljZUFzc2V0UmF0aW8iE2VuZFBlcmlvZEJsb2Nrc0xlZnQiFm1hbmFnZXJQdWJsaWNLZXlPclVuaXQiAXMiHXBlbmRpbmdNYW5hZ2VyUHVibGljS2V5T3JVbml0IgttdXN0TWFuYWdlciIBaSICcGQiAnBrIgZpZG9FbmQiA3BtdCIMaWRvQXNzZXRJbmZvIg5wcmljZUFzc2V0SW5mbyIPb3JpZ1RvdGFsc0FycmF5Igp0b3RhbHNEaWZmIg5taW5JdmVzdEFtb3VudCIKcG10QXNzZXRJZCIJcG10QW1vdW50IhFvcmlnSW52ZXN0b3JBcnJheSITbmV3UHJpY2VUb3RhbEFtb3VudCIWcmVxdWlyZWRJZG9Bc3NldEFtb3VudCIPY2FsbGVyQWRkcmVzczU4IhBjbGFpbVJlc3VsdFR1cGxlIgpvdXRBc3NldElkIhpjbGFpbWVkUHJpY2VBbW91bnRGcm9tRGlmZiIdY2xhaW1lZElkb0Fzc2V0QW1vdW50RnJvbURpZmYiB2VudHJpZXMiDSR0MDE5Njk3MjAxNDEiEXByaWNlQXNzZXRCYWxhbmNlIiJ1cGRhdGVkUGVyaW9kVG90YWxBdmFpbGFibGVUb0NsYWltIiF1cGRhdGVkUGVyaW9kVXNlckF2YWlsYWJsZVRvQ2xhaW0iGHVwZGF0ZWRQcmljZUFzc2V0QmFsYW5jZSIVYXZhaWxhYmxlVG9DbGFpbUFycmF5IhthdmFpbGFibGVQcmljZUFtb3VudFRvQ2xhaW0iGWF2YWlsYWJsZUlkb0Ftb3VudFRvQ2xhaW0iDSR0MDI1OTE0MjYzMjYiFmN1cnJlbnRQZXJpb2RFbmRIZWlnaHQiDHJlc3VsdFN0cmluZyIMcGVyaW9kTGVuZ2h0IhN1c2VyUGVyaW9kQWxsb3dhbmNlIhR0b3RhbFBlcmlvZEFsbG93YW5jZSIXcGVuZGluZ01hbmFnZXJQdWJsaWNLZXkiC2NoZWNrQ2FsbGVyIhVjaGVj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", "chainId": 84, "height": 2299812, "applicationStatus": "succeeded", "spentComplexity": 0 } View: original | compacted Prev: 6Pyeu4rysR1tH9b9iEZTFzGJWscV4Mjwftqita2iRytZ Next: 52PxxDhS39AfWmJC3nB4ZjYx541kTmwi7bEfBwrxN2wg Diff:
OldNewDifferences
507507 let updatedCurrentPeriod = $t02591426326._8
508508 let periodStart = $t02591426326._9
509509 let periodEnd = $t02591426326._10
510- let resultString = makeString(["%d%d%d%d%d%d", toString(availableIdoAmountToClaim), toString(periodMinAvailableToClaim), toString(periodTotalAvailableToClaim), toString(usdtPriceAssetAllowableRatio), toString(currentUsdtPriceAssetRatio), toString(endPeriodBlocksLeft)], SEP)
510+ let currentPeriodEndHeight = value(getInteger(keyPeriodEndHeight(updatedCurrentPeriod)))
511+ let resultString = if ((height > currentPeriodEndHeight))
512+ then {
513+ let periodLenght = value(getInteger(keyPeriodLength()))
514+ let userPeriodAllowance = value(getInteger(keyUserPeriodAllowance(priceAssetId58)))
515+ let totalPeriodAllowance = value(getInteger(keyTotalPeriodAllowance(priceAssetId58)))
516+ makeString(["%d%d%d%d%d%d", toString(availableIdoAmountToClaim), toString(userPeriodAllowance), toString(totalPeriodAllowance), toString(usdtPriceAssetAllowableRatio), toString(currentUsdtPriceAssetRatio), toString(periodLenght)], SEP)
517+ }
518+ else makeString(["%d%d%d%d%d%d", toString(availableIdoAmountToClaim), toString(periodMinAvailableToClaim), toString(periodTotalAvailableToClaim), toString(usdtPriceAssetAllowableRatio), toString(currentUsdtPriceAssetRatio), toString(endPeriodBlocksLeft)], SEP)
511519 $Tuple2(nil, resultString)
512520 }
513521
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)
1010
1111 let scale8 = 100000000
1212
1313 func throwErr (msg) = throw(makeString(["ido.ride:", msg], " "))
1414
1515
1616 func convertPriceAssetIntoIdoAsset (priceAssetAmount,priceAssetMULT,price,priceMULT,idoAssetMULT) = {
1717 let bPriceAssetMULT = toBigInt(priceAssetMULT)
1818 let bIdoAssetMULT = toBigInt(idoAssetMULT)
1919 let bPriceAssetBUF = fraction(toBigInt(priceAssetAmount), BUFSCALE, bPriceAssetMULT)
2020 let bAmountAssetBUF = fraction(bPriceAssetBUF, toBigInt(priceMULT), toBigInt(price))
2121 toInt(fraction(bAmountAssetBUF, toBigInt(idoAssetMULT), BUFSCALE))
2222 }
2323
2424
2525 let IdxCfgIdoStart = 1
2626
2727 let IdxCfgIdoDuration = 2
2828
2929 let IdxCfgClaimStart = 3
3030
3131 let IdxCfgClaimDuration = 4
3232
3333 let IdxCfgPrice = 5
3434
3535 let IdxCfgPriceMult = 6
3636
3737 let IdxCfgIdoAssetId = 7
3838
3939 let IdxCfgIdoAssetMult = 8
4040
4141 let IdxCfgPriceAssetId = 9
4242
4343 let IdxCfgPriceAssetMult = 10
4444
4545 let IdxCfgMinInvestAmount = 11
4646
4747 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)
4848
4949
5050 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))
5151
5252
5353 let IdxInvTotalAmount = 1
5454
5555 let IdxInvRemainingAmount = 2
5656
5757 let IdxInvClaimedPriceAssetAmount = 3
5858
5959 let IdxInvClaimedIdoAssetAmount = 4
6060
6161 let IdxInvLastClaimedHeight = 5
6262
6363 func formatInvestorS (totalAmount,remainingAmount,claimedPriceAssetAmount,claimedIdoAssetAmount,lastClaimedHeight) = makeString(["%d%d%d%d%d", totalAmount, remainingAmount, claimedPriceAssetAmount, claimedIdoAssetAmount, lastClaimedHeight], SEP)
6464
6565
6666 func formatInvestor (totalAmount,remainingAmount,claimedPriceAssetAmount,claimedIdoAssetAmount,lastClaimedHeight) = formatInvestorS(toString(totalAmount), toString(remainingAmount), toString(claimedPriceAssetAmount), toString(claimedIdoAssetAmount), toString(lastClaimedHeight))
6767
6868
6969 func formatHistoryRecord (priceAssetAmount,idoAssetAmount) = makeString(["%d%d%d%d", toString(height), toString(lastBlock.timestamp), toString(priceAssetAmount), toString(idoAssetAmount)], SEP)
7070
7171
7272 func keyConfig () = "%s__config"
7373
7474
7575 func keyInvestor (userAddress) = ("%s__" + userAddress)
7676
7777
7878 func keyTotals () = "%s__totals"
7979
8080
8181 func keyOperationHistoryRecord (type,userAddress,txId58) = makeString(["%s%s%s%s__history", type, userAddress, txId58], SEP)
8282
8383
8484 func keyUSDNClaimDisabled () = "%s__usdnClaimDisabled"
8585
8686
8787 func keyUSDNClaimEndHeight () = "%s__usdnClaimEndHeight"
8888
8989
9090 func keyPeriodLength () = makeString(["%s", "periodLength"], SEP)
9191
9292
9393 func keyCurrentPeriod () = makeString(["%s", "currentPeriod"], SEP)
9494
9595
9696 func keyPeriodStartHeight (periodNum) = makeString(["%s%s", "periodStartHeight", toString(periodNum)], SEP)
9797
9898
9999 func keyPeriodEndHeight (periodNum) = makeString(["%s%s", "periodEndHeight", toString(periodNum)], SEP)
100100
101101
102102 func keyUsdtPriceAssetAllowableRatio () = makeString(["%s", "usdtPriceAssetAllowableRatio"], SEP)
103103
104104
105105 func keyTotalPeriodAllowance (assetId) = makeString(["%s%s", "totalPeriodAllowance", assetId], SEP)
106106
107107
108108 func keyUserPeriodAllowance (assetId) = makeString(["%s%s", "userPeriodAllowance", assetId], SEP)
109109
110110
111111 func keyPeriodTotalAvailableToClaim (assetId,periodNum) = makeString(["%s%s%s", "periodTotalAvailableToClaim", assetId, toString(periodNum)], SEP)
112112
113113
114114 func keyPeriodUserAvailableToClaim (assetId,periodNum,userAddress) = makeString(["%s%s%s%s", "periodUserAvailableToClaim", assetId, toString(periodNum), userAddress], SEP)
115115
116116
117117 func keyUsdtPriceAssetStablePool () = makeString(["%s", "usdtPriceAssetStablePool"], SEP)
118118
119119
120120 func keyUsdtAssetId () = makeString(["%s", "usdtAssetId"], SEP)
121121
122122
123123 func keyPriceAssetBalance (address) = makeString(["%s%s", "priceAssetBalance", address], SEP)
124124
125125
126126 func keyManagerPublicKey () = "%s__managerPublicKey"
127127
128128
129129 func keyPendingManagerPublicKey () = "%s__pendingManagerPublicKey"
130130
131131
132132 func readConfigArray () = split(getStringOrFail(keyConfig()), SEP)
133133
134134
135135 func readTotalsArrayOrDefaultByCustomKey (customKey) = split(valueOrElse(getString(customKey), formatInvestorS("0", "0", "0", "0", "0")), SEP)
136136
137137
138138 func readTotalsArrayOrDefault () = readTotalsArrayOrDefaultByCustomKey(keyTotals())
139139
140140
141141 func readInvestorArrayOrDefault (userAddress) = readTotalsArrayOrDefaultByCustomKey(keyInvestor(userAddress))
142142
143143
144144 func readInvestorArrayOrFail (userAddress) = split(getStringOrFail(keyInvestor(userAddress)), SEP)
145145
146146
147147 let IdxDiffTotalIncrement = 0
148148
149149 let IdxDiffRemainingPriceAmountIncrement = 1
150150
151151 let IdxDiffClaimedPriceAmountIncrement = 2
152152
153153 let IdxDiffClaimedIdoAssetAmountIncrement = 3
154154
155155 func TotalsEntry (key,origArray,incrementDiff,newLastClaimedHeight) = {
156156 let totalAmount = parseIntValue(origArray[IdxInvTotalAmount])
157157 let remainingAmount = parseIntValue(origArray[IdxInvRemainingAmount])
158158 let claimedPriceAssetAmount = parseIntValue(origArray[IdxInvClaimedPriceAssetAmount])
159159 let claimedIdoAssetAmount = parseIntValue(origArray[IdxInvClaimedIdoAssetAmount])
160160 let lastClaimedHeight = parseIntValue(origArray[IdxInvLastClaimedHeight])
161161 let newTotalAmount = (totalAmount + incrementDiff[IdxDiffTotalIncrement])
162162 let newRemainingAmount = (remainingAmount + incrementDiff[IdxDiffRemainingPriceAmountIncrement])
163163 let newClaimedPriceAssetAmount = (claimedPriceAssetAmount + incrementDiff[IdxDiffClaimedPriceAmountIncrement])
164164 let newClaimedIdoAssetAmount = (claimedIdoAssetAmount + incrementDiff[IdxDiffClaimedIdoAssetAmountIncrement])
165165 if ((0 > newRemainingAmount))
166166 then throw("invalid math")
167167 else StringEntry(key, formatInvestor(newTotalAmount, newRemainingAmount, newClaimedPriceAssetAmount, newClaimedIdoAssetAmount, newLastClaimedHeight))
168168 }
169169
170170
171171 func InvestOperationHistoryEntry (userAddress,priceAssetAmount,idoAssetAmount,txId) = StringEntry(keyOperationHistoryRecord("invest", userAddress, toBase58String(txId)), formatHistoryRecord(priceAssetAmount, idoAssetAmount))
172172
173173
174174 func ClaimOperationHistoryEntry (userAddress,priceAssetAmount,idoAssetAmount,txId) = StringEntry(keyOperationHistoryRecord("claim", userAddress, toBase58String(txId)), formatHistoryRecord(priceAssetAmount, idoAssetAmount))
175175
176176
177177 func internalClaim (claimedAssetId58,userAddress,txId) = {
178178 let cfgArray = readConfigArray()
179179 let claimStart = parseIntValue(cfgArray[IdxCfgClaimStart])
180180 let claimDuration = parseIntValue(cfgArray[IdxCfgClaimDuration])
181181 let claimEnd = (claimStart + claimDuration)
182182 let price = parseIntValue(cfgArray[IdxCfgPrice])
183183 let priceMult = parseIntValue(cfgArray[IdxCfgPriceMult])
184184 let idoAssetId58 = cfgArray[IdxCfgIdoAssetId]
185185 let idoAssetId = fromBase58String(idoAssetId58)
186186 let idoAssetMult = parseIntValue(cfgArray[IdxCfgIdoAssetMult])
187187 let priceAssetId58 = cfgArray[IdxCfgPriceAssetId]
188188 let priceAssetId = fromBase58String(priceAssetId58)
189189 let priceAssetMult = parseIntValue(cfgArray[IdxCfgPriceAssetMult])
190190 let userAddress58 = toString(userAddress)
191191 let origInvestArray = readInvestorArrayOrFail(userAddress58)
192192 let investTotalAmount = parseIntValue(origInvestArray[IdxInvTotalAmount])
193193 let investLastClaimedHeightTMP = parseIntValue(origInvestArray[IdxInvLastClaimedHeight])
194194 let investLastClaimedHeight = if ((claimStart >= investLastClaimedHeightTMP))
195195 then claimStart
196196 else investLastClaimedHeightTMP
197197 let newClaimPeriodHeight = if ((height > claimEnd))
198198 then claimEnd
199199 else if ((claimStart > height))
200200 then claimStart
201201 else height
202202 let claimingBlocks = (newClaimPeriodHeight - investLastClaimedHeight)
203203 let claimingPriceAssetAmount = fraction(investTotalAmount, claimingBlocks, claimDuration)
204204 let claimingIdoAssetAmount = convertPriceAssetIntoIdoAsset(claimingPriceAssetAmount, priceAssetMult, price, priceMult, idoAssetMult)
205205 let isUSDN = (claimedAssetId58 == priceAssetId58)
206206 let isUSDNClaimDisabled = valueOrElse(getBoolean(keyUSDNClaimDisabled()), false)
207207 let isUSDNClaimEnded = match getInteger(keyUSDNClaimEndHeight()) {
208208 case end: Int =>
209209 (height > end)
210210 case _: Unit =>
211211 false
212212 case _ =>
213213 throw("Match error")
214214 }
215215 let checks = [if (!(if (isUSDN)
216216 then isUSDNClaimDisabled
217217 else false))
218218 then true
219219 else throw("USDN claim is disabled"), if (!(if (isUSDN)
220220 then isUSDNClaimEnded
221221 else false))
222222 then true
223223 else throw("USDN claim is ended")]
224224 if ((checks == checks))
225225 then if ((claimedAssetId58 == priceAssetId58))
226226 then $Tuple6([0, -(claimingPriceAssetAmount), claimingPriceAssetAmount, 0], claimingPriceAssetAmount, priceAssetId, origInvestArray, newClaimPeriodHeight, [claimingPriceAssetAmount, claimingIdoAssetAmount])
227227 else if ((claimedAssetId58 == idoAssetId58))
228228 then $Tuple6([0, -(claimingPriceAssetAmount), 0, claimingIdoAssetAmount], claimingIdoAssetAmount, idoAssetId, origInvestArray, newClaimPeriodHeight, [claimingPriceAssetAmount, claimingIdoAssetAmount])
229229 else throw(("unsupported assetId: " + claimedAssetId58))
230230 else throw("Strict value is not equal to itself.")
231231 }
232232
233233
234234 func internalClaimV2 (priceAssetId58,userAddress58,outAmount,totalUserAvailableToClaim) = {
235235 let totalPeriodPriceAssetAllowance = value(getInteger(keyTotalPeriodAllowance(priceAssetId58)))
236236 let userPeriodPriceAssetAllowance = value(getInteger(keyUserPeriodAllowance(priceAssetId58)))
237237 let periodLength = value(getInteger(keyPeriodLength()))
238238 let currentPeriod = valueOrElse(getInteger(keyCurrentPeriod()), 0)
239239 let $t01194712865 = if ((currentPeriod > 0))
240240 then {
241241 let lastPeriodStartHeight = value(getInteger(keyPeriodStartHeight((currentPeriod - 1))))
242242 let lastPeriodEndHeight = value(getInteger(keyPeriodEndHeight((currentPeriod - 1))))
243243 let $t01221512597 = if ((height > lastPeriodEndHeight))
244244 then {
245245 let updatedCurrentPeriod = (currentPeriod + 1)
246246 let periodStart = (lastPeriodEndHeight + 1)
247247 let periodEnd = ((periodStart + periodLength) - 1)
248248 $Tuple3(updatedCurrentPeriod, periodStart, periodEnd)
249249 }
250250 else $Tuple3(currentPeriod, lastPeriodStartHeight, lastPeriodEndHeight)
251251 let updatedCurrentPeriod = $t01221512597._1
252252 let periodStart = $t01221512597._2
253253 let periodEnd = $t01221512597._3
254254 $Tuple3(updatedCurrentPeriod, periodStart, periodEnd)
255255 }
256256 else $Tuple3(currentPeriod, valueOrElse(getInteger(keyPeriodStartHeight(currentPeriod)), height), valueOrElse(getInteger(keyPeriodEndHeight(currentPeriod)), ((height + periodLength) - 1)))
257257 let updatedCurrentPeriod = $t01194712865._1
258258 let periodStart = $t01194712865._2
259259 let periodEnd = $t01194712865._3
260260 let periodTotalAvailableToClaim = valueOrElse(getInteger(keyPeriodTotalAvailableToClaim(priceAssetId58, updatedCurrentPeriod)), totalPeriodPriceAssetAllowance)
261261 let periodUserAvailableToClaim = valueOrElse(getInteger(keyPeriodUserAvailableToClaim(priceAssetId58, updatedCurrentPeriod, userAddress58)), userPeriodPriceAssetAllowance)
262262 let periodMinAvailableToClaim = min([outAmount, periodTotalAvailableToClaim, periodUserAvailableToClaim])
263263 let usdtPriceAssetAllowableRatio = value(getInteger(keyUsdtPriceAssetAllowableRatio()))
264264 let putOneTknV2PriceAssetAmount = scale8
265265 let $t01350813761 = {
266266 let @ = invoke(addressFromStringValue(value(getString(keyUsdtPriceAssetStablePool()))), "putOneTknV2WithoutTakeFeeREADONLY", [putOneTknV2PriceAssetAmount, priceAssetId58], nil)
267267 if ($isInstanceOf(@, "(Int, Int, Int)"))
268268 then @
269269 else throw("Couldn't cast Any to (Int, Int, Int)")
270270 }
271271 if (($t01350813761 == $t01350813761))
272272 then {
273273 let bonus = $t01350813761._3
274274 let feeAmount = $t01350813761._2
275275 let lpAmount = $t01350813761._1
276276 let usdtAssetId = value(getString(keyUsdtAssetId()))
277277 let $t01382314041 = {
278278 let @ = invoke(addressFromStringValue(value(getString(keyUsdtPriceAssetStablePool()))), "getOneTknV2READONLY", [usdtAssetId, lpAmount], nil)
279279 if ($isInstanceOf(@, "(Int, Int)"))
280280 then @
281281 else throw("Couldn't cast Any to (Int, Int)")
282282 }
283283 if (($t01382314041 == $t01382314041))
284284 then {
285285 let getOneTknV2FeeAmount = $t01382314041._2
286286 let usdtAmount = $t01382314041._1
287287 let currentUsdtPriceAssetRatio = fraction(usdtAmount, putOneTknV2PriceAssetAmount, scale8)
288288 let endPeriodBlocksLeft = (periodEnd - height)
289289 $Tuple10(periodMinAvailableToClaim, periodTotalAvailableToClaim, periodUserAvailableToClaim, totalUserAvailableToClaim, usdtPriceAssetAllowableRatio, currentUsdtPriceAssetRatio, endPeriodBlocksLeft, updatedCurrentPeriod, periodStart, periodEnd)
290290 }
291291 else throw("Strict value is not equal to itself.")
292292 }
293293 else throw("Strict value is not equal to itself.")
294294 }
295295
296296
297297 func managerPublicKeyOrUnit () = match getString(keyManagerPublicKey()) {
298298 case s: String =>
299299 fromBase58String(s)
300300 case _: Unit =>
301301 unit
302302 case _ =>
303303 throw("Match error")
304304 }
305305
306306
307307 func pendingManagerPublicKeyOrUnit () = match getString(keyPendingManagerPublicKey()) {
308308 case s: String =>
309309 fromBase58String(s)
310310 case _: Unit =>
311311 unit
312312 case _ =>
313313 throw("Match error")
314314 }
315315
316316
317317 func mustManager (i) = {
318318 let pd = throw("Permission denied")
319319 match managerPublicKeyOrUnit() {
320320 case pk: ByteVector =>
321321 if ((i.callerPublicKey == pk))
322322 then true
323323 else pd
324324 case _: Unit =>
325325 if ((i.caller == this))
326326 then true
327327 else pd
328328 case _ =>
329329 throw("Match error")
330330 }
331331 }
332332
333333
334334 @Callable(i)
335335 func constructor (idoStart,idoDuration,claimStart,claimDuration,price,priceAssetId58,minInvestAmount) = {
336336 let priceMult = ((100 * 1000) * 1000)
337337 let idoEnd = (idoStart + idoDuration)
338338 if (isDefined(getString(keyConfig())))
339339 then throw("already initialized")
340340 else if (("3PMEHLx1j6zerarZTYfsGqDeeZqQoMpxq5S" != toString(i.caller)))
341341 then throw("not authorized")
342342 else if ((size(i.payments) != 1))
343343 then throw("exactly 1 payment must be attached")
344344 else if ((idoEnd >= claimStart))
345345 then throw("claimStart must be greater than idoEnd")
346346 else {
347347 let pmt = value(i.payments[0])
348348 let idoAssetId = value(pmt.assetId)
349349 let idoAssetInfo = valueOrErrorMessage(assetInfo(idoAssetId), "fail to load ido asset info")
350350 let idoAssetId58 = toBase58String(idoAssetId)
351351 let idoAssetMult = pow(10, 0, idoAssetInfo.decimals, 0, 0, DOWN)
352352 let priceAssetId = fromBase58String(priceAssetId58)
353353 let priceAssetInfo = valueOrErrorMessage(assetInfo(priceAssetId), "fail to load price asset info")
354354 let priceAssetMult = pow(10, 0, priceAssetInfo.decimals, 0, 0, DOWN)
355355 let origTotalsArray = readTotalsArrayOrDefault()
356356 let totalsDiff = [0, 0, 0, 0]
357357 [StringEntry(keyConfig(), fromatConfig(idoStart, idoDuration, claimStart, claimDuration, price, priceMult, idoAssetId58, idoAssetMult, priceAssetId58, priceAssetMult, minInvestAmount, pmt.amount)), TotalsEntry(keyTotals(), origTotalsArray, totalsDiff, claimStart)]
358358 }
359359 }
360360
361361
362362
363363 @Callable(i)
364364 func invest () = {
365365 let cfgArray = readConfigArray()
366366 let idoStart = parseIntValue(cfgArray[IdxCfgIdoStart])
367367 let idoDuration = parseIntValue(cfgArray[IdxCfgIdoDuration])
368368 let idoEnd = (idoStart + idoDuration)
369369 let claimStart = parseIntValue(cfgArray[IdxCfgClaimStart])
370370 let claimDuration = parseIntValue(cfgArray[IdxCfgClaimDuration])
371371 let price = parseIntValue(cfgArray[IdxCfgPrice])
372372 let priceMult = parseIntValue(cfgArray[IdxCfgPriceMult])
373373 let idoAssetId58 = cfgArray[IdxCfgIdoAssetId]
374374 let idoAssetId = fromBase58String(idoAssetId58)
375375 let idoAssetMult = parseIntValue(cfgArray[IdxCfgIdoAssetMult])
376376 let priceAssetId58 = cfgArray[IdxCfgPriceAssetId]
377377 let priceAssetId = fromBase58String(priceAssetId58)
378378 let priceAssetMult = parseIntValue(cfgArray[IdxCfgPriceAssetMult])
379379 let minIvestAmount = parseIntValue(cfgArray[IdxCfgMinInvestAmount])
380380 let userAddress = toString(i.caller)
381381 if ((idoStart > height))
382382 then throw("ido has not been started yet")
383383 else if ((height > idoEnd))
384384 then throw("ido has been already ended")
385385 else if ((size(i.payments) != 1))
386386 then throw("exactly 1 payment is expected")
387387 else {
388388 let pmt = value(i.payments[0])
389389 let pmtAssetId = value(pmt.assetId)
390390 let pmtAmount = pmt.amount
391391 if ((pmtAssetId != priceAssetId))
392392 then throw((("invalid payment asset id: " + toBase58String(pmtAssetId)) + " is expected"))
393393 else {
394394 let origInvestorArray = readInvestorArrayOrDefault(userAddress)
395395 let origTotalsArray = readTotalsArrayOrDefault()
396396 let newPriceTotalAmount = (parseIntValue(origTotalsArray[IdxInvTotalAmount]) + pmtAmount)
397397 let requiredIdoAssetAmount = (newPriceTotalAmount * 100)
398398 if ((requiredIdoAssetAmount > assetBalance(this, idoAssetId)))
399399 then throw("IDO asset has been - sold consider to use smaller payment")
400400 else {
401401 let totalsDiff = [pmtAmount, pmtAmount, 0, 0]
402402 [TotalsEntry(keyInvestor(userAddress), origInvestorArray, totalsDiff, claimStart), TotalsEntry(keyTotals(), origTotalsArray, totalsDiff, claimStart), InvestOperationHistoryEntry(userAddress, pmtAmount, 0, i.transactionId)]
403403 }
404404 }
405405 }
406406 }
407407
408408
409409
410410 @Callable(i)
411411 func claim (claimedAssetId58,userAddress58) = {
412412 let callerAddress58 = toString(i.caller)
413413 if ((userAddress58 != callerAddress58))
414414 then throw("not authorized")
415415 else {
416416 let cfgArray = readConfigArray()
417417 let priceAssetId58 = cfgArray[IdxCfgPriceAssetId]
418418 let claimResultTuple = internalClaim(claimedAssetId58, i.caller, i.transactionId)
419419 let totalsDiff = claimResultTuple._1
420420 let outAmount = claimResultTuple._2
421421 let outAssetId = claimResultTuple._3
422422 let origInvestArray = claimResultTuple._4
423423 let newClaimPeriodHeight = claimResultTuple._5
424424 let claimedPriceAmountFromDiff = totalsDiff[IdxDiffClaimedPriceAmountIncrement]
425425 let claimedIdoAssetAmountFromDiff = totalsDiff[IdxDiffClaimedIdoAssetAmountIncrement]
426426 let entries = if ((claimedAssetId58 == priceAssetId58))
427427 then {
428428 let $t01969720141 = internalClaimV2(priceAssetId58, userAddress58, outAmount, totalsDiff[IdxDiffClaimedPriceAmountIncrement])
429429 let periodMinAvailableToClaim = $t01969720141._1
430430 let periodTotalAvailableToClaim = $t01969720141._2
431431 let periodUserAvailableToClaim = $t01969720141._3
432432 let totalUserAvailableToClaim = $t01969720141._4
433433 let usdtPriceAssetAllowableRatio = $t01969720141._5
434434 let currentUsdtPriceAssetRatio = $t01969720141._6
435435 let endPeriodBlocksLeft = $t01969720141._7
436436 let updatedCurrentPeriod = $t01969720141._8
437437 let periodStart = $t01969720141._9
438438 let periodEnd = $t01969720141._10
439439 let checks = [if ((periodMinAvailableToClaim > 0))
440440 then true
441441 else throwErr("nothing to claim"), if ((periodUserAvailableToClaim > 0))
442442 then true
443443 else throwErr("unavailable to claim because user period allowance reached"), if ((periodTotalAvailableToClaim > 0))
444444 then true
445445 else throwErr("unavailable to claim because total period allowance reached"), if ((usdtPriceAssetAllowableRatio > currentUsdtPriceAssetRatio))
446446 then true
447447 else throwErr("unavailable to claim because usdn price lower than usdtPriceAssetAllowableRatio")]
448448 if ((checks == checks))
449449 then {
450450 let priceAssetBalance = valueOrElse(getInteger(keyPriceAssetBalance(userAddress58)), 0)
451451 let updatedPeriodTotalAvailableToClaim = (periodTotalAvailableToClaim - periodMinAvailableToClaim)
452452 let updatedPeriodUserAvailableToClaim = (periodUserAvailableToClaim - periodMinAvailableToClaim)
453453 let entries = if ((priceAssetBalance >= periodMinAvailableToClaim))
454454 then [ScriptTransfer(i.caller, periodMinAvailableToClaim, outAssetId), IntegerEntry(keyPriceAssetBalance(userAddress58), (priceAssetBalance - periodMinAvailableToClaim))]
455455 else {
456456 let updatedPriceAssetBalance = ((priceAssetBalance + outAmount) - periodMinAvailableToClaim)
457457 [ScriptTransfer(i.caller, periodMinAvailableToClaim, outAssetId), TotalsEntry(keyInvestor(userAddress58), origInvestArray, totalsDiff, newClaimPeriodHeight), TotalsEntry(keyTotals(), readTotalsArrayOrDefault(), totalsDiff, newClaimPeriodHeight), IntegerEntry(keyPriceAssetBalance(userAddress58), updatedPriceAssetBalance)]
458458 }
459459 $Tuple2(([IntegerEntry(keyCurrentPeriod(), updatedCurrentPeriod), IntegerEntry(keyPeriodStartHeight(updatedCurrentPeriod), periodStart), IntegerEntry(keyPeriodEndHeight(updatedCurrentPeriod), periodEnd), IntegerEntry(keyPeriodTotalAvailableToClaim(priceAssetId58, updatedCurrentPeriod), updatedPeriodTotalAvailableToClaim), IntegerEntry(keyPeriodUserAvailableToClaim(priceAssetId58, updatedCurrentPeriod, userAddress58), updatedPeriodUserAvailableToClaim), ClaimOperationHistoryEntry(userAddress58, periodMinAvailableToClaim, claimedIdoAssetAmountFromDiff, i.transactionId)] ++ entries), unit)
460460 }
461461 else throw("Strict value is not equal to itself.")
462462 }
463463 else $Tuple2([ScriptTransfer(i.caller, outAmount, outAssetId), TotalsEntry(keyInvestor(userAddress58), origInvestArray, totalsDiff, newClaimPeriodHeight), TotalsEntry(keyTotals(), readTotalsArrayOrDefault(), totalsDiff, newClaimPeriodHeight), ClaimOperationHistoryEntry(userAddress58, claimedPriceAmountFromDiff, claimedIdoAssetAmountFromDiff, i.transactionId)], unit)
464464 entries
465465 }
466466 }
467467
468468
469469
470470 @Callable(i)
471471 func claimREADONLY (claimedAssetId58,userAddress58) = {
472472 let claimResultTuple = internalClaim(claimedAssetId58, addressFromStringValue(userAddress58), fromBase58String(""))
473473 let totalsDiff = claimResultTuple._1
474474 let outAmount = claimResultTuple._2
475475 let outAssetId = claimResultTuple._3
476476 let origInvestArray = claimResultTuple._4
477477 let newClaimPeriodHeight = claimResultTuple._5
478478 let availableToClaimArray = claimResultTuple._6
479479 let availablePriceAmountToClaim = availableToClaimArray[0]
480480 let availableIdoAmountToClaim = availableToClaimArray[1]
481481 $Tuple2(nil, makeString(["%s%d%d", userAddress58, toString(availablePriceAmountToClaim), toString(availableIdoAmountToClaim)], SEP))
482482 }
483483
484484
485485
486486 @Callable(i)
487487 func claimV2READONLY (claimedAssetId58,userAddress58) = {
488488 let claimResultTuple = internalClaim(claimedAssetId58, addressFromStringValue(userAddress58), fromBase58String(""))
489489 let totalsDiff = claimResultTuple._1
490490 let outAmount = claimResultTuple._2
491491 let outAssetId = claimResultTuple._3
492492 let origInvestArray = claimResultTuple._4
493493 let newClaimPeriodHeight = claimResultTuple._5
494494 let availableToClaimArray = claimResultTuple._6
495495 let availablePriceAmountToClaim = availableToClaimArray[0]
496496 let availableIdoAmountToClaim = availableToClaimArray[1]
497497 let cfgArray = readConfigArray()
498498 let priceAssetId58 = cfgArray[IdxCfgPriceAssetId]
499499 let $t02591426326 = internalClaimV2(priceAssetId58, userAddress58, outAmount, totalsDiff[IdxDiffClaimedPriceAmountIncrement])
500500 let periodMinAvailableToClaim = $t02591426326._1
501501 let periodTotalAvailableToClaim = $t02591426326._2
502502 let periodUserAvailableToClaim = $t02591426326._3
503503 let totalUserAvailableToClaim = $t02591426326._4
504504 let usdtPriceAssetAllowableRatio = $t02591426326._5
505505 let currentUsdtPriceAssetRatio = $t02591426326._6
506506 let endPeriodBlocksLeft = $t02591426326._7
507507 let updatedCurrentPeriod = $t02591426326._8
508508 let periodStart = $t02591426326._9
509509 let periodEnd = $t02591426326._10
510- let resultString = makeString(["%d%d%d%d%d%d", toString(availableIdoAmountToClaim), toString(periodMinAvailableToClaim), toString(periodTotalAvailableToClaim), toString(usdtPriceAssetAllowableRatio), toString(currentUsdtPriceAssetRatio), toString(endPeriodBlocksLeft)], SEP)
510+ let currentPeriodEndHeight = value(getInteger(keyPeriodEndHeight(updatedCurrentPeriod)))
511+ let resultString = if ((height > currentPeriodEndHeight))
512+ then {
513+ let periodLenght = value(getInteger(keyPeriodLength()))
514+ let userPeriodAllowance = value(getInteger(keyUserPeriodAllowance(priceAssetId58)))
515+ let totalPeriodAllowance = value(getInteger(keyTotalPeriodAllowance(priceAssetId58)))
516+ makeString(["%d%d%d%d%d%d", toString(availableIdoAmountToClaim), toString(userPeriodAllowance), toString(totalPeriodAllowance), toString(usdtPriceAssetAllowableRatio), toString(currentUsdtPriceAssetRatio), toString(periodLenght)], SEP)
517+ }
518+ else makeString(["%d%d%d%d%d%d", toString(availableIdoAmountToClaim), toString(periodMinAvailableToClaim), toString(periodTotalAvailableToClaim), toString(usdtPriceAssetAllowableRatio), toString(currentUsdtPriceAssetRatio), toString(endPeriodBlocksLeft)], SEP)
511519 $Tuple2(nil, resultString)
512520 }
513521
514522
515523
516524 @Callable(i)
517525 func setManager (pendingManagerPublicKey) = {
518526 let checkCaller = mustManager(i)
519527 if ((checkCaller == checkCaller))
520528 then {
521529 let checkManagerPublicKey = fromBase58String(pendingManagerPublicKey)
522530 if ((checkManagerPublicKey == checkManagerPublicKey))
523531 then [StringEntry(keyPendingManagerPublicKey(), pendingManagerPublicKey)]
524532 else throw("Strict value is not equal to itself.")
525533 }
526534 else throw("Strict value is not equal to itself.")
527535 }
528536
529537
530538
531539 @Callable(i)
532540 func confirmManager () = {
533541 let pm = pendingManagerPublicKeyOrUnit()
534542 let hasPM = if (isDefined(pm))
535543 then true
536544 else throw("No pending manager")
537545 if ((hasPM == hasPM))
538546 then {
539547 let checkPM = if ((i.callerPublicKey == value(pm)))
540548 then true
541549 else throw("You are not pending manager")
542550 if ((checkPM == checkPM))
543551 then [StringEntry(keyManagerPublicKey(), toBase58String(value(pm))), DeleteEntry(keyPendingManagerPublicKey())]
544552 else throw("Strict value is not equal to itself.")
545553 }
546554 else throw("Strict value is not equal to itself.")
547555 }
548556
549557
550558 @Verifier(tx)
551559 func verify () = {
552560 let targetPublicKey = match managerPublicKeyOrUnit() {
553561 case pk: ByteVector =>
554562 pk
555563 case _: Unit =>
556564 tx.senderPublicKey
557565 case _ =>
558566 throw("Match error")
559567 }
560568 sigVerify(tx.bodyBytes, tx.proofs[0], targetPublicKey)
561569 }
562570

github/deemru/w8io/026f985 
77.41 ms