tx · vRkEPpDxqRXJLtKKStEmhHBw9NbH6GzJHymKQaKdivC

3MpcyLdYAQ6Z14cs1Fy3o7XK1cAHajK5g5N:  -0.01000000 Waves

2022.04.27 08:30 [2026477] smart account 3MpcyLdYAQ6Z14cs1Fy3o7XK1cAHajK5g5N > SELF 0.00000000 Waves

{ "type": 13, "id": "vRkEPpDxqRXJLtKKStEmhHBw9NbH6GzJHymKQaKdivC", "fee": 1000000, "feeAssetId": null, "timestamp": 1651037488391, "version": 2, "chainId": 84, "sender": "3MpcyLdYAQ6Z14cs1Fy3o7XK1cAHajK5g5N", "senderPublicKey": "CpN2UR96CYA49vvxNChb3NFpAE9TK2nyuCptRU4VkHzS", "proofs": [ "CL28bB85hgGpfKYXc5G9Cd95ib1tkjhLPRWUDe7e823fQCEgHa5EsrpTnMxmPja74D6pGiVFvsBLdZqGcidVJWG" ], "script": "base64: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AAAAAgUAAAAIYXB5VG9LZXkFAAAABWFweVRvCQAETAAAAAIJAQAAAAxJbnRlZ2VyRW50cnkAAAACBQAAAAphcHlGcm9tS2V5BQAAAAdhcHlGcm9tCQAETAAAAAIJAQAAAAxJbnRlZ2VyRW50cnkAAAACBQAAAA5tYXhJbnRlcnZhbEtleQUAAAARbWF4SW50ZXJ2YWxNb250aHMJAARMAAAAAgkBAAAADEludGVnZXJFbnRyeQAAAAIFAAAADG1heEludmVzdEtleQUAAAAJbWF4SW52ZXN0BQAAAANuaWwAAAABaQEAAAAHZGVwb3NpdAAAAAEAAAAIaW50ZXJ2YWwEAAAAC21pbkludGVydmFsCQEAAAAMZ2V0SW50T3JFbHNlAAAAAgUAAAAUaW52ZXN0SW50ZXJ2YWxNaW5LZXkAAAAAAAAAqMAEAAAACW1heEludmVzdAkBAAAADGdldEludE9yWmVybwAAAAEFAAAADG1heEludmVzdEtleQQAAAANdG90YWxJbnZlc3RlZAkBAAAADGdldEludE9yWmVybwAAAAEFAAAADnRvdGFsSW52ZXN0S2V5BAAAAAtpbnZlc3RBc3NldAkBAAAAD2dldFN0cmluZ09yRmFpbAAAAAEFAAAADmludmVzdEFzc2V0S2V5BAAAAAt1c2VyQWRkcmVzcwgFAAAAAWkAAAAGY2FsbGVyBAAAABF1c2VyQWRkcmVzc1N0cmluZwkABCUAAAABBQAAAAt1c2VyQWRkcmVzcwQAAAALbWF4SW50ZXJ2YWwJAQAAAAxnZXRJbnRPclplcm8AAAABBQAAAA5tYXhJbnRlcnZhbEtleQQAAAALaW52ZXN0U3RhcnQFAAAABmhlaWdodAQAAAAJaW52ZXN0RW5kCQAAZAAAAAIFAAAAC2ludmVzdFN0YXJ0CQAAaAAAAAIFAAAAC21pbkludGVydmFsBQAAAAhpbnRlcnZhbAQAAAATaW52YWxpZEFzc2V0TWVzc2FnZQkAASwAAAACCQABLAAAAAICAAAAD0ludmFsaWQgYXNzZXQuIAUAAAALaW52ZXN0QXNzZXQCAAAADCBpcyBleHBlY3RlZAMDCQAAZgAAAAIAAAAAAAAAAAEFAAAACGludGVydmFsBgkAAGYAAAACBQAAAAhpbnRlcnZhbAUAAAALbWF4SW50ZXJ2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", "height": 2026477, "applicationStatus": "succeeded", "spentComplexity": 0 } View: original | compacted Prev: HvPLFokiuzRezM6P8pAtW4Pcpg26sHHWQfuHzkGaZgmX Next: AGNVGwVtDXZqie5MyPjARiiDG2qgkEnEtyivQ87VFcS6 Diff:
OldNewDifferences
126126
127127
128128 @Callable(i)
129-func setParams (apyFrom,apyTo,maxIntervalMonths,maxInvest,investAsset) = [StringEntry(investAssetKey, investAsset), IntegerEntry(apyToKey, apyTo), IntegerEntry(apyFromKey, apyFrom), IntegerEntry(maxIntervalKey, maxIntervalMonths), IntegerEntry(maxInvestKey, maxInvest)]
129+func setParams (apyFrom,apyTo,maxIntervalMonths,maxInvest,investAsset) = if ((i.caller != this))
130+ then throw("Not owner")
131+ else [StringEntry(investAssetKey, investAsset), IntegerEntry(apyToKey, apyTo), IntegerEntry(apyFromKey, apyFrom), IntegerEntry(maxIntervalKey, maxIntervalMonths), IntegerEntry(maxInvestKey, maxInvest)]
130132
131133
132134
189191
190192
191193 @Callable(i)
192-func deleteAmount () = [IntegerEntry(totalInvestKey, 0)]
194+func deleteAmount () = if ((i.caller != this))
195+ then throw("Not owner")
196+ else [IntegerEntry(totalInvestKey, 0)]
193197
194198
Full:
OldNewDifferences
11 {-# STDLIB_VERSION 5 #-}
22 {-# SCRIPT_TYPE ACCOUNT #-}
33 {-# CONTENT_TYPE DAPP #-}
44 let ver = "1.0"
55
66 let year = 525600
77
88 let separator = "__"
99
1010 let WAVESIDSTR = "WAVES"
1111
1212 let WAVESID = fromBase58String(WAVESIDSTR)
1313
1414 let maxInvestKey = "%s__maxInvest"
1515
1616 let totalInvestKey = "%s__totalInvest"
1717
1818 let investAssetKey = "%s__investAssetId"
1919
2020 let apyFromKey = "%s__apyFrom"
2121
2222 let apyToKey = "%s__apyTo"
2323
2424 let investIntervalMinKey = "%s__intervalMin"
2525
2626 let maxIntervalKey = "%__maxInterval"
2727
2828 func getUserInvestKey (user) = makeString(["%s%s$d", "clrcInvest", user], separator)
2929
3030
3131 func valueOrDefault (val,defaultVal) = if ((valueOrElse(val, 0) != 0))
3232 then val
3333 else defaultVal
3434
3535
3636 func getMinVal (val1,val2) = if ((val1 > val2))
3737 then val2
3838 else val1
3939
4040
4141 func getMaxVal (val1,val2) = if ((val2 > val1))
4242 then val2
4343 else val1
4444
4545
4646 func getIntOrZero (key) = valueOrElse(getInteger(this, key), 0)
4747
4848
4949 func getIntOrElse (key,defaultVal) = valueOrElse(getInteger(this, key), defaultVal)
5050
5151
5252 func getIntOrFail (key) = valueOrErrorMessage(getInteger(this, key), (("Mandatory this." + key) + " is not defined"))
5353
5454
5555 func getStrOrElse (key,defaultVal) = valueOrElse(getString(this, key), defaultVal)
5656
5757
5858 func getStringOrFail (key) = valueOrErrorMessage(getString(this, key), (("Mandatory this." + key) + " is not defined"))
5959
6060
6161 func toAssetVect (assetStr) = if ((assetStr == WAVESIDSTR))
6262 then unit
6363 else fromBase58String(assetStr)
6464
6565
6666 func getApy (interval,maxInterval) = {
6767 let apyTo = getIntOrZero(apyToKey)
6868 let apyFrom = getIntOrZero(apyFromKey)
6969 let deltaApy = ((apyTo - apyFrom) * 1000000)
7070 let kInterval = (maxInterval - 1)
7171 let apyNormalize = ((deltaApy * (interval - 1)) / kInterval)
7272 let finalApy = (apyNormalize + (apyFrom * 1000000))
7373 finalApy
7474 }
7575
7676
7777 func readUserData (user) = {
7878 let data = split(getStrOrElse(getUserInvestKey(user), ""), separator)
7979 if ((7 > size(data)))
8080 then [0, 0, 0, 0, 0, 0, 0]
8181 else {
8282 let heightStart = valueOrElse(parseInt(data[1]), 0)
8383 let heightEnd = valueOrElse(parseInt(data[2]), 0)
8484 let claimHeight = valueOrElse(parseInt(data[3]), 0)
8585 let amount = valueOrElse(parseInt(data[4]), 0)
8686 let toClaim = valueOrElse(parseInt(data[5]), 0)
8787 let claimed = valueOrElse(parseInt(data[6]), 0)
8888 let apy = valueOrElse(parseInt(data[7]), 0)
8989 [heightStart, heightEnd, claimHeight, amount, toClaim, claimed, apy]
9090 }
9191 }
9292
9393
9494 func setUserData (user,heightStart,heightEnd,claimHeight,amount,toClaim,claimed,apy) = {
9595 let key = getUserInvestKey(user)
9696 let data = makeString(["%d%d%d%d%d%d", toString(heightStart), toString(heightEnd), toString(claimHeight), toString(amount), toString(toClaim), toString(claimed), toString(apy)], separator)
9797 StringEntry(key, data)
9898 }
9999
100100
101101 func calculateToClaim (heightStart,heightEnd,claimHeight,amount,toClaim,claimed,apy) = {
102102 let fromClaimHeight = getMaxVal(claimHeight, heightStart)
103103 let toEndHeight = getMinVal(heightEnd, height)
104104 let delta = (toEndHeight - fromClaimHeight)
105105 let koeficient = fraction(apy, delta, year)
106106 let accumulate = fraction(koeficient, amount, 100000000)
107107 (accumulate + toClaim)
108108 }
109109
110110
111111 @Callable(i)
112112 func getApyReaOnly (interval,maxInterval) = {
113113 let currentApy = getApy(interval, maxInterval)
114114 $Tuple2(nil, currentApy)
115115 }
116116
117117
118118
119119 @Callable(i)
120120 func claimReadonly (user) = {
121121 let data = readUserData(user)
122122 let toClaim = calculateToClaim(data[0], data[1], data[2], data[3], data[4], data[5], data[6])
123123 $Tuple2(nil, toClaim)
124124 }
125125
126126
127127
128128 @Callable(i)
129-func setParams (apyFrom,apyTo,maxIntervalMonths,maxInvest,investAsset) = [StringEntry(investAssetKey, investAsset), IntegerEntry(apyToKey, apyTo), IntegerEntry(apyFromKey, apyFrom), IntegerEntry(maxIntervalKey, maxIntervalMonths), IntegerEntry(maxInvestKey, maxInvest)]
129+func setParams (apyFrom,apyTo,maxIntervalMonths,maxInvest,investAsset) = if ((i.caller != this))
130+ then throw("Not owner")
131+ else [StringEntry(investAssetKey, investAsset), IntegerEntry(apyToKey, apyTo), IntegerEntry(apyFromKey, apyFrom), IntegerEntry(maxIntervalKey, maxIntervalMonths), IntegerEntry(maxInvestKey, maxInvest)]
130132
131133
132134
133135 @Callable(i)
134136 func deposit (interval) = {
135137 let minInterval = getIntOrElse(investIntervalMinKey, 43200)
136138 let maxInvest = getIntOrZero(maxInvestKey)
137139 let totalInvested = getIntOrZero(totalInvestKey)
138140 let investAsset = getStringOrFail(investAssetKey)
139141 let userAddress = i.caller
140142 let userAddressString = toString(userAddress)
141143 let maxInterval = getIntOrZero(maxIntervalKey)
142144 let investStart = height
143145 let investEnd = (investStart + (minInterval * interval))
144146 let invalidAssetMessage = (("Invalid asset. " + investAsset) + " is expected")
145147 if (if ((1 > interval))
146148 then true
147149 else (interval > maxInterval))
148150 then throw("Wrong interval")
149151 else if ((size(i.payments) != 1))
150152 then throw("Invalid payments size")
151153 else {
152154 let payment = i.payments[0]
153155 let amount = payment.amount
154156 let assetId = valueOrErrorMessage(payment.assetId, invalidAssetMessage)
155157 if ((toBase58String(assetId) != investAsset))
156158 then throw(invalidAssetMessage)
157159 else if (((amount + totalInvested) > maxInvest))
158160 then throw("The max invest limit has been reached")
159161 else {
160162 let currentApy = getApy(interval, maxInterval)
161163 let userData = readUserData(userAddressString)
162164 let noClaimed = calculateToClaim(userData[0], userData[1], userData[2], userData[3], userData[4], userData[5], userData[6])
163165 let allAmount = (amount + userData[3])
164166 let claimed = userData[4]
165167 let toClaim = userData[5]
166168 [setUserData(userAddressString, investStart, investEnd, investStart, allAmount, noClaimed, claimed, currentApy), IntegerEntry(totalInvestKey, (amount + totalInvested))]
167169 }
168170 }
169171 }
170172
171173
172174
173175 @Callable(i)
174176 func claim () = {
175177 let investAsset = getStringOrFail(investAssetKey)
176178 let data = readUserData(toString(i.caller))
177179 if ((7 > size(data)))
178180 then throw("User has't invest")
179181 else {
180182 let toClaim = calculateToClaim(data[0], data[1], data[2], data[3], data[4], data[5], data[6])
181183 let claimed = (data[4] + toClaim)
182184 let claimHeight = height
183185 if ((toClaim == 0))
184186 then throw("Nothing to claim")
185187 else [ScriptTransfer(i.caller, toClaim, fromBase58String(investAsset)), setUserData(toString(i.caller), data[0], data[1], claimHeight, data[3], 0, claimed, data[6])]
186188 }
187189 }
188190
189191
190192
191193 @Callable(i)
192-func deleteAmount () = [IntegerEntry(totalInvestKey, 0)]
194+func deleteAmount () = if ((i.caller != this))
195+ then throw("Not owner")
196+ else [IntegerEntry(totalInvestKey, 0)]
193197
194198

github/deemru/w8io/026f985 
57.70 ms