tx · CtvJv8Vk4eErHymHzFBVYp1e32ueQjXRM6GDzg3wGFej

3PKsKQ4ceZwse9sadJjVh1tpw5L2QUsCxtP:  -0.01400000 Waves

2020.03.16 20:23 [1975198] smart account 3PKsKQ4ceZwse9sadJjVh1tpw5L2QUsCxtP > SELF 0.00000000 Waves

{ "type": 13, "id": "CtvJv8Vk4eErHymHzFBVYp1e32ueQjXRM6GDzg3wGFej", "fee": 1400000, "feeAssetId": null, "timestamp": 1584379488964, "version": 1, "sender": "3PKsKQ4ceZwse9sadJjVh1tpw5L2QUsCxtP", "senderPublicKey": "ETJuWBsfS3jy9CBF6BkmGVz1RNHaD8Mxy3jWq5Vkrbpa", "proofs": [ "2Sg89ECwFyeH5k296NZdZk4fHyEm6Avpy3WWymDvn3g9MGjPTs7dyqynzLjEVFkvdKSqVS7XVtygFPA3MePaNTEF" ], "script": "base64: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", "chainId": 87, "height": 1975198, "spentComplexity": 0 } View: original | compacted Prev: none Next: CHRX9HT8MKXZeXDVezR55VXnhp6jaATsfVEyX3e2zphF Full:
OldNewDifferences
1-# no script
1+{-# STDLIB_VERSION 3 #-}
2+{-# SCRIPT_TYPE ACCOUNT #-}
3+{-# CONTENT_TYPE DAPP #-}
4+func convertWavesToNeutrino (amount,price) = fraction(fraction(amount, price, 100), 1000000, 100000000)
5+
6+
7+func getStringByKey (key) = match getString(this, key) {
8+ case a: String =>
9+ a
10+ case _ =>
11+ ""
12+}
13+
14+
15+func getNumberByAddressAndKey (address,key) = match getInteger(addressFromStringValue(address), key) {
16+ case a: Int =>
17+ a
18+ case _ =>
19+ 0
20+}
21+
22+
23+func getOracleProvideHeight (ownerPub,height) = match getInteger(addressFromPublicKey(ownerPub), ("price_" + toString(height))) {
24+ case a: Int =>
25+ a
26+ case _ =>
27+ 0
28+}
29+
30+
31+func getStringByAddressAndKey (address,key) = match getString(address, key) {
32+ case a: String =>
33+ a
34+ case _ =>
35+ ""
36+}
37+
38+
39+func dropElementInJsonArray (array,element) = {
40+ let splitedArray = split(array, element)
41+ if ((take(splitedArray[1], 1) == ","))
42+ then (splitedArray[0] + drop(splitedArray[1], 1))
43+ else (dropRight(splitedArray[0], 1) + splitedArray[1])
44+ }
45+
46+
47+func convertJsonArrayToList (jsonArray) = split(jsonArray, ",")
48+
49+
50+let BLOCK = "block"
51+
52+let UNBLOCK = "unblock"
53+
54+let UPDATE = "update"
55+
56+let SIGNPREFIX = "WAVESNEUTRINOPREFIX"
57+
58+let OraclesKey = "oracles"
59+
60+let PriceOffsetKey = "price_offset"
61+
62+let PriceKey = "price"
63+
64+let IsBlockedKey = "is_blocked"
65+
66+let PriceIndexKey = "price_index"
67+
68+let price = match getInteger(this, "price") {
69+ case a: Int =>
70+ a
71+ case _ =>
72+ 0
73+}
74+
75+let priceIndex = match getInteger(this, "price_index") {
76+ case a: Int =>
77+ a
78+ case _ =>
79+ 0
80+}
81+
82+let isBlocked = match getBoolean(this, "is_blocked") {
83+ case a: Boolean =>
84+ a
85+ case _ =>
86+ false
87+}
88+
89+let percentPriceOffset = 7
90+
91+let pubKeyOracles = getStringByKey(OraclesKey)
92+
93+let pubKeyOraclesList = convertJsonArrayToList(pubKeyOracles)
94+
95+let bftCoefficientOracle = 4
96+
97+func findPricesInRange (prices) = {
98+ let minPercentBound = 90
99+ let maxPercentBound = 110
100+ let p0 = prices[0]
101+ let check0 = if ((0 >= prices[0]))
102+ then [0]
103+ else {
104+ let p01 = ((prices[1] * 100) / p0)
105+ let p02 = ((prices[2] * 100) / p0)
106+ let p03 = ((prices[3] * 100) / p0)
107+ let p04 = ((prices[4] * 100) / p0)
108+ let array1 = if (if ((maxPercentBound > p01))
109+ then (p01 > minPercentBound)
110+ else false)
111+ then [1, 0]
112+ else [0]
113+ let array2 = if (if ((maxPercentBound > p02))
114+ then (p02 > minPercentBound)
115+ else false)
116+ then 2 :: array1
117+ else array1
118+ let array3 = if (if ((maxPercentBound > p03))
119+ then (p03 > minPercentBound)
120+ else false)
121+ then 3 :: array2
122+ else array2
123+ if (if ((maxPercentBound > p04))
124+ then (p04 > minPercentBound)
125+ else false)
126+ then 4 :: array3
127+ else array3
128+ }
129+ let check1 = if ((size(check0) >= 3))
130+ then check0
131+ else {
132+ let p1 = prices[1]
133+ if ((0 >= p1))
134+ then [1]
135+ else {
136+ let p10 = ((prices[0] * 100) / p1)
137+ let p12 = ((prices[2] * 100) / p1)
138+ let p13 = ((prices[3] * 100) / p1)
139+ let p14 = ((prices[4] * 100) / p1)
140+ let array1 = if (if ((maxPercentBound > p10))
141+ then (p10 > minPercentBound)
142+ else false)
143+ then [0, 1]
144+ else [1]
145+ let array2 = if (if ((maxPercentBound > p12))
146+ then (p12 > minPercentBound)
147+ else false)
148+ then 2 :: array1
149+ else array1
150+ let array3 = if (if ((maxPercentBound > p13))
151+ then (p13 > minPercentBound)
152+ else false)
153+ then 3 :: array2
154+ else array2
155+ if (if ((maxPercentBound > p14))
156+ then (p14 > minPercentBound)
157+ else false)
158+ then 4 :: array3
159+ else array3
160+ }
161+ }
162+ let check2 = if ((size(check1) >= 3))
163+ then check1
164+ else {
165+ let p2 = prices[2]
166+ if ((0 >= p2))
167+ then [2]
168+ else {
169+ let p20 = ((prices[0] * 100) / p2)
170+ let p21 = ((prices[1] * 100) / p2)
171+ let p23 = ((prices[3] * 100) / p2)
172+ let p24 = ((prices[4] * 100) / p2)
173+ let array1 = if (if ((maxPercentBound > p20))
174+ then (p20 > minPercentBound)
175+ else false)
176+ then [0, 2]
177+ else [2]
178+ let array2 = if (if ((maxPercentBound > p21))
179+ then (p21 > minPercentBound)
180+ else false)
181+ then 1 :: array1
182+ else array1
183+ let array3 = if (if ((maxPercentBound > p23))
184+ then (p23 > minPercentBound)
185+ else false)
186+ then 3 :: array2
187+ else array2
188+ if (if ((maxPercentBound > p24))
189+ then (p24 > minPercentBound)
190+ else false)
191+ then 4 :: array3
192+ else array3
193+ }
194+ }
195+ let check3 = if ((size(check2) >= 3))
196+ then check2
197+ else {
198+ let p3 = prices[3]
199+ if ((0 >= p3))
200+ then [3]
201+ else {
202+ let p30 = ((prices[0] * 100) / p3)
203+ let p31 = ((prices[1] * 100) / p3)
204+ let p32 = ((prices[2] * 100) / p3)
205+ let p34 = ((prices[4] * 100) / p3)
206+ let array1 = if (if ((maxPercentBound > p30))
207+ then (p30 > minPercentBound)
208+ else false)
209+ then [0, 3]
210+ else [3]
211+ let array2 = if (if ((maxPercentBound > p31))
212+ then (p31 > minPercentBound)
213+ else false)
214+ then 1 :: array1
215+ else array1
216+ let array3 = if (if ((maxPercentBound > p32))
217+ then (p32 > minPercentBound)
218+ else false)
219+ then 2 :: array2
220+ else array2
221+ if (if ((maxPercentBound > p34))
222+ then (p34 > minPercentBound)
223+ else false)
224+ then 4 :: array3
225+ else array3
226+ }
227+ }
228+ if ((size(check3) >= 3))
229+ then check3
230+ else {
231+ let p4 = prices[4]
232+ if ((0 >= p4))
233+ then [4]
234+ else {
235+ let p40 = ((prices[0] * 100) / p4)
236+ let p41 = ((prices[1] * 100) / p4)
237+ let p42 = ((prices[2] * 100) / p4)
238+ let p43 = ((prices[3] * 100) / p4)
239+ let array1 = if (if ((maxPercentBound > p40))
240+ then (p40 > minPercentBound)
241+ else false)
242+ then [0, 4]
243+ else [4]
244+ let array2 = if (if ((maxPercentBound > p41))
245+ then (p41 > minPercentBound)
246+ else false)
247+ then 1 :: array1
248+ else array1
249+ let array3 = if (if ((maxPercentBound > p42))
250+ then (p42 > minPercentBound)
251+ else false)
252+ then 2 :: array2
253+ else array2
254+ if (if ((maxPercentBound > p43))
255+ then (p43 > minPercentBound)
256+ else false)
257+ then 3 :: array3
258+ else array3
259+ }
260+ }
261+ }
262+
263+
264+func formattingPriceMsg (price,height) = toBytes(((((SIGNPREFIX + "_") + toString(height)) + "_") + toString(price)))
265+
266+
267+@Callable(i)
268+func callEmergencyShutdown (reason) = {
269+ let AutoEmergencyOracleAddress = "3P7ihFVxBNbHK237TNdPxT1xHEu8pHexXTr"
270+ let callerAddress = toString(i.caller)
271+ if ((AutoEmergencyOracleAddress != callerAddress))
272+ then throw("caller must be one an emergency oracle")
273+ else WriteSet([DataEntry("is_blocked", true), DataEntry("is_blocked_caller", callerAddress), DataEntry("is_blocked_reason", reason)])
274+ }
275+
276+
277+
278+@Callable(i)
279+func finalizeCurrentPrice (price1,sign1,price2,sign2,price3,sign3,price4,sign4,price5,sign5) = if (isBlocked)
280+ then throw("contract is blocked by EMERGENCY SHUTDOWN actions untill reactivation by emergency oracles")
281+ else if (( match getInteger(this, ("price_" + toString(height))) {
282+ case a: Int =>
283+ a
284+ case _ =>
285+ 0
286+ } != 0))
287+ then throw("wait next block")
288+ else if ((pubKeyOraclesList[(height % 5)] != toBase58String(i.callerPublicKey)))
289+ then throw(((("Out of turn finalization: " + toString(height)) + " block should be finalize by ") + pubKeyOraclesList[(height % 5)]))
290+ else {
291+ let prices = [if (sigVerify(formattingPriceMsg(price1, height), sign1, fromBase58String(pubKeyOraclesList[0])))
292+ then price1
293+ else 0, if (sigVerify(formattingPriceMsg(price2, height), sign2, fromBase58String(pubKeyOraclesList[1])))
294+ then price2
295+ else 0, if (sigVerify(formattingPriceMsg(price3, height), sign3, fromBase58String(pubKeyOraclesList[2])))
296+ then price3
297+ else 0, if (sigVerify(formattingPriceMsg(price4, height), sign4, fromBase58String(pubKeyOraclesList[3])))
298+ then price4
299+ else 0, if (sigVerify(formattingPriceMsg(price5, height), sign5, fromBase58String(pubKeyOraclesList[4])))
300+ then price5
301+ else 0]
302+ let pricesInRange = findPricesInRange(prices)
303+ let priceProvidingCount = size(pricesInRange)
304+ if ((3 > priceProvidingCount))
305+ then throw(((((((((((((((((((((("Could not finalize price because of big variation: height=" + toString(height)) + "
306+") + pubKeyOraclesList[0]) + "=") + toString(prices[0])) + "
307+") + pubKeyOraclesList[1]) + "=") + toString(prices[1])) + "
308+") + pubKeyOraclesList[2]) + "=") + toString(prices[2])) + "
309+") + pubKeyOraclesList[3]) + "=") + toString(prices[3])) + "
310+") + pubKeyOraclesList[4]) + "=") + toString(prices[4])))
311+ else {
312+ let sum1 = ((prices[pricesInRange[0]] + prices[pricesInRange[1]]) + prices[pricesInRange[2]])
313+ let sum2 = if ((priceProvidingCount >= 4))
314+ then (sum1 + prices[pricesInRange[3]])
315+ else sum1
316+ let priceSum = if ((priceProvidingCount >= 5))
317+ then (sum2 + prices[pricesInRange[4]])
318+ else sum2
319+ if ((priceProvidingCount >= 6))
320+ then throw("Invalid pricesInRange creation")
321+ else {
322+ let newPrice = (priceSum / priceProvidingCount)
323+ if (if ((newPrice >= (price + ((price * percentPriceOffset) / 100))))
324+ then true
325+ else ((price - ((price * percentPriceOffset) / 100)) >= newPrice))
326+ then WriteSet([DataEntry("is_blocked", true), DataEntry((("black_swarm_price" + "_") + toString(height)), newPrice)])
327+ else {
328+ let newPriceIndex = (priceIndex + 1)
329+ WriteSet([DataEntry("price", newPrice), DataEntry(("price_" + toString(height)), newPrice), DataEntry("price_index", newPriceIndex), DataEntry(("price_index_" + toString(newPriceIndex)), height)])
330+ }
331+ }
332+ }
333+ }
334+
335+

github/deemru/w8io/0e76f2f 
44.19 ms