tx · 4RGPxqm36XZGUBTe7ueSDai7vRgmAWJAoZ5Bkhqik1qW

3Mynj79w9PikhwUwMwFPk2vifkm8zkDt2Zt:  -0.01000000 Waves

2021.11.25 18:24 [1806744] smart account 3Mynj79w9PikhwUwMwFPk2vifkm8zkDt2Zt > SELF 0.00000000 Waves

{ "type": 13, "id": "4RGPxqm36XZGUBTe7ueSDai7vRgmAWJAoZ5Bkhqik1qW", "fee": 1000000, "feeAssetId": null, "timestamp": 1637853887740, "version": 1, "sender": "3Mynj79w9PikhwUwMwFPk2vifkm8zkDt2Zt", "senderPublicKey": "5195SwZ4ifX6bBstZ6tN31kEQFVHaKpFYLc1GCa3Myrh", "proofs": [ "5WrYpV6itCMKdAGGtESaQCnAptotB1UoutDjy4uuNAG1P7upBQPYSX2R72U4qz489AWsSXht7nuKWBouCVZFZXic" ], "script": "base64:AAIFAAAAAAAAABsIAhIJCgcBAQEBAQgBEgASBAoCCAgSBAoCCAgAAAAqAQAAAA9nZXRTdHJpbmdPckZhaWwAAAABAAAAA2tleQkBAAAAE3ZhbHVlT3JFcnJvck1lc3NhZ2UAAAACCQAEIgAAAAEFAAAAA2tleQkAASwAAAACCQABLAAAAAICAAAAD21hbmRhdG9yeSB0aGlzLgUAAAADa2V5AgAAAA8gaXMgbm90IGRlZmluZWQAAAAAA1NFUAIAAAACX18AAAAACEJVRlNDQUxFCQABNgAAAAEADeC2s6dkAAABAAAAHWNvbnZlcnRQcmljZUFzc2V0SW50b0lkb0Fzc2V0AAAABQAAABBwcmljZUFzc2V0QW1vdW50AAAADnByaWNlQXNzZXRNVUxUAAAABXByaWNlAAAACXByaWNlTVVMVAAAAAxpZG9Bc3NldE1VTFQEAAAAD2JQcmljZUFzc2V0TVVMVAkAATYAAAABBQAAAA5wcmljZUFzc2V0TVVMVAQAAAANYklkb0Fzc2V0TVVMVAkAATYAAAABBQAAAAxpZG9Bc3NldE1VTFQEAAAADmJQcmljZUFzc2V0QlVGCQABPAAAAAMJAAE2AAAAAQUAAAAQcHJpY2VBc3NldEFtb3VudAUAAAAIQlVGU0NBTEUFAAAAD2JQcmljZUFzc2V0TVVMVAQAAAAPYkFtb3VudEFzc2V0QlVGCQABPAAAAAMFAAAADmJQcmljZUFzc2V0QlVGCQABNgAAAAEFAAAACXByaWNlTVVMVAkAATYAAAABBQAAAAVwcmljZQkAAaAAAAABCQABPAAAAAMFAAAAD2JBbW91bnRBc3NldEJVRgkAATYAAAABBQAAAAxpZG9Bc3NldE1VTFQFAAAACEJVRlNDQUxFAAAAAA5JZHhDZmdJZG9TdGFydAAAAAAAAAAAAQAAAAARSWR4Q2ZnSWRvRHVyYXRpb24AAAAAAAAAAAIAAAAAEElkeENmZ0NsYWltU3RhcnQAAAAAAAAAAAMAAAAAE0lkeENmZ0NsYWltRHVyYXRpb24AAAAAAAAAAAQAAAAAC0lkeENmZ1ByaWNlAAAAAAAAAAAFAAAAAA9JZHhDZmdQcmljZU11bHQAAAAAAAAAAAYAAAAAEElkeENmZ0lkb0Fzc2V0SWQAAAAAAAAAAAcAAAAAEklkeENmZ0lkb0Fzc2V0TXVsdAAAAAAAAAAACAAAAAASSWR4Q2ZnUHJpY2VBc3NldElkAAAAAAAAAAAJAAAAABRJZHhDZmdQcmljZUFzc2V0TXVsdAAAAAAAAAAACgAAAAAVSWR4Q2ZnTWluSW52ZXN0QW1vdW50AAAAAAAAAAALAQAAAA1mcm9tYXRDb25maWdTAAAADAAAAAhpZG9TdGFydAAAAAtpZG9EdXJhdGlvbgAAAApjbGFpbVN0YXJ0AAAADWNsYWltRHVyYXRpb24AAAAFcHJpY2UAAAAJcHJpY2VNdWx0AAAADGlkb0Fzc2V0SWQ1OAAAAAxpZG9Bc3NldE11bHQAAAAOcHJpY2VBc3NldElkNTgAAAAOcHJpY2VBc3NldE11bHQAAAAPbWluSW52ZXN0QW1vdW50AAAAE3RvdGFsSWRvQXNzZXRUb1NlbGwJAAS5AAAAAgkABEwAAAACAgAAABglZCVkJWQlZCVkJWQlcyVkJXMlZCVkJWQJAARMAAAAAgUAAAAIaWRvU3RhcnQJAARMAAAAAgUAAAALaWRvRHVyYXRpb24JAARMAAAAAgUAAAAKY2xhaW1TdGFydAkABEwAAAACBQAAAA1jbGFpbUR1cmF0aW9uCQAETAAAAAIFAAAABXByaWNlCQAETAAAAAIFAAAACXByaWNlTXVsdAkABEwAAAACBQAAAAxpZG9Bc3NldElkNTgJAARMAAAAAgUAAAAMaWRvQXNzZXRNdWx0CQAETAAAAAIFAAAADnByaWNlQXNzZXRJZDU4CQAETAAAAAIFAAAADnByaWNlQXNzZXRNdWx0CQAETAAAAAIFAAAAD21pbkludmVzdEFtb3VudAkABEwAAAACBQAAABN0b3RhbElkb0Fzc2V0VG9TZWxsBQAAAANuaWwFAAAAA1NFUAEAAAAMZnJvbWF0Q29uZmlnAAAADAAAAAhpZG9TdGFydAAAAAtpZG9EdXJhdGlvbgAAAApjbGFpbVN0YXJ0AAAADWNsYWltRHVyYXRpb24AAAAFcHJpY2UAAAAJcHJpY2VNdWx0AAAADGlkb0Fzc2V0SWQ1OAAAAAxpZG9Bc3NldE11bHQAAAAOcHJpY2VBc3NldElkNTgAAAAOcHJpY2VBc3NldE11bHQAAAAPbWluSW52ZXN0QW1vdW50AAAAE3RvdGFsSWRvQXNzZXRUb1NlbGwJAQAAAA1mcm9tYXRDb25maWdTAAAADAkAAaQAAAABBQAAAAhpZG9TdGFydAkAAaQAAAABBQAAAAtpZG9EdXJhdGlvbgkAAaQAAAABBQAAAApjbGFpbVN0YXJ0CQABpAAAAAEFAAAADWNsYWltRHVyYXRpb24JAAGkAAAAAQUAAAAFcHJpY2UJAAGkAAAAAQUAAAAJcHJpY2VNdWx0BQAAAAxpZG9Bc3NldElkNTgJAAGkAAAAAQUAAAAMaWRvQXNzZXRNdWx0BQAAAA5wcmljZUFzc2V0SWQ1OAkAAaQAAAABBQAAAA5wcmljZUFzc2V0TXVsdAkAAaQAAAABBQAAAA9taW5JbnZlc3RBbW91bnQJAAGkAAAAAQUAAAATdG90YWxJZG9Bc3NldFRvU2VsbAAAAAARSWR4SW52VG90YWxBbW91bnQAAAAAAAAAAAEAAAAAFUlkeEludlJlbWFpbmluZ0Ftb3VudAAAAAAAAAAAAgAAAAAdSWR4SW52Q2xhaW1lZFByaWNlQXNzZXRBbW91bnQAAAAAAAAAAAMAAAAAG0lkeEludkNsYWltZWRJZG9Bc3NldEFtb3VudAAAAAAAAAAABAAAAAAXSWR4SW52TGFzdENsYWltZWRIZWlnaHQAAAAAAAAAAAUBAAAAD2Zvcm1hdEludmVzdG9yUwAAAAUAAAALdG90YWxBbW91bnQAAAAPcmVtYWluaW5nQW1vdW50AAAAF2NsYWltZWRQcmljZUFzc2V0QW1vdW50AAAAFWNsYWltZWRJZG9Bc3NldEFtb3VudAAAABFsYXN0Q2xhaW1lZEhlaWdodAkABLkAAAACCQAETAAAAAICAAAACiVkJWQlZCVkJWQJAARMAAAAAgUAAAALdG90YWxBbW91bnQJAARMAAAAAgUAAAAPcmVtYWluaW5nQW1vdW50CQAETAAAAAIFAAAAF2NsYWltZWRQcmljZUFzc2V0QW1vdW50CQAETAAAAAIFAAAAFWNsYWltZWRJZG9Bc3NldEFtb3VudAkABEwAAAACBQAAABFsYXN0Q2xhaW1lZEhlaWdodAUAAAADbmlsBQAAAANTRVABAAAADmZvcm1hdEludmVzdG9yAAAABQAAAAt0b3RhbEFtb3VudAAAAA9yZW1haW5pbmdBbW91bnQAAAAXY2xhaW1lZFByaWNlQXNzZXRBbW91bnQAAAAVY2xhaW1lZElkb0Fzc2V0QW1vdW50AAAAEWxhc3RDbGFpbWVkSGVpZ2h0CQEAAAAPZm9ybWF0SW52ZXN0b3JTAAAABQkAAaQAAAABBQAAAAt0b3RhbEFtb3VudAkAAaQAAAABBQAAAA9yZW1haW5pbmdBbW91bnQJAAGkAAAAAQUAAAAXY2xhaW1lZFByaWNlQXNzZXRBbW91bnQJAAGkAAAAAQUAAAAVY2xhaW1lZElkb0Fzc2V0QW1vdW50CQABpAAAAAEFAAAAEWxhc3RDbGFpbWVkSGVpZ2h0AQAAABNmb3JtYXRIaXN0b3J5UmVjb3JkAAAAAgAAABBwcmljZUFzc2V0QW1vdW50AAAADmlkb0Fzc2V0QW1vdW50CQAEuQAAAAIJAARMAAAAAgIAAAAIJWQlZCVkJWQJAARMAAAAAgkAAaQAAAABBQAAAAZoZWlnaHQJAARMAAAAAgkAAaQAAAABCAUAAAAJbGFzdEJsb2NrAAAACXRpbWVzdGFtcAkABEwAAAACCQABpAAAAAEFAAAAEHByaWNlQXNzZXRBbW91bnQJAARMAAAAAgkAAaQAAAABBQAAAA5pZG9Bc3NldEFtb3VudAUAAAADbmlsBQAAAANTRVABAAAACWtleUNvbmZpZwAAAAACAAAACiVzX19jb25maWcBAAAAC2tleUludmVzdG9yAAAAAQAAAAt1c2VyQWRkcmVzcwkAASwAAAACAgAAAAQlc19fBQAAAAt1c2VyQWRkcmVzcwEAAAAJa2V5VG90YWxzAAAAAAIAAAAKJXNfX3RvdGFscwEAAAAZa2V5T3BlcmF0aW9uSGlzdG9yeVJlY29yZAAAAAMAAAAEdHlwZQAAAAt1c2VyQWRkcmVzcwAAAAZ0eElkNTgJAAS5AAAAAgkABEwAAAACAgAAABElcyVzJXMlc19faGlzdG9yeQkABEwAAAACBQAAAAR0eXBlCQAETAAAAAIFAAAAC3VzZXJBZGRyZXNzCQAETAAAAAIFAAAABnR4SWQ1OAUAAAADbmlsBQAAAANTRVABAAAAD3JlYWRDb25maWdBcnJheQAAAAAJAAS1AAAAAgkBAAAAD2dldFN0cmluZ09yRmFpbAAAAAEJAQAAAAlrZXlDb25maWcAAAAABQAAAANTRVABAAAAI3JlYWRUb3RhbHNBcnJheU9yRGVmYXVsdEJ5Q3VzdG9tS2V5AAAAAQAAAAljdXN0b21LZXkJAAS1AAAAAgkBAAAAC3ZhbHVlT3JFbHNlAAAAAgkABCIAAAABBQAAAAljdXN0b21LZXkJAQAAAA9mb3JtYXRJbnZlc3RvclMAAAAFAgAAAAEwAgAAAAEwAgAAAAEwAgAAAAEwAgAAAAEwBQAAAANTRVABAAAAGHJlYWRUb3RhbHNBcnJheU9yRGVmYXVsdAAAAAAJAQAAACNyZWFkVG90YWxzQXJyYXlPckRlZmF1bHRCeUN1c3RvbUtleQAAAAEJAQAAAAlrZXlUb3RhbHMAAAAAAQAAABpyZWFkSW52ZXN0b3JBcnJheU9yRGVmYXVsdAAAAAEAAAALdXNlckFkZHJlc3MJAQAAACNyZWFkVG90YWxzQXJyYXlPckRlZmF1bHRCeUN1c3RvbUtleQAAAAEJAQAAAAtrZXlJbnZlc3RvcgAAAAEFAAAAC3VzZXJBZGRyZXNzAQAAABdyZWFkSW52ZXN0b3JBcnJheU9yRmFpbAAAAAEAAAALdXNlckFkZHJlc3MJAAS1AAAAAgkBAAAAD2dldFN0cmluZ09yRmFpbAAAAAEJAQAAAAtrZXlJbnZlc3RvcgAAAAEFAAAAC3VzZXJBZGRyZXNzBQAAAANTRVAAAAAAFUlkeERpZmZUb3RhbEluY3JlbWVudAAAAAAAAAAAAAAAAAAkSWR4RGlmZlJlbWFpbmluZ1ByaWNlQW1vdW50SW5jcmVtZW50AAAAAAAAAAABAAAAACJJZHhEaWZmQ2xhaW1lZFByaWNlQW1vdW50SW5jcmVtZW50AAAAAAAAAAACAAAAACVJZHhEaWZmQ2xhaW1lZElkb0Fzc2V0QW1vdW50SW5jcmVtZW50AAAAAAAAAAADAQAAAAtUb3RhbHNFbnRyeQAAAAQAAAADa2V5AAAACW9yaWdBcnJheQAAAA1pbmNyZW1lbnREaWZmAAAAFG5ld0xhc3RDbGFpbWVkSGVpZ2h0BAAAAAt0b3RhbEFtb3VudAkBAAAADXBhcnNlSW50VmFsdWUAAAABCQABkQAAAAIFAAAACW9yaWdBcnJheQUAAAARSWR4SW52VG90YWxBbW91bnQEAAAAD3JlbWFpbmluZ0Ftb3VudAkBAAAADXBhcnNlSW50VmFsdWUAAAABCQABkQAAAAIFAAAACW9yaWdBcnJheQUAAAAVSWR4SW52UmVtYWluaW5nQW1vdW50BAAAABdjbGFpbWVkUHJpY2VBc3NldEFtb3VudAkBAAAADXBhcnNlSW50VmFsdWUAAAABCQABkQAAAAIFAAAACW9yaWdBcnJheQUAAAAdSWR4SW52Q2xhaW1lZFByaWNlQXNzZXRBbW91bnQEAAAAFWNsYWltZWRJZG9Bc3NldEFtb3VudAkBAAAADXBhcnNlSW50VmFsdWUAAAABCQABkQAAAAIFAAAACW9yaWdBcnJheQUAAAAbSWR4SW52Q2xhaW1lZElkb0Fzc2V0QW1vdW50BAAAABFsYXN0Q2xhaW1lZEhlaWdodAkBAAAADXBhcnNlSW50VmFsdWUAAAABCQABkQAAAAIFAAAACW9yaWdBcnJheQUAAAAXSWR4SW52TGFzdENsYWltZWRIZWlnaHQEAAAADm5ld1RvdGFsQW1vdW50CQAAZAAAAAIFAAAAC3RvdGFsQW1vdW50CQABkQAAAAIFAAAADWluY3JlbWVudERpZmYFAAAAFUlkeERpZmZUb3RhbEluY3JlbWVudAQAAAASbmV3UmVtYWluaW5nQW1vdW50CQAAZAAAAAIFAAAAD3JlbWFpbmluZ0Ftb3VudAkAAZEAAAACBQAAAA1pbmNyZW1lbnREaWZmBQAAACRJZHhEaWZmUmVtYWluaW5nUHJpY2VBbW91bnRJbmNyZW1lbnQEAAAAGm5ld0NsYWltZWRQcmljZUFzc2V0QW1vdW50CQAAZAAAAAIFAAAAF2NsYWltZWRQcmljZUFzc2V0QW1vdW50CQABkQAAAAIFAAAADWluY3JlbWVudERpZmYFAAAAIklkeERpZmZDbGFpbWVkUHJpY2VBbW91bnRJbmNyZW1lbnQEAAAAGG5ld0NsYWltZWRJZG9Bc3NldEFtb3VudAkAAGQAAAACBQAAABVjbGFpbWVkSWRvQXNzZXRBbW91bnQJAAGRAAAAAgUAAAANaW5jcmVtZW50RGlmZgUAAAAlSWR4RGlmZkNsYWltZWRJZG9Bc3NldEFtb3VudEluY3JlbWVudAMJAABmAAAAAgAAAAAAAAAAAAUAAAASbmV3UmVtYWluaW5nQW1vdW50CQAAAgAAAAECAAAADGludmFsaWQgbWF0aAkBAAAAC1N0cmluZ0VudHJ5AAAAAgUAAAADa2V5CQEAAAAOZm9ybWF0SW52ZXN0b3IAAAAFBQAAAA5uZXdUb3RhbEFtb3VudAUAAAASbmV3UmVtYWluaW5nQW1vdW50BQAAABpuZXdDbGFpbWVkUHJpY2VBc3NldEFtb3VudAUAAAAYbmV3Q2xhaW1lZElkb0Fzc2V0QW1vdW50BQAAABRuZXdMYXN0Q2xhaW1lZEhlaWdodAEAAAAbSW52ZXN0T3BlcmF0aW9uSGlzdG9yeUVudHJ5AAAABAAAAAt1c2VyQWRkcmVzcwAAABBwcmljZUFzc2V0QW1vdW50AAAADmlkb0Fzc2V0QW1vdW50AAAABHR4SWQJAQAAAAtTdHJpbmdFbnRyeQAAAAIJAQAAABlrZXlPcGVyYXRpb25IaXN0b3J5UmVjb3JkAAAAAwIAAAAGaW52ZXN0BQAAAAt1c2VyQWRkcmVzcwkAAlgAAAABBQAAAAR0eElkCQEAAAATZm9ybWF0SGlzdG9yeVJlY29yZAAAAAIFAAAAEHByaWNlQXNzZXRBbW91bnQFAAAADmlkb0Fzc2V0QW1vdW50AQAAABpDbGFpbU9wZXJhdGlvbkhpc3RvcnlFbnRyeQAAAAQAAAALdXNlckFkZHJlc3MAAAAQcHJpY2VBc3NldEFtb3VudAAAAA5pZG9Bc3NldEFtb3VudAAAAAR0eElkCQEAAAALU3RyaW5nRW50cnkAAAACCQEAAAAZa2V5T3BlcmF0aW9uSGlzdG9yeVJlY29yZAAAAAMCAAAABWNsYWltBQAAAAt1c2VyQWRkcmVzcwkAAlgAAAABBQAAAAR0eElkCQEAAAATZm9ybWF0SGlzdG9yeVJlY29yZAAAAAIFAAAAEHByaWNlQXNzZXRBbW91bnQFAAAADmlkb0Fzc2V0QW1vdW50AQAAAA1pbnRlcm5hbENsYWltAAAAAwAAABBjbGFpbWVkQXNzZXRJZDU4AAAAC3VzZXJBZGRyZXNzAAAABHR4SWQEAAAACGNmZ0FycmF5CQEAAAAPcmVhZENvbmZpZ0FycmF5AAAAAAQAAAAKY2xhaW1TdGFydAkBAAAADXBhcnNlSW50VmFsdWUAAAABCQABkQAAAAIFAAAACGNmZ0FycmF5BQAAABBJZHhDZmdDbGFpbVN0YXJ0BAAAAA1jbGFpbUR1cmF0aW9uCQEAAAANcGFyc2VJbnRWYWx1ZQAAAAEJAAGRAAAAAgUAAAAIY2ZnQXJyYXkFAAAAE0lkeENmZ0NsYWltRHVyYXRpb24EAAAACGNsYWltRW5kCQAAZAAAAAIFAAAACmNsYWltU3RhcnQFAAAADWNsYWltRHVyYXRpb24EAAAABXByaWNlCQEAAAANcGFyc2VJbnRWYWx1ZQAAAAEJAAGRAAAAAgUAAAAIY2ZnQXJyYXkFAAAAC0lkeENmZ1ByaWNlBAAAAAlwcmljZU11bHQJAQAAAA1wYXJzZUludFZhbHVlAAAAAQkAAZEAAAACBQAAAAhjZmdBcnJheQUAAAAPSWR4Q2ZnUHJpY2VNdWx0BAAAAAxpZG9Bc3NldElkNTgJAAGRAAAAAgUAAAAIY2ZnQXJyYXkFAAAAEElkeENmZ0lkb0Fzc2V0SWQEAAAACmlkb0Fzc2V0SWQJAAJZAAAAAQUAAAAMaWRvQXNzZXRJZDU4BAAAAAxpZG9Bc3NldE11bHQJAQAAAA1wYXJzZUludFZhbHVlAAAAAQkAAZEAAAACBQAAAAhjZmdBcnJheQUAAAASSWR4Q2ZnSWRvQXNzZXRNdWx0BAAAAA5wcmljZUFzc2V0SWQ1OAkAAZEAAAACBQAAAAhjZmdBcnJheQUAAAASSWR4Q2ZnUHJpY2VBc3NldElkBAAAAAxwcmljZUFzc2V0SWQJAAJZAAAAAQUAAAAOcHJpY2VBc3NldElkNTgEAAAADnByaWNlQXNzZXRNdWx0CQEAAAANcGFyc2VJbnRWYWx1ZQAAAAEJAAGRAAAAAgUAAAAIY2ZnQXJyYXkFAAAAFElkeENmZ1ByaWNlQXNzZXRNdWx0BAAAAA11c2VyQWRkcmVzczU4CQAEJQAAAAEFAAAAC3VzZXJBZGRyZXNzBAAAAA9vcmlnSW52ZXN0QXJyYXkJAQAAABdyZWFkSW52ZXN0b3JBcnJheU9yRmFpbAAAAAEFAAAADXVzZXJBZGRyZXNzNTgEAAAAEWludmVzdFRvdGFsQW1vdW50CQEAAAANcGFyc2VJbnRWYWx1ZQAAAAEJAAGRAAAAAgUAAAAPb3JpZ0ludmVzdEFycmF5BQAAABFJZHhJbnZUb3RhbEFtb3VudAQAAAAXaW52ZXN0TGFzdENsYWltZWRIZWlnaHQJAQAAAA1wYXJzZUludFZhbHVlAAAAAQkAAZEAAAACBQAAAA9vcmlnSW52ZXN0QXJyYXkFAAAAF0lkeEludkxhc3RDbGFpbWVkSGVpZ2h0BAAAABRuZXdDbGFpbVBlcmlvZEhlaWdodAMJAABmAAAAAgUAAAAGaGVpZ2h0BQAAAAhjbGFpbUVuZAUAAAAIY2xhaW1FbmQDCQAAZgAAAAIFAAAACmNsYWltU3RhcnQFAAAABmhlaWdodAUAAAAKY2xhaW1TdGFydAUAAAAGaGVpZ2h0AwkAAGYAAAACBQAAAApjbGFpbVN0YXJ0BQAAAAZoZWlnaHQJAAACAAAAAQIAAAAHZmFpbHVyZQQAAAAOY2xhaW1pbmdCbG9ja3MJAABlAAAAAgUAAAAUbmV3Q2xhaW1QZXJpb2RIZWlnaHQFAAAAF2ludmVzdExhc3RDbGFpbWVkSGVpZ2h0BAAAABhjbGFpbWluZ1ByaWNlQXNzZXRBbW91bnQJAABrAAAAAwUAAAARaW52ZXN0VG90YWxBbW91bnQFAAAADmNsYWltaW5nQmxvY2tzBQAAAA1jbGFpbUR1cmF0aW9uBAAAABZjbGFpbWluZ0lkb0Fzc2V0QW1vdW50CQEAAAAdY29udmVydFByaWNlQXNzZXRJbnRvSWRvQXNzZXQAAAAFBQAAABhjbGFpbWluZ1ByaWNlQXNzZXRBbW91bnQFAAAADnByaWNlQXNzZXRNdWx0BQAAAAVwcmljZQUAAAAJcHJpY2VNdWx0BQAAAAxpZG9Bc3NldE11bHQDCQAAAAAAAAIFAAAAEGNsYWltZWRBc3NldElkNTgFAAAADnByaWNlQXNzZXRJZDU4CQAFGAAAAAYJAARMAAAAAgAAAAAAAAAAAAkABEwAAAACCQEAAAABLQAAAAEFAAAAGGNsYWltaW5nUHJpY2VBc3NldEFtb3VudAkABEwAAAACBQAAABhjbGFpbWluZ1ByaWNlQXNzZXRBbW91bnQJAARMAAAAAgAAAAAAAAAAAAUAAAADbmlsBQAAABhjbGFpbWluZ1ByaWNlQXNzZXRBbW91bnQFAAAADHByaWNlQXNzZXRJZAUAAAAPb3JpZ0ludmVzdEFycmF5BQAAABRuZXdDbGFpbVBlcmlvZEhlaWdodAkABEwAAAACBQAAABhjbGFpbWluZ1ByaWNlQXNzZXRBbW91bnQJ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AAADbmlsCQAETAAAAAIJAQAAAAtTdHJpbmdFbnRyeQAAAAIJAQAAAAlrZXlDb25maWcAAAAACQEAAAAMZnJvbWF0Q29uZmlnAAAADAUAAAAIaWRvU3RhcnQFAAAAC2lkb0R1cmF0aW9uBQAAAApjbGFpbVN0YXJ0BQAAAA1jbGFpbUR1cmF0aW9uBQAAAAVwcmljZQUAAAAJcHJpY2VNdWx0BQAAAAxpZG9Bc3NldElkNTgFAAAADGlkb0Fzc2V0TXVsdAUAAAAOcHJpY2VBc3NldElkNTgFAAAADnByaWNlQXNzZXRNdWx0BQAAAA9taW5JbnZlc3RBbW91bnQIBQAAAANwbXQAAAAGYW1vdW50CQAETAAAAAIJAQAAAAtUb3RhbHNFbnRyeQAAAAQJAQAAAAlrZXlUb3RhbHMAAAAABQAAAA9vcmlnVG90YWxzQXJyYXkFAAAACnRvdGFsc0RpZmYFAAAACmNsYWltU3RhcnQFAAAAA25pbAAAAAFpAQAAAAZpbnZlc3QAAAAABAAAAAhjZmdBcnJheQkBAAAAD3JlYWRDb25maWdBcnJheQAAAAAEAAAACGlkb1N0YXJ0CQEAAAANcGFyc2VJbnRWYWx1ZQAAAAEJAAGRAAAAAgUAAAAIY2ZnQXJyYXkFAAAADklkeENmZ0lkb1N0YXJ0BAAAAAtpZG9EdXJhdGlvbgkBAAAADXBhcnNlSW50VmFsdWUAAAABCQABkQAAAAIFAAAACGNmZ0FycmF5BQAAABFJZHhDZmdJZG9EdXJhdGlvbgQAAAAGaWRvRW5kCQAAZAAAAAIFAAAACGlkb1N0YXJ0BQAAAAtpZG9EdXJhdGlvbgQAAAAKY2xhaW1TdGFydAkBAAAADXBhcnNlSW50VmFsdWUAAAABCQABkQAAAAIFAAAACGNmZ0FycmF5BQAAABBJZHhDZmdDbGFpbVN0YXJ0BAAAAA1jbGFpbUR1cmF0aW9uCQEAAAANcGFyc2VJbnRWYWx1ZQAAAAEJAAGRAAAAAgUAAAAIY2ZnQXJyYXkFAAAAE0lkeENmZ0NsYWltRHVyYXRpb24EAAAABXByaWNlCQEAAAANcGFyc2VJbnRWYWx1ZQAAAAEJAAGRAAAAAgUAAAAIY2ZnQXJyYXkFAAAAC0lkeENmZ1ByaWNlBAAAAAlwcmljZU11bHQJAQAAAA1wYXJzZUludFZhbHVlAAAAAQkAAZEAAAACBQAAAAhjZmdBcnJheQUAAAAPSWR4Q2ZnUHJpY2VNdWx0BAAAAAxpZG9Bc3NldElkNTgJAAGRAAAAAgUAAAAIY2ZnQXJyYXkFAAAAEElkeENmZ0lkb0Fzc2V0SWQEAAAACmlkb0Fzc2V0SWQJAAJZAAAAAQUAAAAMaWRvQXNzZXRJZDU4BAAAAAxpZG9Bc3NldE11bHQJAQAAAA1wYXJzZUludFZhbHVlAAAAAQkAAZEAAAACBQAAAAhjZmdBcnJheQUAAAASSWR4Q2ZnSWRvQXNzZXRNdWx0BAAAAA5wcmljZUFzc2V0SWQ1OAkAAZEAAAACBQAAAAhjZmdBcnJheQUAAAASSWR4Q2ZnUHJpY2VBc3NldElkBAAAAAxwcmljZUFzc2V0SWQJAAJZAAAAAQUAAAAOcHJpY2VBc3NldElkNTgEAAAADnByaWNlQXNzZXRNdWx0CQEAAAANcGFyc2VJbnRWYWx1ZQAAAAEJAAGRAAAAAgUAAAAIY2ZnQXJyYXkFAAAAFElkeENmZ1ByaWNlQXNzZXRNdWx0BAAAAA5taW5JdmVzdEFtb3VudAkBAAAADXBhcnNlSW50VmFsdWUAAAABCQABkQAAAAIFAAAACGNmZ0FycmF5BQAAABVJZHhDZmdNaW5JbnZlc3RBbW91bnQEAAAAC3VzZXJBZGRyZXNzCQAEJQAAAAEIBQAAAAFpAAAABmNhbGxlcgMJAABmAAAAAgUAAAAIaWRvU3RhcnQFAAAABmhlaWdodAkAAAIAAAABAgAAABxpZG8gaGFzIG5vdCBiZWVuIHN0YXJ0ZWQgeWV0AwkAAGYAAAACBQAAAAZoZWlnaHQFAAAABmlkb0VuZAkAAAIAAAABAgAAABppZG8gaGFzIGJlZW4gYWxyZWFkeSBlbmRlZAMJAQAAAAIhPQAAAAIJAAGQAAAAAQgFAAAAAWkAAAAIcGF5bWVudHMAAAAAAAAAAAEJAAACAAAAAQIAAAAdZXhhY3RseSAxIHBheW1lbnQgaXMgZXhwZWN0ZWQEAAAAA3BtdAkBAAAABXZhbHVlAAAAAQkAAZEAAAACCAUAAAABaQAAAAhwYXltZW50cwAAAAAAAAAAAAQAAAAKcG10QXNzZXRJZAkBAAAABXZhbHVlAAAAAQgFAAAAA3BtdAAAAAdhc3NldElkBAAAAAlwbXRBbW91bnQIBQAAAANwbXQAAAAGYW1vdW50AwkBAAAAAiE9AAAAAgUAAAAKcG10QXNzZXRJZAUAAAAMcHJpY2VBc3NldElkCQAAAgAAAAEJAAEsAAAAAgkAASwAAAACAgAAABppbnZhbGlkIHBheW1lbnQgYXNzZXQgaWQ6IAkAAlgAAAABBQAAAApwbXRBc3NldElkAgAAAAwgaXMgZXhwZWN0ZWQEAAAAEW9yaWdJbnZlc3RvckFycmF5CQEAAAAacmVhZEludmVzdG9yQXJyYXlPckRlZmF1bHQAAAABBQAAAAt1c2VyQWRkcmVzcwQAAAAPb3JpZ1RvdGFsc0FycmF5CQEAAAAYcmVhZFRvdGFsc0FycmF5T3JEZWZhdWx0AAAAAAQAAAATbmV3UHJpY2VUb3RhbEFtb3VudAkAAGQAAAACCQEAAAANcGFyc2VJbnRWYWx1ZQAAAAEJAAGRAAAAAgUAAAAPb3JpZ1RvdGFsc0FycmF5BQAAABFJZHhJbnZUb3RhbEFtb3VudAUAAAAJcG10QW1vdW50BAAAABZyZXF1aXJlZElkb0Fzc2V0QW1vdW50CQAAaAAAAAIFAAAAE25ld1ByaWNlVG90YWxBbW91bnQAAAAAAAAAAGQDCQAAZgAAAAIFAAAAFnJlcXVpcmVkSWRvQXNzZXRBbW91bnQJAAPwAAAAAgUAAAAEdGhpcwUAAAAKaWRvQXNzZXRJZAkAAAIAAAABAgAAADlJRE8gYXNzZXQgaGFzIGJlZW4gLSBzb2xkIGNvbnNpZGVyIHRvIHVzZSBzbWFsbGVyIHBheW1lbnQEAAAACnRvdGFsc0RpZmYJAARMAAAAAgUAAAAJcG10QW1vdW50CQAETAAAAAIFAAAACXBtdEFtb3VudAkABEwAAAACAAAAAAAAAAAACQAETAAAAAIAAAAAAAAAAAAFAAAAA25pbAkABEwAAAACCQEAAAALVG90YWxzRW50cnkAAAAECQEAAAALa2V5SW52ZXN0b3IAAAABBQAAAAt1c2VyQWRkcmVzcwUAAAARb3JpZ0ludmVzdG9yQXJyYXkFAAAACnRvdGFsc0RpZmYFAAAACmNsYWltU3RhcnQJAARMAAAAAgkBAAAAC1RvdGFsc0VudHJ5AAAABAkBAAAACWtleVRvdGFscwAAAAAFAAAAD29yaWdUb3RhbHNBcnJheQUAAAAKdG90YWxzRGlmZgUAAAAKY2xhaW1TdGFydAkABEwAAAACCQEAAAAbSW52ZXN0T3BlcmF0aW9uSGlzdG9yeUVudHJ5AAAABAUAAAALdXNlckFkZHJlc3MFAAAACXBtdEFtb3VudAAAAAAAAAAAAAgFAAAAAWkAAAANdHJhbnNhY3Rpb25JZAUAAAADbmlsAAAAAWkBAAAABWNsYWltAAAAAgAAABBjbGFpbWVkQXNzZXRJZDU4AAAADXVzZXJBZGRyZXNzNTgEAAAAD2NhbGxlckFkZHJlc3M1OAkABCUAAAABCAUAAAABaQAAAAZjYWxsZXIDCQEAAAACIT0AAAACBQAAAA11c2VyQWRkcmVzczU4BQAAAA9jYWxsZXJBZGRyZXNzNTgJAAACAAAAAQIAAAAObm90IGF1dGhvcml6ZWQEAAAAEGNsYWltUmVzdWx0VHVwbGUJAQAAAA1pbnRlcm5hbENsYWltAAAAAwUAAAAQY2xhaW1lZEFzc2V0SWQ1OAgFAAAAAWkAAAAGY2FsbGVyCAUAAAABaQAAAA10cmFuc2FjdGlvbklkBAAAAAp0b3RhbHNEaWZmCAUAAAAQY2xhaW1SZXN1bHRUdXBsZQAAAAJfMQQAAAAJb3V0QW1vdW50CAUAAAAQY2xhaW1SZXN1bHRUdXBsZQAAAAJfMgQAAAAKb3V0QXNzZXRJZAgFAAAAEGNsYWltUmVzdWx0VHVwbGUAAAACXzMEAAAAD29yaWdJbnZlc3RBcnJheQgFAAAAEGNsYWltUmVzdWx0VHVwbGUAAAACXzQEAAAAFG5ld0NsYWltUGVyaW9kSGVpZ2h0CAUAAAAQY2xhaW1SZXN1bHRUdXBsZQAAAAJfNQQAAAAaY2xhaW1lZFByaWNlQW1vdW50RnJvbURpZmYJAAGRAAAAAgUAAAAKdG90YWxzRGlmZgUAAAAiSWR4RGlmZkNsYWltZWRQcmljZUFtb3VudEluY3JlbWVudAQAAAAdY2xhaW1lZElkb0Fzc2V0QW1vdW50RnJvbURpZmYJAAGRAAAAAgUAAAAKdG90YWxzRGlmZgUAAAAlSWR4RGlmZkNsYWltZWRJZG9Bc3NldEFtb3VudEluY3JlbWVudAkABRQAAAACCQAETAAAAAIJAQAAAA5TY3JpcHRUcmFuc2ZlcgAAAAMIBQAAAAFpAAAABmNhbGxlcgUAAAAJb3V0QW1vdW50BQAAAApvdXRBc3NldElkCQAETAAAAAIJAQAAAAtUb3RhbHNFbnRyeQAAAAQJAQAAAAtrZXlJbnZlc3RvcgAAAAEFAAAADXVzZXJBZGRyZXNzNTgFAAAAD29yaWdJbnZlc3RBcnJheQUAAAAKdG90YWxzRGlmZgUAAAAUbmV3Q2xhaW1QZXJpb2RIZWlnaHQJAARMAAAAAgkBAAAAC1RvdGFsc0VudHJ5AAAABAkBAAAACWtleVRvdGFscwAAAAAJAQAAABhyZWFkVG90YWxzQXJyYXlPckRlZmF1bHQAAAAABQAAAAp0b3RhbHNEaWZmBQAAABRuZXdDbGFpbVBlcmlvZEhlaWdodAkABEwAAAACCQEAAAAaQ2xhaW1PcGVyYXRpb25IaXN0b3J5RW50cnkAAAAEBQAAAA11c2VyQWRkcmVzczU4BQAAABpjbGFpbWVkUHJpY2VBbW91bnRGcm9tRGlmZgUAAAAdY2xhaW1lZElkb0Fzc2V0QW1vdW50RnJvbURpZmYIBQAAAAFpAAAADXRyYW5zYWN0aW9uSWQFAAAAA25pbAUAAAAEdW5pdAAAAAFpAQAAAA1jbGFpbVJFQURPTkxZAAAAAgAAABBjbGFpbWVkQXNzZXRJZDU4AAAADXVzZXJBZGRyZXNzNTgEAAAAEGNsYWltUmVzdWx0VHVwbGUJAQAAAA1pbnRlcm5hbENsYWltAAAAAwUAAAAQY2xhaW1lZEFzc2V0SWQ1OAkBAAAAEUBleHRyTmF0aXZlKDEwNjIpAAAAAQUAAAANdXNlckFkZHJlc3M1OAkAAlkAAAABAgAAAAAEAAAACnRvdGFsc0RpZmYIBQAAABBjbGFpbVJlc3VsdFR1cGxlAAAAAl8xBAAAAAlvdXRBbW91bnQIBQAAABBjbGFpbVJlc3VsdFR1cGxlAAAAAl8yBAAAAApvdXRBc3NldElkCAUAAAAQY2xhaW1SZXN1bHRUdXBsZQAAAAJfMwQAAAAPb3JpZ0ludmVzdEFycmF5CAUAAAAQY2xhaW1SZXN1bHRUdXBsZQAAAAJfNAQAAAAUbmV3Q2xhaW1QZXJpb2RIZWlnaHQIBQAAABBjbGFpbVJlc3VsdFR1cGxlAAAAAl81BAAAABVhdmFpbGFibGVUb0NsYWltQXJyYXkIBQAAABBjbGFpbVJlc3VsdFR1cGxlAAAAAl82BAAAABthdmFpbGFibGVQcmljZUFtb3VudFRvQ2xhaW0JAAGRAAAAAgUAAAAVYXZhaWxhYmxlVG9DbGFpbUFycmF5AAAAAAAAAAAABAAAABlhdmFpbGFibGVJZG9BbW91bnRUb0NsYWltCQABkQAAAAIFAAAAFWF2YWlsYWJsZVRvQ2xhaW1BcnJheQAAAAAAAAAAAQkABRQAAAACBQAAAANuaWwJAAS5AAAAAgkABEwAAAACAgAAAAYlcyVkJWQJAARMAAAAAgUAAAANdXNlckFkZHJlc3M1OAkABEwAAAACCQABpAAAAAEFAAAAG2F2YWlsYWJsZVByaWNlQW1vdW50VG9DbGFpbQkABEwAAAACCQABpAAAAAEFAAAAGWF2YWlsYWJsZUlkb0Ftb3VudFRvQ2xhaW0FAAAAA25pbAUAAAADU0VQAAAAABsuTwI=", "chainId": 84, "height": 1806744, "applicationStatus": "succeeded", "spentComplexity": 0 } View: original | compacted Prev: 6dn8k2wsPZiTBXTqa9o7nwryyVmxe65cbZ3fdBQjPU2Z Next: C3yQmtNtPD7bBjDKFGDsFu7mGuXps9dL5hsWEWorzyjX Diff:
OldNewDifferences
188188
189189
190190 @Callable(i)
191-func invest () = if ((1 == 1))
192- then throw("invalid")
193- else {
194- let cfgArray = readConfigArray()
195- let idoStart = parseIntValue(cfgArray[IdxCfgIdoStart])
196- let idoDuration = parseIntValue(cfgArray[IdxCfgIdoDuration])
197- let idoEnd = (idoStart + idoDuration)
198- let claimStart = parseIntValue(cfgArray[IdxCfgClaimStart])
199- let claimDuration = parseIntValue(cfgArray[IdxCfgClaimDuration])
200- let price = parseIntValue(cfgArray[IdxCfgPrice])
201- let priceMult = parseIntValue(cfgArray[IdxCfgPriceMult])
202- let idoAssetId58 = cfgArray[IdxCfgIdoAssetId]
203- let idoAssetId = fromBase58String(idoAssetId58)
204- let idoAssetMult = parseIntValue(cfgArray[IdxCfgIdoAssetMult])
205- let priceAssetId58 = cfgArray[IdxCfgPriceAssetId]
206- let priceAssetId = fromBase58String(priceAssetId58)
207- let priceAssetMult = parseIntValue(cfgArray[IdxCfgPriceAssetMult])
208- let minIvestAmount = parseIntValue(cfgArray[IdxCfgMinInvestAmount])
209- let userAddress = toString(i.caller)
210- if ((idoStart > height))
211- then throw("ido has not been started yet")
212- else if ((height > idoEnd))
213- then throw("ido has been already ended")
214- else if ((size(i.payments) != 1))
215- then throw("exactly 1 payment is expected")
216- else {
217- let pmt = value(i.payments[0])
218- let pmtAssetId = value(pmt.assetId)
219- let pmtAmount = pmt.amount
220- if ((pmtAssetId != priceAssetId))
221- then throw((("invalid payment asset id: " + toBase58String(pmtAssetId)) + " is expected"))
222- else {
223- let origInvestorArray = readInvestorArrayOrDefault(userAddress)
224- let origTotalsArray = readTotalsArrayOrDefault()
225- let newPriceTotalAmount = (parseIntValue(origTotalsArray[IdxInvTotalAmount]) + pmtAmount)
226- let requiredIdoAssetAmount = (newPriceTotalAmount * 100)
227- if ((requiredIdoAssetAmount > assetBalance(this, idoAssetId)))
228- then throw("IDO asset has been - sold consider to use smaller payment")
229- else {
230- let totalsDiff = [pmtAmount, pmtAmount, 0, 0]
191+func invest () = {
192+ let cfgArray = readConfigArray()
193+ let idoStart = parseIntValue(cfgArray[IdxCfgIdoStart])
194+ let idoDuration = parseIntValue(cfgArray[IdxCfgIdoDuration])
195+ let idoEnd = (idoStart + idoDuration)
196+ let claimStart = parseIntValue(cfgArray[IdxCfgClaimStart])
197+ let claimDuration = parseIntValue(cfgArray[IdxCfgClaimDuration])
198+ let price = parseIntValue(cfgArray[IdxCfgPrice])
199+ let priceMult = parseIntValue(cfgArray[IdxCfgPriceMult])
200+ let idoAssetId58 = cfgArray[IdxCfgIdoAssetId]
201+ let idoAssetId = fromBase58String(idoAssetId58)
202+ let idoAssetMult = parseIntValue(cfgArray[IdxCfgIdoAssetMult])
203+ let priceAssetId58 = cfgArray[IdxCfgPriceAssetId]
204+ let priceAssetId = fromBase58String(priceAssetId58)
205+ let priceAssetMult = parseIntValue(cfgArray[IdxCfgPriceAssetMult])
206+ let minIvestAmount = parseIntValue(cfgArray[IdxCfgMinInvestAmount])
207+ let userAddress = toString(i.caller)
208+ if ((idoStart > height))
209+ then throw("ido has not been started yet")
210+ else if ((height > idoEnd))
211+ then throw("ido has been already ended")
212+ else if ((size(i.payments) != 1))
213+ then throw("exactly 1 payment is expected")
214+ else {
215+ let pmt = value(i.payments[0])
216+ let pmtAssetId = value(pmt.assetId)
217+ let pmtAmount = pmt.amount
218+ if ((pmtAssetId != priceAssetId))
219+ then throw((("invalid payment asset id: " + toBase58String(pmtAssetId)) + " is expected"))
220+ else {
221+ let origInvestorArray = readInvestorArrayOrDefault(userAddress)
222+ let origTotalsArray = readTotalsArrayOrDefault()
223+ let newPriceTotalAmount = (parseIntValue(origTotalsArray[IdxInvTotalAmount]) + pmtAmount)
224+ let requiredIdoAssetAmount = (newPriceTotalAmount * 100)
225+ if ((requiredIdoAssetAmount > assetBalance(this, idoAssetId)))
226+ then throw("IDO asset has been - sold consider to use smaller payment")
227+ else {
228+ let totalsDiff = [pmtAmount, pmtAmount, 0, 0]
231229 [TotalsEntry(keyInvestor(userAddress), origInvestorArray, totalsDiff, claimStart), TotalsEntry(keyTotals(), origTotalsArray, totalsDiff, claimStart), InvestOperationHistoryEntry(userAddress, pmtAmount, 0, i.transactionId)]
232- }
233- }
234- }
235- }
230+ }
231+ }
232+ }
233+ }
236234
237235
238236
239237 @Callable(i)
240-func claim (claimedAssetId58,userAddress58) = if ((1 == 1))
241- then throw("invalid")
242- else {
243- let callerAddress58 = toString(i.caller)
244- if ((userAddress58 != callerAddress58))
245- then throw("not authorized")
246- else {
247- let claimResultTuple = internalClaim(claimedAssetId58, i.caller, i.transactionId)
248- let totalsDiff = claimResultTuple._1
249- let outAmount = claimResultTuple._2
250- let outAssetId = claimResultTuple._3
251- let origInvestArray = claimResultTuple._4
252- let newClaimPeriodHeight = claimResultTuple._5
253- let claimedPriceAmountFromDiff = totalsDiff[IdxDiffClaimedPriceAmountIncrement]
254- let claimedIdoAssetAmountFromDiff = totalsDiff[IdxDiffClaimedIdoAssetAmountIncrement]
255- $Tuple2([ScriptTransfer(i.caller, outAmount, outAssetId), TotalsEntry(keyInvestor(userAddress58), origInvestArray, totalsDiff, newClaimPeriodHeight), TotalsEntry(keyTotals(), readTotalsArrayOrDefault(), totalsDiff, newClaimPeriodHeight), ClaimOperationHistoryEntry(userAddress58, claimedPriceAmountFromDiff, claimedIdoAssetAmountFromDiff, i.transactionId)], unit)
256- }
257- }
238+func claim (claimedAssetId58,userAddress58) = {
239+ let callerAddress58 = toString(i.caller)
240+ if ((userAddress58 != callerAddress58))
241+ then throw("not authorized")
242+ else {
243+ let claimResultTuple = internalClaim(claimedAssetId58, i.caller, i.transactionId)
244+ let totalsDiff = claimResultTuple._1
245+ let outAmount = claimResultTuple._2
246+ let outAssetId = claimResultTuple._3
247+ let origInvestArray = claimResultTuple._4
248+ let newClaimPeriodHeight = claimResultTuple._5
249+ let claimedPriceAmountFromDiff = totalsDiff[IdxDiffClaimedPriceAmountIncrement]
250+ let claimedIdoAssetAmountFromDiff = totalsDiff[IdxDiffClaimedIdoAssetAmountIncrement]
251+ $Tuple2([ScriptTransfer(i.caller, outAmount, outAssetId), TotalsEntry(keyInvestor(userAddress58), origInvestArray, totalsDiff, newClaimPeriodHeight), TotalsEntry(keyTotals(), readTotalsArrayOrDefault(), totalsDiff, newClaimPeriodHeight), ClaimOperationHistoryEntry(userAddress58, claimedPriceAmountFromDiff, claimedIdoAssetAmountFromDiff, i.transactionId)], unit)
252+ }
253+ }
258254
259255
260256
Full:
OldNewDifferences
11 {-# STDLIB_VERSION 5 #-}
22 {-# SCRIPT_TYPE ACCOUNT #-}
33 {-# CONTENT_TYPE DAPP #-}
44 func getStringOrFail (key) = valueOrErrorMessage(getString(key), (("mandatory this." + key) + " is not defined"))
55
66
77 let SEP = "__"
88
99 let BUFSCALE = toBigInt(1000000000000000000)
1010
1111 func convertPriceAssetIntoIdoAsset (priceAssetAmount,priceAssetMULT,price,priceMULT,idoAssetMULT) = {
1212 let bPriceAssetMULT = toBigInt(priceAssetMULT)
1313 let bIdoAssetMULT = toBigInt(idoAssetMULT)
1414 let bPriceAssetBUF = fraction(toBigInt(priceAssetAmount), BUFSCALE, bPriceAssetMULT)
1515 let bAmountAssetBUF = fraction(bPriceAssetBUF, toBigInt(priceMULT), toBigInt(price))
1616 toInt(fraction(bAmountAssetBUF, toBigInt(idoAssetMULT), BUFSCALE))
1717 }
1818
1919
2020 let IdxCfgIdoStart = 1
2121
2222 let IdxCfgIdoDuration = 2
2323
2424 let IdxCfgClaimStart = 3
2525
2626 let IdxCfgClaimDuration = 4
2727
2828 let IdxCfgPrice = 5
2929
3030 let IdxCfgPriceMult = 6
3131
3232 let IdxCfgIdoAssetId = 7
3333
3434 let IdxCfgIdoAssetMult = 8
3535
3636 let IdxCfgPriceAssetId = 9
3737
3838 let IdxCfgPriceAssetMult = 10
3939
4040 let IdxCfgMinInvestAmount = 11
4141
4242 func fromatConfigS (idoStart,idoDuration,claimStart,claimDuration,price,priceMult,idoAssetId58,idoAssetMult,priceAssetId58,priceAssetMult,minInvestAmount,totalIdoAssetToSell) = makeString(["%d%d%d%d%d%d%s%d%s%d%d%d", idoStart, idoDuration, claimStart, claimDuration, price, priceMult, idoAssetId58, idoAssetMult, priceAssetId58, priceAssetMult, minInvestAmount, totalIdoAssetToSell], SEP)
4343
4444
4545 func fromatConfig (idoStart,idoDuration,claimStart,claimDuration,price,priceMult,idoAssetId58,idoAssetMult,priceAssetId58,priceAssetMult,minInvestAmount,totalIdoAssetToSell) = fromatConfigS(toString(idoStart), toString(idoDuration), toString(claimStart), toString(claimDuration), toString(price), toString(priceMult), idoAssetId58, toString(idoAssetMult), priceAssetId58, toString(priceAssetMult), toString(minInvestAmount), toString(totalIdoAssetToSell))
4646
4747
4848 let IdxInvTotalAmount = 1
4949
5050 let IdxInvRemainingAmount = 2
5151
5252 let IdxInvClaimedPriceAssetAmount = 3
5353
5454 let IdxInvClaimedIdoAssetAmount = 4
5555
5656 let IdxInvLastClaimedHeight = 5
5757
5858 func formatInvestorS (totalAmount,remainingAmount,claimedPriceAssetAmount,claimedIdoAssetAmount,lastClaimedHeight) = makeString(["%d%d%d%d%d", totalAmount, remainingAmount, claimedPriceAssetAmount, claimedIdoAssetAmount, lastClaimedHeight], SEP)
5959
6060
6161 func formatInvestor (totalAmount,remainingAmount,claimedPriceAssetAmount,claimedIdoAssetAmount,lastClaimedHeight) = formatInvestorS(toString(totalAmount), toString(remainingAmount), toString(claimedPriceAssetAmount), toString(claimedIdoAssetAmount), toString(lastClaimedHeight))
6262
6363
6464 func formatHistoryRecord (priceAssetAmount,idoAssetAmount) = makeString(["%d%d%d%d", toString(height), toString(lastBlock.timestamp), toString(priceAssetAmount), toString(idoAssetAmount)], SEP)
6565
6666
6767 func keyConfig () = "%s__config"
6868
6969
7070 func keyInvestor (userAddress) = ("%s__" + userAddress)
7171
7272
7373 func keyTotals () = "%s__totals"
7474
7575
7676 func keyOperationHistoryRecord (type,userAddress,txId58) = makeString(["%s%s%s%s__history", type, userAddress, txId58], SEP)
7777
7878
7979 func readConfigArray () = split(getStringOrFail(keyConfig()), SEP)
8080
8181
8282 func readTotalsArrayOrDefaultByCustomKey (customKey) = split(valueOrElse(getString(customKey), formatInvestorS("0", "0", "0", "0", "0")), SEP)
8383
8484
8585 func readTotalsArrayOrDefault () = readTotalsArrayOrDefaultByCustomKey(keyTotals())
8686
8787
8888 func readInvestorArrayOrDefault (userAddress) = readTotalsArrayOrDefaultByCustomKey(keyInvestor(userAddress))
8989
9090
9191 func readInvestorArrayOrFail (userAddress) = split(getStringOrFail(keyInvestor(userAddress)), SEP)
9292
9393
9494 let IdxDiffTotalIncrement = 0
9595
9696 let IdxDiffRemainingPriceAmountIncrement = 1
9797
9898 let IdxDiffClaimedPriceAmountIncrement = 2
9999
100100 let IdxDiffClaimedIdoAssetAmountIncrement = 3
101101
102102 func TotalsEntry (key,origArray,incrementDiff,newLastClaimedHeight) = {
103103 let totalAmount = parseIntValue(origArray[IdxInvTotalAmount])
104104 let remainingAmount = parseIntValue(origArray[IdxInvRemainingAmount])
105105 let claimedPriceAssetAmount = parseIntValue(origArray[IdxInvClaimedPriceAssetAmount])
106106 let claimedIdoAssetAmount = parseIntValue(origArray[IdxInvClaimedIdoAssetAmount])
107107 let lastClaimedHeight = parseIntValue(origArray[IdxInvLastClaimedHeight])
108108 let newTotalAmount = (totalAmount + incrementDiff[IdxDiffTotalIncrement])
109109 let newRemainingAmount = (remainingAmount + incrementDiff[IdxDiffRemainingPriceAmountIncrement])
110110 let newClaimedPriceAssetAmount = (claimedPriceAssetAmount + incrementDiff[IdxDiffClaimedPriceAmountIncrement])
111111 let newClaimedIdoAssetAmount = (claimedIdoAssetAmount + incrementDiff[IdxDiffClaimedIdoAssetAmountIncrement])
112112 if ((0 > newRemainingAmount))
113113 then throw("invalid math")
114114 else StringEntry(key, formatInvestor(newTotalAmount, newRemainingAmount, newClaimedPriceAssetAmount, newClaimedIdoAssetAmount, newLastClaimedHeight))
115115 }
116116
117117
118118 func InvestOperationHistoryEntry (userAddress,priceAssetAmount,idoAssetAmount,txId) = StringEntry(keyOperationHistoryRecord("invest", userAddress, toBase58String(txId)), formatHistoryRecord(priceAssetAmount, idoAssetAmount))
119119
120120
121121 func ClaimOperationHistoryEntry (userAddress,priceAssetAmount,idoAssetAmount,txId) = StringEntry(keyOperationHistoryRecord("claim", userAddress, toBase58String(txId)), formatHistoryRecord(priceAssetAmount, idoAssetAmount))
122122
123123
124124 func internalClaim (claimedAssetId58,userAddress,txId) = {
125125 let cfgArray = readConfigArray()
126126 let claimStart = parseIntValue(cfgArray[IdxCfgClaimStart])
127127 let claimDuration = parseIntValue(cfgArray[IdxCfgClaimDuration])
128128 let claimEnd = (claimStart + claimDuration)
129129 let price = parseIntValue(cfgArray[IdxCfgPrice])
130130 let priceMult = parseIntValue(cfgArray[IdxCfgPriceMult])
131131 let idoAssetId58 = cfgArray[IdxCfgIdoAssetId]
132132 let idoAssetId = fromBase58String(idoAssetId58)
133133 let idoAssetMult = parseIntValue(cfgArray[IdxCfgIdoAssetMult])
134134 let priceAssetId58 = cfgArray[IdxCfgPriceAssetId]
135135 let priceAssetId = fromBase58String(priceAssetId58)
136136 let priceAssetMult = parseIntValue(cfgArray[IdxCfgPriceAssetMult])
137137 let userAddress58 = toString(userAddress)
138138 let origInvestArray = readInvestorArrayOrFail(userAddress58)
139139 let investTotalAmount = parseIntValue(origInvestArray[IdxInvTotalAmount])
140140 let investLastClaimedHeight = parseIntValue(origInvestArray[IdxInvLastClaimedHeight])
141141 let newClaimPeriodHeight = if ((height > claimEnd))
142142 then claimEnd
143143 else if ((claimStart > height))
144144 then claimStart
145145 else height
146146 if ((claimStart > height))
147147 then throw("failure")
148148 else {
149149 let claimingBlocks = (newClaimPeriodHeight - investLastClaimedHeight)
150150 let claimingPriceAssetAmount = fraction(investTotalAmount, claimingBlocks, claimDuration)
151151 let claimingIdoAssetAmount = convertPriceAssetIntoIdoAsset(claimingPriceAssetAmount, priceAssetMult, price, priceMult, idoAssetMult)
152152 if ((claimedAssetId58 == priceAssetId58))
153153 then $Tuple6([0, -(claimingPriceAssetAmount), claimingPriceAssetAmount, 0], claimingPriceAssetAmount, priceAssetId, origInvestArray, newClaimPeriodHeight, [claimingPriceAssetAmount, claimingIdoAssetAmount])
154154 else if ((claimedAssetId58 == idoAssetId58))
155155 then $Tuple6([0, -(claimingPriceAssetAmount), 0, claimingIdoAssetAmount], claimingIdoAssetAmount, idoAssetId, origInvestArray, newClaimPeriodHeight, [claimingPriceAssetAmount, claimingIdoAssetAmount])
156156 else throw(("unsupported assetId: " + claimedAssetId58))
157157 }
158158 }
159159
160160
161161 @Callable(i)
162162 func constructor (idoStart,idoDuration,claimStart,claimDuration,price,priceAssetId58,minInvestAmount) = {
163163 let priceMult = ((100 * 1000) * 1000)
164164 let idoEnd = (idoStart + idoDuration)
165165 if (isDefined(getString(keyConfig())))
166166 then throw("already initialized")
167167 else if (("3N4Aib5iubWiGMzdTh6wWiVDVbo32oeVUmH" != toString(i.caller)))
168168 then throw("not authorized")
169169 else if ((size(i.payments) != 1))
170170 then throw("exactly 1 payment must be attached")
171171 else if ((idoEnd >= claimStart))
172172 then throw("claimStart must be greater than idoEnd")
173173 else {
174174 let pmt = value(i.payments[0])
175175 let idoAssetId = value(pmt.assetId)
176176 let idoAssetInfo = valueOrErrorMessage(assetInfo(idoAssetId), "fail to load ido asset info")
177177 let idoAssetId58 = toBase58String(idoAssetId)
178178 let idoAssetMult = pow(10, 0, idoAssetInfo.decimals, 0, 0, DOWN)
179179 let priceAssetId = fromBase58String(priceAssetId58)
180180 let priceAssetInfo = valueOrErrorMessage(assetInfo(priceAssetId), "fail to load price asset info")
181181 let priceAssetMult = pow(10, 0, priceAssetInfo.decimals, 0, 0, DOWN)
182182 let origTotalsArray = readTotalsArrayOrDefault()
183183 let totalsDiff = [0, 0, 0, 0]
184184 [StringEntry(keyConfig(), fromatConfig(idoStart, idoDuration, claimStart, claimDuration, price, priceMult, idoAssetId58, idoAssetMult, priceAssetId58, priceAssetMult, minInvestAmount, pmt.amount)), TotalsEntry(keyTotals(), origTotalsArray, totalsDiff, claimStart)]
185185 }
186186 }
187187
188188
189189
190190 @Callable(i)
191-func invest () = if ((1 == 1))
192- then throw("invalid")
193- else {
194- let cfgArray = readConfigArray()
195- let idoStart = parseIntValue(cfgArray[IdxCfgIdoStart])
196- let idoDuration = parseIntValue(cfgArray[IdxCfgIdoDuration])
197- let idoEnd = (idoStart + idoDuration)
198- let claimStart = parseIntValue(cfgArray[IdxCfgClaimStart])
199- let claimDuration = parseIntValue(cfgArray[IdxCfgClaimDuration])
200- let price = parseIntValue(cfgArray[IdxCfgPrice])
201- let priceMult = parseIntValue(cfgArray[IdxCfgPriceMult])
202- let idoAssetId58 = cfgArray[IdxCfgIdoAssetId]
203- let idoAssetId = fromBase58String(idoAssetId58)
204- let idoAssetMult = parseIntValue(cfgArray[IdxCfgIdoAssetMult])
205- let priceAssetId58 = cfgArray[IdxCfgPriceAssetId]
206- let priceAssetId = fromBase58String(priceAssetId58)
207- let priceAssetMult = parseIntValue(cfgArray[IdxCfgPriceAssetMult])
208- let minIvestAmount = parseIntValue(cfgArray[IdxCfgMinInvestAmount])
209- let userAddress = toString(i.caller)
210- if ((idoStart > height))
211- then throw("ido has not been started yet")
212- else if ((height > idoEnd))
213- then throw("ido has been already ended")
214- else if ((size(i.payments) != 1))
215- then throw("exactly 1 payment is expected")
216- else {
217- let pmt = value(i.payments[0])
218- let pmtAssetId = value(pmt.assetId)
219- let pmtAmount = pmt.amount
220- if ((pmtAssetId != priceAssetId))
221- then throw((("invalid payment asset id: " + toBase58String(pmtAssetId)) + " is expected"))
222- else {
223- let origInvestorArray = readInvestorArrayOrDefault(userAddress)
224- let origTotalsArray = readTotalsArrayOrDefault()
225- let newPriceTotalAmount = (parseIntValue(origTotalsArray[IdxInvTotalAmount]) + pmtAmount)
226- let requiredIdoAssetAmount = (newPriceTotalAmount * 100)
227- if ((requiredIdoAssetAmount > assetBalance(this, idoAssetId)))
228- then throw("IDO asset has been - sold consider to use smaller payment")
229- else {
230- let totalsDiff = [pmtAmount, pmtAmount, 0, 0]
191+func invest () = {
192+ let cfgArray = readConfigArray()
193+ let idoStart = parseIntValue(cfgArray[IdxCfgIdoStart])
194+ let idoDuration = parseIntValue(cfgArray[IdxCfgIdoDuration])
195+ let idoEnd = (idoStart + idoDuration)
196+ let claimStart = parseIntValue(cfgArray[IdxCfgClaimStart])
197+ let claimDuration = parseIntValue(cfgArray[IdxCfgClaimDuration])
198+ let price = parseIntValue(cfgArray[IdxCfgPrice])
199+ let priceMult = parseIntValue(cfgArray[IdxCfgPriceMult])
200+ let idoAssetId58 = cfgArray[IdxCfgIdoAssetId]
201+ let idoAssetId = fromBase58String(idoAssetId58)
202+ let idoAssetMult = parseIntValue(cfgArray[IdxCfgIdoAssetMult])
203+ let priceAssetId58 = cfgArray[IdxCfgPriceAssetId]
204+ let priceAssetId = fromBase58String(priceAssetId58)
205+ let priceAssetMult = parseIntValue(cfgArray[IdxCfgPriceAssetMult])
206+ let minIvestAmount = parseIntValue(cfgArray[IdxCfgMinInvestAmount])
207+ let userAddress = toString(i.caller)
208+ if ((idoStart > height))
209+ then throw("ido has not been started yet")
210+ else if ((height > idoEnd))
211+ then throw("ido has been already ended")
212+ else if ((size(i.payments) != 1))
213+ then throw("exactly 1 payment is expected")
214+ else {
215+ let pmt = value(i.payments[0])
216+ let pmtAssetId = value(pmt.assetId)
217+ let pmtAmount = pmt.amount
218+ if ((pmtAssetId != priceAssetId))
219+ then throw((("invalid payment asset id: " + toBase58String(pmtAssetId)) + " is expected"))
220+ else {
221+ let origInvestorArray = readInvestorArrayOrDefault(userAddress)
222+ let origTotalsArray = readTotalsArrayOrDefault()
223+ let newPriceTotalAmount = (parseIntValue(origTotalsArray[IdxInvTotalAmount]) + pmtAmount)
224+ let requiredIdoAssetAmount = (newPriceTotalAmount * 100)
225+ if ((requiredIdoAssetAmount > assetBalance(this, idoAssetId)))
226+ then throw("IDO asset has been - sold consider to use smaller payment")
227+ else {
228+ let totalsDiff = [pmtAmount, pmtAmount, 0, 0]
231229 [TotalsEntry(keyInvestor(userAddress), origInvestorArray, totalsDiff, claimStart), TotalsEntry(keyTotals(), origTotalsArray, totalsDiff, claimStart), InvestOperationHistoryEntry(userAddress, pmtAmount, 0, i.transactionId)]
232- }
233- }
234- }
235- }
230+ }
231+ }
232+ }
233+ }
236234
237235
238236
239237 @Callable(i)
240-func claim (claimedAssetId58,userAddress58) = if ((1 == 1))
241- then throw("invalid")
242- else {
243- let callerAddress58 = toString(i.caller)
244- if ((userAddress58 != callerAddress58))
245- then throw("not authorized")
246- else {
247- let claimResultTuple = internalClaim(claimedAssetId58, i.caller, i.transactionId)
248- let totalsDiff = claimResultTuple._1
249- let outAmount = claimResultTuple._2
250- let outAssetId = claimResultTuple._3
251- let origInvestArray = claimResultTuple._4
252- let newClaimPeriodHeight = claimResultTuple._5
253- let claimedPriceAmountFromDiff = totalsDiff[IdxDiffClaimedPriceAmountIncrement]
254- let claimedIdoAssetAmountFromDiff = totalsDiff[IdxDiffClaimedIdoAssetAmountIncrement]
255- $Tuple2([ScriptTransfer(i.caller, outAmount, outAssetId), TotalsEntry(keyInvestor(userAddress58), origInvestArray, totalsDiff, newClaimPeriodHeight), TotalsEntry(keyTotals(), readTotalsArrayOrDefault(), totalsDiff, newClaimPeriodHeight), ClaimOperationHistoryEntry(userAddress58, claimedPriceAmountFromDiff, claimedIdoAssetAmountFromDiff, i.transactionId)], unit)
256- }
257- }
238+func claim (claimedAssetId58,userAddress58) = {
239+ let callerAddress58 = toString(i.caller)
240+ if ((userAddress58 != callerAddress58))
241+ then throw("not authorized")
242+ else {
243+ let claimResultTuple = internalClaim(claimedAssetId58, i.caller, i.transactionId)
244+ let totalsDiff = claimResultTuple._1
245+ let outAmount = claimResultTuple._2
246+ let outAssetId = claimResultTuple._3
247+ let origInvestArray = claimResultTuple._4
248+ let newClaimPeriodHeight = claimResultTuple._5
249+ let claimedPriceAmountFromDiff = totalsDiff[IdxDiffClaimedPriceAmountIncrement]
250+ let claimedIdoAssetAmountFromDiff = totalsDiff[IdxDiffClaimedIdoAssetAmountIncrement]
251+ $Tuple2([ScriptTransfer(i.caller, outAmount, outAssetId), TotalsEntry(keyInvestor(userAddress58), origInvestArray, totalsDiff, newClaimPeriodHeight), TotalsEntry(keyTotals(), readTotalsArrayOrDefault(), totalsDiff, newClaimPeriodHeight), ClaimOperationHistoryEntry(userAddress58, claimedPriceAmountFromDiff, claimedIdoAssetAmountFromDiff, i.transactionId)], unit)
252+ }
253+ }
258254
259255
260256
261257 @Callable(i)
262258 func claimREADONLY (claimedAssetId58,userAddress58) = {
263259 let claimResultTuple = internalClaim(claimedAssetId58, addressFromStringValue(userAddress58), fromBase58String(""))
264260 let totalsDiff = claimResultTuple._1
265261 let outAmount = claimResultTuple._2
266262 let outAssetId = claimResultTuple._3
267263 let origInvestArray = claimResultTuple._4
268264 let newClaimPeriodHeight = claimResultTuple._5
269265 let availableToClaimArray = claimResultTuple._6
270266 let availablePriceAmountToClaim = availableToClaimArray[0]
271267 let availableIdoAmountToClaim = availableToClaimArray[1]
272268 $Tuple2(nil, makeString(["%s%d%d", userAddress58, toString(availablePriceAmountToClaim), toString(availableIdoAmountToClaim)], SEP))
273269 }
274270
275271

github/deemru/w8io/026f985 
41.44 ms