tx · 9F75o1mNGKg3nheTNePd6ZwWMXW1eEuDv56D1UoM3zTh

3P849j17rDKEEABUq3cqdxUzwoAbcf7QJ2x:  -0.01400000 Waves

2021.03.02 13:57 [2484609] smart account 3P849j17rDKEEABUq3cqdxUzwoAbcf7QJ2x > SELF 0.00000000 Waves

{ "type": 13, "id": "9F75o1mNGKg3nheTNePd6ZwWMXW1eEuDv56D1UoM3zTh", "fee": 1400000, "feeAssetId": null, "timestamp": 1614682665824, "version": 2, "chainId": 87, "sender": "3P849j17rDKEEABUq3cqdxUzwoAbcf7QJ2x", "senderPublicKey": "Af7xxtNoSsgTtj4kCVUEwkbDDADrTVorfZmgwEnhBueP", "proofs": [ "5s2PL7kmHah4ex7PVwDGDGetNhDpzdmKYVb3AifzVqmpA63XULw1jt1ZFccNbT1ynNhF8Zz5PdcokRU6Gg1FegvZ" ], "script": "base64:AAIDAAAAAAAAAA8IARIECgICCBIFCgMICAEAAAAfAAAAAAVXQVZFUwIAAAAFV0FWRVMAAAAAB0ludFR5cGUAAAAAAAAAAAAAAAAAClN0cmluZ1R5cGUAAAAAAAAAAAEAAAAACUJ5dGVzVHlwZQAAAAAAAAAAAgEAAAAOZ2V0TnVtYmVyQnlLZXkAAAABAAAAA2tleQQAAAAHJG1hdGNoMAkABBoAAAACBQAAAAR0aGlzBQAAAANrZXkDCQAAAQAAAAIFAAAAByRtYXRjaDACAAAAA0ludAQAAAABdgUAAAAHJG1hdGNoMAUAAAABdgAAAAAAAAAAAAEAAAANZ2V0Qnl0ZXNCeUtleQAAAAEAAAADa2V5BAAAAAckbWF0Y2gwCQAEHAAAAAIFAAAABHRoaXMFAAAAA2tleQMJAAABAAAAAgUAAAAHJG1hdGNoMAIAAAAKQnl0ZVZlY3RvcgQAAAABdgUAAAAHJG1hdGNoMAUAAAABdgEAAAAD0AAAAQAAAA5nZXRTdHJpbmdCeUtleQAAAAEAAAADa2V5BAAAAAckbWF0Y2gwCQAEHQAAAAIFAAAABHRoaXMFAAAAA2tleQMJAAABAAAAAgUAAAAHJG1hdGNoMAIAAAAGU3RyaW5nBAAAAAF2BQAAAAckbWF0Y2gwBQAAAAF2AgAAAAABAAAAGGdldFN0cmluZ0J5QWRkcmVzc0FuZEtleQAAAAIAAAAHYWRkcmVzcwAAAANrZXkEAAAAByRtYXRjaDAJAAQdAAAAAgUAAAAHYWRkcmVzcwUAAAADa2V5AwkAAAEAAAACBQAAAAckbWF0Y2gwAgAAAAZTdHJpbmcEAAAAAXYFAAAAByRtYXRjaDAFAAAAAXYCAAAAAAEAAAAYZ2V0TnVtYmVyQnlBZGRyZXNzQW5kS2V5AAAAAgAAAAdhZGRyZXNzAAAAA2tleQQAAAAHJG1hdGNoMAkABBoAAAACBQAAAAdhZGRyZXNzBQAAAANrZXkDCQAAAQAAAAIFAAAAByRtYXRjaDACAAAAA0ludAQAAAABdgUAAAAHJG1hdGNoMAUAAAABdgAAAAAAAAAAAAAAAAAKT3JhY2xlc0tleQIAAAAHb3JhY2xlcwAAAAAUU3Vic2NyaWJlckFkZHJlc3NLZXkCAAAAEnN1YnNjcmliZXJfYWRkcmVzcwAAAAAHVHlwZUtleQIAAAAEdHlwZQAAAAASR3Jhdml0eUNvbnRyYWN0S2V5AgAAABBncmF2aXR5X2NvbnRyYWN0AAAAABFCZnRDb2VmZmljaWVudEtleQIAAAAPYmZ0X2NvZWZmaWNpZW50AAAAAA1MYXN0SGVpZ2h0S2V5AgAAAAtsYXN0X2hlaWdodAAAAAAMTGFzdFJvdW5kS2V5AgAAAApsYXN0X3JvdW5kAAAAAA5MYXN0UHVsc2VJZEtleQIAAAANbGFzdF9wdWxzZV9pZAEAAAAOZ2V0SGFzaERhdGFLZXkAAAABAAAAB3B1bHNlSWQJAAEsAAAAAgIAAAAKZGF0YV9oYXNoXwkAAaQAAAABBQAAAAdwdWxzZUlkAQAAABNnZXRIZWlnaHRCeVB1bHNlS2V5AAAAAQAAAAdwdWxzZUlkCQABLAAAAAICAAAAB2hlaWdodF8JAAGkAAAAAQUAAAAHcHVsc2VJZAEAAAAKQ29uc3Vsc0tleQAAAAEAAAAFcm91bmQJAAEsAAAAAgIAAAAIY29uc3Vsc18JAAGkAAAAAQUAAAAFcm91bmQAAAAAB29yYWNsZXMJAAS1AAAAAgkBAAAADmdldFN0cmluZ0J5S2V5AAAAAQUAAAAKT3JhY2xlc0tleQIAAAABLAAAAAAOYmZ0Q29lZmZpY2llbnQJAQAAAA5nZXROdW1iZXJCeUtleQAAAAEFAAAAEUJmdENvZWZmaWNpZW50S2V5AAAAAA9ncmF2aXR5Q29udHJhY3QJAQAAABxAZXh0clVzZXIoYWRkcmVzc0Zyb21TdHJpbmcpAAAAAQkBAAAADmdldFN0cmluZ0J5S2V5AAAAAQUAAAASR3Jhdml0eUNvbnRyYWN0S2V5AAAAABBsYXN0R3Jhdml0eVJvdW5kCQEAAAAYZ2V0TnVtYmVyQnlBZGRyZXNzQW5kS2V5AAAAAgUAAAAPZ3Jhdml0eUNvbnRyYWN0BQAAAAxMYXN0Um91bmRLZXkAAAAAB2NvbnN1bHMJAAS1AAAAAgkBAAAAGGdldFN0cmluZ0J5QWRkcmVzc0FuZEtleQAAAAIFAAAAD2dyYXZpdHlDb250cmFjdAkBAAAACkNvbnN1bHNLZXkAAAABBQAAABBsYXN0R3Jhdml0eVJvdW5kAgAAAAEsAAAAABFzdWJzY3JpYmVyQWRkcmVzcwkBAAAADmdl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", "height": 2484609, "applicationStatus": "succeeded", "spentComplexity": 0 } View: original | compacted Prev: 27Kr2nnPdEkBCPNy4EYqDpL9BNJJhapPvdELPgh47n3G Next: none Diff:
OldNewDifferences
7878
7979 let bftCoefficient = getNumberByKey(BftCoefficientKey)
8080
81-let gracityContract = addressFromStringValue(getStringByKey(GravityContractKey))
81+let gravityContract = addressFromStringValue(getStringByKey(GravityContractKey))
8282
83-let lastGravityRound = getNumberByAddressAndKey(gracityContract, LastRoundKey)
83+let lastGravityRound = getNumberByAddressAndKey(gravityContract, LastRoundKey)
8484
85-let consuls = split(getStringByAddressAndKey(gracityContract, ConsulsKey(lastGravityRound)), ",")
85+let consuls = split(getStringByAddressAndKey(gravityContract, ConsulsKey(lastGravityRound)), ",")
8686
8787 let subscriberAddress = getStringByKey(SubscriberAddressKey)
8888
109109 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]))
110110 if ((bftCoefficient > count))
111111 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- }
112+ else {
113+ let currentPulseId = (lastPulseId + 1)
114+ WriteSet([DataEntry(getHashDataKey(currentPulseId), hash), DataEntry(getHeightByPulseKey(currentPulseId), height), DataEntry(LastHeightKey, height), DataEntry(LastPulseIdKey, currentPulseId)])
115+ }
118116 }
119117
120118
123121 func updateOracles (newSortedOracles,stringSigns,round) = {
124122 let signs = split(stringSigns, ",")
125123 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))
124+ if ((bftCoefficient > count))
127125 then throw("invalid bft count")
128126 else WriteSet([DataEntry(OraclesKey, newSortedOracles), DataEntry(((LastRoundKey + "_") + toString(round)), round)])
129127 }
Full:
OldNewDifferences
11 {-# STDLIB_VERSION 3 #-}
22 {-# SCRIPT_TYPE ACCOUNT #-}
33 {-# CONTENT_TYPE DAPP #-}
44 let WAVES = "WAVES"
55
66 let IntType = 0
77
88 let StringType = 1
99
1010 let BytesType = 2
1111
1212 func getNumberByKey (key) = match getInteger(this, key) {
1313 case v: Int =>
1414 v
1515 case _ =>
1616 0
1717 }
1818
1919
2020 func getBytesByKey (key) = match getBinary(this, key) {
2121 case v: ByteVector =>
2222 v
2323 case _ =>
2424 base58'2CsAf'
2525 }
2626
2727
2828 func getStringByKey (key) = match getString(this, key) {
2929 case v: String =>
3030 v
3131 case _ =>
3232 ""
3333 }
3434
3535
3636 func getStringByAddressAndKey (address,key) = match getString(address, key) {
3737 case v: String =>
3838 v
3939 case _ =>
4040 ""
4141 }
4242
4343
4444 func getNumberByAddressAndKey (address,key) = match getInteger(address, key) {
4545 case v: Int =>
4646 v
4747 case _ =>
4848 0
4949 }
5050
5151
5252 let OraclesKey = "oracles"
5353
5454 let SubscriberAddressKey = "subscriber_address"
5555
5656 let TypeKey = "type"
5757
5858 let GravityContractKey = "gravity_contract"
5959
6060 let BftCoefficientKey = "bft_coefficient"
6161
6262 let LastHeightKey = "last_height"
6363
6464 let LastRoundKey = "last_round"
6565
6666 let LastPulseIdKey = "last_pulse_id"
6767
6868 func getHashDataKey (pulseId) = ("data_hash_" + toString(pulseId))
6969
7070
7171 func getHeightByPulseKey (pulseId) = ("height_" + toString(pulseId))
7272
7373
7474 func ConsulsKey (round) = ("consuls_" + toString(round))
7575
7676
7777 let oracles = split(getStringByKey(OraclesKey), ",")
7878
7979 let bftCoefficient = getNumberByKey(BftCoefficientKey)
8080
81-let gracityContract = addressFromStringValue(getStringByKey(GravityContractKey))
81+let gravityContract = addressFromStringValue(getStringByKey(GravityContractKey))
8282
83-let lastGravityRound = getNumberByAddressAndKey(gracityContract, LastRoundKey)
83+let lastGravityRound = getNumberByAddressAndKey(gravityContract, LastRoundKey)
8484
85-let consuls = split(getStringByAddressAndKey(gracityContract, ConsulsKey(lastGravityRound)), ",")
85+let consuls = split(getStringByAddressAndKey(gravityContract, ConsulsKey(lastGravityRound)), ",")
8686
8787 let subscriberAddress = getStringByKey(SubscriberAddressKey)
8888
8989 let type = getNumberByKey(TypeKey)
9090
9191 let lastPulseId = getNumberByKey(LastPulseIdKey)
9292
9393 func getHashData (pulseId) = getBytesByKey(getHashDataKey(pulseId))
9494
9595
9696 func getHeightByPulse (pulseId) = getNumberByKey(getHeightByPulseKey(pulseId))
9797
9898
9999 func validateSign (hash,sign,oracle) = if ((sign != "nil"))
100100 then if (sigVerify(hash, fromBase58String(sign), fromBase58String(oracle)))
101101 then 1
102102 else 0
103103 else 0
104104
105105
106106 @Callable(i)
107107 func sendHashValue (hash,signs) = {
108108 let signList = split(signs, ",")
109109 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]))
110110 if ((bftCoefficient > count))
111111 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- }
112+ else {
113+ let currentPulseId = (lastPulseId + 1)
114+ WriteSet([DataEntry(getHashDataKey(currentPulseId), hash), DataEntry(getHeightByPulseKey(currentPulseId), height), DataEntry(LastHeightKey, height), DataEntry(LastPulseIdKey, currentPulseId)])
115+ }
118116 }
119117
120118
121119
122120 @Callable(i)
123121 func updateOracles (newSortedOracles,stringSigns,round) = {
124122 let signs = split(stringSigns, ",")
125123 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))
124+ if ((bftCoefficient > count))
127125 then throw("invalid bft count")
128126 else WriteSet([DataEntry(OraclesKey, newSortedOracles), DataEntry(((LastRoundKey + "_") + toString(round)), round)])
129127 }
130128
131129
132130 @Verifier(i)
133131 func sendValueToSub () = match i {
134132 case invokeTx: InvokeScriptTransaction =>
135133 let vBytes = if ((type == IntType))
136134 then {
137135 let v = match invokeTx.args[0] {
138136 case v: Int =>
139137 v
140138 case _ =>
141139 throw("invalid value type")
142140 }
143141 toBytes(v)
144142 }
145143 else if ((type == StringType))
146144 then {
147145 let v = match invokeTx.args[0] {
148146 case v: String =>
149147 v
150148 case _ =>
151149 throw("invalid value type")
152150 }
153151 toBytes(v)
154152 }
155153 else if ((type == BytesType))
156154 then {
157155 let v = match invokeTx.args[0] {
158156 case v: ByteVector =>
159157 v
160158 case _ =>
161159 throw("invalid value type")
162160 }
163161 v
164162 }
165163 else throw("invalid value type")
166164 let vPulseId = match invokeTx.args[1] {
167165 case vPulseId: Int =>
168166 vPulseId
169167 case _ =>
170168 throw("invalid height type")
171169 }
172170 if ((invokeTx.function != "attachData"))
173171 then throw("invalid function name")
174172 else if ((size(invokeTx.args) != 2))
175173 then throw("invalid args size")
176174 else if ((invokeTx.dApp != addressFromStringValue(subscriberAddress)))
177175 then throw("invalid dapp address")
178176 else if ((getHeightByPulse(vPulseId) != height))
179177 then throw("invalid height")
180178 else if ((getHashData(vPulseId) == base58'2CsAf'))
181179 then throw("invalid pulse id")
182180 else if ((keccak256(vBytes) != getHashData(vPulseId)))
183181 then throw("invalid keccak256(value)")
184182 else true
185183 case _ =>
186184 sigVerify(i.bodyBytes, i.proofs[0], i.senderPublicKey)
187185 }
188186

github/deemru/w8io/6500d08 
47.47 ms