2019.10.20 21:14 [1758912] smart account 3P5Bfd58PPfNvBM2Hy8QfbcDqMeNtzg7KfP > SELF 0.00000000 Waves

{ "type": 13, "id": "BhcWGdjgoytXvJS8GgGnQzvv7a3yF917NFRayvj3b8TE", "fee": 1400000, "feeAssetId": null, "timestamp": 1571595351855, "version": 1, "sender": "3P5Bfd58PPfNvBM2Hy8QfbcDqMeNtzg7KfP", "senderPublicKey": "GqXuX2WHNr3WUqTaeH2YCySFY45NAJoE9RmY9bEWkzh", "proofs": [ "24dr5qp1XJHqMJaajgaRgDBpffuFKpmiEphVB4MCuGVf4h1HATcxL9oiTJYFsmbiy4ohD3vBKvejqnadfTf4DCjp" ], "script": "base64:AAIDAAAAAAAAAA4IARIDCgEBEgASAwoBCAAAAD8BAAAADmdldE51bWJlckJ5S2V5AAAAAQAAAANrZXkEAAAAByRtYXRjaDAJAAQaAAAAAgUAAAAEdGhpcwUAAAADa2V5AwkAAAEAAAACBQAAAAckbWF0Y2gwAgAAAANJbnQEAAAAAWEFAAAAByRtYXRjaDAFAAAAAWEAAAAAAAAAAAABAAAADmdldFN0cmluZ0J5S2V5AAAAAQAAAANrZXkEAAAAByRtYXRjaDAJAAQdAAAAAgUAAAAEdGhpcwUAAAADa2V5AwkAAAEAAAACBQAAAAckbWF0Y2gwAgAAAAZTdHJpbmcEAAAAAWEFAAAAByRtYXRjaDAFAAAAAWECAAAAAAEAAAAMZ2V0Qm9vbEJ5S2V5AAAAAQAAAANrZXkEAAAAByRtYXRjaDAJAAQbAAAAAgUAAAAEdGhpcwUAAAADa2V5AwkAAAEAAAACBQAAAAckbWF0Y2gwAgAAAAdCb29sZWFuBAAAAAFhBQAAAAckbWF0Y2gwBQAAAAFhBwEAAAAYZ2V0TnVtYmVyQnlBZGRyZXNzQW5kS2V5AAAAAgAAAAdhZGRyZXNzAAAAA2tleQQAAAAHJG1hdGNoMAkABBoAAAACBQAAAAdhZGRyZXNzBQAAAANrZXkDCQAAAQAAAAIFAAAAByRtYXRjaDACAAAAA0ludAQAAAABYQUAAAAHJG1hdGNoMAUAAAABYQAAAAAAAAAAAAEAAAAYZ2V0U3RyaW5nQnlBZGRyZXNzQW5kS2V5AAAAAgAAAAdhZGRyZXNzAAAAA2tleQQAAAAHJG1hdGNoMAkABB0AAAACBQAAAAdhZGRyZXNzBQAAAANrZXkDCQAAAQAAAAIFAAAAByRtYXRjaDACAAAABlN0cmluZwQAAAABYQUAAAAHJG1hdGNoMAUAAAABYQIAAAAAAQAAAAVpc0ludAAAAAEAAAADdmFsBAAAAAckbWF0Y2gwBQAAAAN2YWwDCQAAAQAAAAIFAAAAByRtYXRjaDACAAAAA0ludAQAAAABYQUAAAAHJG1hdGNoMAYHAQAAABZkcm9wRWxlbWVudEluSnNvbkFycmF5AAAAAgAAAAVhcnJheQAAAAdlbGVtZW50BAAAAAxzcGxpdGVkQXJyYXkJAAS1AAAAAgUAAAAFYXJyYXkFAAAAB2VsZW1lbnQDCQAAAAAAAAIJAAEvAAAAAgkAAZEAAAACBQAAAAxzcGxpdGVkQXJyYXkAAAAAAAAAAAEAAAAAAAAAAAECAAAAASwJAAEsAAAAAgkAAZEAAAACBQAAAAxzcGxpdGVkQXJyYXkAAAAAAAAAAAAJAAEwAAAAAgkAAZEAAAACBQAAAAxzcGxpdGVkQXJyYXkAAAAAAAAAAAEAAAAAAAAAAAEJAAEsAAAAAgkBAAAACWRyb3BSaWdodAAAAAIJAAGRAAAAAgUAAAAMc3BsaXRlZEFycmF5AAAAAAAAAAAAAAAAAAAAAAABCQABkQAAAAIFAAAADHNwbGl0ZWRBcnJheQAAAAAAAAAAAQEAAAAWY29udmVydEpzb25BcnJheVRvTGlzdAAAAAEAAAAJanNvbkFycmF5CQAEtQAAAAIFAAAACWpzb25BcnJheQIAAAABLAAAAAAFQkxPQ0sCAAAABWJsb2NrAAAAAAdVTkJMT0NLAgAAAAd1bmJsb2NrAAAAAAZVUERBVEUCAAAABnVwZGF0ZQAAAAAKT3JhY2xlc0tleQIAAAAHb3JhY2xlcwAAAAAJQWRtaW5zS2V5AgAAAAZhZG1pbnMAAAAAD1ZvdGVJbnRlcnZhbEtleQIAAAANdm90ZV9pbnRlcnZhbAAAAAAUQ29lZmZpY2llbnRPcmFjbGVLZXkCAAAAEmNvZWZmaWNpZW50X29yYWNsZQAAAAATQ29lZmZpY2llbnRBZG1pbktleQIAAAARY29lZmZpY2llbnRfYWRtaW4AAAAAF1NjcmlwdFVwZGF0ZUludGVydmFsS2V5AgAAABZzY3JpcHRfdXBkYXRlX2ludGVydmFsAAAAABRQcm92aWRpbmdJbnRlcnZhbEtleQIAAAAScHJvdmlkaW5nX2ludGVydmFsAAAAAAhQcmljZUtleQIAAAAFcHJpY2UAAAAADlByaWNlT2Zmc2V0S2V5AgAAAAxwcmljZV9vZmZzZXQAAAAAEUlzUHJpY2VQZW5kaW5nS2V5AgAAABBpc19wZW5kaW5nX3ByaWNlAAAAAAxJc0Jsb2NrZWRLZXkCAAAACmlzX2Jsb2NrZWQAAAAAEk9yYWNsZUlzUHJvdmlkZUtleQIAAAASb3JhY2xlX2lzX3Byb3ZpZGVfAAAAABVPcmFjbGVQcm92aWRlUHJpY2VLZXkCAAAAFW9yYWNsZV9wcmljZV9wcm92aWRlXwAAAAAMQWRtaW5Wb3RlS2V5AgAAAAthZG1pbl92b3RlXwAAAAAJQWN0aW9uS2V5AgAAAAZhY3Rpb24AAAAAF0Jsb2NrRXhwaXJlUHJvdmlkaW5nS2V5AgAAABZwcm92aWRpbmdfZXhwaXJlX2Jsb2NrAAAAABJCbGFja1N3YXJtUHJpY2VLZXkCAAAAEWJsYWNrX3N3YXJtX3ByaWNlAAAAABJCbG9ja0V4cGlyZVZvdGVLZXkCAAAAEXZvdGVfZXhwaXJlX2Jsb2NrAAAAABRTY3JpcHRVcGRhdGVCbG9ja0tleQIAAAATc2NyaXB0X3VwZGF0ZV9ibG9jawEAAAAVZ2V0T3JhY2xlSXNQcm92aWRlS2V5AAAAAQAAAAVvd25lcgkAASwAAAACBQAAABJPcmFjbGVJc1Byb3ZpZGVLZXkFAAAABW93bmVyAQAAABhnZXRPcmFjbGVQcm92aWRlUHJpY2VLZXkAAAABAAAABW93bmVyCQABLAAAAAIFAAAAFU9yYWNsZVByb3ZpZGVQcmljZUtleQUAAAAFb3duZXIBAAAAD2dldEFkbWluVm90ZUtleQAAAAEAAAAFb3duZXIJAAEsAAAAAgUAAAAMQWRtaW5Wb3RlS2V5BQAAAAVvd25lcgEAAAAVZ2V0QWRtaW5Wb3RlQWN0aW9uS2V5AAAAAQAAAAVvd25lcgkAASwAAAACCQABLAAAAAIJAQAAAA9nZXRBZG1pblZvdGVLZXkAAAABBQAAAAVvd25lcgIAAAABXwUAAAAJQWN0aW9uS2V5AQAAABVnZXRCbGFja1N3YXJtUHJpY2VLZXkAAAABAAAABWJsb2NrCQABLAAAAAIJAAEsAAAAAgUAAAASQmxhY2tTd2FybVByaWNlS2V5AgAAAAFfCQABpAAAAAEFAAAABWJsb2NrAQAAABJnZXRQcmljZUhpc3RvcnlLZXkAAAABAAAABWJsb2NrCQABLAAAAAIJAAEsAAAAAgUAAAAIUHJpY2VLZXkCAAAAAV8JAAGkAAAAAQUAAAAFYmxvY2sAAAAABXByaWNlCQEAAAAOZ2V0TnVtYmVyQnlLZXkAAAABBQAAAAhQcmljZUtleQAAAAARcHJvdmlkaW5nSW50ZXJ2YWwJAQAAAA5nZXROdW1iZXJCeUtleQAAAAEFAAAAFFByb3ZpZGluZ0ludGVydmFsS2V5AAAAABRibG9ja0V4cGlyZVByb3ZpZGluZwkBAAAADmdldE51bWJlckJ5S2V5AAAAAQUAAAAXQmxvY2tFeHBpcmVQcm92aWRpbmdLZXkAAAAAD2Jsb2NrRXhwaXJlVm90ZQkBAAAADmdldE51bWJlckJ5S2V5AAAAAQUAAAASQmxvY2tFeHBpcmVWb3RlS2V5AAAAABFzY3JpcHRVcGRhdGVCbG9jawkBAAAADmdldE51bWJlckJ5S2V5AAAAAQUAAAAUU2NyaXB0VXBkYXRlQmxvY2tLZXkAAAAAFHNjcmlwdFVwZGF0ZUludGVydmFsCQEAAAAOZ2V0TnVtYmVyQnlLZXkAAAABBQAAABdTY3JpcHRVcGRhdGVJbnRlcnZhbEtleQAAAAAOaXNQcmljZVBlbmRpbmcJAQAAAAxnZXRCb29sQnlLZXkAAAABBQAAABFJc1ByaWNlUGVuZGluZ0tleQAAAAAJaXNCbG9ja2VkCQEAAAAMZ2V0Qm9vbEJ5S2V5AAAAAQUAAAAMSXNCbG9ja2VkS2V5AAAAABRiZnRDb2VmZmljaWVudE9yYWNsZQkBAAAADmdldE51bWJlckJ5S2V5AAAAAQUAAAAUQ29lZmZpY2llbnRPcmFjbGVLZXkAAAAAE2JmdENvZWZmaWNpZW50QWRtaW4JAQAAAA5nZXROdW1iZXJCeUtleQAAAAEFAAAAE0NvZWZmaWNpZW50QWRtaW5LZXkAAAAAEnBlcmNlbnRQcmljZU9mZnNldAkBAAAADmdldE51bWJlckJ5S2V5AAAAAQUAAAAOUHJpY2VPZmZzZXRLZXkAAAAADHZvdGVJbnRlcnZhbAkBAAAADmdldE51bWJlckJ5S2V5AAAAAQUAAAAPVm90ZUludGVydmFsS2V5AAAAAAdvcmFjbGVzCQEAAAAOZ2V0U3RyaW5nQnlLZXkAAAABBQAAAApPcmFjbGVzS2V5AAAAAAZhZG1pbnMJAQAAAA5nZXRTdHJpbmdCeUtleQAAAAEFAAAACUFkbWluc0tleQAAAAALb3JhY2xlc0xpc3QJAQAAABZjb252ZXJ0SnNvbkFycmF5VG9MaXN0AAAAAQUAAAAHb3JhY2xlcwAAAAAKYWRtaW5zTGlzdAkBAAAAFmNvbnZlcnRKc29uQXJyYXlUb0xpc3QAAAABBQAAAAZhZG1pbnMBAAAAEmdldEFkbWluVm90ZUFjdGlvbgAAAAEAAAAFb3duZXIJAQAAAA5nZXRTdHJpbmdCeUtleQAAAAEJAQAAABVnZXRBZG1pblZvdGVBY3Rpb25LZXkAAAABBQAAAAVvd25lcgEAAAAPaXNPcmFjbGVQcm92aWRlAAAAAQAAAAVvd25lcgkBAAAADGdldEJvb2xCeUtleQAAAAEJAQAAABVnZXRPcmFjbGVJc1Byb3ZpZGVLZXkAAAABBQAAAAVvd25lcgEAAAASaXNPcmFjbGVQcm92aWRlSW50AAAAAQAAAAVvd25lcgMJAQAAAA9pc09yYWNsZVByb3ZpZGUAAAABBQAAAAVvd25lcgAAAAAAAAAAAQAAAAAAAAAAAAEAAAAVZ2V0T3JhY2xlUHJvdmlkZVByaWNlAAAAAQAAAAVvd25lcgkBAAAADmdldE51bWJlckJ5S2V5AAAAAQkBAAAAGGdldE9yYWNsZVByb3ZpZGVQcmljZUtleQAAAAEFAAAABW93bmVyAQAAAAhpc09yYWNsZQAAAAEAAAAHYWRkcmVzcwQAAAAHJG1hdGNoMAkABLMAAAACBQAAAAdvcmFjbGVzBQAAAAdhZGRyZXNzAwkAAAEAAAACBQAAAAckbWF0Y2gwAgAAAANJbnQGBwEAAAAHaXNBZG1pbgAAAAEAAAAHYWRkcmVzcwQAAAAHJG1hdGNoMAkABLMAAAACBQAAAAZhZG1pbnMFAAAAB2FkZHJlc3MDCQAAAQAAAAIFAAAAByRtYXRjaDACAAAAA0ludAYHAQAAAA5zdW1PcmFjbGVQcmljZQAAAAIAAAAEYmFzZQAAAAdhZGRyZXNzCQAAZAAAAAIFAAAABGJhc2UJAABoAAAAAgkBAAAAFWdldE9yYWNsZVByb3ZpZGVQcmljZQAAAAEFAAAAB2FkZHJlc3MJAQAAABJpc09yYWNsZVByb3ZpZGVJbnQAAAABBQAAAAdhZGRyZXNzAQAAABhmaWx0ZXJBZG1pbnNWb3RlQnlBY3Rpb24AAAADAAAABnJlc3VsdAAAAAdhZGRyZXNzAAAABmFjdGlvbgkABEwAAAACBQAAAAdhZGRyZXNzBQAAAAZyZXN1bHQBAAAAHWZpbHRlckFkbWluc1ZvdGVCeUJsb2NrQWN0aW9uAAAAAgAAAAZyZXN1bHQAAAAHYWRkcmVzcwkBAAAAGGZpbHRlckFkbWluc1ZvdGVCeUFjdGlvbgAAAAMFAAAABnJlc3VsdAUAAAAHYWRkcmVzcwUAAAAFQkxPQ0sBAAAAH2ZpbHRlckFkbWluc1ZvdGVCeVVuYmxvY2tBY3Rpb24AAAACAAAABnJlc3VsdAAAAAdhZGRyZXNzCQEAAAAYZmlsdGVyQWRtaW5zVm90ZUJ5QWN0aW9uAAAAAwUAAAAGcmVzdWx0BQAAAAdhZGRyZXNzBQAAAAdVTkJMT0NLAQAAAB5maWx0ZXJBZG1pbnNWb3RlQnlVcGRhdGVBY3Rpb24AAAACAAAABnJlc3VsdAAAAAdhZGRyZXNzCQEAAAAYZmlsdGVyQWRtaW5zVm90ZUJ5QWN0aW9uAAAAAwUAAAAGcmVzdWx0BQAAAAdhZGRyZXNzBQAAAAZVUERBVEUAAAADAAAAAWkBAAAAD3NldEN1cnJlbnRQcmljZQAAAAEAAAAIbmV3UHJpY2UEAAAAB2FjY291bnQJAAQlAAAAAQgFAAAAAWkAAAAGY2FsbGVyBAAAABNpc09yYWNsZVByb3ZpZGVMaXN0CQAETAAAAAIJAQAAAA9pc09yYWNsZVByb3ZpZGUAAAABCQABkQAAAAIFAAAAC29yYWNsZXNMaXN0AAAAAAAAAAAACQAETAAAAAIJAQAAAA9pc09yYWNsZVByb3ZpZGUAAAABCQABkQAAAAIFAAAAC29yYWNsZXNMaXN0AAAAAAAAAAABCQAETAAAAAIJAQAAAA9pc09yYWNsZVByb3ZpZGUAAAABCQABkQAAAAIFAAAAC29yYWNsZXNMaXN0AAAAAAAAAAACCQAETAAAAAIJAQAAAA9pc09yYWNsZVByb3ZpZGUAAAABCQABkQAAAAIFAAAAC29yYWNsZXNMaXN0AAAAAAAAAAADCQAETAAAAAIJAQAAAA9pc09yYWNsZVByb3ZpZGUAAAABCQABkQAAAAIFAAAAC29yYWNsZXNMaXN0AAAAAAAAAAAEBQAAAANuaWwEAAAAE3ByaWNlUHJvdmlkaW5nQ291bnQJAABkAAAAAgkAAGQAAAACCQAAZAAAAAIJAABkAAAAAgkAAGQAAAACAwkAAZEAAAACBQAAABNpc09yYWNsZVByb3ZpZGVMaXN0AAAAAAAAAAAAAAAAAAAAAAABAAAAAAAAAAAAAwkAAZEAAAACBQAAABNpc09yYWNsZVByb3ZpZGVMaXN0AAAAAAAAAAABAAAAAAAAAAABAAAAAAAAAAAAAwkAAZEAAAACBQAAABNpc09yYWNsZVByb3ZpZGVMaXN0AAAAAAAAAAACAAAAAAAAAAABAAAAAAAAAAAAAwkAAZEAAAACBQAAABNpc09yYWNsZVByb3ZpZGVMaXN0AAAAAAAAAAADAAAAAAAAAAABAAAAAAAAAAAAAwkAAZEAAAACBQAAABNpc09yYWNsZVByb3ZpZGVMaXN0AAAAAAAAAAAEAAAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAABAwUAAAAJaXNCbG9ja2VkCQAAAgAAAAECAAAAE2NvbnRyYWN0IGlzIGJsb2NrZWQDCQEAAAABIQAAAAEJAQAAAAhpc09yYWNsZQAAAAEFAAAAB2FjY291bnQJAAACAAAAAQIAAAARcGVybWlzc2lvbiBkZW5pZWQDAwkAAGcAAAACBQAAABRibG9ja0V4cGlyZVByb3ZpZGluZwUAAAAGaGVpZ2h0CQEAAAAPaXNPcmFjbGVQcm92aWRlAAAAAQUAAAAHYWNjb3VudAcJAAACAAAAAQIAAAAZcHJpY2UgaXMgYWxyZWFkeSBwcm92aWRlZAMDCQAAZgAAAAIFAAAABmhlaWdodAUAAAAUYmxvY2tFeHBpcmVQcm92aWRpbmcFAAAADmlzUHJpY2VQZW5kaW5nBwkAAAIAAAABAgAAABh1c2UgZmluaWxpemVDdXJyZW50UHJpY2UJAQAAAAhXcml0ZVNldAAAAAEJAARMAAAAAgkBAAAACURhdGFFbnRyeQAAAAIJAQAAABVnZXRPcmFjbGVJc1Byb3ZpZGVLZXkAAAABCQABkQAAAAIFAAAAC29yYWNsZXNMaXN0AAAAAAAAAAAAAwkAAGYAAAACBQAAAAZoZWlnaHQFAAAAFGJsb2NrRXhwaXJlUHJvdmlkaW5nBwkAAZEAAAACBQAAABNpc09yYWNsZVByb3ZpZGVMaXN0AAAAAAAAAAAACQAETAAAAAIJAQAAAAlEYXRhRW50cnkAAAACCQEAAAAVZ2V0T3JhY2xlSXNQcm92aWRlS2V5AAAAAQkAAZEAAAACBQAAAAtvcmFjbGVzTGlzdAAAAAAAAAAAAQMJAABmAAAAAgUAAAAGaGVpZ2h0BQAAABRibG9ja0V4cGlyZVByb3ZpZGluZwcJAAGRAAAAAgUAAAATaXNPcmFjbGVQcm92aWRlTGlzdAAAAAAAAAAAAQkABEwAAAACCQEAAAAJRGF0YUVudHJ5AAAAAgkBAAAAFWdldE9yYWNsZUlzUHJvdmlkZUtleQAAAAEJAAGRAAAAAgUAAAALb3JhY2xlc0xpc3QAAAAAAAAAAAIDCQAAZgAAAAIFAAAABmhlaWdodAUAAAAUYmxvY2tFeHBpcmVQcm92aWRpbmcHCQABkQAAAAIFAAAAE2lzT3JhY2xlUHJvdmlkZUxpc3QAAAAAAAAAAAIJAARMAAAAAgkBAAAACURhdGFFbnRyeQAAAAIJAQAAABVnZXRPcmFjbGVJc1Byb3ZpZGVLZXkAAAABCQABkQAAAAIFAAAAC29yYWNsZXNMaXN0AAAAAAAAAAADAwkAAGYAAAACBQAAAAZoZWlnaHQFAAAAFGJsb2NrRXhwaXJlUHJvdmlkaW5nBwkAAZEAAAACBQAAABNpc09yYWNsZVByb3ZpZGVMaXN0AAAAAAAAAAADCQAETAAAAAIJAQAAAAlEYXRhRW50cnkAAAACCQEAAAAVZ2V0T3JhY2xlSXNQcm92aWRlS2V5AAAAAQkAAZEAAAACBQAAAAtvcmFjbGVzTGlzdAAAAAAAAAAABAMJAABmAAAAAgUAAAAGaGVpZ2h0BQAAABRibG9ja0V4cGlyZVByb3ZpZGluZwcJAAGRAAAAAgUAAAATaXNPcmFjbGVQcm92aWRlTGlzdAAAAAAAAAAABAkABEwAAAACCQEAAAAJRGF0YUVudHJ5AAAAAgkBAAAAFWdldE9yYWNsZUlzUHJvdmlkZUtleQAAAAEFAAAAB2FjY291bnQGCQAETAAAAAIJAQAAAAlEYXRhRW50cnkAAAACCQEAAAAYZ2V0T3JhY2xlUHJvdmlkZVByaWNlS2V5AAAAAQUAAAAHYWNjb3VudAUAAAAIbmV3UHJpY2UJAARMAAAAAgkBAAAACURhdGFFbnRyeQAAAAIFAAAAF0Jsb2NrRXhwaXJlUHJvdmlkaW5nS2V5AwkAAGYAAAACBQAAAAZoZWlnaHQFAAAAFGJsb2NrRXhwaXJlUHJvdmlkaW5nCQAAZAAAAAIFAAAABmhlaWdodAUA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AAABCQEAAAAWZHJvcEVsZW1lbnRJbkpzb25BcnJheQAAAAIFAAAABmFkbWlucwUAAAAHYWNjb3VudAQAAAAKbGFzdEFjdGlvbgkBAAAAEmdldEFkbWluVm90ZUFjdGlvbgAAAAEFAAAAB2FjY291bnQEAAAACmJsb2NrVm90ZXMEAAAADSRsaXN0OTYyODk2OTYFAAAAGGFkbWluc0xpc3RXaXRob3V0QWNjb3VudAQAAAANJHNpemU5NjI4OTY5NgkAAZAAAAABBQAAAA0kbGlzdDk2Mjg5Njk2BAAAAA0kYWNjMDk2Mjg5Njk2BQAAAANuaWwDCQAAAAAAAAIFAAAADSRzaXplOTYyODk2OTYAAAAAAAAAAAAFAAAADSRhY2MwOTYyODk2OTYEAAAADSRhY2MxOTYyODk2OTYJAQAAAB1maWx0ZXJBZG1pbnNWb3RlQnlCbG9ja0FjdGlvbgAAAAIFAAAADSRhY2MwOTYyODk2OTYJAAGRAAAAAgUAAAANJGxpc3Q5NjI4OTY5NgAAAAAAAAAAAAMJAAAAAAAAAgUAAAANJHNpemU5NjI4OTY5NgAAAAAAAAAAAQUAAAANJGFjYzE5NjI4OTY5NgQAAAANJGFjYzI5NjI4OTY5NgkBAAAAHWZpbHRlckFkbWluc1ZvdGVCeUJsb2NrQWN0aW9uAAAAAgUAAAANJGFjYzE5NjI4OTY5NgkAAZEAAAACBQAAAA0kbGlzdDk2Mjg5Njk2AAAAAAAAAAABAwkAAAAAAAACBQAAAA0kc2l6ZTk2Mjg5Njk2AAAAAAAAAAACBQAAAA0kYWNjMjk2Mjg5Njk2BAAAAA0kYWNjMzk2Mjg5Njk2CQEAAAAdZmlsdGVyQWRtaW5zVm90ZUJ5QmxvY2tBY3Rpb24AAAACBQAAAA0kYWNjMjk2Mjg5Njk2CQABkQAAAAIFAAAADSRsaXN0OTYyODk2OTYAAAAAAAAAAAIDCQAAAAAAAAIFAAAADSRzaXplOTYyODk2OTYAAAAAAAAAAAMFAAAADSRhY2MzOTYyODk2OTYEAAAADSRhY2M0OTYyODk2OTYJAQAAAB1maWx0ZXJBZG1pbnNWb3RlQnlCbG9ja0FjdGlvbgAAAAIFAAAADSRhY2MzOTYyODk2OTYJAAGRAAAAAgUAAAANJGxpc3Q5NjI4OTY5NgAAAAAAAAAAAwMJAAAAAAAAAgUAAAANJHNpemU5NjI4OTY5NgAAAAAAAAAABAUAAAANJGFjYzQ5NjI4OTY5NgQAAAANJGFjYzU5NjI4OTY5NgkBAAAAHWZpbHRlckFkbWluc1ZvdGVCeUJsb2NrQWN0aW9uAAAAAgUAAAANJGFjYzQ5NjI4OTY5NgkAAZEAAAACBQAAAA0kbGlzdDk2Mjg5Njk2AAAAAAAAAAAEAwkAAAAAAAACBQAAAA0kc2l6ZTk2Mjg5Njk2AAAAAAAAAAAFBQAAAA0kYWNjNTk2Mjg5Njk2BAAAAA0kYWNjNjk2Mjg5Njk2CQEAAAAdZmlsdGVyQWRtaW5zVm90ZUJ5QmxvY2tBY3Rpb24AAAACBQAAAA0kYWNjNTk2Mjg5Njk2CQABkQAAAAIFAAAADSRsaXN0OTYyODk2OTYAAAAAAAAAAAUJAAACAAAAAQIAAAASTGlzdCBzaXplIGV4Y2VlZCA1BAAAAAx1bmJsb2NrVm90ZXMEAAAADSRsaXN0OTcyMDk3OTAFAAAAGGFkbWluc0xpc3RXaXRob3V0QWNjb3VudAQAAAANJHNpemU5NzIwOTc5MAkAAZAAAAABBQAAAA0kbGlzdDk3MjA5NzkwBAAAAA0kYWNjMDk3MjA5NzkwBQAAAANuaWwDCQAAAAAAAAIFAAAADSRzaXplOTcyMDk3OTAAAAAAAAAAAAAFAAAADSRhY2MwOTcyMDk3OTAEAAAADSRhY2MxOTcyMDk3OTAJAQAAAB9maWx0ZXJBZG1pbnNWb3RlQnlVbmJsb2NrQWN0aW9uAAAAAgUAAAANJGFjYzA5NzIwOTc5MAkAAZEAAAACBQAAAA0kbGlzdDk3MjA5NzkwAAAAAAAAAAAAAwkAAAAAAAACBQAAAA0kc2l6ZTk3MjA5NzkwAAAAAAAAAAABBQAAAA0kYWNjMTk3MjA5NzkwBAAAAA0kYWNjMjk3MjA5NzkwCQEAAAAfZmlsdGVyQWRtaW5zVm90ZUJ5VW5ibG9ja0FjdGlvbgAAAAIFAAAADSRhY2MxOTcyMDk3OTAJAAGRAAAAAgUAAAANJGxpc3Q5NzIwOTc5MAAAAAAAAAAAAQMJAAAAAAAAAgUAAAANJHNpemU5NzIwOTc5MAAAAAAAAAAAAgUAAAANJGFjYzI5NzIwOTc5MAQAAAANJGFjYzM5NzIwOTc5MAkBAAAAH2ZpbHRlckFkbWluc1ZvdGVCeVVuYmxvY2tBY3Rpb24AAAACBQAAAA0kYWNjMjk3MjA5NzkwCQABkQAAAAIFAAAADSRsaXN0OTcyMDk3OTAAAAAAAAAAAAIDCQAAAAAAAAIFAAAADSRzaXplOTcyMDk3OTAAAAAAAAAAAAMFAAAADSRhY2MzOTcyMDk3OTAEAAAADSRhY2M0OTcyMDk3OTAJAQAAAB9maWx0ZXJBZG1pbnNWb3RlQnlVbmJsb2NrQWN0aW9uAAAAAgUAAAANJGFjYzM5NzIwOTc5MAkAAZEAAAACBQAAAA0kbGlzdDk3MjA5NzkwAAAAAAAAAAADAwkAAAAAAAACBQAAAA0kc2l6ZTk3MjA5NzkwAAAAAAAAAAAEBQAAAA0kYWNjNDk3MjA5NzkwBAAAAA0kYWNjNTk3MjA5NzkwCQEAAAAfZmlsdGVyQWRtaW5zVm90ZUJ5VW5ibG9ja0FjdGlvbgAAAAIFAAAADSRhY2M0OTcyMDk3OTAJAAGRAAAAAgUAAAANJGxpc3Q5NzIwOTc5MAAAAAAAAAAABAMJAAAAAAAAAgUAAAANJHNpemU5NzIwOTc5MAAAAAAAAAAABQUAAAANJGFjYzU5NzIwOTc5MAQAAAANJGFjYzY5NzIwOTc5MAkBAAAAH2ZpbHRlckFkbWluc1ZvdGVCeVVuYmxvY2tBY3Rpb24AAAACBQAAAA0kYWNjNTk3MjA5NzkwCQABkQAAAAIFAAAADSRsaXN0OTcyMDk3OTAAAAAAAAAAAAUJAAACAAAAAQIAAAASTGlzdCBzaXplIGV4Y2VlZCA1BAAAAAt1cGRhdGVWb3RlcwQAAAANJGxpc3Q5ODEzOTg4MgUAAAAYYWRtaW5zTGlzdFdpdGhvdXRBY2NvdW50BAAAAA0kc2l6ZTk4MTM5ODgyCQABkAAAAAEFAAAADSRsaXN0OTgxMzk4ODIEAAAADSRhY2MwOTgxMzk4ODIFAAAAA25pbAMJAAAAAAAAAgUAAAANJHNpemU5ODEzOTg4MgAAAAAAAAAAAAUAAAANJGFjYzA5ODEzOTg4MgQAAAANJGFjYzE5ODEzOTg4MgkBAAAAHmZpbHRlckFkbWluc1ZvdGVCeVVwZGF0ZUFjdGlvbgAAAAIFAAAADSRhY2MwOTgxMzk4ODIJAAGRAAAAAgUAAAANJGxpc3Q5ODEzOTg4MgAAAAAAAAAAAAMJAAAAAAAAAgUAAAANJHNpemU5ODEzOTg4MgAAAAAAAAAAAQUAAAANJGFjYzE5ODEzOTg4MgQAAAANJGFjYzI5ODEzOTg4MgkBAAAAHmZpbHRlckFkbWluc1ZvdGVCeVVwZGF0ZUFjdGlvbgAAAAIFAAAADSRhY2MxOTgxMzk4ODIJAAGRAAAAAgUAAAANJGxpc3Q5ODEzOTg4MgAAAAAAAAAAAQMJAAAAAAAAAgUAAAANJHNpemU5ODEzOTg4MgAAAAAAAAAAAgUAAAANJGFjYzI5ODEzOTg4MgQAAAANJGFjYzM5ODEzOTg4MgkBAAAAHmZpbHRlckFkbWluc1ZvdGVCeVVwZGF0ZUFjdGlvbgAAAAIFAAAADSRhY2MyOTgxMzk4ODIJAAGRAAAAAgUAAAANJGxpc3Q5ODEzOTg4MgAAAAAAAAAAAgMJAAAAAAAAAgUAAAANJHNpemU5ODEzOTg4MgAAAAAAAAAAAwUAAAANJGFjYzM5ODEzOTg4MgQAAAANJGFjYzQ5ODEzOTg4MgkBAAAAHmZpbHRlckFkbWluc1ZvdGVCeVVwZGF0ZUFjdGlvbgAAAAIFAAAADSRhY2MzOTgxMzk4ODIJAAGRAAAAAgUAAAANJGxpc3Q5ODEzOTg4MgAAAAAAAAAAAwMJAAAAAAAAAgUAAAANJHNpemU5ODEzOTg4MgAAAAAAAAAABAUAAAANJGFjYzQ5ODEzOTg4MgQAAAANJGFjYzU5ODEzOTg4MgkBAAAAHmZpbHRlckFkbWluc1ZvdGVCeVVwZGF0ZUFjdGlvbgAAAAIFAAAADSRhY2M0OTgxMzk4ODIJAAGRAAAAAgUAAAANJGxpc3Q5ODEzOTg4MgAAAAAAAAAABAMJAAAAAAAAAgUAAAANJHNpemU5ODEzOTg4MgAAAAAAAAAABQUAAAANJGFjYzU5ODEzOTg4MgQAAAANJGFjYzY5ODEzOTg4MgkBAAAAHmZpbHRlckFkbWluc1ZvdGVCeVVwZGF0ZUFjdGlvbgAAAAIFAAAADSRhY2M1OTgxMzk4ODIJAAGRAAAAAgUAAAANJGxpc3Q5ODEzOTg4MgAAAAAAAAAABQkAAAIAAAABAgAAABJMaXN0IHNpemUgZXhjZWVkIDUEAAAADmJsb2NrVm90ZUNvdW50CQAAZAAAAAIJAAGQAAAAAQUAAAAKYmxvY2tWb3RlcwMJAAAAAAAAAgUAAAAGYWN0aW9uBQAAAAVCTE9DSwAAAAAAAAAAAQAAAAAAAAAAAAQAAAAQdW5ibG9ja1ZvdGVDb3VudAkAAGQAAAACCQABkAAAAAEFAAAADHVuYmxvY2tWb3RlcwMJAAAAAAAAAgUAAAAGYWN0aW9uBQAAAAdVTkJMT0NLAAAAAAAAAAABAAAAAAAAAAAABAAAABB1cGRhdGVWb3Rlc0NvdW50CQAAZAAAAAIJAAGQAAAAAQUAAAALdXBkYXRlVm90ZXMDCQAAAAAAAAIFAAAABmFjdGlvbgUAAAAGVVBEQVRFAAAAAAAAAAABAAAAAAAAAAAAAwMJAABnAAAAAgUAAAAOYmxvY2tWb3RlQ291bnQFAAAAE2JmdENvZWZmaWNpZW50QWRtaW4GCQAAZwAAAAIFAAAAEHVuYmxvY2tWb3RlQ291bnQFAAAAE2JmdENvZWZmaWNpZW50QWRtaW4JAQAAAAhXcml0ZVNldAAAAAEJAARMAAAAAgkBAAAACURhdGFFbnRyeQAAAAIFAAAADElzQmxvY2tlZEtleQMJAABnAAAAAgUAAAAOYmxvY2tWb3RlQ291bnQFAAAAE2JmdENvZWZmaWNpZW50QWRtaW4GBwkABEwAAAACCQEAAAAJRGF0YUVudHJ5AAAAAgUAAAASQmxvY2tFeHBpcmVWb3RlS2V5AAAAAAAAAAAACQAETAAAAAIJAQAAAAlEYXRhRW50cnkAAAACBQAAABdCbG9ja0V4cGlyZVByb3ZpZGluZ0tleQAAAAAAAAAAAAkABEwAAAACCQEAAAAJRGF0YUVudHJ5AAAAAgUAAAARSXNQcmljZVBlbmRpbmdLZXkHCQAETAAAAAIJAQAAAAlEYXRhRW50cnkAAAACCQEAAAAVZ2V0QWRtaW5Wb3RlQWN0aW9uS2V5AAAAAQkAAZEAAAACBQAAABhhZG1pbnNMaXN0V2l0aG91dEFjY291bnQAAAAAAAAAAAACAAAAAAkABEwAAAACCQEAAAAJRGF0YUVudHJ5AAAAAgkBAAAAFWdldEFkbWluVm90ZUFjdGlvbktleQAAAAEJAAGRAAAAAgUAAAAYYWRtaW5zTGlzdFdpdGhvdXRBY2NvdW50AAAAAAAAAAABAgAAAAAJAARMAAAAAgkBAAAACURhdGFFbnRyeQAAAAIJAQAAABVnZXRBZG1pblZvdGVBY3Rpb25LZXkAAAABCQABkQAAAAIFAAAAGGFkbWluc0xpc3RXaXRob3V0QWNjb3VudAAAAAAAAAAAAgIAAAAACQAETAAAAAIJAQAAAAlEYXRhRW50cnkAAAACCQEAAAAVZ2V0QWRtaW5Wb3RlQWN0aW9uS2V5AAAAAQkAAZEAAAACBQAAABhhZG1pbnNMaXN0V2l0aG91dEFjY291bnQAAAAAAAAAAAMCAAAAAAUAAAADbmlsAwkAAGYAAAACBQAAABB1cGRhdGVWb3Rlc0NvdW50BQAAABNiZnRDb2VmZmljaWVudEFkbWluCQEAAAAIV3JpdGVTZXQAAAABCQAETAAAAAIJAQAAAAlEYXRhRW50cnkAAAACBQAAABJCbG9ja0V4cGlyZVZvdGVLZXkAAAAAAAAAAAAJAARMAAAAAgkBAAAACURhdGFFbnRyeQAAAAIFAAAAF0Jsb2NrRXhwaXJlUHJvdmlkaW5nS2V5AAAAAAAAAAAACQAETAAAAAIJAQAAAAlEYXRhRW50cnkAAAACBQAAABRTY3JpcHRVcGRhdGVCbG9ja0tleQkAAGQAAAACBQAAAAZoZWlnaHQFAAAAFHNjcmlwdFVwZGF0ZUludGVydmFsCQAETAAAAAIJAQAAAAlEYXRhRW50cnkAAAACCQEAAAAVZ2V0QWRtaW5Wb3RlQWN0aW9uS2V5AAAAAQkAAZEAAAACBQAAABhhZG1pbnNMaXN0V2l0aG91dEFjY291bnQAAAAAAAAAAAACAAAAAAkABEwAAAACCQEAAAAJRGF0YUVudHJ5AAAAAgkBAAAAFWdldEFkbWluVm90ZUFjdGlvbktleQAAAAEJAAGRAAAAAgUAAAAYYWRtaW5zTGlzdFdpdGhvdXRBY2NvdW50AAAAAAAAAAABAgAAAAAJAARMAAAAAgkBAAAACURhdGFFbnRyeQAAAAIJAQAAABVnZXRBZG1pblZvdGVBY3Rpb25LZXkAAAABCQABkQAAAAIFAAAAGGFkbWluc0xpc3RXaXRob3V0QWNjb3VudAAAAAAAAAAAAgIAAAAACQAETAAAAAIJAQAAAAlEYXRhRW50cnkAAAACCQEAAAAVZ2V0QWRtaW5Wb3RlQWN0aW9uS2V5AAAAAQkAAZEAAAACBQAAABhhZG1pbnNMaXN0V2l0aG91dEFjY291bnQAAAAAAAAAAAMCAAAAAAUAAAADbmlsAwkAAGYAAAACBQAAAAZoZWlnaHQFAAAAD2Jsb2NrRXhwaXJlVm90ZQkBAAAACFdyaXRlU2V0AAAAAQkABEwAAAACCQEAAAAJRGF0YUVudHJ5AAAAAgUAAAASQmxvY2tFeHBpcmVWb3RlS2V5CQAAZAAAAAIFAAAABmhlaWdodAUAAAAMdm90ZUludGVydmFsCQAETAAAAAIJAQAAAAlEYXRhRW50cnkAAAACCQEAAAAVZ2V0QWRtaW5Wb3RlQWN0aW9uS2V5AAAAAQUAAAAHYWNjb3VudAUAAAAGYWN0aW9uCQAETAAAAAIJAQAAAAlEYXRhRW50cnkAAAACCQEAAAAVZ2V0QWRtaW5Wb3RlQWN0aW9uS2V5AAAAAQkAAZEAAAACBQAAABhhZG1pbnNMaXN0V2l0aG91dEFjY291bnQAAAAAAAAAAAACAAAAAAkABEwAAAACCQEAAAAJRGF0YUVudHJ5AAAAAgkBAAAAFWdldEFkbWluVm90ZUFjdGlvbktleQAAAAEJAAGRAAAAAgUAAAAYYWRtaW5zTGlzdFdpdGhvdXRBY2NvdW50AAAAAAAAAAABAgAAAAAJAARMAAAAAgkBAAAACURhdGFFbnRyeQAAAAIJAQAAABVnZXRBZG1pblZvdGVBY3Rpb25LZXkAAAABCQABkQAAAAIFAAAAGGFkbWluc0xpc3RXaXRob3V0QWNjb3VudAAAAAAAAAAAAgIAAAAACQAETAAAAAIJAQAAAAlEYXRhRW50cnkAAAACCQEAAAAVZ2V0QWRtaW5Wb3RlQWN0aW9uS2V5AAAAAQkAAZEAAAACBQAAABhhZG1pbnNMaXN0V2l0aG91dEFjY291bnQAAAAAAAAAAAMCAAAAAAUAAAADbmlsCQEAAAAIV3JpdGVTZXQAAAABCQAETAAAAAIJAQAAAAlEYXRhRW50cnkAAAACCQEAAAAVZ2V0QWRtaW5Wb3RlQWN0aW9uS2V5AAAAAQUAAAAHYWNjb3VudAUAAAAGYWN0aW9uBQAAAANuaWwAAAAAaOYlkg==", "chainId": 87, "height": 1758912, "spentComplexity": 0 } View: original | compacted Prev: BP8YWA6WRZtbAFoSLVYoJa3G8soMcyohrG18KYjkMi1E Next: ADoRptztBLZA7ZAZxPBG1iKBpgYKb1TSZYf3ciny9pgj 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
107107 func getOracleIsProvideKey (owner) = (OracleIsProvideKey + owner)
108108
109109
110110 func getOracleProvidePriceKey (owner) = (OracleProvidePriceKey + owner)
111111
112112
113113 func getAdminVoteKey (owner) = (AdminVoteKey + owner)
114114
115115
116116 func getAdminVoteActionKey (owner) = ((getAdminVoteKey(owner) + "_") + ActionKey)
117117
118118
119119 func getBlackSwarmPriceKey (block) = ((BlackSwarmPriceKey + "_") + toString(block))
120120
121121
122122 func getPriceHistoryKey (block) = ((PriceKey + "_") + toString(block))
123123
124124
125125 let price = getNumberByKey(PriceKey)
126126
127127 let providingInterval = getNumberByKey(ProvidingIntervalKey)
128128
129129 let blockExpireProviding = getNumberByKey(BlockExpireProvidingKey)
130130
131131 let blockExpireVote = getNumberByKey(BlockExpireVoteKey)
132132
133133 let scriptUpdateBlock = getNumberByKey(ScriptUpdateBlockKey)
134134
135135 let scriptUpdateInterval = getNumberByKey(ScriptUpdateIntervalKey)
136136
137137 let isPricePending = getBoolByKey(IsPricePendingKey)
138138
139139 let isBlocked = getBoolByKey(IsBlockedKey)
140140
141141 let bftCoefficientOracle = getNumberByKey(CoefficientOracleKey)
142142
143143 let bftCoefficientAdmin = getNumberByKey(CoefficientAdminKey)
144144
145145 let percentPriceOffset = getNumberByKey(PriceOffsetKey)
146146
147147 let voteInterval = getNumberByKey(VoteIntervalKey)
148148
149149 let oracles = getStringByKey(OraclesKey)
150150
151151 let admins = getStringByKey(AdminsKey)
152152
153153 let oraclesList = convertJsonArrayToList(oracles)
154154
155155 let adminsList = convertJsonArrayToList(admins)
156156
157157 func getAdminVoteAction (owner) = getStringByKey(getAdminVoteActionKey(owner))
158158
159159
160160 func isOracleProvide (owner) = getBoolByKey(getOracleIsProvideKey(owner))
161161
162162
163163 func isOracleProvideInt (owner) = if (isOracleProvide(owner))
164164 then 1
165165 else 0
166166
167167
168168 func getOracleProvidePrice (owner) = getNumberByKey(getOracleProvidePriceKey(owner))
169169
170170
171171 func isOracle (address) = match indexOf(oracles, address) {
172172 case _: Int =>
173173 true
174174 case _ =>
175175 false
176176 }
177177
178178
179179 func isAdmin (address) = match indexOf(admins, address) {
180180 case _: Int =>
181181 true
182182 case _ =>
183183 false
184184 }
185185
186186
187187 func sumOraclePrice (base,address) = (base + (getOracleProvidePrice(address) * isOracleProvideInt(address)))
188188
189189
190190 func filterAdminsVoteByAction (result,address,action) = address :: result
191191
192192
193193 func filterAdminsVoteByBlockAction (result,address) = filterAdminsVoteByAction(result, address, BLOCK)
194194
195195
196196 func filterAdminsVoteByUnblockAction (result,address) = filterAdminsVoteByAction(result, address, UNBLOCK)
197197
198198
199199 func filterAdminsVoteByUpdateAction (result,address) = filterAdminsVoteByAction(result, address, UPDATE)
200200
201201
202202 @Callable(i)
203203 func setCurrentPrice (newPrice) = {
204204 let account = toString(i.caller)
205205 let isOracleProvideList = [isOracleProvide(oraclesList[0]), isOracleProvide(oraclesList[1]), isOracleProvide(oraclesList[2]), isOracleProvide(oraclesList[3]), isOracleProvide(oraclesList[4])]
206206 let priceProvidingCount = ((((((if (isOracleProvideList[0])
207207 then 1
208208 else 0) + (if (isOracleProvideList[1])
209209 then 1
210210 else 0)) + (if (isOracleProvideList[2])
211211 then 1
212212 else 0)) + (if (isOracleProvideList[3])
213213 then 1
214214 else 0)) + (if (isOracleProvideList[4])
215215 then 1
216216 else 0)) + 1)
217217 if (isBlocked)
218218 then throw("contract is blocked")
219219 else if (!(isOracle(account)))
220220 then throw("permission denied")
221221 else if (if ((blockExpireProviding >= height))
222222 then isOracleProvide(account)
223223 else false)
224224 then throw("price is already provided")
225225 else if (if ((height > blockExpireProviding))
226226 then isPricePending
227227 else false)
228228 then throw("use finilizeCurrentPrice")
229229 else WriteSet([DataEntry(getOracleIsProvideKey(oraclesList[0]), if ((height > blockExpireProviding))
230230 then false
231231 else isOracleProvideList[0]), DataEntry(getOracleIsProvideKey(oraclesList[1]), if ((height > blockExpireProviding))
232232 then false
233233 else isOracleProvideList[1]), DataEntry(getOracleIsProvideKey(oraclesList[2]), if ((height > blockExpireProviding))
234234 then false
235235 else isOracleProvideList[2]), DataEntry(getOracleIsProvideKey(oraclesList[3]), if ((height > blockExpireProviding))
236236 then false
237237 else isOracleProvideList[3]), DataEntry(getOracleIsProvideKey(oraclesList[4]), if ((height > blockExpireProviding))
238238 then false
239239 else isOracleProvideList[4]), DataEntry(getOracleIsProvideKey(account), true), DataEntry(getOracleProvidePriceKey(account), newPrice), DataEntry(BlockExpireProvidingKey, if ((height > blockExpireProviding))
240240 then (height + providingInterval)
241241 else blockExpireProviding), DataEntry(IsPricePendingKey, if (if ((blockExpireProviding >= height))
242242 then (priceProvidingCount >= bftCoefficientOracle)
243243 else false)
244244 then true
245245 else isPricePending)])
246246 }
247247
248248
249249
250250 @Callable(i)
251251 func finilizeCurrentPrice () = {
252252 let isOracleProvideList = [isOracleProvide(oraclesList[0]), isOracleProvide(oraclesList[1]), isOracleProvide(oraclesList[2]), isOracleProvide(oraclesList[3]), isOracleProvide(oraclesList[4])]
253253 let priceProvidingCount = (((((if (isOracleProvideList[0])
254254 then 1
255255 else 0) + (if (isOracleProvideList[1])
256256 then 1
257257 else 0)) + (if (isOracleProvideList[2])
258258 then 1
259259 else 0)) + (if (isOracleProvideList[3])
260260 then 1
261261 else 0)) + (if (isOracleProvideList[4])
262262 then 1
263263 else 0))
264264 let priceSum = (((((getOracleProvidePrice(oraclesList[0]) * (if (isOracleProvideList[0])
265265 then 1
266266 else 0)) + (getOracleProvidePrice(oraclesList[1]) * (if (isOracleProvideList[1])
267267 then 1
268268 else 0))) + (getOracleProvidePrice(oraclesList[2]) * (if (isOracleProvideList[2])
269269 then 1
270270 else 0))) + (getOracleProvidePrice(oraclesList[3]) * (if (isOracleProvideList[3])
271271 then 1
272272 else 0))) + (getOracleProvidePrice(oraclesList[4]) * (if (isOracleProvideList[4])
273273 then 1
274274 else 0)))
275275 let newPrice = (priceSum / priceProvidingCount)
276276 if (isBlocked)
277277 then throw("contract is blocked")
278278 else if (if (!(isPricePending))
279279 then true
280280 else (blockExpireProviding >= height))
281281 then throw("wait for the end of the price providing")
282282 else if ((bftCoefficientOracle > priceProvidingCount))
283283 then throw("2/3 oracles need to set a price")
284284 else if (if ((newPrice >= (price + ((price * percentPriceOffset) / 100))))
285285 then true
286286 else ((price - ((price * percentPriceOffset) / 100)) >= newPrice))
287287 then WriteSet([DataEntry(IsBlockedKey, true), DataEntry(getBlackSwarmPriceKey(height), newPrice)])
288288 else WriteSet([DataEntry(PriceKey, newPrice), DataEntry(getPriceHistoryKey(height), newPrice), DataEntry(IsPricePendingKey, false)])
289289 }
290290
291291
292292
293293 @Callable(i)
294294 func vote (action) = {
295295 let account = toString(i.caller)
296296 let adminsListWithoutAccount = convertJsonArrayToList(dropElementInJsonArray(admins, account))
297297 let lastAction = getAdminVoteAction(account)
298298 let blockVotes = {
299299 let $list96289696 = adminsListWithoutAccount
300300 let $size96289696 = size($list96289696)
301301 let $acc096289696 = nil
302302 if (($size96289696 == 0))
303303 then $acc096289696
304304 else {
305305 let $acc196289696 = filterAdminsVoteByBlockAction($acc096289696, $list96289696[0])
306306 if (($size96289696 == 1))
307307 then $acc196289696
308308 else {
309309 let $acc296289696 = filterAdminsVoteByBlockAction($acc196289696, $list96289696[1])
310310 if (($size96289696 == 2))
311311 then $acc296289696
312312 else {
313313 let $acc396289696 = filterAdminsVoteByBlockAction($acc296289696, $list96289696[2])
314314 if (($size96289696 == 3))
315315 then $acc396289696
316316 else {
317317 let $acc496289696 = filterAdminsVoteByBlockAction($acc396289696, $list96289696[3])
318318 if (($size96289696 == 4))
319319 then $acc496289696
320320 else {
321321 let $acc596289696 = filterAdminsVoteByBlockAction($acc496289696, $list96289696[4])
322322 if (($size96289696 == 5))
323323 then $acc596289696
324324 else {
325325 let $acc696289696 = filterAdminsVoteByBlockAction($acc596289696, $list96289696[5])
326326 throw("List size exceed 5")
327327 }
328328 }
329329 }
330330 }
331331 }
332332 }
333333 }
334334 let unblockVotes = {
335335 let $list97209790 = adminsListWithoutAccount
336336 let $size97209790 = size($list97209790)
337337 let $acc097209790 = nil
338338 if (($size97209790 == 0))
339339 then $acc097209790
340340 else {
341341 let $acc197209790 = filterAdminsVoteByUnblockAction($acc097209790, $list97209790[0])
342342 if (($size97209790 == 1))
343343 then $acc197209790
344344 else {
345345 let $acc297209790 = filterAdminsVoteByUnblockAction($acc197209790, $list97209790[1])
346346 if (($size97209790 == 2))
347347 then $acc297209790
348348 else {
349349 let $acc397209790 = filterAdminsVoteByUnblockAction($acc297209790, $list97209790[2])
350350 if (($size97209790 == 3))
351351 then $acc397209790
352352 else {
353353 let $acc497209790 = filterAdminsVoteByUnblockAction($acc397209790, $list97209790[3])
354354 if (($size97209790 == 4))
355355 then $acc497209790
356356 else {
357357 let $acc597209790 = filterAdminsVoteByUnblockAction($acc497209790, $list97209790[4])
358358 if (($size97209790 == 5))
359359 then $acc597209790
360360 else {
361361 let $acc697209790 = filterAdminsVoteByUnblockAction($acc597209790, $list97209790[5])
362362 throw("List size exceed 5")
363363 }
364364 }
365365 }
366366 }
367367 }
368368 }
369369 }
370370 let updateVotes = {
371371 let $list98139882 = adminsListWithoutAccount
372372 let $size98139882 = size($list98139882)
373373 let $acc098139882 = nil
374374 if (($size98139882 == 0))
375375 then $acc098139882
376376 else {
377377 let $acc198139882 = filterAdminsVoteByUpdateAction($acc098139882, $list98139882[0])
378378 if (($size98139882 == 1))
379379 then $acc198139882
380380 else {
381381 let $acc298139882 = filterAdminsVoteByUpdateAction($acc198139882, $list98139882[1])
382382 if (($size98139882 == 2))
383383 then $acc298139882
384384 else {
385385 let $acc398139882 = filterAdminsVoteByUpdateAction($acc298139882, $list98139882[2])
386386 if (($size98139882 == 3))
387387 then $acc398139882
388388 else {
389389 let $acc498139882 = filterAdminsVoteByUpdateAction($acc398139882, $list98139882[3])
390390 if (($size98139882 == 4))
391391 then $acc498139882
392392 else {
393393 let $acc598139882 = filterAdminsVoteByUpdateAction($acc498139882, $list98139882[4])
394394 if (($size98139882 == 5))
395395 then $acc598139882
396396 else {
397397 let $acc698139882 = filterAdminsVoteByUpdateAction($acc598139882, $list98139882[5])
398398 throw("List size exceed 5")
399399 }
400400 }
401401 }
402402 }
403403 }
404404 }
405405 }
406406 let blockVoteCount = (size(blockVotes) + (if ((action == BLOCK))
407407 then 1
408408 else 0))
409409 let unblockVoteCount = (size(unblockVotes) + (if ((action == UNBLOCK))
410410 then 1
411411 else 0))
412412 let updateVotesCount = (size(updateVotes) + (if ((action == UPDATE))
413413 then 1
414414 else 0))
415415 if (if ((blockVoteCount >= bftCoefficientAdmin))
416416 then true
417417 else (unblockVoteCount >= bftCoefficientAdmin))
418418 then WriteSet([DataEntry(IsBlockedKey, if ((blockVoteCount >= bftCoefficientAdmin))
419419 then true
420420 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]), "")])
421421 else if ((updateVotesCount > bftCoefficientAdmin))
422422 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]), "")])
423423 else if ((height > blockExpireVote))
424424 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]), "")])
425425 else WriteSet([DataEntry(getAdminVoteActionKey(account), action)])
426426 }
427427
428428

github/deemru/w8io/786bc32 
80.89 ms