tx · CkVAujADqGz4BkYUgZygj3RkAJtZihhvjPPc4UZtZsLF

3MsRuV3XVXXGBp5X3UUZqg7ez7jDDJz7weW:  -0.05000000 Waves

2020.07.30 14:01 [1110233] smart account 3MsRuV3XVXXGBp5X3UUZqg7ez7jDDJz7weW > SELF 0.00000000 Waves

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

github/deemru/w8io/3ef1775 
45.39 ms