tx · 6HpQ5VSxDgKF4Jd3PzNpGoZyuYbFUfxhYt7VLjoJJENz

3MqV2hxYA4F3eyVzMPfpPXkmvQMVjhWJ2Zz:  -0.01400000 Waves

2022.10.20 11:14 [2280469] smart account 3MqV2hxYA4F3eyVzMPfpPXkmvQMVjhWJ2Zz > SELF 0.00000000 Waves

{ "type": 13, "id": "6HpQ5VSxDgKF4Jd3PzNpGoZyuYbFUfxhYt7VLjoJJENz", "fee": 1400000, "feeAssetId": null, "timestamp": 1666253780156, "version": 1, "sender": "3MqV2hxYA4F3eyVzMPfpPXkmvQMVjhWJ2Zz", "senderPublicKey": "E7cYpzqL1fF9VQjL3m4zr3xXfV289rCkrfE2fJyAHMqR", "proofs": [ "FtoVBKQrKYkuUbZGTczCx74YEnX7jD49GWxVY4Ytvx9KjCDYzRLAc1Rxi1W5QAuJN6NogLAq7hnXhxEHqUSSQBp" ], "script": "base64:AAIFAAAAAAAAA/UIAhIDCgEIEgASBAoCCAESAwoBCBIDCgEIEgASAwoBCBIDCgEIEgMKAQgSACIDU0VQIhNrZXlNYW5hZ2VyUHVibGljS2V5IhprZXlQZW5kaW5nTWFuYWdlclB1YmxpY0tleSIHa2V5VXNlciIHYWRkcmVzcyIKa2V5UmV2b2tlZCIPa2V5UmV2b2tlZFRvdGFsIhNrZXlVc2VyVmVzdGluZ1N0YXJ0IhFrZXlVc2VyVmVzdGluZ0VuZCIVa2V5VXNlckFtb3VudFBlckJsb2NrIgxrZXlXeEFzc2V0SWQiCHRocm93RXJyIgNtc2ciFm1hbmFnZXJQdWJsaWNLZXlPclVuaXQiByRtYXRjaDAiAXMiHXBlbmRpbmdNYW5hZ2VyUHVibGljS2V5T3JVbml0IgttdXN0TWFuYWdlciIBaSICcGQiAnBrIgp2YWx1ZVVzZXJTIgt0b3RhbEFtb3VudCIPcmVtYWluaW5nQW1vdW50Ig9jbGFpbWVkV1hBbW91bnQiEWxhc3RDbGFpbWVkSGVpZ2h0Igl2YWx1ZVVzZXIiEmdldFVzZXJUb3RhbEFtb3VudCIWZ2V0VXNlclJlbWFpbmluZ0Ftb3VudCIUZ2V0VXNlckNsYWltZWRBbW91bnQiGGdldFVzZXJMYXN0Q2xhaW1lZEhlaWdodCITYXZhaWxhYmxlVG9DbGFpbU5vdyINaXNSZXZva2VkVXNlciIKbGFzdEhlaWdodCIDZW5kIg91bmNsYWltZWRQZXJpb2QiDWNsYWltSW50ZXJuYWwiBGFkZHIiAnd4IgZhbW91bnQiDGVuc3VyZUFtb3VudCIJd3hBc3NldElkIgVjaGVjayIGY2hlY2tzIg5ibG9ja3NEdXJhdGlvbiIJZW5kSGVpZ2h0Igp2ZXN0aW5nTGVuIg5hbW91bnRQZXJCbG9jayIQYXZhaWxhYmxlVG9DbGFpbSIKZm9yY2VDbGFpbSIRaW5jQW1vdW50UGVyQmxvY2siD3VzZXJUb3RhbEFtb3VudCITdXNlclJlbWFpbmluZ0Ftb3VudCIRdXNlckNsYWltZWRBbW91bnQiFXVzZXJMYXN0Q2xhaW1lZEhlaWdodCISdW5jbGFpbWVkQW1vdW50Tm93IgxyZXZva2VkVG90YWwiDmFtb3VudFRvUmV2b2tlIg9uZXdSZXZva2VkVG90YWwiF3BlbmRpbmdNYW5hZ2VyUHVibGljS2V5IgtjaGVja0NhbGxlciIVY2hlY2tNYW5hZ2VyUHVibGljS2V5IgJwbSIFaGFzUE0iB2NoZWNrUE0iAnR4IgZ2ZXJpZnkiD3RhcmdldFB1YmxpY0tleQAAABYAAAAAAWECAAAAAl9fAQAAAAFiAAAAAAIAAAAUJXNfX21hbmFnZXJQdWJsaWNLZXkBAAAAAWMAAAAAAgAAABslc19fcGVuZGluZ01hbmFnZXJQdWJsaWNLZXkBAAAAAWQAAAABAAAAAWUJAAS5AAAAAgkABEwAAAACAgAAAAIlcwkABEwAAAACBQAAAAFlBQAAAANuaWwFAAAAAWEBAAAAAWYAAAABAAAAAWUJAAS5AAAAAgkABEwAAAACAgAAAAQlcyVzCQAETAAAAAICAAAAB3Jldm9rZWQJAARMAAAAAgUAAAABZQUAAAADbmlsBQAAAAFhAQAAAAFnAAAAAAkABLkAAAACCQAETAAAAAICAAAAAiVzCQAETAAAAAICAAAADHJldm9rZWRUb3RhbAUAAAADbmlsBQAAAAFhAQAAAAFoAAAAAQAAAAFlCQAEuQAAAAIJAARMAAAAAgIAAAAEJXMlcwkABEwAAAACAgAAAAx2ZXN0aW5nU3RhcnQJAARMAAAAAgUAAAABZQUAAAADbmlsBQAAAAFhAQAAAAFpAAAAAQAAAAFlCQAEuQAAAAIJAARMAAAAAgIAAAAEJXMlcwkABEwAAAACAgAAAAp2ZXN0aW5nRW5kCQAETAAAAAIFAAAAAWUFAAAAA25pbAUAAAABYQEAAAABagAAAAEAAAABZQkABLkAAAACCQAETAAAAAICAAAABCVzJXMJAARMAAAAAgIAAAAOYW1vdW50UGVyQmxvY2sJAARMAAAAAgUAAAABZQUAAAADbmlsBQAAAAFhAQAAAAFrAAAAAAkABLkAAAACCQAETAAAAAICAAAAAiVzCQAETAAAAAICAAAACXd4QXNzZXRJZAUAAAADbmlsBQAAAAFhAQAAAAFsAAAAAQAAAAFtCQAAAgAAAAEJAAS5AAAAAgkABEwAAAACAgAAAA12ZXN0aW5nLnJpZGU6CQAETAAAAAIFAAAAAW0FAAAAA25pbAIAAAABIAEAAAABbgAAAAAEAAAAAW8JAAQiAAAAAQkBAAAAAWIAAAAAAwkAAAEAAAACBQAAAAFvAgAAAAZTdHJpbmcEAAAAAXAFAAAAAW8JAAJZAAAAAQUAAAABcAMJAAABAAAAAgUAAAABbwIAAAAEVW5pdAUAAAAEdW5pdAkAAAIAAAABAgAAAAtNYXRjaCBlcnJvcgEAAAABcQAAAAAEAAAAAW8JAAQiAAAAAQkBAAAAAWMAAAAAAwkAAAEAAAACBQAAAAFvAgAAAAZTdHJpbmcEAAAAAXAFAAAAAW8JAAJZAAAAAQUAAAABcAMJAAABAAAAAgUAAAABbwIAAAAEVW5pdAUAAAAEdW5pdAkAAAIAAAABAgAAAAtNYXRjaCBlcnJvcgEAAAABcgAAAAEAAAABcwQAAAABdAkBAAAAAWwAAAABAgAAABFwZXJtaXNzaW9uIGRlbmllZAQAAAABbwkBAAAAAW4AAAAAAwkAAAEAAAACBQAAAAFvAgAAAApCeXRlVmVjdG9yBAAAAAF1BQAAAAFvAwkAAAAAAAACCAUAAAABcwAAAA9jYWxsZXJQdWJsaWNLZXkFAAAAAXUGBQAAAAF0AwkAAAEAAAACBQAAAAFvAgAAAARVbml0AwkAAAAAAAACCAUAAAABcwAAAAZjYWxsZXIFAAAABHRoaXMGBQAAAAF0CQAAAgAAAAECAAAAC01hdGNoIGVycm9yAQAAAAF2AAAABAAAAAF3AAAAAXgAAAABeQAAAAF6CQAEuQAAAAIJAARMAAAAAgIAAAAKJWQlZCVkJWQlZAkABEwAAAACBQAAAAF3CQAETAAAAAIFAAAAAXgJAARMAAAAAgIAAAABMAkABEwAAAACBQAAAAF5CQAETAAAAAIFAAAAAXoFAAAAA25pbAUAAAABYQEAAAABQQAAAAQAAAABdwAAAAF4AAAAAXkAAAABegkBAAAAAXYAAAAECQABpAAAAAEFAAAAAXcJAAGkAAAAAQUAAAABeAkAAaQAAAABBQAAAAF5CQABpAAAAAEFAAAAAXoBAAAAAUIAAAABAAAAAWUJAQAAAA1wYXJzZUludFZhbHVlAAAAAQkAAZEAAAACCQAEtQAAAAIJAQAAAAV2YWx1ZQAAAAEJAAQiAAAAAQkBAAAAAWQAAAABBQAAAAFlBQAAAAFhAAAAAAAAAAABAQAAAAFDAAAAAQAAAAFlCQEAAAANcGFyc2VJbnRWYWx1ZQAAAAEJAAGRAAAAAgkABLUAAAACCQEAAAAFdmFsdWUAAAABCQAEIgAAAAEJAQAAAAFkAAAAAQUAAAABZQUAAAABYQAAAAAAAAAAAgEAAAABRAAAAAEAAAABZQkBAAAADXBhcnNlSW50VmFsdWUAAAABCQABkQAAAAIJAAS1AAAAAgkBAAAABXZhbHVlAAAAAQkABCIAAAABCQEAAAABZAAAAAEFAAAAAWUFAAAAAWEAAAAAAAAAAAMBAAAAAUUAAAABAAAAAWUJAQAAAA1wYXJzZUludFZhbHVlAAAAAQkAAZEAAAACCQAEtQAAAAIJAQAAAAV2YWx1ZQAAAAEJAAQiAAAAAQkBAAAAAWQAAAABBQAAAAFlBQAAAAFhAAAAAAAAAAAFAQAAAAFGAAAAAQAAAAFlBAAAAAFHCQEAAAALdmFsdWVPckVsc2UAAAACCQAEIAAAAAEJAQAAAAFmAAAAAQUAAAABZQcDBQAAAAFHCQEAAAABQwAAAAEFAAAAAWUEAAAAAUgJAQAAAAFFAAAAAQUAAAABZQMJAABnAAAAAgUAAAABSAUAAAAGaGVpZ2h0AAAAAAAAAAAABAAAAAFJCQEAAAAFdmFsdWUAAAABCQAEHwAAAAEJAQAAAAFpAAAAAQUAAAABZQMJAABmAAAAAgUAAAAGaGVpZ2h0BQAAAAFJCQEAAAABQwAAAAEFAAAAAWUEAAAAAUoJAABlAAAAAgUAAAAGaGVpZ2h0BQAAAAFICQAAaAAAAAIJAQAAAAV2YWx1ZQAAAAEJAAQfAAAAAQkBAAAAAWoAAAABBQAAAAFlBQAAAAFKAQAAAAFLAAAAAQAAAAFlBAAAAAFMCQEAAAARQGV4dHJOYXRpdmUoMTA2MikAAAABBQAAAAFlBAAAAAFNCQACWQAAAAEJAQAAAAV2YWx1ZQAAAAEJAAQiAAAAAQkBAAAAAWsAAAAABAAAAAFOCQEAAAABRgAAAAEFAAAAAWUEAAAAAU8DCQEAAAACIT0AAAACBQAAAAFOAAAAAAAAAAAABgkBAAAAAWwAAAABAgAAABBub3RoaW5nIHRvIGNsYWltAwkAAAAAAAACBQAAAAFPBQAAAAFPBAAAAAF3CQEAAAABQgAAAAEFAAAAAWUEAAAAAXgJAQAAAAFDAAAAAQUAAAABZQQAAAABeQkBAAAAAUQAAAABBQAAAAFlBAAAAAFHCQEAAAALdmFsdWVPckVsc2UAAAACCQAEIAAAAAEJAQAAAAFmAAAAAQUAAAABZQcDBQAAAAFHCQAETAAAAAIJAQAAAA5TY3JpcHRUcmFuc2ZlcgAAAAMFAAAAAUwFAAAAAXgFAAAAAU0JAARMAAAAAgkBAAAAC1N0cmluZ0VudHJ5AAAAAgkBAAAAAWQAAAABBQAAAAFlCQEAAAABQQAAAAQFAAAAAXcAAAAAAAAAAAAJAABkAAAAAgUAAAABeQUAAAABeAUAAAAGaGVpZ2h0BQAAAANuaWwJAARMAAAAAgkBAAAADlNjcmlwdFRyYW5zZmVyAAAAAwUAAAABTAUAAAABTgUAAAABTQkABEwAAAACCQEAAAALU3RyaW5nRW50cnkAAAACCQEAAAABZAAAAAEFAAAAAWUJAQAAAAFBAAAABAUAAAABdwkAAGUAAAACBQAAAAF4BQAAAAFOCQAAZAAAAAIFAAAAAXkFAAAAAU4FAAAABmhlaWdodAUAAAADbmlsCQAAAgAAAAECAAAAJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgAAAAoAAAABcwEAAAALY29uc3RydWN0b3IAAAABAAAAAVAEAAAAAVEJAQAAAAFyAAAAAQUAAAABcwMJAAAAAAAAAgUAAAABUQUAAAABUQkABEwAAAACCQEAAAALU3RyaW5nRW50cnkAAAACCQEAAAABawAAAAAFAAAAAVAFAAAAA25pbAkAAAIAAAABAgAAACRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4AAAABcwEAAAAPd2l0aGRyYXdSZXZva2VkAAAAAAQAAAABTgkBAAAAC3ZhbHVlT3JFbHNlAAAAAgkABB8AAAABCQEAAAABZwAAAAAAAAAAAAAAAAAEAAAAAU0JAAJZAAAAAQkBAAAABXZhbHVlAAAAAQkABCIAAAABCQEAAAABawAAAAAEAAAAAVIJAARMAAAAAgkBAAAAAXIAAAABBQAAAAFzCQAETAAAAAIDCQAAZgAAAAIFAAAAAU4AAAAAAAAAAAAGCQEAAAABbAAAAAECAAAAK3Jldm9rZWQgYW1vdW50IGlzIHplcm8sIG5vdGhpbmcgdG8gd2l0aGRyYXcFAAAAA25pbAMJAAAAAAAAAgUAAAABUgUAAAABUgkABEwAAAACCQEAAAAOU2NyaXB0VHJhbnNmZXIAAAADCAUAAAABcwAAAAZjYWxsZXIFAAAAAU4FAAAAAU0JAARMAAAAAgkBAAAADEludGVnZXJFbnRyeQAAAAIJAQAAAAFnAAAAAAAAAAAAAAAAAAUAAAADbmlsCQAAAgAAAAECAAAAJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgAAAAFzAQAAABBjcmVhdGVEZXBvc2l0Rm9yAAAAAgAAAAFlAAAAAVMEAAAAAU4ICQABkQAAAAIIBQAAAAFzAAAACHBheW1lbnRzAAAAAAAAAAAAAAAABmFtb3VudAQAAAABVAkAAGQAAAACBQAAAAZoZWlnaHQFAAAAAVMEAAAAAVUJAABlAAAAAgUAAAABVAUAAAAGaGVpZ2h0BAAAAAFWCQAAaQAAAAIFAAAAAU4FAAAAAVUEAAAAAVIJAARMAAAAAgMJAABmAAAAAgUAAAABVAUAAAAGaGVpZ2h0BgkBAAAAAWwAAAABAgAAACJlbmRIZWlnaHQgbXVzdCBiZSBtb3JlIHRoYW4gaGVpZ2h0CQAETAAAAAIDCQAAAAAAAAIJAAQiAAAAAQkBAAAAAWQAAAABBQAAAAFlBQAAAAR1bml0BgkBAAAAAWwAAAABAgAAAB9kZXBvc2l0IGZvciB1c2VyIGFscmVhZHkgZXhpc3RzCQAETAAAAAIDCQAAAAAAAAIJAAJYAAAAAQkBAAAABXZhbHVlAAAAAQgJAAGRAAAAAggFAAAAAXMAAAAIcGF5bWVudHMAAAAAAAAAAAAAAAAHYXNzZXRJZAkBAAAABXZhbHVlAAAAAQkABCIAAAABCQEAAAABawAAAAAGCQEAAAABbAAAAAECAAAAGmF0dGFjaGVkIHBheW1lbnQgaXMgbm90IFdYCQAETAAAAAIDCQEAAAACIT0AAAACBQAAAAFWAAAAAAAAAAAABgkBAAAAAWwAAAABAgAAAFVhdHRhY2hlZCBhbW91bnQgdG9vIHNtYWxsIG9yIGJsb2Nrc0R1cmF0aW9uIHRvbyBsYXJnZSDigJQgd2lsbCBjbGFpbWVkIHplcm8gcGVyIGJsb2NrBQAAAANuaWwDCQAAAAAAAAIFAAAAAVIFAAAAAVIJAARMAAAAAgkBAAAAC1N0cmluZ0VudHJ5AAAAAgkBAAAAAWQAAAABBQAAAAFlCQEAAAABQQAAAAQFAAAAAU4FAAAAAU4AAAAAAAAAAAAFAAAABmhlaWdodAkABEwAAAACCQEAAAAMSW50ZWdlckVudHJ5AAAAAgkBAAAAAWgAAAABBQAAAAFlBQAAAAZoZWlnaHQJAARMAAAAAgkBAAAADEludGVnZXJFbnRyeQAAAAIJAQAAAAFpAAAAAQUAAAABZQUAAAABVAkABEwAAAACCQEAAAAMSW50ZWdlckVudHJ5AAAAAgkBAAAAAWoAAAABBQAAAAFlBQAAAAFWBQAAAANuaWwJAAACAAAAAQIAAAAkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuAAAAAXMBAAAAEmluY3JlYXNlRGVwb3NpdEZvcgAAAAEAAAABZQQAAAABVwkBAAAAAUYAAAABBQAAAAFlBAAAAAFYAwkAAGYAAAACBQAAAAFXAAAAAAAAAAAACQEAAAABSwAAAAEFAAAAAWUFAAAABHVuaXQDCQAAAAAAAAIFAAAAAVgFAAAAAVgEAAAAAU4ICQABkQAAAAIIBQAAAAFzAAAACHBheW1lbnRzAAAAAAAAAAAAAAAABmFtb3VudAQAAAABVAkBAAAABXZhbHVlAAAAAQkABB8AAAABCQEAAAABaQAAAAEFAAAAAWUEAAAAAVUJAABlAAAAAgUAAAABVAUAAAAGaGVpZ2h0BAAAAAFWCQEAAAAFdmFsdWUAAAABCQAEHwAAAAEJAQAAAAFqAAAAAQUAAAABZQQAAAABWQkAAGkAAAACBQAAAAFOBQAAAAFVBAAAAAFaCQEAAAABQgAAAAEFAAAAAWUEAAAAAmFhCQEAAAABQwAAAAEFAAAAAWUEAAAAAmFiCQEAAAABRAAAAAEFAAAAAWUEAAAAAmFjCQEAAAABRQAAAAEFAAAAAWUEAAAAAVIJAARMAAAAAgMJAAAAAAAAAgkBAAAAC3ZhbHVlT3JFbHNlAAAAAgkABCAAAAABCQEAAAABZgAAAAEFAAAAAWUHBwYJAQAAAAFsAAAAAQIAAAAbZGVwb3NpdCBmb3IgdXNlciBpcyByZXZva2VkCQAETAAAAAIDCQEAAAACIT0AAAACCQAEIgAAAAEJAQAAAAFkAAAAAQUAAAABZQUAAAAEdW5pdAYJAQAAAAFsAAAAAQIAAAAfZGVwb3NpdCBmb3IgdXNlciBkb2Vzbid0IGV4aXN0cwkABEwAAAACAwkAAAAAAAACCQACWAAAAAEJAQAAAAV2YWx1ZQAAAAEICQABkQAAAAIIBQAAAAFzAAAACHBheW1lbnRzAAAAAAAAAAAAAAAAB2Fzc2V0SWQJAQAAAAV2YWx1ZQAAAAEJAAQiAAAAAQkBAAAAAWsAAAAABgkBAAAAAWwAAAABAgAAABphdHRhY2hlZCBwYXltZW50IGlzIG5vdCBXWAkABEwAAAACAwkBAAAAAiE9AAAAAgUAAAABWQAAAAAAAAAAAAYJAQAAAAFsAAAAAQIAAAA4YXR0YWNoZWQgYW1vdW50IHRvbyBzbWFsbCDigJQgaW5jcmVhc2UgaXMgemVybyBwZXIgYmxvY2sFAAAAA25pbAMJAAAAAAAAAgUAAAABUgUAAAABUgkABEwAAAACCQEAAAALU3RyaW5nRW50cnkAAAACCQEAAAABZAAAAAEFAAAAAWUJAQAAAAFBAAAABAkAAGQAAAACBQAAAAFaBQAAAAFOCQAAZAAAAAIFAAAAAmFhBQAAAAFOBQAAAAJhYgUAAAACYWMJAARMAAAAAgkBAAAADEludGVnZXJFbnRyeQAAAAIJAQAAAAFqAAAAAQUAAAABZQkAAGQAAAACBQAAAAFWBQAAAAFZBQAAAANuaWwJAAACAAAAAQIAAAAkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuCQAAAgAAAAECAAAAJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgAAAAFzAQAAABByZXZva2VEZXBvc2l0Rm9yAAAAAQAAAAFlBAAAAAF3CQEAAAABQgAAAAEFAAAAAWUEAAAAAXgJAQAAAAFDAAAAAQUAAAABZQQAAAABeQkBAAAAAUQAAAABBQAAAAFlBAAAAAF6CQEAAAABRQAAAAEFAAAAAWUEAAAAAmFkCQEAAAABRgAAAAEFAAAAAWUEAAAAAmFlCQEAAAALdmFsdWVPckVsc2UAAAACCQAEHwAAAAEJAQAAAAFnAAAAAAAAAAAAAAAAAAQAAAACYWYJAABlAAAAAgUAAAABeAUAAAACYWQEAAAAAmFnCQAAZAAAAAIFAAAAAmFlBQAAAAJhZgQAAAABUgkABEwAAAACCQEAAAABcgAAAAEFAAAAAXMJAARMAAAAAgMJAQAAAAIhPQAAAAIJAAQiAAAAAQkBAAAAAWQAAAABBQAAAAFlBQAAAAR1bml0BgkBAAAAAWwAAAABAgAAAB5kZXBvc2l0IGZvciB1c2VyIGlzIG5vdCBleGlzdHMJAARMAAAAAgMJAABmAAAAAgUAAAACYWcFAAAAAmFlBgkBAAAAAWwAAAABAgAAADhuZXdSZXZva2VkVG90YWwgY2FuJ3QgYmUgbGVzcyBvciBlcXVhbCB0aGFuIHJldm9rZWRUb3RhbAUAAAADbmlsAwkAAAAAAAACBQAAAAFSBQAAAAFSCQAETAAAAAIJAQAAAAxCb29sZWFuRW50cnkAAAACCQEAAAABZgAAAAEFAAAAAWUGCQAETAAAAAIJAQAAAAxJbnRlZ2VyRW50cnkAAAACCQEAAAABZwAAAAAFAAAAAmFnCQAETAAAAAIJAQAAAAtTdHJpbmdFbnRyeQAAAAIJAQAAAAFkAAAAAQUAAAABZQkBAAAAAUEAAAAEBQAAAAF3BQAAAAJhZAUAAAABeQUAAAABegUAAAADbmlsCQAAAgAAAAECAAAAJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgAAAAFzAQAAAAVjbGFpbQAAAAAJAQAAAAFLAAAAAQkAAlgAAAABCAgFAAAAAXMAAAAGY2FsbGVyAAAABWJ5dGVzAAAAAXMBAAAADWNsYWltUkVBRE9OTFkAAAABAAAAAWUEAAAAAU4JAQAAAAFGAAAAAQUAAAABZQkABRQAAAACBQAAAANuaWwFAAAAAU4AAAABcwEAAAAFc3RhdHMAAAABAAAAAWUJAAUUAAAAAgUAAAADbmlsCQAETAAAAAIJAQAAAAV2YWx1ZQAAAAEJAAQfAAAAAQkBAAAAAWgAAAABBQAAAAFlCQAETAAAAAIJAQAAAAV2YWx1ZQAAAAEJAAQfAAAAAQkBAAAAAWkAAAABBQAAAAFlCQAETAAAAAIJAQAAAAFCAAAAAQUAAAABZQkABEwAAAACCQEAAAABRAAAAAEFAAAAAWUJAARMAAAAAgkBAAAAAUMAAAABBQAAAAFlCQAETAAAAAIJAQAAAAFGAAAAAQUAAAABZQUAAAADbmlsAAAAAXMBAAAACnNldE1hbmFnZXIAAAABAAAAAmFoBAAAAAJhaQkBAAAAAXIAAAABBQAAAAFzAwkAAAAAAAACBQAAAAJhaQUAAAACYWkEAAAAAmFqCQACWQAAAAEFAAAAAmFoAwkAAAAAAAACBQAAAAJhagUAAAACYWoJAARMAAAAAgkBAAAAC1N0cmluZ0VudHJ5AAAAAgkBAAAAAWMAAAAABQAAAAJhaAUAAAADbmlsCQAAAgAAAAECAAAAJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgkAAAIAAAABAgAAACRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4AAAABcwEAAAAOY29uZmlybU1hbmFnZXIAAAAABAAAAAJhawkBAAAAAXEAAAAABAAAAAJhbAMJAQAAAAlpc0RlZmluZWQAAAABBQAAAAJhawYJAQAAAAFsAAAAAQIAAAASbm8gcGVuZGluZyBtYW5hZ2VyAwkAAAAAAAACBQAAAAJhbAUAAAACYWwEAAAAAmFtAwkAAAAAAAACCAUAAAABcwAAAA9jYWxsZXJQdWJsaWNLZXkJAQAAAAV2YWx1ZQAAAAEFAAAAAmFrBgkBAAAAAWwAAAABAgAAABt5b3UgYXJlIG5vdCBwZW5kaW5nIG1hbmFnZXIDCQAAAAAAAAIFAAAAAmFtBQAAAAJhbQkABEwAAAACCQEAAAALU3RyaW5nRW50cnkAAAACCQEAAAABYgAAAAAJAAJYAAAAAQkBAAAABXZhbHVlAAAAAQUAAAACYWsJAARMAAAAAgkBAAAAC0RlbGV0ZUVudHJ5AAAAAQkBAAAAAWMAAAAABQAAAANuaWwJAAACAAAAAQIAAAAkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuCQAAAgAAAAECAAAAJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgAAAAEAAAACYW4BAAAAAmFvAAAAAAQAAAACYXAEAAAAAW8JAQAAAAFuAAAAAAMJAAABAAAAAgUAAAABbwIAAAAKQnl0ZVZlY3RvcgQAAAABdQUAAAABbwUAAAABdQMJAAABAAAAAgUAAAABbwIAAAAEVW5pdAgFAAAAAmFuAAAAD3NlbmRlclB1YmxpY0tleQkAAAIAAAABAgAAAAtNYXRjaCBlcnJvcgkAAfQAAAADCAUAAAACYW4AAAAJYm9keUJ5dGVzCQABkQAAAAIIBQAAAAJhbgAAAAZwcm9vZnMAAAAAAAAAAAAFAAAAAmFwDTcFHA==", "chainId": 84, "height": 2280469, "applicationStatus": "succeeded", "spentComplexity": 0 } View: original | compacted Prev: 2kzrXNWzegKLHKwoncomvnTN24jjNMap3gMtsR3uPXtP Next: 8uVBGk44tCj1RQ96mmP4ebFpuK2jxCWV7AvjyRYT34BM Full:
OldNewDifferences
11 {-# STDLIB_VERSION 5 #-}
22 {-# SCRIPT_TYPE ACCOUNT #-}
33 {-# CONTENT_TYPE DAPP #-}
44 let SEP = "__"
55
66 func keyManagerPublicKey () = "%s__managerPublicKey"
77
88
99 func keyPendingManagerPublicKey () = "%s__pendingManagerPublicKey"
1010
1111
1212 func keyUser (address) = makeString(["%s", address], SEP)
1313
1414
1515 func keyRevoked (address) = makeString(["%s%s", "revoked", address], SEP)
1616
1717
1818 func keyRevokedTotal () = makeString(["%s", "revokedTotal"], SEP)
1919
2020
2121 func keyUserVestingStart (address) = makeString(["%s%s", "vestingStart", address], SEP)
2222
2323
2424 func keyUserVestingEnd (address) = makeString(["%s%s", "vestingEnd", address], SEP)
2525
2626
2727 func keyUserAmountPerBlock (address) = makeString(["%s%s", "amountPerBlock", address], SEP)
2828
2929
3030 func keyWxAssetId () = makeString(["%s", "wxAssetId"], SEP)
3131
3232
3333 func throwErr (msg) = throw(makeString(["vesting.ride:", msg], " "))
3434
3535
3636 func managerPublicKeyOrUnit () = match getString(keyManagerPublicKey()) {
3737 case s: String =>
3838 fromBase58String(s)
3939 case _: Unit =>
4040 unit
4141 case _ =>
4242 throw("Match error")
4343 }
4444
4545
4646 func pendingManagerPublicKeyOrUnit () = match getString(keyPendingManagerPublicKey()) {
4747 case s: String =>
4848 fromBase58String(s)
4949 case _: Unit =>
5050 unit
5151 case _ =>
5252 throw("Match error")
5353 }
5454
5555
5656 func mustManager (i) = {
5757 let pd = throwErr("permission denied")
5858 match managerPublicKeyOrUnit() {
5959 case pk: ByteVector =>
6060 if ((i.callerPublicKey == pk))
6161 then true
6262 else pd
6363 case _: Unit =>
6464 if ((i.caller == this))
6565 then true
6666 else pd
6767 case _ =>
6868 throw("Match error")
6969 }
7070 }
7171
7272
7373 func valueUserS (totalAmount,remainingAmount,claimedWXAmount,lastClaimedHeight) = makeString(["%d%d%d%d%d", totalAmount, remainingAmount, "0", claimedWXAmount, lastClaimedHeight], SEP)
7474
7575
7676 func valueUser (totalAmount,remainingAmount,claimedWXAmount,lastClaimedHeight) = valueUserS(toString(totalAmount), toString(remainingAmount), toString(claimedWXAmount), toString(lastClaimedHeight))
7777
7878
7979 func getUserTotalAmount (address) = parseIntValue(split(value(getString(keyUser(address))), SEP)[1])
8080
8181
8282 func getUserRemainingAmount (address) = parseIntValue(split(value(getString(keyUser(address))), SEP)[2])
8383
8484
8585 func getUserClaimedAmount (address) = parseIntValue(split(value(getString(keyUser(address))), SEP)[3])
8686
8787
8888 func getUserLastClaimedHeight (address) = parseIntValue(split(value(getString(keyUser(address))), SEP)[5])
8989
9090
9191 func availableToClaimNow (address) = {
9292 let isRevokedUser = valueOrElse(getBoolean(keyRevoked(address)), false)
9393 if (isRevokedUser)
9494 then getUserRemainingAmount(address)
9595 else {
9696 let lastHeight = getUserLastClaimedHeight(address)
9797 if ((lastHeight >= height))
9898 then 0
9999 else {
100100 let end = value(getInteger(keyUserVestingEnd(address)))
101101 if ((height > end))
102102 then getUserRemainingAmount(address)
103103 else {
104104 let unclaimedPeriod = (height - lastHeight)
105105 (value(getInteger(keyUserAmountPerBlock(address))) * unclaimedPeriod)
106106 }
107107 }
108108 }
109109 }
110110
111111
112112 func claimInternal (address) = {
113113 let addr = addressFromStringValue(address)
114114 let wx = fromBase58String(value(getString(keyWxAssetId())))
115115 let amount = availableToClaimNow(address)
116116 let ensureAmount = if ((amount != 0))
117117 then true
118118 else throwErr("nothing to claim")
119119 if ((ensureAmount == ensureAmount))
120120 then {
121121 let totalAmount = getUserTotalAmount(address)
122122 let remainingAmount = getUserRemainingAmount(address)
123123 let claimedWXAmount = getUserClaimedAmount(address)
124124 let isRevokedUser = valueOrElse(getBoolean(keyRevoked(address)), false)
125125 if (isRevokedUser)
126126 then [ScriptTransfer(addr, remainingAmount, wx), StringEntry(keyUser(address), valueUser(totalAmount, 0, (claimedWXAmount + remainingAmount), height))]
127127 else [ScriptTransfer(addr, amount, wx), StringEntry(keyUser(address), valueUser(totalAmount, (remainingAmount - amount), (claimedWXAmount + amount), height))]
128128 }
129129 else throw("Strict value is not equal to itself.")
130130 }
131131
132132
133133 @Callable(i)
134134 func constructor (wxAssetId) = {
135135 let check = mustManager(i)
136136 if ((check == check))
137137 then [StringEntry(keyWxAssetId(), wxAssetId)]
138138 else throw("Strict value is not equal to itself.")
139139 }
140140
141141
142142
143143 @Callable(i)
144144 func withdrawRevoked () = {
145145 let amount = valueOrElse(getInteger(keyRevokedTotal()), 0)
146146 let wx = fromBase58String(value(getString(keyWxAssetId())))
147147 let checks = [mustManager(i), if ((amount > 0))
148148 then true
149149 else throwErr("revoked amount is zero, nothing to withdraw")]
150150 if ((checks == checks))
151151 then [ScriptTransfer(i.caller, amount, wx), IntegerEntry(keyRevokedTotal(), 0)]
152152 else throw("Strict value is not equal to itself.")
153153 }
154154
155155
156156
157157 @Callable(i)
158158 func createDepositFor (address,blocksDuration) = {
159159 let amount = i.payments[0].amount
160160 let endHeight = (height + blocksDuration)
161161 let vestingLen = (endHeight - height)
162162 let amountPerBlock = (amount / vestingLen)
163163 let checks = [if ((endHeight > height))
164164 then true
165165 else throwErr("endHeight must be more than height"), if ((getString(keyUser(address)) == unit))
166166 then true
167167 else throwErr("deposit for user already exists"), if ((toBase58String(value(i.payments[0].assetId)) == value(getString(keyWxAssetId()))))
168168 then true
169169 else throwErr("attached payment is not WX"), if ((amountPerBlock != 0))
170170 then true
171171 else throwErr("attached amount too small or blocksDuration too large — will claimed zero per block")]
172172 if ((checks == checks))
173173 then [StringEntry(keyUser(address), valueUser(amount, amount, 0, height)), IntegerEntry(keyUserVestingStart(address), height), IntegerEntry(keyUserVestingEnd(address), endHeight), IntegerEntry(keyUserAmountPerBlock(address), amountPerBlock)]
174174 else throw("Strict value is not equal to itself.")
175175 }
176176
177177
178178
179179 @Callable(i)
180180 func increaseDepositFor (address) = {
181181 let availableToClaim = availableToClaimNow(address)
182182 let forceClaim = if ((availableToClaim > 0))
183183 then claimInternal(address)
184184 else unit
185185 if ((forceClaim == forceClaim))
186186 then {
187187 let amount = i.payments[0].amount
188188 let endHeight = value(getInteger(keyUserVestingEnd(address)))
189189 let vestingLen = (endHeight - height)
190190 let amountPerBlock = value(getInteger(keyUserAmountPerBlock(address)))
191191 let incAmountPerBlock = (amount / vestingLen)
192192 let userTotalAmount = getUserTotalAmount(address)
193193 let userRemainingAmount = getUserRemainingAmount(address)
194194 let userClaimedAmount = getUserClaimedAmount(address)
195195 let userLastClaimedHeight = getUserLastClaimedHeight(address)
196196 let checks = [if ((valueOrElse(getBoolean(keyRevoked(address)), false) == false))
197197 then true
198198 else throwErr("deposit for user is revoked"), if ((getString(keyUser(address)) != unit))
199199 then true
200200 else throwErr("deposit for user doesn't exists"), if ((toBase58String(value(i.payments[0].assetId)) == value(getString(keyWxAssetId()))))
201201 then true
202202 else throwErr("attached payment is not WX"), if ((incAmountPerBlock != 0))
203203 then true
204204 else throwErr("attached amount too small — increase is zero per block")]
205205 if ((checks == checks))
206206 then [StringEntry(keyUser(address), valueUser((userTotalAmount + amount), (userRemainingAmount + amount), userClaimedAmount, userLastClaimedHeight)), IntegerEntry(keyUserAmountPerBlock(address), (amountPerBlock + incAmountPerBlock))]
207207 else throw("Strict value is not equal to itself.")
208208 }
209209 else throw("Strict value is not equal to itself.")
210210 }
211211
212212
213213
214214 @Callable(i)
215215 func revokeDepositFor (address) = {
216216 let totalAmount = getUserTotalAmount(address)
217217 let remainingAmount = getUserRemainingAmount(address)
218218 let claimedWXAmount = getUserClaimedAmount(address)
219219 let lastClaimedHeight = getUserLastClaimedHeight(address)
220220 let unclaimedAmountNow = availableToClaimNow(address)
221221 let revokedTotal = valueOrElse(getInteger(keyRevokedTotal()), 0)
222222 let amountToRevoke = (remainingAmount - unclaimedAmountNow)
223223 let newRevokedTotal = (revokedTotal + amountToRevoke)
224224 let checks = [mustManager(i), if ((getString(keyUser(address)) != unit))
225225 then true
226226 else throwErr("deposit for user is not exists"), if ((newRevokedTotal > revokedTotal))
227227 then true
228228 else throwErr("newRevokedTotal can't be less or equal than revokedTotal")]
229229 if ((checks == checks))
230230 then [BooleanEntry(keyRevoked(address), true), IntegerEntry(keyRevokedTotal(), newRevokedTotal), StringEntry(keyUser(address), valueUser(totalAmount, unclaimedAmountNow, claimedWXAmount, lastClaimedHeight))]
231231 else throw("Strict value is not equal to itself.")
232232 }
233233
234234
235235
236236 @Callable(i)
237237 func claim () = claimInternal(toBase58String(i.caller.bytes))
238238
239239
240240
241241 @Callable(i)
242242 func claimREADONLY (address) = {
243243 let amount = availableToClaimNow(address)
244244 $Tuple2(nil, amount)
245245 }
246246
247247
248248
249249 @Callable(i)
250250 func stats (address) = $Tuple2(nil, [value(getInteger(keyUserVestingStart(address))), value(getInteger(keyUserVestingEnd(address))), getUserTotalAmount(address), getUserClaimedAmount(address), getUserRemainingAmount(address), availableToClaimNow(address)])
251251
252252
253253
254254 @Callable(i)
255255 func setManager (pendingManagerPublicKey) = {
256256 let checkCaller = mustManager(i)
257257 if ((checkCaller == checkCaller))
258258 then {
259259 let checkManagerPublicKey = fromBase58String(pendingManagerPublicKey)
260260 if ((checkManagerPublicKey == checkManagerPublicKey))
261261 then [StringEntry(keyPendingManagerPublicKey(), pendingManagerPublicKey)]
262262 else throw("Strict value is not equal to itself.")
263263 }
264264 else throw("Strict value is not equal to itself.")
265265 }
266266
267267
268268
269269 @Callable(i)
270270 func confirmManager () = {
271271 let pm = pendingManagerPublicKeyOrUnit()
272272 let hasPM = if (isDefined(pm))
273273 then true
274274 else throwErr("no pending manager")
275275 if ((hasPM == hasPM))
276276 then {
277277 let checkPM = if ((i.callerPublicKey == value(pm)))
278278 then true
279279 else throwErr("you are not pending manager")
280280 if ((checkPM == checkPM))
281281 then [StringEntry(keyManagerPublicKey(), toBase58String(value(pm))), DeleteEntry(keyPendingManagerPublicKey())]
282282 else throw("Strict value is not equal to itself.")
283283 }
284284 else throw("Strict value is not equal to itself.")
285285 }
286286
287287
288288 @Verifier(tx)
289289 func verify () = {
290290 let targetPublicKey = match managerPublicKeyOrUnit() {
291291 case pk: ByteVector =>
292292 pk
293293 case _: Unit =>
294294 tx.senderPublicKey
295295 case _ =>
296296 throw("Match error")
297297 }
298298 sigVerify(tx.bodyBytes, tx.proofs[0], targetPublicKey)
299299 }
300300

github/deemru/w8io/169f3d6 
39.82 ms