tx · 6oV1s1suMBzpPtEZwmBoZkR7Ncggo2A58KjQUUsJbn7y

3PHpaXvHpdthSBwXzjJiNnAes6dqzgr9BcU:  -0.01500000 Waves

2022.08.11 17:46 [3245441] smart account 3PHpaXvHpdthSBwXzjJiNnAes6dqzgr9BcU > SELF 0.00000000 Waves

{ "type": 13, "id": "6oV1s1suMBzpPtEZwmBoZkR7Ncggo2A58KjQUUsJbn7y", "fee": 1500000, "feeAssetId": null, "timestamp": 1660228381806, "version": 1, "sender": "3PHpaXvHpdthSBwXzjJiNnAes6dqzgr9BcU", "senderPublicKey": "rtorwpe32pLWq5ZZJobchM1AJJcZ31hipQ5SW7i6xff", "proofs": [ "3wcgZcS3UkEU48KNxqSLR1sdZByC4aEmrSxxpXWPwosiwB33SX6T4gZDpEUcEFg5GvJmWLnECQWRMrXgKXsg2tVn" ], "script": "base64:AAIFAAAAAAAAABwIAhIFCgMBAQgSAwoBARIAEgMKAQESAwoBCBIAAAAAIAAAAAADU0VQAgAAAAJfXwAAAAALa2V5UmVmZXJyYWwJAAS5AAAAAgkABEwAAAACAgAAAAIlcwkABEwAAAACAgAAAAhyZWZlcnJhbAUAAAADbmlsBQAAAANTRVAAAAAADGtleVd4QXNzZXRJZAkABLkAAAACCQAETAAAAAICAAAAAiVzCQAETAAAAAICAAAACXd4QXNzZXRJZAUAAAADbmlsBQAAAANTRVABAAAAE2tleU1hbmFnZXJQdWJsaWNLZXkAAAAAAgAAABQlc19fbWFuYWdlclB1YmxpY0tleQEAAAAaa2V5UGVuZGluZ01hbmFnZXJQdWJsaWNLZXkAAAAAAgAAABslc19fcGVuZGluZ01hbmFnZXJQdWJsaWNLZXkAAAAAFUlkeENmZ0NsYWltU3RhcnRCbG9jawAAAAAAAAAAAQAAAAAYSWR4Q2ZnQ2xhaW1WZXN0aW5nUGVyaW9kAAAAAAAAAAACAAAAABJJZHhDZmdDbGFpbUFzc2V0SWQAAAAAAAAAAAMAAAAAFElkeENmZ0NsYWltQXNzZXRNdWx0AAAAAAAAAAAEAAAAABVJZHhDZmdDbGFpbUFzc2V0T3duZXIAAAAAAAAAAAUAAAAAG0lkeENmZ0NsYWltQXNzZXRUb3RhbEFtb3VudAAAAAAAAAAABgAAAAAbSWR4VG90YWxzVG90YWxDbGFpbWVkQW1vdW50AAAAAAAAAAABAAAAABhJZHhUb3RhbHNSZW1haW5pbmdBbW91bnQAAAAAAAAAAAIAAAAAGklkeFRvdGFsc0xhc3RDbGFpbWVkSGVpZ2h0AAAAAAAAAAADAQAAAAh0aHJvd0VycgAAAAEAAAADbXNnCQAAAgAAAAEJAAS5AAAAAgkABEwAAAACAgAAAA9tYXJrZXRpbmcucmlkZToJAARMAAAAAgUAAAADbXNnBQAAAANuaWwCAAAAASABAAAAD2dldFN0cmluZ09yRmFpbAAAAAEAAAADa2V5CQEAAAATdmFsdWVPckVycm9yTWVzc2FnZQAAAAIJAAQiAAAAAQUAAAADa2V5CQABLAAAAAIJAAEsAAAAAgIAAAAPbWFuZGF0b3J5IHRoaXMuBQAAAANrZXkCAAAADyBpcyBub3QgZGVmaW5lZAEAAAASZm9ybWF0Q29uZmlnU3RyaW5nAAAABgAAAA9jbGFpbVN0YXJ0QmxvY2sAAAANdmVzdGluZ1BlcmlvZAAAAA1hc3NldElkQmFzZTU4AAAACWFzc2V0TXVsdAAAAAphc3NldE93bmVyAAAADWFzc2V0VG90YWxBbXQJAAS5AAAAAgkABEwAAAACAgAAAA0lZCVkJXMlZCVzJWQlCQAETAAAAAIFAAAAD2NsYWltU3RhcnRCbG9jawkABEwAAAACBQAAAA12ZXN0aW5nUGVyaW9kCQAETAAAAAIFAAAADWFzc2V0SWRCYXNlNTgJAARMAAAAAgUAAAAJYXNzZXRNdWx0CQAETAAAAAIFAAAACmFzc2V0T3duZXIJAARMAAAAAgUAAAANYXNzZXRUb3RhbEFtdAUAAAADbmlsBQAAAANTRVABAAAADGZvcm1hdENvbmZpZwAAAAYAAAAPY2xhaW1TdGFydEJsb2NrAAAADXZlc3RpbmdQZXJpb2QAAAANYXNzZXRJZEJhc2U1OAAAAAlhc3NldE11bHQAAAAPY2xhaW1Bc3NldE93bmVyAAAAFWNsYWltQXNzZXRUb3RhbEFtb3VudAkBAAAAEmZvcm1hdENvbmZpZ1N0cmluZwAAAAYJAAGkAAAAAQUAAAAPY2xhaW1TdGFydEJsb2NrCQABpAAAAAEFAAAADXZlc3RpbmdQZXJpb2QFAAAADWFzc2V0SWRCYXNlNTgJAAGkAAAAAQUAAAAJYXNzZXRNdWx0BQAAAA9jbGFpbUFzc2V0T3duZXIJAAGkAAAAAQUAAAAVY2xhaW1Bc3NldFRvdGFsQW1vdW50AQAAABJmb3JtYXRUb3RhbHNTdHJpbmcAAAADAAAAEnRvdGFsQ2xhaW1lZEFtb3VudAAAABdyZW1haW5pbmdBbW91bnRGb3JDbGFpbQAAABFsYXN0Q2xhaW1lZEhlaWdodAkABLkAAAACCQAETAAAAAICAAAABiVkJWQlZAkABEwAAAACBQAAABJ0b3RhbENsYWltZWRBbW91bnQJAARMAAAAAgUAAAAXcmVtYWluaW5nQW1vdW50Rm9yQ2xhaW0JAARMAAAAAgUAAAARbGFzdENsYWltZWRIZWlnaHQFAAAAA25pbAUAAAADU0VQAQAAABNmb3JtYXRIaXN0b3J5UmVjb3JkAAAABAAAABJjbGFpbWVkQXNzZXRBbW91bnQAAAAOY2xhaW1pbmdCbG9ja3MAAAAUZmlyc3RDYWx1bGF0aW9uQmxvY2sAAAATbGFzdENhbHVsYXRpb25CbG9jawkABLkAAAACCQAETAAAAAICAAAADCVkJWQlZCVkJWQlZAkABEwAAAACCQABpAAAAAEFAAAABmhlaWdodAkABEwAAAACCQABpAAAAAEIBQAAAAlsYXN0QmxvY2sAAAAJdGltZXN0YW1wCQAETAAAAAIJAAGkAAAAAQUAAAASY2xhaW1lZEFzc2V0QW1vdW50CQAETAAAAAIJAAGkAAAAAQUAAAAOY2xhaW1pbmdCbG9ja3MJAARMAAAAAgkAAaQAAAABBQAAABRmaXJzdENhbHVsYXRpb25CbG9jawkABEwAAAACCQABpAAAAAEFAAAAE2xhc3RDYWx1bGF0aW9uQmxvY2sFAAAAA25pbAUAAAADU0VQAQAAAAlrZXlDb25maWcAAAAAAgAAAAolc19fY29uZmlnAQAAAAlrZXlUb3RhbHMAAAAAAgAAAAolc19fdG90YWxzAAAAABJrZXlBbW91bnRVbmNsYWltZWQJAAS5AAAAAgkABEwAAAACAgAAAAIlcwkABEwAAAACAgAAAA9hbW91bnRVbmNsYWltZWQFAAAAA25pbAUAAAADU0VQAQAAABlrZXlPcGVyYXRpb25IaXN0b3J5UmVjb3JkAAAAAwAAAAR0eXBlAAAAC3VzZXJBZGRyZXNzAAAABnR4SWQ1OAkABLkAAAACCQAETAAAAAICAAAAESVzJXMlcyVzX19oaXN0b3J5CQAETAAAAAIFAAAABHR5cGUJAARMAAAAAgUAAAALdXNlckFkZHJlc3MJAARMAAAAAgUAAAAGdHhJZDU4BQAAAANuaWwFAAAAA1NFUAEAAAAPcmVhZENvbmZpZ0FycmF5AAAAAAkABLUAAAACCQEAAAAPZ2V0U3RyaW5nT3JGYWlsAAAAAQkBAAAACWtleUNvbmZpZwAAAAAFAAAAA1NFUAEAAAAPcmVhZFRvdGFsc0FycmF5AAAAAAkABLUAAAACCQEAAAAPZ2V0U3RyaW5nT3JGYWlsAAAAAQkBAAAACWtleVRvdGFscwAAAAAFAAAAA1NFUAEAAAALVG90YWxzRW50cnkAAAAEAAAAA2tleQAAAAlvcmlnQXJyYXkAAAAKY2xhaW1lZEFtdAAAABRuZXdMYXN0Q2xhaW1lZEhlaWdodAQAAAASdG90YWxDbGFpbWVkQW1vdW50CQEAAAANcGFyc2VJbnRWYWx1ZQAAAAEJAAGRAAAAAgUAAAAJb3JpZ0FycmF5BQAAABtJZHhUb3RhbHNUb3RhbENsYWltZWRBbW91bnQEAAAAD3JlbWFpbmluZ0Ftb3VudAkBAAAADXBhcnNlSW50VmFsdWUAAAABCQABkQAAAAIFAAAACW9yaWdBcnJheQUAAAAYSWR4VG90YWxzUmVtYWluaW5nQW1vdW50BAAAABFsYXN0Q2xhaW1lZEhlaWdodAkBAAAADXBhcnNlSW50VmFsdWUAAAABCQABkQAAAAIFAAAACW9yaWdBcnJheQUAAAAaSWR4VG90YWxzTGFzdENsYWltZWRIZWlnaHQEAAAAFW5ld1RvdGFsQ2xhaW1lZEFtb3VudAkAAGQAAAACBQAAABJ0b3RhbENsYWltZWRBbW91bnQFAAAACmNsYWltZWRBbXQEAAAAEm5ld1JlbWFpbmluZ0Ftb3VudAkAAGUAAAACBQAAAA9yZW1haW5pbmdBbW91bnQFAAAACmNsYWltZWRBbXQDCQAAZgAAAAIAAAAAAAAAAAAFAAAAEm5ld1JlbWFpbmluZ0Ftb3VudAkAAAIAAAABAgAAAAxpbnZhbGlkIG1hdGgJAQAAAAtTdHJpbmdFbnRyeQAAAAIFAAAAA2tleQkBAAAAEmZvcm1hdFRvdGFsc1N0cmluZwAAAAMJAAGkAAAAAQUAAAAVbmV3VG90YWxDbGFpbWVkQW1vdW50CQABpAAAAAEFAAAAEm5ld1JlbWFpbmluZ0Ftb3VudAkAAaQAAAABBQAAABRuZXdMYXN0Q2xhaW1lZEhlaWdodAEAAAAaQ2xhaW1PcGVyYXRpb25IaXN0b3J5RW50cnkAAAAGAAAAC3VzZXJBZGRyZXNzAAAAEmNsYWltZWRBc3NldEFtb3VudAAAAA5jbGFpbWluZ0Jsb2NrcwAAABVmaXJzdENhbGN1bGF0aW9uQmxvY2sAAAAUbGFzdENhbGN1bGF0aW9uQmxvY2sAAAAEdHhJZAkBAAAAC1N0cmluZ0VudHJ5AAAAAgkBAAAAGWtleU9wZXJhdGlvbkhpc3RvcnlSZWNvcmQAAAADAgAAAAVjbGFpbQUAAAALdXNlckFkZHJlc3MJAAJYAAAAAQUAAAAEdHhJZAkBAAAAE2Zvcm1hdEhpc3RvcnlSZWNvcmQAAAAEBQAAABJjbGFpbWVkQXNzZXRBbW91bnQFAAAADmNsYWltaW5nQmxvY2tzBQAAABVmaXJzdENhbGN1bGF0aW9uQmxvY2sFAAAAFGxhc3RDYWxjdWxhdGlvbkJsb2NrAQAAABZtYW5hZ2VyUHVibGljS2V5T3JVbml0AAAAAAQAAAAHJG1hdGNoMAkABCIAAAABCQEAAAATa2V5TWFuYWdlclB1YmxpY0tleQAAAAADCQAAAQAAAAIFAAAAByRtYXRjaDACAAAABlN0cmluZwQAAAABcwUAAAAHJG1hdGNoMAkAAlkAAAABBQAAAAFzAwkAAAEAAAACBQAAAAckbWF0Y2gwAgAAAARVbml0BQAAAAR1bml0CQAAAgAAAAECAAAAC01hdGNoIGVycm9yAQAAAB1wZW5kaW5nTWFuYWdlclB1YmxpY0tleU9yVW5pdAAAAAAEAAAAByRtYXRjaDAJAAQiAAAAAQkBAAAAGmtleVBlbmRpbmdNYW5hZ2VyUHVibGljS2V5AAAAAAMJAAABAAAAAgUAAAAHJG1hdGNoMAIAAAAGU3RyaW5nBAAAAAFzBQAAAAckbWF0Y2gwCQACWQAAAAEFAAAAAXMDCQAAAQAAAAIFAAAAByRtYXRjaDACAAAABFVuaXQFAAAABHVuaXQJAAACAAAAAQIAAAALTWF0Y2ggZXJyb3IBAAAAC211c3RNYW5hZ2VyAAAAAQAAAAFpBAAAAAJwZAkBAAAACHRocm93RXJyAAAAAQIAAAARcGVybWlzc2lvbiBkZW5pZWQEAAAAByRtYXRjaDAJAQAAABZtYW5hZ2VyUHVibGljS2V5T3JVbml0AAAAAAMJAAABAAAAAgUAAAAHJG1hdGNoMAIAAAAKQnl0ZVZlY3RvcgQAAAACcGsFAAAAByRtYXRjaDADCQAAAAAAAAIIBQAAAAFpAAAAD2NhbGxlclB1YmxpY0tleQUAAAACcGsGBQAAAAJwZAMJAAABAAAAAgUAAAAHJG1hdGNoMAIAAAAEVW5pdAMJAAAAAAAAAggFAAAAAWkAAAAGY2FsbGVyBQAAAAR0aGlzBgUAAAACcGQJAAACAAAAAQIAAAALTWF0Y2ggZXJyb3IBAAAAC2NsYWltQ29tbW9uAAAAAgAAAAFpAAAABmFtb3VudAQAAAAIY2ZnQXJyYXkJAQAAAA9yZWFkQ29uZmlnQXJyYXkAAAAABAAAABNjZmdDbGFpbVN0YXJ0SGVpZ2h0CQEAAAANcGFyc2VJbnRWYWx1ZQAAAAEJAAGRAAAAAgUAAAAIY2ZnQXJyYXkFAAAAFUlkeENmZ0NsYWltU3RhcnRCbG9jawQAAAAQY2ZnQ2xhaW1EdXJhdGlvbgkBAAAADXBhcnNlSW50VmFsdWUAAAABCQABkQAAAAIFAAAACGNmZ0FycmF5BQAAABhJZHhDZmdDbGFpbVZlc3RpbmdQZXJpb2QEAAAAC2NmZ0NsYWltRW5kCQAAZAAAAAIFAAAAE2NmZ0NsYWltU3RhcnRIZWlnaHQFAAAAEGNmZ0NsYWltRHVyYXRpb24EAAAAD2NmZ0NsYWltQXNzZXRJZAkAAlkAAAABCQABkQAAAAIFAAAACGNmZ0FycmF5BQAAABJJZHhDZmdDbGFpbUFzc2V0SWQEAAAAEmNmZ0NsYWltQXNzZXRPd25lcgkBAAAAEUBleHRyTmF0aXZlKDEwNjIpAAAAAQkAAZEAAAACBQAAAAhjZmdBcnJheQUAAAAVSWR4Q2ZnQ2xhaW1Bc3NldE93bmVyBAAAABhjZmdDbGFpbUFzc2V0VG90YWxBbW91bnQJAQAAAA1wYXJzZUludFZhbHVlAAAAAQkAAZEAAAACBQAAAAhjZmdBcnJheQUAAAAbSWR4Q2ZnQ2xhaW1Bc3NldFRvdGFsQW1vdW50BAAAAA9vcmlnVG90YWxzQXJyYXkJAQAAAA9yZWFkVG90YWxzQXJyYXkAAAAABAAAABJ0b3RhbENsYWltZWRBbW91bnQJAQAAAA1wYXJzZUludFZhbHVlAAAAAQkAAZEAAAACBQAAAA9vcmlnVG90YWxzQXJyYXkFAAAAG0lkeFRvdGFsc1RvdGFsQ2xhaW1lZEFtb3VudAQAAAAUdG90YWxSZW1haW5pbmdBbW91bnQJAQAAAA1wYXJzZUludFZhbHVlAAAAAQkAAZEAAAACBQAAAA9vcmlnVG90YWxzQXJyYXkFAAAAGElkeFRvdGFsc1JlbWFpbmluZ0Ftb3VudAQAAAARbGFzdENsYWltZWRIZWlnaHQJAQAAAA1wYXJzZUludFZhbHVlAAAAAQkAAZEAAAACBQAAAA9vcmlnVG90YWxzQXJyYXkFAAAAGklkeFRvdGFsc0xhc3RDbGFpbWVkSGVpZ2h0AwkBAAAAAiE9AAAAAggFAAAAAWkAAAAGY2FsbGVyBQAAABJjZmdDbGFpbUFzc2V0T3duZXIJAAACAAAAAQIAAAAScGVybWlzc2lvbnMgZGVuaWVkAwkAAGYAAAACBQAAABNjZmdDbGFpbVN0YXJ0SGVpZ2h0BQAAAAZoZWlnaHQJAAACAAAAAQkAASwAAAACAgAAABhXYWl0IGNsYWltIHN0YXJ0IGJsb2NrOiAJAAGkAAAAAQUAAAATY2ZnQ2xhaW1TdGFydEhlaWdodAQAAAATbGFzdENhbHVsYXRpb25CbG9jawMJAABmAAAAAgUAAAAGaGVpZ2h0BQAAAAtjZmdDbGFpbUVuZAUAAAALY2ZnQ2xhaW1FbmQFAAAABmhlaWdodAQAAAAUZmlyc3RDYWx1bGF0aW9uQmxvY2sDCQAAAAAAAAIFAAAAEWxhc3RDbGFpbWVkSGVpZ2h0AAAAAAAAAAAABQAAABNjZmdDbGFpbVN0YXJ0SGVpZ2h0BQAAABFsYXN0Q2xhaW1lZEhlaWdodAQAAAAOY2xhaW1pbmdCbG9ja3MJAABlAAAAAgUAAAATbGFzdENhbHVsYXRpb25CbG9jawUAAAAUZmlyc3RDYWx1bGF0aW9uQmxvY2sEAAAAD2Ftb3VudEF2YWlsYWJsZQkAAGsAAAADBQAAABhjZmdDbGFpbUFzc2V0VG90YWxBbW91bnQFAAAADmNsYWltaW5nQmxvY2tzBQAAABBjZmdDbGFpbUR1cmF0aW9uBAAAAA9hbW91bnRVbmNsYWltZWQJAQAAAAt2YWx1ZU9yRWxzZQAAAAIJAAQaAAAAAgUAAAAEdGhpcwUAAAASa2V5QW1vdW50VW5jbGFpbWVkAAAAAAAAAAAABAAAABRhbW91bnRBdmFpbGFibGVUb3RhbAkAAGQAAAACBQAAAA9hbW91bnRBdmFpbGFibGUFAAAAD2Ftb3VudFVuY2xhaW1lZAQAAAANYW1vdW50VG9DbGFpbQMDCQAAZwAAAAIAAAAAAAAAAAAFAAAABmFtb3VudAYJAABnAAAAAgUAAAAGYW1vdW50BQAAABRhbW91bnRBdmFpbGFibGVUb3RhbAUAAAAUYW1vdW50QXZhaWxhYmxlVG90YWwFAAAABmFtb3VudAQAAAASYW1vdW50VW5jbGFpbWVkTmV3CQAAZQAAAAIFAAAAFGFtb3VudEF2YWlsYWJsZVRvdGFsBQAAAA1hbW91bnRUb0NsYWltCQAFFAAAAAIJAARMAAAAAgkBAAAADEludGVnZXJFbnRyeQAAAAIFAAAAEmtleUFtb3VudFVuY2xhaW1lZAUAAAASYW1vdW50VW5jbGFpbWVkTmV3CQAETAAAAAIJAQAAAA5TY3JpcHRUcmFuc2ZlcgAAAAMFAAAAEmNmZ0NsYWltQXNzZXRPd25lcgUAAAANYW1vdW50VG9DbGFpbQUAAAAPY2ZnQ2xhaW1Bc3NldElkCQAETAAAAAIJAQAAAAtUb3RhbHNFbnRyeQAAAAQJAQAAAAlrZXlUb3RhbHMAAAAACQEAAAAPcmVhZFRvdGFsc0FycmF5AAAAAAUAAAANYW1vdW50VG9DbGFpbQUAAAATbGFzdENhbHVsYXRpb25CbG9jawkABEwAAAACCQEAAAAaQ2xhaW1PcGVyYXRpb25IaXN0b3J5RW50cnkAAAAGCQAEJQAAAAEFAAAAEmNmZ0NsYWltQXNzZXRPd25lcgUAAAANYW1vdW50VG9DbGFpbQUAAAAOY2xhaW1pbmdCbG9ja3MFAAAAFGZpcnN0Q2FsdWxhdGlvbkJsb2NrBQAAABNsYXN0Q2FsdWxhdGlvbkJsb2NrCAUAAAABaQAAAA10cmFuc2FjdGlvbklkBQAAAANuaWwFAAAADWFtb3VudFRvQ2xhaW0AAAAGAAAAAWkBAAAAC2NvbnN0cnVjdG9yAAAAAwAAAA9jbGFpbVN0YXJ0QmxvY2sAAAATdmVzdGluZ1BlcmlvZEJsb2NrcwAAABJiZW5lZmljaWFyeUFkZHJlc3MEAAAACnZlc3RpbmdFbmQJAABkAAAAAgUAAAAPY2xhaW1TdGFydEJsb2NrBQAAABN2ZXN0aW5nUGVyaW9kQmxvY2tzAwkBAAAACWlzRGVmaW5lZAAAAAEJAAQiAAAAAQkBAAAACWtleUNvbmZpZwAAAAAJAAACAAAAAQIAAAATYWxyZWFkeSBpbml0aWFsaXplZAMJAQAAAAIhPQAAAAIJAAGQAAAAAQgFAAAAAWkAAAAIcGF5bWVudHMAAAAAAAAAAAEJAAACAAAAAQIAAAAiZXhhY3RseSAxIHBheW1lbnQgbXVzdCBiZSBhdHRhY2hlZAMJAQAAAAIhPQAAAAIIBQAAAAFpAAAAD2NhbGxlclB1YmxpY0tleQEAAAAgEdQ5ZIJdvXbTs0YKKfQ9JRQr8vkMxCViWbhknd/V+HoJAAACAAAAAQIAAAAObm90IGF1dGhvcml6ZWQEAAAAGGJlbmVmaWNpYXJ5QWRkcmVzc1BhcnNlZAkBAAAAE3ZhbHVlT3JFcnJvck1lc3NhZ2UAAAACCQAEJgAAAAEFAAAAEmJlbmVmaWNpYXJ5QWRkcmVzcwIAAAAgSW52YWxpZCBiZW5lZmljaWFyQWRkcmVzcyBwYXNzZWQEAAAAA3BtdAkBAAAABXZhbHVlAAAAAQkAAZEAAAACCAUAAAABaQAAAAhwYXltZW50cwAAAAAAAAAAAAQAAAAMY2xhaW1Bc3NldElkCQEAAAAFdmFsdWUAAAABCAUAAAADcG10AAAAB2Fzc2V0SWQEAAAADmNsYWltQXNzZXRJbmZvCQEAAAATdmFsdWVPckVycm9yTWVzc2FnZQAAAAIJAAPsAAAAAQUAAAAMY2xhaW1Bc3NldElkAgAAABtmYWlsIHRvIGxvYWQgaWRvIGFzc2V0IGluZm8EAAAADmNsYWltQXNzZXRJZDU4CQACWAAAAAEFAAAADGNsYWltQXNzZXRJZAQAAAAOY2xhaW1Bc3NldE11bHQJAABsAAAABgAAAAAAAAAACgAAAAAAAAAAAAgFAAAADmNsYWltQXNzZXRJbmZvAAAACGRlY2ltYWxzAAAAAAAAAAAAAAAAAAAAAAAABQAAAARET1dOBAAAABBjbGFpbUFzc2V0QW1vdW50CAUAAAADcG10AAAABmFtb3VudAkABEwAAAACCQEAAAALU3RyaW5nRW50cnkAAAACCQEAAAAJa2V5Q29uZmlnAAAAAAkBAAAADGZvcm1hdENvbmZpZwAAAAYFAAAAD2NsYWltU3RhcnRCbG9jawUAAAATdmVzdGluZ1BlcmlvZEJsb2NrcwUAAAAOY2xhaW1Bc3NldElkNTgFAAAADmNsYWltQXNzZXRNdWx0CQAEJQAAAAEFAAAAGGJlbmVmaWNpYXJ5QWRkcmVzc1BhcnNlZAUAAAAQY2xhaW1Bc3NldEFtb3VudAkABEwAAAACCQEAAAALU3RyaW5nRW50cnkAAAACCQEAAAAJa2V5VG90YWxzAAAAAAkBAAAAEmZvcm1hdFRvdGFsc1N0cmluZwAAAAMCAAAAATAJAAGkAAAAAQUAAAAQY2xhaW1Bc3NldEFtb3VudAIAAAABMAUAAAADbmlsAAAAAWkBAAAAC2NsYWltQW1vdW50AAAAAQAAAAZhbW91bnQJAQAAAAtjbGFpbUNvbW1vbgAAAAIFAAAAAWkFAAAABmFtb3VudAAAAAFpAQAAAAVjbGFpbQAAAAAJAQAAAAtjbGFpbUNvbW1vbgAAAAIFAAAAAWkA//////////8AAAABaQEAAAAWd2l0aGRyYXdSZWZlcnJhbFJld2FyZAAAAAEAAAAId3hBbW91bnQEAAAAF3JlZmVycmFsQ29udHJhY3RBZGRyZXNzCQEAAAAFdmFsdWUAAAABCQAEIgAAAAEFAAAAC2tleVJlZmVycmFsBAAAAAxtdXN0UmVmZXJyYWwDCQAAAAAAAAIJAAQlAAAAAQgFAAAAAWkAAAAGY2FsbGVyBQAAABdyZWZlcnJhbENvbnRyYWN0QWRkcmVzcwYJAQAAAAh0aHJvd0VycgAAAAECAAAAEXBlcm1pc3Npb24gZGVuaWVkAwkAAAAAAAACBQAAAAxtdXN0UmVmZXJyYWwFAAAADG11c3RSZWZlcnJhbAQAAAAJd3hBc3NldElkCQACWQAAAAEJAQAAAAV2YWx1ZQAAAAEJAAQiAAAAAQUAAAAMa2V5V3hBc3NldElkCQAFFAAAAAIJAARMAAAAAgkBAAAADlNjcmlwdFRyYW5zZmVyAAAAAwgFAAAAAWkAAAAGY2FsbGVyBQAAAAh3eEFtb3VudAUAAAAJd3hBc3NldElkCQAETAAAAAIJAQAAABpDbGFpbU9wZXJhdGlvbkhpc3RvcnlFbnRyeQAAAAYFAAAAF3JlZmVycmFsQ29udHJhY3RBZGRyZXNzBQAAAAh3eEFtb3VudAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgFAAAAAWkAAAANdHJhbnNhY3Rpb25JZAUAAAADbmlsBQAAAAR1bml0CQAAAgAAAAECAAAAJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgAAAAFpAQAAAApzZXRNYW5hZ2VyAAAAAQAAABdwZW5kaW5nTWFuYWdlclB1YmxpY0tleQQAAAALY2hlY2tDYWxsZXIJAQAAAAttdXN0TWFuYWdlcgAAAAEFAAAAAWkDCQAAAAAAAAIFAAAAC2NoZWNrQ2FsbGVyBQAAAAtjaGVja0NhbGxlcgQAAAAVY2hlY2tNYW5hZ2VyUHVibGljS2V5CQACWQAAAAEFAAAAF3BlbmRpbmdNYW5hZ2VyUHVibGljS2V5AwkAAAAAAAACBQAAABVjaGVja01hbmFnZXJQdWJsaWNLZXkFAAAAFWNoZWNrTWFuYWdlclB1YmxpY0tleQkABEwAAAACCQEAAAALU3RyaW5nRW50cnkAAAACCQEAAAAaa2V5UGVuZGluZ01hbmFnZXJQdWJsaWNLZXkAAAAABQAAABdwZW5kaW5nTWFuYWdlclB1YmxpY0tleQUAAAADbmlsCQAAAgAAAAECAAAAJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgkAAAIAAAABAgAAACRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4AAAABaQEAAAAOY29uZmlybU1hbmFnZXIAAAAABAAAAAJwbQkBAAAAHXBlbmRpbmdNYW5hZ2VyUHVibGljS2V5T3JVbml0AAAAAAQAAAAFaGFzUE0DCQEAAAAJaXNEZWZpbmVkAAAAAQUAAAACcG0GCQEAAAAIdGhyb3dFcnIAAAABAgAAABJubyBwZW5kaW5nIG1hbmFnZXIDCQAAAAAAAAIFAAAABWhhc1BNBQAAAAVoYXNQTQQAAAAHY2hlY2tQTQMJAAAAAAAAAggFAAAAAWkAAAAPY2FsbGVyUHVibGljS2V5CQEAAAAFdmFsdWUAAAABBQAAAAJwbQYJAQAAAAh0aHJvd0VycgAAAAECAAAAG3lvdSBhcmUgbm90IHBlbmRpbmcgbWFuYWdlcgMJAAAAAAAAAgUAAAAHY2hlY2tQTQUAAAAHY2hlY2tQTQkABEwAAAACCQEAAAALU3RyaW5nRW50cnkAAAACCQEAAAATa2V5TWFuYWdlclB1YmxpY0tleQAAAAAJAAJYAAAAAQkBAAAABXZhbHVlAAAAAQUAAAACcG0JAARMAAAAAgkBAAAAC0RlbGV0ZUVudHJ5AAAAAQkBAAAAGmtleVBlbmRpbmdNYW5hZ2VyUHVibGljS2V5AAAAAAUAAAADbmlsCQAAAgAAAAECAAAAJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgkAAAIAAAABAgAAACRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4AAAABAAAAAnR4AQAAAAZ2ZXJpZnkAAAAABAAAAA90YXJnZXRQdWJsaWNLZXkEAAAAByRtYXRjaDAJAQAAABZtYW5hZ2VyUHVibGljS2V5T3JVbml0AAAAAAMJAAABAAAAAgUAAAAHJG1hdGNoMAIAAAAKQnl0ZVZlY3RvcgQAAAACcGsFAAAAByRtYXRjaDAFAAAAAnBrAwkAAAEAAAACBQAAAAckbWF0Y2gwAgAAAARVbml0CAUAAAACdHgAAAAPc2VuZGVyUHVibGljS2V5CQAAAgAAAAECAAAAC01hdGNoIGVycm9yCQAB9AAAAAMIBQAAAAJ0eAAAAAlib2R5Qnl0ZXMJAAGRAAAAAggFAAAAAnR4AAAABnByb29mcwAAAAAAAAAAAAUAAAAPdGFyZ2V0UHVibGljS2V5l5Hrzw==", "chainId": 87, "height": 3245441, "applicationStatus": "succeeded", "spentComplexity": 0 } View: original | compacted Prev: AC6MkDTuC52JTzE4jmAoaHACfowerftpyhzFoZ6bnv5w Next: 2mHmW6wr4PV41KCMQqpWPYiyLedB9iGfZuMcBkUW6hoy Diff:
OldNewDifferences
5454
5555 func keyTotals () = "%s__totals"
5656
57+
58+let keyAmountUnclaimed = makeString(["%s", "amountUnclaimed"], SEP)
5759
5860 func keyOperationHistoryRecord (type,userAddress,txId58) = makeString(["%s%s%s%s__history", type, userAddress, txId58], SEP)
5961
116118 }
117119
118120
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+
119159 @Callable(i)
120160 func constructor (claimStartBlock,vestingPeriodBlocks,beneficiaryAddress) = {
121161 let vestingEnd = (claimStartBlock + vestingPeriodBlocks)
140180
141181
142182 @Callable(i)
143-func claim () = {
144- let cfgArray = readConfigArray()
145- let cfgClaimStartHeight = parseIntValue(cfgArray[IdxCfgClaimStartBlock])
146- let cfgClaimDuration = parseIntValue(cfgArray[IdxCfgClaimVestingPeriod])
147- let cfgClaimEnd = (cfgClaimStartHeight + cfgClaimDuration)
148- let cfgClaimAssetId58 = cfgArray[IdxCfgClaimAssetId]
149- let cfgClaimAssetOwner = cfgArray[IdxCfgClaimAssetOwner]
150- let cfgClaimAssetTotalAmount = parseIntValue(cfgArray[IdxCfgClaimAssetTotalAmount])
151- let userAddress = i.caller
152- let userAddress58 = toString(userAddress)
153- let origTotalsArray = readTotalsArray()
154- let totalClaimedAmount = parseIntValue(origTotalsArray[IdxTotalsTotalClaimedAmount])
155- let totalRemainingAmount = parseIntValue(origTotalsArray[IdxTotalsRemainingAmount])
156- let lastClaimedHeight = parseIntValue(origTotalsArray[IdxTotalsLastClaimedHeight])
157- if ((userAddress58 != cfgClaimAssetOwner))
158- then throw("permissions denied")
159- else if ((cfgClaimStartHeight > height))
160- then throw(("Wait claim start block: " + toString(cfgClaimStartHeight)))
161- else {
162- let lastCalulationBlock = if ((height > cfgClaimEnd))
163- then cfgClaimEnd
164- else height
165- let firstCalulationBlock = if ((lastClaimedHeight == 0))
166- then cfgClaimStartHeight
167- else lastClaimedHeight
168- let claimingBlocks = (lastCalulationBlock - firstCalulationBlock)
169- let claimingAssetAmount = fraction(cfgClaimAssetTotalAmount, claimingBlocks, cfgClaimDuration)
170-[ScriptTransfer(userAddress, claimingAssetAmount, fromBase58String(cfgClaimAssetId58)), TotalsEntry(keyTotals(), readTotalsArray(), claimingAssetAmount, lastCalulationBlock), ClaimOperationHistoryEntry(userAddress58, claimingAssetAmount, claimingBlocks, firstCalulationBlock, lastCalulationBlock, i.transactionId)]
171- }
172- }
183+func claimAmount (amount) = claimCommon(i, amount)
184+
185+
186+
187+@Callable(i)
188+func claim () = claimCommon(i, -1)
173189
174190
175191
176192 @Callable(i)
177193 func withdrawReferralReward (wxAmount) = {
178- let mustReferral = if ((toString(i.caller) == value(getString(keyReferral))))
194+ let referralContractAddress = value(getString(keyReferral))
195+ let mustReferral = if ((toString(i.caller) == referralContractAddress))
179196 then true
180197 else throwErr("permission denied")
181198 if ((mustReferral == mustReferral))
182199 then {
183200 let wxAssetId = fromBase58String(value(getString(keyWxAssetId)))
184- $Tuple2([ScriptTransfer(i.caller, wxAmount, wxAssetId)], unit)
201+ $Tuple2([ScriptTransfer(i.caller, wxAmount, wxAssetId), ClaimOperationHistoryEntry(referralContractAddress, wxAmount, 0, 0, 0, i.transactionId)], unit)
185202 }
186203 else throw("Strict value is not equal to itself.")
187204 }
Full:
OldNewDifferences
11 {-# STDLIB_VERSION 5 #-}
22 {-# SCRIPT_TYPE ACCOUNT #-}
33 {-# CONTENT_TYPE DAPP #-}
44 let SEP = "__"
55
66 let keyReferral = makeString(["%s", "referral"], SEP)
77
88 let keyWxAssetId = makeString(["%s", "wxAssetId"], SEP)
99
1010 func keyManagerPublicKey () = "%s__managerPublicKey"
1111
1212
1313 func keyPendingManagerPublicKey () = "%s__pendingManagerPublicKey"
1414
1515
1616 let IdxCfgClaimStartBlock = 1
1717
1818 let IdxCfgClaimVestingPeriod = 2
1919
2020 let IdxCfgClaimAssetId = 3
2121
2222 let IdxCfgClaimAssetMult = 4
2323
2424 let IdxCfgClaimAssetOwner = 5
2525
2626 let IdxCfgClaimAssetTotalAmount = 6
2727
2828 let IdxTotalsTotalClaimedAmount = 1
2929
3030 let IdxTotalsRemainingAmount = 2
3131
3232 let IdxTotalsLastClaimedHeight = 3
3333
3434 func throwErr (msg) = throw(makeString(["marketing.ride:", msg], " "))
3535
3636
3737 func getStringOrFail (key) = valueOrErrorMessage(getString(key), (("mandatory this." + key) + " is not defined"))
3838
3939
4040 func formatConfigString (claimStartBlock,vestingPeriod,assetIdBase58,assetMult,assetOwner,assetTotalAmt) = makeString(["%d%d%s%d%s%d%", claimStartBlock, vestingPeriod, assetIdBase58, assetMult, assetOwner, assetTotalAmt], SEP)
4141
4242
4343 func formatConfig (claimStartBlock,vestingPeriod,assetIdBase58,assetMult,claimAssetOwner,claimAssetTotalAmount) = formatConfigString(toString(claimStartBlock), toString(vestingPeriod), assetIdBase58, toString(assetMult), claimAssetOwner, toString(claimAssetTotalAmount))
4444
4545
4646 func formatTotalsString (totalClaimedAmount,remainingAmountForClaim,lastClaimedHeight) = makeString(["%d%d%d", totalClaimedAmount, remainingAmountForClaim, lastClaimedHeight], SEP)
4747
4848
4949 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)
5050
5151
5252 func keyConfig () = "%s__config"
5353
5454
5555 func keyTotals () = "%s__totals"
5656
57+
58+let keyAmountUnclaimed = makeString(["%s", "amountUnclaimed"], SEP)
5759
5860 func keyOperationHistoryRecord (type,userAddress,txId58) = makeString(["%s%s%s%s__history", type, userAddress, txId58], SEP)
5961
6062
6163 func readConfigArray () = split(getStringOrFail(keyConfig()), SEP)
6264
6365
6466 func readTotalsArray () = split(getStringOrFail(keyTotals()), SEP)
6567
6668
6769 func TotalsEntry (key,origArray,claimedAmt,newLastClaimedHeight) = {
6870 let totalClaimedAmount = parseIntValue(origArray[IdxTotalsTotalClaimedAmount])
6971 let remainingAmount = parseIntValue(origArray[IdxTotalsRemainingAmount])
7072 let lastClaimedHeight = parseIntValue(origArray[IdxTotalsLastClaimedHeight])
7173 let newTotalClaimedAmount = (totalClaimedAmount + claimedAmt)
7274 let newRemainingAmount = (remainingAmount - claimedAmt)
7375 if ((0 > newRemainingAmount))
7476 then throw("invalid math")
7577 else StringEntry(key, formatTotalsString(toString(newTotalClaimedAmount), toString(newRemainingAmount), toString(newLastClaimedHeight)))
7678 }
7779
7880
7981 func ClaimOperationHistoryEntry (userAddress,claimedAssetAmount,claimingBlocks,firstCalculationBlock,lastCalculationBlock,txId) = StringEntry(keyOperationHistoryRecord("claim", userAddress, toBase58String(txId)), formatHistoryRecord(claimedAssetAmount, claimingBlocks, firstCalculationBlock, lastCalculationBlock))
8082
8183
8284 func managerPublicKeyOrUnit () = match getString(keyManagerPublicKey()) {
8385 case s: String =>
8486 fromBase58String(s)
8587 case _: Unit =>
8688 unit
8789 case _ =>
8890 throw("Match error")
8991 }
9092
9193
9294 func pendingManagerPublicKeyOrUnit () = match getString(keyPendingManagerPublicKey()) {
9395 case s: String =>
9496 fromBase58String(s)
9597 case _: Unit =>
9698 unit
9799 case _ =>
98100 throw("Match error")
99101 }
100102
101103
102104 func mustManager (i) = {
103105 let pd = throwErr("permission denied")
104106 match managerPublicKeyOrUnit() {
105107 case pk: ByteVector =>
106108 if ((i.callerPublicKey == pk))
107109 then true
108110 else pd
109111 case _: Unit =>
110112 if ((i.caller == this))
111113 then true
112114 else pd
113115 case _ =>
114116 throw("Match error")
115117 }
116118 }
117119
118120
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+
119159 @Callable(i)
120160 func constructor (claimStartBlock,vestingPeriodBlocks,beneficiaryAddress) = {
121161 let vestingEnd = (claimStartBlock + vestingPeriodBlocks)
122162 if (isDefined(getString(keyConfig())))
123163 then throw("already initialized")
124164 else if ((size(i.payments) != 1))
125165 then throw("exactly 1 payment must be attached")
126166 else if ((i.callerPublicKey != base58'2Cbd8ozG7A1RyRNC3nNnZgHu7Ru4K3JCfpyPkhqr9zxq'))
127167 then throw("not authorized")
128168 else {
129169 let beneficiaryAddressParsed = valueOrErrorMessage(addressFromString(beneficiaryAddress), "Invalid beneficiarAddress passed")
130170 let pmt = value(i.payments[0])
131171 let claimAssetId = value(pmt.assetId)
132172 let claimAssetInfo = valueOrErrorMessage(assetInfo(claimAssetId), "fail to load ido asset info")
133173 let claimAssetId58 = toBase58String(claimAssetId)
134174 let claimAssetMult = pow(10, 0, claimAssetInfo.decimals, 0, 0, DOWN)
135175 let claimAssetAmount = pmt.amount
136176 [StringEntry(keyConfig(), formatConfig(claimStartBlock, vestingPeriodBlocks, claimAssetId58, claimAssetMult, toString(beneficiaryAddressParsed), claimAssetAmount)), StringEntry(keyTotals(), formatTotalsString("0", toString(claimAssetAmount), "0"))]
137177 }
138178 }
139179
140180
141181
142182 @Callable(i)
143-func claim () = {
144- let cfgArray = readConfigArray()
145- let cfgClaimStartHeight = parseIntValue(cfgArray[IdxCfgClaimStartBlock])
146- let cfgClaimDuration = parseIntValue(cfgArray[IdxCfgClaimVestingPeriod])
147- let cfgClaimEnd = (cfgClaimStartHeight + cfgClaimDuration)
148- let cfgClaimAssetId58 = cfgArray[IdxCfgClaimAssetId]
149- let cfgClaimAssetOwner = cfgArray[IdxCfgClaimAssetOwner]
150- let cfgClaimAssetTotalAmount = parseIntValue(cfgArray[IdxCfgClaimAssetTotalAmount])
151- let userAddress = i.caller
152- let userAddress58 = toString(userAddress)
153- let origTotalsArray = readTotalsArray()
154- let totalClaimedAmount = parseIntValue(origTotalsArray[IdxTotalsTotalClaimedAmount])
155- let totalRemainingAmount = parseIntValue(origTotalsArray[IdxTotalsRemainingAmount])
156- let lastClaimedHeight = parseIntValue(origTotalsArray[IdxTotalsLastClaimedHeight])
157- if ((userAddress58 != cfgClaimAssetOwner))
158- then throw("permissions denied")
159- else if ((cfgClaimStartHeight > height))
160- then throw(("Wait claim start block: " + toString(cfgClaimStartHeight)))
161- else {
162- let lastCalulationBlock = if ((height > cfgClaimEnd))
163- then cfgClaimEnd
164- else height
165- let firstCalulationBlock = if ((lastClaimedHeight == 0))
166- then cfgClaimStartHeight
167- else lastClaimedHeight
168- let claimingBlocks = (lastCalulationBlock - firstCalulationBlock)
169- let claimingAssetAmount = fraction(cfgClaimAssetTotalAmount, claimingBlocks, cfgClaimDuration)
170-[ScriptTransfer(userAddress, claimingAssetAmount, fromBase58String(cfgClaimAssetId58)), TotalsEntry(keyTotals(), readTotalsArray(), claimingAssetAmount, lastCalulationBlock), ClaimOperationHistoryEntry(userAddress58, claimingAssetAmount, claimingBlocks, firstCalulationBlock, lastCalulationBlock, i.transactionId)]
171- }
172- }
183+func claimAmount (amount) = claimCommon(i, amount)
184+
185+
186+
187+@Callable(i)
188+func claim () = claimCommon(i, -1)
173189
174190
175191
176192 @Callable(i)
177193 func withdrawReferralReward (wxAmount) = {
178- let mustReferral = if ((toString(i.caller) == value(getString(keyReferral))))
194+ let referralContractAddress = value(getString(keyReferral))
195+ let mustReferral = if ((toString(i.caller) == referralContractAddress))
179196 then true
180197 else throwErr("permission denied")
181198 if ((mustReferral == mustReferral))
182199 then {
183200 let wxAssetId = fromBase58String(value(getString(keyWxAssetId)))
184- $Tuple2([ScriptTransfer(i.caller, wxAmount, wxAssetId)], unit)
201+ $Tuple2([ScriptTransfer(i.caller, wxAmount, wxAssetId), ClaimOperationHistoryEntry(referralContractAddress, wxAmount, 0, 0, 0, i.transactionId)], unit)
185202 }
186203 else throw("Strict value is not equal to itself.")
187204 }
188205
189206
190207
191208 @Callable(i)
192209 func setManager (pendingManagerPublicKey) = {
193210 let checkCaller = mustManager(i)
194211 if ((checkCaller == checkCaller))
195212 then {
196213 let checkManagerPublicKey = fromBase58String(pendingManagerPublicKey)
197214 if ((checkManagerPublicKey == checkManagerPublicKey))
198215 then [StringEntry(keyPendingManagerPublicKey(), pendingManagerPublicKey)]
199216 else throw("Strict value is not equal to itself.")
200217 }
201218 else throw("Strict value is not equal to itself.")
202219 }
203220
204221
205222
206223 @Callable(i)
207224 func confirmManager () = {
208225 let pm = pendingManagerPublicKeyOrUnit()
209226 let hasPM = if (isDefined(pm))
210227 then true
211228 else throwErr("no pending manager")
212229 if ((hasPM == hasPM))
213230 then {
214231 let checkPM = if ((i.callerPublicKey == value(pm)))
215232 then true
216233 else throwErr("you are not pending manager")
217234 if ((checkPM == checkPM))
218235 then [StringEntry(keyManagerPublicKey(), toBase58String(value(pm))), DeleteEntry(keyPendingManagerPublicKey())]
219236 else throw("Strict value is not equal to itself.")
220237 }
221238 else throw("Strict value is not equal to itself.")
222239 }
223240
224241
225242 @Verifier(tx)
226243 func verify () = {
227244 let targetPublicKey = match managerPublicKeyOrUnit() {
228245 case pk: ByteVector =>
229246 pk
230247 case _: Unit =>
231248 tx.senderPublicKey
232249 case _ =>
233250 throw("Match error")
234251 }
235252 sigVerify(tx.bodyBytes, tx.proofs[0], targetPublicKey)
236253 }
237254

github/deemru/w8io/6500d08 
42.84 ms