2019.12.19 20:50 [1846420] smart account 3P5Bfd58PPfNvBM2Hy8QfbcDqMeNtzg7KfP > SELF 0.00000000 Waves

{ "type": 13, "id": "7DRyRYFS9mcnbQDQnhZGwY4xaTc35BXfYtcsGJv59VAz", "fee": 1400000, "feeAssetId": null, "timestamp": 1576777345163, "version": 1, "sender": "3P5Bfd58PPfNvBM2Hy8QfbcDqMeNtzg7KfP", "senderPublicKey": "GqXuX2WHNr3WUqTaeH2YCySFY45NAJoE9RmY9bEWkzh", "proofs": [ "2VowkhkedJTWNLH91Ys3JmeRuTEXYAGHWUwcfpJcXgHE1U76iJqjF4z2cEKj5yMoEC7HuLqogDMd4oVXEZSHQigy", "5ish8gUuFpqFYPQ1vqEkP8JYF7L9ZzXtyZ5skQPerYGGv9wSWMR6SSmWhwmiAdzZ1YBkTgoSovcN4B1ZxpX2t8zS" ], "script": "base64:AAIDAAAAAAAAAAQIARIAAAAAMAEAAAAOZ2V0TnVtYmVyQnlLZXkAAAABAAAAA2tleQQAAAAHJG1hdGNoMAkABBoAAAACBQAAAAR0aGlzBQAAAANrZXkDCQAAAQAAAAIFAAAAByRtYXRjaDACAAAAA0ludAQAAAABYQUAAAAHJG1hdGNoMAUAAAABYQAAAAAAAAAAAAEAAAAOZ2V0U3RyaW5nQnlLZXkAAAABAAAAA2tleQQAAAAHJG1hdGNoMAkABB0AAAACBQAAAAR0aGlzBQAAAANrZXkDCQAAAQAAAAIFAAAAByRtYXRjaDACAAAABlN0cmluZwQAAAABYQUAAAAHJG1hdGNoMAUAAAABYQIAAAAAAQAAAAxnZXRCb29sQnlLZXkAAAABAAAAA2tleQQAAAAHJG1hdGNoMAkABBsAAAACBQAAAAR0aGlzBQAAAANrZXkDCQAAAQAAAAIFAAAAByRtYXRjaDACAAAAB0Jvb2xlYW4EAAAAAWEFAAAAByRtYXRjaDAFAAAAAWEHAQAAABhnZXROdW1iZXJCeUFkZHJlc3NBbmRLZXkAAAACAAAAB2FkZHJlc3MAAAADa2V5BAAAAAckbWF0Y2gwCQAEGgAAAAIFAAAAB2FkZHJlc3MFAAAAA2tleQMJAAABAAAAAgUAAAAHJG1hdGNoMAIAAAADSW50BAAAAAFhBQAAAAckbWF0Y2gwBQAAAAFhAAAAAAAAAAAAAQAAABhnZXRTdHJpbmdCeUFkZHJlc3NBbmRLZXkAAAACAAAAB2FkZHJlc3MAAAADa2V5BAAAAAckbWF0Y2gwCQAEHQAAAAIFAAAAB2FkZHJlc3MFAAAAA2tleQMJAAABAAAAAgUAAAAHJG1hdGNoMAIAAAAGU3RyaW5nBAAAAAFhBQAAAAckbWF0Y2gwBQAAAAFhAgAAAAABAAAAFmRyb3BFbGVtZW50SW5Kc29uQXJyYXkAAAACAAAABWFycmF5AAAAB2VsZW1lbnQEAAAADHNwbGl0ZWRBcnJheQkABLUAAAACBQAAAAVhcnJheQUAAAAHZWxlbWVudAMJAAAAAAAAAgkAAS8AAAACCQABkQAAAAIFAAAADHNwbGl0ZWRBcnJheQAAAAAAAAAAAQAAAAAAAAAAAQIAAAABLAkAASwAAAACCQABkQAAAAIFAAAADHNwbGl0ZWRBcnJheQAAAAAAAAAAAAkAATAAAAACCQABkQAAAAIFAAAADHNwbGl0ZWRBcnJheQAAAAAAAAAAAQAAAAAAAAAAAQkAASwAAAACCQEAAAAJZHJvcFJpZ2h0AAAAAgkAAZEAAAACBQAAAAxzcGxpdGVkQXJyYXkAAAAAAAAAAAAAAAAAAAAAAAEJAAGRAAAAAgUAAAAMc3BsaXRlZEFycmF5AAAAAAAAAAABAQAAABZjb252ZXJ0SnNvbkFycmF5VG9MaXN0AAAAAQAAAAlqc29uQXJyYXkJAAS1AAAAAgUAAAAJanNvbkFycmF5AgAAAAEsAAAAAAVCTE9DSwIAAAAFYmxvY2sAAAAAB1VOQkxPQ0sCAAAAB3VuYmxvY2sAAAAABlVQREFURQIAAAAGdXBkYXRlAAAAAApPcmFjbGVzS2V5AgAAAAdvcmFjbGVzAAAAAAlBZG1pbnNLZXkCAAAABmFkbWlucwAAAAAPVm90ZUludGVydmFsS2V5AgAAAA12b3RlX2ludGVydmFsAAAAABRDb2VmZmljaWVudE9yYWNsZUtleQIAAAASY29lZmZpY2llbnRfb3JhY2xlAAAAABNDb2VmZmljaWVudEFkbWluS2V5AgAAABFjb2VmZmljaWVudF9hZG1pbgAAAAAXU2NyaXB0VXBkYXRlSW50ZXJ2YWxLZXkCAAAAFnNjcmlwdF91cGRhdGVfaW50ZXJ2YWwAAAAADlByaWNlT2Zmc2V0S2V5AgAAAAxwcmljZV9vZmZzZXQAAAAACFByaWNlS2V5AgAAAAVwcmljZQAAAAAMSXNCbG9ja2VkS2V5AgAAAAppc19ibG9ja2VkAAAAABJCbG9ja0V4cGlyZVZvdGVLZXkCAAAAEXZvdGVfZXhwaXJlX2Jsb2NrAAAAABRTY3JpcHRVcGRhdGVCbG9ja0tleQIAAAATc2NyaXB0X3VwZGF0ZV9ibG9jawAAAAANUHJpY2VJbmRleEtleQIAAAALcHJpY2VfaW5kZXgBAAAAD2dldEFkbWluVm90ZUtleQAAAAEAAAAFb3duZXIJAAEsAAAAAgIAAAALYWRtaW5fdm90ZV8FAAAABW93bmVyAQAAABVnZXRBZG1pblZvdGVBY3Rpb25LZXkAAAABAAAABW93bmVyCQABLAAAAAIJAAEsAAAAAgkBAAAAD2dldEFkbWluVm90ZUtleQAAAAEFAAAABW93bmVyAgAAAAFfAgAAAAZhY3Rpb24BAAAAFWdldEJsYWNrU3dhcm1QcmljZUtleQAAAAEAAAAFYmxvY2sJAAEsAAAAAgkAASwAAAACAgAAABFibGFja19zd2FybV9wcmljZQIAAAABXwkAAaQAAAABBQAAAAVibG9jawEAAAASZ2V0UHJpY2VIaXN0b3J5S2V5AAAAAQAAAAVibG9jawkAASwAAAACCQABLAAAAAIFAAAACFByaWNlS2V5AgAAAAFfCQABpAAAAAEFAAAABWJsb2NrAQAAABhnZXRIZWlnaHRQcmljZUJ5SW5kZXhLZXkAAAABAAAABWluZGV4CQABLAAAAAIJAAEsAAAAAgUAAAANUHJpY2VJbmRleEtleQIAAAABXwkAAaQAAAABBQAAAAVpbmRleAEAAAAYZ2V0T3JhY2xlUHJvdmlkZVByaWNlS2V5AAAAAQAAAAZoZWlnaHQJAAEsAAAAAgIAAAAGcHJpY2VfCQABpAAAAAEFAAAABmhlaWdodAAAAAAFcHJpY2UJAQAAAA5nZXROdW1iZXJCeUtleQAAAAEFAAAACFByaWNlS2V5AAAAAApwcmljZUluZGV4CQEAAAAOZ2V0TnVtYmVyQnlLZXkAAAABBQAAAA1QcmljZUluZGV4S2V5AAAAAA9ibG9ja0V4cGlyZVZvdGUJAQAAAA5nZXROdW1iZXJCeUtleQAAAAEFAAAAEkJsb2NrRXhwaXJlVm90ZUtleQAAAAARc2NyaXB0VXBkYXRlQmxvY2sJAQAAAA5nZXROdW1iZXJCeUtleQAAAAEFAAAAFFNjcmlwdFVwZGF0ZUJsb2NrS2V5AAAAABRzY3JpcHRVcGRhdGVJbnRlcnZhbAkBAAAADmdldE51bWJlckJ5S2V5AAAAAQUAAAAXU2NyaXB0VXBkYXRlSW50ZXJ2YWxLZXkAAAAACWlzQmxvY2tlZAkBAAAADGdldEJvb2xCeUtleQAAAAEFAAAADElzQmxvY2tlZEtleQAAAAAUYmZ0Q29lZmZpY2llbnRPcmFjbGUJAQAAAA5nZXROdW1iZXJCeUtleQAAAAEFAAAAFENvZWZmaWNpZW50T3JhY2xlS2V5AAAAABNiZnRDb2VmZmljaWVudEFkbWluCQEAAAAOZ2V0TnVtYmVyQnlLZXkAAAABBQAAABNDb2VmZmljaWVudEFkbWluS2V5AAAAABJwZXJjZW50UHJpY2VPZmZzZXQJAQAAAA5nZXROdW1iZXJCeUtleQAAAAEFAAAADlByaWNlT2Zmc2V0S2V5AAAAAAx2b3RlSW50ZXJ2YWwJAQAAAA5nZXROdW1iZXJCeUtleQAAAAEFAAAAD1ZvdGVJbnRlcnZhbEtleQAAAAAHb3JhY2xlcwkBAAAADmdldFN0cmluZ0J5S2V5AAAAAQUAAAAKT3JhY2xlc0tleQAAAAALb3JhY2xlc0xpc3QJAQAAABZjb252ZXJ0SnNvbkFycmF5VG9MaXN0AAAAAQUAAAAHb3JhY2xlcwEAAAASZ2V0QWRtaW5Wb3RlQWN0aW9uAAAAAQAAAAVvd25lcgkBAAAADmdldFN0cmluZ0J5S2V5AAAAAQkBAAAAFWdldEFkbWluVm90ZUFjdGlvbktleQAAAAEFAAAABW93bmVyAQAAABZnZXRPcmFjbGVQcm92aWRlSGVpZ2h0AAAAAgAAAAVvd25lcgAAAAZoZWlnaHQJAQAAABhnZXROdW1iZXJCeUFkZHJlc3NBbmRLZXkAAAACCQEAAAAcQGV4dHJVc2VyKGFkZHJlc3NGcm9tU3RyaW5nKQAAAAEFAAAABW93bmVyCQEAAAAYZ2V0T3JhY2xlUHJvdmlkZVByaWNlS2V5AAAAAQUAAAAGaGVpZ2h0AQAAAA9nZXRQcmljZUhpc3RvcnkAAAABAAAABmhlaWdodAkBAAAADmdldE51bWJlckJ5S2V5AAAAAQkBAAAAEmdldFByaWNlSGlzdG9yeUtleQAAAAEFAAAABmhlaWdodAEAAAAIaXNPcmFjbGUAAAABAAAAB2FkZHJlc3MJAQAAAAlpc0RlZmluZWQAAAABCQAEswAAAAIFAAAAB29yYWNsZXMFAAAAB2FkZHJlc3MBAAAAGGZpbHRlckFkbWluc1ZvdGVCeUFjdGlvbgAAAAMAAAAGcmVzdWx0AAAAB2FkZHJlc3MAAAAGYWN0aW9uCQAETAAAAAIFAAAAB2FkZHJlc3MFAAAABnJlc3VsdAEAAAAdZmlsdGVyQWRtaW5zVm90ZUJ5QmxvY2tBY3Rpb24AAAACAAAABnJlc3VsdAAAAAdhZGRyZXNzCQEAAAAYZmlsdGVyQWRtaW5zVm90ZUJ5QWN0aW9u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AAAABXByaWNlBQAAABJwZXJjZW50UHJpY2VPZmZzZXQAAAAAAAAAAGQGCQAAZwAAAAIJAABlAAAAAgUAAAAFcHJpY2UJAABpAAAAAgkAAGgAAAACBQAAAAVwcmljZQUAAAAScGVyY2VudFByaWNlT2Zmc2V0AAAAAAAAAABkBQAAAAhuZXdQcmljZQkBAAAACFdyaXRlU2V0AAAAAQkABEwAAAACCQEAAAAJRGF0YUVudHJ5AAAAAgUAAAAMSXNCbG9ja2VkS2V5BgkABEwAAAACCQEAAAAJRGF0YUVudHJ5AAAAAgkBAAAAFWdldEJsYWNrU3dhcm1QcmljZUtleQAAAAEFAAAABmhlaWdodAUAAAAIbmV3UHJpY2UFAAAAA25pbAQAAAANbmV3UHJpY2VJbmRleAkAAGQAAAACBQAAAApwcmljZUluZGV4AAAAAAAAAAABCQEAAAAIV3JpdGVTZXQAAAABCQAETAAAAAIJAQAAAAlEYXRhRW50cnkAAAACBQAAAAhQcmljZUtleQUAAAAIbmV3UHJpY2UJAARMAAAAAgkBAAAACURhdGFFbnRyeQAAAAIJAQAAABJnZXRQcmljZUhpc3RvcnlLZXkAAAABBQAAAAZoZWlnaHQFAAAACG5ld1ByaWNlCQAETAAAAAIJAQAAAAlEYXRhRW50cnkAAAACBQAAAA1QcmljZUluZGV4S2V5BQAAAA1uZXdQcmljZUluZGV4CQAETAAAAAIJAQAAAAlEYXRhRW50cnkAAAACCQEAAAAYZ2V0SGVpZ2h0UHJpY2VCeUluZGV4S2V5AAAAAQUAAAANbmV3UHJpY2VJbmRleAUAAAAGaGVpZ2h0BQAAAANuaWwAAAABAAAAAnR4AQAAAAZ2ZXJpZnkAAAAABAAAABBwdWJLZXlBZG1pbnNMaXN0CQAETAAAAAICAAAALEJMRW9ndXpQVktWVGZYeHhUM1c3UnFmOGFVbTJnZ0M5VmVtZDJNUWF3TTJHCQAETAAAAAICAAAALEZXVmZmWXIyQUxtSE1lalptM1dxZUx6NlNkeW0zZ0xGR3RKbjRLVHd5VTV4CQAETAAAAAICAAAALDNXaDJMYVdjYjVnZzdLMnBQY1czRXA2RUF1UkJ6WWtBZ3JkcHQ0M2pUREZhCQAETAAAAAICAAAALDVXUlhGU2p3Y1RiTmZLY0pzOFpxWG1TU1dZc1NWSlV0TXZNcVpqNWhINE5jBQAAAANuaWwEAAAABWNvdW50CQAAZAAAAAIJAABkAAAAAgkAAGQAAAACAwkAAfQAAAADCAUAAAACdHgAAAAJYm9keUJ5dGVzCQABkQAAAAIIBQAAAAJ0eAAAAAZwcm9vZnMAAAAAAAAAAAAJAAJZAAAAAQkAAZEAAAACBQAAABBwdWJLZXlBZG1pbnNMaXN0AAAAAAAAAAAAAAAAAAAAAAABAAAAAAAAAAAAAwkAAfQAAAADCAUAAAACdHgAAAAJYm9keUJ5dGVzCQABkQAAAAIIBQAAAAJ0eAAAAAZwcm9vZnMAAAAAAAAAAAEJAAJZAAAAAQkAAZEAAAACBQAAABBwdWJLZXlBZG1pbnNMaXN0AAAAAAAAAAABAAAAAAAAAAABAAAAAAAAAAAAAwkAAfQAAAADCAUAAAACdHgAAAAJYm9keUJ5dGVzCQABkQAAAAIIBQAAAAJ0eAAAAAZwcm9vZnMAAAAAAAAAAAIJAAJZAAAAAQkAAZEAAAACBQAAABBwdWJLZXlBZG1pbnNMaXN0AAAAAAAAAAACAAAAAAAAAAABAAAAAAAAAAAAAwkAAfQAAAADCAUAAAACdHgAAAAJYm9keUJ5dGVzCQABkQAAAAIIBQAAAAJ0eAAAAAZwcm9vZnMAAAAAAAAAAAMJAAJZAAAAAQkAAZEAAAACBQAAABBwdWJLZXlBZG1pbnNMaXN0AAAAAAAAAAADAAAAAAAAAAACAAAAAAAAAAAACQAAZwAAAAIFAAAABWNvdW50AAAAAAAAAAADXn4syA==", "chainId": 87, "height": 1846420, "spentComplexity": 0 } View: original | compacted Prev: FsWaUS6hSBxs9Z2UoLuMf8BYetEcZjMTLTJfQmafYvnT Next: 4rKsJoCdotWQCih4tqjSoRhSF9qEDjqmk3kd7mU9mAN3 Diff:
OldNewDifferences
124124
125125 let oraclesList = convertJsonArrayToList(oracles)
126126
127-let pubKeyAdmins = getStringByKey(AdminsKey)
128-
129-let pubKeyAdminsList = convertJsonArrayToList(pubKeyAdmins)
130-
131127 func getAdminVoteAction (owner) = getStringByKey(getAdminVoteActionKey(owner))
132128
133129
138134
139135
140136 func isOracle (address) = isDefined(indexOf(oracles, address))
141-
142-
143-func isAdmin (address) = isDefined(indexOf(pubKeyAdmins, address))
144137
145138
146139 func filterAdminsVoteByAction (result,address,action) = address :: result
190183
191184 @Verifier(tx)
192185 func verify () = {
193- let count = (((if (sigVerify(tx.bodyBytes, tx.proofs[0], fromBase58String(pubKeyAdminsList[0])))
186+ let pubKeyAdminsList = ["BLEoguzPVKVTfXxxT3W7Rqf8aUm2ggC9Vemd2MQawM2G", "FWVffYr2ALmHMejZm3WqeLz6Sdym3gLFGtJn4KTwyU5x", "3Wh2LaWcb5gg7K2pPcW3Ep6EAuRBzYkAgrdpt43jTDFa", "5WRXFSjwcTbNfKcJs8ZqXmSSWYsSVJUtMvMqZj5hH4Nc"]
187+ let count = ((((if (sigVerify(tx.bodyBytes, tx.proofs[0], fromBase58String(pubKeyAdminsList[0])))
194188 then 1
195189 else 0) + (if (sigVerify(tx.bodyBytes, tx.proofs[1], fromBase58String(pubKeyAdminsList[1])))
196190 then 1
197191 else 0)) + (if (sigVerify(tx.bodyBytes, tx.proofs[2], fromBase58String(pubKeyAdminsList[2])))
198192 then 1
193+ else 0)) + (if (sigVerify(tx.bodyBytes, tx.proofs[3], fromBase58String(pubKeyAdminsList[3])))
194+ then 2
199195 else 0))
200- (count >= 2)
196+ (count >= 3)
201197 }
202198
Full:
OldNewDifferences
11 {-# STDLIB_VERSION 3 #-}
22 {-# SCRIPT_TYPE ACCOUNT #-}
33 {-# CONTENT_TYPE DAPP #-}
44 func getNumberByKey (key) = match getInteger(this, key) {
55 case a: Int =>
66 a
77 case _ =>
88 0
99 }
1010
1111
1212 func getStringByKey (key) = match getString(this, key) {
1313 case a: String =>
1414 a
1515 case _ =>
1616 ""
1717 }
1818
1919
2020 func getBoolByKey (key) = match getBoolean(this, key) {
2121 case a: Boolean =>
2222 a
2323 case _ =>
2424 false
2525 }
2626
2727
2828 func getNumberByAddressAndKey (address,key) = match getInteger(address, key) {
2929 case a: Int =>
3030 a
3131 case _ =>
3232 0
3333 }
3434
3535
3636 func getStringByAddressAndKey (address,key) = match getString(address, key) {
3737 case a: String =>
3838 a
3939 case _ =>
4040 ""
4141 }
4242
4343
4444 func dropElementInJsonArray (array,element) = {
4545 let splitedArray = split(array, element)
4646 if ((take(splitedArray[1], 1) == ","))
4747 then (splitedArray[0] + drop(splitedArray[1], 1))
4848 else (dropRight(splitedArray[0], 1) + splitedArray[1])
4949 }
5050
5151
5252 func convertJsonArrayToList (jsonArray) = split(jsonArray, ",")
5353
5454
5555 let BLOCK = "block"
5656
5757 let UNBLOCK = "unblock"
5858
5959 let UPDATE = "update"
6060
6161 let OraclesKey = "oracles"
6262
6363 let AdminsKey = "admins"
6464
6565 let VoteIntervalKey = "vote_interval"
6666
6767 let CoefficientOracleKey = "coefficient_oracle"
6868
6969 let CoefficientAdminKey = "coefficient_admin"
7070
7171 let ScriptUpdateIntervalKey = "script_update_interval"
7272
7373 let PriceOffsetKey = "price_offset"
7474
7575 let PriceKey = "price"
7676
7777 let IsBlockedKey = "is_blocked"
7878
7979 let BlockExpireVoteKey = "vote_expire_block"
8080
8181 let ScriptUpdateBlockKey = "script_update_block"
8282
8383 let PriceIndexKey = "price_index"
8484
8585 func getAdminVoteKey (owner) = ("admin_vote_" + owner)
8686
8787
8888 func getAdminVoteActionKey (owner) = ((getAdminVoteKey(owner) + "_") + "action")
8989
9090
9191 func getBlackSwarmPriceKey (block) = (("black_swarm_price" + "_") + toString(block))
9292
9393
9494 func getPriceHistoryKey (block) = ((PriceKey + "_") + toString(block))
9595
9696
9797 func getHeightPriceByIndexKey (index) = ((PriceIndexKey + "_") + toString(index))
9898
9999
100100 func getOracleProvidePriceKey (height) = ("price_" + toString(height))
101101
102102
103103 let price = getNumberByKey(PriceKey)
104104
105105 let priceIndex = getNumberByKey(PriceIndexKey)
106106
107107 let blockExpireVote = getNumberByKey(BlockExpireVoteKey)
108108
109109 let scriptUpdateBlock = getNumberByKey(ScriptUpdateBlockKey)
110110
111111 let scriptUpdateInterval = getNumberByKey(ScriptUpdateIntervalKey)
112112
113113 let isBlocked = getBoolByKey(IsBlockedKey)
114114
115115 let bftCoefficientOracle = getNumberByKey(CoefficientOracleKey)
116116
117117 let bftCoefficientAdmin = getNumberByKey(CoefficientAdminKey)
118118
119119 let percentPriceOffset = getNumberByKey(PriceOffsetKey)
120120
121121 let voteInterval = getNumberByKey(VoteIntervalKey)
122122
123123 let oracles = getStringByKey(OraclesKey)
124124
125125 let oraclesList = convertJsonArrayToList(oracles)
126126
127-let pubKeyAdmins = getStringByKey(AdminsKey)
128-
129-let pubKeyAdminsList = convertJsonArrayToList(pubKeyAdmins)
130-
131127 func getAdminVoteAction (owner) = getStringByKey(getAdminVoteActionKey(owner))
132128
133129
134130 func getOracleProvideHeight (owner,height) = getNumberByAddressAndKey(addressFromStringValue(owner), getOracleProvidePriceKey(height))
135131
136132
137133 func getPriceHistory (height) = getNumberByKey(getPriceHistoryKey(height))
138134
139135
140136 func isOracle (address) = isDefined(indexOf(oracles, address))
141-
142-
143-func isAdmin (address) = isDefined(indexOf(pubKeyAdmins, address))
144137
145138
146139 func filterAdminsVoteByAction (result,address,action) = address :: result
147140
148141
149142 func filterAdminsVoteByBlockAction (result,address) = filterAdminsVoteByAction(result, address, BLOCK)
150143
151144
152145 func filterAdminsVoteByUnblockAction (result,address) = filterAdminsVoteByAction(result, address, UNBLOCK)
153146
154147
155148 func filterAdminsVoteByUpdateAction (result,address) = filterAdminsVoteByAction(result, address, UPDATE)
156149
157150
158151 @Callable(i)
159152 func finalizeCurrentPrice () = {
160153 let prices = [getOracleProvideHeight(oraclesList[0], height), getOracleProvideHeight(oraclesList[1], height), getOracleProvideHeight(oraclesList[2], height), getOracleProvideHeight(oraclesList[3], height), getOracleProvideHeight(oraclesList[4], height)]
161154 let priceProvidingCount = (((((if ((prices[0] != 0))
162155 then 1
163156 else 0) + (if ((prices[1] != 0))
164157 then 1
165158 else 0)) + (if ((prices[2] != 0))
166159 then 1
167160 else 0)) + (if ((prices[3] != 0))
168161 then 1
169162 else 0)) + (if ((prices[4] != 0))
170163 then 1
171164 else 0))
172165 let priceSum = ((((prices[0] + prices[1]) + prices[2]) + prices[3]) + prices[4])
173166 let newPrice = (priceSum / priceProvidingCount)
174167 if (isBlocked)
175168 then throw("contract is blocked")
176169 else if ((getPriceHistory(height) != 0))
177170 then throw("wait next block")
178171 else if ((bftCoefficientOracle > priceProvidingCount))
179172 then throw((((toString(bftCoefficientOracle) + "/5 oracles need to set a price (") + toString(priceProvidingCount)) + ")"))
180173 else if (if ((newPrice >= (price + ((price * percentPriceOffset) / 100))))
181174 then true
182175 else ((price - ((price * percentPriceOffset) / 100)) >= newPrice))
183176 then WriteSet([DataEntry(IsBlockedKey, true), DataEntry(getBlackSwarmPriceKey(height), newPrice)])
184177 else {
185178 let newPriceIndex = (priceIndex + 1)
186179 WriteSet([DataEntry(PriceKey, newPrice), DataEntry(getPriceHistoryKey(height), newPrice), DataEntry(PriceIndexKey, newPriceIndex), DataEntry(getHeightPriceByIndexKey(newPriceIndex), height)])
187180 }
188181 }
189182
190183
191184 @Verifier(tx)
192185 func verify () = {
193- let count = (((if (sigVerify(tx.bodyBytes, tx.proofs[0], fromBase58String(pubKeyAdminsList[0])))
186+ let pubKeyAdminsList = ["BLEoguzPVKVTfXxxT3W7Rqf8aUm2ggC9Vemd2MQawM2G", "FWVffYr2ALmHMejZm3WqeLz6Sdym3gLFGtJn4KTwyU5x", "3Wh2LaWcb5gg7K2pPcW3Ep6EAuRBzYkAgrdpt43jTDFa", "5WRXFSjwcTbNfKcJs8ZqXmSSWYsSVJUtMvMqZj5hH4Nc"]
187+ let count = ((((if (sigVerify(tx.bodyBytes, tx.proofs[0], fromBase58String(pubKeyAdminsList[0])))
194188 then 1
195189 else 0) + (if (sigVerify(tx.bodyBytes, tx.proofs[1], fromBase58String(pubKeyAdminsList[1])))
196190 then 1
197191 else 0)) + (if (sigVerify(tx.bodyBytes, tx.proofs[2], fromBase58String(pubKeyAdminsList[2])))
198192 then 1
193+ else 0)) + (if (sigVerify(tx.bodyBytes, tx.proofs[3], fromBase58String(pubKeyAdminsList[3])))
194+ then 2
199195 else 0))
200- (count >= 2)
196+ (count >= 3)
201197 }
202198

github/deemru/w8io/786bc32 
70.02 ms