tx · GwJQUokVqMd1MJ4R6FtLLPRUC8a8tgwE1TjxqwPeSNSF 3PJ7RB5CC3Bnn44RNR2hceZ6wKsULnMSxPi: -0.01400000 Waves 2021.01.19 13:51 [2423959] smart account 3PJ7RB5CC3Bnn44RNR2hceZ6wKsULnMSxPi > SELF 0.00000000 Waves
{ "type": 13, "id": "GwJQUokVqMd1MJ4R6FtLLPRUC8a8tgwE1TjxqwPeSNSF", "fee": 1400000, "feeAssetId": null, "timestamp": 1611053313572, "version": 1, "sender": "3PJ7RB5CC3Bnn44RNR2hceZ6wKsULnMSxPi", "senderPublicKey": "G5ztBKfbizrqVQWMZknsgbG2HS91eJ7QgHh7X3AznjoW", "proofs": [ "5DdtywoyVqfDuMu3JpCsydPtpFFcDJMbyKVkSbYBuBFgArYdYMy41VZRwe9GqMTe79nM6SxyiTxEG2hCC3kdQoXL", "3JHvpGdH3XenX11ZAyuZDVyYjRdwhCtRxjdt7njtfstgKG3k3WShTiHWmj4BHV6XHdhTEfEssLnHKAAXfwiC4rwU" ], "script": "base64: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CAUAAAABbwAAAAlhc3NldFBhaXIAAAAKcHJpY2VBc3NldAcGAwkBAAAAASEAAAABCQEAAAAPY29udGFpbnNFbGVtZW50AAAAAgUAAAAJcG9ydGZvbGlvCAgFAAAAAW8AAAAJYXNzZXRQYWlyAAAACnByaWNlQXNzZXQJAQAAAAEhAAAAAQkBAAAAD2NvbnRhaW5zRWxlbWVudAAAAAIFAAAACXBvcnRmb2xpbwgIBQAAAAFvAAAACWFzc2V0UGFpcgAAAAthbW91bnRBc3NldAcHCQEAAAABIQAAAAEJAQAAAA9jb250YWluc0VsZW1lbnQAAAACBQAAAAlvdXJBc3NldHMICAUAAAABbwAAAAlhc3NldFBhaXIAAAAKcHJpY2VBc3NldAcJAQAAAAEhAAAAAQkBAAAAD2NvbnRhaW5zRWxlbWVudAAAAAIFAAAACW91ckFzc2V0cwgIBQAAAAFvAAAACWFzc2V0UGFpcgAAAAthbW91bnRBc3NldAcDAwkAAAEAAAACBQAAAAckbWF0Y2gwAgAAABdNYXNzVHJhbnNmZXJUcmFuc2FjdGlvbgYJAAABAAAAAgUAAAAHJG1hdGNoMAIAAAATVHJhbnNmZXJUcmFuc2FjdGlvbgQAAAABdAUAAAAHJG1hdGNoMAMDAwUAAAAMaXNWYWxpZEFkbWluBQAAABFpc1ZhbGlkR3VhcmFudG9ycwcJAQAAAAEhAAAAAQkBAAAAD2NvbnRhaW5zRWxlbWVudAAAAAIFAAAACXBvcnRmb2xpbwgFAAAAAXQAAAAHYXNzZXRJZAcJAQAAAAEhAAAAAQkBAAAAD2NvbnRhaW5zRWxlbWVudAAAAAIFAAAACXBvcnRmb2xpbwgFAAAAAXQAAAAKZmVlQXNzZXRJZAcDAwkAAAEAAAACBQAAAAckbWF0Y2gwAgAAABRTZXRTY3JpcHRUcmFuc2FjdGlvbgYJAAABAAAAAgUAAAAHJG1hdGNoMAIAAAAPRGF0YVRyYW5zYWN0aW9uAwUAAAAMaXNWYWxpZEFkbWluBQAAABFpc1ZhbGlkR3VhcmFudG9ycwcHafRsWQ==", "chainId": 87, "height": 2423959, "applicationStatus": "succeeded", "spentComplexity": 0 } View: original | compacted Prev: DcrEWWntZno6yxieTze2yxH7PLmDxqCN7xumMmnCRUmt Next: 6FZRQQKYuXzYq3WGjKDy1HBbDtssAKhNbfvyeaJk5BDC Diff:
Old | New | Differences | |
---|---|---|---|
1 | 1 | {-# STDLIB_VERSION 4 #-} | |
2 | 2 | {-# SCRIPT_TYPE ACCOUNT #-} | |
3 | 3 | {-# CONTENT_TYPE DAPP #-} | |
4 | - | let ScriptVersion = "1. | |
4 | + | let ScriptVersion = "1.3.0-beta_20210119" | |
5 | 5 | ||
6 | 6 | let percent = 10000 | |
7 | 7 | ||
9 | 9 | ||
10 | 10 | let decMult = 100000000 | |
11 | 11 | ||
12 | - | let feePerc = | |
12 | + | let feePerc = ((2 * percent) / 100) | |
13 | 13 | ||
14 | 14 | let minAmount = (1 * usdMult) | |
15 | 15 | ||
16 | - | let avgMonth = ((31556952 * 1000) | |
16 | + | let avgMonth = ((31556952 / 12) * 1000) | |
17 | 17 | ||
18 | 18 | let openTimestamp = (1609573796 * 1000) | |
19 | 19 | ||
97 | 97 | ||
98 | 98 | ||
99 | 99 | func withdraw (i,assetId) = { | |
100 | - | let $ | |
101 | - | let asset0 = $ | |
102 | - | let amount0 = $ | |
103 | - | let $ | |
104 | - | let asset1 = $ | |
105 | - | let amount1 = $ | |
100 | + | let $t055385589 = getAttachment(i.payments, 0) | |
101 | + | let asset0 = $t055385589._1 | |
102 | + | let amount0 = $t055385589._2 | |
103 | + | let $t055925643 = getAttachment(i.payments, 1) | |
104 | + | let asset1 = $t055925643._1 | |
105 | + | let amount1 = $t055925643._2 | |
106 | 106 | let thisFunds = assetBalance(this, assetId) | |
107 | 107 | let maxAmount = fractionRound(thisFunds, ratsFunds, usdxFunds) | |
108 | 108 | let inAmount = (amount0 + amount1) | |
109 | 109 | let outAmount = fractionRound(inAmount, usdxFunds, ratsFunds) | |
110 | - | let feeAmount = fractionRound(outAmount, feePerc, percent) | |
111 | - | let netAmount = valueOrMinimum((outAmount - feeAmount), 0) | |
112 | 110 | let assetSymbol = if ((assetId == usdtAsset)) | |
113 | 111 | then "USDT" | |
114 | 112 | else if ((assetId == usdcAsset)) | |
126 | 124 | then (asset1 != ratsAsset) | |
127 | 125 | else false) | |
128 | 126 | then throw(makeString([("Withdraw" + assetSymbol), "() =>", "Please attach only Rat's Share (RATS) assets!", "Max. amount:", toFloatString(maxAmount, usdMult), "RATS"], " ")) | |
129 | - | else ([ScriptTransfer(i.caller, | |
127 | + | else ([ScriptTransfer(i.caller, outAmount, assetId)] ++ adminTimestamp(i.callerPublicKey)) | |
130 | 128 | } | |
131 | 129 | ||
132 | 130 | ||
145 | 143 | @Callable(i) | |
146 | 144 | func DepositFunds () = { | |
147 | 145 | let userFunds = assetBalance(i.caller, fhfsAsset) | |
148 | - | let $ | |
149 | - | let asset0 = $ | |
150 | - | let amount0 = $ | |
151 | - | let $ | |
152 | - | let asset1 = $ | |
153 | - | let amount1 = $ | |
146 | + | let $t072667317 = getAttachment(i.payments, 0) | |
147 | + | let asset0 = $t072667317._1 | |
148 | + | let amount0 = $t072667317._2 | |
149 | + | let $t073207371 = getAttachment(i.payments, 1) | |
150 | + | let asset1 = $t073207371._1 | |
151 | + | let amount1 = $t073207371._2 | |
154 | 152 | let inAmount = (amount0 + amount1) | |
155 | 153 | let outAmount = fractionRound(inAmount, ratsFunds, usdxFunds) | |
156 | - | let serviceFee = if (if (if (((100 * minAmount) > userFunds)) | |
157 | - | then (i.callerPublicKey != adminPublicKey) | |
158 | - | else false) | |
159 | - | then !(containsElement(guarantors, i.callerPublicKey)) | |
160 | - | else false) | |
161 | - | then (10 * feePerc) | |
162 | - | else feePerc | |
163 | - | let feeAmount = fractionRound(outAmount, serviceFee, percent) | |
154 | + | let grossFee = fractionRound(outAmount, feePerc, percent) | |
155 | + | let discount = fractionRound(grossFee, userFunds, fhfsFunds) | |
156 | + | let feeAmount = valueOrMinimum((grossFee - discount), 0) | |
164 | 157 | let netAmount = valueOrMinimum((outAmount - feeAmount), 0) | |
165 | 158 | if (if (if ((minAmount > inAmount)) | |
166 | 159 | then true |
Old | New | Differences | |
---|---|---|---|
1 | 1 | {-# STDLIB_VERSION 4 #-} | |
2 | 2 | {-# SCRIPT_TYPE ACCOUNT #-} | |
3 | 3 | {-# CONTENT_TYPE DAPP #-} | |
4 | - | let ScriptVersion = "1. | |
4 | + | let ScriptVersion = "1.3.0-beta_20210119" | |
5 | 5 | ||
6 | 6 | let percent = 10000 | |
7 | 7 | ||
8 | 8 | let usdMult = 1000000 | |
9 | 9 | ||
10 | 10 | let decMult = 100000000 | |
11 | 11 | ||
12 | - | let feePerc = | |
12 | + | let feePerc = ((2 * percent) / 100) | |
13 | 13 | ||
14 | 14 | let minAmount = (1 * usdMult) | |
15 | 15 | ||
16 | - | let avgMonth = ((31556952 * 1000) | |
16 | + | let avgMonth = ((31556952 / 12) * 1000) | |
17 | 17 | ||
18 | 18 | let openTimestamp = (1609573796 * 1000) | |
19 | 19 | ||
20 | 20 | let adminPublicKey = base58'JDYJq5RKnSXKLYUQfL89zWPdM3QH5hW8JUTpjnTYV95k' | |
21 | 21 | ||
22 | 22 | let robotPublicKey = base58'JDYJq5RKnSXKLYUQfL89zWPdM3QH5hW8JUTpjnTYV95k' | |
23 | 23 | ||
24 | 24 | let wexchPublicKey = base58'9cpfKN9suPNvfeUNphzxXMjcnn974eme8ZhWUjaktzU5' | |
25 | 25 | ||
26 | 26 | let guarantors = ([valueOrElse(getBinary(this, "guarantor1"), base58''), valueOrElse(getBinary(this, "guarantor2"), base58''), valueOrElse(getBinary(this, "guarantor3"), base58'')] :+ base58'') | |
27 | 27 | ||
28 | 28 | let actualSize = value(indexOf(guarantors, base58'')) | |
29 | 29 | ||
30 | 30 | let minSignatures = ((actualSize / 2) + (actualSize % 2)) | |
31 | 31 | ||
32 | 32 | let usdtAsset = base58'34N9YcEETLWn93qYQ64EsP1x89tSruJU44RrEMSXXEPJ' | |
33 | 33 | ||
34 | 34 | let usdcAsset = base58'6XtHjpXbs9RRJP2Sr9GUyVqzACcby9TkThHXnjVC5CDJ' | |
35 | 35 | ||
36 | 36 | let fhfsAsset = base58'4wcCKU3Cu4ABpmfiwzufocvrQQuRX4QMHZ7TjpRwtAmn' | |
37 | 37 | ||
38 | 38 | let ratsAsset = base58'Z7817F7hnbWYsVHykjPtn8sUjyuLLf8NPofdveb8CMD' | |
39 | 39 | ||
40 | 40 | let xfeeAsset = base58'5EMfVQiB8NF4HuhaXrZzDM637whWuVBsduq59ZaCSNqk' | |
41 | 41 | ||
42 | 42 | let portfolio = [usdtAsset, usdcAsset] | |
43 | 43 | ||
44 | 44 | let ourAssets = [fhfsAsset, xfeeAsset, ratsAsset] | |
45 | 45 | ||
46 | 46 | let admin = Address(base58'3PLRw83NCgHKKFfeJi8XWZ4fypqJJxm2x2x') | |
47 | 47 | ||
48 | 48 | let fmain = Address(base58'3PEPsNg7aSWSSgdC6XweyJkvDXmwVoWeNHL') | |
49 | 49 | ||
50 | 50 | let fcold = Address(base58'3P8v4dR4UD8nGeLQmorw6BmCo424GvGBXCA') | |
51 | 51 | ||
52 | 52 | let frats = Address(base58'3PJ7RB5CC3Bnn44RNR2hceZ6wKsULnMSxPi') | |
53 | 53 | ||
54 | 54 | let fhfsTotal = (assetBalance(fmain, fhfsAsset) + assetBalance(fcold, fhfsAsset)) | |
55 | 55 | ||
56 | 56 | let fhfsFunds = (value(assetInfo(fhfsAsset)).quantity - fhfsTotal) | |
57 | 57 | ||
58 | 58 | let ratsTotal = (assetBalance(frats, ratsAsset) + assetBalance(fcold, ratsAsset)) | |
59 | 59 | ||
60 | 60 | let ratsFunds = (value(assetInfo(ratsAsset)).quantity - ratsTotal) | |
61 | 61 | ||
62 | 62 | let usdxFunds = (assetBalance(frats, usdtAsset) + assetBalance(frats, usdcAsset)) | |
63 | 63 | ||
64 | 64 | func round (xVal) = ((xVal + 1) / 2) | |
65 | 65 | ||
66 | 66 | ||
67 | 67 | func fractionRound (val,num,den) = round(fraction((2 * val), num, den)) | |
68 | 68 | ||
69 | 69 | ||
70 | 70 | func valueOrMinimum (val,minVal) = if ((minVal > val)) | |
71 | 71 | then minVal | |
72 | 72 | else val | |
73 | 73 | ||
74 | 74 | ||
75 | 75 | func adminTimestamp (publicKey) = if ((publicKey != adminPublicKey)) | |
76 | 76 | then nil | |
77 | 77 | else [IntegerEntry("timestamp", lastBlock.timestamp)] | |
78 | 78 | ||
79 | 79 | ||
80 | 80 | func getAttachment (payments,idx) = if ((idx >= size(payments))) | |
81 | 81 | then $Tuple2(base58'', 0) | |
82 | 82 | else $Tuple2(payments[idx].assetId, payments[idx].amount) | |
83 | 83 | ||
84 | 84 | ||
85 | 85 | func airdropBalance (assetId) = if (containsElement((portfolio ++ ourAssets), assetId)) | |
86 | 86 | then throw(makeString(["AirdropWasher () =>", "Please remove the asset ID:", toBase58String(assetId)], " ")) | |
87 | 87 | else if ((assetId == base58'')) | |
88 | 88 | then 0 | |
89 | 89 | else assetBalance(this, assetId) | |
90 | 90 | ||
91 | 91 | ||
92 | 92 | func toFloatString (val,dec) = toUtf8String(if ((val == 0)) | |
93 | 93 | then base58'q' | |
94 | 94 | else if ((val > 0)) | |
95 | 95 | then ((toBytes(toString((val / dec))) + base58'o') + take(drop(toBytes(toString(((val % dec) + dec))), 1), 8)) | |
96 | 96 | else throw("Unexpected error: Negative values are not allowed!")) | |
97 | 97 | ||
98 | 98 | ||
99 | 99 | func withdraw (i,assetId) = { | |
100 | - | let $ | |
101 | - | let asset0 = $ | |
102 | - | let amount0 = $ | |
103 | - | let $ | |
104 | - | let asset1 = $ | |
105 | - | let amount1 = $ | |
100 | + | let $t055385589 = getAttachment(i.payments, 0) | |
101 | + | let asset0 = $t055385589._1 | |
102 | + | let amount0 = $t055385589._2 | |
103 | + | let $t055925643 = getAttachment(i.payments, 1) | |
104 | + | let asset1 = $t055925643._1 | |
105 | + | let amount1 = $t055925643._2 | |
106 | 106 | let thisFunds = assetBalance(this, assetId) | |
107 | 107 | let maxAmount = fractionRound(thisFunds, ratsFunds, usdxFunds) | |
108 | 108 | let inAmount = (amount0 + amount1) | |
109 | 109 | let outAmount = fractionRound(inAmount, usdxFunds, ratsFunds) | |
110 | - | let feeAmount = fractionRound(outAmount, feePerc, percent) | |
111 | - | let netAmount = valueOrMinimum((outAmount - feeAmount), 0) | |
112 | 110 | let assetSymbol = if ((assetId == usdtAsset)) | |
113 | 111 | then "USDT" | |
114 | 112 | else if ((assetId == usdcAsset)) | |
115 | 113 | then "USDC" | |
116 | 114 | else throw("Unexpected error: This asset cannot be withdrawn!") | |
117 | 115 | if (if (if (if ((1 > inAmount)) | |
118 | 116 | then true | |
119 | 117 | else (inAmount > maxAmount)) | |
120 | 118 | then true | |
121 | 119 | else if ((amount0 > 0)) | |
122 | 120 | then (asset0 != ratsAsset) | |
123 | 121 | else false) | |
124 | 122 | then true | |
125 | 123 | else if ((amount1 > 0)) | |
126 | 124 | then (asset1 != ratsAsset) | |
127 | 125 | else false) | |
128 | 126 | then throw(makeString([("Withdraw" + assetSymbol), "() =>", "Please attach only Rat's Share (RATS) assets!", "Max. amount:", toFloatString(maxAmount, usdMult), "RATS"], " ")) | |
129 | - | else ([ScriptTransfer(i.caller, | |
127 | + | else ([ScriptTransfer(i.caller, outAmount, assetId)] ++ adminTimestamp(i.callerPublicKey)) | |
130 | 128 | } | |
131 | 129 | ||
132 | 130 | ||
133 | 131 | @Callable(i) | |
134 | 132 | func GetMeanPrice () = { | |
135 | 133 | let return = valueOrMinimum((usdxFunds - ratsFunds), 0) | |
136 | 134 | let meanPrice = fractionRound(decMult, usdxFunds, ratsFunds) | |
137 | 135 | let duration = (lastBlock.timestamp - openTimestamp) | |
138 | 136 | let exponent = fractionRound(decMult, (12 * avgMonth), duration) | |
139 | 137 | let meanReturn = (pow(meanPrice, 8, exponent, 8, 4, HALFUP) - percent) | |
140 | 138 | throw(makeString(["GetMeanPrice () =>", "balance:", toFloatString(usdxFunds, usdMult), "USDx;", "gross return:", toFloatString(return, usdMult), "USDx", (("(" + toFloatString(meanReturn, (percent / 100))) + "% / an);"), "mean price:", toFloatString(meanPrice, decMult), "USDx / RATS"], " ")) | |
141 | 139 | } | |
142 | 140 | ||
143 | 141 | ||
144 | 142 | ||
145 | 143 | @Callable(i) | |
146 | 144 | func DepositFunds () = { | |
147 | 145 | let userFunds = assetBalance(i.caller, fhfsAsset) | |
148 | - | let $ | |
149 | - | let asset0 = $ | |
150 | - | let amount0 = $ | |
151 | - | let $ | |
152 | - | let asset1 = $ | |
153 | - | let amount1 = $ | |
146 | + | let $t072667317 = getAttachment(i.payments, 0) | |
147 | + | let asset0 = $t072667317._1 | |
148 | + | let amount0 = $t072667317._2 | |
149 | + | let $t073207371 = getAttachment(i.payments, 1) | |
150 | + | let asset1 = $t073207371._1 | |
151 | + | let amount1 = $t073207371._2 | |
154 | 152 | let inAmount = (amount0 + amount1) | |
155 | 153 | let outAmount = fractionRound(inAmount, ratsFunds, usdxFunds) | |
156 | - | let serviceFee = if (if (if (((100 * minAmount) > userFunds)) | |
157 | - | then (i.callerPublicKey != adminPublicKey) | |
158 | - | else false) | |
159 | - | then !(containsElement(guarantors, i.callerPublicKey)) | |
160 | - | else false) | |
161 | - | then (10 * feePerc) | |
162 | - | else feePerc | |
163 | - | let feeAmount = fractionRound(outAmount, serviceFee, percent) | |
154 | + | let grossFee = fractionRound(outAmount, feePerc, percent) | |
155 | + | let discount = fractionRound(grossFee, userFunds, fhfsFunds) | |
156 | + | let feeAmount = valueOrMinimum((grossFee - discount), 0) | |
164 | 157 | let netAmount = valueOrMinimum((outAmount - feeAmount), 0) | |
165 | 158 | if (if (if ((minAmount > inAmount)) | |
166 | 159 | then true | |
167 | 160 | else if ((amount0 > 0)) | |
168 | 161 | then !(containsElement(portfolio, asset0)) | |
169 | 162 | else false) | |
170 | 163 | then true | |
171 | 164 | else if ((amount1 > 0)) | |
172 | 165 | then !(containsElement(portfolio, asset1)) | |
173 | 166 | else false) | |
174 | 167 | then throw(makeString(["DepositFunds () =>", "Please attach Tether (USDT) and/or USD Coin (USDC) assets!", "Min. total:", toFloatString(fraction(minAmount, 100, usdMult), 100), "USDx"], " ")) | |
175 | 168 | else ([ScriptTransfer(admin, feeAmount, ratsAsset), ScriptTransfer(i.caller, netAmount, ratsAsset)] ++ adminTimestamp(i.callerPublicKey)) | |
176 | 169 | } | |
177 | 170 | ||
178 | 171 | ||
179 | 172 | ||
180 | 173 | @Callable(i) | |
181 | 174 | func WithdrawUSDT () = withdraw(i, usdtAsset) | |
182 | 175 | ||
183 | 176 | ||
184 | 177 | ||
185 | 178 | @Callable(i) | |
186 | 179 | func WithdrawUSDC () = withdraw(i, usdcAsset) | |
187 | 180 | ||
188 | 181 | ||
189 | 182 | ||
190 | 183 | @Callable(i) | |
191 | 184 | func AirdropWasher (id0,id1,id2,id3,id4,id5,id6,id7,id8,id9) = if ((size(i.payments) > 0)) | |
192 | 185 | then throw(makeString(["AirdropWasher (...) =>", "Don't attach payment when calling this function ..."], " ")) | |
193 | 186 | else if ((i.callerPublicKey != adminPublicKey)) | |
194 | 187 | then throw(makeString(["AirdropWasher (...) =>", "This action can only be performed by an administrator!"], " ")) | |
195 | 188 | else ([ScriptTransfer(admin, airdropBalance(id0), id0), ScriptTransfer(admin, airdropBalance(id1), id1), ScriptTransfer(admin, airdropBalance(id2), id2), ScriptTransfer(admin, airdropBalance(id3), id3), ScriptTransfer(admin, airdropBalance(id4), id4), ScriptTransfer(admin, airdropBalance(id5), id5), ScriptTransfer(admin, airdropBalance(id6), id6), ScriptTransfer(admin, airdropBalance(id7), id7), ScriptTransfer(admin, airdropBalance(id8), id8), ScriptTransfer(admin, airdropBalance(id9), id9)] ++ adminTimestamp(i.callerPublicKey)) | |
196 | 189 | ||
197 | 190 | ||
198 | 191 | @Verifier(tx) | |
199 | 192 | func verify () = { | |
200 | 193 | let isValidOwner = sigVerify_32Kb(tx.bodyBytes, tx.proofs[0], tx.senderPublicKey) | |
201 | 194 | let isValidAdmin = if (isValidOwner) | |
202 | 195 | then true | |
203 | 196 | else sigVerify_32Kb(tx.bodyBytes, tx.proofs[0], adminPublicKey) | |
204 | 197 | let isValidRobot = if (isValidOwner) | |
205 | 198 | then true | |
206 | 199 | else sigVerify_32Kb(tx.bodyBytes, tx.proofs[0], robotPublicKey) | |
207 | 200 | let isValidGuarantors = ((((if (sigVerify_32Kb(tx.bodyBytes, tx.proofs[1], guarantors[0])) | |
208 | 201 | then 1 | |
209 | 202 | else 0) + (if (sigVerify_32Kb(tx.bodyBytes, tx.proofs[2], guarantors[1])) | |
210 | 203 | then 1 | |
211 | 204 | else 0)) + (if (sigVerify_32Kb(tx.bodyBytes, tx.proofs[3], guarantors[2])) | |
212 | 205 | then 1 | |
213 | 206 | else 0)) >= minSignatures) | |
214 | 207 | match tx { | |
215 | 208 | case _: LeaseCancelTransaction|LeaseTransaction => | |
216 | 209 | isValidOwner | |
217 | 210 | case b: BurnTransaction => | |
218 | 211 | if (if (isValidOwner) | |
219 | 212 | then !(containsElement(portfolio, b.assetId)) | |
220 | 213 | else false) | |
221 | 214 | then !(containsElement(ourAssets, b.assetId)) | |
222 | 215 | else false | |
223 | 216 | case o: Order => | |
224 | 217 | if (if (if (if (if (isValidRobot) | |
225 | 218 | then !(isDefined(o.matcherFeeAssetId)) | |
226 | 219 | else false) | |
227 | 220 | then (o.matcherPublicKey == wexchPublicKey) | |
228 | 221 | else false) | |
229 | 222 | then if (if (if ((o.orderType == Buy)) | |
230 | 223 | then containsElement(portfolio, o.assetPair.amountAsset) | |
231 | 224 | else false) | |
232 | 225 | then true | |
233 | 226 | else if ((o.orderType == Sell)) | |
234 | 227 | then containsElement(portfolio, o.assetPair.priceAsset) | |
235 | 228 | else false) | |
236 | 229 | then true | |
237 | 230 | else if (!(containsElement(portfolio, o.assetPair.priceAsset))) | |
238 | 231 | then !(containsElement(portfolio, o.assetPair.amountAsset)) | |
239 | 232 | else false | |
240 | 233 | else false) | |
241 | 234 | then !(containsElement(ourAssets, o.assetPair.priceAsset)) | |
242 | 235 | else false) | |
243 | 236 | then !(containsElement(ourAssets, o.assetPair.amountAsset)) | |
244 | 237 | else false | |
245 | 238 | case t: MassTransferTransaction|TransferTransaction => | |
246 | 239 | if (if (if (isValidAdmin) | |
247 | 240 | then isValidGuarantors | |
248 | 241 | else false) | |
249 | 242 | then !(containsElement(portfolio, t.assetId)) | |
250 | 243 | else false) | |
251 | 244 | then !(containsElement(portfolio, t.feeAssetId)) | |
252 | 245 | else false | |
253 | 246 | case _: SetScriptTransaction|DataTransaction => | |
254 | 247 | if (isValidAdmin) | |
255 | 248 | then isValidGuarantors | |
256 | 249 | else false | |
257 | 250 | case _ => | |
258 | 251 | false | |
259 | 252 | } | |
260 | 253 | } | |
261 | 254 |
github/deemru/w8io/873ac7e 67.21 ms ◑![]()