tx · Dszrxn96N3zTGY9qbVdwZ9k6gTwHuhxbvBGwqPK4TZ3t

3PFoA1JFDoLWQJ3DqzAHNrrWR4riVuBfHks:  -0.01000000 Waves

2022.04.25 12:07 [3089213] smart account 3PFoA1JFDoLWQJ3DqzAHNrrWR4riVuBfHks > SELF 0.00000000 Waves

{ "type": 13, "id": "Dszrxn96N3zTGY9qbVdwZ9k6gTwHuhxbvBGwqPK4TZ3t", "fee": 1000000, "feeAssetId": null, "timestamp": 1650877591101, "version": 1, "sender": "3PFoA1JFDoLWQJ3DqzAHNrrWR4riVuBfHks", "senderPublicKey": "5wDXuHuaDELQu1VzL96PvhJeSpJGXHu9W9v3booheS1R", "proofs": [ "53WWvw3RSDetA4uVQbfi2S2JyazZpbDgmEX2fFn7iCPYA4DzrQd6v1uE6NoSVQfNkFrNBSRFEZGxu19Db7Ji9MWo" ], "script": "base64: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", "chainId": 87, "height": 3089213, "applicationStatus": "succeeded", "spentComplexity": 0 } View: original | compacted Prev: 4Xn2yWJ11jtwZGd8bcVyt3yWpasLQ28iRcPNK4MCJsFj Next: 3tyZP396He9WXQoCDehks6KzZfCNiKnD9koKmMBJUdbL Diff:
OldNewDifferences
2727 func userWithdrawnWithinEpochStore (user,assetId) = ((("withdrawn_" + user) + "_") + assetId)
2828
2929
30+let mainContract = valueOrErrorMessage(addressFromString(valueOrErrorMessage(getString(configAddress, "main"), "no main in config")), "invalid main address")
31+
32+func mainOnly (i) = if ((i.caller != mainContract))
33+ then throw("only main can do")
34+ else true
35+
36+
3037 @Callable(i)
3138 func initialize (ca) = [writeConstString(configStore, ca)]
3239
3340
3441
3542 @Callable(i)
36-func validateWithdrawLimit (assetId,user,amount) = match limit(assetId) {
37- case lmt: Int =>
38- let currentEpochStart = ((HEIGHT / timeframe) * timeframe)
39- let currentEpochEnd = ((1 + (HEIGHT / timeframe)) * timeframe)
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]))
43+func validateWithdrawLimit (assetId,user,amount) = {
44+ let m = mainOnly(i)
45+ if ((m == m))
46+ then match limit(assetId) {
47+ case lmt: Int =>
48+ let currentEpochStart = ((HEIGHT / timeframe) * timeframe)
49+ let currentEpochEnd = ((1 + (HEIGHT / timeframe)) * timeframe)
50+ let store = userWithdrawnWithinEpochStore(user, assetId)
51+ let $t015801804 = match getString(store) {
52+ case s: String =>
53+ let data = split(s, "|")
54+ $Tuple2(parseIntValue(data[0]), parseIntValue(data[1]))
55+ case _ =>
56+ $Tuple2(0, 0)
57+ }
58+ let epoch = $t015801804._1
59+ let withdrawn = $t015801804._2
60+ let userWithdrawnWithinCurrentEpoch = if ((epoch == currentEpochStart))
61+ then withdrawn
62+ else 0
63+ if (((userWithdrawnWithinCurrentEpoch + amount) > lmt))
64+ then throw(((((((((((("breaching withdraw limit per " + toString(lmt)) + " ") + assetId) + " over ") + toString(timeframe)) + " blocks. Available: ") + toString((lmt - userWithdrawnWithinCurrentEpoch))) + " current epoch: ") + toString(currentEpochStart)) + "-") + toString(currentEpochEnd)))
65+ else $Tuple2([StringEntry(store, ((toString(currentEpochStart) + "|") + toString((userWithdrawnWithinCurrentEpoch + amount))))], ((lmt - userWithdrawnWithinCurrentEpoch) - amount))
4566 case _ =>
46- $Tuple2(0, 0)
67+ $Tuple2(nil, -1)
4768 }
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))
56- case _ =>
57- $Tuple2(nil, -1)
58-}
69+ else throw("Strict value is not equal to itself.")
70+ }
5971
6072
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
2727 func userWithdrawnWithinEpochStore (user,assetId) = ((("withdrawn_" + user) + "_") + assetId)
2828
2929
30+let mainContract = valueOrErrorMessage(addressFromString(valueOrErrorMessage(getString(configAddress, "main"), "no main in config")), "invalid main address")
31+
32+func mainOnly (i) = if ((i.caller != mainContract))
33+ then throw("only main can do")
34+ else true
35+
36+
3037 @Callable(i)
3138 func initialize (ca) = [writeConstString(configStore, ca)]
3239
3340
3441
3542 @Callable(i)
36-func validateWithdrawLimit (assetId,user,amount) = match limit(assetId) {
37- case lmt: Int =>
38- let currentEpochStart = ((HEIGHT / timeframe) * timeframe)
39- let currentEpochEnd = ((1 + (HEIGHT / timeframe)) * timeframe)
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]))
43+func validateWithdrawLimit (assetId,user,amount) = {
44+ let m = mainOnly(i)
45+ if ((m == m))
46+ then match limit(assetId) {
47+ case lmt: Int =>
48+ let currentEpochStart = ((HEIGHT / timeframe) * timeframe)
49+ let currentEpochEnd = ((1 + (HEIGHT / timeframe)) * timeframe)
50+ let store = userWithdrawnWithinEpochStore(user, assetId)
51+ let $t015801804 = match getString(store) {
52+ case s: String =>
53+ let data = split(s, "|")
54+ $Tuple2(parseIntValue(data[0]), parseIntValue(data[1]))
55+ case _ =>
56+ $Tuple2(0, 0)
57+ }
58+ let epoch = $t015801804._1
59+ let withdrawn = $t015801804._2
60+ let userWithdrawnWithinCurrentEpoch = if ((epoch == currentEpochStart))
61+ then withdrawn
62+ else 0
63+ if (((userWithdrawnWithinCurrentEpoch + amount) > lmt))
64+ then throw(((((((((((("breaching withdraw limit per " + toString(lmt)) + " ") + assetId) + " over ") + toString(timeframe)) + " blocks. Available: ") + toString((lmt - userWithdrawnWithinCurrentEpoch))) + " current epoch: ") + toString(currentEpochStart)) + "-") + toString(currentEpochEnd)))
65+ else $Tuple2([StringEntry(store, ((toString(currentEpochStart) + "|") + toString((userWithdrawnWithinCurrentEpoch + amount))))], ((lmt - userWithdrawnWithinCurrentEpoch) - amount))
4566 case _ =>
46- $Tuple2(0, 0)
67+ $Tuple2(nil, -1)
4768 }
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))
56- case _ =>
57- $Tuple2(nil, -1)
58-}
69+ else throw("Strict value is not equal to itself.")
70+ }
5971
6072

github/deemru/w8io/3ef1775 
30.29 ms