tx · 4Xn2yWJ11jtwZGd8bcVyt3yWpasLQ28iRcPNK4MCJsFj

3PFoA1JFDoLWQJ3DqzAHNrrWR4riVuBfHks:  -0.01000000 Waves

2022.04.20 12:48 [3082028] smart account 3PFoA1JFDoLWQJ3DqzAHNrrWR4riVuBfHks > SELF 0.00000000 Waves

{ "type": 13, "id": "4Xn2yWJ11jtwZGd8bcVyt3yWpasLQ28iRcPNK4MCJsFj", "fee": 1000000, "feeAssetId": null, "timestamp": 1650448135178, "version": 1, "sender": "3PFoA1JFDoLWQJ3DqzAHNrrWR4riVuBfHks", "senderPublicKey": "5wDXuHuaDELQu1VzL96PvhJeSpJGXHu9W9v3booheS1R", "proofs": [ "5KenwVjFgXbMj4yDoQgKL45mepNppaZ8VY3fTbF2xyXW63ZRVFyetrvBu7hWy5xcXXuYrCxFL7rwKWiTEu6cRAju" ], "script": "base64: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", "chainId": 87, "height": 3082028, "applicationStatus": "succeeded", "spentComplexity": 0 } View: original | compacted Prev: FzidwHtWi5zc35JvbRdjVK1kwXbEejDAEge9yV5B1Xr5 Next: Dszrxn96N3zTGY9qbVdwZ9k6gTwHuhxbvBGwqPK4TZ3t Diff:
OldNewDifferences
2424 func limit (assetId) = getInteger(configAddress, (assetId + "_WithdrawLimitAcc"))
2525
2626
27-func userWithdrawnWithinEpochStore (start,user,assetId) = ((((("withdrawn_" + user) + "_") + assetId) + "_") + toString(start))
27+func userWithdrawnWithinEpochStore (user,assetId) = ((("withdrawn_" + user) + "_") + assetId)
2828
2929
3030 @Callable(i)
3434
3535 @Callable(i)
3636 func validateWithdrawLimit (assetId,user,amount) = match limit(assetId) {
37- case l: Int =>
37+ case lmt: Int =>
3838 let currentEpochStart = ((HEIGHT / timeframe) * timeframe)
3939 let currentEpochEnd = ((1 + (HEIGHT / timeframe)) * timeframe)
40- let store = userWithdrawnWithinEpochStore(currentEpochStart, user, assetId)
41- let userWithdrawnWithinTheEpoch = valueOrElse(getInteger(store), 0)
42- if (((userWithdrawnWithinTheEpoch + amount) > l))
43- then throw(((((((("breaching withdraw limit per " + toString(l)) + " ") + assetId) + " over ") + toString(timeframe)) + " blocks. Available: ") + toString((l - userWithdrawnWithinTheEpoch))))
44- else $Tuple2([IntegerEntry(store, (userWithdrawnWithinTheEpoch + amount))], (l - userWithdrawnWithinTheEpoch))
40+ let store = userWithdrawnWithinEpochStore(user, assetId)
41+ let $t012941518 = match getString(store) {
42+ case s: String =>
43+ let data = split(s, "|")
44+ $Tuple2(parseIntValue(data[0]), parseIntValue(data[1]))
45+ case _ =>
46+ $Tuple2(0, 0)
47+ }
48+ let epoch = $t012941518._1
49+ let withdrawn = $t012941518._2
50+ let userWithdrawnWithinCurrentEpoch = if ((epoch == currentEpochStart))
51+ then withdrawn
52+ else 0
53+ if (((userWithdrawnWithinCurrentEpoch + amount) > lmt))
54+ then throw(((((((((((("breaching withdraw limit per " + toString(lmt)) + " ") + assetId) + " over ") + toString(timeframe)) + " blocks. Available: ") + toString((lmt - userWithdrawnWithinCurrentEpoch))) + " current epoch: ") + toString(currentEpochStart)) + "-") + toString(currentEpochEnd)))
55+ else $Tuple2([StringEntry(store, ((toString(currentEpochStart) + "|") + toString((userWithdrawnWithinCurrentEpoch + amount))))], ((lmt - userWithdrawnWithinCurrentEpoch) - amount))
4556 case _ =>
4657 $Tuple2(nil, -1)
4758 }
Full:
OldNewDifferences
11 {-# STDLIB_VERSION 5 #-}
22 {-# SCRIPT_TYPE ACCOUNT #-}
33 {-# CONTENT_TYPE DAPP #-}
44 func writeConstString (key,value) = if (!(isDefined(getString(this, key))))
55 then StringEntry(key, value)
66 else throw(("already initialized: " + key))
77
88
99 let configStore = "config"
1010
1111 let configAddress = addressFromStringValue(getStringValue(this, configStore))
1212
1313 let maybeOracleAddress = match getString(configAddress, "oracle_address") {
1414 case s: String =>
1515 addressFromString(s)
1616 case _ =>
1717 unit
1818 }
1919
2020 let HEIGHT = height
2121
2222 let timeframe = valueOrElse(getInteger(configAddress, "WithdrawLimitTimeframe"), 1)
2323
2424 func limit (assetId) = getInteger(configAddress, (assetId + "_WithdrawLimitAcc"))
2525
2626
27-func userWithdrawnWithinEpochStore (start,user,assetId) = ((((("withdrawn_" + user) + "_") + assetId) + "_") + toString(start))
27+func userWithdrawnWithinEpochStore (user,assetId) = ((("withdrawn_" + user) + "_") + assetId)
2828
2929
3030 @Callable(i)
3131 func initialize (ca) = [writeConstString(configStore, ca)]
3232
3333
3434
3535 @Callable(i)
3636 func validateWithdrawLimit (assetId,user,amount) = match limit(assetId) {
37- case l: Int =>
37+ case lmt: Int =>
3838 let currentEpochStart = ((HEIGHT / timeframe) * timeframe)
3939 let currentEpochEnd = ((1 + (HEIGHT / timeframe)) * timeframe)
40- let store = userWithdrawnWithinEpochStore(currentEpochStart, user, assetId)
41- let userWithdrawnWithinTheEpoch = valueOrElse(getInteger(store), 0)
42- if (((userWithdrawnWithinTheEpoch + amount) > l))
43- then throw(((((((("breaching withdraw limit per " + toString(l)) + " ") + assetId) + " over ") + toString(timeframe)) + " blocks. Available: ") + toString((l - userWithdrawnWithinTheEpoch))))
44- else $Tuple2([IntegerEntry(store, (userWithdrawnWithinTheEpoch + amount))], (l - userWithdrawnWithinTheEpoch))
40+ let store = userWithdrawnWithinEpochStore(user, assetId)
41+ let $t012941518 = match getString(store) {
42+ case s: String =>
43+ let data = split(s, "|")
44+ $Tuple2(parseIntValue(data[0]), parseIntValue(data[1]))
45+ case _ =>
46+ $Tuple2(0, 0)
47+ }
48+ let epoch = $t012941518._1
49+ let withdrawn = $t012941518._2
50+ let userWithdrawnWithinCurrentEpoch = if ((epoch == currentEpochStart))
51+ then withdrawn
52+ else 0
53+ if (((userWithdrawnWithinCurrentEpoch + amount) > lmt))
54+ then throw(((((((((((("breaching withdraw limit per " + toString(lmt)) + " ") + assetId) + " over ") + toString(timeframe)) + " blocks. Available: ") + toString((lmt - userWithdrawnWithinCurrentEpoch))) + " current epoch: ") + toString(currentEpochStart)) + "-") + toString(currentEpochEnd)))
55+ else $Tuple2([StringEntry(store, ((toString(currentEpochStart) + "|") + toString((userWithdrawnWithinCurrentEpoch + amount))))], ((lmt - userWithdrawnWithinCurrentEpoch) - amount))
4556 case _ =>
4657 $Tuple2(nil, -1)
4758 }
4859
4960

github/deemru/w8io/3ef1775 
27.55 ms