tx · 9wd4hnUHUKK1LT98BwajG7h6bBmjpP5KbyXXM4LRpABe

3MqxEHA8W3zrryRv3LanHaX2ynFJ99J7whH:  -0.03200000 Waves

2022.06.22 15:51 [2107629] smart account 3MqxEHA8W3zrryRv3LanHaX2ynFJ99J7whH > SELF 0.00000000 Waves

{ "type": 13, "id": "9wd4hnUHUKK1LT98BwajG7h6bBmjpP5KbyXXM4LRpABe", "fee": 3200000, "feeAssetId": null, "timestamp": 1655902406817, "version": 2, "chainId": 84, "sender": "3MqxEHA8W3zrryRv3LanHaX2ynFJ99J7whH", "senderPublicKey": "7jBb6GLfNutKJTxJcQb6s2qtZoXTor8pJcZHaFKDyDDe", "proofs": [ "2NV3D1PbChdxJzQTk3hhweDeUcJJZCu9kpvA5fcUTEJ3mu4xaDDAz6CjQUvFbT6kFhDaAfUs4mH4dN7aARL1z3oH" ], "script": "base64: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", "height": 2107629, "applicationStatus": "succeeded", "spentComplexity": 0 } View: original | compacted Prev: none Next: none Full:
OldNewDifferences
1-# no script
1+{-# STDLIB_VERSION 5 #-}
2+{-# SCRIPT_TYPE ACCOUNT #-}
3+{-# CONTENT_TYPE DAPP #-}
4+let k_lastDataStr = "k_lastDataStr"
5+
6+let k_lastMinuteId = "k_lastMinuteId"
7+
8+let k_twapDataLastCumulativePrice = "k_twapDataLastCumulativePrice"
9+
10+let k_twapDataLastPrice = "k_twapDataLastPrice"
11+
12+let k_twap = "k_twap"
13+
14+let TWAP_INTERVAL = 15
15+
16+@Callable(i)
17+func computeTwap (ts) = {
18+ let minuteId = ((ts / 1000) / 60)
19+ let startMinuteId = (minuteId - TWAP_INTERVAL)
20+ let listStr = valueOrElse(getString(this, k_lastDataStr), "")
21+ let list = split(listStr, ",")
22+ func filterFn (accum,next) = if ((startMinuteId >= parseIntValue(next)))
23+ then (accum :+ parseIntValue(next))
24+ else accum
25+
26+ let listF = {
27+ let $l = list
28+ let $s = size($l)
29+ let $acc0 = nil
30+ func $f0_1 ($a,$i) = if (($i >= $s))
31+ then $a
32+ else filterFn($a, $l[$i])
33+
34+ func $f0_2 ($a,$i) = if (($i >= $s))
35+ then $a
36+ else throw("List size exceeds 15")
37+
38+ $f0_2($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($acc0, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10), 11), 12), 13), 14), 15)
39+ }
40+ let maxIndex = max(listF)
41+ let lastMinuteId = valueOrElse(getInteger(this, k_lastMinuteId), 0)
42+ let endLastCumulativePrice = valueOrElse(getInteger(this, ((k_twapDataLastCumulativePrice + "_") + toString(lastMinuteId))), 0)
43+ let endLastPrice = valueOrElse(getInteger(this, ((k_twapDataLastPrice + "_") + toString(lastMinuteId))), 0)
44+ let nowCummulativePrice = (endLastCumulativePrice + ((minuteId - lastMinuteId) * endLastPrice))
45+ let startLastCumulativePrice = valueOrElse(getInteger(this, ((k_twapDataLastCumulativePrice + "_") + toString(maxIndex))), 0)
46+ let startLastPrice = valueOrElse(getInteger(this, ((k_twapDataLastPrice + "_") + toString(maxIndex))), 0)
47+ let startCummulativePrice = (startLastCumulativePrice + ((startMinuteId - maxIndex) * startLastPrice))
48+[IntegerEntry(k_twap, ((nowCummulativePrice - startCummulativePrice) / TWAP_INTERVAL))]
49+ }
50+
51+
52+
53+@Callable(i)
54+func appendTwap (ts,price) = {
55+ let minuteId = ((ts / 1000) / 60)
56+ let previousMinuteId = valueOrElse(getInteger(this, k_lastMinuteId), 0)
57+ let lastMinuteId = if ((previousMinuteId == 0))
58+ then minuteId
59+ else previousMinuteId
60+ let listStr = valueOrElse(getString(this, k_lastDataStr), "")
61+ let oldList = split(listStr, ",")
62+ let list = if ((size(oldList) > TWAP_INTERVAL))
63+ then (removeByIndex(oldList, 0) :+ toString(minuteId))
64+ else (oldList :+ toString(minuteId))
65+ let prevCummulativePrice = valueOrElse(getInteger(this, ((k_twapDataLastCumulativePrice + "_") + toString(previousMinuteId))), 0)
66+ let prevPrice = valueOrElse(getInteger(this, ((k_twapDataLastPrice + "_") + toString(previousMinuteId))), price)
67+ let lastCummulativePrice = (prevCummulativePrice + ((minuteId - lastMinuteId) * prevPrice))
68+ func join (accum,val) = ((accum + val) + ",")
69+
70+ let newListStr = {
71+ let $l = list
72+ let $s = size($l)
73+ let $acc0 = ""
74+ func $f0_1 ($a,$i) = if (($i >= $s))
75+ then $a
76+ else join($a, $l[$i])
77+
78+ func $f0_2 ($a,$i) = if (($i >= $s))
79+ then $a
80+ else throw("List size exceeds 15")
81+
82+ $f0_2($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($acc0, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10), 11), 12), 13), 14), 15)
83+ }
84+ let newListStrU = dropRight(newListStr, 1)
85+[IntegerEntry(((k_twapDataLastCumulativePrice + "_") + toString(minuteId)), lastCummulativePrice), IntegerEntry(((k_twapDataLastPrice + "_") + toString(minuteId)), price), IntegerEntry(k_lastMinuteId, minuteId), StringEntry(k_lastDataStr, newListStrU)]
86+ }
87+
88+
89+@Verifier(tx)
90+func verify () = sigVerify(tx.bodyBytes, tx.proofs[0], tx.senderPublicKey)
91+

github/deemru/w8io/873ac7e 
22.40 ms