2019.12.14 18:24 [1839058] smart account 3P5Bfd58PPfNvBM2Hy8QfbcDqMeNtzg7KfP > SELF 0.00000000 Waves

{ "type": 13, "id": "FsWaUS6hSBxs9Z2UoLuMf8BYetEcZjMTLTJfQmafYvnT", "fee": 1400000, "feeAssetId": null, "timestamp": 1576337063559, "version": 1, "sender": "3P5Bfd58PPfNvBM2Hy8QfbcDqMeNtzg7KfP", "senderPublicKey": "GqXuX2WHNr3WUqTaeH2YCySFY45NAJoE9RmY9bEWkzh", "proofs": [ "42SHf9CwdYLTjeA4UJ3wsJghC98rafRqeCqKdYfQeXfAx5GnjUiHn2LFv16LYrA1CFxSpUgrFTLguFHTCZ8JKKZ7" ], "script": "base64:AAIDAAAAAAAAAAQIARIAAAAAMwEAAAAOZ2V0TnVtYmVyQnlLZXkAAAABAAAAA2tleQQAAAAHJG1hdGNoMAkABBoAAAACBQAAAAR0aGlzBQAAAANrZXkDCQAAAQAAAAIFAAAAByRtYXRjaDACAAAAA0ludAQAAAABYQUAAAAHJG1hdGNoMAUAAAABYQAAAAAAAAAAAAEAAAAOZ2V0U3RyaW5nQnlLZXkAAAABAAAAA2tleQQAAAAHJG1hdGNoMAkABB0AAAACBQAAAAR0aGlzBQAAAANrZXkDCQAAAQAAAAIFAAAAByRtYXRjaDACAAAABlN0cmluZwQAAAABYQUAAAAHJG1hdGNoMAUAAAABYQIAAAAAAQAAAAxnZXRCb29sQnlLZXkAAAABAAAAA2tleQQAAAAHJG1hdGNoMAkABBsAAAACBQAAAAR0aGlzBQAAAANrZXkDCQAAAQAAAAIFAAAAByRtYXRjaDACAAAAB0Jvb2xlYW4EAAAAAWEFAAAAByRtYXRjaDAFAAAAAWEHAQAAABhnZXROdW1iZXJCeUFkZHJlc3NBbmRLZXkAAAACAAAAB2FkZHJlc3MAAAADa2V5BAAAAAckbWF0Y2gwCQAEGgAAAAIFAAAAB2FkZHJlc3MFAAAAA2tleQMJAAABAAAAAgUAAAAHJG1hdGNoMAIAAAADSW50BAAAAAFhBQAAAAckbWF0Y2gwBQAAAAFhAAAAAAAAAAAAAQAAABhnZXRTdHJpbmdCeUFkZHJlc3NBbmRLZXkAAAACAAAAB2FkZHJlc3MAAAADa2V5BAAAAAckbWF0Y2gwCQAEHQAAAAIFAAAAB2FkZHJlc3MFAAAAA2tleQMJAAABAAAAAgUAAAAHJG1hdGNoMAIAAAAGU3RyaW5nBAAAAAFhBQAAAAckbWF0Y2gwBQAAAAFhAgAAAAABAAAAFmRyb3BFbGVtZW50SW5Kc29uQXJyYXkAAAACAAAABWFycmF5AAAAB2VsZW1lbnQEAAAADHNwbGl0ZWRBcnJheQkABLUAAAACBQAAAAVhcnJheQUAAAAHZWxlbWVudAMJAAAAAAAAAgkAAS8AAAACCQABkQAAAAIFAAAADHNwbGl0ZWRBcnJheQAAAAAAAAAAAQAAAAAAAAAAAQIAAAABLAkAASwAAAACCQABkQAAAAIFAAAADHNwbGl0ZWRBcnJheQAAAAAAAAAAAAkAATAAAAACCQABkQAAAAIFAAAADHNwbGl0ZWRBcnJheQAAAAAAAAAAAQAAAAAAAAAAAQkAASwAAAACCQEAAAAJZHJvcFJpZ2h0AAAAAgkAAZEAAAACBQAAAAxzcGxpdGVkQXJyYXkAAAAAAAAAAAAAAAAAAAAAAAEJAAGRAAAAAgUAAAAMc3BsaXRlZEFycmF5AAAAAAAAAAABAQAAABZjb252ZXJ0SnNvbkFycmF5VG9MaXN0AAAAAQAAAAlqc29uQXJyYXkJAAS1AAAAAgUAAAAJanNvbkFycmF5AgAAAAEsAAAAAAVCTE9DSwIAAAAFYmxvY2sAAAAAB1VOQkxPQ0sCAAAAB3VuYmxvY2sAAAAABlVQREFURQIAAAAGdXBkYXRlAAAAAApPcmFjbGVzS2V5AgAAAAdvcmFjbGVzAAAAAAlBZG1pbnNLZXkCAAAABmFkbWlucwAAAAAPVm90ZUludGVydmFsS2V5AgAAAA12b3RlX2ludGVydmFsAAAAABRDb2VmZmljaWVudE9yYWNsZUtleQIAAAASY29lZmZpY2llbnRfb3JhY2xlAAAAABNDb2VmZmljaWVudEFkbWluS2V5AgAAABFjb2VmZmljaWVudF9hZG1pbgAAAAAXU2NyaXB0VXBkYXRlSW50ZXJ2YWxLZXkCAAAAFnNjcmlwdF91cGRhdGVfaW50ZXJ2YWwAAAAADlByaWNlT2Zmc2V0S2V5AgAAAAxwcmljZV9vZmZzZXQAAAAACFByaWNlS2V5AgAAAAVwcmljZQAAAAAMSXNCbG9ja2VkS2V5AgAAAAppc19ibG9ja2VkAAAAABJCbG9ja0V4cGlyZVZvdGVLZXkCAAAAEXZvdGVfZXhwaXJlX2Jsb2NrAAAAABRTY3JpcHRVcGRhdGVCbG9ja0tleQIAAAATc2NyaXB0X3VwZGF0ZV9ibG9jawAAAAANUHJpY2VJbmRleEtleQIAAAALcHJpY2VfaW5kZXgBAAAAD2dldEFkbWluVm90ZUtleQAAAAEAAAAFb3duZXIJAAEsAAAAAgIAAAALYWRtaW5fdm90ZV8FAAAABW93bmVyAQAAABVnZXRBZG1pblZvdGVBY3Rpb25LZXkAAAABAAAABW93bmVyCQABLAAAAAIJAAEsAAAAAgkBAAAAD2dldEFkbWluVm90ZUtleQAAAAEFAAAABW93bmVyAgAAAAFfAgAAAAZhY3Rpb24BAAAAFWdldEJsYWNrU3dhcm1QcmljZUtleQAAAAEAAAAFYmxvY2sJAAEsAAAAAgkAASwAAAACAgAAABFibGFja19zd2FybV9wcmljZQIAAAABXwkAAaQAAAABBQAAAAVibG9jawEAAAASZ2V0UHJpY2VIaXN0b3J5S2V5AAAAAQAAAAVibG9jawkAASwAAAACCQABLAAAAAIFAAAACFByaWNlS2V5AgAAAAFfCQABpAAAAAEFAAAABWJsb2NrAQAAABhnZXRIZWlnaHRQcmljZUJ5SW5kZXhLZXkAAAABAAAABWluZGV4CQABLAAAAAIJAAEsAAAAAgUAAAANUHJpY2VJbmRleEtleQIAAAABXwkAAaQAAAABBQAAAAVpbmRleAEAAAAYZ2V0T3JhY2xlUHJvdmlkZVByaWNlS2V5AAAAAQAAAAZoZWlnaHQJAAEsAAAAAgIAAAAGcHJpY2VfCQABpAAAAAEFAAAABmhlaWdodAAAAAAFcHJpY2UJAQAAAA5nZXROdW1iZXJCeUtleQAAAAEFAAAACFByaWNlS2V5AAAAAApwcmljZUluZGV4CQEAAAAOZ2V0TnVtYmVyQnlLZXkAAAABBQAAAA1QcmljZUluZGV4S2V5AAAAAA9ibG9ja0V4cGlyZVZvdGUJAQAAAA5nZXROdW1iZXJCeUtleQAAAAEFAAAAEkJsb2NrRXhwaXJlVm90ZUtleQAAAAARc2NyaXB0VXBkYXRlQmxvY2sJAQAAAA5nZXROdW1iZXJCeUtleQAAAAEFAAAAFFNjcmlwdFVwZGF0ZUJsb2NrS2V5AAAAABRzY3JpcHRVcGRhdGVJbnRlcnZhbAkBAAAADmdldE51bWJlckJ5S2V5AAAAAQUAAAAXU2NyaXB0VXBkYXRlSW50ZXJ2YWxLZXkAAAAACWlzQmxvY2tlZAkBAAAADGdldEJvb2xCeUtleQAAAAEFAAAADElzQmxvY2tlZEtleQAAAAAUYmZ0Q29lZmZpY2llbnRPcmFjbGUJAQAAAA5nZXROdW1iZXJCeUtleQAAAAEFAAAAFENvZWZmaWNpZW50T3JhY2xlS2V5AAAAABNiZnRDb2VmZmljaWVudEFkbWluCQEAAAAOZ2V0TnVtYmVyQnlLZXkAAAABBQAAABNDb2VmZmljaWVudEFkbWluS2V5AAAAABJwZXJjZW50UHJpY2VPZmZzZXQJAQAAAA5nZXROdW1iZXJCeUtleQAAAAEFAAAADlByaWNlT2Zmc2V0S2V5AAAAAAx2b3RlSW50ZXJ2YWwJAQAAAA5nZXROdW1iZXJCeUtleQAAAAEFAAAAD1ZvdGVJbnRlcnZhbEtleQAAAAAHb3JhY2xlcwkBAAAADmdldFN0cmluZ0J5S2V5AAAAAQUAAAAKT3JhY2xlc0tleQAAAAALb3JhY2xlc0xpc3QJAQAAABZjb252ZXJ0SnNvbkFycmF5VG9MaXN0AAAAAQUAAAAHb3JhY2xlcwAAAAAMcHViS2V5QWRtaW5zCQEAAAAOZ2V0U3RyaW5nQnlLZXkAAAABBQAAAAlBZG1pbnNLZXkAAAAAEHB1YktleUFkbWluc0xpc3QJAQAAABZjb252ZXJ0SnNvbkFycmF5VG9MaXN0AAAAAQUAAAAMcHViS2V5QWRtaW5zAQAAABJnZXRBZG1pblZvdGVBY3Rpb24AAAABAAAABW93bmVyCQEAAAAOZ2V0U3RyaW5nQnlLZXkAAAABCQEAAAAVZ2V0QWRtaW5Wb3RlQWN0aW9uS2V5AAAAAQUAAAAFb3duZXIBAAAAFmdldE9yYWNsZVByb3ZpZGVIZWlnaHQAAAACAAAABW93bmVyAAAABmhlaWdodAkBAAAAGGdldE51bWJlckJ5QWRkcmVzc0FuZEtleQAAAAIJAQAAABxAZXh0clVzZXIoYWRkcmVzc0Zyb21TdHJpbmcpAAAAAQUAAAAFb3duZXIJAQAAABhnZXRPcmFjbGVQcm92aWRlUHJpY2VLZXkAAAABBQAAAAZoZWlnaHQBAAAAD2dldFByaWNlSGlzdG9yeQAAAAEAAAAGaGVpZ2h0CQEAAAAOZ2V0TnVtYmVyQnlLZXkAAAABCQEAAAASZ2V0UHJpY2VIaXN0b3J5S2V5AAAAAQUAAAAGaGVpZ2h0AQAAAAhpc09yYWNsZQAAAAEAAAAHYWRkcmVzcwkBAAAACWlzRGVmaW5lZAAAAAEJAASzAAAAAgUAAAAHb3JhY2xlcwUAAAAHYWRkcmVzcwEAAAAHaXNBZG1pbgAAAAEAAAAHYWRkcmVzcwkBAAAACWlzRGVmaW5lZAAAAAEJAASzAAAAAgUAAAAMcHViS2V5QWRtaW5zBQAAAAdhZGRyZXNzAQAAABhmaWx0ZXJBZG1pbnNWb3RlQnlBY3Rpb24AAAADAAAABnJlc3VsdAAAAAdhZGRyZXNzAAAABmFjdGlvbgkABEwAAAACBQAAAAdhZGRyZXNzBQAAAAZyZXN1bHQBAAAAHWZpbHRlckFkbWluc1ZvdGVCeUJsb2NrQWN0aW9uAAAAAgAAAAZyZXN1bHQAAAAHYWRkcmVzcwkBAAAAGGZpbHRlckFkbWluc1ZvdGVCeUFjdGlvbgAAAAMFAAAABnJlc3VsdAUAAAAHYWRkcmVzcwUAAAAFQkxPQ0sBAAAAH2ZpbHRlckFkbWluc1ZvdGVCeVVuYmxvY2tBY3Rpb24AAAACAAAABnJlc3VsdAAAAAdhZGRyZXNzCQEAAAAYZmlsdGVyQWRtaW5zVm90ZUJ5QWN0aW9uAAAAAwUAAAAGcmVzdWx0BQAAAAdhZGRyZXNzBQAAAAdVTkJMT0NLAQAAAB5maWx0ZXJBZG1pbnNWb3RlQnlVcGRhdGVBY3Rpb24AAAACAAAABnJlc3VsdAAAAAdhZGRyZXNzCQEAAAAYZmlsdGVyQWRtaW5zVm90ZUJ5QWN0aW9uAAAAAwUAAAAGcmVzdWx0BQAAAAdhZGRyZXNzBQAAAAZVUERBVEUAAAABAAAAAWkBAAAAFGZpbmFsaXplQ3VycmVudFByaWNlAAAAAAQAAAAGcHJpY2VzCQAETAAAAAIJAQAAABZnZXRPcmFjbGVQcm92aWRlSGVpZ2h0AAAAAgkAAZEAAAACBQAAAAtvcmFjbGVzTGlzdAAAAAAAAAAAAAUAAAAGaGVpZ2h0CQAETAAAAAIJAQAAABZnZXRPcmFjbGVQcm92aWRlSGVpZ2h0AAAAAgkAAZEAAAACBQAAAAtvcmFjbGVzTGlzdAAAAAAAAAAAAQUAAAAGaGVpZ2h0CQAETAAAAAIJAQAAABZnZXRPcmFjbGVQcm92aWRlSGVpZ2h0AAAAAgkAAZEAAAACBQAAAAtvcmFjbGVzTGlzdAAAAAAAAAAAAgUAAAAGaGVpZ2h0CQAETAAAAAIJAQAAABZnZXRPcmFjbGVQcm92aWRlSGVpZ2h0AAAAAgkAAZEAAAACBQAAAAtvcmFjbGVzTGlzdAAAAAAAAAAAAwUAAAAGaGVpZ2h0CQAETAAAAAIJAQAA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", "chainId": 87, "height": 1839058, "spentComplexity": 0 } View: original | compacted Prev: HtZJSiyvyExBiXPeo2FCcZJBAXubvtXDCyDPrAjSDKUE Next: 7DRyRYFS9mcnbQDQnhZGwY4xaTc35BXfYtcsGJv59VAz Diff:
OldNewDifferences
122122
123123 let oracles = getStringByKey(OraclesKey)
124124
125-let admins = getStringByKey(AdminsKey)
126-
127125 let oraclesList = convertJsonArrayToList(oracles)
128126
129-let adminsList = convertJsonArrayToList(admins)
127+let pubKeyAdmins = getStringByKey(AdminsKey)
128+
129+let pubKeyAdminsList = convertJsonArrayToList(pubKeyAdmins)
130130
131131 func getAdminVoteAction (owner) = getStringByKey(getAdminVoteActionKey(owner))
132132
140140 func isOracle (address) = isDefined(indexOf(oracles, address))
141141
142142
143-func isAdmin (address) = isDefined(indexOf(admins, address))
143+func isAdmin (address) = isDefined(indexOf(pubKeyAdmins, address))
144144
145145
146146 func filterAdminsVoteByAction (result,address,action) = address :: result
188188 }
189189
190190
191-
192-@Callable(i)
193-func vote (action) = {
194- let account = toString(i.caller)
195- let adminsListWithoutAccount = convertJsonArrayToList(dropElementInJsonArray(admins, account))
196- let lastAction = getAdminVoteAction(account)
197- let blockVotes = {
198- let $list64936561 = adminsListWithoutAccount
199- let $size64936561 = size($list64936561)
200- let $acc064936561 = nil
201- if (($size64936561 == 0))
202- then $acc064936561
203- else {
204- let $acc164936561 = filterAdminsVoteByBlockAction($acc064936561, $list64936561[0])
205- if (($size64936561 == 1))
206- then $acc164936561
207- else {
208- let $acc264936561 = filterAdminsVoteByBlockAction($acc164936561, $list64936561[1])
209- if (($size64936561 == 2))
210- then $acc264936561
211- else {
212- let $acc364936561 = filterAdminsVoteByBlockAction($acc264936561, $list64936561[2])
213- if (($size64936561 == 3))
214- then $acc364936561
215- else {
216- let $acc464936561 = filterAdminsVoteByBlockAction($acc364936561, $list64936561[3])
217- if (($size64936561 == 4))
218- then $acc464936561
219- else {
220- let $acc564936561 = filterAdminsVoteByBlockAction($acc464936561, $list64936561[4])
221- if (($size64936561 == 5))
222- then $acc564936561
223- else {
224- let $acc664936561 = filterAdminsVoteByBlockAction($acc564936561, $list64936561[5])
225- throw("List size exceed 5")
226- }
227- }
228- }
229- }
230- }
231- }
232- }
233- let unblockVotes = {
234- let $list65856655 = adminsListWithoutAccount
235- let $size65856655 = size($list65856655)
236- let $acc065856655 = nil
237- if (($size65856655 == 0))
238- then $acc065856655
239- else {
240- let $acc165856655 = filterAdminsVoteByUnblockAction($acc065856655, $list65856655[0])
241- if (($size65856655 == 1))
242- then $acc165856655
243- else {
244- let $acc265856655 = filterAdminsVoteByUnblockAction($acc165856655, $list65856655[1])
245- if (($size65856655 == 2))
246- then $acc265856655
247- else {
248- let $acc365856655 = filterAdminsVoteByUnblockAction($acc265856655, $list65856655[2])
249- if (($size65856655 == 3))
250- then $acc365856655
251- else {
252- let $acc465856655 = filterAdminsVoteByUnblockAction($acc365856655, $list65856655[3])
253- if (($size65856655 == 4))
254- then $acc465856655
255- else {
256- let $acc565856655 = filterAdminsVoteByUnblockAction($acc465856655, $list65856655[4])
257- if (($size65856655 == 5))
258- then $acc565856655
259- else {
260- let $acc665856655 = filterAdminsVoteByUnblockAction($acc565856655, $list65856655[5])
261- throw("List size exceed 5")
262- }
263- }
264- }
265- }
266- }
267- }
268- }
269- let updateVotes = {
270- let $list66786747 = adminsListWithoutAccount
271- let $size66786747 = size($list66786747)
272- let $acc066786747 = nil
273- if (($size66786747 == 0))
274- then $acc066786747
275- else {
276- let $acc166786747 = filterAdminsVoteByUpdateAction($acc066786747, $list66786747[0])
277- if (($size66786747 == 1))
278- then $acc166786747
279- else {
280- let $acc266786747 = filterAdminsVoteByUpdateAction($acc166786747, $list66786747[1])
281- if (($size66786747 == 2))
282- then $acc266786747
283- else {
284- let $acc366786747 = filterAdminsVoteByUpdateAction($acc266786747, $list66786747[2])
285- if (($size66786747 == 3))
286- then $acc366786747
287- else {
288- let $acc466786747 = filterAdminsVoteByUpdateAction($acc366786747, $list66786747[3])
289- if (($size66786747 == 4))
290- then $acc466786747
291- else {
292- let $acc566786747 = filterAdminsVoteByUpdateAction($acc466786747, $list66786747[4])
293- if (($size66786747 == 5))
294- then $acc566786747
295- else {
296- let $acc666786747 = filterAdminsVoteByUpdateAction($acc566786747, $list66786747[5])
297- throw("List size exceed 5")
298- }
299- }
300- }
301- }
302- }
303- }
304- }
305- let blockVoteCount = (size(blockVotes) + (if ((action == BLOCK))
191+@Verifier(tx)
192+func verify () = {
193+ let count = (((if (sigVerify(tx.bodyBytes, tx.proofs[0], fromBase58String(pubKeyAdminsList[0])))
194+ then 1
195+ else 0) + (if (sigVerify(tx.bodyBytes, tx.proofs[1], fromBase58String(pubKeyAdminsList[1])))
196+ then 1
197+ else 0)) + (if (sigVerify(tx.bodyBytes, tx.proofs[2], fromBase58String(pubKeyAdminsList[2])))
306198 then 1
307199 else 0))
308- let unblockVoteCount = (size(unblockVotes) + (if ((action == UNBLOCK))
309- then 1
310- else 0))
311- let updateVotesCount = (size(updateVotes) + (if ((action == UPDATE))
312- then 1
313- else 0))
314- let resetResult = [DataEntry(BlockExpireVoteKey, 0), DataEntry(getAdminVoteActionKey(adminsListWithoutAccount[0]), ""), DataEntry(getAdminVoteActionKey(adminsListWithoutAccount[1]), ""), DataEntry(getAdminVoteActionKey(adminsListWithoutAccount[2]), ""), DataEntry(getAdminVoteActionKey(adminsListWithoutAccount[3]), "")]
315- if (if ((blockVoteCount >= bftCoefficientAdmin))
316- then true
317- else (unblockVoteCount >= bftCoefficientAdmin))
318- then WriteSet(DataEntry(IsBlockedKey, if ((blockVoteCount >= bftCoefficientAdmin))
319- then true
320- else false) :: resetResult)
321- else if ((updateVotesCount > bftCoefficientAdmin))
322- then WriteSet(DataEntry(ScriptUpdateBlockKey, if ((updateVotesCount > bftCoefficientAdmin))
323- then (height + scriptUpdateInterval)
324- else scriptUpdateBlock) :: resetResult)
325- else WriteSet([DataEntry(BlockExpireVoteKey, if ((height > blockExpireVote))
326- then (height + voteInterval)
327- else blockExpireVote), DataEntry(getAdminVoteActionKey(account), action)])
200+ (count >= 2)
328201 }
329-
330202
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
125-let admins = getStringByKey(AdminsKey)
126-
127125 let oraclesList = convertJsonArrayToList(oracles)
128126
129-let adminsList = convertJsonArrayToList(admins)
127+let pubKeyAdmins = getStringByKey(AdminsKey)
128+
129+let pubKeyAdminsList = convertJsonArrayToList(pubKeyAdmins)
130130
131131 func getAdminVoteAction (owner) = getStringByKey(getAdminVoteActionKey(owner))
132132
133133
134134 func getOracleProvideHeight (owner,height) = getNumberByAddressAndKey(addressFromStringValue(owner), getOracleProvidePriceKey(height))
135135
136136
137137 func getPriceHistory (height) = getNumberByKey(getPriceHistoryKey(height))
138138
139139
140140 func isOracle (address) = isDefined(indexOf(oracles, address))
141141
142142
143-func isAdmin (address) = isDefined(indexOf(admins, address))
143+func isAdmin (address) = isDefined(indexOf(pubKeyAdmins, address))
144144
145145
146146 func filterAdminsVoteByAction (result,address,action) = address :: result
147147
148148
149149 func filterAdminsVoteByBlockAction (result,address) = filterAdminsVoteByAction(result, address, BLOCK)
150150
151151
152152 func filterAdminsVoteByUnblockAction (result,address) = filterAdminsVoteByAction(result, address, UNBLOCK)
153153
154154
155155 func filterAdminsVoteByUpdateAction (result,address) = filterAdminsVoteByAction(result, address, UPDATE)
156156
157157
158158 @Callable(i)
159159 func finalizeCurrentPrice () = {
160160 let prices = [getOracleProvideHeight(oraclesList[0], height), getOracleProvideHeight(oraclesList[1], height), getOracleProvideHeight(oraclesList[2], height), getOracleProvideHeight(oraclesList[3], height), getOracleProvideHeight(oraclesList[4], height)]
161161 let priceProvidingCount = (((((if ((prices[0] != 0))
162162 then 1
163163 else 0) + (if ((prices[1] != 0))
164164 then 1
165165 else 0)) + (if ((prices[2] != 0))
166166 then 1
167167 else 0)) + (if ((prices[3] != 0))
168168 then 1
169169 else 0)) + (if ((prices[4] != 0))
170170 then 1
171171 else 0))
172172 let priceSum = ((((prices[0] + prices[1]) + prices[2]) + prices[3]) + prices[4])
173173 let newPrice = (priceSum / priceProvidingCount)
174174 if (isBlocked)
175175 then throw("contract is blocked")
176176 else if ((getPriceHistory(height) != 0))
177177 then throw("wait next block")
178178 else if ((bftCoefficientOracle > priceProvidingCount))
179179 then throw((((toString(bftCoefficientOracle) + "/5 oracles need to set a price (") + toString(priceProvidingCount)) + ")"))
180180 else if (if ((newPrice >= (price + ((price * percentPriceOffset) / 100))))
181181 then true
182182 else ((price - ((price * percentPriceOffset) / 100)) >= newPrice))
183183 then WriteSet([DataEntry(IsBlockedKey, true), DataEntry(getBlackSwarmPriceKey(height), newPrice)])
184184 else {
185185 let newPriceIndex = (priceIndex + 1)
186186 WriteSet([DataEntry(PriceKey, newPrice), DataEntry(getPriceHistoryKey(height), newPrice), DataEntry(PriceIndexKey, newPriceIndex), DataEntry(getHeightPriceByIndexKey(newPriceIndex), height)])
187187 }
188188 }
189189
190190
191-
192-@Callable(i)
193-func vote (action) = {
194- let account = toString(i.caller)
195- let adminsListWithoutAccount = convertJsonArrayToList(dropElementInJsonArray(admins, account))
196- let lastAction = getAdminVoteAction(account)
197- let blockVotes = {
198- let $list64936561 = adminsListWithoutAccount
199- let $size64936561 = size($list64936561)
200- let $acc064936561 = nil
201- if (($size64936561 == 0))
202- then $acc064936561
203- else {
204- let $acc164936561 = filterAdminsVoteByBlockAction($acc064936561, $list64936561[0])
205- if (($size64936561 == 1))
206- then $acc164936561
207- else {
208- let $acc264936561 = filterAdminsVoteByBlockAction($acc164936561, $list64936561[1])
209- if (($size64936561 == 2))
210- then $acc264936561
211- else {
212- let $acc364936561 = filterAdminsVoteByBlockAction($acc264936561, $list64936561[2])
213- if (($size64936561 == 3))
214- then $acc364936561
215- else {
216- let $acc464936561 = filterAdminsVoteByBlockAction($acc364936561, $list64936561[3])
217- if (($size64936561 == 4))
218- then $acc464936561
219- else {
220- let $acc564936561 = filterAdminsVoteByBlockAction($acc464936561, $list64936561[4])
221- if (($size64936561 == 5))
222- then $acc564936561
223- else {
224- let $acc664936561 = filterAdminsVoteByBlockAction($acc564936561, $list64936561[5])
225- throw("List size exceed 5")
226- }
227- }
228- }
229- }
230- }
231- }
232- }
233- let unblockVotes = {
234- let $list65856655 = adminsListWithoutAccount
235- let $size65856655 = size($list65856655)
236- let $acc065856655 = nil
237- if (($size65856655 == 0))
238- then $acc065856655
239- else {
240- let $acc165856655 = filterAdminsVoteByUnblockAction($acc065856655, $list65856655[0])
241- if (($size65856655 == 1))
242- then $acc165856655
243- else {
244- let $acc265856655 = filterAdminsVoteByUnblockAction($acc165856655, $list65856655[1])
245- if (($size65856655 == 2))
246- then $acc265856655
247- else {
248- let $acc365856655 = filterAdminsVoteByUnblockAction($acc265856655, $list65856655[2])
249- if (($size65856655 == 3))
250- then $acc365856655
251- else {
252- let $acc465856655 = filterAdminsVoteByUnblockAction($acc365856655, $list65856655[3])
253- if (($size65856655 == 4))
254- then $acc465856655
255- else {
256- let $acc565856655 = filterAdminsVoteByUnblockAction($acc465856655, $list65856655[4])
257- if (($size65856655 == 5))
258- then $acc565856655
259- else {
260- let $acc665856655 = filterAdminsVoteByUnblockAction($acc565856655, $list65856655[5])
261- throw("List size exceed 5")
262- }
263- }
264- }
265- }
266- }
267- }
268- }
269- let updateVotes = {
270- let $list66786747 = adminsListWithoutAccount
271- let $size66786747 = size($list66786747)
272- let $acc066786747 = nil
273- if (($size66786747 == 0))
274- then $acc066786747
275- else {
276- let $acc166786747 = filterAdminsVoteByUpdateAction($acc066786747, $list66786747[0])
277- if (($size66786747 == 1))
278- then $acc166786747
279- else {
280- let $acc266786747 = filterAdminsVoteByUpdateAction($acc166786747, $list66786747[1])
281- if (($size66786747 == 2))
282- then $acc266786747
283- else {
284- let $acc366786747 = filterAdminsVoteByUpdateAction($acc266786747, $list66786747[2])
285- if (($size66786747 == 3))
286- then $acc366786747
287- else {
288- let $acc466786747 = filterAdminsVoteByUpdateAction($acc366786747, $list66786747[3])
289- if (($size66786747 == 4))
290- then $acc466786747
291- else {
292- let $acc566786747 = filterAdminsVoteByUpdateAction($acc466786747, $list66786747[4])
293- if (($size66786747 == 5))
294- then $acc566786747
295- else {
296- let $acc666786747 = filterAdminsVoteByUpdateAction($acc566786747, $list66786747[5])
297- throw("List size exceed 5")
298- }
299- }
300- }
301- }
302- }
303- }
304- }
305- let blockVoteCount = (size(blockVotes) + (if ((action == BLOCK))
191+@Verifier(tx)
192+func verify () = {
193+ let count = (((if (sigVerify(tx.bodyBytes, tx.proofs[0], fromBase58String(pubKeyAdminsList[0])))
194+ then 1
195+ else 0) + (if (sigVerify(tx.bodyBytes, tx.proofs[1], fromBase58String(pubKeyAdminsList[1])))
196+ then 1
197+ else 0)) + (if (sigVerify(tx.bodyBytes, tx.proofs[2], fromBase58String(pubKeyAdminsList[2])))
306198 then 1
307199 else 0))
308- let unblockVoteCount = (size(unblockVotes) + (if ((action == UNBLOCK))
309- then 1
310- else 0))
311- let updateVotesCount = (size(updateVotes) + (if ((action == UPDATE))
312- then 1
313- else 0))
314- let resetResult = [DataEntry(BlockExpireVoteKey, 0), DataEntry(getAdminVoteActionKey(adminsListWithoutAccount[0]), ""), DataEntry(getAdminVoteActionKey(adminsListWithoutAccount[1]), ""), DataEntry(getAdminVoteActionKey(adminsListWithoutAccount[2]), ""), DataEntry(getAdminVoteActionKey(adminsListWithoutAccount[3]), "")]
315- if (if ((blockVoteCount >= bftCoefficientAdmin))
316- then true
317- else (unblockVoteCount >= bftCoefficientAdmin))
318- then WriteSet(DataEntry(IsBlockedKey, if ((blockVoteCount >= bftCoefficientAdmin))
319- then true
320- else false) :: resetResult)
321- else if ((updateVotesCount > bftCoefficientAdmin))
322- then WriteSet(DataEntry(ScriptUpdateBlockKey, if ((updateVotesCount > bftCoefficientAdmin))
323- then (height + scriptUpdateInterval)
324- else scriptUpdateBlock) :: resetResult)
325- else WriteSet([DataEntry(BlockExpireVoteKey, if ((height > blockExpireVote))
326- then (height + voteInterval)
327- else blockExpireVote), DataEntry(getAdminVoteActionKey(account), action)])
200+ (count >= 2)
328201 }
329-
330202

github/deemru/w8io/786bc32 
57.80 ms