tx · FJ4Stj6Ubm3XjLi9o2o4Ge2Qg6dYMjvT9HkmSduEruYt

3N4gGXLoQLDL8J6rHho3CK714TWiAw3ahi4:  -0.01400000 Waves

2020.09.10 22:34 [1171650] smart account 3N4gGXLoQLDL8J6rHho3CK714TWiAw3ahi4 > SELF 0.00000000 Waves

{ "type": 13, "id": "FJ4Stj6Ubm3XjLi9o2o4Ge2Qg6dYMjvT9HkmSduEruYt", "fee": 1400000, "feeAssetId": null, "timestamp": 1599766535089, "version": 1, "sender": "3N4gGXLoQLDL8J6rHho3CK714TWiAw3ahi4", "senderPublicKey": "2G2SB6hLj6PxUgshtzMt5QLV3XzLbQNhvXk5f6QTkTZy", "proofs": [ "4DaV5Ur5wZHR3iTFADiPg3fqSxxvv9wo7qpyoEBGgNXBgQA66wb7w3F5gFXUDwZxQYDB4xdEEcQL6p8jKFFAsfqh" ], "script": "base64:AAIDAAAAAAAAAA8IARIECgICCBIFCgMICAEAAAAfAAAAAAVXQVZFUwIAAAAFV0FWRVMAAAAAB0ludFR5cGUAAAAAAAAAAAAAAAAAClN0cmluZ1R5cGUAAAAAAAAAAAEAAAAACUJ5dGVzVHlwZQAAAAAAAAAAAgEAAAAOZ2V0TnVtYmVyQnlLZXkAAAABAAAAA2tleQQAAAAHJG1hdGNoMAkABBoAAAACBQAAAAR0aGlzBQAAAANrZXkDCQAAAQAAAAIFAAAAByRtYXRjaDACAAAAA0ludAQAAAABdgUAAAAHJG1hdGNoMAUAAAABdgAAAAAAAAAAAAEAAAANZ2V0Qnl0ZXNCeUtleQAAAAEAAAADa2V5BAAAAAckbWF0Y2gwCQAEHAAAAAIFAAAABHRoaXMFAAAAA2tleQMJAAABAAAAAgUAAAAHJG1hdGNoMAIAAAAKQnl0ZVZlY3RvcgQAAAABdgUAAAAHJG1hdGNoMAUAAAABdgEAAAAD0AAAAQAAAA5nZXRTdHJpbmdCeUtleQAAAAEAAAADa2V5BAAAAAckbWF0Y2gwCQAEHQAAAAIFAAAABHRoaXMFAAAAA2tleQMJAAABAAAAAgUAAAAHJG1hdGNoMAIAAAAGU3RyaW5nBAAAAAF2BQAAAAckbWF0Y2gwBQAAAAF2AgAAAAABAAAAGGdldFN0cmluZ0J5QWRkcmVzc0FuZEtleQAAAAIAAAAHYWRkcmVzcwAAAANrZXkEAAAAByRtYXRjaDAJAAQdAAAAAgUAAAAHYWRkcmVzcwUAAAADa2V5AwkAAAEAAAACBQAAAAckbWF0Y2gwAgAAAAZTdHJpbmcEAAAAAXYFAAAAByRtYXRjaDAFAAAAAXYCAAAAAAEAAAAYZ2V0TnVtYmVyQnlBZGRyZXNzQW5kS2V5AAAAAgAAAAdhZGRyZXNzAAAAA2tleQQAAAAHJG1hdGNoMAkABBoAAAACBQAAAAdhZGRyZXNzBQAAAANrZXkDCQAAAQAAAAIFAAAAByRtYXRjaDACAAAAA0ludAQAAAABdgUAAAAHJG1hdGNoMAUAAAABdgAAAAAAAAAAAAAAAAAKT3JhY2xlc0tleQIAAAAHb3JhY2xlcwAAAAAUU3Vic2NyaWJlckFkZHJlc3NLZXkCAAAAEnN1YnNjcmliZXJfYWRkcmVzcwAAAAAHVHlwZUtleQIAAAAEdHlwZQAAAAASR3Jhdml0eUNvbnRyYWN0S2V5AgAAABBncmF2aXR5X2NvbnRyYWN0AAAAABFCZnRDb2VmZmljaWVudEtleQIAAAAPYmZ0X2NvZWZmaWNpZW50AAAAAA1MYXN0SGVpZ2h0S2V5AgAAAAtsYXN0X2hlaWdodAAAAAAMTGFzdFJvdW5kS2V5AgAAAApsYXN0X3JvdW5kAAAAAA5MYXN0UHVsc2VJZEtleQIAAAANbGFzdF9wdWxzZV9pZAEAAAAOZ2V0SGFzaERhdGFLZXkAAAABAAAAB3B1bHNlSWQJAAEsAAAAAgIAAAAKZGF0YV9oYXNoXwkAAaQAAAABBQAAAAdwdWxzZUlkAQAAABNnZXRIZWlnaHRCeVB1bHNlS2V5AAAAAQAAAAdwdWxzZUlkCQABLAAAAAICAAAAB2hlaWdodF8JAAGkAAAAAQUAAAAHcHVsc2VJZAEAAAAKQ29uc3Vsc0tleQAAAAEAAAAFcm91bmQJAAEsAAAAAgIAAAAIY29uc3Vsc18JAAGkAAAAAQUAAAAFcm91bmQAAAAAB29yYWNsZXMJAAS1AAAAAgkBAAAADmdldFN0cmluZ0J5S2V5AAAAAQUAAAAKT3JhY2xlc0tleQIAAAABLAAAAAAOYmZ0Q29lZmZpY2llbnQJAQAAAA5nZXROdW1iZXJCeUtleQAAAAEFAAAAEUJmdENvZWZmaWNpZW50S2V5AAAAAA9ncmFjaXR5Q29udHJhY3QJAQAAABxAZXh0clVzZXIoYWRkcmVzc0Zyb21TdHJpbmcpAAAAAQkBAAAADmdldFN0cmluZ0J5S2V5AAAAAQUAAAASR3Jhdml0eUNvbnRyYWN0S2V5AAAAABBsYXN0R3Jhdml0eVJvdW5kCQEAAAAYZ2V0TnVtYmVyQnlBZGRyZXNzQW5kS2V5AAAAAgUAAAAPZ3JhY2l0eUNvbnRyYWN0BQAAAAxMYXN0Um91bmRLZXkAAAAAB2NvbnN1bHMJAAS1AAAAAgkBAAAAGGdldFN0cmluZ0J5QWRkcmVzc0FuZEtleQAAAAIFAAAAD2dyYWNpdHlDb250cmFjdAkBAAAACkNvbnN1bHNLZXkAAAABBQAAABBsYXN0R3Jhdml0eVJvdW5kAgAAAAEsAAAAABFzdWJzY3JpYmVyQWRkcmVzcwkBAAAADmdl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", "chainId": 84, "height": 1171650, "applicationStatus": "succeeded", "spentComplexity": 0 } View: original | compacted Prev: DReK56wQPwCXxJgaiy7bB9jPUL5R5YHYZP4QDAQK1eFo Next: FwkgAqTcGuJuEiLXG2r9rG3zV8cDryidaFZLHxxp9Ux7 Diff:
OldNewDifferences
4141 }
4242
4343
44+func getNumberByAddressAndKey (address,key) = match getInteger(address, key) {
45+ case v: Int =>
46+ v
47+ case _ =>
48+ 0
49+}
50+
51+
4452 let OraclesKey = "oracles"
45-
46-let ConsulsKey = "consuls"
4753
4854 let SubscriberAddressKey = "subscriber_address"
4955
6571 func getHeightByPulseKey (pulseId) = ("height_" + toString(pulseId))
6672
6773
74+func ConsulsKey (round) = ("consuls_" + toString(round))
75+
76+
6877 let oracles = split(getStringByKey(OraclesKey), ",")
6978
7079 let bftCoefficient = getNumberByKey(BftCoefficientKey)
7180
7281 let gracityContract = addressFromStringValue(getStringByKey(GravityContractKey))
7382
74-let consuls = split(getStringByAddressAndKey(gracityContract, ConsulsKey), ",")
83+let lastGravityRound = getNumberByAddressAndKey(gracityContract, LastRoundKey)
84+
85+let consuls = split(getStringByAddressAndKey(gracityContract, ConsulsKey(lastGravityRound)), ",")
7586
7687 let subscriberAddress = getStringByKey(SubscriberAddressKey)
7788
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
44+func getNumberByAddressAndKey (address,key) = match getInteger(address, key) {
45+ case v: Int =>
46+ v
47+ case _ =>
48+ 0
49+}
50+
51+
4452 let OraclesKey = "oracles"
45-
46-let ConsulsKey = "consuls"
4753
4854 let SubscriberAddressKey = "subscriber_address"
4955
5056 let TypeKey = "type"
5157
5258 let GravityContractKey = "gravity_contract"
5359
5460 let BftCoefficientKey = "bft_coefficient"
5561
5662 let LastHeightKey = "last_height"
5763
5864 let LastRoundKey = "last_round"
5965
6066 let LastPulseIdKey = "last_pulse_id"
6167
6268 func getHashDataKey (pulseId) = ("data_hash_" + toString(pulseId))
6369
6470
6571 func getHeightByPulseKey (pulseId) = ("height_" + toString(pulseId))
6672
6773
74+func ConsulsKey (round) = ("consuls_" + toString(round))
75+
76+
6877 let oracles = split(getStringByKey(OraclesKey), ",")
6978
7079 let bftCoefficient = getNumberByKey(BftCoefficientKey)
7180
7281 let gracityContract = addressFromStringValue(getStringByKey(GravityContractKey))
7382
74-let consuls = split(getStringByAddressAndKey(gracityContract, ConsulsKey), ",")
83+let lastGravityRound = getNumberByAddressAndKey(gracityContract, LastRoundKey)
84+
85+let consuls = split(getStringByAddressAndKey(gracityContract, ConsulsKey(lastGravityRound)), ",")
7586
7687 let subscriberAddress = getStringByKey(SubscriberAddressKey)
7788
7889 let type = getNumberByKey(TypeKey)
7990
8091 let lastPulseId = getNumberByKey(LastPulseIdKey)
8192
8293 func getHashData (pulseId) = getBytesByKey(getHashDataKey(pulseId))
8394
8495
8596 func getHeightByPulse (pulseId) = getNumberByKey(getHeightByPulseKey(pulseId))
8697
8798
8899 func validateSign (hash,sign,oracle) = if ((sign != "nil"))
89100 then if (sigVerify(hash, fromBase58String(sign), fromBase58String(oracle)))
90101 then 1
91102 else 0
92103 else 0
93104
94105
95106 @Callable(i)
96107 func sendHashValue (hash,signs) = {
97108 let signList = split(signs, ",")
98109 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]))
99110 if ((bftCoefficient > count))
100111 then throw("invalid bft count")
101112 else if ((getBytesByKey(toString(height)) != base58'2CsAf'))
102113 then throw("data is exist")
103114 else {
104115 let pulseId = (lastPulseId + 1)
105116 WriteSet([DataEntry(getHashDataKey(pulseId), hash), DataEntry(getHeightByPulseKey(pulseId), height), DataEntry(LastHeightKey, height), DataEntry(LastPulseIdKey, pulseId)])
106117 }
107118 }
108119
109120
110121
111122 @Callable(i)
112123 func updateOracles (newSortedOracles,stringSigns,round) = {
113124 let signs = split(stringSigns, ",")
114125 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]))
115126 if ((count > bftCoefficient))
116127 then throw("invalid bft count")
117128 else WriteSet([DataEntry(OraclesKey, newSortedOracles), DataEntry(((LastRoundKey + "_") + toString(round)), round)])
118129 }
119130
120131
121132 @Verifier(i)
122133 func sendValueToSub () = match i {
123134 case invokeTx: InvokeScriptTransaction =>
124135 let vBytes = if ((type == IntType))
125136 then {
126137 let v = match invokeTx.args[0] {
127138 case v: Int =>
128139 v
129140 case _ =>
130141 throw("invalid value type")
131142 }
132143 toBytes(v)
133144 }
134145 else if ((type == StringType))
135146 then {
136147 let v = match invokeTx.args[0] {
137148 case v: String =>
138149 v
139150 case _ =>
140151 throw("invalid value type")
141152 }
142153 toBytes(v)
143154 }
144155 else if ((type == BytesType))
145156 then {
146157 let v = match invokeTx.args[0] {
147158 case v: ByteVector =>
148159 v
149160 case _ =>
150161 throw("invalid value type")
151162 }
152163 v
153164 }
154165 else throw("invalid value type")
155166 let vPulseId = match invokeTx.args[1] {
156167 case vPulseId: Int =>
157168 vPulseId
158169 case _ =>
159170 throw("invalid height type")
160171 }
161172 if ((invokeTx.function != "attachValue"))
162173 then throw("invalid function name")
163174 else if ((size(invokeTx.args) != 2))
164175 then throw("invalid args size")
165176 else if ((invokeTx.dApp != addressFromStringValue(subscriberAddress)))
166177 then throw("invalid dapp address")
167178 else if ((getHeightByPulse(vPulseId) != height))
168179 then throw("invalid height")
169180 else if ((getHashData(vPulseId) == base58'2CsAf'))
170181 then throw("invalid pulse id")
171182 else if ((keccak256(vBytes) != getHashData(vPulseId)))
172183 then throw("invalid keccak256(value)")
173184 else true
174185 case _ =>
175186 sigVerify(i.bodyBytes, i.proofs[0], i.senderPublicKey)
176187 }
177188

github/deemru/w8io/3ef1775 
45.73 ms