tx · JAFHpS7PT2HF36Q24XFSWM9GfKvd2sSZNXsiJsnmbKxn

3PQgkL6o7iZEHX3kp1Uf7afvHTiJii9cdq9:  -0.10000000 Waves

2021.02.25 15:35 [2477493] smart account 3PQgkL6o7iZEHX3kp1Uf7afvHTiJii9cdq9 > SELF 0.00000000 Waves

{ "type": 13, "id": "JAFHpS7PT2HF36Q24XFSWM9GfKvd2sSZNXsiJsnmbKxn", "fee": 10000000, "feeAssetId": null, "timestamp": 1614256541681, "version": 1, "sender": "3PQgkL6o7iZEHX3kp1Uf7afvHTiJii9cdq9", "senderPublicKey": "FHdvySkNLf3fkEe1YMPMUjZmtgWvyD9G1zp4zEFoiECr", "proofs": [ "5PdsdE6cxe7j2SKLRzvGbRyFp65mcrj6i3tCd33QBos2Un7KW2xWHTtCqhS1Hd5ep76fH6Su3w7YnqsjNZxsJtpA" ], "script": "base64:AAIDAAAAAAAAAA8IARIECgICCBIFCgMICAEAAAAfAAAAAAVXQVZFUwIAAAAFV0FWRVMAAAAAB0ludFR5cGUAAAAAAAAAAAAAAAAAClN0cmluZ1R5cGUAAAAAAAAAAAEAAAAACUJ5dGVzVHlwZQAAAAAAAAAAAgEAAAAOZ2V0TnVtYmVyQnlLZXkAAAABAAAAA2tleQQAAAAHJG1hdGNoMAkABBoAAAACBQAAAAR0aGlzBQAAAANrZXkDCQAAAQAAAAIFAAAAByRtYXRjaDACAAAAA0ludAQAAAABdgUAAAAHJG1hdGNoMAUAAAABdgAAAAAAAAAAAAEAAAANZ2V0Qnl0ZXNCeUtleQAAAAEAAAADa2V5BAAAAAckbWF0Y2gwCQAEHAAAAAIFAAAABHRoaXMFAAAAA2tleQMJAAABAAAAAgUAAAAHJG1hdGNoMAIAAAAKQnl0ZVZlY3RvcgQAAAABdgUAAAAHJG1hdGNoMAUAAAABdgEAAAAD0AAAAQAAAA5nZXRTdHJpbmdCeUtleQAAAAEAAAADa2V5BAAAAAckbWF0Y2gwCQAEHQAAAAIFAAAABHRoaXMFAAAAA2tleQMJAAABAAAAAgUAAAAHJG1hdGNoMAIAAAAGU3RyaW5nBAAAAAF2BQAAAAckbWF0Y2gwBQAAAAF2AgAAAAABAAAAGGdldFN0cmluZ0J5QWRkcmVzc0FuZEtleQAAAAIAAAAHYWRkcmVzcwAAAANrZXkEAAAAByRtYXRjaDAJAAQdAAAAAgUAAAAHYWRkcmVzcwUAAAADa2V5AwkAAAEAAAACBQAAAAckbWF0Y2gwAgAAAAZTdHJpbmcEAAAAAXYFAAAAByRtYXRjaDAFAAAAAXYCAAAAAAEAAAAYZ2V0TnVtYmVyQnlBZGRyZXNzQW5kS2V5AAAAAgAAAAdhZGRyZXNzAAAAA2tleQQAAAAHJG1hdGNoMAkABBoAAAACBQAAAAdhZGRyZXNzBQAAAANrZXkDCQAAAQAAAAIFAAAAByRtYXRjaDACAAAAA0ludAQAAAABdgUAAAAHJG1hdGNoMAUAAAABdgAAAAAAAAAAAAAAAAAKT3JhY2xlc0tleQIAAAAHb3JhY2xlcwAAAAAUU3Vic2NyaWJlckFkZHJlc3NLZXkCAAAAEnN1YnNjcmliZXJfYWRkcmVzcwAAAAAHVHlwZUtleQIAAAAEdHlwZQAAAAASR3Jhdml0eUNvbnRyYWN0S2V5AgAAABBncmF2aXR5X2NvbnRyYWN0AAAAABFCZnRDb2VmZmljaWVudEtleQIAAAAPYmZ0X2NvZWZmaWNpZW50AAAAAA1MYXN0SGVpZ2h0S2V5AgAAAAtsYXN0X2hlaWdodAAAAAAMTGFzdFJvdW5kS2V5AgAAAApsYXN0X3JvdW5kAAAAAA5MYXN0UHVsc2VJZEtleQIAAAANbGFzdF9wdWxzZV9pZAEAAAAOZ2V0SGFzaERhdGFLZXkAAAABAAAAB3B1bHNlSWQJAAEsAAAAAgIAAAAKZGF0YV9oYXNoXwkAAaQAAAABBQAAAAdwdWxzZUlkAQAAABNnZXRIZWlnaHRCeVB1bHNlS2V5AAAAAQAAAAdwdWxzZUlkCQABLAAAAAICAAAAB2hlaWdodF8JAAGkAAAAAQUAAAAHcHVsc2VJZAEAAAAKQ29uc3Vsc0tleQAAAAEAAAAFcm91bmQJAAEsAAAAAgIAAAAIY29uc3Vsc18JAAGkAAAAAQUAAAAFcm91bmQAAAAAB29yYWNsZXMJAAS1AAAAAgkBAAAADmdldFN0cmluZ0J5S2V5AAAAAQUAAAAKT3JhY2xlc0tleQIAAAABLAAAAAAOYmZ0Q29lZmZpY2llbnQJAQAAAA5nZXROdW1iZXJCeUtleQAAAAEFAAAAEUJmdENvZWZmaWNpZW50S2V5AAAAAA9ncmFjaXR5Q29udHJhY3QJAQAAABxAZXh0clVzZXIoYWRkcmVzc0Zyb21TdHJpbmcpAAAAAQkBAAAADmdldFN0cmluZ0J5S2V5AAAAAQUAAAASR3Jhdml0eUNvbnRyYWN0S2V5AAAAABBsYXN0R3Jhdml0eVJvdW5kCQEAAAAYZ2V0TnVtYmVyQnlBZGRyZXNzQW5kS2V5AAAAAgUAAAAPZ3JhY2l0eUNvbnRyYWN0BQAAAAxMYXN0Um91bmRLZXkAAAAAB2NvbnN1bHMJAAS1AAAAAgkBAAAAGGdldFN0cmluZ0J5QWRkcmVzc0FuZEtleQAAAAIFAAAAD2dyYWNpdHlDb250cmFjdAkBAAAACkNvbnN1bHNLZXkAAAABBQAAABBsYXN0R3Jhdml0eVJvdW5kAgAAAAEsAAAAABFzdWJzY3JpYmVyQWRkcmVzcwkBAAAADmdl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", "chainId": 87, "height": 2477493, "applicationStatus": "succeeded", "spentComplexity": 0 } View: original | compacted Prev: none Next: 651KJiuiR59EvyetivG9gv1bQjxcuQfKex23APNwDyYe Full:
OldNewDifferences
1-# no script
1+{-# STDLIB_VERSION 3 #-}
2+{-# SCRIPT_TYPE ACCOUNT #-}
3+{-# CONTENT_TYPE DAPP #-}
4+let WAVES = "WAVES"
5+
6+let IntType = 0
7+
8+let StringType = 1
9+
10+let BytesType = 2
11+
12+func getNumberByKey (key) = match getInteger(this, key) {
13+ case v: Int =>
14+ v
15+ case _ =>
16+ 0
17+}
18+
19+
20+func getBytesByKey (key) = match getBinary(this, key) {
21+ case v: ByteVector =>
22+ v
23+ case _ =>
24+ base58'2CsAf'
25+}
26+
27+
28+func getStringByKey (key) = match getString(this, key) {
29+ case v: String =>
30+ v
31+ case _ =>
32+ ""
33+}
34+
35+
36+func getStringByAddressAndKey (address,key) = match getString(address, key) {
37+ case v: String =>
38+ v
39+ case _ =>
40+ ""
41+}
42+
43+
44+func getNumberByAddressAndKey (address,key) = match getInteger(address, key) {
45+ case v: Int =>
46+ v
47+ case _ =>
48+ 0
49+}
50+
51+
52+let OraclesKey = "oracles"
53+
54+let SubscriberAddressKey = "subscriber_address"
55+
56+let TypeKey = "type"
57+
58+let GravityContractKey = "gravity_contract"
59+
60+let BftCoefficientKey = "bft_coefficient"
61+
62+let LastHeightKey = "last_height"
63+
64+let LastRoundKey = "last_round"
65+
66+let LastPulseIdKey = "last_pulse_id"
67+
68+func getHashDataKey (pulseId) = ("data_hash_" + toString(pulseId))
69+
70+
71+func getHeightByPulseKey (pulseId) = ("height_" + toString(pulseId))
72+
73+
74+func ConsulsKey (round) = ("consuls_" + toString(round))
75+
76+
77+let oracles = split(getStringByKey(OraclesKey), ",")
78+
79+let bftCoefficient = getNumberByKey(BftCoefficientKey)
80+
81+let gracityContract = addressFromStringValue(getStringByKey(GravityContractKey))
82+
83+let lastGravityRound = getNumberByAddressAndKey(gracityContract, LastRoundKey)
84+
85+let consuls = split(getStringByAddressAndKey(gracityContract, ConsulsKey(lastGravityRound)), ",")
86+
87+let subscriberAddress = getStringByKey(SubscriberAddressKey)
88+
89+let type = getNumberByKey(TypeKey)
90+
91+let lastPulseId = getNumberByKey(LastPulseIdKey)
92+
93+func getHashData (pulseId) = getBytesByKey(getHashDataKey(pulseId))
94+
95+
96+func getHeightByPulse (pulseId) = getNumberByKey(getHeightByPulseKey(pulseId))
97+
98+
99+func validateSign (hash,sign,oracle) = if ((sign != "nil"))
100+ then if (sigVerify(hash, fromBase58String(sign), fromBase58String(oracle)))
101+ then 1
102+ else 0
103+ else 0
104+
105+
106+@Callable(i)
107+func sendHashValue (hash,signs) = {
108+ let signList = split(signs, ",")
109+ let count = ((((validateSign(hash, signList[0], oracles[0]) + validateSign(hash, signList[1], oracles[1])) + validateSign(hash, signList[2], oracles[2])) + validateSign(hash, signList[3], oracles[3])) + validateSign(hash, signList[4], oracles[4]))
110+ if ((bftCoefficient > count))
111+ then throw("invalid bft count")
112+ else if ((getBytesByKey(toString(height)) != base58'2CsAf'))
113+ then throw("data is exist")
114+ else {
115+ let currentPulseId = (lastPulseId + 1)
116+ WriteSet([DataEntry(getHashDataKey(currentPulseId), hash), DataEntry(getHeightByPulseKey(currentPulseId), height), DataEntry(LastHeightKey, height), DataEntry(LastPulseIdKey, currentPulseId)])
117+ }
118+ }
119+
120+
121+
122+@Callable(i)
123+func updateOracles (newSortedOracles,stringSigns,round) = {
124+ let signs = split(stringSigns, ",")
125+ let count = ((((validateSign(toBytes(newSortedOracles), signs[0], consuls[0]) + validateSign(toBytes(newSortedOracles), signs[1], consuls[1])) + validateSign(toBytes(newSortedOracles), signs[2], consuls[2])) + validateSign(toBytes(newSortedOracles), signs[3], consuls[3])) + validateSign(toBytes(newSortedOracles), signs[4], consuls[4]))
126+ if ((count > bftCoefficient))
127+ then throw("invalid bft count")
128+ else WriteSet([DataEntry(OraclesKey, newSortedOracles), DataEntry(((LastRoundKey + "_") + toString(round)), round)])
129+ }
130+
131+
132+@Verifier(i)
133+func sendValueToSub () = match i {
134+ case invokeTx: InvokeScriptTransaction =>
135+ let vBytes = if ((type == IntType))
136+ then {
137+ let v = match invokeTx.args[0] {
138+ case v: Int =>
139+ v
140+ case _ =>
141+ throw("invalid value type")
142+ }
143+ toBytes(v)
144+ }
145+ else if ((type == StringType))
146+ then {
147+ let v = match invokeTx.args[0] {
148+ case v: String =>
149+ v
150+ case _ =>
151+ throw("invalid value type")
152+ }
153+ toBytes(v)
154+ }
155+ else if ((type == BytesType))
156+ then {
157+ let v = match invokeTx.args[0] {
158+ case v: ByteVector =>
159+ v
160+ case _ =>
161+ throw("invalid value type")
162+ }
163+ v
164+ }
165+ else throw("invalid value type")
166+ let vPulseId = match invokeTx.args[1] {
167+ case vPulseId: Int =>
168+ vPulseId
169+ case _ =>
170+ throw("invalid height type")
171+ }
172+ if ((invokeTx.function != "attachData"))
173+ then throw("invalid function name")
174+ else if ((size(invokeTx.args) != 2))
175+ then throw("invalid args size")
176+ else if ((invokeTx.dApp != addressFromStringValue(subscriberAddress)))
177+ then throw("invalid dapp address")
178+ else if ((getHeightByPulse(vPulseId) != height))
179+ then throw("invalid height")
180+ else if ((getHashData(vPulseId) == base58'2CsAf'))
181+ then throw("invalid pulse id")
182+ else if ((keccak256(vBytes) != getHashData(vPulseId)))
183+ then throw("invalid keccak256(value)")
184+ else true
185+ case _ =>
186+ sigVerify(i.bodyBytes, i.proofs[0], i.senderPublicKey)
187+}
188+

github/deemru/w8io/6500d08 
26.20 ms