tx · E4RHTrkdgiyq3K94YgMsoDaLnjgQBKqdRq5xSahx7DwN

3N1Epwa6GQuTQr2K9WzeUcqSFCdERwuvL5T:  -0.01400000 Waves

2022.05.20 11:44 [2059774] smart account 3N1Epwa6GQuTQr2K9WzeUcqSFCdERwuvL5T > SELF 0.00000000 Waves

{ "type": 13, "id": "E4RHTrkdgiyq3K94YgMsoDaLnjgQBKqdRq5xSahx7DwN", "fee": 1400000, "feeAssetId": null, "timestamp": 1653036268829, "version": 1, "sender": "3N1Epwa6GQuTQr2K9WzeUcqSFCdERwuvL5T", "senderPublicKey": "7iXEgsFNsnbLZ3ca4tmz8jffnyxMu9keuBV6CuQPJLuA", "proofs": [ "4qbPcLUrd4MQRzV6wVTtY3CotrYoBVFshytmkZRt79epBB4RxbZutZgJVoN3A5F3HHQM5ggVNUPZ3tFefA7woczb" ], "script": "base64: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bnRyYWN0AAAAABB1c2VyUG9vbENvbnRyYWN0CQEAAAARQGV4dHJOYXRpdmUoMTA2MikAAAABCQEAAAAPZ2V0U3RyaW5nT3JGYWlsAAAAAQUAAAATa2V5VXNlclBvb2xDb250cmFjdAAAAAAQYm9vc3RpbmdDb250cmFjdAkBAAAAEUBleHRyTmF0aXZlKDEwNjIpAAAAAQkBAAAAD2dldFN0cmluZ09yRmFpbAAAAAEFAAAAE2tleUJvb3N0aW5nQ29udHJhY3QAAAAAE2Fzc2V0c1N0b3JlQ29udHJhY3QJAQAAABFAZXh0ck5hdGl2ZSgxMDYyKQAAAAEJAQAAAA9nZXRTdHJpbmdPckZhaWwAAAABBQAAABZrZXlBc3NldHNTdG9yZUNvbnRyYWN0AQAAABZtYW5hZ2VyUHVibGljS2V5T3JVbml0AAAAAAQAAAAHJG1hdGNoMAkABCIAAAABCQEAAAATa2V5TWFuYWdlclB1YmxpY0tleQAAAAADCQAAAQAAAAIFAAAAByRtYXRjaDACAAAABlN0cmluZwQAAAABcwUAAAAHJG1hdGNoMAkAAlkAAAABBQAAAAFzAwkAAAEAAAACBQAAAAckbWF0Y2gwAgAAAARVbml0BQAAAAR1bml0CQAAAgAAAAECAAAAC01hdGNoIGVycm9yAQAAAB1wZW5kaW5nTWFuYWdlclB1YmxpY0tleU9yVW5pdAAAAAAEAAAAByRtYXRjaDAJAAQiAAAAAQkBAAAAGmtleVBlbmRpbmdNYW5hZ2VyUHVibGljS2V5AAAAAAMJAAABAAAAAgUAAAAHJG1hdGNoMAIAAAAGU3RyaW5nBAAAAAFzBQAAAAckbWF0Y2gwCQACWQAAAAEFAAAAAXMDCQAAAQAAAAIFAAAAByRtYXRjaDACAAAABFVuaXQFAAAABHVuaXQJAAACAAAAAQIAAAALTWF0Y2ggZXJyb3IBAAAAC211c3RNYW5hZ2VyAAAAAQAAAAFpBAAAAAJwZAkAAAIAAAABAgAAABFwZXJtaXNzaW9uIGRlbmllZAQAAAAHJG1hdGNoMAkBAAAAFm1hbmFnZXJQdWJsaWNLZXlPclVuaXQAAAAAAwkAAAEAAAACBQAAAAckbWF0Y2gwAgAAAApCeXRlVmVjdG9yBAAAAAJwawUAAAAHJG1hdGNoMAMJAAAAAAAAAggFAAAAAWkAAAAPY2FsbGVyUHVibGljS2V5BQAAAAJwawYFAAAAAnBkAwkAAAEAAAACBQAAAAckbWF0Y2gwAgAAAARVbml0AwkAAAAAAAACCAUAAAABaQAAAAZjYWxsZXIFAAAABHRoaXMGBQAAAAJwZAkAAAIAAAABAgAAAAtNYXRjaCBlcnJvcgEAAAAFYXNJbnQAAAABAAAAA3ZhbAQAAAAHJG1hdGNoMAUAAAADdmFsAwkAAAEAAAACBQAAAAckbWF0Y2gwAgAAAANJbnQEAAAABnZhbEludAUAAAAHJG1hdGNoMAUAAAAGdmFsSW50CQAAAgAAAAECAAAAG2ZhaWxlZCB0byBjYXN0IGludG8gSW50ZWdlcgAAAAgAAAABaQEAAAALY29uc3RydWN0b3IAAAAJAAAAFmFzc2V0c1N0b3JlQ29udHJhY3RQcm0AAAATdXNlclBvb2xDb250cmFjdFBybQAAABNib29zdGluZ0NvbnRyYWN0UHJtAAAAE2VtaXNzaW9uQ29udHJhY3RQcm0AAAAMZmVlQW1vdW50UHJtAAAADHd4QXNzZXRJZFBybQAAABF2b3RpbmdEdXJhdGlvblBybQAAAA51c2RuQXNzZXRJZFBybQAAABFmaW5hbGl6ZVJld2FyZFBybQQAAAAGY2hlY2tzCQAETAAAAAIJAQAAAAttdXN0TWFuYWdlcgAAAAEFAAAAAWkJAARMAAAAAgMJAQAAAAlpc0RlZmluZWQAAAABCQAEJgAAAAEFAAAAFmFzc2V0c1N0b3JlQ29udHJhY3RQcm0GCQAAAgAAAAECAAAAJEludmFsaWQgYXNzZXRfc3RvcmUgY29udHJhY3QgYWRkcmVzcwkABEwAAAACAwkBAAAACWlzRGVmaW5lZAAAAAEJAAQmAAAAAQUAAAATYm9vc3RpbmdDb250cmFjdFBybQYJAAACAAAAAQIAAAAhSW52YWxpZCBib29zdGluZyBjb250cmFjdCBhZGRyZXNzCQAETAAAAAIDCQEAAAAJaXNEZWZpbmVkAAAAAQkABCYAAAABBQAAABN1c2VyUG9vbENvbnRyYWN0UHJtBgkAAAIAAAABAgAAACNJbnZhbGlkIHVzZXJfcG9vbHMgY29udHJhY3QgYWRkcmVzcwkABEwAAAACAwkBAAAACWlzRGVmaW5lZAAAAAEJAAQmAAAAAQUAAAATZW1pc3Npb25Db250cmFjdFBybQYJAAACAAAAAQIAAAAhSW52YWxpZCBlbWlzc2lvbiBjb250cmFjdCBhZGRyZXNzCQAETAAAAAIDCQAAZwAAAAIFAAAADGZlZUFtb3VudFBybQAAAAAAAAAAAAYJAAACAAAAAQIAAAASSW52YWxpZCBmZWUgYW1vdW50CQAETAAAAAIDCQAAZgAAAAIFAAAAEXZvdGluZ0R1cmF0aW9uUHJtAAAAAAAAAAAABgkAAAIAAAABAgAAABdJbnZhbGlkIHZvdGluZyBkdXJhdGlvbgkABEwAAAACAwkAAGYAAAACBQAAABFmaW5hbGl6ZVJld2FyZFBybQAAAAAAAAAAAAYJAAACAAAAAQIAAAAXSW52YWxpZCBmaW5hbGl6ZSByZXdhcmQJAARMAAAAAgMJAQAAAAlpc0RlZmluZWQAAAABCQAD7AAAAAEJAAJZAAAAAQUAAAAMd3hBc3NldElkUHJtBgkAAAIAAAABAgAAABNJbnZhbGlkIFdYIGFzc2V0IElECQAETAAAAAIDCQEAAAAJaXNEZWZpbmVkAAAAAQkAA+wAAAABCQACWQAAAAEFAAAADnVzZG5Bc3NldElkUHJtBgkAAAIAAAABAgAAABVJbnZhbGlkIFVTRE4gYXNzZXQgSUQFAAAAA25pbAMJAAAAAAAAAgUAAAAGY2hlY2tzBQAAAAZjaGVja3MJAAUUAAAAAgkABEwAAAACCQEAAAALU3RyaW5nRW50cnkAAAACBQAAABZrZXlBc3NldHNTdG9yZUNvbnRyYWN0BQAAABZhc3NldHNTdG9yZUNvbnRyYWN0UHJtCQAETAAAAAIJAQAAAAtTdHJpbmdFbnRyeQAAAAIFAAAAE2tleVVzZXJQb29sQ29udHJhY3QFAAAAE3VzZXJQb29sQ29udHJhY3RQcm0JAARMAAAAAgkBAAAAC1N0cmluZ0VudHJ5AAAAAgUAAAATa2V5RW1pc3Npb25Db250cmFjdAUAAAATZW1pc3Npb25Db250cmFjdFBybQkABEwAAAACCQEAAAAMSW50ZWdlckVudHJ5AAAAAgUAAAAMa2V5RmVlQW1vdW50BQAAAAxmZWVBbW91bnRQcm0JAARMAAAAAgkBAAAADEludGVnZXJFbnRyeQAAAAIFAAAADmtleUVwb2NoTGVuZ3RoBQAAABF2b3RpbmdEdXJhdGlvblBybQkABEwAAAACCQEAAAAMSW50ZWdlckVudHJ5AAAAAgUAAAARa2V5RmluYWxpemVSZXdhcmQFAAAAEWZpbmFsaXplUmV3YXJkUHJtCQAETAAAAAIJAQAAAAtTdHJpbmdFbnRyeQAAAAIFAAAADGtleVd4QXNzZXRJZAUAAAAMd3hBc3NldElkUHJtCQAETAAAAAIJAQAAAAtTdHJpbmdFbnRyeQAAAAIFAAAADmtleVVzZG5Bc3NldElkBQAAAA51c2RuQXNzZXRJZFBybQkABEwAAAACCQEAAAALU3RyaW5nRW50cnkAAAACBQAAABNrZXlCb29zdGluZ0NvbnRyYWN0BQAAABNib29zdGluZ0NvbnRyYWN0UHJtBQAAAANuaWwFAAAABHVuaXQJAAACAAAAAQIAAAAkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuAAAAAWkBAAAAB3N1Z2dlc3QAAAACAAAADWFtb3VudEFzc2V0SWQAAAAMcHJpY2VBc3NldElkBAAAAAdwYXltZW50CQEAAAAFdmFsdWUAAAABCQABkQAAAAIIBQAAAAFpAAAACHBheW1lbnRzAAAAAAAAAAAABAAAAARpbmZvCQEAAAATdmFsdWVPckVycm9yTWVzc2FnZQAAAAIJAAPsAAAAAQkAAlkAAAABBQAAAA1hbW91bnRBc3NldElkAgAAABhpbnZhbGlkIGFtb3VudEFzc2V0SWQgSUQEAAAABmNoZWNrcwkABEwAAAACAwkAAAAAAAACCAUAAAAEaW5mbwAAAAZpc3N1ZXIIBQAAAAFpAAAABmNhbGxlcgYJAAACAAAAAQIAAAApYXNzZXQgY2FuIG9ubHkgYmUgc3VnZ2VzdGVkIGJ5IGl0cyBpc3N1ZXIJAARMAAAAAgMJAAAAAAAAAggFAAAABGluZm8AAAAIc2NyaXB0ZWQHBgkAAAIAAAABAgAAAA5hc3NldCBpcyBzbWFydAkABEwAAAACAwkAAAAAAAACCQACWAAAAAEJAQAAAAV2YWx1ZQAAAAEIBQAAAAdwYXltZW50AAAAB2Fzc2V0SWQJAQAAAAV2YWx1ZQAAAAEJAAQiAAAAAQUAAAAMa2V5V3hBc3NldElkBgkAAAIAAAABAgAAABFpbnZhbGlkIGZlZSBhc3NldAkABEwAAAACAwkAAAAAAAACCAUAAAAHcGF5bWVudAAAAAZhbW91bnQJAQAAAAV2YWx1ZQAAAAEJAAQfAAAAAQUAAAAMa2V5RmVlQW1vdW50BgkAAAIAAAABAgAAABJpbnZhbGlkIGZlZSBhbW91bnQJAARMAAAAAgMJAAAAAAAAAgUAAAAMcHJpY2VBc3NldElkCQEAAAAFdmFsdWUAAAABCQAEIgAAAAEFAAAADmtleVVzZG5Bc3NldElkBgkAAAIAAAABAgAAABhwcmljZUFzc2V0SWQgaXMgbm90IFVTRE4JAARMAAAAAgMJAAAAAAAAAgkABB8AAAABCQEAAAAQa2V5SW5MaXN0QXNzZXRJZAAAAAIFAAAADWFtb3VudEFzc2V0SWQFAAAADHByaWNlQXNzZXRJZAUAAAAEdW5pdAYJAAACAAAAAQIAAAAWYWxyZWFkeSBpbiB2b3RpbmcgbGlzdAUAAAADbmlsAwkAAAAAAAACBQAAAAZjaGVja3MFAAAABmNoZWNrcwQAAAAMZW5zdXJlQWN0aXZlBAAAAAckbWF0Y2gwCQAD/AAAAAQFAAAAEHVzZXJQb29sQ29udHJhY3QCAAAADnN0YXR1c1JFQURPTkxZCQAETAAAAAIFAAAADWFtb3VudEFzc2V0SWQJAARMAAAAAgUAAAAMcHJpY2VBc3NldElkBQAAAANuaWwFAAAAA25pbAMJAAABAAAAAgUAAAAHJG1hdGNoMAIAAAAGU3RyaW5nBAAAAAFzBQAAAAckbWF0Y2gwAwkAAAAAAAACBQAAAAFzAgAAAAZhY3RpdmUGCQAAAgAAAAECAAAAF3VzZXIgcG9vbCBpcyBub3QgYWN0aXZlCQAAAgAAAAECAAAAF3VzZXIgcG9vbCBpcyBub3QgYWN0aXZlAwkAAAAAAAACBQAAAAxlbnN1cmVBY3RpdmUFAAAADGVuc3VyZUFjdGl2ZQQAAAAZZW5zdXJlQW1vdW50QXNzZXRWZXJpZmllZAQAAAAHJG1hdGNoMAkAA/wAAAAEBQAAABNhc3NldHNTdG9yZUNvbnRyYWN0AgAAABJpc1ZlcmlmaWVkUkVBRE9OTFkJAARMAAAAAgUAAAANYW1vdW50QXNzZXRJZAUAAAADbmlsBQAAAANuaWwDCQAAAQAAAAIFAAAAByRtYXRjaDACAAAAB0Jvb2xlYW4EAAAAAWIFAAAAByRtYXRjaDADBQAAAAFiBgkAAAIAAAABAgAAABVhc3NldCBpcyBub3QgdmVyaWZpZWQJAAACAAAAAQIAAAAVYXNzZXQgaXMgbm90IHZlcmlmaWVkAwkAAAAAAAACBQAAABllbnN1cmVBbW91bnRBc3NldFZlcmlmaWVkBQAAABllbnN1cmVBbW91bnRBc3NldFZlcmlmaWVkBAAAAApidXJuRmVlSW52CQAD/AAAAAQFAAAAEGVtaXNzaW9uQ29udHJhY3QCAAAABGJ1cm4FAAAAA25pbAkABEwAAAACCQEAAAAPQXR0YWNoZWRQYXltZW50AAAAAggFAAAAB3BheW1lbnQAAAAHYXNzZXRJZAgFAAAAB3BheW1lbnQAAAAGYW1vdW50BQAAAANuaWwDCQAAAAAAAAIFAAAACmJ1cm5GZWVJbnYFAAAACmJ1cm5GZWVJbnYEAAAAD25ld1N1Z2dlc3RJbmRleAQAAAAHJG1hdGNoMAkABB8AAAABCQEAAAAPa2V5U3VnZ2VzdEluZGV4AAAAAgUAAAANYW1vdW50QXNzZXRJZAUAAAAMcHJpY2VBc3NldElkAwkAAAEAAAACBQAAAAckbWF0Y2gwAgAAAANJbnQEAAAAA2ludAUAAAAHJG1hdGNoMAkAAGQAAAACBQAAAANpbnQAAAAAAAAAAAEAAAAAAAAAAAAJAAUUAAAAAgkABEwAAAACCQEAAAAMSW50ZWdlckVudHJ5AAAAAgkBAAAAEGtleUluTGlzdEFzc2V0SWQAAAACBQAAAA1hbW91bnRBc3NldElkBQAAAAxwcmljZUFzc2V0SWQFAAAAD25ld1N1Z2dlc3RJbmRleAkABEwAAAACCQEAAAAMSW50ZWdlckVudHJ5AAAAAgkBAAAADmtleVN0YXJ0SGVpZ2h0AAAAAwUAAAANYW1vdW50QXNzZXRJZAUAAAAMcHJpY2VBc3NldElkBQAAAA9uZXdTdWdnZXN0SW5kZXgFAAAABmhlaWdodAkABEwAAAACCQEAAAALU3RyaW5nRW50cnkAAAACCQEAAAAPa2V5Vm90aW5nUmVzdWx0AAAAAwUAAAANYW1vdW50QXNzZXRJZAUAAAAMcHJpY2VBc3NldElkBQAAAA9uZXdTdWdnZXN0SW5kZXgJAQAAAAp0b3RhbFZvdGVzAAAAAgIAAAABMAIAAAABMAkABEwAAAACCQEAAAAMSW50ZWdlckVudHJ5AAAAAgkBAAAAD2tleVN1Z2dlc3RJbmRleAAAAAIFAAAADWFtb3VudEFzc2V0SWQFAAAADHByaWNlQXNzZXRJZAUAAAAPbmV3U3VnZ2VzdEluZGV4BQAAAANuaWwFAAAABHVuaXQJAAACAAAAAQIAAAAkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuCQAAAgAAAAECAAAAJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgkAAAIAAAABAgAAACRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4JAAACAAAAAQIAAAAkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuAAAAAWkBAAAABHZvdGUAAAADAAAADWFtb3VudEFzc2V0SWQAAAAMcHJpY2VBc3NldElkAAAAB2luRmF2b3IEAAAADHN1Z2dlc3RJbmRleAkBAAAABXZhbHVlAAAAAQkABB8AAAABCQEAAAAQa2V5SW5MaXN0QXNzZXRJZAAAAAIFAAAADWFtb3VudEFzc2V0SWQFAAAADHByaWNlQXNzZXRJZAQAAAASdm90aW5nRmluaXNoSGVpZ2h0CQAAZAAAAAIJAQAAAAV2YWx1ZQAAAAEJAAQfAAAAAQkBAAAADmtleVN0YXJ0SGVpZ2h0AAAAAwUAAAANYW1vdW50QXNzZXRJZAUAAAAMcHJpY2VBc3NldElkBQAAAAxzdWdnZXN0SW5kZXgJAQAAAAV2YWx1ZQAAAAEJAAQfAAAAAQUAAAAOa2V5RXBvY2hMZW5ndGgEAAAABmNoZWNrcwkABEwAAAACAwkBAAAACWlzRGVmaW5lZAAAAAEJAAQfAAAAAQkBAAAAEGtleUluTGlzdEFzc2V0SWQAAAACBQAAAA1hbW91bnRBc3NldElkBQAAAAxwcmljZUFzc2V0SWQGCQAAAgAAAAECAAAAInRoZSB0b2tlbiBpc24ndCBvbiB0aGUgdm90aW5nIGxpc3QJAARMAAAAAgMJAABmAAAAAgUAAAASdm90aW5nRmluaXNoSGVpZ2h0BQAAAAZoZWlnaHQGCQAAAgAAAAECAAAAEHRvbyBsYXRlIHRvIHZvdGUFAAAAA25pbAMJAAAAAAAAAgUAAAAGY2hlY2tzBQAAAAZjaGVja3MEAAAACWd3eEFtb3VudAkAA/wAAAAEBQAAABBib29zdGluZ0NvbnRyYWN0AgAAACBnZXRVc2VyR3d4QW1vdW50QXRIZWlnaHRSRUFET05MWQkABEwAAAACCQAEJQAAAAEIBQAAAAFpAAAABmNhbGxlcgkABEwAAAACBQAAABJ2b3RpbmdGaW5pc2hIZWlnaHQFAAAAA25pbAUAAAADbmlsBAAAAAdub3RaZXJvAwkAAGYAAAACCQEAAAAFYXNJbnQAAAABBQAAAAlnd3hBbW91bnQAAAAAAAAAAAAGCQAAAgAAAAECAAAAEnlvdSBkb24ndCBoYXZlIGd3eAMJAAAAAAAAAgUAAAAHbm90WmVybwUAAAAHbm90WmVybwQAAAAEdm90ZQQAAAAHJG1hdGNoMAkABCIAAAABCQEAAAAHa2V5Vm90ZQAAAAQFAAAADWFtb3VudEFzc2V0SWQFAAAADHByaWNlQXNzZXRJZAUAAAAMc3VnZ2VzdEluZGV4CQAEJQAAAAEIBQAAAAFpAAAABmNhbGxlcgMJAAABAAAAAgUAAAAHJG1hdGNoMAIAAAAGU3RyaW5nBAAAAAFzBQAAAAckbWF0Y2gwBAAAAAR2b3RlCQAEtQAAAAIFAAAAAXMFAAAACXNlcGFyYXRvcgQAAAAJdm90ZVZhbHVlCQABkQAAAAIFAAAABHZvdGUAAAAAAAAAAAEEAAAACHZvdGVUeXBlCQABkQAAAAIFAAAABHZvdGUAAAAAAAAAAAIEAAAAEWlzVm90ZVR5cGVTaW1pbGFyAwMDCQAAAAAAAAIFAAAACHZvdGVUeXBlAgAAAAN5ZXMJAAAAAAAAAgUAAAAHaW5GYXZvcgYHBgMJAAAAAAAAAgUAAAAIdm90ZVR5cGUCAAAAAm5vCQAAAAAAAAIFAAAAB2luRmF2b3IHBwYHBAAAABJpc1ZvdGVWYWx1ZVNpbWlsYXIDAwUAAAARaXNWb3RlVHlwZVNpbWlsYXIJAAAAAAAAAgkBAAAABWFzSW50AAAAAQUAAAAJZ3d4QW1vdW50CQEAAAANcGFyc2VJbnRWYWx1ZQAAAAEFAAAACXZvdGVWYWx1ZQcGBwQAAAAQaXNOZXdWb3RlU2ltaWxhcgMDBQAAABFpc1ZvdGVUeXBlU2ltaWxhcgUAAAASaXNWb3RlVmFsdWVTaW1pbGFyBwkAAAIAAAABAgAAABF5b3UgYWxyZWFkeSB2b3RlZAkAA/wAAAAEBQAAAAR0aGlzAgAAAApjYW5jZWxWb3RlCQAETAAAAAIFAAAADWFtb3VudEFzc2V0SWQJAARMAAAAAgUAAAAMcHJpY2VBc3NldElkBQAAAANuaWwFAAAAA25pbAUAAAAQaXNOZXdWb3RlU2ltaWxhcgMJAAABAAAAAgUAAAAHJG1hdGNoMAIAAAAEVW5pdAQAAAABdQUAAAAHJG1hdGNoMAUAAAABdQkAAAIAAAABAgAAAAtNYXRjaCBlcnJvcgMJAAAAAAAAAgUAAAAEdm90ZQUAAAAEdm90ZQQAAAAMdm90aW5nUmVzdWx0CQAEtQAAAAIJAQAAAAV2YWx1ZQAAAAEJAAQiAAAAAQkBAAAAD2tleVZvdGluZ1Jlc3VsdAAAAAMFAAAADWFtb3VudEFzc2V0SWQFAAAADHByaWNlQXNzZXRJZAUAAAAMc3VnZ2VzdEluZGV4BQAAAAlzZXBhcmF0b3IEAAAADXBvc2l0aXZlVm90ZXMJAAGRAAAAAgUAAAAMdm90aW5nUmVzdWx0AAAAAAAAAAABBAAAAA1uZWdhdGl2ZVZvdGVzCQABkQAAAAIFAAAADHZvdGluZ1Jlc3VsdAAAAAAAAAAAAgQAAAAbbmV3UG9zaXRpdmVBbmROZWdhdGl2ZVZvdGVzAwUAAAAHaW5GYXZvcgQAAAAQbmV3UG9zaXRpdmVWb3RlcwkAAGQAAAACCQEAAAANcGFyc2VJbnRWYWx1ZQAAAAEFAAAADXBvc2l0aXZlVm90ZXMJAQAAAAVhc0ludAAAAAEFAAAACWd3eEFtb3VudAkABEwAAAACCQABpAAAAAEFAAAAEG5ld1Bvc2l0aXZlVm90ZXMJAARMAAAAAgUAAAANbmVnYXRpdmVWb3RlcwUAAAADbmlsBAAAABBuZXdOZWdhdGl2ZVZvdGVzCQAAZAAAAAIJAQAAAA1wYXJzZUludFZhbHVlAAAAAQUAAAANbmVnYXRpdmVWb3RlcwkBAAAABWFzSW50AAAAAQUAAAAJZ3d4QW1vdW50CQAETAAAAAIFAAAADXBv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Z0VudHJ5AAAAAgkBAAAAD2tleVZvdGluZ1Jlc3VsdAAAAAMFAAAADWFtb3VudEFzc2V0SWQFAAAADHByaWNlQXNzZXRJZAUAAAAMc3VnZ2VzdEluZGV4CQEAAAAKdG90YWxWb3RlcwAAAAIJAAGkAAAAAQUAAAAQbmV3UG9zaXRpdmVWb3RlcwUAAAANbmVnYXRpdmVWb3RlcwkABEwAAAACCQEAAAALRGVsZXRlRW50cnkAAAABCQEAAAAHa2V5Vm90ZQAAAAQFAAAADWFtb3VudEFzc2V0SWQFAAAADHByaWNlQXNzZXRJZAUAAAAMc3VnZ2VzdEluZGV4BQAAAAt1c2VyQWRkcmVzcwUAAAADbmlsBQAAAAR1bml0BAAAABBuZXdOZWdhdGl2ZVZvdGVzCQAAZQAAAAIJAQAAAA1wYXJzZUludFZhbHVlAAAAAQUAAAANbmVnYXRpdmVWb3RlcwkBAAAADXBhcnNlSW50VmFsdWUAAAABBQAAAAl2b3RlVmFsdWUJAAUUAAAAAgkABEwAAAACCQEAAAALU3RyaW5nRW50cnkAAAACCQEAAAAPa2V5Vm90aW5nUmVzdWx0AAAAAwUAAAANYW1vdW50QXNzZXRJZAUAAAAMcHJpY2VBc3NldElkBQAAAAxzdWdnZXN0SW5kZXgJAQAAAAp0b3RhbFZvdGVzAAAAAgUAAAANcG9zaXRpdmVWb3RlcwkAAaQAAAABBQAAABBuZXdOZWdhdGl2ZVZvdGVzCQAETAAAAAIJAQAAAAtEZWxldGVFbnRyeQAAAAEJAQAAAAdrZXlWb3RlAAAABAUAAAANYW1vdW50QXNzZXRJZAUAAAAMcHJpY2VBc3NldElkBQAAAAxzdWdnZXN0SW5kZXgFAAAAC3VzZXJBZGRyZXNzBQAAAANuaWwFAAAABHVuaXQFAAAAB2FjdGlvbnMJAAACAAAAAQIAAAAkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuAAAAAWkBAAAABnNldEZlZQAAAAEAAAAGbmV3RmVlBAAAAAZjaGVja3MJAARMAAAAAgkBAAAAC211c3RNYW5hZ2VyAAAAAQUAAAABaQUAAAADbmlsAwkAAAAAAAACBQAAAAZjaGVja3MFAAAABmNoZWNrcwkABEwAAAACCQEAAAAMSW50ZWdlckVudHJ5AAAAAgUAAAAMa2V5RmVlQW1vdW50BQAAAAZuZXdGZWUFAAAAA25pbAkAAAIAAAABAgAAACRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4AAAABaQEAAAAIZmluYWxpemUAAAACAAAADWFtb3VudEFzc2V0SWQAAAAMcHJpY2VBc3NldElkBAAAAAxzdWdnZXN0SW5kZXgJAQAAAAV2YWx1ZQAAAAEJAAQfAAAAAQkBAAAAEGtleUluTGlzdEFzc2V0SWQAAAACBQAAAA1hbW91bnRBc3NldElkBQAAAAxwcmljZUFzc2V0SWQEAAAAEnZvdGluZ0ZpbmlzaEhlaWdodAkAAGQAAAACCQEAAAAFdmFsdWUAAAABCQAEHwAAAAEJAQAAAA5rZXlTdGFydEhlaWdodAAAAAMFAAAADWFtb3VudEFzc2V0SWQFAAAADHByaWNlQXNzZXRJZAUAAAAMc3VnZ2VzdEluZGV4CQEAAAAFdmFsdWUAAAABCQAEHwAAAAEFAAAADmtleUVwb2NoTGVuZ3RoBAAAAAZjaGVja3MJAARMAAAAAgMJAQAAAAlpc0RlZmluZWQAAAABCQAEHwAAAAEJAQAAABBrZXlJbkxpc3RBc3NldElkAAAAAgUAAAANYW1vdW50QXNzZXRJZAUAAAAMcHJpY2VBc3NldElkBgkAAAIAAAABAgAAAA5ubyBhc3NldHMgcGFpcgkABEwAAAACAwkAAGcAAAACBQAAAAZoZWlnaHQFAAAAEnZvdGluZ0ZpbmlzaEhlaWdodAYJAAACAAAAAQIAAAAiaW5zdWZmaWNpZW50IGhlaWdodCBmb3IgY29tcGxldGlvbgUAAAADbmlsAwkAAAAAAAACBQAAAAZjaGVja3MFAAAABmNoZWNrcwQAAAAMdm90aW5nUmVzdWx0CQAEtQAAAAIJAQAAAAV2YWx1ZQAAAAEJAAQiAAAAAQkBAAAAD2tleVZvdGluZ1Jlc3VsdAAAAAMFAAAADWFtb3VudEFzc2V0SWQFAAAADHByaWNlQXNzZXRJZAUAAAAMc3VnZ2VzdEluZGV4BQAAAAlzZXBhcmF0b3IEAAAADXBvc2l0aXZlVm90ZXMJAQAAAA1wYXJzZUludFZhbHVlAAAAAQkAAZEAAAACBQAAAAx2b3RpbmdSZXN1bHQAAAAAAAAAAAEEAAAADW5lZ2F0aXZlVm90ZXMJAQAAAA1wYXJzZUludFZhbHVlAAAAAQkAAZEAAAACBQAAAAx2b3RpbmdSZXN1bHQAAAAAAAAAAAIEAAAAB2FjdGlvbnMDCQAAZgAAAAIFAAAADXBvc2l0aXZlVm90ZXMFAAAADW5lZ2F0aXZlVm90ZXMEAAAAA3JlcwkAA/wAAAAEBQAAABNhc3NldHNTdG9yZUNvbnRyYWN0AgAAAA1zZXRQb29sTGFiZWxzCQAETAAAAAIFAAAADWFtb3VudEFzc2V0SWQJAARMAAAAAgUAAAAMcHJpY2VBc3NldElkCQAETAAAAAICAAAAC1dYX0VNSVNTSU9OBQAAAANuaWwFAAAAA25pbAMJAAAAAAAAAgUAAAADcmVzBQAAAANyZXMJAAUUAAAAAgkABEwAAAACCQEAAAALRGVsZXRlRW50cnkAAAABCQEAAAAQa2V5SW5MaXN0QXNzZXRJZAAAAAIFAAAADWFtb3VudEFzc2V0SWQFAAAADHByaWNlQXNzZXRJZAUAAAADbmlsBQAAAAR1bml0CQAAAgAAAAECAAAAJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgkABRQAAAACCQAETAAAAAIJAQAAAAtEZWxldGVFbnRyeQAAAAEJAQAAABBrZXlJbkxpc3RBc3NldElkAAAAAgUAAAANYW1vdW50QXNzZXRJZAUAAAAMcHJpY2VBc3NldElkBQAAAANuaWwFAAAABHVuaXQFAAAAB2FjdGlvbnMJAAACAAAAAQIAAAAkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuAAAAAWkBAAAACnNldE1hbmFnZXIAAAABAAAAF3BlbmRpbmdNYW5hZ2VyUHVibGljS2V5BAAAAAtjaGVja0NhbGxlcgkBAAAAC211c3RNYW5hZ2VyAAAAAQUAAAABaQMJAAAAAAAAAgUAAAALY2hlY2tDYWxsZXIFAAAAC2NoZWNrQ2FsbGVyBAAAABVjaGVja01hbmFnZXJQdWJsaWNLZXkJAAJZAAAAAQUAAAAXcGVuZGluZ01hbmFnZXJQdWJsaWNLZXkDCQAAAAAAAAIFAAAAFWNoZWNrTWFuYWdlclB1YmxpY0tleQUAAAAVY2hlY2tNYW5hZ2VyUHVibGljS2V5CQAETAAAAAIJAQAAAAtTdHJpbmdFbnRyeQAAAAIJAQAAABprZXlQZW5kaW5nTWFuYWdlclB1YmxpY0tleQAAAAAFAAAAF3BlbmRpbmdNYW5hZ2VyUHVibGljS2V5BQAAAANuaWwJAAACAAAAAQIAAAAkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuCQAAAgAAAAECAAAAJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgAAAAFpAQAAAA5jb25maXJtTWFuYWdlcgAAAAAEAAAAAnBtCQEAAAAdcGVuZGluZ01hbmFnZXJQdWJsaWNLZXlPclVuaXQAAAAABAAAAAVoYXNQTQMJAQAAAAlpc0RlZmluZWQAAAABBQAAAAJwbQYJAAACAAAAAQIAAAASbm8gcGVuZGluZyBtYW5hZ2VyAwkAAAAAAAACBQAAAAVoYXNQTQUAAAAFaGFzUE0EAAAAB2NoZWNrUE0DCQAAAAAAAAIIBQAAAAFpAAAAD2NhbGxlclB1YmxpY0tleQkBAAAABXZhbHVlAAAAAQUAAAACcG0GCQAAAgAAAAECAAAAG3lvdSBhcmUgbm90IHBlbmRpbmcgbWFuYWdlcgMJAAAAAAAAAgUAAAAHY2hlY2tQTQUAAAAHY2hlY2tQTQkABEwAAAACCQEAAAALU3RyaW5nRW50cnkAAAACCQEAAAATa2V5TWFuYWdlclB1YmxpY0tleQAAAAAJAAJYAAAAAQkBAAAABXZhbHVlAAAAAQUAAAACcG0JAARMAAAAAgkBAAAAC0RlbGV0ZUVudHJ5AAAAAQkBAAAAGmtleVBlbmRpbmdNYW5hZ2VyUHVibGljS2V5AAAAAAUAAAADbmlsCQAAAgAAAAECAAAAJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgkAAAIAAAABAgAAACRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4AAAABAAAAAnR4AQAAAAZ2ZXJpZnkAAAAABAAAAA90YXJnZXRQdWJsaWNLZXkEAAAAByRtYXRjaDAJAQAAABZtYW5hZ2VyUHVibGljS2V5T3JVbml0AAAAAAMJAAABAAAAAgUAAAAHJG1hdGNoMAIAAAAKQnl0ZVZlY3RvcgQAAAACcGsFAAAAByRtYXRjaDAFAAAAAnBrAwkAAAEAAAACBQAAAAckbWF0Y2gwAgAAAARVbml0CAUAAAACdHgAAAAPc2VuZGVyUHVibGljS2V5CQAAAgAAAAECAAAAC01hdGNoIGVycm9yCQAB9AAAAAMIBQAAAAJ0eAAAAAlib2R5Qnl0ZXMJAAGRAAAAAggFAAAAAnR4AAAABnByb29mcwAAAAAAAAAAAAUAAAAPdGFyZ2V0UHVibGljS2V57b3V9Q==", "chainId": 84, "height": 2059774, "applicationStatus": "succeeded", "spentComplexity": 0 } View: original | compacted Prev: AdTPk64M7wvLjiug8269xJzyxchgivYyKSphrxYhdDEE Next: 2qbdYvaYJucNDNUAeag6C62ML4nXautXnD2CqEwUpNN8 Diff:
OldNewDifferences
168168 then {
169169 let ensureAmountAssetVerified = match invoke(assetsStoreContract, "isVerifiedREADONLY", [amountAssetId], nil) {
170170 case b: Boolean =>
171- b
171+ if (b)
172+ then true
173+ else throw("asset is not verified")
172174 case _ =>
173175 throw("asset is not verified")
174176 }
Full:
OldNewDifferences
11 {-# STDLIB_VERSION 5 #-}
22 {-# SCRIPT_TYPE ACCOUNT #-}
33 {-# CONTENT_TYPE DAPP #-}
44 let separator = "__"
55
66 let keyFeeAmount = makeString(["%s", "fee"], separator)
77
88 let keyUsdnAssetId = makeString(["%s", "usdnAssetId"], separator)
99
1010 let keyEpochLength = makeString(["%s", "epochLength"], separator)
1111
1212 let keyFinalizeReward = makeString(["%s", "finalizeReward"], separator)
1313
1414 let keyWxAssetId = makeString(["%s", "wxAssetId"], separator)
1515
1616 let keyAssetsStoreContract = makeString(["%s", "assetsStoreContract"], separator)
1717
1818 let keyUserPoolContract = makeString(["%s", "userPoolContract"], separator)
1919
2020 let keyEmissionContract = makeString(["%s", "emissionContract"], separator)
2121
2222 let keyBoostingContract = makeString(["%s", "boostingContract"], separator)
2323
2424 func getStringOrFail (key) = valueOrErrorMessage(getString(this, key), (key + " is not defined"))
2525
2626
2727 func keyInListAssetId (amountAssetId,priceAssetId) = makeString(["%s%s%s", "inList", amountAssetId, priceAssetId], separator)
2828
2929
3030 func keySuggestIndex (amountAssetId,priceAssetId) = makeString(["%s%s%s", "suggestIndex", amountAssetId, priceAssetId], separator)
3131
3232
3333 func keyStartHeight (amountAssetId,priceAssetId,suggestIndex) = makeString(["%s%s%s%d", "startHeight", amountAssetId, priceAssetId, toString(suggestIndex)], separator)
3434
3535
3636 func keyVotingResult (amountAssetId,priceAssetId,suggestIndex) = makeString(["%s%s%s%d", "votingResult", amountAssetId, priceAssetId, toString(suggestIndex)], separator)
3737
3838
3939 func totalVotes (totalYes,totalNo) = makeString(["%d%d", totalYes, totalNo], separator)
4040
4141
4242 func keyVote (amountAssetId,priceAssetId,suggestIndex,voterAddress) = makeString(["%s%s%s%d%s", "vote", amountAssetId, priceAssetId, toString(suggestIndex), voterAddress], separator)
4343
4444
4545 func keyVoteValue (gwxAmount,vote) = {
4646 let key = if (vote)
4747 then makeString(["%d%s", gwxAmount, "yes"], separator)
4848 else makeString(["%d%s", gwxAmount, "no"], separator)
4949 key
5050 }
5151
5252
5353 func keyManagerPublicKey () = "%s__managerPublicKey"
5454
5555
5656 func keyPendingManagerPublicKey () = "%s__pendingManagerPublicKey"
5757
5858
5959 let emissionContract = addressFromStringValue(getStringOrFail(keyEmissionContract))
6060
6161 let userPoolContract = addressFromStringValue(getStringOrFail(keyUserPoolContract))
6262
6363 let boostingContract = addressFromStringValue(getStringOrFail(keyBoostingContract))
6464
6565 let assetsStoreContract = addressFromStringValue(getStringOrFail(keyAssetsStoreContract))
6666
6767 func managerPublicKeyOrUnit () = match getString(keyManagerPublicKey()) {
6868 case s: String =>
6969 fromBase58String(s)
7070 case _: Unit =>
7171 unit
7272 case _ =>
7373 throw("Match error")
7474 }
7575
7676
7777 func pendingManagerPublicKeyOrUnit () = match getString(keyPendingManagerPublicKey()) {
7878 case s: String =>
7979 fromBase58String(s)
8080 case _: Unit =>
8181 unit
8282 case _ =>
8383 throw("Match error")
8484 }
8585
8686
8787 func mustManager (i) = {
8888 let pd = throw("permission denied")
8989 match managerPublicKeyOrUnit() {
9090 case pk: ByteVector =>
9191 if ((i.callerPublicKey == pk))
9292 then true
9393 else pd
9494 case _: Unit =>
9595 if ((i.caller == this))
9696 then true
9797 else pd
9898 case _ =>
9999 throw("Match error")
100100 }
101101 }
102102
103103
104104 func asInt (val) = match val {
105105 case valInt: Int =>
106106 valInt
107107 case _ =>
108108 throw("failed to cast into Integer")
109109 }
110110
111111
112112 @Callable(i)
113113 func constructor (assetsStoreContractPrm,userPoolContractPrm,boostingContractPrm,emissionContractPrm,feeAmountPrm,wxAssetIdPrm,votingDurationPrm,usdnAssetIdPrm,finalizeRewardPrm) = {
114114 let checks = [mustManager(i), if (isDefined(addressFromString(assetsStoreContractPrm)))
115115 then true
116116 else throw("Invalid asset_store contract address"), if (isDefined(addressFromString(boostingContractPrm)))
117117 then true
118118 else throw("Invalid boosting contract address"), if (isDefined(addressFromString(userPoolContractPrm)))
119119 then true
120120 else throw("Invalid user_pools contract address"), if (isDefined(addressFromString(emissionContractPrm)))
121121 then true
122122 else throw("Invalid emission contract address"), if ((feeAmountPrm >= 0))
123123 then true
124124 else throw("Invalid fee amount"), if ((votingDurationPrm > 0))
125125 then true
126126 else throw("Invalid voting duration"), if ((finalizeRewardPrm > 0))
127127 then true
128128 else throw("Invalid finalize reward"), if (isDefined(assetInfo(fromBase58String(wxAssetIdPrm))))
129129 then true
130130 else throw("Invalid WX asset ID"), if (isDefined(assetInfo(fromBase58String(usdnAssetIdPrm))))
131131 then true
132132 else throw("Invalid USDN asset ID")]
133133 if ((checks == checks))
134134 then $Tuple2([StringEntry(keyAssetsStoreContract, assetsStoreContractPrm), StringEntry(keyUserPoolContract, userPoolContractPrm), StringEntry(keyEmissionContract, emissionContractPrm), IntegerEntry(keyFeeAmount, feeAmountPrm), IntegerEntry(keyEpochLength, votingDurationPrm), IntegerEntry(keyFinalizeReward, finalizeRewardPrm), StringEntry(keyWxAssetId, wxAssetIdPrm), StringEntry(keyUsdnAssetId, usdnAssetIdPrm), StringEntry(keyBoostingContract, boostingContractPrm)], unit)
135135 else throw("Strict value is not equal to itself.")
136136 }
137137
138138
139139
140140 @Callable(i)
141141 func suggest (amountAssetId,priceAssetId) = {
142142 let payment = value(i.payments[0])
143143 let info = valueOrErrorMessage(assetInfo(fromBase58String(amountAssetId)), "invalid amountAssetId ID")
144144 let checks = [if ((info.issuer == i.caller))
145145 then true
146146 else throw("asset can only be suggested by its issuer"), if ((info.scripted == false))
147147 then true
148148 else throw("asset is smart"), if ((toBase58String(value(payment.assetId)) == value(getString(keyWxAssetId))))
149149 then true
150150 else throw("invalid fee asset"), if ((payment.amount == value(getInteger(keyFeeAmount))))
151151 then true
152152 else throw("invalid fee amount"), if ((priceAssetId == value(getString(keyUsdnAssetId))))
153153 then true
154154 else throw("priceAssetId is not USDN"), if ((getInteger(keyInListAssetId(amountAssetId, priceAssetId)) == unit))
155155 then true
156156 else throw("already in voting list")]
157157 if ((checks == checks))
158158 then {
159159 let ensureActive = match invoke(userPoolContract, "statusREADONLY", [amountAssetId, priceAssetId], nil) {
160160 case s: String =>
161161 if ((s == "active"))
162162 then true
163163 else throw("user pool is not active")
164164 case _ =>
165165 throw("user pool is not active")
166166 }
167167 if ((ensureActive == ensureActive))
168168 then {
169169 let ensureAmountAssetVerified = match invoke(assetsStoreContract, "isVerifiedREADONLY", [amountAssetId], nil) {
170170 case b: Boolean =>
171- b
171+ if (b)
172+ then true
173+ else throw("asset is not verified")
172174 case _ =>
173175 throw("asset is not verified")
174176 }
175177 if ((ensureAmountAssetVerified == ensureAmountAssetVerified))
176178 then {
177179 let burnFeeInv = invoke(emissionContract, "burn", nil, [AttachedPayment(payment.assetId, payment.amount)])
178180 if ((burnFeeInv == burnFeeInv))
179181 then {
180182 let newSuggestIndex = match getInteger(keySuggestIndex(amountAssetId, priceAssetId)) {
181183 case int: Int =>
182184 (int + 1)
183185 case _ =>
184186 0
185187 }
186188 $Tuple2([IntegerEntry(keyInListAssetId(amountAssetId, priceAssetId), newSuggestIndex), IntegerEntry(keyStartHeight(amountAssetId, priceAssetId, newSuggestIndex), height), StringEntry(keyVotingResult(amountAssetId, priceAssetId, newSuggestIndex), totalVotes("0", "0")), IntegerEntry(keySuggestIndex(amountAssetId, priceAssetId), newSuggestIndex)], unit)
187189 }
188190 else throw("Strict value is not equal to itself.")
189191 }
190192 else throw("Strict value is not equal to itself.")
191193 }
192194 else throw("Strict value is not equal to itself.")
193195 }
194196 else throw("Strict value is not equal to itself.")
195197 }
196198
197199
198200
199201 @Callable(i)
200202 func vote (amountAssetId,priceAssetId,inFavor) = {
201203 let suggestIndex = value(getInteger(keyInListAssetId(amountAssetId, priceAssetId)))
202204 let votingFinishHeight = (value(getInteger(keyStartHeight(amountAssetId, priceAssetId, suggestIndex))) + value(getInteger(keyEpochLength)))
203205 let checks = [if (isDefined(getInteger(keyInListAssetId(amountAssetId, priceAssetId))))
204206 then true
205207 else throw("the token isn't on the voting list"), if ((votingFinishHeight > height))
206208 then true
207209 else throw("too late to vote")]
208210 if ((checks == checks))
209211 then {
210212 let gwxAmount = invoke(boostingContract, "getUserGwxAmountAtHeightREADONLY", [toString(i.caller), votingFinishHeight], nil)
211213 let notZero = if ((asInt(gwxAmount) > 0))
212214 then true
213215 else throw("you don't have gwx")
214216 if ((notZero == notZero))
215217 then {
216218 let vote = match getString(keyVote(amountAssetId, priceAssetId, suggestIndex, toString(i.caller))) {
217219 case s: String =>
218220 let vote = split(s, separator)
219221 let voteValue = vote[1]
220222 let voteType = vote[2]
221223 let isVoteTypeSimilar = if (if (if ((voteType == "yes"))
222224 then (inFavor == true)
223225 else false)
224226 then true
225227 else if ((voteType == "no"))
226228 then (inFavor == false)
227229 else false)
228230 then true
229231 else false
230232 let isVoteValueSimilar = if (if (isVoteTypeSimilar)
231233 then (asInt(gwxAmount) == parseIntValue(voteValue))
232234 else false)
233235 then true
234236 else false
235237 let isNewVoteSimilar = if (if (isVoteTypeSimilar)
236238 then isVoteValueSimilar
237239 else false)
238240 then throw("you already voted")
239241 else invoke(this, "cancelVote", [amountAssetId, priceAssetId], nil)
240242 isNewVoteSimilar
241243 case u: Unit =>
242244 u
243245 case _ =>
244246 throw("Match error")
245247 }
246248 if ((vote == vote))
247249 then {
248250 let votingResult = split(value(getString(keyVotingResult(amountAssetId, priceAssetId, suggestIndex))), separator)
249251 let positiveVotes = votingResult[1]
250252 let negativeVotes = votingResult[2]
251253 let newPositiveAndNegativeVotes = if (inFavor)
252254 then {
253255 let newPositiveVotes = (parseIntValue(positiveVotes) + asInt(gwxAmount))
254256 [toString(newPositiveVotes), negativeVotes]
255257 }
256258 else {
257259 let newNegativeVotes = (parseIntValue(negativeVotes) + asInt(gwxAmount))
258260 [positiveVotes, toString(newNegativeVotes)]
259261 }
260262 let voteKey = keyVote(amountAssetId, priceAssetId, suggestIndex, toString(i.caller))
261263 let voteValue = keyVoteValue(toString(asInt(gwxAmount)), inFavor)
262264 $Tuple2([StringEntry(keyVotingResult(amountAssetId, priceAssetId, suggestIndex), totalVotes(newPositiveAndNegativeVotes[0], newPositiveAndNegativeVotes[1])), StringEntry(voteKey, voteValue)], unit)
263265 }
264266 else throw("Strict value is not equal to itself.")
265267 }
266268 else throw("Strict value is not equal to itself.")
267269 }
268270 else throw("Strict value is not equal to itself.")
269271 }
270272
271273
272274
273275 @Callable(i)
274276 func cancelVote (amountAssetId,priceAssetId) = {
275277 let userAddress = if ((i.caller == this))
276278 then toString(i.originCaller)
277279 else toString(i.caller)
278280 let suggestIndex = value(getInteger(keyInListAssetId(amountAssetId, priceAssetId)))
279281 let checks = [if (isDefined(getString(keyVotingResult(amountAssetId, priceAssetId, suggestIndex))))
280282 then true
281283 else throw("no vote for assets pair")]
282284 if ((checks == checks))
283285 then {
284286 let vote = split(value(getString(keyVote(amountAssetId, priceAssetId, suggestIndex, userAddress))), separator)
285287 let voteValue = vote[1]
286288 let voteType = vote[2]
287289 let votingResult = split(value(getString(keyVotingResult(amountAssetId, priceAssetId, suggestIndex))), separator)
288290 let positiveVotes = votingResult[1]
289291 let negativeVotes = votingResult[2]
290292 let actions = if ((voteType == "yes"))
291293 then {
292294 let newPositiveVotes = (parseIntValue(positiveVotes) - parseIntValue(voteValue))
293295 $Tuple2([StringEntry(keyVotingResult(amountAssetId, priceAssetId, suggestIndex), totalVotes(toString(newPositiveVotes), negativeVotes)), DeleteEntry(keyVote(amountAssetId, priceAssetId, suggestIndex, userAddress))], unit)
294296 }
295297 else {
296298 let newNegativeVotes = (parseIntValue(negativeVotes) - parseIntValue(voteValue))
297299 $Tuple2([StringEntry(keyVotingResult(amountAssetId, priceAssetId, suggestIndex), totalVotes(positiveVotes, toString(newNegativeVotes))), DeleteEntry(keyVote(amountAssetId, priceAssetId, suggestIndex, userAddress))], unit)
298300 }
299301 actions
300302 }
301303 else throw("Strict value is not equal to itself.")
302304 }
303305
304306
305307
306308 @Callable(i)
307309 func setFee (newFee) = {
308310 let checks = [mustManager(i)]
309311 if ((checks == checks))
310312 then [IntegerEntry(keyFeeAmount, newFee)]
311313 else throw("Strict value is not equal to itself.")
312314 }
313315
314316
315317
316318 @Callable(i)
317319 func finalize (amountAssetId,priceAssetId) = {
318320 let suggestIndex = value(getInteger(keyInListAssetId(amountAssetId, priceAssetId)))
319321 let votingFinishHeight = (value(getInteger(keyStartHeight(amountAssetId, priceAssetId, suggestIndex))) + value(getInteger(keyEpochLength)))
320322 let checks = [if (isDefined(getInteger(keyInListAssetId(amountAssetId, priceAssetId))))
321323 then true
322324 else throw("no assets pair"), if ((height >= votingFinishHeight))
323325 then true
324326 else throw("insufficient height for completion")]
325327 if ((checks == checks))
326328 then {
327329 let votingResult = split(value(getString(keyVotingResult(amountAssetId, priceAssetId, suggestIndex))), separator)
328330 let positiveVotes = parseIntValue(votingResult[1])
329331 let negativeVotes = parseIntValue(votingResult[2])
330332 let actions = if ((positiveVotes > negativeVotes))
331333 then {
332334 let res = invoke(assetsStoreContract, "setPoolLabels", [amountAssetId, priceAssetId, "WX_EMISSION"], nil)
333335 if ((res == res))
334336 then $Tuple2([DeleteEntry(keyInListAssetId(amountAssetId, priceAssetId))], unit)
335337 else throw("Strict value is not equal to itself.")
336338 }
337339 else $Tuple2([DeleteEntry(keyInListAssetId(amountAssetId, priceAssetId))], unit)
338340 actions
339341 }
340342 else throw("Strict value is not equal to itself.")
341343 }
342344
343345
344346
345347 @Callable(i)
346348 func setManager (pendingManagerPublicKey) = {
347349 let checkCaller = mustManager(i)
348350 if ((checkCaller == checkCaller))
349351 then {
350352 let checkManagerPublicKey = fromBase58String(pendingManagerPublicKey)
351353 if ((checkManagerPublicKey == checkManagerPublicKey))
352354 then [StringEntry(keyPendingManagerPublicKey(), pendingManagerPublicKey)]
353355 else throw("Strict value is not equal to itself.")
354356 }
355357 else throw("Strict value is not equal to itself.")
356358 }
357359
358360
359361
360362 @Callable(i)
361363 func confirmManager () = {
362364 let pm = pendingManagerPublicKeyOrUnit()
363365 let hasPM = if (isDefined(pm))
364366 then true
365367 else throw("no pending manager")
366368 if ((hasPM == hasPM))
367369 then {
368370 let checkPM = if ((i.callerPublicKey == value(pm)))
369371 then true
370372 else throw("you are not pending manager")
371373 if ((checkPM == checkPM))
372374 then [StringEntry(keyManagerPublicKey(), toBase58String(value(pm))), DeleteEntry(keyPendingManagerPublicKey())]
373375 else throw("Strict value is not equal to itself.")
374376 }
375377 else throw("Strict value is not equal to itself.")
376378 }
377379
378380
379381 @Verifier(tx)
380382 func verify () = {
381383 let targetPublicKey = match managerPublicKeyOrUnit() {
382384 case pk: ByteVector =>
383385 pk
384386 case _: Unit =>
385387 tx.senderPublicKey
386388 case _ =>
387389 throw("Match error")
388390 }
389391 sigVerify(tx.bodyBytes, tx.proofs[0], targetPublicKey)
390392 }
391393

github/deemru/w8io/026f985 
50.63 ms