2019.10.26 15:23 [1767308] smart account 3P5Bfd58PPfNvBM2Hy8QfbcDqMeNtzg7KfP > SELF 0.00000000 Waves

{ "type": 13, "id": "2CnYtxPqng4vNmoKR4rg5rUvp5QAuY3Nm467ebYV9eWN", "fee": 1400000, "feeAssetId": null, "timestamp": 1572092659477, "version": 1, "sender": "3P5Bfd58PPfNvBM2Hy8QfbcDqMeNtzg7KfP", "senderPublicKey": "GqXuX2WHNr3WUqTaeH2YCySFY45NAJoE9RmY9bEWkzh", "proofs": [ "4ehSFMoAU1jy5akEAjBbLuqTApj9BEyQvs2YkYnxtdn41zaJiHBYdbxCZMAZf7eBDGEb8m6byikVLmkfv5nSTKHU" ], "script": "base64:AAIDAAAAAAAAAA4IARIDCgEBEgASAwoBCAAAAEIBAAAADmdldE51bWJlckJ5S2V5AAAAAQAAAANrZXkEAAAAByRtYXRjaDAJAAQaAAAAAgUAAAAEdGhpcwUAAAADa2V5AwkAAAEAAAACBQAAAAckbWF0Y2gwAgAAAANJbnQEAAAAAWEFAAAAByRtYXRjaDAFAAAAAWEAAAAAAAAAAAABAAAADmdldFN0cmluZ0J5S2V5AAAAAQAAAANrZXkEAAAAByRtYXRjaDAJAAQdAAAAAgUAAAAEdGhpcwUAAAADa2V5AwkAAAEAAAACBQAAAAckbWF0Y2gwAgAAAAZTdHJpbmcEAAAAAWEFAAAAByRtYXRjaDAFAAAAAWECAAAAAAEAAAAMZ2V0Qm9vbEJ5S2V5AAAAAQAAAANrZXkEAAAAByRtYXRjaDAJAAQbAAAAAgUAAAAEdGhpcwUAAAADa2V5AwkAAAEAAAACBQAAAAckbWF0Y2gwAgAAAAdCb29sZWFuBAAAAAFhBQAAAAckbWF0Y2gwBQAAAAFhBwEAAAAYZ2V0TnVtYmVyQnlBZGRyZXNzQW5kS2V5AAAAAgAAAAdhZGRyZXNzAAAAA2tleQQAAAAHJG1hdGNoMAkABBoAAAACBQAAAAdhZGRyZXNzBQAAAANrZXkDCQAAAQAAAAIFAAAAByRtYXRjaDACAAAAA0ludAQAAAABYQUAAAAHJG1hdGNoMAUAAAABYQAAAAAAAAAAAAEAAAAYZ2V0U3RyaW5nQnlBZGRyZXNzQW5kS2V5AAAAAgAAAAdhZGRyZXNzAAAAA2tleQQAAAAHJG1hdGNoMAkABB0AAAACBQAAAAdhZGRyZXNzBQAAAANrZXkDCQAAAQAAAAIFAAAAByRtYXRjaDACAAAABlN0cmluZwQAAAABYQUAAAAHJG1hdGNoMAUAAAABYQIAAAAAAQAAAAVpc0ludAAAAAEAAAADdmFsBAAAAAckbWF0Y2gwBQAAAAN2YWwDCQAAAQAAAAIFAAAAByRtYXRjaDACAAAAA0ludAQAAAABYQUAAAAHJG1hdGNoMAYHAQAAABZkcm9wRWxlbWVudEluSnNvbkFycmF5AAAAAgAAAAVhcnJheQAAAAdlbGVtZW50BAAAAAxzcGxpdGVkQXJyYXkJAAS1AAAAAgUAAAAFYXJyYXkFAAAAB2VsZW1lbnQDCQAAAAAAAAIJAAEvAAAAAgkAAZEAAAACBQAAAAxzcGxpdGVkQXJyYXkAAAAAAAAAAAEAAAAAAAAAAAECAAAAASwJAAEsAAAAAgkAAZEAAAACBQAAAAxzcGxpdGVkQXJyYXkAAAAAAAAAAAAJAAEwAAAAAgkAAZEAAAACBQAAAAxzcGxpdGVkQXJyYXkAAAAAAAAAAAEAAAAAAAAAAAEJAAEsAAAAAgkBAAAACWRyb3BSaWdodAAAAAIJAAGRAAAAAgUAAAAMc3BsaXRlZEFycmF5AAAAAAAAAAAAAAAAAAAAAAABCQABkQAAAAIFAAAADHNwbGl0ZWRBcnJheQAAAAAAAAAAAQEAAAAWY29udmVydEpzb25BcnJheVRvTGlzdAAAAAEAAAAJanNvbkFycmF5CQAEtQAAAAIFAAAACWpzb25BcnJheQIAAAABLAAAAAAFQkxPQ0sCAAAABWJsb2NrAAAAAAdVTkJMT0NLAgAAAAd1bmJsb2NrAAAAAAZVUERBVEUCAAAABnVwZGF0ZQAAAAAKT3JhY2xlc0tleQIAAAAHb3JhY2xlcwAAAAAJQWRtaW5zS2V5AgAAAAZhZG1pbnMAAAAAD1ZvdGVJbnRlcnZhbEtleQIAAAANdm90ZV9pbnRlcnZhbAAAAAAUQ29lZmZpY2llbnRPcmFjbGVLZXkCAAAAEmNvZWZmaWNpZW50X29yYWNsZQAAAAATQ29lZmZpY2llbnRBZG1pbktleQIAAAARY29lZmZpY2llbnRfYWRtaW4AAAAAF1NjcmlwdFVwZGF0ZUludGVydmFsS2V5AgAAABZzY3JpcHRfdXBkYXRlX2ludGVydmFsAAAAABRQcm92aWRpbmdJbnRlcnZhbEtleQIAAAAScHJvdmlkaW5nX2ludGVydmFsAAAAAAhQcmljZUtleQIAAAAFcHJpY2UAAAAADlByaWNlT2Zmc2V0S2V5AgAAAAxwcmljZV9vZmZzZXQAAAAAEUlzUHJpY2VQZW5kaW5nS2V5AgAAABBpc19wZW5kaW5nX3ByaWNlAAAAAAxJc0Jsb2NrZWRLZXkCAAAACmlzX2Jsb2NrZWQAAAAAEk9yYWNsZUlzUHJvdmlkZUtleQIAAAASb3JhY2xlX2lzX3Byb3ZpZGVfAAAAABVPcmFjbGVQcm92aWRlUHJpY2VLZXkCAAAAFW9yYWNsZV9wcmljZV9wcm92aWRlXwAAAAAMQWRtaW5Wb3RlS2V5AgAAAAthZG1pbl92b3RlXwAAAAAJQWN0aW9uS2V5AgAAAAZhY3Rpb24AAAAAF0Jsb2NrRXhwaXJlUHJvdmlkaW5nS2V5AgAAABZwcm92aWRpbmdfZXhwaXJlX2Jsb2NrAAAAABJCbGFja1N3YXJtUHJpY2VLZXkCAAAAEWJsYWNrX3N3YXJtX3ByaWNlAAAAABJCbG9ja0V4cGlyZVZvdGVLZXkCAAAAEXZvdGVfZXhwaXJlX2Jsb2NrAAAAABRTY3JpcHRVcGRhdGVCbG9ja0tleQIAAAATc2NyaXB0X3VwZGF0ZV9ibG9jawAAAAANUHJpY2VJbmRleEtleQIAAAALcHJpY2VfaW5kZXgBAAAAFWdldE9yYWNsZUlzUHJvdmlkZUtleQAAAAEAAAAFb3duZXIJAAEsAAAAAgUAAAAST3JhY2xlSXNQcm92aWRlS2V5BQAAAAVvd25lcgEAAAAYZ2V0T3JhY2xlUHJvdmlkZVByaWNlS2V5AAAAAQAAAAVvd25lcgkAASwAAAACBQAAABVPcmFjbGVQcm92aWRlUHJpY2VLZXkFAAAABW93bmVyAQAAAA9nZXRBZG1pblZvdGVLZXkAAAABAAAABW93bmVyCQABLAAAAAIFAAAADEFkbWluVm90ZUtleQUAAAAFb3duZXIBAAAAFWdldEFkbWluVm90ZUFjdGlvbktleQAAAAEAAAAFb3duZXIJAAEsAAAAAgkAASwAAAACCQEAAAAPZ2V0QWRtaW5Wb3RlS2V5AAAAAQUAAAAFb3duZXICAAAAAV8FAAAACUFjdGlvbktleQEAAAAVZ2V0QmxhY2tTd2FybVByaWNlS2V5AAAAAQAAAAVibG9jawkAASwAAAACCQABLAAAAAIFAAAAEkJsYWNrU3dhcm1QcmljZUtleQIAAAABXwkAAaQAAAABBQAAAAVibG9jawEAAAASZ2V0UHJpY2VIaXN0b3J5S2V5AAAAAQAAAAVibG9jawkAASwAAAACCQABLAAAAAIFAAAACFByaWNlS2V5AgAAAAFfCQABpAAAAAEFAAAABWJsb2NrAQAAABhnZXRIZWlnaHRQcmljZUJ5SW5kZXhLZXkAAAABAAAABWluZGV4CQABLAAAAAIJAAEsAAAAAgUAAAANUHJpY2VJbmRleEtleQIAAAABXwkAAaQAAAABBQAAAAVpbmRleAAAAAAFcHJpY2UJAQAAAA5nZXROdW1iZXJCeUtleQAAAAEFAAAACFByaWNlS2V5AAAAAApwcmljZUluZGV4CQEAAAAOZ2V0TnVtYmVyQnlLZXkAAAABBQAAAA1QcmljZUluZGV4S2V5AAAAABFwcm92aWRpbmdJbnRlcnZhbAkBAAAADmdldE51bWJlckJ5S2V5AAAAAQUAAAAUUHJvdmlkaW5nSW50ZXJ2YWxLZXkAAAAAFGJsb2NrRXhwaXJlUHJvdmlkaW5nCQEAAAAOZ2V0TnVtYmVyQnlLZXkAAAABBQAAABdCbG9ja0V4cGlyZVByb3ZpZGluZ0tleQAAAAAPYmxvY2tFeHBpcmVWb3RlCQEAAAAOZ2V0TnVtYmVyQnlLZXkAAAABBQAAABJCbG9ja0V4cGlyZVZvdGVLZXkAAAAAEXNjcmlwdFVwZGF0ZUJsb2NrCQEAAAAOZ2V0TnVtYmVyQnlLZXkAAAABBQAAABRTY3JpcHRVcGRhdGVCbG9ja0tleQAAAAAUc2NyaXB0VXBkYXRlSW50ZXJ2YWwJAQAAAA5nZXROdW1iZXJCeUtleQAAAAEFAAAAF1NjcmlwdFVwZGF0ZUludGVydmFsS2V5AAAAAA5pc1ByaWNlUGVuZGluZwkBAAAADGdldEJvb2xCeUtleQAAAAEFAAAAEUlzUHJpY2VQZW5kaW5nS2V5AAAAAAlpc0Jsb2NrZWQJAQAAAAxnZXRCb29sQnlLZXkAAAABBQAAAAxJc0Jsb2NrZWRLZXkAAAAAFGJmdENvZWZmaWNpZW50T3JhY2xlCQEAAAAOZ2V0TnVtYmVyQnlLZXkAAAABBQAAABRDb2VmZmljaWVudE9yYWNsZUtleQAAAAATYmZ0Q29lZmZpY2llbnRBZG1pbgkBAAAADmdldE51bWJlckJ5S2V5AAAAAQUAAAATQ29lZmZpY2llbnRBZG1pbktleQAAAAAScGVyY2VudFByaWNlT2Zmc2V0CQEAAAAOZ2V0TnVtYmVyQnlLZXkAAAABBQAAAA5QcmljZU9mZnNldEtleQAAAAAMdm90ZUludGVydmFsCQEAAAAOZ2V0TnVtYmVyQnlLZXkAAAABBQAAAA9Wb3RlSW50ZXJ2YWxLZXkAAAAAB29yYWNsZXMJAQAAAA5nZXRTdHJpbmdCeUtleQAAAAEFAAAACk9yYWNsZXNLZXkAAAAABmFkbWlucwkBAAAADmdldFN0cmluZ0J5S2V5AAAAAQUAAAAJQWRtaW5zS2V5AAAAAAtvcmFjbGVzTGlzdAkBAAAAFmNvbnZlcnRKc29uQXJyYXlUb0xpc3QAAAABBQAAAAdvcmFjbGVzAAAAAAphZG1pbnNMaXN0CQEAAAAWY29udmVydEpzb25BcnJheVRvTGlzdAAAAAEFAAAABmFkbWlucwEAAAASZ2V0QWRtaW5Wb3RlQWN0aW9uAAAAAQAAAAVvd25lcgkBAAAADmdldFN0cmluZ0J5S2V5AAAAAQkBAAAAFWdldEFkbWluVm90ZUFjdGlvbktleQAAAAEFAAAABW93bmVyAQAAAA9pc09yYWNsZVByb3ZpZGUAAAABAAAABW93bmVyCQEAAAAMZ2V0Qm9vbEJ5S2V5AAAAAQkBAAAAFWdldE9yYWNsZUlzUHJvdmlkZUtleQAAAAEFAAAABW93bmVyAQAAABJpc09yYWNsZVByb3ZpZGVJbnQAAAABAAAABW93bmVyAwkBAAAAD2lzT3JhY2xlUHJvdmlkZQAAAAEFAAAABW93bmVyAAAAAAAAAAABAAAAAAAAAAAAAQAAABVnZXRPcmFjbGVQcm92aWRlUHJpY2UAAAABAAAABW93bmVyCQEAAAAOZ2V0TnVtYmVyQnlLZXkAAAABCQEAAAAYZ2V0T3JhY2xlUHJvdmlkZVByaWNlS2V5AAAAAQUAAAAFb3duZXIBAAAACGlzT3JhY2xlAAAAAQAAAAdhZGRyZXNzBAAAAAckbWF0Y2gwCQAEswAAAAIFAAAAB29yYWNsZXMFAAAAB2FkZHJlc3MDCQAAAQAAAAIFAAAAByRtYXRjaDACAAAAA0ludAYHAQAAAAdpc0FkbWluAAAAAQAAAAdhZGRyZXNzBAAAAAckbWF0Y2gwCQAEswAAAAIFAAAABmFkbWlucwUAAAAHYWRkcmVzcwMJAAABAAAAAgUAAAAHJG1hdGNoMAIAAAADSW50BgcBAAAADnN1bU9yYWNsZVByaWNlAAAAAgAAAARiYXNlAAAAB2FkZHJlc3MJAABkAAAAAgUAAAAEYmFzZQkAAGgAAAACCQEAAAAVZ2V0T3JhY2xlUHJvdmlkZVByaWNlAAAAAQUAAAAHYWRkcmVzcwkBAAAAEmlzT3JhY2xlUHJvdmlkZUludAAAAAEFAAAAB2FkZHJlc3MBAAAAGGZpbHRlckFkbWluc1ZvdGVCeUFjdGlvbgAAAAMAAAAGcmVzdWx0AAAAB2FkZHJlc3MAAAAGYWN0aW9uCQAETAAAAAIFAAAAB2FkZHJlc3MFAAAABnJlc3VsdAEAAAAdZmlsdGVyQWRtaW5zVm90ZUJ5QmxvY2tBY3Rpb24AAAACAAAABnJlc3VsdAAAAAdhZGRyZXNzCQEAAAAYZmlsdGVyQWRtaW5zVm90ZUJ5QWN0aW9uAAAAAwUAAAAGcmVzdWx0BQAAAAdhZGRyZXNzBQAAAAVCTE9DSwEAAAAfZmlsdGVyQWRtaW5zVm90ZUJ5VW5ibG9ja0FjdGlvbgAAAAIAAAAGcmVzdWx0AAAAB2FkZHJlc3MJAQAAABhmaWx0ZXJBZG1pbnNWb3RlQnlBY3Rpb24AAAADBQAAAAZyZXN1bHQFAAAAB2FkZHJlc3MFAAAAB1VOQkxPQ0sBAAAAHmZpbHRlckFkbWluc1ZvdGVCeVVwZGF0ZUFjdGlvbgAAAAIAAAAGcmVzdWx0AAAAB2FkZHJlc3MJAQAAABhmaWx0ZXJBZG1pbnNWb3RlQnlBY3Rpb24AAAADBQAAAAZyZXN1bHQFAAAAB2FkZHJlc3MFAAAABlVQREFURQAAAAMAAAABaQEAAAAPc2V0Q3VycmVudFByaWNlAAAAAQAAAAhuZXdQcmljZQQAAAAHYWNjb3VudAkABCUAAAABCAUAAAABaQAAAAZjYWxsZXIEAAAAE2lzT3JhY2xlUHJvdmlkZUxpc3QJAARMAAAAAgkBAAAAD2lzT3JhY2xlUHJvdmlkZQAAAAEJAAGRAAAAAgUAAAALb3JhY2xlc0xpc3QAAAAAAAAAAAAJAARMAAAAAgkBAAAAD2lzT3JhY2xlUHJvdmlkZQAAAAEJAAGRAAAAAgUAAAALb3JhY2xlc0xpc3QAAAAAAAAAAAEJAARMAAAAAgkBAAAAD2lzT3JhY2xlUHJvdmlkZQAAAAEJAAGRAAAAAgUAAAALb3JhY2xlc0xpc3QAAAAAAAAAAAIJAARMAAAAAgkBAAAAD2lzT3JhY2xlUHJvdmlkZQAAAAEJAAGRAAAAAgUAAAALb3JhY2xlc0xpc3QAAAAAAAAAAAMJAARMAAAAAgkBAAAAD2lzT3JhY2xlUHJvdmlkZQAAAAEJAAGRAAAAAgUAAAALb3JhY2xlc0xpc3QAAAAAAAAAAAQFAAAAA25pbAQAAAATcHJpY2VQcm92aWRpbmdDb3VudAkAAGQAAAACCQAAZAAAAAIJAABkAAAAAgkAAGQAAAACCQAAZAAAAAIDCQABkQAAAAIFAAAAE2lzT3JhY2xlUHJvdmlkZUxpc3QAAAAAAAAAAAAAAAAAAAAAAAEAAAAAAAAAAAADCQABkQAAAAIFAAAAE2lzT3JhY2xlUHJvdmlkZUxpc3QAAAAAAAAAAAEAAAAAAAAAAAEAAAAAAAAAAAADCQABkQAAAAIFAAAAE2lzT3JhY2xlUHJvdmlkZUxpc3QAAAAAAAAAAAIAAAAAAAAAAAEAAAAAAAAAAAADCQABkQAAAAIFAAAAE2lzT3JhY2xlUHJvdmlkZUxpc3QAAAAAAAAAAAMAAAAAAAAAAAEAAAAAAAAAAAADCQABkQAAAAIFAAAAE2lzT3JhY2xlUHJvdmlkZUxpc3QAAAAAAAAAAAQAAAAAAAAAAAEAAAAAAAAAAAAAAAAAAAAAAAEDBQAAAAlpc0Jsb2NrZWQJAAACAAAAAQIAAAATY29udHJhY3QgaXMgYmxvY2tlZAMJAQAAAAEhAAAAAQkBAAAACGlzT3JhY2xlAAAAAQUAAAAHYWNjb3VudAkAAAIAAAABAgAAABFwZXJtaXNzaW9uIGRlbmllZAMDCQAAZwAAAAIFAAAAFGJsb2NrRXhwaXJlUHJvdmlkaW5nBQAAAAZoZWlnaHQJAQAAAA9pc09yYWNsZVByb3ZpZGUAAAABBQAAAAdhY2NvdW50BwkAAAIAAAABAgAAABlwcmljZSBpcyBhbHJlYWR5IHByb3ZpZGVkAwMJAABmAAAAAgUAAAAGaGVpZ2h0BQAAABRibG9ja0V4cGlyZVByb3ZpZGluZwUAAAAOaXNQcmljZVBlbmRpbmcHCQAAAgAAAAECAAAAGHVzZSBmaW5hbGl6ZUN1cnJlbnRQcmljZQkBAAAACFdyaXRlU2V0AAAAAQkABEwAAAACCQEAAAAJRGF0YUVudHJ5AAAAAgkBAAAAFWdldE9yYWNsZUlzUHJvdmlkZUtleQAAAAEJAAGRAAAAAgUAAAALb3JhY2xlc0xpc3QAAAAAAAAAAAADCQAAZgAAAAIFAAAABmhlaWdodAUAAAAUYmxvY2tFeHBpcmVQcm92aWRpbmcHCQABkQAAAAIFAAAAE2lzT3JhY2xlUHJvdmlkZUxpc3QAAAAAAAAAAAAJAARMAAAAAgkBAAAACURhdGFFbnRyeQAAAAIJAQAAABVnZXRPcmFjbGVJc1Byb3ZpZGVLZXkAAAABCQABkQAAAAIFAAAAC29yYWNsZXNMaXN0AAAAAAAAAAABAwkAAGYAAAACBQAAAAZoZWlnaHQFAAAAFGJsb2NrRXhwaXJlUHJvdmlkaW5nBwkAAZEAAAACBQAAABNpc09yYWNsZVByb3ZpZGVMaXN0AAAAAAAAAAABCQAETAAAAAIJAQAAAAlEYXRhRW50cnkAAAACCQEAAAAVZ2V0T3JhY2xlSXNQcm92aWRlS2V5AAAAAQkAAZEAAAACBQAAAAtvcmFjbGVzTGlzdAAAAAAAAAAAAgMJAABmAAAAAgUAAAAGaGVpZ2h0BQAAABRibG9ja0V4cGlyZVByb3ZpZGluZwcJAAGRAAAAAgUAAAATaXNPcmFjbGVQcm92aWRlTGlzdAAAAAAAAAAAAgkABEwAAAACCQEAAAAJRGF0YUVudHJ5AAAAAgkBAAAAFWdldE9yYWNsZUlzUHJvdmlkZUtleQAAAAEJAAGRAAAAAgUAAAALb3JhY2xlc0xpc3QAAAAAAAAAAAMDCQAAZgAAAAIFAAAABmhlaWdodAUAAAAUYmxvY2tFeHBpcmVQcm92aWRpbmcHCQABkQAAAAIFAAAAE2lzT3JhY2xlUHJvdmlkZUxpc3QAAAAAAAAAAAMJAARMAAAAAgkBAAAACURhdGFFbnRyeQAAAAIJAQAAABVnZXRPcmFjbGVJc1Byb3ZpZGVLZXkAAAABCQABkQAAAAIFAAAAC29yYWNsZXNMaXN0AAAAAAAAAAAEAwkAAGYAAAACBQAAAAZoZWlnaHQFAAAAFGJsb2NrRXhwaXJlUHJvdmlkaW5nBwkAAZEAAAACBQAAABNpc09yYWNsZVByb3ZpZGVMaXN0AAAAAAAAAAAECQAETAAAAAIJAQAAAAlEYXRhRW50cnkAAAACCQEAAAAVZ2V0T3JhY2xlSXNQcm92aWRlS2V5AAAAAQUAAAAHYWNjb3VudAYJAARMAAAAAgkBAAAACURhdGFFbnRyeQAAAAIJAQAAABhnZXRPcmFjbGVQcm92aWRlUHJpY2VLZXkAAAABBQAAAAdhY2NvdW50BQAAAAhuZXdQcmljZQkABEwAAAACCQEAAAAJRGF0YUVudHJ5AAAAAgUAAAAXQmxvY2tFeHBpcmVQcm92aWRpbmdLZXkDCQAAZgAAAAIFAAAABmhlaWdodAUAAAAUYmxvY2tFeHBpcmVQcm92aWRpbmcJAABkAAAAAgUAAAAGaGVpZ2h0BQAAABFwcm92aWRpbmdJbnRlcnZhbAUAAAAUYmxvY2tFeHBpcmVQcm92aWRpbmcJAARMAAAAAgkBAAAACURhdGFFbnRyeQAAAAIFAAAAEUlzUHJpY2VQZW5kaW5nS2V5AwMJAABnAAAAAgUAAAAUYmxvY2tFeHBpcmVQcm92aWRpbmcFAAAABmhlaWdodAkAAGcAAAACBQAAABNwcmljZVByb3ZpZGluZ0NvdW50BQAAABRiZnRDb2VmZmljaWVudE9yYWNsZQcGBQAAAA5pc1ByaWNlUGVuZGluZwUAAAADbmlsAAAAAWkBAAAAFGZpbmlsaXplQ3VycmVudFByaWNlAAAAAAQAAAATaXNPcmFjbGVQcm92aWRlTGlzdAkABEwAAAACCQEAAAAPaXNPcmFjbGVQcm92aWRlAAAAAQkAAZEAAAACBQAAAAtvcmFjbGVzTGlzdAAAAAAAAAAAAAkABEwAAAACCQEAAAAPaXNPcmFjbGVQcm92aWRlAAAAAQkAAZEAAAACBQAAAAtvcmFjbGVzTGlzdAAAAAAAAAAAAQkABEwAAAACCQEAAAAPaXNPcmFjbGVQcm92aWRlAAAAAQkAAZEAAAACBQAAAAtvcmFjbGVzTGlzdAAAAAAAAAAAAgkABEwAAAACCQEAAAAPaXNPcmFjbGVQcm92aWRlAAAAAQkAAZEAAAACBQAAAAtvcmFjbGVzTGlzdAAAAAAAAAAAAwkABEwAAAACCQEAAAAPaXNPcmFjbGVQcm92aWRlAAAAAQkAAZEAAAACBQAAAAtvcmFjbGVzTGlzdAAAAAAAAAAABAUAAAADbmlsBAAAABNwcmljZVByb3ZpZGluZ0NvdW50CQAAZAAAAAIJAABkAAAAAgkAAGQAAAACCQAAZAAAAAIDCQABkQAAAAIFAAAAE2lzT3JhY2xlUHJvdmlkZUxp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bnRyeQAAAAIJAQAAABJnZXRQcmljZUhpc3RvcnlLZXkAAAABBQAAAAZoZWlnaHQFAAAACG5ld1ByaWNlCQAETAAAAAIJAQAAAAlEYXRhRW50cnkAAAACBQAAABFJc1ByaWNlUGVuZGluZ0tleQcJAARMAAAAAgkBAAAACURhdGFFbnRyeQAAAAIFAAAADVByaWNlSW5kZXhLZXkFAAAADW5ld1ByaWNlSW5kZXgJAARMAAAAAgkBAAAACURhdGFFbnRyeQAAAAIJAQAAABhnZXRIZWlnaHRQcmljZUJ5SW5kZXhLZXkAAAABBQAAAA1uZXdQcmljZUluZGV4BQAAAAZoZWlnaHQFAAAAA25pbAAAAAFpAQAAAAR2b3RlAAAAAQAAAAZhY3Rpb24EAAAAB2FjY291bnQJAAQlAAAAAQgFAAAAAWkAAAAGY2FsbGVyBAAAABhhZG1pbnNMaXN0V2l0aG91dEFjY291bnQJAQAAABZjb252ZXJ0SnNvbkFycmF5VG9MaXN0AAAAAQkBAAAAFmRyb3BFbGVtZW50SW5Kc29uQXJyYXkAAAACBQAAAAZhZG1pbnMFAAAAB2FjY291bnQEAAAACmxhc3RBY3Rpb24JAQAAABJnZXRBZG1pblZvdGVBY3Rpb24AAAABBQAAAAdhY2NvdW50BAAAAApibG9ja1ZvdGVzBAAAAA4kbGlzdDk5ODQxMDA1MgUAAAAYYWRtaW5zTGlzdFdpdGhvdXRBY2NvdW50BAAAAA4kc2l6ZTk5ODQxMDA1MgkAAZAAAAABBQAAAA4kbGlzdDk5ODQxMDA1MgQAAAAOJGFjYzA5OTg0MTAwNTIFAAAAA25pbAMJAAAAAAAAAgUAAAAOJHNpemU5OTg0MTAwNTIAAAAAAAAAAAAFAAAADiRhY2MwOTk4NDEwMDUyBAAAAA4kYWNjMTk5ODQxMDA1MgkBAAAAHWZpbHRlckFkbWluc1ZvdGVCeUJsb2NrQWN0aW9uAAAAAgUAAAAOJGFjYzA5OTg0MTAwNTIJAAGRAAAAAgUAAAAOJGxpc3Q5OTg0MTAwNTIAAAAAAAAAAAADCQAAAAAAAAIFAAAADiRzaXplOTk4NDEwMDUyAAAAAAAAAAABBQAAAA4kYWNjMTk5ODQxMDA1MgQAAAAOJGFjYzI5OTg0MTAwNTIJAQAAAB1maWx0ZXJBZG1pbnNWb3RlQnlCbG9ja0FjdGlvbgAAAAIFAAAADiRhY2MxOTk4NDEwMDUyCQABkQAAAAIFAAAADiRsaXN0OTk4NDEwMDUyAAAAAAAAAAABAwkAAAAAAAACBQAAAA4kc2l6ZTk5ODQxMDA1MgAAAAAAAAAAAgUAAAAOJGFjYzI5OTg0MTAwNTIEAAAADiRhY2MzOTk4NDEwMDUyCQEAAAAdZmlsdGVyQWRtaW5zVm90ZUJ5QmxvY2tBY3Rpb24AAAACBQAAAA4kYWNjMjk5ODQxMDA1MgkAAZEAAAACBQAAAA4kbGlzdDk5ODQxMDA1MgAAAAAAAAAAAgMJAAAAAAAAAgUAAAAOJHNpemU5OTg0MTAwNTIAAAAAAAAAAAMFAAAADiRhY2MzOTk4NDEwMDUyBAAAAA4kYWNjNDk5ODQxMDA1MgkBAAAAHWZpbHRlckFkbWluc1ZvdGVCeUJsb2NrQWN0aW9uAAAAAgUAAAAOJGFjYzM5OTg0MTAwNTIJAAGRAAAAAgUAAAAOJGxpc3Q5OTg0MTAwNTIAAAAAAAAAAAMDCQAAAAAAAAIFAAAADiRzaXplOTk4NDEwMDUyAAAAAAAAAAAEBQAAAA4kYWNjNDk5ODQxMDA1MgQAAAAOJGFjYzU5OTg0MTAwNTIJAQAAAB1maWx0ZXJBZG1pbnNWb3RlQnlCbG9ja0FjdGlvbgAAAAIFAAAADiRhY2M0OTk4NDEwMDUyCQABkQAAAAIFAAAADiRsaXN0OTk4NDEwMDUyAAAAAAAAAAAEAwkAAAAAAAACBQAAAA4kc2l6ZTk5ODQxMDA1MgAAAAAAAAAABQUAAAAOJGFjYzU5OTg0MTAwNTIEAAAADiRhY2M2OTk4NDEwMDUyCQEAAAAdZmlsdGVyQWRtaW5zVm90ZUJ5QmxvY2tBY3Rpb24AAAACBQAAAA4kYWNjNTk5ODQxMDA1MgkAAZEAAAACBQAAAA4kbGlzdDk5ODQxMDA1MgAAAAAAAAAABQkAAAIAAAABAgAAABJMaXN0IHNpemUgZXhjZWVkIDUEAAAADHVuYmxvY2tWb3RlcwQAAAAPJGxpc3QxMDA3NjEwMTQ2BQAAABhhZG1pbnNMaXN0V2l0aG91dEFjY291bnQEAAAADyRzaXplMTAwNzYxMDE0NgkAAZAAAAABBQAAAA8kbGlzdDEwMDc2MTAxNDYEAAAADyRhY2MwMTAwNzYxMDE0NgUAAAADbmlsAwkAAAAAAAACBQAAAA8kc2l6ZTEwMDc2MTAxNDYAAAAAAAAAAAAFAAAADyRhY2MwMTAwNzYxMDE0NgQAAAAPJGFjYzExMDA3NjEwMTQ2CQEAAAAfZmlsdGVyQWRtaW5zVm90ZUJ5VW5ibG9ja0FjdGlvbgAAAAIFAAAADyRhY2MwMTAwNzYxMDE0NgkAAZEAAAACBQAAAA8kbGlzdDEwMDc2MTAxNDYAAAAAAAAAAAADCQAAAAAAAAIFAAAADyRzaXplMTAwNzYxMDE0NgAAAAAAAAAAAQUAAAAPJGFjYzExMDA3NjEwMTQ2BAAAAA8kYWNjMjEwMDc2MTAxNDYJAQAAAB9maWx0ZXJBZG1pbnNWb3RlQnlVbmJsb2NrQWN0aW9uAAAAAgUAAAAPJGFjYzExMDA3NjEwMTQ2CQABkQAAAAIFAAAADyRsaXN0MTAwNzYxMDE0NgAAAAAAAAAAAQMJAAAAAAAAAgUAAAAPJHNpemUxMDA3NjEwMTQ2AAAAAAAAAAACBQAAAA8kYWNjMjEwMDc2MTAxNDYEAAAADyRhY2MzMTAwNzYxMDE0NgkBAAAAH2ZpbHRlckFkbWluc1ZvdGVCeVVuYmxvY2tBY3Rpb24AAAACBQAAAA8kYWNjMjEwMDc2MTAxNDYJAAGRAAAAAgUAAAAPJGxpc3QxMDA3NjEwMTQ2AAAAAAAAAAACAwkAAAAAAAACBQAAAA8kc2l6ZTEwMDc2MTAxNDYAAAAAAAAAAAMFAAAADyRhY2MzMTAwNzYxMDE0NgQAAAAPJGFjYzQxMDA3NjEwMTQ2CQEAAAAfZmlsdGVyQWRtaW5zVm90ZUJ5VW5ibG9ja0FjdGlvbgAAAAIFAAAADyRhY2MzMTAwNzYxMDE0NgkAAZEAAAACBQAAAA8kbGlzdDEwMDc2MTAxNDYAAAAAAAAAAAMDCQAAAAAAAAIFAAAADyRzaXplMTAwNzYxMDE0NgAAAAAAAAAABAUAAAAPJGFjYzQxMDA3NjEwMTQ2BAAAAA8kYWNjNTEwMDc2MTAxNDYJAQAAAB9maWx0ZXJBZG1pbnNWb3RlQnlVbmJsb2NrQWN0aW9uAAAAAgUAAAAPJGFjYzQxMDA3NjEwMTQ2CQABkQAAAAIFAAAADyRsaXN0MTAwNzYxMDE0NgAAAAAAAAAABAMJAAAAAAAAAgUAAAAPJHNpemUxMDA3NjEwMTQ2AAAAAAAAAAAFBQAAAA8kYWNjNTEwMDc2MTAxNDYEAAAADyRhY2M2MTAwNzYxMDE0NgkBAAAAH2ZpbHRlckFkbWluc1ZvdGVCeVVuYmxvY2tBY3Rpb24AAAACBQAAAA8kYWNjNTEwMDc2MTAxNDYJAAGRAAAAAgUAAAAPJGxpc3QxMDA3NjEwMTQ2AAAAAAAAAAAFCQAAAgAAAAECAAAAEkxpc3Qgc2l6ZSBleGNlZWQgNQQAAAALdXBkYXRlVm90ZXMEAAAADyRsaXN0MTAxNjkxMDIzOAUAAAAYYWRtaW5zTGlzdFdpdGhvdXRBY2NvdW50BAAAAA8kc2l6ZTEwMTY5MTAyMzgJAAGQAAAAAQUAAAAPJGxpc3QxMDE2OTEwMjM4BAAAAA8kYWNjMDEwMTY5MTAyMzgFAAAAA25pbAMJAAAAAAAAAgUAAAAPJHNpemUxMDE2OTEwMjM4AAAAAAAAAAAABQAAAA8kYWNjMDEwMTY5MTAyMzgEAAAADyRhY2MxMTAxNjkxMDIzOAkBAAAAHmZpbHRlckFkbWluc1ZvdGVCeVVwZGF0ZUFjdGlvbgAAAAIFAAAADyRhY2MwMTAxNjkxMDIzOAkAAZEAAAACBQAAAA8kbGlzdDEwMTY5MTAyMzgAAAAAAAAAAAADCQAAAAAAAAIFAAAADyRzaXplMTAxNjkxMDIzOAAAAAAAAAAAAQUAAAAPJGFjYzExMDE2OTEwMjM4BAAAAA8kYWNjMjEwMTY5MTAyMzgJAQAAAB5maWx0ZXJBZG1pbnNWb3RlQnlVcGRhdGVBY3Rpb24AAAACBQAAAA8kYWNjMTEwMTY5MTAyMzgJAAGRAAAAAgUAAAAPJGxpc3QxMDE2OTEwMjM4AAAAAAAAAAABAwkAAAAAAAACBQAAAA8kc2l6ZTEwMTY5MTAyMzgAAAAAAAAAAAIFAAAADyRhY2MyMTAxNjkxMDIzOAQAAAAPJGFjYzMxMDE2OTEwMjM4CQEAAAAeZmlsdGVyQWRtaW5zVm90ZUJ5VXBkYXRlQWN0aW9uAAAAAgUAAAAPJGFjYzIxMDE2OTEwMjM4CQABkQAAAAIFAAAADyRsaXN0MTAxNjkxMDIzOAAAAAAAAAAAAgMJAAAAAAAAAgUAAAAPJHNpemUxMDE2OTEwMjM4AAAAAAAAAAADBQAAAA8kYWNjMzEwMTY5MTAyMzgEAAAADyRhY2M0MTAxNjkxMDIzOAkBAAAAHmZpbHRlckFkbWluc1ZvdGVCeVVwZGF0ZUFjdGlvbgAAAAIFAAAADyRhY2MzMTAxNjkxMDIzOAkAAZEAAAACBQAAAA8kbGlzdDEwMTY5MTAyMzgAAAAAAAAAAAMDCQAAAAAAAAIFAAAADyRzaXplMTAxNjkxMDIzOAAAAAAAAAAABAUAAAAPJGFjYzQxMDE2OTEwMjM4BAAAAA8kYWNjNTEwMTY5MTAyMzgJAQAAAB5maWx0ZXJBZG1pbnNWb3RlQnlVcGRhdGVBY3Rpb24AAAACBQAAAA8kYWNjNDEwMTY5MTAyMzgJAAGRAAAAAgUAAAAPJGxpc3QxMDE2OTEwMjM4AAAAAAAAAAAEAwkAAAAAAAACBQAAAA8kc2l6ZTEwMTY5MTAyMzgAAAAAAAAAAAUFAAAADyRhY2M1MTAxNjkxMDIzOAQAAAAPJGFjYzYxMDE2OTEwMjM4CQEAAAAeZmlsdGVyQWRtaW5zVm90ZUJ5VXBkYXRlQWN0aW9uAAAAAgUAAAAPJGFjYzUxMDE2OTEwMjM4CQABkQAAAAIFAAAADyRsaXN0MTAxNjkxMDIzOAAAAAAAAAAABQkAAAIAAAABAgAAABJMaXN0IHNpemUgZXhjZWVkIDUEAAAADmJsb2NrVm90ZUNvdW50CQAAZAAAAAIJAAGQAAAAAQUAAAAKYmxvY2tWb3RlcwMJAAAAAAAAAgUAAAAGYWN0aW9uBQAAAAVCTE9DSwAAAAAAAAAAAQAAAAAAAAAAAAQAAAAQdW5ibG9ja1ZvdGVDb3VudAkAAGQAAAACCQABkAAAAAEFAAAADHVuYmxvY2tWb3RlcwMJAAAAAAAAAgUAAAAGYWN0aW9uBQAAAAdVTkJMT0NLAAAAAAAAAAABAAAAAAAAAAAABAAAABB1cGRhdGVWb3Rlc0NvdW50CQAAZAAAAAIJAAGQAAAAAQUAAAALdXBkYXRlVm90ZXMDCQAAAAAAAAIFAAAABmFjdGlvbgUAAAAGVVBEQVRFAAAAAAAAAAABAAAAAAAAAAAAAwMJAABnAAAAAgUAAAAOYmxvY2tWb3RlQ291bnQFAAAAE2JmdENvZWZmaWNpZW50QWRtaW4GCQAAZwAAAAIFAAAAEHVuYmxvY2tWb3RlQ291bnQFAAAAE2JmdENvZWZmaWNpZW50QWRtaW4JAQAAAAhXcml0ZVNldAAAAAEJAARMAAAAAgkBAAAACURhdGFFbnRyeQAAAAIFAAAADElzQmxvY2tlZEtleQMJAABnAAAAAgUAAAAOYmxvY2tWb3RlQ291bnQFAAAAE2JmdENvZWZmaWNpZW50QWRtaW4GBwkABEwAAAACCQEAAAAJRGF0YUVudHJ5AAAAAgUAAAASQmxvY2tFeHBpcmVWb3RlS2V5AAAAAAAAAAAACQAETAAAAAIJAQAAAAlEYXRhRW50cnkAAAACBQAAABdCbG9ja0V4cGlyZVByb3ZpZGluZ0tleQAAAAAAAAAAAAkABEwAAAACCQEAAAAJRGF0YUVudHJ5AAAAAgUAAAARSXNQcmljZVBlbmRpbmdLZXkHCQAETAAAAAIJAQAAAAlEYXRhRW50cnkAAAACCQEAAAAVZ2V0QWRtaW5Wb3RlQWN0aW9uS2V5AAAAAQkAAZEAAAACBQAAABhhZG1pbnNMaXN0V2l0aG91dEFjY291bnQAAAAAAAAAAAACAAAAAAkABEwAAAACCQEAAAAJRGF0YUVudHJ5AAAAAgkBAAAAFWdldEFkbWluVm90ZUFjdGlvbktleQAAAAEJAAGRAAAAAgUAAAAYYWRtaW5zTGlzdFdpdGhvdXRBY2NvdW50AAAAAAAAAAABAgAAAAAJAARMAAAAAgkBAAAACURhdGFFbnRyeQAAAAIJAQAAABVnZXRBZG1pblZvdGVBY3Rpb25LZXkAAAABCQABkQAAAAIFAAAAGGFkbWluc0xpc3RXaXRob3V0QWNjb3VudAAAAAAAAAAAAgIAAAAACQAETAAAAAIJAQAAAAlEYXRhRW50cnkAAAACCQEAAAAVZ2V0QWRtaW5Wb3RlQWN0aW9uS2V5AAAAAQkAAZEAAAACBQAAABhhZG1pbnNMaXN0V2l0aG91dEFjY291bnQAAAAAAAAAAAMCAAAAAAUAAAADbmlsAwkAAGYAAAACBQAAABB1cGRhdGVWb3Rlc0NvdW50BQAAABNiZnRDb2VmZmljaWVudEFkbWluCQEAAAAIV3JpdGVTZXQAAAABCQAETAAAAAIJAQAAAAlEYXRhRW50cnkAAAACBQAAABJCbG9ja0V4cGlyZVZvdGVLZXkAAAAAAAAAAAAJAARMAAAAAgkBAAAACURhdGFFbnRyeQAAAAIFAAAAF0Jsb2NrRXhwaXJlUHJvdmlkaW5nS2V5AAAAAAAAAAAACQAETAAAAAIJAQAAAAlEYXRhRW50cnkAAAACBQAAABRTY3JpcHRVcGRhdGVCbG9ja0tleQkAAGQAAAACBQAAAAZoZWlnaHQFAAAAFHNjcmlwdFVwZGF0ZUludGVydmFsCQAETAAAAAIJAQAAAAlEYXRhRW50cnkAAAACCQEAAAAVZ2V0QWRtaW5Wb3RlQWN0aW9uS2V5AAAAAQkAAZEAAAACBQAAABhhZG1pbnNMaXN0V2l0aG91dEFjY291bnQAAAAAAAAAAAACAAAAAAkABEwAAAACCQEAAAAJRGF0YUVudHJ5AAAAAgkBAAAAFWdldEFkbWluVm90ZUFjdGlvbktleQAAAAEJAAGRAAAAAgUAAAAYYWRtaW5zTGlzdFdpdGhvdXRBY2NvdW50AAAAAAAAAAABAgAAAAAJAARMAAAAAgkBAAAACURhdGFFbnRyeQAAAAIJAQAAABVnZXRBZG1pblZvdGVBY3Rpb25LZXkAAAABCQABkQAAAAIFAAAAGGFkbWluc0xpc3RXaXRob3V0QWNjb3VudAAAAAAAAAAAAgIAAAAACQAETAAAAAIJAQAAAAlEYXRhRW50cnkAAAACCQEAAAAVZ2V0QWRtaW5Wb3RlQWN0aW9uS2V5AAAAAQkAAZEAAAACBQAAABhhZG1pbnNMaXN0V2l0aG91dEFjY291bnQAAAAAAAAAAAMCAAAAAAUAAAADbmlsAwkAAGYAAAACBQAAAAZoZWlnaHQFAAAAD2Jsb2NrRXhwaXJlVm90ZQkBAAAACFdyaXRlU2V0AAAAAQkABEwAAAACCQEAAAAJRGF0YUVudHJ5AAAAAgUAAAASQmxvY2tFeHBpcmVWb3RlS2V5CQAAZAAAAAIFAAAABmhlaWdodAUAAAAMdm90ZUludGVydmFsCQAETAAAAAIJAQAAAAlEYXRhRW50cnkAAAACCQEAAAAVZ2V0QWRtaW5Wb3RlQWN0aW9uS2V5AAAAAQUAAAAHYWNjb3VudAUAAAAGYWN0aW9uCQAETAAAAAIJAQAAAAlEYXRhRW50cnkAAAACCQEAAAAVZ2V0QWRtaW5Wb3RlQWN0aW9uS2V5AAAAAQkAAZEAAAACBQAAABhhZG1pbnNMaXN0V2l0aG91dEFjY291bnQAAAAAAAAAAAACAAAAAAkABEwAAAACCQEAAAAJRGF0YUVudHJ5AAAAAgkBAAAAFWdldEFkbWluVm90ZUFjdGlvbktleQAAAAEJAAGRAAAAAgUAAAAYYWRtaW5zTGlzdFdpdGhvdXRBY2NvdW50AAAAAAAAAAABAgAAAAAJAARMAAAAAgkBAAAACURhdGFFbnRyeQAAAAIJAQAAABVnZXRBZG1pblZvdGVBY3Rpb25LZXkAAAABCQABkQAAAAIFAAAAGGFkbWluc0xpc3RXaXRob3V0QWNjb3VudAAAAAAAAAAAAgIAAAAACQAETAAAAAIJAQAAAAlEYXRhRW50cnkAAAACCQEAAAAVZ2V0QWRtaW5Wb3RlQWN0aW9uS2V5AAAAAQkAAZEAAAACBQAAABhhZG1pbnNMaXN0V2l0aG91dEFjY291bnQAAAAAAAAAAAMCAAAAAAUAAAADbmlsCQEAAAAIV3JpdGVTZXQAAAABCQAETAAAAAIJAQAAAAlEYXRhRW50cnkAAAACCQEAAAAVZ2V0QWRtaW5Wb3RlQWN0aW9uS2V5AAAAAQUAAAAHYWNjb3VudAUAAAAGYWN0aW9uBQAAAANuaWwAAAAAHOqozg==", "chainId": 87, "height": 1767308, "spentComplexity": 0 } View: original | compacted Prev: ADoRptztBLZA7ZAZxPBG1iKBpgYKb1TSZYf3ciny9pgj Next: Gar9ECCSvLW2uaG7h3xPwk8iokfVwFd8p6xKTWUChoxn Diff:
OldNewDifferences
104104
105105 let ScriptUpdateBlockKey = "script_update_block"
106106
107+let PriceIndexKey = "price_index"
108+
107109 func getOracleIsProvideKey (owner) = (OracleIsProvideKey + owner)
108110
109111
122124 func getPriceHistoryKey (block) = ((PriceKey + "_") + toString(block))
123125
124126
127+func getHeightPriceByIndexKey (index) = ((PriceIndexKey + "_") + toString(index))
128+
129+
125130 let price = getNumberByKey(PriceKey)
131+
132+let priceIndex = getNumberByKey(PriceIndexKey)
126133
127134 let providingInterval = getNumberByKey(ProvidingIntervalKey)
128135
225232 else if (if ((height > blockExpireProviding))
226233 then isPricePending
227234 else false)
228- then throw("use finilizeCurrentPrice")
235+ then throw("use finalizeCurrentPrice")
229236 else WriteSet([DataEntry(getOracleIsProvideKey(oraclesList[0]), if ((height > blockExpireProviding))
230237 then false
231238 else isOracleProvideList[0]), DataEntry(getOracleIsProvideKey(oraclesList[1]), if ((height > blockExpireProviding))
285292 then true
286293 else ((price - ((price * percentPriceOffset) / 100)) >= newPrice))
287294 then WriteSet([DataEntry(IsBlockedKey, true), DataEntry(getBlackSwarmPriceKey(height), newPrice)])
288- else WriteSet([DataEntry(PriceKey, newPrice), DataEntry(getPriceHistoryKey(height), newPrice), DataEntry(IsPricePendingKey, false)])
295+ else {
296+ let newPriceIndex = (priceIndex + 1)
297+ WriteSet([DataEntry(PriceKey, newPrice), DataEntry(getPriceHistoryKey(height), newPrice), DataEntry(IsPricePendingKey, false), DataEntry(PriceIndexKey, newPriceIndex), DataEntry(getHeightPriceByIndexKey(newPriceIndex), height)])
298+ }
289299 }
290300
291301
296306 let adminsListWithoutAccount = convertJsonArrayToList(dropElementInJsonArray(admins, account))
297307 let lastAction = getAdminVoteAction(account)
298308 let blockVotes = {
299- let $list96289696 = adminsListWithoutAccount
300- let $size96289696 = size($list96289696)
301- let $acc096289696 = nil
302- if (($size96289696 == 0))
303- then $acc096289696
309+ let $list998410052 = adminsListWithoutAccount
310+ let $size998410052 = size($list998410052)
311+ let $acc0998410052 = nil
312+ if (($size998410052 == 0))
313+ then $acc0998410052
304314 else {
305- let $acc196289696 = filterAdminsVoteByBlockAction($acc096289696, $list96289696[0])
306- if (($size96289696 == 1))
307- then $acc196289696
315+ let $acc1998410052 = filterAdminsVoteByBlockAction($acc0998410052, $list998410052[0])
316+ if (($size998410052 == 1))
317+ then $acc1998410052
308318 else {
309- let $acc296289696 = filterAdminsVoteByBlockAction($acc196289696, $list96289696[1])
310- if (($size96289696 == 2))
311- then $acc296289696
319+ let $acc2998410052 = filterAdminsVoteByBlockAction($acc1998410052, $list998410052[1])
320+ if (($size998410052 == 2))
321+ then $acc2998410052
312322 else {
313- let $acc396289696 = filterAdminsVoteByBlockAction($acc296289696, $list96289696[2])
314- if (($size96289696 == 3))
315- then $acc396289696
323+ let $acc3998410052 = filterAdminsVoteByBlockAction($acc2998410052, $list998410052[2])
324+ if (($size998410052 == 3))
325+ then $acc3998410052
316326 else {
317- let $acc496289696 = filterAdminsVoteByBlockAction($acc396289696, $list96289696[3])
318- if (($size96289696 == 4))
319- then $acc496289696
327+ let $acc4998410052 = filterAdminsVoteByBlockAction($acc3998410052, $list998410052[3])
328+ if (($size998410052 == 4))
329+ then $acc4998410052
320330 else {
321- let $acc596289696 = filterAdminsVoteByBlockAction($acc496289696, $list96289696[4])
322- if (($size96289696 == 5))
323- then $acc596289696
331+ let $acc5998410052 = filterAdminsVoteByBlockAction($acc4998410052, $list998410052[4])
332+ if (($size998410052 == 5))
333+ then $acc5998410052
324334 else {
325- let $acc696289696 = filterAdminsVoteByBlockAction($acc596289696, $list96289696[5])
335+ let $acc6998410052 = filterAdminsVoteByBlockAction($acc5998410052, $list998410052[5])
326336 throw("List size exceed 5")
327337 }
328338 }
332342 }
333343 }
334344 let unblockVotes = {
335- let $list97209790 = adminsListWithoutAccount
336- let $size97209790 = size($list97209790)
337- let $acc097209790 = nil
338- if (($size97209790 == 0))
339- then $acc097209790
345+ let $list1007610146 = adminsListWithoutAccount
346+ let $size1007610146 = size($list1007610146)
347+ let $acc01007610146 = nil
348+ if (($size1007610146 == 0))
349+ then $acc01007610146
340350 else {
341- let $acc197209790 = filterAdminsVoteByUnblockAction($acc097209790, $list97209790[0])
342- if (($size97209790 == 1))
343- then $acc197209790
351+ let $acc11007610146 = filterAdminsVoteByUnblockAction($acc01007610146, $list1007610146[0])
352+ if (($size1007610146 == 1))
353+ then $acc11007610146
344354 else {
345- let $acc297209790 = filterAdminsVoteByUnblockAction($acc197209790, $list97209790[1])
346- if (($size97209790 == 2))
347- then $acc297209790
355+ let $acc21007610146 = filterAdminsVoteByUnblockAction($acc11007610146, $list1007610146[1])
356+ if (($size1007610146 == 2))
357+ then $acc21007610146
348358 else {
349- let $acc397209790 = filterAdminsVoteByUnblockAction($acc297209790, $list97209790[2])
350- if (($size97209790 == 3))
351- then $acc397209790
359+ let $acc31007610146 = filterAdminsVoteByUnblockAction($acc21007610146, $list1007610146[2])
360+ if (($size1007610146 == 3))
361+ then $acc31007610146
352362 else {
353- let $acc497209790 = filterAdminsVoteByUnblockAction($acc397209790, $list97209790[3])
354- if (($size97209790 == 4))
355- then $acc497209790
363+ let $acc41007610146 = filterAdminsVoteByUnblockAction($acc31007610146, $list1007610146[3])
364+ if (($size1007610146 == 4))
365+ then $acc41007610146
356366 else {
357- let $acc597209790 = filterAdminsVoteByUnblockAction($acc497209790, $list97209790[4])
358- if (($size97209790 == 5))
359- then $acc597209790
367+ let $acc51007610146 = filterAdminsVoteByUnblockAction($acc41007610146, $list1007610146[4])
368+ if (($size1007610146 == 5))
369+ then $acc51007610146
360370 else {
361- let $acc697209790 = filterAdminsVoteByUnblockAction($acc597209790, $list97209790[5])
371+ let $acc61007610146 = filterAdminsVoteByUnblockAction($acc51007610146, $list1007610146[5])
362372 throw("List size exceed 5")
363373 }
364374 }
368378 }
369379 }
370380 let updateVotes = {
371- let $list98139882 = adminsListWithoutAccount
372- let $size98139882 = size($list98139882)
373- let $acc098139882 = nil
374- if (($size98139882 == 0))
375- then $acc098139882
381+ let $list1016910238 = adminsListWithoutAccount
382+ let $size1016910238 = size($list1016910238)
383+ let $acc01016910238 = nil
384+ if (($size1016910238 == 0))
385+ then $acc01016910238
376386 else {
377- let $acc198139882 = filterAdminsVoteByUpdateAction($acc098139882, $list98139882[0])
378- if (($size98139882 == 1))
379- then $acc198139882
387+ let $acc11016910238 = filterAdminsVoteByUpdateAction($acc01016910238, $list1016910238[0])
388+ if (($size1016910238 == 1))
389+ then $acc11016910238
380390 else {
381- let $acc298139882 = filterAdminsVoteByUpdateAction($acc198139882, $list98139882[1])
382- if (($size98139882 == 2))
383- then $acc298139882
391+ let $acc21016910238 = filterAdminsVoteByUpdateAction($acc11016910238, $list1016910238[1])
392+ if (($size1016910238 == 2))
393+ then $acc21016910238
384394 else {
385- let $acc398139882 = filterAdminsVoteByUpdateAction($acc298139882, $list98139882[2])
386- if (($size98139882 == 3))
387- then $acc398139882
395+ let $acc31016910238 = filterAdminsVoteByUpdateAction($acc21016910238, $list1016910238[2])
396+ if (($size1016910238 == 3))
397+ then $acc31016910238
388398 else {
389- let $acc498139882 = filterAdminsVoteByUpdateAction($acc398139882, $list98139882[3])
390- if (($size98139882 == 4))
391- then $acc498139882
399+ let $acc41016910238 = filterAdminsVoteByUpdateAction($acc31016910238, $list1016910238[3])
400+ if (($size1016910238 == 4))
401+ then $acc41016910238
392402 else {
393- let $acc598139882 = filterAdminsVoteByUpdateAction($acc498139882, $list98139882[4])
394- if (($size98139882 == 5))
395- then $acc598139882
403+ let $acc51016910238 = filterAdminsVoteByUpdateAction($acc41016910238, $list1016910238[4])
404+ if (($size1016910238 == 5))
405+ then $acc51016910238
396406 else {
397- let $acc698139882 = filterAdminsVoteByUpdateAction($acc598139882, $list98139882[5])
407+ let $acc61016910238 = filterAdminsVoteByUpdateAction($acc51016910238, $list1016910238[5])
398408 throw("List size exceed 5")
399409 }
400410 }
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 isInt (val) = match val {
4545 case a: Int =>
4646 true
4747 case _ =>
4848 false
4949 }
5050
5151
5252 func dropElementInJsonArray (array,element) = {
5353 let splitedArray = split(array, element)
5454 if ((take(splitedArray[1], 1) == ","))
5555 then (splitedArray[0] + drop(splitedArray[1], 1))
5656 else (dropRight(splitedArray[0], 1) + splitedArray[1])
5757 }
5858
5959
6060 func convertJsonArrayToList (jsonArray) = split(jsonArray, ",")
6161
6262
6363 let BLOCK = "block"
6464
6565 let UNBLOCK = "unblock"
6666
6767 let UPDATE = "update"
6868
6969 let OraclesKey = "oracles"
7070
7171 let AdminsKey = "admins"
7272
7373 let VoteIntervalKey = "vote_interval"
7474
7575 let CoefficientOracleKey = "coefficient_oracle"
7676
7777 let CoefficientAdminKey = "coefficient_admin"
7878
7979 let ScriptUpdateIntervalKey = "script_update_interval"
8080
8181 let ProvidingIntervalKey = "providing_interval"
8282
8383 let PriceKey = "price"
8484
8585 let PriceOffsetKey = "price_offset"
8686
8787 let IsPricePendingKey = "is_pending_price"
8888
8989 let IsBlockedKey = "is_blocked"
9090
9191 let OracleIsProvideKey = "oracle_is_provide_"
9292
9393 let OracleProvidePriceKey = "oracle_price_provide_"
9494
9595 let AdminVoteKey = "admin_vote_"
9696
9797 let ActionKey = "action"
9898
9999 let BlockExpireProvidingKey = "providing_expire_block"
100100
101101 let BlackSwarmPriceKey = "black_swarm_price"
102102
103103 let BlockExpireVoteKey = "vote_expire_block"
104104
105105 let ScriptUpdateBlockKey = "script_update_block"
106106
107+let PriceIndexKey = "price_index"
108+
107109 func getOracleIsProvideKey (owner) = (OracleIsProvideKey + owner)
108110
109111
110112 func getOracleProvidePriceKey (owner) = (OracleProvidePriceKey + owner)
111113
112114
113115 func getAdminVoteKey (owner) = (AdminVoteKey + owner)
114116
115117
116118 func getAdminVoteActionKey (owner) = ((getAdminVoteKey(owner) + "_") + ActionKey)
117119
118120
119121 func getBlackSwarmPriceKey (block) = ((BlackSwarmPriceKey + "_") + toString(block))
120122
121123
122124 func getPriceHistoryKey (block) = ((PriceKey + "_") + toString(block))
123125
124126
127+func getHeightPriceByIndexKey (index) = ((PriceIndexKey + "_") + toString(index))
128+
129+
125130 let price = getNumberByKey(PriceKey)
131+
132+let priceIndex = getNumberByKey(PriceIndexKey)
126133
127134 let providingInterval = getNumberByKey(ProvidingIntervalKey)
128135
129136 let blockExpireProviding = getNumberByKey(BlockExpireProvidingKey)
130137
131138 let blockExpireVote = getNumberByKey(BlockExpireVoteKey)
132139
133140 let scriptUpdateBlock = getNumberByKey(ScriptUpdateBlockKey)
134141
135142 let scriptUpdateInterval = getNumberByKey(ScriptUpdateIntervalKey)
136143
137144 let isPricePending = getBoolByKey(IsPricePendingKey)
138145
139146 let isBlocked = getBoolByKey(IsBlockedKey)
140147
141148 let bftCoefficientOracle = getNumberByKey(CoefficientOracleKey)
142149
143150 let bftCoefficientAdmin = getNumberByKey(CoefficientAdminKey)
144151
145152 let percentPriceOffset = getNumberByKey(PriceOffsetKey)
146153
147154 let voteInterval = getNumberByKey(VoteIntervalKey)
148155
149156 let oracles = getStringByKey(OraclesKey)
150157
151158 let admins = getStringByKey(AdminsKey)
152159
153160 let oraclesList = convertJsonArrayToList(oracles)
154161
155162 let adminsList = convertJsonArrayToList(admins)
156163
157164 func getAdminVoteAction (owner) = getStringByKey(getAdminVoteActionKey(owner))
158165
159166
160167 func isOracleProvide (owner) = getBoolByKey(getOracleIsProvideKey(owner))
161168
162169
163170 func isOracleProvideInt (owner) = if (isOracleProvide(owner))
164171 then 1
165172 else 0
166173
167174
168175 func getOracleProvidePrice (owner) = getNumberByKey(getOracleProvidePriceKey(owner))
169176
170177
171178 func isOracle (address) = match indexOf(oracles, address) {
172179 case _: Int =>
173180 true
174181 case _ =>
175182 false
176183 }
177184
178185
179186 func isAdmin (address) = match indexOf(admins, address) {
180187 case _: Int =>
181188 true
182189 case _ =>
183190 false
184191 }
185192
186193
187194 func sumOraclePrice (base,address) = (base + (getOracleProvidePrice(address) * isOracleProvideInt(address)))
188195
189196
190197 func filterAdminsVoteByAction (result,address,action) = address :: result
191198
192199
193200 func filterAdminsVoteByBlockAction (result,address) = filterAdminsVoteByAction(result, address, BLOCK)
194201
195202
196203 func filterAdminsVoteByUnblockAction (result,address) = filterAdminsVoteByAction(result, address, UNBLOCK)
197204
198205
199206 func filterAdminsVoteByUpdateAction (result,address) = filterAdminsVoteByAction(result, address, UPDATE)
200207
201208
202209 @Callable(i)
203210 func setCurrentPrice (newPrice) = {
204211 let account = toString(i.caller)
205212 let isOracleProvideList = [isOracleProvide(oraclesList[0]), isOracleProvide(oraclesList[1]), isOracleProvide(oraclesList[2]), isOracleProvide(oraclesList[3]), isOracleProvide(oraclesList[4])]
206213 let priceProvidingCount = ((((((if (isOracleProvideList[0])
207214 then 1
208215 else 0) + (if (isOracleProvideList[1])
209216 then 1
210217 else 0)) + (if (isOracleProvideList[2])
211218 then 1
212219 else 0)) + (if (isOracleProvideList[3])
213220 then 1
214221 else 0)) + (if (isOracleProvideList[4])
215222 then 1
216223 else 0)) + 1)
217224 if (isBlocked)
218225 then throw("contract is blocked")
219226 else if (!(isOracle(account)))
220227 then throw("permission denied")
221228 else if (if ((blockExpireProviding >= height))
222229 then isOracleProvide(account)
223230 else false)
224231 then throw("price is already provided")
225232 else if (if ((height > blockExpireProviding))
226233 then isPricePending
227234 else false)
228- then throw("use finilizeCurrentPrice")
235+ then throw("use finalizeCurrentPrice")
229236 else WriteSet([DataEntry(getOracleIsProvideKey(oraclesList[0]), if ((height > blockExpireProviding))
230237 then false
231238 else isOracleProvideList[0]), DataEntry(getOracleIsProvideKey(oraclesList[1]), if ((height > blockExpireProviding))
232239 then false
233240 else isOracleProvideList[1]), DataEntry(getOracleIsProvideKey(oraclesList[2]), if ((height > blockExpireProviding))
234241 then false
235242 else isOracleProvideList[2]), DataEntry(getOracleIsProvideKey(oraclesList[3]), if ((height > blockExpireProviding))
236243 then false
237244 else isOracleProvideList[3]), DataEntry(getOracleIsProvideKey(oraclesList[4]), if ((height > blockExpireProviding))
238245 then false
239246 else isOracleProvideList[4]), DataEntry(getOracleIsProvideKey(account), true), DataEntry(getOracleProvidePriceKey(account), newPrice), DataEntry(BlockExpireProvidingKey, if ((height > blockExpireProviding))
240247 then (height + providingInterval)
241248 else blockExpireProviding), DataEntry(IsPricePendingKey, if (if ((blockExpireProviding >= height))
242249 then (priceProvidingCount >= bftCoefficientOracle)
243250 else false)
244251 then true
245252 else isPricePending)])
246253 }
247254
248255
249256
250257 @Callable(i)
251258 func finilizeCurrentPrice () = {
252259 let isOracleProvideList = [isOracleProvide(oraclesList[0]), isOracleProvide(oraclesList[1]), isOracleProvide(oraclesList[2]), isOracleProvide(oraclesList[3]), isOracleProvide(oraclesList[4])]
253260 let priceProvidingCount = (((((if (isOracleProvideList[0])
254261 then 1
255262 else 0) + (if (isOracleProvideList[1])
256263 then 1
257264 else 0)) + (if (isOracleProvideList[2])
258265 then 1
259266 else 0)) + (if (isOracleProvideList[3])
260267 then 1
261268 else 0)) + (if (isOracleProvideList[4])
262269 then 1
263270 else 0))
264271 let priceSum = (((((getOracleProvidePrice(oraclesList[0]) * (if (isOracleProvideList[0])
265272 then 1
266273 else 0)) + (getOracleProvidePrice(oraclesList[1]) * (if (isOracleProvideList[1])
267274 then 1
268275 else 0))) + (getOracleProvidePrice(oraclesList[2]) * (if (isOracleProvideList[2])
269276 then 1
270277 else 0))) + (getOracleProvidePrice(oraclesList[3]) * (if (isOracleProvideList[3])
271278 then 1
272279 else 0))) + (getOracleProvidePrice(oraclesList[4]) * (if (isOracleProvideList[4])
273280 then 1
274281 else 0)))
275282 let newPrice = (priceSum / priceProvidingCount)
276283 if (isBlocked)
277284 then throw("contract is blocked")
278285 else if (if (!(isPricePending))
279286 then true
280287 else (blockExpireProviding >= height))
281288 then throw("wait for the end of the price providing")
282289 else if ((bftCoefficientOracle > priceProvidingCount))
283290 then throw("2/3 oracles need to set a price")
284291 else if (if ((newPrice >= (price + ((price * percentPriceOffset) / 100))))
285292 then true
286293 else ((price - ((price * percentPriceOffset) / 100)) >= newPrice))
287294 then WriteSet([DataEntry(IsBlockedKey, true), DataEntry(getBlackSwarmPriceKey(height), newPrice)])
288- else WriteSet([DataEntry(PriceKey, newPrice), DataEntry(getPriceHistoryKey(height), newPrice), DataEntry(IsPricePendingKey, false)])
295+ else {
296+ let newPriceIndex = (priceIndex + 1)
297+ WriteSet([DataEntry(PriceKey, newPrice), DataEntry(getPriceHistoryKey(height), newPrice), DataEntry(IsPricePendingKey, false), DataEntry(PriceIndexKey, newPriceIndex), DataEntry(getHeightPriceByIndexKey(newPriceIndex), height)])
298+ }
289299 }
290300
291301
292302
293303 @Callable(i)
294304 func vote (action) = {
295305 let account = toString(i.caller)
296306 let adminsListWithoutAccount = convertJsonArrayToList(dropElementInJsonArray(admins, account))
297307 let lastAction = getAdminVoteAction(account)
298308 let blockVotes = {
299- let $list96289696 = adminsListWithoutAccount
300- let $size96289696 = size($list96289696)
301- let $acc096289696 = nil
302- if (($size96289696 == 0))
303- then $acc096289696
309+ let $list998410052 = adminsListWithoutAccount
310+ let $size998410052 = size($list998410052)
311+ let $acc0998410052 = nil
312+ if (($size998410052 == 0))
313+ then $acc0998410052
304314 else {
305- let $acc196289696 = filterAdminsVoteByBlockAction($acc096289696, $list96289696[0])
306- if (($size96289696 == 1))
307- then $acc196289696
315+ let $acc1998410052 = filterAdminsVoteByBlockAction($acc0998410052, $list998410052[0])
316+ if (($size998410052 == 1))
317+ then $acc1998410052
308318 else {
309- let $acc296289696 = filterAdminsVoteByBlockAction($acc196289696, $list96289696[1])
310- if (($size96289696 == 2))
311- then $acc296289696
319+ let $acc2998410052 = filterAdminsVoteByBlockAction($acc1998410052, $list998410052[1])
320+ if (($size998410052 == 2))
321+ then $acc2998410052
312322 else {
313- let $acc396289696 = filterAdminsVoteByBlockAction($acc296289696, $list96289696[2])
314- if (($size96289696 == 3))
315- then $acc396289696
323+ let $acc3998410052 = filterAdminsVoteByBlockAction($acc2998410052, $list998410052[2])
324+ if (($size998410052 == 3))
325+ then $acc3998410052
316326 else {
317- let $acc496289696 = filterAdminsVoteByBlockAction($acc396289696, $list96289696[3])
318- if (($size96289696 == 4))
319- then $acc496289696
327+ let $acc4998410052 = filterAdminsVoteByBlockAction($acc3998410052, $list998410052[3])
328+ if (($size998410052 == 4))
329+ then $acc4998410052
320330 else {
321- let $acc596289696 = filterAdminsVoteByBlockAction($acc496289696, $list96289696[4])
322- if (($size96289696 == 5))
323- then $acc596289696
331+ let $acc5998410052 = filterAdminsVoteByBlockAction($acc4998410052, $list998410052[4])
332+ if (($size998410052 == 5))
333+ then $acc5998410052
324334 else {
325- let $acc696289696 = filterAdminsVoteByBlockAction($acc596289696, $list96289696[5])
335+ let $acc6998410052 = filterAdminsVoteByBlockAction($acc5998410052, $list998410052[5])
326336 throw("List size exceed 5")
327337 }
328338 }
329339 }
330340 }
331341 }
332342 }
333343 }
334344 let unblockVotes = {
335- let $list97209790 = adminsListWithoutAccount
336- let $size97209790 = size($list97209790)
337- let $acc097209790 = nil
338- if (($size97209790 == 0))
339- then $acc097209790
345+ let $list1007610146 = adminsListWithoutAccount
346+ let $size1007610146 = size($list1007610146)
347+ let $acc01007610146 = nil
348+ if (($size1007610146 == 0))
349+ then $acc01007610146
340350 else {
341- let $acc197209790 = filterAdminsVoteByUnblockAction($acc097209790, $list97209790[0])
342- if (($size97209790 == 1))
343- then $acc197209790
351+ let $acc11007610146 = filterAdminsVoteByUnblockAction($acc01007610146, $list1007610146[0])
352+ if (($size1007610146 == 1))
353+ then $acc11007610146
344354 else {
345- let $acc297209790 = filterAdminsVoteByUnblockAction($acc197209790, $list97209790[1])
346- if (($size97209790 == 2))
347- then $acc297209790
355+ let $acc21007610146 = filterAdminsVoteByUnblockAction($acc11007610146, $list1007610146[1])
356+ if (($size1007610146 == 2))
357+ then $acc21007610146
348358 else {
349- let $acc397209790 = filterAdminsVoteByUnblockAction($acc297209790, $list97209790[2])
350- if (($size97209790 == 3))
351- then $acc397209790
359+ let $acc31007610146 = filterAdminsVoteByUnblockAction($acc21007610146, $list1007610146[2])
360+ if (($size1007610146 == 3))
361+ then $acc31007610146
352362 else {
353- let $acc497209790 = filterAdminsVoteByUnblockAction($acc397209790, $list97209790[3])
354- if (($size97209790 == 4))
355- then $acc497209790
363+ let $acc41007610146 = filterAdminsVoteByUnblockAction($acc31007610146, $list1007610146[3])
364+ if (($size1007610146 == 4))
365+ then $acc41007610146
356366 else {
357- let $acc597209790 = filterAdminsVoteByUnblockAction($acc497209790, $list97209790[4])
358- if (($size97209790 == 5))
359- then $acc597209790
367+ let $acc51007610146 = filterAdminsVoteByUnblockAction($acc41007610146, $list1007610146[4])
368+ if (($size1007610146 == 5))
369+ then $acc51007610146
360370 else {
361- let $acc697209790 = filterAdminsVoteByUnblockAction($acc597209790, $list97209790[5])
371+ let $acc61007610146 = filterAdminsVoteByUnblockAction($acc51007610146, $list1007610146[5])
362372 throw("List size exceed 5")
363373 }
364374 }
365375 }
366376 }
367377 }
368378 }
369379 }
370380 let updateVotes = {
371- let $list98139882 = adminsListWithoutAccount
372- let $size98139882 = size($list98139882)
373- let $acc098139882 = nil
374- if (($size98139882 == 0))
375- then $acc098139882
381+ let $list1016910238 = adminsListWithoutAccount
382+ let $size1016910238 = size($list1016910238)
383+ let $acc01016910238 = nil
384+ if (($size1016910238 == 0))
385+ then $acc01016910238
376386 else {
377- let $acc198139882 = filterAdminsVoteByUpdateAction($acc098139882, $list98139882[0])
378- if (($size98139882 == 1))
379- then $acc198139882
387+ let $acc11016910238 = filterAdminsVoteByUpdateAction($acc01016910238, $list1016910238[0])
388+ if (($size1016910238 == 1))
389+ then $acc11016910238
380390 else {
381- let $acc298139882 = filterAdminsVoteByUpdateAction($acc198139882, $list98139882[1])
382- if (($size98139882 == 2))
383- then $acc298139882
391+ let $acc21016910238 = filterAdminsVoteByUpdateAction($acc11016910238, $list1016910238[1])
392+ if (($size1016910238 == 2))
393+ then $acc21016910238
384394 else {
385- let $acc398139882 = filterAdminsVoteByUpdateAction($acc298139882, $list98139882[2])
386- if (($size98139882 == 3))
387- then $acc398139882
395+ let $acc31016910238 = filterAdminsVoteByUpdateAction($acc21016910238, $list1016910238[2])
396+ if (($size1016910238 == 3))
397+ then $acc31016910238
388398 else {
389- let $acc498139882 = filterAdminsVoteByUpdateAction($acc398139882, $list98139882[3])
390- if (($size98139882 == 4))
391- then $acc498139882
399+ let $acc41016910238 = filterAdminsVoteByUpdateAction($acc31016910238, $list1016910238[3])
400+ if (($size1016910238 == 4))
401+ then $acc41016910238
392402 else {
393- let $acc598139882 = filterAdminsVoteByUpdateAction($acc498139882, $list98139882[4])
394- if (($size98139882 == 5))
395- then $acc598139882
403+ let $acc51016910238 = filterAdminsVoteByUpdateAction($acc41016910238, $list1016910238[4])
404+ if (($size1016910238 == 5))
405+ then $acc51016910238
396406 else {
397- let $acc698139882 = filterAdminsVoteByUpdateAction($acc598139882, $list98139882[5])
407+ let $acc61016910238 = filterAdminsVoteByUpdateAction($acc51016910238, $list1016910238[5])
398408 throw("List size exceed 5")
399409 }
400410 }
401411 }
402412 }
403413 }
404414 }
405415 }
406416 let blockVoteCount = (size(blockVotes) + (if ((action == BLOCK))
407417 then 1
408418 else 0))
409419 let unblockVoteCount = (size(unblockVotes) + (if ((action == UNBLOCK))
410420 then 1
411421 else 0))
412422 let updateVotesCount = (size(updateVotes) + (if ((action == UPDATE))
413423 then 1
414424 else 0))
415425 if (if ((blockVoteCount >= bftCoefficientAdmin))
416426 then true
417427 else (unblockVoteCount >= bftCoefficientAdmin))
418428 then WriteSet([DataEntry(IsBlockedKey, if ((blockVoteCount >= bftCoefficientAdmin))
419429 then true
420430 else false), DataEntry(BlockExpireVoteKey, 0), DataEntry(BlockExpireProvidingKey, 0), DataEntry(IsPricePendingKey, false), DataEntry(getAdminVoteActionKey(adminsListWithoutAccount[0]), ""), DataEntry(getAdminVoteActionKey(adminsListWithoutAccount[1]), ""), DataEntry(getAdminVoteActionKey(adminsListWithoutAccount[2]), ""), DataEntry(getAdminVoteActionKey(adminsListWithoutAccount[3]), "")])
421431 else if ((updateVotesCount > bftCoefficientAdmin))
422432 then WriteSet([DataEntry(BlockExpireVoteKey, 0), DataEntry(BlockExpireProvidingKey, 0), DataEntry(ScriptUpdateBlockKey, (height + scriptUpdateInterval)), DataEntry(getAdminVoteActionKey(adminsListWithoutAccount[0]), ""), DataEntry(getAdminVoteActionKey(adminsListWithoutAccount[1]), ""), DataEntry(getAdminVoteActionKey(adminsListWithoutAccount[2]), ""), DataEntry(getAdminVoteActionKey(adminsListWithoutAccount[3]), "")])
423433 else if ((height > blockExpireVote))
424434 then WriteSet([DataEntry(BlockExpireVoteKey, (height + voteInterval)), DataEntry(getAdminVoteActionKey(account), action), DataEntry(getAdminVoteActionKey(adminsListWithoutAccount[0]), ""), DataEntry(getAdminVoteActionKey(adminsListWithoutAccount[1]), ""), DataEntry(getAdminVoteActionKey(adminsListWithoutAccount[2]), ""), DataEntry(getAdminVoteActionKey(adminsListWithoutAccount[3]), "")])
425435 else WriteSet([DataEntry(getAdminVoteActionKey(account), action)])
426436 }
427437
428438

github/deemru/w8io/786bc32 
131.00 ms