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