tx · 9mqX3bDoDeF3GW55sTyqrv8K2zfCcr5tAhdGHib1uc5F

3MpcyLdYAQ6Z14cs1Fy3o7XK1cAHajK5g5N:  -0.01000000 Waves

2022.04.26 17:32 [2025582] smart account 3MpcyLdYAQ6Z14cs1Fy3o7XK1cAHajK5g5N > SELF 0.00000000 Waves

{ "type": 13, "id": "9mqX3bDoDeF3GW55sTyqrv8K2zfCcr5tAhdGHib1uc5F", "fee": 1000000, "feeAssetId": null, "timestamp": 1650983577895, "version": 2, "chainId": 84, "sender": "3MpcyLdYAQ6Z14cs1Fy3o7XK1cAHajK5g5N", "senderPublicKey": "CpN2UR96CYA49vvxNChb3NFpAE9TK2nyuCptRU4VkHzS", "proofs": [ "5LdSA131z5AVhkgiqLzaA9r9efXszdoCsaiZNeXdhJZMzQCaYJzxJUsmX1FPKssEyAbJZD4V8gKDk8GMn2y14wpF" ], "script": "base64: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c3RLZXkEAAAAC2ludmVzdEFzc2V0CQEAAAAPZ2V0U3RyaW5nT3JGYWlsAAAAAQUAAAAOaW52ZXN0QXNzZXRLZXkEAAAAC3VzZXJBZGRyZXNzCAUAAAABaQAAAAZjYWxsZXIEAAAAEXVzZXJBZGRyZXNzU3RyaW5nCQAEJQAAAAEFAAAAC3VzZXJBZGRyZXNzBAAAAAVhcHlUbwkBAAAADGdldEludE9yWmVybwAAAAEFAAAACmFweUZyb21LZXkEAAAAB2FweUZyb20JAQAAAAxnZXRJbnRPclplcm8AAAABBQAAAAhhcHlUb0tleQQAAAALbWF4SW50ZXJ2YWwJAQAAAAxnZXRJbnRPclplcm8AAAABBQAAAA5tYXhJbnRlcnZhbEtleQQAAAALaW52ZXN0U3RhcnQFAAAABmhlaWdodAQAAAAJaW52ZXN0RW5kCQAAZAAAAAIFAAAAC2ludmVzdFN0YXJ0CQAAaAAAAAIFAAAAC21pbkludGVydmFsBQAAAAhpbnRlcnZhbAQAAAATaW52YWxpZEFzc2V0TWVzc2FnZQkAASwAAAACCQABLAAAAAICAAAAD0ludmFsaWQgYXNzZXQuIAUAAAALaW52ZXN0QXNzZXQCAAAADCBpcyBleHBlY3RlZAMDCQAAZgAAAAIAAAAAAAAAAAEFAAAACGludGVydmFsBgkAAGYAAAACBQAAAAhpbnRlcnZhbAUAAAALbWF4SW50ZXJ2YWwJAAACAAAAAQIAAAAOV3JvbmcgaW50ZXJ2YWwDCQEAAAACIT0AAAACCQABkAAAAAEIBQAAAAFpAAAACHBheW1lbnRzAAAAAAAAAAABCQAAAgAAAAECAAAAFUludmFsaWQgcGF5bWVudHMgc2l6ZQQAAAAHcGF5bWVudAkAAZEAAAACCAUAAAABaQAAAAhwYXltZW50cwAAAAAAAAAAAAQAAAAGYW1vdW50CAUAAAAHcGF5bWVudAAAAAZhbW91bnQEAAAAB2Fzc2V0SWQJAQAAABN2YWx1ZU9yRXJyb3JNZXNzYWdlAAAAAggFAAAAB3BheW1lbnQAAAAHYXNzZXRJZAUAAAATaW52YWxpZEFzc2V0TWVzc2FnZQMJAQAAAAIhPQAAAAIJAAJYAAAAAQUAAAAHYXNzZXRJZAUAAAALaW52ZXN0QXNzZXQJAAACAAAAAQUA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", "height": 2025582, "applicationStatus": "succeeded", "spentComplexity": 0 } View: original | compacted Prev: 8amoenAomWEpXPyFf245wX4x6Cnr4xfBw9mqgMXDJvdv Next: 9swq2oBKmbm4BChnXnNAMexpjisZaUzr28X96mUfBpjc Diff:
OldNewDifferences
147147 let allAmount = (amount + userData[3])
148148 let claimed = userData[4]
149149 let toClaim = userData[5]
150- let key = getUserInvestKey(userAddressString)
151- let dataToSave = makeString(["%d%d%d%d%d%d", toString(investStart), toString(investEnd), toString(claimHeight), toString(amount), toString(toClaim), toString(claimed), toString(currentApy)], separator)
152-[StringEntry(key, dataToSave)]
150+[setUserData(userAddressString, investStart, investEnd, claimHeight, allAmount, toClaim, claimed, currentApy)]
153151 }
154152 }
155153 }
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,apyFrom,apyTo,maxInterval) = (((((apyTo - apyFrom) * 1000000) / (maxInterval - 1)) * (interval - 1)) + apyFrom)
6767
6868
6969 func readUserData (user) = {
7070 let data = split(getStrOrElse(getUserInvestKey(user), ""), separator)
7171 if ((7 > size(data)))
7272 then [0, 0, 0, 0, 0, 0, 0]
7373 else {
7474 let heightStart = valueOrElse(parseInt(data[1]), 0)
7575 let heightEnd = valueOrElse(parseInt(data[2]), 0)
7676 let claimed = valueOrElse(parseInt(data[3]), 0)
7777 let amount = valueOrElse(parseInt(data[4]), 0)
7878 let toClaim = valueOrElse(parseInt(data[5]), 0)
7979 let claimHeight = valueOrElse(parseInt(data[6]), 0)
8080 let apy = valueOrElse(parseInt(data[7]), 0)
8181 [heightStart, heightEnd, claimHeight, amount, toClaim, claimed, apy]
8282 }
8383 }
8484
8585
8686 func setUserData (user,heightStart,heightEnd,claimHeight,amount,toClaim,claimed,apy) = {
8787 let key = getUserInvestKey(user)
8888 let data = makeString(["%d%d%d%d%d%d", toString(heightStart), toString(heightEnd), toString(claimHeight), toString(amount), toString(toClaim), toString(claimed), toString(apy)], separator)
8989 StringEntry(key, data)
9090 }
9191
9292
9393 func calculateToClaim (heightStart,heightEnd,claimHeight,amount,toClaim,claimed,apy) = {
9494 let toClaimHeight = valueOrDefault(claimHeight, heightStart)
9595 let toEndHeight = getMinVal(heightEnd, height)
9696 let delta = fraction(100000, (toEndHeight - toClaimHeight), year)
9797 (((((delta * amount) * apy) / 100000) / 100000) + toClaim)
9898 }
9999
100100
101101 @Callable(i)
102102 func claimReadonly (user) = {
103103 let data = readUserData(user)
104104 let toClaim = calculateToClaim(data[0], data[1], data[2], data[3], data[4], data[5], data[6])
105105 $Tuple2(nil, toClaim)
106106 }
107107
108108
109109
110110 @Callable(i)
111111 func setParams (apyFrom,apyTo,maxIntervalMonths,maxInvest,investAsset) = [StringEntry(investAssetKey, investAsset), IntegerEntry(apyToKey, apyTo), IntegerEntry(apyFromKey, apyFrom), IntegerEntry(maxIntervalKey, maxIntervalMonths), IntegerEntry(maxInvestKey, maxInvest)]
112112
113113
114114
115115 @Callable(i)
116116 func deposit (interval) = {
117117 let minInterval = getIntOrElse(investIntervalMinKey, 43200)
118118 let maxInvest = getIntOrZero(maxInvestKey)
119119 let totalInvested = getIntOrZero(totalInvestKey)
120120 let investAsset = getStringOrFail(investAssetKey)
121121 let userAddress = i.caller
122122 let userAddressString = toString(userAddress)
123123 let apyTo = getIntOrZero(apyFromKey)
124124 let apyFrom = getIntOrZero(apyToKey)
125125 let maxInterval = getIntOrZero(maxIntervalKey)
126126 let investStart = height
127127 let investEnd = (investStart + (minInterval * interval))
128128 let invalidAssetMessage = (("Invalid asset. " + investAsset) + " is expected")
129129 if (if ((1 > interval))
130130 then true
131131 else (interval > maxInterval))
132132 then throw("Wrong interval")
133133 else if ((size(i.payments) != 1))
134134 then throw("Invalid payments size")
135135 else {
136136 let payment = i.payments[0]
137137 let amount = payment.amount
138138 let assetId = valueOrErrorMessage(payment.assetId, invalidAssetMessage)
139139 if ((toBase58String(assetId) != investAsset))
140140 then throw(invalidAssetMessage)
141141 else if (((amount + totalInvested) > maxInvest))
142142 then throw("The max invest limit has been reached")
143143 else {
144144 let currentApy = getApy(interval, apyFrom, apyTo, maxInterval)
145145 let userData = readUserData(userAddressString)
146146 let claimHeight = userData[2]
147147 let allAmount = (amount + userData[3])
148148 let claimed = userData[4]
149149 let toClaim = userData[5]
150- let key = getUserInvestKey(userAddressString)
151- let dataToSave = makeString(["%d%d%d%d%d%d", toString(investStart), toString(investEnd), toString(claimHeight), toString(amount), toString(toClaim), toString(claimed), toString(currentApy)], separator)
152-[StringEntry(key, dataToSave)]
150+[setUserData(userAddressString, investStart, investEnd, claimHeight, allAmount, toClaim, claimed, currentApy)]
153151 }
154152 }
155153 }
156154
157155
158156
159157 @Callable(i)
160158 func claim () = {
161159 let investAsset = getStringOrFail(investAssetKey)
162160 let data = readUserData(toString(i.caller))
163161 if ((7 > size(data)))
164162 then throw("User has't invest")
165163 else {
166164 let toClaim = calculateToClaim(data[0], data[1], data[2], data[3], data[4], data[5], data[6])
167165 let claimed = (data[4] + toClaim)
168166 let claimHeight = height
169167 if (if (if (isDefined(toClaim))
170168 then true
171169 else (toClaim == 0))
172170 then true
173171 else (data[0] == 0))
174172 then throw("Nothing to claim")
175173 else [ScriptTransfer(i.caller, toClaim, fromBase58String(investAsset)), setUserData(toString(i.caller), data[0], data[1], claimHeight, data[3], 0, claimed, data[6])]
176174 }
177175 }
178176
179177

github/deemru/w8io/3ef1775 
53.64 ms