tx · C6Qp91LYuYFJs7GnvufZiEed3Gya8H7cGRg144WufMK3

3MpcyLdYAQ6Z14cs1Fy3o7XK1cAHajK5g5N:  -0.01000000 Waves

2022.04.26 18:05 [2025614] smart account 3MpcyLdYAQ6Z14cs1Fy3o7XK1cAHajK5g5N > SELF 0.00000000 Waves

{ "type": 13, "id": "C6Qp91LYuYFJs7GnvufZiEed3Gya8H7cGRg144WufMK3", "fee": 1000000, "feeAssetId": null, "timestamp": 1650985570690, "version": 2, "chainId": 84, "sender": "3MpcyLdYAQ6Z14cs1Fy3o7XK1cAHajK5g5N", "senderPublicKey": "CpN2UR96CYA49vvxNChb3NFpAE9TK2nyuCptRU4VkHzS", "proofs": [ "4XpHsLpF5zJgDr4sKuBHj7K98gp6yt2JZ2cEysKS4EsZSW9BwwNJMLgRc1jEi133KwmbVPdNaFgfaDm5asLRHjyE" ], "script": "base64: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AAAAAQAAAAhpbnRlcnZhbAQAAAALbWluSW50ZXJ2YWwJAQAAAAxnZXRJbnRPckVsc2UAAAACBQAAABRpbnZlc3RJbnRlcnZhbE1pbktleQAAAAAAAACowAQAAAAJbWF4SW52ZXN0CQEAAAAMZ2V0SW50T3JaZXJvAAAAAQUAAAAMbWF4SW52ZXN0S2V5BAAAAA10b3RhbEludmVzdGVkCQEAAAAMZ2V0SW50T3JaZXJvAAAAAQUAAAAOdG90YWxJbnZlc3RLZXkEAAAAC2ludmVzdEFzc2V0CQEAAAAPZ2V0U3RyaW5nT3JGYWlsAAAAAQUAAAAOaW52ZXN0QXNzZXRLZXkEAAAAC3VzZXJBZGRyZXNzCAUAAAABaQAAAAZjYWxsZXIEAAAAEXVzZXJBZGRyZXNzU3RyaW5nCQAEJQAAAAEFAAAAC3VzZXJBZGRyZXNzBAAAAAttYXhJbnRlcnZhbAkBAAAADGdldEludE9yWmVybwAAAAEFAAAADm1heEludGVydmFsS2V5BAAAAAtpbnZlc3RTdGFydAUAAAAGaGVpZ2h0BAAAAAlpbnZlc3RFbmQJAABkAAAAAgUAAAALaW52ZXN0U3RhcnQJAABoAAAAAgUAAAALbWluSW50ZXJ2YWwFAAAACGludGVydmFsBAAAABNpbnZhbGlkQXNzZXRNZXNzYWdlCQABLAAAAAIJAAEsAAAAAgIAAAAPSW52YWxpZCBhc3NldC4gBQAAAAtpbnZlc3RBc3NldAIAAAAMIGlzIGV4cGVjdGVkAwMJAABmAAAAAgAAAAAAAAAAAQUAAAAIaW50ZXJ2YWwGCQAAZgAAAAIFAAAACGludGVydmFsBQAAAAttYXhJbnRlcnZhbAkAAAIAAAABAgAAAA5Xcm9uZyBpbnRlcnZhbAMJAQAAAAIhPQAAAAIJAAGQAAAAAQgFAAAAAWkAAAAIcGF5bWVudHMAAAAAAAAAAAEJAAACAAAAAQIAAAAVSW52YWxpZCBwYXltZW50cyBzaXplBAAAAAdwYXltZW50CQABkQAAAAIIBQAAAAFpAAAACHBheW1lbnRzAAAAAAAAAAAABAAAAAZhbW91bnQIBQAAAAdwYXltZW50AAAABmFtb3VudAQAAAAHYXNzZXRJZAkBAAAAE3ZhbHVlT3JFcnJvck1lc3NhZ2UAAAACCAUAAAAHcGF5bWVudAAAAAdhc3NldElkBQAAABNpbnZhbGlkQXNzZXRNZXNzYWdlAwkBAAAAAiE9AAAAAgkAAlgAAAABBQAAAAdhc3NldElkBQAAAAtpbnZlc3RBc3NldAkAAAIAAAABBQAAABNpbnZhbGlkQXNzZXRNZXNzYWdlAwkAAGYAAAACCQAAZAAAAAIFAAAABmFtb3VudAUAAAANdG90YWxJbnZlc3RlZAUAAAAJbWF4SW52ZXN0CQAAAgAAAAECAAAAJVRoZSBtYXggaW52ZXN0IGxpbWl0IGhhcyBiZWVuIHJlYWNoZWQEAAAACmN1cnJlbnRBcHkJAQAAAAZnZXRBcHkAAAACBQAAAAhpbnRlcnZhbAUAAAALbWF4SW50ZXJ2YWwEAAAACHVzZXJEYXRhCQEAAAAMcmVhZFVzZXJEYXRhAAAAAQUAAAARdXNlckFkZHJlc3NTdHJpbmcEAAAAC2NsYWltSGVpZ2h0CQABkQAAAAIFAAAACHVzZXJEYXRhAAAAAAAAAAACBAAAAAlhbGxBbW91bnQJAABkAAAAAgUAAAAGYW1vdW50CQABkQAAAAIFAAAACHVzZXJEYXRhAAAAAAAAAAADBAAAAAdjbGFpbWVkCQABkQAAAAIFAAAACHVzZXJEYXRhAAAAAAAAAAAEBAAAAAd0b0NsYWltCQABkQAAAAIFAAAACHVzZXJEYXRhAAAAAAAAAAAFCQAETAAAAAIJAQAAAAtzZXRVc2VyRGF0YQAAAAgFAAAAEXVzZXJBZGRyZXNzU3RyaW5nBQAAAAtpbnZlc3RTdGFydAUAAAAJaW52ZXN0RW5kBQAAAAtjbGFpbUhlaWdodAUAAAAJYWxsQW1vdW50BQAAAAd0b0NsYWltBQAAAAdjbGFpbWVkBQAAAApjdXJyZW50QXB5CQAETAAAAAIJAQAAAAxJbnRlZ2VyRW50cnkAAAACBQAAAA50b3RhbEludmVzdEtleQkAAGQAAAACBQAAAAZhbW91bnQFAAAADXRvdGFsSW52ZXN0ZWQFAAAAA25pbAAAAAFpAQAAAAVjbGFpbQAAAAAEAAAAC2ludmVzdEFzc2V0CQEAAAAPZ2V0U3RyaW5nT3JGYWlsAAAAAQUAAAAOaW52ZXN0QXNzZXRLZXkEAAAABGRhdGEJAQAAAAxyZWFkVXNlckRhdGEAAAABCQAEJQAAAAEIBQAAAAFpAAAABmNhbGxlcgMJAABmAAAAAgAAAAAAAAAABwkAAZAAAAABBQAAAARkYXRhCQAAAgAAAAECAAAAEVVzZXIgaGFzJ3QgaW52ZXN0BAAAAAd0b0NsYWltCQEAAAAQY2FsY3VsYXRlVG9DbGFpbQAAAAcJAAGRAAAAAgUAAAAEZGF0YQAAAAAAAAAAAAkAAZEAAAACBQAAAARkYXRhAAAAAAAAAAABCQABkQAAAAIFAAAABGRhdGEAAAAAAAAAAAIJAAGRAAAAAgUAAAAEZGF0YQAAAAAAAAAAAwkAAZEAAAACBQAAAARkYXRhAAAAAAAAAAAECQABkQAAAAIFAAAABGRhdGEAAAAAAAAAAAUJAAGRAAAAAgUAAAAEZGF0YQAAAAAAAAAABgQAAAAHY2xhaW1lZAkAAGQAAAACCQABkQAAAAIFAAAABGRhdGEAAAAAAAAAAAQFAAAAB3RvQ2xhaW0EAAAAC2NsYWltSGVpZ2h0BQAAAAZoZWlnaHQDAwMJAQAAAAlpc0RlZmluZWQAAAABBQAAAAd0b0NsYWltBgkAAAAAAAACBQAAAAd0b0NsYWltAAAAAAAAAAAABgkAAAAAAAACCQABkQAAAAIFAAAABGRhdGEAAAAAAAAAAAAAAAAAAAAAAAAJAAACAAAAAQIAAAAQTm90aGluZyB0byBjbGFpbQkABEwAAAACCQEAAAAOU2NyaXB0VHJhbnNmZXIAAAADCAUAAAABaQAAAAZjYWxsZXIFAAAAB3RvQ2xhaW0JAAJZAAAAAQUAAAALaW52ZXN0QXNzZXQJAARMAAAAAgkBAAAAC3NldFVzZXJEYXRhAAAACAkABCUAAAABCAUAAAABaQAAAAZjYWxsZXIJAAGRAAAAAgUAAAAEZGF0YQAAAAAAAAAAAAkAAZEAAAACBQAAAARkYXRhAAAAAAAAAAABBQAAAAtjbGFpbUhlaWdodAkAAZEAAAACBQAAAARkYXRhAAAAAAAAAAADAAAAAAAAAAAABQAAAAdjbGFpbWVkCQABkQAAAAIFAAAABGRhdGEAAAAAAAAAAAYFAAAAA25pbAAAAACXqj6L", "height": 2025614, "applicationStatus": "succeeded", "spentComplexity": 0 } View: original | compacted Prev: 9swq2oBKmbm4BChnXnNAMexpjisZaUzr28X96mUfBpjc Next: 2qGMpEfC7atNXoFgTmJkrF2mptX9b1yYuoCV9aadReey Diff:
OldNewDifferences
6363 else fromBase58String(assetStr)
6464
6565
66-func getApy (interval,apyFrom,apyTo,maxInterval) = (((((apyTo - apyFrom) * 1000000) / (maxInterval - 1)) * (interval - 1)) + apyFrom)
66+func getApy (interval,maxInterval) = {
67+ let apyTo = getIntOrZero(apyFromKey)
68+ let apyFrom = getIntOrZero(apyToKey)
69+ (((((apyTo - apyFrom) * 1000000) / (maxInterval - 1)) * (interval - 1)) + apyFrom)
70+ }
6771
6872
6973 func readUserData (user) = {
99103
100104
101105 @Callable(i)
106+func getApyReaOnly (interval,maxInterval) = $Tuple2(nil, getApy(interval, maxInterval))
107+
108+
109+
110+@Callable(i)
102111 func claimReadonly (user) = {
103112 let data = readUserData(user)
104113 let toClaim = calculateToClaim(data[0], data[1], data[2], data[3], data[4], data[5], data[6])
120129 let investAsset = getStringOrFail(investAssetKey)
121130 let userAddress = i.caller
122131 let userAddressString = toString(userAddress)
123- let apyTo = getIntOrZero(apyFromKey)
124- let apyFrom = getIntOrZero(apyToKey)
125132 let maxInterval = getIntOrZero(maxIntervalKey)
126133 let investStart = height
127134 let investEnd = (investStart + (minInterval * interval))
141148 else if (((amount + totalInvested) > maxInvest))
142149 then throw("The max invest limit has been reached")
143150 else {
144- let currentApy = getApy(interval, apyFrom, apyTo, maxInterval)
151+ let currentApy = getApy(interval, maxInterval)
145152 let userData = readUserData(userAddressString)
146153 let claimHeight = userData[2]
147154 let allAmount = (amount + userData[3])
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
66-func getApy (interval,apyFrom,apyTo,maxInterval) = (((((apyTo - apyFrom) * 1000000) / (maxInterval - 1)) * (interval - 1)) + apyFrom)
66+func getApy (interval,maxInterval) = {
67+ let apyTo = getIntOrZero(apyFromKey)
68+ let apyFrom = getIntOrZero(apyToKey)
69+ (((((apyTo - apyFrom) * 1000000) / (maxInterval - 1)) * (interval - 1)) + apyFrom)
70+ }
6771
6872
6973 func readUserData (user) = {
7074 let data = split(getStrOrElse(getUserInvestKey(user), ""), separator)
7175 if ((7 > size(data)))
7276 then [0, 0, 0, 0, 0, 0, 0]
7377 else {
7478 let heightStart = valueOrElse(parseInt(data[1]), 0)
7579 let heightEnd = valueOrElse(parseInt(data[2]), 0)
7680 let claimed = valueOrElse(parseInt(data[3]), 0)
7781 let amount = valueOrElse(parseInt(data[4]), 0)
7882 let toClaim = valueOrElse(parseInt(data[5]), 0)
7983 let claimHeight = valueOrElse(parseInt(data[6]), 0)
8084 let apy = valueOrElse(parseInt(data[7]), 0)
8185 [heightStart, heightEnd, claimHeight, amount, toClaim, claimed, apy]
8286 }
8387 }
8488
8589
8690 func setUserData (user,heightStart,heightEnd,claimHeight,amount,toClaim,claimed,apy) = {
8791 let key = getUserInvestKey(user)
8892 let data = makeString(["%d%d%d%d%d%d", toString(heightStart), toString(heightEnd), toString(claimHeight), toString(amount), toString(toClaim), toString(claimed), toString(apy)], separator)
8993 StringEntry(key, data)
9094 }
9195
9296
9397 func calculateToClaim (heightStart,heightEnd,claimHeight,amount,toClaim,claimed,apy) = {
9498 let toClaimHeight = valueOrDefault(claimHeight, heightStart)
9599 let toEndHeight = getMinVal(heightEnd, height)
96100 let delta = fraction(100000, (toEndHeight - toClaimHeight), year)
97101 (((((delta * amount) * apy) / 100000) / 100000) + toClaim)
98102 }
99103
100104
101105 @Callable(i)
106+func getApyReaOnly (interval,maxInterval) = $Tuple2(nil, getApy(interval, maxInterval))
107+
108+
109+
110+@Callable(i)
102111 func claimReadonly (user) = {
103112 let data = readUserData(user)
104113 let toClaim = calculateToClaim(data[0], data[1], data[2], data[3], data[4], data[5], data[6])
105114 $Tuple2(nil, toClaim)
106115 }
107116
108117
109118
110119 @Callable(i)
111120 func setParams (apyFrom,apyTo,maxIntervalMonths,maxInvest,investAsset) = [StringEntry(investAssetKey, investAsset), IntegerEntry(apyToKey, apyTo), IntegerEntry(apyFromKey, apyFrom), IntegerEntry(maxIntervalKey, maxIntervalMonths), IntegerEntry(maxInvestKey, maxInvest)]
112121
113122
114123
115124 @Callable(i)
116125 func deposit (interval) = {
117126 let minInterval = getIntOrElse(investIntervalMinKey, 43200)
118127 let maxInvest = getIntOrZero(maxInvestKey)
119128 let totalInvested = getIntOrZero(totalInvestKey)
120129 let investAsset = getStringOrFail(investAssetKey)
121130 let userAddress = i.caller
122131 let userAddressString = toString(userAddress)
123- let apyTo = getIntOrZero(apyFromKey)
124- let apyFrom = getIntOrZero(apyToKey)
125132 let maxInterval = getIntOrZero(maxIntervalKey)
126133 let investStart = height
127134 let investEnd = (investStart + (minInterval * interval))
128135 let invalidAssetMessage = (("Invalid asset. " + investAsset) + " is expected")
129136 if (if ((1 > interval))
130137 then true
131138 else (interval > maxInterval))
132139 then throw("Wrong interval")
133140 else if ((size(i.payments) != 1))
134141 then throw("Invalid payments size")
135142 else {
136143 let payment = i.payments[0]
137144 let amount = payment.amount
138145 let assetId = valueOrErrorMessage(payment.assetId, invalidAssetMessage)
139146 if ((toBase58String(assetId) != investAsset))
140147 then throw(invalidAssetMessage)
141148 else if (((amount + totalInvested) > maxInvest))
142149 then throw("The max invest limit has been reached")
143150 else {
144- let currentApy = getApy(interval, apyFrom, apyTo, maxInterval)
151+ let currentApy = getApy(interval, maxInterval)
145152 let userData = readUserData(userAddressString)
146153 let claimHeight = userData[2]
147154 let allAmount = (amount + userData[3])
148155 let claimed = userData[4]
149156 let toClaim = userData[5]
150157 [setUserData(userAddressString, investStart, investEnd, claimHeight, allAmount, toClaim, claimed, currentApy), IntegerEntry(totalInvestKey, (amount + totalInvested))]
151158 }
152159 }
153160 }
154161
155162
156163
157164 @Callable(i)
158165 func claim () = {
159166 let investAsset = getStringOrFail(investAssetKey)
160167 let data = readUserData(toString(i.caller))
161168 if ((7 > size(data)))
162169 then throw("User has't invest")
163170 else {
164171 let toClaim = calculateToClaim(data[0], data[1], data[2], data[3], data[4], data[5], data[6])
165172 let claimed = (data[4] + toClaim)
166173 let claimHeight = height
167174 if (if (if (isDefined(toClaim))
168175 then true
169176 else (toClaim == 0))
170177 then true
171178 else (data[0] == 0))
172179 then throw("Nothing to claim")
173180 else [ScriptTransfer(i.caller, toClaim, fromBase58String(investAsset)), setUserData(toString(i.caller), data[0], data[1], claimHeight, data[3], 0, claimed, data[6])]
174181 }
175182 }
176183
177184

github/deemru/w8io/c3f4982 
43.36 ms