tx · FzidwHtWi5zc35JvbRdjVK1kwXbEejDAEge9yV5B1Xr5

3PFoA1JFDoLWQJ3DqzAHNrrWR4riVuBfHks:  -0.01000000 Waves

2022.04.16 16:16 [3076471] smart account 3PFoA1JFDoLWQJ3DqzAHNrrWR4riVuBfHks > SELF 0.00000000 Waves

{ "type": 13, "id": "FzidwHtWi5zc35JvbRdjVK1kwXbEejDAEge9yV5B1Xr5", "fee": 1000000, "feeAssetId": null, "timestamp": 1650114992934, "version": 1, "sender": "3PFoA1JFDoLWQJ3DqzAHNrrWR4riVuBfHks", "senderPublicKey": "5wDXuHuaDELQu1VzL96PvhJeSpJGXHu9W9v3booheS1R", "proofs": [ "3iszW4PyBcEyzGqYowtuBkaSrqsqkNQTRZMrLn9WcNLnG9CaeARuFJrDht6NSFQAHgjx6TXu1UrFqS2pXhryNzmd" ], "script": "base64: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", "chainId": 87, "height": 3076471, "applicationStatus": "succeeded", "spentComplexity": 0 } View: original | compacted Prev: none Next: 4Xn2yWJ11jtwZGd8bcVyt3yWpasLQ28iRcPNK4MCJsFj Full:
OldNewDifferences
1-# no script
1+{-# STDLIB_VERSION 5 #-}
2+{-# SCRIPT_TYPE ACCOUNT #-}
3+{-# CONTENT_TYPE DAPP #-}
4+func writeConstString (key,value) = if (!(isDefined(getString(this, key))))
5+ then StringEntry(key, value)
6+ else throw(("already initialized: " + key))
7+
8+
9+let configStore = "config"
10+
11+let configAddress = addressFromStringValue(getStringValue(this, configStore))
12+
13+let maybeOracleAddress = match getString(configAddress, "oracle_address") {
14+ case s: String =>
15+ addressFromString(s)
16+ case _ =>
17+ unit
18+}
19+
20+let HEIGHT = height
21+
22+let timeframe = valueOrElse(getInteger(configAddress, "WithdrawLimitTimeframe"), 1)
23+
24+func limit (assetId) = getInteger(configAddress, (assetId + "_WithdrawLimitAcc"))
25+
26+
27+func userWithdrawnWithinEpochStore (start,user,assetId) = ((((("withdrawn_" + user) + "_") + assetId) + "_") + toString(start))
28+
29+
30+@Callable(i)
31+func initialize (ca) = [writeConstString(configStore, ca)]
32+
33+
34+
35+@Callable(i)
36+func validateWithdrawLimit (assetId,user,amount) = match limit(assetId) {
37+ case l: Int =>
38+ let currentEpochStart = ((HEIGHT / timeframe) * timeframe)
39+ 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))
45+ case _ =>
46+ $Tuple2(nil, -1)
47+}
48+
49+

github/deemru/w8io/3ef1775 
23.86 ms