2022.05.20 16:27 [3125522] smart account 3PKwLLSfTLXiLGwwffRhKx87UvbqdfLNSru > SELF 0.00000000 Waves

{ "type": 13, "id": "BVQrknHWofZzwRtGYeK9vZR1Wo4FYdiq4tgdw5CgUcSV", "fee": 1000000, "feeAssetId": null, "timestamp": 1653053267063, "version": 1, "sender": "3PKwLLSfTLXiLGwwffRhKx87UvbqdfLNSru", "senderPublicKey": "7Hv4ZnV9vEczMcheNeitXZdRa19B4W6RGUp7uoV1RaEA", "proofs": [ "QGmTgXEeTSDzRK54Y3bgVb5XiKP7GY8LuUUJ2KMCjsyGqcJxhSRyyfdYBQy1ktgk9jHrXeR6HXs64XuZViyeGJq" ], "script": "base64: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BWRlbHRhCQAAZQAAAAIFAAAAC3RvRW5kSGVpZ2h0BQAAAA9mcm9tQ2xhaW1IZWlnaHQEAAAACmtvZWZpY2llbnQJAABrAAAAAwUAAAADYXB5BQAAAAVkZWx0YQUAAAAEeWVhcgQAAAAKYWNjdW11bGF0ZQkAAGsAAAADBQAAAAprb2VmaWNpZW50BQAAAAZhbW91bnQAAAAAAAX14QAJAABkAAAAAgUAAAAKYWNjdW11bGF0ZQUAAAAHdG9DbGFpbQEAAAAQY2FsY3VsYXRlRm9yZmVpdAAAAAcAAAALaGVpZ2h0U3RhcnQAAAAJaGVpZ2h0RW5kAAAAC2NsYWltSGVpZ2h0AAAABmFtb3VudAAAAAd0b0NsYWltAAAAB2NsYWltZWQAAAADYXB5BAAAAA9mcm9tQ2xhaW1IZWlnaHQFAAAAC2hlaWdodFN0YXJ0BAAAAAt0b0VuZEhlaWdodAkBAAAACWdldE1pblZhbAAAAAIFAAAACWhlaWdodEVuZAUAAAAGaGVpZ2h0BAAAAAVkZWx0YQkAAGUAAAACBQAAAAt0b0VuZEhlaWdodAUAAAAPZnJvbUNsYWltSGVpZ2h0BAAAAAprb2VmaWNpZW50CQAAawAAAAMFAAAAA2FweQUAAAAFZGVsdGEFAAAABHllYXIEAAAACmFjY3VtdWxhdGUJAABrAAAAAwUAAAAKa29lZmljaWVudAUAAAAGYW1vdW50AAAAAAAF9eEABAAAAAZmZGVsdGEJAABlAAAAAgUAAAAJaGVpZ2h0RW5kBQAAAAt0b0VuZEhlaWdodAQAAAALZmtvZWZpY2llbnQJAABrAAAAAwkAAGgAAAACBQAAAANhcHkAAAAAAAAAAAIFAAAABmZkZWx0YQUAAAAEeWVhcgQAAAALZmFjY3VtdWxhdGUJAABrAAAAAwUAAAALZmtvZWZpY2llbnQFAAAABmFtb3VudAAAAAAABfXhAAkAAGQAAAACBQAAAAphY2N1bXVsYXRlBQAAAAtmYWNjdW11bGF0ZQAAAAgAAAABaQEAAAANZ2V0QXB5UmVhT25seQAAAAIAAAAIaW50ZXJ2YWwAAAALbWF4SW50ZXJ2YWwEAAAACmN1cnJlbnRBcHkJAQAAAAZnZXRBcHkAAAACBQAAAAhpbnRlcnZhbAUAAAALbWF4SW50ZXJ2YWwJAAUUAAAA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dHJ5AAAAAgUAAAAObWF4SW50ZXJ2YWxLZXkFAAAAEW1heEludGVydmFsTW9udGhzCQAETAAAAAIJAQAAAAxJbnRlZ2VyRW50cnkAAAACBQAAAAxtYXhJbnZlc3RLZXkFAAAACW1heEludmVzdAUAAAADbmlsAAAAAWkBAAAAB2RlcG9zaXQAAAABAAAACGludGVydmFsBAAAAAttaW5JbnRlcnZhbAkBAAAADGdldEludE9yRWxzZQAAAAIFAAAAFGludmVzdEludGVydmFsTWluS2V5AAAAAAAAAKjABAAAAAltYXhJbnZlc3QJAQAAAAxnZXRJbnRPclplcm8AAAABBQAAAAxtYXhJbnZlc3RLZXkEAAAADXRvdGFsSW52ZXN0ZWQJAQAAAAxnZXRJbnRPclplcm8AAAABBQAAAA50b3RhbEludmVzdEtleQQAAAALaW52ZXN0QXNzZXQJAQAAAA9nZXRTdHJpbmdPckZhaWwAAAABBQAAAA5pbnZlc3RBc3NldEtleQQAAAALdXNlckFkZHJlc3MIBQAAAAFpAAAABmNhbGxlcgQAAAARdXNlckFkZHJlc3NTdHJpbmcJAAQlAAAAAQUAAAALdXNlckFkZHJlc3MEAAAAC21heEludGVydmFsCQEAAAAMZ2V0SW50T3JaZXJvAAAAAQUAAAAObWF4SW50ZXJ2YWxLZXkEAAAAC2ludmVzdFN0YXJ0BQAAAAZoZWlnaHQEAAAACWludmVzdEVuZAkAAGQAAAACBQAAAAtpbnZlc3RTdGFydAkAAGgAAAACBQAAAAttaW5JbnRlcnZhbAUAAAAIaW50ZXJ2YWwEAAAAE2ludmFsaWRBc3NldE1lc3NhZ2UJAAEsAAAAAgkAASwAAAACAgAAAA9JbnZhbGlkIGFzc2V0LiAFAAAAC2ludmVzdEFzc2V0AgAAAAwgaXMgZXhwZWN0ZWQDAwkAAGYAAAACAAAAAAAAAAABBQAAAAhpbnRlcnZhbAYJAABmAAAAAgUAAAAIaW50ZXJ2YWwFAAAAC21heEludGVydmFsCQAAAgAAAAECAAAADldyb25nIGludGVydmFsAwkBAAAAAiE9AAAAAgkAAZAAAAABCAUAAAABaQAAAAhwYXltZW50cwAAAAAAAAAAAQkAAAIAAAABAgAAABVJbnZhbGlkIHBheW1lbnRz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", "chainId": 87, "height": 3125522, "applicationStatus": "succeeded", "spentComplexity": 0 } View: original | compacted Prev: BoutF5M2G6sUDDHLxzkt3VBNVx4WbbbBL45eVcp63fB Next: CoeZ4ewJz1icatKsFDdJmyYDnsqk5ZRuku2t6CuJBMxZ Diff:
OldNewDifferences
115115 let koeficient = fraction(apy, delta, year)
116116 let accumulate = fraction(koeficient, amount, 100000000)
117117 let fdelta = (heightEnd - toEndHeight)
118- let fkoeficient = fraction((apy * 2), delta, year)
118+ let fkoeficient = fraction((apy * 2), fdelta, year)
119119 let faccumulate = fraction(fkoeficient, amount, 100000000)
120120 (accumulate + faccumulate)
121121 }
183183 else if (((amount + totalInvested) > maxInvest))
184184 then throw("The max invest limit has been reached")
185185 else {
186- let currentApy = getApy(interval, maxInterval)
187186 let userData = readUserData(userAddressString)
188- let noClaimed = calculateToClaim(userData[0], userData[1], userData[2], userData[3], userData[4], userData[5], userData[6])
189- let allAmount = (amount + userData[3])
190- let claimed = userData[4]
191- let toClaim = userData[5]
187+ if ((userData[1] > (((interval * 30) * 24) * 60)))
188+ then throw("Wrong interval")
189+ else {
190+ let currentApy = getApy(interval, maxInterval)
191+ let noClaimed = calculateToClaim(userData[0], userData[1], userData[2], userData[3], userData[4], userData[5], userData[6])
192+ let allAmount = (amount + userData[3])
193+ let claimed = userData[4]
194+ let toClaim = userData[5]
192195 [setUserData(userAddressString, investStart, investEnd, investStart, allAmount, noClaimed, claimed, currentApy), IntegerEntry(totalInvestKey, (amount + totalInvested))]
196+ }
193197 }
194198 }
195199 }
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 = "%s__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 func calculateForfeit (heightStart,heightEnd,claimHeight,amount,toClaim,claimed,apy) = {
112112 let fromClaimHeight = heightStart
113113 let toEndHeight = getMinVal(heightEnd, height)
114114 let delta = (toEndHeight - fromClaimHeight)
115115 let koeficient = fraction(apy, delta, year)
116116 let accumulate = fraction(koeficient, amount, 100000000)
117117 let fdelta = (heightEnd - toEndHeight)
118- let fkoeficient = fraction((apy * 2), delta, year)
118+ let fkoeficient = fraction((apy * 2), fdelta, year)
119119 let faccumulate = fraction(fkoeficient, amount, 100000000)
120120 (accumulate + faccumulate)
121121 }
122122
123123
124124 @Callable(i)
125125 func getApyReaOnly (interval,maxInterval) = {
126126 let currentApy = getApy(interval, maxInterval)
127127 $Tuple2(nil, currentApy)
128128 }
129129
130130
131131
132132 @Callable(i)
133133 func claimReadonly (user) = {
134134 let data = readUserData(user)
135135 let toClaim = calculateToClaim(data[0], data[1], data[2], data[3], data[4], data[5], data[6])
136136 let result = makeString([toString(toClaim), toString(height), toString(data[0]), toString(data[1]), toString(data[2]), toString(data[3]), toString(data[4]), toString(data[5]), toString(data[6])], separator)
137137 $Tuple2(nil, result)
138138 }
139139
140140
141141
142142 @Callable(i)
143143 func forfaitReadonly (user) = {
144144 let data = readUserData(user)
145145 let forfeit = calculateForfeit(data[0], data[1], data[2], data[3], data[4], data[5], data[6])
146146 let result = makeString([toString(forfeit), toString(height), toString(data[0]), toString(data[1]), toString(data[2]), toString(data[3]), toString(data[4]), toString(data[5]), toString(data[6])], separator)
147147 $Tuple2(nil, result)
148148 }
149149
150150
151151
152152 @Callable(i)
153153 func setParams (apyFrom,apyTo,maxIntervalMonths,maxInvest,investAsset) = if ((i.caller != this))
154154 then throw("Not owner")
155155 else [StringEntry(investAssetKey, investAsset), IntegerEntry(apyToKey, apyTo), IntegerEntry(apyFromKey, apyFrom), IntegerEntry(maxIntervalKey, maxIntervalMonths), IntegerEntry(maxInvestKey, maxInvest)]
156156
157157
158158
159159 @Callable(i)
160160 func deposit (interval) = {
161161 let minInterval = getIntOrElse(investIntervalMinKey, 43200)
162162 let maxInvest = getIntOrZero(maxInvestKey)
163163 let totalInvested = getIntOrZero(totalInvestKey)
164164 let investAsset = getStringOrFail(investAssetKey)
165165 let userAddress = i.caller
166166 let userAddressString = toString(userAddress)
167167 let maxInterval = getIntOrZero(maxIntervalKey)
168168 let investStart = height
169169 let investEnd = (investStart + (minInterval * interval))
170170 let invalidAssetMessage = (("Invalid asset. " + investAsset) + " is expected")
171171 if (if ((1 > interval))
172172 then true
173173 else (interval > maxInterval))
174174 then throw("Wrong interval")
175175 else if ((size(i.payments) != 1))
176176 then throw("Invalid payments size")
177177 else {
178178 let payment = i.payments[0]
179179 let amount = payment.amount
180180 let assetId = valueOrErrorMessage(payment.assetId, invalidAssetMessage)
181181 if ((toBase58String(assetId) != investAsset))
182182 then throw(invalidAssetMessage)
183183 else if (((amount + totalInvested) > maxInvest))
184184 then throw("The max invest limit has been reached")
185185 else {
186- let currentApy = getApy(interval, maxInterval)
187186 let userData = readUserData(userAddressString)
188- let noClaimed = calculateToClaim(userData[0], userData[1], userData[2], userData[3], userData[4], userData[5], userData[6])
189- let allAmount = (amount + userData[3])
190- let claimed = userData[4]
191- let toClaim = userData[5]
187+ if ((userData[1] > (((interval * 30) * 24) * 60)))
188+ then throw("Wrong interval")
189+ else {
190+ let currentApy = getApy(interval, maxInterval)
191+ let noClaimed = calculateToClaim(userData[0], userData[1], userData[2], userData[3], userData[4], userData[5], userData[6])
192+ let allAmount = (amount + userData[3])
193+ let claimed = userData[4]
194+ let toClaim = userData[5]
192195 [setUserData(userAddressString, investStart, investEnd, investStart, allAmount, noClaimed, claimed, currentApy), IntegerEntry(totalInvestKey, (amount + totalInvested))]
196+ }
193197 }
194198 }
195199 }
196200
197201
198202
199203 @Callable(i)
200204 func claim () = {
201205 let investAsset = getStringOrFail(investAssetKey)
202206 let data = readUserData(toString(i.caller))
203207 if ((7 > size(data)))
204208 then throw("User has't invest")
205209 else {
206210 let toClaim = calculateToClaim(data[0], data[1], data[2], data[3], data[4], data[5], data[6])
207211 let claimed = (data[4] + toClaim)
208212 let claimHeight = height
209213 if ((toClaim == 0))
210214 then throw("Nothing to claim")
211215 else [ScriptTransfer(i.caller, toClaim, fromBase58String(investAsset)), setUserData(toString(i.caller), data[0], data[1], claimHeight, data[3], 0, claimed, data[6])]
212216 }
213217 }
214218
215219
216220
217221 @Callable(i)
218222 func cancelInvest () = {
219223 let investAsset = getStringOrFail(investAssetKey)
220224 let userData = readUserData(toString(i.caller))
221225 if ((7 > size(userData)))
222226 then throw("User has't invest")
223227 else {
224228 let toClaim = calculateToClaim(userData[0], userData[1], userData[2], userData[3], userData[4], userData[5], userData[6])
225229 let forfeiht = calculateForfeit(userData[0], userData[1], userData[2], userData[3], userData[4], userData[5], userData[6])
226230 let amount = userData[3]
227231 let totalAmount = ((toClaim + amount) - forfeiht)
228232 [ScriptTransfer(i.caller, toClaim, fromBase58String(investAsset)), setUserData(toString(i.caller), 0, 0, 0, 0, 0, 0, 0)]
229233 }
230234 }
231235
232236
233237
234238 @Callable(i)
235239 func deleteAmount () = if ((i.caller != this))
236240 then throw("Not owner")
237241 else [IntegerEntry(totalInvestKey, 0)]
238242
239243

github/deemru/w8io/786bc32 
37.68 ms