tx · J7teaWohvqdtLqRFwkWHtSZ62YgprYcBYiH7CLaHEgpF

3MqySDQxn5jzBUc144oks9fQzAXCBvJ2B8Y:  -0.01000000 Waves

2021.08.25 20:01 [1674128] smart account 3MqySDQxn5jzBUc144oks9fQzAXCBvJ2B8Y > SELF 0.00000000 Waves

{ "type": 13, "id": "J7teaWohvqdtLqRFwkWHtSZ62YgprYcBYiH7CLaHEgpF", "fee": 1000000, "feeAssetId": null, "timestamp": 1629910935423, "version": 1, "sender": "3MqySDQxn5jzBUc144oks9fQzAXCBvJ2B8Y", "senderPublicKey": "3YcAqsm6P2UYnzeZng9DPfjNQbEcHithbYzPy3ZMzLMk", "proofs": [ "CHbKG6yjsDnFC9E8CP5WSuW7TDs6yBBz8tQ1V2NVohQ2p7MK1fvrYgSsPTS9nZuoVR4YBZuPuPuSNh2xMsuKuT1" ], "script": "base64:AAIFAAAAAAAAABsIAhIJCgcBAQEBAQgBEgASBAoCCAgSBAoCCAgAAAAqAQAAAA9nZXRTdHJpbmdPckZhaWwAAAABAAAAA2tleQkBAAAAE3ZhbHVlT3JFcnJvck1lc3NhZ2UAAAACCQAEIgAAAAEFAAAAA2tleQkAASwAAAACCQABLAAAAAICAAAAD21hbmRhdG9yeSB0aGlzLgUAAAADa2V5AgAAAA8gaXMgbm90IGRlZmluZWQAAAAAA1NFUAIAAAACX18AAAAACEJVRlNDQUxFCQABNgAAAAEADeC2s6dkAAABAAAAHWNvbnZlcnRQcmljZUFzc2V0SW50b0lkb0Fzc2V0AAAABQAAABBwcmljZUFzc2V0QW1vdW50AAAADnByaWNlQXNzZXRNVUxUAAAABXByaWNlAAAACXByaWNlTVVMVAAAAAxpZG9Bc3NldE1VTFQEAAAACmJQcmljZU1VTFQJAAE2AAAAAQUAAAAOcHJpY2VBc3NldE1VTFQEAAAADmJQcmljZUFzc2V0QlVGCQABPAAAAAMJAAE2AAAAAQUAAAAQcHJpY2VBc3NldEFtb3VudAUAAAAIQlVGU0NBTEUFAAAACmJQcmljZU1VTFQEAAAAD2JBbW91bnRBc3NldEJVRgkAATwAAAADBQAAAA5iUHJpY2VBc3NldEJVRgUAAAAKYlByaWNlTVVMVAkAATYAAAABBQAAAAVwcmljZQkAAaAAAAABCQABPAAAAAMFAAAAD2JBbW91bnRBc3NldEJVRgkAATYAAAABBQAAAAxpZG9Bc3NldE1VTFQFAAAACEJVRlNDQUxFAAAAAA5JZHhDZmdJZG9TdGFydAAAAAAAAAAAAQAAAAARSWR4Q2ZnSWRvRHVyYXRpb24AAAAAAAAAAAIAAAAAEElkeENmZ0NsYWltU3RhcnQAAAAAAAAAAAMAAAAAE0lkeENmZ0NsYWltRHVyYXRpb24AAAAAAAAAAAQAAAAAC0lkeENmZ1ByaWNlAAAAAAAAAAAFAAAAAA9JZHhDZmdQcmljZU11bHQAAAAAAAAAAAYAAAAAEElkeENmZ0lkb0Fzc2V0SWQAAAAAAAAAAAcAAAAAEklkeENmZ0lkb0Fzc2V0TXVsdAAAAAAAAAAACAAAAAASSWR4Q2ZnUHJpY2VBc3NldElkAAAAAAAAAAAJAAAAABRJZHhDZmdQcmljZUFzc2V0TXVsdAAAAAAAAAAACgAAAAAVSWR4Q2ZnTWluSW52ZXN0QW1vdW50AAAAAAAAAAALAQAAAA1mcm9tYXRDb25maWdTAAAACwAAAAhpZG9TdGFydAAAAAtpZG9EdXJhdGlvbgAAAApjbGFpbVN0YXJ0AAAADWNsYWltRHVyYXRpb24AAAAFcHJpY2UAAAAJcHJpY2VNdWx0AAAADGlkb0Fzc2V0SWQ1OAAAAAxpZG9Bc3NldE11bHQAAAAOcHJpY2VBc3NldElkNTgAAAAOcHJpY2VBc3NldE11bHQAAAAPbWluSW52ZXN0QW1vdW50CQAEuQAAAAIJAARMAAAAAgIAAAAWJWQlZCVkJWQlZCVkJXMlZCVzJWQlZAkABEwAAAACBQAAAAhpZG9TdGFydAkABEwAAAACBQAAAAtpZG9EdXJhdGlvbgkABEwAAAACBQAAAApjbGFpbVN0YXJ0CQAETAAAAAIFAAAADWNsYWltRHVyYXRpb24JAARMAAAAAgUAAAAFcHJpY2UJAARMAAAAAgUAAAAJcHJpY2VNdWx0CQAETAAAAAIFAAAADGlkb0Fzc2V0SWQ1OAkABEwAAAACBQAAAAxpZG9Bc3NldE11bHQJAARMAAAAAgUAAAAOcHJpY2VBc3NldElkNTgJAARMAAAAAgUAAAAOcHJpY2VBc3NldE11bHQJAARMAAAAAgUAAAAPbWluSW52ZXN0QW1vdW50BQAAAANuaWwFAAAAA1NFUAEAAAAMZnJvbWF0Q29uZmlnAAAACwAAAAhpZG9TdGFydAAAAAtpZG9EdXJhdGlvbgAAAApjbGFpbVN0YXJ0AAAADWNsYWltRHVyYXRpb24AAAAFcHJpY2UAAAAJcHJpY2VNdWx0AAAADGlkb0Fzc2V0SWQ1OAAAAAxpZG9Bc3NldE11bHQAAAAOcHJpY2VBc3NldElkNTgAAAAOcHJpY2VBc3NldE11bHQAAAAPbWluSW52ZXN0QW1vdW50CQEAAAANZnJvbWF0Q29uZmlnUwAAAAsJAAGkAAAAAQUAAAAIaWRvU3RhcnQJAAGkAAAAAQUAAAALaWRvRHVyYXRpb24JAAGkAAAAAQUAAAAKY2xhaW1TdGFydAkAAaQAAAABBQAAAA1jbGFpbUR1cmF0aW9uCQABpAAAAAEFAAAABXByaWNlCQABpAAAAAEFAAAACXByaWNlTXVsdAUAAAAMaWRvQXNzZXRJZDU4CQABpAAAAAEFAAAADGlkb0Fzc2V0TXVsdAUAAAAOcHJpY2VBc3NldElkNTgJAAGkAAAAAQUAAAAOcHJpY2VBc3NldE11bHQJAAGkAAAAAQUAAAAPbWluSW52ZXN0QW1vdW50AAAAABFJZHhJbnZUb3RhbEFtb3VudAAAAAAAAAAAAQAAAAAVSWR4SW52UmVtYWluaW5nQW1vdW50AAAAAAAAAAACAAAAAB1JZHhJbnZDbGFpbWVkUHJpY2VBc3NldEFtb3VudAAAAAAAAAAAAwAAAAAbSWR4SW52Q2xhaW1lZElkb0Fzc2V0QW1vdW50AAAAAAAAAAAEAAAAABdJZHhJbnZMYXN0Q2xhaW1lZEhlaWdodAAAAAAAAAAABQEAAAAPZm9ybWF0SW52ZXN0b3JTAAAABQAAAAt0b3RhbEFtb3VudAAAAA9yZW1haW5pbmdBbW91bnQAAAAXY2xhaW1lZFByaWNlQXNzZXRBbW91bnQAAAAVY2xhaW1lZElkb0Fzc2V0QW1vdW50AAAAEWxhc3RDbGFpbWVkSGVpZ2h0CQAEuQAAAAIJAARMAAAAAgIAAAAKJWQlZCVkJWQlZAkABEwAAAACBQAAAAt0b3RhbEFtb3VudAkABEwAAAACBQAAAA9yZW1haW5pbmdBbW91bnQJAARMAAAAAgUAAAAXY2xhaW1lZFByaWNlQXNzZXRBbW91bnQJAARMAAAAAgUAAAAVY2xhaW1lZElkb0Fzc2V0QW1vdW50CQAETAAAAAIFAAAAEWxhc3RDbGFpbWVkSGVpZ2h0BQAAAANuaWwFAAAAA1NFUAEAAAAOZm9ybWF0SW52ZXN0b3IAAAAFAAAAC3RvdGFsQW1vdW50AAAAD3JlbWFpbmluZ0Ftb3VudAAAABdjbGFpbWVkUHJpY2VBc3NldEFtb3VudAAAABVjbGFpbWVkSWRvQXNzZXRBbW91bnQAAAARbGFzdENsYWltZWRIZWlnaHQJAQAAAA9mb3JtYXRJbnZlc3RvclMAAAAFCQABpAAAAAEFAAAAC3RvdGFsQW1vdW50CQABpAAAAAEFAAAAD3JlbWFpbmluZ0Ftb3VudAkAAaQAAAABBQAAABdjbGFpbWVkUHJpY2VBc3NldEFtb3VudAkAAaQAAAABBQAAABVjbGFpbWVkSWRvQXNzZXRBbW91bnQJAAGkAAAAAQUAAAARbGFzdENsYWltZWRIZWlnaHQBAAAAE2Zvcm1hdEhpc3RvcnlSZWNvcmQAAAACAAAAEHByaWNlQXNzZXRBbW91bnQAAAAOaWRvQXNzZXRBbW91bnQJAAS5AAAAAgkABEwAAAACAgAAAAglZCVkJWQlZAkABEwAAAACCQABpAAAAAEFAAAABmhlaWdodAkABEwAAAACCQABpAAAAAEIBQAAAAlsYXN0QmxvY2sAAAAJdGltZXN0YW1wCQAETAAAAAIJAAGkAAAAAQUAAAAQcHJpY2VBc3NldEFtb3VudAkABEwAAAACCQABpAAAAAEFAAAADmlkb0Fzc2V0QW1vdW50BQAAAANuaWwFAAAAA1NFUAEAAAAJa2V5Q29uZmlnAAAAAAIAAAAKJXNfX2NvbmZpZwEAAAALa2V5SW52ZXN0b3IAAAABAAAAC3VzZXJBZGRyZXNzCQABLAAAAAICAAAABCVzX18FAAAAC3VzZXJBZGRyZXNzAQAAAAlrZXlUb3RhbHMAAAAAAgAAAAolc19fdG90YWxzAQAAABlrZXlPcGVyYXRpb25IaXN0b3J5UmVjb3JkAAAAAwAAAAR0eXBlAAAAC3VzZXJBZGRyZXNzAAAABnR4SWQ1OAkABLkAAAACCQAETAAAAAICAAAAESVzJXMlcyVzX19oaXN0b3J5CQAETAAAAAIFAAAABHR5cGUJAARMAAAAAgUAAAALdXNlckFkZHJlc3MJAARMAAAAAgUAAAAGdHhJZDU4BQAAAANuaWwFAAAAA1NFUAEAAAAPcmVhZENvbmZpZ0FycmF5AAAAAAkABLUAAAACCQEAAAAPZ2V0U3RyaW5nT3JGYWlsAAAAAQkBAAAACWtleUNvbmZpZwAAAAAFAAAAA1NFUAEAAAAjcmVhZFRvdGFsc0FycmF5T3JEZWZhdWx0QnlDdXN0b21LZXkAAAABAAAACWN1c3RvbUtleQkABLUAAAACCQEAAAALdmFsdWVPckVsc2UAAAACCQAEIgAAAAEFAAAACWN1c3RvbUtleQkBAAAAD2Zvcm1hdEludmVzdG9yUwAAAAUCAAAAATACAAAAATACAAAAATACAAAAATACAAAAATAFAAAAA1NFUAEAAAAYcmVhZFRvdGFsc0FycmF5T3JEZWZhdWx0AAAAAAkBAAAAI3JlYWRUb3RhbHNBcnJheU9yRGVmYXVsdEJ5Q3VzdG9tS2V5AAAAAQkBAAAACWtleVRvdGFscwAAAAABAAAAGnJlYWRJbnZlc3RvckFycmF5T3JEZWZhdWx0AAAAAQAAAAt1c2VyQWRkcmVzcwkBAAAAI3JlYWRUb3RhbHNBcnJheU9yRGVmYXVsdEJ5Q3VzdG9tS2V5AAAAAQkBAAAAC2tleUludmVzdG9yAAAAAQUAAAALdXNlckFkZHJlc3MBAAAAF3JlYWRJbnZlc3RvckFycmF5T3JGYWlsAAAAAQAAAAt1c2VyQWRkcmVzcwkABLUAAAACCQEAAAAPZ2V0U3RyaW5nT3JGYWlsAAAAAQkBAAAAC2tleUludmVzdG9yAAAAAQUAAAALdXNlckFkZHJlc3MFAAAAA1NFUAAAAAAVSWR4RGlmZlRvdGFsSW5jcmVtZW50AAAAAAAAAAAAAAAAACRJZHhEaWZmUmVtYWluaW5nUHJpY2VBbW91bnRJbmNyZW1lbnQAAAAAAAAAAAEAAAAAIklkeERpZmZDbGFpbWVkUHJpY2VBbW91bnRJbmNyZW1lbnQAAAAAAAAAAAIAAAAAJUlkeERpZmZDbGFpbWVkSWRvQXNzZXRBbW91bnRJbmNyZW1lbnQAAAAAAAAAAAMBAAAAC1RvdGFsc0VudHJ5AAAABAAAAANrZXkAAAAJb3JpZ0FycmF5AAAADWluY3JlbWVudERpZmYAAAAUbmV3TGFzdENsYWltZWRIZWlnaHQEAAAAC3RvdGFsQW1vdW50CQEAAAANcGFyc2VJbnRWYWx1ZQAAAAEJAAGRAAAAAgUAAAAJb3JpZ0FycmF5BQAAABFJZHhJbnZUb3RhbEFtb3VudAQAAAAPcmVtYWluaW5nQW1vdW50CQEAAAANcGFyc2VJbnRWYWx1ZQAAAAEJAAGRAAAAAgUAAAAJb3JpZ0FycmF5BQAAABVJZHhJbnZSZW1haW5pbmdBbW91bnQEAAAAF2NsYWltZWRQcmljZUFzc2V0QW1vdW50CQEAAAANcGFyc2VJbnRWYWx1ZQAAAAEJAAGRAAAAAgUAAAAJb3JpZ0FycmF5BQAAAB1JZHhJbnZDbGFpbWVkUHJpY2VBc3NldEFtb3VudAQAAAAVY2xhaW1lZElkb0Fzc2V0QW1vdW50CQEAAAANcGFyc2VJbnRWYWx1ZQAAAAEJAAGRAAAAAgUAAAAJb3JpZ0FycmF5BQAAABtJZHhJbnZDbGFpbWVkSWRvQXNzZXRBbW91bnQEAAAAEWxhc3RDbGFpbWVkSGVpZ2h0CQEAAAANcGFyc2VJbnRWYWx1ZQAAAAEJAAGRAAAAAgUAAAAJb3JpZ0FycmF5BQAAABdJZHhJbnZMYXN0Q2xhaW1lZEhlaWdodAQAAAAObmV3VG90YWxBbW91bnQJAABkAAAAAgUAAAALdG90YWxBbW91bnQJAAGRAAAAAgUAAAANaW5jcmVtZW50RGlmZgUAAAAVSWR4RGlmZlRvdGFsSW5jcmVtZW50BAAAABJuZXdSZW1haW5pbmdBbW91bnQJAABkAAAAAgUAAAAPcmVtYWluaW5nQW1vdW50CQABkQAAAAIFAAAADWluY3JlbWVudERpZmYFAAAAJElkeERpZmZSZW1haW5pbmdQcmljZUFtb3VudEluY3JlbWVudAQAAAAabmV3Q2xhaW1lZFByaWNlQXNzZXRBbW91bnQJAABkAAAAAgUAAAAXY2xhaW1lZFByaWNlQXNzZXRBbW91bnQJAAGRAAAAAgUAAAANaW5jcmVtZW50RGlmZgUAAAAiSWR4RGlmZkNsYWltZWRQcmljZUFtb3VudEluY3JlbWVudAQAAAAYbmV3Q2xhaW1lZElkb0Fzc2V0QW1vdW50CQAAZAAAAAIFAAAAFWNsYWltZWRJZG9Bc3NldEFtb3VudAkAAZEAAAACBQAAAA1pbmNyZW1lbnREaWZmBQAAACVJZHhEaWZmQ2xhaW1lZElkb0Fzc2V0QW1vdW50SW5jcmVtZW50AwkAAGYAAAACAAAAAAAAAAAABQAAABJuZXdSZW1haW5pbmdBbW91bnQJAAACAAAAAQIAAAAMaW52YWxpZCBtYXRoCQEAAAALU3RyaW5nRW50cnkAAAACBQAAAANrZXkJAQAAAA5mb3JtYXRJbnZlc3RvcgAAAAUFAAAADm5ld1RvdGFsQW1vdW50BQAAABJuZXdSZW1haW5pbmdBbW91bnQFAAAAGm5ld0NsYWltZWRQcmljZUFzc2V0QW1vdW50BQAAABhuZXdDbGFpbWVkSWRvQXNzZXRBbW91bnQFAAAAFG5ld0xhc3RDbGFpbWVkSGVpZ2h0AQAAABtJbnZlc3RPcGVyYXRpb25IaXN0b3J5RW50cnkAAAAEAAAAC3VzZXJBZGRyZXNzAAAAEHByaWNlQXNzZXRBbW91bnQAAAAOaWRvQXNzZXRBbW91bnQAAAAEdHhJZAkBAAAAC1N0cmluZ0VudHJ5AAAAAgkBAAAAGWtleU9wZXJhdGlvbkhpc3RvcnlSZWNvcmQAAAADAgAAAAZpbnZlc3QFAAAAC3VzZXJBZGRyZXNzCQACWAAAAAEFAAAABHR4SWQJAQAAABNmb3JtYXRIaXN0b3J5UmVjb3JkAAAAAgUAAAAQcHJpY2VBc3NldEFtb3VudAUAAAAOaWRvQXNzZXRBbW91bnQBAAAAGkNsYWltT3BlcmF0aW9uSGlzdG9yeUVudHJ5AAAABAAAAAt1c2VyQWRkcmVzcwAAABBwcmljZUFzc2V0QW1vdW50AAAADmlkb0Fzc2V0QW1vdW50AAAABHR4SWQJAQAAAAtTdHJpbmdFbnRyeQAAAAIJAQAAABlrZXlPcGVyYXRpb25IaXN0b3J5UmVjb3JkAAAAAwIAAAAFY2xhaW0FAAAAC3VzZXJBZGRyZXNzCQACWAAAAAEFAAAABHR4SWQJAQAAABNmb3JtYXRIaXN0b3J5UmVjb3JkAAAAAgUAAAAQcHJpY2VBc3NldEFtb3VudAUAAAAOaWRvQXNzZXRBbW91bnQBAAAADWludGVybmFsQ2xhaW0AAAADAAAAEGNsYWltZWRBc3NldElkNTgAAAALdXNlckFkZHJlc3MAAAAEdHhJZAQAAAAIY2ZnQXJyYXkJAQAAAA9yZWFkQ29uZmlnQXJyYXkAAAAABAAAAApjbGFpbVN0YXJ0CQEAAAANcGFyc2VJbnRWYWx1ZQAAAAEJAAGRAAAAAgUAAAAIY2ZnQXJyYXkFAAAAEElkeENmZ0NsYWltU3RhcnQEAAAADWNsYWltRHVyYXRpb24JAQAAAA1wYXJzZUludFZhbHVlAAAAAQkAAZEAAAACBQAAAAhjZmdBcnJheQUAAAATSWR4Q2ZnQ2xhaW1EdXJhdGlvbgQAAAAIY2xhaW1FbmQJAABkAAAAAgUAAAAKY2xhaW1TdGFydAUAAAANY2xhaW1EdXJhdGlvbgQAAAAFcHJpY2UJAQAAAA1wYXJzZUludFZhbHVlAAAAAQkAAZEAAAACBQAAAAhjZmdBcnJheQUAAAALSWR4Q2ZnUHJpY2UEAAAACXByaWNlTXVsdAkBAAAADXBhcnNlSW50VmFsdWUAAAABCQABkQAAAAIFAAAACGNmZ0FycmF5BQAAAA9JZHhDZmdQcmljZU11bHQEAAAADGlkb0Fzc2V0SWQ1OAkAAZEAAAACBQAAAAhjZmdBcnJheQUAAAAQSWR4Q2ZnSWRvQXNzZXRJZAQAAAAKaWRvQXNzZXRJZAkAAlkAAAABBQAAAAxpZG9Bc3NldElkNTgEAAAADGlkb0Fzc2V0TXVsdAkBAAAADXBhcnNlSW50VmFsdWUAAAABCQABkQAAAAIFAAAACGNmZ0FycmF5BQAAABJJZHhDZmdJZG9Bc3NldE11bHQEAAAADnByaWNlQXNzZXRJZDU4CQABkQAAAAIFAAAACGNmZ0FycmF5BQAAABJJZHhDZmdQcmljZUFzc2V0SWQEAAAADHByaWNlQXNzZXRJZAkAAlkAAAABBQAAAA5wcmljZUFzc2V0SWQ1OAQAAAAOcHJpY2VBc3NldE11bHQJAQAAAA1wYXJzZUludFZhbHVlAAAAAQkAAZEAAAACBQAAAAhjZmdBcnJheQUAAAAUSWR4Q2ZnUHJpY2VBc3NldE11bHQEAAAADXVzZXJBZGRyZXNzNTgJAAQlAAAAAQUAAAALdXNlckFkZHJlc3MEAAAAD29yaWdJbnZlc3RBcnJheQkBAAAAF3JlYWRJbnZlc3RvckFycmF5T3JGYWlsAAAAAQUAAAANdXNlckFkZHJlc3M1OAQAAAARaW52ZXN0VG90YWxBbW91bnQJAQAAAA1wYXJzZUludFZhbHVlAAAAAQkAAZEAAAACBQAAAA9vcmlnSW52ZXN0QXJyYXkFAAAAEUlkeEludlRvdGFsQW1vdW50BAAAABdpbnZlc3RMYXN0Q2xhaW1lZEhlaWdodAkBAAAADXBhcnNlSW50VmFsdWUAAAABCQABkQAAAAIFAAAAD29yaWdJbnZlc3RBcnJheQUAAAAXSWR4SW52TGFzdENsYWltZWRIZWlnaHQEAAAAFG5ld0NsYWltUGVyaW9kSGVpZ2h0AwkAAGYAAAACBQAAAAZoZWlnaHQFAAAACGNsYWltRW5kBQAAAAhjbGFpbUVuZAMJAABmAAAAAgUAAAAKY2xhaW1TdGFydAUAAAAGaGVpZ2h0BQAAAApjbGFpbVN0YXJ0BQAAAAZoZWlnaHQEAAAADmNsYWltaW5nQmxvY2tzCQAAZQAAAAIFAAAAFG5ld0NsYWltUGVyaW9kSGVpZ2h0BQAAABdpbnZlc3RMYXN0Q2xhaW1lZEhlaWdodAQAAAAYY2xhaW1pbmdQcmljZUFzc2V0QW1vdW50CQAAawAAAAMFAAAAEWludmVzdFRvdGFsQW1vdW50BQAAAA5jbGFpbWluZ0Jsb2NrcwUAAAANY2xhaW1EdXJhdGlvbgQAAAAWY2xhaW1pbmdJZG9Bc3NldEFtb3VudAkBAAAAHWNvbnZlcnRQcmljZUFzc2V0SW50b0lkb0Fzc2V0AAAABQUAAAAYY2xhaW1pbmdQcmljZUFzc2V0QW1vdW50BQAAAA5wcmljZUFzc2V0TXVsdAUAAAAFcHJpY2UFAAAACXByaWNlTXVsdAUAAAAMaWRvQXNzZXRNdWx0AwkAAAAAAAACBQAAABBjbGFpbWVkQXNzZXRJZDU4BQAAAA5wcmljZUFzc2V0SWQ1OAkABRgAAAAGCQAETAAAAAIAAAAAAAAAAAAJAARMAAAAAgkBAAAAAS0AAAABBQAAABhjbGFpbWluZ1ByaWNlQXNzZXRBbW91bnQJAARMAAAAAgUAAAAYY2xhaW1pbmdQcmljZUFzc2V0QW1vdW50CQAETAAAAAIAAAAAAAAAAAAFAAAAA25pbAUAAAAYY2xhaW1pbmdQcmljZUFzc2V0QW1vdW50BQAAAAxwcmljZUFzc2V0SWQFAAAAD29yaWdJbnZlc3RBcnJheQUAAAAUbmV3Q2xhaW1QZXJpb2RIZWlnaHQJAARMAAAAAgUAAAAYY2xhaW1pbmdQcmljZUFzc2V0QW1vdW50CQAETAAAAAIFAAAAFmNsYWltaW5nSWRvQXNzZXRBbW91bnQFAAAAA25pbAMJAAAAAAAAAgUAAAAQY2xhaW1lZEFzc2V0SWQ1OAUAAAAMaWRvQXNzZXRJZDU4CQAFGAAAAAYJAARMAAAAAgAAAAAAAAAAAAkABEwAAAACCQEAAAABLQAAAAEFAAAAGGNsYWltaW5nUHJpY2VBc3NldEFtb3VudAkABEwAAAACAAAAAAAAAAAACQAETAAAAAIFAAAAFmNsYWltaW5nSWRvQXNzZXRBbW91bnQFAAAAA25pbAUAAAAWY2xhaW1pbmdJZG9Bc3NldEFtb3VudAUAAAAKaWRvQXNzZXRJZAUAAAAPb3JpZ0ludmVzdEFycmF5BQAAABRuZXdDbGFpbVBlcmlvZEhlaWdodAkABEwAAAACBQAAABhjbGFpbWluZ1ByaWNlQXNzZXRBbW91bnQJAARMAAAAAgUAAAAWY2xhaW1pbmdJZG9Bc3NldEFtb3VudAUAAAADbmlsCQAAAgAAAAEJAAEsAAAAAgIAAAAVdW5zdXBwb3J0ZWQgYXNzZXRJZDogBQAAABBjbGFpbWVkQXNzZXRJZDU4AAAABAAAAAFpAQAAAAtjb25zdHJ1Y3RvcgAAAAcAAAAIaWRvU3RhcnQAAAALaWRvRHVyYXRpb24AAAAKY2xhaW1TdGFydAAAAA1jbGFpbUR1cmF0aW9uAAAABXByaWNlAAAADnByaWNlQXNzZXRJZDU4AAAAD21pbkludmVzdEFtb3VudAQAAAAJcHJpY2VNdWx0CQAAaAAAAAIJAABoAAAAAgAAAAAAAAAAZAAAAAAAAAAD6AAAAAAAAAAD6AQAAAAGaWRvRW5kCQAAZAAAAAIFAAAACGlkb1N0YXJ0BQAAAAtpZG9EdXJhdGlvbgMJAQAAAAlpc0RlZmluZWQAAAABCQAEIgAAAAEJAQAAAAlrZXlDb25maWcAAAAACQAAAgAAAAECAAAAE2FscmVhZHkgaW5pdGlhbGl6ZWQDCQEAAAACIT0AAAACAgAAACMzTjRBaWI1aXViV2lHTXpkVGg2d1dpVkRWYm8zMm9lVlVtSAkABCUAAAABCAUAAAABaQAAAAZjYWxsZXIJAAACAAAAAQIAAAAObm90IGF1dGhvcml6ZWQDCQEAAAACIT0AAAACCQABkAAAAAEIBQAAAAFpAAAACHBheW1lbnRzAAAAAAAAAAABCQAAAgAAAAECAAAAImV4YWN0bHkgMSBwYXltZW50IG11c3QgYmUgYXR0YWNoZWQDCQAAZwAAAAIFAAAABmlkb0VuZAUAAAAKY2xhaW1TdGFydAkAAAIAAAABAgAAACZjbGFpbVN0YXJ0IG11c3QgYmUgZ3JlYXRlciB0aGFuIGlkb0VuZAQAAAADcG10CQEAAAAFdmFsdWUAAAABCQABkQAAAAIIBQAAAAFpAAAACHBheW1lbnRzAAAAAAAAAAAABAAAAAppZG9Bc3NldElkCQEAAAAFdmFsdWUAAAABCAUAAAADcG10AAAAB2Fzc2V0SWQEAAAADGlkb0Fzc2V0SW5mbwkBAAAAE3ZhbHVlT3JFcnJvck1lc3NhZ2UAAAACCQAD7AAAAAEFAAAACmlkb0Fzc2V0SWQCAAAAG2ZhaWwgdG8gbG9hZCBpZG8gYXNzZXQgaW5mbwQAAAAMaWRvQXNzZXRJZDU4CQACWAAAAAEFAAAACmlkb0Fzc2V0SWQEAAAADGlkb0Fzc2V0TXVsdAkAAGwAAAAGAAAAAAAAAAAKAAAAAAAAAAAACAUAAAAMaWRvQXNzZXRJbmZvAAAACGRlY2ltYWxzAAAAAAAAAAAAAAAAAAAAAAAABQAAAARET1dOBAAAAAxwcmljZUFzc2V0SWQJAAJZAAAAAQUAAAAOcHJpY2VBc3NldElkNTgEAAAADnByaWNlQXNzZXRJbmZvCQEAAAATdmFsdWVPckVycm9yTWVzc2FnZQAAAAIJAAPsAAAAAQUAAAAMcHJpY2VBc3NldElkAgAAAB1mYWlsIHRvIGxvYWQgcHJpY2UgYXNzZXQgaW5mbwQAAAAOcHJpY2VBc3NldE11bHQJAABsAAAABgAAAAAAAAAACgAAAAAAAAAAAAgFAAAADnByaWNlQXNzZXRJbmZvAAAACGRlY2ltYWxzAAAAAAAAAAAAAAAAAAAAAAAABQAAAARET1dOCQAETAAAAAIJAQAAAAtTdHJpbmdFbnRyeQAAAAIJAQAAAAlrZXlDb25maWcAAAAACQEAAAAMZnJvbWF0Q29uZmlnAAAACwUAAAAIaWRvU3RhcnQFAAAAC2lkb0R1cmF0aW9uBQAAAApjbGFpbVN0YXJ0BQAAAA1jbGFpbUR1cmF0aW9uBQAAAAVwcmljZQUAAAAJcHJpY2VNdWx0BQAAAAxpZG9Bc3NldElkNTgFAAAADGlkb0Fzc2V0TXVsdAUAAAAOcHJpY2VBc3NldElkNTgFAAAADnByaWNlQXNzZXRNdWx0BQAAAA9taW5JbnZlc3RBbW91bnQFAAAAA25pbAAAAAFpAQAAAAZpbnZlc3QAAAAABAAAAAhjZmdBcnJheQkBAAAAD3JlYWRDb25maWdBcnJheQAAAAAEAAAACGlkb1N0YXJ0CQEAAAANcGFyc2VJbnRWYWx1ZQAAAAEJAAGRAAAAAgUAAAAIY2ZnQXJyYXkFAAAADklkeENmZ0lkb1N0YXJ0BAAAAAtpZG9EdXJhdGlvbgkBAAAADXBhcnNlSW50VmFsdWUAAAABCQABkQAAAAIFAAAACGNmZ0FycmF5BQAAABFJZHhDZmdJZG9EdXJhdGlvbgQAAAAGaWRvRW5kCQAAZAAAAAIFAAAACGlkb1N0YXJ0BQAAAAtpZG9EdXJhdGlvbgQAAAAKY2xhaW1TdGFydAkBAAAADXBhcnNlSW50VmFsdWUAAAABCQABkQAAAAIFAAAACGNmZ0FycmF5BQAAABBJZHhDZmdDbGFpbVN0YXJ0BAAAAA1jbGFpbUR1cmF0aW9uCQEAAAANcGFyc2VJbnRWYWx1ZQAAAAEJAAGRAAAAAgUAAAAIY2ZnQXJyYXkFAAAAE0lkeENmZ0NsYWltRHVyYXRpb24EAAAABXByaWNlCQEAAAANcGFyc2VJbnRWYWx1ZQAAAAEJAAGRAAAAAgUAAAAIY2ZnQXJyYXkFAAAAC0lkeENmZ1ByaWNlBAAAAAlwcmljZU11bHQJAQAAAA1wYXJzZUludFZhbHVlAAAAAQkAAZEAAAACBQAAAAhjZmdBcnJheQUAAAAPSWR4Q2ZnUHJpY2VNdWx0BAAAAAxpZG9Bc3NldElkNTgJAAGRAAAAAgUAAAAIY2ZnQXJyYXkFAAAAEElkeENmZ0lkb0Fzc2V0SWQEAAAACmlkb0Fzc2V0SWQJAAJZAAAAAQUAAAAMaWRvQXNzZXRJZDU4BAAAAAxpZG9Bc3NldE11bHQJAQAAAA1wYXJzZUludFZhbHVlAAAAAQkAAZEAAAACBQAAAAhjZmdBcnJheQUAAAASSWR4Q2ZnSWRvQXNzZXRNdWx0BAAAAA5wcmljZUFzc2V0SWQ1OAkAAZEAAAACBQAAAAhjZmdBcnJheQUAAAASSWR4Q2ZnUHJpY2VBc3NldElkBAAAAAxwcmljZUFzc2V0SWQJAAJZAAAAAQUAAAAOcHJpY2VBc3NldElkNTgEAAAADnByaWNlQXNzZXRNdWx0CQEAAAANcGFyc2VJbnRWYWx1ZQAAAAEJAAGRAAAAAgUAAAAIY2ZnQXJyYXkFAAAAFElkeENmZ1ByaWNlQXNzZXRNdWx0BAAAAA5taW5JdmVzdEFtb3VudAkBAAAADXBhcnNlSW50VmFsdWUAAAABCQABkQAAAAIFAAAACGNmZ0FycmF5BQAAABVJZHhDZmdNaW5JbnZlc3RBbW91bnQEAAAAC3VzZXJBZGRyZXNzCQAEJQAAAAEIBQAAAAFpAAAABmNhbGxlcgMJAABmAAAAAgUAAAAIaWRvU3RhcnQFAAAABmhlaWdodAkAAAIAAAABAgAAABxpZG8gaGFzIG5vdCBiZWVuIHN0YXJ0ZWQgeWV0AwkAAGYAAAACBQAAAAZoZWlnaHQFAAAABmlkb0VuZAkAAAIAAAABAgAAABppZG8gaGFzIGJlZW4gYWxyZWFkeSBlbmRlZAMJAQAAAAIhPQAAAAIJAAGQAAAAAQgFAAAAAWkAAAAIcGF5bWVudHMAAAAAAAAAAAEJAAACAAAAAQIAAAAdZXhhY3RseSAxIHBheW1lbnQgaXMgZXhwZWN0ZWQEAAAAA3BtdAkBAAAABXZhbHVlAAAAAQkAAZEAAAACCAUAAAABaQAAAAhwYXltZW50cwAAAAAAAAAAAAQAAAAKcG10QXNzZXRJZAkBAAAABXZhbHVlAAAAAQgFAAAAA3BtdAAAAAdhc3NldElkBAAAAAlwbXRBbW91bnQIBQAAAANwbXQAAAAGYW1vdW50AwkBAAAAAiE9AAAAAgUAAAAKcG10QXNzZXRJZAUAAAAMcHJpY2VBc3NldElkCQAAAgAAAAEJAAEsAAAAAgkAASwAAAACAgAAABppbnZhbGlkIHBheW1lbnQgYXNzZXQgaWQ6IAkAAlgAAAABBQAAAApwbXRBc3NldElkAgAAAAwgaXMgZXhwZWN0ZWQDCQAAZgAAAAIFAAAADm1pbkl2ZXN0QW1vdW50BQAAAAlwbXRBbW91bnQJAAACAAAAAQkAASwAAAACCQABLAAAAAIJAAEsAAAAAgIAAAAzcGF5bWVudCBhbW91bnQgaXMgbGVzcyB0aGVuIG1pbiBhbGxvd2VkOiBwbXRBbW91bnQ9CQABpAAAAAEFAAAACXBtdEFtb3VudAIAAAAQIG1pbkl2ZXN0QW1vdW50PQkAAaQAAAABBQAAAA5taW5JdmVzdEFtb3VudAQAAAARb3JpZ0ludmVzdG9yQXJyYXkJAQAAABpyZWFkSW52ZXN0b3JBcnJheU9yRGVmYXVsdAAAAAEFAAAAC3VzZXJBZGRyZXNzBAAAAA9vcmlnVG90YWxzQXJyYXkJAQAAABhyZWFkVG90YWxzQXJyYXlPckRlZmF1bHQAAAAABAAAABNuZXdQcmljZVRvdGFsQW1vdW50CQAAZAAAAAIJAQAAAA1wYXJzZUludFZhbHVlAAAAAQkAAZEAAAACBQAAAA9vcmlnVG90YWxzQXJyYXkFAAAAEUlkeEludlRvdGFsQW1vdW50BQAAAAlwbXRBbW91bnQEAAAAFnJlcXVpcmVkSWRvQXNzZXRBbW91bnQJAQAAAB1jb252ZXJ0UHJpY2VBc3NldEludG9JZG9Bc3NldAAAAAUFAAAAE25ld1ByaWNlVG90YWxBbW91bnQFAAAADnByaWNlQXNzZXRNdWx0BQAAAAVwcmljZQUAAAAJcHJpY2VNdWx0BQAAAAxpZG9Bc3NldE11bHQDCQAAZgAAAAIFAAAAFnJlcXVpcmVkSWRvQXNzZXRBbW91bnQJAAPwAAAAAgUAAAAEdGhpcwUAAAAKaWRvQXNzZXRJZAkAAAIAAAABAgAAADlJRE8gYXNzZXQgaGFzIGJlZW4gLSBzb2xkIGNvbnNpZGVyIHRvIHVzZSBzbWFsbGVyIHBheW1lbnQEAAAACnRvdGFsc0RpZmYJAARMAAAAAgUAAAAJcG10QW1vdW50CQAETAAAAAIFAAAACXBtdEFtb3VudAkABEwAAAACAAAAAAAAAAAACQAETAAAAAIAAAAAAAAAAAAFAAAAA25pbAkABEwAAAACCQEAAAALVG90YWxzRW50cnkAAAAECQEAAAALa2V5SW52ZXN0b3IAAAABBQAAAAt1c2VyQWRkcmVzcwUAAAARb3JpZ0ludmVzdG9yQXJyYXkFAAAACnRvdGFsc0RpZmYFAAAACmNsYWltU3RhcnQJAARMAAAAAgkBAAAAC1RvdGFsc0VudHJ5AAAABAkBAAAACWtleVRvdGFscwAAAAAFAAAAD29yaWdUb3RhbHNBcnJheQUAAAAKdG90YWxzRGlmZgUAAAAKY2xhaW1TdGFydAkABEwAAAACCQEAAAAbSW52ZXN0T3BlcmF0aW9uSGlzdG9yeUVudHJ5AAAABAUAAAALdXNlckFkZHJlc3MFAAAACXBtdEFtb3VudAAAAAAAAAAAAAgFAAAAAWkAAAANdHJhbnNhY3Rpb25JZAUAAAADbmlsAAAAAWkBAAAABWNsYWltAAAAAgAAABBjbGFpbWVkQXNzZXRJZDU4AAAADXVzZXJBZGRyZXNzNTgEAAAAD2NhbGxlckFkZHJlc3M1OAkABCUAAAABCAUAAAABaQAAAAZjYWxsZXIDCQEAAAACIT0AAAACBQAAAA11c2VyQWRkcmVzczU4BQAAAA9jYWxsZXJBZGRyZXNzNTgJAAACAAAAAQIAAAAObm90IGF1dGhvcml6ZWQEAAAAEGNsYWltUmVzdWx0VHVwbGUJAQAAAA1pbnRlcm5hbENsYWltAAAAAwUAAAAQY2xhaW1lZEFzc2V0SWQ1OAgFAAAAAWkAAAAGY2FsbGVyCAUAAAABaQAAAA10cmFuc2FjdGlvbklkBAAAAAp0b3RhbHNEaWZmCAUAAAAQY2xhaW1SZXN1bHRUdXBsZQAAAAJfMQQAAAAJb3V0QW1vdW50CAUAAAAQY2xhaW1SZXN1bHRUdXBsZQAAAAJfMgQAAAAKb3V0QXNzZXRJZAgFAAAAEGNsYWltUmVzdWx0VHVwbGUAAAACXzMEAAAAD29yaWdJbnZlc3RBcnJheQgFAAAAEGNsYWltUmVzdWx0VHVwbGUAAAACXzQEAAAAFG5ld0NsYWltUGVyaW9kSGVpZ2h0CAUAAAAQY2xhaW1SZXN1bHRUdXBsZQAAAAJfNQQAAAAaY2xhaW1lZFByaWNlQW1vdW50RnJvbURpZmYJAAGRAAAAAgUAAAAKdG90YWxzRGlmZgUAAAAiSWR4RGlmZkNsYWltZWRQcmljZUFtb3VudEluY3JlbWVudAQAAAAdY2xhaW1lZElkb0Fzc2V0QW1vdW50RnJvbURpZmYJAAGRAAAAAgUAAAAKdG90YWxzRGlmZgUAAAAlSWR4RGlmZkNsYWltZWRJZG9Bc3NldEFtb3VudEluY3JlbWVudAkABRQAAAACCQAETAAAAAIJAQAAAA5TY3JpcHRUcmFuc2ZlcgAAAAMIBQAAAAFpAAAABmNhbGxlcgUAAAAJb3V0QW1vdW50BQAAAApvdXRBc3NldElkCQAETAAAAAIJAQAAAAtUb3RhbHNFbnRyeQAAAAQJAQAAAAtrZXlJbnZlc3RvcgAAAAEFAAAADXVzZXJBZGRyZXNzNTgFAAAAD29yaWdJbnZlc3RBcnJheQUAAAAKdG90YWxzRGlmZgUAAAAUbmV3Q2xhaW1QZXJpb2RIZWlnaHQJAARMAAAAAgkBAAAAC1RvdGFsc0VudHJ5AAAABAkBAAAACWtleVRvdGFscwAAAAAJAQAAABhyZWFkVG90YWxzQXJyYXlPckRlZmF1bHQAAAAABQAAAAp0b3RhbHNEaWZmBQAAABRuZXdDbGFpbVBlcmlvZEhlaWdodAkABEwAAAACCQEAAAAaQ2xhaW1PcGVyYXRpb25IaXN0b3J5RW50cnkAAAAEBQAAAA11c2VyQWRkcmVzczU4BQAAABpjbGFpbWVkUHJpY2VBbW91bnRGcm9tRGlmZgUAAAAdY2xhaW1lZElkb0Fzc2V0QW1vdW50RnJvbURpZmYIBQAAAAFpAAAADXRyYW5zYWN0aW9uSWQFAAAAA25pbAUAAAAEdW5pdAAAAAFpAQAAAA1jbGFpbVJFQURPTkxZAAAAAgAAABBjbGFpbWVkQXNzZXRJZDU4AAAADXVzZXJBZGRyZXNzNTgEAAAAEGNsYWltUmVzdWx0VHVwbGUJAQAAAA1pbnRlcm5hbENsYWltAAAAAwUAAAAQY2xhaW1lZEFzc2V0SWQ1OAkBAAAAEUBleHRyTmF0aXZlKDEwNjIpAAAAAQUAAAANdXNlckFkZHJlc3M1OAkAAlkAAAABAgAAAAAEAAAACnRvdGFsc0RpZmYIBQAAABBjbGFpbVJlc3VsdFR1cGxlAAAAAl8xBAAAAAlvdXRBbW91bnQIBQAAABBjbGFpbVJlc3VsdFR1cGxlAAAAAl8yBAAAAApvdXRBc3NldElkCAUAAAAQY2xhaW1SZXN1bHRUdXBsZQAAAAJfMwQAAAAPb3JpZ0ludmVzdEFycmF5CAUAAAAQY2xhaW1SZXN1bHRUdXBsZQAAAAJfNAQAAAAUbmV3Q2xhaW1QZXJpb2RIZWlnaHQIBQAAABBjbGFpbVJlc3VsdFR1cGxlAAAAAl81BAAAABVhdmFpbGFibGVUb0NsYWltQXJyYXkIBQAAABBjbGFpbVJlc3VsdFR1cGxlAAAAAl82BAAAABthdmFpbGFibGVQcmljZUFtb3VudFRvQ2xhaW0JAAGRAAAAAgUAAAAVYXZhaWxhYmxlVG9DbGFpbUFycmF5AAAAAAAAAAAABAAAABlhdmFpbGFibGVJZG9BbW91bnRUb0NsYWltCQABkQAAAAIFAAAAFWF2YWlsYWJsZVRvQ2xhaW1BcnJheQAAAAAAAAAAAQkABRQAAAACBQAAAANuaWwJAAS5AAAAAgkABEwAAAACAgAAAAYlcyVkJWQJAARMAAAAAgUAAAANdXNlckFkZHJlc3M1OAkABEwAAAACCQABpAAAAAEFAAAAG2F2YWlsYWJsZVByaWNlQW1vdW50VG9DbGFpbQkABEwAAAACCQABpAAAAAEFAAAAGWF2YWlsYWJsZUlkb0Ftb3VudFRvQ2xhaW0FAAAAA25pbAUAAAADU0VQAAAAALRRY/Q=", "chainId": 84, "height": 1674128, "applicationStatus": "succeeded", "spentComplexity": 0 } View: original | compacted Prev: 4FUjXe68xDAhr1gnzRmuPBYENxxrTnJ9rQaGN6tmbVyU Next: EVPGbwWXxQU4D3xZoNFV4eGgJ2RcbmLD9aGaW6T9WiS9 Diff:
OldNewDifferences
139139 let investLastClaimedHeight = parseIntValue(origInvestArray[IdxInvLastClaimedHeight])
140140 let newClaimPeriodHeight = if ((height > claimEnd))
141141 then claimEnd
142- else height
143- let claimingBlocks = (investLastClaimedHeight - newClaimPeriodHeight)
142+ else if ((claimStart > height))
143+ then claimStart
144+ else height
145+ let claimingBlocks = (newClaimPeriodHeight - investLastClaimedHeight)
144146 let claimingPriceAssetAmount = fraction(investTotalAmount, claimingBlocks, claimDuration)
145147 let claimingIdoAssetAmount = convertPriceAssetIntoIdoAsset(claimingPriceAssetAmount, priceAssetMult, price, priceMult, idoAssetMult)
146- let claimResultTuple = if ((claimedAssetId58 == priceAssetId58))
147- then $Tuple3([0, -(claimingPriceAssetAmount), claimingPriceAssetAmount, 0], claimingPriceAssetAmount, priceAssetId)
148+ if ((claimedAssetId58 == priceAssetId58))
149+ then $Tuple6([0, -(claimingPriceAssetAmount), claimingPriceAssetAmount, 0], claimingPriceAssetAmount, priceAssetId, origInvestArray, newClaimPeriodHeight, [claimingPriceAssetAmount, claimingIdoAssetAmount])
148150 else if ((claimedAssetId58 == idoAssetId58))
149- then $Tuple3([0, -(claimingPriceAssetAmount), 0, claimingIdoAssetAmount], claimingIdoAssetAmount, idoAssetId)
151+ then $Tuple6([0, -(claimingPriceAssetAmount), 0, claimingIdoAssetAmount], claimingIdoAssetAmount, idoAssetId, origInvestArray, newClaimPeriodHeight, [claimingPriceAssetAmount, claimingIdoAssetAmount])
150152 else throw(("unsupported assetId: " + claimedAssetId58))
151- let totalsDiff = claimResultTuple._1
152- let outAmount = claimResultTuple._2
153- let outAssetId = claimResultTuple._3
154- let claimedPriceAmountFromDiff = totalsDiff[IdxDiffClaimedPriceAmountIncrement]
155- let claimedIdoAssetAmountFromDiff = totalsDiff[IdxDiffClaimedIdoAssetAmountIncrement]
156-[ScriptTransfer(userAddress, outAmount, outAssetId), TotalsEntry(keyInvestor(userAddress58), origInvestArray, totalsDiff, newClaimPeriodHeight), TotalsEntry(keyTotals(), readTotalsArrayOrDefault(), totalsDiff, newClaimPeriodHeight), ClaimOperationHistoryEntry(userAddress58, claimedPriceAmountFromDiff, claimedIdoAssetAmountFromDiff, txId)]
157153 }
158-
159-
160-func publicClaim (claimedAssetId58,userAddress58) = internalClaim(claimedAssetId58, addressFromStringValue(userAddress58), fromBase58String(""))
161154
162155
163156 @Callable(i)
241234 let callerAddress58 = toString(i.caller)
242235 if ((userAddress58 != callerAddress58))
243236 then throw("not authorized")
244- else $Tuple2(internalClaim(claimedAssetId58, i.caller, i.transactionId), unit)
237+ else {
238+ let claimResultTuple = internalClaim(claimedAssetId58, i.caller, i.transactionId)
239+ let totalsDiff = claimResultTuple._1
240+ let outAmount = claimResultTuple._2
241+ let outAssetId = claimResultTuple._3
242+ let origInvestArray = claimResultTuple._4
243+ let newClaimPeriodHeight = claimResultTuple._5
244+ let claimedPriceAmountFromDiff = totalsDiff[IdxDiffClaimedPriceAmountIncrement]
245+ let claimedIdoAssetAmountFromDiff = totalsDiff[IdxDiffClaimedIdoAssetAmountIncrement]
246+ $Tuple2([ScriptTransfer(i.caller, outAmount, outAssetId), TotalsEntry(keyInvestor(userAddress58), origInvestArray, totalsDiff, newClaimPeriodHeight), TotalsEntry(keyTotals(), readTotalsArrayOrDefault(), totalsDiff, newClaimPeriodHeight), ClaimOperationHistoryEntry(userAddress58, claimedPriceAmountFromDiff, claimedIdoAssetAmountFromDiff, i.transactionId)], unit)
247+ }
245248 }
246249
247250
248251
249252 @Callable(i)
250-func claimREADONLY (claimedAssetId58,userAddress58) = $Tuple2(nil, internalClaim(claimedAssetId58, addressFromStringValue(userAddress58), fromBase58String("")))
253+func claimREADONLY (claimedAssetId58,userAddress58) = {
254+ let claimResultTuple = internalClaim(claimedAssetId58, addressFromStringValue(userAddress58), fromBase58String(""))
255+ let totalsDiff = claimResultTuple._1
256+ let outAmount = claimResultTuple._2
257+ let outAssetId = claimResultTuple._3
258+ let origInvestArray = claimResultTuple._4
259+ let newClaimPeriodHeight = claimResultTuple._5
260+ let availableToClaimArray = claimResultTuple._6
261+ let availablePriceAmountToClaim = availableToClaimArray[0]
262+ let availableIdoAmountToClaim = availableToClaimArray[1]
263+ $Tuple2(nil, makeString(["%s%d%d", userAddress58, toString(availablePriceAmountToClaim), toString(availableIdoAmountToClaim)], SEP))
264+ }
251265
252266
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 bPriceMULT = toBigInt(priceAssetMULT)
1313 let bPriceAssetBUF = fraction(toBigInt(priceAssetAmount), BUFSCALE, bPriceMULT)
1414 let bAmountAssetBUF = fraction(bPriceAssetBUF, bPriceMULT, toBigInt(price))
1515 toInt(fraction(bAmountAssetBUF, toBigInt(idoAssetMULT), BUFSCALE))
1616 }
1717
1818
1919 let IdxCfgIdoStart = 1
2020
2121 let IdxCfgIdoDuration = 2
2222
2323 let IdxCfgClaimStart = 3
2424
2525 let IdxCfgClaimDuration = 4
2626
2727 let IdxCfgPrice = 5
2828
2929 let IdxCfgPriceMult = 6
3030
3131 let IdxCfgIdoAssetId = 7
3232
3333 let IdxCfgIdoAssetMult = 8
3434
3535 let IdxCfgPriceAssetId = 9
3636
3737 let IdxCfgPriceAssetMult = 10
3838
3939 let IdxCfgMinInvestAmount = 11
4040
4141 func fromatConfigS (idoStart,idoDuration,claimStart,claimDuration,price,priceMult,idoAssetId58,idoAssetMult,priceAssetId58,priceAssetMult,minInvestAmount) = makeString(["%d%d%d%d%d%d%s%d%s%d%d", idoStart, idoDuration, claimStart, claimDuration, price, priceMult, idoAssetId58, idoAssetMult, priceAssetId58, priceAssetMult, minInvestAmount], SEP)
4242
4343
4444 func fromatConfig (idoStart,idoDuration,claimStart,claimDuration,price,priceMult,idoAssetId58,idoAssetMult,priceAssetId58,priceAssetMult,minInvestAmount) = fromatConfigS(toString(idoStart), toString(idoDuration), toString(claimStart), toString(claimDuration), toString(price), toString(priceMult), idoAssetId58, toString(idoAssetMult), priceAssetId58, toString(priceAssetMult), toString(minInvestAmount))
4545
4646
4747 let IdxInvTotalAmount = 1
4848
4949 let IdxInvRemainingAmount = 2
5050
5151 let IdxInvClaimedPriceAssetAmount = 3
5252
5353 let IdxInvClaimedIdoAssetAmount = 4
5454
5555 let IdxInvLastClaimedHeight = 5
5656
5757 func formatInvestorS (totalAmount,remainingAmount,claimedPriceAssetAmount,claimedIdoAssetAmount,lastClaimedHeight) = makeString(["%d%d%d%d%d", totalAmount, remainingAmount, claimedPriceAssetAmount, claimedIdoAssetAmount, lastClaimedHeight], SEP)
5858
5959
6060 func formatInvestor (totalAmount,remainingAmount,claimedPriceAssetAmount,claimedIdoAssetAmount,lastClaimedHeight) = formatInvestorS(toString(totalAmount), toString(remainingAmount), toString(claimedPriceAssetAmount), toString(claimedIdoAssetAmount), toString(lastClaimedHeight))
6161
6262
6363 func formatHistoryRecord (priceAssetAmount,idoAssetAmount) = makeString(["%d%d%d%d", toString(height), toString(lastBlock.timestamp), toString(priceAssetAmount), toString(idoAssetAmount)], SEP)
6464
6565
6666 func keyConfig () = "%s__config"
6767
6868
6969 func keyInvestor (userAddress) = ("%s__" + userAddress)
7070
7171
7272 func keyTotals () = "%s__totals"
7373
7474
7575 func keyOperationHistoryRecord (type,userAddress,txId58) = makeString(["%s%s%s%s__history", type, userAddress, txId58], SEP)
7676
7777
7878 func readConfigArray () = split(getStringOrFail(keyConfig()), SEP)
7979
8080
8181 func readTotalsArrayOrDefaultByCustomKey (customKey) = split(valueOrElse(getString(customKey), formatInvestorS("0", "0", "0", "0", "0")), SEP)
8282
8383
8484 func readTotalsArrayOrDefault () = readTotalsArrayOrDefaultByCustomKey(keyTotals())
8585
8686
8787 func readInvestorArrayOrDefault (userAddress) = readTotalsArrayOrDefaultByCustomKey(keyInvestor(userAddress))
8888
8989
9090 func readInvestorArrayOrFail (userAddress) = split(getStringOrFail(keyInvestor(userAddress)), SEP)
9191
9292
9393 let IdxDiffTotalIncrement = 0
9494
9595 let IdxDiffRemainingPriceAmountIncrement = 1
9696
9797 let IdxDiffClaimedPriceAmountIncrement = 2
9898
9999 let IdxDiffClaimedIdoAssetAmountIncrement = 3
100100
101101 func TotalsEntry (key,origArray,incrementDiff,newLastClaimedHeight) = {
102102 let totalAmount = parseIntValue(origArray[IdxInvTotalAmount])
103103 let remainingAmount = parseIntValue(origArray[IdxInvRemainingAmount])
104104 let claimedPriceAssetAmount = parseIntValue(origArray[IdxInvClaimedPriceAssetAmount])
105105 let claimedIdoAssetAmount = parseIntValue(origArray[IdxInvClaimedIdoAssetAmount])
106106 let lastClaimedHeight = parseIntValue(origArray[IdxInvLastClaimedHeight])
107107 let newTotalAmount = (totalAmount + incrementDiff[IdxDiffTotalIncrement])
108108 let newRemainingAmount = (remainingAmount + incrementDiff[IdxDiffRemainingPriceAmountIncrement])
109109 let newClaimedPriceAssetAmount = (claimedPriceAssetAmount + incrementDiff[IdxDiffClaimedPriceAmountIncrement])
110110 let newClaimedIdoAssetAmount = (claimedIdoAssetAmount + incrementDiff[IdxDiffClaimedIdoAssetAmountIncrement])
111111 if ((0 > newRemainingAmount))
112112 then throw("invalid math")
113113 else StringEntry(key, formatInvestor(newTotalAmount, newRemainingAmount, newClaimedPriceAssetAmount, newClaimedIdoAssetAmount, newLastClaimedHeight))
114114 }
115115
116116
117117 func InvestOperationHistoryEntry (userAddress,priceAssetAmount,idoAssetAmount,txId) = StringEntry(keyOperationHistoryRecord("invest", userAddress, toBase58String(txId)), formatHistoryRecord(priceAssetAmount, idoAssetAmount))
118118
119119
120120 func ClaimOperationHistoryEntry (userAddress,priceAssetAmount,idoAssetAmount,txId) = StringEntry(keyOperationHistoryRecord("claim", userAddress, toBase58String(txId)), formatHistoryRecord(priceAssetAmount, idoAssetAmount))
121121
122122
123123 func internalClaim (claimedAssetId58,userAddress,txId) = {
124124 let cfgArray = readConfigArray()
125125 let claimStart = parseIntValue(cfgArray[IdxCfgClaimStart])
126126 let claimDuration = parseIntValue(cfgArray[IdxCfgClaimDuration])
127127 let claimEnd = (claimStart + claimDuration)
128128 let price = parseIntValue(cfgArray[IdxCfgPrice])
129129 let priceMult = parseIntValue(cfgArray[IdxCfgPriceMult])
130130 let idoAssetId58 = cfgArray[IdxCfgIdoAssetId]
131131 let idoAssetId = fromBase58String(idoAssetId58)
132132 let idoAssetMult = parseIntValue(cfgArray[IdxCfgIdoAssetMult])
133133 let priceAssetId58 = cfgArray[IdxCfgPriceAssetId]
134134 let priceAssetId = fromBase58String(priceAssetId58)
135135 let priceAssetMult = parseIntValue(cfgArray[IdxCfgPriceAssetMult])
136136 let userAddress58 = toString(userAddress)
137137 let origInvestArray = readInvestorArrayOrFail(userAddress58)
138138 let investTotalAmount = parseIntValue(origInvestArray[IdxInvTotalAmount])
139139 let investLastClaimedHeight = parseIntValue(origInvestArray[IdxInvLastClaimedHeight])
140140 let newClaimPeriodHeight = if ((height > claimEnd))
141141 then claimEnd
142- else height
143- let claimingBlocks = (investLastClaimedHeight - newClaimPeriodHeight)
142+ else if ((claimStart > height))
143+ then claimStart
144+ else height
145+ let claimingBlocks = (newClaimPeriodHeight - investLastClaimedHeight)
144146 let claimingPriceAssetAmount = fraction(investTotalAmount, claimingBlocks, claimDuration)
145147 let claimingIdoAssetAmount = convertPriceAssetIntoIdoAsset(claimingPriceAssetAmount, priceAssetMult, price, priceMult, idoAssetMult)
146- let claimResultTuple = if ((claimedAssetId58 == priceAssetId58))
147- then $Tuple3([0, -(claimingPriceAssetAmount), claimingPriceAssetAmount, 0], claimingPriceAssetAmount, priceAssetId)
148+ if ((claimedAssetId58 == priceAssetId58))
149+ then $Tuple6([0, -(claimingPriceAssetAmount), claimingPriceAssetAmount, 0], claimingPriceAssetAmount, priceAssetId, origInvestArray, newClaimPeriodHeight, [claimingPriceAssetAmount, claimingIdoAssetAmount])
148150 else if ((claimedAssetId58 == idoAssetId58))
149- then $Tuple3([0, -(claimingPriceAssetAmount), 0, claimingIdoAssetAmount], claimingIdoAssetAmount, idoAssetId)
151+ then $Tuple6([0, -(claimingPriceAssetAmount), 0, claimingIdoAssetAmount], claimingIdoAssetAmount, idoAssetId, origInvestArray, newClaimPeriodHeight, [claimingPriceAssetAmount, claimingIdoAssetAmount])
150152 else throw(("unsupported assetId: " + claimedAssetId58))
151- let totalsDiff = claimResultTuple._1
152- let outAmount = claimResultTuple._2
153- let outAssetId = claimResultTuple._3
154- let claimedPriceAmountFromDiff = totalsDiff[IdxDiffClaimedPriceAmountIncrement]
155- let claimedIdoAssetAmountFromDiff = totalsDiff[IdxDiffClaimedIdoAssetAmountIncrement]
156-[ScriptTransfer(userAddress, outAmount, outAssetId), TotalsEntry(keyInvestor(userAddress58), origInvestArray, totalsDiff, newClaimPeriodHeight), TotalsEntry(keyTotals(), readTotalsArrayOrDefault(), totalsDiff, newClaimPeriodHeight), ClaimOperationHistoryEntry(userAddress58, claimedPriceAmountFromDiff, claimedIdoAssetAmountFromDiff, txId)]
157153 }
158-
159-
160-func publicClaim (claimedAssetId58,userAddress58) = internalClaim(claimedAssetId58, addressFromStringValue(userAddress58), fromBase58String(""))
161154
162155
163156 @Callable(i)
164157 func constructor (idoStart,idoDuration,claimStart,claimDuration,price,priceAssetId58,minInvestAmount) = {
165158 let priceMult = ((100 * 1000) * 1000)
166159 let idoEnd = (idoStart + idoDuration)
167160 if (isDefined(getString(keyConfig())))
168161 then throw("already initialized")
169162 else if (("3N4Aib5iubWiGMzdTh6wWiVDVbo32oeVUmH" != toString(i.caller)))
170163 then throw("not authorized")
171164 else if ((size(i.payments) != 1))
172165 then throw("exactly 1 payment must be attached")
173166 else if ((idoEnd >= claimStart))
174167 then throw("claimStart must be greater than idoEnd")
175168 else {
176169 let pmt = value(i.payments[0])
177170 let idoAssetId = value(pmt.assetId)
178171 let idoAssetInfo = valueOrErrorMessage(assetInfo(idoAssetId), "fail to load ido asset info")
179172 let idoAssetId58 = toBase58String(idoAssetId)
180173 let idoAssetMult = pow(10, 0, idoAssetInfo.decimals, 0, 0, DOWN)
181174 let priceAssetId = fromBase58String(priceAssetId58)
182175 let priceAssetInfo = valueOrErrorMessage(assetInfo(priceAssetId), "fail to load price asset info")
183176 let priceAssetMult = pow(10, 0, priceAssetInfo.decimals, 0, 0, DOWN)
184177 [StringEntry(keyConfig(), fromatConfig(idoStart, idoDuration, claimStart, claimDuration, price, priceMult, idoAssetId58, idoAssetMult, priceAssetId58, priceAssetMult, minInvestAmount))]
185178 }
186179 }
187180
188181
189182
190183 @Callable(i)
191184 func invest () = {
192185 let cfgArray = readConfigArray()
193186 let idoStart = parseIntValue(cfgArray[IdxCfgIdoStart])
194187 let idoDuration = parseIntValue(cfgArray[IdxCfgIdoDuration])
195188 let idoEnd = (idoStart + idoDuration)
196189 let claimStart = parseIntValue(cfgArray[IdxCfgClaimStart])
197190 let claimDuration = parseIntValue(cfgArray[IdxCfgClaimDuration])
198191 let price = parseIntValue(cfgArray[IdxCfgPrice])
199192 let priceMult = parseIntValue(cfgArray[IdxCfgPriceMult])
200193 let idoAssetId58 = cfgArray[IdxCfgIdoAssetId]
201194 let idoAssetId = fromBase58String(idoAssetId58)
202195 let idoAssetMult = parseIntValue(cfgArray[IdxCfgIdoAssetMult])
203196 let priceAssetId58 = cfgArray[IdxCfgPriceAssetId]
204197 let priceAssetId = fromBase58String(priceAssetId58)
205198 let priceAssetMult = parseIntValue(cfgArray[IdxCfgPriceAssetMult])
206199 let minIvestAmount = parseIntValue(cfgArray[IdxCfgMinInvestAmount])
207200 let userAddress = toString(i.caller)
208201 if ((idoStart > height))
209202 then throw("ido has not been started yet")
210203 else if ((height > idoEnd))
211204 then throw("ido has been already ended")
212205 else if ((size(i.payments) != 1))
213206 then throw("exactly 1 payment is expected")
214207 else {
215208 let pmt = value(i.payments[0])
216209 let pmtAssetId = value(pmt.assetId)
217210 let pmtAmount = pmt.amount
218211 if ((pmtAssetId != priceAssetId))
219212 then throw((("invalid payment asset id: " + toBase58String(pmtAssetId)) + " is expected"))
220213 else if ((minIvestAmount > pmtAmount))
221214 then throw(((("payment amount is less then min allowed: pmtAmount=" + toString(pmtAmount)) + " minIvestAmount=") + toString(minIvestAmount)))
222215 else {
223216 let origInvestorArray = readInvestorArrayOrDefault(userAddress)
224217 let origTotalsArray = readTotalsArrayOrDefault()
225218 let newPriceTotalAmount = (parseIntValue(origTotalsArray[IdxInvTotalAmount]) + pmtAmount)
226219 let requiredIdoAssetAmount = convertPriceAssetIntoIdoAsset(newPriceTotalAmount, priceAssetMult, price, priceMult, idoAssetMult)
227220 if ((requiredIdoAssetAmount > assetBalance(this, idoAssetId)))
228221 then throw("IDO asset has been - sold consider to use smaller payment")
229222 else {
230223 let totalsDiff = [pmtAmount, pmtAmount, 0, 0]
231224 [TotalsEntry(keyInvestor(userAddress), origInvestorArray, totalsDiff, claimStart), TotalsEntry(keyTotals(), origTotalsArray, totalsDiff, claimStart), InvestOperationHistoryEntry(userAddress, pmtAmount, 0, i.transactionId)]
232225 }
233226 }
234227 }
235228 }
236229
237230
238231
239232 @Callable(i)
240233 func claim (claimedAssetId58,userAddress58) = {
241234 let callerAddress58 = toString(i.caller)
242235 if ((userAddress58 != callerAddress58))
243236 then throw("not authorized")
244- else $Tuple2(internalClaim(claimedAssetId58, i.caller, i.transactionId), unit)
237+ else {
238+ let claimResultTuple = internalClaim(claimedAssetId58, i.caller, i.transactionId)
239+ let totalsDiff = claimResultTuple._1
240+ let outAmount = claimResultTuple._2
241+ let outAssetId = claimResultTuple._3
242+ let origInvestArray = claimResultTuple._4
243+ let newClaimPeriodHeight = claimResultTuple._5
244+ let claimedPriceAmountFromDiff = totalsDiff[IdxDiffClaimedPriceAmountIncrement]
245+ let claimedIdoAssetAmountFromDiff = totalsDiff[IdxDiffClaimedIdoAssetAmountIncrement]
246+ $Tuple2([ScriptTransfer(i.caller, outAmount, outAssetId), TotalsEntry(keyInvestor(userAddress58), origInvestArray, totalsDiff, newClaimPeriodHeight), TotalsEntry(keyTotals(), readTotalsArrayOrDefault(), totalsDiff, newClaimPeriodHeight), ClaimOperationHistoryEntry(userAddress58, claimedPriceAmountFromDiff, claimedIdoAssetAmountFromDiff, i.transactionId)], unit)
247+ }
245248 }
246249
247250
248251
249252 @Callable(i)
250-func claimREADONLY (claimedAssetId58,userAddress58) = $Tuple2(nil, internalClaim(claimedAssetId58, addressFromStringValue(userAddress58), fromBase58String("")))
253+func claimREADONLY (claimedAssetId58,userAddress58) = {
254+ let claimResultTuple = internalClaim(claimedAssetId58, addressFromStringValue(userAddress58), fromBase58String(""))
255+ let totalsDiff = claimResultTuple._1
256+ let outAmount = claimResultTuple._2
257+ let outAssetId = claimResultTuple._3
258+ let origInvestArray = claimResultTuple._4
259+ let newClaimPeriodHeight = claimResultTuple._5
260+ let availableToClaimArray = claimResultTuple._6
261+ let availablePriceAmountToClaim = availableToClaimArray[0]
262+ let availableIdoAmountToClaim = availableToClaimArray[1]
263+ $Tuple2(nil, makeString(["%s%d%d", userAddress58, toString(availablePriceAmountToClaim), toString(availableIdoAmountToClaim)], SEP))
264+ }
251265
252266

github/deemru/w8io/169f3d6 
52.71 ms