tx · 6Hkb225UMZQsff6CD3qLFZzQGbFFbBwRNwCzciybq34w

3PCs3SYkQwSqXwv5FN42b8DXM6WEA8JNDkx:  -0.01000000 Waves

2022.06.16 10:27 [3164248] smart account 3PCs3SYkQwSqXwv5FN42b8DXM6WEA8JNDkx > SELF 0.00000000 Waves

{ "type": 13, "id": "6Hkb225UMZQsff6CD3qLFZzQGbFFbBwRNwCzciybq34w", "fee": 1000000, "feeAssetId": null, "timestamp": 1655364485578, "version": 2, "chainId": 87, "sender": "3PCs3SYkQwSqXwv5FN42b8DXM6WEA8JNDkx", "senderPublicKey": "4613XFozFm1Nc8jhYYFisKKAzjau7tRhD4TyVKaE6srm", "proofs": [ "33BN2h8cmVLanPyLSALStvv8GSx8FgbfC1Z8oEDnmMCMmXoZgqxoeDxN1y6t3JHv3nEgYkavazCp8BTDYhg6iRxR" ], "script": "base64:AAIFAAAAAAAAAAwIAhIAEgASBAoCCAgAAAALAAAAAAx2aXJlc0FkZHJlc3MJAQAAABFAZXh0ck5hdGl2ZSgxMDYyKQAAAAECAAAAIzNQQVp2OXRnSzFQWDdkS1I3YjRrY2hxNXFkcFVTM0c1c1lUAAAAAA9hc3NldFN0cmluZ1VTRFQCAAAALDM0TjlZY0VFVExXbjkzcVlRNjRFc1AxeDg5dFNydUpVNDRSckVNU1hYRVBKAAAAAAtyZXNlcnZlVVNEVAkBAAAAEUBleHRyTmF0aXZlKDEwNjIpAAAAAQIAAAAjM1BFaUQxekpXVE1aTldTQ3l6aHZCdzlweHhBV2VFd2FnaFIAAAAAD2Fzc2V0U3RyaW5nVVNEQwIAAAAsNlh0SGpwWGJzOVJSSlAyU3I5R1V5VnF6QUNjYnk5VGtUaEhYbmpWQzVDREoAAAAAC3Jlc2VydmVVU0RDCQEAAAARQGV4dHJOYXRpdmUoMTA2MikAAAABAgAAACMzUEdDa3JIQnhGTWk3dHoxeHFueGdCcGVOdm41RTRNNGc4UwAAAAAHbGltaXRlcgkBAAAAEUBleHRyTmF0aXZlKDEwNjIpAAAAAQIAAAAjM1BSQlZxNTJjc1V2VHg3N05Zd0xUVUxydDJlOWpkc0hmUkIBAAAAEWFzVXNlckJhbGFuY2VEYXRhAAAAAQAAAAFhBAAAAAckbWF0Y2gwBQAAAAFhAwkAAAEAAAACBQAAAAckbWF0Y2gwAgAAACIoSW50LCBJbnQsIEludCwgSW50LCBJbnQsIEJvb2xlYW4pBAAAAAFhBQAAAAckbWF0Y2gwBQAAAAFhCQAAAgAAAAECAAAAIndyb25nIHR5cGUsIGV4cGVjdGVkOiBJbnQ1JkJvb2xlYW4BAAAAE2dldERlcG9zaXRlZEJhbGFuY2UAAAABAAAAB3Jlc2VydmUEAAAAD3VzZXJiYWxhbmNlZGF0YQkBAAAAEWFzVXNlckJhbGFuY2VEYXRhAAAAAQkAA/wAAAAEBQAAAAdyZXNlcnZlAgAAAAt1c2VyQmFsYW5jZQkABEwAAAACCQAEJQAAAAEFAAAABHRoaXMFAAAAA25pbAUAAAADbmlsCAUAAAAPdXNlcmJhbGFuY2VkYXRhAAAAAl8yAQAAAA9nZXRUb3RhbERlcG9zaXQAAAABAAAAB3Jlc2VydmUJ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", "height": 3164248, "applicationStatus": "succeeded", "spentComplexity": 0 } View: original | compacted Prev: 9EQG2GBATVW5hNu1FWexsAngR1ciURvXF2xuwKmJQa74 Next: 5f85g5SZbKZPz13N3NTsGYw3bLJWMkrNjsXdg96HaFcU Diff:
OldNewDifferences
11 {-# STDLIB_VERSION 5 #-}
22 {-# SCRIPT_TYPE ACCOUNT #-}
33 {-# CONTENT_TYPE DAPP #-}
4-let main = addressFromStringValue("3PAZv9tgK1PX7dKR7b4kchq5qdpUS3G5sYT")
4+let viresAddress = addressFromStringValue("3PAZv9tgK1PX7dKR7b4kchq5qdpUS3G5sYT")
55
66 let assetStringUSDT = "34N9YcEETLWn93qYQ64EsP1x89tSruJU44RrEMSXXEPJ"
77
1111
1212 let reserveUSDC = addressFromStringValue("3PGCkrHBxFMi7tz1xqnxgBpeNvn5E4M4g8S")
1313
14+let limiter = addressFromStringValue("3PRBVq52csUvTx77NYwLTULrt2e9jdsHfRB")
15+
16+func asUserBalanceData (a) = match a {
17+ case a: (Int, Int, Int, Int, Int, Boolean) =>
18+ a
19+ case _ =>
20+ throw("wrong type, expected: Int5&Boolean")
21+}
22+
23+
24+func getDepositedBalance (reserve) = {
25+ let userbalancedata = asUserBalanceData(invoke(reserve, "userBalance", [toString(this)], nil))
26+ userbalancedata._2
27+ }
28+
29+
30+func getTotalDeposit (reserve) = getIntegerValue(reserve, "totalDeposit")
31+
32+
33+func getWithdrawn (assetString) = {
34+ let currentEpochStart = (height - (height % 1440))
35+ let storeKey = ((toString(this) + "_used_") + assetString)
36+ let storeValue = getString(limiter, storeKey)
37+ let parsedValues = match storeValue {
38+ case s: String =>
39+ let data = split(s, "|")
40+ $Tuple2(parseIntValue(data[0]), parseIntValue(data[1]))
41+ case _ =>
42+ $Tuple2(0, 0)
43+ }
44+ let epoch = parsedValues._1
45+ let withdrawn = parsedValues._2
46+ if ((epoch == currentEpochStart))
47+ then withdrawn
48+ else 0
49+ }
50+
51+
52+func withdraw (assetString,reserve) = {
53+ let assetId = fromBase58String(assetString)
54+ let reserveBalance = assetBalance(reserve, assetId)
55+ if ((0 >= reserveBalance))
56+ then throw("reserve balance too low")
57+ else {
58+ let deposited = getDepositedBalance(reserve)
59+ if ((0 >= deposited))
60+ then throw("nothing to withdraw")
61+ else {
62+ let totalDeposit = getTotalDeposit(reserve)
63+ let factorsBase = 1000000
64+ let util = (factorsBase - fraction(reserveBalance, factorsBase, totalDeposit, DOWN))
65+ let dayLimit = if ((util >= 950000))
66+ then 1000000000
67+ else if ((util >= 900000))
68+ then 10000000000
69+ else if ((util >= 850000))
70+ then 100000000000
71+ else if ((util >= 800000))
72+ then 1000000000000
73+ else -1
74+ if ((dayLimit == -1))
75+ then {
76+ let r = {
77+ let @ = invoke(viresAddress, "withdraw", [assetString, -1], nil)
78+ if ($isInstanceOf(@, "Int"))
79+ then @
80+ else throw("Couldn't cast Any to Int")
81+ }
82+ if ((r == r))
83+ then nil
84+ else throw("Strict value is not equal to itself.")
85+ }
86+ else {
87+ let withdrawn = getWithdrawn(assetString)
88+ let limitRemain = (dayLimit - withdrawn)
89+ if ((0 >= limitRemain))
90+ then throw("withdrawn all limit for the day")
91+ else {
92+ let amount = min([reserveBalance, deposited, limitRemain])
93+ let r = {
94+ let @ = invoke(viresAddress, "withdraw", [assetString, amount], nil)
95+ if ($isInstanceOf(@, "Int"))
96+ then @
97+ else throw("Couldn't cast Any to Int")
98+ }
99+ if ((r == r))
100+ then nil
101+ else throw("Strict value is not equal to itself.")
102+ }
103+ }
104+ }
105+ }
106+ }
107+
108+
14109 @Callable(i)
15-func withdrawUSDC (minAmount,maxAmount) = {
16- let reserveBalance = assetBalance(reserveUSDC, fromBase58String(assetStringUSDC))
17- if ((reserveBalance >= minAmount))
18- then {
19- let withdrawAmount = if ((reserveBalance > maxAmount))
20- then maxAmount
21- else reserveBalance
22- let withdrawnAmount = {
23- let @ = invoke(main, "withdraw", [assetStringUSDC, withdrawAmount], nil)
24- if ($isInstanceOf(@, "Int"))
25- then @
26- else throw("Couldn't cast Any to Int")
27- }
28- if ((withdrawnAmount == withdrawnAmount))
29- then nil
30- else throw("Strict value is not equal to itself.")
31- }
32- else throw("Reserve balance too low")
33- }
110+func withdrawUSDT () = withdraw(assetStringUSDT, reserveUSDT)
34111
35112
36113
37114 @Callable(i)
38-func withdrawUSDT (minAmount,maxAmount) = {
39- let reserveBalance = assetBalance(reserveUSDT, fromBase58String(assetStringUSDT))
40- if ((reserveBalance >= minAmount))
41- then {
42- let withdrawAmount = if ((reserveBalance > maxAmount))
43- then maxAmount
44- else reserveBalance
45- let withdrawnAmount = {
46- let @ = invoke(main, "withdraw", [assetStringUSDT, withdrawAmount], nil)
47- if ($isInstanceOf(@, "Int"))
48- then @
49- else throw("Couldn't cast Any to Int")
50- }
51- if ((withdrawnAmount == withdrawnAmount))
52- then nil
115+func withdrawUSDC () = withdraw(assetStringUSDC, reserveUSDC)
116+
117+
118+
119+@Callable(i)
120+func transferSupply (toAddressString,reserveString) = {
121+ let toAddress = addressFromStringValue(toAddressString)
122+ if ((toAddress == this))
123+ then throw("toAddress == this")
124+ else {
125+ let payment = i.payments[0]
126+ let assetId = value(payment.assetId)
127+ let assetString = toBase58String(assetId)
128+ let amount = payment.amount
129+ let invokeDeposit = invoke(toAddress, "deposit", [reserveString], [payment])
130+ if ((invokeDeposit == invokeDeposit))
131+ then {
132+ let invokeWithdraw = invoke(viresAddress, "withdraw", [assetString, amount], nil)
133+ if ((invokeWithdraw == invokeWithdraw))
134+ then nil
135+ else throw("Strict value is not equal to itself.")
136+ }
53137 else throw("Strict value is not equal to itself.")
54138 }
55- else throw("Reserve balance too low")
56139 }
57140
58141
Full:
OldNewDifferences
11 {-# STDLIB_VERSION 5 #-}
22 {-# SCRIPT_TYPE ACCOUNT #-}
33 {-# CONTENT_TYPE DAPP #-}
4-let main = addressFromStringValue("3PAZv9tgK1PX7dKR7b4kchq5qdpUS3G5sYT")
4+let viresAddress = 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
14+let limiter = addressFromStringValue("3PRBVq52csUvTx77NYwLTULrt2e9jdsHfRB")
15+
16+func asUserBalanceData (a) = match a {
17+ case a: (Int, Int, Int, Int, Int, Boolean) =>
18+ a
19+ case _ =>
20+ throw("wrong type, expected: Int5&Boolean")
21+}
22+
23+
24+func getDepositedBalance (reserve) = {
25+ let userbalancedata = asUserBalanceData(invoke(reserve, "userBalance", [toString(this)], nil))
26+ userbalancedata._2
27+ }
28+
29+
30+func getTotalDeposit (reserve) = getIntegerValue(reserve, "totalDeposit")
31+
32+
33+func getWithdrawn (assetString) = {
34+ let currentEpochStart = (height - (height % 1440))
35+ let storeKey = ((toString(this) + "_used_") + assetString)
36+ let storeValue = getString(limiter, storeKey)
37+ let parsedValues = match storeValue {
38+ case s: String =>
39+ let data = split(s, "|")
40+ $Tuple2(parseIntValue(data[0]), parseIntValue(data[1]))
41+ case _ =>
42+ $Tuple2(0, 0)
43+ }
44+ let epoch = parsedValues._1
45+ let withdrawn = parsedValues._2
46+ if ((epoch == currentEpochStart))
47+ then withdrawn
48+ else 0
49+ }
50+
51+
52+func withdraw (assetString,reserve) = {
53+ let assetId = fromBase58String(assetString)
54+ let reserveBalance = assetBalance(reserve, assetId)
55+ if ((0 >= reserveBalance))
56+ then throw("reserve balance too low")
57+ else {
58+ let deposited = getDepositedBalance(reserve)
59+ if ((0 >= deposited))
60+ then throw("nothing to withdraw")
61+ else {
62+ let totalDeposit = getTotalDeposit(reserve)
63+ let factorsBase = 1000000
64+ let util = (factorsBase - fraction(reserveBalance, factorsBase, totalDeposit, DOWN))
65+ let dayLimit = if ((util >= 950000))
66+ then 1000000000
67+ else if ((util >= 900000))
68+ then 10000000000
69+ else if ((util >= 850000))
70+ then 100000000000
71+ else if ((util >= 800000))
72+ then 1000000000000
73+ else -1
74+ if ((dayLimit == -1))
75+ then {
76+ let r = {
77+ let @ = invoke(viresAddress, "withdraw", [assetString, -1], nil)
78+ if ($isInstanceOf(@, "Int"))
79+ then @
80+ else throw("Couldn't cast Any to Int")
81+ }
82+ if ((r == r))
83+ then nil
84+ else throw("Strict value is not equal to itself.")
85+ }
86+ else {
87+ let withdrawn = getWithdrawn(assetString)
88+ let limitRemain = (dayLimit - withdrawn)
89+ if ((0 >= limitRemain))
90+ then throw("withdrawn all limit for the day")
91+ else {
92+ let amount = min([reserveBalance, deposited, limitRemain])
93+ let r = {
94+ let @ = invoke(viresAddress, "withdraw", [assetString, amount], nil)
95+ if ($isInstanceOf(@, "Int"))
96+ then @
97+ else throw("Couldn't cast Any to Int")
98+ }
99+ if ((r == r))
100+ then nil
101+ else throw("Strict value is not equal to itself.")
102+ }
103+ }
104+ }
105+ }
106+ }
107+
108+
14109 @Callable(i)
15-func withdrawUSDC (minAmount,maxAmount) = {
16- let reserveBalance = assetBalance(reserveUSDC, fromBase58String(assetStringUSDC))
17- if ((reserveBalance >= minAmount))
18- then {
19- let withdrawAmount = if ((reserveBalance > maxAmount))
20- then maxAmount
21- else reserveBalance
22- let withdrawnAmount = {
23- let @ = invoke(main, "withdraw", [assetStringUSDC, withdrawAmount], nil)
24- if ($isInstanceOf(@, "Int"))
25- then @
26- else throw("Couldn't cast Any to Int")
27- }
28- if ((withdrawnAmount == withdrawnAmount))
29- then nil
30- else throw("Strict value is not equal to itself.")
31- }
32- else throw("Reserve balance too low")
33- }
110+func withdrawUSDT () = withdraw(assetStringUSDT, reserveUSDT)
34111
35112
36113
37114 @Callable(i)
38-func withdrawUSDT (minAmount,maxAmount) = {
39- let reserveBalance = assetBalance(reserveUSDT, fromBase58String(assetStringUSDT))
40- if ((reserveBalance >= minAmount))
41- then {
42- let withdrawAmount = if ((reserveBalance > maxAmount))
43- then maxAmount
44- else reserveBalance
45- let withdrawnAmount = {
46- let @ = invoke(main, "withdraw", [assetStringUSDT, withdrawAmount], nil)
47- if ($isInstanceOf(@, "Int"))
48- then @
49- else throw("Couldn't cast Any to Int")
50- }
51- if ((withdrawnAmount == withdrawnAmount))
52- then nil
115+func withdrawUSDC () = withdraw(assetStringUSDC, reserveUSDC)
116+
117+
118+
119+@Callable(i)
120+func transferSupply (toAddressString,reserveString) = {
121+ let toAddress = addressFromStringValue(toAddressString)
122+ if ((toAddress == this))
123+ then throw("toAddress == this")
124+ else {
125+ let payment = i.payments[0]
126+ let assetId = value(payment.assetId)
127+ let assetString = toBase58String(assetId)
128+ let amount = payment.amount
129+ let invokeDeposit = invoke(toAddress, "deposit", [reserveString], [payment])
130+ if ((invokeDeposit == invokeDeposit))
131+ then {
132+ let invokeWithdraw = invoke(viresAddress, "withdraw", [assetString, amount], nil)
133+ if ((invokeWithdraw == invokeWithdraw))
134+ then nil
135+ else throw("Strict value is not equal to itself.")
136+ }
53137 else throw("Strict value is not equal to itself.")
54138 }
55- else throw("Reserve balance too low")
56139 }
57140
58141

github/deemru/w8io/3ef1775 
45.32 ms