tx · GHw1bkAfRv2SdnZvGtDZLyj9jvv8nczB7AGhn4hKXKrp

3Mupdyb81j4n41mVbMNjoftdFnHxveMzaj8:  -0.01000000 Waves

2021.11.09 18:32 [1783658] smart account 3Mupdyb81j4n41mVbMNjoftdFnHxveMzaj8 > SELF 0.00000000 Waves

{ "type": 13, "id": "GHw1bkAfRv2SdnZvGtDZLyj9jvv8nczB7AGhn4hKXKrp", "fee": 1000000, "feeAssetId": null, "timestamp": 1636472026046, "version": 1, "sender": "3Mupdyb81j4n41mVbMNjoftdFnHxveMzaj8", "senderPublicKey": "9xyvh6gua3PPBUCqbLpW34DXo6yLvbHr5hQ6erMTHPyB", "proofs": [ "2Z4HnxatzL1o4or4BWcUFo5QJ63C9Frv5WwBVP7XUSV5QmyU5BBKU27RhBjgz6dfJBtCWitku7zH8n7H57eKSA1T" ], "script": "base64:AAIFAAAAAAAAABsIAhIJCgcBAQEBAQgBEgASBAoCCAgSBAoCCAgAAAAqAQAAAA9nZXRTdHJpbmdPckZhaWwAAAABAAAAA2tleQkBAAAAE3ZhbHVlT3JFcnJvck1lc3NhZ2UAAAACCQAEIgAAAAEFAAAAA2tleQkAASwAAAACCQABLAAAAAICAAAAD21hbmRhdG9yeSB0aGlzLgUAAAADa2V5AgAAAA8gaXMgbm90IGRlZmluZWQAAAAAA1NFUAIAAAACX18AAAAACEJVRlNDQUxFCQABNgAAAAEADeC2s6dkAAABAAAAHWNvbnZlcnRQcmljZUFzc2V0SW50b0lkb0Fzc2V0AAAABQAAABBwcmljZUFzc2V0QW1vdW50AAAADnByaWNlQXNzZXRNVUxUAAAABXByaWNlAAAACXByaWNlTVVMVAAAAAxpZG9Bc3NldE1VTFQEAAAAD2JQcmljZUFzc2V0TVVMVAkAATYAAAABBQAAAA5wcmljZUFzc2V0TVVMVAQAAAANYklkb0Fzc2V0TVVMVAkAATYAAAABBQAAAAxpZG9Bc3NldE1VTFQEAAAADmJQcmljZUFzc2V0QlVGCQABPAAAAAMJAAE2AAAAAQUAAAAQcHJpY2VBc3NldEFtb3VudAUAAAAIQlVGU0NBTEUFAAAAD2JQcmljZUFzc2V0TVVMVAQAAAAPYkFtb3VudEFzc2V0QlVGCQABPAAAAAMFAAAADmJQcmljZUFzc2V0QlVGCQABNgAAAAEFAAAACXByaWNlTVVMVAkAATYAAAABBQAAAAVwcmljZQkAAaAAAAABCQABPAAAAAMFAAAAD2JBbW91bnRBc3NldEJVRgkAATYAAAABBQAAAAxpZG9Bc3NldE1VTFQFAAAACEJVRlNDQUxFAAAAAA5JZHhDZmdJZG9TdGFydAAAAAAAAAAAAQAAAAARSWR4Q2ZnSWRvRHVyYXRpb24AAAAAAAAAAAIAAAAAEElkeENmZ0NsYWltU3RhcnQAAAAAAAAAAAMAAAAAE0lkeENmZ0NsYWltRHVyYXRpb24AAAAAAAAAAAQAAAAAC0lkeENmZ1ByaWNlAAAAAAAAAAAFAAAAAA9JZHhDZmdQcmljZU11bHQAAAAAAAAAAAYAAAAAEElkeENmZ0lkb0Fzc2V0SWQAAAAAAAAAAAcAAAAAEklkeENmZ0lkb0Fzc2V0TXVsdAAAAAAAAAAACAAAAAASSWR4Q2ZnUHJpY2VBc3NldElkAAAAAAAAAAAJAAAAABRJZHhDZmdQcmljZUFzc2V0TXVsdAAAAAAAAAAACgAAAAAVSWR4Q2ZnTWluSW52ZXN0QW1vdW50AAAAAAAAAAALAQAAAA1mcm9tYXRDb25maWdTAAAADAAAAAhpZG9TdGFydAAAAAtpZG9EdXJhdGlvbgAAAApjbGFpbVN0YXJ0AAAADWNsYWltRHVyYXRpb24AAAAFcHJpY2UAAAAJcHJpY2VNdWx0AAAADGlkb0Fzc2V0SWQ1OAAAAAxpZG9Bc3NldE11bHQAAAAOcHJpY2VBc3NldElkNTgAAAAOcHJpY2VBc3NldE11bHQAAAAPbWluSW52ZXN0QW1vdW50AAAAE3RvdGFsSWRvQXNzZXRUb1NlbGwJAAS5AAAAAgkABEwAAAACAgAAABglZCVkJWQlZCVkJWQlcyVkJXMlZCVkJWQJAARMAAAAAgUAAAAIaWRvU3RhcnQJAARMAAAAAgUAAAALaWRvRHVyYXRpb24JAARMAAAAAgUAAAAKY2xhaW1TdGFydAkABEwAAAACBQAAAA1jbGFpbUR1cmF0aW9uCQAETAAAAAIFAAAABXByaWNlCQAETAAAAAIFAAAACXByaWNlTXVsdAkABEwAAAACBQAAAAxpZG9Bc3NldElkNTgJAARMAAAAAgUAAAAMaWRvQXNzZXRNdWx0CQAETAAAAAIFAAAADnByaWNlQXNzZXRJZDU4CQAETAAAAAIFAAAADnByaWNlQXNzZXRNdWx0CQAETAAAAAIFAAAAD21pbkludmVzdEFtb3VudAkABEwAAAACBQAAABN0b3RhbElkb0Fzc2V0VG9TZWxsBQAAAANuaWwFAAAAA1NFUAEAAAAMZnJvbWF0Q29uZmlnAAAADAAAAAhpZG9TdGFydAAAAAtpZG9EdXJhdGlvbgAAAApjbGFpbVN0YXJ0AAAADWNsYWltRHVyYXRpb24AAAAFcHJpY2UAAAAJcHJpY2VNdWx0AAAADGlkb0Fzc2V0SWQ1OAAAAAxpZG9Bc3NldE11bHQAAAAOcHJpY2VBc3NldElkNTgAAAAOcHJpY2VBc3NldE11bHQAAAAPbWluSW52ZXN0QW1vdW50AAAAE3RvdGFsSWRvQXNzZXRUb1NlbGwJAQAAAA1mcm9tYXRDb25maWdTAAAADAkAAaQAAAABBQAAAAhpZG9TdGFydAkAAaQAAAABBQAAAAtpZG9EdXJhdGlvbgkAAaQAAAABBQAAAApjbGFpbVN0YXJ0CQABpAAAAAEFAAAADWNsYWltRHVyYXRpb24JAAGkAAAAAQUAAAAFcHJpY2UJAAGkAAAAAQUAAAAJcHJpY2VNdWx0BQAAAAxpZG9Bc3NldElkNTgJAAGkAAAAAQUAAAAMaWRvQXNzZXRNdWx0BQAAAA5wcmljZUFzc2V0SWQ1OAkAAaQAAAABBQAAAA5wcmljZUFzc2V0TXVsdAkAAaQAAAABBQAAAA9taW5JbnZlc3RBbW91bnQJAAGkAAAAAQUAAAATdG90YWxJZG9Bc3NldFRvU2VsbAAAAAARSWR4SW52VG90YWxBbW91bnQAAAAAAAAAAAEAAAAAFUlkeEludlJlbWFpbmluZ0Ftb3VudAAAAAAAAAAAAgAAAAAdSWR4SW52Q2xhaW1lZFByaWNlQXNzZXRBbW91bnQAAAAAAAAAAAMAAAAAG0lkeEludkNsYWltZWRJZG9Bc3NldEFtb3VudAAAAAAAAAAABAAAAAAXSWR4SW52TGFzdENsYWltZWRIZWlnaHQAAAAAAAAAAAUBAAAAD2Zvcm1hdEludmVzdG9yUwAAAAUAAAALdG90YWxBbW91bnQAAAAPcmVtYWluaW5nQW1vdW50AAAAF2NsYWltZWRQcmljZUFzc2V0QW1vdW50AAAAFWNsYWltZWRJZG9Bc3NldEFtb3VudAAAABFsYXN0Q2xhaW1lZEhlaWdodAkABLkAAAACCQAETAAAAAICAAAACiVkJWQlZCVkJWQJAARMAAAAAgUAAAALdG90YWxBbW91bnQJAARMAAAAAgUAAAAPcmVtYWluaW5nQW1vdW50CQAETAAAAAIFAAAAF2NsYWltZWRQcmljZUFzc2V0QW1vdW50CQAETAAAAAIFAAAAFWNsYWltZWRJZG9Bc3NldEFtb3VudAkABEwAAAACBQAAABFsYXN0Q2xhaW1lZEhlaWdodAUAAAADbmlsBQAAAANTRVABAAAADmZvcm1hdEludmVzdG9yAAAABQAAAAt0b3RhbEFtb3VudAAAAA9yZW1haW5pbmdBbW91bnQAAAAXY2xhaW1lZFByaWNlQXNzZXRBbW91bnQAAAAVY2xhaW1lZElkb0Fzc2V0QW1vdW50AAAAEWxhc3RDbGFpbWVkSGVpZ2h0CQEAAAAPZm9ybWF0SW52ZXN0b3JTAAAABQkAAaQAAAABBQAAAAt0b3RhbEFtb3VudAkAAaQAAAABBQAAAA9yZW1haW5pbmdBbW91bnQJAAGkAAAAAQUAAAAXY2xhaW1lZFByaWNlQXNzZXRBbW91bnQJAAGkAAAAAQUAAAAVY2xhaW1lZElkb0Fzc2V0QW1vdW50CQABpAAAAAEFAAAAEWxhc3RDbGFpbWVkSGVpZ2h0AQAAABNmb3JtYXRIaXN0b3J5UmVjb3JkAAAAAgAAABBwcmljZUFzc2V0QW1vdW50AAAADmlkb0Fzc2V0QW1vdW50CQAEuQAAAAIJAARMAAAAAgIAAAAIJWQlZCVkJWQJAARMAAAAAgkAAaQAAAABBQAAAAZoZWlnaHQJAARMAAAAAgkAAaQAAAABCAUAAAAJbGFzdEJsb2NrAAAACXRpbWVzdGFtcAkABEwAAAACCQABpAAAAAEFAAAAEHByaWNlQXNzZXRBbW91bnQJAARMAAAAAgkAAaQAAAABBQAAAA5pZG9Bc3NldEFtb3VudAUAAAADbmlsBQAAAANTRVABAAAACWtleUNvbmZpZwAAAAACAAAACiVzX19jb25maWcBAAAAC2tleUludmVzdG9yAAAAAQAAAAt1c2VyQWRkcmVzcwkAASwAAAACAgAAAAQlc19fBQAAAAt1c2VyQWRkcmVzcwEAAAAJa2V5VG90YWxzAAAAAAIAAAAKJXNfX3RvdGFscwEAAAAZa2V5T3BlcmF0aW9uSGlzdG9yeVJlY29yZAAAAAMAAAAEdHlwZQAAAAt1c2VyQWRkcmVzcwAAAAZ0eElkNTgJAAS5AAAAAgkABEwAAAACAgAAABElcyVzJXMlc19faGlzdG9yeQkABEwAAAACBQAAAAR0eXBlCQAETAAAAAIFAAAAC3VzZXJBZGRyZXNzCQAETAAAAAIFAAAABnR4SWQ1OAUAAAADbmlsBQAAAANTRVABAAAAD3JlYWRDb25maWdBcnJheQAAAAAJAAS1AAAAAgkBAAAAD2dldFN0cmluZ09yRmFpbAAAAAEJAQAAAAlrZXlDb25maWcAAAAABQAAAANTRVABAAAAI3JlYWRUb3RhbHNBcnJheU9yRGVmYXVsdEJ5Q3VzdG9tS2V5AAAAAQAAAAljdXN0b21LZXkJAAS1AAAAAgkBAAAAC3ZhbHVlT3JFbHNlAAAAAgkABCIAAAABBQAAAAljdXN0b21LZXkJAQAAAA9mb3JtYXRJbnZlc3RvclMAAAAFAgAAAAEwAgAAAAEwAgAAAAEwAgAAAAEwAgAAAAEwBQAAAANTRVABAAAAGHJlYWRUb3RhbHNBcnJheU9yRGVmYXVsdAAAAAAJAQAAACNyZWFkVG90YWxzQXJyYXlPckRlZmF1bHRCeUN1c3RvbUtleQAAAAEJAQAAAAlrZXlUb3RhbHMAAAAAAQAAABpyZWFkSW52ZXN0b3JBcnJheU9yRGVmYXVsdAAAAAEAAAALdXNlckFkZHJlc3MJAQAAACNyZWFkVG90YWxzQXJyYXlPckRlZmF1bHRCeUN1c3RvbUtleQAAAAEJAQAAAAtrZXlJbnZlc3RvcgAAAAEFAAAAC3VzZXJBZGRyZXNzAQAAABdyZWFkSW52ZXN0b3JBcnJheU9yRmFpbAAAAAEAAAALdXNlckFkZHJlc3MJAAS1AAAAAgkBAAAAD2dldFN0cmluZ09yRmFpbAAAAAEJAQAAAAtrZXlJbnZlc3RvcgAAAAEFAAAAC3VzZXJBZGRyZXNzBQAAAANTRVAAAAAAFUlkeERpZmZUb3RhbEluY3JlbWVudAAAAAAAAAAAAAAAAAAkSWR4RGlmZlJlbWFpbmluZ1ByaWNlQW1vdW50SW5jcmVtZW50AAAAAAAAAAABAAAAACJJZHhEaWZmQ2xhaW1lZFByaWNlQW1vdW50SW5jcmVtZW50AAAAAAAAAAACAAAAACVJZHhEaWZmQ2xhaW1lZElkb0Fzc2V0QW1vdW50SW5jcmVtZW50AAAAAAAAAAADAQAAAAtUb3RhbHNFbnRyeQAAAAQAAAADa2V5AAAACW9yaWdBcnJheQAAAA1pbmNyZW1lbnREaWZmAAAAFG5ld0xhc3RDbGFpbWVkSGVpZ2h0BAAAAAt0b3RhbEFtb3VudAkBAAAADXBhcnNlSW50VmFsdWUAAAABCQABkQAAAAIFAAAACW9yaWdBcnJheQUAAAARSWR4SW52VG90YWxBbW91bnQEAAAAD3JlbWFpbmluZ0Ftb3VudAkBAAAADXBhcnNlSW50VmFsdWUAAAABCQABkQAAAAIFAAAACW9yaWdBcnJheQUAAAAVSWR4SW52UmVtYWluaW5nQW1vdW50BAAAABdjbGFpbWVkUHJpY2VBc3NldEFtb3VudAkBAAAADXBhcnNlSW50VmFsdWUAAAABCQABkQAAAAIFAAAACW9yaWdBcnJheQUAAAAdSWR4SW52Q2xhaW1lZFByaWNlQXNzZXRBbW91bnQEAAAAFWNsYWltZWRJZG9Bc3NldEFtb3VudAkBAAAADXBhcnNlSW50VmFsdWUAAAABCQABkQAAAAIFAAAACW9yaWdBcnJheQUAAAAbSWR4SW52Q2xhaW1lZElkb0Fzc2V0QW1vdW50BAAAABFsYXN0Q2xhaW1lZEhlaWdodAkBAAAADXBhcnNlSW50VmFsdWUAAAABCQABkQAAAAIFAAAACW9yaWdBcnJheQUAAAAXSWR4SW52TGFzdENsYWltZWRIZWlnaHQEAAAADm5ld1RvdGFsQW1vdW50CQAAZAAAAAIFAAAAC3RvdGFsQW1vdW50CQABkQAAAAIFAAAADWluY3JlbWVudERpZmYFAAAAFUlkeERpZmZUb3RhbEluY3JlbWVudAQAAAASbmV3UmVtYWluaW5nQW1vdW50CQAAZAAAAAIFAAAAD3JlbWFpbmluZ0Ftb3VudAkAAZEAAAACBQAAAA1pbmNyZW1lbnREaWZmBQAAACRJZHhEaWZmUmVtYWluaW5nUHJpY2VBbW91bnRJbmNyZW1lbnQEAAAAGm5ld0NsYWltZWRQcmljZUFzc2V0QW1vdW50CQAAZAAAAAIFAAAAF2NsYWltZWRQcmljZUFzc2V0QW1vdW50CQABkQAAAAIFAAAADWluY3JlbWVudERpZmYFAAAAIklkeERpZmZDbGFpbWVkUHJpY2VBbW91bnRJbmNyZW1lbnQEAAAAGG5ld0NsYWltZWRJZG9Bc3NldEFtb3VudAkAAGQAAAACBQAAABVjbGFpbWVkSWRvQXNzZXRBbW91bnQJAAGRAAAAAgUAAAANaW5jcmVtZW50RGlmZgUAAAAlSWR4RGlmZkNsYWltZWRJZG9Bc3NldEFtb3VudEluY3JlbWVudAMJAABmAAAAAgAAAAAAAAAAAAUAAAASbmV3UmVtYWluaW5nQW1vdW50CQAAAgAAAAECAAAADGludmFsaWQgbWF0aAkBAAAAC1N0cmluZ0VudHJ5AAAAAgUAAAADa2V5CQEAAAAOZm9ybWF0SW52ZXN0b3IAAAAFBQAAAA5uZXdUb3RhbEFtb3VudAUAAAASbmV3UmVtYWluaW5nQW1vdW50BQAAABpuZXdDbGFpbWVkUHJpY2VBc3NldEFtb3VudAUAAAAYbmV3Q2xhaW1lZElkb0Fzc2V0QW1vdW50BQAAABRuZXdMYXN0Q2xhaW1lZEhlaWdodAEAAAAbSW52ZXN0T3BlcmF0aW9uSGlzdG9yeUVudHJ5AAAABAAAAAt1c2VyQWRkcmVzcwAAABBwcmljZUFzc2V0QW1vdW50AAAADmlkb0Fzc2V0QW1vdW50AAAABHR4SWQJAQAAAAtTdHJpbmdFbnRyeQAAAAIJAQAAABlrZXlPcGVyYXRpb25IaXN0b3J5UmVjb3JkAAAAAwIAAAAGaW52ZXN0BQAAAAt1c2VyQWRkcmVzcwkAAlgAAAABBQAAAAR0eElkCQEAAAATZm9ybWF0SGlzdG9yeVJlY29yZAAAAAIFAAAAEHByaWNlQXNzZXRBbW91bnQFAAAADmlkb0Fzc2V0QW1vdW50AQAAABpDbGFpbU9wZXJhdGlvbkhpc3RvcnlFbnRyeQAAAAQAAAALdXNlckFkZHJlc3MAAAAQcHJpY2VBc3NldEFtb3VudAAAAA5pZG9Bc3NldEFtb3VudAAAAAR0eElkCQEAAAALU3RyaW5nRW50cnkAAAACCQEAAAAZa2V5T3BlcmF0aW9uSGlzdG9yeVJlY29yZAAAAAMCAAAABWNsYWltBQAAAAt1c2VyQWRkcmVzcwkAAlgAAAABBQAAAAR0eElkCQEAAAATZm9ybWF0SGlzdG9yeVJlY29yZAAAAAIFAAAAEHByaWNlQXNzZXRBbW91bnQFAAAADmlkb0Fzc2V0QW1vdW50AQAAAA1pbnRlcm5hbENsYWltAAAAAwAAABBjbGFpbWVkQXNzZXRJZDU4AAAAC3VzZXJBZGRyZXNzAAAABHR4SWQEAAAACGNmZ0FycmF5CQEAAAAPcmVhZENvbmZpZ0FycmF5AAAAAAQAAAAKY2xhaW1TdGFydAkBAAAADXBhcnNlSW50VmFsdWUAAAABCQABkQAAAAIFAAAACGNmZ0FycmF5BQAAABBJZHhDZmdDbGFpbVN0YXJ0BAAAAA1jbGFpbUR1cmF0aW9uCQEAAAANcGFyc2VJbnRWYWx1ZQAAAAEJAAGRAAAAAgUAAAAIY2ZnQXJyYXkFAAAAE0lkeENmZ0NsYWltRHVyYXRpb24EAAAACGNsYWltRW5kCQAAZAAAAAIFAAAACmNsYWltU3RhcnQFAAAADWNsYWltRHVyYXRpb24EAAAABXByaWNlCQEAAAANcGFyc2VJbnRWYWx1ZQAAAAEJAAGRAAAAAgUAAAAIY2ZnQXJyYXkFAAAAC0lkeENmZ1ByaWNlBAAAAAlwcmljZU11bHQJAQAAAA1wYXJzZUludFZhbHVlAAAAAQkAAZEAAAACBQAAAAhjZmdBcnJheQUAAAAPSWR4Q2ZnUHJpY2VNdWx0BAAAAAxpZG9Bc3NldElkNTgJAAGRAAAAAgUAAAAIY2ZnQXJyYXkFAAAAEElkeENmZ0lkb0Fzc2V0SWQEAAAACmlkb0Fzc2V0SWQJAAJZAAAAAQUAAAAMaWRvQXNzZXRJZDU4BAAAAAxpZG9Bc3NldE11bHQJAQAAAA1wYXJzZUludFZhbHVlAAAAAQkAAZEAAAACBQAAAAhjZmdBcnJheQUAAAASSWR4Q2ZnSWRvQXNzZXRNdWx0BAAAAA5wcmljZUFzc2V0SWQ1OAkAAZEAAAACBQAAAAhjZmdBcnJheQUAAAASSWR4Q2ZnUHJpY2VBc3NldElkBAAAAAxwcmljZUFzc2V0SWQJAAJZAAAAAQUAAAAOcHJpY2VBc3NldElkNTgEAAAADnByaWNlQXNzZXRNdWx0CQEAAAANcGFyc2VJbnRWYWx1ZQAAAAEJAAGRAAAAAgUAAAAIY2ZnQXJyYXkFAAAAFElkeENmZ1ByaWNlQXNzZXRNdWx0BAAAAA11c2VyQWRkcmVzczU4CQAEJQAAAAEFAAAAC3VzZXJBZGRyZXNzBAAAAA9vcmlnSW52ZXN0QXJyYXkJAQAAABdyZWFkSW52ZXN0b3JBcnJheU9yRmFpbAAAAAEFAAAADXVzZXJBZGRyZXNzNTgEAAAAEWludmVzdFRvdGFsQW1vdW50CQEAAAANcGFyc2VJbnRWYWx1ZQAAAAEJAAGRAAAAAgUAAAAPb3JpZ0ludmVzdEFycmF5BQAAABFJZHhJbnZUb3RhbEFtb3VudAQAAAAXaW52ZXN0TGFzdENsYWltZWRIZWlnaHQJAQAAAA1wYXJzZUludFZhbHVlAAAAAQkAAZEAAAACBQAAAA9vcmlnSW52ZXN0QXJyYXkFAAAAF0lkeEludkxhc3RDbGFpbWVkSGVpZ2h0BAAAABRuZXdDbGFpbVBlcmlvZEhlaWdodAMJAABmAAAAAgUAAAAGaGVpZ2h0BQAAAAhjbGFpbUVuZAUAAAAIY2xhaW1FbmQDCQAAZgAAAAIFAAAACmNsYWltU3RhcnQFAAAABmhlaWdodAUAAAAKY2xhaW1TdGFydAUAAAAGaGVpZ2h0BAAAAA5jbGFpbWluZ0Jsb2NrcwkAAGUAAAACBQAAABRuZXdDbGFpbVBlcmlvZEhlaWdodAUAAAAXaW52ZXN0TGFzdENsYWltZWRIZWlnaHQEAAAAGGNsYWltaW5nUHJpY2VBc3NldEFtb3VudAkAAGsAAAADBQAAABFpbnZlc3RUb3RhbEFtb3VudAUAAAAOY2xhaW1pbmdCbG9ja3MFAAAADWNsYWltRHVyYXRpb24EAAAAFmNsYWltaW5nSWRvQXNzZXRBbW91bnQJAQAAAB1jb252ZXJ0UHJpY2VBc3NldEludG9JZG9Bc3NldAAAAAUFAAAAGGNsYWltaW5nUHJpY2VBc3NldEFtb3VudAUAAAAOcHJpY2VBc3NldE11bHQFAAAABXByaWNlBQAAAAlwcmljZU11bHQFAAAADGlkb0Fzc2V0TXVsdAMJAAAAAAAAAgUAAAAQY2xhaW1lZEFzc2V0SWQ1OAUAAAAOcHJpY2VBc3NldElkNTgJAAUYAAAABgkABEwAAAACAAAAAAAAAAAACQAETAAAAAIJAQAAAAEtAAAAAQUAAAAYY2xhaW1pbmdQcmljZUFzc2V0QW1vdW50CQAETAAAAAIFAAAAGGNsYWltaW5nUHJpY2VBc3NldEFtb3VudAkABEwAAAACAAAAAAAAAAAABQAAAANuaWwFAAAAGGNsYWltaW5nUHJpY2VBc3NldEFtb3VudAUAAAAMcHJpY2VBc3NldElkBQAAAA9vcmlnSW52ZXN0QXJyYXkFAAAAFG5ld0NsYWltUGVyaW9kSGVpZ2h0CQAETAAAAAIFAAAAGGNsYWltaW5nUHJpY2VBc3NldEFtb3VudAkABEwAAAACBQAAABZjbGFpbWluZ0lkb0Fzc2V0QW1vdW50BQAAAANuaWwDCQAAAAAAAAIFAAAA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AQAAAAxmcm9tYXRDb25maWcAAAAMBQAAAAhpZG9TdGFydAUAAAALaWRvRHVyYXRpb24FAAAACmNsYWltU3RhcnQFAAAADWNsYWltRHVyYXRpb24FAAAABXByaWNlBQAAAAlwcmljZU11bHQFAAAADGlkb0Fzc2V0SWQ1OAUAAAAMaWRvQXNzZXRNdWx0BQAAAA5wcmljZUFzc2V0SWQ1OAUAAAAOcHJpY2VBc3NldE11bHQFAAAAD21pbkludmVzdEFtb3VudAgFAAAAA3BtdAAAAAZhbW91bnQJAARMAAAAAgkBAAAAC1RvdGFsc0VudHJ5AAAABAkBAAAACWtleVRvdGFscwAAAAAFAAAAD29yaWdUb3RhbHNBcnJheQUAAAAKdG90YWxzRGlmZgUAAAAKY2xhaW1TdGFydAUAAAADbmlsAAAAAWkBAAAABmludmVzdAAAAAAEAAAACGNmZ0FycmF5CQEAAAAPcmVhZENvbmZpZ0FycmF5AAAAAAQAAAAIaWRvU3RhcnQJAQAAAA1wYXJzZUludFZhbHVlAAAAAQkAAZEAAAACBQAAAAhjZmdBcnJheQUAAAAOSWR4Q2ZnSWRvU3RhcnQEAAAAC2lkb0R1cmF0aW9uCQEAAAANcGFyc2VJbnRWYWx1ZQAAAAEJAAGRAAAAAgUAAAAIY2ZnQXJyYXkFAAAAEUlkeENmZ0lkb0R1cmF0aW9uBAAAAAZpZG9FbmQJAABkAAAAAgUAAAAIaWRvU3RhcnQFAAAAC2lkb0R1cmF0aW9uBAAAAApjbGFpbVN0YXJ0CQEAAAANcGFyc2VJbnRWYWx1ZQAAAAEJAAGRAAAAAgUAAAAIY2ZnQXJyYXkFAAAAEElkeENmZ0NsYWltU3RhcnQEAAAADWNsYWltRHVyYXRpb24JAQAAAA1wYXJzZUludFZhbHVlAAAAAQkAAZEAAAACBQAAAAhjZmdBcnJheQUAAAATSWR4Q2ZnQ2xhaW1EdXJhdGlvbgQAAAAFcHJpY2UJAQAAAA1wYXJzZUludFZhbHVlAAAAAQkAAZEAAAACBQAAAAhjZmdBcnJheQUAAAALSWR4Q2ZnUHJpY2UEAAAACXByaWNlTXVsdAkBAAAADXBhcnNlSW50VmFsdWUAAAABCQABkQAAAAIFAAAACGNmZ0FycmF5BQAAAA9JZHhDZmdQcmljZU11bHQEAAAADGlkb0Fzc2V0SWQ1OAkAAZEAAAACBQAAAAhjZmdBcnJheQUAAAAQSWR4Q2ZnSWRvQXNzZXRJZAQAAAAKaWRvQXNzZXRJZAkAAlkAAAABBQAAAAxpZG9Bc3NldElkNTgEAAAADGlkb0Fzc2V0TXVsdAkBAAAADXBhcnNlSW50VmFsdWUAAAABCQABkQAAAAIFAAAACGNmZ0FycmF5BQAAABJJZHhDZmdJZG9Bc3NldE11bHQEAAAADnByaWNlQXNzZXRJZDU4CQABkQAAAAIFAAAACGNmZ0FycmF5BQAAABJJZHhDZmdQcmljZUFzc2V0SWQEAAAADHByaWNlQXNzZXRJZAkAAlkAAAABBQAAAA5wcmljZUFzc2V0SWQ1OAQAAAAOcHJpY2VBc3NldE11bHQJAQAAAA1wYXJzZUludFZhbHVlAAAAAQkAAZEAAAACBQAAAAhjZmdBcnJheQUAAAAUSWR4Q2ZnUHJpY2VBc3NldE11bHQEAAAADm1pbkl2ZXN0QW1vdW50CQEAAAANcGFyc2VJbnRWYWx1ZQAAAAEJAAGRAAAAAgUAAAAIY2ZnQXJyYXkFAAAAFUlkeENmZ01pbkludmVzdEFtb3VudAQAAAALdXNlckFkZHJlc3MJAAQlAAAAAQgFAAAAAWkAAAAGY2FsbGVyAwkAAGYAAAACBQAAAAhpZG9TdGFydAUAAAAGaGVpZ2h0CQAAAgAAAAECAAAAHGlkbyBoYXMgbm90IGJlZW4gc3RhcnRlZCB5ZXQDCQAAZgAAAAIFAAAABmhlaWdodAUAAAAGaWRvRW5kCQAAAgAAAAECAAAAGmlkbyBoYXMgYmVlbiBhbHJlYWR5IGVuZGVkAwkBAAAAAiE9AAAAAgkAAZAAAAABCAUAAAABaQAAAAhwYXltZW50cwAAAAAAAAAAAQkAAAIAAAABAgAAAB1leGFjdGx5IDEgcGF5bWVudCBpcyBleHBlY3RlZAQAAAADcG10CQEAAAAFdmFsdWUAAAABCQABkQAAAAIIBQAAAAFpAAAACHBheW1lbnRzAAAAAAAAAAAABAAAAApwbXRBc3NldElkCQEAAAAFdmFsdWUAAAABCAUAAAADcG10AAAAB2Fzc2V0SWQEAAAACXBtdEFtb3VudAgFAAAAA3BtdAAAAAZhbW91bnQDCQEAAAACIT0AAAACBQAAAApwbXRBc3NldElkBQAAAAxwcmljZUFzc2V0SWQJAAACAAAAAQkAASwAAAACCQABLAAAAAICAAAAGmludmFsaWQgcGF5bWVudCBhc3NldCBpZDogCQACWAAAAAEFAAAACnBtdEFzc2V0SWQCAAAADCBpcyBleHBlY3RlZAQAAAARb3JpZ0ludmVzdG9yQXJyYXkJAQAAABpyZWFkSW52ZXN0b3JBcnJheU9yRGVmYXVsdAAAAAEFAAAAC3VzZXJBZGRyZXNzBAAAAA9vcmlnVG90YWxzQXJyYXkJAQAAABhyZWFkVG90YWxzQXJyYXlPckRlZmF1bHQAAAAABAAAABNuZXdQcmljZVRvdGFsQW1vdW50CQAAZAAAAAIJAQAAAA1wYXJzZUludFZhbHVlAAAAAQkAAZEAAAACBQAAAA9vcmlnVG90YWxzQXJyYXkFAAAAEUlkeEludlRvdGFsQW1vdW50BQAAAAlwbXRBbW91bnQEAAAAFnJlcXVpcmVkSWRvQXNzZXRBbW91bnQJAABoAAAAAgUAAAATbmV3UHJpY2VUb3RhbEFtb3VudAAAAAAAAAAAZAMJAABmAAAAAgUAAAAWcmVxdWlyZWRJZG9Bc3NldEFtb3VudAkAA/AAAAACBQAAAAR0aGlzBQAAAAppZG9Bc3NldElkCQAAAgAAAAECAAAAOUlETyBhc3NldCBoYXMgYmVlbiAtIHNvbGQgY29uc2lkZXIgdG8gdXNlIHNtYWxsZXIgcGF5bWVudAQAAAAKdG90YWxzRGlmZgkABEwAAAACBQAAAAlwbXRBbW91bnQJAARMAAAAAgUAAAAJcG10QW1vdW50CQAETAAAAAIAAAAAAAAAAAAJAARMAAAAAgAAAAAAAAAAAAUAAAADbmlsCQAETAAAAAIJAQAAAAtUb3RhbHNFbnRyeQAAAAQJAQAAAAtrZXlJbnZlc3RvcgAAAAEFAAAAC3VzZXJBZGRyZXNzBQAAABFvcmlnSW52ZXN0b3JBcnJheQUAAAAKdG90YWxzRGlmZgUAAAAKY2xhaW1TdGFydAkABEwAAAACCQEAAAALVG90YWxzRW50cnkAAAAECQEAAAAJa2V5VG90YWxzAAAAAAUAAAAPb3JpZ1RvdGFsc0FycmF5BQAAAAp0b3RhbHNEaWZmBQAAAApjbGFpbVN0YXJ0CQAETAAAAAIJAQAAABtJbnZlc3RPcGVyYXRpb25IaXN0b3J5RW50cnkAAAAEBQAAAAt1c2VyQWRkcmVzcwUAAAAJcG10QW1vdW50AAAAAAAAAAAACAUAAAABaQAAAA10cmFuc2FjdGlvbklkBQAAAANuaWwAAAABaQEAAAAFY2xhaW0AAAACAAAAEGNsYWltZWRBc3NldElkNTgAAAANdXNlckFkZHJlc3M1OAQAAAAPY2FsbGVyQWRkcmVzczU4CQAEJQAAAAEIBQAAAAFpAAAABmNhbGxlcgMJAQAAAAIhPQAAAAIFAAAADXVzZXJBZGRyZXNzNTgFAAAAD2NhbGxlckFkZHJlc3M1OAkAAAIAAAABAgAAAA5ub3QgYXV0aG9yaXplZAQAAAAQY2xhaW1SZXN1bHRUdXBsZQkBAAAADWludGVybmFsQ2xhaW0AAAADBQAAABBjbGFpbWVkQXNzZXRJZDU4CAUAAAABaQAAAAZjYWxsZXIIBQAAAAFpAAAADXRyYW5zYWN0aW9uSWQEAAAACnRvdGFsc0RpZmYIBQAAABBjbGFpbVJlc3VsdFR1cGxlAAAAAl8xBAAAAAlvdXRBbW91bnQIBQAAABBjbGFpbVJlc3VsdFR1cGxlAAAAAl8yBAAAAApvdXRBc3NldElkCAUAAAAQY2xhaW1SZXN1bHRUdXBsZQAAAAJfMwQAAAAPb3JpZ0ludmVzdEFycmF5CAUAAAAQY2xhaW1SZXN1bHRUdXBsZQAAAAJfNAQAAAAUbmV3Q2xhaW1QZXJpb2RIZWlnaHQIBQAAABBjbGFpbVJlc3VsdFR1cGxlAAAAAl81BAAAABpjbGFpbWVkUHJpY2VBbW91bnRGcm9tRGlmZgkAAZEAAAACBQAAAAp0b3RhbHNEaWZmBQAAACJJZHhEaWZmQ2xhaW1lZFByaWNlQW1vdW50SW5jcmVtZW50BAAAAB1jbGFpbWVkSWRvQXNzZXRBbW91bnRGcm9tRGlmZgkAAZEAAAACBQAAAAp0b3RhbHNEaWZmBQAAACVJZHhEaWZmQ2xhaW1lZElkb0Fzc2V0QW1vdW50SW5jcmVtZW50CQAFFAAAAAIJAARMAAAAAgkBAAAADlNjcmlwdFRyYW5zZmVyAAAAAwgFAAAAAWkAAAAGY2FsbGVyBQAAAAlvdXRBbW91bnQFAAAACm91dEFzc2V0SWQJAARMAAAAAgkBAAAAC1RvdGFsc0VudHJ5AAAABAkBAAAAC2tleUludmVzdG9yAAAAAQUAAAANdXNlckFkZHJlc3M1OAUAAAAPb3JpZ0ludmVzdEFycmF5BQAAAAp0b3RhbHNEaWZmBQAAABRuZXdDbGFpbVBlcmlvZEhlaWdodAkABEwAAAACCQEAAAALVG90YWxzRW50cnkAAAAECQEAAAAJa2V5VG90YWxzAAAAAAkBAAAAGHJlYWRUb3RhbHNBcnJheU9yRGVmYXVsdAAAAAAFAAAACnRvdGFsc0RpZmYFAAAAFG5ld0NsYWltUGVyaW9kSGVpZ2h0CQAETAAAAAIJAQAAABpDbGFpbU9wZXJhdGlvbkhpc3RvcnlFbnRyeQAAAAQFAAAADXVzZXJBZGRyZXNzNTgFAAAAGmNsYWltZWRQcmljZUFtb3VudEZyb21EaWZmBQAAAB1jbGFpbWVkSWRvQXNzZXRBbW91bnRGcm9tRGlmZggFAAAAAWkAAAANdHJhbnNhY3Rpb25JZAUAAAADbmlsBQAAAAR1bml0AAAAAWkBAAAADWNsYWltUkVBRE9OTFkAAAACAAAAEGNsYWltZWRBc3NldElkNTgAAAANdXNlckFkZHJlc3M1OAQAAAAQY2xhaW1SZXN1bHRUdXBsZQkBAAAADWludGVybmFsQ2xhaW0AAAADBQAAABBjbGFpbWVkQXNzZXRJZDU4CQEAAAARQGV4dHJOYXRpdmUoMTA2MikAAAABBQAAAA11c2VyQWRkcmVzczU4CQACWQAAAAECAAAAAAQAAAAKdG90YWxzRGlmZggFAAAAEGNsYWltUmVzdWx0VHVwbGUAAAACXzEEAAAACW91dEFtb3VudAgFAAAAEGNsYWltUmVzdWx0VHVwbGUAAAACXzIEAAAACm91dEFzc2V0SWQIBQAAABBjbGFpbVJlc3VsdFR1cGxlAAAAAl8zBAAAAA9vcmlnSW52ZXN0QXJyYXkIBQAAABBjbGFpbVJlc3VsdFR1cGxlAAAAAl80BAAAABRuZXdDbGFpbVBlcmlvZEhlaWdodAgFAAAAEGNsYWltUmVzdWx0VHVwbGUAAAACXzUEAAAAFWF2YWlsYWJsZVRvQ2xhaW1BcnJheQgFAAAAEGNsYWltUmVzdWx0VHVwbGUAAAACXzYEAAAAG2F2YWlsYWJsZVByaWNlQW1vdW50VG9DbGFpbQkAAZEAAAACBQAAABVhdmFpbGFibGVUb0NsYWltQXJyYXkAAAAAAAAAAAAEAAAAGWF2YWlsYWJsZUlkb0Ftb3VudFRvQ2xhaW0JAAGRAAAAAgUAAAAVYXZhaWxhYmxlVG9DbGFpbUFycmF5AAAAAAAAAAABCQAFFAAAAAIFAAAAA25pbAkABLkAAAACCQAETAAAAAICAAAABiVzJWQlZAkABEwAAAACBQAAAA11c2VyQWRkcmVzczU4CQAETAAAAAIJAAGkAAAAAQUAAAAbYXZhaWxhYmxlUHJpY2VBbW91bnRUb0NsYWltCQAETAAAAAIJAAGkAAAAAQUAAAAZYXZhaWxhYmxlSWRvQW1vdW50VG9DbGFpbQUAAAADbmlsBQAAAANTRVAAAAAAM/PdnQ==", "chainId": 84, "height": 1783658, "applicationStatus": "succeeded", "spentComplexity": 0 } View: original | compacted Prev: 3DQkFSzS9SbXFpYdsFkRrytRbEh4CB6CEaRUMTHzhcna Next: none Diff:
OldNewDifferences
99 let BUFSCALE = toBigInt(1000000000000000000)
1010
1111 func convertPriceAssetIntoIdoAsset (priceAssetAmount,priceAssetMULT,price,priceMULT,idoAssetMULT) = {
12- let bPriceMULT = toBigInt(priceAssetMULT)
13- let bPriceAssetBUF = fraction(toBigInt(priceAssetAmount), BUFSCALE, bPriceMULT)
14- let bAmountAssetBUF = fraction(bPriceAssetBUF, bPriceMULT, toBigInt(price))
12+ let bPriceAssetMULT = toBigInt(priceAssetMULT)
13+ let bIdoAssetMULT = toBigInt(idoAssetMULT)
14+ let bPriceAssetBUF = fraction(toBigInt(priceAssetAmount), BUFSCALE, bPriceAssetMULT)
15+ let bAmountAssetBUF = fraction(bPriceAssetBUF, toBigInt(priceMULT), toBigInt(price))
1516 toInt(fraction(bAmountAssetBUF, toBigInt(idoAssetMULT), BUFSCALE))
1617 }
1718
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) = {
12- let bPriceMULT = toBigInt(priceAssetMULT)
13- let bPriceAssetBUF = fraction(toBigInt(priceAssetAmount), BUFSCALE, bPriceMULT)
14- let bAmountAssetBUF = fraction(bPriceAssetBUF, bPriceMULT, toBigInt(price))
12+ let bPriceAssetMULT = toBigInt(priceAssetMULT)
13+ let bIdoAssetMULT = toBigInt(idoAssetMULT)
14+ let bPriceAssetBUF = fraction(toBigInt(priceAssetAmount), BUFSCALE, bPriceAssetMULT)
15+ let bAmountAssetBUF = fraction(bPriceAssetBUF, toBigInt(priceMULT), toBigInt(price))
1516 toInt(fraction(bAmountAssetBUF, toBigInt(idoAssetMULT), BUFSCALE))
1617 }
1718
1819
1920 let IdxCfgIdoStart = 1
2021
2122 let IdxCfgIdoDuration = 2
2223
2324 let IdxCfgClaimStart = 3
2425
2526 let IdxCfgClaimDuration = 4
2627
2728 let IdxCfgPrice = 5
2829
2930 let IdxCfgPriceMult = 6
3031
3132 let IdxCfgIdoAssetId = 7
3233
3334 let IdxCfgIdoAssetMult = 8
3435
3536 let IdxCfgPriceAssetId = 9
3637
3738 let IdxCfgPriceAssetMult = 10
3839
3940 let IdxCfgMinInvestAmount = 11
4041
4142 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)
4243
4344
4445 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))
4546
4647
4748 let IdxInvTotalAmount = 1
4849
4950 let IdxInvRemainingAmount = 2
5051
5152 let IdxInvClaimedPriceAssetAmount = 3
5253
5354 let IdxInvClaimedIdoAssetAmount = 4
5455
5556 let IdxInvLastClaimedHeight = 5
5657
5758 func formatInvestorS (totalAmount,remainingAmount,claimedPriceAssetAmount,claimedIdoAssetAmount,lastClaimedHeight) = makeString(["%d%d%d%d%d", totalAmount, remainingAmount, claimedPriceAssetAmount, claimedIdoAssetAmount, lastClaimedHeight], SEP)
5859
5960
6061 func formatInvestor (totalAmount,remainingAmount,claimedPriceAssetAmount,claimedIdoAssetAmount,lastClaimedHeight) = formatInvestorS(toString(totalAmount), toString(remainingAmount), toString(claimedPriceAssetAmount), toString(claimedIdoAssetAmount), toString(lastClaimedHeight))
6162
6263
6364 func formatHistoryRecord (priceAssetAmount,idoAssetAmount) = makeString(["%d%d%d%d", toString(height), toString(lastBlock.timestamp), toString(priceAssetAmount), toString(idoAssetAmount)], SEP)
6465
6566
6667 func keyConfig () = "%s__config"
6768
6869
6970 func keyInvestor (userAddress) = ("%s__" + userAddress)
7071
7172
7273 func keyTotals () = "%s__totals"
7374
7475
7576 func keyOperationHistoryRecord (type,userAddress,txId58) = makeString(["%s%s%s%s__history", type, userAddress, txId58], SEP)
7677
7778
7879 func readConfigArray () = split(getStringOrFail(keyConfig()), SEP)
7980
8081
8182 func readTotalsArrayOrDefaultByCustomKey (customKey) = split(valueOrElse(getString(customKey), formatInvestorS("0", "0", "0", "0", "0")), SEP)
8283
8384
8485 func readTotalsArrayOrDefault () = readTotalsArrayOrDefaultByCustomKey(keyTotals())
8586
8687
8788 func readInvestorArrayOrDefault (userAddress) = readTotalsArrayOrDefaultByCustomKey(keyInvestor(userAddress))
8889
8990
9091 func readInvestorArrayOrFail (userAddress) = split(getStringOrFail(keyInvestor(userAddress)), SEP)
9192
9293
9394 let IdxDiffTotalIncrement = 0
9495
9596 let IdxDiffRemainingPriceAmountIncrement = 1
9697
9798 let IdxDiffClaimedPriceAmountIncrement = 2
9899
99100 let IdxDiffClaimedIdoAssetAmountIncrement = 3
100101
101102 func TotalsEntry (key,origArray,incrementDiff,newLastClaimedHeight) = {
102103 let totalAmount = parseIntValue(origArray[IdxInvTotalAmount])
103104 let remainingAmount = parseIntValue(origArray[IdxInvRemainingAmount])
104105 let claimedPriceAssetAmount = parseIntValue(origArray[IdxInvClaimedPriceAssetAmount])
105106 let claimedIdoAssetAmount = parseIntValue(origArray[IdxInvClaimedIdoAssetAmount])
106107 let lastClaimedHeight = parseIntValue(origArray[IdxInvLastClaimedHeight])
107108 let newTotalAmount = (totalAmount + incrementDiff[IdxDiffTotalIncrement])
108109 let newRemainingAmount = (remainingAmount + incrementDiff[IdxDiffRemainingPriceAmountIncrement])
109110 let newClaimedPriceAssetAmount = (claimedPriceAssetAmount + incrementDiff[IdxDiffClaimedPriceAmountIncrement])
110111 let newClaimedIdoAssetAmount = (claimedIdoAssetAmount + incrementDiff[IdxDiffClaimedIdoAssetAmountIncrement])
111112 if ((0 > newRemainingAmount))
112113 then throw("invalid math")
113114 else StringEntry(key, formatInvestor(newTotalAmount, newRemainingAmount, newClaimedPriceAssetAmount, newClaimedIdoAssetAmount, newLastClaimedHeight))
114115 }
115116
116117
117118 func InvestOperationHistoryEntry (userAddress,priceAssetAmount,idoAssetAmount,txId) = StringEntry(keyOperationHistoryRecord("invest", userAddress, toBase58String(txId)), formatHistoryRecord(priceAssetAmount, idoAssetAmount))
118119
119120
120121 func ClaimOperationHistoryEntry (userAddress,priceAssetAmount,idoAssetAmount,txId) = StringEntry(keyOperationHistoryRecord("claim", userAddress, toBase58String(txId)), formatHistoryRecord(priceAssetAmount, idoAssetAmount))
121122
122123
123124 func internalClaim (claimedAssetId58,userAddress,txId) = {
124125 let cfgArray = readConfigArray()
125126 let claimStart = parseIntValue(cfgArray[IdxCfgClaimStart])
126127 let claimDuration = parseIntValue(cfgArray[IdxCfgClaimDuration])
127128 let claimEnd = (claimStart + claimDuration)
128129 let price = parseIntValue(cfgArray[IdxCfgPrice])
129130 let priceMult = parseIntValue(cfgArray[IdxCfgPriceMult])
130131 let idoAssetId58 = cfgArray[IdxCfgIdoAssetId]
131132 let idoAssetId = fromBase58String(idoAssetId58)
132133 let idoAssetMult = parseIntValue(cfgArray[IdxCfgIdoAssetMult])
133134 let priceAssetId58 = cfgArray[IdxCfgPriceAssetId]
134135 let priceAssetId = fromBase58String(priceAssetId58)
135136 let priceAssetMult = parseIntValue(cfgArray[IdxCfgPriceAssetMult])
136137 let userAddress58 = toString(userAddress)
137138 let origInvestArray = readInvestorArrayOrFail(userAddress58)
138139 let investTotalAmount = parseIntValue(origInvestArray[IdxInvTotalAmount])
139140 let investLastClaimedHeight = parseIntValue(origInvestArray[IdxInvLastClaimedHeight])
140141 let newClaimPeriodHeight = if ((height > claimEnd))
141142 then claimEnd
142143 else if ((claimStart > height))
143144 then claimStart
144145 else height
145146 let claimingBlocks = (newClaimPeriodHeight - investLastClaimedHeight)
146147 let claimingPriceAssetAmount = fraction(investTotalAmount, claimingBlocks, claimDuration)
147148 let claimingIdoAssetAmount = convertPriceAssetIntoIdoAsset(claimingPriceAssetAmount, priceAssetMult, price, priceMult, idoAssetMult)
148149 if ((claimedAssetId58 == priceAssetId58))
149150 then $Tuple6([0, -(claimingPriceAssetAmount), claimingPriceAssetAmount, 0], claimingPriceAssetAmount, priceAssetId, origInvestArray, newClaimPeriodHeight, [claimingPriceAssetAmount, claimingIdoAssetAmount])
150151 else if ((claimedAssetId58 == idoAssetId58))
151152 then $Tuple6([0, -(claimingPriceAssetAmount), 0, claimingIdoAssetAmount], claimingIdoAssetAmount, idoAssetId, origInvestArray, newClaimPeriodHeight, [claimingPriceAssetAmount, claimingIdoAssetAmount])
152153 else throw(("unsupported assetId: " + claimedAssetId58))
153154 }
154155
155156
156157 @Callable(i)
157158 func constructor (idoStart,idoDuration,claimStart,claimDuration,price,priceAssetId58,minInvestAmount) = {
158159 let priceMult = ((100 * 1000) * 1000)
159160 let idoEnd = (idoStart + idoDuration)
160161 if (isDefined(getString(keyConfig())))
161162 then throw("already initialized")
162163 else if (("3N4Aib5iubWiGMzdTh6wWiVDVbo32oeVUmH" != toString(i.caller)))
163164 then throw("not authorized")
164165 else if ((size(i.payments) != 1))
165166 then throw("exactly 1 payment must be attached")
166167 else if ((idoEnd >= claimStart))
167168 then throw("claimStart must be greater than idoEnd")
168169 else {
169170 let pmt = value(i.payments[0])
170171 let idoAssetId = value(pmt.assetId)
171172 let idoAssetInfo = valueOrErrorMessage(assetInfo(idoAssetId), "fail to load ido asset info")
172173 let idoAssetId58 = toBase58String(idoAssetId)
173174 let idoAssetMult = pow(10, 0, idoAssetInfo.decimals, 0, 0, DOWN)
174175 let priceAssetId = fromBase58String(priceAssetId58)
175176 let priceAssetInfo = valueOrErrorMessage(assetInfo(priceAssetId), "fail to load price asset info")
176177 let priceAssetMult = pow(10, 0, priceAssetInfo.decimals, 0, 0, DOWN)
177178 let origTotalsArray = readTotalsArrayOrDefault()
178179 let totalsDiff = [0, 0, 0, 0]
179180 [StringEntry(keyConfig(), fromatConfig(idoStart, idoDuration, claimStart, claimDuration, price, priceMult, idoAssetId58, idoAssetMult, priceAssetId58, priceAssetMult, minInvestAmount, pmt.amount)), TotalsEntry(keyTotals(), origTotalsArray, totalsDiff, claimStart)]
180181 }
181182 }
182183
183184
184185
185186 @Callable(i)
186187 func invest () = {
187188 let cfgArray = readConfigArray()
188189 let idoStart = parseIntValue(cfgArray[IdxCfgIdoStart])
189190 let idoDuration = parseIntValue(cfgArray[IdxCfgIdoDuration])
190191 let idoEnd = (idoStart + idoDuration)
191192 let claimStart = parseIntValue(cfgArray[IdxCfgClaimStart])
192193 let claimDuration = parseIntValue(cfgArray[IdxCfgClaimDuration])
193194 let price = parseIntValue(cfgArray[IdxCfgPrice])
194195 let priceMult = parseIntValue(cfgArray[IdxCfgPriceMult])
195196 let idoAssetId58 = cfgArray[IdxCfgIdoAssetId]
196197 let idoAssetId = fromBase58String(idoAssetId58)
197198 let idoAssetMult = parseIntValue(cfgArray[IdxCfgIdoAssetMult])
198199 let priceAssetId58 = cfgArray[IdxCfgPriceAssetId]
199200 let priceAssetId = fromBase58String(priceAssetId58)
200201 let priceAssetMult = parseIntValue(cfgArray[IdxCfgPriceAssetMult])
201202 let minIvestAmount = parseIntValue(cfgArray[IdxCfgMinInvestAmount])
202203 let userAddress = toString(i.caller)
203204 if ((idoStart > height))
204205 then throw("ido has not been started yet")
205206 else if ((height > idoEnd))
206207 then throw("ido has been already ended")
207208 else if ((size(i.payments) != 1))
208209 then throw("exactly 1 payment is expected")
209210 else {
210211 let pmt = value(i.payments[0])
211212 let pmtAssetId = value(pmt.assetId)
212213 let pmtAmount = pmt.amount
213214 if ((pmtAssetId != priceAssetId))
214215 then throw((("invalid payment asset id: " + toBase58String(pmtAssetId)) + " is expected"))
215216 else {
216217 let origInvestorArray = readInvestorArrayOrDefault(userAddress)
217218 let origTotalsArray = readTotalsArrayOrDefault()
218219 let newPriceTotalAmount = (parseIntValue(origTotalsArray[IdxInvTotalAmount]) + pmtAmount)
219220 let requiredIdoAssetAmount = (newPriceTotalAmount * 100)
220221 if ((requiredIdoAssetAmount > assetBalance(this, idoAssetId)))
221222 then throw("IDO asset has been - sold consider to use smaller payment")
222223 else {
223224 let totalsDiff = [pmtAmount, pmtAmount, 0, 0]
224225 [TotalsEntry(keyInvestor(userAddress), origInvestorArray, totalsDiff, claimStart), TotalsEntry(keyTotals(), origTotalsArray, totalsDiff, claimStart), InvestOperationHistoryEntry(userAddress, pmtAmount, 0, i.transactionId)]
225226 }
226227 }
227228 }
228229 }
229230
230231
231232
232233 @Callable(i)
233234 func claim (claimedAssetId58,userAddress58) = {
234235 let callerAddress58 = toString(i.caller)
235236 if ((userAddress58 != callerAddress58))
236237 then throw("not authorized")
237238 else {
238239 let claimResultTuple = internalClaim(claimedAssetId58, i.caller, i.transactionId)
239240 let totalsDiff = claimResultTuple._1
240241 let outAmount = claimResultTuple._2
241242 let outAssetId = claimResultTuple._3
242243 let origInvestArray = claimResultTuple._4
243244 let newClaimPeriodHeight = claimResultTuple._5
244245 let claimedPriceAmountFromDiff = totalsDiff[IdxDiffClaimedPriceAmountIncrement]
245246 let claimedIdoAssetAmountFromDiff = totalsDiff[IdxDiffClaimedIdoAssetAmountIncrement]
246247 $Tuple2([ScriptTransfer(i.caller, outAmount, outAssetId), TotalsEntry(keyInvestor(userAddress58), origInvestArray, totalsDiff, newClaimPeriodHeight), TotalsEntry(keyTotals(), readTotalsArrayOrDefault(), totalsDiff, newClaimPeriodHeight), ClaimOperationHistoryEntry(userAddress58, claimedPriceAmountFromDiff, claimedIdoAssetAmountFromDiff, i.transactionId)], unit)
247248 }
248249 }
249250
250251
251252
252253 @Callable(i)
253254 func claimREADONLY (claimedAssetId58,userAddress58) = {
254255 let claimResultTuple = internalClaim(claimedAssetId58, addressFromStringValue(userAddress58), fromBase58String(""))
255256 let totalsDiff = claimResultTuple._1
256257 let outAmount = claimResultTuple._2
257258 let outAssetId = claimResultTuple._3
258259 let origInvestArray = claimResultTuple._4
259260 let newClaimPeriodHeight = claimResultTuple._5
260261 let availableToClaimArray = claimResultTuple._6
261262 let availablePriceAmountToClaim = availableToClaimArray[0]
262263 let availableIdoAmountToClaim = availableToClaimArray[1]
263264 $Tuple2(nil, makeString(["%s%d%d", userAddress58, toString(availablePriceAmountToClaim), toString(availableIdoAmountToClaim)], SEP))
264265 }
265266
266267

github/deemru/w8io/3ef1775 
51.11 ms