tx · EahQEpZQQ7yUU7vQhuAU2QtA3cDezMP8LzEe3JssNrAB

3Mz1rmCZnkGe2yPbtNZ66VUTCDuT9zmPSJ7:  -0.01500000 Waves

2023.03.14 17:13 [2489822] smart account 3Mz1rmCZnkGe2yPbtNZ66VUTCDuT9zmPSJ7 > SELF 0.00000000 Waves

{ "type": 13, "id": "EahQEpZQQ7yUU7vQhuAU2QtA3cDezMP8LzEe3JssNrAB", "fee": 1500000, "feeAssetId": null, "timestamp": 1678803192500, "version": 2, "chainId": 84, "sender": "3Mz1rmCZnkGe2yPbtNZ66VUTCDuT9zmPSJ7", "senderPublicKey": "5UpSa8WyDuRkZ5qCEUsadSLMBTDGRaFo1AKgUEfSFhUg", "proofs": [ "5YM75MSm5Eagp4CbHwQTQiMWboNsfc1bsDmJ8q9jdGWSvQw1WcUCbTmeq1pA2ybCNcrViyvvYEm7iVrCcyxpqGzz" ], "script": "base64:AAIFAAAAAAAAABwIAhIFCgMBAQgSAwoBARIAEgMKAQESAwoBCBIAAAAAIAAAAAADU0VQAgAAAAJfXwAAAAALa2V5UmVmZXJyYWwJAAS5AAAAAgkABEwAAAACAgAAAAIlcwkABEwAAAACAgAAAAhyZWZlcnJhbAUAAAADbmlsBQAAAANTRVAAAAAADGtleVd4QXNzZXRJZAkABLkAAAACCQAETAAAAAICAAAAAiVzCQAETAAAAAICAAAACXd4QXNzZXRJZAUAAAADbmlsBQAAAANTRVABAAAAE2tleU1hbmFnZXJQdWJsaWNLZXkAAAAAAgAAABQlc19fbWFuYWdlclB1YmxpY0tleQEAAAAaa2V5UGVuZGluZ01hbmFnZXJQdWJsaWNLZXkAAAAAAgAAABslc19fcGVuZGluZ01hbmFnZXJQdWJsaWNLZXkAAAAAFUlkeENmZ0NsYWltU3RhcnRCbG9jawAAAAAAAAAAAQAAAAAYSWR4Q2ZnQ2xhaW1WZXN0aW5nUGVyaW9kAAAAAAAAAAACAAAAABJJZHhDZmdDbGFpbUFzc2V0SWQAAAAAAAAAAAMAAAAAFElkeENmZ0NsYWltQXNzZXRNdWx0AAAAAAAAAAAEAAAAABVJZHhDZmdDbGFpbUFzc2V0T3duZXIAAAAAAAAAAAUAAAAAG0lkeENmZ0NsYWltQXNzZXRUb3RhbEFtb3VudAAAAAAAAAAABgAAAAAbSWR4VG90YWxzVG90YWxDbGFpbWVkQW1vdW50AAAAAAAAAAABAAAAABhJZHhUb3RhbHNSZW1haW5pbmdBbW91bnQAAAAAAAAAAAIAAAAAGklkeFRvdGFsc0xhc3RDbGFpbWVkSGVpZ2h0AAAAAAAAAAADAQAAAAh0aHJvd0VycgAAAAEAAAADbXNnCQAAAgAAAAEJAAS5AAAAAgkABEwAAAACAgAAAA9tYXJrZXRpbmcucmlkZToJAARMAAAAAgUAAAADbXNnBQAAAANuaWwCAAAAASABAAAAD2dldFN0cmluZ09yRmFpbAAAAAEAAAADa2V5CQEAAAATdmFsdWVPckVycm9yTWVzc2FnZQAAAAIJAAQiAAAAAQUAAAADa2V5CQABLAAAAAIJAAEsAAAAAgIAAAAPbWFuZGF0b3J5IHRoaXMuBQAAAANrZXkCAAAADyBpcyBub3QgZGVmaW5lZAEAAAASZm9ybWF0Q29uZmlnU3RyaW5nAAAABgAAAA9jbGFpbVN0YXJ0QmxvY2sAAAANdmVzdGluZ1BlcmlvZAAAAA1hc3NldElkQmFzZTU4AAAACWFzc2V0TXVsdAAAAAphc3NldE93bmVyAAAADWFzc2V0VG90YWxBbXQJAAS5AAAAAgkABEwAAAACAgAAAA0lZCVkJXMlZCVzJWQlCQAETAAAAAIFAAAAD2NsYWltU3RhcnRCbG9jawkABEwAAAACBQAAAA12ZXN0aW5nUGVyaW9kCQAETAAAAAIFAAAADWFzc2V0SWRCYXNlNTgJAARMAAAAAgUAAAAJYXNzZXRNdWx0CQAETAAAAAIFAAAACmFzc2V0T3duZXIJAARMAAAAAgUAAAANYXNzZXRUb3RhbEFtdAUAAAADbmlsBQAAAANTRVABAAAADGZvcm1hdENvbmZpZwAAAAYAAAAPY2xhaW1TdGFydEJsb2NrAAAADXZlc3RpbmdQZXJpb2QAAAANYXNzZXRJZEJhc2U1OAAAAAlhc3NldE11bHQAAAAPY2xhaW1Bc3NldE93bmVyAAAAFWNsYWltQXNzZXRUb3RhbEFtb3VudAkBAAAAEmZvcm1hdENvbmZpZ1N0cmluZwAAAAYJAAGkAAAAAQUAAAAPY2xhaW1TdGFydEJsb2NrCQABpAAAAAEFAAAADXZlc3RpbmdQZXJpb2QFAAAADWFzc2V0SWRCYXNlNTgJAAGkAAAAAQUAAAAJYXNzZXRNdWx0BQAAAA9jbGFpbUFzc2V0T3duZXIJAAGkAAAAAQUAAAAVY2xhaW1Bc3NldFRvdGFsQW1vdW50AQAAABJmb3JtYXRUb3RhbHNTdHJpbmcAAAADAAAAEnRvdGFsQ2xhaW1lZEFtb3VudAAAABdyZW1haW5pbmdBbW91bnRGb3JDbGFpbQAAABFsYXN0Q2xhaW1lZEhlaWdodAkABLkAAAACCQAETAAAAAICAAAABiVkJWQlZAkABEwAAAACBQAAABJ0b3RhbENsYWltZWRBbW91bnQJAARMAAAAAgUAAAAXcmVtYWluaW5nQW1vdW50Rm9yQ2xhaW0JAARMAAAAAgUAAAARbGFzdENsYWltZWRIZWlnaHQFAAAAA25pbAUAAAADU0VQAQAAABNmb3JtYXRIaXN0b3J5UmVjb3JkAAAABAAAABJjbGFpbWVkQXNzZXRBbW91bnQAAAAOY2xhaW1pbmdCbG9ja3MAAAAUZmlyc3RDYWx1bGF0aW9uQmxvY2sAAAATbGFzdENhbHVsYXRpb25CbG9jawkABLkAAAACCQAETAAAAAICAAAADCVkJWQlZCVkJWQlZAkABEwAAAACCQABpAAAAAEFAAAABmhlaWdodAkABEwAAAACCQABpAAAAAEIBQAAAAlsYXN0QmxvY2sAAAAJdGltZXN0YW1wCQAETAAAAAIJAAGkAAAAAQUAAAASY2xhaW1lZEFzc2V0QW1vdW50CQAETAAAAAIJAAGkAAAAAQUAAAAOY2xhaW1pbmdCbG9ja3MJAARMAAAAAgkAAaQAAAABBQAAABRmaXJzdENhbHVsYXRpb25CbG9jawkABEwAAAACCQABpAAAAAEFAAAAE2xhc3RDYWx1bGF0aW9uQmxvY2sFAAAAA25pbAUAAAADU0VQAQAAAAlrZXlDb25maWcAAAAAAgAAAAolc19fY29uZmlnAQAAAAlrZXlUb3RhbHMAAAAAAgAAAAolc19fdG90YWxzAAAAABJrZXlBbW91bnRVbmNsYWltZWQJAAS5AAAAAgkABEwAAAACAgAAAAIlcwkABEwAAAACAgAAAA9hbW91bnRVbmNsYWltZWQFAAAAA25pbAUAAAADU0VQAQAAABlrZXlPcGVyYXRpb25IaXN0b3J5UmVjb3JkAAAAAwAAAAR0eXBlAAAAC3VzZXJBZGRyZXNzAAAABnR4SWQ1OAkABLkAAAACCQAETAAAAAICAAAAESVzJXMlcyVzX19oaXN0b3J5CQAETAAAAAIFAAAABHR5cGUJAARMAAAAAgUAAAALdXNlckFkZHJlc3MJAARMAAAAAgUAAAAGdHhJZDU4BQAAAANuaWwFAAAAA1NFUAEAAAAPcmVhZENvbmZpZ0FycmF5AAAAAAkABLUAAAACCQEAAAAPZ2V0U3RyaW5nT3JGYWlsAAAAAQkBAAAACWtleUNvbmZpZwAAAAAFAAAAA1NFUAEAAAAPcmVhZFRvdGFsc0FycmF5AAAAAAkABLUAAAACCQEAAAAPZ2V0U3RyaW5nT3JGYWlsAAAAAQkBAAAACWtleVRvdGFscwAAAAAFAAAAA1NFUAEAAAALVG90YWxzRW50cnkAAAAEAAAAA2tleQAAAAlvcmlnQXJyYXkAAAAKY2xhaW1lZEFtdAAAABRuZXdMYXN0Q2xhaW1lZEhlaWdodAQAAAASdG90YWxDbGFpbWVkQW1vdW50CQEAAAANcGFyc2VJbnRWYWx1ZQAAAAEJAAGRAAAAAgUAAAAJb3JpZ0FycmF5BQAAABtJZHhUb3RhbHNUb3RhbENsYWltZWRBbW91bnQEAAAAD3JlbWFpbmluZ0Ftb3VudAkBAAAADXBhcnNlSW50VmFsdWUAAAABCQABkQAAAAIFAAAACW9yaWdBcnJheQUAAAAYSWR4VG90YWxzUmVtYWluaW5nQW1vdW50BAAAABFsYXN0Q2xhaW1lZEhlaWdodAkBAAAADXBhcnNlSW50VmFsdWUAAAABCQABkQAAAAIFAAAACW9yaWdBcnJheQUAAAAaSWR4VG90YWxzTGFzdENsYWltZWRIZWlnaHQEAAAAFW5ld1RvdGFsQ2xhaW1lZEFtb3VudAkAAGQAAAACBQAAABJ0b3RhbENsYWltZWRBbW91bnQFAAAACmNsYWltZWRBbXQEAAAAEm5ld1JlbWFpbmluZ0Ftb3VudAkAAGUAAAACBQAAAA9yZW1haW5pbmdBbW91bnQFAAAACmNsYWltZWRBbXQDCQAAZgAAAAIAAAAAAAAAAAAFAAAAEm5ld1JlbWFpbmluZ0Ftb3VudAkAAAIAAAABAgAAAAxpbnZhbGlkIG1hdGgJAQAAAAtTdHJpbmdFbnRyeQAAAAIFAAAAA2tleQkBAAAAEmZvcm1hdFRvdGFsc1N0cmluZwAAAAMJAAGkAAAAAQUAAAAVbmV3VG90YWxDbGFpbWVkQW1vdW50CQABpAAAAAEFAAAAEm5ld1JlbWFpbmluZ0Ftb3VudAkAAaQAAAABBQAAABRuZXdMYXN0Q2xhaW1lZEhlaWdodAEAAAAaQ2xhaW1PcGVyYXRpb25IaXN0b3J5RW50cnkAAAAGAAAAC3VzZXJBZGRyZXNzAAAAEmNsYWltZWRBc3NldEFtb3VudAAAAA5jbGFpbWluZ0Jsb2NrcwAAABVmaXJzdENhbGN1bGF0aW9uQmxvY2sAAAAUbGFzdENhbGN1bGF0aW9uQmxvY2sAAAAEdHhJZAkBAAAAC1N0cmluZ0VudHJ5AAAAAgkBAAAAGWtleU9wZXJhdGlvbkhpc3RvcnlSZWNvcmQAAAADAgAAAAVjbGFpbQUAAAALdXNlckFkZHJlc3MJAAJYAAAAAQUAAAAEdHhJZAkBAAAAE2Zvcm1hdEhpc3RvcnlSZWNvcmQAAAAEBQAAABJjbGFpbWVkQXNzZXRBbW91bnQFAAAADmNsYWltaW5nQmxvY2tzBQAAABVmaXJzdENhbGN1bGF0aW9uQmxvY2sFAAAAFGxhc3RDYWxjdWxhdGlvbkJsb2NrAQAAABZtYW5hZ2VyUHVibGljS2V5T3JVbml0AAAAAAQAAAAHJG1hdGNoMAkABCIAAAABCQEAAAATa2V5TWFuYWdlclB1YmxpY0tleQAAAAADCQAAAQAAAAIFAAAAByRtYXRjaDACAAAABlN0cmluZwQAAAABcwUAAAAHJG1hdGNoMAkAAlkAAAABBQAAAAFzAwkAAAEAAAACBQAAAAckbWF0Y2gwAgAAAARVbml0BQAAAAR1bml0CQAAAgAAAAECAAAAC01hdGNoIGVycm9yAQAAAB1wZW5kaW5nTWFuYWdlclB1YmxpY0tleU9yVW5pdAAAAAAEAAAAByRtYXRjaDAJAAQiAAAAAQkBAAAAGmtleVBlbmRpbmdNYW5hZ2VyUHVibGljS2V5AAAAAAMJAAABAAAAAgUAAAAHJG1hdGNoMAIAAAAGU3RyaW5nBAAAAAFzBQAAAAckbWF0Y2gwCQACWQAAAAEFAAAAAXMDCQAAAQAAAAIFAAAAByRtYXRjaDACAAAABFVuaXQFAAAABHVuaXQJAAACAAAAAQIAAAALTWF0Y2ggZXJyb3IBAAAAC211c3RNYW5hZ2VyAAAAAQAAAAFpBAAAAAJwZAkBAAAACHRocm93RXJyAAAAAQIAAAARcGVybWlzc2lvbiBkZW5pZWQEAAAAByRtYXRjaDAJAQAAABZtYW5hZ2VyUHVibGljS2V5T3JVbml0AAAAAAMJAAABAAAAAgUAAAAHJG1hdGNoMAIAAAAKQnl0ZVZlY3RvcgQAAAACcGsFAAAAByRtYXRjaDADCQAAAAAAAAIIBQAAAAFpAAAAD2NhbGxlclB1YmxpY0tleQUAAAACcGsGBQAAAAJwZAMJAAABAAAAAgUAAAAHJG1hdGNoMAIAAAAEVW5pdAMJAAAAAAAAAggFAAAAAWkAAAAGY2FsbGVyBQAAAAR0aGlzBgUAAAACcGQJAAACAAAAAQIAAAALTWF0Y2ggZXJyb3IBAAAAC2NsYWltQ29tbW9uAAAAAgAAAAFpAAAABmFtb3VudAQAAAAIY2ZnQXJyYXkJAQAAAA9yZWFkQ29uZmlnQXJyYXkAAAAABAAAABNjZmdDbGFpbVN0YXJ0SGVpZ2h0CQEAAAANcGFyc2VJbnRWYWx1ZQAAAAEJAAGRAAAAAgUAAAAIY2ZnQXJyYXkFAAAAFUlkeENmZ0NsYWltU3RhcnRCbG9jawQAAAAQY2ZnQ2xhaW1EdXJhdGlvbgkBAAAADXBhcnNlSW50VmFsdWUAAAABCQABkQAAAAIFAAAACGNmZ0FycmF5BQAAABhJZHhDZmdDbGFpbVZlc3RpbmdQZXJpb2QEAAAAC2NmZ0NsYWltRW5kCQAAZAAAAAIFAAAAE2NmZ0NsYWltU3RhcnRIZWlnaHQFAAAAEGNmZ0NsYWltRHVyYXRpb24EAAAAD2NmZ0NsYWltQXNzZXRJZAkAAlkAAAABCQABkQAAAAIFAAAACGNmZ0FycmF5BQAAABJJZHhDZmdDbGFpbUFzc2V0SWQEAAAAEmNmZ0NsYWltQXNzZXRPd25lcgkBAAAAEUBleHRyTmF0aXZlKDEwNjIpAAAAAQkAAZEAAAACBQAAAAhjZmdBcnJheQUAAAAVSWR4Q2ZnQ2xhaW1Bc3NldE93bmVyBAAAABhjZmdDbGFpbUFzc2V0VG90YWxBbW91bnQJAQAAAA1wYXJzZUludFZhbHVlAAAAAQkAAZEAAAACBQAAAAhjZmdBcnJheQUAAAAbSWR4Q2ZnQ2xhaW1Bc3NldFRvdGFsQW1vdW50BAAAAA9vcmlnVG90YWxzQXJyYXkJAQAAAA9yZWFkVG90YWxzQXJyYXkAAAAABAAAABJ0b3RhbENsYWltZWRBbW91bnQJAQAAAA1wYXJzZUludFZhbHVlAAAAAQkAAZEAAAACBQAAAA9vcmlnVG90YWxzQXJyYXkFAAAAG0lkeFRvdGFsc1RvdGFsQ2xhaW1lZEFtb3VudAQAAAAUdG90YWxSZW1haW5pbmdBbW91bnQJAQAAAA1wYXJzZUludFZhbHVlAAAAAQkAAZEAAAACBQAAAA9vcmlnVG90YWxzQXJyYXkFAAAAGElkeFRvdGFsc1JlbWFpbmluZ0Ftb3VudAQAAAARbGFzdENsYWltZWRIZWlnaHQJAQAAAA1wYXJzZUludFZhbHVlAAAAAQkAAZEAAAACBQAAAA9vcmlnVG90YWxzQXJyYXkFAAAAGklkeFRvdGFsc0xhc3RDbGFpbWVkSGVpZ2h0AwkBAAAAAiE9AAAAAggFAAAAAWkAAAAGY2FsbGVyBQAAABJjZmdDbGFpbUFzc2V0T3duZXIJAAACAAAAAQIAAAAScGVybWlzc2lvbnMgZGVuaWVkAwkAAGYAAAACBQAAABNjZmdDbGFpbVN0YXJ0SGVpZ2h0BQAAAAZoZWlnaHQJAAACAAAAAQkAASwAAAACAgAAABhXYWl0IGNsYWltIHN0YXJ0IGJsb2NrOiAJAAGkAAAAAQUAAAATY2ZnQ2xhaW1TdGFydEhlaWdodAQAAAATbGFzdENhbHVsYXRpb25CbG9jawMJAABmAAAAAgUAAAAGaGVpZ2h0BQAAAAtjZmdDbGFpbUVuZAUAAAALY2ZnQ2xhaW1FbmQFAAAABmhlaWdodAQAAAAUZmlyc3RDYWx1bGF0aW9uQmxvY2sDCQAAAAAAAAIFAAAAEWxhc3RDbGFpbWVkSGVpZ2h0AAAAAAAAAAAABQAAABNjZmdDbGFpbVN0YXJ0SGVpZ2h0BQAAABFsYXN0Q2xhaW1lZEhlaWdodAQAAAAOY2xhaW1pbmdCbG9ja3MJAABlAAAAAgUAAAATbGFzdENhbHVsYXRpb25CbG9jawUAAAAUZmlyc3RDYWx1bGF0aW9uQmxvY2sEAAAAD2Ftb3VudEF2YWlsYWJsZQkAAGsAAAADBQAAABhjZmdDbGFpbUFzc2V0VG90YWxBbW91bnQFAAAADmNsYWltaW5nQmxvY2tzBQAAABBjZmdDbGFpbUR1cmF0aW9uBAAAAA9hbW91bnRVbmNsYWltZWQJAQAAAAt2YWx1ZU9yRWxzZQAAAAIJAAQaAAAAAgUAAAAEdGhpcwUAAAASa2V5QW1vdW50VW5jbGFpbWVkAAAAAAAAAAAABAAAABRhbW91bnRBdmFpbGFibGVUb3RhbAkAAGQAAAACBQAAAA9hbW91bnRBdmFpbGFibGUFAAAAD2Ftb3VudFVuY2xhaW1lZAQAAAANYW1vdW50VG9DbGFpbQMDCQAAZwAAAAIAAAAAAAAAAAAFAAAABmFtb3VudAYJAABnAAAAAgUAAAAGYW1vdW50BQAAABRhbW91bnRBdmFpbGFibGVUb3RhbAUAAAAUYW1vdW50QXZhaWxhYmxlVG90YWwFAAAABmFtb3VudAQAAAASYW1vdW50VW5jbGFpbWVkTmV3CQAAZQAAAAIFAAAAFGFtb3VudEF2YWlsYWJsZVRvdGFsBQAAAA1hbW91bnRUb0NsYWltCQAFFAAAAAIJAARMAAAAAgkBAAAADEludGVnZXJFbnRyeQAAAAIFAAAAEmtleUFtb3VudFVuY2xhaW1lZAUAAAASYW1vdW50VW5jbGFpbWVkTmV3CQAETAAAAAIJAQAAAA5TY3JpcHRUcmFuc2ZlcgAAAAMFAAAAEmNmZ0NsYWltQXNzZXRPd25lcgUAAAANYW1vdW50VG9DbGFpbQUAAAAPY2ZnQ2xhaW1Bc3NldElkCQAETAAAAAIJAQAAAAtUb3RhbHNFbnRyeQAAAAQJAQAAAAlrZXlUb3RhbHMAAAAACQEAAAAPcmVhZFRvdGFsc0FycmF5AAAAAAUAAAANYW1vdW50VG9DbGFpbQUAAAATbGFzdENhbHVsYXRpb25CbG9jawkABEwAAAACCQEAAAAaQ2xhaW1PcGVyYXRpb25IaXN0b3J5RW50cnkAAAAGCQAEJQAAAAEFAAAAEmNmZ0NsYWltQXNzZXRPd25lcgUAAAANYW1vdW50VG9DbGFpbQUAAAAOY2xhaW1pbmdCbG9ja3MFAAAAFGZpcnN0Q2FsdWxhdGlvbkJsb2NrBQAAABNsYXN0Q2FsdWxhdGlvbkJsb2NrCAUAAAABaQAAAA10cmFuc2FjdGlvbklkBQAAAANuaWwFAAAADWFtb3VudFRvQ2xhaW0AAAAGAAAAAWkBAAAAC2NvbnN0cnVjdG9yAAAAAwAAAA9jbGFpbVN0YXJ0QmxvY2sAAAATdmVzdGluZ1BlcmlvZEJsb2NrcwAAABJiZW5lZmljaWFyeUFkZHJlc3MEAAAACnZlc3RpbmdFbmQJAABkAAAAAgUAAAAPY2xhaW1TdGFydEJsb2NrBQAAABN2ZXN0aW5nUGVyaW9kQmxvY2tzAwkBAAAACWlzRGVmaW5lZAAAAAEJAAQiAAAAAQkBAAAACWtleUNvbmZpZwAAAAAJAAACAAAAAQIAAAATYWxyZWFkeSBpbml0aWFsaXplZAMJAQAAAAIhPQAAAAIJAAGQAAAAAQgFAAAAAWkAAAAIcGF5bWVudHMAAAAAAAAAAAEJAAACAAAAAQIAAAAiZXhhY3RseSAxIHBheW1lbnQgbXVzdCBiZSBhdHRhY2hlZAMJAQAAAAIhPQAAAAIIBQAAAAFpAAAAD2NhbGxlclB1YmxpY0tleQEAAAAgEdQ5ZIJdvXbTs0YKKfQ9JRQr8vkMxCViWbhknd/V+HoJAAACAAAAAQIAAAAObm90IGF1dGhvcml6ZWQEAAAAGGJlbmVmaWNpYXJ5QWRkcmVzc1BhcnNlZAkBAAAAE3ZhbHVlT3JFcnJvck1lc3NhZ2UAAAACCQAEJgAAAAEFAAAAEmJlbmVmaWNpYXJ5QWRkcmVzcwIAAAAgSW52YWxpZCBiZW5lZmljaWFyQWRkcmVzcyBwYXNzZWQEAAAAA3BtdAkBAAAABXZhbHVlAAAAAQkAAZEAAAACCAUAAAABaQAAAAhwYXltZW50cwAAAAAAAAAAAAQAAAAMY2xhaW1Bc3NldElkCQEAAAAFdmFsdWUAAAABCAUAAAADcG10AAAAB2Fzc2V0SWQEAAAADmNsYWltQXNzZXRJbmZvCQEAAAATdmFsdWVPckVycm9yTWVzc2FnZQAAAAIJAAPsAAAAAQUAAAAMY2xhaW1Bc3NldElkAgAAABtmYWlsIHRvIGxvYWQgaWRvIGFzc2V0IGluZm8EAAAADmNsYWltQXNzZXRJZDU4CQACWAAAAAEFAAAADGNsYWltQXNzZXRJZAQAAAAOY2xhaW1Bc3NldE11bHQJAABsAAAABgAAAAAAAAAACgAAAAAAAAAAAAgFAAAADmNsYWltQXNzZXRJbmZvAAAACGRlY2ltYWxzAAAAAAAAAAAAAAAAAAAAAAAABQAAAARET1dOBAAAABBjbGFpbUFzc2V0QW1vdW50CAUAAAADcG10AAAABmFtb3VudAkABEwAAAACCQEAAAALU3RyaW5nRW50cnkAAAACCQEAAAAJa2V5Q29uZmlnAAAAAAkBAAAADGZvcm1hdENvbmZpZwAAAAYFAAAAD2NsYWltU3RhcnRCbG9jawUAAAATdmVzdGluZ1BlcmlvZEJsb2NrcwUAAAAOY2xhaW1Bc3NldElkNTgFAAAADmNsYWltQXNzZXRNdWx0CQAEJQAAAAEFAAAAGGJlbmVmaWNpYXJ5QWRkcmVzc1BhcnNlZAUAAAAQY2xhaW1Bc3NldEFtb3VudAkABEwAAAACCQEAAAALU3RyaW5nRW50cnkAAAACCQEAAAAJa2V5VG90YWxzAAAAAAkBAAAAEmZvcm1hdFRvdGFsc1N0cmluZwAAAAMCAAAAATAJAAGkAAAAAQUAAAAQY2xhaW1Bc3NldEFtb3VudAIAAAABMAUAAAADbmlsAAAAAWkBAAAAC2NsYWltQW1vdW50AAAAAQAAAAZhbW91bnQJAQAAAAtjbGFpbUNvbW1vbgAAAAIFAAAAAWkFAAAABmFtb3VudAAAAAFpAQAAAAVjbGFpbQAAAAAJAQAAAAtjbGFpbUNvbW1vbgAAAAIFAAAAAWkA//////////8AAAABaQEAAAAWd2l0aGRyYXdSZWZlcnJhbFJld2FyZAAAAAEAAAAId3hBbW91bnQEAAAAF3JlZmVycmFsQ29udHJhY3RBZGRyZXNzCQEAAAAFdmFsdWUAAAABCQAEIgAAAAEFAAAAC2tleVJlZmVycmFsBAAAAAxtdXN0UmVmZXJyYWwDCQAAAAAAAAIJAAQlAAAAAQgFAAAAAWkAAAAGY2FsbGVyBQAAABdyZWZlcnJhbENvbnRyYWN0QWRkcmVzcwYJAQAAAAh0aHJvd0VycgAAAAECAAAAEXBlcm1pc3Npb24gZGVuaWVkAwkAAAAAAAACBQAAAAxtdXN0UmVmZXJyYWwFAAAADG11c3RSZWZlcnJhbAQAAAAJd3hBc3NldElkCQACWQAAAAEJAQAAAAV2YWx1ZQAAAAEJAAQiAAAAAQUAAAAMa2V5V3hBc3NldElkCQAFFAAAAAIJAARMAAAAAgkBAAAADlNjcmlwdFRyYW5zZmVyAAAAAwgFAAAAAWkAAAAGY2FsbGVyBQAAAAh3eEFtb3VudAUAAAAJd3hBc3NldElkCQAETAAAAAIJAQAAABpDbGFpbU9wZXJhdGlvbkhpc3RvcnlFbnRyeQAAAAYFAAAAF3JlZmVycmFsQ29udHJhY3RBZGRyZXNzBQAAAAh3eEFtb3VudAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgFAAAAAWkAAAANdHJhbnNhY3Rpb25JZAUAAAADbmlsBQAAAAR1bml0CQAAAgAAAAECAAAAJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgAAAAFpAQAAAApzZXRNYW5hZ2VyAAAAAQAAABdwZW5kaW5nTWFuYWdlclB1YmxpY0tleQQAAAALY2hlY2tDYWxsZXIJAQAAAAttdXN0TWFuYWdlcgAAAAEFAAAAAWkDCQAAAAAAAAIFAAAAC2NoZWNrQ2FsbGVyBQAAAAtjaGVja0NhbGxlcgQAAAAVY2hlY2tNYW5hZ2VyUHVibGljS2V5CQACWQAAAAEFAAAAF3BlbmRpbmdNYW5hZ2VyUHVibGljS2V5AwkAAAAAAAACBQAAABVjaGVja01hbmFnZXJQdWJsaWNLZXkFAAAAFWNoZWNrTWFuYWdlclB1YmxpY0tleQkABEwAAAACCQEAAAALU3RyaW5nRW50cnkAAAACCQEAAAAaa2V5UGVuZGluZ01hbmFnZXJQdWJsaWNLZXkAAAAABQAAABdwZW5kaW5nTWFuYWdlclB1YmxpY0tleQUAAAADbmlsCQAAAgAAAAECAAAAJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgkAAAIAAAABAgAAACRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4AAAABaQEAAAAOY29uZmlybU1hbmFnZXIAAAAABAAAAAJwbQkBAAAAHXBlbmRpbmdNYW5hZ2VyUHVibGljS2V5T3JVbml0AAAAAAQAAAAFaGFzUE0DCQEAAAAJaXNEZWZpbmVkAAAAAQUAAAACcG0GCQEAAAAIdGhyb3dFcnIAAAABAgAAABJubyBwZW5kaW5nIG1hbmFnZXIDCQAAAAAAAAIFAAAABWhhc1BNBQAAAAVoYXNQTQQAAAAHY2hlY2tQTQMJAAAAAAAAAggFAAAAAWkAAAAPY2FsbGVyUHVibGljS2V5CQEAAAAFdmFsdWUAAAABBQAAAAJwbQYJAQAAAAh0aHJvd0VycgAAAAECAAAAG3lvdSBhcmUgbm90IHBlbmRpbmcgbWFuYWdlcgMJAAAAAAAAAgUAAAAHY2hlY2tQTQUAAAAHY2hlY2tQTQkABEwAAAACCQEAAAALU3RyaW5nRW50cnkAAAACCQEAAAATa2V5TWFuYWdlclB1YmxpY0tleQAAAAAJAAJYAAAAAQkBAAAABXZhbHVlAAAAAQUAAAACcG0JAARMAAAAAgkBAAAAC0RlbGV0ZUVudHJ5AAAAAQkBAAAAGmtleVBlbmRpbmdNYW5hZ2VyUHVibGljS2V5AAAAAAUAAAADbmlsCQAAAgAAAAECAAAAJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgkAAAIAAAABAgAAACRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4AAAABAAAAAnR4AQAAAAZ2ZXJpZnkAAAAABAAAAA90YXJnZXRQdWJsaWNLZXkEAAAAByRtYXRjaDAJAQAAABZtYW5hZ2VyUHVibGljS2V5T3JVbml0AAAAAAMJAAABAAAAAgUAAAAHJG1hdGNoMAIAAAAKQnl0ZVZlY3RvcgQAAAACcGsFAAAAByRtYXRjaDAFAAAAAnBrAwkAAAEAAAACBQAAAAckbWF0Y2gwAgAAAARVbml0CAUAAAACdHgAAAAPc2VuZGVyUHVibGljS2V5CQAAAgAAAAECAAAAC01hdGNoIGVycm9yCQAB9AAAAAMIBQAAAAJ0eAAAAAlib2R5Qnl0ZXMJAAGRAAAAAggFAAAAAnR4AAAABnByb29mcwAAAAAAAAAAAAUAAAAPdGFyZ2V0UHVibGljS2V5l5Hrzw==", "height": 2489822, "applicationStatus": "succeeded", "spentComplexity": 0 } View: original | compacted Prev: none Next: Am3oFVqduApGqbqFD69xUD6qaeU5Zs5kNTZGWaAM971Y Full:
OldNewDifferences
1-# no script
1+{-# STDLIB_VERSION 5 #-}
2+{-# SCRIPT_TYPE ACCOUNT #-}
3+{-# CONTENT_TYPE DAPP #-}
4+let SEP = "__"
5+
6+let keyReferral = makeString(["%s", "referral"], SEP)
7+
8+let keyWxAssetId = makeString(["%s", "wxAssetId"], SEP)
9+
10+func keyManagerPublicKey () = "%s__managerPublicKey"
11+
12+
13+func keyPendingManagerPublicKey () = "%s__pendingManagerPublicKey"
14+
15+
16+let IdxCfgClaimStartBlock = 1
17+
18+let IdxCfgClaimVestingPeriod = 2
19+
20+let IdxCfgClaimAssetId = 3
21+
22+let IdxCfgClaimAssetMult = 4
23+
24+let IdxCfgClaimAssetOwner = 5
25+
26+let IdxCfgClaimAssetTotalAmount = 6
27+
28+let IdxTotalsTotalClaimedAmount = 1
29+
30+let IdxTotalsRemainingAmount = 2
31+
32+let IdxTotalsLastClaimedHeight = 3
33+
34+func throwErr (msg) = throw(makeString(["marketing.ride:", msg], " "))
35+
36+
37+func getStringOrFail (key) = valueOrErrorMessage(getString(key), (("mandatory this." + key) + " is not defined"))
38+
39+
40+func formatConfigString (claimStartBlock,vestingPeriod,assetIdBase58,assetMult,assetOwner,assetTotalAmt) = makeString(["%d%d%s%d%s%d%", claimStartBlock, vestingPeriod, assetIdBase58, assetMult, assetOwner, assetTotalAmt], SEP)
41+
42+
43+func formatConfig (claimStartBlock,vestingPeriod,assetIdBase58,assetMult,claimAssetOwner,claimAssetTotalAmount) = formatConfigString(toString(claimStartBlock), toString(vestingPeriod), assetIdBase58, toString(assetMult), claimAssetOwner, toString(claimAssetTotalAmount))
44+
45+
46+func formatTotalsString (totalClaimedAmount,remainingAmountForClaim,lastClaimedHeight) = makeString(["%d%d%d", totalClaimedAmount, remainingAmountForClaim, lastClaimedHeight], SEP)
47+
48+
49+func formatHistoryRecord (claimedAssetAmount,claimingBlocks,firstCalulationBlock,lastCalulationBlock) = makeString(["%d%d%d%d%d%d", toString(height), toString(lastBlock.timestamp), toString(claimedAssetAmount), toString(claimingBlocks), toString(firstCalulationBlock), toString(lastCalulationBlock)], SEP)
50+
51+
52+func keyConfig () = "%s__config"
53+
54+
55+func keyTotals () = "%s__totals"
56+
57+
58+let keyAmountUnclaimed = makeString(["%s", "amountUnclaimed"], SEP)
59+
60+func keyOperationHistoryRecord (type,userAddress,txId58) = makeString(["%s%s%s%s__history", type, userAddress, txId58], SEP)
61+
62+
63+func readConfigArray () = split(getStringOrFail(keyConfig()), SEP)
64+
65+
66+func readTotalsArray () = split(getStringOrFail(keyTotals()), SEP)
67+
68+
69+func TotalsEntry (key,origArray,claimedAmt,newLastClaimedHeight) = {
70+ let totalClaimedAmount = parseIntValue(origArray[IdxTotalsTotalClaimedAmount])
71+ let remainingAmount = parseIntValue(origArray[IdxTotalsRemainingAmount])
72+ let lastClaimedHeight = parseIntValue(origArray[IdxTotalsLastClaimedHeight])
73+ let newTotalClaimedAmount = (totalClaimedAmount + claimedAmt)
74+ let newRemainingAmount = (remainingAmount - claimedAmt)
75+ if ((0 > newRemainingAmount))
76+ then throw("invalid math")
77+ else StringEntry(key, formatTotalsString(toString(newTotalClaimedAmount), toString(newRemainingAmount), toString(newLastClaimedHeight)))
78+ }
79+
80+
81+func ClaimOperationHistoryEntry (userAddress,claimedAssetAmount,claimingBlocks,firstCalculationBlock,lastCalculationBlock,txId) = StringEntry(keyOperationHistoryRecord("claim", userAddress, toBase58String(txId)), formatHistoryRecord(claimedAssetAmount, claimingBlocks, firstCalculationBlock, lastCalculationBlock))
82+
83+
84+func managerPublicKeyOrUnit () = match getString(keyManagerPublicKey()) {
85+ case s: String =>
86+ fromBase58String(s)
87+ case _: Unit =>
88+ unit
89+ case _ =>
90+ throw("Match error")
91+}
92+
93+
94+func pendingManagerPublicKeyOrUnit () = match getString(keyPendingManagerPublicKey()) {
95+ case s: String =>
96+ fromBase58String(s)
97+ case _: Unit =>
98+ unit
99+ case _ =>
100+ throw("Match error")
101+}
102+
103+
104+func mustManager (i) = {
105+ let pd = throwErr("permission denied")
106+ match managerPublicKeyOrUnit() {
107+ case pk: ByteVector =>
108+ if ((i.callerPublicKey == pk))
109+ then true
110+ else pd
111+ case _: Unit =>
112+ if ((i.caller == this))
113+ then true
114+ else pd
115+ case _ =>
116+ throw("Match error")
117+ }
118+ }
119+
120+
121+func claimCommon (i,amount) = {
122+ let cfgArray = readConfigArray()
123+ let cfgClaimStartHeight = parseIntValue(cfgArray[IdxCfgClaimStartBlock])
124+ let cfgClaimDuration = parseIntValue(cfgArray[IdxCfgClaimVestingPeriod])
125+ let cfgClaimEnd = (cfgClaimStartHeight + cfgClaimDuration)
126+ let cfgClaimAssetId = fromBase58String(cfgArray[IdxCfgClaimAssetId])
127+ let cfgClaimAssetOwner = addressFromStringValue(cfgArray[IdxCfgClaimAssetOwner])
128+ let cfgClaimAssetTotalAmount = parseIntValue(cfgArray[IdxCfgClaimAssetTotalAmount])
129+ let origTotalsArray = readTotalsArray()
130+ let totalClaimedAmount = parseIntValue(origTotalsArray[IdxTotalsTotalClaimedAmount])
131+ let totalRemainingAmount = parseIntValue(origTotalsArray[IdxTotalsRemainingAmount])
132+ let lastClaimedHeight = parseIntValue(origTotalsArray[IdxTotalsLastClaimedHeight])
133+ if ((i.caller != cfgClaimAssetOwner))
134+ then throw("permissions denied")
135+ else if ((cfgClaimStartHeight > height))
136+ then throw(("Wait claim start block: " + toString(cfgClaimStartHeight)))
137+ else {
138+ let lastCalulationBlock = if ((height > cfgClaimEnd))
139+ then cfgClaimEnd
140+ else height
141+ let firstCalulationBlock = if ((lastClaimedHeight == 0))
142+ then cfgClaimStartHeight
143+ else lastClaimedHeight
144+ let claimingBlocks = (lastCalulationBlock - firstCalulationBlock)
145+ let amountAvailable = fraction(cfgClaimAssetTotalAmount, claimingBlocks, cfgClaimDuration)
146+ let amountUnclaimed = valueOrElse(getInteger(this, keyAmountUnclaimed), 0)
147+ let amountAvailableTotal = (amountAvailable + amountUnclaimed)
148+ let amountToClaim = if (if ((0 >= amount))
149+ then true
150+ else (amount >= amountAvailableTotal))
151+ then amountAvailableTotal
152+ else amount
153+ let amountUnclaimedNew = (amountAvailableTotal - amountToClaim)
154+ $Tuple2([IntegerEntry(keyAmountUnclaimed, amountUnclaimedNew), ScriptTransfer(cfgClaimAssetOwner, amountToClaim, cfgClaimAssetId), TotalsEntry(keyTotals(), readTotalsArray(), amountToClaim, lastCalulationBlock), ClaimOperationHistoryEntry(toString(cfgClaimAssetOwner), amountToClaim, claimingBlocks, firstCalulationBlock, lastCalulationBlock, i.transactionId)], amountToClaim)
155+ }
156+ }
157+
158+
159+@Callable(i)
160+func constructor (claimStartBlock,vestingPeriodBlocks,beneficiaryAddress) = {
161+ let vestingEnd = (claimStartBlock + vestingPeriodBlocks)
162+ if (isDefined(getString(keyConfig())))
163+ then throw("already initialized")
164+ else if ((size(i.payments) != 1))
165+ then throw("exactly 1 payment must be attached")
166+ else if ((i.callerPublicKey != base58'2Cbd8ozG7A1RyRNC3nNnZgHu7Ru4K3JCfpyPkhqr9zxq'))
167+ then throw("not authorized")
168+ else {
169+ let beneficiaryAddressParsed = valueOrErrorMessage(addressFromString(beneficiaryAddress), "Invalid beneficiarAddress passed")
170+ let pmt = value(i.payments[0])
171+ let claimAssetId = value(pmt.assetId)
172+ let claimAssetInfo = valueOrErrorMessage(assetInfo(claimAssetId), "fail to load ido asset info")
173+ let claimAssetId58 = toBase58String(claimAssetId)
174+ let claimAssetMult = pow(10, 0, claimAssetInfo.decimals, 0, 0, DOWN)
175+ let claimAssetAmount = pmt.amount
176+[StringEntry(keyConfig(), formatConfig(claimStartBlock, vestingPeriodBlocks, claimAssetId58, claimAssetMult, toString(beneficiaryAddressParsed), claimAssetAmount)), StringEntry(keyTotals(), formatTotalsString("0", toString(claimAssetAmount), "0"))]
177+ }
178+ }
179+
180+
181+
182+@Callable(i)
183+func claimAmount (amount) = claimCommon(i, amount)
184+
185+
186+
187+@Callable(i)
188+func claim () = claimCommon(i, -1)
189+
190+
191+
192+@Callable(i)
193+func withdrawReferralReward (wxAmount) = {
194+ let referralContractAddress = value(getString(keyReferral))
195+ let mustReferral = if ((toString(i.caller) == referralContractAddress))
196+ then true
197+ else throwErr("permission denied")
198+ if ((mustReferral == mustReferral))
199+ then {
200+ let wxAssetId = fromBase58String(value(getString(keyWxAssetId)))
201+ $Tuple2([ScriptTransfer(i.caller, wxAmount, wxAssetId), ClaimOperationHistoryEntry(referralContractAddress, wxAmount, 0, 0, 0, i.transactionId)], unit)
202+ }
203+ else throw("Strict value is not equal to itself.")
204+ }
205+
206+
207+
208+@Callable(i)
209+func setManager (pendingManagerPublicKey) = {
210+ let checkCaller = mustManager(i)
211+ if ((checkCaller == checkCaller))
212+ then {
213+ let checkManagerPublicKey = fromBase58String(pendingManagerPublicKey)
214+ if ((checkManagerPublicKey == checkManagerPublicKey))
215+ then [StringEntry(keyPendingManagerPublicKey(), pendingManagerPublicKey)]
216+ else throw("Strict value is not equal to itself.")
217+ }
218+ else throw("Strict value is not equal to itself.")
219+ }
220+
221+
222+
223+@Callable(i)
224+func confirmManager () = {
225+ let pm = pendingManagerPublicKeyOrUnit()
226+ let hasPM = if (isDefined(pm))
227+ then true
228+ else throwErr("no pending manager")
229+ if ((hasPM == hasPM))
230+ then {
231+ let checkPM = if ((i.callerPublicKey == value(pm)))
232+ then true
233+ else throwErr("you are not pending manager")
234+ if ((checkPM == checkPM))
235+ then [StringEntry(keyManagerPublicKey(), toBase58String(value(pm))), DeleteEntry(keyPendingManagerPublicKey())]
236+ else throw("Strict value is not equal to itself.")
237+ }
238+ else throw("Strict value is not equal to itself.")
239+ }
240+
241+
242+@Verifier(tx)
243+func verify () = {
244+ let targetPublicKey = match managerPublicKeyOrUnit() {
245+ case pk: ByteVector =>
246+ pk
247+ case _: Unit =>
248+ tx.senderPublicKey
249+ case _ =>
250+ throw("Match error")
251+ }
252+ sigVerify(tx.bodyBytes, tx.proofs[0], targetPublicKey)
253+ }
254+

github/deemru/w8io/873ac7e 
26.29 ms