2020.02.13 20:49 [1928500] smart account 3P5Bfd58PPfNvBM2Hy8QfbcDqMeNtzg7KfP > SELF 0.00000000 Waves

{ "type": 13, "id": "5AtmaD7Vre1AMSxEh6JvXbKZSv8QeSFoK39n8gK1iXD4", "fee": 1400000, "feeAssetId": null, "timestamp": 1581614171155, "version": 1, "sender": "3P5Bfd58PPfNvBM2Hy8QfbcDqMeNtzg7KfP", "senderPublicKey": "GqXuX2WHNr3WUqTaeH2YCySFY45NAJoE9RmY9bEWkzh", "proofs": [ "wZ2N9mmxsCLPzXPJnGXfZ55egZQvCEpwRqCNtPWTGH2c7EfKVQ4LHsx1UMFKishQJrGUEt5s4zc3ouWfS3qmQJG", "5aUKdkx5CEvFmYDXVt6Ft5h9E8mDRJcvVG5zCMZPNMmnboptdKomykvynA94PYrgNdiUu91bgzjNC5rawHM7eCbf", "3QFD3jTvAHjj8R5KwcdunaVjDe6uAM9QGx3xVqJohwm9SSfTH4kik3eptmWgmnJLHmQbdGnVf1Ji8PoBkN5eL3vp" ], "script": "base64:AAIDAAAAAAAAAAkIARIDCgEIEgAAAAAmAQAAAA5nZXROdW1iZXJCeUtleQAAAAEAAAADa2V5BAAAAAckbWF0Y2gwCQAEGgAAAAIFAAAABHRoaXMFAAAAA2tleQMJAAABAAAAAgUAAAAHJG1hdGNoMAIAAAADSW50BAAAAAFhBQAAAAckbWF0Y2gwBQAAAAFhAAAAAAAAAAAAAQAAAA5nZXRTdHJpbmdCeUtleQAAAAEAAAADa2V5BAAAAAckbWF0Y2gwCQAEHQAAAAIFAAAABHRoaXMFAAAAA2tleQMJAAABAAAAAgUAAAAHJG1hdGNoMAIAAAAGU3RyaW5nBAAAAAFhBQAAAAckbWF0Y2gwBQAAAAFhAgAAAAABAAAADGdldEJvb2xCeUtleQAAAAEAAAADa2V5BAAAAAckbWF0Y2gwCQAEGwAAAAIFAAAABHRoaXMFAAAAA2tleQMJAAABAAAAAgUAAAAHJG1hdGNoMAIAAAAHQm9vbGVhbgQAAAABYQUAAAAHJG1hdGNoMAUAAAABYQcBAAAAGGdldE51bWJlckJ5QWRkcmVzc0FuZEtleQAAAAIAAAAHYWRkcmVzcwAAAANrZXkEAAAAByRtYXRjaDAJAAQaAAAAAgUAAAAHYWRkcmVzcwUAAAADa2V5AwkAAAEAAAACBQAAAAckbWF0Y2gwAgAAAANJbnQEAAAAAWEFAAAAByRtYXRjaDAFAAAAAWEAAAAAAAAAAAABAAAAGGdldFN0cmluZ0J5QWRkcmVzc0FuZEtleQAAAAIAAAAHYWRkcmVzcwAAAANrZXkEAAAAByRtYXRjaDAJAAQdAAAAAgUAAAAHYWRkcmVzcwUAAAADa2V5AwkAAAEAAAACBQAAAAckbWF0Y2gwAgAAAAZTdHJpbmcEAAAAAWEFAAAAByRtYXRjaDAFAAAAAWECAAAAAAEAAAAWZHJvcEVsZW1lbnRJbkpzb25BcnJheQAAAAIAAAAFYXJyYXkAAAAHZWxlbWVudAQAAAAMc3BsaXRlZEFycmF5CQAEtQAAAAIFAAAABWFycmF5BQAAAAdlbGVtZW50AwkAAAAAAAACCQABLwAAAAIJAAGRAAAAAgUAAAAMc3BsaXRlZEFycmF5AAAAAAAAAAABAAAAAAAAAAABAgAAAAEsCQABLAAAAAIJAAGRAAAAAgUAAAAMc3BsaXRlZEFycmF5AAAAAAAAAAAACQABMAAAAAIJAAGRAAAAAgUAAAAMc3BsaXRlZEFycmF5AAAAAAAAAAABAAAAAAAAAAABCQABLAAAAAIJAQAAAAlkcm9wUmlnaHQAAAACCQABkQAAAAIFAAAADHNwbGl0ZWRBcnJheQAAAAAAAAAAAAAAAAAAAAAAAQkAAZEAAAACBQAAAAxzcGxpdGVkQXJyYXkAAAAAAAAAAAEBAAAAFmNvbnZlcnRKc29uQXJyYXlUb0xpc3QAAAABAAAACWpzb25BcnJheQkABLUAAAACBQAAAAlqc29uQXJyYXkCAAAAASwAAAAABUJMT0NLAgAAAAVibG9jawAAAAAHVU5CTE9DSwIAAAAHdW5ibG9jawAAAAAGVVBEQVRFAgAAAAZ1cGRhdGUAAAAACk9yYWNsZXNLZXkCAAAAB29yYWNsZXMAAAAADlByaWNlT2Zmc2V0S2V5AgAAAAxwcmljZV9vZmZzZXQAAAAAGkF1dG9FbWVyZ2VuY3lPcmFjbGVBZGRyZXNzAgAAACMzUDdpaEZWeEJOYkhLMjM3VE5kUHhUMXhIRXU4cEhleFhUcgAAAAAIUHJpY2VLZXkCAAAABXByaWNlAAAAAAxJc0Jsb2NrZWRLZXkCAAAACmlzX2Jsb2NrZWQAAAAAEklzQmxvY2tlZENhbGxlcktleQIAAAARaXNfYmxvY2tlZF9jYWxsZXIAAAAAEklzQmxvY2tlZFJlYXNvbktleQIAAAARaXNfYmxvY2tlZF9yZWFzb24AAAAADVByaWNlSW5kZXhLZXkCAAAAC3ByaWNlX2luZGV4AQAAABVnZXRCbGFja1N3YXJtUHJpY2VLZXkAAAABAAAABWJsb2NrCQABLAAAAAIJAAEsAAAAAgIAAAARYmxhY2tfc3dhcm1fcHJpY2UCAAAAAV8JAAGkAAAAAQUAAAAFYmxvY2sBAAAAEmdldFByaWNlSGlzdG9yeUtleQAAAAEAAAAFYmxvY2sJAAEsAAAAAgkAASwAAAACBQAAAAhQcmljZUtleQIAAAABXwkAAaQAAAABBQAAAAVibG9jawEAAAAYZ2V0SGVpZ2h0UHJpY2VCeUluZGV4S2V5AAAAAQAAAAVpbmRleAkAASwAAAACCQABLAAAAAIFAAAADVByaWNlSW5kZXhLZXkCAAAAAV8JAAGkAAAAAQUAAAAFaW5kZXgBAAAAGGdldE9yYWNsZVByb3ZpZGVQcmljZUtleQAAAAEAAAAGaGVpZ2h0CQABLAAAAAICAAAABnByaWNlXwkAAaQAAAABBQAAAAZoZWlnaHQAAAAABXByaWNlCQEAAAAOZ2V0TnVtYmVyQnlLZXkAAAABBQAAAAhQcmljZUtleQAAAAAKcHJpY2VJbmRleAkBAAAADmdldE51bWJlckJ5S2V5AAAAAQUAAAANUHJpY2VJbmRleEtleQAAAAAJaXNCbG9ja2VkCQEAAAAMZ2V0Qm9vbEJ5S2V5AAAAAQUAAAAMSXNCbG9ja2VkS2V5AAAAAA9pc0Jsb2NrZWRDYWxsZXIJAQAAAAxnZXRCb29sQnlLZXkAAAABBQAAABJJc0Jsb2NrZWRDYWxsZXJLZXkAAAAAFGJmdENvZWZmaWNpZW50T3JhY2xlAAAAAAAAAAADAAAAABJwZXJjZW50UHJpY2VPZmZzZXQJAQAAAA5nZXROdW1iZXJCeUtleQAAAAEFAAAADlByaWNlT2Zmc2V0S2V5AAAAAAdvcmFjbGVzCQEAAAAOZ2V0U3RyaW5nQnlLZXkAAAABBQAAAApPcmFjbGVzS2V5AAAAAAtvcmFjbGVzTGlzdAkBAAAAFmNvbnZlcnRKc29uQXJyYXlUb0xpc3QAAAABBQAAAAdvcmFjbGVzAQAAABZnZXRPcmFjbGVQcm92aWRlSGVpZ2h0AAAAAgAAAAVvd25lcgAAAAZoZWlnaHQJAQAAABhnZXROdW1iZXJCeUFkZHJlc3NBbmRLZXkAAAACCQEAAAAcQGV4dHJVc2VyKGFkZHJlc3NGcm9tU3RyaW5nKQAAAAEFAAAABW93bmVyCQEAAAAYZ2V0T3JhY2xlUHJvdmlkZVByaWNlS2V5AAAAAQUAAAAGaGVpZ2h0AQAAAA9nZXRQcmljZUhpc3RvcnkAAAABAAAABmhlaWdodAkBAAAADmdldE51bWJlckJ5S2V5AAAAAQkBAAAAEmdldFByaWNlSGlzdG9yeUtleQAAAAEFAAAABmhlaWdodAEAAAAIaXNPcmFjbGUAAAABAAAAB2FkZHJlc3MJAQAAAAlpc0RlZmluZWQAAAABCQAEswAAAAIFAAAAB29yYWNsZXMFAAAAB2FkZHJlc3MBAAAAGGZpbHRlckFkbWluc1ZvdGVC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AAACBQAAAAhuZXdQcmljZQkAAGQAAAACBQAAAAVwcmljZQkAAGkAAAACCQAAaAAAAAIFAAAABXByaWNlBQAAABJwZXJjZW50UHJpY2VPZmZzZXQAAAAAAAAAAGQGCQAAZwAAAAIJAABlAAAAAgUAAAAFcHJpY2UJAABpAAAAAgkAAGgAAAACBQAAAAVwcmljZQUAAAAScGVyY2VudFByaWNlT2Zmc2V0AAAAAAAAAABkBQAAAAhuZXdQcmljZQkBAAAACFdyaXRlU2V0AAAAAQkABEwAAAACCQEAAAAJRGF0YUVudHJ5AAAAAgUAAAAMSXNCbG9ja2VkS2V5BgkABEwAAAACCQEAAAAJRGF0YUVudHJ5AAAAAgkBAAAAFWdldEJsYWNrU3dhcm1QcmljZUtleQAAAAEFAAAABmhlaWdodAUAAAAIbmV3UHJpY2UFAAAAA25pbAQAAAANbmV3UHJpY2VJbmRleAkAAGQAAAACBQAAAApwcmljZUluZGV4AAAAAAAAAAABCQEAAAAIV3JpdGVTZXQAAAABCQAETAAAAAIJAQAAAAlEYXRhRW50cnkAAAACBQAAAAhQcmljZUtleQUAAAAIbmV3UHJpY2UJAARMAAAAAgkBAAAACURhdGFFbnRyeQAAAAIJAQAAABJnZXRQcmljZUhpc3RvcnlLZXkAAAABBQAAAAZoZWlnaHQFAAAACG5ld1ByaWNlCQAETAAAAAIJAQAAAAlEYXRhRW50cnkAAAACBQAAAA1QcmljZUluZGV4S2V5BQAAAA1uZXdQcmljZUluZGV4CQAETAAAAAIJAQAAAAlEYXRhRW50cnkAAAACCQEAAAAYZ2V0SGVpZ2h0UHJpY2VCeUluZGV4S2V5AAAAAQUAAAANbmV3UHJpY2VJbmRleAUAAAAGaGVpZ2h0BQAAAANuaWwAAAABAAAAAnR4AQAAAAZ2ZXJpZnkAAAAABAAAABBwdWJLZXlBZG1pbnNMaXN0CQAETAAAAAICAAAALEJMRW9ndXpQVktWVGZYeHhUM1c3UnFmOGFVbTJnZ0M5VmVtZDJNUWF3TTJHCQAETAAAAAICAAAALEZXVmZmWXIyQUxtSE1lalptM1dxZUx6NlNkeW0zZ0xGR3RKbjRLVHd5VTV4CQAETAAAAAICAAAALDNXaDJMYVdjYjVnZzdLMnBQY1czRXA2RUF1UkJ6WWtBZ3JkcHQ0M2pUREZhCQAETAAAAAICAAAALDVXUlhGU2p3Y1RiTmZLY0pzOFpxWG1TU1dZc1NWSlV0TXZNcVpqNWhINE5jBQAAAANuaWwEAAAABWNvdW50CQAAZAAAAAIJAABkAAAAAgkAAGQAAAACAwkAAfQAAAADCAUAAAACdHgAAAAJYm9keUJ5dGVzCQABkQAAAAIIBQAAAAJ0eAAAAAZwcm9vZnMAAAAAAAAAAAAJAAJZAAAAAQkAAZEAAAACBQAAABBwdWJLZXlBZG1pbnNMaXN0AAAAAAAAAAAAAAAAAAAAAAABAAAAAAAAAAAAAwkAAfQAAAADCAUAAAACdHgAAAAJYm9keUJ5dGVzCQABkQAAAAIIBQAAAAJ0eAAAAAZwcm9vZnMAAAAAAAAAAAEJAAJZAAAAAQkAAZEAAAACBQAAABBwdWJLZXlBZG1pbnNMaXN0AAAAAAAAAAABAAAAAAAAAAABAAAAAAAAAAAAAwkAAfQAAAADCAUAAAACdHgAAAAJYm9keUJ5dGVzCQABkQAAAAIIBQAAAAJ0eAAAAAZwcm9vZnMAAAAAAAAAAAIJAAJZAAAAAQkAAZEAAAACBQAAABBwdWJLZXlBZG1pbnNMaXN0AAAAAAAAAAACAAAAAAAAAAABAAAAAAAAAAAAAwkAAfQAAAADCAUAAAACdHgAAAAJYm9keUJ5dGVzCQABkQAAAAIIBQAAAAJ0eAAAAAZwcm9vZnMAAAAAAAAAAAMJAAJZAAAAAQkAAZEAAAACBQAAABBwdWJLZXlBZG1pbnNMaXN0AAAAAAAAAAADAAAAAAAAAAACAAAAAAAAAAAACQAAZwAAAAIFAAAABWNvdW50AAAAAAAAAAADkMy/5w==", "chainId": 87, "height": 1928500, "spentComplexity": 0 } View: original | compacted Prev: 4rKsJoCdotWQCih4tqjSoRhSF9qEDjqmk3kd7mU9mAN3 Next: 5kHRp32F3b637u9B6u1V5pWj8fL7zxzXf5wmZo6PXs4e Diff:
OldNewDifferences
6262
6363 let PriceOffsetKey = "price_offset"
6464
65+let AutoEmergencyOracleAddress = "3P7ihFVxBNbHK237TNdPxT1xHEu8pHexXTr"
66+
6567 let PriceKey = "price"
6668
6769 let IsBlockedKey = "is_blocked"
70+
71+let IsBlockedCallerKey = "is_blocked_caller"
72+
73+let IsBlockedReasonKey = "is_blocked_reason"
6874
6975 let PriceIndexKey = "price_index"
7076
8591 let priceIndex = getNumberByKey(PriceIndexKey)
8692
8793 let isBlocked = getBoolByKey(IsBlockedKey)
94+
95+let isBlockedCaller = getBoolByKey(IsBlockedCallerKey)
8896
8997 let bftCoefficientOracle = 3
9098
283291
284292
285293 @Callable(i)
294+func callEmergencyShutdown (reason) = {
295+ let callerAddress = toString(i.caller)
296+ if ((AutoEmergencyOracleAddress != callerAddress))
297+ then throw("caller must be one an emergency oracle")
298+ else WriteSet([DataEntry(IsBlockedKey, true), DataEntry(IsBlockedCallerKey, callerAddress), DataEntry(IsBlockedReasonKey, reason)])
299+ }
300+
301+
302+
303+@Callable(i)
286304 func finalizeCurrentPrice () = {
287305 let prices = [getOracleProvideHeight(oraclesList[0], height), getOracleProvideHeight(oraclesList[1], height), getOracleProvideHeight(oraclesList[2], height), getOracleProvideHeight(oraclesList[3], height), getOracleProvideHeight(oraclesList[4], height)]
288306 let pricesInRange = findPricesInRange(prices)
Full:
OldNewDifferences
11 {-# STDLIB_VERSION 3 #-}
22 {-# SCRIPT_TYPE ACCOUNT #-}
33 {-# CONTENT_TYPE DAPP #-}
44 func getNumberByKey (key) = match getInteger(this, key) {
55 case a: Int =>
66 a
77 case _ =>
88 0
99 }
1010
1111
1212 func getStringByKey (key) = match getString(this, key) {
1313 case a: String =>
1414 a
1515 case _ =>
1616 ""
1717 }
1818
1919
2020 func getBoolByKey (key) = match getBoolean(this, key) {
2121 case a: Boolean =>
2222 a
2323 case _ =>
2424 false
2525 }
2626
2727
2828 func getNumberByAddressAndKey (address,key) = match getInteger(address, key) {
2929 case a: Int =>
3030 a
3131 case _ =>
3232 0
3333 }
3434
3535
3636 func getStringByAddressAndKey (address,key) = match getString(address, key) {
3737 case a: String =>
3838 a
3939 case _ =>
4040 ""
4141 }
4242
4343
4444 func dropElementInJsonArray (array,element) = {
4545 let splitedArray = split(array, element)
4646 if ((take(splitedArray[1], 1) == ","))
4747 then (splitedArray[0] + drop(splitedArray[1], 1))
4848 else (dropRight(splitedArray[0], 1) + splitedArray[1])
4949 }
5050
5151
5252 func convertJsonArrayToList (jsonArray) = split(jsonArray, ",")
5353
5454
5555 let BLOCK = "block"
5656
5757 let UNBLOCK = "unblock"
5858
5959 let UPDATE = "update"
6060
6161 let OraclesKey = "oracles"
6262
6363 let PriceOffsetKey = "price_offset"
6464
65+let AutoEmergencyOracleAddress = "3P7ihFVxBNbHK237TNdPxT1xHEu8pHexXTr"
66+
6567 let PriceKey = "price"
6668
6769 let IsBlockedKey = "is_blocked"
70+
71+let IsBlockedCallerKey = "is_blocked_caller"
72+
73+let IsBlockedReasonKey = "is_blocked_reason"
6874
6975 let PriceIndexKey = "price_index"
7076
7177 func getBlackSwarmPriceKey (block) = (("black_swarm_price" + "_") + toString(block))
7278
7379
7480 func getPriceHistoryKey (block) = ((PriceKey + "_") + toString(block))
7581
7682
7783 func getHeightPriceByIndexKey (index) = ((PriceIndexKey + "_") + toString(index))
7884
7985
8086 func getOracleProvidePriceKey (height) = ("price_" + toString(height))
8187
8288
8389 let price = getNumberByKey(PriceKey)
8490
8591 let priceIndex = getNumberByKey(PriceIndexKey)
8692
8793 let isBlocked = getBoolByKey(IsBlockedKey)
94+
95+let isBlockedCaller = getBoolByKey(IsBlockedCallerKey)
8896
8997 let bftCoefficientOracle = 3
9098
9199 let percentPriceOffset = getNumberByKey(PriceOffsetKey)
92100
93101 let oracles = getStringByKey(OraclesKey)
94102
95103 let oraclesList = convertJsonArrayToList(oracles)
96104
97105 func getOracleProvideHeight (owner,height) = getNumberByAddressAndKey(addressFromStringValue(owner), getOracleProvidePriceKey(height))
98106
99107
100108 func getPriceHistory (height) = getNumberByKey(getPriceHistoryKey(height))
101109
102110
103111 func isOracle (address) = isDefined(indexOf(oracles, address))
104112
105113
106114 func filterAdminsVoteByAction (result,address,action) = address :: result
107115
108116
109117 func filterAdminsVoteByBlockAction (result,address) = filterAdminsVoteByAction(result, address, BLOCK)
110118
111119
112120 func filterAdminsVoteByUnblockAction (result,address) = filterAdminsVoteByAction(result, address, UNBLOCK)
113121
114122
115123 func filterAdminsVoteByUpdateAction (result,address) = filterAdminsVoteByAction(result, address, UPDATE)
116124
117125
118126 func findPricesInRange (prices) = {
119127 let minPercentBound = 90
120128 let maxPercentBound = 110
121129 let p0 = prices[0]
122130 let check0 = if ((0 >= prices[0]))
123131 then [0]
124132 else {
125133 let p01 = ((prices[1] * 100) / p0)
126134 let p02 = ((prices[2] * 100) / p0)
127135 let p03 = ((prices[3] * 100) / p0)
128136 let p04 = ((prices[4] * 100) / p0)
129137 let array1 = if (if ((maxPercentBound > p01))
130138 then (p01 > minPercentBound)
131139 else false)
132140 then [1, 0]
133141 else [0]
134142 let array2 = if (if ((maxPercentBound > p02))
135143 then (p02 > minPercentBound)
136144 else false)
137145 then 2 :: array1
138146 else array1
139147 let array3 = if (if ((maxPercentBound > p03))
140148 then (p03 > minPercentBound)
141149 else false)
142150 then 3 :: array2
143151 else array2
144152 if (if ((maxPercentBound > p04))
145153 then (p04 > minPercentBound)
146154 else false)
147155 then 4 :: array3
148156 else array3
149157 }
150158 let check1 = if ((size(check0) >= 3))
151159 then check0
152160 else {
153161 let p1 = prices[1]
154162 if ((0 >= p1))
155163 then [1]
156164 else {
157165 let p10 = ((prices[0] * 100) / p1)
158166 let p12 = ((prices[2] * 100) / p1)
159167 let p13 = ((prices[3] * 100) / p1)
160168 let p14 = ((prices[4] * 100) / p1)
161169 let array1 = if (if ((maxPercentBound > p10))
162170 then (p10 > minPercentBound)
163171 else false)
164172 then [0, 1]
165173 else [1]
166174 let array2 = if (if ((maxPercentBound > p12))
167175 then (p12 > minPercentBound)
168176 else false)
169177 then 2 :: array1
170178 else array1
171179 let array3 = if (if ((maxPercentBound > p13))
172180 then (p13 > minPercentBound)
173181 else false)
174182 then 3 :: array2
175183 else array2
176184 if (if ((maxPercentBound > p14))
177185 then (p14 > minPercentBound)
178186 else false)
179187 then 4 :: array3
180188 else array3
181189 }
182190 }
183191 let check2 = if ((size(check1) >= 3))
184192 then check1
185193 else {
186194 let p2 = prices[2]
187195 if ((0 >= p2))
188196 then [2]
189197 else {
190198 let p20 = ((prices[0] * 100) / p2)
191199 let p21 = ((prices[1] * 100) / p2)
192200 let p23 = ((prices[3] * 100) / p2)
193201 let p24 = ((prices[4] * 100) / p2)
194202 let array1 = if (if ((maxPercentBound > p20))
195203 then (p20 > minPercentBound)
196204 else false)
197205 then [0, 2]
198206 else [2]
199207 let array2 = if (if ((maxPercentBound > p21))
200208 then (p21 > minPercentBound)
201209 else false)
202210 then 1 :: array1
203211 else array1
204212 let array3 = if (if ((maxPercentBound > p23))
205213 then (p23 > minPercentBound)
206214 else false)
207215 then 3 :: array2
208216 else array2
209217 if (if ((maxPercentBound > p24))
210218 then (p24 > minPercentBound)
211219 else false)
212220 then 4 :: array3
213221 else array3
214222 }
215223 }
216224 let check3 = if ((size(check2) >= 3))
217225 then check2
218226 else {
219227 let p3 = prices[3]
220228 if ((0 >= p3))
221229 then [3]
222230 else {
223231 let p30 = ((prices[0] * 100) / p3)
224232 let p31 = ((prices[1] * 100) / p3)
225233 let p32 = ((prices[2] * 100) / p3)
226234 let p34 = ((prices[4] * 100) / p3)
227235 let array1 = if (if ((maxPercentBound > p30))
228236 then (p30 > minPercentBound)
229237 else false)
230238 then [0, 3]
231239 else [3]
232240 let array2 = if (if ((maxPercentBound > p31))
233241 then (p31 > minPercentBound)
234242 else false)
235243 then 1 :: array1
236244 else array1
237245 let array3 = if (if ((maxPercentBound > p32))
238246 then (p32 > minPercentBound)
239247 else false)
240248 then 2 :: array2
241249 else array2
242250 if (if ((maxPercentBound > p34))
243251 then (p34 > minPercentBound)
244252 else false)
245253 then 4 :: array3
246254 else array3
247255 }
248256 }
249257 if ((size(check3) >= 3))
250258 then check3
251259 else {
252260 let p4 = prices[4]
253261 if ((0 >= p4))
254262 then [4]
255263 else {
256264 let p40 = ((prices[0] * 100) / p4)
257265 let p41 = ((prices[1] * 100) / p4)
258266 let p42 = ((prices[2] * 100) / p4)
259267 let p43 = ((prices[3] * 100) / p4)
260268 let array1 = if (if ((maxPercentBound > p40))
261269 then (p40 > minPercentBound)
262270 else false)
263271 then [0, 4]
264272 else [4]
265273 let array2 = if (if ((maxPercentBound > p41))
266274 then (p41 > minPercentBound)
267275 else false)
268276 then 1 :: array1
269277 else array1
270278 let array3 = if (if ((maxPercentBound > p42))
271279 then (p42 > minPercentBound)
272280 else false)
273281 then 2 :: array2
274282 else array2
275283 if (if ((maxPercentBound > p43))
276284 then (p43 > minPercentBound)
277285 else false)
278286 then 3 :: array3
279287 else array3
280288 }
281289 }
282290 }
283291
284292
285293 @Callable(i)
294+func callEmergencyShutdown (reason) = {
295+ let callerAddress = toString(i.caller)
296+ if ((AutoEmergencyOracleAddress != callerAddress))
297+ then throw("caller must be one an emergency oracle")
298+ else WriteSet([DataEntry(IsBlockedKey, true), DataEntry(IsBlockedCallerKey, callerAddress), DataEntry(IsBlockedReasonKey, reason)])
299+ }
300+
301+
302+
303+@Callable(i)
286304 func finalizeCurrentPrice () = {
287305 let prices = [getOracleProvideHeight(oraclesList[0], height), getOracleProvideHeight(oraclesList[1], height), getOracleProvideHeight(oraclesList[2], height), getOracleProvideHeight(oraclesList[3], height), getOracleProvideHeight(oraclesList[4], height)]
288306 let pricesInRange = findPricesInRange(prices)
289307 let priceProvidingCount = size(pricesInRange)
290308 if ((3 > priceProvidingCount))
291309 then throw("Could not finalize price because of big variation")
292310 else {
293311 let sum1 = ((prices[pricesInRange[0]] + prices[pricesInRange[1]]) + prices[pricesInRange[2]])
294312 let sum2 = if ((priceProvidingCount >= 4))
295313 then (sum1 + prices[pricesInRange[3]])
296314 else sum1
297315 let priceSum = if ((priceProvidingCount >= 5))
298316 then (sum2 + prices[pricesInRange[4]])
299317 else sum2
300318 if ((priceProvidingCount >= 6))
301319 then throw("Invalid pricesInRange creation")
302320 else {
303321 let newPrice = (priceSum / priceProvidingCount)
304322 if (isBlocked)
305323 then throw("contract is blocked")
306324 else if ((getPriceHistory(height) != 0))
307325 then throw("wait next block")
308326 else if ((bftCoefficientOracle > priceProvidingCount))
309327 then throw((((toString(bftCoefficientOracle) + "/5 oracles need to set a price (") + toString(priceProvidingCount)) + ")"))
310328 else if (if ((newPrice >= (price + ((price * percentPriceOffset) / 100))))
311329 then true
312330 else ((price - ((price * percentPriceOffset) / 100)) >= newPrice))
313331 then WriteSet([DataEntry(IsBlockedKey, true), DataEntry(getBlackSwarmPriceKey(height), newPrice)])
314332 else {
315333 let newPriceIndex = (priceIndex + 1)
316334 WriteSet([DataEntry(PriceKey, newPrice), DataEntry(getPriceHistoryKey(height), newPrice), DataEntry(PriceIndexKey, newPriceIndex), DataEntry(getHeightPriceByIndexKey(newPriceIndex), height)])
317335 }
318336 }
319337 }
320338 }
321339
322340
323341 @Verifier(tx)
324342 func verify () = {
325343 let pubKeyAdminsList = ["BLEoguzPVKVTfXxxT3W7Rqf8aUm2ggC9Vemd2MQawM2G", "FWVffYr2ALmHMejZm3WqeLz6Sdym3gLFGtJn4KTwyU5x", "3Wh2LaWcb5gg7K2pPcW3Ep6EAuRBzYkAgrdpt43jTDFa", "5WRXFSjwcTbNfKcJs8ZqXmSSWYsSVJUtMvMqZj5hH4Nc"]
326344 let count = ((((if (sigVerify(tx.bodyBytes, tx.proofs[0], fromBase58String(pubKeyAdminsList[0])))
327345 then 1
328346 else 0) + (if (sigVerify(tx.bodyBytes, tx.proofs[1], fromBase58String(pubKeyAdminsList[1])))
329347 then 1
330348 else 0)) + (if (sigVerify(tx.bodyBytes, tx.proofs[2], fromBase58String(pubKeyAdminsList[2])))
331349 then 1
332350 else 0)) + (if (sigVerify(tx.bodyBytes, tx.proofs[3], fromBase58String(pubKeyAdminsList[3])))
333351 then 2
334352 else 0))
335353 (count >= 3)
336354 }
337355

github/deemru/w8io/786bc32 
65.63 ms