tx · 7XZ8ScT7GK2q1KYfEJz6QfM23RMF6XWRKUDMx5W5qaB8

3MwUhi5Pdwb4LtwkEeGNDHvErcv7bVGuAGB:  -0.03200000 Waves

2022.06.22 16:23 [2107656] smart account 3MwUhi5Pdwb4LtwkEeGNDHvErcv7bVGuAGB > SELF 0.00000000 Waves

{ "type": 13, "id": "7XZ8ScT7GK2q1KYfEJz6QfM23RMF6XWRKUDMx5W5qaB8", "fee": 3200000, "feeAssetId": null, "timestamp": 1655904241288, "version": 2, "chainId": 84, "sender": "3MwUhi5Pdwb4LtwkEeGNDHvErcv7bVGuAGB", "senderPublicKey": "Eu5nE6Rp6EXKZCBzvwVir4YfFmY6TR9Wt2zhX39GP2GL", "proofs": [ "Ah8riawMCezuwA1rPtt8DreCWUijrpjF9QxBHKpqde5BvkVVQNFG2Zb5jpUgBLrD3xzMSvJY2S5hWjKsfoSkHN6" ], "script": "base64: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", "height": 2107656, "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+ if ((previousMinuteId > minuteId))
58+ then throw("TWAP out-of-order")
59+ else {
60+ let lastMinuteId = if ((previousMinuteId == 0))
61+ then minuteId
62+ else previousMinuteId
63+ let listStr = valueOrElse(getString(this, k_lastDataStr), "")
64+ let oldList = split(listStr, ",")
65+ let list = if ((size(oldList) > TWAP_INTERVAL))
66+ then (removeByIndex(oldList, 0) :+ toString(minuteId))
67+ else (oldList :+ toString(minuteId))
68+ let prevCummulativePrice = valueOrElse(getInteger(this, ((k_twapDataLastCumulativePrice + "_") + toString(previousMinuteId))), 0)
69+ let prevPrice = valueOrElse(getInteger(this, ((k_twapDataLastPrice + "_") + toString(previousMinuteId))), price)
70+ let lastCummulativePrice = (prevCummulativePrice + ((minuteId - lastMinuteId) * prevPrice))
71+ func join (accum,val) = ((accum + val) + ",")
72+
73+ let newListStr = {
74+ let $l = list
75+ let $s = size($l)
76+ let $acc0 = ""
77+ func $f0_1 ($a,$i) = if (($i >= $s))
78+ then $a
79+ else join($a, $l[$i])
80+
81+ func $f0_2 ($a,$i) = if (($i >= $s))
82+ then $a
83+ else throw("List size exceeds 15")
84+
85+ $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)
86+ }
87+ let newListStrU = dropRight(newListStr, 1)
88+[IntegerEntry(((k_twapDataLastCumulativePrice + "_") + toString(minuteId)), lastCummulativePrice), IntegerEntry(((k_twapDataLastPrice + "_") + toString(minuteId)), price), IntegerEntry(k_lastMinuteId, minuteId), StringEntry(k_lastDataStr, newListStrU)]
89+ }
90+ }
91+
92+
93+@Verifier(tx)
94+func verify () = sigVerify(tx.bodyBytes, tx.proofs[0], tx.senderPublicKey)
95+

github/deemru/w8io/873ac7e 
17.17 ms