tx · GMLLNavJWcjseCSktGqJGo97VaWZ6KfznxzRyFiinHP2

3N2V9vbP8zDTDvNMR8jQeGuUu22vz1KCv5i:  -0.02200000 Waves

2022.09.20 17:11 [2237561] smart account 3N2V9vbP8zDTDvNMR8jQeGuUu22vz1KCv5i > SELF 0.00000000 Waves

{ "type": 13, "id": "GMLLNavJWcjseCSktGqJGo97VaWZ6KfznxzRyFiinHP2", "fee": 2200000, "feeAssetId": null, "timestamp": 1663683121340, "version": 1, "sender": "3N2V9vbP8zDTDvNMR8jQeGuUu22vz1KCv5i", "senderPublicKey": "3JBooHFx9f8xuJuUNn9AeF8B4U8a9onpNMbvzV3UTVTk", "proofs": [ "2g1CbfmZcRbMJWaZZuH9v9gkBxfbNPvJDwZKXYdtJoqF7XckXLSGPJev5JPfwdFugpy4uKa1b32qFYJNb3sW9RFn" ], "script": "base64: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VXNlcgAAAAIFAAAAB2Fzc2V0SWQFAAAAB2FkZHJlc3MFAAAAA1NFUAAAAAAAAAAAAwEAAAAYZ2V0VXNlckxhc3RDbGFpbWVkSGVpZ2h0AAAAAgAAAAdhc3NldElkAAAAB2FkZHJlc3MJAQAAAA1wYXJzZUludFZhbHVlAAAAAQkAAZEAAAACCQAEtQAAAAIJAQAAAAV2YWx1ZQAAAAEJAAQiAAAAAQkBAAAAB2tleVVzZXIAAAACBQAAAAdhc3NldElkBQAAAAdhZGRyZXNzBQAAAANTRVAAAAAAAAAAAAUBAAAAE2F2YWlsYWJsZVRvQ2xhaW1Ob3cAAAACAAAAB2Fzc2V0SWQAAAAHYWRkcmVzcwQAAAANaXNSZXZva2VkVXNlcgkBAAAAC3ZhbHVlT3JFbHNlAAAAAgkABCAAAAABCQEAAAAKa2V5UmV2b2tlZAAAAAIFAAAAB2Fzc2V0SWQFAAAAB2FkZHJlc3MHAwUAAAANaXNSZXZva2VkVXNlcgkBAAAAFmdldFVzZXJSZW1haW5pbmdBbW91bnQAAAACBQAAAAdhc3NldElkBQAAAAdhZGRyZXNzBAAAAApsYXN0SGVpZ2h0CQEAAAAYZ2V0VXNlckxhc3RDbGFpbWVkSGVpZ2h0AAAAAgUAAAAHYXNzZXRJZAUAAAAHYWRkcmVzcwMJAABnAAAAAgUAAAAKbGFzdEhlaWdodAUAAAAGaGVpZ2h0AAAAAAAAAAAABAAAAANlbmQJAQAAAAV2YWx1ZQAAAAEJAAQfAAAAAQkBAAAAEWtleVVzZXJWZXN0aW5nRW5kAAAAAgUAAAAHYXNzZXRJZAUAAAAHYWRkcmVzcwMJAABmAAAAAgUAAAAGaGVpZ2h0BQAAAANlbmQJAQAAABZnZXRVc2VyUmVtYWluaW5nQW1vdW50AAAAAgUAAAAHYXNzZXRJZAUAAAAHYWRkcmVzcwQAAAAPdW5jbGFpbWVkUGVyaW9kCQAAZQAAAAIFAAAABmhlaWdodAUAAAAKbGFzdEhlaWdodAkAAGgAAAACCQEAAAAFdmFsdWUAAAABCQAEHwAAAAEJAQAAABVrZXlVc2VyQW1vdW50UGVyQmxvY2sAAAACBQAAAAdhc3NldElkBQAAAAdhZGRyZXNzBQAAAA91bmNsYWltZWRQZXJpb2QBAAAAFWF2YWlsYWJsZVRvQ2xhaW1GaXhlZAAAAAMAAAAHYXNzZXRJZAAAAAdhZGRyZXNzAAAADHJlbGVhc2VCbG9jawkBAAAAC3ZhbHVlT3JFbHNlAAAAAgkABB8AAAABCQEAAAATa2V5VXNlckZpeGVkRGVwb3NpdAAAAAMFAAAAB2Fzc2V0SWQFAAAAB2FkZHJlc3MFAAAADHJlbGVhc2VCbG9jawAAAAAAAAAAAAEAAAANY2xhaW1JbnRlcm5hbAAAAAIAAAAHYXNzZXRJZAAAAAdhZGRyZXNzBAAAAARhZGRyCQEAAAARQGV4dHJOYXRpdmUoMTA2MikAAAABBQAAAAdhZGRyZXNzBAAAAAVhc3NldAkAAlkAAAABBQAAAAdhc3NldElkBAAAAAZhbW91bnQJAQAAABNhdmFpbGFibGVUb0NsYWltTm93AAAAAgUAAAAHYXNzZXRJZAUAAAAHYWRkcmVzcwQAAAAGY2hlY2tzCQAETAAAAAIDCQAAAAAAAAIJAQAAAAt2YWx1ZU9yRWxzZQAAAAIJAAQgAAAAAQkBAAAADmtleUNsYWltRGVuaWVkAAAAAQUAAAAHYXNzZXRJZAcHBgkBAAAACHRocm93RXJyAAAAAQIAAAASYXNzZXQgY2xhaW0gZGVuaWVkCQAETAAAAAIDCQEAAAACIT0AAAACBQAAAAZhbW91bnQAAAAAAAAAAAAGCQEAAAAIdGhyb3dFcnIAAAABAgAAABBub3RoaW5nIHRvIGNsYWltBQAAAANuaWwDCQAAAAAAAAIFAAAABmNoZWNrcwUAAAAGY2hlY2tzBAAAAAt0b3RhbEFtb3VudAkBAAAAEmdldFVzZXJUb3RhbEFtb3VudAAAAAIFAAAAB2Fzc2V0SWQFAAAAB2FkZHJlc3MEAAAAD3JlbWFpbmluZ0Ftb3VudAkBAAAAFmdldFVzZXJSZW1haW5pbmdBbW91bnQAAAACBQAAAAdhc3NldElkBQAAAAdhZGRyZXNzBAAAAA1jbGFpbWVkQW1vdW50CQEAAAAUZ2V0VXNlckNsYWltZWRBbW91bnQAAAACBQAAAAdhc3NldElkBQAAAAdhZGRyZXNzBAAAAA1pc1Jldm9rZWRVc2VyCQEAAAALdmFsdWVPckVsc2UAAAACCQAEIAAAAAEJAQAAAAprZXlSZXZva2VkAAAAAgUAAAAHYXNzZXRJZAUAAAAHYWRkcmVzcwcDBQAAAA1pc1Jldm9rZWRVc2VyCQAETAAAAAIJAQAAAA5TY3JpcHRUcmFuc2ZlcgAAAAMFAAAABGFkZHIFAAAAD3JlbWFpbmluZ0Ftb3VudAUAAAAFYXNzZXQJAARMAAAAAgkBAAAAC1N0cmluZ0VudHJ5AAAAAgkBAAAAB2tleVVzZXIAAAACBQAAAAdhc3NldElkBQAAAAdhZGRyZXNzCQEAAAAJdmFsdWVVc2VyAAAABAUAAAALdG90YWxBbW91bnQAAAAAAAAAAAAJAABkAAAAAgUAAAANY2xhaW1lZEFtb3VudAUAAAAPcmVtYWluaW5nQW1vdW50BQAAAAZoZWlnaHQFAAAAA25pbAkABEwAAAACCQEAAAAOU2NyaXB0VHJhbnNmZXIAAAADBQAAAARhZGRyBQAAAAZhbW91bnQFAAAABWFzc2V0CQAETAAAAAIJAQAAAAtTdHJpbmdFbnRyeQAAAAIJAQAAAAdrZXlVc2VyAAAAAgUAAAAHYXNzZXRJZAUAAAAHYWRkcmVzcwkBAAAACXZhbHVlVXNlcgAAAAQFAAAAC3RvdGFsQW1vdW50CQAAZQAAAAIFAAAAD3JlbWFpbmluZ0Ftb3VudAUAAAAGYW1vdW50CQAAZAAAAAIFAAAADWNsYWltZWRBbW91bnQFAAAABmFtb3VudAUAAAAGaGVpZ2h0BQAAAANuaWwJAAACAAAAAQIAAAAkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuAQAAABJjbGFpbUZpeGVkSW50ZXJuYWwAAAADAAAAB2Fzc2V0SWQAAAAHYWRkcmVzcwAAAAxyZWxlYXNlQmxvY2sEAAAAEHVzZXJGaXhlZERlcG9zaXQJAAQfAAAAAQkBAAAAE2tleVVzZXJGaXhlZERlcG9zaXQAAAADBQAAAAdhc3NldElkBQAAAAdhZGRyZXNzBQAAAAxyZWxlYXNlQmxvY2sEAAAABmNoZWNrcwkABEwAAAACAwkAAAAAAAACCQEAAAALdmFsdWVPckVsc2UAAAACCQAEIAAAAAEJAQAAAA5rZXlDbGFpbURlbmllZAAAAAEFAAAAB2Fzc2V0SWQHBwYJAQAAAAh0aHJvd0VycgAAAAECAAAAEmFzc2V0IGNsYWltIGRlbmllZAkABEwAAAAC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VG9DbGFpbQkBAAAAE2F2YWlsYWJsZVRvQ2xhaW1Ob3cAAAACBQAAAAdhc3NldElkBQAAAAdhZGRyZXNzBAAAAApmb3JjZUNsYWltAwkAAGYAAAACBQAAABBhdmFpbGFibGVUb0NsYWltAAAAAAAAAAAACQEAAAANY2xhaW1JbnRlcm5hbAAAAAIFAAAAB2Fzc2V0SWQFAAAAB2FkZHJlc3MFAAAABHVuaXQDCQAAAAAAAAIFAAAACmZvcmNlQ2xhaW0FAAAACmZvcmNlQ2xhaW0EAAAACWVuZEhlaWdodAkBAAAABXZhbHVlAAAAAQkABB8AAAABCQEAAAARa2V5VXNlclZlc3RpbmdFbmQAAAACBQAAAAdhc3NldElkBQAAAAdhZGRyZXNzBAAAAAp2ZXN0aW5nTGVuCQAAZQAAAAIFAAAACWVuZEhlaWdodAUAAAAGaGVpZ2h0BAAAAA5hbW91bnRQZXJCbG9jawkBAAAABXZhbHVlAAAAAQkABB8AAAABCQEAAAAVa2V5VXNlckFtb3VudFBlckJsb2NrAAAAAgUAAAAHYXNzZXRJZAUAAAAHYWRkcmVzcwQAAAARaW5jQW1vdW50UGVyQmxvY2sJAABpAAAAAgUAAAAGYW1vdW50BQAAAAp2ZXN0aW5nTGVuBAAAAA91c2VyVG90YWxBbW91bnQJAQAAABJnZXRVc2VyVG90YWxBbW91bnQAAAACBQAAAAdhc3NldElkBQAAAAdhZGRyZXNzBAAAABN1c2VyUmVtYWluaW5nQW1vdW50CQEAAAAWZ2V0VXNlclJlbWFpbmluZ0Ftb3VudAAAAAIFAAAAB2Fzc2V0SWQFAAAAB2FkZHJlc3MEAAAAEXVzZXJDbGFpbWVkQW1vdW50CQEAAAAUZ2V0VXNlckNsYWltZWRBbW91bnQAAAACBQAAAAdhc3NldElkBQAAAAdhZGRyZXNzBAAAABV1c2VyTGFzdENsYWltZWRIZWlnaHQJAQAAABhnZXRVc2VyTGFzdENsYWltZWRIZWlnaHQAAAACBQAAAAdhc3NldElkBQAAAAdhZGRyZXNzBAAAAAZjaGVja3MJAARMAAAAAgMJAAAAAAAAAgkBAAAAC3ZhbHVlT3JFbHNlAAAAAgkABCAAAAABCQEAAAAKa2V5UmV2b2tlZAAAAAIFAAAAB2Fzc2V0SWQFAAAAB2FkZHJlc3MHBwYJAQAAAAh0aHJvd0VycgAAAAECAAAAG2RlcG9zaXQgZm9yIHVzZXIgaXMgcmV2b2tlZAkABEwAAAACAwkBAAAAAiE9AAAAAgkABCIAAAABCQEAAAAHa2V5VXNlcgAAAAIFAAAAB2Fzc2V0SWQFAAAAB2FkZHJlc3MFAAAABHVuaXQGCQEAAAAIdGhyb3dFcnIAAAABAgAAAB9kZXBvc2l0IGZvciB1c2VyIGRvZXNuJ3QgZXhpc3RzCQAETAAAAAIDCQEAAAACIT0AAAACBQAAABFpbmNBbW91bnRQZXJCbG9jawAAAAAAAAAAAAYJAQAAAAh0aHJvd0VycgAAAAECAAAAOGF0dGFjaGVkIGFtb3VudCB0b28gc21hbGwg4oCUIGluY3JlYXNlIGlzIHplcm8gcGVyIGJsb2NrBQAAAANuaWwDCQAAAAAAAAIFAAAABmNoZWNrcwUAAAAGY2hlY2tzCQAETAAAAAIJAQAAAAtTdHJpbmdFbnRyeQAAAAIJAQAAAAdrZXlVc2VyAAAAAgUAAAAHYXNzZXRJZAUAAAAHYWRkcmVzcwkBAAAACXZhbHVlVXNlcgAAAAQJAABkAAAAAgUAAAAPdXNlclRvdGFsQW1vdW50BQAAAAZhbW91bnQJAABkAAAAAgUAAAATdXNlclJlbWFpbmluZ0Ftb3VudAUAAAAGYW1vdW50BQAAABF1c2VyQ2xhaW1lZEFtb3VudAUAAAAVdXNlckxhc3RDbGFpbWVkSGVpZ2h0CQAETAAAAAIJAQAAAAxJbnRlZ2VyRW50cnkAAAACCQEAAAAVa2V5VXNlckFtb3VudFBlckJsb2NrAAAAAgUAAAAHYXNzZXRJZAUAAAAHYWRkcmVzcwkAAGQAAAACBQAAAA5hbW91bnRQZXJCbG9jawUAAAARaW5jQW1vdW50UGVyQmxvY2sFAAAAA25pbAkAAAIAAAABAgAAACRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4JAAACAAAAAQIAAAAkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuAAAAAWkBAAAAEHJldm9rZURlcG9zaXRGb3IAAAACAAAAB2Fzc2V0SWQAAAAHYWRkcmVzcwQAAAALdG90YWxBbW91bnQJAQAAABJnZXRVc2VyVG90YWxBbW91bnQAAAACBQAAAAdhc3NldElkBQAAAAdhZGRyZXNzBAAAAA9yZW1haW5pbmdBbW91bnQJAQAAABZnZXRVc2VyUmVtYWluaW5nQW1vdW50AAAAAgUAAAAHYXNzZXRJZAUAAAAHYWRkcmVzcwQAAAAPY2xhaW1lZFdYQW1vdW50CQEAAAAUZ2V0VXNlckNsYWltZWRBbW91bnQAAAACBQAAAAdhc3NldElkBQAAAAdhZGRyZXNzBAAAABFsYXN0Q2xhaW1lZEhlaWdodAkBAAAAGGdldFVzZXJMYXN0Q2xhaW1lZEhlaWdodAAAAAIFAAAAB2Fzc2V0SWQFAAAAB2FkZHJlc3MEAAAAEnVuY2xhaW1lZEFtb3VudE5vdwkBAAAAE2F2YWlsYWJsZVRvQ2xhaW1Ob3cAAAACBQAAAAdhc3NldElkBQAAAAdhZGRyZXNzBAAAAAxyZXZva2VkVG90YWwJAQAAAAt2YWx1ZU9yRWxzZQAAAAIJAAQfAAAAAQkBAAAAD2tleVJldm9rZWRUb3RhbAAAAAEFAAAAB2Fzc2V0SWQAAAAAAAAAAAAEAAAADmFtb3VudFRvUmV2b2tlCQAAZQAAAAIFAAAAD3JlbWFpbmluZ0Ftb3VudAUAAAASdW5jbGFpbWVkQW1vdW50Tm93BAAAAA9uZXdSZXZva2VkVG90YWwJAABkAAAAAgUAAAAMcmV2b2tlZFRvdGFsBQAAAA5hbW91bnRUb1Jldm9rZQQAAAAGY2hlY2tzCQAETAAAAAIJAQAAAAltdXN0QWRtaW4AAAABBQAAAAFpCQAETAAAAAIDCQEAAAACIT0AAAACCQAEIgAAAAEJAQAAAAdrZXlVc2VyAAAAAgUAAAAHYXNzZXRJZAUAAAAHYWRkcmVzcwUAAAAEdW5pdAYJAQAAAAh0aHJvd0VycgAAAAECAAAALGRlcG9zaXQgb2YgdGhpcyBhc3NldCBmb3IgdXNlciBpcyBub3QgZXhpc3RzCQAETAAAAAIDCQAAZgAAAAIFAAAAD25ld1Jldm9rZWRUb3RhbAUAAAAMcmV2b2tlZFRvdGFsBgkBAAAACHRocm93RXJyAAAAAQIAAAA4bmV3UmV2b2tlZFRvdGFsIGNhbid0IGJlIGxlc3Mgb3IgZXF1YWwgdGhhbiByZXZva2VkVG90YWwFAAAAA25pbAMJAAAAAAAAAgUAAAAGY2hlY2tzBQAAAAZjaGVja3MJAARMAAAAAgkBAAAADEJvb2xlYW5FbnRyeQAAAAIJAQAAAAprZXlSZXZva2VkAAAAAgUAAAAHYXNzZXRJZAUAAAAHYWRkcmVzcwYJAARMAAAAAgkBAAAADEludGVnZXJFbnRyeQAAAAIJAQAAAA9rZXlSZXZva2VkVG90YWwAAAABBQAAAAdhc3NldElkBQAAAA9uZXdSZXZva2VkVG90YWwJAARMAAAAAgkBAAAAC1N0cmluZ0VudHJ5AAAAAgkBAAAAB2tleVVzZXIAAAACBQAAAAdhc3NldElkBQAAAAdhZGRyZXNzCQEAAAAJdmFsdWVVc2VyAAAABAUAAAALdG90YWxBbW91bnQFAAAAEnVuY2xhaW1lZEFtb3VudE5vdwUAAAAPY2xhaW1lZFdYQW1vdW50BQAAABFsYXN0Q2xhaW1lZEhlaWdodAUAAAADbmlsCQAAAgAAAAECAAAAJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgAAAAFpAQAAAAVjbGFpbQAAAAEAAAAHYXNzZXRJZAkBAAAADWNsYWltSW50ZXJuYWwAAAACBQAAAAdhc3NldElkCQACWAAAAAEICAUAAAABaQAAAAZjYWxsZXIAAAAFYnl0ZXMAAAABaQEAAAAIY2xhaW1Gb3IAAAACAAAAB2Fzc2V0SWQAAAAHYWRkcmVzcwkBAAAADWNsYWltSW50ZXJuYWwAAAACBQAAAAdhc3NldElkBQAAAAdhZGRyZXNzAAAAAWkBAAAADWNsYWltUkVBRE9OTFkAAAACAAAAB2Fzc2V0SWQAAAAHYWRkcmVzcwQAAAAGYW1vdW50CQEAAAATYXZhaWxhYmxlVG9DbGFpbU5vdwAAAAIFAAAAB2Fzc2V0SWQFAAAAB2FkZHJlc3MJAAUUAAAAAgUAAAADbmlsBQAAAAZhbW91bnQAAAABaQEAAAAVY3JlYXRlRml4ZWREZXBvc2l0Rm9yAAAAAgAAAAdhZGRyZXNzAAAADHJlbGVhc2VCbG9jawQAAAAGYW1vdW50CAkAAZEAAAACCAUAAAABaQAAAAhwYXltZW50cwAAAAAAAAAAAAAAAAZhbW91bnQEAAAAB2Fzc2V0SWQJAAJYAAAAAQkBAAAABXZhbHVlAAAAAQgJAAGRAAAAAggFAAAAAWkAAAAIcGF5bWVudHMAAAAAAAAAAAAAAAAHYXNzZXRJZAQAAAAQdXNlckZpeGVkRGVwb3NpdAkBAAAAE2tleVVzZXJGaXhlZERlcG9zaXQAAAADBQAAAAdhc3NldElkBQAAAAdhZGRyZXNzBQAAAAxyZWxlYXNlQmxvY2sEAAAABmNoZWNrcwkABEwAAAACAwkAAGYAAAACBQAAAAxyZWxlYXNlQmxvY2sFAAAABmhlaWdodAYJAQAAAAh0aHJvd0VycgAAAAECAAAAJXJlbGVhc2VCbG9jayBtdXN0IGJlIG1vcmUgdGhhbiBoZWlnaHQJAARMAAAAAgMJAAAAAAAAAgkABB8AAAABBQAAABB1c2VyRml4ZWREZXBvc2l0BQAAAAR1bml0BgkBAAAACHRocm93RXJyAAAAAQIAAAAvZGVwb3NpdCBmb3IgdGhpcyBoZWlnaHQgZm9yIHVzZXIgYWxyZWFkeSBleGlzdHMFAAAAA25pbAMJAAAAAAAAAgUAAAAGY2hlY2tzBQAAAAZjaGVja3MJAARMAAAAAgkBAAAADEludGVnZXJFbnRyeQAAAAIFAAAAEHVzZXJGaXhlZERlcG9zaXQFAAAABmFtb3VudAUAAAADbmlsCQAAAgAAAAECAAAAJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgAAAAFpAQAAAApjbGFpbUZpeGVkAAAAAgAAAAdhc3NldElkAAAADHJlbGVhc2VCbG9jawkBAAAAEmNsYWltRml4ZWRJbnRlcm5hbAAAAAMFAAAAB2Fzc2V0SWQJAAJYAAAAAQgIBQAAAAFpAAAABmNhbGxlcgAAAAVieXRlcwUAAAAMcmVsZWFzZUJsb2NrAAAAAWkBAAAADWNsYWltRml4ZWRGb3IAAAADAAAAB2Fzc2V0SWQAAAAHYWRkcmVzcwAAAAxyZWxlYXNlQmxvY2sJAQAAABJjbGFpbUZpeGVkSW50ZXJuYWwAAAADBQAAAAdhc3NldElkBQAAAAdhZGRyZXNzBQAAAAxyZWxlYXNlQmxvY2sAAAABaQEAAAASY2xhaW1GaXhlZFJFQURPTkxZAAAAAwAAAAdhc3NldElkAAAAB2FkZHJlc3MAAAAMcmVsZWFz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AAAAB2FkZHJlc3MJAARMAAAAAgkBAAAABXZhbHVlAAAAAQkABB8AAAABCQEAAAARa2V5VXNlclZlc3RpbmdFbmQAAAACBQAAAAdhc3NldElkBQAAAAdhZGRyZXNzCQAETAAAAAIJAQAAABJnZXRVc2VyVG90YWxBbW91bnQAAAACBQAAAAdhc3NldElkBQAAAAdhZGRyZXNzCQAETAAAAAIJAQAAABRnZXRVc2VyQ2xhaW1lZEFtb3VudAAAAAIFAAAAB2Fzc2V0SWQFAAAAB2FkZHJlc3MJAARMAAAAAgkBAAAAFmdldFVzZXJSZW1haW5pbmdBbW91bnQAAAACBQAAAAdhc3NldElkBQAAAAdhZGRyZXNzCQAETAAAAAIJAQAAABNhdmFpbGFibGVUb0NsYWltTm93AAAAAgUAAAAHYXNzZXRJZAUAAAAHYWRkcmVzcwUAAAADbmlsAAAAAWkBAAAACnNldE1hbmFnZXIAAAABAAAAF3BlbmRpbmdNYW5hZ2VyUHVibGljS2V5BAAAAAtjaGVja0NhbGxlcgkBAAAAC211c3RNYW5hZ2VyAAAAAQUAAAABaQMJAAAAAAAAAgUAAAALY2hlY2tDYWxsZXIFAAAAC2NoZWNrQ2FsbGVyBAAAABVjaGVja01hbmFnZXJQdWJsaWNLZXkJAAJZAAAAAQUAAAAXcGVuZGluZ01hbmFnZXJQdWJsaWNLZXkDCQAAAAAAAAIFAAAAFWNoZWNrTWFuYWdlclB1YmxpY0tleQUAAAAVY2hlY2tNYW5hZ2VyUHVibGljS2V5CQAETAAAAAIJAQAAAAtTdHJpbmdFbnRyeQAAAAIJAQAAABprZXlQZW5kaW5nTWFuYWdlclB1YmxpY0tleQAAAAAFAAAAF3BlbmRpbmdNYW5hZ2VyUHVibGljS2V5BQAAAANuaWwJAAACAAAAAQIAAAAkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuCQAAAgAAAAECAAAAJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgAAAAFpAQAAAA5jb25maXJtTWFuYWdlcgAAAAAEAAAAAnBtCQEAAAAdcGVuZGluZ01hbmFnZXJQdWJsaWNLZXlPclVuaXQAAAAABAAAAAVoYXNQTQMJAQAAAAlpc0RlZmluZWQAAAABBQAAAAJwbQYJAQAAAAh0aHJvd0VycgAAAAECAAAAEm5vIHBlbmRpbmcgbWFuYWdlcgMJAAAAAAAAAgUAAAAFaGFzUE0FAAAABWhhc1BNBAAAAAdjaGVja1BNAwkAAAAAAAACCAUAAAABaQAAAA9jYWxsZXJQdWJsaWNLZXkJAQAAAAV2YWx1ZQAAAAEFAAAAAnBtBgkBAAAACHRocm93RXJyAAAAAQIAAAAbeW91IGFyZSBub3QgcGVuZGluZyBtYW5hZ2VyAwkAAAAAAAACBQAAAAdjaGVja1BNBQAAAAdjaGVja1BNCQAETAAAAAIJAQAAAAtTdHJpbmdFbnRyeQAAAAIJAQAAABNrZXlNYW5hZ2VyUHVibGljS2V5AAAAAAkAAlgAAAABCQEAAAAFdmFsdWUAAAABBQAAAAJwbQkABEwAAAACCQEAAAALRGVsZXRlRW50cnkAAAABCQEAAAAaa2V5UGVuZGluZ01hbmFnZXJQdWJsaWNLZXkAAAAABQAAAANuaWwJAAACAAAAAQIAAAAkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuCQAAAgAAAAECAAAAJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgAAAAEAAAACdHgBAAAABnZlcmlmeQAAAAAEAAAAD3RhcmdldFB1YmxpY0tleQQAAAAHJG1hdGNoMAkBAAAAFm1hbmFnZXJQdWJsaWNLZXlPclVuaXQAAAAAAwkAAAEAAAACBQAAAAckbWF0Y2gwAgAAAApCeXRlVmVjdG9yBAAAAAJwawUAAAAHJG1hdGNoMAUAAAACcGsDCQAAAQAAAAIFAAAAByRtYXRjaDACAAAABFVuaXQIBQAAAAJ0eAAAAA9zZW5kZXJQdWJsaWNLZXkJAAACAAAAAQIAAAALTWF0Y2ggZXJyb3IJAAH0AAAAAwgFAAAAAnR4AAAACWJvZHlCeXRlcwkAAZEAAAACCAUAAAACdHgAAAAGcHJvb2ZzAAAAAAAAAAAABQAAAA90YXJnZXRQdWJsaWNLZXlT7zO5", "chainId": 84, "height": 2237561, "applicationStatus": "succeeded", "spentComplexity": 0 } View: original | compacted Prev: Dx2SV1JCHKuP6j3NR7k47VFDPgwhjfnBcRzQqN97W38S Next: BG1NtcEhXdXnoQxcm4RkU7cmByPRnWFgRpPHjAf4yRHz Diff:
OldNewDifferences
157157
158158
159159 func claimFixedInternal (assetId,address,releaseBlock) = {
160+ let userFixedDeposit = getInteger(keyUserFixedDeposit(assetId, address, releaseBlock))
160161 let checks = [if ((valueOrElse(getBoolean(keyClaimDenied(assetId)), false) == false))
161162 then true
162163 else throwErr("asset claim denied"), if ((height > releaseBlock))
163164 then true
164- else throwErr("current height must be more than releaseBlock for fixed deposit"), if ((valueOrElse(getInteger(keyUserFixedDeposit(assetId, address, releaseBlock)), 0) != 0))
165+ else throwErr("current height must be more than releaseBlock for fixed deposit"), if ((valueOrElse(userFixedDeposit, 0) != 0))
165166 then true
166167 else throwErr("no fixed deposit for assetId/address/height")]
167168 if ((checks == checks))
168169 then {
169170 let addr = addressFromStringValue(address)
170171 let asset = fromBase58String(assetId)
171- let amount = value(getInteger(keyUserFixedDeposit(assetId, address, releaseBlock)))
172+ let amount = value(userFixedDeposit)
172173 [ScriptTransfer(addr, amount, asset), IntegerEntry(keyUserFixedDeposit(assetId, address, releaseBlock), 0)]
173174 }
174175 else throw("Strict value is not equal to itself.")
288289 func createFixedDepositFor (address,releaseBlock) = {
289290 let amount = i.payments[0].amount
290291 let assetId = toBase58String(value(i.payments[0].assetId))
292+ let userFixedDeposit = keyUserFixedDeposit(assetId, address, releaseBlock)
291293 let checks = [if ((releaseBlock > height))
292294 then true
293- else throwErr("releaseBlock must be more than height"), if ((getInteger(keyUserFixedDeposit(assetId, address, releaseBlock)) == unit))
295+ else throwErr("releaseBlock must be more than height"), if ((getInteger(userFixedDeposit) == unit))
294296 then true
295297 else throwErr("deposit for this height for user already exists")]
296298 if ((checks == checks))
297- then [IntegerEntry(keyUserFixedDeposit(assetId, address, releaseBlock), amount)]
299+ then [IntegerEntry(userFixedDeposit, amount)]
298300 else throw("Strict value is not equal to itself.")
299301 }
300302
320322
321323 @Callable(i)
322324 func revokeFixedDepositFor (assetId,address,releaseBlock) = {
323- let checks = [mustAdmin(i), if ((height > releaseBlock))
325+ let checks = [mustAdmin(i), if ((releaseBlock > height))
324326 then true
325327 else throwErr("can't revoke deposit in past"), if ((valueOrElse(getInteger(keyUserFixedDeposit(assetId, address, releaseBlock)), 0) != 0))
326328 then true
Full:
OldNewDifferences
11 {-# STDLIB_VERSION 5 #-}
22 {-# SCRIPT_TYPE ACCOUNT #-}
33 {-# CONTENT_TYPE DAPP #-}
44 let SEP = "__"
55
66 let EMPTY = ""
77
88 func keyManagerPublicKey () = "%s__managerPublicKey"
99
1010
1111 func keyPendingManagerPublicKey () = "%s__pendingManagerPublicKey"
1212
1313
1414 func keyAdminPubKeys () = "%s__adminPubKeys"
1515
1616
1717 func keyUser (assetId,address) = makeString(["%s%s", assetId, address], SEP)
1818
1919
2020 func keyUserFixedDeposit (assetId,address,block) = makeString(["%s%s%s%d", "fixedDeposit", assetId, address, toString(block)], SEP)
2121
2222
2323 func keyRevoked (assetId,address) = makeString(["%s%s%s", "revoked", assetId, address], SEP)
2424
2525
2626 func keyRevokedTotal (assetId) = makeString(["%s%s", "revokedTotal", assetId], SEP)
2727
2828
2929 func keyUserVestingStart (assetId,address) = makeString(["%s%s%s", "vestingStart", assetId, address], SEP)
3030
3131
3232 func keyUserVestingEnd (assetId,address) = makeString(["%s%s%s", "vestingEnd", assetId, address], SEP)
3333
3434
3535 func keyUserAmountPerBlock (assetId,address) = makeString(["%s%s%s", "amountPerBlock", assetId, address], SEP)
3636
3737
3838 func keyClaimDenied (assetId) = makeString(["%s%s", "claimDenied", assetId], SEP)
3939
4040
4141 func throwErr (msg) = throw(makeString(["vesting_multiasset.ride:", msg], " "))
4242
4343
4444 func managerPublicKeyOrUnit () = match getString(keyManagerPublicKey()) {
4545 case s: String =>
4646 fromBase58String(s)
4747 case _: Unit =>
4848 unit
4949 case _ =>
5050 throw("Match error")
5151 }
5252
5353
5454 func pendingManagerPublicKeyOrUnit () = match getString(keyPendingManagerPublicKey()) {
5555 case s: String =>
5656 fromBase58String(s)
5757 case _: Unit =>
5858 unit
5959 case _ =>
6060 throw("Match error")
6161 }
6262
6363
6464 func mustManager (i) = {
6565 let pd = throwErr("permission denied")
6666 match managerPublicKeyOrUnit() {
6767 case pk: ByteVector =>
6868 if ((i.callerPublicKey == pk))
6969 then true
7070 else pd
7171 case _: Unit =>
7272 if ((i.caller == this))
7373 then true
7474 else pd
7575 case _ =>
7676 throw("Match error")
7777 }
7878 }
7979
8080
8181 func mustAdmin (i) = {
8282 let adminPKs = split(valueOrElse(getString(keyAdminPubKeys()), EMPTY), SEP)
8383 if (containsElement(adminPKs, toBase58String(i.callerPublicKey)))
8484 then true
8585 else {
8686 let isManager = mustManager(i)
8787 if ((isManager == isManager))
8888 then true
8989 else throw("Strict value is not equal to itself.")
9090 }
9191 }
9292
9393
9494 func valueUserS (totalAmount,remainingAmount,claimedWXAmount,lastClaimedHeight) = makeString(["%d%d%d%d%d", totalAmount, remainingAmount, "0", claimedWXAmount, lastClaimedHeight], SEP)
9595
9696
9797 func valueUser (totalAmount,remainingAmount,claimedWXAmount,lastClaimedHeight) = valueUserS(toString(totalAmount), toString(remainingAmount), toString(claimedWXAmount), toString(lastClaimedHeight))
9898
9999
100100 func getUserTotalAmount (assetId,address) = parseIntValue(split(value(getString(keyUser(assetId, address))), SEP)[1])
101101
102102
103103 func getUserRemainingAmount (assetId,address) = parseIntValue(split(value(getString(keyUser(assetId, address))), SEP)[2])
104104
105105
106106 func getUserClaimedAmount (assetId,address) = parseIntValue(split(value(getString(keyUser(assetId, address))), SEP)[3])
107107
108108
109109 func getUserLastClaimedHeight (assetId,address) = parseIntValue(split(value(getString(keyUser(assetId, address))), SEP)[5])
110110
111111
112112 func availableToClaimNow (assetId,address) = {
113113 let isRevokedUser = valueOrElse(getBoolean(keyRevoked(assetId, address)), false)
114114 if (isRevokedUser)
115115 then getUserRemainingAmount(assetId, address)
116116 else {
117117 let lastHeight = getUserLastClaimedHeight(assetId, address)
118118 if ((lastHeight >= height))
119119 then 0
120120 else {
121121 let end = value(getInteger(keyUserVestingEnd(assetId, address)))
122122 if ((height > end))
123123 then getUserRemainingAmount(assetId, address)
124124 else {
125125 let unclaimedPeriod = (height - lastHeight)
126126 (value(getInteger(keyUserAmountPerBlock(assetId, address))) * unclaimedPeriod)
127127 }
128128 }
129129 }
130130 }
131131
132132
133133 func availableToClaimFixed (assetId,address,releaseBlock) = valueOrElse(getInteger(keyUserFixedDeposit(assetId, address, releaseBlock)), 0)
134134
135135
136136 func claimInternal (assetId,address) = {
137137 let addr = addressFromStringValue(address)
138138 let asset = fromBase58String(assetId)
139139 let amount = availableToClaimNow(assetId, address)
140140 let checks = [if ((valueOrElse(getBoolean(keyClaimDenied(assetId)), false) == false))
141141 then true
142142 else throwErr("asset claim denied"), if ((amount != 0))
143143 then true
144144 else throwErr("nothing to claim")]
145145 if ((checks == checks))
146146 then {
147147 let totalAmount = getUserTotalAmount(assetId, address)
148148 let remainingAmount = getUserRemainingAmount(assetId, address)
149149 let claimedAmount = getUserClaimedAmount(assetId, address)
150150 let isRevokedUser = valueOrElse(getBoolean(keyRevoked(assetId, address)), false)
151151 if (isRevokedUser)
152152 then [ScriptTransfer(addr, remainingAmount, asset), StringEntry(keyUser(assetId, address), valueUser(totalAmount, 0, (claimedAmount + remainingAmount), height))]
153153 else [ScriptTransfer(addr, amount, asset), StringEntry(keyUser(assetId, address), valueUser(totalAmount, (remainingAmount - amount), (claimedAmount + amount), height))]
154154 }
155155 else throw("Strict value is not equal to itself.")
156156 }
157157
158158
159159 func claimFixedInternal (assetId,address,releaseBlock) = {
160+ let userFixedDeposit = getInteger(keyUserFixedDeposit(assetId, address, releaseBlock))
160161 let checks = [if ((valueOrElse(getBoolean(keyClaimDenied(assetId)), false) == false))
161162 then true
162163 else throwErr("asset claim denied"), if ((height > releaseBlock))
163164 then true
164- else throwErr("current height must be more than releaseBlock for fixed deposit"), if ((valueOrElse(getInteger(keyUserFixedDeposit(assetId, address, releaseBlock)), 0) != 0))
165+ else throwErr("current height must be more than releaseBlock for fixed deposit"), if ((valueOrElse(userFixedDeposit, 0) != 0))
165166 then true
166167 else throwErr("no fixed deposit for assetId/address/height")]
167168 if ((checks == checks))
168169 then {
169170 let addr = addressFromStringValue(address)
170171 let asset = fromBase58String(assetId)
171- let amount = value(getInteger(keyUserFixedDeposit(assetId, address, releaseBlock)))
172+ let amount = value(userFixedDeposit)
172173 [ScriptTransfer(addr, amount, asset), IntegerEntry(keyUserFixedDeposit(assetId, address, releaseBlock), 0)]
173174 }
174175 else throw("Strict value is not equal to itself.")
175176 }
176177
177178
178179 @Callable(i)
179180 func withdrawRevoked (assetId) = {
180181 let amount = valueOrElse(getInteger(keyRevokedTotal(assetId)), 0)
181182 let asset = fromBase58String(assetId)
182183 let checks = [mustManager(i), if ((amount > 0))
183184 then true
184185 else throwErr("revoked amount is zero, nothing to withdraw")]
185186 if ((checks == checks))
186187 then [ScriptTransfer(i.caller, amount, asset), IntegerEntry(keyRevokedTotal(assetId), 0)]
187188 else throw("Strict value is not equal to itself.")
188189 }
189190
190191
191192
192193 @Callable(i)
193194 func createDepositFor (address,blocksDuration) = {
194195 let amount = i.payments[0].amount
195196 let assetId = toBase58String(value(i.payments[0].assetId))
196197 let endHeight = (height + blocksDuration)
197198 let vestingLen = (endHeight - height)
198199 let amountPerBlock = (amount / vestingLen)
199200 let checks = [if ((endHeight > height))
200201 then true
201202 else throwErr("endHeight must be more than height"), if ((getString(keyUser(assetId, address)) == unit))
202203 then true
203204 else throwErr("deposit of this asset for user already exists"), if ((amountPerBlock != 0))
204205 then true
205206 else throwErr("attached amount too small or blocksDuration too large — will claimed zero per block")]
206207 if ((checks == checks))
207208 then [StringEntry(keyUser(assetId, address), valueUser(amount, amount, 0, height)), IntegerEntry(keyUserVestingStart(assetId, address), height), IntegerEntry(keyUserVestingEnd(assetId, address), endHeight), IntegerEntry(keyUserAmountPerBlock(assetId, address), amountPerBlock)]
208209 else throw("Strict value is not equal to itself.")
209210 }
210211
211212
212213
213214 @Callable(i)
214215 func increaseDepositFor (address) = {
215216 let amount = i.payments[0].amount
216217 let assetId = toBase58String(value(i.payments[0].assetId))
217218 let availableToClaim = availableToClaimNow(assetId, address)
218219 let forceClaim = if ((availableToClaim > 0))
219220 then claimInternal(assetId, address)
220221 else unit
221222 if ((forceClaim == forceClaim))
222223 then {
223224 let endHeight = value(getInteger(keyUserVestingEnd(assetId, address)))
224225 let vestingLen = (endHeight - height)
225226 let amountPerBlock = value(getInteger(keyUserAmountPerBlock(assetId, address)))
226227 let incAmountPerBlock = (amount / vestingLen)
227228 let userTotalAmount = getUserTotalAmount(assetId, address)
228229 let userRemainingAmount = getUserRemainingAmount(assetId, address)
229230 let userClaimedAmount = getUserClaimedAmount(assetId, address)
230231 let userLastClaimedHeight = getUserLastClaimedHeight(assetId, address)
231232 let checks = [if ((valueOrElse(getBoolean(keyRevoked(assetId, address)), false) == false))
232233 then true
233234 else throwErr("deposit for user is revoked"), if ((getString(keyUser(assetId, address)) != unit))
234235 then true
235236 else throwErr("deposit for user doesn't exists"), if ((incAmountPerBlock != 0))
236237 then true
237238 else throwErr("attached amount too small — increase is zero per block")]
238239 if ((checks == checks))
239240 then [StringEntry(keyUser(assetId, address), valueUser((userTotalAmount + amount), (userRemainingAmount + amount), userClaimedAmount, userLastClaimedHeight)), IntegerEntry(keyUserAmountPerBlock(assetId, address), (amountPerBlock + incAmountPerBlock))]
240241 else throw("Strict value is not equal to itself.")
241242 }
242243 else throw("Strict value is not equal to itself.")
243244 }
244245
245246
246247
247248 @Callable(i)
248249 func revokeDepositFor (assetId,address) = {
249250 let totalAmount = getUserTotalAmount(assetId, address)
250251 let remainingAmount = getUserRemainingAmount(assetId, address)
251252 let claimedWXAmount = getUserClaimedAmount(assetId, address)
252253 let lastClaimedHeight = getUserLastClaimedHeight(assetId, address)
253254 let unclaimedAmountNow = availableToClaimNow(assetId, address)
254255 let revokedTotal = valueOrElse(getInteger(keyRevokedTotal(assetId)), 0)
255256 let amountToRevoke = (remainingAmount - unclaimedAmountNow)
256257 let newRevokedTotal = (revokedTotal + amountToRevoke)
257258 let checks = [mustAdmin(i), if ((getString(keyUser(assetId, address)) != unit))
258259 then true
259260 else throwErr("deposit of this asset for user is not exists"), if ((newRevokedTotal > revokedTotal))
260261 then true
261262 else throwErr("newRevokedTotal can't be less or equal than revokedTotal")]
262263 if ((checks == checks))
263264 then [BooleanEntry(keyRevoked(assetId, address), true), IntegerEntry(keyRevokedTotal(assetId), newRevokedTotal), StringEntry(keyUser(assetId, address), valueUser(totalAmount, unclaimedAmountNow, claimedWXAmount, lastClaimedHeight))]
264265 else throw("Strict value is not equal to itself.")
265266 }
266267
267268
268269
269270 @Callable(i)
270271 func claim (assetId) = claimInternal(assetId, toBase58String(i.caller.bytes))
271272
272273
273274
274275 @Callable(i)
275276 func claimFor (assetId,address) = claimInternal(assetId, address)
276277
277278
278279
279280 @Callable(i)
280281 func claimREADONLY (assetId,address) = {
281282 let amount = availableToClaimNow(assetId, address)
282283 $Tuple2(nil, amount)
283284 }
284285
285286
286287
287288 @Callable(i)
288289 func createFixedDepositFor (address,releaseBlock) = {
289290 let amount = i.payments[0].amount
290291 let assetId = toBase58String(value(i.payments[0].assetId))
292+ let userFixedDeposit = keyUserFixedDeposit(assetId, address, releaseBlock)
291293 let checks = [if ((releaseBlock > height))
292294 then true
293- else throwErr("releaseBlock must be more than height"), if ((getInteger(keyUserFixedDeposit(assetId, address, releaseBlock)) == unit))
295+ else throwErr("releaseBlock must be more than height"), if ((getInteger(userFixedDeposit) == unit))
294296 then true
295297 else throwErr("deposit for this height for user already exists")]
296298 if ((checks == checks))
297- then [IntegerEntry(keyUserFixedDeposit(assetId, address, releaseBlock), amount)]
299+ then [IntegerEntry(userFixedDeposit, amount)]
298300 else throw("Strict value is not equal to itself.")
299301 }
300302
301303
302304
303305 @Callable(i)
304306 func claimFixed (assetId,releaseBlock) = claimFixedInternal(assetId, toBase58String(i.caller.bytes), releaseBlock)
305307
306308
307309
308310 @Callable(i)
309311 func claimFixedFor (assetId,address,releaseBlock) = claimFixedInternal(assetId, address, releaseBlock)
310312
311313
312314
313315 @Callable(i)
314316 func claimFixedREADONLY (assetId,address,releaseBlock) = {
315317 let amount = availableToClaimFixed(assetId, address, releaseBlock)
316318 $Tuple2(nil, amount)
317319 }
318320
319321
320322
321323 @Callable(i)
322324 func revokeFixedDepositFor (assetId,address,releaseBlock) = {
323- let checks = [mustAdmin(i), if ((height > releaseBlock))
325+ let checks = [mustAdmin(i), if ((releaseBlock > height))
324326 then true
325327 else throwErr("can't revoke deposit in past"), if ((valueOrElse(getInteger(keyUserFixedDeposit(assetId, address, releaseBlock)), 0) != 0))
326328 then true
327329 else throwErr("deposit for this height for user not exists")]
328330 if ((checks == checks))
329331 then {
330332 let amount = value(getInteger(keyUserFixedDeposit(assetId, address, releaseBlock)))
331333 [IntegerEntry(keyRevokedTotal(assetId), amount), IntegerEntry(keyUserFixedDeposit(assetId, address, releaseBlock), 0)]
332334 }
333335 else throw("Strict value is not equal to itself.")
334336 }
335337
336338
337339
338340 @Callable(i)
339341 func denyAssetClaim (assetId) = {
340342 let checks = [mustAdmin(i), if ((valueOrElse(getBoolean(keyClaimDenied(assetId)), false) == false))
341343 then true
342344 else throwErr("asset already denied")]
343345 if ((checks == checks))
344346 then [BooleanEntry(keyClaimDenied(assetId), true)]
345347 else throw("Strict value is not equal to itself.")
346348 }
347349
348350
349351
350352 @Callable(i)
351353 func allowAssetClaim (assetId) = {
352354 let checks = [mustAdmin(i), if ((valueOrElse(getBoolean(keyClaimDenied(assetId)), false) == true))
353355 then true
354356 else throwErr("asset already allowed")]
355357 if ((checks == checks))
356358 then [DeleteEntry(keyClaimDenied(assetId))]
357359 else throw("Strict value is not equal to itself.")
358360 }
359361
360362
361363
362364 @Callable(i)
363365 func stats (assetId,address) = $Tuple2(nil, [value(getInteger(keyUserVestingStart(assetId, address))), value(getInteger(keyUserVestingEnd(assetId, address))), getUserTotalAmount(assetId, address), getUserClaimedAmount(assetId, address), getUserRemainingAmount(assetId, address), availableToClaimNow(assetId, address)])
364366
365367
366368
367369 @Callable(i)
368370 func setManager (pendingManagerPublicKey) = {
369371 let checkCaller = mustManager(i)
370372 if ((checkCaller == checkCaller))
371373 then {
372374 let checkManagerPublicKey = fromBase58String(pendingManagerPublicKey)
373375 if ((checkManagerPublicKey == checkManagerPublicKey))
374376 then [StringEntry(keyPendingManagerPublicKey(), pendingManagerPublicKey)]
375377 else throw("Strict value is not equal to itself.")
376378 }
377379 else throw("Strict value is not equal to itself.")
378380 }
379381
380382
381383
382384 @Callable(i)
383385 func confirmManager () = {
384386 let pm = pendingManagerPublicKeyOrUnit()
385387 let hasPM = if (isDefined(pm))
386388 then true
387389 else throwErr("no pending manager")
388390 if ((hasPM == hasPM))
389391 then {
390392 let checkPM = if ((i.callerPublicKey == value(pm)))
391393 then true
392394 else throwErr("you are not pending manager")
393395 if ((checkPM == checkPM))
394396 then [StringEntry(keyManagerPublicKey(), toBase58String(value(pm))), DeleteEntry(keyPendingManagerPublicKey())]
395397 else throw("Strict value is not equal to itself.")
396398 }
397399 else throw("Strict value is not equal to itself.")
398400 }
399401
400402
401403 @Verifier(tx)
402404 func verify () = {
403405 let targetPublicKey = match managerPublicKeyOrUnit() {
404406 case pk: ByteVector =>
405407 pk
406408 case _: Unit =>
407409 tx.senderPublicKey
408410 case _ =>
409411 throw("Match error")
410412 }
411413 sigVerify(tx.bodyBytes, tx.proofs[0], targetPublicKey)
412414 }
413415

github/deemru/w8io/169f3d6 
69.48 ms