tx · EwaQ8RpKgJxR3B6pvEuDt7kCYVcayTgEWCwzTqgTotJA

3N911L1LqZs6xaZsC5skLHrU3XfDYZG8wxz:  -0.01400000 Waves

2019.11.01 22:31 [746218] smart account 3N911L1LqZs6xaZsC5skLHrU3XfDYZG8wxz > SELF 0.00000000 Waves

{ "type": 13, "id": "EwaQ8RpKgJxR3B6pvEuDt7kCYVcayTgEWCwzTqgTotJA", "fee": 1400000, "feeAssetId": null, "timestamp": 1572636743861, "version": 1, "sender": "3N911L1LqZs6xaZsC5skLHrU3XfDYZG8wxz", "senderPublicKey": "D1q54i7R33U4bjGXmo1FDbSyitrrvUj5dcrLQ493WX9S", "proofs": [ "2z9WuZqMJ6Qr388DnN7Vx2eKe8SohMsFHMjMHSh1gfaeqmtWYidd2tNeR7M8RFndgzrayHWoHLw5C8oQfzgCJZY9" ], "script": "base64:AAIDAAAAAAAAAA4IARIDCgEBEgASAwoBCAAAAEIBAAAADmdldE51bWJlckJ5S2V5AAAAAQAAAANrZXkEAAAAByRtYXRjaDAJAAQaAAAAAgUAAAAEdGhpcwUAAAADa2V5AwkAAAEAAAACBQAAAAckbWF0Y2gwAgAAAANJbnQEAAAAAWEFAAAAByRtYXRjaDAFAAAAAWEAAAAAAAAAAAABAAAADmdldFN0cmluZ0J5S2V5AAAAAQAAAANrZXkEAAAAByRtYXRjaDAJAAQdAAAAAgUAAAAEdGhpcwUAAAADa2V5AwkAAAEAAAACBQAAAAckbWF0Y2gwAgAAAAZTdHJpbmcEAAAAAWEFAAAAByRtYXRjaDAFAAAAAWECAAAAAAEAAAAMZ2V0Qm9vbEJ5S2V5AAAAAQAAAANrZXkEAAAAByRtYXRjaDAJAAQbAAAAAgUAAAAEdGhpcwUAAAADa2V5AwkAAAEAAAACBQAAAAckbWF0Y2gwAgAAAAdCb29sZWFuBAAAAAFhBQAAAAckbWF0Y2gwBQAAAAFhBwEAAAAYZ2V0TnVtYmVyQnlBZGRyZXNzQW5kS2V5AAAAAgAAAAdhZGRyZXNzAAAAA2tleQQAAAAHJG1hdGNoMAkABBoAAAACBQAAAAdhZGRyZXNzBQAAAANrZXkDCQAAAQAAAAIFAAAAByRtYXRjaDACAAAAA0ludAQAAAABYQUAAAAHJG1hdGNoMAUAAAABYQAAAAAAAAAAAAEAAAAYZ2V0U3RyaW5nQnlBZGRyZXNzQW5kS2V5AAAAAgAAAAdhZGRyZXNzAAAAA2tleQQAAAAHJG1hdGNoMAkABB0AAAACBQAAAAdhZGRyZXNzBQAAAANrZXkDCQAAAQAAAAIFAAAAByRtYXRjaDACAAAABlN0cmluZwQAAAABYQUAAAAHJG1hdGNoMAUAAAABYQIAAAAAAQAAAAVpc0ludAAAAAEAAAADdmFsBAAAAAckbWF0Y2gwBQAAAAN2YWwDCQAAAQAAAAIFAAAAByRtYXRjaDACAAAAA0ludAQAAAABYQUAAAAHJG1hdGNoMAYHAQAAABZkcm9wRWxlbWVudEluSnNvbkFycmF5AAAAAgAAAAVhcnJheQAAAAdlbGVtZW50BAAAAAxzcGxpdGVkQXJyYXkJAAS1AAAAAgUAAAAFYXJyYXkFAAAAB2VsZW1lbnQDCQAAAAAAAAIJAAEvAAAAAgkAAZEAAAACBQAAAAxzcGxpdGVkQXJyYXkAAAAAAAAAAAEAAAAAAAAAAAECAAAAASwJAAEsAAAAAgkAAZEAAAACBQAAAAxzcGxpdGVkQXJyYXkAAAAAAAAAAAAJAAEwAAAAAgkAAZEAAAACBQAAAAxzcGxpdGVkQXJyYXkAAAAAAAAAAAEAAAAAAAAAAAEJAAEsAAAAAgkBAAAACWRyb3BSaWdodAAAAAIJAAGRAAAAAgUAAAAMc3BsaXRlZEFycmF5AAAAAAAAAAAAAAAAAAAAAAABCQABkQAAAAIFAAAADHNwbGl0ZWRBcnJheQAAAAAAAAAAAQEAAAAWY29udmVydEpzb25BcnJheVRvTGlzdAAAAAEAAAAJanNvbkFycmF5CQAEtQAAAAIFAAAACWpzb25BcnJheQIAAAABLAAAAAAFQkxPQ0sCAAAABWJsb2NrAAAAAAdVTkJMT0NLAgAAAAd1bmJsb2NrAAAAAAZVUERBVEUCAAAABnVwZGF0ZQAAAAAKT3JhY2xlc0tleQIAAAAHb3JhY2xlcwAAAAAJQWRtaW5zS2V5AgAAAAZhZG1pbnMAAAAAD1ZvdGVJbnRlcnZhbEtleQIAAAANdm90ZV9pbnRlcnZhbAAAAAAUQ29lZmZpY2llbnRPcmFjbGVLZXkCAAAAEmNvZWZmaWNpZW50X29yYWNsZQAAAAATQ29lZmZpY2llbnRBZG1pbktleQIAAAARY29lZmZpY2llbnRfYWRtaW4AAAAAF1NjcmlwdFVwZGF0ZUludGVydmFsS2V5AgAAABZzY3JpcHRfdXBkYXRlX2ludGVydmFsAAAAABRQcm92aWRpbmdJbnRlcnZhbEtleQIAAAAScHJvdmlkaW5nX2ludGVydmFsAAAAAAhQcmljZUtleQIAAAAFcHJpY2UAAAAADlByaWNlT2Zmc2V0S2V5AgAAAAxwcmljZV9vZmZzZXQAAAAAEUlzUHJpY2VQZW5kaW5nS2V5AgAAABBpc19wZW5kaW5nX3ByaWNlAAAAAAxJc0Jsb2NrZWRLZXkCAAAACmlzX2Jsb2NrZWQAAAAAEk9yYWNsZUlzUHJvdmlkZUtleQIAAAASb3JhY2xlX2lzX3Byb3ZpZGVfAAAAABVPcmFjbGVQcm92aWRlUHJpY2VLZXkCAAAAFW9yYWNsZV9wcmljZV9wcm92aWRlXwAAAAAMQWRtaW5Wb3RlS2V5AgAAAAthZG1pbl92b3RlXwAAAAAJQWN0aW9uS2V5AgAAAAZhY3Rpb24AAAAAF0Jsb2NrRXhwaXJlUHJvdmlkaW5nS2V5AgAAABZwcm92aWRpbmdfZXhwaXJlX2Jsb2NrAAAAABJCbGFja1N3YXJtUHJpY2VLZXkCAAAAEWJsYWNrX3N3YXJtX3ByaWNlAAAAABJCbG9ja0V4cGlyZVZvdGVLZXkCAAAAEXZvdGVfZXhwaXJlX2Jsb2NrAAAAABRTY3JpcHRVcGRhdGVCbG9ja0tleQIAAAATc2NyaXB0X3VwZGF0ZV9ibG9jawAAAAANUHJpY2VJbmRleEtleQIAAAALcHJpY2VfaW5kZXgBAAAAFWdldE9yYWNsZUlzUHJvdmlkZUtleQAAAAEAAAAFb3duZXIJAAEsAAAAAgUAAAAST3JhY2xlSXNQcm92aWRlS2V5BQAAAAVvd25lcgEAAAAYZ2V0T3JhY2xlUHJvdmlkZVByaWNlS2V5AAAAAQAAAAVvd25lcgkAASwAAAACBQAAABVPcmFjbGVQcm92aWRlUHJpY2VLZXkFAAAABW93bmVyAQAAAA9nZXRBZG1pblZvdGVLZXkAAAABAAAABW93bmVyCQABLAAAAAIFAAAADEFkbWluVm90ZUtleQUAAAAFb3duZXIBAAAAFWdldEFkbWluVm90ZUFjdGlvbktleQAAAAEAAAAFb3duZXIJAAEsAAAAAgkAASwAAAACCQEAAAAPZ2V0QWRtaW5Wb3RlS2V5AAAAAQUAAAAFb3duZXICAAAAAV8FAAAACUFjdGlvbktleQEAAAAVZ2V0QmxhY2tTd2FybVByaWNlS2V5AAAAAQAAAAVibG9jawkAASwAAAACCQABLAAAAAIFAAAAEkJsYWNrU3dhcm1QcmljZUtleQIAAAABXwkAAaQAAAABBQAAAAVibG9jawEAAAASZ2V0UHJpY2VIaXN0b3J5S2V5AAAAAQAAAAVibG9jawkAASwAAAACCQABLAAAAAIFAAAACFByaWNlS2V5AgAAAAFfCQABpAAAAAEFAAAABWJsb2NrAQAAABhnZXRIZWlnaHRQcmljZUJ5SW5kZXhLZXkAAAABAAAABWluZGV4CQABLAAAAAIJAAEsAAAAAgUAAAANUHJpY2VJbmRleEtleQIAAAABXwkAAaQAAAABBQAAAAVpbmRleAAAAAAFcHJpY2UJAQAAAA5nZXROdW1iZXJCeUtleQAAAAEFAAAACFByaWNlS2V5AAAAAApwcmljZUluZGV4CQEAAAAOZ2V0TnVtYmVyQnlLZXkAAAABBQAAAA1QcmljZUluZGV4S2V5AAAAABFwcm92aWRpbmdJbnRlcnZhbAkBAAAADmdldE51bWJlckJ5S2V5AAAAAQUAAAAUUHJvdmlkaW5nSW50ZXJ2YWxLZXkAAAAAFGJsb2NrRXhwaXJlUHJvdmlkaW5nCQEAAAAOZ2V0TnVtYmVyQnlLZXkAAAABBQAAABdCbG9ja0V4cGlyZVByb3ZpZGluZ0tleQAAAAAPYmxvY2tFeHBpcmVWb3RlCQEAAAAOZ2V0TnVtYmVyQnlLZXkAAAABBQAAABJCbG9ja0V4cGlyZVZvdGVLZXkAAAAAEXNjcmlwdFVwZGF0ZUJsb2NrCQEAAAAOZ2V0TnVtYmVyQnlLZXkAAAABBQAAABRTY3JpcHRVcGRhdGVCbG9ja0tleQAAAAAUc2NyaXB0VXBkYXRlSW50ZXJ2YWwJAQAAAA5nZXROdW1iZXJCeUtleQAAAAEFAAAAF1NjcmlwdFVwZGF0ZUludGVydmFsS2V5AAAAAA5pc1ByaWNlUGVuZGluZwkBAAAADGdldEJvb2xCeUtleQAAAAEFAAAAEUlzUHJpY2VQZW5kaW5nS2V5AAAAAAlpc0Jsb2NrZWQJAQAAAAxnZXRCb29sQnlLZXkAAAABBQAAAAxJc0Jsb2NrZWRLZXkAAAAAFGJmdENvZWZmaWNpZW50T3JhY2xlCQEAAAAOZ2V0TnVtYmVyQnlLZXkAAAABBQAAABRDb2VmZmljaWVudE9yYWNsZUtleQAAAAATYmZ0Q29lZmZpY2llbnRBZG1pbgkBAAAADmdldE51bWJlckJ5S2V5AAAAAQUAAAATQ29lZmZpY2llbnRBZG1pbktleQAAAAAScGVyY2VudFByaWNlT2Zmc2V0CQEAAAAOZ2V0TnVtYmVyQnlLZXkAAAABBQAAAA5QcmljZU9mZnNldEtleQAAAAAMdm90ZUludGVydmFsCQEAAAAOZ2V0TnVtYmVyQnlLZXkAAAABBQAAAA9Wb3RlSW50ZXJ2YWxLZXkAAAAAB29yYWNsZXMJAQAAAA5nZXRTdHJpbmdCeUtleQAAAAEFAAAACk9yYWNsZXNLZXkAAAAABmFkbWlucwkBAAAADmdldFN0cmluZ0J5S2V5AAAAAQUAAAAJQWRtaW5zS2V5AAAAAAtvcmFjbGVzTGlzdAkBAAAAFmNvbnZlcnRKc29uQXJyYXlUb0xpc3QAAAABBQAAAAdvcmFjbGVzAAAAAAphZG1pbnNMaXN0CQEAAAAWY29udmVydEpzb25BcnJheVRvTGlzdAAAAAEFAAAABmFkbWlucwEAAAASZ2V0QWRtaW5Wb3RlQWN0aW9uAAAAAQAAAAVvd25lcgkBAAAADmdldFN0cmluZ0J5S2V5AAAAAQkBAAAAFWdldEFkbWluVm90ZUFjdGlvbktleQAAAAEFAAAABW93bmVyAQAAAA9pc09yYWNsZVByb3ZpZGUAAAABAAAABW93bmVyCQEAAAAMZ2V0Qm9vbEJ5S2V5AAAAAQkBAAAAFWdldE9yYWNsZUlzUHJvdmlkZUtleQAAAAEFAAAABW93bmVyAQAAABJpc09yYWNsZVByb3ZpZGVJbnQAAAABAAAABW93bmVyAwkBAAAAD2lzT3JhY2xlUHJvdmlkZQAAAAEFAAAABW93bmVyAAAAAAAAAAABAAAAAAAAAAAAAQAAABVnZXRPcmFjbGVQcm92aWRlUHJpY2UAAAABAAAABW93bmVyCQEAAAAOZ2V0TnVtYmVyQnlLZXkAAAABCQEAAAAYZ2V0T3JhY2xlUHJvdmlkZVByaWNlS2V5AAAAAQUAAAAFb3duZXIBAAAACGlzT3JhY2xlAAAAAQAAAAdhZGRyZXNzCQEAAAAJaXNEZWZpbmVkAAAAAQkABLMAAAACBQAAAAdvcmFjbGVzBQAAAAdhZGRyZXNzAQAAAAdpc0FkbWluAAAAAQAAAAdhZGRyZXNzCQEAAAAJaXNEZWZpbmVkAAAAAQkABLMAAAACBQAAAAZhZG1pbnMFAAAAB2FkZHJlc3MBAAAADnN1bU9yYWNsZVByaWNlAAAAAgAAAARiYXNlAAAAB2FkZHJlc3MJAABkAAAAAgUAAAAEYmFzZQkAAGgAAAACCQEAAAAVZ2V0T3JhY2xlUHJvdmlkZVByaWNlAAAAAQUAAAAHYWRkcmVzcwkBAAAAEmlzT3JhY2xlUHJvdmlkZUludAAAAAEFAAAAB2FkZHJlc3MBAAAAGGZpbHRlckFkbWluc1ZvdGVCeUFjdGlvbgAAAAMAAAAGcmVzdWx0AAAAB2FkZHJlc3MAAAAGYWN0aW9uCQAETAAAAAIFAAAAB2FkZHJlc3MFAAAABnJlc3VsdAEAAAAdZmlsdGVyQWRtaW5zVm90ZUJ5QmxvY2tBY3Rpb24AAAACAAAABnJlc3VsdAAAAAdhZGRyZXNzCQEAAAAYZmlsdGVyQWRtaW5zVm90ZUJ5QWN0aW9uAAAAAwUAAAAGcmVzdWx0BQAAAAdhZGRyZXNzBQAAAAVCTE9DSwEAAAAfZmlsdGVyQWRtaW5zVm90ZUJ5VW5ibG9ja0FjdGlvbgAAAAIAAAAGcmVzdWx0AAAAB2FkZHJlc3MJAQAAABhmaWx0ZXJBZG1pbnNWb3RlQnlBY3Rpb24AAAADBQAAAAZyZXN1bHQFAAAAB2FkZHJlc3MFAAAAB1VOQkxPQ0sBAAAAHmZpbHRlckFkbWluc1ZvdGVCeVVwZGF0ZUFjdGlvbgAAAAIAAAAGcmVzdWx0AAAAB2FkZHJlc3MJAQAAABhmaWx0ZXJBZG1pbnNWb3RlQnlBY3Rpb24AAAADBQAAAAZyZXN1bHQFAAAAB2FkZHJlc3MFAAAABlVQREFURQAAAAMAAAABaQEAAAAPc2V0Q3VycmVudFByaWNlAAAAAQAAAAhuZXdQcmljZQQAAAAHYWNjb3VudAkABCUAAAABCAUAAAABaQAAAAZjYWxsZXIEAAAAE2lzT3JhY2xlUHJvdmlkZUxpc3QJAARMAAAAAgkBAAAAD2lzT3JhY2xlUHJvdmlkZQAAAAEJAAGRAAAAAgUAAAALb3JhY2xlc0xpc3QAAAAAAAAAAAAJAARMAAAAAgkBAAAAD2lzT3JhY2xlUHJvdmlkZQAAAAEJAAGRAAAAAgUAAAALb3JhY2xlc0xpc3QAAAAAAAAAAAEJAARMAAAAAgkBAAAAD2lzT3JhY2xlUHJvdmlkZQAAAAEJAAGRAAAAAgUAAAALb3JhY2xlc0xpc3QAAAAAAAAAAAIJAARMAAAAAgkBAAAAD2lzT3JhY2xlUHJvdmlkZQAAAAEJAAGRAAAAAgUAAAALb3JhY2xlc0xpc3QAAAAAAAAAAAMJAARMAAAAAgkBAAAAD2lzT3JhY2xlUHJvdmlkZQAAAAEJ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AAAACG5ld1ByaWNlCQAETAAAAAIJAQAAAAlEYXRhRW50cnkAAAACBQAAABFJc1ByaWNlUGVuZGluZ0tleQcJAARMAAAAAgkBAAAACURhdGFFbnRyeQAAAAIFAAAADVByaWNlSW5kZXhLZXkFAAAADW5ld1ByaWNlSW5kZXgJAARMAAAAAgkBAAAACURhdGFFbnRyeQAAAAIJAQAAABhnZXRIZWlnaHRQcmljZUJ5SW5kZXhLZXkAAAABBQAAAA1uZXdQcmljZUluZGV4BQAAAAZoZWlnaHQFAAAAA25pbAAAAAFpAQAAAAR2b3RlAAAAAQAAAAZhY3Rpb24EAAAAB2FjY291bnQJAAQlAAAAAQgFAAAAAWkAAAAGY2FsbGVyBAAAABhhZG1pbnNMaXN0V2l0aG91dEFjY291bnQJAQAAABZjb252ZXJ0SnNvbkFycmF5VG9MaXN0AAAAAQkBAAAAFmRyb3BFbGVtZW50SW5Kc29uQXJyYXkAAAACBQAAAAZhZG1pbnMFAAAAB2FjY291bnQEAAAACmxhc3RBY3Rpb24JAQAAABJnZXRBZG1pblZvdGVBY3Rpb24AAAABBQAAAAdhY2NvdW50BAAAAApibG9ja1ZvdGVzBAAAAA0kbGlzdDk4NzI5OTQwBQAAABhhZG1pbnNMaXN0V2l0aG91dEFjY291bnQEAAAADSRzaXplOTg3Mjk5NDAJAAGQAAAAAQUAAAANJGxpc3Q5ODcyOTk0MAQAAAANJGFjYzA5ODcyOTk0MAUAAAADbmlsAwkAAAAAAAACBQAAAA0kc2l6ZTk4NzI5OTQwAAAAAAAAAAAABQAAAA0kYWNjMDk4NzI5OTQwBAAAAA0kYWNjMTk4NzI5OTQwCQEAAAAdZmlsdGVyQWRtaW5zVm90ZUJ5QmxvY2tBY3Rpb24AAAACBQAAAA0kYWNjMDk4NzI5OTQwCQABkQAAAAIFAAAADSRsaXN0OTg3Mjk5NDAAAAAAAAAAAAADCQAAAAAAAAIFAAAADSRzaXplOTg3Mjk5NDAAAAAAAAAAAAEFAAAADSRhY2MxOTg3Mjk5NDAEAAAADSRhY2MyOTg3Mjk5NDAJAQAAAB1maWx0ZXJBZG1pbnNWb3RlQnlCbG9ja0FjdGlvbgAAAAIFAAAADSRhY2MxOTg3Mjk5NDAJAAGRAAAAAgUAAAANJGxpc3Q5ODcyOTk0MAAAAAAAAAAAAQMJAAAAAAAAAgUAAAANJHNpemU5ODcyOTk0MAAAAAAAAAAAAgUAAAANJGFjYzI5ODcyOTk0MAQAAAANJGFjYzM5ODcyOTk0MAkBAAAAHWZpbHRlckFkbWluc1ZvdGVCeUJsb2NrQWN0aW9uAAAAAgUAAAANJGFjYzI5ODcyOTk0MAkAAZEAAAACBQAAAA0kbGlzdDk4NzI5OTQwAAAAAAAAAAACAwkAAAAAAAACBQAAAA0kc2l6ZTk4NzI5OTQwAAAAAAAAAAADBQAAAA0kYWNjMzk4NzI5OTQwBAAAAA0kYWNjNDk4NzI5OTQwCQEAAAAdZmlsdGVyQWRtaW5zVm90ZUJ5QmxvY2tBY3Rpb24AAAACBQAAAA0kYWNjMzk4NzI5OTQwCQABkQAAAAIFAAAADSRsaXN0OTg3Mjk5NDAAAAAAAAAAAAMDCQAAAAAAAAIFAAAADSRzaXplOTg3Mjk5NDAAAAAAAAAAAAQFAAAADSRhY2M0OTg3Mjk5NDAEAAAADSRhY2M1OTg3Mjk5NDAJAQAAAB1maWx0ZXJBZG1pbnNWb3RlQnlCbG9ja0FjdGlvbgAAAAIFAAAADSRhY2M0OTg3Mjk5NDAJAAGRAAAAAgUAAAANJGxpc3Q5ODcyOTk0MAAAAAAAAAAABAMJAAAAAAAAAgUAAAANJHNpemU5ODcyOTk0MAAAAAAAAAAABQUAAAANJGFjYzU5ODcyOTk0MAQAAAANJGFjYzY5ODcyOTk0MAkBAAAAHWZpbHRlckFkbWluc1ZvdGVCeUJsb2NrQWN0aW9uAAAAAgUAAAANJGFjYzU5ODcyOTk0MAkAAZEAAAACBQAAAA0kbGlzdDk4NzI5OTQwAAAAAAAAAAAFCQAAAgAAAAECAAAAEkxpc3Qgc2l6ZSBleGNlZWQgNQQAAAAMdW5ibG9ja1ZvdGVzBAAAAA4kbGlzdDk5NjQxMDAzNAUAAAAYYWRtaW5zTGlzdFdpdGhvdXRBY2NvdW50BAAAAA4kc2l6ZTk5NjQxMDAzNAkAAZAAAAABBQAAAA4kbGlzdDk5NjQxMDAzNAQAAAAOJGFjYzA5OTY0MTAwMzQFAAAAA25pbAMJAAAAAAAAAgUAAAAOJHNpemU5OTY0MTAwMzQAAAAAAAAAAAAFAAAADiRhY2MwOTk2NDEwMDM0BAAAAA4kYWNjMTk5NjQxMDAzNAkBAAAAH2ZpbHRlckFkbWluc1ZvdGVCeVVuYmxvY2tBY3Rpb24AAAACBQAAAA4kYWNjMDk5NjQxMDAzNAkAAZEAAAACBQAAAA4kbGlzdDk5NjQxMDAzNAAAAAAAAAAAAAMJAAAAAAAAAgUAAAAOJHNpemU5OTY0MTAwMzQAAAAAAAAAAAEFAAAADiRhY2MxOTk2NDEwMDM0BAAAAA4kYWNjMjk5NjQxMDAzNAkBAAAAH2ZpbHRlckFkbWluc1ZvdGVCeVVuYmxvY2tBY3Rpb24AAAACBQAAAA4kYWNjMTk5NjQxMDAzNAkAAZEAAAACBQAAAA4kbGlzdDk5NjQxMDAzNAAAAAAAAAAAAQMJAAAAAAAAAgUAAAAOJHNpemU5OTY0MTAwMzQAAAAAAAAAAAIFAAAADiRhY2MyOTk2NDEwMDM0BAAAAA4kYWNjMzk5NjQxMDAzNAkBAAAAH2ZpbHRlckFkbWluc1ZvdGVCeVVuYmxvY2tBY3Rpb24AAAACBQAAAA4kYWNjMjk5NjQxMDAzNAkAAZEAAAACBQAAAA4kbGlzdDk5NjQxMDAzNAAAAAAAAAAAAgMJAAAAAAAAAgUAAAAOJHNpemU5OTY0MTAwMzQAAAAAAAAAAAMFAAAADiRhY2MzOTk2NDEwMDM0BAAAAA4kYWNjNDk5NjQxMDAzNAkBAAAAH2ZpbHRlckFkbWluc1ZvdGVCeVVuYmxvY2tBY3Rpb24AAAACBQAAAA4kYWNjMzk5NjQxMDAzNAkAAZEAAAACBQAAAA4kbGlzdDk5NjQxMDAzNAAAAAAAAAAAAwMJAAAAAAAAAgUAAAAOJHNpemU5OTY0MTAwMzQAAAAAAAAAAAQFAAAADiRhY2M0OTk2NDEwMDM0BAAAAA4kYWNjNTk5NjQxMDAzNAkBAAAAH2ZpbHRlckFkbWluc1ZvdGVCeVVuYmxvY2tBY3Rpb24AAAACBQAAAA4kYWNjNDk5NjQxMDAzNAkAAZEAAAACBQAAAA4kbGlzdDk5NjQxMDAzNAAAAAAAAAAABAMJAAAAAAAAAgUAAAAOJHNpemU5OTY0MTAwMzQAAAAAAAAAAAUFAAAADiRhY2M1OTk2NDEwMDM0BAAAAA4kYWNjNjk5NjQxMDAzNAkBAAAAH2ZpbHRlckFkbWluc1ZvdGVCeVVuYmxvY2tBY3Rpb24AAAACBQAAAA4kYWNjNTk5NjQxMDAzNAkAAZEAAAACBQAAAA4kbGlzdDk5NjQxMDAzNAAAAAAAAAAABQkAAAIAAAABAgAAABJMaXN0IHNpemUgZXhjZWVkIDUEAAAAC3VwZGF0ZVZvdGVzBAAAAA8kbGlzdDEwMDU3MTAxMjYFAAAAGGFkbWluc0xpc3RXaXRob3V0QWNjb3VudAQAAAAPJHNpemUxMDA1NzEwMTI2CQABkAAAAAEFAAAADyRsaXN0MTAwNTcxMDEyNgQAAAAPJGFjYzAxMDA1NzEwMTI2BQAAAANuaWwDCQAAAAAAAAIFAAAADyRzaXplMTAwNTcxMDEyNgAAAAAAAAAAAAUAAAAPJGFjYzAxMDA1NzEwMTI2BAAAAA8kYWNjMTEwMDU3MTAxMjYJAQAAAB5maWx0ZXJBZG1pbnNWb3RlQnlVcGRhdGVBY3Rpb24AAAACBQAAAA8kYWNjMDEwMDU3MTAxMjYJAAGRAAAAAgUAAAAPJGxpc3QxMDA1NzEwMTI2AAAAAAAAAAAAAwkAAAAAAAACBQAAAA8kc2l6ZTEwMDU3MTAxMjYAAAAAAAAAAAEFAAAADyRhY2MxMTAwNTcxMDEyNgQAAAAPJGFjYzIxMDA1NzEwMTI2CQEAAAAeZmlsdGVyQWRtaW5zVm90ZUJ5VXBkYXRlQWN0aW9uAAAAAgUAAAAPJGFjYzExMDA1NzEwMTI2CQABkQAAAAIFAAAADyRsaXN0MTAwNTcxMDEyNgAAAAAAAAAAAQMJAAAAAAAAAgUAAAAPJHNpemUxMDA1NzEwMTI2AAAAAAAAAAACBQAAAA8kYWNjMjEwMDU3MTAxMjYEAAAADyRhY2MzMTAwNTcxMDEyNgkBAAAAHmZpbHRlckFkbWluc1ZvdGVCeVVwZGF0ZUFjdGlvbgAAAAIFAAAADyRhY2MyMTAwNTcxMDEyNgkAAZEAAAACBQAAAA8kbGlzdDEwMDU3MTAxMjYAAAAAAAAAAAIDCQAAAAAAAAIFAAAADyRzaXplMTAwNTcxMDEyNgAAAAAAAAAAAwUAAAAPJGFjYzMxMDA1NzEwMTI2BAAAAA8kYWNjNDEwMDU3MTAxMjYJAQAAAB5maWx0ZXJBZG1pbnNWb3RlQnlVcGRhdGVBY3Rpb24AAAACBQAAAA8kYWNjMzEwMDU3MTAxMjYJAAGRAAAAAgUAAAAPJGxpc3QxMDA1NzEwMTI2AAAAAAAAAAADAwkAAAAAAAACBQAAAA8kc2l6ZTEwMDU3MTAxMjYAAAAAAAAAAAQFAAAADyRhY2M0MTAwNTcxMDEyNgQAAAAPJGFjYzUxMDA1NzEwMTI2CQEAAAAeZmlsdGVyQWRtaW5zVm90ZUJ5VXBkYXRlQWN0aW9uAAAAAgUAAAAPJGFjYzQxMDA1NzEwMTI2CQABkQAAAAIFAAAADyRsaXN0MTAwNTcxMDEyNgAAAAAAAAAABAMJAAAAAAAAAgUAAAAPJHNpemUxMDA1NzEwMTI2AAAAAAAAAAAFBQAAAA8kYWNjNTEwMDU3MTAxMjYEAAAADyRhY2M2MTAwNTcxMDEyNgkBAAAAHmZpbHRlckFkbWluc1ZvdGVCeVVwZGF0ZUFjdGlvbgAAAAIFAAAADyRhY2M1MTAwNTcxMDEyNgkAAZEAAAACBQAAAA8kbGlzdDEwMDU3MTAxMjYAAAAAAAAAAAUJAAACAAAAAQIAAAASTGlzdCBzaXplIGV4Y2VlZCA1BAAAAA5ibG9ja1ZvdGVDb3VudAkAAGQAAAACCQABkAAAAAEFAAAACmJsb2NrVm90ZXMDCQAAAAAAAAIFAAAABmFjdGlvbgUAAAAFQkxPQ0sAAAAAAAAAAAEAAAAAAAAAAAAEAAAAEHVuYmxvY2tWb3RlQ291bnQJAABkAAAAAgkAAZAAAAABBQAAAAx1bmJsb2NrVm90ZXMDCQAAAAAAAAIFAAAABmFjdGlvbgUAAAAHVU5CTE9DSwAAAAAAAAAAAQAAAAAAAAAAAAQAAAAQdXBkYXRlVm90ZXNDb3VudAkAAGQAAAACCQABkAAAAAEFAAAAC3VwZGF0ZVZvdGVzAwkAAAAAAAACBQAAAAZhY3Rpb24FAAAABlVQREFURQAAAAAAAAAAAQAAAAAAAAAAAAQAAAALcmVzZXRSZXN1bHQJAARMAAAAAgkBAAAACURhdGFFbnRyeQAAAAIFAAAAEkJsb2NrRXhwaXJlVm90ZUtleQAAAAAAAAAAAAkABEwAAAACCQEAAAAJRGF0YUVudHJ5AAAAAgUAAAAXQmxvY2tFeHBpcmVQcm92aWRpbmdLZXkAAAAAAAAAAAAJAARMAAAAAgkBAAAACURhdGFFbnRyeQAAAAIJAQAAABVnZXRBZG1pblZvdGVBY3Rpb25LZXkAAAABCQABkQAAAAIFAAAAGGFkbWluc0xpc3RXaXRob3V0QWNjb3VudAAAAAAAAAAAAAIAAAAACQAETAAAAAIJAQAAAAlEYXRhRW50cnkAAAACCQEAAAAVZ2V0QWRtaW5Wb3RlQWN0aW9uS2V5AAAAAQkAAZEAAAACBQAAABhhZG1pbnNMaXN0V2l0aG91dEFjY291bnQAAAAAAAAAAAECAAAAAAkABEwAAAACCQEAAAAJRGF0YUVudHJ5AAAAAgkBAAAAFWdldEFkbWluVm90ZUFjdGlvbktleQAAAAEJAAGRAAAAAgUAAAAYYWRtaW5zTGlzdFdpdGhvdXRBY2NvdW50AAAAAAAAAAACAgAAAAAJAARMAAAAAgkBAAAACURhdGFFbnRyeQAAAAIJAQAAABVnZXRBZG1pblZvdGVBY3Rpb25LZXkAAAABCQABkQAAAAIFAAAAGGFkbWluc0xpc3RXaXRob3V0QWNjb3VudAAAAAAAAAAAAwIAAAAABQAAAANuaWwDAwkAAGcAAAACBQAAAA5ibG9ja1ZvdGVDb3VudAUAAAATYmZ0Q29lZmZpY2llbnRBZG1pbgYJAABnAAAAAgUAAAAQdW5ibG9ja1ZvdGVDb3VudAUAAAATYmZ0Q29lZmZpY2llbnRBZG1pbgkBAAAACFdyaXRlU2V0AAAAAQkABEwAAAACCQEAAAAJRGF0YUVudHJ5AAAAAgUAAAARSXNQcmljZVBlbmRpbmdLZXkHCQAETAAAAAIJAQAAAAlEYXRhRW50cnkAAAACBQAAAAxJc0Jsb2NrZWRLZXkDCQAAZwAAAAIFAAAADmJsb2NrVm90ZUNvdW50BQAAABNiZnRDb2VmZmljaWVudEFkbWluBgcFAAAAC3Jlc2V0UmVzdWx0AwkAAGYAAAACBQAAABB1cGRhdGVWb3Rlc0NvdW50BQAAABNiZnRDb2VmZmljaWVudEFkbWluCQEAAAAIV3JpdGVTZXQAAAABCQAETAAAAAIJAQAAAAlEYXRhRW50cnkAAAACBQAAABRTY3JpcHRVcGRhdGVCbG9ja0tleQMJAABmAAAAAgUAAAAQdXBkYXRlVm90ZXNDb3VudAUAAAATYmZ0Q29lZmZpY2llbnRBZG1pbgkAAGQAAAACBQAAAAZoZWlnaHQFAAAAFHNjcmlwdFVwZGF0ZUludGVydmFsBQAAABFzY3JpcHRVcGRhdGVCbG9jawUAAAALcmVzZXRSZXN1bHQJAQAAAAhXcml0ZVNldAAAAAEJAARMAAAAAgkBAAAACURhdGFFbnRyeQAAAAIFAAAAEkJsb2NrRXhwaXJlVm90ZUtleQMJAABmAAAAAgUAAAAGaGVpZ2h0BQAAAA9ibG9ja0V4cGlyZVZvdGUJAABkAAAAAgUAAAAGaGVpZ2h0BQAAAAx2b3RlSW50ZXJ2YWwFAAAAD2Jsb2NrRXhwaXJlVm90ZQkABEwAAAACCQEAAAAJRGF0YUVudHJ5AAAAAgkBAAAAFWdldEFkbWluVm90ZUFjdGlvbktleQAAAAEFAAAAB2FjY291bnQFAAAABmFjdGlvbgUAAAADbmlsAAAAABQ1HKI=", "chainId": 84, "height": 746218, "spentComplexity": 0 } View: original | compacted Prev: GK8FJNxGj4MJHz7Ef5ATSpj4LkeyAHWPHxiBmKRYwiSt Next: 999DKeyT3ZF4zQ2J2NNGrHKo1dgYP5rRNwYNTCz7jek Diff:
OldNewDifferences
104104
105105 let ScriptUpdateBlockKey = "script_update_block"
106106
107+let PriceIndexKey = "price_index"
108+
107109 func getOracleIsProvideKey (owner) = (OracleIsProvideKey + owner)
108110
109111
122124 func getPriceHistoryKey (block) = ((PriceKey + "_") + toString(block))
123125
124126
127+func getHeightPriceByIndexKey (index) = ((PriceIndexKey + "_") + toString(index))
128+
129+
125130 let price = getNumberByKey(PriceKey)
131+
132+let priceIndex = getNumberByKey(PriceIndexKey)
126133
127134 let providingInterval = getNumberByKey(ProvidingIntervalKey)
128135
168175 func getOracleProvidePrice (owner) = getNumberByKey(getOracleProvidePriceKey(owner))
169176
170177
171-func isOracle (address) = match indexOf(oracles, address) {
172- case _: Int =>
173- true
174- case _ =>
175- false
176-}
178+func isOracle (address) = isDefined(indexOf(oracles, address))
177179
178180
179-func isAdmin (address) = match indexOf(admins, address) {
180- case _: Int =>
181- true
182- case _ =>
183- false
184-}
181+func isAdmin (address) = isDefined(indexOf(admins, address))
185182
186183
187184 func sumOraclePrice (base,address) = (base + (getOracleProvidePrice(address) * isOracleProvideInt(address)))
280277 else (blockExpireProviding >= height))
281278 then throw("wait for the end of the price providing")
282279 else if ((bftCoefficientOracle > priceProvidingCount))
283- then throw("2/3 oracles need to set a price")
280+ then throw("3/5 oracles need to set a price")
284281 else if (if ((newPrice >= (price + ((price * percentPriceOffset) / 100))))
285282 then true
286283 else ((price - ((price * percentPriceOffset) / 100)) >= newPrice))
287284 then WriteSet([DataEntry(IsBlockedKey, true), DataEntry(getBlackSwarmPriceKey(height), newPrice)])
288- else WriteSet([DataEntry(PriceKey, newPrice), DataEntry(getPriceHistoryKey(height), newPrice), DataEntry(IsPricePendingKey, false)])
285+ else {
286+ let newPriceIndex = (priceIndex + 1)
287+ WriteSet([DataEntry(PriceKey, newPrice), DataEntry(getPriceHistoryKey(height), newPrice), DataEntry(IsPricePendingKey, false), DataEntry(PriceIndexKey, newPriceIndex), DataEntry(getHeightPriceByIndexKey(newPriceIndex), height)])
288+ }
289289 }
290290
291291
296296 let adminsListWithoutAccount = convertJsonArrayToList(dropElementInJsonArray(admins, account))
297297 let lastAction = getAdminVoteAction(account)
298298 let blockVotes = {
299- let $list96289696 = adminsListWithoutAccount
300- let $size96289696 = size($list96289696)
301- let $acc096289696 = nil
302- if (($size96289696 == 0))
303- then $acc096289696
299+ let $list98729940 = adminsListWithoutAccount
300+ let $size98729940 = size($list98729940)
301+ let $acc098729940 = nil
302+ if (($size98729940 == 0))
303+ then $acc098729940
304304 else {
305- let $acc196289696 = filterAdminsVoteByBlockAction($acc096289696, $list96289696[0])
306- if (($size96289696 == 1))
307- then $acc196289696
305+ let $acc198729940 = filterAdminsVoteByBlockAction($acc098729940, $list98729940[0])
306+ if (($size98729940 == 1))
307+ then $acc198729940
308308 else {
309- let $acc296289696 = filterAdminsVoteByBlockAction($acc196289696, $list96289696[1])
310- if (($size96289696 == 2))
311- then $acc296289696
309+ let $acc298729940 = filterAdminsVoteByBlockAction($acc198729940, $list98729940[1])
310+ if (($size98729940 == 2))
311+ then $acc298729940
312312 else {
313- let $acc396289696 = filterAdminsVoteByBlockAction($acc296289696, $list96289696[2])
314- if (($size96289696 == 3))
315- then $acc396289696
313+ let $acc398729940 = filterAdminsVoteByBlockAction($acc298729940, $list98729940[2])
314+ if (($size98729940 == 3))
315+ then $acc398729940
316316 else {
317- let $acc496289696 = filterAdminsVoteByBlockAction($acc396289696, $list96289696[3])
318- if (($size96289696 == 4))
319- then $acc496289696
317+ let $acc498729940 = filterAdminsVoteByBlockAction($acc398729940, $list98729940[3])
318+ if (($size98729940 == 4))
319+ then $acc498729940
320320 else {
321- let $acc596289696 = filterAdminsVoteByBlockAction($acc496289696, $list96289696[4])
322- if (($size96289696 == 5))
323- then $acc596289696
321+ let $acc598729940 = filterAdminsVoteByBlockAction($acc498729940, $list98729940[4])
322+ if (($size98729940 == 5))
323+ then $acc598729940
324324 else {
325- let $acc696289696 = filterAdminsVoteByBlockAction($acc596289696, $list96289696[5])
325+ let $acc698729940 = filterAdminsVoteByBlockAction($acc598729940, $list98729940[5])
326326 throw("List size exceed 5")
327327 }
328328 }
332332 }
333333 }
334334 let unblockVotes = {
335- let $list97209790 = adminsListWithoutAccount
336- let $size97209790 = size($list97209790)
337- let $acc097209790 = nil
338- if (($size97209790 == 0))
339- then $acc097209790
335+ let $list996410034 = adminsListWithoutAccount
336+ let $size996410034 = size($list996410034)
337+ let $acc0996410034 = nil
338+ if (($size996410034 == 0))
339+ then $acc0996410034
340340 else {
341- let $acc197209790 = filterAdminsVoteByUnblockAction($acc097209790, $list97209790[0])
342- if (($size97209790 == 1))
343- then $acc197209790
341+ let $acc1996410034 = filterAdminsVoteByUnblockAction($acc0996410034, $list996410034[0])
342+ if (($size996410034 == 1))
343+ then $acc1996410034
344344 else {
345- let $acc297209790 = filterAdminsVoteByUnblockAction($acc197209790, $list97209790[1])
346- if (($size97209790 == 2))
347- then $acc297209790
345+ let $acc2996410034 = filterAdminsVoteByUnblockAction($acc1996410034, $list996410034[1])
346+ if (($size996410034 == 2))
347+ then $acc2996410034
348348 else {
349- let $acc397209790 = filterAdminsVoteByUnblockAction($acc297209790, $list97209790[2])
350- if (($size97209790 == 3))
351- then $acc397209790
349+ let $acc3996410034 = filterAdminsVoteByUnblockAction($acc2996410034, $list996410034[2])
350+ if (($size996410034 == 3))
351+ then $acc3996410034
352352 else {
353- let $acc497209790 = filterAdminsVoteByUnblockAction($acc397209790, $list97209790[3])
354- if (($size97209790 == 4))
355- then $acc497209790
353+ let $acc4996410034 = filterAdminsVoteByUnblockAction($acc3996410034, $list996410034[3])
354+ if (($size996410034 == 4))
355+ then $acc4996410034
356356 else {
357- let $acc597209790 = filterAdminsVoteByUnblockAction($acc497209790, $list97209790[4])
358- if (($size97209790 == 5))
359- then $acc597209790
357+ let $acc5996410034 = filterAdminsVoteByUnblockAction($acc4996410034, $list996410034[4])
358+ if (($size996410034 == 5))
359+ then $acc5996410034
360360 else {
361- let $acc697209790 = filterAdminsVoteByUnblockAction($acc597209790, $list97209790[5])
361+ let $acc6996410034 = filterAdminsVoteByUnblockAction($acc5996410034, $list996410034[5])
362362 throw("List size exceed 5")
363363 }
364364 }
368368 }
369369 }
370370 let updateVotes = {
371- let $list98139882 = adminsListWithoutAccount
372- let $size98139882 = size($list98139882)
373- let $acc098139882 = nil
374- if (($size98139882 == 0))
375- then $acc098139882
371+ let $list1005710126 = adminsListWithoutAccount
372+ let $size1005710126 = size($list1005710126)
373+ let $acc01005710126 = nil
374+ if (($size1005710126 == 0))
375+ then $acc01005710126
376376 else {
377- let $acc198139882 = filterAdminsVoteByUpdateAction($acc098139882, $list98139882[0])
378- if (($size98139882 == 1))
379- then $acc198139882
377+ let $acc11005710126 = filterAdminsVoteByUpdateAction($acc01005710126, $list1005710126[0])
378+ if (($size1005710126 == 1))
379+ then $acc11005710126
380380 else {
381- let $acc298139882 = filterAdminsVoteByUpdateAction($acc198139882, $list98139882[1])
382- if (($size98139882 == 2))
383- then $acc298139882
381+ let $acc21005710126 = filterAdminsVoteByUpdateAction($acc11005710126, $list1005710126[1])
382+ if (($size1005710126 == 2))
383+ then $acc21005710126
384384 else {
385- let $acc398139882 = filterAdminsVoteByUpdateAction($acc298139882, $list98139882[2])
386- if (($size98139882 == 3))
387- then $acc398139882
385+ let $acc31005710126 = filterAdminsVoteByUpdateAction($acc21005710126, $list1005710126[2])
386+ if (($size1005710126 == 3))
387+ then $acc31005710126
388388 else {
389- let $acc498139882 = filterAdminsVoteByUpdateAction($acc398139882, $list98139882[3])
390- if (($size98139882 == 4))
391- then $acc498139882
389+ let $acc41005710126 = filterAdminsVoteByUpdateAction($acc31005710126, $list1005710126[3])
390+ if (($size1005710126 == 4))
391+ then $acc41005710126
392392 else {
393- let $acc598139882 = filterAdminsVoteByUpdateAction($acc498139882, $list98139882[4])
394- if (($size98139882 == 5))
395- then $acc598139882
393+ let $acc51005710126 = filterAdminsVoteByUpdateAction($acc41005710126, $list1005710126[4])
394+ if (($size1005710126 == 5))
395+ then $acc51005710126
396396 else {
397- let $acc698139882 = filterAdminsVoteByUpdateAction($acc598139882, $list98139882[5])
397+ let $acc61005710126 = filterAdminsVoteByUpdateAction($acc51005710126, $list1005710126[5])
398398 throw("List size exceed 5")
399399 }
400400 }
412412 let updateVotesCount = (size(updateVotes) + (if ((action == UPDATE))
413413 then 1
414414 else 0))
415+ let resetResult = [DataEntry(BlockExpireVoteKey, 0), DataEntry(BlockExpireProvidingKey, 0), DataEntry(getAdminVoteActionKey(adminsListWithoutAccount[0]), ""), DataEntry(getAdminVoteActionKey(adminsListWithoutAccount[1]), ""), DataEntry(getAdminVoteActionKey(adminsListWithoutAccount[2]), ""), DataEntry(getAdminVoteActionKey(adminsListWithoutAccount[3]), "")]
415416 if (if ((blockVoteCount >= bftCoefficientAdmin))
416417 then true
417418 else (unblockVoteCount >= bftCoefficientAdmin))
418- then WriteSet([DataEntry(IsBlockedKey, if ((blockVoteCount >= bftCoefficientAdmin))
419+ then WriteSet([DataEntry(IsPricePendingKey, false), DataEntry(IsBlockedKey, if ((blockVoteCount >= bftCoefficientAdmin))
419420 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 false)] :: resetResult)
421422 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)])
423+ then WriteSet(DataEntry(ScriptUpdateBlockKey, if ((updateVotesCount > bftCoefficientAdmin))
424+ then (height + scriptUpdateInterval)
425+ else scriptUpdateBlock) :: resetResult)
426+ else WriteSet([DataEntry(BlockExpireVoteKey, if ((height > blockExpireVote))
427+ then (height + voteInterval)
428+ else blockExpireVote), DataEntry(getAdminVoteActionKey(account), action)])
426429 }
427430
428431
Full:
OldNewDifferences
11 {-# STDLIB_VERSION 3 #-}
22 {-# SCRIPT_TYPE ACCOUNT #-}
33 {-# CONTENT_TYPE DAPP #-}
44 func getNumberByKey (key) = match getInteger(this, key) {
55 case a: Int =>
66 a
77 case _ =>
88 0
99 }
1010
1111
1212 func getStringByKey (key) = match getString(this, key) {
1313 case a: String =>
1414 a
1515 case _ =>
1616 ""
1717 }
1818
1919
2020 func getBoolByKey (key) = match getBoolean(this, key) {
2121 case a: Boolean =>
2222 a
2323 case _ =>
2424 false
2525 }
2626
2727
2828 func getNumberByAddressAndKey (address,key) = match getInteger(address, key) {
2929 case a: Int =>
3030 a
3131 case _ =>
3232 0
3333 }
3434
3535
3636 func getStringByAddressAndKey (address,key) = match getString(address, key) {
3737 case a: String =>
3838 a
3939 case _ =>
4040 ""
4141 }
4242
4343
4444 func isInt (val) = match val {
4545 case a: Int =>
4646 true
4747 case _ =>
4848 false
4949 }
5050
5151
5252 func dropElementInJsonArray (array,element) = {
5353 let splitedArray = split(array, element)
5454 if ((take(splitedArray[1], 1) == ","))
5555 then (splitedArray[0] + drop(splitedArray[1], 1))
5656 else (dropRight(splitedArray[0], 1) + splitedArray[1])
5757 }
5858
5959
6060 func convertJsonArrayToList (jsonArray) = split(jsonArray, ",")
6161
6262
6363 let BLOCK = "block"
6464
6565 let UNBLOCK = "unblock"
6666
6767 let UPDATE = "update"
6868
6969 let OraclesKey = "oracles"
7070
7171 let AdminsKey = "admins"
7272
7373 let VoteIntervalKey = "vote_interval"
7474
7575 let CoefficientOracleKey = "coefficient_oracle"
7676
7777 let CoefficientAdminKey = "coefficient_admin"
7878
7979 let ScriptUpdateIntervalKey = "script_update_interval"
8080
8181 let ProvidingIntervalKey = "providing_interval"
8282
8383 let PriceKey = "price"
8484
8585 let PriceOffsetKey = "price_offset"
8686
8787 let IsPricePendingKey = "is_pending_price"
8888
8989 let IsBlockedKey = "is_blocked"
9090
9191 let OracleIsProvideKey = "oracle_is_provide_"
9292
9393 let OracleProvidePriceKey = "oracle_price_provide_"
9494
9595 let AdminVoteKey = "admin_vote_"
9696
9797 let ActionKey = "action"
9898
9999 let BlockExpireProvidingKey = "providing_expire_block"
100100
101101 let BlackSwarmPriceKey = "black_swarm_price"
102102
103103 let BlockExpireVoteKey = "vote_expire_block"
104104
105105 let ScriptUpdateBlockKey = "script_update_block"
106106
107+let PriceIndexKey = "price_index"
108+
107109 func getOracleIsProvideKey (owner) = (OracleIsProvideKey + owner)
108110
109111
110112 func getOracleProvidePriceKey (owner) = (OracleProvidePriceKey + owner)
111113
112114
113115 func getAdminVoteKey (owner) = (AdminVoteKey + owner)
114116
115117
116118 func getAdminVoteActionKey (owner) = ((getAdminVoteKey(owner) + "_") + ActionKey)
117119
118120
119121 func getBlackSwarmPriceKey (block) = ((BlackSwarmPriceKey + "_") + toString(block))
120122
121123
122124 func getPriceHistoryKey (block) = ((PriceKey + "_") + toString(block))
123125
124126
127+func getHeightPriceByIndexKey (index) = ((PriceIndexKey + "_") + toString(index))
128+
129+
125130 let price = getNumberByKey(PriceKey)
131+
132+let priceIndex = getNumberByKey(PriceIndexKey)
126133
127134 let providingInterval = getNumberByKey(ProvidingIntervalKey)
128135
129136 let blockExpireProviding = getNumberByKey(BlockExpireProvidingKey)
130137
131138 let blockExpireVote = getNumberByKey(BlockExpireVoteKey)
132139
133140 let scriptUpdateBlock = getNumberByKey(ScriptUpdateBlockKey)
134141
135142 let scriptUpdateInterval = getNumberByKey(ScriptUpdateIntervalKey)
136143
137144 let isPricePending = getBoolByKey(IsPricePendingKey)
138145
139146 let isBlocked = getBoolByKey(IsBlockedKey)
140147
141148 let bftCoefficientOracle = getNumberByKey(CoefficientOracleKey)
142149
143150 let bftCoefficientAdmin = getNumberByKey(CoefficientAdminKey)
144151
145152 let percentPriceOffset = getNumberByKey(PriceOffsetKey)
146153
147154 let voteInterval = getNumberByKey(VoteIntervalKey)
148155
149156 let oracles = getStringByKey(OraclesKey)
150157
151158 let admins = getStringByKey(AdminsKey)
152159
153160 let oraclesList = convertJsonArrayToList(oracles)
154161
155162 let adminsList = convertJsonArrayToList(admins)
156163
157164 func getAdminVoteAction (owner) = getStringByKey(getAdminVoteActionKey(owner))
158165
159166
160167 func isOracleProvide (owner) = getBoolByKey(getOracleIsProvideKey(owner))
161168
162169
163170 func isOracleProvideInt (owner) = if (isOracleProvide(owner))
164171 then 1
165172 else 0
166173
167174
168175 func getOracleProvidePrice (owner) = getNumberByKey(getOracleProvidePriceKey(owner))
169176
170177
171-func isOracle (address) = match indexOf(oracles, address) {
172- case _: Int =>
173- true
174- case _ =>
175- false
176-}
178+func isOracle (address) = isDefined(indexOf(oracles, address))
177179
178180
179-func isAdmin (address) = match indexOf(admins, address) {
180- case _: Int =>
181- true
182- case _ =>
183- false
184-}
181+func isAdmin (address) = isDefined(indexOf(admins, address))
185182
186183
187184 func sumOraclePrice (base,address) = (base + (getOracleProvidePrice(address) * isOracleProvideInt(address)))
188185
189186
190187 func filterAdminsVoteByAction (result,address,action) = address :: result
191188
192189
193190 func filterAdminsVoteByBlockAction (result,address) = filterAdminsVoteByAction(result, address, BLOCK)
194191
195192
196193 func filterAdminsVoteByUnblockAction (result,address) = filterAdminsVoteByAction(result, address, UNBLOCK)
197194
198195
199196 func filterAdminsVoteByUpdateAction (result,address) = filterAdminsVoteByAction(result, address, UPDATE)
200197
201198
202199 @Callable(i)
203200 func setCurrentPrice (newPrice) = {
204201 let account = toString(i.caller)
205202 let isOracleProvideList = [isOracleProvide(oraclesList[0]), isOracleProvide(oraclesList[1]), isOracleProvide(oraclesList[2]), isOracleProvide(oraclesList[3]), isOracleProvide(oraclesList[4])]
206203 let priceProvidingCount = ((((((if (isOracleProvideList[0])
207204 then 1
208205 else 0) + (if (isOracleProvideList[1])
209206 then 1
210207 else 0)) + (if (isOracleProvideList[2])
211208 then 1
212209 else 0)) + (if (isOracleProvideList[3])
213210 then 1
214211 else 0)) + (if (isOracleProvideList[4])
215212 then 1
216213 else 0)) + 1)
217214 if (isBlocked)
218215 then throw("contract is blocked")
219216 else if (!(isOracle(account)))
220217 then throw("permission denied")
221218 else if (if ((blockExpireProviding >= height))
222219 then isOracleProvide(account)
223220 else false)
224221 then throw("price is already provided")
225222 else if (if ((height > blockExpireProviding))
226223 then isPricePending
227224 else false)
228225 then throw("use finalizeCurrentPrice")
229226 else WriteSet([DataEntry(getOracleIsProvideKey(oraclesList[0]), if ((height > blockExpireProviding))
230227 then false
231228 else isOracleProvideList[0]), DataEntry(getOracleIsProvideKey(oraclesList[1]), if ((height > blockExpireProviding))
232229 then false
233230 else isOracleProvideList[1]), DataEntry(getOracleIsProvideKey(oraclesList[2]), if ((height > blockExpireProviding))
234231 then false
235232 else isOracleProvideList[2]), DataEntry(getOracleIsProvideKey(oraclesList[3]), if ((height > blockExpireProviding))
236233 then false
237234 else isOracleProvideList[3]), DataEntry(getOracleIsProvideKey(oraclesList[4]), if ((height > blockExpireProviding))
238235 then false
239236 else isOracleProvideList[4]), DataEntry(getOracleIsProvideKey(account), true), DataEntry(getOracleProvidePriceKey(account), newPrice), DataEntry(BlockExpireProvidingKey, if ((height > blockExpireProviding))
240237 then (height + providingInterval)
241238 else blockExpireProviding), DataEntry(IsPricePendingKey, if (if ((blockExpireProviding >= height))
242239 then (priceProvidingCount >= bftCoefficientOracle)
243240 else false)
244241 then true
245242 else isPricePending)])
246243 }
247244
248245
249246
250247 @Callable(i)
251248 func finalizeCurrentPrice () = {
252249 let isOracleProvideList = [isOracleProvide(oraclesList[0]), isOracleProvide(oraclesList[1]), isOracleProvide(oraclesList[2]), isOracleProvide(oraclesList[3]), isOracleProvide(oraclesList[4])]
253250 let priceProvidingCount = (((((if (isOracleProvideList[0])
254251 then 1
255252 else 0) + (if (isOracleProvideList[1])
256253 then 1
257254 else 0)) + (if (isOracleProvideList[2])
258255 then 1
259256 else 0)) + (if (isOracleProvideList[3])
260257 then 1
261258 else 0)) + (if (isOracleProvideList[4])
262259 then 1
263260 else 0))
264261 let priceSum = (((((getOracleProvidePrice(oraclesList[0]) * (if (isOracleProvideList[0])
265262 then 1
266263 else 0)) + (getOracleProvidePrice(oraclesList[1]) * (if (isOracleProvideList[1])
267264 then 1
268265 else 0))) + (getOracleProvidePrice(oraclesList[2]) * (if (isOracleProvideList[2])
269266 then 1
270267 else 0))) + (getOracleProvidePrice(oraclesList[3]) * (if (isOracleProvideList[3])
271268 then 1
272269 else 0))) + (getOracleProvidePrice(oraclesList[4]) * (if (isOracleProvideList[4])
273270 then 1
274271 else 0)))
275272 let newPrice = (priceSum / priceProvidingCount)
276273 if (isBlocked)
277274 then throw("contract is blocked")
278275 else if (if (!(isPricePending))
279276 then true
280277 else (blockExpireProviding >= height))
281278 then throw("wait for the end of the price providing")
282279 else if ((bftCoefficientOracle > priceProvidingCount))
283- then throw("2/3 oracles need to set a price")
280+ then throw("3/5 oracles need to set a price")
284281 else if (if ((newPrice >= (price + ((price * percentPriceOffset) / 100))))
285282 then true
286283 else ((price - ((price * percentPriceOffset) / 100)) >= newPrice))
287284 then WriteSet([DataEntry(IsBlockedKey, true), DataEntry(getBlackSwarmPriceKey(height), newPrice)])
288- else WriteSet([DataEntry(PriceKey, newPrice), DataEntry(getPriceHistoryKey(height), newPrice), DataEntry(IsPricePendingKey, false)])
285+ else {
286+ let newPriceIndex = (priceIndex + 1)
287+ WriteSet([DataEntry(PriceKey, newPrice), DataEntry(getPriceHistoryKey(height), newPrice), DataEntry(IsPricePendingKey, false), DataEntry(PriceIndexKey, newPriceIndex), DataEntry(getHeightPriceByIndexKey(newPriceIndex), height)])
288+ }
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 = {
299- let $list96289696 = adminsListWithoutAccount
300- let $size96289696 = size($list96289696)
301- let $acc096289696 = nil
302- if (($size96289696 == 0))
303- then $acc096289696
299+ let $list98729940 = adminsListWithoutAccount
300+ let $size98729940 = size($list98729940)
301+ let $acc098729940 = nil
302+ if (($size98729940 == 0))
303+ then $acc098729940
304304 else {
305- let $acc196289696 = filterAdminsVoteByBlockAction($acc096289696, $list96289696[0])
306- if (($size96289696 == 1))
307- then $acc196289696
305+ let $acc198729940 = filterAdminsVoteByBlockAction($acc098729940, $list98729940[0])
306+ if (($size98729940 == 1))
307+ then $acc198729940
308308 else {
309- let $acc296289696 = filterAdminsVoteByBlockAction($acc196289696, $list96289696[1])
310- if (($size96289696 == 2))
311- then $acc296289696
309+ let $acc298729940 = filterAdminsVoteByBlockAction($acc198729940, $list98729940[1])
310+ if (($size98729940 == 2))
311+ then $acc298729940
312312 else {
313- let $acc396289696 = filterAdminsVoteByBlockAction($acc296289696, $list96289696[2])
314- if (($size96289696 == 3))
315- then $acc396289696
313+ let $acc398729940 = filterAdminsVoteByBlockAction($acc298729940, $list98729940[2])
314+ if (($size98729940 == 3))
315+ then $acc398729940
316316 else {
317- let $acc496289696 = filterAdminsVoteByBlockAction($acc396289696, $list96289696[3])
318- if (($size96289696 == 4))
319- then $acc496289696
317+ let $acc498729940 = filterAdminsVoteByBlockAction($acc398729940, $list98729940[3])
318+ if (($size98729940 == 4))
319+ then $acc498729940
320320 else {
321- let $acc596289696 = filterAdminsVoteByBlockAction($acc496289696, $list96289696[4])
322- if (($size96289696 == 5))
323- then $acc596289696
321+ let $acc598729940 = filterAdminsVoteByBlockAction($acc498729940, $list98729940[4])
322+ if (($size98729940 == 5))
323+ then $acc598729940
324324 else {
325- let $acc696289696 = filterAdminsVoteByBlockAction($acc596289696, $list96289696[5])
325+ let $acc698729940 = filterAdminsVoteByBlockAction($acc598729940, $list98729940[5])
326326 throw("List size exceed 5")
327327 }
328328 }
329329 }
330330 }
331331 }
332332 }
333333 }
334334 let unblockVotes = {
335- let $list97209790 = adminsListWithoutAccount
336- let $size97209790 = size($list97209790)
337- let $acc097209790 = nil
338- if (($size97209790 == 0))
339- then $acc097209790
335+ let $list996410034 = adminsListWithoutAccount
336+ let $size996410034 = size($list996410034)
337+ let $acc0996410034 = nil
338+ if (($size996410034 == 0))
339+ then $acc0996410034
340340 else {
341- let $acc197209790 = filterAdminsVoteByUnblockAction($acc097209790, $list97209790[0])
342- if (($size97209790 == 1))
343- then $acc197209790
341+ let $acc1996410034 = filterAdminsVoteByUnblockAction($acc0996410034, $list996410034[0])
342+ if (($size996410034 == 1))
343+ then $acc1996410034
344344 else {
345- let $acc297209790 = filterAdminsVoteByUnblockAction($acc197209790, $list97209790[1])
346- if (($size97209790 == 2))
347- then $acc297209790
345+ let $acc2996410034 = filterAdminsVoteByUnblockAction($acc1996410034, $list996410034[1])
346+ if (($size996410034 == 2))
347+ then $acc2996410034
348348 else {
349- let $acc397209790 = filterAdminsVoteByUnblockAction($acc297209790, $list97209790[2])
350- if (($size97209790 == 3))
351- then $acc397209790
349+ let $acc3996410034 = filterAdminsVoteByUnblockAction($acc2996410034, $list996410034[2])
350+ if (($size996410034 == 3))
351+ then $acc3996410034
352352 else {
353- let $acc497209790 = filterAdminsVoteByUnblockAction($acc397209790, $list97209790[3])
354- if (($size97209790 == 4))
355- then $acc497209790
353+ let $acc4996410034 = filterAdminsVoteByUnblockAction($acc3996410034, $list996410034[3])
354+ if (($size996410034 == 4))
355+ then $acc4996410034
356356 else {
357- let $acc597209790 = filterAdminsVoteByUnblockAction($acc497209790, $list97209790[4])
358- if (($size97209790 == 5))
359- then $acc597209790
357+ let $acc5996410034 = filterAdminsVoteByUnblockAction($acc4996410034, $list996410034[4])
358+ if (($size996410034 == 5))
359+ then $acc5996410034
360360 else {
361- let $acc697209790 = filterAdminsVoteByUnblockAction($acc597209790, $list97209790[5])
361+ let $acc6996410034 = filterAdminsVoteByUnblockAction($acc5996410034, $list996410034[5])
362362 throw("List size exceed 5")
363363 }
364364 }
365365 }
366366 }
367367 }
368368 }
369369 }
370370 let updateVotes = {
371- let $list98139882 = adminsListWithoutAccount
372- let $size98139882 = size($list98139882)
373- let $acc098139882 = nil
374- if (($size98139882 == 0))
375- then $acc098139882
371+ let $list1005710126 = adminsListWithoutAccount
372+ let $size1005710126 = size($list1005710126)
373+ let $acc01005710126 = nil
374+ if (($size1005710126 == 0))
375+ then $acc01005710126
376376 else {
377- let $acc198139882 = filterAdminsVoteByUpdateAction($acc098139882, $list98139882[0])
378- if (($size98139882 == 1))
379- then $acc198139882
377+ let $acc11005710126 = filterAdminsVoteByUpdateAction($acc01005710126, $list1005710126[0])
378+ if (($size1005710126 == 1))
379+ then $acc11005710126
380380 else {
381- let $acc298139882 = filterAdminsVoteByUpdateAction($acc198139882, $list98139882[1])
382- if (($size98139882 == 2))
383- then $acc298139882
381+ let $acc21005710126 = filterAdminsVoteByUpdateAction($acc11005710126, $list1005710126[1])
382+ if (($size1005710126 == 2))
383+ then $acc21005710126
384384 else {
385- let $acc398139882 = filterAdminsVoteByUpdateAction($acc298139882, $list98139882[2])
386- if (($size98139882 == 3))
387- then $acc398139882
385+ let $acc31005710126 = filterAdminsVoteByUpdateAction($acc21005710126, $list1005710126[2])
386+ if (($size1005710126 == 3))
387+ then $acc31005710126
388388 else {
389- let $acc498139882 = filterAdminsVoteByUpdateAction($acc398139882, $list98139882[3])
390- if (($size98139882 == 4))
391- then $acc498139882
389+ let $acc41005710126 = filterAdminsVoteByUpdateAction($acc31005710126, $list1005710126[3])
390+ if (($size1005710126 == 4))
391+ then $acc41005710126
392392 else {
393- let $acc598139882 = filterAdminsVoteByUpdateAction($acc498139882, $list98139882[4])
394- if (($size98139882 == 5))
395- then $acc598139882
393+ let $acc51005710126 = filterAdminsVoteByUpdateAction($acc41005710126, $list1005710126[4])
394+ if (($size1005710126 == 5))
395+ then $acc51005710126
396396 else {
397- let $acc698139882 = filterAdminsVoteByUpdateAction($acc598139882, $list98139882[5])
397+ let $acc61005710126 = filterAdminsVoteByUpdateAction($acc51005710126, $list1005710126[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))
415+ let resetResult = [DataEntry(BlockExpireVoteKey, 0), DataEntry(BlockExpireProvidingKey, 0), DataEntry(getAdminVoteActionKey(adminsListWithoutAccount[0]), ""), DataEntry(getAdminVoteActionKey(adminsListWithoutAccount[1]), ""), DataEntry(getAdminVoteActionKey(adminsListWithoutAccount[2]), ""), DataEntry(getAdminVoteActionKey(adminsListWithoutAccount[3]), "")]
415416 if (if ((blockVoteCount >= bftCoefficientAdmin))
416417 then true
417418 else (unblockVoteCount >= bftCoefficientAdmin))
418- then WriteSet([DataEntry(IsBlockedKey, if ((blockVoteCount >= bftCoefficientAdmin))
419+ then WriteSet([DataEntry(IsPricePendingKey, false), DataEntry(IsBlockedKey, if ((blockVoteCount >= bftCoefficientAdmin))
419420 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 false)] :: resetResult)
421422 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)])
423+ then WriteSet(DataEntry(ScriptUpdateBlockKey, if ((updateVotesCount > bftCoefficientAdmin))
424+ then (height + scriptUpdateInterval)
425+ else scriptUpdateBlock) :: resetResult)
426+ else WriteSet([DataEntry(BlockExpireVoteKey, if ((height > blockExpireVote))
427+ then (height + voteInterval)
428+ else blockExpireVote), DataEntry(getAdminVoteActionKey(account), action)])
426429 }
427430
428431

github/deemru/w8io/873ac7e 
87.50 ms