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:
Old | New | Differences | |
---|---|---|---|
49 | 49 | func withdraw (assetString,reserve,limit) = { | |
50 | 50 | let assetId = fromBase58String(assetString) | |
51 | 51 | let reserveBalance = assetBalance(reserve, assetId) | |
52 | - | if ((reserveBalance > | |
52 | + | if ((reserveBalance > 0)) | |
53 | 53 | then { | |
54 | 54 | let deposited = getDepositedBalance(reserve) | |
55 | 55 | let withdrawn = getWithdrawn(assetString) | |
65 | 65 | then nil | |
66 | 66 | else throw("Strict value is not equal to itself.") | |
67 | 67 | } | |
68 | - | else | |
68 | + | else throw("reserve balance too low") | |
69 | 69 | } | |
70 | 70 | ||
71 | 71 |
Old | New | Differences | |
---|---|---|---|
1 | 1 | {-# STDLIB_VERSION 5 #-} | |
2 | 2 | {-# SCRIPT_TYPE ACCOUNT #-} | |
3 | 3 | {-# CONTENT_TYPE DAPP #-} | |
4 | 4 | let main = addressFromStringValue("3PAZv9tgK1PX7dKR7b4kchq5qdpUS3G5sYT") | |
5 | 5 | ||
6 | 6 | let assetStringUSDT = "34N9YcEETLWn93qYQ64EsP1x89tSruJU44RrEMSXXEPJ" | |
7 | 7 | ||
8 | 8 | let reserveUSDT = addressFromStringValue("3PEiD1zJWTMZNWSCyzhvBw9pxxAWeEwaghR") | |
9 | 9 | ||
10 | 10 | let assetStringUSDC = "6XtHjpXbs9RRJP2Sr9GUyVqzACcby9TkThHXnjVC5CDJ" | |
11 | 11 | ||
12 | 12 | let reserveUSDC = addressFromStringValue("3PGCkrHBxFMi7tz1xqnxgBpeNvn5E4M4g8S") | |
13 | 13 | ||
14 | 14 | let limiter = addressFromStringValue("3PRBVq52csUvTx77NYwLTULrt2e9jdsHfRB") | |
15 | 15 | ||
16 | 16 | func asUserBalanceData (a) = match a { | |
17 | 17 | case a: (Int, Int, Int, Int, Int, Boolean) => | |
18 | 18 | a | |
19 | 19 | case _ => | |
20 | 20 | throw("wrong type, expected: Int5&Boolean") | |
21 | 21 | } | |
22 | 22 | ||
23 | 23 | ||
24 | 24 | func getDepositedBalance (reserve) = { | |
25 | 25 | let userbalancedata = asUserBalanceData(invoke(reserve, "userBalance", [toString(this)], nil)) | |
26 | 26 | userbalancedata._2 | |
27 | 27 | } | |
28 | 28 | ||
29 | 29 | ||
30 | 30 | func getWithdrawn (assetString) = { | |
31 | 31 | let currentEpochStart = (height - (height % 1440)) | |
32 | 32 | let storeKey = ((toString(this) + "_used_") + assetString) | |
33 | 33 | let storeValue = getString(limiter, storeKey) | |
34 | 34 | let parsedValues = match storeValue { | |
35 | 35 | case s: String => | |
36 | 36 | let data = split(s, "|") | |
37 | 37 | $Tuple2(parseIntValue(data[0]), parseIntValue(data[1])) | |
38 | 38 | case _ => | |
39 | 39 | $Tuple2(0, 0) | |
40 | 40 | } | |
41 | 41 | let epoch = parsedValues._1 | |
42 | 42 | let withdrawn = parsedValues._2 | |
43 | 43 | if ((epoch == currentEpochStart)) | |
44 | 44 | then withdrawn | |
45 | 45 | else 0 | |
46 | 46 | } | |
47 | 47 | ||
48 | 48 | ||
49 | 49 | func withdraw (assetString,reserve,limit) = { | |
50 | 50 | let assetId = fromBase58String(assetString) | |
51 | 51 | let reserveBalance = assetBalance(reserve, assetId) | |
52 | - | if ((reserveBalance > | |
52 | + | if ((reserveBalance > 0)) | |
53 | 53 | then { | |
54 | 54 | let deposited = getDepositedBalance(reserve) | |
55 | 55 | let withdrawn = getWithdrawn(assetString) | |
56 | 56 | let limitRemain = (limit - withdrawn) | |
57 | 57 | let amount = min([reserveBalance, deposited, limitRemain]) | |
58 | 58 | let r = { | |
59 | 59 | let @ = invoke(main, "withdraw", [assetString, amount], nil) | |
60 | 60 | if ($isInstanceOf(@, "Int")) | |
61 | 61 | then @ | |
62 | 62 | else throw("Couldn't cast Any to Int") | |
63 | 63 | } | |
64 | 64 | if ((r == r)) | |
65 | 65 | then nil | |
66 | 66 | else throw("Strict value is not equal to itself.") | |
67 | 67 | } | |
68 | - | else | |
68 | + | else throw("reserve balance too low") | |
69 | 69 | } | |
70 | 70 | ||
71 | 71 | ||
72 | 72 | @Callable(i) | |
73 | 73 | func withdrawUSDT (limit) = if ((i.caller != this)) | |
74 | 74 | then throw("admin") | |
75 | 75 | else withdraw(assetStringUSDT, reserveUSDT, limit) | |
76 | 76 | ||
77 | 77 | ||
78 | 78 | ||
79 | 79 | @Callable(i) | |
80 | 80 | func withdrawUSDC (limit) = if ((i.caller != this)) | |
81 | 81 | then throw("admin") | |
82 | 82 | else withdraw(assetStringUSDC, reserveUSDC, limit) | |
83 | 83 | ||
84 | 84 |
github/deemru/w8io/786bc32 33.23 ms ◑