tx · 4stVYdtkq37uRkLodVogAnqpx9Pa9E3c8hCk8VMuTpTn

3PJ7RB5CC3Bnn44RNR2hceZ6wKsULnMSxPi:  -0.01400000 Waves

2021.03.18 23:04 [2508253] smart account 3PJ7RB5CC3Bnn44RNR2hceZ6wKsULnMSxPi > SELF 0.00000000 Waves

{ "type": 13, "id": "4stVYdtkq37uRkLodVogAnqpx9Pa9E3c8hCk8VMuTpTn", "fee": 1400000, "feeAssetId": null, "timestamp": 1616097856947, "version": 1, "sender": "3PJ7RB5CC3Bnn44RNR2hceZ6wKsULnMSxPi", "senderPublicKey": "G5ztBKfbizrqVQWMZknsgbG2HS91eJ7QgHh7X3AznjoW", "proofs": [ "2cfjjcjk2yZpJvv6kjhWEHWvBk5jyrs39qGotwqmQ1hJeqVhE7qzsNXXm222L7FfjxWcHdM41gqyJLgFX4838eLo", "54tERob6uRmmvzyr7atfX3BTdhnPw3ZuTtMqm4L3UtqhJRR7YjWyHHyeWfTe4viWTiroTrpU4dTma3rzgxBqVBQ3" ], "script": "base64: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c2NyaXB0VHJhbnNmZXIAAAADAAAACXJlY2lwaWVudAAAAAZhbW91bnQAAAAHYXNzZXRJZAMJAABmAAAAAgAAAAAAAAAAAQUAAAAGYW1vdW50BQAAAANuaWwJAARMAAAAAgkBAAAADlNjcmlwdFRyYW5zZmVyAAAAAwUAAAAJcmVjaXBpZW50BQAAAAZhbW91bnQFAAAAB2Fzc2V0SWQFAAAAA25pbAEAAAAPYWlyZHJvcFRyYW5zZmVyAAAAAgAAAAlyZWNpcGllbnQAAAAHYXNzZXRJZAMJAQAAAA9jb250YWluc0VsZW1lbnQAAAACCQAETgAAAAIFAAAACXBvcnRmb2xpbwUAAAAJb3VyQXNzZXRzBQAAAAdhc3NldElkCQAAAgAAAAEJAAS5AAAAAgkABEwAAAACAgAAABNBaXJkcm9wV2FzaGVyICgpID0+CQAETAAAAAICAAAAG1BsZWFzZSByZW1vdmUgdGhlIGFzc2V0IElEOgkABEwAAAACCQACWAAAAAEFAAAAB2Fzc2V0SWQFAAAAA25pbAIAAAABIAMJAAAAAAAAAgUAAAAHYXNzZXRJZAEAAAAABQAAAANuaWwJAQAAAA5zY3JpcHRUcmFuc2ZlcgAAAAMFAAAACXJlY2lwaWVudAkAA/AAAAACBQAAAAR0aGlzBQAAAAdhc3NldElkBQAAAAdhc3NldElkAQAAAAdkZXBvc2l0AAAAAgAAAAFpAAAACnVzZHhBbW91bnQEAAAACXJhdHNQcmljZQkBAAAACnJlY2lwcm9jYWwAAAACBQAAAA91c2R4QWN0dWFsUHJpY2UFAAAAB3Bvd011bHQEAAAADHJhdHNGZWVQcmljZQkAAGsAAAADBQAAAAlyYXRzUHJpY2UFAAAACG1mZWVQZXJjBQAAAAdwZXJjZW50BAAAAA1yYXRzT3V0QW1vdW50CQEAAAAOZnJhY3Rpb25IYWxmVXAAAAADBQAAAAp1c2R4QW1vdW50BQAAAAlyYXRzUHJpY2UFAAAAB3Bvd011bHQEAAAADXJhdHNGZWVBbW91bnQJAQAAAA5mcmFjdGlvbkhhbGZVcAAAAAMFAAAACnVzZHhBbW91bnQFAAAADHJhdHNGZWVQcmljZQUAAAAHcG93TXVsdAQAAAANcGZlZUFkZEFtb3VudAkBAAAADmZyYWN0aW9uSGFsZlVwAAAAAwUAAAAKdXNkeEFtb3VudAUAAAAScGZlZUNvcnJlY3Rpb25SYXRlBQAAAAdwb3dNdWx0CQAETgAAAAIJAAROAAAAAgkBAAAADnNjcmlwdFRyYW5zZmVyAAAAAwgFAAAAAWkAAAAGY2FsbGVyCQAAZQAAAAIFAAAADXJhdHNPdXRBbW91bnQFAAAADXJhdHNGZWVBbW91bnQFAAAACXJhdHNBc3NldAkBAAAADnNjcmlwdFRyYW5zZmVyAAAAAwUAAAAFYWRtaW4FAAAADXJhdHNGZWVBbW91bnQFAAAACXJhdHNBc3NldAkBAAAADnBmZWVGdW5kc0VudHJ5AAAAAQkAAGQAAAACBQAAAAlwZmVlRnVuZHMFAAAADXBmZWVBZGRBbW91bnQBAAAACHdpdGhkcmF3AAAAAgAAAAFpAAAACnJhdHNBbW91bnQEAAAADXVzZHhPdXRBbW91bnQJAQAAAA5mcmFjdGlvbkhhbGZVcAAAAAMFAAAACnJhdHNBbW91bnQFAAAACXVzZHhQcmljZQUAAAAHcG93TXVsdAQAAAANdXNkeEZlZUFtb3VudAkBAAAADmZyYWN0aW9uSGFsZlVwAAAAAwUAAAAKcmF0c0Ftb3VudAUAAAAMdXNkeEZlZVByaWNlBQAAAAdwb3dNdWx0BAAAAAskdDA4MTg0ODI5OQMJAABmAAAAAgUAAAAJdXNkY0Z1bmRzBQAAAAl1c2R0RnVuZHMJAAUUAAAAAgUAAAAJdXNkdEZ1bmRzBQAAAAl1c2R0QXNzZXQJAAUUAAAAAgUAAAAJdXNkY0Z1bmRzBQAAAAl1c2RjQXNzZXQEAAAACXRoaXNGdW5kcwgFAAAACyR0MDgxODQ4Mjk5AAAAAl8xBAAAAAl0aGlzQXNzZXQIBQAAAAskdDA4MTg0ODI5OQAAAAJfMgQAAAALJHQwODMwMjg0MTkDCQAAZgAAAAIFAAAACXVzZGNGdW5kcwUAAAAJdXNkdEZ1bmRzCQAFFAAAAAIFAAAACXVzZGNGdW5kcwUAAAAJdXNkY0Fzc2V0CQAFFAAAAAIFAAAACXVzZHRGdW5kcwUAAAAJdXNkdEFzc2V0BAAAAApvdGhlckZ1bmRzCAUAAAALJHQwODMwMjg0MTkAAAACXzEEAAAACm90aGVyQXNzZXQIBQAAAAskdDA4MzAyODQxOQAAAAJfMgQAAAAJdGhpc1ByaWNlCQAAawAAAAMFAAAACXVzZHhQcmljZQUAAAAJdGhpc0Z1bmRzBQAAAAl1c2R4RnVuZHMEAAAADHRoaXNGZWVQcmljZQkAAGsAAAADBQAAAAx1c2R4RmVlUHJpY2UFAAAACXRoaXNGdW5kcwUAAAAJdXNkeEZ1bmRzBAAAAA10aGlzT3V0QW1vdW50CQEAAAAOZnJhY3Rpb25IYWxmVXAAAAADBQAAAApyYXRzQW1vdW50BQAAAAl0aGlzUHJpY2UFAAAAB3Bvd011bHQEAAAADXRoaXNGZWVBbW91bnQJAQAAAA5mcmFjdGlvbkhhbGZVcAAAAAMFAAAACnJhdHNBbW91bnQFAAAADHRoaXNGZWVQcmljZQUAAAAHcG93TXVsdAQAAAANdGhpc1N1YkFtb3VudAkBAAAADmZyYWN0aW9uSGFsZlVwAAAAAwUAAAAJcGZlZUZ1bmRzBQAAAAl0aGlzRnVuZHMFAAAACXVzZHhGdW5kcwQAAAAOb3RoZXJPdXRBbW91bnQJAABlAAAAAgUAAAANdXNkeE91dEFtb3VudAUAAAANdGhpc091dEFtb3VudAQAAAAOb3RoZXJGZWVBbW91bnQJAABlAAAAAgUAAAANdXNkeEZlZUFtb3VudAUAAAANdGhpc0ZlZUFtb3VudAQAAAAOb3RoZXJTdWJBbW91bnQJAABlAAAAAgUAAAAJcGZlZUZ1bmRzBQAAAA10aGlzU3ViQW1vdW50AwkAAAAAAAACBQAAAApyYXRzQW1vdW50BQAAAAlyYXRzRnVuZHMJAAROAAAAAgkABE4AAAACCQEAAAAOc2NyaXB0VHJhbnNmZXIAAAADBQAAAAVhZG1pbgkAAGUAAAACBQAAAA10aGlzRmVlQW1vdW50BQAAAA10aGlzU3ViQW1vdW50BQAAAAl0aGlzQXNzZXQJAQAAAA5zY3JpcHRUcmFuc2ZlcgAAAAMFAAAABWFkbWluCQAAZQAAAAIFAAAADm90aGVyRmVlQW1vdW50BQAAAA5vdGhlclN1YkFtb3VudAUAAAAKb3RoZXJBc3NldAkBAAAADnBmZWVGdW5kc0VudHJ5AAAAAQUAAAANdXNkeEZlZUFtb3VudAkABE4AAAACCQAETgAAAAIJAAROAAAAAgkABE4AAAACCQEAAAAO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AAAJcG9ydGZvbGlvBQAAAAlvdXJBc3NldHMICAUAAAABbwAAAAlhc3NldFBhaXIAAAALYW1vdW50QXNzZXQHBwMJAAABAAAAAgUAAAAHJG1hdGNoMAIAAAAPQnVyblRyYW5zYWN0aW9uBAAAAAFiBQAAAAckbWF0Y2gwAwUAAAAMaXNWYWxpZE93bmVyCQEAAAABIQAAAAEJAQAAAA9jb250YWluc0VsZW1lbnQAAAACCQAETgAAAAIFAAAACXBvcnRmb2xpbwUAAAAJb3VyQXNzZXRzCAUAAAABYgAAAAdhc3NldElkBwMDCQAAAQAAAAIFAAAAByRtYXRjaDACAAAAFkxlYXNlQ2FuY2VsVHJhbnNhY3Rpb24GCQAAAQAAAAIFAAAAByRtYXRjaDACAAAAEExlYXNlVHJhbnNhY3Rpb24FAAAADGlzVmFsaWRPd25lcgMJAAABAAAAAgUAAAAHJG1hdGNoMAIAAAATVHJhbnNmZXJUcmFuc2FjdGlvbgQAAAABdAUAAAAHJG1hdGNoMAMDBQAAAAxpc1ZhbGlkT3duZXIJAQAAAAEhAAAAAQkBAAAAD2NvbnRhaW5zRWxlbWVudAAAAAIJAAROAAAAAgUAAAAJcG9ydGZvbGlvBQAAAAlvdXJBc3NldHMIBQAAAAF0AAAAB2Fzc2V0SWQHCQEAAAABIQAAAAEJAQAAAA9jb250YWluc0VsZW1lbnQAAAACCQAETgAAAAIFAAAACXBvcnRmb2xpbwUAAAAJb3VyQXNzZXRzCAUAAAABdAAAAApmZWVBc3NldElkBwMJAAABAAAAAgUAAAAHJG1hdGNoMAIAAAAXTWFzc1RyYW5zZmVyVHJhbnNhY3Rpb24EAAAAAW0FAAAAByRtYXRjaDADAwUAAAAMaXNWYWxpZEFkbWluBQAAABFpc1ZhbGlkR3VhcmFudG9ycwcJAQAAAAEhAAAAAQkBAAAAD2NvbnRhaW5zRWxlbWVudAAAAAIFAAAACXBvcnRmb2xpbwgFAAAAAW0AAAAHYXNzZXRJZAcDAwkAAAEAAAACBQAAAAckbWF0Y2gwAgAAABRTZXRTY3JpcHRUcmFuc2FjdGlvbgYJAAABAAAAAgUAAAAHJG1hdGNoMAIAAAAPRGF0YVRyYW5zYWN0aW9uAwUAAAAMaXNWYWxpZEFkbWluBQAAABFpc1ZhbGlkR3VhcmFudG9ycwcHkXtPsQ==", "chainId": 87, "height": 2508253, "applicationStatus": "succeeded", "spentComplexity": 0 } View: original | compacted Prev: AKRYsPk8Zk3Kh2X5CTCxjhHT26XPFeehAyok8UFsdm7T Next: CQpdh5XZxDXRqKYUV6nvnyafccuVJVCitFL3tBAQ8ZmE Diff:
OldNewDifferences
11 {-# STDLIB_VERSION 4 #-}
22 {-# SCRIPT_TYPE ACCOUNT #-}
33 {-# CONTENT_TYPE DAPP #-}
4-let version = "1.9.1-prefinal_20210318"
4+let version = "1.9.2-prefinal_20210318"
55
66 let cent = 100
77
364364 else false)
365365 then if (if (!(isValidOwner))
366366 then true
367- else if (if (((o.expiration - o.timestamp) != (86400 * msec)))
367+ else if (if (((o.expiration - o.timestamp) >= (86400 * msec)))
368368 then (o.matcherFeeAssetId == o.assetPair.priceAsset)
369369 else false)
370370 then containsElement(portfolio, o.assetPair.priceAsset)
371371 else false)
372372 then true
373- else if (if (((o.expiration - o.timestamp) == (86400 * msec)))
373+ else if (if (((86400 * msec) >= (o.expiration - o.timestamp)))
374374 then !(containsElement(portfolio, o.matcherFeeAssetId))
375375 else false)
376376 then !(containsElement(portfolio, o.assetPair.priceAsset))
382382 else false)
383383 then if (if (!(isValidOwner))
384384 then true
385- else if (if (((o.expiration - o.timestamp) != (86400 * msec)))
385+ else if (if (((o.expiration - o.timestamp) >= (86400 * msec)))
386386 then (o.matcherFeeAssetId == o.assetPair.amountAsset)
387387 else false)
388388 then containsElement(portfolio, o.assetPair.amountAsset)
389389 else false)
390390 then true
391- else if (if (((o.expiration - o.timestamp) == (86400 * msec)))
391+ else if (if (((86400 * msec) >= (o.expiration - o.timestamp)))
392392 then !(containsElement(portfolio, o.matcherFeeAssetId))
393393 else false)
394394 then !(containsElement(portfolio, o.assetPair.amountAsset))
Full:
OldNewDifferences
11 {-# STDLIB_VERSION 4 #-}
22 {-# SCRIPT_TYPE ACCOUNT #-}
33 {-# CONTENT_TYPE DAPP #-}
4-let version = "1.9.1-prefinal_20210318"
4+let version = "1.9.2-prefinal_20210318"
55
66 let cent = 100
77
88 let msec = 1000
99
1010 let percent = (100 * 10000)
1111
1212 let usdMult = 1000000
1313
1414 let decMult = 100000000
1515
1616 let powMult = (decMult * decMult)
1717
1818 let mfeePerc = ((2 * percent) / 100)
1919
2020 let pfeePerc = ((0 * percent) / 100)
2121
2222 let maxFunds = max([0, valueOrElse(getInteger(this, "maxfunds"), (1000 * usdMult))])
2323
2424 let minAmount = max([usdMult, valueOrElse(getInteger(this, "minamount"), (1 * usdMult))])
2525
2626 let timeframe = (31556952 * msec)
2727
2828 let openstamp = (1609573796 * msec)
2929
3030 let timeout = max([0, valueOrElse(getInteger(this, "timeout"), (60 * msec))])
3131
3232 let timestamp = valueOrElse(getInteger(this, "timestamp"), openstamp)
3333
3434 let invokeTimer = (lastBlock.timestamp - timestamp)
3535
3636 let adminPublicKey = base58'JDYJq5RKnSXKLYUQfL89zWPdM3QH5hW8JUTpjnTYV95k'
3737
3838 let traderPublicKey = base58'G5ztBKfbizrqVQWMZknsgbG2HS91eJ7QgHh7X3AznjoW'
3939
4040 let matcherPublicKey = base58'9cpfKN9suPNvfeUNphzxXMjcnn974eme8ZhWUjaktzU5'
4141
4242 let guarantors = ([valueOrElse(getBinary(this, "guarantor1"), base58''), valueOrElse(getBinary(this, "guarantor2"), base58''), valueOrElse(getBinary(this, "guarantor3"), base58'')] :+ base58'')
4343
4444 let actualSize = value(indexOf(guarantors, base58''))
4545
4646 let minSignatures = ((actualSize / 2) + (actualSize % 2))
4747
4848 let usdtAsset = base58'34N9YcEETLWn93qYQ64EsP1x89tSruJU44RrEMSXXEPJ'
4949
5050 let usdcAsset = base58'6XtHjpXbs9RRJP2Sr9GUyVqzACcby9TkThHXnjVC5CDJ'
5151
5252 let ratsAsset = base58'Z7817F7hnbWYsVHykjPtn8sUjyuLLf8NPofdveb8CMD'
5353
5454 let portfolio = [usdtAsset, usdcAsset]
5555
5656 let ourAssets = [ratsAsset]
5757
5858 let admin = Address(base58'3PLRw83NCgHKKFfeJi8XWZ4fypqJJxm2x2x')
5959
6060 let fcold = Address(base58'3P8v4dR4UD8nGeLQmorw6BmCo424GvGBXCA')
6161
6262 let usdtFunds = assetBalance(this, usdtAsset)
6363
6464 let usdcFunds = assetBalance(this, usdcAsset)
6565
6666 let ratsFunds = (value(assetInfo(ratsAsset)).quantity - (assetBalance(this, ratsAsset) + assetBalance(fcold, ratsAsset)))
6767
6868 let usdxFunds = (usdtFunds + usdcFunds)
6969
7070 let pfeeFunds = valueOrElse(getInteger(this, "pfeefunds"), (0 * usdMult))
7171
7272 let usdxPrice = fraction(powMult, (usdxFunds + pfeeFunds), ratsFunds)
7373
7474 let usdxFeePrice = fraction((usdxPrice - powMult), pfeePerc, percent)
7575
7676 let usdxActualPrice = (usdxPrice - usdxFeePrice)
7777
7878 let pfeeCorrectionRate = (fraction(powMult, usdxPrice, usdxActualPrice) - powMult)
7979
8080 func decimals (mult) = (size(toString(mult)) - 1)
8181
8282
8383 func reciprocal (val,mult) = fraction(mult, mult, val)
8484
8585
8686 func valueOrMinimum (val,minVal) = if ((minVal > val))
8787 then minVal
8888 else val
8989
9090
9191 func valueOrMaximum (val,maxVal) = if ((val > maxVal))
9292 then maxVal
9393 else val
9494
9595
9696 func fractionHalfUp (val,num,den) = {
9797 func round (xVal) = (xVal + (if ((xVal > 0))
9898 then 1
9999 else 0))
100100
101101 (round(fraction((2 * val), num, den)) / 2)
102102 }
103103
104104
105105 func fractionCeiling (val,num,den) = {
106106 func round (xVal) = (xVal + (if (((xVal % 10) == 0))
107107 then 0
108108 else 10))
109109
110110 (round(fraction((10 * val), num, den)) / 10)
111111 }
112112
113113
114114 func getAttachment (payments,idx) = if ((idx >= size(payments)))
115115 then $Tuple2(base58'', 0)
116116 else $Tuple2(payments[idx].assetId, payments[idx].amount)
117117
118118
119119 func toMinuteString (val) = if (((60 * msec) >= val))
120120 then "a"
121121 else toString((((val - 1) / (60 * msec)) + 1))
122122
123123
124124 func toFloatBytes (val,sep,dec) = {
125125 func separate (b0) = {
126126 let b1 = dropRightBytes(b0, 3)
127127 let b2 = dropRightBytes(b1, 3)
128128 let b3 = dropRightBytes(b2, 3)
129129 let b4 = dropRightBytes(b3, 3)
130130 ((((((((takeRightBytes(b4, 3) + (if ((b4 != base58''))
131131 then sep
132132 else base58'')) + takeRightBytes(b3, 3)) + (if ((b3 != base58''))
133133 then sep
134134 else base58'')) + takeRightBytes(b2, 3)) + (if ((b2 != base58''))
135135 then sep
136136 else base58'')) + takeRightBytes(b1, 3)) + (if ((b1 != base58''))
137137 then sep
138138 else base58'')) + takeRightBytes(b0, 3))
139139 }
140140
141141 let bVal = toBytes(toString(val))
142142 ((separate(dropRightBytes(bVal, dec)) + base58'o') + takeRightBytes(bVal, dec))
143143 }
144144
145145
146146 func toPriceString (val,mult) = toUtf8String(if ((0 > val))
147147 then throw("Unexpected error: Negative values are not allowed!")
148148 else toFloatBytes(fractionCeiling(val, usdMult, mult), base58'm', 6))
149149
150150
151151 func toAmountString (val,mult,isDollar) = toUtf8String(if ((0 > val))
152152 then throw("Unexpected error: Negative values are not allowed!")
153153 else ((if (isDollar)
154154 then base58'd'
155155 else base58'') + toFloatBytes(fraction(val, cent, mult), base58'm', 2)))
156156
157157
158158 func toPercentString (val,mult) = toUtf8String(if ((0 > val))
159159 then throw("Unexpected error: Negative values are not allowed!")
160160 else (toFloatBytes(fraction(val, (100 * cent), mult), base58'', 2) + base58'e'))
161161
162162
163163 func pfeeFundsEntry (amount) = if ((amount == pfeeFunds))
164164 then nil
165165 else [IntegerEntry("pfeefunds", amount)]
166166
167167
168168 func scriptTransfer (recipient,amount,assetId) = if ((1 > amount))
169169 then nil
170170 else [ScriptTransfer(recipient, amount, assetId)]
171171
172172
173173 func airdropTransfer (recipient,assetId) = if (containsElement((portfolio ++ ourAssets), assetId))
174174 then throw(makeString(["AirdropWasher () =>", "Please remove the asset ID:", toBase58String(assetId)], " "))
175175 else if ((assetId == base58''))
176176 then nil
177177 else scriptTransfer(recipient, assetBalance(this, assetId), assetId)
178178
179179
180180 func deposit (i,usdxAmount) = {
181181 let ratsPrice = reciprocal(usdxActualPrice, powMult)
182182 let ratsFeePrice = fraction(ratsPrice, mfeePerc, percent)
183183 let ratsOutAmount = fractionHalfUp(usdxAmount, ratsPrice, powMult)
184184 let ratsFeeAmount = fractionHalfUp(usdxAmount, ratsFeePrice, powMult)
185185 let pfeeAddAmount = fractionHalfUp(usdxAmount, pfeeCorrectionRate, powMult)
186186 ((scriptTransfer(i.caller, (ratsOutAmount - ratsFeeAmount), ratsAsset) ++ scriptTransfer(admin, ratsFeeAmount, ratsAsset)) ++ pfeeFundsEntry((pfeeFunds + pfeeAddAmount)))
187187 }
188188
189189
190190 func withdraw (i,ratsAmount) = {
191191 let usdxOutAmount = fractionHalfUp(ratsAmount, usdxPrice, powMult)
192192 let usdxFeeAmount = fractionHalfUp(ratsAmount, usdxFeePrice, powMult)
193193 let $t081848299 = if ((usdcFunds > usdtFunds))
194194 then $Tuple2(usdtFunds, usdtAsset)
195195 else $Tuple2(usdcFunds, usdcAsset)
196196 let thisFunds = $t081848299._1
197197 let thisAsset = $t081848299._2
198198 let $t083028419 = if ((usdcFunds > usdtFunds))
199199 then $Tuple2(usdcFunds, usdcAsset)
200200 else $Tuple2(usdtFunds, usdtAsset)
201201 let otherFunds = $t083028419._1
202202 let otherAsset = $t083028419._2
203203 let thisPrice = fraction(usdxPrice, thisFunds, usdxFunds)
204204 let thisFeePrice = fraction(usdxFeePrice, thisFunds, usdxFunds)
205205 let thisOutAmount = fractionHalfUp(ratsAmount, thisPrice, powMult)
206206 let thisFeeAmount = fractionHalfUp(ratsAmount, thisFeePrice, powMult)
207207 let thisSubAmount = fractionHalfUp(pfeeFunds, thisFunds, usdxFunds)
208208 let otherOutAmount = (usdxOutAmount - thisOutAmount)
209209 let otherFeeAmount = (usdxFeeAmount - thisFeeAmount)
210210 let otherSubAmount = (pfeeFunds - thisSubAmount)
211211 if ((ratsAmount == ratsFunds))
212212 then ((scriptTransfer(admin, (thisFeeAmount - thisSubAmount), thisAsset) ++ scriptTransfer(admin, (otherFeeAmount - otherSubAmount), otherAsset)) ++ pfeeFundsEntry(usdxFeeAmount))
213213 else ((((scriptTransfer(i.caller, (thisOutAmount - thisFeeAmount), thisAsset) ++ scriptTransfer(admin, (thisFeeAmount - thisSubAmount), thisAsset)) ++ scriptTransfer(i.caller, (otherOutAmount - otherFeeAmount), otherAsset)) ++ scriptTransfer(admin, (otherFeeAmount - otherSubAmount), otherAsset)) ++ pfeeFundsEntry(valueOrMinimum((pfeeFunds - usdxFeeAmount), 0)))
214214 }
215215
216216
217217 @Callable(i)
218218 func GetDappInfo () = {
219219 let duration = (lastBlock.timestamp - openstamp)
220220 let exponent = fraction(decMult, timeframe, duration)
221221 let annualYield = (pow(fraction(usdxPrice, decMult, powMult), 8, exponent, 8, decimals(percent), DOWN) - percent)
222222 if ((size(i.payments) > 0))
223223 then throw(makeString(["GetDappInfo () =>", "Don't attach payment when calling this function ..."], " "))
224224 else throw(makeString(["GetDappInfo () =>", "Gross APY:", (toPercentString(annualYield, percent) + ";"), "Total amount:", toAmountString(usdxFunds, usdMult, true), "(USDT & USDC);", "Actual price / 1 RATS:", toPriceString(usdxActualPrice, powMult), "USDT (or USDC)"], " "))
225225 }
226226
227227
228228
229229 @Callable(i)
230230 func DepositFunds () = {
231231 let isDappFrozen = if (valueOrElse(getBoolean(this, "emergency"), false))
232232 then true
233233 else !(valueOrElse(getBoolean(admin, toBase58String(this.bytes)), false))
234234 let $t01059110642 = getAttachment(i.payments, 0)
235235 let asset0 = $t01059110642._1
236236 let amount0 = $t01059110642._2
237237 let $t01064510696 = getAttachment(i.payments, 1)
238238 let asset1 = $t01064510696._1
239239 let amount1 = $t01064510696._2
240240 let maxAmount = valueOrMinimum(valueOrMaximum(usdxFunds, (maxFunds - usdxFunds)), (100 * usdMult))
241241 let usdxAmount = ((if (containsElement(portfolio, asset0))
242242 then amount0
243243 else 0) + (if (containsElement(portfolio, asset1))
244244 then amount1
245245 else 0))
246246 if (if (if (if ((minAmount > usdxAmount))
247247 then true
248248 else (usdxAmount > maxAmount))
249249 then true
250250 else if ((amount0 > 0))
251251 then !(containsElement(portfolio, asset0))
252252 else false)
253253 then true
254254 else if ((amount1 > 0))
255255 then !(containsElement(portfolio, asset1))
256256 else false)
257257 then throw(makeString(["DepositFunds () =>", "Please attach Tether (USDT) and/or USD Coin (USDC) assets.", "Total amount:", "from", toAmountString(minAmount, usdMult, true), "to", toAmountString(maxAmount, usdMult, true), "(USDT + USDC)"], " "))
258258 else if (if (isDappFrozen)
259259 then (i.callerPublicKey != adminPublicKey)
260260 else false)
261261 then throw(makeString(["DepositFunds () =>", "All transactions are temporarily suspended by the administrator ..."], " "))
262262 else if (if (if ((usdxFunds > maxFunds))
263263 then (i.callerPublicKey != adminPublicKey)
264264 else false)
265265 then !(containsElement(guarantors, i.callerPublicKey))
266266 else false)
267267 then throw(makeString(["DepositFunds () =>", "The maximum limit has been reached ... Funding has been deactivated!"], " "))
268268 else if ((timeout > invokeTimer))
269269 then throw(makeString(["DepositFunds () =>", "The balancing of dollar funds is going on ...", "Please wait less than", toMinuteString((timeout - invokeTimer)), "minute(s)."], " "))
270270 else (deposit(i, usdxAmount) :+ IntegerEntry("timestamp", lastBlock.timestamp))
271271 }
272272
273273
274274
275275 @Callable(i)
276276 func WithdrawFunds () = {
277277 let isDappFrozen = if (valueOrElse(getBoolean(this, "emergency"), false))
278278 then true
279279 else !(valueOrElse(getBoolean(admin, toBase58String(this.bytes)), false))
280280 let $t01245112502 = getAttachment(i.payments, 0)
281281 let asset0 = $t01245112502._1
282282 let amount0 = $t01245112502._2
283283 let $t01250512556 = getAttachment(i.payments, 1)
284284 let asset1 = $t01250512556._1
285285 let amount1 = $t01250512556._2
286286 let maxAmount = valueOrMinimum((ratsFunds - minAmount), 0)
287287 let ratsAmount = ((if ((asset0 == ratsAsset))
288288 then amount0
289289 else 0) + (if ((asset1 == ratsAsset))
290290 then amount1
291291 else 0))
292292 if (if (if (if ((1 > ratsAmount))
293293 then true
294294 else (ratsAmount > maxAmount))
295295 then true
296296 else if ((amount0 > 0))
297297 then (asset0 != ratsAsset)
298298 else false)
299299 then true
300300 else if ((amount1 > 0))
301301 then (asset1 != ratsAsset)
302302 else false)
303303 then throw(makeString(["WithdrawFunds () =>", "Please attach Ratatouille (RATS) asset.", "Max. amount:", toAmountString(maxAmount, usdMult, false), "RATS"], " "))
304304 else if (if (isDappFrozen)
305305 then (i.callerPublicKey != adminPublicKey)
306306 else false)
307307 then throw(makeString(["WithdrawFunds () =>", "All transactions are temporarily suspended by the administrator ..."], " "))
308308 else if ((timeout > invokeTimer))
309309 then throw(makeString(["DepositFunds () =>", "The balancing of dollar funds is going on ...", "Please wait less than", toMinuteString((timeout - invokeTimer)), "minute(s)."], " "))
310310 else (withdraw(i, ratsAmount) :+ IntegerEntry("timestamp", lastBlock.timestamp))
311311 }
312312
313313
314314
315315 @Callable(i)
316316 func TakeCommission () = if ((size(i.payments) > 0))
317317 then throw(makeString(["TakeCommission () =>", "Don't attach payment when calling this function ..."], " "))
318318 else if ((i.callerPublicKey != adminPublicKey))
319319 then throw(makeString(["TakeCommission () =>", "This action can only be performed by an administrator!"], " "))
320320 else if ((timeout > invokeTimer))
321321 then throw(makeString(["TakeCommission () =>", "The balancing of dollar funds is going on ...", "Please wait less than", toMinuteString((timeout - invokeTimer)), "minute(s)."], " "))
322322 else (withdraw(i, ratsFunds) :+ IntegerEntry("timestamp", lastBlock.timestamp))
323323
324324
325325
326326 @Callable(i)
327327 func AirdropWasher (id0,id1,id2,id3,id4,id5,id6,id7,id8,id9) = {
328328 let bulkBytes = (((((((((id0 + id1) + id2) + id3) + id4) + id5) + id6) + id7) + id8) + id9)
329329 if ((bulkBytes == base58''))
330330 then throw(makeString(["AirdropWasher () =>", "Please enter asset IDs in the fields below ..."], " "))
331331 else if ((size(i.payments) > 0))
332332 then throw(makeString(["AirdropWasher () =>", "Don't attach payment when calling this function ..."], " "))
333333 else if (if ((i.caller != this))
334334 then (i.callerPublicKey != adminPublicKey)
335335 else false)
336336 then throw(makeString(["AirdropWasher () =>", "This action can only be performed by an administrator!"], " "))
337337 else (((((((((airdropTransfer(admin, id0) ++ airdropTransfer(admin, id1)) ++ airdropTransfer(admin, id2)) ++ airdropTransfer(admin, id3)) ++ airdropTransfer(admin, id4)) ++ airdropTransfer(admin, id5)) ++ airdropTransfer(admin, id6)) ++ airdropTransfer(admin, id7)) ++ airdropTransfer(admin, id8)) ++ airdropTransfer(admin, id9))
338338 }
339339
340340
341341 @Verifier(tx)
342342 func verify () = {
343343 let isValidOwner = sigVerify_32Kb(tx.bodyBytes, tx.proofs[0], tx.senderPublicKey)
344344 let isValidAdmin = if (isValidOwner)
345345 then true
346346 else sigVerify_32Kb(tx.bodyBytes, tx.proofs[0], adminPublicKey)
347347 let isTradingBot = if (isValidOwner)
348348 then true
349349 else sigVerify_32Kb(tx.bodyBytes, tx.proofs[0], traderPublicKey)
350350 let isValidGuarantors = ((((if (sigVerify_32Kb(tx.bodyBytes, tx.proofs[1], guarantors[0]))
351351 then 1
352352 else 0) + (if (sigVerify_32Kb(tx.bodyBytes, tx.proofs[2], guarantors[1]))
353353 then 1
354354 else 0)) + (if (sigVerify_32Kb(tx.bodyBytes, tx.proofs[3], guarantors[2]))
355355 then 1
356356 else 0)) >= minSignatures)
357357 match tx {
358358 case o: Order =>
359359 if (if (isTradingBot)
360360 then (o.matcherPublicKey == matcherPublicKey)
361361 else false)
362362 then if (if (if (if ((o.orderType == Buy))
363363 then containsElement(portfolio, o.assetPair.amountAsset)
364364 else false)
365365 then if (if (!(isValidOwner))
366366 then true
367- else if (if (((o.expiration - o.timestamp) != (86400 * msec)))
367+ else if (if (((o.expiration - o.timestamp) >= (86400 * msec)))
368368 then (o.matcherFeeAssetId == o.assetPair.priceAsset)
369369 else false)
370370 then containsElement(portfolio, o.assetPair.priceAsset)
371371 else false)
372372 then true
373- else if (if (((o.expiration - o.timestamp) == (86400 * msec)))
373+ else if (if (((86400 * msec) >= (o.expiration - o.timestamp)))
374374 then !(containsElement(portfolio, o.matcherFeeAssetId))
375375 else false)
376376 then !(containsElement(portfolio, o.assetPair.priceAsset))
377377 else false
378378 else false)
379379 then true
380380 else if (if ((o.orderType == Sell))
381381 then containsElement(portfolio, o.assetPair.priceAsset)
382382 else false)
383383 then if (if (!(isValidOwner))
384384 then true
385- else if (if (((o.expiration - o.timestamp) != (86400 * msec)))
385+ else if (if (((o.expiration - o.timestamp) >= (86400 * msec)))
386386 then (o.matcherFeeAssetId == o.assetPair.amountAsset)
387387 else false)
388388 then containsElement(portfolio, o.assetPair.amountAsset)
389389 else false)
390390 then true
391- else if (if (((o.expiration - o.timestamp) == (86400 * msec)))
391+ else if (if (((86400 * msec) >= (o.expiration - o.timestamp)))
392392 then !(containsElement(portfolio, o.matcherFeeAssetId))
393393 else false)
394394 then !(containsElement(portfolio, o.assetPair.amountAsset))
395395 else false
396396 else false)
397397 then true
398398 else if (if (!(containsElement((portfolio ++ ourAssets), o.matcherFeeAssetId)))
399399 then !(containsElement((portfolio ++ ourAssets), o.assetPair.priceAsset))
400400 else false)
401401 then !(containsElement((portfolio ++ ourAssets), o.assetPair.amountAsset))
402402 else false
403403 else false
404404 case b: BurnTransaction =>
405405 if (isValidOwner)
406406 then !(containsElement((portfolio ++ ourAssets), b.assetId))
407407 else false
408408 case _: LeaseCancelTransaction|LeaseTransaction =>
409409 isValidOwner
410410 case t: TransferTransaction =>
411411 if (if (isValidOwner)
412412 then !(containsElement((portfolio ++ ourAssets), t.assetId))
413413 else false)
414414 then !(containsElement((portfolio ++ ourAssets), t.feeAssetId))
415415 else false
416416 case m: MassTransferTransaction =>
417417 if (if (isValidAdmin)
418418 then isValidGuarantors
419419 else false)
420420 then !(containsElement(portfolio, m.assetId))
421421 else false
422422 case _: SetScriptTransaction|DataTransaction =>
423423 if (isValidAdmin)
424424 then isValidGuarantors
425425 else false
426426 case _ =>
427427 false
428428 }
429429 }
430430

github/deemru/w8io/873ac7e 
109.97 ms