tx · Fui2GKQ9krB8w49JU6riV8BW3J7EpZmt53HiSzU3zytJ

3Ms38PbYnARMUMorWK8SqRBhKKQq2yhXPB1:  -0.01400000 Waves

2022.08.11 12:29 [2179635] smart account 3Ms38PbYnARMUMorWK8SqRBhKKQq2yhXPB1 > SELF 0.00000000 Waves

{ "type": 13, "id": "Fui2GKQ9krB8w49JU6riV8BW3J7EpZmt53HiSzU3zytJ", "fee": 1400000, "feeAssetId": null, "timestamp": 1660210207030, "version": 1, "sender": "3Ms38PbYnARMUMorWK8SqRBhKKQq2yhXPB1", "senderPublicKey": "3EfudNNQNACtTotZKwkRu97fZW5fFjUPwuP1gd3oBHJs", "proofs": [ "297ZXoaxUT5GHJji86XGmnVwjGhp3ufdtYYemxiZEkYfnKCNv3mFPhXXs6eweuv8oPc2bCDFvK5LggM2ovJoHZB6" ], "script": "base64:AAIFAAAAAAAAABcIAhIFCgMBAQgSABIDCgEBEgMKAQgSAAAAAB4AAAAAA1NFUAIAAAACX18AAAAAC2tleVJlZmVycmFsCQAEuQAAAAIJAARMAAAAAgIAAAACJXMJAARMAAAAAgIAAAAIcmVmZXJyYWwFAAAAA25pbAUAAAADU0VQAAAAAAxrZXlXeEFzc2V0SWQJAAS5AAAAAgkABEwAAAACAgAAAAIlcwkABEwAAAACAgAAAAl3eEFzc2V0SWQFAAAAA25pbAUAAAADU0VQAQAAABNrZXlNYW5hZ2VyUHVibGljS2V5AAAAAAIAAAAUJXNfX21hbmFnZXJQdWJsaWNLZXkBAAAAGmtleVBlbmRpbmdNYW5hZ2VyUHVibGljS2V5AAAAAAIAAAAbJXNfX3BlbmRpbmdNYW5hZ2VyUHVibGljS2V5AAAAABVJZHhDZmdDbGFpbVN0YXJ0QmxvY2sAAAAAAAAAAAEAAAAAGElkeENmZ0NsYWltVmVzdGluZ1BlcmlvZAAAAAAAAAAAAgAAAAASSWR4Q2ZnQ2xhaW1Bc3NldElkAAAAAAAAAAADAAAAABRJZHhDZmdDbGFpbUFzc2V0TXVsdAAAAAAAAAAABAAAAAAVSWR4Q2ZnQ2xhaW1Bc3NldE93bmVyAAAAAAAAAAAFAAAAABtJZHhDZmdDbGFpbUFzc2V0VG90YWxBbW91bnQAAAAAAAAAAAYAAAAAG0lkeFRvdGFsc1RvdGFsQ2xhaW1lZEFtb3VudAAAAAAAAAAAAQAAAAAYSWR4VG90YWxzUmVtYWluaW5nQW1vdW50AAAAAAAAAAACAAAAABpJZHhUb3RhbHNMYXN0Q2xhaW1lZEhlaWdodAAAAAAAAAAAAwEAAAAIdGhyb3dFcnIAAAABAAAAA21zZwkAAAIAAAABCQAEuQAAAAIJAARMAAAAAgIAAAAPbWFya2V0aW5nLnJpZGU6CQAETAAAAAIFAAAAA21zZwUAAAADbmlsAgAAAAEgAQAAAA9nZXRTdHJpbmdPckZhaWwAAAABAAAAA2tleQkBAAAAE3ZhbHVlT3JFcnJvck1lc3NhZ2UAAAACCQAEIgAAAAEFAAAAA2tleQkAASwAAAACCQABLAAAAAICAAAAD21hbmRhdG9yeSB0aGlzLgUAAAADa2V5AgAAAA8gaXMgbm90IGRlZmluZWQBAAAAEmZvcm1hdENvbmZpZ1N0cmluZwAAAAYAAAAPY2xhaW1TdGFydEJsb2NrAAAADXZlc3RpbmdQZXJpb2QAAAANYXNzZXRJZEJhc2U1OAAAAAlhc3NldE11bHQAAAAKYXNzZXRPd25lcgAAAA1hc3NldFRvdGFsQW10CQAEuQAAAAIJAARMAAAAAgIAAAANJWQlZCVzJWQlcyVkJQkABEwAAAACBQAAAA9jbGFpbVN0YXJ0QmxvY2sJAARMAAAAAgUAAAANdmVzdGluZ1BlcmlvZAkABEwAAAACBQAAAA1hc3NldElkQmFzZTU4CQAETAAAAAIFAAAACWFzc2V0TXVsdAkABEwAAAACBQAAAAphc3NldE93bmVyCQAETAAAAAIFAAAADWFzc2V0VG90YWxBbXQFAAAAA25pbAUAAAADU0VQAQAAAAxmb3JtYXRDb25maWcAAAAGAAAAD2NsYWltU3RhcnRCbG9jawAAAA12ZXN0aW5nUGVyaW9kAAAADWFzc2V0SWRCYXNlNTgAAAAJYXNzZXRNdWx0AAAAD2NsYWltQXNzZXRPd25lcgAAABVjbGFpbUFzc2V0VG90YWxBbW91bnQJAQAAABJmb3JtYXRDb25maWdTdHJpbmcAAAAGCQABpAAAAAEFAAAAD2NsYWltU3RhcnRCbG9jawkAAaQAAAABBQAAAA12ZXN0aW5nUGVyaW9kBQAAAA1hc3NldElkQmFzZTU4CQABpAAAAAEFAAAACWFzc2V0TXVsdAUAAAAPY2xhaW1Bc3NldE93bmVyCQABpAAAAAEFAAAAFWNsYWltQXNzZXRUb3RhbEFtb3VudAEAAAASZm9ybWF0VG90YWxzU3RyaW5nAAAAAwAAABJ0b3RhbENsYWltZWRBbW91bnQAAAAXcmVtYWluaW5nQW1vdW50Rm9yQ2xhaW0AAAARbGFzdENsYWltZWRIZWlnaHQJAAS5AAAAAgkABEwAAAACAgAAAAYlZCVkJWQJAARMAAAAAgUAAAASdG90YWxDbGFpbWVkQW1vdW50CQAETAAAAAIFAAAAF3JlbWFpbmluZ0Ftb3VudEZvckNsYWltCQAETAAAAAIFAAAAEWxhc3RDbGFpbWVkSGVpZ2h0BQAAAANuaWwFAAAAA1NFUAEAAAATZm9ybWF0SGlzdG9yeVJlY29yZAAAAAQAAAASY2xhaW1lZEFzc2V0QW1vdW50AAAADmNsYWltaW5nQmxvY2tzAAAAFGZpcnN0Q2FsdWxhdGlvbkJsb2NrAAAAE2xhc3RDYWx1bGF0aW9uQmxvY2sJAAS5AAAAAgkABEwAAAACAgAAAAwlZCVkJWQlZCVkJWQJAARMAAAAAgkAAaQAAAABBQAAAAZoZWlnaHQJAARMAAAAAgkAAaQAAAABCAUAAAAJbGFzdEJsb2NrAAAACXRpbWVzdGFtcAkABEwAAAACCQABpAAAAAEFAAAAEmNsYWltZWRBc3NldEFtb3VudAkABEwAAAACCQABpAAAAAEFAAAADmNsYWltaW5nQmxvY2tzCQAETAAAAAIJAAGkAAAAAQUAAAAUZmlyc3RDYWx1bGF0aW9uQmxvY2sJAARMAAAAAgkAAaQAAAABBQAAABNsYXN0Q2FsdWxhdGlvbkJsb2NrBQAAAANuaWwFAAAAA1NFUAEAAAAJa2V5Q29uZmlnAAAAAAIAAAAKJXNfX2NvbmZpZwEAAAAJa2V5VG90YWxzAAAAAAIAAAAKJXNfX3RvdGFscwEAAAAZa2V5T3BlcmF0aW9uSGlzdG9yeVJlY29yZAAAAAMAAAAEdHlwZQAAAAt1c2VyQWRkcmVzcwAAAAZ0eElkNTgJAAS5AAAAAgkABEwAAAACAgAAABElcyVzJXMlc19faGlzdG9yeQkABEwAAAACBQAAAAR0eXBlCQAETAAAAAIFAAAAC3VzZXJBZGRyZXNzCQAETAAAAAIFAAAABnR4SWQ1OAUAAAADbmlsBQAAAANTRVABAAAAD3JlYWRDb25maWdBcnJheQAAAAAJAAS1AAAAAgkBAAAAD2dldFN0cmluZ09yRmFpbAAAAAEJAQAAAAlrZXlDb25maWcAAAAABQAAAANTRVABAAAAD3JlYWRUb3RhbHNBcnJheQAAAAAJAAS1AAAAAgkBAAAAD2dldFN0cmluZ09yRmFpbAAAAAEJAQAAAAlrZXlUb3RhbHMAAAAABQAAAANTRVABAAAAC1RvdGFsc0VudHJ5AAAABAAAAANrZXkAAAAJb3JpZ0FycmF5AAAACmNsYWltZWRBbXQAAAAUbmV3TGFzdENsYWltZWRIZWlnaHQEAAAAEnRvdGFsQ2xhaW1lZEFtb3VudAkBAAAADXBhcnNlSW50VmFsdWUAAAABCQABkQAAAAIFAAAACW9yaWdBcnJheQUAAAAbSWR4VG90YWxzVG90YWxDbGFpbWVkQW1vdW50BAAAAA9yZW1haW5pbmdBbW91bnQJAQAAAA1wYXJzZUludFZhbHVlAAAAAQkAAZEAAAACBQAAAAlvcmlnQXJyYXkFAAAAGElkeFRvdGFsc1JlbWFpbmluZ0Ftb3VudAQAAAARbGFzdENsYWltZWRIZWlnaHQJAQAAAA1wYXJzZUludFZhbHVlAAAAAQkAAZEAAAACBQAAAAlvcmlnQXJyYXkFAAAAGklkeFRvdGFsc0xhc3RDbGFpbWVkSGVpZ2h0BAAAABVuZXdUb3RhbENsYWltZWRBbW91bnQJAABkAAAAAgUAAAASdG90YWxDbGFpbWVkQW1vdW50BQAAAApjbGFpbWVkQW10BAAAABJuZXdSZW1haW5pbmdBbW91bnQJAABlAAAAAgUAAAAPcmVtYWluaW5nQW1vdW50BQAAAApjbGFpbWVkQW10AwkAAGYAAAACAAAAAAAAAAAABQAAABJuZXdSZW1haW5pbmdBbW91bnQJAAACAAAAAQIAAAAMaW52YWxpZCBtYXRoCQEAAAALU3RyaW5nRW50cnkAAAACBQAAAANrZXkJAQAAABJmb3JtYXRUb3RhbHNTdHJpbmcAAAADCQABpAAAAAEFAAAAFW5ld1RvdGFsQ2xhaW1lZEFtb3VudAkAAaQAAAABBQAAABJuZXdSZW1haW5pbmdBbW91bnQJAAGkAAAAAQUAAAAUbmV3TGFzdENsYWltZWRIZWlnaHQBAAAAGkNsYWltT3BlcmF0aW9uSGlzdG9yeUVudHJ5AAAABgAAAAt1c2VyQWRkcmVzcwAAABJjbGFpbWVkQXNzZXRBbW91bnQAAAAOY2xhaW1pbmdCbG9ja3MAAAAVZmlyc3RDYWxjdWxhdGlvbkJsb2NrAAAAFGxhc3RDYWxjdWxhdGlvbkJsb2NrAAAABHR4SWQJAQAAAAtTdHJpbmdFbnRyeQAAAAIJAQAAABlrZXlPcGVyYXRpb25IaXN0b3J5UmVjb3JkAAAAAwIAAAAFY2xhaW0FAAAAC3VzZXJBZGRyZXNzCQACWAAAAAEFAAAABHR4SWQJAQAAABNmb3JtYXRIaXN0b3J5UmVjb3JkAAAABAUAAAASY2xhaW1lZEFzc2V0QW1vdW50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cmluZ0VudHJ5AAAAAgkBAAAACWtleUNvbmZpZwAAAAAJAQAAAAxmb3JtYXRDb25maWcAAAAGBQAAAA9jbGFpbVN0YXJ0QmxvY2sFAAAAE3Zlc3RpbmdQZXJpb2RCbG9ja3MFAAAADmNsYWltQXNzZXRJZDU4BQAAAA5jbGFpbUFzc2V0TXVsdAkABCUAAAABBQAAABhiZW5lZmljaWFyeUFkZHJlc3NQYXJzZWQFAAAAEGNsYWltQXNzZXRBbW91bnQJAARMAAAAAgkBAAAAC1N0cmluZ0VudHJ5AAAAAgkBAAAACWtleVRvdGFscwAAAAAJAQAAABJmb3JtYXRUb3RhbHNTdHJpbmcAAAADAgAAAAEwCQABpAAAAAEFAAAAEGNsYWltQXNzZXRBbW91bnQCAAAAATAFAAAAA25pbAAAAAFpAQAAAAVjbGFpbQAAAAAEAAAACGNmZ0FycmF5CQEAAAAPcmVhZENvbmZpZ0FycmF5AAAAAAQAAAATY2ZnQ2xhaW1TdGFydEhlaWdodAkBAAAADXBhcnNlSW50VmFsdWUAAAABCQABkQAAAAIFAAAACGNmZ0FycmF5BQAAABVJZHhDZmdDbGFpbVN0YXJ0QmxvY2sEAAAAEGNmZ0NsYWltRHVyYXRpb24JAQAAAA1wYXJzZUludFZhbHVlAAAAAQkAAZEAAAACBQAAAAhjZmdBcnJheQUAAAAYSWR4Q2ZnQ2xhaW1WZXN0aW5nUGVyaW9kBAAAAAtjZmdDbGFpbUVuZAkAAGQAAAACBQAAABNjZmdDbGFpbVN0YXJ0SGVpZ2h0BQAAABBjZmdDbGFpbUR1cmF0aW9uBAAAABFjZmdDbGFpbUFzc2V0SWQ1OAkAAZEAAAACBQAAAAhjZmdBcnJheQUAAAASSWR4Q2ZnQ2xhaW1Bc3NldElkBAAAABJjZmdDbGFpbUFzc2V0T3duZXIJAAGRAAAAAgUAAAAIY2ZnQXJyYXkFAAAAFUlkeENmZ0NsYWltQXNzZXRPd25lcgQAAAAYY2ZnQ2xhaW1Bc3NldFRvdGFsQW1vdW50CQEAAAANcGFyc2VJbnRWYWx1ZQAAAAEJAAGRAAAAAgUAAAAIY2ZnQXJyYXkFAAAAG0lkeENmZ0NsYWltQXNzZXRUb3RhbEFtb3VudAQAAAALdXNlckFkZHJlc3MIBQAAAAFpAAAABmNhbGxlcgQAAAANdXNlckFkZHJlc3M1OAkABCUAAAABBQAAAAt1c2VyQWRkcmVzcwQAAAAPb3JpZ1RvdGFsc0FycmF5CQEAAAAPcmVhZFRvdGFsc0FycmF5AAAAAAQAAAASdG90YWxDbGFpbWVkQW1vdW50CQEAAAANcGFyc2VJbnRWYWx1ZQAAAAEJAAGRAAAAAgUAAAAPb3JpZ1RvdGFsc0FycmF5BQAAABtJZHhUb3RhbHNUb3RhbENsYWltZWRBbW91bnQEAAAAFHRvdGFsUmVtYWluaW5nQW1vdW50CQEAAAANcGFyc2VJbnRWYWx1ZQAAAAEJAAGRAAAAAgUAAAAPb3JpZ1RvdGFsc0FycmF5BQAAABhJZHhUb3RhbHNSZW1haW5pbmdBbW91bnQEAAAAEWxhc3RDbGFpbWVkSGVpZ2h0CQEAAAANcGFyc2VJbnRWYWx1ZQAAAAEJAAGRAAAAAgUAAAAPb3JpZ1RvdGFsc0FycmF5BQAAABpJZHhUb3RhbHNMYXN0Q2xhaW1lZEhlaWdodAMJAQAAAAIhPQAAAAIFAAAADXVzZXJBZGRyZXNzNTgFAAAAEmNmZ0NsYWltQXNzZXRPd25lcgkAAAIAAAABAgAAABJwZXJtaXNzaW9ucyBkZW5pZWQDCQAAZgAAAAIFAAAAE2NmZ0NsYWltU3RhcnRIZWlnaHQFAAAABmhlaWdodAkAAAIAAAABCQABLAAAAAICAAAAGFdhaXQgY2xhaW0gc3RhcnQgYmxvY2s6IAkAAaQAAAABBQAAABNjZmdDbGFpbVN0YXJ0SGVpZ2h0BAAAABNsYXN0Q2FsdWxhdGlvbkJsb2NrAwkAAGYAAAACBQAAAAZoZWlnaHQFAAAAC2NmZ0NsYWltRW5kBQAAAAtjZmdDbGFpbUVuZAUAAAAGaGVpZ2h0BAAAABRmaXJzdENhbHVsYXRpb25CbG9jawMJAAAAAAAAAgUAAAARbGFzdENsYWltZWRIZWlnaHQAAAAAAAAAAAAFAAAAE2NmZ0NsYWltU3RhcnRIZWlnaHQFAAAAEWxhc3RDbGFpbWVkSGVpZ2h0BAAAAA5jbGFpbWluZ0Jsb2NrcwkAAGUAAAACBQAAABNsYXN0Q2FsdWxhdGlvbkJsb2NrBQAAABRmaXJzdENhbHVsYXRpb25CbG9jawQAAAATY2xhaW1pbmdBc3NldEFtb3VudAkAAGsAAAADBQAAABhjZmdDbGFpbUFzc2V0VG90YWxBbW91bnQFAAAADmNsYWltaW5nQmxvY2tzBQAAABBjZmdDbGFpbUR1cmF0aW9uCQAETAAAAAIJAQAAAA5TY3JpcHRUcmFuc2ZlcgAAAAMFAAAAC3VzZXJBZGRyZXNzBQAAABNjbGFpbWluZ0Fzc2V0QW1vdW50CQACWQAAAAEFAAAAEWNmZ0NsYWltQXNzZXRJZDU4CQAETAAAAAIJAQAAAAtUb3RhbHNFbnRyeQAAAAQJAQAAAAlrZXlUb3RhbHMAAAAACQEAAAAPcmVhZFRvdGFsc0FycmF5AAAAAAUAAAATY2xhaW1pbmdBc3NldEFtb3VudAUAAAATbGFzdENhbHVsYXRpb25CbG9jawkABEwAAAACCQEAAAAaQ2xhaW1PcGVyYXRpb25IaXN0b3J5RW50cnkAAAAGBQAAAA11c2VyQWRkcmVzczU4BQAAABNjbGFpbWluZ0Fzc2V0QW1vdW50BQAAAA5jbGFpbWluZ0Jsb2NrcwUAAAAUZmlyc3RDYWx1bGF0aW9uQmxvY2sFAAAAE2xhc3RDYWx1bGF0aW9uQmxvY2sIBQAAAAFpAAAADXRyYW5zYWN0aW9uSWQFAAAAA25pbAAAAAFpAQAAABZ3aXRoZHJhd1JlZmVycmFsUmV3YXJkAAAAAQAAAAh3eEFtb3VudAQAAAAXcmVmZXJyYWxDb250cmFjdEFkZHJlc3MJAQAAAAV2YWx1ZQAAAAEJAAQiAAAAAQUAAAALa2V5UmVmZXJyYWwEAAAADG11c3RSZWZlcnJhbAMJAAAAAAAAAgkABCUAAAABCAUAAAABaQAAAAZjYWxsZXIFAAAAF3JlZmVycmFsQ29udHJhY3RBZGRyZXNzBgkBAAAACHRocm93RXJyAAAAAQIAAAARcGVybWlzc2lvbiBkZW5pZWQDCQAAAAAAAAIFAAAADG11c3RSZWZlcnJhbAUAAAAMbXVzdFJlZmVycmFsBAAAAAl3eEFzc2V0SWQJAAJZAAAAAQkBAAAABXZhbHVlAAAAAQkABCIAAAABBQAAAAxrZXlXeEFzc2V0SWQJAAUUAAAAAgkABEwAAAACCQEAAAAOU2NyaXB0VHJhbnNmZXIAAAADCAUAAAABaQAAAAZjYWxsZXIFAAAACHd4QW1vdW50BQAAAAl3eEFzc2V0SWQJAARMAAAAAgkBAAAAGkNsYWltT3BlcmF0aW9uSGlzdG9yeUVudHJ5AAAABgUAAAAXcmVmZXJyYWxDb250cmFjdEFkZHJlc3MFAAAACHd4QW1vdW50AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAUAAAABaQAAAA10cmFuc2FjdGlvbklkBQAAAANuaWwFAAAABHVuaXQJAAACAAAAAQIAAAAkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuAAAAAWkBAAAACnNldE1hbmFnZXIAAAABAAAAF3BlbmRpbmdNYW5hZ2VyUHVibGljS2V5BAAAAAtjaGVja0NhbGxlcgkBAAAAC211c3RNYW5hZ2VyAAAAAQUAAAABaQMJAAAAAAAAAgUAAAALY2hlY2tDYWxsZXIFAAAAC2NoZWNrQ2FsbGVyBAAAABVjaGVja01hbmFnZXJQdWJsaWNLZXkJAAJZAAAAAQUAAAAXcGVuZGluZ01hbmFnZXJQdWJsaWNLZXkDCQAAAAAAAAIFAAAAFWNoZWNrTWFuYWdlclB1YmxpY0tleQUAAAAVY2hlY2tNYW5hZ2VyUHVibGljS2V5CQAETAAAAAIJAQAAAAtTdHJpbmdFbnRyeQAAAAIJAQAAABprZXlQZW5kaW5nTWFuYWdlclB1YmxpY0tleQAAAAAFAAAAF3BlbmRpbmdNYW5hZ2VyUHVibGljS2V5BQAAAANuaWwJAAACAAAAAQIAAAAkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuCQAAAgAAAAECAAAAJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgAAAAFpAQAAAA5jb25maXJtTWFuYWdlcgAAAAAEAAAAAnBtCQEAAAAdcGVuZGluZ01hbmFnZXJQdWJsaWNLZXlPclVuaXQAAAAABAAAAAVoYXNQTQMJAQAAAAlpc0RlZmluZWQAAAABBQAAAAJwbQYJAQAAAAh0aHJvd0VycgAAAAECAAAAEm5vIHBlbmRpbmcgbWFuYWdlcgMJAAAAAAAAAgUAAAAFaGFzUE0FAAAABWhhc1BNBAAAAAdjaGVja1BNAwkAAAAAAAACCAUAAAABaQAAAA9jYWxsZXJQdWJsaWNLZXkJAQAAAAV2YWx1ZQAAAAEFAAAAAnBtBgkBAAAACHRocm93RXJyAAAAAQIAAAAbeW91IGFyZSBub3QgcGVuZGluZyBtYW5hZ2VyAwkAAAAAAAACBQAAAAdjaGVja1BNBQAAAAdjaGVja1BNCQAETAAAAAIJAQAAAAtTdHJpbmdFbnRyeQAAAAIJAQAAABNrZXlNYW5hZ2VyUHVibGljS2V5AAAAAAkAAlgAAAABCQEAAAAFdmFsdWUAAAABBQAAAAJwbQkABEwAAAACCQEAAAALRGVsZXRlRW50cnkAAAABCQEAAAAaa2V5UGVuZGluZ01hbmFnZXJQdWJsaWNLZXkAAAAABQAAAANuaWwJAAACAAAAAQIAAAAkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuCQAAAgAAAAECAAAAJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgAAAAEAAAACdHgBAAAABnZlcmlmeQAAAAAEAAAAD3RhcmdldFB1YmxpY0tleQQAAAAHJG1hdGNoMAkBAAAAFm1hbmFnZXJQdWJsaWNLZXlPclVuaXQAAAAAAwkAAAEAAAACBQAAAAckbWF0Y2gwAgAAAApCeXRlVmVjdG9yBAAAAAJwawUAAAAHJG1hdGNoMAUAAAACcGsDCQAAAQAAAAIFAAAAByRtYXRjaDACAAAABFVuaXQIBQAAAAJ0eAAAAA9zZW5kZXJQdWJsaWNLZXkJAAACAAAAAQIAAAALTWF0Y2ggZXJyb3IJAAH0AAAAAwgFAAAAAnR4AAAACWJvZHlCeXRlcwkAAZEAAAACCAUAAAACdHgAAAAGcHJvb2ZzAAAAAAAAAAAABQAAAA90YXJnZXRQdWJsaWNLZXniCOAf", "chainId": 84, "height": 2179635, "applicationStatus": "succeeded", "spentComplexity": 0 } View: original | compacted Prev: 28f1RrgBuqLsz9u1rDZ5kNxqHnu5jbzNfQkJ1wczcwD2 Next: FuAM13VtSqt6ZEoxLHxtWqk71LZR751juqjjTyXX9KSb Diff:
OldNewDifferences
175175
176176 @Callable(i)
177177 func withdrawReferralReward (wxAmount) = {
178- let mustReferral = if ((toString(i.caller) == value(getString(keyReferral))))
178+ let referralContractAddress = value(getString(keyReferral))
179+ let mustReferral = if ((toString(i.caller) == referralContractAddress))
179180 then true
180181 else throwErr("permission denied")
181182 if ((mustReferral == mustReferral))
182183 then {
183184 let wxAssetId = fromBase58String(value(getString(keyWxAssetId)))
184- $Tuple2([ScriptTransfer(i.caller, wxAmount, wxAssetId)], unit)
185+ $Tuple2([ScriptTransfer(i.caller, wxAmount, wxAssetId), ClaimOperationHistoryEntry(referralContractAddress, wxAmount, 0, 0, 0, i.transactionId)], unit)
185186 }
186187 else throw("Strict value is not equal to itself.")
187188 }
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
5757
5858 func keyOperationHistoryRecord (type,userAddress,txId58) = makeString(["%s%s%s%s__history", type, userAddress, txId58], SEP)
5959
6060
6161 func readConfigArray () = split(getStringOrFail(keyConfig()), SEP)
6262
6363
6464 func readTotalsArray () = split(getStringOrFail(keyTotals()), SEP)
6565
6666
6767 func TotalsEntry (key,origArray,claimedAmt,newLastClaimedHeight) = {
6868 let totalClaimedAmount = parseIntValue(origArray[IdxTotalsTotalClaimedAmount])
6969 let remainingAmount = parseIntValue(origArray[IdxTotalsRemainingAmount])
7070 let lastClaimedHeight = parseIntValue(origArray[IdxTotalsLastClaimedHeight])
7171 let newTotalClaimedAmount = (totalClaimedAmount + claimedAmt)
7272 let newRemainingAmount = (remainingAmount - claimedAmt)
7373 if ((0 > newRemainingAmount))
7474 then throw("invalid math")
7575 else StringEntry(key, formatTotalsString(toString(newTotalClaimedAmount), toString(newRemainingAmount), toString(newLastClaimedHeight)))
7676 }
7777
7878
7979 func ClaimOperationHistoryEntry (userAddress,claimedAssetAmount,claimingBlocks,firstCalculationBlock,lastCalculationBlock,txId) = StringEntry(keyOperationHistoryRecord("claim", userAddress, toBase58String(txId)), formatHistoryRecord(claimedAssetAmount, claimingBlocks, firstCalculationBlock, lastCalculationBlock))
8080
8181
8282 func managerPublicKeyOrUnit () = match getString(keyManagerPublicKey()) {
8383 case s: String =>
8484 fromBase58String(s)
8585 case _: Unit =>
8686 unit
8787 case _ =>
8888 throw("Match error")
8989 }
9090
9191
9292 func pendingManagerPublicKeyOrUnit () = match getString(keyPendingManagerPublicKey()) {
9393 case s: String =>
9494 fromBase58String(s)
9595 case _: Unit =>
9696 unit
9797 case _ =>
9898 throw("Match error")
9999 }
100100
101101
102102 func mustManager (i) = {
103103 let pd = throwErr("permission denied")
104104 match managerPublicKeyOrUnit() {
105105 case pk: ByteVector =>
106106 if ((i.callerPublicKey == pk))
107107 then true
108108 else pd
109109 case _: Unit =>
110110 if ((i.caller == this))
111111 then true
112112 else pd
113113 case _ =>
114114 throw("Match error")
115115 }
116116 }
117117
118118
119119 @Callable(i)
120120 func constructor (claimStartBlock,vestingPeriodBlocks,beneficiaryAddress) = {
121121 let vestingEnd = (claimStartBlock + vestingPeriodBlocks)
122122 if (isDefined(getString(keyConfig())))
123123 then throw("already initialized")
124124 else if ((size(i.payments) != 1))
125125 then throw("exactly 1 payment must be attached")
126126 else if ((i.callerPublicKey != base58'2Cbd8ozG7A1RyRNC3nNnZgHu7Ru4K3JCfpyPkhqr9zxq'))
127127 then throw("not authorized")
128128 else {
129129 let beneficiaryAddressParsed = valueOrErrorMessage(addressFromString(beneficiaryAddress), "Invalid beneficiarAddress passed")
130130 let pmt = value(i.payments[0])
131131 let claimAssetId = value(pmt.assetId)
132132 let claimAssetInfo = valueOrErrorMessage(assetInfo(claimAssetId), "fail to load ido asset info")
133133 let claimAssetId58 = toBase58String(claimAssetId)
134134 let claimAssetMult = pow(10, 0, claimAssetInfo.decimals, 0, 0, DOWN)
135135 let claimAssetAmount = pmt.amount
136136 [StringEntry(keyConfig(), formatConfig(claimStartBlock, vestingPeriodBlocks, claimAssetId58, claimAssetMult, toString(beneficiaryAddressParsed), claimAssetAmount)), StringEntry(keyTotals(), formatTotalsString("0", toString(claimAssetAmount), "0"))]
137137 }
138138 }
139139
140140
141141
142142 @Callable(i)
143143 func claim () = {
144144 let cfgArray = readConfigArray()
145145 let cfgClaimStartHeight = parseIntValue(cfgArray[IdxCfgClaimStartBlock])
146146 let cfgClaimDuration = parseIntValue(cfgArray[IdxCfgClaimVestingPeriod])
147147 let cfgClaimEnd = (cfgClaimStartHeight + cfgClaimDuration)
148148 let cfgClaimAssetId58 = cfgArray[IdxCfgClaimAssetId]
149149 let cfgClaimAssetOwner = cfgArray[IdxCfgClaimAssetOwner]
150150 let cfgClaimAssetTotalAmount = parseIntValue(cfgArray[IdxCfgClaimAssetTotalAmount])
151151 let userAddress = i.caller
152152 let userAddress58 = toString(userAddress)
153153 let origTotalsArray = readTotalsArray()
154154 let totalClaimedAmount = parseIntValue(origTotalsArray[IdxTotalsTotalClaimedAmount])
155155 let totalRemainingAmount = parseIntValue(origTotalsArray[IdxTotalsRemainingAmount])
156156 let lastClaimedHeight = parseIntValue(origTotalsArray[IdxTotalsLastClaimedHeight])
157157 if ((userAddress58 != cfgClaimAssetOwner))
158158 then throw("permissions denied")
159159 else if ((cfgClaimStartHeight > height))
160160 then throw(("Wait claim start block: " + toString(cfgClaimStartHeight)))
161161 else {
162162 let lastCalulationBlock = if ((height > cfgClaimEnd))
163163 then cfgClaimEnd
164164 else height
165165 let firstCalulationBlock = if ((lastClaimedHeight == 0))
166166 then cfgClaimStartHeight
167167 else lastClaimedHeight
168168 let claimingBlocks = (lastCalulationBlock - firstCalulationBlock)
169169 let claimingAssetAmount = fraction(cfgClaimAssetTotalAmount, claimingBlocks, cfgClaimDuration)
170170 [ScriptTransfer(userAddress, claimingAssetAmount, fromBase58String(cfgClaimAssetId58)), TotalsEntry(keyTotals(), readTotalsArray(), claimingAssetAmount, lastCalulationBlock), ClaimOperationHistoryEntry(userAddress58, claimingAssetAmount, claimingBlocks, firstCalulationBlock, lastCalulationBlock, i.transactionId)]
171171 }
172172 }
173173
174174
175175
176176 @Callable(i)
177177 func withdrawReferralReward (wxAmount) = {
178- let mustReferral = if ((toString(i.caller) == value(getString(keyReferral))))
178+ let referralContractAddress = value(getString(keyReferral))
179+ let mustReferral = if ((toString(i.caller) == referralContractAddress))
179180 then true
180181 else throwErr("permission denied")
181182 if ((mustReferral == mustReferral))
182183 then {
183184 let wxAssetId = fromBase58String(value(getString(keyWxAssetId)))
184- $Tuple2([ScriptTransfer(i.caller, wxAmount, wxAssetId)], unit)
185+ $Tuple2([ScriptTransfer(i.caller, wxAmount, wxAssetId), ClaimOperationHistoryEntry(referralContractAddress, wxAmount, 0, 0, 0, i.transactionId)], unit)
185186 }
186187 else throw("Strict value is not equal to itself.")
187188 }
188189
189190
190191
191192 @Callable(i)
192193 func setManager (pendingManagerPublicKey) = {
193194 let checkCaller = mustManager(i)
194195 if ((checkCaller == checkCaller))
195196 then {
196197 let checkManagerPublicKey = fromBase58String(pendingManagerPublicKey)
197198 if ((checkManagerPublicKey == checkManagerPublicKey))
198199 then [StringEntry(keyPendingManagerPublicKey(), pendingManagerPublicKey)]
199200 else throw("Strict value is not equal to itself.")
200201 }
201202 else throw("Strict value is not equal to itself.")
202203 }
203204
204205
205206
206207 @Callable(i)
207208 func confirmManager () = {
208209 let pm = pendingManagerPublicKeyOrUnit()
209210 let hasPM = if (isDefined(pm))
210211 then true
211212 else throwErr("no pending manager")
212213 if ((hasPM == hasPM))
213214 then {
214215 let checkPM = if ((i.callerPublicKey == value(pm)))
215216 then true
216217 else throwErr("you are not pending manager")
217218 if ((checkPM == checkPM))
218219 then [StringEntry(keyManagerPublicKey(), toBase58String(value(pm))), DeleteEntry(keyPendingManagerPublicKey())]
219220 else throw("Strict value is not equal to itself.")
220221 }
221222 else throw("Strict value is not equal to itself.")
222223 }
223224
224225
225226 @Verifier(tx)
226227 func verify () = {
227228 let targetPublicKey = match managerPublicKeyOrUnit() {
228229 case pk: ByteVector =>
229230 pk
230231 case _: Unit =>
231232 tx.senderPublicKey
232233 case _ =>
233234 throw("Match error")
234235 }
235236 sigVerify(tx.bodyBytes, tx.proofs[0], targetPublicKey)
236237 }
237238

github/deemru/w8io/169f3d6 
50.05 ms