2022.05.26 05:12 [3133534] smart account 3PBf9aBs7SEKfp2MCNWmQE912aS4aZubTPY > SELF 0.00000000 Waves

{ "type": 13, "id": "Goh72SNAH9Xx9R3Phie4FtpBA3Rvi25BUWaaPcHW9Nkd", "fee": 1000000, "feeAssetId": null, "timestamp": 1653531203192, "version": 2, "chainId": 87, "sender": "3PBf9aBs7SEKfp2MCNWmQE912aS4aZubTPY", "senderPublicKey": "7HiqfqA3tfzyw9fpq79JariwCLmpp9rCDFuQKrpCS6nC", "proofs": [ "5XALnhDkhL8yHzG1pKB4RLt3h5uNc6e6ZtPvT3ZZ2dRphEyBqGfEPixPvZxa7LTfBJXB9MEJeAxKcWZgeBXdumjm" ], "script": "base64:AAIFAAAAAAAAAAwIAhIDCgEBEgMKAQEAAAAKAAAAAARtYWluCQEAAAARQGV4dHJOYXRpdmUoMTA2MikAAAABAgAAACMzUEFadjl0Z0sxUFg3ZEtSN2I0a2NocTVxZHBVUzNHNXNZVAAAAAAPYXNzZXRTdHJpbmdVU0RUAgAAACwzNE45WWNFRVRMV245M3FZUTY0RXNQMXg4OXRTcnVKVTQ0UnJFTVNYWEVQSgAAAAALcmVzZXJ2ZVVTRFQJAQAAABFAZXh0ck5hdGl2ZSgxMDYyKQAAAAECAAAAIzNQRWlEMXpKV1RNWk5XU0N5emh2Qnc5cHh4QVdlRXdhZ2hSAAAAAA9hc3NldFN0cmluZ1VTREMCAAAALDZYdEhqcFhiczlSUkpQMlNyOUdVeVZxekFDY2J5OVRrVGhIWG5qVkM1Q0RKAAAAAAtyZXNlcnZlVVNEQwkBAAAAEUBleHRyTmF0aXZlKDEwNjIpAAAAAQIAAAAjM1BHQ2tySEJ4Rk1pN3R6MXhxbnhnQnBlTnZuNUU0TTRnOFMAAAAAB2xpbWl0ZXIJAQAAABFAZXh0ck5hdGl2ZSgxMDYyKQAAAAECAAAAIzNQUkJWcTUyY3NVdlR4NzdOWXdMVFVMcnQyZTlqZHNIZlJCAQAAABFhc1VzZXJCYWxhbmNlRGF0YQAAAAEAAAABYQQAAAAHJG1hdGNoMAUAAAABYQMJAAABAAAAAgUAAAAHJG1hdGNoMAIAAAAiKEludCwgSW50LCBJbnQsIEludCwgSW50LCBCb29sZWFuKQQAAAABYQUAAAAHJG1hdGNoMAUAAAABYQkAAAIAAAABAgAAACJ3cm9uZyB0eXBlLCBleHBlY3RlZDogSW50NSZCb29sZWFuAQAAABNnZXREZXBvc2l0ZWRCYWxhbmNlAAAAAQAAAAdyZXNlcnZlBAAAAA91c2VyYmFsYW5jZWRhdGEJAQAAABFhc1VzZXJCYWxhbmNlRGF0YQAAAAEJAAP8AAAABAUAAAAHcmVzZXJ2ZQIAAAALdXNlckJhbGFuY2UJAARMAAAAAgkABCUAAAABBQAAAAR0aGlzBQAAAANuaWwFAAAAA25pbAgFAAAAD3VzZXJiYWxhbmNlZGF0YQAAAAJfMgEAAAAMZ2V0V2l0aGRyYXduAAAAAQAAAAthc3NldFN0cmluZwQAAAARY3Vy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", "height": 3133534, "applicationStatus": "succeeded", "spentComplexity": 0 } View: original | compacted Prev: B39mNcR4GbBD2qzqzfEnv4sdRACNgteoAF6PB5vxWAy Next: BKSsTTr3E5Ci7WobUuRbS8PnuJr9HHC8SH8dr1dzdipU Diff:
OldNewDifferences
4949 func withdraw (assetString,reserve,limit) = {
5050 let assetId = fromBase58String(assetString)
5151 let reserveBalance = assetBalance(reserve, assetId)
52- if ((reserveBalance >= 0))
52+ if ((reserveBalance > 0))
5353 then {
5454 let deposited = getDepositedBalance(reserve)
5555 let withdrawn = getWithdrawn(assetString)
6565 then nil
6666 else throw("Strict value is not equal to itself.")
6767 }
68- else nil
68+ else throw("reserve balance too low")
6969 }
7070
7171
Full:
OldNewDifferences
11 {-# STDLIB_VERSION 5 #-}
22 {-# SCRIPT_TYPE ACCOUNT #-}
33 {-# CONTENT_TYPE DAPP #-}
44 let main = addressFromStringValue("3PAZv9tgK1PX7dKR7b4kchq5qdpUS3G5sYT")
55
66 let assetStringUSDT = "34N9YcEETLWn93qYQ64EsP1x89tSruJU44RrEMSXXEPJ"
77
88 let reserveUSDT = addressFromStringValue("3PEiD1zJWTMZNWSCyzhvBw9pxxAWeEwaghR")
99
1010 let assetStringUSDC = "6XtHjpXbs9RRJP2Sr9GUyVqzACcby9TkThHXnjVC5CDJ"
1111
1212 let reserveUSDC = addressFromStringValue("3PGCkrHBxFMi7tz1xqnxgBpeNvn5E4M4g8S")
1313
1414 let limiter = addressFromStringValue("3PRBVq52csUvTx77NYwLTULrt2e9jdsHfRB")
1515
1616 func asUserBalanceData (a) = match a {
1717 case a: (Int, Int, Int, Int, Int, Boolean) =>
1818 a
1919 case _ =>
2020 throw("wrong type, expected: Int5&Boolean")
2121 }
2222
2323
2424 func getDepositedBalance (reserve) = {
2525 let userbalancedata = asUserBalanceData(invoke(reserve, "userBalance", [toString(this)], nil))
2626 userbalancedata._2
2727 }
2828
2929
3030 func getWithdrawn (assetString) = {
3131 let currentEpochStart = (height - (height % 1440))
3232 let storeKey = ((toString(this) + "_used_") + assetString)
3333 let storeValue = getString(limiter, storeKey)
3434 let parsedValues = match storeValue {
3535 case s: String =>
3636 let data = split(s, "|")
3737 $Tuple2(parseIntValue(data[0]), parseIntValue(data[1]))
3838 case _ =>
3939 $Tuple2(0, 0)
4040 }
4141 let epoch = parsedValues._1
4242 let withdrawn = parsedValues._2
4343 if ((epoch == currentEpochStart))
4444 then withdrawn
4545 else 0
4646 }
4747
4848
4949 func withdraw (assetString,reserve,limit) = {
5050 let assetId = fromBase58String(assetString)
5151 let reserveBalance = assetBalance(reserve, assetId)
52- if ((reserveBalance >= 0))
52+ if ((reserveBalance > 0))
5353 then {
5454 let deposited = getDepositedBalance(reserve)
5555 let withdrawn = getWithdrawn(assetString)
5656 let limitRemain = (limit - withdrawn)
5757 let amount = min([reserveBalance, deposited, limitRemain])
5858 let r = {
5959 let @ = invoke(main, "withdraw", [assetString, amount], nil)
6060 if ($isInstanceOf(@, "Int"))
6161 then @
6262 else throw("Couldn't cast Any to Int")
6363 }
6464 if ((r == r))
6565 then nil
6666 else throw("Strict value is not equal to itself.")
6767 }
68- else nil
68+ else throw("reserve balance too low")
6969 }
7070
7171
7272 @Callable(i)
7373 func withdrawUSDT (limit) = if ((i.caller != this))
7474 then throw("admin")
7575 else withdraw(assetStringUSDT, reserveUSDT, limit)
7676
7777
7878
7979 @Callable(i)
8080 func withdrawUSDC (limit) = if ((i.caller != this))
8181 then throw("admin")
8282 else withdraw(assetStringUSDC, reserveUSDC, limit)
8383
8484

github/deemru/w8io/786bc32 
33.23 ms