2021.03.03 02:01 [2485341] smart account 3PJ7RB5CC3Bnn44RNR2hceZ6wKsULnMSxPi > SELF 0.00000000 Waves

{ "type": 13, "id": "3ju4YVc3jH4qVnuoyNcCAENgc4zrVma2kdioQLGN1o28", "fee": 1400000, "feeAssetId": null, "timestamp": 1614725996635, "version": 1, "sender": "3PJ7RB5CC3Bnn44RNR2hceZ6wKsULnMSxPi", "senderPublicKey": "G5ztBKfbizrqVQWMZknsgbG2HS91eJ7QgHh7X3AznjoW", "proofs": [ "28QDCLSsxMh8zxAHti8HUsyeqTqCmxhoPk3yZqaR5V4vZSpiYW2a4nX9GL3Zb5Q2Q8Jp1PZHrynr8WySjCcyQb3U", "2jPVgTYzin3dNN5KBFqvoVGSSX3qk54JnPwRtn4dLTdprKdX3sthuKm51PNbeHDbkjbn5xextE343ZMpRV4vqpYr" ], "script": "base64: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AAABBQAAAAdhc3NldElkBQAAAANuaWwCAAAAASADCQAAAAAAAAIFAAAAB2Fzc2V0SWQBAAAAAAAAAAAAAAAAAAkAA/AAAAACBQAAAAR0aGlzBQAAAAdhc3NldElkAQAAAAh3aXRoZHJhdwAAAAIAAAABaQAAAAdhc3NldElkBAAAAAskdDA1NTUzNTYwNAkBAAAADWdldEF0dGFjaG1lbnQAAAACCAUAAAABaQAAAAhwYXltZW50cwAAAAAAAAAAAAQAAAAGYXNzZXQwCAUAAAALJHQwNTU1MzU2MDQAAAACXzEEAAAAB2Ftb3VudDAIBQAAAAskdDA1NTUzNTYwNAAAAAJfMgQAAAALJHQwNTYwNzU2NTgJAQAAAA1nZXRBdHRhY2htZW50AAAAAggFAAAAAWkAAAAIcGF5bWVudHMAAAAAAAAAAAEEAAAABmFzc2V0MQgFAAAACyR0MDU2MDc1NjU4AAAAAl8xBAAAAAdhbW91bnQxCAUAAAALJHQwNTYwNzU2NTgAAAACXzIEAAAACXRoaXNGdW5kcwkAA/AAAAACBQAAAAR0aGlzBQAAAAdhc3NldElkBAAAAApyYXRzQW1vdW50CQEAAAANZnJhY3Rpb25Sb3VuZAAAAAMJAABkAAAAAgUAAAAHYW1vdW50MAUAAAAHYW1vdW50MQUAAAAJdGhpc0Z1bmRzBQAAAAl1c2R4RnVuZHMEAAAACnVzZHhBbW91bnQJAQAAAA1mcmFjdGlvblJvdW5kAAAAAwUAAAAJdXNkeEZ1bmRzBQAAAApyYXRzQW1vdW50BQAAAAlyYXRzRnVuZHMEAAAAC3VzZXJCYWxhbmNlCQAD8AAAAAIIBQAAAAFpAAAABmNhbGxlcgUAAAAJZmhmc0Fzc2V0BAAAAAhncm9zc0ZlZQkBAAAADWZyYWN0aW9uUm91bmQAAAADBQAAAAp1c2R4QW1vdW50BQAAAAdmZWVQZXJjBQAAAAdwZXJjZW50BAAAAAhkaXNjb3VudAkBAAAADWZyYWN0aW9uUm91bmQAAAADBQAAAAhncm9zc0ZlZQUAAAALdXNlckJhbGFuY2UFAAAACWZoZnNGdW5kcwQAAAAJZmVlQW1vdW50CQEAAAAOdmFsdWVPck1pbmltdW0AAAACCQAAZQAAAAIFAAAACGdyb3NzRmVlBQAAAAhkaXNjb3Vu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aGVyRmVlQXNzZXRJZAkAAAAAAAACCAgFAAAAAW8AAAAJYXNzZXRQYWlyAAAACnByaWNlQXNzZXQFAAAACXJhdHNBc3NldAcHCQEAAAAPY29udGFpbnNFbGVtZW50AAAAAgUAAAAJcG9ydGZvbGlvCAgFAAAAAW8AAAAJYXNzZXRQYWlyAAAAC2Ftb3VudEFzc2V0BwYDAwkAAAAAAAACCAUAAAABbwAAAAlvcmRlclR5cGUFAAAABFNlbGwDCQAAAAAAAAIIBQAAAAFvAAAAEW1hdGNoZXJGZWVBc3NldElkCAgFAAAAAW8AAAAJYXNzZXRQYWlyAAAAC2Ftb3VudEFzc2V0BgMJAQAAAAEhAAAAAQkBAAAACWlzRGVmaW5lZAAAAAEIBQAAAAFvAAAAEW1hdGNoZXJGZWVBc3NldElkCQAAAAAAAAIICAUAAAABbwAAAAlhc3NldFBhaXIAAAALYW1vdW50QXNzZXQFAAAACXJhdHNBc3NldAcHCQEAAAAPY29udGFpbnNFbGVtZW50AAAAAgUAAAAJcG9ydGZvbGlvCAgFAAAAAW8AAAAJYXNzZXRQYWlyAAAACnByaWNlQXNzZXQHBgMDCQEAAAABIQAAAAEJAQAAAAlpc0RlZmluZWQAAAABCAUAAAABbwAAABFtYXRjaGVyRmVlQXNzZXRJZAkBAAAAASEAAAABCQEAAAAPY29udGFpbnNFbGVtZW50AAAAAgkABE4AAAACBQAAAAlwb3J0Zm9saW8FAAAACW91ckFzc2V0cwgIBQAAAAFvAAAACWFzc2V0UGFpcgAAAApwcmljZUFzc2V0BwkBAAAAASEAAAABCQEAAAAPY29udGFpbnNFbGVtZW50AAAAAgkABE4AAAACBQAAAAlwb3J0Zm9saW8FAAAACW91ckFzc2V0cwgIBQAAAAFvAAAACWFzc2V0UGFpcgAAAAthbW91bnRBc3NldAcHAwMJAAABAAAAAgUAAAAHJG1hdGNoMAIAAAAXTWFzc1RyYW5zZmVyVHJhbnNhY3Rpb24GCQAAAQAAAAIFAAAAByRtYXRjaDACAAAAE1RyYW5zZmVyVHJhbnNhY3Rpb24EAAAAAXQFAAAAByRtYXRjaDADAwUAAAAMaXNWYWxpZEFkbWluBQAAABFpc1ZhbGlkR3VhcmFudG9ycwcJAQAAAAEhAAAAAQkBAAAAD2NvbnRhaW5zRWxlbWVudAAAAAIFAAAACXBvcnRmb2xpbwgFAAAAAXQAAAAHYXNzZXRJZAcDAwkAAAEAAAACBQAAAAckbWF0Y2gwAgAAABRTZXRTY3JpcHRUcmFuc2FjdGlvbgYJAAABAAAAAgUAAAAHJG1hdGNoMAIAAAAPRGF0YVRyYW5zYWN0aW9uAwUAAAAMaXNWYWxpZEFkbWluBQAAABFpc1ZhbGlkR3VhcmFudG9ycwcHmOWKGQ==", "chainId": 87, "height": 2485341, "applicationStatus": "succeeded", "spentComplexity": 0 } View: original | compacted Prev: CVWGC6UpxdjKKVfc627hQ3m8rXJT8ghUyuF21ovVHphR Next: DCin2PmKB31c54v5JEnFAm64FY8BPWzEJGfYU6bQmX9 Diff:
OldNewDifferences
11 {-# STDLIB_VERSION 4 #-}
22 {-# SCRIPT_TYPE ACCOUNT #-}
33 {-# CONTENT_TYPE DAPP #-}
4-let ScriptVersion = "1.5.1-beta_20210302"
4+let ScriptVersion = "1.6.0-beta_20210303"
55
66 let percent = 10000
77
6363
6464 let usdxFunds = (assetBalance(frats, usdtAsset) + assetBalance(frats, usdcAsset))
6565
66-func round (xVal) = ((xVal + 1) / 2)
66+func round (xVal) = ((xVal + (if ((0 > xVal))
67+ then 0
68+ else 1)) / 2)
6769
6870
6971 func fractionRound (val,num,den) = round(fraction((2 * val), num, den))
111113
112114
113115 func withdraw (i,assetId) = {
114- let $t055245575 = getAttachment(i.payments, 0)
115- let asset0 = $t055245575._1
116- let amount0 = $t055245575._2
117- let $t055785629 = getAttachment(i.payments, 1)
118- let asset1 = $t055785629._1
119- let amount1 = $t055785629._2
120- let dappBalance = assetBalance(this, assetId)
121- let ratsAmount = fractionRound((amount0 + amount1), dappBalance, usdxFunds)
116+ let $t055535604 = getAttachment(i.payments, 0)
117+ let asset0 = $t055535604._1
118+ let amount0 = $t055535604._2
119+ let $t056075658 = getAttachment(i.payments, 1)
120+ let asset1 = $t056075658._1
121+ let amount1 = $t056075658._2
122+ let thisFunds = assetBalance(this, assetId)
123+ let ratsAmount = fractionRound((amount0 + amount1), thisFunds, usdxFunds)
122124 let usdxAmount = fractionRound(usdxFunds, ratsAmount, ratsFunds)
123125 let userBalance = assetBalance(i.caller, fhfsAsset)
124126 let grossFee = fractionRound(usdxAmount, feePerc, percent)
144146 let decimals = (size(toString(percent)) - 1)
145147 let duration = (lastBlock.timestamp - openTimestamp)
146148 let exponent = fractionRound(decMult, (12 * avgMonth), duration)
147- let $t067787013 = if ((10000 > (usdxFunds / usdMult)))
149+ let $t068037038 = if ((10000 > (usdxFunds / usdMult)))
148150 then $Tuple2(1, "")
149151 else if ((10000000 > (usdxFunds / usdMult)))
150152 then $Tuple2(1000, "K")
151153 else if ((10000000000 > (usdxFunds / usdMult)))
152154 then $Tuple2(1000000, "M")
153155 else $Tuple2(1000000000, "B")
154- let unitMult = $t067787013._1
155- let unitPrefix = $t067787013._2
156+ let unitMult = $t068037038._1
157+ let unitPrefix = $t068037038._2
156158 let balance = fraction(centMult, usdxFunds, usdMult)
157159 let meanPrice = fractionRound(decMult, usdxFunds, ratsFunds)
158160 let annualReturn = (pow(meanPrice, 8, exponent, 8, decimals, HALFUP) - percent)
163165
164166 @Callable(i)
165167 func DepositFunds () = {
166- let $t075347585 = getAttachment(i.payments, 0)
167- let asset0 = $t075347585._1
168- let amount0 = $t075347585._2
169- let $t075887639 = getAttachment(i.payments, 1)
170- let asset1 = $t075887639._1
171- let amount1 = $t075887639._2
172- let usdxAmount = (amount0 + amount1)
173- let ratsAmount = fractionRound(ratsFunds, usdxAmount, usdxFunds)
174- if (if (if ((minAmount > usdxAmount))
168+ let usdtFunds = assetBalance(this, usdtAsset)
169+ let usdcFunds = assetBalance(this, usdcAsset)
170+ let halfRange = valueOrElse(getInteger(this, "halfRange"), 80)
171+ let proportion = if ((usdcFunds > usdtFunds))
172+ then (pow(fractionRound(decMult, (2 * usdtFunds), usdxFunds), 8, 5, 1, 8, HALFUP) - decMult)
173+ else (decMult - pow(fractionRound(decMult, (2 * usdcFunds), usdxFunds), 8, 5, 1, 8, HALFUP))
174+ let correction = (fractionRound(proportion, halfRange, percent) + decMult)
175+ let $t080458096 = getAttachment(i.payments, 0)
176+ let asset0 = $t080458096._1
177+ let amount0 = $t080458096._2
178+ let $t080998150 = getAttachment(i.payments, 1)
179+ let asset1 = $t080998150._1
180+ let amount1 = $t080998150._2
181+ let maxAmount = max([usdxFunds, (1000 * minAmount)])
182+ let usdtAmount = ((if ((asset0 == usdtAsset))
183+ then amount0
184+ else 0) + (if ((asset1 == usdtAsset))
185+ then amount1
186+ else 0))
187+ let usdcAmount = ((if ((asset0 == usdcAsset))
188+ then amount0
189+ else 0) + (if ((asset1 == usdcAsset))
190+ then amount1
191+ else 0))
192+ let ratsAmount = (fractionRound(fractionRound(ratsFunds, usdtAmount, usdxFunds), decMult, correction) + fractionRound(fractionRound(ratsFunds, usdcAmount, usdxFunds), correction, decMult))
193+ if (if (if (if ((minAmount > (amount0 + amount1)))
194+ then true
195+ else ((amount0 + amount1) > maxAmount))
175196 then true
176197 else if ((amount0 > 0))
177198 then !(containsElement(portfolio, asset0))
180201 else if ((amount1 > 0))
181202 then !(containsElement(portfolio, asset1))
182203 else false)
183- then throw(makeString(["DepositFunds () =>", "Please attach Tether (USDT) and/or USD Coin (USDC) assets!", "Min. total:", toDollarString(fraction(centMult, minAmount, usdMult), centMult)], " "))
204+ then throw(makeString(["DepositFunds () =>", "Please attach Tether (USDT) and/or USD Coin (USDC) assets!", "Min. total:", (toDollarString(fraction(centMult, minAmount, usdMult), centMult) + ";"), "Max. total:", toDollarString(fraction(centMult, maxAmount, usdMult), centMult)], " "))
184205 else ([ScriptTransfer(i.caller, ratsAmount, ratsAsset)] ++ adminTimestamp(i.callerPublicKey))
185206 }
186207
Full:
OldNewDifferences
11 {-# STDLIB_VERSION 4 #-}
22 {-# SCRIPT_TYPE ACCOUNT #-}
33 {-# CONTENT_TYPE DAPP #-}
4-let ScriptVersion = "1.5.1-beta_20210302"
4+let ScriptVersion = "1.6.0-beta_20210303"
55
66 let percent = 10000
77
88 let usdMult = 1000000
99
1010 let decMult = 100000000
1111
1212 let centMult = (usdMult / 10000)
1313
1414 let feePerc = ((2 * percent) / 100)
1515
1616 let minAmount = (1 * usdMult)
1717
1818 let avgMonth = ((31556952 / 12) * 1000)
1919
2020 let openTimestamp = (1609573796 * 1000)
2121
2222 let adminPublicKey = base58'JDYJq5RKnSXKLYUQfL89zWPdM3QH5hW8JUTpjnTYV95k'
2323
2424 let robotPublicKey = base58'JDYJq5RKnSXKLYUQfL89zWPdM3QH5hW8JUTpjnTYV95k'
2525
2626 let matcherPublicKey = base58'9cpfKN9suPNvfeUNphzxXMjcnn974eme8ZhWUjaktzU5'
2727
2828 let guarantors = ([valueOrElse(getBinary(this, "guarantor1"), base58''), valueOrElse(getBinary(this, "guarantor2"), base58''), valueOrElse(getBinary(this, "guarantor3"), base58'')] :+ base58'')
2929
3030 let actualSize = value(indexOf(guarantors, base58''))
3131
3232 let minSignatures = ((actualSize / 2) + (actualSize % 2))
3333
3434 let usdtAsset = base58'34N9YcEETLWn93qYQ64EsP1x89tSruJU44RrEMSXXEPJ'
3535
3636 let usdcAsset = base58'6XtHjpXbs9RRJP2Sr9GUyVqzACcby9TkThHXnjVC5CDJ'
3737
3838 let fhfsAsset = base58'4wcCKU3Cu4ABpmfiwzufocvrQQuRX4QMHZ7TjpRwtAmn'
3939
4040 let ratsAsset = base58'Z7817F7hnbWYsVHykjPtn8sUjyuLLf8NPofdveb8CMD'
4141
4242 let xfeeAsset = base58'5EMfVQiB8NF4HuhaXrZzDM637whWuVBsduq59ZaCSNqk'
4343
4444 let portfolio = [usdtAsset, usdcAsset]
4545
4646 let ourAssets = [fhfsAsset, xfeeAsset, ratsAsset]
4747
4848 let admin = Address(base58'3PLRw83NCgHKKFfeJi8XWZ4fypqJJxm2x2x')
4949
5050 let fmain = Address(base58'3PEPsNg7aSWSSgdC6XweyJkvDXmwVoWeNHL')
5151
5252 let fcold = Address(base58'3P8v4dR4UD8nGeLQmorw6BmCo424GvGBXCA')
5353
5454 let frats = Address(base58'3PJ7RB5CC3Bnn44RNR2hceZ6wKsULnMSxPi')
5555
5656 let fhfsTotal = (assetBalance(fmain, fhfsAsset) + assetBalance(fcold, fhfsAsset))
5757
5858 let fhfsFunds = (value(assetInfo(fhfsAsset)).quantity - fhfsTotal)
5959
6060 let ratsTotal = (assetBalance(frats, ratsAsset) + assetBalance(fcold, ratsAsset))
6161
6262 let ratsFunds = (value(assetInfo(ratsAsset)).quantity - ratsTotal)
6363
6464 let usdxFunds = (assetBalance(frats, usdtAsset) + assetBalance(frats, usdcAsset))
6565
66-func round (xVal) = ((xVal + 1) / 2)
66+func round (xVal) = ((xVal + (if ((0 > xVal))
67+ then 0
68+ else 1)) / 2)
6769
6870
6971 func fractionRound (val,num,den) = round(fraction((2 * val), num, den))
7072
7173
7274 func valueOrMinimum (val,minVal) = if ((minVal > val))
7375 then minVal
7476 else val
7577
7678
7779 func toFloatString (val,mult) = toUtf8String(if ((1 > mult))
7880 then throw("Unexpected error: The multiplier must be greater than zero!")
7981 else if ((val == 0))
8082 then base58'q'
8183 else if ((val > 0))
8284 then ((toBytes(toString((val / mult))) + (if ((mult > 1))
8385 then base58'o'
8486 else base58'')) + take(drop(toBytes(toString(((val % mult) + mult))), 1), 8))
8587 else throw("Unexpected error: Negative values are not allowed!"))
8688
8789
8890 func toDollarString (val,mult) = toUtf8String((base58'd' + toBytes(toFloatString(val, mult))))
8991
9092
9193 func adminTimestamp (publicKey) = if ((publicKey != adminPublicKey))
9294 then nil
9395 else [IntegerEntry("timestamp", lastBlock.timestamp)]
9496
9597
9698 func getAttachment (payments,idx) = if ((idx >= size(payments)))
9799 then $Tuple2(base58'', 0)
98100 else $Tuple2(payments[idx].assetId, payments[idx].amount)
99101
100102
101103 func getTransfer (recipient,amount,assetId) = if ((1 > amount))
102104 then nil
103105 else [ScriptTransfer(recipient, amount, assetId)]
104106
105107
106108 func airdropBalance (assetId) = if (containsElement((portfolio ++ ourAssets), assetId))
107109 then throw(makeString(["AirdropWasher () =>", "Please remove the asset ID:", toBase58String(assetId)], " "))
108110 else if ((assetId == base58''))
109111 then 0
110112 else assetBalance(this, assetId)
111113
112114
113115 func withdraw (i,assetId) = {
114- let $t055245575 = getAttachment(i.payments, 0)
115- let asset0 = $t055245575._1
116- let amount0 = $t055245575._2
117- let $t055785629 = getAttachment(i.payments, 1)
118- let asset1 = $t055785629._1
119- let amount1 = $t055785629._2
120- let dappBalance = assetBalance(this, assetId)
121- let ratsAmount = fractionRound((amount0 + amount1), dappBalance, usdxFunds)
116+ let $t055535604 = getAttachment(i.payments, 0)
117+ let asset0 = $t055535604._1
118+ let amount0 = $t055535604._2
119+ let $t056075658 = getAttachment(i.payments, 1)
120+ let asset1 = $t056075658._1
121+ let amount1 = $t056075658._2
122+ let thisFunds = assetBalance(this, assetId)
123+ let ratsAmount = fractionRound((amount0 + amount1), thisFunds, usdxFunds)
122124 let usdxAmount = fractionRound(usdxFunds, ratsAmount, ratsFunds)
123125 let userBalance = assetBalance(i.caller, fhfsAsset)
124126 let grossFee = fractionRound(usdxAmount, feePerc, percent)
125127 let discount = fractionRound(grossFee, userBalance, fhfsFunds)
126128 let feeAmount = valueOrMinimum((grossFee - discount), 0)
127129 let outAmount = valueOrMinimum((usdxAmount - feeAmount), 0)
128130 if (if (if ((1 > ratsAmount))
129131 then true
130132 else if ((amount0 > 0))
131133 then (asset0 != ratsAsset)
132134 else false)
133135 then true
134136 else if ((amount1 > 0))
135137 then (asset1 != ratsAsset)
136138 else false)
137139 then throw(makeString(["WithdrawFunds () =>", "Please attach Ratatouille's Share (RATS) asset!", "Max. amount:", toFloatString(ratsFunds, usdMult), "RATS"], " "))
138140 else [ScriptTransfer(admin, feeAmount, assetId), ScriptTransfer(i.caller, outAmount, assetId)]
139141 }
140142
141143
142144 @Callable(i)
143145 func GetDappInfo () = {
144146 let decimals = (size(toString(percent)) - 1)
145147 let duration = (lastBlock.timestamp - openTimestamp)
146148 let exponent = fractionRound(decMult, (12 * avgMonth), duration)
147- let $t067787013 = if ((10000 > (usdxFunds / usdMult)))
149+ let $t068037038 = if ((10000 > (usdxFunds / usdMult)))
148150 then $Tuple2(1, "")
149151 else if ((10000000 > (usdxFunds / usdMult)))
150152 then $Tuple2(1000, "K")
151153 else if ((10000000000 > (usdxFunds / usdMult)))
152154 then $Tuple2(1000000, "M")
153155 else $Tuple2(1000000000, "B")
154- let unitMult = $t067787013._1
155- let unitPrefix = $t067787013._2
156+ let unitMult = $t068037038._1
157+ let unitPrefix = $t068037038._2
156158 let balance = fraction(centMult, usdxFunds, usdMult)
157159 let meanPrice = fractionRound(decMult, usdxFunds, ratsFunds)
158160 let annualReturn = (pow(meanPrice, 8, exponent, 8, decimals, HALFUP) - percent)
159161 throw(makeString(["GetDappInfo () =>", "balance:", ((toDollarString((balance / unitMult), centMult) + unitPrefix) + ";"), "mean price:", toDollarString(meanPrice, decMult), "/ RATS;", "annual return:", (toFloatString(annualReturn, (percent / 100)) + "%")], " "))
160162 }
161163
162164
163165
164166 @Callable(i)
165167 func DepositFunds () = {
166- let $t075347585 = getAttachment(i.payments, 0)
167- let asset0 = $t075347585._1
168- let amount0 = $t075347585._2
169- let $t075887639 = getAttachment(i.payments, 1)
170- let asset1 = $t075887639._1
171- let amount1 = $t075887639._2
172- let usdxAmount = (amount0 + amount1)
173- let ratsAmount = fractionRound(ratsFunds, usdxAmount, usdxFunds)
174- if (if (if ((minAmount > usdxAmount))
168+ let usdtFunds = assetBalance(this, usdtAsset)
169+ let usdcFunds = assetBalance(this, usdcAsset)
170+ let halfRange = valueOrElse(getInteger(this, "halfRange"), 80)
171+ let proportion = if ((usdcFunds > usdtFunds))
172+ then (pow(fractionRound(decMult, (2 * usdtFunds), usdxFunds), 8, 5, 1, 8, HALFUP) - decMult)
173+ else (decMult - pow(fractionRound(decMult, (2 * usdcFunds), usdxFunds), 8, 5, 1, 8, HALFUP))
174+ let correction = (fractionRound(proportion, halfRange, percent) + decMult)
175+ let $t080458096 = getAttachment(i.payments, 0)
176+ let asset0 = $t080458096._1
177+ let amount0 = $t080458096._2
178+ let $t080998150 = getAttachment(i.payments, 1)
179+ let asset1 = $t080998150._1
180+ let amount1 = $t080998150._2
181+ let maxAmount = max([usdxFunds, (1000 * minAmount)])
182+ let usdtAmount = ((if ((asset0 == usdtAsset))
183+ then amount0
184+ else 0) + (if ((asset1 == usdtAsset))
185+ then amount1
186+ else 0))
187+ let usdcAmount = ((if ((asset0 == usdcAsset))
188+ then amount0
189+ else 0) + (if ((asset1 == usdcAsset))
190+ then amount1
191+ else 0))
192+ let ratsAmount = (fractionRound(fractionRound(ratsFunds, usdtAmount, usdxFunds), decMult, correction) + fractionRound(fractionRound(ratsFunds, usdcAmount, usdxFunds), correction, decMult))
193+ if (if (if (if ((minAmount > (amount0 + amount1)))
194+ then true
195+ else ((amount0 + amount1) > maxAmount))
175196 then true
176197 else if ((amount0 > 0))
177198 then !(containsElement(portfolio, asset0))
178199 else false)
179200 then true
180201 else if ((amount1 > 0))
181202 then !(containsElement(portfolio, asset1))
182203 else false)
183- then throw(makeString(["DepositFunds () =>", "Please attach Tether (USDT) and/or USD Coin (USDC) assets!", "Min. total:", toDollarString(fraction(centMult, minAmount, usdMult), centMult)], " "))
204+ then throw(makeString(["DepositFunds () =>", "Please attach Tether (USDT) and/or USD Coin (USDC) assets!", "Min. total:", (toDollarString(fraction(centMult, minAmount, usdMult), centMult) + ";"), "Max. total:", toDollarString(fraction(centMult, maxAmount, usdMult), centMult)], " "))
184205 else ([ScriptTransfer(i.caller, ratsAmount, ratsAsset)] ++ adminTimestamp(i.callerPublicKey))
185206 }
186207
187208
188209
189210 @Callable(i)
190211 func WithdrawFunds () = ((withdraw(i, usdtAsset) ++ withdraw(i, usdcAsset)) ++ adminTimestamp(i.callerPublicKey))
191212
192213
193214
194215 @Callable(i)
195216 func AirdropWasher (id0,id1,id2,id3,id4,id5,id6,id7,id8,id9) = if ((size(i.payments) > 0))
196217 then throw(makeString(["AirdropWasher (...) =>", "Don't attach payment when calling this function ..."], " "))
197218 else if (if ((i.callerPublicKey != adminPublicKey))
198219 then !(containsElement(guarantors, i.callerPublicKey))
199220 else false)
200221 then throw(makeString(["AirdropWasher (...) =>", "This action can only be performed by an administrator!"], " "))
201222 else ((((((((((getTransfer(admin, airdropBalance(id0), id0) ++ getTransfer(admin, airdropBalance(id1), id1)) ++ getTransfer(admin, airdropBalance(id2), id2)) ++ getTransfer(admin, airdropBalance(id3), id3)) ++ getTransfer(admin, airdropBalance(id4), id4)) ++ getTransfer(admin, airdropBalance(id5), id5)) ++ getTransfer(admin, airdropBalance(id6), id6)) ++ getTransfer(admin, airdropBalance(id7), id7)) ++ getTransfer(admin, airdropBalance(id8), id8)) ++ getTransfer(admin, airdropBalance(id9), id9)) ++ adminTimestamp(i.callerPublicKey))
202223
203224
204225 @Verifier(tx)
205226 func verify () = {
206227 let isValidOwner = sigVerify_32Kb(tx.bodyBytes, tx.proofs[0], tx.senderPublicKey)
207228 let isValidAdmin = if (isValidOwner)
208229 then true
209230 else sigVerify_32Kb(tx.bodyBytes, tx.proofs[0], adminPublicKey)
210231 let isValidRobot = if (isValidOwner)
211232 then true
212233 else sigVerify_32Kb(tx.bodyBytes, tx.proofs[0], robotPublicKey)
213234 let isValidGuarantors = ((((if (sigVerify_32Kb(tx.bodyBytes, tx.proofs[1], guarantors[0]))
214235 then 1
215236 else 0) + (if (sigVerify_32Kb(tx.bodyBytes, tx.proofs[2], guarantors[1]))
216237 then 1
217238 else 0)) + (if (sigVerify_32Kb(tx.bodyBytes, tx.proofs[3], guarantors[2]))
218239 then 1
219240 else 0)) >= minSignatures)
220241 match tx {
221242 case _: LeaseCancelTransaction|LeaseTransaction =>
222243 isValidOwner
223244 case b: BurnTransaction =>
224245 if (if (isValidOwner)
225246 then !(containsElement(portfolio, b.assetId))
226247 else false)
227248 then !(containsElement(ourAssets, b.assetId))
228249 else false
229250 case o: Order =>
230251 if (if (isValidRobot)
231252 then (o.matcherPublicKey == matcherPublicKey)
232253 else false)
233254 then if (if (if (if ((o.orderType == Buy))
234255 then if ((o.matcherFeeAssetId == o.assetPair.priceAsset))
235256 then true
236257 else if (!(isDefined(o.matcherFeeAssetId)))
237258 then (o.assetPair.priceAsset == ratsAsset)
238259 else false
239260 else false)
240261 then containsElement(portfolio, o.assetPair.amountAsset)
241262 else false)
242263 then true
243264 else if (if ((o.orderType == Sell))
244265 then if ((o.matcherFeeAssetId == o.assetPair.amountAsset))
245266 then true
246267 else if (!(isDefined(o.matcherFeeAssetId)))
247268 then (o.assetPair.amountAsset == ratsAsset)
248269 else false
249270 else false)
250271 then containsElement(portfolio, o.assetPair.priceAsset)
251272 else false)
252273 then true
253274 else if (if (!(isDefined(o.matcherFeeAssetId)))
254275 then !(containsElement((portfolio ++ ourAssets), o.assetPair.priceAsset))
255276 else false)
256277 then !(containsElement((portfolio ++ ourAssets), o.assetPair.amountAsset))
257278 else false
258279 else false
259280 case t: MassTransferTransaction|TransferTransaction =>
260281 if (if (isValidAdmin)
261282 then isValidGuarantors
262283 else false)
263284 then !(containsElement(portfolio, t.assetId))
264285 else false
265286 case _: SetScriptTransaction|DataTransaction =>
266287 if (isValidAdmin)
267288 then isValidGuarantors
268289 else false
269290 case _ =>
270291 false
271292 }
272293 }
273294

github/deemru/w8io/786bc32 
84.85 ms