tx · 3ZoqCBeUZYJX48kJkpYzt5xueNmu5scqigvAY8dxMsoM 3PJPW1rknfSxCKjUwRp1Upg7Yxhe7VerDqg: -0.01700000 Waves 2024.01.05 11:31 [3983758] smart account 3PJPW1rknfSxCKjUwRp1Upg7Yxhe7VerDqg > SELF 0.00000000 Waves
{ "type": 13, "id": "3ZoqCBeUZYJX48kJkpYzt5xueNmu5scqigvAY8dxMsoM", "fee": 1700000, "feeAssetId": null, "timestamp": 1704443571804, "version": 1, "sender": "3PJPW1rknfSxCKjUwRp1Upg7Yxhe7VerDqg", "senderPublicKey": "7nSWVBfVWDAFZYVVRuNHc1a8vZT9nLbDwm4qn4MaX473", "proofs": [ "3JajFEdh6xNv7DsrsggjJEAeFN3AUGksGgffxroFMuK5UUsH3bsFB9QojFfGQoa9nKckQvYZFLfyPr5fTxyXAnrE" ], "script": "base64:AAIFAAAAAAAAACgIAhIFCgMICAISBAoCCAISAwoBCBIDCgEIEgMKAQgSAwoBCBIDCgEIAAAAMQEAAAAHdGhyb3dJZgAAAAIAAAAJY29uZGl0aW9uAAAABWVycm9yAwUAAAAJY29uZGl0aW9uCQAAAgAAAAEFAAAABWVycm9yBgEAAAALd3JpdGVCaW5hcnkAAAACAAAAA2tleQAAAAV2YWx1ZQkBAAAAC0JpbmFyeUVudHJ5AAAAAgUAAAADa2V5BQAAAAV2YWx1ZQEAAAAId3JpdGVJbnQAAAACAAAAA2tleQAAAAV2YWx1ZQMJAABmAAAAAgAAAAAAAAAAAAUAAAAFdmFsdWUJAAACAAAAAQkAASwAAAACCQABLAAAAAIJAAEsAAAAAgIAAAAXd3JpdGluZyBuZWdhdGl2ZSB2YWx1ZSAJAAGkAAAAAQUAAAAFdmFsdWUCAAAACSBmb3Iga2V5IAUAAAADa2V5CQEAAAAMSW50ZWdlckVudHJ5AAAAAgUAAAADa2V5BQAAAAV2YWx1ZQEAAAAQd3JpdGVDb25zdFN0cmluZwAAAAIAAAADa2V5AAAABXZhbHVlAwkBAAAAASEAAAABCQEAAAAJaXNEZWZpbmVkAAAAAQkABB0AAAACBQAAAAR0aGlzBQAAAANrZXkJAQAAAAtTdHJpbmdFbnRyeQAAAAIFAAAAA2tleQUAAAAFdmFsdWUJAAACAAAAAQkAASwAAAACAgAAABVhbHJlYWR5IGluaXRpYWxpemVkOiAFAAAAA2tleQEAAAANd3JpdGVDb25zdEludAAAAAIAAAADa2V5AAAABXZhbHVlAwkBAAAAASEAAAABCQEAAAAJaXNEZWZpbmVkAAAAAQkABBoAAAACBQAAAAR0aGlzBQAAAANrZXkJAQAAAAxJbnRlZ2VyRW50cnkAAAACBQAAAANrZXkFAAAABXZhbHVlCQAAAgAAAAEJAAEsAAAAAgIAAAAQYWxyZWFkeSBleGlzdHM6IAUAAAADa2V5AQAAAAhjaGFuZ2VCeQAAAAIAAAADa2V5AAAABXZhbHVlCQEAAAAId3JpdGVJbnQAAAACBQAAAANrZXkJAABkAAAAAgkBAAAAC3ZhbHVlT3JFbHNlAAAAAgkABBoAAAACBQAAAAR0aGlzBQAAAANrZXkAAAAAAAAAAAAFAAAABXZhbHVlAQAAAAVhc0ludAAAAAEAAAAFdmFsdWUEAAAAByRtYXRjaDAFAAAABXZhbHVlAwkAAAEAAAACBQAAAAckbWF0Y2gwAgAAAANJbnQEAAAAA2ludAUAAAAHJG1hdGNoMAUAAAADaW50CQAAAgAAAAECAAAAGXdyb25nIHR5cGUsIGV4cGVjdGVkOiBJbnQAAAAAEmNvbmZpZ0FkZHJlc3NTdG9yZQIAAAAGY29uZmlnAAAAAA1jb25maWdBZGRyZXNzCQEAAAATdmFsdWVPckVycm9yTWVzc2FnZQAAAAIJAAQmAAAAAQkBAAAAE3ZhbHVlT3JFcnJvck1lc3NhZ2UAAAACCQAEHQAAAAIFAAAABHRoaXMFAAAAEmNvbmZpZ0FkZHJlc3NTdG9yZQIAAAAaY2hpbGRyZW4udm90aW5nOiBubyBjb25maWcCAAAAFmludmFsaWQgY29uZmlnIGFkZHJlc3MAAAAABkhFSUdIVAUAAAAGaGVpZ2h0AQAAAAZhZHZpc2UAAAAACQABLAAAAAICAAAACGhlaWdodDogCQABpAAAAAEFAAAABkhFSUdIVAAAAAAEQkFTRQAAAAAAAAAD6AEAAAAJb3BBbGxvd2VkAAAAAQAAAAJvcAQAAAABYQkAA/wAAAAEBQAAAA1jb25maWdBZGRyZXNzAgAAAAlvcEFsbG93ZWQJAARMAAAAAgUAAAACb3AFAAAAA25pbAUAAAADbmlsAwkAAAAAAAACBQAAAAFhBQAAAAFhBgkAAAIAAAABAgAAACRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4AAAAAEGNoaWxkcmVuQ29udHJhY3QJAQAAABN2YWx1ZU9yRXJyb3JNZXNzYWdlAAAAAgkABCYAAAABCQEAAAATdmFsdWVPckVycm9yTWVzc2FnZQAAAAIJAAQdAAAAAgUAAAANY29uZmlnQWRkcmVzcwIAAAARY29udHJhY3RfY2hpbGRyZW4CAAAAFG5vIGNvbnRyYWN0X2NoaWxkcmVuAgAAABlpbnZhbGlkIGNvbnRyYWN0X2NoaWxkcmVuAAAAABR2b3RpbmdSZXN1bHRDb250cmFjdAkBAAAAE3ZhbHVlT3JFcnJvck1lc3NhZ2UAAAACCQAEJgAAAAEJAQAAABN2YWx1ZU9yRXJyb3JNZXNzYWdlAAAAAgkABB0AAAACBQAAAA1jb25maWdBZGRyZXNzAgAAABZjb250cmFjdF92b3RpbmdfcmVzdWx0AgAAABlubyBjb250cmFjdF92b3RpbmdfcmVzdWx0AgAAAB5pbnZhbGlkIGNvbnRyYWN0X3ZvdGluZ19yZXN1bHQBAAAAEnByb3Bvc2FsQ2hpbGRTdG9yZQAAAAEAAAACaWQJAAEsAAAAAgIAAAAPcHJvcG9zYWxfY2hpbGRfBQAAAAJpZAEAAAAUcHJvcG9zYWxBZGRyZXNzU3RvcmUAAAABAAAAAmlkCQABLAAAAAICAAAAEXByb3Bvc2FsX2FkZHJlc3NfBQAAAAJpZAEAAAATcHJvcG9zYWxIZWlnaHRTdG9yZQAAAAEAAAACaWQJAAEsAAAAAgIAAAAQcHJvcG9zYWxfaGVpZ2h0XwUAAAACaWQBAAAAGHByb3Bvc2FsVm90aW5nU3RhcnRTdG9yZQAAAAEAAAACaWQJAAEsAAAAAgIAAAAVcHJvcG9zYWxfdm90aW5nc3RhcnRfBQAAAAJpZAEAAAAWcHJvcG9zYWxWb3RpbmdFbmRTdG9yZQAAAAEAAAACaWQJAAEsAAAAAgIAAAATcHJvcG9zYWxfdm90aW5nZW5kXwUAAAACaWQBAAAAD3Byb3Bvc2FsQnlTdG9yZQAAAAEAAAACaWQJAAEsAAAAAgIAAAAMcHJvcG9zYWxfYnlfBQAAAAJpZAEAAAAYcHJvcG9zYWxBdHRhY2htZW50c1N0b3JlAAAAAQAAAAJpZAkAASwAAAACAgAAABVwcm9wb3NhbF9hdHRhY2htZW50c18FAAAAAmlkAQAAABVwcm9wb3NhbFRvdGFsWWVzU3RvcmUAAAABAAAAAmlkCQABLAAAAAICAAAADXByb3Bvc2FsX3llc18FAAAAAmlkAQAAABRwcm9wb3NhbFRvdGFsTm9TdG9yZQAAAAEAAAACaWQJAAEsAAAAAgIAAAAMcHJvcG9zYWxfbm9fBQAAAAJpZAEAAAAUcHJvcG9zYWxVc2VyWWVzU3RvcmUAAAACAAAABHVzZXIAAAACaWQJAAEsAAAAAgkAASwAAAACCQABLAAAAAICAAAAEnVzZXJfcHJvcG9zYWxfeWVzXwUAAAAEdXNlcgIAAAABXwUAAAACaWQBAAAAE3Byb3Bvc2FsVXNlck5vU3RvcmUAAAACAAAABHVzZXIAAAACaWQJAAEsAAAAAgkAASwAAAACCQABLAAAAAICAAAAEXVzZXJfcHJvcG9zYWxfbm9fBQAAAAR1c2VyAgAAAAFfBQAAAAJpZAEAAAAadXNlckxhc3RQcm9wb3NlSGVpZ2h0U3RvcmUAAAABAAAABHVzZXIJAAEsAAAAAgIAAAATcHJvcG9zZV9sYXN0aGVpZ2h0XwUAAAAEdXNlcgEAAAAHdXNlclllcwAAAAIAAAAEdXNlcgAAAAJpZAkBAAAAC3ZhbHVlT3JFbHNlAAAAAgkABBoAAAACBQAAAAR0aGlzCQEAAAAUcHJvcG9zYWxVc2VyWWVzU3RvcmUAAAACBQAAAAR1c2VyBQAAAAJpZAAAAAAAAAAAAAEAAAAGdXNlck5vAAAAAgAAAAR1c2VyAAAAAmlkCQEAAAALdmFsdWVPckVsc2UAAAACCQAEGgAAAAIFAAAABHRoaXMJAQAAABNwcm9wb3NhbFVzZXJOb1N0b3JlAAAAAgUAAAAEdXNlcgUAAAACaWQAAAAAAAAAAAABAAAAFXVzZXJMYXN0UHJvcG9zZUhlaWdodAAAAAEAAAAEdXNlcgkBAAAAC3ZhbHVlT3JFbHNlAAAAAgkABBoAAAACBQAAAAR0aGlzCQEAAAAadXNlckxhc3RQcm9wb3NlSGVpZ2h0U3RvcmUAAAABBQAAAAR1c2VyAP//////////AAAAAAt0aGlzQWRkcmVzcwkABCUAAAABBQAAAAR0aGlzAQAAAAhzZXR0aW5ncwAAAAIAAAADa2V5AAAABWNoaWxkCQEAAAALdmFsdWVPckVsc2UAAAACCQAEHwAAAAEJAAEsAAAAAgkAASwAAAACBQAAAANrZXkCAAAAAV8FAAAABWNoaWxkCQEAAAATdmFsdWVPckVycm9yTWVzc2FnZQAAAAIJAAQaAAAAAgUAAAANY29uZmlnQWRkcmVzcwkAASwAAAACCQABLAAAAAIFAAAAC3RoaXNBZGRyZXNzAgAAAAFfBQAAAANrZXkJAAEsAAAAAgUAAAADa2V5AgAAAA8gaXMgbm90IGRlZmluZWQBAAAAEHVzZXJQcm9wb3NlRGVsYXkAAAABAAAABWNoaWxkCQEAAAAIc2V0dGluZ3MAAAACAgAAABJ1c2VyX3Byb3Bvc2VfZGVsYXkFAAAABWNoaWxkAQAAAAtxdW9ydW1SYXRpbwAAAAEAAAAFY2hpbGQJAQAAAAhzZXR0aW5ncwAAAAICAAAAFXByb3Bvc2FsX3F1b3J1bV9yYXRpbwUAAAAFY2hpbGQBAAAAC3Bhc3NlZFJhdGlvAAAAAQAAAAVjaGlsZAkBAAAACHNldHRpbmdzAAAAAgIAAAAVcHJvcG9zYWxfcGFzc2VkX3JhdGlvBQAAAAVjaGlsZAEAAAATcHJvcG9zYWxNaW5SZXF1aXJlZAAAAAEAAAAFY2hpbGQJAQAAAAhzZXR0aW5ncwAAAAICAAAAG3Byb3Bvc2FsX21pbl9wb3dlcl9yZXF1aXJlZAUAAAAFY2hpbGQBAAAAEXZvdGluZ1N0YXJ0T2Zmc2V0AAAAAQAAAAVjaGlsZAkBAAAACHNldHRpbmdzAAAAAgIAAAAbcHJvcG9zYWxfdm90aW5nc3RhcnRfb2Zmc2V0BQAAAAVjaGlsZAEAAAAPdm90aW5nRW5kT2Zmc2V0AAAAAQAAAAVjaGlsZAkBAAAACHNldHRpbmdzAAAAAgIAAAAZcHJvcG9zYWxfdm90aW5nZW5kX29mZnNldAUAAAAFY2hpbGQBAAAAE3Byb3Bvc2FsUXVvcnVtU3RvcmUAAAABAAAABHR4aWQJAAEsAAAAAgIAAAAWcHJvcG9zYWxfcXVvcnVtX3JhdGlvXwUAAAAEdHhpZAEAAAAGcXVvcnVtAAAAAgAAAAVjaGlsZAAAAAR0eElkCQEAAAALdmFsdWVPckVsc2UAAAACCQAEHwAAAAEJAQAAABNwcm9wb3NhbFF1b3J1bVN0b3JlAAAAAQUAAAAEdHhJZAkBAAAAC3F1b3J1bVJhdGlvAAAAAQUAAAAFY2hpbGQBAAAACXVzZXJQb3dlcgAAAAIAAAAFY2hpbGQAAAAEdXNlcgkBAAAABWFzSW50AAAAAQkAA/wAAAAEBQAAABBjaGlsZHJlbkNvbnRyYWN0AgAAAAl1c2VyUG93ZXIJAARMAAAAAgUAAAAFY2hpbGQJAARMAAAAAgUAAAAEdXNlcgUAAAADbmlsBQAAAANuaWwBAAAADWlzUGFydGljaXBhbnQAAAABAAAABXBvd2VyAwkAAAAAAAACBQAAAAVwb3dlcgAAAAAAAAAAAAkAAAIAAAABAgAAACV5b3UgYXJlIG5vdCBhIHBhcnRpY2lwYW50IG9mIHRoaXMgZGFvBQAAAANuaWwBAAAADnByb3Bvc2FsRXhpc3RzAAAAAQAAAAR0eElkBAAAAAckbWF0Y2gwCQAEGgAAAAIFAAAABHRoaXMJAQAAABNwcm9wb3NhbEhlaWdodFN0b3JlAAAAAQUAAAAEdHhJZAMJAAABAAAAAgUAAAAHJG1hdGNoMAIAAAADSW50BAAAAAVzdGFydAUAAAAHJG1hdGNoMAYHAQAAABBwcm9wb3NhbE9uVm90aW5nAAAAAQAAAAR0eElkBAAAAAtub25FeGlzdEVycgIAAAAWcHJvcG9zYWwgZG9lc24ndCBleGlzdAMJAQAAAAEhAAAAAQkBAAAADnByb3Bvc2FsRXhpc3RzAAAAAQUAAAAEdHhJZAkAAAIAAAABBQAAAAtub25FeGlzdEVycgQAAAALdm90aW5nU3RhcnQJAQAAABN2YWx1ZU9yRXJyb3JNZXNzYWdlAAAAAgkABBoAAAACBQAAAAR0aGlzCQEAAAAYcHJvcG9zYWxWb3RpbmdTdGFydFN0b3JlAAAAAQUAAAAEdHhJZAUAAAALbm9uRXhpc3RFcnIEAAAACXZvdGluZ0VuZAkBAAAAE3ZhbHVlT3JFcnJvck1lc3NhZ2UAAAACCQAEGgAAAAIFAAAABHRoaXMJAQAAABZwcm9wb3NhbFZvdGluZ0VuZFN0b3JlAAAAAQUAAAAEdHhJZAUAAAALbm9uRXhpc3RFcnIDCQAAZgAAAAIFAAAAC3ZvdGluZ1N0YXJ0BQAAAAZIRUlHSFQJAAACAAAAAQkAASwAAAACCQABLAAAAAIJAAEsAAAAAgIAAABOdm90aW5nIG5vdCBzdGFydGVkIHlldCwgZGlzY3Vzc2lvbiBpcyBpbiBwcm9ncmVzcywgdm90aW5nIHdpbGwgc3RhcnQgYXQgYmxvY2sgCQABpAAAAAEFAAAAC3ZvdGluZ1N0YXJ0AgAAAAssIG5vdyBpdCdzIAkAAaQAAAABBQAAAAZIRUlHSFQDCQAAZgAAAAIFAAAABkhFSUdIVAUAAAAJdm90aW5nRW5kCQAAAgAAAAEJAAEsAAAAAgkAASwAAAACCQABLAAAAAICAAAAFnZvdGluZyBlbmRlZCBhdCBibG9jayAJAAGkAAAAAQUAAAAJdm90aW5nRW5kAgAAAAssIG5vdyBpdCdzIAkAAaQAAAABBQAAAAZIRUlHSFQGAQAAABRwcm9wb3NhbEJlZm9yZVZvdGluZwAAAAEAAAAEdHhJZAQAAAALbm9uRXhpc3RFcnICAAAAFnByb3Bvc2FsIGRvZXNuJ3QgZXhpc3QDCQEAAAABIQAAAAEJAQAAAA5wcm9wb3NhbEV4aXN0cwAAAAEFAAAABHR4SWQJAAACAAAAAQUAAAALbm9uRXhpc3RFcnIEAAAAC3ZvdGluZ1N0YXJ0CQEAAAATdmFsdWVPckVycm9yTWVzc2FnZQAAAAIJAAQaAAAAAgUAAAAEdGhpcwkBAAAAGHByb3Bvc2FsVm90aW5nU3RhcnRTdG9yZQAAAAEFAAAABHR4SWQFAAAAC25vbkV4aXN0RXJyAwkAAGcAAAACBQAAAAZIRUlHSFQFAAAAC3ZvdGluZ1N0YXJ0CQAAAgAAAAECAAAAIHZvdGluZyBzdGFydCBpcyBhbHJlYWR5IGhhcHBlbmVkBgEAAAAQdG90YWxQb3dlclN0YWtlZAAAAAEAAAAFY2hpbGQJAQAAAAVhc0ludAAAAAEJAAP8AAAABAUAAAAQY2hpbGRyZW5Db250cmFjdAIAAAAKdG90YWxQb3dlcgkABEwAAAACBQAAAAVjaGlsZAUAAAADbmlsBQAAAANuaWwBAAAADGNhbkJyb2FkY2FzdAAAAAQAAAAFY2hpbGQAAAAEdHhJZAAAAAZ5ZXNJbmMAAAAFbm9JbmMEAAAACHZvdGVzWWVzCQAAZAAAAAIJAQAAAAt2YWx1ZU9yRWxzZQAAAAIJAAQfAAAAAQkBAAAAFXByb3Bvc2FsVG90YWxZZXNTdG9yZQAAAAEFAAAABHR4SWQAAAAAAAAAAAAFAAAABnllc0luYwQAAAAHdm90ZXNObwkAAGQAAAACCQEAAAALdmFsdWVPckVsc2UAAAACCQAEHwAAAAEJAQAAABRwcm9wb3NhbFRvdGFsTm9TdG9yZQAAAAEFAAAABHR4SWQAAAAAAAAAAAAFAAAABW5vSW5jBAAAAA5wcm9wb3NhbEhlaWdodAkBAAAAE3ZhbHVlT3JFcnJvck1lc3NhZ2UAAAACCQAEHwAAAAEJAQAAABNwcm9wb3NhbEhlaWdodFN0b3JlAAAAAQUAAAAEdHhJZAIAAAAXcHJvcG9zYWwgbm90IHJlZ2lzdGVyZWQEAAAACnRvdGFsUG93ZXIJAQAAABB0b3RhbFBvd2VyU3Rha2VkAAAAAQUAAAAFY2hpbGQDCQAAAAAAAAIFAAAACnRvdGFsUG93ZXIFAAAACnRvdGFsUG93ZXIEAAAABnBhc3NlZAkBAAAAC3Bhc3NlZFJhdGlvAAAAAQUAAAAFY2hpbGQEAAAACnRvdGFsVm90ZXMJAABkAAAAAgUAAAAIdm90ZXNZZXMFAAAAB3ZvdGVzTm8EAAAACWhhc1F1b3J1bQkAAGcAAAACCQAAaQAAAAIJAABoAAAAAgUAAAAKdG90YWxWb3RlcwUAAAAEQkFTRQUAAAAKdG90YWxQb3dlcgkBAAAABnF1b3J1bQAAAAIFAAAABWNoaWxkBQAAAAR0eElkBAAAAAloYXNQYXNzZWQJAABnAAAAAgkAAGkAAAACCQAAaAAAAAIFAAAACHZvdGVzWWVzBQAAAARCQVNFBQAAAAp0b3RhbFZvdGVzBQAAAAZwYXNzZWQDBQAAAAloYXNRdW9ydW0FAAAACWhhc1Bhc3NlZAcJAAACAAAAAQIAAAAkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuAQAAAA5hZHZpc2VQcm9wb3NhbAAAAAEAAAAEdHhJZAQAAAAFY2hpbGQJAQAAABN2YWx1ZU9yRXJyb3JNZXNzYWdlAAAAAgkABCIAAAABCQEAAAAScHJvcG9zYWxDaGlsZFN0b3JlAAAAAQUAAAAEdHhJZAIAAAAPY2hpbGQgbm90IGZvdW5kBAAAAA5wcm9wb3NhbEhlaWdodAkBAAAAE3ZhbHVlT3JFcnJvck1lc3NhZ2UAAAACCQAEGgAAAAIFAAAABHRoaXMJAQAAABNwcm9wb3NhbEhlaWdodFN0b3JlAAAAAQUAAAAEdHhJZAIAAAALbm8gcHJvcG9zYWwEAAAAC3ZvdGluZ1N0YXJ0CQEAAAATdmFsdWVPckVycm9yTWVzc2FnZQAAAAIJAAQaAAAAAgUAAAAEdGhpcwkBAAAAGHByb3Bvc2FsVm90aW5nU3RhcnRTdG9yZQAAAAEFAAAABHR4SWQCAAAAC25vIHByb3Bvc2FsBAAAAAl2b3RpbmdFbmQJAQAAABN2YWx1ZU9yRXJyb3JNZXNzYWdlAAAAAgkABBoAAAACBQAAAAR0aGlzCQEAAAAWcHJvcG9zYWxW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AAEFAAAACXZvdGluZ0VuZAIAAAASLCBwcm9wb3NhbF9wb3dlcjogCQABpAAAAAEFAAAADnRvdGFsUG93ZXJTbmFwAgAAAAwsIHZvdGVfeWVzOiAJAAGkAAAAAQUAAAAIdm90ZXNZZXMCAAAACywgdm90ZV9ubzogCQABpAAAAAEFAAAAB3ZvdGVzTm8CAAAAHCwgcHJvcG9zYWxfYWxsb3dfYnJvYWRjYXN0OiAJAAGlAAAAAQMJAQAAAAIhPQAAAAIFAAAAD2Jyb2FkY2FzdEhlaWdodAD//////////wkAAGcAAAACBQAAAAZIRUlHSFQFAAAAD2Jyb2FkY2FzdEhlaWdodAcCAAAAIywgcHJvcG9zYWxfYWxsb3dfYnJvYWRjYXN0X2hlaWdodDogCQABpAAAAAEFAAAAD2Jyb2FkY2FzdEhlaWdodAIAAAAaLCBwcm9wb3NhbF92b3Rpbmdfc3VjY2VlZDoJAAGlAAAAAQkBAAAAAiE9AAAAAgUAAAAPYnJvYWRjYXN0SGVpZ2h0AP//////////AgAAABIsIHByb3Bvc2FsX3F1b3J1bToJAAGkAAAAAQUAAAABcQIAAAAULCBwcm9wb3NhbF9hZGRyZXNzOiAJAQAAAAt2YWx1ZU9yRWxzZQAAAAIJAQAAABRwcm9wb3NhbEFkZHJlc3NTdG9yZQAAAAEFAAAABHR4SWQFAAAABWNoaWxkCQAAAgAAAAECAAAAJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgEAAAAPYnJvYWRjYXN0SGVpZ2h0AAAAAQAAAAR0eElkCQAAZAAAAAIJAQAAABFAZXh0ck5hdGl2ZSgxMDU1KQAAAAEJAQAAABZwcm9wb3NhbFZvdGluZ0VuZFN0b3JlAAAAAQUAAAAEdHhJZAAAAAAAAAAAAQAAAAcAAAABaQEAAAAHcHJvcG9zZQAAAAMAAAAFY2hpbGQAAAAEdHhJZAAAAAthdHRhY2htZW50cwQAAAAGY2hlY2tzCQEAAAAJb3BBbGxvd2VkAAAAAQIAAAAbY2hpbGRfZ292ZXJuYW5jZV9wcm9wb3NlX3R4AwkAAAAAAAACBQAAAAZjaGVja3MFAAAABmNoZWNrcwQAAAAIcmVxdWlyZWQJAQAAABNwcm9wb3NhbE1pblJlcXVpcmVkAAAAAQUAAAAFY2hpbGQEAAAABHVzZXIJAAQlAAAAAQgFAAAAAWkAAAAGY2FsbGVyBAAAAAJndgkBAAAACXVzZXJQb3dlcgAAAAIFAAAABWNoaWxkBQAAAAR1c2VyAwkAAAAAAAACBQAAAAJndgUAAAACZ3YDCQAAZgAAAAIFAAAACHJlcXVpcmVkBQAAAAJndgkAAAIAAAABCQABLAAAAAIJAAEsAAAAAgkAASwAAAACCQABLAAAAAICAAAAKW5vdCBlbm91Z2ggc3Rha2VkIHBvd2VyIHRvIG1ha2UgcHJvcG9zYWwuAgAAABQgTWluaW11bSByZXF1aXJlZCA9IAkAAaQAAAABBQAAAAhyZXF1aXJlZAIAAAAMLCBhY3R1YWw6ID0gCQABpAAAAAEFAAAAAmd2BAAAAAVkZWxheQkBAAAAEHVzZXJQcm9wb3NlRGVsYXkAAAABBQAAAAVjaGlsZAQAAAAEbGFzdAkBAAAAFXVzZXJMYXN0UHJvcG9zZUhlaWdodAAAAAEFAAAABHVzZXIDAwkAAGYAAAACBQAAAARsYXN0AP//////////CQAAZgAAAAIJAABkAAAAAgUAAAAEbGFzdAUAAAAFZGVsYXkFAAAABkhFSUdIVAcJAAACAAAAAQkAASwAAAACCQABLAAAAAIJAAEsAAAAAgIAAAAxY2FuJ3QgcHJvcG9zZSB0b28gb2Z0ZW4sIGxhc3QgcHJvcm9wb3NhbCBoZWlnaHQ6IAkAAaQAAAABBQAAAARsYXN0AgAAABIsIGJsb2NrcyB0byB3YWl0OiAJAAGkAAAAAQkAAGUAAAACCQAAZAAAAAIFAAAABGxhc3QFAAAABWRlbGF5BQAAAAZIRUlHSFQEAAAAB2FkZHJlc3MJAQAAAAt2YWx1ZU9yRWxzZQAAAAIJAAQdAAAAAgUAAAAQY2hpbGRyZW5Db250cmFjdAkAASwAAAACAgAAAAl0cmVhc3VyeV8FAAAABWNoaWxkBQAAAAVjaGlsZAkABEwAAAACCQEAAAAQd3JpdGVDb25zdFN0cmluZwAAAAIJAQAAABJwcm9wb3NhbENoaWxkU3RvcmUAAAABBQAAAAR0eElkBQAAAAVjaGlsZAkABEwAAAACCQEAAAANd3JpdGVDb25zdEludAAAAAIJAQAAABNwcm9wb3NhbEhlaWdodFN0b3JlAAAAAQUAAAAEdHhJZAUAAAAGSEVJR0hUCQAETAAAAAIJAQAAAA13cml0ZUNvbnN0SW50AAAAAgkBAAAAGHByb3Bvc2FsVm90aW5nU3RhcnRTdG9yZQAAAAEFAAAABHR4SWQJAABkAAAAAgUAAAAGSEVJR0hUCQEAAAARdm90aW5nU3RhcnRPZmZzZXQAAAABBQAAAAVjaGlsZAkABEwAAAACCQEAAAANd3JpdGVDb25zdEludAAAAAIJAQAAABZwcm9wb3NhbFZvdGluZ0VuZFN0b3JlAAAAAQUAAAAEdHhJZAkAAGQAAAACBQAAAAZIRUlHSFQJAQAAAA92b3RpbmdFbmRPZmZzZXQAAAABBQAAAAVjaGlsZAkABEwAAAACCQEAAAAQd3JpdGVDb25zdFN0cmluZwAAAAIJAQAAAA9wcm9wb3NhbEJ5U3RvcmUAAAABBQAAAAR0eElkBQAAAAR1c2VyCQAETAAAAAIJAQAAAAh3cml0ZUludAAAAAIJAQAAABp1c2VyTGFzdFByb3Bvc2VIZWlnaHRTdG9yZQAAAAEFAAAABHVzZXIFAAAABkhFSUdIVAkABEwAAAACCQEAAAALd3JpdGVCaW5hcnkAAAACCQEAAAAYcHJvcG9zYWxBdHRhY2htZW50c1N0b3JlAAAAAQUAAAAEdHhJZAUAAAALYXR0YWNobWVudHMJAARMAAAAAgkBAAAAEHdyaXRlQ29uc3RTdHJpbmcAAAACCQEAAAAUcHJvcG9zYWxBZGRyZXNzU3RvcmUAAAABBQAAAAR0eElkBQAAAAdhZGRyZXNzBQAAAANuaWwJAAACAAAAAQIAAAAkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuCQAAAgAAAAECAAAAJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgAAAAFpAQAAAA9lZGl0QXR0YWNobWVudHMAAAACAAAABHR4SWQAAAALYXR0YWNobWVudHMEAAAABmNoZWNrcwkBAAAACW9wQWxsb3dlZAAAAAECAAAAIWNoaWxkX2dvdmVybmFuY2VfZWRpdF9hdHRhY2htZW50cwMJAAAAAAAAAgUAAAAGY2hlY2tzBQAAAAZjaGVja3MEAAAABHVzZXIJAAQlAAAAAQgFAAAAAWkAAAAGY2FsbGVy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", "chainId": 87, "height": 3983758, "applicationStatus": "succeeded", "spentComplexity": 0 } View: original | compacted Prev: D5SqyUfh67paTJzXjsQzmuFCrBaEQ78CbE986QZ2RL87 Next: 9ijVP3qSFNkqxFA5trRYvoZJCjNkZk4ArckaW2Trit9t Diff:
Old | New | Differences | |
---|---|---|---|
64 | 64 | func x (y) = ("proposal_child_" + y) | |
65 | 65 | ||
66 | 66 | ||
67 | - | func z (y) = ("proposal_ | |
67 | + | func z (y) = ("proposal_address_" + y) | |
68 | 68 | ||
69 | 69 | ||
70 | - | func A (y) = ("proposal_ | |
70 | + | func A (y) = ("proposal_height_" + y) | |
71 | 71 | ||
72 | 72 | ||
73 | - | func B (y) = ("proposal_ | |
73 | + | func B (y) = ("proposal_votingstart_" + y) | |
74 | 74 | ||
75 | 75 | ||
76 | - | func C (y) = ("proposal_ | |
76 | + | func C (y) = ("proposal_votingend_" + y) | |
77 | 77 | ||
78 | 78 | ||
79 | - | func D (y) = ("proposal_ | |
79 | + | func D (y) = ("proposal_by_" + y) | |
80 | 80 | ||
81 | 81 | ||
82 | - | func E (y) = ("proposal_ | |
82 | + | func E (y) = ("proposal_attachments_" + y) | |
83 | 83 | ||
84 | 84 | ||
85 | - | func F (y) = ("proposal_ | |
85 | + | func F (y) = ("proposal_yes_" + y) | |
86 | 86 | ||
87 | 87 | ||
88 | - | func G ( | |
88 | + | func G (y) = ("proposal_no_" + y) | |
89 | 89 | ||
90 | 90 | ||
91 | - | func | |
91 | + | func H (I,y) = ((("user_proposal_yes_" + I) + "_") + y) | |
92 | 92 | ||
93 | 93 | ||
94 | - | func J ( | |
94 | + | func J (I,y) = ((("user_proposal_no_" + I) + "_") + y) | |
95 | 95 | ||
96 | 96 | ||
97 | - | func K ( | |
97 | + | func K (I) = ("propose_lastheight_" + I) | |
98 | 98 | ||
99 | 99 | ||
100 | - | func L ( | |
100 | + | func L (I,y) = valueOrElse(getInteger(this, H(I, y)), 0) | |
101 | 101 | ||
102 | 102 | ||
103 | - | func M ( | |
103 | + | func M (I,y) = valueOrElse(getInteger(this, J(I, y)), 0) | |
104 | 104 | ||
105 | 105 | ||
106 | - | let N = toString(this) | |
107 | - | ||
108 | - | func O (e,P) = valueOrElse(getInteger(((e + "_") + P)), valueOrErrorMessage(getInteger(o, ((N + "_") + e)), (e + " is not defined"))) | |
106 | + | func N (I) = valueOrElse(getInteger(this, K(I)), -1) | |
109 | 107 | ||
110 | 108 | ||
111 | - | func Q (P) = O("user_propose_delay", P) | |
109 | + | let O = toString(this) | |
110 | + | ||
111 | + | func P (e,Q) = valueOrElse(getInteger(((e + "_") + Q)), valueOrErrorMessage(getInteger(o, ((O + "_") + e)), (e + " is not defined"))) | |
112 | 112 | ||
113 | 113 | ||
114 | - | func R ( | |
114 | + | func R (Q) = P("user_propose_delay", Q) | |
115 | 115 | ||
116 | 116 | ||
117 | - | func S ( | |
117 | + | func S (Q) = P("proposal_quorum_ratio", Q) | |
118 | 118 | ||
119 | 119 | ||
120 | - | func T ( | |
120 | + | func T (Q) = P("proposal_passed_ratio", Q) | |
121 | 121 | ||
122 | 122 | ||
123 | - | func U ( | |
123 | + | func U (Q) = P("proposal_min_power_required", Q) | |
124 | 124 | ||
125 | 125 | ||
126 | - | func V ( | |
126 | + | func V (Q) = P("proposal_votingstart_offset", Q) | |
127 | 127 | ||
128 | 128 | ||
129 | - | func W ( | |
129 | + | func W (Q) = P("proposal_votingend_offset", Q) | |
130 | 130 | ||
131 | 131 | ||
132 | - | func | |
132 | + | func X (Y) = ("proposal_quorum_ratio_" + Y) | |
133 | 133 | ||
134 | 134 | ||
135 | - | func | |
135 | + | func Z (Q,aa) = valueOrElse(getInteger(X(aa)), S(Q)) | |
136 | 136 | ||
137 | 137 | ||
138 | - | func ab (ac) = if ((ac == 0)) | |
138 | + | func ab (Q,I) = k(invoke(v, "userPower", [Q, I], nil)) | |
139 | + | ||
140 | + | ||
141 | + | func ac (ad) = if ((ad == 0)) | |
139 | 142 | then throw("you are not a participant of this dao") | |
140 | 143 | else nil | |
141 | 144 | ||
142 | 145 | ||
143 | - | func | |
144 | - | let l = getInteger(this, | |
146 | + | func ae (aa) = { | |
147 | + | let l = getInteger(this, A(aa)) | |
145 | 148 | if ($isInstanceOf(l, "Int")) | |
146 | 149 | then { | |
147 | - | let | |
150 | + | let af = l | |
148 | 151 | true | |
149 | 152 | } | |
150 | 153 | else false | |
151 | 154 | } | |
152 | 155 | ||
153 | 156 | ||
154 | - | func | |
155 | - | let | |
156 | - | if (!( | |
157 | - | then throw( | |
157 | + | func ag (aa) = { | |
158 | + | let ah = "proposal doesn't exist" | |
159 | + | if (!(ae(aa))) | |
160 | + | then throw(ah) | |
158 | 161 | else { | |
159 | - | let | |
160 | - | let | |
161 | - | if (( | |
162 | - | then throw(((("voting not started yet, discussion is in progress, voting will start at block " + toString( | |
163 | - | else if ((p > | |
164 | - | then throw(((("voting ended at block " + toString( | |
162 | + | let ai = valueOrErrorMessage(getInteger(this, B(aa)), ah) | |
163 | + | let aj = valueOrErrorMessage(getInteger(this, C(aa)), ah) | |
164 | + | if ((ai > p)) | |
165 | + | then throw(((("voting not started yet, discussion is in progress, voting will start at block " + toString(ai)) + ", now it's ") + toString(p))) | |
166 | + | else if ((p > aj)) | |
167 | + | then throw(((("voting ended at block " + toString(aj)) + ", now it's ") + toString(p))) | |
165 | 168 | else true | |
166 | 169 | } | |
167 | 170 | } | |
168 | 171 | ||
169 | 172 | ||
170 | - | func | |
171 | - | let | |
172 | - | if (!( | |
173 | - | then throw( | |
173 | + | func ak (aa) = { | |
174 | + | let ah = "proposal doesn't exist" | |
175 | + | if (!(ae(aa))) | |
176 | + | then throw(ah) | |
174 | 177 | else { | |
175 | - | let | |
176 | - | if ((p >= | |
178 | + | let ai = valueOrErrorMessage(getInteger(this, B(aa)), ah) | |
179 | + | if ((p >= ai)) | |
177 | 180 | then throw("voting start is already happened") | |
178 | 181 | else true | |
179 | 182 | } | |
180 | 183 | } | |
181 | 184 | ||
182 | 185 | ||
183 | - | func | |
186 | + | func al (Q) = k(invoke(v, "totalPower", [Q], nil)) | |
184 | 187 | ||
185 | 188 | ||
186 | - | func | |
187 | - | let | |
188 | - | let | |
189 | - | let | |
190 | - | let | |
191 | - | if (( | |
189 | + | func am (Q,aa,an,ao) = { | |
190 | + | let ap = (valueOrElse(getInteger(F(aa)), 0) + an) | |
191 | + | let aq = (valueOrElse(getInteger(G(aa)), 0) + ao) | |
192 | + | let ar = valueOrErrorMessage(getInteger(A(aa)), "proposal not registered") | |
193 | + | let as = al(Q) | |
194 | + | if ((as == as)) | |
192 | 195 | then { | |
193 | - | let | |
194 | - | let | |
195 | - | let | |
196 | - | let | |
197 | - | if ( | |
198 | - | then | |
196 | + | let at = T(Q) | |
197 | + | let au = (ap + aq) | |
198 | + | let av = (((au * r) / as) >= Z(Q, aa)) | |
199 | + | let aw = (((ap * r) / au) >= at) | |
200 | + | if (av) | |
201 | + | then aw | |
199 | 202 | else false | |
200 | 203 | } | |
201 | 204 | else throw("Strict value is not equal to itself.") | |
202 | 205 | } | |
203 | 206 | ||
204 | 207 | ||
205 | - | func | |
206 | - | let | |
207 | - | let | |
208 | - | let | |
209 | - | let | |
210 | - | let | |
211 | - | let | |
212 | - | let | |
213 | - | if (( | |
208 | + | func ax (aa) = { | |
209 | + | let Q = valueOrErrorMessage(getString(x(aa)), "child not found") | |
210 | + | let ar = valueOrErrorMessage(getInteger(this, A(aa)), "no proposal") | |
211 | + | let ai = valueOrErrorMessage(getInteger(this, B(aa)), "no proposal") | |
212 | + | let aj = valueOrErrorMessage(getInteger(this, C(aa)), "no proposal") | |
213 | + | let ap = valueOrElse(getInteger(this, F(aa)), 0) | |
214 | + | let aq = valueOrElse(getInteger(this, G(aa)), 0) | |
215 | + | let ay = al(Q) | |
216 | + | if ((ay == ay)) | |
214 | 217 | then { | |
215 | - | let | |
216 | - | let | |
217 | - | let | |
218 | - | then ((( | |
218 | + | let az = Z(Q, aa) | |
219 | + | let au = (ap + aq) | |
220 | + | let av = if ((au > 0)) | |
221 | + | then (((au * r) / ay) >= az) | |
219 | 222 | else false | |
220 | - | let | |
221 | - | then ((( | |
223 | + | let aw = if ((au > 0)) | |
224 | + | then (((ap * r) / au) >= T(Q)) | |
222 | 225 | else false | |
223 | - | let | |
224 | - | let | |
226 | + | let aA = valueOrElse(transactionHeightById(fromBase58String(aa)), 0) | |
227 | + | let aB = if ((ai > p)) | |
225 | 228 | then "discussion" | |
226 | - | else if (( | |
229 | + | else if ((aj >= p)) | |
227 | 230 | then "voting" | |
228 | - | else if (!( | |
231 | + | else if (!(av)) | |
229 | 232 | then "noQuorum" | |
230 | - | else if (!( | |
233 | + | else if (!(aw)) | |
231 | 234 | then "votingFailed" | |
232 | - | else if (( | |
235 | + | else if ((aA > 0)) | |
233 | 236 | then "inBlockchain" | |
234 | 237 | else "waitingForTx" | |
235 | - | let | |
236 | - | ((((((((((((((((((((((((((("proposal_id: " + | |
237 | - | then (p >= | |
238 | - | else false)) + ", proposal_allow_broadcast_height: ") + toString( | |
238 | + | let aC = valueOrElse(getInteger(w, ((("proposal_allow_broadcast_" + Q) + "_") + aa)), -1) | |
239 | + | ((((((((((((((((((((((((((((("proposal_id: " + aa) + ", proposal_status: ") + aB) + ", proposal_by: ") + valueOrErrorMessage(getString(this, D(aa)), "no proposal")) + ", proposal_height: ") + toString(ar)) + ", proposal_txheight: ") + toString(aA)) + ", proposal_votingstart: ") + toString(ai)) + ", proposal_votingend: ") + toString(aj)) + ", proposal_power: ") + toString(ay)) + ", vote_yes: ") + toString(ap)) + ", vote_no: ") + toString(aq)) + ", proposal_allow_broadcast: ") + toString(if ((aC != -1)) | |
240 | + | then (p >= aC) | |
241 | + | else false)) + ", proposal_allow_broadcast_height: ") + toString(aC)) + ", proposal_voting_succeed:") + toString((aC != -1))) + ", proposal_quorum:") + toString(az)) + ", proposal_address: ") + valueOrElse(z(aa), Q)) | |
239 | 242 | } | |
240 | 243 | else throw("Strict value is not equal to itself.") | |
241 | 244 | } | |
242 | 245 | ||
243 | 246 | ||
244 | - | func | |
247 | + | func aC (aa) = (getIntegerValue(C(aa)) + 1) | |
245 | 248 | ||
246 | 249 | ||
247 | - | @Callable( | |
248 | - | func propose ( | |
249 | - | let | |
250 | - | if (( | |
250 | + | @Callable(aD) | |
251 | + | func propose (Q,aa,aE) = { | |
252 | + | let aF = s("child_governance_propose_tx") | |
253 | + | if ((aF == aF)) | |
251 | 254 | then { | |
252 | - | let | |
253 | - | let | |
254 | - | let | |
255 | - | if (( | |
256 | - | then if (( | |
257 | - | then throw((((("not enough staked power to make proposal." + " Minimum required = ") + toString( | |
255 | + | let aG = U(Q) | |
256 | + | let I = toString(aD.caller) | |
257 | + | let aH = ab(Q, I) | |
258 | + | if ((aH == aH)) | |
259 | + | then if ((aG > aH)) | |
260 | + | then throw((((("not enough staked power to make proposal." + " Minimum required = ") + toString(aG)) + ", actual: = ") + toString(aH))) | |
258 | 261 | else { | |
259 | - | let | |
260 | - | let | |
261 | - | if (if (( | |
262 | - | then (( | |
262 | + | let aI = R(Q) | |
263 | + | let aJ = N(I) | |
264 | + | if (if ((aJ > -1)) | |
265 | + | then ((aJ + aI) > p) | |
263 | 266 | else false) | |
264 | - | then throw(((("can't propose too often, last proroposal height: " + toString(aI)) + ", blocks to wait: ") + toString(((aI + aH) - p)))) | |
265 | - | else [h(x(Z), P), i(z(Z), p), i(A(Z), (p + U(P))), i(B(Z), (p + V(P))), h(C(Z), H), g(J(H), p), d(D(Z), aD)] | |
267 | + | then throw(((("can't propose too often, last proroposal height: " + toString(aJ)) + ", blocks to wait: ") + toString(((aJ + aI) - p)))) | |
268 | + | else { | |
269 | + | let aK = valueOrElse(getString(v, ("treasury_" + Q)), Q) | |
270 | + | [h(x(aa), Q), i(A(aa), p), i(B(aa), (p + V(Q))), i(C(aa), (p + W(Q))), h(D(aa), I), g(K(I), p), d(E(aa), aE), h(z(aa), aK)] | |
271 | + | } | |
266 | 272 | } | |
267 | 273 | else throw("Strict value is not equal to itself.") | |
268 | 274 | } | |
271 | 277 | ||
272 | 278 | ||
273 | 279 | ||
274 | - | @Callable( | |
275 | - | func editAttachments ( | |
276 | - | let | |
277 | - | if (( | |
280 | + | @Callable(aD) | |
281 | + | func editAttachments (aa,aE) = { | |
282 | + | let aF = s("child_governance_edit_attachments") | |
283 | + | if ((aF == aF)) | |
278 | 284 | then { | |
279 | - | let | |
280 | - | let | |
281 | - | if (( | |
285 | + | let I = toString(aD.caller) | |
286 | + | let aL = valueOrErrorMessage(getString(this, D(aa)), "proposal doesn't exist") | |
287 | + | if ((aL != I)) | |
282 | 288 | then throw("only owner can edit proposal attachments") | |
283 | - | else [d( | |
289 | + | else [d(E(aa), aE)] | |
284 | 290 | } | |
285 | 291 | else throw("Strict value is not equal to itself.") | |
286 | 292 | } | |
287 | 293 | ||
288 | 294 | ||
289 | 295 | ||
290 | - | @Callable( | |
291 | - | func voteYes ( | |
292 | - | let | |
293 | - | then | |
296 | + | @Callable(aD) | |
297 | + | func voteYes (aa) = { | |
298 | + | let aF = if (s("child_governance_vote_tx")) | |
299 | + | then ag(aa) | |
294 | 300 | else false | |
295 | - | if (( | |
301 | + | if ((aF == aF)) | |
296 | 302 | then { | |
297 | - | let | |
298 | - | if (( | |
303 | + | let I = toString(aD.caller) | |
304 | + | if ((M(I, aa) > 0)) | |
299 | 305 | then throw("already voted against, please retract your vote first") | |
300 | 306 | else { | |
301 | - | let | |
302 | - | if (( | |
307 | + | let aM = L(I, aa) | |
308 | + | if ((aM > 0)) | |
303 | 309 | then throw("already voted") | |
304 | 310 | else { | |
305 | - | let | |
306 | - | let | |
307 | - | if (( | |
311 | + | let Q = valueOrErrorMessage(getString(x(aa)), "child not found") | |
312 | + | let ad = ab(Q, I) | |
313 | + | if ((ad == ad)) | |
308 | 314 | then { | |
309 | - | let | |
310 | - | if (( | |
315 | + | let aN = ac(ad) | |
316 | + | if ((aN == aN)) | |
311 | 317 | then { | |
312 | - | let aM = al(P, Z, ac, 0) | |
313 | - | let aN = invoke(w, "setResult", [P, Z, aM, aB(Z)], nil) | |
314 | - | if ((aN == aN)) | |
315 | - | then [j(G(H, Z), ac), j(E(Z), ac)] | |
318 | + | let aO = am(Q, aa, ad, 0) | |
319 | + | let aP = valueOrElse(getString(z(aa)), Q) | |
320 | + | let aQ = invoke(w, "setResult", [aP, aa, aO, aC(aa)], nil) | |
321 | + | if ((aQ == aQ)) | |
322 | + | then [j(H(I, aa), ad), j(F(aa), ad)] | |
316 | 323 | else throw("Strict value is not equal to itself.") | |
317 | 324 | } | |
318 | 325 | else throw("Strict value is not equal to itself.") | |
326 | 333 | ||
327 | 334 | ||
328 | 335 | ||
329 | - | @Callable( | |
330 | - | func voteNo ( | |
331 | - | let | |
332 | - | then | |
336 | + | @Callable(aD) | |
337 | + | func voteNo (aa) = { | |
338 | + | let aF = if (s("child_governance_vote_tx")) | |
339 | + | then ag(aa) | |
333 | 340 | else false | |
334 | - | if (( | |
341 | + | if ((aF == aF)) | |
335 | 342 | then { | |
336 | - | let | |
337 | - | if (( | |
343 | + | let I = toString(aD.caller) | |
344 | + | if ((L(I, aa) > 0)) | |
338 | 345 | then throw("already voted for, please retract your vote first") | |
339 | 346 | else { | |
340 | - | let | |
341 | - | if (( | |
347 | + | let aR = M(I, aa) | |
348 | + | if ((aR > 0)) | |
342 | 349 | then throw("already voted") | |
343 | 350 | else { | |
344 | - | let | |
345 | - | let | |
346 | - | if (( | |
351 | + | let Q = valueOrErrorMessage(getString(x(aa)), "child not found") | |
352 | + | let ad = ab(Q, I) | |
353 | + | if ((ad == ad)) | |
347 | 354 | then { | |
348 | - | let | |
349 | - | if (( | |
355 | + | let aN = ac(ad) | |
356 | + | if ((aN == aN)) | |
350 | 357 | then { | |
351 | - | let aM = al(P, Z, 0, ac) | |
352 | - | let aN = invoke(w, "setResult", [P, Z, aM, aB(Z)], nil) | |
353 | - | if ((aN == aN)) | |
354 | - | then [j(I(H, Z), ac), j(F(Z), ac)] | |
358 | + | let aO = am(Q, aa, 0, ad) | |
359 | + | let aP = valueOrElse(getString(z(aa)), Q) | |
360 | + | let aQ = invoke(w, "setResult", [aP, aa, aO, aC(aa)], nil) | |
361 | + | if ((aQ == aQ)) | |
362 | + | then [j(J(I, aa), ad), j(G(aa), ad)] | |
355 | 363 | else throw("Strict value is not equal to itself.") | |
356 | 364 | } | |
357 | 365 | else throw("Strict value is not equal to itself.") | |
365 | 373 | ||
366 | 374 | ||
367 | 375 | ||
368 | - | @Callable( | |
369 | - | func retract ( | |
370 | - | let | |
371 | - | then | |
376 | + | @Callable(aD) | |
377 | + | func retract (aa) = { | |
378 | + | let aF = if (s("child_governance_retract_vote")) | |
379 | + | then ag(aa) | |
372 | 380 | else false | |
373 | - | if (( | |
381 | + | if ((aF == aF)) | |
374 | 382 | then { | |
375 | - | let H = toString(aC.caller) | |
376 | - | let P = valueOrErrorMessage(getString(x(Z)), "child not found") | |
377 | - | let aK = -(K(H, Z)) | |
378 | - | let aO = -(L(H, Z)) | |
379 | - | let aM = al(P, Z, aK, aO) | |
380 | - | let aN = invoke(w, "setResult", [P, Z, aM, aB(Z)], nil) | |
381 | - | if ((aN == aN)) | |
382 | - | then [j(E(Z), aK), j(F(Z), aO), DeleteEntry(G(H, Z)), DeleteEntry(I(H, Z))] | |
383 | + | let I = toString(aD.caller) | |
384 | + | let Q = valueOrErrorMessage(getString(x(aa)), "child not found") | |
385 | + | let aM = -(L(I, aa)) | |
386 | + | let aR = -(M(I, aa)) | |
387 | + | let aO = am(Q, aa, aM, aR) | |
388 | + | let aP = valueOrElse(getString(z(aa)), Q) | |
389 | + | let aQ = invoke(w, "setResult", [aP, aa, aO, aC(aa)], nil) | |
390 | + | if ((aQ == aQ)) | |
391 | + | then [j(F(aa), aM), j(G(aa), aR), DeleteEntry(H(I, aa)), DeleteEntry(J(I, aa))] | |
383 | 392 | else throw("Strict value is not equal to itself.") | |
384 | 393 | } | |
385 | 394 | else throw("Strict value is not equal to itself.") | |
387 | 396 | ||
388 | 397 | ||
389 | 398 | ||
390 | - | @Callable( | |
391 | - | func retractProposal ( | |
392 | - | let | |
393 | - | then | |
399 | + | @Callable(aD) | |
400 | + | func retractProposal (aa) = { | |
401 | + | let aF = if (s("child_governance_retract_proposal_tx")) | |
402 | + | then ak(aa) | |
394 | 403 | else false | |
395 | - | if (( | |
404 | + | if ((aF == aF)) | |
396 | 405 | then { | |
397 | - | let | |
398 | - | let | |
399 | - | if (( | |
406 | + | let aL = valueOrErrorMessage(getString(this, D(aa)), "proposal doesn't exist") | |
407 | + | let I = toString(aD.caller) | |
408 | + | if ((aL != I)) | |
400 | 409 | then throw("only owner can retract proposal") | |
401 | - | else [DeleteEntry(x( | |
410 | + | else [DeleteEntry(x(aa)), DeleteEntry(A(aa)), DeleteEntry(B(aa)), DeleteEntry(C(aa)), DeleteEntry(D(aa)), DeleteEntry(F(aa)), DeleteEntry(G(aa)), DeleteEntry(H(I, aa)), DeleteEntry(J(I, aa)), DeleteEntry(K(I)), DeleteEntry(z(aa))] | |
402 | 411 | } | |
403 | 412 | else throw("Strict value is not equal to itself.") | |
404 | 413 | } | |
405 | 414 | ||
406 | 415 | ||
407 | 416 | ||
408 | - | @Callable( | |
409 | - | func init ( | |
417 | + | @Callable(aD) | |
418 | + | func init (aS) = [h(n, aS)] | |
410 | 419 | ||
411 | 420 |
Old | New | Differences | |
---|---|---|---|
1 | 1 | {-# STDLIB_VERSION 5 #-} | |
2 | 2 | {-# SCRIPT_TYPE ACCOUNT #-} | |
3 | 3 | {-# CONTENT_TYPE DAPP #-} | |
4 | 4 | func a (b,c) = if (b) | |
5 | 5 | then throw(c) | |
6 | 6 | else true | |
7 | 7 | ||
8 | 8 | ||
9 | 9 | func d (e,f) = BinaryEntry(e, f) | |
10 | 10 | ||
11 | 11 | ||
12 | 12 | func g (e,f) = if ((0 > f)) | |
13 | 13 | then throw(((("writing negative value " + toString(f)) + " for key ") + e)) | |
14 | 14 | else IntegerEntry(e, f) | |
15 | 15 | ||
16 | 16 | ||
17 | 17 | func h (e,f) = if (!(isDefined(getString(this, e)))) | |
18 | 18 | then StringEntry(e, f) | |
19 | 19 | else throw(("already initialized: " + e)) | |
20 | 20 | ||
21 | 21 | ||
22 | 22 | func i (e,f) = if (!(isDefined(getInteger(this, e)))) | |
23 | 23 | then IntegerEntry(e, f) | |
24 | 24 | else throw(("already exists: " + e)) | |
25 | 25 | ||
26 | 26 | ||
27 | 27 | func j (e,f) = g(e, (valueOrElse(getInteger(this, e), 0) + f)) | |
28 | 28 | ||
29 | 29 | ||
30 | 30 | func k (f) = { | |
31 | 31 | let l = f | |
32 | 32 | if ($isInstanceOf(l, "Int")) | |
33 | 33 | then { | |
34 | 34 | let m = l | |
35 | 35 | m | |
36 | 36 | } | |
37 | 37 | else throw("wrong type, expected: Int") | |
38 | 38 | } | |
39 | 39 | ||
40 | 40 | ||
41 | 41 | let n = "config" | |
42 | 42 | ||
43 | 43 | let o = valueOrErrorMessage(addressFromString(valueOrErrorMessage(getString(this, n), "children.voting: no config")), "invalid config address") | |
44 | 44 | ||
45 | 45 | let p = height | |
46 | 46 | ||
47 | 47 | func q () = ("height: " + toString(p)) | |
48 | 48 | ||
49 | 49 | ||
50 | 50 | let r = 1000 | |
51 | 51 | ||
52 | 52 | func s (t) = { | |
53 | 53 | let u = invoke(o, "opAllowed", [t], nil) | |
54 | 54 | if ((u == u)) | |
55 | 55 | then true | |
56 | 56 | else throw("Strict value is not equal to itself.") | |
57 | 57 | } | |
58 | 58 | ||
59 | 59 | ||
60 | 60 | let v = valueOrErrorMessage(addressFromString(valueOrErrorMessage(getString(o, "contract_children"), "no contract_children")), "invalid contract_children") | |
61 | 61 | ||
62 | 62 | let w = valueOrErrorMessage(addressFromString(valueOrErrorMessage(getString(o, "contract_voting_result"), "no contract_voting_result")), "invalid contract_voting_result") | |
63 | 63 | ||
64 | 64 | func x (y) = ("proposal_child_" + y) | |
65 | 65 | ||
66 | 66 | ||
67 | - | func z (y) = ("proposal_ | |
67 | + | func z (y) = ("proposal_address_" + y) | |
68 | 68 | ||
69 | 69 | ||
70 | - | func A (y) = ("proposal_ | |
70 | + | func A (y) = ("proposal_height_" + y) | |
71 | 71 | ||
72 | 72 | ||
73 | - | func B (y) = ("proposal_ | |
73 | + | func B (y) = ("proposal_votingstart_" + y) | |
74 | 74 | ||
75 | 75 | ||
76 | - | func C (y) = ("proposal_ | |
76 | + | func C (y) = ("proposal_votingend_" + y) | |
77 | 77 | ||
78 | 78 | ||
79 | - | func D (y) = ("proposal_ | |
79 | + | func D (y) = ("proposal_by_" + y) | |
80 | 80 | ||
81 | 81 | ||
82 | - | func E (y) = ("proposal_ | |
82 | + | func E (y) = ("proposal_attachments_" + y) | |
83 | 83 | ||
84 | 84 | ||
85 | - | func F (y) = ("proposal_ | |
85 | + | func F (y) = ("proposal_yes_" + y) | |
86 | 86 | ||
87 | 87 | ||
88 | - | func G ( | |
88 | + | func G (y) = ("proposal_no_" + y) | |
89 | 89 | ||
90 | 90 | ||
91 | - | func | |
91 | + | func H (I,y) = ((("user_proposal_yes_" + I) + "_") + y) | |
92 | 92 | ||
93 | 93 | ||
94 | - | func J ( | |
94 | + | func J (I,y) = ((("user_proposal_no_" + I) + "_") + y) | |
95 | 95 | ||
96 | 96 | ||
97 | - | func K ( | |
97 | + | func K (I) = ("propose_lastheight_" + I) | |
98 | 98 | ||
99 | 99 | ||
100 | - | func L ( | |
100 | + | func L (I,y) = valueOrElse(getInteger(this, H(I, y)), 0) | |
101 | 101 | ||
102 | 102 | ||
103 | - | func M ( | |
103 | + | func M (I,y) = valueOrElse(getInteger(this, J(I, y)), 0) | |
104 | 104 | ||
105 | 105 | ||
106 | - | let N = toString(this) | |
107 | - | ||
108 | - | func O (e,P) = valueOrElse(getInteger(((e + "_") + P)), valueOrErrorMessage(getInteger(o, ((N + "_") + e)), (e + " is not defined"))) | |
106 | + | func N (I) = valueOrElse(getInteger(this, K(I)), -1) | |
109 | 107 | ||
110 | 108 | ||
111 | - | func Q (P) = O("user_propose_delay", P) | |
109 | + | let O = toString(this) | |
110 | + | ||
111 | + | func P (e,Q) = valueOrElse(getInteger(((e + "_") + Q)), valueOrErrorMessage(getInteger(o, ((O + "_") + e)), (e + " is not defined"))) | |
112 | 112 | ||
113 | 113 | ||
114 | - | func R ( | |
114 | + | func R (Q) = P("user_propose_delay", Q) | |
115 | 115 | ||
116 | 116 | ||
117 | - | func S ( | |
117 | + | func S (Q) = P("proposal_quorum_ratio", Q) | |
118 | 118 | ||
119 | 119 | ||
120 | - | func T ( | |
120 | + | func T (Q) = P("proposal_passed_ratio", Q) | |
121 | 121 | ||
122 | 122 | ||
123 | - | func U ( | |
123 | + | func U (Q) = P("proposal_min_power_required", Q) | |
124 | 124 | ||
125 | 125 | ||
126 | - | func V ( | |
126 | + | func V (Q) = P("proposal_votingstart_offset", Q) | |
127 | 127 | ||
128 | 128 | ||
129 | - | func W ( | |
129 | + | func W (Q) = P("proposal_votingend_offset", Q) | |
130 | 130 | ||
131 | 131 | ||
132 | - | func | |
132 | + | func X (Y) = ("proposal_quorum_ratio_" + Y) | |
133 | 133 | ||
134 | 134 | ||
135 | - | func | |
135 | + | func Z (Q,aa) = valueOrElse(getInteger(X(aa)), S(Q)) | |
136 | 136 | ||
137 | 137 | ||
138 | - | func ab (ac) = if ((ac == 0)) | |
138 | + | func ab (Q,I) = k(invoke(v, "userPower", [Q, I], nil)) | |
139 | + | ||
140 | + | ||
141 | + | func ac (ad) = if ((ad == 0)) | |
139 | 142 | then throw("you are not a participant of this dao") | |
140 | 143 | else nil | |
141 | 144 | ||
142 | 145 | ||
143 | - | func | |
144 | - | let l = getInteger(this, | |
146 | + | func ae (aa) = { | |
147 | + | let l = getInteger(this, A(aa)) | |
145 | 148 | if ($isInstanceOf(l, "Int")) | |
146 | 149 | then { | |
147 | - | let | |
150 | + | let af = l | |
148 | 151 | true | |
149 | 152 | } | |
150 | 153 | else false | |
151 | 154 | } | |
152 | 155 | ||
153 | 156 | ||
154 | - | func | |
155 | - | let | |
156 | - | if (!( | |
157 | - | then throw( | |
157 | + | func ag (aa) = { | |
158 | + | let ah = "proposal doesn't exist" | |
159 | + | if (!(ae(aa))) | |
160 | + | then throw(ah) | |
158 | 161 | else { | |
159 | - | let | |
160 | - | let | |
161 | - | if (( | |
162 | - | then throw(((("voting not started yet, discussion is in progress, voting will start at block " + toString( | |
163 | - | else if ((p > | |
164 | - | then throw(((("voting ended at block " + toString( | |
162 | + | let ai = valueOrErrorMessage(getInteger(this, B(aa)), ah) | |
163 | + | let aj = valueOrErrorMessage(getInteger(this, C(aa)), ah) | |
164 | + | if ((ai > p)) | |
165 | + | then throw(((("voting not started yet, discussion is in progress, voting will start at block " + toString(ai)) + ", now it's ") + toString(p))) | |
166 | + | else if ((p > aj)) | |
167 | + | then throw(((("voting ended at block " + toString(aj)) + ", now it's ") + toString(p))) | |
165 | 168 | else true | |
166 | 169 | } | |
167 | 170 | } | |
168 | 171 | ||
169 | 172 | ||
170 | - | func | |
171 | - | let | |
172 | - | if (!( | |
173 | - | then throw( | |
173 | + | func ak (aa) = { | |
174 | + | let ah = "proposal doesn't exist" | |
175 | + | if (!(ae(aa))) | |
176 | + | then throw(ah) | |
174 | 177 | else { | |
175 | - | let | |
176 | - | if ((p >= | |
178 | + | let ai = valueOrErrorMessage(getInteger(this, B(aa)), ah) | |
179 | + | if ((p >= ai)) | |
177 | 180 | then throw("voting start is already happened") | |
178 | 181 | else true | |
179 | 182 | } | |
180 | 183 | } | |
181 | 184 | ||
182 | 185 | ||
183 | - | func | |
186 | + | func al (Q) = k(invoke(v, "totalPower", [Q], nil)) | |
184 | 187 | ||
185 | 188 | ||
186 | - | func | |
187 | - | let | |
188 | - | let | |
189 | - | let | |
190 | - | let | |
191 | - | if (( | |
189 | + | func am (Q,aa,an,ao) = { | |
190 | + | let ap = (valueOrElse(getInteger(F(aa)), 0) + an) | |
191 | + | let aq = (valueOrElse(getInteger(G(aa)), 0) + ao) | |
192 | + | let ar = valueOrErrorMessage(getInteger(A(aa)), "proposal not registered") | |
193 | + | let as = al(Q) | |
194 | + | if ((as == as)) | |
192 | 195 | then { | |
193 | - | let | |
194 | - | let | |
195 | - | let | |
196 | - | let | |
197 | - | if ( | |
198 | - | then | |
196 | + | let at = T(Q) | |
197 | + | let au = (ap + aq) | |
198 | + | let av = (((au * r) / as) >= Z(Q, aa)) | |
199 | + | let aw = (((ap * r) / au) >= at) | |
200 | + | if (av) | |
201 | + | then aw | |
199 | 202 | else false | |
200 | 203 | } | |
201 | 204 | else throw("Strict value is not equal to itself.") | |
202 | 205 | } | |
203 | 206 | ||
204 | 207 | ||
205 | - | func | |
206 | - | let | |
207 | - | let | |
208 | - | let | |
209 | - | let | |
210 | - | let | |
211 | - | let | |
212 | - | let | |
213 | - | if (( | |
208 | + | func ax (aa) = { | |
209 | + | let Q = valueOrErrorMessage(getString(x(aa)), "child not found") | |
210 | + | let ar = valueOrErrorMessage(getInteger(this, A(aa)), "no proposal") | |
211 | + | let ai = valueOrErrorMessage(getInteger(this, B(aa)), "no proposal") | |
212 | + | let aj = valueOrErrorMessage(getInteger(this, C(aa)), "no proposal") | |
213 | + | let ap = valueOrElse(getInteger(this, F(aa)), 0) | |
214 | + | let aq = valueOrElse(getInteger(this, G(aa)), 0) | |
215 | + | let ay = al(Q) | |
216 | + | if ((ay == ay)) | |
214 | 217 | then { | |
215 | - | let | |
216 | - | let | |
217 | - | let | |
218 | - | then ((( | |
218 | + | let az = Z(Q, aa) | |
219 | + | let au = (ap + aq) | |
220 | + | let av = if ((au > 0)) | |
221 | + | then (((au * r) / ay) >= az) | |
219 | 222 | else false | |
220 | - | let | |
221 | - | then ((( | |
223 | + | let aw = if ((au > 0)) | |
224 | + | then (((ap * r) / au) >= T(Q)) | |
222 | 225 | else false | |
223 | - | let | |
224 | - | let | |
226 | + | let aA = valueOrElse(transactionHeightById(fromBase58String(aa)), 0) | |
227 | + | let aB = if ((ai > p)) | |
225 | 228 | then "discussion" | |
226 | - | else if (( | |
229 | + | else if ((aj >= p)) | |
227 | 230 | then "voting" | |
228 | - | else if (!( | |
231 | + | else if (!(av)) | |
229 | 232 | then "noQuorum" | |
230 | - | else if (!( | |
233 | + | else if (!(aw)) | |
231 | 234 | then "votingFailed" | |
232 | - | else if (( | |
235 | + | else if ((aA > 0)) | |
233 | 236 | then "inBlockchain" | |
234 | 237 | else "waitingForTx" | |
235 | - | let | |
236 | - | ((((((((((((((((((((((((((("proposal_id: " + | |
237 | - | then (p >= | |
238 | - | else false)) + ", proposal_allow_broadcast_height: ") + toString( | |
238 | + | let aC = valueOrElse(getInteger(w, ((("proposal_allow_broadcast_" + Q) + "_") + aa)), -1) | |
239 | + | ((((((((((((((((((((((((((((("proposal_id: " + aa) + ", proposal_status: ") + aB) + ", proposal_by: ") + valueOrErrorMessage(getString(this, D(aa)), "no proposal")) + ", proposal_height: ") + toString(ar)) + ", proposal_txheight: ") + toString(aA)) + ", proposal_votingstart: ") + toString(ai)) + ", proposal_votingend: ") + toString(aj)) + ", proposal_power: ") + toString(ay)) + ", vote_yes: ") + toString(ap)) + ", vote_no: ") + toString(aq)) + ", proposal_allow_broadcast: ") + toString(if ((aC != -1)) | |
240 | + | then (p >= aC) | |
241 | + | else false)) + ", proposal_allow_broadcast_height: ") + toString(aC)) + ", proposal_voting_succeed:") + toString((aC != -1))) + ", proposal_quorum:") + toString(az)) + ", proposal_address: ") + valueOrElse(z(aa), Q)) | |
239 | 242 | } | |
240 | 243 | else throw("Strict value is not equal to itself.") | |
241 | 244 | } | |
242 | 245 | ||
243 | 246 | ||
244 | - | func | |
247 | + | func aC (aa) = (getIntegerValue(C(aa)) + 1) | |
245 | 248 | ||
246 | 249 | ||
247 | - | @Callable( | |
248 | - | func propose ( | |
249 | - | let | |
250 | - | if (( | |
250 | + | @Callable(aD) | |
251 | + | func propose (Q,aa,aE) = { | |
252 | + | let aF = s("child_governance_propose_tx") | |
253 | + | if ((aF == aF)) | |
251 | 254 | then { | |
252 | - | let | |
253 | - | let | |
254 | - | let | |
255 | - | if (( | |
256 | - | then if (( | |
257 | - | then throw((((("not enough staked power to make proposal." + " Minimum required = ") + toString( | |
255 | + | let aG = U(Q) | |
256 | + | let I = toString(aD.caller) | |
257 | + | let aH = ab(Q, I) | |
258 | + | if ((aH == aH)) | |
259 | + | then if ((aG > aH)) | |
260 | + | then throw((((("not enough staked power to make proposal." + " Minimum required = ") + toString(aG)) + ", actual: = ") + toString(aH))) | |
258 | 261 | else { | |
259 | - | let | |
260 | - | let | |
261 | - | if (if (( | |
262 | - | then (( | |
262 | + | let aI = R(Q) | |
263 | + | let aJ = N(I) | |
264 | + | if (if ((aJ > -1)) | |
265 | + | then ((aJ + aI) > p) | |
263 | 266 | else false) | |
264 | - | then throw(((("can't propose too often, last proroposal height: " + toString(aI)) + ", blocks to wait: ") + toString(((aI + aH) - p)))) | |
265 | - | else [h(x(Z), P), i(z(Z), p), i(A(Z), (p + U(P))), i(B(Z), (p + V(P))), h(C(Z), H), g(J(H), p), d(D(Z), aD)] | |
267 | + | then throw(((("can't propose too often, last proroposal height: " + toString(aJ)) + ", blocks to wait: ") + toString(((aJ + aI) - p)))) | |
268 | + | else { | |
269 | + | let aK = valueOrElse(getString(v, ("treasury_" + Q)), Q) | |
270 | + | [h(x(aa), Q), i(A(aa), p), i(B(aa), (p + V(Q))), i(C(aa), (p + W(Q))), h(D(aa), I), g(K(I), p), d(E(aa), aE), h(z(aa), aK)] | |
271 | + | } | |
266 | 272 | } | |
267 | 273 | else throw("Strict value is not equal to itself.") | |
268 | 274 | } | |
269 | 275 | else throw("Strict value is not equal to itself.") | |
270 | 276 | } | |
271 | 277 | ||
272 | 278 | ||
273 | 279 | ||
274 | - | @Callable( | |
275 | - | func editAttachments ( | |
276 | - | let | |
277 | - | if (( | |
280 | + | @Callable(aD) | |
281 | + | func editAttachments (aa,aE) = { | |
282 | + | let aF = s("child_governance_edit_attachments") | |
283 | + | if ((aF == aF)) | |
278 | 284 | then { | |
279 | - | let | |
280 | - | let | |
281 | - | if (( | |
285 | + | let I = toString(aD.caller) | |
286 | + | let aL = valueOrErrorMessage(getString(this, D(aa)), "proposal doesn't exist") | |
287 | + | if ((aL != I)) | |
282 | 288 | then throw("only owner can edit proposal attachments") | |
283 | - | else [d( | |
289 | + | else [d(E(aa), aE)] | |
284 | 290 | } | |
285 | 291 | else throw("Strict value is not equal to itself.") | |
286 | 292 | } | |
287 | 293 | ||
288 | 294 | ||
289 | 295 | ||
290 | - | @Callable( | |
291 | - | func voteYes ( | |
292 | - | let | |
293 | - | then | |
296 | + | @Callable(aD) | |
297 | + | func voteYes (aa) = { | |
298 | + | let aF = if (s("child_governance_vote_tx")) | |
299 | + | then ag(aa) | |
294 | 300 | else false | |
295 | - | if (( | |
301 | + | if ((aF == aF)) | |
296 | 302 | then { | |
297 | - | let | |
298 | - | if (( | |
303 | + | let I = toString(aD.caller) | |
304 | + | if ((M(I, aa) > 0)) | |
299 | 305 | then throw("already voted against, please retract your vote first") | |
300 | 306 | else { | |
301 | - | let | |
302 | - | if (( | |
307 | + | let aM = L(I, aa) | |
308 | + | if ((aM > 0)) | |
303 | 309 | then throw("already voted") | |
304 | 310 | else { | |
305 | - | let | |
306 | - | let | |
307 | - | if (( | |
311 | + | let Q = valueOrErrorMessage(getString(x(aa)), "child not found") | |
312 | + | let ad = ab(Q, I) | |
313 | + | if ((ad == ad)) | |
308 | 314 | then { | |
309 | - | let | |
310 | - | if (( | |
315 | + | let aN = ac(ad) | |
316 | + | if ((aN == aN)) | |
311 | 317 | then { | |
312 | - | let aM = al(P, Z, ac, 0) | |
313 | - | let aN = invoke(w, "setResult", [P, Z, aM, aB(Z)], nil) | |
314 | - | if ((aN == aN)) | |
315 | - | then [j(G(H, Z), ac), j(E(Z), ac)] | |
318 | + | let aO = am(Q, aa, ad, 0) | |
319 | + | let aP = valueOrElse(getString(z(aa)), Q) | |
320 | + | let aQ = invoke(w, "setResult", [aP, aa, aO, aC(aa)], nil) | |
321 | + | if ((aQ == aQ)) | |
322 | + | then [j(H(I, aa), ad), j(F(aa), ad)] | |
316 | 323 | else throw("Strict value is not equal to itself.") | |
317 | 324 | } | |
318 | 325 | else throw("Strict value is not equal to itself.") | |
319 | 326 | } | |
320 | 327 | else throw("Strict value is not equal to itself.") | |
321 | 328 | } | |
322 | 329 | } | |
323 | 330 | } | |
324 | 331 | else throw("Strict value is not equal to itself.") | |
325 | 332 | } | |
326 | 333 | ||
327 | 334 | ||
328 | 335 | ||
329 | - | @Callable( | |
330 | - | func voteNo ( | |
331 | - | let | |
332 | - | then | |
336 | + | @Callable(aD) | |
337 | + | func voteNo (aa) = { | |
338 | + | let aF = if (s("child_governance_vote_tx")) | |
339 | + | then ag(aa) | |
333 | 340 | else false | |
334 | - | if (( | |
341 | + | if ((aF == aF)) | |
335 | 342 | then { | |
336 | - | let | |
337 | - | if (( | |
343 | + | let I = toString(aD.caller) | |
344 | + | if ((L(I, aa) > 0)) | |
338 | 345 | then throw("already voted for, please retract your vote first") | |
339 | 346 | else { | |
340 | - | let | |
341 | - | if (( | |
347 | + | let aR = M(I, aa) | |
348 | + | if ((aR > 0)) | |
342 | 349 | then throw("already voted") | |
343 | 350 | else { | |
344 | - | let | |
345 | - | let | |
346 | - | if (( | |
351 | + | let Q = valueOrErrorMessage(getString(x(aa)), "child not found") | |
352 | + | let ad = ab(Q, I) | |
353 | + | if ((ad == ad)) | |
347 | 354 | then { | |
348 | - | let | |
349 | - | if (( | |
355 | + | let aN = ac(ad) | |
356 | + | if ((aN == aN)) | |
350 | 357 | then { | |
351 | - | let aM = al(P, Z, 0, ac) | |
352 | - | let aN = invoke(w, "setResult", [P, Z, aM, aB(Z)], nil) | |
353 | - | if ((aN == aN)) | |
354 | - | then [j(I(H, Z), ac), j(F(Z), ac)] | |
358 | + | let aO = am(Q, aa, 0, ad) | |
359 | + | let aP = valueOrElse(getString(z(aa)), Q) | |
360 | + | let aQ = invoke(w, "setResult", [aP, aa, aO, aC(aa)], nil) | |
361 | + | if ((aQ == aQ)) | |
362 | + | then [j(J(I, aa), ad), j(G(aa), ad)] | |
355 | 363 | else throw("Strict value is not equal to itself.") | |
356 | 364 | } | |
357 | 365 | else throw("Strict value is not equal to itself.") | |
358 | 366 | } | |
359 | 367 | else throw("Strict value is not equal to itself.") | |
360 | 368 | } | |
361 | 369 | } | |
362 | 370 | } | |
363 | 371 | else throw("Strict value is not equal to itself.") | |
364 | 372 | } | |
365 | 373 | ||
366 | 374 | ||
367 | 375 | ||
368 | - | @Callable( | |
369 | - | func retract ( | |
370 | - | let | |
371 | - | then | |
376 | + | @Callable(aD) | |
377 | + | func retract (aa) = { | |
378 | + | let aF = if (s("child_governance_retract_vote")) | |
379 | + | then ag(aa) | |
372 | 380 | else false | |
373 | - | if (( | |
381 | + | if ((aF == aF)) | |
374 | 382 | then { | |
375 | - | let H = toString(aC.caller) | |
376 | - | let P = valueOrErrorMessage(getString(x(Z)), "child not found") | |
377 | - | let aK = -(K(H, Z)) | |
378 | - | let aO = -(L(H, Z)) | |
379 | - | let aM = al(P, Z, aK, aO) | |
380 | - | let aN = invoke(w, "setResult", [P, Z, aM, aB(Z)], nil) | |
381 | - | if ((aN == aN)) | |
382 | - | then [j(E(Z), aK), j(F(Z), aO), DeleteEntry(G(H, Z)), DeleteEntry(I(H, Z))] | |
383 | + | let I = toString(aD.caller) | |
384 | + | let Q = valueOrErrorMessage(getString(x(aa)), "child not found") | |
385 | + | let aM = -(L(I, aa)) | |
386 | + | let aR = -(M(I, aa)) | |
387 | + | let aO = am(Q, aa, aM, aR) | |
388 | + | let aP = valueOrElse(getString(z(aa)), Q) | |
389 | + | let aQ = invoke(w, "setResult", [aP, aa, aO, aC(aa)], nil) | |
390 | + | if ((aQ == aQ)) | |
391 | + | then [j(F(aa), aM), j(G(aa), aR), DeleteEntry(H(I, aa)), DeleteEntry(J(I, aa))] | |
383 | 392 | else throw("Strict value is not equal to itself.") | |
384 | 393 | } | |
385 | 394 | else throw("Strict value is not equal to itself.") | |
386 | 395 | } | |
387 | 396 | ||
388 | 397 | ||
389 | 398 | ||
390 | - | @Callable( | |
391 | - | func retractProposal ( | |
392 | - | let | |
393 | - | then | |
399 | + | @Callable(aD) | |
400 | + | func retractProposal (aa) = { | |
401 | + | let aF = if (s("child_governance_retract_proposal_tx")) | |
402 | + | then ak(aa) | |
394 | 403 | else false | |
395 | - | if (( | |
404 | + | if ((aF == aF)) | |
396 | 405 | then { | |
397 | - | let | |
398 | - | let | |
399 | - | if (( | |
406 | + | let aL = valueOrErrorMessage(getString(this, D(aa)), "proposal doesn't exist") | |
407 | + | let I = toString(aD.caller) | |
408 | + | if ((aL != I)) | |
400 | 409 | then throw("only owner can retract proposal") | |
401 | - | else [DeleteEntry(x( | |
410 | + | else [DeleteEntry(x(aa)), DeleteEntry(A(aa)), DeleteEntry(B(aa)), DeleteEntry(C(aa)), DeleteEntry(D(aa)), DeleteEntry(F(aa)), DeleteEntry(G(aa)), DeleteEntry(H(I, aa)), DeleteEntry(J(I, aa)), DeleteEntry(K(I)), DeleteEntry(z(aa))] | |
402 | 411 | } | |
403 | 412 | else throw("Strict value is not equal to itself.") | |
404 | 413 | } | |
405 | 414 | ||
406 | 415 | ||
407 | 416 | ||
408 | - | @Callable( | |
409 | - | func init ( | |
417 | + | @Callable(aD) | |
418 | + | func init (aS) = [h(n, aS)] | |
410 | 419 | ||
411 | 420 |
github/deemru/w8io/0e76f2f 131.81 ms ◑