2019.10.15 19:48 [1751510] smart account 3P5Bfd58PPfNvBM2Hy8QfbcDqMeNtzg7KfP > SELF 0.00000000 Waves

{ "type": 13, "id": "BP8YWA6WRZtbAFoSLVYoJa3G8soMcyohrG18KYjkMi1E", "fee": 1400000, "feeAssetId": null, "timestamp": 1571158165796, "version": 1, "sender": "3P5Bfd58PPfNvBM2Hy8QfbcDqMeNtzg7KfP", "senderPublicKey": "GqXuX2WHNr3WUqTaeH2YCySFY45NAJoE9RmY9bEWkzh", "proofs": [ "4kNfAo9YtXm3WdF91wx9ZD3W89eiUxh2UEp12MpQMCraBfaKeYVGgDhcnEpcNfMWx5hn5RjB53Mhe8W7kdkjWVgt" ], "script": "base64:AAIDAAAAAAAAAA4IARIDCgEBEgASAwoBCAAAAD8BAAAADmdldE51bWJlckJ5S2V5AAAAAQAAAANrZXkEAAAAByRtYXRjaDAJAAQaAAAAAgUAAAAEdGhpcwUAAAADa2V5AwkAAAEAAAACBQAAAAckbWF0Y2gwAgAAAANJbnQEAAAAAWEFAAAAByRtYXRjaDAFAAAAAWEAAAAAAAAAAAABAAAADmdldFN0cmluZ0J5S2V5AAAAAQAAAANrZXkEAAAAByRtYXRjaDAJAAQdAAAAAgUAAAAEdGhpcwUAAAADa2V5AwkAAAEAAAACBQAAAAckbWF0Y2gwAgAAAAZTdHJpbmcEAAAAAWEFAAAAByRtYXRjaDAFAAAAAWECAAAAAAEAAAAMZ2V0Qm9vbEJ5S2V5AAAAAQAAAANrZXkEAAAAByRtYXRjaDAJAAQbAAAAAgUAAAAEdGhpcwUAAAADa2V5AwkAAAEAAAACBQAAAAckbWF0Y2gwAgAAAAdCb29sZWFuBAAAAAFhBQAAAAckbWF0Y2gwBQAAAAFhBwEAAAAYZ2V0TnVtYmVyQnlBZGRyZXNzQW5kS2V5AAAAAgAAAAdhZGRyZXNzAAAAA2tleQQAAAAHJG1hdGNoMAkABBoAAAACBQAAAAdhZGRyZXNzBQAAAANrZXkDCQAAAQAAAAIFAAAAByRtYXRjaDACAAAAA0ludAQAAAABYQUAAAAHJG1hdGNoMAUAAAABYQAAAAAAAAAAAAEAAAAYZ2V0U3RyaW5nQnlBZGRyZXNzQW5kS2V5AAAAAgAAAAdhZGRyZXNzAAAAA2tleQQAAAAHJG1hdGNoMAkABB0AAAACBQAAAAdhZGRyZXNzBQAAAANrZXkDCQAAAQAAAAIFAAAAByRtYXRjaDACAAAABlN0cmluZwQAAAABYQUAAAAHJG1hdGNoMAUAAAABYQIAAAAAAQAAAAVpc0ludAAAAAEAAAADdmFsBAAAAAckbWF0Y2gwBQAAAAN2YWwDCQAAAQAAAAIFAAAAByRtYXRjaDACAAAAA0ludAQAAAABYQUAAAAHJG1hdGNoMAYHAQAAABZkcm9wRWxlbWVudEluSnNvbkFycmF5AAAAAgAAAAVhcnJheQAAAAdlbGVtZW50BAAAAAxzcGxpdGVkQXJyYXkJAAS1AAAAAgUAAAAFYXJyYXkFAAAAB2VsZW1lbnQDCQAAAAAAAAIJAAEvAAAAAgkAAZEAAAACBQAAAAxzcGxpdGVkQXJyYXkAAAAAAAAAAAEAAAAAAAAAAAECAAAAASwJAAEsAAAAAgkAAZEAAAACBQAAAAxzcGxpdGVkQXJyYXkAAAAAAAAAAAAJAAEwAAAAAgkAAZEAAAACBQAAAAxzcGxpdGVkQXJyYXkAAAAAAAAAAAEAAAAAAAAAAAEJAAEsAAAAAgkBAAAACWRyb3BSaWdodAAAAAIJAAGRAAAAAgUAAAAMc3BsaXRlZEFycmF5AAAAAAAAAAAAAAAAAAAAAAABCQABkQAAAAIFAAAADHNwbGl0ZWRBcnJheQAAAAAAAAAAAQEAAAAWY29udmVydEpzb25BcnJheVRvTGlzdAAAAAEAAAAJanNvbkFycmF5CQAEtQAAAAIFAAAACWpzb25BcnJheQIAAAABLAAAAAAFQkxPQ0sCAAAABWJsb2NrAAAAAAdVTkJMT0NLAgAAAAd1bmJsb2NrAAAAAAZVUERBVEUCAAAABnVwZGF0ZQAAAAAKT3JhY2xlc0tleQIAAAAHb3JhY2xlcwAAAAAJQWRtaW5zS2V5AgAAAAZhZG1pbnMAAAAAD1ZvdGVJbnRlcnZhbEtleQIAAAANdm90ZV9pbnRlcnZhbAAAAAAUQ29lZmZpY2llbnRPcmFjbGVLZXkCAAAAEmNvZWZmaWNpZW50X29yYWNsZQAAAAATQ29lZmZpY2llbnRBZG1pbktleQIAAAARY29lZmZpY2llbnRfYWRtaW4AAAAAF1NjcmlwdFVwZGF0ZUludGVydmFsS2V5AgAAABZzY3JpcHRfdXBkYXRlX2ludGVydmFsAAAAABRQcm92aWRpbmdJbnRlcnZhbEtleQIAAAAScHJvdmlkaW5nX2ludGVydmFsAAAAAAhQcmljZUtleQIAAAAFcHJpY2UAAAAADlByaWNlT2Zmc2V0S2V5AgAAAAxwcmljZV9vZmZzZXQAAAAAEUlzUHJpY2VQZW5kaW5nS2V5AgAAABBpc19wZW5kaW5nX3ByaWNlAAAAAAxJc0Jsb2NrZWRLZXkCAAAACmlzX2Jsb2NrZWQAAAAAEk9yYWNsZUlzUHJvdmlkZUtleQIAAAASb3JhY2xlX2lzX3Byb3ZpZGVfAAAAABVPcmFjbGVQcm92aWRlUHJpY2VLZXkCAAAAFW9yYWNsZV9wcmljZV9wcm92aWRlXwAAAAAMQWRtaW5Wb3RlS2V5AgAAAAthZG1pbl92b3RlXwAAAAAJQWN0aW9uS2V5AgAAAAZhY3Rpb24AAAAAF0Jsb2NrRXhwaXJlUHJvdmlkaW5nS2V5AgAAABZwcm92aWRpbmdfZXhwaXJlX2Jsb2NrAAAAABJCbGFja1N3YXJtUHJpY2VLZXkCAAAAEWJsYWNrX3N3YXJtX3ByaWNlAAAAABJCbG9ja0V4cGlyZVZvdGVLZXkCAAAAEXZvdGVfZXhwaXJlX2Jsb2NrAAAAABRTY3JpcHRVcGRhdGVCbG9ja0tleQIAAAATc2NyaXB0X3VwZGF0ZV9ibG9jawEAAAAVZ2V0T3JhY2xlSXNQcm92aWRlS2V5AAAAAQAAAAVvd25lcgkAASwAAAACBQAAABJPcmFjbGVJc1Byb3ZpZGVLZXkFAAAABW93bmVyAQAAABhnZXRPcmFjbGVQcm92aWRlUHJpY2VLZXkAAAABAAAABW93bmVyCQABLAAAAAIFAAAAFU9yYWNsZVByb3ZpZGVQcmljZUtleQUAAAAFb3duZXIBAAAAD2dldEFkbWluVm90ZUtleQAAAAEAAAAFb3duZXIJAAEsAAAAAgUAAAAMQWRtaW5Wb3RlS2V5BQAAAAVvd25lcgEAAAAVZ2V0QWRtaW5Wb3RlQWN0aW9uS2V5AAAAAQAAAAVvd25lcgkAASwAAAACCQABLAAAAAIJAQAAAA9nZXRBZG1pblZvdGVLZXkAAAABBQAAAAVvd25lcgIAAAABXwUAAAAJQWN0aW9uS2V5AQAAABVnZXRCbGFja1N3YXJtUHJpY2VLZXkAAAABAAAABWJsb2NrCQABLAAAAAIJAAEsAAAAAgUAAAASQmxhY2tTd2FybVByaWNlS2V5AgAAAAFfCQABpAAAAAEFAAAABWJsb2NrAQAAABJnZXRQcmljZUhpc3RvcnlLZXkAAAABAAAABWJsb2NrCQABLAAAAAIJAAEsAAAAAgUAAAAIUHJpY2VLZXkCAAAAAV8JAAGkAAAAAQUAAAAFYmxvY2sAAAAABXByaWNlCQEAAAAOZ2V0TnVtYmVyQnlLZXkAAAABBQAAAAhQcmljZUtleQAAAAARcHJvdmlkaW5nSW50ZXJ2YWwJAQAAAA5nZXROdW1iZXJCeUtleQAAAAEFAAAAFFByb3ZpZGluZ0ludGVydmFsS2V5AAAAABRibG9ja0V4cGlyZVByb3ZpZGluZwkBAAAADmdldE51bWJlckJ5S2V5AAAAAQUAAAAXQmxvY2tFeHBpcmVQcm92aWRpbmdLZXkAAAAAD2Jsb2NrRXhwaXJlVm90ZQkBAAAADmdldE51bWJlckJ5S2V5AAAAAQUAAAASQmxvY2tFeHBpcmVWb3RlS2V5AAAAABFzY3JpcHRVcGRhdGVCbG9jawkBAAAADmdldE51bWJlckJ5S2V5AAAAAQUAAAAUU2NyaXB0VXBkYXRlQmxvY2tLZXkAAAAAFHNjcmlwdFVwZGF0ZUludGVydmFsCQEAAAAOZ2V0TnVtYmVyQnlLZXkAAAABBQAAABdTY3JpcHRVcGRhdGVJbnRlcnZhbEtleQAAAAAOaXNQcmljZVBlbmRpbmcJAQAAAAxnZXRCb29sQnlLZXkAAAABBQAAABFJc1ByaWNlUGVuZGluZ0tleQAAAAAJaXNCbG9ja2VkCQEAAAAMZ2V0Qm9vbEJ5S2V5AAAAAQUAAAAMSXNCbG9ja2VkS2V5AAAAABRiZnRDb2VmZmljaWVudE9yYWNsZQkBAAAADmdldE51bWJlckJ5S2V5AAAAAQUAAAAUQ29lZmZpY2llbnRPcmFjbGVLZXkAAAAAE2JmdENvZWZmaWNpZW50QWRtaW4JAQAAAA5nZXROdW1iZXJCeUtleQAAAAEFAAAAE0NvZWZmaWNpZW50QWRtaW5LZXkAAAAAEnBlcmNlbnRQcmljZU9mZnNldAkBAAAADmdldE51bWJlckJ5S2V5AAAAAQUAAAAOUHJpY2VPZmZzZXRLZXkAAAAADHZvdGVJbnRlcnZhbAkBAAAADmdldE51bWJlckJ5S2V5AAAAAQUAAAAPVm90ZUludGVydmFsS2V5AAAAAAdvcmFjbGVzCQEAAAAOZ2V0U3RyaW5nQnlLZXkAAAABBQAAAApPcmFjbGVzS2V5AAAAAAZhZG1pbnMJAQAAAA5nZXRTdHJpbmdCeUtleQAAAAEFAAAACUFkbWluc0tleQAAAAALb3JhY2xlc0xpc3QJAQAAABZjb252ZXJ0SnNvbkFycmF5VG9MaXN0AAAAAQUAAAAHb3JhY2xlcwAAAAAKYWRtaW5zTGlzdAkBAAAAFmNvbnZlcnRKc29uQXJyYXlUb0xpc3QAAAABBQAAAAZhZG1pbnMBAAAAEmdldEFkbWluVm90ZUFjdGlvbgAAAAEAAAAFb3duZXIJAQAAAA5nZXRTdHJpbmdCeUtleQAAAAEJAQAAABVnZXRBZG1pblZvdGVBY3Rpb25LZXkAAAABBQAAAAVvd25lcgEAAAAPaXNPcmFjbGVQcm92aWRlAAAAAQAAAAVvd25lcgkBAAAADGdldEJvb2xCeUtleQAAAAEJAQAAABVnZXRPcmFjbGVJc1Byb3ZpZGVLZXkAAAABBQAAAAVvd25lcgEAAAASaXNPcmFjbGVQcm92aWRlSW50AAAAAQAAAAVvd25lcgMJAQAAAA9pc09yYWNsZVByb3ZpZGUAAAABBQAAAAVvd25lcgAAAAAAAAAAAQAAAAAAAAAAAAEAAAAVZ2V0T3JhY2xlUHJvdmlkZVByaWNlAAAAAQAAAAVvd25lcgkBAAAADmdldE51bWJlckJ5S2V5AAAAAQkBAAAAGGdldE9yYWNsZVByb3ZpZGVQcmljZUtleQAAAAEFAAAABW93bmVyAQAAAAhpc09yYWNsZQAAAAEAAAAHYWRkcmVzcwQAAAAHJG1hdGNoMAkABLMAAAACBQAAAAdvcmFjbGVzBQAAAAdhZGRyZXNzAwkAAAEAAAACBQAAAAckbWF0Y2gwAgAAAANJbnQGBwEAAAAHaXNBZG1pbgAAAAEAAAAHYWRkcmVzcwQAAAAHJG1hdGNoMAkABLMAAAACBQAAAAZhZG1pbnMFAAAAB2FkZHJlc3MDCQAAAQAAAAIFAAAAByRtYXRjaDACAAAAA0ludAYHAQAAAA5zdW1PcmFjbGVQcmljZQAAAAIAAAAEYmFzZQAAAAdhZGRyZXNzCQAAZAAAAAIFAAAABGJhc2UJAABoAAAAAgkBAAAAFWdldE9yYWNsZVByb3ZpZGVQcmljZQAAAAEFAAAAB2FkZHJlc3MJAQAAABJpc09yYWNsZVByb3ZpZGVJbnQAAAABBQAAAAdhZGRyZXNzAQAAABhmaWx0ZXJBZG1pbnNWb3RlQnlBY3Rpb24AAAADAAAABnJlc3VsdAAAAAdhZGRyZXNzAAAABmFjdGlvbgkABEwAAAACBQAAAAdhZGRyZXNzBQAAAAZyZXN1bHQBAAAAHWZpbHRlckFkbWluc1ZvdGVCeUJsb2NrQWN0aW9uAAAAAgAAAAZyZXN1bHQAAAAHYWRkcmVzcwkBAAAAGGZpbHRlckFkbWluc1ZvdGVCeUFjdGlvbgAAAAMFAAAABnJlc3VsdAUAAAAHYWRkcmVzcwUAAAAFQkxPQ0sBAAAAH2ZpbHRlckFkbWluc1ZvdGVCeVVuYmxvY2tBY3Rpb24AAAACAAAABnJlc3VsdAAAAAdhZGRyZXNzCQEAAAAYZmlsdGVyQWRtaW5zVm90ZUJ5QWN0aW9uAAAAAwUAAAAGcmVzdWx0BQAAAAdhZGRyZXNzBQAAAAdVTkJMT0NLAQAAAB5maWx0ZXJBZG1pbnNWb3RlQnlVcGRhdGVBY3Rpb24AAAACAAAABnJlc3VsdAAAAAdhZGRyZXNzCQEAAAAYZmlsdGVyQWRtaW5zVm90ZUJ5QWN0aW9uAAAAAwUAAAAGcmVzdWx0BQAAAAdhZGRyZXNzBQAAAAZVUERBVEUAAAADAAAAAWkBAAAAD3NldEN1cnJlbnRQcmljZQAAAAEAAAAIbmV3UHJpY2UEAAAAB2FjY291bnQJAAQlAAAAAQgFAAAAAWkAAAAGY2FsbGVyBAAAABNpc09yYWNsZVByb3ZpZGVMaXN0CQAETAAAAAIJAQAAAA9pc09yYWNsZVByb3ZpZGUAAAABCQABkQAAAAIFAAAAC29yYWNsZXNMaXN0AAAAAAAAAAAACQAETAAAAAIJAQAAAA9pc09yYWNsZVByb3ZpZGUAAAABCQABkQAAAAIFAAAAC29yYWNsZXNMaXN0AAAAAAAAAAABCQAETAAAAAIJAQAAAA9pc09yYWNsZVByb3ZpZGUAAAABCQABkQAAAAIFAAAAC29yYWNsZXNMaXN0AAAAAAAAAAACCQAETAAAAAIJAQAAAA9pc09yYWNsZVByb3ZpZGUAAAABCQABkQAAAAIFAAAAC29yYWNsZXNMaXN0AAAAAAAAAAADCQAETAAAAAIJAQAAAA9pc09yYWNsZVByb3ZpZGUAAAABCQABkQAAAAIFAAAAC29yYWNsZXNMaXN0AAAAAAAAAAAEBQAAAANuaWwEAAAAE3ByaWNlUHJvdmlkaW5nQ291bnQJAABkAAAAAgkAAGQAAAACCQAAZAAAAAIJAABkAAAAAgkAAGQAAAACAwkAAZEAAAACBQAAABNpc09yYWNsZVByb3ZpZGVMaXN0AAAAAAAAAAAAAAAAAAAAAAABAAAAAAAAAAAAAwkAAZEAAAACBQAAABNpc09yYWNsZVByb3ZpZGVMaXN0AAAAAAAAAAABAAAAAAAAAAABAAAAAAAAAAAAAwkAAZEAAAACBQAAABNpc09yYWNsZVByb3ZpZGVMaXN0AAAAAAAAAAACAAAAAAAAAAABAAAAAAAAAAAAAwkAAZEAAAACBQAAABNpc09yYWNsZVByb3ZpZGVMaXN0AAAAAAAAAAADAAAAAAAAAAABAAAAAAAAAAAAAwkAAZEAAAACBQAAABNpc09yYWNsZVByb3ZpZGVMaXN0AAAAAAAAAAAEAAAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAABAwUAAAAJaXNCbG9ja2VkCQAAAgAAAAECAAAAE2NvbnRyYWN0IGlzIGJsb2NrZWQDCQEAAAABIQAAAAEJAQAAAAhpc09yYWNsZQAAAAEFAAAAB2FjY291bnQJAAACAAAAAQIAAAARcGVybWlzc2lvbiBkZW5pZWQDAwkAAGcAAAACBQAAABRibG9ja0V4cGlyZVByb3ZpZGluZwUAAAAGaGVpZ2h0CQEAAAAPaXNPcmFjbGVQcm92aWRlAAAAAQUAAAAHYWNjb3VudAcJAAACAAAAAQIAAAAZcHJpY2UgaXMgYWxyZWFkeSBwcm92aWRlZAMDCQAAZgAAAAIFAAAABmhlaWdodAUAAAAUYmxvY2tFeHBpcmVQcm92aWRpbmcFAAAADmlzUHJpY2VQZW5kaW5nBwkAAAIAAAABAgAAABh1c2UgZmluaWxpemVDdXJyZW50UHJpY2UJAQAAAAhXcml0ZVNldAAAAAEJAARMAAAAAgkBAAAACURhdGFFbnRyeQAAAAIJAQAAABVnZXRPcmFjbGVJc1Byb3ZpZGVLZXkAAAABCQABkQAAAAIFAAAAC29yYWNsZXNMaXN0AAAAAAAAAAAAAwkAAGYAAAACBQAAAAZoZWlnaHQFAAAAFGJsb2NrRXhwaXJlUHJvdmlkaW5nBwkAAZEAAAACBQAAABNpc09yYWNsZVByb3ZpZGVMaXN0AAAAAAAAAAAACQAETAAAAAIJAQAAAAlEYXRhRW50cnkAAAACCQEAAAAVZ2V0T3JhY2xlSXNQcm92aWRlS2V5AAAAAQkAAZEAAAACBQAAAAtvcmFjbGVzTGlzdAAAAAAAAAAAAQMJAABmAAAAAgUAAAAGaGVpZ2h0BQAAABRibG9ja0V4cGlyZVByb3ZpZGluZwcJAAGRAAAAAgUAAAATaXNPcmFjbGVQcm92aWRlTGlzdAAAAAAAAAAAAQkABEwAAAACCQEAAAAJRGF0YUVudHJ5AAAAAgkBAAAAFWdldE9yYWNsZUlzUHJvdmlkZUtleQAAAAEJAAGRAAAAAgUAAAALb3JhY2xlc0xpc3QAAAAAAAAAAAIDCQAAZgAAAAIFAAAABmhlaWdodAUAAAAUYmxvY2tFeHBpcmVQcm92aWRpbmcHCQABkQAAAAIFAAAAE2lzT3JhY2xlUHJvdmlkZUxpc3QAAAAAAAAAAAIJAARMAAAAAgkBAAAACURhdGFFbnRyeQAAAAIJAQAAABVnZXRPcmFjbGVJc1Byb3ZpZGVLZXkAAAABCQABkQAAAAIFAAAAC29yYWNsZXNMaXN0AAAAAAAAAAADAwkAAGYAAAACBQAAAAZoZWlnaHQFAAAAFGJsb2NrRXhwaXJlUHJvdmlkaW5nBwkAAZEAAAACBQAAABNpc09yYWNsZVByb3ZpZGVMaXN0AAAAAAAAAAADCQAETAAAAAIJAQAAAAlEYXRhRW50cnkAAAACCQEAAAAVZ2V0T3JhY2xlSXNQcm92aWRlS2V5AAAAAQkAAZEAAAACBQAAAAtvcmFjbGVzTGlzdAAAAAAAAAAABAMJAABmAAAAAgUAAAAGaGVpZ2h0BQAAABRibG9ja0V4cGlyZVByb3ZpZGluZwcJAAGRAAAAAgUAAAATaXNPcmFjbGVQcm92aWRlTGlzdAAAAAAAAAAABAkABEwAAAACCQEAAAAJRGF0YUVudHJ5AAAAAgkBAAAAFWdldE9yYWNsZUlzUHJvdmlkZUtleQAAAAEFAAAAB2FjY291bnQGCQAETAAAAAIJAQAAAAlEYXRhRW50cnkAAAACCQEAAAAYZ2V0T3JhY2xlUHJvdmlkZVByaWNlS2V5AAAAAQUAAAAHYWNjb3VudAUAAAAIbmV3UHJpY2UJAARMAAAAAgkBAAAACURhdGFFbnRyeQAAAAIFAAAAF0Jsb2NrRXhwaXJlUHJvdmlkaW5nS2V5AwkAAGYAAAACBQAAAAZoZWlnaHQFAAAAFGJsb2NrRXhwaXJlUHJvdmlkaW5nCQAAZAAAAAIFAAAABmhlaWdodAUA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AAABCQEAAAAWZHJvcEVsZW1lbnRJbkpzb25BcnJheQAAAAIFAAAABmFkbWlucwUAAAAHYWNjb3VudAQAAAAKbGFzdEFjdGlvbgkBAAAAEmdldEFkbWluVm90ZUFjdGlvbgAAAAEFAAAAB2FjY291bnQEAAAACmJsb2NrVm90ZXMEAAAADSRsaXN0OTYyODk2OTYFAAAAGGFkbWluc0xpc3RXaXRob3V0QWNjb3VudAQAAAANJHNpemU5NjI4OTY5NgkAAZAAAAABBQAAAA0kbGlzdDk2Mjg5Njk2BAAAAA0kYWNjMDk2Mjg5Njk2BQAAAANuaWwDCQAAAAAAAAIFAAAADSRzaXplOTYyODk2OTYAAAAAAAAAAAAFAAAADSRhY2MwOTYyODk2OTYEAAAADSRhY2MxOTYyODk2OTYJAQAAAB1maWx0ZXJBZG1pbnNWb3RlQnlCbG9ja0FjdGlvbgAAAAIFAAAADSRhY2MwOTYyODk2OTYJAAGRAAAAAgUAAAANJGxpc3Q5NjI4OTY5NgAAAAAAAAAAAAMJAAAAAAAAAgUAAAANJHNpemU5NjI4OTY5NgAAAAAAAAAAAQUAAAANJGFjYzE5NjI4OTY5NgQAAAANJGFjYzI5NjI4OTY5NgkBAAAAHWZpbHRlckFkbWluc1ZvdGVCeUJsb2NrQWN0aW9uAAAAAgUAAAANJGFjYzE5NjI4OTY5NgkAAZEAAAACBQAAAA0kbGlzdDk2Mjg5Njk2AAAAAAAAAAABAwkAAAAAAAACBQAAAA0kc2l6ZTk2Mjg5Njk2AAAAAAAAAAACBQAAAA0kYWNjMjk2Mjg5Njk2BAAAAA0kYWNjMzk2Mjg5Njk2CQEAAAAdZmlsdGVyQWRtaW5zVm90ZUJ5QmxvY2tBY3Rpb24AAAACBQAAAA0kYWNjMjk2Mjg5Njk2CQABkQAAAAIFAAAADSRsaXN0OTYyODk2OTYAAAAAAAAAAAIDCQAAAAAAAAIFAAAADSRzaXplOTYyODk2OTYAAAAAAAAAAAMFAAAADSRhY2MzOTYyODk2OTYEAAAADSRhY2M0OTYyODk2OTYJAQAAAB1maWx0ZXJBZG1pbnNWb3RlQnlCbG9ja0FjdGlvbgAAAAIFAAAADSRhY2MzOTYyODk2OTYJAAGRAAAAAgUAAAANJGxpc3Q5NjI4OTY5NgAAAAAAAAAAAwMJAAAAAAAAAgUAAAANJHNpemU5NjI4OTY5NgAAAAAAAAAABAUAAAANJGFjYzQ5NjI4OTY5NgQAAAANJGFjYzU5NjI4OTY5NgkBAAAAHWZpbHRlckFkbWluc1ZvdGVCeUJsb2NrQWN0aW9uAAAAAgUAAAANJGFjYzQ5NjI4OTY5NgkAAZEAAAACBQAAAA0kbGlzdDk2Mjg5Njk2AAAAAAAAAAAEAwkAAAAAAAACBQAAAA0kc2l6ZTk2Mjg5Njk2AAAAAAAAAAAFBQAAAA0kYWNjNTk2Mjg5Njk2BAAAAA0kYWNjNjk2Mjg5Njk2CQEAAAAdZmlsdGVyQWRtaW5zVm90ZUJ5QmxvY2tBY3Rpb24AAAACBQAAAA0kYWNjNTk2Mjg5Njk2CQABkQAAAAIFAAAADSRsaXN0OTYyODk2OTYAAAAAAAAAAAUJAAACAAAAAQIAAAASTGlzdCBzaXplIGV4Y2VlZCA1BAAAAAx1bmJsb2NrVm90ZXMEAAAADSRsaXN0OTcyMDk3OTAFAAAAGGFkbWluc0xpc3RXaXRob3V0QWNjb3VudAQAAAANJHNpemU5NzIwOTc5MAkAAZAAAAABBQAAAA0kbGlzdDk3MjA5NzkwBAAAAA0kYWNjMDk3MjA5NzkwBQAAAANuaWwDCQAAAAAAAAIFAAAADSRzaXplOTcyMDk3OTAAAAAAAAAAAAAFAAAADSRhY2MwOTcyMDk3OTAEAAAADSRhY2MxOTcyMDk3OTAJAQAAAB9maWx0ZXJBZG1pbnNWb3RlQnlVbmJsb2NrQWN0aW9uAAAAAgUAAAANJGFjYzA5NzIwOTc5MAkAAZEAAAACBQAAAA0kbGlzdDk3MjA5NzkwAAAAAAAAAAAAAwkAAAAAAAACBQAAAA0kc2l6ZTk3MjA5NzkwAAAAAAAAAAABBQAAAA0kYWNjMTk3MjA5NzkwBAAAAA0kYWNjMjk3MjA5NzkwCQEAAAAfZmlsdGVyQWRtaW5zVm90ZUJ5VW5ibG9ja0FjdGlvbgAAAAIFAAAADSRhY2MxOTcyMDk3OTAJAAGRAAAAAgUAAAANJGxpc3Q5NzIwOTc5MAAAAAAAAAAAAQMJAAAAAAAAAgUAAAANJHNpemU5NzIwOTc5MAAAAAAAAAAAAgUAAAANJGFjYzI5NzIwOTc5MAQAAAANJGFjYzM5NzIwOTc5MAkBAAAAH2ZpbHRlckFkbWluc1ZvdGVCeVVuYmxvY2tBY3Rpb24AAAACBQAAAA0kYWNjMjk3MjA5NzkwCQABkQAAAAIFAAAADSRsaXN0OTcyMDk3OTAAAAAAAAAAAAIDCQAAAAAAAAIFAAAADSRzaXplOTcyMDk3OTAAAAAAAAAAAAMFAAAADSRhY2MzOTcyMDk3OTAEAAAADSRhY2M0OTcyMDk3OTAJAQAAAB9maWx0ZXJBZG1pbnNWb3RlQnlVbmJsb2NrQWN0aW9uAAAAAgUAAAANJGFjYzM5NzIwOTc5MAkAAZEAAAACBQAAAA0kbGlzdDk3MjA5NzkwAAAAAAAAAAADAwkAAAAAAAACBQAAAA0kc2l6ZTk3MjA5NzkwAAAAAAAAAAAEBQAAAA0kYWNjNDk3MjA5NzkwBAAAAA0kYWNjNTk3MjA5NzkwCQEAAAAfZmlsdGVyQWRtaW5zVm90ZUJ5VW5ibG9ja0FjdGlvbgAAAAIFAAAADSRhY2M0OTcyMDk3OTAJAAGRAAAAAgUAAAANJGxpc3Q5NzIwOTc5MAAAAAAAAAAABAMJAAAAAAAAAgUAAAANJHNpemU5NzIwOTc5MAAAAAAAAAAABQUAAAANJGFjYzU5NzIwOTc5MAQAAAANJGFjYzY5NzIwOTc5MAkBAAAAH2ZpbHRlckFkbWluc1ZvdGVCeVVuYmxvY2tBY3Rpb24AAAACBQAAAA0kYWNjNTk3MjA5NzkwCQABkQAAAAIFAAAADSRsaXN0OTcyMDk3OTAAAAAAAAAAAAUJAAACAAAAAQIAAAASTGlzdCBzaXplIGV4Y2VlZCA1BAAAAAt1cGRhdGVWb3RlcwQAAAANJGxpc3Q5ODEzOTg4MgUAAAAYYWRtaW5zTGlzdFdpdGhvdXRBY2NvdW50BAAAAA0kc2l6ZTk4MTM5ODgyCQABkAAAAAEFAAAADSRsaXN0OTgxMzk4ODIEAAAADSRhY2MwOTgxMzk4ODIFAAAAA25pbAMJAAAAAAAAAgUAAAANJHNpemU5ODEzOTg4MgAAAAAAAAAAAAUAAAANJGFjYzA5ODEzOTg4MgQAAAANJGFjYzE5ODEzOTg4MgkBAAAAHmZpbHRlckFkbWluc1ZvdGVCeVVwZGF0ZUFjdGlvbgAAAAIFAAAADSRhY2MwOTgxMzk4ODIJAAGRAAAAAgUAAAANJGxpc3Q5ODEzOTg4MgAAAAAAAAAAAAMJAAAAAAAAAgUAAAANJHNpemU5ODEzOTg4MgAAAAAAAAAAAQUAAAANJGFjYzE5ODEzOTg4MgQAAAANJGFjYzI5ODEzOTg4MgkBAAAAHmZpbHRlckFkbWluc1ZvdGVCeVVwZGF0ZUFjdGlvbgAAAAIFAAAADSRhY2MxOTgxMzk4ODIJAAGRAAAAAgUAAAANJGxpc3Q5ODEzOTg4MgAAAAAAAAAAAQMJAAAAAAAAAgUAAAANJHNpemU5ODEzOTg4MgAAAAAAAAAAAgUAAAANJGFjYzI5ODEzOTg4MgQAAAANJGFjYzM5ODEzOTg4MgkBAAAAHmZpbHRlckFkbWluc1ZvdGVCeVVwZGF0ZUFjdGlvbgAAAAIFAAAADSRhY2MyOTgxMzk4ODIJAAGRAAAAAgUAAAANJGxpc3Q5ODEzOTg4MgAAAAAAAAAAAgMJAAAAAAAAAgUAAAANJHNpemU5ODEzOTg4MgAAAAAAAAAAAwUAAAANJGFjYzM5ODEzOTg4MgQAAAANJGFjYzQ5ODEzOTg4MgkBAAAAHmZpbHRlckFkbWluc1ZvdGVCeVVwZGF0ZUFjdGlvbgAAAAIFAAAADSRhY2MzOTgxMzk4ODIJAAGRAAAAAgUAAAANJGxpc3Q5ODEzOTg4MgAAAAAAAAAAAwMJAAAAAAAAAgUAAAANJHNpemU5ODEzOTg4MgAAAAAAAAAABAUAAAANJGFjYzQ5ODEzOTg4MgQAAAANJGFjYzU5ODEzOTg4MgkBAAAAHmZpbHRlckFkbWluc1ZvdGVCeVVwZGF0ZUFjdGlvbgAAAAIFAAAADSRhY2M0OTgxMzk4ODIJAAGRAAAAAgUAAAANJGxpc3Q5ODEzOTg4MgAAAAAAAAAABAMJAAAAAAAAAgUAAAANJHNpemU5ODEzOTg4MgAAAAAAAAAABQUAAAANJGFjYzU5ODEzOTg4MgQAAAANJGFjYzY5ODEzOTg4MgkBAAAAHmZpbHRlckFkbWluc1ZvdGVCeVVwZGF0ZUFjdGlvbgAAAAIFAAAADSRhY2M1OTgxMzk4ODIJAAGRAAAAAgUAAAANJGxpc3Q5ODEzOTg4MgAAAAAAAAAABQkAAAIAAAABAgAAABJMaXN0IHNpemUgZXhjZWVkIDUEAAAADmJsb2NrVm90ZUNvdW50CQAAZAAAAAIJAAGQAAAAAQUAAAAKYmxvY2tWb3RlcwMJAAAAAAAAAgUAAAAGYWN0aW9uBQAAAAVCTE9DSwAAAAAAAAAAAQAAAAAAAAAAAAQAAAAQdW5ibG9ja1ZvdGVDb3VudAkAAGQAAAACCQABkAAAAAEFAAAADHVuYmxvY2tWb3RlcwMJAAAAAAAAAgUAAAAGYWN0aW9uBQAAAAdVTkJMT0NLAAAAAAAAAAABAAAAAAAAAAAABAAAABB1cGRhdGVWb3Rlc0NvdW50CQAAZAAAAAIJAAGQAAAAAQUAAAALdXBkYXRlVm90ZXMDCQAAAAAAAAIFAAAABmFjdGlvbgUAAAAGVVBEQVRFAAAAAAAAAAABAAAAAAAAAAAAAwMJAABnAAAAAgUAAAAOYmxvY2tWb3RlQ291bnQFAAAAE2JmdENvZWZmaWNpZW50QWRtaW4GCQAAZwAAAAIFAAAAEHVuYmxvY2tWb3RlQ291bnQFAAAAE2JmdENvZWZmaWNpZW50QWRtaW4JAQAAAAhXcml0ZVNldAAAAAEJAARMAAAAAgkBAAAACURhdGFFbnRyeQAAAAIFAAAADElzQmxvY2tlZEtleQMJAABnAAAAAgUAAAAOYmxvY2tWb3RlQ291bnQFAAAAE2JmdENvZWZmaWNpZW50QWRtaW4GBwkABEwAAAACCQEAAAAJRGF0YUVudHJ5AAAAAgUAAAASQmxvY2tFeHBpcmVWb3RlS2V5AAAAAAAAAAAACQAETAAAAAIJAQAAAAlEYXRhRW50cnkAAAACBQAAABdCbG9ja0V4cGlyZVByb3ZpZGluZ0tleQAAAAAAAAAAAAkABEwAAAACCQEAAAAJRGF0YUVudHJ5AAAAAgUAAAARSXNQcmljZVBlbmRpbmdLZXkHCQAETAAAAAIJAQAAAAlEYXRhRW50cnkAAAACCQEAAAAVZ2V0QWRtaW5Wb3RlQWN0aW9uS2V5AAAAAQkAAZEAAAACBQAAABhhZG1pbnNMaXN0V2l0aG91dEFjY291bnQAAAAAAAAAAAACAAAAAAkABEwAAAACCQEAAAAJRGF0YUVudHJ5AAAAAgkBAAAAFWdldEFkbWluVm90ZUFjdGlvbktleQAAAAEJAAGRAAAAAgUAAAAYYWRtaW5zTGlzdFdpdGhvdXRBY2NvdW50AAAAAAAAAAABAgAAAAAJAARMAAAAAgkBAAAACURhdGFFbnRyeQAAAAIJAQAAABVnZXRBZG1pblZvdGVBY3Rpb25LZXkAAAABCQABkQAAAAIFAAAAGGFkbWluc0xpc3RXaXRob3V0QWNjb3VudAAAAAAAAAAAAgIAAAAACQAETAAAAAIJAQAAAAlEYXRhRW50cnkAAAACCQEAAAAVZ2V0QWRtaW5Wb3RlQWN0aW9uS2V5AAAAAQkAAZEAAAACBQAAABhhZG1pbnNMaXN0V2l0aG91dEFjY291bnQAAAAAAAAAAAMCAAAAAAUAAAADbmlsAwkAAGYAAAACBQAAABB1cGRhdGVWb3Rlc0NvdW50BQAAABNiZnRDb2VmZmljaWVudEFkbWluCQEAAAAIV3JpdGVTZXQAAAABCQAETAAAAAIJAQAAAAlEYXRhRW50cnkAAAACBQAAABJCbG9ja0V4cGlyZVZvdGVLZXkAAAAAAAAAAAAJAARMAAAAAgkBAAAACURhdGFFbnRyeQAAAAIFAAAAF0Jsb2NrRXhwaXJlUHJvdmlkaW5nS2V5AAAAAAAAAAAACQAETAAAAAIJAQAAAAlEYXRhRW50cnkAAAACBQAAABRTY3JpcHRVcGRhdGVCbG9ja0tleQkAAGQAAAACBQAAAAZoZWlnaHQFAAAAFHNjcmlwdFVwZGF0ZUludGVydmFsCQAETAAAAAIJAQAAAAlEYXRhRW50cnkAAAACCQEAAAAVZ2V0QWRtaW5Wb3RlQWN0aW9uS2V5AAAAAQkAAZEAAAACBQAAABhhZG1pbnNMaXN0V2l0aG91dEFjY291bnQAAAAAAAAAAAACAAAAAAkABEwAAAACCQEAAAAJRGF0YUVudHJ5AAAAAgkBAAAAFWdldEFkbWluVm90ZUFjdGlvbktleQAAAAEJAAGRAAAAAgUAAAAYYWRtaW5zTGlzdFdpdGhvdXRBY2NvdW50AAAAAAAAAAABAgAAAAAJAARMAAAAAgkBAAAACURhdGFFbnRyeQAAAAIJAQAAABVnZXRBZG1pblZvdGVBY3Rpb25LZXkAAAABCQABkQAAAAIFAAAAGGFkbWluc0xpc3RXaXRob3V0QWNjb3VudAAAAAAAAAAAAgIAAAAACQAETAAAAAIJAQAAAAlEYXRhRW50cnkAAAACCQEAAAAVZ2V0QWRtaW5Wb3RlQWN0aW9uS2V5AAAAAQkAAZEAAAACBQAAABhhZG1pbnNMaXN0V2l0aG91dEFjY291bnQAAAAAAAAAAAMCAAAAAAUAAAADbmlsAwkAAGYAAAACBQAAAAZoZWlnaHQFAAAAD2Jsb2NrRXhwaXJlVm90ZQkBAAAACFdyaXRlU2V0AAAAAQkABEwAAAACCQEAAAAJRGF0YUVudHJ5AAAAAgUAAAASQmxvY2tFeHBpcmVWb3RlS2V5CQAAZAAAAAIFAAAABmhlaWdodAUAAAAMdm90ZUludGVydmFsCQAETAAAAAIJAQAAAAlEYXRhRW50cnkAAAACCQEAAAAVZ2V0QWRtaW5Wb3RlQWN0aW9uS2V5AAAAAQUAAAAHYWNjb3VudAUAAAAGYWN0aW9uCQAETAAAAAIJAQAAAAlEYXRhRW50cnkAAAACCQEAAAAVZ2V0QWRtaW5Wb3RlQWN0aW9uS2V5AAAAAQkAAZEAAAACBQAAABhhZG1pbnNMaXN0V2l0aG91dEFjY291bnQAAAAAAAAAAAACAAAAAAkABEwAAAACCQEAAAAJRGF0YUVudHJ5AAAAAgkBAAAAFWdldEFkbWluVm90ZUFjdGlvbktleQAAAAEJAAGRAAAAAgUAAAAYYWRtaW5zTGlzdFdpdGhvdXRBY2NvdW50AAAAAAAAAAABAgAAAAAJAARMAAAAAgkBAAAACURhdGFFbnRyeQAAAAIJAQAAABVnZXRBZG1pblZvdGVBY3Rpb25LZXkAAAABCQABkQAAAAIFAAAAGGFkbWluc0xpc3RXaXRob3V0QWNjb3VudAAAAAAAAAAAAgIAAAAACQAETAAAAAIJAQAAAAlEYXRhRW50cnkAAAACCQEAAAAVZ2V0QWRtaW5Wb3RlQWN0aW9uS2V5AAAAAQkAAZEAAAACBQAAABhhZG1pbnNMaXN0V2l0aG91dEFjY291bnQAAAAAAAAAAAMCAAAAAAUAAAADbmlsCQEAAAAIV3JpdGVTZXQAAAABCQAETAAAAAIJAQAAAAlEYXRhRW50cnkAAAACCQEAAAAVZ2V0QWRtaW5Wb3RlQWN0aW9uS2V5AAAAAQUAAAAHYWNjb3VudAUAAAAGYWN0aW9uBQAAAANuaWwAAAAAaOYlkg==", "chainId": 87, "height": 1751510, "spentComplexity": 0 } View: original | compacted Prev: none Next: BhcWGdjgoytXvJS8GgGnQzvv7a3yF917NFRayvj3b8TE Full:
OldNewDifferences
1-# no script
1+{-# STDLIB_VERSION 3 #-}
2+{-# SCRIPT_TYPE ACCOUNT #-}
3+{-# CONTENT_TYPE DAPP #-}
4+func getNumberByKey (key) = match getInteger(this, key) {
5+ case a: Int =>
6+ a
7+ case _ =>
8+ 0
9+}
10+
11+
12+func getStringByKey (key) = match getString(this, key) {
13+ case a: String =>
14+ a
15+ case _ =>
16+ ""
17+}
18+
19+
20+func getBoolByKey (key) = match getBoolean(this, key) {
21+ case a: Boolean =>
22+ a
23+ case _ =>
24+ false
25+}
26+
27+
28+func getNumberByAddressAndKey (address,key) = match getInteger(address, key) {
29+ case a: Int =>
30+ a
31+ case _ =>
32+ 0
33+}
34+
35+
36+func getStringByAddressAndKey (address,key) = match getString(address, key) {
37+ case a: String =>
38+ a
39+ case _ =>
40+ ""
41+}
42+
43+
44+func isInt (val) = match val {
45+ case a: Int =>
46+ true
47+ case _ =>
48+ false
49+}
50+
51+
52+func dropElementInJsonArray (array,element) = {
53+ let splitedArray = split(array, element)
54+ if ((take(splitedArray[1], 1) == ","))
55+ then (splitedArray[0] + drop(splitedArray[1], 1))
56+ else (dropRight(splitedArray[0], 1) + splitedArray[1])
57+ }
58+
59+
60+func convertJsonArrayToList (jsonArray) = split(jsonArray, ",")
61+
62+
63+let BLOCK = "block"
64+
65+let UNBLOCK = "unblock"
66+
67+let UPDATE = "update"
68+
69+let OraclesKey = "oracles"
70+
71+let AdminsKey = "admins"
72+
73+let VoteIntervalKey = "vote_interval"
74+
75+let CoefficientOracleKey = "coefficient_oracle"
76+
77+let CoefficientAdminKey = "coefficient_admin"
78+
79+let ScriptUpdateIntervalKey = "script_update_interval"
80+
81+let ProvidingIntervalKey = "providing_interval"
82+
83+let PriceKey = "price"
84+
85+let PriceOffsetKey = "price_offset"
86+
87+let IsPricePendingKey = "is_pending_price"
88+
89+let IsBlockedKey = "is_blocked"
90+
91+let OracleIsProvideKey = "oracle_is_provide_"
92+
93+let OracleProvidePriceKey = "oracle_price_provide_"
94+
95+let AdminVoteKey = "admin_vote_"
96+
97+let ActionKey = "action"
98+
99+let BlockExpireProvidingKey = "providing_expire_block"
100+
101+let BlackSwarmPriceKey = "black_swarm_price"
102+
103+let BlockExpireVoteKey = "vote_expire_block"
104+
105+let ScriptUpdateBlockKey = "script_update_block"
106+
107+func getOracleIsProvideKey (owner) = (OracleIsProvideKey + owner)
108+
109+
110+func getOracleProvidePriceKey (owner) = (OracleProvidePriceKey + owner)
111+
112+
113+func getAdminVoteKey (owner) = (AdminVoteKey + owner)
114+
115+
116+func getAdminVoteActionKey (owner) = ((getAdminVoteKey(owner) + "_") + ActionKey)
117+
118+
119+func getBlackSwarmPriceKey (block) = ((BlackSwarmPriceKey + "_") + toString(block))
120+
121+
122+func getPriceHistoryKey (block) = ((PriceKey + "_") + toString(block))
123+
124+
125+let price = getNumberByKey(PriceKey)
126+
127+let providingInterval = getNumberByKey(ProvidingIntervalKey)
128+
129+let blockExpireProviding = getNumberByKey(BlockExpireProvidingKey)
130+
131+let blockExpireVote = getNumberByKey(BlockExpireVoteKey)
132+
133+let scriptUpdateBlock = getNumberByKey(ScriptUpdateBlockKey)
134+
135+let scriptUpdateInterval = getNumberByKey(ScriptUpdateIntervalKey)
136+
137+let isPricePending = getBoolByKey(IsPricePendingKey)
138+
139+let isBlocked = getBoolByKey(IsBlockedKey)
140+
141+let bftCoefficientOracle = getNumberByKey(CoefficientOracleKey)
142+
143+let bftCoefficientAdmin = getNumberByKey(CoefficientAdminKey)
144+
145+let percentPriceOffset = getNumberByKey(PriceOffsetKey)
146+
147+let voteInterval = getNumberByKey(VoteIntervalKey)
148+
149+let oracles = getStringByKey(OraclesKey)
150+
151+let admins = getStringByKey(AdminsKey)
152+
153+let oraclesList = convertJsonArrayToList(oracles)
154+
155+let adminsList = convertJsonArrayToList(admins)
156+
157+func getAdminVoteAction (owner) = getStringByKey(getAdminVoteActionKey(owner))
158+
159+
160+func isOracleProvide (owner) = getBoolByKey(getOracleIsProvideKey(owner))
161+
162+
163+func isOracleProvideInt (owner) = if (isOracleProvide(owner))
164+ then 1
165+ else 0
166+
167+
168+func getOracleProvidePrice (owner) = getNumberByKey(getOracleProvidePriceKey(owner))
169+
170+
171+func isOracle (address) = match indexOf(oracles, address) {
172+ case _: Int =>
173+ true
174+ case _ =>
175+ false
176+}
177+
178+
179+func isAdmin (address) = match indexOf(admins, address) {
180+ case _: Int =>
181+ true
182+ case _ =>
183+ false
184+}
185+
186+
187+func sumOraclePrice (base,address) = (base + (getOracleProvidePrice(address) * isOracleProvideInt(address)))
188+
189+
190+func filterAdminsVoteByAction (result,address,action) = address :: result
191+
192+
193+func filterAdminsVoteByBlockAction (result,address) = filterAdminsVoteByAction(result, address, BLOCK)
194+
195+
196+func filterAdminsVoteByUnblockAction (result,address) = filterAdminsVoteByAction(result, address, UNBLOCK)
197+
198+
199+func filterAdminsVoteByUpdateAction (result,address) = filterAdminsVoteByAction(result, address, UPDATE)
200+
201+
202+@Callable(i)
203+func setCurrentPrice (newPrice) = {
204+ let account = toString(i.caller)
205+ let isOracleProvideList = [isOracleProvide(oraclesList[0]), isOracleProvide(oraclesList[1]), isOracleProvide(oraclesList[2]), isOracleProvide(oraclesList[3]), isOracleProvide(oraclesList[4])]
206+ let priceProvidingCount = ((((((if (isOracleProvideList[0])
207+ then 1
208+ else 0) + (if (isOracleProvideList[1])
209+ then 1
210+ else 0)) + (if (isOracleProvideList[2])
211+ then 1
212+ else 0)) + (if (isOracleProvideList[3])
213+ then 1
214+ else 0)) + (if (isOracleProvideList[4])
215+ then 1
216+ else 0)) + 1)
217+ if (isBlocked)
218+ then throw("contract is blocked")
219+ else if (!(isOracle(account)))
220+ then throw("permission denied")
221+ else if (if ((blockExpireProviding >= height))
222+ then isOracleProvide(account)
223+ else false)
224+ then throw("price is already provided")
225+ else if (if ((height > blockExpireProviding))
226+ then isPricePending
227+ else false)
228+ then throw("use finilizeCurrentPrice")
229+ else WriteSet([DataEntry(getOracleIsProvideKey(oraclesList[0]), if ((height > blockExpireProviding))
230+ then false
231+ else isOracleProvideList[0]), DataEntry(getOracleIsProvideKey(oraclesList[1]), if ((height > blockExpireProviding))
232+ then false
233+ else isOracleProvideList[1]), DataEntry(getOracleIsProvideKey(oraclesList[2]), if ((height > blockExpireProviding))
234+ then false
235+ else isOracleProvideList[2]), DataEntry(getOracleIsProvideKey(oraclesList[3]), if ((height > blockExpireProviding))
236+ then false
237+ else isOracleProvideList[3]), DataEntry(getOracleIsProvideKey(oraclesList[4]), if ((height > blockExpireProviding))
238+ then false
239+ else isOracleProvideList[4]), DataEntry(getOracleIsProvideKey(account), true), DataEntry(getOracleProvidePriceKey(account), newPrice), DataEntry(BlockExpireProvidingKey, if ((height > blockExpireProviding))
240+ then (height + providingInterval)
241+ else blockExpireProviding), DataEntry(IsPricePendingKey, if (if ((blockExpireProviding >= height))
242+ then (priceProvidingCount >= bftCoefficientOracle)
243+ else false)
244+ then true
245+ else isPricePending)])
246+ }
247+
248+
249+
250+@Callable(i)
251+func finilizeCurrentPrice () = {
252+ let isOracleProvideList = [isOracleProvide(oraclesList[0]), isOracleProvide(oraclesList[1]), isOracleProvide(oraclesList[2]), isOracleProvide(oraclesList[3]), isOracleProvide(oraclesList[4])]
253+ let priceProvidingCount = (((((if (isOracleProvideList[0])
254+ then 1
255+ else 0) + (if (isOracleProvideList[1])
256+ then 1
257+ else 0)) + (if (isOracleProvideList[2])
258+ then 1
259+ else 0)) + (if (isOracleProvideList[3])
260+ then 1
261+ else 0)) + (if (isOracleProvideList[4])
262+ then 1
263+ else 0))
264+ let priceSum = (((((getOracleProvidePrice(oraclesList[0]) * (if (isOracleProvideList[0])
265+ then 1
266+ else 0)) + (getOracleProvidePrice(oraclesList[1]) * (if (isOracleProvideList[1])
267+ then 1
268+ else 0))) + (getOracleProvidePrice(oraclesList[2]) * (if (isOracleProvideList[2])
269+ then 1
270+ else 0))) + (getOracleProvidePrice(oraclesList[3]) * (if (isOracleProvideList[3])
271+ then 1
272+ else 0))) + (getOracleProvidePrice(oraclesList[4]) * (if (isOracleProvideList[4])
273+ then 1
274+ else 0)))
275+ let newPrice = (priceSum / priceProvidingCount)
276+ if (isBlocked)
277+ then throw("contract is blocked")
278+ else if (if (!(isPricePending))
279+ then true
280+ else (blockExpireProviding >= height))
281+ then throw("wait for the end of the price providing")
282+ else if ((bftCoefficientOracle > priceProvidingCount))
283+ then throw("2/3 oracles need to set a price")
284+ else if (if ((newPrice >= (price + ((price * percentPriceOffset) / 100))))
285+ then true
286+ else ((price - ((price * percentPriceOffset) / 100)) >= newPrice))
287+ then WriteSet([DataEntry(IsBlockedKey, true), DataEntry(getBlackSwarmPriceKey(height), newPrice)])
288+ else WriteSet([DataEntry(PriceKey, newPrice), DataEntry(getPriceHistoryKey(height), newPrice), DataEntry(IsPricePendingKey, false)])
289+ }
290+
291+
292+
293+@Callable(i)
294+func vote (action) = {
295+ let account = toString(i.caller)
296+ let adminsListWithoutAccount = convertJsonArrayToList(dropElementInJsonArray(admins, account))
297+ let lastAction = getAdminVoteAction(account)
298+ let blockVotes = {
299+ let $list96289696 = adminsListWithoutAccount
300+ let $size96289696 = size($list96289696)
301+ let $acc096289696 = nil
302+ if (($size96289696 == 0))
303+ then $acc096289696
304+ else {
305+ let $acc196289696 = filterAdminsVoteByBlockAction($acc096289696, $list96289696[0])
306+ if (($size96289696 == 1))
307+ then $acc196289696
308+ else {
309+ let $acc296289696 = filterAdminsVoteByBlockAction($acc196289696, $list96289696[1])
310+ if (($size96289696 == 2))
311+ then $acc296289696
312+ else {
313+ let $acc396289696 = filterAdminsVoteByBlockAction($acc296289696, $list96289696[2])
314+ if (($size96289696 == 3))
315+ then $acc396289696
316+ else {
317+ let $acc496289696 = filterAdminsVoteByBlockAction($acc396289696, $list96289696[3])
318+ if (($size96289696 == 4))
319+ then $acc496289696
320+ else {
321+ let $acc596289696 = filterAdminsVoteByBlockAction($acc496289696, $list96289696[4])
322+ if (($size96289696 == 5))
323+ then $acc596289696
324+ else {
325+ let $acc696289696 = filterAdminsVoteByBlockAction($acc596289696, $list96289696[5])
326+ throw("List size exceed 5")
327+ }
328+ }
329+ }
330+ }
331+ }
332+ }
333+ }
334+ let unblockVotes = {
335+ let $list97209790 = adminsListWithoutAccount
336+ let $size97209790 = size($list97209790)
337+ let $acc097209790 = nil
338+ if (($size97209790 == 0))
339+ then $acc097209790
340+ else {
341+ let $acc197209790 = filterAdminsVoteByUnblockAction($acc097209790, $list97209790[0])
342+ if (($size97209790 == 1))
343+ then $acc197209790
344+ else {
345+ let $acc297209790 = filterAdminsVoteByUnblockAction($acc197209790, $list97209790[1])
346+ if (($size97209790 == 2))
347+ then $acc297209790
348+ else {
349+ let $acc397209790 = filterAdminsVoteByUnblockAction($acc297209790, $list97209790[2])
350+ if (($size97209790 == 3))
351+ then $acc397209790
352+ else {
353+ let $acc497209790 = filterAdminsVoteByUnblockAction($acc397209790, $list97209790[3])
354+ if (($size97209790 == 4))
355+ then $acc497209790
356+ else {
357+ let $acc597209790 = filterAdminsVoteByUnblockAction($acc497209790, $list97209790[4])
358+ if (($size97209790 == 5))
359+ then $acc597209790
360+ else {
361+ let $acc697209790 = filterAdminsVoteByUnblockAction($acc597209790, $list97209790[5])
362+ throw("List size exceed 5")
363+ }
364+ }
365+ }
366+ }
367+ }
368+ }
369+ }
370+ let updateVotes = {
371+ let $list98139882 = adminsListWithoutAccount
372+ let $size98139882 = size($list98139882)
373+ let $acc098139882 = nil
374+ if (($size98139882 == 0))
375+ then $acc098139882
376+ else {
377+ let $acc198139882 = filterAdminsVoteByUpdateAction($acc098139882, $list98139882[0])
378+ if (($size98139882 == 1))
379+ then $acc198139882
380+ else {
381+ let $acc298139882 = filterAdminsVoteByUpdateAction($acc198139882, $list98139882[1])
382+ if (($size98139882 == 2))
383+ then $acc298139882
384+ else {
385+ let $acc398139882 = filterAdminsVoteByUpdateAction($acc298139882, $list98139882[2])
386+ if (($size98139882 == 3))
387+ then $acc398139882
388+ else {
389+ let $acc498139882 = filterAdminsVoteByUpdateAction($acc398139882, $list98139882[3])
390+ if (($size98139882 == 4))
391+ then $acc498139882
392+ else {
393+ let $acc598139882 = filterAdminsVoteByUpdateAction($acc498139882, $list98139882[4])
394+ if (($size98139882 == 5))
395+ then $acc598139882
396+ else {
397+ let $acc698139882 = filterAdminsVoteByUpdateAction($acc598139882, $list98139882[5])
398+ throw("List size exceed 5")
399+ }
400+ }
401+ }
402+ }
403+ }
404+ }
405+ }
406+ let blockVoteCount = (size(blockVotes) + (if ((action == BLOCK))
407+ then 1
408+ else 0))
409+ let unblockVoteCount = (size(unblockVotes) + (if ((action == UNBLOCK))
410+ then 1
411+ else 0))
412+ let updateVotesCount = (size(updateVotes) + (if ((action == UPDATE))
413+ then 1
414+ else 0))
415+ if (if ((blockVoteCount >= bftCoefficientAdmin))
416+ then true
417+ else (unblockVoteCount >= bftCoefficientAdmin))
418+ then WriteSet([DataEntry(IsBlockedKey, if ((blockVoteCount >= bftCoefficientAdmin))
419+ then true
420+ 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]), "")])
421+ else if ((updateVotesCount > bftCoefficientAdmin))
422+ 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]), "")])
423+ else if ((height > blockExpireVote))
424+ 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]), "")])
425+ else WriteSet([DataEntry(getAdminVoteActionKey(account), action)])
426+ }
427+
428+

github/deemru/w8io/786bc32 
40.64 ms