2022.08.08 15:09 [3240979] smart account 3PHpaXvHpdthSBwXzjJiNnAes6dqzgr9BcU > SELF 0.00000000 Waves

{ "type": 13, "id": "AC6MkDTuC52JTzE4jmAoaHACfowerftpyhzFoZ6bnv5w", "fee": 1400000, "feeAssetId": null, "timestamp": 1659959865106, "version": 1, "sender": "3PHpaXvHpdthSBwXzjJiNnAes6dqzgr9BcU", "senderPublicKey": "rtorwpe32pLWq5ZZJobchM1AJJcZ31hipQ5SW7i6xff", "proofs": [ "4H7ocVwQhnYL3sCwV996DgRifuM1BcEusZJTMxM6NQphBBX8nTjtvfm2Y9y8b7dbdFaExJfDSQrbvB321sP7RAiY" ], "script": "base64:AAIFAAAAAAAAABcIAhIFCgMBAQgSABIDCgEBEgMKAQgSAAAAAB4AAAAAA1NFUAIAAAACX18AAAAAC2tleVJlZmVycmFsCQAEuQAAAAIJAARMAAAAAgIAAAACJXMJAARMAAAAAgIAAAAIcmVmZXJyYWwFAAAAA25pbAUAAAADU0VQAAAAAAxrZXlXeEFzc2V0SWQJAAS5AAAAAgkABEwAAAACAgAAAAIlcwkABEwAAAACAgAAAAl3eEFzc2V0SWQFAAAAA25pbAUAAAADU0VQAQAAABNrZXlNYW5hZ2VyUHVibGljS2V5AAAAAAIAAAAUJXNfX21hbmFnZXJQdWJsaWNLZXkBAAAAGmtleVBlbmRpbmdNYW5hZ2VyUHVibGljS2V5AAAAAAIAAAAbJXNfX3BlbmRpbmdNYW5hZ2VyUHVibGljS2V5AAAAABVJZHhDZmdDbGFpbVN0YXJ0QmxvY2sAAAAAAAAAAAEAAAAAGElkeENmZ0NsYWltVmVzdGluZ1BlcmlvZAAAAAAAAAAAAgAAAAASSWR4Q2ZnQ2xhaW1Bc3NldElkAAAAAAAAAAADAAAAABRJZHhDZmdDbGFpbUFzc2V0TXVsdAAAAAAAAAAABAAAAAAVSWR4Q2ZnQ2xhaW1Bc3NldE93bmVyAAAAAAAAAAAFAAAAABtJZHhDZmdDbGFpbUFzc2V0VG90YWxBbW91bnQAAAAAAAAAAAYAAAAAG0lkeFRvdGFsc1RvdGFsQ2xhaW1lZEFtb3VudAAAAAAAAAAAAQAAAAAYSWR4VG90YWxzUmVtYWluaW5nQW1vdW50AAAAAAAAAAACAAAAABpJZHhUb3RhbHNMYXN0Q2xhaW1lZEhlaWdodAAAAAAAAAAAAwEAAAAIdGhyb3dFcnIAAAABAAAAA21zZwkAAAIAAAABCQAEuQAAAAIJAARMAAAAAgIAAAAPbWFya2V0aW5nLnJpZGU6CQAETAAAAAIFAAAAA21zZwUAAAADbmlsAgAAAAEgAQAAAA9nZXRTdHJpbmdPckZhaWwAAAABAAAAA2tleQkBAAAAE3ZhbHVlT3JFcnJvck1lc3NhZ2UAAAACCQAEIgAAAAEFAAAAA2tleQkAASwAAAACCQABLAAAAAICAAAAD21hbmRhdG9yeSB0aGlzLgUAAAADa2V5AgAAAA8gaXMgbm90IGRlZmluZWQBAAAAEmZvcm1hdENvbmZpZ1N0cmluZwAAAAYAAAAPY2xhaW1TdGFydEJsb2NrAAAADXZlc3RpbmdQZXJpb2QAAAANYXNzZXRJZEJhc2U1OAAAAAlhc3NldE11bHQAAAAKYXNzZXRPd25lcgAAAA1hc3NldFRvdGFsQW10CQAEuQAAAAIJAARMAAAAAgIAAAANJWQlZCVzJWQlcyVkJQkABEwAAAACBQAAAA9jbGFpbVN0YXJ0QmxvY2sJAARMAAAAAgUAAAANdmVzdGluZ1BlcmlvZAkABEwAAAACBQAAAA1hc3NldElkQmFzZTU4CQAETAAAAAIFAAAACWFzc2V0TXVsdAkABEwAAAACBQAAAAphc3NldE93bmVyCQAETAAAAAIFAAAADWFzc2V0VG90YWxBbXQFAAAAA25pbAUAAAADU0VQAQAAAAxmb3JtYXRDb25maWcAAAAGAAAAD2NsYWltU3RhcnRCbG9jawAAAA12ZXN0aW5nUGVyaW9kAAAADWFzc2V0SWRCYXNlNTgAAAAJYXNzZXRNdWx0AAAAD2NsYWltQXNzZXRPd25lcgAAABVjbGFpbUFzc2V0VG90YWxBbW91bnQJAQAAABJmb3JtYXRDb25maWdTdHJpbmcAAAAGCQABpAAAAAEFAAAAD2NsYWltU3RhcnRCbG9jawkAAaQAAAABBQAAAA12ZXN0aW5nUGVyaW9kBQAAAA1hc3NldElkQmFzZTU4CQABpAAAAAEFAAAACWFzc2V0TXVsdAUAAAAPY2xhaW1Bc3NldE93bmVyCQABpAAAAAEFAAAAFWNsYWltQXNzZXRUb3RhbEFtb3VudAEAAAASZm9ybWF0VG90YWxzU3RyaW5nAAAAAwAAABJ0b3RhbENsYWltZWRBbW91bnQAAAAXcmVtYWluaW5nQW1vdW50Rm9yQ2xhaW0AAAARbGFzdENsYWltZWRIZWlnaHQJAAS5AAAAAgkABEwAAAACAgAAAAYlZCVkJWQJAARMAAAAAgUAAAASdG90YWxDbGFpbWVkQW1vdW50CQAETAAAAAIFAAAAF3JlbWFpbmluZ0Ftb3VudEZvckNsYWltCQAETAAAAAIFAAAAEWxhc3RDbGFpbWVkSGVpZ2h0BQAAAANuaWwFAAAAA1NFUAEAAAATZm9ybWF0SGlzdG9yeVJlY29yZAAAAAQAAAASY2xhaW1lZEFzc2V0QW1vdW50AAAADmNsYWltaW5nQmxvY2tzAAAAFGZpcnN0Q2FsdWxhdGlvbkJsb2NrAAAAE2xhc3RDYWx1bGF0aW9uQmxvY2sJAAS5AAAAAgkABEwAAAACAgAAAAwlZCVkJWQlZCVkJWQJAARMAAAAAgkAAaQAAAABBQAAAAZoZWlnaHQJAARMAAAAAgkAAaQAAAABCAUAAAAJbGFzdEJsb2NrAAAACXRpbWVzdGFtcAkABEwAAAACCQABpAAAAAEFAAAAEmNsYWltZWRBc3NldEFtb3VudAkABEwAAAACCQABpAAAAAEFAAAADmNsYWltaW5nQmxvY2tzCQAETAAAAAIJAAGkAAAAAQUAAAAUZmlyc3RDYWx1bGF0aW9uQmxvY2sJAARMAAAAAgkAAaQAAAABBQAAABNsYXN0Q2FsdWxhdGlvbkJsb2NrBQAAAANuaWwFAAAAA1NFUAEAAAAJa2V5Q29uZmlnAAAAAAIAAAAKJXNfX2NvbmZpZwEAAAAJa2V5VG90YWxzAAAAAAIAAAAKJXNfX3RvdGFscwEAAAAZa2V5T3BlcmF0aW9uSGlzdG9yeVJlY29yZAAAAAMAAAAEdHlwZQAAAAt1c2VyQWRkcmVzcwAAAAZ0eElkNTgJAAS5AAAAAgkABEwAAAACAgAAABElcyVzJXMlc19faGlzdG9yeQkABEwAAAACBQAAAAR0eXBlCQAETAAAAAIFAAAAC3VzZXJBZGRyZXNzCQAETAAAAAIFAAAABnR4SWQ1OAUAAAADbmlsBQAAAANTRVABAAAAD3JlYWRDb25maWdBcnJheQAAAAAJAAS1AAAAAgkBAAAAD2dldFN0cmluZ09yRmFpbAAAAAEJAQAAAAlrZXlDb25maWcAAAAABQAAAANTRVABAAAAD3JlYWRUb3RhbHNBcnJheQAAAAAJAAS1AAAAAgkBAAAAD2dldFN0cmluZ09yRmFpbAAAAAEJAQAAAAlrZXlUb3RhbHMAAAAABQAAAANTRVABAAAAC1RvdGFsc0VudHJ5AAAABAAAAANrZXkAAAAJb3JpZ0FycmF5AAAACmNsYWltZWRBbXQAAAAUbmV3TGFzdENsYWltZWRIZWlnaHQEAAAAEnRvdGFsQ2xhaW1lZEFtb3VudAkBAAAADXBhcnNlSW50VmFsdWUAAAABCQABkQAAAAIFAAAACW9yaWdBcnJheQUAAAAbSWR4VG90YWxzVG90YWxDbGFpbWVkQW1vdW50BAAAAA9yZW1haW5pbmdBbW91bnQJAQAAAA1wYXJzZUludFZhbHVlAAAAAQkAAZEAAAACBQAAAAlvcmlnQXJyYXkFAAAAGElkeFRvdGFsc1JlbWFpbmluZ0Ftb3VudAQAAAARbGFzdENsYWltZWRIZWlnaHQJAQAAAA1wYXJzZUludFZhbHVlAAAAAQkAAZEAAAACBQAAAAlvcmlnQXJyYXkFAAAAGklkeFRvdGFsc0xhc3RDbGFpbWVkSGVpZ2h0BAAAABVuZXdUb3RhbENsYWltZWRBbW91bnQJAABkAAAAAgUAAAASdG90YWxDbGFpbWVkQW1vdW50BQAAAApjbGFpbWVkQW10BAAAABJuZXdSZW1haW5pbmdBbW91bnQJAABlAAAAAgUAAAAPcmVtYWluaW5nQW1vdW50BQAAAApjbGFpbWVkQW10AwkAAGYAAAACAAAAAAAAAAAABQAAABJuZXdSZW1haW5pbmdBbW91bnQJAAACAAAAAQIAAAAMaW52YWxpZCBtYXRoCQEAAAALU3RyaW5nRW50cnkAAAACBQAAAANrZXkJAQAAABJmb3JtYXRUb3RhbHNTdHJpbmcAAAADCQABpAAAAAEFAAAAFW5ld1RvdGFsQ2xhaW1lZEFtb3VudAkAAaQAAAABBQAAABJuZXdSZW1haW5pbmdBbW91bnQJAAGkAAAAAQUAAAAUbmV3TGFzdENsYWltZWRIZWlnaHQBAAAAGkNsYWltT3BlcmF0aW9uSGlzdG9yeUVudHJ5AAAABgAAAAt1c2VyQWRkcmVzcwAAABJjbGFpbWVkQXNzZXRBbW91bnQAAAAOY2xhaW1pbmdCbG9ja3MAAAAVZmlyc3RDYWxjdWxhdGlvbkJsb2NrAAAAFGxhc3RDYWxjdWxhdGlvbkJsb2NrAAAABHR4SWQJAQAAAAtTdHJpbmdFbnRyeQAAAAIJAQAAABlrZXlPcGVyYXRpb25IaXN0b3J5UmVjb3JkAAAAAwIAAAAFY2xhaW0FAAAAC3VzZXJBZGRyZXNzCQACWAAAAAEFAAAABHR4SWQJAQAAABNmb3JtYXRIaXN0b3J5UmVjb3JkAAAABAUAAAASY2xhaW1lZEFzc2V0QW1vdW50BQAAAA5jbGFpbWluZ0Jsb2NrcwUAAAAVZmlyc3RDYWxjdWxhdGlvbkJsb2NrBQAAABRsYXN0Q2FsY3VsYXRpb25CbG9jawEAAAAWbWFuYWdlclB1YmxpY0tleU9yVW5pdAAAAAAEAAAAByRtYXRjaDAJAAQiAAAAAQkBAAAAE2tleU1hbmFnZXJQdWJsaWNLZXkAAAAAAwkAAAEAAAACBQAAAAckbWF0Y2gwAgAAAAZTdHJpbmcEAAAAAXMFAAAAByRtYXRjaDAJAAJZAAAAAQUAAAABcwMJAAABAAAAAgUAAAAHJG1hdGNoMAIAAAAEVW5pdAUAAAAEdW5pdAkAAAIAAAABAgAAAAtNYXRjaCBlcnJvcgEAAAAdcGVuZGluZ01hbmFnZXJQdWJsaWNLZXlPclVuaXQAAAAABAAAAAckbWF0Y2gwCQAEIgAAAAEJAQAAABprZXlQZW5kaW5nTWFuYWdlclB1YmxpY0tleQAAAAADCQAAAQAAAAIFAAAAByRtYXRjaDACAAAABlN0cmluZwQAAAABcwUAAAAHJG1hdGNoMAkAAlkAAAABBQAAAAFzAwkAAAEAAAACBQAAAAckbWF0Y2gwAgAAAARVbml0BQAAAAR1bml0CQAAAgAAAAECAAAAC01hdGNoIGVycm9yAQAAAAttdXN0TWFuYWdlcgAAAAEAAAABaQQAAAACcGQJAQAAAAh0aHJvd0VycgAAAAECAAAAEXBlcm1pc3Npb24gZGVuaWVkBAAAAAckbWF0Y2gwCQEAAAAWbWFuYWdlclB1YmxpY0tleU9yVW5pdAAAAAADCQAAAQAAAAIFAAAAByRtYXRjaDACAAAACkJ5dGVWZWN0b3IEAAAAAnBrBQAAAAckbWF0Y2gwAwkAAAAAAAACCAUAAAABaQAAAA9jYWxsZXJQdWJsaWNLZXkFAAAAAnBrBgUAAAACcGQDCQAAAQAAAAIFAAAAByRtYXRjaDACAAAABFVuaXQDCQAAAAAAAAIIBQAAAAFpAAAABmNhbGxlcgUAAAAEdGhpcwYFAAAAAnBkCQAAAgAAAAECAAAAC01hdGNoIGVycm9yAAAABQAAAAFpAQAAAAtjb25zdHJ1Y3RvcgAAAAMAAAAPY2xhaW1TdGFydEJsb2NrAAAAE3Zlc3RpbmdQZXJpb2RCbG9ja3MAAAASYmVuZWZpY2lhcnlBZGRyZXNzBAAAAAp2ZXN0aW5nRW5kCQAAZAAAAAIFAAAAD2NsYWltU3RhcnRCbG9jawUAAAATdmVzdGluZ1BlcmlvZEJsb2NrcwMJAQAAAAlpc0RlZmluZWQAAAABCQAEIgAAAAEJAQAAAAlrZXlDb25maWcAAAAACQAAAgAAAAECAAAAE2FscmVhZHkgaW5pdGlhbGl6ZWQDCQEAAAACIT0AAAACCQABkAAAAAEIBQAAAAFpAAAACHBheW1lbnRzAAAAAAAAAAABCQAAAgAAAAECAAAAImV4YWN0bHkgMSBwYXltZW50IG11c3QgYmUgYXR0YWNoZWQDCQEAAAACIT0AAAACCAUAAAABaQAAAA9jYWxsZXJQdWJsaWNLZXkBAAAAIBHUOWSCXb1207NGCin0PSUUK/L5DMQlYlm4ZJ3f1fh6CQAAAgAAAAECAAAADm5vdCBhdXRob3JpemVkBAAAABhiZW5lZmljaWFyeUFkZHJlc3NQYXJzZWQJAQAAABN2YWx1ZU9yRXJyb3JNZXNzYWdlAAAAAgkABCYAAAABBQAAABJiZW5lZmljaWFyeUFkZHJlc3MCAAAAIEludmFsaWQgYmVuZWZpY2lhckFkZHJlc3MgcGFzc2VkBAAAAANwbXQJAQAAAAV2YWx1ZQAAAAEJAAGRAAAAAggFAAAAAWkAAAAIcGF5bWVudHMAAAAAAAAAAAAEAAAADGNsYWltQXNzZXRJZAkBAAAABXZhbHVlAAAAAQgFAAAAA3BtdAAAAAdhc3NldElkBAAAAA5jbGFpbUFzc2V0SW5mbwkBAAAAE3ZhbHVlT3JFcnJvck1lc3NhZ2UAAAACCQAD7AAAAAEFAAAADGNsYWltQXNzZXRJZAIAAAAbZmFpbCB0byBsb2FkIGlkbyBhc3NldCBpbmZvBAAAAA5jbGFpbUFzc2V0SWQ1OAkAAlgAAAABBQAAAAxjbGFpbUFzc2V0SWQEAAAADmNsYWltQXNzZXRNdWx0CQAAbAAAAAYAAAAAAAAAAAoAAAAAAAAAAAAIBQAAAA5jbGFpbUFzc2V0SW5mbwAAAAhkZWNpbWFscwAAAAAAAAAAAAAAAAAAAAAAAAUAAAAERE9XTgQAAAAQY2xhaW1Bc3NldEFtb3VudAgFAAAAA3BtdAAAAAZhbW91bnQJAARMAAAAAgkBAAAAC1N0cmluZ0VudHJ5AAAAAgkBAAAACWtleUNvbmZpZwAAAAAJAQAAAAxmb3JtYXRDb25maWcAAAAGBQAAAA9jbGFpbVN0YXJ0QmxvY2sFAAAAE3Zlc3RpbmdQZXJpb2RCbG9ja3MFAAAADmNsYWltQXNzZXRJZDU4BQAAAA5jbGFpbUFzc2V0TXVsdAkABCUAAAABBQAAABhiZW5lZmljaWFyeUFkZHJlc3NQYXJzZWQFAAAAEGNsYWltQXNzZXRBbW91bnQJAARMAAAAAgkBAAAAC1N0cmluZ0VudHJ5AAAAAgkBAAAACWtleVRvdGFscwAAAAAJAQAAABJmb3JtYXRUb3RhbHNTdHJpbmcAAAADAgAAAAEwCQABpAAAAAEFAAAAEGNsYWltQXNzZXRBbW91bnQCAAAAATAFAAAAA25pbAAAAAFpAQAAAAVjbGFpbQAAAAAEAAAACGNmZ0FycmF5CQEAAAAPcmVhZENvbmZpZ0FycmF5AAAAAAQAAAATY2ZnQ2xhaW1TdGFydEhlaWdodAkBAAAADXBhcnNlSW50VmFsdWUAAAABCQABkQAAAAIFAAAACGNmZ0FycmF5BQAAABVJZHhDZmdDbGFpbVN0YXJ0QmxvY2sEAAAAEGNmZ0NsYWltRHVyYXRpb24JAQAAAA1wYXJzZUludFZhbHVlAAAAAQkAAZEAAAACBQAAAAhjZmdBcnJheQUAAAAYSWR4Q2ZnQ2xhaW1WZXN0aW5nUGVyaW9kBAAAAAtjZmdDbGFpbUVuZAkAAGQAAAACBQAAABNjZmdDbGFpbVN0YXJ0SGVpZ2h0BQAAABBjZmdDbGFpbUR1cmF0aW9uBAAAABFjZmdDbGFpbUFzc2V0SWQ1OAkAAZEAAAACBQAAAAhjZmdBcnJheQUAAAASSWR4Q2ZnQ2xhaW1Bc3NldElkBAAAABJjZmdDbGFpbUFzc2V0T3duZXIJAAGRAAAAAgUAAAAIY2ZnQXJyYXkFAAAAFUlkeENmZ0NsYWltQXNzZXRPd25lcgQAAAAYY2ZnQ2xhaW1Bc3NldFRvdGFsQW1vdW50CQEAAAANcGFyc2VJbnRWYWx1ZQAAAAEJAAGRAAAAAgUAAAAIY2ZnQXJyYXkFAAAAG0lkeENmZ0NsYWltQXNzZXRUb3RhbEFtb3VudAQAAAALdXNlckFkZHJlc3MIBQAAAAFpAAAABmNhbGxlcgQAAAANdXNlckFkZHJlc3M1OAkABCUAAAABBQAAAAt1c2VyQWRkcmVzcwQAAAAPb3JpZ1RvdGFsc0FycmF5CQEAAAAPcmVhZFRvdGFsc0FycmF5AAAAAAQAAAASdG90YWxDbGFpbWVkQW1vdW50CQEAAAANcGFyc2VJbnRWYWx1ZQAAAAEJAAGRAAAAAgUAAAAPb3JpZ1RvdGFsc0FycmF5BQAAABtJZHhUb3RhbHNUb3RhbENsYWltZWRBbW91bnQEAAAAFHRvdGFsUmVtYWluaW5nQW1vdW50CQEAAAANcGFyc2VJbnRWYWx1ZQAAAAEJAAGRAAAAAgUAAAAPb3JpZ1RvdGFsc0FycmF5BQAAABhJZHhUb3RhbHNSZW1haW5pbmdBbW91bnQEAAAAEWxhc3RDbGFpbWVkSGVpZ2h0CQEAAAANcGFyc2VJbnRWYWx1ZQAAAAEJAAGRAAAAAgUAAAAPb3JpZ1RvdGFsc0FycmF5BQAAABpJZHhUb3RhbHNMYXN0Q2xhaW1lZEhlaWdodAMJAQAAAAIhPQAAAAIFAAAADXVzZXJBZGRyZXNzNTgFAAAAEmNmZ0NsYWltQXNzZXRPd25lcgkAAAIAAAABAgAAABJwZXJtaXNzaW9ucyBkZW5pZWQDCQAAZgAAAAIFAAAAE2NmZ0NsYWltU3RhcnRIZWlnaHQFAAAABmhlaWdodAkAAAIAAAABCQABLAAAAAICAAAAGFdhaXQgY2xhaW0gc3RhcnQgYmxvY2s6IAkAAaQAAAABBQAAABNjZmdDbGFpbVN0YXJ0SGVpZ2h0BAAAABNsYXN0Q2FsdWxhdGlvbkJsb2NrAwkAAGYAAAACBQAAAAZoZWlnaHQFAAAAC2NmZ0NsYWltRW5kBQAAAAtjZmdDbGFpbUVuZAUAAAAGaGVpZ2h0BAAAABRmaXJzdENhbHVsYXRpb25CbG9jawMJAAAAAAAAAgUAAAARbGFzdENsYWltZWRIZWlnaHQAAAAAAAAAAAAFAAAAE2NmZ0NsYWltU3RhcnRIZWlnaHQFAAAAEWxhc3RDbGFpbWVkSGVpZ2h0BAAAAA5jbGFpbWluZ0Jsb2NrcwkAAGUAAAACBQAAABNsYXN0Q2FsdWxhdGlvbkJsb2NrBQAAABRmaXJzdENhbHVsYXRpb25CbG9jawQAAAATY2xhaW1pbmdBc3NldEFtb3VudAkAAGsAAAADBQAAABhjZmdDbGFpbUFzc2V0VG90YWxBbW91bnQFAAAADmNsYWltaW5nQmxvY2tzBQAAABBjZmdDbGFpbUR1cmF0aW9uCQAETAAAAAIJAQAAAA5TY3JpcHRUcmFuc2ZlcgAAAAMFAAAAC3VzZXJBZGRyZXNzBQAAABNjbGFpbWluZ0Fzc2V0QW1vdW50CQACWQAAAAEFAAAAEWNmZ0NsYWltQXNzZXRJZDU4CQAETAAAAAIJAQAAAAtUb3RhbHNFbnRyeQAAAAQJAQAAAAlrZXlUb3RhbHMAAAAACQEAAAAPcmVhZFRvdGFsc0FycmF5AAAAAAUAAAATY2xhaW1pbmdBc3NldEFtb3VudAUAAAATbGFzdENhbHVsYXRpb25CbG9jawkABEwAAAACCQEAAAAaQ2xhaW1PcGVyYXRpb25IaXN0b3J5RW50cnkAAAAGBQAAAA11c2VyQWRkcmVzczU4BQAAABNjbGFpbWluZ0Fzc2V0QW1vdW50BQAAAA5jbGFpbWluZ0Jsb2NrcwUAAAAUZmlyc3RDYWx1bGF0aW9uQmxvY2sFAAAAE2xhc3RDYWx1bGF0aW9uQmxvY2sIBQAAAAFpAAAADXRyYW5zYWN0aW9uSWQFAAAAA25pbAAAAAFpAQAAABZ3aXRoZHJhd1JlZmVycmFsUmV3YXJkAAAAAQAAAAh3eEFtb3VudAQAAAAMbXVzdFJlZmVycmFsAwkAAAAAAAACCQAEJQAAAAEIBQAAAAFpAAAABmNhbGxlcgkBAAAABXZhbHVlAAAAAQkABCIAAAABBQAAAAtrZXlSZWZlcnJhbAYJAQAAAAh0aHJvd0VycgAAAAECAAAAEXBlcm1pc3Npb24gZGVuaWVkAwkAAAAAAAACBQAAAAxtdXN0UmVmZXJyYWwFAAAADG11c3RSZWZlcnJhbAQAAAAJd3hBc3NldElkCQACWQAAAAEJAQAAAAV2YWx1ZQAAAAEJAAQiAAAAAQUAAAAMa2V5V3hBc3NldElkCQAFFAAAAAIJAARMAAAAAgkBAAAADlNjcmlwdFRyYW5zZmVyAAAAAwgFAAAAAWkAAAAGY2FsbGVyBQAAAAh3eEFtb3VudAUAAAAJd3hBc3NldElkBQAAAANuaWwFAAAABHVuaXQJAAACAAAAAQIAAAAkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuAAAAAWkBAAAACnNldE1hbmFnZXIAAAABAAAAF3BlbmRpbmdNYW5hZ2VyUHVibGljS2V5BAAAAAtjaGVja0NhbGxlcgkBAAAAC211c3RNYW5hZ2VyAAAAAQUAAAABaQMJAAAAAAAAAgUAAAALY2hlY2tDYWxsZXIFAAAAC2NoZWNrQ2FsbGVyBAAAABVjaGVja01hbmFnZXJQdWJsaWNLZXkJAAJZAAAAAQUAAAAXcGVuZGluZ01hbmFnZXJQdWJsaWNLZXkDCQAAAAAAAAIFAAAAFWNoZWNrTWFuYWdlclB1YmxpY0tleQUAAAAVY2hlY2tNYW5hZ2VyUHVibGljS2V5CQAETAAAAAIJAQAAAAtTdHJpbmdFbnRyeQAAAAIJAQAAABprZXlQZW5kaW5nTWFuYWdlclB1YmxpY0tleQAAAAAFAAAAF3BlbmRpbmdNYW5hZ2VyUHVibGljS2V5BQAAAANuaWwJAAACAAAAAQIAAAAkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuCQAAAgAAAAECAAAAJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgAAAAFpAQAAAA5jb25maXJtTWFuYWdlcgAAAAAEAAAAAnBtCQEAAAAdcGVuZGluZ01hbmFnZXJQdWJsaWNLZXlPclVuaXQAAAAABAAAAAVoYXNQTQMJAQAAAAlpc0RlZmluZWQAAAABBQAAAAJwbQYJAQAAAAh0aHJvd0VycgAAAAECAAAAEm5vIHBlbmRpbmcgbWFuYWdlcgMJAAAAAAAAAgUAAAAFaGFzUE0FAAAABWhhc1BNBAAAAAdjaGVja1BNAwkAAAAAAAACCAUAAAABaQAAAA9jYWxsZXJQdWJsaWNLZXkJAQAAAAV2YWx1ZQAAAAEFAAAAAnBtBgkBAAAACHRocm93RXJyAAAAAQIAAAAbeW91IGFyZSBub3QgcGVuZGluZyBtYW5hZ2VyAwkAAAAAAAACBQAAAAdjaGVja1BNBQAAAAdjaGVja1BNCQAETAAAAAIJAQAAAAtTdHJpbmdFbnRyeQAAAAIJAQAAABNrZXlNYW5hZ2VyUHVibGljS2V5AAAAAAkAAlgAAAABCQEAAAAFdmFsdWUAAAABBQAAAAJwbQkABEwAAAACCQEAAAALRGVsZXRlRW50cnkAAAABCQEAAAAaa2V5UGVuZGluZ01hbmFnZXJQdWJsaWNLZXkAAAAABQAAAANuaWwJAAACAAAAAQIAAAAkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuCQAAAgAAAAECAAAAJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgAAAAEAAAACdHgBAAAABnZlcmlmeQAAAAAEAAAAD3RhcmdldFB1YmxpY0tleQQAAAAHJG1hdGNoMAkBAAAAFm1hbmFnZXJQdWJsaWNLZXlPclVuaXQAAAAAAwkAAAEAAAACBQAAAAckbWF0Y2gwAgAAAApCeXRlVmVjdG9yBAAAAAJwawUAAAAHJG1hdGNoMAUAAAACcGsDCQAAAQAAAAIFAAAAByRtYXRjaDACAAAABFVuaXQIBQAAAAJ0eAAAAA9zZW5kZXJQdWJsaWNLZXkJAAACAAAAAQIAAAALTWF0Y2ggZXJyb3IJAAH0AAAAAwgFAAAAAnR4AAAACWJvZHlCeXRlcwkAAZEAAAACCAUAAAACdHgAAAAGcHJvb2ZzAAAAAAAAAAAABQAAAA90YXJnZXRQdWJsaWNLZXnKpQuu", "chainId": 87, "height": 3240979, "applicationStatus": "succeeded", "spentComplexity": 0 } View: original | compacted Prev: E3MztFYtMKdqFutkYzpAA5M2TWusvTjJTUePcJHzb2A6 Next: 6oV1s1suMBzpPtEZwmBoZkR7Ncggo2A58KjQUUsJbn7y Diff:
OldNewDifferences
22 {-# SCRIPT_TYPE ACCOUNT #-}
33 {-# CONTENT_TYPE DAPP #-}
44 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+
515
616 let IdxCfgClaimStartBlock = 1
717
2030 let IdxTotalsRemainingAmount = 2
2131
2232 let IdxTotalsLastClaimedHeight = 3
33+
34+func throwErr (msg) = throw(makeString(["marketing.ride:", msg], " "))
35+
2336
2437 func getStringOrFail (key) = valueOrErrorMessage(getString(key), (("mandatory this." + key) + " is not defined"))
2538
6477
6578
6679 func ClaimOperationHistoryEntry (userAddress,claimedAssetAmount,claimingBlocks,firstCalculationBlock,lastCalculationBlock,txId) = StringEntry(keyOperationHistoryRecord("claim", userAddress, toBase58String(txId)), formatHistoryRecord(claimedAssetAmount, claimingBlocks, firstCalculationBlock, lastCalculationBlock))
80+
81+
82+func managerPublicKeyOrUnit () = match getString(keyManagerPublicKey()) {
83+ case s: String =>
84+ fromBase58String(s)
85+ case _: Unit =>
86+ unit
87+ case _ =>
88+ throw("Match error")
89+}
90+
91+
92+func pendingManagerPublicKeyOrUnit () = match getString(keyPendingManagerPublicKey()) {
93+ case s: String =>
94+ fromBase58String(s)
95+ case _: Unit =>
96+ unit
97+ case _ =>
98+ throw("Match error")
99+}
100+
101+
102+func mustManager (i) = {
103+ let pd = throwErr("permission denied")
104+ match managerPublicKeyOrUnit() {
105+ case pk: ByteVector =>
106+ if ((i.callerPublicKey == pk))
107+ then true
108+ else pd
109+ case _: Unit =>
110+ if ((i.caller == this))
111+ then true
112+ else pd
113+ case _ =>
114+ throw("Match error")
115+ }
116+ }
67117
68118
69119 @Callable(i)
122172 }
123173
124174
175+
176+@Callable(i)
177+func withdrawReferralReward (wxAmount) = {
178+ let mustReferral = if ((toString(i.caller) == value(getString(keyReferral))))
179+ then true
180+ else throwErr("permission denied")
181+ if ((mustReferral == mustReferral))
182+ then {
183+ let wxAssetId = fromBase58String(value(getString(keyWxAssetId)))
184+ $Tuple2([ScriptTransfer(i.caller, wxAmount, wxAssetId)], unit)
185+ }
186+ else throw("Strict value is not equal to itself.")
187+ }
188+
189+
190+
191+@Callable(i)
192+func setManager (pendingManagerPublicKey) = {
193+ let checkCaller = mustManager(i)
194+ if ((checkCaller == checkCaller))
195+ then {
196+ let checkManagerPublicKey = fromBase58String(pendingManagerPublicKey)
197+ if ((checkManagerPublicKey == checkManagerPublicKey))
198+ then [StringEntry(keyPendingManagerPublicKey(), pendingManagerPublicKey)]
199+ else throw("Strict value is not equal to itself.")
200+ }
201+ else throw("Strict value is not equal to itself.")
202+ }
203+
204+
205+
206+@Callable(i)
207+func confirmManager () = {
208+ let pm = pendingManagerPublicKeyOrUnit()
209+ let hasPM = if (isDefined(pm))
210+ then true
211+ else throwErr("no pending manager")
212+ if ((hasPM == hasPM))
213+ then {
214+ let checkPM = if ((i.callerPublicKey == value(pm)))
215+ then true
216+ else throwErr("you are not pending manager")
217+ if ((checkPM == checkPM))
218+ then [StringEntry(keyManagerPublicKey(), toBase58String(value(pm))), DeleteEntry(keyPendingManagerPublicKey())]
219+ else throw("Strict value is not equal to itself.")
220+ }
221+ else throw("Strict value is not equal to itself.")
222+ }
223+
224+
125225 @Verifier(tx)
126-func verify () = sigVerify(tx.bodyBytes, tx.proofs[0], fromBase58String("2Cbd8ozG7A1RyRNC3nNnZgHu7Ru4K3JCfpyPkhqr9zxq"))
226+func verify () = {
227+ let targetPublicKey = match managerPublicKeyOrUnit() {
228+ case pk: ByteVector =>
229+ pk
230+ case _: Unit =>
231+ tx.senderPublicKey
232+ case _ =>
233+ throw("Match error")
234+ }
235+ sigVerify(tx.bodyBytes, tx.proofs[0], targetPublicKey)
236+ }
127237
Full:
OldNewDifferences
11 {-# STDLIB_VERSION 5 #-}
22 {-# SCRIPT_TYPE ACCOUNT #-}
33 {-# CONTENT_TYPE DAPP #-}
44 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+
515
616 let IdxCfgClaimStartBlock = 1
717
818 let IdxCfgClaimVestingPeriod = 2
919
1020 let IdxCfgClaimAssetId = 3
1121
1222 let IdxCfgClaimAssetMult = 4
1323
1424 let IdxCfgClaimAssetOwner = 5
1525
1626 let IdxCfgClaimAssetTotalAmount = 6
1727
1828 let IdxTotalsTotalClaimedAmount = 1
1929
2030 let IdxTotalsRemainingAmount = 2
2131
2232 let IdxTotalsLastClaimedHeight = 3
33+
34+func throwErr (msg) = throw(makeString(["marketing.ride:", msg], " "))
35+
2336
2437 func getStringOrFail (key) = valueOrErrorMessage(getString(key), (("mandatory this." + key) + " is not defined"))
2538
2639
2740 func formatConfigString (claimStartBlock,vestingPeriod,assetIdBase58,assetMult,assetOwner,assetTotalAmt) = makeString(["%d%d%s%d%s%d%", claimStartBlock, vestingPeriod, assetIdBase58, assetMult, assetOwner, assetTotalAmt], SEP)
2841
2942
3043 func formatConfig (claimStartBlock,vestingPeriod,assetIdBase58,assetMult,claimAssetOwner,claimAssetTotalAmount) = formatConfigString(toString(claimStartBlock), toString(vestingPeriod), assetIdBase58, toString(assetMult), claimAssetOwner, toString(claimAssetTotalAmount))
3144
3245
3346 func formatTotalsString (totalClaimedAmount,remainingAmountForClaim,lastClaimedHeight) = makeString(["%d%d%d", totalClaimedAmount, remainingAmountForClaim, lastClaimedHeight], SEP)
3447
3548
3649 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)
3750
3851
3952 func keyConfig () = "%s__config"
4053
4154
4255 func keyTotals () = "%s__totals"
4356
4457
4558 func keyOperationHistoryRecord (type,userAddress,txId58) = makeString(["%s%s%s%s__history", type, userAddress, txId58], SEP)
4659
4760
4861 func readConfigArray () = split(getStringOrFail(keyConfig()), SEP)
4962
5063
5164 func readTotalsArray () = split(getStringOrFail(keyTotals()), SEP)
5265
5366
5467 func TotalsEntry (key,origArray,claimedAmt,newLastClaimedHeight) = {
5568 let totalClaimedAmount = parseIntValue(origArray[IdxTotalsTotalClaimedAmount])
5669 let remainingAmount = parseIntValue(origArray[IdxTotalsRemainingAmount])
5770 let lastClaimedHeight = parseIntValue(origArray[IdxTotalsLastClaimedHeight])
5871 let newTotalClaimedAmount = (totalClaimedAmount + claimedAmt)
5972 let newRemainingAmount = (remainingAmount - claimedAmt)
6073 if ((0 > newRemainingAmount))
6174 then throw("invalid math")
6275 else StringEntry(key, formatTotalsString(toString(newTotalClaimedAmount), toString(newRemainingAmount), toString(newLastClaimedHeight)))
6376 }
6477
6578
6679 func ClaimOperationHistoryEntry (userAddress,claimedAssetAmount,claimingBlocks,firstCalculationBlock,lastCalculationBlock,txId) = StringEntry(keyOperationHistoryRecord("claim", userAddress, toBase58String(txId)), formatHistoryRecord(claimedAssetAmount, claimingBlocks, firstCalculationBlock, lastCalculationBlock))
80+
81+
82+func managerPublicKeyOrUnit () = match getString(keyManagerPublicKey()) {
83+ case s: String =>
84+ fromBase58String(s)
85+ case _: Unit =>
86+ unit
87+ case _ =>
88+ throw("Match error")
89+}
90+
91+
92+func pendingManagerPublicKeyOrUnit () = match getString(keyPendingManagerPublicKey()) {
93+ case s: String =>
94+ fromBase58String(s)
95+ case _: Unit =>
96+ unit
97+ case _ =>
98+ throw("Match error")
99+}
100+
101+
102+func mustManager (i) = {
103+ let pd = throwErr("permission denied")
104+ match managerPublicKeyOrUnit() {
105+ case pk: ByteVector =>
106+ if ((i.callerPublicKey == pk))
107+ then true
108+ else pd
109+ case _: Unit =>
110+ if ((i.caller == this))
111+ then true
112+ else pd
113+ case _ =>
114+ throw("Match error")
115+ }
116+ }
67117
68118
69119 @Callable(i)
70120 func constructor (claimStartBlock,vestingPeriodBlocks,beneficiaryAddress) = {
71121 let vestingEnd = (claimStartBlock + vestingPeriodBlocks)
72122 if (isDefined(getString(keyConfig())))
73123 then throw("already initialized")
74124 else if ((size(i.payments) != 1))
75125 then throw("exactly 1 payment must be attached")
76126 else if ((i.callerPublicKey != base58'2Cbd8ozG7A1RyRNC3nNnZgHu7Ru4K3JCfpyPkhqr9zxq'))
77127 then throw("not authorized")
78128 else {
79129 let beneficiaryAddressParsed = valueOrErrorMessage(addressFromString(beneficiaryAddress), "Invalid beneficiarAddress passed")
80130 let pmt = value(i.payments[0])
81131 let claimAssetId = value(pmt.assetId)
82132 let claimAssetInfo = valueOrErrorMessage(assetInfo(claimAssetId), "fail to load ido asset info")
83133 let claimAssetId58 = toBase58String(claimAssetId)
84134 let claimAssetMult = pow(10, 0, claimAssetInfo.decimals, 0, 0, DOWN)
85135 let claimAssetAmount = pmt.amount
86136 [StringEntry(keyConfig(), formatConfig(claimStartBlock, vestingPeriodBlocks, claimAssetId58, claimAssetMult, toString(beneficiaryAddressParsed), claimAssetAmount)), StringEntry(keyTotals(), formatTotalsString("0", toString(claimAssetAmount), "0"))]
87137 }
88138 }
89139
90140
91141
92142 @Callable(i)
93143 func claim () = {
94144 let cfgArray = readConfigArray()
95145 let cfgClaimStartHeight = parseIntValue(cfgArray[IdxCfgClaimStartBlock])
96146 let cfgClaimDuration = parseIntValue(cfgArray[IdxCfgClaimVestingPeriod])
97147 let cfgClaimEnd = (cfgClaimStartHeight + cfgClaimDuration)
98148 let cfgClaimAssetId58 = cfgArray[IdxCfgClaimAssetId]
99149 let cfgClaimAssetOwner = cfgArray[IdxCfgClaimAssetOwner]
100150 let cfgClaimAssetTotalAmount = parseIntValue(cfgArray[IdxCfgClaimAssetTotalAmount])
101151 let userAddress = i.caller
102152 let userAddress58 = toString(userAddress)
103153 let origTotalsArray = readTotalsArray()
104154 let totalClaimedAmount = parseIntValue(origTotalsArray[IdxTotalsTotalClaimedAmount])
105155 let totalRemainingAmount = parseIntValue(origTotalsArray[IdxTotalsRemainingAmount])
106156 let lastClaimedHeight = parseIntValue(origTotalsArray[IdxTotalsLastClaimedHeight])
107157 if ((userAddress58 != cfgClaimAssetOwner))
108158 then throw("permissions denied")
109159 else if ((cfgClaimStartHeight > height))
110160 then throw(("Wait claim start block: " + toString(cfgClaimStartHeight)))
111161 else {
112162 let lastCalulationBlock = if ((height > cfgClaimEnd))
113163 then cfgClaimEnd
114164 else height
115165 let firstCalulationBlock = if ((lastClaimedHeight == 0))
116166 then cfgClaimStartHeight
117167 else lastClaimedHeight
118168 let claimingBlocks = (lastCalulationBlock - firstCalulationBlock)
119169 let claimingAssetAmount = fraction(cfgClaimAssetTotalAmount, claimingBlocks, cfgClaimDuration)
120170 [ScriptTransfer(userAddress, claimingAssetAmount, fromBase58String(cfgClaimAssetId58)), TotalsEntry(keyTotals(), readTotalsArray(), claimingAssetAmount, lastCalulationBlock), ClaimOperationHistoryEntry(userAddress58, claimingAssetAmount, claimingBlocks, firstCalulationBlock, lastCalulationBlock, i.transactionId)]
121171 }
122172 }
123173
124174
175+
176+@Callable(i)
177+func withdrawReferralReward (wxAmount) = {
178+ let mustReferral = if ((toString(i.caller) == value(getString(keyReferral))))
179+ then true
180+ else throwErr("permission denied")
181+ if ((mustReferral == mustReferral))
182+ then {
183+ let wxAssetId = fromBase58String(value(getString(keyWxAssetId)))
184+ $Tuple2([ScriptTransfer(i.caller, wxAmount, wxAssetId)], unit)
185+ }
186+ else throw("Strict value is not equal to itself.")
187+ }
188+
189+
190+
191+@Callable(i)
192+func setManager (pendingManagerPublicKey) = {
193+ let checkCaller = mustManager(i)
194+ if ((checkCaller == checkCaller))
195+ then {
196+ let checkManagerPublicKey = fromBase58String(pendingManagerPublicKey)
197+ if ((checkManagerPublicKey == checkManagerPublicKey))
198+ then [StringEntry(keyPendingManagerPublicKey(), pendingManagerPublicKey)]
199+ else throw("Strict value is not equal to itself.")
200+ }
201+ else throw("Strict value is not equal to itself.")
202+ }
203+
204+
205+
206+@Callable(i)
207+func confirmManager () = {
208+ let pm = pendingManagerPublicKeyOrUnit()
209+ let hasPM = if (isDefined(pm))
210+ then true
211+ else throwErr("no pending manager")
212+ if ((hasPM == hasPM))
213+ then {
214+ let checkPM = if ((i.callerPublicKey == value(pm)))
215+ then true
216+ else throwErr("you are not pending manager")
217+ if ((checkPM == checkPM))
218+ then [StringEntry(keyManagerPublicKey(), toBase58String(value(pm))), DeleteEntry(keyPendingManagerPublicKey())]
219+ else throw("Strict value is not equal to itself.")
220+ }
221+ else throw("Strict value is not equal to itself.")
222+ }
223+
224+
125225 @Verifier(tx)
126-func verify () = sigVerify(tx.bodyBytes, tx.proofs[0], fromBase58String("2Cbd8ozG7A1RyRNC3nNnZgHu7Ru4K3JCfpyPkhqr9zxq"))
226+func verify () = {
227+ let targetPublicKey = match managerPublicKeyOrUnit() {
228+ case pk: ByteVector =>
229+ pk
230+ case _: Unit =>
231+ tx.senderPublicKey
232+ case _ =>
233+ throw("Match error")
234+ }
235+ sigVerify(tx.bodyBytes, tx.proofs[0], targetPublicKey)
236+ }
127237

github/deemru/w8io/786bc32 
38.54 ms