tx · HtZJSiyvyExBiXPeo2FCcZJBAXubvtXDCyDPrAjSDKUE

3P5Bfd58PPfNvBM2Hy8QfbcDqMeNtzg7KfP:  -0.01400000 Waves

2019.11.22 20:19 [1807052] smart account 3P5Bfd58PPfNvBM2Hy8QfbcDqMeNtzg7KfP > SELF 0.00000000 Waves

{ "type": 13, "id": "HtZJSiyvyExBiXPeo2FCcZJBAXubvtXDCyDPrAjSDKUE", "fee": 1400000, "feeAssetId": null, "timestamp": 1574443268158, "version": 1, "sender": "3P5Bfd58PPfNvBM2Hy8QfbcDqMeNtzg7KfP", "senderPublicKey": "GqXuX2WHNr3WUqTaeH2YCySFY45NAJoE9RmY9bEWkzh", "proofs": [ "21pR7uV4uNXCqXVMtSXB4C3dh51d9FAaenNTwAz6RNQ8Vdy8pSsWDWu1CaszAKtbyCzN7SxWzUBfxZAKATwFNB6J" ], "script": "base64:AAIDAAAAAAAAAAkIARIAEgMKAQgAAAAzAQAAAA5nZXROdW1iZXJCeUtleQAAAAEAAAADa2V5BAAAAAckbWF0Y2gwCQAEGgAAAAIFAAAABHRoaXMFAAAAA2tleQMJAAABAAAAAgUAAAAHJG1hdGNoMAIAAAADSW50BAAAAAFhBQAAAAckbWF0Y2gwBQAAAAFhAAAAAAAAAAAAAQAAAA5nZXRTdHJpbmdCeUtleQAAAAEAAAADa2V5BAAAAAckbWF0Y2gwCQAEHQAAAAIFAAAABHRoaXMFAAAAA2tleQMJAAABAAAAAgUAAAAHJG1hdGNoMAIAAAAGU3RyaW5nBAAAAAFhBQAAAAckbWF0Y2gwBQAAAAFhAgAAAAABAAAADGdldEJvb2xCeUtleQAAAAEAAAADa2V5BAAAAAckbWF0Y2gwCQAEGwAAAAIFAAAABHRoaXMFAAAAA2tleQMJAAABAAAAAgUAAAAHJG1hdGNoMAIAAAAHQm9vbGVhbgQAAAABYQUAAAAHJG1hdGNoMAUAAAABYQcBAAAAGGdldE51bWJlckJ5QWRkcmVzc0FuZEtleQAAAAIAAAAHYWRkcmVzcwAAAANrZXkEAAAAByRtYXRjaDAJAAQaAAAAAgUAAAAHYWRkcmVzcwUAAAADa2V5AwkAAAEAAAACBQAAAAckbWF0Y2gwAgAAAANJbnQEAAAAAWEFAAAAByRtYXRjaDAFAAAAAWEAAAAAAAAAAAABAAAAGGdldFN0cmluZ0J5QWRkcmVzc0FuZEtleQAAAAIAAAAHYWRkcmVzcwAAAANrZXkEAAAAByRtYXRjaDAJAAQdAAAAAgUAAAAHYWRkcmVzcwUAAAADa2V5AwkAAAEAAAACBQAAAAckbWF0Y2gwAgAAAAZTdHJpbmcEAAAAAWEFAAAAByRtYXRjaDAFAAAAAWECAAAAAAEAAAAWZHJvcEVsZW1lbnRJbkpzb25BcnJheQAAAAIAAAAFYXJyYXkAAAAHZWxlbWVudAQAAAAMc3BsaXRlZEFycmF5CQAEtQAAAAIFAAAABWFycmF5BQAAAAdlbGVtZW50AwkAAAAAAAACCQABLwAAAAIJAAGRAAAAAgUAAAAMc3BsaXRlZEFycmF5AAAAAAAAAAABAAAAAAAAAAABAgAAAAEsCQABLAAAAAIJAAGRAAAAAgUAAAAMc3BsaXRlZEFycmF5AAAAAAAAAAAACQABMAAAAAIJAAGRAAAAAgUAAAAMc3BsaXRlZEFycmF5AAAAAAAAAAABAAAAAAAAAAABCQABLAAAAAIJAQAAAAlkcm9wUmlnaHQAAAACCQABkQAAAAIFAAAADHNwbGl0ZWRBcnJheQAAAAAAAAAAAAAAAAAAAAAAAQkAAZEAAAACBQAAAAxzcGxpdGVkQXJyYXkAAAAAAAAAAAEBAAAAFmNvbnZlcnRKc29uQXJyYXlUb0xpc3QAAAABAAAACWpzb25BcnJheQkABLUAAAACBQAAAAlqc29uQXJyYXkCAAAAASwAAAAABUJMT0NLAgAAAAVibG9jawAAAAAHVU5CTE9DSwIAAAAHdW5ibG9jawAAAAAGVVBEQVRFAgAAAAZ1cGRhdGUAAAAACk9yYWNsZXNLZXkCAAAAB29yYWNsZXMAAAAACUFkbWluc0tleQIAAAAGYWRtaW5zAAAAAA9Wb3RlSW50ZXJ2YWxLZXkCAAAADXZvdGVfaW50ZXJ2YWwAAAAAFENvZWZmaWNpZW50T3JhY2xlS2V5AgAAABJjb2VmZmljaWVudF9vcmFjbGUAAAAAE0NvZWZmaWNpZW50QWRtaW5LZXkCAAAAEWNvZWZmaWNpZW50X2FkbWluAAAAABdTY3JpcHRVcGRhdGVJbnRlcnZhbEtleQIAAAAWc2NyaXB0X3VwZGF0ZV9pbnRlcnZhbAAAAAAOUHJpY2VPZmZzZXRLZXkCAAAADHByaWNlX29mZnNldAAAAAAIUHJpY2VLZXkCAAAABXByaWNlAAAAAAxJc0Jsb2NrZWRLZXkCAAAACmlzX2Jsb2NrZWQAAAAAEkJsb2NrRXhwaXJlVm90ZUtleQIAAAARdm90ZV9leHBpcmVfYmxvY2sAAAAAFFNjcmlwdFVwZGF0ZUJsb2NrS2V5AgAAABNzY3JpcHRfdXBkYXRlX2Jsb2NrAAAAAA1QcmljZUluZGV4S2V5AgAAAAtwcmljZV9pbmRleAEAAAAPZ2V0QWRtaW5Wb3RlS2V5AAAAAQAAAAVvd25lcgkAASwAAAACAgAAAAthZG1pbl92b3RlXwUAAAAFb3duZXIBAAAAFWdldEFkbWluVm90ZUFjdGlvbktleQAAAAEAAAAFb3duZXIJAAEsAAAAAgkAASwAAAACCQEAAAAPZ2V0QWRtaW5Wb3RlS2V5AAAAAQUAAAAFb3duZXICAAAAAV8CAAAABmFjdGlvbgEAAAAVZ2V0QmxhY2tTd2FybVByaWNlS2V5AAAAAQAAAAVibG9jawkAASwAAAACCQABLAAAAAICAAAAEWJsYWNrX3N3YXJtX3ByaWNlAgAAAAFfCQABpAAAAAEFAAAABWJsb2NrAQAAABJnZXRQcmljZUhpc3RvcnlLZXkAAAABAAAABWJsb2NrCQABLAAAAAIJAAEsAAAAAgUAAAAIUHJpY2VLZXkCAAAAAV8JAAGkAAAAAQUAAAAFYmxvY2sBAAAAGGdldEhlaWdodFByaWNlQnlJbmRleEtleQAAAAEAAAAFaW5kZXgJAAEsAAAAAgkAASwAAAACBQAAAA1QcmljZUluZGV4S2V5AgAAAAFfCQABpAAAAAEFAAAABWluZGV4AQAAABhnZXRPcmFjbGVQcm92aWRlUHJpY2VLZXkAAAABAAAABmhlaWdodAkAASwAAAACAgAAAAZwcmljZV8JAAGkAAAAAQUAAAAGaGVpZ2h0AAAAAAVwcmljZQkBAAAADmdldE51bWJlckJ5S2V5AAAAAQUAAAAIUHJpY2VLZXkAAAAACnByaWNlSW5kZXgJAQAAAA5nZXROdW1iZXJCeUtleQAAAAEFAAAADVByaWNlSW5kZXhLZXkAAAAAD2Jsb2NrRXhwaXJlVm90ZQkBAAAADmdldE51bWJlckJ5S2V5AAAAAQUAAAASQmxvY2tFeHBpcmVWb3RlS2V5AAAAABFzY3JpcHRVcGRhdGVCbG9jawkBAAAADmdldE51bWJlckJ5S2V5AAAAAQUAAAAUU2NyaXB0VXBkYXRlQmxvY2tLZXkAAAAAFHNjcmlwdFVwZGF0ZUludGVydmFsCQEAAAAOZ2V0TnVtYmVyQnlLZXkAAAABBQAAABdTY3JpcHRVcGRhdGVJbnRlcnZhbEtleQAAAAAJaXNCbG9ja2VkCQEAAAAMZ2V0Qm9vbEJ5S2V5AAAAAQUAAAAMSXNCbG9ja2VkS2V5AAAAABRiZnRDb2VmZmljaWVudE9yYWNsZQkBAAAADmdldE51bWJlckJ5S2V5AAAAAQUAAAAUQ29lZmZpY2llbnRPcmFjbGVLZXkAAAAAE2JmdENvZWZmaWNpZW50QWRtaW4JAQAAAA5nZXROdW1iZXJCeUtleQAAAAEFAAAAE0NvZWZmaWNpZW50QWRtaW5LZXkAAAAAEnBlcmNlbnRQcmljZU9mZnNldAkBAAAADmdldE51bWJlckJ5S2V5AAAAAQUAAAAOUHJpY2VPZmZzZXRLZXkAAAAADHZvdGVJbnRlcnZhbAkBAAAADmdldE51bWJlckJ5S2V5AAAAAQUAAAAPVm90ZUludGVydmFsS2V5AAAAAAdvcmFjbGVzCQEAAAAOZ2V0U3RyaW5nQnlLZXkAAAABBQAAAApPcmFjbGVzS2V5AAAAAAZhZG1pbnMJAQAAAA5nZXRTdHJpbmdCeUtleQAAAAEFAAAACUFkbWluc0tleQAAAAALb3JhY2xlc0xpc3QJAQAAABZjb252ZXJ0SnNvbkFycmF5VG9MaXN0AAAAAQUAAAAHb3JhY2xlcwAAAAAKYWRtaW5zTGlzdAkBAAAAFmNvbnZlcnRKc29uQXJyYXlUb0xpc3QAAAABBQAAAAZhZG1pbnMBAAAAEmdldEFkbWluVm90ZUFjdGlvbgAAAAEAAAAFb3duZXIJAQAAAA5nZXRTdHJpbmdCeUtleQAAAAEJAQAAABVnZXRBZG1pblZvdGVBY3Rpb25LZXkAAAABBQAAAAVvd25lcgEAAAAWZ2V0T3JhY2xlUHJvdmlkZUhlaWdodAAAAAIAAAAFb3duZXIAAAAGaGVpZ2h0CQEAAAAYZ2V0TnVtYmVyQnlBZGRyZXNzQW5kS2V5AAAAAgkBAAAAHEBleHRyVXNlcihhZGRyZXNzRnJvbVN0cmluZykAAAABBQAAAAVvd25lcgkBAAAAGGdldE9yYWNsZVByb3ZpZGVQcmljZUtleQAAAAEFAAAABmhlaWdodAEAAAAPZ2V0UHJpY2VIaXN0b3J5AAAAAQAAAAZoZWlnaHQJAQAAAA5nZXROdW1iZXJCeUtleQAAAAEJAQAAABJnZXRQcmljZUhpc3RvcnlLZXkAAAABBQAAAAZoZWlnaHQBAAAACGlzT3JhY2xlAAAAAQAAAAdhZGRyZXNzCQEAAAAJaXNEZWZpbmVkAAAAAQkABLMAAAACBQAAAAdvcmFjbGVzBQAAAAdhZGRyZXNzAQAAAAdpc0FkbWluAAAAAQAAAAdhZGRyZXNzCQEAAAAJaXNEZWZpbmVkAAAAAQkABLMAAAACBQAAAAZhZG1pbnMFAAAAB2FkZHJlc3MBAAAAGGZpbHRlckFkbWluc1ZvdGVCeUFjdGlvbgAAAAMAAAAGcmVzdWx0AAAAB2FkZHJlc3MAAAAGYWN0aW9uCQAETAAAAAIFAAAAB2FkZHJlc3MFAAAABnJlc3VsdAEAAAAdZmlsdGVyQWRtaW5zVm90ZUJ5QmxvY2tBY3Rpb24AAAACAAAABnJlc3VsdAAAAAdhZGRyZXNzCQEAAAAYZmlsdGVyQWRtaW5zVm90ZUJ5QWN0aW9uAAAAAwUAAAAGcmVzdWx0BQAAAAdhZGRyZXNzBQAAAAVCTE9DSwEAAAAfZmlsdGVyQWRtaW5zVm90ZUJ5VW5ibG9ja0FjdGlvbgAAAAIAAAAGcmVzdWx0AAAAB2FkZHJlc3MJAQAAABhmaWx0ZXJBZG1pbnNWb3RlQnlBY3Rpb24AAAADBQAAAAZyZXN1bHQFAAAAB2FkZHJlc3MFAAAAB1VOQkxPQ0sBAAAAHmZpbHRlckFkbWluc1ZvdGVCeVVwZGF0ZUFjdGlvbgAAAAIAAAAGcmVzdWx0AAAAB2FkZHJlc3MJAQAAABhmaWx0ZXJBZG1pbnNWb3RlQnlBY3Rpb24AAAADBQAAAAZyZXN1bHQFAAAAB2FkZHJlc3MFAAAABlVQREFURQAAAAIAAAABaQEAAAAUZmluYWxpemVDdXJyZW50UHJpY2UAAAAABAAAAAZwcmljZXMJAARMAAAAAgkBAAAAFmdldE9yYWNsZVByb3ZpZGVIZWlnaHQAAAACCQABkQAAAAIFAAAAC29yYWNsZXNMaXN0AAAAAAAAAAAABQAAAAZoZWlnaHQJAARMAAAAAgkBAAAAFmdldE9yYWNsZVByb3ZpZGVIZWlnaHQAAAACCQABkQAAAAIFAAAAC29yYWNsZXNMaXN0AAAAAAAAAAABBQAAAAZoZWlnaHQJAARMAAAAAgkBAAAAFmdldE9yYWNsZVByb3ZpZGVIZWlnaHQAAAACCQABkQAAAAIFAAAAC29yYWNsZXNMaXN0AAAAAAAAAAACBQAAAAZoZWlnaHQJAARMAAAAAgkBAAAAFmdldE9yYWNsZVByb3ZpZGVIZWlnaHQAAAACCQABkQAAAAIFAAAAC29yYWNsZXNMaXN0AAAAAAAAAAADBQAAAAZoZWlnaHQJAARMAAAAAgkBAAAAFmdldE9yYWNsZVByb3ZpZGVI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BmNhbGxlcgQAAAAYYWRtaW5zTGlzdFdpdGhvdXRBY2NvdW50CQEAAAAWY29udmVydEpzb25BcnJheVRvTGlzdAAAAAEJAQAAABZkcm9wRWxlbWVudEluSnNvbkFycmF5AAAAAgUAAAAGYWRtaW5zBQAAAAdhY2NvdW50BAAAAApsYXN0QWN0aW9uCQEAAAASZ2V0QWRtaW5Wb3RlQWN0aW9uAAAAAQUAAAAHYWNjb3VudAQAAAAKYmxvY2tWb3RlcwQAAAANJGxpc3Q2NDkzNjU2MQUAAAAYYWRtaW5zTGlzdFdpdGhvdXRBY2NvdW50BAAAAA0kc2l6ZTY0OTM2NTYxCQABkAAAAAEFAAAADSRsaXN0NjQ5MzY1NjEEAAAADSRhY2MwNjQ5MzY1NjEFAAAAA25pbAMJAAAAAAAAAgUAAAANJHNpemU2NDkzNjU2MQAAAAAAAAAAAAUAAAANJGFjYzA2NDkzNjU2MQQAAAANJGFjYzE2NDkzNjU2MQkBAAAAHWZpbHRlckFkbWluc1ZvdGVCeUJsb2NrQWN0aW9uAAAAAgUAAAANJGFjYzA2NDkzNjU2MQkAAZEAAAACBQAAAA0kbGlzdDY0OTM2NTYxAAAAAAAAAAAAAwkAAAAAAAACBQAAAA0kc2l6ZTY0OTM2NTYxAAAAAAAAAAABBQAAAA0kYWNjMTY0OTM2NTYxBAAAAA0kYWNjMjY0OTM2NTYxCQEAAAAdZmlsdGVyQWRtaW5zVm90ZUJ5QmxvY2tBY3Rpb24AAAACBQAAAA0kYWNjMTY0OTM2NTYxCQABkQAAAAIFAAAADSRsaXN0NjQ5MzY1NjEAAAAAAAAAAAEDCQAAAAAAAAIFAAAADSRzaXplNjQ5MzY1NjEAAAAAAAAAAAIFAAAADSRhY2MyNjQ5MzY1NjEEAAAADSRhY2MzNjQ5MzY1NjEJAQAAAB1maWx0ZXJBZG1pbnNWb3RlQnlCbG9ja0FjdGlvbgAAAAIFAAAADSRhY2MyNjQ5MzY1NjEJAAGRAAAAAgUAAAANJGxpc3Q2NDkzNjU2MQAAAAAAAAAAAgMJAAAAAAAAAgUAAAANJHNpemU2NDkzNjU2MQAAAAAAAAAAAwUAAAANJGFjYzM2NDkzNjU2MQQAAAANJGFjYzQ2NDkzNjU2MQkBAAAAHWZpbHRlckFkbWluc1ZvdGVCeUJsb2NrQWN0aW9uAAAAAgUAAAANJGFjYzM2NDkzNjU2MQkAAZEAAAACBQAAAA0kbGlzdDY0OTM2NTYxAAAAAAAAAAADAwkAAAAAAAACBQAAAA0kc2l6ZTY0OTM2NTYxAAAAAAAAAAAEBQAAAA0kYWNjNDY0OTM2NTYxBAAAAA0kYWNjNTY0OTM2NTYxCQEAAAAdZmlsdGVyQWRtaW5zVm90ZUJ5QmxvY2tBY3Rpb24AAAACBQAAAA0kYWNjNDY0OTM2NTYxCQABkQAAAAIFAAAADSRsaXN0NjQ5MzY1NjEAAAAAAAAAAAQDCQAAAAAAAAIFAAAADSRzaXplNjQ5MzY1NjEAAAAAAAAAAAUFAAAADSRhY2M1NjQ5MzY1NjEEAAAADSRhY2M2NjQ5MzY1NjEJAQAAAB1maWx0ZXJBZG1pbnNWb3RlQnlCbG9ja0FjdGlvbgAAAAIFAAAADSRhY2M1NjQ5MzY1NjEJAAGRAAAAAgUAAAANJGxpc3Q2NDkzNjU2MQAAAAAAAAAABQkAAAIAAAABAgAAABJMaXN0IHNpemUgZXhjZWVkIDUEAAAADHVuYmxvY2tWb3RlcwQAAAANJGxpc3Q2NTg1NjY1NQUAAAAYYWRtaW5zTGlzdFdpdGhvdXRBY2NvdW50BAAAAA0kc2l6ZTY1ODU2NjU1CQABkAAAAAEFAAAADSRsaXN0NjU4NTY2NTUEAAAADSRhY2MwNjU4NTY2NTUFAAAAA25pbAMJAAAAAAAAAgUAAAANJHNpemU2NTg1NjY1NQAAAAAAAAAAAAUAAAANJGFjYzA2NTg1NjY1NQQAAAANJGFjYzE2NTg1NjY1NQkBAAAAH2ZpbHRlckFkbWluc1ZvdGVCeVVuYmxvY2tBY3Rpb24AAAACBQAAAA0kYWNjMDY1ODU2NjU1CQABkQAAAAIFAAAADSRsaXN0NjU4NTY2NTUAAAAAAAAAAAADCQAAAAAAAAIFAAAADSRzaXplNjU4NTY2NTUAAAAAAAAAAAEFAAAADSRhY2MxNjU4NTY2NTUEAAAADSRhY2MyNjU4NTY2NTUJAQAAAB9maWx0ZXJBZG1pbnNWb3RlQnlVbmJsb2NrQWN0aW9uAAAAAgUAAAANJGFjYzE2NTg1NjY1NQkAAZEAAAACBQAAAA0kbGlzdDY1ODU2NjU1AAAAAAAAAAABAwkAAAAAAAACBQAAAA0kc2l6ZTY1ODU2NjU1AAAAAAAAAAACBQAAAA0kYWNjMjY1ODU2NjU1BAAAAA0kYWNjMzY1ODU2NjU1CQEAAAAfZmlsdGVyQWRtaW5zVm90ZUJ5VW5ibG9ja0FjdGlvbgAAAAIFAAAADSRhY2MyNjU4NTY2NTUJAAGRAAAAAgUAAAANJGxpc3Q2NTg1NjY1NQAAAAAAAAAAAgMJAAAAAAAAAgUAAAANJHNpemU2NTg1NjY1NQAAAAAAAAAAAwUAAAANJGFjYzM2NTg1NjY1NQQAAAANJGFjYzQ2NTg1NjY1NQkBAAAAH2ZpbHRlckFkbWluc1ZvdGVCeVVuYmxvY2tBY3Rpb24AAAACBQAAAA0kYWNjMzY1ODU2NjU1CQABkQAAAAIFAAAADSRsaXN0NjU4NTY2NTUAAAAAAAAAAAMDCQAAAAAAAAIFAAAADSRzaXplNjU4NTY2NTUAAAAAAAAAAAQFAAAADSRhY2M0NjU4NTY2NTUEAAAADSRhY2M1NjU4NTY2NTUJAQAAAB9maWx0ZXJBZG1pbnNWb3RlQnlVbmJsb2NrQWN0aW9uAAAAAgUAAAANJGFjYzQ2NTg1NjY1NQkAAZEAAAACBQAAAA0kbGlzdDY1ODU2NjU1AAAAAAAAAAAEAwkAAAAAAAACBQAAAA0kc2l6ZTY1ODU2NjU1AAAAAAAAAAAFBQAAAA0kYWNjNTY1ODU2NjU1BAAAAA0kYWNjNjY1ODU2NjU1CQEAAAAfZmlsdGVyQWRtaW5zVm90ZUJ5VW5ibG9ja0FjdGlvbgAAAAIFAAAADSRhY2M1NjU4NTY2NTUJAAGRAAAAAgUAAAANJGxpc3Q2NTg1NjY1NQAAAAAAAAAABQkAAAIAAAABAgAAABJMaXN0IHNpemUgZXhjZWVkIDUEAAAAC3VwZGF0ZVZvdGVzBAAAAA0kbGlzdDY2Nzg2NzQ3BQAAABhhZG1pbnNMaXN0V2l0aG91dEFjY291bnQEAAAADSRzaXplNjY3ODY3NDcJAAGQAAAAAQUAAAANJGxpc3Q2Njc4Njc0NwQAAAANJGFjYzA2Njc4Njc0NwUAAAADbmlsAwkAAAAAAAACBQAAAA0kc2l6ZTY2Nzg2NzQ3AAAAAAAAAAAABQAAAA0kYWNjMDY2Nzg2NzQ3BAAAAA0kYWNjMTY2Nzg2NzQ3CQEAAAAeZmlsdGVyQWRtaW5zVm90ZUJ5VXBkYXRlQWN0aW9uAAAAAgUAAAANJGFjYzA2Njc4Njc0NwkAAZEAAAACBQAAAA0kbGlzdDY2Nzg2NzQ3AAAAAAAAAAAAAwkAAAAAAAACBQAAAA0kc2l6ZTY2Nzg2NzQ3AAAAAAAAAAABBQAAAA0kYWNjMTY2Nzg2NzQ3BAAAAA0kYWNjMjY2Nzg2NzQ3CQEAAAAeZmlsdGVyQWRtaW5zVm90ZUJ5VXBkYXRlQWN0aW9uAAAAAgUAAAANJGFjYzE2Njc4Njc0NwkAAZEAAAACBQAAAA0kbGlzdDY2Nzg2NzQ3AAAAAAAAAAABAwkAAAAAAAACBQAAAA0kc2l6ZTY2Nzg2NzQ3AAAAAAAAAAACBQAAAA0kYWNjMjY2Nzg2NzQ3BAAAAA0kYWNjMzY2Nzg2NzQ3CQEAAAAeZmlsdGVyQWRtaW5zVm90ZUJ5VXBkYXRlQWN0aW9uAAAAAgUAAAANJGFjYzI2Njc4Njc0NwkAAZEAAAACBQAAAA0kbGlzdDY2Nzg2NzQ3AAAAAAAAAAACAwkAAAAAAAACBQAAAA0kc2l6ZTY2Nzg2NzQ3AAAAAAAAAAADBQAAAA0kYWNjMzY2Nzg2NzQ3BAAAAA0kYWNjNDY2Nzg2NzQ3CQEAAAAeZmlsdGVyQWRtaW5zVm90ZUJ5VXBkYXRlQWN0aW9uAAAAAgUAAAANJGFjYzM2Njc4Njc0NwkAAZEAAAACBQAAAA0kbGlzdDY2Nzg2NzQ3AAAAAAAAAAADAwkAAAAAAAACBQAAAA0kc2l6ZTY2Nzg2NzQ3AAAAAAAAAAAEBQAAAA0kYWNjNDY2Nzg2NzQ3BAAAAA0kYWNjNTY2Nzg2NzQ3CQEAAAAeZmlsdGVyQWRtaW5zVm90ZUJ5VXBkYXRlQWN0aW9uAAAAAgUAAAANJGFjYzQ2Njc4Njc0NwkAAZEAAAACBQAAAA0kbGlzdDY2Nzg2NzQ3AAAAAAAAAAAEAwkAAAAAAAACBQAAAA0kc2l6ZTY2Nzg2NzQ3AAAAAAAAAAAFBQAAAA0kYWNjNTY2Nzg2NzQ3BAAAAA0kYWNjNjY2Nzg2NzQ3CQEAAAAeZmlsdGVyQWRtaW5zVm90ZUJ5VXBkYXRlQWN0aW9uAAAAAgUAAAANJGFjYzU2Njc4Njc0NwkAAZEAAAACBQAAAA0kbGlzdDY2Nzg2NzQ3AAAAAAAAAAAFCQAAAgAAAAECAAAAEkxpc3Qgc2l6ZSBleGNlZWQgNQQAAAAOYmxvY2tWb3RlQ291bnQJAABkAAAAAgkAAZAAAAABBQAAAApibG9ja1ZvdGVzAwkAAAAAAAACBQAAAAZhY3Rpb24FAAAABUJMT0NLAAAAAAAAAAABAAAAAAAAAAAABAAAABB1bmJsb2NrVm90ZUNvdW50CQAAZAAAAAIJAAGQAAAAAQUAAAAMdW5ibG9ja1ZvdGVzAwkAAAAAAAACBQAAAAZhY3Rpb24FAAAAB1VOQkxPQ0sAAAAAAAAAAAEAAAAAAAAAAAAEAAAAEHVwZGF0ZVZvdGVzQ291bnQJAABkAAAAAgkAAZAAAAABBQAAAAt1cGRhdGVWb3RlcwMJAAAAAAAAAgUAAAAGYWN0aW9uBQAAAAZVUERBVEUAAAAAAAAAAAEAAAAAAAAAAAAEAAAAC3Jlc2V0UmVzdWx0CQAETAAAAAIJAQAAAAlEYXRhRW50cnkAAAACBQAAABJCbG9ja0V4cGlyZVZvdGVLZXkAAAAAAAAAAAAJAARMAAAAAgkBAAAACURhdGFFbnRyeQAAAAIJAQAAABVnZXRBZG1pblZvdGVBY3Rpb25LZXkAAAABCQABkQAAAAIFAAAAGGFkbWluc0xpc3RXaXRob3V0QWNjb3VudAAAAAAAAAAAAAIAAAAACQAETAAAAAIJAQAAAAlEYXRhRW50cnkAAAACCQEAAAAVZ2V0QWRtaW5Wb3RlQWN0aW9uS2V5AAAAAQkAAZEAAAACBQAAABhhZG1pbnNMaXN0V2l0aG91dEFjY291bnQAAAAAAAAAAAECAAAAAAkABEwAAAACCQEAAAAJRGF0YUVudHJ5AAAAAgkBAAAAFWdldEFkbWluVm90ZUFjdGlvbktleQAAAAEJAAGRAAAAAgUAAAAYYWRtaW5zTGlzdFdpdGhvdXRBY2NvdW50AAAAAAAAAAACAgAAAAAJAARMAAAAAgkBAAAACURhdGFFbnRyeQAAAAIJAQAAABVnZXRBZG1pblZvdGVBY3Rpb25LZXkAAAABCQABkQAAAAIFAAAAGGFkbWluc0xpc3RXaXRob3V0QWNjb3VudAAAAAAAAAAAAwIAAAAABQAAAANuaWwDAwkAAGcAAAACBQAAAA5ibG9ja1ZvdGVDb3VudAUAAAATYmZ0Q29lZmZpY2llbnRBZG1pbgYJAABnAAAAAgUAAAAQdW5ibG9ja1ZvdGVDb3VudAUAAAATYmZ0Q29lZmZpY2llbnRBZG1pbgkBAAAACFdyaXRlU2V0AAAAAQkABEwAAAACCQEAAAAJRGF0YUVudHJ5AAAAAgUAAAAMSXNCbG9ja2VkS2V5AwkAAGcAAAACBQAAAA5ibG9ja1ZvdGVDb3VudAUAAAATYmZ0Q29lZmZpY2llbnRBZG1pbgYHBQAAAAtyZXNldFJlc3VsdAMJAABmAAAAAgUAAAAQdXBkYXRlVm90ZXNDb3VudAUAAAATYmZ0Q29lZmZpY2llbnRBZG1pbgkBAAAACFdyaXRlU2V0AAAAAQkABEwAAAACCQEAAAAJRGF0YUVudHJ5AAAAAgUAAAAUU2NyaXB0VXBkYXRlQmxvY2tLZXkDCQAAZgAAAAIFAAAAEHVwZGF0ZVZvdGVzQ291bnQFAAAAE2JmdENvZWZmaWNpZW50QWRtaW4JAABkAAAAAgUAAAAGaGVpZ2h0BQAAABRzY3JpcHRVcGRhdGVJbnRlcnZhbAUAAAARc2NyaXB0VXBkYXRlQmxvY2sFAAAAC3Jlc2V0UmVzdWx0CQEAAAAIV3JpdGVTZXQAAAABCQAETAAAAAIJAQAAAAlEYXRhRW50cnkAAAACBQAAABJCbG9ja0V4cGlyZVZvdGVLZXkDCQAAZgAAAAIFAAAABmhlaWdodAUAAAAPYmxvY2tFeHBpcmVWb3RlCQAAZAAAAAIFAAAABmhlaWdodAUAAAAMdm90ZUludGVydmFsBQAAAA9ibG9ja0V4cGlyZVZvdGUJAARMAAAAAgkBAAAACURhdGFFbnRyeQAAAAIJAQAAABVnZXRBZG1pblZvdGVBY3Rpb25LZXkAAAABBQAAAAdhY2NvdW50BQAAAAZhY3Rpb24FAAAAA25pbAAAAACff0xy", "chainId": 87, "height": 1807052, "spentComplexity": 0 } View: original | compacted Prev: CYU1g5oWVMW3vL3134EWtUFosRFHQRjPUi9s5N2ga1x2 Next: FsWaUS6hSBxs9Z2UoLuMf8BYetEcZjMTLTJfQmafYvnT Diff:
OldNewDifferences
7070
7171 let ScriptUpdateIntervalKey = "script_update_interval"
7272
73-let ProvidingIntervalKey = "providing_interval"
73+let PriceOffsetKey = "price_offset"
7474
7575 let PriceKey = "price"
7676
77-let PriceOffsetKey = "price_offset"
78-
79-let IsPricePendingKey = "is_pending_price"
80-
8177 let IsBlockedKey = "is_blocked"
82-
83-let OracleIsProvideKey = "oracle_is_provide_"
84-
85-let OracleProvidePriceKey = "oracle_price_provide_"
86-
87-let AdminVoteKey = "admin_vote_"
88-
89-let ActionKey = "action"
90-
91-let BlockExpireProvidingKey = "providing_expire_block"
92-
93-let BlackSwarmPriceKey = "black_swarm_price"
9478
9579 let BlockExpireVoteKey = "vote_expire_block"
9680
9882
9983 let PriceIndexKey = "price_index"
10084
101-func getOracleIsProvideKey (owner) = (OracleIsProvideKey + owner)
85+func getAdminVoteKey (owner) = ("admin_vote_" + owner)
10286
10387
104-func getOracleProvidePriceKey (owner) = (OracleProvidePriceKey + owner)
88+func getAdminVoteActionKey (owner) = ((getAdminVoteKey(owner) + "_") + "action")
10589
10690
107-func getAdminVoteKey (owner) = (AdminVoteKey + owner)
108-
109-
110-func getAdminVoteActionKey (owner) = ((getAdminVoteKey(owner) + "_") + ActionKey)
111-
112-
113-func getBlackSwarmPriceKey (block) = ((BlackSwarmPriceKey + "_") + toString(block))
91+func getBlackSwarmPriceKey (block) = (("black_swarm_price" + "_") + toString(block))
11492
11593
11694 func getPriceHistoryKey (block) = ((PriceKey + "_") + toString(block))
11997 func getHeightPriceByIndexKey (index) = ((PriceIndexKey + "_") + toString(index))
12098
12199
100+func getOracleProvidePriceKey (height) = ("price_" + toString(height))
101+
102+
122103 let price = getNumberByKey(PriceKey)
123104
124105 let priceIndex = getNumberByKey(PriceIndexKey)
125-
126-let providingInterval = getNumberByKey(ProvidingIntervalKey)
127-
128-let blockExpireProviding = getNumberByKey(BlockExpireProvidingKey)
129106
130107 let blockExpireVote = getNumberByKey(BlockExpireVoteKey)
131108
132109 let scriptUpdateBlock = getNumberByKey(ScriptUpdateBlockKey)
133110
134111 let scriptUpdateInterval = getNumberByKey(ScriptUpdateIntervalKey)
135-
136-let isPricePending = getBoolByKey(IsPricePendingKey)
137112
138113 let isBlocked = getBoolByKey(IsBlockedKey)
139114
156131 func getAdminVoteAction (owner) = getStringByKey(getAdminVoteActionKey(owner))
157132
158133
159-func isOracleProvide (owner) = getBoolByKey(getOracleIsProvideKey(owner))
134+func getOracleProvideHeight (owner,height) = getNumberByAddressAndKey(addressFromStringValue(owner), getOracleProvidePriceKey(height))
160135
161136
162-func isOracleProvideInt (owner) = if (isOracleProvide(owner))
163- then 1
164- else 0
165-
166-
167-func getOracleProvidePrice (owner) = getNumberByKey(getOracleProvidePriceKey(owner))
137+func getPriceHistory (height) = getNumberByKey(getPriceHistoryKey(height))
168138
169139
170140 func isOracle (address) = isDefined(indexOf(oracles, address))
171141
172142
173143 func isAdmin (address) = isDefined(indexOf(admins, address))
174-
175-
176-func sumOraclePrice (base,address) = (base + (getOracleProvidePrice(address) * isOracleProvideInt(address)))
177144
178145
179146 func filterAdminsVoteByAction (result,address,action) = address :: result
189156
190157
191158 @Callable(i)
192-func setCurrentPrice (newPrice) = {
193- let account = toString(i.caller)
194- let isOracleProvideList = [isOracleProvide(oraclesList[0]), isOracleProvide(oraclesList[1]), isOracleProvide(oraclesList[2]), isOracleProvide(oraclesList[3]), isOracleProvide(oraclesList[4])]
195- let priceProvidingCount = ((((((if (isOracleProvideList[0])
159+func finalizeCurrentPrice () = {
160+ let prices = [getOracleProvideHeight(oraclesList[0], height), getOracleProvideHeight(oraclesList[1], height), getOracleProvideHeight(oraclesList[2], height), getOracleProvideHeight(oraclesList[3], height), getOracleProvideHeight(oraclesList[4], height)]
161+ let priceProvidingCount = (((((if ((prices[0] != 0))
196162 then 1
197- else 0) + (if (isOracleProvideList[1])
163+ else 0) + (if ((prices[1] != 0))
198164 then 1
199- else 0)) + (if (isOracleProvideList[2])
165+ else 0)) + (if ((prices[2] != 0))
200166 then 1
201- else 0)) + (if (isOracleProvideList[3])
167+ else 0)) + (if ((prices[3] != 0))
202168 then 1
203- else 0)) + (if (isOracleProvideList[4])
204- then 1
205- else 0)) + 1)
206- if (isBlocked)
207- then throw("contract is blocked")
208- else if (!(isOracle(account)))
209- then throw("permission denied")
210- else if (if ((blockExpireProviding >= height))
211- then isOracleProvide(account)
212- else false)
213- then throw("price is already provided")
214- else if (if ((height > blockExpireProviding))
215- then isPricePending
216- else false)
217- then throw("use finalizeCurrentPrice")
218- else WriteSet([DataEntry(getOracleIsProvideKey(oraclesList[0]), if ((height > blockExpireProviding))
219- then false
220- else isOracleProvideList[0]), DataEntry(getOracleIsProvideKey(oraclesList[1]), if ((height > blockExpireProviding))
221- then false
222- else isOracleProvideList[1]), DataEntry(getOracleIsProvideKey(oraclesList[2]), if ((height > blockExpireProviding))
223- then false
224- else isOracleProvideList[2]), DataEntry(getOracleIsProvideKey(oraclesList[3]), if ((height > blockExpireProviding))
225- then false
226- else isOracleProvideList[3]), DataEntry(getOracleIsProvideKey(oraclesList[4]), if ((height > blockExpireProviding))
227- then false
228- else isOracleProvideList[4]), DataEntry(getOracleIsProvideKey(account), true), DataEntry(getOracleProvidePriceKey(account), newPrice), DataEntry(BlockExpireProvidingKey, if ((height > blockExpireProviding))
229- then (height + providingInterval)
230- else blockExpireProviding), DataEntry(IsPricePendingKey, if (if ((blockExpireProviding >= height))
231- then (priceProvidingCount >= bftCoefficientOracle)
232- else false)
233- then true
234- else isPricePending)])
235- }
236-
237-
238-
239-@Callable(i)
240-func finalizeCurrentPrice () = {
241- let isOracleProvideList = [isOracleProvide(oraclesList[0]), isOracleProvide(oraclesList[1]), isOracleProvide(oraclesList[2]), isOracleProvide(oraclesList[3]), isOracleProvide(oraclesList[4])]
242- let priceProvidingCount = (((((if (isOracleProvideList[0])
243- then 1
244- else 0) + (if (isOracleProvideList[1])
245- then 1
246- else 0)) + (if (isOracleProvideList[2])
247- then 1
248- else 0)) + (if (isOracleProvideList[3])
249- then 1
250- else 0)) + (if (isOracleProvideList[4])
169+ else 0)) + (if ((prices[4] != 0))
251170 then 1
252171 else 0))
253- let priceSum = (((((getOracleProvidePrice(oraclesList[0]) * (if (isOracleProvideList[0])
254- then 1
255- else 0)) + (getOracleProvidePrice(oraclesList[1]) * (if (isOracleProvideList[1])
256- then 1
257- else 0))) + (getOracleProvidePrice(oraclesList[2]) * (if (isOracleProvideList[2])
258- then 1
259- else 0))) + (getOracleProvidePrice(oraclesList[3]) * (if (isOracleProvideList[3])
260- then 1
261- else 0))) + (getOracleProvidePrice(oraclesList[4]) * (if (isOracleProvideList[4])
262- then 1
263- else 0)))
172+ let priceSum = ((((prices[0] + prices[1]) + prices[2]) + prices[3]) + prices[4])
264173 let newPrice = (priceSum / priceProvidingCount)
265174 if (isBlocked)
266175 then throw("contract is blocked")
267- else if (if (!(isPricePending))
268- then true
269- else (blockExpireProviding >= height))
270- then throw("wait for the end of the price providing")
176+ else if ((getPriceHistory(height) != 0))
177+ then throw("wait next block")
271178 else if ((bftCoefficientOracle > priceProvidingCount))
272- then throw("3/5 oracles need to set a price")
179+ then throw((((toString(bftCoefficientOracle) + "/5 oracles need to set a price (") + toString(priceProvidingCount)) + ")"))
273180 else if (if ((newPrice >= (price + ((price * percentPriceOffset) / 100))))
274181 then true
275182 else ((price - ((price * percentPriceOffset) / 100)) >= newPrice))
276183 then WriteSet([DataEntry(IsBlockedKey, true), DataEntry(getBlackSwarmPriceKey(height), newPrice)])
277184 else {
278185 let newPriceIndex = (priceIndex + 1)
279- WriteSet([DataEntry(PriceKey, newPrice), DataEntry(getPriceHistoryKey(height), newPrice), DataEntry(IsPricePendingKey, false), DataEntry(PriceIndexKey, newPriceIndex), DataEntry(getHeightPriceByIndexKey(newPriceIndex), height)])
186+ WriteSet([DataEntry(PriceKey, newPrice), DataEntry(getPriceHistoryKey(height), newPrice), DataEntry(PriceIndexKey, newPriceIndex), DataEntry(getHeightPriceByIndexKey(newPriceIndex), height)])
280187 }
281188 }
282189
288195 let adminsListWithoutAccount = convertJsonArrayToList(dropElementInJsonArray(admins, account))
289196 let lastAction = getAdminVoteAction(account)
290197 let blockVotes = {
291- let $list98299897 = adminsListWithoutAccount
292- let $size98299897 = size($list98299897)
293- let $acc098299897 = nil
294- if (($size98299897 == 0))
295- then $acc098299897
198+ let $list64936561 = adminsListWithoutAccount
199+ let $size64936561 = size($list64936561)
200+ let $acc064936561 = nil
201+ if (($size64936561 == 0))
202+ then $acc064936561
296203 else {
297- let $acc198299897 = filterAdminsVoteByBlockAction($acc098299897, $list98299897[0])
298- if (($size98299897 == 1))
299- then $acc198299897
204+ let $acc164936561 = filterAdminsVoteByBlockAction($acc064936561, $list64936561[0])
205+ if (($size64936561 == 1))
206+ then $acc164936561
300207 else {
301- let $acc298299897 = filterAdminsVoteByBlockAction($acc198299897, $list98299897[1])
302- if (($size98299897 == 2))
303- then $acc298299897
208+ let $acc264936561 = filterAdminsVoteByBlockAction($acc164936561, $list64936561[1])
209+ if (($size64936561 == 2))
210+ then $acc264936561
304211 else {
305- let $acc398299897 = filterAdminsVoteByBlockAction($acc298299897, $list98299897[2])
306- if (($size98299897 == 3))
307- then $acc398299897
212+ let $acc364936561 = filterAdminsVoteByBlockAction($acc264936561, $list64936561[2])
213+ if (($size64936561 == 3))
214+ then $acc364936561
308215 else {
309- let $acc498299897 = filterAdminsVoteByBlockAction($acc398299897, $list98299897[3])
310- if (($size98299897 == 4))
311- then $acc498299897
216+ let $acc464936561 = filterAdminsVoteByBlockAction($acc364936561, $list64936561[3])
217+ if (($size64936561 == 4))
218+ then $acc464936561
312219 else {
313- let $acc598299897 = filterAdminsVoteByBlockAction($acc498299897, $list98299897[4])
314- if (($size98299897 == 5))
315- then $acc598299897
220+ let $acc564936561 = filterAdminsVoteByBlockAction($acc464936561, $list64936561[4])
221+ if (($size64936561 == 5))
222+ then $acc564936561
316223 else {
317- let $acc698299897 = filterAdminsVoteByBlockAction($acc598299897, $list98299897[5])
224+ let $acc664936561 = filterAdminsVoteByBlockAction($acc564936561, $list64936561[5])
318225 throw("List size exceed 5")
319226 }
320227 }
324231 }
325232 }
326233 let unblockVotes = {
327- let $list99219991 = adminsListWithoutAccount
328- let $size99219991 = size($list99219991)
329- let $acc099219991 = nil
330- if (($size99219991 == 0))
331- then $acc099219991
234+ let $list65856655 = adminsListWithoutAccount
235+ let $size65856655 = size($list65856655)
236+ let $acc065856655 = nil
237+ if (($size65856655 == 0))
238+ then $acc065856655
332239 else {
333- let $acc199219991 = filterAdminsVoteByUnblockAction($acc099219991, $list99219991[0])
334- if (($size99219991 == 1))
335- then $acc199219991
240+ let $acc165856655 = filterAdminsVoteByUnblockAction($acc065856655, $list65856655[0])
241+ if (($size65856655 == 1))
242+ then $acc165856655
336243 else {
337- let $acc299219991 = filterAdminsVoteByUnblockAction($acc199219991, $list99219991[1])
338- if (($size99219991 == 2))
339- then $acc299219991
244+ let $acc265856655 = filterAdminsVoteByUnblockAction($acc165856655, $list65856655[1])
245+ if (($size65856655 == 2))
246+ then $acc265856655
340247 else {
341- let $acc399219991 = filterAdminsVoteByUnblockAction($acc299219991, $list99219991[2])
342- if (($size99219991 == 3))
343- then $acc399219991
248+ let $acc365856655 = filterAdminsVoteByUnblockAction($acc265856655, $list65856655[2])
249+ if (($size65856655 == 3))
250+ then $acc365856655
344251 else {
345- let $acc499219991 = filterAdminsVoteByUnblockAction($acc399219991, $list99219991[3])
346- if (($size99219991 == 4))
347- then $acc499219991
252+ let $acc465856655 = filterAdminsVoteByUnblockAction($acc365856655, $list65856655[3])
253+ if (($size65856655 == 4))
254+ then $acc465856655
348255 else {
349- let $acc599219991 = filterAdminsVoteByUnblockAction($acc499219991, $list99219991[4])
350- if (($size99219991 == 5))
351- then $acc599219991
256+ let $acc565856655 = filterAdminsVoteByUnblockAction($acc465856655, $list65856655[4])
257+ if (($size65856655 == 5))
258+ then $acc565856655
352259 else {
353- let $acc699219991 = filterAdminsVoteByUnblockAction($acc599219991, $list99219991[5])
260+ let $acc665856655 = filterAdminsVoteByUnblockAction($acc565856655, $list65856655[5])
354261 throw("List size exceed 5")
355262 }
356263 }
360267 }
361268 }
362269 let updateVotes = {
363- let $list1001410083 = adminsListWithoutAccount
364- let $size1001410083 = size($list1001410083)
365- let $acc01001410083 = nil
366- if (($size1001410083 == 0))
367- then $acc01001410083
270+ let $list66786747 = adminsListWithoutAccount
271+ let $size66786747 = size($list66786747)
272+ let $acc066786747 = nil
273+ if (($size66786747 == 0))
274+ then $acc066786747
368275 else {
369- let $acc11001410083 = filterAdminsVoteByUpdateAction($acc01001410083, $list1001410083[0])
370- if (($size1001410083 == 1))
371- then $acc11001410083
276+ let $acc166786747 = filterAdminsVoteByUpdateAction($acc066786747, $list66786747[0])
277+ if (($size66786747 == 1))
278+ then $acc166786747
372279 else {
373- let $acc21001410083 = filterAdminsVoteByUpdateAction($acc11001410083, $list1001410083[1])
374- if (($size1001410083 == 2))
375- then $acc21001410083
280+ let $acc266786747 = filterAdminsVoteByUpdateAction($acc166786747, $list66786747[1])
281+ if (($size66786747 == 2))
282+ then $acc266786747
376283 else {
377- let $acc31001410083 = filterAdminsVoteByUpdateAction($acc21001410083, $list1001410083[2])
378- if (($size1001410083 == 3))
379- then $acc31001410083
284+ let $acc366786747 = filterAdminsVoteByUpdateAction($acc266786747, $list66786747[2])
285+ if (($size66786747 == 3))
286+ then $acc366786747
380287 else {
381- let $acc41001410083 = filterAdminsVoteByUpdateAction($acc31001410083, $list1001410083[3])
382- if (($size1001410083 == 4))
383- then $acc41001410083
288+ let $acc466786747 = filterAdminsVoteByUpdateAction($acc366786747, $list66786747[3])
289+ if (($size66786747 == 4))
290+ then $acc466786747
384291 else {
385- let $acc51001410083 = filterAdminsVoteByUpdateAction($acc41001410083, $list1001410083[4])
386- if (($size1001410083 == 5))
387- then $acc51001410083
292+ let $acc566786747 = filterAdminsVoteByUpdateAction($acc466786747, $list66786747[4])
293+ if (($size66786747 == 5))
294+ then $acc566786747
388295 else {
389- let $acc61001410083 = filterAdminsVoteByUpdateAction($acc51001410083, $list1001410083[5])
296+ let $acc666786747 = filterAdminsVoteByUpdateAction($acc566786747, $list66786747[5])
390297 throw("List size exceed 5")
391298 }
392299 }
404311 let updateVotesCount = (size(updateVotes) + (if ((action == UPDATE))
405312 then 1
406313 else 0))
407- let resetResult = [DataEntry(BlockExpireVoteKey, 0), DataEntry(BlockExpireProvidingKey, 0), DataEntry(getAdminVoteActionKey(adminsListWithoutAccount[0]), ""), DataEntry(getAdminVoteActionKey(adminsListWithoutAccount[1]), ""), DataEntry(getAdminVoteActionKey(adminsListWithoutAccount[2]), ""), DataEntry(getAdminVoteActionKey(adminsListWithoutAccount[3]), "")]
314+ let resetResult = [DataEntry(BlockExpireVoteKey, 0), DataEntry(getAdminVoteActionKey(adminsListWithoutAccount[0]), ""), DataEntry(getAdminVoteActionKey(adminsListWithoutAccount[1]), ""), DataEntry(getAdminVoteActionKey(adminsListWithoutAccount[2]), ""), DataEntry(getAdminVoteActionKey(adminsListWithoutAccount[3]), "")]
408315 if (if ((blockVoteCount >= bftCoefficientAdmin))
409316 then true
410317 else (unblockVoteCount >= bftCoefficientAdmin))
411- then WriteSet([DataEntry(IsPricePendingKey, false), DataEntry(IsBlockedKey, if ((blockVoteCount >= bftCoefficientAdmin))
318+ then WriteSet(DataEntry(IsBlockedKey, if ((blockVoteCount >= bftCoefficientAdmin))
412319 then true
413- else false)] :: resetResult)
320+ else false) :: resetResult)
414321 else if ((updateVotesCount > bftCoefficientAdmin))
415322 then WriteSet(DataEntry(ScriptUpdateBlockKey, if ((updateVotesCount > bftCoefficientAdmin))
416323 then (height + scriptUpdateInterval)
Full:
OldNewDifferences
11 {-# STDLIB_VERSION 3 #-}
22 {-# SCRIPT_TYPE ACCOUNT #-}
33 {-# CONTENT_TYPE DAPP #-}
44 func getNumberByKey (key) = match getInteger(this, key) {
55 case a: Int =>
66 a
77 case _ =>
88 0
99 }
1010
1111
1212 func getStringByKey (key) = match getString(this, key) {
1313 case a: String =>
1414 a
1515 case _ =>
1616 ""
1717 }
1818
1919
2020 func getBoolByKey (key) = match getBoolean(this, key) {
2121 case a: Boolean =>
2222 a
2323 case _ =>
2424 false
2525 }
2626
2727
2828 func getNumberByAddressAndKey (address,key) = match getInteger(address, key) {
2929 case a: Int =>
3030 a
3131 case _ =>
3232 0
3333 }
3434
3535
3636 func getStringByAddressAndKey (address,key) = match getString(address, key) {
3737 case a: String =>
3838 a
3939 case _ =>
4040 ""
4141 }
4242
4343
4444 func dropElementInJsonArray (array,element) = {
4545 let splitedArray = split(array, element)
4646 if ((take(splitedArray[1], 1) == ","))
4747 then (splitedArray[0] + drop(splitedArray[1], 1))
4848 else (dropRight(splitedArray[0], 1) + splitedArray[1])
4949 }
5050
5151
5252 func convertJsonArrayToList (jsonArray) = split(jsonArray, ",")
5353
5454
5555 let BLOCK = "block"
5656
5757 let UNBLOCK = "unblock"
5858
5959 let UPDATE = "update"
6060
6161 let OraclesKey = "oracles"
6262
6363 let AdminsKey = "admins"
6464
6565 let VoteIntervalKey = "vote_interval"
6666
6767 let CoefficientOracleKey = "coefficient_oracle"
6868
6969 let CoefficientAdminKey = "coefficient_admin"
7070
7171 let ScriptUpdateIntervalKey = "script_update_interval"
7272
73-let ProvidingIntervalKey = "providing_interval"
73+let PriceOffsetKey = "price_offset"
7474
7575 let PriceKey = "price"
7676
77-let PriceOffsetKey = "price_offset"
78-
79-let IsPricePendingKey = "is_pending_price"
80-
8177 let IsBlockedKey = "is_blocked"
82-
83-let OracleIsProvideKey = "oracle_is_provide_"
84-
85-let OracleProvidePriceKey = "oracle_price_provide_"
86-
87-let AdminVoteKey = "admin_vote_"
88-
89-let ActionKey = "action"
90-
91-let BlockExpireProvidingKey = "providing_expire_block"
92-
93-let BlackSwarmPriceKey = "black_swarm_price"
9478
9579 let BlockExpireVoteKey = "vote_expire_block"
9680
9781 let ScriptUpdateBlockKey = "script_update_block"
9882
9983 let PriceIndexKey = "price_index"
10084
101-func getOracleIsProvideKey (owner) = (OracleIsProvideKey + owner)
85+func getAdminVoteKey (owner) = ("admin_vote_" + owner)
10286
10387
104-func getOracleProvidePriceKey (owner) = (OracleProvidePriceKey + owner)
88+func getAdminVoteActionKey (owner) = ((getAdminVoteKey(owner) + "_") + "action")
10589
10690
107-func getAdminVoteKey (owner) = (AdminVoteKey + owner)
108-
109-
110-func getAdminVoteActionKey (owner) = ((getAdminVoteKey(owner) + "_") + ActionKey)
111-
112-
113-func getBlackSwarmPriceKey (block) = ((BlackSwarmPriceKey + "_") + toString(block))
91+func getBlackSwarmPriceKey (block) = (("black_swarm_price" + "_") + toString(block))
11492
11593
11694 func getPriceHistoryKey (block) = ((PriceKey + "_") + toString(block))
11795
11896
11997 func getHeightPriceByIndexKey (index) = ((PriceIndexKey + "_") + toString(index))
12098
12199
100+func getOracleProvidePriceKey (height) = ("price_" + toString(height))
101+
102+
122103 let price = getNumberByKey(PriceKey)
123104
124105 let priceIndex = getNumberByKey(PriceIndexKey)
125-
126-let providingInterval = getNumberByKey(ProvidingIntervalKey)
127-
128-let blockExpireProviding = getNumberByKey(BlockExpireProvidingKey)
129106
130107 let blockExpireVote = getNumberByKey(BlockExpireVoteKey)
131108
132109 let scriptUpdateBlock = getNumberByKey(ScriptUpdateBlockKey)
133110
134111 let scriptUpdateInterval = getNumberByKey(ScriptUpdateIntervalKey)
135-
136-let isPricePending = getBoolByKey(IsPricePendingKey)
137112
138113 let isBlocked = getBoolByKey(IsBlockedKey)
139114
140115 let bftCoefficientOracle = getNumberByKey(CoefficientOracleKey)
141116
142117 let bftCoefficientAdmin = getNumberByKey(CoefficientAdminKey)
143118
144119 let percentPriceOffset = getNumberByKey(PriceOffsetKey)
145120
146121 let voteInterval = getNumberByKey(VoteIntervalKey)
147122
148123 let oracles = getStringByKey(OraclesKey)
149124
150125 let admins = getStringByKey(AdminsKey)
151126
152127 let oraclesList = convertJsonArrayToList(oracles)
153128
154129 let adminsList = convertJsonArrayToList(admins)
155130
156131 func getAdminVoteAction (owner) = getStringByKey(getAdminVoteActionKey(owner))
157132
158133
159-func isOracleProvide (owner) = getBoolByKey(getOracleIsProvideKey(owner))
134+func getOracleProvideHeight (owner,height) = getNumberByAddressAndKey(addressFromStringValue(owner), getOracleProvidePriceKey(height))
160135
161136
162-func isOracleProvideInt (owner) = if (isOracleProvide(owner))
163- then 1
164- else 0
165-
166-
167-func getOracleProvidePrice (owner) = getNumberByKey(getOracleProvidePriceKey(owner))
137+func getPriceHistory (height) = getNumberByKey(getPriceHistoryKey(height))
168138
169139
170140 func isOracle (address) = isDefined(indexOf(oracles, address))
171141
172142
173143 func isAdmin (address) = isDefined(indexOf(admins, address))
174-
175-
176-func sumOraclePrice (base,address) = (base + (getOracleProvidePrice(address) * isOracleProvideInt(address)))
177144
178145
179146 func filterAdminsVoteByAction (result,address,action) = address :: result
180147
181148
182149 func filterAdminsVoteByBlockAction (result,address) = filterAdminsVoteByAction(result, address, BLOCK)
183150
184151
185152 func filterAdminsVoteByUnblockAction (result,address) = filterAdminsVoteByAction(result, address, UNBLOCK)
186153
187154
188155 func filterAdminsVoteByUpdateAction (result,address) = filterAdminsVoteByAction(result, address, UPDATE)
189156
190157
191158 @Callable(i)
192-func setCurrentPrice (newPrice) = {
193- let account = toString(i.caller)
194- let isOracleProvideList = [isOracleProvide(oraclesList[0]), isOracleProvide(oraclesList[1]), isOracleProvide(oraclesList[2]), isOracleProvide(oraclesList[3]), isOracleProvide(oraclesList[4])]
195- let priceProvidingCount = ((((((if (isOracleProvideList[0])
159+func finalizeCurrentPrice () = {
160+ let prices = [getOracleProvideHeight(oraclesList[0], height), getOracleProvideHeight(oraclesList[1], height), getOracleProvideHeight(oraclesList[2], height), getOracleProvideHeight(oraclesList[3], height), getOracleProvideHeight(oraclesList[4], height)]
161+ let priceProvidingCount = (((((if ((prices[0] != 0))
196162 then 1
197- else 0) + (if (isOracleProvideList[1])
163+ else 0) + (if ((prices[1] != 0))
198164 then 1
199- else 0)) + (if (isOracleProvideList[2])
165+ else 0)) + (if ((prices[2] != 0))
200166 then 1
201- else 0)) + (if (isOracleProvideList[3])
167+ else 0)) + (if ((prices[3] != 0))
202168 then 1
203- else 0)) + (if (isOracleProvideList[4])
204- then 1
205- else 0)) + 1)
206- if (isBlocked)
207- then throw("contract is blocked")
208- else if (!(isOracle(account)))
209- then throw("permission denied")
210- else if (if ((blockExpireProviding >= height))
211- then isOracleProvide(account)
212- else false)
213- then throw("price is already provided")
214- else if (if ((height > blockExpireProviding))
215- then isPricePending
216- else false)
217- then throw("use finalizeCurrentPrice")
218- else WriteSet([DataEntry(getOracleIsProvideKey(oraclesList[0]), if ((height > blockExpireProviding))
219- then false
220- else isOracleProvideList[0]), DataEntry(getOracleIsProvideKey(oraclesList[1]), if ((height > blockExpireProviding))
221- then false
222- else isOracleProvideList[1]), DataEntry(getOracleIsProvideKey(oraclesList[2]), if ((height > blockExpireProviding))
223- then false
224- else isOracleProvideList[2]), DataEntry(getOracleIsProvideKey(oraclesList[3]), if ((height > blockExpireProviding))
225- then false
226- else isOracleProvideList[3]), DataEntry(getOracleIsProvideKey(oraclesList[4]), if ((height > blockExpireProviding))
227- then false
228- else isOracleProvideList[4]), DataEntry(getOracleIsProvideKey(account), true), DataEntry(getOracleProvidePriceKey(account), newPrice), DataEntry(BlockExpireProvidingKey, if ((height > blockExpireProviding))
229- then (height + providingInterval)
230- else blockExpireProviding), DataEntry(IsPricePendingKey, if (if ((blockExpireProviding >= height))
231- then (priceProvidingCount >= bftCoefficientOracle)
232- else false)
233- then true
234- else isPricePending)])
235- }
236-
237-
238-
239-@Callable(i)
240-func finalizeCurrentPrice () = {
241- let isOracleProvideList = [isOracleProvide(oraclesList[0]), isOracleProvide(oraclesList[1]), isOracleProvide(oraclesList[2]), isOracleProvide(oraclesList[3]), isOracleProvide(oraclesList[4])]
242- let priceProvidingCount = (((((if (isOracleProvideList[0])
243- then 1
244- else 0) + (if (isOracleProvideList[1])
245- then 1
246- else 0)) + (if (isOracleProvideList[2])
247- then 1
248- else 0)) + (if (isOracleProvideList[3])
249- then 1
250- else 0)) + (if (isOracleProvideList[4])
169+ else 0)) + (if ((prices[4] != 0))
251170 then 1
252171 else 0))
253- let priceSum = (((((getOracleProvidePrice(oraclesList[0]) * (if (isOracleProvideList[0])
254- then 1
255- else 0)) + (getOracleProvidePrice(oraclesList[1]) * (if (isOracleProvideList[1])
256- then 1
257- else 0))) + (getOracleProvidePrice(oraclesList[2]) * (if (isOracleProvideList[2])
258- then 1
259- else 0))) + (getOracleProvidePrice(oraclesList[3]) * (if (isOracleProvideList[3])
260- then 1
261- else 0))) + (getOracleProvidePrice(oraclesList[4]) * (if (isOracleProvideList[4])
262- then 1
263- else 0)))
172+ let priceSum = ((((prices[0] + prices[1]) + prices[2]) + prices[3]) + prices[4])
264173 let newPrice = (priceSum / priceProvidingCount)
265174 if (isBlocked)
266175 then throw("contract is blocked")
267- else if (if (!(isPricePending))
268- then true
269- else (blockExpireProviding >= height))
270- then throw("wait for the end of the price providing")
176+ else if ((getPriceHistory(height) != 0))
177+ then throw("wait next block")
271178 else if ((bftCoefficientOracle > priceProvidingCount))
272- then throw("3/5 oracles need to set a price")
179+ then throw((((toString(bftCoefficientOracle) + "/5 oracles need to set a price (") + toString(priceProvidingCount)) + ")"))
273180 else if (if ((newPrice >= (price + ((price * percentPriceOffset) / 100))))
274181 then true
275182 else ((price - ((price * percentPriceOffset) / 100)) >= newPrice))
276183 then WriteSet([DataEntry(IsBlockedKey, true), DataEntry(getBlackSwarmPriceKey(height), newPrice)])
277184 else {
278185 let newPriceIndex = (priceIndex + 1)
279- WriteSet([DataEntry(PriceKey, newPrice), DataEntry(getPriceHistoryKey(height), newPrice), DataEntry(IsPricePendingKey, false), DataEntry(PriceIndexKey, newPriceIndex), DataEntry(getHeightPriceByIndexKey(newPriceIndex), height)])
186+ WriteSet([DataEntry(PriceKey, newPrice), DataEntry(getPriceHistoryKey(height), newPrice), DataEntry(PriceIndexKey, newPriceIndex), DataEntry(getHeightPriceByIndexKey(newPriceIndex), height)])
280187 }
281188 }
282189
283190
284191
285192 @Callable(i)
286193 func vote (action) = {
287194 let account = toString(i.caller)
288195 let adminsListWithoutAccount = convertJsonArrayToList(dropElementInJsonArray(admins, account))
289196 let lastAction = getAdminVoteAction(account)
290197 let blockVotes = {
291- let $list98299897 = adminsListWithoutAccount
292- let $size98299897 = size($list98299897)
293- let $acc098299897 = nil
294- if (($size98299897 == 0))
295- then $acc098299897
198+ let $list64936561 = adminsListWithoutAccount
199+ let $size64936561 = size($list64936561)
200+ let $acc064936561 = nil
201+ if (($size64936561 == 0))
202+ then $acc064936561
296203 else {
297- let $acc198299897 = filterAdminsVoteByBlockAction($acc098299897, $list98299897[0])
298- if (($size98299897 == 1))
299- then $acc198299897
204+ let $acc164936561 = filterAdminsVoteByBlockAction($acc064936561, $list64936561[0])
205+ if (($size64936561 == 1))
206+ then $acc164936561
300207 else {
301- let $acc298299897 = filterAdminsVoteByBlockAction($acc198299897, $list98299897[1])
302- if (($size98299897 == 2))
303- then $acc298299897
208+ let $acc264936561 = filterAdminsVoteByBlockAction($acc164936561, $list64936561[1])
209+ if (($size64936561 == 2))
210+ then $acc264936561
304211 else {
305- let $acc398299897 = filterAdminsVoteByBlockAction($acc298299897, $list98299897[2])
306- if (($size98299897 == 3))
307- then $acc398299897
212+ let $acc364936561 = filterAdminsVoteByBlockAction($acc264936561, $list64936561[2])
213+ if (($size64936561 == 3))
214+ then $acc364936561
308215 else {
309- let $acc498299897 = filterAdminsVoteByBlockAction($acc398299897, $list98299897[3])
310- if (($size98299897 == 4))
311- then $acc498299897
216+ let $acc464936561 = filterAdminsVoteByBlockAction($acc364936561, $list64936561[3])
217+ if (($size64936561 == 4))
218+ then $acc464936561
312219 else {
313- let $acc598299897 = filterAdminsVoteByBlockAction($acc498299897, $list98299897[4])
314- if (($size98299897 == 5))
315- then $acc598299897
220+ let $acc564936561 = filterAdminsVoteByBlockAction($acc464936561, $list64936561[4])
221+ if (($size64936561 == 5))
222+ then $acc564936561
316223 else {
317- let $acc698299897 = filterAdminsVoteByBlockAction($acc598299897, $list98299897[5])
224+ let $acc664936561 = filterAdminsVoteByBlockAction($acc564936561, $list64936561[5])
318225 throw("List size exceed 5")
319226 }
320227 }
321228 }
322229 }
323230 }
324231 }
325232 }
326233 let unblockVotes = {
327- let $list99219991 = adminsListWithoutAccount
328- let $size99219991 = size($list99219991)
329- let $acc099219991 = nil
330- if (($size99219991 == 0))
331- then $acc099219991
234+ let $list65856655 = adminsListWithoutAccount
235+ let $size65856655 = size($list65856655)
236+ let $acc065856655 = nil
237+ if (($size65856655 == 0))
238+ then $acc065856655
332239 else {
333- let $acc199219991 = filterAdminsVoteByUnblockAction($acc099219991, $list99219991[0])
334- if (($size99219991 == 1))
335- then $acc199219991
240+ let $acc165856655 = filterAdminsVoteByUnblockAction($acc065856655, $list65856655[0])
241+ if (($size65856655 == 1))
242+ then $acc165856655
336243 else {
337- let $acc299219991 = filterAdminsVoteByUnblockAction($acc199219991, $list99219991[1])
338- if (($size99219991 == 2))
339- then $acc299219991
244+ let $acc265856655 = filterAdminsVoteByUnblockAction($acc165856655, $list65856655[1])
245+ if (($size65856655 == 2))
246+ then $acc265856655
340247 else {
341- let $acc399219991 = filterAdminsVoteByUnblockAction($acc299219991, $list99219991[2])
342- if (($size99219991 == 3))
343- then $acc399219991
248+ let $acc365856655 = filterAdminsVoteByUnblockAction($acc265856655, $list65856655[2])
249+ if (($size65856655 == 3))
250+ then $acc365856655
344251 else {
345- let $acc499219991 = filterAdminsVoteByUnblockAction($acc399219991, $list99219991[3])
346- if (($size99219991 == 4))
347- then $acc499219991
252+ let $acc465856655 = filterAdminsVoteByUnblockAction($acc365856655, $list65856655[3])
253+ if (($size65856655 == 4))
254+ then $acc465856655
348255 else {
349- let $acc599219991 = filterAdminsVoteByUnblockAction($acc499219991, $list99219991[4])
350- if (($size99219991 == 5))
351- then $acc599219991
256+ let $acc565856655 = filterAdminsVoteByUnblockAction($acc465856655, $list65856655[4])
257+ if (($size65856655 == 5))
258+ then $acc565856655
352259 else {
353- let $acc699219991 = filterAdminsVoteByUnblockAction($acc599219991, $list99219991[5])
260+ let $acc665856655 = filterAdminsVoteByUnblockAction($acc565856655, $list65856655[5])
354261 throw("List size exceed 5")
355262 }
356263 }
357264 }
358265 }
359266 }
360267 }
361268 }
362269 let updateVotes = {
363- let $list1001410083 = adminsListWithoutAccount
364- let $size1001410083 = size($list1001410083)
365- let $acc01001410083 = nil
366- if (($size1001410083 == 0))
367- then $acc01001410083
270+ let $list66786747 = adminsListWithoutAccount
271+ let $size66786747 = size($list66786747)
272+ let $acc066786747 = nil
273+ if (($size66786747 == 0))
274+ then $acc066786747
368275 else {
369- let $acc11001410083 = filterAdminsVoteByUpdateAction($acc01001410083, $list1001410083[0])
370- if (($size1001410083 == 1))
371- then $acc11001410083
276+ let $acc166786747 = filterAdminsVoteByUpdateAction($acc066786747, $list66786747[0])
277+ if (($size66786747 == 1))
278+ then $acc166786747
372279 else {
373- let $acc21001410083 = filterAdminsVoteByUpdateAction($acc11001410083, $list1001410083[1])
374- if (($size1001410083 == 2))
375- then $acc21001410083
280+ let $acc266786747 = filterAdminsVoteByUpdateAction($acc166786747, $list66786747[1])
281+ if (($size66786747 == 2))
282+ then $acc266786747
376283 else {
377- let $acc31001410083 = filterAdminsVoteByUpdateAction($acc21001410083, $list1001410083[2])
378- if (($size1001410083 == 3))
379- then $acc31001410083
284+ let $acc366786747 = filterAdminsVoteByUpdateAction($acc266786747, $list66786747[2])
285+ if (($size66786747 == 3))
286+ then $acc366786747
380287 else {
381- let $acc41001410083 = filterAdminsVoteByUpdateAction($acc31001410083, $list1001410083[3])
382- if (($size1001410083 == 4))
383- then $acc41001410083
288+ let $acc466786747 = filterAdminsVoteByUpdateAction($acc366786747, $list66786747[3])
289+ if (($size66786747 == 4))
290+ then $acc466786747
384291 else {
385- let $acc51001410083 = filterAdminsVoteByUpdateAction($acc41001410083, $list1001410083[4])
386- if (($size1001410083 == 5))
387- then $acc51001410083
292+ let $acc566786747 = filterAdminsVoteByUpdateAction($acc466786747, $list66786747[4])
293+ if (($size66786747 == 5))
294+ then $acc566786747
388295 else {
389- let $acc61001410083 = filterAdminsVoteByUpdateAction($acc51001410083, $list1001410083[5])
296+ let $acc666786747 = filterAdminsVoteByUpdateAction($acc566786747, $list66786747[5])
390297 throw("List size exceed 5")
391298 }
392299 }
393300 }
394301 }
395302 }
396303 }
397304 }
398305 let blockVoteCount = (size(blockVotes) + (if ((action == BLOCK))
399306 then 1
400307 else 0))
401308 let unblockVoteCount = (size(unblockVotes) + (if ((action == UNBLOCK))
402309 then 1
403310 else 0))
404311 let updateVotesCount = (size(updateVotes) + (if ((action == UPDATE))
405312 then 1
406313 else 0))
407- let resetResult = [DataEntry(BlockExpireVoteKey, 0), DataEntry(BlockExpireProvidingKey, 0), DataEntry(getAdminVoteActionKey(adminsListWithoutAccount[0]), ""), DataEntry(getAdminVoteActionKey(adminsListWithoutAccount[1]), ""), DataEntry(getAdminVoteActionKey(adminsListWithoutAccount[2]), ""), DataEntry(getAdminVoteActionKey(adminsListWithoutAccount[3]), "")]
314+ let resetResult = [DataEntry(BlockExpireVoteKey, 0), DataEntry(getAdminVoteActionKey(adminsListWithoutAccount[0]), ""), DataEntry(getAdminVoteActionKey(adminsListWithoutAccount[1]), ""), DataEntry(getAdminVoteActionKey(adminsListWithoutAccount[2]), ""), DataEntry(getAdminVoteActionKey(adminsListWithoutAccount[3]), "")]
408315 if (if ((blockVoteCount >= bftCoefficientAdmin))
409316 then true
410317 else (unblockVoteCount >= bftCoefficientAdmin))
411- then WriteSet([DataEntry(IsPricePendingKey, false), DataEntry(IsBlockedKey, if ((blockVoteCount >= bftCoefficientAdmin))
318+ then WriteSet(DataEntry(IsBlockedKey, if ((blockVoteCount >= bftCoefficientAdmin))
412319 then true
413- else false)] :: resetResult)
320+ else false) :: resetResult)
414321 else if ((updateVotesCount > bftCoefficientAdmin))
415322 then WriteSet(DataEntry(ScriptUpdateBlockKey, if ((updateVotesCount > bftCoefficientAdmin))
416323 then (height + scriptUpdateInterval)
417324 else scriptUpdateBlock) :: resetResult)
418325 else WriteSet([DataEntry(BlockExpireVoteKey, if ((height > blockExpireVote))
419326 then (height + voteInterval)
420327 else blockExpireVote), DataEntry(getAdminVoteActionKey(account), action)])
421328 }
422329
423330

github/deemru/w8io/6500d08 
124.94 ms